@restforgejs/platform 5.0.3 → 5.0.8

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.
Files changed (181) hide show
  1. package/build-info.json +2 -2
  2. package/cli/consumer-deploy.js +1 -1
  3. package/cli/consumer.js +1 -1
  4. package/generators/cli/dashboard/create.js +1 -1
  5. package/generators/cli/endpoint/create.js +1 -1
  6. package/generators/cli/processor/create.js +1 -1
  7. package/generators/lib/dbschema-kit/apply-executor.js +15 -1
  8. package/generators/lib/dbschema-kit/dialect/mysql.js +2 -0
  9. package/generators/lib/dbschema-kit/dialect/oracle.js +2 -0
  10. package/generators/lib/dbschema-kit/dialect/postgres.js +3 -0
  11. package/generators/lib/dbschema-kit/dialect/sqlite.js +2 -0
  12. package/generators/lib/dbschema-kit/emitters/alter-table.js +7 -0
  13. package/generators/lib/dbschema-kit/emitters/create-table.js +31 -3
  14. package/generators/lib/dbschema-kit/statement-modifier.js +12 -2
  15. package/generators/lib/payload/payload-runner.js +44 -2
  16. package/generators/lib/payload/schema-diff.js +31 -1
  17. package/generators/lib/templates/dashboard-catalog.js +1 -1
  18. package/generators/lib/templates/db-connection-env.js +1 -1
  19. package/generators/lib/templates/dbschema-catalog.js +1 -1
  20. package/generators/lib/templates/field-validation-catalog.js +1 -1
  21. package/generators/lib/templates/mysql-template.js +1 -1
  22. package/generators/lib/templates/oracle-template.js +1 -1
  23. package/generators/lib/templates/postgres-template.js +1 -1
  24. package/generators/lib/templates/query-declarative-catalog.js +1 -1
  25. package/generators/lib/templates/sqlite-template.js +1 -1
  26. package/generators/lib/utils/database-introspector.js +417 -6
  27. package/generators/lib/validators/argument-validator.js +2 -2
  28. package/integrity-manifest.json +18 -18
  29. package/package.json +4 -2
  30. package/scripts/verify-integrity.js +1 -1
  31. package/server.js +1 -1
  32. package/src/components/handlers/adjust_handler.js +1 -1
  33. package/src/components/handlers/audit_handler.js +1 -1
  34. package/src/components/handlers/delete_handler.js +1 -1
  35. package/src/components/handlers/export_handler.js +1 -1
  36. package/src/components/handlers/import_handler.js +1 -1
  37. package/src/components/handlers/insert_handler.js +1 -1
  38. package/src/components/handlers/update_handler.js +1 -1
  39. package/src/components/handlers/upload_handler.js +1 -1
  40. package/src/components/handlers/workflow_handler.js +1 -1
  41. package/src/components/integrations/webhook.js +1 -1
  42. package/src/consumers/baseConsumer.js +1 -1
  43. package/src/consumers/declarativeMapper.js +1 -1
  44. package/src/consumers/handlers/apiHandler.js +1 -1
  45. package/src/consumers/handlers/consoleHandler.js +1 -1
  46. package/src/consumers/handlers/databaseHandler.js +1 -1
  47. package/src/consumers/handlers/index.js +1 -1
  48. package/src/consumers/handlers/kafkaHandler.js +1 -1
  49. package/src/consumers/index.js +1 -1
  50. package/src/consumers/messageTransformer.js +1 -1
  51. package/src/consumers/validator.js +1 -1
  52. package/src/core/db/dialect/base-dialect.js +1 -1
  53. package/src/core/db/dialect/index.js +1 -1
  54. package/src/core/db/dialect/mysql-dialect.js +1 -1
  55. package/src/core/db/dialect/oracle-dialect.js +1 -1
  56. package/src/core/db/dialect/postgres-dialect.js +1 -1
  57. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  58. package/src/core/db/flatten-helper.js +1 -1
  59. package/src/core/db/query-builder-error.js +1 -1
  60. package/src/core/db/query-builder.js +1 -1
  61. package/src/core/db/relation-helper.js +1 -1
  62. package/src/core/handlers/delete_handler.js +1 -1
  63. package/src/core/handlers/insert_handler.js +1 -1
  64. package/src/core/handlers/update_handler.js +1 -1
  65. package/src/core/models/base-model.js +1 -1
  66. package/src/core/utils/cache-manager.js +1 -1
  67. package/src/core/utils/component-engine.js +1 -1
  68. package/src/core/utils/context-builder.js +1 -1
  69. package/src/core/utils/datetime-formatter.js +1 -1
  70. package/src/core/utils/datetime-parser.js +1 -1
  71. package/src/core/utils/db.js +1 -1
  72. package/src/core/utils/logger.js +1 -1
  73. package/src/core/utils/payload-loader.js +1 -1
  74. package/src/core/utils/security-checks.js +1 -1
  75. package/src/middleware/body-options.js +1 -1
  76. package/src/middleware/cors.js +1 -1
  77. package/src/middleware/idempotency.js +1 -1
  78. package/src/middleware/rate-limiter.js +1 -1
  79. package/src/middleware/request-logger.js +1 -1
  80. package/src/middleware/security-headers.js +1 -1
  81. package/src/models/base-model-mysql.js +1 -1
  82. package/src/models/base-model-oracle.js +1 -1
  83. package/src/models/base-model-sqlite.js +1 -1
  84. package/src/models/base-model.js +1 -1
  85. package/src/pro/caching/redis-client.js +1 -1
  86. package/src/pro/caching/redis-helper.js +1 -1
  87. package/src/pro/consumers/baseConsumer.js +1 -1
  88. package/src/pro/consumers/declarativeMapper.js +1 -1
  89. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  90. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  91. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  92. package/src/pro/consumers/handlers/index.js +1 -1
  93. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  94. package/src/pro/consumers/index.js +1 -1
  95. package/src/pro/consumers/messageTransformer.js +1 -1
  96. package/src/pro/consumers/validator.js +1 -1
  97. package/src/pro/database/base-model-mysql.js +1 -1
  98. package/src/pro/database/base-model-oracle.js +1 -1
  99. package/src/pro/database/base-model-sqlite.js +1 -1
  100. package/src/pro/database/db-mysql.js +1 -1
  101. package/src/pro/database/db-oracle.js +1 -1
  102. package/src/pro/database/db-sqlite.js +1 -1
  103. package/src/pro/excel/excel-generator.js +1 -1
  104. package/src/pro/excel/excel-parser.js +1 -1
  105. package/src/pro/excel/export-service.js +1 -1
  106. package/src/pro/excel/export_handler.js +1 -1
  107. package/src/pro/excel/import-service.js +1 -1
  108. package/src/pro/excel/import-validator.js +1 -1
  109. package/src/pro/excel/import_handler.js +1 -1
  110. package/src/pro/excel/upsert-builder.js +1 -1
  111. package/src/pro/idgen/idgen-routes.js +1 -1
  112. package/src/pro/integrations/lookup-resolver.js +1 -1
  113. package/src/pro/integrations/upload-handler-v2.js +1 -1
  114. package/src/pro/integrations/upload-handler.js +1 -1
  115. package/src/pro/integrations/webhook.js +1 -1
  116. package/src/pro/locking/lock-routes.js +1 -1
  117. package/src/pro/locking/resource-lock-manager.js +1 -1
  118. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  119. package/src/pro/messaging/kafkaService.js +1 -1
  120. package/src/pro/messaging/messagehubService.js +1 -1
  121. package/src/pro/messaging/rabbitmqService.js +1 -1
  122. package/src/pro/scheduler/job-manager.js +1 -1
  123. package/src/pro/scheduler/job-routes.js +1 -1
  124. package/src/pro/scheduler/job-validator.js +1 -1
  125. package/src/pro/storage/base-storage-provider.js +1 -1
  126. package/src/pro/storage/file-metadata-helper.js +1 -1
  127. package/src/pro/storage/index.js +1 -1
  128. package/src/pro/storage/local-storage-provider.js +1 -1
  129. package/src/pro/storage/s3-storage-provider.js +1 -1
  130. package/src/pro/storage/upload-cleanup-job.js +1 -1
  131. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  132. package/src/pro/storage/upload-pending-tracker.js +1 -1
  133. package/src/pro/websocket/broadcast-helper.js +1 -1
  134. package/src/pro/websocket/index.js +1 -1
  135. package/src/pro/websocket/livesync-server.js +1 -1
  136. package/src/pro/websocket/ws-broadcaster.js +1 -1
  137. package/src/services/export-service.js +1 -1
  138. package/src/services/import-service.js +1 -1
  139. package/src/services/kafkaConsumerService.js +1 -1
  140. package/src/services/kafkaService.js +1 -1
  141. package/src/services/messagehubService.js +1 -1
  142. package/src/services/rabbitmqService.js +1 -1
  143. package/src/utils/cache-invalidation-registry.js +1 -1
  144. package/src/utils/cache-manager.js +1 -1
  145. package/src/utils/component-engine.js +1 -1
  146. package/src/utils/config-extractor.js +1 -1
  147. package/src/utils/consumerLogger.js +1 -1
  148. package/src/utils/context-builder.js +1 -1
  149. package/src/utils/dashboard-helpers.js +1 -1
  150. package/src/utils/dateHelper.js +1 -1
  151. package/src/utils/datetime-formatter.js +1 -1
  152. package/src/utils/datetime-parser.js +1 -1
  153. package/src/utils/db-bootstrap.js +1 -1
  154. package/src/utils/db-mysql.js +1 -1
  155. package/src/utils/db-oracle.js +1 -1
  156. package/src/utils/db-sqlite.js +1 -1
  157. package/src/utils/db.js +1 -1
  158. package/src/utils/demo-generator.js +1 -1
  159. package/src/utils/excel-generator.js +1 -1
  160. package/src/utils/excel-parser.js +1 -1
  161. package/src/utils/file-watcher.js +1 -1
  162. package/src/utils/id-generator.js +1 -1
  163. package/src/utils/idempotency-manager.js +1 -1
  164. package/src/utils/import-validator.js +1 -1
  165. package/src/utils/license-client.js +1 -1
  166. package/src/utils/lock-manager.js +1 -1
  167. package/src/utils/logger.js +1 -1
  168. package/src/utils/lookup-resolver.js +1 -1
  169. package/src/utils/payload-loader.js +1 -1
  170. package/src/utils/processor-response.js +1 -1
  171. package/src/utils/rabbitmq.js +1 -1
  172. package/src/utils/redis-client.js +1 -1
  173. package/src/utils/redis-helper.js +1 -1
  174. package/src/utils/request-scope.js +1 -1
  175. package/src/utils/security-checks.js +1 -1
  176. package/src/utils/service-resolver.js +1 -1
  177. package/src/utils/shutdown-coordinator.js +1 -1
  178. package/src/utils/trusted-keys.js +1 -1
  179. package/src/utils/upload-handler.js +1 -1
  180. package/src/utils/upsert-builder.js +1 -1
  181. package/src/utils/workflow-hook-executor.js +1 -1
@@ -1 +1 @@
1
- (function(_0x53ed44,_0x458dee){const _0x344b2b=a0_0x2ced,_0x148db4=_0x53ed44();while(!![]){try{const _0x14fb08=-parseInt(_0x344b2b(0x2c3))/0x1+parseInt(_0x344b2b(0x207))/0x2+-parseInt(_0x344b2b(0x2b2))/0x3+parseInt(_0x344b2b(0x280))/0x4*(-parseInt(_0x344b2b(0x1d1))/0x5)+parseInt(_0x344b2b(0x275))/0x6+-parseInt(_0x344b2b(0x1cd))/0x7*(parseInt(_0x344b2b(0x1c5))/0x8)+-parseInt(_0x344b2b(0x236))/0x9*(-parseInt(_0x344b2b(0x2a8))/0xa);if(_0x14fb08===_0x458dee)break;else _0x148db4['push'](_0x148db4['shift']());}catch(_0x517c6b){_0x148db4['push'](_0x148db4['shift']());}}}(a0_0x9bb2,0xa481c));function toCamelCase(_0xa4c657){const _0x2a0f32=a0_0x2ced;if(!_0xa4c657||typeof _0xa4c657!=='string')return'';return _0xa4c657['replace'](/(?:^\w|[A-Z]|\b\w)/g,(_0xe938ea,_0x18fe43)=>{return _0x18fe43===0x0?_0xe938ea['toLowerCase']():_0xe938ea['toUpperCase']();})[_0x2a0f32(0x297)](/\s+/g,'')[_0x2a0f32(0x297)](/[-_]/g,'');}function a0_0x2ced(_0x538fc0,_0xe386f0){_0x538fc0=_0x538fc0-0x19e;const _0x9bb206=a0_0x9bb2();let _0x2ced74=_0x9bb206[_0x538fc0];if(a0_0x2ced['HhqsfZ']===undefined){var _0x19ca88=function(_0x4e1627){const _0x38d30c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1bd3ef='',_0x28f29e='';for(let _0x5db98f=0x0,_0x2a7ccc,_0x2665d1,_0x89ae61=0x0;_0x2665d1=_0x4e1627['charAt'](_0x89ae61++);~_0x2665d1&&(_0x2a7ccc=_0x5db98f%0x4?_0x2a7ccc*0x40+_0x2665d1:_0x2665d1,_0x5db98f++%0x4)?_0x1bd3ef+=String['fromCharCode'](0xff&_0x2a7ccc>>(-0x2*_0x5db98f&0x6)):0x0){_0x2665d1=_0x38d30c['indexOf'](_0x2665d1);}for(let _0x31f5c8=0x0,_0x12f576=_0x1bd3ef['length'];_0x31f5c8<_0x12f576;_0x31f5c8++){_0x28f29e+='%'+('00'+_0x1bd3ef['charCodeAt'](_0x31f5c8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x28f29e);};a0_0x2ced['mWvveZ']=_0x19ca88,a0_0x2ced['KpVrEc']={},a0_0x2ced['HhqsfZ']=!![];}const _0x8cd0f2=_0x9bb206[0x0],_0x58c061=_0x538fc0+_0x8cd0f2,_0x5bfc93=a0_0x2ced['KpVrEc'][_0x58c061];return!_0x5bfc93?(_0x2ced74=a0_0x2ced['mWvveZ'](_0x2ced74),a0_0x2ced['KpVrEc'][_0x58c061]=_0x2ced74):_0x2ced74=_0x5bfc93,_0x2ced74;}function toPascalCase(_0x57ee7a){const _0x3ceee7=a0_0x2ced,_0x171b8c={'lRVVG':function(_0x37fdc6,_0x22f220){return _0x37fdc6+_0x22f220;}};if(!_0x57ee7a||typeof _0x57ee7a!==_0x3ceee7(0x270))return'';const _0x1a0cd0=toCamelCase(_0x57ee7a);return _0x171b8c['lRVVG'](_0x1a0cd0[_0x3ceee7(0x1f0)](0x0)['toUpperCase'](),_0x1a0cd0[_0x3ceee7(0x1eb)](0x1));}function assertNoFileReferenceLeftover(_0x1aad85){const _0x3f41b5=a0_0x2ced,_0x5b6d8e={'YjTnx':_0x3f41b5(0x2c5),'LvDEu':'masterDetail.detailConfig.detailQuery','kbwWR':_0x3f41b5(0x270),'JyHiE':function(_0x3b2c93,_0x885e13){return _0x3b2c93+_0x885e13;}},_0x226e1b=[[_0x5b6d8e['YjTnx'],_0x1aad85['datatablesQuery']],[_0x3f41b5(0x277),_0x1aad85[_0x3f41b5(0x277)]],[_0x5b6d8e['LvDEu'],_0x1aad85[_0x3f41b5(0x266)]&&_0x1aad85[_0x3f41b5(0x266)][_0x3f41b5(0x201)]&&_0x1aad85[_0x3f41b5(0x266)]['detailConfig']['detailQuery']]];for(const [_0x3a3b7b,_0x4a6abe]of _0x226e1b){if(typeof _0x4a6abe===_0x5b6d8e[_0x3f41b5(0x27f)]&&_0x4a6abe['startsWith'](_0x3f41b5(0x2af)))throw new Error(_0x5b6d8e[_0x3f41b5(0x1d4)](_0x3f41b5(0x1f6)+_0x3a3b7b+_0x3f41b5(0x25d)+_0x4a6abe+').\x20','Expected\x20expanded\x20SQL\x20string.\x20Check\x20PayloadProcessor.processFileReferences\x20flow.'));}}function detectTextColumn(_0x425132){const _0x5f5cf9=a0_0x2ced,_0x3dad39={'jZHvX':_0x5f5cf9(0x23d),'lUSfy':'judul','JAnpM':'description','OTPVy':'deskripsi'},_0x2a99db=['name','nama',_0x3dad39['jZHvX'],_0x3dad39['lUSfy'],_0x3dad39[_0x5f5cf9(0x2b3)],_0x3dad39['OTPVy'],'code',_0x5f5cf9(0x24a)];for(const _0x326401 of _0x2a99db){const _0x208e51=_0x425132['find'](_0x2f02dc=>_0x2f02dc['toLowerCase']()[_0x5f5cf9(0x1e3)](_0x326401));if(_0x208e51)return _0x208e51;}return _0x425132[_0x5f5cf9(0x1ab)](_0xecccfc=>_0xecccfc!=='id')||_0x425132[0x0]||'nama';}function buildAuditColumnsSection(_0x4965df,_0x405b0c){const _0x2fecf5=a0_0x2ced,_0x3a55ce={'ayJeh':function(_0x3a1659,_0x189d07){return _0x3a1659!==_0x189d07;},'NJSjY':function(_0xe6c65,_0x42ec2f){return _0xe6c65 in _0x42ec2f;},'Qbmgt':function(_0x4f0015,_0x381b08){return _0x4f0015===_0x381b08;}};if(!_0x3a55ce['NJSjY']('auditColumns',_0x4965df))return'';const _0x7ba4f8=_0x4965df[_0x2fecf5(0x2a0)];if(_0x3a55ce[_0x2fecf5(0x1c2)](_0x7ba4f8,![])||_0x3a55ce['Qbmgt'](_0x7ba4f8,null))return'\x0a'+_0x405b0c+_0x2fecf5(0x1f2)+_0x405b0c+'this.auditColumns\x20=\x20null;\x0a';if(_0x3a55ce['Qbmgt'](typeof _0x7ba4f8,'object')&&!Array['isArray'](_0x7ba4f8)){const _0x259613=[_0x2fecf5(0x25a),'createdBy','updatedAt','updatedBy'],_0x3b61a9={};_0x259613['forEach'](_0x40458e=>{if(_0x3a55ce['ayJeh'](_0x7ba4f8[_0x40458e],undefined))_0x3b61a9[_0x40458e]=_0x7ba4f8[_0x40458e];});const _0x242722=JSON[_0x2fecf5(0x288)](_0x3b61a9,null,0x2)['split']('\x0a')['map']((_0x394cfb,_0x17d863)=>_0x17d863===0x0?_0x394cfb:_0x405b0c+_0x394cfb)['join']('\x0a');return'\x0a'+_0x405b0c+_0x2fecf5(0x259)+_0x405b0c+_0x2fecf5(0x1fb)+_0x242722+';\x0a';}throw new Error('Invalid\x20auditColumns\x20value\x20for\x20'+_0x4965df['tableName']+_0x2fecf5(0x25f));}function createOracleMainModuleTemplate(_0xd06377){const _0x3ca42f=a0_0x2ced,_0x2136aa=toPascalCase(_0xd06377);return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20bodyParser\x20=\x20require(\x27body-parser\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0aconst\x20{\x20logger,\x20logServerReady,\x20logEndpointRegistered,\x20createRequestLogger,\x20logRequest\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/logger\x27);\x0aconst\x20ExportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/export_handler\x27);\x0aconst\x20ImportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/import_handler\x27);\x0aconst\x20UploadHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/upload_handler\x27);\x0aconst\x20{\x20extractExportConfigFromEndpoint,\x20extractImportConfigFromEndpoint,\x20extractUploadConfigFromEndpoint\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/config-extractor\x27);\x0aconst\x20rateLimiter\x20=\x20require(\x27@restforgejs/platform/src/middleware/rate-limiter\x27);\x0aconst\x20idempotencyMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/idempotency\x27);\x0aconst\x20bodyOptionsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/body-options\x27);\x0aconst\x20corsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/cors\x27);\x0aconst\x20securityHeaders\x20=\x20require(\x27@restforgejs/platform/src/middleware/security-headers\x27);\x0a\x0a/**\x0a\x20*\x20Fungsi\x20untuk\x20mengeksekusi\x20modul\x20'+_0xd06377+_0x3ca42f(0x211)+_0x2136aa+_0x3ca42f(0x26f)+_0xd06377+_0x3ca42f(0x1b7)+_0xd06377+_0x3ca42f(0x1f5)+_0xd06377+_0x3ca42f(0x264)+_0xd06377+'\x0a\x20\x20\x20\x20const\x20modulesDir\x20=\x20path.join(__dirname,\x20\x27'+_0xd06377+'\x27);\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Directory\x20${modulesDir}\x20created\x20successfully`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27endpoints_loading\x27,\x20count:\x20endpointFiles.length\x20},\x20`Loading\x20${endpointFiles.length}\x20endpoint(s)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointName\x20=\x20path.basename(file,\x20\x27.js\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Clear\x20module\x20cache\x20untuk\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(require.cache[endpointPath])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete\x20require.cache[endpointPath];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20moduleRoutes\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0xd06377+_0x3ca42f(0x233)+_0xd06377+'\x27,\x20endpointName,\x20exportConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27export_registration_error\x27,\x20endpoint:\x20endpointName,\x20error:\x20exportError.message\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20via\x20centralized\x20handler\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(importConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ImportHandler.registerRoutes(app,\x20\x27'+_0xd06377+'\x27,\x20endpointName,\x20importConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27import_routes_registered\x27,\x20endpoint:\x20endpointName\x20},\x20`Import\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(importError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27import_registration_error\x27,\x20endpoint:\x20endpointName,\x20error:\x20importError.message\x20},\x20`Import\x20registration\x20failed\x20for\x20${endpointName}:\x20${importError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20upload\x20routes\x20via\x20centralized\x20handler\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20uploadConfig\x20=\x20extractUploadConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(uploadConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UploadHandler.registerRoutes(app,\x20\x27'+_0xd06377+_0x3ca42f(0x28c)+_0xd06377+':`,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20export\x20cleanup\x20route\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Export\x20cleanup\x20route\x20registration\x20failed:\x27,\x20cleanupError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0xd06377+'\x20API\x20(Oracle\x20Database)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27running\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20database:\x20\x27Oracle\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error:\x27,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err\x20&&\x20!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20catch-all\x20403\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20runtime\x20untuk\x20register\x20admin\x20endpoint\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0xd06377+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20healthCheck:\x20`http://${displayHost}:${port}/api/'+_0xd06377+'/health`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20serviceInfo:\x20`http://${displayHost}:${port}/api/'+_0xd06377+_0x3ca42f(0x2b6)+_0xd06377+':\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20resolve();\x0a\x20\x20\x20\x20}\x0a\x20\x20});\x0a}\x0a\x0amodule.exports\x20=\x20{\x20execute\x20};';}function a0_0x9bb2(){const _0x5685ec=['lMrLBgv0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cIaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfignVBxbSzxrLzcbZDwnJzxnZzNvSBhKGD2L0AcbLDMvUDhmNktSkicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGignVBNnVBguUzxjYB3iOj1TjtLrfr1jbveveifrsqu5tqunusu9oxsberuXfveuGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0k','jhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9','zxHWB3j0uxvLCNK','jYWkicaGicaGicbWCMLTyxj5s2v5oIb0AgLZlNbYAw1HCNLlzxKScIaGicaGicaGlI4Ukgv2zw50q29UDgv4Dc5HzgrPDgLVBMfSq29UDgv4Dcb8Fcb7FsKkicaGicaGFsK7cIaGicaGihzHCIbFywz0zxjszxn1BhqGpsbHD2fPDcbFy2uYlMv4zwn1DgvpBKfMDgvYq29TCg9ZAxrLkcD1CgrHDguNlcbFywz0zxjdDhGPoWOGicaGicbPzIaOiv9HzNrLCLjLC3vSDc5ZDwnJzxnZksb7cIaGicaGicaGyxDHAxqGy29UBMvJDgLVBI5YB2XSyMfJAYGPoWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNB25bzNrLCKnVBxbVC2L0zvvWzgf0zsbMywLSzwq6icCGkYbFywz0zxjszxn1BhqUzxjYB3iPoWOGicaGicb9cIaGicb9cGOGicaGyxDHAxqGy29UBMvJDgLVBI5JB21TAxqOktSkicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGlY8Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOihDYAxrLig9WzxjHDgLVBIbIzxjOyxnPBaOGicaGyxDHAxqGDgHPCY5PBNzHBgLKyxrLq2fJAguOktSkcIaGicbYzxr1CM4GEWOGicaGicaUlI51CgrHDgvKsgvHzgvYlaOGicaGicbBzgv0ywLSs2v5xtOGywXSsxrLBxmScIaGicaGif9VCgvYyxrPB25ZoIb7cIaGicaGicaGzgvSzxrLzdOGzgvSzxrLzeL0zw1ZlMXLBMD0AcWkicaGicaGicb1CgrHDgvKoIb1CgrHDgvKsxrLBxmUBgvUz3rOlaOGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlMXLBMD0AaOGicaGicb9cIaGicb9oWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicb0CNKGEYbHD2fPDcbJB25Uzwn0Aw9UlNjVBgXIywnRkcK7ih0Gy2f0y2GGkguPihSGlYOGAwDUB3jLicOVih0kicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUihvWzgf0zunVBxbVC2L0ztONlcbLCNjVCIK7cIaGicb0AhjVDYbLCNjVCJSkicb9igzPBMfSBhKGEWOGicaGDhj5ihSGyxDHAxqGy29UBMvJDgLVBI5JBg9ZzsGPoYb9ignHDgnOicHLksb7ic8QigLNBM9YzsaQlYb9cIaGFqP9cG','DxbSB2fKq29UzMLN','lMDLDeXVB2T1CerHDgeOC2vHCMnOktSkicaGignVBNn0igXVB2T1CfrPBwuGpsbeyxrLlM5VDYGPic0GC3rHCNruAw1LoWOkicaGignVBNnVBguUBg9NkgbBt1jbluXluf0GjhTVCMfszxf1zxn0swr9igzVDw5Kicr7BgLZDc5Szw5NDgH9ihjLC3vSDhmGAw4GjhTSB29RDxbuAw1LFw1ZycK7cGOGicaGCMv0DxjUihjLCY5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGy291BNq6igXPC3qUBgvUz3rOlaOGicaGicbKyxrHoIbSAxn0laOGicaGicbZzwfYy2G6ihnLyxjJAcWkicaGicaGx29YywnSztOGEYbYzxf1zxn0swq6ig9YyvjLCxvLC3rjzcWGCxvLCNLuAw1LoIbSB29RDxbuAw1Llcb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOksb9cIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIHGw09sqs1ms1bDievYCM9Yicr7B3jHuMvXDwvZDeLKFtPGlcbLCNjVCIK7cIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGBg9VA2LUzYb1Cca','zw5HyMXLza','laOGicaGicaGihrLEhq6igL0zw0U','jZSkcIaGicaVlYbdB25MAwD1CMf0Aw9Uig9WDgLVBNmkicaGignVBNn0igXVz2DPBMDfBMfIBgvKid0Gy29UzMLNlMXVz2DPBMCGit09igzHBhnLoWOGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGBg9Nz2vYlMLUzM8OEWOGicaGicbLDMvUDdOGj21VzhvSzv9ZDgfYDgLUzYCScIaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicbWB3j0laOGicaGicbJB3jZoIbWCM9JzxnZlMvUDI5dt1jtx0voqujmruqGit09icDMywXZzsCScIaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGBg9Nz2LUzZOGBg9Nz2LUz0vUywjSzwqScIaGicaGigfWAuTLEtOGyxbPs2v5uMvXDwLYzwqkicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGlY8Gq09suYbTAwrKBgv3yxjLicHRB25MAwD1CMfZAsb2AweGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkicaGigfWCc51C2uOy29YC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGyxbWlNvZzsHZzwn1CML0EuHLywrLCNmUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbnAwrKBgv3yxjLihvUDhvRihbHCNnPBMCGsLnptIbKzw5Nyw4GCgvUyw5Nyw5HBIbLCNjVCGOGicaGyxbWlNvZzsHIB2r5ugfYC2vYlMPZB24OEWOGicaGicb2zxjPzNK6icHYzxeSihjLCYWGyNvMlcbLBMnVzgLUzYKGpt4GEWOGicaGicaGigLMicHIDwyUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM47cIaGicaGicaGFqOGicaGicaGihrYEsb7cIaGicaGicaGicbku09olNbHCNnLkgj1zIK7cIaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbku09oihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNvgHLihbHEwXVywqGC2vUDcbPCYbUB3qGysb2ywXPzcbku09oigzVCM1HDcCScIaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2ukicaGicaGicaGih0PoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDjBNzHBgLKiePtt04NktSkicaGicaGicb9cIaGicaGih0kicaGih0PktSkcIaGicbHChaUDxnLkgjVzhLqyxjZzxiUDxjSzw5JB2rLzcH7igv4DgvUzgvKoIb0CNvLih0PktSkcIaGicaVlYbszxf1zxn0igXVz2DPBMCGBwLKzgXLD2fYzsaOugLUBY1IyxnLzcKkicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGihjLCs5Pzca9ihjLCs5OzwfKzxjZwYD4lxjLCxvLC3qTAwqNxsb8Fcb1DwLKDJCOktSkicaGicaGCMvZlNnLDcGNwc1szxf1zxn0luLejYWGCMvXlMLKktSkcIaGicaGihjLCs5SB2CGpsbJCMvHDgvszxf1zxn0tg9Nz2vYkhSkicaGicaGicbYzxf1zxn0swq6ihjLCs5PzcWkicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGCgf0AdOGCMvXlNbHDgGScIaGicaGicaGAxa6ihjLCs5PCaOGicaGicb9ktSkcIaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicbJB25ZDcbBC2vJB25KCYWGBMfUB3nLy29UzhnDid0GChjVy2vZCY5OCNrPBwuOC3rHCNruAw1LktSkicaGicaGicbJB25ZDcbKDxjHDgLVBK1Zid0GCgfYC2vgBg9HDcGOC2vJB25KCYaQideWmdaGkYbUyw5VC2vJB25KCYaVidfLnIKUDg9gAxHLzcGYksK7cIaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGih0PoWOkicaGicaGBMv4DcGPoWOGicaGFsK7cGOGicaGlY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbbueKGA2v5igPPA2eGzgLWzxjSDwTHBIaOy29UC3rHBNqTDgLTzsbJB21WyxjPC29UkqOGicaGAwyGkgnVBMzPzY5RzxKPihSkicaGicaGy29UC3qGy3j5ChrVid0GCMvXDwLYzsGNy3j5ChrVjYK7cIaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicbHChaUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicbPzIaOiwfWAuTLEsKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGignVBNn0ihbYB3zPzgvKs2v5id0GqNvMzMvYlMzYB20OyxbPs2v5ktSkicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGiwnYExb0BY50Aw1PBMDtywzLrxf1ywWOzxHWzwn0zwrlzxKSihbYB3zPzgvKs2v5ksKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGig5LEhqOktSkicaGicaGFsK7cIaGicb9cGOGicaGlY8GuMf0zsbSAw1PDgLUzYbTAwrKBgv3yxjLicHZDg9YztOGBwvTB3j5ihvUDhvRihnPBMDSzsbTB2rLlcbszwrPCYb1BNr1AYbJBhvZDgvYig1VzguPcIaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicbHChaUDxnLkcCVyxbPjYWGCMf0zuXPBwL0zxiUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbjzgvTCg90zw5JEsbTAwrKBgv3yxjLicHWCM90zwn0CYbTDxrHDgLVBIbLBMrWB2LUDhmGzNjVBsbKDxbSAwnHDguGzxHLy3v0Aw9UkqOGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicbHChaUDxnLkcCVyxbPjYWGAwrLBxbVDgvUy3LnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cIaGicb9cGOGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGigfWCc51C2uOjY9HCgKNlcbIB2r5t3b0Aw9UC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbbDxrVlwXVywqGCgX1z2LUicHQAwTHigfKysKkicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','C3rYAw5N','lMnYzwf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9NkcC','tw9KzwW','ignVBxbVC2L0zsbJCMvHDguGC3vJy2vZC2z1BcCPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmsKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6icC','ksKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0EsaI','mtG5nty1oeHAuMrgqW','EvrHr0u','DMLLD1f1zxj5','lMDLDenVBM5Ly3rPB25jBMzVkcK7cGOGicaGCMvZlMPZB24OEWOGicaGicbZDgf0Dxm6ignVBM5Ly3rPB25jBMzVid8Gj2HLywX0AhKNidOGj3vUA25VD24NlaOGicaGicbLBMrWB2LUDdOGjW','igrHDgeNlaOGicaGicbKzxrHAwXZoIbLCNjVCI5TzxnZywDLlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9ifDirvjfifvquevska','ruTNzg0','jYWkicaGicaGzgf0ywjHC2u6icDVCMfJBguNlaOGicaGicbJB25Uzwn0Aw9UoIbJB25Uzwn0Aw9Usw5MBYa/icDHy3rPDMuNidOGj3vUA25VD24NlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGihjLCY5ZDgf0DxmOntaZks5QC29UkhSkicaGicaGC3rHDhvZoIaNDw5OzwfSDgH5jYWkicaGicaGzw5KCg9PBNq6icC','cGOGicaGlY8GqNvPBgqGzxzLBNrdB250zxH0ihvUDhvRignVBxbVC2L0zsbOB29RCWOGicaGDMfYigv2zw50q29UDgv4Dca9ig51BgW7cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGigv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','swvzruK','A2j3v1i','ogPXs0PoDa','cN07cG','AM9PBG','cIaGicaGia','ktSkicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbbrePvu1qGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','id0G','Bun4D0W','jZSkicaGignVBNn0igHLywrLCKrHDgeGpsb7ic4UlMrHDgeGFtSkicaGigrLBgv0zsbOzwfKzxjeyxrHw2rLDgfPBeTLEv07cGOGicaGlY8Gls0TieHVB2S6ig9UqMvMB3jLq29TCg9ZAxrLsw5Zzxj0ic0TlqOGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGihzHCIbFy2uGpsbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5LoWOGicaGicb2yxiGx0ncid0GzxzLBNrdB250zxH0lKnVBNrLEhrcDwLSzgvYoWOGicaGicb2yxiGx2rLDgfPBeL0zw1Zid0Gzgf0yvTKzxrHAwXlzxLDihX8ifTDoWOGicaGicb2yxiGx2jLzM9Yzun0Eca9if9dqI5IDwLSzenVBxbVC2L0zuLUC2vYDejLzM9YzunVBNrLEhqOAgvHzgvYrgf0ysWGx2rLDgfPBeL0zw1Zlcb7cIaGicaGicaGDgfIBgvoyw1LoIaN','C3rYAw5NAwz5','CMvXDwvZDfnJB3bL','oWOkicbZDxbLCIGN','tw9KzwWOktS','jYWGzw5KCg9PBNroyw1Llcb1CgXVywrdB25MAwCPoWOGicaGicaGicaGicaGigXVz2DLCI5PBMzVkhSGzxzLBNq6icD1CgXVywrFCM91DgvZx3jLz2LZDgvYzwqNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbMAwvSzhm6ie9IAMvJDc5RzxLZkhvWBg9HzenVBMzPzY5MAwvSzhmGFhWGE30Pih0SigbvCgXVywqGCM91DgvZihjLz2LZDgvYzwqGzM9Yicr7zw5KCg9PBNroyw1LFwaPoWOGicaGicaGicaGicb9cIaGicaGicaGicb9ignHDgnOicH1CgXVywrfCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3vWBg9Hzf9YzwDPC3rYyxrPB25FzxjYB3iNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbLCNjVCJOGDxbSB2fKrxjYB3iUBwvZC2fNzsb9lcbGvxbSB2fKihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhT1CgXVywrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGFqOGicaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGicbJB25ZB2XLlMvYCM9YkgbfCNjVCIbSB2fKAw5Nig1VzhvSzsaKE2zPBgv9igzYB20G','jYWkicaGicaGzgf0ywjHC2u6icDVCMfJBguNlaOGicaGicbLCNjVCJOGzxjYB3iUBwvZC2fNzsWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7cGO','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbYzwfKAw5Nia','AwyGkgDLBMvYyxrLzezPzwXKCY5PBMnSDwrLCYHRzxKPksbJB250Aw51ztS','lMXLBMD0AdSkicaGih0kicaGigLMicHOzwfKzxjdywXJlNrVDgfSx3f0EsaMjIbOzwfKzxjdywXJlNrVDgfSx3f0Es5ZB3vYy2uPihSkicaGicaGDMfYihf0EuzPzwXKid0GAgvHzgvYq2fSyY50B3rHBf9XDhKUC291CMnLlNjLCgXHy2uOj2L0zw1ZlICSicCNktSkicaGicaGzgf0ys50B3rHBf9XDhKGpsbKyxrHlG','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj29YywnSzsCScIaGicaGigDLBMvYyxrLzdOGjW','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifrVBgfRigzVCM1HDcbHzhzHBMnLzcaOy29UzgL0Aw9UCY9SB2DPyYKkicaGigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZihX8ihjLCs5IB2r5lNDOzxjLlMXVz2LJksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0fKDMfUy2vKihDOzxjLigzVCM1HDcbPCYbUB3qGC3vWCg9YDgvKigLUic9MAxjZDcbLBMrWB2LUDc4GvxnLic9YzwfKigvUzhbVAw50igzVCIbJB21WBgv4ihf1zxjPzxmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbHzgeGzgKGDMfSAwrgAwvSzhmkicaGignVBNn0ihzHBgLKrMLLBgrZid0G','iL0GpsbUDwXSoWOGih0','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','icbYzxr1CM4Gj1nftevdvcaQiezst00GjYaRihrOAxmUCMvHzfnVDxjJztS','laOGigfKANvZDenVBMzPzZOG','CMvWBgfJzq','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGih0PoWOGicaGicaGih0kicaGicaGFsbJyxrJAcaOy2HLy2TfCNjVCIKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMvYAwzPy2f0Aw9UiezHAwXLzcCScIaGicaGicaGicbTzxnZywDLoIaNq291BgqGBM90ihzLCMLMEsbKyxrHigv4Axn0zw5JzsbIzwzVCMuGzgvSzxrLjYWkicaGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8Gy2HLy2TfCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOk','jYWGjW','yxv0B0nHBgn1Bgf0zuzPzwXKCW','cIOkkIbuywjSztOG','zMLLBgroyw1L','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','j119ycK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','zgf0zxrPBwu','yxvKAxrdB2X1Bw5Z','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGDMfYihjLC3vSDca9igf3ywL0ia','ExL5Es1nts1Kza','cIOGrgf0ywjHC2u6ie9YywnSzqOQlWPJBgfZCYa','cIaGicb9','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUzxjYB3joDw0Gpt09idiYotiPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0zVCMvPz24GA2v5ignVBNn0CMfPBNqNlaOGicaGicaGig1LC3nHz2u6icDdyw5UB3qGzgvSzxrLoIbYzwnVCMqGAxmGC3rPBgWGCMvMzxjLBMnLzcbIEsbVDgHLCIbKyxrHjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGzgvSzxrPBMCG','BMfTzq','igXPC3qGzgf0ysCScIaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7cGO','mtC1nJK4mhrNzun0Aa','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','z1HuCNu','jZSkicaGih0k','Bg9VA3vW','DgLTzq','Bgv0ignVBxbVBMvUDevUz2LUzsa9ig51BgW7cMXLDcbdB250zxH0qNvPBgrLCIa9ig51BgW7cG','zMLSztO','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGy29UC3qGDg90ywXbBw91BNqGpsbHBgXjDgvTCY5Yzwr1y2uOzNvUy3rPB24OC3vTlcbPDgvTksb7cIaGicaGicaGDMfYihf0Esa9ie51BwjLCIHPDgvTlG','AxrLBxmU','mtm4oduXn2HKqK1NtW','sKfUCe0','icb0AgLZlNzHBgLKyxrPB25dB25MAwCGpsb7FtSGlY8GtM8GzMLLBgqGDMfSAwrHDgLVBIbJB25MAwC','Aw5MBW','l2LUzM9GlaOGicaGicaGicaGyMfZzvvYBdOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9yaOGicaGicaGih0PoWOGicaGicaGignVBNnVBguUBg9NkcCNktSkcIaGicaGicaGlY8GrxHLy3v0zsbWBhvNAw4GB25bzNrLCLnLCNzLCLn0yxj0igHVB2SGkgPPA2eGywrHkqOGicaGicaGigLMicHWBhvNAw4GjIyGCgX1z2LUlM9Uqwz0zxjtzxj2zxjtDgfYDcKGEWOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGCgX1z2LUlM9Uqwz0zxjtzxj2zxjtDgfYDcHHChaSignVBMzPzYK7cIaGicaGicaGicb9ignHDgnOicHWBhvNAw5fCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9HzNrLCL9ZDgfYDf9LCNjVCICSigvYCM9YoIbWBhvNAw5fCNjVCI5TzxnZywDLih0SicDqBhvNAw4GB25bzNrLCLnLCNzLCLn0yxj0igzHAwXLzcCPoWOGicaGicaGicaGFqOGicaGicaGih0kicaGicaGFsK7cGOGicaGicbWCM9JzxnZlM9UkcDtsuDjtLqNlcaOksa9pIb7cIaGicaGicaGy29UC29Szs5SB2COj01LBMvYAw1HihnPBNLHBcbtsuDjtLqSihnODxr0Aw5NigrVD24UlI4NktSkicaGicaGicbWCM9JzxnZlMv4AxqOmcK7cIaGicaGih0PoWOkicaGicaGChjVy2vZCY5VBIGNu0LhvevstsCSicGPid0+ihSkicaGicaGicbJB25ZB2XLlMXVzYGNtwvUzxjPBweGC2LUEwfSifnjr1rfuK0SihnODxr0Aw5NigrVD24UlI4NktSkicaGicaGicbWCM9JzxnZlMv4AxqOmcK7cIaGicaGih0PoWOkicaGicaGChjVy2vZCY5VBIGNDw5JyxvNAhrfEgnLChrPB24NlcaOzxjYB3iPid0+ihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDvBMnHDwDODcbfEgnLChrPB246jYWGzxjYB3iPoWOGicaGicb9ktSkcIaGicaGihbYB2nLC3mUB24Oj3vUAgfUzgXLzfjLAMvJDgLVBICSicHYzwfZB24SihbYB21PC2uPid0+ihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDvBMHHBMrSzwqGuMvQzwn0Aw9Uigf0oICSihbYB21PC2uSicDYzwfZB246jYWGCMvHC29UktSkicaGicaGFsK7cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5QywXHBMTHBIbTB2r1Bca','cNjVDxrLCI5WB3n0kcCVy2HHBMDLlxn0yxr1CYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbJB25ZDcbWCMLTyxj5s2v5id0GjW','cIOGrMLLBgrZoIa','Dg9vChbLCKnHC2u','igrHDgeGDxbKyxrLzcbZDwnJzxnZzNvSBhK6ia','id09psbZzwXLy3rLzfrHzYKGEWOGicaGicaGihjVDY5ZzwXLy3rLzca9icD0CNvLjZSkicaGicaGFqOGicaGicbYzxr1CM4GCM93oWOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUie9YywnSzsbNzxrtDgf0AwnmB29RDxbeyxrHoICSigvYCM9YktSkicaGihrOCM93igvYCM9YoWOGih0kFqOklYOQcIaQieXVB2T1CcbKzw5Nyw4Gywr2yw5JzwqGzMLSDgvYihn1ChbVCNqGDw50DwSGt3jHy2XLcIaQlWPHC3LUyYbNzxrmB29RDxbeyxrHv2L0AezPBhrLCIHVChrPB25Zksb7cIaGDhj5ihSkicaGic8VienOzwnRignHy2HLigzPCNn0cIaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ic4UlM9WDgLVBNmSihr5Cgu6icDMAwX0zxiNih07cIaGicbJB25ZDcbJywnOzwrszxn1BhqGpsbHD2fPDcb0AgLZlMDLDenHy2HLzeXVB2T1CcHJywnOzu9WDgLVBNmSicDMAwX0zxiNktSkicaGigLMicHJywnOzwrszxn1BhqPihjLDhvYBIbJywnOzwrszxn1Bhq7cGOGicaGy29UC3qGC2vSzwn0q29SDw1UCYa9ig9WDgLVBNmUC2vSzwn0ihX8ifSN','zgv0ywLSvgfIBgu','Dg9mB3DLCKnHC2u','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5ZDgf0DxndB2rLid09psa0mdaGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8cIaGicaGicaGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNsw52ywXPzcbHz2DYzwDHDguGzNvUy3rPB24Nksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0LUDMfSAwqGywXPyxmNksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj29UBhKGywXSB3DLzcb3AxrOienpvu5ujYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzgvMAw5LzcbPBIbHz2DYzwDHDguGy29UzMLNjYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUBYbQB2LUigrLzMLUAxrPB25ZigzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigfNz3jLz2f0Aw5Nia','cIaGicaVlYbjBNrLz3jHDgvKihrYyw5Zywn0Aw9UigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGihrYEsb7cIaGicaGignVBNn0igv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','DxbZzxj0s2v5CW','iL0GpsaI','ie9srevsiejzia','mte5nty2m3fnC3j2rG','lY8Grw5KCg9PBNqGl2LUzM8GzgLUB25HA3rPzMTHBIb2AweGywn0Aw9UlMLUzM8GpsbMywXZzqO','zgf0yxrHyMXLC1f1zxj5','jYWkicaGicaGicbMB3jLAwDUs2v5oIaN','ieforca','yM9VBgvHBG','jYWkicaGicaGicbZzxj2AwnLCZOGE30ScIaGicaGicaGywrKAxrPB25HBenVBNrLEhq6ihSkicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicbYzxf1zxn0swq6ihjLCs5Pzcb8FcbUDwXSlaOGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGic8VigrPlwzVCNDHCMqGA2uGD29YA2zSB3CGAg9VAYbJywXSigfNyxiGzw5KCg9PBNqGDhvQDwfUihLHBMCGChvUEwekicaGicaGicaGic8VihjLCxvLC3rty29WzsbHA3rPzIb0zxrHCcbTzw5LCMLTysbYzxeUDxnLCIbKzw5Nyw4GC2nVCguGEwfUzYbZyw1HlGOGicaGicaGicaGyxv0AeHLywrLCJOGCMvXlMHLywrLCNmUyxv0Ag9YAxPHDgLVBIb8FcbUDwXScIaGicaGicaGFqOGicaGicb9oWOkicaGicaGDhj5ihSkicaGicaGicbJB25ZDcb7ihjLC29SDMvtzxj2AwnLCYb9id0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9Zzxj2AwnLlxjLC29SDMvYjYK7cIaGicaGicaGzxzLBNrdB250zxH0lNnLCNzPy2vZid0GCMvZB2X2zvnLCNzPy2vZkcK7cIaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaVlYbtzxj2AwnLihjLC29SDMvYig9WC2LVBMfScIaGicaGih0kcIaGicaGihjLC3vSDca9igf3ywL0ia','C3bSAxq','qxfIENG','cIaGicbPzIaOC2vHCMnOksb7cIaGicaGihDOzxjLq29UzgL0Aw9UCY5WDxnOkgbvufbfuIG','y29TCg9Uzw50CW','DKrMD2S','igrHDgeGzgvSzxrLzcbZDwnJzxnZzNvSBhLGktSkcIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5YzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NAgfWDxmGzgf0ysa','zNjVBuvUDhjPzxm','r3nYr0W','ChvZAa','BNvSBa','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','cIOGuhjPBwfYEsblzxK6ia','icbSzxqGyMfZzvf1zxj5id0GyaOGicaG','cIaGicaGih0','cIaGicaGignVBNn0igrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGzfzHBhvLCYa9ifTDoWOGicaGicbSzxqGzeLKEca9ide7cIaGicaGigzVCIaOy29UC3qGw2TLEsWGDMfSDwvDig9Mie9IAMvJDc5LBNrYAwvZkgL0zw0Pksb7cIaGicaGicaGAwyGkgTLEsa9pt0Gzgv0ywLSugSPignVBNrPBNvLoWOGicaGicaGia','D29YA2zSB3C','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','DhLWzq','sLjzuwG','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicbJB25ZB2XLlMXVzYGNw0LovevhuKfuruqGvfjbtLnbq1rjt05Dieniqu5hrs1tvefuvvmGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05Dieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0k','cIaGicbJB25ZDcb3B3jRzMXVD0nVBMzPzYa9ia','jZSkicaGia','zwTzA0m','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','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUzxjYB3joDw0Gpt09idePihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUzxjYB3joDw0Gpt09idiYotePihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0zVCMvPz24GA2v5ignVBNn0CMfPBNqNlaOGicaGicaGig1LC3nHz2u6icDszwzLCMvUy2vKigrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrKAw5Nia','tvzPr2K','zMLUza','zw50CMLLCW','iga7cIaGicaGicaGCgfYyw1Zid0GD2HLCMvszxn1BhqUCgfYyw1ZoWOGicaGicb9ignHDgnOicHLksb7cIaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGzxjYB3iUC3rHDhvZq29Kzsa9idqWmdSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFqOkicaGic8VieHHBMrSzsbZB3j0x2nVBhvTBNmkicaGigLMicHVChrPB25ZlNnVCNrFy29SDw1UCYaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUC29YDf9JB2X1Bw5ZksaMjIbVChrPB25ZlNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGignVBNn0ig9YzgvYugfYDhmGpsbVChrPB25ZlNnVCNrFy29SDw1UCY5TyxaOAxrLBsa9pIb7cIaGicaGicaGy29UC3qGy29SDw1Uid0GAxrLBs5JB2X1Bw47cIaGicaGicaGy29UC3qGzgLYzwn0Aw9Uid0GkgL0zw0UzgLYzwn0Aw9UihX8icDbu0mNks50B1vWCgvYq2fZzsGPoWOGicaGicaGigLMicGHy29SDw1UksbYzxr1CM4GBNvSBdSkicaGicaGicbPzIaOixrOAxmUDMfSAwrgAwvSzhmUAw5JBhvKzxmOy29SDw1UksKGCMv0DxjUig51BgW7cIaGicaGicaGAwyGkgrPCMvJDgLVBIaHpt0Gj0ftqYCGjIyGzgLYzwn0Aw9Uice9psaNrevtqYCPihjLDhvYBIbUDwXSoWOGicaGicaGihjLDhvYBIbGjhTJB2X1Bw59icr7zgLYzwn0Aw9UFwa7cIaGicaGih0PlMzPBhrLCIHcB29SzwfUktSkcIaGicaGigLMicHVCMrLCLbHCNrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGignVBNn0igvYCM9Yid0GBMv3ievYCM9YkcDoBYb2ywXPzcbZB3j0ignVBhvTBNmGChjVDMLKzwqNktSkicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE29YzgvYugfYDhmUAM9PBIGNlcaNkx1GoWOGicaGFsbLBhnLihSkicaGicaGCxvLCNKGkZ0Gye9srevsiejzicr7ywXPyxngAwvSzcb8Fcb0zxH0rMLLBgr9ydSkicaGih0kcIaGicbJB25ZB2XLlMXVzYGNt3jHy2XLieXVB2T1CcbgAwX0zxiGuxvLCNK6jYWGCxvLCNKPoWOGicaGy29UC29Szs5SB2COj1bHCMfTzxrLCNm6jYWGCgfYyw1ZktSkcIaGicbJB25ZDcbKyxrHid0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5khf1zxj5lcbWyxjHBxmUBgvUz3rOid4Gmca/ihbHCMfTCYa6ihvUzgvMAw5LzcK7cGOGicaGy29UC3qGDgv4DezPzwXKvxbWzxiGpsaOywXPyxngAwvSzcb8Fcb0zxH0rMLLBgqPlNrVvxbWzxjdyxnLkcK7cIaGicbJB25ZDcbYzxn1BhqGpsbKyxrHlM1HCcHPDgvTid0+icH7cIaGicaGigLKoIbPDgvTlG','zMLYC3q','cIaGicb9ksK7cIaGicbHD2fPDcb0AgLZlNnLDenHy2HLzeXVB2T1CcHJywnOzu9WDgLVBNmSignHy2HLrgf0ysWGj3n0yxrPyYCPoWOkicaGic8VifjLDhvYBIbKzw5Nyw4GC2vSzwn0zwqGzMXHzWOGicaGCMv0DxjUigrHDgeUBwfWkgL0zw0Gpt4GEWOGicaGicbJB25ZDcbYB3CGpsb7cIaGicaGicaGAwq6igL0zw0U','icaGicaGlY8Gqxv0BY1JywXJDwXHDguG','oWOGihrOAxmUAgfZrxHWB3j0uxvLCNKGpsa','ywrQDxn0q29UzMLN','oWOGicaGBgv0ihnLBgvJDca9ig51BgW7cIaGicbPzIaOCMvXlMjVzhKUC2vSzwn0icyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUC2vSzwn0ksKGEWOGicaGicbJB25ZDcbPBNzHBgLKrMLLBgrZid0GCMvXlMjVzhKUC2vSzwn0lMzPBhrLCIHMAwvSzca9pIaHDMfSAwrgAwvSzhmUAw5JBhvKzxmOzMLLBgqPktSkicaGicaGAwyGkgLUDMfSAwrgAwvSzhmUBgvUz3rOid4GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbZzwXLy3qGzMLLBgrZjYWkicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKigzPzwXKkhmPoIaNicSGAw52ywXPzezPzwXKCY5QB2LUkcCSicCPlaOGicaGicaGicaGDMfSAwrgAwvSzhm6ihzHBgLKrMLLBgrZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbZzwXLy3qGpsbYzxeUyM9KEs5ZzwXLy3q7cIaGicb9cGOGicaGy29UC3qGB3b0Aw9UCYa9ihSkicaGicaGC2vHCMnOvMfSDwuScIaGicaGihnLyxjJAej5laOGicaGicbZB3j0x2nVBhvTBNmScIaGicaGihDOzxjLoIb3AgvYzsWkicaGicaGC2vSzwn0oIbZzwXLy3qkicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGig9WDgLVBNmUCgfNzsa9ihbHz2u7cIaGicaGig9WDgLVBNmUCgvYugfNzsa9ihbLCLbHz2u7cIaGicb9igvSC2uGEWOGicaGicbVChrPB25ZlMXPBwL0id0GBgLTAxq7cIaGicb9cGOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','y3jLyxrLq29TCg9ZAxrL','DxbKyxrLq29TCg9ZAxrL','iJSkicaGih0kicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIHGrxjYB3iGBg9HzgLUzYbpCMfJBguGDgvTCgXHDguG','jZSkicaGignVBNn0ihbSDwDPBLbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcaNlI4NlcaNCgX1z2LUCYCSigaKE21VzhvSzu5HBwv9lxbSDwDPBI5QC2aPoWOGicaGBgv0ihbSDwDPBIa9ig51BgW7cIaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicb0CNKGEWOGicaGicaGihbSDwDPBIa9ihjLCxvPCMuOCgX1z2LUugf0AcK7cIaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGihbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqOyxbWlcbJB25MAwCPoWOGicaGicaGih0kicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFsbJyxrJAcaOCgX1z2LUrxjYB3iPihSkicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9SB2fKx2vYCM9YjYWGzxjYB3i6ihbSDwDPBKvYCM9YlM1LC3nHz2uGFsWGyezHAwXLzcb0BYbSB2fKihbSDwDPBJOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFqOGicaGFqOkicaGic8VieHLywX0AcbJAgvJAYbLBMrWB2LUDaOGicaGyxbWlMDLDcGNl2fWAs8','uLz0zvq','ksb8FcaWktS','jYWGDMfSDwu6igrHDgeU','z09XqMW','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGBMv4DcGPoWP9ktSk','oMaSigvYCI5TzxnZywDLktSkFsK7cG','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLicyMihjLC3vSDc5KyxrHicyMihjLC3vSDc5KyxrHlMXLBMD0Aca+idaPihSkicaGicaGy29UC3qGCMvJB3jKid0GCMvZDwX0lMrHDgfBmf07cIaGicaGigLMicHYzwnVCMrBCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1UxsaHpt0GDw5KzwzPBMvKicyMcIaGicaGicaGicbtDhjPBMCOCMvJB3jKw3jLCs5FCMvXDwvZDfnJB3bLlMnVBhvTBL0Pice9psbtDhjPBMCOCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicbTzxnZywDLoIaN','zgf0zq','cIaGyc50CMLTkcK7cGOGic8VienVBNzLCNqGug9ZDgDYzvnrtcbZEw50yxGGDg8Gt3jHy2XLigLMig5LzwrLzaOGigjHC2vrDwvYEsa9ihrOAxmUy29UDMvYDfrVt3jHy2XLu1fmkgjHC2vrDwvYEsK7cGOGihjLDhvYBIbIyxnLuxvLCNK7cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrszwfKuxvLCNKGDw50DwSGzw5KCg9PBNqGl3jLywqkicOGuhjPB3jPDgfZoIb2Awv3tMfTzsddOUkaOokaMsb2Awv3uxvLCNKGW6lIGkdIGjKGDgfIBgvoyw1LicHtruXfq1qGkIbguK9nihjLywrtB3vYy2uPcIaQlWPNzxrszwfKuxvLCNKOB3b0Aw9UCYa9ihT9ksb7cIaGAwyGkhrOAxmUDMLLD05HBwuGjIyGDgHPCY52Awv3tMfTzsaHpt0GDgHPCY50ywjSzsKGEWOGicaGCMv0DxjUicDtruXfq1qGkIbguK9nicCGkYb0AgLZlNzPzxDoyw1LoWOGih0k','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','uwjTz3q','Dg9ju09tDhjPBMC','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','mZjYvwPrAhu','zMLLBgrmywjLBhm','DgLTzxn0yw1W','igXPC3q6jYWGzxjYB3iPoWOGicaGy29UC3qGC3rHDhvZq29Kzsa9igvYCM9YlNn0yxr1C0nVzguGFhWGntaWoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOC3rHDhvZq29KzsKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGC3rHDhvZq29Kzsa9pt0GndaWid8Gj0jHzcbszxf1zxn0jYa6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIbZDgf0DxndB2rLid09psa0mdaGpYbLCNjVCI5TzxnZywDLidOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','iICScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGDMfYigrHDgeGpsbYzxeUyM9KEs4','CMvHza','ksbmsuTfifvquevskdOXkq','iI5ZDgfYDhnxAxrOkcDMAwXLoICPksb7cIaGicaGignVBNn0ihjLBgf0AxzLugf0Aca9ici','mta2mtG1oeTlAMfrtG','lY8Gue9tvcaVyxbPlW','CMvXDwLYzwrgAwvSzhm','lNjLzhvJzsHMDw5JDgLVBIHZDw0SigL0zw0PihSGCMv0DxjUihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPoYb9lcaWktSkicaGih0kicaGia','nZe3mJG1suPrthvz','l2zPCNn0ic0GtwvUzgfWyxrRyw4Gzgf0ysbIzxjKyxnHCMTHBIbRCML0zxjPyqPYB3v0zxiUCg9ZDcGNl2zPCNn0jYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8Vie5VCM1HBgL6ztOGyxjYyxKGmsbLBgvTzw4GW6lIGkdIGjKGB2jQzwn0icHIywnRD2fYzcbJB21WyxrPyMXLkqOGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPicyMihjLCs5IB2r5lNDOzxjLlMXLBMD0Aca9pt0GmsKGEWOGicaGicbYzxeUyM9KEs53AgvYzsa9ihjLCs5IB2r5lNDOzxjLwZbDoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLignSyxvZzsddOUkcRokaNsbOyxj1CYbVyMPLy3qGDhvUz2DHBcb7A2v5lcb2ywX1zx0kicaGigLMicGHCMvXlMjVzhKUD2HLCMuGFhWGDhLWzw9MihjLCs5IB2r5lNDOzxjLice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj1bYB3bLCNr5ihDOzxjLigLZihjLCxvPCMvKigfZihTRzxKSihzHBhvLFsbVyMPLy3qNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6ici','oWOGicaGy29UC3qGBw9KzwXjBMzVid0GyxDHAxqG','sNLiAuu','jZOGEWOGicaGicaGihr5Cgu6icC','cIaGicaGih07cIaGicaGigLMicHPDgvTlG','BgvUz3rO','psCGkYbKyxrHlG','oWOkicaGicaGDMfYihzHBgLKyxrPB24GpsbHD2fPDca','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','zM9YzwLNBKTLEq','icaGicaGjW','id0GCMvXDwLYzsGNlI4VlI4VBw9KzwXZlW','oWOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','lY8Gt3jHy2XLigvUzhbVAw50igLUzM9YBwf0Aw9UimoI4OkS4OcDihnLBgyTzg9JDw1LBNrPBMCGqvbjcNjVDxrLCI5NzxqOjY9PBMzVjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGignVBNn0igfJDgLVBNmGpsa','zM9YBxvSyq','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqNlaOGicaGicbKyxrHoIbYzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NDxbKyxrLigrHDgeG','rMTxA3C','Aw5JBhvKzxm','y29UC3qGzgv0ywLSu3fSid0Gya','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DwjXDwvYEqOGicaGicaGid8Gj1nftevdvcaQiezst00GkfnftevdvcbIyxnLx3f1zxj5lIOSifjpv05vtsbYBNvTiezst00GkfnftevdvcaQiezst00GkcCGkYbIyxnLuxvLCNKGkYaNksbIyxnLx3f1zxj5icCGkYaOD2HLCMvdBgf1C2vtCwWGFhWGjYCPicSGB3jKzxjdBgf1C2uGkYaNksbIyxnLx3f1zxj5ifDirvjfifjpv05vtsa8psaNicSGzw5KuM93icSGjYKGv0HfuKuGCM51Bsa+icCGkYbVzMzZzxqkicaGicaGica6icDtruXfq1qGkIbguK9nicHtruXfq1qGys4Qlcbst1Dovu0GCM51BsbguK9nicGNicSGyMfZzvf1zxj5icSGjYaNicSGkhDOzxjLq2XHDxnLu3fSihX8icCNksaRig9YzgvYq2XHDxnLicSGjYKGysbxsevsrsbst1Dovu0Gpd0GjYaRigvUzfjVDYaRicCPifDirvjfihjUDw0GpIaNicSGB2zMC2v0oWOGicaGFsbLBhnLihSkicaGicaGlY8GtM9UlxbHz2LUyxnPigrLBMDHBIbZywzLDhKGBgLTAxqkicaGicaGCxvLCNKGpsbUzwvKC1n1yNf1zxj5cIaGicaGicaGpYaNu0vmrunuicOGrLjptsaOu0vmrunuigjHC2vFCxvLCNKUkIWGuK9xtLvnihjUDw0GrLjptsaOu0vmrunuicOGrLjptsaOjYaRigjHC2vrDwvYEsaRicCPigjHC2vFCxvLCNKGjYaRicH3AgvYzunSyxvZzvnXBcb8FcaNjYKGkYbVCMrLCKnSyxvZzsaRicCPigjHC2vFCxvLCNKGv0HfuKuGuK9xtLvnidW9icCGkYbSAw1PDcaRicCPjWOGicaGicaGidOGj1nftevdvcaQiezst00GkfnftevdvcbHlIOSifjpv05vtsbYBNvTiezst00GkcCGkYbIyxnLuxvLCNKGkYaNicCGkYaOD2HLCMvdBgf1C2vtCwWGFhWGjYCPicSGB3jKzxjdBgf1C2uGkYaNksbHifDirvjfifjpv05vtsa8psaNicSGBgLTAxqGkYaNksC7cIaGicb9cGOGicaGy29UC29Szs5SB2COj0XPC3qGu1fmiff1zxj5oICSihf1zxj5ktSkicaGignVBNnVBguUBg9NkcDmAxn0iff1zxj5ifbHCMfTzxrLCNm6jYWGD2HLCMvqyxjHBxmPoWOGicaGy29UC3qGCMf3rgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsWGD2HLCMvqyxjHBxmUBgvUz3rOid4Gmca/ihDOzxjLugfYyw1ZidOGDw5KzwzPBMvKktSkcIaGicbJB25ZDcbKyxrHid0GCMf3rgf0ysa/ihjHD0rHDgeUBwfWkcHYB3CPid0+ihSkicaGicaGy29UC3qGEYbstLvnlcbYBNvTlcaUlI5JBgvHBLjVDYb9id0GCM93oWOGicaGicbYzxr1CM4GDgHPCY5MB3jTyxrszxnWB25ZzurHDgeOy2XLyw5sB3CPoWOGicaGFsKGoIbBxtSkcIaGicbJB25ZDcbYzxn1BhqGpsb7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGigrHDge6igrHDgekicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGignVBNn0ihrVDgfSugfNzxmGpsbnyxrOlMnLAwWODg90ywXszwnVCMrZic8GCgvYugfNzsK7cIaGicaGihjLC3vSDc5WywDPBMf0Aw9Uid0GEWOGicaGicaGign1CNjLBNrFCgfNztOGCgfNzsWkicaGicaGicbWzxjFCgfNztOGCgvYugfNzsWkicaGicaGicb0B3rHBf9YzwnVCMrZoIb0B3rHBfjLy29YzhmScIaGicaGicaGDg90ywXFCgfNzxm6ihrVDgfSugfNzxmScIaGicaGicaGAgfZx25LEhq6ihbHz2uGpcb0B3rHBfbHz2vZlaOGicaGicaGigHHC19WCMv2Aw91CZOGCgfNzsa+idekicaGicaGFtSkicaGih0kcIaGicaVlYbdywnOzsbYzxn1BhqkicaGigf3ywL0ihrOAxmUC2v0q2fJAgvKtgLZDcHVChrPB25ZlcbYzxn1BhqPoWOGicaGy29UC29Szs5SB2COyfTdywnOzv0Gu0vuigzVCIbSAxn0ic0GjhTJywnOzuLUzM99ycK7cGOGicaGCMv0DxjUihjLC3vSDdSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4Gz2v0tgLZDdONlcbLCNjVCIK7cIaGicb0AhjVDYbLCNjVCJSkicb9cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrmB29RDxbeyxrHihvUDhvRie9YywnSzsaOzhLUyw1PyYbZzwfYy2GPcIaQlWPHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGihrYEsb7cIaGicbJB25ZDcbXDwvYEsa9igbtruXfq1qGkIbguK9nicHtruXfq1qG','z3H2zKu','cGOGicaGzM9YicHJB25ZDcbPDgvTig9MigrHDgfBzgv0ywLSs2v5xsb8FcbBxsKGEWOGicaGicbPDgvTw2zRxsa9ig1HC3rLCLbRvMfSDwu7cGOGicaGicaVlYbbDxrVlwDLBMvYyxrLifvvsuqGDw50DwSGzgv0ywLSifbligjPBgeGy2XPzw50ihrPzgfRig1LBNL1ChbSEs4kicaGicaGlY8Gt3jHy2XLigjLBhvTig1LBwfRywKGuKvuvvjosu5hieLove8GzgKGz2vUzxjHDg9YlcbZzwHPBMDNysbNzw5LCMf0B3ikicaGicaGlY8GCgvYBhuGBwvUz2v0ywH1AsbUAwXHAsbqsYbKAsbTDwTHigfNyxiGu0vmrunulwjHy2SGzgfWyxqGBwuTCMv0CMLLDMukicaGicaGlY8GCM93lIbdB2nVAYb1BNr1AYbRB2XVBsbwqvjdsefsmIb5yw5Nifbllw55ysbKAwLZAsb0CMLNz2vYl0rfrKfvtfqkicaGicaGlY8GvvvjrdSGDw50DwSGsurftLrjvfKVu0vrvuvoq0uGAw50zwDLCIWGy2XPzw50igHHCNvZig1LBMDPCMLTifbllGOGicaGicbPzIaOAxrLBvTKzxrHAwXqA10Gpt09ihvUzgvMAw5Lzcb8FcbPDgvTw2rLDgfPBfbRxsa9pt0GBNvSBcKGEWOGicaGicaGigL0zw1Bzgv0ywLSugTDid0GCMvXDwLYzsGNDxvPzcCPlNy3kcK7cIaGicaGih0k','lY8Gr0vuic9HCgKV','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGih0','laOGigv4Cg9YDff1zxj5oIa','C2XPy2u','jYWkicaGig1VzhvSzu5HBwu6icC','cIOkkIbpCMfJBguTB3b0Aw1PEMvKigvUzhbVAw50CYb1BNr1AYa','l2fNz3jLz2f0zsaTie9YywnSzsbbz2DYzwDHDguGkgnVDw50lcbZDw0Sigf2zYWGBwLUlcbTyxGPcNjVDxrLCI5WB3n0kcCVywDNCMvNyxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGignVBNn0igfNz3jLz2f0zunVBMzPzYa9ia','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','y2HHCKf0','igrHDgf0ywjSzxm6jYWGzxjYB3iPoWOGicaGy29UC3qGC3rHDhvZq29Kzsa9igvYCM9YlNn0yxr1C0nVzguGFhWGntaWoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOC3rHDhvZq29KzsKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGC3rHDhvZq29Kzsa9pt0GndaWid8Gj0jHzcbszxf1zxn0jYa6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIbZDgf0DxndB2rLid09psa0mdaGpYbLCNjVCI5TzxnZywDLidOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','lY8GvgfIzwWGDgfUCgeGyxvKAxqGy29SDw1UCZOGzgLZywjSzsbPBMPLy3rPB24GAgvSCgvYcG','jYWkicaGihrHyMXLtMfTztOGjW','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','l2HLywX0AcCSicHYzxeSihjLCYKGpt4GEWOGicaGicbJB25ZDcbOzwfSDgHjBMzVid0GEWOGicaGicaGihn0yxr1CZOGj29RjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOks5YzxbSywnLkcDujYWGjYaNks5YzxbSywnLkc9ClLXKEZn9wIqVlcaNjYKScIaGicaGicaGC2vYDMLJztOGjW','q29KzwDLBIbPBNzHCMLHBNqGDMLVBgf0Aw9UoIa','cIaGicaGignVBNn0igrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGzfzHBhvLCYa9ifTDoWOGicaGicbJB25ZDcbKugXHy2vOB2XKzxjZid0Gw107cIaGicaGigXLDcbKswr4id0GmtSkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGica','psr7CMvXlMjVzhLBjW','ywr2yw5JzwrrDwvYAwvZ','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','DgHPCY5HDwrPDenVBhvTBNmGpsa','jYWkicbMAwvSze5HBwu6ia','zMLLBgrwywXPzgf0Aw9U','l3jLywqTy29TCg9ZAxrLoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7ihn1y2nLC3m6igzHBhnLlcbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCSig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCSihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPih0PoWOGicaGFqOkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0Esb3AgvYzsbPCYbYzxf1AxjLzcCScIaGicaGicaGzxHHBxbSztOGEYaID2HLCMuIoIbBEYaIA2v5iJOGiMzPzwXKx25HBwuIlcaIDMfSDwuIoIaIzMLLBgrFDMfSDwuIih1Dih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkcfbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIaHCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGig1LC3nHz2u6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGzxHHBxbSztOGEYaID2HLCMuIoIbBEYaIA2v5iJOGiG','ksb8FcaWoWOGicaGicaGihzHCIbWCMLJzsa9ie51BwjLCIHPDgvTlG','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUBwvZC2fNzsa9pt0Gj0rHDgeGDgLKywSGzgL0zw11A2fUjYb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzM91BMqNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGig1LC3nHz2u6icC','zgv0ywLSq29UzMLN','ktSkicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbvuerbveuGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','cIaGicaVlYbezwzHDwX0ihnJB3bLigzPBhrLCGOGicaGD2HLCMvdB25KAxrPB25ZlNb1C2GOjW','vg9yq00','cIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','zMLSDgvY','mtyWmZm4nNjHA3HkAa','cIaGicb2yxiGAgvHzgvYq2fSyYa9ia','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','Cg9W','cGOGihjLDhvYBIb0zw1WBgf0zxm7cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrmAxn0uxvLCNKGDw50DwSGt3jHy2XLihn5BNrHEaOGkI8kz2v0tgLZDff1zxj5kg9WDgLVBNmGpsb7FsKGEWOGigXLDcbIyxnLuxvLCNKGpsbGcIaGica','id0GoJeGt1jerviGqLKGBgLUzv9UDw1IzxiNoW','igrHDgeGC3vJy2vZC2z1BgX5igfKzgvKjYWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUyw1IywHRyw4Gzgf0ysa','Dw5PDf9WCMLJzq','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','zgvSzxrL','icHpCMfJBguGrgf0ywjHC2uPcIaQiebWyxjHBsb7t2jQzwn0FsbJB25MAwCGlsblB25MAwD1CMfZAsb1BNr1AYbTzw5QywXHBMTHBIbTB2r1BaOGkIbaCgfYyw0GE251BwjLCN0Gy29UzMLNlNbVCNqGlsbqB3j0ihvUDhvRihnLCNzLCGOGkIbaCgfYyw0GE3n0CMLUz30Gy29UzMLNlMTLEsaTiefqssblzxKGkg9WC2LVBMfSkqOGkIbaCMv0DxjUCYb7uhjVBwLZztX2B2LKpN0GuhjVBwLZzsb5yw5NihrPzgfRihbLCM5HAcbYzxnVBhzLigfNyxiGC2vYDMvYihrLDgfWigjLCMPHBgfUcIaQlWPHC3LUyYbMDw5JDgLVBIbLEgvJDxrLkgnVBMzPzYKGEWOGihjLDhvYBIbUzxCGuhjVBwLZzsGOCMvZB2X2zsKGpt4GEWOGicaGy29UC3qGyxbWid0GzxHWCMvZCYGPoWOGicaGy29UC3qGCg9YDca9ignVBMzPzY5WB3j0ihX8idmWmda7cIaGicbJB25ZDcbZzxj2zxjbzgrYzxnZid0Gy29UzMLNlNnLCNzLCKfKzhjLC3mGFhWGjZaUmc4WlJaNoWOGicaGy29UC3qGBw9KDwXLtMfTzunHCgL0ywXPEMvKid0GjW','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKimoI4OkS4OcDig5Vihf0EsbMAwvSzcbJB25MAwD1CMvK','ywn0Aw9U','iL0GpsbUDwXSoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicb0zw1WBgf0zxnBiG','AgvHzgvYq2fSy3vSyxrPB25Z','cIaGlY8Grgf0zvrPBwuGzMLLBgrZignVBMzPz3vYyxrPB24GzgfYAsbMAwvSzfzHBgLKyxrPB24kicb0AgLZlMrHDgvuAw1LrMLLBgrZid0G','ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','Aw1WB3j0q29UzMLN','jYWkicaGicaGicbKzxrHAwXuywjSztOGjW','lMDLDfn0yxrPy0XVB2T1CerHDgeOC2vSzwn0zwruywCPoWOGicaGFqOkicaGignVBNn0igXVB2T1CfrPBwuGpsbeyxrLlM5VDYGPic0GC3rHCNruAw1LoWOGicaGy29UC29Szs5SB2COyfTpuKeTteTqxsaKE29YyvjLCxvLC3rjzh0GzM91BMqGjhTSAxn0lMXLBMD0Ah0GCMvZDwX0CYbPBIaKE2XVB2T1CfrPBwv9BxnGktSkcIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbJB3vUDdOGBgLZDc5Szw5NDgGScIaGicaGigrHDge6igXPC3qScIaGicaGif9VCMfJBgu6ihSGCMvXDwvZDeLKoIbVCMfszxf1zxn0swqSihf1zxj5vgLTztOGBg9VA3vWvgLTzsWGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKGFqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOyfTpuKeTteTqxsbfCNjVCIaKE29YyvjLCxvLC3rjzh06ycWGzxjYB3iPoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigXVB2TPBMCGDxaG','id0Gke51BwjLCIHPDgvTlG','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','cIaGDhj5ihSkicaGigLMicH0ExbLB2yGiG','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','DgfIBgvoyw1L','l2fKANvZDcaTie9YywnSzsbbzgP1C3qGkgf0B21PyYbPBMnYzw1LBNqVzgvJCMvTzw50kqPYB3v0zxiUCg9ZDcGNl2fKANvZDcCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbWCMLTyxj5igTLEqOGicaGy29UC3qGChjPBwfYEuTLEsa9icC','cIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','tw9KzwWGzxH0zw5KCYbcyxnLtw9KzwWGEWOVkIOkicOGq29UC3rYDwn0B3ikicOVcMnVBNn0CNvJDg9YkcKGEWOGignVBNn0ihzHBgLKrMLLBgrZid0GwWOGicaG','cIaGicb9ksK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUie9YywnSzsbNzxrmB29RDxbeyxrHrhLUyw1PyZONlcbLCNjVCIK7cIaGicb0AhjVDYbLCNjVCJSkicb9cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrtDgf0AwnmB29RDxbeyxrHihvUDhvRie9YywnSzqOGkI8kyxn5BMmGz2v0u3rHDgLJtg9VA3vWrgf0ysHZzwXLy3rLzfrHzYKGEWOGihrYEsb7cIaGicaVlYbdAgvJAYbJywnOzsbMAxjZDcaTignHy2HLihrHBNbHihnLBgvJDgvKvgfNigTHCMvUysbKyxrHihnHBwekicaGignVBNn0ignHy2HLt3b0Aw9UCYa9ihSGDhLWztOGj3n0yxrPyYCGFtSkicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj3n0yxrPyYCPoWOGicaGAwyGkgnHy2HLzfjLC3vSDcKGEWOGicaGicaVlYbbChbSEsbZzwXLy3rLzfrHzYb0BYbJywnOzwqGCMvZDwX0cIaGicaGihjLDhvYBIbJywnOzwrszxn1BhqUBwfWkgL0zw0Gpt4GEWOGicaGicaGigLMicHPDgvTlMLKid09psbZzwXLy3rLzfrHzYKGEWOGicaGicaGicaGCMv0DxjUihSGlI4UAxrLBsWGC2vSzwn0zwq6icD0CNvLjYb9oWOGicaGicaGih0kicaGicaGicbYzxr1CM4GEYbPzdOGAxrLBs5PzcWGDgv4DdOGAxrLBs50zxH0ih07cIaGicaGih0PoWOGicaGFqOkicaGignVBNn0ihf1zxj5id0GyfnftevdvcaQiezst00Gkfnftevdvca','DhjPBq','l2nYzwf0zsaTie9YywnSzsbjBNnLCNqkCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGzgf0yqOGicaGAwyGkhr5CgvVzIa','Ahnzu1y','Cxr5rMLLBgq','y29UC3rYywLUDhm','laOGigLTCg9YDenVBMzPzZOG','qu5eicG','jZSkicaGignVBNn0igrLDgfPBfbRid0GjW','jZSkicaGigXLDcb0zxH0rMLLBgqGpsaN','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9icr7D2HLCMvdBgf1C2v9ie9srevsiejzia','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDJB25ZDhjHAw50ihzPB2XHDgLVBICPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj2jLBg93ig1PBMLTDw0NksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNq29UC3rYywLUDcb2Aw9SyxrPB24NlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbJB25MAwD1CMvKigzVCIbHzgP1C3rTzw50jYKGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNAxmGCMvXDwLYzwqGzM9YigfKANvZDcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGyMuGysbUB24TEMvYBYbUDw1IzxiNksb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGBM90igjLigvTChr5jYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uGpt09icDeyxrHihrPzgfRigrPDgvTDwTHBICGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNBM90igzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicbTzxnZywDLoIaN','CKPxDwe','zxHJBhvKzuzYB21jBxbVCNq','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9','lYr7zw5KCg9PBNroyw1LFwa7cIaGicaGicaGicbHChaUDxnLkgvUzhbVAw50uhjLzML4lcbTB2r1BgvsB3v0zxmPoWOGicaGicaGicaGBg9Nrw5KCg9PBNrszwDPC3rLCMvKkgvUzhbVAw50tMfTzsWGzw5KCg9PBNrqCMvMAxGPoWOkicaGicaGicaGic8VifjLz2LZDgvYigv4Cg9YDcbYB3v0zxmGDMLHignLBNrYywXPEMvKigHHBMrSzxikicaGicaGicaGihrYEsb7cIaGicaGicaGicaGignVBNn0igv4Cg9YDenVBMzPzYa9igv4DhjHy3rfEhbVCNrdB25MAwDgCM9Trw5KCg9PBNqOzw5KCg9PBNrqyxrOktSkicaGicaGicaGicaGAwyGkgv4Cg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGiev4Cg9YDeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','cI8QkGOQia','x2LK','mta4rxvHv3vf','igrHDgeGywrQDxn0zwqGC3vJy2vZC2z1BgX5oIa','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','BwfW','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8GvvbeqvrfoIbMB3jJzsbZy29WzsbJB2X1Bw4GDMfSDwuGkg93BMvYC2HPCcb2zxjPzMLLzcbPBIaVDxbKyxrLigHHBMrSzxiPcIaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGCMvXlMjVzhLBjW','ihX8igL0zw0U','DgL0Bgu','y29SDw1UrM9YBwf0CW','sKPyChq','y2H1BMTtAxPL','cI8VimoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRcbszxf1zxn0ifnJB3bLie1PzgrSzxDHCMuGkeXHEwvYideGuKXtksddOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkScI8Vier5BMfTAwmGCgvYlxjLCxvLC3qGzMLSDgvYAw5Nigj5icC','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGzxzLBNrdB250zxH0','ChjPy2vgAwvSza','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','zgf0yxrHyMXLCW','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGDxnLCL9PzdOGCMvXlMHLywrLCNnBj3vZzxiTAwqNxsb8FcbYzxeUAgvHzgvYC1SNEc11C2vYlwLKj10GFhWGj3n5C3rLBsCScIaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30kicaGicaGicb9cIaGicaGih07cIaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','jYK7cG','cIaG','laOGicaGz2vUzxjHDgvKoIaN','A29Kzq','zMLLBgrZ','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9NkcC','l2nYzwf0zs1JB21WB3nPDguGlsbpCMfJBguGq29TCg9ZAxrLignYzwf0zsaOBwfZDgvYlwrLDgfPBcKkCM91DgvYlNbVC3qOjY9JCMvHDguTy29TCg9ZAxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGignVBNnVBguUBg9NkcDszxf1zxn0igjVzhKG','Bw9KDwXLlMv4Cg9YDhmGpsbYB3v0zxi7','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbpyMPLy3qUyxnZAwDUkgrHDgeSihzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysK7cIaGicb9cGOGicaGAwyGkgrHDgeU','A2v5CW','DMLLD05HBwu','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqGkhDPDgGGzgv0ywLSigL0zw1ZksCScIaGicaGigrHDge6ihjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsb1CgrHDguG','jYWkicaGicaGicbWCMLTyxj5s2v5oIb0AgLZlNbYAw1HCNLlzxKScIaGicaGicaGlI4Ukgv2zw50q29UDgv4Dc5HzgrPDgLVBMfSq29UDgv4Dcb8Fcb7FsKkicaGicaGFsK7cIaGicaGihzHCIbFywz0zxjszxn1BhqGpsbHD2fPDcbFy2uYlMv4zwn1DgvpBKfMDgvYq29TCg9ZAxrLkcDPBNnLCNqNlcbFywz0zxjdDhGPoWOGicaGicbPzIaOiv9HzNrLCLjLC3vSDc5ZDwnJzxnZksb7cIaGicaGicaGyxDHAxqGy29UBMvJDgLVBI5YB2XSyMfJAYGPoWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNB25bzNrLCKnVBxbVC2L0zuLUC2vYDcbMywLSzwq6icCGkYbFywz0zxjszxn1BhqUzxjYB3iPoWOGicaGicb9cIaGicb9cGOGicaGyxDHAxqGy29UBMvJDgLVBI5JB21TAxqOktSkicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGlY8Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOihDYAxrLig9WzxjHDgLVBIbIzxjOyxnPBaOGicaGyxDHAxqGDgHPCY5PBNzHBgLKyxrLq2fJAguOktSkcIaGicbYzxr1CM4GEWOGicaGicaUlI5PBNnLCNrLzeHLywrLCIWkicaGicaGw2rLDgfPBeTLEv06igLUC2vYDgvKsxrLBxmkicaGih07cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGihrYEsb7igf3ywL0ignVBM5Ly3rPB24UCM9SBgjHy2SOktSGFsbJyxrJAcaOzsKGEYaVkIbPz25VCMuGkI8GFqOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4Gy3jLyxrLq29TCg9ZAxrLoICSigvYCM9YktSkicaGihrOCM93igvYCM9YoWOGih0GzMLUywXSEsb7cIaGicb0CNKGEYbHD2fPDcbJB25Uzwn0Aw9UlMnSB3nLkcK7ih0Gy2f0y2GGkguPihSGlYOGAwDUB3jLicOVih0kicb9cN0k','v0HfuKuG','y3jLyxrL','zgvMyxvSDfnJB3bL','id0Gzgf0ys4','lY8Gq3vZDg9Tigf1zgL0ignVBhvTBNmGBwfWCgLUzYbKyxjPihbHEwXVywqk','y3jLyxrLzef0','y29UC3qGqMfZzu1VzgvSid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9TB2rLBhmVyMfZzs1TB2rLBc1VCMfJBguNktSky29UC3qGzgiGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl2rIlw9YywnSzsCPoWPJB25ZDcbVCMfJBgvKyIa9ihjLCxvPCMuOj29YywnSzwrIjYK7cMnVBNn0igzZid0GCMvXDwLYzsGNzNmNktSky29UC3qGCgf0Aca9ihjLCxvPCMuOj3bHDgGNktSkcI8QkGOQia','cIOGvgfIBgu6ia','ihn0AwXSignVBNrHAw5ZicjMAwXLoIiGCMvMzxjLBMnLicG','B2jQzwn0','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','lMDLDe1VzgvSsw5MBYHHy3rPB25ZktSkcIaGicbYzxmUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGigvUzhbVAw50oIaN','zxHWB3j0','jZSkicb0AgLZlNjLywrtB3vYy2uGpsaN','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUzxjYB3joDw0Gpt09idePihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGDxbKyxrPBMCG','jYWkicaGicaGicb1ChrPBwu6ihbYB2nLC3mUDxb0Aw1LkcKScIaGicaGicaGBwvTB3j5oIbWCM9JzxnZlM1LBw9YEvvZywDLkcKScIaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicbWBgf0zM9YBtOGChjVy2vZCY5WBgf0zM9YBsWkicaGicaGicaGig5VzgvwzxjZAw9UoIbWCM9JzxnZlNzLCNnPB24ScIaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGFqOGicaGicb9oWOkicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicb9ktSkcIaGicaVlYbnDwf0ihnLBxvHihj1DguGzgfYAsbMB2XKzxiG','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGignVBNnVBguUzxjYB3iOj1TgquXmqKfds10Gq0HbtKDflvnuqvrvuYbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','BwfZDgvYrgv0ywLS'];a0_0x9bb2=function(){return _0x5685ec;};return a0_0x9bb2();}function buildDefaultScopeSQL(_0x3d2653,_0x11b58b=''){const _0x59f77e=a0_0x2ced,_0x31e3c7={'RVteT':function(_0x354583,_0x50c26d){return _0x354583!==_0x50c26d;},'GsrGL':_0x59f77e(0x25e),'EMgmp':function(_0x4a139a,_0x3a091f){return _0x4a139a===_0x3a091f;},'ekYkC':'string','lQiWw':'\x20AND\x20'};if(!_0x3d2653||_0x31e3c7[_0x59f77e(0x1b8)](typeof _0x3d2653,_0x31e3c7[_0x59f77e(0x2d1)]))return'';const _0x523e7a=[];for(const [_0x4d6a21,_0x3263ab]of Object[_0x59f77e(0x1ac)](_0x3d2653)){if(_0x31e3c7['EMgmp'](typeof _0x3263ab,_0x59f77e(0x2c8)))_0x523e7a[_0x59f77e(0x2d2)](''+_0x11b58b+_0x4d6a21+'\x20=\x20\x27'+_0x3263ab+'\x27');else{if(typeof _0x3263ab===_0x31e3c7[_0x59f77e(0x1a3)])_0x523e7a[_0x59f77e(0x2d2)](''+_0x11b58b+_0x4d6a21+'\x20=\x20\x27'+_0x3263ab[_0x59f77e(0x297)](/'/g,'\x27\x27')+'\x27');else typeof _0x3263ab==='number'&&_0x523e7a['push'](''+_0x11b58b+_0x4d6a21+'\x20=\x20'+_0x3263ab);}}return _0x523e7a['join'](_0x31e3c7['lQiWw']);}function buildRequestScopeMiddleware(_0x222062,_0x128d3c){const _0x3138a3=a0_0x2ced,_0xe68a3d={'EcqJm':function(_0x36e7ff,_0x2d0417){return _0x36e7ff||_0x2d0417;}};if(!_0x222062[_0x3138a3(0x289)])return'';const {column:_0x59cace,source:_0x40660c,bypassRoles:_0x43066f}=_0x222062['requestScope'],_0x39c39d=JSON['stringify'](_0x43066f||[]),_0x49be3f=_0xe68a3d['EcqJm'](_0x128d3c,'')['replace'](/-/g,'_');return _0x3138a3(0x241)+_0x59cace+'\x27\x20from\x20'+_0x40660c+'\x0a//\x20Generated\x20from\x20requestScope\x20configuration\x20in\x20payload\x20JSON\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20!==\x20\x27POST\x27)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20no\x20auth\x20context\x20(endpoint\x20without\x20auth\x20middleware)\x0a\x20\x20if\x20(!req.user)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20user\x20has\x20bypass\x20role\x0a\x20\x20const\x20userRoles\x20=\x20req.user.roles\x20||\x20[];\x0a\x20\x20const\x20bypassRoles\x20=\x20'+_0x39c39d+';\x0a\x20\x20if\x20(bypassRoles.length\x20>\x200\x20&&\x20bypassRoles.some(role\x20=>\x20userRoles.includes(role)))\x20{\x0a\x20\x20\x20\x20return\x20next();\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Read\x20scope\x20value\x20from\x20user\x20context\x0a\x20\x20const\x20scopeValue\x20=\x20'+_0x40660c+';\x0a\x20\x20if\x20(scopeValue\x20===\x20undefined\x20||\x20scopeValue\x20===\x20null)\x20{\x0a\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27Request\x20scope\x20value\x20not\x20available\x20in\x20user\x20context\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Expose\x20scope\x20info\x20for\x20route\x20handlers\x20(ownership\x20verification\x20in\x20/first,\x20/update,\x20/update-composite)\x0a\x20\x20req._requestScope\x20=\x20{\x20column:\x20\x27'+_0x59cace+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x59cace+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20//\x20READ\x20operations:\x20inject\x20scope\x20into\x20req.body.where\x0a\x20\x20if\x20([\x27datatables\x27,\x20\x27read\x27,\x20\x27lookup\x27,\x20\x27read-composite\x27].includes(endpoint))\x20{\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20[scopeCondition];\x0a\x20\x20\x20\x20}\x20else\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20}\x20else\x20if\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20originalLogic\x20=\x20req.body.where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(originalLogic\x20===\x20\x27AND\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.conditions.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logic:\x20\x27AND\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20scopeCondition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20logic:\x20originalLogic,\x20conditions:\x20req.body.where.conditions\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20DELETE:\x20prepend\x20scope\x20condition\x20to\x20where\x20array\x0a\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27)\x20{\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE\x20/\x20ADD:\x20force\x20scope\x20column\x20value\x0a\x20\x20if\x20(endpoint\x20===\x20\x27add\x27\x20||\x20endpoint\x20===\x20\x27create\x27)\x20{\x0a\x20\x20\x20\x20req.body[\x27'+_0x59cace+_0x3138a3(0x23b)+_0x59cace+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE-COMPOSITE\x20/\x20UPDATE-COMPOSITE:\x20force\x20scope\x20column\x20inside\x20master\x20body.\x0a\x20\x20if\x20(endpoint\x20===\x20\x27create-composite\x27\x20||\x20endpoint\x20===\x20\x27update-composite\x27)\x20{\x0a\x20\x20\x20\x20const\x20masterBody\x20=\x20req.body[\x27'+_0x49be3f+_0x3138a3(0x20f)+_0x59cace+_0x3138a3(0x1bc);}function createOracleModelTemplate(_0x1f25d2,_0x2ef109,_0x5b3a13){const _0x422f95=a0_0x2ced,_0x443d1b={'ZjpIb':_0x422f95(0x1bf),'kKoro':_0x422f95(0x2a2),'JJXpt':function(_0x858cbc,_0x1b3495){return _0x858cbc===_0x1b3495;},'TuOOM':_0x422f95(0x2b4),'gOqBl':'generated','vDfwk':function(_0x1f2d6f,_0x1d4dc7){return _0x1f2d6f+_0x1d4dc7;},'gxvfE':function(_0x323eb2,_0x52d1f7){return _0x323eb2+_0x52d1f7;},'leSNG':_0x422f95(0x212),'HGDVK':function(_0x254cab,_0x52bd1b){return _0x254cab(_0x52bd1b);},'njlhU':function(_0x4957fe,_0x61b673){return _0x4957fe(_0x61b673);},'tWcEF':function(_0x17df99,_0x336245){return _0x17df99(_0x336245);},'rJWua':_0x422f95(0x248),'mCxwL':'//\x20No\x20advanced\x20queries\x20defined','naabU':'${this.getTableSource(\x27read\x27)}'};_0x443d1b['HGDVK'](assertNoFileReferenceLeftover,_0x5b3a13);const _0x3e0708=_0x5b3a13['fieldName'][_0x422f95(0x23a)](_0x2b91af=>'\x27'+_0x2b91af+'\x27')[_0x422f95(0x282)](',\x20'),_0x401018=_0x443d1b['njlhU'](toPascalCase,_0x2ef109),_0x196b3a=_0x5b3a13['primaryKey']||'id',_0x54d3bf=_0x443d1b['njlhU'](detectTextColumn,_0x5b3a13[_0x422f95(0x29c)]),_0x1342c0=new Date()['toISOString'](),_0x187105=buildAuditColumnsSection(_0x5b3a13,'\x20\x20'),_0x14963d=_0x5b3a13[_0x422f95(0x257)]&&_0x5b3a13['defaultScope'][_0x422f95(0x2ac)]?buildDefaultScopeSQL(_0x5b3a13['defaultScope'][_0x422f95(0x2ac)]):'',_0x5a7a31=_0x5b3a13[_0x422f95(0x257)]&&_0x5b3a13['defaultScope'][_0x422f95(0x1ca)]?_0x443d1b['tWcEF'](buildDefaultScopeSQL,_0x5b3a13[_0x422f95(0x257)][_0x422f95(0x1ca)]):'',_0x1fd901={};return _0x5b3a13['fieldValidation']&&Array['isArray'](_0x5b3a13[_0x422f95(0x1fd)])&&_0x5b3a13[_0x422f95(0x1fd)]['forEach'](_0x21b745=>{const _0x1b74bb=_0x422f95;[_0x443d1b['ZjpIb'],_0x1b74bb(0x29f),_0x1b74bb(0x1c7),_0x1b74bb(0x2ad)][_0x1b74bb(0x1e3)](_0x21b745[_0x1b74bb(0x19e)])&&(_0x1fd901[_0x21b745['name']]={'type':_0x21b745['type'],'format':_0x21b745[_0x1b74bb(0x229)]&&_0x21b745[_0x1b74bb(0x229)]['format']||_0x443d1b['kKoro']});}),_0x422f95(0x25b)+_0x401018+'\x20Model\x20-\x20Oracle\x20Database\x0a*\x20Generated:\x20'+_0x1342c0+_0x422f95(0x29b)+_0x5b3a13[_0x422f95(0x220)]+_0x422f95(0x2d6)+_0x196b3a+_0x422f95(0x2b8)+_0x5b3a13[_0x422f95(0x29c)]['length']+_0x422f95(0x2a3)+_0x401018+_0x422f95(0x223)+_0x3e0708+'\x0a\x20\x20];\x0a\x0a\x20\x20const\x20datatablesWhere\x20=\x20'+(_0x5b3a13['datatablesWhere']?JSON[_0x422f95(0x288)](_0x5b3a13['datatablesWhere']):'[\x27kode\x27,\x20\x27nama\x27,\x20\x27all\x27]')+_0x422f95(0x28a)+_0x5b3a13['tableName']+'\x27,\x20validFields);\x0a\x0a\x20\x20//\x20base-model-oracle\x20hanya\x20menerima\x202\x20parameter,\x20simpan\x20datatablesWhere\x20manual\x0a\x20\x20this.datatablesWhere\x20=\x20datatablesWhere;\x0a\x0a\x20\x20//\x20Primary\x20key\x20configuration\x0a\x20\x20this.primaryKey\x20=\x20\x27'+_0x196b3a+'\x27;\x0a\x0a\x20\x20//\x20Read/Write\x20source\x20configuration\x0a\x20\x20this.viewName\x20=\x20\x27'+(_0x5b3a13['viewName']||_0x5b3a13[_0x422f95(0x220)])+_0x422f95(0x262)+(_0x5b3a13[_0x422f95(0x252)]||_0x5b3a13[_0x422f95(0x220)])+'\x27;\x0a\x20\x20this.writeSource\x20=\x20\x27'+_0x5b3a13['tableName']+'\x27;\x0a'+_0x187105+'\x0a\x20\x20//\x20Flag\x20untuk\x20self-documenting\x20API\x20(endpoint\x20/info)\x0a\x20\x20this.hasViewQuery\x20=\x20'+!!_0x5b3a13[_0x422f95(0x277)]+_0x422f95(0x1b1)+!!_0x5b3a13['exportQuery']+';\x0a'+(Object['keys'](_0x1fd901)[_0x422f95(0x1d7)]>0x0?_0x422f95(0x216)+JSON['stringify'](_0x1fd901,null,0x4)[_0x422f95(0x2ca)]('\x0a')[_0x422f95(0x282)](_0x443d1b[_0x422f95(0x230)])+';\x0a':'')+(_0x5b3a13[_0x422f95(0x26b)]&&_0x5b3a13['uploadConfig'][_0x422f95(0x24b)]?'\x0a\x20\x20//\x20File\x20upload\x20fields\x20(CLOB\x20columns)\x0a\x20\x20this.fileFields\x20=\x20'+JSON[_0x422f95(0x288)](Object[_0x422f95(0x251)](_0x5b3a13[_0x422f95(0x26b)]['fields']))+';\x0a':'')+'\x0a\x20\x20//\x20Field\x20validation\x20configuration\x0a'+((()=>{const _0x5685fb=_0x422f95;if(!_0x5b3a13['fieldValidation']||!Array['isArray'](_0x5b3a13[_0x5685fb(0x1fd)])||_0x443d1b[_0x5685fb(0x23f)](_0x5b3a13[_0x5685fb(0x1fd)][_0x5685fb(0x1d7)],0x0))return _0x443d1b['TuOOM'];const _0x181e92=_0x5b3a13[_0x5685fb(0x1fd)]['map'](_0x17fc30=>{const _0x3d0032=_0x5685fb,_0x2e3a8a=JSON[_0x3d0032(0x288)](_0x17fc30['constraints']||{},null,0x6)['replace'](/\n/g,_0x3d0032(0x283));return _0x3d0032(0x1dc)+_0x17fc30['name']+_0x3d0032(0x1d5)+_0x17fc30[_0x3d0032(0x19e)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20constraints:\x20'+_0x2e3a8a+_0x3d0032(0x2d8);})['join'](',\x0a');return'\x20\x20this.validationConfig\x20=\x20{\x0a'+_0x181e92+_0x5685fb(0x2a4);})())+'\x0a\x0a\x20\x20//\x20Model\x20metadata\x0a\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20endpointName:\x20\x27'+_0x2ef109+_0x422f95(0x1ec)+_0x1f25d2+_0x422f95(0x1f3)+_0x5b3a13['tableName']+'\x27,\x0a\x20\x20\x20\x20databaseType:\x20\x27oracle\x27,\x0a\x20\x20\x20\x20primaryKey:\x20\x27'+_0x196b3a+'\x27,\x0a\x20\x20\x20\x20fieldCount:\x20'+_0x5b3a13['fieldName'][_0x422f95(0x1d7)]+_0x422f95(0x249)+_0x1342c0+'\x27\x0a\x20\x20};\x0a\x0a\x20\x20this.advancedQueryTemplates\x20=\x20this.loadAdvancedQueryTemplates();\x0a}\x0a\x0a/**\x0a\x20*\x20Load\x20advanced\x20query\x20templates\x20dari\x20file\x0a\x20*/\x0aloadAdvancedQueryTemplates()\x20{\x0a\x20\x20const\x20templates\x20=\x20{};\x0a\x0a\x20\x20'+(_0x5b3a13[_0x422f95(0x1f9)]?Object[_0x422f95(0x1ac)](_0x5b3a13['advancedQueries'])[_0x422f95(0x23a)](([_0x4e52d0,_0x43d2d0])=>_0x422f95(0x21d)+_0x43d2d0+'\x22\x20===\x20\x27string\x27\x20&&\x20\x22'+_0x43d2d0+_0x422f95(0x1cc)+_0x43d2d0+'\x22.replace(\x27file:\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20filePath\x20=\x20path.join(__dirname,\x20relativePath);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(filePath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20templates[\x22'+_0x4e52d0+'\x22]\x20=\x20fs.readFileSync(filePath,\x20\x27utf8\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20Template\x20'+_0x4e52d0+'\x20loaded\x20successfully\x20from\x20Oracle\x20file`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`SQL\x20Template\x20file\x20'+_0x4e52d0+'\x20not\x20found:\x20${filePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20templates[\x22'+_0x4e52d0+_0x422f95(0x214)+_0x4e52d0+_0x422f95(0x2c1)+_0x43d2d0+_0x422f95(0x1b6)+_0x4e52d0+':`,\x20error);\x0a\x20\x20\x20\x20templates[\x22'+_0x4e52d0+_0x422f95(0x293))[_0x422f95(0x282)](''):_0x443d1b[_0x422f95(0x286)])+_0x422f95(0x20b)+_0x5b3a13['datatablesQuery']['replace'](/\$\{tableName\}/g,_0x422f95(0x268))+_0x422f95(0x1c0)+(_0x5b3a13[_0x422f95(0x277)]?_0x422f95(0x2d7)+_0x5b3a13['viewQuery']['replace'](/\$\{tableName\}/g,_0x443d1b['naabU'])+'\x0a\x20\x20`.trim();\x0a\x20\x20baseQuery\x20=\x20this.convertToOracleSQL(baseQuery);\x0a\x20\x20return\x20baseQuery;':_0x422f95(0x295))+'\x0a}\x0a\x0a/**\x0a\x20*\x20Convert\x20PostgreSQL\x20SQL\x20syntax\x20to\x20Oracle\x0a\x20*/\x0aconvertToOracleSQL(sql)\x20{\x0a\x20\x20sql\x20=\x20sql.replace(/\x5cbILIKE\x5cb/gi,\x20\x27LIKE\x27);\x0a\x20\x20sql\x20=\x20sql.replace(/LIMIT\x5cs+(\x5cd+)\x5cs+OFFSET\x5cs+(\x5cd+)/gi,\x20(match,\x20limit,\x20offset)\x20=>\x20{\x0a\x20\x20\x20\x20return\x20`AND\x20ROWNUM\x20BETWEEN\x20${parseInt(offset)\x20+\x201}\x20AND\x20${parseInt(offset)\x20+\x20parseInt(limit)}`;\x0a\x20\x20});\x0a\x20\x20sql\x20=\x20sql.replace(/NOW\x5c(\x5c)/gi,\x20\x27SYSDATE\x27);\x0a\x20\x20sql\x20=\x20sql.replace(/CURRENT_DATE/gi,\x20\x27SYSDATE\x27);\x0a\x20\x20return\x20sql;\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getDatatables\x20untuk\x20Oracle\x20dengan\x20pagination\x20yang\x20tepat\x0a\x20*\x20Paritas\x20fungsional\x20dengan\x20PostgreSQL\x20getDatatables\x0a\x20*/\x0aasync\x20getDatatables(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Check\x20cache\x20first\x0a\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedDatatables(options);\x0a\x20\x20\x20\x20if\x20(cachedResult)\x20return\x20cachedResult;\x0a\x0a\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20start\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20filters\x20=\x20{},\x0a\x20\x20\x20\x20\x20\x20advancedFilters\x20=\x20[]\x0a\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20//\x20Resolve\x20sort\x20columns\x20dengan\x20prioritas:\x20sort_columns\x20>\x20order[0][column]\x20>\x20default\x0a\x20\x20\x20\x20let\x20resolvedSortColumns\x20=\x20sort_columns;\x0a\x0a\x20\x20\x20\x20//\x20Fallback:\x20cek\x20format\x20DataTables\x20bawaan\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20if\x20((!resolvedSortColumns\x20||\x20resolvedSortColumns.length\x20===\x200)\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20!==\x20undefined\x20&&\x20options[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20columnIndex\x20=\x20parseInt(options[\x27order[0][column]\x27]);\x0a\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20options[\x27order[0][dir]\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(columnIndex\x20>=\x200\x20&&\x20columnIndex\x20<\x20this.validFields.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20resolvedSortColumns\x20=\x20[{\x20column:\x20this.validFields[columnIndex],\x20direction:\x20direction.toUpperCase()\x20}];\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(resolvedSortColumns);\x0a\x0a\x20\x20\x20\x20const\x20baseQuery\x20=\x20this.getListQuery(options);\x0a\x0a\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x20(parameterized)\x0a\x20\x20\x20\x20const\x20searchResult\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x20\x20\x20\x20let\x20whereClauseSql\x20=\x20searchResult.sql;\x0a\x20\x20\x20\x20let\x20whereParams\x20=\x20[...searchResult.params];\x0a\x0a\x20\x20\x20\x20//\x20Build\x20filter\x20clause\x0a\x20\x20\x20\x20const\x20filterClause\x20=\x20this.buildObjectFilterClause(filters);\x0a\x20\x20\x20\x20if\x20(filterClause)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${filterClause}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${filterClause}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Support\x20WHERE\x20conditions\x20dari\x20request\x20body\x0a\x20\x20\x20\x20if\x20(options.where)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20complexResult\x20=\x20this.buildComplexWhereClause(options.where,\x20whereParams,\x20whereParams.length\x20+\x201);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20complexResult.params;\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Advanced\x20filters\x20support\x0a\x20\x20\x20\x20if\x20(advancedFilters\x20&&\x20advancedFilters.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20advResult\x20=\x20this.buildAdvancedFilterCondition(advancedFilters);\x0a\x20\x20\x20\x20\x20\x20if\x20(advResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${advResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${advResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereParams.push(...advResult.params);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Check\x20if\x20query\x20needs\x20subquery\x20wrapping\x20(CTE\x20or\x20JOIN)\x0a\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20//\x20Count\x20total\x20records\x0a\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20`SELECT\x20COUNT(*)\x20as\x20TOTAL\x20FROM\x20(${baseQuery})\x20base_query`\x20:\x0a\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20TOTAL\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].TOTAL)\x20:\x200;\x0a\x0a\x20\x20\x20\x20//\x20Count\x20filtered\x20records\x0a\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20`SELECT\x20COUNT(*)\x20as\x20TOTAL\x20FROM\x20(${baseQuery})\x20base_query\x20${whereClauseSql}`\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20TOTAL\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x20\x27\x20+\x20whereClauseSql;\x0a\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].TOTAL)\x20:\x200;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Oracle\x20pagination\x20using\x20ROWNUM\x0a\x20\x20\x20\x20const\x20endRow\x20=\x20start\x20+\x20perPage;\x0a\x0a\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20`SELECT\x20*\x20FROM\x20(SELECT\x20base_query.*,\x20ROWNUM\x20rnum\x20FROM\x20(SELECT\x20*\x20FROM\x20(${baseQuery})\x20base_query\x20${whereClauseSql\x20||\x20\x27\x27}\x20${orderClause})\x20base_query\x20WHERE\x20ROWNUM\x20<=\x20${endRow})\x20WHERE\x20rnum\x20>\x20${start}`\x20:\x0a\x20\x20\x20\x20\x20\x20`SELECT\x20*\x20FROM\x20(SELECT\x20a.*,\x20ROWNUM\x20rnum\x20FROM\x20(${baseQuery}\x20${whereClauseSql\x20||\x20\x27\x27}\x20${orderClause})\x20a\x20WHERE\x20ROWNUM\x20<=\x20${endRow})\x20WHERE\x20rnum\x20>\x20${start}`;\x0a\x0a\x20\x20\x20\x20console.log(\x27Final\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20console.log(\x27Query\x20Parameters:\x27,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20[]);\x0a\x20\x20\x20\x20const\x20rawData\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20data:\x20hapus\x20RNUM,\x20normalize\x20ke\x20lowercase,\x20tambahkan\x20ROWNUMERATOR\x0a\x20\x20\x20\x20const\x20data\x20=\x20rawData\x20?\x20rawData.map((row,\x20index)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20RNUM,\x20rnum,\x20...cleanRow\x20}\x20=\x20row;\x0a\x20\x20\x20\x20\x20\x20const\x20formatted\x20=\x20this.formatResponseData(cleanRow);\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...formatted,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ROWNUMERATOR:\x20start\x20+\x20index\x20+\x201\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20})\x20:\x20[];\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20draw:\x20parseInt(options.draw\x20||\x20\x271\x27,\x2010),\x0a\x20\x20\x20\x20\x20\x20recordsTotal:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20recordsFiltered:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20data:\x20data\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedDatatables(options,\x20result);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getDatatables:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20WHERE\x20clause\x20untuk\x20search\x20(parameterized\x20query)\x0a\x20*\x20@returns\x20{Object}\x20{\x20sql:\x20string,\x20params:\x20array\x20}\x0a\x20*/\x0abuildWhereClause(searchValue,\x20searchBy)\x20{\x0a\x20\x20if\x20(!searchValue\x20||\x20searchValue\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20const\x20params\x20=\x20[];\x0a\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20const\x20searchPattern\x20=\x20`%${searchValue}%`;\x0a\x0a\x20\x20if\x20(searchBy\x20===\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20const\x20searchableFields\x20=\x20this.datatablesWhere.filter(field\x20=>\x20field\x20!==\x20\x27all\x27);\x0a\x20\x20\x20\x20if\x20(searchableFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20conditions\x20=\x20searchableFields.map(field\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(searchPattern);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20`UPPER(${field})\x20LIKE\x20UPPER(:${paramIndex++})`;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20sql:\x20`WHERE\x20(${conditions.join(\x27\x20OR\x20\x27)})`,\x20params\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20else\x20if\x20(this.validFields.includes(searchBy))\x20{\x0a\x20\x20\x20\x20params.push(searchPattern);\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(:1)`,\x20params\x20};\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20filter\x20clause\x20dari\x20object\x20filters\x0a\x20*\x20@param\x20{Object}\x20filters\x20-\x20Filter\x20object\x20{column:\x20value}\x0a\x20*\x20@returns\x20{string}\x20Filter\x20conditions\x20SQL\x20(tanpa\x20WHERE\x20prefix)\x0a\x20*/\x0abuildObjectFilterClause(filters)\x20{\x0a\x20\x20if\x20(!filters\x20||\x20typeof\x20filters\x20!==\x20\x27object\x27\x20||\x20Object.keys(filters).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20}\x0a\x0a\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20for\x20(const\x20[column,\x20value]\x20of\x20Object.entries(filters))\x20{\x0a\x20\x20\x20\x20if\x20(!this.validFields.includes(column))\x20continue;\x0a\x20\x20\x20\x20if\x20(value\x20===\x20null\x20||\x20value\x20===\x20undefined\x20||\x20value\x20===\x20\x27\x27\x20||\x20value\x20===\x20\x27all\x27\x20||\x20value\x20===\x20\x27-\x27)\x20continue;\x0a\x0a\x20\x20\x20\x20const\x20escapedValue\x20=\x20value.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20conditions.push(`${column}\x20=\x20\x27${escapedValue}\x27`);\x0a\x20\x20}\x0a\x0a\x20\x20return\x20conditions.length\x20>\x200\x20?\x20conditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20list\x20data\x20dengan\x20pagination\x20untuk\x20Oracle\x0a\x20*/\x0aasync\x20getList(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Check\x20cache\x20first\x0a\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedList(options);\x0a\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20page:\x20p\x20=\x20null,\x20perPage:\x20pp\x20=\x2010,\x20searchValue:\x20sv\x20=\x20\x27\x27,\x20sort_columns:\x20sc\x20=\x20[],\x20where:\x20w\x20=\x20null\x20}\x20=\x20options;\x0a\x20\x20\x20\x20\x20\x20const\x20scInfo\x20=\x20sc\x20&&\x20sc.length\x20>\x200\x20?\x20sc.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20HIT\x20for\x20list\x20-\x20page:${p},\x20perPage:${pp},\x20sort:${scInfo},\x20search:${sv\x20||\x20\x27none\x27}${w\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`);\x0a\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20page\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20where\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20select\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20limit\x20=\x201000\x0a\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20const\x20paginate\x20=\x20page\x20!==\x20null;\x0a\x20\x20\x20\x20const\x20scInfo\x20=\x20sort_columns\x20&&\x20sort_columns.length\x20>\x200\x20?\x20sort_columns.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20const\x20cacheInfo\x20=\x20`page:${page},\x20perPage:${perPage},\x20sort:${scInfo},\x20search:${searchValue\x20||\x20\x27none\x27}${where\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`;\x0a\x0a\x20\x20\x20\x20console.log(`[Cache]\x20MISS\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20let\x20baseQuery;\x0a\x20\x20\x20\x20if\x20(select\x20&&\x20Array.isArray(select)\x20&&\x20select.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20selectedValidColumns\x20=\x20select.filter(col\x20=>\x20this.validFields.includes(col));\x0a\x20\x20\x20\x20\x20\x20if\x20(selectedValidColumns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Deteksi\x20apakah\x20query\x20mengandung\x20JOIN\x20atau\x20CTE\x20(perlu\x20subquery\x20wrapping)\x0a\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20const\x20searchResult\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x20\x20\x20\x20let\x20whereClauseSql\x20=\x20searchResult.sql;\x0a\x20\x20\x20\x20let\x20whereParams\x20=\x20[...searchResult.params];\x0a\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(sort_columns);\x0a'+(_0x5a7a31?'\x0a\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x20untuk\x20read\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20'+_0x5a7a31+'\x20AND\x20`\x20+\x20whereClauseSql.replace(/^WHERE\x5cs+/i,\x20\x27\x27);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20\x27WHERE\x20'+_0x5a7a31+_0x422f95(0x2ab):'')+_0x422f95(0x1e5)+_0x196b3a+',\x20'+_0x54d3bf+_0x422f95(0x27a)+_0x54d3bf+_0x422f95(0x1cb)+(_0x14963d?_0x422f95(0x2c7)+_0x14963d:'')+'\x20ORDER\x20BY\x20'+_0x54d3bf+')\x20WHERE\x20ROWNUM\x20<=\x20100`;\x0a\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x196b3a['toUpperCase']()+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x54d3bf['toUpperCase']()+'\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20Oracle\x20getLookupData:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Dynamic\x20lookup\x20dengan\x20extra\x20filters\x20untuk\x20Oracle\x0a\x20*/\x0aasync\x20getLookupDataDynamic(search,\x20extraFilters\x20=\x20{})\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20let\x20whereConditions\x20=\x20[];\x0a'+(_0x14963d?_0x422f95(0x203)+_0x14963d+_0x422f95(0x247):'')+_0x422f95(0x2cc)+_0x54d3bf+')\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20params.push(`%${search}%`);\x0a\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Add\x20extra\x20filters\x0a\x20\x20\x20\x20if\x20(extraFilters\x20&&\x20Object.keys(extraFilters).length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(extraFilters))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(key)\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`${key}\x20=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20whereClause\x20=\x20whereConditions.length\x20>\x200\x20?\x20\x27WHERE\x20\x27\x20+\x20whereConditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a\x0a\x20\x20\x20\x20const\x20query\x20=\x20`SELECT\x20*\x20FROM\x20(SELECT\x20'+_0x196b3a+',\x20'+_0x54d3bf+_0x422f95(0x22e)+_0x54d3bf+')\x20WHERE\x20ROWNUM\x20<=\x20100`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params.length\x20>\x200\x20?\x20params\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x196b3a['toUpperCase']()+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x54d3bf[_0x422f95(0x2b9)]()+_0x422f95(0x224)+_0x196b3a+',\x20'+_0x54d3bf+_0x422f95(0x232)+(_0x14963d?'\x20WHERE\x20'+_0x14963d:'')+_0x422f95(0x2c2)+_0x54d3bf+')\x20WHERE\x20ROWNUM\x20<=\x201000`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query);\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x20tanpa\x20selected\x20flag\x0a\x20\x20\x20\x20const\x20cacheData\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x196b3a[_0x422f95(0x2b9)]()+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x54d3bf['toUpperCase']()+_0x422f95(0x1af)+_0x196b3a['toUpperCase']()+_0x422f95(0x26e)+_0x54d3bf[_0x422f95(0x2b9)]()+_0x422f95(0x1d6)+_0x196b3a[_0x422f95(0x2b9)]()+_0x422f95(0x2bb)+_0x196b3a+_0x422f95(0x299)+_0x54d3bf+'\x27];\x0a\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20text\x20fields\x0a\x20\x20\x20\x20const\x20validTextFields\x20=\x20this.validFields.filter(field\x20=>\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27name\x27)\x20||\x20field.includes(\x27nama\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27code\x27)\x20||\x20field.includes(\x27kode\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27text\x27)\x20||\x20field.includes(\x27title\x27)\x0a\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x196b3a+_0x422f95(0x22d)+_0x54d3bf+'\x27;\x0a\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x196b3a+'\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20continue;\x20//\x20primary\x20key\x20sudah\x20ada\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20ada\x20SQL\x20expression\x20dengan\x20alias\x20(menggunakan\x20AS)\x0a\x20\x20\x20\x20\x20\x20const\x20aliasRegex\x20=\x20new\x20RegExp(\x27(.+)\x5c\x5cs+as\x5c\x5cs+(\x5c\x5cw+)$\x27,\x20\x27i\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20aliasMatch\x20=\x20column.match(aliasRegex);\x0a\x20\x20\x20\x20\x20\x20if\x20(aliasMatch)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20expression\x20=\x20aliasMatch[1].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20alias\x20=\x20aliasMatch[2].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${expression}\x20AS\x20${alias}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20aliasField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20simple\x20field\x20name\x0a\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(column)\x20||\x20validTextFields.includes(column))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Computed\x20column\x0a\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${selectClause}\x20FROM\x20${this.getTableSource(\x27read\x27)}\x20'+(_0x14963d?'WHERE\x20'+_0x14963d+'\x20':'')+'`;\x0a\x0a\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20((options.where\x20&&\x20Array.isArray(options.where)\x20&&\x20options.where.length\x20>\x200)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20(options.where\x20&&\x20options.where.conditions\x20&&\x20Array.isArray(options.where.conditions)\x20&&\x20options.where.conditions.length\x20>\x200))\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`'+(_0x14963d?_0x422f95(0x22b):_0x422f95(0x255))+'${whereResult.sql}'+(_0x14963d?')':'')+_0x422f95(0x1ad)+_0x196b3a[_0x422f95(0x2b9)]()+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item[textFieldUpper]\x20||\x20item.'+_0x54d3bf[_0x422f95(0x2b9)]()+'\x20||\x20\x27\x27\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20the\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20advanced\x20filter\x20conditions\x20untuk\x20Oracle\x0a\x20*\x20@param\x20{Array}\x20filters\x20-\x20Array\x20of\x20{column,\x20type,\x20value,\x20value2}\x0a\x20*\x20@returns\x20{Object}\x20{sql,\x20params}\x0a\x20*/\x0abuildAdvancedFilterCondition(filters)\x20{\x0a\x20\x20if\x20(!filters\x20||\x20!Array.isArray(filters)\x20||\x20filters.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20const\x20params\x20=\x20[];\x0a\x20\x20let\x20paramIndex\x20=\x20100;\x20//\x20Start\x20dari\x20100\x20agar\x20tidak\x20bentrok\x20dengan\x20param\x20lain\x0a\x0a\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20const\x20{\x20column,\x20type,\x20value,\x20value2\x20}\x20=\x20filter;\x0a\x0a\x20\x20\x20\x20if\x20(!column\x20||\x20!this.validFields.includes(column))\x20continue;\x0a\x0a\x20\x20\x20\x20switch\x20(type)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<>\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20NOT\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27starts_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27ends_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20BETWEEN\x20:${paramIndex}\x20AND\x20:${paramIndex\x20+\x201}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x202;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20inPlaceholders\x20=\x20value.map((_,\x20i)\x20=>\x20`:${paramIndex\x20+\x20i}`).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IN\x20(${inPlaceholders})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(...value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x20value.length;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20notInPlaceholders\x20=\x20value.map((_,\x20i)\x20=>\x20`:${paramIndex\x20+\x20i}`).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20NOT\x20IN\x20(${notInPlaceholders})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(...value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x20value.length;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_not_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NOT\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20=\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20BETWEEN\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)\x20AND\x20TO_DATE(:${paramIndex\x20+\x201},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x202;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_after\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20>\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_before\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20<\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(conditions.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x20sql:\x20conditions.join(\x27\x20AND\x20\x27),\x20params\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Escape\x20value\x20untuk\x20Oracle\x20SQL\x20(sanitization)\x0a\x20*/\x0aescapeValue(value)\x20{\x0a\x20\x20if\x20(value\x20===\x20null\x20||\x20value\x20===\x20undefined)\x20return\x20null;\x0a\x20\x20if\x20(typeof\x20value\x20===\x20\x27number\x27)\x20return\x20value;\x0a\x20\x20return\x20String(value).replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a}\x0a\x0a/**\x0a\x20*\x20Validasi\x20data\x20sebelum\x20insert/update\x0a\x20*/\x0aasync\x20validateData(data,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20isValid:\x20true,\x0a\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20sanitizedData:\x20{}\x0a\x20\x20};\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20hasFieldValidation\x20=\x20this.validationConfig\x20&&\x20Object.keys(this.validationConfig).length\x20>\x200;\x0a\x0a\x20\x20\x20\x20if\x20(hasFieldValidation)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Loop\x20semua\x20field\x20yang\x20ada\x20di\x20validationConfig\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20value\x20=\x20data[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20value\x20jika\x20autoGenerate\x20dan\x20nilai\x20kosong.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20dan\x20uuid\x20diperlakukan\x20sama:\x20UUID\x20v7\x20via\x20uuid\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20lintas\x20dialect;\x20cocok\x20dengan\x20konvensi\x20payload\x20category.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20yang\x20memakai\x20type:\x20\x22string\x22\x20dengan\x20constraint\x20autoGenerate\x20+\x20primaryKey).\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20constraints.autoGenerate\x20&&\x20(!value\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27uuid\x27\x20||\x20config.type\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.required)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(constraints.autoGenerate\x20||\x20constraints.primaryKey))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if\x20(operation\x20===\x20\x27update\x27\x20&&\x20value\x20===\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.requiredMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20is\x20required`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20field:\x20hash\x20constraint\x20support\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27string\x27\x20&&\x20typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fieldErrors\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Pattern\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Format\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.format\x20===\x20\x27email\x27\x20&&\x20!/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20email\x20format`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldErrors.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...fieldErrors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isHashField\x20&&\x20fieldErrors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20sanitized;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Non-string\x20field:\x20basic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validate\x20field\x20yang\x20tidak\x20ada\x20di\x20validationConfig\x20(backward\x20compatibility)\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validationConfig[field]\x20&&\x20data[field]\x20!==\x20undefined\x20&&\x20data[field]\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data[field]\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20data[field].trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20data[field];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20Tidak\x20ada\x20fieldValidation\x20-\x20gunakan\x20generic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20data[field];\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20value.trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20result.errors.push(`Validation\x20error:\x20${error.message}`);\x0a\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20}\x0a\x0a\x20\x20return\x20result;\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20field\x20mapping\x20information\x0a\x20*/\x0agetFieldMapping()\x20{\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20allFields:\x20this.validFields,\x0a\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20textFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27name\x27)\x20||\x20f.includes(\x27nama\x27)\x20||\x20f.includes(\x27description\x27)),\x0a\x20\x20\x20\x20dateFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27date\x27)\x20||\x20f.includes(\x27time\x27)),\x0a\x20\x20\x20\x20numericFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27amount\x27)\x20||\x20f.includes(\x27price\x27)\x20||\x20f.includes(\x27count\x27))\x0a\x20\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20Oracle\x20connection\x20info\x20untuk\x20health\x20check\x0a\x20*/\x0aasync\x20getConnectionInfo()\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20db.executeQuery(\x27SELECT\x201\x20as\x20TEST_CON\x20FROM\x20DUAL\x27);\x0a\x20\x20\x20\x20if\x20(result\x20&&\x20result.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20connected:\x20true,\x20database:\x20\x27Oracle\x27,\x20retrievedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20null;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20return\x20{\x20connected:\x20false,\x20error:\x20error.message,\x20checkedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Format\x20response\x20data\x20untuk\x20Oracle\x20(field\x20names\x20uppercase)\x0a\x20*/\x0aformatResponseData(data)\x20{\x0a\x20\x20if\x20(!data)\x20return\x20null;\x0a\x0a\x20\x20const\x20formatted\x20=\x20{};\x0a\x20\x20'+_0x5b3a13[_0x422f95(0x29c)]['map'](_0x201921=>'formatted.'+_0x201921+_0x422f95(0x258)+_0x201921['toUpperCase']()+';')['join'](_0x443d1b[_0x422f95(0x230)])+'\x0a\x0a\x20\x20return\x20formatted;\x0a}\x0a'+((()=>{const _0xdfdd02=_0x422f95,_0x4839d0=_0x5b3a13['masterDetail']&&_0x5b3a13['masterDetail']['enabled'],_0x24c5d4=_0x5b3a13[_0xdfdd02(0x213)]||{};if(!_0x4839d0||!_0x24c5d4[_0xdfdd02(0x1b4)]&&!_0x24c5d4[_0xdfdd02(0x1b5)]&&!_0x24c5d4['readComposite'])return'';const _0x5e5367=_0x5b3a13['masterDetail']['detailTable'],_0x5797d6=_0x5e5367['split']('.')[_0xdfdd02(0x20a)](),_0x117417=_0x5b3a13['masterDetail']['foreignKey'],_0x368e89=_0x5b3a13[_0xdfdd02(0x266)][_0xdfdd02(0x201)]?.['primaryKey']||_0x5797d6+_0xdfdd02(0x235),_0x145869=_0x5b3a13[_0xdfdd02(0x266)][_0xdfdd02(0x215)]||null,_0x467fe3=_0x5b3a13[_0xdfdd02(0x266)][_0xdfdd02(0x201)]?.[_0xdfdd02(0x29a)]||{},_0x5c433d=_0x5b3a13['masterDetail'][_0xdfdd02(0x201)]?.['detailQuery']||null,_0x3a890f=[],_0x532eee=[];for(const [_0x140319,_0x4ba141]of Object[_0xdfdd02(0x1ac)](_0x467fe3)){if(_0x4ba141['type']===_0x443d1b[_0xdfdd02(0x1bb)])_0x3a890f[_0xdfdd02(0x2d2)](_0x140319);else{const _0x219b86=(_0x4ba141[_0xdfdd02(0x1e0)]||'')['split']('*')['map'](_0x4fa8a8=>_0x4fa8a8[_0xdfdd02(0x225)]());_0x532eee[_0xdfdd02(0x2d2)]({'fieldName':_0x140319,'qtyField':_0x219b86[0x0],'priceField':_0x219b86[0x1]});}}const _0x2a846f=_0x467fe3['total_amount']?.['formula']||'',_0x583d13=_0x2a846f[_0xdfdd02(0x2ca)]('*')['map'](_0x455f62=>_0x455f62['trim']()),_0x55f22d=_0x145869?.['total_qty']?.['source']?.[_0xdfdd02(0x297)](_0xdfdd02(0x2b1),'')||'',_0x3c1332=_0x583d13[0x0]||_0x55f22d,_0x2d4f8b=_0x583d13[0x1]||'unit_price',_0x2b78f5=_0x532eee[_0xdfdd02(0x23a)](_0x42ce51=>{const _0x22e3fc=_0xdfdd02;return _0x22e3fc(0x1b0)+_0x42ce51['fieldName']+_0x22e3fc(0x285)+_0x42ce51['qtyField']+'\x20*\x20'+_0x42ce51['priceField']+'\x0a\x20\x20\x20\x20\x20\x20item.'+_0x42ce51[_0x22e3fc(0x29c)]+_0x22e3fc(0x21b)+_0x42ce51[_0x22e3fc(0x228)]+')\x20||\x200)\x20*\x20(Number(item.'+_0x42ce51[_0x22e3fc(0x243)]+_0x22e3fc(0x1b9);})['join']('\x0a');let _0x232425='';_0x24c5d4['createComposite']&&(_0x232425+=_0xdfdd02(0x239)+_0x5797d6+_0xdfdd02(0x287)+_0x5b3a13['tableName']+_0xdfdd02(0x219)+_0x5e5367+_0xdfdd02(0x2c6)+_0x117417+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeResult\x20=\x20await\x20_ce.executeOnBeforeComposite(\x27insert\x27,\x20_beforeCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onBeforeCompositeInsert\x20failed:\x20\x27\x20+\x20_beforeResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20header\x20INSERT\x0a\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20let\x20idx\x20=\x201;\x0a\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerPlaceholders.push(\x27:\x27\x20+\x20idx++);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(created_at,\x20created_by,\x20updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20idx\x20=\x20this._appendCreateAuditColumns(headerFields,\x20headerValues,\x20headerPlaceholders,\x20headerData,\x20eventContext,\x20idx);\x0a\x0a\x20\x20\x20\x20const\x20insertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20(\x27\x20+\x20headerFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20headerPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20console.log(\x27Executing\x20header\x20INSERT:\x27,\x20{\x20query:\x20insertSql,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20await\x20connection.execute(insertSql,\x20headerValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x0a\x20\x20\x20\x20//\x20SELECT\x20back\x20inserted\x20header\x0a\x20\x20\x20\x20const\x20selectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20:1\x27;\x0a\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20connection.execute(selectSql,\x20[headerData[this.primaryKey]],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20const\x20insertedHeader\x20=\x20this.formatResponseData(headerResult.rows[0]);\x0a\x20\x20\x20\x20const\x20masterPkValue\x20=\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20console.log(\x27Header\x20inserted\x20successfully:\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27=\x27\x20+\x20masterPkValue);\x0a\x0a\x20\x20\x20\x20//\x20Insert\x20detail\x20items\x0a\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x20\x20\x20\x20const\x20detailTableFull\x20=\x20\x27'+_0x5e5367+'\x27;\x0a\x20\x20\x20\x20const\x20fk\x20=\x20\x27'+_0x117417+'\x27;\x0a\x20\x20\x20\x20const\x20detailPk\x20=\x20\x27'+_0x368e89+_0xdfdd02(0x1a2)+(_0x3a890f['length']>0x0?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x3a890f)+';':'')+_0xdfdd02(0x1e7)+(_0x2b78f5?_0x443d1b[_0xdfdd02(0x2ce)]('\x0a'+_0x2b78f5,'\x0a'):'')+'\x0a\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20dIdx\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x3a890f[_0xdfdd02(0x1d7)]>0x0?_0xdfdd02(0x28f):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(\x27:\x27\x20+\x20dIdx++);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20dIdx\x20=\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext,\x20dIdx);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailInsertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20(\x27\x20+\x20detailFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20detailPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20detail\x20INSERT:\x27,\x20{\x20query:\x20detailInsertSql,\x20values:\x20detailValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(detailInsertSql,\x20detailValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20SELECT\x20back\x20inserted\x20detail\x0a\x20\x20\x20\x20\x20\x20const\x20detailSelectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20=\x20:1\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20connection.execute(detailSelectSql,\x20[item[detailPk]],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(detailResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(\x27Inserted\x20\x27\x20+\x20insertedItems.length\x20+\x20\x27\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeInsert\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce2\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB2\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_afterCtx\x20=\x20_CB2.buildCompositeInsertAfterContext(headerData,\x20insertedHeader,\x20insertedItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5b3a13[_0xdfdd02(0x220)]+_0xdfdd02(0x219)+_0x5e5367+_0xdfdd02(0x2c6)+_0x117417+_0xdfdd02(0x254));_0x24c5d4['updateComposite']&&(_0x232425+='\x0a/**\x0a\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(Oracle)\x0a\x20*/\x0aasync\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20const\x20connection\x20=\x20await\x20db.getConnection();\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Primary\x20key\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20is\x20required\x20for\x20update\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20const\x20checkSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20:1\x27;\x0a\x20\x20\x20\x20const\x20checkResult\x20=\x20await\x20connection.execute(checkSql,\x20[primaryKeyValue],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20if\x20(!checkResult.rows\x20||\x20checkResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20oldData\x20=\x20this.formatResponseData(checkResult.rows[0]);\x0a\x0a\x20\x20\x20\x20//\x20Extract\x20header\x20data\x0a\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5797d6+'\x27;\x0a\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeCtx\x20=\x20_CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20_detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20update:\x20_detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20_detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5b3a13['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5e5367+_0xdfdd02(0x2c6)+_0x117417+_0xdfdd02(0x244)+_0x5e5367+'\x27;\x0a\x20\x20\x20\x20const\x20fk\x20=\x20\x27'+_0x117417+_0xdfdd02(0x22c)+_0x368e89+'\x27;\x0a\x20\x20\x20\x20'+(_0x3a890f[_0xdfdd02(0x1d7)]>0x0?_0xdfdd02(0x2db)+JSON[_0xdfdd02(0x288)](_0x3a890f)+';':'')+'\x0a\x0a\x20\x20\x20\x20const\x20detailOperations\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20const\x20{\x20insert:\x20insertItems\x20=\x20[],\x20update:\x20updateItems\x20=\x20[],\x20delete:\x20deleteItems\x20=\x20[]\x20}\x20=\x20detailOperations;\x0a\x0a\x20\x20\x20\x20const\x20deletedItems\x20=\x20[];\x0a\x20\x20\x20\x20const\x20updatedItems\x20=\x20[];\x0a\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x0a\x20\x20\x20\x20//\x201.\x20DELETE\x20operations\x0a\x20\x20\x20\x20for\x20(const\x20item\x20of\x20deleteItems)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!item[detailPk])\x20throw\x20new\x20Error(\x27Missing\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20in\x20delete\x20operation\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20delSql\x20=\x20\x27DELETE\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20=\x20:1\x27;\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(delSql,\x20[item[detailPk]],\x20{\x20autoCommit:\x20false\x20});\x0a\x20\x20\x20\x20\x20\x20deletedItems.push(item);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20console.log(\x27Deleted\x20\x27\x20+\x20deletedItems.length\x20+\x20\x27\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x202.\x20UPDATE\x20operations\x0a\x20\x20\x20\x20for\x20(const\x20item\x20of\x20updateItems)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!item[detailPk])\x20throw\x20new\x20Error(\x27Missing\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20in\x20update\x20operation\x27);\x0a'+(_0x2b78f5?'\x0a'+_0x2b78f5+'\x0a':'')+_0xdfdd02(0x2d9)+(_0x3a890f['length']>0x0?_0xdfdd02(0x28f):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dFields.push(key\x20+\x20\x27\x20=\x20:\x27\x20+\x20dIdx++);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20detail\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20dIdx\x20=\x20this._appendUpdateAuditColumns(dFields,\x20dValues,\x20item,\x20eventContext,\x20dIdx);\x0a\x0a\x20\x20\x20\x20\x20\x20dValues.push(item[detailPk]);\x0a\x20\x20\x20\x20\x20\x20const\x20dUpdateSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20SET\x20\x27\x20+\x20dFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20=\x20:\x27\x20+\x20dIdx;\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(dUpdateSql,\x20dValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x20\x20\x20\x20\x20\x20updatedItems.push(item);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20console.log(\x27Updated\x20\x27\x20+\x20updatedItems.length\x20+\x20\x27\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x203.\x20INSERT\x20operations\x0a\x20\x20\x20\x20for\x20(const\x20item\x20of\x20insertItems)\x20{\x0a\x20\x20\x20\x20\x20\x20item[fk]\x20=\x20primaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply\x0a\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20dengan\x20createComposite\x20Oracle)\x0a\x20\x20\x20\x20\x20\x20if\x20(item[detailPk]\x20===\x20undefined\x20||\x20item[detailPk]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[detailPk]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20}\x0a'+(_0x2b78f5?_0x443d1b[_0xdfdd02(0x1e6)](_0x443d1b['gxvfE']('\x0a',_0x2b78f5),'\x0a'):'')+_0xdfdd02(0x1f7)+(_0x3a890f['length']>0x0?'if\x20(generatedFields.includes(key))\x20continue;':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dPlaceholders.push(\x27:\x27\x20+\x20dIdx++);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20dIdx\x20=\x20this._appendCreateAuditColumns(dFields,\x20dValues,\x20dPlaceholders,\x20item,\x20eventContext,\x20dIdx);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20dInsertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20(\x27\x20+\x20dFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20dPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(dInsertSql,\x20dValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x20\x20\x20\x20\x20\x20insertedItems.push(item);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20console.log(\x27Inserted\x20\x27\x20+\x20insertedItems.length\x20+\x20\x27\x20new\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x20Get\x20all\x20current\x20detail\x20items\x0a\x20\x20\x20\x20const\x20allItemsSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20fk\x20+\x20\x27\x20=\x20:1\x20ORDER\x20BY\x20line_number\x27;\x0a\x20\x20\x20\x20const\x20allItemsResult\x20=\x20await\x20connection.execute(allItemsSql,\x20[primaryKeyValue],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20const\x20allItems\x20=\x20allItemsResult.rows\x20||\x20[];\x0a'+(_0x145869?'\x0a\x20\x20\x20\x20//\x20Recalculate\x20header\x20totals\x0a\x20\x20\x20\x20const\x20calculations\x20=\x20'+JSON['stringify'](_0x145869)+';\x0a\x20\x20\x20\x20const\x20recalcFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20recalcValues\x20=\x20[];\x0a\x20\x20\x20\x20let\x20recalcIdx\x20=\x201;\x0a\x0a\x20\x20\x20\x20if\x20(calculations.total_items)\x20{\x0a\x20\x20\x20\x20\x20\x20recalcFields.push(\x27total_items\x20=\x20:\x27\x20+\x20recalcIdx++);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(allItems.length);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(calculations.total_qty\x20&&\x20calculations.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20calculations.total_qty.source.replace(\x27items.\x27,\x20\x27\x27).toUpperCase();\x0a\x20\x20\x20\x20\x20\x20const\x20totalQty\x20=\x20allItems.reduce(function(sum,\x20item)\x20{\x20return\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200);\x20},\x200);\x0a\x20\x20\x20\x20\x20\x20recalcFields.push(\x27total_qty\x20=\x20:\x27\x20+\x20recalcIdx++);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(totalQty);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20'+(_0x3c1332?_0xdfdd02(0x2b0)+_0x3c1332[_0xdfdd02(0x2b9)]()+_0xdfdd02(0x23c)+_0x3c1332+_0xdfdd02(0x1ff)+_0x2d4f8b['toUpperCase']()+_0xdfdd02(0x23c)+_0x2d4f8b+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20sum\x20+\x20(qty\x20*\x20price);\x0a\x20\x20\x20\x20\x20\x20},\x200);\x0a\x20\x20\x20\x20\x20\x20recalcFields.push(\x27total_amount\x20=\x20:\x27\x20+\x20recalcIdx++);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(totalAmount);\x0a\x20\x20\x20\x20}':_0x443d1b['leSNG'])+'\x0a\x0a\x20\x20\x20\x20if\x20(recalcFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20recalc\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20recalcIdx\x20=\x20this._appendUpdateAuditColumns(recalcFields,\x20recalcValues,\x20data,\x20eventContext,\x20recalcIdx);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20var\x20recalcSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20recalcFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20:\x27\x20+\x20recalcIdx;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcSql,\x20values:\x20recalcValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(recalcSql,\x20recalcValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20recalcResult\x20=\x20await\x20connection.execute(selectSql,\x20[primaryKeyValue],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20\x20\x20updatedHeader\x20=\x20this.formatResponseData(recalcResult.rows[0]);\x0a\x20\x20\x20\x20}\x0a':'')+'\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeUpdate\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce2\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB2\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_afterCtx\x20=\x20_CB2.buildCompositeUpdateAfterContext(headerData,\x20oldData,\x20updatedHeader,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems\x0a\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5b3a13[_0xdfdd02(0x220)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5e5367+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x117417+_0xdfdd02(0x26a));if(_0x24c5d4['readComposite']){let _0x4d080a;_0x5c433d?_0x4d080a=_0xdfdd02(0x1e4)+_0x5c433d['replace'](/\$1/g,':1')+'`;':_0x4d080a='const\x20detailSql\x20=\x20\x27SELECT\x20*\x20FROM\x20'+_0x5e5367+'\x20WHERE\x20'+_0x117417+_0xdfdd02(0x20c),_0x232425+=_0xdfdd02(0x1a8)+_0x5797d6+'\x27;\x0a\x20\x20\x20\x20'+_0x4d080a+'\x0a\x0a\x20\x20\x20\x20for\x20(const\x20header\x20of\x20headerResults)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20formattedHeader\x20=\x20this.formatResponseData(header);\x0a\x20\x20\x20\x20\x20\x20const\x20pkValue\x20=\x20formattedHeader[this.primaryKey]\x20||\x20header[this.primaryKey.toUpperCase()];\x0a\x20\x20\x20\x20\x20\x20const\x20detailResults\x20=\x20await\x20db.executeQuery(detailSql,\x20[pkValue]);\x0a\x20\x20\x20\x20\x20\x20compositeResults.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20...formattedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20detailResults\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20compositeResults.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20compositeResults\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20readComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a';}return _0x232425;})())+'\x0a}\x0a\x0amodule.exports\x20=\x20new\x20'+_0x401018+_0x422f95(0x28b);}function createOracleSubmoduleTemplate(_0x1eb227,_0x1baa43,_0x2574fa){const _0x4098b4=a0_0x2ced,_0xc9b5e8={'Aqbzx':_0x4098b4(0x272),'ToXCM':function(_0x17c97e,_0x340b97){return _0x17c97e>_0x340b97;},'yTaGE':_0x4098b4(0x2d3),'FkWkw':'update_existing','YfgOV':_0x4098b4(0x2ae),'MViGi':function(_0x3daea9,_0x4b5371){return _0x3daea9(_0x4b5371);},'ZVmmt':function(_0x3791c2,_0x458860,_0x4f7720){return _0x3791c2(_0x458860,_0x4f7720);},'IMYjI':'recordId','hsYSV':'items.','JRYQh':_0x4098b4(0x20e),'EKgdm':'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured','gXTru':function(_0x508fd7,_0x4199b0){return _0x508fd7!==_0x4199b0;},'IeYEI':function(_0x34d4e1,_0x594f55){return _0x34d4e1!==_0x594f55;}},_0x55a214=toCamelCase(_0x1baa43)+_0xc9b5e8[_0x4098b4(0x2cb)],_0xc5f33c=_0x2574fa['primaryKey']||'id',_0x2298a2=new Date()[_0x4098b4(0x1c3)](),_0x3c2907=Object[_0x4098b4(0x1ac)](_0x2574fa[_0x4098b4(0x213)]||{})['filter'](([,_0x177a36])=>_0x177a36)[_0x4098b4(0x23a)](([_0x175632])=>_0x175632),_0x4a5a2f=_0x2574fa['components']&&Array['isArray'](_0x2574fa[_0x4098b4(0x2cd)])&&_0xc9b5e8[_0x4098b4(0x204)](_0x2574fa[_0x4098b4(0x2cd)][_0x4098b4(0x1d7)],0x0),_0x941c5a=_0x2574fa[_0x4098b4(0x269)]||'SELECT\x20'+_0x2574fa[_0x4098b4(0x29c)][_0x4098b4(0x282)](',\x20')+'\x20FROM\x20'+_0x2574fa[_0x4098b4(0x220)],_0x112ca6=_0x941c5a[_0x4098b4(0x297)](/\\/g,'\x5c\x5c')['replace'](/'/g,'\x5c\x27'),_0x331fa4=JSON[_0x4098b4(0x288)](_0x2574fa['fieldName']),_0x597525=_0x2574fa[_0x4098b4(0x23e)]?JSON[_0x4098b4(0x288)](_0x2574fa[_0x4098b4(0x23e)]):_0xc9b5e8['yTaGE'],_0x13d3df=_0x2574fa[_0x4098b4(0x1c6)]?JSON['stringify'](_0x2574fa[_0x4098b4(0x1c6)]):_0xc9b5e8['yTaGE'],_0x32921e=(_0x2574fa['uniqueConstraints']||[])[_0x4098b4(0x206)](_0x2c380e=>_0x2c380e&&typeof _0x2c380e[_0x4098b4(0x2a6)]===_0x4098b4(0x270)&&Array['isArray'](_0x2c380e['fields'])&&_0x2c380e[_0x4098b4(0x24b)][_0x4098b4(0x1d7)]>0x0)['map'](_0x11ba4f=>[_0x11ba4f[_0x4098b4(0x2a6)][_0x4098b4(0x2bd)](),_0x11ba4f['fields']]),_0x53b616=JSON[_0x4098b4(0x288)](Object[_0x4098b4(0x2d0)](_0x32921e)),_0x58bf7d=_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action']['import']?{'enabled':!![],'upsertKeys':(_0x2574fa[_0x4098b4(0x218)]||{})[_0x4098b4(0x2c0)]||[_0xc5f33c],'upsertStrategy':(_0x2574fa['importConfig']||{})['upsertStrategy']||_0xc9b5e8[_0x4098b4(0x1e2)],'requiredFields':(_0x2574fa[_0x4098b4(0x218)]||{})[_0x4098b4(0x1cf)]||[],'validations':(_0x2574fa[_0x4098b4(0x218)]||{})['validations']||{},'lookupFields':(_0x2574fa['importConfig']||{})['lookupFields']||{},'excludeFromImport':(_0x2574fa[_0x4098b4(0x218)]||{})[_0x4098b4(0x231)]||[],'chunkSize':(_0x2574fa[_0x4098b4(0x218)]||{})[_0x4098b4(0x240)]||0x64}:null,_0x59a0fe=_0x58bf7d?JSON['stringify'](_0x58bf7d):_0xc9b5e8['yTaGE'],_0x28083a=_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa[_0x4098b4(0x213)][_0x4098b4(0x261)]?'\x27'+_0x112ca6+'\x27':_0xc9b5e8[_0x4098b4(0x276)],_0x599318=_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa[_0x4098b4(0x213)]['adjust']?_0x2574fa[_0x4098b4(0x1b2)]||{}:null,_0x2e268e=_0x599318?JSON[_0x4098b4(0x288)](_0x599318):_0xc9b5e8['yTaGE'],_0x3f2ea1=_0x2574fa['fieldPolicy']?',\x20'+JSON[_0x4098b4(0x288)](_0x2574fa['fieldPolicy']):'';let _0x3f5157=_0xc9b5e8['YfgOV'];_0x4a5a2f&&(_0x3f5157+='componentEngine\x20=\x20require(\x27@restforgejs/platform/src/utils/component-engine\x27).componentEngine;\x0a',_0x3f5157+='ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a');const _0x50db45=_0x2574fa[_0x4098b4(0x289)]?_0x4098b4(0x1da)+_0x55a214+_0x4098b4(0x1a6)+_0x1baa43+_0x4098b4(0x24c):'',_0x337671=_0x2574fa[_0x4098b4(0x289)]?_0x4098b4(0x1be)+_0x1baa43+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x49233a=_0x2574fa['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x20—\x20master\x20record\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x294)+_0xc5f33c+_0x4098b4(0x1ba)+_0xc5f33c+'\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Master\x20record\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';let _0x37b515='const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x55a214+_0x4098b4(0x1dd)+_0x1eb227+'/'+_0x1baa43+'\x27);\x0a\x0a//\x20Issue\x20#13:\x20map\x20nama\x20constraint\x20(lowercase,\x20tanpa\x20prefix)\x20->\x20field\x20penyebab\x20konflik,\x0a//\x20ditanam\x20dari\x20payload.uniqueConstraints\x20saat\x20codegen.\x20Map\x20kosong\x20{}\x20bila\x20payload\x20tidak\x0a//\x20membawa\x20uniqueConstraints\x20(semua\x20lookup\x20miss\x20->\x20fallback\x20omit\x20`details`).\x0aconst\x20DUP_CONSTRAINT_FIELDS\x20=\x20'+_0x53b616+';\x0a\x0a//\x20Ekstrak\x20nama\x20constraint\x20dari\x20error\x20Oracle\x20(\x22ORA-00001:\x20unique\x20constraint\x20(SCH.NAME)\x0a//\x20violated\x22),\x20normalisasi\x20lowercase\x20tanpa\x20prefix\x20schema.\x0afunction\x20extractConstraintName(error)\x20{\x0a\x20\x20if\x20(!error)\x20return\x20null;\x0a\x20\x20const\x20src\x20=\x20error.message\x20||\x20\x27\x27;\x0a\x20\x20const\x20m\x20=\x20src.match(/unique\x20constraint\x20\x5c(([^)]+)\x5c)/);\x0a\x20\x20if\x20(!m)\x20return\x20null;\x0a\x20\x20return\x20m[1].split(\x27.\x27).pop().toLowerCase();\x0a}\x0a\x0a//\x20Mengembalikan\x20map\x20{\x20field:\x20[pesan]\x20}\x20atau\x20null\x20(call-site\x20meng-omit\x20`details`).\x0afunction\x20buildDuplicateDetails(error,\x20lookup)\x20{\x0a\x20\x20const\x20name\x20=\x20extractConstraintName(error);\x0a\x20\x20if\x20(!name)\x20return\x20null;\x0a\x20\x20const\x20fields\x20=\x20lookup[name];\x0a\x20\x20if\x20(!Array.isArray(fields)\x20||\x20fields.length\x20===\x200)\x20return\x20null;\x0a\x20\x20const\x20msg\x20=\x20fields.length\x20>\x201\x0a\x20\x20\x20\x20?\x20\x27A\x20record\x20with\x20this\x20combination\x20of\x20values\x20already\x20exists\x27\x0a\x20\x20\x20\x20:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27;\x0a\x20\x20const\x20details\x20=\x20{};\x0a\x20\x20for\x20(const\x20f\x20of\x20fields)\x20details[f]\x20=\x20[msg];\x0a\x20\x20return\x20details;\x0a}\x0a'+_0x3f5157+_0x4098b4(0x234)+_0xc9b5e8[_0x4098b4(0x1aa)](toPascalCase,_0x1baa43)+_0x4098b4(0x21f)+_0x2298a2+_0x4098b4(0x1ed)+_0x1baa43+'\x0a*\x20Actions:\x20'+_0x3c2907['join'](',\x20')+_0x4098b4(0x25c)+_0x2574fa[_0x4098b4(0x220)]+_0x4098b4(0x1a4)+_0xc5f33c+'\x27;\x0a\x0a//\x20Component\x20configuration\x20untuk\x20export/import\x20(parsed\x20oleh\x20config-extractor\x20—\x20jangan\x20dimodifikasi)\x0aconst\x20componentConfig\x20=\x20{\x0a\x20\x20tableName:\x20\x27'+_0x2574fa['tableName']+_0x4098b4(0x1fc)+_0x331fa4+_0x4098b4(0x1ea)+_0x28083a+',\x0a\x20\x20columnFormats:\x20'+_0x597525+',\x0a\x20\x20fieldLabels:\x20'+_0x13d3df+_0x4098b4(0x22a)+_0x59a0fe+_0x4098b4(0x296)+_0x2e268e+',\x0a\x20\x20uploadConfig:\x20'+(_0x2574fa['uploadConfig']?JSON['stringify'](_0x2574fa[_0x4098b4(0x26b)]):_0xc9b5e8[_0x4098b4(0x276)])+',\x0a\x20\x20requestScope:\x20'+(_0x2574fa[_0x4098b4(0x289)]?JSON[_0x4098b4(0x288)](_0x2574fa['requestScope']):_0x4098b4(0x2d3))+_0x4098b4(0x281)+(_0x4a5a2f?'\x0a//\x20Initialize\x20component\x20engine\x20dengan\x20event\x20handlers\x20dari\x20payload\x0aconst\x20_componentPayload\x20=\x20{\x20components:\x20'+JSON['stringify'](_0x2574fa[_0x4098b4(0x2cd)])+_0x4098b4(0x1a7)+_0x1eb227+'/'+_0x1baa43+':\x20${result.componentsLoaded}\x20components`);\x0a\x20\x20}\x0a}).catch(err\x20=>\x20{\x0a\x20\x20console.error(`Failed\x20to\x20load\x20component\x20configuration\x20for\x20'+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x1bd):'')+_0x4098b4(0x2d4)+_0xc5f33c+'\x22,\x20\x22value\x22:\x20\x22your-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20Oracle\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a\x0a';_0x37b515+=_0xc9b5e8['ZVmmt'](buildRequestScopeMiddleware,_0x2574fa,_0x1baa43);_0x2574fa['action']&&_0x2574fa[_0x4098b4(0x213)][_0x4098b4(0x245)]&&(_0x37b515+=_0x4098b4(0x1ce)+_0x1eb227+'/'+_0x1baa43+'/datatables\x20-\x20Data\x20untuk\x20DataTables\x0arouter.post(\x27/datatables\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20req.body.search?.value\x20||\x20req.body.searchValue\x20||\x20req.body.search_value\x20||\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20req.body.searchBy\x20||\x20req.body.search_by\x20||\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage:\x20Math.min(parseInt(req.body.length\x20||\x20req.body.pagination?.perpage\x20||\x2010,\x2010),\x201000),\x0a\x20\x20\x20\x20\x20\x20start:\x20Math.max(parseInt(req.body.start\x20||\x200,\x2010),\x200),\x0a\x20\x20\x20\x20\x20\x20draw:\x20req.body.draw\x20||\x20\x271\x27\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20sort_columns\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20options.sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Fallback:\x20Handle\x20DataTables\x20standard\x20format\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][column]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20=\x20req.body[\x27order[0][column]\x27];\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][dir]\x27]\x20=\x20req.body[\x27order[0][dir]\x27];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20filters\x20dengan\x20sanitasi\x0a\x20\x20\x20\x20if\x20(req.body.filters\x20&&\x20typeof\x20req.body.filters\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20sanitizedFilters\x20=\x20{};\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(req.body.filters))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x27\x27\x20&&\x20value\x20!==\x20\x27all\x27\x20&&\x20value\x20!==\x20\x27-\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitizedFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(Object.keys(sanitizedFilters).length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.filters\x20=\x20sanitizedFilters;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Support\x20WHERE\x20conditions\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20options.where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Advanced\x20filters\x20support\x0a\x20\x20\x20\x20if\x20(req.body.advanced_filters\x20&&\x20Array.isArray(req.body.advanced_filters))\x20{\x0a\x20\x20\x20\x20\x20\x20options.advancedFilters\x20=\x20req.body.advanced_filters;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x55a214+'.getDatatables(options);\x0a\x0a\x20\x20\x20\x20//\x20Menambahkan\x20nomor\x20baris\x20untuk\x20DataTables\x0a\x20\x20\x20\x20if\x20(result.data\x20&&\x20Array.isArray(result.data))\x20{\x0a\x20\x20\x20\x20\x20\x20result.data\x20=\x20result.data.map((item,\x20index)\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20...item,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rownumerator:\x20options.start\x20+\x20index\x20+\x201\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json(result);\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x1baa43+_0x4098b4(0x1f1)+_0x1baa43+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action'][_0x4098b4(0x2ac)]&&(_0x37b515+=_0x4098b4(0x1e8)+_0x1eb227+'/'+_0x1baa43+'/lookup\x20-\x20Oracle\x20Dynamic\x20Lookup\x0arouter.get(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20const\x20oraRequestId\x20=\x20req.oraRequestId;\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27dynamic\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20search\x20=\x20req.query.search\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20if\x20(Array.isArray(search))\x20{\x0a\x20\x20\x20\x20\x20\x20search\x20=\x20search[0]\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Search\x20length\x20validation\x0a\x20\x20\x20\x20if\x20(search.length\x20>\x20100)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Search\x20Too\x20Long\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Search\x20parameter\x20must\x20not\x20exceed\x20100\x20characters\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(`[ORA-LKP]\x20${oraRequestId}\x20dynamic\x20search:\x20${search}`);\x0a\x0a\x20\x20\x20\x20//\x20Collect\x20extra\x20filters\x20dari\x20query\x20params\x0a\x20\x20\x20\x20const\x20extraFilters\x20=\x20{};\x0a\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(req.query))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(key\x20!==\x20\x27search\x27\x20&&\x20'+_0x55a214+'.validFields.includes(key)\x20&&\x20value)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20extraFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20const\x20list\x20=\x20Object.keys(extraFilters).length\x20>\x200\x20?\x0a\x20\x20\x20\x20\x20\x20await\x20'+_0x55a214+'.getLookupDataDynamic(search,\x20extraFilters)\x20:\x0a\x20\x20\x20\x20\x20\x20await\x20'+_0x55a214+_0x4098b4(0x26c)+_0x1baa43+_0x4098b4(0x279));_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa[_0x4098b4(0x213)]['lookup']&&(_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+'/lookup\x20-\x20Oracle\x20Static\x20Lookup\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20const\x20oraRequestId\x20=\x20req.oraRequestId;\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27static\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20static\x20for\x20POST\x20lookup\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(`[ORA-LKP]\x20${oraRequestId}\x20static\x20lookup:`,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20let\x20list;\x0a\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20New\x20format\x20dengan\x20where\x20clause\x20+\x20optional\x20select\x20dan\x20order\x0a\x20\x20\x20\x20\x20\x20list\x20=\x20await\x20'+_0x55a214+'.getLookupDataWithFilter(req.body);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Legacy\x20format\x20dengan\x20selected_tag\x0a\x20\x20\x20\x20\x20\x20const\x20selectedTag\x20=\x20req.body.selected_tag\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20list\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x21a)+_0x1baa43+_0x4098b4(0x279));_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action'][_0x4098b4(0x256)]&&(_0x37b515+=_0x4098b4(0x1ce)+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x226)+_0x55a214+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x55a214+'.validateData(req.body,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a'+(_0x4a5a2f?'\x0a\x20\x20\x20\x20//\x20Component\x20engine:\x20build\x20eventContext\x20untuk\x20model-level\x20event\x20lifecycle\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2574fa['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x55a214+'.addData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x55a214+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x55a214+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+'\x0a\x20\x20\x20\x20console.log(`'+_0x1baa43+'\x20data\x20added\x20successfully:\x20${result.'+_0xc5f33c+'\x20||\x20\x27new\x20record\x27}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1baa43+_0x4098b4(0x20d)+_0x1baa43+_0x4098b4(0x1a9)+_0x1baa43+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action']['update']&&(_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+'/update\x20-\x20Oracle\x20Update\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+_0xc5f33c+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x50db45+_0x4098b4(0x205)+_0x55a214+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x55a214+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a'+(_0x4a5a2f?_0x4098b4(0x2bf)+_0x2574fa[_0x4098b4(0x220)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x55a214+'.updateData(req.body,\x20eventContext'+_0x3f2ea1+_0x4098b4(0x202):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20mode\x20tanpa\x20events\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x1fa)+_0x3f2ea1+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20UPDATE\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+_0x4098b4(0x222)+_0x1baa43+_0x4098b4(0x2ba)+_0xc5f33c+_0x4098b4(0x1f8)+_0xc5f33c+'\x27]}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1baa43+_0x4098b4(0x1e1)+_0x1baa43+_0x4098b4(0x200)+_0x1baa43+_0x4098b4(0x263)+_0x1baa43+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x2574fa['action']&&_0x2574fa[_0x4098b4(0x213)]['adjust']&&(_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x221)+_0xc5f33c+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20adjust`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20adjustments\x20array\x0a\x20\x20\x20\x20if\x20(!req.body.adjustments\x20||\x20!Array.isArray(req.body.adjustments)\x20||\x20req.body.adjustments.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27adjustments\x20array\x20is\x20required\x20and\x20must\x20not\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x50db45+'\x0a\x20\x20\x20\x20const\x20adjustConfig\x20=\x20componentConfig.adjustConfig\x20||\x20{};\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a'+(_0x4a5a2f?_0x4098b4(0x2bf)+_0x2574fa[_0x4098b4(0x220)]+_0x4098b4(0x246)+_0x55a214+_0x4098b4(0x242)+_0x3f2ea1+_0x4098b4(0x284):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20mode\x20tanpa\x20events\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x55a214+'.adjustData(req.body,\x20adjustConfig,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20}'+_0x3f2ea1+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+'\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x1baa43+_0x4098b4(0x237)+_0xc5f33c+_0x4098b4(0x1f8)+_0xc5f33c+_0x4098b4(0x29e)+_0x1baa43+'\x20data\x20successfully\x20adjusted\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengadjust\x20data\x20'+_0x1baa43+_0x4098b4(0x22f)+_0x1baa43+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Oracle\x20unique\x20constraint\x20violation\x20(ORA-00001).\x20Adjust\x20beroperasi\x20dengan\x0a\x20\x20\x20\x20//\x20UPDATE\x20atomic\x20sehingga\x20ORA-00001\x20jarang\x20terpicu,\x20namun\x20handler\x20ini\x20tetap\x0a\x20\x20\x20\x20//\x20disertakan\x20untuk\x20parity\x20dengan\x20MySQL\x20(ER_DUP_ENTRY)\x20dan\x20PostgreSQL\x20(23505).\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adjusting\x20'+_0x1baa43+_0x4098b4(0x29d));if(_0x2574fa['action']&&_0x2574fa[_0x4098b4(0x213)]['workflow']){const _0x4cc96c=_0x2574fa[_0x4098b4(0x2da)]?JSON['stringify'](_0x2574fa['workflow']):'{}';_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+'/change-status\x20-\x20Oracle\x20Change\x20status\x20'+_0x1baa43+_0x4098b4(0x2b7)+_0xc5f33c+'\x27;\x0a\x20\x20\x20\x20const\x20recordId\x20=\x20req.body[primaryKey]\x20||\x20req.body.id;\x0a\x20\x20\x20\x20if\x20(!recordId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20or\x20id\x20is\x20required\x20for\x20change-status`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.status)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27status\x20is\x20required\x20for\x20change-status\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x50db45['replace'](/req\.body\[primaryKey\]/g,_0xc9b5e8['IMYjI'])+_0x4098b4(0x1a1)+_0x4cc96c+';\x0a\x20\x20\x20\x20workflowConfig._project\x20=\x20\x27'+_0x1eb227+'\x27;\x0a\x20\x20\x20\x20let\x20result\x20=\x20null;\x0a\x0a'+(_0x4a5a2f?_0x4098b4(0x2bf)+_0x2574fa[_0x4098b4(0x220)]+_0x4098b4(0x2c9)+_0x55a214+_0x4098b4(0x1a0):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x20(tetap\x20forward\x20authHeader\x20untuk\x20hook\x20JWT\x20forwarding)\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20req.body.updated_by\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x265))+'\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x1baa43+'\x20status\x20changed:\x20${result.workflow.previousStatus}\x20→\x20${result.workflow.newStatus}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20`Status\x20changed\x20from\x20${result.workflow.previousStatus}\x20to\x20${result.workflow.newStatus}`,\x0a\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20workflow:\x20result.workflow,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20change-status\x20'+_0x1baa43+_0x4098b4(0x1c4)+_0x1baa43+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Lock\x20acquisition\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27Failed\x20to\x20acquire\x20lock\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Resource\x20busy\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20changing\x20status\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}if(_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa[_0x4098b4(0x213)]['aggregate']){const _0x12a55b=_0x2574fa['aggregateConfig']?JSON[_0x4098b4(0x288)](_0x2574fa['aggregateConfig']):'{}';_0x37b515+=_0x4098b4(0x1ce)+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x1ee)+_0x12a55b+_0x4098b4(0x1de)+_0x55a214+'.aggregateData(req.body\x20||\x20{},\x20aggregateConfig);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengagregasi\x20data\x20'+_0x1baa43+_0x4098b4(0x2be)+_0x1baa43+_0x4098b4(0x29d);}_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa[_0x4098b4(0x213)]['delete']&&(_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x238)+_0x55a214+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20firstCondition.key,\x20value:\x20firstCondition.value\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!existingData.success\x20||\x20!existingData.data\x20||\x20existingData.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1baa43+_0x4098b4(0x298)+(_0x4a5a2f?_0x4098b4(0x2bf)+_0x2574fa[_0x4098b4(0x220)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x267):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20mode\x20tanpa\x20events\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x55a214+'.deleteData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20DELETE\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+'\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x1baa43+_0x4098b4(0x2cf)+_0x1baa43+_0x4098b4(0x2a5)+_0x1baa43+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action']['first']&&(_0x37b515+=_0x4098b4(0x1ce)+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x1d2)+_0xc5f33c+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20dan\x20where.value\x0a\x20\x20\x20\x20if\x20(!req.body.where.key\x20||\x20req.body.where.value\x20===\x20undefined\x20||\x20req.body.where.value\x20===\x20null\x20||\x20req.body.where.value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20key\x20and\x20value\x20are\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22'+_0xc5f33c+_0x4098b4(0x292)+JSON[_0x4098b4(0x288)](_0x2574fa['fieldName'])+';\x0a\x20\x20\x20\x20if\x20(!validFields.includes(req.body.where.key))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${req.body.where.key}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Convert\x20ke\x20array\x20format\x20untuk\x20kompatibilitas\x20dengan\x20model.getData()\x20→\x20buildComplexWhereClause()\x0a\x20\x20\x20\x20const\x20getPayload\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20req.body.where.key,\x20value:\x20req.body.where.value\x20}],\x0a\x20\x20\x20\x20\x20\x20select:\x20req.body.select\x0a\x20\x20\x20\x20};\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x55a214+'.getData(getPayload);\x0a'+_0x337671+'\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mendapatkan\x20data\x20'+_0x1baa43+_0x4098b4(0x1ef)+_0x1baa43+_0x4098b4(0x29d));_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action'][_0x4098b4(0x1ca)]&&(_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x21e)+JSON['stringify'](_0x2574fa[_0x4098b4(0x29c)]||[])+_0x4098b4(0x1b3)+_0x55a214+'.getList(options);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20response\x20berdasarkan\x20mode\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20pagination:\x20result.pagination,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Data\x20retrieved\x20successfully\x27\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x1baa43+_0x4098b4(0x1c8)+_0x1baa43+_0x4098b4(0x2a7));if(_0x2574fa[_0x4098b4(0x266)]&&_0x2574fa[_0x4098b4(0x266)][_0x4098b4(0x26d)]){const _0x424142=_0x2574fa['masterDetail']['detailTable'][_0x4098b4(0x2ca)]('.')['pop'](),_0x4cff3d=_0x1baa43['replace'](/-/g,'_'),_0x43ab7d=_0x2574fa['masterDetail'][_0x4098b4(0x215)]||null,_0x2e164=_0x2574fa[_0x4098b4(0x266)]?.[_0x4098b4(0x201)]?.['autoCalculateFields']?.['total_amount']?.[_0x4098b4(0x1e0)]||'',_0x290f95=_0x2e164[_0x4098b4(0x2ca)]('*')['map'](_0x1ee0a8=>_0x1ee0a8[_0x4098b4(0x225)]()),_0x26da20=_0x43ab7d?.['total_qty']?.['source']?.[_0x4098b4(0x297)](_0xc9b5e8[_0x4098b4(0x227)],'')||'',_0x65f8fe=_0x290f95[0x0]||_0x26da20,_0x43bcc7=_0x290f95[0x1]||_0xc9b5e8[_0x4098b4(0x19f)];if(_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa[_0x4098b4(0x213)]['createComposite']){const _0x18c5f5=_0x43ab7d?_0x4098b4(0x208)+JSON['stringify'](_0x43ab7d)+_0x4098b4(0x1c1)+_0x424142+_0x4098b4(0x290)+_0x424142+_0x4098b4(0x1d0)+(_0x65f8fe?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20data.total_amount\x20=\x20data.'+_0x424142+'.reduce(function(sum,\x20item)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20qty\x20=\x20Number(item.'+_0x65f8fe+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20price\x20=\x20Number(item.'+_0x43bcc7+_0x4098b4(0x1e9):_0xc9b5e8[_0x4098b4(0x27b)])+'\x0a\x20\x20\x20\x20console.log(\x27Calculated\x20totals:\x27,\x20{\x20total_items:\x20data.total_items,\x20total_qty:\x20data.total_qty,\x20total_amount:\x20data.total_amount\x20});\x0a\x20\x20\x20\x20':'';_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+_0x4098b4(0x24e)+_0x1baa43+'/create-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x4cff3d+_0x4098b4(0x1f4)+_0x4cff3d+'\x22\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20var\x20data\x20=\x20req.body.'+_0x4cff3d+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x55a214+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20headerDataForValidation\x20=\x20Object.assign({},\x20data);\x0a\x20\x20\x20\x20\x20\x20delete\x20headerDataForValidation.'+_0x424142+_0x4098b4(0x1d9)+_0x55a214+'.validateData(headerDataForValidation,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!data.'+_0x424142+'\x20||\x20!Array.isArray(data.'+_0x424142+')\x20||\x20data.'+_0x424142+'.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x424142+'\x22\x20must\x20be\x20a\x20non-empty\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20'+_0x18c5f5+_0x4098b4(0x27d)+_0x2574fa[_0x4098b4(0x220)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x2574fa['masterDetail'][_0x4098b4(0x2bc)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x2574fa['masterDetail'][_0x4098b4(0x1db)]+_0x4098b4(0x2a1)+_0x55a214+_0x4098b4(0x271)+_0x1baa43+_0x4098b4(0x273)+_0x1baa43+'\x20data\x20successfully\x20created\x20(with\x20detail\x20items)\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20create\x20'+_0x1baa43+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x202291)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20creating\x20'+_0x1baa43+_0x4098b4(0x29d);}_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action'][_0x4098b4(0x1b5)]&&(_0x37b515+=_0x4098b4(0x1ce)+_0x1eb227+'/'+_0x1baa43+'/update-composite\x20-\x20Oracle\x20Composite\x20update\x20(master-detail)\x0arouter.post(\x27/update-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x1baa43+'/update-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x4cff3d+_0x4098b4(0x1f4)+_0x4cff3d+_0x4098b4(0x1c9)+_0x4cff3d+';\x0a\x0a\x20\x20\x20\x20if\x20(!data.'+_0xc5f33c+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Primary\x20key\x20('+_0xc5f33c+_0x4098b4(0x217)+_0x49233a+'\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x55a214+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20headerDataForValidation\x20=\x20Object.assign({},\x20data);\x0a\x20\x20\x20\x20\x20\x20delete\x20headerDataForValidation.'+_0x424142+';\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20validation\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x250)+_0x424142+_0x4098b4(0x209)+_0x424142+_0x4098b4(0x21c)+_0x424142+_0x4098b4(0x274)+_0x424142+'\x22\x20must\x20be\x20an\x20object\x20with\x20structure\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x0a\x20\x20\x20\x20var\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2574fa[_0x4098b4(0x220)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x2574fa[_0x4098b4(0x266)][_0x4098b4(0x2bc)]+_0x4098b4(0x2a9)+_0x2574fa['masterDetail']['foreignKey']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x24d)+_0x1baa43+'\x20composite\x20update\x20successful:\x20'+_0xc5f33c+_0x4098b4(0x1d8)+_0xc5f33c+');\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1baa43+_0x4098b4(0x253)+_0x1baa43+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1baa43+_0x4098b4(0x2d5)+_0x1baa43+_0x4098b4(0x29d)),_0x2574fa[_0x4098b4(0x213)]&&_0x2574fa['action']['readComposite']&&(_0x37b515+='//\x20POST\x20/api/'+_0x1eb227+'/'+_0x1baa43+'/read-composite\x20-\x20Oracle\x20Read\x20header\x20with\x20detail\x20items\x0arouter.post(\x27/read-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x1baa43+_0x4098b4(0x1fe)+_0xc5f33c+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x55a214+'.readComposite(req.body);\x0a\x0a\x20\x20\x20\x20console.log(\x27'+_0x1baa43+'\x20composite\x20read\x20successful:\x20\x27\x20+\x20(result.count\x20||\x200)\x20+\x20\x27\x20record(s)\x27);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20read\x20'+_0x1baa43+_0x4098b4(0x28e)+_0x1baa43+_0x4098b4(0x1a5));}if(_0xc9b5e8[_0x4098b4(0x2aa)](_0x2574fa[_0x4098b4(0x213)]?.[_0x4098b4(0x2b5)],![])){const _0x4a810a={'datatables':!!_0x2574fa['action']?.['datatables'],'read':!!_0x2574fa['action']?.['read'],'first':!!_0x2574fa[_0x4098b4(0x213)]?.[_0x4098b4(0x1ae)],'create':!!_0x2574fa['action']?.['create'],'update':!!_0x2574fa['action']?.['update'],'delete':!!_0x2574fa[_0x4098b4(0x213)]?.[_0x4098b4(0x210)],'lookup':!!_0x2574fa['action']?.['lookup'],'export':!!_0x2574fa[_0x4098b4(0x213)]?.[_0x4098b4(0x261)],'import':!!_0x2574fa[_0x4098b4(0x213)]?.['import'],'info':_0xc9b5e8[_0x4098b4(0x27e)](_0x2574fa[_0x4098b4(0x213)]?.['info'],![])};_0x37b515+=_0x4098b4(0x1df)+JSON['stringify'](_0x4a810a)+_0x4098b4(0x1d3)+_0x55a214+_0x4098b4(0x260)+_0x1baa43+'\x27,\x0a\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x1eb227+_0x4098b4(0x291)+_0x2298a2+'\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Oracle\x20info\x20error:\x27,\x20error);\x0a\x20\x20\x20\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Info\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20endpoint\x20info\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});';}else _0x37b515+=_0x4098b4(0x2c4);return _0x37b515+='\x0a//\x20Oracle\x20health\x20check\x0arouter.get(\x27/health\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20connectionInfo\x20=\x20await\x20'+_0x55a214+_0x4098b4(0x278)+_0x1baa43+_0x4098b4(0x27c)+_0x1baa43+_0x4098b4(0x28d),_0x37b515+=_0x4098b4(0x24f),_0x37b515;}module['exports']={'createOracleMainModuleTemplate':createOracleMainModuleTemplate,'createOracleModelTemplate':createOracleModelTemplate,'createOracleSubmoduleTemplate':createOracleSubmoduleTemplate};
1
+ (function(_0x26c7ba,_0x2b0892){const _0x1d90d6=a0_0x3ae7,_0x4590ff=_0x26c7ba();while(!![]){try{const _0x29d09f=-parseInt(_0x1d90d6(0x10f))/0x1+-parseInt(_0x1d90d6(0x1af))/0x2*(parseInt(_0x1d90d6(0x134))/0x3)+parseInt(_0x1d90d6(0x133))/0x4+-parseInt(_0x1d90d6(0x156))/0x5+-parseInt(_0x1d90d6(0xef))/0x6+parseInt(_0x1d90d6(0x138))/0x7*(parseInt(_0x1d90d6(0x189))/0x8)+-parseInt(_0x1d90d6(0xe5))/0x9*(-parseInt(_0x1d90d6(0x1bc))/0xa);if(_0x29d09f===_0x2b0892)break;else _0x4590ff['push'](_0x4590ff['shift']());}catch(_0x13b674){_0x4590ff['push'](_0x4590ff['shift']());}}}(a0_0x397c,0x3b89b));function toCamelCase(_0x234ddc){const _0x32a07c=a0_0x3ae7;if(!_0x234ddc||typeof _0x234ddc!=='string')return'';return _0x234ddc[_0x32a07c(0x15b)](/(?:^\w|[A-Z]|\b\w)/g,(_0x554256,_0x4d58dc)=>{const _0x5ad52f=_0x32a07c;return _0x4d58dc===0x0?_0x554256[_0x5ad52f(0x1c7)]():_0x554256[_0x5ad52f(0x1e5)]();})[_0x32a07c(0x15b)](/\s+/g,'')[_0x32a07c(0x15b)](/[-_]/g,'');}function toPascalCase(_0x4baa03){const _0x289ce5=a0_0x3ae7,_0x2809bc={'RJAvo':'string','gdyMH':function(_0x290eb1,_0x5c9d29){return _0x290eb1(_0x5c9d29);},'lNXTS':function(_0x4d51d7,_0x548aef){return _0x4d51d7+_0x548aef;}};if(!_0x4baa03||typeof _0x4baa03!==_0x2809bc[_0x289ce5(0xd7)])return'';const _0x1c0579=_0x2809bc[_0x289ce5(0x1c4)](toCamelCase,_0x4baa03);return _0x2809bc['lNXTS'](_0x1c0579['charAt'](0x0)[_0x289ce5(0x1e5)](),_0x1c0579[_0x289ce5(0x17e)](0x1));}function a0_0x3ae7(_0x5e97ce,_0x2266fc){_0x5e97ce=_0x5e97ce-0xd5;const _0x397c7c=a0_0x397c();let _0x3ae7fc=_0x397c7c[_0x5e97ce];if(a0_0x3ae7['CEcgLL']===undefined){var _0x51ef93=function(_0x2a58d1){const _0x11cbb6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3eb080='',_0x2be156='';for(let _0x23198d=0x0,_0x502b29,_0x84d56,_0x418346=0x0;_0x84d56=_0x2a58d1['charAt'](_0x418346++);~_0x84d56&&(_0x502b29=_0x23198d%0x4?_0x502b29*0x40+_0x84d56:_0x84d56,_0x23198d++%0x4)?_0x3eb080+=String['fromCharCode'](0xff&_0x502b29>>(-0x2*_0x23198d&0x6)):0x0){_0x84d56=_0x11cbb6['indexOf'](_0x84d56);}for(let _0x3e1ceb=0x0,_0x5b77e9=_0x3eb080['length'];_0x3e1ceb<_0x5b77e9;_0x3e1ceb++){_0x2be156+='%'+('00'+_0x3eb080['charCodeAt'](_0x3e1ceb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2be156);};a0_0x3ae7['QnHeGs']=_0x51ef93,a0_0x3ae7['nXyFHN']={},a0_0x3ae7['CEcgLL']=!![];}const _0x2628d0=_0x397c7c[0x0],_0x14edda=_0x5e97ce+_0x2628d0,_0x149baf=a0_0x3ae7['nXyFHN'][_0x14edda];return!_0x149baf?(_0x3ae7fc=a0_0x3ae7['QnHeGs'](_0x3ae7fc),a0_0x3ae7['nXyFHN'][_0x14edda]=_0x3ae7fc):_0x3ae7fc=_0x149baf,_0x3ae7fc;}function a0_0x397c(){const _0x17692d=['ks4G','Bg9VA3vWrMLLBgrZ','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9icr7D2HLCMvdBgf1C2v9ie9srevsiejzia','oMaSigvYCI5TzxnZywDLktSkFsK7cG','wfzzEeu','cGOGicaGy29UC3qGzgv0ywLSt3bLCMf0Aw9UCYa9igrHDgfBzgv0ywLSs2v5xsb8Fcb7FtSkicaGignVBNn0ihSGAw5Zzxj0oIbPBNnLCNrjDgvTCYa9ifTDlcb1CgrHDgu6ihvWzgf0zuL0zw1Zid0Gw10SigrLBgv0ztOGzgvSzxrLsxrLBxmGpsbBxsb9id0Gzgv0ywLSt3bLCMf0Aw9UCZSkcIaGicbJB25ZDcbKzwXLDgvKsxrLBxmGpsbBxtSkicaGignVBNn0ihvWzgf0zwrjDgvTCYa9ifTDoWOGicaGy29UC3qGAw5Zzxj0zwrjDgvTCYa9ifTDoWOkicaGic8VideUierftevursbVCgvYyxrPB25ZcIaGicbMB3iGkgnVBNn0igL0zw0GB2yGzgvSzxrLsxrLBxmPihSkicaGicaGAwyGkcfPDgvTw2rLDgfPBfbRxsKGDgHYB3CGBMv3ievYCM9YkcDnAxnZAw5NicCGkYbKzxrHAwXqAYaRicCGAw4GzgvSzxrLig9WzxjHDgLVBICPoWOGicaGicbJB25ZDcbKzwXtCwWGpsaNrevmrvrfiezst00GjYaRigrLDgfPBfrHyMXLrNvSBcaRicCGv0HfuKuGjYaRigrLDgfPBfbRicSGjYa9idOXjZSkicaGicaGyxDHAxqGy29UBMvJDgLVBI5LEgvJDxrLkgrLBfnXBcWGw2L0zw1Bzgv0ywLSugTDxsWGEYbHDxrVq29TBwL0oIbMywXZzsb9ktSkicaGicaGzgvSzxrLzeL0zw1ZlNb1C2GOAxrLBsK7cIaGicb9cIaGicbJB25ZB2XLlMXVzYGNrgvSzxrLzcaNicSGzgvSzxrLzeL0zw1ZlMXLBMD0AcaRicCGzgv0ywLSigL0zw0OCYKNktSkcIaGicaVlYaYlIbvuerbveuGB3bLCMf0Aw9UCWOGicaGzM9YicHJB25ZDcbPDgvTig9MihvWzgf0zuL0zw1Zksb7cIaGicaGigLMicGHAxrLBvTKzxrHAwXqA10PihrOCM93ig5LDYbfCNjVCIGNtwLZC2LUzYaNicSGzgv0ywLSugSGkYaNigLUihvWzgf0zsbVCgvYyxrPB24NktSk','C2XPy2u','y29UC3rYywLUDhm','lY8Gue9tvcaVyxbPlW','id09psaNmsCPoW','C3bSAxq','CwPAsgK','DhLWzq','igrHDgeGC3vJy2vZC2z1BgX5igfKANvZDgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fKANvZDcbKyxrHia','C291CMnL','cIaGlY8GrMXHzYb1BNr1AYbZzwXMlwrVy3vTzw50Aw5NiefqssaOzw5KCg9PBNqGl2LUzM8PcIaGDgHPCY5OyxnwAwv3uxvLCNKGpsa','A2fJAxC','ntKWnZC2t3r3vNL3','DxbSB2fKq29UzMLN','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGih0PoWOGicaGicaGih0kicaGicaGFsbJyxrJAcaOy2HLy2TfCNjVCIKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMvYAwzPy2f0Aw9UiezHAwXLzcCScIaGicaGicaGicbTzxnZywDLoIaNq291BgqGBM90ihzLCMLMEsbKyxrHigv4Axn0zw5JzsbIzwzVCMuGzgvSzxrLjYWkicaGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8Gy2HLy2TfCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOk','yM9VBgvHBG','jYKGEWOGicaGicaGignVBNrPBNvLoYaVlYbWCMLTyxj5igTLEsbZDwrHAcbHzgekicaGicaGFqOkicaGicaGlY8Gq2HLy2SGAMLRysbHzgeGu1fmigv4ChjLC3nPB24GzgvUz2fUigfSAwfZicHTzw5Nz3vUywTHBIbbuYKkicaGicaGy29UC3qGywXPyxnszwDLEca9ig5LDYbszwDfEhaOjYGUkYLCxhmRyxnCxhmRkfXCDYSPjcCSicDPjYK7cIaGicaGignVBNn0igfSAwfZtwf0y2GGpsbJB2X1Bw4UBwf0y2GOywXPyxnszwDLEcK7cIaGicaGigLMicHHBgLHC01HDgnOksb7cIaGicaGicaGy29UC3qGzxHWCMvZC2LVBIa9igfSAwfZtwf0y2HBmv0UDhjPBsGPoWOGicaGicaGignVBNn0igfSAwfZid0GywXPyxnnyxrJAfSYxs50CMLTkcK7cIaGicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7zxHWCMvZC2LVBN0GqvmGjhTHBgLHC31GoWOGicaGicaGihrLEhrgAwvSzca9igfSAwfZoWOGicaGicaGigfSAwfZrMLLBgqGpsbHBgLHCZSkicaGicaGicbICMvHAZSkicaGicaGFqOkicaGicaGlY8Gq2HLy2SGAMLRysbZAw1WBguGzMLLBgqGBMfTzqOGicaGicbPzIaODgHPCY52ywXPzezPzwXKCY5PBMnSDwrLCYHJB2X1Bw4PihX8ihzHBgLKvgv4DezPzwXKCY5PBMnSDwrLCYHJB2X1Bw4Pksb7cIaGicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7y29SDw1UFwa7cIaGicaGicaGDgv4DezPzwXKid0Gy29SDw1UoWOGicaGicaGigjYzwfRoWOGicaGicb9cGOGicaGicaVlYbdB21WDxrLzcbJB2X1Bw4kicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7y29SDw1UFwa7cIaGicaGihrLEhrgAwvSzca9ignVBhvTBJSkicaGih0kcIaGicbSzxqGCxvLCNKGpsbGu0vmrunuicr7C2vSzwn0q2XHDxnLFsbguK9nicr7DgHPCY5NzxruywjSzvnVDxjJzsGNCMvHzcCPFsa','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','jZSkicaGigXLDcb0zxH0rMLLBgqGpsaN','cGOGicaGy29UC29Szs5SB2COya','jYK7cGOVlYbjC3n1zsaJmtm6ig1HCcbUyw1HignVBNn0CMfPBNqGkgXVD2vYy2fZzsWGDgfUCgeGChjLzML4ksaTpIbMAwvSzcbWzw55zwjHyIbRB25MBgLRlaOVlYbKAxrHBMfTigrHCMKGCgf5Bg9Hzc51BMLXDwvdB25ZDhjHAw50CYbZywf0ignVzgvNzw4Uie1HCcbRB3nVBMCGE30GyMLSysbWyxLSB2fKihrPzgfRcI8Vig1LBwjHD2eGDw5PCxvLq29UC3rYywLUDhmGkhnLBxvHigXVB2T1CcbTAxnZic0+igzHBgXIywnRig9TAxqGygrLDgfPBhnGks4ky29UC3qGrfvqx0nptLnuuKfjtLrFrKLftertid0G','cIaGyc50CMLTkcK7cIaGyMfZzvf1zxj5id0GDgHPCY5JB252zxj0vg9pCMfJBgvtuuWOyMfZzvf1zxj5ktSkicbYzxr1CM4GyMfZzvf1zxj5oW','cIaGicb9','cI8QkGOGkIbdB21WB3nPDguGDxbKyxrLic0GvxbKyxrLigHLywrLCIb3AxrOigDYyw51BgfYigrLDgfPBcbVCgvYyxrPB25ZicHpCMfJBguPcIaQlWPHC3LUyYb1CgrHDgvdB21WB3nPDguOzgf0ysWGzxzLBNrdB250zxH0id0GBNvSBcKGEWOGignVBNn0ignVBM5Ly3rPB24GpsbHD2fPDcbKyI5NzxrdB25Uzwn0Aw9UkcK7cIaGDhj5ihSkicaGignVBNn0ihbYAw1HCNLlzxLwywX1zsa9igrHDgfBDgHPCY5WCMLTyxj5s2v5xtSkicaGigLMicGHChjPBwfYEuTLEvzHBhvLksb7cIaGicaGihrOCM93ig5LDYbfCNjVCIGNuhjPBwfYEsbRzxKGjYaRihrOAxmUChjPBwfYEuTLEsaRicCGAxmGCMvXDwLYzwqGzM9YihvWzgf0zsCPoWOGicaGFqOkicaGic8VienOzwnRigLMihjLy29YzcbLEgLZDhmGkgfSC28GC2vYDMvZigfZihbYzwzLDgnOig9SzerHDgeGzM9YigHVB2TZkqOGicaGy29UC3qGy2HLy2TtCwWGpsaNu0vmrunuicOGrLjptsaNicSGDgHPCY53CML0zvnVDxjJzsaRicCGv0HfuKuGjYaRihrOAxmUChjPBwfYEuTLEsaRicCGpsa6msC7cIaGicbJB25ZDcbJAgvJA1jLC3vSDca9igf3ywL0ignVBM5Ly3rPB24UzxHLy3v0zsHJAgvJA1nXBcWGw3bYAw1HCNLlzxLwywX1zv0SihSGyxv0B0nVBw1PDdOGzMfSC2uSig91DezVCM1HDdOGB3jHy2XLzgiUt1vux0zpuK1bvf9pqKPfq1qGFsK7cIaGicbPzIaOiwnOzwnRuMvZDwX0lNjVD3mGFhWGy2HLy2Tszxn1BhqUCM93CY5Szw5NDgGGpt09idaPihSkicaGicaGDgHYB3CGBMv3ievYCM9YkcDszwnVCMqGBM90igzVDw5KjYK7cIaGicb9cGOGicaGy29UC3qGB2XKrgf0ysa9ihrOAxmUzM9YBwf0uMvZCg9UC2veyxrHkgnOzwnRuMvZDwX0lNjVD3nBmf0PoWOkicaGic8Viev4DhjHy3qGAgvHzgvYigrHDgekicaGignVBNn0igHLywrLCKrHDgeGpsb7ic4UlMrHDgeGFtSkicaGignVBNn0igrLDgfPBeTLEsa9icC','jYWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDpCMfJBguGAw5MBYbLCNjVCJONlcbLCNjVCIK7cIaGicbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUzM8GrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGzMv0y2HPBMCGzw5KCg9PBNqGAw5MBYCScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoW','zMLLBgrqB2XPy3K','cI8VieDLBMvYyxrLzcbMCM9TihjLCxvLC3rty29WzsbJB25MAwD1CMf0Aw9UigLUihbHEwXVywqGsLnptGPYB3v0zxiUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGigLMicHYzxeUBwv0Ag9Kice9psaNue9tvcCPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIbUBYbHDxrOignVBNrLEhqGkgvUzhbVAw50ihDPDgHVDxqGyxv0AcbTAwrKBgv3yxjLkqOGigLMicGHCMvXlNvZzxiPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIb1C2vYigHHCYbIExbHC3mGCM9SzqOGignVBNn0ihvZzxjsB2XLCYa9ihjLCs51C2vYlNjVBgvZihX8ifTDoWOGignVBNn0igj5CgfZC1jVBgvZid0G','l2zPCNn0ic0GtwvUzgfWyxrRyw4Gzgf0ysbIzxjKyxnHCMTHBIbRCML0zxjPyqPYB3v0zxiUCg9ZDcGNl2zPCNn0jYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8Vie5VCM1HBgL6ztOGyxjYyxKGmsbLBgvTzw4GW6lIGkdIGjKGB2jQzwn0icHIywnRD2fYzcbJB21WyxrPyMXLkqOGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPicyMihjLCs5IB2r5lNDOzxjLlMXLBMD0Aca9pt0GmsKGEWOGicaGicbYzxeUyM9KEs53AgvYzsa9ihjLCs5IB2r5lNDOzxjLwZbDoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLignSyxvZzsddOUkcRokaNsbOyxj1CYbVyMPLy3qGDhvUz2DHBcb7A2v5lcb2ywX1zx0kicaGigLMicGHCMvXlMjVzhKUD2HLCMuGFhWGDhLWzw9MihjLCs5IB2r5lNDOzxjLice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj1bYB3bLCNr5ihDOzxjLigLZihjLCxvPCMvKigfZihTRzxKSihzHBhvLFsbVyMPLy3qNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6ici','C3rYAw5N','cGOGicaGlY8GqNvPBgqGzxzLBNrdB250zxH0ihvUDhvRignVBxbVC2L0zsbOB29RCWOGicaGDMfYigv2zw50q29UDgv4Dca9ig51BgW7cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGigv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','id0GjW','zMLLBgrwywXPzgf0Aw9U','igrHDgeNlaOGicaGicbKzxrHAwXZoIbLCNjVCI5TzxnZywDLlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','cIaGicaVlYbjBNrLz3jHDgvKihrYyw5Zywn0Aw9UigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGihrYEsb7cIaGicaGignVBNn0igv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9ifDirvjfifvquevska','jYWGjW','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','cIaGicb9ksK7cIaGicbHD2fPDcb0AgLZlNnLDenHy2HLzeXVB2T1CcHJywnOzu9WDgLVBNmSignHy2HLrgf0ysWGj3n0yxrPyYCPoWOkicaGic8VifjLDhvYBIbKzw5Nyw4GC2vSzwn0zwqGzMXHzWOGicaGCMv0DxjUigrHDgeUBwfWkgL0zw0Gpt4GEWOGicaGicbJB25ZDcbYB3CGpsb7cIaGicaGicaGAwq6igL0zw0U','igrHDgeGzgvSzxrLzcbZDwnJzxnZzNvSBhLGktSkcIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5YzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NAgfWDxmGzgf0ysa','jYWGzw5KCg9PBNroyw1Llcb1CgXVywrdB25MAwCPoWOGicaGicaGicaGicaGigXVz2DLCI5PBMzVkhSGzxzLBNq6icD1CgXVywrFCM91DgvZx3jLz2LZDgvYzwqNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbMAwvSzhm6ie9IAMvJDc5RzxLZkhvWBg9HzenVBMzPzY5MAwvSzhmGFhWGE30Pih0SigbvCgXVywqGCM91DgvZihjLz2LZDgvYzwqGzM9Yicr7zw5KCg9PBNroyw1LFwaPoWOGicaGicaGicaGicb9cIaGicaGicaGicb9ignHDgnOicH1CgXVywrfCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3vWBg9Hzf9YzwDPC3rYyxrPB25FzxjYB3iNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbLCNjVCJOGDxbSB2fKrxjYB3iUBwvZC2fNzsb9lcbGvxbSB2fKihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhT1CgXVywrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGFqOGicaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGicbJB25ZB2XLlMvYCM9YkgbfCNjVCIbSB2fKAw5Nig1VzhvSzsaKE2zPBgv9igzYB20G','A2v5CW','zgvZA3jPChnP','sgjkAKC','cIOGrgf0ywjHC2u6ie9YywnSzqOQlWPJBgfZCYa','ksKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0EsaI','jZSkicaGignVBNn0igzRid0GjW','cIaGicaVlYaTls0Gsg9VAZOGB25bzNrLCKnVBxbVC2L0zvvWzgf0zsaTls0kicaGigLMicHLDMvUDenVBNrLEhqGjIyGzxzLBNrdB250zxH0lMnVBxbVBMvUDevUz2LUzsKGEWOGicaGicb2yxiGx2nLmIa9igv2zw50q29UDgv4Dc5JB21WB25LBNrfBMDPBMu7cIaGicaGihzHCIbFq0iYid0GzxzLBNrdB250zxH0lKnVBNrLEhrcDwLSzgvYoWOGicaGicb2yxiGx2fMDgvYq3r4id0Gx0ncmI5IDwLSzenVBxbVC2L0zvvWzgf0zufMDgvYq29UDgv4DcHOzwfKzxjeyxrHlcbVBgreyxrHlcb1CgrHDgvKsgvHzgvYlcb7cIaGicaGicaGAw5Zzxj0zwq6igLUC2vYDgvKsxrLBxmScIaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlaOGicaGicaGigrLBgv0zwq6igrLBgv0zwrjDgvTCWOGicaGicb9lcb7cIaGicaGicaGDgfIBgvoyw1LoIaN','cIaGicaVlYbwywXPzgfZAsbKyw4GC2fUAxrHC2KGAgvHzgvYigrHDgeGzgvUz2fUignVBNn0CMfPBNqGkhrLCM1HC3vRigHHC2GPcIaGicbPzIaODhLWzw9Mia','BMfTzq','Dg90ywXFyw1VDw50','odK5oti4A3Lutevw','CMvHzenVBxbVC2L0zq','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','jYWkicbMAwvSze5HBwu6ia','l2XVB2T1CcaTie9YywnSzsbeEw5HBwLJieXVB2T1CaPYB3v0zxiUz2v0kcCVBg9VA3vWjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGy29UC3qGB3jHuMvXDwvZDeLKid0GCMvXlM9YyvjLCxvLC3rjzdSkcIaGDhj5ihSkicaGignVBNn0ihjLCxvLC3rnB2rLid0GCMvXlMHLywrLCNnBj3GTCMvXDwvZDc1TB2rLj107cGOGicaGAwyGkhjLCxvLC3rnB2rLice9psaNzhLUyw1PyYCPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGuMvXDwvZDcbnB2rLjYWkicaGicaGicbTzxnZywDLoIaNwc1szxf1zxn0lu1VzguGAgvHzgvYig11C3qGyMuGC2v0ihrVigr5BMfTAwmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigXLDcbZzwfYy2GGpsbYzxeUCxvLCNKUC2vHCMnOihX8icCNoWOGicaGAwyGkefYCMf5lMLZqxjYyxKOC2vHCMnOksKGEWOGicaGicbZzwfYy2GGpsbZzwfYy2HBmf0GFhWGjYC7cIaGicb9cGOGicaGlY8Gu2vHCMnOigXLBMD0Acb2ywXPzgf0Aw9UcIaGicbPzIaOC2vHCMnOlMXLBMD0Aca+ideWmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNu2vHCMnOifrVBYbmB25NjYWkicaGicaGicbTzxnZywDLoIaNu2vHCMnOihbHCMfTzxrLCIbTDxn0ig5VDcbLEgnLzwqGmtaWignOyxjHy3rLCNmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNnVBguUBg9NkgbBt1jbluXluf0GjhTVCMfszxf1zxn0swr9igr5BMfTAwmGC2vHCMnOoIaKE3nLyxjJAh1GktSkcIaGicaVlYbdB2XSzwn0igv4DhjHigzPBhrLCNmGzgfYAsbXDwvYEsbWyxjHBxmkicaGignVBNn0igv4DhjHrMLSDgvYCYa9ihT9oWOGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOCMvXlNf1zxj5ksKGEWOGicaGicbPzIaOA2v5ice9psaNC2vHCMnOjYaMjIa','cIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','zM9YBxvSyq','oWOkicbZDxbLCIGN','cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','l3jLywqTy29TCg9ZAxrLic0Gt3jHy2XLifjLywqGAgvHzgvYihDPDgGGzgv0ywLSigL0zw1ZcNjVDxrLCI5WB3n0kcCVCMvHzc1JB21WB3nPDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGy29UC29Szs5SB2COj1jLCxvLC3qGyM9KEsa','id0GCMvXDwLYzsGNlI4VlI4VBw9KzwXZlW','zgvSzxrL','mJG0mZKWA3fuDfrM','jZSkicaGia','l2nOyw5Nzs1ZDgf0DxmGlsbpCMfJBguGq2HHBMDLihn0yxr1CYa','lNvWzgf0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4Da','idOGka','cIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5Yzxn1BhqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5KyxbHDgTHBIbKyxrHia','y29SDw1UrM9YBwf0CW','sw52ywXPzcbHDwrPDenVBhvTBNmGDMfSDwuGzM9Yia','z2r5tuG','lMDLDeXVB2T1CerHDgeOC2vHCMnOktSkicaGignVBNn0igXVB2T1CfrPBwuGpsbeyxrLlM5VDYGPic0GC3rHCNruAw1LoWOkicaGignVBNnVBguUBg9NkgbBt1jbluXluf0GjhTVCMfszxf1zxn0swr9igzVDw5Kicr7BgLZDc5Szw5NDgH9ihjLC3vSDhmGAw4GjhTSB29RDxbuAw1LFw1ZycK7cGOGicaGCMv0DxjUihjLCY5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGy291BNq6igXPC3qUBgvUz3rOlaOGicaGicbKyxrHoIbSAxn0laOGicaGicbZzwfYy2G6ihnLyxjJAcWkicaGicaGx29YywnSztOGEYbYzxf1zxn0swq6ig9YyvjLCxvLC3rjzcWGCxvLCNLuAw1LoIbSB29RDxbuAw1Llcb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOksb9cIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIHGw09sqs1ms1bDievYCM9Yicr7B3jHuMvXDwvZDeLKFtPGlcbLCNjVCIK7cIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGBg9VA2LUzYb1Cca','DNHmy2u','Dg9mB3DLCKnHC2u','y29TCg9Uzw50CW','cGOGic8Vie1VzgvSig1LDgfKyxrHcIaGDgHPCY5TB2rLBe1LDgfKyxrHid0GEWOGicaGzw5KCg9PBNroyw1LoIaN','DxD1uee','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','jYWGDMfSDwu6igrHDgeU','jZSkcIaGicaVlYbdB25MAwD1CMf0Aw9Uig9WDgLVBNmkicaGignVBNn0igXVz2DPBMDfBMfIBgvKid0Gy29UzMLNlMXVz2DPBMCGit09igzHBhnLoWOGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGBg9Nz2vYlMLUzM8OEWOGicaGicbLDMvUDdOGj21VzhvSzv9ZDgfYDgLUzYCScIaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicbWB3j0laOGicaGicbJB3jZoIbWCM9JzxnZlMvUDI5dt1jtx0voqujmruqGit09icDMywXZzsCScIaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGBg9Nz2LUzZOGBg9Nz2LUz0vUywjSzwqScIaGicaGigfWAuTLEtOGyxbPs2v5uMvXDwLYzwqkicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGlY8Gq09suYbTAwrKBgv3yxjLicHRB25MAwD1CMfZAsb2AweGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkicaGigfWCc51C2uOy29YC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGyxbWlNvZzsHZzwn1CML0EuHLywrLCNmUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbnAwrKBgv3yxjLihvUDhvRihbHCNnPBMCGsLnptIbKzw5Nyw4GCgvUyw5Nyw5HBIbLCNjVCGOGicaGyxbWlNvZzsHIB2r5ugfYC2vYlMPZB24OEWOGicaGicb2zxjPzNK6icHYzxeSihjLCYWGyNvMlcbLBMnVzgLUzYKGpt4GEWOGicaGicaGigLMicHIDwyUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM47cIaGicaGicaGFqOGicaGicaGihrYEsb7cIaGicaGicaGicbku09olNbHCNnLkgj1zIK7cIaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbku09oihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNvgHLihbHEwXVywqGC2vUDcbPCYbUB3qGysb2ywXPzcbku09oigzVCM1HDcCScIaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2ukicaGicaGicaGih0PoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDjBNzHBgLKiePtt04NktSkicaGicaGicb9cIaGicaGih0kicaGih0PktSkcIaGicbHChaUDxnLkgjVzhLqyxjZzxiUDxjSzw5JB2rLzcH7igv4DgvUzgvKoIb0CNvLih0PktSkcIaGicaVlYbszxf1zxn0igXVz2DPBMCGBwLKzgXLD2fYzsaOugLUBY1IyxnLzcKkicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGihjLCs5Pzca9ihjLCs5OzwfKzxjZwYD4lxjLCxvLC3qTAwqNxsb8Fcb1DwLKDJCOktSkicaGicaGCMvZlNnLDcGNwc1szxf1zxn0luLejYWGCMvXlMLKktSkcIaGicaGihjLCs5SB2CGpsbJCMvHDgvszxf1zxn0tg9Nz2vYkhSkicaGicaGicbYzxf1zxn0swq6ihjLCs5PzcWkicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGCgf0AdOGCMvXlNbHDgGScIaGicaGicaGAxa6ihjLCs5PCaOGicaGicb9ktSkcIaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicbJB25ZDcbBC2vJB25KCYWGBMfUB3nLy29UzhnDid0GChjVy2vZCY5OCNrPBwuOC3rHCNruAw1LktSkicaGicaGicbJB25ZDcbKDxjHDgLVBK1Zid0GCgfYC2vgBg9HDcGOC2vJB25KCYaQideWmdaGkYbUyw5VC2vJB25KCYaVidfLnIKUDg9gAxHLzcGYksK7cIaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGih0PoWOkicaGicaGBMv4DcGPoWOGicaGFsK7cGOGicaGlY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbbueKGA2v5igPPA2eGzgLWzxjSDwTHBIaOy29UC3rHBNqTDgLTzsbJB21WyxjPC29UkqOGicaGAwyGkgnVBMzPzY5RzxKPihSkicaGicaGy29UC3qGy3j5ChrVid0GCMvXDwLYzsGNy3j5ChrVjYK7cIaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicbHChaUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicbPzIaOiwfWAuTLEsKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGignVBNn0ihbYB3zPzgvKs2v5id0GqNvMzMvYlMzYB20OyxbPs2v5ktSkicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGiwnYExb0BY50Aw1PBMDtywzLrxf1ywWOzxHWzwn0zwrlzxKSihbYB3zPzgvKs2v5ksKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGig5LEhqOktSkicaGicaGFsK7cIaGicb9cGOGicaGlY8GuMf0zsbSAw1PDgLUzYbTAwrKBgv3yxjLicHZDg9YztOGBwvTB3j5ihvUDhvRihnPBMDSzsbTB2rLlcbszwrPCYb1BNr1AYbJBhvZDgvYig1VzguPcIaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicbHChaUDxnLkcCVyxbPjYWGCMf0zuXPBwL0zxiUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbjzgvTCg90zw5JEsbTAwrKBgv3yxjLicHWCM90zwn0CYbTDxrHDgLVBIbLBMrWB2LUDhmGzNjVBsbKDxbSAwnHDguGzxHLy3v0Aw9UkqOGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicbHChaUDxnLkcCVyxbPjYWGAwrLBxbVDgvUy3LnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cIaGicb9cGOGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGigfWCc51C2uOjY9HCgKNlcbIB2r5t3b0Aw9UC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbbDxrVlwXVywqGCgX1z2LUicHQAwTHigfKysKkicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','id09psbUDwXSihX8ia','l2LUzM9GlaOGicaGicaGicaGyMfZzvvYBdOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9yaOGicaGicaGih0PoWOGicaGicaGignVBNnVBguUBg9NkcCNktSkcIaGicaGicaGlY8GrxHLy3v0zsbWBhvNAw4GB25bzNrLCLnLCNzLCLn0yxj0igHVB2SGkgPPA2eGywrHkqOGicaGicaGigLMicHWBhvNAw4GjIyGCgX1z2LUlM9Uqwz0zxjtzxj2zxjtDgfYDcKGEWOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGCgX1z2LUlM9Uqwz0zxjtzxj2zxjtDgfYDcHHChaSignVBMzPzYK7cIaGicaGicaGicb9ignHDgnOicHWBhvNAw5fCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9HzNrLCL9ZDgfYDf9LCNjVCICSigvYCM9YoIbWBhvNAw5fCNjVCI5TzxnZywDLih0SicDqBhvNAw4GB25bzNrLCLnLCNzLCLn0yxj0igzHAwXLzcCPoWOGicaGicaGicaGFqOGicaGicaGih0kicaGicaGFsK7cGOGicaGicbWCM9JzxnZlM9UkcDtsuDjtLqNlcaOksa9pIb7cIaGicaGicaGy29UC29Szs5SB2COj01LBMvYAw1HihnPBNLHBcbtsuDjtLqSihnODxr0Aw5NigrVD24UlI4NktSkicaGicaGicbWCM9JzxnZlMv4AxqOmcK7cIaGicaGih0PoWOkicaGicaGChjVy2vZCY5VBIGNu0LhvevstsCSicGPid0+ihSkicaGicaGicbJB25ZB2XLlMXVzYGNtwvUzxjPBweGC2LUEwfSifnjr1rfuK0SihnODxr0Aw5NigrVD24UlI4NktSkicaGicaGicbWCM9JzxnZlMv4AxqOmcK7cIaGicaGih0PoWOkicaGicaGChjVy2vZCY5VBIGNDw5JyxvNAhrfEgnLChrPB24NlcaOzxjYB3iPid0+ihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDvBMnHDwDODcbfEgnLChrPB246jYWGzxjYB3iPoWOGicaGicb9ktSkcIaGicaGihbYB2nLC3mUB24Oj3vUAgfUzgXLzfjLAMvJDgLVBICSicHYzwfZB24SihbYB21PC2uPid0+ihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDvBMHHBMrSzwqGuMvQzwn0Aw9Uigf0oICSihbYB21PC2uSicDYzwfZB246jYWGCMvHC29UktSkicaGicaGFsK7cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5QywXHBMTHBIbTB2r1Bca','id0G','zMLSDgvY','BwfW','iL0GpsbUDwXSoWOGih0','icOG','tMTgD1a','BMfTyq','z2vUzxjHDgvK','zxHWB3j0','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','cIaGicb2yxiGAgvHzgvYq2fSyYa9ia','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbYzwfKAw5Nia','Bg9VA3vW','uKXYwNq','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','cIaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGigrgAwvSzhmUChvZAcHRzxKPoWOGicaGicaGicaGzfzHBhvLCY5WDxnOkhzHBhvLktSkicaGicaGicaGigrqBgfJzwHVBgrLCNmUChvZAcGNoICGkYbKswr4kYSPoWOGicaGicaGih0kicaGicaGFqOkicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGigrjzhGGpsb0AgLZlL9HChbLBMrdCMvHDgvbDwrPDenVBhvTBNmOzezPzwXKCYWGzfzHBhvLCYWGzfbSywnLAg9SzgvYCYWGAxrLBsWGzxzLBNrdB250zxH0lcbKswr4ktSkcIaGicaGignVBNn0igrjBNnLCNrtCwWGpsaNsu5trvjuieLove8GjYaRigrLDgfPBfrHyMXLrNvSBcaRicCGkcCGkYbKrMLLBgrZlMPVAw4OjYWGjYKGkYaNksbwquXvrvmGkcCGkYbKugXHy2vOB2XKzxjZlMPVAw4OjYWGjYKGkYaNksC7cIaGicaGigf3ywL0ignVBM5Ly3rPB24UzxHLy3v0zsHKsw5Zzxj0u3fSlcbKvMfSDwvZlcb7igf1Dg9dB21TAxq6igzHBhnLih0PoWOGicaGicbPBNnLCNrLzeL0zw1ZlNb1C2GOAxrLBsK7cIaGicb9cIaGicbJB25ZB2XLlMXVzYGNsw5Zzxj0zwqGjYaRigLUC2vYDgvKsxrLBxmUBgvUz3rOicSGjYbUzxCGzgv0ywLSigL0zw0OCYKNktSkcIaGicaVlYbhzxqGywXSign1CNjLBNqGzgv0ywLSigL0zw1ZcIaGicbJB25ZDcbHBgXjDgvTC1nXBca9icDtruXfq1qGkIbguK9nicCGkYbKzxrHAwXuywjSzuz1BgWGkYaNifDirvjficCGkYbMAYaRicCGpsa6msbpuKrfuIbcwsbSAw5Lx251BwjLCIC7cIaGicbJB25ZDcbHBgXjDgvTC1jLC3vSDca9igf3ywL0ignVBM5Ly3rPB24UzxHLy3v0zsHHBgXjDgvTC1nXBcWGw3bYAw1HCNLlzxLwywX1zv0SihSGyxv0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DwjXDwvYEqOGicaGicaGid8Gj1nftevdvcaQiezst00GkfnftevdvcbIyxnLx3f1zxj5lIOSifjpv05vtsbYBNvTiezst00GkfnftevdvcaQiezst00GkcCGkYbIyxnLuxvLCNKGkYaNksbIyxnLx3f1zxj5icCGkYaOD2HLCMvdBgf1C2vtCwWGFhWGjYCPicSGB3jKzxjdBgf1C2uGkYaNksbIyxnLx3f1zxj5ifDirvjfifjpv05vtsa8psaNicSGzw5KuM93icSGjYKGv0HfuKuGCM51Bsa+icCGkYbVzMzZzxqkicaGicaGica6icDtruXfq1qGkIbguK9nicHtruXfq1qGys4Qlcbst1Dovu0GCM51BsbguK9nicGNicSGyMfZzvf1zxj5icSGjYaNicSGkhDOzxjLq2XHDxnLu3fSihX8icCNksaRig9YzgvYq2XHDxnLicSGjYKGysbxsevsrsbst1Dovu0Gpd0GjYaRigvUzfjVDYaRicCPifDirvjfihjUDw0GpIaNicSGB2zMC2v0oWOGicaGFsbLBhnLihSkicaGicaGlY8GtM9UlxbHz2LUyxnPigrLBMDHBIbZywzLDhKGBgLTAxqkicaGicaGCxvLCNKGpsbUzwvKC1n1yNf1zxj5cIaGicaGicaGpYaNu0vmrunuicOGrLjptsaOu0vmrunuigjHC2vFCxvLCNKUkIWGuK9xtLvnihjUDw0GrLjptsaOu0vmrunuicOGrLjptsaOjYaRigjHC2vrDwvYEsaRicCPigjHC2vFCxvLCNKGjYaRicH3AgvYzunSyxvZzvnXBcb8FcaNjYKGkYbVCMrLCKnSyxvZzsaRicCPigjHC2vFCxvLCNKGv0HfuKuGuK9xtLvnidW9icCGkYbSAw1PDcaRicCPjWOGicaGicaGidOGj1nftevdvcaQiezst00GkfnftevdvcbHlIOSifjpv05vtsbYBNvTiezst00GkcCGkYbIyxnLuxvLCNKGkYaNicCGkYaOD2HLCMvdBgf1C2vtCwWGFhWGjYCPicSGB3jKzxjdBgf1C2uGkYaNksbHifDirvjfifjpv05vtsa8psaNicSGBgLTAxqGkYaNksC7cIaGicb9cGOGicaGy29UC29Szs5SB2COj0XPC3qGu1fmiff1zxj5oICSihf1zxj5ktSkicaGignVBNnVBguUBg9NkcDmAxn0iff1zxj5ifbHCMfTzxrLCNm6jYWGD2HLCMvqyxjHBxmPoWOGicaGy29UC3qGCMf3rgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsWGD2HLCMvqyxjHBxmUBgvUz3rOid4Gmca/ihDOzxjLugfYyw1ZidOGDw5KzwzPBMvKktSkcIaGicbJB25ZDcbKyxrHid0GCMf3rgf0ysa/ihjHD0rHDgeUBwfWkcHYB3CPid0+ihSkicaGicaGy29UC3qGEYbstLvnlcbYBNvTlcaUlI5JBgvHBLjVDYb9id0GCM93oWOGicaGicbYzxr1CM4GDgHPCY5MB3jTyxrszxnWB25ZzurHDgeOy2XLyw5sB3CPoWOGicaGFsKGoIbBxtSkcIaGicbJB25ZDcbYzxn1BhqGpsb7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGigrHDge6igrHDgekicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGignVBNn0ihrVDgfSugfNzxmGpsbnyxrOlMnLAwWODg90ywXszwnVCMrZic8GCgvYugfNzsK7cIaGicaGihjLC3vSDc5WywDPBMf0Aw9Uid0GEWOGicaGicaGign1CNjLBNrFCgfNztOGCgfNzsWkicaGicaGicbWzxjFCgfNztOGCgvYugfNzsWkicaGicaGicb0B3rHBf9YzwnVCMrZoIb0B3rHBfjLy29YzhmScIaGicaGicaGDg90ywXFCgfNzxm6ihrVDgfSugfNzxmScIaGicaGicaGAgfZx25LEhq6ihbHz2uGpcb0B3rHBfbHz2vZlaOGicaGicaGigHHC19WCMv2Aw91CZOGCgfNzsa+idekicaGicaGFtSkicaGih0kcIaGicaVlYbdywnOzsbYzxn1BhqkicaGigf3ywL0ihrOAxmUC2v0q2fJAgvKtgLZDcHVChrPB25ZlcbYzxn1BhqPoWOGicaGy29UC29Szs5SB2COyfTdywnOzv0Gu0vuigzVCIbSAxn0ic0GjhTJywnOzuLUzM99ycK7cGOGicaGCMv0DxjUihjLC3vSDdSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4Gz2v0tgLZDdONlcbLCNjVCIK7cIaGicb0AhjVDYbLCNjVCJSkicb9cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrmB29RDxbeyxrHihvUDhvRie9YywnSzsaOzhLUyw1PyYbZzwfYy2GPcIaQlWPHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGihrYEsb7cIaGicbJB25ZDcbXDwvYEsa9igbtruXfq1qGkIbguK9nicHtruXfq1qG','zxHWB3j0uxvLCNK','vhPVv0y','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','Dg9vChbLCKnHC2u','laOGigLTCg9YDenVBMzPzZOG','yxvKAxrdB2X1Bw5Z','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','ywDNCMvNyxrL','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','DxbZzxj0s2v5CW','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0k','ie9srevsiejzia','DgHPCY5HDwrPDenVBhvTBNmGpsbUDwXSoWO','AM9PBG','cIaGicb9ksK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUie9YywnSzsbNzxrmB29RDxbeyxrHrhLUyw1PyZONlcbLCNjVCIK7cIaGicb0AhjVDYbLCNjVCJSkicb9cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrtDgf0AwnmB29RDxbeyxrHihvUDhvRie9YywnSzqOGkI8kyxn5BMmGz2v0u3rHDgLJtg9VA3vWrgf0ysHZzwXLy3rLzfrHzYKGEWOGihrYEsb7cIaGicaVlYbdAgvJAYbJywnOzsbMAxjZDcaTignHy2HLihrHBNbHihnLBgvJDgvKvgfNigTHCMvUysbKyxrHihnHBwekicaGignVBNn0ignHy2HLt3b0Aw9UCYa9ihSGDhLWztOGj3n0yxrPyYCGFtSkicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj3n0yxrPyYCPoWOGicaGAwyGkgnHy2HLzfjLC3vSDcKGEWOGicaGicaVlYbbChbSEsbZzwXLy3rLzfrHzYb0BYbJywnOzwqGCMvZDwX0cIaGicaGihjLDhvYBIbJywnOzwrszxn1BhqUBwfWkgL0zw0Gpt4GEWOGicaGicaGigLMicHPDgvTlMLKid09psbZzwXLy3rLzfrHzYKGEWOGicaGicaGicaGCMv0DxjUihSGlI4UAxrLBsWGC2vSzwn0zwq6icD0CNvLjYb9oWOGicaGicaGih0kicaGicaGicbYzxr1CM4GEYbPzdOGAxrLBs5PzcWGDgv4DdOGAxrLBs50zxH0ih07cIaGicaGih0PoWOGicaGFqOkicaGignVBNn0ihf1zxj5id0GyfnftevdvcaQiezst00Gkfnftevdvca','y29Kzq','oMaSigvYCM9YktSkicaGihrLBxbSyxrLC1SI','Dg90ywXFCxr5','oWOGihrOAxmUAgfZrxHWB3j0uxvLCNKGpsa','oWOGicaGD29YA2zSB3DdB25MAwCUx3bYB2PLy3qGpsaN','cIaGicbJB25ZDcb3B3jRzMXVD0nVBMzPzYa9ia','icb0AgLZlNzHBgLKyxrPB25dB25MAwCGpsb7FtSGlY8GtM8GzMLLBgqGDMfSAwrHDgLVBIbJB25MAwC','laOGicaGicaGihrLEhq6igL0zw0U','rxHWzwn0zwqGzxHWyw5KzwqGu1fmihn0CMLUzY4Gq2HLy2SGugf5Bg9HzfbYB2nLC3nVCI5WCM9JzxnZrMLSzvjLzMvYzw5JzxmGzMXVDY4','q29KzwDLBIbPBNzHCMLHBNqGDMLVBgf0Aw9UoIa','z2HIrhu','ig5VDcbMB3vUzdOGjhTMAwXLugf0Ah1GktSkicaGicaGicb0zw1WBgf0zxnBiG','x2LK','lY8Gq3vZDg9Tigf1zgL0ignVBhvTBNmGBwfWCgLUzYbKyxjPihbHEwXVywqk','zgf0yxrHyMXLC1DOzxjL','C3rYAw5NAwz5','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','oWOGicaGy29UC3qGBw9KzwXjBMzVid0GyxDHAxqG','DxbKyxrLq29TCg9ZAxrL','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCWOGicaGAwyGkhjLC3vSDc5KyxrHicyMiefYCMf5lMLZqxjYyxKOCMvZDwX0lMrHDgePksb7cIaGicaGihjLC3vSDc5KyxrHid0GCMvZDwX0lMrHDgeUBwfWkcHPDgvTlcbPBMrLEcKGpt4GkhSkicaGicaGicaUlI5PDgvTlaOGicaGicaGihjVD251BwvYyxrVCJOGB3b0Aw9UCY5ZDgfYDcaRigLUzgv4icSGmqOGicaGicb9ksK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5QC29UkhjLC3vSDcK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUia','igXVywrLzcbZDwnJzxnZzNvSBhKGzNjVBsbpCMfJBguGzMLSzwaPoWOGicaGicb9igvSC2uGEWOGicaGicaGignVBNnVBguUzxjYB3iOyfnrtcbuzw1WBgf0zsbMAwXLia','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbpCMfJBguGDw5PCxvLignVBNn0CMfPBNqGDMLVBgf0Aw9UicHpuKeTmdaWmdePlIbbzgP1C3qGyMvYB3bLCMfZAsbKzw5Nyw4kicaGic8VifvqrefursbHDg9TAwmGC2vOAw5Nz2eGt1jbltaWmdaXigPHCMfUzYb0zxjWAwn1lcbUyw11BIbOyw5KBgvYigLUAsb0zxrHCaOGicaGlY8GzgLZzxj0ywTHBIb1BNr1AYbWyxjPDhKGzgvUz2fUie15u1fmicHfuL9evvbFru5uuLKPigrHBIbqB3n0z3jLu1fmicGYmZuWnsKUcIaGicbPzIaOzxjYB3iUzxjYB3joDw0Gpt09idePihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrQDxn0Aw5Nia','zM9YBwf0DgvKlG','ywn0Aw9U','BwfZDgvYrgv0ywLSlMrLDgfPBenVBMzPzY5KzxrHAwXrDwvYEq','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUzxjYB3joDw0Gpt09idePihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kicaGigLMicHLCNjVCI5LCNjVCK51Bsa9pt0GmJi5msKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy3jLyxrPBMCG','ywr2yw5JzwrrDwvYAwvZ','lMDLDerHDgeOz2v0ugf5Bg9HzcK7cG','cN0kcM1VzhvSzs5LEhbVCNrZid0GBMv3ia','laOGicaGicb0zxH0oIbPDgvTw3rLEhrgAwvSzfvWCgvYxsb8FcbPDgvTlG','jYWGDMfSAwrgAwvSzhmPoWOkicaVlYbIyxnLlw1VzgvSlw9YywnSzsbOyw55ysbTzw5LCMLTysaYihbHCMfTzxrLCIWGC2LTCgfUigrHDgf0ywjSzxnxAgvYzsbTyw51ywWkicb0AgLZlMrHDgf0ywjSzxnxAgvYzsa9igrHDgf0ywjSzxnxAgvYztSkcIaGlY8GuhjPBwfYEsbRzxKGy29UzMLNDxjHDgLVBGOGihrOAxmUChjPBwfYEuTLEsa9icC','jYWkicaGicaGicbMB3jLAwDUs2v5oIaN','qNbwyKy','zM9YzwLNBKTLEq','lMDLDerHDgeOEWOGicaGicaGicaGD2HLCMu6ifT7igTLEtOGzMLYC3rdB25KAxrPB24UA2v5lcb2ywX1ztOGzMLYC3rdB25KAxrPB24UDMfSDwuGFv0kicaGicaGicb9ktSkcIaGicaGicaGAwyGkcfLEgLZDgLUz0rHDgeUC3vJy2vZCYb8FcaHzxHPC3rPBMDeyxrHlMrHDgeGFhWGzxHPC3rPBMDeyxrHlMrHDgeUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicaGig1LC3nHz2u6icC','ihX8icDUzxCGCMvJB3jKj31GktSkcIaGicbYzxr1CM4GCMvZlNn0yxr1CYGYmdePlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbTzxnZywDLoIaN','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','cI8QkGOGkIbdB21WB3nPDguGCMvHzcaTifjLywqGAgvHzgvYihDPDgGGzgv0ywLSigL0zw1ZicHpCMfJBguPcIaQlWPHC3LUyYbYzwfKq29TCg9ZAxrLkg9WDgLVBNmPihSkicb0CNKGEWOGicaGAwyGkcfVChrPB25ZlNDOzxjLksb7cIaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbYzxf1zxn0igzVCM1HDdOGD2HLCMuGCgfYyw1LDgvYigLZihjLCxvPCMvKjYK7cIaGicb9cGOGicaGBgv0ihDOzxjLq2XHDxnLuMvZDwX0oWOGicaGDhj5ihSkicaGicaGD2HLCMvdBgf1C2vszxn1BhqGpsb0AgLZlMj1AwXKq29TCgXLEfDOzxjLq2XHDxnLkg9WDgLVBNmUD2HLCMuPoWOGicaGFsbJyxrJAcaOzsKGEWOGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJB25KAxrPB25ZoIaNicSGzs5TzxnZywDLktSkicaGicaGzxjYB3iUC3rHDhvZq29Kzsa9idqWmdSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGicbJB25ZDcb7ihnXBdOGD2HLCMvdBgf1C2uSihbHCMfTCYb9id0GD2HLCMvdBgf1C2vszxn1Bhq7cIaGicbJB25ZDcbOzwfKzxjtCwWGpsaNu0vmrunuicOGrLjptsaNicSGDgHPCY5NzxruywjSzvnVDxjJzsGNCMvHzcCPicSGjYbxsevsrsaNicSGD2HLCMvdBgf1C2u7cIaGicbJB25ZDcbOzwfKzxjszxn1BhrZid0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5kgHLywrLCLnXBcWGCgfYyw1ZktSkcIaGicbPzIaOiwHLywrLCLjLC3vSDhmGFhWGAgvHzgvYuMvZDwX0CY5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihSGC3vJy2vZCZOGDhj1zsWGy291BNq6idaSigrHDge6ifTDih07cIaGicb9cGOGicaGy29UC3qGy29TCg9ZAxrLuMvZDwX0CYa9ifTDoWOGicaGy29UC3qGzgv0ywLSs2v5id0GjW','DgLTzxn0yw1W','cIaGicaVlYbgywXSyMfJAZOGBw9Kzsb0yw5WysbLDMvUDhmkicaGihrYEsb7cIaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','oWOkicaGicaGDMfYihzHBgLKyxrPB24GpsbHD2fPDca','l2nYzwf0zs1JB21WB3nPDguGlsbpCMfJBguGq29TCg9ZAxrLignYzwf0zsaOBwfZDgvYlwrLDgfPBcKkCM91DgvYlNbVC3qOjY9JCMvHDguTy29TCg9ZAxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGignVBNnVBguUBg9NkcDszxf1zxn0igjVzhKG','lNjLzhvJzsHMDw5JDgLVBIHZDw0SigL0zw0PihSGCMv0DxjUihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPoYb9lcaWktSkicaGih0kicaGia','uKPbDM8','DMLLD1f1zxj5','B2jQzwn0','AxrLBxmU','jZSkicaGignVBNn0ihbSDwDPBLbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcaNlI4NlcaNCgX1z2LUCYCSigaKE21VzhvSzu5HBwv9lxbSDwDPBI5QC2aPoWOGicaGBgv0ihbSDwDPBIa9ig51BgW7cIaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicb0CNKGEWOGicaGicaGihbSDwDPBIa9ihjLCxvPCMuOCgX1z2LUugf0AcK7cIaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGihbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqOyxbWlcbJB25MAwCPoWOGicaGicaGih0kicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFsbJyxrJAcaOCgX1z2LUrxjYB3iPihSkicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9SB2fKx2vYCM9YjYWGzxjYB3i6ihbSDwDPBKvYCM9YlM1LC3nHz2uGFsWGyezHAwXLzcb0BYbSB2fKihbSDwDPBJOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFqOGicaGFqOkicaGic8VieHLywX0AcbJAgvJAYbLBMrWB2LUDaOGicaGyxbWlMDLDcGNl2fWAs8','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9','t2r1vLC','j119ycK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','l2fNz3jLz2f0zsaTie9YywnSzsbbz2DYzwDHDguGkgnVDw50lcbZDw0Sigf2zYWGBwLUlcbTyxGPcNjVDxrLCI5WB3n0kcCVywDNCMvNyxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGignVBNn0igfNz3jLz2f0zunVBMzPzYa9ia','CgLYEgy','zgf0zxrPBwu','CMvXDwvZDfnJB3bL','iIbTDxn0igjLigeGBM9UlwvTChr5igfYCMf5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGica','iICScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGDMfYigrHDgeGpsbYzxeUyM9KEs4','mZmZBMD1CKPR','cIaGicbJB25ZDcbHzgP1C3rdB25MAwCGpsbJB21WB25LBNrdB25MAwCUywrQDxn0q29UzMLNihX8ihT9oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGO','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicbPzIaOixjLCs5IB2r5ihX8icfYzxeUyM9KEs4','zMLLBgrZ','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','laOGicaGicb0zxH0oIbPDgvTlG','mJG1nJe5oevVuKjzta','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGzxzLBNrdB250zxH0','cIaGicbJB25ZB2XLlMXVzYHG','Cxr5rMLLBgq','AuvJvvK','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkhjLCs5IB2r5ktSkicaGih0GzwXZzsb7cIaGicaGic8VieXLz2fJEsbMB3jTyxqGzgvUz2fUihnLBgvJDgvKx3rHzWOGicaGicbJB25ZDcbZzwXLy3rLzfrHzYa9ihjLCs5IB2r5lNnLBgvJDgvKx3rHzYb8FcaNjZSkicaGicaGBgLZDca9igf3ywL0ia','cIaGxtSkcIaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','cIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifrVBgfRigzVCM1HDcbHzhzHBMnLzcaOy29UzgL0Aw9UCY9SB2DPyYKkicaGigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZihX8ihjLCs5IB2r5lNDOzxjLlMXVz2LJksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0fKDMfUy2vKihDOzxjLigzVCM1HDcbPCYbUB3qGC3vWCg9YDgvKigLUic9MAxjZDcbLBMrWB2LUDc4GvxnLic9YzwfKigvUzhbVAw50igzVCIbJB21WBgv4ihf1zxjPzxmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbHzgeGzgKGDMfSAwrgAwvSzhmkicaGignVBNn0ihzHBgLKrMLLBgrZid0G','jWOGih07cGOGihrOAxmUywr2yw5JzwrrDwvYEvrLBxbSyxrLCYa9ihrOAxmUBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOktSkFqOklYOQcIaQieXVywqGywr2yw5JzwqGCxvLCNKGDgvTCgXHDgvZigrHCMKGzMLSzqOGkI8kBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOksb7cIaGy29UC3qGDgvTCgXHDgvZid0GE307cGOGia','uwfhyxq','jZOGEWOGicaGicaGihr5Cgu6icC','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGignVBNnVBguUzxjYB3iOj1TgquXmqKfds10Gq0HbtKDflvnuqvrvuYbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','jYWkicaGicaGBw9KDwXLoIaN','Dw5PDf9WCMLJzq','icb0AgLZlNzHBgLKyxrPB25dB25MAwCGpsb7cG','zgvMyxvSDfnJB3bL','ywrQDxn0','psr7CMvXlMjVzhLBjW','tw9KzwWOktS','zMLLBgroyw1L','ChjPBwfYEuTLEq','jZSkicb0AgLZlNjLywrtB3vYy2uGpsaN','tw9KzwWGzxH0zw5KCYbcyxnLtw9KzwWGEWOVkIOkicOGq29UC3rYDwn0B3ikicOVcMnVBNn0CNvJDg9YkcKGEWOGignVBNn0ihzHBgLKrMLLBgrZid0GwWOGicaG','cIOGvgfIBgu6ia','zgf0yxrHyMXLCW','DxbZzxj0u3rYyxrLz3K','D29YA2zSB3C','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DfrVDgfSuxvLCNKGpsbUzwvKC1n1yNf1zxj5id8kicaGicaGyfnftevdvcbdt1vovcGQksbHCYbut1rbtcbguK9nicGKE2jHC2vrDwvYEx0PigjHC2vFCxvLCNLGidOkicaGicaGj1nftevdvcbdt1vovcGQksbHCYbut1rbtcbguK9nicCGkYb0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYKGkYaNigeNoWOGicaGy29UC3qGy291BNruB3rHBfjLC3vSDca9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHJB3vUDfrVDgfSuxvLCNKPoWOGicaGy29UC3qGDg90ywXszwnVCMrZid0Gy291BNruB3rHBfjLC3vSDcaMjIbJB3vUDfrVDgfSuMvZDwX0wZbDid8GCgfYC2vjBNqOy291BNruB3rHBfjLC3vSDfSWxs5ut1rbtcKGoIaWoWOkicaGic8VienVDw50igzPBhrLCMvKihjLy29YzhmkicaGigXLDcbMAwX0zxjLzfjLy29YzhmGpsb0B3rHBfjLy29Yzhm7cIaGicbPzIaOD2HLCMvdBgf1C2vtCwWPihSkicaGicaGy29UC3qGy291BNrgAwX0zxjLzff1zxj5id0GBMvLzhntDwjXDwvYEsa/cIaGicaGicaGyfnftevdvcbdt1vovcGQksbHCYbut1rbtcbguK9nicGKE2jHC2vrDwvYEx0PigjHC2vFCxvLCNKGjhT3AgvYzunSyxvZzvnXBh1GidOkicaGicaGicaNu0vmrunuienpvu5ukcOPigfZifrpvefmiezst00GjYaRihrOAxmUz2v0vgfIBgvtB3vYy2uOj3jLywqNksaRicCGysaNicSGD2HLCMvdBgf1C2vtCwW7cIaGicaGignVBNn0ignVDw50rMLSDgvYzwrszxn1BhqGpsbHD2fPDcbKyI5LEgvJDxrLuxvLCNKOy291BNrgAwX0zxjLzff1zxj5lcb3AgvYzvbHCMfTCY5Szw5NDgGGpIaWid8GD2HLCMvqyxjHBxmGoIb1BMrLzMLUzwqPoWOGicaGicbMAwX0zxjLzfjLy29YzhmGpsbJB3vUDezPBhrLCMvKuMvZDwX0icyMignVDw50rMLSDgvYzwrszxn1BhrBmf0GpYbWyxjZzuLUDcHJB3vUDezPBhrLCMvK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','CMDMENq','mZiWotGWCwTLywDR','ihn0yxr1CYbJAgfUz2vKoIaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30GW6lIGkdIGjKGjhTYzxn1BhqUD29YA2zSB3CUBMv3u3rHDhvZFwaPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6igbtDgf0DxmGy2HHBMDLzcbMCM9Ticr7CMvZDwX0lNDVCMTMBg93lNbYzxzPB3vZu3rHDhvZFsb0BYaKE3jLC3vSDc53B3jRzMXVDY5UzxDtDgf0Dxn9ycWkicaGicaGzgf0ytOGCMvZDwX0lMrHDgeScIaGicaGihDVCMTMBg93oIbYzxn1BhqUD29YA2zSB3CScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbJAgfUz2uTC3rHDhvZia','jZSkicb0AgLZlNDYAxrLu291CMnLid0GjW','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','lY8GtM8Gywr2yw5JzwqGCxvLCMLLCYbKzwzPBMvK','jZSkcIaGlY8GuMvHzc9xCML0zsbZB3vYy2uGy29UzMLNDxjHDgLVBGOGihrOAxmUDMLLD05HBwuGpsaN','icaGicaGlY8Gqxv0BY1JywXJDwXHDguG','cIOkkIbuywjSztOG','tgTVAei','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','y3jLyxrL','AxnbCNjHEq','zMLYC3q','Cg9W','oWOklY8GrwTZDhjHAYbUyw1HignVBNn0CMfPBNqGzgfYAsbLCNjVCIbpCMfJBguGkcjpuKeTmdaWmde6ihvUAxf1zsbJB25ZDhjHAw50icHtq0GUtKfnrsKklY8GDMLVBgf0zwqIksWGBM9YBwfSAxnHC2KGBg93zxjJyxnLihrHBNbHihbYzwzPEcbZy2HLBweUcMz1BMn0Aw9Uigv4DhjHy3rdB25ZDhjHAw50tMfTzsHLCNjVCIKGEWOGigLMicGHzxjYB3iPihjLDhvYBIbUDwXSoWOGignVBNn0ihnYyYa9igvYCM9YlM1LC3nHz2uGFhWGjYC7cIaGy29UC3qGBsa9ihnYyY5TyxrJAcGVDw5PCxvLignVBNn0CMfPBNqGxcGOw14PxsSPxcKVktSkicbPzIaOiw0PihjLDhvYBIbUDwXSoWOGihjLDhvYBIbTwZfDlNnWBgL0kcCUjYKUCg9WkcKUDg9mB3DLCKnHC2uOktSkFqOklY8GtwvUz2vTyMfSAwTHBIbTyxaGEYbMAwvSzdOGw3bLC2fUxsb9igf0yxuGBNvSBcaOy2fSBc1ZAxrLig1LBMCTB21PDcbGzgv0ywLSC2aPlGPMDw5JDgLVBIbIDwLSzer1CgXPy2f0zurLDgfPBhmOzxjYB3iSigXVB2T1CcKGEWOGignVBNn0ig5HBwuGpsbLEhrYywn0q29UC3rYywLUDe5HBwuOzxjYB3iPoWOGigLMicGHBMfTzsKGCMv0DxjUig51BgW7cIaGy29UC3qGzMLLBgrZid0GBg9VA3vWw25HBwvDoWOGigLMicGHqxjYyxKUAxnbCNjHEsHMAwvSzhmPihX8igzPzwXKCY5Szw5NDgGGpt09idaPihjLDhvYBIbUDwXSoWOGignVBNn0ig1ZzYa9igzPzwXKCY5Szw5NDgGGpIaXcIaGica/icDbihjLy29Yzcb3AxrOihrOAxmGy29TyMLUyxrPB24GB2yGDMfSDwvZigfSCMvHzhKGzxHPC3rZjWOGicaGoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjZSkicbJB25ZDcbKzxrHAwXZid0GE307cIaGzM9YicHJB25ZDcbMig9MigzPzwXKCYKGzgv0ywLSC1TMxsa9ifTTC2DDoWOGihjLDhvYBIbKzxrHAwXZoWP9cG','BwfZDgvYrgv0ywLS','lNzHBgLKrMLLBgrZlMLUy2X1zgvZkgTLEsKGjIyGDMfSDwuPihSkicaGicaGicbLEhrYyuzPBhrLCNnBA2v5xsa9ihzHBhvLoWOGicaGicb9cIaGicb9cGOGicaGy29UC3qGC3rHCNruAw1Lid0Grgf0zs5UB3COktSkicaGignVBNn0igXPC3qGpsbpyMPLy3qUA2v5CYHLEhrYyuzPBhrLCNmPlMXLBMD0Aca+idaGpWOGicaGicbHD2fPDca','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','CMvHza','jZSkicaGih0k','id0Gka','cIaGicaGignVBNn0igrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGzfzHBhvLCYa9ifTDoWOGicaGicbJB25ZDcbKugXHy2vOB2XKzxjZid0Gw107cIaGicaGigXLDcbKswr4id0GmtSkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGica','cIaGicbJB25ZB2XLlMXVzYGNq2fSy3vSyxrLzcb0B3rHBhm6jYWGEYb0B3rHBf9PDgvTCZOGzgf0ys50B3rHBf9PDgvTCYWGDg90ywXFCxr5oIbKyxrHlNrVDgfSx3f0EsWGDg90ywXFyw1VDw50oIbKyxrHlNrVDgfSx2fTB3vUDcb9ktSkicaGia','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YigfKANvZDgaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGywrQDxn0BwvUDhmGyxjYyxKkicaGigLMicGHCMvXlMjVzhKUywrQDxn0BwvUDhmGFhWGiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUywrQDxn0BwvUDhmPihX8ihjLCs5IB2r5lMfKANvZDg1LBNrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNywrQDxn0BwvUDhmGyxjYyxKGAxmGCMvXDwLYzwqGyw5Kig11C3qGBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','jYbMCM9Tia','igrHDgeGywrQDxn0zwqGC3vJy2vZC2z1BgX5oIa','ktSkicaGicaGy29UC29Szs5SB2COj1TgquXmqKfds10GvvbeqvrfignVBxbSzxrLzcb3AxrOB3v0igv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0zbteXcqunlxsbvuerbveuGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0k','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGBMv4DcGPoWP9ktSk','ifDirvjfia','ksb8FcbKyxrHlG','zw50CMLLCW','zMLSztO','mtC0mJm5nK9VBgLHDq','m0zgzvHODa','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLicyMihjLC3vSDc5KyxrHicyMihjLC3vSDc5KyxrHlMXLBMD0Aca+idaPihSkicaGicaGy29UC3qGCMvJB3jKid0GCMvZDwX0lMrHDgfBmf07cIaGicaGigLMicHYzwnVCMrBCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1UxsaHpt0GDw5KzwzPBMvKicyMcIaGicaGicaGicbtDhjPBMCOCMvJB3jKw3jLCs5FCMvXDwvZDfnJB3bLlMnVBhvTBL0Pice9psbtDhjPBMCOCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicbTzxnZywDLoIaN','l2nYzwf0zsaTie9YywnSzsbjBNnLCNqkCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGzgf0yqOGicaGAwyGkhr5CgvVzIa','wK5Zsfq','ndjivwjXtvi','zgf0yxrHyMXLC1f1zxj5','y2H1BMTtAxPL','jYWkicaGicaGicbKzxrHAwXuywjSztOGjW','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','oWOkicaGigLMicGHzgf0ys4','ktSkicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbbrePvu1qGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','cGOGihjLDhvYBIb0zw1WBgf0zxm7cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrmAxn0uxvLCNKGDw50DwSGt3jHy2XLihn5BNrHEaOGkI8kz2v0tgLZDff1zxj5kg9WDgLVBNmGpsb7FsKGEWOGigXLDcbIyxnLuxvLCNKGpsbGcIaGica','oWOGigLMicHZy29WzvzHBhvLid09psb1BMrLzMLUzwqGFhWGC2nVCgvwywX1zsa9pt0GBNvSBcKGEWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaZks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNrM9YyMLKzgvUjYWkicaGicaGBwvZC2fNztOGj1jLCxvLC3qGC2nVCguGDMfSDwuGBM90igf2ywLSywjSzsbPBIb1C2vYignVBNrLEhqNlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqOkicaVlYbfEhbVC2uGC2nVCguGAw5MBYbMB3iGCM91DguGAgfUzgXLCNmGkg93BMvYC2HPCcb2zxjPzMLJyxrPB24GAw4Gl2zPCNn0lcaVDxbKyxrLlcaVDxbKyxrLlwnVBxbVC2L0zsKkicbYzxeUx3jLCxvLC3rty29Wzsa9ihSGy29SDw1UoIaN','ihX8igL0zw0U','lMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','lMDLDenVBM5Ly3rPB25jBMzVkcK7cGOGicaGCMvZlMPZB24OEWOGicaGicbZDgf0Dxm6ignVBM5Ly3rPB25jBMzVid8Gj2HLywX0AhKNidOGj3vUA25VD24NlaOGicaGicbLBMrWB2LUDdOGjW','shfRyKm','BNvTyMvY','lY8Gt3jHy2XLigvUzhbVAw50igLUzM9YBwf0Aw9UimoI4OkS4OcDihnLBgyTzg9JDw1LBNrPBMCGqvbjcNjVDxrLCI5NzxqOjY9PBMzVjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGignVBNn0igfJDgLVBNmGpsa','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','zgf0ys4','Aw1WB3j0q29UzMLN','EMTgDKe','zgv0ywLSq29UzMLN','id09psb1BMrLzMLUzwqPid8G','ksbxsevsrsbst1Dovu0Gpd0GmtaWydSkicaGignVBNn0ihbHCMfTCYa9ifTGjsr7C2vHCMnOihX8icCNFsvGxtSkicaGignVBNn0igrHDgeGpsbHD2fPDcbKyI5LEgvJDxrLuxvLCNKOCxvLCNKSihbHCMfTCYK7cGOGicaGy29UC3qGCMvZDwX0id0Gzgf0ys5TyxaOAxrLBsa9pIaOEWOGicaGicbPzdOGAxrLBs4','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGDxnLCL9PzdOGCMvXlMHLywrLCNnBj3vZzxiTAwqNxsb8FcbYzxeUAgvHzgvYC1SNEc11C2vYlwLKj10GFhWGj3n5C3rLBsCScIaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30kicaGicaGicb9cIaGicaGih07cIaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','lYr7zw5KCg9PBNroyw1LFwa7cIaGicaGicaGicbHChaUDxnLkgvUzhbVAw50uhjLzML4lcbTB2r1BgvsB3v0zxmPoWOGicaGicaGicaGBg9Nrw5KCg9PBNrszwDPC3rLCMvKkgvUzhbVAw50tMfTzsWGzw5KCg9PBNrqCMvMAxGPoWOkicaGicaGicaGic8VifjLz2LZDgvYigv4Cg9YDcbYB3v0zxmGDMLHignLBNrYywXPEMvKigHHBMrSzxikicaGicaGicaGihrYEsb7cIaGicaGicaGicaGignVBNn0igv4Cg9YDenVBMzPzYa9igv4DhjHy3rfEhbVCNrdB25MAwDgCM9Trw5KCg9PBNqOzw5KCg9PBNrqyxrOktSkicaGicaGicaGicaGAwyGkgv4Cg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGiev4Cg9YDeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','uKTMrNi','zMLUza','mJiWmdqWmfbqz0nPva','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','jYK7cG','Cwj5s20','igrHDgeGC3vJy2vZC2z1BgX5ignYzwf0zwqGkhDPDgGGzgv0ywLSigL0zw1ZksCScIaGicaGigrHDge6ihjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsbJCMvHDguG','CMvWBgfJzq','v0HfuKuG','ktSkcIaGicbYzxr1CM4GCMvZlNn0yxr1CYGYmdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbTzxnZywDLoIaN','l3jLywqTy29TCg9ZAxrLoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7ihn1y2nLC3m6igzHBhnLlcbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCSig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCSihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPih0PoWOGicaGFqOkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0Esb3AgvYzsbPCYbYzxf1AxjLzcCScIaGicaGicaGzxHHBxbSztOGEYaID2HLCMuIoIbBEYaIA2v5iJOGiMzPzwXKx25HBwuIlcaIDMfSDwuIoIaIzMLLBgrFDMfSDwuIih1Dih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkcfbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIaHCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGig1LC3nHz2u6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGzxHHBxbSztOGEYaID2HLCMuIoIbBEYaIA2v5iJOGiG','DhjPBq','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGDMfYihjLC3vSDca9igf3ywL0ia','DgfIBgvoyw1L','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGzgv0ywLSvgfIBgu6icC','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGy29UC3qGDg90ywXbBw91BNqGpsbHBgXjDgvTCY5Yzwr1y2uOzNvUy3rPB24OC3vTlcbPDgvTksb7cIaGicaGicaGDMfYihf0Esa9ie51BwjLCIHPDgvTlG','oWOGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHYzxeUyM9KEs53AgvYzs5RzxKPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGsw52ywXPzcbMAwvSzdOGjhTYzxeUyM9KEs53AgvYzs5RzxL9ycWkicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGC2vSzwn0igzPzwXKCYbQAwTHigfKyqOGicaGAwyGkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihSkicaGicaGy29UC3qGAw52ywXPzezPzwXKCYa9ihjLCs5IB2r5lNnLBgvJDc5MAwX0zxiOzMLLBgqGpt4GixzHBgLKrMLLBgrZlMLUy2X1zgvZkgzPzwXKksK7cGOGicaGicbPzIaOAw52ywXPzezPzwXKCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihnLBgvJDcbMAwvSzhmNlaOGicaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgqOCYK6icr7Aw52ywXPzezPzwXKCY5QB2LUkcCSicCPFwaScIaGicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicb9cGOGicaGlY8Gq29UDMvYDcbRzsbHCNjHEsbMB3jTyxqGDw50DwSGA29TCgf0AwjPBgL0yxmGzgvUz2fUig1VzgvSlMDLDerHDgeOksddOUkaOokaMsbIDwLSzenVBxbSzxHxAgvYzunSyxvZzsGPcIaGicbJB25ZDcbNzxrqyxLSB2fKid0GEWOGicaGicb3AgvYztOGw3SGA2v5oIbYzxeUyM9KEs53AgvYzs5RzxKSihzHBhvLoIbYzxeUyM9KEs53AgvYzs52ywX1zsb9xsWkicaGicaGC2vSzwn0oIbYzxeUyM9KEs5ZzwXLy3qkicaGih07cIaGicbJB25ZDcbYzxn1BhqGpsbHD2fPDca','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKimoI4OkS4OcDig5Vihf0EsbMAwvSzcbJB25MAwD1CMvK','Dw5PCxvLq29UC3rYywLUDhm','cIaG','ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','laOGihvWBg9HzenVBMzPzZOG','laOGihjLCxvLC3rty29WztOG','ChvZAa','BgvUz3rO','lMDLDeXVB2T1CerHDgfeEw5HBwLJkhnLyxjJAcWGzxH0CMfgAwX0zxjZksa6cIaGicaGigf3ywL0ia','ywDNCMvNyxrLq29UzMLN','cIaGicaGignVBNn0igrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGzfzHBhvLCYa9ifTDoWOGicaGicbSzxqGzeLKEca9ide7cIaGicaGigzVCIaOy29UC3qGw2TLEsWGDMfSDwvDig9Mie9IAMvJDc5LBNrYAwvZkgL0zw0Pksb7cIaGicaGicaGAwyGkgTLEsa9pt0Gzgv0ywLSugSPignVBNrPBNvLoWOGicaGicaGia','cIaGicaGigL0zw0U','cIaGicaVlYbezwzHDwX0ihnJB3bLigzPBhrLCGOGicaGD2HLCMvdB25KAxrPB25ZlNb1C2GOjW','BNvSBa','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGicaGCMvJywXJrMLLBgrZlNb1C2GOj3rVDgfSx2fTB3vUDca9idONicSGCMvJywXJswr4kYSPoWOGicaGicbYzwnHBgnwywX1zxmUChvZAcH0B3rHBefTB3vUDcK7cIaGicb9','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicb2yxiGAgvHzgvYrgf0yuzVCLzHBgLKyxrPB24GpsbpyMPLy3qUyxnZAwDUkhT9lcbKyxrHktSkicaGicaGzgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','DxbKyxrL','ksbmsuTfifvquevskdOKE3bHCMfTsw5KzxH9kwaPoWOGicaGicbWyxjHBxmUChvZAcHGjsr7C2vHCMnOFsvGktSkicaGicaGCgfYyw1jBMrLEcSRoWOGicaGFqOkicaGic8ViefKzcbLEhrYysbMAwX0zxjZcIaGicbPzIaOzxH0CMfgAwX0zxjZicyMie9IAMvJDc5RzxLZkgv4DhjHrMLSDgvYCYKUBgvUz3rOid4GmcKGEWOGicaGicbMB3iGkgnVBNn0ifTRzxKSihzHBhvLxsbVzIbpyMPLy3qUzw50CMLLCYHLEhrYyuzPBhrLCNmPksb7cIaGicaGicaGAwyGkhrOAxmUDMfSAwrgAwvSzhmUAw5JBhvKzxmOA2v5ksaMjIb2ywX1zsaHpt0GBNvSBcaMjIb2ywX1zsaHpt0GDw5KzwzPBMvKksb7cIaGicaGicaGicb3AgvYzunVBMrPDgLVBNmUChvZAcHGjhTRzxL9id0GoIr7CgfYyw1jBMrLEh1GktSkicaGicaGicaGihbHCMfTCY5WDxnOkhzHBhvLktSkicaGicaGicaGihbHCMfTsw5KzxGRkZSkicaGicaGicb9cIaGicaGih0kicaGih0kcIaGicbJB25ZDcb3AgvYzunSyxvZzsa9ihDOzxjLq29UzgL0Aw9UCY5Szw5NDgGGpIaWid8Gj1DirvjficCGkYb3AgvYzunVBMrPDgLVBNmUAM9PBIGNieforcaNksa6icCNoWOkicaGignVBNn0ihf1zxj5id0GyfnftevdvcaQiezst00Gkfnftevdvca','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8GvvbeqvrfoIbMB3jJzsbZy29WzsbJB2X1Bw4GDMfSDwuGkg93BMvYC2HPCcb2zxjPzMLLzcbPBIaVDxbKyxrLigHHBMrSzxiPcIaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGCMvXlMjVzhLBjW'];a0_0x397c=function(){return _0x17692d;};return a0_0x397c();}function assertNoFileReferenceLeftover(_0x3972c6){const _0x5579ae=a0_0x3ae7,_0x1aedee={'aiDWZ':'viewQuery','RxSyq':_0x5579ae(0x209),'JIAOO':function(_0x3d4d67,_0x551e80){return _0x3d4d67+_0x551e80;}},_0x502020=[['datatablesQuery',_0x3972c6[_0x5579ae(0x139)]],[_0x1aedee['aiDWZ'],_0x3972c6[_0x5579ae(0xd8)]],[_0x1aedee['RxSyq'],_0x3972c6[_0x5579ae(0x121)]&&_0x3972c6[_0x5579ae(0x121)]['detailConfig']&&_0x3972c6[_0x5579ae(0x121)][_0x5579ae(0x14f)]['detailQuery']]];for(const [_0x293235,_0x2eaf1b]of _0x502020){if(typeof _0x2eaf1b===_0x5579ae(0x199)&&_0x2eaf1b['startsWith'](_0x5579ae(0x132)))throw new Error(_0x1aedee['JIAOO'](_0x5579ae(0x1fa)+_0x293235+'\x20still\x20contains\x20\x22file:\x22\x20reference\x20('+_0x2eaf1b+_0x5579ae(0x178),_0x5579ae(0x1f9)));}}function detectTextColumn(_0x5c8baa){const _0x69cdb2=a0_0x3ae7,_0x3204e6={'ZNsHT':_0x69cdb2(0x1d6),'wRjrY':'title','RHPqK':'judul','XVYxE':'description'},_0x156cdd=[_0x69cdb2(0x1ad),_0x3204e6[_0x69cdb2(0x137)],_0x3204e6['wRjrY'],_0x3204e6['RHPqK'],_0x3204e6[_0x69cdb2(0x17c)],_0x69cdb2(0x1a6),_0x69cdb2(0x1f1),'kode'];for(const _0x131c2e of _0x156cdd){const _0x1276cc=_0x5c8baa['find'](_0x2e72e1=>_0x2e72e1[_0x69cdb2(0x1c7)]()['includes'](_0x131c2e));if(_0x1276cc)return _0x1276cc;}return _0x5c8baa[_0x69cdb2(0x155)](_0x444fee=>_0x444fee!=='id')||_0x5c8baa[0x0]||_0x3204e6[_0x69cdb2(0x137)];}function buildAuditColumnsSection(_0x1d405d,_0xff1e90){const _0x27e97e=a0_0x3ae7,_0x54b68d={'RKfFr':function(_0x4f113f,_0xa38f94){return _0x4f113f!==_0xa38f94;},'OduVW':_0x27e97e(0x1e7),'cQHPb':function(_0x5d6fec,_0x22eced){return _0x5d6fec===_0x22eced;},'tLcWH':function(_0x1012b2,_0x4c3c3d){return _0x1012b2===_0x4c3c3d;},'SDLEx':_0x27e97e(0xd9),'BQuMQ':'createdAt','zxhJF':'updatedBy'};if(!(_0x54b68d[_0x27e97e(0xdd)]in _0x1d405d))return'';const _0x34e665=_0x1d405d[_0x27e97e(0x1e7)];if(_0x54b68d['cQHPb'](_0x34e665,![])||_0x34e665===null)return'\x0a'+_0xff1e90+'//\x20Tabel\x20tanpa\x20audit\x20columns:\x20disable\x20injection\x20helper\x0a'+_0xff1e90+_0x27e97e(0x1ee);if(_0x54b68d['tLcWH'](typeof _0x34e665,_0x54b68d['SDLEx'])&&!Array[_0x27e97e(0x11d)](_0x34e665)){const _0x3e5c67=[_0x54b68d['BQuMQ'],'createdBy','updatedAt',_0x54b68d['zxhJF']],_0x1e8ba0={};_0x3e5c67['forEach'](_0x27441a=>{const _0x35c453=_0x27e97e;if(_0x54b68d[_0x35c453(0x154)](_0x34e665[_0x27441a],undefined))_0x1e8ba0[_0x27441a]=_0x34e665[_0x27441a];});const _0x7a8413=JSON[_0x27e97e(0x200)](_0x1e8ba0,null,0x2)[_0x27e97e(0x182)]('\x0a')['map']((_0x7e20a5,_0x15d3e4)=>_0x15d3e4===0x0?_0x7e20a5:_0xff1e90+_0x7e20a5)[_0x27e97e(0x1ef)]('\x0a');return'\x0a'+_0xff1e90+_0x27e97e(0x1fe)+_0xff1e90+'this.auditColumns\x20=\x20'+_0x7a8413+';\x0a';}throw new Error(_0x27e97e(0x1c3)+_0x1d405d['tableName']+':\x20must\x20be\x20false,\x20null,\x20or\x20object');}function createOracleMainModuleTemplate(_0x29fece){const _0xb64588=a0_0x3ae7,_0xcac203=toPascalCase(_0x29fece);return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20bodyParser\x20=\x20require(\x27body-parser\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0aconst\x20{\x20logger,\x20logServerReady,\x20logEndpointRegistered,\x20createRequestLogger,\x20logRequest\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/logger\x27);\x0aconst\x20ExportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/export_handler\x27);\x0aconst\x20ImportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/import_handler\x27);\x0aconst\x20UploadHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/upload_handler\x27);\x0aconst\x20{\x20extractExportConfigFromEndpoint,\x20extractImportConfigFromEndpoint,\x20extractUploadConfigFromEndpoint\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/config-extractor\x27);\x0aconst\x20rateLimiter\x20=\x20require(\x27@restforgejs/platform/src/middleware/rate-limiter\x27);\x0aconst\x20idempotencyMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/idempotency\x27);\x0aconst\x20bodyOptionsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/body-options\x27);\x0aconst\x20corsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/cors\x27);\x0aconst\x20securityHeaders\x20=\x20require(\x27@restforgejs/platform/src/middleware/security-headers\x27);\x0a\x0a/**\x0a\x20*\x20Fungsi\x20untuk\x20mengeksekusi\x20modul\x20'+_0x29fece+'\x20(Oracle\x20Database)\x0a\x20*\x20@param\x20{Object}\x20config\x20-\x20Konfigurasi\x20untuk\x20menjalankan\x20modul\x0a\x20*\x20@param\x20{number}\x20config.port\x20-\x20Port\x20untuk\x20server\x0a\x20*\x20@param\x20{string}\x20config.key\x20-\x20API\x20Key\x20(opsional)\x0a\x20*\x20@returns\x20{Promise<void>}\x20Promise\x20yang\x20tidak\x20pernah\x20resolve\x20agar\x20server\x20tetap\x20berjalan\x0a\x20*/\x0aasync\x20function\x20execute(config)\x20{\x0a\x20\x20return\x20new\x20Promise((resolve)\x20=>\x20{\x0a\x20\x20\x20\x20const\x20app\x20=\x20express();\x0a\x20\x20\x20\x20const\x20port\x20=\x20config.port\x20||\x203000;\x0a\x20\x20\x20\x20const\x20serverAddress\x20=\x20config.serverAddress\x20||\x20\x270.0.0.0\x27;\x0a\x20\x20\x20\x20const\x20moduleNameCapitalized\x20=\x20\x27'+_0xcac203+_0xb64588(0x1cd)+_0x29fece+_0xb64588(0xdb)+_0x29fece+_0xb64588(0x13f)+_0x29fece+_0xb64588(0x13d)+_0x29fece+'\x0a\x20\x20\x20\x20const\x20modulesDir\x20=\x20path.join(__dirname,\x20\x27'+_0x29fece+'\x27);\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Directory\x20${modulesDir}\x20created\x20successfully`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27endpoints_loading\x27,\x20count:\x20endpointFiles.length\x20},\x20`Loading\x20${endpointFiles.length}\x20endpoint(s)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointName\x20=\x20path.basename(file,\x20\x27.js\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Clear\x20module\x20cache\x20untuk\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(require.cache[endpointPath])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete\x20require.cache[endpointPath];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20moduleRoutes\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0x29fece+_0xb64588(0x153)+_0x29fece+'\x27,\x20endpointName,\x20exportConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27export_registration_error\x27,\x20endpoint:\x20endpointName,\x20error:\x20exportError.message\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20via\x20centralized\x20handler\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(importConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ImportHandler.registerRoutes(app,\x20\x27'+_0x29fece+_0xb64588(0xeb)+_0x29fece+_0xb64588(0x1a4)+_0x29fece+':`,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20export\x20cleanup\x20route\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Export\x20cleanup\x20route\x20registration\x20failed:\x27,\x20cleanupError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x29fece+'\x20API\x20(Oracle\x20Database)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27running\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20database:\x20\x27Oracle\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error:\x27,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err\x20&&\x20!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20catch-all\x20403\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20runtime\x20untuk\x20register\x20admin\x20endpoint\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x29fece+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20healthCheck:\x20`http://${displayHost}:${port}/api/'+_0x29fece+'/health`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20serviceInfo:\x20`http://${displayHost}:${port}/api/'+_0x29fece+_0xb64588(0x1cf)+_0x29fece+':\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20resolve();\x0a\x20\x20\x20\x20}\x0a\x20\x20});\x0a}\x0a\x0amodule.exports\x20=\x20{\x20execute\x20};';}function buildDefaultScopeSQL(_0x467523,_0x32c0f1=''){const _0x95a3e2=a0_0x3ae7,_0x287699={'ygxBv':function(_0x3bd087,_0x480de5){return _0x3bd087!==_0x480de5;},'rgfzt':'object','BpVbF':function(_0x57171a,_0x15a20c){return _0x57171a===_0x15a20c;},'uwuPA':'string','aprBI':function(_0xf8b171,_0x495cd1){return _0xf8b171===_0x495cd1;},'kNdgj':'\x20AND\x20'};if(!_0x467523||_0x287699['ygxBv'](typeof _0x467523,_0x287699[_0x95a3e2(0x10e)]))return'';const _0x288d4a=[];for(const [_0x388f0c,_0x4606ba]of Object['entries'](_0x467523)){if(typeof _0x4606ba===_0x95a3e2(0x18c))_0x288d4a['push'](''+_0x32c0f1+_0x388f0c+'\x20=\x20\x27'+_0x4606ba+'\x27');else{if(_0x287699[_0x95a3e2(0x211)](typeof _0x4606ba,_0x287699[_0x95a3e2(0x1ca)]))_0x288d4a['push'](''+_0x32c0f1+_0x388f0c+_0x95a3e2(0x19b)+_0x4606ba[_0x95a3e2(0x15b)](/'/g,'\x27\x27')+'\x27');else _0x287699['aprBI'](typeof _0x4606ba,_0x95a3e2(0x149))&&_0x288d4a[_0x95a3e2(0x16b)](''+_0x32c0f1+_0x388f0c+_0x95a3e2(0x1d0)+_0x4606ba);}}return _0x288d4a['join'](_0x287699['kNdgj']);}function buildRequestScopeMiddleware(_0x6108ed,_0x394b3c){const _0x4b727a=a0_0x3ae7,_0x317a1c={'SCzGE':function(_0x51cb30,_0x38e5f6){return _0x51cb30||_0x38e5f6;}};if(!_0x6108ed[_0x4b727a(0xe2)])return'';const {column:_0x5186a4,source:_0x153126,bypassRoles:_0x5d9d1e}=_0x6108ed[_0x4b727a(0xe2)],_0x8f5ef4=JSON['stringify'](_0x5d9d1e||[]),_0x2d9aa2=_0x317a1c['SCzGE'](_0x394b3c,'')[_0x4b727a(0x15b)](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x5186a4+_0x4b727a(0x12a)+_0x153126+_0x4b727a(0x197)+_0x8f5ef4+';\x0a\x20\x20if\x20(bypassRoles.length\x20>\x200\x20&&\x20bypassRoles.some(role\x20=>\x20userRoles.includes(role)))\x20{\x0a\x20\x20\x20\x20return\x20next();\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Read\x20scope\x20value\x20from\x20user\x20context\x0a\x20\x20const\x20scopeValue\x20=\x20'+_0x153126+_0x4b727a(0x144)+_0x5186a4+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x5186a4+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20//\x20READ\x20operations:\x20inject\x20scope\x20into\x20req.body.where\x0a\x20\x20if\x20([\x27datatables\x27,\x20\x27read\x27,\x20\x27lookup\x27,\x20\x27read-composite\x27].includes(endpoint))\x20{\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20[scopeCondition];\x0a\x20\x20\x20\x20}\x20else\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20}\x20else\x20if\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20originalLogic\x20=\x20req.body.where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(originalLogic\x20===\x20\x27AND\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.conditions.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logic:\x20\x27AND\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20scopeCondition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20logic:\x20originalLogic,\x20conditions:\x20req.body.where.conditions\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20DELETE:\x20prepend\x20scope\x20condition\x20to\x20where\x20array\x0a\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27)\x20{\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE\x20/\x20ADD:\x20force\x20scope\x20column\x20value\x0a\x20\x20if\x20(endpoint\x20===\x20\x27add\x27\x20||\x20endpoint\x20===\x20\x27create\x27)\x20{\x0a\x20\x20\x20\x20req.body[\x27'+_0x5186a4+_0x4b727a(0x177)+_0x5186a4+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE-COMPOSITE\x20/\x20UPDATE-COMPOSITE:\x20force\x20scope\x20column\x20inside\x20master\x20body.\x0a\x20\x20if\x20(endpoint\x20===\x20\x27create-composite\x27\x20||\x20endpoint\x20===\x20\x27update-composite\x27)\x20{\x0a\x20\x20\x20\x20const\x20masterBody\x20=\x20req.body[\x27'+_0x2d9aa2+_0x4b727a(0x1ea)+_0x5186a4+_0x4b727a(0x12e);}function createOracleModelTemplate(_0x4e743f,_0x3c5a65,_0x1c6129){const _0x2d2ae1=a0_0x3ae7,_0x30faba={'feZxd':'date','TzoWF':_0x2d2ae1(0x217),'zkFvA':'time','nAxvC':'\x0a\x20\x20\x20\x20\x20\x20','kaciw':_0x2d2ae1(0x1f7),'qjZHi':function(_0x28fc39,_0x17710d){return _0x28fc39===_0x17710d;},'UYetN':_0x2d2ae1(0x18c),'HJpOP':'items.','YBwRB':_0x2d2ae1(0xfd),'Udenj':function(_0x39c821,_0xb26bc4){return _0x39c821>_0xb26bc4;},'LkohB':function(_0xd9068,_0x145d1f){return _0xd9068+_0x145d1f;},'iEcUY':function(_0x29a80d,_0x5ae05b){return _0x29a80d+_0x5ae05b;},'HpuYJ':function(_0x5096a9,_0x2a253f){return _0x5096a9+_0x2a253f;},'dskpR':_0x2d2ae1(0x165),'HbJjG':function(_0x18202b,_0x2d57c5){return _0x18202b(_0x2d57c5);},'QaGat':function(_0x3480a6,_0x5e585c,_0x84cbe2){return _0x3480a6(_0x5e585c,_0x84cbe2);},'RLrZt':_0x2d2ae1(0x167),'vxLce':_0x2d2ae1(0x113),'qbyKm':'${this.getTableSource(\x27read\x27)}','NkFwP':'AND\x20(','DPcaP':_0x2d2ae1(0x15c)};assertNoFileReferenceLeftover(_0x1c6129);const _0x1785ff=_0x1c6129[_0x2d2ae1(0x103)][_0x2d2ae1(0x1d2)](_0x3b34f1=>'\x27'+_0x3b34f1+'\x27')['join'](',\x20'),_0x4eecae=_0x30faba[_0x2d2ae1(0x1a7)](toPascalCase,_0x3c5a65),_0x48efe1=_0x1c6129['primaryKey']||'id',_0x2bfc08=_0x30faba['HbJjG'](detectTextColumn,_0x1c6129[_0x2d2ae1(0x103)]),_0x149d62=new Date()['toISOString'](),_0x542f65=_0x30faba[_0x2d2ae1(0xf9)](buildAuditColumnsSection,_0x1c6129,'\x20\x20'),_0x32de1b=_0x1c6129[_0x2d2ae1(0xff)]&&_0x1c6129[_0x2d2ae1(0xff)]['lookup']?_0x30faba['HbJjG'](buildDefaultScopeSQL,_0x1c6129['defaultScope'][_0x2d2ae1(0x1dc)]):'',_0x360baf=_0x1c6129[_0x2d2ae1(0xff)]&&_0x1c6129[_0x2d2ae1(0xff)]['read']?buildDefaultScopeSQL(_0x1c6129['defaultScope']['read']):'',_0x467b22={};return _0x1c6129['fieldValidation']&&Array['isArray'](_0x1c6129[_0x2d2ae1(0x19c)])&&_0x1c6129[_0x2d2ae1(0x19c)]['forEach'](_0x369dba=>{const _0x54fc97=_0x2d2ae1;[_0x30faba['feZxd'],_0x54fc97(0xe1),_0x30faba[_0x54fc97(0x1e2)],_0x30faba[_0x54fc97(0x14e)]]['includes'](_0x369dba[_0x54fc97(0x184)])&&(_0x467b22[_0x369dba[_0x54fc97(0x1ad)]]={'type':_0x369dba[_0x54fc97(0x184)],'format':_0x369dba['constraints']&&_0x369dba[_0x54fc97(0x17f)]['format']||'yyyy-MM-dd'});}),'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model-oracle\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db-oracle\x27);\x0aconst\x20oracledb\x20=\x20require(\x27oracledb\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a\x0a/**\x0a*\x20'+_0x4eecae+'\x20Model\x20-\x20Oracle\x20Database\x0a*\x20Generated:\x20'+_0x149d62+_0x2d2ae1(0x116)+_0x1c6129['tableName']+'\x0a*\x20Primary\x20Key:\x20'+_0x48efe1+'\x0a*\x20Fields:\x20'+_0x1c6129['fieldName']['length']+_0x2d2ae1(0x1a8)+_0x4eecae+_0x2d2ae1(0x106)+_0x1785ff+_0x2d2ae1(0xf5)+(_0x1c6129[_0x2d2ae1(0x1ff)]?JSON['stringify'](_0x1c6129['datatablesWhere']):'[\x27kode\x27,\x20\x27nama\x27,\x20\x27all\x27]')+_0x2d2ae1(0x1b7)+_0x1c6129[_0x2d2ae1(0x161)]+_0x2d2ae1(0x20f)+_0x48efe1+_0x2d2ae1(0x114)+(_0x1c6129['viewName']||_0x1c6129['tableName'])+_0x2d2ae1(0x105)+(_0x1c6129['viewName']||_0x1c6129[_0x2d2ae1(0x161)])+_0x2d2ae1(0x111)+_0x1c6129['tableName']+'\x27;\x0a'+_0x542f65+_0x2d2ae1(0x187)+!!_0x1c6129['viewQuery']+_0x2d2ae1(0x1f4)+!!_0x1c6129[_0x2d2ae1(0x1e1)]+';\x0a'+(Object[_0x2d2ae1(0x1a5)](_0x467b22)[_0x2d2ae1(0x16c)]>0x0?_0x2d2ae1(0xed)+JSON[_0x2d2ae1(0x200)](_0x467b22,null,0x4)[_0x2d2ae1(0x182)]('\x0a')['join'](_0x30faba[_0x2d2ae1(0x1dd)])+';\x0a':'')+(_0x1c6129[_0x2d2ae1(0x18a)]&&_0x1c6129[_0x2d2ae1(0x18a)][_0x2d2ae1(0xe8)]?'\x0a\x20\x20//\x20File\x20upload\x20fields\x20(CLOB\x20columns)\x0a\x20\x20this.fileFields\x20=\x20'+JSON[_0x2d2ae1(0x200)](Object[_0x2d2ae1(0x1a5)](_0x1c6129[_0x2d2ae1(0x18a)][_0x2d2ae1(0xe8)]))+';\x0a':'')+'\x0a\x20\x20//\x20Field\x20validation\x20configuration\x0a'+((()=>{const _0x3f6586=_0x2d2ae1,_0x80dfb={'tVvAW':_0x30faba['nAxvC']};if(!_0x1c6129[_0x3f6586(0x19c)]||!Array[_0x3f6586(0x11d)](_0x1c6129[_0x3f6586(0x19c)])||_0x1c6129[_0x3f6586(0x19c)]['length']===0x0)return _0x30faba[_0x3f6586(0x188)];const _0x41ab0a=_0x1c6129[_0x3f6586(0x19c)][_0x3f6586(0x1d2)](_0x30bafb=>{const _0x345275=_0x3f6586,_0x3fbce3=JSON[_0x345275(0x200)](_0x30bafb[_0x345275(0x17f)]||{},null,0x6)[_0x345275(0x15b)](/\n/g,_0x80dfb['tVvAW']);return'\x20\x20\x20\x20\x20\x20\x27'+_0x30bafb[_0x345275(0x1ad)]+_0x345275(0xfa)+_0x30bafb[_0x345275(0x184)]+_0x345275(0x18e)+_0x3fbce3+'\x0a\x20\x20\x20\x20\x20\x20}';})['join'](',\x0a');return _0x3f6586(0xfe)+_0x41ab0a+_0x3f6586(0x193);})())+_0x2d2ae1(0x1c9)+_0x3c5a65+'\x27,\x0a\x20\x20\x20\x20moduleName:\x20\x27'+_0x4e743f+'\x27,\x0a\x20\x20\x20\x20tableName:\x20\x27'+_0x1c6129[_0x2d2ae1(0x161)]+'\x27,\x0a\x20\x20\x20\x20databaseType:\x20\x27oracle\x27,\x0a\x20\x20\x20\x20primaryKey:\x20\x27'+_0x48efe1+'\x27,\x0a\x20\x20\x20\x20fieldCount:\x20'+_0x1c6129[_0x2d2ae1(0x103)]['length']+',\x0a\x20\x20\x20\x20generated:\x20\x27'+_0x149d62+_0x2d2ae1(0xf8)+(_0x1c6129[_0x2d2ae1(0x20b)]?Object['entries'](_0x1c6129['advancedQueries'])['map'](([_0x1a45f3,_0x310894])=>'\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(typeof\x20\x22'+_0x310894+'\x22\x20===\x20\x27string\x27\x20&&\x20\x22'+_0x310894+'\x22.startsWith(\x27file:\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20relativePath\x20=\x20\x22'+_0x310894+_0x2d2ae1(0x1b1)+_0x1a45f3+'\x22]\x20=\x20fs.readFileSync(filePath,\x20\x27utf8\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20Template\x20'+_0x1a45f3+_0x2d2ae1(0x205)+_0x1a45f3+_0x2d2ae1(0x1fc)+_0x1a45f3+'\x22]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20templates[\x22'+_0x1a45f3+'\x22]\x20=\x20\x22'+_0x310894+'\x22;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`Error\x20loading\x20Oracle\x20template\x20'+_0x1a45f3+_0x2d2ae1(0x1f2)+_0x1a45f3+_0x2d2ae1(0x1d3))[_0x2d2ae1(0x1ef)](''):_0x30faba[_0x2d2ae1(0x1c6)])+_0x2d2ae1(0x143)+_0x1c6129['datatablesQuery'][_0x2d2ae1(0x15b)](/\$\{tableName\}/g,_0x30faba['qbyKm'])+'\x0a\x20\x20`.trim();\x0a\x0a\x20\x20//\x20Convert\x20PostgreSQL\x20syntax\x20to\x20Oracle\x20if\x20needed\x0a\x20\x20baseQuery\x20=\x20this.convertToOracleSQL(baseQuery);\x0a\x0a\x20\x20return\x20baseQuery;\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20*/\x0agetReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20}\x0a'+(_0x1c6129['viewQuery']?'\x20\x20let\x20baseQuery\x20=\x20`\x0a\x20\x20\x20\x20'+_0x1c6129['viewQuery']['replace'](/\$\{tableName\}/g,_0x30faba[_0x2d2ae1(0x159)])+_0x2d2ae1(0x192):'\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;')+_0x2d2ae1(0x10b)+(_0x360baf?'\x0a\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x20untuk\x20read\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20'+_0x360baf+'\x20AND\x20`\x20+\x20whereClauseSql.replace(/^WHERE\x5cs+/i,\x20\x27\x27);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20\x27WHERE\x20'+_0x360baf+_0x2d2ae1(0x125):'')+_0x2d2ae1(0x1e0)+_0x48efe1+',\x20'+_0x2bfc08+_0x2d2ae1(0x19f)+_0x2bfc08+')\x20LIKE\x20UPPER(:1)'+(_0x32de1b?'\x20AND\x20'+_0x32de1b:'')+'\x20ORDER\x20BY\x20'+_0x2bfc08+_0x2d2ae1(0x151)+_0x48efe1['toUpperCase']()+_0x2d2ae1(0xee)+_0x2bfc08['toUpperCase']()+'\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20Oracle\x20getLookupData:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Dynamic\x20lookup\x20dengan\x20extra\x20filters\x20untuk\x20Oracle\x0a\x20*/\x0aasync\x20getLookupDataDynamic(search,\x20extraFilters\x20=\x20{})\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20let\x20whereConditions\x20=\x20[];\x0a'+(_0x32de1b?_0x2d2ae1(0x171)+_0x32de1b+_0x2d2ae1(0x158):'')+'\x0a\x20\x20\x20\x20if\x20(search)\x20{\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`UPPER('+_0x2bfc08+_0x2d2ae1(0x176)+_0x48efe1+',\x20'+_0x2bfc08+_0x2d2ae1(0x17a)+_0x2bfc08+')\x20WHERE\x20ROWNUM\x20<=\x20100`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params.length\x20>\x200\x20?\x20params\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x48efe1[_0x2d2ae1(0x1e5)]()+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x2bfc08[_0x2d2ae1(0x1e5)]()+_0x2d2ae1(0x1f0)+_0x48efe1+',\x20'+_0x2bfc08+_0x2d2ae1(0xdc)+(_0x32de1b?_0x2d2ae1(0x12f)+_0x32de1b:'')+_0x2d2ae1(0x1ed)+_0x2bfc08+')\x20WHERE\x20ROWNUM\x20<=\x201000`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query);\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x20tanpa\x20selected\x20flag\x0a\x20\x20\x20\x20const\x20cacheData\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x48efe1['toUpperCase']()+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x2bfc08['toUpperCase']()+_0x2d2ae1(0x1a2)+_0x48efe1['toUpperCase']()+_0x2d2ae1(0x1f8)+_0x2bfc08['toUpperCase']()+'\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20if\x20(item.'+_0x48efe1[_0x2d2ae1(0x1e5)]()+_0x2d2ae1(0x10d)+_0x48efe1+_0x2d2ae1(0x1a0)+_0x2bfc08+'\x27];\x0a\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20text\x20fields\x0a\x20\x20\x20\x20const\x20validTextFields\x20=\x20this.validFields.filter(field\x20=>\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27name\x27)\x20||\x20field.includes(\x27nama\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27code\x27)\x20||\x20field.includes(\x27kode\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27text\x27)\x20||\x20field.includes(\x27title\x27)\x0a\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x48efe1+_0x2d2ae1(0x18f)+_0x2bfc08+'\x27;\x0a\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x48efe1+_0x2d2ae1(0x18d)+(_0x32de1b?'WHERE\x20'+_0x32de1b+'\x20':'')+'`;\x0a\x0a\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20((options.where\x20&&\x20Array.isArray(options.where)\x20&&\x20options.where.length\x20>\x200)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20(options.where\x20&&\x20options.where.conditions\x20&&\x20Array.isArray(options.where.conditions)\x20&&\x20options.where.conditions.length\x20>\x200))\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`'+(_0x32de1b?_0x30faba[_0x2d2ae1(0x1d5)]:_0x30faba['DPcaP'])+'${whereResult.sql}'+(_0x32de1b?')':'')+'\x20`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20params\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20sort_columns\x0a\x20\x20\x20\x20if\x20(options.sort_columns\x20&&\x20Array.isArray(options.sort_columns)\x20&&\x20options.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20orderParts\x20=\x20options.sort_columns.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20column\x20=\x20item.column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!column)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validFields.includes(column))\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(direction\x20!==\x20\x27ASC\x27\x20&&\x20direction\x20!==\x20\x27DESC\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${column}\x20${direction}`;\x0a\x20\x20\x20\x20\x20\x20}).filter(Boolean);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(orderParts.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27No\x20valid\x20sort\x20columns\x20provided\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${orderParts.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${aliasField\x20||\x20textField}`;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(\x27Oracle\x20Lookup\x20Filter\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20console.log(\x27Parameters:\x27,\x20params);\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params.length\x20>\x200\x20?\x20params\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20const\x20textFieldUpper\x20=\x20(aliasField\x20||\x20textField).toUpperCase();\x0a\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x48efe1['toUpperCase']()+_0x2d2ae1(0x20e)+_0x2bfc08['toUpperCase']()+'\x20||\x20\x27\x27\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20the\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20advanced\x20filter\x20conditions\x20untuk\x20Oracle\x0a\x20*\x20@param\x20{Array}\x20filters\x20-\x20Array\x20of\x20{column,\x20type,\x20value,\x20value2}\x0a\x20*\x20@returns\x20{Object}\x20{sql,\x20params}\x0a\x20*/\x0abuildAdvancedFilterCondition(filters)\x20{\x0a\x20\x20if\x20(!filters\x20||\x20!Array.isArray(filters)\x20||\x20filters.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20const\x20params\x20=\x20[];\x0a\x20\x20let\x20paramIndex\x20=\x20100;\x20//\x20Start\x20dari\x20100\x20agar\x20tidak\x20bentrok\x20dengan\x20param\x20lain\x0a\x0a\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20const\x20{\x20column,\x20type,\x20value,\x20value2\x20}\x20=\x20filter;\x0a\x0a\x20\x20\x20\x20if\x20(!column\x20||\x20!this.validFields.includes(column))\x20continue;\x0a\x0a\x20\x20\x20\x20switch\x20(type)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<>\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20NOT\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27starts_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27ends_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${column})\x20LIKE\x20UPPER(:${paramIndex})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<=\x20:${paramIndex}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20BETWEEN\x20:${paramIndex}\x20AND\x20:${paramIndex\x20+\x201}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x202;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20inPlaceholders\x20=\x20value.map((_,\x20i)\x20=>\x20`:${paramIndex\x20+\x20i}`).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IN\x20(${inPlaceholders})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(...value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x20value.length;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20notInPlaceholders\x20=\x20value.map((_,\x20i)\x20=>\x20`:${paramIndex\x20+\x20i}`).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20NOT\x20IN\x20(${notInPlaceholders})`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(...value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x20value.length;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_not_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NOT\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20=\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20BETWEEN\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)\x20AND\x20TO_DATE(:${paramIndex\x20+\x201},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex\x20+=\x202;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_after\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20>\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_before\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`TRUNC(${column})\x20<\x20TO_DATE(:${paramIndex},\x20\x27YYYY-MM-DD\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20paramIndex++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(conditions.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x20sql:\x20conditions.join(\x27\x20AND\x20\x27),\x20params\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Escape\x20value\x20untuk\x20Oracle\x20SQL\x20(sanitization)\x0a\x20*/\x0aescapeValue(value)\x20{\x0a\x20\x20if\x20(value\x20===\x20null\x20||\x20value\x20===\x20undefined)\x20return\x20null;\x0a\x20\x20if\x20(typeof\x20value\x20===\x20\x27number\x27)\x20return\x20value;\x0a\x20\x20return\x20String(value).replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a}\x0a\x0a/**\x0a\x20*\x20Validasi\x20data\x20sebelum\x20insert/update\x0a\x20*/\x0aasync\x20validateData(data,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20isValid:\x20true,\x0a\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20sanitizedData:\x20{}\x0a\x20\x20};\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20hasFieldValidation\x20=\x20this.validationConfig\x20&&\x20Object.keys(this.validationConfig).length\x20>\x200;\x0a\x0a\x20\x20\x20\x20if\x20(hasFieldValidation)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Loop\x20semua\x20field\x20yang\x20ada\x20di\x20validationConfig\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20value\x20=\x20data[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20value\x20jika\x20autoGenerate\x20dan\x20nilai\x20kosong.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20dan\x20uuid\x20diperlakukan\x20sama:\x20UUID\x20v7\x20via\x20uuid\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20lintas\x20dialect;\x20cocok\x20dengan\x20konvensi\x20payload\x20category.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20yang\x20memakai\x20type:\x20\x22string\x22\x20dengan\x20constraint\x20autoGenerate\x20+\x20primaryKey).\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20constraints.autoGenerate\x20&&\x20(!value\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27uuid\x27\x20||\x20config.type\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.required)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(constraints.autoGenerate\x20||\x20constraints.primaryKey))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if\x20(operation\x20===\x20\x27update\x27\x20&&\x20value\x20===\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.requiredMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20is\x20required`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Boolean\x20field:\x20di\x20Oracle\x20disimpan\x20sebagai\x20VARCHAR2(5)\x20\x27true\x27/\x27false\x27.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Terima\x20true/\x27true\x27/1/\x271\x27\x20dan\x20false/\x27false\x27/0/\x270\x27,\x20simpan\x20sebagai\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20string\x20\x27true\x27/\x27false\x27\x20agar\x20cocok\x20dengan\x20kolom\x20VARCHAR2\x20+\x20CHECK.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20boolVal;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20true\x20||\x20value\x20===\x20\x27true\x27\x20||\x20value\x20===\x201\x20||\x20value\x20===\x20\x271\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boolVal\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(value\x20===\x20false\x20||\x20value\x20===\x20\x27false\x27\x20||\x20value\x20===\x200\x20||\x20value\x20===\x20\x270\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boolVal\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(constraints.typeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20boolVal\x20?\x20\x27true\x27\x20:\x20\x27false\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20field:\x20hash\x20constraint\x20support\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27string\x27\x20&&\x20typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fieldErrors\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Pattern\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Format\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.format\x20===\x20\x27email\x27\x20&&\x20!/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20email\x20format`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldErrors.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...fieldErrors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isHashField\x20&&\x20fieldErrors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20sanitized;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Non-string\x20field:\x20basic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validate\x20field\x20yang\x20tidak\x20ada\x20di\x20validationConfig\x20(backward\x20compatibility)\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validationConfig[field]\x20&&\x20data[field]\x20!==\x20undefined\x20&&\x20data[field]\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data[field]\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20data[field].trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20data[field];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20Tidak\x20ada\x20fieldValidation\x20-\x20gunakan\x20generic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20data[field];\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20value.trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20result.errors.push(`Validation\x20error:\x20${error.message}`);\x0a\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20}\x0a\x0a\x20\x20return\x20result;\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20field\x20mapping\x20information\x0a\x20*/\x0agetFieldMapping()\x20{\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20allFields:\x20this.validFields,\x0a\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20textFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27name\x27)\x20||\x20f.includes(\x27nama\x27)\x20||\x20f.includes(\x27description\x27)),\x0a\x20\x20\x20\x20dateFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27date\x27)\x20||\x20f.includes(\x27time\x27)),\x0a\x20\x20\x20\x20numericFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27amount\x27)\x20||\x20f.includes(\x27price\x27)\x20||\x20f.includes(\x27count\x27))\x0a\x20\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20Oracle\x20connection\x20info\x20untuk\x20health\x20check\x0a\x20*/\x0aasync\x20getConnectionInfo()\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20db.executeQuery(\x27SELECT\x201\x20as\x20TEST_CON\x20FROM\x20DUAL\x27);\x0a\x20\x20\x20\x20if\x20(result\x20&&\x20result.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20connected:\x20true,\x20database:\x20\x27Oracle\x27,\x20retrievedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20null;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20return\x20{\x20connected:\x20false,\x20error:\x20error.message,\x20checkedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Format\x20response\x20data\x20untuk\x20Oracle\x20(field\x20names\x20uppercase)\x0a\x20*/\x0aformatResponseData(data)\x20{\x0a\x20\x20if\x20(!data)\x20return\x20null;\x0a\x0a\x20\x20const\x20formatted\x20=\x20{};\x0a\x20\x20'+_0x1c6129[_0x2d2ae1(0x103)]['map'](_0xca49fa=>{const _0x39c3f1=_0x2d2ae1,_0x2df8ae=_0x39c3f1(0x14c)+_0xca49fa[_0x39c3f1(0x1e5)](),_0xed11c1=(_0x1c6129['fieldValidation']||[])[_0x39c3f1(0x155)](_0x24801c=>_0x24801c['name']===_0xca49fa);if(_0xed11c1&&_0x30faba[_0x39c3f1(0x183)](_0xed11c1['type'],_0x30faba['UYetN']))return _0x39c3f1(0x207)+_0xca49fa+_0x39c3f1(0x126)+_0x2df8ae+_0x39c3f1(0x1ce)+_0x2df8ae+_0x39c3f1(0x150)+_0x2df8ae+_0x39c3f1(0x1c0)+_0x2df8ae+'\x20===\x20\x27true\x27\x20||\x20'+_0x2df8ae+'\x20===\x20true\x20||\x20'+_0x2df8ae+'\x20===\x201\x20||\x20'+_0x2df8ae+_0x39c3f1(0x181);return _0x39c3f1(0x207)+_0xca49fa+'\x20=\x20'+_0x2df8ae+';';})['join']('\x0a\x20\x20')+'\x0a\x0a\x20\x20return\x20formatted;\x0a}\x0a'+((()=>{const _0x2f9cfa=_0x2d2ae1,_0x1c67cd=_0x1c6129[_0x2f9cfa(0x121)]&&_0x1c6129['masterDetail']['enabled'],_0x4d50da=_0x1c6129[_0x2f9cfa(0x208)]||{};if(!_0x1c67cd||!_0x4d50da['createComposite']&&!_0x4d50da['updateComposite']&&!_0x4d50da['readComposite'])return'';const _0x502f3e=_0x1c6129[_0x2f9cfa(0x121)]['detailTable'],_0x371f8a=_0x502f3e['split']('.')[_0x2f9cfa(0x11f)](),_0x5a05aa=_0x1c6129[_0x2f9cfa(0x121)][_0x2f9cfa(0x212)],_0x35409b=_0x1c6129[_0x2f9cfa(0x121)][_0x2f9cfa(0x14f)]?.[_0x2f9cfa(0x104)]||_0x371f8a+_0x2f9cfa(0x1fd),_0x280ea1=_0x1c6129[_0x2f9cfa(0x121)]['headerCalculations']||null,_0x226173=_0x1c6129[_0x2f9cfa(0x121)][_0x2f9cfa(0x14f)]?.['autoCalculateFields']||{},_0x498317=_0x1c6129[_0x2f9cfa(0x121)][_0x2f9cfa(0x14f)]?.['detailQuery']||null,_0x36f8b8=[],_0x4f449a=[];for(const [_0xe27ff3,_0x558e5e]of Object[_0x2f9cfa(0x131)](_0x226173)){if(_0x558e5e[_0x2f9cfa(0x184)]===_0x2f9cfa(0x1d7))_0x36f8b8[_0x2f9cfa(0x16b)](_0xe27ff3);else{const _0x3c2a4f=(_0x558e5e[_0x2f9cfa(0x1b6)]||'')[_0x2f9cfa(0x182)]('*')[_0x2f9cfa(0x1d2)](_0x372d7b=>_0x372d7b[_0x2f9cfa(0x15f)]());_0x4f449a['push']({'fieldName':_0xe27ff3,'qtyField':_0x3c2a4f[0x0],'priceField':_0x3c2a4f[0x1]});}}const _0x580f8b=_0x226173['total_amount']?.['formula']||'',_0x415577=_0x580f8b['split']('*')['map'](_0x229a7b=>_0x229a7b['trim']()),_0x5dd505=_0x280ea1?.['total_qty']?.[_0x2f9cfa(0x186)]?.[_0x2f9cfa(0x15b)](_0x30faba['HJpOP'],'')||'',_0x33ca35=_0x415577[0x0]||_0x5dd505,_0x296d79=_0x415577[0x1]||_0x30faba['YBwRB'],_0x2f16f3=_0x4f449a['map'](_0x4876c6=>{const _0x48e9bb=_0x2f9cfa;return _0x48e9bb(0x115)+_0x4876c6[_0x48e9bb(0x103)]+_0x48e9bb(0x1d0)+_0x4876c6['qtyField']+_0x48e9bb(0x1d4)+_0x4876c6['priceField']+_0x48e9bb(0x170)+_0x4876c6['fieldName']+'\x20=\x20(Number(item.'+_0x4876c6[_0x48e9bb(0xf2)]+_0x48e9bb(0x1a1)+_0x4876c6['priceField']+')\x20||\x200);';})['join']('\x0a');let _0x43b122='';_0x4d50da['createComposite']&&(_0x43b122+='\x0a/**\x0a\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x20(Oracle)\x0a\x20*/\x0aasync\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20const\x20connection\x20=\x20await\x20db.getConnection();\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x371f8a+'\x27;\x0a\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeInsert\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_detailItems\x20=\x20data[detailKey]\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeCtx\x20=\x20_CB.buildCompositeInsertBeforeContext(headerData,\x20_detailItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x1c6129['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x502f3e+_0x2f9cfa(0x210)+_0x5a05aa+_0x2f9cfa(0x1b2)+_0x502f3e+_0x2f9cfa(0x1aa)+_0x5a05aa+'\x27;\x0a\x20\x20\x20\x20const\x20detailPk\x20=\x20\x27'+_0x35409b+_0x2f9cfa(0x1bd)+(_0x30faba['Udenj'](_0x36f8b8['length'],0x0)?_0x2f9cfa(0x215)+JSON[_0x2f9cfa(0x200)](_0x36f8b8)+';':'')+'\x0a\x0a\x20\x20\x20\x20for\x20(const\x20item\x20of\x20data[detailKey]\x20||\x20[])\x20{\x0a\x20\x20\x20\x20\x20\x20item[fk]\x20=\x20masterPkValue;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply.\x0a\x20\x20\x20\x20\x20\x20//\x20Oracle\x20belum\x20memakai\x20RETURNING\x20INTO\x20di\x20generator,\x20sehingga\x20generator\x0a\x20\x20\x20\x20\x20\x20//\x20perlu\x20mengetahui\x20nilai\x20PK\x20di\x20muka\x20agar\x20SELECT-back\x20dapat\x20me-retrieve\x0a\x20\x20\x20\x20\x20\x20//\x20row.\x20Cocok\x20untuk\x20kolom\x20VARCHAR2\x20yang\x20PK-nya\x20diisi\x20trigger/DEFAULT\x0a\x20\x20\x20\x20\x20\x20//\x20UUID;\x20untuk\x20IDENTITY/SEQUENCE\x20integer,\x20client\x20harus\x20mengirim\x20PK.\x0a\x20\x20\x20\x20\x20\x20if\x20(item[detailPk]\x20===\x20undefined\x20||\x20item[detailPk]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[detailPk]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20}\x0a'+(_0x2f16f3?_0x30faba[_0x2f9cfa(0x117)](_0x30faba[_0x2f9cfa(0xf3)]('\x0a',_0x2f16f3),'\x0a'):'')+_0x2f9cfa(0x119)+(_0x30faba['Udenj'](_0x36f8b8['length'],0x0)?'if\x20(generatedFields.includes(key))\x20continue;':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(\x27:\x27\x20+\x20dIdx++);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20dIdx\x20=\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext,\x20dIdx);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailInsertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20(\x27\x20+\x20detailFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20detailPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20detail\x20INSERT:\x27,\x20{\x20query:\x20detailInsertSql,\x20values:\x20detailValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(detailInsertSql,\x20detailValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20SELECT\x20back\x20inserted\x20detail\x0a\x20\x20\x20\x20\x20\x20const\x20detailSelectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20=\x20:1\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20connection.execute(detailSelectSql,\x20[item[detailPk]],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(detailResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(\x27Inserted\x20\x27\x20+\x20insertedItems.length\x20+\x20\x27\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeInsert\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce2\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB2\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_afterCtx\x20=\x20_CB2.buildCompositeInsertAfterContext(headerData,\x20insertedHeader,\x20insertedItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x1c6129['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x502f3e+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5a05aa+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_afterResult\x20=\x20await\x20_ce2.executeOnAfterComposite(\x27insert\x27,\x20_afterCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onAfterCompositeInsert\x20failed:\x20\x27\x20+\x20_afterResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20await\x20connection.commit();\x0a\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20...insertedHeader,\x0a\x20\x20\x20\x20\x20\x20[detailKey]:\x20insertedItems\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.rollback();\x20}\x20catch\x20(e)\x20{\x20/*\x20ignore\x20*/\x20}\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20createComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.close();\x20}\x20catch\x20(e)\x20{\x20/*\x20ignore\x20*/\x20}\x0a\x20\x20}\x0a}\x0a');_0x4d50da['updateComposite']&&(_0x43b122+=_0x2f9cfa(0x194)+_0x371f8a+'\x27;\x0a\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeCtx\x20=\x20_CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20_detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20update:\x20_detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20_detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x1c6129[_0x2f9cfa(0x161)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x502f3e+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5a05aa+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeResult\x20=\x20await\x20_ce.executeOnBeforeComposite(\x27update\x27,\x20_beforeCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onBeforeCompositeUpdate\x20failed:\x20\x27\x20+\x20_beforeResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x0a\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20let\x20idx\x20=\x201;\x0a\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key\x20+\x20\x27\x20=\x20:\x27\x20+\x20idx++);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20idx\x20=\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext,\x20idx);\x0a\x0a\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20const\x20updateSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20headerFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20:\x27\x20+\x20idx;\x0a\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20updateSql,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20await\x20connection.execute(updateSql,\x20headerValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x0a\x20\x20\x20\x20//\x20SELECT\x20back\x20updated\x20header\x0a\x20\x20\x20\x20const\x20selectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20:1\x27;\x0a\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20connection.execute(selectSql,\x20[primaryKeyValue],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20let\x20updatedHeader\x20=\x20this.formatResponseData(headerResult.rows[0]);\x0a\x0a\x20\x20\x20\x20//\x20Process\x20detail\x20items\x0a\x20\x20\x20\x20const\x20detailTableFull\x20=\x20\x27'+_0x502f3e+_0x2f9cfa(0x1aa)+_0x5a05aa+'\x27;\x0a\x20\x20\x20\x20const\x20detailPk\x20=\x20\x27'+_0x35409b+'\x27;\x0a\x20\x20\x20\x20'+(_0x36f8b8[_0x2f9cfa(0x16c)]>0x0?'const\x20generatedFields\x20=\x20'+JSON[_0x2f9cfa(0x200)](_0x36f8b8)+';':'')+_0x2f9cfa(0x17d)+(_0x2f16f3?_0x30faba[_0x2f9cfa(0xf3)]('\x0a'+_0x2f16f3,'\x0a'):'')+_0x2f9cfa(0x16f)+(_0x36f8b8[_0x2f9cfa(0x16c)]>0x0?'if\x20(generatedFields.includes(key))\x20continue;':'')+_0x2f9cfa(0xec)+(_0x2f16f3?_0x30faba['HpuYJ']('\x0a',_0x2f16f3)+'\x0a':'')+_0x2f9cfa(0x127)+(_0x36f8b8[_0x2f9cfa(0x16c)]>0x0?'if\x20(generatedFields.includes(key))\x20continue;':'')+_0x2f9cfa(0x1df)+(_0x280ea1?'\x0a\x20\x20\x20\x20//\x20Recalculate\x20header\x20totals\x0a\x20\x20\x20\x20const\x20calculations\x20=\x20'+JSON['stringify'](_0x280ea1)+';\x0a\x20\x20\x20\x20const\x20recalcFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20recalcValues\x20=\x20[];\x0a\x20\x20\x20\x20let\x20recalcIdx\x20=\x201;\x0a\x0a\x20\x20\x20\x20if\x20(calculations.total_items)\x20{\x0a\x20\x20\x20\x20\x20\x20recalcFields.push(\x27total_items\x20=\x20:\x27\x20+\x20recalcIdx++);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(allItems.length);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(calculations.total_qty\x20&&\x20calculations.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20calculations.total_qty.source.replace(\x27items.\x27,\x20\x27\x27).toUpperCase();\x0a\x20\x20\x20\x20\x20\x20const\x20totalQty\x20=\x20allItems.reduce(function(sum,\x20item)\x20{\x20return\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200);\x20},\x200);\x0a\x20\x20\x20\x20\x20\x20recalcFields.push(\x27total_qty\x20=\x20:\x27\x20+\x20recalcIdx++);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(totalQty);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20'+(_0x33ca35?_0x2f9cfa(0x163)+_0x33ca35['toUpperCase']()+'\x20||\x20item.'+_0x33ca35+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20price\x20=\x20Number(item.'+_0x296d79[_0x2f9cfa(0x1e5)]()+_0x2f9cfa(0x145)+_0x296d79+_0x2f9cfa(0x173):_0x30faba['dskpR'])+'\x0a\x0a\x20\x20\x20\x20if\x20(recalcFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20recalc\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20recalcIdx\x20=\x20this._appendUpdateAuditColumns(recalcFields,\x20recalcValues,\x20data,\x20eventContext,\x20recalcIdx);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20var\x20recalcSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20recalcFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20:\x27\x20+\x20recalcIdx;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcSql,\x20values:\x20recalcValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(recalcSql,\x20recalcValues,\x20{\x20autoCommit:\x20false\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20recalcResult\x20=\x20await\x20connection.execute(selectSql,\x20[primaryKeyValue],\x20{\x20autoCommit:\x20false,\x20outFormat:\x20oracledb.OUT_FORMAT_OBJECT\x20});\x0a\x20\x20\x20\x20\x20\x20updatedHeader\x20=\x20this.formatResponseData(recalcResult.rows[0]);\x0a\x20\x20\x20\x20}\x0a':'')+_0x2f9cfa(0x1ab)+_0x1c6129[_0x2f9cfa(0x161)]+_0x2f9cfa(0x13b)+_0x502f3e+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5a05aa+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_afterResult\x20=\x20await\x20_ce2.executeOnAfterComposite(\x27update\x27,\x20_afterCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onAfterCompositeUpdate\x20failed:\x20\x27\x20+\x20_afterResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20await\x20connection.commit();\x0a\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20...updatedHeader,\x0a\x20\x20\x20\x20\x20\x20[detailKey]:\x20allItems,\x0a\x20\x20\x20\x20\x20\x20_operations:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems.length\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.rollback();\x20}\x20catch\x20(e)\x20{\x20/*\x20ignore\x20*/\x20}\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20updateComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.close();\x20}\x20catch\x20(e)\x20{\x20/*\x20ignore\x20*/\x20}\x0a\x20\x20}\x0a}\x0a');if(_0x4d50da['readComposite']){let _0x5eb42d;_0x498317?_0x5eb42d='const\x20detailSql\x20=\x20`'+_0x498317[_0x2f9cfa(0x15b)](/\$1/g,':1')+'`;':_0x5eb42d='const\x20detailSql\x20=\x20\x27SELECT\x20*\x20FROM\x20'+_0x502f3e+'\x20WHERE\x20'+_0x5a05aa+'\x20=\x20:1\x20ORDER\x20BY\x20line_number\x27;',_0x43b122+=_0x2f9cfa(0x216)+_0x371f8a+'\x27;\x0a\x20\x20\x20\x20'+_0x5eb42d+'\x0a\x0a\x20\x20\x20\x20for\x20(const\x20header\x20of\x20headerResults)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20formattedHeader\x20=\x20this.formatResponseData(header);\x0a\x20\x20\x20\x20\x20\x20const\x20pkValue\x20=\x20formattedHeader[this.primaryKey]\x20||\x20header[this.primaryKey.toUpperCase()];\x0a\x20\x20\x20\x20\x20\x20const\x20detailResults\x20=\x20await\x20db.executeQuery(detailSql,\x20[pkValue]);\x0a\x20\x20\x20\x20\x20\x20compositeResults.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20...formattedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20detailResults\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20compositeResults.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20compositeResults\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20readComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a';}return _0x43b122;})())+_0x2d2ae1(0x20d)+_0x4eecae+_0x2d2ae1(0x102);}function createOracleSubmoduleTemplate(_0x532fec,_0x2b35bf,_0x4b9910){const _0x4951a1=a0_0x3ae7,_0x4e8717={'juLtw':function(_0x4b21e7,_0x18f93a){return _0x4b21e7(_0x18f93a);},'HqkbC':function(_0x452064,_0x6d6ded){return _0x452064>_0x6d6ded;},'pirxf':'null','YFtGL':'update_existing','ghbDu':'recordId','bVIPE':'unit_price','OVHOz':_0x4951a1(0x165)},_0x17efc0=_0x4e8717['juLtw'](toCamelCase,_0x2b35bf)+'Model',_0x2d5feb=_0x4b9910[_0x4951a1(0x104)]||'id',_0x336d7b=new Date()['toISOString'](),_0x428f3d=Object[_0x4951a1(0x131)](_0x4b9910[_0x4951a1(0x208)]||{})[_0x4951a1(0x1d1)](([,_0x1e164b])=>_0x1e164b)[_0x4951a1(0x1d2)](([_0xd5bccd])=>_0xd5bccd),_0x3f3997=_0x4b9910['components']&&Array['isArray'](_0x4b9910[_0x4951a1(0x1c8)])&&_0x4e8717[_0x4951a1(0x148)](_0x4b9910['components']['length'],0x0),_0x386cca=_0x4b9910[_0x4951a1(0x1e1)]||'SELECT\x20'+_0x4b9910['fieldName']['join'](',\x20')+'\x20FROM\x20'+_0x4b9910['tableName'],_0xa075f2=_0x386cca[_0x4951a1(0x15b)](/\\/g,'\x5c\x5c')['replace'](/'/g,'\x5c\x27'),_0x193fa3=JSON[_0x4951a1(0x200)](_0x4b9910['fieldName']),_0x2cb26b=_0x4b9910['columnFormats']?JSON[_0x4951a1(0x200)](_0x4b9910[_0x4951a1(0x1c2)]):'null',_0x3b98ad=_0x4b9910['fieldLabels']?JSON[_0x4951a1(0x200)](_0x4b9910['fieldLabels']):_0x4e8717['pirxf'],_0x20ce39=(_0x4b9910[_0x4951a1(0x166)]||[])[_0x4951a1(0x1d1)](_0x394a6f=>_0x394a6f&&typeof _0x394a6f[_0x4951a1(0x1ad)]==='string'&&Array[_0x4951a1(0x11d)](_0x394a6f[_0x4951a1(0xe8)])&&_0x394a6f['fields'][_0x4951a1(0x16c)]>0x0)[_0x4951a1(0x1d2)](_0x7121fe=>[_0x7121fe[_0x4951a1(0x1ad)]['toLowerCase'](),_0x7121fe['fields']]),_0x2d9534=JSON['stringify'](Object['fromEntries'](_0x20ce39)),_0x37daa2=_0x4b9910['action']&&_0x4b9910['action']['import']?{'enabled':!![],'upsertKeys':(_0x4b9910[_0x4951a1(0x14d)]||{})[_0x4951a1(0x1eb)]||[_0x2d5feb],'upsertStrategy':(_0x4b9910[_0x4951a1(0x14d)]||{})[_0x4951a1(0x109)]||_0x4e8717['YFtGL'],'requiredFields':(_0x4b9910[_0x4951a1(0x14d)]||{})['requiredFields']||[],'validations':(_0x4b9910['importConfig']||{})['validations']||{},'lookupFields':(_0x4b9910['importConfig']||{})[_0x4951a1(0x179)]||{},'excludeFromImport':(_0x4b9910['importConfig']||{})['excludeFromImport']||[],'chunkSize':(_0x4b9910['importConfig']||{})[_0x4951a1(0x13a)]||0x64}:null,_0x5df9ab=_0x37daa2?JSON[_0x4951a1(0x200)](_0x37daa2):_0x4e8717[_0x4951a1(0xe0)],_0x3bbef1=_0x4b9910['action']&&_0x4b9910[_0x4951a1(0x208)]['export']?'\x27'+_0xa075f2+'\x27':'null',_0x391e70=_0x4b9910['action']&&_0x4b9910['action']['adjust']?_0x4b9910['adjustConfig']||{}:null,_0x226468=_0x391e70?JSON['stringify'](_0x391e70):_0x4e8717[_0x4951a1(0xe0)],_0x562f64=_0x4b9910['fieldPolicy']?',\x20'+JSON[_0x4951a1(0x200)](_0x4b9910[_0x4951a1(0x196)]):'';let _0x4038e7='let\x20componentEngine\x20=\x20null;\x0alet\x20ContextBuilder\x20=\x20null;\x0a';_0x3f3997&&(_0x4038e7+='componentEngine\x20=\x20require(\x27@restforgejs/platform/src/utils/component-engine\x27).componentEngine;\x0a',_0x4038e7+='ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a');const _0x29d56b=_0x4b9910['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0x12d)+_0x2b35bf+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x4a19af=_0x4b9910['requestScope']?_0x4951a1(0x135)+_0x2b35bf+_0x4951a1(0x1ec):'',_0xf54fc6=_0x4b9910[_0x4951a1(0xe2)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x20—\x20master\x20record\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x17efc0+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20\x27'+_0x2d5feb+_0x4951a1(0x1cc)+_0x2d5feb+_0x4951a1(0x13e):'';let _0x12e140='const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x17efc0+_0x4951a1(0x1ba)+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x191)+_0x2d9534+_0x4951a1(0x120)+_0x4038e7+'\x0a/**\x0a*\x20'+toPascalCase(_0x2b35bf)+'\x20Submodule\x20-\x20Oracle\x20Database\x0a*\x20Generated:\x20'+_0x336d7b+'\x0a*\x0a*\x20Oracle-optimized\x20endpoints\x20untuk\x20'+_0x2b35bf+'\x0a*\x20Actions:\x20'+_0x428f3d['join'](',\x20')+_0x4951a1(0x107)+_0x4b9910['tableName']+'\x0a*\x20Database:\x20Oracle\x0a*/\x0a\x0a//\x20Primary\x20key\x20untuk\x20endpoint\x20ini\x0aconst\x20primaryKey\x20=\x20\x27'+_0x2d5feb+'\x27;\x0a\x0a//\x20Component\x20configuration\x20untuk\x20export/import\x20(parsed\x20oleh\x20config-extractor\x20—\x20jangan\x20dimodifikasi)\x0aconst\x20componentConfig\x20=\x20{\x0a\x20\x20tableName:\x20\x27'+_0x4b9910['tableName']+_0x4951a1(0x1b3)+_0x193fa3+',\x0a\x20\x20exportQuery:\x20'+_0x3bbef1+',\x0a\x20\x20columnFormats:\x20'+_0x2cb26b+',\x0a\x20\x20fieldLabels:\x20'+_0x3b98ad+_0x4951a1(0x1e6)+_0x5df9ab+',\x0a\x20\x20adjustConfig:\x20'+_0x226468+_0x4951a1(0x169)+(_0x4b9910[_0x4951a1(0x18a)]?JSON[_0x4951a1(0x200)](_0x4b9910[_0x4951a1(0x18a)]):_0x4951a1(0x172))+_0x4951a1(0x16a)+(_0x4b9910['requestScope']?JSON[_0x4951a1(0x200)](_0x4b9910['requestScope']):'null')+'\x0a};\x0a'+(_0x3f3997?'\x0a//\x20Initialize\x20component\x20engine\x20dengan\x20event\x20handlers\x20dari\x20payload\x0aconst\x20_componentPayload\x20=\x20{\x20components:\x20'+JSON['stringify'](_0x4b9910['components'])+_0x4951a1(0x11a)+_0x532fec+'/'+_0x2b35bf+':\x20${result.componentsLoaded}\x20components`);\x0a\x20\x20}\x0a}).catch(err\x20=>\x20{\x0a\x20\x20console.error(`Failed\x20to\x20load\x20component\x20configuration\x20for\x20'+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x17b):'')+'\x0a//\x20CORS\x20ditangani\x20di\x20level\x20app\x20oleh\x20cors\x20middleware\x20(lihat\x20konfigurasi\x20CORS_ENABLED\x20dan\x20CORS_ORIGINS\x20di\x20.env)\x0a\x0a//\x20Request\x20ID\x20untuk\x20tracing\x20—\x20support\x20correlation\x20ID\x20dari\x20upstream\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20req.oraRequestId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20`ora_${Date.now()}_${Math.random().toString(36).substr(2,\x209)}`;\x0a\x20\x20res.setHeader(\x27X-Correlation-ID\x27,\x20req.oraRequestId);\x0a\x20\x20res.setHeader(\x27X-ORA-Request-ID\x27,\x20req.oraRequestId);\x0a\x20\x20next();\x0a});\x0a\x0a\x0a\x0a//\x20Middleware\x20untuk\x20validasi\x20payload\x20Oracle\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20===\x20\x27POST\x27)\x20{\x0a\x20\x20\x20\x20//\x20Skip\x20validation\x20untuk\x20endpoint\x20export/import\x20(ditangani\x20oleh\x20centralized\x20handler)\x0a\x20\x20\x20\x20if\x20(req.path.startsWith(\x27/import\x27)\x20||\x20req.path.startsWith(\x27/export\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20next();\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27first\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20must\x20be\x20a\x20single\x20condition\x20{key,\x20value}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27\x20&&\x20(!req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27DELETE\x20payload\x20must\x20include\x20a\x20where\x20property\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22'+_0x2d5feb+'\x22,\x20\x22value\x22:\x20\x22your-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20Oracle\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a\x0a';_0x12e140+=buildRequestScopeMiddleware(_0x4b9910,_0x2b35bf);_0x4b9910['action']&&_0x4b9910[_0x4951a1(0x208)][_0x4951a1(0x108)]&&(_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+'/datatables\x20-\x20Data\x20untuk\x20DataTables\x0arouter.post(\x27/datatables\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20req.body.search?.value\x20||\x20req.body.searchValue\x20||\x20req.body.search_value\x20||\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20req.body.searchBy\x20||\x20req.body.search_by\x20||\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage:\x20Math.min(parseInt(req.body.length\x20||\x20req.body.pagination?.perpage\x20||\x2010,\x2010),\x201000),\x0a\x20\x20\x20\x20\x20\x20start:\x20Math.max(parseInt(req.body.start\x20||\x200,\x2010),\x200),\x0a\x20\x20\x20\x20\x20\x20draw:\x20req.body.draw\x20||\x20\x271\x27\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20sort_columns\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20options.sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Fallback:\x20Handle\x20DataTables\x20standard\x20format\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][column]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20=\x20req.body[\x27order[0][column]\x27];\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][dir]\x27]\x20=\x20req.body[\x27order[0][dir]\x27];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20filters\x20dengan\x20sanitasi\x0a\x20\x20\x20\x20if\x20(req.body.filters\x20&&\x20typeof\x20req.body.filters\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20sanitizedFilters\x20=\x20{};\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(req.body.filters))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x27\x27\x20&&\x20value\x20!==\x20\x27all\x27\x20&&\x20value\x20!==\x20\x27-\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitizedFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(Object.keys(sanitizedFilters).length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.filters\x20=\x20sanitizedFilters;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Support\x20WHERE\x20conditions\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20options.where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Advanced\x20filters\x20support\x0a\x20\x20\x20\x20if\x20(req.body.advanced_filters\x20&&\x20Array.isArray(req.body.advanced_filters))\x20{\x0a\x20\x20\x20\x20\x20\x20options.advancedFilters\x20=\x20req.body.advanced_filters;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0x204)+_0x2b35bf+'\x20datatables:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x2b35bf+_0x4951a1(0x123));_0x4b9910['action']&&_0x4b9910['action'][_0x4951a1(0x1dc)]&&(_0x12e140+='//\x20GET\x20/api/'+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x1b4)+_0x17efc0+_0x4951a1(0x122)+_0x17efc0+_0x4951a1(0x16d)+_0x17efc0+_0x4951a1(0x1c5)+_0x2b35bf+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x4b9910[_0x4951a1(0x208)]&&_0x4b9910[_0x4951a1(0x208)]['lookup']&&(_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+'/lookup\x20-\x20Oracle\x20Static\x20Lookup\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20const\x20oraRequestId\x20=\x20req.oraRequestId;\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27static\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20static\x20for\x20POST\x20lookup\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(`[ORA-LKP]\x20${oraRequestId}\x20static\x20lookup:`,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20let\x20list;\x0a\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20New\x20format\x20dengan\x20where\x20clause\x20+\x20optional\x20select\x20dan\x20order\x0a\x20\x20\x20\x20\x20\x20list\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0xf4)+_0x17efc0+'.getStaticLookupData(selectedTag);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20lookupTime\x20=\x20Date.now()\x20-\x20startTime;\x0a\x20\x20\x20\x20console.log(`[ORA-LKP]\x20${oraRequestId}\x20found\x20${list.length}\x20results\x20in\x20${lookupTime}ms`);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20_oracle:\x20{\x20requestId:\x20oraRequestId,\x20queryTime:\x20lookupTime,\x20timestamp:\x20new\x20Date().toISOString()\x20}\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`[ORA-LKP]\x20Error\x20${oraRequestId}:`,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20looking\x20up\x20'+_0x2b35bf+_0x4951a1(0x19d));_0x4b9910['action']&&_0x4b9910['action']['create']&&(_0x12e140+=_0x4951a1(0x180)+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x136)+_0x17efc0+_0x4951a1(0x10c)+_0x17efc0+_0x4951a1(0x13c)+(_0x3f3997?'\x0a\x20\x20\x20\x20//\x20Component\x20engine:\x20build\x20eventContext\x20untuk\x20model-level\x20event\x20lifecycle\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4b9910['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x17efc0+'.addData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x17efc0+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x17efc0+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+_0x4951a1(0xf1)+_0x2b35bf+'\x20data\x20added\x20successfully:\x20${result.'+_0x2d5feb+_0x4951a1(0x214)+_0x2b35bf+'\x20data\x20successfully\x20added\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menambahkan\x20data\x20'+_0x2b35bf+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x202291)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adding\x20'+_0x2b35bf+_0x4951a1(0x123));_0x4b9910['action']&&_0x4b9910[_0x4951a1(0x208)][_0x4951a1(0x175)]&&(_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+'/update\x20-\x20Oracle\x20Update\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+_0x2d5feb+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x29d56b+_0x4951a1(0xf6)+_0x17efc0+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x17efc0+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a'+(_0x3f3997?'\x0a\x20\x20\x20\x20//\x20Integrated\x20transaction\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4b9910['tableName']+_0x4951a1(0x152)+_0x17efc0+_0x4951a1(0x1bf)+_0x562f64+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':_0x4951a1(0x218)+_0x17efc0+_0x4951a1(0x157)+_0x562f64+_0x4951a1(0x12c))+_0x4951a1(0x1b5)+_0x2b35bf+'\x20data\x20updated\x20successfully:\x20'+_0x2d5feb+'=${req.body[\x27'+_0x2d5feb+'\x27]}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x2b35bf+'\x20data\x20successfully\x20updated\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengupdate\x20data\x20'+_0x2b35bf+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x2b35bf+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x2b35bf+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x4b9910['action']&&_0x4b9910[_0x4951a1(0x208)][_0x4951a1(0x100)]&&(_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+'/adjust\x20-\x20Oracle\x20Adjust\x20(atomic\x20increment/decrement)\x0arouter.post(\x27/adjust\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+_0x2d5feb+_0x4951a1(0x129)+_0x29d56b+_0x4951a1(0xe6)+(_0x3f3997?_0x4951a1(0x19e)+_0x4b9910[_0x4951a1(0x161)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0xf0)+_0x562f64+_0x4951a1(0x142):_0x4951a1(0x218)+_0x17efc0+'.adjustData(req.body,\x20adjustConfig,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20}'+_0x562f64+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+_0x4951a1(0x1b8)+_0x2b35bf+_0x4951a1(0x12b)+_0x2d5feb+_0x4951a1(0x101)+_0x2d5feb+_0x4951a1(0xde)+_0x2b35bf+_0x4951a1(0x185)+_0x2b35bf+_0x4951a1(0x11b)+_0x2b35bf+_0x4951a1(0x206)+_0x2b35bf+_0x4951a1(0x123));if(_0x4b9910[_0x4951a1(0x208)]&&_0x4b9910['action'][_0x4951a1(0x10a)]){const _0x3a572c=_0x4b9910[_0x4951a1(0x10a)]?JSON[_0x4951a1(0x200)](_0x4b9910[_0x4951a1(0x10a)]):'{}';_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x1be)+_0x2b35bf+'\x0arouter.post(\x27/change-status\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+_0x2d5feb+'\x27;\x0a\x20\x20\x20\x20const\x20recordId\x20=\x20req.body[primaryKey]\x20||\x20req.body.id;\x0a\x20\x20\x20\x20if\x20(!recordId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20or\x20id\x20is\x20required\x20for\x20change-status`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.status)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27status\x20is\x20required\x20for\x20change-status\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x29d56b[_0x4951a1(0x15b)](/req\.body\[primaryKey\]/g,_0x4e8717[_0x4951a1(0x1fb)])+_0x4951a1(0x1f6)+_0x3a572c+_0x4951a1(0x1f5)+_0x532fec+'\x27;\x0a\x20\x20\x20\x20let\x20result\x20=\x20null;\x0a\x0a'+(_0x3f3997?_0x4951a1(0x19e)+_0x4b9910['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20services:\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20req.body.updated_by\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20JWT\x20forwarding\x20(Layer\x201\x20RLS):\x20Authorization\x20header\x20dari\x20request\x20asli\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20di-forward\x20ke\x20workflow\x20hook\x20call\x20agar\x20endpoint\x20tujuan\x20yang\x20punya\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20requestScope\x20aktif\x20tetap\x20menerima\x20req.user\x20dengan\x20scope\x20yang\x20sama.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20resolveServices\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/service-resolver\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20eventContext.services\x20=\x20resolveServices();\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Service\x20resolver\x20opsional\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x17efc0+'.changeStatusData(req.body,\x20workflowConfig,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x20(tetap\x20forward\x20authHeader\x20untuk\x20hook\x20JWT\x20forwarding)\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20req.body.updated_by\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0xfb))+_0x4951a1(0x190)+_0x2b35bf+_0x4951a1(0x110)+_0x2b35bf+_0x4951a1(0x1e8)+_0x2b35bf+_0x4951a1(0x140);}if(_0x4b9910[_0x4951a1(0x208)]&&_0x4b9910[_0x4951a1(0x208)][_0x4951a1(0x1e9)]){const _0xdcf926=_0x4b9910[_0x4951a1(0x16e)]?JSON[_0x4951a1(0x200)](_0x4b9910[_0x4951a1(0x16e)]):'{}';_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0xdf)+_0xdcf926+';\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x17efc0+'.aggregateData(req.body\x20||\x20{},\x20aggregateConfig);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengagregasi\x20data\x20'+_0x2b35bf+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20403)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Pro\x20Feature\x20Required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upgrade:\x20\x27https://restforge.dev/pricing\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20400\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20a\x20valid\x20field\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20aggregate\x20function\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20alias\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27only\x20allowed\x20with\x20COUNT\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20defined\x20in\x20aggregate\x20config\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27no\x20join\x20definitions\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20aggregating\x20'+_0x2b35bf+_0x4951a1(0x123);}_0x4b9910['action']&&_0x4b9910['action'][_0x4951a1(0x1bb)]&&(_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+'/delete\x20-\x20Oracle\x20Delete\x0arouter.post(\x27/delete\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20data\x20exist\x20sebelum\x20delete\x20dan\x20ambil\x20old\x20data\x20untuk\x20event\x20lifecycle\x0a\x20\x20\x20\x20//\x20Menggunakan\x20SELECT\x20*\x20dari\x20tabel\x20utama\x20(tanpa\x20explicit\x20select)\x20karena\x20fieldName\x0a\x20\x20\x20\x20//\x20bisa\x20mengandung\x20kolom\x20dari\x20JOIN\x20(mis.\x20city_name)\x20yang\x20tidak\x20ada\x20di\x20tabel\x20utama\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20firstCondition\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20existingData\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0x213)+_0x2b35bf+_0x4951a1(0x18b)+(_0x3f3997?_0x4951a1(0x19e)+_0x4b9910['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x17efc0+'.deleteData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':_0x4951a1(0x218)+_0x17efc0+'.deleteData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20DELETE\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+'\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x2b35bf+_0x4951a1(0x1a3)+_0x2b35bf+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.errorNum\x20===\x202292)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Cannot\x20delete:\x20record\x20is\x20still\x20referenced\x20by\x20other\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20deleting\x20'+_0x2b35bf+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x4b9910[_0x4951a1(0x208)]&&_0x4b9910[_0x4951a1(0x208)]['first']&&(_0x12e140+=_0x4951a1(0x180)+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x198)+_0x2d5feb+_0x4951a1(0xea)+_0x2d5feb+_0x4951a1(0xf7)+JSON['stringify'](_0x4b9910[_0x4951a1(0x103)])+_0x4951a1(0x164)+_0x17efc0+_0x4951a1(0x20c)+_0x4a19af+_0x4951a1(0x1c1)+_0x2b35bf+_0x4951a1(0x1d9)+_0x2b35bf+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x4b9910['action']&&_0x4b9910[_0x4951a1(0x208)]['read']&&(_0x12e140+=_0x4951a1(0x180)+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x1e3)+JSON[_0x4951a1(0x200)](_0x4b9910[_0x4951a1(0x103)]||[])+';\x0a\x20\x20\x20\x20let\x20select\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20field(s):\x20\x27\x20+\x20invalidFields.join(\x27,\x20\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20select\x20=\x20req.body.select;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue,\x0a\x20\x20\x20\x20\x20\x20searchBy,\x0a\x20\x20\x20\x20\x20\x20sort_columns,\x0a\x20\x20\x20\x20\x20\x20where:\x20where,\x0a\x20\x20\x20\x20\x20\x20select:\x20select\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20options.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20options.limit\x20=\x20limit;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0x118)+_0x2b35bf+'\x20list:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x2b35bf+'\x20list\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');if(_0x4b9910['masterDetail']&&_0x4b9910['masterDetail']['enabled']){const _0x274f1e=_0x4b9910['masterDetail']['detailTable'][_0x4951a1(0x182)]('.')['pop'](),_0x3c1820=_0x2b35bf[_0x4951a1(0x15b)](/-/g,'_'),_0x3cbe05=_0x4b9910['masterDetail']['headerCalculations']||null,_0x5e07c1=_0x4b9910['masterDetail']?.[_0x4951a1(0x14f)]?.['autoCalculateFields']?.[_0x4951a1(0x1ae)]?.[_0x4951a1(0x1b6)]||'',_0x40ac06=_0x5e07c1['split']('*')[_0x4951a1(0x1d2)](_0x251adc=>_0x251adc[_0x4951a1(0x15f)]()),_0x1ceca5=_0x3cbe05?.[_0x4951a1(0x1f3)]?.[_0x4951a1(0x186)]?.['replace'](_0x4951a1(0xda),'')||'',_0x68671f=_0x40ac06[0x0]||_0x1ceca5,_0x3cf834=_0x40ac06[0x1]||_0x4e8717['bVIPE'];if(_0x4b9910['action']&&_0x4b9910[_0x4951a1(0x208)]['createComposite']){const _0x5f11b2=_0x3cbe05?_0x4951a1(0x1da)+JSON[_0x4951a1(0x200)](_0x3cbe05)+_0x4951a1(0x14b)+_0x274f1e+'.length;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(headerCalc.total_qty\x20&&\x20headerCalc.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20qtyField\x20=\x20headerCalc.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20data.total_qty\x20=\x20data.'+_0x274f1e+_0x4951a1(0xd6)+(_0x68671f?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20data.total_amount\x20=\x20data.'+_0x274f1e+'.reduce(function(sum,\x20item)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20qty\x20=\x20Number(item.'+_0x68671f+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20price\x20=\x20Number(item.'+_0x3cf834+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20sum\x20+\x20(qty\x20*\x20price);\x0a\x20\x20\x20\x20\x20\x20},\x200);\x0a\x20\x20\x20\x20}':_0x4e8717['OVHOz'])+_0x4951a1(0x128):'';_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0xd5)+_0x2b35bf+_0x4951a1(0xe7)+_0x3c1820+_0x4951a1(0x1de)+_0x3c1820+_0x4951a1(0xe4)+_0x3c1820+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x17efc0+_0x4951a1(0x174)+_0x274f1e+_0x4951a1(0x219)+_0x17efc0+'.validateData(headerDataForValidation,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!data.'+_0x274f1e+'\x20||\x20!Array.isArray(data.'+_0x274f1e+_0x4951a1(0x130)+_0x274f1e+_0x4951a1(0x146)+_0x274f1e+_0x4951a1(0xe3)+_0x5f11b2+_0x4951a1(0x19a)+_0x4b9910['tableName']+_0x4951a1(0x162)+_0x4b9910[_0x4951a1(0x121)]['detailTable']+_0x4951a1(0x112)+_0x4b9910[_0x4951a1(0x121)]['foreignKey']+_0x4951a1(0x160)+_0x17efc0+'.createComposite(data,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(\x27'+_0x2b35bf+'\x20composite\x20create\x20successful\x27);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x2b35bf+_0x4951a1(0x15a)+_0x2b35bf+_0x4951a1(0x20a)+_0x2b35bf+_0x4951a1(0x123);}_0x4b9910['action']&&_0x4b9910['action'][_0x4951a1(0x203)]&&(_0x12e140+=_0x4951a1(0x180)+_0x532fec+'/'+_0x2b35bf+'/update-composite\x20-\x20Oracle\x20Composite\x20update\x20(master-detail)\x0arouter.post(\x27/update-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x2b35bf+'/update-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x3c1820+_0x4951a1(0x1de)+_0x3c1820+_0x4951a1(0xe4)+_0x3c1820+_0x4951a1(0x141)+_0x2d5feb+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Primary\x20key\x20('+_0x2d5feb+_0x4951a1(0x168)+_0xf54fc6+_0x4951a1(0x1ac)+_0x17efc0+_0x4951a1(0x174)+_0x274f1e+';\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20validation\x20=\x20await\x20'+_0x17efc0+'.validateData(headerDataForValidation,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(data.'+_0x274f1e+_0x4951a1(0x201)+_0x274f1e+_0x4951a1(0x1cb)+_0x274f1e+_0x4951a1(0x1a9)+_0x274f1e+'\x22\x20must\x20be\x20an\x20object\x20with\x20structure\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x0a\x20\x20\x20\x20var\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4b9910[_0x4951a1(0x161)]+_0x4951a1(0x162)+_0x4b9910['masterDetail']['detailTable']+_0x4951a1(0x112)+_0x4b9910['masterDetail'][_0x4951a1(0x212)]+_0x4951a1(0x160)+_0x17efc0+'.updateComposite(data,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(\x27'+_0x2b35bf+'\x20composite\x20update\x20successful:\x20'+_0x2d5feb+'=\x27\x20+\x20data.'+_0x2d5feb+_0x4951a1(0x15d)+_0x2b35bf+'\x20data\x20successfully\x20updated\x20(with\x20detail\x20items)\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20update\x20'+_0x2b35bf+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x2b35bf+_0x4951a1(0x1e4)+_0x2b35bf+_0x4951a1(0x123)),_0x4b9910[_0x4951a1(0x208)]&&_0x4b9910['action'][_0x4951a1(0x1b0)]&&(_0x12e140+='//\x20POST\x20/api/'+_0x532fec+'/'+_0x2b35bf+_0x4951a1(0x1b9)+_0x2b35bf+_0x4951a1(0x15e)+_0x2d5feb+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20var\x20result\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0xe9)+_0x2b35bf+'\x20composite\x20read\x20successful:\x20\x27\x20+\x20(result.count\x20||\x200)\x20+\x20\x27\x20record(s)\x27);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20read\x20'+_0x2b35bf+_0x4951a1(0x1db)+_0x2b35bf+'\x20composite\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');}if(_0x4b9910[_0x4951a1(0x208)]?.['info']!==![]){const _0x351acc={'datatables':!!_0x4b9910[_0x4951a1(0x208)]?.[_0x4951a1(0x108)],'read':!!_0x4b9910[_0x4951a1(0x208)]?.[_0x4951a1(0x124)],'first':!!_0x4b9910['action']?.[_0x4951a1(0x11e)],'create':!!_0x4b9910[_0x4951a1(0x208)]?.[_0x4951a1(0x11c)],'update':!!_0x4b9910[_0x4951a1(0x208)]?.[_0x4951a1(0x175)],'delete':!!_0x4b9910['action']?.['delete'],'lookup':!!_0x4b9910['action']?.[_0x4951a1(0x1dc)],'export':!!_0x4b9910['action']?.[_0x4951a1(0x1d8)],'import':!!_0x4b9910['action']?.['import'],'info':_0x4b9910['action']?.['info']!==![]};_0x12e140+=_0x4951a1(0x14a)+JSON['stringify'](_0x351acc)+_0x4951a1(0x202)+_0x17efc0+'.getModelInfo(actions);\x0a\x0a\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x2b35bf+_0x4951a1(0xfc)+_0x532fec+'\x27,\x0a\x20\x20\x20\x20\x20\x20table:\x20modelInfo.table,\x0a\x20\x20\x20\x20\x20\x20fields:\x20modelInfo.fields,\x0a\x20\x20\x20\x20\x20\x20querySources:\x20modelInfo.querySources,\x0a\x20\x20\x20\x20\x20\x20actions:\x20actions,\x0a\x20\x20\x20\x20\x20\x20databaseType:\x20\x27oracle\x27,\x0a\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x336d7b+_0x4951a1(0x195);}else _0x12e140+='//\x20Endpoint\x20/info\x20dinonaktifkan\x20via\x20action.info\x20=\x20false\x0a';return _0x12e140+='\x0a//\x20Oracle\x20health\x20check\x0arouter.get(\x27/health\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20connectionInfo\x20=\x20await\x20'+_0x17efc0+_0x4951a1(0x147)+_0x2b35bf+'\x27,\x0a\x20\x20\x20\x20\x20\x20database:\x20\x27oracle\x27,\x0a\x20\x20\x20\x20\x20\x20connection:\x20connectionInfo\x20?\x20\x27active\x27\x20:\x20\x27unknown\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20res.status(503).json({\x0a\x20\x20\x20\x20\x20\x20status:\x20\x27unhealthy\x27,\x0a\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x2b35bf+'\x27,\x0a\x20\x20\x20\x20\x20\x20database:\x20\x27oracle\x27,\x0a\x20\x20\x20\x20\x20\x20error:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a',_0x12e140+='module.exports\x20=\x20router;',_0x12e140;}module['exports']={'createOracleMainModuleTemplate':createOracleMainModuleTemplate,'createOracleModelTemplate':createOracleModelTemplate,'createOracleSubmoduleTemplate':createOracleSubmoduleTemplate};