{"id":31101,"date":"2026-07-10T12:41:10","date_gmt":"2026-07-10T04:41:10","guid":{"rendered":"https:\/\/shchimay.com\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/"},"modified":"2026-07-10T12:41:10","modified_gmt":"2026-07-10T04:41:10","slug":"sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes","status":"publish","type":"post","link":"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/","title":{"rendered":"Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes"},"content":{"rendered":"<hr \/>\n<p>title: &ldquo;Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes&rdquo;<br \/>\ndate: 2026-07-01<br \/>\nperspective: Technical<br \/>\naudience: Instrumentation Engineers, Data Scientists, Water Chemistry Specialists<br \/>\nkeywords: sensor drift, machine learning, conductivity, drift correction, online monitoring<\/p>\n<hr \/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_50 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Sensor_Drift_Correction_Using_Machine_Learning_in_Online_Conductivity_Loops_Shanghai_ChiMay_Engineering_Notes\" title=\"Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes\">Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes<\/a><ul class='ez-toc-list-level-2'><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Key_Takeaways\" title=\"Key Takeaways\">Key Takeaways<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#The_Physics_of_Conductivity_Drift\" title=\"The Physics of Conductivity Drift\">The Physics of Conductivity Drift<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Why_Statistical_Methods_Alone_Are_Not_Enough\" title=\"Why Statistical Methods Alone Are Not Enough\">Why Statistical Methods Alone Are Not Enough<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#A_Practical_ML_Pipeline_for_Drift_Correction\" title=\"A Practical ML Pipeline for Drift Correction\">A Practical ML Pipeline for Drift Correction<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Step_1_Feature_Engineering\" title=\"Step 1: Feature Engineering\">Step 1: Feature Engineering<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Step_2_Ground_Truth_Establishment\" title=\"Step 2: Ground Truth Establishment\">Step 2: Ground Truth Establishment<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Step_3_Model_Selection\" title=\"Step 3: Model Selection\">Step 3: Model Selection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Step_4_Validation_Discipline\" title=\"Step 4: Validation Discipline\">Step 4: Validation Discipline<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Step_5_Deployment_and_Monitoring\" title=\"Step 5: Deployment and Monitoring\">Step 5: Deployment and Monitoring<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Comparison_of_Drift_Correction_Approaches\" title=\"Comparison of Drift Correction Approaches\">Comparison of Drift Correction Approaches<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Failure_Modes_and_Guardrails\" title=\"Failure Modes and Guardrails\">Failure Modes and Guardrails<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Shanghai_ChiMay_Instrumentation_Support\" title=\"Shanghai ChiMay Instrumentation Support\">Shanghai ChiMay Instrumentation Support<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Industry_Outlook\" title=\"Industry Outlook\">Industry Outlook<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/shchimay.com\/tr\/sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\/#Conclusion\" title=\"Conclusion\">Conclusion<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1 id=\"sensor-drift-correction-using-machine-learning-in-online-conductivity-loops-shanghai-chimay-engineering-notes\"><span class=\"ez-toc-section\" id=\"Sensor_Drift_Correction_Using_Machine_Learning_in_Online_Conductivity_Loops_Shanghai_ChiMay_Engineering_Notes\"><\/span>Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Conductivity is one of the most widely deployed online water-quality parameters, and it is also one of the most prone to gradual measurement drift. Cell fouling, temperature-compensation error, and reference-cell aging all cause the reported conductivity value to diverge from the true water value over weeks to months. Traditional operations respond with scheduled recalibration; smart water programs are increasingly turning to machine-learning-based drift correction to close the gap between calibrations. This article describes what actually works.<\/p>\n<h2 id=\"key-takeaways\"><span class=\"ez-toc-section\" id=\"Key_Takeaways\"><\/span>Key Takeaways<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><strong>63% of new online conductivity deployments in 2026 include some form of algorithmic drift correction<\/strong>, up from under 15% five years ago.<\/li>\n<li>Machine-learning drift correction typically extends the calibration interval by <strong>1.5-2.5x<\/strong> without loss of measurement quality.<\/li>\n<li>Effective drift-correction models rely on <strong>contextual features<\/strong> \u2014 temperature, flow rate, upstream event flags \u2014 not conductivity data alone.<\/li>\n<li><strong>Shanghai ChiMay<\/strong> in-line conductivity meters, electrodes, and analyzers provide the diagnostic outputs needed to feed a robust drift-correction pipeline.<\/li>\n<\/ul>\n<h2 id=\"the-physics-of-conductivity-drift\"><span class=\"ez-toc-section\" id=\"The_Physics_of_Conductivity_Drift\"><\/span>The Physics of Conductivity Drift<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Before applying any correction algorithm, engineers must understand the underlying drift mechanisms. Online conductivity sensors drift for several distinct reasons:<\/p>\n<ul>\n<li><strong>Electrode fouling<\/strong> \u2013 organic films, biofilms, or mineral scale accumulate on the electrode surface and change the cell constant.<\/li>\n<li><strong>Temperature compensation error<\/strong> \u2013 standard linear temperature coefficients (typically 2.0-2.1% per \u00b0C for KCl solutions) break down at low conductivities and non-KCl matrices.<\/li>\n<li><strong>Reference cell aging<\/strong> \u2013 for toroidal sensors, coil impedance drifts with temperature cycling.<\/li>\n<li><strong>Cable and connector effects<\/strong> \u2013 capacitive drift from long cable runs in humid environments.<\/li>\n<\/ul>\n<p>Each drift source has a characteristic time signature. Fouling drifts slowly and monotonically; temperature-compensation error co-varies with process temperature; connector effects appear as step changes after weather events.<\/p>\n<h2 id=\"why-statistical-methods-alone-are-not-enough\"><span class=\"ez-toc-section\" id=\"Why_Statistical_Methods_Alone_Are_Not_Enough\"><\/span>Why Statistical Methods Alone Are Not Enough<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The traditional approach to drift is a scheduled recalibration every 60, 90, or 180 days. Between calibrations, most plants apply a simple rolling-average filter and hope for the best. This works, but it treats drift as a nuisance rather than a diagnostic signal. Statistical filters cannot distinguish drift from a real process change, and they cannot use context.<\/p>\n<p>Machine-learning approaches offer three advantages:<\/p>\n<ul>\n<li><strong>Distinction between drift and process change<\/strong> using contextual features.<\/li>\n<li><strong>Predictive maintenance<\/strong> \u2014 the model can flag when drift acceleration warrants intervention.<\/li>\n<li><strong>Quantified uncertainty<\/strong> on each reported measurement.<\/li>\n<\/ul>\n<h2 id=\"a-practical-ml-pipeline-for-drift-correction\"><span class=\"ez-toc-section\" id=\"A_Practical_ML_Pipeline_for_Drift_Correction\"><\/span>A Practical ML Pipeline for Drift Correction<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Engineering teams looking to deploy drift correction should follow a defined pipeline:<\/p>\n<h3 id=\"step-1-feature-engineering\"><span class=\"ez-toc-section\" id=\"Step_1_Feature_Engineering\"><\/span>Step 1: Feature Engineering<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The model should ingest:<\/p>\n<ul>\n<li>Raw conductivity measurement.<\/li>\n<li>Process temperature (co-located).<\/li>\n<li>Reference cell impedance (if available).<\/li>\n<li>Upstream flow rate.<\/li>\n<li>Time since last calibration.<\/li>\n<li>Cumulative operating hours.<\/li>\n<li>Ambient temperature and humidity at the transmitter enclosure (if instrumented).<\/li>\n<\/ul>\n<p>Cross-correlation analysis at the feature-engineering stage often reveals which features carry meaningful drift signal.<\/p>\n<h3 id=\"step-2-ground-truth-establishment\"><span class=\"ez-toc-section\" id=\"Step_2_Ground_Truth_Establishment\"><\/span>Step 2: Ground Truth Establishment<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The model requires ground-truth data. In practice, this comes from:<\/p>\n<ul>\n<li><strong>Grab-sample laboratory measurements<\/strong> at scheduled intervals.<\/li>\n<li><strong>Post-calibration reference readings<\/strong> immediately after each field calibration.<\/li>\n<li><strong>Redundant online instruments<\/strong> where deployed.<\/li>\n<\/ul>\n<p>Absent labeled ground truth, unsupervised anomaly detection is the fallback, but it produces less actionable output.<\/p>\n<h3 id=\"step-3-model-selection\"><span class=\"ez-toc-section\" id=\"Step_3_Model_Selection\"><\/span>Step 3: Model Selection<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For conductivity drift correction, three model families work reliably:<\/p>\n<ul>\n<li><strong>Gradient boosting (XGBoost, LightGBM)<\/strong> \u2013 strong performance on tabular features, interpretable feature importance.<\/li>\n<li><strong>Recurrent neural networks (LSTM, GRU)<\/strong> \u2013 capture time-dependent drift dynamics.<\/li>\n<li><strong>State-space and Kalman filter models<\/strong> \u2013 appropriate when drift physics can be parameterized.<\/li>\n<\/ul>\n<p>Simpler is generally better in production. A well-tuned gradient-boosted regressor typically outperforms an LSTM on limited training data.<\/p>\n<h3 id=\"step-4-validation-discipline\"><span class=\"ez-toc-section\" id=\"Step_4_Validation_Discipline\"><\/span>Step 4: Validation Discipline<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Standard machine-learning validation practice applies with two water-specific twists:<\/p>\n<ul>\n<li><strong>Temporal validation splits<\/strong> \u2014 train on early data, test on later data, never random splits.<\/li>\n<li><strong>Process-condition stratification<\/strong> \u2014 hold out data from unusual operating conditions to evaluate generalization.<\/li>\n<\/ul>\n<h3 id=\"step-5-deployment-and-monitoring\"><span class=\"ez-toc-section\" id=\"Step_5_Deployment_and_Monitoring\"><\/span>Step 5: Deployment and Monitoring<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Deployment can be edge-side (on the transmitter or a nearby gateway) or cloud-side. Monitoring must track:<\/p>\n<ul>\n<li>Model residuals versus laboratory reference readings.<\/li>\n<li>Feature drift on the input side.<\/li>\n<li>Alert generation frequency.<\/li>\n<\/ul>\n<h2 id=\"comparison-of-drift-correction-approaches\"><span class=\"ez-toc-section\" id=\"Comparison_of_Drift_Correction_Approaches\"><\/span>Comparison of Drift Correction Approaches<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<table>\n<thead>\n<tr>\n<th>Approach<\/th>\n<th>Calibration interval extension<\/th>\n<th>Complexity<\/th>\n<th>Data requirement<\/th>\n<th>Best fit<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Rolling average<\/td>\n<td>1.0x (baseline)<\/td>\n<td>Very low<\/td>\n<td>None<\/td>\n<td>Any<\/td>\n<\/tr>\n<tr>\n<td>Piecewise linear<\/td>\n<td>1.2-1.4x<\/td>\n<td>Low<\/td>\n<td>Regular calibration<\/td>\n<td>Stable processes<\/td>\n<\/tr>\n<tr>\n<td>Kalman filter<\/td>\n<td>1.4-1.8x<\/td>\n<td>Medium<\/td>\n<td>Physics model<\/td>\n<td>Well-characterized loops<\/td>\n<\/tr>\n<tr>\n<td>Gradient boosting<\/td>\n<td>1.8-2.5x<\/td>\n<td>Medium<\/td>\n<td>Labeled data, features<\/td>\n<td>Most industrial and municipal<\/td>\n<\/tr>\n<tr>\n<td>LSTM\/GRU<\/td>\n<td>2.0-3.0x<\/td>\n<td>High<\/td>\n<td>Large labeled dataset<\/td>\n<td>High-value loops with rich data<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Most water plants should start with a gradient-boosted model and only move to deep learning when the operational value clearly justifies the complexity.<\/p>\n<h2 id=\"failure-modes-and-guardrails\"><span class=\"ez-toc-section\" id=\"Failure_Modes_and_Guardrails\"><\/span>Failure Modes and Guardrails<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Machine-learning drift correction has real failure modes engineering teams must anticipate:<\/p>\n<ul>\n<li><strong>Silent process shift<\/strong> \u2014 a genuine change in influent chemistry can be interpreted as drift and corrected away. Guardrail: keep the raw uncorrected value available in parallel.<\/li>\n<li><strong>Correlated feature failure<\/strong> \u2014 if the temperature sensor drifts, so does the drift correction. Guardrail: monitor input features for their own drift.<\/li>\n<li><strong>Regulatory reporting ambiguity<\/strong> \u2014 regulators may require the raw sensor reading, not the corrected value. Guardrail: document both values in the data historian.<\/li>\n<\/ul>\n<h2 id=\"shanghai-chimay-instrumentation-support\"><span class=\"ez-toc-section\" id=\"Shanghai_ChiMay_Instrumentation_Support\"><\/span>Shanghai ChiMay Instrumentation Support<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Shanghai ChiMay<\/strong> in-line conductivity meters, conductivity electrodes, and multi-parameter sensors expose the diagnostic register set typically required for drift correction pipelines: temperature, cell impedance status, and elapsed operating hours. These outputs feed directly into edge or cloud ML pipelines without additional integration effort.<\/p>\n<h2 id=\"industry-outlook\"><span class=\"ez-toc-section\" id=\"Industry_Outlook\"><\/span>Industry Outlook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>By 2030, machine-learning drift correction is expected to be a <strong>standard feature on all industrial-grade online conductivity monitors<\/strong>. Standardization work on model performance metrics and drift-correction documentation is underway within the water instrumentation community. Engineers building smart-water programs today should insist on transparent model behavior, documented residual performance, and clean access to both raw and corrected values.<\/p>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Machine-learning drift correction is not a magic layer that removes the need for calibration; it is a disciplined engineering practice that extends calibration intervals, provides earlier warning of sensor degradation, and improves data quality for downstream analytics. Instrumentation teams that treat drift correction as an integrated part of the measurement pipeline \u2014 not a cloud afterthought \u2014 will achieve substantially better long-term measurement quality. <strong>Shanghai ChiMay<\/strong> conductivity products provide the diagnostic transparency needed to make these pipelines work in real deployments.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>title: &ldquo;Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes&rdquo; date: 2026-07-01 perspective: Technical audience: Instrumentation Engineers, Data Scientists, Water Chemistry Specialists keywords: sensor drift, machine learning, conductivity, drift correction, online monitoring Sensor Drift Correction Using Machine Learning in Online Conductivity Loops: Shanghai ChiMay Engineering Notes Conductivity is one of&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false},"categories":[1],"tags":[134481],"translation":{"provider":"WPGlobus","version":"2.12.0","language":"tr","enabled_languages":["en","zh","es","de","fr","ru","pt","ar","ja","ko","it","id","hi","th","vi","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"zh":{"title":false,"content":false,"excerpt":false},"es":{"title":false,"content":false,"excerpt":false},"de":{"title":false,"content":false,"excerpt":false},"fr":{"title":false,"content":false,"excerpt":false},"ru":{"title":false,"content":false,"excerpt":false},"pt":{"title":false,"content":false,"excerpt":false},"ar":{"title":false,"content":false,"excerpt":false},"ja":{"title":false,"content":false,"excerpt":false},"ko":{"title":false,"content":false,"excerpt":false},"it":{"title":false,"content":false,"excerpt":false},"id":{"title":false,"content":false,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false},"th":{"title":false,"content":false,"excerpt":false},"vi":{"title":false,"content":false,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/posts\/31101"}],"collection":[{"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/comments?post=31101"}],"version-history":[{"count":0,"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/posts\/31101\/revisions"}],"wp:attachment":[{"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/media?parent=31101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/categories?post=31101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shchimay.com\/tr\/wp-json\/wp\/v2\/tags?post=31101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}