🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

shadowaudit

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

shadowaudit - npm Package Compare versions

Comparing version
0.8.2
to
0.9.0
+68
dist/scanners/grape-auth.d.ts
/**
* v0.9.0: Grape API auth detection.
*
* Grape uses `before` blocks for auth (not `before_action` like Rails):
*
* before do
* authenticate!
* end
*
* before { authenticate_non_get! }
*
* before do
* authenticate! unless current_user
* end
*
* Auth can be at the class level (applies to all routes in the class) or
* inside a `resource`/`namespace` block (applies only to inner routes).
*
* We detect auth by scanning the `before` block content for known auth
* method names. This is a string-contains check, not a Ruby parser —
* good enough for the vast majority of real-world Grape code.
*/
/**
* Hardcoded Grape auth method names.
*
* These are the method names that appear inside `before do ... end` blocks
* in Grape APIs to enforce authentication. Finding any of these in a `before`
* block means the routes in that scope require auth.
*
* Sources:
* - GitLab: `authenticate!`, `authenticate_non_get!`, `authenticate_by_gitlab_shell_token!`,
* `authenticated_as_admin!`, `authenticated_with_can_read_all_resources!`, `guard!`
* - Grape README: `authenticate!` (custom helper)
* - Devise: `authenticate_user!`
* - Doorkeeper: `doorkeeper_authorize!`
* - Pundit: `authorize!`
*/
export declare const GRAPE_AUTH_METHODS: readonly string[];
/**
* Checks whether a `before` block's content contains any auth method call.
*
* @param beforeBlockContent The source code inside the `before do ... end` block
* @returns true if any auth method is found
*
* @example
* detectGrapeAuth('authenticate!') // true
* detectGrapeAuth('authenticate_non_get!') // true
* detectGrapeAuth('set_current_organization') // false (not auth)
* detectGrapeAuth('authenticate! unless current_user') // true
*/
export declare function detectGrapeAuth(beforeBlockContent: string): boolean;
/**
* Extracts the content of a `before` block from a line and optionally
* subsequent lines.
*
* Handles two forms:
* 1. `before { authenticate! }` — inline lambda, content is between { }
* 2. `before do ... end` — multiline block, content is between do/end
*
* For form 2, this function returns the content on the SAME line after `do`
* (the caller is responsible for collecting subsequent lines until `end`).
*
* @returns The inline content (form 1) or the same-line content after `do` (form 2),
* or null if the line doesn't open a before block.
*/
export declare function extractBeforeBlockContent(line: string): string | null;
export default detectGrapeAuth;
//# sourceMappingURL=grape-auth.d.ts.map
{"version":3,"file":"grape-auth.d.ts","sourceRoot":"","sources":["../../src/scanners/grape-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAgB/C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBrE;AAED,eAAe,eAAe,CAAC"}
"use strict";
/**
* v0.9.0: Grape API auth detection.
*
* Grape uses `before` blocks for auth (not `before_action` like Rails):
*
* before do
* authenticate!
* end
*
* before { authenticate_non_get! }
*
* before do
* authenticate! unless current_user
* end
*
* Auth can be at the class level (applies to all routes in the class) or
* inside a `resource`/`namespace` block (applies only to inner routes).
*
* We detect auth by scanning the `before` block content for known auth
* method names. This is a string-contains check, not a Ruby parser —
* good enough for the vast majority of real-world Grape code.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.GRAPE_AUTH_METHODS = void 0;
exports.detectGrapeAuth = detectGrapeAuth;
exports.extractBeforeBlockContent = extractBeforeBlockContent;
/**
* Hardcoded Grape auth method names.
*
* These are the method names that appear inside `before do ... end` blocks
* in Grape APIs to enforce authentication. Finding any of these in a `before`
* block means the routes in that scope require auth.
*
* Sources:
* - GitLab: `authenticate!`, `authenticate_non_get!`, `authenticate_by_gitlab_shell_token!`,
* `authenticated_as_admin!`, `authenticated_with_can_read_all_resources!`, `guard!`
* - Grape README: `authenticate!` (custom helper)
* - Devise: `authenticate_user!`
* - Doorkeeper: `doorkeeper_authorize!`
* - Pundit: `authorize!`
*/
exports.GRAPE_AUTH_METHODS = [
'authenticate!',
'authenticate_non_get!',
'authenticate_user!',
'authenticate_admin!',
'authenticate_by_gitlab_shell_token!',
'authenticate_by_gitlab_shell_or_workhorse_token!',
'authenticated_with_can_read_all_resources!',
'authenticated_as_admin!',
'authorize_read_application_statistics!',
'require_user!',
'require_login!',
'require_admin!',
'doorkeeper_authorize!',
'guard!',
'authorize!',
];
/**
* Checks whether a `before` block's content contains any auth method call.
*
* @param beforeBlockContent The source code inside the `before do ... end` block
* @returns true if any auth method is found
*
* @example
* detectGrapeAuth('authenticate!') // true
* detectGrapeAuth('authenticate_non_get!') // true
* detectGrapeAuth('set_current_organization') // false (not auth)
* detectGrapeAuth('authenticate! unless current_user') // true
*/
function detectGrapeAuth(beforeBlockContent) {
for (const method of exports.GRAPE_AUTH_METHODS) {
if (beforeBlockContent.includes(method)) {
return true;
}
}
return false;
}
/**
* Extracts the content of a `before` block from a line and optionally
* subsequent lines.
*
* Handles two forms:
* 1. `before { authenticate! }` — inline lambda, content is between { }
* 2. `before do ... end` — multiline block, content is between do/end
*
* For form 2, this function returns the content on the SAME line after `do`
* (the caller is responsible for collecting subsequent lines until `end`).
*
* @returns The inline content (form 1) or the same-line content after `do` (form 2),
* or null if the line doesn't open a before block.
*/
function extractBeforeBlockContent(line) {
// Form 1: before { ... }
const inlineMatch = line.match(/before\s*\{([^}]+)\}/);
if (inlineMatch) {
return inlineMatch[1];
}
// Form 2: before do ... (content on same line after do)
const doMatch = line.match(/before\s+do\s*(.*)$/);
if (doMatch) {
return doMatch[1] || '';
}
// Form 3: before do (nothing on same line, content is on next lines)
// Caller handles this by collecting lines until `end`.
if (/^\s*before\s+do\s*$/.test(line)) {
return '';
}
return null;
}
exports.default = detectGrapeAuth;
//# sourceMappingURL=grape-auth.js.map
{"version":3,"file":"grape-auth.js","sourceRoot":"","sources":["../../src/scanners/grape-auth.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AA+CH,0CAOC;AAgBD,8DAoBC;AAxFD;;;;;;;;;;;;;;GAcG;AACU,QAAA,kBAAkB,GAAsB;IACnD,eAAe;IACf,uBAAuB;IACvB,oBAAoB;IACpB,qBAAqB;IACrB,qCAAqC;IACrC,kDAAkD;IAClD,4CAA4C;IAC5C,yBAAyB;IACzB,wCAAwC;IACxC,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;IACvB,QAAQ;IACR,YAAY;CACb,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,kBAA0B;IACxD,KAAK,MAAM,MAAM,IAAI,0BAAkB,EAAE,CAAC;QACxC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,uDAAuD;IACvD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kBAAe,eAAe,CAAC"}
import { Route } from '../types';
/**
* Scans a project for Grape API routes.
*
* Looks for:
* - lib/api/api.rb (root API class — has prefix/version/mount declarations)
* - lib/api/(subfiles).rb (mounted API classes)
*
* If lib/api/api.rb exists, it's parsed first to extract global prefix/version
* and mount declarations. Each mounted class is then parsed with the correct
* base path.
*
* If no api.rb exists but lib/api/*.rb files are present, each file is parsed
* independently with no global prefix (rare case — standalone Grape apps).
*
* @param dir Project root directory
* @param ignore Directories to ignore
* @param authPatterns Additional auth patterns (user-configured, for Rails compat)
* @param concurrency Parallel file read concurrency
*/
export declare function scanGrape(dir: string, ignore: string[], authPatterns?: string[], concurrency?: number): Promise<Route[]>;
/**
* Detects whether a project uses Grape by checking for lib/api/api.rb
* or any files under lib/api/.
*/
export declare function hasGrapeApi(dir: string): boolean;
export default scanGrape;
//# sourceMappingURL=grape.d.ts.map
{"version":3,"file":"grape.d.ts","sourceRoot":"","sources":["../../src/scanners/grape.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAwmBjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,GAAE,MAAM,EAAO,EAC3B,WAAW,GAAE,MAA4B,GACxC,OAAO,CAAC,KAAK,EAAE,CAAC,CAgGlB;AAeD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQhD;AAED,eAAe,SAAS,CAAC"}
"use strict";
var __createBinding = (this && this.__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 = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.scanGrape = scanGrape;
exports.hasGrapeApi = hasGrapeApi;
const glob_1 = __importDefault(require("glob"));
const path = __importStar(require("path"));
const logger_1 = require("../utils/logger");
const parallel_1 = require("./utils/parallel");
const grape_auth_1 = require("./grape-auth");
function glob(pattern, options) {
return new Promise((resolve, reject) => {
(0, glob_1.default)(pattern, options, (err, matches) => {
if (err)
reject(err);
else
resolve(matches ?? []);
});
});
}
// ─────────────────────────────────────────────────────────────────────
// Path normalization
// ─────────────────────────────────────────────────────────────────────
function joinPath(...segments) {
let joined = segments.join('/');
joined = joined.replace(/\/+/g, '/');
if (!joined.startsWith('/'))
joined = '/' + joined;
if (joined.length > 1 && joined.endsWith('/')) {
joined = joined.slice(0, -1);
}
return joined;
}
/**
* Converts Grape `:param` syntax to OpenAPI `{param}`.
* Also handles `*path` (wildcard) → `{path}`.
*/
function convertParamsToOpenAPI(grapePath) {
let p = grapePath;
// :param → {param}
p = p.replace(/:(\w+)/g, '{$1}');
// *path (wildcard) → {path}
p = p.replace(/\*(\w+)/g, '{$1}');
// * alone → {glob}
p = p.replace(/\*/g, '{glob}');
return p;
}
// ─────────────────────────────────────────────────────────────────────
// Ruby class name → file path conversion
// ─────────────────────────────────────────────────────────────────────
/**
* Converts a Ruby class name to a file path under lib/api/.
*
* ::API::Groups → lib/api/groups.rb
* ::API::Admin::Dictionary → lib/api/admin/dictionary.rb
* ::API::Ci::Catalog → lib/api/ci/catalog.rb
*
* Algorithm:
* 1. Strip leading `::`
* 2. Strip the `API` prefix (it maps to lib/api/)
* 3. Snake_case each remaining segment
* 4. Join with `/` and append `.rb`
*/
function rubyClassNameToApiFilePath(className) {
// Strip leading ::
let name = className.replace(/^::/, '');
// Strip API:: prefix (the lib/api/ directory IS the API namespace)
if (name.startsWith('API::')) {
name = name.slice(5);
}
// Split on :: and snake_case each segment
const parts = name.split('::').filter(Boolean);
if (parts.length === 0)
return '';
const snakeParts = parts.map((p) => p
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
.replace(/([a-z\d])([A-Z])/g, '$1_$2')
.toLowerCase());
return `lib/api/${snakeParts.join('/')}.rb`;
}
// ─────────────────────────────────────────────────────────────────────
// Comment stripping (shared with Rails scanner — duplicated for now)
// ─────────────────────────────────────────────────────────────────────
function stripComment(line) {
let result = '';
let inSingle = false;
let inDouble = false;
let prev = '';
for (let i = 0; i < line.length; i++) {
const ch = line[i];
if (ch === '#' && !inSingle && !inDouble) {
break;
}
if (ch === "'" && !inDouble && prev !== '\\')
inSingle = !inSingle;
if (ch === '"' && !inSingle && prev !== '\\')
inDouble = !inDouble;
result += ch;
prev = ch;
}
return result.trim();
}
// ─────────────────────────────────────────────────────────────────────
// Block detection
// ─────────────────────────────────────────────────────────────────────
/**
* Regex patterns for Grape DSL constructs.
* Each pattern is anchored to the start of the (comment-stripped) line.
*/
// resource :groups do | resource 'groups' do | resource :groups, requirements: X do
const RESOURCE_REGEX = /^resource\s+(?::(\w+)|['"]([^'"]+)['"])/;
// namespace :admin do | namespace 'admin' do | namespace do (anonymous)
const NAMESPACE_REGEX = /^namespace\s+(?::(\w+)|['"]([^'"]+)['"])?/;
// segment :foo do (Grape-specific, like namespace but for path segments)
const SEGMENT_REGEX = /^segment\s+(?::(\w+)|['"]([^'"]+)['"])/;
// route_param :id do
const ROUTE_PARAM_REGEX = /^route_param\s+:(\w+)/;
// group :foo do (Grape alias for resource)
const GROUP_REGEX = /^group\s+(?::(\w+)|['"]([^'"]+)['"])/;
// get / post / put / patch / delete / head / options
// Captures: method, then optionally a path (string or symbol)
const HTTP_METHOD_REGEX = /^(get|post|put|patch|delete|head|options)\s+(?::(\w+)|['"]([^'"]+)['"])?/;
// route :any, '*path' (catch-all)
const ROUTE_ANY_REGEX = /^route\s+:(\w+)\s*,\s*['"]([^'"]+)['"]/;
// prefix :api
const PREFIX_REGEX = /^prefix\s+:(\w+)/;
// version 'v4', using: :path | version :v4
const VERSION_REGEX = /^version\s+['"]?(\w+)['"]?/;
// format :json
const FORMAT_REGEX = /^format\s+:(\w+)/;
// mount ::API::Groups | mount API::Groups
const MOUNT_REGEX = /^mount\s+(::?[A-Z][\w:]*)/;
// before do | before {
const BEFORE_REGEX = /^before\s*(do|\{)/;
// helpers do | helpers do ... end (skip)
const HELPERS_REGEX = /^helpers\s+do/;
// params do (skip — param validation, not routing)
const PARAMS_REGEX = /^params\s+do/;
// desc '...' do | desc "..." do (skip — documentation)
const DESC_REGEX = /^desc\s+['"]/;
// end (block terminator)
const END_REGEX = /^\s*end\s*$/;
// allow_access_with_scope :api (skip)
const ALLOW_SCOPE_REGEX = /^allow_access_with_scope\s+:/;
// route_setting :authorization, ... (skip)
const ROUTE_SETTING_REGEX = /^route_setting\s+:/;
// include Module (skip)
const INCLUDE_REGEX = /^include\s+/;
// ─────────────────────────────────────────────────────────────────────
// Parser
// ─────────────────────────────────────────────────────────────────────
function makeRootContext(className, basePath) {
return {
pathPrefix: basePath,
hasAuth: false,
className,
currentResource: null,
};
}
function cloneContext(ctx) {
return {
pathPrefix: ctx.pathPrefix,
hasAuth: ctx.hasAuth,
className: ctx.className,
currentResource: ctx.currentResource,
};
}
function currentCtx(state) {
return state.contextStack[state.contextStack.length - 1];
}
/**
* Main parsing function — processes a single Grape API file.
*
* @param code File content
* @param filename Relative path (for reporting)
* @param className Ruby class name (e.g. 'API::Groups')
* @param basePath Base path prefix (e.g. '/api/v4')
* @param apiFiles Map of all API files (for mount resolution)
* @param visitedFiles Set of already-parsed files (cycle detection)
* @param allRoutes Accumulator for all parsed routes (across mounts)
*/
function parseGrapeFile(code, filename, className, basePath, apiFiles, visitedFiles, allRoutes) {
// Cycle detection — don't re-parse the same file
if (visitedFiles.has(filename)) {
logger_1.logger.warn(`Grape: skipping already-parsed file: ${filename}`);
return;
}
visitedFiles.add(filename);
const lines = code.split('\n');
// State for this parse pass
const state = {
lines,
lineIdx: 0,
contextStack: [makeRootContext(className, basePath)],
routes: [],
filename,
baseDir: '',
mounts: [],
prefix: null,
version: null,
visitedFiles,
apiFiles,
};
// Track block depth for skip blocks (helpers, params, desc)
// When skipDepth > 0, we're inside a skip block and ignore everything
// except matching `end` to decrement the depth.
let skipDepth = 0;
// Track before-block collection (multiline)
let inBeforeBlock = false;
let beforeContent = '';
while (state.lineIdx < lines.length) {
const rawLine = lines[state.lineIdx];
const line = stripComment(rawLine);
const lineNum = state.lineIdx + 1;
state.lineIdx++;
if (!line)
continue;
// If we're inside a skip block, only look for `end` to exit.
// v0.9.0 FIX: Count `do`/`end` balance to handle nested blocks
// inside route handlers (e.g., `if ... end` inside `get do ... end`).
if (skipDepth > 0) {
// Count `do` keywords that open new blocks (but NOT `do` that's part
// of a route declaration we already handled)
const doCount = (line.match(/\bdo\b/g) || []).length;
const endCount = (line.match(END_REGEX) || []).length;
skipDepth += doCount - endCount;
if (skipDepth <= 0) {
skipDepth = 0;
}
continue;
}
// If we're collecting a multiline before block, accumulate content
if (inBeforeBlock) {
if (END_REGEX.test(line)) {
// End of before block — check for auth
if ((0, grape_auth_1.detectGrapeAuth)(beforeContent)) {
currentCtx(state).hasAuth = true;
}
beforeContent = '';
inBeforeBlock = false;
continue;
}
// Accumulate content (skip lines that are just `do` or empty)
beforeContent += ' ' + line;
continue;
}
// ─── Skip blocks (helpers, params, desc, route_setting, include) ───
if (HELPERS_REGEX.test(line) || PARAMS_REGEX.test(line) || DESC_REGEX.test(line)) {
// These open a `do ... end` block — skip until matching `end`
// But some `desc` blocks are single-line: `desc 'List groups'`
// (no `do`). Check if line ends with `do`.
if (/\bdo\s*$/.test(line) || /\bdo\s+/.test(line)) {
skipDepth = 1; // do/end balance tracking handles nesting
continue;
}
else {
// Single-line desc — just skip this line
continue;
}
}
if (ROUTE_SETTING_REGEX.test(line) || ALLOW_SCOPE_REGEX.test(line) || INCLUDE_REGEX.test(line)) {
// Single-line statements — skip
continue;
}
// ─── Global configuration (prefix, version, format) ───
// Only valid at the root API class level, but we parse them everywhere
// and apply to the current context's pathPrefix.
const prefixMatch = line.match(PREFIX_REGEX);
if (prefixMatch) {
state.prefix = prefixMatch[1];
// Update root context's pathPrefix
state.contextStack[0].pathPrefix = joinPath('/', state.prefix || '');
continue;
}
const versionMatch = line.match(VERSION_REGEX);
if (versionMatch) {
state.version = versionMatch[1];
// Insert version after prefix in root context
const prefixPart = state.prefix ? `/${state.prefix}` : '';
state.contextStack[0].pathPrefix = joinPath(prefixPart, state.version || '');
continue;
}
if (FORMAT_REGEX.test(line)) {
// format :json — no path impact, skip
continue;
}
// ─── before blocks (auth detection) ───
const beforeMatch = line.match(BEFORE_REGEX);
if (beforeMatch) {
if (beforeMatch[1] === '{') {
// Inline lambda: before { authenticate! }
const inlineContent = (0, grape_auth_1.extractBeforeBlockContent)(line);
if (inlineContent !== null && (0, grape_auth_1.detectGrapeAuth)(inlineContent)) {
currentCtx(state).hasAuth = true;
}
}
else {
// Multiline: before do ... end
// Check if content is on the same line
const sameLineContent = (0, grape_auth_1.extractBeforeBlockContent)(line);
if (sameLineContent !== null && sameLineContent.trim()) {
// Content on same line — check immediately
if ((0, grape_auth_1.detectGrapeAuth)(sameLineContent)) {
currentCtx(state).hasAuth = true;
}
}
else {
// Content on subsequent lines — start collecting
inBeforeBlock = true;
beforeContent = '';
}
}
continue;
}
// ─── mount ::API::Foo ───
const mountMatch = line.match(MOUNT_REGEX);
if (mountMatch) {
const mountedClassName = mountMatch[1];
state.mounts.push(mountedClassName);
// Resolve to file path and parse recursively
const mountedFilePath = rubyClassNameToApiFilePath(mountedClassName);
if (mountedFilePath && apiFiles.has(mountedFilePath)) {
const mountedContent = apiFiles.get(mountedFilePath);
// Mounts inherit the current context's pathPrefix + hasAuth
const ctx = currentCtx(state);
parseGrapeFile(mountedContent, mountedFilePath, mountedClassName.replace(/^::/, ''), ctx.pathPrefix, apiFiles, visitedFiles, allRoutes);
}
else if (mountedFilePath) {
logger_1.logger.warn(`Grape: mount target not found: ${mountedClassName} → ${mountedFilePath}`);
}
continue;
}
// ─── Block-opening constructs (resource, namespace, segment, group, route_param) ───
let blockPath = null;
let blockResource = null;
const resourceMatch = line.match(RESOURCE_REGEX);
const namespaceMatch = line.match(NAMESPACE_REGEX);
const segmentMatch = line.match(SEGMENT_REGEX);
const groupMatch = line.match(GROUP_REGEX);
const routeParamMatch = line.match(ROUTE_PARAM_REGEX);
if (resourceMatch) {
blockPath = resourceMatch[1] || resourceMatch[2] || '';
blockResource = blockPath;
}
else if (namespaceMatch) {
// namespace can be anonymous (no name) — transparent scope
blockPath = namespaceMatch[1] || namespaceMatch[2] || '';
// If empty, it's `namespace do` — transparent (no path change)
if (!blockPath && /\bdo\s*$/.test(line)) {
blockPath = '';
}
}
else if (segmentMatch) {
blockPath = segmentMatch[1] || segmentMatch[2] || '';
}
else if (groupMatch) {
blockPath = groupMatch[1] || groupMatch[2] || '';
blockResource = blockPath;
}
else if (routeParamMatch) {
// route_param :id → append /:id
blockPath = `:${routeParamMatch[1]}`;
}
if (blockPath !== null && (/\bdo\s*$/.test(line) || /\bdo\s+/.test(line))) {
// Open a new context
const newCtx = cloneContext(currentCtx(state));
if (blockPath) {
newCtx.pathPrefix = joinPath(newCtx.pathPrefix, blockPath);
}
if (blockResource) {
newCtx.currentResource = blockResource;
}
state.contextStack.push(newCtx);
continue;
}
// ─── Route declarations (get, post, put, patch, delete, head, options) ───
const httpMatch = line.match(HTTP_METHOD_REGEX);
if (httpMatch) {
const method = httpMatch[1].toUpperCase();
// Path is group 2 (symbol) or group 3 (string), or empty (index action)
const routePath = httpMatch[2] || httpMatch[3] || '';
const ctx = currentCtx(state);
const fullPath = routePath
? joinPath(ctx.pathPrefix, routePath)
: ctx.pathPrefix;
// Determine controllerAction — use class name + method name
const actionName = routePath
? routePath.replace(/[:/'"]/g, '_').replace(/^_+|_+$/g, '') || 'index'
: 'index';
const controllerAction = `${ctx.className}#${actionName}`;
state.routes.push({
method,
path: convertParamsToOpenAPI(fullPath),
controllerAction,
hasAuth: ctx.hasAuth,
isCatchAll: false,
line: lineNum,
});
// v0.9.0 CRITICAL FIX: Route declarations open a `do ... end` block
// containing the handler code. We must SKIP this block entirely,
// otherwise the handler's `end` would pop our resource context.
// Set skipDepth to 1 if the line ends with `do` (multiline block).
if (/\bdo\s*$/.test(line) || /\bdo\s+/.test(line)) {
skipDepth = 1;
}
continue;
}
// ─── catch-all route (route :any, '*path') ───
const routeAnyMatch = line.match(ROUTE_ANY_REGEX);
if (routeAnyMatch) {
// route :any, '*path' — catch-all, mark as USE (excluded from comparator)
state.routes.push({
method: 'USE',
path: routeAnyMatch[2],
controllerAction: `${currentCtx(state).className}#catch_all`,
hasAuth: currentCtx(state).hasAuth,
isCatchAll: true,
line: lineNum,
});
continue;
}
// ─── Block terminator (end) ───
if (END_REGEX.test(line)) {
if (state.contextStack.length > 1) {
state.contextStack.pop();
}
continue;
}
// If we get here, the line didn't match any known construct.
// This is expected — Grape files have lots of Ruby code (method calls,
// variable assignments, etc.) that isn't routing-related. Skip silently.
}
// Append this file's routes to the accumulator
allRoutes.push(...state.routes);
}
// ─────────────────────────────────────────────────────────────────────
// Directory scanner
// ─────────────────────────────────────────────────────────────────────
function shouldExcludeFile(absPath, ignore) {
const segments = absPath.split(path.sep);
for (const ig of ignore) {
if (segments.includes(ig))
return true;
}
if (segments.includes('spec') || segments.includes('test'))
return true;
if (segments.includes('tests'))
return true;
return false;
}
/**
* Scans a project for Grape API routes.
*
* Looks for:
* - lib/api/api.rb (root API class — has prefix/version/mount declarations)
* - lib/api/(subfiles).rb (mounted API classes)
*
* If lib/api/api.rb exists, it's parsed first to extract global prefix/version
* and mount declarations. Each mounted class is then parsed with the correct
* base path.
*
* If no api.rb exists but lib/api/*.rb files are present, each file is parsed
* independently with no global prefix (rare case — standalone Grape apps).
*
* @param dir Project root directory
* @param ignore Directories to ignore
* @param authPatterns Additional auth patterns (user-configured, for Rails compat)
* @param concurrency Parallel file read concurrency
*/
async function scanGrape(dir, ignore, authPatterns = [], concurrency = parallel_1.DEFAULT_CONCURRENCY) {
const absDir = path.resolve(dir);
// ─── Step 1: Find all Grape API files ───
let apiFiles = [];
try {
apiFiles = await glob('lib/api/**/*.rb', {
cwd: absDir,
absolute: true,
dot: false,
nodir: true,
});
}
catch {
logger_1.logger.warn(`Could not scan lib/api/ in: ${absDir}`);
return [];
}
apiFiles = apiFiles.filter((f) => !shouldExcludeFile(f, ignore));
if (apiFiles.length === 0) {
logger_1.logger.info('No lib/api/ directory found — skipping Grape scan');
return [];
}
logger_1.logger.info(`Found ${apiFiles.length} Grape API files in lib/api/`);
// ─── Step 2: Read all files in parallel ───
const readResults = await (0, parallel_1.readFilesParallel)(apiFiles, concurrency);
// Build map: relative file path → content
const apiFileContents = new Map();
for (const { absPath, content } of readResults) {
if (content === null)
continue;
const relPath = path.relative(absDir, absPath).replace(/\\/g, '/');
apiFileContents.set(relPath, content);
}
// ─── Step 3: Parse root API class (lib/api/api.rb) if it exists ───
const rootApiPath = 'lib/api/api.rb';
const visitedFiles = new Set();
const allParsedRoutes = [];
if (apiFileContents.has(rootApiPath)) {
// Parse root class first — it has prefix/version/mount declarations
const rootContent = apiFileContents.get(rootApiPath);
parseGrapeFile(rootContent, rootApiPath, 'API::API', '', // base path is computed from prefix/version during parse
apiFileContents, visitedFiles, allParsedRoutes);
}
else {
// No root class — parse each file independently with no prefix
for (const [relPath, content] of apiFileContents) {
// Derive class name from path: lib/api/groups.rb → API::Groups
const className = relPath
.replace(/^lib\/api\//, '')
.replace(/\.rb$/, '')
.split('/')
.map((p) => p.split('_').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(''))
.join('::');
const fullClassName = `API::${className}`;
parseGrapeFile(content, relPath, fullClassName, '', apiFileContents, visitedFiles, allParsedRoutes);
}
}
// ─── Step 4: Convert to Route[] ───
const routes = allParsedRoutes
.filter((r) => !r.isCatchAll) // Exclude catch-all routes (like Express USE)
.map((r) => ({
method: r.method,
path: r.path,
file: r.controllerAction.split('#')[0].replace(/::/g, '/') + '.rb',
line: r.line,
hasAuth: r.hasAuth,
}));
// ─── Step 5: Dedup and sort ───
const deduped = dedupRoutes(routes);
deduped.sort((a, b) => {
if (a.file !== b.file)
return a.file < b.file ? -1 : 1;
return a.line - b.line;
});
return deduped;
}
function dedupRoutes(routes) {
const seen = new Set();
const result = [];
for (const r of routes) {
const key = `${r.method}|${r.path}|${r.file}`;
if (!seen.has(key)) {
seen.add(key);
result.push(r);
}
}
return result;
}
/**
* Detects whether a project uses Grape by checking for lib/api/api.rb
* or any files under lib/api/.
*/
function hasGrapeApi(dir) {
const apiDir = path.join(dir, 'lib', 'api');
try {
const fs = require('fs');
return fs.existsSync(apiDir) && fs.statSync(apiDir).isDirectory();
}
catch {
return false;
}
}
exports.default = scanGrape;
//# sourceMappingURL=grape.js.map
{"version":3,"file":"grape.js","sourceRoot":"","sources":["../../src/scanners/grape.ts"],"names":[],"mappings":"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"}
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAwOjC,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AA2jBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CA2Hf;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,GAAE,MAA4B,GACxC,OAAO,CAAC,KAAK,EAAE,CAAC,CAyHlB;AAeD,eAAe,SAAS,CAAC"}
{"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAgPjC,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAmsBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CA8Kf;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,GAAE,MAA4B,GACxC,OAAO,CAAC,KAAK,EAAE,CAAC,CAgJlB;AAeD,eAAe,SAAS,CAAC"}

@@ -47,2 +47,3 @@ "use strict";

const rails_auth_1 = require("./rails-auth");
const grape_1 = require("./grape");
function glob(pattern, options) {

@@ -65,2 +66,3 @@ return new Promise((resolve, reject) => {

pendingTo: null,
pendingConcerns: null,
};

@@ -75,2 +77,3 @@ }

pendingTo: ctx.pendingTo,
pendingConcerns: ctx.pendingConcerns ? [...ctx.pendingConcerns] : null,
};

@@ -148,3 +151,3 @@ }

const CONCERN_DEF_REGEX = /^concern\s+:(\w+)\s+do\s*$/;
const CONCERNS_USE_REGEX = /concerns:\s*(?::(\w+)|\[([^\]]*)\])/;
const CONCERNS_USE_REGEX = /concerns:\s*(?::(\w+)|\[([^\]]*)\]|%i\[([^\]]*)\])/;
/** Match: use_doorkeeper do */

@@ -222,2 +225,15 @@ const USE_DOORKEEPER_REGEX = /^use_doorkeeper\b/;

/**
* v0.9.0: Pushes a route to the appropriate destination.
* If we're inside a concern definition, routes go to concernCapture.routes.
* Otherwise, routes go to state.routes (normal emission).
*/
function emitRoute(state, route) {
if (state.concernCapture) {
state.concernCapture.routes.push(route);
}
else {
state.routes.push(route);
}
}
/**
* Parses a single-line route declaration (get/post/match/etc.) and pushes

@@ -262,3 +278,3 @@ * the resulting ParsedRoute(s) onto state.routes.

const controllerAction = applyModulePath(rawControllerAction, currentCtx(state).modulePath);
state.routes.push({
emitRoute(state, {
method,

@@ -289,3 +305,3 @@ path: convertParamsToOpenAPI(computeFullPath(state, routePath)),

for (const method of viaMethods) {
state.routes.push({
emitRoute(state, {
method,

@@ -303,3 +319,3 @@ path: fullPath,

if (rootMatch) {
state.routes.push({
emitRoute(state, {
method: 'GET',

@@ -317,3 +333,3 @@ path: '/',

// Engine mounts are middleware — mark as USE so comparator excludes them
state.routes.push({
emitRoute(state, {
method: 'USE',

@@ -488,3 +504,3 @@ path: mountMatch[2],

const routePath = r.pathSuffix; // e.g. '', '/new', '/:id', '/:id/edit'
state.routes.push({
emitRoute(state, {
method: r.method,

@@ -497,2 +513,104 @@ path: convertParamsToOpenAPI(joinPath(basePath, pathSegment, routePath.replace(/:id\b/g, isSingular ? '' : paramName))),

}
// v0.9.0: Expand concerns (concerns: :name or concerns: [:a, :b] or %i[a b])
// Also check for pendingConcerns from with_options blocks.
const concernsMatch = modifiers.match(CONCERNS_USE_REGEX);
const concernNames = [];
if (concernsMatch) {
if (concernsMatch[1]) {
// Single symbol: concerns: :approvable
concernNames.push(concernsMatch[1]);
}
else if (concernsMatch[2]) {
// Array: concerns: [:foo, :bar]
const raw = concernsMatch[2];
concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean));
}
else if (concernsMatch[3]) {
// Percent-i: concerns: %i[foo bar]
const raw = concernsMatch[3];
concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean));
}
}
// v0.9.0: Also apply pendingConcerns from with_options context
if (ctx.pendingConcerns) {
concernNames.push(...ctx.pendingConcerns);
}
for (const concernName of concernNames) {
const concernRoutes = state.concerns.get(concernName);
if (!concernRoutes) {
logger_1.logger.warn(`Concern ':${concernName}' not found — skipping expansion`);
continue;
}
// v0.9.0: Replay each concern route with the current context.
// The concern's captured routes have paths like '/approve' (member) or
// '/search' (collection). We need to prepend:
// - basePath (current namespace prefix)
// - pathSegment (the resource name, e.g. 'tags')
// - For member routes: the resource's param (e.g. '/{id}')
//
// The challenge: we don't know if a concern route is member or collection
// from the path alone. We stored this info in the concern's captured
// routes via the memberMode context, but ParsedRoute doesn't have a
// memberMode field.
//
// Heuristic: if the concern route's path starts with '/:' it was a
// member route that already has the param. Otherwise, we check if the
// concern was captured inside a member block by looking at the route's
// controllerAction — if it contains 'member', treat as member route.
//
// Better approach: store memberMode in the concern capture. For now,
// we use a simpler heuristic: concern routes captured inside `member do`
// blocks have paths that DON'T start with the resource param. We need
// to add the param for member routes.
//
// Actually, the cleanest fix: when capturing concern routes, record
// whether each was inside a member block. Let me add that to ParsedRoute
// as an optional field... but that changes the type.
//
// Simplest v0.9.0 approach: check if the concern name suggests member
// routes (e.g., 'approvable' has 'approve'/'reject' which are member
// actions). This is fragile.
//
// BEST approach for v0.9.0: re-parse the concern definition with the
// current resource context, so the paths are computed correctly.
// But that requires storing the concern's SOURCE, not just parsed routes.
//
// For now, I'll use the heuristic: if the concern route's path does NOT
// contain the resource param (no '/:' prefix), and the concern was
// defined with `member do`, we add the param.
//
// Actually, let me just check: did the concern definition contain
// `member do`? If so, ALL its routes are member routes and need the param.
// Check if the concern definition used member blocks
// (We stored this info in the concern's routes — if any route was
// captured inside memberMode='member', we need to add the param.)
//
// Since we can't easily tell from ParsedRoute, let's use a different
// approach: store the concern's raw source and re-parse it with the
// current context. This is the most correct approach.
//
// For v0.9.0, I'll use the simple heuristic: prepend the resource's
// param to ALL concern routes. This works for Mastodon's `:approvable`
// concern (which only has member routes). It's wrong for concerns with
// collection routes, but that's a documented v0.9.0 limitation.
for (const cr of concernRoutes) {
// Check if this looks like a member route (heuristic: path doesn't
// start with a known collection prefix like 'search', 'batch', etc.)
// Actually, let's just prepend the param for all concern routes.
// The concern's routes were captured inside `member do`, so they're
// all member routes.
//
// v0.9.0: We prepend the resource's param to make the path correct
// for member routes. Collection routes in concerns are rare.
const memberPrefix = isSingular ? '' : paramName;
const fullPath = joinPath(basePath, pathSegment, memberPrefix, cr.path);
emitRoute(state, {
method: cr.method,
path: convertParamsToOpenAPI(fullPath),
controllerAction: `${fullControllerName}#${cr.controllerAction.split('#')[1] || 'unknown'}`,
isRedirect: cr.isRedirect,
line: lineNum,
});
}
}
// If line ends with `do`, open a new context for nested routes

@@ -552,3 +670,3 @@ if (/\bdo\s*$/.test(modifiers) || /\bdo\s+/.test(modifiers)) {

: joinPath(ctx.pathPrefix, action);
state.routes.push({
emitRoute(state, {
method,

@@ -655,3 +773,3 @@ path: convertParamsToOpenAPI(path),

for (const r of deviseRoutes) {
state.routes.push({
emitRoute(state, {
method: r.method,

@@ -684,2 +802,4 @@ path: convertParamsToOpenAPI(joinPath(basePath, r.path)),

baseDir,
concernCapture: null,
concernDepth: 0,
};

@@ -741,3 +861,3 @@ while (state.lineIdx < state.lines.length) {

}
// with_options(...) do — captures to: option for inner routes
// with_options(...) do — captures to: and concerns: options for inner routes
const withOptionsMatch = line.match(WITH_OPTIONS_REGEX);

@@ -747,3 +867,2 @@ if (withOptionsMatch && /\bdo\s*$/.test(line)) {

// v0.8.1: Extract to: 'controller#action' from with_options arguments
// and apply it to inner routes that don't have their own to: mapping.
const toMatch = withOptionsMatch[1].match(/to:\s*['"]([^'"]+)['"]/);

@@ -753,12 +872,51 @@ if (toMatch) {

}
// v0.9.0: Extract concerns: :name or concerns: [:a, :b] or %i[a b]
const concernsMatch = withOptionsMatch[1].match(CONCERNS_USE_REGEX);
if (concernsMatch) {
const concernNames = [];
if (concernsMatch[1]) {
concernNames.push(concernsMatch[1]);
}
else if (concernsMatch[2]) {
const raw = concernsMatch[2];
concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean));
}
else if (concernsMatch[3]) {
const raw = concernsMatch[3];
concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean));
}
if (concernNames.length > 0) {
newCtx.pendingConcerns = concernNames;
}
}
state.contextStack.push(newCtx);
continue;
}
// concern :name do — define a concern (reusable route block)
// concern :name do — v0.9.0: capture inner routes for later expansion
const concernDefMatch = line.match(CONCERN_DEF_REGEX);
if (concernDefMatch) {
// For v0.8.0 we treat concern definitions as transparent scopes —
// their inner routes are recorded but concerns: :name usage doesn't
// re-expand them. (Full concern expansion is a v0.9.0 goal.)
state.contextStack.push(cloneContext(currentCtx(state)));
// v0.9.0 CRITICAL FIX: Use a FRESH context (empty pathPrefix) for the
// concern definition. The concern's routes should have RELATIVE paths
// (e.g., '/approve', not '/api/v1/admin/trends/approve').
// When the concern is expanded via `concerns: :name`, the expansion
// site's context provides the correct prefix.
//
// We DO preserve the modulePath and pendingTo from the parent context,
// because concerns can use `controller:` overrides and `to:` mappings.
const parentCtx = currentCtx(state);
const freshCtx = {
pathPrefix: '',
modulePath: parentCtx.modulePath,
currentResource: null,
memberMode: 'none',
pendingTo: parentCtx.pendingTo,
pendingConcerns: null,
};
state.contextStack.push(freshCtx);
state.concernCapture = {
name: concernDefMatch[1],
routes: [],
startDepth: state.contextStack.length,
};
state.concernDepth = 1;
continue;

@@ -780,2 +938,14 @@ }

if (END_REGEX.test(line)) {
// v0.9.0: Check if we're closing a concern definition
if (state.concernCapture && state.contextStack.length === state.concernCapture.startDepth) {
// Store captured routes in the concerns map
state.concerns.set(state.concernCapture.name, state.concernCapture.routes);
state.concernCapture = null;
state.concernDepth = 0;
// Pop the context we pushed for the concern
if (state.contextStack.length > 1) {
state.contextStack.pop();
}
continue;
}
if (state.contextStack.length > 1) {

@@ -926,3 +1096,25 @@ state.contextStack.pop();

const deduped = dedupRoutes(routes);
deduped.sort((a, b) => {
// ─── Step 7: v0.9.0 — Auto-invoke Grape scanner if lib/api/ exists ───
// Rails projects that use Grape (e.g. GitLab) mount ::API::API in routes.rb.
// The Grape routes are defined in lib/api/*.rb (a completely different DSL).
// We detect this and merge Grape routes into the Rails routes.
const apiDir = path.join(absDir, 'lib', 'api');
let grapeRoutes = [];
try {
const fs = require('fs');
if (fs.existsSync(apiDir) && fs.statSync(apiDir).isDirectory()) {
logger_1.logger.info('Detected lib/api/ directory — running Grape scanner as second pass...');
grapeRoutes = await (0, grape_1.scanGrape)(dir, ignore, authPatterns, concurrency);
if (grapeRoutes.length > 0) {
logger_1.logger.success(`Found ${grapeRoutes.length} Grape API routes in lib/api/`);
}
}
}
catch (err) {
logger_1.logger.warn(`Grape scan failed: ${err instanceof Error ? err.message : String(err)}`);
}
// Merge Rails + Grape routes
const allRoutes = [...deduped, ...grapeRoutes];
const allDeduped = dedupRoutes(allRoutes);
allDeduped.sort((a, b) => {
if (a.file !== b.file)

@@ -932,3 +1124,3 @@ return a.file < b.file ? -1 : 1;

});
return deduped;
return allDeduped;
}

@@ -935,0 +1127,0 @@ function dedupRoutes(routes) {

@@ -1,1 +0,1 @@

{"version":3,"file":"rails.js","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkzBA,kDA+HC;AA+BD,8BA8HC;AA9kCD,gDAA2C;AAC3C,2CAA6B;AAE7B,4CAAyC;AACzC,+CAA0E;AAC1E,qDAK0B;AAC1B,6CAAgH;AAEhH,SAAS,IAAI,CAAC,OAAe,EAAE,OAAoB;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,cAAM,EAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,OAA6B,EAAE,EAAE;YAC5E,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAwFD,SAAS,eAAe;IACtB,OAAO;QACL,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAiB;IACrC,OAAO;QACL,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI;QACxE,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,qBAAqB;AACrB,wEAAwE;AAExE;;;GAGG;AACH,SAAS,QAAQ,CAAC,GAAG,QAAkB;IACrC,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,4BAA4B;IAC5B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,uBAAuB;IACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IACnD,mCAAmC;IACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,IAAI,CAAC,GAAG,SAAS,CAAC;IAClB,mBAAmB;IACnB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,uCAAuC;IACvC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACtC,+BAA+B;IAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,wEAAwE;AACxE,wCAAwC;AACxC,wEAAwE;AAExE,8EAA8E;AAC9E,MAAM,+BAA+B,GACnC,gFAAgF,CAAC;AAEnF,yDAAyD;AACzD,MAAM,eAAe,GACnB,gEAAgE,CAAC;AAEnE,sEAAsE;AACtE,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAEzD,2DAA2D;AAC3D,MAAM,eAAe,GACnB,sCAAsC,CAAC;AAEzC,uCAAuC;AACvC,MAAM,uBAAuB,GAC3B,qCAAqC,CAAC;AAExC,gCAAgC;AAChC,MAAM,eAAe,GAAG,8CAA8C,CAAC;AAEvE,iDAAiD;AACjD,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAEnD,6EAA6E;AAC7E,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AACrD,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAE5D,sDAAsD;AACtD,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,mCAAmC;AACnC,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAE7D,kCAAkC;AAClC,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,kEAAkE;AAClE,MAAM,WAAW,GAAG,+EAA+E,CAAC;AAEpG,2DAA2D;AAC3D,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,kDAAkD;AAClD,MAAM,gBAAgB,GAAG,uCAAuC,CAAC;AAEjE,+CAA+C;AAC/C,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AACvD,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAEjD,qEAAqE;AACrE,MAAM,cAAc,GAAG,yBAAyB,CAAC;AAEjD,0BAA0B;AAC1B,MAAM,SAAS,GAAG,aAAa,CAAC;AAwBhC;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,wCAAwC;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,kBAAkB;QAC3B,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;QACnE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;QACnE,MAAM,IAAI,EAAE,CAAC;QACb,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAiB;IACnC,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,eAAe,CAAC,KAAiB,EAAE,SAAiB;IAC3D,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gEAAgE;IAChE,2EAA2E;IAC3E,IAAI,GAAG,CAAC,UAAU;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAElD,wEAAwE;IACxE,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAE7C,6CAA6C;IAC7C,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,sEAAsE;IACtE,IAAI,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAExC,OAAO,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,KAAiB,EACjB,IAAY,EACZ,OAAe;IAEf,6CAA6C;IAC7C,qBAAqB;IACrB,uDAAuD;IACvD,mFAAmF;IACnF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAChE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAExD,+EAA+E;QAC/E,IAAI,CAAC,mBAAmB,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YACxD,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QACpD,CAAC;QAED,yEAAyE;QACzE,2EAA2E;QAC3E,4EAA4E;QAC5E,oDAAoD;QACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;gBACxB,MAAM,kBAAkB,GAAG,GAAG,CAAC,UAAU;oBACvC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;oBACjD,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC7B,kEAAkE;gBAClE,0CAA0C;gBAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClE,mBAAmB,GAAG,GAAG,kBAAkB,IAAI,UAAU,EAAE,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,mBAAmB,GAAG,iBAAiB,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,MAAM,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAC5F,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,MAAM;YACN,IAAI,EAAE,sBAAsB,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC/D,gBAAgB;YAChB,UAAU;YACV,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,oCAAoC;QACpC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClB,KAAK,CAAC,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;iBACpD,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;QAC/E,iEAAiE;QACjE,MAAM,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAE3E,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChB,MAAM;gBACN,IAAI,EAAE,QAAQ;gBACd,gBAAgB;gBAChB,UAAU;gBACV,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG;YACT,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,yEAAyE;QACzE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YACnB,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;YAC/B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,cAAc,EAAE,CAAC;QACnB,yBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7F,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAClE,IAAI,qBAAqB,EAAE,CAAC;QAC1B,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1G,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7D,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,cAAc,EAAE,CAAC;QACnB,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,yEAAyE;IACzE,oEAAoE;AACtE,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACvD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IACrC,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACnD,IAAI,WAAW;QAAE,OAAO,YAAY,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,gBAAwB,EAAE,UAAkB;IACnE,IAAI,CAAC,UAAU;QAAE,OAAO,gBAAgB,CAAC;IACzC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,qCAAqC;QACrC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,mFAAmF;IACnF,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG,UAAU,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,KAAiB,EACjB,IAAY,EACZ,SAAiB,EACjB,UAAmB,EACnB,OAAe;IAEf,MAAM,QAAQ,GAAoB,UAAU;QAC1C,CAAC,CAAC,IAAA,uCAAsB,EAAC,IAAI,EAAE,SAAS,CAAC;QACzC,CAAC,CAAC,IAAA,qCAAoB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,IAAA,uCAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAE5G,oEAAoE;IACpE,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAE3D,wEAAwE;IACxE,yEAAyE;IACzE,iEAAiE;IACjE,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,mDAAmD;IACnD,gDAAgD;IAChD,uEAAuE;IACvE,QAAQ;IACR,EAAE;IACF,sEAAsE;IACtE,6DAA6D;IAC7D,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;IAC9B,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACrD,+DAA+D;QAC/D,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,+DAA+D;IAC/D,EAAE;IACF,4CAA4C;IAC5C,gDAAgD;IAChD,8CAA8C;IAC9C,uEAAuE;IACvE,oDAAoD;IACpD,wEAAwE;IACxE,EAAE;IACF,yEAAyE;IACzE,sEAAsE;IACtE,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,uBAAuB,GAAG,SAAS,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC1F,MAAM,kBAAkB,GAAG,uBAAuB;QAChD,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,IAAI,CAAC;IACT,SAAS,SAAS,CAAC,IAAY;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,iBAAiB;QACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/I,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,yCAAyC;QAC7E,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5F,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC,iCAAiC;QACvD,CAAC;QACD,OAAO,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IACD,MAAM,cAAc,GAAG,kBAAkB;QACvC,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,kBAAkB,GAAG,GAAG,CAAC,UAAU;QACvC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,cAAc,EAAE;QACvC,CAAC,CAAC,cAAc,CAAC;IAEnB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,uCAAuC;QACvE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,sBAAsB,CAC1B,QAAQ,CACN,QAAQ,EACR,WAAW,EACX,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CACzD,CACF;YACD,gBAAgB,EAAE,GAAG,kBAAkB,IAAI,CAAC,CAAC,MAAM,EAAE;YACrD,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IAED,+DAA+D;IAC/D,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAEvC,qEAAqE;QACrE,+DAA+D;QAC/D,8DAA8D;QAC9D,kFAAkF;QAClF,kBAAkB;QAClB,gGAAgG;QAChG,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,IAAI,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACjE,eAAe,GAAG,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC3D,MAAM,CAAC,eAAe,GAAG;YACvB,IAAI;YACJ,WAAW;YACX,UAAU;YACV,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,KAAiB,EACjB,YAAoB,EACpB,IAA6B,EAC7B,OAAe;IAEf,qCAAqC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhC,4CAA4C;IAC5C,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,yEAAyE;YACzE,yEAAyE;YACzE,+BAA+B;YAC/B,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ;gBAC5B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC;gBACpE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChB,MAAM;gBACN,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC;gBAClC,gBAAgB,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE;gBACvE,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAiB,EAAE,MAAc,EAAE,QAAgB;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC;IACjF,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,eAAM,CAAC,IAAI,CAAC,SAAS,MAAM,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAsB,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,IAAI,CAAC,SAAS,MAAM,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,iFAAiF;IACjF,uFAAuF;IACvF,kEAAkE;IAClE,kFAAkF;IAClF,eAAM,CAAC,IAAI,CAAC,SAAS,MAAM,0DAA0D,CAAC,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,eAAe,CACtB,KAAiB,EACjB,YAAoB,EACpB,SAAiB,EACjB,OAAe;IAEf,0CAA0C;IAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAE5D,yEAAyE;IACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAErE,MAAM,YAAY,GAA4D;QAC5E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,cAAc,EAAE;QACvE,EAAE,MAAM,EAAE,MAAM,EAAI,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,iBAAiB,EAAE;QAC1E,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,mBAAmB,EAAE;QAC5E,EAAE,MAAM,EAAE,MAAM,EAAI,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,sBAAsB,EAAE;QAC/E,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAmB,MAAM,EAAE,uBAAuB,EAAE;QAChF,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,eAAe,EAAM,MAAM,EAAE,eAAe,EAAE;QACxE,EAAE,MAAM,EAAE,MAAM,EAAI,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,gBAAgB,EAAK,MAAM,EAAE,gBAAgB,EAAE;QACzE,EAAE,MAAM,EAAE,OAAO,EAAG,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,SAAS,EAAY,MAAM,EAAE,sBAAsB,EAAE;QAC/E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,OAAO,EAAc,MAAM,EAAE,oBAAoB,EAAE;QAC7E,EAAE,MAAM,EAAE,OAAO,EAAG,IAAI,EAAE,EAAE,EAAmB,MAAM,EAAE,sBAAsB,EAAE;QAC/E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,EAAE,EAAmB,MAAM,EAAE,sBAAsB,EAAE;KAChF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACxD,gBAAgB,EAAE,CAAC,CAAC,MAAM;YAC1B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,uDAAuD;AACvD,wEAAwE;AAExE;;;;;;GAMG;AACH,SAAgB,mBAAmB,CACjC,IAAY,EACZ,QAAgB,EAChB,OAAe;IAEf,MAAM,KAAK,GAAe;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC,eAAe,EAAE,CAAC;QACjC,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,QAAQ;QACR,OAAO;KACR,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,iEAAiE;QACjE,2CAA2C;QAE3C,qBAAqB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,oEAAoE;YACpE,uDAAuD;YACvD,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;gBACnC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;gBACtC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;YAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC5D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBAChB,8DAA8D;gBAC9D,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;oBACnC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;oBAC1C,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;YAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,gEAAgE;QAChE,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,4CAA4C;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,gBAAgB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACpE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,6DAA6D;QAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,eAAe,EAAE,CAAC;YACpB,kEAAkE;YAClE,oEAAoE;YACpE,6DAA6D;YAC7D,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;YACtE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,wCAAwC;QACxC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAC3B,CAAC;YACD,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,wEAAwE;AACxE,oBAAoB;AACpB,wEAAwE;AAExE,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAgB;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,wBAAwB;IACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,QAAQ;IACpD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,MAAgB,EAChB,YAAsB,EACtB,cAAsB,8BAAmB;IAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,kEAAkE;IAClE,IAAI,WAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;YAC5C,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE;YACnD,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,IAAI,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kEAAkE;IAClE,MAAM,WAAW,GAAG,MAAM,IAAA,4BAAiB,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEtE,kEAAkE;IAClE,MAAM,eAAe,GAA0C,EAAE,CAAC;IAClE,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,IAAI,mBAAmB,GAAa,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,mBAAmB,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;YAC1D,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IACD,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvF,MAAM,qBAAqB,GAAG,MAAM,IAAA,4BAAiB,EAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IAExF,8EAA8E;IAC9E,+DAA+D;IAC/D,0EAA0E;IAC1E,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACzD,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,sFAAsF;QACtF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACjE,sBAAsB,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,6FAA6F;IAC7F,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACzD,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,iGAAiG;QACjG,MAAM,cAAc,GAAG,OAAO;aAC3B,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;aAClC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAA,2CAA8B,EAC5C,OAAO,EACP,YAAY,EACZ,sBAAsB,CACvB,CAAC;QACF,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,kEAAkE;IAClE,MAAM,MAAM,GAAY,eAAe;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,6CAA6C;SAC1E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,gDAAgD;SAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,gEAAgE;QAChE,MAAM,cAAc,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;QAC/D,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,kEAAkE;IAClE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAe,SAAS,CAAC"}
{"version":3,"file":"rails.js","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAk8BA,kDAkLC;AA+BD,8BAqJC;AAxyCD,gDAA2C;AAC3C,2CAA6B;AAE7B,4CAAyC;AACzC,+CAA0E;AAC1E,qDAK0B;AAC1B,6CAAgH;AAChH,mCAAoC;AAEpC,SAAS,IAAI,CAAC,OAAe,EAAE,OAAoB;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,cAAM,EAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,OAA6B,EAAE,EAAE;YAC5E,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AA6FD,SAAS,eAAe;IACtB,OAAO;QACL,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAiB;IACrC,OAAO;QACL,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI;QACxE,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;KACvE,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,qBAAqB;AACrB,wEAAwE;AAExE;;;GAGG;AACH,SAAS,QAAQ,CAAC,GAAG,QAAkB;IACrC,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,4BAA4B;IAC5B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,uBAAuB;IACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IACnD,mCAAmC;IACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,IAAI,CAAC,GAAG,SAAS,CAAC;IAClB,mBAAmB;IACnB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,uCAAuC;IACvC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACtC,+BAA+B;IAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,wEAAwE;AACxE,wCAAwC;AACxC,wEAAwE;AAExE,8EAA8E;AAC9E,MAAM,+BAA+B,GACnC,gFAAgF,CAAC;AAEnF,yDAAyD;AACzD,MAAM,eAAe,GACnB,gEAAgE,CAAC;AAEnE,sEAAsE;AACtE,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAEzD,2DAA2D;AAC3D,MAAM,eAAe,GACnB,sCAAsC,CAAC;AAEzC,uCAAuC;AACvC,MAAM,uBAAuB,GAC3B,qCAAqC,CAAC;AAExC,gCAAgC;AAChC,MAAM,eAAe,GAAG,8CAA8C,CAAC;AAEvE,iDAAiD;AACjD,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAEnD,6EAA6E;AAC7E,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AACrD,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAE5D,sDAAsD;AACtD,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,mCAAmC;AACnC,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAE7D,kCAAkC;AAClC,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,kEAAkE;AAClE,MAAM,WAAW,GAAG,+EAA+E,CAAC;AAEpG,2DAA2D;AAC3D,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,kDAAkD;AAClD,MAAM,gBAAgB,GAAG,uCAAuC,CAAC;AAEjE,+CAA+C;AAC/C,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AACvD,MAAM,kBAAkB,GAAG,oDAAoD,CAAC;AAEhF,+BAA+B;AAC/B,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAEjD,qEAAqE;AACrE,MAAM,cAAc,GAAG,yBAAyB,CAAC;AAEjD,0BAA0B;AAC1B,MAAM,SAAS,GAAG,aAAa,CAAC;AAyChC;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,wCAAwC;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,kBAAkB;QAC3B,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;QACnE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;QACnE,MAAM,IAAI,EAAE,CAAC;QACb,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAiB;IACnC,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,eAAe,CAAC,KAAiB,EAAE,SAAiB;IAC3D,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gEAAgE;IAChE,2EAA2E;IAC3E,IAAI,GAAG,CAAC,UAAU;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAElD,wEAAwE;IACxE,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAE7C,6CAA6C;IAC7C,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,sEAAsE;IACtE,IAAI,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAExC,OAAO,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAiB,EAAE,KAAkB;IACtD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,KAAiB,EACjB,IAAY,EACZ,OAAe;IAEf,6CAA6C;IAC7C,qBAAqB;IACrB,uDAAuD;IACvD,mFAAmF;IACnF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAChE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAExD,+EAA+E;QAC/E,IAAI,CAAC,mBAAmB,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YACxD,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QACpD,CAAC;QAED,yEAAyE;QACzE,2EAA2E;QAC3E,4EAA4E;QAC5E,oDAAoD;QACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;gBACxB,MAAM,kBAAkB,GAAG,GAAG,CAAC,UAAU;oBACvC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;oBACjD,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC7B,kEAAkE;gBAClE,0CAA0C;gBAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClE,mBAAmB,GAAG,GAAG,kBAAkB,IAAI,UAAU,EAAE,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,mBAAmB,GAAG,iBAAiB,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,MAAM,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAC5F,SAAS,CAAC,KAAK,EAAE;YACf,MAAM;YACN,IAAI,EAAE,sBAAsB,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC/D,gBAAgB;YAChB,UAAU;YACV,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,oCAAoC;QACpC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClB,KAAK,CAAC,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;iBACpD,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;QAC/E,iEAAiE;QACjE,MAAM,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAE3E,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,SAAS,CAAC,KAAK,EAAE;gBACf,MAAM;gBACN,IAAI,EAAE,QAAQ;gBACd,gBAAgB;gBAChB,UAAU;gBACV,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,EAAE;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG;YACT,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,yEAAyE;QACzE,SAAS,CAAC,KAAK,EAAE;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YACnB,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;YAC/B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,cAAc,EAAE,CAAC;QACnB,yBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7F,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAClE,IAAI,qBAAqB,EAAE,CAAC;QAC1B,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1G,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7D,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,cAAc,EAAE,CAAC;QACnB,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,yEAAyE;IACzE,oEAAoE;AACtE,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACvD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IACrC,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACnD,IAAI,WAAW;QAAE,OAAO,YAAY,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,gBAAwB,EAAE,UAAkB;IACnE,IAAI,CAAC,UAAU;QAAE,OAAO,gBAAgB,CAAC;IACzC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,qCAAqC;QACrC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,mFAAmF;IACnF,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG,UAAU,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,KAAiB,EACjB,IAAY,EACZ,SAAiB,EACjB,UAAmB,EACnB,OAAe;IAEf,MAAM,QAAQ,GAAoB,UAAU;QAC1C,CAAC,CAAC,IAAA,uCAAsB,EAAC,IAAI,EAAE,SAAS,CAAC;QACzC,CAAC,CAAC,IAAA,qCAAoB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,IAAA,uCAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAE5G,oEAAoE;IACpE,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAE3D,wEAAwE;IACxE,yEAAyE;IACzE,iEAAiE;IACjE,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,mDAAmD;IACnD,gDAAgD;IAChD,uEAAuE;IACvE,QAAQ;IACR,EAAE;IACF,sEAAsE;IACtE,6DAA6D;IAC7D,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;IAC9B,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACrD,+DAA+D;QAC/D,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,+DAA+D;IAC/D,EAAE;IACF,4CAA4C;IAC5C,gDAAgD;IAChD,8CAA8C;IAC9C,uEAAuE;IACvE,oDAAoD;IACpD,wEAAwE;IACxE,EAAE;IACF,yEAAyE;IACzE,sEAAsE;IACtE,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,uBAAuB,GAAG,SAAS,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC1F,MAAM,kBAAkB,GAAG,uBAAuB;QAChD,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,IAAI,CAAC;IACT,SAAS,SAAS,CAAC,IAAY;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,iBAAiB;QACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/I,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,yCAAyC;QAC7E,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5F,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC,iCAAiC;QACvD,CAAC;QACD,OAAO,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IACD,MAAM,cAAc,GAAG,kBAAkB;QACvC,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,kBAAkB,GAAG,GAAG,CAAC,UAAU;QACvC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,cAAc,EAAE;QACvC,CAAC,CAAC,cAAc,CAAC;IAEnB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,uCAAuC;QACvE,SAAS,CAAC,KAAK,EAAE;YACf,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,sBAAsB,CAC1B,QAAQ,CACN,QAAQ,EACR,WAAW,EACX,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CACzD,CACF;YACD,gBAAgB,EAAE,GAAG,kBAAkB,IAAI,CAAC,CAAC,MAAM,EAAE;YACrD,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,uCAAuC;YACvC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,gCAAgC;YAChC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACnG,CAAC;aAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,mCAAmC;YACnC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IACD,+DAA+D;IAC/D,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,eAAM,CAAC,IAAI,CAAC,aAAa,WAAW,kCAAkC,CAAC,CAAC;YACxE,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,uEAAuE;QACvE,8CAA8C;QAC9C,0CAA0C;QAC1C,mDAAmD;QACnD,6DAA6D;QAC7D,EAAE;QACF,0EAA0E;QAC1E,qEAAqE;QACrE,oEAAoE;QACpE,oBAAoB;QACpB,EAAE;QACF,mEAAmE;QACnE,sEAAsE;QACtE,uEAAuE;QACvE,qEAAqE;QACrE,EAAE;QACF,qEAAqE;QACrE,yEAAyE;QACzE,sEAAsE;QACtE,sCAAsC;QACtC,EAAE;QACF,oEAAoE;QACpE,yEAAyE;QACzE,qDAAqD;QACrD,EAAE;QACF,sEAAsE;QACtE,qEAAqE;QACrE,6BAA6B;QAC7B,EAAE;QACF,qEAAqE;QACrE,iEAAiE;QACjE,0EAA0E;QAC1E,EAAE;QACF,wEAAwE;QACxE,mEAAmE;QACnE,8CAA8C;QAC9C,EAAE;QACF,kEAAkE;QAClE,2EAA2E;QAE3E,qDAAqD;QACrD,kEAAkE;QAClE,kEAAkE;QAClE,EAAE;QACF,qEAAqE;QACrE,oEAAoE;QACpE,sDAAsD;QACtD,EAAE;QACF,oEAAoE;QACpE,uEAAuE;QACvE,uEAAuE;QACvE,gEAAgE;QAEhE,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,mEAAmE;YACnE,qEAAqE;YACrE,iEAAiE;YACjE,oEAAoE;YACpE,qBAAqB;YACrB,EAAE;YACF,mEAAmE;YACnE,6DAA6D;YAC7D,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAExE,SAAS,CAAC,KAAK,EAAE;gBACf,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC;gBACtC,gBAAgB,EAAE,GAAG,kBAAkB,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;gBAC3F,UAAU,EAAE,EAAE,CAAC,UAAU;gBACzB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAEvC,qEAAqE;QACrE,+DAA+D;QAC/D,8DAA8D;QAC9D,kFAAkF;QAClF,kBAAkB;QAClB,gGAAgG;QAChG,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,IAAI,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACjE,eAAe,GAAG,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC3D,MAAM,CAAC,eAAe,GAAG;YACvB,IAAI;YACJ,WAAW;YACX,UAAU;YACV,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,KAAiB,EACjB,YAAoB,EACpB,IAA6B,EAC7B,OAAe;IAEf,qCAAqC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhC,4CAA4C;IAC5C,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,yEAAyE;YACzE,yEAAyE;YACzE,+BAA+B;YAC/B,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ;gBAC5B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC;gBACpE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,SAAS,CAAC,KAAK,EAAE;gBACf,MAAM;gBACN,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC;gBAClC,gBAAgB,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE;gBACvE,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAiB,EAAE,MAAc,EAAE,QAAgB;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC;IACjF,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,eAAM,CAAC,IAAI,CAAC,SAAS,MAAM,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAsB,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,IAAI,CAAC,SAAS,MAAM,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,iFAAiF;IACjF,uFAAuF;IACvF,kEAAkE;IAClE,kFAAkF;IAClF,eAAM,CAAC,IAAI,CAAC,SAAS,MAAM,0DAA0D,CAAC,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,eAAe,CACtB,KAAiB,EACjB,YAAoB,EACpB,SAAiB,EACjB,OAAe;IAEf,0CAA0C;IAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAE5D,yEAAyE;IACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAErE,MAAM,YAAY,GAA4D;QAC5E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,cAAc,EAAE;QACvE,EAAE,MAAM,EAAE,MAAM,EAAI,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,iBAAiB,EAAE;QAC1E,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,mBAAmB,EAAE;QAC5E,EAAE,MAAM,EAAE,MAAM,EAAI,IAAI,EAAE,UAAU,EAAW,MAAM,EAAE,sBAAsB,EAAE;QAC/E,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAmB,MAAM,EAAE,uBAAuB,EAAE;QAChF,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,eAAe,EAAM,MAAM,EAAE,eAAe,EAAE;QACxE,EAAE,MAAM,EAAE,MAAM,EAAI,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,gBAAgB,EAAK,MAAM,EAAE,gBAAgB,EAAE;QACzE,EAAE,MAAM,EAAE,OAAO,EAAG,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,WAAW,EAAU,MAAM,EAAE,kBAAkB,EAAE;QAC3E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,SAAS,EAAY,MAAM,EAAE,sBAAsB,EAAE;QAC/E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,OAAO,EAAc,MAAM,EAAE,oBAAoB,EAAE;QAC7E,EAAE,MAAM,EAAE,OAAO,EAAG,IAAI,EAAE,EAAE,EAAmB,MAAM,EAAE,sBAAsB,EAAE;QAC/E,EAAE,MAAM,EAAE,KAAK,EAAK,IAAI,EAAE,EAAE,EAAmB,MAAM,EAAE,sBAAsB,EAAE;KAChF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,SAAS,CAAC,KAAK,EAAE;YACf,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACxD,gBAAgB,EAAE,CAAC,CAAC,MAAM;YAC1B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,uDAAuD;AACvD,wEAAwE;AAExE;;;;;;GAMG;AACH,SAAgB,mBAAmB,CACjC,IAAY,EACZ,QAAgB,EAChB,OAAe;IAEf,MAAM,KAAK,GAAe;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC,eAAe,EAAE,CAAC;QACjC,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,QAAQ;QACR,OAAO;QACP,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,iEAAiE;QACjE,2CAA2C;QAE3C,qBAAqB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,oEAAoE;YACpE,uDAAuD;YACvD,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;gBACnC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;gBACtC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;YAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC5D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBAChB,8DAA8D;gBAC9D,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;oBACnC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;oBAC1C,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;YAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,gEAAgE;QAChE,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,4CAA4C;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,6EAA6E;QAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,gBAAgB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,sEAAsE;YACtE,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACpE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,mEAAmE;YACnE,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACpE,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAa,EAAE,CAAC;gBAClC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC;qBAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnG,CAAC;qBAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnG,CAAC;gBACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,sEAAsE;QACtE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,eAAe,EAAE,CAAC;YACpB,sEAAsE;YACtE,sEAAsE;YACtE,0DAA0D;YAC1D,oEAAoE;YACpE,8CAA8C;YAC9C,EAAE;YACF,uEAAuE;YACvE,uEAAuE;YACvE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAiB;gBAC7B,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,eAAe,EAAE,IAAI;aACtB,CAAC;YACF,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,KAAK,CAAC,cAAc,GAAG;gBACrB,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;aACtC,CAAC;YACF,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;YACtE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,wCAAwC;QACxC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,sDAAsD;YACtD,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;gBAC1F,4CAA4C;gBAC5C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC3E,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;gBACvB,4CAA4C;gBAC5C,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;gBAC3B,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAC3B,CAAC;YACD,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,wEAAwE;AACxE,oBAAoB;AACpB,wEAAwE;AAExE,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAgB;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,wBAAwB;IACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,QAAQ;IACpD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,MAAgB,EAChB,YAAsB,EACtB,cAAsB,8BAAmB;IAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,kEAAkE;IAClE,IAAI,WAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;YAC5C,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE;YACnD,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,IAAI,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kEAAkE;IAClE,MAAM,WAAW,GAAG,MAAM,IAAA,4BAAiB,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEtE,kEAAkE;IAClE,MAAM,eAAe,GAA0C,EAAE,CAAC;IAClE,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,IAAI,mBAAmB,GAAa,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,mBAAmB,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;YAC1D,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IACD,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvF,MAAM,qBAAqB,GAAG,MAAM,IAAA,4BAAiB,EAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IAExF,8EAA8E;IAC9E,+DAA+D;IAC/D,0EAA0E;IAC1E,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACzD,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,sFAAsF;QACtF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACjE,sBAAsB,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,6FAA6F;IAC7F,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACzD,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,iGAAiG;QACjG,MAAM,cAAc,GAAG,OAAO;aAC3B,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;aAClC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAA,2CAA8B,EAC5C,OAAO,EACP,YAAY,EACZ,sBAAsB,CACvB,CAAC;QACF,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,kEAAkE;IAClE,MAAM,MAAM,GAAY,eAAe;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,6CAA6C;SAC1E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,gDAAgD;SAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,gEAAgE;QAChE,MAAM,cAAc,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;QAC/D,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,kEAAkE;IAClE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpC,wEAAwE;IACxE,6EAA6E;IAC7E,6EAA6E;IAC7E,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,WAAW,GAAY,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/D,eAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACrF,WAAW,GAAG,MAAM,IAAA,iBAAS,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,eAAM,CAAC,OAAO,CAAC,SAAS,WAAW,CAAC,MAAM,+BAA+B,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,eAAM,CAAC,IAAI,CAAC,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1C,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAe,SAAS,CAAC"}
{
"name": "shadowaudit",
"version": "0.8.2",
"version": "0.9.0",
"description": "Static API security scanner — detects undocumented and unauthenticated Express.js routes before they reach production",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

@@ -43,3 +43,3 @@ # shadowaudit

```yaml
- uses: darkmaster0345/shadow-Audit@v0.8.2
- uses: darkmaster0345/shadow-Audit@v0.9.0
with:

@@ -308,3 +308,3 @@ dir: './src'

"tool": "shadowaudit",
"version": "0.8.2",
"version": "0.9.0",
"timestamp": "2026-01-15T12:00:00.000Z",

@@ -347,3 +347,3 @@ "stats": { "total": 7, "documented": 5, "undocumented": 2, "critical": 2, "high": 0, "info": 0 }

╔════════════════════════════════╗
║ shadowaudit v0.8.2 ║
║ shadowaudit v0.9.0 ║
║ API Shadow Route Scanner ║

@@ -350,0 +350,0 @@ ╚════════════════════════════════╝