结论:新增 LinuxCNC WASM 驱动的真实浏览器仿真页面,接入 browser smoke、release gate、SDK 与项目交付文档,并完成当前推进批次的验收记录。
388 lines
20 KiB
HTML
388 lines
20 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>LinuxCNC INI Workflow Overview</title>
|
|
<style>
|
|
:root {
|
|
color-scheme: light;
|
|
--bg: #f2f5f8;
|
|
--panel: #ffffff;
|
|
--border: #cfd8e1;
|
|
--text: #17212b;
|
|
--muted: #5a6875;
|
|
--accent: #1366a6;
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
font-family: "Segoe UI", "Noto Sans", sans-serif;
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
}
|
|
main {
|
|
max-width: 960px;
|
|
margin: 0 auto;
|
|
padding: 24px;
|
|
display: grid;
|
|
gap: 16px;
|
|
}
|
|
.panel {
|
|
background: var(--panel);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
box-shadow: 0 10px 30px rgba(17, 34, 51, 0.06);
|
|
padding: 16px;
|
|
display: grid;
|
|
gap: 14px;
|
|
}
|
|
h1 {
|
|
margin: 0;
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
}
|
|
p {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font: 13px/1.5 "Segoe UI", "Noto Sans", sans-serif;
|
|
}
|
|
.overview-status {
|
|
border-top: 1px solid var(--border);
|
|
padding-top: 12px;
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
.overview-status dl {
|
|
margin: 0;
|
|
display: grid;
|
|
grid-template-columns: minmax(120px, 180px) 1fr;
|
|
gap: 6px 12px;
|
|
font: 13px/1.4 "Segoe UI", "Noto Sans", sans-serif;
|
|
}
|
|
.overview-status dt {
|
|
color: var(--muted);
|
|
}
|
|
.overview-status dd {
|
|
margin: 0;
|
|
color: var(--text);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<section class="panel">
|
|
<h1>LinuxCNC INI Workflow Overview</h1>
|
|
<p>Read-only shell handoff overview for mount, readonly status, and overall workflow readiness.</p>
|
|
<section class="overview-status" aria-label="Shell handoff workflow overview" data-handoff-workflow>
|
|
<p data-handoff-workflow-status>Checking shell handoff workflow summary.</p>
|
|
<dl data-handoff-workflow-rows></dl>
|
|
</section>
|
|
</section>
|
|
</main>
|
|
<script type="module">
|
|
import {
|
|
createIniPanelShellViewModel,
|
|
createIniPanelShellSessionHandoffWorkflowDomContract,
|
|
createIniPanelShellSessionHandoffWorkflowDomReadiness,
|
|
createIniPanelShellSessionHandoffWorkflowRenderState,
|
|
createIniPanelShellSessionReadinessWorkflowReport,
|
|
createIniPanelShellWorkflowOverviewContract,
|
|
createIniPanelShellWorkflowOverviewReadiness,
|
|
createIniPanelShellWorkflowOverviewEmbeddingReport,
|
|
createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel,
|
|
createIniPanelShellWorkflowOverviewEmbeddingRenderState,
|
|
createIniPanelShellWorkflowOverviewEmbeddingDomContract,
|
|
createIniPanelShellWorkflowOverviewEmbeddingDomReadiness,
|
|
mountIniPanelShellWorkflowOverviewEmbedding,
|
|
createMachineSessionPersistenceSummary,
|
|
renderIniPanelShellWorkflowOverviewEmbeddingState,
|
|
mountIniPanelShellWorkflowOverviewEmbeddingState,
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel,
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountRenderState,
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomContract,
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
|
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness,
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness,
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness,
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness,
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
|
renderIniPanelShellSessionHandoffWorkflowState,
|
|
mountIniPanelShellSessionHandoffWorkflow,
|
|
} from "./ui-shell.js";
|
|
|
|
const shellViewModel = createIniPanelShellViewModel();
|
|
const workflowRenderState = shellViewModel.shellSessionHandoffWorkflowRenderState;
|
|
renderIniPanelShellSessionHandoffWorkflowState(workflowRenderState, { documentRef: document });
|
|
|
|
window.linuxCncIniPanelWorkflowOverviewApi = {
|
|
getWorkflowOverviewRenderState: () => shellViewModel.shellSessionHandoffWorkflowRenderState,
|
|
getWorkflowOverviewDisplayViewModel: () => shellViewModel.shellSessionHandoffWorkflowDisplayViewModel,
|
|
getWorkflowOverviewSummary: () => shellViewModel.shellSessionHandoffWorkflowSummary,
|
|
getWorkflowOverviewSessionReadinessReport: (options) => (
|
|
createIniPanelShellSessionReadinessWorkflowReport(options ?? {
|
|
workflowSummary: shellViewModel.shellSessionHandoffWorkflowSummary,
|
|
})
|
|
),
|
|
getWorkflowOverviewApiSurfaceInventory: (options) => (
|
|
shellViewModel.createShellApiSurfaceInventory(options ?? {
|
|
launchApiManifest: shellViewModel.launchApiManifest,
|
|
controlPageApiManifest: shellViewModel.controlPage.browserApiManifest,
|
|
workflowOverviewContract: shellViewModel.shellWorkflowOverviewContract,
|
|
sessionReadinessWorkflowReport: shellViewModel.shellSessionReadinessWorkflowReport,
|
|
})
|
|
),
|
|
getWorkflowOverviewPersistenceSummary: (options) => (
|
|
createMachineSessionPersistenceSummary(options)
|
|
),
|
|
validateWorkflowOverviewReleaseReadinessArtifactJson: (artifactJson) => (
|
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson)
|
|
),
|
|
runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow: (options) => (
|
|
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel: (workflow) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(workflow)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan: (workflow) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(workflow)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState: (summaryViewModel) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(summaryViewModel)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
|
renderState,
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
loadWorkflowOverviewReleaseReadinessArtifactUrl: (options) => (
|
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel: (workflow) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(workflow)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan: (workflow) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(workflow)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState: (summaryViewModel) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(summaryViewModel)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
|
renderState,
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel: (validation) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(validation)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan: (validation) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(validation)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState: (actionPlan) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(actionPlan)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
|
renderState,
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel: (validation) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(validation)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel: (workflow) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(workflow)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState: (summaryViewModel) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(summaryViewModel)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
|
renderState,
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: (validation) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(validation)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactRenderState: (displayViewModel) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(displayViewModel)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract(options)
|
|
),
|
|
getWorkflowOverviewReleaseReadinessArtifactDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness(options ?? { documentRef: document })
|
|
),
|
|
renderWorkflowOverviewReleaseReadinessArtifactState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(renderState, options ?? { documentRef: document })
|
|
),
|
|
mountWorkflowOverviewReleaseReadinessArtifactState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(options ?? { documentRef: document })
|
|
),
|
|
getWorkflowOverviewDomContract: (options) => (
|
|
createIniPanelShellSessionHandoffWorkflowDomContract(options)
|
|
),
|
|
getWorkflowOverviewDomReadiness: (options) => (
|
|
createIniPanelShellSessionHandoffWorkflowDomReadiness(options ?? { documentRef: document })
|
|
),
|
|
renderWorkflowOverview: (renderState, options) => (
|
|
renderIniPanelShellSessionHandoffWorkflowState(
|
|
renderState ?? shellViewModel.shellSessionHandoffWorkflowRenderState,
|
|
options ?? { documentRef: document },
|
|
)
|
|
),
|
|
mountWorkflowOverview: (options) => (
|
|
mountIniPanelShellSessionHandoffWorkflow(options ?? {
|
|
renderState: shellViewModel.shellSessionHandoffWorkflowRenderState,
|
|
documentRef: document,
|
|
})
|
|
),
|
|
createWorkflowOverviewRenderState: createIniPanelShellSessionHandoffWorkflowRenderState,
|
|
getWorkflowOverviewContract: () => createIniPanelShellWorkflowOverviewContract(),
|
|
getWorkflowOverviewReadinessFromApi: () => createIniPanelShellWorkflowOverviewReadiness({
|
|
overviewApi: window.linuxCncIniPanelWorkflowOverviewApi,
|
|
}),
|
|
mountWorkflowOverviewEmbedding: (options) => (
|
|
mountIniPanelShellWorkflowOverviewEmbedding({
|
|
overviewApi: window.linuxCncIniPanelWorkflowOverviewApi,
|
|
...(options ?? {}),
|
|
})
|
|
),
|
|
getWorkflowOverviewEmbeddingReport: (embeddingResult, contract) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingReport(embeddingResult, contract)
|
|
),
|
|
getWorkflowOverviewEmbeddingDisplayViewModel: (report) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel(report)
|
|
),
|
|
getWorkflowOverviewEmbeddingRenderState: (displayViewModel) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingRenderState(displayViewModel)
|
|
),
|
|
getWorkflowOverviewEmbeddingDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingDomContract(options)
|
|
),
|
|
getWorkflowOverviewEmbeddingDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingDomReadiness(options ?? { documentRef: document })
|
|
),
|
|
renderWorkflowOverviewEmbeddingState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewEmbeddingState(renderState, options ?? { documentRef: document })
|
|
),
|
|
mountWorkflowOverviewEmbeddingState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewEmbeddingState(options ?? {
|
|
documentRef: document,
|
|
})
|
|
),
|
|
getWorkflowOverviewEmbeddingMountDisplayViewModel: (mountResult) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel(mountResult)
|
|
),
|
|
getWorkflowOverviewEmbeddingMountRenderState: (displayViewModel) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountRenderState(displayViewModel)
|
|
),
|
|
getWorkflowOverviewEmbeddingMountDomContract: (options) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomContract(options)
|
|
),
|
|
getWorkflowOverviewEmbeddingMountDomReadiness: (options) => (
|
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness(options ?? { documentRef: document })
|
|
),
|
|
renderWorkflowOverviewEmbeddingMountState: (renderState, options) => (
|
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState(renderState, options ?? { documentRef: document })
|
|
),
|
|
mountWorkflowOverviewEmbeddingMountState: (options) => (
|
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState(options ?? {
|
|
documentRef: document,
|
|
})
|
|
),
|
|
};
|
|
</script>
|
|
</body>
|
|
</html>
|