@finsys/core 2.4.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/survey-generator.ts","../src/rhf-generator.ts","../src/validator.ts","../src/schema/unified-form.schema.json","../src/form-field-category.ts","../src/form-field.ts","../src/form-spec.ts","../src/form-field-validator.ts","../src/data/form-field-base-specs.json","../src/data/form-field-types.json","../src/data/form-field-validators.json","../src/catalogs.ts","../src/ihs-types.ts","../src/data/form-field-display-names.json","../src/ihs-processing.ts","../src/roles.ts","../src/extraction.ts","../src/ihs-status.ts","../src/extraction-status.ts"],"sourcesContent":["/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @finsys/core\n * Convert unified form configurations into Zod schemas, React Hook Form defaults, and SurveyJS JSON\n */\n\n// Functions\nexport {\n generateSurveyJson,\n resolvePageFields,\n getCategoryName,\n groupFieldsByCategory,\n applyDynamicTitles\n} from \"./survey-generator.js\";\n\nexport { getPastMonthLabel, getPastYearLabel, evaluateExpression } from \"./utils.js\";\n\nexport { \n generateRHFSchema,\n getStepSchema,\n getStepDefaultValues\n} from \"./rhf-generator.js\";\n\nexport { validateFormConfig, validateFormSpec, validatePagesConfig } from \"./validator.js\";\n\n// Unified Form Config types\nexport type {\n Category,\n Choice,\n Validator,\n FieldData,\n FieldReference,\n PageConfig,\n UnifiedFormConfig,\n ResolvedField,\n FieldGroup,\n} from \"./survey-generator.js\";\n\n// Output types (SurveyJS JSON compatible)\nexport type { SurveyElementJSON, SurveyPageJSON, SurveyJSON } from \"./survey-generator.js\";\n\n// RHF Generator types\nexport type { RHFStep, RHFSchemaOutput } from \"./rhf-generator.js\";\n\n// Re-export survey-core types for convenience\nexport type { IQuestion, IPage, ISurvey, IPanel, IElement } from \"./survey-generator.js\";\n\n// Form domain classes\nexport { FormSpec } from \"./form-spec.js\";\nexport { default as FormField, BasicFormField, FileFormField, FieldType } from \"./form-field.js\";\nexport type { FormFieldType, FormFieldInputType, FormFieldTypeDefinitions, DropdownOption, EditorValidator } from \"./form-field.js\";\nexport { FormFieldCategory } from \"./form-field-category.js\";\nexport { FormFieldValidator } from \"./form-field-validator.js\";\nexport type { FormValidatorDefinitions } from \"./form-field-validator.js\";\n\n// Catalogs\nexport {\n BASE_FIELD_SPECS,\n DEFAULT_VALIDATOR_DEFINITIONS,\n FIELD_TYPE_DEFINITIONS,\n getBaseFieldSpecs,\n getBaseCategories,\n getBaseFieldNames,\n getBaseFieldSpecMap,\n} from \"./catalogs.js\";\n\n// IHS data processing\nexport {\n getDisplayNames,\n getDisplayName,\n getGroupDisplayNames,\n extractTimePeriods,\n groupColumnsByTimePeriod,\n groupFieldsByPattern,\n buildFileFieldTables,\n processIhsDetails,\n groupDetailsByCategory,\n} from './ihs-processing.js'\n\nexport { IhsValueFormat, FileFieldTableType } from './ihs-types.js'\n\n// Roles\nexport { Role } from './roles.js'\n\n// Extraction\nexport { ExtractionJobStatus, ExtractionFileType } from './extraction.js'\n\n// IHS status (canonical enum, mirrors finsys-api)\nexport {\n IhsStatus,\n IHS_VALID_STATUSES,\n IHS_TERMINAL_STATUSES,\n IHS_FAILURE_STATUSES,\n isValidIhsStatus,\n isTerminalIhsStatus,\n isFailureIhsStatus,\n} from './ihs-status.js'\n\n// Extraction status\nexport {\n resolveExtractionStatus,\n DocExtractionStatus,\n} from './extraction-status.js'\n\nexport type {\n ExtractionJobRecord,\n DocExtractionResult,\n ExtractionStatusResult,\n} from './extraction-status.js'\n\nexport type {\n IhsFieldDetail,\n IhsDetailCategory,\n FileFieldTableData,\n FileFieldTableItem,\n} from './ihs-types.js'\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Utility functions for @finsys/core\n */\n\nexport function getPastMonthLabel(monthsAgo: number): string {\n const date = new Date();\n date.setDate(1); // Avoid day-of-month rollover (e.g. Mar 31 → \"February\" would roll to March)\n date.setMonth(date.getMonth() - monthsAgo);\n return date.toLocaleString('default', { month: 'long' });\n}\n\nexport function getPastYearLabel(yearsAgo: number): string {\n const date = new Date();\n return (date.getFullYear() - yearsAgo).toString();\n}\n\n/**\n * Evaluate a SurveyJS-style expression against a data object.\n * e.g. \"{totalFinancing} > 50000\"\n * \n * NOTE: This is a simplified evaluator that replaces {key} with data[key] access.\n * It does not support complex SurveyJS functions like age() or complicated nested paths unless handled by JS.\n */\nexport function evaluateExpression(expression: string, data: any): boolean {\n if (!expression) return true;\n \n try {\n // 1. Replace {variable} with this['variable'] safely\n let jsExpression = expression.replace(/\\{([^}]+)\\}/g, (_, key) => {\n // Clean key if needed (trim)\n return `this['${key.trim()}']`;\n });\n\n // 2. Map SurveyJS comparison operators to JS operators FIRST\n // (before array operator transforms inject JS code containing '=' assignments)\n // Replace single '=' with '==' if it's not already '==' or '!=' or '>=' or '<='\n jsExpression = jsExpression.replace(/(?<![<>!=])=(?![=])/g, '==');\n\n // 3. Map SurveyJS array operators to JS equivalents\n // These run AFTER the '=' transform so their generated JS won't be mangled.\n\n // \"anyof\" → value is one of the items in the array\n // e.g. this['employmentType'] anyof ['01','08','09']\n // → (['01','08','09']).includes(this['employmentType'])\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+anyof\\s+(\\[[^\\]]+\\])/gi,\n (_, ref, arr) => `(${arr}).includes(${ref})`\n );\n\n // \"allof\" → value (expected to be an array) contains all items\n // e.g. this['skills'] allof ['a','b']\n // → ['a','b'].every(item => (this['skills'] || []).includes(item))\n // Arrow functions inherit `this` from enclosing scope (the new Function call),\n // so this works correctly with Function.call(data).\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+allof\\s+(\\[[^\\]]+\\])/gi,\n (_, ref, arr) => `${arr}.every(item => (${ref} || []).includes(item))`\n );\n\n // \"contains\" → string/array contains value\n // e.g. this['roles'] contains 'admin'\n // Uses || [] fallback to handle both string and array values correctly.\n // (|| '' would stringify arrays causing false positives)\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+contains\\s+'([^']+)'/gi,\n (_, ref, val) => `(${ref} || []).includes('${val}')`\n );\n\n // \"notcontains\" → string/array does not contain value\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+notcontains\\s+'([^']+)'/gi,\n (_, ref, val) => `!(${ref} || []).includes('${val}')`\n );\n\n // 4. Execute with Function, binding 'data' as 'this'\n const func = new Function(`return ${jsExpression};`);\n return !!func.call(data || {});\n } catch (e) {\n // console.warn(`Failed to evaluate expression: \"${expression}\"`, e);\n return false;\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Survey Generator - Converts unified form configurations into SurveyJS-compatible JSON\n *\n * This module converts a unified form-config.json into SurveyJS-compatible JSON,\n * resolving field references, applying dynamic titles, and grouping by category.\n */\n\n// Re-export survey-core types for consumers\nexport type { IQuestion, IPage, ISurvey, IPanel, IElement } from \"survey-core\";\nimport { getPastMonthLabel, getPastYearLabel } from \"./utils.js\";\n\n// ============ Unified Form Config Types ============\n\nexport interface Category {\n id: string;\n name: string;\n}\n\nexport interface Choice {\n value: string;\n text: string;\n}\n\nexport interface Validator {\n type: \"regex\" | \"email\" | \"numeric\" | \"text\" | \"expression\" | \"answercount\" | \"custom\";\n text?: string;\n regex?: string;\n minValue?: number;\n maxValue?: number;\n minLength?: number;\n maxLength?: number;\n minCount?: number;\n maxCount?: number;\n expression?: string;\n validator?: string; // For custom validator name\n}\n\n/**\n * FieldData - Field definition in the unified form config\n */\nexport interface FieldData {\n name?: string; // Optional in fields{} (key is name), required in arrays\n displayName?: string;\n type: string;\n inputType?: \"text\" | \"number\" | \"tel\" | \"date\" | \"email\" | \"password\" | \"url\";\n category?: string; // Category ID (strictly string)\n maxLength?: number | string;\n min?: number | string;\n max?: number | string;\n step?: number;\n html?: string;\n choices?: Choice[];\n validators?: Validator[];\n visible?: boolean;\n visibleIf?: string;\n required?: boolean;\n isRequired?: boolean; // SurveyJS compat alias\n placeholder?: string;\n defaultValue?: string | number | boolean | string[];\n readOnly?: boolean;\n startWithNewLine?: boolean;\n enableIf?: string;\n titleLocation?: \"default\" | \"top\" | \"bottom\" | \"left\" | \"hidden\";\n // FinSys-specific fields\n ihs_column_names?: string[];\n requiredForEvaluation?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * FieldReference - How fields are referenced in pages\n */\nexport type FieldReference = \n | string // Simple field name reference\n | { ref: string; [key: string]: unknown } // Reference with overrides\n | { definition: FieldData & { name: string } }; // Inline definition\n\nexport interface PageConfig {\n id: string;\n title?: string;\n description?: string;\n showTOC?: boolean;\n showProgressBar?: boolean;\n showCategoryHeadings?: boolean;\n layout?: \"default\" | \"grid\" | \"vertical\";\n fields: FieldReference[];\n}\n\n/**\n * UnifiedFormConfig - The main configuration type for the unified form format\n */\nexport interface UnifiedFormConfig {\n $schema?: string;\n schemaVersion?: string;\n displayName?: string;\n templateIcon?: string; // Icon identifier for form template editors\n categories: Category[];\n fields: Record<string, FieldData>;\n pages?: PageConfig[]; // Optional when used in editor-only mode (no rendered form)\n}\n\n\n// ============ Output Types (SurveyJS JSON compatible) ============\n\nexport interface SurveyElementJSON {\n type: string;\n name: string;\n title?: string;\n isRequired?: boolean;\n maxLength?: number;\n storeDataAsText?: boolean;\n category?: string;\n [key: string]: unknown;\n}\n\nexport interface SurveyPageJSON {\n name: string;\n title: string;\n elements: Array<{\n type: string;\n name: string;\n elements: SurveyElementJSON[];\n }>;\n}\n\nexport interface SurveyJSON {\n title: string;\n logoPosition?: string;\n pages: SurveyPageJSON[];\n showQuestionNumbers?: string;\n questionErrorLocation?: string;\n completedHtml?: string;\n showTOC?: boolean;\n completeText?: string;\n showPreviewBeforeComplete?: string;\n showProgressBar?: string;\n widthMode?: string;\n width?: string;\n}\n\n// ============ Helper Types ============\n\nexport interface ResolvedField extends FieldData {\n name: string;\n}\n\n/**\n * Normalize a field to ensure backward compatibility\n * - Sets both `required` and `isRequired` to the same value\n */\nfunction normalizeField(field: ResolvedField): ResolvedField {\n // Spec: Fields are required by default unless explicitly false\n const isRequired = field.isRequired !== false && field.required !== false;\n return {\n ...field,\n required: isRequired,\n isRequired: isRequired\n };\n}\n\n/**\n * Resolve a field reference to a full field definition\n */\nfunction resolveFieldReference(\n ref: FieldReference, \n fields: Record<string, FieldData>\n): ResolvedField | null {\n if (typeof ref === \"string\") {\n // Simple string reference\n const fieldDef = fields[ref];\n if (!fieldDef) {\n console.warn(`Field \"${ref}\" not found in fields definition`);\n return null;\n }\n return normalizeField({ name: ref, ...fieldDef });\n }\n \n if (\"definition\" in ref) {\n // Inline definition\n return normalizeField(ref.definition as ResolvedField);\n }\n \n if (\"ref\" in ref) {\n // Reference with overrides\n const fieldDef = fields[ref.ref];\n if (!fieldDef) {\n console.warn(`Field \"${ref.ref}\" not found in fields definition`);\n return null;\n }\n const { ref: fieldName, ...overrides } = ref;\n return normalizeField({ name: fieldName, ...fieldDef, ...overrides });\n }\n \n return null;\n}\n\n/**\n * Apply dynamic title logic (e.g., bank statements with dynamic month labels,\n * financial statements with dynamic year labels)\n */\nexport function applyDynamicTitles(field: ResolvedField): ResolvedField {\n const bankStatementMatch = field.name.match(/^bank_statement_t(\\d+)$/);\n if (bankStatementMatch) {\n const monthsAgo = parseInt(bankStatementMatch[1], 10);\n return {\n ...field,\n displayName: `Bank Statement (${getPastMonthLabel(monthsAgo)})`\n };\n }\n if (field.name === \"financials\") {\n return {\n ...field,\n displayName: `Audited Financial Statement (${getPastYearLabel(1)})`\n };\n }\n return field;\n}\n\n/**\n * Generate SurveyJS JSON from unified form config\n */\nexport function generateSurveyJson(config: UnifiedFormConfig): SurveyJSON | Record<string, never> {\n if (!config.pages || config.pages.length === 0) return {};\n \n const firstPage = config.pages.find(p => p.id !== \"success-message\");\n if (!firstPage) return {};\n\n const categories = config.categories || [];\n const categoryMap: Record<string, string> = categories.reduce((acc, cat) => {\n acc[cat.id] = cat.name;\n return acc;\n }, {} as Record<string, string>);\n\n // Process all fields from the first page\n const processedFields = firstPage.fields\n .map(ref => resolveFieldReference(ref, config.fields))\n .filter((f): f is ResolvedField => f !== null)\n .map(f => applyDynamicTitles(f))\n .map(f => mapFieldToSurveyJS(f));\n\n // Group by Category\n const grouped = processedFields.reduce((acc: Record<string, SurveyElementJSON[]>, field) => {\n const catName = categoryMap[field.category as string] || \"Default\";\n if (!acc[catName]) acc[catName] = [];\n acc[catName].push(field);\n return acc;\n }, {} as Record<string, SurveyElementJSON[]>);\n\n // Build Pages (One Page per Category for Wizard effect)\n const pages: SurveyPageJSON[] = Object.entries(grouped).map(([categoryName, elements]) => ({\n name: categoryName.toLowerCase().replace(/\\s+/g, \"-\"),\n title: firstPage.showCategoryHeadings === false ? \"\" : categoryName,\n elements: [\n {\n type: \"panel\",\n name: `${categoryName.toLowerCase().replace(/\\s+/g, \"-\")}-panel`,\n elements: elements,\n },\n ],\n }));\n\n return {\n title: config.displayName || \"Flexible Financing Program\",\n logoPosition: \"right\",\n pages,\n showQuestionNumbers: \"off\",\n questionErrorLocation: \"bottom\",\n completedHtml: \"<h3>Thank you for completing the form</h3>\",\n showTOC: firstPage.showTOC ?? true,\n completeText: \"Submit\",\n showPreviewBeforeComplete: \"showAllQuestions\",\n showProgressBar: firstPage.showProgressBar === false ? \"off\" : \"top\",\n widthMode: \"responsive\",\n width: \"100%\",\n };\n}\n\n/**\n * Map a field definition to SurveyJS element format\n */\nfunction mapFieldToSurveyJS(field: ResolvedField): SurveyElementJSON {\n const element: SurveyElementJSON = {\n type: field.type,\n name: field.name,\n ...(field.displayName && { title: field.displayName }),\n isRequired: field.isRequired ?? field.required ?? false,\n ...(field.maxLength && { maxLength: Number(field.maxLength) }),\n };\n\n if (field.type === \"file\") {\n element.storeDataAsText = false;\n }\n\n // Copy other properties\n const excludeKeys = [\"displayName\", \"required\", \"category\"];\n Object.keys(field).forEach((key) => {\n if (!(key in element) && !excludeKeys.includes(key) && field[key] !== undefined) {\n element[key] = field[key];\n }\n });\n\n // Store category for grouping\n element.category = field.category ?? \"\";\n\n return element;\n}\n\n/**\n * Resolve all fields from a page to full field definitions\n */\nexport function resolvePageFields(\n page: PageConfig,\n fields: Record<string, FieldData>\n): ResolvedField[] {\n return page.fields\n .map(ref => resolveFieldReference(ref, fields))\n .filter((f): f is ResolvedField => f !== null)\n .map(f => applyDynamicTitles(f));\n}\n\n/**\n * Get category name from category ID (supports string or number IDs)\n */\nexport function getCategoryName(\n categoryId: string | undefined,\n categories: Category[]\n): string {\n if (categoryId === undefined) return \"Other\";\n const cat = categories.find(c => c.id === categoryId);\n return cat?.name || \"Other\";\n}\n\n/**\n * Group fields by their category, maintaining order and creating section breaks\n */\nexport interface FieldGroup {\n category: string;\n categoryName: string;\n fields: ResolvedField[];\n}\n\nexport function groupFieldsByCategory(\n fields: ResolvedField[],\n categories: Category[]\n): FieldGroup[] {\n const groups: FieldGroup[] = [];\n let currentGroup: FieldGroup | null = null;\n\n for (const field of fields) {\n const category = field.category ?? \"\";\n \n if (!currentGroup || currentGroup.category !== category) {\n currentGroup = {\n category,\n categoryName: getCategoryName(category, categories),\n fields: []\n };\n groups.push(currentGroup);\n }\n \n currentGroup.fields.push(field);\n }\n\n return groups;\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { z } from \"zod\";\nimport {\n type UnifiedFormConfig,\n type PageConfig,\n type FieldData,\n type FieldReference,\n type ResolvedField,\n type Category,\n resolvePageFields,\n groupFieldsByCategory,\n applyDynamicTitles,\n type FieldGroup\n} from \"./survey-generator.js\";\nimport { evaluateExpression } from \"./utils.js\";\n\nexport interface RHFStep {\n id: number;\n title: string;\n description?: string;\n fields: ResolvedField[];\n showCategoryHeadings: boolean;\n layout?: \"default\" | \"grid\" | \"vertical\";\n}\n\nexport interface RHFSchemaOutput {\n zodSchema: z.ZodTypeAny; // Can be ZodEffects\n baseSchema: z.ZodObject<any>;\n defaultValues: Record<string, any>;\n fields: ResolvedField[];\n groupedFields: FieldGroup[];\n steps: RHFStep[];\n displayName: string;\n categories: Category[];\n templateIcon?: string;\n}\n\n/**\n * Apply visibility-aware validation to a Zod schema\n */\nfunction applyVisibilityValidation(\n baseObject: z.ZodObject<any>, \n fields: ResolvedField[]\n): z.ZodTypeAny {\n return baseObject.superRefine((data, ctx) => {\n fields.forEach((field) => {\n const isRequired = field.isRequired !== false && field.required !== false && field.type !== \"html\";\n if (!isRequired) return;\n\n // Determine Visibility\n let isVisible = field.visible !== false;\n if (isVisible && field.visibleIf) {\n isVisible = evaluateExpression(field.visibleIf, data);\n }\n\n if (isVisible) {\n const value = data[field.name];\n const isEmpty = \n value === undefined || \n value === null || \n value === \"\" || \n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"This field is required\",\n path: [field.name],\n });\n }\n }\n });\n });\n}\n\nexport function generateRHFSchema(config: UnifiedFormConfig): RHFSchemaOutput {\n // ... (existing logic for collecting fields/building shape)\n const pages = config.pages || [];\n const categories = config.categories || [];\n const fieldsMap = config.fields || {};\n\n if (pages.length === 0) {\n throw new Error(\"v2.0.0 templates must include a 'pages' configuration.\");\n }\n\n // 1. Collect all fields from all pages\n const allFields: ResolvedField[] = [];\n \n for (const page of pages) {\n const pageFields = resolvePageFields(page, fieldsMap);\n allFields.push(...pageFields);\n }\n\n // Apply dynamic titles\n const mergedFields = allFields.map(applyDynamicTitles);\n\n // 2. Build Zod Shape & Default Values\n const shape: Record<string, z.ZodTypeAny> = {};\n const defaultValues: Record<string, any> = {};\n\n mergedFields.forEach((field) => {\n let schema: z.ZodTypeAny = z.string();\n\n // Track base type before validators/wrapping transform it via .refine()\n // (instanceof checks won't work after .refine() converts ZodString → ZodEffects)\n let baseType: \"string\" | \"number\" | \"array\" | \"boolean\" | \"any\" = \"string\";\n\n // --- Base Type Handling ---\n if (field.inputType === \"number\" || field.type === \"number\" || field.type === \"slider\" || field.type === \"range\") {\n schema = z.coerce.number();\n baseType = \"number\";\n defaultValues[field.name] = field.defaultValue !== undefined ? Number(field.defaultValue) : \"\";\n } else if (field.type === \"checkbox\") {\n schema = z.array(z.string());\n baseType = \"array\";\n defaultValues[field.name] = [];\n } else if (field.type === \"file\") {\n schema = z.array(z.any());\n baseType = \"array\";\n defaultValues[field.name] = [];\n } else if (field.type === \"boolean\") {\n schema = z.boolean();\n baseType = \"boolean\";\n defaultValues[field.name] = field.defaultValue ?? false;\n } else if (field.type === \"html\") {\n schema = z.any().optional();\n baseType = \"any\";\n defaultValues[field.name] = \"\";\n } else {\n if (Array.isArray(field.defaultValue)) {\n defaultValues[field.name] = field.defaultValue[0] || \"\";\n } else {\n defaultValues[field.name] = field.defaultValue ?? \"\";\n }\n }\n\n // --- Validation Constraints ---\n\n // Min/Max for Numbers\n if (baseType === \"number\" && schema instanceof z.ZodNumber) {\n let numSchema = schema;\n if (field.min !== undefined) numSchema = numSchema.min(Number(field.min), { message: `Minimum value is ${field.min}` });\n if (field.max !== undefined) numSchema = numSchema.max(Number(field.max), { message: `Maximum value is ${field.max}` });\n schema = numSchema;\n }\n\n const isRequired = field.isRequired !== false && field.required !== false && field.type !== \"html\";\n const isAlwaysVisible = field.visible !== false && !field.visibleIf;\n const isActuallyInput = field.type !== \"html\";\n\n // --- Required .min(1) for always-visible fields ---\n // Must be applied BEFORE validators (.refine) which change the schema type.\n if (isRequired && isAlwaysVisible && isActuallyInput) {\n if (baseType === \"string\" && schema instanceof z.ZodString) {\n schema = schema.min(1, { message: \"This field is required\" });\n } else if (baseType === \"array\" && schema instanceof z.ZodArray) {\n schema = schema.min(1, { message: \"Please select at least one option\" });\n }\n }\n\n // --- Enhancements: Validators ---\n // Applied BEFORE optional wrapping so instanceof checks still work on the\n // base type. The .refine() calls here will transform the schema to ZodEffects,\n // which is why we use baseType for subsequent decisions instead of instanceof.\n\n // Email\n const hasExplicitEmailValidator = field.validators?.some(v => v.type === \"email\");\n if ((field.inputType === \"email\" || field.name === \"email\") && baseType === \"string\" && schema instanceof z.ZodString && !hasExplicitEmailValidator) {\n schema = schema.refine(val => val === \"\" || z.string().email().safeParse(val).success, {\n message: \"Invalid email address\"\n });\n }\n\n // Legacy Validators (Regex / Numeric)\n if (field.validators) {\n field.validators.forEach((v) => {\n if (v.type === \"regex\" && v.regex) {\n try {\n const regex = new RegExp(v.regex);\n if (baseType === \"string\") {\n schema = schema.refine((val: any) => val === \"\" || regex.test(val), {\n message: v.text || \"Invalid format\"\n });\n }\n } catch (e) {\n console.warn(`Invalid regex pattern for field ${field.name}:`, v.regex);\n }\n }\n if (v.type === \"email\" && baseType === \"string\") {\n schema = schema.refine((val: any) => val === \"\" || z.string().email().safeParse(val).success, {\n message: v.text || \"Invalid email\"\n });\n }\n if (v.type === \"numeric\" && schema instanceof z.ZodNumber) {\n let numSchema = schema;\n if (v.minValue !== undefined) numSchema = numSchema.min(v.minValue, { message: v.text });\n if (v.maxValue !== undefined) numSchema = numSchema.max(v.maxValue, { message: v.text });\n schema = numSchema;\n }\n });\n }\n\n // --- Final Wrapper: Optional for conditional/hidden fields ---\n // Uses baseType instead of instanceof since validators may have transformed the schema.\n if (!(isRequired && isAlwaysVisible && isActuallyInput)) {\n if (baseType === \"number\") {\n schema = schema.optional().or(z.literal(\"\")).or(z.null());\n } else if (baseType === \"array\") {\n schema = schema.optional();\n } else if (baseType === \"boolean\") {\n schema = schema.optional();\n } else if (baseType === \"string\") {\n schema = schema.optional().or(z.literal(\"\"));\n }\n }\n\n shape[field.name] = schema;\n });\n\n // 3. Group Fields by Category\n const groupedFields = groupFieldsByCategory(mergedFields, categories);\n\n // 4. Build Steps (Dynamic Wizard)\n const steps: RHFStep[] = pages.map((page, idx) => {\n const pageFields = resolvePageFields(page, fieldsMap);\n\n return {\n id: idx,\n title: page.title || \"\",\n description: page.description,\n fields: pageFields,\n showCategoryHeadings: page.showCategoryHeadings ?? false,\n layout: page.layout\n };\n });\n\n // 5. Build Final Schema with Visibility-Aware Validation\n const baseObject = z.object(shape);\n const zodSchema = applyVisibilityValidation(baseObject, mergedFields);\n\n return {\n zodSchema,\n baseSchema: baseObject,\n defaultValues,\n fields: mergedFields,\n groupedFields,\n steps,\n displayName: config.displayName || \"Application Form\",\n categories,\n templateIcon: config.templateIcon\n };\n}\n\n/**\n * Get Zod schema for a specific step\n */\nexport function getStepSchema(step: RHFStep, fullSchema: any): z.ZodTypeAny {\n const stepFieldNames = step.fields.map(f => f.name);\n const stepShape: Record<string, z.ZodTypeAny> = {};\n \n // 1. Determine the base ZodObject\n let baseObj: z.ZodObject<any> | undefined;\n\n if (fullSchema instanceof z.ZodObject) {\n baseObj = fullSchema;\n } else if (fullSchema && typeof fullSchema === \"object\" && \"baseSchema\" in fullSchema) {\n baseObj = fullSchema.baseSchema as z.ZodObject<any>;\n } else if (fullSchema && \"_def\" in fullSchema && fullSchema._def.schema instanceof z.ZodObject) {\n // Basic Unwrap for ZodEffects\n baseObj = fullSchema._def.schema;\n }\n\n if (!baseObj) {\n console.warn(\"[RHF Generator] Could not extract ZodObject shape for step validation\");\n return z.object({});\n }\n\n const shape = baseObj.shape;\n const stepFields: ResolvedField[] = [];\n \n stepFieldNames.forEach(name => {\n if (name in shape) {\n stepShape[name] = shape[name];\n // Keep track of which fields are in this step\n const fieldDef = step.fields.find(f => f.name === name);\n if (fieldDef) stepFields.push(fieldDef);\n }\n });\n \n const stepBaseObject = z.object(stepShape);\n return applyVisibilityValidation(stepBaseObject, stepFields);\n}\n\n/**\n * Extract default values for a specific step\n */\nexport function getStepDefaultValues(\n step: RHFStep, \n allDefaults: Record<string, any>\n): Record<string, any> {\n const stepDefaults: Record<string, any> = {};\n \n step.fields.forEach(field => {\n if (field.name in allDefaults) {\n stepDefaults[field.name] = allDefaults[field.name];\n }\n });\n \n return stepDefaults;\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport AjvModule, { ErrorObject } from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport unifiedFormSchema from \"./schema/unified-form.schema.json\" with { type: \"json\" };\n\n// Interop for Ajv which can be exported differently in ESM/CJS\nconst Ajv = (AjvModule as any).default || AjvModule;\nconst ajv = new Ajv({ allErrors: true, strict: false });\n\n// Interop for ajv-formats\nconst addFormatsFn = (addFormats as any).default || addFormats;\naddFormatsFn(ajv);\n\n// Register the unified schema\najv.addSchema(unifiedFormSchema, \"unified-form.schema.json\");\n\nexport interface ValidationResult {\n valid: boolean;\n errors?: ErrorObject[];\n message?: string;\n}\n\n/**\n * Validates a unified form-config.json object against its schema\n */\nexport function validateFormConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema(\"unified-form.schema.json\");\n if (!validate) {\n return { valid: false, message: \"Could not load unified form schema\" };\n }\n\n const valid = validate(data);\n return {\n valid: !!valid,\n errors: validate.errors || undefined,\n };\n}\n\n// Legacy exports - these now just call validateFormConfig\n/** @deprecated Use validateFormConfig instead */\nexport function validateFormSpec(data: unknown): ValidationResult {\n return validateFormConfig(data);\n}\n\n/** @deprecated Use validateFormConfig instead */\nexport function validatePagesConfig(data: unknown): ValidationResult {\n return validateFormConfig(data);\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Unified Form Configuration Schema\",\n \"description\": \"A unified schema combining field definitions and page layout configuration for multi-step forms.\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"Reference to this JSON schema file\"\n },\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^v?[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\",\n \"description\": \"Semantic version of the schema format (e.g., 'v2.0.0' or '2.0.0')\"\n },\n \"displayName\": {\n \"type\": \"string\",\n \"description\": \"The human-readable name of the loan product or form\"\n },\n \"templateIcon\": {\n \"type\": \"string\",\n \"description\": \"Icon identifier or path for the form template (used in FinSys editor)\"\n },\n \"categories\": {\n \"type\": \"array\",\n \"description\": \"Category definitions for field organization and grouping\",\n \"items\": {\n \"$ref\": \"#/definitions/category\"\n }\n },\n \"fields\": {\n \"type\": \"object\",\n \"description\": \"Master field definitions keyed by field name\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/fieldData\"\n }\n },\n \"pages\": {\n \"type\": \"array\",\n \"description\": \"Ordered list of pages in the form wizard. Optional for FinSys editor mode.\",\n \"items\": {\n \"$ref\": \"#/definitions/pageConfig\"\n }\n }\n },\n \"required\": [\"categories\", \"fields\", \"pages\"],\n \"definitions\": {\n \"category\": {\n \"type\": \"object\",\n \"description\": \"A category for grouping related form fields\",\n \"properties\": {\n \"id\": { \n \"type\": \"string\",\n \"description\": \"Unique identifier for the category (string)\" \n },\n \"name\": { \"type\": \"string\", \"description\": \"Display name for the category heading\" }\n },\n \"required\": [\"id\", \"name\"]\n },\n \"choice\": {\n \"type\": \"object\",\n \"description\": \"A selectable option for dropdown or radiogroup fields\",\n \"properties\": {\n \"value\": { \"type\": \"string\", \"description\": \"Value submitted when this choice is selected\" },\n \"text\": { \"type\": \"string\", \"description\": \"Display text for this choice\" }\n },\n \"required\": [\"value\", \"text\"]\n },\n \"validator\": {\n \"type\": \"object\",\n \"description\": \"Validation rule for a form field\",\n \"properties\": {\n \"type\": { \n \"type\": \"string\",\n \"enum\": [\"regex\", \"email\", \"numeric\", \"text\", \"expression\", \"answercount\", \"custom\"],\n \"description\": \"Type of validation to perform\"\n },\n \"text\": { \"type\": \"string\", \"description\": \"Error message to display on validation failure\" },\n \"regex\": { \"type\": \"string\", \"description\": \"Regular expression pattern (for type=regex)\" },\n \"minValue\": { \"type\": \"number\", \"description\": \"Minimum numeric value (for type=numeric)\" },\n \"maxValue\": { \"type\": \"number\", \"description\": \"Maximum numeric value (for type=numeric)\" },\n \"minLength\": { \"type\": \"integer\", \"description\": \"Minimum text length (for type=text)\" },\n \"maxLength\": { \"type\": \"integer\", \"description\": \"Maximum text length (for type=text)\" },\n \"minCount\": { \"type\": \"integer\", \"description\": \"Minimum selection count (for type=answercount)\" },\n \"maxCount\": { \"type\": \"integer\", \"description\": \"Maximum selection count (for type=answercount)\" },\n \"expression\": { \"type\": \"string\", \"description\": \"SurveyJS expression for custom validation\" },\n \"validator\": { \"type\": \"string\", \"description\": \"Name of the custom validator function (for type=custom)\" }\n },\n \"required\": [\"type\"]\n },\n \"fieldData\": {\n \"type\": \"object\",\n \"description\": \"Definition of a form field\",\n \"properties\": {\n \"name\": { \n \"type\": \"string\", \n \"description\": \"Field name (optional in fields{} since it's the key, required in arrays)\"\n },\n \"displayName\": { \n \"type\": \"string\",\n \"description\": \"Human-readable label for the field\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"text\", \"number\", \"email\", \"file\", \"dropdown\", \"checkbox\", \"boolean\", \"comment\", \"radiogroup\", \"range\", \"html\", \"slider\"],\n \"description\": \"Field type determining rendering and behavior\"\n },\n \"inputType\": { \n \"type\": \"string\", \n \"enum\": [\"text\", \"number\", \"tel\", \"date\", \"email\", \"password\", \"url\"],\n \"description\": \"HTML input type override for text fields\" \n },\n \"category\": { \n \"type\": \"string\",\n \"description\": \"Category ID this field belongs to (string to match category.id)\" \n },\n \"categoryId\": { \n \"type\": \"integer\",\n \"description\": \"Legacy integer category ID (deprecated, prefer 'category')\"\n },\n \"maxLength\": { \"type\": [\"integer\", \"string\"], \"description\": \"Maximum character length\" },\n \"min\": { \"type\": [\"integer\", \"string\"], \"description\": \"Minimum value for numeric/slider fields\" },\n \"max\": { \"type\": [\"integer\", \"string\"], \"description\": \"Maximum value for numeric/slider fields\" },\n \"step\": { \"type\": \"number\", \"description\": \"Step increment for slider/range fields\" },\n \"html\": { \"type\": \"string\", \"description\": \"HTML content for type=html fields\" },\n \"choices\": {\n \"type\": \"array\",\n \"description\": \"Options for dropdown or radiogroup fields\",\n \"items\": { \"$ref\": \"#/definitions/choice\" }\n },\n \"validators\": {\n \"type\": \"array\",\n \"description\": \"Validation rules to apply to this field\",\n \"items\": { \"$ref\": \"#/definitions/validator\" }\n },\n \"visible\": { \n \"type\": \"boolean\", \n \"default\": true,\n \"description\": \"Whether the field is visible\"\n },\n \"visibleIf\": { \n \"type\": \"string\", \n \"description\": \"SurveyJS expression for conditional visibility\" \n },\n \"required\": { \n \"type\": \"boolean\",\n \"description\": \"Whether the field is required for form submission\"\n },\n \"isRequired\": { \n \"type\": \"boolean\", \n \"description\": \"Alias for 'required' (SurveyJS compatibility)\" \n },\n \"placeholder\": { \n \"type\": \"string\",\n \"description\": \"Placeholder text shown in empty field\"\n },\n \"defaultValue\": { \n \"type\": [\"string\", \"number\", \"boolean\", \"array\"],\n \"description\": \"Default value for the field\"\n },\n \"readOnly\": { \n \"type\": \"boolean\",\n \"description\": \"Whether the field is read-only\"\n },\n \"startWithNewLine\": { \n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"If false, field appears on same line as previous field\" \n },\n \"enableIf\": { \n \"type\": \"string\", \n \"description\": \"SurveyJS expression for conditional enable/disable\" \n },\n \"titleLocation\": { \n \"type\": \"string\", \n \"enum\": [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n \"description\": \"Position of the field label\"\n },\n \"ihs_column_names\": {\n \"type\": \"array\",\n \"description\": \"FinSys IHS column mappings for file fields (used for data extraction)\",\n \"items\": { \"type\": \"string\" }\n },\n \"requiredForEvaluation\": { \n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Whether this field is required for loan evaluation (FinSys specific)\"\n }\n },\n \"required\": [\"type\"]\n },\n \"fieldReference\": {\n \"description\": \"Reference to a field in a page, supporting simple refs, refs with overrides, or inline definitions\",\n \"oneOf\": [\n { \n \"type\": \"string\", \n \"description\": \"Simple field name reference to a field defined in 'fields'\" \n },\n {\n \"type\": \"object\",\n \"description\": \"Field reference with optional property overrides\",\n \"properties\": {\n \"ref\": { \"type\": \"string\", \"description\": \"Reference to field name in 'fields' object\" },\n \"displayName\": { \"type\": \"string\", \"description\": \"Override display name for this page\" },\n \"type\": { \"type\": \"string\", \"description\": \"Override field type for this usage\" },\n \"defaultValue\": { \"type\": [\"string\", \"number\", \"boolean\", \"array\"] },\n \"readOnly\": { \"type\": \"boolean\" },\n \"visible\": { \"type\": \"boolean\" },\n \"visibleIf\": { \"type\": \"string\" },\n \"required\": { \"type\": \"boolean\" },\n \"min\": { \"type\": [\"integer\", \"string\"] },\n \"max\": { \"type\": [\"integer\", \"string\"] },\n \"choices\": { \"type\": \"array\", \"items\": { \"$ref\": \"#/definitions/choice\" } }\n },\n \"required\": [\"ref\"]\n },\n {\n \"type\": \"object\",\n \"description\": \"Inline field definition (page-specific field not in master 'fields')\",\n \"properties\": {\n \"definition\": { \n \"allOf\": [\n { \"$ref\": \"#/definitions/fieldData\" },\n { \n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"]\n }\n ]\n }\n },\n \"required\": [\"definition\"]\n }\n ]\n },\n \"pageConfig\": {\n \"type\": \"object\",\n \"description\": \"Configuration for a single page/step in the form wizard\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"description\": \"Unique page identifier\" },\n \"title\": { \"type\": \"string\", \"description\": \"Page title displayed to user\" },\n \"description\": { \"type\": \"string\", \"description\": \"Optional page description or instructions\" },\n \"showTOC\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Show table of contents\" },\n \"showProgressBar\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Show progress indicator\" },\n \"showCategoryHeadings\": { \n \"type\": \"boolean\", \n \"default\": false,\n \"description\": \"Render category names as section headings when category changes between fields\"\n },\n \"layout\": { \n \"type\": \"string\", \n \"enum\": [\"default\", \"grid\", \"vertical\"],\n \"description\": \"Layout mode for the page\"\n },\n \"fields\": {\n \"type\": \"array\",\n \"description\": \"Ordered list of field references to display on this page\",\n \"items\": { \"$ref\": \"#/definitions/fieldReference\" }\n }\n },\n \"required\": [\"id\", \"fields\"]\n }\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class FormFieldCategory {\n private _id: string;\n private _name: string;\n\n constructor(id: string | number, name: string) {\n this._id = String(id);\n this._name = name;\n }\n\n get id(): string {\n return this._id;\n }\n\n get name(): string {\n return this._name;\n }\n\n set name(value: string) {\n this._name = value;\n }\n\n toJSON() {\n return {\n id: this._id,\n name: this._name,\n };\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FieldData, Choice, Validator } from \"./survey-generator.js\";\n\nexport enum FieldType {\n FILE = 'file',\n TEXT = 'text',\n DROPDOWN = 'dropdown',\n BOOLEAN = 'boolean',\n CHECKBOX = 'checkbox',\n RADIOGROUP = 'radiogroup',\n SLIDER = 'slider',\n HTML = 'html',\n TAGBOX = 'tagbox',\n NUMBER = 'number',\n EMAIL = 'email',\n COMMENT = 'comment',\n RANGE = 'range',\n UNKNOWN = 'unknown',\n}\n\nexport interface FormFieldType {\n name: string;\n displayName: string;\n}\n\nexport interface FormFieldInputType {\n name: string;\n displayName: string;\n}\n\nexport interface FormFieldTypeDefinitions {\n version: number;\n types: FormFieldType[];\n input_types: FormFieldInputType[];\n}\n\nexport interface DropdownOption {\n id: number;\n name: string;\n displayName: string;\n choices: Choice[];\n}\n\nexport interface EditorValidator {\n id: number;\n displayName: string;\n class: string;\n description: string;\n isRequired: boolean;\n validators: Validator[];\n}\n\nfunction toFieldType(value: string): FieldType {\n const typeMap: Record<string, FieldType> = {\n [FieldType.FILE]: FieldType.FILE,\n [FieldType.TEXT]: FieldType.TEXT,\n [FieldType.DROPDOWN]: FieldType.DROPDOWN,\n [FieldType.BOOLEAN]: FieldType.BOOLEAN,\n [FieldType.CHECKBOX]: FieldType.CHECKBOX,\n [FieldType.RADIOGROUP]: FieldType.RADIOGROUP,\n [FieldType.SLIDER]: FieldType.SLIDER,\n [FieldType.HTML]: FieldType.HTML,\n [FieldType.TAGBOX]: FieldType.TAGBOX,\n [FieldType.NUMBER]: FieldType.NUMBER,\n [FieldType.EMAIL]: FieldType.EMAIL,\n [FieldType.COMMENT]: FieldType.COMMENT,\n [FieldType.RANGE]: FieldType.RANGE,\n };\n return typeMap[value] || FieldType.UNKNOWN;\n}\n\nexport default abstract class FormField {\n fieldObject: FieldData;\n\n constructor(name: string, displayName: string, type: string, category: string) {\n this.fieldObject = {\n name,\n displayName,\n type,\n category,\n };\n }\n\n static fromObject(fieldObject: FieldData): FormField {\n if (!fieldObject.name) {\n throw new Error('Field name is required');\n }\n\n if (!fieldObject.displayName || !fieldObject.category) {\n throw new Error(\n `Invalid field object: '${fieldObject.name}' field missing displayName or category`\n );\n }\n\n const identifiedType = toFieldType(fieldObject.type as string);\n if (identifiedType === FieldType.UNKNOWN) {\n throw new Error(\n `'${fieldObject.name}' field has unsupported or missing type: ${fieldObject.type}`\n );\n }\n\n if (\n fieldObject.choices &&\n !['dropdown', 'checkbox', 'radiogroup', 'tagbox'].includes(fieldObject.type as string)\n ) {\n // Logic remained as is\n }\n\n if (fieldObject.type === 'dropdown' && !fieldObject.choices) {\n throw new Error(\n `Invalid field object: '${fieldObject.name}' field has type dropdown, but does not have choices`\n );\n }\n\n let field: FormField;\n if (fieldObject.type === 'file') {\n field = new FileFormField(\n fieldObject.name,\n fieldObject.displayName || fieldObject.name,\n fieldObject.type,\n String(fieldObject.category),\n fieldObject.ihs_column_names || []\n );\n } else {\n field = new BasicFormField(\n fieldObject.name,\n fieldObject.displayName || fieldObject.name,\n fieldObject.type || 'text',\n String(fieldObject.category)\n );\n }\n\n field.fieldObject = { ...fieldObject };\n field.fieldObject.category = String(field.fieldObject.category);\n\n // Remove legacy categoryId property\n delete (field.fieldObject as any).categoryId;\n\n return field;\n }\n\n abstract getFieldNames(): string[];\n\n protected cleanObject(obj: any): any {\n if (obj === null || obj === undefined) return obj;\n\n let target = obj;\n if (typeof obj.toJSON === 'function' && obj !== this) {\n target = obj.toJSON();\n }\n\n if (Array.isArray(target)) {\n return target.map((v: any) => (typeof v === 'object' ? this.cleanObject(v) : v));\n }\n\n if (typeof target !== 'object') return target;\n\n const cleaned: any = {};\n Object.keys(target).forEach((key) => {\n const value = target[key];\n if (value !== null && value !== undefined && value !== '') {\n if (typeof value === 'object') {\n cleaned[key] = this.cleanObject(value);\n } else {\n cleaned[key] = value;\n }\n }\n });\n return cleaned;\n }\n\n toJSON() {\n return this.cleanObject({ ...this.fieldObject });\n }\n\n get displayName(): string {\n return this.fieldObject.displayName || this.fieldObject.name || '';\n }\n\n set displayName(newDisplayName: string) {\n this.fieldObject.displayName = newDisplayName;\n }\n\n get name(): string {\n return this.fieldObject.name || '';\n }\n\n get type(): FieldType {\n return toFieldType(this.fieldObject.type as string);\n }\n\n get inputType(): string {\n return this.fieldObject.inputType ?? '';\n }\n\n get categoryId(): string {\n return String(this.fieldObject.category || '');\n }\n\n set categoryId(categoryId: string) {\n this.fieldObject.category = categoryId;\n }\n\n get defaultValue(): any {\n return this.fieldObject.defaultValue;\n }\n\n set defaultValue(value: any) {\n this.fieldObject.defaultValue = value;\n }\n\n get placeholder(): string | undefined {\n return this.fieldObject.placeholder;\n }\n\n get validators(): Validator[] | undefined {\n return this.fieldObject.validators as Validator[];\n }\n\n get choices(): Choice[] {\n return (this.fieldObject.choices as Choice[]) ?? [];\n }\n\n set choices(choices: Choice[]) {\n this.fieldObject.choices = choices;\n }\n\n get visible(): boolean {\n return this.fieldObject.visible ?? true;\n }\n\n get visibleIf(): string | undefined {\n return this.fieldObject.visibleIf;\n }\n\n get isRequired(): boolean {\n return this.fieldObject.required ?? this.fieldObject.isRequired ?? true;\n }\n\n get startWithNewLine(): boolean {\n return this.fieldObject.startWithNewLine ?? true;\n }\n\n get requiredForEvaluation(): boolean {\n return this.fieldObject.requiredForEvaluation ?? true;\n }\n\n get maxLength(): number | undefined {\n return typeof this.fieldObject.maxLength === 'string'\n ? Number.parseInt(this.fieldObject.maxLength)\n : this.fieldObject.maxLength;\n }\n\n get min(): number | undefined {\n return typeof this.fieldObject.min === 'string'\n ? Number.parseFloat(this.fieldObject.min)\n : this.fieldObject.min;\n }\n\n get max(): number | undefined {\n return typeof this.fieldObject.max === 'string'\n ? Number.parseFloat(this.fieldObject.max)\n : this.fieldObject.max;\n }\n}\n\nexport class BasicFormField extends FormField {\n constructor(name: string, displayName: string, type: string, category: string) {\n super(name, displayName, type, category);\n }\n\n getFieldNames(): string[] {\n if (this.fieldObject.requiredForEvaluation === false) {\n return [];\n }\n\n return [this.fieldObject.name!];\n }\n}\n\nexport class FileFormField extends FormField {\n constructor(\n name: string,\n displayName: string,\n type: string,\n category: string,\n ihs_column_names: string[]\n ) {\n super(name, displayName, type, category);\n this.fieldObject.ihs_column_names = ihs_column_names;\n }\n\n getFieldNames(): string[] {\n if (this.fieldObject.requiredForEvaluation === false) {\n return [];\n }\n\n return this.fieldObject.ihs_column_names || [];\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormFieldCategory } from \"./form-field-category.js\";\nimport FormField from \"./form-field.js\";\nimport type { FieldData, PageConfig, UnifiedFormConfig } from \"./survey-generator.js\";\nimport { validateFormConfig } from \"./validator.js\";\nimport semver from \"semver\";\n\nexport class FormSpec {\n private _categories: FormFieldCategory[] = [];\n private _fields: FormField[] = [];\n private _displayName: string;\n private _templateIcon?: string;\n private _schemaVersion: string;\n private _pages: PageConfig[] = [];\n\n constructor(\n displayName: string,\n categories: FormFieldCategory[],\n fields: FormField[],\n pages: PageConfig[] = [],\n templateIcon?: string,\n schemaVersion: string = FormSpec.MAX_PARSER_SCHEMA_VERSION\n ) {\n this._displayName = displayName;\n this._templateIcon = templateIcon;\n this._categories = categories;\n this._fields = fields;\n this._pages = pages;\n this._schemaVersion = schemaVersion;\n }\n\n static readonly MIN_PARSER_SCHEMA_VERSION = 'v1.0.0';\n static readonly MAX_PARSER_SCHEMA_VERSION = 'v2.0.0';\n\n get fieldNames(): string[] {\n let names: string[] = [];\n\n this.fields.forEach((field) => {\n names = names.concat(field.getFieldNames());\n });\n\n return names;\n }\n\n get schemaVersion(): string {\n return this._schemaVersion;\n }\n\n get requiresUpgrade(): boolean {\n return semver.lt(this._schemaVersion, FormSpec.MAX_PARSER_SCHEMA_VERSION);\n }\n\n upgradeToV2(): void {\n this._schemaVersion = FormSpec.MAX_PARSER_SCHEMA_VERSION;\n }\n\n get displayName(): string {\n return this._displayName;\n }\n\n set displayName(newDisplayName: string) {\n this._displayName = newDisplayName;\n }\n\n get templateIcon(): string | undefined {\n return this._templateIcon;\n }\n\n set templateIcon(value: string | undefined) {\n this._templateIcon = value;\n }\n\n get categories(): FormFieldCategory[] {\n return this._categories;\n }\n\n set categories(categories: FormFieldCategory[]) {\n this._categories = categories;\n }\n\n get fields(): FormField[] {\n return this._fields;\n }\n\n set fields(fields: FormField[]) {\n this._fields = fields;\n }\n\n get pages(): PageConfig[] {\n return this._pages;\n }\n\n set pages(value: PageConfig[]) {\n this._pages = value;\n }\n\n addField(field: FormField): void {\n this._fields.push(field);\n }\n\n updateField(field: FormField): void {\n const index = this._fields.findIndex((f) => f.name === field.name);\n if (index !== -1) {\n this._fields[index] = field;\n } else {\n throw new Error(\n `${field.name} not found. Form Spec of ${this._displayName} cannot update ${field.name}`\n );\n }\n }\n\n removeField(fieldName: string): void {\n const fieldIndex = this._fields.findIndex((f) => f.name === fieldName);\n if (fieldIndex !== -1) {\n this._fields.splice(fieldIndex, 1);\n\n this._pages.forEach((page) => {\n page.fields = page.fields.filter((fieldRef) => {\n let refName: string | undefined;\n if (typeof fieldRef === 'string') {\n refName = fieldRef;\n } else if ('ref' in fieldRef) {\n refName = fieldRef.ref;\n } else if ('definition' in fieldRef) {\n refName = fieldRef.definition.name;\n }\n return refName !== fieldName;\n });\n });\n }\n }\n\n getFieldsByCategory(categoryName: string): FormField[] {\n const foundCategory = this.categories.find((category) => category.name === categoryName);\n\n if (!foundCategory) {\n return [];\n }\n\n return this._fields.filter((field) => field.categoryId === foundCategory.id);\n }\n\n validate(): { valid: boolean; errors?: any[] } {\n const config = this.toJSON() as UnifiedFormConfig;\n const result = validateFormConfig(config);\n const errors: any[] = [];\n\n if (result.errors) {\n result.errors.forEach((err: any) => {\n let path = err.instancePath || err.dataPath || '';\n path = path.replace(/^\\//, '').replace(/\\//g, '.');\n const prefix = path ? `${path}: ` : '';\n errors.push({\n message: `${prefix}${err.message}`,\n path: path,\n });\n });\n }\n\n if (!this._displayName || this._displayName.trim() === '') {\n errors.push({\n message: 'displayName: Form display name is required',\n path: 'displayName',\n });\n }\n\n const categoryIds = new Set(this._categories.map((c) => String(c.id)));\n this._fields.forEach((field) => {\n if (field.categoryId && !categoryIds.has(String(field.categoryId))) {\n errors.push({\n message: `fields.${field.name}.category: references non-existent category '${field.categoryId}'`,\n path: `fields.${field.name}.category`,\n });\n }\n });\n\n const fieldNames = new Set(this._fields.map((f) => f.name));\n this._pages.forEach((page, pageIndex) => {\n page.fields.forEach((fieldRef, fieldIndex) => {\n let refName: string | undefined;\n if (typeof fieldRef === 'string') {\n refName = fieldRef;\n } else if (fieldRef && (fieldRef as any).ref) {\n refName = (fieldRef as any).ref;\n } else if (fieldRef && (fieldRef as any).definition) {\n refName = (fieldRef as any).definition.name;\n }\n\n if (refName && !fieldNames.has(refName)) {\n errors.push({\n message: `pages.${pageIndex}.fields.${fieldIndex}: references non-existent field '${refName}'`,\n path: `pages.${pageIndex}.fields.${fieldIndex}`,\n });\n }\n });\n });\n\n return {\n valid: result.valid && errors.length === (result.errors?.length || 0),\n errors: errors.length > 0 ? errors : undefined,\n };\n }\n\n private cleanObject(obj: any): any {\n if (obj === null || obj === undefined) return obj;\n\n let target = obj;\n if (typeof obj.toJSON === 'function' && obj !== this) {\n target = obj.toJSON();\n }\n\n if (Array.isArray(target)) {\n return target.map((v: any) => (typeof v === 'object' ? this.cleanObject(v) : v));\n }\n\n if (typeof target !== 'object') return target;\n\n const cleaned: any = {};\n Object.keys(target).forEach((key) => {\n const value = target[key];\n if (value !== null && value !== undefined && value !== '') {\n if (typeof value === 'object') {\n cleaned[key] = this.cleanObject(value);\n } else {\n cleaned[key] = value;\n }\n }\n });\n return cleaned;\n }\n\n toJSON(): object {\n const fieldsMap: Record<string, any> = {};\n this._fields.forEach((field) => {\n fieldsMap[field.name] = field.toJSON();\n delete fieldsMap[field.name].name;\n });\n\n return this.cleanObject({\n $schema:\n '../../../node_modules/@finsys/core/dist/schema/unified-form.schema.json',\n schemaVersion: this._schemaVersion,\n displayName: this._displayName,\n templateIcon: this._templateIcon,\n categories: this._categories,\n fields: fieldsMap,\n pages: this._pages,\n });\n }\n\n static fromJSON(jsonString: string): FormSpec {\n let jsonData: any;\n try {\n jsonData = JSON.parse(jsonString);\n } catch (error) {\n console.error(`Error parsing JSON for Loantype with string: ${jsonString}`);\n throw error;\n }\n\n if (!jsonData.schemaVersion) {\n throw new Error('Invalid JSON: schemaVersion is missing or invalid');\n }\n\n if (semver.lt(jsonData.schemaVersion, FormSpec.MIN_PARSER_SCHEMA_VERSION)) {\n throw new Error(\n `This form spec file is using an outdated schema version ${jsonData.schemaVersion}. Minimum supported version is ${FormSpec.MIN_PARSER_SCHEMA_VERSION}`\n );\n }\n\n if (!jsonData.displayName) {\n throw new Error('Invalid JSON: displayName is missing or invalid');\n }\n\n if (!jsonData.categories) {\n throw new Error('Invalid JSON: categories is missing or invalid');\n }\n\n if (!jsonData.fields) {\n throw new Error('Invalid JSON: fields is missing or invalid');\n }\n\n if (!jsonData.pages || jsonData.pages.length === 0) {\n if (semver.satisfies(jsonData.schemaVersion, '>=2.0.0')) {\n console.warn(\n `v2.0.0 template ${jsonData.displayName} is missing pages. Generating default pages.`\n );\n }\n }\n\n let fieldObjects: FieldData[] = [];\n if (Array.isArray(jsonData.fields)) {\n fieldObjects = jsonData.fields;\n } else if (typeof jsonData.fields === 'object' && jsonData.fields !== null) {\n fieldObjects = Object.entries(jsonData.fields).map(([name, data]: [string, any]) => {\n return {\n name,\n ...data,\n };\n });\n }\n\n fieldObjects.forEach((f: any) => {\n if (f.categoryId && !f.category) {\n f.category = String(f.categoryId);\n } else if (f.category) {\n f.category = String(f.category);\n }\n });\n\n const categories = (jsonData.categories || []).map((cat: any) => {\n return new FormFieldCategory(String(cat.id), cat.name);\n });\n\n const fields: FormField[] = fieldObjects.map((fieldObject) => {\n return FormField.fromObject(fieldObject);\n });\n\n let pages = jsonData.pages || [];\n if (pages.length === 0) {\n const categoriesMap: Record<string, string[]> = {};\n fields.forEach((f) => {\n const catId = f.categoryId;\n if (!categoriesMap[catId]) {\n categoriesMap[catId] = [];\n }\n categoriesMap[catId].push(f.name);\n });\n\n pages = categories\n .map((cat: FormFieldCategory) => ({\n id: `page-${cat.id}`,\n title: cat.name,\n fields: categoriesMap[cat.id] || [],\n }))\n .filter((p: PageConfig) => p.fields.length > 0);\n }\n\n return new FormSpec(\n jsonData.displayName,\n categories,\n fields,\n pages,\n jsonData.templateIcon,\n jsonData.schemaVersion\n );\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Validator } from \"./survey-generator.js\";\nimport type { EditorValidator } from \"./form-field.js\";\n\nexport interface FormValidatorDefinitions {\n options: EditorValidator[];\n version: number;\n}\n\nexport class FormFieldValidator implements EditorValidator {\n id: number;\n displayName: string;\n class: string;\n description: string;\n isRequired: boolean;\n validators: Validator[];\n\n constructor(validatorData: EditorValidator) {\n this.id = validatorData.id;\n this.displayName = validatorData.displayName;\n this.class = validatorData.class;\n this.description = validatorData.description;\n this.isRequired = validatorData.isRequired;\n this.validators = validatorData.validators;\n }\n\n validate(value: any): boolean {\n for (const validator of this.validators) {\n switch (validator.type) {\n case 'numeric':\n if (!this.validateNumeric(value, validator.minValue, validator.maxValue)) {\n return false;\n }\n break;\n case 'text':\n if (!this.validateText(value, validator.minLength, validator.maxLength)) {\n return false;\n }\n break;\n }\n }\n return true;\n }\n\n private validateNumeric(value: number, min?: number, max?: number): boolean {\n if (min !== undefined && value < min) return false;\n if (max !== undefined && value > max) return false;\n return true;\n }\n\n private validateText(value: string, minLength?: number, maxLength?: number): boolean {\n if (minLength !== undefined && value.length < minLength) return false;\n if (maxLength !== undefined && value.length > maxLength) return false;\n return true;\n }\n}\n","{\n \"schemaVersion\": \"v2.0.0\",\n \"categories\": [\n {\n \"id\": \"1\",\n \"name\": \"Basic Information\"\n },\n {\n \"id\": \"2\",\n \"name\": \"Personal Information\"\n },\n {\n \"id\": \"3\",\n \"name\": \"Company Information\"\n },\n {\n \"id\": \"4\",\n \"name\": \"Financial Information\"\n },\n {\n \"id\": \"5\",\n \"name\": \"Employment Information\"\n },\n {\n \"id\": \"6\",\n \"name\": \"Consent and Legal Agreements\"\n },\n {\n \"id\": \"7\",\n \"name\": \"Address Information\"\n },\n {\n \"id\": \"8\",\n \"name\": \"Contact Information\"\n },\n {\n \"id\": \"9\",\n \"name\": \"Declarations\"\n },\n {\n \"id\": \"10\",\n \"name\": \"Account Information\"\n },\n {\n \"id\": \"11\",\n \"name\": \"Loan Information\"\n },\n {\n \"id\": \"12\",\n \"name\": \"Vehicle Information\"\n },\n {\n \"id\": \"13\",\n \"name\": \"Document Upload\"\n }\n ],\n \"fields\": [\n {\n \"name\": \"fullName\",\n \"displayName\": \"Full Name\",\n \"placeholder\": \"E.g. John Doe\",\n \"type\": \"text\",\n \"maxLength\": 80,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please make sure the name doesn't include extra spaces, numbers, or invalid symbols\",\n \"regex\": \"^[A-Za-z'-]+(?:\\\\s[A-Za-z'-]+)*\\\\s?[A-Za-z'-]+$\"\n }\n ],\n \"category\": \"1\"\n },\n {\n \"name\": \"email\",\n \"displayName\": \"Email\",\n \"placeholder\": \"E.g. johndoe@example.com\",\n \"type\": \"text\",\n \"inputType\": \"email\",\n \"maxLength\": 65,\n \"validators\": [\n {\n \"type\": \"email\",\n \"text\": \"Value must be a valid email\"\n }\n ],\n \"category\": \"1\"\n },\n {\n \"name\": \"mobilePhoneNoAreaCode\",\n \"displayName\": \"Mobile Phone Number Area Code\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"1\"\n },\n {\n \"name\": \"mobilePhoneNo\",\n \"displayName\": \"Mobile Phone Number\",\n \"placeholder\": \"Mobile Phone Number\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"maxLength\": 12,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^(011[0-9]{8}|01[2346789][0-9]{7}|[2-9][0-9]{0,8})$\"\n }\n ],\n \"category\": \"1\"\n },\n {\n \"type\": \"text\",\n \"name\": \"idNumber\",\n \"title\": \"ID Number\",\n \"placeholder\": \"E.g. 700513065143\",\n \"isRequired\": true,\n \"displayName\": \"IC Number\",\n \"maxLength\": 25,\n \"inputType\": \"text\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{12}$\",\n \"text\": \"Please enter exactly 12 digits numbers\"\n },\n {\n \"type\": \"regex\",\n \"regex\": \"^(\\\\d{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\\\d{6}$\",\n \"text\": \"First 6 digits must be valid birth year (00-99), month (01-12), and day (01-31)\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"dateOfBirth\",\n \"displayName\": \"Date of Birth\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"visible\": false,\n \"category\": \"2\"\n },\n {\n \"name\": \"companyName\",\n \"displayName\": \"Company Name\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"companyRegNo\",\n \"displayName\": \"Company Registration Number\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"natureOfBusiness\",\n \"displayName\": \"Nature of Business\",\n \"placeholder\": \"Select your Nature of Business\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Manufacturing\",\n \"text\": \"Manufacturing\"\n },\n {\n \"value\": \"Services\",\n \"text\": \"Services\"\n },\n {\n \"value\": \"Others\",\n \"text\": \"Others\"\n }\n ],\n \"maxLength\": 80,\n \"category\": \"3\"\n },\n {\n \"name\": \"officeFacilityType\",\n \"displayName\": \"Office Facility Type\",\n \"placeholder\": \"Select your facility type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Owned\",\n \"text\": \"Owned\"\n },\n {\n \"value\": \"Rented\",\n \"text\": \"Rented\"\n }\n ],\n \"maxLength\": 80,\n \"category\": \"3\"\n },\n {\n \"name\": \"companySize\",\n \"displayName\": \"Company Size\",\n \"placeholder\": \"Select your company size\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"selfEmplyed\",\n \"text\": \"Self-employed\"\n },\n {\n \"value\": \"1-10\",\n \"text\": \"1-10\"\n },\n {\n \"value\": \"11-20\",\n \"text\": \"11-20\"\n },\n {\n \"value\": \"21-30\",\n \"text\": \"21-30\"\n },\n {\n \"value\": \"31-50\",\n \"text\": \"31-50\"\n },\n {\n \"value\": \"51-100\",\n \"text\": \"51-100\"\n },\n {\n \"value\": \"101-500\",\n \"text\": \"101-500\"\n },\n {\n \"value\": \"500+\",\n \"text\": \"500+\"\n }\n ],\n \"category\": \"3\"\n },\n {\n \"name\": \"facilityAddress\",\n \"displayName\": \"Facility Address\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"companyEntityType\",\n \"displayName\": \"Company Entity Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Branch office\",\n \"text\": \"Branch office\"\n },\n {\n \"value\": \"Company Limited by guarantee\",\n \"text\": \"Company Limited by guarantee\"\n },\n {\n \"value\": \"Enterprise or Sole Proprietorship\",\n \"text\": \"Enterprise or Sole Proprietorship\"\n },\n {\n \"value\": \"Foreign Companies\",\n \"text\": \"Foreign Companies\"\n },\n {\n \"value\": \"Limited Liability Partnership\",\n \"text\": \"Limited Liability Partnership\"\n },\n {\n \"value\": \"Partnership\",\n \"text\": \"Partnership\"\n },\n {\n \"value\": \"Private Limited Company (Sdn. Bhd.)\",\n \"text\": \"Private Limited Company (Sdn. Bhd.)\"\n },\n {\n \"value\": \"Public Limited Company (Bhd.)\",\n \"text\": \"Public Limited Company (Bhd.)\"\n },\n {\n \"value\": \"Proprietorship/ Partnership\",\n \"text\": \"Proprietorship/ Partnership\"\n }\n ],\n \"category\": \"3\"\n },\n {\n \"name\": \"tnbTariff\",\n \"displayName\": \"TNB Tariff\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"B\",\n \"text\": \"B\"\n },\n {\n \"value\": \"C1\",\n \"text\": \"C1\"\n },\n {\n \"value\": \"C2\",\n \"text\": \"C2\"\n },\n {\n \"value\": \"D\",\n \"text\": \"D\"\n },\n {\n \"value\": \"E1\",\n \"text\": \"E1\"\n },\n {\n \"value\": \"E2\",\n \"text\": \"E2\"\n },\n {\n \"value\": \"E3\",\n \"text\": \"E3\"\n },\n {\n \"value\": \"H\",\n \"text\": \"H\"\n },\n {\n \"value\": \"H1\",\n \"text\": \"H1\"\n },\n {\n \"value\": \"H2\",\n \"text\": \"H2\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"avgMaximumDemand\",\n \"displayName\": \"Average Maximum Demand\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"ctRatio\",\n \"displayName\": \"CT Ratio\",\n \"type\": \"text\",\n \"category\": \"4\"\n },\n {\n \"name\": \"buildingType\",\n \"displayName\": \"Building Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Warehouse/Factory\",\n \"text\": \"Warehouse/Factory\"\n },\n {\n \"value\": \"Office building/Shoplot\",\n \"text\": \"Office building/Shoplot\"\n },\n {\n \"value\": \"Shopping Mall/Complex\",\n \"text\": \"Shopping Mall/Complex\"\n },\n {\n \"value\": \"School\",\n \"text\": \"School\"\n },\n {\n \"value\": \"Other\",\n \"text\": \"Other\"\n }\n ],\n \"category\": \"3\"\n },\n {\n \"name\": \"tnbBills\",\n \"displayName\": \"TNB Bills\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"2\"\n },\n {\n \"name\": \"financingSelection\",\n \"displayName\": \"Financing Selection\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Loan\",\n \"text\": \"Loan\"\n },\n {\n \"value\": \"Leasing\",\n \"text\": \"Leasing\"\n },\n {\n \"value\": \"Extended Terms\",\n \"text\": \"Extended Terms\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"businessSector\",\n \"displayName\": \"Business Sector\",\n \"type\": \"text\",\n \"category\": \"5\"\n },\n {\n \"name\": \"companyBackground\",\n \"displayName\": \"Company Background\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"isApplication\",\n \"displayName\": \"Is Application\",\n \"type\": \"boolean\",\n \"category\": \"6\"\n },\n {\n \"name\": \"isReview\",\n \"displayName\": \"Is Review\",\n \"type\": \"boolean\",\n \"category\": \"6\"\n },\n {\n \"name\": \"addressLine1\",\n \"displayName\": \"Address Line 1\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"addressLine2\",\n \"displayName\": \"Address Line 2\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"addressLine3\",\n \"displayName\": \"Address Line 3\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"addressType\",\n \"displayName\": \"Address Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"P\",\n \"text\": \"Permanent\"\n },\n {\n \"value\": \"O\",\n \"text\": \"Office\"\n },\n {\n \"value\": \"R\",\n \"text\": \"Residence\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"city\",\n \"displayName\": \"City\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"country\",\n \"displayName\": \"Country\",\n \"type\": \"dropdown\",\n \"titleLocation\": \"hidden\",\n \"placeholder\": \"Country\",\n \"choices\": [\n {\n \"text\": \"Afghanistan\",\n \"value\": \"AFG\"\n },\n {\n \"text\": \"Angola\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"Albania\",\n \"value\": \"ALB\"\n },\n {\n \"text\": \"Andorra\",\n \"value\": \"AND\"\n },\n {\n \"text\": \"United Arab Emirates\",\n \"value\": \"UAE\"\n },\n {\n \"text\": \"Argentina\",\n \"value\": \"ARG\"\n },\n {\n \"text\": \"Armenia\",\n \"value\": \"ARM\"\n },\n {\n \"text\": \"Antigua and Barbuda\",\n \"value\": \"ANT\"\n },\n {\n \"text\": \"Australia\",\n \"value\": \"AUS\"\n },\n {\n \"text\": \"Austria\",\n \"value\": \"AUT\"\n },\n {\n \"text\": \"Azerbaijan\",\n \"value\": \"AZE\"\n },\n {\n \"text\": \"Burundi\",\n \"value\": \"BDI\"\n },\n {\n \"text\": \"Belgium\",\n \"value\": \"BEL\"\n },\n {\n \"text\": \"Benin\",\n \"value\": \"BEN\"\n },\n {\n \"text\": \"Burkina Faso\",\n \"value\": \"BFA\"\n },\n {\n \"text\": \"Bangladesh\",\n \"value\": \"BGD\"\n },\n {\n \"text\": \"Bulgaria\",\n \"value\": \"BUL\"\n },\n {\n \"text\": \"Bahrain\",\n \"value\": \"BRN\"\n },\n {\n \"text\": \"Bahamas\",\n \"value\": \"BAH\"\n },\n {\n \"text\": \"Bosnia and Herzegovina\",\n \"value\": \"BIH\"\n },\n {\n \"text\": \"Belarus\",\n \"value\": \"BLR\"\n },\n {\n \"text\": \"Belize\",\n \"value\": \"BIZ\"\n },\n {\n \"text\": \"Bolivia\",\n \"value\": \"BOL\"\n },\n {\n \"text\": \"Brazil\",\n \"value\": \"BRA\"\n },\n {\n \"text\": \"Barbados\",\n \"value\": \"BAR\"\n },\n {\n \"text\": \"Brunei\",\n \"value\": \"BRU\"\n },\n {\n \"text\": \"Bhutan\",\n \"value\": \"BHU\"\n },\n {\n \"text\": \"Botswana\",\n \"value\": \"BOT\"\n },\n {\n \"text\": \"Central African Republic\",\n \"value\": \"CAF\"\n },\n {\n \"text\": \"Canada\",\n \"value\": \"CAN\"\n },\n {\n \"text\": \"Switzerland\",\n \"value\": \"CHE\"\n },\n {\n \"text\": \"Chile\",\n \"value\": \"CHI\"\n },\n {\n \"text\": \"China\",\n \"value\": \"CHN\"\n },\n {\n \"text\": \"Ivory Coast\",\n \"value\": \"CIV\"\n },\n {\n \"text\": \"Cameroon\",\n \"value\": \"CMR\"\n },\n {\n \"text\": \"DR Congo\",\n \"value\": \"COD\"\n },\n {\n \"text\": \"Republic of the Congo\",\n \"value\": \"CGO\"\n },\n {\n \"text\": \"Colombia\",\n \"value\": \"COL\"\n },\n {\n \"text\": \"Comoros\",\n \"value\": \"COM\"\n },\n {\n \"text\": \"Cape Verde\",\n \"value\": \"CPV\"\n },\n {\n \"text\": \"Costa Rica\",\n \"value\": \"CRC\"\n },\n {\n \"text\": \"Cuba\",\n \"value\": \"CUB\"\n },\n {\n \"text\": \"Cyprus\",\n \"value\": \"CYP\"\n },\n {\n \"text\": \"Czechia\",\n \"value\": \"CZE\"\n },\n {\n \"text\": \"Germany\",\n \"value\": \"DEU\"\n },\n {\n \"text\": \"Djibouti\",\n \"value\": \"DJI\"\n },\n {\n \"text\": \"Dominica\",\n \"value\": \"DMA\"\n },\n {\n \"text\": \"Denmark\",\n \"value\": \"DEN\"\n },\n {\n \"text\": \"Dominican Republic\",\n \"value\": \"DOM\"\n },\n {\n \"text\": \"Algeria\",\n \"value\": \"ALG\"\n },\n {\n \"text\": \"Ecuador\",\n \"value\": \"ECU\"\n },\n {\n \"text\": \"Egypt\",\n \"value\": \"EGY\"\n },\n {\n \"text\": \"Eritrea\",\n \"value\": \"ERI\"\n },\n {\n \"text\": \"Spain\",\n \"value\": \"ESP\"\n },\n {\n \"text\": \"Estonia\",\n \"value\": \"EST\"\n },\n {\n \"text\": \"Ethiopia\",\n \"value\": \"ETH\"\n },\n {\n \"text\": \"Finland\",\n \"value\": \"FIN\"\n },\n {\n \"text\": \"Fiji\",\n \"value\": \"FIJ\"\n },\n {\n \"text\": \"France\",\n \"value\": \"FRA\"\n },\n {\n \"text\": \"Micronesia\",\n \"value\": \"FSM\"\n },\n {\n \"text\": \"Gabon\",\n \"value\": \"GAB\"\n },\n {\n \"text\": \"United Kingdom\",\n \"value\": \"GBR\"\n },\n {\n \"text\": \"Georgia\",\n \"value\": \"GEO\"\n },\n {\n \"text\": \"Ghana\",\n \"value\": \"GHA\"\n },\n {\n \"text\": \"Guinea\",\n \"value\": \"GUI\"\n },\n {\n \"text\": \"Gambia\",\n \"value\": \"GAM\"\n },\n {\n \"text\": \"Equatorial Guinea\",\n \"value\": \"GEQ\"\n },\n {\n \"text\": \"Greece\",\n \"value\": \"GRE\"\n },\n {\n \"text\": \"Grenada\",\n \"value\": \"GRN\"\n },\n {\n \"text\": \"Guatemala\",\n \"value\": \"GUA\"\n },\n {\n \"text\": \"Guyana\",\n \"value\": \"GUY\"\n },\n {\n \"text\": \"Honduras\",\n \"value\": \"HON\"\n },\n {\n \"text\": \"Croatia\",\n \"value\": \"CRO\"\n },\n {\n \"text\": \"Haiti\",\n \"value\": \"HAI\"\n },\n {\n \"text\": \"Hungary\",\n \"value\": \"HUN\"\n },\n {\n \"text\": \"Indonesia\",\n \"value\": \"INA\"\n },\n {\n \"text\": \"India\",\n \"value\": \"IND\"\n },\n {\n \"text\": \"Ireland\",\n \"value\": \"IRL\"\n },\n {\n \"text\": \"Iran\",\n \"value\": \"IRI\"\n },\n {\n \"text\": \"Iraq\",\n \"value\": \"IRQ\"\n },\n {\n \"text\": \"Iceland\",\n \"value\": \"ISL\"\n },\n {\n \"text\": \"Israel\",\n \"value\": \"ISR\"\n },\n {\n \"text\": \"Italy\",\n \"value\": \"ITA\"\n },\n {\n \"text\": \"Jamaica\",\n \"value\": \"JAM\"\n },\n {\n \"text\": \"Jordan\",\n \"value\": \"JOR\"\n },\n {\n \"text\": \"Japan\",\n \"value\": \"JPN\"\n },\n {\n \"text\": \"Kazakhstan\",\n \"value\": \"KAZ\"\n },\n {\n \"text\": \"Kenya\",\n \"value\": \"KEN\"\n },\n {\n \"text\": \"Kyrgyzstan\",\n \"value\": \"KGZ\"\n },\n {\n \"text\": \"Cambodia\",\n \"value\": \"KHM\"\n },\n {\n \"text\": \"Kiribati\",\n \"value\": \"KIR\"\n },\n {\n \"text\": \"Saint Kitts and Nevis\",\n \"value\": \"SKN\"\n },\n {\n \"text\": \"South Korea\",\n \"value\": \"KOR\"\n },\n {\n \"text\": \"Kuwait\",\n \"value\": \"KUW\"\n },\n {\n \"text\": \"Laos\",\n \"value\": \"LAO\"\n },\n {\n \"text\": \"Lebanon\",\n \"value\": \"LIB\"\n },\n {\n \"text\": \"Liberia\",\n \"value\": \"LBR\"\n },\n {\n \"text\": \"Libya\",\n \"value\": \"LBA\"\n },\n {\n \"text\": \"Saint Lucia\",\n \"value\": \"LCA\"\n },\n {\n \"text\": \"Liechtenstein\",\n \"value\": \"LIE\"\n },\n {\n \"text\": \"Sri Lanka\",\n \"value\": \"SRI\"\n },\n {\n \"text\": \"Lesotho\",\n \"value\": \"LES\"\n },\n {\n \"text\": \"Lithuania\",\n \"value\": \"LTU\"\n },\n {\n \"text\": \"Luxembourg\",\n \"value\": \"LUX\"\n },\n {\n \"text\": \"Latvia\",\n \"value\": \"LAT\"\n },\n {\n \"text\": \"Morocco\",\n \"value\": \"MAR\"\n },\n {\n \"text\": \"Monaco\",\n \"value\": \"MON\"\n },\n {\n \"text\": \"Moldova\",\n \"value\": \"MDA\"\n },\n {\n \"text\": \"Madagascar\",\n \"value\": \"MAD\"\n },\n {\n \"text\": \"Maldives\",\n \"value\": \"MDV\"\n },\n {\n \"text\": \"Mexico\",\n \"value\": \"MEX\"\n },\n {\n \"text\": \"Marshall Islands\",\n \"value\": \"MHL\"\n },\n {\n \"text\": \"North Macedonia\",\n \"value\": \"MKD\"\n },\n {\n \"text\": \"Mali\",\n \"value\": \"MLI\"\n },\n {\n \"text\": \"Malta\",\n \"value\": \"MLT\"\n },\n {\n \"text\": \"Myanmar\",\n \"value\": \"MYA\"\n },\n {\n \"text\": \"Montenegro\",\n \"value\": \"MNE\"\n },\n {\n \"text\": \"Mongolia\",\n \"value\": \"MGL\"\n },\n {\n \"text\": \"Mozambique\",\n \"value\": \"MOZ\"\n },\n {\n \"text\": \"Mauritania\",\n \"value\": \"MTN\"\n },\n {\n \"text\": \"Mauritius\",\n \"value\": \"MRI\"\n },\n {\n \"text\": \"Malawi\",\n \"value\": \"MAW\"\n },\n {\n \"text\": \"Malaysia\",\n \"value\": \"MAS\"\n },\n {\n \"text\": \"Namibia\",\n \"value\": \"NAM\"\n },\n {\n \"text\": \"Niger\",\n \"value\": \"NIG\"\n },\n {\n \"text\": \"Nigeria\",\n \"value\": \"NGR\"\n },\n {\n \"text\": \"Nicaragua\",\n \"value\": \"NCA\"\n },\n {\n \"text\": \"Netherlands\",\n \"value\": \"NED\"\n },\n {\n \"text\": \"Norway\",\n \"value\": \"NOR\"\n },\n {\n \"text\": \"Nepal\",\n \"value\": \"NEP\"\n },\n {\n \"text\": \"Nauru\",\n \"value\": \"NRU\"\n },\n {\n \"text\": \"New Zealand\",\n \"value\": \"NZL\"\n },\n {\n \"text\": \"Oman\",\n \"value\": \"OMA\"\n },\n {\n \"text\": \"Pakistan\",\n \"value\": \"PAK\"\n },\n {\n \"text\": \"Panama\",\n \"value\": \"PAN\"\n },\n {\n \"text\": \"Peru\",\n \"value\": \"PER\"\n },\n {\n \"text\": \"Philippines\",\n \"value\": \"PHI\"\n },\n {\n \"text\": \"Palau\",\n \"value\": \"PLW\"\n },\n {\n \"text\": \"Papua New Guinea\",\n \"value\": \"PNG\"\n },\n {\n \"text\": \"Poland\",\n \"value\": \"POL\"\n },\n {\n \"text\": \"North Korea\",\n \"value\": \"PRK\"\n },\n {\n \"text\": \"Portugal\",\n \"value\": \"POR\"\n },\n {\n \"text\": \"Paraguay\",\n \"value\": \"PAR\"\n },\n {\n \"text\": \"Qatar\",\n \"value\": \"QAT\"\n },\n {\n \"text\": \"Romania\",\n \"value\": \"ROU\"\n },\n {\n \"text\": \"Russia\",\n \"value\": \"RUS\"\n },\n {\n \"text\": \"Rwanda\",\n \"value\": \"RWA\"\n },\n {\n \"text\": \"Saudi Arabia\",\n \"value\": \"KSA\"\n },\n {\n \"text\": \"Sudan\",\n \"value\": \"SUD\"\n },\n {\n \"text\": \"Senegal\",\n \"value\": \"SEN\"\n },\n {\n \"text\": \"Singapore\",\n \"value\": \"SIN\"\n },\n {\n \"text\": \"Solomon Islands\",\n \"value\": \"SOL\"\n },\n {\n \"text\": \"Sierra Leone\",\n \"value\": \"SLE\"\n },\n {\n \"text\": \"El Salvador\",\n \"value\": \"ESA\"\n },\n {\n \"text\": \"San Marino\",\n \"value\": \"SMR\"\n },\n {\n \"text\": \"Somalia\",\n \"value\": \"SOM\"\n },\n {\n \"text\": \"Serbia\",\n \"value\": \"SRB\"\n },\n {\n \"text\": \"S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe\",\n \"value\": \"STP\"\n },\n {\n \"text\": \"Suriname\",\n \"value\": \"SUR\"\n },\n {\n \"text\": \"Slovakia\",\n \"value\": \"SVK\"\n },\n {\n \"text\": \"Slovenia\",\n \"value\": \"SLO\"\n },\n {\n \"text\": \"Sweden\",\n \"value\": \"SWE\"\n },\n {\n \"text\": \"Eswatini\",\n \"value\": \"SWZ\"\n },\n {\n \"text\": \"Seychelles\",\n \"value\": \"SEY\"\n },\n {\n \"text\": \"Syria\",\n \"value\": \"SYR\"\n },\n {\n \"text\": \"Chad\",\n \"value\": \"CHA\"\n },\n {\n \"text\": \"Togo\",\n \"value\": \"TOG\"\n },\n {\n \"text\": \"Thailand\",\n \"value\": \"THA\"\n },\n {\n \"text\": \"Tajikistan\",\n \"value\": \"TJK\"\n },\n {\n \"text\": \"Turkmenistan\",\n \"value\": \"TKM\"\n },\n {\n \"text\": \"Timor-Leste\",\n \"value\": \"TLS\"\n },\n {\n \"text\": \"Tonga\",\n \"value\": \"TGA\"\n },\n {\n \"text\": \"Trinidad and Tobago\",\n \"value\": \"TTO\"\n },\n {\n \"text\": \"Tunisia\",\n \"value\": \"TUN\"\n },\n {\n \"text\": \"Turkey\",\n \"value\": \"TUR\"\n },\n {\n \"text\": \"Tuvalu\",\n \"value\": \"TUV\"\n },\n {\n \"text\": \"Tanzania\",\n \"value\": \"TAN\"\n },\n {\n \"text\": \"Uganda\",\n \"value\": \"UGA\"\n },\n {\n \"text\": \"Ukraine\",\n \"value\": \"UKR\"\n },\n {\n \"text\": \"Uruguay\",\n \"value\": \"URU\"\n },\n {\n \"text\": \"United States\",\n \"value\": \"USA\"\n },\n {\n \"text\": \"Uzbekistan\",\n \"value\": \"UZB\"\n },\n {\n \"text\": \"Saint Vincent and the Grenadines\",\n \"value\": \"VIN\"\n },\n {\n \"text\": \"Venezuela\",\n \"value\": \"VEN\"\n },\n {\n \"text\": \"Vietnam\",\n \"value\": \"VIE\"\n },\n {\n \"text\": \"Vanuatu\",\n \"value\": \"VAN\"\n },\n {\n \"text\": \"Samoa\",\n \"value\": \"SAM\"\n },\n {\n \"text\": \"Yemen\",\n \"value\": \"YEM\"\n },\n {\n \"text\": \"South Africa\",\n \"value\": \"RSA\"\n },\n {\n \"text\": \"Zambia\",\n \"value\": \"ZAM\"\n },\n {\n \"text\": \"Zimbabwe\",\n \"value\": \"ZIM\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"durationInCurrentResidenceMth\",\n \"displayName\": \"Duration in Current Residence (Months)\",\n \"placeholder\": \"Duration in Current Residence (Months)\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 2,\n \"min\": 0,\n \"max\": 11,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|10|11)$\",\n \"text\": \"Value must be a number between 0-11.\"\n }\n ],\n \"inputType\": \"number\",\n \"category\": \"7\"\n },\n {\n \"name\": \"durationInCurrentResidenceYr\",\n \"displayName\": \"Duration in Current Residence (Years)\",\n \"placeholder\": \"Duration in Current Residence (Years)\",\n \"type\": \"text\",\n \"maxLength\": 2,\n \"min\": 0,\n \"max\": 99,\n \"inputType\": \"number\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|[1-9][0-9])$\",\n \"text\": \"Value must be a number between 0-99.\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"officePhoneNo\",\n \"displayName\": \"Employer Phone Number\",\n \"placeholder\": \"Employer Phone Number\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 12,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"The phone number must be a valid Malaysian number\",\n \"regex\": \"^(011[0-9]{8}|(60[4-7]|004|005|006|007|009|609|012|013|014|016|017|019)[0-9]{7})$\"\n }\n ],\n \"inputType\": \"tel\",\n \"category\": \"5\"\n },\n {\n \"name\": \"officePhoneNoAreaCode\",\n \"displayName\": \"Office Phone Number Area Code\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"8\"\n },\n {\n \"name\": \"postcode\",\n \"displayName\": \"Postcode\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"state\",\n \"displayName\": \"Permanent State\",\n \"placeholder\": \"Select State Of The Permanenet Address\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"A\",\n \"text\": \"PERAK\"\n },\n {\n \"value\": \"B\",\n \"text\": \"SELANGOR\"\n },\n {\n \"value\": \"C\",\n \"text\": \"PAHANG\"\n },\n {\n \"value\": \"D\",\n \"text\": \"KELANTAN\"\n },\n {\n \"value\": \"J\",\n \"text\": \"JOHOR\"\n },\n {\n \"value\": \"K\",\n \"text\": \"KEDAH\"\n },\n {\n \"value\": \"L\",\n \"text\": \"WP LABUAN\"\n },\n {\n \"value\": \"M\",\n \"text\": \"MELAKA\"\n },\n {\n \"value\": \"N\",\n \"text\": \"NEGERI SEMBILAN\"\n },\n {\n \"value\": \"P\",\n \"text\": \"PULAU PINANG\"\n },\n {\n \"value\": \"Q\",\n \"text\": \"SARAWAK\"\n },\n {\n \"value\": \"R\",\n \"text\": \"PERLIS\"\n },\n {\n \"value\": \"S\",\n \"text\": \"SABAH\"\n },\n {\n \"value\": \"T\",\n \"text\": \"TERENGGANU\"\n },\n {\n \"value\": \"U\",\n \"text\": \"WP PUTRAJAYA\"\n },\n {\n \"value\": \"W\",\n \"text\": \"WP KUALA LUMPUR\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"residenceAddress\",\n \"displayName\": \"Residence address same as permanent address?\",\n \"type\": \"boolean\",\n \"defaultValue\": false,\n \"requiredForEvaluation\": false,\n \"category\": \"7\"\n },\n {\n \"name\": \"officestate\",\n \"displayName\": \"Employer State\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"placeholder\": \"Select State Of The Employer Address\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"A\",\n \"text\": \"PERAK\"\n },\n {\n \"value\": \"B\",\n \"text\": \"SELANGOR\"\n },\n {\n \"value\": \"C\",\n \"text\": \"PAHANG\"\n },\n {\n \"value\": \"D\",\n \"text\": \"KELANTAN\"\n },\n {\n \"value\": \"J\",\n \"text\": \"JOHOR\"\n },\n {\n \"value\": \"K\",\n \"text\": \"KEDAH\"\n },\n {\n \"value\": \"L\",\n \"text\": \"WP LABUAN\"\n },\n {\n \"value\": \"M\",\n \"text\": \"MELAKA\"\n },\n {\n \"value\": \"N\",\n \"text\": \"NEGERI SEMBILAN\"\n },\n {\n \"value\": \"P\",\n \"text\": \"PULAU PINANG\"\n },\n {\n \"value\": \"Q\",\n \"text\": \"SARAWAK\"\n },\n {\n \"value\": \"R\",\n \"text\": \"PERLIS\"\n },\n {\n \"value\": \"S\",\n \"text\": \"SABAH\"\n },\n {\n \"value\": \"T\",\n \"text\": \"TERENGGANU\"\n },\n {\n \"value\": \"U\",\n \"text\": \"WP PUTRAJAYA\"\n },\n {\n \"value\": \"W\",\n \"text\": \"WP KUALA LUMPUR\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"type\": \"text\",\n \"name\": \"age\",\n \"title\": \"Age\",\n \"isRequired\": true,\n \"displayName\": \"Age\",\n \"visible\": false,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number age between 21 and 55.\",\n \"regex\": \"^(2[1-9]|[3-4][0-9]|55)$\"\n }\n ],\n \"defaultValue\": \"21\",\n \"category\": \"2\"\n },\n {\n \"name\": \"consentCrossSelling\",\n \"displayName\": \"Consent Cross-Selling, Consent to Obtain Information from CTOS and Disclosure of Information\",\n \"type\": \"boolean\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{consentCrossSelling} = true\",\n \"text\": \"You must provide consent to Consent Cross-Selling.\"\n }\n ],\n \"defaultValue\": false,\n \"showTitle\": true,\n \"category\": \"9\"\n },\n {\n \"type\": \"text\",\n \"name\": \"consentObtainInfoFromCtos\",\n \"displayName\": \"Consent to Obtain Information from CTOS\",\n \"defaultValue\": \"yes\",\n \"showTitle\": true,\n \"visible\": false,\n \"category\": \"9\"\n },\n {\n \"name\": \"dateJoined\",\n \"displayName\": \"Date Joined\",\n \"placeholder\": \"Date Joined\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 10,\n \"inputType\": \"date\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\",\n \"text\": \"Date must be in YYYY-MM-DD format\"\n },\n {\n \"type\": \"custom\",\n \"validator\": \"validateNotFutureDate\",\n \"text\": \"Date of joining cannot be in the future\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"disclosureOfInformation\",\n \"displayName\": \"Disclosure of Information\",\n \"type\": \"text\",\n \"defaultValue\": \"yes\",\n \"showTitle\": true,\n \"visible\": false,\n \"category\": \"9\"\n },\n {\n \"name\": \"educationLevel\",\n \"displayName\": \"Education Level\",\n \"placeholder\": \"Highest Education Level\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Primary\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Secondary/High school\"\n },\n {\n \"value\": \"03\",\n \"text\": \"College graduate-certificate/Diploma holder\"\n },\n {\n \"value\": \"04\",\n \"text\": \"University Degree/Associate Degree\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Master Degree\"\n },\n {\n \"value\": \"06\",\n \"text\": \"Doctorate\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"emerContactTelNo1\",\n \"displayName\": \"Emergency Contact Telephone Number 1\",\n \"startWithNewLine\": false,\n \"placeholder\": \"Emergency Contact Telephone Number 1\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^((60[4-79]|0[4-79])[0-9]{7}|011[0-9]{8}|01[2346789][0-9]{7})$\"\n }\n ],\n \"type\": \"text\",\n \"maxLength\": 18,\n \"inputType\": \"tel\",\n \"category\": \"8\"\n },\n {\n \"name\": \"emerContactTelNo1AreaCode\",\n \"displayName\": \"Emergency Contact Telephone Number 1 Area Code\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"8\"\n },\n {\n \"name\": \"emergencyContactName\",\n \"displayName\": \"Emergency Contact Name\",\n \"placeholder\": \"Emergency Contact Name\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"8\"\n },\n {\n \"name\": \"employerName\",\n \"displayName\": \"Employer Name\",\n \"placeholder\": \"Employer Name\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"5\"\n },\n {\n \"name\": \"employmentSector\",\n \"displayName\": \"Employment Sector\",\n \"placeholder\": \"Select Employment Sector\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"0010\",\n \"text\": \"Accounting\"\n },\n {\n \"value\": \"0020\",\n \"text\": \"Actuarial / Statistic\"\n },\n {\n \"value\": \"0030\",\n \"text\": \"Advertising / Marketing / PR\"\n },\n {\n \"value\": \"0040\",\n \"text\": \"Aerospace\"\n },\n {\n \"value\": \"0050\",\n \"text\": \"Agricultural / Chemicals / Forest Products\"\n },\n {\n \"value\": \"0060\",\n \"text\": \"Architecture\"\n },\n {\n \"value\": \"0070\",\n \"text\": \"Automotive / Manufacturing / Production\"\n },\n {\n \"value\": \"0080\",\n \"text\": \"Aviation\"\n },\n {\n \"value\": \"0090\",\n \"text\": \"Buying / Retail\"\n },\n {\n \"value\": \"0100\",\n \"text\": \"Computers / Electronics\"\n },\n {\n \"value\": \"0110\",\n \"text\": \"Construction\"\n },\n {\n \"value\": \"0120\",\n \"text\": \"Creative / Graphics\"\n },\n {\n \"value\": \"0130\",\n \"text\": \"Customer Service\"\n },\n {\n \"value\": \"0140\",\n \"text\": \"Education (includes students) / Training\"\n },\n {\n \"value\": \"0150\",\n \"text\": \"Energy / Mining\"\n },\n {\n \"value\": \"0160\",\n \"text\": \"Engineering\"\n },\n {\n \"value\": \"0170\",\n \"text\": \"Finance / Banking / Insurance\"\n },\n {\n \"value\": \"0180\",\n \"text\": \"Freight / Shipping\"\n },\n {\n \"value\": \"0190\",\n \"text\": \"Government / Military / Public Service\"\n },\n {\n \"value\": \"0200\",\n \"text\": \"Recreation / Hospitality / Sports\"\n },\n {\n \"value\": \"0210\",\n \"text\": \"Hotel / Food\"\n },\n {\n \"value\": \"0220\",\n \"text\": \"Human Resources\"\n },\n {\n \"value\": \"0230\",\n \"text\": \"Investment\"\n },\n {\n \"value\": \"0240\",\n \"text\": \"Journalist / Editor\"\n },\n {\n \"value\": \"0250\",\n \"text\": \"Media / Publishing\"\n },\n {\n \"value\": \"0260\",\n \"text\": \"Medical / Health Services\"\n },\n {\n \"value\": \"0270\",\n \"text\": \"Non-Profit Organization\"\n },\n {\n \"value\": \"0280\",\n \"text\": \"Geology\"\n },\n {\n \"value\": \"0290\",\n \"text\": \"Pharmaceuticals\"\n },\n {\n \"value\": \"0300\",\n \"text\": \"Real Estate\"\n },\n {\n \"value\": \"0310\",\n \"text\": \"Administrative and Support Service Activities\"\n },\n {\n \"value\": \"0320\",\n \"text\": \"Social Services\"\n },\n {\n \"value\": \"0330\",\n \"text\": \"Telecommunications / Networking\"\n },\n {\n \"value\": \"0340\",\n \"text\": \"Travel\"\n },\n {\n \"value\": \"0350\",\n \"text\": \"Transportation\"\n },\n {\n \"value\": \"0360\",\n \"text\": \"Entertainment / Arts\"\n },\n {\n \"value\": \"0370\",\n \"text\": \"Electricity, Gas, Steam and Air Conditioning Supply\"\n },\n {\n \"value\": \"0380\",\n \"text\": \"Water Supply; Sewerage, Waste Management and Remediation Activities\"\n },\n {\n \"value\": \"0390\",\n \"text\": \"Activities of Households as Employers; Undifferentiated Goods and Services Producing Activities of Households for Own Use\"\n },\n {\n \"value\": \"0400\",\n \"text\": \"Activities of Extraterritorial Organisations and Bodies\"\n },\n {\n \"value\": \"0410\",\n \"text\": \"Unemployed/ Outside Labour Force\"\n },\n {\n \"value\": \"0420\",\n \"text\": \"Other Service Activities\"\n },\n {\n \"value\": \"0430\",\n \"text\": \"Legal Services\"\n },\n {\n \"value\": \"0440\",\n \"text\": \"Research & Experimental Development Services\"\n },\n {\n \"value\": \"0450\",\n \"text\": \"Other Professional, Scientific and Technical Activities\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"employmentStatus\",\n \"displayName\": \"Employment Status\",\n \"placeholder\": \"Select Employment Status\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '08', '09']\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"CON\",\n \"text\": \"Contract\"\n },\n {\n \"value\": \"FRL\",\n \"text\": \"Freelance\"\n },\n {\n \"value\": \"OTH\",\n \"text\": \"Others\"\n },\n {\n \"value\": \"PER\",\n \"text\": \"Permanent\"\n },\n {\n \"value\": \"PRT\",\n \"text\": \"Part Time\"\n },\n {\n \"value\": \"TMP\",\n \"text\": \"Temporary\"\n },\n {\n \"value\": \"UPROB\",\n \"text\": \"Under Probation\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"employmentType\",\n \"displayName\": \"Employment Type\",\n \"placeholder\": \"Select Employment Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Private Employee\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Employer\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Housewife\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Retired\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Student\"\n },\n {\n \"value\": \"06\",\n \"text\": \"Unemployed\"\n },\n {\n \"value\": \"07\",\n \"text\": \"Self-employed/Own Account Worker\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Government Employee\"\n },\n {\n \"value\": \"09\",\n \"text\": \"Reporting Entity Employee\"\n },\n {\n \"value\": \"10\",\n \"text\": \"Unpaid Family Worker\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"gender\",\n \"displayName\": \"Gender\",\n \"placeholder\": \"Select Gender\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"M\",\n \"text\": \"Male\"\n },\n {\n \"value\": \"F\",\n \"text\": \"Female\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"idType\",\n \"displayName\": \"ID Type\",\n \"type\": \"dropdown\",\n \"defaultValue\": \"MyKad\",\n \"choices\": [\n {\n \"value\": \"MK\",\n \"text\": \"MyKad\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"lengthOfServiceMonth\",\n \"displayName\": \"Length of Service (Months)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"5\"\n },\n {\n \"name\": \"lengthOfServiceYear\",\n \"displayName\": \"Length of Service (Years)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"5\"\n },\n {\n \"name\": \"mailingBillingAddressInd\",\n \"displayName\": \"Preferred Mailing Address\",\n \"placeholder\": \"Select Preferred Mailing Address\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"O\",\n \"text\": \"Office\"\n },\n {\n \"value\": \"R\",\n \"text\": \"Residence\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"maritalStatus\",\n \"displayName\": \"Marital Status\",\n \"placeholder\": \"Select Marital Status\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"S\",\n \"text\": \"Single\"\n },\n {\n \"value\": \"M\",\n \"text\": \"Married\"\n },\n {\n \"value\": \"W\",\n \"text\": \"Widowed\"\n },\n {\n \"value\": \"D\",\n \"text\": \"Divorced\"\n },\n {\n \"value\": \"E\",\n \"text\": \"Separated\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"monthlyGrossIncome\",\n \"displayName\": \"Monthly Gross Income\",\n \"placeholder\": \"E.g. 6000\",\n \"visibleIf\": \"{employmentType} anyof ['01', '07', '08', '09', '10']\",\n \"type\": \"text\",\n \"maxLength\": 15,\n \"inputType\": \"number\",\n \"min\": 2000,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d+(\\\\.\\\\d+)?$\",\n \"text\": \"Please enter a valid non-negative number.\"\n },\n {\n \"type\": \"expression\",\n \"expression\": \"{monthlyGrossIncome} >= 2000\",\n \"text\": \"Income must be at least RM 2000.\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"monthlyNetIncome\",\n \"displayName\": \"Monthly Net Income\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"nationality\",\n \"displayName\": \"Nationality\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"noOfDependants\",\n \"displayName\": \"Number of Dependants\",\n \"placeholder\": \"Number Of Dependants\",\n \"type\": \"text\",\n \"startWithNewLine\": false,\n \"maxLength\": 3,\n \"inputType\": \"number\",\n \"min\": 0,\n \"max\": 99,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number between 0 and 99.\",\n \"regex\": \"^[0-9][0-9]?$\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"occupation\",\n \"displayName\": \"Occupation\",\n \"placeholder\": \"Select Occupation\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"001\",\n \"text\": \"Accountant\"\n },\n {\n \"value\": \"005\",\n \"text\": \"Army Officer\"\n },\n {\n \"value\": \"007\",\n \"text\": \"Assistant Director\"\n },\n {\n \"value\": \"008\",\n \"text\": \"Assistant Manager\"\n },\n {\n \"value\": \"009\",\n \"text\": \"Auditor\"\n },\n {\n \"value\": \"010\",\n \"text\": \"Baker\"\n },\n {\n \"value\": \"011\",\n \"text\": \"Beautician\"\n },\n {\n \"value\": \"012\",\n \"text\": \"Broker\"\n },\n {\n \"value\": \"013\",\n \"text\": \"Business Partner\"\n },\n {\n \"value\": \"014\",\n \"text\": \"Businessman/Businesswoman\"\n },\n {\n \"value\": \"015\",\n \"text\": \"Carpenter\"\n },\n {\n \"value\": \"016\",\n \"text\": \"Cashier\"\n },\n {\n \"value\": \"017\",\n \"text\": \"CEO\"\n },\n {\n \"value\": \"018\",\n \"text\": \"Chairman\"\n },\n {\n \"value\": \"019\",\n \"text\": \"Chief Accountant\"\n },\n {\n \"value\": \"020\",\n \"text\": \"Chief Auditor\"\n },\n {\n \"value\": \"022\",\n \"text\": \"Co-Director\"\n },\n {\n \"value\": \"023\",\n \"text\": \"Consultant\"\n },\n {\n \"value\": \"024\",\n \"text\": \"Contractor\"\n },\n {\n \"value\": \"025\",\n \"text\": \"Financial Controller\"\n },\n {\n \"value\": \"026\",\n \"text\": \"Coordinator\"\n },\n {\n \"value\": \"027\",\n \"text\": \"Copywriter\"\n },\n {\n \"value\": \"028\",\n \"text\": \"Dealer/Distributor\"\n },\n {\n \"value\": \"029\",\n \"text\": \"Dentist\"\n },\n {\n \"value\": \"031\",\n \"text\": \"Despatch\"\n },\n {\n \"value\": \"032\",\n \"text\": \"Detective\"\n },\n {\n \"value\": \"034\",\n \"text\": \"Diplomat\"\n },\n {\n \"value\": \"035\",\n \"text\": \"Director\"\n },\n {\n \"value\": \"036\",\n \"text\": \"Doctor\"\n },\n {\n \"value\": \"038\",\n \"text\": \"Electrician\"\n },\n {\n \"value\": \"040\",\n \"text\": \"Executive\"\n },\n {\n \"value\": \"041\",\n \"text\": \"Executive Director\"\n },\n {\n \"value\": \"042\",\n \"text\": \"Exporter\"\n },\n {\n \"value\": \"043\",\n \"text\": \"Farmer\"\n },\n {\n \"value\": \"044\",\n \"text\": \"Foreman\"\n },\n {\n \"value\": \"045\",\n \"text\": \"Gardener\"\n },\n {\n \"value\": \"046\",\n \"text\": \"General Manager\"\n },\n {\n \"value\": \"047\",\n \"text\": \"Goldsmith\"\n },\n {\n \"value\": \"048\",\n \"text\": \"Hairdresser\"\n },\n {\n \"value\": \"049\",\n \"text\": \"Hawker\"\n },\n {\n \"value\": \"050\",\n \"text\": \"Housewife\"\n },\n {\n \"value\": \"051\",\n \"text\": \"Homemaker\"\n },\n {\n \"value\": \"053\",\n \"text\": \"Investor\"\n },\n {\n \"value\": \"054\",\n \"text\": \"Jeweller\"\n },\n {\n \"value\": \"055\",\n \"text\": \"Judge\"\n },\n {\n \"value\": \"057\",\n \"text\": \"Lawyer/Barrister/Solicitor\"\n },\n {\n \"value\": \"058\",\n \"text\": \"Lender\"\n },\n {\n \"value\": \"060\",\n \"text\": \"Managing Director\"\n },\n {\n \"value\": \"061\",\n \"text\": \"Manufacturer\"\n },\n {\n \"value\": \"063\",\n \"text\": \"Money Lender\"\n },\n {\n \"value\": \"064\",\n \"text\": \"Money-Changer\"\n },\n {\n \"value\": \"068\",\n \"text\": \"Owner/Co-Owner\"\n },\n {\n \"value\": \"070\",\n \"text\": \"Partner\"\n },\n {\n \"value\": \"071\",\n \"text\": \"Pastor\"\n },\n {\n \"value\": \"072\",\n \"text\": \"Physician\"\n },\n {\n \"value\": \"073\",\n \"text\": \"Plumber\"\n },\n {\n \"value\": \"075\",\n \"text\": \"Principal\"\n },\n {\n \"value\": \"076\",\n \"text\": \"Programmer\"\n },\n {\n \"value\": \"077\",\n \"text\": \"Quantity Surveyor\"\n },\n {\n \"value\": \"078\",\n \"text\": \"Remiser\"\n },\n {\n \"value\": \"079\",\n \"text\": \"Retailer\"\n },\n {\n \"value\": \"080\",\n \"text\": \"Retiree\"\n },\n {\n \"value\": \"082\",\n \"text\": \"Secretary\"\n },\n {\n \"value\": \"083\",\n \"text\": \"Self-Employed\"\n },\n {\n \"value\": \"084\",\n \"text\": \"Smallholder\"\n },\n {\n \"value\": \"085\",\n \"text\": \"Stockbroker\"\n },\n {\n \"value\": \"086\",\n \"text\": \"Store-Keeper\"\n },\n {\n \"value\": \"087\",\n \"text\": \"Student\"\n },\n {\n \"value\": \"088\",\n \"text\": \"Sub-contractor\"\n },\n {\n \"value\": \"090\",\n \"text\": \"Supplier\"\n },\n {\n \"value\": \"091\",\n \"text\": \"Tailor/Dressmaker\"\n },\n {\n \"value\": \"094\",\n \"text\": \"Tourist Guide\"\n },\n {\n \"value\": \"095\",\n \"text\": \"Trader\"\n },\n {\n \"value\": \"096\",\n \"text\": \"Valuer\"\n },\n {\n \"value\": \"097\",\n \"text\": \"Vice President\"\n },\n {\n \"value\": \"098\",\n \"text\": \"Waiter/Waitress\"\n },\n {\n \"value\": \"099\",\n \"text\": \"Welder\"\n },\n {\n \"value\": \"100\",\n \"text\": \"Wholesaler\"\n },\n {\n \"value\": \"101\",\n \"text\": \"Fisherman\"\n },\n {\n \"value\": \"102\",\n \"text\": \"Grocer\"\n },\n {\n \"value\": \"104\",\n \"text\": \"Unemployed\"\n },\n {\n \"value\": \"105\",\n \"text\": \"Babysitter\"\n },\n {\n \"value\": \"107\",\n \"text\": \"Sole Proprietor\"\n },\n {\n \"value\": \"108\",\n \"text\": \"Politician\"\n },\n {\n \"value\": \"109\",\n \"text\": \"Actor\"\n },\n {\n \"value\": \"110\",\n \"text\": \"Adjusters\"\n },\n {\n \"value\": \"111\",\n \"text\": \"Air Hostess\"\n },\n {\n \"value\": \"112\",\n \"text\": \"Aquaculture\"\n },\n {\n \"value\": \"115\",\n \"text\": \"Athlete\"\n },\n {\n \"value\": \"116\",\n \"text\": \"Auctioneer\"\n },\n {\n \"value\": \"117\",\n \"text\": \"Author\"\n },\n {\n \"value\": \"118\",\n \"text\": \"Bell Boy\"\n },\n {\n \"value\": \"119\",\n \"text\": \"Biographer\"\n },\n {\n \"value\": \"120\",\n \"text\": \"Butcher\"\n },\n {\n \"value\": \"121\",\n \"text\": \"Catering\"\n },\n {\n \"value\": \"122\",\n \"text\": \"Chargeman\"\n },\n {\n \"value\": \"123\",\n \"text\": \"Chemist, Physicist\"\n },\n {\n \"value\": \"124\",\n \"text\": \"Choreographer/Dancer\"\n },\n {\n \"value\": \"125\",\n \"text\": \"Circus Performer\"\n },\n {\n \"value\": \"126\",\n \"text\": \"Civil Servant\"\n },\n {\n \"value\": \"127\",\n \"text\": \"Clergy\"\n },\n {\n \"value\": \"128\",\n \"text\": \"Coach\"\n },\n {\n \"value\": \"129\",\n \"text\": \"Composer\"\n },\n {\n \"value\": \"130\",\n \"text\": \"Decorator\"\n },\n {\n \"value\": \"131\",\n \"text\": \"Direct Sales\"\n },\n {\n \"value\": \"132\",\n \"text\": \"Economist\"\n },\n {\n \"value\": \"133\",\n \"text\": \"Editor\"\n },\n {\n \"value\": \"135\",\n \"text\": \"Fireman\"\n },\n {\n \"value\": \"136\",\n \"text\": \"Fishmonger\"\n },\n {\n \"value\": \"137\",\n \"text\": \"Florist\"\n },\n {\n \"value\": \"138\",\n \"text\": \"Forestry\"\n },\n {\n \"value\": \"139\",\n \"text\": \"Freight Forwarding Services\"\n },\n {\n \"value\": \"140\",\n \"text\": \"General Worker\"\n },\n {\n \"value\": \"142\",\n \"text\": \"Hunter\"\n },\n {\n \"value\": \"143\",\n \"text\": \"Journalist\"\n },\n {\n \"value\": \"144\",\n \"text\": \"Launderer/Dry Cleaner\"\n },\n {\n \"value\": \"145\",\n \"text\": \"Librarian/Curator\"\n },\n {\n \"value\": \"146\",\n \"text\": \"Locksmith\"\n },\n {\n \"value\": \"147\",\n \"text\": \"Magician\"\n },\n {\n \"value\": \"149\",\n \"text\": \"Model\"\n },\n {\n \"value\": \"150\",\n \"text\": \"Newscaster\"\n },\n {\n \"value\": \"151\",\n \"text\": \"NGO Staff/Volunteer\"\n },\n {\n \"value\": \"152\",\n \"text\": \"Nursery Worker & Gardener\"\n },\n {\n \"value\": \"154\",\n \"text\": \"Pharmacist\"\n },\n {\n \"value\": \"155\",\n \"text\": \"Photographer\"\n },\n {\n \"value\": \"156\",\n \"text\": \"Postman\"\n },\n {\n \"value\": \"157\",\n \"text\": \"Priest/Nun\"\n },\n {\n \"value\": \"158\",\n \"text\": \"Promoter\"\n },\n {\n \"value\": \"159\",\n \"text\": \"Proof Reader\"\n },\n {\n \"value\": \"160\",\n \"text\": \"Psychiatrist\"\n },\n {\n \"value\": \"161\",\n \"text\": \"Psychologist\"\n },\n {\n \"value\": \"162\",\n \"text\": \"Sailor\"\n },\n {\n \"value\": \"163\",\n \"text\": \"Security/Bodyguard\"\n },\n {\n \"value\": \"164\",\n \"text\": \"Shop Assistant\"\n },\n {\n \"value\": \"165\",\n \"text\": \"Singer\"\n },\n {\n \"value\": \"166\",\n \"text\": \"Social Worker\"\n },\n {\n \"value\": \"168\",\n \"text\": \"Town Planner\"\n },\n {\n \"value\": \"169\",\n \"text\": \"Translator/Interpreter\"\n },\n {\n \"value\": \"170\",\n \"text\": \"Upholsterer\"\n },\n {\n \"value\": \"171\",\n \"text\": \"Warden\"\n },\n {\n \"value\": \"172\",\n \"text\": \"Bank Officer\"\n },\n {\n \"value\": \"175\",\n \"text\": \"Astronaut/Astronomer/Astrologer\"\n },\n {\n \"value\": \"176\",\n \"text\": \"President\"\n },\n {\n \"value\": \"200\",\n \"text\": \"Production and Manufacturing Managers\"\n },\n {\n \"value\": \"201\",\n \"text\": \"Hospitality, Retail and Other Services Managers\"\n },\n {\n \"value\": \"202\",\n \"text\": \"Information and Communications Technology Managers\"\n },\n {\n \"value\": \"203\",\n \"text\": \"Services Managers\"\n },\n {\n \"value\": \"204\",\n \"text\": \"Meteorologists and Seismologists\"\n },\n {\n \"value\": \"205\",\n \"text\": \"Geologists and Geophysicists\"\n },\n {\n \"value\": \"206\",\n \"text\": \"Farming, Forestry and Fisheries Advisers\"\n },\n {\n \"value\": \"207\",\n \"text\": \"Other Life Science Professionals\"\n },\n {\n \"value\": \"208\",\n \"text\": \"Landscape Architects\"\n },\n {\n \"value\": \"209\",\n \"text\": \"Product and Garment Designers\"\n },\n {\n \"value\": \"210\",\n \"text\": \"Graphic and Multimedia Designers\"\n },\n {\n \"value\": \"211\",\n \"text\": \"Ships Engineers\"\n },\n {\n \"value\": \"212\",\n \"text\": \"Aircraft Pilots and Related Professionals\"\n },\n {\n \"value\": \"213\",\n \"text\": \"Other Ship, Aircraft and Train/Locomotive Controllers\"\n },\n {\n \"value\": \"214\",\n \"text\": \"University and Higher Education Teachers\"\n },\n {\n \"value\": \"215\",\n \"text\": \"Vocational Education Teachers\"\n },\n {\n \"value\": \"216\",\n \"text\": \"Secondary Education Teachers\"\n },\n {\n \"value\": \"217\",\n \"text\": \"Primary School and Early Childhood Teachers\"\n },\n {\n \"value\": \"218\",\n \"text\": \"Music, Arts and Performing Arts Teachers\"\n },\n {\n \"value\": \"219\",\n \"text\": \"Language Teachers\"\n },\n {\n \"value\": \"220\",\n \"text\": \"Technology Skill and Technical Trainers\"\n },\n {\n \"value\": \"221\",\n \"text\": \"System Analysts\"\n },\n {\n \"value\": \"222\",\n \"text\": \"Web and Multimedia Developers\"\n },\n {\n \"value\": \"223\",\n \"text\": \"Software and Applications Developers and Analysts n.e.c.\"\n },\n {\n \"value\": \"224\",\n \"text\": \"Database Designers and Administrators\"\n },\n {\n \"value\": \"225\",\n \"text\": \"Information Technology System Administrators\"\n },\n {\n \"value\": \"226\",\n \"text\": \"Other Database and Network Professionals\"\n },\n {\n \"value\": \"227\",\n \"text\": \"Legal Professionals n.e.c.\"\n },\n {\n \"value\": \"228\",\n \"text\": \"Sociologists, Anthropologists and Related Professionals\"\n },\n {\n \"value\": \"229\",\n \"text\": \"Philosophers, Historians and Political Scientists\"\n },\n {\n \"value\": \"230\",\n \"text\": \"Film, Stage and Related Directors and Producers\"\n },\n {\n \"value\": \"231\",\n \"text\": \"Animals Keepers and Trainers\"\n },\n {\n \"value\": \"232\",\n \"text\": \"Professional Customs and Border Inspectors\"\n },\n {\n \"value\": \"233\",\n \"text\": \"Professional Taxation and Excise Officials\"\n },\n {\n \"value\": \"234\",\n \"text\": \"Professional Government Social Benefits Officials\"\n },\n {\n \"value\": \"235\",\n \"text\": \"Professional Government Licensing Officials\"\n },\n {\n \"value\": \"236\",\n \"text\": \"Professional Civil Defence Officials\"\n },\n {\n \"value\": \"237\",\n \"text\": \"Physical and Engineering Science Technicians\"\n },\n {\n \"value\": \"238\",\n \"text\": \"Mining, Manufacturing and Construction Supervisors\"\n },\n {\n \"value\": \"239\",\n \"text\": \"Process Control Technicians\"\n },\n {\n \"value\": \"240\",\n \"text\": \"Life Science Technicians and Related Associate Professionals\"\n },\n {\n \"value\": \"241\",\n \"text\": \"Ship, Aircraft and Train Technicians\"\n },\n {\n \"value\": \"242\",\n \"text\": \"Nuclear Science Associate Professionals\"\n },\n {\n \"value\": \"243\",\n \"text\": \"Medical and Pharmaceutical Technicians\"\n },\n {\n \"value\": \"244\",\n \"text\": \"Traditional and Complementary Medicine Associate Professionals\"\n },\n {\n \"value\": \"245\",\n \"text\": \"Veterinary Technicians and Assistants\"\n },\n {\n \"value\": \"246\",\n \"text\": \"Dental Assistants and Therapists\"\n },\n {\n \"value\": \"247\",\n \"text\": \"Medical Records and Health Information Technicians\"\n },\n {\n \"value\": \"248\",\n \"text\": \"Dispensing Opticians\"\n },\n {\n \"value\": \"249\",\n \"text\": \"Physiotherapy Technicians and Assistants\"\n },\n {\n \"value\": \"250\",\n \"text\": \"Medical Assistants\"\n },\n {\n \"value\": \"251\",\n \"text\": \"Health Associate Professionals Not Elsewhere Classified\"\n },\n {\n \"value\": \"252\",\n \"text\": \"Statistical, Mathematical and Actuarial Associate Professionals\"\n },\n {\n \"value\": \"253\",\n \"text\": \"Insurance Agent\"\n },\n {\n \"value\": \"254\",\n \"text\": \"Commercial Sales Agent\"\n },\n {\n \"value\": \"255\",\n \"text\": \"Buyers\"\n },\n {\n \"value\": \"256\",\n \"text\": \"Administrative Associate Professionals\"\n },\n {\n \"value\": \"257\",\n \"text\": \"Administrative and Executive Secretaries\"\n },\n {\n \"value\": \"258\",\n \"text\": \"Other Administrative and Specialized Associate Professionals\"\n },\n {\n \"value\": \"259\",\n \"text\": \"Legal Associate Professionals\"\n },\n {\n \"value\": \"260\",\n \"text\": \"Social and Religious Associate Professionals\"\n },\n {\n \"value\": \"261\",\n \"text\": \"Fitness and Recreation Instructors and Program Leaders\"\n },\n {\n \"value\": \"262\",\n \"text\": \"Gallery, Museum and Library Technicians\"\n },\n {\n \"value\": \"263\",\n \"text\": \"Cultural Associate Professionals\"\n },\n {\n \"value\": \"264\",\n \"text\": \"Artistic and Cultural Associate Professionals Not Elsewhere Classified\"\n },\n {\n \"value\": \"265\",\n \"text\": \"Customs and Border Inspector Associate Professionals\"\n },\n {\n \"value\": \"266\",\n \"text\": \"Taxation and Excise Official Associate Professionals\"\n },\n {\n \"value\": \"267\",\n \"text\": \"Government Social Benefit Official Associate Professionals\"\n },\n {\n \"value\": \"268\",\n \"text\": \"Government Licensing Official Associate Professionals\"\n },\n {\n \"value\": \"269\",\n \"text\": \"Civil Defence Associate Professionals\"\n },\n {\n \"value\": \"270\",\n \"text\": \"General Office Clerks\"\n },\n {\n \"value\": \"271\",\n \"text\": \"Data Entry Clerks\"\n },\n {\n \"value\": \"272\",\n \"text\": \"Bank Tellers and Related Clerks\"\n },\n {\n \"value\": \"273\",\n \"text\": \"Travel Consultants and Related Clerks\"\n },\n {\n \"value\": \"274\",\n \"text\": \"Contact/Call Centre Information Clerks\"\n },\n {\n \"value\": \"275\",\n \"text\": \"Telephone Switchboard Operators\"\n },\n {\n \"value\": \"276\",\n \"text\": \"Receptionists\"\n },\n {\n \"value\": \"277\",\n \"text\": \"Enquiry Clerks\"\n },\n {\n \"value\": \"278\",\n \"text\": \"Numerical and Material Recording Clerks\"\n },\n {\n \"value\": \"279\",\n \"text\": \"Transport Conductors\"\n },\n {\n \"value\": \"280\",\n \"text\": \"Cooks\"\n },\n {\n \"value\": \"281\",\n \"text\": \"Building and Housekeeping Supervisors\"\n },\n {\n \"value\": \"282\",\n \"text\": \"Street Food Salespersons\"\n },\n {\n \"value\": \"283\",\n \"text\": \"Sales Demonstrators\"\n },\n {\n \"value\": \"284\",\n \"text\": \"Teachers Aide\"\n },\n {\n \"value\": \"285\",\n \"text\": \"Personal Care Workers in Health Services Not Elsewhere Classified\"\n },\n {\n \"value\": \"286\",\n \"text\": \"Immigration/Custom Officers and Assistants\"\n },\n {\n \"value\": \"287\",\n \"text\": \"Protective Services Workers n.e.c.\"\n },\n {\n \"value\": \"288\",\n \"text\": \"Livestock and Dairy Producers\"\n },\n {\n \"value\": \"289\",\n \"text\": \"Animal Producers and Related Workers Not Elsewhere Classified\"\n },\n {\n \"value\": \"290\",\n \"text\": \"Mixed Crop and Animal Producers\"\n },\n {\n \"value\": \"291\",\n \"text\": \"Subsistence Farmers, Fishermen, Hunters and Gatherers\"\n },\n {\n \"value\": \"292\",\n \"text\": \"House Builders\"\n },\n {\n \"value\": \"293\",\n \"text\": \"Air Conditioning and Refrigeration Mechanics\"\n },\n {\n \"value\": \"294\",\n \"text\": \"Other Building Finishers and Related Trades Workers\"\n },\n {\n \"value\": \"295\",\n \"text\": \"Spray Painters and Varnishers\"\n },\n {\n \"value\": \"296\",\n \"text\": \"Building Structure Cleaners\"\n },\n {\n \"value\": \"297\",\n \"text\": \"Metal Moulders and Coremakers\"\n },\n {\n \"value\": \"298\",\n \"text\": \"Other Sheet and Structural Metal Workers, Moulders, Welders and Related Workers\"\n },\n {\n \"value\": \"299\",\n \"text\": \"Metal Working Machine Tool Setters and Operators\"\n },\n {\n \"value\": \"300\",\n \"text\": \"Aircraft Engine Mechanics and Repairers\"\n },\n {\n \"value\": \"301\",\n \"text\": \"Agricultural and Industrial Machinery Mechanics and Repairers\"\n },\n {\n \"value\": \"302\",\n \"text\": \"Bicycle and Related Repairers\"\n },\n {\n \"value\": \"303\",\n \"text\": \"Machinery Mechanics and Repairers Not Elsewhere Classified\"\n },\n {\n \"value\": \"304\",\n \"text\": \"Sign Writers, Decorative Painters, Engravers and Etchers\"\n },\n {\n \"value\": \"305\",\n \"text\": \"Pre-press Workers\"\n },\n {\n \"value\": \"306\",\n \"text\": \"Other Printing Trades Workers\"\n },\n {\n \"value\": \"307\",\n \"text\": \"Electrical Mechanics and Fitters\"\n },\n {\n \"value\": \"308\",\n \"text\": \"Electronics Mechanics and Servicers\"\n },\n {\n \"value\": \"309\",\n \"text\": \"Information and Communications Technology Installers and Services\"\n },\n {\n \"value\": \"310\",\n \"text\": \"Other Food Processing and Related Trades Workers\"\n },\n {\n \"value\": \"311\",\n \"text\": \"Woodworking-Machine Tool Setters and Operators\"\n },\n {\n \"value\": \"312\",\n \"text\": \"Other Wood Treaters, Cabinet-Makers and Related Trades Workers\"\n },\n {\n \"value\": \"313\",\n \"text\": \"Other Garment and Related Trades Workers\"\n },\n {\n \"value\": \"314\",\n \"text\": \"Other Craft and Related Workers\"\n },\n {\n \"value\": \"315\",\n \"text\": \"Stationary Plant and Machine Operators\"\n },\n {\n \"value\": \"316\",\n \"text\": \"Mechanical Machinery Assemblers\"\n },\n {\n \"value\": \"317\",\n \"text\": \"Assemblers Not Elsewhere Classified\"\n },\n {\n \"value\": \"318\",\n \"text\": \"Machine-Tool Setter-Operators\"\n },\n {\n \"value\": \"319\",\n \"text\": \"Locomotive Engine Drivers\"\n },\n {\n \"value\": \"320\",\n \"text\": \"Railway Brake, Signal and Switch Operators\"\n },\n {\n \"value\": \"321\",\n \"text\": \"Heavy Truck and Bus Drivers\"\n },\n {\n \"value\": \"322\",\n \"text\": \"Mobile Plant Operators\"\n },\n {\n \"value\": \"323\",\n \"text\": \"Mining and Construction Labourers\"\n },\n {\n \"value\": \"324\",\n \"text\": \"Hand and Pedal Vehicle Drivers\"\n },\n {\n \"value\": \"325\",\n \"text\": \"Animal-Drawn Machinery and Vehicle Drivers\"\n },\n {\n \"value\": \"326\",\n \"text\": \"Transport and Storage Labourers\"\n },\n {\n \"value\": \"327\",\n \"text\": \"Shelf Fillers\"\n },\n {\n \"value\": \"328\",\n \"text\": \"Food Preparation Assistant\"\n },\n {\n \"value\": \"329\",\n \"text\": \"Street and Related Sales and Services Workers\"\n },\n {\n \"value\": \"330\",\n \"text\": \"Refuse Workers and Other Elementary Workers\"\n },\n {\n \"value\": \"331\",\n \"text\": \"Nursing and Midwifery Associate Professionals\"\n },\n {\n \"value\": \"332\",\n \"text\": \"Police Officers - Protective Service Workers\"\n },\n {\n \"value\": \"333\",\n \"text\": \"Other Outside Labour Force\"\n },\n {\n \"value\": \"334\",\n \"text\": \"Financial and Investment Advisers\"\n },\n {\n \"value\": \"335\",\n \"text\": \"Business Services Agent\"\n },\n {\n \"value\": \"336\",\n \"text\": \"Health Care Assistants\"\n },\n {\n \"value\": \"337\",\n \"text\": \"Other Clerical Support Workers\"\n },\n {\n \"value\": \"338\",\n \"text\": \"Interior Designers and Decorators\"\n },\n {\n \"value\": \"339\",\n \"text\": \"Software Developers\"\n },\n {\n \"value\": \"340\",\n \"text\": \"Car, Van and Motorcycle Drivers\"\n },\n {\n \"value\": \"341\",\n \"text\": \"Engineering Professionals (including Electrotechnology)\"\n },\n {\n \"value\": \"342\",\n \"text\": \"Driving Instructors\"\n },\n {\n \"value\": \"343\",\n \"text\": \"Manufacturing Labourers\"\n },\n {\n \"value\": \"344\",\n \"text\": \"Administrative and Commercial Managers\"\n },\n {\n \"value\": \"345\",\n \"text\": \"Motor Vehicle Mechanics and Repairers\"\n },\n {\n \"value\": \"346\",\n \"text\": \"Nursing and Midwifery Professionals\"\n },\n {\n \"value\": \"347\",\n \"text\": \"Typist and Word Processor Operators\"\n },\n {\n \"value\": \"348\",\n \"text\": \"Painters and Related Workers\"\n },\n {\n \"value\": \"349\",\n \"text\": \"Police Officers\"\n },\n {\n \"value\": \"350\",\n \"text\": \"Stall and Market Salespersons\"\n },\n {\n \"value\": \"351\",\n \"text\": \"Shop Supervisors\"\n },\n {\n \"value\": \"352\",\n \"text\": \"Other Teaching Professionals\"\n },\n {\n \"value\": \"353\",\n \"text\": \"Information and Communications Technicians\"\n },\n {\n \"value\": \"354\",\n \"text\": \"Ships Deck Officers and Pilots\"\n },\n {\n \"value\": \"355\",\n \"text\": \"Chefs\"\n },\n {\n \"value\": \"356\",\n \"text\": \"Building Architects\"\n },\n {\n \"value\": \"357\",\n \"text\": \"Visual Artists\"\n },\n {\n \"value\": \"358\",\n \"text\": \"Creative and Performing Artists n.e.c.\"\n },\n {\n \"value\": \"359\",\n \"text\": \"Regulatory Government Professionals Not Elsewhere Classified\"\n },\n {\n \"value\": \"360\",\n \"text\": \"Cleaners and Helpers\"\n },\n {\n \"value\": \"361\",\n \"text\": \"Optometrists and Ophthalmic Opticians\"\n },\n {\n \"value\": \"362\",\n \"text\": \"Mathematicians, Actuaries and Statisticians\"\n },\n {\n \"value\": \"363\",\n \"text\": \"Financial Analysts\"\n },\n {\n \"value\": \"364\",\n \"text\": \"Administrative Professional\"\n },\n {\n \"value\": \"365\",\n \"text\": \"Other Legislators and Senior Officials\"\n },\n {\n \"value\": \"366\",\n \"text\": \"Personal Assistant\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"preferredLanguage\",\n \"displayName\": \"Preferred Language\",\n \"placeholder\": \"Select Preferred Language\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"English\"\n },\n {\n \"value\": \" 02\",\n \"text\": \"Bahasa\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"race\",\n \"displayName\": \"Race\",\n \"placeholder\": \"Select Race\",\n \"type\": \"dropdown\",\n \"startWithNewLine\": false,\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Malaysian - Chinese\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Malaysian - Bumiputra - Malay\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Malaysian - Bumiputra - Non Malay\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Malaysian - Indian\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Malaysian - Other Race\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"relationshiptoContactName\",\n \"displayName\": \"Relationship to Contact Name\",\n \"type\": \"dropdown\",\n \"placeholder\": \"Relationship to contact Name\",\n \"choices\": [\n {\n \"value\": \"07\",\n \"text\": \"Father\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Mother\"\n },\n {\n \"value\": \"09\",\n \"text\": \"Brother\"\n },\n {\n \"value\": \"10\",\n \"text\": \"Sister\"\n },\n {\n \"value\": \"11\",\n \"text\": \"Spouse\"\n },\n {\n \"value\": \"12\",\n \"text\": \"Son\"\n },\n {\n \"value\": \"13\",\n \"text\": \"Daughter\"\n },\n {\n \"value\": \"14\",\n \"text\": \"Uncle\"\n },\n {\n \"value\": \"15\",\n \"text\": \"Aunt\"\n },\n {\n \"value\": \"40\",\n \"text\": \"Relative\"\n }\n ],\n \"category\": \"8\"\n },\n {\n \"name\": \"residenceType\",\n \"displayName\": \"Residence Type\",\n \"placeholder\": \"Residence Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"PL0001\",\n \"text\": \"Own Property\"\n },\n {\n \"value\": \"PL0002\",\n \"text\": \"Mortgaged\"\n },\n {\n \"value\": \"PL0003\",\n \"text\": \"Employers\"\n },\n {\n \"value\": \"PL0004\",\n \"text\": \"Rented\"\n },\n {\n \"value\": \"PL0005\",\n \"text\": \"Parents\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"salutation\",\n \"displayName\": \"Salutation\",\n \"placeholder\": \"Select Salutation\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"002\",\n \"text\": \"CIK\"\n },\n {\n \"value\": \"004\",\n \"text\": \"DATIN\"\n },\n {\n \"value\": \"009\",\n \"text\": \"Datin Seri\"\n },\n {\n \"value\": \"011\",\n \"text\": \"DATO`\"\n },\n {\n \"value\": \"018\",\n \"text\": \"DATO SERI\"\n },\n {\n \"value\": \"023\",\n \"text\": \"DATUK\"\n },\n {\n \"value\": \"028\",\n \"text\": \"DOCTOR\"\n },\n {\n \"value\": \"033\",\n \"text\": \"ENCIK\"\n },\n {\n \"value\": \"043\",\n \"text\": \"DYTM\"\n },\n {\n \"value\": \"053\",\n \"text\": \"MADAM\"\n },\n {\n \"value\": \"061\",\n \"text\": \"MISS\"\n },\n {\n \"value\": \"062\",\n \"text\": \"MR\"\n },\n {\n \"value\": \"072\",\n \"text\": \"PUAN\"\n },\n {\n \"value\": \"075\",\n \"text\": \"PUAN SRI\"\n },\n {\n \"value\": \"079\",\n \"text\": \"TAN SRI\"\n },\n {\n \"value\": \"090\",\n \"text\": \"Toh Puan\"\n },\n {\n \"value\": \"102\",\n \"text\": \"YAM\"\n },\n {\n \"value\": \"151\",\n \"text\": \"DATO SRI\"\n },\n {\n \"value\": \"157\",\n \"text\": \"TYT TUN DATUK SERI PANGLIMA\"\n },\n {\n \"value\": \"158\",\n \"text\": \"Ms\"\n },\n {\n \"value\": \"159\",\n \"text\": \"KDYTM\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"sourceOfWealth\",\n \"displayName\": \"Source of Wealth\",\n \"placeholder\": \"Source of Wealth\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Accumulated Saving\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Employment income\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Inheritance\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Trust Fund\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Retirement Income\"\n },\n {\n \"value\": \"06\",\n \"text\": \"EPF\"\n },\n {\n \"value\": \"07\",\n \"text\": \"Disposal of Assets/Shares\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Insurance Maturity/Surrender\"\n },\n {\n \"value\": \"09\",\n \"text\": \"Return on investment\"\n },\n {\n \"value\": \"10\",\n \"text\": \"Legal Settlement\"\n },\n {\n \"value\": \"11\",\n \"text\": \"Income from own business\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"statementType\",\n \"displayName\": \"Statement Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"E\",\n \"text\": \"Email\"\n },\n {\n \"value\": \"R\",\n \"text\": \"RHB Now\"\n }\n ],\n \"category\": \"10\"\n },\n {\n \"name\": \"subEmploymentSector\",\n \"displayName\": \"Sub Employment Sector\",\n \"placeholder\": \"Select Sub Employment Sector\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"0011\",\n \"text\": \"Accounting\"\n },\n {\n \"value\": \"0021\",\n \"text\": \"Actuarial / Statistic\"\n },\n {\n \"value\": \"0031\",\n \"text\": \"Advertising\"\n },\n {\n \"value\": \"0032\",\n \"text\": \"Public Relations\"\n },\n {\n \"value\": \"0041\",\n \"text\": \"Aerospace\"\n },\n {\n \"value\": \"0051\",\n \"text\": \"Agricultural / Chemicals / Forest Products\"\n },\n {\n \"value\": \"0052\",\n \"text\": \"Support activities to agriculture and post-harvest crops activities\"\n },\n {\n \"value\": \"0053\",\n \"text\": \"Growing paddy, sugar cane, vegetables and melons, roots, tubers, perennial crops\"\n },\n {\n \"value\": \"0054\",\n \"text\": \"Raising of animals\"\n },\n {\n \"value\": \"0055\",\n \"text\": \"Mixed farming\"\n },\n {\n \"value\": \"0056\",\n \"text\": \"Fishing / aquaculture\"\n },\n {\n \"value\": \"0057\",\n \"text\": \"Plantation (e.g. oil palm, rubber tree, cocoa, coconut etc.)\"\n },\n {\n \"value\": \"0058\",\n \"text\": \"Silviculture and forestry activities\"\n },\n {\n \"value\": \"0059\",\n \"text\": \"Veterinary activities\"\n },\n {\n \"value\": \"0061\",\n \"text\": \"Architecture\"\n },\n {\n \"value\": \"0062\",\n \"text\": \"Engineering Services\"\n },\n {\n \"value\": \"0063\",\n \"text\": \"Engineering technical services\"\n },\n {\n \"value\": \"0064\",\n \"text\": \"Surveying Services\"\n },\n {\n \"value\": \"0071\",\n \"text\": \"Manufacture of Switchgear and Switchboard Apparatus\"\n },\n {\n \"value\": \"0072\",\n \"text\": \"Manufacture of Insulated wire and cable\"\n },\n {\n \"value\": \"0073\",\n \"text\": \"Manufacture of TV radio communication equipment\"\n },\n {\n \"value\": \"0074\",\n \"text\": \"Manufacture of Typesetting; Platemaking and Related Services\"\n },\n {\n \"value\": \"0075\",\n \"text\": \"Manufacture of Aircraft and related machinery\"\n },\n {\n \"value\": \"0076\",\n \"text\": \"Manufacture of Consumer goods & Pharmaceuticals\"\n },\n {\n \"value\": \"0077\",\n \"text\": \"Manufacture of jewellery, bijouterie & related articles\"\n },\n {\n \"value\": \"0078\",\n \"text\": \"Manufacture of machinery/ motor vehicles/ other transport equipment\"\n },\n {\n \"value\": \"0079\",\n \"text\": \"Manufacture of other fabricated metal product\"\n },\n {\n \"value\": \"0081\",\n \"text\": \"Aviation\"\n },\n {\n \"value\": \"0091\",\n \"text\": \"Radio, Television, and Consumer Electronics Stores\"\n },\n {\n \"value\": \"0092\",\n \"text\": \"Retail garments / apparels\"\n },\n {\n \"value\": \"0093\",\n \"text\": \"Household goods\"\n },\n {\n \"value\": \"0094\",\n \"text\": \"Furniture stores\"\n },\n {\n \"value\": \"0095\",\n \"text\": \"Retail sale of Chinaware Glassware\"\n },\n {\n \"value\": \"0096\",\n \"text\": \"Other retail trade (except for motor vehicle, f&b, health care and grocery)\"\n },\n {\n \"value\": \"0097\",\n \"text\": \"Other retail sale in non-specialized stores\"\n },\n {\n \"value\": \"0098\",\n \"text\": \"Retail sale of beer, wine and spirits\"\n },\n {\n \"value\": \"0099\",\n \"text\": \"Retail sale of tobacco products in specialized store\"\n },\n {\n \"value\": \"0101\",\n \"text\": \"Radio and Television Repair Shops\"\n },\n {\n \"value\": \"0102\",\n \"text\": \"Repair Shops and Related Services, N.E.C.;\"\n },\n {\n \"value\": \"0103\",\n \"text\": \"Refrigeration and Air-Conditioning Service and Repair Shops;\"\n },\n {\n \"value\": \"0104\",\n \"text\": \"Computer related activities;\"\n },\n {\n \"value\": \"0105\",\n \"text\": \"Electrical and Electronic Repair Shops, N.E.C\"\n },\n {\n \"value\": \"00110\",\n \"text\": \"Construction of other civil engineering projects (specialised)\"\n },\n {\n \"value\": \"0111\",\n \"text\": \"Building Construction\"\n },\n {\n \"value\": \"00111\",\n \"text\": \"Construction of other civil engineering projects (not specialised)\"\n },\n {\n \"value\": \"00112\",\n \"text\": \"Electrical, Installation and plumbing\"\n },\n {\n \"value\": \"00113\",\n \"text\": \"Demolition and site preparation\"\n },\n {\n \"value\": \"00114\",\n \"text\": \"Construction of utility projects\"\n },\n {\n \"value\": \"0114\",\n \"text\": \"Construction of Residential house (landed property)\"\n },\n {\n \"value\": \"00115\",\n \"text\": \"Other specialized construction activities\"\n },\n {\n \"value\": \"0115\",\n \"text\": \"Construction of other residentials\"\n },\n {\n \"value\": \"00116\",\n \"text\": \"Roofing, Siding, and Sheet Metal Work\"\n },\n {\n \"value\": \"0116\",\n \"text\": \"Construction of industrial building & factories\"\n },\n {\n \"value\": \"00117\",\n \"text\": \"Water, Sewer, Pipeline, and Communications and Power Line Construction\"\n },\n {\n \"value\": \"0117\",\n \"text\": \"Construction of office buildings\"\n },\n {\n \"value\": \"00118\",\n \"text\": \"Assembly and erection of prefabricated constructions on the site\"\n },\n {\n \"value\": \"0118\",\n \"text\": \"Construction of commercial complex\"\n },\n {\n \"value\": \"0119\",\n \"text\": \"Construction of infrastructure\"\n },\n {\n \"value\": \"00119\",\n \"text\": \"Construction of hotels\"\n },\n {\n \"value\": \"00120\",\n \"text\": \"Construction of condominiums/apartments\"\n },\n {\n \"value\": \"0121\",\n \"text\": \"Creative / Graphics\"\n },\n {\n \"value\": \"0131\",\n \"text\": \"Customer Service\"\n },\n {\n \"value\": \"0141\",\n \"text\": \"Higher Education with significant reliance on foreign/international students\"\n },\n {\n \"value\": \"0142\",\n \"text\": \"Higher Education with no significant reliance on foreign students\"\n },\n {\n \"value\": \"0143\",\n \"text\": \"Administration of the State and the economic and social policy of the community\"\n },\n {\n \"value\": \"0144\",\n \"text\": \"Public - Pre school, primary and secondary level education\"\n },\n {\n \"value\": \"0145\",\n \"text\": \"Private - Pre school, primary and secondary level education\"\n },\n {\n \"value\": \"0151\",\n \"text\": \"O&G - Upstream i.e. drilling, extraction, exploration and field services\"\n },\n {\n \"value\": \"0152\",\n \"text\": \"O&G - Other than Upstream\"\n },\n {\n \"value\": \"0153\",\n \"text\": \"Mining of iron ores and other non-ferrous metal ores\"\n },\n {\n \"value\": \"0154\",\n \"text\": \"Stonequarrying, clay & sand pits\"\n },\n {\n \"value\": \"155\",\n \"text\": \"Chemical & fertilizer mining\"\n },\n {\n \"value\": \"0155\",\n \"text\": \"Chemical & fertiliser mining\"\n },\n {\n \"value\": \"156\",\n \"text\": \"Other than oil and gas\"\n },\n {\n \"value\": \"0156\",\n \"text\": \"Other than oil and gas\"\n },\n {\n \"value\": \"161\",\n \"text\": \"Engineering Services & Engineering Technical Services\"\n },\n {\n \"value\": \"0161\",\n \"text\": \"Engineering Services & Engineering Technical Services\"\n },\n {\n \"value\": \"171\",\n \"text\": \"Banking services\"\n },\n {\n \"value\": \"0171\",\n \"text\": \"Banking services\"\n },\n {\n \"value\": \"172\",\n \"text\": \"Finance services\"\n },\n {\n \"value\": \"0172\",\n \"text\": \"Finance services\"\n },\n {\n \"value\": \"0173\",\n \"text\": \"Insurance services\"\n },\n {\n \"value\": \"173\",\n \"text\": \"Insurance services\"\n },\n {\n \"value\": \"0174\",\n \"text\": \"Money lenders / Money Changers/ Remittance Services/ Money Transmitter/ Check Cashing Business/ Currency Exchange\"\n },\n {\n \"value\": \"0175\",\n \"text\": \"Pawnshop\"\n },\n {\n \"value\": \"0176\",\n \"text\": \"Activity of holding companies\"\n },\n {\n \"value\": \"0177\",\n \"text\": \"Financial leasing activities\"\n },\n {\n \"value\": \"0178\",\n \"text\": \"Finance - credit card services\"\n },\n {\n \"value\": \"0179\",\n \"text\": \"Consultancy services\"\n },\n {\n \"value\": \"0181\",\n \"text\": \"Freight Forwarding Services\"\n },\n {\n \"value\": \"0191\",\n \"text\": \"Government\"\n },\n {\n \"value\": \"0192\",\n \"text\": \"Public Service\"\n },\n {\n \"value\": \"0193\",\n \"text\": \"Military\"\n },\n {\n \"value\": \"0201\",\n \"text\": \"Tourism & Hospitality\"\n },\n {\n \"value\": \"0202\",\n \"text\": \"Recreational related services / activities\"\n },\n {\n \"value\": \"0211\",\n \"text\": \"Food Service Activities\"\n },\n {\n \"value\": \"0212\",\n \"text\": \"Organization Hotel, Lodging Houses, chalet, rest house, homestay, Inn, motels, rooming sporting, and recreational camp\"\n },\n {\n \"value\": \"0213\",\n \"text\": \"Other short term accommodation not mentioned above\"\n },\n {\n \"value\": \"0214\",\n \"text\": \"Restaurants, bars and canteens\"\n },\n {\n \"value\": \"0215\",\n \"text\": \"Restaurant, bar (other discretionary items and significant reliance on dine-in)\"\n },\n {\n \"value\": \"0216\",\n \"text\": \"Event catering and other food service activities\"\n },\n {\n \"value\": \"0217\",\n \"text\": \"Eating Places, Except Food Service, Institutional\"\n },\n {\n \"value\": \"0221\",\n \"text\": \"Human Resources\"\n },\n {\n \"value\": \"0231\",\n \"text\": \"Investment advisory services\"\n },\n {\n \"value\": \"0241\",\n \"text\": \"Journalist / Editor\"\n },\n {\n \"value\": \"0251\",\n \"text\": \"Motion picture, video and television programme production, sound recording and music publishing activities\"\n },\n {\n \"value\": \"0252\",\n \"text\": \"Programming and broadcasting activities\"\n },\n {\n \"value\": \"0253\",\n \"text\": \"News agency activities\"\n },\n {\n \"value\": \"0254\",\n \"text\": \"Media, culture and recreational activities\"\n },\n {\n \"value\": \"0261\",\n \"text\": \"Medical / Health Services\"\n },\n {\n \"value\": \"0262\",\n \"text\": \"Kidney Dialysis Centers\"\n },\n {\n \"value\": \"0263\",\n \"text\": \"Intermediate Care Facilities\"\n },\n {\n \"value\": \"0264\",\n \"text\": \"Home Health Care Services Facilities\"\n },\n {\n \"value\": \"0271\",\n \"text\": \"Non-Profit Organization\"\n },\n {\n \"value\": \"0281\",\n \"text\": \"Geology\"\n },\n {\n \"value\": \"0291\",\n \"text\": \"Pharmaceuticals products\"\n },\n {\n \"value\": \"0301\",\n \"text\": \"Real estate operations - shopping complex\"\n },\n {\n \"value\": \"0302\",\n \"text\": \"Appraisal services for real estate\"\n },\n {\n \"value\": \"0303\",\n \"text\": \"Real estate activities on a fee or contract basis\"\n },\n {\n \"value\": \"0304\",\n \"text\": \"Buying, selling, renting and operating of residential buildings or land\"\n },\n {\n \"value\": \"0305\",\n \"text\": \"Real estate operations - shophouse\"\n },\n {\n \"value\": \"0306\",\n \"text\": \"Real estate Operation - Industrial building & factories\"\n },\n {\n \"value\": \"0307\",\n \"text\": \"Real estate Operation - office building\"\n },\n {\n \"value\": \"0308\",\n \"text\": \"Real estate Operation - other commercial building\"\n },\n {\n \"value\": \"0309\",\n \"text\": \"Real estate operation not related above\"\n },\n {\n \"value\": \"0311\",\n \"text\": \"Administrative and Support Service Activities\"\n },\n {\n \"value\": \"0321\",\n \"text\": \"Social Work Activites\"\n },\n {\n \"value\": \"0331\",\n \"text\": \"Wired / Wireless telecommunications activities\"\n },\n {\n \"value\": \"0341\",\n \"text\": \"Tour operators\"\n },\n {\n \"value\": \"0342\",\n \"text\": \"Travel Agencies\"\n },\n {\n \"value\": \"0351\",\n \"text\": \"Rail transport\"\n },\n {\n \"value\": \"0352\",\n \"text\": \"Transportation Services, N.E.C.\"\n },\n {\n \"value\": \"0353\",\n \"text\": \"Service activities incidental to land / road transportation\"\n },\n {\n \"value\": \"0354\",\n \"text\": \"Scheduled and Non-Scheduled Air Transport (Transport of passengers by air over regular routes and on regular schedules)\"\n },\n {\n \"value\": \"0355\",\n \"text\": \"Aircrafts, Aircraft engine / parts, space vehicles\"\n },\n {\n \"value\": \"0356\",\n \"text\": \"Tanks and Tank components\"\n },\n {\n \"value\": \"0357\",\n \"text\": \"Warehousing and storage\"\n },\n {\n \"value\": \"0358\",\n \"text\": \"Water transport\"\n },\n {\n \"value\": \"0359\",\n \"text\": \"Other transportation support activities n.e.c. (e.g. arranging transportation services, terminal maintenance services, etc)\"\n },\n {\n \"value\": \"0361\",\n \"text\": \"Casinos including Junket Operators\"\n },\n {\n \"value\": \"0362\",\n \"text\": \"Karaoke lounges, internet cafe or video arcade\"\n },\n {\n \"value\": \"0363\",\n \"text\": \"Amusement and Recreation Services\"\n },\n {\n \"value\": \"0364\",\n \"text\": \"Membership Sports and Recreation Clubs\"\n },\n {\n \"value\": \"0365\",\n \"text\": \"Entertainment services\"\n },\n {\n \"value\": \"0366\",\n \"text\": \"Arts & Theatrical\"\n },\n {\n \"value\": \"0371\",\n \"text\": \"Electricty power generation\"\n },\n {\n \"value\": \"0372\",\n \"text\": \"Steam and air conditioning supply\"\n },\n {\n \"value\": \"0373\",\n \"text\": \"Water collection, treatment and supply\"\n },\n {\n \"value\": \"0381\",\n \"text\": \"Water Supply\"\n },\n {\n \"value\": \"0382\",\n \"text\": \"Sewerage\"\n },\n {\n \"value\": \"0383\",\n \"text\": \"Waste Management and Remediation Activities\"\n },\n {\n \"value\": \"0384\",\n \"text\": \"Recycling of non-metal (including rubber & textile fibre)\"\n },\n {\n \"value\": \"0385\",\n \"text\": \"Recycling of tin and other metal waste and scrap\"\n },\n {\n \"value\": \"0391\",\n \"text\": \"Activities of Households as Employers; Undifferentiated Goods and Services Producing Activities of Households for Own Use\"\n },\n {\n \"value\": \"0401\",\n \"text\": \"Activities of Extraterritorial Organisations and Bodies\"\n },\n {\n \"value\": \"0411\",\n \"text\": \"Unemployed/ Outside Labour Force\"\n },\n {\n \"value\": \"0421\",\n \"text\": \"Activities of membership organisations (Political/Religious/Trade Union)\"\n },\n {\n \"value\": \"0422\",\n \"text\": \"International Business Corporations and other similar entities\"\n },\n {\n \"value\": \"0423\",\n \"text\": \"Business Activities - Intermediary activities - trustee/ nominee/ agent OR Shell Companies\"\n },\n {\n \"value\": \"0424\",\n \"text\": \"Other Services\"\n },\n {\n \"value\": \"0425\",\n \"text\": \"Offshore Corporations (or their subsidiaries) and bank set up in tax and/or secrecy havens\"\n },\n {\n \"value\": \"0426\",\n \"text\": \"Building Cleaning and Maintenance Services, N.E.C.\"\n },\n {\n \"value\": \"0427\",\n \"text\": \"Detective, Guard, and Armored Car Services\"\n },\n {\n \"value\": \"0428\",\n \"text\": \"Rental, Leasing and Packaging ( tour operator, reservation services and related activities, Organisation of conventions and trade shows)\"\n },\n {\n \"value\": \"0429\",\n \"text\": \"Funeral Service and Crematories\"\n },\n {\n \"value\": \"0431\",\n \"text\": \"Legal Services\"\n },\n {\n \"value\": \"0441\",\n \"text\": \"Research & Experiemental Development Services\"\n },\n {\n \"value\": \"0451\",\n \"text\": \"Other Professional, scientific and Technical activities\"\n },\n {\n \"value\": \"00510\",\n \"text\": \"Hunting, trapping and related service activities\"\n },\n {\n \"value\": \"00511\",\n \"text\": \"Logging\"\n },\n {\n \"value\": \"00710\",\n \"text\": \"Manufacture of watches and clocks\"\n },\n {\n \"value\": \"0711\",\n \"text\": \"Manufacture of others\"\n },\n {\n \"value\": \"00711\",\n \"text\": \"Manufacture of others\"\n },\n {\n \"value\": \"0712\",\n \"text\": \"Maintenance and repair of motor vehicles\"\n },\n {\n \"value\": \"00712\",\n \"text\": \"Maintenance and repair of motor vehicles\"\n },\n {\n \"value\": \"0713\",\n \"text\": \"Manufacture of furniture\"\n },\n {\n \"value\": \"00713\",\n \"text\": \"Manufacture of furniture\"\n },\n {\n \"value\": \"0714\",\n \"text\": \"Manufacture of packaging and stretch film\"\n },\n {\n \"value\": \"00714\",\n \"text\": \"Manufacture of packaging and stretch film\"\n },\n {\n \"value\": \"0715\",\n \"text\": \"Manufacture of plastic product\"\n },\n {\n \"value\": \"00715\",\n \"text\": \"Manufacture of plastic product\"\n },\n {\n \"value\": \"0716\",\n \"text\": \"Manufacture of rubber product\"\n },\n {\n \"value\": \"00716\",\n \"text\": \"Manufacture of rubber product\"\n },\n {\n \"value\": \"00717\",\n \"text\": \"Manufacture of processed food or beverages products\"\n },\n {\n \"value\": \"0717\",\n \"text\": \"Manufacture of processed food or beverages products\"\n },\n {\n \"value\": \"00718\",\n \"text\": \"Manufacture of wood product except furniture\"\n },\n {\n \"value\": \"0718\",\n \"text\": \"Manufacture of wood product except furniture\"\n },\n {\n \"value\": \"00719\",\n \"text\": \"Manufacture of refined petroleum products\"\n },\n {\n \"value\": \"0719\",\n \"text\": \"Manufacture of refined petroleum products\"\n },\n {\n \"value\": \"00720\",\n \"text\": \"Manufacture of chemicals and chemical products (except for refined petroleum products)\"\n },\n {\n \"value\": \"0720\",\n \"text\": \"Manufacture of chemicals and chemical products (except for refined petroleum products)\"\n },\n {\n \"value\": \"00721\",\n \"text\": \"Manufacture of electrical equipment or components\"\n },\n {\n \"value\": \"00722\",\n \"text\": \"Manufacture of dairy food\"\n },\n {\n \"value\": \"00723\",\n \"text\": \"Manufacture of grain mills\"\n },\n {\n \"value\": \"00724\",\n \"text\": \"Manufacture of other food product (except dairy food and grain mills, starches and starch products)\"\n },\n {\n \"value\": \"00725\",\n \"text\": \"Manufacture of vegetable and animal oils and fats\"\n },\n {\n \"value\": \"00726\",\n \"text\": \"Manufacture of textiles\"\n },\n {\n \"value\": \"00727\",\n \"text\": \"Manufacture of footwear\"\n },\n {\n \"value\": \"00728\",\n \"text\": \"Manufacture of building materials\"\n },\n {\n \"value\": \"00729\",\n \"text\": \"Manufacture of glass and glass products\"\n },\n {\n \"value\": \"00730\",\n \"text\": \"Manufacture of mineral products\"\n },\n {\n \"value\": \"00731\",\n \"text\": \"Manufacture of medical and dental instruments and supplies\"\n },\n {\n \"value\": \"00732\",\n \"text\": \"Manufacturing of automobile or autopart\"\n },\n {\n \"value\": \"00733\",\n \"text\": \"Manufacture of paper and paper products\"\n },\n {\n \"value\": \"00734\",\n \"text\": \"Manufacture of gas and distribution of gaseous fuels through mains\"\n },\n {\n \"value\": \"00735\",\n \"text\": \"Manufacture of fertiliser pesticides\"\n },\n {\n \"value\": \"00736\",\n \"text\": \"Production of natural mineral water and other bottled water\"\n },\n {\n \"value\": \"00901\",\n \"text\": \"Retail trade not in stores, stalls or markets\"\n },\n {\n \"value\": \"00902\",\n \"text\": \"Retail sale via stalls and markets\"\n },\n {\n \"value\": \"00903\",\n \"text\": \"Wholesale of beer, wine and spirits\"\n },\n {\n \"value\": \"00904\",\n \"text\": \"Wholesale of tobacco, cigar, cigarettes\"\n },\n {\n \"value\": \"00905\",\n \"text\": \"Wholesale of construction and civil engineering machinery and equipment\"\n },\n {\n \"value\": \"00906\",\n \"text\": \"Wholesale of other machinery for use in industry, trade and navigation and other services n.e.c.\"\n },\n {\n \"value\": \"00907\",\n \"text\": \"Motor Vehicle dealer (Used)\"\n },\n {\n \"value\": \"00908\",\n \"text\": \"Jewel / Gem / Precious Metal\"\n },\n {\n \"value\": \"00909\",\n \"text\": \"Automobile and autoparts\"\n },\n {\n \"value\": \"00910\",\n \"text\": \"Hardware / construction material\"\n },\n {\n \"value\": \"00911\",\n \"text\": \"Electrical products\"\n },\n {\n \"value\": \"00912\",\n \"text\": \"Chemical / Petrochemical\"\n },\n {\n \"value\": \"00913\",\n \"text\": \"Cosmetics\"\n },\n {\n \"value\": \"00914\",\n \"text\": \"Import / Export\"\n },\n {\n \"value\": \"00915\",\n \"text\": \"Medical related products\"\n },\n {\n \"value\": \"00916\",\n \"text\": \"Automatic Merchandising Machine Operators\"\n },\n {\n \"value\": \"00917\",\n \"text\": \"Direct Selling Establishments\"\n },\n {\n \"value\": \"00918\",\n \"text\": \"Liquefied Petroleum Gas (Bottled Gas) Dealers\"\n },\n {\n \"value\": \"00919\",\n \"text\": \"Motor Vehicle Dealers (New )\"\n },\n {\n \"value\": \"00920\",\n \"text\": \"Office equipment\"\n },\n {\n \"value\": \"00921\",\n \"text\": \"Stationery, books, periodical and newspapers\"\n },\n {\n \"value\": \"00922\",\n \"text\": \"Retail - Petrol Station\"\n },\n {\n \"value\": \"00923\",\n \"text\": \"Retail / wholesaler other than above\"\n },\n {\n \"value\": \"01700\",\n \"text\": \"Other monetary intermediation\"\n },\n {\n \"value\": \"1700\",\n \"text\": \"Other monetary intermediation\"\n },\n {\n \"value\": \"01701\",\n \"text\": \"Research & Experiemental Development Services\"\n },\n {\n \"value\": \"1701\",\n \"text\": \"Research & Experimental Development Services\"\n },\n {\n \"value\": \"01702\",\n \"text\": \"licensed money lending activities, co-operative with credit functions and factoring companies\"\n },\n {\n \"value\": \"1702\",\n \"text\": \"licensed money lending activities, co-operative with credit functions and factoring companies\"\n },\n {\n \"value\": \"03510\",\n \"text\": \"Postal and courier activities\"\n },\n {\n \"value\": \"04201\",\n \"text\": \"Beauty Shops\"\n },\n {\n \"value\": \"04202\",\n \"text\": \"Barber Shops\"\n },\n {\n \"value\": \"04203\",\n \"text\": \"Libraries, archives, museums and other cultural activities\"\n },\n {\n \"value\": \"04204\",\n \"text\": \"Reupholstery and Furniture Repair\"\n },\n {\n \"value\": \"04205\",\n \"text\": \"Armature Rewinding Shops\"\n },\n {\n \"value\": \"04206\",\n \"text\": \"Welding Repair\"\n },\n {\n \"value\": \"04207\",\n \"text\": \"Maintenance and repair of motor vehicles\"\n },\n {\n \"value\": \"04208\",\n \"text\": \"Renting and leasing of motor vehicle, household good, machinery, equipment and tangible goods\"\n },\n {\n \"value\": \"04209\",\n \"text\": \"Business management consultancy services\"\n },\n {\n \"value\": \"04210\",\n \"text\": \"Activties of collection agencies / credit bureaus\"\n },\n {\n \"value\": \"04211\",\n \"text\": \"Repair of bicycles\"\n },\n {\n \"value\": \"04212\",\n \"text\": \"Repair of footwear and other leather goods\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"dateApplied\",\n \"displayName\": \"Date Applied\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"category\": \"11\"\n },\n {\n \"name\": \"entity\",\n \"displayName\": \"Entity\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"C\",\n \"text\": \"Conventional\"\n },\n {\n \"value\": \"I\",\n \"text\": \"Islamic\"\n }\n ],\n \"category\": \"10\"\n },\n {\n \"name\": \"facilityPackage\",\n \"displayName\": \"Facility Package\",\n \"type\": \"text\",\n \"category\": \"11\"\n },\n {\n \"name\": \"purposeOfAcquisition\",\n \"displayName\": \"Purpose of Acquisition\",\n \"placeholder\": \"Select your Purpose of Acquisition\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Internal Use\",\n \"text\": \"Internal Use\"\n },\n {\n \"value\": \"Tender\",\n \"text\": \"Tender\"\n },\n {\n \"value\": \"Service\",\n \"text\": \"Service\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityPurpose\",\n \"displayName\": \"Facility Purpose\",\n \"type\": \"dropdown\",\n \"defaultValue\": \"Refinancing of property\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Staff ASB - Untuk Kegunaan Sendiri dalam Pelaburan ASB\"\n },\n {\n \"value\": \"02\",\n \"text\": \"ASB - Untuk Kegunaan Sendiri dalam pelaburan ASB\"\n },\n {\n \"value\": \"002\",\n \"text\": \"Finance purchase of property/land for INVESTMENT.\"\n },\n {\n \"value\": \"03\",\n \"text\": \"ASB2 - Untuk Kegunaan Sendiri dalam Pelaburan ASB2\"\n },\n {\n \"value\": \"003\",\n \"text\": \"Finance purchase of prop/land for own occupation\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Personal Consumption Against ASB/ASM2W Certificate\"\n },\n {\n \"value\": \"05\",\n \"text\": \"ASB/ASM2W for Sole-prop Business\"\n },\n {\n \"value\": \"005\",\n \"text\": \"Personal consumption\"\n },\n {\n \"value\": \"008\",\n \"text\": \"Construction of property\"\n },\n {\n \"value\": \"010\",\n \"text\": \"Purchase of property for INVESTMENT & consumption.\"\n },\n {\n \"value\": \"013\",\n \"text\": \"Purchase of car park\"\n },\n {\n \"value\": \"015\",\n \"text\": \"To finance renovation/upgrading cost\"\n },\n {\n \"value\": \"016\",\n \"text\": \"To part finance Car Park and Renovation Cost\"\n },\n {\n \"value\": \"018\",\n \"text\": \"Staff - Renovation of property under staff rate\"\n },\n {\n \"value\": \"023\",\n \"text\": \"Refinancing of property\"\n },\n {\n \"value\": \"026\",\n \"text\": \"Staff Sundry Loan - Calamities\"\n },\n {\n \"value\": \"027\",\n \"text\": \"Staff-To part finance Medical Expenses\"\n },\n {\n \"value\": \"028\",\n \"text\": \"Staff-To part finance the purchase of a personal computer\"\n },\n {\n \"value\": \"029\",\n \"text\": \"Staff-Purchase of new car\"\n },\n {\n \"value\": \"030\",\n \"text\": \"Staff- study loan\"\n },\n {\n \"value\": \"031\",\n \"text\": \"Staff-Purchase of motorcycle\"\n },\n {\n \"value\": \"036\",\n \"text\": \"Staff-Staff Sundry loan\"\n },\n {\n \"value\": \"037\",\n \"text\": \"Booking Fee - Car\"\n },\n {\n \"value\": \"038\",\n \"text\": \"Debt Consolidation\"\n },\n {\n \"value\": \"039\",\n \"text\": \"Education\"\n },\n {\n \"value\": \"040\",\n \"text\": \"Electrical Goods\"\n },\n {\n \"value\": \"041\",\n \"text\": \"Home Furnishing/Equipment\"\n },\n {\n \"value\": \"042\",\n \"text\": \"Medical Expenses\"\n },\n {\n \"value\": \"043\",\n \"text\": \"Online Financing\"\n },\n {\n \"value\": \"044\",\n \"text\": \"Personal Refinancing\"\n },\n {\n \"value\": \"045\",\n \"text\": \"Property/House Downpayment\"\n },\n {\n \"value\": \"046\",\n \"text\": \"Renovation\"\n },\n {\n \"value\": \"047\",\n \"text\": \"Travel\"\n },\n {\n \"value\": \"048\",\n \"text\": \"Additional Financing for Revival of Abandoned Project\"\n },\n {\n \"value\": \"100\",\n \"text\": \"Purchase of Resident / Non Resident Property for personal purpose\"\n },\n {\n \"value\": \"101\",\n \"text\": \"Purchase of securities quoted on the Bursa Malaysia and/or financing of IPO shares\"\n },\n {\n \"value\": \"102\",\n \"text\": \"Purchase of securities quoted on the Bursa Malaysia and/or financing of IPO shares\"\n },\n {\n \"value\": \"COM01AF\",\n \"text\": \"PURCHASE OF COMMERCIAL VEHICLES\"\n },\n {\n \"value\": \"PRI01AF\",\n \"text\": \"PURCHASE OF PRIVATE VEHICLES\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityType\",\n \"displayName\": \"Facility Type (Personal)\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"PLFT001\",\n \"text\": \"Conventional\"\n },\n {\n \"value\": \"PLFT002\",\n \"text\": \"Private Sector\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityType\",\n \"displayName\": \"Facility Type (Auto)\",\n \"placeholder\": \"Facility Type\",\n \"startWithNewLine\": false,\n \"visible\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"HPFAC04\",\n \"text\": \" Islamic - Variable rate\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"financingTenure\",\n \"displayName\": \"Financing Tenure (Years)\",\n \"placeholder\": \"Financing Tenure (Years)\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 3,\n \"min\": 1,\n \"max\": 7,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid financing tenure from 1 to 7 years.\",\n \"regex\": \"^[1-7]$\"\n }\n ],\n \"inputType\": \"number\",\n \"category\": \"11\"\n },\n {\n \"name\": \"product\",\n \"displayName\": \"Product (Auto)\",\n \"placeholder\": \"Product\",\n \"startWithNewLine\": false,\n \"visible\": false,\n \"isRequired\": true,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"AFI04\",\n \"text\": \"Vehicle Financing-i (Variable Rate SBR)\"\n }\n ],\n \"maxLength\": 40,\n \"category\": \"11\"\n },\n {\n \"name\": \"purposeOfAcctOpen\",\n \"displayName\": \"Purpose of Account Opening\",\n \"type\": \"dropdown\",\n \"defaultValue\": \"Personal Loan/Financing\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Payroll/Salary\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Savings/Fixed/Term Deposits\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Remittance (Local/Foreign)\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Household/Family Expenses\"\n },\n {\n \"value\": \"06\",\n \"text\": \"Investment\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Standing Instruction\"\n },\n {\n \"value\": \"11\",\n \"text\": \"EPF Withdrawals\"\n },\n {\n \"value\": \"12\",\n \"text\": \"Personal Loan/Financing\"\n },\n {\n \"value\": \"14\",\n \"text\": \"Equipment & Machinery Expenses\"\n },\n {\n \"value\": \"15\",\n \"text\": \"Business Operating Account\"\n },\n {\n \"value\": \"16\",\n \"text\": \"Client's Account\"\n },\n {\n \"value\": \"17\",\n \"text\": \"Sales Proceed\"\n },\n {\n \"value\": \"18\",\n \"text\": \"Capital Injection\"\n },\n {\n \"value\": \"19\",\n \"text\": \"Administration of Estate Account\"\n },\n {\n \"value\": \"20\",\n \"text\": \"Liquidation/Disposal of Asset\"\n },\n {\n \"value\": \"21\",\n \"text\": \"Financing Payment/Drawdown\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"sourceOfFund\",\n \"displayName\": \"Source of Fund\",\n \"placeholder\": \"Source of Fund\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Income/Salary\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Own Bank Transfer (within RHB)\"\n },\n {\n \"value\": \"04\",\n \"text\": \"EPF/SOCSO/Pension/Gratuity\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Savings/Investment\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Scholarship/Allowance/Edu Loan\"\n },\n {\n \"value\": \"13\",\n \"text\": \"Trust Funds\"\n },\n {\n \"value\": \"15\",\n \"text\": \"Divorce Sett/Compensation\"\n },\n {\n \"value\": \"17\",\n \"text\": \"Sale of Inves/Shares/Prop/Land\"\n },\n {\n \"value\": \"18\",\n \"text\": \"Dividends/Profits\"\n },\n {\n \"value\": \"20\",\n \"text\": \"Rental Proceeds\"\n },\n {\n \"value\": \"21\",\n \"text\": \"Commission\"\n },\n {\n \"value\": \"22\",\n \"text\": \"Directors Fee/Salary\"\n },\n {\n \"value\": \"23\",\n \"text\": \"Welfare Allowance\"\n },\n {\n \"value\": \"24\",\n \"text\": \"Return on Investment\"\n },\n {\n \"value\": \"25\",\n \"text\": \"FD Placement Roll Over/Renewal\"\n },\n {\n \"value\": \"26\",\n \"text\": \"Insurance Maturity/Surrender\"\n },\n {\n \"value\": \"27\",\n \"text\": \"Legal Settlement\"\n },\n {\n \"value\": \"28\",\n \"text\": \"Credit Facility Approve by FI\"\n },\n {\n \"value\": \"29\",\n \"text\": \"Trf frm Parent/Holding/Subs\"\n },\n {\n \"value\": \"30\",\n \"text\": \"Trf frm Own Acct with Oth FI\"\n },\n {\n \"value\": \"31\",\n \"text\": \"Spouse/Parents/Children\"\n },\n {\n \"value\": \"32\",\n \"text\": \"Financial Aid/Subsidies\"\n },\n {\n \"value\": \"33\",\n \"text\": \"Part-time Income\"\n },\n {\n \"value\": \"34\",\n \"text\": \"Inheritance\"\n },\n {\n \"value\": \"35\",\n \"text\": \"Gift/Donation\"\n },\n {\n \"value\": \"36\",\n \"text\": \"Winning-legal Gambling/Contest\"\n },\n {\n \"value\": \"37\",\n \"text\": \"Business/Sales Proceeds\"\n },\n {\n \"value\": \"38\",\n \"text\": \"Crypto Currency/Digital Asset Investment Proceeds\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"preferredBranch\",\n \"displayName\": \"Preferred Branch\",\n \"placeholder\": \"Select Preferred Branch\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"000\",\n \"text\": \"Head Office (KL)\"\n },\n {\n \"value\": \"002\",\n \"text\": \"JALAN SILANG (WITH KUP)\"\n },\n {\n \"value\": \"003\",\n \"text\": \"Jalan Bukit Bintang (WITH BBI)\"\n },\n {\n \"value\": \"004\",\n \"text\": \"Jln Tun Sambanthan, Ipoh\"\n },\n {\n \"value\": \"005\",\n \"text\": \"Kampar\"\n },\n {\n \"value\": \"006\",\n \"text\": \"Johor Bahru City Square\"\n },\n {\n \"value\": \"007\",\n \"text\": \"Wisma Khoo, Sandakan\"\n },\n {\n \"value\": \"008\",\n \"text\": \"Putra Square, Kuantan\"\n },\n {\n \"value\": \"009\",\n \"text\": \"New Town, Petaling Jaya\"\n },\n {\n \"value\": \"010\",\n \"text\": \"Seri Kembangan\"\n },\n {\n \"value\": \"011\",\n \"text\": \"Kajang\"\n },\n {\n \"value\": \"012\",\n \"text\": \"Lebuh Pantai\"\n },\n {\n \"value\": \"013\",\n \"text\": \"Bentung\"\n },\n {\n \"value\": \"014\",\n \"text\": \"Batu Pahat\"\n },\n {\n \"value\": \"015\",\n \"text\": \"Kepong\"\n },\n {\n \"value\": \"016\",\n \"text\": \"Tanjung Sepat\"\n },\n {\n \"value\": \"017\",\n \"text\": \"Jln Tunku Ibrahim, Alor Setar\"\n },\n {\n \"value\": \"018\",\n \"text\": \"Jln Tok Hakim, Kota Bharu\"\n },\n {\n \"value\": \"019\",\n \"text\": \"Kuala Terengganu\"\n },\n {\n \"value\": \"020\",\n \"text\": \"Air Tawar\"\n },\n {\n \"value\": \"021\",\n \"text\": \"Kulai\"\n },\n {\n \"value\": \"022\",\n \"text\": \"Jln Gaya, Kota Kinabalu\"\n },\n {\n \"value\": \"024\",\n \"text\": \"Setapak\"\n },\n {\n \"value\": \"025\",\n \"text\": \"Jelapang\"\n },\n {\n \"value\": \"026\",\n \"text\": \"Jln Niaga, Shah Alam\"\n },\n {\n \"value\": \"027\",\n \"text\": \"Bukit Baru\"\n },\n {\n \"value\": \"028\",\n \"text\": \"Jln Chain Ferry, Prai\"\n },\n {\n \"value\": \"029\",\n \"text\": \"Yung Kong\"\n },\n {\n \"value\": \"030\",\n \"text\": \"Kenanga Wholesale City\"\n },\n {\n \"value\": \"031\",\n \"text\": \"Tmn Sg. Besi\"\n },\n {\n \"value\": \"032\",\n \"text\": \"Damansara Jaya\"\n },\n {\n \"value\": \"033\",\n \"text\": \"Kluang\"\n },\n {\n \"value\": \"034\",\n \"text\": \"Jerantut\"\n },\n {\n \"value\": \"035\",\n \"text\": \"Kuala Kurau\"\n },\n {\n \"value\": \"036\",\n \"text\": \"Raub\"\n },\n {\n \"value\": \"037\",\n \"text\": \"Port Klang\"\n },\n {\n \"value\": \"038\",\n \"text\": \"Jln Bakar Arang, Sg. Petani\"\n },\n {\n \"value\": \"039\",\n \"text\": \"Kemaman\"\n },\n {\n \"value\": \"040\",\n \"text\": \"Pasir Gudang\"\n },\n {\n \"value\": \"041\",\n \"text\": \"Bandar Baru Sg. Buloh\"\n },\n {\n \"value\": \"042\",\n \"text\": \"Jelutong\"\n },\n {\n \"value\": \"043\",\n \"text\": \"Tmn Suntex\"\n },\n {\n \"value\": \"044\",\n \"text\": \"Tmn Johor Jaya, Johor Bahru\"\n },\n {\n \"value\": \"045\",\n \"text\": \"JALAN TUN RAZAK (WITH PAS)\"\n },\n {\n \"value\": \"046\",\n \"text\": \"Jln Nakhoda Gampar, Miri\"\n },\n {\n \"value\": \"047\",\n \"text\": \"Tawau\"\n },\n {\n \"value\": \"048\",\n \"text\": \"Inanam\"\n },\n {\n \"value\": \"049\",\n \"text\": \"Tmn Pelangi, Johor Bahru\"\n },\n {\n \"value\": \"050\",\n \"text\": \"Tmn Ungku Tun Aminah\"\n },\n {\n \"value\": \"051\",\n \"text\": \"Jln Tunku Osman, Sibu\"\n },\n {\n \"value\": \"052\",\n \"text\": \"BUKIT MERTAJAM 1(WITH BMT)\"\n },\n {\n \"value\": \"053\",\n \"text\": \"Bandar Baru Uda, Tampoi\"\n },\n {\n \"value\": \"054\",\n \"text\": \"Rawang\"\n },\n {\n \"value\": \"055\",\n \"text\": \"Jln SS15 Subang Jaya\"\n },\n {\n \"value\": \"056\",\n \"text\": \"Mid Valley\"\n },\n {\n \"value\": \"057\",\n \"text\": \"Pandan Indah\"\n },\n {\n \"value\": \"058\",\n \"text\": \"Bayan Baru\"\n },\n {\n \"value\": \"059\",\n \"text\": \"Pasar Borong, Selayang\"\n },\n {\n \"value\": \"060\",\n \"text\": \"IOI Boulevard Puchong\"\n },\n {\n \"value\": \"061\",\n \"text\": \"KLCC\"\n },\n {\n \"value\": \"062\",\n \"text\": \"Bandar Baru Ampang\"\n },\n {\n \"value\": \"063\",\n \"text\": \"Tangkak\"\n },\n {\n \"value\": \"064\",\n \"text\": \"Mentakab\"\n },\n {\n \"value\": \"065\",\n \"text\": \"Bandar Baru Klang\"\n },\n {\n \"value\": \"066\",\n \"text\": \"Wisma Mahmud, Kuching\"\n },\n {\n \"value\": \"067\",\n \"text\": \"First Avenue\"\n },\n {\n \"value\": \"068\",\n \"text\": \"Kuala Lumpur Main\"\n },\n {\n \"value\": \"069\",\n \"text\": \"Kuala Kedah\"\n },\n {\n \"value\": \"070\",\n \"text\": \"Kulim\"\n },\n {\n \"value\": \"073\",\n \"text\": \"Lahad Datu\"\n },\n {\n \"value\": \"074\",\n \"text\": \"The Trillium, Lakefields\"\n },\n {\n \"value\": \"075\",\n \"text\": \"Mergong, Alor Setar\"\n },\n {\n \"value\": \"076\",\n \"text\": \"Ampang Point\"\n },\n {\n \"value\": \"077\",\n \"text\": \"Ayer Itam\"\n },\n {\n \"value\": \"078\",\n \"text\": \"Bangsar Shopping Centre\"\n },\n {\n \"value\": \"079\",\n \"text\": \"Bekok\"\n },\n {\n \"value\": \"080\",\n \"text\": \"Butterworth\"\n },\n {\n \"value\": \"081\",\n \"text\": \"Gopeng\"\n },\n {\n \"value\": \"082\",\n \"text\": \"Gunung Rapat, Ipoh\"\n },\n {\n \"value\": \"083\",\n \"text\": \"Ipoh Garden South\"\n },\n {\n \"value\": \"084\",\n \"text\": \"Jln Bukit Bintang\"\n },\n {\n \"value\": \"086\",\n \"text\": \"Jln Ipoh\"\n },\n {\n \"value\": \"087\",\n \"text\": \"Jln Pasar\"\n },\n {\n \"value\": \"088\",\n \"text\": \"JALAN RAJA LAUT(WITH JIP)\"\n },\n {\n \"value\": \"089\",\n \"text\": \"Jln Raja Uda, Butterworth\"\n },\n {\n \"value\": \"091\",\n \"text\": \"Jementah\"\n },\n {\n \"value\": \"092\",\n \"text\": \"Tmn Sentosa, Johor Bahru\"\n },\n {\n \"value\": \"093\",\n \"text\": \"Kangar\"\n },\n {\n \"value\": \"094\",\n \"text\": \"Ketereh\"\n },\n {\n \"value\": \"095\",\n \"text\": \"Persiaran Sultan Ibrahim, Kelang\"\n },\n {\n \"value\": \"096\",\n \"text\": \"Kluang 2 (WITH KLU)\"\n },\n {\n \"value\": \"098\",\n \"text\": \"Jln Tun HS Lee\"\n },\n {\n \"value\": \"101\",\n \"text\": \"Jln Burma\"\n },\n {\n \"value\": \"102\",\n \"text\": \"Jln Hang Tuah\"\n },\n {\n \"value\": \"103\",\n \"text\": \"Plaza OSK, Jln Ampang\"\n },\n {\n \"value\": \"104\",\n \"text\": \"Meru\"\n },\n {\n \"value\": \"106\",\n \"text\": \"Permas Jaya, Johor Bahru\"\n },\n {\n \"value\": \"107\",\n \"text\": \"RHB SOHO IPOH\"\n },\n {\n \"value\": \"110\",\n \"text\": \"Rantau\"\n },\n {\n \"value\": \"111\",\n \"text\": \"Bandar Sri Permaisuri\"\n },\n {\n \"value\": \"112\",\n \"text\": \"Section 14, Petaling Jaya\"\n },\n {\n \"value\": \"113\",\n \"text\": \"Segamat\"\n },\n {\n \"value\": \"115\",\n \"text\": \"Senai\"\n },\n {\n \"value\": \"116\",\n \"text\": \"Seremban\"\n },\n {\n \"value\": \"118\",\n \"text\": \"Jln Tengku Ampuan Zabedah, Shah Alam\"\n },\n {\n \"value\": \"121\",\n \"text\": \"Bandar Sri Damansara\"\n },\n {\n \"value\": \"123\",\n \"text\": \"Sg. Bakap\"\n },\n {\n \"value\": \"124\",\n \"text\": \"Kg. Baru Sg. Buloh\"\n },\n {\n \"value\": \"125\",\n \"text\": \"Sg. Pelek\"\n },\n {\n \"value\": \"126\",\n \"text\": \"Tmn Pekan Baru, Sg. Petani\"\n },\n {\n \"value\": \"128\",\n \"text\": \"Sungkai\"\n },\n {\n \"value\": \"130\",\n \"text\": \"Tmn Indah\"\n },\n {\n \"value\": \"131\",\n \"text\": \"Tmn Megah\"\n },\n {\n \"value\": \"132\",\n \"text\": \"Tmn Molek, Johor Bahru\"\n },\n {\n \"value\": \"133\",\n \"text\": \"Dataran Wangsa\"\n },\n {\n \"value\": \"134\",\n \"text\": \"Tmn Shamelin\"\n },\n {\n \"value\": \"136\",\n \"text\": \"Tmn Taming Jaya\"\n },\n {\n \"value\": \"139\",\n \"text\": \"UEP Subang Jaya\"\n },\n {\n \"value\": \"140\",\n \"text\": \"Ulu Tiram\"\n },\n {\n \"value\": \"142\",\n \"text\": \"Bandar Baru Nilai\"\n },\n {\n \"value\": \"144\",\n \"text\": \"Menglembu\"\n },\n {\n \"value\": \"145\",\n \"text\": \"Bayan Point\"\n },\n {\n \"value\": \"150\",\n \"text\": \"Jln Masjid, Bintulu\"\n },\n {\n \"value\": \"153\",\n \"text\": \"Damansara Utama\"\n },\n {\n \"value\": \"158\",\n \"text\": \"Plentong, Johor Bahru\"\n },\n {\n \"value\": \"161\",\n \"text\": \"Bagan Serai\"\n },\n {\n \"value\": \"163\",\n \"text\": \"Bahau\"\n },\n {\n \"value\": \"165\",\n \"text\": \"Bukit Mertajam\"\n },\n {\n \"value\": \"169\",\n \"text\": \"Simpang Empat, Hutan Melintang\"\n },\n {\n \"value\": \"176\",\n \"text\": \"Jenjarom\"\n },\n {\n \"value\": \"177\",\n \"text\": \"Jinjang Utara\"\n },\n {\n \"value\": \"182\",\n \"text\": \"Kerteh\"\n },\n {\n \"value\": \"183\",\n \"text\": \"Jln Stesen, Kelang\"\n },\n {\n \"value\": \"187\",\n \"text\": \"Kuala Dungun\"\n },\n {\n \"value\": \"188\",\n \"text\": \"Kuala Kangsar\"\n },\n {\n \"value\": \"190\",\n \"text\": \"Kuala Pilah\"\n },\n {\n \"value\": \"195\",\n \"text\": \"Jln Tun Mustapha\"\n },\n {\n \"value\": \"196\",\n \"text\": \"Pulau Langkawi\"\n },\n {\n \"value\": \"198\",\n \"text\": \"LEBUH PANTAI 3 (WITH PNG)\"\n },\n {\n \"value\": \"202\",\n \"text\": \"Jln Abdullah, Muar\"\n },\n {\n \"value\": \"203\",\n \"text\": \"Overseas Union Garden\"\n },\n {\n \"value\": \"204\",\n \"text\": \"Padang Serai\"\n },\n {\n \"value\": \"205\",\n \"text\": \"Parit Buntar\"\n },\n {\n \"value\": \"207\",\n \"text\": \"Pasir Mas\"\n },\n {\n \"value\": \"208\",\n \"text\": \"Pontian Kecil\"\n },\n {\n \"value\": \"213\",\n \"text\": \"Segambut\"\n },\n {\n \"value\": \"216\",\n \"text\": \"SETAPAK 3 (WITH STP)\"\n },\n {\n \"value\": \"218\",\n \"text\": \"Simpang Renggam\"\n },\n {\n \"value\": \"219\",\n \"text\": \"Sitiawan\"\n },\n {\n \"value\": \"223\",\n \"text\": \"Sg. Siput\"\n },\n {\n \"value\": \"224\",\n \"text\": \"SS2 Petaling Jaya\"\n },\n {\n \"value\": \"225\",\n \"text\": \"Taiping\"\n },\n {\n \"value\": \"228\",\n \"text\": \"Tmn Midah\"\n },\n {\n \"value\": \"231\",\n \"text\": \"Tmn Tun Dr Ismail\"\n },\n {\n \"value\": \"232\",\n \"text\": \"Tanjong Karang\"\n },\n {\n \"value\": \"233\",\n \"text\": \"Tasek, Ipoh\"\n },\n {\n \"value\": \"235\",\n \"text\": \"Teluk Intan\"\n },\n {\n \"value\": \"237\",\n \"text\": \"Yong Peng\"\n },\n {\n \"value\": \"239\",\n \"text\": \"Plaza Damas 3\"\n },\n {\n \"value\": \"240\",\n \"text\": \"Putrajaya\"\n },\n {\n \"value\": \"242\",\n \"text\": \"Lawas\"\n },\n {\n \"value\": \"252\",\n \"text\": \"Melaka Raya\"\n },\n {\n \"value\": \"260\",\n \"text\": \"Prima Square, Sandakan\"\n },\n {\n \"value\": \"261\",\n \"text\": \"Jln Kulas, Kuching\"\n },\n {\n \"value\": \"264\",\n \"text\": \"Simpang Tiga, Kuching\"\n },\n {\n \"value\": \"266\",\n \"text\": \"Boulevard Centre, Miri\"\n },\n {\n \"value\": \"268\",\n \"text\": \"Lundu\"\n },\n {\n \"value\": \"269\",\n \"text\": \"Kanowit\"\n },\n {\n \"value\": \"271\",\n \"text\": \"Dalat\"\n },\n {\n \"value\": \"272\",\n \"text\": \"Kota Samarahan, Kuching\"\n },\n {\n \"value\": \"273\",\n \"text\": \"Sarikei\"\n },\n {\n \"value\": \"275\",\n \"text\": \"Tabuan Jaya, Kuching\"\n },\n {\n \"value\": \"276\",\n \"text\": \"Siburan\"\n },\n {\n \"value\": \"278\",\n \"text\": \"Matang Jaya, Kuching\"\n },\n {\n \"value\": \"280\",\n \"text\": \"Batu Kawah, Kuching\"\n },\n {\n \"value\": \"281\",\n \"text\": \"Lintas Station Complex, Kota Kinabalu\"\n },\n {\n \"value\": \"282\",\n \"text\": \"Limbang\"\n },\n {\n \"value\": \"286\",\n \"text\": \"Taipan Senawang\"\n },\n {\n \"value\": \"288\",\n \"text\": \"Kota Damansara\"\n },\n {\n \"value\": \"289\",\n \"text\": \"The Vertical, Bangsar South\"\n },\n {\n \"value\": \"290\",\n \"text\": \"Tmn Mount Austin, Johor Bahru\"\n },\n {\n \"value\": \"291\",\n \"text\": \"Menara Shell\"\n },\n {\n \"value\": \"293\",\n \"text\": \"Paradigm Mall, Kelana Jaya\"\n },\n {\n \"value\": \"294\",\n \"text\": \"Utropolis Mall, Glenmarie\"\n },\n {\n \"value\": \"295\",\n \"text\": \"Bandar Bukit Tinggi\"\n },\n {\n \"value\": \"296\",\n \"text\": \"Jitra\"\n },\n {\n \"value\": \"297\",\n \"text\": \"Air Putih, Kuantan\"\n },\n {\n \"value\": \"298\",\n \"text\": \"Sg. Merah, Sibu\"\n },\n {\n \"value\": \"299\",\n \"text\": \"Tmn Nusa Bestari, Johor Bahru\"\n },\n {\n \"value\": \"300\",\n \"text\": \"Keningau\"\n },\n {\n \"value\": \"301\",\n \"text\": \"1 Lagenda\"\n },\n {\n \"value\": \"302\",\n \"text\": \"Triang\"\n },\n {\n \"value\": \"303\",\n \"text\": \"Tmn Connaught\"\n },\n {\n \"value\": \"304\",\n \"text\": \"MetroTown, Kota Kinabalu\"\n },\n {\n \"value\": \"305\",\n \"text\": \"Kota Kemuning\"\n },\n {\n \"value\": \"306\",\n \"text\": \"Kota Tinggi\"\n },\n {\n \"value\": \"307\",\n \"text\": \"Setia Alam\"\n },\n {\n \"value\": \"308\",\n \"text\": \"Alam Avenue\"\n },\n {\n \"value\": \"309\",\n \"text\": \"Malim\"\n },\n {\n \"value\": \"310\",\n \"text\": \"Mukah\"\n },\n {\n \"value\": \"312\",\n \"text\": \"Bandar Mahkota Cheras\"\n },\n {\n \"value\": \"313\",\n \"text\": \"Seremban 2\"\n },\n {\n \"value\": \"314\",\n \"text\": \"Banting\"\n },\n {\n \"value\": \"315\",\n \"text\": \"IOI Resort City\"\n },\n {\n \"value\": \"316\",\n \"text\": \"Bandar Sri Petaling\"\n },\n {\n \"value\": \"317\",\n \"text\": \"Tanjung Tokong\"\n },\n {\n \"value\": \"319\",\n \"text\": \"Bandar Penawar\"\n },\n {\n \"value\": \"320\",\n \"text\": \"Kelana Jaya\"\n },\n {\n \"value\": \"321\",\n \"text\": \"RHB Bank Jalan Raja Laut, Kuala Lumpur\"\n },\n {\n \"value\": \"322\",\n \"text\": \"Auto City, Juru\"\n },\n {\n \"value\": \"323\",\n \"text\": \"Tmn Setia Tropika, Johor Bahru\"\n },\n {\n \"value\": \"389\",\n \"text\": \"Tmn Flora Utama, Batu Pahat\"\n },\n {\n \"value\": \"399\",\n \"text\": \"Caw. Utama\"\n },\n {\n \"value\": \"400\",\n \"text\": \"Caw. Jln Satok, Kuching\"\n },\n {\n \"value\": \"401\",\n \"text\": \"Caw. Kelana Jaya\"\n },\n {\n \"value\": \"402\",\n \"text\": \"Caw. Tmn Flora Utama, Batu Pahat\"\n },\n {\n \"value\": \"403\",\n \"text\": \"Caw. Kubang Kerian, Kota Bharu\"\n },\n {\n \"value\": \"404\",\n \"text\": \"Caw. Tmn Setia Tropika, Johor Bahru\"\n },\n {\n \"value\": \"405\",\n \"text\": \"Caw. Bandar Baru Bangi\"\n },\n {\n \"value\": \"407\",\n \"text\": \"Caw. Kuala Terengganu\"\n },\n {\n \"value\": \"408\",\n \"text\": \"Caw. Jln Raja Laut\"\n },\n {\n \"value\": \"409\",\n \"text\": \"Caw. Auto City\"\n },\n {\n \"value\": \"411\",\n \"text\": \"Caw. Lagenda Heights, Sg. Petani\"\n },\n {\n \"value\": \"412\",\n \"text\": \"Caw. Laman Seri, Shah Alam\"\n },\n {\n \"value\": \"457\",\n \"text\": \"RHB Bank Sales Centre AEON Taman Equine\"\n },\n {\n \"value\": \"473\",\n \"text\": \"RHB EASY - Kompleks Teruntum\"\n },\n {\n \"value\": \"479\",\n \"text\": \"RHB EASY - Giant Plentong\"\n },\n {\n \"value\": \"491\",\n \"text\": \"RHB EASY - Mydin Mall MITC Melaka\"\n },\n {\n \"value\": \"630\",\n \"text\": \"RHB EASY - Mydin Kubang Kerian\"\n },\n {\n \"value\": \"637\",\n \"text\": \"RHB EASY - Mydin Meru Raya\"\n },\n {\n \"value\": \"710\",\n \"text\": \"RHB EASY - E-Mart Commercial Centre\"\n },\n {\n \"value\": \"712\",\n \"text\": \"RHB EASY - Giant Hypermarket Bayan Baru\"\n },\n {\n \"value\": \"861\",\n \"text\": \"RHB EASY Warisan Square\"\n },\n {\n \"value\": \"931\",\n \"text\": \"CC EMBOSSING\"\n },\n {\n \"value\": \"RD08\",\n \"text\": \"PERAK REGION\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"bdmMoreThan2500kg\",\n \"displayName\": \"BDM More Than 2500kg\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"chassisNo\",\n \"displayName\": \"Chassis Number\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"engineNo\",\n \"displayName\": \"Engine Number\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"marketValue\",\n \"displayName\": \"Market Value\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"12\"\n },\n {\n \"name\": \"modelOfVehicle\",\n \"displayName\": \"Model of Vehicle\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"type\": \"text\",\n \"name\": \"purchasePriceOTR\",\n \"title\": \"carPrice\",\n \"placeholder\": \"car Price (MYR)\",\n \"isRequired\": true,\n \"displayName\": \"Car Price (MYR)\",\n \"maxLength\": 23,\n \"min\": 2000,\n \"max\": 150000,\n \"inputType\": \"number\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a financing amount between 2,000 and 150,000.\",\n \"regex\": \"^(2000|[1-9][0-9]{3}|[1-9][0-9]{4}|150000)$\"\n },\n {\n \"type\": \"regex\",\n \"text\": \"Please enter an amount in increments of 1,000.\",\n \"regex\": \"^([1-9][0-9]*000|150000)$\"\n }\n ],\n \"category\": \"12\"\n },\n {\n \"name\": \"registrationDate\",\n \"displayName\": \"Registration Date\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"category\": \"12\"\n },\n {\n \"name\": \"registrationNo\",\n \"displayName\": \"Registration Number\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"vehicleCondition\",\n \"displayName\": \"Condition\",\n \"placeholder\": \"Vehicle Condition\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"N\",\n \"text\": \"New\"\n },\n {\n \"value\": \"U\",\n \"text\": \"Used\"\n },\n {\n \"value\": \"UN\",\n \"text\": \"UnRegistered Recon\"\n },\n {\n \"value\": \"UR\",\n \"text\": \"Used Recon\"\n },\n {\n \"value\": \"PR\",\n \"text\": \"Pre-registered\"\n }\n ],\n \"category\": \"12\"\n },\n {\n \"name\": \"yearMake\",\n \"displayName\": \"Year Make\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"startWithNewLine\": false,\n \"placeholder\": \"Year\",\n \"min\": 2014,\n \"max\": 2100,\n \"category\": \"12\"\n },\n {\n \"name\": \"makeOfVehicle\",\n \"displayName\": \"Make of Vehicle\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"permanentaddressLine1\",\n \"displayName\": \"Permanent Address Line 1\",\n \"placeholder\": \"Permanent Address Line 1\",\n \"maxLength\": 40,\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentaddressLine2\",\n \"displayName\": \"Permanent Address Line 2\",\n \"placeholder\": \"Permanent Address Line 2 (optional)\",\n \"isRequired\": false,\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentaddressLine3\",\n \"displayName\": \"Permanent Address Line 3\",\n \"maxLength\": 40,\n \"placeholder\": \"Permanent Address Line 3 (optional)\",\n \"isRequired\": false,\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentaddressType\",\n \"displayName\": \"Permanent Address Type\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentcity\",\n \"displayName\": \"Permanent City\",\n \"placeholder\": \"City of the Permanent Address\",\n \"type\": \"text\",\n \"maxLength\": 20,\n \"startWithNewLine\": false,\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentpostcode\",\n \"displayName\": \"Permanent Postcode\",\n \"placeholder\": \"Postcode of the Permanent Address\",\n \"type\": \"text\",\n \"maxLength\": 10,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressLine1\",\n \"displayName\": \"Residential Address Line 1\",\n \"placeholder\": \"Residential Address Line 1\",\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressLine2\",\n \"displayName\": \"Residential Address Line 2\",\n \"placeholder\": \"Residential Address Line 2 (optional)\",\n \"isRequired\": false,\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressLine3\",\n \"displayName\": \"Residential Address Line 3\",\n \"placeholder\": \"Residential Address Line 3 (optional)\",\n \"isRequired\": false,\n \"startWithNewLine\": false,\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressType\",\n \"displayName\": \"Residential Address Type\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialcity\",\n \"displayName\": \"Residential City\",\n \"placeholder\": \"City of the Residential Address\",\n \"visibleIf\": \"{residenceAddress} == false\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 20,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialpostcode\",\n \"displayName\": \"Residential Postcode\",\n \"placeholder\": \"Postcode of the Residential Address\",\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 10,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialstate\",\n \"displayName\": \"Residential State\",\n \"placeholder\": \"Select State Of The Residential Address\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"A\",\n \"text\": \"PERAK\"\n },\n {\n \"value\": \"B\",\n \"text\": \"SELANGOR\"\n },\n {\n \"value\": \"C\",\n \"text\": \"PAHANG\"\n },\n {\n \"value\": \"D\",\n \"text\": \"KELANTAN\"\n },\n {\n \"value\": \"J\",\n \"text\": \"JOHOR\"\n },\n {\n \"value\": \"K\",\n \"text\": \"KEDAH\"\n },\n {\n \"value\": \"L\",\n \"text\": \"WP LABUAN\"\n },\n {\n \"value\": \"M\",\n \"text\": \"MELAKA\"\n },\n {\n \"value\": \"N\",\n \"text\": \"NEGERI SEMBILAN\"\n },\n {\n \"value\": \"P\",\n \"text\": \"PULAU PINANG\"\n },\n {\n \"value\": \"Q\",\n \"text\": \"SARAWAK\"\n },\n {\n \"value\": \"R\",\n \"text\": \"PERLIS\"\n },\n {\n \"value\": \"S\",\n \"text\": \"SABAH\"\n },\n {\n \"value\": \"T\",\n \"text\": \"TERENGGANU\"\n },\n {\n \"value\": \"U\",\n \"text\": \"WP PUTRAJAYA\"\n },\n {\n \"value\": \"W\",\n \"text\": \"WP KUALA LUMPUR\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"officeaddressLine1\",\n \"displayName\": \"Employer Address Line 1\",\n \"placeholder\": \"Employer Address Line 1\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"category\": \"5\"\n },\n {\n \"name\": \"officeaddressLine2\",\n \"displayName\": \"Employer Address Line 2\",\n \"placeholder\": \"Employer Address Line 2 (optional)\",\n \"isRequired\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"5\"\n },\n {\n \"name\": \"officeaddressLine3\",\n \"displayName\": \"Employer Address Line 3\",\n \"placeholder\": \"Employer Address Line 3 (optional)\",\n \"startWithNewLine\": false,\n \"isRequired\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"5\"\n },\n {\n \"name\": \"officeaddressType\",\n \"displayName\": \"Office Address Type\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"officecity\",\n \"displayName\": \"Employer City\",\n \"placeholder\": \"Employer City\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 20,\n \"category\": \"5\"\n },\n {\n \"name\": \"officepostcode\",\n \"displayName\": \"Employer Postcode\",\n \"placeholder\": \"Employer Postcode\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 10,\n \"inputType\": \"number\",\n \"category\": \"5\"\n },\n {\n \"name\": \"computationMode\",\n \"displayName\": \"Computation Mode\",\n \"type\": \"text\",\n \"category\": \"10\"\n },\n {\n \"name\": \"countryOfPermanentResident\",\n \"displayName\": \"Country of Permanent Resident\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"foreignPR\",\n \"displayName\": \"Foreign PR\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"internationalExtensionPhoneNo\",\n \"displayName\": \"International Extension Phone No\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"8\"\n },\n {\n \"name\": \"internationalPhoneNo\",\n \"displayName\": \"International Phone No\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"category\": \"8\"\n },\n {\n \"name\": \"internationalPhoneNoAreaCode\",\n \"displayName\": \"International Phone No Area Code\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"category\": \"8\"\n },\n {\n \"name\": \"pRIDNo\",\n \"displayName\": \"PR ID No\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"dealerName\",\n \"displayName\": \"Dealer Name\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"cashDownpayment\",\n \"displayName\": \"Cash Downpayment\",\n \"placeholder\": \"Cash Downpayment\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 20,\n \"category\": \"11\"\n },\n {\n \"name\": \"downpayment\",\n \"displayName\": \"Down Payment (%)\",\n \"placeholder\": \"Down Payment (%)\",\n \"type\": \"text\",\n \"category\": \"11\"\n },\n {\n \"name\": \"bankName\",\n \"displayName\": \"Bank Name\",\n \"placeholder\": \"Bank Name\",\n \"visible\": false,\n \"type\": \"text\",\n \"startWithNewLine\": false,\n \"category\": \"11\"\n },\n {\n \"name\": \"bankRates\",\n \"displayName\": \"Bank Rate\",\n \"placeholder\": \"Bank Rate\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"startWithNewLine\": false,\n \"category\": \"11\"\n },\n {\n \"name\": \"monthlyRepayment\",\n \"displayName\": \"Monthly Repayment\",\n \"placeholder\": \"Monthly Repayment\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityTenureYears\",\n \"displayName\": \"Repayment Term (Years)\",\n \"placeholder\": \"Payment Term\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid financing tenure from 1 to 7 years.\",\n \"regex\": \"^[1-7]$\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"totalFinancing\",\n \"displayName\": \"Financing Amount (RM)\",\n \"placeholder\": \"How much do you want to borrow?\",\n \"type\": \"text\",\n \"maxLength\": 15,\n \"min\": 2000,\n \"max\": 150000,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a financing amount between 2,000 and 150,000.\",\n \"regex\": \"^(2000|[1-9][0-9]{3}|[1-9][0-9]{4}|150000)$\"\n },\n {\n \"type\": \"regex\",\n \"text\": \"Please enter an amount in increments of 1,000.\",\n \"regex\": \"^([1-9][0-9]*000|150000)$\"\n }\n ],\n \"inputType\": \"number\",\n \"category\": \"11\"\n },\n {\n \"name\": \"myKadOrPassport\",\n \"displayName\": \"MyKad or Passport\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"incomeEPF_iakaun\",\n \"displayName\": \"Income EPF i-Akaun\",\n \"type\": \"text\",\n \"category\": \"11\"\n },\n {\n \"name\": \"phoneNumber\",\n \"displayName\": \"Phone Number\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"category\": \"1\"\n },\n {\n \"name\": \"incorporatedDate\",\n \"displayName\": \"Incorporated Date\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"category\": \"3\"\n },\n {\n \"name\": \"shareCapital\",\n \"displayName\": \"Share Capital\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"tangibleAssets\",\n \"displayName\": \"Tangible Assets\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalCurrentLiabilities\",\n \"displayName\": \"Total Current Liabilities\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalCurrentAssets\",\n \"displayName\": \"Total Current Assets\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"endOfYearCash\",\n \"displayName\": \"Cash and Cash Equivalent at end of the Financial Year or Period\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"shortTermLiabilities\",\n \"displayName\": \"Short Term Liabilities\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"ebitda\",\n \"displayName\": \"Earning Before Interest, Tax, Depreciation and Amortization (EBITDA)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalAssets\",\n \"displayName\": \"Total Assets\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"netOperatingCashFlow\",\n \"displayName\": \"Net Operating Cash Flow\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"netProfitT1\",\n \"displayName\": \"Net Profit/ Loss and Total Comprehensive Income (year T-1)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalEquityT1\",\n \"displayName\": \"Total Equity/Owner equity/Total Net (year T-1)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"netProfitT2\",\n \"displayName\": \"Net Profit/ Loss and Total Comprehensive Income (year T-2)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalEquityT2\",\n \"displayName\": \"Total Equity/Owner equity/Total Net (year T-2)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"facilityInterestRate\",\n \"displayName\": \"Interest Rate\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"eppProduct\",\n \"displayName\": \"EPP Product Name\",\n \"type\": \"text\",\n \"category\": \"4\"\n },\n {\n \"name\": \"eppPrice\",\n \"displayName\": \"EPP Price\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"eppNoOfPax\",\n \"displayName\": \"EPP No. of Pax\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"housingLoanMonthlyInstallment\",\n \"displayName\": \"Housing Loan Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"hirePurchaseMonthlyInstallment\",\n \"displayName\": \"Hire Purchase Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"personalLoanMonthlyInstallment\",\n \"displayName\": \"Personal Loan Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"creditCardMonthlyInstallment\",\n \"displayName\": \"Credit Card Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"otherFinancingMonthlyInstallment\",\n \"displayName\": \"Other Financing Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"bank_statement_t1\",\n \"displayName\": \"Bank Statement (Month T-1)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"accountHolderNameT1\",\n \"statementDateT1\",\n \"bankNameT1\",\n \"accountNumberT1\",\n \"totalCreditsT1\",\n \"totalDebitsT1\",\n \"openingBalanceT1\",\n \"bankBalanceT1\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t2\",\n \"displayName\": \"Bank Statement (Month T-2)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"accountHolderNameT2\",\n \"statementDateT2\",\n \"bankNameT2\",\n \"accountNumberT2\",\n \"totalCreditsT2\",\n \"totalDebitsT2\",\n \"openingBalanceT2\",\n \"bankBalanceT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t3\",\n \"displayName\": \"Bank Statement (Month T-3)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"accountHolderNameT3\",\n \"statementDateT3\",\n \"bankNameT3\",\n \"accountNumberT3\",\n \"totalCreditsT3\",\n \"totalDebitsT3\",\n \"openingBalanceT3\",\n \"bankBalanceT3\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t4\",\n \"displayName\": \"Bank Statement (Month T-4)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"accountHolderNameT4\",\n \"statementDateT4\",\n \"bankNameT4\",\n \"accountNumberT4\",\n \"totalCreditsT4\",\n \"totalDebitsT4\",\n \"openingBalanceT4\",\n \"bankBalanceT4\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t5\",\n \"displayName\": \"Bank Statement (Month T-5)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"accountHolderNameT5\",\n \"statementDateT5\",\n \"bankNameT5\",\n \"accountNumberT5\",\n \"totalCreditsT5\",\n \"totalDebitsT5\",\n \"openingBalanceT5\",\n \"bankBalanceT5\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t6\",\n \"displayName\": \"Bank Statement (Month T-6)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"accountHolderNameT6\",\n \"statementDateT6\",\n \"bankNameT6\",\n \"accountNumberT6\",\n \"totalCreditsT6\",\n \"totalDebitsT6\",\n \"openingBalanceT6\",\n \"bankBalanceT6\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"financials\",\n \"displayName\": \"Audited Financial Statement\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"shareCapital\",\n \"totalEquityT1\",\n \"totalEquityT2\",\n \"totalCurrentLiabilities\",\n \"shortTermLiabilities\",\n \"totalAssets\",\n \"totalCurrentAssets\",\n \"tangibleAssets\",\n \"netProfitT1\",\n \"netProfitT2\",\n \"endOfYearCash\",\n \"netOperatingCashFlow\",\n \"ebitda\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"financials_fincap_t1\",\n \"displayName\": \"Audited Financial Statement (T-1) (FinCap)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"nonCurrentAssetsSubsidiaryCompaniesT1\",\n \"nonCurrentAssetsAssociatedCompaniesT1\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditureT1\",\n \"nonCurrentAssetInvestmentPropertiesT1\",\n \"nonCurrentAssetsInvestmentsT1\",\n \"nonCurrentAssetInvestmentSecuritiesT1\",\n \"nonCurrentAssetDeferredAssetsT1\",\n \"nonCurrentAssetDepositsT1\",\n \"nonCurrentAssetOwnGoodwillT1\",\n \"nonCurrentAssetGoodwillOnConsolidationT1\",\n \"nonCurrentAssetSinkingFundT1\",\n \"nonCurrentAssetPropertyPlantEquipmentT1\",\n \"nonCurrentAssetInventoriesT1\",\n \"nonCurrentAssetRightOfUseAssetsT1\",\n \"nonCurrentAssetIntangibleAssetsT1\",\n \"nonCurrentAssetPrepaidLeasePaymentsT1\",\n \"nonCurrentAssetFinancialAssetAtFairValueT1\",\n \"nonCurrentAssetLandUseRightT1\",\n \"nonCurrentAssetTradeReceivablesT1\",\n \"nonCurrentAssetOtherReceivablesT1\",\n \"nonCurrentAssetTradeAndOtherReceivablesT1\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepaymentsT1\",\n \"totalNonCurrentAssetsT1\",\n \"currentAssetDevelopmentPropertiesOrExpenditureT1\",\n \"currentAssetShortTermInvestmentsT1\",\n \"currentAssetTradeDebtorsT1\",\n \"currentAssetShortTermDepositsT1\",\n \"currentAssetAmountDueFromHoldingCompanyT1\",\n \"currentAssetAmountDueFromSubsidiaryCompaniesT1\",\n \"currentAssetAmountDueFromAssociatedCompaniesT1\",\n \"currentAssetAmountDueFromDirectorT1\",\n \"currentAssetAmountDueFromCustomerT1\",\n \"currentAssetAmountOwingByShareholdersT1\",\n \"currentAssetInventoriesT1\",\n \"currentAssetFinancialAssetAtFairValueT1\",\n \"currentAssetLandUseRightT1\",\n \"currentAssetTaxRecoverableT1\",\n \"currentAssetContractAssetsT1\",\n \"currentAssetCurrentTaxAssetsT1\",\n \"currentAssetPrepaymentsT1\",\n \"currentAssetDerivativeT1\",\n \"currentAssetCashAndBankBalancesT1\",\n \"currentAssetOtherReceivablesT1\",\n \"currentAssetRestrictedCashT1\",\n \"currentAssetCashAndCashEquivalentsT1\",\n \"currentAssetDepositsCashAndBankBalancesT1\",\n \"currentAssetCashAtBanksT1\",\n \"currentAssetCashOnHandT1\",\n \"currentAssetDepositsAndPrepaymentsT1\",\n \"currentAssetTradeAndOtherReceivablesT1\",\n \"currentAssetOtherReceivablesDepositsAndPrepaymentsT1\",\n \"currentAssetOtherReceivablesAndDepositsT1\",\n \"currentAssetOtherReceivablesAndPrepaymentsT1\",\n \"currentAssetCashT1\",\n \"totalCurrentAssetsT1\",\n \"totalAssetsT1\",\n \"currentLiabilitiesTradeCreditorsT1\",\n \"currentLiabilitiesHirePurchasePayablesT1\",\n \"currentLiabilitiesBankOverdraftT1\",\n \"currentLiabilitiesBankAcceptanceT1\",\n \"currentLiabilitiesBorrowingsOrTermLoansT1\",\n \"currentLiabilitiesBankborrowingsT1\",\n \"currentLiabilitiesAmountsOwingToHoldingCompanyT1\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompaniesT1\",\n \"currentLiabilitiesAmountOwingToAssociatedCompaniesT1\",\n \"currentLiabilitiesAmountsOwingToDirectorT1\",\n \"currentLiabilitiesProvisionForTaxationT1\",\n \"currentLiabilitiesLeasePayablesT1\",\n \"currentLiabilitiesFinanceLeasePayablesT1\",\n \"currentLiabilitiesOtherPayablesT1\",\n \"currentLiabilitiesDividendPayablesT1\",\n \"currentLiabilitiesTradeAndOtherPayablesT1\",\n \"currentLiabilitiesDepositsFromCustomersT1\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDepositsT1\",\n \"currentLiabilitiesOtherPayablesAndAccrualsT1\",\n \"currentLiabilitiesContractLiabilitiesT1\",\n \"currentLiabilitiesDerivativeT1\",\n \"totalCurrentLiabilitiesT1\",\n \"shortTermLiabilitiesT1\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoansT1\",\n \"nonCurrentLiabilitiesBankBorrowingsT1\",\n \"nonCurrentLiabilitiesLeaseObligationsT1\",\n \"nonCurrentLiabilitiesFinanceLeaseObligationsT1\",\n \"nonCurrentLiabilitiesDeferredTaxationT1\",\n \"nonCurrentLiabilitiesRetirementBenefitsT1\",\n \"nonCurrentLiabilitiesHirePurchasePayablesT1\",\n \"nonCurrentLiabilitiesDepositsFromCustomersT1\",\n \"nonCurrentLiabilitiesContractLiabilitiesT1\",\n \"totalNonCurrentLiabilitiesT1\",\n \"totalLiabilitiesT1\",\n \"tangibleAssetsT1\",\n \"shareCapitalT1\",\n \"preferenceShareCapitalT1\",\n \"sharePremiumT1\",\n \"reservesT1\",\n \"capitalReservesT1\",\n \"revaluationReservesT1\",\n \"exchangeEqualisationOrFluctuationReservesT1\",\n \"retainedEarningsT1\",\n \"totalEquityT1\",\n \"revenueT1\",\n \"costOfGoodsSoldT1\",\n \"grossProfitT1\",\n \"otherIncomeT1\",\n \"profitFromOperationsT1\",\n \"financeCostT1\",\n \"ebitdaT1\",\n \"taxesT1\",\n \"zakatT1\",\n \"profitAfterTaxT1\",\n \"netProfitT1\",\n \"netOperatingCashFlowT1\",\n \"depreciationT1\",\n \"depreciationOfPropertyPlantEquipmentT1\",\n \"depreciationRightOfUseAssetsT1\",\n \"depreciationOfInvestmentPropertiesT1\",\n \"depreciationOfInvestmentSecuritiesT1\",\n \"endOfYearCashT1\",\n \"nonCurrentAssetsSubsidiaryCompaniesT2\",\n \"nonCurrentAssetsAssociatedCompaniesT2\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditureT2\",\n \"nonCurrentAssetInvestmentPropertiesT2\",\n \"nonCurrentAssetsInvestmentsT2\",\n \"nonCurrentAssetInvestmentSecuritiesT2\",\n \"nonCurrentAssetDeferredAssetsT2\",\n \"nonCurrentAssetDepositsT2\",\n \"nonCurrentAssetOwnGoodwillT2\",\n \"nonCurrentAssetGoodwillOnConsolidationT2\",\n \"nonCurrentAssetSinkingFundT2\",\n \"nonCurrentAssetPropertyPlantEquipmentT2\",\n \"nonCurrentAssetInventoriesT2\",\n \"nonCurrentAssetRightOfUseAssetsT2\",\n \"nonCurrentAssetIntangibleAssetsT2\",\n \"nonCurrentAssetPrepaidLeasePaymentsT2\",\n \"nonCurrentAssetFinancialAssetAtFairValueT2\",\n \"nonCurrentAssetLandUseRightT2\",\n \"nonCurrentAssetTradeReceivablesT2\",\n \"nonCurrentAssetOtherReceivablesT2\",\n \"nonCurrentAssetTradeAndOtherReceivablesT2\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepaymentsT2\",\n \"totalNonCurrentAssetsT2\",\n \"currentAssetDevelopmentPropertiesOrExpenditureT2\",\n \"currentAssetShortTermInvestmentsT2\",\n \"currentAssetTradeDebtorsT2\",\n \"currentAssetShortTermDepositsT2\",\n \"currentAssetAmountDueFromHoldingCompanyT2\",\n \"currentAssetAmountDueFromSubsidiaryCompaniesT2\",\n \"currentAssetAmountDueFromAssociatedCompaniesT2\",\n \"currentAssetAmountDueFromDirectorT2\",\n \"currentAssetAmountDueFromCustomerT2\",\n \"currentAssetAmountOwingByShareholdersT2\",\n \"currentAssetInventoriesT2\",\n \"currentAssetFinancialAssetAtFairValueT2\",\n \"currentAssetLandUseRightT2\",\n \"currentAssetTaxRecoverableT2\",\n \"currentAssetContractAssetsT2\",\n \"currentAssetCurrentTaxAssetsT2\",\n \"currentAssetPrepaymentsT2\",\n \"currentAssetDerivativeT2\",\n \"currentAssetCashAndBankBalancesT2\",\n \"currentAssetOtherReceivablesT2\",\n \"currentAssetRestrictedCashT2\",\n \"currentAssetCashAndCashEquivalentsT2\",\n \"currentAssetDepositsCashAndBankBalancesT2\",\n \"currentAssetCashAtBanksT2\",\n \"currentAssetCashOnHandT2\",\n \"currentAssetDepositsAndPrepaymentsT2\",\n \"currentAssetTradeAndOtherReceivablesT2\",\n \"currentAssetOtherReceivablesDepositsAndPrepaymentsT2\",\n \"currentAssetOtherReceivablesAndDepositsT2\",\n \"currentAssetOtherReceivablesAndPrepaymentsT2\",\n \"currentAssetCashT2\",\n \"totalCurrentAssetsT2\",\n \"totalAssetsT2\",\n \"currentLiabilitiesTradeCreditorsT2\",\n \"currentLiabilitiesHirePurchasePayablesT2\",\n \"currentLiabilitiesBankOverdraftT2\",\n \"currentLiabilitiesBankAcceptanceT2\",\n \"currentLiabilitiesBorrowingsOrTermLoansT2\",\n \"currentLiabilitiesBankborrowingsT2\",\n \"currentLiabilitiesAmountsOwingToHoldingCompanyT2\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompaniesT2\",\n \"currentLiabilitiesAmountOwingToAssociatedCompaniesT2\",\n \"currentLiabilitiesAmountsOwingToDirectorT2\",\n \"currentLiabilitiesProvisionForTaxationT2\",\n \"currentLiabilitiesLeasePayablesT2\",\n \"currentLiabilitiesFinanceLeasePayablesT2\",\n \"currentLiabilitiesOtherPayablesT2\",\n \"currentLiabilitiesDividendPayablesT2\",\n \"currentLiabilitiesTradeAndOtherPayablesT2\",\n \"currentLiabilitiesDepositsFromCustomersT2\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDepositsT2\",\n \"currentLiabilitiesOtherPayablesAndAccrualsT2\",\n \"currentLiabilitiesContractLiabilitiesT2\",\n \"currentLiabilitiesDerivativeT2\",\n \"totalCurrentLiabilitiesT2\",\n \"shortTermLiabilitiesT2\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoansT2\",\n \"nonCurrentLiabilitiesBankBorrowingsT2\",\n \"nonCurrentLiabilitiesLeaseObligationsT2\",\n \"nonCurrentLiabilitiesFinanceLeaseObligationsT2\",\n \"nonCurrentLiabilitiesDeferredTaxationT2\",\n \"nonCurrentLiabilitiesRetirementBenefitsT2\",\n \"nonCurrentLiabilitiesHirePurchasePayablesT2\",\n \"nonCurrentLiabilitiesDepositsFromCustomersT2\",\n \"nonCurrentLiabilitiesContractLiabilitiesT2\",\n \"totalNonCurrentLiabilitiesT2\",\n \"totalLiabilitiesT2\",\n \"tangibleAssetsT2\",\n \"shareCapitalT2\",\n \"preferenceShareCapitalT2\",\n \"sharePremiumT2\",\n \"reservesT2\",\n \"capitalReservesT2\",\n \"revaluationReservesT2\",\n \"exchangeEqualisationOrFluctuationReservesT2\",\n \"retainedEarningsT2\",\n \"totalEquityT2\",\n \"revenueT2\",\n \"costOfGoodsSoldT2\",\n \"grossProfitT2\",\n \"otherIncomeT2\",\n \"profitFromOperationsT2\",\n \"financeCostT2\",\n \"ebitdaT2\",\n \"taxesT2\",\n \"zakatT2\",\n \"profitAfterTaxT2\",\n \"netProfitT2\",\n \"netOperatingCashFlowT2\",\n \"depreciationT2\",\n \"depreciationOfPropertyPlantEquipmentT2\",\n \"depreciationRightOfUseAssetsT2\",\n \"depreciationOfInvestmentPropertiesT2\",\n \"depreciationOfInvestmentSecuritiesT2\",\n \"endOfYearCashT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"financials_fincap_t2\",\n \"displayName\": \"Audited Financial Statement (T-2) (FinCap)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"nonCurrentAssetsSubsidiaryCompaniesT3\",\n \"nonCurrentAssetsAssociatedCompaniesT3\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditureT3\",\n \"nonCurrentAssetInvestmentPropertiesT3\",\n \"nonCurrentAssetsInvestmentsT3\",\n \"nonCurrentAssetInvestmentSecuritiesT3\",\n \"nonCurrentAssetDeferredAssetsT3\",\n \"nonCurrentAssetDepositsT3\",\n \"nonCurrentAssetOwnGoodwillT3\",\n \"nonCurrentAssetGoodwillOnConsolidationT3\",\n \"nonCurrentAssetSinkingFundT3\",\n \"nonCurrentAssetPropertyPlantEquipmentT3\",\n \"nonCurrentAssetInventoriesT3\",\n \"nonCurrentAssetRightOfUseAssetsT3\",\n \"nonCurrentAssetIntangibleAssetsT3\",\n \"nonCurrentAssetPrepaidLeasePaymentsT3\",\n \"nonCurrentAssetFinancialAssetAtFairValueT3\",\n \"nonCurrentAssetLandUseRightT3\",\n \"nonCurrentAssetTradeReceivablesT3\",\n \"nonCurrentAssetOtherReceivablesT3\",\n \"nonCurrentAssetTradeAndOtherReceivablesT3\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepaymentsT3\",\n \"totalNonCurrentAssetsT3\",\n \"currentAssetDevelopmentPropertiesOrExpenditureT3\",\n \"currentAssetShortTermInvestmentsT3\",\n \"currentAssetTradeDebtorsT3\",\n \"currentAssetShortTermDepositsT3\",\n \"currentAssetAmountDueFromHoldingCompanyT3\",\n \"currentAssetAmountDueFromSubsidiaryCompaniesT3\",\n \"currentAssetAmountDueFromAssociatedCompaniesT3\",\n \"currentAssetAmountDueFromDirectorT3\",\n \"currentAssetAmountDueFromCustomerT3\",\n \"currentAssetAmountOwingByShareholdersT3\",\n \"currentAssetInventoriesT3\",\n \"currentAssetFinancialAssetAtFairValueT3\",\n \"currentAssetLandUseRightT3\",\n \"currentAssetTaxRecoverableT3\",\n \"currentAssetContractAssetsT3\",\n \"currentAssetCurrentTaxAssetsT3\",\n \"currentAssetPrepaymentsT3\",\n \"currentAssetDerivativeT3\",\n \"currentAssetCashAndBankBalancesT3\",\n \"currentAssetOtherReceivablesT3\",\n \"currentAssetRestrictedCashT3\",\n \"currentAssetCashAndCashEquivalentsT3\",\n \"currentAssetDepositsCashAndBankBalancesT3\",\n \"currentAssetCashAtBanksT3\",\n \"currentAssetCashOnHandT3\",\n \"currentAssetDepositsAndPrepaymentsT3\",\n \"currentAssetTradeAndOtherReceivablesT3\",\n \"currentAssetOtherReceivablesDepositsAndPrepaymentsT3\",\n \"currentAssetOtherReceivablesAndDepositsT3\",\n \"currentAssetOtherReceivablesAndPrepaymentsT3\",\n \"currentAssetCashT3\",\n \"totalCurrentAssetsT3\",\n \"totalAssetsT3\",\n \"currentLiabilitiesTradeCreditorsT3\",\n \"currentLiabilitiesHirePurchasePayablesT3\",\n \"currentLiabilitiesBankOverdraftT3\",\n \"currentLiabilitiesBankAcceptanceT3\",\n \"currentLiabilitiesBorrowingsOrTermLoansT3\",\n \"currentLiabilitiesBankborrowingsT3\",\n \"currentLiabilitiesAmountsOwingToHoldingCompanyT3\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompaniesT3\",\n \"currentLiabilitiesAmountOwingToAssociatedCompaniesT3\",\n \"currentLiabilitiesAmountsOwingToDirectorT3\",\n \"currentLiabilitiesProvisionForTaxationT3\",\n \"currentLiabilitiesLeasePayablesT3\",\n \"currentLiabilitiesFinanceLeasePayablesT3\",\n \"currentLiabilitiesOtherPayablesT3\",\n \"currentLiabilitiesDividendPayablesT3\",\n \"currentLiabilitiesTradeAndOtherPayablesT3\",\n \"currentLiabilitiesDepositsFromCustomersT3\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDepositsT3\",\n \"currentLiabilitiesOtherPayablesAndAccrualsT3\",\n \"currentLiabilitiesContractLiabilitiesT3\",\n \"currentLiabilitiesDerivativeT3\",\n \"totalCurrentLiabilitiesT3\",\n \"shortTermLiabilitiesT3\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoansT3\",\n \"nonCurrentLiabilitiesBankBorrowingsT3\",\n \"nonCurrentLiabilitiesLeaseObligationsT3\",\n \"nonCurrentLiabilitiesFinanceLeaseObligationsT3\",\n \"nonCurrentLiabilitiesDeferredTaxationT3\",\n \"nonCurrentLiabilitiesRetirementBenefitsT3\",\n \"nonCurrentLiabilitiesHirePurchasePayablesT3\",\n \"nonCurrentLiabilitiesDepositsFromCustomersT3\",\n \"nonCurrentLiabilitiesContractLiabilitiesT3\",\n \"totalNonCurrentLiabilitiesT3\",\n \"totalLiabilitiesT3\",\n \"tangibleAssetsT3\",\n \"shareCapitalT3\",\n \"preferenceShareCapitalT3\",\n \"sharePremiumT3\",\n \"reservesT3\",\n \"capitalReservesT3\",\n \"revaluationReservesT3\",\n \"exchangeEqualisationOrFluctuationReservesT3\",\n \"retainedEarningsT3\",\n \"totalEquityT3\",\n \"revenueT3\",\n \"costOfGoodsSoldT3\",\n \"grossProfitT3\",\n \"otherIncomeT3\",\n \"profitFromOperationsT3\",\n \"financeCostT3\",\n \"ebitdaT3\",\n \"taxesT3\",\n \"zakatT3\",\n \"profitAfterTaxT3\",\n \"netProfitT3\",\n \"netOperatingCashFlowT3\",\n \"depreciationT3\",\n \"depreciationOfPropertyPlantEquipmentT3\",\n \"depreciationRightOfUseAssetsT3\",\n \"depreciationOfInvestmentPropertiesT3\",\n \"depreciationOfInvestmentSecuritiesT3\",\n \"endOfYearCashT3\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"form9\",\n \"displayName\": \"Form 9 / Section 17 / Form D\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"incorporatedDate\",\n \"companyName\",\n \"companyRegNo\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"ssm\",\n \"displayName\": \"SSM Company Profile\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"ssmCompanyName\",\n \"ssmCompanyRegNo\",\n \"ssmIncorporatedDate\",\n \"businessCommencementDate\",\n \"businessNature\",\n \"ssmCompanyEntityType\",\n \"ssmPaidUpCapital\",\n \"companyStatus\",\n \"shareholders\",\n \"directors\",\n \"previousDirectors\",\n \"totalShareIssued\",\n \"companyLastOldName\",\n \"companyNameDateOfChange\",\n \"businessOrigin\",\n \"registeredAddress\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"ic\",\n \"displayName\": \"Identification Card (Front)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"icNumber\",\n \"icName\",\n \"icAddress\",\n \"icGender\",\n \"icReligion\",\n \"icDateOfBirth\",\n \"icPlaceOfBirth\",\n \"icNationality\",\n \"icRace\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"epf_statement_t1\",\n \"displayName\": \"Employees' Provident Fund (T-1)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"epfAccountHolderNameT1\",\n \"epfAccountHolderAddressT1\",\n \"epfStatementYearT1\",\n \"epfKwspMemberNumberT1\",\n \"epfIcNumberT1\",\n \"epfEmployerNumberT1\",\n \"epfDateOfStatementT1\",\n \"epfTotalContributionT1\",\n \"epfTotalCurrentContributionT1\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"epf_statement_t2\",\n \"displayName\": \"Employees' Provident Fund (T-2)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"epfAccountHolderNameT2\",\n \"epfAccountHolderAddressT2\",\n \"epfStatementYearT2\",\n \"epfKwspMemberNumberT2\",\n \"epfIcNumberT2\",\n \"epfEmployerNumberT2\",\n \"epfDateOfStatementT2\",\n \"epfTotalContributionT2\",\n \"epfTotalCurrentContributionT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t1\",\n \"displayName\": \"Payslip Statement (Month T-1)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT1\",\n \"payslipEmployeeNameT1\",\n \"payslipPayPeriodT1\",\n \"payslipPayDateT1\",\n \"payslipGrossPayT1\",\n \"payslipDeductionT1\",\n \"payslipEmployeeEpfContributionT1\",\n \"payslipEmployeeSocsoContributionT1\",\n \"payslipNetPayT1\",\n \"payslipBasicPayT1\",\n \"payslipFixedAllowancesT1\",\n \"payslipVariableIncomeT1\",\n \"payslipEmployeeEisContributionT1\",\n \"payslipEmployeeTaxT1\",\n \"payslipOtherDeductionT1\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t2\",\n \"displayName\": \"Payslip Statement (Month T-2)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT2\",\n \"payslipEmployeeNameT2\",\n \"payslipPayPeriodT2\",\n \"payslipPayDateT2\",\n \"payslipGrossPayT2\",\n \"payslipDeductionT2\",\n \"payslipEmployeeEpfContributionT2\",\n \"payslipEmployeeSocsoContributionT2\",\n \"payslipNetPayT2\",\n \"payslipBasicPayT2\",\n \"payslipFixedAllowancesT2\",\n \"payslipVariableIncomeT2\",\n \"payslipEmployeeEisContributionT2\",\n \"payslipEmployeeTaxT2\",\n \"payslipOtherDeductionT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t3\",\n \"displayName\": \"Payslip Statement (Month T-3)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT3\",\n \"payslipEmployeeNameT3\",\n \"payslipPayPeriodT3\",\n \"payslipPayDateT3\",\n \"payslipGrossPayT3\",\n \"payslipDeductionT3\",\n \"payslipEmployeeEpfContributionT3\",\n \"payslipEmployeeSocsoContributionT3\",\n \"payslipNetPayT3\",\n \"payslipBasicPayT3\",\n \"payslipFixedAllowancesT3\",\n \"payslipVariableIncomeT3\",\n \"payslipEmployeeEisContributionT3\",\n \"payslipEmployeeTaxT3\",\n \"payslipOtherDeductionT3\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t4\",\n \"displayName\": \"Payslip Statement (Month T-4)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT4\",\n \"payslipEmployeeNameT4\",\n \"payslipPayPeriodT4\",\n \"payslipPayDateT4\",\n \"payslipGrossPayT4\",\n \"payslipDeductionT4\",\n \"payslipEmployeeEpfContributionT4\",\n \"payslipEmployeeSocsoContributionT4\",\n \"payslipNetPayT4\",\n \"payslipBasicPayT4\",\n \"payslipFixedAllowancesT4\",\n \"payslipVariableIncomeT4\",\n \"payslipEmployeeEisContributionT4\",\n \"payslipEmployeeTaxT4\",\n \"payslipOtherDeductionT4\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t5\",\n \"displayName\": \"Payslip Statement (Month T-5)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT5\",\n \"payslipEmployeeNameT5\",\n \"payslipPayPeriodT5\",\n \"payslipPayDateT5\",\n \"payslipGrossPayT5\",\n \"payslipDeductionT5\",\n \"payslipEmployeeEpfContributionT5\",\n \"payslipEmployeeSocsoContributionT5\",\n \"payslipNetPayT5\",\n \"payslipBasicPayT5\",\n \"payslipFixedAllowancesT5\",\n \"payslipVariableIncomeT5\",\n \"payslipEmployeeEisContributionT5\",\n \"payslipEmployeeTaxT5\",\n \"payslipOtherDeductionT5\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t6\",\n \"displayName\": \"Payslip Statement (Month T-6)\",\n \"type\": \"file\",\n \"enableIf\": \"{formOfDisclosure} contains 'consented'\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT6\",\n \"payslipEmployeeNameT6\",\n \"payslipPayPeriodT6\",\n \"payslipPayDateT6\",\n \"payslipGrossPayT6\",\n \"payslipDeductionT6\",\n \"payslipEmployeeEpfContributionT6\",\n \"payslipEmployeeSocsoContributionT6\",\n \"payslipNetPayT6\",\n \"payslipBasicPayT6\",\n \"payslipFixedAllowancesT6\",\n \"payslipVariableIncomeT6\",\n \"payslipEmployeeEisContributionT6\",\n \"payslipEmployeeTaxT6\",\n \"payslipOtherDeductionT6\"\n ],\n \"category\": \"13\"\n }\n ]\n}\n","{\n \"version\": 2,\n \"types\": [\n {\n \"displayName\": \"Text\",\n \"name\": \"text\"\n },\n {\n \"displayName\": \"Number\",\n \"name\": \"number\"\n },\n {\n \"displayName\": \"Email\",\n \"name\": \"email\"\n },\n {\n \"displayName\": \"Dropdown\",\n \"name\": \"dropdown\"\n },\n {\n \"displayName\": \"Checkbox\",\n \"name\": \"checkbox\"\n },\n {\n \"displayName\": \"Radio Group\",\n \"name\": \"radiogroup\"\n },\n {\n \"displayName\": \"Boolean\",\n \"name\": \"boolean\"\n },\n {\n \"displayName\": \"File\",\n \"name\": \"file\"\n },\n {\n \"displayName\": \"Slider\",\n \"name\": \"slider\"\n },\n {\n \"displayName\": \"Range\",\n \"name\": \"range\"\n },\n {\n \"displayName\": \"Long Text (Comment)\",\n \"name\": \"comment\"\n },\n {\n \"displayName\": \"HTML Content\",\n \"name\": \"html\"\n }\n ],\n \"input_types\": [\n {\n \"displayName\": \"Text\",\n \"name\": \"text\"\n },\n {\n \"displayName\": \"Number\",\n \"name\": \"number\"\n },\n {\n \"displayName\": \"Email\",\n \"name\": \"email\"\n },\n {\n \"displayName\": \"Tel\",\n \"name\": \"tel\"\n },\n {\n \"displayName\": \"Date\",\n \"name\": \"date\"\n },\n {\n \"displayName\": \"Password\",\n \"name\": \"password\"\n },\n {\n \"displayName\": \"URL\",\n \"name\": \"url\"\n }\n ]\n}\n","{\n \"version\": 1,\n \"options\": [\n {\n \"id\": 1,\n \"displayName\": \"Numeric Validator\",\n \"class\": \"NumericValidator\",\n \"description\": \"Ensures the answer is a number within the specified range of minValue and maxValue.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"numeric\",\n \"text\": \"Value must be within the range of 0 to 100\",\n \"minValue\": 0,\n \"maxValue\": 100\n }\n ]\n },\n {\n \"id\": 2,\n \"displayName\": \"Text Length Validator\",\n \"class\": \"TextValidator\",\n \"description\": \"Confirms the length of entered text is between minLength and maxLength.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"text\",\n \"minLength\": 10,\n \"maxLength\": 280\n }\n ]\n },\n {\n \"id\": 3,\n \"displayName\": \"Regex Validator\",\n \"class\": \"RegexValidator\",\n \"description\": \"Throws an error if an entered value does not match a regular expression defined in the regex property.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"The value must match the required pattern.\",\n \"regex\": \"your-regex-pattern-here\"\n }\n ]\n },\n {\n \"id\": 4,\n \"displayName\": \"Email Validator\",\n \"class\": \"EmailValidator\",\n \"description\": \"Confirms that the entered value is a valid e-mail address.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"email\",\n \"text\": \"Value must be a valid email\"\n }\n ]\n },\n {\n \"id\": 5,\n \"displayName\": \"Expression Validator\",\n \"class\": \"ExpressionValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures that the field's expression always evaluates to true.\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{fields} = true\",\n \"text\": \"The value must be true and cannot be false.\"\n }\n ]\n },\n {\n \"id\": 6,\n \"displayName\": \"Answer Count Validator\",\n \"class\": \"AnswerCountValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures selection of an appropriate number of choices, keeping responses within the minCount and maxCount range.\",\n \"validators\": [\n {\n \"type\": \"answercount\",\n \"minCount\": 2,\n \"maxCount\": 4\n }\n ]\n },\n {\n \"id\": 7,\n \"displayName\": \"Full Name Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures that the entered value is a valid full name.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please make sure the name doesn't include extra spaces, numbers, or invalid symbols\",\n \"regex\": \"^[A-Za-z'-]+(?:\\\\s[A-Za-z'-]+)*\\\\s?[A-Za-z'-]+$\"\n }\n ]\n },\n {\n \"id\": 8,\n \"displayName\": \"Mobile Phone No Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures valid Malaysia phone number is entered.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^(011[0-9]{8}|01[2346789][0-9]{7}|[2-9][0-9]{0,8})$\"\n }\n ]\n },\n {\n \"id\": 9,\n \"displayName\": \"IC Number Total Digits Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures exactly 12 digits are entered for the IC number.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{12}$\",\n \"text\": \"Please enter exactly 12 digits numbers\"\n }\n ]\n },\n {\n \"id\": 10,\n \"displayName\": \"IC Number Valid Birth Year, Month, and Date Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures valid birth year, month, and day are entered for the IC number.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^(\\\\d{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\\\d{6}$\",\n \"text\": \"First 6 digits must be valid birth year (00-99), month (01-12), and day (01-31)\"\n }\n ]\n },\n {\n \"id\": 11,\n \"displayName\": \"Duration in Current Residence (Months) Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures duration includes a number between 0-11.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|10|11)$\",\n \"text\": \"Value must be a number between 0-11.\"\n }\n ]\n },\n {\n \"id\": 12,\n \"displayName\": \"Duration in Current Residence (Years) Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures duration includes a number between 0-99.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|[1-9][0-9])$\",\n \"text\": \"Value must be a number between 0-99.\"\n }\n ]\n },\n {\n \"id\": 13,\n \"displayName\": \"Office Phone No. Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures office phone number is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"The phone number must be a valid Malaysian number\",\n \"regex\": \"^(011[0-9]{8}|(60[4-7]|004|005|006|007|009|609|012|013|014|016|017|019)[0-9]{7})$\"\n }\n ]\n },\n {\n \"id\": 14,\n \"displayName\": \"Age Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures age entered is between 21-55.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number age between 21 and 55.\",\n \"regex\": \"^(2[1-9]|[3-4][0-9]|55)$\"\n }\n ]\n },\n {\n \"id\": 15,\n \"displayName\": \"Consent(s) Expression Validator\",\n \"class\": \"ExpressionValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures that the field's expression always evaluates to true.\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{consentCrossSelling} = true\",\n \"text\": \"You must provide consent to Consent Cross-Selling.\"\n }\n ]\n },\n {\n \"id\": 16,\n \"displayName\": \"Date Joined Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures date joined is in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\",\n \"text\": \"Date must be in YYYY-MM-DD format\"\n }\n ]\n },\n {\n \"id\": 17,\n \"displayName\": \"Date Joined Custom Validator\",\n \"class\": \"CustomValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures date joined is not in the future.\",\n \"validators\": [\n {\n \"type\": \"custom\",\n \"validator\": \"validateNotFutureDate\",\n \"text\": \"Date of joining cannot be in the future\"\n }\n ]\n },\n {\n \"id\": 18,\n \"displayName\": \"Emergency Contact No. Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures emergency contact number is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^((60[4-79]|0[4-79])[0-9]{7}|011[0-9]{8}|01[2346789][0-9]{7})$\"\n }\n ]\n },\n {\n \"id\": 19,\n \"displayName\": \"Monthly Gross Income Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures monthly gross income is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d+(\\\\.\\\\d+)?$\",\n \"text\": \"Please enter a valid non-negative number.\"\n }\n ]\n },\n {\n \"id\": 20,\n \"displayName\": \"Monthly Gross Income Expression Validator\",\n \"class\": \"ExpressionValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures monthly gross income is at least RM 2000.\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{monthlyGrossIncome} >= 2000\",\n \"text\": \"Income must be at least RM 2000.\"\n }\n ]\n },\n {\n \"id\": 21,\n \"displayName\": \"No of Dependants Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures number of dependants is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number between 0 and 99.\",\n \"regex\": \"^[0-9][0-9]?$\"\n }\n ]\n },\n {\n \"id\": 22,\n \"displayName\": \"Financing Tenure (Years) Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures financing tenure is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid financing tenure from 1 to 7 years.\",\n \"regex\": \"^[1-7]$\"\n }\n ]\n },\n {\n \"id\": 23,\n \"displayName\": \"Financing Amount Range Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures financing amount is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a financing amount between 2,000 and 150,000.\",\n \"regex\": \"^(2000|[1-9][0-9]{3}|[1-9][0-9]{4}|150000)$\"\n }\n ]\n },\n {\n \"id\": 24,\n \"displayName\": \"Financing Amount Incrementals Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures financing amount is entered incrementally in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter an amount in increments of 1,000.\",\n \"regex\": \"^([1-9][0-9]*000|150000)$\"\n }\n ]\n }\n ]\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FieldData, Category } from \"./survey-generator.js\";\nimport type { FormFieldTypeDefinitions, EditorValidator } from \"./form-field.js\";\nimport type { FormValidatorDefinitions } from \"./form-field-validator.js\";\nimport FormField from \"./form-field.js\";\nimport baseSpecsData from \"./data/form-field-base-specs.json\" with { type: \"json\" };\nimport typeDefsData from \"./data/form-field-types.json\" with { type: \"json\" };\nimport validatorDefsData from \"./data/form-field-validators.json\" with { type: \"json\" };\n\nexport const BASE_FIELD_SPECS: {\n schemaVersion: string;\n categories: Category[];\n fields: FieldData[];\n} = baseSpecsData as any;\n\nexport const FIELD_TYPE_DEFINITIONS: FormFieldTypeDefinitions = typeDefsData as FormFieldTypeDefinitions;\n\nexport const DEFAULT_VALIDATOR_DEFINITIONS: FormValidatorDefinitions = {\n version: (validatorDefsData as any).version,\n options: (validatorDefsData as any).options as EditorValidator[],\n};\n\nexport function getBaseFieldSpecs(): FieldData[] {\n return BASE_FIELD_SPECS.fields;\n}\n\nexport function getBaseCategories(): Category[] {\n return BASE_FIELD_SPECS.categories;\n}\n\nlet cachedFieldSpecMap: Map<string, FieldData> | null = null;\n\n/**\n * Returns a cached Map of base field name → FieldData.\n * Keyed by each field's `name` property from the base specs.\n */\nexport function getBaseFieldSpecMap(): Map<string, FieldData> {\n if (cachedFieldSpecMap) {\n return cachedFieldSpecMap;\n }\n\n const map = new Map<string, FieldData>();\n for (const field of BASE_FIELD_SPECS.fields) {\n if (field.name) {\n map.set(field.name, field);\n }\n }\n\n cachedFieldSpecMap = map;\n return cachedFieldSpecMap;\n}\n\nlet cachedFieldNames: string[] | null = null;\n\nexport function getBaseFieldNames(): string[] {\n if (cachedFieldNames) {\n return cachedFieldNames;\n }\n\n const fields = BASE_FIELD_SPECS.fields;\n const names: string[] = [];\n\n for (const field of fields) {\n try {\n const formField = FormField.fromObject(field);\n names.push(...formField.getFieldNames());\n } catch {\n // Skip fields that fail to parse\n }\n }\n\n cachedFieldNames = [...new Set(names)];\n return cachedFieldNames;\n}\n","/*\n * IHS data processing types.\n * Used by finsys-client and finhub-adonisjs to render application details.\n */\n\nexport enum IhsValueFormat {\n STRING = 'string',\n CURRENCY = 'currency',\n NUMBER = 'number',\n PERCENTAGE = 'percentage',\n DATE = 'date',\n TABLE = 'table',\n}\n\nexport interface IhsFieldDetail {\n name: string\n displayName: string\n category: string\n value: unknown\n valueFormat: IhsValueFormat\n}\n\nexport interface IhsDetailCategory {\n category: string\n items: { name: string; displayName: string; value: unknown; valueFormat: IhsValueFormat }[]\n}\n\nexport enum FileFieldTableType {\n TIME_SERIES = 'timeSeries',\n KEY_VALUE = 'keyValue',\n}\n\nexport interface FileFieldTableItem {\n displayName: string\n timePeriods: string[]\n data: Record<string, unknown>\n formattedData: Record<string, string>\n type: FileFieldTableType\n isNumeric: boolean\n}\n\nexport interface FileFieldTableData {\n name: string\n displayName: string\n type: FileFieldTableType\n items: FileFieldTableItem[]\n hasData: boolean\n}\n","{\n \"accountHolderName\": \"Account Holder Name\",\n \"statementDate\": \"Statement Date\",\n \"bankName\": \"Bank Name\",\n \"accountNumber\": \"Account Number\",\n \"totalCredits\": \"Total Credits\",\n \"totalDebits\": \"Total Debits\",\n \"openingBalance\": \"Opening Balance\",\n \"bankBalance\": \"Bank Balance\",\n \"nonCurrentAssetsSubsidiaryCompanies\": \"Subsidiary Companies (Non-Current Assets)\",\n \"nonCurrentAssetsAssociatedCompanies\": \"Associated Companies (Non-Current Assets)\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditure\": \"Development Properties/Expenditure (Non-Current Assets)\",\n \"nonCurrentAssetInvestmentProperties\": \"Investment Properties (Non-Current Assets)\",\n \"nonCurrentAssetsInvestments\": \"Investments (Non-Current Assets)\",\n \"nonCurrentAssetInvestmentSecurities\": \"Investment Securities (Non-Current Assets)\",\n \"nonCurrentAssetDeferredAssets\": \"Deferred Assets (Non-Current Assets)\",\n \"nonCurrentAssetDeposits\": \"Deposits (Non-Current Assets)\",\n \"nonCurrentAssetOwnGoodwill\": \"Own Goodwill (Non-Current Assets)\",\n \"nonCurrentAssetGoodwillOnConsolidation\": \"Goodwill on Consolidation (Non-Current Assets)\",\n \"nonCurrentAssetSinkingFund\": \"Sinking Fund (Non-Current Assets)\",\n \"nonCurrentAssetPropertyPlantEquipment\": \"Property, Plant & Equipment (Non-Current Assets)\",\n \"nonCurrentAssetInventories\": \"Inventories (Non-Current Assets)\",\n \"nonCurrentAssetRightOfUseAssets\": \"Right of Use Assets (Non-Current Assets)\",\n \"nonCurrentAssetIntangibleAssets\": \"Intangible Assets (Non-Current Assets)\",\n \"nonCurrentAssetPrepaidLeasePayments\": \"Prepaid Lease Payments (Non-Current Assets)\",\n \"nonCurrentAssetFinancialAssetAtFairValue\": \"Financial Assets at Fair Value (Non-Current Assets)\",\n \"nonCurrentAssetLandUseRight\": \"Land Use Rights (Non-Current Assets)\",\n \"nonCurrentAssetTradeReceivables\": \"Trade Receivables (Non-Current Assets)\",\n \"nonCurrentAssetOtherReceivables\": \"Other Receivables (Non-Current Assets)\",\n \"nonCurrentAssetTradeAndOtherReceivables\": \"Trade and Other Receivables (Non-Current Assets)\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepayments\": \"Other Receivables, Deposits and Prepayments (Non-Current Assets)\",\n \"totalNonCurrentAssets\": \"Total Non-Current Assets\",\n \"currentAssetDevelopmentPropertiesOrExpenditure\": \"Development Properties/Expenditure (Current Assets)\",\n \"currentAssetShortTermInvestments\": \"Short Term Investments (Current Assets)\",\n \"currentAssetTradeDebtors\": \"Trade Debtors (Current Assets)\",\n \"currentAssetShortTermDeposits\": \"Short Term Deposits (Current Assets)\",\n \"currentAssetAmountDueFromHoldingCompany\": \"Amount Due from Holding Company (Current Assets)\",\n \"currentAssetAmountDueFromSubsidiaryCompanies\": \"Amount Due from Subsidiary Companies (Current Assets)\",\n \"currentAssetAmountDueFromAssociatedCompanies\": \"Amount Due from Associated Companies (Current Assets)\",\n \"currentAssetAmountDueFromDirector\": \"Amount Due from Director (Current Assets)\",\n \"currentAssetAmountDueFromCustomer\": \"Amount Due from Customer (Current Assets)\",\n \"currentAssetAmountOwingByShareholders\": \"Amount Owing by Shareholders (Current Assets)\",\n \"currentAssetInventories\": \"Inventories (Current Assets)\",\n \"currentAssetFinancialAssetAtFairValue\": \"Financial Assets at Fair Value (Current Assets)\",\n \"currentAssetLandUseRight\": \"Land Use Rights (Current Assets)\",\n \"currentAssetTaxRecoverable\": \"Tax Recoverable (Current Assets)\",\n \"currentAssetContractAssets\": \"Contract Assets (Current Assets)\",\n \"currentAssetCurrentTaxAssets\": \"Current Tax Assets (Current Assets)\",\n \"currentAssetPrepayments\": \"Prepayments (Current Assets)\",\n \"currentAssetDerivative\": \"Derivatives (Current Assets)\",\n \"currentAssetCashAndBankBalances\": \"Cash and Bank Balances (Current Assets)\",\n \"currentAssetOtherReceivables\": \"Other Receivables (Current Assets)\",\n \"currentAssetRestrictedCash\": \"Restricted Cash (Current Assets)\",\n \"currentAssetCashAndCashEquivalents\": \"Cash and Cash Equivalents (Current Assets)\",\n \"currentAssetDepositsCashAndBankBalances\": \"Deposits, Cash and Bank Balances (Current Assets)\",\n \"currentAssetCashAtBanks\": \"Cash at Banks (Current Assets)\",\n \"currentAssetCashOnHand\": \"Cash on Hand (Current Assets)\",\n \"currentAssetDepositsAndPrepayments\": \"Deposits and Prepayments (Current Assets)\",\n \"currentAssetTradeAndOtherReceivables\": \"Trade and Other Receivables (Current Assets)\",\n \"currentAssetOtherReceivablesDepositsAndPrepayments\": \"Other Receivables, Deposits and Prepayments (Current Assets)\",\n \"currentAssetOtherReceivablesAndDeposits\": \"Other Receivables and Deposits (Current Assets)\",\n \"currentAssetOtherReceivablesAndPrepayments\": \"Other Receivables and Prepayments (Current Assets)\",\n \"currentAssetCash\": \"Cash (Current Assets)\",\n \"totalCurrentAssets\": \"Total Current Assets\",\n \"totalAssets\": \"Total Assets\",\n \"currentLiabilitiesTradeCreditors\": \"Trade Creditors (Current Liabilities)\",\n \"currentLiabilitiesHirePurchasePayables\": \"Hire Purchase Payables (Current Liabilities)\",\n \"currentLiabilitiesBankOverdraft\": \"Bank Overdraft (Current Liabilities)\",\n \"currentLiabilitiesBankAcceptance\": \"Bank Acceptance (Current Liabilities)\",\n \"currentLiabilitiesBorrowingsOrTermLoans\": \"Borrowings/Term Loans (Current Liabilities)\",\n \"currentLiabilitiesBankborrowings\": \"Bank Borrowings (Current Liabilities)\",\n \"currentLiabilitiesAmountsOwingToHoldingCompany\": \"Amounts Owing to Holding Company (Current Liabilities)\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompanies\": \"Amounts Owing to Subsidiary Companies (Current Liabilities)\",\n \"currentLiabilitiesAmountOwingToAssociatedCompanies\": \"Amount Owing to Associated Companies (Current Liabilities)\",\n \"currentLiabilitiesAmountsOwingToDirector\": \"Amounts Owing to Director (Current Liabilities)\",\n \"currentLiabilitiesProvisionForTaxation\": \"Provision for Taxation (Current Liabilities)\",\n \"currentLiabilitiesLeasePayables\": \"Lease Payables (Current Liabilities)\",\n \"currentLiabilitiesFinanceLeasePayables\": \"Finance Lease Payables (Current Liabilities)\",\n \"currentLiabilitiesOtherPayables\": \"Other Payables (Current Liabilities)\",\n \"currentLiabilitiesDividendPayables\": \"Dividend Payables (Current Liabilities)\",\n \"currentLiabilitiesTradeAndOtherPayables\": \"Trade and Other Payables (Current Liabilities)\",\n \"currentLiabilitiesDepositsFromCustomers\": \"Deposits from Customers (Current Liabilities)\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDeposits\": \"Other Payables, Accruals and Deposits (Current Liabilities)\",\n \"currentLiabilitiesOtherPayablesAndAccruals\": \"Other Payables and Accruals (Current Liabilities)\",\n \"currentLiabilitiesContractLiabilities\": \"Contract Liabilities (Current Liabilities)\",\n \"currentLiabilitiesDerivative\": \"Derivative Liabilities (Current Liabilities)\",\n \"totalCurrentLiabilities\": \"Total Current Liabilities\",\n \"shortTermLiabilities\": \"Short Term Liabilities\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoans\": \"Borrowings/Term Loans (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesBankBorrowings\": \"Bank Borrowings (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesLeaseObligations\": \"Lease Obligations (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesFinanceLeaseObligations\": \"Finance Lease Obligations (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesDeferredTaxation\": \"Deferred Taxation (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesRetirementBenefits\": \"Retirement Benefits (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesHirePurchasePayables\": \"Hire Purchase Payables (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesDepositsFromCustomers\": \"Deposits from Customers (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesContractLiabilities\": \"Contract Liabilities (Non-Current Liabilities)\",\n \"totalNonCurrentLiabilities\": \"Total Non-Current Liabilities\",\n \"totalLiabilities\": \"Total Liabilities\",\n \"tangibleAssets\": \"Tangible Assets\",\n \"shareCapital\": \"Share Capital\",\n \"preferenceShareCapital\": \"Preference Share Capital\",\n \"sharePremium\": \"Share Premium\",\n \"reserves\": \"Reserves\",\n \"capitalReserves\": \"Capital Reserves\",\n \"revaluationReserves\": \"Revaluation Reserves\",\n \"exchangeEqualisationOrFluctuationReserves\": \"Exchange Equalisation/Fluctuation Reserves\",\n \"retainedEarnings\": \"Retained Earnings\",\n \"totalEquity\": \"Total Equity\",\n \"revenue\": \"Revenue\",\n \"costOfGoodsSold\": \"Cost of Goods Sold\",\n \"grossProfit\": \"Gross Profit\",\n \"otherIncome\": \"Other Income\",\n \"profitFromOperations\": \"Profit from Operations\",\n \"financeCost\": \"Finance Cost\",\n \"ebitda\": \"Profit Before Tax\",\n \"taxes\": \"Taxes\",\n \"zakat\": \"Zakat\",\n \"profitAfterTax\": \"Profit After Tax\",\n \"netProfit\": \"Net Profit\",\n \"netOperatingCashFlow\": \"Net Operating Cash Flow\",\n \"depreciation\": \"Depreciation\",\n \"depreciationOfPropertyPlantEquipment\": \"Depreciation of Property, Plant & Equipment\",\n \"depreciationRightOfUseAssets\": \"Depreciation of Right of Use Assets\",\n \"depreciationOfInvestmentProperties\": \"Depreciation of Investment Properties\",\n \"depreciationOfInvestmentSecurities\": \"Depreciation of Investment Securities\",\n \"endOfYearCash\": \"End of Year Cash\",\n \"epfAccountHolderName\": \"Account Holder Name\",\n \"epfAccountHolderAddress\": \"Account Holder Address\",\n \"epfStatementYear\": \"Statement Year\",\n \"epfKwspMemberNumber\": \"KWSP Member Number\",\n \"epfIcNumber\": \"IC No.\",\n \"epfEmployerNumber\": \"Employer Number\",\n \"epfDateOfStatement\": \"Date Of Statement\",\n \"epfTotalContribution\": \"Total Contribution\",\n \"epfTotalCurrentContribution\": \"Total Current Contribution\",\n \"payslipEmployerName\": \"Employer Name\",\n \"payslipEmployeeName\": \"Employee Name\",\n \"payslipPayPeriod\": \"Pay Period\",\n \"payslipPayDate\": \"Pay Date\",\n \"payslipGrossPay\": \"Gross Pay\",\n \"payslipDeduction\": \"Deduction\",\n \"payslipEmployeeEpfContribution\": \"Employee EPF Contribution\",\n \"payslipEmployeeSocsoContribution\": \"Employee SOCSO Contribution\",\n \"payslipNetPay\": \"Net Pay\",\n \"incorporatedDate\": \"Incorporated Date\",\n \"companyName\": \"Company Name\",\n \"companyRegNo\": \"Company Registration No.\",\n \"ssmCompanyName\": \"Company Name (SSM)\",\n \"ssmCompanyRegNo\": \"Registration No. (SSM)\",\n \"ssmIncorporatedDate\": \"Incorporated Date (SSM)\",\n \"ssmCompanyEntityType\": \"Entity Type (SSM)\",\n \"ssmPaidUpCapital\": \"Paid-Up Capital (SSM)\",\n \"businessCommencementDate\": \"Business Commencement Date\",\n \"businessNature\": \"Business Nature\",\n \"companyStatus\": \"Company Status\",\n \"shareholders\": \"Shareholders\",\n \"directors\": \"Directors\",\n \"previousDirectors\": \"Previous Directors\",\n \"totalShareIssued\": \"Total Shares Issued\",\n \"companyLastOldName\": \"Previous Company Name\",\n \"companyNameDateOfChange\": \"Company Name Change Date\",\n \"businessOrigin\": \"Business Origin\",\n \"registeredAddress\": \"Registered Address\",\n \"icName\": \"Name (IC)\",\n \"icNumber\": \"IC Number\",\n \"icAddress\": \"Address (IC)\",\n \"icGender\": \"Gender (IC)\",\n \"icReligion\": \"Religion (IC)\",\n \"icDateOfBirth\": \"Date of Birth (IC)\",\n \"icPlaceOfBirth\": \"Place of Birth (IC)\",\n \"icNationality\": \"Nationality (IC)\",\n \"icRace\": \"Race (IC)\"\n}\n","/*\n * IHS data processing functions.\n *\n * Pure data transformations for extracting structured detail and\n * file-field table data from raw IHS API responses. Used by both\n * finsys-client and finhub-adonisjs.\n */\n\nimport type { FieldData } from './survey-generator.js'\nimport {\n IhsValueFormat,\n FileFieldTableType,\n} from './ihs-types.js'\nimport type {\n IhsFieldDetail,\n IhsDetailCategory,\n FileFieldTableData,\n FileFieldTableItem,\n} from './ihs-types.js'\nimport { getBaseFieldSpecs, getBaseCategories, getBaseFieldSpecMap } from './catalogs.js'\nimport displayNamesData from './data/form-field-display-names.json' with { type: 'json' }\n\n// ── Display names ──────────────────────────────────────────────\n\nconst displayNames: Record<string, string> = displayNamesData as Record<string, string>\n\n/** Returns the full display name registry (extraction column → human label). */\nexport function getDisplayNames(): Record<string, string> {\n return displayNames\n}\n\n/** Looks up a display name. Falls back to camelCase → Title Case conversion. */\nexport function getDisplayName(fieldName: string): string {\n if (displayNames[fieldName]) return displayNames[fieldName]\n return fieldName\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (s) => s.toUpperCase())\n .trim()\n}\n\n// ── Time-period utilities ──────────────────────────────────────\n\nconst TIME_PERIOD_REGEX = /T(\\d+)$/\n\nexport function extractTimePeriods(columnNames: string[]): string[] {\n const periods = new Set<string>()\n for (const col of columnNames) {\n const match = TIME_PERIOD_REGEX.exec(col)\n if (match) periods.add(`T${match[1]}`)\n }\n return [...periods].sort((a, b) => {\n const numA = parseInt(a.slice(1), 10)\n const numB = parseInt(b.slice(1), 10)\n return numA - numB\n })\n}\n\nexport function groupColumnsByTimePeriod(\n columnNames: string[]\n): Record<string, Record<string, string>> {\n const groups: Record<string, Record<string, string>> = {}\n for (const col of columnNames) {\n const match = /^(.+?)(T\\d+)$/.exec(col)\n if (!match) continue\n const [, baseName, period] = match\n if (!groups[baseName]) groups[baseName] = {}\n groups[baseName][period] = col\n }\n return groups\n}\n\n// ── Field grouping ─────────────────────────────────────────────\n\nconst FIELD_GROUP_PREFIXES: [string, string][] = [\n ['bank_statement', 'bank_statements'],\n ['financials', 'financials'],\n ['epf_statement', 'epf_statements'],\n ['payslip_statement', 'payslip_statements'],\n ['ssm', 'ssm_documents'],\n ['form9', 'form9'],\n ['ic', 'ic_documents'],\n]\n\nexport function groupFieldsByPattern(fields: FieldData[]): Record<string, FieldData[]> {\n const groups: Record<string, FieldData[]> = {}\n for (const field of fields) {\n if (!field.name) continue\n let groupName = field.name\n for (const [prefix, group] of FIELD_GROUP_PREFIXES) {\n if (field.name.startsWith(prefix)) {\n groupName = group\n break\n }\n }\n if (!groups[groupName]) groups[groupName] = []\n groups[groupName].push(field)\n }\n return groups\n}\n\n/** Human-friendly display names for field groups (when a group combines multiple fields). */\nconst GROUP_DISPLAY_NAMES: Record<string, string> = {\n bank_statements: 'Bank Statements',\n financials: 'Audited Financial Statements',\n epf_statements: 'EPF Statements',\n payslip_statements: 'Payslip Statements',\n form9: 'Form 9 / Section 17 / Form D',\n ssm_documents: 'SSM Company Information',\n ic_documents: 'Identification Card',\n}\n\n/** Returns human-friendly display names for field groups. */\nexport function getGroupDisplayNames(): Record<string, string> {\n return GROUP_DISPLAY_NAMES\n}\n\n// ── File-field table building ──────────────────────────────────\n\nfunction isNumericField(fieldName: string): boolean {\n const patterns = [\n 'balance',\n 'amount',\n 'credit',\n 'debit',\n 'total',\n 'revenue',\n 'cost',\n 'income',\n 'expense',\n 'liability',\n 'asset',\n 'equity',\n 'profit',\n 'loss',\n 'cash',\n 'tax',\n 'interest',\n ]\n const lower = fieldName.toLowerCase()\n return patterns.some((p) => lower.includes(p))\n}\n\nfunction formatValue(value: unknown, numeric: boolean): string {\n if (value === null || value === undefined || value === '') return '-'\n if (numeric) {\n const num = Number(value)\n if (!isNaN(num))\n return num.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })\n }\n return String(value)\n}\n\nfunction buildTableForGroup(\n groupName: string,\n fields: FieldData[],\n ihsData: Record<string, unknown>\n): FileFieldTableData | null {\n const allColumns: string[] = []\n for (const field of fields) {\n if (field.ihs_column_names) {\n allColumns.push(...field.ihs_column_names)\n }\n }\n if (allColumns.length === 0) return null\n\n const periods = extractTimePeriods(allColumns)\n const isTimeSeries = periods.length > 0\n const tableType = isTimeSeries ? FileFieldTableType.TIME_SERIES : FileFieldTableType.KEY_VALUE\n const groupDisplayName =\n GROUP_DISPLAY_NAMES[groupName] || fields[0]?.displayName || getDisplayName(groupName)\n\n if (isTimeSeries) {\n const columnGroups = groupColumnsByTimePeriod(allColumns)\n const items: FileFieldTableItem[] = []\n\n for (const [baseName, periodMap] of Object.entries(columnGroups)) {\n const numeric = isNumericField(baseName)\n const data: Record<string, unknown> = {}\n const formattedData: Record<string, string> = {}\n\n for (const period of periods) {\n const colName = periodMap[period]\n const value = colName ? (ihsData[colName] ?? null) : null\n data[period] = value\n formattedData[period] = formatValue(value, numeric)\n }\n\n items.push({\n displayName: getDisplayName(baseName),\n timePeriods: periods,\n data,\n formattedData,\n type: tableType,\n isNumeric: numeric,\n })\n }\n\n const hasData = items.some((item) =>\n Object.values(item.data).some((v) => v !== null && v !== undefined && v !== '')\n )\n return { name: groupName, displayName: groupDisplayName, type: tableType, items, hasData }\n } else {\n const items: FileFieldTableItem[] = []\n for (const colName of allColumns) {\n const value = ihsData[colName] ?? null\n const numeric = isNumericField(colName)\n items.push({\n displayName: getDisplayName(colName),\n timePeriods: [],\n data: { value },\n formattedData: { value: formatValue(value, numeric) },\n type: tableType,\n isNumeric: numeric,\n })\n }\n const hasData = items.some((item) => {\n const v = item.data['value']\n return v !== null && v !== undefined && v !== ''\n })\n return { name: groupName, displayName: groupDisplayName, type: tableType, items, hasData }\n }\n}\n\nexport function buildFileFieldTables(\n ihsData: Record<string, unknown>\n): Record<string, FileFieldTableData> {\n const specs = getBaseFieldSpecs()\n const fileFields = specs.filter((f) => f.type === 'file' && f.ihs_column_names?.length)\n const grouped = groupFieldsByPattern(fileFields)\n\n const tables: Record<string, FileFieldTableData> = {}\n for (const [groupName, fields] of Object.entries(grouped)) {\n const table = buildTableForGroup(groupName, fields, ihsData)\n if (table && table.hasData) {\n tables[groupName] = table\n }\n }\n return tables\n}\n\n// ── IHS detail processing ──────────────────────────────────────\n\nfunction isFileOrFinancialColumn(fieldName: string, fileColumnSet: Set<string>): boolean {\n return (\n fileColumnSet.has(fieldName) ||\n fieldName.startsWith('financials') ||\n fieldName.startsWith('bank_statement')\n )\n}\n\n\nfunction inferValueFormat(fieldName: string, value: unknown): IhsValueFormat {\n const currencyFields = new Set([\n 'totalFinancing',\n 'monthlyGrossIncome',\n 'approvedAmount',\n 'monthlyInstallment',\n ])\n if (currencyFields.has(fieldName)) return IhsValueFormat.CURRENCY\n\n const numberFields = new Set([\n 'age',\n 'noOfDependants',\n 'financingTenure',\n 'ihsId',\n 'programId',\n 'borrowerAgentId',\n ])\n if (numberFields.has(fieldName)) return IhsValueFormat.NUMBER\n\n const tableFields = new Set(['shareholders', 'directors', 'previousDirectors'])\n if (tableFields.has(fieldName)) return IhsValueFormat.TABLE\n\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value)) return IhsValueFormat.DATE\n\n return IhsValueFormat.STRING\n}\n\nconst EXCLUDED_FIELDS = new Set([\n 'updatedAt',\n 'programIds',\n 'borrowerAgentId',\n 'programId',\n '__v',\n '_id',\n 'id',\n])\n\nexport function processIhsDetails(ihsData: Record<string, unknown>): IhsFieldDetail[] {\n const specs = getBaseFieldSpecs()\n const fileColumnSet = new Set<string>()\n for (const field of specs) {\n if (field.type === 'file') {\n if (field.name) fileColumnSet.add(field.name)\n if (field.ihs_column_names) {\n for (const col of field.ihs_column_names) {\n fileColumnSet.add(col)\n }\n }\n }\n }\n\n const specMap = getBaseFieldSpecMap()\n const categories = getBaseCategories()\n const categoryNameMap: Record<string, string> = {}\n for (const cat of categories) {\n categoryNameMap[String(cat.id)] = cat.name\n }\n\n const details: IhsFieldDetail[] = []\n\n for (const [key, value] of Object.entries(ihsData)) {\n if (value === null || value === undefined || value === '' || value === 'Not Specified') continue\n if (value === false) continue\n if (EXCLUDED_FIELDS.has(key)) continue\n if (isFileOrFinancialColumn(key, fileColumnSet)) continue\n\n const spec = specMap.get(key)\n const categoryId = spec?.category ? String(spec.category) : '0'\n const category = categoryNameMap[categoryId] || 'General'\n\n details.push({\n name: key,\n displayName: getDisplayName(key),\n category,\n value,\n valueFormat: inferValueFormat(key, value),\n })\n }\n\n return details\n}\n\nexport function groupDetailsByCategory(details: IhsFieldDetail[]): IhsDetailCategory[] {\n const groups: Record<string, IhsFieldDetail[]> = {}\n for (const detail of details) {\n if (!groups[detail.category]) groups[detail.category] = []\n groups[detail.category].push(detail)\n }\n\n return Object.entries(groups)\n .filter(([cat]) => cat !== 'Default Category' && cat !== 'General')\n .map(([category, items]) => ({\n category,\n items: items.map((d) => ({\n name: d.name,\n displayName: d.displayName,\n value: d.value,\n valueFormat: d.valueFormat,\n })),\n }))\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Program access roles — shared across finsys-api and finhub-adonisjs.\n * Values must match the database enum column in the `programaccess` table.\n */\nexport enum Role {\n ADMIN = 'Admin',\n BORROWER_AGENT = 'Borrower Agent',\n LENDER_AGENT = 'Lender Agent',\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Status of a document extraction job.\n * Used by finsys-api (writes) and finhub/finsys-client (reads/displays).\n */\nexport enum ExtractionJobStatus {\n Queued = 'queued',\n Processing = 'processing',\n Succeeded = 'succeeded',\n Failed = 'failed',\n}\n\n/**\n * Document types that go through FinXtract extraction.\n * Values must match the `type` field on finsys-api File entity\n * and the config keys in finXtractApi.api.\n */\nexport enum ExtractionFileType {\n FinancialStatement = 'financialStatements',\n BankStatement = 'bankStatements',\n Epf = 'epfStatements',\n Payslip = 'payslips',\n Ssm = 'ssm',\n Form9 = 'form9',\n Ic = 'ic',\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * IHS application status — canonical source of truth, mirroring finsys-api's\n * `IHS_STATUS` enum and `allowedIhsStatus` list in src/utils/appHelper.ts.\n *\n * finsys-api originates these values (it writes them to the `ihs.status`\n * column). Consumer apps (finhub-adonisjs, finsys-client) read them off the\n * wire and use them for validation and display.\n *\n * Lender rejection is not represented by a distinct status: when a lender\n * rejects an application, finsys-api transitions the record back to\n * `APPLICATION_FINALIZED` from `LENDER_EVALUATION`.\n */\nexport enum IhsStatus {\n CreatingApplication = 'CREATING_APPLICATION',\n ApplicationFinalized = 'APPLICATION_FINALIZED',\n LenderEvaluation = 'LENDER_EVALUATION',\n Approved = 'APPROVED',\n LouDelivered = 'LOU_DELIVERED',\n AwaitingDisbursement = 'AWAITING_DISBURSEMENT',\n Disbursement = 'DISBURSEMENT',\n Declined = 'DECLINED',\n Expired = 'EXPIRED',\n Canceled = 'CANCELED',\n}\n\n/**\n * All valid IHS status values, in display order (earliest lifecycle stage\n * first, terminal states last).\n */\nexport const IHS_VALID_STATUSES: readonly IhsStatus[] = [\n IhsStatus.CreatingApplication,\n IhsStatus.ApplicationFinalized,\n IhsStatus.LenderEvaluation,\n IhsStatus.Approved,\n IhsStatus.LouDelivered,\n IhsStatus.AwaitingDisbursement,\n IhsStatus.Disbursement,\n IhsStatus.Declined,\n IhsStatus.Expired,\n IhsStatus.Canceled,\n] as const\n\n/**\n * Terminal statuses — the application lifecycle has completed and no further\n * transitions are expected. Useful for suppressing action UI (e.g. re-extract,\n * status update controls) on the application detail view.\n */\nexport const IHS_TERMINAL_STATUSES: readonly IhsStatus[] = [\n IhsStatus.Disbursement,\n IhsStatus.Declined,\n IhsStatus.Expired,\n IhsStatus.Canceled,\n] as const\n\n/**\n * Failure statuses — a subset of terminal statuses that represent an\n * unsuccessful outcome. Useful for badge colour / messaging.\n */\nexport const IHS_FAILURE_STATUSES: readonly IhsStatus[] = [\n IhsStatus.Declined,\n IhsStatus.Expired,\n IhsStatus.Canceled,\n] as const\n\n/**\n * Type guard: narrows an unknown value to `IhsStatus` iff it is one of the\n * canonical status strings.\n */\nexport function isValidIhsStatus(status: unknown): status is IhsStatus {\n return (\n typeof status === 'string' &&\n (IHS_VALID_STATUSES as readonly string[]).includes(status)\n )\n}\n\n/**\n * Type guard: terminal (no further transitions expected).\n */\nexport function isTerminalIhsStatus(status: unknown): status is IhsStatus {\n return (\n typeof status === 'string' &&\n (IHS_TERMINAL_STATUSES as readonly string[]).includes(status)\n )\n}\n\n/**\n * Type guard: terminal and unsuccessful.\n */\nexport function isFailureIhsStatus(status: unknown): status is IhsStatus {\n return (\n typeof status === 'string' &&\n (IHS_FAILURE_STATUSES as readonly string[]).includes(status)\n )\n}\n","/*\n * Extraction status resolution.\n *\n * Determines per-document extraction status from IHS record data\n * and optional extraction job records. Pure synchronous function —\n * no HTTP, no async, trivially testable.\n *\n * For multi-file document types (bank statements, financial statements,\n * EPF, payslips), produces one result per time period (T1, T2, …).\n * For single-file types (SSM, Form 9, IC), produces one result.\n */\n\nimport { ExtractionFileType, ExtractionJobStatus } from './extraction.js'\nimport { getBaseFieldSpecs } from './catalogs.js'\nimport { getGroupDisplayNames, groupFieldsByPattern } from './ihs-processing.js'\nimport type { FieldData } from './survey-generator.js'\n\n// ── Types ──────────────────────────────────────────────────\n\nexport enum DocExtractionStatus {\n NotUploaded = 'not_uploaded',\n Uploaded = 'uploaded',\n Queued = 'queued',\n Processing = 'processing',\n Extracted = 'extracted',\n Failed = 'failed',\n Unknown = 'unknown',\n}\n\nexport interface ExtractionJobRecord {\n fileType: string\n status: string\n errorMessage?: string | null\n}\n\nexport interface DocExtractionResult {\n fileType: ExtractionFileType\n status: DocExtractionStatus\n displayName: string\n populatedColumns: string[]\n totalColumns: number\n errorMessage?: string | null\n}\n\nexport interface ExtractionStatusResult {\n documents: DocExtractionResult[]\n summary: {\n total: number\n extracted: number\n failed: number\n pending: number\n notUploaded: number\n }\n}\n\n// ── Map ExtractionFileType to field group names used by groupFieldsByPattern ──\n\nconst FILE_TYPE_TO_GROUP: Record<ExtractionFileType, string> = {\n [ExtractionFileType.BankStatement]: 'bank_statements',\n [ExtractionFileType.FinancialStatement]: 'financials',\n [ExtractionFileType.Epf]: 'epf_statements',\n [ExtractionFileType.Payslip]: 'payslip_statements',\n [ExtractionFileType.Ssm]: 'ssm_documents',\n [ExtractionFileType.Form9]: 'form9',\n [ExtractionFileType.Ic]: 'ic_documents',\n}\n\n// ── Static field metadata (derived once at module load) ────\n\nconst _specs = getBaseFieldSpecs()\nconst _fileFields = _specs.filter((f) => f.type === 'file' && f.ihs_column_names?.length)\nconst _grouped = groupFieldsByPattern(_fileFields)\nconst _groupDisplayNames = getGroupDisplayNames()\n\n// ── Helpers ────────────────────────────────────────────────\n\nfunction isPopulated(value: unknown): boolean {\n if (value === null || value === undefined || value === '') return false\n if (value === 'Not Specified') return false\n return true\n}\n\nfunction countUploadedFiles(ihsRecord: Record<string, unknown>, aggregateKey: string): number {\n const raw = ihsRecord[aggregateKey]\n if (!raw) return 0\n\n // JSON array string (multi-file types like bankStatements)\n if (typeof raw === 'string') {\n try {\n const parsed = JSON.parse(raw)\n if (Array.isArray(parsed)) return parsed.length\n } catch {\n // Plain URL string (single-file type) — count as 1\n return 1\n }\n }\n\n if (Array.isArray(raw)) return raw.length\n\n // Single object or URL string\n return 1\n}\n\nfunction hasUploadedFile(\n fields: FieldData[],\n ihsRecord: Record<string, unknown>,\n aggregateKey: string\n): boolean {\n if (countUploadedFiles(ihsRecord, aggregateKey) > 0) return true\n\n // Fall back to individual field names for single-file types (ssm, form9, ic)\n return fields.some((field) => {\n if (!field.name) return false\n return isPopulated(ihsRecord[field.name])\n })\n}\n\nfunction getPopulatedColumns(\n columns: string[],\n ihsRecord: Record<string, unknown>\n): string[] {\n return columns.filter((col) => isPopulated(ihsRecord[col]))\n}\n\n/**\n * Resolve status for a single document (one field / one time period).\n */\nfunction resolveDocStatus(\n columns: string[],\n ihsRecord: Record<string, unknown>,\n uploaded: boolean,\n jobRecord: ExtractionJobRecord | undefined,\n hasJobRecords: boolean\n): { status: DocExtractionStatus; errorMessage?: string | null } {\n const populated = getPopulatedColumns(columns, ihsRecord)\n const hasExtractedData = populated.length > 0\n\n let status: DocExtractionStatus\n let errorMessage: string | null | undefined\n\n if (!uploaded) {\n status = DocExtractionStatus.NotUploaded\n } else if (hasJobRecords) {\n if (jobRecord) {\n if (jobRecord.status === ExtractionJobStatus.Queued) {\n status = DocExtractionStatus.Queued\n } else if (jobRecord.status === ExtractionJobStatus.Processing) {\n status = DocExtractionStatus.Processing\n } else if (jobRecord.status === ExtractionJobStatus.Failed) {\n if (hasExtractedData) {\n status = DocExtractionStatus.Extracted\n errorMessage = jobRecord.errorMessage\n } else {\n status = DocExtractionStatus.Failed\n errorMessage = jobRecord.errorMessage\n }\n } else if (jobRecord.status === ExtractionJobStatus.Succeeded || hasExtractedData) {\n status = DocExtractionStatus.Extracted\n } else {\n status = DocExtractionStatus.Uploaded\n }\n } else if (hasExtractedData) {\n status = DocExtractionStatus.Extracted\n } else {\n status = DocExtractionStatus.Uploaded\n }\n } else if (hasExtractedData) {\n status = DocExtractionStatus.Extracted\n } else {\n status = DocExtractionStatus.Unknown\n }\n\n return { status, errorMessage }\n}\n\n// ── Main function ──────────────────────────────────────────\n\n/**\n * Determines per-document extraction status from IHS record data.\n *\n * For multi-file document types (bank statements, financial statements, EPF,\n * payslips) the result contains one entry per uploaded file, indexed in the\n * same order as the files appear in the IHS record's aggregate array.\n * For single-file types (SSM, Form 9, IC) there is one entry.\n *\n * @param ihsRecord - The IHS application record (any shape satisfying Record<string, unknown>)\n * @param jobRecords - Extraction job records for this IHS. Pass the array (even if empty)\n * when job records were fetched. Omit or pass undefined when job records are unavailable;\n * this produces `Unknown` status for uploaded-but-unextracted documents rather than `Uploaded`.\n */\nexport function resolveExtractionStatus(\n ihsRecord: Record<string, unknown>,\n jobRecords?: ExtractionJobRecord[]\n): ExtractionStatusResult {\n const documents: DocExtractionResult[] = []\n const hasJobRecords = jobRecords !== undefined\n\n for (const fileType of Object.values(ExtractionFileType)) {\n const groupName = FILE_TYPE_TO_GROUP[fileType]\n const fields = _grouped[groupName] ?? []\n const displayName = _groupDisplayNames[groupName] ?? fileType\n\n const uploadedCount = countUploadedFiles(ihsRecord, fileType)\n const isUploaded = uploadedCount > 0 || fields.some((f) => f.name && isPopulated(ihsRecord[f.name]))\n\n // For multi-file types, match job records by fileType (there can be multiple)\n const matchingJobs = jobRecords?.filter((j) => j.fileType === fileType) ?? []\n\n if (fields.length <= 1) {\n // Single-file type (ssm, form9, ic): one result\n const field = fields[0]\n const columns = field?.ihs_column_names ?? []\n const populated = getPopulatedColumns(columns, ihsRecord)\n const { status, errorMessage } = resolveDocStatus(\n columns, ihsRecord, isUploaded, matchingJobs[0], hasJobRecords\n )\n\n documents.push({\n fileType,\n status,\n displayName,\n populatedColumns: populated,\n totalColumns: columns.length,\n errorMessage,\n })\n } else {\n // Multi-file type (bank statements T1-T6, etc.): one result per uploaded file.\n // Fields are sorted by name (bank_statement_t1, t2, …) so idx aligns with\n // the file array order in the IHS record.\n const count = Math.max(uploadedCount, 1)\n for (let idx = 0; idx < count; idx++) {\n const field = fields[idx]\n const columns = field?.ihs_column_names ?? []\n const populated = getPopulatedColumns(columns, ihsRecord)\n const fileUploaded = idx < uploadedCount\n const { status, errorMessage } = resolveDocStatus(\n columns, ihsRecord, fileUploaded, matchingJobs[idx], hasJobRecords\n )\n\n documents.push({\n fileType,\n status,\n displayName,\n populatedColumns: populated,\n totalColumns: columns.length,\n errorMessage,\n })\n }\n }\n }\n\n const summary = documents.reduce(\n (acc, d) => {\n if (d.status === DocExtractionStatus.Extracted) acc.extracted++\n else if (d.status === DocExtractionStatus.Failed) acc.failed++\n else if (d.status === DocExtractionStatus.NotUploaded) acc.notUploaded++\n else acc.pending++\n return acc\n },\n { total: documents.length, extracted: 0, failed: 0, pending: 0, notUploaded: 0 }\n )\n\n return { documents, summary }\n}\n"],"mappings":"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ACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,U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T;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QAC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,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA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AA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,cAAgB;AAAA,MAChB,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;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AAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,M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QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB;AAAA,QACA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","names":["AjvModule","addFormats","FieldType","semver","IhsValueFormat","FileFieldTableType","Role","ExtractionJobStatus","ExtractionFileType","IhsStatus","DocExtractionStatus"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/survey-generator.ts","../src/rhf-generator.ts","../src/validator.ts","../src/schema/unified-form.schema.json","../src/form-field-category.ts","../src/form-field.ts","../src/form-spec.ts","../src/form-field-validator.ts","../src/data/form-field-base-specs.json","../src/data/form-field-types.json","../src/data/form-field-validators.json","../src/catalogs.ts","../src/ihs-types.ts","../src/data/form-field-display-names.json","../src/ihs-processing.ts","../src/roles.ts","../src/extraction.ts","../src/ihs-status.ts","../src/extraction-status.ts","../src/adapter.ts","../src/adapter-aggregation.ts","../src/data/adapter-categories.json","../src/adapter-categories.ts"],"sourcesContent":["/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @finsys/core\n * Convert unified form configurations into Zod schemas, React Hook Form defaults, and SurveyJS JSON\n */\n\n// Functions\nexport {\n generateSurveyJson,\n resolvePageFields,\n getCategoryName,\n groupFieldsByCategory,\n applyDynamicTitles\n} from \"./survey-generator.js\";\n\nexport { getPastMonthLabel, getPastYearLabel, evaluateExpression } from \"./utils.js\";\n\nexport { \n generateRHFSchema,\n getStepSchema,\n getStepDefaultValues\n} from \"./rhf-generator.js\";\n\nexport { validateFormConfig, validateFormSpec, validatePagesConfig } from \"./validator.js\";\n\n// Unified Form Config types\nexport type {\n Category,\n Choice,\n Validator,\n FieldData,\n FieldReference,\n PageConfig,\n UnifiedFormConfig,\n ResolvedField,\n FieldGroup,\n} from \"./survey-generator.js\";\n\n// Output types (SurveyJS JSON compatible)\nexport type { SurveyElementJSON, SurveyPageJSON, SurveyJSON } from \"./survey-generator.js\";\n\n// RHF Generator types\nexport type { RHFStep, RHFSchemaOutput } from \"./rhf-generator.js\";\n\n// Re-export survey-core types for convenience\nexport type { IQuestion, IPage, ISurvey, IPanel, IElement } from \"./survey-generator.js\";\n\n// Form domain classes\nexport { FormSpec } from \"./form-spec.js\";\nexport { default as FormField, BasicFormField, FileFormField, FieldType } from \"./form-field.js\";\nexport type { FormFieldType, FormFieldInputType, FormFieldTypeDefinitions, DropdownOption, EditorValidator } from \"./form-field.js\";\nexport { FormFieldCategory } from \"./form-field-category.js\";\nexport { FormFieldValidator } from \"./form-field-validator.js\";\nexport type { FormValidatorDefinitions } from \"./form-field-validator.js\";\n\n// Catalogs\nexport {\n BASE_FIELD_SPECS,\n DEFAULT_VALIDATOR_DEFINITIONS,\n FIELD_TYPE_DEFINITIONS,\n getBaseFieldSpecs,\n getBaseCategories,\n getBaseFieldNames,\n getBaseFieldSpecMap,\n} from \"./catalogs.js\";\n\n// IHS data processing\nexport {\n getDisplayNames,\n getDisplayName,\n getGroupDisplayNames,\n extractTimePeriods,\n groupColumnsByTimePeriod,\n groupFieldsByPattern,\n buildFileFieldTables,\n processIhsDetails,\n groupDetailsByCategory,\n} from './ihs-processing.js'\n\nexport { IhsValueFormat, FileFieldTableType } from './ihs-types.js'\n\n// Roles\nexport { Role } from './roles.js'\n\n// Extraction\nexport { ExtractionJobStatus, ExtractionFileType } from './extraction.js'\n\n// IHS status (canonical enum, mirrors finsys-api)\nexport {\n IhsStatus,\n IHS_VALID_STATUSES,\n IHS_TERMINAL_STATUSES,\n IHS_FAILURE_STATUSES,\n isValidIhsStatus,\n isTerminalIhsStatus,\n isFailureIhsStatus,\n} from './ihs-status.js'\n\n// Extraction status\nexport {\n resolveExtractionStatus,\n DocExtractionStatus,\n} from './extraction-status.js'\n\nexport type {\n ExtractionJobRecord,\n DocExtractionResult,\n ExtractionStatusResult,\n} from './extraction-status.js'\n\nexport type {\n IhsFieldDetail,\n IhsDetailCategory,\n FileFieldTableData,\n FileFieldTableItem,\n} from './ihs-types.js'\n\n// ── Source Adapter framework (SYS-2440) ──────────────────────────────\n// The contract for ingesting unstructured / partner-specific data\n// sources and producing canonical credit signals. Vendor-specific\n// adapter implementations live OUTSIDE this open-source package, in\n// private extension directories loaded by the host app at runtime.\n// finsys-core publishes the contract + the category catalogue.\n\nexport type {\n RawPayload,\n CanonicalFieldValue,\n CanonicalFieldValues,\n AdapterExtraction,\n SourceAdapter,\n AdapterErrorReason,\n} from './adapter.js'\n\nexport { AdapterError } from './adapter.js'\n\nexport type { AggregationOp, InstanceValue } from './adapter-aggregation.js'\nexport { applyAggregation, ALL_AGGREGATION_OPS } from './adapter-aggregation.js'\n\nexport type {\n AdapterCategory,\n CanonicalFieldName,\n CanonicalFieldSpec,\n CategorySchema,\n} from './adapter-categories.js'\n\nexport {\n categorySchemaOf,\n categoryFieldsOf,\n allCategories,\n categoryForField,\n} from './adapter-categories.js'\n\nexport type {\n AdapterManifest,\n DeclarativeImplementation,\n TypescriptImplementation,\n FieldMapEntry,\n} from './adapter-manifest.js'\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Utility functions for @finsys/core\n */\n\nexport function getPastMonthLabel(monthsAgo: number): string {\n const date = new Date();\n date.setDate(1); // Avoid day-of-month rollover (e.g. Mar 31 → \"February\" would roll to March)\n date.setMonth(date.getMonth() - monthsAgo);\n return date.toLocaleString('default', { month: 'long' });\n}\n\nexport function getPastYearLabel(yearsAgo: number): string {\n const date = new Date();\n return (date.getFullYear() - yearsAgo).toString();\n}\n\n/**\n * Evaluate a SurveyJS-style expression against a data object.\n * e.g. \"{totalFinancing} > 50000\"\n * \n * NOTE: This is a simplified evaluator that replaces {key} with data[key] access.\n * It does not support complex SurveyJS functions like age() or complicated nested paths unless handled by JS.\n */\nexport function evaluateExpression(expression: string, data: any): boolean {\n if (!expression) return true;\n \n try {\n // 1. Replace {variable} with this['variable'] safely\n let jsExpression = expression.replace(/\\{([^}]+)\\}/g, (_, key) => {\n // Clean key if needed (trim)\n return `this['${key.trim()}']`;\n });\n\n // 2. Map SurveyJS comparison operators to JS operators FIRST\n // (before array operator transforms inject JS code containing '=' assignments)\n // Replace single '=' with '==' if it's not already '==' or '!=' or '>=' or '<='\n jsExpression = jsExpression.replace(/(?<![<>!=])=(?![=])/g, '==');\n\n // 3. Map SurveyJS array operators to JS equivalents\n // These run AFTER the '=' transform so their generated JS won't be mangled.\n\n // \"anyof\" → value is one of the items in the array\n // e.g. this['employmentType'] anyof ['01','08','09']\n // → (['01','08','09']).includes(this['employmentType'])\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+anyof\\s+(\\[[^\\]]+\\])/gi,\n (_, ref, arr) => `(${arr}).includes(${ref})`\n );\n\n // \"allof\" → value (expected to be an array) contains all items\n // e.g. this['skills'] allof ['a','b']\n // → ['a','b'].every(item => (this['skills'] || []).includes(item))\n // Arrow functions inherit `this` from enclosing scope (the new Function call),\n // so this works correctly with Function.call(data).\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+allof\\s+(\\[[^\\]]+\\])/gi,\n (_, ref, arr) => `${arr}.every(item => (${ref} || []).includes(item))`\n );\n\n // \"contains\" → string/array contains value\n // e.g. this['roles'] contains 'admin'\n // Uses || [] fallback to handle both string and array values correctly.\n // (|| '' would stringify arrays causing false positives)\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+contains\\s+'([^']+)'/gi,\n (_, ref, val) => `(${ref} || []).includes('${val}')`\n );\n\n // \"notcontains\" → string/array does not contain value\n jsExpression = jsExpression.replace(\n /(this\\['[^']+'\\])\\s+notcontains\\s+'([^']+)'/gi,\n (_, ref, val) => `!(${ref} || []).includes('${val}')`\n );\n\n // 4. Execute with Function, binding 'data' as 'this'\n const func = new Function(`return ${jsExpression};`);\n return !!func.call(data || {});\n } catch (e) {\n // console.warn(`Failed to evaluate expression: \"${expression}\"`, e);\n return false;\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Survey Generator - Converts unified form configurations into SurveyJS-compatible JSON\n *\n * This module converts a unified form-config.json into SurveyJS-compatible JSON,\n * resolving field references, applying dynamic titles, and grouping by category.\n */\n\n// Re-export survey-core types for consumers\nexport type { IQuestion, IPage, ISurvey, IPanel, IElement } from \"survey-core\";\nimport { getPastMonthLabel, getPastYearLabel } from \"./utils.js\";\n\n// ============ Unified Form Config Types ============\n\nexport interface Category {\n id: string;\n name: string;\n}\n\nexport interface Choice {\n value: string;\n text: string;\n}\n\nexport interface Validator {\n type: \"regex\" | \"email\" | \"numeric\" | \"text\" | \"expression\" | \"answercount\" | \"custom\";\n text?: string;\n regex?: string;\n minValue?: number;\n maxValue?: number;\n minLength?: number;\n maxLength?: number;\n minCount?: number;\n maxCount?: number;\n expression?: string;\n validator?: string; // For custom validator name\n}\n\n/**\n * FieldData - Field definition in the unified form config\n */\nexport interface FieldData {\n name?: string; // Optional in fields{} (key is name), required in arrays\n displayName?: string;\n type: string;\n inputType?: \"text\" | \"number\" | \"tel\" | \"date\" | \"email\" | \"password\" | \"url\";\n category?: string; // Category ID (strictly string)\n maxLength?: number | string;\n min?: number | string;\n max?: number | string;\n step?: number;\n html?: string;\n choices?: Choice[];\n validators?: Validator[];\n visible?: boolean;\n visibleIf?: string;\n required?: boolean;\n isRequired?: boolean; // SurveyJS compat alias\n placeholder?: string;\n defaultValue?: string | number | boolean | string[];\n readOnly?: boolean;\n startWithNewLine?: boolean;\n enableIf?: string;\n titleLocation?: \"default\" | \"top\" | \"bottom\" | \"left\" | \"hidden\";\n // FinSys-specific fields\n ihs_column_names?: string[];\n requiredForEvaluation?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * FieldReference - How fields are referenced in pages\n */\nexport type FieldReference = \n | string // Simple field name reference\n | { ref: string; [key: string]: unknown } // Reference with overrides\n | { definition: FieldData & { name: string } }; // Inline definition\n\nexport interface PageConfig {\n id: string;\n title?: string;\n description?: string;\n showTOC?: boolean;\n showProgressBar?: boolean;\n showCategoryHeadings?: boolean;\n layout?: \"default\" | \"grid\" | \"vertical\";\n fields: FieldReference[];\n}\n\n/**\n * UnifiedFormConfig - The main configuration type for the unified form format\n */\nexport interface UnifiedFormConfig {\n $schema?: string;\n schemaVersion?: string;\n displayName?: string;\n templateIcon?: string; // Icon identifier for form template editors\n categories: Category[];\n fields: Record<string, FieldData>;\n pages?: PageConfig[]; // Optional when used in editor-only mode (no rendered form)\n}\n\n\n// ============ Output Types (SurveyJS JSON compatible) ============\n\nexport interface SurveyElementJSON {\n type: string;\n name: string;\n title?: string;\n isRequired?: boolean;\n maxLength?: number;\n storeDataAsText?: boolean;\n category?: string;\n [key: string]: unknown;\n}\n\nexport interface SurveyPageJSON {\n name: string;\n title: string;\n elements: Array<{\n type: string;\n name: string;\n elements: SurveyElementJSON[];\n }>;\n}\n\nexport interface SurveyJSON {\n title: string;\n logoPosition?: string;\n pages: SurveyPageJSON[];\n showQuestionNumbers?: string;\n questionErrorLocation?: string;\n completedHtml?: string;\n showTOC?: boolean;\n completeText?: string;\n showPreviewBeforeComplete?: string;\n showProgressBar?: string;\n widthMode?: string;\n width?: string;\n}\n\n// ============ Helper Types ============\n\nexport interface ResolvedField extends FieldData {\n name: string;\n}\n\n/**\n * Normalize a field to ensure backward compatibility\n * - Sets both `required` and `isRequired` to the same value\n */\nfunction normalizeField(field: ResolvedField): ResolvedField {\n // Spec: Fields are required by default unless explicitly false\n const isRequired = field.isRequired !== false && field.required !== false;\n return {\n ...field,\n required: isRequired,\n isRequired: isRequired\n };\n}\n\n/**\n * Resolve a field reference to a full field definition\n */\nfunction resolveFieldReference(\n ref: FieldReference, \n fields: Record<string, FieldData>\n): ResolvedField | null {\n if (typeof ref === \"string\") {\n // Simple string reference\n const fieldDef = fields[ref];\n if (!fieldDef) {\n console.warn(`Field \"${ref}\" not found in fields definition`);\n return null;\n }\n return normalizeField({ name: ref, ...fieldDef });\n }\n \n if (\"definition\" in ref) {\n // Inline definition\n return normalizeField(ref.definition as ResolvedField);\n }\n \n if (\"ref\" in ref) {\n // Reference with overrides\n const fieldDef = fields[ref.ref];\n if (!fieldDef) {\n console.warn(`Field \"${ref.ref}\" not found in fields definition`);\n return null;\n }\n const { ref: fieldName, ...overrides } = ref;\n return normalizeField({ name: fieldName, ...fieldDef, ...overrides });\n }\n \n return null;\n}\n\n/**\n * Apply dynamic title logic (e.g., bank statements with dynamic month labels,\n * financial statements with dynamic year labels)\n */\nexport function applyDynamicTitles(field: ResolvedField): ResolvedField {\n const bankStatementMatch = field.name.match(/^bank_statement_t(\\d+)$/);\n if (bankStatementMatch) {\n const monthsAgo = parseInt(bankStatementMatch[1], 10);\n return {\n ...field,\n displayName: `Bank Statement (${getPastMonthLabel(monthsAgo)})`\n };\n }\n if (field.name === \"financials\") {\n return {\n ...field,\n displayName: `Audited Financial Statement (${getPastYearLabel(1)})`\n };\n }\n return field;\n}\n\n/**\n * Generate SurveyJS JSON from unified form config\n */\nexport function generateSurveyJson(config: UnifiedFormConfig): SurveyJSON | Record<string, never> {\n if (!config.pages || config.pages.length === 0) return {};\n \n const firstPage = config.pages.find(p => p.id !== \"success-message\");\n if (!firstPage) return {};\n\n const categories = config.categories || [];\n const categoryMap: Record<string, string> = categories.reduce((acc, cat) => {\n acc[cat.id] = cat.name;\n return acc;\n }, {} as Record<string, string>);\n\n // Process all fields from the first page\n const processedFields = firstPage.fields\n .map(ref => resolveFieldReference(ref, config.fields))\n .filter((f): f is ResolvedField => f !== null)\n .map(f => applyDynamicTitles(f))\n .map(f => mapFieldToSurveyJS(f));\n\n // Group by Category\n const grouped = processedFields.reduce((acc: Record<string, SurveyElementJSON[]>, field) => {\n const catName = categoryMap[field.category as string] || \"Default\";\n if (!acc[catName]) acc[catName] = [];\n acc[catName].push(field);\n return acc;\n }, {} as Record<string, SurveyElementJSON[]>);\n\n // Build Pages (One Page per Category for Wizard effect)\n const pages: SurveyPageJSON[] = Object.entries(grouped).map(([categoryName, elements]) => ({\n name: categoryName.toLowerCase().replace(/\\s+/g, \"-\"),\n title: firstPage.showCategoryHeadings === false ? \"\" : categoryName,\n elements: [\n {\n type: \"panel\",\n name: `${categoryName.toLowerCase().replace(/\\s+/g, \"-\")}-panel`,\n elements: elements,\n },\n ],\n }));\n\n return {\n title: config.displayName || \"Flexible Financing Program\",\n logoPosition: \"right\",\n pages,\n showQuestionNumbers: \"off\",\n questionErrorLocation: \"bottom\",\n completedHtml: \"<h3>Thank you for completing the form</h3>\",\n showTOC: firstPage.showTOC ?? true,\n completeText: \"Submit\",\n showPreviewBeforeComplete: \"showAllQuestions\",\n showProgressBar: firstPage.showProgressBar === false ? \"off\" : \"top\",\n widthMode: \"responsive\",\n width: \"100%\",\n };\n}\n\n/**\n * Map a field definition to SurveyJS element format\n */\nfunction mapFieldToSurveyJS(field: ResolvedField): SurveyElementJSON {\n const element: SurveyElementJSON = {\n type: field.type,\n name: field.name,\n ...(field.displayName && { title: field.displayName }),\n isRequired: field.isRequired ?? field.required ?? false,\n ...(field.maxLength && { maxLength: Number(field.maxLength) }),\n };\n\n if (field.type === \"file\") {\n element.storeDataAsText = false;\n }\n\n // Copy other properties\n const excludeKeys = [\"displayName\", \"required\", \"category\"];\n Object.keys(field).forEach((key) => {\n if (!(key in element) && !excludeKeys.includes(key) && field[key] !== undefined) {\n element[key] = field[key];\n }\n });\n\n // Store category for grouping\n element.category = field.category ?? \"\";\n\n return element;\n}\n\n/**\n * Resolve all fields from a page to full field definitions\n */\nexport function resolvePageFields(\n page: PageConfig,\n fields: Record<string, FieldData>\n): ResolvedField[] {\n return page.fields\n .map(ref => resolveFieldReference(ref, fields))\n .filter((f): f is ResolvedField => f !== null)\n .map(f => applyDynamicTitles(f));\n}\n\n/**\n * Get category name from category ID (supports string or number IDs)\n */\nexport function getCategoryName(\n categoryId: string | undefined,\n categories: Category[]\n): string {\n if (categoryId === undefined) return \"Other\";\n const cat = categories.find(c => c.id === categoryId);\n return cat?.name || \"Other\";\n}\n\n/**\n * Group fields by their category, maintaining order and creating section breaks\n */\nexport interface FieldGroup {\n category: string;\n categoryName: string;\n fields: ResolvedField[];\n}\n\nexport function groupFieldsByCategory(\n fields: ResolvedField[],\n categories: Category[]\n): FieldGroup[] {\n const groups: FieldGroup[] = [];\n let currentGroup: FieldGroup | null = null;\n\n for (const field of fields) {\n const category = field.category ?? \"\";\n \n if (!currentGroup || currentGroup.category !== category) {\n currentGroup = {\n category,\n categoryName: getCategoryName(category, categories),\n fields: []\n };\n groups.push(currentGroup);\n }\n \n currentGroup.fields.push(field);\n }\n\n return groups;\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { z } from \"zod\";\nimport {\n type UnifiedFormConfig,\n type PageConfig,\n type FieldData,\n type FieldReference,\n type ResolvedField,\n type Category,\n resolvePageFields,\n groupFieldsByCategory,\n applyDynamicTitles,\n type FieldGroup\n} from \"./survey-generator.js\";\nimport { evaluateExpression } from \"./utils.js\";\n\nexport interface RHFStep {\n id: number;\n title: string;\n description?: string;\n fields: ResolvedField[];\n showCategoryHeadings: boolean;\n layout?: \"default\" | \"grid\" | \"vertical\";\n}\n\nexport interface RHFSchemaOutput {\n zodSchema: z.ZodTypeAny; // Can be ZodEffects\n baseSchema: z.ZodObject<any>;\n defaultValues: Record<string, any>;\n fields: ResolvedField[];\n groupedFields: FieldGroup[];\n steps: RHFStep[];\n displayName: string;\n categories: Category[];\n templateIcon?: string;\n}\n\n/**\n * Apply visibility-aware validation to a Zod schema\n */\nfunction applyVisibilityValidation(\n baseObject: z.ZodObject<any>, \n fields: ResolvedField[]\n): z.ZodTypeAny {\n return baseObject.superRefine((data, ctx) => {\n fields.forEach((field) => {\n const isRequired = field.isRequired !== false && field.required !== false && field.type !== \"html\";\n if (!isRequired) return;\n\n // Determine Visibility\n let isVisible = field.visible !== false;\n if (isVisible && field.visibleIf) {\n isVisible = evaluateExpression(field.visibleIf, data);\n }\n\n if (isVisible) {\n const value = data[field.name];\n const isEmpty = \n value === undefined || \n value === null || \n value === \"\" || \n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"This field is required\",\n path: [field.name],\n });\n }\n }\n });\n });\n}\n\nexport function generateRHFSchema(config: UnifiedFormConfig): RHFSchemaOutput {\n // ... (existing logic for collecting fields/building shape)\n const pages = config.pages || [];\n const categories = config.categories || [];\n const fieldsMap = config.fields || {};\n\n if (pages.length === 0) {\n throw new Error(\"v2.0.0 templates must include a 'pages' configuration.\");\n }\n\n // 1. Collect all fields from all pages\n const allFields: ResolvedField[] = [];\n \n for (const page of pages) {\n const pageFields = resolvePageFields(page, fieldsMap);\n allFields.push(...pageFields);\n }\n\n // Apply dynamic titles\n const mergedFields = allFields.map(applyDynamicTitles);\n\n // 2. Build Zod Shape & Default Values\n const shape: Record<string, z.ZodTypeAny> = {};\n const defaultValues: Record<string, any> = {};\n\n mergedFields.forEach((field) => {\n let schema: z.ZodTypeAny = z.string();\n\n // Track base type before validators/wrapping transform it via .refine()\n // (instanceof checks won't work after .refine() converts ZodString → ZodEffects)\n let baseType: \"string\" | \"number\" | \"array\" | \"boolean\" | \"any\" = \"string\";\n\n // --- Base Type Handling ---\n if (field.inputType === \"number\" || field.type === \"number\" || field.type === \"slider\" || field.type === \"range\") {\n schema = z.coerce.number();\n baseType = \"number\";\n defaultValues[field.name] = field.defaultValue !== undefined ? Number(field.defaultValue) : \"\";\n } else if (field.type === \"checkbox\") {\n schema = z.array(z.string());\n baseType = \"array\";\n defaultValues[field.name] = [];\n } else if (field.type === \"file\") {\n schema = z.array(z.any());\n baseType = \"array\";\n defaultValues[field.name] = [];\n } else if (field.type === \"boolean\") {\n schema = z.boolean();\n baseType = \"boolean\";\n defaultValues[field.name] = field.defaultValue ?? false;\n } else if (field.type === \"html\") {\n schema = z.any().optional();\n baseType = \"any\";\n defaultValues[field.name] = \"\";\n } else {\n if (Array.isArray(field.defaultValue)) {\n defaultValues[field.name] = field.defaultValue[0] || \"\";\n } else {\n defaultValues[field.name] = field.defaultValue ?? \"\";\n }\n }\n\n // --- Validation Constraints ---\n\n // Min/Max for Numbers\n if (baseType === \"number\" && schema instanceof z.ZodNumber) {\n let numSchema = schema;\n if (field.min !== undefined) numSchema = numSchema.min(Number(field.min), { message: `Minimum value is ${field.min}` });\n if (field.max !== undefined) numSchema = numSchema.max(Number(field.max), { message: `Maximum value is ${field.max}` });\n schema = numSchema;\n }\n\n const isRequired = field.isRequired !== false && field.required !== false && field.type !== \"html\";\n const isAlwaysVisible = field.visible !== false && !field.visibleIf;\n const isActuallyInput = field.type !== \"html\";\n\n // --- Required .min(1) for always-visible fields ---\n // Must be applied BEFORE validators (.refine) which change the schema type.\n if (isRequired && isAlwaysVisible && isActuallyInput) {\n if (baseType === \"string\" && schema instanceof z.ZodString) {\n schema = schema.min(1, { message: \"This field is required\" });\n } else if (baseType === \"array\" && schema instanceof z.ZodArray) {\n schema = schema.min(1, { message: \"Please select at least one option\" });\n }\n }\n\n // --- Enhancements: Validators ---\n // Applied BEFORE optional wrapping so instanceof checks still work on the\n // base type. The .refine() calls here will transform the schema to ZodEffects,\n // which is why we use baseType for subsequent decisions instead of instanceof.\n\n // Email\n const hasExplicitEmailValidator = field.validators?.some(v => v.type === \"email\");\n if ((field.inputType === \"email\" || field.name === \"email\") && baseType === \"string\" && schema instanceof z.ZodString && !hasExplicitEmailValidator) {\n schema = schema.refine(val => val === \"\" || z.string().email().safeParse(val).success, {\n message: \"Invalid email address\"\n });\n }\n\n // Legacy Validators (Regex / Numeric)\n if (field.validators) {\n field.validators.forEach((v) => {\n if (v.type === \"regex\" && v.regex) {\n try {\n const regex = new RegExp(v.regex);\n if (baseType === \"string\") {\n schema = schema.refine((val: any) => val === \"\" || regex.test(val), {\n message: v.text || \"Invalid format\"\n });\n }\n } catch (e) {\n console.warn(`Invalid regex pattern for field ${field.name}:`, v.regex);\n }\n }\n if (v.type === \"email\" && baseType === \"string\") {\n schema = schema.refine((val: any) => val === \"\" || z.string().email().safeParse(val).success, {\n message: v.text || \"Invalid email\"\n });\n }\n if (v.type === \"numeric\" && schema instanceof z.ZodNumber) {\n let numSchema = schema;\n if (v.minValue !== undefined) numSchema = numSchema.min(v.minValue, { message: v.text });\n if (v.maxValue !== undefined) numSchema = numSchema.max(v.maxValue, { message: v.text });\n schema = numSchema;\n }\n });\n }\n\n // --- Final Wrapper: Optional for conditional/hidden fields ---\n // Uses baseType instead of instanceof since validators may have transformed the schema.\n if (!(isRequired && isAlwaysVisible && isActuallyInput)) {\n if (baseType === \"number\") {\n schema = schema.optional().or(z.literal(\"\")).or(z.null());\n } else if (baseType === \"array\") {\n schema = schema.optional();\n } else if (baseType === \"boolean\") {\n schema = schema.optional();\n } else if (baseType === \"string\") {\n schema = schema.optional().or(z.literal(\"\"));\n }\n }\n\n shape[field.name] = schema;\n });\n\n // 3. Group Fields by Category\n const groupedFields = groupFieldsByCategory(mergedFields, categories);\n\n // 4. Build Steps (Dynamic Wizard)\n const steps: RHFStep[] = pages.map((page, idx) => {\n const pageFields = resolvePageFields(page, fieldsMap);\n\n return {\n id: idx,\n title: page.title || \"\",\n description: page.description,\n fields: pageFields,\n showCategoryHeadings: page.showCategoryHeadings ?? false,\n layout: page.layout\n };\n });\n\n // 5. Build Final Schema with Visibility-Aware Validation\n const baseObject = z.object(shape);\n const zodSchema = applyVisibilityValidation(baseObject, mergedFields);\n\n return {\n zodSchema,\n baseSchema: baseObject,\n defaultValues,\n fields: mergedFields,\n groupedFields,\n steps,\n displayName: config.displayName || \"Application Form\",\n categories,\n templateIcon: config.templateIcon\n };\n}\n\n/**\n * Get Zod schema for a specific step\n */\nexport function getStepSchema(step: RHFStep, fullSchema: any): z.ZodTypeAny {\n const stepFieldNames = step.fields.map(f => f.name);\n const stepShape: Record<string, z.ZodTypeAny> = {};\n \n // 1. Determine the base ZodObject\n let baseObj: z.ZodObject<any> | undefined;\n\n if (fullSchema instanceof z.ZodObject) {\n baseObj = fullSchema;\n } else if (fullSchema && typeof fullSchema === \"object\" && \"baseSchema\" in fullSchema) {\n baseObj = fullSchema.baseSchema as z.ZodObject<any>;\n } else if (fullSchema && \"_def\" in fullSchema && fullSchema._def.schema instanceof z.ZodObject) {\n // Basic Unwrap for ZodEffects\n baseObj = fullSchema._def.schema;\n }\n\n if (!baseObj) {\n console.warn(\"[RHF Generator] Could not extract ZodObject shape for step validation\");\n return z.object({});\n }\n\n const shape = baseObj.shape;\n const stepFields: ResolvedField[] = [];\n \n stepFieldNames.forEach(name => {\n if (name in shape) {\n stepShape[name] = shape[name];\n // Keep track of which fields are in this step\n const fieldDef = step.fields.find(f => f.name === name);\n if (fieldDef) stepFields.push(fieldDef);\n }\n });\n \n const stepBaseObject = z.object(stepShape);\n return applyVisibilityValidation(stepBaseObject, stepFields);\n}\n\n/**\n * Extract default values for a specific step\n */\nexport function getStepDefaultValues(\n step: RHFStep, \n allDefaults: Record<string, any>\n): Record<string, any> {\n const stepDefaults: Record<string, any> = {};\n \n step.fields.forEach(field => {\n if (field.name in allDefaults) {\n stepDefaults[field.name] = allDefaults[field.name];\n }\n });\n \n return stepDefaults;\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport AjvModule, { ErrorObject } from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport unifiedFormSchema from \"./schema/unified-form.schema.json\" with { type: \"json\" };\n\n// Interop for Ajv which can be exported differently in ESM/CJS\nconst Ajv = (AjvModule as any).default || AjvModule;\nconst ajv = new Ajv({ allErrors: true, strict: false });\n\n// Interop for ajv-formats\nconst addFormatsFn = (addFormats as any).default || addFormats;\naddFormatsFn(ajv);\n\n// Register the unified schema\najv.addSchema(unifiedFormSchema, \"unified-form.schema.json\");\n\nexport interface ValidationResult {\n valid: boolean;\n errors?: ErrorObject[];\n message?: string;\n}\n\n/**\n * Validates a unified form-config.json object against its schema\n */\nexport function validateFormConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema(\"unified-form.schema.json\");\n if (!validate) {\n return { valid: false, message: \"Could not load unified form schema\" };\n }\n\n const valid = validate(data);\n return {\n valid: !!valid,\n errors: validate.errors || undefined,\n };\n}\n\n// Legacy exports - these now just call validateFormConfig\n/** @deprecated Use validateFormConfig instead */\nexport function validateFormSpec(data: unknown): ValidationResult {\n return validateFormConfig(data);\n}\n\n/** @deprecated Use validateFormConfig instead */\nexport function validatePagesConfig(data: unknown): ValidationResult {\n return validateFormConfig(data);\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Unified Form Configuration Schema\",\n \"description\": \"A unified schema combining field definitions and page layout configuration for multi-step forms.\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"Reference to this JSON schema file\"\n },\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^v?[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\",\n \"description\": \"Semantic version of the schema format (e.g., 'v2.0.0' or '2.0.0')\"\n },\n \"displayName\": {\n \"type\": \"string\",\n \"description\": \"The human-readable name of the loan product or form\"\n },\n \"templateIcon\": {\n \"type\": \"string\",\n \"description\": \"Icon identifier or path for the form template (used in FinSys editor)\"\n },\n \"categories\": {\n \"type\": \"array\",\n \"description\": \"Category definitions for field organization and grouping\",\n \"items\": {\n \"$ref\": \"#/definitions/category\"\n }\n },\n \"fields\": {\n \"type\": \"object\",\n \"description\": \"Master field definitions keyed by field name\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/fieldData\"\n }\n },\n \"pages\": {\n \"type\": \"array\",\n \"description\": \"Ordered list of pages in the form wizard. Optional for FinSys editor mode.\",\n \"items\": {\n \"$ref\": \"#/definitions/pageConfig\"\n }\n }\n },\n \"required\": [\"categories\", \"fields\", \"pages\"],\n \"definitions\": {\n \"category\": {\n \"type\": \"object\",\n \"description\": \"A category for grouping related form fields\",\n \"properties\": {\n \"id\": { \n \"type\": \"string\",\n \"description\": \"Unique identifier for the category (string)\" \n },\n \"name\": { \"type\": \"string\", \"description\": \"Display name for the category heading\" }\n },\n \"required\": [\"id\", \"name\"]\n },\n \"choice\": {\n \"type\": \"object\",\n \"description\": \"A selectable option for dropdown or radiogroup fields\",\n \"properties\": {\n \"value\": { \"type\": \"string\", \"description\": \"Value submitted when this choice is selected\" },\n \"text\": { \"type\": \"string\", \"description\": \"Display text for this choice\" }\n },\n \"required\": [\"value\", \"text\"]\n },\n \"validator\": {\n \"type\": \"object\",\n \"description\": \"Validation rule for a form field\",\n \"properties\": {\n \"type\": { \n \"type\": \"string\",\n \"enum\": [\"regex\", \"email\", \"numeric\", \"text\", \"expression\", \"answercount\", \"custom\"],\n \"description\": \"Type of validation to perform\"\n },\n \"text\": { \"type\": \"string\", \"description\": \"Error message to display on validation failure\" },\n \"regex\": { \"type\": \"string\", \"description\": \"Regular expression pattern (for type=regex)\" },\n \"minValue\": { \"type\": \"number\", \"description\": \"Minimum numeric value (for type=numeric)\" },\n \"maxValue\": { \"type\": \"number\", \"description\": \"Maximum numeric value (for type=numeric)\" },\n \"minLength\": { \"type\": \"integer\", \"description\": \"Minimum text length (for type=text)\" },\n \"maxLength\": { \"type\": \"integer\", \"description\": \"Maximum text length (for type=text)\" },\n \"minCount\": { \"type\": \"integer\", \"description\": \"Minimum selection count (for type=answercount)\" },\n \"maxCount\": { \"type\": \"integer\", \"description\": \"Maximum selection count (for type=answercount)\" },\n \"expression\": { \"type\": \"string\", \"description\": \"SurveyJS expression for custom validation\" },\n \"validator\": { \"type\": \"string\", \"description\": \"Name of the custom validator function (for type=custom)\" }\n },\n \"required\": [\"type\"]\n },\n \"fieldData\": {\n \"type\": \"object\",\n \"description\": \"Definition of a form field\",\n \"properties\": {\n \"name\": { \n \"type\": \"string\", \n \"description\": \"Field name (optional in fields{} since it's the key, required in arrays)\"\n },\n \"displayName\": { \n \"type\": \"string\",\n \"description\": \"Human-readable label for the field\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"text\", \"number\", \"email\", \"file\", \"dropdown\", \"checkbox\", \"boolean\", \"comment\", \"radiogroup\", \"range\", \"html\", \"slider\"],\n \"description\": \"Field type determining rendering and behavior\"\n },\n \"inputType\": { \n \"type\": \"string\", \n \"enum\": [\"text\", \"number\", \"tel\", \"date\", \"email\", \"password\", \"url\"],\n \"description\": \"HTML input type override for text fields\" \n },\n \"category\": { \n \"type\": \"string\",\n \"description\": \"Category ID this field belongs to (string to match category.id)\" \n },\n \"categoryId\": { \n \"type\": \"integer\",\n \"description\": \"Legacy integer category ID (deprecated, prefer 'category')\"\n },\n \"maxLength\": { \"type\": [\"integer\", \"string\"], \"description\": \"Maximum character length\" },\n \"min\": { \"type\": [\"integer\", \"string\"], \"description\": \"Minimum value for numeric/slider fields\" },\n \"max\": { \"type\": [\"integer\", \"string\"], \"description\": \"Maximum value for numeric/slider fields\" },\n \"step\": { \"type\": \"number\", \"description\": \"Step increment for slider/range fields\" },\n \"html\": { \"type\": \"string\", \"description\": \"HTML content for type=html fields\" },\n \"choices\": {\n \"type\": \"array\",\n \"description\": \"Options for dropdown or radiogroup fields\",\n \"items\": { \"$ref\": \"#/definitions/choice\" }\n },\n \"validators\": {\n \"type\": \"array\",\n \"description\": \"Validation rules to apply to this field\",\n \"items\": { \"$ref\": \"#/definitions/validator\" }\n },\n \"visible\": { \n \"type\": \"boolean\", \n \"default\": true,\n \"description\": \"Whether the field is visible\"\n },\n \"visibleIf\": { \n \"type\": \"string\", \n \"description\": \"SurveyJS expression for conditional visibility\" \n },\n \"required\": { \n \"type\": \"boolean\",\n \"description\": \"Whether the field is required for form submission\"\n },\n \"isRequired\": { \n \"type\": \"boolean\", \n \"description\": \"Alias for 'required' (SurveyJS compatibility)\" \n },\n \"placeholder\": { \n \"type\": \"string\",\n \"description\": \"Placeholder text shown in empty field\"\n },\n \"defaultValue\": { \n \"type\": [\"string\", \"number\", \"boolean\", \"array\"],\n \"description\": \"Default value for the field\"\n },\n \"readOnly\": { \n \"type\": \"boolean\",\n \"description\": \"Whether the field is read-only\"\n },\n \"startWithNewLine\": { \n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"If false, field appears on same line as previous field\" \n },\n \"enableIf\": { \n \"type\": \"string\", \n \"description\": \"SurveyJS expression for conditional enable/disable\" \n },\n \"titleLocation\": { \n \"type\": \"string\", \n \"enum\": [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n \"description\": \"Position of the field label\"\n },\n \"ihs_column_names\": {\n \"type\": \"array\",\n \"description\": \"FinSys IHS column mappings for file fields (used for data extraction)\",\n \"items\": { \"type\": \"string\" }\n },\n \"requiredForEvaluation\": { \n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Whether this field is required for loan evaluation (FinSys specific)\"\n }\n },\n \"required\": [\"type\"]\n },\n \"fieldReference\": {\n \"description\": \"Reference to a field in a page, supporting simple refs, refs with overrides, or inline definitions\",\n \"oneOf\": [\n { \n \"type\": \"string\", \n \"description\": \"Simple field name reference to a field defined in 'fields'\" \n },\n {\n \"type\": \"object\",\n \"description\": \"Field reference with optional property overrides\",\n \"properties\": {\n \"ref\": { \"type\": \"string\", \"description\": \"Reference to field name in 'fields' object\" },\n \"displayName\": { \"type\": \"string\", \"description\": \"Override display name for this page\" },\n \"type\": { \"type\": \"string\", \"description\": \"Override field type for this usage\" },\n \"defaultValue\": { \"type\": [\"string\", \"number\", \"boolean\", \"array\"] },\n \"readOnly\": { \"type\": \"boolean\" },\n \"visible\": { \"type\": \"boolean\" },\n \"visibleIf\": { \"type\": \"string\" },\n \"required\": { \"type\": \"boolean\" },\n \"min\": { \"type\": [\"integer\", \"string\"] },\n \"max\": { \"type\": [\"integer\", \"string\"] },\n \"choices\": { \"type\": \"array\", \"items\": { \"$ref\": \"#/definitions/choice\" } }\n },\n \"required\": [\"ref\"]\n },\n {\n \"type\": \"object\",\n \"description\": \"Inline field definition (page-specific field not in master 'fields')\",\n \"properties\": {\n \"definition\": { \n \"allOf\": [\n { \"$ref\": \"#/definitions/fieldData\" },\n { \n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"]\n }\n ]\n }\n },\n \"required\": [\"definition\"]\n }\n ]\n },\n \"pageConfig\": {\n \"type\": \"object\",\n \"description\": \"Configuration for a single page/step in the form wizard\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"description\": \"Unique page identifier\" },\n \"title\": { \"type\": \"string\", \"description\": \"Page title displayed to user\" },\n \"description\": { \"type\": \"string\", \"description\": \"Optional page description or instructions\" },\n \"showTOC\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Show table of contents\" },\n \"showProgressBar\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Show progress indicator\" },\n \"showCategoryHeadings\": { \n \"type\": \"boolean\", \n \"default\": false,\n \"description\": \"Render category names as section headings when category changes between fields\"\n },\n \"layout\": { \n \"type\": \"string\", \n \"enum\": [\"default\", \"grid\", \"vertical\"],\n \"description\": \"Layout mode for the page\"\n },\n \"fields\": {\n \"type\": \"array\",\n \"description\": \"Ordered list of field references to display on this page\",\n \"items\": { \"$ref\": \"#/definitions/fieldReference\" }\n }\n },\n \"required\": [\"id\", \"fields\"]\n }\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class FormFieldCategory {\n private _id: string;\n private _name: string;\n\n constructor(id: string | number, name: string) {\n this._id = String(id);\n this._name = name;\n }\n\n get id(): string {\n return this._id;\n }\n\n get name(): string {\n return this._name;\n }\n\n set name(value: string) {\n this._name = value;\n }\n\n toJSON() {\n return {\n id: this._id,\n name: this._name,\n };\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FieldData, Choice, Validator } from \"./survey-generator.js\";\n\nexport enum FieldType {\n FILE = 'file',\n TEXT = 'text',\n DROPDOWN = 'dropdown',\n BOOLEAN = 'boolean',\n CHECKBOX = 'checkbox',\n RADIOGROUP = 'radiogroup',\n SLIDER = 'slider',\n HTML = 'html',\n TAGBOX = 'tagbox',\n NUMBER = 'number',\n EMAIL = 'email',\n COMMENT = 'comment',\n RANGE = 'range',\n UNKNOWN = 'unknown',\n}\n\nexport interface FormFieldType {\n name: string;\n displayName: string;\n}\n\nexport interface FormFieldInputType {\n name: string;\n displayName: string;\n}\n\nexport interface FormFieldTypeDefinitions {\n version: number;\n types: FormFieldType[];\n input_types: FormFieldInputType[];\n}\n\nexport interface DropdownOption {\n id: number;\n name: string;\n displayName: string;\n choices: Choice[];\n}\n\nexport interface EditorValidator {\n id: number;\n displayName: string;\n class: string;\n description: string;\n isRequired: boolean;\n validators: Validator[];\n}\n\nfunction toFieldType(value: string): FieldType {\n const typeMap: Record<string, FieldType> = {\n [FieldType.FILE]: FieldType.FILE,\n [FieldType.TEXT]: FieldType.TEXT,\n [FieldType.DROPDOWN]: FieldType.DROPDOWN,\n [FieldType.BOOLEAN]: FieldType.BOOLEAN,\n [FieldType.CHECKBOX]: FieldType.CHECKBOX,\n [FieldType.RADIOGROUP]: FieldType.RADIOGROUP,\n [FieldType.SLIDER]: FieldType.SLIDER,\n [FieldType.HTML]: FieldType.HTML,\n [FieldType.TAGBOX]: FieldType.TAGBOX,\n [FieldType.NUMBER]: FieldType.NUMBER,\n [FieldType.EMAIL]: FieldType.EMAIL,\n [FieldType.COMMENT]: FieldType.COMMENT,\n [FieldType.RANGE]: FieldType.RANGE,\n };\n return typeMap[value] || FieldType.UNKNOWN;\n}\n\nexport default abstract class FormField {\n fieldObject: FieldData;\n\n constructor(name: string, displayName: string, type: string, category: string) {\n this.fieldObject = {\n name,\n displayName,\n type,\n category,\n };\n }\n\n static fromObject(fieldObject: FieldData): FormField {\n if (!fieldObject.name) {\n throw new Error('Field name is required');\n }\n\n if (!fieldObject.displayName || !fieldObject.category) {\n throw new Error(\n `Invalid field object: '${fieldObject.name}' field missing displayName or category`\n );\n }\n\n const identifiedType = toFieldType(fieldObject.type as string);\n if (identifiedType === FieldType.UNKNOWN) {\n throw new Error(\n `'${fieldObject.name}' field has unsupported or missing type: ${fieldObject.type}`\n );\n }\n\n if (\n fieldObject.choices &&\n !['dropdown', 'checkbox', 'radiogroup', 'tagbox'].includes(fieldObject.type as string)\n ) {\n // Logic remained as is\n }\n\n if (fieldObject.type === 'dropdown' && !fieldObject.choices) {\n throw new Error(\n `Invalid field object: '${fieldObject.name}' field has type dropdown, but does not have choices`\n );\n }\n\n let field: FormField;\n if (fieldObject.type === 'file') {\n field = new FileFormField(\n fieldObject.name,\n fieldObject.displayName || fieldObject.name,\n fieldObject.type,\n String(fieldObject.category),\n fieldObject.ihs_column_names || []\n );\n } else {\n field = new BasicFormField(\n fieldObject.name,\n fieldObject.displayName || fieldObject.name,\n fieldObject.type || 'text',\n String(fieldObject.category)\n );\n }\n\n field.fieldObject = { ...fieldObject };\n field.fieldObject.category = String(field.fieldObject.category);\n\n // Remove legacy categoryId property\n delete (field.fieldObject as any).categoryId;\n\n return field;\n }\n\n abstract getFieldNames(): string[];\n\n protected cleanObject(obj: any): any {\n if (obj === null || obj === undefined) return obj;\n\n let target = obj;\n if (typeof obj.toJSON === 'function' && obj !== this) {\n target = obj.toJSON();\n }\n\n if (Array.isArray(target)) {\n return target.map((v: any) => (typeof v === 'object' ? this.cleanObject(v) : v));\n }\n\n if (typeof target !== 'object') return target;\n\n const cleaned: any = {};\n Object.keys(target).forEach((key) => {\n const value = target[key];\n if (value !== null && value !== undefined && value !== '') {\n if (typeof value === 'object') {\n cleaned[key] = this.cleanObject(value);\n } else {\n cleaned[key] = value;\n }\n }\n });\n return cleaned;\n }\n\n toJSON() {\n return this.cleanObject({ ...this.fieldObject });\n }\n\n get displayName(): string {\n return this.fieldObject.displayName || this.fieldObject.name || '';\n }\n\n set displayName(newDisplayName: string) {\n this.fieldObject.displayName = newDisplayName;\n }\n\n get name(): string {\n return this.fieldObject.name || '';\n }\n\n get type(): FieldType {\n return toFieldType(this.fieldObject.type as string);\n }\n\n get inputType(): string {\n return this.fieldObject.inputType ?? '';\n }\n\n get categoryId(): string {\n return String(this.fieldObject.category || '');\n }\n\n set categoryId(categoryId: string) {\n this.fieldObject.category = categoryId;\n }\n\n get defaultValue(): any {\n return this.fieldObject.defaultValue;\n }\n\n set defaultValue(value: any) {\n this.fieldObject.defaultValue = value;\n }\n\n get placeholder(): string | undefined {\n return this.fieldObject.placeholder;\n }\n\n get validators(): Validator[] | undefined {\n return this.fieldObject.validators as Validator[];\n }\n\n get choices(): Choice[] {\n return (this.fieldObject.choices as Choice[]) ?? [];\n }\n\n set choices(choices: Choice[]) {\n this.fieldObject.choices = choices;\n }\n\n get visible(): boolean {\n return this.fieldObject.visible ?? true;\n }\n\n get visibleIf(): string | undefined {\n return this.fieldObject.visibleIf;\n }\n\n get isRequired(): boolean {\n return this.fieldObject.required ?? this.fieldObject.isRequired ?? true;\n }\n\n get startWithNewLine(): boolean {\n return this.fieldObject.startWithNewLine ?? true;\n }\n\n get requiredForEvaluation(): boolean {\n return this.fieldObject.requiredForEvaluation ?? true;\n }\n\n get maxLength(): number | undefined {\n return typeof this.fieldObject.maxLength === 'string'\n ? Number.parseInt(this.fieldObject.maxLength)\n : this.fieldObject.maxLength;\n }\n\n get min(): number | undefined {\n return typeof this.fieldObject.min === 'string'\n ? Number.parseFloat(this.fieldObject.min)\n : this.fieldObject.min;\n }\n\n get max(): number | undefined {\n return typeof this.fieldObject.max === 'string'\n ? Number.parseFloat(this.fieldObject.max)\n : this.fieldObject.max;\n }\n}\n\nexport class BasicFormField extends FormField {\n constructor(name: string, displayName: string, type: string, category: string) {\n super(name, displayName, type, category);\n }\n\n getFieldNames(): string[] {\n if (this.fieldObject.requiredForEvaluation === false) {\n return [];\n }\n\n return [this.fieldObject.name!];\n }\n}\n\nexport class FileFormField extends FormField {\n constructor(\n name: string,\n displayName: string,\n type: string,\n category: string,\n ihs_column_names: string[]\n ) {\n super(name, displayName, type, category);\n this.fieldObject.ihs_column_names = ihs_column_names;\n }\n\n getFieldNames(): string[] {\n if (this.fieldObject.requiredForEvaluation === false) {\n return [];\n }\n\n return this.fieldObject.ihs_column_names || [];\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormFieldCategory } from \"./form-field-category.js\";\nimport FormField from \"./form-field.js\";\nimport type { FieldData, PageConfig, UnifiedFormConfig } from \"./survey-generator.js\";\nimport { validateFormConfig } from \"./validator.js\";\nimport semver from \"semver\";\n\nexport class FormSpec {\n private _categories: FormFieldCategory[] = [];\n private _fields: FormField[] = [];\n private _displayName: string;\n private _templateIcon?: string;\n private _schemaVersion: string;\n private _pages: PageConfig[] = [];\n\n constructor(\n displayName: string,\n categories: FormFieldCategory[],\n fields: FormField[],\n pages: PageConfig[] = [],\n templateIcon?: string,\n schemaVersion: string = FormSpec.MAX_PARSER_SCHEMA_VERSION\n ) {\n this._displayName = displayName;\n this._templateIcon = templateIcon;\n this._categories = categories;\n this._fields = fields;\n this._pages = pages;\n this._schemaVersion = schemaVersion;\n }\n\n static readonly MIN_PARSER_SCHEMA_VERSION = 'v1.0.0';\n static readonly MAX_PARSER_SCHEMA_VERSION = 'v2.0.0';\n\n get fieldNames(): string[] {\n let names: string[] = [];\n\n this.fields.forEach((field) => {\n names = names.concat(field.getFieldNames());\n });\n\n return names;\n }\n\n get schemaVersion(): string {\n return this._schemaVersion;\n }\n\n get requiresUpgrade(): boolean {\n return semver.lt(this._schemaVersion, FormSpec.MAX_PARSER_SCHEMA_VERSION);\n }\n\n upgradeToV2(): void {\n this._schemaVersion = FormSpec.MAX_PARSER_SCHEMA_VERSION;\n }\n\n get displayName(): string {\n return this._displayName;\n }\n\n set displayName(newDisplayName: string) {\n this._displayName = newDisplayName;\n }\n\n get templateIcon(): string | undefined {\n return this._templateIcon;\n }\n\n set templateIcon(value: string | undefined) {\n this._templateIcon = value;\n }\n\n get categories(): FormFieldCategory[] {\n return this._categories;\n }\n\n set categories(categories: FormFieldCategory[]) {\n this._categories = categories;\n }\n\n get fields(): FormField[] {\n return this._fields;\n }\n\n set fields(fields: FormField[]) {\n this._fields = fields;\n }\n\n get pages(): PageConfig[] {\n return this._pages;\n }\n\n set pages(value: PageConfig[]) {\n this._pages = value;\n }\n\n addField(field: FormField): void {\n this._fields.push(field);\n }\n\n updateField(field: FormField): void {\n const index = this._fields.findIndex((f) => f.name === field.name);\n if (index !== -1) {\n this._fields[index] = field;\n } else {\n throw new Error(\n `${field.name} not found. Form Spec of ${this._displayName} cannot update ${field.name}`\n );\n }\n }\n\n removeField(fieldName: string): void {\n const fieldIndex = this._fields.findIndex((f) => f.name === fieldName);\n if (fieldIndex !== -1) {\n this._fields.splice(fieldIndex, 1);\n\n this._pages.forEach((page) => {\n page.fields = page.fields.filter((fieldRef) => {\n let refName: string | undefined;\n if (typeof fieldRef === 'string') {\n refName = fieldRef;\n } else if ('ref' in fieldRef) {\n refName = fieldRef.ref;\n } else if ('definition' in fieldRef) {\n refName = fieldRef.definition.name;\n }\n return refName !== fieldName;\n });\n });\n }\n }\n\n getFieldsByCategory(categoryName: string): FormField[] {\n const foundCategory = this.categories.find((category) => category.name === categoryName);\n\n if (!foundCategory) {\n return [];\n }\n\n return this._fields.filter((field) => field.categoryId === foundCategory.id);\n }\n\n validate(): { valid: boolean; errors?: any[] } {\n const config = this.toJSON() as UnifiedFormConfig;\n const result = validateFormConfig(config);\n const errors: any[] = [];\n\n if (result.errors) {\n result.errors.forEach((err: any) => {\n let path = err.instancePath || err.dataPath || '';\n path = path.replace(/^\\//, '').replace(/\\//g, '.');\n const prefix = path ? `${path}: ` : '';\n errors.push({\n message: `${prefix}${err.message}`,\n path: path,\n });\n });\n }\n\n if (!this._displayName || this._displayName.trim() === '') {\n errors.push({\n message: 'displayName: Form display name is required',\n path: 'displayName',\n });\n }\n\n const categoryIds = new Set(this._categories.map((c) => String(c.id)));\n this._fields.forEach((field) => {\n if (field.categoryId && !categoryIds.has(String(field.categoryId))) {\n errors.push({\n message: `fields.${field.name}.category: references non-existent category '${field.categoryId}'`,\n path: `fields.${field.name}.category`,\n });\n }\n });\n\n const fieldNames = new Set(this._fields.map((f) => f.name));\n this._pages.forEach((page, pageIndex) => {\n page.fields.forEach((fieldRef, fieldIndex) => {\n let refName: string | undefined;\n if (typeof fieldRef === 'string') {\n refName = fieldRef;\n } else if (fieldRef && (fieldRef as any).ref) {\n refName = (fieldRef as any).ref;\n } else if (fieldRef && (fieldRef as any).definition) {\n refName = (fieldRef as any).definition.name;\n }\n\n if (refName && !fieldNames.has(refName)) {\n errors.push({\n message: `pages.${pageIndex}.fields.${fieldIndex}: references non-existent field '${refName}'`,\n path: `pages.${pageIndex}.fields.${fieldIndex}`,\n });\n }\n });\n });\n\n return {\n valid: result.valid && errors.length === (result.errors?.length || 0),\n errors: errors.length > 0 ? errors : undefined,\n };\n }\n\n private cleanObject(obj: any): any {\n if (obj === null || obj === undefined) return obj;\n\n let target = obj;\n if (typeof obj.toJSON === 'function' && obj !== this) {\n target = obj.toJSON();\n }\n\n if (Array.isArray(target)) {\n return target.map((v: any) => (typeof v === 'object' ? this.cleanObject(v) : v));\n }\n\n if (typeof target !== 'object') return target;\n\n const cleaned: any = {};\n Object.keys(target).forEach((key) => {\n const value = target[key];\n if (value !== null && value !== undefined && value !== '') {\n if (typeof value === 'object') {\n cleaned[key] = this.cleanObject(value);\n } else {\n cleaned[key] = value;\n }\n }\n });\n return cleaned;\n }\n\n toJSON(): object {\n const fieldsMap: Record<string, any> = {};\n this._fields.forEach((field) => {\n fieldsMap[field.name] = field.toJSON();\n delete fieldsMap[field.name].name;\n });\n\n return this.cleanObject({\n $schema:\n '../../../node_modules/@finsys/core/dist/schema/unified-form.schema.json',\n schemaVersion: this._schemaVersion,\n displayName: this._displayName,\n templateIcon: this._templateIcon,\n categories: this._categories,\n fields: fieldsMap,\n pages: this._pages,\n });\n }\n\n static fromJSON(jsonString: string): FormSpec {\n let jsonData: any;\n try {\n jsonData = JSON.parse(jsonString);\n } catch (error) {\n console.error(`Error parsing JSON for Loantype with string: ${jsonString}`);\n throw error;\n }\n\n if (!jsonData.schemaVersion) {\n throw new Error('Invalid JSON: schemaVersion is missing or invalid');\n }\n\n if (semver.lt(jsonData.schemaVersion, FormSpec.MIN_PARSER_SCHEMA_VERSION)) {\n throw new Error(\n `This form spec file is using an outdated schema version ${jsonData.schemaVersion}. Minimum supported version is ${FormSpec.MIN_PARSER_SCHEMA_VERSION}`\n );\n }\n\n if (!jsonData.displayName) {\n throw new Error('Invalid JSON: displayName is missing or invalid');\n }\n\n if (!jsonData.categories) {\n throw new Error('Invalid JSON: categories is missing or invalid');\n }\n\n if (!jsonData.fields) {\n throw new Error('Invalid JSON: fields is missing or invalid');\n }\n\n if (!jsonData.pages || jsonData.pages.length === 0) {\n if (semver.satisfies(jsonData.schemaVersion, '>=2.0.0')) {\n console.warn(\n `v2.0.0 template ${jsonData.displayName} is missing pages. Generating default pages.`\n );\n }\n }\n\n let fieldObjects: FieldData[] = [];\n if (Array.isArray(jsonData.fields)) {\n fieldObjects = jsonData.fields;\n } else if (typeof jsonData.fields === 'object' && jsonData.fields !== null) {\n fieldObjects = Object.entries(jsonData.fields).map(([name, data]: [string, any]) => {\n return {\n name,\n ...data,\n };\n });\n }\n\n fieldObjects.forEach((f: any) => {\n if (f.categoryId && !f.category) {\n f.category = String(f.categoryId);\n } else if (f.category) {\n f.category = String(f.category);\n }\n });\n\n const categories = (jsonData.categories || []).map((cat: any) => {\n return new FormFieldCategory(String(cat.id), cat.name);\n });\n\n const fields: FormField[] = fieldObjects.map((fieldObject) => {\n return FormField.fromObject(fieldObject);\n });\n\n let pages = jsonData.pages || [];\n if (pages.length === 0) {\n const categoriesMap: Record<string, string[]> = {};\n fields.forEach((f) => {\n const catId = f.categoryId;\n if (!categoriesMap[catId]) {\n categoriesMap[catId] = [];\n }\n categoriesMap[catId].push(f.name);\n });\n\n pages = categories\n .map((cat: FormFieldCategory) => ({\n id: `page-${cat.id}`,\n title: cat.name,\n fields: categoriesMap[cat.id] || [],\n }))\n .filter((p: PageConfig) => p.fields.length > 0);\n }\n\n return new FormSpec(\n jsonData.displayName,\n categories,\n fields,\n pages,\n jsonData.templateIcon,\n jsonData.schemaVersion\n );\n }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Validator } from \"./survey-generator.js\";\nimport type { EditorValidator } from \"./form-field.js\";\n\nexport interface FormValidatorDefinitions {\n options: EditorValidator[];\n version: number;\n}\n\nexport class FormFieldValidator implements EditorValidator {\n id: number;\n displayName: string;\n class: string;\n description: string;\n isRequired: boolean;\n validators: Validator[];\n\n constructor(validatorData: EditorValidator) {\n this.id = validatorData.id;\n this.displayName = validatorData.displayName;\n this.class = validatorData.class;\n this.description = validatorData.description;\n this.isRequired = validatorData.isRequired;\n this.validators = validatorData.validators;\n }\n\n validate(value: any): boolean {\n for (const validator of this.validators) {\n switch (validator.type) {\n case 'numeric':\n if (!this.validateNumeric(value, validator.minValue, validator.maxValue)) {\n return false;\n }\n break;\n case 'text':\n if (!this.validateText(value, validator.minLength, validator.maxLength)) {\n return false;\n }\n break;\n }\n }\n return true;\n }\n\n private validateNumeric(value: number, min?: number, max?: number): boolean {\n if (min !== undefined && value < min) return false;\n if (max !== undefined && value > max) return false;\n return true;\n }\n\n private validateText(value: string, minLength?: number, maxLength?: number): boolean {\n if (minLength !== undefined && value.length < minLength) return false;\n if (maxLength !== undefined && value.length > maxLength) return false;\n return true;\n }\n}\n","{\n \"schemaVersion\": \"v2.0.0\",\n \"categories\": [\n {\n \"id\": \"1\",\n \"name\": \"Basic Information\"\n },\n {\n \"id\": \"2\",\n \"name\": \"Personal Information\"\n },\n {\n \"id\": \"3\",\n \"name\": \"Company Information\"\n },\n {\n \"id\": \"4\",\n \"name\": \"Financial Information\"\n },\n {\n \"id\": \"5\",\n \"name\": \"Employment Information\"\n },\n {\n \"id\": \"6\",\n \"name\": \"Consent and Legal Agreements\"\n },\n {\n \"id\": \"7\",\n \"name\": \"Address Information\"\n },\n {\n \"id\": \"8\",\n \"name\": \"Contact Information\"\n },\n {\n \"id\": \"9\",\n \"name\": \"Declarations\"\n },\n {\n \"id\": \"10\",\n \"name\": \"Account Information\"\n },\n {\n \"id\": \"11\",\n \"name\": \"Loan Information\"\n },\n {\n \"id\": \"12\",\n \"name\": \"Vehicle Information\"\n },\n {\n \"id\": \"13\",\n \"name\": \"Document Upload\"\n }\n ],\n \"fields\": [\n {\n \"name\": \"fullName\",\n \"displayName\": \"Full Name\",\n \"placeholder\": \"E.g. John Doe\",\n \"type\": \"text\",\n \"maxLength\": 80,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please make sure the name doesn't include extra spaces, numbers, or invalid symbols\",\n \"regex\": \"^[A-Za-z'-]+(?:\\\\s[A-Za-z'-]+)*\\\\s?[A-Za-z'-]+$\"\n }\n ],\n \"category\": \"1\"\n },\n {\n \"name\": \"email\",\n \"displayName\": \"Email\",\n \"placeholder\": \"E.g. johndoe@example.com\",\n \"type\": \"text\",\n \"inputType\": \"email\",\n \"maxLength\": 65,\n \"validators\": [\n {\n \"type\": \"email\",\n \"text\": \"Value must be a valid email\"\n }\n ],\n \"category\": \"1\"\n },\n {\n \"name\": \"mobilePhoneNoAreaCode\",\n \"displayName\": \"Mobile Phone Number Area Code\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"1\"\n },\n {\n \"name\": \"mobilePhoneNo\",\n \"displayName\": \"Mobile Phone Number\",\n \"placeholder\": \"Mobile Phone Number\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"maxLength\": 12,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^(011[0-9]{8}|01[2346789][0-9]{7}|[2-9][0-9]{0,8})$\"\n }\n ],\n \"category\": \"1\"\n },\n {\n \"type\": \"text\",\n \"name\": \"idNumber\",\n \"title\": \"ID Number\",\n \"placeholder\": \"E.g. 700513065143\",\n \"isRequired\": true,\n \"displayName\": \"IC Number\",\n \"maxLength\": 25,\n \"inputType\": \"text\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{12}$\",\n \"text\": \"Please enter exactly 12 digits numbers\"\n },\n {\n \"type\": \"regex\",\n \"regex\": \"^(\\\\d{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\\\d{6}$\",\n \"text\": \"First 6 digits must be valid birth year (00-99), month (01-12), and day (01-31)\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"dateOfBirth\",\n \"displayName\": \"Date of Birth\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"visible\": false,\n \"category\": \"2\"\n },\n {\n \"name\": \"companyName\",\n \"displayName\": \"Company Name\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"companyRegNo\",\n \"displayName\": \"Company Registration Number\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"natureOfBusiness\",\n \"displayName\": \"Nature of Business\",\n \"placeholder\": \"Select your Nature of Business\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Manufacturing\",\n \"text\": \"Manufacturing\"\n },\n {\n \"value\": \"Services\",\n \"text\": \"Services\"\n },\n {\n \"value\": \"Others\",\n \"text\": \"Others\"\n }\n ],\n \"maxLength\": 80,\n \"category\": \"3\"\n },\n {\n \"name\": \"officeFacilityType\",\n \"displayName\": \"Office Facility Type\",\n \"placeholder\": \"Select your facility type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Owned\",\n \"text\": \"Owned\"\n },\n {\n \"value\": \"Rented\",\n \"text\": \"Rented\"\n }\n ],\n \"maxLength\": 80,\n \"category\": \"3\"\n },\n {\n \"name\": \"companySize\",\n \"displayName\": \"Company Size\",\n \"placeholder\": \"Select your company size\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"selfEmplyed\",\n \"text\": \"Self-employed\"\n },\n {\n \"value\": \"1-10\",\n \"text\": \"1-10\"\n },\n {\n \"value\": \"11-20\",\n \"text\": \"11-20\"\n },\n {\n \"value\": \"21-30\",\n \"text\": \"21-30\"\n },\n {\n \"value\": \"31-50\",\n \"text\": \"31-50\"\n },\n {\n \"value\": \"51-100\",\n \"text\": \"51-100\"\n },\n {\n \"value\": \"101-500\",\n \"text\": \"101-500\"\n },\n {\n \"value\": \"500+\",\n \"text\": \"500+\"\n }\n ],\n \"category\": \"3\"\n },\n {\n \"name\": \"facilityAddress\",\n \"displayName\": \"Facility Address\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"companyEntityType\",\n \"displayName\": \"Company Entity Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Branch office\",\n \"text\": \"Branch office\"\n },\n {\n \"value\": \"Company Limited by guarantee\",\n \"text\": \"Company Limited by guarantee\"\n },\n {\n \"value\": \"Enterprise or Sole Proprietorship\",\n \"text\": \"Enterprise or Sole Proprietorship\"\n },\n {\n \"value\": \"Foreign Companies\",\n \"text\": \"Foreign Companies\"\n },\n {\n \"value\": \"Limited Liability Partnership\",\n \"text\": \"Limited Liability Partnership\"\n },\n {\n \"value\": \"Partnership\",\n \"text\": \"Partnership\"\n },\n {\n \"value\": \"Private Limited Company (Sdn. Bhd.)\",\n \"text\": \"Private Limited Company (Sdn. Bhd.)\"\n },\n {\n \"value\": \"Public Limited Company (Bhd.)\",\n \"text\": \"Public Limited Company (Bhd.)\"\n },\n {\n \"value\": \"Proprietorship/ Partnership\",\n \"text\": \"Proprietorship/ Partnership\"\n }\n ],\n \"category\": \"3\"\n },\n {\n \"name\": \"tnbTariff\",\n \"displayName\": \"TNB Tariff\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"B\",\n \"text\": \"B\"\n },\n {\n \"value\": \"C1\",\n \"text\": \"C1\"\n },\n {\n \"value\": \"C2\",\n \"text\": \"C2\"\n },\n {\n \"value\": \"D\",\n \"text\": \"D\"\n },\n {\n \"value\": \"E1\",\n \"text\": \"E1\"\n },\n {\n \"value\": \"E2\",\n \"text\": \"E2\"\n },\n {\n \"value\": \"E3\",\n \"text\": \"E3\"\n },\n {\n \"value\": \"H\",\n \"text\": \"H\"\n },\n {\n \"value\": \"H1\",\n \"text\": \"H1\"\n },\n {\n \"value\": \"H2\",\n \"text\": \"H2\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"avgMaximumDemand\",\n \"displayName\": \"Average Maximum Demand\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"ctRatio\",\n \"displayName\": \"CT Ratio\",\n \"type\": \"text\",\n \"category\": \"4\"\n },\n {\n \"name\": \"buildingType\",\n \"displayName\": \"Building Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Warehouse/Factory\",\n \"text\": \"Warehouse/Factory\"\n },\n {\n \"value\": \"Office building/Shoplot\",\n \"text\": \"Office building/Shoplot\"\n },\n {\n \"value\": \"Shopping Mall/Complex\",\n \"text\": \"Shopping Mall/Complex\"\n },\n {\n \"value\": \"School\",\n \"text\": \"School\"\n },\n {\n \"value\": \"Other\",\n \"text\": \"Other\"\n }\n ],\n \"category\": \"3\"\n },\n {\n \"name\": \"tnbBills\",\n \"displayName\": \"TNB Bills\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"2\"\n },\n {\n \"name\": \"financingSelection\",\n \"displayName\": \"Financing Selection\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Loan\",\n \"text\": \"Loan\"\n },\n {\n \"value\": \"Leasing\",\n \"text\": \"Leasing\"\n },\n {\n \"value\": \"Extended Terms\",\n \"text\": \"Extended Terms\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"businessSector\",\n \"displayName\": \"Business Sector\",\n \"type\": \"text\",\n \"category\": \"5\"\n },\n {\n \"name\": \"companyBackground\",\n \"displayName\": \"Company Background\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"isApplication\",\n \"displayName\": \"Is Application\",\n \"type\": \"boolean\",\n \"category\": \"6\"\n },\n {\n \"name\": \"isReview\",\n \"displayName\": \"Is Review\",\n \"type\": \"boolean\",\n \"category\": \"6\"\n },\n {\n \"name\": \"addressLine1\",\n \"displayName\": \"Address Line 1\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"addressLine2\",\n \"displayName\": \"Address Line 2\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"addressLine3\",\n \"displayName\": \"Address Line 3\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"addressType\",\n \"displayName\": \"Address Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"P\",\n \"text\": \"Permanent\"\n },\n {\n \"value\": \"O\",\n \"text\": \"Office\"\n },\n {\n \"value\": \"R\",\n \"text\": \"Residence\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"city\",\n \"displayName\": \"City\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"country\",\n \"displayName\": \"Country\",\n \"type\": \"dropdown\",\n \"titleLocation\": \"hidden\",\n \"placeholder\": \"Country\",\n \"choices\": [\n {\n \"text\": \"Afghanistan\",\n \"value\": \"AFG\"\n },\n {\n \"text\": \"Angola\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"Albania\",\n \"value\": \"ALB\"\n },\n {\n \"text\": \"Andorra\",\n \"value\": \"AND\"\n },\n {\n \"text\": \"United Arab Emirates\",\n \"value\": \"UAE\"\n },\n {\n \"text\": \"Argentina\",\n \"value\": \"ARG\"\n },\n {\n \"text\": \"Armenia\",\n \"value\": \"ARM\"\n },\n {\n \"text\": \"Antigua and Barbuda\",\n \"value\": \"ANT\"\n },\n {\n \"text\": \"Australia\",\n \"value\": \"AUS\"\n },\n {\n \"text\": \"Austria\",\n \"value\": \"AUT\"\n },\n {\n \"text\": \"Azerbaijan\",\n \"value\": \"AZE\"\n },\n {\n \"text\": \"Burundi\",\n \"value\": \"BDI\"\n },\n {\n \"text\": \"Belgium\",\n \"value\": \"BEL\"\n },\n {\n \"text\": \"Benin\",\n \"value\": \"BEN\"\n },\n {\n \"text\": \"Burkina Faso\",\n \"value\": \"BFA\"\n },\n {\n \"text\": \"Bangladesh\",\n \"value\": \"BGD\"\n },\n {\n \"text\": \"Bulgaria\",\n \"value\": \"BUL\"\n },\n {\n \"text\": \"Bahrain\",\n \"value\": \"BRN\"\n },\n {\n \"text\": \"Bahamas\",\n \"value\": \"BAH\"\n },\n {\n \"text\": \"Bosnia and Herzegovina\",\n \"value\": \"BIH\"\n },\n {\n \"text\": \"Belarus\",\n \"value\": \"BLR\"\n },\n {\n \"text\": \"Belize\",\n \"value\": \"BIZ\"\n },\n {\n \"text\": \"Bolivia\",\n \"value\": \"BOL\"\n },\n {\n \"text\": \"Brazil\",\n \"value\": \"BRA\"\n },\n {\n \"text\": \"Barbados\",\n \"value\": \"BAR\"\n },\n {\n \"text\": \"Brunei\",\n \"value\": \"BRU\"\n },\n {\n \"text\": \"Bhutan\",\n \"value\": \"BHU\"\n },\n {\n \"text\": \"Botswana\",\n \"value\": \"BOT\"\n },\n {\n \"text\": \"Central African Republic\",\n \"value\": \"CAF\"\n },\n {\n \"text\": \"Canada\",\n \"value\": \"CAN\"\n },\n {\n \"text\": \"Switzerland\",\n \"value\": \"CHE\"\n },\n {\n \"text\": \"Chile\",\n \"value\": \"CHI\"\n },\n {\n \"text\": \"China\",\n \"value\": \"CHN\"\n },\n {\n \"text\": \"Ivory Coast\",\n \"value\": \"CIV\"\n },\n {\n \"text\": \"Cameroon\",\n \"value\": \"CMR\"\n },\n {\n \"text\": \"DR Congo\",\n \"value\": \"COD\"\n },\n {\n \"text\": \"Republic of the Congo\",\n \"value\": \"CGO\"\n },\n {\n \"text\": \"Colombia\",\n \"value\": \"COL\"\n },\n {\n \"text\": \"Comoros\",\n \"value\": \"COM\"\n },\n {\n \"text\": \"Cape Verde\",\n \"value\": \"CPV\"\n },\n {\n \"text\": \"Costa Rica\",\n \"value\": \"CRC\"\n },\n {\n \"text\": \"Cuba\",\n \"value\": \"CUB\"\n },\n {\n \"text\": \"Cyprus\",\n \"value\": \"CYP\"\n },\n {\n \"text\": \"Czechia\",\n \"value\": \"CZE\"\n },\n {\n \"text\": \"Germany\",\n \"value\": \"DEU\"\n },\n {\n \"text\": \"Djibouti\",\n \"value\": \"DJI\"\n },\n {\n \"text\": \"Dominica\",\n \"value\": \"DMA\"\n },\n {\n \"text\": \"Denmark\",\n \"value\": \"DEN\"\n },\n {\n \"text\": \"Dominican Republic\",\n \"value\": \"DOM\"\n },\n {\n \"text\": \"Algeria\",\n \"value\": \"ALG\"\n },\n {\n \"text\": \"Ecuador\",\n \"value\": \"ECU\"\n },\n {\n \"text\": \"Egypt\",\n \"value\": \"EGY\"\n },\n {\n \"text\": \"Eritrea\",\n \"value\": \"ERI\"\n },\n {\n \"text\": \"Spain\",\n \"value\": \"ESP\"\n },\n {\n \"text\": \"Estonia\",\n \"value\": \"EST\"\n },\n {\n \"text\": \"Ethiopia\",\n \"value\": \"ETH\"\n },\n {\n \"text\": \"Finland\",\n \"value\": \"FIN\"\n },\n {\n \"text\": \"Fiji\",\n \"value\": \"FIJ\"\n },\n {\n \"text\": \"France\",\n \"value\": \"FRA\"\n },\n {\n \"text\": \"Micronesia\",\n \"value\": \"FSM\"\n },\n {\n \"text\": \"Gabon\",\n \"value\": \"GAB\"\n },\n {\n \"text\": \"United Kingdom\",\n \"value\": \"GBR\"\n },\n {\n \"text\": \"Georgia\",\n \"value\": \"GEO\"\n },\n {\n \"text\": \"Ghana\",\n \"value\": \"GHA\"\n },\n {\n \"text\": \"Guinea\",\n \"value\": \"GUI\"\n },\n {\n \"text\": \"Gambia\",\n \"value\": \"GAM\"\n },\n {\n \"text\": \"Equatorial Guinea\",\n \"value\": \"GEQ\"\n },\n {\n \"text\": \"Greece\",\n \"value\": \"GRE\"\n },\n {\n \"text\": \"Grenada\",\n \"value\": \"GRN\"\n },\n {\n \"text\": \"Guatemala\",\n \"value\": \"GUA\"\n },\n {\n \"text\": \"Guyana\",\n \"value\": \"GUY\"\n },\n {\n \"text\": \"Honduras\",\n \"value\": \"HON\"\n },\n {\n \"text\": \"Croatia\",\n \"value\": \"CRO\"\n },\n {\n \"text\": \"Haiti\",\n \"value\": \"HAI\"\n },\n {\n \"text\": \"Hungary\",\n \"value\": \"HUN\"\n },\n {\n \"text\": \"Indonesia\",\n \"value\": \"INA\"\n },\n {\n \"text\": \"India\",\n \"value\": \"IND\"\n },\n {\n \"text\": \"Ireland\",\n \"value\": \"IRL\"\n },\n {\n \"text\": \"Iran\",\n \"value\": \"IRI\"\n },\n {\n \"text\": \"Iraq\",\n \"value\": \"IRQ\"\n },\n {\n \"text\": \"Iceland\",\n \"value\": \"ISL\"\n },\n {\n \"text\": \"Israel\",\n \"value\": \"ISR\"\n },\n {\n \"text\": \"Italy\",\n \"value\": \"ITA\"\n },\n {\n \"text\": \"Jamaica\",\n \"value\": \"JAM\"\n },\n {\n \"text\": \"Jordan\",\n \"value\": \"JOR\"\n },\n {\n \"text\": \"Japan\",\n \"value\": \"JPN\"\n },\n {\n \"text\": \"Kazakhstan\",\n \"value\": \"KAZ\"\n },\n {\n \"text\": \"Kenya\",\n \"value\": \"KEN\"\n },\n {\n \"text\": \"Kyrgyzstan\",\n \"value\": \"KGZ\"\n },\n {\n \"text\": \"Cambodia\",\n \"value\": \"KHM\"\n },\n {\n \"text\": \"Kiribati\",\n \"value\": \"KIR\"\n },\n {\n \"text\": \"Saint Kitts and Nevis\",\n \"value\": \"SKN\"\n },\n {\n \"text\": \"South Korea\",\n \"value\": \"KOR\"\n },\n {\n \"text\": \"Kuwait\",\n \"value\": \"KUW\"\n },\n {\n \"text\": \"Laos\",\n \"value\": \"LAO\"\n },\n {\n \"text\": \"Lebanon\",\n \"value\": \"LIB\"\n },\n {\n \"text\": \"Liberia\",\n \"value\": \"LBR\"\n },\n {\n \"text\": \"Libya\",\n \"value\": \"LBA\"\n },\n {\n \"text\": \"Saint Lucia\",\n \"value\": \"LCA\"\n },\n {\n \"text\": \"Liechtenstein\",\n \"value\": \"LIE\"\n },\n {\n \"text\": \"Sri Lanka\",\n \"value\": \"SRI\"\n },\n {\n \"text\": \"Lesotho\",\n \"value\": \"LES\"\n },\n {\n \"text\": \"Lithuania\",\n \"value\": \"LTU\"\n },\n {\n \"text\": \"Luxembourg\",\n \"value\": \"LUX\"\n },\n {\n \"text\": \"Latvia\",\n \"value\": \"LAT\"\n },\n {\n \"text\": \"Morocco\",\n \"value\": \"MAR\"\n },\n {\n \"text\": \"Monaco\",\n \"value\": \"MON\"\n },\n {\n \"text\": \"Moldova\",\n \"value\": \"MDA\"\n },\n {\n \"text\": \"Madagascar\",\n \"value\": \"MAD\"\n },\n {\n \"text\": \"Maldives\",\n \"value\": \"MDV\"\n },\n {\n \"text\": \"Mexico\",\n \"value\": \"MEX\"\n },\n {\n \"text\": \"Marshall Islands\",\n \"value\": \"MHL\"\n },\n {\n \"text\": \"North Macedonia\",\n \"value\": \"MKD\"\n },\n {\n \"text\": \"Mali\",\n \"value\": \"MLI\"\n },\n {\n \"text\": \"Malta\",\n \"value\": \"MLT\"\n },\n {\n \"text\": \"Myanmar\",\n \"value\": \"MYA\"\n },\n {\n \"text\": \"Montenegro\",\n \"value\": \"MNE\"\n },\n {\n \"text\": \"Mongolia\",\n \"value\": \"MGL\"\n },\n {\n \"text\": \"Mozambique\",\n \"value\": \"MOZ\"\n },\n {\n \"text\": \"Mauritania\",\n \"value\": \"MTN\"\n },\n {\n \"text\": \"Mauritius\",\n \"value\": \"MRI\"\n },\n {\n \"text\": \"Malawi\",\n \"value\": \"MAW\"\n },\n {\n \"text\": \"Malaysia\",\n \"value\": \"MAS\"\n },\n {\n \"text\": \"Namibia\",\n \"value\": \"NAM\"\n },\n {\n \"text\": \"Niger\",\n \"value\": \"NIG\"\n },\n {\n \"text\": \"Nigeria\",\n \"value\": \"NGR\"\n },\n {\n \"text\": \"Nicaragua\",\n \"value\": \"NCA\"\n },\n {\n \"text\": \"Netherlands\",\n \"value\": \"NED\"\n },\n {\n \"text\": \"Norway\",\n \"value\": \"NOR\"\n },\n {\n \"text\": \"Nepal\",\n \"value\": \"NEP\"\n },\n {\n \"text\": \"Nauru\",\n \"value\": \"NRU\"\n },\n {\n \"text\": \"New Zealand\",\n \"value\": \"NZL\"\n },\n {\n \"text\": \"Oman\",\n \"value\": \"OMA\"\n },\n {\n \"text\": \"Pakistan\",\n \"value\": \"PAK\"\n },\n {\n \"text\": \"Panama\",\n \"value\": \"PAN\"\n },\n {\n \"text\": \"Peru\",\n \"value\": \"PER\"\n },\n {\n \"text\": \"Philippines\",\n \"value\": \"PHI\"\n },\n {\n \"text\": \"Palau\",\n \"value\": \"PLW\"\n },\n {\n \"text\": \"Papua New Guinea\",\n \"value\": \"PNG\"\n },\n {\n \"text\": \"Poland\",\n \"value\": \"POL\"\n },\n {\n \"text\": \"North Korea\",\n \"value\": \"PRK\"\n },\n {\n \"text\": \"Portugal\",\n \"value\": \"POR\"\n },\n {\n \"text\": \"Paraguay\",\n \"value\": \"PAR\"\n },\n {\n \"text\": \"Qatar\",\n \"value\": \"QAT\"\n },\n {\n \"text\": \"Romania\",\n \"value\": \"ROU\"\n },\n {\n \"text\": \"Russia\",\n \"value\": \"RUS\"\n },\n {\n \"text\": \"Rwanda\",\n \"value\": \"RWA\"\n },\n {\n \"text\": \"Saudi Arabia\",\n \"value\": \"KSA\"\n },\n {\n \"text\": \"Sudan\",\n \"value\": \"SUD\"\n },\n {\n \"text\": \"Senegal\",\n \"value\": \"SEN\"\n },\n {\n \"text\": \"Singapore\",\n \"value\": \"SIN\"\n },\n {\n \"text\": \"Solomon Islands\",\n \"value\": \"SOL\"\n },\n {\n \"text\": \"Sierra Leone\",\n \"value\": \"SLE\"\n },\n {\n \"text\": \"El Salvador\",\n \"value\": \"ESA\"\n },\n {\n \"text\": \"San Marino\",\n \"value\": \"SMR\"\n },\n {\n \"text\": \"Somalia\",\n \"value\": \"SOM\"\n },\n {\n \"text\": \"Serbia\",\n \"value\": \"SRB\"\n },\n {\n \"text\": \"S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe\",\n \"value\": \"STP\"\n },\n {\n \"text\": \"Suriname\",\n \"value\": \"SUR\"\n },\n {\n \"text\": \"Slovakia\",\n \"value\": \"SVK\"\n },\n {\n \"text\": \"Slovenia\",\n \"value\": \"SLO\"\n },\n {\n \"text\": \"Sweden\",\n \"value\": \"SWE\"\n },\n {\n \"text\": \"Eswatini\",\n \"value\": \"SWZ\"\n },\n {\n \"text\": \"Seychelles\",\n \"value\": \"SEY\"\n },\n {\n \"text\": \"Syria\",\n \"value\": \"SYR\"\n },\n {\n \"text\": \"Chad\",\n \"value\": \"CHA\"\n },\n {\n \"text\": \"Togo\",\n \"value\": \"TOG\"\n },\n {\n \"text\": \"Thailand\",\n \"value\": \"THA\"\n },\n {\n \"text\": \"Tajikistan\",\n \"value\": \"TJK\"\n },\n {\n \"text\": \"Turkmenistan\",\n \"value\": \"TKM\"\n },\n {\n \"text\": \"Timor-Leste\",\n \"value\": \"TLS\"\n },\n {\n \"text\": \"Tonga\",\n \"value\": \"TGA\"\n },\n {\n \"text\": \"Trinidad and Tobago\",\n \"value\": \"TTO\"\n },\n {\n \"text\": \"Tunisia\",\n \"value\": \"TUN\"\n },\n {\n \"text\": \"Turkey\",\n \"value\": \"TUR\"\n },\n {\n \"text\": \"Tuvalu\",\n \"value\": \"TUV\"\n },\n {\n \"text\": \"Tanzania\",\n \"value\": \"TAN\"\n },\n {\n \"text\": \"Uganda\",\n \"value\": \"UGA\"\n },\n {\n \"text\": \"Ukraine\",\n \"value\": \"UKR\"\n },\n {\n \"text\": \"Uruguay\",\n \"value\": \"URU\"\n },\n {\n \"text\": \"United States\",\n \"value\": \"USA\"\n },\n {\n \"text\": \"Uzbekistan\",\n \"value\": \"UZB\"\n },\n {\n \"text\": \"Saint Vincent and the Grenadines\",\n \"value\": \"VIN\"\n },\n {\n \"text\": \"Venezuela\",\n \"value\": \"VEN\"\n },\n {\n \"text\": \"Vietnam\",\n \"value\": \"VIE\"\n },\n {\n \"text\": \"Vanuatu\",\n \"value\": \"VAN\"\n },\n {\n \"text\": \"Samoa\",\n \"value\": \"SAM\"\n },\n {\n \"text\": \"Yemen\",\n \"value\": \"YEM\"\n },\n {\n \"text\": \"South Africa\",\n \"value\": \"RSA\"\n },\n {\n \"text\": \"Zambia\",\n \"value\": \"ZAM\"\n },\n {\n \"text\": \"Zimbabwe\",\n \"value\": \"ZIM\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"durationInCurrentResidenceMth\",\n \"displayName\": \"Duration in Current Residence (Months)\",\n \"placeholder\": \"Duration in Current Residence (Months)\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 2,\n \"min\": 0,\n \"max\": 11,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|10|11)$\",\n \"text\": \"Value must be a number between 0-11.\"\n }\n ],\n \"inputType\": \"number\",\n \"category\": \"7\"\n },\n {\n \"name\": \"durationInCurrentResidenceYr\",\n \"displayName\": \"Duration in Current Residence (Years)\",\n \"placeholder\": \"Duration in Current Residence (Years)\",\n \"type\": \"text\",\n \"maxLength\": 2,\n \"min\": 0,\n \"max\": 99,\n \"inputType\": \"number\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|[1-9][0-9])$\",\n \"text\": \"Value must be a number between 0-99.\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"officePhoneNo\",\n \"displayName\": \"Employer Phone Number\",\n \"placeholder\": \"Employer Phone Number\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 12,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"The phone number must be a valid Malaysian number\",\n \"regex\": \"^(011[0-9]{8}|(60[4-7]|004|005|006|007|009|609|012|013|014|016|017|019)[0-9]{7})$\"\n }\n ],\n \"inputType\": \"tel\",\n \"category\": \"5\"\n },\n {\n \"name\": \"officePhoneNoAreaCode\",\n \"displayName\": \"Office Phone Number Area Code\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"8\"\n },\n {\n \"name\": \"postcode\",\n \"displayName\": \"Postcode\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"state\",\n \"displayName\": \"Permanent State\",\n \"placeholder\": \"Select State Of The Permanenet Address\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"A\",\n \"text\": \"PERAK\"\n },\n {\n \"value\": \"B\",\n \"text\": \"SELANGOR\"\n },\n {\n \"value\": \"C\",\n \"text\": \"PAHANG\"\n },\n {\n \"value\": \"D\",\n \"text\": \"KELANTAN\"\n },\n {\n \"value\": \"J\",\n \"text\": \"JOHOR\"\n },\n {\n \"value\": \"K\",\n \"text\": \"KEDAH\"\n },\n {\n \"value\": \"L\",\n \"text\": \"WP LABUAN\"\n },\n {\n \"value\": \"M\",\n \"text\": \"MELAKA\"\n },\n {\n \"value\": \"N\",\n \"text\": \"NEGERI SEMBILAN\"\n },\n {\n \"value\": \"P\",\n \"text\": \"PULAU PINANG\"\n },\n {\n \"value\": \"Q\",\n \"text\": \"SARAWAK\"\n },\n {\n \"value\": \"R\",\n \"text\": \"PERLIS\"\n },\n {\n \"value\": \"S\",\n \"text\": \"SABAH\"\n },\n {\n \"value\": \"T\",\n \"text\": \"TERENGGANU\"\n },\n {\n \"value\": \"U\",\n \"text\": \"WP PUTRAJAYA\"\n },\n {\n \"value\": \"W\",\n \"text\": \"WP KUALA LUMPUR\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"residenceAddress\",\n \"displayName\": \"Residence address same as permanent address?\",\n \"type\": \"boolean\",\n \"defaultValue\": false,\n \"requiredForEvaluation\": false,\n \"category\": \"7\"\n },\n {\n \"name\": \"officestate\",\n \"displayName\": \"Employer State\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"placeholder\": \"Select State Of The Employer Address\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"A\",\n \"text\": \"PERAK\"\n },\n {\n \"value\": \"B\",\n \"text\": \"SELANGOR\"\n },\n {\n \"value\": \"C\",\n \"text\": \"PAHANG\"\n },\n {\n \"value\": \"D\",\n \"text\": \"KELANTAN\"\n },\n {\n \"value\": \"J\",\n \"text\": \"JOHOR\"\n },\n {\n \"value\": \"K\",\n \"text\": \"KEDAH\"\n },\n {\n \"value\": \"L\",\n \"text\": \"WP LABUAN\"\n },\n {\n \"value\": \"M\",\n \"text\": \"MELAKA\"\n },\n {\n \"value\": \"N\",\n \"text\": \"NEGERI SEMBILAN\"\n },\n {\n \"value\": \"P\",\n \"text\": \"PULAU PINANG\"\n },\n {\n \"value\": \"Q\",\n \"text\": \"SARAWAK\"\n },\n {\n \"value\": \"R\",\n \"text\": \"PERLIS\"\n },\n {\n \"value\": \"S\",\n \"text\": \"SABAH\"\n },\n {\n \"value\": \"T\",\n \"text\": \"TERENGGANU\"\n },\n {\n \"value\": \"U\",\n \"text\": \"WP PUTRAJAYA\"\n },\n {\n \"value\": \"W\",\n \"text\": \"WP KUALA LUMPUR\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"type\": \"text\",\n \"name\": \"age\",\n \"title\": \"Age\",\n \"isRequired\": true,\n \"displayName\": \"Age\",\n \"visible\": false,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number age between 21 and 55.\",\n \"regex\": \"^(2[1-9]|[3-4][0-9]|55)$\"\n }\n ],\n \"defaultValue\": \"21\",\n \"category\": \"2\"\n },\n {\n \"name\": \"consentCrossSelling\",\n \"displayName\": \"Consent Cross-Selling, Consent to Obtain Information from CTOS and Disclosure of Information\",\n \"type\": \"boolean\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{consentCrossSelling} = true\",\n \"text\": \"You must provide consent to Consent Cross-Selling.\"\n }\n ],\n \"defaultValue\": false,\n \"showTitle\": true,\n \"category\": \"9\"\n },\n {\n \"type\": \"text\",\n \"name\": \"consentObtainInfoFromCtos\",\n \"displayName\": \"Consent to Obtain Information from CTOS\",\n \"defaultValue\": \"yes\",\n \"showTitle\": true,\n \"visible\": false,\n \"category\": \"9\"\n },\n {\n \"name\": \"dateJoined\",\n \"displayName\": \"Date Joined\",\n \"placeholder\": \"Date Joined\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 10,\n \"inputType\": \"date\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\",\n \"text\": \"Date must be in YYYY-MM-DD format\"\n },\n {\n \"type\": \"custom\",\n \"validator\": \"validateNotFutureDate\",\n \"text\": \"Date of joining cannot be in the future\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"disclosureOfInformation\",\n \"displayName\": \"Disclosure of Information\",\n \"type\": \"text\",\n \"defaultValue\": \"yes\",\n \"showTitle\": true,\n \"visible\": false,\n \"category\": \"9\"\n },\n {\n \"name\": \"educationLevel\",\n \"displayName\": \"Education Level\",\n \"placeholder\": \"Highest Education Level\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Primary\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Secondary/High school\"\n },\n {\n \"value\": \"03\",\n \"text\": \"College graduate-certificate/Diploma holder\"\n },\n {\n \"value\": \"04\",\n \"text\": \"University Degree/Associate Degree\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Master Degree\"\n },\n {\n \"value\": \"06\",\n \"text\": \"Doctorate\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"emerContactTelNo1\",\n \"displayName\": \"Emergency Contact Telephone Number 1\",\n \"startWithNewLine\": false,\n \"placeholder\": \"Emergency Contact Telephone Number 1\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^((60[4-79]|0[4-79])[0-9]{7}|011[0-9]{8}|01[2346789][0-9]{7})$\"\n }\n ],\n \"type\": \"text\",\n \"maxLength\": 18,\n \"inputType\": \"tel\",\n \"category\": \"8\"\n },\n {\n \"name\": \"emerContactTelNo1AreaCode\",\n \"displayName\": \"Emergency Contact Telephone Number 1 Area Code\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"8\"\n },\n {\n \"name\": \"emergencyContactName\",\n \"displayName\": \"Emergency Contact Name\",\n \"placeholder\": \"Emergency Contact Name\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"8\"\n },\n {\n \"name\": \"employerName\",\n \"displayName\": \"Employer Name\",\n \"placeholder\": \"Employer Name\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"5\"\n },\n {\n \"name\": \"employmentSector\",\n \"displayName\": \"Employment Sector\",\n \"placeholder\": \"Select Employment Sector\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"0010\",\n \"text\": \"Accounting\"\n },\n {\n \"value\": \"0020\",\n \"text\": \"Actuarial / Statistic\"\n },\n {\n \"value\": \"0030\",\n \"text\": \"Advertising / Marketing / PR\"\n },\n {\n \"value\": \"0040\",\n \"text\": \"Aerospace\"\n },\n {\n \"value\": \"0050\",\n \"text\": \"Agricultural / Chemicals / Forest Products\"\n },\n {\n \"value\": \"0060\",\n \"text\": \"Architecture\"\n },\n {\n \"value\": \"0070\",\n \"text\": \"Automotive / Manufacturing / Production\"\n },\n {\n \"value\": \"0080\",\n \"text\": \"Aviation\"\n },\n {\n \"value\": \"0090\",\n \"text\": \"Buying / Retail\"\n },\n {\n \"value\": \"0100\",\n \"text\": \"Computers / Electronics\"\n },\n {\n \"value\": \"0110\",\n \"text\": \"Construction\"\n },\n {\n \"value\": \"0120\",\n \"text\": \"Creative / Graphics\"\n },\n {\n \"value\": \"0130\",\n \"text\": \"Customer Service\"\n },\n {\n \"value\": \"0140\",\n \"text\": \"Education (includes students) / Training\"\n },\n {\n \"value\": \"0150\",\n \"text\": \"Energy / Mining\"\n },\n {\n \"value\": \"0160\",\n \"text\": \"Engineering\"\n },\n {\n \"value\": \"0170\",\n \"text\": \"Finance / Banking / Insurance\"\n },\n {\n \"value\": \"0180\",\n \"text\": \"Freight / Shipping\"\n },\n {\n \"value\": \"0190\",\n \"text\": \"Government / Military / Public Service\"\n },\n {\n \"value\": \"0200\",\n \"text\": \"Recreation / Hospitality / Sports\"\n },\n {\n \"value\": \"0210\",\n \"text\": \"Hotel / Food\"\n },\n {\n \"value\": \"0220\",\n \"text\": \"Human Resources\"\n },\n {\n \"value\": \"0230\",\n \"text\": \"Investment\"\n },\n {\n \"value\": \"0240\",\n \"text\": \"Journalist / Editor\"\n },\n {\n \"value\": \"0250\",\n \"text\": \"Media / Publishing\"\n },\n {\n \"value\": \"0260\",\n \"text\": \"Medical / Health Services\"\n },\n {\n \"value\": \"0270\",\n \"text\": \"Non-Profit Organization\"\n },\n {\n \"value\": \"0280\",\n \"text\": \"Geology\"\n },\n {\n \"value\": \"0290\",\n \"text\": \"Pharmaceuticals\"\n },\n {\n \"value\": \"0300\",\n \"text\": \"Real Estate\"\n },\n {\n \"value\": \"0310\",\n \"text\": \"Administrative and Support Service Activities\"\n },\n {\n \"value\": \"0320\",\n \"text\": \"Social Services\"\n },\n {\n \"value\": \"0330\",\n \"text\": \"Telecommunications / Networking\"\n },\n {\n \"value\": \"0340\",\n \"text\": \"Travel\"\n },\n {\n \"value\": \"0350\",\n \"text\": \"Transportation\"\n },\n {\n \"value\": \"0360\",\n \"text\": \"Entertainment / Arts\"\n },\n {\n \"value\": \"0370\",\n \"text\": \"Electricity, Gas, Steam and Air Conditioning Supply\"\n },\n {\n \"value\": \"0380\",\n \"text\": \"Water Supply; Sewerage, Waste Management and Remediation Activities\"\n },\n {\n \"value\": \"0390\",\n \"text\": \"Activities of Households as Employers; Undifferentiated Goods and Services Producing Activities of Households for Own Use\"\n },\n {\n \"value\": \"0400\",\n \"text\": \"Activities of Extraterritorial Organisations and Bodies\"\n },\n {\n \"value\": \"0410\",\n \"text\": \"Unemployed/ Outside Labour Force\"\n },\n {\n \"value\": \"0420\",\n \"text\": \"Other Service Activities\"\n },\n {\n \"value\": \"0430\",\n \"text\": \"Legal Services\"\n },\n {\n \"value\": \"0440\",\n \"text\": \"Research & Experimental Development Services\"\n },\n {\n \"value\": \"0450\",\n \"text\": \"Other Professional, Scientific and Technical Activities\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"employmentStatus\",\n \"displayName\": \"Employment Status\",\n \"placeholder\": \"Select Employment Status\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '08', '09']\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"CON\",\n \"text\": \"Contract\"\n },\n {\n \"value\": \"FRL\",\n \"text\": \"Freelance\"\n },\n {\n \"value\": \"OTH\",\n \"text\": \"Others\"\n },\n {\n \"value\": \"PER\",\n \"text\": \"Permanent\"\n },\n {\n \"value\": \"PRT\",\n \"text\": \"Part Time\"\n },\n {\n \"value\": \"TMP\",\n \"text\": \"Temporary\"\n },\n {\n \"value\": \"UPROB\",\n \"text\": \"Under Probation\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"employmentType\",\n \"displayName\": \"Employment Type\",\n \"placeholder\": \"Select Employment Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Private Employee\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Employer\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Housewife\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Retired\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Student\"\n },\n {\n \"value\": \"06\",\n \"text\": \"Unemployed\"\n },\n {\n \"value\": \"07\",\n \"text\": \"Self-employed/Own Account Worker\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Government Employee\"\n },\n {\n \"value\": \"09\",\n \"text\": \"Reporting Entity Employee\"\n },\n {\n \"value\": \"10\",\n \"text\": \"Unpaid Family Worker\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"gender\",\n \"displayName\": \"Gender\",\n \"placeholder\": \"Select Gender\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"M\",\n \"text\": \"Male\"\n },\n {\n \"value\": \"F\",\n \"text\": \"Female\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"idType\",\n \"displayName\": \"ID Type\",\n \"type\": \"dropdown\",\n \"defaultValue\": \"MyKad\",\n \"choices\": [\n {\n \"value\": \"MK\",\n \"text\": \"MyKad\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"lengthOfServiceMonth\",\n \"displayName\": \"Length of Service (Months)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"5\"\n },\n {\n \"name\": \"lengthOfServiceYear\",\n \"displayName\": \"Length of Service (Years)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"5\"\n },\n {\n \"name\": \"mailingBillingAddressInd\",\n \"displayName\": \"Preferred Mailing Address\",\n \"placeholder\": \"Select Preferred Mailing Address\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"O\",\n \"text\": \"Office\"\n },\n {\n \"value\": \"R\",\n \"text\": \"Residence\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"maritalStatus\",\n \"displayName\": \"Marital Status\",\n \"placeholder\": \"Select Marital Status\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"S\",\n \"text\": \"Single\"\n },\n {\n \"value\": \"M\",\n \"text\": \"Married\"\n },\n {\n \"value\": \"W\",\n \"text\": \"Widowed\"\n },\n {\n \"value\": \"D\",\n \"text\": \"Divorced\"\n },\n {\n \"value\": \"E\",\n \"text\": \"Separated\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"monthlyGrossIncome\",\n \"displayName\": \"Monthly Gross Income\",\n \"placeholder\": \"E.g. 6000\",\n \"visibleIf\": \"{employmentType} anyof ['01', '07', '08', '09', '10']\",\n \"type\": \"text\",\n \"maxLength\": 15,\n \"inputType\": \"number\",\n \"min\": 2000,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d+(\\\\.\\\\d+)?$\",\n \"text\": \"Please enter a valid non-negative number.\"\n },\n {\n \"type\": \"expression\",\n \"expression\": \"{monthlyGrossIncome} >= 2000\",\n \"text\": \"Income must be at least RM 2000.\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"monthlyNetIncome\",\n \"displayName\": \"Monthly Net Income\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"nationality\",\n \"displayName\": \"Nationality\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"noOfDependants\",\n \"displayName\": \"Number of Dependants\",\n \"placeholder\": \"Number Of Dependants\",\n \"type\": \"text\",\n \"startWithNewLine\": false,\n \"maxLength\": 3,\n \"inputType\": \"number\",\n \"min\": 0,\n \"max\": 99,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number between 0 and 99.\",\n \"regex\": \"^[0-9][0-9]?$\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"occupation\",\n \"displayName\": \"Occupation\",\n \"placeholder\": \"Select Occupation\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"001\",\n \"text\": \"Accountant\"\n },\n {\n \"value\": \"005\",\n \"text\": \"Army Officer\"\n },\n {\n \"value\": \"007\",\n \"text\": \"Assistant Director\"\n },\n {\n \"value\": \"008\",\n \"text\": \"Assistant Manager\"\n },\n {\n \"value\": \"009\",\n \"text\": \"Auditor\"\n },\n {\n \"value\": \"010\",\n \"text\": \"Baker\"\n },\n {\n \"value\": \"011\",\n \"text\": \"Beautician\"\n },\n {\n \"value\": \"012\",\n \"text\": \"Broker\"\n },\n {\n \"value\": \"013\",\n \"text\": \"Business Partner\"\n },\n {\n \"value\": \"014\",\n \"text\": \"Businessman/Businesswoman\"\n },\n {\n \"value\": \"015\",\n \"text\": \"Carpenter\"\n },\n {\n \"value\": \"016\",\n \"text\": \"Cashier\"\n },\n {\n \"value\": \"017\",\n \"text\": \"CEO\"\n },\n {\n \"value\": \"018\",\n \"text\": \"Chairman\"\n },\n {\n \"value\": \"019\",\n \"text\": \"Chief Accountant\"\n },\n {\n \"value\": \"020\",\n \"text\": \"Chief Auditor\"\n },\n {\n \"value\": \"022\",\n \"text\": \"Co-Director\"\n },\n {\n \"value\": \"023\",\n \"text\": \"Consultant\"\n },\n {\n \"value\": \"024\",\n \"text\": \"Contractor\"\n },\n {\n \"value\": \"025\",\n \"text\": \"Financial Controller\"\n },\n {\n \"value\": \"026\",\n \"text\": \"Coordinator\"\n },\n {\n \"value\": \"027\",\n \"text\": \"Copywriter\"\n },\n {\n \"value\": \"028\",\n \"text\": \"Dealer/Distributor\"\n },\n {\n \"value\": \"029\",\n \"text\": \"Dentist\"\n },\n {\n \"value\": \"031\",\n \"text\": \"Despatch\"\n },\n {\n \"value\": \"032\",\n \"text\": \"Detective\"\n },\n {\n \"value\": \"034\",\n \"text\": \"Diplomat\"\n },\n {\n \"value\": \"035\",\n \"text\": \"Director\"\n },\n {\n \"value\": \"036\",\n \"text\": \"Doctor\"\n },\n {\n \"value\": \"038\",\n \"text\": \"Electrician\"\n },\n {\n \"value\": \"040\",\n \"text\": \"Executive\"\n },\n {\n \"value\": \"041\",\n \"text\": \"Executive Director\"\n },\n {\n \"value\": \"042\",\n \"text\": \"Exporter\"\n },\n {\n \"value\": \"043\",\n \"text\": \"Farmer\"\n },\n {\n \"value\": \"044\",\n \"text\": \"Foreman\"\n },\n {\n \"value\": \"045\",\n \"text\": \"Gardener\"\n },\n {\n \"value\": \"046\",\n \"text\": \"General Manager\"\n },\n {\n \"value\": \"047\",\n \"text\": \"Goldsmith\"\n },\n {\n \"value\": \"048\",\n \"text\": \"Hairdresser\"\n },\n {\n \"value\": \"049\",\n \"text\": \"Hawker\"\n },\n {\n \"value\": \"050\",\n \"text\": \"Housewife\"\n },\n {\n \"value\": \"051\",\n \"text\": \"Homemaker\"\n },\n {\n \"value\": \"053\",\n \"text\": \"Investor\"\n },\n {\n \"value\": \"054\",\n \"text\": \"Jeweller\"\n },\n {\n \"value\": \"055\",\n \"text\": \"Judge\"\n },\n {\n \"value\": \"057\",\n \"text\": \"Lawyer/Barrister/Solicitor\"\n },\n {\n \"value\": \"058\",\n \"text\": \"Lender\"\n },\n {\n \"value\": \"060\",\n \"text\": \"Managing Director\"\n },\n {\n \"value\": \"061\",\n \"text\": \"Manufacturer\"\n },\n {\n \"value\": \"063\",\n \"text\": \"Money Lender\"\n },\n {\n \"value\": \"064\",\n \"text\": \"Money-Changer\"\n },\n {\n \"value\": \"068\",\n \"text\": \"Owner/Co-Owner\"\n },\n {\n \"value\": \"070\",\n \"text\": \"Partner\"\n },\n {\n \"value\": \"071\",\n \"text\": \"Pastor\"\n },\n {\n \"value\": \"072\",\n \"text\": \"Physician\"\n },\n {\n \"value\": \"073\",\n \"text\": \"Plumber\"\n },\n {\n \"value\": \"075\",\n \"text\": \"Principal\"\n },\n {\n \"value\": \"076\",\n \"text\": \"Programmer\"\n },\n {\n \"value\": \"077\",\n \"text\": \"Quantity Surveyor\"\n },\n {\n \"value\": \"078\",\n \"text\": \"Remiser\"\n },\n {\n \"value\": \"079\",\n \"text\": \"Retailer\"\n },\n {\n \"value\": \"080\",\n \"text\": \"Retiree\"\n },\n {\n \"value\": \"082\",\n \"text\": \"Secretary\"\n },\n {\n \"value\": \"083\",\n \"text\": \"Self-Employed\"\n },\n {\n \"value\": \"084\",\n \"text\": \"Smallholder\"\n },\n {\n \"value\": \"085\",\n \"text\": \"Stockbroker\"\n },\n {\n \"value\": \"086\",\n \"text\": \"Store-Keeper\"\n },\n {\n \"value\": \"087\",\n \"text\": \"Student\"\n },\n {\n \"value\": \"088\",\n \"text\": \"Sub-contractor\"\n },\n {\n \"value\": \"090\",\n \"text\": \"Supplier\"\n },\n {\n \"value\": \"091\",\n \"text\": \"Tailor/Dressmaker\"\n },\n {\n \"value\": \"094\",\n \"text\": \"Tourist Guide\"\n },\n {\n \"value\": \"095\",\n \"text\": \"Trader\"\n },\n {\n \"value\": \"096\",\n \"text\": \"Valuer\"\n },\n {\n \"value\": \"097\",\n \"text\": \"Vice President\"\n },\n {\n \"value\": \"098\",\n \"text\": \"Waiter/Waitress\"\n },\n {\n \"value\": \"099\",\n \"text\": \"Welder\"\n },\n {\n \"value\": \"100\",\n \"text\": \"Wholesaler\"\n },\n {\n \"value\": \"101\",\n \"text\": \"Fisherman\"\n },\n {\n \"value\": \"102\",\n \"text\": \"Grocer\"\n },\n {\n \"value\": \"104\",\n \"text\": \"Unemployed\"\n },\n {\n \"value\": \"105\",\n \"text\": \"Babysitter\"\n },\n {\n \"value\": \"107\",\n \"text\": \"Sole Proprietor\"\n },\n {\n \"value\": \"108\",\n \"text\": \"Politician\"\n },\n {\n \"value\": \"109\",\n \"text\": \"Actor\"\n },\n {\n \"value\": \"110\",\n \"text\": \"Adjusters\"\n },\n {\n \"value\": \"111\",\n \"text\": \"Air Hostess\"\n },\n {\n \"value\": \"112\",\n \"text\": \"Aquaculture\"\n },\n {\n \"value\": \"115\",\n \"text\": \"Athlete\"\n },\n {\n \"value\": \"116\",\n \"text\": \"Auctioneer\"\n },\n {\n \"value\": \"117\",\n \"text\": \"Author\"\n },\n {\n \"value\": \"118\",\n \"text\": \"Bell Boy\"\n },\n {\n \"value\": \"119\",\n \"text\": \"Biographer\"\n },\n {\n \"value\": \"120\",\n \"text\": \"Butcher\"\n },\n {\n \"value\": \"121\",\n \"text\": \"Catering\"\n },\n {\n \"value\": \"122\",\n \"text\": \"Chargeman\"\n },\n {\n \"value\": \"123\",\n \"text\": \"Chemist, Physicist\"\n },\n {\n \"value\": \"124\",\n \"text\": \"Choreographer/Dancer\"\n },\n {\n \"value\": \"125\",\n \"text\": \"Circus Performer\"\n },\n {\n \"value\": \"126\",\n \"text\": \"Civil Servant\"\n },\n {\n \"value\": \"127\",\n \"text\": \"Clergy\"\n },\n {\n \"value\": \"128\",\n \"text\": \"Coach\"\n },\n {\n \"value\": \"129\",\n \"text\": \"Composer\"\n },\n {\n \"value\": \"130\",\n \"text\": \"Decorator\"\n },\n {\n \"value\": \"131\",\n \"text\": \"Direct Sales\"\n },\n {\n \"value\": \"132\",\n \"text\": \"Economist\"\n },\n {\n \"value\": \"133\",\n \"text\": \"Editor\"\n },\n {\n \"value\": \"135\",\n \"text\": \"Fireman\"\n },\n {\n \"value\": \"136\",\n \"text\": \"Fishmonger\"\n },\n {\n \"value\": \"137\",\n \"text\": \"Florist\"\n },\n {\n \"value\": \"138\",\n \"text\": \"Forestry\"\n },\n {\n \"value\": \"139\",\n \"text\": \"Freight Forwarding Services\"\n },\n {\n \"value\": \"140\",\n \"text\": \"General Worker\"\n },\n {\n \"value\": \"142\",\n \"text\": \"Hunter\"\n },\n {\n \"value\": \"143\",\n \"text\": \"Journalist\"\n },\n {\n \"value\": \"144\",\n \"text\": \"Launderer/Dry Cleaner\"\n },\n {\n \"value\": \"145\",\n \"text\": \"Librarian/Curator\"\n },\n {\n \"value\": \"146\",\n \"text\": \"Locksmith\"\n },\n {\n \"value\": \"147\",\n \"text\": \"Magician\"\n },\n {\n \"value\": \"149\",\n \"text\": \"Model\"\n },\n {\n \"value\": \"150\",\n \"text\": \"Newscaster\"\n },\n {\n \"value\": \"151\",\n \"text\": \"NGO Staff/Volunteer\"\n },\n {\n \"value\": \"152\",\n \"text\": \"Nursery Worker & Gardener\"\n },\n {\n \"value\": \"154\",\n \"text\": \"Pharmacist\"\n },\n {\n \"value\": \"155\",\n \"text\": \"Photographer\"\n },\n {\n \"value\": \"156\",\n \"text\": \"Postman\"\n },\n {\n \"value\": \"157\",\n \"text\": \"Priest/Nun\"\n },\n {\n \"value\": \"158\",\n \"text\": \"Promoter\"\n },\n {\n \"value\": \"159\",\n \"text\": \"Proof Reader\"\n },\n {\n \"value\": \"160\",\n \"text\": \"Psychiatrist\"\n },\n {\n \"value\": \"161\",\n \"text\": \"Psychologist\"\n },\n {\n \"value\": \"162\",\n \"text\": \"Sailor\"\n },\n {\n \"value\": \"163\",\n \"text\": \"Security/Bodyguard\"\n },\n {\n \"value\": \"164\",\n \"text\": \"Shop Assistant\"\n },\n {\n \"value\": \"165\",\n \"text\": \"Singer\"\n },\n {\n \"value\": \"166\",\n \"text\": \"Social Worker\"\n },\n {\n \"value\": \"168\",\n \"text\": \"Town Planner\"\n },\n {\n \"value\": \"169\",\n \"text\": \"Translator/Interpreter\"\n },\n {\n \"value\": \"170\",\n \"text\": \"Upholsterer\"\n },\n {\n \"value\": \"171\",\n \"text\": \"Warden\"\n },\n {\n \"value\": \"172\",\n \"text\": \"Bank Officer\"\n },\n {\n \"value\": \"175\",\n \"text\": \"Astronaut/Astronomer/Astrologer\"\n },\n {\n \"value\": \"176\",\n \"text\": \"President\"\n },\n {\n \"value\": \"200\",\n \"text\": \"Production and Manufacturing Managers\"\n },\n {\n \"value\": \"201\",\n \"text\": \"Hospitality, Retail and Other Services Managers\"\n },\n {\n \"value\": \"202\",\n \"text\": \"Information and Communications Technology Managers\"\n },\n {\n \"value\": \"203\",\n \"text\": \"Services Managers\"\n },\n {\n \"value\": \"204\",\n \"text\": \"Meteorologists and Seismologists\"\n },\n {\n \"value\": \"205\",\n \"text\": \"Geologists and Geophysicists\"\n },\n {\n \"value\": \"206\",\n \"text\": \"Farming, Forestry and Fisheries Advisers\"\n },\n {\n \"value\": \"207\",\n \"text\": \"Other Life Science Professionals\"\n },\n {\n \"value\": \"208\",\n \"text\": \"Landscape Architects\"\n },\n {\n \"value\": \"209\",\n \"text\": \"Product and Garment Designers\"\n },\n {\n \"value\": \"210\",\n \"text\": \"Graphic and Multimedia Designers\"\n },\n {\n \"value\": \"211\",\n \"text\": \"Ships Engineers\"\n },\n {\n \"value\": \"212\",\n \"text\": \"Aircraft Pilots and Related Professionals\"\n },\n {\n \"value\": \"213\",\n \"text\": \"Other Ship, Aircraft and Train/Locomotive Controllers\"\n },\n {\n \"value\": \"214\",\n \"text\": \"University and Higher Education Teachers\"\n },\n {\n \"value\": \"215\",\n \"text\": \"Vocational Education Teachers\"\n },\n {\n \"value\": \"216\",\n \"text\": \"Secondary Education Teachers\"\n },\n {\n \"value\": \"217\",\n \"text\": \"Primary School and Early Childhood Teachers\"\n },\n {\n \"value\": \"218\",\n \"text\": \"Music, Arts and Performing Arts Teachers\"\n },\n {\n \"value\": \"219\",\n \"text\": \"Language Teachers\"\n },\n {\n \"value\": \"220\",\n \"text\": \"Technology Skill and Technical Trainers\"\n },\n {\n \"value\": \"221\",\n \"text\": \"System Analysts\"\n },\n {\n \"value\": \"222\",\n \"text\": \"Web and Multimedia Developers\"\n },\n {\n \"value\": \"223\",\n \"text\": \"Software and Applications Developers and Analysts n.e.c.\"\n },\n {\n \"value\": \"224\",\n \"text\": \"Database Designers and Administrators\"\n },\n {\n \"value\": \"225\",\n \"text\": \"Information Technology System Administrators\"\n },\n {\n \"value\": \"226\",\n \"text\": \"Other Database and Network Professionals\"\n },\n {\n \"value\": \"227\",\n \"text\": \"Legal Professionals n.e.c.\"\n },\n {\n \"value\": \"228\",\n \"text\": \"Sociologists, Anthropologists and Related Professionals\"\n },\n {\n \"value\": \"229\",\n \"text\": \"Philosophers, Historians and Political Scientists\"\n },\n {\n \"value\": \"230\",\n \"text\": \"Film, Stage and Related Directors and Producers\"\n },\n {\n \"value\": \"231\",\n \"text\": \"Animals Keepers and Trainers\"\n },\n {\n \"value\": \"232\",\n \"text\": \"Professional Customs and Border Inspectors\"\n },\n {\n \"value\": \"233\",\n \"text\": \"Professional Taxation and Excise Officials\"\n },\n {\n \"value\": \"234\",\n \"text\": \"Professional Government Social Benefits Officials\"\n },\n {\n \"value\": \"235\",\n \"text\": \"Professional Government Licensing Officials\"\n },\n {\n \"value\": \"236\",\n \"text\": \"Professional Civil Defence Officials\"\n },\n {\n \"value\": \"237\",\n \"text\": \"Physical and Engineering Science Technicians\"\n },\n {\n \"value\": \"238\",\n \"text\": \"Mining, Manufacturing and Construction Supervisors\"\n },\n {\n \"value\": \"239\",\n \"text\": \"Process Control Technicians\"\n },\n {\n \"value\": \"240\",\n \"text\": \"Life Science Technicians and Related Associate Professionals\"\n },\n {\n \"value\": \"241\",\n \"text\": \"Ship, Aircraft and Train Technicians\"\n },\n {\n \"value\": \"242\",\n \"text\": \"Nuclear Science Associate Professionals\"\n },\n {\n \"value\": \"243\",\n \"text\": \"Medical and Pharmaceutical Technicians\"\n },\n {\n \"value\": \"244\",\n \"text\": \"Traditional and Complementary Medicine Associate Professionals\"\n },\n {\n \"value\": \"245\",\n \"text\": \"Veterinary Technicians and Assistants\"\n },\n {\n \"value\": \"246\",\n \"text\": \"Dental Assistants and Therapists\"\n },\n {\n \"value\": \"247\",\n \"text\": \"Medical Records and Health Information Technicians\"\n },\n {\n \"value\": \"248\",\n \"text\": \"Dispensing Opticians\"\n },\n {\n \"value\": \"249\",\n \"text\": \"Physiotherapy Technicians and Assistants\"\n },\n {\n \"value\": \"250\",\n \"text\": \"Medical Assistants\"\n },\n {\n \"value\": \"251\",\n \"text\": \"Health Associate Professionals Not Elsewhere Classified\"\n },\n {\n \"value\": \"252\",\n \"text\": \"Statistical, Mathematical and Actuarial Associate Professionals\"\n },\n {\n \"value\": \"253\",\n \"text\": \"Insurance Agent\"\n },\n {\n \"value\": \"254\",\n \"text\": \"Commercial Sales Agent\"\n },\n {\n \"value\": \"255\",\n \"text\": \"Buyers\"\n },\n {\n \"value\": \"256\",\n \"text\": \"Administrative Associate Professionals\"\n },\n {\n \"value\": \"257\",\n \"text\": \"Administrative and Executive Secretaries\"\n },\n {\n \"value\": \"258\",\n \"text\": \"Other Administrative and Specialized Associate Professionals\"\n },\n {\n \"value\": \"259\",\n \"text\": \"Legal Associate Professionals\"\n },\n {\n \"value\": \"260\",\n \"text\": \"Social and Religious Associate Professionals\"\n },\n {\n \"value\": \"261\",\n \"text\": \"Fitness and Recreation Instructors and Program Leaders\"\n },\n {\n \"value\": \"262\",\n \"text\": \"Gallery, Museum and Library Technicians\"\n },\n {\n \"value\": \"263\",\n \"text\": \"Cultural Associate Professionals\"\n },\n {\n \"value\": \"264\",\n \"text\": \"Artistic and Cultural Associate Professionals Not Elsewhere Classified\"\n },\n {\n \"value\": \"265\",\n \"text\": \"Customs and Border Inspector Associate Professionals\"\n },\n {\n \"value\": \"266\",\n \"text\": \"Taxation and Excise Official Associate Professionals\"\n },\n {\n \"value\": \"267\",\n \"text\": \"Government Social Benefit Official Associate Professionals\"\n },\n {\n \"value\": \"268\",\n \"text\": \"Government Licensing Official Associate Professionals\"\n },\n {\n \"value\": \"269\",\n \"text\": \"Civil Defence Associate Professionals\"\n },\n {\n \"value\": \"270\",\n \"text\": \"General Office Clerks\"\n },\n {\n \"value\": \"271\",\n \"text\": \"Data Entry Clerks\"\n },\n {\n \"value\": \"272\",\n \"text\": \"Bank Tellers and Related Clerks\"\n },\n {\n \"value\": \"273\",\n \"text\": \"Travel Consultants and Related Clerks\"\n },\n {\n \"value\": \"274\",\n \"text\": \"Contact/Call Centre Information Clerks\"\n },\n {\n \"value\": \"275\",\n \"text\": \"Telephone Switchboard Operators\"\n },\n {\n \"value\": \"276\",\n \"text\": \"Receptionists\"\n },\n {\n \"value\": \"277\",\n \"text\": \"Enquiry Clerks\"\n },\n {\n \"value\": \"278\",\n \"text\": \"Numerical and Material Recording Clerks\"\n },\n {\n \"value\": \"279\",\n \"text\": \"Transport Conductors\"\n },\n {\n \"value\": \"280\",\n \"text\": \"Cooks\"\n },\n {\n \"value\": \"281\",\n \"text\": \"Building and Housekeeping Supervisors\"\n },\n {\n \"value\": \"282\",\n \"text\": \"Street Food Salespersons\"\n },\n {\n \"value\": \"283\",\n \"text\": \"Sales Demonstrators\"\n },\n {\n \"value\": \"284\",\n \"text\": \"Teachers Aide\"\n },\n {\n \"value\": \"285\",\n \"text\": \"Personal Care Workers in Health Services Not Elsewhere Classified\"\n },\n {\n \"value\": \"286\",\n \"text\": \"Immigration/Custom Officers and Assistants\"\n },\n {\n \"value\": \"287\",\n \"text\": \"Protective Services Workers n.e.c.\"\n },\n {\n \"value\": \"288\",\n \"text\": \"Livestock and Dairy Producers\"\n },\n {\n \"value\": \"289\",\n \"text\": \"Animal Producers and Related Workers Not Elsewhere Classified\"\n },\n {\n \"value\": \"290\",\n \"text\": \"Mixed Crop and Animal Producers\"\n },\n {\n \"value\": \"291\",\n \"text\": \"Subsistence Farmers, Fishermen, Hunters and Gatherers\"\n },\n {\n \"value\": \"292\",\n \"text\": \"House Builders\"\n },\n {\n \"value\": \"293\",\n \"text\": \"Air Conditioning and Refrigeration Mechanics\"\n },\n {\n \"value\": \"294\",\n \"text\": \"Other Building Finishers and Related Trades Workers\"\n },\n {\n \"value\": \"295\",\n \"text\": \"Spray Painters and Varnishers\"\n },\n {\n \"value\": \"296\",\n \"text\": \"Building Structure Cleaners\"\n },\n {\n \"value\": \"297\",\n \"text\": \"Metal Moulders and Coremakers\"\n },\n {\n \"value\": \"298\",\n \"text\": \"Other Sheet and Structural Metal Workers, Moulders, Welders and Related Workers\"\n },\n {\n \"value\": \"299\",\n \"text\": \"Metal Working Machine Tool Setters and Operators\"\n },\n {\n \"value\": \"300\",\n \"text\": \"Aircraft Engine Mechanics and Repairers\"\n },\n {\n \"value\": \"301\",\n \"text\": \"Agricultural and Industrial Machinery Mechanics and Repairers\"\n },\n {\n \"value\": \"302\",\n \"text\": \"Bicycle and Related Repairers\"\n },\n {\n \"value\": \"303\",\n \"text\": \"Machinery Mechanics and Repairers Not Elsewhere Classified\"\n },\n {\n \"value\": \"304\",\n \"text\": \"Sign Writers, Decorative Painters, Engravers and Etchers\"\n },\n {\n \"value\": \"305\",\n \"text\": \"Pre-press Workers\"\n },\n {\n \"value\": \"306\",\n \"text\": \"Other Printing Trades Workers\"\n },\n {\n \"value\": \"307\",\n \"text\": \"Electrical Mechanics and Fitters\"\n },\n {\n \"value\": \"308\",\n \"text\": \"Electronics Mechanics and Servicers\"\n },\n {\n \"value\": \"309\",\n \"text\": \"Information and Communications Technology Installers and Services\"\n },\n {\n \"value\": \"310\",\n \"text\": \"Other Food Processing and Related Trades Workers\"\n },\n {\n \"value\": \"311\",\n \"text\": \"Woodworking-Machine Tool Setters and Operators\"\n },\n {\n \"value\": \"312\",\n \"text\": \"Other Wood Treaters, Cabinet-Makers and Related Trades Workers\"\n },\n {\n \"value\": \"313\",\n \"text\": \"Other Garment and Related Trades Workers\"\n },\n {\n \"value\": \"314\",\n \"text\": \"Other Craft and Related Workers\"\n },\n {\n \"value\": \"315\",\n \"text\": \"Stationary Plant and Machine Operators\"\n },\n {\n \"value\": \"316\",\n \"text\": \"Mechanical Machinery Assemblers\"\n },\n {\n \"value\": \"317\",\n \"text\": \"Assemblers Not Elsewhere Classified\"\n },\n {\n \"value\": \"318\",\n \"text\": \"Machine-Tool Setter-Operators\"\n },\n {\n \"value\": \"319\",\n \"text\": \"Locomotive Engine Drivers\"\n },\n {\n \"value\": \"320\",\n \"text\": \"Railway Brake, Signal and Switch Operators\"\n },\n {\n \"value\": \"321\",\n \"text\": \"Heavy Truck and Bus Drivers\"\n },\n {\n \"value\": \"322\",\n \"text\": \"Mobile Plant Operators\"\n },\n {\n \"value\": \"323\",\n \"text\": \"Mining and Construction Labourers\"\n },\n {\n \"value\": \"324\",\n \"text\": \"Hand and Pedal Vehicle Drivers\"\n },\n {\n \"value\": \"325\",\n \"text\": \"Animal-Drawn Machinery and Vehicle Drivers\"\n },\n {\n \"value\": \"326\",\n \"text\": \"Transport and Storage Labourers\"\n },\n {\n \"value\": \"327\",\n \"text\": \"Shelf Fillers\"\n },\n {\n \"value\": \"328\",\n \"text\": \"Food Preparation Assistant\"\n },\n {\n \"value\": \"329\",\n \"text\": \"Street and Related Sales and Services Workers\"\n },\n {\n \"value\": \"330\",\n \"text\": \"Refuse Workers and Other Elementary Workers\"\n },\n {\n \"value\": \"331\",\n \"text\": \"Nursing and Midwifery Associate Professionals\"\n },\n {\n \"value\": \"332\",\n \"text\": \"Police Officers - Protective Service Workers\"\n },\n {\n \"value\": \"333\",\n \"text\": \"Other Outside Labour Force\"\n },\n {\n \"value\": \"334\",\n \"text\": \"Financial and Investment Advisers\"\n },\n {\n \"value\": \"335\",\n \"text\": \"Business Services Agent\"\n },\n {\n \"value\": \"336\",\n \"text\": \"Health Care Assistants\"\n },\n {\n \"value\": \"337\",\n \"text\": \"Other Clerical Support Workers\"\n },\n {\n \"value\": \"338\",\n \"text\": \"Interior Designers and Decorators\"\n },\n {\n \"value\": \"339\",\n \"text\": \"Software Developers\"\n },\n {\n \"value\": \"340\",\n \"text\": \"Car, Van and Motorcycle Drivers\"\n },\n {\n \"value\": \"341\",\n \"text\": \"Engineering Professionals (including Electrotechnology)\"\n },\n {\n \"value\": \"342\",\n \"text\": \"Driving Instructors\"\n },\n {\n \"value\": \"343\",\n \"text\": \"Manufacturing Labourers\"\n },\n {\n \"value\": \"344\",\n \"text\": \"Administrative and Commercial Managers\"\n },\n {\n \"value\": \"345\",\n \"text\": \"Motor Vehicle Mechanics and Repairers\"\n },\n {\n \"value\": \"346\",\n \"text\": \"Nursing and Midwifery Professionals\"\n },\n {\n \"value\": \"347\",\n \"text\": \"Typist and Word Processor Operators\"\n },\n {\n \"value\": \"348\",\n \"text\": \"Painters and Related Workers\"\n },\n {\n \"value\": \"349\",\n \"text\": \"Police Officers\"\n },\n {\n \"value\": \"350\",\n \"text\": \"Stall and Market Salespersons\"\n },\n {\n \"value\": \"351\",\n \"text\": \"Shop Supervisors\"\n },\n {\n \"value\": \"352\",\n \"text\": \"Other Teaching Professionals\"\n },\n {\n \"value\": \"353\",\n \"text\": \"Information and Communications Technicians\"\n },\n {\n \"value\": \"354\",\n \"text\": \"Ships Deck Officers and Pilots\"\n },\n {\n \"value\": \"355\",\n \"text\": \"Chefs\"\n },\n {\n \"value\": \"356\",\n \"text\": \"Building Architects\"\n },\n {\n \"value\": \"357\",\n \"text\": \"Visual Artists\"\n },\n {\n \"value\": \"358\",\n \"text\": \"Creative and Performing Artists n.e.c.\"\n },\n {\n \"value\": \"359\",\n \"text\": \"Regulatory Government Professionals Not Elsewhere Classified\"\n },\n {\n \"value\": \"360\",\n \"text\": \"Cleaners and Helpers\"\n },\n {\n \"value\": \"361\",\n \"text\": \"Optometrists and Ophthalmic Opticians\"\n },\n {\n \"value\": \"362\",\n \"text\": \"Mathematicians, Actuaries and Statisticians\"\n },\n {\n \"value\": \"363\",\n \"text\": \"Financial Analysts\"\n },\n {\n \"value\": \"364\",\n \"text\": \"Administrative Professional\"\n },\n {\n \"value\": \"365\",\n \"text\": \"Other Legislators and Senior Officials\"\n },\n {\n \"value\": \"366\",\n \"text\": \"Personal Assistant\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"preferredLanguage\",\n \"displayName\": \"Preferred Language\",\n \"placeholder\": \"Select Preferred Language\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"English\"\n },\n {\n \"value\": \" 02\",\n \"text\": \"Bahasa\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"race\",\n \"displayName\": \"Race\",\n \"placeholder\": \"Select Race\",\n \"type\": \"dropdown\",\n \"startWithNewLine\": false,\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Malaysian - Chinese\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Malaysian - Bumiputra - Malay\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Malaysian - Bumiputra - Non Malay\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Malaysian - Indian\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Malaysian - Other Race\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"relationshiptoContactName\",\n \"displayName\": \"Relationship to Contact Name\",\n \"type\": \"dropdown\",\n \"placeholder\": \"Relationship to contact Name\",\n \"choices\": [\n {\n \"value\": \"07\",\n \"text\": \"Father\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Mother\"\n },\n {\n \"value\": \"09\",\n \"text\": \"Brother\"\n },\n {\n \"value\": \"10\",\n \"text\": \"Sister\"\n },\n {\n \"value\": \"11\",\n \"text\": \"Spouse\"\n },\n {\n \"value\": \"12\",\n \"text\": \"Son\"\n },\n {\n \"value\": \"13\",\n \"text\": \"Daughter\"\n },\n {\n \"value\": \"14\",\n \"text\": \"Uncle\"\n },\n {\n \"value\": \"15\",\n \"text\": \"Aunt\"\n },\n {\n \"value\": \"40\",\n \"text\": \"Relative\"\n }\n ],\n \"category\": \"8\"\n },\n {\n \"name\": \"residenceType\",\n \"displayName\": \"Residence Type\",\n \"placeholder\": \"Residence Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"PL0001\",\n \"text\": \"Own Property\"\n },\n {\n \"value\": \"PL0002\",\n \"text\": \"Mortgaged\"\n },\n {\n \"value\": \"PL0003\",\n \"text\": \"Employers\"\n },\n {\n \"value\": \"PL0004\",\n \"text\": \"Rented\"\n },\n {\n \"value\": \"PL0005\",\n \"text\": \"Parents\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"salutation\",\n \"displayName\": \"Salutation\",\n \"placeholder\": \"Select Salutation\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"002\",\n \"text\": \"CIK\"\n },\n {\n \"value\": \"004\",\n \"text\": \"DATIN\"\n },\n {\n \"value\": \"009\",\n \"text\": \"Datin Seri\"\n },\n {\n \"value\": \"011\",\n \"text\": \"DATO`\"\n },\n {\n \"value\": \"018\",\n \"text\": \"DATO SERI\"\n },\n {\n \"value\": \"023\",\n \"text\": \"DATUK\"\n },\n {\n \"value\": \"028\",\n \"text\": \"DOCTOR\"\n },\n {\n \"value\": \"033\",\n \"text\": \"ENCIK\"\n },\n {\n \"value\": \"043\",\n \"text\": \"DYTM\"\n },\n {\n \"value\": \"053\",\n \"text\": \"MADAM\"\n },\n {\n \"value\": \"061\",\n \"text\": \"MISS\"\n },\n {\n \"value\": \"062\",\n \"text\": \"MR\"\n },\n {\n \"value\": \"072\",\n \"text\": \"PUAN\"\n },\n {\n \"value\": \"075\",\n \"text\": \"PUAN SRI\"\n },\n {\n \"value\": \"079\",\n \"text\": \"TAN SRI\"\n },\n {\n \"value\": \"090\",\n \"text\": \"Toh Puan\"\n },\n {\n \"value\": \"102\",\n \"text\": \"YAM\"\n },\n {\n \"value\": \"151\",\n \"text\": \"DATO SRI\"\n },\n {\n \"value\": \"157\",\n \"text\": \"TYT TUN DATUK SERI PANGLIMA\"\n },\n {\n \"value\": \"158\",\n \"text\": \"Ms\"\n },\n {\n \"value\": \"159\",\n \"text\": \"KDYTM\"\n }\n ],\n \"category\": \"2\"\n },\n {\n \"name\": \"sourceOfWealth\",\n \"displayName\": \"Source of Wealth\",\n \"placeholder\": \"Source of Wealth\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Accumulated Saving\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Employment income\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Inheritance\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Trust Fund\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Retirement Income\"\n },\n {\n \"value\": \"06\",\n \"text\": \"EPF\"\n },\n {\n \"value\": \"07\",\n \"text\": \"Disposal of Assets/Shares\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Insurance Maturity/Surrender\"\n },\n {\n \"value\": \"09\",\n \"text\": \"Return on investment\"\n },\n {\n \"value\": \"10\",\n \"text\": \"Legal Settlement\"\n },\n {\n \"value\": \"11\",\n \"text\": \"Income from own business\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"statementType\",\n \"displayName\": \"Statement Type\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"E\",\n \"text\": \"Email\"\n },\n {\n \"value\": \"R\",\n \"text\": \"RHB Now\"\n }\n ],\n \"category\": \"10\"\n },\n {\n \"name\": \"subEmploymentSector\",\n \"displayName\": \"Sub Employment Sector\",\n \"placeholder\": \"Select Sub Employment Sector\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"0011\",\n \"text\": \"Accounting\"\n },\n {\n \"value\": \"0021\",\n \"text\": \"Actuarial / Statistic\"\n },\n {\n \"value\": \"0031\",\n \"text\": \"Advertising\"\n },\n {\n \"value\": \"0032\",\n \"text\": \"Public Relations\"\n },\n {\n \"value\": \"0041\",\n \"text\": \"Aerospace\"\n },\n {\n \"value\": \"0051\",\n \"text\": \"Agricultural / Chemicals / Forest Products\"\n },\n {\n \"value\": \"0052\",\n \"text\": \"Support activities to agriculture and post-harvest crops activities\"\n },\n {\n \"value\": \"0053\",\n \"text\": \"Growing paddy, sugar cane, vegetables and melons, roots, tubers, perennial crops\"\n },\n {\n \"value\": \"0054\",\n \"text\": \"Raising of animals\"\n },\n {\n \"value\": \"0055\",\n \"text\": \"Mixed farming\"\n },\n {\n \"value\": \"0056\",\n \"text\": \"Fishing / aquaculture\"\n },\n {\n \"value\": \"0057\",\n \"text\": \"Plantation (e.g. oil palm, rubber tree, cocoa, coconut etc.)\"\n },\n {\n \"value\": \"0058\",\n \"text\": \"Silviculture and forestry activities\"\n },\n {\n \"value\": \"0059\",\n \"text\": \"Veterinary activities\"\n },\n {\n \"value\": \"0061\",\n \"text\": \"Architecture\"\n },\n {\n \"value\": \"0062\",\n \"text\": \"Engineering Services\"\n },\n {\n \"value\": \"0063\",\n \"text\": \"Engineering technical services\"\n },\n {\n \"value\": \"0064\",\n \"text\": \"Surveying Services\"\n },\n {\n \"value\": \"0071\",\n \"text\": \"Manufacture of Switchgear and Switchboard Apparatus\"\n },\n {\n \"value\": \"0072\",\n \"text\": \"Manufacture of Insulated wire and cable\"\n },\n {\n \"value\": \"0073\",\n \"text\": \"Manufacture of TV radio communication equipment\"\n },\n {\n \"value\": \"0074\",\n \"text\": \"Manufacture of Typesetting; Platemaking and Related Services\"\n },\n {\n \"value\": \"0075\",\n \"text\": \"Manufacture of Aircraft and related machinery\"\n },\n {\n \"value\": \"0076\",\n \"text\": \"Manufacture of Consumer goods & Pharmaceuticals\"\n },\n {\n \"value\": \"0077\",\n \"text\": \"Manufacture of jewellery, bijouterie & related articles\"\n },\n {\n \"value\": \"0078\",\n \"text\": \"Manufacture of machinery/ motor vehicles/ other transport equipment\"\n },\n {\n \"value\": \"0079\",\n \"text\": \"Manufacture of other fabricated metal product\"\n },\n {\n \"value\": \"0081\",\n \"text\": \"Aviation\"\n },\n {\n \"value\": \"0091\",\n \"text\": \"Radio, Television, and Consumer Electronics Stores\"\n },\n {\n \"value\": \"0092\",\n \"text\": \"Retail garments / apparels\"\n },\n {\n \"value\": \"0093\",\n \"text\": \"Household goods\"\n },\n {\n \"value\": \"0094\",\n \"text\": \"Furniture stores\"\n },\n {\n \"value\": \"0095\",\n \"text\": \"Retail sale of Chinaware Glassware\"\n },\n {\n \"value\": \"0096\",\n \"text\": \"Other retail trade (except for motor vehicle, f&b, health care and grocery)\"\n },\n {\n \"value\": \"0097\",\n \"text\": \"Other retail sale in non-specialized stores\"\n },\n {\n \"value\": \"0098\",\n \"text\": \"Retail sale of beer, wine and spirits\"\n },\n {\n \"value\": \"0099\",\n \"text\": \"Retail sale of tobacco products in specialized store\"\n },\n {\n \"value\": \"0101\",\n \"text\": \"Radio and Television Repair Shops\"\n },\n {\n \"value\": \"0102\",\n \"text\": \"Repair Shops and Related Services, N.E.C.;\"\n },\n {\n \"value\": \"0103\",\n \"text\": \"Refrigeration and Air-Conditioning Service and Repair Shops;\"\n },\n {\n \"value\": \"0104\",\n \"text\": \"Computer related activities;\"\n },\n {\n \"value\": \"0105\",\n \"text\": \"Electrical and Electronic Repair Shops, N.E.C\"\n },\n {\n \"value\": \"00110\",\n \"text\": \"Construction of other civil engineering projects (specialised)\"\n },\n {\n \"value\": \"0111\",\n \"text\": \"Building Construction\"\n },\n {\n \"value\": \"00111\",\n \"text\": \"Construction of other civil engineering projects (not specialised)\"\n },\n {\n \"value\": \"00112\",\n \"text\": \"Electrical, Installation and plumbing\"\n },\n {\n \"value\": \"00113\",\n \"text\": \"Demolition and site preparation\"\n },\n {\n \"value\": \"00114\",\n \"text\": \"Construction of utility projects\"\n },\n {\n \"value\": \"0114\",\n \"text\": \"Construction of Residential house (landed property)\"\n },\n {\n \"value\": \"00115\",\n \"text\": \"Other specialized construction activities\"\n },\n {\n \"value\": \"0115\",\n \"text\": \"Construction of other residentials\"\n },\n {\n \"value\": \"00116\",\n \"text\": \"Roofing, Siding, and Sheet Metal Work\"\n },\n {\n \"value\": \"0116\",\n \"text\": \"Construction of industrial building & factories\"\n },\n {\n \"value\": \"00117\",\n \"text\": \"Water, Sewer, Pipeline, and Communications and Power Line Construction\"\n },\n {\n \"value\": \"0117\",\n \"text\": \"Construction of office buildings\"\n },\n {\n \"value\": \"00118\",\n \"text\": \"Assembly and erection of prefabricated constructions on the site\"\n },\n {\n \"value\": \"0118\",\n \"text\": \"Construction of commercial complex\"\n },\n {\n \"value\": \"0119\",\n \"text\": \"Construction of infrastructure\"\n },\n {\n \"value\": \"00119\",\n \"text\": \"Construction of hotels\"\n },\n {\n \"value\": \"00120\",\n \"text\": \"Construction of condominiums/apartments\"\n },\n {\n \"value\": \"0121\",\n \"text\": \"Creative / Graphics\"\n },\n {\n \"value\": \"0131\",\n \"text\": \"Customer Service\"\n },\n {\n \"value\": \"0141\",\n \"text\": \"Higher Education with significant reliance on foreign/international students\"\n },\n {\n \"value\": \"0142\",\n \"text\": \"Higher Education with no significant reliance on foreign students\"\n },\n {\n \"value\": \"0143\",\n \"text\": \"Administration of the State and the economic and social policy of the community\"\n },\n {\n \"value\": \"0144\",\n \"text\": \"Public - Pre school, primary and secondary level education\"\n },\n {\n \"value\": \"0145\",\n \"text\": \"Private - Pre school, primary and secondary level education\"\n },\n {\n \"value\": \"0151\",\n \"text\": \"O&G - Upstream i.e. drilling, extraction, exploration and field services\"\n },\n {\n \"value\": \"0152\",\n \"text\": \"O&G - Other than Upstream\"\n },\n {\n \"value\": \"0153\",\n \"text\": \"Mining of iron ores and other non-ferrous metal ores\"\n },\n {\n \"value\": \"0154\",\n \"text\": \"Stonequarrying, clay & sand pits\"\n },\n {\n \"value\": \"155\",\n \"text\": \"Chemical & fertilizer mining\"\n },\n {\n \"value\": \"0155\",\n \"text\": \"Chemical & fertiliser mining\"\n },\n {\n \"value\": \"156\",\n \"text\": \"Other than oil and gas\"\n },\n {\n \"value\": \"0156\",\n \"text\": \"Other than oil and gas\"\n },\n {\n \"value\": \"161\",\n \"text\": \"Engineering Services & Engineering Technical Services\"\n },\n {\n \"value\": \"0161\",\n \"text\": \"Engineering Services & Engineering Technical Services\"\n },\n {\n \"value\": \"171\",\n \"text\": \"Banking services\"\n },\n {\n \"value\": \"0171\",\n \"text\": \"Banking services\"\n },\n {\n \"value\": \"172\",\n \"text\": \"Finance services\"\n },\n {\n \"value\": \"0172\",\n \"text\": \"Finance services\"\n },\n {\n \"value\": \"0173\",\n \"text\": \"Insurance services\"\n },\n {\n \"value\": \"173\",\n \"text\": \"Insurance services\"\n },\n {\n \"value\": \"0174\",\n \"text\": \"Money lenders / Money Changers/ Remittance Services/ Money Transmitter/ Check Cashing Business/ Currency Exchange\"\n },\n {\n \"value\": \"0175\",\n \"text\": \"Pawnshop\"\n },\n {\n \"value\": \"0176\",\n \"text\": \"Activity of holding companies\"\n },\n {\n \"value\": \"0177\",\n \"text\": \"Financial leasing activities\"\n },\n {\n \"value\": \"0178\",\n \"text\": \"Finance - credit card services\"\n },\n {\n \"value\": \"0179\",\n \"text\": \"Consultancy services\"\n },\n {\n \"value\": \"0181\",\n \"text\": \"Freight Forwarding Services\"\n },\n {\n \"value\": \"0191\",\n \"text\": \"Government\"\n },\n {\n \"value\": \"0192\",\n \"text\": \"Public Service\"\n },\n {\n \"value\": \"0193\",\n \"text\": \"Military\"\n },\n {\n \"value\": \"0201\",\n \"text\": \"Tourism & Hospitality\"\n },\n {\n \"value\": \"0202\",\n \"text\": \"Recreational related services / activities\"\n },\n {\n \"value\": \"0211\",\n \"text\": \"Food Service Activities\"\n },\n {\n \"value\": \"0212\",\n \"text\": \"Organization Hotel, Lodging Houses, chalet, rest house, homestay, Inn, motels, rooming sporting, and recreational camp\"\n },\n {\n \"value\": \"0213\",\n \"text\": \"Other short term accommodation not mentioned above\"\n },\n {\n \"value\": \"0214\",\n \"text\": \"Restaurants, bars and canteens\"\n },\n {\n \"value\": \"0215\",\n \"text\": \"Restaurant, bar (other discretionary items and significant reliance on dine-in)\"\n },\n {\n \"value\": \"0216\",\n \"text\": \"Event catering and other food service activities\"\n },\n {\n \"value\": \"0217\",\n \"text\": \"Eating Places, Except Food Service, Institutional\"\n },\n {\n \"value\": \"0221\",\n \"text\": \"Human Resources\"\n },\n {\n \"value\": \"0231\",\n \"text\": \"Investment advisory services\"\n },\n {\n \"value\": \"0241\",\n \"text\": \"Journalist / Editor\"\n },\n {\n \"value\": \"0251\",\n \"text\": \"Motion picture, video and television programme production, sound recording and music publishing activities\"\n },\n {\n \"value\": \"0252\",\n \"text\": \"Programming and broadcasting activities\"\n },\n {\n \"value\": \"0253\",\n \"text\": \"News agency activities\"\n },\n {\n \"value\": \"0254\",\n \"text\": \"Media, culture and recreational activities\"\n },\n {\n \"value\": \"0261\",\n \"text\": \"Medical / Health Services\"\n },\n {\n \"value\": \"0262\",\n \"text\": \"Kidney Dialysis Centers\"\n },\n {\n \"value\": \"0263\",\n \"text\": \"Intermediate Care Facilities\"\n },\n {\n \"value\": \"0264\",\n \"text\": \"Home Health Care Services Facilities\"\n },\n {\n \"value\": \"0271\",\n \"text\": \"Non-Profit Organization\"\n },\n {\n \"value\": \"0281\",\n \"text\": \"Geology\"\n },\n {\n \"value\": \"0291\",\n \"text\": \"Pharmaceuticals products\"\n },\n {\n \"value\": \"0301\",\n \"text\": \"Real estate operations - shopping complex\"\n },\n {\n \"value\": \"0302\",\n \"text\": \"Appraisal services for real estate\"\n },\n {\n \"value\": \"0303\",\n \"text\": \"Real estate activities on a fee or contract basis\"\n },\n {\n \"value\": \"0304\",\n \"text\": \"Buying, selling, renting and operating of residential buildings or land\"\n },\n {\n \"value\": \"0305\",\n \"text\": \"Real estate operations - shophouse\"\n },\n {\n \"value\": \"0306\",\n \"text\": \"Real estate Operation - Industrial building & factories\"\n },\n {\n \"value\": \"0307\",\n \"text\": \"Real estate Operation - office building\"\n },\n {\n \"value\": \"0308\",\n \"text\": \"Real estate Operation - other commercial building\"\n },\n {\n \"value\": \"0309\",\n \"text\": \"Real estate operation not related above\"\n },\n {\n \"value\": \"0311\",\n \"text\": \"Administrative and Support Service Activities\"\n },\n {\n \"value\": \"0321\",\n \"text\": \"Social Work Activites\"\n },\n {\n \"value\": \"0331\",\n \"text\": \"Wired / Wireless telecommunications activities\"\n },\n {\n \"value\": \"0341\",\n \"text\": \"Tour operators\"\n },\n {\n \"value\": \"0342\",\n \"text\": \"Travel Agencies\"\n },\n {\n \"value\": \"0351\",\n \"text\": \"Rail transport\"\n },\n {\n \"value\": \"0352\",\n \"text\": \"Transportation Services, N.E.C.\"\n },\n {\n \"value\": \"0353\",\n \"text\": \"Service activities incidental to land / road transportation\"\n },\n {\n \"value\": \"0354\",\n \"text\": \"Scheduled and Non-Scheduled Air Transport (Transport of passengers by air over regular routes and on regular schedules)\"\n },\n {\n \"value\": \"0355\",\n \"text\": \"Aircrafts, Aircraft engine / parts, space vehicles\"\n },\n {\n \"value\": \"0356\",\n \"text\": \"Tanks and Tank components\"\n },\n {\n \"value\": \"0357\",\n \"text\": \"Warehousing and storage\"\n },\n {\n \"value\": \"0358\",\n \"text\": \"Water transport\"\n },\n {\n \"value\": \"0359\",\n \"text\": \"Other transportation support activities n.e.c. (e.g. arranging transportation services, terminal maintenance services, etc)\"\n },\n {\n \"value\": \"0361\",\n \"text\": \"Casinos including Junket Operators\"\n },\n {\n \"value\": \"0362\",\n \"text\": \"Karaoke lounges, internet cafe or video arcade\"\n },\n {\n \"value\": \"0363\",\n \"text\": \"Amusement and Recreation Services\"\n },\n {\n \"value\": \"0364\",\n \"text\": \"Membership Sports and Recreation Clubs\"\n },\n {\n \"value\": \"0365\",\n \"text\": \"Entertainment services\"\n },\n {\n \"value\": \"0366\",\n \"text\": \"Arts & Theatrical\"\n },\n {\n \"value\": \"0371\",\n \"text\": \"Electricty power generation\"\n },\n {\n \"value\": \"0372\",\n \"text\": \"Steam and air conditioning supply\"\n },\n {\n \"value\": \"0373\",\n \"text\": \"Water collection, treatment and supply\"\n },\n {\n \"value\": \"0381\",\n \"text\": \"Water Supply\"\n },\n {\n \"value\": \"0382\",\n \"text\": \"Sewerage\"\n },\n {\n \"value\": \"0383\",\n \"text\": \"Waste Management and Remediation Activities\"\n },\n {\n \"value\": \"0384\",\n \"text\": \"Recycling of non-metal (including rubber & textile fibre)\"\n },\n {\n \"value\": \"0385\",\n \"text\": \"Recycling of tin and other metal waste and scrap\"\n },\n {\n \"value\": \"0391\",\n \"text\": \"Activities of Households as Employers; Undifferentiated Goods and Services Producing Activities of Households for Own Use\"\n },\n {\n \"value\": \"0401\",\n \"text\": \"Activities of Extraterritorial Organisations and Bodies\"\n },\n {\n \"value\": \"0411\",\n \"text\": \"Unemployed/ Outside Labour Force\"\n },\n {\n \"value\": \"0421\",\n \"text\": \"Activities of membership organisations (Political/Religious/Trade Union)\"\n },\n {\n \"value\": \"0422\",\n \"text\": \"International Business Corporations and other similar entities\"\n },\n {\n \"value\": \"0423\",\n \"text\": \"Business Activities - Intermediary activities - trustee/ nominee/ agent OR Shell Companies\"\n },\n {\n \"value\": \"0424\",\n \"text\": \"Other Services\"\n },\n {\n \"value\": \"0425\",\n \"text\": \"Offshore Corporations (or their subsidiaries) and bank set up in tax and/or secrecy havens\"\n },\n {\n \"value\": \"0426\",\n \"text\": \"Building Cleaning and Maintenance Services, N.E.C.\"\n },\n {\n \"value\": \"0427\",\n \"text\": \"Detective, Guard, and Armored Car Services\"\n },\n {\n \"value\": \"0428\",\n \"text\": \"Rental, Leasing and Packaging ( tour operator, reservation services and related activities, Organisation of conventions and trade shows)\"\n },\n {\n \"value\": \"0429\",\n \"text\": \"Funeral Service and Crematories\"\n },\n {\n \"value\": \"0431\",\n \"text\": \"Legal Services\"\n },\n {\n \"value\": \"0441\",\n \"text\": \"Research & Experiemental Development Services\"\n },\n {\n \"value\": \"0451\",\n \"text\": \"Other Professional, scientific and Technical activities\"\n },\n {\n \"value\": \"00510\",\n \"text\": \"Hunting, trapping and related service activities\"\n },\n {\n \"value\": \"00511\",\n \"text\": \"Logging\"\n },\n {\n \"value\": \"00710\",\n \"text\": \"Manufacture of watches and clocks\"\n },\n {\n \"value\": \"0711\",\n \"text\": \"Manufacture of others\"\n },\n {\n \"value\": \"00711\",\n \"text\": \"Manufacture of others\"\n },\n {\n \"value\": \"0712\",\n \"text\": \"Maintenance and repair of motor vehicles\"\n },\n {\n \"value\": \"00712\",\n \"text\": \"Maintenance and repair of motor vehicles\"\n },\n {\n \"value\": \"0713\",\n \"text\": \"Manufacture of furniture\"\n },\n {\n \"value\": \"00713\",\n \"text\": \"Manufacture of furniture\"\n },\n {\n \"value\": \"0714\",\n \"text\": \"Manufacture of packaging and stretch film\"\n },\n {\n \"value\": \"00714\",\n \"text\": \"Manufacture of packaging and stretch film\"\n },\n {\n \"value\": \"0715\",\n \"text\": \"Manufacture of plastic product\"\n },\n {\n \"value\": \"00715\",\n \"text\": \"Manufacture of plastic product\"\n },\n {\n \"value\": \"0716\",\n \"text\": \"Manufacture of rubber product\"\n },\n {\n \"value\": \"00716\",\n \"text\": \"Manufacture of rubber product\"\n },\n {\n \"value\": \"00717\",\n \"text\": \"Manufacture of processed food or beverages products\"\n },\n {\n \"value\": \"0717\",\n \"text\": \"Manufacture of processed food or beverages products\"\n },\n {\n \"value\": \"00718\",\n \"text\": \"Manufacture of wood product except furniture\"\n },\n {\n \"value\": \"0718\",\n \"text\": \"Manufacture of wood product except furniture\"\n },\n {\n \"value\": \"00719\",\n \"text\": \"Manufacture of refined petroleum products\"\n },\n {\n \"value\": \"0719\",\n \"text\": \"Manufacture of refined petroleum products\"\n },\n {\n \"value\": \"00720\",\n \"text\": \"Manufacture of chemicals and chemical products (except for refined petroleum products)\"\n },\n {\n \"value\": \"0720\",\n \"text\": \"Manufacture of chemicals and chemical products (except for refined petroleum products)\"\n },\n {\n \"value\": \"00721\",\n \"text\": \"Manufacture of electrical equipment or components\"\n },\n {\n \"value\": \"00722\",\n \"text\": \"Manufacture of dairy food\"\n },\n {\n \"value\": \"00723\",\n \"text\": \"Manufacture of grain mills\"\n },\n {\n \"value\": \"00724\",\n \"text\": \"Manufacture of other food product (except dairy food and grain mills, starches and starch products)\"\n },\n {\n \"value\": \"00725\",\n \"text\": \"Manufacture of vegetable and animal oils and fats\"\n },\n {\n \"value\": \"00726\",\n \"text\": \"Manufacture of textiles\"\n },\n {\n \"value\": \"00727\",\n \"text\": \"Manufacture of footwear\"\n },\n {\n \"value\": \"00728\",\n \"text\": \"Manufacture of building materials\"\n },\n {\n \"value\": \"00729\",\n \"text\": \"Manufacture of glass and glass products\"\n },\n {\n \"value\": \"00730\",\n \"text\": \"Manufacture of mineral products\"\n },\n {\n \"value\": \"00731\",\n \"text\": \"Manufacture of medical and dental instruments and supplies\"\n },\n {\n \"value\": \"00732\",\n \"text\": \"Manufacturing of automobile or autopart\"\n },\n {\n \"value\": \"00733\",\n \"text\": \"Manufacture of paper and paper products\"\n },\n {\n \"value\": \"00734\",\n \"text\": \"Manufacture of gas and distribution of gaseous fuels through mains\"\n },\n {\n \"value\": \"00735\",\n \"text\": \"Manufacture of fertiliser pesticides\"\n },\n {\n \"value\": \"00736\",\n \"text\": \"Production of natural mineral water and other bottled water\"\n },\n {\n \"value\": \"00901\",\n \"text\": \"Retail trade not in stores, stalls or markets\"\n },\n {\n \"value\": \"00902\",\n \"text\": \"Retail sale via stalls and markets\"\n },\n {\n \"value\": \"00903\",\n \"text\": \"Wholesale of beer, wine and spirits\"\n },\n {\n \"value\": \"00904\",\n \"text\": \"Wholesale of tobacco, cigar, cigarettes\"\n },\n {\n \"value\": \"00905\",\n \"text\": \"Wholesale of construction and civil engineering machinery and equipment\"\n },\n {\n \"value\": \"00906\",\n \"text\": \"Wholesale of other machinery for use in industry, trade and navigation and other services n.e.c.\"\n },\n {\n \"value\": \"00907\",\n \"text\": \"Motor Vehicle dealer (Used)\"\n },\n {\n \"value\": \"00908\",\n \"text\": \"Jewel / Gem / Precious Metal\"\n },\n {\n \"value\": \"00909\",\n \"text\": \"Automobile and autoparts\"\n },\n {\n \"value\": \"00910\",\n \"text\": \"Hardware / construction material\"\n },\n {\n \"value\": \"00911\",\n \"text\": \"Electrical products\"\n },\n {\n \"value\": \"00912\",\n \"text\": \"Chemical / Petrochemical\"\n },\n {\n \"value\": \"00913\",\n \"text\": \"Cosmetics\"\n },\n {\n \"value\": \"00914\",\n \"text\": \"Import / Export\"\n },\n {\n \"value\": \"00915\",\n \"text\": \"Medical related products\"\n },\n {\n \"value\": \"00916\",\n \"text\": \"Automatic Merchandising Machine Operators\"\n },\n {\n \"value\": \"00917\",\n \"text\": \"Direct Selling Establishments\"\n },\n {\n \"value\": \"00918\",\n \"text\": \"Liquefied Petroleum Gas (Bottled Gas) Dealers\"\n },\n {\n \"value\": \"00919\",\n \"text\": \"Motor Vehicle Dealers (New )\"\n },\n {\n \"value\": \"00920\",\n \"text\": \"Office equipment\"\n },\n {\n \"value\": \"00921\",\n \"text\": \"Stationery, books, periodical and newspapers\"\n },\n {\n \"value\": \"00922\",\n \"text\": \"Retail - Petrol Station\"\n },\n {\n \"value\": \"00923\",\n \"text\": \"Retail / wholesaler other than above\"\n },\n {\n \"value\": \"01700\",\n \"text\": \"Other monetary intermediation\"\n },\n {\n \"value\": \"1700\",\n \"text\": \"Other monetary intermediation\"\n },\n {\n \"value\": \"01701\",\n \"text\": \"Research & Experiemental Development Services\"\n },\n {\n \"value\": \"1701\",\n \"text\": \"Research & Experimental Development Services\"\n },\n {\n \"value\": \"01702\",\n \"text\": \"licensed money lending activities, co-operative with credit functions and factoring companies\"\n },\n {\n \"value\": \"1702\",\n \"text\": \"licensed money lending activities, co-operative with credit functions and factoring companies\"\n },\n {\n \"value\": \"03510\",\n \"text\": \"Postal and courier activities\"\n },\n {\n \"value\": \"04201\",\n \"text\": \"Beauty Shops\"\n },\n {\n \"value\": \"04202\",\n \"text\": \"Barber Shops\"\n },\n {\n \"value\": \"04203\",\n \"text\": \"Libraries, archives, museums and other cultural activities\"\n },\n {\n \"value\": \"04204\",\n \"text\": \"Reupholstery and Furniture Repair\"\n },\n {\n \"value\": \"04205\",\n \"text\": \"Armature Rewinding Shops\"\n },\n {\n \"value\": \"04206\",\n \"text\": \"Welding Repair\"\n },\n {\n \"value\": \"04207\",\n \"text\": \"Maintenance and repair of motor vehicles\"\n },\n {\n \"value\": \"04208\",\n \"text\": \"Renting and leasing of motor vehicle, household good, machinery, equipment and tangible goods\"\n },\n {\n \"value\": \"04209\",\n \"text\": \"Business management consultancy services\"\n },\n {\n \"value\": \"04210\",\n \"text\": \"Activties of collection agencies / credit bureaus\"\n },\n {\n \"value\": \"04211\",\n \"text\": \"Repair of bicycles\"\n },\n {\n \"value\": \"04212\",\n \"text\": \"Repair of footwear and other leather goods\"\n }\n ],\n \"category\": \"5\"\n },\n {\n \"name\": \"dateApplied\",\n \"displayName\": \"Date Applied\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"category\": \"11\"\n },\n {\n \"name\": \"entity\",\n \"displayName\": \"Entity\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"C\",\n \"text\": \"Conventional\"\n },\n {\n \"value\": \"I\",\n \"text\": \"Islamic\"\n }\n ],\n \"category\": \"10\"\n },\n {\n \"name\": \"facilityPackage\",\n \"displayName\": \"Facility Package\",\n \"type\": \"text\",\n \"category\": \"11\"\n },\n {\n \"name\": \"purposeOfAcquisition\",\n \"displayName\": \"Purpose of Acquisition\",\n \"placeholder\": \"Select your Purpose of Acquisition\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"Internal Use\",\n \"text\": \"Internal Use\"\n },\n {\n \"value\": \"Tender\",\n \"text\": \"Tender\"\n },\n {\n \"value\": \"Service\",\n \"text\": \"Service\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityPurpose\",\n \"displayName\": \"Facility Purpose\",\n \"type\": \"dropdown\",\n \"defaultValue\": \"Refinancing of property\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Staff ASB - Untuk Kegunaan Sendiri dalam Pelaburan ASB\"\n },\n {\n \"value\": \"02\",\n \"text\": \"ASB - Untuk Kegunaan Sendiri dalam pelaburan ASB\"\n },\n {\n \"value\": \"002\",\n \"text\": \"Finance purchase of property/land for INVESTMENT.\"\n },\n {\n \"value\": \"03\",\n \"text\": \"ASB2 - Untuk Kegunaan Sendiri dalam Pelaburan ASB2\"\n },\n {\n \"value\": \"003\",\n \"text\": \"Finance purchase of prop/land for own occupation\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Personal Consumption Against ASB/ASM2W Certificate\"\n },\n {\n \"value\": \"05\",\n \"text\": \"ASB/ASM2W for Sole-prop Business\"\n },\n {\n \"value\": \"005\",\n \"text\": \"Personal consumption\"\n },\n {\n \"value\": \"008\",\n \"text\": \"Construction of property\"\n },\n {\n \"value\": \"010\",\n \"text\": \"Purchase of property for INVESTMENT & consumption.\"\n },\n {\n \"value\": \"013\",\n \"text\": \"Purchase of car park\"\n },\n {\n \"value\": \"015\",\n \"text\": \"To finance renovation/upgrading cost\"\n },\n {\n \"value\": \"016\",\n \"text\": \"To part finance Car Park and Renovation Cost\"\n },\n {\n \"value\": \"018\",\n \"text\": \"Staff - Renovation of property under staff rate\"\n },\n {\n \"value\": \"023\",\n \"text\": \"Refinancing of property\"\n },\n {\n \"value\": \"026\",\n \"text\": \"Staff Sundry Loan - Calamities\"\n },\n {\n \"value\": \"027\",\n \"text\": \"Staff-To part finance Medical Expenses\"\n },\n {\n \"value\": \"028\",\n \"text\": \"Staff-To part finance the purchase of a personal computer\"\n },\n {\n \"value\": \"029\",\n \"text\": \"Staff-Purchase of new car\"\n },\n {\n \"value\": \"030\",\n \"text\": \"Staff- study loan\"\n },\n {\n \"value\": \"031\",\n \"text\": \"Staff-Purchase of motorcycle\"\n },\n {\n \"value\": \"036\",\n \"text\": \"Staff-Staff Sundry loan\"\n },\n {\n \"value\": \"037\",\n \"text\": \"Booking Fee - Car\"\n },\n {\n \"value\": \"038\",\n \"text\": \"Debt Consolidation\"\n },\n {\n \"value\": \"039\",\n \"text\": \"Education\"\n },\n {\n \"value\": \"040\",\n \"text\": \"Electrical Goods\"\n },\n {\n \"value\": \"041\",\n \"text\": \"Home Furnishing/Equipment\"\n },\n {\n \"value\": \"042\",\n \"text\": \"Medical Expenses\"\n },\n {\n \"value\": \"043\",\n \"text\": \"Online Financing\"\n },\n {\n \"value\": \"044\",\n \"text\": \"Personal Refinancing\"\n },\n {\n \"value\": \"045\",\n \"text\": \"Property/House Downpayment\"\n },\n {\n \"value\": \"046\",\n \"text\": \"Renovation\"\n },\n {\n \"value\": \"047\",\n \"text\": \"Travel\"\n },\n {\n \"value\": \"048\",\n \"text\": \"Additional Financing for Revival of Abandoned Project\"\n },\n {\n \"value\": \"100\",\n \"text\": \"Purchase of Resident / Non Resident Property for personal purpose\"\n },\n {\n \"value\": \"101\",\n \"text\": \"Purchase of securities quoted on the Bursa Malaysia and/or financing of IPO shares\"\n },\n {\n \"value\": \"102\",\n \"text\": \"Purchase of securities quoted on the Bursa Malaysia and/or financing of IPO shares\"\n },\n {\n \"value\": \"COM01AF\",\n \"text\": \"PURCHASE OF COMMERCIAL VEHICLES\"\n },\n {\n \"value\": \"PRI01AF\",\n \"text\": \"PURCHASE OF PRIVATE VEHICLES\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityType\",\n \"displayName\": \"Facility Type (Personal)\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"PLFT001\",\n \"text\": \"Conventional\"\n },\n {\n \"value\": \"PLFT002\",\n \"text\": \"Private Sector\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityType\",\n \"displayName\": \"Facility Type (Auto)\",\n \"placeholder\": \"Facility Type\",\n \"startWithNewLine\": false,\n \"visible\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"HPFAC04\",\n \"text\": \" Islamic - Variable rate\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"financingTenure\",\n \"displayName\": \"Financing Tenure (Years)\",\n \"placeholder\": \"Financing Tenure (Years)\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 3,\n \"min\": 1,\n \"max\": 7,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid financing tenure from 1 to 7 years.\",\n \"regex\": \"^[1-7]$\"\n }\n ],\n \"inputType\": \"number\",\n \"category\": \"11\"\n },\n {\n \"name\": \"product\",\n \"displayName\": \"Product (Auto)\",\n \"placeholder\": \"Product\",\n \"startWithNewLine\": false,\n \"visible\": false,\n \"isRequired\": true,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"AFI04\",\n \"text\": \"Vehicle Financing-i (Variable Rate SBR)\"\n }\n ],\n \"maxLength\": 40,\n \"category\": \"11\"\n },\n {\n \"name\": \"purposeOfAcctOpen\",\n \"displayName\": \"Purpose of Account Opening\",\n \"type\": \"dropdown\",\n \"defaultValue\": \"Personal Loan/Financing\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Payroll/Salary\"\n },\n {\n \"value\": \"03\",\n \"text\": \"Savings/Fixed/Term Deposits\"\n },\n {\n \"value\": \"04\",\n \"text\": \"Remittance (Local/Foreign)\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Household/Family Expenses\"\n },\n {\n \"value\": \"06\",\n \"text\": \"Investment\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Standing Instruction\"\n },\n {\n \"value\": \"11\",\n \"text\": \"EPF Withdrawals\"\n },\n {\n \"value\": \"12\",\n \"text\": \"Personal Loan/Financing\"\n },\n {\n \"value\": \"14\",\n \"text\": \"Equipment & Machinery Expenses\"\n },\n {\n \"value\": \"15\",\n \"text\": \"Business Operating Account\"\n },\n {\n \"value\": \"16\",\n \"text\": \"Client's Account\"\n },\n {\n \"value\": \"17\",\n \"text\": \"Sales Proceed\"\n },\n {\n \"value\": \"18\",\n \"text\": \"Capital Injection\"\n },\n {\n \"value\": \"19\",\n \"text\": \"Administration of Estate Account\"\n },\n {\n \"value\": \"20\",\n \"text\": \"Liquidation/Disposal of Asset\"\n },\n {\n \"value\": \"21\",\n \"text\": \"Financing Payment/Drawdown\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"sourceOfFund\",\n \"displayName\": \"Source of Fund\",\n \"placeholder\": \"Source of Fund\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"01\",\n \"text\": \"Income/Salary\"\n },\n {\n \"value\": \"02\",\n \"text\": \"Own Bank Transfer (within RHB)\"\n },\n {\n \"value\": \"04\",\n \"text\": \"EPF/SOCSO/Pension/Gratuity\"\n },\n {\n \"value\": \"05\",\n \"text\": \"Savings/Investment\"\n },\n {\n \"value\": \"08\",\n \"text\": \"Scholarship/Allowance/Edu Loan\"\n },\n {\n \"value\": \"13\",\n \"text\": \"Trust Funds\"\n },\n {\n \"value\": \"15\",\n \"text\": \"Divorce Sett/Compensation\"\n },\n {\n \"value\": \"17\",\n \"text\": \"Sale of Inves/Shares/Prop/Land\"\n },\n {\n \"value\": \"18\",\n \"text\": \"Dividends/Profits\"\n },\n {\n \"value\": \"20\",\n \"text\": \"Rental Proceeds\"\n },\n {\n \"value\": \"21\",\n \"text\": \"Commission\"\n },\n {\n \"value\": \"22\",\n \"text\": \"Directors Fee/Salary\"\n },\n {\n \"value\": \"23\",\n \"text\": \"Welfare Allowance\"\n },\n {\n \"value\": \"24\",\n \"text\": \"Return on Investment\"\n },\n {\n \"value\": \"25\",\n \"text\": \"FD Placement Roll Over/Renewal\"\n },\n {\n \"value\": \"26\",\n \"text\": \"Insurance Maturity/Surrender\"\n },\n {\n \"value\": \"27\",\n \"text\": \"Legal Settlement\"\n },\n {\n \"value\": \"28\",\n \"text\": \"Credit Facility Approve by FI\"\n },\n {\n \"value\": \"29\",\n \"text\": \"Trf frm Parent/Holding/Subs\"\n },\n {\n \"value\": \"30\",\n \"text\": \"Trf frm Own Acct with Oth FI\"\n },\n {\n \"value\": \"31\",\n \"text\": \"Spouse/Parents/Children\"\n },\n {\n \"value\": \"32\",\n \"text\": \"Financial Aid/Subsidies\"\n },\n {\n \"value\": \"33\",\n \"text\": \"Part-time Income\"\n },\n {\n \"value\": \"34\",\n \"text\": \"Inheritance\"\n },\n {\n \"value\": \"35\",\n \"text\": \"Gift/Donation\"\n },\n {\n \"value\": \"36\",\n \"text\": \"Winning-legal Gambling/Contest\"\n },\n {\n \"value\": \"37\",\n \"text\": \"Business/Sales Proceeds\"\n },\n {\n \"value\": \"38\",\n \"text\": \"Crypto Currency/Digital Asset Investment Proceeds\"\n }\n ],\n \"category\": \"4\"\n },\n {\n \"name\": \"preferredBranch\",\n \"displayName\": \"Preferred Branch\",\n \"placeholder\": \"Select Preferred Branch\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"000\",\n \"text\": \"Head Office (KL)\"\n },\n {\n \"value\": \"002\",\n \"text\": \"JALAN SILANG (WITH KUP)\"\n },\n {\n \"value\": \"003\",\n \"text\": \"Jalan Bukit Bintang (WITH BBI)\"\n },\n {\n \"value\": \"004\",\n \"text\": \"Jln Tun Sambanthan, Ipoh\"\n },\n {\n \"value\": \"005\",\n \"text\": \"Kampar\"\n },\n {\n \"value\": \"006\",\n \"text\": \"Johor Bahru City Square\"\n },\n {\n \"value\": \"007\",\n \"text\": \"Wisma Khoo, Sandakan\"\n },\n {\n \"value\": \"008\",\n \"text\": \"Putra Square, Kuantan\"\n },\n {\n \"value\": \"009\",\n \"text\": \"New Town, Petaling Jaya\"\n },\n {\n \"value\": \"010\",\n \"text\": \"Seri Kembangan\"\n },\n {\n \"value\": \"011\",\n \"text\": \"Kajang\"\n },\n {\n \"value\": \"012\",\n \"text\": \"Lebuh Pantai\"\n },\n {\n \"value\": \"013\",\n \"text\": \"Bentung\"\n },\n {\n \"value\": \"014\",\n \"text\": \"Batu Pahat\"\n },\n {\n \"value\": \"015\",\n \"text\": \"Kepong\"\n },\n {\n \"value\": \"016\",\n \"text\": \"Tanjung Sepat\"\n },\n {\n \"value\": \"017\",\n \"text\": \"Jln Tunku Ibrahim, Alor Setar\"\n },\n {\n \"value\": \"018\",\n \"text\": \"Jln Tok Hakim, Kota Bharu\"\n },\n {\n \"value\": \"019\",\n \"text\": \"Kuala Terengganu\"\n },\n {\n \"value\": \"020\",\n \"text\": \"Air Tawar\"\n },\n {\n \"value\": \"021\",\n \"text\": \"Kulai\"\n },\n {\n \"value\": \"022\",\n \"text\": \"Jln Gaya, Kota Kinabalu\"\n },\n {\n \"value\": \"024\",\n \"text\": \"Setapak\"\n },\n {\n \"value\": \"025\",\n \"text\": \"Jelapang\"\n },\n {\n \"value\": \"026\",\n \"text\": \"Jln Niaga, Shah Alam\"\n },\n {\n \"value\": \"027\",\n \"text\": \"Bukit Baru\"\n },\n {\n \"value\": \"028\",\n \"text\": \"Jln Chain Ferry, Prai\"\n },\n {\n \"value\": \"029\",\n \"text\": \"Yung Kong\"\n },\n {\n \"value\": \"030\",\n \"text\": \"Kenanga Wholesale City\"\n },\n {\n \"value\": \"031\",\n \"text\": \"Tmn Sg. Besi\"\n },\n {\n \"value\": \"032\",\n \"text\": \"Damansara Jaya\"\n },\n {\n \"value\": \"033\",\n \"text\": \"Kluang\"\n },\n {\n \"value\": \"034\",\n \"text\": \"Jerantut\"\n },\n {\n \"value\": \"035\",\n \"text\": \"Kuala Kurau\"\n },\n {\n \"value\": \"036\",\n \"text\": \"Raub\"\n },\n {\n \"value\": \"037\",\n \"text\": \"Port Klang\"\n },\n {\n \"value\": \"038\",\n \"text\": \"Jln Bakar Arang, Sg. Petani\"\n },\n {\n \"value\": \"039\",\n \"text\": \"Kemaman\"\n },\n {\n \"value\": \"040\",\n \"text\": \"Pasir Gudang\"\n },\n {\n \"value\": \"041\",\n \"text\": \"Bandar Baru Sg. Buloh\"\n },\n {\n \"value\": \"042\",\n \"text\": \"Jelutong\"\n },\n {\n \"value\": \"043\",\n \"text\": \"Tmn Suntex\"\n },\n {\n \"value\": \"044\",\n \"text\": \"Tmn Johor Jaya, Johor Bahru\"\n },\n {\n \"value\": \"045\",\n \"text\": \"JALAN TUN RAZAK (WITH PAS)\"\n },\n {\n \"value\": \"046\",\n \"text\": \"Jln Nakhoda Gampar, Miri\"\n },\n {\n \"value\": \"047\",\n \"text\": \"Tawau\"\n },\n {\n \"value\": \"048\",\n \"text\": \"Inanam\"\n },\n {\n \"value\": \"049\",\n \"text\": \"Tmn Pelangi, Johor Bahru\"\n },\n {\n \"value\": \"050\",\n \"text\": \"Tmn Ungku Tun Aminah\"\n },\n {\n \"value\": \"051\",\n \"text\": \"Jln Tunku Osman, Sibu\"\n },\n {\n \"value\": \"052\",\n \"text\": \"BUKIT MERTAJAM 1(WITH BMT)\"\n },\n {\n \"value\": \"053\",\n \"text\": \"Bandar Baru Uda, Tampoi\"\n },\n {\n \"value\": \"054\",\n \"text\": \"Rawang\"\n },\n {\n \"value\": \"055\",\n \"text\": \"Jln SS15 Subang Jaya\"\n },\n {\n \"value\": \"056\",\n \"text\": \"Mid Valley\"\n },\n {\n \"value\": \"057\",\n \"text\": \"Pandan Indah\"\n },\n {\n \"value\": \"058\",\n \"text\": \"Bayan Baru\"\n },\n {\n \"value\": \"059\",\n \"text\": \"Pasar Borong, Selayang\"\n },\n {\n \"value\": \"060\",\n \"text\": \"IOI Boulevard Puchong\"\n },\n {\n \"value\": \"061\",\n \"text\": \"KLCC\"\n },\n {\n \"value\": \"062\",\n \"text\": \"Bandar Baru Ampang\"\n },\n {\n \"value\": \"063\",\n \"text\": \"Tangkak\"\n },\n {\n \"value\": \"064\",\n \"text\": \"Mentakab\"\n },\n {\n \"value\": \"065\",\n \"text\": \"Bandar Baru Klang\"\n },\n {\n \"value\": \"066\",\n \"text\": \"Wisma Mahmud, Kuching\"\n },\n {\n \"value\": \"067\",\n \"text\": \"First Avenue\"\n },\n {\n \"value\": \"068\",\n \"text\": \"Kuala Lumpur Main\"\n },\n {\n \"value\": \"069\",\n \"text\": \"Kuala Kedah\"\n },\n {\n \"value\": \"070\",\n \"text\": \"Kulim\"\n },\n {\n \"value\": \"073\",\n \"text\": \"Lahad Datu\"\n },\n {\n \"value\": \"074\",\n \"text\": \"The Trillium, Lakefields\"\n },\n {\n \"value\": \"075\",\n \"text\": \"Mergong, Alor Setar\"\n },\n {\n \"value\": \"076\",\n \"text\": \"Ampang Point\"\n },\n {\n \"value\": \"077\",\n \"text\": \"Ayer Itam\"\n },\n {\n \"value\": \"078\",\n \"text\": \"Bangsar Shopping Centre\"\n },\n {\n \"value\": \"079\",\n \"text\": \"Bekok\"\n },\n {\n \"value\": \"080\",\n \"text\": \"Butterworth\"\n },\n {\n \"value\": \"081\",\n \"text\": \"Gopeng\"\n },\n {\n \"value\": \"082\",\n \"text\": \"Gunung Rapat, Ipoh\"\n },\n {\n \"value\": \"083\",\n \"text\": \"Ipoh Garden South\"\n },\n {\n \"value\": \"084\",\n \"text\": \"Jln Bukit Bintang\"\n },\n {\n \"value\": \"086\",\n \"text\": \"Jln Ipoh\"\n },\n {\n \"value\": \"087\",\n \"text\": \"Jln Pasar\"\n },\n {\n \"value\": \"088\",\n \"text\": \"JALAN RAJA LAUT(WITH JIP)\"\n },\n {\n \"value\": \"089\",\n \"text\": \"Jln Raja Uda, Butterworth\"\n },\n {\n \"value\": \"091\",\n \"text\": \"Jementah\"\n },\n {\n \"value\": \"092\",\n \"text\": \"Tmn Sentosa, Johor Bahru\"\n },\n {\n \"value\": \"093\",\n \"text\": \"Kangar\"\n },\n {\n \"value\": \"094\",\n \"text\": \"Ketereh\"\n },\n {\n \"value\": \"095\",\n \"text\": \"Persiaran Sultan Ibrahim, Kelang\"\n },\n {\n \"value\": \"096\",\n \"text\": \"Kluang 2 (WITH KLU)\"\n },\n {\n \"value\": \"098\",\n \"text\": \"Jln Tun HS Lee\"\n },\n {\n \"value\": \"101\",\n \"text\": \"Jln Burma\"\n },\n {\n \"value\": \"102\",\n \"text\": \"Jln Hang Tuah\"\n },\n {\n \"value\": \"103\",\n \"text\": \"Plaza OSK, Jln Ampang\"\n },\n {\n \"value\": \"104\",\n \"text\": \"Meru\"\n },\n {\n \"value\": \"106\",\n \"text\": \"Permas Jaya, Johor Bahru\"\n },\n {\n \"value\": \"107\",\n \"text\": \"RHB SOHO IPOH\"\n },\n {\n \"value\": \"110\",\n \"text\": \"Rantau\"\n },\n {\n \"value\": \"111\",\n \"text\": \"Bandar Sri Permaisuri\"\n },\n {\n \"value\": \"112\",\n \"text\": \"Section 14, Petaling Jaya\"\n },\n {\n \"value\": \"113\",\n \"text\": \"Segamat\"\n },\n {\n \"value\": \"115\",\n \"text\": \"Senai\"\n },\n {\n \"value\": \"116\",\n \"text\": \"Seremban\"\n },\n {\n \"value\": \"118\",\n \"text\": \"Jln Tengku Ampuan Zabedah, Shah Alam\"\n },\n {\n \"value\": \"121\",\n \"text\": \"Bandar Sri Damansara\"\n },\n {\n \"value\": \"123\",\n \"text\": \"Sg. Bakap\"\n },\n {\n \"value\": \"124\",\n \"text\": \"Kg. Baru Sg. Buloh\"\n },\n {\n \"value\": \"125\",\n \"text\": \"Sg. Pelek\"\n },\n {\n \"value\": \"126\",\n \"text\": \"Tmn Pekan Baru, Sg. Petani\"\n },\n {\n \"value\": \"128\",\n \"text\": \"Sungkai\"\n },\n {\n \"value\": \"130\",\n \"text\": \"Tmn Indah\"\n },\n {\n \"value\": \"131\",\n \"text\": \"Tmn Megah\"\n },\n {\n \"value\": \"132\",\n \"text\": \"Tmn Molek, Johor Bahru\"\n },\n {\n \"value\": \"133\",\n \"text\": \"Dataran Wangsa\"\n },\n {\n \"value\": \"134\",\n \"text\": \"Tmn Shamelin\"\n },\n {\n \"value\": \"136\",\n \"text\": \"Tmn Taming Jaya\"\n },\n {\n \"value\": \"139\",\n \"text\": \"UEP Subang Jaya\"\n },\n {\n \"value\": \"140\",\n \"text\": \"Ulu Tiram\"\n },\n {\n \"value\": \"142\",\n \"text\": \"Bandar Baru Nilai\"\n },\n {\n \"value\": \"144\",\n \"text\": \"Menglembu\"\n },\n {\n \"value\": \"145\",\n \"text\": \"Bayan Point\"\n },\n {\n \"value\": \"150\",\n \"text\": \"Jln Masjid, Bintulu\"\n },\n {\n \"value\": \"153\",\n \"text\": \"Damansara Utama\"\n },\n {\n \"value\": \"158\",\n \"text\": \"Plentong, Johor Bahru\"\n },\n {\n \"value\": \"161\",\n \"text\": \"Bagan Serai\"\n },\n {\n \"value\": \"163\",\n \"text\": \"Bahau\"\n },\n {\n \"value\": \"165\",\n \"text\": \"Bukit Mertajam\"\n },\n {\n \"value\": \"169\",\n \"text\": \"Simpang Empat, Hutan Melintang\"\n },\n {\n \"value\": \"176\",\n \"text\": \"Jenjarom\"\n },\n {\n \"value\": \"177\",\n \"text\": \"Jinjang Utara\"\n },\n {\n \"value\": \"182\",\n \"text\": \"Kerteh\"\n },\n {\n \"value\": \"183\",\n \"text\": \"Jln Stesen, Kelang\"\n },\n {\n \"value\": \"187\",\n \"text\": \"Kuala Dungun\"\n },\n {\n \"value\": \"188\",\n \"text\": \"Kuala Kangsar\"\n },\n {\n \"value\": \"190\",\n \"text\": \"Kuala Pilah\"\n },\n {\n \"value\": \"195\",\n \"text\": \"Jln Tun Mustapha\"\n },\n {\n \"value\": \"196\",\n \"text\": \"Pulau Langkawi\"\n },\n {\n \"value\": \"198\",\n \"text\": \"LEBUH PANTAI 3 (WITH PNG)\"\n },\n {\n \"value\": \"202\",\n \"text\": \"Jln Abdullah, Muar\"\n },\n {\n \"value\": \"203\",\n \"text\": \"Overseas Union Garden\"\n },\n {\n \"value\": \"204\",\n \"text\": \"Padang Serai\"\n },\n {\n \"value\": \"205\",\n \"text\": \"Parit Buntar\"\n },\n {\n \"value\": \"207\",\n \"text\": \"Pasir Mas\"\n },\n {\n \"value\": \"208\",\n \"text\": \"Pontian Kecil\"\n },\n {\n \"value\": \"213\",\n \"text\": \"Segambut\"\n },\n {\n \"value\": \"216\",\n \"text\": \"SETAPAK 3 (WITH STP)\"\n },\n {\n \"value\": \"218\",\n \"text\": \"Simpang Renggam\"\n },\n {\n \"value\": \"219\",\n \"text\": \"Sitiawan\"\n },\n {\n \"value\": \"223\",\n \"text\": \"Sg. Siput\"\n },\n {\n \"value\": \"224\",\n \"text\": \"SS2 Petaling Jaya\"\n },\n {\n \"value\": \"225\",\n \"text\": \"Taiping\"\n },\n {\n \"value\": \"228\",\n \"text\": \"Tmn Midah\"\n },\n {\n \"value\": \"231\",\n \"text\": \"Tmn Tun Dr Ismail\"\n },\n {\n \"value\": \"232\",\n \"text\": \"Tanjong Karang\"\n },\n {\n \"value\": \"233\",\n \"text\": \"Tasek, Ipoh\"\n },\n {\n \"value\": \"235\",\n \"text\": \"Teluk Intan\"\n },\n {\n \"value\": \"237\",\n \"text\": \"Yong Peng\"\n },\n {\n \"value\": \"239\",\n \"text\": \"Plaza Damas 3\"\n },\n {\n \"value\": \"240\",\n \"text\": \"Putrajaya\"\n },\n {\n \"value\": \"242\",\n \"text\": \"Lawas\"\n },\n {\n \"value\": \"252\",\n \"text\": \"Melaka Raya\"\n },\n {\n \"value\": \"260\",\n \"text\": \"Prima Square, Sandakan\"\n },\n {\n \"value\": \"261\",\n \"text\": \"Jln Kulas, Kuching\"\n },\n {\n \"value\": \"264\",\n \"text\": \"Simpang Tiga, Kuching\"\n },\n {\n \"value\": \"266\",\n \"text\": \"Boulevard Centre, Miri\"\n },\n {\n \"value\": \"268\",\n \"text\": \"Lundu\"\n },\n {\n \"value\": \"269\",\n \"text\": \"Kanowit\"\n },\n {\n \"value\": \"271\",\n \"text\": \"Dalat\"\n },\n {\n \"value\": \"272\",\n \"text\": \"Kota Samarahan, Kuching\"\n },\n {\n \"value\": \"273\",\n \"text\": \"Sarikei\"\n },\n {\n \"value\": \"275\",\n \"text\": \"Tabuan Jaya, Kuching\"\n },\n {\n \"value\": \"276\",\n \"text\": \"Siburan\"\n },\n {\n \"value\": \"278\",\n \"text\": \"Matang Jaya, Kuching\"\n },\n {\n \"value\": \"280\",\n \"text\": \"Batu Kawah, Kuching\"\n },\n {\n \"value\": \"281\",\n \"text\": \"Lintas Station Complex, Kota Kinabalu\"\n },\n {\n \"value\": \"282\",\n \"text\": \"Limbang\"\n },\n {\n \"value\": \"286\",\n \"text\": \"Taipan Senawang\"\n },\n {\n \"value\": \"288\",\n \"text\": \"Kota Damansara\"\n },\n {\n \"value\": \"289\",\n \"text\": \"The Vertical, Bangsar South\"\n },\n {\n \"value\": \"290\",\n \"text\": \"Tmn Mount Austin, Johor Bahru\"\n },\n {\n \"value\": \"291\",\n \"text\": \"Menara Shell\"\n },\n {\n \"value\": \"293\",\n \"text\": \"Paradigm Mall, Kelana Jaya\"\n },\n {\n \"value\": \"294\",\n \"text\": \"Utropolis Mall, Glenmarie\"\n },\n {\n \"value\": \"295\",\n \"text\": \"Bandar Bukit Tinggi\"\n },\n {\n \"value\": \"296\",\n \"text\": \"Jitra\"\n },\n {\n \"value\": \"297\",\n \"text\": \"Air Putih, Kuantan\"\n },\n {\n \"value\": \"298\",\n \"text\": \"Sg. Merah, Sibu\"\n },\n {\n \"value\": \"299\",\n \"text\": \"Tmn Nusa Bestari, Johor Bahru\"\n },\n {\n \"value\": \"300\",\n \"text\": \"Keningau\"\n },\n {\n \"value\": \"301\",\n \"text\": \"1 Lagenda\"\n },\n {\n \"value\": \"302\",\n \"text\": \"Triang\"\n },\n {\n \"value\": \"303\",\n \"text\": \"Tmn Connaught\"\n },\n {\n \"value\": \"304\",\n \"text\": \"MetroTown, Kota Kinabalu\"\n },\n {\n \"value\": \"305\",\n \"text\": \"Kota Kemuning\"\n },\n {\n \"value\": \"306\",\n \"text\": \"Kota Tinggi\"\n },\n {\n \"value\": \"307\",\n \"text\": \"Setia Alam\"\n },\n {\n \"value\": \"308\",\n \"text\": \"Alam Avenue\"\n },\n {\n \"value\": \"309\",\n \"text\": \"Malim\"\n },\n {\n \"value\": \"310\",\n \"text\": \"Mukah\"\n },\n {\n \"value\": \"312\",\n \"text\": \"Bandar Mahkota Cheras\"\n },\n {\n \"value\": \"313\",\n \"text\": \"Seremban 2\"\n },\n {\n \"value\": \"314\",\n \"text\": \"Banting\"\n },\n {\n \"value\": \"315\",\n \"text\": \"IOI Resort City\"\n },\n {\n \"value\": \"316\",\n \"text\": \"Bandar Sri Petaling\"\n },\n {\n \"value\": \"317\",\n \"text\": \"Tanjung Tokong\"\n },\n {\n \"value\": \"319\",\n \"text\": \"Bandar Penawar\"\n },\n {\n \"value\": \"320\",\n \"text\": \"Kelana Jaya\"\n },\n {\n \"value\": \"321\",\n \"text\": \"RHB Bank Jalan Raja Laut, Kuala Lumpur\"\n },\n {\n \"value\": \"322\",\n \"text\": \"Auto City, Juru\"\n },\n {\n \"value\": \"323\",\n \"text\": \"Tmn Setia Tropika, Johor Bahru\"\n },\n {\n \"value\": \"389\",\n \"text\": \"Tmn Flora Utama, Batu Pahat\"\n },\n {\n \"value\": \"399\",\n \"text\": \"Caw. Utama\"\n },\n {\n \"value\": \"400\",\n \"text\": \"Caw. Jln Satok, Kuching\"\n },\n {\n \"value\": \"401\",\n \"text\": \"Caw. Kelana Jaya\"\n },\n {\n \"value\": \"402\",\n \"text\": \"Caw. Tmn Flora Utama, Batu Pahat\"\n },\n {\n \"value\": \"403\",\n \"text\": \"Caw. Kubang Kerian, Kota Bharu\"\n },\n {\n \"value\": \"404\",\n \"text\": \"Caw. Tmn Setia Tropika, Johor Bahru\"\n },\n {\n \"value\": \"405\",\n \"text\": \"Caw. Bandar Baru Bangi\"\n },\n {\n \"value\": \"407\",\n \"text\": \"Caw. Kuala Terengganu\"\n },\n {\n \"value\": \"408\",\n \"text\": \"Caw. Jln Raja Laut\"\n },\n {\n \"value\": \"409\",\n \"text\": \"Caw. Auto City\"\n },\n {\n \"value\": \"411\",\n \"text\": \"Caw. Lagenda Heights, Sg. Petani\"\n },\n {\n \"value\": \"412\",\n \"text\": \"Caw. Laman Seri, Shah Alam\"\n },\n {\n \"value\": \"457\",\n \"text\": \"RHB Bank Sales Centre AEON Taman Equine\"\n },\n {\n \"value\": \"473\",\n \"text\": \"RHB EASY - Kompleks Teruntum\"\n },\n {\n \"value\": \"479\",\n \"text\": \"RHB EASY - Giant Plentong\"\n },\n {\n \"value\": \"491\",\n \"text\": \"RHB EASY - Mydin Mall MITC Melaka\"\n },\n {\n \"value\": \"630\",\n \"text\": \"RHB EASY - Mydin Kubang Kerian\"\n },\n {\n \"value\": \"637\",\n \"text\": \"RHB EASY - Mydin Meru Raya\"\n },\n {\n \"value\": \"710\",\n \"text\": \"RHB EASY - E-Mart Commercial Centre\"\n },\n {\n \"value\": \"712\",\n \"text\": \"RHB EASY - Giant Hypermarket Bayan Baru\"\n },\n {\n \"value\": \"861\",\n \"text\": \"RHB EASY Warisan Square\"\n },\n {\n \"value\": \"931\",\n \"text\": \"CC EMBOSSING\"\n },\n {\n \"value\": \"RD08\",\n \"text\": \"PERAK REGION\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"bdmMoreThan2500kg\",\n \"displayName\": \"BDM More Than 2500kg\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"chassisNo\",\n \"displayName\": \"Chassis Number\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"engineNo\",\n \"displayName\": \"Engine Number\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"marketValue\",\n \"displayName\": \"Market Value\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"12\"\n },\n {\n \"name\": \"modelOfVehicle\",\n \"displayName\": \"Model of Vehicle\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"type\": \"text\",\n \"name\": \"purchasePriceOTR\",\n \"title\": \"carPrice\",\n \"placeholder\": \"car Price (MYR)\",\n \"isRequired\": true,\n \"displayName\": \"Car Price (MYR)\",\n \"maxLength\": 23,\n \"min\": 2000,\n \"max\": 150000,\n \"inputType\": \"number\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a financing amount between 2,000 and 150,000.\",\n \"regex\": \"^(2000|[1-9][0-9]{3}|[1-9][0-9]{4}|150000)$\"\n },\n {\n \"type\": \"regex\",\n \"text\": \"Please enter an amount in increments of 1,000.\",\n \"regex\": \"^([1-9][0-9]*000|150000)$\"\n }\n ],\n \"category\": \"12\"\n },\n {\n \"name\": \"registrationDate\",\n \"displayName\": \"Registration Date\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"category\": \"12\"\n },\n {\n \"name\": \"registrationNo\",\n \"displayName\": \"Registration Number\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"vehicleCondition\",\n \"displayName\": \"Condition\",\n \"placeholder\": \"Vehicle Condition\",\n \"startWithNewLine\": false,\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"N\",\n \"text\": \"New\"\n },\n {\n \"value\": \"U\",\n \"text\": \"Used\"\n },\n {\n \"value\": \"UN\",\n \"text\": \"UnRegistered Recon\"\n },\n {\n \"value\": \"UR\",\n \"text\": \"Used Recon\"\n },\n {\n \"value\": \"PR\",\n \"text\": \"Pre-registered\"\n }\n ],\n \"category\": \"12\"\n },\n {\n \"name\": \"yearMake\",\n \"displayName\": \"Year Make\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"startWithNewLine\": false,\n \"placeholder\": \"Year\",\n \"min\": 2014,\n \"max\": 2100,\n \"category\": \"12\"\n },\n {\n \"name\": \"makeOfVehicle\",\n \"displayName\": \"Make of Vehicle\",\n \"type\": \"text\",\n \"category\": \"12\"\n },\n {\n \"name\": \"permanentaddressLine1\",\n \"displayName\": \"Permanent Address Line 1\",\n \"placeholder\": \"Permanent Address Line 1\",\n \"maxLength\": 40,\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentaddressLine2\",\n \"displayName\": \"Permanent Address Line 2\",\n \"placeholder\": \"Permanent Address Line 2 (optional)\",\n \"isRequired\": false,\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentaddressLine3\",\n \"displayName\": \"Permanent Address Line 3\",\n \"maxLength\": 40,\n \"placeholder\": \"Permanent Address Line 3 (optional)\",\n \"isRequired\": false,\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentaddressType\",\n \"displayName\": \"Permanent Address Type\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentcity\",\n \"displayName\": \"Permanent City\",\n \"placeholder\": \"City of the Permanent Address\",\n \"type\": \"text\",\n \"maxLength\": 20,\n \"startWithNewLine\": false,\n \"category\": \"7\"\n },\n {\n \"name\": \"permanentpostcode\",\n \"displayName\": \"Permanent Postcode\",\n \"placeholder\": \"Postcode of the Permanent Address\",\n \"type\": \"text\",\n \"maxLength\": 10,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressLine1\",\n \"displayName\": \"Residential Address Line 1\",\n \"placeholder\": \"Residential Address Line 1\",\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressLine2\",\n \"displayName\": \"Residential Address Line 2\",\n \"placeholder\": \"Residential Address Line 2 (optional)\",\n \"isRequired\": false,\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressLine3\",\n \"displayName\": \"Residential Address Line 3\",\n \"placeholder\": \"Residential Address Line 3 (optional)\",\n \"isRequired\": false,\n \"startWithNewLine\": false,\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialaddressType\",\n \"displayName\": \"Residential Address Type\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialcity\",\n \"displayName\": \"Residential City\",\n \"placeholder\": \"City of the Residential Address\",\n \"visibleIf\": \"{residenceAddress} == false\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 20,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialpostcode\",\n \"displayName\": \"Residential Postcode\",\n \"placeholder\": \"Postcode of the Residential Address\",\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"text\",\n \"maxLength\": 10,\n \"category\": \"7\"\n },\n {\n \"name\": \"residentialstate\",\n \"displayName\": \"Residential State\",\n \"placeholder\": \"Select State Of The Residential Address\",\n \"startWithNewLine\": false,\n \"visibleIf\": \"{residenceAddress} == false\",\n \"type\": \"dropdown\",\n \"choices\": [\n {\n \"value\": \"A\",\n \"text\": \"PERAK\"\n },\n {\n \"value\": \"B\",\n \"text\": \"SELANGOR\"\n },\n {\n \"value\": \"C\",\n \"text\": \"PAHANG\"\n },\n {\n \"value\": \"D\",\n \"text\": \"KELANTAN\"\n },\n {\n \"value\": \"J\",\n \"text\": \"JOHOR\"\n },\n {\n \"value\": \"K\",\n \"text\": \"KEDAH\"\n },\n {\n \"value\": \"L\",\n \"text\": \"WP LABUAN\"\n },\n {\n \"value\": \"M\",\n \"text\": \"MELAKA\"\n },\n {\n \"value\": \"N\",\n \"text\": \"NEGERI SEMBILAN\"\n },\n {\n \"value\": \"P\",\n \"text\": \"PULAU PINANG\"\n },\n {\n \"value\": \"Q\",\n \"text\": \"SARAWAK\"\n },\n {\n \"value\": \"R\",\n \"text\": \"PERLIS\"\n },\n {\n \"value\": \"S\",\n \"text\": \"SABAH\"\n },\n {\n \"value\": \"T\",\n \"text\": \"TERENGGANU\"\n },\n {\n \"value\": \"U\",\n \"text\": \"WP PUTRAJAYA\"\n },\n {\n \"value\": \"W\",\n \"text\": \"WP KUALA LUMPUR\"\n }\n ],\n \"category\": \"7\"\n },\n {\n \"name\": \"officeaddressLine1\",\n \"displayName\": \"Employer Address Line 1\",\n \"placeholder\": \"Employer Address Line 1\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"category\": \"5\"\n },\n {\n \"name\": \"officeaddressLine2\",\n \"displayName\": \"Employer Address Line 2\",\n \"placeholder\": \"Employer Address Line 2 (optional)\",\n \"isRequired\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"5\"\n },\n {\n \"name\": \"officeaddressLine3\",\n \"displayName\": \"Employer Address Line 3\",\n \"placeholder\": \"Employer Address Line 3 (optional)\",\n \"startWithNewLine\": false,\n \"isRequired\": false,\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 40,\n \"category\": \"5\"\n },\n {\n \"name\": \"officeaddressType\",\n \"displayName\": \"Office Address Type\",\n \"type\": \"text\",\n \"category\": \"7\"\n },\n {\n \"name\": \"officecity\",\n \"displayName\": \"Employer City\",\n \"placeholder\": \"Employer City\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 20,\n \"category\": \"5\"\n },\n {\n \"name\": \"officepostcode\",\n \"displayName\": \"Employer Postcode\",\n \"placeholder\": \"Employer Postcode\",\n \"visibleIf\": \"{employmentType} anyof ['01', '02', '07', '08', '09', '10' ]\",\n \"type\": \"text\",\n \"maxLength\": 10,\n \"inputType\": \"number\",\n \"category\": \"5\"\n },\n {\n \"name\": \"computationMode\",\n \"displayName\": \"Computation Mode\",\n \"type\": \"text\",\n \"category\": \"10\"\n },\n {\n \"name\": \"countryOfPermanentResident\",\n \"displayName\": \"Country of Permanent Resident\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"foreignPR\",\n \"displayName\": \"Foreign PR\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"internationalExtensionPhoneNo\",\n \"displayName\": \"International Extension Phone No\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"8\"\n },\n {\n \"name\": \"internationalPhoneNo\",\n \"displayName\": \"International Phone No\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"category\": \"8\"\n },\n {\n \"name\": \"internationalPhoneNoAreaCode\",\n \"displayName\": \"International Phone No Area Code\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"category\": \"8\"\n },\n {\n \"name\": \"pRIDNo\",\n \"displayName\": \"PR ID No\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"dealerName\",\n \"displayName\": \"Dealer Name\",\n \"type\": \"text\",\n \"category\": \"3\"\n },\n {\n \"name\": \"cashDownpayment\",\n \"displayName\": \"Cash Downpayment\",\n \"placeholder\": \"Cash Downpayment\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"maxLength\": 20,\n \"category\": \"11\"\n },\n {\n \"name\": \"downpayment\",\n \"displayName\": \"Down Payment (%)\",\n \"placeholder\": \"Down Payment (%)\",\n \"type\": \"text\",\n \"category\": \"11\"\n },\n {\n \"name\": \"bankName\",\n \"displayName\": \"Bank Name\",\n \"placeholder\": \"Bank Name\",\n \"visible\": false,\n \"type\": \"text\",\n \"startWithNewLine\": false,\n \"category\": \"11\"\n },\n {\n \"name\": \"bankRates\",\n \"displayName\": \"Bank Rate\",\n \"placeholder\": \"Bank Rate\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"startWithNewLine\": false,\n \"category\": \"11\"\n },\n {\n \"name\": \"monthlyRepayment\",\n \"displayName\": \"Monthly Repayment\",\n \"placeholder\": \"Monthly Repayment\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"11\"\n },\n {\n \"name\": \"facilityTenureYears\",\n \"displayName\": \"Repayment Term (Years)\",\n \"placeholder\": \"Payment Term\",\n \"startWithNewLine\": false,\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid financing tenure from 1 to 7 years.\",\n \"regex\": \"^[1-7]$\"\n }\n ],\n \"category\": \"11\"\n },\n {\n \"name\": \"totalFinancing\",\n \"displayName\": \"Financing Amount (RM)\",\n \"placeholder\": \"How much do you want to borrow?\",\n \"type\": \"text\",\n \"maxLength\": 15,\n \"min\": 2000,\n \"max\": 150000,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a financing amount between 2,000 and 150,000.\",\n \"regex\": \"^(2000|[1-9][0-9]{3}|[1-9][0-9]{4}|150000)$\"\n },\n {\n \"type\": \"regex\",\n \"text\": \"Please enter an amount in increments of 1,000.\",\n \"regex\": \"^([1-9][0-9]*000|150000)$\"\n }\n ],\n \"inputType\": \"number\",\n \"category\": \"11\"\n },\n {\n \"name\": \"myKadOrPassport\",\n \"displayName\": \"MyKad or Passport\",\n \"type\": \"text\",\n \"category\": \"2\"\n },\n {\n \"name\": \"incomeEPF_iakaun\",\n \"displayName\": \"Income EPF i-Akaun\",\n \"type\": \"text\",\n \"category\": \"11\"\n },\n {\n \"name\": \"phoneNumber\",\n \"displayName\": \"Phone Number\",\n \"type\": \"text\",\n \"inputType\": \"tel\",\n \"category\": \"1\"\n },\n {\n \"name\": \"incorporatedDate\",\n \"displayName\": \"Incorporated Date\",\n \"type\": \"text\",\n \"inputType\": \"date\",\n \"category\": \"3\"\n },\n {\n \"name\": \"shareCapital\",\n \"displayName\": \"Share Capital\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"tangibleAssets\",\n \"displayName\": \"Tangible Assets\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalCurrentLiabilities\",\n \"displayName\": \"Total Current Liabilities\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalCurrentAssets\",\n \"displayName\": \"Total Current Assets\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"endOfYearCash\",\n \"displayName\": \"Cash and Cash Equivalent at end of the Financial Year or Period\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"shortTermLiabilities\",\n \"displayName\": \"Short Term Liabilities\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"ebitda\",\n \"displayName\": \"Earning Before Interest, Tax, Depreciation and Amortization (EBITDA)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalAssets\",\n \"displayName\": \"Total Assets\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"netOperatingCashFlow\",\n \"displayName\": \"Net Operating Cash Flow\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"netProfitT1\",\n \"displayName\": \"Net Profit/ Loss and Total Comprehensive Income (year T-1)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalEquityT1\",\n \"displayName\": \"Total Equity/Owner equity/Total Net (year T-1)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"netProfitT2\",\n \"displayName\": \"Net Profit/ Loss and Total Comprehensive Income (year T-2)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"totalEquityT2\",\n \"displayName\": \"Total Equity/Owner equity/Total Net (year T-2)\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"facilityInterestRate\",\n \"displayName\": \"Interest Rate\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"eppProduct\",\n \"displayName\": \"EPP Product Name\",\n \"type\": \"text\",\n \"category\": \"4\"\n },\n {\n \"name\": \"eppPrice\",\n \"displayName\": \"EPP Price\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"eppNoOfPax\",\n \"displayName\": \"EPP No. of Pax\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"housingLoanMonthlyInstallment\",\n \"displayName\": \"Housing Loan Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"hirePurchaseMonthlyInstallment\",\n \"displayName\": \"Hire Purchase Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"personalLoanMonthlyInstallment\",\n \"displayName\": \"Personal Loan Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"creditCardMonthlyInstallment\",\n \"displayName\": \"Credit Card Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"otherFinancingMonthlyInstallment\",\n \"displayName\": \"Other Financing Monthly Installment\",\n \"type\": \"text\",\n \"inputType\": \"number\",\n \"category\": \"4\"\n },\n {\n \"name\": \"bank_statement_t1\",\n \"displayName\": \"Bank Statement (Month T-1)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"accountHolderNameT1\",\n \"statementDateT1\",\n \"bankNameT1\",\n \"accountNumberT1\",\n \"totalCreditsT1\",\n \"totalDebitsT1\",\n \"openingBalanceT1\",\n \"bankBalanceT1\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t2\",\n \"displayName\": \"Bank Statement (Month T-2)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"accountHolderNameT2\",\n \"statementDateT2\",\n \"bankNameT2\",\n \"accountNumberT2\",\n \"totalCreditsT2\",\n \"totalDebitsT2\",\n \"openingBalanceT2\",\n \"bankBalanceT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t3\",\n \"displayName\": \"Bank Statement (Month T-3)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"accountHolderNameT3\",\n \"statementDateT3\",\n \"bankNameT3\",\n \"accountNumberT3\",\n \"totalCreditsT3\",\n \"totalDebitsT3\",\n \"openingBalanceT3\",\n \"bankBalanceT3\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t4\",\n \"displayName\": \"Bank Statement (Month T-4)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"accountHolderNameT4\",\n \"statementDateT4\",\n \"bankNameT4\",\n \"accountNumberT4\",\n \"totalCreditsT4\",\n \"totalDebitsT4\",\n \"openingBalanceT4\",\n \"bankBalanceT4\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t5\",\n \"displayName\": \"Bank Statement (Month T-5)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"accountHolderNameT5\",\n \"statementDateT5\",\n \"bankNameT5\",\n \"accountNumberT5\",\n \"totalCreditsT5\",\n \"totalDebitsT5\",\n \"openingBalanceT5\",\n \"bankBalanceT5\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"bank_statement_t6\",\n \"displayName\": \"Bank Statement (Month T-6)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"accountHolderNameT6\",\n \"statementDateT6\",\n \"bankNameT6\",\n \"accountNumberT6\",\n \"totalCreditsT6\",\n \"totalDebitsT6\",\n \"openingBalanceT6\",\n \"bankBalanceT6\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"financials\",\n \"displayName\": \"Audited Financial Statement\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"shareCapital\",\n \"totalEquityT1\",\n \"totalEquityT2\",\n \"totalCurrentLiabilities\",\n \"shortTermLiabilities\",\n \"totalAssets\",\n \"totalCurrentAssets\",\n \"tangibleAssets\",\n \"netProfitT1\",\n \"netProfitT2\",\n \"endOfYearCash\",\n \"netOperatingCashFlow\",\n \"ebitda\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"financials_fincap_t1\",\n \"displayName\": \"Audited Financial Statement (T-1) (FinCap)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"nonCurrentAssetsSubsidiaryCompaniesT1\",\n \"nonCurrentAssetsAssociatedCompaniesT1\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditureT1\",\n \"nonCurrentAssetInvestmentPropertiesT1\",\n \"nonCurrentAssetsInvestmentsT1\",\n \"nonCurrentAssetInvestmentSecuritiesT1\",\n \"nonCurrentAssetDeferredAssetsT1\",\n \"nonCurrentAssetDepositsT1\",\n \"nonCurrentAssetOwnGoodwillT1\",\n \"nonCurrentAssetGoodwillOnConsolidationT1\",\n \"nonCurrentAssetSinkingFundT1\",\n \"nonCurrentAssetPropertyPlantEquipmentT1\",\n \"nonCurrentAssetInventoriesT1\",\n \"nonCurrentAssetRightOfUseAssetsT1\",\n \"nonCurrentAssetIntangibleAssetsT1\",\n \"nonCurrentAssetPrepaidLeasePaymentsT1\",\n \"nonCurrentAssetFinancialAssetAtFairValueT1\",\n \"nonCurrentAssetLandUseRightT1\",\n \"nonCurrentAssetTradeReceivablesT1\",\n \"nonCurrentAssetOtherReceivablesT1\",\n \"nonCurrentAssetTradeAndOtherReceivablesT1\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepaymentsT1\",\n \"totalNonCurrentAssetsT1\",\n \"currentAssetDevelopmentPropertiesOrExpenditureT1\",\n \"currentAssetShortTermInvestmentsT1\",\n \"currentAssetTradeDebtorsT1\",\n \"currentAssetShortTermDepositsT1\",\n \"currentAssetAmountDueFromHoldingCompanyT1\",\n \"currentAssetAmountDueFromSubsidiaryCompaniesT1\",\n \"currentAssetAmountDueFromAssociatedCompaniesT1\",\n \"currentAssetAmountDueFromDirectorT1\",\n \"currentAssetAmountDueFromCustomerT1\",\n \"currentAssetAmountOwingByShareholdersT1\",\n \"currentAssetInventoriesT1\",\n \"currentAssetFinancialAssetAtFairValueT1\",\n \"currentAssetLandUseRightT1\",\n \"currentAssetTaxRecoverableT1\",\n \"currentAssetContractAssetsT1\",\n \"currentAssetCurrentTaxAssetsT1\",\n \"currentAssetPrepaymentsT1\",\n \"currentAssetDerivativeT1\",\n \"currentAssetCashAndBankBalancesT1\",\n \"currentAssetOtherReceivablesT1\",\n \"currentAssetRestrictedCashT1\",\n \"currentAssetCashAndCashEquivalentsT1\",\n \"currentAssetDepositsCashAndBankBalancesT1\",\n \"currentAssetCashAtBanksT1\",\n \"currentAssetCashOnHandT1\",\n \"currentAssetDepositsAndPrepaymentsT1\",\n \"currentAssetTradeAndOtherReceivablesT1\",\n \"currentAssetOtherReceivablesDepositsAndPrepaymentsT1\",\n \"currentAssetOtherReceivablesAndDepositsT1\",\n \"currentAssetOtherReceivablesAndPrepaymentsT1\",\n \"currentAssetCashT1\",\n \"totalCurrentAssetsT1\",\n \"totalAssetsT1\",\n \"currentLiabilitiesTradeCreditorsT1\",\n \"currentLiabilitiesHirePurchasePayablesT1\",\n \"currentLiabilitiesBankOverdraftT1\",\n \"currentLiabilitiesBankAcceptanceT1\",\n \"currentLiabilitiesBorrowingsOrTermLoansT1\",\n \"currentLiabilitiesBankborrowingsT1\",\n \"currentLiabilitiesAmountsOwingToHoldingCompanyT1\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompaniesT1\",\n \"currentLiabilitiesAmountOwingToAssociatedCompaniesT1\",\n \"currentLiabilitiesAmountsOwingToDirectorT1\",\n \"currentLiabilitiesProvisionForTaxationT1\",\n \"currentLiabilitiesLeasePayablesT1\",\n \"currentLiabilitiesFinanceLeasePayablesT1\",\n \"currentLiabilitiesOtherPayablesT1\",\n \"currentLiabilitiesDividendPayablesT1\",\n \"currentLiabilitiesTradeAndOtherPayablesT1\",\n \"currentLiabilitiesDepositsFromCustomersT1\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDepositsT1\",\n \"currentLiabilitiesOtherPayablesAndAccrualsT1\",\n \"currentLiabilitiesContractLiabilitiesT1\",\n \"currentLiabilitiesDerivativeT1\",\n \"totalCurrentLiabilitiesT1\",\n \"shortTermLiabilitiesT1\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoansT1\",\n \"nonCurrentLiabilitiesBankBorrowingsT1\",\n \"nonCurrentLiabilitiesLeaseObligationsT1\",\n \"nonCurrentLiabilitiesFinanceLeaseObligationsT1\",\n \"nonCurrentLiabilitiesDeferredTaxationT1\",\n \"nonCurrentLiabilitiesRetirementBenefitsT1\",\n \"nonCurrentLiabilitiesHirePurchasePayablesT1\",\n \"nonCurrentLiabilitiesDepositsFromCustomersT1\",\n \"nonCurrentLiabilitiesContractLiabilitiesT1\",\n \"totalNonCurrentLiabilitiesT1\",\n \"totalLiabilitiesT1\",\n \"tangibleAssetsT1\",\n \"shareCapitalT1\",\n \"preferenceShareCapitalT1\",\n \"sharePremiumT1\",\n \"reservesT1\",\n \"capitalReservesT1\",\n \"revaluationReservesT1\",\n \"exchangeEqualisationOrFluctuationReservesT1\",\n \"retainedEarningsT1\",\n \"totalEquityT1\",\n \"revenueT1\",\n \"costOfGoodsSoldT1\",\n \"grossProfitT1\",\n \"otherIncomeT1\",\n \"profitFromOperationsT1\",\n \"financeCostT1\",\n \"ebitdaT1\",\n \"taxesT1\",\n \"zakatT1\",\n \"profitAfterTaxT1\",\n \"netProfitT1\",\n \"netOperatingCashFlowT1\",\n \"depreciationT1\",\n \"depreciationOfPropertyPlantEquipmentT1\",\n \"depreciationRightOfUseAssetsT1\",\n \"depreciationOfInvestmentPropertiesT1\",\n \"depreciationOfInvestmentSecuritiesT1\",\n \"endOfYearCashT1\",\n \"nonCurrentAssetsSubsidiaryCompaniesT2\",\n \"nonCurrentAssetsAssociatedCompaniesT2\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditureT2\",\n \"nonCurrentAssetInvestmentPropertiesT2\",\n \"nonCurrentAssetsInvestmentsT2\",\n \"nonCurrentAssetInvestmentSecuritiesT2\",\n \"nonCurrentAssetDeferredAssetsT2\",\n \"nonCurrentAssetDepositsT2\",\n \"nonCurrentAssetOwnGoodwillT2\",\n \"nonCurrentAssetGoodwillOnConsolidationT2\",\n \"nonCurrentAssetSinkingFundT2\",\n \"nonCurrentAssetPropertyPlantEquipmentT2\",\n \"nonCurrentAssetInventoriesT2\",\n \"nonCurrentAssetRightOfUseAssetsT2\",\n \"nonCurrentAssetIntangibleAssetsT2\",\n \"nonCurrentAssetPrepaidLeasePaymentsT2\",\n \"nonCurrentAssetFinancialAssetAtFairValueT2\",\n \"nonCurrentAssetLandUseRightT2\",\n \"nonCurrentAssetTradeReceivablesT2\",\n \"nonCurrentAssetOtherReceivablesT2\",\n \"nonCurrentAssetTradeAndOtherReceivablesT2\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepaymentsT2\",\n \"totalNonCurrentAssetsT2\",\n \"currentAssetDevelopmentPropertiesOrExpenditureT2\",\n \"currentAssetShortTermInvestmentsT2\",\n \"currentAssetTradeDebtorsT2\",\n \"currentAssetShortTermDepositsT2\",\n \"currentAssetAmountDueFromHoldingCompanyT2\",\n \"currentAssetAmountDueFromSubsidiaryCompaniesT2\",\n \"currentAssetAmountDueFromAssociatedCompaniesT2\",\n \"currentAssetAmountDueFromDirectorT2\",\n \"currentAssetAmountDueFromCustomerT2\",\n \"currentAssetAmountOwingByShareholdersT2\",\n \"currentAssetInventoriesT2\",\n \"currentAssetFinancialAssetAtFairValueT2\",\n \"currentAssetLandUseRightT2\",\n \"currentAssetTaxRecoverableT2\",\n \"currentAssetContractAssetsT2\",\n \"currentAssetCurrentTaxAssetsT2\",\n \"currentAssetPrepaymentsT2\",\n \"currentAssetDerivativeT2\",\n \"currentAssetCashAndBankBalancesT2\",\n \"currentAssetOtherReceivablesT2\",\n \"currentAssetRestrictedCashT2\",\n \"currentAssetCashAndCashEquivalentsT2\",\n \"currentAssetDepositsCashAndBankBalancesT2\",\n \"currentAssetCashAtBanksT2\",\n \"currentAssetCashOnHandT2\",\n \"currentAssetDepositsAndPrepaymentsT2\",\n \"currentAssetTradeAndOtherReceivablesT2\",\n \"currentAssetOtherReceivablesDepositsAndPrepaymentsT2\",\n \"currentAssetOtherReceivablesAndDepositsT2\",\n \"currentAssetOtherReceivablesAndPrepaymentsT2\",\n \"currentAssetCashT2\",\n \"totalCurrentAssetsT2\",\n \"totalAssetsT2\",\n \"currentLiabilitiesTradeCreditorsT2\",\n \"currentLiabilitiesHirePurchasePayablesT2\",\n \"currentLiabilitiesBankOverdraftT2\",\n \"currentLiabilitiesBankAcceptanceT2\",\n \"currentLiabilitiesBorrowingsOrTermLoansT2\",\n \"currentLiabilitiesBankborrowingsT2\",\n \"currentLiabilitiesAmountsOwingToHoldingCompanyT2\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompaniesT2\",\n \"currentLiabilitiesAmountOwingToAssociatedCompaniesT2\",\n \"currentLiabilitiesAmountsOwingToDirectorT2\",\n \"currentLiabilitiesProvisionForTaxationT2\",\n \"currentLiabilitiesLeasePayablesT2\",\n \"currentLiabilitiesFinanceLeasePayablesT2\",\n \"currentLiabilitiesOtherPayablesT2\",\n \"currentLiabilitiesDividendPayablesT2\",\n \"currentLiabilitiesTradeAndOtherPayablesT2\",\n \"currentLiabilitiesDepositsFromCustomersT2\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDepositsT2\",\n \"currentLiabilitiesOtherPayablesAndAccrualsT2\",\n \"currentLiabilitiesContractLiabilitiesT2\",\n \"currentLiabilitiesDerivativeT2\",\n \"totalCurrentLiabilitiesT2\",\n \"shortTermLiabilitiesT2\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoansT2\",\n \"nonCurrentLiabilitiesBankBorrowingsT2\",\n \"nonCurrentLiabilitiesLeaseObligationsT2\",\n \"nonCurrentLiabilitiesFinanceLeaseObligationsT2\",\n \"nonCurrentLiabilitiesDeferredTaxationT2\",\n \"nonCurrentLiabilitiesRetirementBenefitsT2\",\n \"nonCurrentLiabilitiesHirePurchasePayablesT2\",\n \"nonCurrentLiabilitiesDepositsFromCustomersT2\",\n \"nonCurrentLiabilitiesContractLiabilitiesT2\",\n \"totalNonCurrentLiabilitiesT2\",\n \"totalLiabilitiesT2\",\n \"tangibleAssetsT2\",\n \"shareCapitalT2\",\n \"preferenceShareCapitalT2\",\n \"sharePremiumT2\",\n \"reservesT2\",\n \"capitalReservesT2\",\n \"revaluationReservesT2\",\n \"exchangeEqualisationOrFluctuationReservesT2\",\n \"retainedEarningsT2\",\n \"totalEquityT2\",\n \"revenueT2\",\n \"costOfGoodsSoldT2\",\n \"grossProfitT2\",\n \"otherIncomeT2\",\n \"profitFromOperationsT2\",\n \"financeCostT2\",\n \"ebitdaT2\",\n \"taxesT2\",\n \"zakatT2\",\n \"profitAfterTaxT2\",\n \"netProfitT2\",\n \"netOperatingCashFlowT2\",\n \"depreciationT2\",\n \"depreciationOfPropertyPlantEquipmentT2\",\n \"depreciationRightOfUseAssetsT2\",\n \"depreciationOfInvestmentPropertiesT2\",\n \"depreciationOfInvestmentSecuritiesT2\",\n \"endOfYearCashT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"financials_fincap_t2\",\n \"displayName\": \"Audited Financial Statement (T-2) (FinCap)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"nonCurrentAssetsSubsidiaryCompaniesT3\",\n \"nonCurrentAssetsAssociatedCompaniesT3\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditureT3\",\n \"nonCurrentAssetInvestmentPropertiesT3\",\n \"nonCurrentAssetsInvestmentsT3\",\n \"nonCurrentAssetInvestmentSecuritiesT3\",\n \"nonCurrentAssetDeferredAssetsT3\",\n \"nonCurrentAssetDepositsT3\",\n \"nonCurrentAssetOwnGoodwillT3\",\n \"nonCurrentAssetGoodwillOnConsolidationT3\",\n \"nonCurrentAssetSinkingFundT3\",\n \"nonCurrentAssetPropertyPlantEquipmentT3\",\n \"nonCurrentAssetInventoriesT3\",\n \"nonCurrentAssetRightOfUseAssetsT3\",\n \"nonCurrentAssetIntangibleAssetsT3\",\n \"nonCurrentAssetPrepaidLeasePaymentsT3\",\n \"nonCurrentAssetFinancialAssetAtFairValueT3\",\n \"nonCurrentAssetLandUseRightT3\",\n \"nonCurrentAssetTradeReceivablesT3\",\n \"nonCurrentAssetOtherReceivablesT3\",\n \"nonCurrentAssetTradeAndOtherReceivablesT3\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepaymentsT3\",\n \"totalNonCurrentAssetsT3\",\n \"currentAssetDevelopmentPropertiesOrExpenditureT3\",\n \"currentAssetShortTermInvestmentsT3\",\n \"currentAssetTradeDebtorsT3\",\n \"currentAssetShortTermDepositsT3\",\n \"currentAssetAmountDueFromHoldingCompanyT3\",\n \"currentAssetAmountDueFromSubsidiaryCompaniesT3\",\n \"currentAssetAmountDueFromAssociatedCompaniesT3\",\n \"currentAssetAmountDueFromDirectorT3\",\n \"currentAssetAmountDueFromCustomerT3\",\n \"currentAssetAmountOwingByShareholdersT3\",\n \"currentAssetInventoriesT3\",\n \"currentAssetFinancialAssetAtFairValueT3\",\n \"currentAssetLandUseRightT3\",\n \"currentAssetTaxRecoverableT3\",\n \"currentAssetContractAssetsT3\",\n \"currentAssetCurrentTaxAssetsT3\",\n \"currentAssetPrepaymentsT3\",\n \"currentAssetDerivativeT3\",\n \"currentAssetCashAndBankBalancesT3\",\n \"currentAssetOtherReceivablesT3\",\n \"currentAssetRestrictedCashT3\",\n \"currentAssetCashAndCashEquivalentsT3\",\n \"currentAssetDepositsCashAndBankBalancesT3\",\n \"currentAssetCashAtBanksT3\",\n \"currentAssetCashOnHandT3\",\n \"currentAssetDepositsAndPrepaymentsT3\",\n \"currentAssetTradeAndOtherReceivablesT3\",\n \"currentAssetOtherReceivablesDepositsAndPrepaymentsT3\",\n \"currentAssetOtherReceivablesAndDepositsT3\",\n \"currentAssetOtherReceivablesAndPrepaymentsT3\",\n \"currentAssetCashT3\",\n \"totalCurrentAssetsT3\",\n \"totalAssetsT3\",\n \"currentLiabilitiesTradeCreditorsT3\",\n \"currentLiabilitiesHirePurchasePayablesT3\",\n \"currentLiabilitiesBankOverdraftT3\",\n \"currentLiabilitiesBankAcceptanceT3\",\n \"currentLiabilitiesBorrowingsOrTermLoansT3\",\n \"currentLiabilitiesBankborrowingsT3\",\n \"currentLiabilitiesAmountsOwingToHoldingCompanyT3\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompaniesT3\",\n \"currentLiabilitiesAmountOwingToAssociatedCompaniesT3\",\n \"currentLiabilitiesAmountsOwingToDirectorT3\",\n \"currentLiabilitiesProvisionForTaxationT3\",\n \"currentLiabilitiesLeasePayablesT3\",\n \"currentLiabilitiesFinanceLeasePayablesT3\",\n \"currentLiabilitiesOtherPayablesT3\",\n \"currentLiabilitiesDividendPayablesT3\",\n \"currentLiabilitiesTradeAndOtherPayablesT3\",\n \"currentLiabilitiesDepositsFromCustomersT3\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDepositsT3\",\n \"currentLiabilitiesOtherPayablesAndAccrualsT3\",\n \"currentLiabilitiesContractLiabilitiesT3\",\n \"currentLiabilitiesDerivativeT3\",\n \"totalCurrentLiabilitiesT3\",\n \"shortTermLiabilitiesT3\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoansT3\",\n \"nonCurrentLiabilitiesBankBorrowingsT3\",\n \"nonCurrentLiabilitiesLeaseObligationsT3\",\n \"nonCurrentLiabilitiesFinanceLeaseObligationsT3\",\n \"nonCurrentLiabilitiesDeferredTaxationT3\",\n \"nonCurrentLiabilitiesRetirementBenefitsT3\",\n \"nonCurrentLiabilitiesHirePurchasePayablesT3\",\n \"nonCurrentLiabilitiesDepositsFromCustomersT3\",\n \"nonCurrentLiabilitiesContractLiabilitiesT3\",\n \"totalNonCurrentLiabilitiesT3\",\n \"totalLiabilitiesT3\",\n \"tangibleAssetsT3\",\n \"shareCapitalT3\",\n \"preferenceShareCapitalT3\",\n \"sharePremiumT3\",\n \"reservesT3\",\n \"capitalReservesT3\",\n \"revaluationReservesT3\",\n \"exchangeEqualisationOrFluctuationReservesT3\",\n \"retainedEarningsT3\",\n \"totalEquityT3\",\n \"revenueT3\",\n \"costOfGoodsSoldT3\",\n \"grossProfitT3\",\n \"otherIncomeT3\",\n \"profitFromOperationsT3\",\n \"financeCostT3\",\n \"ebitdaT3\",\n \"taxesT3\",\n \"zakatT3\",\n \"profitAfterTaxT3\",\n \"netProfitT3\",\n \"netOperatingCashFlowT3\",\n \"depreciationT3\",\n \"depreciationOfPropertyPlantEquipmentT3\",\n \"depreciationRightOfUseAssetsT3\",\n \"depreciationOfInvestmentPropertiesT3\",\n \"depreciationOfInvestmentSecuritiesT3\",\n \"endOfYearCashT3\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"form9\",\n \"displayName\": \"Form 9 / Section 17 / Form D\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"incorporatedDate\",\n \"companyName\",\n \"companyRegNo\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"ssm\",\n \"displayName\": \"SSM Company Profile\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"ssmCompanyName\",\n \"ssmCompanyRegNo\",\n \"ssmIncorporatedDate\",\n \"businessCommencementDate\",\n \"businessNature\",\n \"ssmCompanyEntityType\",\n \"ssmPaidUpCapital\",\n \"companyStatus\",\n \"shareholders\",\n \"directors\",\n \"previousDirectors\",\n \"totalShareIssued\",\n \"companyLastOldName\",\n \"companyNameDateOfChange\",\n \"businessOrigin\",\n \"registeredAddress\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"ic\",\n \"displayName\": \"Identification Card (Front)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"icNumber\",\n \"icName\",\n \"icAddress\",\n \"icGender\",\n \"icReligion\",\n \"icDateOfBirth\",\n \"icPlaceOfBirth\",\n \"icNationality\",\n \"icRace\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"epf_statement_t1\",\n \"displayName\": \"Employees' Provident Fund (T-1)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"epfAccountHolderNameT1\",\n \"epfAccountHolderAddressT1\",\n \"epfStatementYearT1\",\n \"epfKwspMemberNumberT1\",\n \"epfIcNumberT1\",\n \"epfEmployerNumberT1\",\n \"epfDateOfStatementT1\",\n \"epfTotalContributionT1\",\n \"epfTotalCurrentContributionT1\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"epf_statement_t2\",\n \"displayName\": \"Employees' Provident Fund (T-2)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"epfAccountHolderNameT2\",\n \"epfAccountHolderAddressT2\",\n \"epfStatementYearT2\",\n \"epfKwspMemberNumberT2\",\n \"epfIcNumberT2\",\n \"epfEmployerNumberT2\",\n \"epfDateOfStatementT2\",\n \"epfTotalContributionT2\",\n \"epfTotalCurrentContributionT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t1\",\n \"displayName\": \"Payslip Statement (Month T-1)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT1\",\n \"payslipEmployeeNameT1\",\n \"payslipPayPeriodT1\",\n \"payslipPayDateT1\",\n \"payslipGrossPayT1\",\n \"payslipDeductionT1\",\n \"payslipEmployeeEpfContributionT1\",\n \"payslipEmployeeSocsoContributionT1\",\n \"payslipNetPayT1\",\n \"payslipBasicPayT1\",\n \"payslipFixedAllowancesT1\",\n \"payslipVariableIncomeT1\",\n \"payslipEmployeeEisContributionT1\",\n \"payslipEmployeeTaxT1\",\n \"payslipOtherDeductionT1\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t2\",\n \"displayName\": \"Payslip Statement (Month T-2)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT2\",\n \"payslipEmployeeNameT2\",\n \"payslipPayPeriodT2\",\n \"payslipPayDateT2\",\n \"payslipGrossPayT2\",\n \"payslipDeductionT2\",\n \"payslipEmployeeEpfContributionT2\",\n \"payslipEmployeeSocsoContributionT2\",\n \"payslipNetPayT2\",\n \"payslipBasicPayT2\",\n \"payslipFixedAllowancesT2\",\n \"payslipVariableIncomeT2\",\n \"payslipEmployeeEisContributionT2\",\n \"payslipEmployeeTaxT2\",\n \"payslipOtherDeductionT2\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t3\",\n \"displayName\": \"Payslip Statement (Month T-3)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT3\",\n \"payslipEmployeeNameT3\",\n \"payslipPayPeriodT3\",\n \"payslipPayDateT3\",\n \"payslipGrossPayT3\",\n \"payslipDeductionT3\",\n \"payslipEmployeeEpfContributionT3\",\n \"payslipEmployeeSocsoContributionT3\",\n \"payslipNetPayT3\",\n \"payslipBasicPayT3\",\n \"payslipFixedAllowancesT3\",\n \"payslipVariableIncomeT3\",\n \"payslipEmployeeEisContributionT3\",\n \"payslipEmployeeTaxT3\",\n \"payslipOtherDeductionT3\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t4\",\n \"displayName\": \"Payslip Statement (Month T-4)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT4\",\n \"payslipEmployeeNameT4\",\n \"payslipPayPeriodT4\",\n \"payslipPayDateT4\",\n \"payslipGrossPayT4\",\n \"payslipDeductionT4\",\n \"payslipEmployeeEpfContributionT4\",\n \"payslipEmployeeSocsoContributionT4\",\n \"payslipNetPayT4\",\n \"payslipBasicPayT4\",\n \"payslipFixedAllowancesT4\",\n \"payslipVariableIncomeT4\",\n \"payslipEmployeeEisContributionT4\",\n \"payslipEmployeeTaxT4\",\n \"payslipOtherDeductionT4\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t5\",\n \"displayName\": \"Payslip Statement (Month T-5)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT5\",\n \"payslipEmployeeNameT5\",\n \"payslipPayPeriodT5\",\n \"payslipPayDateT5\",\n \"payslipGrossPayT5\",\n \"payslipDeductionT5\",\n \"payslipEmployeeEpfContributionT5\",\n \"payslipEmployeeSocsoContributionT5\",\n \"payslipNetPayT5\",\n \"payslipBasicPayT5\",\n \"payslipFixedAllowancesT5\",\n \"payslipVariableIncomeT5\",\n \"payslipEmployeeEisContributionT5\",\n \"payslipEmployeeTaxT5\",\n \"payslipOtherDeductionT5\"\n ],\n \"category\": \"13\"\n },\n {\n \"name\": \"payslip_statement_t6\",\n \"displayName\": \"Payslip Statement (Month T-6)\",\n \"type\": \"file\",\n \"ihs_column_names\": [\n \"payslipEmployerNameT6\",\n \"payslipEmployeeNameT6\",\n \"payslipPayPeriodT6\",\n \"payslipPayDateT6\",\n \"payslipGrossPayT6\",\n \"payslipDeductionT6\",\n \"payslipEmployeeEpfContributionT6\",\n \"payslipEmployeeSocsoContributionT6\",\n \"payslipNetPayT6\",\n \"payslipBasicPayT6\",\n \"payslipFixedAllowancesT6\",\n \"payslipVariableIncomeT6\",\n \"payslipEmployeeEisContributionT6\",\n \"payslipEmployeeTaxT6\",\n \"payslipOtherDeductionT6\"\n ],\n \"category\": \"13\"\n }\n ]\n}\n","{\n \"version\": 2,\n \"types\": [\n {\n \"displayName\": \"Text\",\n \"name\": \"text\"\n },\n {\n \"displayName\": \"Number\",\n \"name\": \"number\"\n },\n {\n \"displayName\": \"Email\",\n \"name\": \"email\"\n },\n {\n \"displayName\": \"Dropdown\",\n \"name\": \"dropdown\"\n },\n {\n \"displayName\": \"Checkbox\",\n \"name\": \"checkbox\"\n },\n {\n \"displayName\": \"Radio Group\",\n \"name\": \"radiogroup\"\n },\n {\n \"displayName\": \"Boolean\",\n \"name\": \"boolean\"\n },\n {\n \"displayName\": \"File\",\n \"name\": \"file\"\n },\n {\n \"displayName\": \"Slider\",\n \"name\": \"slider\"\n },\n {\n \"displayName\": \"Range\",\n \"name\": \"range\"\n },\n {\n \"displayName\": \"Long Text (Comment)\",\n \"name\": \"comment\"\n },\n {\n \"displayName\": \"HTML Content\",\n \"name\": \"html\"\n }\n ],\n \"input_types\": [\n {\n \"displayName\": \"Text\",\n \"name\": \"text\"\n },\n {\n \"displayName\": \"Number\",\n \"name\": \"number\"\n },\n {\n \"displayName\": \"Email\",\n \"name\": \"email\"\n },\n {\n \"displayName\": \"Tel\",\n \"name\": \"tel\"\n },\n {\n \"displayName\": \"Date\",\n \"name\": \"date\"\n },\n {\n \"displayName\": \"Password\",\n \"name\": \"password\"\n },\n {\n \"displayName\": \"URL\",\n \"name\": \"url\"\n }\n ]\n}\n","{\n \"version\": 1,\n \"options\": [\n {\n \"id\": 1,\n \"displayName\": \"Numeric Validator\",\n \"class\": \"NumericValidator\",\n \"description\": \"Ensures the answer is a number within the specified range of minValue and maxValue.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"numeric\",\n \"text\": \"Value must be within the range of 0 to 100\",\n \"minValue\": 0,\n \"maxValue\": 100\n }\n ]\n },\n {\n \"id\": 2,\n \"displayName\": \"Text Length Validator\",\n \"class\": \"TextValidator\",\n \"description\": \"Confirms the length of entered text is between minLength and maxLength.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"text\",\n \"minLength\": 10,\n \"maxLength\": 280\n }\n ]\n },\n {\n \"id\": 3,\n \"displayName\": \"Regex Validator\",\n \"class\": \"RegexValidator\",\n \"description\": \"Throws an error if an entered value does not match a regular expression defined in the regex property.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"The value must match the required pattern.\",\n \"regex\": \"your-regex-pattern-here\"\n }\n ]\n },\n {\n \"id\": 4,\n \"displayName\": \"Email Validator\",\n \"class\": \"EmailValidator\",\n \"description\": \"Confirms that the entered value is a valid e-mail address.\",\n \"isRequired\": true,\n \"validators\": [\n {\n \"type\": \"email\",\n \"text\": \"Value must be a valid email\"\n }\n ]\n },\n {\n \"id\": 5,\n \"displayName\": \"Expression Validator\",\n \"class\": \"ExpressionValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures that the field's expression always evaluates to true.\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{fields} = true\",\n \"text\": \"The value must be true and cannot be false.\"\n }\n ]\n },\n {\n \"id\": 6,\n \"displayName\": \"Answer Count Validator\",\n \"class\": \"AnswerCountValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures selection of an appropriate number of choices, keeping responses within the minCount and maxCount range.\",\n \"validators\": [\n {\n \"type\": \"answercount\",\n \"minCount\": 2,\n \"maxCount\": 4\n }\n ]\n },\n {\n \"id\": 7,\n \"displayName\": \"Full Name Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures that the entered value is a valid full name.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please make sure the name doesn't include extra spaces, numbers, or invalid symbols\",\n \"regex\": \"^[A-Za-z'-]+(?:\\\\s[A-Za-z'-]+)*\\\\s?[A-Za-z'-]+$\"\n }\n ]\n },\n {\n \"id\": 8,\n \"displayName\": \"Mobile Phone No Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures valid Malaysia phone number is entered.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^(011[0-9]{8}|01[2346789][0-9]{7}|[2-9][0-9]{0,8})$\"\n }\n ]\n },\n {\n \"id\": 9,\n \"displayName\": \"IC Number Total Digits Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures exactly 12 digits are entered for the IC number.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{12}$\",\n \"text\": \"Please enter exactly 12 digits numbers\"\n }\n ]\n },\n {\n \"id\": 10,\n \"displayName\": \"IC Number Valid Birth Year, Month, and Date Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures valid birth year, month, and day are entered for the IC number.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^(\\\\d{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\\\d{6}$\",\n \"text\": \"First 6 digits must be valid birth year (00-99), month (01-12), and day (01-31)\"\n }\n ]\n },\n {\n \"id\": 11,\n \"displayName\": \"Duration in Current Residence (Months) Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures duration includes a number between 0-11.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|10|11)$\",\n \"text\": \"Value must be a number between 0-11.\"\n }\n ]\n },\n {\n \"id\": 12,\n \"displayName\": \"Duration in Current Residence (Years) Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures duration includes a number between 0-99.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^([0-9]|[1-9][0-9])$\",\n \"text\": \"Value must be a number between 0-99.\"\n }\n ]\n },\n {\n \"id\": 13,\n \"displayName\": \"Office Phone No. Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures office phone number is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"The phone number must be a valid Malaysian number\",\n \"regex\": \"^(011[0-9]{8}|(60[4-7]|004|005|006|007|009|609|012|013|014|016|017|019)[0-9]{7})$\"\n }\n ]\n },\n {\n \"id\": 14,\n \"displayName\": \"Age Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures age entered is between 21-55.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number age between 21 and 55.\",\n \"regex\": \"^(2[1-9]|[3-4][0-9]|55)$\"\n }\n ]\n },\n {\n \"id\": 15,\n \"displayName\": \"Consent(s) Expression Validator\",\n \"class\": \"ExpressionValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures that the field's expression always evaluates to true.\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{consentCrossSelling} = true\",\n \"text\": \"You must provide consent to Consent Cross-Selling.\"\n }\n ]\n },\n {\n \"id\": 16,\n \"displayName\": \"Date Joined Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures date joined is in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\",\n \"text\": \"Date must be in YYYY-MM-DD format\"\n }\n ]\n },\n {\n \"id\": 17,\n \"displayName\": \"Date Joined Custom Validator\",\n \"class\": \"CustomValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures date joined is not in the future.\",\n \"validators\": [\n {\n \"type\": \"custom\",\n \"validator\": \"validateNotFutureDate\",\n \"text\": \"Date of joining cannot be in the future\"\n }\n ]\n },\n {\n \"id\": 18,\n \"displayName\": \"Emergency Contact No. Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures emergency contact number is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"A valid Malaysia phone number is required.\",\n \"regex\": \"^((60[4-79]|0[4-79])[0-9]{7}|011[0-9]{8}|01[2346789][0-9]{7})$\"\n }\n ]\n },\n {\n \"id\": 19,\n \"displayName\": \"Monthly Gross Income Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures monthly gross income is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"regex\": \"^\\\\d+(\\\\.\\\\d+)?$\",\n \"text\": \"Please enter a valid non-negative number.\"\n }\n ]\n },\n {\n \"id\": 20,\n \"displayName\": \"Monthly Gross Income Expression Validator\",\n \"class\": \"ExpressionValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures monthly gross income is at least RM 2000.\",\n \"validators\": [\n {\n \"type\": \"expression\",\n \"expression\": \"{monthlyGrossIncome} >= 2000\",\n \"text\": \"Income must be at least RM 2000.\"\n }\n ]\n },\n {\n \"id\": 21,\n \"displayName\": \"No of Dependants Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures number of dependants is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid whole number between 0 and 99.\",\n \"regex\": \"^[0-9][0-9]?$\"\n }\n ]\n },\n {\n \"id\": 22,\n \"displayName\": \"Financing Tenure (Years) Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures financing tenure is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a valid financing tenure from 1 to 7 years.\",\n \"regex\": \"^[1-7]$\"\n }\n ]\n },\n {\n \"id\": 23,\n \"displayName\": \"Financing Amount Range Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures financing amount is entered in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter a financing amount between 2,000 and 150,000.\",\n \"regex\": \"^(2000|[1-9][0-9]{3}|[1-9][0-9]{4}|150000)$\"\n }\n ]\n },\n {\n \"id\": 24,\n \"displayName\": \"Financing Amount Incrementals Regex Validator\",\n \"class\": \"RegexValidator\",\n \"isRequired\": true,\n \"description\": \"Ensures financing amount is entered incrementally in the correct format.\",\n \"validators\": [\n {\n \"type\": \"regex\",\n \"text\": \"Please enter an amount in increments of 1,000.\",\n \"regex\": \"^([1-9][0-9]*000|150000)$\"\n }\n ]\n }\n ]\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FieldData, Category } from \"./survey-generator.js\";\nimport type { FormFieldTypeDefinitions, EditorValidator } from \"./form-field.js\";\nimport type { FormValidatorDefinitions } from \"./form-field-validator.js\";\nimport FormField from \"./form-field.js\";\nimport baseSpecsData from \"./data/form-field-base-specs.json\" with { type: \"json\" };\nimport typeDefsData from \"./data/form-field-types.json\" with { type: \"json\" };\nimport validatorDefsData from \"./data/form-field-validators.json\" with { type: \"json\" };\n\nexport const BASE_FIELD_SPECS: {\n schemaVersion: string;\n categories: Category[];\n fields: FieldData[];\n} = baseSpecsData as any;\n\nexport const FIELD_TYPE_DEFINITIONS: FormFieldTypeDefinitions = typeDefsData as FormFieldTypeDefinitions;\n\nexport const DEFAULT_VALIDATOR_DEFINITIONS: FormValidatorDefinitions = {\n version: (validatorDefsData as any).version,\n options: (validatorDefsData as any).options as EditorValidator[],\n};\n\nexport function getBaseFieldSpecs(): FieldData[] {\n return BASE_FIELD_SPECS.fields;\n}\n\nexport function getBaseCategories(): Category[] {\n return BASE_FIELD_SPECS.categories;\n}\n\nlet cachedFieldSpecMap: Map<string, FieldData> | null = null;\n\n/**\n * Returns a cached Map of base field name → FieldData.\n * Keyed by each field's `name` property from the base specs.\n */\nexport function getBaseFieldSpecMap(): Map<string, FieldData> {\n if (cachedFieldSpecMap) {\n return cachedFieldSpecMap;\n }\n\n const map = new Map<string, FieldData>();\n for (const field of BASE_FIELD_SPECS.fields) {\n if (field.name) {\n map.set(field.name, field);\n }\n }\n\n cachedFieldSpecMap = map;\n return cachedFieldSpecMap;\n}\n\nlet cachedFieldNames: string[] | null = null;\n\nexport function getBaseFieldNames(): string[] {\n if (cachedFieldNames) {\n return cachedFieldNames;\n }\n\n const fields = BASE_FIELD_SPECS.fields;\n const names: string[] = [];\n\n for (const field of fields) {\n try {\n const formField = FormField.fromObject(field);\n names.push(...formField.getFieldNames());\n } catch {\n // Skip fields that fail to parse\n }\n }\n\n cachedFieldNames = [...new Set(names)];\n return cachedFieldNames;\n}\n","/*\n * IHS data processing types.\n * Used by finsys-client and finhub-adonisjs to render application details.\n */\n\nexport enum IhsValueFormat {\n STRING = 'string',\n CURRENCY = 'currency',\n NUMBER = 'number',\n PERCENTAGE = 'percentage',\n DATE = 'date',\n TABLE = 'table',\n}\n\nexport interface IhsFieldDetail {\n name: string\n displayName: string\n category: string\n value: unknown\n valueFormat: IhsValueFormat\n}\n\nexport interface IhsDetailCategory {\n category: string\n items: { name: string; displayName: string; value: unknown; valueFormat: IhsValueFormat }[]\n}\n\nexport enum FileFieldTableType {\n TIME_SERIES = 'timeSeries',\n KEY_VALUE = 'keyValue',\n}\n\nexport interface FileFieldTableItem {\n displayName: string\n timePeriods: string[]\n data: Record<string, unknown>\n formattedData: Record<string, string>\n type: FileFieldTableType\n isNumeric: boolean\n}\n\nexport interface FileFieldTableData {\n name: string\n displayName: string\n type: FileFieldTableType\n items: FileFieldTableItem[]\n hasData: boolean\n}\n","{\n \"accountHolderName\": \"Account Holder Name\",\n \"statementDate\": \"Statement Date\",\n \"bankName\": \"Bank Name\",\n \"accountNumber\": \"Account Number\",\n \"totalCredits\": \"Total Credits\",\n \"totalDebits\": \"Total Debits\",\n \"openingBalance\": \"Opening Balance\",\n \"bankBalance\": \"Bank Balance\",\n \"nonCurrentAssetsSubsidiaryCompanies\": \"Subsidiary Companies (Non-Current Assets)\",\n \"nonCurrentAssetsAssociatedCompanies\": \"Associated Companies (Non-Current Assets)\",\n \"nonCurrentAssetsDevelopmentPropertiesOrExpenditure\": \"Development Properties/Expenditure (Non-Current Assets)\",\n \"nonCurrentAssetInvestmentProperties\": \"Investment Properties (Non-Current Assets)\",\n \"nonCurrentAssetsInvestments\": \"Investments (Non-Current Assets)\",\n \"nonCurrentAssetInvestmentSecurities\": \"Investment Securities (Non-Current Assets)\",\n \"nonCurrentAssetDeferredAssets\": \"Deferred Assets (Non-Current Assets)\",\n \"nonCurrentAssetDeposits\": \"Deposits (Non-Current Assets)\",\n \"nonCurrentAssetOwnGoodwill\": \"Own Goodwill (Non-Current Assets)\",\n \"nonCurrentAssetGoodwillOnConsolidation\": \"Goodwill on Consolidation (Non-Current Assets)\",\n \"nonCurrentAssetSinkingFund\": \"Sinking Fund (Non-Current Assets)\",\n \"nonCurrentAssetPropertyPlantEquipment\": \"Property, Plant & Equipment (Non-Current Assets)\",\n \"nonCurrentAssetInventories\": \"Inventories (Non-Current Assets)\",\n \"nonCurrentAssetRightOfUseAssets\": \"Right of Use Assets (Non-Current Assets)\",\n \"nonCurrentAssetIntangibleAssets\": \"Intangible Assets (Non-Current Assets)\",\n \"nonCurrentAssetPrepaidLeasePayments\": \"Prepaid Lease Payments (Non-Current Assets)\",\n \"nonCurrentAssetFinancialAssetAtFairValue\": \"Financial Assets at Fair Value (Non-Current Assets)\",\n \"nonCurrentAssetLandUseRight\": \"Land Use Rights (Non-Current Assets)\",\n \"nonCurrentAssetTradeReceivables\": \"Trade Receivables (Non-Current Assets)\",\n \"nonCurrentAssetOtherReceivables\": \"Other Receivables (Non-Current Assets)\",\n \"nonCurrentAssetTradeAndOtherReceivables\": \"Trade and Other Receivables (Non-Current Assets)\",\n \"nonCurrentAssetOtherReceivablesDepositsAndPrepayments\": \"Other Receivables, Deposits and Prepayments (Non-Current Assets)\",\n \"totalNonCurrentAssets\": \"Total Non-Current Assets\",\n \"currentAssetDevelopmentPropertiesOrExpenditure\": \"Development Properties/Expenditure (Current Assets)\",\n \"currentAssetShortTermInvestments\": \"Short Term Investments (Current Assets)\",\n \"currentAssetTradeDebtors\": \"Trade Debtors (Current Assets)\",\n \"currentAssetShortTermDeposits\": \"Short Term Deposits (Current Assets)\",\n \"currentAssetAmountDueFromHoldingCompany\": \"Amount Due from Holding Company (Current Assets)\",\n \"currentAssetAmountDueFromSubsidiaryCompanies\": \"Amount Due from Subsidiary Companies (Current Assets)\",\n \"currentAssetAmountDueFromAssociatedCompanies\": \"Amount Due from Associated Companies (Current Assets)\",\n \"currentAssetAmountDueFromDirector\": \"Amount Due from Director (Current Assets)\",\n \"currentAssetAmountDueFromCustomer\": \"Amount Due from Customer (Current Assets)\",\n \"currentAssetAmountOwingByShareholders\": \"Amount Owing by Shareholders (Current Assets)\",\n \"currentAssetInventories\": \"Inventories (Current Assets)\",\n \"currentAssetFinancialAssetAtFairValue\": \"Financial Assets at Fair Value (Current Assets)\",\n \"currentAssetLandUseRight\": \"Land Use Rights (Current Assets)\",\n \"currentAssetTaxRecoverable\": \"Tax Recoverable (Current Assets)\",\n \"currentAssetContractAssets\": \"Contract Assets (Current Assets)\",\n \"currentAssetCurrentTaxAssets\": \"Current Tax Assets (Current Assets)\",\n \"currentAssetPrepayments\": \"Prepayments (Current Assets)\",\n \"currentAssetDerivative\": \"Derivatives (Current Assets)\",\n \"currentAssetCashAndBankBalances\": \"Cash and Bank Balances (Current Assets)\",\n \"currentAssetOtherReceivables\": \"Other Receivables (Current Assets)\",\n \"currentAssetRestrictedCash\": \"Restricted Cash (Current Assets)\",\n \"currentAssetCashAndCashEquivalents\": \"Cash and Cash Equivalents (Current Assets)\",\n \"currentAssetDepositsCashAndBankBalances\": \"Deposits, Cash and Bank Balances (Current Assets)\",\n \"currentAssetCashAtBanks\": \"Cash at Banks (Current Assets)\",\n \"currentAssetCashOnHand\": \"Cash on Hand (Current Assets)\",\n \"currentAssetDepositsAndPrepayments\": \"Deposits and Prepayments (Current Assets)\",\n \"currentAssetTradeAndOtherReceivables\": \"Trade and Other Receivables (Current Assets)\",\n \"currentAssetOtherReceivablesDepositsAndPrepayments\": \"Other Receivables, Deposits and Prepayments (Current Assets)\",\n \"currentAssetOtherReceivablesAndDeposits\": \"Other Receivables and Deposits (Current Assets)\",\n \"currentAssetOtherReceivablesAndPrepayments\": \"Other Receivables and Prepayments (Current Assets)\",\n \"currentAssetCash\": \"Cash (Current Assets)\",\n \"totalCurrentAssets\": \"Total Current Assets\",\n \"totalAssets\": \"Total Assets\",\n \"currentLiabilitiesTradeCreditors\": \"Trade Creditors (Current Liabilities)\",\n \"currentLiabilitiesHirePurchasePayables\": \"Hire Purchase Payables (Current Liabilities)\",\n \"currentLiabilitiesBankOverdraft\": \"Bank Overdraft (Current Liabilities)\",\n \"currentLiabilitiesBankAcceptance\": \"Bank Acceptance (Current Liabilities)\",\n \"currentLiabilitiesBorrowingsOrTermLoans\": \"Borrowings/Term Loans (Current Liabilities)\",\n \"currentLiabilitiesBankborrowings\": \"Bank Borrowings (Current Liabilities)\",\n \"currentLiabilitiesAmountsOwingToHoldingCompany\": \"Amounts Owing to Holding Company (Current Liabilities)\",\n \"currentLiabilitiesAmountsOwingToSubsidiaryCompanies\": \"Amounts Owing to Subsidiary Companies (Current Liabilities)\",\n \"currentLiabilitiesAmountOwingToAssociatedCompanies\": \"Amount Owing to Associated Companies (Current Liabilities)\",\n \"currentLiabilitiesAmountsOwingToDirector\": \"Amounts Owing to Director (Current Liabilities)\",\n \"currentLiabilitiesProvisionForTaxation\": \"Provision for Taxation (Current Liabilities)\",\n \"currentLiabilitiesLeasePayables\": \"Lease Payables (Current Liabilities)\",\n \"currentLiabilitiesFinanceLeasePayables\": \"Finance Lease Payables (Current Liabilities)\",\n \"currentLiabilitiesOtherPayables\": \"Other Payables (Current Liabilities)\",\n \"currentLiabilitiesDividendPayables\": \"Dividend Payables (Current Liabilities)\",\n \"currentLiabilitiesTradeAndOtherPayables\": \"Trade and Other Payables (Current Liabilities)\",\n \"currentLiabilitiesDepositsFromCustomers\": \"Deposits from Customers (Current Liabilities)\",\n \"currentLiabilitiesOtherPayablesAccrualsAndDeposits\": \"Other Payables, Accruals and Deposits (Current Liabilities)\",\n \"currentLiabilitiesOtherPayablesAndAccruals\": \"Other Payables and Accruals (Current Liabilities)\",\n \"currentLiabilitiesContractLiabilities\": \"Contract Liabilities (Current Liabilities)\",\n \"currentLiabilitiesDerivative\": \"Derivative Liabilities (Current Liabilities)\",\n \"totalCurrentLiabilities\": \"Total Current Liabilities\",\n \"shortTermLiabilities\": \"Short Term Liabilities\",\n \"nonCurrentLiabilitiesBorrowingsOrTermLoans\": \"Borrowings/Term Loans (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesBankBorrowings\": \"Bank Borrowings (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesLeaseObligations\": \"Lease Obligations (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesFinanceLeaseObligations\": \"Finance Lease Obligations (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesDeferredTaxation\": \"Deferred Taxation (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesRetirementBenefits\": \"Retirement Benefits (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesHirePurchasePayables\": \"Hire Purchase Payables (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesDepositsFromCustomers\": \"Deposits from Customers (Non-Current Liabilities)\",\n \"nonCurrentLiabilitiesContractLiabilities\": \"Contract Liabilities (Non-Current Liabilities)\",\n \"totalNonCurrentLiabilities\": \"Total Non-Current Liabilities\",\n \"totalLiabilities\": \"Total Liabilities\",\n \"tangibleAssets\": \"Tangible Assets\",\n \"shareCapital\": \"Share Capital\",\n \"preferenceShareCapital\": \"Preference Share Capital\",\n \"sharePremium\": \"Share Premium\",\n \"reserves\": \"Reserves\",\n \"capitalReserves\": \"Capital Reserves\",\n \"revaluationReserves\": \"Revaluation Reserves\",\n \"exchangeEqualisationOrFluctuationReserves\": \"Exchange Equalisation/Fluctuation Reserves\",\n \"retainedEarnings\": \"Retained Earnings\",\n \"totalEquity\": \"Total Equity\",\n \"revenue\": \"Revenue\",\n \"costOfGoodsSold\": \"Cost of Goods Sold\",\n \"grossProfit\": \"Gross Profit\",\n \"otherIncome\": \"Other Income\",\n \"profitFromOperations\": \"Profit from Operations\",\n \"financeCost\": \"Finance Cost\",\n \"ebitda\": \"Profit Before Tax\",\n \"taxes\": \"Taxes\",\n \"zakat\": \"Zakat\",\n \"profitAfterTax\": \"Profit After Tax\",\n \"netProfit\": \"Net Profit\",\n \"netOperatingCashFlow\": \"Net Operating Cash Flow\",\n \"depreciation\": \"Depreciation\",\n \"depreciationOfPropertyPlantEquipment\": \"Depreciation of Property, Plant & Equipment\",\n \"depreciationRightOfUseAssets\": \"Depreciation of Right of Use Assets\",\n \"depreciationOfInvestmentProperties\": \"Depreciation of Investment Properties\",\n \"depreciationOfInvestmentSecurities\": \"Depreciation of Investment Securities\",\n \"endOfYearCash\": \"End of Year Cash\",\n \"epfAccountHolderName\": \"Account Holder Name\",\n \"epfAccountHolderAddress\": \"Account Holder Address\",\n \"epfStatementYear\": \"Statement Year\",\n \"epfKwspMemberNumber\": \"KWSP Member Number\",\n \"epfIcNumber\": \"IC No.\",\n \"epfEmployerNumber\": \"Employer Number\",\n \"epfDateOfStatement\": \"Date Of Statement\",\n \"epfTotalContribution\": \"Total Contribution\",\n \"epfTotalCurrentContribution\": \"Total Current Contribution\",\n \"payslipEmployerName\": \"Employer Name\",\n \"payslipEmployeeName\": \"Employee Name\",\n \"payslipPayPeriod\": \"Pay Period\",\n \"payslipPayDate\": \"Pay Date\",\n \"payslipGrossPay\": \"Gross Pay\",\n \"payslipDeduction\": \"Deduction\",\n \"payslipEmployeeEpfContribution\": \"Employee EPF Contribution\",\n \"payslipEmployeeSocsoContribution\": \"Employee SOCSO Contribution\",\n \"payslipNetPay\": \"Net Pay\",\n \"incorporatedDate\": \"Incorporated Date\",\n \"companyName\": \"Company Name\",\n \"companyRegNo\": \"Company Registration No.\",\n \"ssmCompanyName\": \"Company Name (SSM)\",\n \"ssmCompanyRegNo\": \"Registration No. (SSM)\",\n \"ssmIncorporatedDate\": \"Incorporated Date (SSM)\",\n \"ssmCompanyEntityType\": \"Entity Type (SSM)\",\n \"ssmPaidUpCapital\": \"Paid-Up Capital (SSM)\",\n \"businessCommencementDate\": \"Business Commencement Date\",\n \"businessNature\": \"Business Nature\",\n \"companyStatus\": \"Company Status\",\n \"shareholders\": \"Shareholders\",\n \"directors\": \"Directors\",\n \"previousDirectors\": \"Previous Directors\",\n \"totalShareIssued\": \"Total Shares Issued\",\n \"companyLastOldName\": \"Previous Company Name\",\n \"companyNameDateOfChange\": \"Company Name Change Date\",\n \"businessOrigin\": \"Business Origin\",\n \"registeredAddress\": \"Registered Address\",\n \"icName\": \"Name (IC)\",\n \"icNumber\": \"IC Number\",\n \"icAddress\": \"Address (IC)\",\n \"icGender\": \"Gender (IC)\",\n \"icReligion\": \"Religion (IC)\",\n \"icDateOfBirth\": \"Date of Birth (IC)\",\n \"icPlaceOfBirth\": \"Place of Birth (IC)\",\n \"icNationality\": \"Nationality (IC)\",\n \"icRace\": \"Race (IC)\"\n}\n","/*\n * IHS data processing functions.\n *\n * Pure data transformations for extracting structured detail and\n * file-field table data from raw IHS API responses. Used by both\n * finsys-client and finhub-adonisjs.\n */\n\nimport type { FieldData } from './survey-generator.js'\nimport {\n IhsValueFormat,\n FileFieldTableType,\n} from './ihs-types.js'\nimport type {\n IhsFieldDetail,\n IhsDetailCategory,\n FileFieldTableData,\n FileFieldTableItem,\n} from './ihs-types.js'\nimport { getBaseFieldSpecs, getBaseCategories, getBaseFieldSpecMap } from './catalogs.js'\nimport displayNamesData from './data/form-field-display-names.json' with { type: 'json' }\n\n// ── Display names ──────────────────────────────────────────────\n\nconst displayNames: Record<string, string> = displayNamesData as Record<string, string>\n\n/** Returns the full display name registry (extraction column → human label). */\nexport function getDisplayNames(): Record<string, string> {\n return displayNames\n}\n\n/** Looks up a display name. Falls back to camelCase → Title Case conversion. */\nexport function getDisplayName(fieldName: string): string {\n if (displayNames[fieldName]) return displayNames[fieldName]\n return fieldName\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (s) => s.toUpperCase())\n .trim()\n}\n\n// ── Time-period utilities ──────────────────────────────────────\n\nconst TIME_PERIOD_REGEX = /T(\\d+)$/\n\nexport function extractTimePeriods(columnNames: string[]): string[] {\n const periods = new Set<string>()\n for (const col of columnNames) {\n const match = TIME_PERIOD_REGEX.exec(col)\n if (match) periods.add(`T${match[1]}`)\n }\n return [...periods].sort((a, b) => {\n const numA = parseInt(a.slice(1), 10)\n const numB = parseInt(b.slice(1), 10)\n return numA - numB\n })\n}\n\nexport function groupColumnsByTimePeriod(\n columnNames: string[]\n): Record<string, Record<string, string>> {\n const groups: Record<string, Record<string, string>> = {}\n for (const col of columnNames) {\n const match = /^(.+?)(T\\d+)$/.exec(col)\n if (!match) continue\n const [, baseName, period] = match\n if (!groups[baseName]) groups[baseName] = {}\n groups[baseName][period] = col\n }\n return groups\n}\n\n// ── Field grouping ─────────────────────────────────────────────\n\nconst FIELD_GROUP_PREFIXES: [string, string][] = [\n ['bank_statement', 'bank_statements'],\n ['financials', 'financials'],\n ['epf_statement', 'epf_statements'],\n ['payslip_statement', 'payslip_statements'],\n ['ssm', 'ssm_documents'],\n ['form9', 'form9'],\n ['ic', 'ic_documents'],\n]\n\nexport function groupFieldsByPattern(fields: FieldData[]): Record<string, FieldData[]> {\n const groups: Record<string, FieldData[]> = {}\n for (const field of fields) {\n if (!field.name) continue\n let groupName = field.name\n for (const [prefix, group] of FIELD_GROUP_PREFIXES) {\n if (field.name.startsWith(prefix)) {\n groupName = group\n break\n }\n }\n if (!groups[groupName]) groups[groupName] = []\n groups[groupName].push(field)\n }\n return groups\n}\n\n/** Human-friendly display names for field groups (when a group combines multiple fields). */\nconst GROUP_DISPLAY_NAMES: Record<string, string> = {\n bank_statements: 'Bank Statements',\n financials: 'Audited Financial Statements',\n epf_statements: 'EPF Statements',\n payslip_statements: 'Payslip Statements',\n form9: 'Form 9 / Section 17 / Form D',\n ssm_documents: 'SSM Company Information',\n ic_documents: 'Identification Card',\n}\n\n/** Returns human-friendly display names for field groups. */\nexport function getGroupDisplayNames(): Record<string, string> {\n return GROUP_DISPLAY_NAMES\n}\n\n// ── File-field table building ──────────────────────────────────\n\nfunction isNumericField(fieldName: string): boolean {\n const patterns = [\n 'balance',\n 'amount',\n 'credit',\n 'debit',\n 'total',\n 'revenue',\n 'cost',\n 'income',\n 'expense',\n 'liability',\n 'asset',\n 'equity',\n 'profit',\n 'loss',\n 'cash',\n 'tax',\n 'interest',\n ]\n const lower = fieldName.toLowerCase()\n return patterns.some((p) => lower.includes(p))\n}\n\nfunction formatValue(value: unknown, numeric: boolean): string {\n if (value === null || value === undefined || value === '') return '-'\n if (numeric) {\n const num = Number(value)\n if (!isNaN(num))\n return num.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })\n }\n return String(value)\n}\n\nfunction buildTableForGroup(\n groupName: string,\n fields: FieldData[],\n ihsData: Record<string, unknown>\n): FileFieldTableData | null {\n const allColumns: string[] = []\n for (const field of fields) {\n if (field.ihs_column_names) {\n allColumns.push(...field.ihs_column_names)\n }\n }\n if (allColumns.length === 0) return null\n\n const periods = extractTimePeriods(allColumns)\n const isTimeSeries = periods.length > 0\n const tableType = isTimeSeries ? FileFieldTableType.TIME_SERIES : FileFieldTableType.KEY_VALUE\n const groupDisplayName =\n GROUP_DISPLAY_NAMES[groupName] || fields[0]?.displayName || getDisplayName(groupName)\n\n if (isTimeSeries) {\n const columnGroups = groupColumnsByTimePeriod(allColumns)\n const items: FileFieldTableItem[] = []\n\n for (const [baseName, periodMap] of Object.entries(columnGroups)) {\n const numeric = isNumericField(baseName)\n const data: Record<string, unknown> = {}\n const formattedData: Record<string, string> = {}\n\n for (const period of periods) {\n const colName = periodMap[period]\n const value = colName ? (ihsData[colName] ?? null) : null\n data[period] = value\n formattedData[period] = formatValue(value, numeric)\n }\n\n items.push({\n displayName: getDisplayName(baseName),\n timePeriods: periods,\n data,\n formattedData,\n type: tableType,\n isNumeric: numeric,\n })\n }\n\n const hasData = items.some((item) =>\n Object.values(item.data).some((v) => v !== null && v !== undefined && v !== '')\n )\n return { name: groupName, displayName: groupDisplayName, type: tableType, items, hasData }\n } else {\n const items: FileFieldTableItem[] = []\n for (const colName of allColumns) {\n const value = ihsData[colName] ?? null\n const numeric = isNumericField(colName)\n items.push({\n displayName: getDisplayName(colName),\n timePeriods: [],\n data: { value },\n formattedData: { value: formatValue(value, numeric) },\n type: tableType,\n isNumeric: numeric,\n })\n }\n const hasData = items.some((item) => {\n const v = item.data['value']\n return v !== null && v !== undefined && v !== ''\n })\n return { name: groupName, displayName: groupDisplayName, type: tableType, items, hasData }\n }\n}\n\nexport function buildFileFieldTables(\n ihsData: Record<string, unknown>\n): Record<string, FileFieldTableData> {\n const specs = getBaseFieldSpecs()\n const fileFields = specs.filter((f) => f.type === 'file' && f.ihs_column_names?.length)\n const grouped = groupFieldsByPattern(fileFields)\n\n const tables: Record<string, FileFieldTableData> = {}\n for (const [groupName, fields] of Object.entries(grouped)) {\n const table = buildTableForGroup(groupName, fields, ihsData)\n if (table && table.hasData) {\n tables[groupName] = table\n }\n }\n return tables\n}\n\n// ── IHS detail processing ──────────────────────────────────────\n\nfunction isFileOrFinancialColumn(fieldName: string, fileColumnSet: Set<string>): boolean {\n return (\n fileColumnSet.has(fieldName) ||\n fieldName.startsWith('financials') ||\n fieldName.startsWith('bank_statement')\n )\n}\n\n\nfunction inferValueFormat(fieldName: string, value: unknown): IhsValueFormat {\n const currencyFields = new Set([\n 'totalFinancing',\n 'monthlyGrossIncome',\n 'approvedAmount',\n 'monthlyInstallment',\n ])\n if (currencyFields.has(fieldName)) return IhsValueFormat.CURRENCY\n\n const numberFields = new Set([\n 'age',\n 'noOfDependants',\n 'financingTenure',\n 'ihsId',\n 'programId',\n 'borrowerAgentId',\n ])\n if (numberFields.has(fieldName)) return IhsValueFormat.NUMBER\n\n const tableFields = new Set(['shareholders', 'directors', 'previousDirectors'])\n if (tableFields.has(fieldName)) return IhsValueFormat.TABLE\n\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value)) return IhsValueFormat.DATE\n\n return IhsValueFormat.STRING\n}\n\nconst EXCLUDED_FIELDS = new Set([\n 'updatedAt',\n 'programIds',\n 'borrowerAgentId',\n 'programId',\n '__v',\n '_id',\n 'id',\n])\n\nexport function processIhsDetails(ihsData: Record<string, unknown>): IhsFieldDetail[] {\n const specs = getBaseFieldSpecs()\n const fileColumnSet = new Set<string>()\n for (const field of specs) {\n if (field.type === 'file') {\n if (field.name) fileColumnSet.add(field.name)\n if (field.ihs_column_names) {\n for (const col of field.ihs_column_names) {\n fileColumnSet.add(col)\n }\n }\n }\n }\n\n const specMap = getBaseFieldSpecMap()\n const categories = getBaseCategories()\n const categoryNameMap: Record<string, string> = {}\n for (const cat of categories) {\n categoryNameMap[String(cat.id)] = cat.name\n }\n\n const details: IhsFieldDetail[] = []\n\n for (const [key, value] of Object.entries(ihsData)) {\n if (value === null || value === undefined || value === '' || value === 'Not Specified') continue\n if (value === false) continue\n if (EXCLUDED_FIELDS.has(key)) continue\n if (isFileOrFinancialColumn(key, fileColumnSet)) continue\n\n const spec = specMap.get(key)\n const categoryId = spec?.category ? String(spec.category) : '0'\n const category = categoryNameMap[categoryId] || 'General'\n\n details.push({\n name: key,\n displayName: getDisplayName(key),\n category,\n value,\n valueFormat: inferValueFormat(key, value),\n })\n }\n\n return details\n}\n\nexport function groupDetailsByCategory(details: IhsFieldDetail[]): IhsDetailCategory[] {\n const groups: Record<string, IhsFieldDetail[]> = {}\n for (const detail of details) {\n if (!groups[detail.category]) groups[detail.category] = []\n groups[detail.category].push(detail)\n }\n\n return Object.entries(groups)\n .filter(([cat]) => cat !== 'Default Category' && cat !== 'General')\n .map(([category, items]) => ({\n category,\n items: items.map((d) => ({\n name: d.name,\n displayName: d.displayName,\n value: d.value,\n valueFormat: d.valueFormat,\n })),\n }))\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Program access roles — shared across finsys-api and finhub-adonisjs.\n * Values must match the database enum column in the `programaccess` table.\n */\nexport enum Role {\n ADMIN = 'Admin',\n BORROWER_AGENT = 'Borrower Agent',\n LENDER_AGENT = 'Lender Agent',\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Status of a document extraction job.\n * Used by finsys-api (writes) and finhub/finsys-client (reads/displays).\n */\nexport enum ExtractionJobStatus {\n Queued = 'queued',\n Processing = 'processing',\n Succeeded = 'succeeded',\n Failed = 'failed',\n}\n\n/**\n * Document types that go through FinXtract extraction.\n * Values must match the `type` field on finsys-api File entity\n * and the config keys in finXtractApi.api.\n */\nexport enum ExtractionFileType {\n FinancialStatement = 'financialStatements',\n BankStatement = 'bankStatements',\n Epf = 'epfStatements',\n Payslip = 'payslips',\n Ssm = 'ssm',\n Form9 = 'form9',\n Ic = 'ic',\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * IHS application status — canonical source of truth, mirroring finsys-api's\n * `IHS_STATUS` enum and `allowedIhsStatus` list in src/utils/appHelper.ts.\n *\n * finsys-api originates these values (it writes them to the `ihs.status`\n * column). Consumer apps (finhub-adonisjs, finsys-client) read them off the\n * wire and use them for validation and display.\n *\n * Lender rejection is not represented by a distinct status: when a lender\n * rejects an application, finsys-api transitions the record back to\n * `APPLICATION_FINALIZED` from `LENDER_EVALUATION`.\n */\nexport enum IhsStatus {\n CreatingApplication = 'CREATING_APPLICATION',\n ApplicationFinalized = 'APPLICATION_FINALIZED',\n LenderEvaluation = 'LENDER_EVALUATION',\n Approved = 'APPROVED',\n LouDelivered = 'LOU_DELIVERED',\n AwaitingDisbursement = 'AWAITING_DISBURSEMENT',\n Disbursement = 'DISBURSEMENT',\n Declined = 'DECLINED',\n Expired = 'EXPIRED',\n Canceled = 'CANCELED',\n}\n\n/**\n * All valid IHS status values, in display order (earliest lifecycle stage\n * first, terminal states last).\n */\nexport const IHS_VALID_STATUSES: readonly IhsStatus[] = [\n IhsStatus.CreatingApplication,\n IhsStatus.ApplicationFinalized,\n IhsStatus.LenderEvaluation,\n IhsStatus.Approved,\n IhsStatus.LouDelivered,\n IhsStatus.AwaitingDisbursement,\n IhsStatus.Disbursement,\n IhsStatus.Declined,\n IhsStatus.Expired,\n IhsStatus.Canceled,\n] as const\n\n/**\n * Terminal statuses — the application lifecycle has completed and no further\n * transitions are expected. Useful for suppressing action UI (e.g. re-extract,\n * status update controls) on the application detail view.\n */\nexport const IHS_TERMINAL_STATUSES: readonly IhsStatus[] = [\n IhsStatus.Disbursement,\n IhsStatus.Declined,\n IhsStatus.Expired,\n IhsStatus.Canceled,\n] as const\n\n/**\n * Failure statuses — a subset of terminal statuses that represent an\n * unsuccessful outcome. Useful for badge colour / messaging.\n */\nexport const IHS_FAILURE_STATUSES: readonly IhsStatus[] = [\n IhsStatus.Declined,\n IhsStatus.Expired,\n IhsStatus.Canceled,\n] as const\n\n/**\n * Type guard: narrows an unknown value to `IhsStatus` iff it is one of the\n * canonical status strings.\n */\nexport function isValidIhsStatus(status: unknown): status is IhsStatus {\n return (\n typeof status === 'string' &&\n (IHS_VALID_STATUSES as readonly string[]).includes(status)\n )\n}\n\n/**\n * Type guard: terminal (no further transitions expected).\n */\nexport function isTerminalIhsStatus(status: unknown): status is IhsStatus {\n return (\n typeof status === 'string' &&\n (IHS_TERMINAL_STATUSES as readonly string[]).includes(status)\n )\n}\n\n/**\n * Type guard: terminal and unsuccessful.\n */\nexport function isFailureIhsStatus(status: unknown): status is IhsStatus {\n return (\n typeof status === 'string' &&\n (IHS_FAILURE_STATUSES as readonly string[]).includes(status)\n )\n}\n","/*\n * Extraction status resolution.\n *\n * Determines per-document extraction status from IHS record data\n * and optional extraction job records. Pure synchronous function —\n * no HTTP, no async, trivially testable.\n *\n * For multi-file document types (bank statements, financial statements,\n * EPF, payslips), produces one result per time period (T1, T2, …).\n * For single-file types (SSM, Form 9, IC), produces one result.\n */\n\nimport { ExtractionFileType, ExtractionJobStatus } from './extraction.js'\nimport { getBaseFieldSpecs } from './catalogs.js'\nimport { getGroupDisplayNames, groupFieldsByPattern } from './ihs-processing.js'\nimport type { FieldData } from './survey-generator.js'\n\n// ── Types ──────────────────────────────────────────────────\n\nexport enum DocExtractionStatus {\n NotUploaded = 'not_uploaded',\n Uploaded = 'uploaded',\n Queued = 'queued',\n Processing = 'processing',\n Extracted = 'extracted',\n Failed = 'failed',\n Unknown = 'unknown',\n}\n\nexport interface ExtractionJobRecord {\n fileType: string\n status: string\n errorMessage?: string | null\n}\n\nexport interface DocExtractionResult {\n fileType: ExtractionFileType\n status: DocExtractionStatus\n displayName: string\n populatedColumns: string[]\n totalColumns: number\n errorMessage?: string | null\n}\n\nexport interface ExtractionStatusResult {\n documents: DocExtractionResult[]\n summary: {\n total: number\n extracted: number\n failed: number\n pending: number\n notUploaded: number\n }\n}\n\n// ── Map ExtractionFileType to field group names used by groupFieldsByPattern ──\n\nconst FILE_TYPE_TO_GROUP: Record<ExtractionFileType, string> = {\n [ExtractionFileType.BankStatement]: 'bank_statements',\n [ExtractionFileType.FinancialStatement]: 'financials',\n [ExtractionFileType.Epf]: 'epf_statements',\n [ExtractionFileType.Payslip]: 'payslip_statements',\n [ExtractionFileType.Ssm]: 'ssm_documents',\n [ExtractionFileType.Form9]: 'form9',\n [ExtractionFileType.Ic]: 'ic_documents',\n}\n\n// ── Static field metadata (derived once at module load) ────\n\nconst _specs = getBaseFieldSpecs()\nconst _fileFields = _specs.filter((f) => f.type === 'file' && f.ihs_column_names?.length)\nconst _grouped = groupFieldsByPattern(_fileFields)\nconst _groupDisplayNames = getGroupDisplayNames()\n\n// ── Helpers ────────────────────────────────────────────────\n\nfunction isPopulated(value: unknown): boolean {\n if (value === null || value === undefined || value === '') return false\n if (value === 'Not Specified') return false\n return true\n}\n\nfunction countUploadedFiles(ihsRecord: Record<string, unknown>, aggregateKey: string): number {\n const raw = ihsRecord[aggregateKey]\n if (!raw) return 0\n\n // JSON array string (multi-file types like bankStatements)\n if (typeof raw === 'string') {\n try {\n const parsed = JSON.parse(raw)\n if (Array.isArray(parsed)) return parsed.length\n } catch {\n // Plain URL string (single-file type) — count as 1\n return 1\n }\n }\n\n if (Array.isArray(raw)) return raw.length\n\n // Single object or URL string\n return 1\n}\n\nfunction hasUploadedFile(\n fields: FieldData[],\n ihsRecord: Record<string, unknown>,\n aggregateKey: string\n): boolean {\n if (countUploadedFiles(ihsRecord, aggregateKey) > 0) return true\n\n // Fall back to individual field names for single-file types (ssm, form9, ic)\n return fields.some((field) => {\n if (!field.name) return false\n return isPopulated(ihsRecord[field.name])\n })\n}\n\nfunction getPopulatedColumns(\n columns: string[],\n ihsRecord: Record<string, unknown>\n): string[] {\n return columns.filter((col) => isPopulated(ihsRecord[col]))\n}\n\n/**\n * Resolve status for a single document (one field / one time period).\n */\nfunction resolveDocStatus(\n columns: string[],\n ihsRecord: Record<string, unknown>,\n uploaded: boolean,\n jobRecord: ExtractionJobRecord | undefined,\n hasJobRecords: boolean\n): { status: DocExtractionStatus; errorMessage?: string | null } {\n const populated = getPopulatedColumns(columns, ihsRecord)\n const hasExtractedData = populated.length > 0\n\n let status: DocExtractionStatus\n let errorMessage: string | null | undefined\n\n if (!uploaded) {\n status = DocExtractionStatus.NotUploaded\n } else if (hasJobRecords) {\n if (jobRecord) {\n if (jobRecord.status === ExtractionJobStatus.Queued) {\n status = DocExtractionStatus.Queued\n } else if (jobRecord.status === ExtractionJobStatus.Processing) {\n status = DocExtractionStatus.Processing\n } else if (jobRecord.status === ExtractionJobStatus.Failed) {\n if (hasExtractedData) {\n status = DocExtractionStatus.Extracted\n errorMessage = jobRecord.errorMessage\n } else {\n status = DocExtractionStatus.Failed\n errorMessage = jobRecord.errorMessage\n }\n } else if (jobRecord.status === ExtractionJobStatus.Succeeded || hasExtractedData) {\n status = DocExtractionStatus.Extracted\n } else {\n status = DocExtractionStatus.Uploaded\n }\n } else if (hasExtractedData) {\n status = DocExtractionStatus.Extracted\n } else {\n status = DocExtractionStatus.Uploaded\n }\n } else if (hasExtractedData) {\n status = DocExtractionStatus.Extracted\n } else {\n status = DocExtractionStatus.Unknown\n }\n\n return { status, errorMessage }\n}\n\n// ── Main function ──────────────────────────────────────────\n\n/**\n * Determines per-document extraction status from IHS record data.\n *\n * For multi-file document types (bank statements, financial statements, EPF,\n * payslips) the result contains one entry per uploaded file, indexed in the\n * same order as the files appear in the IHS record's aggregate array.\n * For single-file types (SSM, Form 9, IC) there is one entry.\n *\n * @param ihsRecord - The IHS application record (any shape satisfying Record<string, unknown>)\n * @param jobRecords - Extraction job records for this IHS. Pass the array (even if empty)\n * when job records were fetched. Omit or pass undefined when job records are unavailable;\n * this produces `Unknown` status for uploaded-but-unextracted documents rather than `Uploaded`.\n */\nexport function resolveExtractionStatus(\n ihsRecord: Record<string, unknown>,\n jobRecords?: ExtractionJobRecord[]\n): ExtractionStatusResult {\n const documents: DocExtractionResult[] = []\n const hasJobRecords = jobRecords !== undefined\n\n for (const fileType of Object.values(ExtractionFileType)) {\n const groupName = FILE_TYPE_TO_GROUP[fileType]\n const fields = _grouped[groupName] ?? []\n const displayName = _groupDisplayNames[groupName] ?? fileType\n\n const uploadedCount = countUploadedFiles(ihsRecord, fileType)\n const isUploaded = uploadedCount > 0 || fields.some((f) => f.name && isPopulated(ihsRecord[f.name]))\n\n // For multi-file types, match job records by fileType (there can be multiple)\n const matchingJobs = jobRecords?.filter((j) => j.fileType === fileType) ?? []\n\n if (fields.length <= 1) {\n // Single-file type (ssm, form9, ic): one result\n const field = fields[0]\n const columns = field?.ihs_column_names ?? []\n const populated = getPopulatedColumns(columns, ihsRecord)\n const { status, errorMessage } = resolveDocStatus(\n columns, ihsRecord, isUploaded, matchingJobs[0], hasJobRecords\n )\n\n documents.push({\n fileType,\n status,\n displayName,\n populatedColumns: populated,\n totalColumns: columns.length,\n errorMessage,\n })\n } else {\n // Multi-file type (bank statements T1-T6, etc.): one result per uploaded file.\n // Fields are sorted by name (bank_statement_t1, t2, …) so idx aligns with\n // the file array order in the IHS record.\n const count = Math.max(uploadedCount, 1)\n for (let idx = 0; idx < count; idx++) {\n const field = fields[idx]\n const columns = field?.ihs_column_names ?? []\n const populated = getPopulatedColumns(columns, ihsRecord)\n const fileUploaded = idx < uploadedCount\n const { status, errorMessage } = resolveDocStatus(\n columns, ihsRecord, fileUploaded, matchingJobs[idx], hasJobRecords\n )\n\n documents.push({\n fileType,\n status,\n displayName,\n populatedColumns: populated,\n totalColumns: columns.length,\n errorMessage,\n })\n }\n }\n }\n\n const summary = documents.reduce(\n (acc, d) => {\n if (d.status === DocExtractionStatus.Extracted) acc.extracted++\n else if (d.status === DocExtractionStatus.Failed) acc.failed++\n else if (d.status === DocExtractionStatus.NotUploaded) acc.notUploaded++\n else acc.pending++\n return acc\n },\n { total: documents.length, extracted: 0, failed: 0, pending: 0, notUploaded: 0 }\n )\n\n return { documents, summary }\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Source Adapter contract — the framework for ingesting unstructured\n * or partner-specific inputs and producing canonical field values that\n * the eval engine + CRA report consume.\n *\n * The contract has no vendor-specific knowledge. Generic categories\n * (telco-carrier, payment-network, document-extractor, social-presence,\n * …) are declared here; specific vendor implementations live OUTSIDE\n * this open-source package, in private extension directories loaded\n * by the host app at runtime (see SYS-2444 plugin discovery).\n *\n * Design notes:\n * - extract() is async — every real adapter does I/O (HTTP, OCR, LLM).\n * - Errors are thrown as `AdapterError` instances. We DELIBERATELY\n * don't use a Result<> type — the rest of finsys-core uses throw/\n * catch, and bringing a Result idiom in for one subsystem creates\n * dialect inconsistency.\n * - The contract makes no statement about persistence. The host app's\n * adapter runner catches the return value, persists canonical fields\n * + raw payload to the storage tables (SYS-2441), and writes\n * provenance to `ihs_extraction_runs`. Adapters are pure functions\n * of (raw payload) → (canonical fields). This separation lets\n * adapters be swapped, replayed, and tested without DB state.\n */\n\nimport type { AdapterCategory, CanonicalFieldName } from \"./adapter-categories.js\";\n\n/**\n * An adapter receives a raw payload — opaque to the framework. The\n * shape is whatever the vendor's source produces: a JSON object from a\n * partner API, a base64 PDF blob, a web-scrape result. Vendor adapters\n * narrow this type internally. The host app's adapter runner is\n * responsible for putting the bytes/structure in front of the adapter;\n * what those bytes are is the adapter's problem.\n */\nexport type RawPayload = unknown;\n\n/**\n * Canonical field values produced by an adapter for ONE instance.\n * Keys MUST be drawn from the field set declared by the adapter's\n * category (see `categoryFieldsOf` in adapter-categories.ts). Values\n * are typed narrowly per field by the category schema; this loose TS\n * type is runtime-validated against the category schema by the host\n * app at registration time, AND at every extract() call result.\n *\n * The framework rejects:\n * - Field names not declared by the adapter's category\n * - Values whose runtime type doesn't match the category schema\n *\n * Adapters MAY return a partial set — not every category field has to\n * be produced on every applicant (telco fields may be absent if the\n * borrower didn't opt in, for instance). Missing fields are aggregated\n * as zero / null in the eval engine; that's a feature, not a defect.\n */\nexport type CanonicalFieldValues = Partial<Record<CanonicalFieldName, CanonicalFieldValue>>;\n\n/**\n * One extraction \"instance\" — the framework supports multi-instance\n * per applicant per adapter. Examples:\n * - 6 bank statements from one bank (one adapter call, 6 instances)\n * - 12 monthly payment-summary snapshots from one payment network\n * - 3 mobile lines from one telco carrier\n *\n * For multi-VENDOR cases (3 different telco carriers), use separate\n * adapter registrations — each vendor is its own SourceAdapter with\n * its own id. For multi-INSTANCE-from-one-vendor (6 statements from\n * one bank), the adapter returns multiple AdapterExtraction entries\n * in a single extract() call.\n *\n * `instanceKey` is the within-adapter discriminator: free-form, but\n * MUST be stable across re-extractions so the storage layer can\n * replace-in-place rather than accumulating duplicates. Conventions:\n * - For periodic data: encode the period (`'2026-Q1'`, `'2026-03'`)\n * - For per-line data: encode the line id (`'msisdn-60123456789'`,\n * `'card-last4-1234'`)\n * - For natively single-instance adapters: use the empty string `''`\n * (the framework treats `''` as \"this adapter only ever has one\n * instance per applicant\").\n */\nexport interface AdapterExtraction {\n /**\n * Stable within-adapter instance discriminator. Empty string for\n * adapters that only ever produce one instance per applicant.\n */\n readonly instanceKey: string;\n\n /**\n * The canonical field values for this instance.\n */\n readonly values: CanonicalFieldValues;\n}\n\n/**\n * Allowed value shapes for canonical fields. Per-field type narrowing\n * happens at the category schema level — telcoOnTimePaymentRatio24m is\n * a number 0..1; telcoHandsetFinancingActive is a boolean; etc.\n * Numbers + booleans + strings cover everything we expect from credit\n * signals; nested objects are intentionally excluded to keep canonical\n * fields atomic + queryable.\n */\nexport type CanonicalFieldValue = number | string | boolean | null;\n\n/**\n * The interface every adapter implements. Adapters are loaded by the\n * host app's discovery mechanism (SYS-2444); the host app constructs\n * the adapter from its manifest + extract module, then registers it\n * against the registry by `id`.\n */\nexport interface SourceAdapter {\n /**\n * Globally unique id for this adapter instance. By convention:\n * `<vendor>-<category-short>-v<n>` — e.g. `celcom-telco-v1`. Vendor\n * names appear here in deployment-specific code, NEVER in\n * finsys-core. The id is what the registry uses to dedupe + what\n * provenance records pin to.\n */\n readonly id: string;\n\n /**\n * Which generic category this adapter implements. Determines which\n * canonical fields the adapter MAY produce + how its output is\n * persisted (each category has its own canonical sibling table —\n * `ihs_alt_data_telco`, `ihs_alt_data_payments`, etc.).\n */\n readonly category: AdapterCategory;\n\n /**\n * Monotonic version per adapter. Bumped whenever the adapter's\n * payload shape, field-mapping logic, or output semantics change.\n * Versions are stored alongside each extraction run for replay /\n * audit; the framework allows multiple versions of the same adapter\n * to coexist in the registry (deployment-controlled).\n */\n readonly version: number;\n\n /**\n * Subset of the adapter's category fields that this adapter promises\n * to produce. Used by the host app at boot to log adapter capability\n * + by the CRA report to render \"provided by adapter X\" badges.\n * MUST be a subset of `categoryFieldsOf(category)`; the host app\n * validates this at registration time and refuses to load adapters\n * that promise fields outside their category.\n */\n readonly produces: ReadonlyArray<CanonicalFieldName>;\n\n /**\n * Transform a raw payload into canonical field values. The host app\n * calls this once per applicant per adapter, passes the result to\n * the persistence layer (one row per AdapterExtraction in the\n * canonical sibling table), and writes provenance.\n *\n * The return is ALWAYS a list, even when the adapter produces only\n * one instance per applicant — return a one-element array in that\n * case with `instanceKey: ''`. The list shape exists to support\n * inherently multi-instance sources (6 bank statements, 12 monthly\n * payment snapshots, 3 mobile lines) without forcing adapters to\n * batch their own calls.\n *\n * Throw `AdapterError` for any failure path — network timeout,\n * schema mismatch, partner API rate limit, malformed payload. The\n * host's adapter runner catches AdapterError + records the failure\n * on `ihs_extraction_runs` so the operator sees what happened\n * without losing the applicant.\n *\n * Adapters MUST NOT throw plain `Error` or unknown types — the\n * runner will treat those as adapter implementation bugs and surface\n * them to logs separately. Stick to AdapterError for the\n * expected-failure path.\n */\n extract(raw: RawPayload): Promise<AdapterExtraction[]>;\n}\n\n/**\n * Typed error thrown by adapters on expected failure paths. The\n * `reason` discriminator lets the host app's adapter runner classify\n * failures (transient vs permanent, partner-side vs schema-side)\n * without parsing strings.\n */\nexport class AdapterError extends Error {\n public readonly reason: AdapterErrorReason;\n public readonly cause?: unknown;\n\n constructor(reason: AdapterErrorReason, message: string, cause?: unknown) {\n super(message);\n this.name = \"AdapterError\";\n this.reason = reason;\n this.cause = cause;\n }\n}\n\n/**\n * Discriminator for adapter failure modes. The runner uses this to\n * decide whether to retry, surface to the operator, or write off the\n * extraction run.\n *\n * payload_invalid — the raw payload didn't conform to the\n * adapter's expected source shape. Permanent;\n * re-running won't help. Likely a partner-side\n * schema change → bump adapter version.\n *\n * source_unavailable — the upstream source was unreachable or\n * returned a transient error (timeout, 5xx,\n * rate limit). Transient; safe to retry.\n *\n * mapping_failed — extraction logic raised a domain-specific\n * failure (e.g. value out of expected range).\n * Permanent for this payload; surface to the\n * operator.\n *\n * not_applicable — the applicant doesn't have data for this\n * adapter (e.g. no telco opt-in). Not a\n * failure per se — the runner records a\n * no-op extraction run, eval engine sees no\n * canonical fields, components score zero.\n */\nexport type AdapterErrorReason =\n | \"payload_invalid\"\n | \"source_unavailable\"\n | \"mapping_failed\"\n | \"not_applicable\";\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Aggregation operators applied by the eval engine when a scoring\n * component reads a canonical field that has multiple instances\n * persisted for the same applicant.\n *\n * Multi-instance is the framework's first-class shape — an adapter\n * may produce 6 bank-statement instances, 12 monthly payment\n * snapshots, 3 mobile lines, etc., per applicant. Eval components\n * must declare HOW they want those instances collapsed into a single\n * scoring value. This module declares the operator set + the runtime\n * helper that applies one to a value list.\n *\n * Consumer is the eval engine (today: finsys-client + FinSim sim-\n * runner; tomorrow: anywhere else evaluating against canonical\n * fields). finsys-core publishes the operator surface so policy\n * fixtures across all consumers reference the same set.\n *\n * v1 operator set, in order of expected use frequency:\n *\n * sum — total across instances. Bank balance sum across t1..tN.\n * mean — arithmetic mean. Average monthly payment volume.\n * latest — the instance with the most recent observed_at. Telco\n * snapshot when only the latest matters.\n * max — maximum value across instances. Worst-case suspension\n * count when multiple telco lines exist.\n * count — number of instances with a non-null value for this\n * field. Useful for \"how many bank statements does this\n * applicant have on file\" as a score input.\n */\n\nimport type { CanonicalFieldValue } from \"./adapter.js\";\n\nexport type AggregationOp = \"sum\" | \"mean\" | \"latest\" | \"max\" | \"count\";\n\n/** Every operator declared in this version of finsys-core. */\nexport const ALL_AGGREGATION_OPS: ReadonlyArray<AggregationOp> = [\n \"sum\",\n \"mean\",\n \"latest\",\n \"max\",\n \"count\",\n] as const;\n\n/**\n * One value contributed by one instance. The eval engine builds a\n * list of these (one per instance, in observed-at order — the\n * persistence layer is the source of truth on ordering) and passes\n * to applyAggregation.\n */\nexport interface InstanceValue {\n readonly value: CanonicalFieldValue;\n /**\n * The instance's observed-at timestamp. MUST be an ISO-8601 UTC\n * string (`Z`-suffixed, e.g. `2026-04-01T00:00:00Z`). The `latest`\n * operator compares these lexicographically, which is only\n * monotonic with wall-time when all timestamps share the UTC\n * offset — mixed offsets (e.g. `+08:00` vs `Z`) can yield\n * incorrect ordering. Other operators ignore this field; pass an\n * empty string if the operator in question doesn't need it.\n */\n readonly observedAt: string;\n}\n\n/**\n * Apply an aggregation operator to a list of instance values.\n *\n * Behaviour for empty + null-only lists:\n * - empty list → `null`\n * - all-null values → `null`\n * - `count` on either of the above → `0`\n *\n * Returns:\n * - `sum`, `mean`, `max`, `count` → `number | null`\n * - `latest` → matches the value type of the most-recent instance\n * (number / boolean / string / null)\n *\n * Throws on operators that don't apply to the value types present\n * (e.g. `sum` of booleans). Eval-policy authors are expected to pair\n * operators with appropriate field types; this is a guardrail against\n * silent garbage rather than an error-recovery mechanism.\n */\nexport function applyAggregation(\n op: AggregationOp,\n instances: ReadonlyArray<InstanceValue>,\n): CanonicalFieldValue {\n if (instances.length === 0) {\n return op === \"count\" ? 0 : null;\n }\n\n if (op === \"count\") {\n // Single-pass count of non-null/undefined values; avoids the\n // intermediate array filter().length would allocate.\n return instances.reduce(\n (acc, i) =>\n i.value !== null && i.value !== undefined ? acc + 1 : acc,\n 0,\n );\n }\n\n if (op === \"latest\") {\n // Newest by observedAt wins. Stable for tied timestamps (first\n // in list — caller controls input ordering).\n let pick = instances[0]!;\n for (let i = 1; i < instances.length; i++) {\n if (instances[i]!.observedAt > pick.observedAt) pick = instances[i]!;\n }\n return pick.value;\n }\n\n // Numeric operators below this point. Filter to numeric values.\n // Null/undefined values are silently dropped (consistent with the\n // contract's \"no usable data → null\" semantics). Non-null,\n // non-numeric values throw — the operator was misused at policy-\n // authoring time and silent zero-coercion would mask the bug.\n const nums: number[] = [];\n for (const i of instances) {\n if (typeof i.value === \"number\" && Number.isFinite(i.value)) {\n nums.push(i.value);\n } else if (i.value !== null && typeof i.value !== \"undefined\") {\n throw new Error(\n `applyAggregation: '${op}' requires numeric values; got ${typeof i.value}`,\n );\n }\n }\n\n if (nums.length === 0) return null;\n\n switch (op) {\n case \"sum\":\n return nums.reduce((a, b) => a + b, 0);\n case \"mean\":\n return nums.reduce((a, b) => a + b, 0) / nums.length;\n case \"max\":\n // `Math.max(...nums)` spreads through the call stack — V8 throws\n // RangeError once `nums.length` crosses the engine's argument\n // limit (~65k on current V8). Reduce form is safe for any size.\n return nums.reduce((a, b) => (a > b ? a : b));\n }\n}\n","{\n \"schemaVersion\": \"1.0.0\",\n \"categories\": [\n {\n \"id\": \"telco-carrier\",\n \"displayName\": \"Telco Carrier\",\n \"description\": \"Mobile carrier bill-payment + account-history signals. Any telco vendor (Celcom, Maxis, DiGi, U-Mobile, etc.) implementing this category produces the same canonical field set.\",\n \"canonicalTable\": \"ihs_alt_data_telco\",\n \"fields\": [\n {\n \"name\": \"telcoOnTimePaymentRatio24m\",\n \"type\": \"number\",\n \"unit\": \"ratio\",\n \"range\": [0, 1],\n \"description\": \"Fraction of bills paid on time over the last 24 months. Strongest single telco predictor; ≥0.95 is the clean-history signal.\"\n },\n {\n \"name\": \"telcoTenureMonths\",\n \"type\": \"number\",\n \"unit\": \"months\",\n \"range\": [0, 600],\n \"description\": \"Account age. ≥48 months is the thin-file uplift trigger.\"\n },\n {\n \"name\": \"telcoSuspensionsCount24m\",\n \"type\": \"number\",\n \"unit\": \"count\",\n \"range\": [0, 100],\n \"description\": \"Non-payment-driven account suspensions in the last 24 months. ≥3 is a strong distress signal.\"\n },\n {\n \"name\": \"telcoLateDays24m\",\n \"type\": \"number\",\n \"unit\": \"days\",\n \"range\": [0, 800],\n \"description\": \"Cumulative days late across all bills in the trailing 24-month window.\"\n },\n {\n \"name\": \"telcoHandsetFinancingActive\",\n \"type\": \"boolean\",\n \"description\": \"Has an active handset-EMI account currently. Proxy for financing capacity already extended.\"\n },\n {\n \"name\": \"telcoHandsetFinancingDelinquent\",\n \"type\": \"boolean\",\n \"description\": \"Recent handset-EMI delinquency in the last 24 months. Distress signal even with otherwise clean bill payment.\"\n },\n {\n \"name\": \"telcoArpuMyr\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [0, 10000],\n \"description\": \"Average Revenue Per User (monthly) in Malaysian Ringgit. Coarse spending-capacity proxy.\"\n }\n ]\n },\n {\n \"id\": \"payment-network\",\n \"displayName\": \"Payment Network\",\n \"description\": \"Merchant-side payment-flow signals from POS / gateway networks (iPay88, GHL, etc.). Captures actual transaction velocity rather than self-reported revenue.\",\n \"canonicalTable\": \"ihs_alt_data_payments\",\n \"fields\": [\n {\n \"name\": \"paymentsMonthlyVolumeMyrT3\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [0, 100000000],\n \"description\": \"Mean monthly inbound transaction volume (RM) over the trailing 3 months.\"\n },\n {\n \"name\": \"paymentsMonthlyVolumeMyrT12\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [0, 100000000],\n \"description\": \"Mean monthly inbound transaction volume (RM) over the trailing 12 months. Pair with T3 for trend direction.\"\n },\n {\n \"name\": \"paymentsArpuStability12m\",\n \"type\": \"number\",\n \"unit\": \"ratio\",\n \"range\": [0, 1],\n \"description\": \"Coefficient-of-variation inverse over monthly ARPU in the trailing 12 months. Closer to 1 = steadier; closer to 0 = volatile.\"\n },\n {\n \"name\": \"paymentsDisputeRate12m\",\n \"type\": \"number\",\n \"unit\": \"ratio\",\n \"range\": [0, 1],\n \"description\": \"Fraction of transactions disputed or refunded in the trailing 12 months.\"\n },\n {\n \"name\": \"paymentsCustomerConcentrationTop5Pct\",\n \"type\": \"number\",\n \"unit\": \"ratio\",\n \"range\": [0, 1],\n \"description\": \"Revenue share from the top-5 recurring customers. Above ~0.7 is concentration risk.\"\n },\n {\n \"name\": \"paymentsActiveTenureMonths\",\n \"type\": \"number\",\n \"unit\": \"months\",\n \"range\": [0, 600],\n \"description\": \"Months since first transaction on the payment network. Establishment / continuity proxy.\"\n }\n ]\n },\n {\n \"id\": \"bank-statement\",\n \"displayName\": \"Bank Statement\",\n \"description\": \"Per-month bank-statement extractions. Naturally multi-instance: one statement per (account, month). Eval components typically aggregate across instances (sum closing balance, max debit, count of bounced transactions).\",\n \"canonicalTable\": \"ihs_alt_data_bank_statements\",\n \"fields\": [\n {\n \"name\": \"bankStatementMonth\",\n \"type\": \"string\",\n \"description\": \"Statement period in YYYY-MM format. Used as the instance_key discriminator + by the `latest` aggregation operator.\"\n },\n {\n \"name\": \"bankClosingBalanceMyr\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [-100000000, 100000000],\n \"description\": \"Closing balance for the statement period.\"\n },\n {\n \"name\": \"bankTotalCreditsMyr\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [0, 100000000],\n \"description\": \"Sum of credit transactions during the period.\"\n },\n {\n \"name\": \"bankTotalDebitsMyr\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [0, 100000000],\n \"description\": \"Sum of debit transactions during the period.\"\n },\n {\n \"name\": \"bankLargestSingleCreditMyr\",\n \"type\": \"number\",\n \"unit\": \"MYR\",\n \"range\": [0, 100000000],\n \"description\": \"Largest single inbound transaction in the period. Useful for spotting one-off injections vs steady revenue.\"\n },\n {\n \"name\": \"bankBouncedTransactionsCount\",\n \"type\": \"number\",\n \"unit\": \"count\",\n \"range\": [0, 1000],\n \"description\": \"Bounced / returned transactions in the period. Distress signal at counts > 0.\"\n }\n ]\n }\n ]\n}\n","/*\n * Copyright 2025 Sisters Inspire Sdn Bhd\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Generic adapter category catalogue.\n *\n * Each category declares the canonical field set produced by any\n * adapter of that category — regardless of vendor. This is the\n * public, vendor-agnostic vocabulary that clients (finhub views,\n * finsys-client eval engine, CRA report renderer) read so they know\n * what data shape to expect from a given alt-data source TYPE.\n *\n * Specific vendor implementations (e.g. \"Celcom telco v1\", \"iPay88\n * payments v1\") live OUTSIDE this open-source package, in private\n * extension directories loaded by the host app. The category schemas\n * are the publication boundary — vendors map their raw payload to\n * these canonical fields; clients render against these canonical\n * fields. Vendor identity never crosses that boundary.\n */\n\nimport categoriesData from \"./data/adapter-categories.json\" with { type: \"json\" };\n\ninterface RawCategoryField {\n name: string;\n type: \"number\" | \"boolean\" | \"string\";\n unit?: string;\n range?: [number, number];\n description: string;\n}\n\ninterface RawCategory {\n id: string;\n displayName: string;\n description: string;\n canonicalTable: string;\n fields: RawCategoryField[];\n}\n\ninterface RawCategoryData {\n schemaVersion: string;\n categories: RawCategory[];\n}\n\nconst data = categoriesData as RawCategoryData;\n\n/**\n * Generic categories declared in this package. The set is union-typed\n * so consumers get TypeScript autocomplete (`'telco-carrier' |\n * 'payment-network' | ...`) and a compile-time error if they reference\n * a category that doesn't exist.\n *\n * NB: adding a new category is a finsys-core minor version bump.\n * Vendor adapters can ship freely (deployment-time, no core change)\n * but the CATEGORY they implement must exist here.\n */\nexport type AdapterCategory = \"telco-carrier\" | \"payment-network\" | \"bank-statement\";\n\n/**\n * Per-field metadata for a canonical field declared by a category.\n * Frozen at module load — the data file is authoritative.\n */\nexport interface CanonicalFieldSpec {\n readonly name: CanonicalFieldName;\n readonly type: \"number\" | \"boolean\" | \"string\";\n readonly unit?: string;\n readonly range?: readonly [number, number];\n readonly description: string;\n}\n\n/**\n * Per-category schema bundle. Used by:\n * - host app: validate adapter `produces` lists at registration\n * - clients (finhub, finsys-client): render UI conditionally on\n * category activation\n * - CRA report: render provenance metadata\n */\nexport interface CategorySchema {\n readonly id: AdapterCategory;\n readonly displayName: string;\n readonly description: string;\n readonly canonicalTable: string;\n readonly fields: ReadonlyArray<CanonicalFieldSpec>;\n}\n\n/**\n * Union of all canonical field names declared by any category in this\n * package. Loose-typed at compile time (string) because the actual\n * union grows with each category-added minor; runtime helpers below\n * narrow against the data.\n *\n * Adapter `produces` lists are typed as ReadonlyArray<CanonicalFieldName>\n * — the host validates membership against the adapter's category at\n * registration time, refusing adapters that promise fields outside\n * their category.\n */\nexport type CanonicalFieldName = string;\n\n/**\n * Look up a category schema by id. Throws if the id is unknown — this\n * is a programmer error (the type system should prevent it).\n */\nexport function categorySchemaOf(id: AdapterCategory): CategorySchema {\n const found = data.categories.find((c) => c.id === id);\n if (!found) {\n throw new Error(\n `Unknown adapter category: ${id}. Available: ${data.categories.map((c) => c.id).join(\", \")}`,\n );\n }\n return found as CategorySchema;\n}\n\n/**\n * The canonical field names a given category produces. Convenience\n * for callers that don't need the full schema — common case in the\n * eval engine (\"does this policy reference any fields from a category\n * that isn't loaded?\").\n */\nexport function categoryFieldsOf(id: AdapterCategory): ReadonlyArray<CanonicalFieldName> {\n return categorySchemaOf(id).fields.map((f) => f.name);\n}\n\n/**\n * Every category currently declared. Order is data-file order; treat\n * as unstable across versions.\n */\nexport function allCategories(): ReadonlyArray<CategorySchema> {\n return data.categories as ReadonlyArray<CategorySchema>;\n}\n\n/**\n * Pre-computed reverse map: canonical field name → category id.\n * Built once at module load — O(1) lookup at call time. Hosts +\n * eval engines call categoryForField on every field read from a\n * canonical row, so this lookup is on the hot path for report\n * rendering and policy evaluation.\n *\n * Frozen so consumers can't accidentally mutate the shared map.\n */\nconst fieldToCategory: ReadonlyMap<string, AdapterCategory> = (() => {\n const m = new Map<string, AdapterCategory>();\n for (const cat of data.categories) {\n for (const f of cat.fields) {\n m.set(f.name, cat.id as AdapterCategory);\n }\n }\n return m;\n})();\n\n/**\n * Reverse lookup: which category declares a given canonical field?\n * Returns null if the field name isn't declared by any category in\n * this version of finsys-core. Useful when the host app is reading\n * canonical field values back from storage + wants to identify the\n * producing category for rendering.\n */\nexport function categoryForField(field: CanonicalFieldName): AdapterCategory | null {\n return fieldToCategory.get(field) ?? null;\n}\n"],"mappings":"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R,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UAC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ACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,Q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,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,cAAgB;AAAA,MAChB,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AA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A,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAS;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QAC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CA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAY;AAAA,IACd;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,aAAe;AAAA,MACf,MAAQ;A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","names":["data","data","AjvModule","addFormats","data","FieldType","semver","data","IhsValueFormat","FileFieldTableType","data","Role","ExtractionJobStatus","ExtractionFileType","IhsStatus","DocExtractionStatus"]}