@accordproject/template-engine 2.3.5 → 2.4.1
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.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -16
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/drafting/Boolean/index.ts","../src/drafting/DateTime/index.ts","../src/drafting/Double/format.ts","../src/drafting/Double/index.ts","../src/drafting/Integer/format.ts","../src/drafting/Integer/index.ts","../src/drafting/Long/index.ts","../src/drafting/MonetaryAmount/currencycode.ts","../src/drafting/MonetaryAmount/index.ts","../src/drafting/String/index.ts","../src/drafting/index.ts","../src/TemplateMarkNodes.ts","../src/utils.ts","../src/TypeScriptCompilationContext.ts","../src/runtime/declarations.ts","../src/TypeScriptToJavaScriptCompiler.ts","../src/model-gen/org.accordproject.templatemark@0.5.0.ts","../src/TemplateMarkToJavaScriptCompiler.ts","../src/TypeScriptRuntime.ts","../src/TemplateMarkInterpreter.ts"],"sourcesContent":["/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Boolean\n * @param {Boolean} value the Boolean\n * @returns {string} the text\n */\nexport default function booleanDrafter(value:boolean) : string {\n if (value) {\n return 'true';\n } else {\n return 'false';\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc);\n\n/**\n * Creates a drafter for DateTime\n * @param {string} value the DateTime\n * @param {object} format the the format\n * @returns {string} the text\n */\nexport default function dateTimeDrafter(value:string,format:string) : string {\n const f = format ? format : 'MM/DD/YYYY';\n return dayjs.utc(value).format(f);\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Double\n * @param {number} value - the double\n * @returns {string} the text\n */\nexport function draftDoubleIEEE(value:number) : string {\n if (Math.floor(value) === value) {\n return (new Number(value)).toFixed(1); // Make sure there is always decimal point\n } else {\n return '' + value;\n }\n}\n\n/**\n * Creates a drafter for a formatted Double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftDoubleFormat(value:number,format:string) : string {\n return format.replace(/0(.)0((.)(0+))?/gi, function(_a,sep1,_b,sep2,digits){\n const len = digits ? digits.length : 0;\n const vs = value.toFixed(len);\n let res = '';\n if (sep2) {\n const d = vs.substring(vs.length - len);\n res += sep2 + d;\n }\n let i = vs.substring(0,vs.length - (len === 0 ? 0 : len+1));\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from './format';\nimport { draftDoubleFormat } from './format';\n\n/**\n * Creates a drafter for a double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function doubleDrafter(value:number,format:string) : string {\n if (format) {\n return draftDoubleFormat(value,format);\n } else {\n return draftDoubleIEEE(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Integer\n * @param {number} value - the integer\n * @returns {string} the text\n */\nexport function draftInteger(value:number) : string {\n return '' + value;\n}\n\n/**\n * Creates a drafter for a formatted Integer\n * @param {number} value - the Integer\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftIntegerFormat(value:number,format:string) : string {\n return format.replace(/0(.)0/gi, function(_a,sep1){\n const vs = value.toFixed(0);\n let res = '';\n let i = vs.substring(0,vs.length);\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\nimport { draftInteger } from './format';\nimport { draftIntegerFormat } from './format';\n\n/**\n * Creates a drafter for an Integer\n * @param {number} value - the integer\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function integerDrafter(value:number,format:string) : string {\n if (format) {\n return draftIntegerFormat(value,format);\n } else {\n return draftInteger(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftInteger as draftLong } from '../Integer/format';\nimport { draftIntegerFormat as draftLongFormat } from '../Integer/format';\n\n/**\n * Creates a drafter for a long\n * @param {number} value - the Long\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function longDrafter(value:number,format:string) : string {\n if (format) {\n return draftLongFormat(value,format);\n } else {\n return draftLong(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum CurrencyCode {\n 'USD' = '$',\n 'EUR'= '€',\n 'JPY'= '¥',\n 'GBP'= '£',\n 'AUD'= 'A$',\n 'CAD'= 'C$',\n 'CHF'= 'CHF',\n 'CNY'= '元',\n 'HKD'= 'HK$',\n 'NZD'= 'NZ$',\n 'KRW'= '₩',\n 'SGD'= 'S$',\n 'MXN'= 'MEX$',\n 'INR'= '₹',\n 'RUB'= '₽',\n 'ZAR'= 'R',\n 'TRY'= '₺',\n 'BRL'= 'R$',\n 'TWD'= 'NT$',\n 'PLN'= 'zł',\n 'THB'= '฿',\n 'IDR'= 'Rp',\n 'HUF'= 'Ft',\n 'CZK'= 'Kč',\n 'ILS'= '₪',\n 'CLP'= 'CLP$',\n 'PHP'= '₱',\n 'AED'= 'د.إ',\n 'COP'= 'COL$',\n 'SAR'= '﷼',\n 'MYR'= 'RM',\n 'RON'= 'L',\n 'BGN'= 'лв.'\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from '../Double/format';\nimport { draftDoubleFormat } from '../Double/format';\nimport { CurrencyCode } from './currencycode';\n\ntype MonetaryAmount = {\n doubleValue: number;\n currencyCode: string;\n};\n\n/**\n * Creates a drafter for monetary amount with no format\n * @param {object} value the monetary amount\n * @returns {string} the text\n */\nfunction monetaryAmountDefaultDrafter(value:MonetaryAmount) {\n return '' + draftDoubleIEEE(value.doubleValue) + ' ' + value.currencyCode;\n}\n\n/**\n * Symbol from a currency code\n * @param {string} c - the currency code\n * @returns {string} the symbol\n */\nfunction codeSymbol(c:string) : string {\n const index: number = Object.keys(CurrencyCode).indexOf(c);\n if(index >=0) {\n return Object.values(CurrencyCode)[index];\n }\n else {\n return c;\n }\n}\n\n/**\n * Creates a drafter for monetary amount with a given format\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nfunction monetaryAmountFormatDrafter(value:MonetaryAmount,format:string) : string {\n return draftDoubleFormat(value.doubleValue,\n format\n .replace(/K/gi,codeSymbol(value.currencyCode))\n .replace(/CCC/gi,value.currencyCode));\n}\n\n/**\n * Creates a drafter for a monetary amount\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nexport default function monetaryAmountDrafter(value:MonetaryAmount,format:string) : string {\n if (format) {\n return monetaryAmountFormatDrafter(value,format);\n } else {\n return monetaryAmountDefaultDrafter(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for String\n * @param {object} value the String\n * @returns {string} the text\n */\nexport default function stringDrafter(value:string) : string {\n return value;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport booleanDrafter from './Boolean';\nimport dateTimeDrafter from './DateTime';\nimport doubleDrafter from './Double';\nimport integerDrafter from './Integer';\nimport longDrafter from './Long';\nimport monetaryAmountDrafter from './MonetaryAmount';\nimport stringDrafter from './String';\n\nexport function getDrafter(typeName: string) : ((value:any, format:string) => string)|null {\n switch(typeName) {\n case 'Boolean': return booleanDrafter;\n case 'DateTime': return dateTimeDrafter;\n case 'Double': return doubleDrafter;\n case 'Integer': return integerDrafter;\n case 'Long': return longDrafter;\n case 'org.accordproject.money@0.3.0.MonetaryAmount': return monetaryAmountDrafter;\n case 'String': return stringDrafter;\n default: return null;\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\n\n// use to create agreementmark from templatemark\nexport const TEMPLATEMARK_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.(\\w+)Definition$/;\nexport const FORMULA_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormulaDefinition$/;\nexport const VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.VariableDefinition$/;\nexport const CONDITIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ConditionalDefinition$/;\nexport const ENUM_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.EnumVariableDefinition$/;\nexport const FORMATTED_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormattedVariableDefinition$/;\nexport const WITH_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.WithDefinition$/;\nexport const LISTBLOCK_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ListBlockDefinition$/;\nexport const JOIN_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.JoinDefinition$/;\nexport const OPTIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.OptionalDefinition$/;\nexport const CLAUSE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ClauseDefinition$/;\nexport const CONTRACT_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ContractDefinition$/;\n\nexport type TemplateData = Record<string, unknown>;\n\n/**\n * TemplateMark nodes that implicity change the data access scope\n * by specifying the name of a property on the node.\n */\nexport const NAVIGATION_NODES = [\n `${TemplateMarkModel.NAMESPACE}.ListBlockDefinition`,\n `${TemplateMarkModel.NAMESPACE}.WithDefinition`,\n `${TemplateMarkModel.NAMESPACE}.JoinDefinition`,\n `${TemplateMarkModel.NAMESPACE}.OptionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`\n];","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, Introspector, ModelManager, Property } from '@accordproject/concerto-core';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { templatemarkutil } from '@accordproject/markdown-template';\n\nimport { existsSync, mkdirSync, rmSync } from 'fs';\nimport traverse from 'traverse';\n\nexport function ensureDirSync(path:string) {\n !existsSync(path) && mkdirSync(path, { recursive: true });\n}\n\nexport function removeSync(path:string) {\n rmSync(path, { recursive: true, force: true });\n}\n\nexport function writeFunctionToString(templateClass:ClassDeclaration, functionName: string, returnType: string, code: string): string {\n let result = '';\n result += '/// ---cut---\\n';\n result += `export function ${functionName}(data:TemplateModel.I${templateClass.getName()}, library:any, options:GenerationOptions) : ${returnType} {\\n`;\n result += ' const now = dayjs(options?.now);\\n';\n result += ' const locale = options?.locale;\\n';\n templateClass.getProperties().forEach((p: Property) => {\n result += ` const ${p.getName()} = data.${p.getName()};\\n`;\n });\n result += ' ' + code.trim() + '\\n';\n result += '}\\n';\n result += '\\n';\n\n return result;\n}\n\nexport function nameUserCode(templateMarkDom: any) {\n return traverse(templateMarkDom).map(function (x) {\n if (x && ((x.$class === `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition` && x.condition) ||\n (`${TemplateMarkModel.NAMESPACE}.ClauseDefinition` && x.condition))) {\n x.functionName = `condition_${this.path.join('_')}`;\n }\n this.update(x);\n });\n}\n\nexport function getTemplateClassDeclaration(modelManager: ModelManager, templateConceptFqn?: string) : ClassDeclaration {\n const introspector = new Introspector(modelManager);\n try {\n return templatemarkutil.findTemplateConcept(introspector, 'clause', templateConceptFqn);\n }\n catch(err) {\n console.log(err);\n throw err;\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { CodeGen } from '@accordproject/concerto-codegen';\nimport { InMemoryWriter } from '@accordproject/concerto-util';\nimport { getTemplateClassDeclaration } from './utils';\n\n/**\n * This class creates the typescript types\n * required to compile Typescript expressions (used in\n * formulae, conditions and clauses) to JavaScript. It uses\n * these to create a compilation context for '@typescript/twoslash'\n * which is used to compile the typescript code.\n */\nexport class TypeScriptCompilationContext {\n\n modelManager:ModelManager;\n templateClass:ClassDeclaration;\n\n constructor(modelManager:ModelManager,templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.templateClass = getTemplateClassDeclaration(this.modelManager, templateConceptFqn);\n }\n\n getTypeScriptFiles() : Record<string,string> {\n const result:Record<string,string> = {};\n\n const visitor = new CodeGen.TypescriptVisitor();\n const writer = new InMemoryWriter();\n\n const params = {\n fileWriter: writer\n };\n this.modelManager.accept(visitor, params);\n writer.getFilesInMemory().forEach( (value, key) => {\n result[key] = value;\n });\n return result;\n }\n\n getCompilationContext() : string {\n const files = this.getTypeScriptFiles();\n\n let result = '';\n\n Object.keys(files).forEach( key => {\n const content = files[key];\n result += `\n// @filename: ${key}\n${content}\n`;\n });\n\n result += `\n// @filename: code.ts\nimport * as TemplateModel from './${this.templateClass.getNamespace()}';\nimport dayjs from 'dayjs';\nimport jp from 'jsonpath';\n\ntype GenerationOptions = {\n now?:string,\n locale?:string\n}\n`;\n return result;\n }\n}","\n/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable quotes */\n// file generated by ./scripts/updateRuntimeDependencies.js\n\n\nexport const DAYJS_BASE64 = 'Ly8vIDxyZWZlcmVuY2UgcGF0aD0iLi9sb2NhbGUvaW5kZXguZC50cyIgLz4KCmV4cG9ydCA9IGRheWpzOwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUpOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIHN0cmljdD86IGJvb2xlYW4pOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIGxvY2FsZT86IHN0cmluZywgc3RyaWN0PzogYm9vbGVhbik6IGRheWpzLkRheWpzCgpkZWNsYXJlIG5hbWVzcGFjZSBkYXlqcyB7CiAgaW50ZXJmYWNlIENvbmZpZ1R5cGVNYXAgewogICAgZGVmYXVsdDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IERheWpzIHwgbnVsbCB8IHVuZGVmaW5lZAogIH0KCiAgZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IENvbmZpZ1R5cGVNYXBba2V5b2YgQ29uZmlnVHlwZU1hcF0KCiAgZXhwb3J0IGludGVyZmFjZSBGb3JtYXRPYmplY3QgeyBsb2NhbGU/OiBzdHJpbmcsIGZvcm1hdD86IHN0cmluZywgdXRjPzogYm9vbGVhbiB9CgogIGV4cG9ydCB0eXBlIE9wdGlvblR5cGUgPSBGb3JtYXRPYmplY3QgfCBzdHJpbmcgfCBzdHJpbmdbXQoKICBleHBvcnQgdHlwZSBVbml0VHlwZVNob3J0ID0gJ2QnIHwgJ0QnIHwgJ00nIHwgJ3knIHwgJ2gnIHwgJ20nIHwgJ3MnIHwgJ21zJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmcgPSAnbWlsbGlzZWNvbmQnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICdkYXRlJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmdQbHVyYWwgPSAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB8ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnbW9udGhzJyB8ICd5ZWFycycgfCAnZGF0ZXMnCiAgCiAgZXhwb3J0IHR5cGUgVW5pdFR5cGUgPSBVbml0VHlwZUxvbmcgfCBVbml0VHlwZUxvbmdQbHVyYWwgfCBVbml0VHlwZVNob3J0OwoKICBleHBvcnQgdHlwZSBPcFVuaXRUeXBlID0gVW5pdFR5cGUgfCAid2VlayIgfCAid2Vla3MiIHwgJ3cnOwogIGV4cG9ydCB0eXBlIFFVbml0VHlwZSA9IFVuaXRUeXBlIHwgInF1YXJ0ZXIiIHwgInF1YXJ0ZXJzIiB8ICdRJzsKICBleHBvcnQgdHlwZSBNYW5pcHVsYXRlVHlwZSA9IEV4Y2x1ZGU8T3BVbml0VHlwZSwgJ2RhdGUnIHwgJ2RhdGVzJz47CiAgY2xhc3MgRGF5anMgewogICAgY29uc3RydWN0b3IgKGNvbmZpZz86IENvbmZpZ1R5cGUpCiAgICAvKioKICAgICAqIEFsbCBEYXkuanMgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBTdGlsbCwgYGRheWpzI2Nsb25lYCBjYW4gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGlmIHlvdSBuZWVkIG9uZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5jbG9uZSgpLy8gPT4gRGF5anMKICAgICAqIGRheWpzKGRheWpzKCcyMDE5LTAxLTI1JykpIC8vIHBhc3NpbmcgYSBEYXlqcyBvYmplY3QgdG8gYSBjb25zdHJ1Y3RvciB3aWxsIGFsc28gY2xvbmUgaXQKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvZGF5anMtY2xvbmUKICAgICAqLwogICAgY2xvbmUoKTogRGF5anMKICAgIC8qKgogICAgICogVGhpcyByZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBjb250YWlucyBhIHZhbGlkIGRhdGUgb3Igbm90LgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzVmFsaWQoKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvaXMtdmFsaWQKICAgICAqLwogICAgaXNWYWxpZCgpOiBib29sZWFuCiAgICAvKioKICAgICAqIEdldCB0aGUgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS55ZWFyKCkvLyA9PiAyMDIwCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHllYXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkueWVhcigyMDAwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1vbnRoLgogICAgICoKICAgICAqIE1vbnRocyBhcmUgemVybyBpbmRleGVkLCBzbyBKYW51YXJ5IGlzIG1vbnRoIDAuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubW9udGgoKS8vID0+IDAtMTEKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9tb250aAogICAgICovCiAgICBtb250aCgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBtb250aC4KICAgICAqCiAgICAgKiBNb250aHMgYXJlIHplcm8gaW5kZXhlZCwgc28gSmFudWFyeSBpcyBtb250aCAwLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgdG8gMTEuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5tb250aCgwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbW9udGgKICAgICAqLwogICAgbW9udGgodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZGF0ZSgpLy8gPT4gMS0zMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RhdGUKICAgICAqLwogICAgZGF0ZSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRlIG9mIHRoZSBtb250aC4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAxIHRvIDMxLiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1vbnRocy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXRlKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9kYXRlCiAgICAgKi8KICAgIGRhdGUodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLgogICAgICoKICAgICAqIFJldHVybnMgbnVtYmVycyBmcm9tIDAgKFN1bmRheSkgdG8gNiAoU2F0dXJkYXkpLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmRheSgpLy8gMC02CiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvZGF5CiAgICAgKi8KICAgIGRheSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCAoU3VuZGF5KSB0byA2IChTYXR1cmRheSkuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gbmV4dCB3ZWVrcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXkoMCkvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RheQogICAgICovCiAgICBkYXkodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgaG91ci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5ob3VyKCkvLyA9PiAwLTIzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvaG91cgogICAgICovCiAgICBob3VyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGhvdXIuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byAyMy4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBkYXkuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaG91cigxMikvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2hvdXIKICAgICAqLwogICAgaG91cih2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW51dGVzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbnV0ZSgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbnV0ZQogICAgICovCiAgICBtaW51dGUoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgbWludXRlcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IGhvdXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubWludXRlKDU5KS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbWludXRlCiAgICAgKi8KICAgIG1pbnV0ZSh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNlY29uZCgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NlY29uZAogICAgICovCiAgICBzZWNvbmQoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1pbnV0ZXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc2Vjb25kKDEpLy8gRGF5anMKICAgICAqIGBgYAogICAgICovCiAgICBzZWNvbmQodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKCkvLyA9PiAwLTk5OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbGxpc2Vjb25kCiAgICAgKi8KICAgIG1pbGxpc2Vjb25kKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDk5OS4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9taWxsaXNlY29uZAogICAgICovCiAgICBtaWxsaXNlY29uZCh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2VuZXJpYyBzZXR0ZXIsIGFjY2VwdGluZyB1bml0IGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgdmFsdWUgYXMgc2Vjb25kLCByZXR1cm5zIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGFwcGxpZWQgY2hhbmdlcy4KICAgICAqCiAgICAgKiBJbiBnZW5lcmFsOgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCh1bml0LCB2YWx1ZSkgPT09IGRheWpzKClbdW5pdF0odmFsdWUpCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCgnZGF0ZScsIDEpCiAgICAgKiBkYXlqcygpLnNldCgnbW9udGgnLCAzKSAvLyBBcHJpbAogICAgICogZGF5anMoKS5zZXQoJ3NlY29uZCcsIDMwKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NldAogICAgICovCiAgICBzZXQodW5pdDogVW5pdFR5cGUsIHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBTdHJpbmcgZ2V0dGVyLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGluZm9ybWF0aW9uIGdldHRpbmcgZnJvbSBEYXkuanMgb2JqZWN0LgogICAgICoKICAgICAqIEluIGdlbmVyYWw6CiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KHVuaXQpID09PSBkYXlqcygpW3VuaXRdKCkKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KCd5ZWFyJykKICAgICAqIGRheWpzKCkuZ2V0KCdtb250aCcpIC8vIHN0YXJ0IDAKICAgICAqIGRheWpzKCkuZ2V0KCdkYXRlJykKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9nZXQKICAgICAqLwogICAgZ2V0KHVuaXQ6IFVuaXRUeXBlKTogbnVtYmVyCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbG9uZWQgRGF5LmpzIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIGFkZGVkLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmFkZCg3LCAnZGF5JykvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL2FkZAogICAgICovCiAgICBhZGQodmFsdWU6IG51bWJlciwgdW5pdD86IE1hbmlwdWxhdGVUeXBlKTogRGF5anMKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsb25lZCBEYXkuanMgb2JqZWN0IHdpdGggYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgc3VidHJhY3RlZC4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5zdWJ0cmFjdCg3LCAneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdWJ0cmFjdAogICAgICovCiAgICBzdWJ0cmFjdCh2YWx1ZTogbnVtYmVyLCB1bml0PzogTWFuaXB1bGF0ZVR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgc3RhcnQgb2YgYSB1bml0IG9mIHRpbWUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc3RhcnRPZigneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdGFydC1vZgogICAgICovCiAgICBzdGFydE9mKHVuaXQ6IE9wVW5pdFR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgZW5kIG9mIGEgdW5pdCBvZiB0aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmVuZE9mKCdtb250aCcpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9lbmQtb2YKICAgICAqLwogICAgZW5kT2YodW5pdDogT3BVbml0VHlwZSk6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZm9ybWF0dGVkIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBzdHJpbmcgb2YgdG9rZW5zIHBhc3NlZCBpbi4KICAgICAqCiAgICAgKiBUbyBlc2NhcGUgY2hhcmFjdGVycywgd3JhcCB0aGVtIGluIHNxdWFyZSBicmFja2V0cyAoZS5nLiBbTU1dKS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5mb3JtYXQoKS8vID0+IGN1cnJlbnQgZGF0ZSBpbiBJU084NjAxLCB3aXRob3V0IGZyYWN0aW9uIHNlY29uZHMgZS5nLiAnMjAyMC0wNC0wMlQwODowMjoxNy0wNTowMCcKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZm9ybWF0KCdbWVlZWWVzY2FwZV0gWVlZWS1NTS1ERFRISDptbTpzc1pbWl0nKS8vICdZWVlZZXNjYXBlIDIwMTktMDEtMjVUMDA6MDA6MDAtMDI6MDBaJwogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS5mb3JtYXQoJ0REL01NL1lZWVknKSAvLyAnMjUvMDEvMjAxOScKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9mb3JtYXQKICAgICAqLwogICAgZm9ybWF0KHRlbXBsYXRlPzogc3RyaW5nKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGUtdGltZSBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgKgogICAgICogVG8gZ2V0IHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcywgdXNlIGBkYXlqcyNkaWZmYAogICAgICogYGBgCiAgICAgKiBjb25zdCBkYXRlMSA9IGRheWpzKCcyMDE5LTAxLTI1JykKICAgICAqIGNvbnN0IGRhdGUyID0gZGF5anMoJzIwMTgtMDYtMDUnKQogICAgICogZGF0ZTEuZGlmZihkYXRlMikgLy8gMjAyMTQwMDAwMDAgZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGRhdGUxLmRpZmYoKSAvLyBtaWxsaXNlY29uZHMgdG8gY3VycmVudCB0aW1lCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBUbyBnZXQgdGhlIGRpZmZlcmVuY2UgaW4gYW5vdGhlciB1bml0IG9mIG1lYXN1cmVtZW50LCBwYXNzIHRoYXQgbWVhc3VyZW1lbnQgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KICAgICAqIGBgYAogICAgICogY29uc3QgZGF0ZTEgPSBkYXlqcygnMjAxOS0wMS0yNScpCiAgICAgKiBkYXRlMS5kaWZmKCcyMDE4LTA2LTA1JywgJ21vbnRoJykgLy8gNwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RpZmZlcmVuY2UKICAgICAqLwogICAgZGlmZihkYXRlPzogQ29uZmlnVHlwZSwgdW5pdD86IFFVbml0VHlwZSB8IE9wVW5pdFR5cGUsIGZsb2F0PzogYm9vbGVhbik6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiAqKm1pbGxpc2Vjb25kcyoqIHNpbmNlIHRoZSBVbml4IEVwb2NoIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnZhbHVlT2YoKSAvLyAxNTQ4MzgxNjAwMDAwCiAgICAgKiArZGF5anMoMTU0ODM4MTYwMDAwMCkgLy8gMTU0ODM4MTYwMDAwMAogICAgICogYGBgCiAgICAgKiBUbyBnZXQgYSBVbml4IHRpbWVzdGFtcCAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCkgZnJvbSBhIERheS5qcyBvYmplY3QsIHlvdSBzaG91bGQgdXNlIFVuaXggVGltZXN0YW1wIGBkYXlqcyN1bml4KClgLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvdW5peC10aW1lc3RhbXAtbWlsbGlzZWNvbmRzCiAgICAgKi8KICAgIHZhbHVlT2YoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRoaXMgcmV0dXJucyB0aGUgVW5peCB0aW1lc3RhbXAgKHRoZSBudW1iZXIgb2YgKipzZWNvbmRzKiogc2luY2UgdGhlIFVuaXggRXBvY2gpIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnVuaXgoKSAvLyAxNTQ4MzgxNjAwCiAgICAgKiBgYGAKICAgICAqIFRoaXMgdmFsdWUgaXMgZmxvb3JlZCB0byB0aGUgbmVhcmVzdCBzZWNvbmQsIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGEgbWlsbGlzZWNvbmRzIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L3VuaXgtdGltZXN0YW1wCiAgICAgKi8KICAgIHVuaXgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZGF5c0luTW9udGgoKSAvLyAzMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RheXMtaW4tbW9udGgKICAgICAqLwogICAgZGF5c0luTW9udGgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRvIGdldCBhIGNvcHkgb2YgdGhlIG5hdGl2ZSBgRGF0ZWAgb2JqZWN0IHBhcnNlZCBmcm9tIHRoZSBEYXkuanMgb2JqZWN0IHVzZSBgZGF5anMjdG9EYXRlYC4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS50b0RhdGUoKS8vID0+IERhdGUKICAgICAqIGBgYAogICAgICovCiAgICB0b0RhdGUoKTogRGF0ZQogICAgLyoqCiAgICAgKiBUbyBzZXJpYWxpemUgYXMgYW4gSVNPIDg2MDEgc3RyaW5nLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnRvSlNPTigpIC8vICcyMDE5LTAxLTI1VDAyOjAwOjAwLjAwMFonCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtanNvbgogICAgICovCiAgICB0b0pTT04oKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRvIGZvcm1hdCBhcyBhbiBJU08gODYwMSBzdHJpbmcuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9JU09TdHJpbmcoKSAvLyAnMjAxOS0wMS0yNVQwMjowMDowMC4wMDBaJwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2FzLWlzby1zdHJpbmcKICAgICAqLwogICAgdG9JU09TdHJpbmcoKTogc3RyaW5nCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9TdHJpbmcoKSAvLyAnRnJpLCAyNSBKYW4gMjAxOSAwMjowMDowMCBHTVQnCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtc3RyaW5nCiAgICAgKi8KICAgIHRvU3RyaW5nKCk6IHN0cmluZwogICAgLyoqCiAgICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgaW4gbWludXRlcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS51dGNPZmZzZXQoKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL3V0Yy1vZmZzZXQKICAgICAqLwogICAgdXRjT2Zmc2V0KCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBEYXkuanMgb2JqZWN0IGlzIGJlZm9yZSB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQmVmb3JlKGRheWpzKCcyMDExLTAxLTAxJykpIC8vIGRlZmF1bHQgbWlsbGlzZWNvbmRzCiAgICAgKiBgYGAKICAgICAqIElmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBncmFudWxhcml0eSB0byBhIHVuaXQgb3RoZXIgdGhhbiBtaWxsaXNlY29uZHMsIHBhc3MgaXQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNCZWZvcmUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1iZWZvcmUKICAgICAqLwogICAgaXNCZWZvcmUoZGF0ZTogQ29uZmlnVHlwZSwgdW5pdD86IE9wVW5pdFR5cGUpOiBib29sZWFuCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIERheS5qcyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG90aGVyIHN1cHBsaWVkIGRhdGUtdGltZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc1NhbWUoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc1NhbWUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1zYW1lCiAgICAgKi8KICAgIGlzU2FtZShkYXRlOiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KICAgIC8qKgogICAgICogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBpcyBhZnRlciB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQWZ0ZXIoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc0FmdGVyKCcyMDExLTAxLTAxJywgJ3llYXInKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcXVlcnkvaXMtYWZ0ZXIKICAgICAqLwogICAgaXNBZnRlcihkYXRlOiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KCiAgICBsb2NhbGUoKTogc3RyaW5nCgogICAgbG9jYWxlKHByZXNldDogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPik6IERheWpzCiAgfQoKICBleHBvcnQgdHlwZSBQbHVnaW5GdW5jPFQgPSB1bmtub3duPiA9IChvcHRpb246IFQsIGM6IHR5cGVvZiBEYXlqcywgZDogdHlwZW9mIGRheWpzKSA9PiB2b2lkCgogIGV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCA9IHVua25vd24+KHBsdWdpbjogUGx1Z2luRnVuYzxUPiwgb3B0aW9uPzogVCk6IERheWpzCgogIGV4cG9ydCBmdW5jdGlvbiBsb2NhbGUocHJlc2V0Pzogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPiwgaXNMb2NhbD86IGJvb2xlYW4pOiBzdHJpbmcKCiAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF5anMoZDogYW55KTogZCBpcyBEYXlqcwoKICBleHBvcnQgZnVuY3Rpb24gdW5peCh0OiBudW1iZXIpOiBEYXlqcwoKICBjb25zdCBMcyA6IHsgW2tleTogc3RyaW5nXSA6ICBJTG9jYWxlIH0KfQo=';\nexport const JSONPATH_BASE64 = 'Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IganNvbnBhdGggMC4yLjExDQovLyBQcm9qZWN0OiBodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9qc29ucGF0aA0KLy8gRGVmaW5pdGlvbnMgYnk6IEhpcm9raSBIb3JpdWNoaSA8aHR0cHM6Ly9naXRodWIuY29tL2hvcml1Y2hpPiwgSWthIDxodHRwczovL2dpdGh1Yi5jb20vaWthdHlhbmc+DQovLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQNCg0KdHlwZSBQYXRoQ29tcG9uZW50ID0gc3RyaW5nIHwgbnVtYmVyOw0KDQovKioNCiAqIEZpbmQgZWxlbWVudHMgaW4gYG9iamAgbWF0Y2hpbmcgYHBhdGhFeHByZXNzaW9uYC4gUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0DQogKiBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLG9yIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgd2VyZSBtYXRjaGVkLg0KICogUmV0dXJucyBvbmx5IGZpcnN0IGBjb3VudGAgZWxlbWVudHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBxdWVyeShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBhbnlbXTsNCg0KLyoqDQogKiBGaW5kIHBhdGhzIHRvIGVsZW1lbnRzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuIFJldHVybnMgYW4gYXJyYXkgb2YNCiAqIGVsZW1lbnQgcGF0aHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLiBFYWNoIHBhdGggaXMgaXRzZWxmIGFuDQogKiBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gd2l0aGluIGBvYmpgIG9mIHRoZSBtYXRjaGluZyBlbGVtZW50LiBSZXR1cm5zDQogKiBvbmx5IGZpcnN0IGBjb3VudGAgcGF0aHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXRocyhvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBQYXRoQ29tcG9uZW50W11bXTsNCg0KLyoqDQogKiBGaW5kIGVsZW1lbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBhdGhzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuDQogKiBSZXR1cm5zIGFuIGFycmF5IG9mIG5vZGUgb2JqZWN0cyB3aGVyZSBlYWNoIG5vZGUgaGFzIGEgYHBhdGhgIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YNCiAqIGtleXMgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiB3aXRoaW4gYG9iamAsIGFuZCBhIGB2YWx1ZWAgcG9pbnRpbmcgdG8gdGhlIG1hdGNoZWQNCiAqIGVsZW1lbnQuIFJldHVybnMgb25seSBmaXJzdCBgY291bnRgIG5vZGVzIGlmIHNwZWNpZmllZC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm9kZXMob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcsIGNvdW50PzogbnVtYmVyKTogeyBwYXRoOiBQYXRoQ29tcG9uZW50W107IHZhbHVlOiBhbnk7IH1bXTsNCg0KLyoqDQogKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyBgcGF0aEV4cHJlc3Npb25gLiBJZiBgbmV3VmFsdWVgIGlzDQogKiBwcm92aWRlZCwgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWUob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnk7DQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWx1ZTxUPihvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgbmV3VmFsdWU6IFQpOiBUOw0KDQovKioNCiAqIFJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyZW50KG9iajogYW55LCBwYXRoRXhwcmVzc2lvbjogc3RyaW5nKTogYW55Ow0KDQovKioNCiAqIFJ1bnMgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIGBmbmAgb24gZWFjaCBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmVwbGFjZXMgZWFjaA0KICogbWF0Y2hpbmcgZWxlbWVudCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZQ0KICogdmFsdWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgYXMgaXRzIG9ubHkgcGFyYW1ldGVyLiBSZXR1cm5zIG1hdGNoaW5nIG5vZGVzIHdpdGgNCiAqIHRoZWlyIHVwZGF0ZWQgdmFsdWVzLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgZm46ICh4OiBhbnkpID0+IGFueSk6IHsgcGF0aDogUGF0aENvbXBvbmVudFtdOyB2YWx1ZTogYW55OyB9W107DQoNCi8qKg0KICogUGFyc2UgdGhlIHByb3ZpZGVkIEpTT05QYXRoIGV4cHJlc3Npb24gaW50byBwYXRoIGNvbXBvbmVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQNCiAqIG9wZXJhdGlvbnMuDQogKi8NCmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlKHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnlbXTsNCg0KLyoqDQogKiBSZXR1cm5zIGEgcGF0aCBleHByZXNzaW9uIGluIHN0cmluZyBmb3JtLCBnaXZlbiBhIHBhdGguIFRoZSBzdXBwbGllZCBwYXRoIG1heSBlaXRoZXINCiAqIGJlIGEgZmxhdCBhcnJheSBvZiBrZXlzLCBhcyByZXR1cm5lZCBieSBganAubm9kZXNgIGZvciBleGFtcGxlLCBvciBtYXkgYWx0ZXJuYXRpdmVseSBiZSBhDQogKiBmdWxseSBwYXJzZWQgcGF0aCBleHByZXNzaW9uIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5IG9mIHBhdGggY29tcG9uZW50cyBhcyByZXR1cm5lZA0KICogYnkgYGpwLnBhcnNlYC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaW5naWZ5KHBhdGg6IFBhdGhDb21wb25lbnRbXSk6IHN0cmluZzsNCg0KZXhwb3J0IGFzIG5hbWVzcGFjZSBqc29ucGF0aDsNCg==';\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createDefaultMapFromNodeModules, createDefaultMapFromCDN } from '@typescript/vfs';\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from '@typescript/twoslash';\nimport { ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptCompilationContext } from './TypeScriptCompilationContext';\nimport { DAYJS_BASE64, JSONPATH_BASE64 } from './runtime/declarations';\nimport * as lzstring from 'lz-string';\n\n/**\n * Compiles user Typescript code to JavaScript. This uses the '@typescript/twoslash'\n * project which is maintained by the Typescript team and powers their web playground.\n * It uses the TypeScriptCompilationContext class to construct a payload for twoslash\n * that is composed of multiple TS files to compile, along with their 3rd-party module\n * dependencies.\n *\n * Note that the 'typescript' module is either dynamically loaded from node_modules (Node.js)\n * or from the CDN (browser). This module is used by twoslash.\n *\n * The 'updateRuntimeDependencies' script it used to package type declarations for 3rd-party\n * modules that we need to expose to user TS code: dayjs and jsonpath, these also need to be\n * added to the twoslash compilation context.\n */\nconst TYPESCRIPT_URL = process.env.TYPESCRIPT_URL ? process.env.TYPESCRIPT_URL : 'https://cdn.jsdelivr.net/npm/typescript@4.8.4/+esm';\n\n// https://microsoft.github.io/monaco-editor/typedoc/enums/languages.typescript.ScriptTarget.html#ES2020\nconst ES2020_TARGET = 7;\n\nexport class TypeScriptToJavaScriptCompiler {\n context: string;\n fsMap: Map<string,string>|undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ts: any;\n typescriptUrl: string;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.context = new TypeScriptCompilationContext(modelManager, templateConceptFqn).getCompilationContext();\n this.typescriptUrl = TYPESCRIPT_URL;\n }\n\n async initialize(typescriptUrl?: string) {\n if(typescriptUrl) {\n this.typescriptUrl = typescriptUrl;\n }\n if(typeof window === 'undefined') {\n // node does not (yet) support http(s) imports\n // see: https://nodejs.org/api/esm.html#https-and-http-imports\n this.ts = await import ('typescript');\n if(!this.ts) {\n throw new Error('Failed to load typescript module');\n }\n this.fsMap = createDefaultMapFromNodeModules({\n target: ES2020_TARGET,\n });\n }\n else {\n this.ts = (await import(this.typescriptUrl)).default;\n if(!this.ts) {\n throw new Error('Failed to dynamically load typescript');\n }\n this.fsMap = await createDefaultMapFromCDN({ target: ES2020_TARGET }, this.ts.version, false, this.ts);\n }\n this.fsMap.set('/node_modules/@types/dayjs/index.d.ts', Buffer.from(DAYJS_BASE64, 'base64').toString());\n this.fsMap.set('/node_modules/@types/jsonpath/index.d.ts', Buffer.from(JSONPATH_BASE64, 'base64').toString());\n }\n\n compile(typescript: string): TwoSlashReturn {\n if(!this.fsMap) {\n throw new Error('initialize must be awaited before compile is called.');\n }\n const twoSlashCode =`\n${this.context}\n${typescript}\n`;\n\n const options: TwoSlashOptions = {\n fsMap: this.fsMap,\n tsModule: this.ts,\n lzstringModule:lzstring,\n defaultOptions: {\n showEmit: true,\n noErrorValidation: true,\n showEmittedFile: 'code.js'\n }\n };\n const result = twoslasher(twoSlashCode, 'ts', options);\n return result;\n }\n}","/* eslint-disable @typescript-eslint/no-empty-interface */\n// Generated code for namespace: org.accordproject.templatemark@0.5.0\n\n// imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\nimport {IChild,INode} from './org.accordproject.commonmark@0.5.0';\nimport {IDecorator} from './concerto.metamodel@1.0.0';\nimport {IConcept} from './concerto@1.0.0';\n\n// interfaces\nexport enum CodeType {\n TYPESCRIPT = 'TYPESCRIPT',\n ES_2020 = 'ES_2020',\n}\n\nexport interface ICode extends IConcept {\n type: CodeType;\n contents: string;\n}\n\nexport interface IElementDefinition extends IChild {\n name: string;\n elementType?: string;\n decorators?: IDecorator[];\n}\n\nexport type ElementDefinitionUnion = IVariableDefinition | \nIFormulaDefinition | \nIBlockDefinition;\n\nexport interface IVariableDefinition extends IElementDefinition {\n identifiedBy?: string;\n}\n\nexport type VariableDefinitionUnion = IFormattedVariableDefinition | \nIEnumVariableDefinition;\n\nexport interface IFormattedVariableDefinition extends IVariableDefinition {\n format: string;\n}\n\nexport interface IEnumVariableDefinition extends IVariableDefinition {\n enumValues: string[];\n}\n\nexport interface IFormulaDefinition extends IElementDefinition {\n dependencies?: string[];\n code: ICode;\n}\n\nexport interface IBlockDefinition extends IElementDefinition {\n}\n\nexport type BlockDefinitionUnion = IClauseDefinition | \nIContractDefinition | \nIWithDefinition | \nIConditionalDefinition | \nIOptionalDefinition | \nIJoinDefinition | \nIListBlockDefinition | \nIForeachBlockDefinition | \nIWithBlockDefinition | \nIConditionalBlockDefinition | \nIOptionalBlockDefinition;\n\nexport interface IClauseDefinition extends IBlockDefinition {\n condition?: ICode;\n}\n\nexport interface IContractDefinition extends IBlockDefinition {\n}\n\nexport interface IWithDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n dependencies?: string[];\n}\n\nexport interface IOptionalDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\nexport interface IJoinDefinition extends IBlockDefinition {\n separator?: string;\n locale?: string;\n type?: string;\n style?: string;\n}\n\nexport interface IListBlockDefinition extends IBlockDefinition {\n type: string;\n tight: string;\n start?: string;\n delimiter?: string;\n}\n\nexport interface IForeachBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IWithBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalBlockDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n}\n\nexport interface IOptionalBlockDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport traverse from 'traverse';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';\nimport { TwoSlashReturn } from '@typescript/twoslash';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { getTemplateClassDeclaration, nameUserCode, writeFunctionToString } from './utils';\n\nconst CODE_NODES = [\n `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`,\n];\n\nexport type CompilerError = {\n nodeId: string;\n code: string;\n errors:TwoSlashReturn['errors'];\n};\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.TYPESCRIPT) {\n throw new Error(`Cannot compile ${code.contents} as it is not Typescript.`);\n }\n}\n\n/**\n * Compiles all the Typescript nodes in a TemplateMark JSON\n * to ES_2020 and returns a modified TemplateMark JSON.\n */\nexport class TemplateMarkToJavaScriptCompiler {\n modelManager:ModelManager;\n compiler: TypeScriptToJavaScriptCompiler;\n templateClass: ClassDeclaration;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.compiler = new TypeScriptToJavaScriptCompiler(modelManager,templateConceptFqn);\n this.templateClass = getTemplateClassDeclaration(modelManager,templateConceptFqn);\n }\n\n async initialize() {\n await this.compiler.initialize();\n }\n\n compile(templateJson: any) : any {\n const namedTemplateMark = nameUserCode(templateJson);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const errors = Array<CompilerError>();\n const compiled = traverse(namedTemplateMark).map(function (x) {\n if (x && CODE_NODES.includes(x.$class)) {\n if (x.code) { // formula\n checkCode(x.code);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.name, 'any', x.code.contents));\n if(result.errors.length === 0) {\n x.code.contents = result.code;\n x.code.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.name,\n code: x.code.contents,\n errors: result.errors\n });\n }\n }\n else if (x.condition) { // condition or clause (boolean condition)\n checkCode(x.condition);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.functionName, 'boolean', x.condition.contents));\n if(result.errors.length === 0) {\n x.condition.contents = result.code;\n x.condition.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.functionName,\n code: x.condition.contents,\n errors: result.errors\n });\n }\n }\n }\n });\n\n if(errors.length === 0) {\n return compiled;\n }\n else {\n throw errors;\n }\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEBUG = false;\n\n// BEWARE adding imports to this file\n// as it is used by the static code generator\n\n/**\n * BEWARE - this type is duplicated in TypeScriptCompilationContext\n * for use by code generation\n */\nexport type GenerationOptions = {\n now?:string,\n locale?:string\n}\n\nexport function joinList(data:Array<string>, joinDef:any, options?:GenerationOptions) : string {\n if(joinDef.separator) {\n return data.join(joinDef.separator);\n }\n else {\n const formatter = new Intl.ListFormat( joinDef.locale ? joinDef.locale : options?.locale,\n {\n style: (joinDef.style as Intl.ListFormatStyle),\n type: (joinDef.type as Intl.ListFormatType)\n }\n );\n return formatter.format(data);\n }\n}\n\n/**\n * These utility functions are used by the typescript code that\n * is generated from TemplateMark. They manage a stack to improve\n * debuggability.\n */\n\nfunction dump(op:string, $data:any[]) {\n if(DEBUG) {\n console.log(`${op}: ${JSON.stringify($data)}`);\n }\n}\n\nexport function peek($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data[$data.length-1];\n dump('peek', $data);\n return result;\n}\n\nexport function peekProperty($data:any[], propertyName:string, allowUndefined=false) : any {\n const head = peek($data);\n const result = head[propertyName];\n if(!allowUndefined && result === undefined) {\n throw new Error(`Undefined property ${propertyName}. Current stack is ${JSON.stringify($data)}`);\n }\n return result;\n}\n\nexport function push($data:any[], item:any) : number {\n const result = $data.push(item);\n dump('push', $data);\n return result;\n}\n\nexport function addChild($data:any[], item:any) {\n const node = peek($data);\n node.nodes ? node.nodes.push(item) : node.nodes = [item];\n}\n\nexport function pop($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data.pop();\n dump('pop', $data);\n return result;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport jp from 'jsonpath';\nimport traverse from 'traverse';\n\nimport { ClassDeclaration, Factory, Introspector, ModelManager, Serializer } from '@accordproject/concerto-core';\nimport { getDrafter } from './drafting';\nimport { TemplateMarkModel, CommonMarkModel, CiceroMarkModel, ConcertoMetaModel } from '@accordproject/markdown-common';\nimport { ModelUtil } from '@accordproject/concerto-core';\n\nimport {\n TEMPLATEMARK_RE,\n FORMULA_DEFINITION_RE,\n VARIABLE_DEFINITION_RE,\n CONDITIONAL_DEFINITION_RE,\n ENUM_VARIABLE_DEFINITION_RE,\n FORMATTED_VARIABLE_DEFINITION_RE,\n WITH_DEFINITION_RE,\n LISTBLOCK_DEFINITION_RE,\n JOIN_DEFINITION_RE,\n OPTIONAL_DEFINITION_RE,\n CLAUSE_DEFINITION_RE,\n CONTRACT_DEFINITION_RE,\n TemplateData,\n NAVIGATION_NODES\n} from './TemplateMarkNodes';\nimport { TemplateMarkToJavaScriptCompiler } from './TemplateMarkToJavaScriptCompiler';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { GenerationOptions, joinList } from './TypeScriptRuntime';\nimport dayjs from 'dayjs';\nimport { getTemplateClassDeclaration } from './utils';\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.ES_2020) {\n throw new Error(`Cannot run ${code.contents} as it is not ES_2020 JavaScript.`);\n }\n}\n\n/**\n * Evaluates a JS expression\n * @param {*} clauseLibrary the clause library\n * @param {*} data the contract data\n * @param {string} fn the JS function (including header)\n * @param {GenerationOptions} options the generation options\n * @returns {object} the result of evaluating the expression against the data\n */\nfunction evaluateJavaScript(clauseLibrary:object, data: TemplateData, fn: string, options?: GenerationOptions): object {\n if (!data || !fn) {\n throw new Error(`Cannot evaluate JS ${fn} against ${data}`);\n }\n const functionArgNames = new Array<string>();\n functionArgNames.push('data');\n functionArgNames.push('library');\n functionArgNames.push('options');\n functionArgNames.push('dayjs');\n functionArgNames.push('jp');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const functionArgValues = new Array<any>();\n functionArgValues.push(data);\n functionArgValues.push(clauseLibrary);\n functionArgValues.push(options);\n functionArgValues.push(dayjs);\n functionArgValues.push(jp);\n\n // chop the function header and closing\n const expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));\n if(expression.trim().length === 0) {\n throw new Error('Empty expression');\n }\n try {\n const fun = new Function(...functionArgNames, expression); // SECURITY!\n const result = fun(...functionArgValues);\n return result;\n }\n catch(err) {\n throw new Error(`Caught error ${err} evaluating ${expression} with arguments ${functionArgValues}`);\n }\n}\n\n/**\n * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.\n * For example, if we hit a VariableDefinition {{city}} that is nested inside a\n * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.\n * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include\n * property names that must apply to their child nodes.\n * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON\n * @param {*} currentNode the current TemplateMark node we are processing\n * @param {string[]} paths the traverse path to the current node\n * @returns {string} the JSON path to use to retrieve data\n */\nfunction getJsonPath(rootData:any, currentNode:any, paths:string[]) : string {\n if(!currentNode) {\n throw new Error('Node must be supplied');\n }\n if(!currentNode.name) {\n throw new Error(`Node must have a name: ${JSON.stringify(currentNode)}`);\n }\n if(currentNode.name.indexOf('.') >=0) {\n // prevent JSON path injection\n throw new Error(`Invalid name property ${currentNode.name}`);\n }\n if(!paths || !paths.length || paths.length <1 ) {\n throw new Error('Paths must be supplied');\n }\n const withPath = [];\n for (let n = 1; n < paths.length; n++) {\n const sub = paths.slice(0, n);\n const obj = traverse.get(rootData, sub);\n // HACK\n // if(obj===undefined) {\n // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);\n // }\n if (obj && obj.$class) {\n if(NAVIGATION_NODES.indexOf(obj.$class) >= 0) {\n withPath.push(`['${obj.name}']`);\n }\n }\n }\n\n if(currentNode.name !== 'this') {\n withPath.push(`['${currentNode.name}']`);\n }\n\n return withPath.length > 0 ? `$${withPath.join('')}` : '$';\n}\n\n/**\n * Generates an AgreementMark JSON document from a template plus data.\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON\n */\nfunction generateAgreement(modelManager:ModelManager, clauseLibrary:object, templateMark: object, data: TemplateData, options?:GenerationOptions): any {\n const introspector = new Introspector(modelManager);\n return traverse(templateMark).map(function (context: any) {\n let stopHere = false;\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // rewrite node types, mapping from TemplateMark namespace to CiceroMark\n const match = nodeClass.match(TEMPLATEMARK_RE);\n if (match && match.length > 1) {\n context.$class = `${CiceroMarkModel.NAMESPACE}.${match[3]}`;\n }\n\n // convert a contract node to a clause note HACK\n if (CONTRACT_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // convert a WithDefinition to a Paragraph in the output\n // not 100% sure we want to do that ... we may need to process\n // the child variable nodes and reparent them?\n if (WITH_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // add a 'value' property to FormulaDefinition\n // with the result of evaluating the JS code\n else if (FORMULA_DEFINITION_RE.test(nodeClass)) {\n if (context.code) {\n checkCode(context.code);\n const result = evaluateJavaScript(clauseLibrary, data, context.code.contents, options);\n if(result === null) {\n context.value = '<null>';\n }\n else if(typeof result === 'string') {\n context.value = result;\n }\n else {\n context.value = JSON.stringify(result);\n }\n delete context.code;\n }\n else {\n throw new Error('Formula node is missing code.');\n }\n }\n\n // evaluate lists, recursing on each list item\n else if (LISTBLOCK_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.List`;\n delete context.elementType;\n delete context.name;\n context.nodes = arrayData.map( arrayItem => {\n // arrayItem is now the data for the nested traversal\n const subResult = generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem);\n return {\n $class: `${CommonMarkModel.NAMESPACE}.Item`,\n nodes: subResult.nodes ? subResult.nodes : []\n };\n });\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // map over an array of items, joining them into a Text node\n else if (JOIN_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.Text`;\n const drafter = getDrafter(context.elementType);\n context.text = joinList(arrayData.map( arrayItem => {\n return drafter ? drafter(arrayItem, context.format) : arrayItem as string;\n }), context, options);\n delete context.elementType;\n delete context.name;\n delete context.separator;\n delete context.locale;\n delete context.type;\n delete context.style;\n delete context.nodes;\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // add a 'value' property to VariableDefinition\n // with the value of the variable from 'data'\n else if (VARIABLE_DEFINITION_RE.test(nodeClass) ||\n ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||\n FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {\n if(typeof data === 'object') {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n // convert the value to a string, optionally using the formatter\n const variableValue = variableValues[0];\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n else {\n // a list of enum values or primitives brings us here\n const variableValue = data;\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n\n // add a 'isTrue' property to ConditionDefinition\n // with the result of evaluating the JS code or a boolean property\n else if (CONDITIONAL_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n context.isTrue = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n }\n else {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.isTrue = !!variableValues[0];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.isTrue = false;\n }\n }\n context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;\n delete context.condition;\n delete context.dependencies;\n delete context.functionName;\n }\n\n // only include the children of a clause if its condition is true\n else if (CLAUSE_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n const result = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n if(!result) {\n delete context.nodes;\n stopHere = true;\n }\n }\n delete context.condition;\n delete context.functionName;\n }\n\n // add a 'hasSome' property to OptionalDefinition\n else if (OPTIONAL_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.hasSome = true;\n context.whenNone = [];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.hasSome = false;\n context.whenSome = [];\n }\n context.nodes = context.hasSome ? context.whenSome : context.whenNone;\n }\n }\n this.update(context, stopHere);\n });\n}\n\n/**\n * A template engine: merges the markup and logic of a template with\n * JSON data to produce JSON data.\n */\nexport class TemplateMarkInterpreter {\n modelManager: ModelManager;\n templateClass: ClassDeclaration;\n clauseLibrary: object;\n\n constructor(modelManager: ModelManager, clauseLibrary:object, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.clauseLibrary = clauseLibrary;\n this.templateClass = getTemplateClassDeclaration(this.modelManager,templateConceptFqn);\n }\n\n /**\n * Checks that a TemplateMark JSON document is valid with respect to the\n * TemplateMark model, as well as the template model.\n *\n * Checks:\n * 1. Variable names are valid properties in the template model\n * 2. Optional properties have guards\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added\n * @throws {Error} if the templateMark document is invalid\n */\n checkTypes(templateMark: object): object {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(TemplateMarkModel.MODEL, 'templatemark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n serializer.fromJSON(templateMark);\n return templateMark;\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(templateMark, null, 2)}`);\n }\n }\n\n /**\n * Compiles the code nodes containing TS to code nodes containing JS.\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON with JS nodes\n * @throws {Error} if the templateMark document is invalid\n */\n async compileTypeScriptToJavaScript(templateMark: object) : Promise<object> {\n const templateConcept = (templateMark as any).nodes[0].elementType;\n if(!templateConcept) {\n throw new Error('TemplateMark is not typed');\n }\n const compiler = new TemplateMarkToJavaScriptCompiler(this.modelManager, templateConcept);\n await compiler.initialize();\n return compiler.compile(templateMark);\n }\n\n validateCiceroMark(ciceroMark: object) : object {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(CiceroMarkModel.MODEL, 'ciceromark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n return serializer.fromJSON(ciceroMark);\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);\n }\n }\n\n async generate(templateMark: object, data: TemplateData, options?:GenerationOptions): Promise<any> {\n const factory = new Factory(this.modelManager);\n const serializer = new Serializer(factory, this.modelManager);\n const templateData = serializer.fromJSON(data);\n if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {\n throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);\n }\n const typedTemplateMark = this.checkTypes(templateMark);\n const jsTemplateMark = await this.compileTypeScriptToJavaScript(typedTemplateMark);\n const ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);\n return this.validateCiceroMark(ciceroMark);\n }\n}"],"names":["draftLongFormat","draftLong","CurrencyCode","TemplateMarkModel","existsSync","mkdirSync","rmSync","Introspector","templatemarkutil","CodeGen","InMemoryWriter","createDefaultMapFromNodeModules","createDefaultMapFromCDN","lzstring","twoslasher","CodeType","checkCode","CiceroMarkModel","CommonMarkModel","ModelUtil","ModelManager","ConcertoMetaModel","Factory","Serializer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,SAAwB,eAAe,KAAwB,EAAA;AAC3D,EAAA,IAAI,KAAO,EAAA;AACP,IAAO,OAAA,MAAA,CAAA;AAAA,GACJ,MAAA;AACH,IAAO,OAAA,OAAA,CAAA;AAAA,GACX;AACJ;;ACTA,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAQQ,SAAA,eAAA,CAAgB,OAAa,MAAwB,EAAA;AACzE,EAAM,MAAA,CAAA,GAAI,SAAS,MAAS,GAAA,YAAA,CAAA;AAC5B,EAAA,OAAO,KAAM,CAAA,GAAA,CAAI,KAAK,CAAA,CAAE,OAAO,CAAC,CAAA,CAAA;AACpC;;ACRO,SAAS,gBAAgB,KAAuB,EAAA;AACnD,EAAA,IAAI,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA,KAAM,KAAO,EAAA;AAC7B,IAAA,OAAQ,IAAI,MAAA,CAAO,KAAK,CAAA,CAAG,QAAQ,CAAC,CAAA,CAAA;AAAA,GACjC,MAAA;AACH,IAAA,OAAO,EAAK,GAAA,KAAA,CAAA;AAAA,GAChB;AACJ,CAAA;AAQgB,SAAA,iBAAA,CAAkB,OAAa,MAAwB,EAAA;AACnE,EAAO,OAAA,MAAA,CAAO,QAAQ,mBAAqB,EAAA,SAAS,IAAG,IAAK,EAAA,EAAA,EAAG,MAAK,MAAO,EAAA;AACvE,IAAM,MAAA,GAAA,GAAM,MAAS,GAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA;AACrC,IAAM,MAAA,EAAA,GAAK,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC5B,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,IAAM,EAAA;AACN,MAAA,MAAM,CAAI,GAAA,EAAA,CAAG,SAAU,CAAA,EAAA,CAAG,SAAS,GAAG,CAAA,CAAA;AACtC,MAAA,GAAA,IAAO,IAAO,GAAA,CAAA,CAAA;AAAA,KAClB;AACA,IAAI,IAAA,CAAA,GAAI,EAAG,CAAA,SAAA,CAAU,CAAE,EAAA,EAAA,CAAG,UAAU,GAAQ,KAAA,CAAA,GAAI,CAAI,GAAA,GAAA,GAAI,CAAE,CAAA,CAAA,CAAA;AAC1D,IAAO,OAAA,CAAA,CAAE,SAAS,CAAG,EAAA;AACjB,MAAA,GAAA,GAAM,OAAO,CAAE,CAAA,SAAA,CAAU,CAAE,CAAA,MAAA,GAAS,CAAC,CAAI,GAAA,GAAA,CAAA;AACzC,MAAA,CAAA,GAAI,CAAE,CAAA,SAAA,CAAU,CAAG,EAAA,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA;AAAA,KACnC;AACA,IAAA,OAAO,CAAI,GAAA,GAAA,CAAA;AAAA,GACd,CAAA,CAAA;AACL;;AC1BwB,SAAA,aAAA,CAAc,OAAa,MAAwB,EAAA;AACvE,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAA,iBAAA,CAAkB,OAAM,MAAM,CAAA,CAAA;AAAA,GAClC,MAAA;AACH,IAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA;AAAA,GAChC;AACJ;;ACVO,SAAS,aAAa,KAAuB,EAAA;AAChD,EAAA,OAAO,EAAK,GAAA,KAAA,CAAA;AAChB,CAAA;AAQgB,SAAA,kBAAA,CAAmB,OAAa,MAAwB,EAAA;AACpE,EAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,SAAW,EAAA,SAAS,IAAG,IAAK,EAAA;AAC9C,IAAM,MAAA,EAAA,GAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAC1B,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,CAAI,GAAA,EAAA,CAAG,SAAU,CAAA,CAAA,EAAE,GAAG,MAAM,CAAA,CAAA;AAChC,IAAO,OAAA,CAAA,CAAE,SAAS,CAAG,EAAA;AACjB,MAAA,GAAA,GAAM,OAAO,CAAE,CAAA,SAAA,CAAU,CAAE,CAAA,MAAA,GAAS,CAAC,CAAI,GAAA,GAAA,CAAA;AACzC,MAAA,CAAA,GAAI,CAAE,CAAA,SAAA,CAAU,CAAG,EAAA,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA;AAAA,KACnC;AACA,IAAA,OAAO,CAAI,GAAA,GAAA,CAAA;AAAA,GACd,CAAA,CAAA;AACL;;ACfwB,SAAA,cAAA,CAAe,OAAa,MAAwB,EAAA;AACxE,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAA,kBAAA,CAAmB,OAAM,MAAM,CAAA,CAAA;AAAA,GACnC,MAAA;AACH,IAAA,OAAO,aAAa,KAAK,CAAA,CAAA;AAAA,GAC7B;AACJ;;ACRwB,SAAA,WAAA,CAAY,OAAa,MAAwB,EAAA;AACrE,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAAA,kBAAA,CAAgB,OAAM,MAAM,CAAA,CAAA;AAAA,GAChC,MAAA;AACH,IAAA,OAAOC,aAAU,KAAK,CAAA,CAAA;AAAA,GAC1B;AACJ;;ACfY,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACH,EAAAA,cAAA,KAAQ,CAAA,GAAA,GAAA,CAAA;AACR,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,GAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,KAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,SAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,SAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,eAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,QAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,IAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,GAAA,CAAA;AACP,EAAAA,cAAA,KAAO,CAAA,GAAA,eAAA,CAAA;AAjCC,EAAAA,OAAAA,aAAAA,CAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA,CAAA;;ACcZ,SAAS,6BAA6B,KAAsB,EAAA;AACxD,EAAA,OAAO,KAAK,eAAgB,CAAA,KAAA,CAAM,WAAW,CAAA,GAAI,MAAM,KAAM,CAAA,YAAA,CAAA;AACjE,CAAA;AAOA,SAAS,WAAW,CAAmB,EAAA;AACnC,EAAA,MAAM,QAAgB,MAAO,CAAA,IAAA,CAAK,YAAY,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA;AACzD,EAAA,IAAG,SAAQ,CAAG,EAAA;AACV,IAAA,OAAO,MAAO,CAAA,MAAA,CAAO,YAAY,CAAA,CAAE,KAAK,CAAA,CAAA;AAAA,GAEvC,MAAA;AACD,IAAO,OAAA,CAAA,CAAA;AAAA,GACX;AACJ,CAAA;AAQA,SAAS,2BAAA,CAA4B,OAAqB,MAAwB,EAAA;AAC9E,EAAO,OAAA,iBAAA;AAAA,IAAkB,KAAM,CAAA,WAAA;AAAA,IAC3B,MAAA,CACK,OAAQ,CAAA,KAAA,EAAM,UAAW,CAAA,KAAA,CAAM,YAAY,CAAC,CAC5C,CAAA,OAAA,CAAQ,OAAQ,EAAA,KAAA,CAAM,YAAY,CAAA;AAAA,GAAC,CAAA;AAChD,CAAA;AAQwB,SAAA,qBAAA,CAAsB,OAAqB,MAAwB,EAAA;AACvF,EAAA,IAAI,MAAQ,EAAA;AACR,IAAO,OAAA,2BAAA,CAA4B,OAAM,MAAM,CAAA,CAAA;AAAA,GAC5C,MAAA;AACH,IAAA,OAAO,6BAA6B,KAAK,CAAA,CAAA;AAAA,GAC7C;AACJ;;ACrDA,SAAwB,cAAc,KAAuB,EAAA;AACzD,EAAO,OAAA,KAAA,CAAA;AACX;;ACCO,SAAS,WAAW,QAAiE,EAAA;AACxF,EAAA,QAAO,QAAU;AAAA,IACjB,KAAK,SAAA;AAAW,MAAO,OAAA,cAAA,CAAA;AAAA,IACvB,KAAK,UAAA;AAAY,MAAO,OAAA,eAAA,CAAA;AAAA,IACxB,KAAK,QAAA;AAAU,MAAO,OAAA,aAAA,CAAA;AAAA,IACtB,KAAK,SAAA;AAAW,MAAO,OAAA,cAAA,CAAA;AAAA,IACvB,KAAK,MAAA;AAAQ,MAAO,OAAA,WAAA,CAAA;AAAA,IACpB,KAAK,8CAAA;AAAgD,MAAO,OAAA,qBAAA,CAAA;AAAA,IAC5D,KAAK,QAAA;AAAU,MAAO,OAAA,aAAA,CAAA;AAAA,IACtB;AAAS,MAAO,OAAA,IAAA,CAAA;AAAA,GAChB;AACJ;;AChBO,MAAM,eAAkB,GAAA,4DAAA,CAAA;AACxB,MAAM,qBAAwB,GAAA,8DAAA,CAAA;AAC9B,MAAM,sBAAyB,GAAA,+DAAA,CAAA;AAC/B,MAAM,yBAA4B,GAAA,kEAAA,CAAA;AAClC,MAAM,2BAA8B,GAAA,mEAAA,CAAA;AACpC,MAAM,gCAAmC,GAAA,wEAAA,CAAA;AACzC,MAAM,kBAAqB,GAAA,2DAAA,CAAA;AAC3B,MAAM,uBAA0B,GAAA,gEAAA,CAAA;AAChC,MAAM,kBAAqB,GAAA,2DAAA,CAAA;AAC3B,MAAM,sBAAyB,GAAA,+DAAA,CAAA;AAC/B,MAAM,oBAAuB,GAAA,6DAAA,CAAA;AAC7B,MAAM,sBAAyB,GAAA,+DAAA,CAAA;AAQ/B,MAAM,gBAAmB,GAAA;AAAA,EAC5B,CAAA,EAAGC,iCAAkB,SAAS,CAAA,oBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,eAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,eAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,mBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,iBAAA,CAAA;AAClC,CAAA;;ACtBO,SAAS,cAAc,IAAa,EAAA;AACvC,EAAC,CAAAC,aAAA,CAAW,IAAI,CAAK,IAAAC,YAAA,CAAU,MAAM,EAAE,SAAA,EAAW,MAAM,CAAA,CAAA;AAC5D,CAAA;AAEO,SAAS,WAAW,IAAa,EAAA;AACpC,EAAAC,SAAA,CAAO,MAAM,EAAE,SAAA,EAAW,IAAM,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AACjD,CAAA;AAEO,SAAS,qBAAsB,CAAA,aAAA,EAAgC,YAAsB,EAAA,UAAA,EAAoB,IAAsB,EAAA;AAClI,EAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,EAAU,MAAA,IAAA,iBAAA,CAAA;AACV,EAAA,MAAA,IAAU,mBAAmB,YAAY,CAAA,qBAAA,EAAwB,cAAc,OAAQ,EAAC,+CAA+C,UAAU,CAAA;AAAA,CAAA,CAAA;AACjJ,EAAU,MAAA,IAAA,uCAAA,CAAA;AACV,EAAU,MAAA,IAAA,sCAAA,CAAA;AACV,EAAA,aAAA,CAAc,aAAc,EAAA,CAAE,OAAQ,CAAA,CAAC,CAAgB,KAAA;AACnD,IAAA,MAAA,IAAU,YAAY,CAAE,CAAA,OAAA,EAAS,CAAW,QAAA,EAAA,CAAA,CAAE,SAAS,CAAA;AAAA,CAAA,CAAA;AAAA,GAC1D,CAAA,CAAA;AACD,EAAU,MAAA,IAAA,KAAA,GAAQ,IAAK,CAAA,IAAA,EAAS,GAAA,IAAA,CAAA;AAChC,EAAU,MAAA,IAAA,KAAA,CAAA;AACV,EAAU,MAAA,IAAA,IAAA,CAAA;AAEV,EAAO,OAAA,MAAA,CAAA;AACX,CAAA;AAEO,SAAS,aAAa,eAAsB,EAAA;AAC/C,EAAA,OAAO,QAAS,CAAA,eAAe,CAAE,CAAA,GAAA,CAAI,SAAU,CAAG,EAAA;AAC9C,IAAA,IAAI,CAAO,KAAA,CAAA,CAAE,MAAW,KAAA,CAAA,EAAGH,iCAAkB,SAAS,CAAA,sBAAA,CAAA,IAA4B,CAAE,CAAA,SAAA,IAC/E,CAAG,EAAAA,gCAAA,CAAkB,SAAS,CAAA,iBAAA,CAAA,IAAuB,EAAE,SAAa,CAAA,EAAA;AACrE,MAAA,CAAA,CAAE,eAAe,CAAa,UAAA,EAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,KACrD;AACA,IAAA,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AACL,CAAA;AAEgB,SAAA,2BAAA,CAA4B,cAA4B,kBAAgD,EAAA;AACpH,EAAM,MAAA,YAAA,GAAe,IAAII,yBAAA,CAAa,YAAY,CAAA,CAAA;AAClD,EAAI,IAAA;AACA,IAAA,OAAOC,iCAAiB,CAAA,mBAAA,CAAoB,YAAc,EAAA,QAAA,EAAU,kBAAkB,CAAA,CAAA;AAAA,WAEpF,GAAK,EAAA;AACP,IAAA,OAAA,CAAQ,IAAI,GAAG,CAAA,CAAA;AACf,IAAM,MAAA,GAAA,CAAA;AAAA,GACV;AACJ;;ACtCO,MAAM,4BAA6B,CAAA;AAAA,EAEtC,YAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA0B,kBAA6B,EAAA;AAC/D,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,aAAgB,GAAA,2BAAA,CAA4B,IAAK,CAAA,YAAA,EAAc,kBAAkB,CAAA,CAAA;AAAA,GAC1F;AAAA,EAEA,kBAA6C,GAAA;AACzC,IAAA,MAAM,SAA+B,EAAC,CAAA;AAEtC,IAAM,MAAA,OAAA,GAAU,IAAIC,uBAAA,CAAQ,iBAAkB,EAAA,CAAA;AAC9C,IAAM,MAAA,MAAA,GAAS,IAAIC,2BAAe,EAAA,CAAA;AAElC,IAAA,MAAM,MAAS,GAAA;AAAA,MACX,UAAY,EAAA,MAAA;AAAA,KAChB,CAAA;AACA,IAAK,IAAA,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAiB,EAAA,CAAE,OAAS,CAAA,CAAC,OAAO,GAAQ,KAAA;AAC/C,MAAA,MAAA,CAAO,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,KACjB,CAAA,CAAA;AACD,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AAAA,EAEA,qBAAiC,GAAA;AAC7B,IAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,EAAA,CAAA;AAEtC,IAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AAEb,IAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAE,CAAA,OAAA,CAAS,CAAO,GAAA,KAAA;AAC/B,MAAM,MAAA,OAAA,GAAU,MAAM,GAAG,CAAA,CAAA;AACzB,MAAU,MAAA,IAAA,CAAA;AAAA,cAAA,EACN,GAAG,CAAA;AAAA,EACjB,OAAO,CAAA;AAAA,CAAA,CAAA;AAAA,KAEA,CAAA,CAAA;AAED,IAAU,MAAA,IAAA,CAAA;AAAA;AAAA,kCAEkB,EAAA,IAAA,CAAK,aAAc,CAAA,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAS7D,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACJ;;AC1DO,MAAM,YAAe,GAAA,sikBAAA,CAAA;AACrB,MAAM,eAAkB,GAAA,04HAAA;;ACc/B,MAAM,iBAAiB,OAAQ,CAAA,GAAA,CAAI,cAAiB,GAAA,OAAA,CAAQ,IAAI,cAAiB,GAAA,oDAAA,CAAA;AAGjF,MAAM,aAAgB,GAAA,CAAA,CAAA;AAEf,MAAM,8BAA+B,CAAA;AAAA,EACxC,OAAA,CAAA;AAAA,EACA,KAAA,CAAA;AAAA;AAAA,EAEA,EAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA4B,kBAA6B,EAAA;AACjE,IAAA,IAAA,CAAK,UAAU,IAAI,4BAAA,CAA6B,YAAc,EAAA,kBAAkB,EAAE,qBAAsB,EAAA,CAAA;AACxG,IAAA,IAAA,CAAK,aAAgB,GAAA,cAAA,CAAA;AAAA,GACzB;AAAA,EAEA,MAAM,WAAW,aAAwB,EAAA;AACrC,IAAA,IAAG,aAAe,EAAA;AACd,MAAA,IAAA,CAAK,aAAgB,GAAA,aAAA,CAAA;AAAA,KACzB;AACA,IAAG,IAAA,OAAO,WAAW,WAAa,EAAA;AAG9B,MAAK,IAAA,CAAA,EAAA,GAAK,MAAM,OAAQ,YAAY,CAAA,CAAA;AACpC,MAAG,IAAA,CAAC,KAAK,EAAI,EAAA;AACT,QAAM,MAAA,IAAI,MAAM,kCAAkC,CAAA,CAAA;AAAA,OACtD;AACA,MAAA,IAAA,CAAK,QAAQC,mCAAgC,CAAA;AAAA,QACzC,MAAQ,EAAA,aAAA;AAAA,OACX,CAAA,CAAA;AAAA,KAEA,MAAA;AACD,MAAA,IAAA,CAAK,EAAM,GAAA,CAAA,MAAM,OAAO,IAAA,CAAK,aAAgB,CAAA,EAAA,OAAA,CAAA;AAC7C,MAAG,IAAA,CAAC,KAAK,EAAI,EAAA;AACT,QAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,IAAA,CAAK,KAAQ,GAAA,MAAMC,2BAAwB,CAAA,EAAE,MAAQ,EAAA,aAAA,EAAiB,EAAA,IAAA,CAAK,EAAG,CAAA,OAAA,EAAS,KAAO,EAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,KACzG;AACA,IAAK,IAAA,CAAA,KAAA,CAAM,IAAI,uCAAyC,EAAA,MAAA,CAAO,KAAK,YAAc,EAAA,QAAQ,CAAE,CAAA,QAAA,EAAU,CAAA,CAAA;AACtG,IAAK,IAAA,CAAA,KAAA,CAAM,IAAI,0CAA4C,EAAA,MAAA,CAAO,KAAK,eAAiB,EAAA,QAAQ,CAAE,CAAA,QAAA,EAAU,CAAA,CAAA;AAAA,GAChH;AAAA,EAEA,QAAQ,UAAoC,EAAA;AACxC,IAAG,IAAA,CAAC,KAAK,KAAO,EAAA;AACZ,MAAM,MAAA,IAAI,MAAM,sDAAsD,CAAA,CAAA;AAAA,KAC1E;AACA,IAAA,MAAM,YAAc,GAAA,CAAA;AAAA,EAC1B,KAAK,OAAO,CAAA;AAAA,EACZ,UAAU,CAAA;AAAA,CAAA,CAAA;AAGJ,IAAA,MAAM,OAA2B,GAAA;AAAA,MAC7B,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,UAAU,IAAK,CAAA,EAAA;AAAA,MACf,cAAe,EAAAC,mBAAA;AAAA,MACf,cAAgB,EAAA;AAAA,QACZ,QAAU,EAAA,IAAA;AAAA,QACV,iBAAmB,EAAA,IAAA;AAAA,QACnB,eAAiB,EAAA,SAAA;AAAA,OACrB;AAAA,KACJ,CAAA;AACA,IAAA,MAAM,MAAS,GAAAC,mBAAA,CAAW,YAAc,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AACrD,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACJ;;ACpFY,IAAA,QAAA,qBAAAC,SAAL,KAAA;AACJ,EAAAA,UAAA,YAAa,CAAA,GAAA,YAAA,CAAA;AACb,EAAAA,UAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AAFD,EAAAA,OAAAA,SAAAA,CAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA,CAAA;;ACOZ,MAAM,UAAa,GAAA;AAAA,EACf,CAAA,EAAGZ,iCAAkB,SAAS,CAAA,kBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,sBAAA,CAAA;AAAA,EAC9B,CAAA,EAAGA,iCAAkB,SAAS,CAAA,iBAAA,CAAA;AAClC,CAAA,CAAA;AAQA,SAASa,YAAU,IAAY,EAAA;AAC3B,EAAG,IAAA,IAAA,CAAK,IAAS,KAAA,QAAA,CAAS,UAAY,EAAA;AAClC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAkB,eAAA,EAAA,IAAA,CAAK,QAAQ,CAA2B,yBAAA,CAAA,CAAA,CAAA;AAAA,GAC9E;AACJ,CAAA;AAMO,MAAM,gCAAiC,CAAA;AAAA,EAC1C,YAAA,CAAA;AAAA,EACA,QAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,cAA4B,kBAA6B,EAAA;AACjE,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,QAAW,GAAA,IAAI,8BAA+B,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAClF,IAAK,IAAA,CAAA,aAAA,GAAgB,2BAA4B,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAAA,GACpF;AAAA,EAEA,MAAM,UAAa,GAAA;AACf,IAAM,MAAA,IAAA,CAAK,SAAS,UAAW,EAAA,CAAA;AAAA,GACnC;AAAA,EAEA,QAAQ,YAAyB,EAAA;AAC7B,IAAM,MAAA,iBAAA,GAAoB,aAAa,YAAY,CAAA,CAAA;AAEnD,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AACb,IAAA,MAAM,SAAS,KAAqB,EAAA,CAAA;AACpC,IAAA,MAAM,WAAW,QAAS,CAAA,iBAAiB,CAAE,CAAA,GAAA,CAAI,SAAU,CAAG,EAAA;AAC1D,MAAA,IAAI,CAAK,IAAA,UAAA,CAAW,QAAS,CAAA,CAAA,CAAE,MAAM,CAAG,EAAA;AACpC,QAAA,IAAI,EAAE,IAAM,EAAA;AACR,UAAAA,WAAA,CAAU,EAAE,IAAI,CAAA,CAAA;AAChB,UAAA,MAAM,MAAS,GAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,aAAe,EAAA,CAAA,CAAE,IAAM,EAAA,KAAA,EAAO,CAAE,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAC9G,UAAG,IAAA,MAAA,CAAO,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,YAAE,CAAA,CAAA,IAAA,CAAK,WAAW,MAAO,CAAA,IAAA,CAAA;AACzB,YAAE,CAAA,CAAA,IAAA,CAAK,OAAO,QAAS,CAAA,OAAA,CAAA;AACvB,YAAA,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,WAEZ,MAAA;AACD,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACR,QAAQ,CAAE,CAAA,IAAA;AAAA,cACV,IAAA,EAAM,EAAE,IAAK,CAAA,QAAA;AAAA,cACb,QAAQ,MAAO,CAAA,MAAA;AAAA,aAClB,CAAA,CAAA;AAAA,WACL;AAAA,SACJ,MAAA,IACS,EAAE,SAAW,EAAA;AAClB,UAAAA,WAAA,CAAU,EAAE,SAAS,CAAA,CAAA;AACrB,UAAA,MAAM,MAAS,GAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,aAAe,EAAA,CAAA,CAAE,YAAc,EAAA,SAAA,EAAW,CAAE,CAAA,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA;AAC/H,UAAG,IAAA,MAAA,CAAO,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,YAAE,CAAA,CAAA,SAAA,CAAU,WAAW,MAAO,CAAA,IAAA,CAAA;AAC9B,YAAE,CAAA,CAAA,SAAA,CAAU,OAAO,QAAS,CAAA,OAAA,CAAA;AAC5B,YAAA,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,WAEZ,MAAA;AACD,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACR,QAAQ,CAAE,CAAA,YAAA;AAAA,cACV,IAAA,EAAM,EAAE,SAAU,CAAA,QAAA;AAAA,cAClB,QAAQ,MAAO,CAAA,MAAA;AAAA,aAClB,CAAA,CAAA;AAAA,WACL;AAAA,SACJ;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAED,IAAG,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACpB,MAAO,OAAA,QAAA,CAAA;AAAA,KAEN,MAAA;AACD,MAAM,MAAA,MAAA,CAAA;AAAA,KACV;AAAA,GACJ;AACJ;;ACjFgB,SAAA,QAAA,CAAS,IAAoB,EAAA,OAAA,EAAa,OAAqC,EAAA;AAC3F,EAAA,IAAG,QAAQ,SAAW,EAAA;AAClB,IAAO,OAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,SAAS,CAAA,CAAA;AAAA,GAEjC,MAAA;AACD,IAAM,MAAA,SAAA,GAAY,IAAI,IAAK,CAAA,UAAA;AAAA,MAAY,OAAQ,CAAA,MAAA,GAAS,OAAQ,CAAA,MAAA,GAAS,OAAS,EAAA,MAAA;AAAA,MAC9E;AAAA,QACI,OAAQ,OAAQ,CAAA,KAAA;AAAA,QAChB,MAAO,OAAQ,CAAA,IAAA;AAAA,OACnB;AAAA,KACJ,CAAA;AACA,IAAO,OAAA,SAAA,CAAU,OAAO,IAAI,CAAA,CAAA;AAAA,GAChC;AACJ;;ACIA,SAAS,UAAU,IAAY,EAAA;AAC3B,EAAG,IAAA,IAAA,CAAK,IAAS,KAAA,QAAA,CAAS,OAAS,EAAA;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,IAAA,CAAK,QAAQ,CAAmC,iCAAA,CAAA,CAAA,CAAA;AAAA,GAClF;AACJ,CAAA;AAUA,SAAS,kBAAmB,CAAA,aAAA,EAAsB,IAAoB,EAAA,EAAA,EAAY,OAAqC,EAAA;AACnH,EAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,EAAI,EAAA;AACd,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,mBAAA,EAAsB,EAAE,CAAA,SAAA,EAAY,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,GAC9D;AACA,EAAM,MAAA,gBAAA,GAAmB,IAAI,KAAc,EAAA,CAAA;AAC3C,EAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA,CAAA;AAC5B,EAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA,CAAA;AAC/B,EAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA,CAAA;AAC/B,EAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA,CAAA;AAC7B,EAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA,CAAA;AAG1B,EAAM,MAAA,iBAAA,GAAoB,IAAI,KAAW,EAAA,CAAA;AACzC,EAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA,CAAA;AAC3B,EAAA,iBAAA,CAAkB,KAAK,aAAa,CAAA,CAAA;AACpC,EAAA,iBAAA,CAAkB,KAAK,OAAO,CAAA,CAAA;AAC9B,EAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA,CAAA;AAC5B,EAAA,iBAAA,CAAkB,KAAK,EAAE,CAAA,CAAA;AAGzB,EAAM,MAAA,UAAA,GAAa,EAAG,CAAA,SAAA,CAAU,EAAG,CAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAG,EAAA,EAAA,CAAG,WAAY,CAAA,GAAG,CAAC,CAAA,CAAA;AACxE,EAAA,IAAG,UAAW,CAAA,IAAA,EAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC/B,IAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA,CAAA;AAAA,GACtC;AACA,EAAI,IAAA;AACA,IAAA,MAAM,GAAM,GAAA,IAAI,QAAS,CAAA,GAAG,kBAAkB,UAAU,CAAA,CAAA;AACxD,IAAM,MAAA,MAAA,GAAS,GAAI,CAAA,GAAG,iBAAiB,CAAA,CAAA;AACvC,IAAO,OAAA,MAAA,CAAA;AAAA,WAEL,GAAK,EAAA;AACP,IAAM,MAAA,IAAI,MAAM,CAAgB,aAAA,EAAA,GAAG,eAAe,UAAU,CAAA,gBAAA,EAAmB,iBAAiB,CAAE,CAAA,CAAA,CAAA;AAAA,GACtG;AACJ,CAAA;AAaA,SAAS,WAAA,CAAY,QAAc,EAAA,WAAA,EAAiB,KAAyB,EAAA;AACzE,EAAA,IAAG,CAAC,WAAa,EAAA;AACb,IAAM,MAAA,IAAI,MAAM,uBAAuB,CAAA,CAAA;AAAA,GAC3C;AACA,EAAG,IAAA,CAAC,YAAY,IAAM,EAAA;AAClB,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,uBAAA,EAA0B,KAAK,SAAU,CAAA,WAAW,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,GAC3E;AACA,EAAA,IAAG,WAAY,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,KAAI,CAAG,EAAA;AAElC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,WAAA,CAAY,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,GAC/D;AACA,EAAA,IAAG,CAAC,KAAS,IAAA,CAAC,MAAM,MAAU,IAAA,KAAA,CAAM,SAAQ,CAAI,EAAA;AAC5C,IAAM,MAAA,IAAI,MAAM,wBAAwB,CAAA,CAAA;AAAA,GAC5C;AACA,EAAA,MAAM,WAAW,EAAC,CAAA;AAClB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACnC,IAAA,MAAM,GAAM,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAC5B,IAAA,MAAM,GAAM,GAAA,QAAA,CAAS,GAAI,CAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AAKtC,IAAI,IAAA,GAAA,IAAO,IAAI,MAAQ,EAAA;AACnB,MAAA,IAAG,gBAAiB,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAM,KAAK,CAAG,EAAA;AAC1C,QAAA,QAAA,CAAS,IAAK,CAAA,CAAA,EAAA,EAAK,GAAI,CAAA,IAAI,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,OACnC;AAAA,KACJ;AAAA,GACJ;AAEA,EAAG,IAAA,WAAA,CAAY,SAAS,MAAQ,EAAA;AAC5B,IAAA,QAAA,CAAS,IAAK,CAAA,CAAA,EAAA,EAAK,WAAY,CAAA,IAAI,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,GAC3C;AAEA,EAAO,OAAA,QAAA,CAAS,SAAS,CAAI,GAAA,CAAA,CAAA,EAAI,SAAS,IAAK,CAAA,EAAE,CAAC,CAAK,CAAA,GAAA,GAAA,CAAA;AAC3D,CAAA;AAWA,SAAS,iBAAkB,CAAA,YAAA,EAA2B,aAAsB,EAAA,YAAA,EAAsB,MAAoB,OAAiC,EAAA;AACnJ,EAAM,MAAA,YAAA,GAAe,IAAIT,yBAAA,CAAa,YAAY,CAAA,CAAA;AAClD,EAAA,OAAO,QAAS,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,SAAU,OAAc,EAAA;AACtD,IAAA,IAAI,QAAW,GAAA,KAAA,CAAA;AACf,IAAI,IAAA,OAAO,YAAY,QAAY,IAAA,OAAA,CAAQ,UAAU,OAAO,OAAA,CAAQ,WAAW,QAAU,EAAA;AACrF,MAAA,MAAM,YAAY,OAAQ,CAAA,MAAA,CAAA;AAG1B,MAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAC7C,MAAI,IAAA,KAAA,IAAS,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,QAAA,OAAA,CAAQ,SAAS,CAAG,EAAAU,8BAAA,CAAgB,SAAS,CAAI,CAAA,EAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,OAC7D;AAGA,MAAI,IAAA,sBAAA,CAAuB,IAAK,CAAA,SAAS,CAAG,EAAA;AACxC,QAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAC,8BAAA,CAAgB,SAAS,CAAA,UAAA,CAAA,CAAA;AAC7C,QAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AAAA,OACnB;AAKA,MAAI,IAAA,kBAAA,CAAmB,IAAK,CAAA,SAAS,CAAG,EAAA;AACpC,QAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,UAAA,CAAA,CAAA;AAC7C,QAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AAAA,OAKV,MAAA,IAAA,qBAAA,CAAsB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC5C,QAAA,IAAI,QAAQ,IAAM,EAAA;AACd,UAAA,SAAA,CAAU,QAAQ,IAAI,CAAA,CAAA;AACtB,UAAA,MAAM,SAAS,kBAAmB,CAAA,aAAA,EAAe,MAAM,OAAQ,CAAA,IAAA,CAAK,UAAU,OAAO,CAAA,CAAA;AACrF,UAAA,IAAG,WAAW,IAAM,EAAA;AAChB,YAAA,OAAA,CAAQ,KAAQ,GAAA,QAAA,CAAA;AAAA,WACpB,MAAA,IACQ,OAAO,MAAA,KAAW,QAAU,EAAA;AAChC,YAAA,OAAA,CAAQ,KAAQ,GAAA,MAAA,CAAA;AAAA,WAEf,MAAA;AACD,YAAQ,OAAA,CAAA,KAAA,GAAQ,IAAK,CAAA,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,WACzC;AACA,UAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AAAA,SAEd,MAAA;AACD,UAAM,MAAA,IAAI,MAAM,+BAA+B,CAAA,CAAA;AAAA,SACnD;AAAA,OAIK,MAAA,IAAA,uBAAA,CAAwB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC9C,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,QAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAE7C,QAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC7B,UAAA,MAAM,IAAI,KAAM,CAAA,CAAA,0BAAA,EAA6B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SAEpE,MAAA;AACD,UAAM,MAAA,SAAA,GAAY,eAAe,CAAC,CAAA,CAAA;AAClC,UAAA,IAAG,CAAC,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC1B,YAAM,MAAA,IAAI,MAAM,CAA0B,uBAAA,EAAA,IAAI,aAAa,IAAI,CAAA,kBAAA,EAAqB,SAAS,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAE/F,MAAA;AACD,YAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,KAAA,CAAA,CAAA;AAC7C,YAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,YAAQ,OAAA,CAAA,KAAA,GAAQ,SAAU,CAAA,GAAA,CAAK,CAAa,SAAA,KAAA;AAExC,cAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,YAAA,EAAc,aAAe,EAAA,OAAA,CAAQ,KAAM,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA;AACrG,cAAO,OAAA;AAAA,gBACH,MAAA,EAAQ,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,KAAA,CAAA;AAAA,gBACpC,KAAO,EAAA,SAAA,CAAU,KAAQ,GAAA,SAAA,CAAU,QAAQ,EAAC;AAAA,eAChD,CAAA;AAAA,aACH,CAAA,CAAA;AACD,YAAW,QAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACJ;AAAA,OAIK,MAAA,IAAA,kBAAA,CAAmB,IAAK,CAAA,SAAS,CAAG,EAAA;AACzC,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,QAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAE7C,QAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC7B,UAAA,MAAM,IAAI,KAAM,CAAA,CAAA,0BAAA,EAA6B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SAEpE,MAAA;AACD,UAAM,MAAA,SAAA,GAAY,eAAe,CAAC,CAAA,CAAA;AAClC,UAAA,IAAG,CAAC,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC1B,YAAM,MAAA,IAAI,MAAM,CAA0B,uBAAA,EAAA,IAAI,aAAa,IAAI,CAAA,kBAAA,EAAqB,SAAS,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAE/F,MAAA;AACD,YAAQ,OAAA,CAAA,MAAA,GAAS,CAAG,EAAAA,8BAAA,CAAgB,SAAS,CAAA,KAAA,CAAA,CAAA;AAC7C,YAAM,MAAA,OAAA,GAAU,UAAW,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAC9C,YAAA,OAAA,CAAQ,IAAO,GAAA,QAAA,CAAS,SAAU,CAAA,GAAA,CAAK,CAAa,SAAA,KAAA;AAChD,cAAA,OAAO,OAAU,GAAA,OAAA,CAAQ,SAAW,EAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,SAAA,CAAA;AAAA,aACzD,CAAG,EAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACpB,YAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,MAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,IAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AACf,YAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AACf,YAAW,QAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACJ;AAAA,OAKK,MAAA,IAAA,sBAAA,CAAuB,IAAK,CAAA,SAAS,CAC1C,IAAA,2BAAA,CAA4B,IAAK,CAAA,SAAS,CAC1C,IAAA,gCAAA,CAAiC,IAAK,CAAA,SAAS,CAAG,EAAA;AAClD,QAAG,IAAA,OAAO,SAAS,QAAU,EAAA;AACzB,UAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,UAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC7C,UAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC7B,YAAA,MAAM,IAAI,KAAM,CAAA,CAAA,0BAAA,EAA6B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAEpE,MAAA;AAED,YAAM,MAAA,aAAA,GAAgB,eAAe,CAAC,CAAA,CAAA;AACtC,YAAM,MAAA,IAAA,GAAQC,sBAAkB,CAAA,eAAA,CAAgB,OAAQ,CAAA,WAAW,IAAI,IAAO,GAAA,YAAA,CAAa,mBAAoB,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAElI,YAAM,MAAA,OAAA,GAAU,WAAW,IAAQ,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,GAAW,QAAQ,WAAW,CAAA,CAAA;AACjF,YAAQ,OAAA,CAAA,KAAA,GAAQ,UAAU,OAAQ,CAAA,aAAA,EAAe,QAAQ,MAAM,CAAA,GAAI,IAAK,CAAA,SAAA,CAAU,aAAa,CAAA,CAAA;AAAA,WACnG;AAAA,SAEC,MAAA;AAED,UAAA,MAAM,aAAgB,GAAA,IAAA,CAAA;AACtB,UAAM,MAAA,IAAA,GAAQA,sBAAkB,CAAA,eAAA,CAAgB,OAAQ,CAAA,WAAW,IAAI,IAAO,GAAA,YAAA,CAAa,mBAAoB,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAElI,UAAM,MAAA,OAAA,GAAU,WAAW,IAAQ,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,GAAW,QAAQ,WAAW,CAAA,CAAA;AACjF,UAAQ,OAAA,CAAA,KAAA,GAAQ,UAAU,OAAQ,CAAA,aAAA,EAAe,QAAQ,MAAM,CAAA,GAAI,IAAK,CAAA,SAAA,CAAU,aAAa,CAAA,CAAA;AAAA,SACnG;AAAA,OAKK,MAAA,IAAA,yBAAA,CAA0B,IAAK,CAAA,SAAS,CAAG,EAAA;AAChD,QAAA,IAAI,QAAQ,SAAW,EAAA;AACnB,UAAA,SAAA,CAAU,QAAQ,SAAS,CAAA,CAAA;AAC3B,UAAQ,OAAA,CAAA,MAAA,GAAS,CAAC,CAAC,kBAAA,CAAmB,eAAe,IAAM,EAAA,OAAA,CAAQ,SAAU,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAAA,SAE7F,MAAA;AACD,UAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,UAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC7C,UAAI,IAAA,cAAA,IAAkB,eAAe,MAAQ,EAAA;AACzC,YAAG,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC5B,cAAA,OAAA,CAAQ,MAAS,GAAA,CAAC,CAAC,cAAA,CAAe,CAAC,CAAA,CAAA;AAAA,aAElC,MAAA;AACD,cAAA,MAAM,IAAI,KAAM,CAAA,CAAA,gCAAA,EAAmC,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,aAC/E;AAAA,WAEC,MAAA;AACD,YAAA,OAAA,CAAQ,MAAS,GAAA,KAAA,CAAA;AAAA,WACrB;AAAA,SACJ;AACA,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,MAAS,GAAA,OAAA,CAAQ,WAAW,OAAQ,CAAA,SAAA,CAAA;AAC5D,QAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,YAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,YAAA,CAAA;AAAA,OAIV,MAAA,IAAA,oBAAA,CAAqB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC3C,QAAA,IAAI,QAAQ,SAAW,EAAA;AACnB,UAAA,SAAA,CAAU,QAAQ,SAAS,CAAA,CAAA;AAC3B,UAAM,MAAA,MAAA,GAAS,CAAC,CAAC,kBAAA,CAAmB,eAAe,IAAM,EAAA,OAAA,CAAQ,SAAU,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAC5F,UAAA,IAAG,CAAC,MAAQ,EAAA;AACR,YAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AACf,YAAW,QAAA,GAAA,IAAA,CAAA;AAAA,WACf;AAAA,SACJ;AACA,QAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,QAAA,OAAO,OAAQ,CAAA,YAAA,CAAA;AAAA,OAIV,MAAA,IAAA,sBAAA,CAAuB,IAAK,CAAA,SAAS,CAAG,EAAA;AAC7C,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,YAAc,EAAA,OAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AACzD,QAAA,MAAM,cAAiB,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC7C,QAAI,IAAA,cAAA,IAAkB,eAAe,MAAQ,EAAA;AACzC,UAAG,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC5B,YAAA,OAAA,CAAQ,OAAU,GAAA,IAAA,CAAA;AAClB,YAAA,OAAA,CAAQ,WAAW,EAAC,CAAA;AAAA,WAEnB,MAAA;AACD,YAAA,MAAM,IAAI,KAAM,CAAA,CAAA,gCAAA,EAAmC,IAAI,CAAA,UAAA,EAAa,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WAC/E;AAAA,SAEC,MAAA;AACD,UAAA,OAAA,CAAQ,OAAU,GAAA,KAAA,CAAA;AAClB,UAAA,OAAA,CAAQ,WAAW,EAAC,CAAA;AAAA,SACxB;AACA,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,OAAU,GAAA,OAAA,CAAQ,WAAW,OAAQ,CAAA,QAAA,CAAA;AAAA,OACjE;AAAA,KACJ;AACA,IAAK,IAAA,CAAA,MAAA,CAAO,SAAS,QAAQ,CAAA,CAAA;AAAA,GAChC,CAAA,CAAA;AACL,CAAA;AAMO,MAAM,uBAAwB,CAAA;AAAA,EACjC,YAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EAEA,WAAA,CAAY,YAA4B,EAAA,aAAA,EAAsB,kBAA6B,EAAA;AACvF,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AACpB,IAAA,IAAA,CAAK,aAAgB,GAAA,aAAA,CAAA;AACrB,IAAA,IAAA,CAAK,aAAgB,GAAA,2BAAA,CAA4B,IAAK,CAAA,YAAA,EAAa,kBAAkB,CAAA,CAAA;AAAA,GACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW,YAA8B,EAAA;AACrC,IAAA,MAAM,eAAe,IAAIC,yBAAA,CAAa,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AACtD,IAAa,YAAA,CAAA,WAAA,CAAYC,gCAAkB,CAAA,KAAA,EAAO,uBAAuB,CAAA,CAAA;AACzE,IAAa,YAAA,CAAA,WAAA,CAAYH,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAa,YAAA,CAAA,WAAA,CAAYf,gCAAkB,CAAA,KAAA,EAAO,kBAAkB,CAAA,CAAA;AACpE,IAAM,MAAA,OAAA,GAAU,IAAImB,oBAAA,CAAQ,YAAY,CAAA,CAAA;AACxC,IAAA,MAAM,UAAa,GAAA,IAAIC,uBAAW,CAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AACvD,IAAI,IAAA;AACA,MAAA,UAAA,CAAW,SAAS,YAAY,CAAA,CAAA;AAChC,MAAO,OAAA,YAAA,CAAA;AAAA,aAEL,GAAK,EAAA;AACP,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,6BAAA,EAAgC,GAAG,CAAA,EAAA,EAAK,IAAK,CAAA,SAAA,CAAU,YAAc,EAAA,IAAA,EAAM,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,KACnG;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,8BAA8B,YAAwC,EAAA;AACxE,IAAA,MAAM,eAAmB,GAAA,YAAA,CAAqB,KAAM,CAAA,CAAC,CAAE,CAAA,WAAA,CAAA;AACvD,IAAA,IAAG,CAAC,eAAiB,EAAA;AACjB,MAAM,MAAA,IAAI,MAAM,2BAA2B,CAAA,CAAA;AAAA,KAC/C;AACA,IAAA,MAAM,QAAW,GAAA,IAAI,gCAAiC,CAAA,IAAA,CAAK,cAAc,eAAe,CAAA,CAAA;AACxF,IAAA,MAAM,SAAS,UAAW,EAAA,CAAA;AAC1B,IAAO,OAAA,QAAA,CAAS,QAAQ,YAAY,CAAA,CAAA;AAAA,GACxC;AAAA,EAEA,mBAAmB,UAA6B,EAAA;AAC5C,IAAA,MAAM,eAAe,IAAIH,yBAAA,CAAa,EAAE,MAAA,EAAQ,MAAM,CAAA,CAAA;AACtD,IAAa,YAAA,CAAA,WAAA,CAAYC,gCAAkB,CAAA,KAAA,EAAO,uBAAuB,CAAA,CAAA;AACzE,IAAa,YAAA,CAAA,WAAA,CAAYH,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAa,YAAA,CAAA,WAAA,CAAYD,8BAAgB,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AAChE,IAAM,MAAA,OAAA,GAAU,IAAIK,oBAAA,CAAQ,YAAY,CAAA,CAAA;AACxC,IAAA,MAAM,UAAa,GAAA,IAAIC,uBAAW,CAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AACvD,IAAI,IAAA;AACA,MAAO,OAAA,UAAA,CAAW,SAAS,UAAU,CAAA,CAAA;AAAA,aAEnC,GAAK,EAAA;AACP,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,6BAAA,EAAgC,GAAG,CAAA,EAAA,EAAK,IAAK,CAAA,SAAA,CAAU,UAAY,EAAA,IAAA,EAAM,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,KACjG;AAAA,GACJ;AAAA,EAEA,MAAM,QAAA,CAAS,YAAsB,EAAA,IAAA,EAAoB,OAA0C,EAAA;AAC/F,IAAA,MAAM,OAAU,GAAA,IAAID,oBAAQ,CAAA,IAAA,CAAK,YAAY,CAAA,CAAA;AAC7C,IAAA,MAAM,UAAa,GAAA,IAAIC,uBAAW,CAAA,OAAA,EAAS,KAAK,YAAY,CAAA,CAAA;AAC5D,IAAM,MAAA,YAAA,GAAe,UAAW,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAC7C,IAAA,IAAI,aAAa,qBAAsB,EAAA,KAAM,IAAK,CAAA,aAAA,CAAc,uBAAyB,EAAA;AACrF,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,+BAAA,EAAkC,KAAK,aAAc,CAAA,qBAAA,EAAuB,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,KACpG;AACA,IAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,UAAA,CAAW,YAAY,CAAA,CAAA;AACtD,IAAA,MAAM,cAAiB,GAAA,MAAM,IAAK,CAAA,6BAAA,CAA8B,iBAAiB,CAAA,CAAA;AACjF,IAAM,MAAA,UAAA,GAAa,kBAAkB,IAAK,CAAA,YAAA,EAAc,KAAK,aAAe,EAAA,cAAA,EAAgB,MAAM,OAAO,CAAA,CAAA;AACzG,IAAO,OAAA,IAAA,CAAK,mBAAmB,UAAU,CAAA,CAAA;AAAA,GAC7C;AACJ;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/drafting/Boolean/index.ts","../src/drafting/DateTime/index.ts","../src/drafting/Double/format.ts","../src/drafting/Double/index.ts","../src/drafting/Integer/format.ts","../src/drafting/Integer/index.ts","../src/drafting/Long/index.ts","../src/drafting/MonetaryAmount/currencycode.ts","../src/drafting/MonetaryAmount/index.ts","../src/drafting/String/index.ts","../src/drafting/index.ts","../src/TemplateMarkNodes.ts","../src/utils.ts","../src/TypeScriptCompilationContext.ts","../src/runtime/declarations.ts","../src/TypeScriptToJavaScriptCompiler.ts","../src/model-gen/org.accordproject.templatemark@0.5.0.ts","../src/TemplateMarkToJavaScriptCompiler.ts","../src/TypeScriptRuntime.ts","../src/TemplateMarkInterpreter.ts"],"sourcesContent":["/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Boolean\n * @param {Boolean} value the Boolean\n * @returns {string} the text\n */\nexport default function booleanDrafter(value:boolean) : string {\n if (value) {\n return 'true';\n } else {\n return 'false';\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc);\n\n/**\n * Creates a drafter for DateTime\n * @param {string} value the DateTime\n * @param {object} format the the format\n * @returns {string} the text\n */\nexport default function dateTimeDrafter(value:string,format:string) : string {\n const f = format ? format : 'MM/DD/YYYY';\n return dayjs.utc(value).format(f);\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Double\n * @param {number} value - the double\n * @returns {string} the text\n */\nexport function draftDoubleIEEE(value:number) : string {\n if (Math.floor(value) === value) {\n return (new Number(value)).toFixed(1); // Make sure there is always decimal point\n } else {\n return '' + value;\n }\n}\n\n/**\n * Creates a drafter for a formatted Double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftDoubleFormat(value:number,format:string) : string {\n return format.replace(/0(.)0((.)(0+))?/gi, function(_a,sep1,_b,sep2,digits){\n const len = digits ? digits.length : 0;\n const vs = value.toFixed(len);\n let res = '';\n if (sep2) {\n const d = vs.substring(vs.length - len);\n res += sep2 + d;\n }\n let i = vs.substring(0,vs.length - (len === 0 ? 0 : len+1));\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from './format';\nimport { draftDoubleFormat } from './format';\n\n/**\n * Creates a drafter for a double\n * @param {number} value - the Double\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function doubleDrafter(value:number,format:string) : string {\n if (format) {\n return draftDoubleFormat(value,format);\n } else {\n return draftDoubleIEEE(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Integer\n * @param {number} value - the integer\n * @returns {string} the text\n */\nexport function draftInteger(value:number) : string {\n return '' + value;\n}\n\n/**\n * Creates a drafter for a formatted Integer\n * @param {number} value - the Integer\n * @param {string} format - the format\n * @returns {object} the parser\n */\nexport function draftIntegerFormat(value:number,format:string) : string {\n return format.replace(/0(.)0/gi, function(_a,sep1){\n const vs = value.toFixed(0);\n let res = '';\n let i = vs.substring(0,vs.length);\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\nimport { draftInteger } from './format';\nimport { draftIntegerFormat } from './format';\n\n/**\n * Creates a drafter for an Integer\n * @param {number} value - the integer\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function integerDrafter(value:number,format:string) : string {\n if (format) {\n return draftIntegerFormat(value,format);\n } else {\n return draftInteger(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftInteger as draftLong } from '../Integer/format';\nimport { draftIntegerFormat as draftLongFormat } from '../Integer/format';\n\n/**\n * Creates a drafter for a long\n * @param {number} value - the Long\n * @param {string} format - the format\n * @returns {string} the text\n */\nexport default function longDrafter(value:number,format:string) : string {\n if (format) {\n return draftLongFormat(value,format);\n } else {\n return draftLong(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum CurrencyCode {\n 'USD' = '$',\n 'EUR'= '€',\n 'JPY'= '¥',\n 'GBP'= '£',\n 'AUD'= 'A$',\n 'CAD'= 'C$',\n 'CHF'= 'CHF',\n 'CNY'= '元',\n 'HKD'= 'HK$',\n 'NZD'= 'NZ$',\n 'KRW'= '₩',\n 'SGD'= 'S$',\n 'MXN'= 'MEX$',\n 'INR'= '₹',\n 'RUB'= '₽',\n 'ZAR'= 'R',\n 'TRY'= '₺',\n 'BRL'= 'R$',\n 'TWD'= 'NT$',\n 'PLN'= 'zł',\n 'THB'= '฿',\n 'IDR'= 'Rp',\n 'HUF'= 'Ft',\n 'CZK'= 'Kč',\n 'ILS'= '₪',\n 'CLP'= 'CLP$',\n 'PHP'= '₱',\n 'AED'= 'د.إ',\n 'COP'= 'COL$',\n 'SAR'= '﷼',\n 'MYR'= 'RM',\n 'RON'= 'L',\n 'BGN'= 'лв.'\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from '../Double/format';\nimport { draftDoubleFormat } from '../Double/format';\nimport { CurrencyCode } from './currencycode';\n\ntype MonetaryAmount = {\n doubleValue: number;\n currencyCode: string;\n};\n\n/**\n * Creates a drafter for monetary amount with no format\n * @param {object} value the monetary amount\n * @returns {string} the text\n */\nfunction monetaryAmountDefaultDrafter(value:MonetaryAmount) {\n return '' + draftDoubleIEEE(value.doubleValue) + ' ' + value.currencyCode;\n}\n\n/**\n * Symbol from a currency code\n * @param {string} c - the currency code\n * @returns {string} the symbol\n */\nfunction codeSymbol(c:string) : string {\n const index: number = Object.keys(CurrencyCode).indexOf(c);\n if(index >=0) {\n return Object.values(CurrencyCode)[index];\n }\n else {\n return c;\n }\n}\n\n/**\n * Creates a drafter for monetary amount with a given format\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nfunction monetaryAmountFormatDrafter(value:MonetaryAmount,format:string) : string {\n return draftDoubleFormat(value.doubleValue,\n format\n .replace(/K/gi,codeSymbol(value.currencyCode))\n .replace(/CCC/gi,value.currencyCode));\n}\n\n/**\n * Creates a drafter for a monetary amount\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nexport default function monetaryAmountDrafter(value:MonetaryAmount,format:string) : string {\n if (format) {\n return monetaryAmountFormatDrafter(value,format);\n } else {\n return monetaryAmountDefaultDrafter(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for String\n * @param {object} value the String\n * @returns {string} the text\n */\nexport default function stringDrafter(value:string) : string {\n return value;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport booleanDrafter from './Boolean';\nimport dateTimeDrafter from './DateTime';\nimport doubleDrafter from './Double';\nimport integerDrafter from './Integer';\nimport longDrafter from './Long';\nimport monetaryAmountDrafter from './MonetaryAmount';\nimport stringDrafter from './String';\n\nexport function getDrafter(typeName: string) : ((value:any, format:string) => string)|null {\n switch(typeName) {\n case 'Boolean': return booleanDrafter;\n case 'DateTime': return dateTimeDrafter;\n case 'Double': return doubleDrafter;\n case 'Integer': return integerDrafter;\n case 'Long': return longDrafter;\n case 'org.accordproject.money@0.3.0.MonetaryAmount': return monetaryAmountDrafter;\n case 'String': return stringDrafter;\n default: return null;\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\n\n// use to create agreementmark from templatemark\nexport const TEMPLATEMARK_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.(\\w+)Definition$/;\nexport const FORMULA_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormulaDefinition$/;\nexport const VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.VariableDefinition$/;\nexport const CONDITIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ConditionalDefinition$/;\nexport const ENUM_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.EnumVariableDefinition$/;\nexport const FORMATTED_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormattedVariableDefinition$/;\nexport const WITH_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.WithDefinition$/;\nexport const LISTBLOCK_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ListBlockDefinition$/;\nexport const JOIN_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.JoinDefinition$/;\nexport const OPTIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.OptionalDefinition$/;\nexport const CLAUSE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ClauseDefinition$/;\nexport const CONTRACT_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ContractDefinition$/;\n\nexport type TemplateData = Record<string, unknown>;\n\n/**\n * TemplateMark nodes that implicity change the data access scope\n * by specifying the name of a property on the node.\n */\nexport const NAVIGATION_NODES = [\n `${TemplateMarkModel.NAMESPACE}.ListBlockDefinition`,\n `${TemplateMarkModel.NAMESPACE}.WithDefinition`,\n `${TemplateMarkModel.NAMESPACE}.JoinDefinition`,\n `${TemplateMarkModel.NAMESPACE}.OptionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`\n];","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, Introspector, ModelManager, Property } from '@accordproject/concerto-core';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { templatemarkutil } from '@accordproject/markdown-template';\n\nimport { existsSync, mkdirSync, rmSync } from 'fs';\nimport traverse from 'traverse';\n\nexport function ensureDirSync(path:string) {\n !existsSync(path) && mkdirSync(path, { recursive: true });\n}\n\nexport function removeSync(path:string) {\n rmSync(path, { recursive: true, force: true });\n}\n\nexport function writeFunctionToString(templateClass:ClassDeclaration, functionName: string, returnType: string, code: string): string {\n let result = '';\n result += '/// ---cut---\\n';\n result += `export function ${functionName}(data:TemplateModel.I${templateClass.getName()}, library:any, options:GenerationOptions) : ${returnType} {\\n`;\n result += ' const now = dayjs(options?.now);\\n';\n result += ' const locale = options?.locale;\\n';\n templateClass.getProperties().forEach((p: Property) => {\n result += ` const ${p.getName()} = data.${p.getName()};\\n`;\n });\n result += ' ' + code.trim() + '\\n';\n result += '}\\n';\n result += '\\n';\n\n return result;\n}\n\nexport function nameUserCode(templateMarkDom: any) {\n return traverse(templateMarkDom).map(function (x) {\n if (x && ((x.$class === `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition` && x.condition) ||\n (`${TemplateMarkModel.NAMESPACE}.ClauseDefinition` && x.condition))) {\n x.functionName = `condition_${this.path.join('_')}`;\n }\n this.update(x);\n });\n}\n\nexport function getTemplateClassDeclaration(modelManager: ModelManager, templateConceptFqn?: string) : ClassDeclaration {\n const introspector = new Introspector(modelManager);\n try {\n return templatemarkutil.findTemplateConcept(introspector, 'clause', templateConceptFqn);\n }\n catch(err) {\n console.log(err);\n throw err;\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { CodeGen } from '@accordproject/concerto-codegen';\nimport { InMemoryWriter } from '@accordproject/concerto-util';\nimport { getTemplateClassDeclaration } from './utils';\n\n/**\n * This class creates the typescript types\n * required to compile Typescript expressions (used in\n * formulae, conditions and clauses) to JavaScript. It uses\n * these to create a compilation context for '@typescript/twoslash'\n * which is used to compile the typescript code.\n */\nexport class TypeScriptCompilationContext {\n\n modelManager:ModelManager;\n templateClass:ClassDeclaration;\n\n constructor(modelManager:ModelManager,templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.templateClass = getTemplateClassDeclaration(this.modelManager, templateConceptFqn);\n }\n\n getTypeScriptFiles() : Record<string,string> {\n const result:Record<string,string> = {};\n\n const visitor = new CodeGen.TypescriptVisitor();\n const writer = new InMemoryWriter();\n\n const params = {\n fileWriter: writer\n };\n this.modelManager.accept(visitor, params);\n writer.getFilesInMemory().forEach( (value, key) => {\n result[key] = value;\n });\n return result;\n }\n\n getCompilationContext() : string {\n const files = this.getTypeScriptFiles();\n\n let result = '';\n\n Object.keys(files).forEach( key => {\n const content = files[key];\n result += `\n// @filename: ${key}\n${content}\n`;\n });\n\n result += `\n// @filename: code.ts\nimport * as TemplateModel from './${this.templateClass.getNamespace()}';\nimport dayjs from 'dayjs';\nimport jp from 'jsonpath';\n\ntype GenerationOptions = {\n now?:string,\n locale?:string\n}\n`;\n return result;\n }\n}","\n/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable quotes */\n// file generated by ./scripts/updateRuntimeDependencies.js\n\n\nexport const DAYJS_BASE64 = 'Ly8vIDxyZWZlcmVuY2UgcGF0aD0iLi9sb2NhbGUvaW5kZXguZC50cyIgLz4KCmV4cG9ydCA9IGRheWpzOwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUpOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIHN0cmljdD86IGJvb2xlYW4pOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIGxvY2FsZT86IHN0cmluZywgc3RyaWN0PzogYm9vbGVhbik6IGRheWpzLkRheWpzCgpkZWNsYXJlIG5hbWVzcGFjZSBkYXlqcyB7CiAgaW50ZXJmYWNlIENvbmZpZ1R5cGVNYXAgewogICAgZGVmYXVsdDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IERheWpzIHwgbnVsbCB8IHVuZGVmaW5lZAogIH0KCiAgZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IENvbmZpZ1R5cGVNYXBba2V5b2YgQ29uZmlnVHlwZU1hcF0KCiAgZXhwb3J0IGludGVyZmFjZSBGb3JtYXRPYmplY3QgeyBsb2NhbGU/OiBzdHJpbmcsIGZvcm1hdD86IHN0cmluZywgdXRjPzogYm9vbGVhbiB9CgogIGV4cG9ydCB0eXBlIE9wdGlvblR5cGUgPSBGb3JtYXRPYmplY3QgfCBzdHJpbmcgfCBzdHJpbmdbXQoKICBleHBvcnQgdHlwZSBVbml0VHlwZVNob3J0ID0gJ2QnIHwgJ0QnIHwgJ00nIHwgJ3knIHwgJ2gnIHwgJ20nIHwgJ3MnIHwgJ21zJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmcgPSAnbWlsbGlzZWNvbmQnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICdkYXRlJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmdQbHVyYWwgPSAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB8ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnbW9udGhzJyB8ICd5ZWFycycgfCAnZGF0ZXMnCiAgCiAgZXhwb3J0IHR5cGUgVW5pdFR5cGUgPSBVbml0VHlwZUxvbmcgfCBVbml0VHlwZUxvbmdQbHVyYWwgfCBVbml0VHlwZVNob3J0OwoKICBleHBvcnQgdHlwZSBPcFVuaXRUeXBlID0gVW5pdFR5cGUgfCAid2VlayIgfCAid2Vla3MiIHwgJ3cnOwogIGV4cG9ydCB0eXBlIFFVbml0VHlwZSA9IFVuaXRUeXBlIHwgInF1YXJ0ZXIiIHwgInF1YXJ0ZXJzIiB8ICdRJzsKICBleHBvcnQgdHlwZSBNYW5pcHVsYXRlVHlwZSA9IEV4Y2x1ZGU8T3BVbml0VHlwZSwgJ2RhdGUnIHwgJ2RhdGVzJz47CiAgY2xhc3MgRGF5anMgewogICAgY29uc3RydWN0b3IgKGNvbmZpZz86IENvbmZpZ1R5cGUpCiAgICAvKioKICAgICAqIEFsbCBEYXkuanMgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBTdGlsbCwgYGRheWpzI2Nsb25lYCBjYW4gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGlmIHlvdSBuZWVkIG9uZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5jbG9uZSgpLy8gPT4gRGF5anMKICAgICAqIGRheWpzKGRheWpzKCcyMDE5LTAxLTI1JykpIC8vIHBhc3NpbmcgYSBEYXlqcyBvYmplY3QgdG8gYSBjb25zdHJ1Y3RvciB3aWxsIGFsc28gY2xvbmUgaXQKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvZGF5anMtY2xvbmUKICAgICAqLwogICAgY2xvbmUoKTogRGF5anMKICAgIC8qKgogICAgICogVGhpcyByZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBjb250YWlucyBhIHZhbGlkIGRhdGUgb3Igbm90LgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzVmFsaWQoKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvaXMtdmFsaWQKICAgICAqLwogICAgaXNWYWxpZCgpOiBib29sZWFuCiAgICAvKioKICAgICAqIEdldCB0aGUgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS55ZWFyKCkvLyA9PiAyMDIwCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHllYXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkueWVhcigyMDAwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1vbnRoLgogICAgICoKICAgICAqIE1vbnRocyBhcmUgemVybyBpbmRleGVkLCBzbyBKYW51YXJ5IGlzIG1vbnRoIDAuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubW9udGgoKS8vID0+IDAtMTEKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9tb250aAogICAgICovCiAgICBtb250aCgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBtb250aC4KICAgICAqCiAgICAgKiBNb250aHMgYXJlIHplcm8gaW5kZXhlZCwgc28gSmFudWFyeSBpcyBtb250aCAwLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgdG8gMTEuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5tb250aCgwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbW9udGgKICAgICAqLwogICAgbW9udGgodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZGF0ZSgpLy8gPT4gMS0zMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RhdGUKICAgICAqLwogICAgZGF0ZSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRlIG9mIHRoZSBtb250aC4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAxIHRvIDMxLiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1vbnRocy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXRlKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9kYXRlCiAgICAgKi8KICAgIGRhdGUodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLgogICAgICoKICAgICAqIFJldHVybnMgbnVtYmVycyBmcm9tIDAgKFN1bmRheSkgdG8gNiAoU2F0dXJkYXkpLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmRheSgpLy8gMC02CiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvZGF5CiAgICAgKi8KICAgIGRheSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCAoU3VuZGF5KSB0byA2IChTYXR1cmRheSkuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gbmV4dCB3ZWVrcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXkoMCkvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RheQogICAgICovCiAgICBkYXkodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgaG91ci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5ob3VyKCkvLyA9PiAwLTIzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvaG91cgogICAgICovCiAgICBob3VyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGhvdXIuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byAyMy4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBkYXkuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaG91cigxMikvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2hvdXIKICAgICAqLwogICAgaG91cih2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW51dGVzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbnV0ZSgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbnV0ZQogICAgICovCiAgICBtaW51dGUoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgbWludXRlcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IGhvdXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubWludXRlKDU5KS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbWludXRlCiAgICAgKi8KICAgIG1pbnV0ZSh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2V0IHRoZSBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNlY29uZCgpLy8gPT4gMC01OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NlY29uZAogICAgICovCiAgICBzZWNvbmQoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDU5LiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1pbnV0ZXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc2Vjb25kKDEpLy8gRGF5anMKICAgICAqIGBgYAogICAgICovCiAgICBzZWNvbmQodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKCkvLyA9PiAwLTk5OQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbGxpc2Vjb25kCiAgICAgKi8KICAgIG1pbGxpc2Vjb25kKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAwIHRvIDk5OS4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBzZWNvbmRzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbGxpc2Vjb25kKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9taWxsaXNlY29uZAogICAgICovCiAgICBtaWxsaXNlY29uZCh2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogR2VuZXJpYyBzZXR0ZXIsIGFjY2VwdGluZyB1bml0IGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgdmFsdWUgYXMgc2Vjb25kLCByZXR1cm5zIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGFwcGxpZWQgY2hhbmdlcy4KICAgICAqCiAgICAgKiBJbiBnZW5lcmFsOgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCh1bml0LCB2YWx1ZSkgPT09IGRheWpzKClbdW5pdF0odmFsdWUpCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNldCgnZGF0ZScsIDEpCiAgICAgKiBkYXlqcygpLnNldCgnbW9udGgnLCAzKSAvLyBBcHJpbAogICAgICogZGF5anMoKS5zZXQoJ3NlY29uZCcsIDMwKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L3NldAogICAgICovCiAgICBzZXQodW5pdDogVW5pdFR5cGUsIHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBTdHJpbmcgZ2V0dGVyLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGluZm9ybWF0aW9uIGdldHRpbmcgZnJvbSBEYXkuanMgb2JqZWN0LgogICAgICoKICAgICAqIEluIGdlbmVyYWw6CiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KHVuaXQpID09PSBkYXlqcygpW3VuaXRdKCkKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZ2V0KCd5ZWFyJykKICAgICAqIGRheWpzKCkuZ2V0KCdtb250aCcpIC8vIHN0YXJ0IDAKICAgICAqIGRheWpzKCkuZ2V0KCdkYXRlJykKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9nZXQKICAgICAqLwogICAgZ2V0KHVuaXQ6IFVuaXRUeXBlKTogbnVtYmVyCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbG9uZWQgRGF5LmpzIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIGFkZGVkLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmFkZCg3LCAnZGF5JykvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL2FkZAogICAgICovCiAgICBhZGQodmFsdWU6IG51bWJlciwgdW5pdD86IE1hbmlwdWxhdGVUeXBlKTogRGF5anMKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsb25lZCBEYXkuanMgb2JqZWN0IHdpdGggYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgc3VidHJhY3RlZC4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5zdWJ0cmFjdCg3LCAneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdWJ0cmFjdAogICAgICovCiAgICBzdWJ0cmFjdCh2YWx1ZTogbnVtYmVyLCB1bml0PzogTWFuaXB1bGF0ZVR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgc3RhcnQgb2YgYSB1bml0IG9mIHRpbWUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc3RhcnRPZigneWVhcicpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9zdGFydC1vZgogICAgICovCiAgICBzdGFydE9mKHVuaXQ6IE9wVW5pdFR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3QgYW5kIHNldCBpdCB0byB0aGUgZW5kIG9mIGEgdW5pdCBvZiB0aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmVuZE9mKCdtb250aCcpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9lbmQtb2YKICAgICAqLwogICAgZW5kT2YodW5pdDogT3BVbml0VHlwZSk6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZm9ybWF0dGVkIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBzdHJpbmcgb2YgdG9rZW5zIHBhc3NlZCBpbi4KICAgICAqCiAgICAgKiBUbyBlc2NhcGUgY2hhcmFjdGVycywgd3JhcCB0aGVtIGluIHNxdWFyZSBicmFja2V0cyAoZS5nLiBbTU1dKS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5mb3JtYXQoKS8vID0+IGN1cnJlbnQgZGF0ZSBpbiBJU084NjAxLCB3aXRob3V0IGZyYWN0aW9uIHNlY29uZHMgZS5nLiAnMjAyMC0wNC0wMlQwODowMjoxNy0wNTowMCcKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZm9ybWF0KCdbWVlZWWVzY2FwZV0gWVlZWS1NTS1ERFRISDptbTpzc1pbWl0nKS8vICdZWVlZZXNjYXBlIDIwMTktMDEtMjVUMDA6MDA6MDAtMDI6MDBaJwogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS5mb3JtYXQoJ0REL01NL1lZWVknKSAvLyAnMjUvMDEvMjAxOScKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9mb3JtYXQKICAgICAqLwogICAgZm9ybWF0KHRlbXBsYXRlPzogc3RyaW5nKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGUtdGltZSBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgKgogICAgICogVG8gZ2V0IHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcywgdXNlIGBkYXlqcyNkaWZmYAogICAgICogYGBgCiAgICAgKiBjb25zdCBkYXRlMSA9IGRheWpzKCcyMDE5LTAxLTI1JykKICAgICAqIGNvbnN0IGRhdGUyID0gZGF5anMoJzIwMTgtMDYtMDUnKQogICAgICogZGF0ZTEuZGlmZihkYXRlMikgLy8gMjAyMTQwMDAwMDAgZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGRhdGUxLmRpZmYoKSAvLyBtaWxsaXNlY29uZHMgdG8gY3VycmVudCB0aW1lCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBUbyBnZXQgdGhlIGRpZmZlcmVuY2UgaW4gYW5vdGhlciB1bml0IG9mIG1lYXN1cmVtZW50LCBwYXNzIHRoYXQgbWVhc3VyZW1lbnQgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KICAgICAqIGBgYAogICAgICogY29uc3QgZGF0ZTEgPSBkYXlqcygnMjAxOS0wMS0yNScpCiAgICAgKiBkYXRlMS5kaWZmKCcyMDE4LTA2LTA1JywgJ21vbnRoJykgLy8gNwogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RpZmZlcmVuY2UKICAgICAqLwogICAgZGlmZihkYXRlPzogQ29uZmlnVHlwZSwgdW5pdD86IFFVbml0VHlwZSB8IE9wVW5pdFR5cGUsIGZsb2F0PzogYm9vbGVhbik6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiAqKm1pbGxpc2Vjb25kcyoqIHNpbmNlIHRoZSBVbml4IEVwb2NoIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnZhbHVlT2YoKSAvLyAxNTQ4MzgxNjAwMDAwCiAgICAgKiArZGF5anMoMTU0ODM4MTYwMDAwMCkgLy8gMTU0ODM4MTYwMDAwMAogICAgICogYGBgCiAgICAgKiBUbyBnZXQgYSBVbml4IHRpbWVzdGFtcCAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCkgZnJvbSBhIERheS5qcyBvYmplY3QsIHlvdSBzaG91bGQgdXNlIFVuaXggVGltZXN0YW1wIGBkYXlqcyN1bml4KClgLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvdW5peC10aW1lc3RhbXAtbWlsbGlzZWNvbmRzCiAgICAgKi8KICAgIHZhbHVlT2YoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRoaXMgcmV0dXJucyB0aGUgVW5peCB0aW1lc3RhbXAgKHRoZSBudW1iZXIgb2YgKipzZWNvbmRzKiogc2luY2UgdGhlIFVuaXggRXBvY2gpIG9mIHRoZSBEYXkuanMgb2JqZWN0LgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnVuaXgoKSAvLyAxNTQ4MzgxNjAwCiAgICAgKiBgYGAKICAgICAqIFRoaXMgdmFsdWUgaXMgZmxvb3JlZCB0byB0aGUgbmVhcmVzdCBzZWNvbmQsIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGEgbWlsbGlzZWNvbmRzIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L3VuaXgtdGltZXN0YW1wCiAgICAgKi8KICAgIHVuaXgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZGF5c0luTW9udGgoKSAvLyAzMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2RheXMtaW4tbW9udGgKICAgICAqLwogICAgZGF5c0luTW9udGgoKTogbnVtYmVyCiAgICAvKioKICAgICAqIFRvIGdldCBhIGNvcHkgb2YgdGhlIG5hdGl2ZSBgRGF0ZWAgb2JqZWN0IHBhcnNlZCBmcm9tIHRoZSBEYXkuanMgb2JqZWN0IHVzZSBgZGF5anMjdG9EYXRlYC4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS50b0RhdGUoKS8vID0+IERhdGUKICAgICAqIGBgYAogICAgICovCiAgICB0b0RhdGUoKTogRGF0ZQogICAgLyoqCiAgICAgKiBUbyBzZXJpYWxpemUgYXMgYW4gSVNPIDg2MDEgc3RyaW5nLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnRvSlNPTigpIC8vICcyMDE5LTAxLTI1VDAyOjAwOjAwLjAwMFonCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtanNvbgogICAgICovCiAgICB0b0pTT04oKTogc3RyaW5nCiAgICAvKioKICAgICAqIFRvIGZvcm1hdCBhcyBhbiBJU08gODYwMSBzdHJpbmcuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9JU09TdHJpbmcoKSAvLyAnMjAxOS0wMS0yNVQwMjowMDowMC4wMDBaJwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2FzLWlzby1zdHJpbmcKICAgICAqLwogICAgdG9JU09TdHJpbmcoKTogc3RyaW5nCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9TdHJpbmcoKSAvLyAnRnJpLCAyNSBKYW4gMjAxOSAwMjowMDowMCBHTVQnCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvYXMtc3RyaW5nCiAgICAgKi8KICAgIHRvU3RyaW5nKCk6IHN0cmluZwogICAgLyoqCiAgICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgaW4gbWludXRlcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS51dGNPZmZzZXQoKQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9tYW5pcHVsYXRlL3V0Yy1vZmZzZXQKICAgICAqLwogICAgdXRjT2Zmc2V0KCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBEYXkuanMgb2JqZWN0IGlzIGJlZm9yZSB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQmVmb3JlKGRheWpzKCcyMDExLTAxLTAxJykpIC8vIGRlZmF1bHQgbWlsbGlzZWNvbmRzCiAgICAgKiBgYGAKICAgICAqIElmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBncmFudWxhcml0eSB0byBhIHVuaXQgb3RoZXIgdGhhbiBtaWxsaXNlY29uZHMsIHBhc3MgaXQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNCZWZvcmUoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1iZWZvcmUKICAgICAqLwogICAgaXNCZWZvcmUoZGF0ZT86IENvbmZpZ1R5cGUsIHVuaXQ/OiBPcFVuaXRUeXBlKTogYm9vbGVhbgogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBEYXkuanMgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvdGhlciBzdXBwbGllZCBkYXRlLXRpbWUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNTYW1lKGRheWpzKCcyMDExLTAxLTAxJykpIC8vIGRlZmF1bHQgbWlsbGlzZWNvbmRzCiAgICAgKiBgYGAKICAgICAqIElmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBncmFudWxhcml0eSB0byBhIHVuaXQgb3RoZXIgdGhhbiBtaWxsaXNlY29uZHMsIHBhc3MgaXQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNTYW1lKCcyMDExLTAxLTAxJywgJ3llYXInKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcXVlcnkvaXMtc2FtZQogICAgICovCiAgICBpc1NhbWUoZGF0ZT86IENvbmZpZ1R5cGUsIHVuaXQ/OiBPcFVuaXRUeXBlKTogYm9vbGVhbgogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBEYXkuanMgb2JqZWN0IGlzIGFmdGVyIHRoZSBvdGhlciBzdXBwbGllZCBkYXRlLXRpbWUuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaXNBZnRlcihkYXlqcygnMjAxMS0wMS0wMScpKSAvLyBkZWZhdWx0IG1pbGxpc2Vjb25kcwogICAgICogYGBgCiAgICAgKiBJZiB5b3Ugd2FudCB0byBsaW1pdCB0aGUgZ3JhbnVsYXJpdHkgdG8gYSB1bml0IG90aGVyIHRoYW4gbWlsbGlzZWNvbmRzLCBwYXNzIGl0IGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQWZ0ZXIoJzIwMTEtMDEtMDEnLCAneWVhcicpLy8gPT4gYm9vbGVhbgogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9xdWVyeS9pcy1hZnRlcgogICAgICovCiAgICBpc0FmdGVyKGRhdGU/OiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KCiAgICBsb2NhbGUoKTogc3RyaW5nCgogICAgbG9jYWxlKHByZXNldDogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPik6IERheWpzCiAgfQoKICBleHBvcnQgdHlwZSBQbHVnaW5GdW5jPFQgPSB1bmtub3duPiA9IChvcHRpb246IFQsIGM6IHR5cGVvZiBEYXlqcywgZDogdHlwZW9mIGRheWpzKSA9PiB2b2lkCgogIGV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCA9IHVua25vd24+KHBsdWdpbjogUGx1Z2luRnVuYzxUPiwgb3B0aW9uPzogVCk6IERheWpzCgogIGV4cG9ydCBmdW5jdGlvbiBsb2NhbGUocHJlc2V0Pzogc3RyaW5nIHwgSUxvY2FsZSwgb2JqZWN0PzogUGFydGlhbDxJTG9jYWxlPiwgaXNMb2NhbD86IGJvb2xlYW4pOiBzdHJpbmcKCiAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF5anMoZDogYW55KTogZCBpcyBEYXlqcwoKICBleHBvcnQgZnVuY3Rpb24gdW5peCh0OiBudW1iZXIpOiBEYXlqcwoKICBjb25zdCBMcyA6IHsgW2tleTogc3RyaW5nXSA6ICBJTG9jYWxlIH0KfQo=';\nexport const JSONPATH_BASE64 = 'Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IganNvbnBhdGggMC4yLjExDQovLyBQcm9qZWN0OiBodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9qc29ucGF0aA0KLy8gRGVmaW5pdGlvbnMgYnk6IEhpcm9raSBIb3JpdWNoaSA8aHR0cHM6Ly9naXRodWIuY29tL2hvcml1Y2hpPiwgSWthIDxodHRwczovL2dpdGh1Yi5jb20vaWthdHlhbmc+DQovLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQNCg0KdHlwZSBQYXRoQ29tcG9uZW50ID0gc3RyaW5nIHwgbnVtYmVyOw0KDQovKioNCiAqIEZpbmQgZWxlbWVudHMgaW4gYG9iamAgbWF0Y2hpbmcgYHBhdGhFeHByZXNzaW9uYC4gUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0DQogKiBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLG9yIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgd2VyZSBtYXRjaGVkLg0KICogUmV0dXJucyBvbmx5IGZpcnN0IGBjb3VudGAgZWxlbWVudHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBxdWVyeShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBhbnlbXTsNCg0KLyoqDQogKiBGaW5kIHBhdGhzIHRvIGVsZW1lbnRzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuIFJldHVybnMgYW4gYXJyYXkgb2YNCiAqIGVsZW1lbnQgcGF0aHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uLiBFYWNoIHBhdGggaXMgaXRzZWxmIGFuDQogKiBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gd2l0aGluIGBvYmpgIG9mIHRoZSBtYXRjaGluZyBlbGVtZW50LiBSZXR1cm5zDQogKiBvbmx5IGZpcnN0IGBjb3VudGAgcGF0aHMgaWYgc3BlY2lmaWVkLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXRocyhvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBQYXRoQ29tcG9uZW50W11bXTsNCg0KLyoqDQogKiBGaW5kIGVsZW1lbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBhdGhzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuDQogKiBSZXR1cm5zIGFuIGFycmF5IG9mIG5vZGUgb2JqZWN0cyB3aGVyZSBlYWNoIG5vZGUgaGFzIGEgYHBhdGhgIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YNCiAqIGtleXMgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiB3aXRoaW4gYG9iamAsIGFuZCBhIGB2YWx1ZWAgcG9pbnRpbmcgdG8gdGhlIG1hdGNoZWQNCiAqIGVsZW1lbnQuIFJldHVybnMgb25seSBmaXJzdCBgY291bnRgIG5vZGVzIGlmIHNwZWNpZmllZC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm9kZXMob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcsIGNvdW50PzogbnVtYmVyKTogeyBwYXRoOiBQYXRoQ29tcG9uZW50W107IHZhbHVlOiBhbnk7IH1bXTsNCg0KLyoqDQogKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyBgcGF0aEV4cHJlc3Npb25gLiBJZiBgbmV3VmFsdWVgIGlzDQogKiBwcm92aWRlZCwgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWUob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnk7DQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWx1ZTxUPihvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgbmV3VmFsdWU6IFQpOiBUOw0KDQovKioNCiAqIFJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyZW50KG9iajogYW55LCBwYXRoRXhwcmVzc2lvbjogc3RyaW5nKTogYW55Ow0KDQovKioNCiAqIFJ1bnMgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIGBmbmAgb24gZWFjaCBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmVwbGFjZXMgZWFjaA0KICogbWF0Y2hpbmcgZWxlbWVudCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZQ0KICogdmFsdWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgYXMgaXRzIG9ubHkgcGFyYW1ldGVyLiBSZXR1cm5zIG1hdGNoaW5nIG5vZGVzIHdpdGgNCiAqIHRoZWlyIHVwZGF0ZWQgdmFsdWVzLg0KICovDQpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgZm46ICh4OiBhbnkpID0+IGFueSk6IHsgcGF0aDogUGF0aENvbXBvbmVudFtdOyB2YWx1ZTogYW55OyB9W107DQoNCi8qKg0KICogUGFyc2UgdGhlIHByb3ZpZGVkIEpTT05QYXRoIGV4cHJlc3Npb24gaW50byBwYXRoIGNvbXBvbmVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQNCiAqIG9wZXJhdGlvbnMuDQogKi8NCmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlKHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnlbXTsNCg0KLyoqDQogKiBSZXR1cm5zIGEgcGF0aCBleHByZXNzaW9uIGluIHN0cmluZyBmb3JtLCBnaXZlbiBhIHBhdGguIFRoZSBzdXBwbGllZCBwYXRoIG1heSBlaXRoZXINCiAqIGJlIGEgZmxhdCBhcnJheSBvZiBrZXlzLCBhcyByZXR1cm5lZCBieSBganAubm9kZXNgIGZvciBleGFtcGxlLCBvciBtYXkgYWx0ZXJuYXRpdmVseSBiZSBhDQogKiBmdWxseSBwYXJzZWQgcGF0aCBleHByZXNzaW9uIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5IG9mIHBhdGggY29tcG9uZW50cyBhcyByZXR1cm5lZA0KICogYnkgYGpwLnBhcnNlYC4NCiAqLw0KZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaW5naWZ5KHBhdGg6IFBhdGhDb21wb25lbnRbXSk6IHN0cmluZzsNCg0KZXhwb3J0IGFzIG5hbWVzcGFjZSBqc29ucGF0aDsNCg==';\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createDefaultMapFromNodeModules, createDefaultMapFromCDN } from '@typescript/vfs';\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from '@typescript/twoslash';\nimport { ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptCompilationContext } from './TypeScriptCompilationContext';\nimport { DAYJS_BASE64, JSONPATH_BASE64 } from './runtime/declarations';\nimport * as lzstring from 'lz-string';\n\n/**\n * Compiles user Typescript code to JavaScript. This uses the '@typescript/twoslash'\n * project which is maintained by the Typescript team and powers their web playground.\n * It uses the TypeScriptCompilationContext class to construct a payload for twoslash\n * that is composed of multiple TS files to compile, along with their 3rd-party module\n * dependencies.\n *\n * Note that the 'typescript' module is either dynamically loaded from node_modules (Node.js)\n * or from the CDN (browser). This module is used by twoslash.\n *\n * The 'updateRuntimeDependencies' script it used to package type declarations for 3rd-party\n * modules that we need to expose to user TS code: dayjs and jsonpath, these also need to be\n * added to the twoslash compilation context.\n */\nconst TYPESCRIPT_URL = process.env.TYPESCRIPT_URL ? process.env.TYPESCRIPT_URL : 'https://cdn.jsdelivr.net/npm/typescript@4.8.4/+esm';\n\n// https://microsoft.github.io/monaco-editor/typedoc/enums/languages.typescript.ScriptTarget.html#ES2020\nconst ES2020_TARGET = 7;\n\nexport class TypeScriptToJavaScriptCompiler {\n context: string;\n fsMap: Map<string,string>|undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ts: any;\n typescriptUrl: string;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.context = new TypeScriptCompilationContext(modelManager, templateConceptFqn).getCompilationContext();\n this.typescriptUrl = TYPESCRIPT_URL;\n }\n\n async initialize(typescriptUrl?: string) {\n if(typescriptUrl) {\n this.typescriptUrl = typescriptUrl;\n }\n if(typeof window === 'undefined') {\n // node does not (yet) support http(s) imports\n // see: https://nodejs.org/api/esm.html#https-and-http-imports\n this.ts = await import ('typescript');\n if(!this.ts) {\n throw new Error('Failed to load typescript module');\n }\n this.fsMap = createDefaultMapFromNodeModules({\n target: ES2020_TARGET,\n });\n }\n else {\n this.ts = (await import(this.typescriptUrl)).default;\n if(!this.ts) {\n throw new Error('Failed to dynamically load typescript');\n }\n this.fsMap = await createDefaultMapFromCDN({ target: ES2020_TARGET }, this.ts.version, false, this.ts);\n }\n this.fsMap.set('/node_modules/@types/dayjs/index.d.ts', Buffer.from(DAYJS_BASE64, 'base64').toString());\n this.fsMap.set('/node_modules/@types/jsonpath/index.d.ts', Buffer.from(JSONPATH_BASE64, 'base64').toString());\n }\n\n compile(typescript: string): TwoSlashReturn {\n if(!this.fsMap) {\n throw new Error('initialize must be awaited before compile is called.');\n }\n const twoSlashCode =`\n${this.context}\n${typescript}\n`;\n\n const options: TwoSlashOptions = {\n fsMap: this.fsMap,\n tsModule: this.ts,\n lzstringModule:lzstring,\n defaultOptions: {\n showEmit: true,\n noErrorValidation: true,\n showEmittedFile: 'code.js'\n }\n };\n const result = twoslasher(twoSlashCode, 'ts', options);\n return result;\n }\n}","/* eslint-disable @typescript-eslint/no-empty-interface */\n// Generated code for namespace: org.accordproject.templatemark@0.5.0\n\n// imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\nimport {IChild,INode} from './org.accordproject.commonmark@0.5.0';\nimport {IDecorator} from './concerto.metamodel@1.0.0';\nimport {IConcept} from './concerto@1.0.0';\n\n// interfaces\nexport enum CodeType {\n TYPESCRIPT = 'TYPESCRIPT',\n ES_2020 = 'ES_2020',\n}\n\nexport interface ICode extends IConcept {\n type: CodeType;\n contents: string;\n}\n\nexport interface IElementDefinition extends IChild {\n name: string;\n elementType?: string;\n decorators?: IDecorator[];\n}\n\nexport type ElementDefinitionUnion = IVariableDefinition | \nIFormulaDefinition | \nIBlockDefinition;\n\nexport interface IVariableDefinition extends IElementDefinition {\n identifiedBy?: string;\n}\n\nexport type VariableDefinitionUnion = IFormattedVariableDefinition | \nIEnumVariableDefinition;\n\nexport interface IFormattedVariableDefinition extends IVariableDefinition {\n format: string;\n}\n\nexport interface IEnumVariableDefinition extends IVariableDefinition {\n enumValues: string[];\n}\n\nexport interface IFormulaDefinition extends IElementDefinition {\n dependencies?: string[];\n code: ICode;\n}\n\nexport interface IBlockDefinition extends IElementDefinition {\n}\n\nexport type BlockDefinitionUnion = IClauseDefinition | \nIContractDefinition | \nIWithDefinition | \nIConditionalDefinition | \nIOptionalDefinition | \nIJoinDefinition | \nIListBlockDefinition | \nIForeachBlockDefinition | \nIWithBlockDefinition | \nIConditionalBlockDefinition | \nIOptionalBlockDefinition;\n\nexport interface IClauseDefinition extends IBlockDefinition {\n condition?: ICode;\n}\n\nexport interface IContractDefinition extends IBlockDefinition {\n}\n\nexport interface IWithDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n dependencies?: string[];\n}\n\nexport interface IOptionalDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\nexport interface IJoinDefinition extends IBlockDefinition {\n separator?: string;\n locale?: string;\n type?: string;\n style?: string;\n}\n\nexport interface IListBlockDefinition extends IBlockDefinition {\n type: string;\n tight: string;\n start?: string;\n delimiter?: string;\n}\n\nexport interface IForeachBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IWithBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalBlockDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n}\n\nexport interface IOptionalBlockDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport traverse from 'traverse';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';\nimport { TwoSlashReturn } from '@typescript/twoslash';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { getTemplateClassDeclaration, nameUserCode, writeFunctionToString } from './utils';\n\nconst CODE_NODES = [\n `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`,\n];\n\nexport type CompilerError = {\n nodeId: string;\n code: string;\n errors:TwoSlashReturn['errors'];\n};\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.TYPESCRIPT) {\n throw new Error(`Cannot compile ${code.contents} as it is not Typescript.`);\n }\n}\n\n/**\n * Compiles all the Typescript nodes in a TemplateMark JSON\n * to ES_2020 and returns a modified TemplateMark JSON.\n */\nexport class TemplateMarkToJavaScriptCompiler {\n modelManager:ModelManager;\n compiler: TypeScriptToJavaScriptCompiler;\n templateClass: ClassDeclaration;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.compiler = new TypeScriptToJavaScriptCompiler(modelManager,templateConceptFqn);\n this.templateClass = getTemplateClassDeclaration(modelManager,templateConceptFqn);\n }\n\n async initialize() {\n await this.compiler.initialize();\n }\n\n compile(templateJson: any) : any {\n const namedTemplateMark = nameUserCode(templateJson);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const errors = Array<CompilerError>();\n const compiled = traverse(namedTemplateMark).map(function (x) {\n if (x && CODE_NODES.includes(x.$class)) {\n if (x.code) { // formula\n checkCode(x.code);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.name, 'any', x.code.contents));\n if(result.errors.length === 0) {\n x.code.contents = result.code;\n x.code.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.name,\n code: x.code.contents,\n errors: result.errors\n });\n }\n }\n else if (x.condition) { // condition or clause (boolean condition)\n checkCode(x.condition);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.functionName, 'boolean', x.condition.contents));\n if(result.errors.length === 0) {\n x.condition.contents = result.code;\n x.condition.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.functionName,\n code: x.condition.contents,\n errors: result.errors\n });\n }\n }\n }\n });\n\n if(errors.length === 0) {\n return compiled;\n }\n else {\n throw errors;\n }\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEBUG = false;\n\n// BEWARE adding imports to this file\n// as it is used by the static code generator\n\n/**\n * BEWARE - this type is duplicated in TypeScriptCompilationContext\n * for use by code generation\n */\nexport type GenerationOptions = {\n now?:string,\n locale?:string\n disableJavaScriptEvaluation?:boolean\n}\n\nexport function joinList(data:Array<string>, joinDef:any, options?:GenerationOptions) : string {\n if(joinDef.separator) {\n return data.join(joinDef.separator);\n }\n else {\n const formatter = new Intl.ListFormat( joinDef.locale ? joinDef.locale : options?.locale,\n {\n style: (joinDef.style as Intl.ListFormatStyle),\n type: (joinDef.type as Intl.ListFormatType)\n }\n );\n return formatter.format(data);\n }\n}\n\n/**\n * These utility functions are used by the typescript code that\n * is generated from TemplateMark. They manage a stack to improve\n * debuggability.\n */\n\nfunction dump(op:string, $data:any[]) {\n if(DEBUG) {\n console.log(`${op}: ${JSON.stringify($data)}`);\n }\n}\n\nexport function peek($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data[$data.length-1];\n dump('peek', $data);\n return result;\n}\n\nexport function peekProperty($data:any[], propertyName:string, allowUndefined=false) : any {\n const head = peek($data);\n const result = head[propertyName];\n if(!allowUndefined && result === undefined) {\n throw new Error(`Undefined property ${propertyName}. Current stack is ${JSON.stringify($data)}`);\n }\n return result;\n}\n\nexport function push($data:any[], item:any) : number {\n const result = $data.push(item);\n dump('push', $data);\n return result;\n}\n\nexport function addChild($data:any[], item:any) {\n const node = peek($data);\n node.nodes ? node.nodes.push(item) : node.nodes = [item];\n}\n\nexport function pop($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data.pop();\n dump('pop', $data);\n return result;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport jp from 'jsonpath';\nimport traverse from 'traverse';\n\nimport { ClassDeclaration, Factory, Introspector, ModelManager, Serializer } from '@accordproject/concerto-core';\nimport { getDrafter } from './drafting';\nimport { TemplateMarkModel, CommonMarkModel, CiceroMarkModel, ConcertoMetaModel } from '@accordproject/markdown-common';\nimport { ModelUtil } from '@accordproject/concerto-core';\n\nimport {\n TEMPLATEMARK_RE,\n FORMULA_DEFINITION_RE,\n VARIABLE_DEFINITION_RE,\n CONDITIONAL_DEFINITION_RE,\n ENUM_VARIABLE_DEFINITION_RE,\n FORMATTED_VARIABLE_DEFINITION_RE,\n WITH_DEFINITION_RE,\n LISTBLOCK_DEFINITION_RE,\n JOIN_DEFINITION_RE,\n OPTIONAL_DEFINITION_RE,\n CLAUSE_DEFINITION_RE,\n CONTRACT_DEFINITION_RE,\n TemplateData,\n NAVIGATION_NODES\n} from './TemplateMarkNodes';\nimport { TemplateMarkToJavaScriptCompiler } from './TemplateMarkToJavaScriptCompiler';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { GenerationOptions, joinList } from './TypeScriptRuntime';\nimport dayjs from 'dayjs';\nimport { getTemplateClassDeclaration } from './utils';\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.ES_2020) {\n throw new Error(`Cannot run ${code.contents} as it is not ES_2020 JavaScript.`);\n }\n}\n\n/**\n * Evaluates a JS expression\n * @param {*} clauseLibrary the clause library\n * @param {*} data the contract data\n * @param {string} fn the JS function (including header)\n * @param {GenerationOptions} options the generation options\n * @returns {object} the result of evaluating the expression against the data\n */\nfunction evaluateJavaScript(clauseLibrary:object, data: TemplateData, fn: string, options?: GenerationOptions): object {\n if(options?.disableJavaScriptEvaluation) {\n throw new Error('JavaScript evaluation is disabled.');\n }\n if (!data || !fn) {\n throw new Error(`Cannot evaluate JS ${fn} against ${data}`);\n }\n const functionArgNames = new Array<string>();\n functionArgNames.push('data');\n functionArgNames.push('library');\n functionArgNames.push('options');\n functionArgNames.push('dayjs');\n functionArgNames.push('jp');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const functionArgValues = new Array<any>();\n functionArgValues.push(data);\n functionArgValues.push(clauseLibrary);\n functionArgValues.push(options);\n functionArgValues.push(dayjs);\n functionArgValues.push(jp);\n\n // chop the function header and closing\n const expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));\n if(expression.trim().length === 0) {\n throw new Error('Empty expression');\n }\n try {\n const fun = new Function(...functionArgNames, expression); // SECURITY!\n const result = fun(...functionArgValues);\n return result;\n }\n catch(err) {\n throw new Error(`Caught error ${err} evaluating ${expression} with arguments ${functionArgValues}`);\n }\n}\n\n/**\n * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.\n * For example, if we hit a VariableDefinition {{city}} that is nested inside a\n * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.\n * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include\n * property names that must apply to their child nodes.\n * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON\n * @param {*} currentNode the current TemplateMark node we are processing\n * @param {string[]} paths the traverse path to the current node\n * @returns {string} the JSON path to use to retrieve data\n */\nfunction getJsonPath(rootData:any, currentNode:any, paths:string[]) : string {\n if(!currentNode) {\n throw new Error('Node must be supplied');\n }\n if(!currentNode.name) {\n throw new Error(`Node must have a name: ${JSON.stringify(currentNode)}`);\n }\n if(currentNode.name.indexOf('.') >=0) {\n // prevent JSON path injection\n throw new Error(`Invalid name property ${currentNode.name}`);\n }\n if(!paths || !paths.length || paths.length <1 ) {\n throw new Error('Paths must be supplied');\n }\n const withPath = [];\n for (let n = 1; n < paths.length; n++) {\n const sub = paths.slice(0, n);\n const obj = traverse.get(rootData, sub);\n // HACK\n // if(obj===undefined) {\n // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);\n // }\n if (obj && obj.$class) {\n if(NAVIGATION_NODES.indexOf(obj.$class) >= 0) {\n withPath.push(`['${obj.name}']`);\n }\n }\n }\n\n if(currentNode.name !== 'this') {\n withPath.push(`['${currentNode.name}']`);\n }\n\n return withPath.length > 0 ? `$${withPath.join('')}` : '$';\n}\n\n/**\n * Generates an AgreementMark JSON document from a template plus data.\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON\n */\nfunction generateAgreement(modelManager:ModelManager, clauseLibrary:object, templateMark: object, data: TemplateData, options?:GenerationOptions): any {\n const introspector = new Introspector(modelManager);\n return traverse(templateMark).map(function (context: any) {\n let stopHere = false;\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // rewrite node types, mapping from TemplateMark namespace to CiceroMark\n const match = nodeClass.match(TEMPLATEMARK_RE);\n if (match && match.length > 1) {\n context.$class = `${CiceroMarkModel.NAMESPACE}.${match[3]}`;\n }\n\n // convert a contract node to a clause note HACK\n if (CONTRACT_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // convert a WithDefinition to a Paragraph in the output\n // not 100% sure we want to do that ... we may need to process\n // the child variable nodes and reparent them?\n if (WITH_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // add a 'value' property to FormulaDefinition\n // with the result of evaluating the JS code\n else if (FORMULA_DEFINITION_RE.test(nodeClass)) {\n if (context.code) {\n checkCode(context.code);\n const result = evaluateJavaScript(clauseLibrary, data, context.code.contents, options);\n if(result === null) {\n context.value = '<null>';\n }\n else if(typeof result === 'string') {\n context.value = result;\n }\n else {\n context.value = JSON.stringify(result);\n }\n delete context.code;\n }\n else {\n throw new Error('Formula node is missing code.');\n }\n }\n\n // evaluate lists, recursing on each list item\n else if (LISTBLOCK_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.List`;\n delete context.elementType;\n delete context.name;\n context.nodes = arrayData.map( arrayItem => {\n // arrayItem is now the data for the nested traversal\n const subResult = generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem);\n return {\n $class: `${CommonMarkModel.NAMESPACE}.Item`,\n nodes: subResult.nodes ? subResult.nodes : []\n };\n });\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // map over an array of items, joining them into a Text node\n else if (JOIN_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n const arrayData = variableValues[0];\n if(!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.Text`;\n const drafter = getDrafter(context.elementType);\n context.text = joinList(arrayData.map( arrayItem => {\n return drafter ? drafter(arrayItem, context.format) : arrayItem as string;\n }), context, options);\n delete context.elementType;\n delete context.name;\n delete context.separator;\n delete context.locale;\n delete context.type;\n delete context.style;\n delete context.nodes;\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // add a 'value' property to VariableDefinition\n // with the value of the variable from 'data'\n else if (VARIABLE_DEFINITION_RE.test(nodeClass) ||\n ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||\n FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {\n if(typeof data === 'object') {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${data}.`);\n }\n else {\n // convert the value to a string, optionally using the formatter\n const variableValue = variableValues[0];\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n else {\n // a list of enum values or primitives brings us here\n const variableValue = data;\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n\n // add a 'isTrue' property to ConditionDefinition\n // with the result of evaluating the JS code or a boolean property\n else if (CONDITIONAL_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n context.isTrue = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n }\n else {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.isTrue = !!variableValues[0];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.isTrue = false;\n }\n }\n context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;\n delete context.condition;\n delete context.dependencies;\n delete context.functionName;\n }\n\n // only include the children of a clause if its condition is true\n else if (CLAUSE_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n const result = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options) as unknown as boolean;\n if(!result) {\n delete context.nodes;\n stopHere = true;\n }\n }\n delete context.condition;\n delete context.functionName;\n }\n\n // add a 'hasSome' property to OptionalDefinition\n else if (OPTIONAL_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if(variableValues.length === 1) {\n context.hasSome = true;\n context.whenNone = [];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.hasSome = false;\n context.whenSome = [];\n }\n context.nodes = context.hasSome ? context.whenSome : context.whenNone;\n }\n }\n this.update(context, stopHere);\n });\n}\n\n/**\n * A template engine: merges the markup and logic of a template with\n * JSON data to produce JSON data.\n */\nexport class TemplateMarkInterpreter {\n modelManager: ModelManager;\n templateClass: ClassDeclaration;\n clauseLibrary: object;\n\n constructor(modelManager: ModelManager, clauseLibrary:object, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.clauseLibrary = clauseLibrary;\n this.templateClass = getTemplateClassDeclaration(this.modelManager,templateConceptFqn);\n }\n\n /**\n * Checks that a TemplateMark JSON document is valid with respect to the\n * TemplateMark model, as well as the template model.\n *\n * Checks:\n * 1. Variable names are valid properties in the template model\n * 2. Optional properties have guards\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added\n * @throws {Error} if the templateMark document is invalid\n */\n checkTypes(templateMark: object): object {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(TemplateMarkModel.MODEL, 'templatemark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n serializer.fromJSON(templateMark);\n return templateMark;\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(templateMark, null, 2)}`);\n }\n }\n\n /**\n * Compiles the code nodes containing TS to code nodes containing JS.\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON with JS nodes\n * @throws {Error} if the templateMark document is invalid\n */\n async compileTypeScriptToJavaScript(templateMark: object) : Promise<object> {\n const templateConcept = (templateMark as any).nodes[0].elementType;\n if(!templateConcept) {\n throw new Error('TemplateMark is not typed');\n }\n const compiler = new TemplateMarkToJavaScriptCompiler(this.modelManager, templateConcept);\n await compiler.initialize();\n return compiler.compile(templateMark);\n }\n\n validateCiceroMark(ciceroMark: object) : object {\n const modelManager = new ModelManager({ strict: true });\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(CiceroMarkModel.MODEL, 'ciceromark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager);\n try {\n return serializer.fromJSON(ciceroMark);\n }\n catch(err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);\n }\n }\n\n async generate(templateMark: object, data: TemplateData, options?:GenerationOptions): Promise<any> {\n const factory = new Factory(this.modelManager);\n const serializer = new Serializer(factory, this.modelManager);\n const templateData = serializer.fromJSON(data);\n if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {\n throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);\n }\n const typedTemplateMark = this.checkTypes(templateMark);\n const jsTemplateMark = await this.compileTypeScriptToJavaScript(typedTemplateMark);\n const ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);\n return this.validateCiceroMark(ciceroMark);\n }\n}"],"names":["draftLongFormat","draftLong","CurrencyCode","TemplateMarkModel","existsSync","mkdirSync","rmSync","Introspector","templatemarkutil","CodeGen","InMemoryWriter","createDefaultMapFromNodeModules","createDefaultMapFromCDN","lzstring","twoslasher","CodeType","checkCode","CiceroMarkModel","CommonMarkModel","ModelUtil","ModelManager","ConcertoMetaModel","Factory","Serializer"],"mappings":"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"}
|