diff --git a/.tx/config b/.tx/config
index 02249049818846df93ce2768f27c3180f3fe94e6..7b16a2951ac903311060a032eddfd300193388c8 100644
--- a/.tx/config
+++ b/.tx/config
@@ -627,6 +627,11 @@ file_filter = addons/pos_sale/i18n/<lang>.po
 source_file = addons/pos_sale/i18n/pos_sale.pot
 source_lang = en
 
+[odoo-master.pos_six]
+file_filter = addons/pos_six/i18n/<lang>.po
+source_file = addons/pos_six/i18n/pos_six.pot
+source_lang = en
+
 [odoo-master.procurement_jit]
 file_filter = addons/procurement_jit/i18n/<lang>.po
 source_file = addons/procurement_jit/i18n/procurement_jit.pot
diff --git a/addons/point_of_sale/models/res_config_settings.py b/addons/point_of_sale/models/res_config_settings.py
index 7bae915dd3ef61fbec2755974c4a760688f9b119..30b92b95e64d3ab5890aaf53d427be40e5bca7eb 100644
--- a/addons/point_of_sale/models/res_config_settings.py
+++ b/addons/point_of_sale/models/res_config_settings.py
@@ -9,6 +9,7 @@ class ResConfigSettings(models.TransientModel):
     sale_tax_id = fields.Many2one('account.tax', string="Default Sale Tax", related='company_id.account_sale_tax_id', readonly=False)
     module_pos_mercury = fields.Boolean(string="Vantiv Payment Terminal", help="The transactions are processed by Vantiv. Set your Vantiv credentials on the related payment method.")
     module_pos_adyen = fields.Boolean(string="Adyen Payment Terminal", help="The transactions are processed by Adyen. Set your Adyen credentials on the related payment method.")
+    module_pos_six = fields.Boolean(string="Six Payment Terminal", help="The transactions are processed by Six. Set the IP address of the terminal on the related payment method.")
     update_stock_quantities = fields.Selection(related="company_id.point_of_sale_update_stock_quantities", readonly=False)
 
     def set_values(self):
diff --git a/addons/point_of_sale/views/res_config_settings_views.xml b/addons/point_of_sale/views/res_config_settings_views.xml
index b9d31e82d6a4413410a192022ffe923fa82ee7ce..17e2525629b1bdefa4f6f5b44375258a88710762 100644
--- a/addons/point_of_sale/views/res_config_settings_views.xml
+++ b/addons/point_of_sale/views/res_config_settings_views.xml
@@ -138,6 +138,18 @@
                                 </div>
                             </div>
                         </div>
+                        <div class="col-12 col-lg-6 o_setting_box" title="The transactions are processed by Six. Set the IP address of the terminal on the related payment method.">
+                            <div class="o_setting_left_pane">
+                                <field name="module_pos_six"/>
+                            </div>
+                            <div class="o_setting_right_pane">
+                                <label for="module_pos_six" string="Six"/>
+                                <a href="https://www.odoo.com/documentation/user/13.0/point_of_sale/payment/six.html" title="Documentation" class="o_doc_link" target="_blank"></a>
+                                <div class="text-muted">
+                                    Accept payments with a Six payment terminal
+                                </div>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </xpath>
diff --git a/addons/pos_six/__init__.py b/addons/pos_six/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a2787f6bf392eeff751fcb33cd182c1ec5509cd
--- /dev/null
+++ b/addons/pos_six/__init__.py
@@ -0,0 +1,4 @@
+# coding: utf-8
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import models
diff --git a/addons/pos_six/__manifest__.py b/addons/pos_six/__manifest__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d59c415b353c95616d81f3b25a5edd4c9ccccd6c
--- /dev/null
+++ b/addons/pos_six/__manifest__.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+{
+    'name': 'POS Six',
+    'version': '1.0',
+    'category': 'Sales/Point Of Sale',
+    'sequence': 6,
+    'summary': 'Integrate your POS with a Six payment terminal',
+    'description': '',
+    'data': [
+        'views/pos_payment_method_views.xml',
+        'views/point_of_sale_assets.xml',
+    ],
+    'depends': ['point_of_sale'],
+    'installable': True,
+    'license': 'OEEL-1',
+}
diff --git a/addons/pos_six/i18n/pos_six.pot b/addons/pos_six/i18n/pos_six.pot
new file mode 100644
index 0000000000000000000000000000000000000000..29a10749a142a4a7af92c7f217697754d2d113b3
--- /dev/null
+++ b/addons/pos_six/i18n/pos_six.pot
@@ -0,0 +1,40 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* pos_six
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-02-25 08:44+0000\n"
+"PO-Revision-Date: 2020-02-25 08:44+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: pos_six
+#: model:ir.model,name:pos_six.model_pos_payment_method
+msgid "Point of Sale Payment Methods"
+msgstr ""
+
+#. module: pos_six
+#: model:ir.model.fields,field_description:pos_six.field_pos_payment_method__six_terminal_ip
+msgid "Six Terminal IP"
+msgstr ""
+
+#. module: pos_six
+#. openerp-web
+#: code:addons/pos_six/static/src/js/payment_six.js:0
+#, python-format
+msgid "Terminal Error"
+msgstr ""
+
+#. module: pos_six
+#. openerp-web
+#: code:addons/pos_six/static/src/js/payment_six.js:0
+#, python-format
+msgid "Transaction was not processed correctly"
+msgstr ""
diff --git a/addons/pos_six/models/__init__.py b/addons/pos_six/models/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..54035f9421cd877b88f70afa1af6e950c1cd2474
--- /dev/null
+++ b/addons/pos_six/models/__init__.py
@@ -0,0 +1,4 @@
+# coding: utf-8
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import pos_payment_method
diff --git a/addons/pos_six/models/pos_payment_method.py b/addons/pos_six/models/pos_payment_method.py
new file mode 100644
index 0000000000000000000000000000000000000000..71a165c636e77addf08baf8814434731c29f4a8a
--- /dev/null
+++ b/addons/pos_six/models/pos_payment_method.py
@@ -0,0 +1,13 @@
+# coding: utf-8
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class PosPaymentMethod(models.Model):
+    _inherit = 'pos.payment.method'
+
+    def _get_payment_terminal_selection(self):
+        return super(PosPaymentMethod, self)._get_payment_terminal_selection() + [('six', 'SIX')]
+
+    six_terminal_ip = fields.Char('Six Terminal IP')
diff --git a/addons/pos_six/static/lib/six_timapi/timapi.bundle.js b/addons/pos_six/static/lib/six_timapi/timapi.bundle.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5cc8bd186ac054492473953ca57dcf2b327f2f2
--- /dev/null
+++ b/addons/pos_six/static/lib/six_timapi/timapi.bundle.js
@@ -0,0 +1,36912 @@
+var timapi;
+(function (timapi) {
+    let TimeDateFormat;
+    (function (TimeDateFormat) {
+        TimeDateFormat["time"] = "hh:mm:ss";
+        TimeDateFormat["date"] = "dd.MM.yyyy";
+        TimeDateFormat["regular"] = "dd-MM-yyyy hh:mm:ss";
+    })(TimeDateFormat = timapi.TimeDateFormat || (timapi.TimeDateFormat = {}));
+    class TimeDate {
+        constructor(yearOrFormatOrDate, monthOrValue, day, hour, minute, second) {
+            let date;
+            switch (arguments.length) {
+                case 6: {
+                    this.$year = yearOrFormatOrDate;
+                    this.$month = monthOrValue;
+                    this.$day = day;
+                    this.$hour = hour;
+                    this.$minute = minute;
+                    this.$second = second;
+                    break;
+                }
+                case 2: {
+                    const format = yearOrFormatOrDate;
+                    const value = monthOrValue;
+                    this.initWithFormatAndValue(format, value);
+                    break;
+                }
+                case 1: {
+                    date = yearOrFormatOrDate;
+                    break;
+                }
+                case 0: {
+                    date = new Date();
+                    break;
+                }
+                default: {
+                    throw new Error("Invalid argument");
+                }
+            }
+            if (date !== undefined) {
+                this.$year = date.getFullYear();
+                this.$month = date.getMonth();
+                this.$day = date.getDate();
+                this.$hour = date.getHours();
+                this.$minute = date.getMinutes();
+                this.$second = date.getSeconds();
+            }
+        }
+        get $year() {
+            return this.year;
+        }
+        set $year(value) {
+            this.year = value;
+        }
+        get $month() {
+            return this.month;
+        }
+        set $month(value) {
+            this.month = value;
+        }
+        get $day() {
+            return this.day;
+        }
+        set $day(value) {
+            this.day = value;
+        }
+        get $hour() {
+            return this.hour;
+        }
+        set $hour(value) {
+            this.hour = value;
+        }
+        get $minute() {
+            return this.minute;
+        }
+        set $minute(value) {
+            this.minute = value;
+        }
+        get $second() {
+            return this.second;
+        }
+        set $second(value) {
+            this.second = value;
+        }
+        format(format) {
+            const year4 = this.$year.toString();
+            const year2 = (this.$year % 100).toString();
+            const month = (this.$month + 1).toString();
+            const day = this.$day.toString();
+            const hour = this.$hour.toString();
+            const minute = this.$minute.toString();
+            const second = this.$second.toString();
+            const result = format
+                .replace("yyyy", "0".repeat(4 - year4.length) + year4)
+                .replace("yy", "0".repeat(2 - year2.length) + year2)
+                .replace("MM", "0".repeat(2 - month.length) + month)
+                .replace("dd", "0".repeat(2 - day.length) + day)
+                .replace("HH", "0".repeat(2 - hour.length) + hour)
+                .replace("mm", "0".repeat(2 - minute.length) + minute)
+                .replace("ss", "0".repeat(2 - second.length) + second)
+                .replace("Z", "+0000");
+            return result;
+        }
+        initWithFormatAndValue(format, value) {
+            format = format.replace(/[^a-zA-Z0-9]/g, "");
+            const startIndexYear = format.indexOf("y");
+            const endIndexYear = format.lastIndexOf("y");
+            this.$year = parseInt(value.slice(startIndexYear, endIndexYear + 1), undefined);
+            const startIndexMonth = format.indexOf("M");
+            const endIndexMonth = format.lastIndexOf("M");
+            this.$month = parseInt(value.slice(startIndexMonth, endIndexMonth + 1), undefined);
+            const startIndexDay = format.indexOf("d");
+            const endIndexDay = format.lastIndexOf("d");
+            this.$day = parseInt(value.slice(startIndexDay, endIndexDay + 1), undefined);
+            const startIndexHour = format.indexOf("H");
+            const endIndexHour = format.lastIndexOf("H");
+            this.$hour = parseInt(value.slice(startIndexHour, endIndexHour + 1), undefined);
+            const startIndexMinute = format.indexOf("m");
+            const endIndexMinute = format.lastIndexOf("m");
+            this.$minute = parseInt(value.slice(startIndexMinute, endIndexMinute + 1), undefined);
+            const startIndexSecond = format.indexOf("s");
+            const endIndexSecond = format.lastIndexOf("s");
+            this.$second = parseInt(value.slice(startIndexSecond, endIndexSecond + 1), undefined);
+        }
+        toStringRegular() {
+            return this.format(TimeDateFormat.regular);
+        }
+        toStringReceiptDate() {
+            return this.format(TimeDateFormat.date);
+        }
+        toStringReceiptTime() {
+            return this.format(TimeDateFormat.time);
+        }
+    }
+    timapi.TimeDate = TimeDate;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var logging;
+    (function (logging) {
+        let ErrorCode;
+        (function (ErrorCode) {
+            ErrorCode[ErrorCode["CLOSE_FAILURE"] = 0] = "CLOSE_FAILURE";
+            ErrorCode[ErrorCode["FLUSH_FAILURE"] = 1] = "FLUSH_FAILURE";
+            ErrorCode[ErrorCode["GENERIC_FAILURE"] = 2] = "GENERIC_FAILURE";
+            ErrorCode[ErrorCode["OPEN_FAILURE"] = 3] = "OPEN_FAILURE";
+            ErrorCode[ErrorCode["WRITE_FAILURE"] = 4] = "WRITE_FAILURE";
+        })(ErrorCode = logging.ErrorCode || (logging.ErrorCode = {}));
+        class ErrorManager {
+            error(msg, ex, code) {
+                console.error("Error [$code]: $msg");
+            }
+        }
+        logging.ErrorManager = ErrorManager;
+    })(logging = timapi.logging || (timapi.logging = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var logging;
+    (function (logging) {
+        let Level;
+        (function (Level) {
+            Level[Level["SEVERE"] = 0] = "SEVERE";
+            Level[Level["WARNING"] = 1] = "WARNING";
+            Level[Level["INFO"] = 2] = "INFO";
+            Level[Level["CONFIG"] = 3] = "CONFIG";
+            Level[Level["FINE"] = 4] = "FINE";
+            Level[Level["FINER"] = 5] = "FINER";
+            Level[Level["FINEST"] = 6] = "FINEST";
+            Level[Level["OFF"] = 7] = "OFF";
+        })(Level = logging.Level || (logging.Level = {}));
+    })(logging = timapi.logging || (timapi.logging = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var logging;
+    (function (logging) {
+        class Log {
+            constructor($name) {
+                this.name = $name;
+            }
+            entering(sourceClass, sourceMethod, params) {
+                if (!this.isLoggable(logging.Level.FINEST)) {
+                    return;
+                }
+                let logMessage = "Entering ->[" +
+                    sourceClass +
+                    "]: " +
+                    sourceMethod;
+                if (params !== undefined) {
+                    logMessage += "\nparams:";
+                    this.log(logging.Level.FINEST, logMessage, params);
+                }
+                else {
+                    this.log(logging.Level.FINEST, logMessage);
+                }
+            }
+            exiting(sourceClass, sourceMethod, params) {
+                if (!this.isLoggable(logging.Level.FINEST)) {
+                    return;
+                }
+                let logMessage = "Exiting ->[" +
+                    sourceClass +
+                    "]: " +
+                    sourceMethod;
+                if (params !== undefined) {
+                    logMessage += "\nparams:";
+                    this.log(logging.Level.FINEST, logMessage, params);
+                }
+                else {
+                    this.log(logging.Level.FINEST, logMessage);
+                }
+            }
+            log(level, description, event) {
+                if (!this.isLoggable(level)) {
+                    return;
+                }
+                let logMessage = "[" +
+                    this.stringForLogLevel(level) +
+                    "]: " +
+                    description;
+                let stack = "";
+                if ((level == logging.Level.SEVERE) || (level == logging.Level.WARNING)) {
+                    stack = new Error().stack;
+                }
+                if (event !== undefined) {
+                    console.log(logMessage, event, " (" + this.name + ")", stack);
+                }
+                else {
+                    console.log(logMessage, " (" + this.name + ")", stack);
+                }
+            }
+            isLoggable(level) {
+                if (Log.logLevel == logging.Level.OFF) {
+                    return false;
+                }
+                return level <= Log.logLevel;
+            }
+            stringForLogLevel(level) {
+                switch (level) {
+                    case logging.Level.CONFIG:
+                        return "CONFIG";
+                    case logging.Level.FINE:
+                        return "FINE";
+                    case logging.Level.FINER:
+                        return "FINER";
+                    case logging.Level.FINEST:
+                        return "FINEST";
+                    case logging.Level.INFO:
+                        return "INFO";
+                    case logging.Level.OFF:
+                        return "OFF";
+                    case logging.Level.SEVERE:
+                        return "SEVERE";
+                    case logging.Level.WARNING:
+                        return "WARNING";
+                    default:
+                        return "";
+                }
+            }
+        }
+        Log.logLevel = logging.Level.SEVERE;
+        logging.Log = Log;
+    })(logging = timapi.logging || (timapi.logging = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var logging;
+    (function (logging) {
+        class Logger {
+            constructor() {
+                this.loggers = new Array();
+            }
+            static getInstance() {
+                if (Logger._instance == undefined) {
+                    Logger._instance = new Logger();
+                }
+                return Logger._instance;
+            }
+            static getLogger(name) {
+                let logger = Logger.getInstance().$loggers[name];
+                if (logger == undefined) {
+                    logger = new logging.Log(name);
+                }
+                return logger;
+            }
+            get $loggers() {
+                return this.loggers;
+            }
+        }
+        logging.Logger = Logger;
+    })(logging = timapi.logging || (timapi.logging = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var logging;
+    (function (logging) {
+        class LogHandler {
+            close() {
+            }
+            flush() {
+            }
+            isLoggable(record) {
+                return true;
+            }
+            publish(record) {
+                console.log(record.$message);
+            }
+            reportError(msg, exception, code) {
+                console.error(msg);
+            }
+        }
+        logging.LogHandler = LogHandler;
+    })(logging = timapi.logging || (timapi.logging = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var logging;
+    (function (logging) {
+        class LogRecord {
+            constructor($level, $message) {
+                this.level = $level;
+                this.message = $message;
+            }
+            get $message() {
+                return this.message;
+            }
+            set $message(value) {
+                this.message = value;
+            }
+            get $level() {
+                return this.level;
+            }
+            set $level(value) {
+                this.level = value;
+            }
+        }
+        logging.LogRecord = LogRecord;
+    })(logging = timapi.logging || (timapi.logging = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var utils;
+    (function (utils) {
+        class StringBuilder {
+            constructor(value) {
+                this.holder = new Array();
+                this.append(value);
+            }
+            append(value) {
+                if (value !== undefined && value !== undefined) {
+                    this.holder.push(value);
+                }
+                return this;
+            }
+            toString() {
+                return this.holder.join("");
+            }
+        }
+        utils.StringBuilder = StringBuilder;
+    })(utils = timapi.utils || (timapi.utils = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var utils;
+    (function (utils) {
+        var ArrayAdditions;
+        (function (ArrayAdditions_1) {
+            class ArrayAdditions {
+                static remove(element, arr) {
+                    let keys = Object.getOwnPropertyNames(element);
+                    return arr.filter(arrElement => {
+                        return arrElement !== element;
+                    });
+                }
+            }
+            ArrayAdditions_1.ArrayAdditions = ArrayAdditions;
+        })(ArrayAdditions = utils.ArrayAdditions || (utils.ArrayAdditions = {}));
+    })(utils = timapi.utils || (timapi.utils = {}));
+})(timapi || (timapi = {}));
+timapi.logging = timapi.logging || {};
+timapi.constants = timapi.constants || {};
+timapi.protocol = timapi.protocol || {};
+timapi.protocol.constants = timapi.protocol.constants || {};
+timapi.protocol.sixml = timapi.protocol.sixml || {};
+timapi.statemachine = timapi.statemachine || {};
+timapi.statemachine.states = timapi.statemachine.states || {};
+timapi.protocol.Container = function () {
+};
+timapi.protocol.Container.prototype.toXmlNode = Object.abstractFunction;
+timapi.protocol.Container.prototype.xmlHasAttribute = function (node, name) {
+    return node.attributes.has(name);
+};
+timapi.protocol.Container.prototype.xmlHasChild = function (node, name) {
+    for (child of node.children) {
+        if (child.name == name) {
+            return true;
+        }
+    }
+    return false;
+};
+timapi.protocol.Container.prototype.xmlGetAttribute = function (node, name) {
+    return node.attributes.get(name);
+};
+timapi.protocol.Container.prototype.xmlGetChild = function (node, name) {
+    for (child of node.children) {
+        if (child.name == name) {
+            return child;
+        }
+    }
+    throw "No such element";
+};
+timapi.protocol.Container.prototype.xmlGetChildren = function (node, name) {
+    var list = [];
+    for (child of node.children) {
+        if (child.name == name) {
+            list.push(child);
+        }
+    }
+    return list;
+};
+timapi.protocol.Container.prototype.xmlSetAttribute = function (node, name, value) {
+    node.attributes.set(name, value);
+};
+timapi.protocol.Container.prototype.xmlAddChild = function (node, name, value) {
+    if (arguments.length == 3 && typeof value === "string") {
+        var child = new timapi.protocol.XmlNode(name);
+        child.textContent = value;
+        node.children.push(child);
+    }
+    else if (arguments.length == 3 && value instanceof timapi.protocol.Container) {
+        node.children.push(value.toXmlNode());
+    }
+    else {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.Message = function () {
+};
+timapi.protocol.Message.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.TimeDate = timapi.TimeDate;
+timapi.protocol.XmlNode = function (name) {
+    this.name = name;
+    this.children = [];
+    this.attributes = new Map();
+};
+timapi.protocol.XmlNode.prototype.name = "";
+timapi.protocol.XmlNode.prototype.textContent = "";
+timapi.protocol.XmlNode.prototype.children = undefined;
+timapi.protocol.XmlNode.prototype.attributes = undefined;
+var timapi;
+(function (timapi) {
+    var protocol;
+    (function (protocol) {
+        class XmlWriter {
+            constructor($useDoubleQuotes, $useAsciiEncoding) {
+                this.stringDelimiter = "\"";
+                this.encoding = "UTF-8";
+                if ($useDoubleQuotes) {
+                    this.stringDelimiter = "\"";
+                }
+                else {
+                    this.stringDelimiter = "\'";
+                }
+                if ($useAsciiEncoding) {
+                    this.encoding = "US-ASCII";
+                }
+                else {
+                    this.encoding = "UTF-8";
+                }
+            }
+            writeXml(node, builder) {
+                if (builder == undefined) {
+                    builder = new timapi.utils.StringBuilder();
+                }
+                builder.append("<?xml version=");
+                builder.append(this.stringDelimiter);
+                builder.append("1.0");
+                builder.append(this.stringDelimiter);
+                builder.append(" encoding=");
+                builder.append(this.stringDelimiter);
+                builder.append(this.encoding);
+                builder.append(this.stringDelimiter);
+                builder.append("?>");
+                this.writeXmlNode(node, builder);
+                return timapi.utils.StringHelper.makeString(builder);
+            }
+            writeXmlNode(node, builder) {
+                builder.append("<").append(node.name);
+                Array.from(node.attributes).forEach(function (entry) {
+                    builder.append(" ");
+                    builder.append(entry[0]);
+                    builder.append("=");
+                    builder.append(this.stringDelimiter);
+                    builder.append(entry[1]);
+                    builder.append(this.stringDelimiter);
+                }, this);
+                if (node.children.length === 0) {
+                    if (node.textContent.length === 0) {
+                        builder.append("/>");
+                    }
+                    else {
+                        builder.append(">");
+                        this.escapeXmlString(builder, node.textContent);
+                        builder.append("</").append(node.name).append(">");
+                    }
+                }
+                else {
+                    builder.append(">");
+                    for (let child of node.children) {
+                        this.writeXmlNode(child, builder);
+                    }
+                    builder.append("</").append(node.name).append(">");
+                }
+            }
+            escapeXmlString(builder, text) {
+                let stringValue = text.toString();
+                let len = stringValue.length;
+                for (let i = 0; i < len; i++) {
+                    let character = stringValue[i];
+                    switch (character) {
+                        case "<":
+                            builder.append("&lt;");
+                            break;
+                        case ">":
+                            builder.append("&gt;");
+                            break;
+                        case "\"":
+                            builder.append("&quot;");
+                            break;
+                        case "&":
+                            builder.append("&amp;");
+                            break;
+                        case "\'":
+                            builder.append("&apos;");
+                            break;
+                        default:
+                            if (character > 0x7e) {
+                                builder.append("&#").append(character).append(";");
+                            }
+                            else {
+                                builder.append(character);
+                            }
+                    }
+                }
+            }
+        }
+        protocol.XmlWriter = XmlWriter;
+    })(protocol = timapi.protocol || (timapi.protocol = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var constants;
+    (function (constants) {
+        let RequestType;
+        (function (RequestType) {
+            RequestType[RequestType["connect"] = 0] = "connect";
+            RequestType[RequestType["activate"] = 1] = "activate";
+            RequestType[RequestType["applicationInformation"] = 2] = "applicationInformation";
+            RequestType[RequestType["balance"] = 3] = "balance";
+            RequestType[RequestType["changeSettings"] = 4] = "changeSettings";
+            RequestType[RequestType["commit"] = 5] = "commit";
+            RequestType[RequestType["counterRequest"] = 6] = "counterRequest";
+            RequestType[RequestType["deactivate"] = 7] = "deactivate";
+            RequestType[RequestType["dccRates"] = 8] = "dccRates";
+            RequestType[RequestType["hardwareInformation"] = 9] = "hardwareInformation";
+            RequestType[RequestType["initTransaction"] = 10] = "initTransaction";
+            RequestType[RequestType["login"] = 11] = "login";
+            RequestType[RequestType["logout"] = 12] = "logout";
+            RequestType[RequestType["reboot"] = 13] = "reboot";
+            RequestType[RequestType["reconciliation"] = 14] = "reconciliation";
+            RequestType[RequestType["receiptRequest"] = 15] = "receiptRequest";
+            RequestType[RequestType["reconfig"] = 16] = "reconfig";
+            RequestType[RequestType["rollback"] = 17] = "rollback";
+            RequestType[RequestType["softwareInformation"] = 18] = "softwareInformation";
+            RequestType[RequestType["systemInformation"] = 19] = "systemInformation";
+            RequestType[RequestType["softwareUpdate"] = 20] = "softwareUpdate";
+            RequestType[RequestType["transaction"] = 21] = "transaction";
+            RequestType[RequestType["closeReader"] = 22] = "closeReader";
+            RequestType[RequestType["openReader"] = 23] = "openReader";
+            RequestType[RequestType["ejectCard"] = 24] = "ejectCard";
+            RequestType[RequestType["openMaintenanceWindow"] = 25] = "openMaintenanceWindow";
+            RequestType[RequestType["closeMaintenanceWindow"] = 26] = "closeMaintenanceWindow";
+            RequestType[RequestType["activateServiceMenu"] = 27] = "activateServiceMenu";
+            RequestType[RequestType["openDialogMode"] = 28] = "openDialogMode";
+            RequestType[RequestType["closeDialogMode"] = 29] = "closeDialogMode";
+            RequestType[RequestType["showSignatureCapture"] = 30] = "showSignatureCapture";
+            RequestType[RequestType["showDialog"] = 31] = "showDialog";
+            RequestType[RequestType["balanceInquiry"] = 32] = "balanceInquiry";
+            RequestType[RequestType["queryLoyalty"] = 33] = "queryLoyalty";
+        })(RequestType = constants.RequestType || (constants.RequestType = {}));
+    })(constants = timapi.constants || (timapi.constants = {}));
+})(timapi || (timapi = {}));
+timapi.constants.AdminFunctions = {
+    login: 0,
+    logout: 1,
+    reconfig: 2,
+    reboot: 3,
+    softwareUpdate: 4,
+    activate: 5,
+    deactivate: 6,
+    counterRequest: 7,
+    reconciliation: 8,
+    balance: 9,
+    openDialogMode: 10,
+    closeDialogMode: 11,
+    transmitLog: 12,
+    startReaderCleaning: 13,
+    dccRates: 14,
+    changeSettings: 15,
+    receiptRequest: 16,
+    closeReader: 17,
+    openReader: 18,
+    ejectCard: 19,
+    openMaintenanceWindow: 20,
+    closeMaintenanceWindow: 21,
+    activateServiceMenu: 22
+};
+timapi.constants.BrandBarBrand = {
+    alipay: 0,
+    amex: 1,
+    bonuscard: 2,
+    cash: 3,
+    conforama: 4,
+    coopMobile: 5,
+    cup: 6,
+    diners: 7,
+    dinerClub: 8,
+    jcb: 9,
+    lebara: 10,
+    lycaMobile: 11,
+    maestro: 12,
+    masterCard: 13,
+    mbudgetMc: 14,
+    mcard: 15,
+    mediaMarkt: 16,
+    myOne: 17,
+    salt: 18,
+    pharmacard: 19,
+    phonecard: 20,
+    postCard: 21,
+    powerCard: 22,
+    reka: 23,
+    sunrise: 24,
+    supercardPlus: 25,
+    swisscom: 26,
+    visa: 27,
+    visaElectron: 28,
+    vpay: 29,
+    wirCard: 30,
+    yallo: 31
+};
+timapi.constants.BrandMode = {
+    all: 0,
+    selected: 1,
+    off: 2
+};
+timapi.constants.CardReaderStatus = {
+    cardReaderClosed: 0,
+    cardManuallyEntered: 1,
+    cardSwiped: 2,
+    cardNotRemoved: 3,
+    cardPresented: 4,
+    cardReaderEmpty: 5,
+    cardInserted: 6,
+    cardEjected: 7
+};
+timapi.constants.ConnectionStatus = {
+    disconnected: 0,
+    loggedOut: 1,
+    loggedIn: 2
+};
+timapi.constants.CounterType = {
+    shift: 0,
+    balance: 1
+};
+timapi.constants.Currency = {
+    AED: { code: "AED", name: "UAE Dirham", exponent: 2 },
+    AFN: { code: "AFN", name: "Afghani", exponent: 2 },
+    ALL: { code: "ALL", name: "Lek", exponent: 2 },
+    AMD: { code: "AMD", name: "Armenian Dram", exponent: 2 },
+    ANG: { code: "ANG", name: "Netherlands Antillean Guilder", exponent: 2 },
+    AOA: { code: "AOA", name: "Kwanza", exponent: 2 },
+    ARS: { code: "ARS", name: "Argentine Peso", exponent: 2 },
+    AUD: { code: "AUD", name: "Australian Dollar", exponent: 2 },
+    AWG: { code: "AWG", name: "Aruban Florin", exponent: 2 },
+    AZN: { code: "AZN", name: "Azerbaijanian Manat", exponent: 2 },
+    BAM: { code: "BAM", name: "Convertible Mark", exponent: 2 },
+    BBD: { code: "BBD", name: "Barbados Dollar", exponent: 2 },
+    BDT: { code: "BDT", name: "Taka", exponent: 2 },
+    BGN: { code: "BGN", name: "Bulgarian Lev", exponent: 2 },
+    BHD: { code: "BHD", name: "Bahraini Dinar", exponent: 3 },
+    BIF: { code: "BIF", name: "Burundi Franc", exponent: 0 },
+    BMD: { code: "BMD", name: "Bermudian Dollar", exponent: 2 },
+    BND: { code: "BND", name: "Brunei Dollar", exponent: 2 },
+    BOB: { code: "BOB", name: "Boliviano", exponent: 2 },
+    BOV: { code: "BOV", name: "Mvdol", exponent: 2 },
+    BRL: { code: "BRL", name: "Brazilian Real", exponent: 2 },
+    BSD: { code: "BSD", name: "Bahamian Dollar", exponent: 2 },
+    BTN: { code: "BTN", name: "Ngultrum", exponent: 2 },
+    BWP: { code: "BWP", name: "Pula", exponent: 2 },
+    BYN: { code: "BYN", name: "Belarusian Ruble", exponent: 2 },
+    BYR: { code: "BYR", name: "Belarusian Ruble", exponent: 0 },
+    BZD: { code: "BZD", name: "Belize Dollar", exponent: 2 },
+    CAD: { code: "CAD", name: "Canadian Dollar", exponent: 2 },
+    CDF: { code: "CDF", name: "Congolese Franc", exponent: 2 },
+    CHE: { code: "CHE", name: "WIR Euro", exponent: 2 },
+    CHF: { code: "CHF", name: "Swiss Franc", exponent: 2 },
+    CHW: { code: "CHW", name: "WIR Franc", exponent: 2 },
+    CLF: { code: "CLF", name: "Unidad de Fomento", exponent: 4 },
+    CLP: { code: "CLP", name: "Chilean Peso", exponent: 0 },
+    CNY: { code: "CNY", name: "Yuan Renminbi", exponent: 2 },
+    COP: { code: "COP", name: "Colombian Peso", exponent: 2 },
+    COU: { code: "COU", name: "Unidad de Valor Real", exponent: 2 },
+    CRC: { code: "CRC", name: "Costa Rican Colon", exponent: 2 },
+    CUC: { code: "CUC", name: "Peso Convertible", exponent: 2 },
+    CUP: { code: "CUP", name: "Cuban Peso", exponent: 2 },
+    CVE: { code: "CVE", name: "Cabo Verde Escudo", exponent: 2 },
+    CZK: { code: "CZK", name: "Czech Koruna", exponent: 2 },
+    DJF: { code: "DJF", name: "Djibouti Franc", exponent: 0 },
+    DKK: { code: "DKK", name: "Danish Krone", exponent: 2 },
+    DOP: { code: "DOP", name: "Dominican Peso", exponent: 2 },
+    DZD: { code: "DZD", name: "Algerian Dinar", exponent: 2 },
+    EGP: { code: "EGP", name: "Egyptian Pound", exponent: 2 },
+    ERN: { code: "ERN", name: "Nakfa", exponent: 2 },
+    ETB: { code: "ETB", name: "Ethiopian Birr", exponent: 2 },
+    EUR: { code: "EUR", name: "Euro", exponent: 2 },
+    FJD: { code: "FJD", name: "Fiji Dollar", exponent: 2 },
+    FKP: { code: "FKP", name: "Falkland Islands Pound", exponent: 2 },
+    GBP: { code: "GBP", name: "Pound Sterling", exponent: 2 },
+    GEL: { code: "GEL", name: "Lari", exponent: 2 },
+    GHS: { code: "GHS", name: "Ghana Cedi", exponent: 2 },
+    GIP: { code: "GIP", name: "Gibraltar Pound", exponent: 2 },
+    GMD: { code: "GMD", name: "Dalasi", exponent: 2 },
+    GNF: { code: "GNF", name: "Guinea Franc", exponent: 0 },
+    GTQ: { code: "GTQ", name: "Quetzal", exponent: 2 },
+    GYD: { code: "GYD", name: "Guyana Dollar", exponent: 2 },
+    HKD: { code: "HKD", name: "Hong Kong Dollar", exponent: 2 },
+    HNL: { code: "HNL", name: "Lempira", exponent: 2 },
+    HRK: { code: "HRK", name: "Kuna", exponent: 2 },
+    HTG: { code: "HTG", name: "Gourde", exponent: 2 },
+    HUF: { code: "HUF", name: "Forint", exponent: 2 },
+    IDR: { code: "IDR", name: "Rupiah", exponent: 2 },
+    ILS: { code: "ILS", name: "New Israeli Sheqel", exponent: 2 },
+    INR: { code: "INR", name: "Indian Rupee", exponent: 2 },
+    IQD: { code: "IQD", name: "Iraqi Dinar", exponent: 3 },
+    IRR: { code: "IRR", name: "Iranian Rial", exponent: 2 },
+    ISK: { code: "ISK", name: "Iceland Krona", exponent: 0 },
+    JMD: { code: "JMD", name: "Jamaican Dollar", exponent: 2 },
+    JOD: { code: "JOD", name: "Jordanian Dinar", exponent: 3 },
+    JPY: { code: "JPY", name: "Yen", exponent: 0 },
+    KES: { code: "KES", name: "Kenyan Shilling", exponent: 2 },
+    KGS: { code: "KGS", name: "Som", exponent: 2 },
+    KHR: { code: "KHR", name: "Riel", exponent: 2 },
+    KMF: { code: "KMF", name: "Comoro Franc", exponent: 0 },
+    KPW: { code: "KPW", name: "North Korean Won", exponent: 2 },
+    KRW: { code: "KRW", name: "Won", exponent: 0 },
+    KWD: { code: "KWD", name: "Kuwaiti Dinar", exponent: 3 },
+    KYD: { code: "KYD", name: "Cayman Islands Dollar", exponent: 2 },
+    KZT: { code: "KZT", name: "Tenge", exponent: 2 },
+    LAK: { code: "LAK", name: "Kip", exponent: 2 },
+    LBP: { code: "LBP", name: "Lebanese Pound", exponent: 2 },
+    LKR: { code: "LKR", name: "Sri Lanka Rupee", exponent: 2 },
+    LRD: { code: "LRD", name: "Liberian Dollar", exponent: 2 },
+    LSL: { code: "LSL", name: "Loti", exponent: 2 },
+    LYD: { code: "LYD", name: "Libyan Dinar", exponent: 3 },
+    MAD: { code: "MAD", name: "Moroccan Dirham", exponent: 2 },
+    MDL: { code: "MDL", name: "Moldovan Leu", exponent: 2 },
+    MGA: { code: "MGA", name: "Malagasy Ariary", exponent: 2 },
+    MKD: { code: "MKD", name: "Denar", exponent: 2 },
+    MMK: { code: "MMK", name: "Kyat", exponent: 2 },
+    MNT: { code: "MNT", name: "Tugrik", exponent: 2 },
+    MOP: { code: "MOP", name: "Pataca", exponent: 2 },
+    MRO: { code: "MRO", name: "Ouguiya", exponent: 2 },
+    MUR: { code: "MUR", name: "Mauritius Rupee", exponent: 2 },
+    MVR: { code: "MVR", name: "Rufiyaa", exponent: 2 },
+    MWK: { code: "MWK", name: "Malawi Kwacha", exponent: 2 },
+    MXN: { code: "MXN", name: "Mexican Peso", exponent: 2 },
+    MXV: { code: "MXV", name: "Mexican Unidad de Inversion (UDI)", exponent: 2 },
+    MYR: { code: "MYR", name: "Malaysian Ringgit", exponent: 2 },
+    MZN: { code: "MZN", name: "Mozambique Metical", exponent: 2 },
+    NAD: { code: "NAD", name: "Namibia Dollar", exponent: 2 },
+    NGN: { code: "NGN", name: "Naira", exponent: 2 },
+    NIO: { code: "NIO", name: "Cordoba Oro", exponent: 2 },
+    NOK: { code: "NOK", name: "Norwegian Krone", exponent: 2 },
+    NPR: { code: "NPR", name: "Nepalese Rupee", exponent: 2 },
+    NZD: { code: "NZD", name: "New Zealand Dollar", exponent: 2 },
+    OMR: { code: "OMR", name: "Rial Omani", exponent: 3 },
+    PAB: { code: "PAB", name: "Balboa", exponent: 2 },
+    PEN: { code: "PEN", name: "Sol", exponent: 2 },
+    PGK: { code: "PGK", name: "Kina", exponent: 2 },
+    PHP: { code: "PHP", name: "Philippine Peso", exponent: 2 },
+    PKR: { code: "PKR", name: "Pakistan Rupee", exponent: 2 },
+    PLN: { code: "PLN", name: "Zloty", exponent: 2 },
+    PTS: { code: "PTS", name: "VM Loyalty", exponent: 0 },
+    PYG: { code: "PYG", name: "Guarani", exponent: 0 },
+    QAR: { code: "QAR", name: "Qatari Rial", exponent: 2 },
+    RON: { code: "RON", name: "Romanian Leu", exponent: 2 },
+    RSD: { code: "RSD", name: "Serbian Dinar", exponent: 2 },
+    RUB: { code: "RUB", name: "Russian Ruble", exponent: 2 },
+    RWF: { code: "RWF", name: "Rwanda Franc", exponent: 0 },
+    SAR: { code: "SAR", name: "Saudi Riyal", exponent: 2 },
+    SBD: { code: "SBD", name: "Solomon Islands Dollar", exponent: 2 },
+    SCR: { code: "SCR", name: "Seychelles Rupee", exponent: 2 },
+    SDG: { code: "SDG", name: "Sudanese Pound", exponent: 2 },
+    SEK: { code: "SEK", name: "Swedish Krona", exponent: 2 },
+    SGD: { code: "SGD", name: "Singapore Dollar", exponent: 2 },
+    SHP: { code: "SHP", name: "Saint Helena Pound", exponent: 2 },
+    SLL: { code: "SLL", name: "Leone", exponent: 2 },
+    SOS: { code: "SOS", name: "Somali Shilling", exponent: 2 },
+    SRD: { code: "SRD", name: "Surinam Dollar", exponent: 2 },
+    SSP: { code: "SSP", name: "South Sudanese Pound", exponent: 2 },
+    STD: { code: "STD", name: "Dobra", exponent: 2 },
+    SVC: { code: "SVC", name: "El Salvador Colon", exponent: 2 },
+    SYP: { code: "SYP", name: "Syrian Pound", exponent: 2 },
+    SZL: { code: "SZL", name: "Lilangeni", exponent: 2 },
+    THB: { code: "THB", name: "Baht", exponent: 2 },
+    TJS: { code: "TJS", name: "Somoni", exponent: 2 },
+    TMT: { code: "TMT", name: "Turkmenistan New Manat", exponent: 2 },
+    TND: { code: "TND", name: "Tunisian Dinar", exponent: 3 },
+    TOP: { code: "TOP", name: "Pa’anga", exponent: 2 },
+    TRY: { code: "TRY", name: "Turkish Lira", exponent: 2 },
+    TTD: { code: "TTD", name: "Trinidad and Tobago Dollar", exponent: 2 },
+    TWD: { code: "TWD", name: "New Taiwan Dollar", exponent: 2 },
+    TZS: { code: "TZS", name: "Tanzanian Shilling", exponent: 2 },
+    UAH: { code: "UAH", name: "Hryvnia", exponent: 2 },
+    UGX: { code: "UGX", name: "Uganda Shilling", exponent: 0 },
+    USD: { code: "USD", name: "US Dollar", exponent: 2 },
+    USN: { code: "USN", name: "US Dollar (Next day)", exponent: 2 },
+    UYI: { code: "UYI", name: "Uruguay Peso en Unidades Indexadas (URUIURUI)", exponent: 0 },
+    UYU: { code: "UYU", name: "Peso Uruguayo", exponent: 2 },
+    UZS: { code: "UZS", name: "Uzbekistan Sum", exponent: 2 },
+    VEF: { code: "VEF", name: "Bolívar", exponent: 2 },
+    VND: { code: "VND", name: "Dong", exponent: 0 },
+    VUV: { code: "VUV", name: "Vatu", exponent: 0 },
+    WST: { code: "WST", name: "Tala", exponent: 2 },
+    XAF: { code: "XAF", name: "CFA Franc BEAC", exponent: 0 },
+    XCD: { code: "XCD", name: "East Caribbean Dollar", exponent: 2 },
+    XOF: { code: "XOF", name: "CFA Franc BCEAO", exponent: 0 },
+    XPF: { code: "XPF", name: "CFP Franc", exponent: 0 },
+    YER: { code: "YER", name: "Yemeni Rial", exponent: 2 },
+    ZAR: { code: "ZAR", name: "Rand", exponent: 2 },
+    ZMW: { code: "ZMW", name: "Zambian Kwacha", exponent: 2 },
+    ZWL: { code: "ZWL", name: "Zimbabwe Dollar", exponent: 2 }
+};
+timapi.constants.CurrencyType = {
+    local: 0,
+    foreign: 1,
+    dcc: 2
+};
+timapi.constants.Cvm = {
+    pin: 0,
+    pinSignature: 1,
+    signature: 2,
+    onDevice: 3,
+    noCvm: 4
+};
+timapi.constants.DialogFunctions = {
+    showSignatureCapture: 0,
+    showDialog: 1,
+    sendCardCommand: 2
+};
+timapi.constants.EcrInfoType = {
+    os: 0,
+    ecrApplication: 1,
+    eftApi: 2,
+    eftModule: 3
+};
+timapi.constants.FinancialTransactions = {
+    purchase: 0,
+    credit: 1,
+    reversal: 2,
+    preAuthorization: 3,
+    cashAdvance: 4,
+    commit: 5,
+    rollback: 6,
+    giro: 7,
+    combined: 8,
+    authorizeCredit: 9,
+    authorizeDeposit: 10,
+    finalizePurchase: 11,
+    proceed: 12,
+    purchaseForcedAcceptance: 13,
+    purchaseWithCashback: 14,
+    purchasePhoneAuthorized: 15,
+    loadVoucher: 16,
+    collectPoints: 17,
+    purchaseReservation: 18,
+    purchaseReservationPhoneAuthorized: 19,
+    amtAdjustment: 20,
+    purchasePhoneOrdered: 21,
+    purchaseMailOrdered: 22
+};
+timapi.constants.Guides = {
+    retail: 0,
+    unattended: 1,
+    advancedRetail: 2,
+    banking: 3,
+    petrol: 4,
+    dialog: 5,
+    remote: 6,
+    gastro: 7,
+    hospitality: 8,
+    valueAddedServices: 9,
+    austrianUseCases: 10
+};
+timapi.constants.HardwareType = {
+    terminal: 0,
+    eftApplication: 1,
+    pinPad: 2,
+    contactReader: 3,
+    contactlessReader: 4,
+    magStripeReader: 5
+};
+timapi.constants.ImageFileFormat = {
+    jpeg: 0,
+    png: 1
+};
+timapi.constants.KernelType = {
+    emvContact: 0,
+    entryPoint: 1,
+    kernel1: 2,
+    kernel2: 3,
+    kernel3: 4,
+    kernel4: 5,
+    kernel5: 6,
+    kernel6: 7,
+    kernel7: 8
+};
+timapi.constants.ManagementStatus = {
+    closed: 0,
+    open: 1,
+    dialog: 2
+};
+timapi.constants.MerchantAction = {
+    signature: 0,
+    none: 1
+};
+timapi.constants.MerchantOptionType = {
+    additionalMerchantData: 0,
+    multiAccountIndex: 1,
+    multiContractIndex: 2,
+    merchantTid: 3,
+    clerkIdentifier: 4,
+    fuelDispenserNumber: 5,
+    posdnumber: 6,
+    receiptNumber: 7,
+    shiftNumber: 8
+};
+timapi.constants.NonFinancialTransactions = {
+    cancel: 0,
+    balanceInquiry: 1,
+    clientIdentification: 2,
+    initTransaction: 3,
+    holdCommit: 4,
+    reservation: 5,
+    adjustReservation: 6,
+    cancelReservation: 7,
+    loyaltyData: 8,
+    startCheckout: 9,
+    finishCheckout: 10,
+    provideLoyaltyBasket: 11
+};
+timapi.constants.PaymentProtocol = {
+    ep2: 0,
+    ev: 1,
+    valueMaster: 2,
+    v3cxml: 3
+};
+timapi.constants.PosEntryMode = {
+    unspecified: 0,
+    manual: 1,
+    magStripeIncomplete: 2,
+    barCode: 3,
+    ocr: 4,
+    icc: 5,
+    magStripe: 6,
+    magStripeFallback: 7,
+    magStripeFallbackAgain: 8,
+    magStripeFallbackIccFail: 9,
+    emergencyDataEntry: 10,
+    ecommerce: 11,
+    ctlessIcc: 12,
+    ctlessMagStrige: 13
+};
+timapi.constants.PrintFlag = {
+    suppressHeader: 0,
+    suppressSignature: 1,
+    suppressEcrInfo: 2,
+    suppressEftInfo: 3
+};
+timapi.constants.PrintFormat = {
+    noPrint: 0,
+    normal: 1,
+    onDevice: 2,
+    fieldsOnly: 3
+};
+timapi.constants.ProcessingDisposition = {
+    onEcr: 0,
+    onEft: 1
+};
+timapi.constants.ProtocolLevel = {
+    sixml2_2: 0
+};
+timapi.constants.ProtocolType = {
+    sixml: 0
+};
+timapi.constants.Reason = {
+    ok: 0,
+    corr: 1,
+    stop: 2,
+    cardReader: 3,
+    autoConfirm: 4,
+    timeout: 5,
+    codeOk: 6,
+    codeNok: 7,
+    pinOk: 8,
+    pinNok: 9
+};
+timapi.constants.ReceiptItemType = {
+    actId: 0,
+    accPer: 1,
+    acqId: 2,
+    aid: 3,
+    amount: 4,
+    amountDcc: 5,
+    amountOther: 6,
+    authCode: 7,
+    authReslt: 8,
+    authRespC: 9,
+    authRespTextC: 10,
+    brandName: 11,
+    currency: 12,
+    currencyDcc: 13,
+    dccDisclaimer: 14,
+    disclaimer: 15,
+    exponent: 16,
+    exponentDcc: 17,
+    markupDcc: 18,
+    markupExponentDcc: 19,
+    cardNumberPrintableMerchant: 20,
+    cardNumberPrintableCardholder: 21,
+    rateDcc: 22,
+    rateExponentDcc: 23,
+    timeStampDate: 24,
+    timeStampTime: 25,
+    trmId: 26,
+    trxRefNum: 27,
+    trxSeqCnt: 28,
+    posEntryMode: 29,
+    cardExpiryDate: 30,
+    cardNumberEnc: 31,
+    amountSaldo: 32,
+    ecrSeqCounter: 33,
+    panReceiptDol: 34,
+    panReceiptDolIndex: 35
+};
+timapi.constants.ReceiptRequestType = {
+    reprint: 0,
+    list: 1
+};
+timapi.constants.ReceiptType = {
+    purchase: 0,
+    credit: 1,
+    reversal: 2
+};
+timapi.constants.Recipient = {
+    merchant: 0,
+    cardholder: 1,
+    both: 2
+};
+timapi.constants.ResourceId = {
+    enterMileage: 0,
+    enterCarNumber: 1,
+    enterDriverCode: 2,
+    enterFleetId: 3,
+    selectPump: 4,
+    selectWashingStation: 5,
+    selectProgram: 6,
+    selectProduct: 7,
+    loadCard: 8,
+    readCode: 9,
+    checkCode: 10,
+    enterAdditionalInformation: 11,
+    enterCostCenter: 12,
+    enterEmployeeNumber: 13,
+    enterLicensePlate: 14,
+    enterProjectNumber: 15,
+    petrolPrintReceipt: 16,
+    petrolRemoveCard: 17,
+    petrolOutOfOrder: 18,
+    petrolInvalidEntry: 19,
+    petrolRefuelAtPump: 20,
+    petrolSeeOtherScreen: 21,
+    petrolPleaseRefuel: 22,
+    noRechargeCard: 23,
+    showPhoneNumberWithAmount: 24,
+    enterPhoneOrPrepaidNumber: 25,
+    phoneNumberTooLong: 26,
+    phoneNumberTooShort: 27,
+    enterPhoneNumber: 28,
+    pleaseWait: 29,
+    processingDeclined: 30,
+    processingOk: 31,
+    registerCard: 32,
+    welcomeCard: 33,
+    showPhoneNumber: 34,
+    interAccountTransfer: 35,
+    interAccountTransferConfirmation: 36,
+    disbursementFromAccount: 37,
+    depositOwnAccount: 38,
+    emptyDialog: 39,
+    packetAcknowledgement: 40,
+    pinEntry: 41,
+    bankingInsertCard: 42,
+    bankingPinCheck: 43,
+    bankingShowSaldo: 44,
+    bankingConfirmAmount: 45,
+    bankingRemoveCard: 46,
+    bankingWelcome: 47,
+    commonRegular: 48,
+    commonPleaseWait: 49,
+    commonDataSaved: 50,
+    commonCardInitialized: 51,
+    commonCardDeinitialized: 52,
+    commonRemoveCard: 53
+};
+timapi.constants.ResultCode = {
+    ok: 0,
+    apiCancelEcr: 0,
+    apiInvalidAnswer: 1,
+    apiDisabledFeature: 2,
+    apiFunctionDisallowed: 3,
+    apiPersistencyProblem: 4,
+    apiConnectFailServer: 0,
+    apiConnectFailTerminal: 1,
+    apiConnectionLostServer: 2,
+    apiConnectionLostTerminal: 3,
+    ethernetDisconnected: 4,
+    rs232Disconnected: 5,
+    apiTimeoutServer: 6,
+    apiTimeoutTerminal: 7,
+    serverInvalidAnswer: 0,
+    serverInvalidRequest: 1,
+    serverDisabledFeature: 2,
+    serverPersistencyProblem: 3,
+    serverConnectFailTerminal: 0,
+    serverConnectionLostTerminal: 1,
+    serverTimeoutTerminal: 2,
+    ccrUnavailable: 0,
+    mcrUnavailable: 1,
+    nfcUnavailable: 2,
+    displayUnavailable: 3,
+    pinPadUnavailable: 4,
+    rs232Unavailable: 5,
+    rs232NotConfigured: 6,
+    cardReaderErrorCcr: 0,
+    cardReaderErrorMcr: 1,
+    cardReaderErrorNfc: 2,
+    cardErrorCcr: 3,
+    cardErrorMcr: 4,
+    cardErrorNfc: 5,
+    cardReadError: 6,
+    cardReadTimeout: 7,
+    cardInsertionTimeout: 8,
+    cardReaderKeysLost: 9,
+    cardReaderSecurityError: 10,
+    cardTimeout: 11,
+    cardNotReadable: 12,
+    cardInvalidData: 13,
+    cardFunctionNotFound: 14,
+    cardFunctionNotAllowed: 15,
+    pinPadSecurityError: 0,
+    pinPadTampered: 1,
+    pinPadKeysLost: 2,
+    cardholderStop: 0,
+    cardholderTimeout: 1,
+    cardRemoved: 2,
+    timTimeoutEcr: 0,
+    timConnectFailPaymentHost: 1,
+    timConnectionLostPaymentHost: 2,
+    timTimeoutAnswerRs232: 3,
+    timCommunicationFailure: 4,
+    timConfigFailure: 5,
+    timInitFailure: 6,
+    sixmlGeneralError: 0,
+    sixmlInvalidRequest: 1,
+    sixmlWrongCashier: 2,
+    sixmlWrongEcrId: 3,
+    sixmlUnknownReferenceNumber: 4,
+    sixmlWrongState: 5,
+    busyOtherController: 6,
+    busyMaintenance: 7,
+    requestPending: 8,
+    sixmlUnsupportedRequest: 9,
+    trxNoCommonApplications: 0,
+    trxLimitExceeded: 1,
+    trxNoCommonCvm: 2,
+    declinedCvmFailed: 3,
+    trxReferral: 4,
+    trxInvalidAuthResponse: 5,
+    declinedGeneric: 6,
+    declinedSaldoTooLow: 7,
+    declinedWrongPin: 8,
+    declinedCardBlocked: 9,
+    declinedSecurityIssue: 10,
+    declinedUsageControl: 11,
+    declinedDoubleTransaction: 12,
+    declinedGenericFirstAc: 13,
+    declinedGenericSecondAc: 14,
+    trxCommitTimeout: 15,
+    trxRollbackImpossible: 16,
+    cashbackAmountTooLow: 17,
+    cashbackAmountTooHigh: 18,
+    basketDeclined: 19,
+    noTrxInGroupExceeded: 20,
+    unsupportedCharactersInMessage: 21,
+    loyaltyCheckInPending: 22,
+    declinedCardError: 23,
+    declinedCardExpired: 24,
+    declinedTrxInvalid: 25,
+    declinedTryLater: 26,
+    declinedTryAnotherInterface: 27,
+    declinedInvalidMerchant: 28,
+    declinedRestrictionDeclined: 29,
+    declinedWrongCurrency: 30,
+    declinedAutoreversalPending: 31,
+    declinedWrongCardNumber: 32,
+    declinedWrongCardExpiryDate: 33,
+    declinedRetryTemporaryUnavailable: 34,
+    declinedServiceNotAllowed: 35,
+    declinedCardholderInformationIssue: 36,
+    declinedReferralWrongAuthCode: 37,
+    declinedReferralWrongAmount: 38,
+    declinedReferralOtherReason: 39,
+    declinedCaptureCardGeneric: 40,
+    declinedCaptureCardInfoToClient: 41,
+    declinedCaptureCardOrderToClient: 42,
+    declinedCaptureCardTimeoutRemovingCard: 43,
+    declinedNotSupported: 44
+};
+timapi.constants.SecurityStatus = {
+    disabled: 0,
+    active: 1,
+    tampered: 2
+};
+timapi.constants.SettingType = {
+    displayBrightness: 0,
+    displayContrast: 1,
+    keypadTones: 2,
+    alertTones: 3,
+    language: 4
+};
+timapi.constants.SleepModeStatus = {
+    enteringSleep: 0,
+    wakingUp: 1
+};
+timapi.constants.StatusFunctions = {
+    featureRequest: 0,
+    terminalStatus: 1,
+    systemInformation: 2,
+    applicationInformation: 3,
+    hardwareInformation: 4,
+    keepAlive: 5,
+    licenseChanged: 6
+};
+timapi.constants.Theme = {
+    six: 0,
+    swissPost: 1
+};
+timapi.constants.TransactionStatus = {
+    busy: 0,
+    idle: 1,
+    waitForCard: 2,
+    readingCard: 3,
+    applicationSelection: 4,
+    waitForProceed: 5,
+    dccSelection: 6,
+    enterTip: 7,
+    pinEntry: 8,
+    signatureCapture: 9,
+    processing: 10,
+    waitForCommit: 11
+};
+timapi.constants.TransactionType = {
+    purchase: 0,
+    credit: 1,
+    reversal: 2,
+    preAuthorization: 3,
+    finalizePurchase: 4,
+    cashAdvance: 5,
+    purchaseForcedAcceptance: 6,
+    purchaseWithCashback: 7,
+    purchasePhoneAuthorized: 8,
+    purchasePhoneOrdered: 9,
+    purchaseMailOrdered: 10,
+    giro: 11,
+    combined: 12,
+    authorizeCredit: 13,
+    authorizeDeposit: 14,
+    reservation: 15,
+    adjustReservation: 16,
+    cancelReservation: 17,
+    purchaseReservation: 18,
+    purchaseReservationPhoneAuthorized: 19
+};
+timapi.constants.UpdateStatus = {
+    upToDate: 0,
+    runningNoReboot: 1,
+    runningReboot: 2
+};
+timapi.protocol.constants.AdminFunctions = {};
+timapi.protocol.constants.AdminFunctions.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (AdminFunctions)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.AdminFunctions.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.AdminFunctions._timApi2Protocol =
+    new Map([[timapi.constants.AdminFunctions.login, 0x1],
+        [timapi.constants.AdminFunctions.logout, 0x2],
+        [timapi.constants.AdminFunctions.reconfig, 0x4],
+        [timapi.constants.AdminFunctions.reboot, 0x8],
+        [timapi.constants.AdminFunctions.softwareUpdate, 0x10],
+        [timapi.constants.AdminFunctions.activate, 0x20],
+        [timapi.constants.AdminFunctions.deactivate, 0x40],
+        [timapi.constants.AdminFunctions.counterRequest, 0x80],
+        [timapi.constants.AdminFunctions.reconciliation, 0x100],
+        [timapi.constants.AdminFunctions.balance, 0x200],
+        [timapi.constants.AdminFunctions.openDialogMode, 0x400],
+        [timapi.constants.AdminFunctions.closeDialogMode, 0x800],
+        [timapi.constants.AdminFunctions.transmitLog, 0x1000],
+        [timapi.constants.AdminFunctions.startReaderCleaning, 0x2000],
+        [timapi.constants.AdminFunctions.dccRates, 0x4000],
+        [timapi.constants.AdminFunctions.changeSettings, 0x8000],
+        [timapi.constants.AdminFunctions.receiptRequest, 0x10000],
+        [timapi.constants.AdminFunctions.closeReader, 0x20000],
+        [timapi.constants.AdminFunctions.openReader, 0x40000],
+        [timapi.constants.AdminFunctions.ejectCard, 0x80000],
+        [timapi.constants.AdminFunctions.openMaintenanceWindow, 0x100000],
+        [timapi.constants.AdminFunctions.closeMaintenanceWindow, 0x200000],
+        [timapi.constants.AdminFunctions.activateServiceMenu, 0x400000]]);
+timapi.protocol.constants.AdminFunctions._protocol2TimApi =
+    new Map([[0x1, timapi.constants.AdminFunctions.login],
+        [0x2, timapi.constants.AdminFunctions.logout],
+        [0x4, timapi.constants.AdminFunctions.reconfig],
+        [0x8, timapi.constants.AdminFunctions.reboot],
+        [0x10, timapi.constants.AdminFunctions.softwareUpdate],
+        [0x20, timapi.constants.AdminFunctions.activate],
+        [0x40, timapi.constants.AdminFunctions.deactivate],
+        [0x80, timapi.constants.AdminFunctions.counterRequest],
+        [0x100, timapi.constants.AdminFunctions.reconciliation],
+        [0x200, timapi.constants.AdminFunctions.balance],
+        [0x400, timapi.constants.AdminFunctions.openDialogMode],
+        [0x800, timapi.constants.AdminFunctions.closeDialogMode],
+        [0x1000, timapi.constants.AdminFunctions.transmitLog],
+        [0x2000, timapi.constants.AdminFunctions.startReaderCleaning],
+        [0x4000, timapi.constants.AdminFunctions.dccRates],
+        [0x8000, timapi.constants.AdminFunctions.changeSettings],
+        [0x10000, timapi.constants.AdminFunctions.receiptRequest],
+        [0x20000, timapi.constants.AdminFunctions.closeReader],
+        [0x40000, timapi.constants.AdminFunctions.openReader],
+        [0x80000, timapi.constants.AdminFunctions.ejectCard],
+        [0x100000, timapi.constants.AdminFunctions.openMaintenanceWindow],
+        [0x200000, timapi.constants.AdminFunctions.closeMaintenanceWindow],
+        [0x400000, timapi.constants.AdminFunctions.activateServiceMenu]]);
+timapi.protocol.constants.BrandBarBrand = {};
+timapi.protocol.constants.BrandBarBrand.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (BrandBarBrand)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.BrandBarBrand.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (BrandBarBrand)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.BrandBarBrand.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.BrandBarBrand._timApi2Protocol =
+    new Map([[timapi.constants.BrandBarBrand.alipay, "Alipay"],
+        [timapi.constants.BrandBarBrand.amex, "Amex"],
+        [timapi.constants.BrandBarBrand.bonuscard, "Bonuscard"],
+        [timapi.constants.BrandBarBrand.cash, "Cash"],
+        [timapi.constants.BrandBarBrand.conforama, "Conforama"],
+        [timapi.constants.BrandBarBrand.coopMobile, "CoopMobile"],
+        [timapi.constants.BrandBarBrand.cup, "CUP"],
+        [timapi.constants.BrandBarBrand.diners, "Diners"],
+        [timapi.constants.BrandBarBrand.dinerClub, "DinerClub"],
+        [timapi.constants.BrandBarBrand.jcb, "Jcb"],
+        [timapi.constants.BrandBarBrand.lebara, "Lebara"],
+        [timapi.constants.BrandBarBrand.lycaMobile, "LycaMobile"],
+        [timapi.constants.BrandBarBrand.maestro, "Maestro"],
+        [timapi.constants.BrandBarBrand.masterCard, "MasterCard"],
+        [timapi.constants.BrandBarBrand.mbudgetMc, "MBudgetMc"],
+        [timapi.constants.BrandBarBrand.mcard, "MCard"],
+        [timapi.constants.BrandBarBrand.mediaMarkt, "MediaMarkt"],
+        [timapi.constants.BrandBarBrand.myOne, "MyOne"],
+        [timapi.constants.BrandBarBrand.salt, "Salt."],
+        [timapi.constants.BrandBarBrand.pharmacard, "Pharmacard"],
+        [timapi.constants.BrandBarBrand.phonecard, "Phonecard"],
+        [timapi.constants.BrandBarBrand.postCard, "PostCard"],
+        [timapi.constants.BrandBarBrand.powerCard, "PowerCard"],
+        [timapi.constants.BrandBarBrand.reka, "Reka"],
+        [timapi.constants.BrandBarBrand.sunrise, "Sunrise"],
+        [timapi.constants.BrandBarBrand.supercardPlus, "SupercardPlus"],
+        [timapi.constants.BrandBarBrand.swisscom, "Swisscom"],
+        [timapi.constants.BrandBarBrand.visa, "Visa"],
+        [timapi.constants.BrandBarBrand.visaElectron, "VisaElectron"],
+        [timapi.constants.BrandBarBrand.vpay, "VPay"],
+        [timapi.constants.BrandBarBrand.wirCard, "WirCard"],
+        [timapi.constants.BrandBarBrand.yallo, "Yallo"]]);
+timapi.protocol.constants.BrandBarBrand._protocol2TimApi =
+    new Map([["Alipay", timapi.constants.BrandBarBrand.alipay],
+        ["Amex", timapi.constants.BrandBarBrand.amex],
+        ["Bonuscard", timapi.constants.BrandBarBrand.bonuscard],
+        ["Cash", timapi.constants.BrandBarBrand.cash],
+        ["Conforama", timapi.constants.BrandBarBrand.conforama],
+        ["CoopMobile", timapi.constants.BrandBarBrand.coopMobile],
+        ["CUP", timapi.constants.BrandBarBrand.cup],
+        ["Diners", timapi.constants.BrandBarBrand.diners],
+        ["DinerClub", timapi.constants.BrandBarBrand.dinerClub],
+        ["Jcb", timapi.constants.BrandBarBrand.jcb],
+        ["Lebara", timapi.constants.BrandBarBrand.lebara],
+        ["LycaMobile", timapi.constants.BrandBarBrand.lycaMobile],
+        ["Maestro", timapi.constants.BrandBarBrand.maestro],
+        ["MasterCard", timapi.constants.BrandBarBrand.masterCard],
+        ["MBudgetMc", timapi.constants.BrandBarBrand.mbudgetMc],
+        ["MCard", timapi.constants.BrandBarBrand.mcard],
+        ["MediaMarkt", timapi.constants.BrandBarBrand.mediaMarkt],
+        ["MyOne", timapi.constants.BrandBarBrand.myOne],
+        ["Salt.", timapi.constants.BrandBarBrand.salt],
+        ["Pharmacard", timapi.constants.BrandBarBrand.pharmacard],
+        ["Phonecard", timapi.constants.BrandBarBrand.phonecard],
+        ["PostCard", timapi.constants.BrandBarBrand.postCard],
+        ["PowerCard", timapi.constants.BrandBarBrand.powerCard],
+        ["Reka", timapi.constants.BrandBarBrand.reka],
+        ["Sunrise", timapi.constants.BrandBarBrand.sunrise],
+        ["SupercardPlus", timapi.constants.BrandBarBrand.supercardPlus],
+        ["Swisscom", timapi.constants.BrandBarBrand.swisscom],
+        ["Visa", timapi.constants.BrandBarBrand.visa],
+        ["VisaElectron", timapi.constants.BrandBarBrand.visaElectron],
+        ["VPay", timapi.constants.BrandBarBrand.vpay],
+        ["WirCard", timapi.constants.BrandBarBrand.wirCard],
+        ["Yallo", timapi.constants.BrandBarBrand.yallo]]);
+timapi.protocol.constants.BrandMode = {};
+timapi.protocol.constants.BrandMode.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (BrandMode)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.BrandMode.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (BrandMode)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.BrandMode.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.BrandMode._timApi2Protocol =
+    new Map([[timapi.constants.BrandMode.all, "All"],
+        [timapi.constants.BrandMode.selected, "Selected"],
+        [timapi.constants.BrandMode.off, "Off"]]);
+timapi.protocol.constants.BrandMode._protocol2TimApi =
+    new Map([["All", timapi.constants.BrandMode.all],
+        ["Selected", timapi.constants.BrandMode.selected],
+        ["Off", timapi.constants.BrandMode.off]]);
+timapi.protocol.constants.CardReaderStatus = {};
+timapi.protocol.constants.CardReaderStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CardReaderStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.CardReaderStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CardReaderStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CardReaderStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CardReaderStatus._timApi2Protocol =
+    new Map([[timapi.constants.CardReaderStatus.cardReaderClosed, "CardReaderClosed"],
+        [timapi.constants.CardReaderStatus.cardManuallyEntered, "CardManuallyEntered"],
+        [timapi.constants.CardReaderStatus.cardSwiped, "CardSwiped"],
+        [timapi.constants.CardReaderStatus.cardNotRemoved, "CardNotRemoved"],
+        [timapi.constants.CardReaderStatus.cardPresented, "CardPresented"],
+        [timapi.constants.CardReaderStatus.cardReaderEmpty, "CardReaderEmpty"],
+        [timapi.constants.CardReaderStatus.cardInserted, "CardInserted"],
+        [timapi.constants.CardReaderStatus.cardEjected, "CardEjected"]]);
+timapi.protocol.constants.CardReaderStatus._protocol2TimApi =
+    new Map([["CardReaderClosed", timapi.constants.CardReaderStatus.cardReaderClosed],
+        ["CardManuallyEntered", timapi.constants.CardReaderStatus.cardManuallyEntered],
+        ["CardSwiped", timapi.constants.CardReaderStatus.cardSwiped],
+        ["CardNotRemoved", timapi.constants.CardReaderStatus.cardNotRemoved],
+        ["CardPresented", timapi.constants.CardReaderStatus.cardPresented],
+        ["CardReaderEmpty", timapi.constants.CardReaderStatus.cardReaderEmpty],
+        ["CardInserted", timapi.constants.CardReaderStatus.cardInserted],
+        ["CardEjected", timapi.constants.CardReaderStatus.cardEjected]]);
+timapi.protocol.constants.ConnectionStatus = {};
+timapi.protocol.constants.ConnectionStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ConnectionStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ConnectionStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ConnectionStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ConnectionStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ConnectionStatus._timApi2Protocol =
+    new Map([[timapi.constants.ConnectionStatus.disconnected, "Disconnected"],
+        [timapi.constants.ConnectionStatus.loggedOut, "LoggedOut"],
+        [timapi.constants.ConnectionStatus.loggedIn, "LoggedIn"]]);
+timapi.protocol.constants.ConnectionStatus._protocol2TimApi =
+    new Map([["Disconnected", timapi.constants.ConnectionStatus.disconnected],
+        ["LoggedOut", timapi.constants.ConnectionStatus.loggedOut],
+        ["LoggedIn", timapi.constants.ConnectionStatus.loggedIn]]);
+timapi.protocol.constants.CounterType = {};
+timapi.protocol.constants.CounterType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CounterType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.CounterType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CounterType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CounterType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CounterType._timApi2Protocol =
+    new Map([[timapi.constants.CounterType.shift, "Shift"],
+        [timapi.constants.CounterType.balance, "Balance"]]);
+timapi.protocol.constants.CounterType._protocol2TimApi =
+    new Map([["Shift", timapi.constants.CounterType.shift],
+        ["Balance", timapi.constants.CounterType.balance]]);
+timapi.protocol.constants.CurrencyType = {};
+timapi.protocol.constants.CurrencyType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CurrencyType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.CurrencyType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CurrencyType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CurrencyType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CurrencyType._timApi2Protocol =
+    new Map([[timapi.constants.CurrencyType.local, "Local"],
+        [timapi.constants.CurrencyType.foreign, "Foreign"],
+        [timapi.constants.CurrencyType.dcc, "Dcc"]]);
+timapi.protocol.constants.CurrencyType._protocol2TimApi =
+    new Map([["Local", timapi.constants.CurrencyType.local],
+        ["Foreign", timapi.constants.CurrencyType.foreign],
+        ["Dcc", timapi.constants.CurrencyType.dcc]]);
+timapi.protocol.constants.Cvm = {};
+timapi.protocol.constants.Cvm.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Cvm)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.Cvm.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Cvm)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Cvm.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Cvm._timApi2Protocol =
+    new Map([[timapi.constants.Cvm.pin, "Pin"],
+        [timapi.constants.Cvm.pinSignature, "PinSignature"],
+        [timapi.constants.Cvm.signature, "Signature"],
+        [timapi.constants.Cvm.onDevice, "OnDevice"],
+        [timapi.constants.Cvm.noCvm, "NoCvm"]]);
+timapi.protocol.constants.Cvm._protocol2TimApi =
+    new Map([["Pin", timapi.constants.Cvm.pin],
+        ["PinSignature", timapi.constants.Cvm.pinSignature],
+        ["Signature", timapi.constants.Cvm.signature],
+        ["OnDevice", timapi.constants.Cvm.onDevice],
+        ["NoCvm", timapi.constants.Cvm.noCvm]]);
+timapi.protocol.constants.DialogFunctions = {};
+timapi.protocol.constants.DialogFunctions.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (DialogFunctions)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.DialogFunctions.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.DialogFunctions._timApi2Protocol =
+    new Map([[timapi.constants.DialogFunctions.showSignatureCapture, 0x1],
+        [timapi.constants.DialogFunctions.showDialog, 0x2],
+        [timapi.constants.DialogFunctions.sendCardCommand, 0x4]]);
+timapi.protocol.constants.DialogFunctions._protocol2TimApi =
+    new Map([[0x1, timapi.constants.DialogFunctions.showSignatureCapture],
+        [0x2, timapi.constants.DialogFunctions.showDialog],
+        [0x4, timapi.constants.DialogFunctions.sendCardCommand]]);
+timapi.protocol.constants.EcrInfoType = {};
+timapi.protocol.constants.EcrInfoType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (EcrInfoType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.EcrInfoType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (EcrInfoType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.EcrInfoType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.EcrInfoType._timApi2Protocol =
+    new Map([[timapi.constants.EcrInfoType.os, "Os"],
+        [timapi.constants.EcrInfoType.ecrApplication, "EcrApplication"],
+        [timapi.constants.EcrInfoType.eftApi, "EftAPI"],
+        [timapi.constants.EcrInfoType.eftModule, "EftModule"]]);
+timapi.protocol.constants.EcrInfoType._protocol2TimApi =
+    new Map([["Os", timapi.constants.EcrInfoType.os],
+        ["EcrApplication", timapi.constants.EcrInfoType.ecrApplication],
+        ["EftAPI", timapi.constants.EcrInfoType.eftApi],
+        ["EftModule", timapi.constants.EcrInfoType.eftModule]]);
+timapi.protocol.constants.FeatureType = {
+    sixmlGuides: "sixml:Guides",
+    sixmlProtocolLevel: "sixml:ProtocolLevel",
+    sixmlStatusFunctions: "sixml:StatusFunctions",
+    sixmlAdminFunctions: "sixml:AdminFunctions",
+    sixmlFinancialTransactions: "sixml:FinancialTransactions",
+    sixmlNonFinancialTransactions: "sixml:NonFinancialTransactions",
+    sixmlRemoteFunctions: "sixml:RemoteFunctions",
+    sixmlDialogFunctions: "sixml:DialogFunctions",
+    sixmlAutoCommit: "sixml:AutoCommit",
+    sixmlAutoShiftManagement: "sixml:AutoShiftManagement",
+    sixmlAutoShutterManagement: "sixml:AutoShutterManagement",
+    sixmlSleepTimer: "sixml:SleepTimer",
+    sixmlSwUpdateInformation: "sixml:SwUpdateInformation",
+    sixmlRequestRepetition: "sixml:RequestRepetition",
+    sixmlAllowClosedCardInsertion: "sixml:AllowClosedCardInsert",
+    paymentDcc: "pay:Dcc",
+    paymentDeclinedReceipts: "pay:DeclinedReceipts",
+    paymentPartialApproval: "pay:PartialApproval",
+    paymentPartialCommit: "pay:PartialCommit",
+    ep2Available: "pp:ep2:Available",
+    ep2Dcc: "pp:ep2:Dcc",
+    ep2DeclinedReceipts: "pp:ep2:DeclinedReceipts",
+    ep2MultiAccountSelection: "pp:ep2:MultiAccountSelection",
+    ep2MultiContractSelection: "pp:ep2:MultiContractSelection",
+    hardwarePrinterInstalled: "hw:Printer:Installed",
+    hardwareDisplayCardholderInstalled: "hw:Display:Cardholder:Installed",
+    hardwareDisplayMerchantInstalled: "hw:Display:Merchant:Installed",
+    hardwareSettingDisplayBrightness: "hw:Setting:Display:Brightness",
+    hardwareSettingDisplayContrast: "hw:Setting:Display:Contrast",
+    hardwareSettingTonesAlert: "hw:Setting:Tones:Alert",
+    hardwareSettingTonesKeypad: "hw:Setting:Tones:Keypad"
+};
+timapi.protocol.constants.FinancialTransactions = {};
+timapi.protocol.constants.FinancialTransactions.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (FinancialTransactions)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.FinancialTransactions.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.FinancialTransactions._timApi2Protocol =
+    new Map([[timapi.constants.FinancialTransactions.purchase, 0x1],
+        [timapi.constants.FinancialTransactions.credit, 0x2],
+        [timapi.constants.FinancialTransactions.reversal, 0x4],
+        [timapi.constants.FinancialTransactions.preAuthorization, 0x8],
+        [timapi.constants.FinancialTransactions.cashAdvance, 0x10],
+        [timapi.constants.FinancialTransactions.commit, 0x20],
+        [timapi.constants.FinancialTransactions.rollback, 0x40],
+        [timapi.constants.FinancialTransactions.giro, 0x80],
+        [timapi.constants.FinancialTransactions.combined, 0x100],
+        [timapi.constants.FinancialTransactions.authorizeCredit, 0x200],
+        [timapi.constants.FinancialTransactions.authorizeDeposit, 0x400],
+        [timapi.constants.FinancialTransactions.finalizePurchase, 0x800],
+        [timapi.constants.FinancialTransactions.proceed, 0x1000],
+        [timapi.constants.FinancialTransactions.purchaseForcedAcceptance, 0x2000],
+        [timapi.constants.FinancialTransactions.purchaseWithCashback, 0x4000],
+        [timapi.constants.FinancialTransactions.purchasePhoneAuthorized, 0x8000],
+        [timapi.constants.FinancialTransactions.loadVoucher, 0x10000],
+        [timapi.constants.FinancialTransactions.collectPoints, 0x20000],
+        [timapi.constants.FinancialTransactions.purchaseReservation, 0x40000],
+        [timapi.constants.FinancialTransactions.purchaseReservationPhoneAuthorized, 0x80000],
+        [timapi.constants.FinancialTransactions.amtAdjustment, 0x100000],
+        [timapi.constants.FinancialTransactions.purchasePhoneOrdered, 0x200000],
+        [timapi.constants.FinancialTransactions.purchaseMailOrdered, 0x400000]]);
+timapi.protocol.constants.FinancialTransactions._protocol2TimApi =
+    new Map([[0x1, timapi.constants.FinancialTransactions.purchase],
+        [0x2, timapi.constants.FinancialTransactions.credit],
+        [0x4, timapi.constants.FinancialTransactions.reversal],
+        [0x8, timapi.constants.FinancialTransactions.preAuthorization],
+        [0x10, timapi.constants.FinancialTransactions.cashAdvance],
+        [0x20, timapi.constants.FinancialTransactions.commit],
+        [0x40, timapi.constants.FinancialTransactions.rollback],
+        [0x80, timapi.constants.FinancialTransactions.giro],
+        [0x100, timapi.constants.FinancialTransactions.combined],
+        [0x200, timapi.constants.FinancialTransactions.authorizeCredit],
+        [0x400, timapi.constants.FinancialTransactions.authorizeDeposit],
+        [0x800, timapi.constants.FinancialTransactions.finalizePurchase],
+        [0x1000, timapi.constants.FinancialTransactions.proceed],
+        [0x2000, timapi.constants.FinancialTransactions.purchaseForcedAcceptance],
+        [0x4000, timapi.constants.FinancialTransactions.purchaseWithCashback],
+        [0x8000, timapi.constants.FinancialTransactions.purchasePhoneAuthorized],
+        [0x10000, timapi.constants.FinancialTransactions.loadVoucher],
+        [0x20000, timapi.constants.FinancialTransactions.collectPoints],
+        [0x40000, timapi.constants.FinancialTransactions.purchaseReservation],
+        [0x80000, timapi.constants.FinancialTransactions.purchaseReservationPhoneAuthorized],
+        [0x100000, timapi.constants.FinancialTransactions.amtAdjustment],
+        [0x200000, timapi.constants.FinancialTransactions.purchasePhoneOrdered],
+        [0x400000, timapi.constants.FinancialTransactions.purchaseMailOrdered]]);
+timapi.protocol.constants.Function = {
+    terminalStatus: "TerminalStatus",
+    featureRequest: "FeatureRequest",
+    systemInformation: "SystemInformation",
+    applicationInformation: "ApplicationInformation",
+    hardwareInformation: "HardwareInformation",
+    keepAlive: "KeepAlive",
+    licenseChanged: "LicenseChanged",
+    login: "Login",
+    logout: "Logout",
+    reconfig: "Reconfig",
+    reboot: "Reboot",
+    softwareUpdate: "SoftwareUpdate",
+    changeSettings: "ChangeSettings",
+    activate: "Activate",
+    deactivate: "Deactivate",
+    counterRequest: "CounterRequest",
+    reconciliation: "Reconciliation",
+    balance: "Balance",
+    dccRates: "DccRates",
+    cancel: "Cancel",
+    purchase: "Purchase",
+    credit: "Credit",
+    reversal: "Reversal",
+    commit: "Commit",
+    rollback: "Rollback",
+    receiptRequest: "ReceiptRequest",
+    preAuthorization: "PreAuthorization",
+    finalizePurchase: "FinalizePurchase",
+    initTransaction: "InitTransaction",
+    closeReader: "CloseReader",
+    openReader: "OpenReader",
+    ejectCard: "EjectCard",
+    openMaintenanceWindow: "OpenMaintenanceWindow",
+    holdCommit: "HoldCommit",
+    closeMaintenanceWindow: "CloseMaintenanceWindow",
+    activateServiceMenu: "ActivateServiceMenu",
+    amtAdjustment: "AmtAdjustment",
+    balanceInquiry: "BalanceInquiry",
+    cashAdvance: "CashAdvance",
+    purchaseForcedAcceptance: "PurchaseForcedAcceptance",
+    purchaseWithCashback: "PurchaseWithCashback",
+    purchasePhoneAuthorized: "PurchasePhoneAuthorized",
+    purchasePhoneOrdered: "PurchasePhoneOrdered",
+    purchaseMailOrdered: "PurchaseMailOrdered",
+    giro: "Giro",
+    combined: "Combined",
+    authorizeCredit: "AuthorizeCredit",
+    authorizeDeposit: "AuthorizeDeposit",
+    openDialogMode: "OpenDialogMode",
+    closeDialogMode: "CloseDialogMode",
+    showSignatureCapture: "ShowSignatureCapture",
+    showDialog: "ShowDialog",
+    sendCardCommand: "SendCardCommand",
+    transmitLog: "TransmitLog",
+    screenshot: "Screenshot",
+    reservation: "Reservation",
+    adjustReservation: "AdjustReservation",
+    cancelReservation: "CancelReservation",
+    purchaseReservation: "PurchaseReservation",
+    purchaseReservationPhoneAuthorized: "PurchaseReservationPhoneAuthorized",
+    loadVoucher: "LoadVoucher",
+    collectPoints: "CollectPoints",
+    loyaltyData: "LoyaltyData",
+    startCheckout: "StartCheckout",
+    finishCheckout: "FinishCheckout",
+    provideLoyaltyBasket: "ProvideLoyaltyBasket",
+    loyaltyInfo: "LoyaltyInfo"
+};
+timapi.protocol.constants.FunctionGroup = {
+    status: "Status",
+    admin: "Admin",
+    finTransaction: "FinTransaction",
+    nonFinTransaction: "NonFinTransaction",
+    dialog: "Dialog",
+    remote: "Remote"
+};
+timapi.protocol.constants.Guides = {};
+timapi.protocol.constants.Guides.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (Guides)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.Guides.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.Guides._timApi2Protocol =
+    new Map([[timapi.constants.Guides.retail, 0x1],
+        [timapi.constants.Guides.unattended, 0x2],
+        [timapi.constants.Guides.advancedRetail, 0x4],
+        [timapi.constants.Guides.banking, 0x8],
+        [timapi.constants.Guides.petrol, 0x10],
+        [timapi.constants.Guides.dialog, 0x20],
+        [timapi.constants.Guides.remote, 0x40],
+        [timapi.constants.Guides.gastro, 0x80],
+        [timapi.constants.Guides.hospitality, 0x100],
+        [timapi.constants.Guides.valueAddedServices, 0x200],
+        [timapi.constants.Guides.austrianUseCases, 0x400]]);
+timapi.protocol.constants.Guides._protocol2TimApi =
+    new Map([[0x1, timapi.constants.Guides.retail],
+        [0x2, timapi.constants.Guides.unattended],
+        [0x4, timapi.constants.Guides.advancedRetail],
+        [0x8, timapi.constants.Guides.banking],
+        [0x10, timapi.constants.Guides.petrol],
+        [0x20, timapi.constants.Guides.dialog],
+        [0x40, timapi.constants.Guides.remote],
+        [0x80, timapi.constants.Guides.gastro],
+        [0x100, timapi.constants.Guides.hospitality],
+        [0x200, timapi.constants.Guides.valueAddedServices],
+        [0x400, timapi.constants.Guides.austrianUseCases]]);
+timapi.protocol.constants.HardwareType = {};
+timapi.protocol.constants.HardwareType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (HardwareType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.HardwareType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (HardwareType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.HardwareType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.HardwareType._timApi2Protocol =
+    new Map([[timapi.constants.HardwareType.terminal, "Terminal"],
+        [timapi.constants.HardwareType.eftApplication, "EftApplication"],
+        [timapi.constants.HardwareType.pinPad, "PinPad"],
+        [timapi.constants.HardwareType.contactReader, "ContactReader"],
+        [timapi.constants.HardwareType.contactlessReader, "ContactlessReader"],
+        [timapi.constants.HardwareType.magStripeReader, "MagStripeReader"]]);
+timapi.protocol.constants.HardwareType._protocol2TimApi =
+    new Map([["Terminal", timapi.constants.HardwareType.terminal],
+        ["EftApplication", timapi.constants.HardwareType.eftApplication],
+        ["PinPad", timapi.constants.HardwareType.pinPad],
+        ["ContactReader", timapi.constants.HardwareType.contactReader],
+        ["ContactlessReader", timapi.constants.HardwareType.contactlessReader],
+        ["MagStripeReader", timapi.constants.HardwareType.magStripeReader]]);
+timapi.protocol.constants.ImageFileFormat = {};
+timapi.protocol.constants.ImageFileFormat.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ImageFileFormat)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ImageFileFormat.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ImageFileFormat)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ImageFileFormat.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ImageFileFormat._timApi2Protocol =
+    new Map([[timapi.constants.ImageFileFormat.jpeg, "Jpeg"],
+        [timapi.constants.ImageFileFormat.png, "Png"]]);
+timapi.protocol.constants.ImageFileFormat._protocol2TimApi =
+    new Map([["Jpeg", timapi.constants.ImageFileFormat.jpeg],
+        ["Png", timapi.constants.ImageFileFormat.png]]);
+timapi.protocol.constants.KernelType = {};
+timapi.protocol.constants.KernelType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (KernelType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.KernelType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (KernelType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.KernelType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.KernelType._timApi2Protocol =
+    new Map([[timapi.constants.KernelType.emvContact, -1],
+        [timapi.constants.KernelType.entryPoint, 0],
+        [timapi.constants.KernelType.kernel1, 1],
+        [timapi.constants.KernelType.kernel2, 2],
+        [timapi.constants.KernelType.kernel3, 3],
+        [timapi.constants.KernelType.kernel4, 4],
+        [timapi.constants.KernelType.kernel5, 5],
+        [timapi.constants.KernelType.kernel6, 6],
+        [timapi.constants.KernelType.kernel7, 7]]);
+timapi.protocol.constants.KernelType._protocol2TimApi =
+    new Map([[-1, timapi.constants.KernelType.emvContact],
+        [0, timapi.constants.KernelType.entryPoint],
+        [1, timapi.constants.KernelType.kernel1],
+        [2, timapi.constants.KernelType.kernel2],
+        [3, timapi.constants.KernelType.kernel3],
+        [4, timapi.constants.KernelType.kernel4],
+        [5, timapi.constants.KernelType.kernel5],
+        [6, timapi.constants.KernelType.kernel6],
+        [7, timapi.constants.KernelType.kernel7]]);
+timapi.protocol.constants.ManagementStatus = {};
+timapi.protocol.constants.ManagementStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ManagementStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ManagementStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ManagementStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ManagementStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ManagementStatus._timApi2Protocol =
+    new Map([[timapi.constants.ManagementStatus.closed, "Closed"],
+        [timapi.constants.ManagementStatus.open, "Open"],
+        [timapi.constants.ManagementStatus.dialog, "Dialog"]]);
+timapi.protocol.constants.ManagementStatus._protocol2TimApi =
+    new Map([["Closed", timapi.constants.ManagementStatus.closed],
+        ["Open", timapi.constants.ManagementStatus.open],
+        ["Dialog", timapi.constants.ManagementStatus.dialog]]);
+timapi.protocol.constants.MerchantAction = {};
+timapi.protocol.constants.MerchantAction.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (MerchantAction)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.MerchantAction.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (MerchantAction)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.MerchantAction.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.MerchantAction._timApi2Protocol =
+    new Map([[timapi.constants.MerchantAction.signature, "Signature"],
+        [timapi.constants.MerchantAction.none, "None"]]);
+timapi.protocol.constants.MerchantAction._protocol2TimApi =
+    new Map([["Signature", timapi.constants.MerchantAction.signature],
+        ["None", timapi.constants.MerchantAction.none]]);
+timapi.protocol.constants.MerchantOptionType = {};
+timapi.protocol.constants.MerchantOptionType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (MerchantOptionType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.MerchantOptionType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (MerchantOptionType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.MerchantOptionType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.MerchantOptionType._timApi2Protocol =
+    new Map([[timapi.constants.MerchantOptionType.additionalMerchantData, "AdditionalMerchantData"],
+        [timapi.constants.MerchantOptionType.multiAccountIndex, "MultiAccountIndex"],
+        [timapi.constants.MerchantOptionType.multiContractIndex, "MultiContractIndex"],
+        [timapi.constants.MerchantOptionType.merchantTid, "MerchantTid"],
+        [timapi.constants.MerchantOptionType.clerkIdentifier, "ClerkIdentifier"],
+        [timapi.constants.MerchantOptionType.fuelDispenserNumber, "FuelDispenserNumber"],
+        [timapi.constants.MerchantOptionType.posdnumber, "POSDNumber"],
+        [timapi.constants.MerchantOptionType.receiptNumber, "ReceiptNumber"],
+        [timapi.constants.MerchantOptionType.shiftNumber, "ShiftNumber"]]);
+timapi.protocol.constants.MerchantOptionType._protocol2TimApi =
+    new Map([["AdditionalMerchantData", timapi.constants.MerchantOptionType.additionalMerchantData],
+        ["MultiAccountIndex", timapi.constants.MerchantOptionType.multiAccountIndex],
+        ["MultiContractIndex", timapi.constants.MerchantOptionType.multiContractIndex],
+        ["MerchantTid", timapi.constants.MerchantOptionType.merchantTid],
+        ["ClerkIdentifier", timapi.constants.MerchantOptionType.clerkIdentifier],
+        ["FuelDispenserNumber", timapi.constants.MerchantOptionType.fuelDispenserNumber],
+        ["POSDNumber", timapi.constants.MerchantOptionType.posdnumber],
+        ["ReceiptNumber", timapi.constants.MerchantOptionType.receiptNumber],
+        ["ShiftNumber", timapi.constants.MerchantOptionType.shiftNumber]]);
+timapi.protocol.constants.NonFinancialTransactions = {};
+timapi.protocol.constants.NonFinancialTransactions.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (NonFinancialTransactions)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.NonFinancialTransactions.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.NonFinancialTransactions._timApi2Protocol =
+    new Map([[timapi.constants.NonFinancialTransactions.cancel, 0x1],
+        [timapi.constants.NonFinancialTransactions.balanceInquiry, 0x2],
+        [timapi.constants.NonFinancialTransactions.clientIdentification, 0x4],
+        [timapi.constants.NonFinancialTransactions.initTransaction, 0x8],
+        [timapi.constants.NonFinancialTransactions.holdCommit, 0x10],
+        [timapi.constants.NonFinancialTransactions.reservation, 0x20],
+        [timapi.constants.NonFinancialTransactions.adjustReservation, 0x40],
+        [timapi.constants.NonFinancialTransactions.cancelReservation, 0x80],
+        [timapi.constants.NonFinancialTransactions.loyaltyData, 0x200],
+        [timapi.constants.NonFinancialTransactions.startCheckout, 0x400],
+        [timapi.constants.NonFinancialTransactions.finishCheckout, 0x800],
+        [timapi.constants.NonFinancialTransactions.provideLoyaltyBasket, 0x1000]]);
+timapi.protocol.constants.NonFinancialTransactions._protocol2TimApi =
+    new Map([[0x1, timapi.constants.NonFinancialTransactions.cancel],
+        [0x2, timapi.constants.NonFinancialTransactions.balanceInquiry],
+        [0x4, timapi.constants.NonFinancialTransactions.clientIdentification],
+        [0x8, timapi.constants.NonFinancialTransactions.initTransaction],
+        [0x10, timapi.constants.NonFinancialTransactions.holdCommit],
+        [0x20, timapi.constants.NonFinancialTransactions.reservation],
+        [0x40, timapi.constants.NonFinancialTransactions.adjustReservation],
+        [0x80, timapi.constants.NonFinancialTransactions.cancelReservation],
+        [0x200, timapi.constants.NonFinancialTransactions.loyaltyData],
+        [0x400, timapi.constants.NonFinancialTransactions.startCheckout],
+        [0x800, timapi.constants.NonFinancialTransactions.finishCheckout],
+        [0x1000, timapi.constants.NonFinancialTransactions.provideLoyaltyBasket]]);
+timapi.protocol.constants.OptionType = {
+    sixmlAutoCommit: "sixml:AutoCommit",
+    sixmlProtocolLevel: "sixml:ProtocolLevel",
+    sixmlCommitTimeout: "sixml:CommitTimeout",
+    sixmlProceedTimeout: "sixml:ProceedTimeout",
+    sixmlGuides: "sixml:Guides",
+    sixmlCardInsertionTimeout: "sixml:CardInsertionTimeout",
+    sixmlCardRemovalTimeout: "sixml:CardRemovalTimeout",
+    sixmlAutoShiftManagement: "sixml:AutoShiftManagement",
+    sixmlAutoShutterManagement: "sixml:AutoShutterManagement",
+    sixmlPartialApproval: "sixml:PartialApproval",
+    sixmlDcc: "sixml:Dcc",
+    sixmlTip: "sixml:Tip",
+    sixmlPartialCommit: "sixml:PartialCommit",
+    sixmlProceedRequired: "sixml:ProceedRequired",
+    sixmlAllowClosedCardInsert: "sixml:AllowClosedCardInsert",
+    sixmlQrctimeout: "sixml:QRCTimeout",
+    sixmlLateCheckinTimeout: "sixml:LateCheckinTimeout"
+};
+timapi.protocol.constants.PaymentProtocol = {};
+timapi.protocol.constants.PaymentProtocol.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (PaymentProtocol)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.PaymentProtocol.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (PaymentProtocol)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.PaymentProtocol.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.PaymentProtocol._timApi2Protocol =
+    new Map([[timapi.constants.PaymentProtocol.ep2, "ep2"],
+        [timapi.constants.PaymentProtocol.ev, "ev"],
+        [timapi.constants.PaymentProtocol.valueMaster, "vm"],
+        [timapi.constants.PaymentProtocol.v3cxml, "3CXml"]]);
+timapi.protocol.constants.PaymentProtocol._protocol2TimApi =
+    new Map([["ep2", timapi.constants.PaymentProtocol.ep2],
+        ["ev", timapi.constants.PaymentProtocol.ev],
+        ["vm", timapi.constants.PaymentProtocol.valueMaster],
+        ["3CXml", timapi.constants.PaymentProtocol.v3cxml]]);
+timapi.protocol.constants.PosEntryMode = {};
+timapi.protocol.constants.PosEntryMode.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (PosEntryMode)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.PosEntryMode.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (PosEntryMode)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.PosEntryMode.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.PosEntryMode._timApi2Protocol =
+    new Map([[timapi.constants.PosEntryMode.unspecified, 0],
+        [timapi.constants.PosEntryMode.manual, 1],
+        [timapi.constants.PosEntryMode.magStripeIncomplete, 2],
+        [timapi.constants.PosEntryMode.barCode, 3],
+        [timapi.constants.PosEntryMode.ocr, 4],
+        [timapi.constants.PosEntryMode.icc, 5],
+        [timapi.constants.PosEntryMode.magStripe, 90],
+        [timapi.constants.PosEntryMode.magStripeFallback, 91],
+        [timapi.constants.PosEntryMode.magStripeFallbackAgain, 92],
+        [timapi.constants.PosEntryMode.magStripeFallbackIccFail, 93],
+        [timapi.constants.PosEntryMode.emergencyDataEntry, 94],
+        [timapi.constants.PosEntryMode.ecommerce, 95],
+        [timapi.constants.PosEntryMode.ctlessIcc, 97],
+        [timapi.constants.PosEntryMode.ctlessMagStrige, 98]]);
+timapi.protocol.constants.PosEntryMode._protocol2TimApi =
+    new Map([[0, timapi.constants.PosEntryMode.unspecified],
+        [1, timapi.constants.PosEntryMode.manual],
+        [2, timapi.constants.PosEntryMode.magStripeIncomplete],
+        [3, timapi.constants.PosEntryMode.barCode],
+        [4, timapi.constants.PosEntryMode.ocr],
+        [5, timapi.constants.PosEntryMode.icc],
+        [90, timapi.constants.PosEntryMode.magStripe],
+        [91, timapi.constants.PosEntryMode.magStripeFallback],
+        [92, timapi.constants.PosEntryMode.magStripeFallbackAgain],
+        [93, timapi.constants.PosEntryMode.magStripeFallbackIccFail],
+        [94, timapi.constants.PosEntryMode.emergencyDataEntry],
+        [95, timapi.constants.PosEntryMode.ecommerce],
+        [97, timapi.constants.PosEntryMode.ctlessIcc],
+        [98, timapi.constants.PosEntryMode.ctlessMagStrige]]);
+timapi.protocol.constants.PrintFlag = {};
+timapi.protocol.constants.PrintFlag.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (PrintFlag)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.PrintFlag.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.PrintFlag._timApi2Protocol =
+    new Map([[timapi.constants.PrintFlag.suppressHeader, 0x1],
+        [timapi.constants.PrintFlag.suppressSignature, 0x2],
+        [timapi.constants.PrintFlag.suppressEcrInfo, 0x4],
+        [timapi.constants.PrintFlag.suppressEftInfo, 0x8]]);
+timapi.protocol.constants.PrintFlag._protocol2TimApi =
+    new Map([[0x1, timapi.constants.PrintFlag.suppressHeader],
+        [0x2, timapi.constants.PrintFlag.suppressSignature],
+        [0x4, timapi.constants.PrintFlag.suppressEcrInfo],
+        [0x8, timapi.constants.PrintFlag.suppressEftInfo]]);
+timapi.protocol.constants.PrintFormat = {};
+timapi.protocol.constants.PrintFormat.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (PrintFormat)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.PrintFormat.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (PrintFormat)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.PrintFormat.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.PrintFormat._timApi2Protocol =
+    new Map([[timapi.constants.PrintFormat.noPrint, "NoPrint"],
+        [timapi.constants.PrintFormat.normal, "Normal"],
+        [timapi.constants.PrintFormat.onDevice, "OnDevice"],
+        [timapi.constants.PrintFormat.fieldsOnly, "FieldsOnly"]]);
+timapi.protocol.constants.PrintFormat._protocol2TimApi =
+    new Map([["NoPrint", timapi.constants.PrintFormat.noPrint],
+        ["Normal", timapi.constants.PrintFormat.normal],
+        ["OnDevice", timapi.constants.PrintFormat.onDevice],
+        ["FieldsOnly", timapi.constants.PrintFormat.fieldsOnly]]);
+timapi.protocol.constants.ProcessingDisposition = {};
+timapi.protocol.constants.ProcessingDisposition.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ProcessingDisposition)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ProcessingDisposition.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ProcessingDisposition)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ProcessingDisposition.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ProcessingDisposition._timApi2Protocol =
+    new Map([[timapi.constants.ProcessingDisposition.onEcr, "OnECR"],
+        [timapi.constants.ProcessingDisposition.onEft, "OnEFT"]]);
+timapi.protocol.constants.ProcessingDisposition._protocol2TimApi =
+    new Map([["OnECR", timapi.constants.ProcessingDisposition.onEcr],
+        ["OnEFT", timapi.constants.ProcessingDisposition.onEft]]);
+timapi.protocol.constants.ProtocolLevel = {};
+timapi.protocol.constants.ProtocolLevel.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ProtocolLevel)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ProtocolLevel.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ProtocolLevel)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ProtocolLevel.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ProtocolLevel._timApi2Protocol =
+    new Map([[timapi.constants.ProtocolLevel.sixml2_2, 3]]);
+timapi.protocol.constants.ProtocolLevel._protocol2TimApi =
+    new Map([[3, timapi.constants.ProtocolLevel.sixml2_2]]);
+timapi.protocol.constants.ProtocolType = {};
+timapi.protocol.constants.ProtocolType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ProtocolType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ProtocolType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ProtocolType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ProtocolType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ProtocolType._timApi2Protocol =
+    new Map([[timapi.constants.ProtocolType.sixml, 1]]);
+timapi.protocol.constants.ProtocolType._protocol2TimApi =
+    new Map([[1, timapi.constants.ProtocolType.sixml]]);
+timapi.protocol.constants.Reason = {};
+timapi.protocol.constants.Reason.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Reason)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.Reason.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Reason)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Reason.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Reason._timApi2Protocol =
+    new Map([[timapi.constants.Reason.ok, "Ok"],
+        [timapi.constants.Reason.corr, "Corr"],
+        [timapi.constants.Reason.stop, "Stop"],
+        [timapi.constants.Reason.cardReader, "CardReader"],
+        [timapi.constants.Reason.autoConfirm, "AutoConfirm"],
+        [timapi.constants.Reason.timeout, "Timeout"],
+        [timapi.constants.Reason.codeOk, "CodeOk"],
+        [timapi.constants.Reason.codeNok, "CodeNok"],
+        [timapi.constants.Reason.pinOk, "PinOk"],
+        [timapi.constants.Reason.pinNok, "PinNok"]]);
+timapi.protocol.constants.Reason._protocol2TimApi =
+    new Map([["Ok", timapi.constants.Reason.ok],
+        ["Corr", timapi.constants.Reason.corr],
+        ["Stop", timapi.constants.Reason.stop],
+        ["CardReader", timapi.constants.Reason.cardReader],
+        ["AutoConfirm", timapi.constants.Reason.autoConfirm],
+        ["Timeout", timapi.constants.Reason.timeout],
+        ["CodeOk", timapi.constants.Reason.codeOk],
+        ["CodeNok", timapi.constants.Reason.codeNok],
+        ["PinOk", timapi.constants.Reason.pinOk],
+        ["PinNok", timapi.constants.Reason.pinNok]]);
+timapi.protocol.constants.ReceiptItemType = {};
+timapi.protocol.constants.ReceiptItemType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ReceiptItemType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ReceiptItemType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ReceiptItemType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ReceiptItemType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ReceiptItemType._timApi2Protocol =
+    new Map([[timapi.constants.ReceiptItemType.actId, "ActId"],
+        [timapi.constants.ReceiptItemType.accPer, "AccPer"],
+        [timapi.constants.ReceiptItemType.acqId, "AcqId"],
+        [timapi.constants.ReceiptItemType.aid, "Aid"],
+        [timapi.constants.ReceiptItemType.amount, "Amount"],
+        [timapi.constants.ReceiptItemType.amountDcc, "AmountDcc"],
+        [timapi.constants.ReceiptItemType.amountOther, "AmountOther"],
+        [timapi.constants.ReceiptItemType.authCode, "AuthCode"],
+        [timapi.constants.ReceiptItemType.authReslt, "AuthReslt"],
+        [timapi.constants.ReceiptItemType.authRespC, "AuthRespC"],
+        [timapi.constants.ReceiptItemType.authRespTextC, "AuthRespTextC"],
+        [timapi.constants.ReceiptItemType.brandName, "BrandName"],
+        [timapi.constants.ReceiptItemType.currency, "Currency"],
+        [timapi.constants.ReceiptItemType.currencyDcc, "CurrencyDcc"],
+        [timapi.constants.ReceiptItemType.dccDisclaimer, "DccDisclaimer"],
+        [timapi.constants.ReceiptItemType.disclaimer, "Disclaimer"],
+        [timapi.constants.ReceiptItemType.exponent, "Exponent"],
+        [timapi.constants.ReceiptItemType.exponentDcc, "ExponentDcc"],
+        [timapi.constants.ReceiptItemType.markupDcc, "MarkupDcc"],
+        [timapi.constants.ReceiptItemType.markupExponentDcc, "MarkupExponentDcc"],
+        [timapi.constants.ReceiptItemType.cardNumberPrintableMerchant, "CardNumberPrintableMerchant"],
+        [timapi.constants.ReceiptItemType.cardNumberPrintableCardholder, "CardNumberPrintableCardholder"],
+        [timapi.constants.ReceiptItemType.rateDcc, "RateDcc"],
+        [timapi.constants.ReceiptItemType.rateExponentDcc, "RateExponentDcc"],
+        [timapi.constants.ReceiptItemType.timeStampDate, "TimeStampDate"],
+        [timapi.constants.ReceiptItemType.timeStampTime, "TimeStampTime"],
+        [timapi.constants.ReceiptItemType.trmId, "TrmId"],
+        [timapi.constants.ReceiptItemType.trxRefNum, "TrxRefNum"],
+        [timapi.constants.ReceiptItemType.trxSeqCnt, "TrxSeqCnt"],
+        [timapi.constants.ReceiptItemType.posEntryMode, "PosEntryMode"],
+        [timapi.constants.ReceiptItemType.cardExpiryDate, "CardExpiryDate"],
+        [timapi.constants.ReceiptItemType.cardNumberEnc, "CardNumberEnc"],
+        [timapi.constants.ReceiptItemType.amountSaldo, "AmountSaldo"],
+        [timapi.constants.ReceiptItemType.ecrSeqCounter, "EcrSeqCounter"],
+        [timapi.constants.ReceiptItemType.panReceiptDol, "PanReceiptDol"],
+        [timapi.constants.ReceiptItemType.panReceiptDolIndex, "PanReceiptDolIndex"]]);
+timapi.protocol.constants.ReceiptItemType._protocol2TimApi =
+    new Map([["ActId", timapi.constants.ReceiptItemType.actId],
+        ["AccPer", timapi.constants.ReceiptItemType.accPer],
+        ["AcqId", timapi.constants.ReceiptItemType.acqId],
+        ["Aid", timapi.constants.ReceiptItemType.aid],
+        ["Amount", timapi.constants.ReceiptItemType.amount],
+        ["AmountDcc", timapi.constants.ReceiptItemType.amountDcc],
+        ["AmountOther", timapi.constants.ReceiptItemType.amountOther],
+        ["AuthCode", timapi.constants.ReceiptItemType.authCode],
+        ["AuthReslt", timapi.constants.ReceiptItemType.authReslt],
+        ["AuthRespC", timapi.constants.ReceiptItemType.authRespC],
+        ["AuthRespTextC", timapi.constants.ReceiptItemType.authRespTextC],
+        ["BrandName", timapi.constants.ReceiptItemType.brandName],
+        ["Currency", timapi.constants.ReceiptItemType.currency],
+        ["CurrencyDcc", timapi.constants.ReceiptItemType.currencyDcc],
+        ["DccDisclaimer", timapi.constants.ReceiptItemType.dccDisclaimer],
+        ["Disclaimer", timapi.constants.ReceiptItemType.disclaimer],
+        ["Exponent", timapi.constants.ReceiptItemType.exponent],
+        ["ExponentDcc", timapi.constants.ReceiptItemType.exponentDcc],
+        ["MarkupDcc", timapi.constants.ReceiptItemType.markupDcc],
+        ["MarkupExponentDcc", timapi.constants.ReceiptItemType.markupExponentDcc],
+        ["CardNumberPrintableMerchant", timapi.constants.ReceiptItemType.cardNumberPrintableMerchant],
+        ["CardNumberPrintableCardholder", timapi.constants.ReceiptItemType.cardNumberPrintableCardholder],
+        ["RateDcc", timapi.constants.ReceiptItemType.rateDcc],
+        ["RateExponentDcc", timapi.constants.ReceiptItemType.rateExponentDcc],
+        ["TimeStampDate", timapi.constants.ReceiptItemType.timeStampDate],
+        ["TimeStampTime", timapi.constants.ReceiptItemType.timeStampTime],
+        ["TrmId", timapi.constants.ReceiptItemType.trmId],
+        ["TrxRefNum", timapi.constants.ReceiptItemType.trxRefNum],
+        ["TrxSeqCnt", timapi.constants.ReceiptItemType.trxSeqCnt],
+        ["PosEntryMode", timapi.constants.ReceiptItemType.posEntryMode],
+        ["CardExpiryDate", timapi.constants.ReceiptItemType.cardExpiryDate],
+        ["CardNumberEnc", timapi.constants.ReceiptItemType.cardNumberEnc],
+        ["AmountSaldo", timapi.constants.ReceiptItemType.amountSaldo],
+        ["EcrSeqCounter", timapi.constants.ReceiptItemType.ecrSeqCounter],
+        ["PanReceiptDol", timapi.constants.ReceiptItemType.panReceiptDol],
+        ["PanReceiptDolIndex", timapi.constants.ReceiptItemType.panReceiptDolIndex]]);
+timapi.protocol.constants.ReceiptRequestType = {};
+timapi.protocol.constants.ReceiptRequestType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ReceiptRequestType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ReceiptRequestType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ReceiptRequestType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ReceiptRequestType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ReceiptRequestType._timApi2Protocol =
+    new Map([[timapi.constants.ReceiptRequestType.reprint, "Reprint"],
+        [timapi.constants.ReceiptRequestType.list, "List"]]);
+timapi.protocol.constants.ReceiptRequestType._protocol2TimApi =
+    new Map([["Reprint", timapi.constants.ReceiptRequestType.reprint],
+        ["List", timapi.constants.ReceiptRequestType.list]]);
+timapi.protocol.constants.ReceiptType = {};
+timapi.protocol.constants.ReceiptType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ReceiptType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ReceiptType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ReceiptType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ReceiptType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ReceiptType._timApi2Protocol =
+    new Map([[timapi.constants.ReceiptType.purchase, "Purchase"],
+        [timapi.constants.ReceiptType.credit, "Credit"],
+        [timapi.constants.ReceiptType.reversal, "Reversal"]]);
+timapi.protocol.constants.ReceiptType._protocol2TimApi =
+    new Map([["Purchase", timapi.constants.ReceiptType.purchase],
+        ["Credit", timapi.constants.ReceiptType.credit],
+        ["Reversal", timapi.constants.ReceiptType.reversal]]);
+timapi.protocol.constants.Recipient = {};
+timapi.protocol.constants.Recipient.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Recipient)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.Recipient.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Recipient)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Recipient.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Recipient._timApi2Protocol =
+    new Map([[timapi.constants.Recipient.merchant, "Merchant"],
+        [timapi.constants.Recipient.cardholder, "Cardholder"],
+        [timapi.constants.Recipient.both, "Both"]]);
+timapi.protocol.constants.Recipient._protocol2TimApi =
+    new Map([["Merchant", timapi.constants.Recipient.merchant],
+        ["Cardholder", timapi.constants.Recipient.cardholder],
+        ["Both", timapi.constants.Recipient.both]]);
+timapi.protocol.constants.ResourceId = {};
+timapi.protocol.constants.ResourceId.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResourceId)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ResourceId.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResourceId)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResourceId.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResourceId._timApi2Protocol =
+    new Map([[timapi.constants.ResourceId.enterMileage, 100],
+        [timapi.constants.ResourceId.enterCarNumber, 101],
+        [timapi.constants.ResourceId.enterDriverCode, 102],
+        [timapi.constants.ResourceId.enterFleetId, 103],
+        [timapi.constants.ResourceId.selectPump, 104],
+        [timapi.constants.ResourceId.selectWashingStation, 105],
+        [timapi.constants.ResourceId.selectProgram, 106],
+        [timapi.constants.ResourceId.selectProduct, 107],
+        [timapi.constants.ResourceId.loadCard, 108],
+        [timapi.constants.ResourceId.readCode, 109],
+        [timapi.constants.ResourceId.checkCode, 110],
+        [timapi.constants.ResourceId.enterAdditionalInformation, 111],
+        [timapi.constants.ResourceId.enterCostCenter, 112],
+        [timapi.constants.ResourceId.enterEmployeeNumber, 113],
+        [timapi.constants.ResourceId.enterLicensePlate, 114],
+        [timapi.constants.ResourceId.enterProjectNumber, 115],
+        [timapi.constants.ResourceId.petrolPrintReceipt, 116],
+        [timapi.constants.ResourceId.petrolRemoveCard, 117],
+        [timapi.constants.ResourceId.petrolOutOfOrder, 118],
+        [timapi.constants.ResourceId.petrolInvalidEntry, 119],
+        [timapi.constants.ResourceId.petrolRefuelAtPump, 120],
+        [timapi.constants.ResourceId.petrolSeeOtherScreen, 121],
+        [timapi.constants.ResourceId.petrolPleaseRefuel, 122],
+        [timapi.constants.ResourceId.noRechargeCard, 1000],
+        [timapi.constants.ResourceId.showPhoneNumberWithAmount, 1001],
+        [timapi.constants.ResourceId.enterPhoneOrPrepaidNumber, 1002],
+        [timapi.constants.ResourceId.phoneNumberTooLong, 1003],
+        [timapi.constants.ResourceId.phoneNumberTooShort, 1004],
+        [timapi.constants.ResourceId.enterPhoneNumber, 1005],
+        [timapi.constants.ResourceId.pleaseWait, 1006],
+        [timapi.constants.ResourceId.processingDeclined, 1007],
+        [timapi.constants.ResourceId.processingOk, 1008],
+        [timapi.constants.ResourceId.registerCard, 1009],
+        [timapi.constants.ResourceId.welcomeCard, 1010],
+        [timapi.constants.ResourceId.showPhoneNumber, 1011],
+        [timapi.constants.ResourceId.interAccountTransfer, 1012],
+        [timapi.constants.ResourceId.interAccountTransferConfirmation, 1013],
+        [timapi.constants.ResourceId.disbursementFromAccount, 1014],
+        [timapi.constants.ResourceId.depositOwnAccount, 1015],
+        [timapi.constants.ResourceId.emptyDialog, 1016],
+        [timapi.constants.ResourceId.packetAcknowledgement, 1017],
+        [timapi.constants.ResourceId.pinEntry, 1018],
+        [timapi.constants.ResourceId.bankingInsertCard, 1100],
+        [timapi.constants.ResourceId.bankingPinCheck, 1101],
+        [timapi.constants.ResourceId.bankingShowSaldo, 1102],
+        [timapi.constants.ResourceId.bankingConfirmAmount, 1103],
+        [timapi.constants.ResourceId.bankingRemoveCard, 1104],
+        [timapi.constants.ResourceId.bankingWelcome, 1105],
+        [timapi.constants.ResourceId.commonRegular, 3000],
+        [timapi.constants.ResourceId.commonPleaseWait, 3001],
+        [timapi.constants.ResourceId.commonDataSaved, 3002],
+        [timapi.constants.ResourceId.commonCardInitialized, 3003],
+        [timapi.constants.ResourceId.commonCardDeinitialized, 3004],
+        [timapi.constants.ResourceId.commonRemoveCard, 3005]]);
+timapi.protocol.constants.ResourceId._protocol2TimApi =
+    new Map([[100, timapi.constants.ResourceId.enterMileage],
+        [101, timapi.constants.ResourceId.enterCarNumber],
+        [102, timapi.constants.ResourceId.enterDriverCode],
+        [103, timapi.constants.ResourceId.enterFleetId],
+        [104, timapi.constants.ResourceId.selectPump],
+        [105, timapi.constants.ResourceId.selectWashingStation],
+        [106, timapi.constants.ResourceId.selectProgram],
+        [107, timapi.constants.ResourceId.selectProduct],
+        [108, timapi.constants.ResourceId.loadCard],
+        [109, timapi.constants.ResourceId.readCode],
+        [110, timapi.constants.ResourceId.checkCode],
+        [111, timapi.constants.ResourceId.enterAdditionalInformation],
+        [112, timapi.constants.ResourceId.enterCostCenter],
+        [113, timapi.constants.ResourceId.enterEmployeeNumber],
+        [114, timapi.constants.ResourceId.enterLicensePlate],
+        [115, timapi.constants.ResourceId.enterProjectNumber],
+        [116, timapi.constants.ResourceId.petrolPrintReceipt],
+        [117, timapi.constants.ResourceId.petrolRemoveCard],
+        [118, timapi.constants.ResourceId.petrolOutOfOrder],
+        [119, timapi.constants.ResourceId.petrolInvalidEntry],
+        [120, timapi.constants.ResourceId.petrolRefuelAtPump],
+        [121, timapi.constants.ResourceId.petrolSeeOtherScreen],
+        [122, timapi.constants.ResourceId.petrolPleaseRefuel],
+        [1000, timapi.constants.ResourceId.noRechargeCard],
+        [1001, timapi.constants.ResourceId.showPhoneNumberWithAmount],
+        [1002, timapi.constants.ResourceId.enterPhoneOrPrepaidNumber],
+        [1003, timapi.constants.ResourceId.phoneNumberTooLong],
+        [1004, timapi.constants.ResourceId.phoneNumberTooShort],
+        [1005, timapi.constants.ResourceId.enterPhoneNumber],
+        [1006, timapi.constants.ResourceId.pleaseWait],
+        [1007, timapi.constants.ResourceId.processingDeclined],
+        [1008, timapi.constants.ResourceId.processingOk],
+        [1009, timapi.constants.ResourceId.registerCard],
+        [1010, timapi.constants.ResourceId.welcomeCard],
+        [1011, timapi.constants.ResourceId.showPhoneNumber],
+        [1012, timapi.constants.ResourceId.interAccountTransfer],
+        [1013, timapi.constants.ResourceId.interAccountTransferConfirmation],
+        [1014, timapi.constants.ResourceId.disbursementFromAccount],
+        [1015, timapi.constants.ResourceId.depositOwnAccount],
+        [1016, timapi.constants.ResourceId.emptyDialog],
+        [1017, timapi.constants.ResourceId.packetAcknowledgement],
+        [1018, timapi.constants.ResourceId.pinEntry],
+        [1100, timapi.constants.ResourceId.bankingInsertCard],
+        [1101, timapi.constants.ResourceId.bankingPinCheck],
+        [1102, timapi.constants.ResourceId.bankingShowSaldo],
+        [1103, timapi.constants.ResourceId.bankingConfirmAmount],
+        [1104, timapi.constants.ResourceId.bankingRemoveCard],
+        [1105, timapi.constants.ResourceId.bankingWelcome],
+        [3000, timapi.constants.ResourceId.commonRegular],
+        [3001, timapi.constants.ResourceId.commonPleaseWait],
+        [3002, timapi.constants.ResourceId.commonDataSaved],
+        [3003, timapi.constants.ResourceId.commonCardInitialized],
+        [3004, timapi.constants.ResourceId.commonCardDeinitialized],
+        [3005, timapi.constants.ResourceId.commonRemoveCard]]);
+timapi.protocol.constants.ResultCode = {};
+timapi.protocol.constants.ResultCode.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResultCode)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ResultCode.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResultCode)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResultCode.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResultCode._timApi2Protocol =
+    new Map([[timapi.constants.ResultCode.ok, 0],
+        [timapi.constants.ResultCode.apiCancelEcr, 50],
+        [timapi.constants.ResultCode.apiInvalidAnswer, 51],
+        [timapi.constants.ResultCode.apiDisabledFeature, 52],
+        [timapi.constants.ResultCode.apiFunctionDisallowed, 53],
+        [timapi.constants.ResultCode.apiPersistencyProblem, 54],
+        [timapi.constants.ResultCode.apiConnectFailServer, 100],
+        [timapi.constants.ResultCode.apiConnectFailTerminal, 101],
+        [timapi.constants.ResultCode.apiConnectionLostServer, 102],
+        [timapi.constants.ResultCode.apiConnectionLostTerminal, 103],
+        [timapi.constants.ResultCode.ethernetDisconnected, 104],
+        [timapi.constants.ResultCode.rs232Disconnected, 105],
+        [timapi.constants.ResultCode.apiTimeoutServer, 106],
+        [timapi.constants.ResultCode.apiTimeoutTerminal, 107],
+        [timapi.constants.ResultCode.serverInvalidAnswer, 200],
+        [timapi.constants.ResultCode.serverInvalidRequest, 201],
+        [timapi.constants.ResultCode.serverDisabledFeature, 202],
+        [timapi.constants.ResultCode.serverPersistencyProblem, 203],
+        [timapi.constants.ResultCode.serverConnectFailTerminal, 250],
+        [timapi.constants.ResultCode.serverConnectionLostTerminal, 251],
+        [timapi.constants.ResultCode.serverTimeoutTerminal, 252],
+        [timapi.constants.ResultCode.ccrUnavailable, 300],
+        [timapi.constants.ResultCode.mcrUnavailable, 301],
+        [timapi.constants.ResultCode.nfcUnavailable, 302],
+        [timapi.constants.ResultCode.displayUnavailable, 303],
+        [timapi.constants.ResultCode.pinPadUnavailable, 304],
+        [timapi.constants.ResultCode.rs232Unavailable, 305],
+        [timapi.constants.ResultCode.rs232NotConfigured, 306],
+        [timapi.constants.ResultCode.cardReaderErrorCcr, 400],
+        [timapi.constants.ResultCode.cardReaderErrorMcr, 401],
+        [timapi.constants.ResultCode.cardReaderErrorNfc, 402],
+        [timapi.constants.ResultCode.cardErrorCcr, 403],
+        [timapi.constants.ResultCode.cardErrorMcr, 404],
+        [timapi.constants.ResultCode.cardErrorNfc, 405],
+        [timapi.constants.ResultCode.cardReadError, 406],
+        [timapi.constants.ResultCode.cardReadTimeout, 407],
+        [timapi.constants.ResultCode.cardInsertionTimeout, 408],
+        [timapi.constants.ResultCode.cardReaderKeysLost, 409],
+        [timapi.constants.ResultCode.cardReaderSecurityError, 410],
+        [timapi.constants.ResultCode.cardTimeout, 411],
+        [timapi.constants.ResultCode.cardNotReadable, 412],
+        [timapi.constants.ResultCode.cardInvalidData, 413],
+        [timapi.constants.ResultCode.cardFunctionNotFound, 414],
+        [timapi.constants.ResultCode.cardFunctionNotAllowed, 415],
+        [timapi.constants.ResultCode.pinPadSecurityError, 500],
+        [timapi.constants.ResultCode.pinPadTampered, 501],
+        [timapi.constants.ResultCode.pinPadKeysLost, 502],
+        [timapi.constants.ResultCode.cardholderStop, 550],
+        [timapi.constants.ResultCode.cardholderTimeout, 551],
+        [timapi.constants.ResultCode.cardRemoved, 552],
+        [timapi.constants.ResultCode.timTimeoutEcr, 600],
+        [timapi.constants.ResultCode.timConnectFailPaymentHost, 601],
+        [timapi.constants.ResultCode.timConnectionLostPaymentHost, 602],
+        [timapi.constants.ResultCode.timTimeoutAnswerRs232, 603],
+        [timapi.constants.ResultCode.timCommunicationFailure, 604],
+        [timapi.constants.ResultCode.timConfigFailure, 605],
+        [timapi.constants.ResultCode.timInitFailure, 606],
+        [timapi.constants.ResultCode.sixmlGeneralError, 700],
+        [timapi.constants.ResultCode.sixmlInvalidRequest, 701],
+        [timapi.constants.ResultCode.sixmlWrongCashier, 702],
+        [timapi.constants.ResultCode.sixmlWrongEcrId, 703],
+        [timapi.constants.ResultCode.sixmlUnknownReferenceNumber, 704],
+        [timapi.constants.ResultCode.sixmlWrongState, 705],
+        [timapi.constants.ResultCode.busyOtherController, 706],
+        [timapi.constants.ResultCode.busyMaintenance, 707],
+        [timapi.constants.ResultCode.requestPending, 708],
+        [timapi.constants.ResultCode.sixmlUnsupportedRequest, 709],
+        [timapi.constants.ResultCode.trxNoCommonApplications, 800],
+        [timapi.constants.ResultCode.trxLimitExceeded, 801],
+        [timapi.constants.ResultCode.trxNoCommonCvm, 802],
+        [timapi.constants.ResultCode.declinedCvmFailed, 803],
+        [timapi.constants.ResultCode.trxReferral, 804],
+        [timapi.constants.ResultCode.trxInvalidAuthResponse, 805],
+        [timapi.constants.ResultCode.declinedGeneric, 806],
+        [timapi.constants.ResultCode.declinedSaldoTooLow, 807],
+        [timapi.constants.ResultCode.declinedWrongPin, 808],
+        [timapi.constants.ResultCode.declinedCardBlocked, 809],
+        [timapi.constants.ResultCode.declinedSecurityIssue, 810],
+        [timapi.constants.ResultCode.declinedUsageControl, 811],
+        [timapi.constants.ResultCode.declinedDoubleTransaction, 812],
+        [timapi.constants.ResultCode.declinedGenericFirstAc, 813],
+        [timapi.constants.ResultCode.declinedGenericSecondAc, 814],
+        [timapi.constants.ResultCode.trxCommitTimeout, 815],
+        [timapi.constants.ResultCode.trxRollbackImpossible, 816],
+        [timapi.constants.ResultCode.cashbackAmountTooLow, 817],
+        [timapi.constants.ResultCode.cashbackAmountTooHigh, 818],
+        [timapi.constants.ResultCode.basketDeclined, 819],
+        [timapi.constants.ResultCode.noTrxInGroupExceeded, 820],
+        [timapi.constants.ResultCode.unsupportedCharactersInMessage, 821],
+        [timapi.constants.ResultCode.loyaltyCheckInPending, 822],
+        [timapi.constants.ResultCode.declinedCardError, 823],
+        [timapi.constants.ResultCode.declinedCardExpired, 824],
+        [timapi.constants.ResultCode.declinedTrxInvalid, 825],
+        [timapi.constants.ResultCode.declinedTryLater, 826],
+        [timapi.constants.ResultCode.declinedTryAnotherInterface, 827],
+        [timapi.constants.ResultCode.declinedInvalidMerchant, 828],
+        [timapi.constants.ResultCode.declinedRestrictionDeclined, 829],
+        [timapi.constants.ResultCode.declinedWrongCurrency, 830],
+        [timapi.constants.ResultCode.declinedAutoreversalPending, 831],
+        [timapi.constants.ResultCode.declinedWrongCardNumber, 832],
+        [timapi.constants.ResultCode.declinedWrongCardExpiryDate, 833],
+        [timapi.constants.ResultCode.declinedRetryTemporaryUnavailable, 834],
+        [timapi.constants.ResultCode.declinedServiceNotAllowed, 835],
+        [timapi.constants.ResultCode.declinedCardholderInformationIssue, 836],
+        [timapi.constants.ResultCode.declinedReferralWrongAuthCode, 837],
+        [timapi.constants.ResultCode.declinedReferralWrongAmount, 838],
+        [timapi.constants.ResultCode.declinedReferralOtherReason, 839],
+        [timapi.constants.ResultCode.declinedCaptureCardGeneric, 840],
+        [timapi.constants.ResultCode.declinedCaptureCardInfoToClient, 841],
+        [timapi.constants.ResultCode.declinedCaptureCardOrderToClient, 842],
+        [timapi.constants.ResultCode.declinedCaptureCardTimeoutRemovingCard, 843],
+        [timapi.constants.ResultCode.declinedNotSupported, 844]]);
+timapi.protocol.constants.ResultCode._protocol2TimApi =
+    new Map([[0, timapi.constants.ResultCode.ok],
+        [50, timapi.constants.ResultCode.apiCancelEcr],
+        [51, timapi.constants.ResultCode.apiInvalidAnswer],
+        [52, timapi.constants.ResultCode.apiDisabledFeature],
+        [53, timapi.constants.ResultCode.apiFunctionDisallowed],
+        [54, timapi.constants.ResultCode.apiPersistencyProblem],
+        [100, timapi.constants.ResultCode.apiConnectFailServer],
+        [101, timapi.constants.ResultCode.apiConnectFailTerminal],
+        [102, timapi.constants.ResultCode.apiConnectionLostServer],
+        [103, timapi.constants.ResultCode.apiConnectionLostTerminal],
+        [104, timapi.constants.ResultCode.ethernetDisconnected],
+        [105, timapi.constants.ResultCode.rs232Disconnected],
+        [106, timapi.constants.ResultCode.apiTimeoutServer],
+        [107, timapi.constants.ResultCode.apiTimeoutTerminal],
+        [200, timapi.constants.ResultCode.serverInvalidAnswer],
+        [201, timapi.constants.ResultCode.serverInvalidRequest],
+        [202, timapi.constants.ResultCode.serverDisabledFeature],
+        [203, timapi.constants.ResultCode.serverPersistencyProblem],
+        [250, timapi.constants.ResultCode.serverConnectFailTerminal],
+        [251, timapi.constants.ResultCode.serverConnectionLostTerminal],
+        [252, timapi.constants.ResultCode.serverTimeoutTerminal],
+        [300, timapi.constants.ResultCode.ccrUnavailable],
+        [301, timapi.constants.ResultCode.mcrUnavailable],
+        [302, timapi.constants.ResultCode.nfcUnavailable],
+        [303, timapi.constants.ResultCode.displayUnavailable],
+        [304, timapi.constants.ResultCode.pinPadUnavailable],
+        [305, timapi.constants.ResultCode.rs232Unavailable],
+        [306, timapi.constants.ResultCode.rs232NotConfigured],
+        [400, timapi.constants.ResultCode.cardReaderErrorCcr],
+        [401, timapi.constants.ResultCode.cardReaderErrorMcr],
+        [402, timapi.constants.ResultCode.cardReaderErrorNfc],
+        [403, timapi.constants.ResultCode.cardErrorCcr],
+        [404, timapi.constants.ResultCode.cardErrorMcr],
+        [405, timapi.constants.ResultCode.cardErrorNfc],
+        [406, timapi.constants.ResultCode.cardReadError],
+        [407, timapi.constants.ResultCode.cardReadTimeout],
+        [408, timapi.constants.ResultCode.cardInsertionTimeout],
+        [409, timapi.constants.ResultCode.cardReaderKeysLost],
+        [410, timapi.constants.ResultCode.cardReaderSecurityError],
+        [411, timapi.constants.ResultCode.cardTimeout],
+        [412, timapi.constants.ResultCode.cardNotReadable],
+        [413, timapi.constants.ResultCode.cardInvalidData],
+        [414, timapi.constants.ResultCode.cardFunctionNotFound],
+        [415, timapi.constants.ResultCode.cardFunctionNotAllowed],
+        [500, timapi.constants.ResultCode.pinPadSecurityError],
+        [501, timapi.constants.ResultCode.pinPadTampered],
+        [502, timapi.constants.ResultCode.pinPadKeysLost],
+        [550, timapi.constants.ResultCode.cardholderStop],
+        [551, timapi.constants.ResultCode.cardholderTimeout],
+        [552, timapi.constants.ResultCode.cardRemoved],
+        [600, timapi.constants.ResultCode.timTimeoutEcr],
+        [601, timapi.constants.ResultCode.timConnectFailPaymentHost],
+        [602, timapi.constants.ResultCode.timConnectionLostPaymentHost],
+        [603, timapi.constants.ResultCode.timTimeoutAnswerRs232],
+        [604, timapi.constants.ResultCode.timCommunicationFailure],
+        [605, timapi.constants.ResultCode.timConfigFailure],
+        [606, timapi.constants.ResultCode.timInitFailure],
+        [700, timapi.constants.ResultCode.sixmlGeneralError],
+        [701, timapi.constants.ResultCode.sixmlInvalidRequest],
+        [702, timapi.constants.ResultCode.sixmlWrongCashier],
+        [703, timapi.constants.ResultCode.sixmlWrongEcrId],
+        [704, timapi.constants.ResultCode.sixmlUnknownReferenceNumber],
+        [705, timapi.constants.ResultCode.sixmlWrongState],
+        [706, timapi.constants.ResultCode.busyOtherController],
+        [707, timapi.constants.ResultCode.busyMaintenance],
+        [708, timapi.constants.ResultCode.requestPending],
+        [709, timapi.constants.ResultCode.sixmlUnsupportedRequest],
+        [800, timapi.constants.ResultCode.trxNoCommonApplications],
+        [801, timapi.constants.ResultCode.trxLimitExceeded],
+        [802, timapi.constants.ResultCode.trxNoCommonCvm],
+        [803, timapi.constants.ResultCode.declinedCvmFailed],
+        [804, timapi.constants.ResultCode.trxReferral],
+        [805, timapi.constants.ResultCode.trxInvalidAuthResponse],
+        [806, timapi.constants.ResultCode.declinedGeneric],
+        [807, timapi.constants.ResultCode.declinedSaldoTooLow],
+        [808, timapi.constants.ResultCode.declinedWrongPin],
+        [809, timapi.constants.ResultCode.declinedCardBlocked],
+        [810, timapi.constants.ResultCode.declinedSecurityIssue],
+        [811, timapi.constants.ResultCode.declinedUsageControl],
+        [812, timapi.constants.ResultCode.declinedDoubleTransaction],
+        [813, timapi.constants.ResultCode.declinedGenericFirstAc],
+        [814, timapi.constants.ResultCode.declinedGenericSecondAc],
+        [815, timapi.constants.ResultCode.trxCommitTimeout],
+        [816, timapi.constants.ResultCode.trxRollbackImpossible],
+        [817, timapi.constants.ResultCode.cashbackAmountTooLow],
+        [818, timapi.constants.ResultCode.cashbackAmountTooHigh],
+        [819, timapi.constants.ResultCode.basketDeclined],
+        [820, timapi.constants.ResultCode.noTrxInGroupExceeded],
+        [821, timapi.constants.ResultCode.unsupportedCharactersInMessage],
+        [822, timapi.constants.ResultCode.loyaltyCheckInPending],
+        [823, timapi.constants.ResultCode.declinedCardError],
+        [824, timapi.constants.ResultCode.declinedCardExpired],
+        [825, timapi.constants.ResultCode.declinedTrxInvalid],
+        [826, timapi.constants.ResultCode.declinedTryLater],
+        [827, timapi.constants.ResultCode.declinedTryAnotherInterface],
+        [828, timapi.constants.ResultCode.declinedInvalidMerchant],
+        [829, timapi.constants.ResultCode.declinedRestrictionDeclined],
+        [830, timapi.constants.ResultCode.declinedWrongCurrency],
+        [831, timapi.constants.ResultCode.declinedAutoreversalPending],
+        [832, timapi.constants.ResultCode.declinedWrongCardNumber],
+        [833, timapi.constants.ResultCode.declinedWrongCardExpiryDate],
+        [834, timapi.constants.ResultCode.declinedRetryTemporaryUnavailable],
+        [835, timapi.constants.ResultCode.declinedServiceNotAllowed],
+        [836, timapi.constants.ResultCode.declinedCardholderInformationIssue],
+        [837, timapi.constants.ResultCode.declinedReferralWrongAuthCode],
+        [838, timapi.constants.ResultCode.declinedReferralWrongAmount],
+        [839, timapi.constants.ResultCode.declinedReferralOtherReason],
+        [840, timapi.constants.ResultCode.declinedCaptureCardGeneric],
+        [841, timapi.constants.ResultCode.declinedCaptureCardInfoToClient],
+        [842, timapi.constants.ResultCode.declinedCaptureCardOrderToClient],
+        [843, timapi.constants.ResultCode.declinedCaptureCardTimeoutRemovingCard],
+        [844, timapi.constants.ResultCode.declinedNotSupported]]);
+timapi.protocol.constants.SecurityStatus = {};
+timapi.protocol.constants.SecurityStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (SecurityStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.SecurityStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (SecurityStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.SecurityStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.SecurityStatus._timApi2Protocol =
+    new Map([[timapi.constants.SecurityStatus.disabled, "Disabled"],
+        [timapi.constants.SecurityStatus.active, "Active"],
+        [timapi.constants.SecurityStatus.tampered, "Tampered"]]);
+timapi.protocol.constants.SecurityStatus._protocol2TimApi =
+    new Map([["Disabled", timapi.constants.SecurityStatus.disabled],
+        ["Active", timapi.constants.SecurityStatus.active],
+        ["Tampered", timapi.constants.SecurityStatus.tampered]]);
+timapi.protocol.constants.SettingType = {};
+timapi.protocol.constants.SettingType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (SettingType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.SettingType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (SettingType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.SettingType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.SettingType._timApi2Protocol =
+    new Map([[timapi.constants.SettingType.displayBrightness, "DisplayBrightness"],
+        [timapi.constants.SettingType.displayContrast, "DisplayContrast"],
+        [timapi.constants.SettingType.keypadTones, "KeypadTones"],
+        [timapi.constants.SettingType.alertTones, "AlertTones"],
+        [timapi.constants.SettingType.language, "Language"]]);
+timapi.protocol.constants.SettingType._protocol2TimApi =
+    new Map([["DisplayBrightness", timapi.constants.SettingType.displayBrightness],
+        ["DisplayContrast", timapi.constants.SettingType.displayContrast],
+        ["KeypadTones", timapi.constants.SettingType.keypadTones],
+        ["AlertTones", timapi.constants.SettingType.alertTones],
+        ["Language", timapi.constants.SettingType.language]]);
+timapi.protocol.constants.SleepModeStatus = {};
+timapi.protocol.constants.SleepModeStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (SleepModeStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.SleepModeStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (SleepModeStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.SleepModeStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.SleepModeStatus._timApi2Protocol =
+    new Map([[timapi.constants.SleepModeStatus.enteringSleep, "EnteringSleep"],
+        [timapi.constants.SleepModeStatus.wakingUp, "WakingUp"]]);
+timapi.protocol.constants.SleepModeStatus._protocol2TimApi =
+    new Map([["EnteringSleep", timapi.constants.SleepModeStatus.enteringSleep],
+        ["WakingUp", timapi.constants.SleepModeStatus.wakingUp]]);
+timapi.protocol.constants.StatusFunctions = {};
+timapi.protocol.constants.StatusFunctions.timApi2Protocol = function (value) {
+    var flags = 0;
+    for (var each of value) {
+        if (!this._timApi2Protocol.has(each)) {
+            throw new Error("Invalid argument '" + value + "' (StatusFunctions)");
+        }
+        flags |= this._timApi2Protocol.get(each);
+    }
+    return flags;
+};
+timapi.protocol.constants.StatusFunctions.protocol2TimApi = function (value) {
+    var set = new Set();
+    for (var [k, v] of this._protocol2TimApi.entries()) {
+        if ((value & k) != 0) {
+            set.add(v);
+        }
+    }
+    return set;
+};
+timapi.protocol.constants.StatusFunctions._timApi2Protocol =
+    new Map([[timapi.constants.StatusFunctions.featureRequest, 0x1],
+        [timapi.constants.StatusFunctions.terminalStatus, 0x2],
+        [timapi.constants.StatusFunctions.systemInformation, 0x4],
+        [timapi.constants.StatusFunctions.applicationInformation, 0x8],
+        [timapi.constants.StatusFunctions.hardwareInformation, 0x10],
+        [timapi.constants.StatusFunctions.keepAlive, 0x20],
+        [timapi.constants.StatusFunctions.licenseChanged, 0x40]]);
+timapi.protocol.constants.StatusFunctions._protocol2TimApi =
+    new Map([[0x1, timapi.constants.StatusFunctions.featureRequest],
+        [0x2, timapi.constants.StatusFunctions.terminalStatus],
+        [0x4, timapi.constants.StatusFunctions.systemInformation],
+        [0x8, timapi.constants.StatusFunctions.applicationInformation],
+        [0x10, timapi.constants.StatusFunctions.hardwareInformation],
+        [0x20, timapi.constants.StatusFunctions.keepAlive],
+        [0x40, timapi.constants.StatusFunctions.licenseChanged]]);
+timapi.protocol.constants.Theme = {};
+timapi.protocol.constants.Theme.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Theme)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.Theme.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (Theme)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Theme.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.Theme._timApi2Protocol =
+    new Map([[timapi.constants.Theme.six, "Six"],
+        [timapi.constants.Theme.swissPost, "SwissPost"]]);
+timapi.protocol.constants.Theme._protocol2TimApi =
+    new Map([["Six", timapi.constants.Theme.six],
+        ["SwissPost", timapi.constants.Theme.swissPost]]);
+timapi.protocol.constants.TransactionStatus = {};
+timapi.protocol.constants.TransactionStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (TransactionStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.TransactionStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (TransactionStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.TransactionStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.TransactionStatus._timApi2Protocol =
+    new Map([[timapi.constants.TransactionStatus.busy, "Busy"],
+        [timapi.constants.TransactionStatus.idle, "Idle"],
+        [timapi.constants.TransactionStatus.waitForCard, "WaitForCard"],
+        [timapi.constants.TransactionStatus.readingCard, "ReadingCard"],
+        [timapi.constants.TransactionStatus.applicationSelection, "ApplicationSelection"],
+        [timapi.constants.TransactionStatus.waitForProceed, "WaitForProceed"],
+        [timapi.constants.TransactionStatus.dccSelection, "DccSelection"],
+        [timapi.constants.TransactionStatus.enterTip, "EnterTip"],
+        [timapi.constants.TransactionStatus.pinEntry, "PinEntry"],
+        [timapi.constants.TransactionStatus.signatureCapture, "SignatureCapture"],
+        [timapi.constants.TransactionStatus.processing, "Processing"],
+        [timapi.constants.TransactionStatus.waitForCommit, "WaitForCommit"]]);
+timapi.protocol.constants.TransactionStatus._protocol2TimApi =
+    new Map([["Busy", timapi.constants.TransactionStatus.busy],
+        ["Idle", timapi.constants.TransactionStatus.idle],
+        ["WaitForCard", timapi.constants.TransactionStatus.waitForCard],
+        ["ReadingCard", timapi.constants.TransactionStatus.readingCard],
+        ["ApplicationSelection", timapi.constants.TransactionStatus.applicationSelection],
+        ["WaitForProceed", timapi.constants.TransactionStatus.waitForProceed],
+        ["DccSelection", timapi.constants.TransactionStatus.dccSelection],
+        ["EnterTip", timapi.constants.TransactionStatus.enterTip],
+        ["PinEntry", timapi.constants.TransactionStatus.pinEntry],
+        ["SignatureCapture", timapi.constants.TransactionStatus.signatureCapture],
+        ["Processing", timapi.constants.TransactionStatus.processing],
+        ["WaitForCommit", timapi.constants.TransactionStatus.waitForCommit]]);
+timapi.protocol.constants.TransactionType = {};
+timapi.protocol.constants.TransactionType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (TransactionType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.TransactionType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (TransactionType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.TransactionType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.TransactionType._timApi2Protocol =
+    new Map([[timapi.constants.TransactionType.purchase, "Purchase"],
+        [timapi.constants.TransactionType.credit, "Credit"],
+        [timapi.constants.TransactionType.reversal, "Reversal"],
+        [timapi.constants.TransactionType.preAuthorization, "PreAuthorization"],
+        [timapi.constants.TransactionType.finalizePurchase, "FinalizePurchase"],
+        [timapi.constants.TransactionType.cashAdvance, "CashAdvance"],
+        [timapi.constants.TransactionType.purchaseForcedAcceptance, "PurchaseForcedAcceptance"],
+        [timapi.constants.TransactionType.purchaseWithCashback, "PurchaseWithCashback"],
+        [timapi.constants.TransactionType.purchasePhoneAuthorized, "PurchasePhoneAuthorized"],
+        [timapi.constants.TransactionType.purchasePhoneOrdered, "PurchasePhoneOrdered"],
+        [timapi.constants.TransactionType.purchaseMailOrdered, "PurchaseMailOrdered"],
+        [timapi.constants.TransactionType.giro, "Giro"],
+        [timapi.constants.TransactionType.combined, "Combined"],
+        [timapi.constants.TransactionType.authorizeCredit, "AuthorizeCredit"],
+        [timapi.constants.TransactionType.authorizeDeposit, "AuthorizeDeposit"],
+        [timapi.constants.TransactionType.reservation, "Reservation"],
+        [timapi.constants.TransactionType.adjustReservation, "AdjustReservation"],
+        [timapi.constants.TransactionType.cancelReservation, "CancelReservation"],
+        [timapi.constants.TransactionType.purchaseReservation, "PurchaseReservation"],
+        [timapi.constants.TransactionType.purchaseReservationPhoneAuthorized, "PurchaseReservationPhoneAuthorized"]]);
+timapi.protocol.constants.TransactionType._protocol2TimApi =
+    new Map([["Purchase", timapi.constants.TransactionType.purchase],
+        ["Credit", timapi.constants.TransactionType.credit],
+        ["Reversal", timapi.constants.TransactionType.reversal],
+        ["PreAuthorization", timapi.constants.TransactionType.preAuthorization],
+        ["FinalizePurchase", timapi.constants.TransactionType.finalizePurchase],
+        ["CashAdvance", timapi.constants.TransactionType.cashAdvance],
+        ["PurchaseForcedAcceptance", timapi.constants.TransactionType.purchaseForcedAcceptance],
+        ["PurchaseWithCashback", timapi.constants.TransactionType.purchaseWithCashback],
+        ["PurchasePhoneAuthorized", timapi.constants.TransactionType.purchasePhoneAuthorized],
+        ["PurchasePhoneOrdered", timapi.constants.TransactionType.purchasePhoneOrdered],
+        ["PurchaseMailOrdered", timapi.constants.TransactionType.purchaseMailOrdered],
+        ["Giro", timapi.constants.TransactionType.giro],
+        ["Combined", timapi.constants.TransactionType.combined],
+        ["AuthorizeCredit", timapi.constants.TransactionType.authorizeCredit],
+        ["AuthorizeDeposit", timapi.constants.TransactionType.authorizeDeposit],
+        ["Reservation", timapi.constants.TransactionType.reservation],
+        ["AdjustReservation", timapi.constants.TransactionType.adjustReservation],
+        ["CancelReservation", timapi.constants.TransactionType.cancelReservation],
+        ["PurchaseReservation", timapi.constants.TransactionType.purchaseReservation],
+        ["PurchaseReservationPhoneAuthorized", timapi.constants.TransactionType.purchaseReservationPhoneAuthorized]]);
+timapi.protocol.constants.UpdateStatus = {};
+timapi.protocol.constants.UpdateStatus.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (UpdateStatus)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.UpdateStatus.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (UpdateStatus)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.UpdateStatus.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.UpdateStatus._timApi2Protocol =
+    new Map([[timapi.constants.UpdateStatus.upToDate, "UpToDate"],
+        [timapi.constants.UpdateStatus.runningNoReboot, "RunningNoReboot"],
+        [timapi.constants.UpdateStatus.runningReboot, "RunningReboot"]]);
+timapi.protocol.constants.UpdateStatus._protocol2TimApi =
+    new Map([["UpToDate", timapi.constants.UpdateStatus.upToDate],
+        ["RunningNoReboot", timapi.constants.UpdateStatus.runningNoReboot],
+        ["RunningReboot", timapi.constants.UpdateStatus.runningReboot]]);
+timapi.protocol.sixml.AdditionalErrorInfo = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AdditionalErrorInfo) {
+        var value = a;
+        this.value = value.value;
+        this.additionalErrorInfoType = value.additionalErrorInfoType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "AdditionalErrorInfoType")) {
+            this.additionalErrorInfoType = this.xmlGetAttribute(node, "AdditionalErrorInfoType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AdditionalErrorInfo.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AdditionalErrorInfo.prototype.value = "";
+timapi.protocol.sixml.AdditionalErrorInfo.prototype.additionalErrorInfoType = undefined;
+timapi.protocol.sixml.AdditionalErrorInfo.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AdditionalErrorInfo");
+    node.textContent = this.value;
+    if (this.additionalErrorInfoType != undefined) {
+        this.xmlSetAttribute(node, "AdditionalErrorInfoType", this.additionalErrorInfoType);
+    }
+    return node;
+};
+timapi.protocol.sixml.AdditionalErrorInfoList = function (a) {
+    this.additionalErrorInfo = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AdditionalErrorInfoList) {
+        var value = a;
+        for (var each of value.additionalErrorInfo) {
+            this.additionalErrorInfo.push(each ? new timapi.protocol.sixml.AdditionalErrorInfo(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:AdditionalErrorInfo")) {
+            this.additionalErrorInfo.push(new timapi.protocol.sixml.AdditionalErrorInfo(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AdditionalErrorInfoList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AdditionalErrorInfoList.prototype.additionalErrorInfo = undefined;
+timapi.protocol.sixml.AdditionalErrorInfoList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AdditionalErrorInfoList");
+    for (var each of this.additionalErrorInfo) {
+        this.xmlAddChild(node, "sixml:AdditionalErrorInfo", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.AdditionalInfoItem = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AdditionalInfoItem) {
+        var value = a;
+        this.value = value.value;
+        this.itemTextcode = value.itemTextcode;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "ItemTextcode")) {
+            this.itemTextcode = (this.xmlGetAttribute(node, "ItemTextcode") ? parseInt(this.xmlGetAttribute(node, "ItemTextcode")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AdditionalInfoItem.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AdditionalInfoItem.prototype.value = "";
+timapi.protocol.sixml.AdditionalInfoItem.prototype.itemTextcode = undefined;
+timapi.protocol.sixml.AdditionalInfoItem.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AdditionalInfoItem");
+    node.textContent = this.value;
+    if (this.itemTextcode != undefined) {
+        this.xmlSetAttribute(node, "ItemTextcode", timapi.utils.StringHelper.makeString(this.itemTextcode));
+    }
+    return node;
+};
+timapi.protocol.sixml.AdditionalInfoList = function (a) {
+    this.additionalInfoItem = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AdditionalInfoList) {
+        var value = a;
+        for (var each of value.additionalInfoItem) {
+            this.additionalInfoItem.push(each ? new timapi.protocol.sixml.AdditionalInfoItem(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:AdditionalInfoItem")) {
+            this.additionalInfoItem.push(new timapi.protocol.sixml.AdditionalInfoItem(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AdditionalInfoList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AdditionalInfoList.prototype.additionalInfoItem = undefined;
+timapi.protocol.sixml.AdditionalInfoList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AdditionalInfoList");
+    for (var each of this.additionalInfoItem) {
+        this.xmlAddChild(node, "sixml:AdditionalInfoItem", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Amount = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Amount) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Amount.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Amount.prototype.value = 0;
+timapi.protocol.sixml.Amount.prototype.currency = undefined;
+timapi.protocol.sixml.Amount.prototype.exponent = undefined;
+timapi.protocol.sixml.Amount.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Amount");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountDcc = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountDcc) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        this.rate = value.rate;
+        this.rateExponent = value.rateExponent;
+        this.markup = value.markup;
+        this.markupExponent = value.markupExponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Rate")) {
+            this.rate = (this.xmlGetAttribute(node, "Rate") ? parseInt(this.xmlGetAttribute(node, "Rate")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "RateExponent")) {
+            this.rateExponent = (this.xmlGetAttribute(node, "RateExponent") ? parseInt(this.xmlGetAttribute(node, "RateExponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Markup")) {
+            this.markup = (this.xmlGetAttribute(node, "Markup") ? parseInt(this.xmlGetAttribute(node, "Markup")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "MarkupExponent")) {
+            this.markupExponent = (this.xmlGetAttribute(node, "MarkupExponent") ? parseInt(this.xmlGetAttribute(node, "MarkupExponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountDcc.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountDcc.prototype.value = 0;
+timapi.protocol.sixml.AmountDcc.prototype.currency = undefined;
+timapi.protocol.sixml.AmountDcc.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountDcc.prototype.rate = undefined;
+timapi.protocol.sixml.AmountDcc.prototype.rateExponent = undefined;
+timapi.protocol.sixml.AmountDcc.prototype.markup = undefined;
+timapi.protocol.sixml.AmountDcc.prototype.markupExponent = undefined;
+timapi.protocol.sixml.AmountDcc.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountDcc");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    if (this.rate != undefined) {
+        this.xmlSetAttribute(node, "Rate", timapi.utils.StringHelper.makeString(this.rate));
+    }
+    if (this.rateExponent != undefined) {
+        this.xmlSetAttribute(node, "RateExponent", timapi.utils.StringHelper.makeString(this.rateExponent));
+    }
+    if (this.markup != undefined) {
+        this.xmlSetAttribute(node, "Markup", timapi.utils.StringHelper.makeString(this.markup));
+    }
+    if (this.markupExponent != undefined) {
+        this.xmlSetAttribute(node, "MarkupExponent", timapi.utils.StringHelper.makeString(this.markupExponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountDiscount = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountDiscount) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        this.discountId = value.discountId;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "DiscountId")) {
+            this.discountId = this.xmlGetAttribute(node, "DiscountId");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountDiscount.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountDiscount.prototype.value = 0;
+timapi.protocol.sixml.AmountDiscount.prototype.currency = undefined;
+timapi.protocol.sixml.AmountDiscount.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountDiscount.prototype.discountId = undefined;
+timapi.protocol.sixml.AmountDiscount.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountDiscount");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    if (this.discountId != undefined) {
+        this.xmlSetAttribute(node, "DiscountId", this.discountId);
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountDue = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountDue) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountDue.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountDue.prototype.value = 0;
+timapi.protocol.sixml.AmountDue.prototype.currency = undefined;
+timapi.protocol.sixml.AmountDue.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountDue.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountDue");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountOther = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountOther) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountOther.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountOther.prototype.value = 0;
+timapi.protocol.sixml.AmountOther.prototype.currency = undefined;
+timapi.protocol.sixml.AmountOther.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountOther.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountOther");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountSaldo = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountSaldo) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountSaldo.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountSaldo.prototype.value = 0;
+timapi.protocol.sixml.AmountSaldo.prototype.currency = undefined;
+timapi.protocol.sixml.AmountSaldo.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountSaldo.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountSaldo");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountTax = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountTax) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountTax.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountTax.prototype.value = 0;
+timapi.protocol.sixml.AmountTax.prototype.currency = undefined;
+timapi.protocol.sixml.AmountTax.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountTax.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountTax");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountTip = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountTip) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountTip.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountTip.prototype.value = 0;
+timapi.protocol.sixml.AmountTip.prototype.currency = undefined;
+timapi.protocol.sixml.AmountTip.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountTip.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountTip");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.AmountTotal = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountTotal) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountTotal.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountTotal.prototype.value = 0;
+timapi.protocol.sixml.AmountTotal.prototype.currency = undefined;
+timapi.protocol.sixml.AmountTotal.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountTotal.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountTotal");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.Application = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Application) {
+        var value = a;
+        this.aid = value.aid;
+        this.applicationLabel = value.applicationLabel;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "Aid")) {
+            this.aid = this.xmlGetAttribute(node, "Aid");
+        }
+        if (this.xmlHasAttribute(node, "ApplicationLabel")) {
+            this.applicationLabel = this.xmlGetAttribute(node, "ApplicationLabel");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Application.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Application.prototype.aid = undefined;
+timapi.protocol.sixml.Application.prototype.applicationLabel = undefined;
+timapi.protocol.sixml.Application.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Application");
+    if (this.aid != undefined) {
+        this.xmlSetAttribute(node, "Aid", this.aid);
+    }
+    if (this.applicationLabel != undefined) {
+        this.xmlSetAttribute(node, "ApplicationLabel", this.applicationLabel);
+    }
+    return node;
+};
+timapi.protocol.sixml.Basket = function (a) {
+    this.item = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Basket) {
+        var value = a;
+        for (var each of value.item) {
+            this.item.push(each ? new timapi.protocol.sixml.Item(each) : undefined);
+        }
+        this.loyaltyAuthResult = value.loyaltyAuthResult;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Item")) {
+            this.item.push(new timapi.protocol.sixml.Item(each));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyAuthResult")) {
+            this.loyaltyAuthResult = (this.xmlGetChild(node, "sixml:LoyaltyAuthResult").textContent ? parseInt(this.xmlGetChild(node, "sixml:LoyaltyAuthResult").textContent) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Basket.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Basket.prototype.item = undefined;
+timapi.protocol.sixml.Basket.prototype.loyaltyAuthResult = undefined;
+timapi.protocol.sixml.Basket.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Basket");
+    for (var each of this.item) {
+        this.xmlAddChild(node, "sixml:Item", each);
+    }
+    if (this.loyaltyAuthResult != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyAuthResult", timapi.utils.StringHelper.makeString(this.loyaltyAuthResult));
+    }
+    return node;
+};
+timapi.protocol.sixml.Brand = function (a) {
+    this.application = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Brand) {
+        var value = a;
+        this.brandName = value.brandName;
+        this.dccAvailable = value.dccAvailable;
+        this.paymentProtocol = value.paymentProtocol;
+        this.acqId = value.acqId;
+        this.lastInitDate = value.lastInitDate;
+        for (var each of value.application) {
+            this.application.push(each ? new timapi.protocol.sixml.Application(each) : undefined);
+        }
+        this.currencyList = value.currencyList ? new timapi.protocol.sixml.CurrencyList(value.currencyList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "BrandName")) {
+            this.brandName = this.xmlGetAttribute(node, "BrandName");
+        }
+        if (this.xmlHasAttribute(node, "DccAvailable")) {
+            this.dccAvailable = this.xmlGetAttribute(node, "DccAvailable") == "1";
+        }
+        if (this.xmlHasAttribute(node, "PaymentProtocol")) {
+            this.paymentProtocol = this.xmlGetAttribute(node, "PaymentProtocol");
+        }
+        if (this.xmlHasAttribute(node, "AcqId")) {
+            this.acqId = (this.xmlGetAttribute(node, "AcqId") ? parseInt(this.xmlGetAttribute(node, "AcqId")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "LastInitDate")) {
+            this.lastInitDate = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "LastInitDate"));
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:Application")) {
+            this.application.push(new timapi.protocol.sixml.Application(each));
+        }
+        if (this.xmlHasChild(node, "sixml:CurrencyList")) {
+            this.currencyList = new timapi.protocol.sixml.CurrencyList(this.xmlGetChild(node, "sixml:CurrencyList"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Brand.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Brand.prototype.brandName = undefined;
+timapi.protocol.sixml.Brand.prototype.dccAvailable = undefined;
+timapi.protocol.sixml.Brand.prototype.paymentProtocol = undefined;
+timapi.protocol.sixml.Brand.prototype.acqId = undefined;
+timapi.protocol.sixml.Brand.prototype.lastInitDate = undefined;
+timapi.protocol.sixml.Brand.prototype.application = undefined;
+timapi.protocol.sixml.Brand.prototype.currencyList = undefined;
+timapi.protocol.sixml.Brand.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Brand");
+    if (this.brandName != undefined) {
+        this.xmlSetAttribute(node, "BrandName", this.brandName);
+    }
+    if (this.dccAvailable != undefined) {
+        this.xmlSetAttribute(node, "DccAvailable", (this.dccAvailable ? "1" : "0"));
+    }
+    if (this.paymentProtocol != undefined) {
+        this.xmlSetAttribute(node, "PaymentProtocol", this.paymentProtocol);
+    }
+    if (this.acqId != undefined) {
+        this.xmlSetAttribute(node, "AcqId", timapi.utils.StringHelper.makeString(this.acqId));
+    }
+    if (this.lastInitDate != undefined) {
+        this.xmlSetAttribute(node, "LastInitDate", this.lastInitDate.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    for (var each of this.application) {
+        this.xmlAddChild(node, "sixml:Application", each);
+    }
+    if (this.currencyList != undefined) {
+        this.xmlAddChild(node, "sixml:CurrencyList", this.currencyList);
+    }
+    return node;
+};
+timapi.protocol.sixml.BrandBar = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.BrandBar) {
+        var value = a;
+        this.value = value.value;
+        this.brandMode = value.brandMode;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "BrandMode")) {
+            this.brandMode = this.xmlGetAttribute(node, "BrandMode");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.BrandBar.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.BrandBar.prototype.value = "";
+timapi.protocol.sixml.BrandBar.prototype.brandMode = undefined;
+timapi.protocol.sixml.BrandBar.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:BrandBar");
+    node.textContent = this.value;
+    if (this.brandMode != undefined) {
+        this.xmlSetAttribute(node, "BrandMode", this.brandMode);
+    }
+    return node;
+};
+timapi.protocol.sixml.BrandList = function (a) {
+    this.brand = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.BrandList) {
+        var value = a;
+        for (var each of value.brand) {
+            this.brand.push(each ? new timapi.protocol.sixml.Brand(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Brand")) {
+            this.brand.push(new timapi.protocol.sixml.Brand(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.BrandList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.BrandList.prototype.brand = undefined;
+timapi.protocol.sixml.BrandList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:BrandList");
+    for (var each of this.brand) {
+        this.xmlAddChild(node, "sixml:Brand", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.CardData = function (a) {
+    this.cardTrackData = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CardData) {
+        var value = a;
+        this.posEntryMode = value.posEntryMode;
+        this.aid = value.aid;
+        this.acc = value.acc;
+        this.cardNumber = value.cardNumber;
+        this.cardNumberPrintable = value.cardNumberPrintable;
+        this.cardNumberPrintableCardholder = value.cardNumberPrintableCardholder;
+        this.cardNumberEnc = value.cardNumberEnc;
+        this.cardNumberEncKeyIndex = value.cardNumberEncKeyIndex;
+        this.cardExpiryDate = value.cardExpiryDate;
+        this.brandName = value.brandName;
+        this.tenderName = value.tenderName;
+        this.cardRef = value.cardRef;
+        this.cardCountryCode = value.cardCountryCode;
+        this.terminalCountryCode = value.terminalCountryCode;
+        this.uid = value.uid;
+        for (var each of value.cardTrackData) {
+            this.cardTrackData.push(each ? new timapi.protocol.sixml.CardTrackData(each) : undefined);
+        }
+        this.loyaltyInformationList = value.loyaltyInformationList ? new timapi.protocol.sixml.LoyaltyInformationList(value.loyaltyInformationList) : undefined;
+        this.processingDisposition = value.processingDisposition;
+        this.cardType = value.cardType;
+        this.cardholder = value.cardholder;
+        this.language = value.language;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "PosEntryMode")) {
+            this.posEntryMode = (this.xmlGetAttribute(node, "PosEntryMode") ? parseInt(this.xmlGetAttribute(node, "PosEntryMode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Aid")) {
+            this.aid = this.xmlGetAttribute(node, "Aid");
+        }
+        if (this.xmlHasAttribute(node, "Acc")) {
+            this.acc = this.xmlGetAttribute(node, "Acc");
+        }
+        if (this.xmlHasAttribute(node, "CardNumber")) {
+            this.cardNumber = this.xmlGetAttribute(node, "CardNumber");
+        }
+        if (this.xmlHasAttribute(node, "CardNumberPrintable")) {
+            this.cardNumberPrintable = this.xmlGetAttribute(node, "CardNumberPrintable");
+        }
+        if (this.xmlHasAttribute(node, "CardNumberPrintableCardholder")) {
+            this.cardNumberPrintableCardholder = this.xmlGetAttribute(node, "CardNumberPrintableCardholder");
+        }
+        if (this.xmlHasAttribute(node, "CardNumberEnc")) {
+            this.cardNumberEnc = timapi.ConversionHelper.hexStringToByte(this.xmlGetAttribute(node, "CardNumberEnc"));
+        }
+        if (this.xmlHasAttribute(node, "CardNumberEncKeyIndex")) {
+            this.cardNumberEncKeyIndex = (this.xmlGetAttribute(node, "CardNumberEncKeyIndex") ? parseInt(this.xmlGetAttribute(node, "CardNumberEncKeyIndex")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CardExpiryDate")) {
+            this.cardExpiryDate = new timapi.protocol.TimeDate("MMyy", this.xmlGetAttribute(node, "CardExpiryDate"));
+        }
+        if (this.xmlHasAttribute(node, "BrandName")) {
+            this.brandName = this.xmlGetAttribute(node, "BrandName");
+        }
+        if (this.xmlHasAttribute(node, "TenderName")) {
+            this.tenderName = this.xmlGetAttribute(node, "TenderName");
+        }
+        if (this.xmlHasAttribute(node, "CardRef")) {
+            this.cardRef = this.xmlGetAttribute(node, "CardRef");
+        }
+        if (this.xmlHasAttribute(node, "CardCountryCode")) {
+            this.cardCountryCode = (this.xmlGetAttribute(node, "CardCountryCode") ? parseInt(this.xmlGetAttribute(node, "CardCountryCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TerminalCountryCode")) {
+            this.terminalCountryCode = (this.xmlGetAttribute(node, "TerminalCountryCode") ? parseInt(this.xmlGetAttribute(node, "TerminalCountryCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Uid")) {
+            this.uid = this.xmlGetAttribute(node, "Uid");
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:CardTrackData")) {
+            this.cardTrackData.push(new timapi.protocol.sixml.CardTrackData(each));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyInformationList")) {
+            this.loyaltyInformationList = new timapi.protocol.sixml.LoyaltyInformationList(this.xmlGetChild(node, "sixml:LoyaltyInformationList"));
+        }
+        if (this.xmlHasAttribute(node, "ProcessingDisposition")) {
+            this.processingDisposition = this.xmlGetAttribute(node, "ProcessingDisposition");
+        }
+        if (this.xmlHasAttribute(node, "CardType")) {
+            this.cardType = (this.xmlGetAttribute(node, "CardType") ? parseInt(this.xmlGetAttribute(node, "CardType")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Cardholder")) {
+            this.cardholder = this.xmlGetAttribute(node, "Cardholder");
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CardData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CardData.prototype.posEntryMode = undefined;
+timapi.protocol.sixml.CardData.prototype.aid = undefined;
+timapi.protocol.sixml.CardData.prototype.acc = undefined;
+timapi.protocol.sixml.CardData.prototype.cardNumber = undefined;
+timapi.protocol.sixml.CardData.prototype.cardNumberPrintable = undefined;
+timapi.protocol.sixml.CardData.prototype.cardNumberPrintableCardholder = undefined;
+timapi.protocol.sixml.CardData.prototype.cardNumberEnc = undefined;
+timapi.protocol.sixml.CardData.prototype.cardNumberEncKeyIndex = undefined;
+timapi.protocol.sixml.CardData.prototype.cardExpiryDate = undefined;
+timapi.protocol.sixml.CardData.prototype.brandName = undefined;
+timapi.protocol.sixml.CardData.prototype.tenderName = undefined;
+timapi.protocol.sixml.CardData.prototype.cardRef = undefined;
+timapi.protocol.sixml.CardData.prototype.cardCountryCode = undefined;
+timapi.protocol.sixml.CardData.prototype.terminalCountryCode = undefined;
+timapi.protocol.sixml.CardData.prototype.uid = undefined;
+timapi.protocol.sixml.CardData.prototype.cardTrackData = undefined;
+timapi.protocol.sixml.CardData.prototype.loyaltyInformationList = undefined;
+timapi.protocol.sixml.CardData.prototype.processingDisposition = undefined;
+timapi.protocol.sixml.CardData.prototype.cardType = undefined;
+timapi.protocol.sixml.CardData.prototype.cardholder = undefined;
+timapi.protocol.sixml.CardData.prototype.language = undefined;
+timapi.protocol.sixml.CardData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CardData");
+    if (this.posEntryMode != undefined) {
+        this.xmlSetAttribute(node, "PosEntryMode", timapi.utils.StringHelper.makeString(this.posEntryMode));
+    }
+    if (this.aid != undefined) {
+        this.xmlSetAttribute(node, "Aid", this.aid);
+    }
+    if (this.acc != undefined) {
+        this.xmlSetAttribute(node, "Acc", this.acc);
+    }
+    if (this.cardNumber != undefined) {
+        this.xmlSetAttribute(node, "CardNumber", this.cardNumber);
+    }
+    if (this.cardNumberPrintable != undefined) {
+        this.xmlSetAttribute(node, "CardNumberPrintable", this.cardNumberPrintable);
+    }
+    if (this.cardNumberPrintableCardholder != undefined) {
+        this.xmlSetAttribute(node, "CardNumberPrintableCardholder", this.cardNumberPrintableCardholder);
+    }
+    if (this.cardNumberEnc != undefined) {
+        this.xmlSetAttribute(node, "CardNumberEnc", timapi.protocol.ConversionHelper.byteToHexString(this.cardNumberEnc));
+    }
+    if (this.cardNumberEncKeyIndex != undefined) {
+        this.xmlSetAttribute(node, "CardNumberEncKeyIndex", timapi.utils.StringHelper.makeString(this.cardNumberEncKeyIndex));
+    }
+    if (this.cardExpiryDate != undefined) {
+        this.xmlSetAttribute(node, "CardExpiryDate", this.cardExpiryDate.format("MMyy"));
+    }
+    if (this.brandName != undefined) {
+        this.xmlSetAttribute(node, "BrandName", this.brandName);
+    }
+    if (this.tenderName != undefined) {
+        this.xmlSetAttribute(node, "TenderName", this.tenderName);
+    }
+    if (this.cardRef != undefined) {
+        this.xmlSetAttribute(node, "CardRef", this.cardRef);
+    }
+    if (this.cardCountryCode != undefined) {
+        this.xmlSetAttribute(node, "CardCountryCode", timapi.utils.StringHelper.makeString(this.cardCountryCode));
+    }
+    if (this.terminalCountryCode != undefined) {
+        this.xmlSetAttribute(node, "TerminalCountryCode", timapi.utils.StringHelper.makeString(this.terminalCountryCode));
+    }
+    if (this.uid != undefined) {
+        this.xmlSetAttribute(node, "Uid", this.uid);
+    }
+    for (var each of this.cardTrackData) {
+        this.xmlAddChild(node, "sixml:CardTrackData", each);
+    }
+    if (this.loyaltyInformationList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyInformationList", this.loyaltyInformationList);
+    }
+    if (this.processingDisposition != undefined) {
+        this.xmlSetAttribute(node, "ProcessingDisposition", this.processingDisposition);
+    }
+    if (this.cardType != undefined) {
+        this.xmlSetAttribute(node, "CardType", timapi.utils.StringHelper.makeString(this.cardType));
+    }
+    if (this.cardholder != undefined) {
+        this.xmlSetAttribute(node, "Cardholder", this.cardholder);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    return node;
+};
+timapi.protocol.sixml.CardTrackData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CardTrackData) {
+        var value = a;
+        this.value = value.value;
+        this.trackNum = value.trackNum;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "TrackNum")) {
+            this.trackNum = (this.xmlGetAttribute(node, "TrackNum") ? parseInt(this.xmlGetAttribute(node, "TrackNum")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CardTrackData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CardTrackData.prototype.value = "";
+timapi.protocol.sixml.CardTrackData.prototype.trackNum = undefined;
+timapi.protocol.sixml.CardTrackData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CardTrackData");
+    node.textContent = this.value;
+    if (this.trackNum != undefined) {
+        this.xmlSetAttribute(node, "TrackNum", timapi.utils.StringHelper.makeString(this.trackNum));
+    }
+    return node;
+};
+timapi.protocol.sixml.ConfigData = function (a) {
+    this.receiptHeader = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ConfigData) {
+        var value = a;
+        for (var each of value.receiptHeader) {
+            this.receiptHeader.push(each ? new timapi.protocol.sixml.ReceiptHeader(each) : undefined);
+        }
+        this.language = value.language;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:ReceiptHeader")) {
+            this.receiptHeader.push(new timapi.protocol.sixml.ReceiptHeader(each));
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ConfigData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ConfigData.prototype.receiptHeader = undefined;
+timapi.protocol.sixml.ConfigData.prototype.language = undefined;
+timapi.protocol.sixml.ConfigData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ConfigData");
+    for (var each of this.receiptHeader) {
+        this.xmlAddChild(node, "sixml:ReceiptHeader", each);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    return node;
+};
+timapi.protocol.sixml.Counter = function (a) {
+    this.total = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Counter) {
+        var value = a;
+        this.brandName = value.brandName;
+        this.paymentProtocol = value.paymentProtocol;
+        this.acqId = value.acqId;
+        this.count = value.count;
+        this.countDcc = value.countDcc;
+        this.countForeign = value.countForeign;
+        for (var each of value.total) {
+            this.total.push(each ? new timapi.protocol.sixml.Total(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "BrandName")) {
+            this.brandName = this.xmlGetAttribute(node, "BrandName");
+        }
+        if (this.xmlHasAttribute(node, "PaymentProtocol")) {
+            this.paymentProtocol = this.xmlGetAttribute(node, "PaymentProtocol");
+        }
+        if (this.xmlHasAttribute(node, "AcqId")) {
+            this.acqId = (this.xmlGetAttribute(node, "AcqId") ? parseInt(this.xmlGetAttribute(node, "AcqId")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Count")) {
+            this.count = (this.xmlGetAttribute(node, "Count") ? parseInt(this.xmlGetAttribute(node, "Count")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CountDcc")) {
+            this.countDcc = (this.xmlGetAttribute(node, "CountDcc") ? parseInt(this.xmlGetAttribute(node, "CountDcc")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CountForeign")) {
+            this.countForeign = (this.xmlGetAttribute(node, "CountForeign") ? parseInt(this.xmlGetAttribute(node, "CountForeign")) : 0);
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:Total")) {
+            this.total.push(new timapi.protocol.sixml.Total(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Counter.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Counter.prototype.brandName = undefined;
+timapi.protocol.sixml.Counter.prototype.paymentProtocol = undefined;
+timapi.protocol.sixml.Counter.prototype.acqId = undefined;
+timapi.protocol.sixml.Counter.prototype.count = undefined;
+timapi.protocol.sixml.Counter.prototype.countDcc = undefined;
+timapi.protocol.sixml.Counter.prototype.countForeign = undefined;
+timapi.protocol.sixml.Counter.prototype.total = undefined;
+timapi.protocol.sixml.Counter.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Counter");
+    if (this.brandName != undefined) {
+        this.xmlSetAttribute(node, "BrandName", this.brandName);
+    }
+    if (this.paymentProtocol != undefined) {
+        this.xmlSetAttribute(node, "PaymentProtocol", this.paymentProtocol);
+    }
+    if (this.acqId != undefined) {
+        this.xmlSetAttribute(node, "AcqId", timapi.utils.StringHelper.makeString(this.acqId));
+    }
+    if (this.count != undefined) {
+        this.xmlSetAttribute(node, "Count", timapi.utils.StringHelper.makeString(this.count));
+    }
+    if (this.countDcc != undefined) {
+        this.xmlSetAttribute(node, "CountDcc", timapi.utils.StringHelper.makeString(this.countDcc));
+    }
+    if (this.countForeign != undefined) {
+        this.xmlSetAttribute(node, "CountForeign", timapi.utils.StringHelper.makeString(this.countForeign));
+    }
+    for (var each of this.total) {
+        this.xmlAddChild(node, "sixml:Total", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Counters = function (a) {
+    this.counter = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Counters) {
+        var value = a;
+        this.counterType = value.counterType;
+        this.actSeqCounter = value.actSeqCounter;
+        this.periodSeqCounter = value.periodSeqCounter;
+        for (var each of value.counter) {
+            this.counter.push(each ? new timapi.protocol.sixml.Counter(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "CounterType")) {
+            this.counterType = this.xmlGetAttribute(node, "CounterType");
+        }
+        if (this.xmlHasAttribute(node, "ActSeqCounter")) {
+            this.actSeqCounter = (this.xmlGetAttribute(node, "ActSeqCounter") ? parseInt(this.xmlGetAttribute(node, "ActSeqCounter")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PeriodSeqCounter")) {
+            this.periodSeqCounter = (this.xmlGetAttribute(node, "PeriodSeqCounter") ? parseInt(this.xmlGetAttribute(node, "PeriodSeqCounter")) : 0);
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:Counter")) {
+            this.counter.push(new timapi.protocol.sixml.Counter(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Counters.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Counters.prototype.counterType = undefined;
+timapi.protocol.sixml.Counters.prototype.actSeqCounter = undefined;
+timapi.protocol.sixml.Counters.prototype.periodSeqCounter = undefined;
+timapi.protocol.sixml.Counters.prototype.counter = undefined;
+timapi.protocol.sixml.Counters.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Counters");
+    if (this.counterType != undefined) {
+        this.xmlSetAttribute(node, "CounterType", this.counterType);
+    }
+    if (this.actSeqCounter != undefined) {
+        this.xmlSetAttribute(node, "ActSeqCounter", timapi.utils.StringHelper.makeString(this.actSeqCounter));
+    }
+    if (this.periodSeqCounter != undefined) {
+        this.xmlSetAttribute(node, "PeriodSeqCounter", timapi.utils.StringHelper.makeString(this.periodSeqCounter));
+    }
+    for (var each of this.counter) {
+        this.xmlAddChild(node, "sixml:Counter", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.CurrencyItem = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CurrencyItem) {
+        var value = a;
+        this.value = value.value;
+        this.currencyType = value.currencyType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "CurrencyType")) {
+            this.currencyType = this.xmlGetAttribute(node, "CurrencyType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CurrencyItem.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CurrencyItem.prototype.value = "";
+timapi.protocol.sixml.CurrencyItem.prototype.currencyType = undefined;
+timapi.protocol.sixml.CurrencyItem.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CurrencyItem");
+    node.textContent = this.value;
+    if (this.currencyType != undefined) {
+        this.xmlSetAttribute(node, "CurrencyType", this.currencyType);
+    }
+    return node;
+};
+timapi.protocol.sixml.CurrencyList = function (a) {
+    this.currencyItem = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CurrencyList) {
+        var value = a;
+        for (var each of value.currencyItem) {
+            this.currencyItem.push(each ? new timapi.protocol.sixml.CurrencyItem(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:CurrencyItem")) {
+            this.currencyItem.push(new timapi.protocol.sixml.CurrencyItem(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CurrencyList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CurrencyList.prototype.currencyItem = undefined;
+timapi.protocol.sixml.CurrencyList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CurrencyList");
+    for (var each of this.currencyItem) {
+        this.xmlAddChild(node, "sixml:CurrencyItem", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.DisplayContent = function (a) {
+    this.displayLine = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.DisplayContent) {
+        var value = a;
+        for (var each of value.displayLine) {
+            this.displayLine.push(each ? new timapi.protocol.sixml.DisplayLine(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:DisplayLine")) {
+            this.displayLine.push(new timapi.protocol.sixml.DisplayLine(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.DisplayContent.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.DisplayContent.prototype.displayLine = undefined;
+timapi.protocol.sixml.DisplayContent.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:DisplayContent");
+    for (var each of this.displayLine) {
+        this.xmlAddChild(node, "sixml:DisplayLine", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.DisplayLine = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.DisplayLine) {
+        var value = a;
+        this.value = value.value;
+        this.lineNum = value.lineNum;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "LineNum")) {
+            this.lineNum = (this.xmlGetAttribute(node, "LineNum") ? parseInt(this.xmlGetAttribute(node, "LineNum")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.DisplayLine.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.DisplayLine.prototype.value = "";
+timapi.protocol.sixml.DisplayLine.prototype.lineNum = undefined;
+timapi.protocol.sixml.DisplayLine.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:DisplayLine");
+    node.textContent = this.value;
+    if (this.lineNum != undefined) {
+        this.xmlSetAttribute(node, "LineNum", timapi.utils.StringHelper.makeString(this.lineNum));
+    }
+    return node;
+};
+timapi.protocol.sixml.EcrData = function (a) {
+    this.ecrInfo = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.EcrData) {
+        var value = a;
+        for (var each of value.ecrInfo) {
+            this.ecrInfo.push(each ? new timapi.protocol.sixml.EcrInfo(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:EcrInfo")) {
+            this.ecrInfo.push(new timapi.protocol.sixml.EcrInfo(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.EcrData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.EcrData.prototype.ecrInfo = undefined;
+timapi.protocol.sixml.EcrData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:EcrData");
+    for (var each of this.ecrInfo) {
+        this.xmlAddChild(node, "sixml:EcrInfo", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.EcrInfo = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.EcrInfo) {
+        var value = a;
+        this.ecrInfoType = value.ecrInfoType;
+        this.ecrInfoName = value.ecrInfoName;
+        this.ecrInfoManufacturerName = value.ecrInfoManufacturerName;
+        this.ecrInfoVers = value.ecrInfoVers;
+        this.ecrInfoSerialNumber = value.ecrInfoSerialNumber;
+        this.ecrInfoArchitecture = value.ecrInfoArchitecture;
+        this.remoteIp = value.remoteIp;
+        this.integratorSolution = value.integratorSolution;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "EcrInfoType")) {
+            this.ecrInfoType = this.xmlGetAttribute(node, "EcrInfoType");
+        }
+        if (this.xmlHasAttribute(node, "EcrInfoName")) {
+            this.ecrInfoName = this.xmlGetAttribute(node, "EcrInfoName");
+        }
+        if (this.xmlHasAttribute(node, "EcrInfoManufacturerName")) {
+            this.ecrInfoManufacturerName = this.xmlGetAttribute(node, "EcrInfoManufacturerName");
+        }
+        if (this.xmlHasAttribute(node, "EcrInfoVers")) {
+            this.ecrInfoVers = this.xmlGetAttribute(node, "EcrInfoVers");
+        }
+        if (this.xmlHasAttribute(node, "EcrInfoSerialNumber")) {
+            this.ecrInfoSerialNumber = this.xmlGetAttribute(node, "EcrInfoSerialNumber");
+        }
+        if (this.xmlHasAttribute(node, "EcrInfoArchitecture")) {
+            this.ecrInfoArchitecture = this.xmlGetAttribute(node, "EcrInfoArchitecture");
+        }
+        if (this.xmlHasAttribute(node, "RemoteIp")) {
+            this.remoteIp = this.xmlGetAttribute(node, "RemoteIp");
+        }
+        if (this.xmlHasAttribute(node, "IntegratorSolution")) {
+            this.integratorSolution = this.xmlGetAttribute(node, "IntegratorSolution");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.EcrInfo.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.EcrInfo.prototype.ecrInfoType = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.ecrInfoName = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.ecrInfoManufacturerName = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.ecrInfoVers = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.ecrInfoSerialNumber = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.ecrInfoArchitecture = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.remoteIp = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.integratorSolution = undefined;
+timapi.protocol.sixml.EcrInfo.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:EcrInfo");
+    if (this.ecrInfoType != undefined) {
+        this.xmlSetAttribute(node, "EcrInfoType", this.ecrInfoType);
+    }
+    if (this.ecrInfoName != undefined) {
+        this.xmlSetAttribute(node, "EcrInfoName", this.ecrInfoName);
+    }
+    if (this.ecrInfoManufacturerName != undefined) {
+        this.xmlSetAttribute(node, "EcrInfoManufacturerName", this.ecrInfoManufacturerName);
+    }
+    if (this.ecrInfoVers != undefined) {
+        this.xmlSetAttribute(node, "EcrInfoVers", this.ecrInfoVers);
+    }
+    if (this.ecrInfoSerialNumber != undefined) {
+        this.xmlSetAttribute(node, "EcrInfoSerialNumber", this.ecrInfoSerialNumber);
+    }
+    if (this.ecrInfoArchitecture != undefined) {
+        this.xmlSetAttribute(node, "EcrInfoArchitecture", this.ecrInfoArchitecture);
+    }
+    if (this.remoteIp != undefined) {
+        this.xmlSetAttribute(node, "RemoteIp", this.remoteIp);
+    }
+    if (this.integratorSolution != undefined) {
+        this.xmlSetAttribute(node, "IntegratorSolution", this.integratorSolution);
+    }
+    return node;
+};
+timapi.protocol.sixml.Feature = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Feature) {
+        var value = a;
+        this.value = value.value;
+        this.featureType = value.featureType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "FeatureType")) {
+            this.featureType = this.xmlGetAttribute(node, "FeatureType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Feature.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Feature.prototype.value = "";
+timapi.protocol.sixml.Feature.prototype.featureType = undefined;
+timapi.protocol.sixml.Feature.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Feature");
+    node.textContent = this.value;
+    if (this.featureType != undefined) {
+        this.xmlSetAttribute(node, "FeatureType", this.featureType);
+    }
+    return node;
+};
+timapi.protocol.sixml.Features = function (a) {
+    this.feature = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Features) {
+        var value = a;
+        for (var each of value.feature) {
+            this.feature.push(each ? new timapi.protocol.sixml.Feature(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Feature")) {
+            this.feature.push(new timapi.protocol.sixml.Feature(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Features.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Features.prototype.feature = undefined;
+timapi.protocol.sixml.Features.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Features");
+    for (var each of this.feature) {
+        this.xmlAddChild(node, "sixml:Feature", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Hardware = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Hardware) {
+        var value = a;
+        this.hardwareType = value.hardwareType;
+        this.serialNumber = value.serialNumber;
+        this.productionDate = value.productionDate;
+        this.productVersion = value.productVersion;
+        this.firmwareVersion = value.firmwareVersion;
+        this.securityStatus = value.securityStatus;
+        this.lastCleaningDate = value.lastCleaningDate;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "HardwareType")) {
+            this.hardwareType = this.xmlGetAttribute(node, "HardwareType");
+        }
+        if (this.xmlHasAttribute(node, "SerialNumber")) {
+            this.serialNumber = this.xmlGetAttribute(node, "SerialNumber");
+        }
+        if (this.xmlHasAttribute(node, "ProductionDate")) {
+            this.productionDate = new timapi.protocol.TimeDate("yyyyMMdd", this.xmlGetAttribute(node, "ProductionDate"));
+        }
+        if (this.xmlHasAttribute(node, "ProductVersion")) {
+            this.productVersion = this.xmlGetAttribute(node, "ProductVersion");
+        }
+        if (this.xmlHasAttribute(node, "FirmwareVersion")) {
+            this.firmwareVersion = this.xmlGetAttribute(node, "FirmwareVersion");
+        }
+        if (this.xmlHasAttribute(node, "SecurityStatus")) {
+            this.securityStatus = this.xmlGetAttribute(node, "SecurityStatus");
+        }
+        if (this.xmlHasAttribute(node, "LastCleaningDate")) {
+            this.lastCleaningDate = new timapi.protocol.TimeDate("yyyyMMdd", this.xmlGetAttribute(node, "LastCleaningDate"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Hardware.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Hardware.prototype.hardwareType = undefined;
+timapi.protocol.sixml.Hardware.prototype.serialNumber = undefined;
+timapi.protocol.sixml.Hardware.prototype.productionDate = undefined;
+timapi.protocol.sixml.Hardware.prototype.productVersion = undefined;
+timapi.protocol.sixml.Hardware.prototype.firmwareVersion = undefined;
+timapi.protocol.sixml.Hardware.prototype.securityStatus = undefined;
+timapi.protocol.sixml.Hardware.prototype.lastCleaningDate = undefined;
+timapi.protocol.sixml.Hardware.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Hardware");
+    if (this.hardwareType != undefined) {
+        this.xmlSetAttribute(node, "HardwareType", this.hardwareType);
+    }
+    if (this.serialNumber != undefined) {
+        this.xmlSetAttribute(node, "SerialNumber", this.serialNumber);
+    }
+    if (this.productionDate != undefined) {
+        this.xmlSetAttribute(node, "ProductionDate", this.productionDate.format("yyyyMMdd"));
+    }
+    if (this.productVersion != undefined) {
+        this.xmlSetAttribute(node, "ProductVersion", this.productVersion);
+    }
+    if (this.firmwareVersion != undefined) {
+        this.xmlSetAttribute(node, "FirmwareVersion", this.firmwareVersion);
+    }
+    if (this.securityStatus != undefined) {
+        this.xmlSetAttribute(node, "SecurityStatus", this.securityStatus);
+    }
+    if (this.lastCleaningDate != undefined) {
+        this.xmlSetAttribute(node, "LastCleaningDate", this.lastCleaningDate.format("yyyyMMdd"));
+    }
+    return node;
+};
+timapi.protocol.sixml.HardwareList = function (a) {
+    this.hardware = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.HardwareList) {
+        var value = a;
+        for (var each of value.hardware) {
+            this.hardware.push(each ? new timapi.protocol.sixml.Hardware(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Hardware")) {
+            this.hardware.push(new timapi.protocol.sixml.Hardware(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.HardwareList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.HardwareList.prototype.hardware = undefined;
+timapi.protocol.sixml.HardwareList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:HardwareList");
+    for (var each of this.hardware) {
+        this.xmlAddChild(node, "sixml:Hardware", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Icon = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Icon) {
+        var value = a;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Icon.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Icon.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Icon");
+    return node;
+};
+timapi.protocol.sixml.Item = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Item) {
+        var value = a;
+        this.itemAuthResult = value.itemAuthResult;
+        this.itemId = value.itemId;
+        this.prodDescription = value.prodDescription;
+        this.loyaltyId = value.loyaltyId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountTotal = value.amountTotal ? new timapi.protocol.sixml.AmountTotal(value.amountTotal) : undefined;
+        this.amountDiscount = value.amountDiscount ? new timapi.protocol.sixml.AmountDiscount(value.amountDiscount) : undefined;
+        this.amountGross = value.amountGross ? new timapi.protocol.sixml.AmountGross(value.amountGross) : undefined;
+        this.unitAmountGross = value.unitAmountGross ? new timapi.protocol.sixml.UnitAmountGross(value.unitAmountGross) : undefined;
+        this.unitAmountDiscount = value.unitAmountDiscount ? new timapi.protocol.sixml.UnitAmountDiscount(value.unitAmountDiscount) : undefined;
+        this.amountTax = value.amountTax ? new timapi.protocol.sixml.AmountTax(value.amountTax) : undefined;
+        this.itemQuantity = value.itemQuantity ? new timapi.protocol.sixml.ItemQuantity(value.itemQuantity) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "ItemAuthResult")) {
+            this.itemAuthResult = (this.xmlGetAttribute(node, "ItemAuthResult") ? parseInt(this.xmlGetAttribute(node, "ItemAuthResult")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ItemId")) {
+            this.itemId = this.xmlGetAttribute(node, "ItemId");
+        }
+        if (this.xmlHasAttribute(node, "ProdDescription")) {
+            this.prodDescription = this.xmlGetAttribute(node, "ProdDescription");
+        }
+        if (this.xmlHasAttribute(node, "LoyaltyId")) {
+            this.loyaltyId = this.xmlGetAttribute(node, "LoyaltyId");
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTotal")) {
+            this.amountTotal = new timapi.protocol.sixml.AmountTotal(this.xmlGetChild(node, "sixml:AmountTotal"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDiscount")) {
+            this.amountDiscount = new timapi.protocol.sixml.AmountDiscount(this.xmlGetChild(node, "sixml:AmountDiscount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountGross")) {
+            this.amountGross = new timapi.protocol.sixml.AmountGross(this.xmlGetChild(node, "sixml:AmountGross"));
+        }
+        if (this.xmlHasChild(node, "sixml:UnitAmountGross")) {
+            this.unitAmountGross = new timapi.protocol.sixml.UnitAmountGross(this.xmlGetChild(node, "sixml:UnitAmountGross"));
+        }
+        if (this.xmlHasChild(node, "sixml:UnitAmountDiscount")) {
+            this.unitAmountDiscount = new timapi.protocol.sixml.UnitAmountDiscount(this.xmlGetChild(node, "sixml:UnitAmountDiscount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTax")) {
+            this.amountTax = new timapi.protocol.sixml.AmountTax(this.xmlGetChild(node, "sixml:AmountTax"));
+        }
+        if (this.xmlHasChild(node, "sixml:ItemQuantity")) {
+            this.itemQuantity = new timapi.protocol.sixml.ItemQuantity(this.xmlGetChild(node, "sixml:ItemQuantity"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Item.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Item.prototype.itemAuthResult = undefined;
+timapi.protocol.sixml.Item.prototype.itemId = undefined;
+timapi.protocol.sixml.Item.prototype.prodDescription = undefined;
+timapi.protocol.sixml.Item.prototype.loyaltyId = undefined;
+timapi.protocol.sixml.Item.prototype.amount = undefined;
+timapi.protocol.sixml.Item.prototype.amountTotal = undefined;
+timapi.protocol.sixml.Item.prototype.amountDiscount = undefined;
+timapi.protocol.sixml.Item.prototype.amountGross = undefined;
+timapi.protocol.sixml.Item.prototype.unitAmountGross = undefined;
+timapi.protocol.sixml.Item.prototype.unitAmountDiscount = undefined;
+timapi.protocol.sixml.Item.prototype.amountTax = undefined;
+timapi.protocol.sixml.Item.prototype.itemQuantity = undefined;
+timapi.protocol.sixml.Item.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Item");
+    if (this.itemAuthResult != undefined) {
+        this.xmlSetAttribute(node, "ItemAuthResult", timapi.utils.StringHelper.makeString(this.itemAuthResult));
+    }
+    if (this.itemId != undefined) {
+        this.xmlSetAttribute(node, "ItemId", this.itemId);
+    }
+    if (this.prodDescription != undefined) {
+        this.xmlSetAttribute(node, "ProdDescription", this.prodDescription);
+    }
+    if (this.loyaltyId != undefined) {
+        this.xmlSetAttribute(node, "LoyaltyId", this.loyaltyId);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountTotal != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTotal", this.amountTotal);
+    }
+    if (this.amountDiscount != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDiscount", this.amountDiscount);
+    }
+    if (this.amountGross != undefined) {
+        this.xmlAddChild(node, "sixml:AmountGross", this.amountGross);
+    }
+    if (this.unitAmountGross != undefined) {
+        this.xmlAddChild(node, "sixml:UnitAmountGross", this.unitAmountGross);
+    }
+    if (this.unitAmountDiscount != undefined) {
+        this.xmlAddChild(node, "sixml:UnitAmountDiscount", this.unitAmountDiscount);
+    }
+    if (this.amountTax != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTax", this.amountTax);
+    }
+    if (this.itemQuantity != undefined) {
+        this.xmlAddChild(node, "sixml:ItemQuantity", this.itemQuantity);
+    }
+    return node;
+};
+timapi.protocol.sixml.ItemQuantity = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ItemQuantity) {
+        var value = a;
+        this.value = value.value;
+        this.itemQuantityType = value.itemQuantityType;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "ItemQuantityType")) {
+            this.itemQuantityType = this.xmlGetAttribute(node, "ItemQuantityType");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ItemQuantity.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ItemQuantity.prototype.value = 0;
+timapi.protocol.sixml.ItemQuantity.prototype.itemQuantityType = undefined;
+timapi.protocol.sixml.ItemQuantity.prototype.exponent = undefined;
+timapi.protocol.sixml.ItemQuantity.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ItemQuantity");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.itemQuantityType != undefined) {
+        this.xmlSetAttribute(node, "ItemQuantityType", this.itemQuantityType);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.KernelVersion = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.KernelVersion) {
+        var value = a;
+        this.value = value.value;
+        this.kernelType = value.kernelType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "KernelType")) {
+            this.kernelType = (this.xmlGetAttribute(node, "KernelType") ? parseInt(this.xmlGetAttribute(node, "KernelType")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.KernelVersion.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.KernelVersion.prototype.value = "";
+timapi.protocol.sixml.KernelVersion.prototype.kernelType = undefined;
+timapi.protocol.sixml.KernelVersion.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:KernelVersion");
+    node.textContent = this.value;
+    if (this.kernelType != undefined) {
+        this.xmlSetAttribute(node, "KernelType", timapi.utils.StringHelper.makeString(this.kernelType));
+    }
+    return node;
+};
+timapi.protocol.sixml.KernelVersionList = function (a) {
+    this.kernelVersion = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.KernelVersionList) {
+        var value = a;
+        for (var each of value.kernelVersion) {
+            this.kernelVersion.push(each ? new timapi.protocol.sixml.KernelVersion(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:KernelVersion")) {
+            this.kernelVersion.push(new timapi.protocol.sixml.KernelVersion(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.KernelVersionList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.KernelVersionList.prototype.kernelVersion = undefined;
+timapi.protocol.sixml.KernelVersionList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:KernelVersionList");
+    for (var each of this.kernelVersion) {
+        this.xmlAddChild(node, "sixml:KernelVersion", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.LogOptions = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LogOptions) {
+        var value = a;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LogOptions.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LogOptions.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LogOptions");
+    return node;
+};
+timapi.protocol.sixml.LoyaltyInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyInformation) {
+        var value = a;
+        this.value = value.value;
+        this.loyaltyInfoType = value.loyaltyInfoType;
+        this.loyaltyFunctionType = value.loyaltyFunctionType;
+        this.loyaltyNumber = value.loyaltyNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = timapi.ConversionHelper.hexStringToByte(node.textContent);
+        if (this.xmlHasAttribute(node, "LoyaltyInfoType")) {
+            this.loyaltyInfoType = this.xmlGetAttribute(node, "LoyaltyInfoType");
+        }
+        if (this.xmlHasAttribute(node, "LoyaltyFunctionType")) {
+            this.loyaltyFunctionType = this.xmlGetAttribute(node, "LoyaltyFunctionType");
+        }
+        if (this.xmlHasAttribute(node, "LoyaltyNumber")) {
+            this.loyaltyNumber = timapi.ConversionHelper.hexStringToByte(this.xmlGetAttribute(node, "LoyaltyNumber"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyInformation.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyInformation.prototype.value = new Uint8Array(0);
+timapi.protocol.sixml.LoyaltyInformation.prototype.loyaltyInfoType = undefined;
+timapi.protocol.sixml.LoyaltyInformation.prototype.loyaltyFunctionType = undefined;
+timapi.protocol.sixml.LoyaltyInformation.prototype.loyaltyNumber = undefined;
+timapi.protocol.sixml.LoyaltyInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyInformation");
+    node.textContent = timapi.protocol.ConversionHelper.byteToHexString(this.value);
+    if (this.loyaltyInfoType != undefined) {
+        this.xmlSetAttribute(node, "LoyaltyInfoType", this.loyaltyInfoType);
+    }
+    if (this.loyaltyFunctionType != undefined) {
+        this.xmlSetAttribute(node, "LoyaltyFunctionType", this.loyaltyFunctionType);
+    }
+    if (this.loyaltyNumber != undefined) {
+        this.xmlSetAttribute(node, "LoyaltyNumber", timapi.protocol.ConversionHelper.byteToHexString(this.loyaltyNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyInformationList = function (a) {
+    this.loyaltyInformation = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyInformationList) {
+        var value = a;
+        for (var each of value.loyaltyInformation) {
+            this.loyaltyInformation.push(each ? new timapi.protocol.sixml.LoyaltyInformation(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:LoyaltyInformation")) {
+            this.loyaltyInformation.push(new timapi.protocol.sixml.LoyaltyInformation(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyInformationList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyInformationList.prototype.loyaltyInformation = undefined;
+timapi.protocol.sixml.LoyaltyInformationList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyInformationList");
+    for (var each of this.loyaltyInformation) {
+        this.xmlAddChild(node, "sixml:LoyaltyInformation", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.MerchantOption = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.MerchantOption) {
+        var value = a;
+        this.value = value.value;
+        this.merchantOptionType = value.merchantOptionType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "MerchantOptionType")) {
+            this.merchantOptionType = this.xmlGetAttribute(node, "MerchantOptionType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.MerchantOption.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.MerchantOption.prototype.value = "";
+timapi.protocol.sixml.MerchantOption.prototype.merchantOptionType = undefined;
+timapi.protocol.sixml.MerchantOption.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:MerchantOption");
+    node.textContent = this.value;
+    if (this.merchantOptionType != undefined) {
+        this.xmlSetAttribute(node, "MerchantOptionType", this.merchantOptionType);
+    }
+    return node;
+};
+timapi.protocol.sixml.MerchantOptionList = function (a) {
+    this.merchantOption = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.MerchantOptionList) {
+        var value = a;
+        for (var each of value.merchantOption) {
+            this.merchantOption.push(each ? new timapi.protocol.sixml.MerchantOption(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:MerchantOption")) {
+            this.merchantOption.push(new timapi.protocol.sixml.MerchantOption(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.MerchantOptionList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.MerchantOptionList.prototype.merchantOption = undefined;
+timapi.protocol.sixml.MerchantOptionList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:MerchantOptionList");
+    for (var each of this.merchantOption) {
+        this.xmlAddChild(node, "sixml:MerchantOption", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.NativeError = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.NativeError) {
+        var value = a;
+        this.errorCode = value.errorCode;
+        this.errorMessage = value.errorMessage;
+        this.errorSource = value.errorSource;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "ErrorCode")) {
+            this.errorCode = (this.xmlGetAttribute(node, "ErrorCode") ? parseInt(this.xmlGetAttribute(node, "ErrorCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ErrorMessage")) {
+            this.errorMessage = this.xmlGetAttribute(node, "ErrorMessage");
+        }
+        if (this.xmlHasAttribute(node, "ErrorSource")) {
+            this.errorSource = this.xmlGetAttribute(node, "ErrorSource");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.NativeError.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.NativeError.prototype.errorCode = undefined;
+timapi.protocol.sixml.NativeError.prototype.errorMessage = undefined;
+timapi.protocol.sixml.NativeError.prototype.errorSource = undefined;
+timapi.protocol.sixml.NativeError.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:NativeError");
+    if (this.errorCode != undefined) {
+        this.xmlSetAttribute(node, "ErrorCode", timapi.utils.StringHelper.makeString(this.errorCode));
+    }
+    if (this.errorMessage != undefined) {
+        this.xmlSetAttribute(node, "ErrorMessage", this.errorMessage);
+    }
+    if (this.errorSource != undefined) {
+        this.xmlSetAttribute(node, "ErrorSource", this.errorSource);
+    }
+    return node;
+};
+timapi.protocol.sixml.NetworkInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.NetworkInformation) {
+        var value = a;
+        this.terminalIp = value.terminalIp;
+        this.terminalIpMask = value.terminalIpMask;
+        this.terminalIpGw = value.terminalIpGw;
+        this.terminalIpDns = value.terminalIpDns;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "TerminalIp")) {
+            this.terminalIp = this.xmlGetAttribute(node, "TerminalIp");
+        }
+        if (this.xmlHasAttribute(node, "TerminalIpMask")) {
+            this.terminalIpMask = this.xmlGetAttribute(node, "TerminalIpMask");
+        }
+        if (this.xmlHasAttribute(node, "TerminalIpGw")) {
+            this.terminalIpGw = this.xmlGetAttribute(node, "TerminalIpGw");
+        }
+        if (this.xmlHasAttribute(node, "TerminalIpDns")) {
+            this.terminalIpDns = this.xmlGetAttribute(node, "TerminalIpDns");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.NetworkInformation.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.NetworkInformation.prototype.terminalIp = undefined;
+timapi.protocol.sixml.NetworkInformation.prototype.terminalIpMask = undefined;
+timapi.protocol.sixml.NetworkInformation.prototype.terminalIpGw = undefined;
+timapi.protocol.sixml.NetworkInformation.prototype.terminalIpDns = undefined;
+timapi.protocol.sixml.NetworkInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:NetworkInformation");
+    if (this.terminalIp != undefined) {
+        this.xmlSetAttribute(node, "TerminalIp", this.terminalIp);
+    }
+    if (this.terminalIpMask != undefined) {
+        this.xmlSetAttribute(node, "TerminalIpMask", this.terminalIpMask);
+    }
+    if (this.terminalIpGw != undefined) {
+        this.xmlSetAttribute(node, "TerminalIpGw", this.terminalIpGw);
+    }
+    if (this.terminalIpDns != undefined) {
+        this.xmlSetAttribute(node, "TerminalIpDns", this.terminalIpDns);
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification.prototype.function = undefined;
+timapi.protocol.sixml.Notification.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_Cancel = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_Cancel) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.retainCardFlag = value.retainCardFlag;
+        this.silentFlag = value.silentFlag;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasChild(node, "sixml:RetainCardFlag")) {
+            this.retainCardFlag = this.xmlGetChild(node, "sixml:RetainCardFlag").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:SilentFlag")) {
+            this.silentFlag = this.xmlGetChild(node, "sixml:SilentFlag").textContent == "1";
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "Cancel";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_Cancel.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_Cancel.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_Cancel.prototype.function = undefined;
+timapi.protocol.sixml.Notification_Cancel.prototype.retainCardFlag = undefined;
+timapi.protocol.sixml.Notification_Cancel.prototype.silentFlag = undefined;
+timapi.protocol.sixml.Notification_Cancel.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.retainCardFlag != undefined) {
+        this.xmlAddChild(node, "sixml:RetainCardFlag", (this.retainCardFlag ? "1" : "0"));
+    }
+    if (this.silentFlag != undefined) {
+        this.xmlAddChild(node, "sixml:SilentFlag", (this.silentFlag ? "1" : "0"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_HoldCommit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_HoldCommit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "HoldCommit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_HoldCommit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_HoldCommit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_HoldCommit.prototype.function = undefined;
+timapi.protocol.sixml.Notification_HoldCommit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_KeepAlive = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_KeepAlive) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "KeepAlive";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_KeepAlive.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_KeepAlive.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_KeepAlive.prototype.function = undefined;
+timapi.protocol.sixml.Notification_KeepAlive.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_LicenseChanged = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_LicenseChanged) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.license = value.license;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasChild(node, "sixml:License")) {
+            this.license = (this.xmlGetChild(node, "sixml:License").textContent ? parseInt(this.xmlGetChild(node, "sixml:License").textContent) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "LicenseChanged";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_LicenseChanged.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_LicenseChanged.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_LicenseChanged.prototype.function = undefined;
+timapi.protocol.sixml.Notification_LicenseChanged.prototype.license = undefined;
+timapi.protocol.sixml.Notification_LicenseChanged.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.license != undefined) {
+        this.xmlAddChild(node, "sixml:License", timapi.utils.StringHelper.makeString(this.license));
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_TerminalStatus = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_TerminalStatus) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.displayContent = value.displayContent ? new timapi.protocol.sixml.DisplayContent(value.displayContent) : undefined;
+        this.cardReaderStatus = value.cardReaderStatus;
+        this.transactionStatus = value.transactionStatus;
+        this.connectionStatus = value.connectionStatus;
+        this.managementStatus = value.managementStatus;
+        this.sleepModeStatus = value.sleepModeStatus;
+        this.receiptInformation = value.receiptInformation;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.swUpdateAvailable = value.swUpdateAvailable;
+        this.terminalId = value.terminalId;
+        this.finalAmount = value.finalAmount ? new timapi.protocol.sixml.FinalAmount(value.finalAmount) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasChild(node, "sixml:DisplayContent")) {
+            this.displayContent = new timapi.protocol.sixml.DisplayContent(this.xmlGetChild(node, "sixml:DisplayContent"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardReaderStatus")) {
+            this.cardReaderStatus = this.xmlGetChild(node, "sixml:CardReaderStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionStatus")) {
+            this.transactionStatus = this.xmlGetChild(node, "sixml:TransactionStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ConnectionStatus")) {
+            this.connectionStatus = this.xmlGetChild(node, "sixml:ConnectionStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ManagementStatus")) {
+            this.managementStatus = this.xmlGetChild(node, "sixml:ManagementStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:SleepModeStatus")) {
+            this.sleepModeStatus = this.xmlGetChild(node, "sixml:SleepModeStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ReceiptInformation")) {
+            this.receiptInformation = this.xmlGetChild(node, "sixml:ReceiptInformation").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:SwUpdateAvailable")) {
+            this.swUpdateAvailable = this.xmlGetChild(node, "sixml:SwUpdateAvailable").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:TerminalId")) {
+            this.terminalId = this.xmlGetChild(node, "sixml:TerminalId").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:FinalAmount")) {
+            this.finalAmount = new timapi.protocol.sixml.FinalAmount(this.xmlGetChild(node, "sixml:FinalAmount"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "TerminalStatus";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_TerminalStatus.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.function = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.displayContent = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.cardReaderStatus = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.transactionStatus = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.connectionStatus = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.managementStatus = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.sleepModeStatus = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.receiptInformation = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.cardData = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.swUpdateAvailable = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.terminalId = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.finalAmount = undefined;
+timapi.protocol.sixml.Notification_TerminalStatus.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.displayContent != undefined) {
+        this.xmlAddChild(node, "sixml:DisplayContent", this.displayContent);
+    }
+    if (this.cardReaderStatus != undefined) {
+        this.xmlAddChild(node, "sixml:CardReaderStatus", this.cardReaderStatus);
+    }
+    if (this.transactionStatus != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionStatus", this.transactionStatus);
+    }
+    if (this.connectionStatus != undefined) {
+        this.xmlAddChild(node, "sixml:ConnectionStatus", this.connectionStatus);
+    }
+    if (this.managementStatus != undefined) {
+        this.xmlAddChild(node, "sixml:ManagementStatus", this.managementStatus);
+    }
+    if (this.sleepModeStatus != undefined) {
+        this.xmlAddChild(node, "sixml:SleepModeStatus", this.sleepModeStatus);
+    }
+    if (this.receiptInformation != undefined) {
+        this.xmlAddChild(node, "sixml:ReceiptInformation", (this.receiptInformation ? "1" : "0"));
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.swUpdateAvailable != undefined) {
+        this.xmlAddChild(node, "sixml:SwUpdateAvailable", (this.swUpdateAvailable ? "1" : "0"));
+    }
+    if (this.terminalId != undefined) {
+        this.xmlAddChild(node, "sixml:TerminalId", this.terminalId);
+    }
+    if (this.finalAmount != undefined) {
+        this.xmlAddChild(node, "sixml:FinalAmount", this.finalAmount);
+    }
+    return node;
+};
+timapi.protocol.sixml.PlaceholderItem = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PlaceholderItem) {
+        var value = a;
+        this.value = value.value;
+        this.placeholderNumber = value.placeholderNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "PlaceholderNumber")) {
+            this.placeholderNumber = (this.xmlGetAttribute(node, "PlaceholderNumber") ? parseInt(this.xmlGetAttribute(node, "PlaceholderNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PlaceholderItem.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PlaceholderItem.prototype.value = "";
+timapi.protocol.sixml.PlaceholderItem.prototype.placeholderNumber = undefined;
+timapi.protocol.sixml.PlaceholderItem.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PlaceholderItem");
+    node.textContent = this.value;
+    if (this.placeholderNumber != undefined) {
+        this.xmlSetAttribute(node, "PlaceholderNumber", timapi.utils.StringHelper.makeString(this.placeholderNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.PlaceholderItemList = function (a) {
+    this.placeholderItem = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PlaceholderItemList) {
+        var value = a;
+        for (var each of value.placeholderItem) {
+            this.placeholderItem.push(each ? new timapi.protocol.sixml.PlaceholderItem(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:PlaceholderItem")) {
+            this.placeholderItem.push(new timapi.protocol.sixml.PlaceholderItem(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PlaceholderItemList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PlaceholderItemList.prototype.placeholderItem = undefined;
+timapi.protocol.sixml.PlaceholderItemList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PlaceholderItemList");
+    for (var each of this.placeholderItem) {
+        this.xmlAddChild(node, "sixml:PlaceholderItem", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.PpInfo = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PpInfo) {
+        var value = a;
+        this.paymentProtocol = value.paymentProtocol;
+        this.ppEp2transSeqCntOrig = value.ppEp2transSeqCntOrig;
+        this.ppEp2transSeqCnt = value.ppEp2transSeqCnt;
+        this.ppEp2authReslt = value.ppEp2authReslt;
+        this.ppEp2authRespC = value.ppEp2authRespC;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "PaymentProtocol")) {
+            this.paymentProtocol = this.xmlGetAttribute(node, "PaymentProtocol");
+        }
+        if (this.xmlHasAttribute(node, "PpEp2TransSeqCntOrig")) {
+            this.ppEp2transSeqCntOrig = (this.xmlGetAttribute(node, "PpEp2TransSeqCntOrig") ? parseInt(this.xmlGetAttribute(node, "PpEp2TransSeqCntOrig")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PpEp2TransSeqCnt")) {
+            this.ppEp2transSeqCnt = (this.xmlGetAttribute(node, "PpEp2TransSeqCnt") ? parseInt(this.xmlGetAttribute(node, "PpEp2TransSeqCnt")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PpEp2AuthReslt")) {
+            this.ppEp2authReslt = (this.xmlGetAttribute(node, "PpEp2AuthReslt") ? parseInt(this.xmlGetAttribute(node, "PpEp2AuthReslt")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PpEp2AuthRespC")) {
+            this.ppEp2authRespC = this.xmlGetAttribute(node, "PpEp2AuthRespC");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PpInfo.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PpInfo.prototype.paymentProtocol = undefined;
+timapi.protocol.sixml.PpInfo.prototype.ppEp2transSeqCntOrig = undefined;
+timapi.protocol.sixml.PpInfo.prototype.ppEp2transSeqCnt = undefined;
+timapi.protocol.sixml.PpInfo.prototype.ppEp2authReslt = undefined;
+timapi.protocol.sixml.PpInfo.prototype.ppEp2authRespC = undefined;
+timapi.protocol.sixml.PpInfo.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PpInfo");
+    if (this.paymentProtocol != undefined) {
+        this.xmlSetAttribute(node, "PaymentProtocol", this.paymentProtocol);
+    }
+    if (this.ppEp2transSeqCntOrig != undefined) {
+        this.xmlSetAttribute(node, "PpEp2TransSeqCntOrig", timapi.utils.StringHelper.makeString(this.ppEp2transSeqCntOrig));
+    }
+    if (this.ppEp2transSeqCnt != undefined) {
+        this.xmlSetAttribute(node, "PpEp2TransSeqCnt", timapi.utils.StringHelper.makeString(this.ppEp2transSeqCnt));
+    }
+    if (this.ppEp2authReslt != undefined) {
+        this.xmlSetAttribute(node, "PpEp2AuthReslt", timapi.utils.StringHelper.makeString(this.ppEp2authReslt));
+    }
+    if (this.ppEp2authRespC != undefined) {
+        this.xmlSetAttribute(node, "PpEp2AuthRespC", this.ppEp2authRespC);
+    }
+    return node;
+};
+timapi.protocol.sixml.PrintData = function (a) {
+    this.receipt = [];
+    this.receiptItems = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PrintData) {
+        var value = a;
+        for (var each of value.receipt) {
+            this.receipt.push(each ? new timapi.protocol.sixml.Receipt(each) : undefined);
+        }
+        for (var each of value.receiptItems) {
+            this.receiptItems.push(each ? new timapi.protocol.sixml.ReceiptItems(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Receipt")) {
+            this.receipt.push(new timapi.protocol.sixml.Receipt(each));
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:ReceiptItems")) {
+            this.receiptItems.push(new timapi.protocol.sixml.ReceiptItems(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PrintData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PrintData.prototype.receipt = undefined;
+timapi.protocol.sixml.PrintData.prototype.receiptItems = undefined;
+timapi.protocol.sixml.PrintData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PrintData");
+    for (var each of this.receipt) {
+        this.xmlAddChild(node, "sixml:Receipt", each);
+    }
+    for (var each of this.receiptItems) {
+        this.xmlAddChild(node, "sixml:ReceiptItems", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.PrintOptionList = function (a) {
+    this.printOptions = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PrintOptionList) {
+        var value = a;
+        for (var each of value.printOptions) {
+            this.printOptions.push(each ? new timapi.protocol.sixml.PrintOptions(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:PrintOptions")) {
+            this.printOptions.push(new timapi.protocol.sixml.PrintOptions(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PrintOptionList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PrintOptionList.prototype.printOptions = undefined;
+timapi.protocol.sixml.PrintOptionList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PrintOptionList");
+    for (var each of this.printOptions) {
+        this.xmlAddChild(node, "sixml:PrintOptions", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.PrintOptions = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PrintOptions) {
+        var value = a;
+        this.recipient = value.recipient;
+        this.printFormat = value.printFormat;
+        this.printWidth = value.printWidth;
+        this.printFlags = value.printFlags;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "Recipient")) {
+            this.recipient = this.xmlGetAttribute(node, "Recipient");
+        }
+        if (this.xmlHasAttribute(node, "PrintFormat")) {
+            this.printFormat = this.xmlGetAttribute(node, "PrintFormat");
+        }
+        if (this.xmlHasAttribute(node, "PrintWidth")) {
+            this.printWidth = (this.xmlGetAttribute(node, "PrintWidth") ? parseInt(this.xmlGetAttribute(node, "PrintWidth")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PrintFlags")) {
+            this.printFlags = (this.xmlGetAttribute(node, "PrintFlags") ? parseInt(this.xmlGetAttribute(node, "PrintFlags")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PrintOptions.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PrintOptions.prototype.recipient = undefined;
+timapi.protocol.sixml.PrintOptions.prototype.printFormat = undefined;
+timapi.protocol.sixml.PrintOptions.prototype.printWidth = undefined;
+timapi.protocol.sixml.PrintOptions.prototype.printFlags = undefined;
+timapi.protocol.sixml.PrintOptions.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PrintOptions");
+    if (this.recipient != undefined) {
+        this.xmlSetAttribute(node, "Recipient", this.recipient);
+    }
+    if (this.printFormat != undefined) {
+        this.xmlSetAttribute(node, "PrintFormat", this.printFormat);
+    }
+    if (this.printWidth != undefined) {
+        this.xmlSetAttribute(node, "PrintWidth", timapi.utils.StringHelper.makeString(this.printWidth));
+    }
+    if (this.printFlags != undefined) {
+        this.xmlSetAttribute(node, "PrintFlags", timapi.utils.StringHelper.makeString(this.printFlags));
+    }
+    return node;
+};
+timapi.protocol.sixml.ProtocolOption = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ProtocolOption) {
+        var value = a;
+        this.value = value.value;
+        this.optionType = value.optionType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "OptionType")) {
+            this.optionType = this.xmlGetAttribute(node, "OptionType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ProtocolOption.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ProtocolOption.prototype.value = "";
+timapi.protocol.sixml.ProtocolOption.prototype.optionType = undefined;
+timapi.protocol.sixml.ProtocolOption.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ProtocolOption");
+    node.textContent = this.value;
+    if (this.optionType != undefined) {
+        this.xmlSetAttribute(node, "OptionType", this.optionType);
+    }
+    return node;
+};
+timapi.protocol.sixml.ProtocolOptionList = function (a) {
+    this.protocolOption = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ProtocolOptionList) {
+        var value = a;
+        for (var each of value.protocolOption) {
+            this.protocolOption.push(each ? new timapi.protocol.sixml.ProtocolOption(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:ProtocolOption")) {
+            this.protocolOption.push(new timapi.protocol.sixml.ProtocolOption(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ProtocolOptionList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ProtocolOptionList.prototype.protocolOption = undefined;
+timapi.protocol.sixml.ProtocolOptionList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ProtocolOptionList");
+    for (var each of this.protocolOption) {
+        this.xmlAddChild(node, "sixml:ProtocolOption", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Receipt = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Receipt) {
+        var value = a;
+        this.value = value.value;
+        this.recipient = value.recipient;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "Recipient")) {
+            this.recipient = this.xmlGetAttribute(node, "Recipient");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Receipt.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Receipt.prototype.value = "";
+timapi.protocol.sixml.Receipt.prototype.recipient = undefined;
+timapi.protocol.sixml.Receipt.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Receipt");
+    node.textContent = this.value;
+    if (this.recipient != undefined) {
+        this.xmlSetAttribute(node, "Recipient", this.recipient);
+    }
+    return node;
+};
+timapi.protocol.sixml.ReceiptHeader = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ReceiptHeader) {
+        var value = a;
+        this.value = value.value;
+        this.lineNum = value.lineNum;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "LineNum")) {
+            this.lineNum = (this.xmlGetAttribute(node, "LineNum") ? parseInt(this.xmlGetAttribute(node, "LineNum")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ReceiptHeader.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ReceiptHeader.prototype.value = "";
+timapi.protocol.sixml.ReceiptHeader.prototype.lineNum = undefined;
+timapi.protocol.sixml.ReceiptHeader.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ReceiptHeader");
+    node.textContent = this.value;
+    if (this.lineNum != undefined) {
+        this.xmlSetAttribute(node, "LineNum", timapi.utils.StringHelper.makeString(this.lineNum));
+    }
+    return node;
+};
+timapi.protocol.sixml.ReceiptItem = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ReceiptItem) {
+        var value = a;
+        this.value = value.value;
+        this.receiptItemType = value.receiptItemType;
+        this.recipient = value.recipient;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "ReceiptItemType")) {
+            this.receiptItemType = this.xmlGetAttribute(node, "ReceiptItemType");
+        }
+        if (this.xmlHasAttribute(node, "Recipient")) {
+            this.recipient = this.xmlGetAttribute(node, "Recipient");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ReceiptItem.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ReceiptItem.prototype.value = "";
+timapi.protocol.sixml.ReceiptItem.prototype.receiptItemType = undefined;
+timapi.protocol.sixml.ReceiptItem.prototype.recipient = undefined;
+timapi.protocol.sixml.ReceiptItem.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ReceiptItem");
+    node.textContent = this.value;
+    if (this.receiptItemType != undefined) {
+        this.xmlSetAttribute(node, "ReceiptItemType", this.receiptItemType);
+    }
+    if (this.recipient != undefined) {
+        this.xmlSetAttribute(node, "Recipient", this.recipient);
+    }
+    return node;
+};
+timapi.protocol.sixml.ReceiptItems = function (a) {
+    this.receiptItem = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ReceiptItems) {
+        var value = a;
+        this.receiptType = value.receiptType;
+        for (var each of value.receiptItem) {
+            this.receiptItem.push(each ? new timapi.protocol.sixml.ReceiptItem(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "ReceiptType")) {
+            this.receiptType = this.xmlGetAttribute(node, "ReceiptType");
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:ReceiptItem")) {
+            this.receiptItem.push(new timapi.protocol.sixml.ReceiptItem(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ReceiptItems.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ReceiptItems.prototype.receiptType = undefined;
+timapi.protocol.sixml.ReceiptItems.prototype.receiptItem = undefined;
+timapi.protocol.sixml.ReceiptItems.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ReceiptItems");
+    if (this.receiptType != undefined) {
+        this.xmlSetAttribute(node, "ReceiptType", this.receiptType);
+    }
+    for (var each of this.receiptItem) {
+        this.xmlAddChild(node, "sixml:ReceiptItem", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.repeat = value.repeat;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Repeat")) {
+            this.repeat = (this.xmlGetAttribute(node, "Repeat") ? parseInt(this.xmlGetAttribute(node, "Repeat")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request.prototype.function = undefined;
+timapi.protocol.sixml.Request.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request.prototype.repeat = undefined;
+timapi.protocol.sixml.Request.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.repeat != undefined) {
+        this.xmlSetAttribute(node, "Repeat", timapi.utils.StringHelper.makeString(this.repeat));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Activate = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Activate) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Activate";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Activate.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Activate.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Activate.prototype.function = undefined;
+timapi.protocol.sixml.Request_Activate.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Activate.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_Activate.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ActivateServiceMenu = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ActivateServiceMenu) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "ActivateServiceMenu";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ActivateServiceMenu.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ActivateServiceMenu.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ActivateServiceMenu.prototype.function = undefined;
+timapi.protocol.sixml.Request_ActivateServiceMenu.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ActivateServiceMenu.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_AdjustReservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_AdjustReservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "AdjustReservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_AdjustReservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_AdjustReservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_AdjustReservation.prototype.function = undefined;
+timapi.protocol.sixml.Request_AdjustReservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_AdjustReservation.prototype.amount = undefined;
+timapi.protocol.sixml.Request_AdjustReservation.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_AdjustReservation.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_AdjustReservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ApplicationInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ApplicationInformation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "ApplicationInformation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ApplicationInformation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ApplicationInformation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ApplicationInformation.prototype.function = undefined;
+timapi.protocol.sixml.Request_ApplicationInformation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ApplicationInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_AuthorizeCredit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_AuthorizeCredit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "AuthorizeCredit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.function = undefined;
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.amount = undefined;
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_AuthorizeCredit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_AuthorizeDeposit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_AuthorizeDeposit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "AuthorizeDeposit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.function = undefined;
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.amount = undefined;
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_AuthorizeDeposit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Balance = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Balance) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Balance";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Balance.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Balance.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Balance.prototype.function = undefined;
+timapi.protocol.sixml.Request_Balance.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Balance.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_BalanceInquiry = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_BalanceInquiry) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.language = value.language;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "BalanceInquiry";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_BalanceInquiry.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_BalanceInquiry.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_BalanceInquiry.prototype.function = undefined;
+timapi.protocol.sixml.Request_BalanceInquiry.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_BalanceInquiry.prototype.language = undefined;
+timapi.protocol.sixml.Request_BalanceInquiry.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CancelReservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CancelReservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "CancelReservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CancelReservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CancelReservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CancelReservation.prototype.function = undefined;
+timapi.protocol.sixml.Request_CancelReservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CancelReservation.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_CancelReservation.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_CancelReservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CashAdvance = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CashAdvance) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "CashAdvance";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CashAdvance.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CashAdvance.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.function = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.amount = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_CashAdvance.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ChangeSettings = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ChangeSettings) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.settingsList = value.settingsList ? new timapi.protocol.sixml.SettingsList(value.settingsList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:SettingsList")) {
+            this.settingsList = new timapi.protocol.sixml.SettingsList(this.xmlGetChild(node, "sixml:SettingsList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "ChangeSettings";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ChangeSettings.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ChangeSettings.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ChangeSettings.prototype.function = undefined;
+timapi.protocol.sixml.Request_ChangeSettings.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ChangeSettings.prototype.settingsList = undefined;
+timapi.protocol.sixml.Request_ChangeSettings.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.settingsList != undefined) {
+        this.xmlAddChild(node, "sixml:SettingsList", this.settingsList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CloseDialogMode = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CloseDialogMode) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CloseDialogMode";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CloseDialogMode.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CloseDialogMode.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CloseDialogMode.prototype.function = undefined;
+timapi.protocol.sixml.Request_CloseDialogMode.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CloseDialogMode.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CloseMaintenanceWindow = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CloseMaintenanceWindow) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CloseMaintenanceWindow";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CloseMaintenanceWindow.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CloseMaintenanceWindow.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CloseMaintenanceWindow.prototype.function = undefined;
+timapi.protocol.sixml.Request_CloseMaintenanceWindow.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CloseMaintenanceWindow.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CloseReader = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CloseReader) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CloseReader";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CloseReader.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CloseReader.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CloseReader.prototype.function = undefined;
+timapi.protocol.sixml.Request_CloseReader.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CloseReader.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CollectPoints = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CollectPoints) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "CollectPoints";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CollectPoints.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CollectPoints.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CollectPoints.prototype.function = undefined;
+timapi.protocol.sixml.Request_CollectPoints.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CollectPoints.prototype.amount = undefined;
+timapi.protocol.sixml.Request_CollectPoints.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_CollectPoints.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_CollectPoints.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Combined = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Combined) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountOther = value.amountOther ? new timapi.protocol.sixml.AmountOther(value.amountOther) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountOther")) {
+            this.amountOther = new timapi.protocol.sixml.AmountOther(this.xmlGetChild(node, "sixml:AmountOther"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Combined";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Combined.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Combined.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.function = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.amount = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.amountOther = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_Combined.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountOther != undefined) {
+        this.xmlAddChild(node, "sixml:AmountOther", this.amountOther);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Commit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Commit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.repeat = value.repeat;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Repeat")) {
+            this.repeat = (this.xmlGetAttribute(node, "Repeat") ? parseInt(this.xmlGetAttribute(node, "Repeat")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Commit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Commit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Commit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Commit.prototype.function = undefined;
+timapi.protocol.sixml.Request_Commit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Commit.prototype.repeat = undefined;
+timapi.protocol.sixml.Request_Commit.prototype.amount = undefined;
+timapi.protocol.sixml.Request_Commit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.repeat != undefined) {
+        this.xmlSetAttribute(node, "Repeat", timapi.utils.StringHelper.makeString(this.repeat));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_CounterRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_CounterRequest) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.counterType = value.counterType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:CounterType")) {
+            this.counterType = this.xmlGetChild(node, "sixml:CounterType").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CounterRequest";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_CounterRequest.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_CounterRequest.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_CounterRequest.prototype.function = undefined;
+timapi.protocol.sixml.Request_CounterRequest.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_CounterRequest.prototype.counterType = undefined;
+timapi.protocol.sixml.Request_CounterRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.counterType != undefined) {
+        this.xmlAddChild(node, "sixml:CounterType", this.counterType);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Credit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Credit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Credit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Credit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Credit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.function = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.amount = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_Credit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_DccRates = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_DccRates) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "DccRates";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_DccRates.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_DccRates.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_DccRates.prototype.function = undefined;
+timapi.protocol.sixml.Request_DccRates.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_DccRates.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Deactivate = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Deactivate) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Deactivate";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Deactivate.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Deactivate.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Deactivate.prototype.function = undefined;
+timapi.protocol.sixml.Request_Deactivate.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Deactivate.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_EjectCard = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_EjectCard) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "EjectCard";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_EjectCard.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_EjectCard.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_EjectCard.prototype.function = undefined;
+timapi.protocol.sixml.Request_EjectCard.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_EjectCard.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_FeatureRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_FeatureRequest) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "FeatureRequest";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_FeatureRequest.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_FeatureRequest.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_FeatureRequest.prototype.function = undefined;
+timapi.protocol.sixml.Request_FeatureRequest.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_FeatureRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_FinalizePurchase = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_FinalizePurchase) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.basket = value.basket ? new timapi.protocol.sixml.Basket(value.basket) : undefined;
+        this.additionalInfoList = value.additionalInfoList ? new timapi.protocol.sixml.AdditionalInfoList(value.additionalInfoList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:Basket")) {
+            this.basket = new timapi.protocol.sixml.Basket(this.xmlGetChild(node, "sixml:Basket"));
+        }
+        if (this.xmlHasChild(node, "sixml:AdditionalInfoList")) {
+            this.additionalInfoList = new timapi.protocol.sixml.AdditionalInfoList(this.xmlGetChild(node, "sixml:AdditionalInfoList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "FinalizePurchase";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_FinalizePurchase.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.function = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.amount = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.basket = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.additionalInfoList = undefined;
+timapi.protocol.sixml.Request_FinalizePurchase.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.basket != undefined) {
+        this.xmlAddChild(node, "sixml:Basket", this.basket);
+    }
+    if (this.additionalInfoList != undefined) {
+        this.xmlAddChild(node, "sixml:AdditionalInfoList", this.additionalInfoList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Giro = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Giro) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.language = value.language;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Giro";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Giro.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Giro.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.function = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.amount = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.language = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_Giro.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_HardwareInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_HardwareInformation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "HardwareInformation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_HardwareInformation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_HardwareInformation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_HardwareInformation.prototype.function = undefined;
+timapi.protocol.sixml.Request_HardwareInformation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_HardwareInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_InitTransaction = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_InitTransaction) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.displayAmountFlag = value.displayAmountFlag;
+        this.language = value.language;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:DisplayAmountFlag")) {
+            this.displayAmountFlag = this.xmlGetChild(node, "sixml:DisplayAmountFlag").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "InitTransaction";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_InitTransaction.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_InitTransaction.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_InitTransaction.prototype.function = undefined;
+timapi.protocol.sixml.Request_InitTransaction.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_InitTransaction.prototype.amount = undefined;
+timapi.protocol.sixml.Request_InitTransaction.prototype.displayAmountFlag = undefined;
+timapi.protocol.sixml.Request_InitTransaction.prototype.language = undefined;
+timapi.protocol.sixml.Request_InitTransaction.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.displayAmountFlag != undefined) {
+        this.xmlAddChild(node, "sixml:DisplayAmountFlag", (this.displayAmountFlag ? "1" : "0"));
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_LoadVoucher = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_LoadVoucher) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "LoadVoucher";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_LoadVoucher.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_LoadVoucher.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_LoadVoucher.prototype.function = undefined;
+timapi.protocol.sixml.Request_LoadVoucher.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_LoadVoucher.prototype.amount = undefined;
+timapi.protocol.sixml.Request_LoadVoucher.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_LoadVoucher.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_LoadVoucher.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Login = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Login) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.posId = value.posId;
+        this.integratorId = value.integratorId;
+        this.protocolOptionList = value.protocolOptionList ? new timapi.protocol.sixml.ProtocolOptionList(value.protocolOptionList) : undefined;
+        this.printOptionList = value.printOptionList ? new timapi.protocol.sixml.PrintOptionList(value.printOptionList) : undefined;
+        this.manufacturerFlags = value.manufacturerFlags;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:PosId")) {
+            this.posId = this.xmlGetChild(node, "sixml:PosId").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:IntegratorId")) {
+            this.integratorId = this.xmlGetChild(node, "sixml:IntegratorId").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ProtocolOptionList")) {
+            this.protocolOptionList = new timapi.protocol.sixml.ProtocolOptionList(this.xmlGetChild(node, "sixml:ProtocolOptionList"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintOptionList")) {
+            this.printOptionList = new timapi.protocol.sixml.PrintOptionList(this.xmlGetChild(node, "sixml:PrintOptionList"));
+        }
+        if (this.xmlHasChild(node, "sixml:ManufacturerFlags")) {
+            this.manufacturerFlags = (this.xmlGetChild(node, "sixml:ManufacturerFlags").textContent ? parseInt(this.xmlGetChild(node, "sixml:ManufacturerFlags").textContent) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Login";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Login.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Login.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Login.prototype.function = undefined;
+timapi.protocol.sixml.Request_Login.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Login.prototype.posId = undefined;
+timapi.protocol.sixml.Request_Login.prototype.integratorId = undefined;
+timapi.protocol.sixml.Request_Login.prototype.protocolOptionList = undefined;
+timapi.protocol.sixml.Request_Login.prototype.printOptionList = undefined;
+timapi.protocol.sixml.Request_Login.prototype.manufacturerFlags = undefined;
+timapi.protocol.sixml.Request_Login.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.posId != undefined) {
+        this.xmlAddChild(node, "sixml:PosId", this.posId);
+    }
+    if (this.integratorId != undefined) {
+        this.xmlAddChild(node, "sixml:IntegratorId", this.integratorId);
+    }
+    if (this.protocolOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:ProtocolOptionList", this.protocolOptionList);
+    }
+    if (this.printOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:PrintOptionList", this.printOptionList);
+    }
+    if (this.manufacturerFlags != undefined) {
+        this.xmlAddChild(node, "sixml:ManufacturerFlags", timapi.utils.StringHelper.makeString(this.manufacturerFlags));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Logout = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Logout) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Logout";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Logout.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Logout.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Logout.prototype.function = undefined;
+timapi.protocol.sixml.Request_Logout.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Logout.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_OpenDialogMode = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_OpenDialogMode) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "OpenDialogMode";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_OpenDialogMode.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_OpenDialogMode.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_OpenDialogMode.prototype.function = undefined;
+timapi.protocol.sixml.Request_OpenDialogMode.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_OpenDialogMode.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_OpenMaintenanceWindow = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_OpenMaintenanceWindow) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "OpenMaintenanceWindow";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_OpenMaintenanceWindow.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_OpenMaintenanceWindow.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_OpenMaintenanceWindow.prototype.function = undefined;
+timapi.protocol.sixml.Request_OpenMaintenanceWindow.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_OpenMaintenanceWindow.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_OpenReader = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_OpenReader) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "OpenReader";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_OpenReader.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_OpenReader.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_OpenReader.prototype.function = undefined;
+timapi.protocol.sixml.Request_OpenReader.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_OpenReader.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PreAuthorization = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PreAuthorization) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.language = value.language;
+        this.retainCardFlag = value.retainCardFlag;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:RetainCardFlag")) {
+            this.retainCardFlag = this.xmlGetChild(node, "sixml:RetainCardFlag").textContent == "1";
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PreAuthorization";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PreAuthorization.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PreAuthorization.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.function = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.language = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.retainCardFlag = undefined;
+timapi.protocol.sixml.Request_PreAuthorization.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    if (this.retainCardFlag != undefined) {
+        this.xmlAddChild(node, "sixml:RetainCardFlag", (this.retainCardFlag ? "1" : "0"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Purchase = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Purchase) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        this.basket = value.basket ? new timapi.protocol.sixml.Basket(value.basket) : undefined;
+        this.language = value.language;
+        this.amountTip = value.amountTip ? new timapi.protocol.sixml.AmountTip(value.amountTip) : undefined;
+        this.loyaltyCouponList = value.loyaltyCouponList ? new timapi.protocol.sixml.LoyaltyCouponList(value.loyaltyCouponList) : undefined;
+        this.amountDiscount = value.amountDiscount ? new timapi.protocol.sixml.AmountDiscount(value.amountDiscount) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        if (this.xmlHasChild(node, "sixml:Basket")) {
+            this.basket = new timapi.protocol.sixml.Basket(this.xmlGetChild(node, "sixml:Basket"));
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTip")) {
+            this.amountTip = new timapi.protocol.sixml.AmountTip(this.xmlGetChild(node, "sixml:AmountTip"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCouponList")) {
+            this.loyaltyCouponList = new timapi.protocol.sixml.LoyaltyCouponList(this.xmlGetChild(node, "sixml:LoyaltyCouponList"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDiscount")) {
+            this.amountDiscount = new timapi.protocol.sixml.AmountDiscount(this.xmlGetChild(node, "sixml:AmountDiscount"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Purchase";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Purchase.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Purchase.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.function = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.amount = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.basket = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.language = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.amountTip = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.loyaltyCouponList = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.amountDiscount = undefined;
+timapi.protocol.sixml.Request_Purchase.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    if (this.basket != undefined) {
+        this.xmlAddChild(node, "sixml:Basket", this.basket);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    if (this.amountTip != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTip", this.amountTip);
+    }
+    if (this.loyaltyCouponList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCouponList", this.loyaltyCouponList);
+    }
+    if (this.amountDiscount != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDiscount", this.amountDiscount);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchaseForcedAcceptance) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseForcedAcceptance";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchaseForcedAcceptance.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchasePhoneAuthorized) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchasePhoneAuthorized";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneAuthorized.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchaseReservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchaseReservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseReservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchaseReservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchaseReservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchaseWithCashback = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchaseWithCashback) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountOther = value.amountOther ? new timapi.protocol.sixml.AmountOther(value.amountOther) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountOther")) {
+            this.amountOther = new timapi.protocol.sixml.AmountOther(this.xmlGetChild(node, "sixml:AmountOther"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseWithCashback";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.amountOther = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchaseWithCashback.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountOther != undefined) {
+        this.xmlAddChild(node, "sixml:AmountOther", this.amountOther);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Reboot = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Reboot) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Reboot";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Reboot.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Reboot.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Reboot.prototype.function = undefined;
+timapi.protocol.sixml.Request_Reboot.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Reboot.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ReceiptRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ReceiptRequest) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.receiptRequestType = value.receiptRequestType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:ReceiptRequestType")) {
+            this.receiptRequestType = this.xmlGetChild(node, "sixml:ReceiptRequestType").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "ReceiptRequest";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ReceiptRequest.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ReceiptRequest.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ReceiptRequest.prototype.function = undefined;
+timapi.protocol.sixml.Request_ReceiptRequest.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ReceiptRequest.prototype.receiptRequestType = undefined;
+timapi.protocol.sixml.Request_ReceiptRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.receiptRequestType != undefined) {
+        this.xmlAddChild(node, "sixml:ReceiptRequestType", this.receiptRequestType);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Reconciliation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Reconciliation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Reconciliation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Reconciliation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Reconciliation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Reconciliation.prototype.function = undefined;
+timapi.protocol.sixml.Request_Reconciliation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Reconciliation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Reconfig = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Reconfig) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Reconfig";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Reconfig.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Reconfig.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Reconfig.prototype.function = undefined;
+timapi.protocol.sixml.Request_Reconfig.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Reconfig.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Reservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Reservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "Reservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Reservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Reservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Reservation.prototype.function = undefined;
+timapi.protocol.sixml.Request_Reservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Reservation.prototype.amount = undefined;
+timapi.protocol.sixml.Request_Reservation.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_Reservation.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_Reservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Reversal = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Reversal) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Reversal";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Reversal.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Reversal.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Reversal.prototype.function = undefined;
+timapi.protocol.sixml.Request_Reversal.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Reversal.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_Reversal.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_Reversal.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_Reversal.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_Rollback = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_Rollback) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.repeat = value.repeat;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Repeat")) {
+            this.repeat = (this.xmlGetAttribute(node, "Repeat") ? parseInt(this.xmlGetAttribute(node, "Repeat")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Rollback";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_Rollback.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_Rollback.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_Rollback.prototype.function = undefined;
+timapi.protocol.sixml.Request_Rollback.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_Rollback.prototype.repeat = undefined;
+timapi.protocol.sixml.Request_Rollback.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.repeat != undefined) {
+        this.xmlSetAttribute(node, "Repeat", timapi.utils.StringHelper.makeString(this.repeat));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ShowDialog = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ShowDialog) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resourceParameterList = value.resourceParameterList ? new timapi.protocol.sixml.ResourceParameterList(value.resourceParameterList) : undefined;
+        this.resourceData = value.resourceData ? new timapi.protocol.sixml.ResourceData(value.resourceData) : undefined;
+        this.brandBar = value.brandBar ? new timapi.protocol.sixml.BrandBar(value.brandBar) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:ResourceParameterList")) {
+            this.resourceParameterList = new timapi.protocol.sixml.ResourceParameterList(this.xmlGetChild(node, "sixml:ResourceParameterList"));
+        }
+        if (this.xmlHasChild(node, "sixml:ResourceData")) {
+            this.resourceData = new timapi.protocol.sixml.ResourceData(this.xmlGetChild(node, "sixml:ResourceData"));
+        }
+        if (this.xmlHasChild(node, "sixml:BrandBar")) {
+            this.brandBar = new timapi.protocol.sixml.BrandBar(this.xmlGetChild(node, "sixml:BrandBar"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Dialog";
+        this.function = "ShowDialog";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ShowDialog.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ShowDialog.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ShowDialog.prototype.function = undefined;
+timapi.protocol.sixml.Request_ShowDialog.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ShowDialog.prototype.resourceParameterList = undefined;
+timapi.protocol.sixml.Request_ShowDialog.prototype.resourceData = undefined;
+timapi.protocol.sixml.Request_ShowDialog.prototype.brandBar = undefined;
+timapi.protocol.sixml.Request_ShowDialog.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resourceParameterList != undefined) {
+        this.xmlAddChild(node, "sixml:ResourceParameterList", this.resourceParameterList);
+    }
+    if (this.resourceData != undefined) {
+        this.xmlAddChild(node, "sixml:ResourceData", this.resourceData);
+    }
+    if (this.brandBar != undefined) {
+        this.xmlAddChild(node, "sixml:BrandBar", this.brandBar);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ShowSignatureCapture = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ShowSignatureCapture) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.signatureData = value.signatureData ? new timapi.protocol.sixml.SignatureData(value.signatureData) : undefined;
+        this.brandBar = value.brandBar ? new timapi.protocol.sixml.BrandBar(value.brandBar) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:SignatureData")) {
+            this.signatureData = new timapi.protocol.sixml.SignatureData(this.xmlGetChild(node, "sixml:SignatureData"));
+        }
+        if (this.xmlHasChild(node, "sixml:BrandBar")) {
+            this.brandBar = new timapi.protocol.sixml.BrandBar(this.xmlGetChild(node, "sixml:BrandBar"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Dialog";
+        this.function = "ShowSignatureCapture";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype.function = undefined;
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype.signatureData = undefined;
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype.brandBar = undefined;
+timapi.protocol.sixml.Request_ShowSignatureCapture.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.signatureData != undefined) {
+        this.xmlAddChild(node, "sixml:SignatureData", this.signatureData);
+    }
+    if (this.brandBar != undefined) {
+        this.xmlAddChild(node, "sixml:BrandBar", this.brandBar);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_SoftwareUpdate = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_SoftwareUpdate) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "SoftwareUpdate";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_SoftwareUpdate.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_SoftwareUpdate.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_SoftwareUpdate.prototype.function = undefined;
+timapi.protocol.sixml.Request_SoftwareUpdate.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_SoftwareUpdate.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_SystemInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_SystemInformation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.ecrData = value.ecrData ? new timapi.protocol.sixml.EcrData(value.ecrData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:EcrData")) {
+            this.ecrData = new timapi.protocol.sixml.EcrData(this.xmlGetChild(node, "sixml:EcrData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "SystemInformation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_SystemInformation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_SystemInformation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_SystemInformation.prototype.function = undefined;
+timapi.protocol.sixml.Request_SystemInformation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_SystemInformation.prototype.ecrData = undefined;
+timapi.protocol.sixml.Request_SystemInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.ecrData != undefined) {
+        this.xmlAddChild(node, "sixml:EcrData", this.ecrData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_TerminalStatus = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_TerminalStatus) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "TerminalStatus";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_TerminalStatus.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_TerminalStatus.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_TerminalStatus.prototype.function = undefined;
+timapi.protocol.sixml.Request_TerminalStatus.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_TerminalStatus.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.ResourceData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ResourceData) {
+        var value = a;
+        this.resourceId = value.resourceId;
+        this.timeout = value.timeout;
+        this.theme = value.theme;
+        this.language = value.language;
+        this.placeholderItemList = value.placeholderItemList ? new timapi.protocol.sixml.PlaceholderItemList(value.placeholderItemList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "ResourceId")) {
+            this.resourceId = (this.xmlGetAttribute(node, "ResourceId") ? parseInt(this.xmlGetAttribute(node, "ResourceId")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Timeout")) {
+            this.timeout = (this.xmlGetAttribute(node, "Timeout") ? parseInt(this.xmlGetAttribute(node, "Timeout")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Theme")) {
+            this.theme = this.xmlGetAttribute(node, "Theme");
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PlaceholderItemList")) {
+            this.placeholderItemList = new timapi.protocol.sixml.PlaceholderItemList(this.xmlGetChild(node, "sixml:PlaceholderItemList"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ResourceData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ResourceData.prototype.resourceId = undefined;
+timapi.protocol.sixml.ResourceData.prototype.timeout = undefined;
+timapi.protocol.sixml.ResourceData.prototype.theme = undefined;
+timapi.protocol.sixml.ResourceData.prototype.language = undefined;
+timapi.protocol.sixml.ResourceData.prototype.placeholderItemList = undefined;
+timapi.protocol.sixml.ResourceData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ResourceData");
+    if (this.resourceId != undefined) {
+        this.xmlSetAttribute(node, "ResourceId", timapi.utils.StringHelper.makeString(this.resourceId));
+    }
+    if (this.timeout != undefined) {
+        this.xmlSetAttribute(node, "Timeout", timapi.utils.StringHelper.makeString(this.timeout));
+    }
+    if (this.theme != undefined) {
+        this.xmlSetAttribute(node, "Theme", this.theme);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    if (this.placeholderItemList != undefined) {
+        this.xmlAddChild(node, "sixml:PlaceholderItemList", this.placeholderItemList);
+    }
+    return node;
+};
+timapi.protocol.sixml.ResourceInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ResourceInformation) {
+        var value = a;
+        this.reason = value.reason;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.inputValue = value.inputValue;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "Reason")) {
+            this.reason = this.xmlGetAttribute(node, "Reason");
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:InputValue")) {
+            this.inputValue = this.xmlGetChild(node, "sixml:InputValue").textContent;
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ResourceInformation.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ResourceInformation.prototype.reason = undefined;
+timapi.protocol.sixml.ResourceInformation.prototype.cardData = undefined;
+timapi.protocol.sixml.ResourceInformation.prototype.inputValue = undefined;
+timapi.protocol.sixml.ResourceInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ResourceInformation");
+    if (this.reason != undefined) {
+        this.xmlSetAttribute(node, "Reason", this.reason);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.inputValue != undefined) {
+        this.xmlAddChild(node, "sixml:InputValue", this.inputValue);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.repeat = value.repeat;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasAttribute(node, "Repeat")) {
+            this.repeat = (this.xmlGetAttribute(node, "Repeat") ? parseInt(this.xmlGetAttribute(node, "Repeat")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response.prototype.function = undefined;
+timapi.protocol.sixml.Response.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response.prototype.repeat = undefined;
+timapi.protocol.sixml.Response.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.repeat != undefined) {
+        this.xmlSetAttribute(node, "Repeat", timapi.utils.StringHelper.makeString(this.repeat));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Activate = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Activate) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.actSeqCounter = value.actSeqCounter;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:ActSeqCounter")) {
+            this.actSeqCounter = (this.xmlGetChild(node, "sixml:ActSeqCounter").textContent ? parseInt(this.xmlGetChild(node, "sixml:ActSeqCounter").textContent) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Activate";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Activate.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Activate.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.function = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.actSeqCounter = undefined;
+timapi.protocol.sixml.Response_Activate.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.actSeqCounter != undefined) {
+        this.xmlAddChild(node, "sixml:ActSeqCounter", timapi.utils.StringHelper.makeString(this.actSeqCounter));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ActivateServiceMenu = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ActivateServiceMenu) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "ActivateServiceMenu";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype.function = undefined;
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ActivateServiceMenu.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_AdjustReservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_AdjustReservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "AdjustReservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_AdjustReservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_AdjustReservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.function = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.amount = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.printData = undefined;
+timapi.protocol.sixml.Response_AdjustReservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ApplicationInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ApplicationInformation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.brandList = value.brandList ? new timapi.protocol.sixml.BrandList(value.brandList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:BrandList")) {
+            this.brandList = new timapi.protocol.sixml.BrandList(this.xmlGetChild(node, "sixml:BrandList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "ApplicationInformation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ApplicationInformation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.function = undefined;
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.brandList = undefined;
+timapi.protocol.sixml.Response_ApplicationInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.brandList != undefined) {
+        this.xmlAddChild(node, "sixml:BrandList", this.brandList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_AuthorizeCredit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_AuthorizeCredit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "AuthorizeCredit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.function = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.amount = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.printData = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_AuthorizeCredit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_AuthorizeDeposit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_AuthorizeDeposit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "AuthorizeDeposit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.function = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.amount = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.printData = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_AuthorizeDeposit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Balance = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Balance) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.counters = value.counters ? new timapi.protocol.sixml.Counters(value.counters) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Counters")) {
+            this.counters = new timapi.protocol.sixml.Counters(this.xmlGetChild(node, "sixml:Counters"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Balance";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Balance.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Balance.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.function = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.counters = undefined;
+timapi.protocol.sixml.Response_Balance.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.counters != undefined) {
+        this.xmlAddChild(node, "sixml:Counters", this.counters);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_BalanceInquiry = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_BalanceInquiry) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "BalanceInquiry";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_BalanceInquiry.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.function = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.printData = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_BalanceInquiry.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CancelReservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CancelReservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "CancelReservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CancelReservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CancelReservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.function = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.amount = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.printData = undefined;
+timapi.protocol.sixml.Response_CancelReservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CashAdvance = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CashAdvance) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "CashAdvance";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CashAdvance.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CashAdvance.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.function = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.amount = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.printData = undefined;
+timapi.protocol.sixml.Response_CashAdvance.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ChangeSettings = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ChangeSettings) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "ChangeSettings";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ChangeSettings.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ChangeSettings.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ChangeSettings.prototype.function = undefined;
+timapi.protocol.sixml.Response_ChangeSettings.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ChangeSettings.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ChangeSettings.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ChangeSettings.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CloseDialogMode = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CloseDialogMode) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CloseDialogMode";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CloseDialogMode.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CloseDialogMode.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CloseDialogMode.prototype.function = undefined;
+timapi.protocol.sixml.Response_CloseDialogMode.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CloseDialogMode.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CloseDialogMode.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CloseDialogMode.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CloseMaintenanceWindow = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CloseMaintenanceWindow) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CloseMaintenanceWindow";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype.function = undefined;
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CloseMaintenanceWindow.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CloseReader = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CloseReader) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CloseReader";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CloseReader.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CloseReader.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CloseReader.prototype.function = undefined;
+timapi.protocol.sixml.Response_CloseReader.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CloseReader.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CloseReader.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CloseReader.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CollectPoints = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CollectPoints) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "CollectPoints";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CollectPoints.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CollectPoints.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.function = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.amount = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.printData = undefined;
+timapi.protocol.sixml.Response_CollectPoints.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Combined = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Combined) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Combined";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Combined.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Combined.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.function = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.amount = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_Combined.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Commit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Commit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.repeat = value.repeat;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasAttribute(node, "Repeat")) {
+            this.repeat = (this.xmlGetAttribute(node, "Repeat") ? parseInt(this.xmlGetAttribute(node, "Repeat")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Commit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Commit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Commit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.function = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.repeat = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Commit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.repeat != undefined) {
+        this.xmlSetAttribute(node, "Repeat", timapi.utils.StringHelper.makeString(this.repeat));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_CounterRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_CounterRequest) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.counters = value.counters ? new timapi.protocol.sixml.Counters(value.counters) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Counters")) {
+            this.counters = new timapi.protocol.sixml.Counters(this.xmlGetChild(node, "sixml:Counters"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "CounterRequest";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_CounterRequest.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_CounterRequest.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_CounterRequest.prototype.function = undefined;
+timapi.protocol.sixml.Response_CounterRequest.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_CounterRequest.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_CounterRequest.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_CounterRequest.prototype.counters = undefined;
+timapi.protocol.sixml.Response_CounterRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.counters != undefined) {
+        this.xmlAddChild(node, "sixml:Counters", this.counters);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Credit = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Credit) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Credit";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Credit.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Credit.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.function = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.amount = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Credit.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_DccRates = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_DccRates) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "DccRates";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_DccRates.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_DccRates.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_DccRates.prototype.function = undefined;
+timapi.protocol.sixml.Response_DccRates.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_DccRates.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_DccRates.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_DccRates.prototype.printData = undefined;
+timapi.protocol.sixml.Response_DccRates.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Deactivate = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Deactivate) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.counters = value.counters ? new timapi.protocol.sixml.Counters(value.counters) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Counters")) {
+            this.counters = new timapi.protocol.sixml.Counters(this.xmlGetChild(node, "sixml:Counters"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Deactivate";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Deactivate.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Deactivate.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.function = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.counters = undefined;
+timapi.protocol.sixml.Response_Deactivate.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.counters != undefined) {
+        this.xmlAddChild(node, "sixml:Counters", this.counters);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_EjectCard = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_EjectCard) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "EjectCard";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_EjectCard.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_EjectCard.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_EjectCard.prototype.function = undefined;
+timapi.protocol.sixml.Response_EjectCard.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_EjectCard.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_EjectCard.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_EjectCard.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Error = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Error) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.errorMessage = value.errorMessage;
+        this.nativeError = value.nativeError ? new timapi.protocol.sixml.NativeError(value.nativeError) : undefined;
+        this.ppInfo = value.ppInfo ? new timapi.protocol.sixml.PpInfo(value.ppInfo) : undefined;
+        this.additionalErrorInfoList = value.additionalErrorInfoList ? new timapi.protocol.sixml.AdditionalErrorInfoList(value.additionalErrorInfoList) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.basket = value.basket ? new timapi.protocol.sixml.Basket(value.basket) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:ErrorMessage")) {
+            this.errorMessage = this.xmlGetChild(node, "sixml:ErrorMessage").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:NativeError")) {
+            this.nativeError = new timapi.protocol.sixml.NativeError(this.xmlGetChild(node, "sixml:NativeError"));
+        }
+        if (this.xmlHasChild(node, "sixml:PpInfo")) {
+            this.ppInfo = new timapi.protocol.sixml.PpInfo(this.xmlGetChild(node, "sixml:PpInfo"));
+        }
+        if (this.xmlHasChild(node, "sixml:AdditionalErrorInfoList")) {
+            this.additionalErrorInfoList = new timapi.protocol.sixml.AdditionalErrorInfoList(this.xmlGetChild(node, "sixml:AdditionalErrorInfoList"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Basket")) {
+            this.basket = new timapi.protocol.sixml.Basket(this.xmlGetChild(node, "sixml:Basket"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Error.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Error.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Error.prototype.function = undefined;
+timapi.protocol.sixml.Response_Error.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Error.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Error.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Error.prototype.errorMessage = undefined;
+timapi.protocol.sixml.Response_Error.prototype.nativeError = undefined;
+timapi.protocol.sixml.Response_Error.prototype.ppInfo = undefined;
+timapi.protocol.sixml.Response_Error.prototype.additionalErrorInfoList = undefined;
+timapi.protocol.sixml.Response_Error.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Error.prototype.basket = undefined;
+timapi.protocol.sixml.Response_Error.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.errorMessage != undefined) {
+        this.xmlAddChild(node, "sixml:ErrorMessage", this.errorMessage);
+    }
+    if (this.nativeError != undefined) {
+        this.xmlAddChild(node, "sixml:NativeError", this.nativeError);
+    }
+    if (this.ppInfo != undefined) {
+        this.xmlAddChild(node, "sixml:PpInfo", this.ppInfo);
+    }
+    if (this.additionalErrorInfoList != undefined) {
+        this.xmlAddChild(node, "sixml:AdditionalErrorInfoList", this.additionalErrorInfoList);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.basket != undefined) {
+        this.xmlAddChild(node, "sixml:Basket", this.basket);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_FeatureRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_FeatureRequest) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.features = value.features ? new timapi.protocol.sixml.Features(value.features) : undefined;
+        this.terminalId = value.terminalId;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Features")) {
+            this.features = new timapi.protocol.sixml.Features(this.xmlGetChild(node, "sixml:Features"));
+        }
+        if (this.xmlHasChild(node, "sixml:TerminalId")) {
+            this.terminalId = this.xmlGetChild(node, "sixml:TerminalId").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "FeatureRequest";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_FeatureRequest.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_FeatureRequest.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.function = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.features = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.terminalId = undefined;
+timapi.protocol.sixml.Response_FeatureRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.features != undefined) {
+        this.xmlAddChild(node, "sixml:Features", this.features);
+    }
+    if (this.terminalId != undefined) {
+        this.xmlAddChild(node, "sixml:TerminalId", this.terminalId);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_FinalizePurchase = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_FinalizePurchase) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.basket = value.basket ? new timapi.protocol.sixml.Basket(value.basket) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Basket")) {
+            this.basket = new timapi.protocol.sixml.Basket(this.xmlGetChild(node, "sixml:Basket"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "FinalizePurchase";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_FinalizePurchase.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.function = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.printData = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.basket = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.amount = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_FinalizePurchase.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.basket != undefined) {
+        this.xmlAddChild(node, "sixml:Basket", this.basket);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Giro = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Giro) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Giro";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Giro.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Giro.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.function = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.amount = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_Giro.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_HardwareInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_HardwareInformation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.errorCode = value.errorCode;
+        this.hardwareList = value.hardwareList ? new timapi.protocol.sixml.HardwareList(value.hardwareList) : undefined;
+        this.kernelVersionList = value.kernelVersionList ? new timapi.protocol.sixml.KernelVersionList(value.kernelVersionList) : undefined;
+        this.settingsList = value.settingsList ? new timapi.protocol.sixml.SettingsList(value.settingsList) : undefined;
+        this.statisticsList = value.statisticsList ? new timapi.protocol.sixml.StatisticsList(value.statisticsList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:ErrorCode")) {
+            this.errorCode = (this.xmlGetChild(node, "sixml:ErrorCode").textContent ? parseInt(this.xmlGetChild(node, "sixml:ErrorCode").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:HardwareList")) {
+            this.hardwareList = new timapi.protocol.sixml.HardwareList(this.xmlGetChild(node, "sixml:HardwareList"));
+        }
+        if (this.xmlHasChild(node, "sixml:KernelVersionList")) {
+            this.kernelVersionList = new timapi.protocol.sixml.KernelVersionList(this.xmlGetChild(node, "sixml:KernelVersionList"));
+        }
+        if (this.xmlHasChild(node, "sixml:SettingsList")) {
+            this.settingsList = new timapi.protocol.sixml.SettingsList(this.xmlGetChild(node, "sixml:SettingsList"));
+        }
+        if (this.xmlHasChild(node, "sixml:StatisticsList")) {
+            this.statisticsList = new timapi.protocol.sixml.StatisticsList(this.xmlGetChild(node, "sixml:StatisticsList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "HardwareInformation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_HardwareInformation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_HardwareInformation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.function = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.errorCode = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.hardwareList = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.kernelVersionList = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.settingsList = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.statisticsList = undefined;
+timapi.protocol.sixml.Response_HardwareInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.errorCode != undefined) {
+        this.xmlAddChild(node, "sixml:ErrorCode", timapi.utils.StringHelper.makeString(this.errorCode));
+    }
+    if (this.hardwareList != undefined) {
+        this.xmlAddChild(node, "sixml:HardwareList", this.hardwareList);
+    }
+    if (this.kernelVersionList != undefined) {
+        this.xmlAddChild(node, "sixml:KernelVersionList", this.kernelVersionList);
+    }
+    if (this.settingsList != undefined) {
+        this.xmlAddChild(node, "sixml:SettingsList", this.settingsList);
+    }
+    if (this.statisticsList != undefined) {
+        this.xmlAddChild(node, "sixml:StatisticsList", this.statisticsList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_InitTransaction = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_InitTransaction) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "InitTransaction";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_InitTransaction.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_InitTransaction.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_InitTransaction.prototype.function = undefined;
+timapi.protocol.sixml.Response_InitTransaction.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_InitTransaction.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_InitTransaction.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_InitTransaction.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_InitTransaction.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_LoadVoucher = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_LoadVoucher) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "LoadVoucher";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_LoadVoucher.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_LoadVoucher.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.function = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.amount = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.printData = undefined;
+timapi.protocol.sixml.Response_LoadVoucher.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Login = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Login) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Login";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Login.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Login.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Login.prototype.function = undefined;
+timapi.protocol.sixml.Response_Login.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Login.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Login.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Login.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Logout = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Logout) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Logout";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Logout.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Logout.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Logout.prototype.function = undefined;
+timapi.protocol.sixml.Response_Logout.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Logout.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Logout.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Logout.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_OpenDialogMode = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_OpenDialogMode) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "OpenDialogMode";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_OpenDialogMode.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_OpenDialogMode.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_OpenDialogMode.prototype.function = undefined;
+timapi.protocol.sixml.Response_OpenDialogMode.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_OpenDialogMode.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_OpenDialogMode.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_OpenDialogMode.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_OpenMaintenanceWindow = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_OpenMaintenanceWindow) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "OpenMaintenanceWindow";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype.function = undefined;
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_OpenMaintenanceWindow.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_OpenReader = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_OpenReader) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "OpenReader";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_OpenReader.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_OpenReader.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_OpenReader.prototype.function = undefined;
+timapi.protocol.sixml.Response_OpenReader.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_OpenReader.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_OpenReader.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_OpenReader.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PreAuthorization = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PreAuthorization) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.basket = value.basket ? new timapi.protocol.sixml.Basket(value.basket) : undefined;
+        this.additionalInfoList = value.additionalInfoList ? new timapi.protocol.sixml.AdditionalInfoList(value.additionalInfoList) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:Basket")) {
+            this.basket = new timapi.protocol.sixml.Basket(this.xmlGetChild(node, "sixml:Basket"));
+        }
+        if (this.xmlHasChild(node, "sixml:AdditionalInfoList")) {
+            this.additionalInfoList = new timapi.protocol.sixml.AdditionalInfoList(this.xmlGetChild(node, "sixml:AdditionalInfoList"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PreAuthorization";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PreAuthorization.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PreAuthorization.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.function = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.basket = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.additionalInfoList = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PreAuthorization.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.basket != undefined) {
+        this.xmlAddChild(node, "sixml:Basket", this.basket);
+    }
+    if (this.additionalInfoList != undefined) {
+        this.xmlAddChild(node, "sixml:AdditionalInfoList", this.additionalInfoList);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Purchase = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Purchase) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.basket = value.basket ? new timapi.protocol.sixml.Basket(value.basket) : undefined;
+        this.additionalInfoList = value.additionalInfoList ? new timapi.protocol.sixml.AdditionalInfoList(value.additionalInfoList) : undefined;
+        this.amountTip = value.amountTip ? new timapi.protocol.sixml.AmountTip(value.amountTip) : undefined;
+        this.loyaltyCashbackAmount = value.loyaltyCashbackAmount ? new timapi.protocol.sixml.LoyaltyCashbackAmount(value.loyaltyCashbackAmount) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Basket")) {
+            this.basket = new timapi.protocol.sixml.Basket(this.xmlGetChild(node, "sixml:Basket"));
+        }
+        if (this.xmlHasChild(node, "sixml:AdditionalInfoList")) {
+            this.additionalInfoList = new timapi.protocol.sixml.AdditionalInfoList(this.xmlGetChild(node, "sixml:AdditionalInfoList"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTip")) {
+            this.amountTip = new timapi.protocol.sixml.AmountTip(this.xmlGetChild(node, "sixml:AmountTip"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCashbackAmount")) {
+            this.loyaltyCashbackAmount = new timapi.protocol.sixml.LoyaltyCashbackAmount(this.xmlGetChild(node, "sixml:LoyaltyCashbackAmount"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Purchase";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Purchase.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Purchase.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.function = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.amount = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.basket = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.additionalInfoList = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.amountTip = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.loyaltyCashbackAmount = undefined;
+timapi.protocol.sixml.Response_Purchase.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.basket != undefined) {
+        this.xmlAddChild(node, "sixml:Basket", this.basket);
+    }
+    if (this.additionalInfoList != undefined) {
+        this.xmlAddChild(node, "sixml:AdditionalInfoList", this.additionalInfoList);
+    }
+    if (this.amountTip != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTip", this.amountTip);
+    }
+    if (this.loyaltyCashbackAmount != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCashbackAmount", this.loyaltyCashbackAmount);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchaseForcedAcceptance) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseForcedAcceptance";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchaseForcedAcceptance.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchasePhoneAuthorized) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchasePhoneAuthorized";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneAuthorized.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchaseReservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchaseReservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountTip = value.amountTip ? new timapi.protocol.sixml.AmountTip(value.amountTip) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTip")) {
+            this.amountTip = new timapi.protocol.sixml.AmountTip(this.xmlGetChild(node, "sixml:AmountTip"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseReservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchaseReservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.amountTip = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchaseReservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountTip != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTip", this.amountTip);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchaseWithCashback = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchaseWithCashback) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountOther = value.amountOther ? new timapi.protocol.sixml.AmountOther(value.amountOther) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountOther")) {
+            this.amountOther = new timapi.protocol.sixml.AmountOther(this.xmlGetChild(node, "sixml:AmountOther"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseWithCashback";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.amountOther = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchaseWithCashback.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountOther != undefined) {
+        this.xmlAddChild(node, "sixml:AmountOther", this.amountOther);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Reboot = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Reboot) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Reboot";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Reboot.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Reboot.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Reboot.prototype.function = undefined;
+timapi.protocol.sixml.Response_Reboot.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Reboot.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Reboot.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Reboot.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ReceiptRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ReceiptRequest) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        this.hasMoreReceipts = value.hasMoreReceipts;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        if (this.xmlHasChild(node, "sixml:HasMoreReceipts")) {
+            this.hasMoreReceipts = this.xmlGetChild(node, "sixml:HasMoreReceipts").textContent == "1";
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "ReceiptRequest";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ReceiptRequest.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.function = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.printData = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.hasMoreReceipts = undefined;
+timapi.protocol.sixml.Response_ReceiptRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    if (this.hasMoreReceipts != undefined) {
+        this.xmlAddChild(node, "sixml:HasMoreReceipts", (this.hasMoreReceipts ? "1" : "0"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Reconciliation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Reconciliation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.counters = value.counters ? new timapi.protocol.sixml.Counters(value.counters) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Counters")) {
+            this.counters = new timapi.protocol.sixml.Counters(this.xmlGetChild(node, "sixml:Counters"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Reconciliation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Reconciliation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Reconciliation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.function = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.counters = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Reconciliation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.counters != undefined) {
+        this.xmlAddChild(node, "sixml:Counters", this.counters);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Reconfig = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Reconfig) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "Reconfig";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Reconfig.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Reconfig.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Reconfig.prototype.function = undefined;
+timapi.protocol.sixml.Response_Reconfig.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Reconfig.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Reconfig.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Reconfig.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Reconfig.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Reservation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Reservation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "Reservation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Reservation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Reservation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.function = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.amount = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Reservation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Reversal = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Reversal) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Reversal";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Reversal.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Reversal.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.function = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.amount = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Reversal.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_Rollback = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_Rollback) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.repeat = value.repeat;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasAttribute(node, "Repeat")) {
+            this.repeat = (this.xmlGetAttribute(node, "Repeat") ? parseInt(this.xmlGetAttribute(node, "Repeat")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "Rollback";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_Rollback.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_Rollback.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.function = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.repeat = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.printData = undefined;
+timapi.protocol.sixml.Response_Rollback.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.repeat != undefined) {
+        this.xmlSetAttribute(node, "Repeat", timapi.utils.StringHelper.makeString(this.repeat));
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ShowDialog = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ShowDialog) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.resourceInformation = value.resourceInformation ? new timapi.protocol.sixml.ResourceInformation(value.resourceInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:ResourceInformation")) {
+            this.resourceInformation = new timapi.protocol.sixml.ResourceInformation(this.xmlGetChild(node, "sixml:ResourceInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Dialog";
+        this.function = "ShowDialog";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ShowDialog.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ShowDialog.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ShowDialog.prototype.function = undefined;
+timapi.protocol.sixml.Response_ShowDialog.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ShowDialog.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ShowDialog.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ShowDialog.prototype.resourceInformation = undefined;
+timapi.protocol.sixml.Response_ShowDialog.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.resourceInformation != undefined) {
+        this.xmlAddChild(node, "sixml:ResourceInformation", this.resourceInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ShowSignatureCapture = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ShowSignatureCapture) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.signatureInformation = value.signatureInformation ? new timapi.protocol.sixml.SignatureInformation(value.signatureInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:SignatureInformation")) {
+            this.signatureInformation = new timapi.protocol.sixml.SignatureInformation(this.xmlGetChild(node, "sixml:SignatureInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Dialog";
+        this.function = "ShowSignatureCapture";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.function = undefined;
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.signatureInformation = undefined;
+timapi.protocol.sixml.Response_ShowSignatureCapture.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.signatureInformation != undefined) {
+        this.xmlAddChild(node, "sixml:SignatureInformation", this.signatureInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_SoftwareUpdate = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_SoftwareUpdate) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.updateStatus = value.updateStatus;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:UpdateStatus")) {
+            this.updateStatus = this.xmlGetChild(node, "sixml:UpdateStatus").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Admin";
+        this.function = "SoftwareUpdate";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.function = undefined;
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.updateStatus = undefined;
+timapi.protocol.sixml.Response_SoftwareUpdate.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.updateStatus != undefined) {
+        this.xmlAddChild(node, "sixml:UpdateStatus", this.updateStatus);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_SystemInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_SystemInformation) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.configData = value.configData ? new timapi.protocol.sixml.ConfigData(value.configData) : undefined;
+        this.networkInformation = value.networkInformation ? new timapi.protocol.sixml.NetworkInformation(value.networkInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:ConfigData")) {
+            this.configData = new timapi.protocol.sixml.ConfigData(this.xmlGetChild(node, "sixml:ConfigData"));
+        }
+        if (this.xmlHasChild(node, "sixml:NetworkInformation")) {
+            this.networkInformation = new timapi.protocol.sixml.NetworkInformation(this.xmlGetChild(node, "sixml:NetworkInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "SystemInformation";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_SystemInformation.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_SystemInformation.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.function = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.configData = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.networkInformation = undefined;
+timapi.protocol.sixml.Response_SystemInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.configData != undefined) {
+        this.xmlAddChild(node, "sixml:ConfigData", this.configData);
+    }
+    if (this.networkInformation != undefined) {
+        this.xmlAddChild(node, "sixml:NetworkInformation", this.networkInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_TerminalStatus = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_TerminalStatus) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.displayContent = value.displayContent ? new timapi.protocol.sixml.DisplayContent(value.displayContent) : undefined;
+        this.cardReaderStatus = value.cardReaderStatus;
+        this.transactionStatus = value.transactionStatus;
+        this.connectionStatus = value.connectionStatus;
+        this.managementStatus = value.managementStatus;
+        this.sleepModeStatus = value.sleepModeStatus;
+        this.receiptInformation = value.receiptInformation;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.swUpdateAvailable = value.swUpdateAvailable;
+        this.terminalId = value.terminalId;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:DisplayContent")) {
+            this.displayContent = new timapi.protocol.sixml.DisplayContent(this.xmlGetChild(node, "sixml:DisplayContent"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardReaderStatus")) {
+            this.cardReaderStatus = this.xmlGetChild(node, "sixml:CardReaderStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionStatus")) {
+            this.transactionStatus = this.xmlGetChild(node, "sixml:TransactionStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ConnectionStatus")) {
+            this.connectionStatus = this.xmlGetChild(node, "sixml:ConnectionStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ManagementStatus")) {
+            this.managementStatus = this.xmlGetChild(node, "sixml:ManagementStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:SleepModeStatus")) {
+            this.sleepModeStatus = this.xmlGetChild(node, "sixml:SleepModeStatus").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ReceiptInformation")) {
+            this.receiptInformation = this.xmlGetChild(node, "sixml:ReceiptInformation").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:SwUpdateAvailable")) {
+            this.swUpdateAvailable = this.xmlGetChild(node, "sixml:SwUpdateAvailable").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:TerminalId")) {
+            this.terminalId = this.xmlGetChild(node, "sixml:TerminalId").textContent;
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "TerminalStatus";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_TerminalStatus.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_TerminalStatus.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.function = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.displayContent = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.cardReaderStatus = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.transactionStatus = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.connectionStatus = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.managementStatus = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.sleepModeStatus = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.receiptInformation = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.swUpdateAvailable = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.terminalId = undefined;
+timapi.protocol.sixml.Response_TerminalStatus.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.displayContent != undefined) {
+        this.xmlAddChild(node, "sixml:DisplayContent", this.displayContent);
+    }
+    if (this.cardReaderStatus != undefined) {
+        this.xmlAddChild(node, "sixml:CardReaderStatus", this.cardReaderStatus);
+    }
+    if (this.transactionStatus != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionStatus", this.transactionStatus);
+    }
+    if (this.connectionStatus != undefined) {
+        this.xmlAddChild(node, "sixml:ConnectionStatus", this.connectionStatus);
+    }
+    if (this.managementStatus != undefined) {
+        this.xmlAddChild(node, "sixml:ManagementStatus", this.managementStatus);
+    }
+    if (this.sleepModeStatus != undefined) {
+        this.xmlAddChild(node, "sixml:SleepModeStatus", this.sleepModeStatus);
+    }
+    if (this.receiptInformation != undefined) {
+        this.xmlAddChild(node, "sixml:ReceiptInformation", (this.receiptInformation ? "1" : "0"));
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.swUpdateAvailable != undefined) {
+        this.xmlAddChild(node, "sixml:SwUpdateAvailable", (this.swUpdateAvailable ? "1" : "0"));
+    }
+    if (this.terminalId != undefined) {
+        this.xmlAddChild(node, "sixml:TerminalId", this.terminalId);
+    }
+    return node;
+};
+timapi.protocol.sixml.ScreenshotOptions = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ScreenshotOptions) {
+        var value = a;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ScreenshotOptions.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ScreenshotOptions.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ScreenshotOptions");
+    return node;
+};
+timapi.protocol.sixml.Setting = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Setting) {
+        var value = a;
+        this.value = value.value;
+        this.settingType = value.settingType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "SettingType")) {
+            this.settingType = this.xmlGetAttribute(node, "SettingType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Setting.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Setting.prototype.value = "";
+timapi.protocol.sixml.Setting.prototype.settingType = undefined;
+timapi.protocol.sixml.Setting.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Setting");
+    node.textContent = this.value;
+    if (this.settingType != undefined) {
+        this.xmlSetAttribute(node, "SettingType", this.settingType);
+    }
+    return node;
+};
+timapi.protocol.sixml.SettingsList = function (a) {
+    this.setting = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.SettingsList) {
+        var value = a;
+        for (var each of value.setting) {
+            this.setting.push(each ? new timapi.protocol.sixml.Setting(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Setting")) {
+            this.setting.push(new timapi.protocol.sixml.Setting(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.SettingsList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.SettingsList.prototype.setting = undefined;
+timapi.protocol.sixml.SettingsList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:SettingsList");
+    for (var each of this.setting) {
+        this.xmlAddChild(node, "sixml:Setting", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.SignatureCapture = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.SignatureCapture) {
+        var value = a;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.SignatureCapture.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.SignatureCapture.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:SignatureCapture");
+    return node;
+};
+timapi.protocol.sixml.SignatureData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.SignatureData) {
+        var value = a;
+        this.resourceId = value.resourceId;
+        this.timeout = value.timeout;
+        this.theme = value.theme;
+        this.imageFileFormat = value.imageFileFormat;
+        this.imageHeight = value.imageHeight;
+        this.imageWidth = value.imageWidth;
+        this.backgroundColor = value.backgroundColor;
+        this.watermarkColor = value.watermarkColor;
+        this.signatureColor = value.signatureColor;
+        this.language = value.language;
+        this.watermarkItemList = value.watermarkItemList ? new timapi.protocol.sixml.WatermarkItemList(value.watermarkItemList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "ResourceId")) {
+            this.resourceId = (this.xmlGetAttribute(node, "ResourceId") ? parseInt(this.xmlGetAttribute(node, "ResourceId")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Timeout")) {
+            this.timeout = (this.xmlGetAttribute(node, "Timeout") ? parseInt(this.xmlGetAttribute(node, "Timeout")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Theme")) {
+            this.theme = this.xmlGetAttribute(node, "Theme");
+        }
+        if (this.xmlHasAttribute(node, "ImageFileFormat")) {
+            this.imageFileFormat = this.xmlGetAttribute(node, "ImageFileFormat");
+        }
+        if (this.xmlHasAttribute(node, "ImageHeight")) {
+            this.imageHeight = (this.xmlGetAttribute(node, "ImageHeight") ? parseInt(this.xmlGetAttribute(node, "ImageHeight")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ImageWidth")) {
+            this.imageWidth = (this.xmlGetAttribute(node, "ImageWidth") ? parseInt(this.xmlGetAttribute(node, "ImageWidth")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "BackgroundColor")) {
+            this.backgroundColor = this.xmlGetAttribute(node, "BackgroundColor");
+        }
+        if (this.xmlHasAttribute(node, "WatermarkColor")) {
+            this.watermarkColor = this.xmlGetAttribute(node, "WatermarkColor");
+        }
+        if (this.xmlHasAttribute(node, "SignatureColor")) {
+            this.signatureColor = this.xmlGetAttribute(node, "SignatureColor");
+        }
+        if (this.xmlHasChild(node, "sixml:Language")) {
+            this.language = this.xmlGetChild(node, "sixml:Language").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:WatermarkItemList")) {
+            this.watermarkItemList = new timapi.protocol.sixml.WatermarkItemList(this.xmlGetChild(node, "sixml:WatermarkItemList"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.SignatureData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.SignatureData.prototype.resourceId = undefined;
+timapi.protocol.sixml.SignatureData.prototype.timeout = undefined;
+timapi.protocol.sixml.SignatureData.prototype.theme = undefined;
+timapi.protocol.sixml.SignatureData.prototype.imageFileFormat = undefined;
+timapi.protocol.sixml.SignatureData.prototype.imageHeight = undefined;
+timapi.protocol.sixml.SignatureData.prototype.imageWidth = undefined;
+timapi.protocol.sixml.SignatureData.prototype.backgroundColor = undefined;
+timapi.protocol.sixml.SignatureData.prototype.watermarkColor = undefined;
+timapi.protocol.sixml.SignatureData.prototype.signatureColor = undefined;
+timapi.protocol.sixml.SignatureData.prototype.language = undefined;
+timapi.protocol.sixml.SignatureData.prototype.watermarkItemList = undefined;
+timapi.protocol.sixml.SignatureData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:SignatureData");
+    if (this.resourceId != undefined) {
+        this.xmlSetAttribute(node, "ResourceId", timapi.utils.StringHelper.makeString(this.resourceId));
+    }
+    if (this.timeout != undefined) {
+        this.xmlSetAttribute(node, "Timeout", timapi.utils.StringHelper.makeString(this.timeout));
+    }
+    if (this.theme != undefined) {
+        this.xmlSetAttribute(node, "Theme", this.theme);
+    }
+    if (this.imageFileFormat != undefined) {
+        this.xmlSetAttribute(node, "ImageFileFormat", this.imageFileFormat);
+    }
+    if (this.imageHeight != undefined) {
+        this.xmlSetAttribute(node, "ImageHeight", timapi.utils.StringHelper.makeString(this.imageHeight));
+    }
+    if (this.imageWidth != undefined) {
+        this.xmlSetAttribute(node, "ImageWidth", timapi.utils.StringHelper.makeString(this.imageWidth));
+    }
+    if (this.backgroundColor != undefined) {
+        this.xmlSetAttribute(node, "BackgroundColor", this.backgroundColor);
+    }
+    if (this.watermarkColor != undefined) {
+        this.xmlSetAttribute(node, "WatermarkColor", this.watermarkColor);
+    }
+    if (this.signatureColor != undefined) {
+        this.xmlSetAttribute(node, "SignatureColor", this.signatureColor);
+    }
+    if (this.language != undefined) {
+        this.xmlAddChild(node, "sixml:Language", this.language);
+    }
+    if (this.watermarkItemList != undefined) {
+        this.xmlAddChild(node, "sixml:WatermarkItemList", this.watermarkItemList);
+    }
+    return node;
+};
+timapi.protocol.sixml.SignatureInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.SignatureInformation) {
+        var value = a;
+        this.value = value.value;
+        this.imageFileFormat = value.imageFileFormat;
+        this.imageWidth = value.imageWidth;
+        this.imageHeight = value.imageHeight;
+        this.reason = value.reason;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = timapi.ConversionHelper.hexStringToByte(node.textContent);
+        if (this.xmlHasAttribute(node, "ImageFileFormat")) {
+            this.imageFileFormat = this.xmlGetAttribute(node, "ImageFileFormat");
+        }
+        if (this.xmlHasAttribute(node, "ImageWidth")) {
+            this.imageWidth = (this.xmlGetAttribute(node, "ImageWidth") ? parseInt(this.xmlGetAttribute(node, "ImageWidth")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ImageHeight")) {
+            this.imageHeight = (this.xmlGetAttribute(node, "ImageHeight") ? parseInt(this.xmlGetAttribute(node, "ImageHeight")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Reason")) {
+            this.reason = this.xmlGetAttribute(node, "Reason");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.SignatureInformation.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.SignatureInformation.prototype.value = new Uint8Array(0);
+timapi.protocol.sixml.SignatureInformation.prototype.imageFileFormat = undefined;
+timapi.protocol.sixml.SignatureInformation.prototype.imageWidth = undefined;
+timapi.protocol.sixml.SignatureInformation.prototype.imageHeight = undefined;
+timapi.protocol.sixml.SignatureInformation.prototype.reason = undefined;
+timapi.protocol.sixml.SignatureInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:SignatureInformation");
+    node.textContent = timapi.protocol.ConversionHelper.byteToHexString(this.value);
+    if (this.imageFileFormat != undefined) {
+        this.xmlSetAttribute(node, "ImageFileFormat", this.imageFileFormat);
+    }
+    if (this.imageWidth != undefined) {
+        this.xmlSetAttribute(node, "ImageWidth", timapi.utils.StringHelper.makeString(this.imageWidth));
+    }
+    if (this.imageHeight != undefined) {
+        this.xmlSetAttribute(node, "ImageHeight", timapi.utils.StringHelper.makeString(this.imageHeight));
+    }
+    if (this.reason != undefined) {
+        this.xmlSetAttribute(node, "Reason", this.reason);
+    }
+    return node;
+};
+timapi.protocol.sixml.Statistic = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Statistic) {
+        var value = a;
+        this.value = value.value;
+        this.statisticType = value.statisticType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "StatisticType")) {
+            this.statisticType = this.xmlGetAttribute(node, "StatisticType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Statistic.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Statistic.prototype.value = "";
+timapi.protocol.sixml.Statistic.prototype.statisticType = undefined;
+timapi.protocol.sixml.Statistic.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Statistic");
+    node.textContent = this.value;
+    if (this.statisticType != undefined) {
+        this.xmlSetAttribute(node, "StatisticType", this.statisticType);
+    }
+    return node;
+};
+timapi.protocol.sixml.StatisticsList = function (a) {
+    this.statistic = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.StatisticsList) {
+        var value = a;
+        for (var each of value.statistic) {
+            this.statistic.push(each ? new timapi.protocol.sixml.Statistic(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:Statistic")) {
+            this.statistic.push(new timapi.protocol.sixml.Statistic(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.StatisticsList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.StatisticsList.prototype.statistic = undefined;
+timapi.protocol.sixml.StatisticsList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:StatisticsList");
+    for (var each of this.statistic) {
+        this.xmlAddChild(node, "sixml:Statistic", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.TimeoutData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.TimeoutData) {
+        var value = a;
+        this.timeoutType = value.timeoutType;
+        this.extraTime = value.extraTime;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "TimeoutType")) {
+            this.timeoutType = this.xmlGetAttribute(node, "TimeoutType");
+        }
+        if (this.xmlHasAttribute(node, "ExtraTime")) {
+            this.extraTime = (this.xmlGetAttribute(node, "ExtraTime") ? parseInt(this.xmlGetAttribute(node, "ExtraTime")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.TimeoutData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.TimeoutData.prototype.timeoutType = undefined;
+timapi.protocol.sixml.TimeoutData.prototype.extraTime = undefined;
+timapi.protocol.sixml.TimeoutData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:TimeoutData");
+    if (this.timeoutType != undefined) {
+        this.xmlSetAttribute(node, "TimeoutType", this.timeoutType);
+    }
+    if (this.extraTime != undefined) {
+        this.xmlSetAttribute(node, "ExtraTime", timapi.utils.StringHelper.makeString(this.extraTime));
+    }
+    return node;
+};
+timapi.protocol.sixml.Total = function (a) {
+    this.trxDetail = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Total) {
+        var value = a;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        this.count = value.count;
+        this.amountSum = value.amountSum;
+        for (var each of value.trxDetail) {
+            this.trxDetail.push(each ? new timapi.protocol.sixml.TrxDetail(each) : undefined);
+        }
+        this.amountSumOther = value.amountSumOther;
+        this.amountSumTip = value.amountSumTip;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Count")) {
+            this.count = (this.xmlGetAttribute(node, "Count") ? parseInt(this.xmlGetAttribute(node, "Count")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AmountSum")) {
+            this.amountSum = (this.xmlGetAttribute(node, "AmountSum") ? parseInt(this.xmlGetAttribute(node, "AmountSum")) : 0);
+        }
+        for (var each of this.xmlGetChildren(node, "sixml:TrxDetail")) {
+            this.trxDetail.push(new timapi.protocol.sixml.TrxDetail(each));
+        }
+        if (this.xmlHasAttribute(node, "AmountSumOther")) {
+            this.amountSumOther = (this.xmlGetAttribute(node, "AmountSumOther") ? parseInt(this.xmlGetAttribute(node, "AmountSumOther")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AmountSumTip")) {
+            this.amountSumTip = (this.xmlGetAttribute(node, "AmountSumTip") ? parseInt(this.xmlGetAttribute(node, "AmountSumTip")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.Total.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.Total.prototype.currency = undefined;
+timapi.protocol.sixml.Total.prototype.exponent = undefined;
+timapi.protocol.sixml.Total.prototype.count = undefined;
+timapi.protocol.sixml.Total.prototype.amountSum = undefined;
+timapi.protocol.sixml.Total.prototype.trxDetail = undefined;
+timapi.protocol.sixml.Total.prototype.amountSumOther = undefined;
+timapi.protocol.sixml.Total.prototype.amountSumTip = undefined;
+timapi.protocol.sixml.Total.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Total");
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    if (this.count != undefined) {
+        this.xmlSetAttribute(node, "Count", timapi.utils.StringHelper.makeString(this.count));
+    }
+    if (this.amountSum != undefined) {
+        this.xmlSetAttribute(node, "AmountSum", timapi.utils.StringHelper.makeString(this.amountSum));
+    }
+    for (var each of this.trxDetail) {
+        this.xmlAddChild(node, "sixml:TrxDetail", each);
+    }
+    if (this.amountSumOther != undefined) {
+        this.xmlSetAttribute(node, "AmountSumOther", timapi.utils.StringHelper.makeString(this.amountSumOther));
+    }
+    if (this.amountSumTip != undefined) {
+        this.xmlSetAttribute(node, "AmountSumTip", timapi.utils.StringHelper.makeString(this.amountSumTip));
+    }
+    return node;
+};
+timapi.protocol.sixml.TransactionData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.TransactionData) {
+        var value = a;
+        this.dccAllowed = value.dccAllowed;
+        this.partialApprovalAllowed = value.partialApprovalAllowed;
+        this.trxOriginalDate = value.trxOriginalDate;
+        this.ecrSeqCounter = value.ecrSeqCounter;
+        this.transRef = value.transRef;
+        this.transSeq = value.transSeq;
+        this.cardRef = value.cardRef;
+        this.trmTransRef = value.trmTransRef;
+        this.acqTransRef = value.acqTransRef;
+        this.acqId = value.acqId;
+        this.phoneAuthCode = value.phoneAuthCode;
+        this.multiCurrencyFlag = value.multiCurrencyFlag;
+        this.tipAllowed = value.tipAllowed;
+        this.ngvmode = value.ngvmode;
+        this.ngvclearingDelay = value.ngvclearingDelay;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "DccAllowed")) {
+            this.dccAllowed = this.xmlGetAttribute(node, "DccAllowed") == "1";
+        }
+        if (this.xmlHasAttribute(node, "PartialApprovalAllowed")) {
+            this.partialApprovalAllowed = this.xmlGetAttribute(node, "PartialApprovalAllowed") == "1";
+        }
+        if (this.xmlHasAttribute(node, "TrxOriginalDate")) {
+            this.trxOriginalDate = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TrxOriginalDate"));
+        }
+        if (this.xmlHasAttribute(node, "EcrSeqCounter")) {
+            this.ecrSeqCounter = (this.xmlGetAttribute(node, "EcrSeqCounter") ? parseInt(this.xmlGetAttribute(node, "EcrSeqCounter")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TransRef")) {
+            this.transRef = (this.xmlGetAttribute(node, "TransRef") ? parseInt(this.xmlGetAttribute(node, "TransRef")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TransSeq")) {
+            this.transSeq = (this.xmlGetAttribute(node, "TransSeq") ? parseInt(this.xmlGetAttribute(node, "TransSeq")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CardRef")) {
+            this.cardRef = this.xmlGetAttribute(node, "CardRef");
+        }
+        if (this.xmlHasAttribute(node, "TrmTransRef")) {
+            this.trmTransRef = this.xmlGetAttribute(node, "TrmTransRef");
+        }
+        if (this.xmlHasAttribute(node, "AcqTransRef")) {
+            this.acqTransRef = this.xmlGetAttribute(node, "AcqTransRef");
+        }
+        if (this.xmlHasAttribute(node, "AcqId")) {
+            this.acqId = (this.xmlGetAttribute(node, "AcqId") ? parseInt(this.xmlGetAttribute(node, "AcqId")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PhoneAuthCode")) {
+            this.phoneAuthCode = this.xmlGetAttribute(node, "PhoneAuthCode");
+        }
+        if (this.xmlHasAttribute(node, "MultiCurrencyFlag")) {
+            this.multiCurrencyFlag = this.xmlGetAttribute(node, "MultiCurrencyFlag") == "1";
+        }
+        if (this.xmlHasAttribute(node, "TipAllowed")) {
+            this.tipAllowed = this.xmlGetAttribute(node, "TipAllowed") == "1";
+        }
+        if (this.xmlHasAttribute(node, "NGVMode")) {
+            this.ngvmode = this.xmlGetAttribute(node, "NGVMode");
+        }
+        if (this.xmlHasAttribute(node, "NGVClearingDelay")) {
+            this.ngvclearingDelay = (this.xmlGetAttribute(node, "NGVClearingDelay") ? parseInt(this.xmlGetAttribute(node, "NGVClearingDelay")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.TransactionData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.TransactionData.prototype.dccAllowed = undefined;
+timapi.protocol.sixml.TransactionData.prototype.partialApprovalAllowed = undefined;
+timapi.protocol.sixml.TransactionData.prototype.trxOriginalDate = undefined;
+timapi.protocol.sixml.TransactionData.prototype.ecrSeqCounter = undefined;
+timapi.protocol.sixml.TransactionData.prototype.transRef = undefined;
+timapi.protocol.sixml.TransactionData.prototype.transSeq = undefined;
+timapi.protocol.sixml.TransactionData.prototype.cardRef = undefined;
+timapi.protocol.sixml.TransactionData.prototype.trmTransRef = undefined;
+timapi.protocol.sixml.TransactionData.prototype.acqTransRef = undefined;
+timapi.protocol.sixml.TransactionData.prototype.acqId = undefined;
+timapi.protocol.sixml.TransactionData.prototype.phoneAuthCode = undefined;
+timapi.protocol.sixml.TransactionData.prototype.multiCurrencyFlag = undefined;
+timapi.protocol.sixml.TransactionData.prototype.tipAllowed = undefined;
+timapi.protocol.sixml.TransactionData.prototype.ngvmode = undefined;
+timapi.protocol.sixml.TransactionData.prototype.ngvclearingDelay = undefined;
+timapi.protocol.sixml.TransactionData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:TransactionData");
+    if (this.dccAllowed != undefined) {
+        this.xmlSetAttribute(node, "DccAllowed", (this.dccAllowed ? "1" : "0"));
+    }
+    if (this.partialApprovalAllowed != undefined) {
+        this.xmlSetAttribute(node, "PartialApprovalAllowed", (this.partialApprovalAllowed ? "1" : "0"));
+    }
+    if (this.trxOriginalDate != undefined) {
+        this.xmlSetAttribute(node, "TrxOriginalDate", this.trxOriginalDate.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.ecrSeqCounter != undefined) {
+        this.xmlSetAttribute(node, "EcrSeqCounter", timapi.utils.StringHelper.makeString(this.ecrSeqCounter));
+    }
+    if (this.transRef != undefined) {
+        this.xmlSetAttribute(node, "TransRef", timapi.utils.StringHelper.makeString(this.transRef));
+    }
+    if (this.transSeq != undefined) {
+        this.xmlSetAttribute(node, "TransSeq", timapi.utils.StringHelper.makeString(this.transSeq));
+    }
+    if (this.cardRef != undefined) {
+        this.xmlSetAttribute(node, "CardRef", this.cardRef);
+    }
+    if (this.trmTransRef != undefined) {
+        this.xmlSetAttribute(node, "TrmTransRef", this.trmTransRef);
+    }
+    if (this.acqTransRef != undefined) {
+        this.xmlSetAttribute(node, "AcqTransRef", this.acqTransRef);
+    }
+    if (this.acqId != undefined) {
+        this.xmlSetAttribute(node, "AcqId", timapi.utils.StringHelper.makeString(this.acqId));
+    }
+    if (this.phoneAuthCode != undefined) {
+        this.xmlSetAttribute(node, "PhoneAuthCode", this.phoneAuthCode);
+    }
+    if (this.multiCurrencyFlag != undefined) {
+        this.xmlSetAttribute(node, "MultiCurrencyFlag", (this.multiCurrencyFlag ? "1" : "0"));
+    }
+    if (this.tipAllowed != undefined) {
+        this.xmlSetAttribute(node, "TipAllowed", (this.tipAllowed ? "1" : "0"));
+    }
+    if (this.ngvmode != undefined) {
+        this.xmlSetAttribute(node, "NGVMode", this.ngvmode);
+    }
+    if (this.ngvclearingDelay != undefined) {
+        this.xmlSetAttribute(node, "NGVClearingDelay", timapi.utils.StringHelper.makeString(this.ngvclearingDelay));
+    }
+    return node;
+};
+timapi.protocol.sixml.TransactionInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.TransactionInformation) {
+        var value = a;
+        this.posEntryMode = value.posEntryMode;
+        this.cvm = value.cvm;
+        this.merchantAction = value.merchantAction;
+        this.authCode = value.authCode;
+        this.timeStamp = value.timeStamp;
+        this.transRef = value.transRef;
+        this.transSeq = value.transSeq;
+        this.acqId = value.acqId;
+        this.trmTransRef = value.trmTransRef;
+        this.acqTransRef = value.acqTransRef;
+        this.ecrSeqCounter = value.ecrSeqCounter;
+        this.signatureInformation = value.signatureInformation ? new timapi.protocol.sixml.SignatureInformation(value.signatureInformation) : undefined;
+        this.cardholderName = value.cardholderName;
+        this.clientIdentifier = value.clientIdentifier;
+        this.accountNumber = value.accountNumber;
+        this.personOid = value.personOid;
+        this.cardId = value.cardId;
+        this.ngvusedFlag = value.ngvusedFlag;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "PosEntryMode")) {
+            this.posEntryMode = (this.xmlGetAttribute(node, "PosEntryMode") ? parseInt(this.xmlGetAttribute(node, "PosEntryMode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Cvm")) {
+            this.cvm = this.xmlGetAttribute(node, "Cvm");
+        }
+        if (this.xmlHasAttribute(node, "MerchantAction")) {
+            this.merchantAction = this.xmlGetAttribute(node, "MerchantAction");
+        }
+        if (this.xmlHasAttribute(node, "AuthCode")) {
+            this.authCode = this.xmlGetAttribute(node, "AuthCode");
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasAttribute(node, "TransRef")) {
+            this.transRef = (this.xmlGetAttribute(node, "TransRef") ? parseInt(this.xmlGetAttribute(node, "TransRef")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TransSeq")) {
+            this.transSeq = (this.xmlGetAttribute(node, "TransSeq") ? parseInt(this.xmlGetAttribute(node, "TransSeq")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AcqId")) {
+            this.acqId = (this.xmlGetAttribute(node, "AcqId") ? parseInt(this.xmlGetAttribute(node, "AcqId")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TrmTransRef")) {
+            this.trmTransRef = this.xmlGetAttribute(node, "TrmTransRef");
+        }
+        if (this.xmlHasAttribute(node, "AcqTransRef")) {
+            this.acqTransRef = this.xmlGetAttribute(node, "AcqTransRef");
+        }
+        if (this.xmlHasAttribute(node, "EcrSeqCounter")) {
+            this.ecrSeqCounter = (this.xmlGetAttribute(node, "EcrSeqCounter") ? parseInt(this.xmlGetAttribute(node, "EcrSeqCounter")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:SignatureInformation")) {
+            this.signatureInformation = new timapi.protocol.sixml.SignatureInformation(this.xmlGetChild(node, "sixml:SignatureInformation"));
+        }
+        if (this.xmlHasAttribute(node, "CardholderName")) {
+            this.cardholderName = this.xmlGetAttribute(node, "CardholderName");
+        }
+        if (this.xmlHasAttribute(node, "ClientIdentifier")) {
+            this.clientIdentifier = this.xmlGetAttribute(node, "ClientIdentifier");
+        }
+        if (this.xmlHasAttribute(node, "AccountNumber")) {
+            this.accountNumber = this.xmlGetAttribute(node, "AccountNumber");
+        }
+        if (this.xmlHasAttribute(node, "PersonOid")) {
+            this.personOid = (this.xmlGetAttribute(node, "PersonOid") ? parseInt(this.xmlGetAttribute(node, "PersonOid")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CardId")) {
+            this.cardId = this.xmlGetAttribute(node, "CardId");
+        }
+        if (this.xmlHasAttribute(node, "NGVUsedFlag")) {
+            this.ngvusedFlag = this.xmlGetAttribute(node, "NGVUsedFlag") == "1";
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.TransactionInformation.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.TransactionInformation.prototype.posEntryMode = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.cvm = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.merchantAction = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.authCode = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.timeStamp = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.transRef = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.transSeq = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.acqId = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.trmTransRef = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.acqTransRef = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.ecrSeqCounter = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.signatureInformation = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.cardholderName = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.clientIdentifier = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.accountNumber = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.personOid = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.cardId = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.ngvusedFlag = undefined;
+timapi.protocol.sixml.TransactionInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:TransactionInformation");
+    if (this.posEntryMode != undefined) {
+        this.xmlSetAttribute(node, "PosEntryMode", timapi.utils.StringHelper.makeString(this.posEntryMode));
+    }
+    if (this.cvm != undefined) {
+        this.xmlSetAttribute(node, "Cvm", this.cvm);
+    }
+    if (this.merchantAction != undefined) {
+        this.xmlSetAttribute(node, "MerchantAction", this.merchantAction);
+    }
+    if (this.authCode != undefined) {
+        this.xmlSetAttribute(node, "AuthCode", this.authCode);
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transRef != undefined) {
+        this.xmlSetAttribute(node, "TransRef", timapi.utils.StringHelper.makeString(this.transRef));
+    }
+    if (this.transSeq != undefined) {
+        this.xmlSetAttribute(node, "TransSeq", timapi.utils.StringHelper.makeString(this.transSeq));
+    }
+    if (this.acqId != undefined) {
+        this.xmlSetAttribute(node, "AcqId", timapi.utils.StringHelper.makeString(this.acqId));
+    }
+    if (this.trmTransRef != undefined) {
+        this.xmlSetAttribute(node, "TrmTransRef", this.trmTransRef);
+    }
+    if (this.acqTransRef != undefined) {
+        this.xmlSetAttribute(node, "AcqTransRef", this.acqTransRef);
+    }
+    if (this.ecrSeqCounter != undefined) {
+        this.xmlSetAttribute(node, "EcrSeqCounter", timapi.utils.StringHelper.makeString(this.ecrSeqCounter));
+    }
+    if (this.signatureInformation != undefined) {
+        this.xmlAddChild(node, "sixml:SignatureInformation", this.signatureInformation);
+    }
+    if (this.cardholderName != undefined) {
+        this.xmlSetAttribute(node, "CardholderName", this.cardholderName);
+    }
+    if (this.clientIdentifier != undefined) {
+        this.xmlSetAttribute(node, "ClientIdentifier", this.clientIdentifier);
+    }
+    if (this.accountNumber != undefined) {
+        this.xmlSetAttribute(node, "AccountNumber", this.accountNumber);
+    }
+    if (this.personOid != undefined) {
+        this.xmlSetAttribute(node, "PersonOid", timapi.utils.StringHelper.makeString(this.personOid));
+    }
+    if (this.cardId != undefined) {
+        this.xmlSetAttribute(node, "CardId", this.cardId);
+    }
+    if (this.ngvusedFlag != undefined) {
+        this.xmlSetAttribute(node, "NGVUsedFlag", (this.ngvusedFlag ? "1" : "0"));
+    }
+    return node;
+};
+timapi.protocol.sixml.TrxDetail = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.TrxDetail) {
+        var value = a;
+        this.aid = value.aid;
+        this.dccFlag = value.dccFlag;
+        this.transactionType = value.transactionType;
+        this.count = value.count;
+        this.markup = value.markup;
+        this.markupExponent = value.markupExponent;
+        this.amountSum = value.amountSum;
+        this.amountSumOther = value.amountSumOther;
+        this.amountSumTip = value.amountSumTip;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "Aid")) {
+            this.aid = this.xmlGetAttribute(node, "Aid");
+        }
+        if (this.xmlHasAttribute(node, "DccFlag")) {
+            this.dccFlag = this.xmlGetAttribute(node, "DccFlag") == "1";
+        }
+        if (this.xmlHasAttribute(node, "TransactionType")) {
+            this.transactionType = this.xmlGetAttribute(node, "TransactionType");
+        }
+        if (this.xmlHasAttribute(node, "Count")) {
+            this.count = (this.xmlGetAttribute(node, "Count") ? parseInt(this.xmlGetAttribute(node, "Count")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "Markup")) {
+            this.markup = (this.xmlGetAttribute(node, "Markup") ? parseInt(this.xmlGetAttribute(node, "Markup")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "MarkupExponent")) {
+            this.markupExponent = (this.xmlGetAttribute(node, "MarkupExponent") ? parseInt(this.xmlGetAttribute(node, "MarkupExponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AmountSum")) {
+            this.amountSum = (this.xmlGetAttribute(node, "AmountSum") ? parseInt(this.xmlGetAttribute(node, "AmountSum")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AmountSumOther")) {
+            this.amountSumOther = (this.xmlGetAttribute(node, "AmountSumOther") ? parseInt(this.xmlGetAttribute(node, "AmountSumOther")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AmountSumTip")) {
+            this.amountSumTip = (this.xmlGetAttribute(node, "AmountSumTip") ? parseInt(this.xmlGetAttribute(node, "AmountSumTip")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.TrxDetail.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.TrxDetail.prototype.aid = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.dccFlag = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.transactionType = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.count = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.markup = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.markupExponent = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.amountSum = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.amountSumOther = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.amountSumTip = undefined;
+timapi.protocol.sixml.TrxDetail.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:TrxDetail");
+    if (this.aid != undefined) {
+        this.xmlSetAttribute(node, "Aid", this.aid);
+    }
+    if (this.dccFlag != undefined) {
+        this.xmlSetAttribute(node, "DccFlag", (this.dccFlag ? "1" : "0"));
+    }
+    if (this.transactionType != undefined) {
+        this.xmlSetAttribute(node, "TransactionType", this.transactionType);
+    }
+    if (this.count != undefined) {
+        this.xmlSetAttribute(node, "Count", timapi.utils.StringHelper.makeString(this.count));
+    }
+    if (this.markup != undefined) {
+        this.xmlSetAttribute(node, "Markup", timapi.utils.StringHelper.makeString(this.markup));
+    }
+    if (this.markupExponent != undefined) {
+        this.xmlSetAttribute(node, "MarkupExponent", timapi.utils.StringHelper.makeString(this.markupExponent));
+    }
+    if (this.amountSum != undefined) {
+        this.xmlSetAttribute(node, "AmountSum", timapi.utils.StringHelper.makeString(this.amountSum));
+    }
+    if (this.amountSumOther != undefined) {
+        this.xmlSetAttribute(node, "AmountSumOther", timapi.utils.StringHelper.makeString(this.amountSumOther));
+    }
+    if (this.amountSumTip != undefined) {
+        this.xmlSetAttribute(node, "AmountSumTip", timapi.utils.StringHelper.makeString(this.amountSumTip));
+    }
+    return node;
+};
+timapi.protocol.sixml.WatermarkItemList = function (a) {
+    this.watermarkItem = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.WatermarkItemList) {
+        var value = a;
+        for (var each of value.watermarkItem) {
+            this.watermarkItem.push(each);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:WatermarkItem")) {
+            this.watermarkItem.push(each.textContent);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.WatermarkItemList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.WatermarkItemList.prototype.watermarkItem = undefined;
+timapi.protocol.sixml.WatermarkItemList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:WatermarkItemList");
+    for (var each of this.watermarkItem) {
+        this.xmlAddChild(node, "sixml:WatermarkItem", each);
+    }
+    return node;
+};
+timapi.statemachine.states.ErrorState = function (context) {
+    if (context == undefined) {
+        throw new Error("Invalid argument. context is undefined");
+    }
+    this.context = context;
+};
+timapi.statemachine.states.ErrorState.loggerName = "timapi.statemachine.states.ErrorState";
+timapi.statemachine.states.ErrorState.classname = "ErrorState";
+timapi.statemachine.states.ErrorState.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.ErrorState.loggerName);
+timapi.statemachine.states.ErrorState.prototype.enterState = function () {
+    this.context.actionErrorConnectionLost();
+    this.context.actionDisconnect();
+    this.context.actionClearPendingEvent();
+    if (this.context.conditionIsEnabledAutoConnect()
+        && !this.context.conditionRunAwayProtection()) {
+        this.context.actionRunAwayProtection();
+        this.context.actionConnect();
+        this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+        return;
+    }
+    this.context.actionRunAwayProtection();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.ErrorState.prototype.exitState = function () {
+};
+timapi.statemachine.states.ErrorState.prototype.activate = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.applicationInformation = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.balance = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.cancel = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.changeSettings = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.commit = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.connect = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.counterRequest = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.deactivate = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.disconnect = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.dccRates = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.hardwareInformation = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.initTransaction = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.login = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.logout = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.reboot = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.reconciliation = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.receiptRequest = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.reconfig = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.rollback = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.softwareUpdate = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.systemInformation = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.transaction = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.connected = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.connectFailed = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.disconnected = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.responseRequest = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.responseError = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.responseInvalid = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.responseBusy = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.notificationStatusChanged = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.notificationLicenseChanged = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.notificationKeepAlive = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.timeout = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.keepAliveTimeout = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.keepAliveTimer = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.trxStateBecameIdle = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.closeReader = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.openReader = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.ejectCard = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.openMaintenanceWindow = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.closeMaintenanceWindow = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.holdCommit = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.activateServiceMenu = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.amtAdjustment = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.balanceInquiry = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.openDialogMode = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.closeDialogMode = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.showSignatureCapture = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.showDialog = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.sendCardCommand = Object.illegalState;
+timapi.statemachine.states.ErrorState.prototype.toString = function () {
+    return this.classname;
+};
+timapi.statemachine.states.ErrorState.prototype.context = undefined;
+timapi.statemachine.AbstractContext = function () {
+};
+timapi.statemachine.AbstractContext.loggerName = "timapi.statemachine.AbstractContext";
+timapi.statemachine.AbstractContext.classname = "AbstractContext";
+timapi.statemachine.AbstractContext.logger = timapi.logging.Logger.getLogger(timapi.statemachine.AbstractContext.loggerName);
+timapi.statemachine.AbstractContext.prototype.start = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "start");
+    this.state = undefined;
+    this.setState(new timapi.statemachine.states.Initial(this));
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "start");
+};
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoConnect = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoLogin = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledFetchBrands = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoActivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoDeactivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoLogout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsEnabledAutoDisconnect = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingEvent = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingActivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingApplicationInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingBalance = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingChangeSettings = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingCounterRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingDccRates = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingDeactivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingHardwareInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingInitTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingLogin = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingLogout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingReboot = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingReceiptRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingReconciliation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingReconfig = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingSoftwareUpdate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingSystemInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingCancel = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionTransactionNoCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasTerminalFeatures = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionSupportedFeatureAutoCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionMandatoryFeatureAutoCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionIsApplicationInformationNotSupported = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionCanRepeatRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionRunAwayProtection = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasGuideBanking = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasGuideUnattended = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingCloseReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingOpenReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingEjectCard = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingOpenMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingCloseMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingActivateServiceMenu = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasGuideAdvancedRetail = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingBalanceInquiry = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasGuideDialog = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingOpenDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingCloseDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingShowSignatureCapture = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingShowDialog = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.conditionHasPendingSendCardCommand = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionActivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionApplicationInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionBalance = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCancel = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionChangeSettings = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCounterRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionDccRates = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionDeactivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionHardwareInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionInitTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionLogin = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionLogout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionReboot = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionReconciliation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionReconfig = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionReceiptRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionRequestFeatures = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionRollback = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSoftwareUpdate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSystemInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetDefaultLoginRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionConnect = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionDisconnect = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSendErrorResponseDisconnect = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSendKeepAliveNotification = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseActivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseApplicationInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseBalance = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseChangeSettings = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseCounterRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseDeactivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseDccRates = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseError = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseFeatureRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseHardwareInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseInitTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseLogin = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseLogout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseReboot = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseRollback = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseReceiptRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseReconciliation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseReconfig = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseSoftwareUpdate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseSystemInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessNotificationStatusChanged = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessNotificationLicenseChanged = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionNotifyLoginCompleted = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSimulateLogoutCompleted = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSimulateCommitCompleted = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionClearPendingEvent = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingActivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingApplicationInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingBalance = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingChangeSettings = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingCounterRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingDccRates = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingDeactivate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingHardwareInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingInitTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingLogin = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingLogout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingReboot = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingReceiptRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingReconciliation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingReconfig = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingSoftwareUpdate = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingSystemInformation = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingCancel = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionClearPendingCancel = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionErrorConnectionLost = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionErrorInvalidResponse = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionErrorRequestInProgress = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionErrorWrongState = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionErrorTimeout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionErrorDisabledFeature = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionArmTimeoutTransaction = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionArmTimeoutRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionArmTimeoutLongRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCancelTimeout = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionRepeatRequest = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionRunAwayProtection = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCloseReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionOpenReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionEjectCard = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionOpenMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCloseMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionHoldCommit = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionAmtAdjustment = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionActivateServiceMenu = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseCloseReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseOpenReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseEjectCard = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseOpenMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseCloseMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseActivateServiceMenu = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingCloseReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingOpenReader = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingEjectCard = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingOpenMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingCloseMaintenanceWindow = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingActivateServiceMenu = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionBalanceInquiry = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseBalanceInquiry = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingBalanceInquiry = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionOpenDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionCloseDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionShowSignatureCapture = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionShowDialog = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSendCardCommand = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseOpenDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseCloseDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseShowSignatureCapture = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseShowDialog = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionProcessResponseSendCardCommand = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingOpenDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingCloseDialogMode = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingShowSignatureCapture = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingShowDialog = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.actionSetPendingSendCardCommand = Object.abstractFunction;
+timapi.statemachine.AbstractContext.prototype.eventActivate = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventActivate");
+    try {
+        this.state.activate();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventActivate failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventActivate");
+};
+timapi.statemachine.AbstractContext.prototype.eventApplicationInformation = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventApplicationInformation");
+    try {
+        this.state.applicationInformation();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventApplicationInformation failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventApplicationInformation");
+};
+timapi.statemachine.AbstractContext.prototype.eventBalance = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventBalance");
+    try {
+        this.state.balance();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventBalance failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventBalance");
+};
+timapi.statemachine.AbstractContext.prototype.eventCancel = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventCancel");
+    try {
+        this.state.cancel();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventCancel failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventCancel");
+};
+timapi.statemachine.AbstractContext.prototype.eventChangeSettings = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventChangeSettings");
+    try {
+        this.state.changeSettings();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventChangeSettings failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventChangeSettings");
+};
+timapi.statemachine.AbstractContext.prototype.eventCommit = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventCommit");
+    try {
+        this.state.commit();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventCommit failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventCommit");
+};
+timapi.statemachine.AbstractContext.prototype.eventConnect = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventConnect");
+    try {
+        this.state.connect();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventConnect failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventConnect");
+};
+timapi.statemachine.AbstractContext.prototype.eventCounterRequest = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventCounterRequest");
+    try {
+        this.state.counterRequest();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventCounterRequest failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventCounterRequest");
+};
+timapi.statemachine.AbstractContext.prototype.eventDeactivate = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventDeactivate");
+    try {
+        this.state.deactivate();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventDeactivate failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventDeactivate");
+};
+timapi.statemachine.AbstractContext.prototype.eventDisconnect = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventDisconnect");
+    try {
+        this.state.disconnect();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventDisconnect failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventDisconnect");
+};
+timapi.statemachine.AbstractContext.prototype.eventDccRates = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventDccRates");
+    try {
+        this.state.dccRates();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventDccRates failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventDccRates");
+};
+timapi.statemachine.AbstractContext.prototype.eventHardwareInformation = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventHardwareInformation");
+    try {
+        this.state.hardwareInformation();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventHardwareInformation failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventHardwareInformation");
+};
+timapi.statemachine.AbstractContext.prototype.eventInitTransaction = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventInitTransaction");
+    try {
+        this.state.initTransaction();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventInitTransaction failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventInitTransaction");
+};
+timapi.statemachine.AbstractContext.prototype.eventLogin = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventLogin");
+    try {
+        this.state.login();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventLogin failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventLogin");
+};
+timapi.statemachine.AbstractContext.prototype.eventLogout = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventLogout");
+    try {
+        this.state.logout();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventLogout failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventLogout");
+};
+timapi.statemachine.AbstractContext.prototype.eventReboot = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventReboot");
+    try {
+        this.state.reboot();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventReboot failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventReboot");
+};
+timapi.statemachine.AbstractContext.prototype.eventReconciliation = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventReconciliation");
+    try {
+        this.state.reconciliation();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventReconciliation failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventReconciliation");
+};
+timapi.statemachine.AbstractContext.prototype.eventReceiptRequest = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventReceiptRequest");
+    try {
+        this.state.receiptRequest();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventReceiptRequest failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventReceiptRequest");
+};
+timapi.statemachine.AbstractContext.prototype.eventReconfig = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventReconfig");
+    try {
+        this.state.reconfig();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventReconfig failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventReconfig");
+};
+timapi.statemachine.AbstractContext.prototype.eventRollback = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventRollback");
+    try {
+        this.state.rollback();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventRollback failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventRollback");
+};
+timapi.statemachine.AbstractContext.prototype.eventSoftwareUpdate = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventSoftwareUpdate");
+    try {
+        this.state.softwareUpdate();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventSoftwareUpdate failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventSoftwareUpdate");
+};
+timapi.statemachine.AbstractContext.prototype.eventSystemInformation = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventSystemInformation");
+    try {
+        this.state.systemInformation();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventSystemInformation failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventSystemInformation");
+};
+timapi.statemachine.AbstractContext.prototype.eventTransaction = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventTransaction");
+    try {
+        this.state.transaction();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventTransaction failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventTransaction");
+};
+timapi.statemachine.AbstractContext.prototype.eventConnected = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventConnected");
+    try {
+        this.state.connected();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventConnected failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventConnected");
+};
+timapi.statemachine.AbstractContext.prototype.eventConnectFailed = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventConnectFailed");
+    try {
+        this.state.connectFailed();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventConnectFailed failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventConnectFailed");
+};
+timapi.statemachine.AbstractContext.prototype.eventDisconnected = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventDisconnected");
+    try {
+        this.state.disconnected();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventDisconnected failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventDisconnected");
+};
+timapi.statemachine.AbstractContext.prototype.eventResponseRequest = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventResponseRequest");
+    try {
+        this.state.responseRequest();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventResponseRequest failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventResponseRequest");
+};
+timapi.statemachine.AbstractContext.prototype.eventResponseError = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventResponseError");
+    try {
+        this.state.responseError();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventResponseError failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventResponseError");
+};
+timapi.statemachine.AbstractContext.prototype.eventResponseInvalid = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventResponseInvalid");
+    try {
+        this.state.responseInvalid();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventResponseInvalid failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventResponseInvalid");
+};
+timapi.statemachine.AbstractContext.prototype.eventResponseBusy = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventResponseBusy");
+    try {
+        this.state.responseBusy();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventResponseBusy failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventResponseBusy");
+};
+timapi.statemachine.AbstractContext.prototype.eventNotificationStatusChanged = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventNotificationStatusChanged");
+    try {
+        this.state.notificationStatusChanged();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventNotificationStatusChanged failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventNotificationStatusChanged");
+};
+timapi.statemachine.AbstractContext.prototype.eventNotificationLicenseChanged = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventNotificationLicenseChanged");
+    try {
+        this.state.notificationLicenseChanged();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventNotificationLicenseChanged failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventNotificationLicenseChanged");
+};
+timapi.statemachine.AbstractContext.prototype.eventNotificationKeepAlive = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventNotificationKeepAlive");
+    try {
+        this.state.notificationKeepAlive();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventNotificationKeepAlive failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventNotificationKeepAlive");
+};
+timapi.statemachine.AbstractContext.prototype.eventTimeout = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventTimeout");
+    try {
+        this.state.timeout();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventTimeout failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventTimeout");
+};
+timapi.statemachine.AbstractContext.prototype.eventKeepAliveTimeout = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventKeepAliveTimeout");
+    try {
+        this.state.keepAliveTimeout();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventKeepAliveTimeout failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventKeepAliveTimeout");
+};
+timapi.statemachine.AbstractContext.prototype.eventKeepAliveTimer = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventKeepAliveTimer");
+    try {
+        this.state.keepAliveTimer();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventKeepAliveTimer failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventKeepAliveTimer");
+};
+timapi.statemachine.AbstractContext.prototype.eventTrxStateBecameIdle = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventTrxStateBecameIdle");
+    try {
+        this.state.trxStateBecameIdle();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventTrxStateBecameIdle failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventTrxStateBecameIdle");
+};
+timapi.statemachine.AbstractContext.prototype.eventCloseReader = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventCloseReader");
+    try {
+        this.state.closeReader();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventCloseReader failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventCloseReader");
+};
+timapi.statemachine.AbstractContext.prototype.eventOpenReader = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventOpenReader");
+    try {
+        this.state.openReader();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventOpenReader failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventOpenReader");
+};
+timapi.statemachine.AbstractContext.prototype.eventEjectCard = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventEjectCard");
+    try {
+        this.state.ejectCard();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventEjectCard failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventEjectCard");
+};
+timapi.statemachine.AbstractContext.prototype.eventOpenMaintenanceWindow = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventOpenMaintenanceWindow");
+    try {
+        this.state.openMaintenanceWindow();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventOpenMaintenanceWindow failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventOpenMaintenanceWindow");
+};
+timapi.statemachine.AbstractContext.prototype.eventCloseMaintenanceWindow = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventCloseMaintenanceWindow");
+    try {
+        this.state.closeMaintenanceWindow();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventCloseMaintenanceWindow failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventCloseMaintenanceWindow");
+};
+timapi.statemachine.AbstractContext.prototype.eventHoldCommit = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventHoldCommit");
+    try {
+        this.state.holdCommit();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventHoldCommit failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventHoldCommit");
+};
+timapi.statemachine.AbstractContext.prototype.eventActivateServiceMenu = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventActivateServiceMenu");
+    try {
+        this.state.activateServiceMenu();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventActivateServiceMenu failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventActivateServiceMenu");
+};
+timapi.statemachine.AbstractContext.prototype.eventAmtAdjustment = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventAmtAdjustment");
+    try {
+        this.state.amtAdjustment();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventAmtAdjustment failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventAmtAdjustment");
+};
+timapi.statemachine.AbstractContext.prototype.eventBalanceInquiry = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventBalanceInquiry");
+    try {
+        this.state.balanceInquiry();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventBalanceInquiry failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventBalanceInquiry");
+};
+timapi.statemachine.AbstractContext.prototype.eventOpenDialogMode = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventOpenDialogMode");
+    try {
+        this.state.openDialogMode();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventOpenDialogMode failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventOpenDialogMode");
+};
+timapi.statemachine.AbstractContext.prototype.eventCloseDialogMode = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventCloseDialogMode");
+    try {
+        this.state.closeDialogMode();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventCloseDialogMode failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventCloseDialogMode");
+};
+timapi.statemachine.AbstractContext.prototype.eventShowSignatureCapture = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventShowSignatureCapture");
+    try {
+        this.state.showSignatureCapture();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventShowSignatureCapture failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventShowSignatureCapture");
+};
+timapi.statemachine.AbstractContext.prototype.eventShowDialog = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventShowDialog");
+    try {
+        this.state.showDialog();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventShowDialog failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventShowDialog");
+};
+timapi.statemachine.AbstractContext.prototype.eventSendCardCommand = function () {
+    timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "eventSendCardCommand");
+    try {
+        this.state.sendCardCommand();
+    }
+    catch (e) {
+        if (e.name == "TimError" &&
+            (e.resultCode == timapi.constants.ResultCode.requestPending
+                || e.resultCode == timapi.constants.ResultCode.sixmlWrongState)) {
+            throw e;
+        }
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Sending event eventSendCardCommand failed on state " +
+            this.state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+        return;
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "eventSendCardCommand");
+};
+timapi.statemachine.AbstractContext.prototype.setState = function (state) {
+    if (timapi.statemachine.AbstractContext.logger.isLoggable(timapi.logging.Level.FINEST)) {
+        timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "setState", this.state);
+    }
+    else {
+        timapi.statemachine.AbstractContext.logger.entering(timapi.statemachine.AbstractContext.classname, "setState");
+    }
+    if (state == undefined) {
+        throw new Error("state is undefined");
+    }
+    if (this.state != undefined) {
+        try {
+            this.state.exitState();
+        }
+        catch (e) {
+            timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Exit state failed on state " +
+                this.state.classname + " with no Fail-State set", e);
+            this.setState(new timapi.statemachine.states.ErrorState(this));
+            return;
+        }
+    }
+    this.state = state;
+    try {
+        this.state.enterState();
+    }
+    catch (e) {
+        timapi.statemachine.AbstractContext.logger.log(timapi.logging.Level.severe, "Enter state failed on state " +
+            state.classname + " with no Fail-State set", e);
+        this.setState(new timapi.statemachine.states.ErrorState(this));
+    }
+    timapi.statemachine.AbstractContext.logger.exiting(timapi.statemachine.AbstractContext.classname, "setState");
+};
+timapi.statemachine.AbstractContext.prototype.state = undefined;
+var timapi;
+(function (timapi) {
+    var statemachine;
+    (function (statemachine) {
+        var sixml;
+        (function (sixml) {
+            class StateMachine extends timapi.statemachine.AbstractContext {
+                constructor(backend) {
+                    super(backend);
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "<constructor>");
+                    if (backend == undefined) {
+                        throw new Error();
+                    }
+                    this.backend = backend;
+                    for (var func in this.__proto__) {
+                        if (this.__proto__[func] == undefined) {
+                            StateMachine.logger.log(timapi.logging.Level.INFO, func + " not implemented!");
+                            this.__proto__[func] = function () {
+                                StateMachine.logger.log(timapi.logging.Level.WARNING, "Called function not implemented!");
+                            };
+                        }
+                    }
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "<constructor>");
+                }
+                start() {
+                    super.start();
+                }
+                dispose() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "dispose");
+                    this.cancelTaskTimeout();
+                    this.cancelTaskKeepAliveCheck();
+                    this.cancelTaskKeepAliveDisconnect();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "dispose");
+                }
+                get $backend() {
+                    return this.backend;
+                }
+                get $lastReceivedMessage() {
+                    return this.lastReceivedMessage;
+                }
+                set $lastReceivedMessage(value) {
+                    this.lastReceivedMessage = value;
+                }
+                set $requestChangeSettings(value) {
+                    this.requestChangeSettings = value;
+                }
+                set $requestCounterRequest(value) {
+                    this.requestCounterRequest = value;
+                }
+                set $requestLogin(value) {
+                    this.requestLogin = value;
+                }
+                set $requestReceiptRequest(value) {
+                    this.requestReceiptRequest = value;
+                }
+                set $requestShowSignatureCapture(value) {
+                    this.requestShowSignatureCapture = value;
+                }
+                set $requestShowDialog(value) {
+                    this.requestShowDialog = value;
+                }
+                set $notificationCancel(value) {
+                    this.notificationCancel = value;
+                }
+                set $requestInitTransaction(value) {
+                    this.requestInitTransaction = value;
+                }
+                set $requestTransaction(value) {
+                    this.requestTransaction = value;
+                }
+                set $requestQueryLoyalty(value) {
+                    this.requestQueryLoyalty = value;
+                }
+                conditionIsEnabledAutoConnect() {
+                    return this.backend.$terminal.$settings.$autoConnect;
+                }
+                conditionIsEnabledAutoLogin() {
+                    return this.backend.$terminal.$settings.$autoLogin;
+                }
+                conditionIsEnabledFetchBrands() {
+                    return this.backend.$terminal.$settings.$fetchBrands;
+                }
+                conditionIsEnabledAutoActivate() {
+                    return this.backend.$terminal.$settings.$autoActivate;
+                }
+                conditionIsEnabledAutoCommit() {
+                    return this.backend.$terminal.$settings.$autoCommit;
+                }
+                conditionIsEnabledAutoDeactivate() {
+                    return this.backend.$terminal.$settings.$autoDeactivate;
+                }
+                conditionIsEnabledAutoLogout() {
+                    return this.backend.$terminal.$settings.$autoLogout;
+                }
+                conditionIsEnabledAutoDisconnect() {
+                    return this.backend.$terminal.$settings.$autoDisconnect;
+                }
+                conditionHasTerminalFeatures() {
+                    return this.backend.$features !== undefined;
+                }
+                conditionSupportedFeatureAutoCommit() {
+                    return (this.backend.$features !== undefined &&
+                        this.backend.$features.$sixml.$autoCommit ===
+                            timapi.Support.supported);
+                }
+                conditionMandatoryFeatureAutoCommit() {
+                    return (this.backend.$features !== undefined &&
+                        this.backend.$features.$sixml.$autoCommit ===
+                            timapi.Support.mandatory);
+                }
+                conditionIsApplicationInformationNotSupported() {
+                    return (this.backend.$features !== undefined &&
+                        !this.backend.$features.$sixml.$statusFunctions.has(timapi.constants.StatusFunctions.applicationInformation));
+                }
+                conditionHasPendingEvent() {
+                    return this.pendingRequest !== undefined;
+                }
+                conditionHasPendingActivate() {
+                    return this.pendingRequest === timapi.constants.RequestType.activate;
+                }
+                conditionHasPendingApplicationInformation() {
+                    return (this.pendingRequest ===
+                        timapi.constants.RequestType.applicationInformation);
+                }
+                conditionHasPendingBalance() {
+                    return this.pendingRequest === timapi.constants.RequestType.balance;
+                }
+                conditionHasPendingChangeSettings() {
+                    return (this.pendingRequest === timapi.constants.RequestType.changeSettings);
+                }
+                conditionHasPendingCommit() {
+                    return this.pendingRequest === timapi.constants.RequestType.commit;
+                }
+                conditionHasPendingCounterRequest() {
+                    return (this.pendingRequest === timapi.constants.RequestType.counterRequest);
+                }
+                conditionHasPendingDccRates() {
+                    return this.pendingRequest === timapi.constants.RequestType.dccRates;
+                }
+                conditionHasPendingDeactivate() {
+                    return this.pendingRequest === timapi.constants.RequestType.deactivate;
+                }
+                conditionHasPendingHardwareInformation() {
+                    return (this.pendingRequest === timapi.constants.RequestType.hardwareInformation);
+                }
+                conditionHasPendingInitTransaction() {
+                    return (this.pendingRequest === timapi.constants.RequestType.initTransaction);
+                }
+                conditionHasPendingLogin() {
+                    return this.pendingRequest === timapi.constants.RequestType.login;
+                }
+                conditionHasPendingLogout() {
+                    return this.pendingRequest === timapi.constants.RequestType.logout;
+                }
+                conditionHasPendingReboot() {
+                    return this.pendingRequest === timapi.constants.RequestType.reboot;
+                }
+                conditionHasPendingReceiptRequest() {
+                    return (this.pendingRequest === timapi.constants.RequestType.receiptRequest);
+                }
+                conditionHasPendingReconfig() {
+                    return this.pendingRequest === timapi.constants.RequestType.reconfig;
+                }
+                conditionHasPendingReconciliation() {
+                    return (this.pendingRequest === timapi.constants.RequestType.reconciliation);
+                }
+                conditionHasPendingSoftwareUpdate() {
+                    return (this.pendingRequest === timapi.constants.RequestType.softwareUpdate);
+                }
+                conditionHasPendingSystemInformation() {
+                    return (this.pendingRequest === timapi.constants.RequestType.systemInformation);
+                }
+                conditionHasPendingTransaction() {
+                    return this.pendingRequest === timapi.constants.RequestType.transaction;
+                }
+                conditionHasPendingCancel() {
+                    return this.hasPendingCancel;
+                }
+                conditionTransactionNoCommit() {
+                    if (this.lastReceivedMessage == undefined) {
+                        return true;
+                    }
+                    switch (this.lastReceivedMessage.attributes.get("Function")) {
+                        case timapi.protocol.constants.Function.credit:
+                        case timapi.protocol.constants.Function.combined:
+                        case timapi.protocol.constants.Function.giro:
+                        case timapi.protocol.constants.Function.finalizePurchase:
+                        case timapi.protocol.constants.Function.purchase:
+                        case timapi.protocol.constants.Function.purchaseForcedAcceptance:
+                        case timapi.protocol.constants.Function.purchasePhoneAuthorized:
+                        case timapi.protocol.constants.Function.purchaseReservation:
+                        case timapi.protocol.constants.Function.purchaseWithCashback:
+                            return false;
+                        case timapi.protocol.constants.Function.adjustReservation:
+                        case timapi.protocol.constants.Function.authorizeCredit:
+                        case timapi.protocol.constants.Function.authorizeDeposit:
+                        case timapi.protocol.constants.Function.balanceInquiry:
+                        case timapi.protocol.constants.Function.bankingBalanceInquiry:
+                        case timapi.protocol.constants.Function.cancelReservation:
+                        case timapi.protocol.constants.Function.cashAdvance:
+                        case timapi.protocol.constants.Function.collectPoints:
+                        case timapi.protocol.constants.Function.loadVoucher:
+                        case timapi.protocol.constants.Function.preAuthorization:
+                        case timapi.protocol.constants.Function.queryLoyalty:
+                        case timapi.protocol.constants.Function.reservation:
+                        case timapi.protocol.constants.Function.reversal:
+                        default:
+                            return true;
+                    }
+                }
+                conditionRunAwayProtection() {
+                    return (this.runAwayTime !== undefined &&
+                        new Date().getTime() - this.runAwayTime < 1000);
+                }
+                actionActivate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionActivate");
+                    let message = new timapi.protocol.sixml.Request_Activate();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    message.usrId = this.backend.$terminal.$userId;
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionActivate");
+                }
+                actionApplicationInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionApplicationInformation");
+                    let message = new timapi.protocol.sixml.Request_ApplicationInformation();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionApplicationInformation");
+                }
+                actionBalance() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionBalance");
+                    let message = new timapi.protocol.sixml.Request_Balance();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionBalance");
+                }
+                actionCancel() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCancel");
+                    let message = this.notificationCancel;
+                    this.notificationCancel = undefined;
+                    this.backend.sendNotification(message);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCancel");
+                }
+                actionChangeSettings() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionChangeSettings");
+                    let message = this.requestChangeSettings;
+                    this.requestChangeSettings = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionChangeSettings");
+                }
+                actionCommit() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCommit");
+                    let message = new timapi.protocol.sixml.Request_Commit();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCommit");
+                }
+                actionCounterRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCounterRequest");
+                    let message = this.requestCounterRequest;
+                    this.requestCounterRequest = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCounterRequest");
+                }
+                actionDccRates() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionDccRates");
+                    let message = new timapi.protocol.sixml.Request_DccRates();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionDccRates");
+                }
+                actionDeactivate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionDeactivate");
+                    let message = new timapi.protocol.sixml.Request_Deactivate();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionDeactivate");
+                }
+                actionHardwareInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionHardwareInformation");
+                    let message = new timapi.protocol.sixml.Request_HardwareInformation();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionHardwareInformation");
+                }
+                actionInitTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionInitTransaction");
+                    let message = this.requestInitTransaction;
+                    this.requestLogin = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionInitTransaction");
+                }
+                actionLogin() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionLogin");
+                    let message = this.requestLogin;
+                    this.requestLogin = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionLogin");
+                }
+                actionLogout() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionLogout");
+                    let message = new timapi.protocol.sixml.Request_Logout();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionLogout");
+                }
+                actionReboot() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionReboot");
+                    let message = new timapi.protocol.sixml.Request_Reboot();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionReboot");
+                }
+                actionReconciliation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionReconciliation");
+                    let message = new timapi.protocol.sixml.Request_Reconciliation();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionReconciliation");
+                }
+                actionReconfig() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionReconfig");
+                    let message = new timapi.protocol.sixml.Request_Reconfig();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionReconfig");
+                }
+                actionReceiptRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionReceiptRequest");
+                    let message = this.requestReceiptRequest;
+                    this.requestReceiptRequest = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionReceiptRequest");
+                }
+                actionRequestFeatures() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionRequestFeatures");
+                    let message = new timapi.protocol.sixml.Request_FeatureRequest();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionRequestFeatures");
+                }
+                actionRollback() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionRollback");
+                    let message = new timapi.protocol.sixml.Request_Rollback();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionRollback");
+                }
+                actionSoftwareUpdate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSoftwareUpdate");
+                    let message = new timapi.protocol.sixml.Request_SoftwareUpdate();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSoftwareUpdate");
+                }
+                actionSystemInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSystemInformation");
+                    let message = new timapi.protocol.sixml.Request_SystemInformation();
+                    if (this.backend.$terminal.$ecrData.length > 0) {
+                        let ecrData = new timapi.protocol.sixml.EcrData();
+                        for (let entry of this.backend.$terminal.$ecrData) {
+                            let ecrInfo = new timapi.protocol.sixml.EcrInfo();
+                            ecrInfo.ecrInfoArchitecture = entry.$architecture;
+                            ecrInfo.ecrInfoManufacturerName = entry.$manufacturerName;
+                            ecrInfo.ecrInfoName = entry.$name;
+                            ecrInfo.ecrInfoSerialNumber = entry.$serialNumber;
+                            ecrInfo.ecrInfoType = timapi.protocol.constants.EcrInfoType.timApi2Protocol(entry.$type);
+                            ecrInfo.ecrInfoVers = entry.$version;
+                            ecrInfo.integratorSolution = entry.$integratorSolution;
+                            ecrInfo.remoteIp = entry.$remoteIp;
+                            ecrData.ecrInfo.push(ecrInfo);
+                        }
+                        message.ecrData = ecrData;
+                    }
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSystemInformation");
+                }
+                actionTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionTransaction");
+                    if (this.requestTransaction instanceof timapi.protocol.sixml.Request_Purchase) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_Credit) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_Reversal) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_PreAuthorization) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_FinalizePurchase) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_PurchaseForcedAcceptance) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_CashAdvance) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_PurchaseWithCashback) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.equenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_PurchasePhoneAuthorized) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_Reservation) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_AdjustReservation) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_CancelReservation) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else if (this.requestTransaction instanceof timapi.protocol.sixml.Request_PurchaseReservation) {
+                        let message = this.requestTransaction;
+                        this.requestTransaction = undefined;
+                        message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                        this.backend.sendMessage(message);
+                        this.armKeepAliveTimer();
+                    }
+                    else {
+                        throw new Error();
+                    }
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionTransaction");
+                }
+                actionSetDefaultLoginRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetDefaultLoginRequest");
+                    this.$requestLogin = timapi.statemachine.sixml.ConvertTimApi2SIXml.createLoginRequest(this.backend.$terminal);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetDefaultLoginRequest");
+                }
+                actionConnect() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionConnect");
+                    this.backend.commConnect();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionConnect");
+                }
+                actionDisconnect() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionDisconnect");
+                    this.backend.commDisconnect();
+                    this.backend.setDisconnectedTerminalStatus();
+                    this.backend.notifyTerminalStatusChanged();
+                    this.backend.notifyDisconnected();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionDisconnect");
+                }
+                actionSendKeepAliveNotification() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSendKeepAliveNotification");
+                    this.backend.sendNotification(new timapi.protocol.sixml.Notification_KeepAlive());
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSendKeepAliveNotification");
+                }
+                actionSendErrorResponseDisconnect() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSendErrorResponseDisconnect");
+                    this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiConnectionLostTerminal));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSendErrorResponseDisconnect");
+                }
+                actionProcessResponseActivate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseActivate");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_Activate(this.lastReceivedMessage);
+                        timResponse = new timapi.ActivateResponse(timapi.statemachine.sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), response.actSeqCounter);
+                        this.backend.notifyActivateCompleted(undefined, timResponse);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseActivate: exception", error);
+                        throw error;
+                    }
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseActivate");
+                }
+                actionProcessResponseApplicationInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseApplicationInformation");
+                    let timBrands = new Array();
+                    try {
+                        let response = new timapi.protocol.sixml
+                            .Response_ApplicationInformation(this.lastReceivedMessage);
+                        for (let brand of response.brandList.brand) {
+                            let timApplications = new Array();
+                            for (let application of brand.application) {
+                                timApplications.push(new timapi.Application(application.$aid, application.$applicationLabel));
+                            }
+                            let timCurrencies = new Array();
+                            for (let item of brand.currencyList.currencyItem) {
+                                timCurrencies.push(new timapi.CurrencyItem(timapi.constants.Currency["item.value"], timapi.protocol.constants.CurrencyType.protocol2TimApi(item.currencyType)));
+                            }
+                            timBrands.push(new timapi.Brands(brand.brandName, brand.dccAvailable, timapi.protocol.constants.PaymentProtocol.protocol2TimApi(brand.paymentProtocol), brand.$acqId, timapi.statemachine.sixml.ConvertSIXml2TimApi.convertTimeDateOrNull(brand.$lastInitDate), timApplications, timCurrencies));
+                        }
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseApplicationInformation: exception", error);
+                        throw error;
+                    }
+                    this.backend.$brands(timBrands);
+                    this.backend.notifyApplicationInformationCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseApplicationInformation");
+                }
+                actionProcessResponseBalance() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseBalance");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_Balance(this.lastReceivedMessage);
+                        timResponse = new timapi.BalanceResponse(timapi.statemachine.sixml.ConvertSIXml2TimApi.convertCounters(response.counters), timapi.statemachine.sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData));
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseBalance: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyBalanceCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseBalance");
+                }
+                actionProcessResponseChangeSettings() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseChangeSettings");
+                    this.backend.notifyChangeSettingsCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseChangeSettings");
+                }
+                actionProcessResponseCommit() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseCommit");
+                    this.backend.notifyCommitCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseCommit");
+                }
+                actionProcessResponseCounterRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseCounterRequest");
+                    let timCounters;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_CounterRequest(this.lastReceivedMessage);
+                        timCounters = timapi.statemachine.sixml.ConvertSIXml2TimApi.convertCounters(response.counters);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseCounterRequest: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyCounterRequestCompleted(undefined, timCounters);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseCounterRequest");
+                }
+                actionProcessResponseDeactivate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseDeactivate");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_Deactivate(this.lastReceivedMessage);
+                        timResponse = new timapi.DeactivateResponse(timapi.statemachine.sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), timapi.statemachine.sixml.ConvertSIXml2TimApi.convertCountersOrNull(response.counters));
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseDeactivate: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyDeactivateCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseDeactivate");
+                }
+                actionProcessResponseDccRates() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseDccRates");
+                    let timPrintData;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_DccRates(this.lastReceivedMessage);
+                        timPrintData = timapi.statemachine.sixml.ConvertSIXml2TimApi.convertPrintData(response.printData);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseDccRates: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyDccRatesCompleted(undefined, timPrintData);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseDccRates");
+                }
+                actionProcessResponseError() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseError");
+                    let response = new timapi.protocol.sixml.Response_Error(this.lastReceivedMessage);
+                    let resultCode = timapi.protocol.constants.ResultCode.protocol2TimApi(response.resultCode);
+                    if (resultCode == undefined) {
+                        resultCode = timapi.constants.ResultCode.sixmlGeneralError;
+                    }
+                    let additionalErrorInfo = new Map();
+                    if (response.additionalErrorInfoList !== undefined) {
+                        for (let each of response.additionalErrorInfoList.additionalErrorInfo) {
+                            additionalErrorInfo.set(each.additionalErrorInfoType, each.value);
+                        }
+                    }
+                    this.backend.failRunningRequest(new timapi.TimException(resultCode, timapi.ErrorMessages.getErrorMessage(resultCode, this.backend.$terminal), timapi.statemachine.sixml.ConvertSIXml2TimApi.convertNativeErrorOrNull(response.nativeError), timapi.statemachine.sixml.ConvertSIXml2TimApi.convertPpInfoOrNull(response.ppInfo), additionalErrorInfo, timapi.statemachine.sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData)));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseError");
+                }
+                actionProcessResponseFeatureRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseFeatureRequest");
+                    let timFeatures;
+                    let terminalId = "";
+                    try {
+                        let response = new timapi.protocol.sixml.Response_FeatureRequest(this.lastReceivedMessage);
+                        terminalId = response.terminalId;
+                        let mapSupport = new Map([
+                            ["0", timapi.Support.disabled],
+                            ["1", timapi.Support.supported],
+                            ["2", timapi.Support.mandatory]
+                        ]);
+                        let hwCardholderDisplay = false;
+                        let hwMerchantDisplay = false;
+                        let hwPrinter = false;
+                        let hwDisplayBrightness = false;
+                        let hwDisplayContrast = false;
+                        let hwAlertTones = false;
+                        let hwKeypadTones = false;
+                        let payDcc = false;
+                        let payDeclinedReceipts = false;
+                        let payPartialApproval = false;
+                        let payEp2Available = false;
+                        let payEp2Dcc = false;
+                        let payEp2DeclinedReceipts = false;
+                        let payEp2MultiAccountSelection = false;
+                        let payEp2MultiContractSelection = false;
+                        let sixmlAdminFunctions = new Set();
+                        let sixmlAutoCommit = timapi.Support.disabled;
+                        let sixmlAutoShiftManagement = timapi.Support.disabled;
+                        let sixmlAutoShutterManagement = timapi.Support.disabled;
+                        let sixmlFinancialFunctions = new Set();
+                        let sixmlGuides = new Set();
+                        let sixmlNonFinancialFunctions = new Set();
+                        let sixmlProtocolLevels = new Set();
+                        let sixmlSleepTimer = false;
+                        let sixmlStatusFunctions = new Set();
+                        let sixmlDialogFunctions = new Set();
+                        for (let feature of response.features.feature) {
+                            switch (feature.featureType) {
+                                case timapi.protocol.constants.FeatureType
+                                    .hardwareDisplayCardHolderInstalled:
+                                    hwCardholderDisplay = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .hardwareDisplayMerchantInstalled:
+                                    hwMerchantDisplay = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.hardwarePrinterInstalled:
+                                    hwPrinter = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .hardwareSettingDisplayBrightness:
+                                    hwDisplayBrightness = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .hardwareSettingDisplayContrast:
+                                    hwDisplayContrast = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .hardwareSettingTonesAlert:
+                                    hwAlertTones = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .hardwareSettingTonesKeypad:
+                                    hwKeypadTones = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.paymentDcc:
+                                    payDcc = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.paymentDeclinedReceipts:
+                                    payDeclinedReceipts = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.paymentPartialApproval:
+                                    payPartialApproval = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.paymentPartialCommit:
+                                    break;
+                                case timapi.protocol.constants.FeatureType.ep2Available:
+                                    payEp2Available = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.ep2Dcc:
+                                    payEp2Dcc = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.ep2DeclinedReceipts:
+                                    payEp2DeclinedReceipts = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.ep2MultiAccountSelection:
+                                    payEp2MultiAccountSelection = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .ep2MultiContractSelection:
+                                    payEp2MultiContractSelection = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlAdminFunctions:
+                                    sixmlAdminFunctions = timapi.protocol.constants.AdminFunctions.protocol2TimApi(parseInt(feature.value, 16));
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlAutoCommit:
+                                    sixmlAutoCommit = mapSupport.get(feature.value);
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlAutoShiftManagement:
+                                    sixmlAutoShiftManagement = mapSupport.get(feature.value);
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .sixmlAutoShutterManagement:
+                                    sixmlAutoShutterManagement = mapSupport.get(feature.value);
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlDialogFunctions:
+                                    sixmlDialogFunctions = timapi.protocol.constants.DialogFunctions.protocol2TimApi(parseInt(feature.value, 16));
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .sixmlFinancialTransactions:
+                                    sixmlFinancialFunctions = timapi.protocol.constants.FinancialTransactions.protocol2TimApi(parseInt(feature.value, 16));
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlGuides:
+                                    sixmlGuides = timapi.protocol.constants.Guides.protocol2TimApi(parseInt(feature.value, 16));
+                                    break;
+                                case timapi.protocol.constants.FeatureType
+                                    .sixmlNonFinancialTransactions:
+                                    sixmlNonFinancialFunctions = timapi.protocol.constants.NonFinancialTransactions.protocol2TimApi(parseInt(feature.value, 16));
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlProtocolLevel:
+                                    {
+                                        let protocolValue = parseInt(feature.value, undefined);
+                                        let pl = timapi.protocol.constants.ProtocolLevel.protocol2TimApiIfValid(protocolValue);
+                                        if (pl !== undefined) {
+                                            sixmlProtocolLevels.add(pl);
+                                        }
+                                    }
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlRemoteFunctions:
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlSleepTimer:
+                                    sixmlSleepTimer = feature.value === "1";
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlStatusFunctions:
+                                    sixmlStatusFunctions = timapi.protocol.constants.StatusFunctions.protocol2TimApi(parseInt(feature.value, 16));
+                                    break;
+                                case timapi.protocol.constants.FeatureType.sixmlSwUpdateInformation:
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                        timFeatures = new timapi.Features(new timapi.FeaturesHardware(hwCardholderDisplay, hwMerchantDisplay, hwPrinter, hwDisplayBrightness, hwDisplayContrast, hwAlertTones, hwKeypadTones), new timapi.FeaturesPayment(payDcc, payDeclinedReceipts, payPartialApproval, payEp2Available, payEp2Dcc, payEp2DeclinedReceipts, payEp2MultiAccountSelection, payEp2MultiContractSelection), new timapi.FeaturesSixml(sixmlAdminFunctions, sixmlAutoCommit, sixmlAutoShiftManagement, sixmlAutoShutterManagement, sixmlFinancialFunctions, sixmlGuides, sixmlNonFinancialFunctions, sixmlProtocolLevels, sixmlSleepTimer, sixmlStatusFunctions, sixmlDialogFunctions));
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseFeatureRequest: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.$terminalId = terminalId;
+                    this.backend.$features = timFeatures;
+                    if (this.requestLogin !== undefined) {
+                        if (this.backend.$terminal.$settings.$autoCommit &&
+                            timFeatures.$sixml.$autoCommit === timapi.Support.disabled) {
+                            for (let each of this.requestLogin.protocolOptionList.protocolOption) {
+                                if (each.optionType === timapi.protocol.constants.OptionType.sixmlAutoCommit) {
+                                    each.value = 0;
+                                }
+                            }
+                        }
+                        let protocolLevel = timapi.statemachine.sixml.ConvertTimApi2SIXml.findMatchingProtocolLevel(this.backend.$terminal);
+                        if (protocolLevel != 0) {
+                            for (let each of this.requestLogin.protocolOptionList.protocolOption) {
+                                if (each.optionType === timapi.protocol.constants.OptionType.sixmlProtocolLevel) {
+                                    each.value = String(protocolLevel);
+                                }
+                            }
+                        }
+                        else {
+                            this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed));
+                            throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                        }
+                    }
+                    if (this.pendingRequest !== undefined &&
+                        !this.backend.isPendingRequestAllowed()) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed));
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseFeatureRequest");
+                }
+                actionProcessResponseHardwareInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseHardwareInformation");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_HardwareInformation(this.lastReceivedMessage);
+                        let timHardwares = new Array();
+                        for (let hardware of response.hardwareList.hardware) {
+                            timHardwares.push(new timapi.Hardware(timapi.protocol.constants.HardwareType.protocol2TimApi(hardware.hardwareType), hardware.serialNumber, timapi.statemachine.sixml.ConvertSIXml2TimApi.convertTimeDateOrNull(hardware.productionDate), hardware.productVersion, hardware.firmwareVersion, timapi.protocol.constants.SecurityStatus.protocol2TimApi(hardware.securityStatus), timapi.statemachine.sixml.ConvertSIXml2TimApi.convertTimeDateOrNull(hardware.lastCleaningDate)));
+                        }
+                        let timKernelVersions = new Map();
+                        for (let kernelVersion of response.kernelVersionList.kernelVersion) {
+                            timKernelVersions.set(timapi.protocol.constants.KernelType.protocol2TimApi(kernelVersion.kernelType), kernelVersion.value);
+                        }
+                        let timSettings = new Map();
+                        for (let setting of response.settingsList.setting) {
+                            timSettings.set(timapi.protocol.constants.SettingType.protocol2TimApi(setting.settingType), setting.value);
+                        }
+                        let timStatistics = new Map();
+                        if (this.backend.$terminal.$settings.$guides.has(timapi.constants.Guides.unattended)) {
+                            for (let statistic of response.statisticsList.statistic) {
+                                timStatistics.set(statistic.statisticType, statistic.value);
+                            }
+                        }
+                        timResponse = new timapi.HardwareInformationResponse(timHardwares, timKernelVersions, timSettings, timStatistics);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseHardwareInformation: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyHardwareInformationCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseHardwareInformation");
+                }
+                actionProcessResponseInitTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseInitTransaction");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_InitTransaction(this.lastReceivedMessage);
+                        timResponse = sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseInitTransaction: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyInitTransactionCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseInitTransaction", [timResponse]);
+                }
+                actionProcessResponseLogin() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseLogin");
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseLogin");
+                }
+                actionProcessResponseLogout() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseLogout");
+                    this.backend.notifyLogoutCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseLogout");
+                }
+                actionProcessResponseReboot() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseReboot");
+                    this.backend.notifyRebootCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseReboot");
+                }
+                actionProcessResponseRollback() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseRollback");
+                    let timPrintData;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_Rollback(this.lastReceivedMessage);
+                        timPrintData = sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseRollback: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyRollbackCompleted(undefined, timPrintData);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseRollback");
+                }
+                actionProcessResponseReceiptRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseReceiptRequest");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_ReceiptRequest(this.lastReceivedMessage);
+                        timResponse = new timapi.ReceiptRequestResponse(sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), response.getHasMoreReceipts());
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseReceiptRequest: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyReceiptRequestCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseReceiptRequest");
+                }
+                actionProcessResponseReconciliation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseReconciliation");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_Reconciliation(this.lastReceivedMessage);
+                        timResponse = new timapi.ReconciliationResponse(sixml.ConvertSIXml2TimApi.convertCounters(response.counters), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData));
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseReconciliation: exception", error);
+                        throw error;
+                    }
+                    this.backend.notifyReconciliationCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseReconciliation");
+                }
+                actionProcessResponseReconfig() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseReconfig");
+                    let timPrintData;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_Reconfig(this.lastReceivedMessage);
+                        timPrintData = sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData);
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseReconfig: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyReconfigCompleted(undefined, timPrintData);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseReconfig");
+                }
+                actionProcessResponseSoftwareUpdate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseSoftwareUpdate");
+                    let timStatus;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_SoftwareUpdate(this.lastReceivedMessage);
+                        timStatus = timapi.protocol.constants.UpdateStatus.protocol2TimApi(response.getUpdateStatus());
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseSoftwareUpdate: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifySoftwareUpdateCompleted(undefined, timStatus);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseSoftwareUpdate");
+                }
+                actionProcessResponseSystemInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseSystemInformation");
+                    let timResponse;
+                    try {
+                        let response = new timapi.protocol.sixml.Response_SystemInformation(this.lastReceivedMessage);
+                        let timReceiptHeader = new Array();
+                        for (let header of response.configData.receiptHeader) {
+                            while (timReceiptHeader.length < header.lineNum) {
+                                timReceiptHeader.push("");
+                            }
+                            timReceiptHeader[header.lineNum - 1] = header.value;
+                        }
+                        this.backend.$configData(new timapi.ConfigData(timReceiptHeader, response.configData.language));
+                        timResponse = new timapi.SystemInformationResponse(new timapi.NetworkInformation(response.networkInformation.terminalIp, response.networkInformation.terminalIpMask, response.networkInformation.terminalIpGw, response.networkInformation.terminalIpDns));
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseSystemInformation: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifySystemInformationCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseSystemInformation");
+                }
+                actionProcessResponseTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseTransaction");
+                    let timResponse;
+                    try {
+                        let guides = this.backend.$terminal.$settings.$guides;
+                        switch (this.lastReceivedMessage.attributes.get("Function")) {
+                            case timapi.protocol.constants.Function.purchase:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_Purchase(this.lastReceivedMessage);
+                                    let tipAmount;
+                                    if (guides.has(timapi.constants.Guides.gastro)) {
+                                        tipAmount = sixml.ConvertSIXml2TimApi.convertAmountTipOrNull(response.amountTip);
+                                    }
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.purchase, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), tipAmount, sixml.ConvertSIXml2TimApi.convertAdditionalInfoOrEmpty(response.additionalInfoList), sixml.ConvertSIXml2TimApi.convertBasketOrEmpty(response.basket));
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.credit:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_Credit(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.credit, sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amount), undefined, sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), new Array());
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.reversal:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_Reversal(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.reversal, sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amount), undefined, sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, undefined, sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), new Array());
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.preAuhtorization:
+                                {
+                                    let response = new timapi.protocol.sixml
+                                        .Response_PreAuthorization(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.PRE_AUTHORIZATION, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), undefined, sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformation(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, sixml.ConvertSIXml2TimApi.convertAdditionalInfoOrEmpty(response.additionalInfoList), sixml.ConvertSIXml2TimApi.convertBasketOrEmpty(response.basket));
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.finalizePurchase:
+                                {
+                                    let response = new timapi.protocol.sixml
+                                        .Response_FinalizePurchase(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.finalizePurchase, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), undefined, undefined, undefined, undefined, undefined, undefined, sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), sixml.ConvertSIXml2TimApi.convertBasketOrEmpty(response.basket));
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.purchaseForcedAcceptance:
+                                {
+                                    let response = new timapi.protocol.sixml
+                                        .Response_PurchaseForcedAcceptance(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.purchaseForcedAcceptance, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), new Array());
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.cashAdvance:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_CashAdvance(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.cashAdvance, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), new Array());
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.purchaseWithCashback:
+                                {
+                                    let response = new timapi.protocol.sixml
+                                        .Response_PurchaseWithCashback(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.purchaseWithCashback, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), new Array());
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.purchasePhoneAuthorized:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_PurchasePhoneAuthorized(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.purchasePhoneAuthorized, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), new Array());
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.reservation:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_Reservation(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.reservation, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), undefined, sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), undefined);
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.adjustReservation:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_AdjustReservation(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.adjustReservation, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), undefined, sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation, this.$backend.$terminalId), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), undefined);
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.cancelReservation:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_CancelReservation(this.lastReceivedMessage);
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.cancelReservation, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), undefined, undefined, undefined, sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation, this.$backend.$terminalId), undefined, undefined, sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), undefined, new Map(), undefined);
+                                }
+                                break;
+                            case timapi.protocol.constants.Function.purchaseReservation:
+                                {
+                                    let response = new timapi.protocol.sixml.Response_PurchaseReservation(this.lastReceivedMessage);
+                                    let tipAmount = undefined;
+                                    if (guides.has(timapi.constants.Guides.gastro)) {
+                                        tipAmount = sixml.ConvertSIXml2TimApi.convertAmountTipOrNull(response.amountTip);
+                                    }
+                                    timResponse = new timapi.TransactionResponse(timapi.constants.TransactionType.purchaseReservation, sixml.ConvertSIXml2TimApi.convertAmount(response.amount), sixml.ConvertSIXml2TimApi.convertAmountOrNull(response.amountDue), sixml.ConvertSIXml2TimApi.convertAmountDccOrNull(response.amountDcc), undefined, sixml.ConvertSIXml2TimApi.convertTransactionInformationOrNull(response.transactionInformation, this.$backend.$terminalId), response.dccDisclaimer, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(response.cardData), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData), tipAmount, new Map(), undefined);
+                                }
+                                break;
+                            default:
+                                throw new Error();
+                        }
+                    }
+                    catch (error) {
+                        this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                        StateMachine.logger.log(timapi.logging.Level.SEVERE, "actionProcessResponseTransaction: exception", [error]);
+                        throw error;
+                    }
+                    this.backend.notifyTransactionCompleted(undefined, timResponse);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseTransaction");
+                }
+                actionProcessNotificationStatusChanged() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessNotificationStatusChanged");
+                    let notification = new timapi.protocol.sixml.Notification_TerminalStatus(this.lastReceivedMessage);
+                    let timDisplay = new Array();
+                    for (let line of notification.displayContent.displayLine) {
+                        let lineNum = line.lineNum;
+                        while (timDisplay.length < lineNum) {
+                            timDisplay.push("");
+                        }
+                        timDisplay[lineNum - 1] = line.value;
+                    }
+                    this.backend.$terminalStatus =
+                        new timapi.TerminalStatus(timDisplay, timapi.protocol.constants.ConnectionStatus.protocol2TimApi(notification.connectionStatus), timapi.protocol.constants.ManagementStatus.protocol2TimApi(notification.managementStatus), timapi.protocol.constants.CardReaderStatus.protocol2TimApi(notification.cardReaderStatus), timapi.protocol.constants.TransactionStatus.protocol2TimApi(notification.transactionStatus), timapi.protocol.constants.SleepModeStatus.protocol2TimApiIfValid(notification.sleepModeStatus), notification.receiptInformation !== undefined
+                            ? notification.receiptInformation
+                            : false, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(notification.cardData), notification.swUpdateAvailable !== undefined
+                            ? notification.swUpdateAvailable
+                            : false);
+                    this.backend.notifyTerminalStatusChanged();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessNotificationStatusChanged");
+                }
+                actionProcessNotificationLicenseChanged() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessNotificationLicenseChanged");
+                    this.backend.$license(new timapi.protocol.sixml.Notification_LicenseChanged(this.lastReceivedMessage).license);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessNotificationLicenseChanged");
+                }
+                actionNotifyLoginCompleted() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionNotifyLoginCompleted");
+                    this.backend.notifyLoginCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionNotifyLoginCompleted");
+                }
+                actionSimulateActivateCompleted() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSimulateActivateCompleted");
+                    this.backend.notifyActivateCompleted(undefined, undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSimulateActivateCompleted");
+                }
+                actionSimulateDeactivateCompleted() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSimulateDeactivateCompleted");
+                    this.backend.notifyDeactivateCompleted(undefined, undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSimulateDeactivateCompleted");
+                }
+                actionSimulateLogoutCompleted() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSimulateLogoutCompleted");
+                    this.backend.notifyLogoutCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSimulateLogoutCompleted");
+                }
+                actionSimulateCommitCompleted() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSimulateCommitCompleted");
+                    this.backend.notifyCommitCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSimulateCommitCompleted");
+                }
+                actionClearPendingEvent() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionClearPendingEvent");
+                    this.pendingRequest = undefined;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionClearPendingEvent");
+                }
+                actionClearPendingCancel() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionClearPendingCancel");
+                    this.hasPendingCancel = false;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionClearPendingCancel");
+                }
+                actionSetPendingActivate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingActivate");
+                    this.pendingRequest = timapi.constants.RequestType.activate;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingActivate");
+                }
+                actionSetPendingApplicationInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingApplicationInformation");
+                    this.pendingRequest = timapi.constants.RequestType.applicationInformation;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingApplicationInformation");
+                }
+                actionSetPendingBalance() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingBalance");
+                    this.pendingRequest = timapi.constants.RequestType.balance;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingBalance");
+                }
+                actionSetPendingChangeSettings() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingChangeSettings");
+                    this.pendingRequest = timapi.constants.RequestType.changeSettings;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingChangeSettings");
+                }
+                actionSetPendingCounterRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingCounterRequest");
+                    this.pendingRequest = timapi.constants.RequestType.counterRequest;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingCounterRequest");
+                }
+                actionSetPendingCommit() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingCommit");
+                    this.pendingRequest = timapi.constants.RequestType.commit;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingCommit");
+                }
+                actionSetPendingDccRates() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingDccRates");
+                    this.pendingRequest = timapi.constants.RequestType.dccRates;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingDccRates");
+                }
+                actionSetPendingDeactivate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingDeactivate");
+                    this.pendingRequest = timapi.constants.RequestType.deactivate;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingDeactivate");
+                }
+                actionSetPendingHardwareInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingHardwareInformation");
+                    this.pendingRequest = timapi.constants.RequestType.hardwareInformation;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingHardwareInformation");
+                }
+                actionSetPendingInitTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingInitTransaction");
+                    this.pendingRequest = timapi.constants.RequestType.initTransaction;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingInitTransaction");
+                }
+                actionSetPendingLogin() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingLogin");
+                    this.pendingRequest = timapi.constants.RequestType.login;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingLogin");
+                }
+                actionSetPendingLogout() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingLogout");
+                    this.pendingRequest = timapi.constants.RequestType.logout;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingLogout");
+                }
+                actionSetPendingReboot() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingReboot");
+                    this.pendingRequest = timapi.constants.RequestType.reboot;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingReboot");
+                }
+                actionSetPendingReconfig() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingReconfig");
+                    this.pendingRequest = timapi.constants.RequestType.reconfig;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingReconfig");
+                }
+                actionSetPendingReceiptRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingReceiptRequest");
+                    this.pendingRequest = timapi.constants.RequestType.receiptRequest;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingReceiptRequest");
+                }
+                actionSetPendingReconciliation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingReconciliation");
+                    this.pendingRequest = timapi.constants.RequestType.reconciliation;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingReconciliation");
+                }
+                actionSetPendingSoftwareUpdate() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingSoftwareUpdate");
+                    this.pendingRequest = timapi.constants.RequestType.softwareUpdate;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingSoftwareUpdate");
+                }
+                actionSetPendingSystemInformation() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingSystemInformation");
+                    this.pendingRequest = timapi.constants.RequestType.systemInformation;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingSystemInformation");
+                }
+                actionSetPendingTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingTransaction");
+                    this.pendingRequest = timapi.constants.RequestType.transaction;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingTransaction");
+                }
+                actionSetPendingCancel() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingCancel");
+                    this.hasPendingCancel = true;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingCancel");
+                }
+                actionErrorConnectionLost() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionErrorConnectionLost");
+                    this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiConnectionLostTerminal));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionErrorConnectionLost");
+                }
+                actionErrorInvalidResponse() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionErrorInvalidResponse");
+                    this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.apiInvalidAnswer));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionErrorInvalidResponse");
+                }
+                actionErrorRequestInProgress() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionErrorRequestInProgress");
+                    throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+                }
+                actionErrorWrongState() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionErrorWrongState");
+                    throw new timapi.TimException(timapi.constants.ResultCode.sixmlWrongState);
+                }
+                actionErrorTimeout() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionErrorTimeout");
+                    this.backend.failRunningRequest(new timapi.TimException(timapi.constants.ResultCode.timCommunicationFailure));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionErrorTimeout");
+                }
+                actionErrorDisabledFeature() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionErrorDisabledFeature");
+                    throw new timapi.TimException(timapi.constants.ResultCode.apiDisabledFeature);
+                }
+                actionArmTimeoutTransaction() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionArmTimeoutTransaction");
+                    this.actionCancelTimeout();
+                    this.taskTimeout = new sixml.TaskTimeout(this, 30 * 1000);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionArmTimeoutTransaction");
+                }
+                actionArmTimeoutRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionArmTimeoutRequest");
+                    this.actionCancelTimeout();
+                    this.taskTimeout = new sixml.TaskTimeout(this, 300 * 1000);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionArmTimeoutRequest");
+                }
+                actionArmTimeoutLongRequest() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionArmTimeoutLongRequest");
+                    this.actionCancelTimeout();
+                    this.taskTimeout = new sixml.TaskTimeout(this, 180 * 1000);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionArmTimeoutLongRequest");
+                }
+                actionCancelTimeout() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCancelTimeout");
+                    this.cancelTaskTimeout();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCancelTimeout");
+                }
+                actionRunAwayProtection() {
+                    this.runAwayTime = new Date().getTime();
+                }
+                conditionHasGuideUnattended() {
+                    return this.backend.$terminal.$settings.$guides.has(timapi.constants.Guides.unattended);
+                }
+                conditionHasPendingCloseReader() {
+                    return this.pendingRequest === timapi.constants.RequestType.closeReader;
+                }
+                conditionHasPendingOpenReader() {
+                    return this.pendingRequest === timapi.constants.RequestType.openReader;
+                }
+                conditionHasPendingEjectCard() {
+                    return this.pendingRequest === timapi.constants.RequestType.ejectCard;
+                }
+                conditionHasPendingOpenMaintenanceWindow() {
+                    return (this.pendingRequest ===
+                        timapi.constants.RequestType.openMaintenanceWindow);
+                }
+                conditionHasPendingCloseMaintenanceWindow() {
+                    return (this.pendingRequest ===
+                        timapi.constants.RequestType.closeMaintenanceWindow);
+                }
+                conditionHasPendingActivateServiceMenu() {
+                    return (this.pendingRequest === timapi.constants.RequestType.activateServiceMenu);
+                }
+                conditionHasGuideAdvancedRetail() {
+                    return this.backend.$terminal.$settings.$guides.has(timapi.constants.Guides.advancedRetail);
+                }
+                conditionHasPendingBalanceInquiry() {
+                    return (this.pendingRequest === timapi.constants.RequestType.balanceInquiry);
+                }
+                conditionHasPendingQueryLoyalty() {
+                    return this.pendingRequest === timapi.constants.RequestType.queryLoyalty;
+                }
+                actionCloseReader() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCloseReader");
+                    let message = new timapi.protocol.sixml.Request_CloseReader();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCloseReader");
+                }
+                actionOpenReader() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionOpenReader");
+                    let message = new timapi.protocol.sixml.Request_OpenReader();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionOpenReader");
+                }
+                actionEjectCard() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionEjectCard");
+                    let message = new timapi.protocol.sixml.Request_EjectCard();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionEjectCard");
+                }
+                actionOpenMaintenanceWindow() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionOpenMaintenanceWindow");
+                    let message = new timapi.protocol.sixml.Request_OpenMaintenanceWindow();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionOpenMaintenanceWindow");
+                }
+                actionCloseMaintenanceWindow() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCloseMaintenanceWindow");
+                    let message = new timapi.protocol.sixml.Request_CloseMaintenanceWindow();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCloseMaintenanceWindow");
+                }
+                actionHoldCommit() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionHoldCommit");
+                    this.backend.sendMessage(new timapi.protocol.sixml.Notification_HoldCommit());
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionHoldCommit");
+                }
+                actionActivateServiceMenu() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionActivateServiceMenu");
+                    let message = new timapi.protocol.sixml.Request_ActivateServiceMenu();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionActivateServiceMenu");
+                }
+                actionProcessResponseCloseReader() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseCloseReader");
+                    this.backend.notifyCloseReaderCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseCloseReader");
+                }
+                actionProcessResponseOpenReader() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseOpenReader");
+                    this.backend.notifyOpenReaderCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseOpenReader");
+                }
+                actionProcessResponseEjectCard() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseEjectCard");
+                    this.backend.notifyEjectCardCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseEjectCard");
+                }
+                actionProcessResponseOpenMaintenanceWindow() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseOpenMaintenanceWindow");
+                    this.backend.notifyOpenMaintenanceWindowCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseOpenMaintenanceWindow");
+                }
+                actionProcessResponseCloseMaintenanceWindow() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseCloseMaintenanceWindow");
+                    this.backend.notifyCloseMaintenanceWindowCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseCloseMaintenanceWindow");
+                }
+                actionProcessResponseActivateServiceMenu() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseActivateServiceMenu");
+                    this.backend.notifyActivateServiceMenuCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseActivateServiceMenu");
+                }
+                actionSetPendingCloseReader() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingCloseReader");
+                    this.pendingRequest = timapi.constants.RequestType.closeReader;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingCloseReader");
+                }
+                actionSetPendingOpenReader() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingOpenReader");
+                    this.pendingRequest = timapi.constants.RequestType.openReader;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingOpenReader");
+                }
+                actionSetPendingEjectCard() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingEjectCard");
+                    this.pendingRequest = timapi.constants.RequestType.ejectCard;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingEjectCard");
+                }
+                actionSetPendingOpenMaintenanceWindow() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingOpenMaintenanceWindow");
+                    this.pendingRequest = timapi.constants.RequestType.openMaintenanceWindow;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingOpenMaintenanceWindow");
+                }
+                actionSetPendingCloseMaintenanceWindow() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingCloseMaintenanceWindow");
+                    this.pendingRequest = timapi.constants.RequestType.closeMaintenanceWindow;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingCloseMaintenanceWindow");
+                }
+                actionSetPendingActivateServiceMenu() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingActivateServiceMenu");
+                    this.pendingRequest = timapi.constants.RequestType.activateServiceMenu;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingActivateServiceMenu");
+                }
+                actionBalanceInquiry() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionBalanceInquiry");
+                    let message = new timapi.protocol.sixml.Request_BalanceInquiry();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionBalanceInquiry");
+                }
+                actionQueryLoyalty() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionQueryLoyalty");
+                    let message = this.requestQueryLoyalty;
+                    this.requestQueryLoyalty = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionQueryLoyalty");
+                }
+                actionProcessResponseBalanceInquiry() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseBalanceInquiry");
+                    let response = new timapi.protocol.sixml.Response_BalanceInquiry(this.lastReceivedMessage);
+                    this.backend.notifyBalanceInquiryCompleted(undefined, new timapi.BalanceInquiryResponse(sixml.ConvertSIXml2TimApi.convertAmount(response.amountSaldo), sixml.ConvertSIXml2TimApi.convertPrintDataOrNull(response.printData)));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseBalanceInquiry");
+                }
+                actionProcessResponseQueryLoyalty() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseQueryLoyalty");
+                    let response = new timapi.protocol.sixml.Response_QueryLoyalty(this.lastReceivedMessage);
+                    this.backend.notifyQueryLoyaltyCompleted(undefined, sixml.ConvertSIXml2TimApi.convertCardData(response.cardData));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseQueryLoyalty");
+                }
+                actionSetPendingBalanceInquiry() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingBalanceInquiry");
+                    this.pendingRequest = timapi.constants.RequestType.balanceInquiry;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingBalanceInquiry");
+                }
+                actionSetPendingQueryLoyalty() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingQueryLoyalty");
+                    this.pendingRequest = timapi.constants.RequestType.queryLoyalty;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingQueryLoyalty");
+                }
+                conditionHasGuideDialog() {
+                    return this.backend.$terminal.$settings.$guides.has(timapi.constants.Guides.DIALOG);
+                }
+                conditionHasPendingOpenDialogMode() {
+                    return (this.pendingRequest === timapi.constants.RequestType.openDialogMode);
+                }
+                conditionHasPendingCloseDialogMode() {
+                    return (this.pendingRequest === timapi.constants.RequestType.closeDialogMode);
+                }
+                conditionHasPendingShowSignatureCapture() {
+                    return (this.pendingRequest ===
+                        timapi.constants.RequestType.showSignatureCapture);
+                }
+                conditionHasPendingShowDialog() {
+                    return this.pendingRequest === timapi.constants.RequestType.showDialog;
+                }
+                conditionHasPendingSendCardCommand() {
+                    return false;
+                }
+                actionOpenDialogMode() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionOpenDialogMode");
+                    let message = new timapi.protocol.sixml.Request_OpenDialogMode();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionOpenDialogMode");
+                }
+                actionCloseDialogMode() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionCloseDialogMode");
+                    let message = new timapi.protocol.sixml.Request_CloseDialogMode();
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionCloseDialogMode");
+                }
+                actionShowSignatureCapture() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionShowSignatureCapture");
+                    let message = this.requestShowSignatureCapture;
+                    this.requestShowSignatureCapture = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionShowSignatureCapture");
+                }
+                actionShowDialog() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionShowDialog");
+                    let message = this.requestShowDialog;
+                    this.requestShowDialog = undefined;
+                    message.sequenceNumber = this.backend.consumeNextSequenceNumber();
+                    this.backend.sendMessage(message);
+                    this.armKeepAliveTimer();
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionShowDialog");
+                }
+                actionProcessResponseOpenDialogMode() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseOpenDialogMode");
+                    this.backend.notifyOpenDialogModeCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseOpenDialogMode");
+                }
+                actionProcessResponseCloseDialogMode() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseCloseDialogMode");
+                    this.backend.notifyCloseDialogModeCompleted(undefined);
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseCloseDialogMode");
+                }
+                actionProcessResponseShowSignatureCapture() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseShowSignatureCapture");
+                    let response = new timapi.protocol.sixml.Response_ShowSignatureCapture(this.lastReceivedMessage);
+                    let siginfo = response.signatureInformation;
+                    this.backend.notifyShowSignatureCaptureCompleted(undefined, new timapi.ShowSignatureCaptureResponse(timapi.protocol.constants.Reason.protocol2TimApi(siginfo.reason), timapi.protocol.constants.ImageFileFormat.protocol2TimApi(siginfo.imageFileFormat), siginfo.imageWidth, siginfo.imageHeight, siginfo.value));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseShowSignatureCapture");
+                }
+                actionProcessResponseShowDialog() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionProcessResponseShowDialog");
+                    let response = new timapi.protocol.sixml.Response_ShowDialog(this.lastReceivedMessage);
+                    let resinfo = response.resourceInformation;
+                    this.backend.notifyShowDialogCompleted(undefined, new timapi.ShowDialogResponse(timapi.protocol.constants.Reason.protocol2TimApi(resinfo.reason), resinfo.inputValue, sixml.ConvertSIXml2TimApi.convertCardDataOrNull(resinfo.cardData)));
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionProcessResponseShowDialog");
+                }
+                actionSetPendingOpenDialogMode() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingOpenDialogMode");
+                    this.pendingRequest = timapi.constants.RequestType.openDialogMode;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingOpenDialogMode");
+                }
+                actionSetPendingCloseDialogMode() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingCloseDialogMode");
+                    this.pendingRequest = timapi.constants.RequestType.closeDialogMode;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingCloseDialogMode");
+                }
+                actionSetPendingShowSignatureCapture() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingShowSignatureCapture");
+                    this.pendingRequest = timapi.constants.RequestType.showSignatureCapture;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingShowSignatureCapture");
+                }
+                actionSetPendingShowDialog() {
+                    StateMachine.logger.entering(StateMachine.CLASS_NAME, "actionSetPendingShowDialog");
+                    this.pendingRequest = timapi.constants.RequestType.showDialog;
+                    StateMachine.logger.exiting(StateMachine.CLASS_NAME, "actionSetPendingShowDialog");
+                }
+                cancelTaskTimeout() {
+                    if (this.taskTimeout !== undefined) {
+                        this.taskTimeout.cancel();
+                        this.taskTimeout = undefined;
+                    }
+                }
+                cancelTaskKeepAliveDisconnect() {
+                    if (this.taskKeepAliveDisconnect !== undefined) {
+                        this.taskKeepAliveDisconnect.cancel();
+                        this.taskKeepAliveDisconnect = undefined;
+                    }
+                }
+                cancelTaskKeepAliveCheck() {
+                    if (this.taskKeepAliveCheck !== undefined) {
+                        this.taskKeepAliveCheck.cancel();
+                        this.taskKeepAliveCheck = undefined;
+                    }
+                }
+                armKeepAliveTimeout() {
+                    if (this.backend.$terminal.$settings.$enableKeepAlive == true) {
+                        this.cancelTaskKeepAliveDisconnect();
+                        this.taskKeepAliveDisconnect = new sixml.TaskKeepAliveDisconnect(this, 22 * 1000);
+                    }
+                }
+                armKeepAliveTimer() {
+                    if (this.backend.$terminal.$settings.$enableKeepAlive == true) {
+                        this.cancelTaskKeepAliveCheck();
+                        this.taskKeepAliveCheck = new sixml.TaskKeepAliveCheck(this, 10 * 1000);
+                    }
+                }
+                get $pendingRequest() {
+                    return this.pendingRequest;
+                }
+            }
+            StateMachine.LOGGER_NAME = "StateMachineLogger";
+            StateMachine.CLASS_NAME = "StateMachine";
+            StateMachine.logger = timapi.logging.Logger.getLogger(StateMachine.LOGGER_NAME);
+            sixml.StateMachine = StateMachine;
+        })(sixml = statemachine.sixml || (statemachine.sixml = {}));
+    })(statemachine = timapi.statemachine || (timapi.statemachine = {}));
+})(timapi || (timapi = {}));
+timapi.statemachine.states.DefaultState = function (context) {
+    if (context == undefined) {
+        throw new Error("Invalid argument. context is undefined");
+    }
+    this.context = context;
+};
+timapi.statemachine.states.DefaultState.loggerName = "timapi.statemachine.states.DefaultState";
+timapi.statemachine.states.DefaultState.classname = "DefaultState";
+timapi.statemachine.states.DefaultState.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.DefaultState.loggerName);
+timapi.statemachine.states.DefaultState.prototype.enterState = function () {
+};
+timapi.statemachine.states.DefaultState.prototype.exitState = function () {
+};
+timapi.statemachine.states.DefaultState.prototype.activate = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.applicationInformation = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.balance = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.cancel = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.changeSettings = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.commit = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.connect = Object.illegalState;
+timapi.statemachine.states.DefaultState.prototype.counterRequest = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.deactivate = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.disconnect = function () {
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.dccRates = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.hardwareInformation = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.initTransaction = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.login = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.logout = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.reboot = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.reconciliation = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.receiptRequest = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.reconfig = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.rollback = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.softwareUpdate = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.systemInformation = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.transaction = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.connected = Object.illegalState;
+timapi.statemachine.states.DefaultState.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.disconnected = function () {
+    if (this.context.conditionIsEnabledAutoConnect()
+        && !this.context.conditionRunAwayProtection()) {
+        this.context.actionErrorConnectionLost();
+        this.context.actionConnect();
+        this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+        return;
+    }
+    this.context.actionErrorConnectionLost();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.responseRequest = function () {
+    this.context.actionDisconnect();
+    this.context.actionErrorInvalidResponse();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.responseError = function () {
+    this.context.actionDisconnect();
+    this.context.actionErrorInvalidResponse();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.responseInvalid = function () {
+    this.context.actionDisconnect();
+    this.context.actionErrorInvalidResponse();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.responseBusy = function () {
+    this.context.actionDisconnect();
+    this.context.actionErrorInvalidResponse();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.DefaultState.prototype.notificationStatusChanged = function () {
+    this.context.actionProcessNotificationStatusChanged();
+};
+timapi.statemachine.states.DefaultState.prototype.notificationLicenseChanged = function () {
+    this.context.actionProcessNotificationLicenseChanged();
+};
+timapi.statemachine.states.DefaultState.prototype.notificationKeepAlive = function () {
+};
+timapi.statemachine.states.DefaultState.prototype.timeout = Object.illegalState;
+timapi.statemachine.states.DefaultState.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.DefaultState.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.DefaultState.prototype.keepAliveTimer = function () {
+    this.context.actionSendKeepAliveNotification();
+};
+timapi.statemachine.states.DefaultState.prototype.trxStateBecameIdle = function () {
+};
+timapi.statemachine.states.DefaultState.prototype.closeReader = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.openReader = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.ejectCard = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.holdCommit = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.activateServiceMenu = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.amtAdjustment = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.balanceInquiry = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.openDialogMode = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.closeDialogMode = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.showSignatureCapture = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.showDialog = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.sendCardCommand = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.DefaultState.prototype.toString = function () {
+    return this.classname;
+};
+timapi.statemachine.states.DefaultState.prototype.context = undefined;
+timapi.statemachine.states.Activating = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.Activating.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.Activating.loggerName = "timapi.statemachine.states.Activating";
+timapi.statemachine.states.Activating.classname = "Activating";
+timapi.statemachine.states.Activating.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.Activating.loggerName);
+timapi.statemachine.states.Activating.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+};
+timapi.statemachine.states.Activating.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.Activating.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.Activating.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.connected = function () {
+};
+timapi.statemachine.states.Activating.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.Activating.prototype.responseRequest = function () {
+    this.context.actionProcessResponseActivate();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.Activating.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.Activating.prototype.responseBusy = function () {
+    if (!this.context.conditionHasPendingEvent()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionProcessResponseError();
+        this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.Activating.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.Activating.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.Activating.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.Activating.prototype.trxStateBecameIdle = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionActivate();
+        return;
+    }
+};
+timapi.statemachine.states.Activating.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Activating.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Connecting = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.Connecting.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.Connecting.loggerName = "timapi.statemachine.states.Connecting";
+timapi.statemachine.states.Connecting.classname = "Connecting";
+timapi.statemachine.states.Connecting.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.Connecting.loggerName);
+timapi.statemachine.states.Connecting.prototype.activate = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingActivate();
+};
+timapi.statemachine.states.Connecting.prototype.applicationInformation = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingApplicationInformation();
+};
+timapi.statemachine.states.Connecting.prototype.cancel = function () {
+    this.context.actionSetPendingCancel();
+};
+timapi.statemachine.states.Connecting.prototype.changeSettings = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingChangeSettings();
+};
+timapi.statemachine.states.Connecting.prototype.commit = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingCommit();
+};
+timapi.statemachine.states.Connecting.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Connecting.prototype.counterRequest = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingCounterRequest();
+};
+timapi.statemachine.states.Connecting.prototype.deactivate = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingDeactivate();
+};
+timapi.statemachine.states.Connecting.prototype.dccRates = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingDccRates();
+};
+timapi.statemachine.states.Connecting.prototype.hardwareInformation = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingHardwareInformation();
+};
+timapi.statemachine.states.Connecting.prototype.initTransaction = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingInitTransaction();
+};
+timapi.statemachine.states.Connecting.prototype.login = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingLogin();
+};
+timapi.statemachine.states.Connecting.prototype.logout = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingLogout();
+};
+timapi.statemachine.states.Connecting.prototype.reboot = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingReboot();
+};
+timapi.statemachine.states.Connecting.prototype.reconciliation = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingReconciliation();
+};
+timapi.statemachine.states.Connecting.prototype.receiptRequest = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingReceiptRequest();
+};
+timapi.statemachine.states.Connecting.prototype.reconfig = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingReconfig();
+};
+timapi.statemachine.states.Connecting.prototype.softwareUpdate = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingSoftwareUpdate();
+};
+timapi.statemachine.states.Connecting.prototype.systemInformation = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingSystemInformation();
+};
+timapi.statemachine.states.Connecting.prototype.transaction = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingTransaction();
+};
+timapi.statemachine.states.Connecting.prototype.connected = function () {
+    if (this.context.conditionIsEnabledAutoLogin()) {
+        this.context.actionSetDefaultLoginRequest();
+        this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+        return;
+    }
+    this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+};
+timapi.statemachine.states.Connecting.prototype.connectFailed = function () {
+    if (this.context.conditionIsEnabledAutoConnect()
+        && !this.context.conditionRunAwayProtection()) {
+        this.context.actionRunAwayProtection();
+        this.context.actionClearPendingEvent();
+        this.context.actionConnect();
+        this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+        return;
+    }
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.Connecting.prototype.notificationKeepAlive = function () {
+};
+timapi.statemachine.states.Connecting.prototype.keepAliveTimeout = function () {
+};
+timapi.statemachine.states.Connecting.prototype.keepAliveTimer = function () {
+};
+timapi.statemachine.states.Connecting.prototype.closeReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingCloseReader();
+};
+timapi.statemachine.states.Connecting.prototype.openReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingOpenReader();
+};
+timapi.statemachine.states.Connecting.prototype.ejectCard = function () {
+    if (!this.context.conditionHasGuideUnattended()
+        && !this.context.conditionHasGuideAdvancedRetail()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingEjectCard();
+};
+timapi.statemachine.states.Connecting.prototype.openMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingOpenMaintenanceWindow();
+};
+timapi.statemachine.states.Connecting.prototype.closeMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingCloseMaintenanceWindow();
+};
+timapi.statemachine.states.Connecting.prototype.activateServiceMenu = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingActivateServiceMenu();
+};
+timapi.statemachine.states.Connecting.prototype.balanceInquiry = function () {
+    if (!this.context.conditionHasGuideAdvancedRetail()
+        && !this.context.conditionHasGuideBanking()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingBalanceInquiry();
+};
+timapi.statemachine.states.Connecting.prototype.openDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingOpenDialogMode();
+};
+timapi.statemachine.states.Connecting.prototype.closeDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingCloseDialogMode();
+};
+timapi.statemachine.states.Connecting.prototype.showSignatureCapture = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingShowSignatureCapture();
+};
+timapi.statemachine.states.Connecting.prototype.showDialog = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingShowDialog();
+};
+timapi.statemachine.states.Connecting.prototype.sendCardCommand = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionErrorRequestInProgress();
+        return;
+    }
+    this.context.actionSetPendingSendCardCommand();
+};
+timapi.statemachine.states.Deactivating = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.Deactivating.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.Deactivating.loggerName = "timapi.statemachine.states.Deactivating";
+timapi.statemachine.states.Deactivating.classname = "Deactivating";
+timapi.statemachine.states.Deactivating.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.Deactivating.loggerName);
+timapi.statemachine.states.Deactivating.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+};
+timapi.statemachine.states.Deactivating.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.Deactivating.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.Deactivating.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.connected = function () {
+};
+timapi.statemachine.states.Deactivating.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.Deactivating.prototype.responseRequest = function () {
+    if (this.context.conditionIsEnabledAutoLogout()
+        && !this.context.conditionHasPendingEvent()) {
+        this.context.actionProcessResponseDeactivate();
+        this.context.actionLogout();
+        this.context.setState(new timapi.statemachine.states.LoggingOut(this.context));
+        return;
+    }
+    this.context.actionProcessResponseDeactivate();
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.Deactivating.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.Deactivating.prototype.responseBusy = function () {
+    if (!this.context.conditionHasPendingEvent()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionProcessResponseError();
+        this.context.setState(new timapi.statemachine.states.Open(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.Deactivating.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.Deactivating.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.Deactivating.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.Deactivating.prototype.trxStateBecameIdle = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionDeactivate();
+        return;
+    }
+};
+timapi.statemachine.states.Deactivating.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Deactivating.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.DialogMode = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.DialogMode.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.DialogMode.loggerName = "timapi.statemachine.states.DialogMode";
+timapi.statemachine.states.DialogMode.classname = "DialogMode";
+timapi.statemachine.states.DialogMode.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.DialogMode.loggerName);
+timapi.statemachine.states.DialogMode.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionCancelTimeout();
+    if (this.context.conditionHasPendingOpenDialogMode()) {
+        this.context.actionClearPendingEvent();
+    }
+    if (this.context.conditionHasPendingCloseDialogMode()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionCloseDialogMode();
+        this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingShowSignatureCapture()) {
+        this.context.actionShowSignatureCapture();
+        this.context.setState(new timapi.statemachine.states.WaitShowSignatureCapture(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingShowDialog()) {
+        this.context.actionShowDialog();
+        this.context.setState(new timapi.statemachine.states.WaitShowDialog(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingSendCardCommand()) {
+        this.context.actionSendCardCommand();
+        this.context.setState(new timapi.statemachine.states.WaitSendCardCommand(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.DialogMode.prototype.applicationInformation = function () {
+    this.context.actionSetPendingApplicationInformation();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.balance = function () {
+    this.context.actionSetPendingBalance();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.DialogMode.prototype.changeSettings = function () {
+    this.context.actionSetPendingChangeSettings();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.counterRequest = function () {
+    this.context.actionSetPendingCounterRequest();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.deactivate = function () {
+    this.context.actionSetPendingDeactivate();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.dccRates = function () {
+    this.context.actionSetPendingDccRates();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.hardwareInformation = function () {
+    this.context.actionSetPendingHardwareInformation();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.initTransaction = function () {
+    this.context.actionSetPendingInitTransaction();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.login = function () {
+    this.context.actionSetPendingLogin();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.logout = function () {
+    this.context.actionSetPendingLogout();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.reboot = function () {
+    this.context.actionSetPendingReboot();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.receiptRequest = function () {
+    this.context.actionSetPendingReceiptRequest();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.reconfig = function () {
+    this.context.actionSetPendingReconfig();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.softwareUpdate = function () {
+    this.context.actionSetPendingSoftwareUpdate();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.systemInformation = function () {
+    this.context.actionSetPendingSystemInformation();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.transaction = function () {
+    this.context.actionSetPendingTransaction();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.closeReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseReader();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.openReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenReader();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.ejectCard = function () {
+    if (!this.context.conditionHasGuideUnattended()
+        && !this.context.conditionHasGuideAdvancedRetail()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingEjectCard();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.openMaintenanceWindow = function () {
+    this.context.actionSetPendingOpenMaintenanceWindow();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.closeMaintenanceWindow = function () {
+    this.context.actionSetPendingCloseMaintenanceWindow();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.activateServiceMenu = function () {
+    this.context.actionSetPendingActivateServiceMenu();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.balanceInquiry = function () {
+    if (!this.context.conditionHasGuideAdvancedRetail()
+        && !this.context.conditionHasGuideBanking()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingBalanceInquiry();
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.closeDialogMode = function () {
+    this.context.actionCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitCloseDialogMode(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.showSignatureCapture = function () {
+    this.context.actionShowSignatureCapture();
+    this.context.setState(new timapi.statemachine.states.WaitShowSignatureCapture(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.showDialog = function () {
+    this.context.actionShowDialog();
+    this.context.setState(new timapi.statemachine.states.WaitShowDialog(this.context));
+};
+timapi.statemachine.states.DialogMode.prototype.sendCardCommand = function () {
+    this.context.actionSendCardCommand();
+    this.context.setState(new timapi.statemachine.states.WaitSendCardCommand(this.context));
+};
+timapi.statemachine.states.Disconnected = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.Disconnected.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.Disconnected.loggerName = "timapi.statemachine.states.Disconnected";
+timapi.statemachine.states.Disconnected.classname = "Disconnected";
+timapi.statemachine.states.Disconnected.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.Disconnected.loggerName);
+timapi.statemachine.states.Disconnected.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionCancelTimeout();
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionConnect();
+        this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.Disconnected.prototype.activate = function () {
+    this.context.actionSetPendingActivate();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.applicationInformation = function () {
+    this.context.actionSetPendingApplicationInformation();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.balance = function () {
+    this.context.actionSetPendingBalance();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.cancel = function () {
+    this.context.actionSetPendingCancel();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.changeSettings = function () {
+    this.context.actionSetPendingChangeSettings();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.commit = function () {
+    this.context.actionSetPendingCommit();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.connect = function () {
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.counterRequest = function () {
+    this.context.actionSetPendingCounterRequest();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.deactivate = function () {
+    this.context.actionSetPendingDeactivate();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.disconnect = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.Disconnected.prototype.dccRates = function () {
+    this.context.actionSetPendingDccRates();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.hardwareInformation = function () {
+    this.context.actionSetPendingHardwareInformation();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.initTransaction = function () {
+    this.context.actionSetPendingInitTransaction();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.login = function () {
+    this.context.actionSetPendingLogin();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.logout = function () {
+    this.context.actionSetPendingLogout();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.reboot = function () {
+    this.context.actionSetPendingReboot();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.reconciliation = function () {
+    this.context.actionSetPendingReconciliation();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.receiptRequest = function () {
+    this.context.actionSetPendingReceiptRequest();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.reconfig = function () {
+    this.context.actionSetPendingReconfig();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.softwareUpdate = function () {
+    this.context.actionSetPendingSoftwareUpdate();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.systemInformation = function () {
+    this.context.actionSetPendingSystemInformation();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.transaction = function () {
+    this.context.actionSetPendingTransaction();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.connected = function () {
+    this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.connectFailed = function () {
+    if (this.context.conditionIsEnabledAutoConnect()
+        && !this.context.conditionRunAwayProtection()) {
+        this.context.actionRunAwayProtection();
+        this.context.actionConnect();
+        this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.Disconnected.prototype.disconnected = function () {
+};
+timapi.statemachine.states.Disconnected.prototype.notificationKeepAlive = function () {
+};
+timapi.statemachine.states.Disconnected.prototype.keepAliveTimeout = function () {
+};
+timapi.statemachine.states.Disconnected.prototype.keepAliveTimer = function () {
+};
+timapi.statemachine.states.Disconnected.prototype.closeReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseReader();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.openReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenReader();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.ejectCard = function () {
+    if (!this.context.conditionHasGuideUnattended()
+        && !this.context.conditionHasGuideAdvancedRetail()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingEjectCard();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.openMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenMaintenanceWindow();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.closeMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseMaintenanceWindow();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.activateServiceMenu = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingActivateServiceMenu();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.balanceInquiry = function () {
+    if (!this.context.conditionHasGuideAdvancedRetail()
+        && !this.context.conditionHasGuideBanking()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingBalanceInquiry();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.openDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenDialogMode();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.closeDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseDialogMode();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.showSignatureCapture = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowSignatureCapture();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.showDialog = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowDialog();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Disconnected.prototype.sendCardCommand = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingSendCardCommand();
+    this.context.actionConnect();
+    this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+};
+timapi.statemachine.states.Initial = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.Initial.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.Initial.loggerName = "timapi.statemachine.states.Initial";
+timapi.statemachine.states.Initial.classname = "Initial";
+timapi.statemachine.states.Initial.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.Initial.loggerName);
+timapi.statemachine.states.Initial.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionIsEnabledAutoConnect()) {
+        this.context.actionConnect();
+        this.context.setState(new timapi.statemachine.states.Connecting(this.context));
+        return;
+    }
+    if (!this.context.conditionIsEnabledAutoConnect()) {
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.LoggedIn = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggedIn.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggedIn.loggerName = "timapi.statemachine.states.LoggedIn";
+timapi.statemachine.states.LoggedIn.classname = "LoggedIn";
+timapi.statemachine.states.LoggedIn.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggedIn.loggerName);
+timapi.statemachine.states.LoggedIn.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionCancelTimeout();
+    if (this.context.conditionHasPendingLogin()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionLogin();
+        this.context.setState(new timapi.statemachine.states.LoggingIn(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingDeactivate()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionDeactivate();
+        this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingApplicationInformation()) {
+        this.context.actionApplicationInformation();
+        this.context.setState(new timapi.statemachine.states.WaitApplicationInformation(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingBalance()) {
+        this.context.actionBalance();
+        this.context.setState(new timapi.statemachine.states.WaitBalance(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingCancel()) {
+        this.context.actionClearPendingCancel();
+        this.context.actionCancel();
+    }
+    if (this.context.conditionHasPendingChangeSettings()) {
+        this.context.actionChangeSettings();
+        this.context.setState(new timapi.statemachine.states.WaitChangeSettings(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingDccRates()) {
+        this.context.actionDccRates();
+        this.context.setState(new timapi.statemachine.states.WaitDccRates(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingHardwareInformation()) {
+        this.context.actionHardwareInformation();
+        this.context.setState(new timapi.statemachine.states.WaitHardwareInformation(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingLogout()) {
+        this.context.actionLogout();
+        this.context.setState(new timapi.statemachine.states.LoggingOut(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingReboot()) {
+        this.context.actionReboot();
+        this.context.setState(new timapi.statemachine.states.WaitReboot(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingReconfig()) {
+        this.context.actionReconfig();
+        this.context.setState(new timapi.statemachine.states.WaitReconfig(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingReconciliation()) {
+        this.context.actionReconciliation();
+        this.context.setState(new timapi.statemachine.states.WaitReconciliation(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingReceiptRequest()) {
+        this.context.actionReceiptRequest();
+        this.context.setState(new timapi.statemachine.states.WaitReceiptRequestClosed(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingSoftwareUpdate()) {
+        this.context.actionSoftwareUpdate();
+        this.context.setState(new timapi.statemachine.states.WaitSoftwareUpdate(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingSystemInformation()) {
+        this.context.actionSystemInformation();
+        this.context.setState(new timapi.statemachine.states.WaitSystemInformation(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingOpenMaintenanceWindow()) {
+        this.context.actionOpenMaintenanceWindow();
+        this.context.setState(new timapi.statemachine.states.WaitOpenMaintenanceWindow(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingCloseMaintenanceWindow()) {
+        this.context.actionCloseMaintenanceWindow();
+        this.context.setState(new timapi.statemachine.states.WaitCloseMaintenanceWindow(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingActivateServiceMenu()) {
+        this.context.actionActivateServiceMenu();
+        this.context.setState(new timapi.statemachine.states.WaitActivateServiceMenu(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingActivate()
+        || this.context.conditionHasPendingCommit()
+        || this.context.conditionHasPendingCounterRequest()
+        || this.context.conditionHasPendingInitTransaction()
+        || this.context.conditionHasPendingTransaction()
+        || this.context.conditionHasPendingCloseReader()
+        || this.context.conditionHasPendingOpenReader()
+        || this.context.conditionHasPendingEjectCard()
+        || this.context.conditionHasPendingBalanceInquiry()
+        || this.context.conditionHasPendingOpenDialogMode()
+        || this.context.conditionHasPendingCloseDialogMode()
+        || this.context.conditionHasPendingShowSignatureCapture()
+        || this.context.conditionHasPendingShowDialog()
+        || this.context.conditionHasPendingSendCardCommand()) {
+        this.context.actionActivate();
+        this.context.setState(new timapi.statemachine.states.Activating(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.LoggedIn.prototype.activate = function () {
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.applicationInformation = function () {
+    this.context.actionApplicationInformation();
+    this.context.setState(new timapi.statemachine.states.WaitApplicationInformation(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.balance = function () {
+    this.context.actionBalance();
+    this.context.setState(new timapi.statemachine.states.WaitBalance(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.LoggedIn.prototype.changeSettings = function () {
+    this.context.actionChangeSettings();
+    this.context.setState(new timapi.statemachine.states.WaitChangeSettings(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.commit = function () {
+    this.context.actionSetPendingCommit();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.counterRequest = function () {
+    this.context.actionSetPendingCounterRequest();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.deactivate = function () {
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.dccRates = function () {
+    this.context.actionDccRates();
+    this.context.setState(new timapi.statemachine.states.WaitDccRates(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.hardwareInformation = function () {
+    this.context.actionHardwareInformation();
+    this.context.setState(new timapi.statemachine.states.WaitHardwareInformation(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.initTransaction = function () {
+    this.context.actionSetPendingInitTransaction();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.login = function () {
+    this.context.actionLogin();
+    this.context.setState(new timapi.statemachine.states.LoggingIn(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.logout = function () {
+    this.context.actionLogout();
+    this.context.setState(new timapi.statemachine.states.LoggingOut(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.reboot = function () {
+    this.context.actionReboot();
+    this.context.setState(new timapi.statemachine.states.WaitReboot(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.reconciliation = function () {
+    this.context.actionReconciliation();
+    this.context.setState(new timapi.statemachine.states.WaitReconciliation(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.receiptRequest = function () {
+    this.context.actionReceiptRequest();
+    this.context.setState(new timapi.statemachine.states.WaitReceiptRequestClosed(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.reconfig = function () {
+    this.context.actionReconfig();
+    this.context.setState(new timapi.statemachine.states.WaitReconfig(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.softwareUpdate = function () {
+    this.context.actionSoftwareUpdate();
+    this.context.setState(new timapi.statemachine.states.WaitSoftwareUpdate(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.systemInformation = function () {
+    this.context.actionSystemInformation();
+    this.context.setState(new timapi.statemachine.states.WaitSystemInformation(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.transaction = function () {
+    this.context.actionSetPendingTransaction();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.closeReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseReader();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.openReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenReader();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.ejectCard = function () {
+    if (!this.context.conditionHasGuideUnattended()
+        && !this.context.conditionHasGuideAdvancedRetail()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingEjectCard();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.openMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionOpenMaintenanceWindow();
+    this.context.setState(new timapi.statemachine.states.WaitOpenMaintenanceWindow(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.closeMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionCloseMaintenanceWindow();
+    this.context.setState(new timapi.statemachine.states.WaitCloseMaintenanceWindow(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.activateServiceMenu = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionActivateServiceMenu();
+    this.context.setState(new timapi.statemachine.states.WaitActivateServiceMenu(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.balanceInquiry = function () {
+    if (!this.context.conditionHasGuideAdvancedRetail()
+        && !this.context.conditionHasGuideBanking()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingBalanceInquiry();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.openDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenDialogMode();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.closeDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseDialogMode();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.showSignatureCapture = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowSignatureCapture();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.showDialog = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowDialog();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedIn.prototype.sendCardCommand = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingSendCardCommand();
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.LoggedOut = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggedOut.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggedOut.loggerName = "timapi.statemachine.states.LoggedOut";
+timapi.statemachine.states.LoggedOut.classname = "LoggedOut";
+timapi.statemachine.states.LoggedOut.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggedOut.loggerName);
+timapi.statemachine.states.LoggedOut.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionCancelTimeout();
+    if (this.context.conditionHasPendingLogout()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionSimulateLogoutCompleted();
+    }
+    if (this.context.conditionHasPendingCancel()) {
+        this.context.actionClearPendingCancel();
+        this.context.actionCancel();
+    }
+    if (this.context.conditionHasPendingActivate()
+        || this.context.conditionHasPendingApplicationInformation()
+        || this.context.conditionHasPendingBalance()
+        || this.context.conditionHasPendingChangeSettings()
+        || this.context.conditionHasPendingCommit()
+        || this.context.conditionHasPendingCounterRequest()
+        || this.context.conditionHasPendingDccRates()
+        || this.context.conditionHasPendingDeactivate()
+        || this.context.conditionHasPendingHardwareInformation()
+        || this.context.conditionHasPendingInitTransaction()
+        || this.context.conditionHasPendingLogin()
+        || this.context.conditionHasPendingReboot()
+        || this.context.conditionHasPendingReconfig()
+        || this.context.conditionHasPendingReceiptRequest()
+        || this.context.conditionHasPendingReconciliation()
+        || this.context.conditionHasPendingSoftwareUpdate()
+        || this.context.conditionHasPendingSystemInformation()
+        || this.context.conditionHasPendingTransaction()
+        || this.context.conditionHasPendingCloseReader()
+        || this.context.conditionHasPendingOpenReader()
+        || this.context.conditionHasPendingEjectCard()
+        || this.context.conditionHasPendingOpenMaintenanceWindow()
+        || this.context.conditionHasPendingCloseMaintenanceWindow()
+        || this.context.conditionHasPendingActivateServiceMenu()
+        || this.context.conditionHasPendingBalanceInquiry()
+        || this.context.conditionHasPendingOpenDialogMode()
+        || this.context.conditionHasPendingCloseDialogMode()
+        || this.context.conditionHasPendingShowSignatureCapture()
+        || this.context.conditionHasPendingShowDialog()
+        || this.context.conditionHasPendingSendCardCommand()) {
+        this.context.actionSetDefaultLoginRequest();
+        this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.LoggedOut.prototype.activate = function () {
+    this.context.actionSetPendingActivate();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.applicationInformation = function () {
+    this.context.actionSetPendingApplicationInformation();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.balance = function () {
+    this.context.actionSetPendingBalance();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.LoggedOut.prototype.changeSettings = function () {
+    this.context.actionSetPendingChangeSettings();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.commit = function () {
+    this.context.actionSetPendingCommit();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.connect = function () {
+    this.context.actionErrorWrongState();
+};
+timapi.statemachine.states.LoggedOut.prototype.counterRequest = function () {
+    this.context.actionSetPendingCounterRequest();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.deactivate = function () {
+    this.context.actionSetPendingDeactivate();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.dccRates = function () {
+    this.context.actionSetPendingDccRates();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.hardwareInformation = function () {
+    this.context.actionSetPendingHardwareInformation();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.initTransaction = function () {
+    this.context.actionSetPendingInitTransaction();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.login = function () {
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.logout = function () {
+    this.context.actionSimulateLogoutCompleted();
+};
+timapi.statemachine.states.LoggedOut.prototype.reboot = function () {
+    this.context.actionSetPendingReboot();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.reconciliation = function () {
+    this.context.actionSetPendingReconciliation();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.receiptRequest = function () {
+    this.context.actionSetPendingReceiptRequest();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.reconfig = function () {
+    this.context.actionSetPendingReconfig();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.softwareUpdate = function () {
+    this.context.actionSetPendingSoftwareUpdate();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.systemInformation = function () {
+    this.context.actionSetPendingSystemInformation();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.transaction = function () {
+    this.context.actionSetPendingTransaction();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.notificationKeepAlive = function () {
+};
+timapi.statemachine.states.LoggedOut.prototype.keepAliveTimeout = function () {
+};
+timapi.statemachine.states.LoggedOut.prototype.keepAliveTimer = function () {
+};
+timapi.statemachine.states.LoggedOut.prototype.closeReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseReader();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.openReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenReader();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.ejectCard = function () {
+    if (!this.context.conditionHasGuideUnattended()
+        && !this.context.conditionHasGuideAdvancedRetail()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingEjectCard();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.openMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenMaintenanceWindow();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.closeMaintenanceWindow = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseMaintenanceWindow();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.activateServiceMenu = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingActivateServiceMenu();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.balanceInquiry = function () {
+    if (!this.context.conditionHasGuideAdvancedRetail()
+        && !this.context.conditionHasGuideBanking()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingBalanceInquiry();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.openDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingOpenDialogMode();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.closeDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingCloseDialogMode();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.showSignatureCapture = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowSignatureCapture();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.showDialog = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowDialog();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggedOut.prototype.sendCardCommand = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingSendCardCommand();
+    this.context.actionSetDefaultLoginRequest();
+    this.context.setState(new timapi.statemachine.states.LoginRequest(this.context));
+};
+timapi.statemachine.states.LoggingIn = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggingIn.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggingIn.loggerName = "timapi.statemachine.states.LoggingIn";
+timapi.statemachine.states.LoggingIn.classname = "LoggingIn";
+timapi.statemachine.states.LoggingIn.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggingIn.loggerName);
+timapi.statemachine.states.LoggingIn.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionHasPendingLogin()) {
+        this.context.actionClearPendingEvent();
+    }
+    this.context.actionArmTimeoutRequest();
+};
+timapi.statemachine.states.LoggingIn.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.LoggingIn.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.LoggingIn.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.connected = function () {
+};
+timapi.statemachine.states.LoggingIn.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoggingIn.prototype.responseRequest = function () {
+    try {
+        if (this.context.conditionIsEnabledFetchBrands()
+            && !this.context.conditionIsApplicationInformationNotSupported()) {
+            try {
+                this.context.actionProcessResponseLogin();
+                this.context.actionApplicationInformation();
+            }
+            catch (e) {
+                timapi.statemachine.states.LoggingIn.logger.log(timapi.logging.Level.severe, "Exception", e);
+                this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+                return;
+            }
+            this.context.setState(new timapi.statemachine.states.LoggingInBrands(this.context));
+            return;
+        }
+        if (this.context.conditionIsEnabledAutoActivate()
+            && !this.context.conditionHasPendingEvent()) {
+            try {
+                this.context.actionProcessResponseLogin();
+                this.context.actionNotifyLoginCompleted();
+                this.context.actionActivate();
+            }
+            catch (e) {
+                timapi.statemachine.states.LoggingIn.logger.log(timapi.logging.Level.severe, "Exception", e);
+                this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+                return;
+            }
+            this.context.setState(new timapi.statemachine.states.Activating(this.context));
+            return;
+        }
+        this.context.actionProcessResponseLogin();
+        this.context.actionNotifyLoginCompleted();
+        this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.LoggingIn.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+    }
+};
+timapi.statemachine.states.LoggingIn.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+};
+timapi.statemachine.states.LoggingIn.prototype.responseBusy = function () {
+    if (!this.context.conditionHasPendingEvent()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionProcessResponseError();
+        this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.LoggingIn.prototype.notificationKeepAlive = function () {
+};
+timapi.statemachine.states.LoggingIn.prototype.timeout = function () {
+    this.context.actionErrorConnectionLost();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.LoggingIn.prototype.keepAliveTimeout = function () {
+};
+timapi.statemachine.states.LoggingIn.prototype.keepAliveTimer = function () {
+};
+timapi.statemachine.states.LoggingIn.prototype.trxStateBecameIdle = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionLogin();
+        this.context.actionArmTimeoutRequest();
+        return;
+    }
+};
+timapi.statemachine.states.LoggingIn.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingIn.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggingInBrands.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggingInBrands.loggerName = "timapi.statemachine.states.LoggingInBrands";
+timapi.statemachine.states.LoggingInBrands.classname = "LoggingInBrands";
+timapi.statemachine.states.LoggingInBrands.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggingInBrands.loggerName);
+timapi.statemachine.states.LoggingInBrands.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+};
+timapi.statemachine.states.LoggingInBrands.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.LoggingInBrands.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.connected = function () {
+};
+timapi.statemachine.states.LoggingInBrands.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoggingInBrands.prototype.responseRequest = function () {
+    try {
+        if (this.context.conditionIsEnabledAutoActivate()
+            && !this.context.conditionHasPendingEvent()) {
+            try {
+                this.context.actionProcessResponseApplicationInformation();
+                this.context.actionActivate();
+            }
+            catch (e) {
+                timapi.statemachine.states.LoggingInBrands.logger.log(timapi.logging.Level.severe, "Exception", e);
+                this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+                return;
+            }
+            this.context.setState(new timapi.statemachine.states.Activating(this.context));
+            return;
+        }
+        this.context.actionProcessResponseApplicationInformation();
+        this.context.actionNotifyLoginCompleted();
+        this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.LoggingInBrands.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+    }
+};
+timapi.statemachine.states.LoggingInBrands.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+};
+timapi.statemachine.states.LoggingInBrands.prototype.responseBusy = function () {
+    if (!this.context.conditionHasPendingEvent()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionProcessResponseError();
+        this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.LoggingInBrands.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.LoggingInFailedLogout(this.context));
+};
+timapi.statemachine.states.LoggingInBrands.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.LoggingInBrands.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.LoggingInBrands.prototype.trxStateBecameIdle = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionApplicationInformation();
+        return;
+    }
+};
+timapi.statemachine.states.LoggingInBrands.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInBrands.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingInFailed = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggingInFailed.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggingInFailed.loggerName = "timapi.statemachine.states.LoggingInFailed";
+timapi.statemachine.states.LoggingInFailed.classname = "LoggingInFailed";
+timapi.statemachine.states.LoggingInFailed.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggingInFailed.loggerName);
+timapi.statemachine.states.LoggingInFailed.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionIsEnabledAutoDisconnect()) {
+        try {
+            this.context.actionClearPendingEvent();
+            this.context.actionDisconnect();
+        }
+        catch (e) {
+            timapi.statemachine.states.LoggingInFailed.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+    try {
+        this.context.actionClearPendingEvent();
+    }
+    catch (e) {
+        timapi.statemachine.states.LoggingInFailed.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+        return;
+    }
+    this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+    return;
+};
+timapi.statemachine.states.LoggingInFailedLogout = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggingInFailedLogout.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggingInFailedLogout.loggerName = "timapi.statemachine.states.LoggingInFailedLogout";
+timapi.statemachine.states.LoggingInFailedLogout.classname = "LoggingInFailedLogout";
+timapi.statemachine.states.LoggingInFailedLogout.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggingInFailedLogout.loggerName);
+timapi.statemachine.states.LoggingInFailedLogout.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+    this.context.actionLogout();
+};
+timapi.statemachine.states.LoggingInFailedLogout.prototype.responseRequest = function () {
+    if (this.context.conditionIsEnabledAutoDisconnect()) {
+        this.context.actionProcessResponseLogout();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+    this.context.actionProcessResponseLogout();
+    this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+};
+timapi.statemachine.states.LoggingInFailedLogout.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoggingInFailedLogout.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoggingInFailedLogout.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoggingOut = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoggingOut.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoggingOut.loggerName = "timapi.statemachine.states.LoggingOut";
+timapi.statemachine.states.LoggingOut.classname = "LoggingOut";
+timapi.statemachine.states.LoggingOut.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoggingOut.loggerName);
+timapi.statemachine.states.LoggingOut.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionHasPendingLogout()) {
+        this.context.actionClearPendingEvent();
+    }
+};
+timapi.statemachine.states.LoggingOut.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.LoggingOut.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.LoggingOut.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.connected = function () {
+};
+timapi.statemachine.states.LoggingOut.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoggingOut.prototype.responseRequest = function () {
+    if (this.context.conditionIsEnabledAutoDisconnect()) {
+        try {
+            this.context.actionProcessResponseLogout();
+            this.context.actionDisconnect();
+        }
+        catch (e) {
+            timapi.statemachine.states.LoggingOut.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+    this.context.actionProcessResponseLogout();
+    this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+};
+timapi.statemachine.states.LoggingOut.prototype.responseError = function () {
+    if (this.context.conditionIsEnabledAutoDisconnect()) {
+        try {
+            this.context.actionClearPendingEvent();
+            this.context.actionProcessResponseError();
+            this.context.actionDisconnect();
+        }
+        catch (e) {
+            timapi.statemachine.states.LoggingOut.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.LoggingOut.prototype.responseBusy = function () {
+    if (this.context.conditionIsEnabledAutoDisconnect()) {
+        try {
+            this.context.actionClearPendingEvent();
+            this.context.actionProcessResponseError();
+            this.context.actionDisconnect();
+        }
+        catch (e) {
+            timapi.statemachine.states.LoggingOut.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.LoggingOut.prototype.timeout = function () {
+    if (this.context.conditionIsEnabledAutoDisconnect()) {
+        try {
+            this.context.actionErrorTimeout();
+            this.context.actionDisconnect();
+        }
+        catch (e) {
+            timapi.statemachine.states.LoggingOut.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.LoggedOut(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+        return;
+    }
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.LoggingOut.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.LoggingOut.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.LoggingOut.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoggingOut.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequest = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoginRequest.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoginRequest.loggerName = "timapi.statemachine.states.LoginRequest";
+timapi.statemachine.states.LoginRequest.classname = "LoginRequest";
+timapi.statemachine.states.LoginRequest.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoginRequest.loggerName);
+timapi.statemachine.states.LoginRequest.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionHasTerminalFeatures()) {
+        try {
+            this.context.actionLogin();
+        }
+        catch (e) {
+            timapi.statemachine.states.LoginRequest.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.LoggingIn(this.context));
+        return;
+    }
+    try {
+        this.context.actionRequestFeatures();
+    }
+    catch (e) {
+        timapi.statemachine.states.LoginRequest.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+        return;
+    }
+    this.context.setState(new timapi.statemachine.states.LoginRequestFeatures(this.context));
+    return;
+};
+timapi.statemachine.states.LoginRequestFeatures = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.LoginRequestFeatures.loggerName = "timapi.statemachine.states.LoginRequestFeatures";
+timapi.statemachine.states.LoginRequestFeatures.classname = "LoginRequestFeatures";
+timapi.statemachine.states.LoginRequestFeatures.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.LoginRequestFeatures.loggerName);
+timapi.statemachine.states.LoginRequestFeatures.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionArmTimeoutRequest();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.connected = function () {
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.responseRequest = function () {
+    try {
+        this.context.actionProcessResponseFeatureRequest();
+        this.context.actionLogin();
+        this.context.setState(new timapi.statemachine.states.LoggingIn(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.LoginRequestFeatures.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+    }
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.responseBusy = function () {
+    if (!this.context.conditionHasPendingEvent()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionProcessResponseError();
+        this.context.setState(new timapi.statemachine.states.LoggingInFailed(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.notificationKeepAlive = function () {
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.timeout = function () {
+    this.context.actionErrorConnectionLost();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.keepAliveTimeout = function () {
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.keepAliveTimer = function () {
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.trxStateBecameIdle = function () {
+    if (this.context.conditionHasPendingEvent()) {
+        this.context.actionRequestFeatures();
+        this.context.actionArmTimeoutRequest();
+        return;
+    }
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.LoginRequestFeatures.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.Open = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.Open.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.Open.loggerName = "timapi.statemachine.states.Open";
+timapi.statemachine.states.Open.classname = "Open";
+timapi.statemachine.states.Open.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.Open.loggerName);
+timapi.statemachine.states.Open.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionCancelTimeout();
+    if (this.context.conditionHasPendingActivate()) {
+        this.context.actionClearPendingEvent();
+    }
+    if (this.context.conditionHasPendingCancel()) {
+        this.context.actionClearPendingCancel();
+        this.context.actionCancel();
+    }
+    if (this.context.conditionHasPendingCommit()) {
+        this.context.actionCommit();
+        this.context.setState(new timapi.statemachine.states.WaitCommit(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingCounterRequest()) {
+        this.context.actionCounterRequest();
+        this.context.setState(new timapi.statemachine.states.WaitCounterRequest(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingInitTransaction()) {
+        this.context.actionInitTransaction();
+        this.context.setState(new timapi.statemachine.states.WaitInitTransaction(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingReceiptRequest()) {
+        this.context.actionReceiptRequest();
+        this.context.setState(new timapi.statemachine.states.WaitReceiptRequestOpen(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingTransaction()) {
+        this.context.actionTransaction();
+        this.context.setState(new timapi.statemachine.states.WaitTransaction(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingDeactivate()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionDeactivate();
+        this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingCloseReader()) {
+        this.context.actionCloseReader();
+        this.context.setState(new timapi.statemachine.states.WaitCloseReader(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingOpenReader()) {
+        this.context.actionOpenReader();
+        this.context.setState(new timapi.statemachine.states.WaitOpenReader(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingEjectCard()) {
+        this.context.actionEjectCard();
+        this.context.setState(new timapi.statemachine.states.WaitEjectCard(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingBalanceInquiry()) {
+        this.context.actionBalanceInquiry();
+        this.context.setState(new timapi.statemachine.states.WaitBalanceInquiry(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingOpenDialogMode()) {
+        this.context.actionClearPendingEvent();
+        this.context.actionOpenDialogMode();
+        this.context.setState(new timapi.statemachine.states.WaitOpenDialogMode(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingShowSignatureCapture()
+        || this.context.conditionHasPendingShowDialog()
+        || this.context.conditionHasPendingSendCardCommand()) {
+        this.context.actionOpenDialogMode();
+        this.context.setState(new timapi.statemachine.states.WaitOpenDialogMode(this.context));
+        return;
+    }
+    if (this.context.conditionHasPendingApplicationInformation()
+        || this.context.conditionHasPendingBalance()
+        || this.context.conditionHasPendingChangeSettings()
+        || this.context.conditionHasPendingDccRates()
+        || this.context.conditionHasPendingHardwareInformation()
+        || this.context.conditionHasPendingLogin()
+        || this.context.conditionHasPendingLogout()
+        || this.context.conditionHasPendingReboot()
+        || this.context.conditionHasPendingReconfig()
+        || this.context.conditionHasPendingSoftwareUpdate()
+        || this.context.conditionHasPendingSystemInformation()
+        || this.context.conditionHasPendingOpenMaintenanceWindow()
+        || this.context.conditionHasPendingCloseMaintenanceWindow()
+        || this.context.conditionHasPendingActivateServiceMenu()
+        || this.context.conditionHasPendingOpenDialogMode()
+        || this.context.conditionHasPendingCloseDialogMode()
+        || this.context.conditionHasPendingShowSignatureCapture()
+        || this.context.conditionHasPendingShowDialog()
+        || this.context.conditionHasPendingSendCardCommand()) {
+        this.context.actionDeactivate();
+        this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.Open.prototype.activate = function () {
+    this.context.actionActivate();
+    this.context.setState(new timapi.statemachine.states.Activating(this.context));
+};
+timapi.statemachine.states.Open.prototype.applicationInformation = function () {
+    this.context.actionSetPendingApplicationInformation();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.balance = function () {
+    this.context.actionSetPendingBalance();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.Open.prototype.changeSettings = function () {
+    this.context.actionSetPendingChangeSettings();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.counterRequest = function () {
+    this.context.actionCounterRequest();
+    this.context.setState(new timapi.statemachine.states.WaitCounterRequest(this.context));
+};
+timapi.statemachine.states.Open.prototype.deactivate = function () {
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.dccRates = function () {
+    this.context.actionSetPendingDccRates();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.hardwareInformation = function () {
+    this.context.actionSetPendingHardwareInformation();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.initTransaction = function () {
+    this.context.actionInitTransaction();
+    this.context.setState(new timapi.statemachine.states.WaitInitTransaction(this.context));
+};
+timapi.statemachine.states.Open.prototype.login = function () {
+    this.context.actionSetPendingLogin();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.logout = function () {
+    this.context.actionSetPendingLogout();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.reboot = function () {
+    this.context.actionSetPendingReboot();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.reconciliation = function () {
+    this.context.actionSetPendingReconciliation();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.receiptRequest = function () {
+    this.context.actionReceiptRequest();
+    this.context.setState(new timapi.statemachine.states.WaitReceiptRequestOpen(this.context));
+};
+timapi.statemachine.states.Open.prototype.reconfig = function () {
+    this.context.actionSetPendingReconfig();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.softwareUpdate = function () {
+    this.context.actionSetPendingSoftwareUpdate();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.systemInformation = function () {
+    this.context.actionSetPendingSystemInformation();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.transaction = function () {
+    this.context.actionTransaction();
+    this.context.setState(new timapi.statemachine.states.WaitTransaction(this.context));
+};
+timapi.statemachine.states.Open.prototype.closeReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionCloseReader();
+    this.context.setState(new timapi.statemachine.states.WaitCloseReader(this.context));
+};
+timapi.statemachine.states.Open.prototype.openReader = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionOpenReader();
+    this.context.setState(new timapi.statemachine.states.WaitOpenReader(this.context));
+};
+timapi.statemachine.states.Open.prototype.ejectCard = function () {
+    if (!this.context.conditionHasGuideUnattended()
+        && !this.context.conditionHasGuideAdvancedRetail()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionEjectCard();
+    this.context.setState(new timapi.statemachine.states.WaitEjectCard(this.context));
+};
+timapi.statemachine.states.Open.prototype.openMaintenanceWindow = function () {
+    this.context.actionSetPendingOpenMaintenanceWindow();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.closeMaintenanceWindow = function () {
+    this.context.actionSetPendingCloseMaintenanceWindow();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.activateServiceMenu = function () {
+    this.context.actionSetPendingActivateServiceMenu();
+    this.context.actionDeactivate();
+    this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+};
+timapi.statemachine.states.Open.prototype.balanceInquiry = function () {
+    if (!this.context.conditionHasGuideAdvancedRetail()
+        && !this.context.conditionHasGuideBanking()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionBalanceInquiry();
+    this.context.setState(new timapi.statemachine.states.WaitBalanceInquiry(this.context));
+};
+timapi.statemachine.states.Open.prototype.openDialogMode = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionOpenDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitOpenDialogMode(this.context));
+};
+timapi.statemachine.states.Open.prototype.showSignatureCapture = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowSignatureCapture();
+    this.context.actionOpenDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitOpenDialogMode(this.context));
+};
+timapi.statemachine.states.Open.prototype.showDialog = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingShowDialog();
+    this.context.actionOpenDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitOpenDialogMode(this.context));
+};
+timapi.statemachine.states.Open.prototype.sendCardCommand = function () {
+    if (!this.context.conditionHasGuideDialog()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionSetPendingSendCardCommand();
+    this.context.actionOpenDialogMode();
+    this.context.setState(new timapi.statemachine.states.WaitOpenDialogMode(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitActivateServiceMenu.loggerName = "timapi.statemachine.states.WaitActivateServiceMenu";
+timapi.statemachine.states.WaitActivateServiceMenu.classname = "WaitActivateServiceMenu";
+timapi.statemachine.states.WaitActivateServiceMenu.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitActivateServiceMenu.loggerName);
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.responseRequest = function () {
+    this.context.actionProcessResponseActivateServiceMenu();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitActivateServiceMenu.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitActivateServiceMenu.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitApplicationInformation.loggerName = "timapi.statemachine.states.WaitApplicationInformation";
+timapi.statemachine.states.WaitApplicationInformation.classname = "WaitApplicationInformation";
+timapi.statemachine.states.WaitApplicationInformation.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitApplicationInformation.loggerName);
+timapi.statemachine.states.WaitApplicationInformation.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.responseRequest = function () {
+    this.context.actionProcessResponseApplicationInformation();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitApplicationInformation.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitApplicationInformation.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitBalance.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitBalance.loggerName = "timapi.statemachine.states.WaitBalance";
+timapi.statemachine.states.WaitBalance.classname = "WaitBalance";
+timapi.statemachine.states.WaitBalance.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitBalance.loggerName);
+timapi.statemachine.states.WaitBalance.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitBalance.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitBalance.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitBalance.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitBalance.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitBalance.prototype.responseRequest = function () {
+    this.context.actionProcessResponseBalance();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitBalance.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitBalance.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitBalance.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitBalance.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitBalance.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitBalance.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalance.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitChangeSettings.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitChangeSettings.loggerName = "timapi.statemachine.states.WaitChangeSettings";
+timapi.statemachine.states.WaitChangeSettings.classname = "WaitChangeSettings";
+timapi.statemachine.states.WaitChangeSettings.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitChangeSettings.loggerName);
+timapi.statemachine.states.WaitChangeSettings.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.responseRequest = function () {
+    this.context.actionProcessResponseChangeSettings();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitChangeSettings.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitChangeSettings.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitCloseDialogMode.loggerName = "timapi.statemachine.states.WaitCloseDialogMode";
+timapi.statemachine.states.WaitCloseDialogMode.classname = "WaitCloseDialogMode";
+timapi.statemachine.states.WaitCloseDialogMode.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitCloseDialogMode.loggerName);
+timapi.statemachine.states.WaitCloseDialogMode.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.responseRequest = function () {
+    if (this.context.conditionIsEnabledAutoDeactivate()
+        && !this.context.conditionHasPendingEvent()) {
+        this.context.actionProcessResponseCloseDialogMode();
+        this.context.actionDeactivate();
+        this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+        return;
+    }
+    this.context.actionProcessResponseCloseDialogMode();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitCloseDialogMode.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseDialogMode.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitCloseMaintenanceWindow.loggerName = "timapi.statemachine.states.WaitCloseMaintenanceWindow";
+timapi.statemachine.states.WaitCloseMaintenanceWindow.classname = "WaitCloseMaintenanceWindow";
+timapi.statemachine.states.WaitCloseMaintenanceWindow.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitCloseMaintenanceWindow.loggerName);
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.responseRequest = function () {
+    this.context.actionProcessResponseCloseMaintenanceWindow();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitCloseMaintenanceWindow.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseMaintenanceWindow.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitCloseReader.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitCloseReader.loggerName = "timapi.statemachine.states.WaitCloseReader";
+timapi.statemachine.states.WaitCloseReader.classname = "WaitCloseReader";
+timapi.statemachine.states.WaitCloseReader.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitCloseReader.loggerName);
+timapi.statemachine.states.WaitCloseReader.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitCloseReader.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitCloseReader.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitCloseReader.prototype.responseRequest = function () {
+    this.context.actionProcessResponseCloseReader();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCloseReader.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCloseReader.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCloseReader.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCloseReader.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitCloseReader.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitCloseReader.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCloseReader.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitCommit.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitCommit.loggerName = "timapi.statemachine.states.WaitCommit";
+timapi.statemachine.states.WaitCommit.classname = "WaitCommit";
+timapi.statemachine.states.WaitCommit.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitCommit.loggerName);
+timapi.statemachine.states.WaitCommit.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+    this.context.actionArmTimeoutRequest();
+};
+timapi.statemachine.states.WaitCommit.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitCommit.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitCommit.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitCommit.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitCommit.prototype.responseRequest = function () {
+    this.context.actionProcessResponseCommit();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCommit.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCommit.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCommit.prototype.timeout = function () {
+    if (this.context.conditionCanRepeatRequest()) {
+        this.context.actionRepeatRequest();
+        this.context.setState(new timapi.statemachine.states.WaitCommit(this.context));
+        return;
+    }
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCommit.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitCommit.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitCommit.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCommit.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitCounterRequest.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitCounterRequest.loggerName = "timapi.statemachine.states.WaitCounterRequest";
+timapi.statemachine.states.WaitCounterRequest.classname = "WaitCounterRequest";
+timapi.statemachine.states.WaitCounterRequest.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitCounterRequest.loggerName);
+timapi.statemachine.states.WaitCounterRequest.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.responseRequest = function () {
+    this.context.actionProcessResponseCounterRequest();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitCounterRequest.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitCounterRequest.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitDccRates.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitDccRates.loggerName = "timapi.statemachine.states.WaitDccRates";
+timapi.statemachine.states.WaitDccRates.classname = "WaitDccRates";
+timapi.statemachine.states.WaitDccRates.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitDccRates.loggerName);
+timapi.statemachine.states.WaitDccRates.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitDccRates.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitDccRates.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitDccRates.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitDccRates.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitDccRates.prototype.responseRequest = function () {
+    this.context.actionProcessResponseDccRates();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitDccRates.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitDccRates.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitDccRates.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitDccRates.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitDccRates.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitDccRates.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitDccRates.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitEjectCard.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitEjectCard.loggerName = "timapi.statemachine.states.WaitEjectCard";
+timapi.statemachine.states.WaitEjectCard.classname = "WaitEjectCard";
+timapi.statemachine.states.WaitEjectCard.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitEjectCard.loggerName);
+timapi.statemachine.states.WaitEjectCard.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitEjectCard.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitEjectCard.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitEjectCard.prototype.responseRequest = function () {
+    this.context.actionProcessResponseEjectCard();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitEjectCard.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitEjectCard.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitEjectCard.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitEjectCard.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitEjectCard.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitEjectCard.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitEjectCard.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitForCommit.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitForCommit.loggerName = "timapi.statemachine.states.WaitForCommit";
+timapi.statemachine.states.WaitForCommit.classname = "WaitForCommit";
+timapi.statemachine.states.WaitForCommit.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitForCommit.loggerName);
+timapi.statemachine.states.WaitForCommit.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionCancelTimeout();
+    if (this.context.conditionIsEnabledAutoCommit()
+        && !this.context.conditionMandatoryFeatureAutoCommit()
+        && !this.context.conditionSupportedFeatureAutoCommit()) {
+        this.context.actionCommit();
+        this.context.setState(new timapi.statemachine.states.WaitCommit(this.context));
+        return;
+    }
+    if (this.context.conditionIsEnabledAutoCommit()) {
+        this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+        return;
+    }
+};
+timapi.statemachine.states.WaitForCommit.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitForCommit.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.commit = function () {
+    if (this.context.conditionMandatoryFeatureAutoCommit()) {
+        this.context.actionSimulateCommitCompleted();
+        this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+        return;
+    }
+    this.context.actionCommit();
+    this.context.setState(new timapi.statemachine.states.WaitCommit(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.rollback = function () {
+    this.context.actionRollback();
+    this.context.setState(new timapi.statemachine.states.WaitRollback(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitForCommit.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitForCommit.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitForCommit.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitForCommit.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.holdCommit = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionHoldCommit();
+};
+timapi.statemachine.states.WaitForCommit.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitForCommit.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitHardwareInformation.loggerName = "timapi.statemachine.states.WaitHardwareInformation";
+timapi.statemachine.states.WaitHardwareInformation.classname = "WaitHardwareInformation";
+timapi.statemachine.states.WaitHardwareInformation.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitHardwareInformation.loggerName);
+timapi.statemachine.states.WaitHardwareInformation.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.responseRequest = function () {
+    this.context.actionProcessResponseHardwareInformation();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitHardwareInformation.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitHardwareInformation.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitInitTransaction.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitInitTransaction.loggerName = "timapi.statemachine.states.WaitInitTransaction";
+timapi.statemachine.states.WaitInitTransaction.classname = "WaitInitTransaction";
+timapi.statemachine.states.WaitInitTransaction.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitInitTransaction.loggerName);
+timapi.statemachine.states.WaitInitTransaction.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.responseRequest = function () {
+    this.context.actionProcessResponseInitTransaction();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitInitTransaction.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitInitTransaction.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitOpenDialogMode.loggerName = "timapi.statemachine.states.WaitOpenDialogMode";
+timapi.statemachine.states.WaitOpenDialogMode.classname = "WaitOpenDialogMode";
+timapi.statemachine.states.WaitOpenDialogMode.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitOpenDialogMode.loggerName);
+timapi.statemachine.states.WaitOpenDialogMode.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.responseRequest = function () {
+    this.context.actionProcessResponseOpenDialogMode();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitOpenDialogMode.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenDialogMode.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitOpenMaintenanceWindow.loggerName = "timapi.statemachine.states.WaitOpenMaintenanceWindow";
+timapi.statemachine.states.WaitOpenMaintenanceWindow.classname = "WaitOpenMaintenanceWindow";
+timapi.statemachine.states.WaitOpenMaintenanceWindow.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitOpenMaintenanceWindow.loggerName);
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.responseRequest = function () {
+    this.context.actionProcessResponseOpenMaintenanceWindow();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitOpenMaintenanceWindow.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenMaintenanceWindow.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitOpenReader.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitOpenReader.loggerName = "timapi.statemachine.states.WaitOpenReader";
+timapi.statemachine.states.WaitOpenReader.classname = "WaitOpenReader";
+timapi.statemachine.states.WaitOpenReader.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitOpenReader.loggerName);
+timapi.statemachine.states.WaitOpenReader.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitOpenReader.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitOpenReader.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitOpenReader.prototype.responseRequest = function () {
+    this.context.actionProcessResponseOpenReader();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitOpenReader.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitOpenReader.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitOpenReader.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitOpenReader.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitOpenReader.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitOpenReader.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitOpenReader.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitReboot.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitReboot.loggerName = "timapi.statemachine.states.WaitReboot";
+timapi.statemachine.states.WaitReboot.classname = "WaitReboot";
+timapi.statemachine.states.WaitReboot.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitReboot.loggerName);
+timapi.statemachine.states.WaitReboot.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitReboot.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitReboot.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitReboot.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitReboot.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitReboot.prototype.responseRequest = function () {
+    this.context.actionProcessResponseReboot();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitReboot.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReboot.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReboot.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReboot.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitReboot.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitReboot.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReboot.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitReconciliation.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitReconciliation.loggerName = "timapi.statemachine.states.WaitReconciliation";
+timapi.statemachine.states.WaitReconciliation.classname = "WaitReconciliation";
+timapi.statemachine.states.WaitReconciliation.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitReconciliation.loggerName);
+timapi.statemachine.states.WaitReconciliation.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitReconciliation.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitReconciliation.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitReconciliation.prototype.responseRequest = function () {
+    this.context.actionProcessResponseReconciliation();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconciliation.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconciliation.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconciliation.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconciliation.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitReconciliation.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitReconciliation.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconciliation.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitReconfig.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitReconfig.loggerName = "timapi.statemachine.states.WaitReconfig";
+timapi.statemachine.states.WaitReconfig.classname = "WaitReconfig";
+timapi.statemachine.states.WaitReconfig.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitReconfig.loggerName);
+timapi.statemachine.states.WaitReconfig.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitReconfig.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitReconfig.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitReconfig.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitReconfig.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitReconfig.prototype.responseRequest = function () {
+    this.context.actionProcessResponseReconfig();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconfig.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconfig.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconfig.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReconfig.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitReconfig.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitReconfig.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReconfig.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitRollback.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitRollback.loggerName = "timapi.statemachine.states.WaitRollback";
+timapi.statemachine.states.WaitRollback.classname = "WaitRollback";
+timapi.statemachine.states.WaitRollback.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitRollback.loggerName);
+timapi.statemachine.states.WaitRollback.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitRollback.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitRollback.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitRollback.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitRollback.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitRollback.prototype.responseRequest = function () {
+    this.context.actionProcessResponseRollback();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitRollback.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitRollback.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitRollback.prototype.timeout = function () {
+    if (this.context.conditionCanRepeatRequest()) {
+        this.context.actionRepeatRequest();
+        this.context.setState(new timapi.statemachine.states.WaitRollback(this.context));
+        return;
+    }
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitRollback.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitRollback.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitRollback.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitRollback.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitShowDialog.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitShowDialog.loggerName = "timapi.statemachine.states.WaitShowDialog";
+timapi.statemachine.states.WaitShowDialog.classname = "WaitShowDialog";
+timapi.statemachine.states.WaitShowDialog.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitShowDialog.loggerName);
+timapi.statemachine.states.WaitShowDialog.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitShowDialog.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitShowDialog.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitShowDialog.prototype.responseRequest = function () {
+    this.context.actionProcessResponseShowDialog();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowDialog.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowDialog.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowDialog.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowDialog.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitShowDialog.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitShowDialog.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowDialog.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitShowSignatureCapture.loggerName = "timapi.statemachine.states.WaitShowSignatureCapture";
+timapi.statemachine.states.WaitShowSignatureCapture.classname = "WaitShowSignatureCapture";
+timapi.statemachine.states.WaitShowSignatureCapture.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitShowSignatureCapture.loggerName);
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.responseRequest = function () {
+    this.context.actionProcessResponseShowSignatureCapture();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitShowSignatureCapture.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitShowSignatureCapture.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitSoftwareUpdate.loggerName = "timapi.statemachine.states.WaitSoftwareUpdate";
+timapi.statemachine.states.WaitSoftwareUpdate.classname = "WaitSoftwareUpdate";
+timapi.statemachine.states.WaitSoftwareUpdate.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitSoftwareUpdate.loggerName);
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.responseRequest = function () {
+    this.context.actionProcessResponseSoftwareUpdate();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitSoftwareUpdate.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSoftwareUpdate.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitSystemInformation.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitSystemInformation.loggerName = "timapi.statemachine.states.WaitSystemInformation";
+timapi.statemachine.states.WaitSystemInformation.classname = "WaitSystemInformation";
+timapi.statemachine.states.WaitSystemInformation.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitSystemInformation.loggerName);
+timapi.statemachine.states.WaitSystemInformation.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.responseRequest = function () {
+    this.context.actionProcessResponseSystemInformation();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitSystemInformation.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSystemInformation.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitTransaction.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitTransaction.loggerName = "timapi.statemachine.states.WaitTransaction";
+timapi.statemachine.states.WaitTransaction.classname = "WaitTransaction";
+timapi.statemachine.states.WaitTransaction.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitTransaction.loggerName);
+timapi.statemachine.states.WaitTransaction.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+    this.context.actionArmTimeoutLongRequest();
+};
+timapi.statemachine.states.WaitTransaction.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitTransaction.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitTransaction.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitTransaction.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitTransaction.prototype.responseRequest = function () {
+    if (this.context.conditionTransactionNoCommit()) {
+        this.context.actionProcessResponseTransaction();
+        this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+        return;
+    }
+    this.context.actionProcessResponseTransaction();
+    this.context.setState(new timapi.statemachine.states.WaitForCommit(this.context));
+};
+timapi.statemachine.states.WaitTransaction.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitTransaction.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitTransaction.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitTransaction.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitTransaction.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitTransaction.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.amtAdjustment = function () {
+    if (!this.context.conditionHasGuideUnattended()) {
+        this.context.actionErrorDisabledFeature();
+        return;
+    }
+    this.context.actionAmtAdjustment();
+};
+timapi.statemachine.states.WaitTransaction.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitTransaction.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+var timapi;
+(function (timapi) {
+    class ActivateResponse {
+        constructor(printData, actSeqCounter) {
+            this.printData = printData;
+            this.actSeqCounter = actSeqCounter;
+        }
+        get $printData() {
+            return this.printData;
+        }
+        get $actSeqCounter() {
+            return this.actSeqCounter;
+        }
+    }
+    timapi.ActivateResponse = ActivateResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Amount {
+        constructor($amount, $currency) {
+            if (this.isFloating($amount)) {
+                this.amount = this.integerRepresentation($amount, $currency.exponent);
+            }
+            else {
+                this.amount = $amount;
+            }
+            this.currency = $currency;
+        }
+        getIntAmount() {
+            return this.integerRepresentation(this.amount, this.currency.exponent);
+        }
+        get $amount() {
+            return this.amount;
+        }
+        set $amount(value) {
+            this.amount = value;
+        }
+        getDecimalValue() {
+            return 0;
+        }
+        setDecimalValue(double) {
+        }
+        get $currency() {
+            return this.currency;
+        }
+        set $currency(value) {
+            this.currency = value;
+        }
+        isFloating(value) {
+            const numberValue = Number(value);
+            const stringValue = String(value);
+            return String(numberValue).length !== stringValue.length || value % 1 !== 0;
+        }
+        integerRepresentation(value, exponent) {
+            let result = Math.pow(10, exponent) * value;
+            return result;
+        }
+    }
+    timapi.Amount = Amount;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class AmountDcc {
+        constructor($amount, $currency, $rate, $rateExponent, $markup, $markupExponent) {
+            if (this.isFloating($amount)) {
+                this.amount = this.integerRepresentation($amount, $currency.exponent);
+            }
+            else {
+                this.amount = $amount;
+            }
+            this.currency = $currency;
+            this.rate = $rate;
+            this.rateExponent = $rateExponent;
+            this.markup = $markup;
+            this.markupExponent = $markupExponent;
+        }
+        get $amount() {
+            return this.amount;
+        }
+        getIntamount() {
+            return this.integerRepresentation(this.amount, 0);
+        }
+        getDecimalValue() {
+            return 0;
+        }
+        get $currency() {
+            return this.currency;
+        }
+        get $rate() {
+            return this.rate;
+        }
+        get $rateExponent() {
+            return this.rateExponent;
+        }
+        getRateDecimal() {
+            return 0;
+        }
+        get $markup() {
+            return this.markup;
+        }
+        get $markupExponent() {
+            return this.markupExponent;
+        }
+        getMarkupDecimal() {
+            if (this.markup == undefined || this.markupExponent == undefined) {
+                throw new EvalError("markup and/or markupExponent are undefined");
+            }
+            return 0;
+        }
+        isFloating(value) {
+            return value % 1 !== 0;
+        }
+        integerRepresentation(value, exponent) {
+            let result = Math.pow(10, exponent) * value;
+            return result;
+        }
+    }
+    timapi.AmountDcc = AmountDcc;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class AmountDiscount {
+        constructor($amount, $currency, $discountId) {
+            if (this.isFloating($amount)) {
+                this.amount = this.integerRepresentation($amount, $currency.exponent);
+            }
+            else {
+                this.amount = $amount;
+            }
+            this.currency = $currency;
+            this.discountId = $discountId;
+        }
+        get $amount() {
+            return this.amount;
+        }
+        getIntamount() {
+            return this.integerRepresentation(this.amount, 0);
+        }
+        getDecimalValue() {
+            return 0;
+        }
+        set $amount(value) {
+            this.amount = value;
+        }
+        setIntAmount(value) {
+            this.amount = value;
+        }
+        setDecimalValue(value) {
+        }
+        get $currency() {
+            return this.currency;
+        }
+        set $currency(value) {
+            this.currency = value;
+        }
+        get $discountId() {
+            return this.discountId;
+        }
+        set $discountId(value) {
+            this.discountId = value;
+        }
+        isFloating(value) {
+            return value % 1 !== 0;
+        }
+        integerRepresentation(value, exponent) {
+            let result = Math.pow(10, exponent) * value;
+            return result;
+        }
+    }
+    timapi.AmountDiscount = AmountDiscount;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Application {
+        constructor($aid, $label) {
+            this.aid = $aid;
+            this.label = $label;
+        }
+        get $aid() {
+            return this.aid;
+        }
+        get $label() {
+            return this.label;
+        }
+    }
+    timapi.Application = Application;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class BalanceInquiryResponse {
+        constructor($amount, $printData) {
+            this.amount = $amount;
+            this.printData = $printData;
+        }
+        get $amount() {
+            return this.amount;
+        }
+        get $printData() {
+            return this.printData;
+        }
+    }
+    timapi.BalanceInquiryResponse = BalanceInquiryResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class BalanceResponse {
+        constructor($counters, $printData) {
+            this.counters = $counters;
+            this.printData = $printData;
+        }
+        get $printData() {
+            return this.printData;
+        }
+        get $counters() {
+            return this.counters;
+        }
+    }
+    timapi.BalanceResponse = BalanceResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class BasketItem {
+        constructor(copy) {
+            if (copy !== undefined && copy !== undefined) {
+                this.authResult = copy.authResult;
+                this.itemId = copy.itemId;
+                this.loyaltyId = copy.loyaltyId;
+                this.amount = copy.amount;
+                this.amountTotal = copy.amountTotal;
+                this.amountDiscount = copy.amountDiscount;
+                this.amountTax = copy.amountTax;
+                this.itemQuantity = copy.itemQuantity;
+                this.loyaltyAuthResult = copy.loyaltyAuthResult;
+                this.prodDescription = copy.prodDescription;
+            }
+        }
+        get $authResult() {
+            return this.authResult;
+        }
+        set $authResult(value) {
+            this.authResult = value;
+        }
+        get $itemId() {
+            return this.itemId;
+        }
+        set $itemId(value) {
+            this.itemId = value;
+        }
+        get $loyaltyId() {
+            return this.loyaltyId;
+        }
+        set $loyaltyId(value) {
+            this.loyaltyId = value;
+        }
+        get $amount() {
+            return this.amount;
+        }
+        set $amount(value) {
+            this.amount = value;
+        }
+        get $amountTotal() {
+            return this.amountTotal;
+        }
+        set $amountTotal(value) {
+            this.amountTotal = value;
+        }
+        get $amountDiscount() {
+            return this.amountDiscount;
+        }
+        set $amountDiscount(value) {
+            this.amountDiscount = value;
+        }
+        get $amountTax() {
+            return this.amountTax;
+        }
+        set $amountTax(value) {
+            this.amountTax = value;
+        }
+        get $itemQuantity() {
+            return this.itemQuantity;
+        }
+        set $itemQuantity(value) {
+            this.itemQuantity = value;
+        }
+        get $loyaltyAuthResult() {
+            return this.loyaltyAuthResult;
+        }
+        set $loyaltyAuthResult(value) {
+            this.loyaltyAuthResult = value;
+        }
+        get $prodDescription() {
+            return this.prodDescription;
+        }
+        set $prodDescription(value) {
+            this.prodDescription = value;
+        }
+    }
+    timapi.BasketItem = BasketItem;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Brands {
+        constructor($name, $dccAvailable, $paymentProtocol, $acqId, $lastInitDate, $applications, $currencies) {
+            this.name = $name;
+            this.dccAvailable = $dccAvailable;
+            this.paymentProtocol = $paymentProtocol;
+            this.acqId = $acqId;
+            this.lastInitDate = $lastInitDate;
+            this.applications = $applications;
+            this.currencies = $currencies;
+        }
+        get $name() {
+            return this.name;
+        }
+        get $dccAvailable() {
+            return this.dccAvailable;
+        }
+        get $paymentProtocol() {
+            return this.paymentProtocol;
+        }
+        get $acqId() {
+            return this.acqId;
+        }
+        get $lastInitDate() {
+            return this.lastInitDate;
+        }
+        get $applications() {
+            return this.applications;
+        }
+        get $currencies() {
+            return this.currencies;
+        }
+    }
+    timapi.Brands = Brands;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class CardData {
+        constructor($posEntryMode, $aid, $acc, $cardNumber, $cardNumberPrintable, $cardNumberPrintableCardholder, cardNumberEnc, $cardNumberEncKeyIndex, $cardExpiryDate, $brandName, $tenderName, $cardTrackDatas, $loyaltyInformations, $cardRef, $processingDisposition, $language) {
+            this.posEntryMode = $posEntryMode;
+            this.aid = $aid;
+            this.acc = $acc;
+            this.cardNumber = $cardNumber;
+            this.cardNumberPrintable = $cardNumberPrintable;
+            this.cardNumberPrintableCardholder = $cardNumberPrintableCardholder;
+            this.cardNumberEnc = cardNumberEnc;
+            this.cardNumberEncKeyIndex = $cardNumberEncKeyIndex;
+            this.cardExpiryDate = $cardExpiryDate;
+            this.brandName = $brandName;
+            this.tenderName = $tenderName;
+            this.cardTrackDatas = $cardTrackDatas;
+            this.loyaltyInformations = $loyaltyInformations;
+            this.cardRef = $cardRef;
+            this.processingDisposition = $processingDisposition;
+            this.language = $language;
+        }
+        get $posEntryMode() {
+            return this.posEntryMode;
+        }
+        get $aid() {
+            return this.aid;
+        }
+        get $acc() {
+            return this.acc;
+        }
+        get $cardNumber() {
+            return this.cardNumber;
+        }
+        get $cardNumberPrintable() {
+            return this.cardNumberPrintable;
+        }
+        get $cardNumberPrintableCardholder() {
+            return this.cardNumberPrintableCardholder;
+        }
+        get $cardNumberEnc() {
+            return this.cardNumberEnc;
+        }
+        get $cardNumberEncKeyIndex() {
+            return this.cardNumberEncKeyIndex;
+        }
+        get $cardExpiryDate() {
+            return this.cardExpiryDate;
+        }
+        get $brandName() {
+            return this.brandName;
+        }
+        get $tenderName() {
+            return this.tenderName;
+        }
+        get $cardTrackDatas() {
+            return this.cardTrackDatas;
+        }
+        get $loyaltyInformations() {
+            return this.loyaltyInformations;
+        }
+        get $cardRef() {
+            return this.cardRef;
+        }
+        get $processingDisposition() {
+            return this.processingDisposition;
+        }
+        get $language() {
+            return this.language;
+        }
+    }
+    timapi.CardData = CardData;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class CardTrackData {
+        constructor($trackNum, $data) {
+            this.trackNum = $trackNum;
+            this.data = $data.slice();
+        }
+        get $trackNum() {
+            return this.trackNum;
+        }
+        get $data() {
+            return this.data;
+        }
+    }
+    timapi.CardTrackData = CardTrackData;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ConfigData {
+        constructor($receiptHeader, $language) {
+            this.receiptHeader = $receiptHeader.slice();
+            this.language = $language;
+        }
+        get $receiptHeader() {
+            return this.receiptHeader.slice();
+        }
+        get $language() {
+            return this.language;
+        }
+    }
+    timapi.ConfigData = ConfigData;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Convenience {
+        static needsSignature(cvm) {
+            switch (cvm) {
+                case timapi.constants.Cvm.signature:
+                case timapi.constants.Cvm.pinSignature:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+        static processPrintReceipts(terminal, printData) {
+            if (printData == undefined || printData == undefined) {
+                return undefined;
+            }
+            if (printData.$receiptItems.length > 0) {
+                return printData;
+            }
+            let receipts = new Array();
+            if (terminal !== undefined) {
+                const formatter = terminal.$receiptFormatter;
+                if (formatter == undefined) {
+                    return printData;
+                }
+                if (printData !== undefined && printData !== undefined) {
+                    for (let items of printData.$receiptItems) {
+                        receipts = receipts.concat(formatter.formatReceipt(terminal, items));
+                    }
+                }
+            }
+            return new timapi.PrintData(receipts, new Array());
+        }
+    }
+    timapi.Convenience = Convenience;
+})(timapi || (timapi = {}));
+timapi.ConversionHelper = {};
+timapi.ConversionHelper.byteToHexString = function (bytes) {
+    var builder = [];
+    for (each of bytes) {
+        var nibble = (each & 0xf0) >> 4;
+        if (nibble < 10) {
+            builder.push(48 + nibble);
+        }
+        else {
+            builder.push(65 + nibble - 10);
+        }
+        nibble = each & 0x0f;
+        if (nibble < 10) {
+            builder.push(48 + nibble);
+        }
+        else {
+            builder.push(65 + nibble - 10);
+        }
+    }
+    return String.fromCharCode.apply(undefined, builder);
+};
+timapi.ConversionHelper.byteOrUndefineToHexString = function (bytes) {
+    if (bytes == undefined) {
+        return "";
+    }
+    else {
+        return this.byteToHexString(bytes);
+    }
+};
+timapi.ConversionHelper.hexStringToByte = function (string) {
+    var bytes = new Uint8Array(string.length / 2);
+    var offset = 0;
+    var shift = 4;
+    var i;
+    for (each of string) {
+        var value = each.charCodeAt(0);
+        if (value >= 48 && value <= 57) {
+            bytes[offset] |= ((value - 48) & 0xff) << shift;
+        }
+        else if (value >= 97 && value <= 102) {
+            bytes[offset] |= ((value - 97 + 10) & 0xff) << shift;
+        }
+        else if (value >= 65 && value <= 70) {
+            bytes[offset] |= ((value - 65 + 10) & 0xff) << shift;
+        }
+        if (shift == 4) {
+            shift = 0;
+        }
+        else {
+            offset++;
+            shift = 4;
+        }
+    }
+    return bytes;
+};
+var timapi;
+(function (timapi) {
+    class Counter {
+        constructor($brandName, $paymentProtocol, $acqId, $count, $countDcc, $countForeign, $totals) {
+            this.brandName = $brandName;
+            this.paymentProtocol = $paymentProtocol;
+            this.acqId = $acqId;
+            this.count = $count;
+            this.countDcc = $countDcc;
+            this.countForeign = $countForeign;
+            this.totals = $totals;
+        }
+        get $brandName() {
+            return this.brandName;
+        }
+        get $paymentProtocol() {
+            return this.paymentProtocol;
+        }
+        get $acqId() {
+            return this.acqId;
+        }
+        get $count() {
+            return this.count;
+        }
+        get $countDcc() {
+            return this.countDcc;
+        }
+        get $countForeign() {
+            return this.countForeign;
+        }
+        get $totals() {
+            return this.totals;
+        }
+    }
+    timapi.Counter = Counter;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Counters {
+        constructor($counterType, $seqCounter, $counters) {
+            this.counterType = $counterType;
+            this.seqCounter = $seqCounter;
+            this.counters = $counters;
+        }
+        get $counterType() {
+            return this.counterType;
+        }
+        get $seqCounter() {
+            return this.seqCounter;
+        }
+        get $counters() {
+            return this.counters;
+        }
+    }
+    timapi.Counters = Counters;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class CurrencyItem {
+        constructor($currency, $type) {
+            this.currency = $currency;
+            this.type = $type;
+        }
+        get $currency() {
+            return this.currency;
+        }
+        get $type() {
+            return this.type;
+        }
+    }
+    timapi.CurrencyItem = CurrencyItem;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class DeactivateResponse {
+        constructor($printData, $counters) {
+            this.printData = $printData;
+            this.counters = $counters;
+        }
+        get $printData() {
+            return this.printData;
+        }
+        get $counters() {
+            return this.counters;
+        }
+    }
+    timapi.DeactivateResponse = DeactivateResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class DefaultTerminalListener {
+        connectCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        activateCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        applicationInformationCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        balanceCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData.$receipts !== undefined &&
+                data.$printData.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        changeSettingsCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        commitCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        counterRequestCompleted(event, data) {
+            this.requestCompleted(event, undefined);
+        }
+        deactivateCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        dccRatesCompleted(event, data) {
+            if (data !== undefined && data !== undefined && data.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data);
+            }
+            this.requestCompleted(event, data);
+        }
+        hardwareInformationCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+        initTransactionCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+        loginCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        logoutCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        rebootCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        reconciliationCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        receiptRequestCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData !== undefined &&
+                data.$printData.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        reconfigCompleted(event, data) {
+            if (data !== undefined && data !== undefined && data.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data);
+            }
+            this.requestCompleted(event, data);
+        }
+        rollbackCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$receipts !== undefined &&
+                data.$receipts !== undefined &&
+                data.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data);
+            }
+            this.requestCompleted(event, data);
+        }
+        softwareUpdateCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+        systemInformationCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+        transactionCompleted(event, data) {
+            if (data !== undefined && data !== undefined) {
+                this.processPrintReceipts(event.$terminal, data.$printData);
+            }
+            if (event.$exception !== undefined && event.$exception !== undefined) {
+                this.processPrintReceipts(event.$terminal, event.$exception.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        terminalStatusChanged(terminal) {
+        }
+        disconnected(terminal, exception) {
+        }
+        printReceipts(terminal, printData) {
+        }
+        requestCompleted(event, data) {
+        }
+        processPrintReceipts(terminal, printData) {
+            printData = timapi.Convenience.processPrintReceipts(terminal, printData);
+            if (printData == undefined || printData == undefined) {
+                return;
+            }
+            if (printData.$receipts.length > 0) {
+                this.printReceipts(terminal, printData);
+            }
+        }
+        closeReaderCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        openReaderCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        ejectCardCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        openMaintenanceWindowCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        closeMaintenanceWindowCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        activateServiceMenuCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        openDialogModeCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        closeDialogModeCompleted(event) {
+            this.requestCompleted(event, undefined);
+        }
+        showSignatureCaptureCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+        showDialogCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+        balanceInquiryCompleted(event, data) {
+            if (data !== undefined &&
+                data !== undefined &&
+                data.$printData !== undefined &&
+                data !== undefined &&
+                data.$printData.$receipts.length > 0) {
+                this.printReceipts(event.$terminal, data.$printData);
+            }
+            this.requestCompleted(event, data);
+        }
+        queryLoyaltyCompleted(event, data) {
+            this.requestCompleted(event, data);
+        }
+    }
+    timapi.DefaultTerminalListener = DefaultTerminalListener;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class EcrInfo {
+        get $type() {
+            return this.type;
+        }
+        set $type(value) {
+            this.type = value;
+        }
+        get $name() {
+            return this.name;
+        }
+        set $name(value) {
+            this.name = value;
+        }
+        get $manufacturerName() {
+            return this.manufacturerName;
+        }
+        set $manufacturerName(value) {
+            this.manufacturerName = value;
+        }
+        get $version() {
+            return this.version;
+        }
+        set $version(value) {
+            this.version = value;
+        }
+        get $serialNumber() {
+            return this.serialNumber;
+        }
+        set $serialNumber(value) {
+            this.serialNumber = value;
+        }
+        get $architecture() {
+            return this.architecture;
+        }
+        set $architecture(value) {
+            this.architecture = value;
+        }
+        get $integratorSolution() {
+            return this.integratorSolution;
+        }
+        set $integratorSolution(value) {
+            this.integratorSolution = value;
+        }
+        get $remoteIp() {
+            return this.remoteIp;
+        }
+        set $remoteIp(value) {
+            this.remoteIp = value;
+        }
+    }
+    timapi.EcrInfo = EcrInfo;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ErrorMessages {
+        static getErrorMessage(resultCode, terminalOrLanguage) {
+            if (terminalOrLanguage instanceof timapi.Terminal) {
+                this.getErrorMessageWithTerminal(resultCode, terminalOrLanguage);
+            }
+            else if (typeof terminalOrLanguage === "string") {
+                this.getErrorMessageWithLanguage(resultCode, terminalOrLanguage);
+            }
+        }
+        static getErrorMessageWithTerminal(resultCode, terminal) {
+            return "";
+        }
+        static getErrorMessageWithLanguage(resultCode, language) {
+            return "";
+        }
+        static loadMessageMap() {
+        }
+        static convertField(field) {
+            return "";
+        }
+    }
+    ErrorMessages.DEFAULT_LANGUAGE = "default";
+    timapi.ErrorMessages = ErrorMessages;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Features {
+        constructor($hardware, $payment, $sixml) {
+            this.hardware = $hardware;
+            this.payment = $payment;
+            this.sixml = $sixml;
+        }
+        get $hardware() {
+            return this.hardware;
+        }
+        get $payment() {
+            return this.payment;
+        }
+        get $sixml() {
+            return this.sixml;
+        }
+    }
+    timapi.Features = Features;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class FeaturesHardware {
+        constructor($cardholderDisplay, $merchantDisplay, $printer, $displayBrightness, $displayContrast, $alertTones, $keypadTones) {
+            this.cardholderDisplay = $cardholderDisplay;
+            this.merchantDisplay = $merchantDisplay;
+            this.printer = $printer;
+            this.displayBrightness = $displayBrightness;
+            this.displayContrast = $displayContrast;
+            this.alertTones = $alertTones;
+            this.keypadTones = $keypadTones;
+        }
+        get $CardholderDisplay() {
+            return this.cardholderDisplay;
+        }
+        get $merchantDisplay() {
+            return this.merchantDisplay;
+        }
+        get $printer() {
+            return this.printer;
+        }
+        get $displayBrightness() {
+            return this.displayBrightness;
+        }
+        get $displayContrast() {
+            return this.displayContrast;
+        }
+        get $alertTones() {
+            return this.alertTones;
+        }
+        get $keypadTones() {
+            return this.keypadTones;
+        }
+    }
+    timapi.FeaturesHardware = FeaturesHardware;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class FeaturesPayment {
+        constructor($dcc, $declinedReceipts, $partialApproval, $ep2Available, $ep2Dcc, $ep2DeclinedReceipts, $ep2MultiAccountSelection, $ep2MultiContractSelection) {
+            this.dcc = $dcc;
+            this.declinedReceipts = $declinedReceipts;
+            this.partialApproval = $partialApproval;
+            this.ep2Available = $ep2Available;
+            this.ep2Dcc = $ep2Dcc;
+            this.ep2DeclinedReceipts = $ep2DeclinedReceipts;
+            this.ep2MultiAccountSelection = $ep2MultiAccountSelection;
+            this.ep2MultiContractSelection = $ep2MultiContractSelection;
+        }
+        get $dcc() {
+            return this.dcc;
+        }
+        get $declinedReceipts() {
+            return this.declinedReceipts;
+        }
+        get $partialApproval() {
+            return this.partialApproval;
+        }
+        get $ep2Available() {
+            return this.ep2Available;
+        }
+        get $ep2Dcc() {
+            return this.ep2Dcc;
+        }
+        get $ep2DeclinedReceipts() {
+            return this.ep2DeclinedReceipts;
+        }
+        get $ep2MultiAccountSelection() {
+            return this.ep2MultiAccountSelection;
+        }
+        get $ep2MultiContractSelection() {
+            return this.ep2MultiContractSelection;
+        }
+    }
+    timapi.FeaturesPayment = FeaturesPayment;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    let Support;
+    (function (Support) {
+        Support[Support["disabled"] = 0] = "disabled";
+        Support[Support["supported"] = 1] = "supported";
+        Support[Support["mandatory"] = 2] = "mandatory";
+    })(Support = timapi.Support || (timapi.Support = {}));
+    class FeaturesSixml {
+        constructor($adminFunctions, $autoCommit, $autoShiftManagement, $autoShutterManagement, $financialFunctions, $guides, $nonFinancialFunctions, $protocolLevels, $sleepTimer, $statusFunctions, $dialogFunctions) {
+            this.adminFunctions = $adminFunctions;
+            this.autoCommit = $autoCommit;
+            this.autoShiftManagement = $autoShiftManagement;
+            this.autoShutterManagement = $autoShutterManagement;
+            this.financialFunctions = $financialFunctions;
+            this.guides = $guides;
+            this.nonFinancialFunctions = $nonFinancialFunctions;
+            this.protocolLevels = $protocolLevels;
+            this.sleepTimer = $sleepTimer;
+            this.statusFunctions = $statusFunctions;
+            this.dialogFunctions = $dialogFunctions;
+        }
+        get $adminFunctions() {
+            return this.adminFunctions;
+        }
+        get $autoCommit() {
+            return this.autoCommit;
+        }
+        get $autoShiftManagement() {
+            return this.autoShiftManagement;
+        }
+        get $autoShutterManagement() {
+            return this.autoShutterManagement;
+        }
+        get $financialFunctions() {
+            return this.financialFunctions;
+        }
+        get $guides() {
+            return this.guides;
+        }
+        get $nonFinancialFunctions() {
+            return this.nonFinancialFunctions;
+        }
+        get $protocolLevels() {
+            return this.protocolLevels;
+        }
+        get $sleepTimer() {
+            return this.sleepTimer;
+        }
+        get $statusFunctions() {
+            return this.statusFunctions;
+        }
+        get $dialogFunctions() {
+            return this.dialogFunctions;
+        }
+    }
+    timapi.FeaturesSixml = FeaturesSixml;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Hardware {
+        constructor($hardwareType, $serialNumber, $productionDate, $productVersion, $firmwareVersion, $securityStatus, $lastCleaningDate) {
+            this.hardwareType = $hardwareType;
+            this.serialNumber = $serialNumber;
+            this.productionDate = $productionDate;
+            this.productVersion = $productVersion;
+            this.firmwareVersion = $firmwareVersion;
+            this.securityStatus = $securityStatus;
+            this.lastCleaningDate = $lastCleaningDate;
+        }
+        get $hardwareType() {
+            return this.hardwareType;
+        }
+        get $serialNumber() {
+            return this.serialNumber;
+        }
+        get $productionDate() {
+            return this.productionDate;
+        }
+        get $productVersion() {
+            return this.productVersion;
+        }
+        get $firmwareVersion() {
+            return this.firmwareVersion;
+        }
+        get $securityStatus() {
+            return this.securityStatus;
+        }
+        get $lastCleaningDate() {
+            return this.lastCleaningDate;
+        }
+    }
+    timapi.Hardware = Hardware;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class HardwareInformationResponse {
+        constructor($hardwares, $kernelVersions, $settings, $statistics) {
+            this.hardwares = $hardwares;
+            this.kernelVersions = $kernelVersions;
+            this.settings = $settings;
+            this.statistics = $statistics;
+        }
+        get $hardwares() {
+            return this.hardwares;
+        }
+        get $kernelVersions() {
+            return this.kernelVersions;
+        }
+        get $settings() {
+            return this.settings;
+        }
+        get $statistics() {
+            return this.statistics;
+        }
+    }
+    timapi.HardwareInformationResponse = HardwareInformationResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class InternalBuildInfo {
+    }
+    InternalBuildInfo.VERSION = "3.8.1-97";
+    InternalBuildInfo.DATE = "2018-08-31";
+    timapi.InternalBuildInfo = InternalBuildInfo;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ItemQuantity {
+        constructor($quantity, $exponent, $quantityType) {
+            this.quantity = $quantity;
+            this.exponent = $exponent;
+            this.quantityType = $quantityType;
+        }
+        get $quantity() {
+            return this.quantity;
+        }
+        get $exponent() {
+            return this.exponent;
+        }
+        get $quantityType() {
+            return this.quantityType;
+        }
+    }
+    timapi.ItemQuantity = ItemQuantity;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class MerchantOption {
+        constructor($type, $value) {
+            this.type = $type;
+            this.value = $value;
+        }
+        get $type() {
+            return this.type;
+        }
+        get $value() {
+            return this.value;
+        }
+    }
+    timapi.MerchantOption = MerchantOption;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class NativeError {
+        constructor($code, $message, $source) {
+            this.code = $code;
+            this.message = $message;
+            this.source = $source;
+        }
+        get $code() {
+            return this.code;
+        }
+        get $message() {
+            return this.message;
+        }
+        get $source() {
+            return this.source;
+        }
+    }
+    timapi.NativeError = NativeError;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class NetworkInformation {
+        constructor($terminalIp, $terminalIpMask, $terminalIpGw, $terminalIpDns) {
+            this.terminalIp = $terminalIp;
+            this.terminalIpMask = $terminalIpMask;
+            this.terminalIpGw = $terminalIpGw;
+            this.terminalIpDns = $terminalIpDns;
+        }
+        get $terminalIp() {
+            return this.terminalIp;
+        }
+        get $terminalIpMask() {
+            return this.terminalIpMask;
+        }
+        get $terminalIpGw() {
+            return this.terminalIpGw;
+        }
+        get $terminalIpDns() {
+            return this.terminalIpDns;
+        }
+    }
+    timapi.NetworkInformation = NetworkInformation;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class PpInfo {
+        constructor($paymentProtocol, $ppEp2TransSeqCntOrig, $ppEp2AuthReslt, $ppEp2AuthRespC) {
+            this.paymentProtocol = $paymentProtocol;
+            this.ppEp2TransSeqCntOrig = $ppEp2TransSeqCntOrig;
+            this.ppEp2AuthReslt = $ppEp2AuthReslt;
+            this.ppEp2AuthRespC = $ppEp2AuthRespC;
+        }
+        get $paymentProtocol() {
+            return this.paymentProtocol;
+        }
+        get $ppEp2TransSeqCntOrig() {
+            return this.ppEp2TransSeqCntOrig;
+        }
+        get $ppEp2AuthReslt() {
+            return this.ppEp2AuthReslt;
+        }
+        get $ppEp2AuthRespC() {
+            return this.ppEp2AuthRespC;
+        }
+    }
+    timapi.PpInfo = PpInfo;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class PrintData {
+        constructor($receipts, $receiptItems) {
+            this.receipts = $receipts.slice();
+            this.receiptItems = $receiptItems.slice();
+        }
+        get $receipts() {
+            return this.receipts;
+        }
+        get $receiptItems() {
+            return this.receiptItems;
+        }
+    }
+    timapi.PrintData = PrintData;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class PrintOption {
+        constructor($recipient, $printFormat, $printWidth, $printFlags) {
+            this.recipient = $recipient;
+            this.printFormat = $printFormat;
+            this.printWidth = $printWidth;
+            this.printFlags = $printFlags;
+        }
+        get $recipient() {
+            return this.recipient;
+        }
+        get $printFormat() {
+            return this.printFormat;
+        }
+        get $printWidth() {
+            return this.printWidth;
+        }
+        get $printFlags() {
+            return this.printFlags;
+        }
+    }
+    timapi.PrintOption = PrintOption;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Receipt {
+        constructor($recipient, $value) {
+            this.recipient = $recipient;
+            this.value = $value;
+        }
+        get $recipient() {
+            return this.recipient;
+        }
+        get $value() {
+            return this.value;
+        }
+    }
+    timapi.Receipt = Receipt;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ReceiptItem {
+        constructor($receiptItemType, $recipient, $value) {
+            this.receiptItemType = $receiptItemType;
+            this.recipient = $recipient;
+            this.value = $value;
+        }
+        get $receiptItemType() {
+            return this.receiptItemType;
+        }
+        get $recipient() {
+            return this.recipient;
+        }
+        get $value() {
+            return this.value;
+        }
+    }
+    timapi.ReceiptItem = ReceiptItem;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ReceiptItems {
+        constructor($receiptType, $receiptItem) {
+            this.receiptType = $receiptType;
+            this.receiptItem = $receiptItem;
+        }
+        get $receiptType() {
+            return this.receiptType;
+        }
+        get $receiptItem() {
+            return this.receiptItem;
+        }
+    }
+    timapi.ReceiptItems = ReceiptItems;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ReceiptRequestResponse {
+        constructor($printData, $hasMoreReceiptsL) {
+            this.printData = $printData;
+            this.hasMoreReceiptsL = $hasMoreReceiptsL;
+        }
+        get $printData() {
+            return this.printData;
+        }
+        get $hasMoreReceiptsL() {
+            return this.hasMoreReceiptsL;
+        }
+    }
+    timapi.ReceiptRequestResponse = ReceiptRequestResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ReconciliationResponse {
+        constructor($counters, $printData) {
+            this.counters = $counters;
+            this.printData = $printData;
+        }
+        get $counters() {
+            return this.counters;
+        }
+        get $printData() {
+            return this.printData;
+        }
+    }
+    timapi.ReconciliationResponse = ReconciliationResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ShowDialogRequest {
+        constructor($brandBar, $brandMode, $resourceId, $theme, $timeout, $language, $placeholderItems) {
+            if ($brandBar !== undefined) {
+                this.brandBar = $brandBar.slice();
+            }
+            else {
+                this.brandBar = new Array();
+            }
+            if ($brandMode !== undefined) {
+                this.brandMode = $brandMode;
+            }
+            else {
+                this.$brandMode = timapi.constants.BrandMode.all;
+            }
+            if ($resourceId !== undefined) {
+                this.resourceId = $resourceId;
+            }
+            else {
+                this.resourceId = timapi.constants.ResourceId.welcomeCard;
+            }
+            if ($theme !== undefined) {
+                this.theme = $theme;
+            }
+            else {
+                this.theme = timapi.constants.Theme.six;
+            }
+            if ($timeout !== undefined) {
+                this.timeout = $timeout;
+            }
+            else {
+                this.timeout = 60;
+            }
+            if ($language !== undefined) {
+                this.language = $language;
+            }
+            if ($placeholderItems !== undefined) {
+                this.placeholderItems = $placeholderItems;
+            }
+            else {
+                this.placeholderItems = new Map();
+            }
+        }
+        get $brandBar() {
+            return this.brandBar;
+        }
+        set $brandBar(value) {
+            this.brandBar = value;
+        }
+        get $brandMode() {
+            return this.brandMode;
+        }
+        set $brandMode(value) {
+            this.brandMode = value;
+        }
+        get $resourceId() {
+            return this.resourceId;
+        }
+        set $resourceId(value) {
+            this.resourceId = value;
+        }
+        get $theme() {
+            return this.theme;
+        }
+        set $theme(value) {
+            this.theme = value;
+        }
+        get $timeout() {
+            return this.timeout;
+        }
+        set $timeout(value) {
+            this.timeout = value;
+        }
+        get $language() {
+            return this.language;
+        }
+        set $language(value) {
+            this.language = value;
+        }
+        get $placeholderItems() {
+            return this.placeholderItems;
+        }
+        set $placeholderItems(value) {
+            this.placeholderItems = value;
+        }
+    }
+    timapi.ShowDialogRequest = ShowDialogRequest;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ShowDialogResponse {
+        constructor($reason, $userInput, $cardData) {
+            this.reason = $reason;
+            this.userInput = $userInput;
+            this.cardData = $cardData;
+        }
+        get $reason() {
+            return this.reason;
+        }
+        get $userInput() {
+            return this.userInput;
+        }
+        get $cardData() {
+            return this.cardData;
+        }
+    }
+    timapi.ShowDialogResponse = ShowDialogResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ShowSignatureCaptureRequest {
+        constructor(request) {
+            if (arguments.length === 0) {
+                this.brandBar = new Array();
+                this.brandMode = timapi.constants.BrandMode.all;
+                this.backgroundColor = timapi.utils.Color.Color.white;
+                this.imageFileFormat = timapi.constants.ImageFileFormat.png;
+                this.imageFileWidth = 200;
+                this.imageFileHeight = 150;
+                this.resourceId = timapi.constants.ResourceId.EMPTY_DIALOG;
+                this.signatureColor = timapi.utils.Color.Color.black;
+                this.theme = timapi.constants.Theme.six;
+                this.timeout = 60;
+                this.language = undefined;
+                this.watermarkColor = timapi.utils.Color.Color.black;
+                this.watermarkItems = new Array();
+            }
+            else {
+                this.brandBar = request.brandBar.slice();
+                this.brandMode = request.brandMode;
+                this.backgroundColor = request.backgroundColor;
+                this.imageFileFormat = request.imageFileFormat;
+                this.imageFileWidth = request.imageFileWidth;
+                this.imageFileHeight = request.imageFileHeight;
+                this.resourceId = request.resourceId;
+                this.signatureColor = request.signatureColor;
+                this.theme = request.theme;
+                this.timeout = request.timeout;
+                this.language = request.language;
+                this.watermarkColor = request.watermarkColor;
+                this.watermarkItems = request.watermarkItems.slice();
+            }
+        }
+        get $brandBar() {
+            return this.brandBar;
+        }
+        set $brandBar(value) {
+            this.brandBar = value.slice();
+        }
+        get $brandMode() {
+            return this.brandMode;
+        }
+        set $brandMode(value) {
+            this.brandMode = value;
+        }
+        get $backgroundColor() {
+            return this.backgroundColor;
+        }
+        set $backgroundColor(value) {
+            this.backgroundColor = value;
+        }
+        get $imageFileFormat() {
+            return this.imageFileFormat;
+        }
+        set $imageFileFormat(value) {
+            this.imageFileFormat = value;
+        }
+        get $imageFileWidth() {
+            return this.imageFileWidth;
+        }
+        set $imageFileWidth(value) {
+            this.imageFileWidth = value;
+        }
+        get $imageFileHeight() {
+            return this.imageFileHeight;
+        }
+        set $imageFileHeight(value) {
+            this.imageFileHeight = value;
+        }
+        get $resourceId() {
+            return this.resourceId;
+        }
+        set $resourceId(value) {
+            this.resourceId = value;
+        }
+        get $signatureColor() {
+            return this.signatureColor;
+        }
+        set $signatureColor(value) {
+            this.signatureColor = value;
+        }
+        get $theme() {
+            return this.theme;
+        }
+        set $theme(value) {
+            this.theme = value;
+        }
+        get $timeout() {
+            return this.timeout;
+        }
+        set $timeout(value) {
+            this.timeout = value;
+        }
+        get $language() {
+            return this.language;
+        }
+        set $language(value) {
+            this.language = value;
+        }
+        get $watermarkColor() {
+            return this.watermarkColor;
+        }
+        set $watermarkColor(value) {
+            this.watermarkColor = value;
+        }
+        get $watermarkItems() {
+            return this.watermarkItems;
+        }
+        set $watermarkItems(value) {
+            this.watermarkItems = value.slice();
+        }
+    }
+    timapi.ShowSignatureCaptureRequest = ShowSignatureCaptureRequest;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class ShowSignatureCaptureResponse {
+        constructor($reason, $imageFileFormat, $imageWidth, $imageHeight, $imageData) {
+            this.reason = $reason;
+            this.imageFileFormat = $imageFileFormat;
+            this.imageWidth = $imageWidth;
+            this.imageHeight = $imageHeight;
+            this.imageData = $imageData.slice();
+            this.image = this.createImageFromData();
+        }
+        get $reason() {
+            return this.reason;
+        }
+        get $imageFileFormat() {
+            return this.imageFileFormat;
+        }
+        get $imageWidth() {
+            return this.imageWidth;
+        }
+        get $imageHeight() {
+            return this.imageHeight;
+        }
+        get $imageData() {
+            return this.imageData;
+        }
+        get $image() {
+            return this.image;
+        }
+        createImageFromData() {
+            let image = undefined;
+            return image;
+        }
+    }
+    timapi.ShowSignatureCaptureResponse = ShowSignatureCaptureResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class SignatureInformation {
+        constructor($imageFileFormat, $imageWidth, $imageHeight, $imageData) {
+            this.imageFileFormat = $imageFileFormat;
+            this.imageWidth = $imageWidth;
+            this.imageHeight = $imageHeight;
+            this.imageData = $imageData.slice();
+        }
+        get $imageFileFormat() {
+            return this.imageFileFormat;
+        }
+        get $imageWidth() {
+            return this.imageWidth;
+        }
+        get $imageHeight() {
+            return this.imageHeight;
+        }
+        get $imageData() {
+            return this.imageData;
+        }
+    }
+    timapi.SignatureInformation = SignatureInformation;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class SixmlReceivedMessageHacks {
+        constructor(settings) {
+            this.settings = settings;
+            this.enableDpsenbi240 = settings.$enabledHacks.has(240);
+            this.enableDpsenbi257 = settings.$enabledHacks.has(257);
+        }
+        processXmlMessage(message) {
+            if (this.enableDpsenbi240) {
+                this.dpsenbi240(message);
+            }
+            if (this.enableDpsenbi257) {
+                this.dpsenbi257(message);
+            }
+            return message;
+        }
+        dpsenbi240(node) {
+            for (let [entryKey, entryValue] of node.attributes.entries()) {
+                if (entryKey === "CardExpiryDate" && entryValue.length === 0) {
+                    entryValue = "0418";
+                }
+            }
+            for (let each of node.children) {
+                this.dpsenbi240(each);
+            }
+        }
+        dpsenbi257(node) {
+            if (node.name !== "sixml:Response") {
+                return;
+            }
+            if (node.attributes.get("ResultCode") === "0") {
+                return;
+            }
+            if (node.attributes.get("Function") !==
+                timapi.protocol.constants.Function.featureRequest) {
+                return;
+            }
+            node.attributes.put("ResultCode", "0");
+            node.children = new Array();
+            let features = new timapi.protocol.XmlNode("sixml:Features");
+            this.addContentNode(features, "sixml:Feature", "3", "FeatureType", timapi.protocol.constants.FeatureType.sixmlProtocolLevel);
+            this.addContentNode(features, "sixml:Feature", "1", "FeatureType", timapi.protocol.constants.FeatureType.sixmlGuides);
+            this.addContentNode(features, "sixml:Feature", "1", "FeatureType", timapi.protocol.constants.FeatureType.sixmlStatusFunctions);
+            this.addContentNode(features, "sixml:Feature", "263", "FeatureType", timapi.protocol.constants.FeatureType.sixmlAdminFunctions);
+            this.addContentNode(features, "sixml:Feature", "7", "FeatureType", timapi.protocol.constants.FeatureType.sixmlFinancialTransactions);
+            this.addContentNode(features, "sixml:Feature", "1", "FeatureType", timapi.protocol.constants.FeatureType.sixmlNonFinancialTransactions);
+            this.addContentNode(features, "sixml:Feature", "1", "FeatureType", timapi.protocol.constants.FeatureType.ep2Available);
+            this.addContentNode(features, "sixml:Feature", "1", "FeatureType", timapi.protocol.constants.FeatureType.hardwareDisplayCardholderInstalled);
+            node.children.add(features);
+            this.addContentNode(node, "sixml:TerminalId", this.settings.$terminalId);
+        }
+        addContentNode(node, name, value, attrName, attrValue) {
+            let child = new timapi.protocol.XmlNode(name);
+            child.textContent = value;
+            child.attributes.put(attrName, attrValue);
+            node.children.add(child);
+        }
+    }
+    timapi.SixmlReceivedMessageHacks = SixmlReceivedMessageHacks;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class SynchronousTerminalListener {
+        prepareWait(requestType) {
+            this.lastActivateResponse = undefined;
+            this.lastBalanceResponse = undefined;
+            this.lastCountersRequestResponse = undefined;
+            this.lastDccRatesResponse = undefined;
+            this.lastDeactivateResponse = undefined;
+            this.lastException = undefined;
+            this.lastHardwareInformationResponse = undefined;
+            this.lastReconciliationResponse = undefined;
+            this.lastReceiptRequestResponse = undefined;
+            this.lastReconfigResponse = undefined;
+            this.lastRollbackResponse = undefined;
+            this.lastSoftwareUpdateResponse = undefined;
+            this.lastSystemInformationResponse = undefined;
+            this.lastTransactionResponse = undefined;
+            this.lastShowSignatureCaptureResponse = undefined;
+            this.lastShowDialogResponse = undefined;
+            this.lastBalanceInquiryResponse = undefined;
+            this.lastQueryLoyaltyResponse = undefined;
+            this.lastInitTransactionResponse = undefined;
+            this.notifyRequestType = requestType;
+            this.notifyRequestCompleted = false;
+        }
+        waitForRequestCompleted() {
+            while (!this.notifyRequestCompleted) {
+                waits();
+            }
+        }
+        get $lastException() {
+            return this.lastException;
+        }
+        get $lastActivateResponse() {
+            return this.lastActivateResponse;
+        }
+        get $lastBalanceResponse() {
+            return this.lastBalanceResponse;
+        }
+        get $lastCountersRequestResponse() {
+            return this.lastCountersRequestResponse;
+        }
+        get $lastDeactivateResponse() {
+            return this.lastDeactivateResponse;
+        }
+        get $lastDccRatesResponse() {
+            return this.lastDccRatesResponse;
+        }
+        get $lastHardwareInformationResponse() {
+            return this.lastHardwareInformationResponse;
+        }
+        get $lastReconciliationResponse() {
+            return this.lastReconciliationResponse;
+        }
+        get $lastReceiptRequestResponse() {
+            return this.lastReceiptRequestResponse;
+        }
+        get $lastReconfigResponse() {
+            return this.lastReconfigResponse;
+        }
+        get $lastRollbackResponse() {
+            return this.lastRollbackResponse;
+        }
+        get $lastSoftwareUpdateResponse() {
+            return this.lastSoftwareUpdateResponse;
+        }
+        get $lastSystemInformationResponse() {
+            return this.lastSystemInformationResponse;
+        }
+        get $lastTransactionResponse() {
+            return this.lastTransactionResponse;
+        }
+        get $lastShowSignatureCaptureResponse() {
+            return this.lastShowSignatureCaptureResponse;
+        }
+        get $lastShowDialogResponse() {
+            return this.lastShowDialogResponse;
+        }
+        get $lastBalanceInquiryResponse() {
+            return this.lastBalanceInquiryResponse;
+        }
+        get $lastQueryLoyaltyResponse() {
+            return this.lastQueryLoyaltyResponse;
+        }
+        get $lastInitTransactionResponse() {
+            return this.lastInitTransactionResponse;
+        }
+        connectCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.connect);
+        }
+        activateCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastActivateResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.activate) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        applicationInformationCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.applicationInformation);
+        }
+        balanceCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastBalanceResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.balance) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        changeSettingsCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.changeSettings);
+        }
+        commitCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.commit);
+        }
+        counterRequestCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastCountersRequestResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.counterRequest) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        deactivateCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastDeactivateResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.deactivate) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        dccRatesCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastDccRatesResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.dccRates) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        hardwareInformationCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastHardwareInformationResponse = data;
+                if (this.notifyRequestType ===
+                    timapi.constants.RequestType.hardwareInformation) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        initTransactionCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastInitTransactionResponse = data;
+                if (this.notifyRequestType ===
+                    timapi.constants.RequestType.initTransaction) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        loginCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.login);
+        }
+        logoutCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.logout);
+        }
+        rebootCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.reboot);
+        }
+        reconciliationCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastReconciliationResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.reconciliation) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        receiptRequestCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastReceiptRequestResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.receiptRequest) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        reconfigCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastReconfigResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.reconfig) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        rollbackCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastRollbackResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.rollback) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        softwareUpdateCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastSoftwareUpdateResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.softwareUpdate) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        systemInformationCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastSystemInformationResponse = data;
+                if (this.notifyRequestType ===
+                    timapi.constants.RequestType.systemInformation) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        transactionCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastTransactionResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.transaction) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        terminalStatusChanged(terminal) {
+        }
+        disconnected(terminal, exception) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            this.lastException = exception;
+            this.notifyRequestCompleted = true;
+        }
+        datalessRequestCompleted(event, matchesType) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                if (this.notifyRequestType === matchesType) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        closeReaderCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.closeReader);
+        }
+        openReaderCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.openReader);
+        }
+        ejectCardCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.ejectCard);
+        }
+        openMaintenanceWindowCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.openMaintenanceWindow);
+        }
+        closeMaintenanceWindowCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.closeMaintenanceWindow);
+        }
+        activateServiceMenuCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.activateServiceMenu);
+        }
+        openDialogModeCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.openDialogMode);
+        }
+        closeDialogModeCompleted(event) {
+            this.datalessRequestCompleted(event, timapi.constants.RequestType.closeDialogMode);
+        }
+        showSignatureCaptureCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastShowSignatureCaptureResponse = data;
+                if (this.notifyRequestType ===
+                    timapi.constants.RequestType.showSignatureCapture) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        showDialogCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastShowDialogResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.showDialog) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        balanceInquiryCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastBalanceInquiryResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.balanceInquiry) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+        queryLoyaltyCompleted(event, data) {
+            if (this.notifyRequestType == undefined || this.notifyRequestCompleted) {
+                return;
+            }
+            if (event.$exception == undefined) {
+                this.lastQueryLoyaltyResponse = data;
+                if (this.notifyRequestType === timapi.constants.RequestType.queryLoyalty) {
+                    this.notifyRequestCompleted = true;
+                }
+            }
+            else {
+                this.lastException = event.$exception;
+                this.notifyRequestCompleted = true;
+            }
+        }
+    }
+    timapi.SynchronousTerminalListener = SynchronousTerminalListener;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class SystemInformationResponse {
+        constructor($networkInformation) {
+            this.networkInformation = $networkInformation;
+        }
+        get $networkInformation() {
+            return this.networkInformation;
+        }
+    }
+    timapi.SystemInformationResponse = SystemInformationResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Terminal {
+        constructor(settings) {
+            this.initLogging(settings);
+            Terminal.logger.log(timapi.logging.Level.INFO, "TimApiBuildInfo: Version=" + timapi.InternalBuildInfo.VERSION
+                + " Date=" + timapi.InternalBuildInfo.DATE);
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "<constructor>", [settings]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "<constructor>");
+            }
+            if (settings.$connectionMode ===
+                timapi.constants.ConnectionMode.broadcast &&
+                settings.$terminalId.length === 0) {
+                throw new Error("Terminal ID can not be empty if broadcast connection mode is used");
+            }
+            if (settings.$connectionMode === timapi.constants.ConnectionMode.onFixIp &&
+                settings.$connectionIPString.length === 0) {
+                throw new Error("Connection IP can not be empty if IP connection mode is used");
+            }
+            this.settings = new timapi.TerminalSettingsImmutable(settings);
+            this.transactionData = new timapi.TransactionData();
+            this.initEcrData();
+            this.initPrintOptions();
+            this.backend = new timapi.TerminalBackendSixml(this);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "<constructor>");
+        }
+        dispose() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "dispose");
+            this.backend.dispose();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "dispose");
+        }
+        get $settings() {
+            return this.settings;
+        }
+        terminalId() {
+            return this.backend.$terminalId;
+        }
+        get $posId() {
+            return this.posId;
+        }
+        set $posId(value) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setPosId", [this.posId]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setPosId");
+            }
+            this.posId = value;
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "setPosId");
+        }
+        get $userId() {
+            return this.userId;
+        }
+        set $userId(value) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setUserId", [this.userId]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setUserId");
+            }
+            this.userId = value;
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "setUserId");
+        }
+        get $ecrData() {
+            return this.ecrData;
+        }
+        set $ecrData(value) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setEcrData", [this.ecrData]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setEcrData");
+            }
+            this.ecrData = value;
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "setEcrData");
+        }
+        get $printOptions() {
+            return this.printOptions;
+        }
+        set $printOptions(value) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setPrintOptions", [
+                    this.printOptions
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setPrintOptions");
+            }
+            this.printOptions = value;
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "setPrintOptions");
+        }
+        get $merchantOptions() {
+            return this.merchantOptions;
+        }
+        set $merchantOptions(value) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setMerchantOptions", [
+                    this.merchantOptions
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setMerchantOptions");
+            }
+            this.merchantOptions = value;
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "setMerchantOptions");
+        }
+        get $transactionData() {
+            return this.transactionData;
+        }
+        set $transactionData(value) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setTransactionData", [
+                    this.transactionData
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "setTransactionData");
+            }
+            this.transactionData = value;
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "setTransactionData");
+        }
+        get $receiptFormatter() {
+            return this.receiptFormatter;
+        }
+        set $receiptFormatter(value) {
+            this.receiptFormatter = value;
+        }
+        getTerminalStatus() {
+            return this.backend.$terminalStatus;
+        }
+        getBrands() {
+            return this.backend.$brands;
+        }
+        getFeatures() {
+            return this.backend.$features;
+        }
+        getActSeqCounter() {
+            return this.backend.$actSeqCounter;
+        }
+        getConfigData() {
+            return this.backend.$configData;
+        }
+        activate() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "activate");
+            let result = this.backend.activate();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "activate", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "activate");
+            }
+            return result;
+        }
+        activateAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "activateAsync");
+            this.backend.activateAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "activateAsync");
+        }
+        applicationInformation() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "applicationInformation");
+            this.backend.applicationInformation();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "applicationInformation");
+        }
+        applicationInformationAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "applicationInformationAsync");
+            this.backend.applicationInformationAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "applicationInformationAsync");
+        }
+        balance() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "balance");
+            let result = this.backend.balance();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "balance", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "balance");
+            }
+            return result;
+        }
+        balanceAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "balanceAsync");
+            this.backend.balanceAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "balanceAsync");
+        }
+        cancel(silent, retainCard) {
+            if (silent == undefined && retainCard == undefined) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "cancel");
+                this.backend.cancel();
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "cancel");
+            }
+            else if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "cancel(silent,retainCard)", [silent, retainCard]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "cancel(silent,retainCard)");
+            }
+            if (silent !== undefined &&
+                silent !== undefined &&
+                retainCard !== undefined &&
+                retainCard !== undefined) {
+                this.backend.cancel(silent, retainCard);
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "cancel(silent,retainCard)");
+            }
+        }
+        changeSettings(settings) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "changeSettings", [
+                    settings
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "changeSettings");
+            }
+            this.backend.changeSettings(settings);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "changeSettings");
+        }
+        changeSettingsAsync(settings) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "changeSettingsAsync", [
+                    settings
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "changeSettingsAsync");
+            }
+            this.backend.changeSettingsAsync(settings);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "changeSettingsAsync");
+        }
+        commit() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "commit");
+            this.backend.commit();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "commit");
+        }
+        commitAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "commitAsync");
+            this.backend.commitAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "commitAsync");
+        }
+        connect() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "connect");
+            this.backend.connect();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "connect");
+        }
+        counterRequest(type) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "counterRequest", [type]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "counterRequest");
+            }
+            let result = this.backend.counterRequest(type);
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "counterRequest", [
+                    result
+                ]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "counterRequest");
+            }
+            return result;
+        }
+        counterRequestAsync(type) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "counterRequestAsync", [type]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "counterRequestAsync");
+            }
+            this.backend.counterRequestAsync(type);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "counterRequestAsync");
+        }
+        deactivate() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "deactivate");
+            let result = this.backend.deactivate();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "deactivate", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "deactivate");
+            }
+            return result;
+        }
+        deactivateAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "deactivateAsync");
+            this.backend.deactivateAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "deactivateAsync");
+        }
+        disconnect() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "disconnect");
+            this.backend.disconnect();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "disconnect");
+        }
+        dccRates() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "dccRates");
+            let result = this.backend.dccRates();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "dccRates", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "dccRates");
+            }
+            return result;
+        }
+        dccRatesAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "dccRatesAsync");
+            this.backend.dccRatesAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "dccRatesAsync");
+        }
+        hardwareInformation() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "hardwareInformation");
+            this.backend.hardwareInformation();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "hardwareInformation");
+        }
+        hardwareInformationAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "hardwareInformationAsync");
+            this.backend.hardwareInformationAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "hardwareInformationAsync");
+        }
+        initTransaction(displayAmount, amount) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "initTransaction", [
+                displayAmount
+            ]);
+            let result = this.backend.initTransaction(displayAmount, amount);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "initTransaction", [result]);
+            return result;
+        }
+        initTransactionAsync(displayAmount, amount) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "initTransactionAsync", [
+                displayAmount
+            ]);
+            this.backend.initTransactionAsync(displayAmount, amount);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "initTransactionAsync");
+        }
+        login() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "login");
+            this.backend.login();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "login");
+        }
+        loginAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "loginAsync");
+            this.backend.loginAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "loginAsync");
+        }
+        logout() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "logout");
+            this.backend.logout();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "logout");
+        }
+        logoutAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "logoutAsync");
+            this.backend.logoutAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "logoutAsync");
+        }
+        reboot() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "reboot");
+            this.backend.reboot();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "reboot");
+        }
+        rebootAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "rebootAsync");
+            this.backend.rebootAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "rebootAsync");
+        }
+        reconciliation() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "reconciliation");
+            let result = this.backend.reconciliation();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "reconciliation", [
+                    result
+                ]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "reconciliation");
+            }
+            return result;
+        }
+        reconciliationAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "reconciliationAsync");
+            this.backend.reconciliationAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "reconciliationAsync");
+        }
+        receiptRequest(type) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "receiptRequest", [type]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "receiptRequest");
+            }
+            let result = this.backend.receiptRequest(type);
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "receiptRequest", [
+                    result
+                ]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "receiptRequest");
+            }
+            return result;
+        }
+        receiptRequestAsync(type) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "receiptRequestAsync", [type]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "receiptRequestAsync");
+            }
+            this.backend.receiptRequestAsync(type);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "receiptRequestAsync");
+        }
+        reconfig() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "reconfig");
+            let result = this.backend.reconfig();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "reconfig", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "reconfig");
+            }
+            return result;
+        }
+        reconfigAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "reconfigAsync");
+            this.backend.reconfigAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "reconfigAsync");
+        }
+        rollback() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "rollback");
+            let result = this.backend.rollback();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "rollback", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "rollback");
+            }
+            return result;
+        }
+        rollbackAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "rollbackAsync");
+            this.backend.rollbackAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "rollbackAsync");
+        }
+        softwareUpdate() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "softwareUpdate");
+            let result = this.backend.softwareUpdate();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "softwareUpdate", [
+                    result
+                ]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "softwareUpdate");
+            }
+            return result;
+        }
+        softwareUpdateAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "softwareUpdateAsync");
+            this.backend.softwareUpdateAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "softwareUpdateAsync");
+        }
+        systemInformation() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "systemInformation");
+            let result = this.backend.systemInformation();
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "systemInformation", [
+                    result
+                ]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "systemInformation");
+            }
+            return result;
+        }
+        systemInformationAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "systemInformationAsync");
+            this.backend.systemInformationAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "systemInformationAsync");
+        }
+        transaction(type, amountOrTransactionRequest) {
+            if (amountOrTransactionRequest instanceof timapi.Amount) {
+                return this.transactionWithAmount(type, amountOrTransactionRequest);
+            }
+            else if (amountOrTransactionRequest instanceof timapi.TransactionRequest) {
+                return this.transactionWithTransactionRequest(type, amountOrTransactionRequest);
+            }
+            return undefined;
+        }
+        transactionWithAmount(type, amount) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transaction", new Array({ type, amount }));
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transaction");
+            }
+            let result = this.backend.transaction(type, amount);
+            result = new timapi.TransactionResponse(result.$transactionType, result.$amount, result.$amount, result.$amountDcc, result.$amountSaldo, result.$transactionInformation, result.$dccDisclaimer, result.$cardData, timapi.Convenience.processPrintReceipts(this, result.$printData), result.$tipAmount, result.$additionalInfo, result.$basket);
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "transaction", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "transaction");
+            }
+            return result;
+        }
+        transactionWithTransactionRequest(type, request) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transaction", new Array({ type, request }));
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transaction");
+            }
+            let result = this.backend.transaction(type, request);
+            result = new timapi.TransactionResponse(result.$transactionType, result.$amount, result.$amount, result.$amountDcc, result.$amountSaldo, result.$transactionInformation, result.$dccDisclaimer, result.$cardData, timapi.Convenience.processPrintReceipts(this, result.$printData), result.$tipAmount, result.$additionalInfo, result.$basket);
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "transaction", [result]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "transaction");
+            }
+            return result;
+        }
+        transactionAsync(type, amountOrRequest) {
+            if (amountOrRequest instanceof timapi.Amount) {
+                this.transactionAsyncWithAmount(type, amountOrRequest);
+            }
+            else if (amountOrRequest instanceof timapi.TransactionRequest) {
+                this.transactionAsyncWithRequest(type, amountOrRequest);
+            }
+        }
+        transactionAsyncWithAmount(type, amount) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionAsync", new Array({ type, amount }));
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionAsync");
+            }
+            this.backend.transactionAsync(type, amount);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionAsync");
+        }
+        transactionAsyncWithRequest(type, request) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionAsync", new Array({ type, request }));
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionAsync");
+            }
+            this.backend.transactionAsync(type, request);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionAsync");
+        }
+        transactionTip(type, amount, tipAmount) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionTip", new Array({ type, amount }));
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionTip");
+            }
+            let result = this.backend.transactionTip(type, amount, tipAmount);
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionTip", [
+                    result
+                ]);
+            }
+            else {
+                Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionTip");
+            }
+            return result;
+        }
+        transactionTipAsync(type, amount, tipAmount) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionTipAsync", new Array({ type, amount, tipAmount }));
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "transactionTipAsync");
+            }
+            this.backend.transactionTipAsync(type, amount, tipAmount);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionTipAsync");
+        }
+        transactionCashback(type, amount, amountOther) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "transactionCashback(TransactionType,Amount,Amount)", [type, amount, amountOther]);
+            let result = this.backend.transactionCashback(type, amount, amountOther);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionCashback(TransactionType,Amount,Amount)", [result]);
+            return result;
+        }
+        transactionCashbackAsync(type, amount, amountOther) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "transactionCashbackAsync(TransactionType,Amount,Amount)", [type, amount, amountOther]);
+            this.backend.transactionCashbackAsync(type, amount, amountOther);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "transactionCashbackAsync(TransactionType,Amount,Amount)");
+        }
+        closeReader() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "closeReader");
+            this.backend.closeReader();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "closeReader");
+        }
+        closeReaderAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "closeReaderAsync");
+            this.backend.closeReaderAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "closeReaderAsync");
+        }
+        openReader() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "openReader");
+            this.backend.openReader();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "openReader");
+        }
+        openReaderAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "openReaderAsync");
+            this.backend.openReaderAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "openReaderAsync");
+        }
+        ejectCard() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "ejectCard");
+            this.backend.ejectCard();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "ejectCard");
+        }
+        ejectCardAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "ejectCardAsync");
+            this.backend.ejectCardAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "ejectCardAsync");
+        }
+        openMaintenanceWindow() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "openMaintenanceWindow");
+            this.backend.openMaintenanceWindow();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "openMaintenanceWindow");
+        }
+        openMaintenanceWindowAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "openMaintenanceWindowAsync");
+            this.backend.openMaintenanceWindowAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "openMaintenanceWindowAsync");
+        }
+        closeMaintenanceWindow() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "closeMaintenanceWindow");
+            this.backend.closeMaintenanceWindow();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "closeMaintenanceWindow");
+        }
+        closeMaintenanceWindowAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "closeMaintenanceWindowAsync");
+            this.backend.closeMaintenanceWindowAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "closeMaintenanceWindowAsync");
+        }
+        holdCommit() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "holdCommit");
+            this.backend.holdCommit();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "holdCommit");
+        }
+        activateServiceMenu() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "activateServiceMenu");
+            this.backend.activateServiceMenu();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "activateServiceMenu");
+        }
+        activateServiceMenuAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "activateServiceMenuAsync");
+            this.backend.activateServiceMenuAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "activateServiceMenuAsync");
+        }
+        openDialogMode() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "openDialogMode");
+            this.backend.openDialogMode();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "openDialogMode");
+        }
+        openDialogModeAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "openDialogModeAsync");
+            this.backend.openDialogModeAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "openDialogModeAsync");
+        }
+        closeDialogMode() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "closeDialogMode");
+            this.backend.closeDialogMode();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "closeDialogMode");
+        }
+        closeDialogModeAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "closeDialogModeAsync");
+            this.backend.closeDialogModeAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "closeDialogModeAsync");
+        }
+        showSignatureCapture(request) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "showSignatureCapture", [
+                request
+            ]);
+            let result = this.backend.showSignatureCapture(request);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "showSignatureCapture", [
+                result
+            ]);
+            return result;
+        }
+        showSignatureCaptureAsync(request) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "showSignatureCaptureAsync", [request]);
+            this.backend.showSignatureCaptureAsync(request);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "showSignatureCaptureAsync");
+        }
+        showDialog(request) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "showDialog", [request]);
+            let result = this.backend.showDialog(request);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "showDialog", [result]);
+            return result;
+        }
+        showDialogAsync(request) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "showDialogAsync", [
+                request
+            ]);
+            this.backend.showDialogAsync(request);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "showDialogAsync");
+        }
+        balanceInquiry() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "balanceInquiry");
+            let response = this.backend.balanceInquiry();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "balanceInquiry", [
+                response
+            ]);
+            return response;
+        }
+        balanceInquiryAsync() {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "balanceInquiryAsync");
+            this.backend.balanceInquiryAsync();
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "balanceInquiryAsync");
+        }
+        queryLoyalty(retainCard, loyaltyInfoType) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "queryLoyalty", [
+                retainCard,
+                loyaltyInfoType
+            ]);
+            let response = this.backend.queryLoyalty(retainCard, loyaltyInfoType);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "queryLoyalty", [response]);
+            return response;
+        }
+        queryLoyaltyAsync(retainCard, loyaltyInfoType) {
+            Terminal.logger.entering(Terminal.CLASS_NAME, "queryLoyaltyAsync", [retainCard, loyaltyInfoType]);
+            this.backend.queryLoyaltyAsync(retainCard, loyaltyInfoType);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "queryLoyaltyAsync");
+        }
+        addListener(listener) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "addListener", [
+                    listener
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "addListener");
+            }
+            this.backend.addListener(listener);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "addListener");
+        }
+        removeListener(listener) {
+            if (Terminal.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "removeListener", [
+                    listener
+                ]);
+            }
+            else {
+                Terminal.logger.entering(Terminal.CLASS_NAME, "removeListener");
+            }
+            this.backend.removeListener(listener);
+            Terminal.logger.exiting(Terminal.CLASS_NAME, "removeListener");
+        }
+        initLogging(settings) {
+            let retainFileCount = settings.$logRetainFileCount;
+            try {
+                let prefix = "api-";
+                switch (settings.$connectionMode) {
+                    case timapi.constants.ConnectionMode.broadcast:
+                        prefix = prefix + settings.$terminalId + "-";
+                        break;
+                    case timapi.constants.ConnectionMode.onFixIp:
+                        prefix =
+                            prefix +
+                                "-";
+                        break;
+                    default:
+                        break;
+                }
+            }
+            catch (error) {
+            }
+        }
+        initEcrData() {
+            this.ecrData = new Array();
+            let ecrInfo = new timapi.EcrInfo();
+            ecrInfo.$name = window.navigator.platform;
+            ecrInfo.$version = window.navigator.appVersion;
+            ecrInfo.$integratorSolution = "Developer";
+            this.ecrData.push(ecrInfo);
+        }
+        initPrintOptions() {
+            this.printOptions = new Array();
+            this.printOptions.push(new timapi.PrintOption(timapi.constants.Recipient.merchant, timapi.constants.PrintFormat.normal, 40, new Set()));
+            this.printOptions.push(new timapi.PrintOption(timapi.constants.Recipient.cardholder, timapi.constants.PrintFormat.normal, 40, new Set()));
+        }
+    }
+    Terminal.CLASS_NAME = "Terminal.ts";
+    Terminal.logger = timapi.logging.Logger.getLogger(Terminal.logger_NAME);
+    timapi.Terminal = Terminal;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TerminalBackend {
+        constructor(terminal) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "<constructor>");
+            if (terminal == undefined) {
+                throw new Error("terminal is undefined or null");
+            }
+            this.terminal = terminal;
+            this.listeners = new Array();
+            this.lockCountListeners = 0;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "<constructor>");
+        }
+        get $terminal() {
+            return this.terminal;
+        }
+        get $terminalStatus() {
+            return this.terminalStatus;
+        }
+        set $terminalStatus(value) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "setTerminalStatus", [this.terminalStatus]);
+            this.terminalStatus = value;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "setTerminalStatus");
+        }
+        get $brands() {
+            return this.brands;
+        }
+        set $brands(value) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "setBrands", [this.brands]);
+            this.brands = value;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "setBrands");
+        }
+        get $features() {
+            return this.features;
+        }
+        set $features(value) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "setFeatures", [this.$features]);
+            this.features = value;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "setFeatures");
+        }
+        get $actSeqCounter() {
+            return this.actSeqCounter;
+        }
+        set $actSeqCounter(value) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "setActSeqCounter", [this.actSeqCounter]);
+            this.actSeqCounter = value;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "setActSeqCounter");
+        }
+        get $configData() {
+            return this.configData;
+        }
+        set $configData(value) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "setConfigData", [this.configData]);
+            this.configData = value;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "setConfigData");
+        }
+        get $terminalId() {
+            return this.terminalId;
+        }
+        set $terminalId(value) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "setTerminalId", [this.terminalId]);
+            this.terminalId = value;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "setTerminalId");
+        }
+        get $runningRequest() {
+            return this.runningRequest;
+        }
+        hasRunningRequest() {
+            return this.runningRequest != undefined;
+        }
+        set $runningRequest(value) {
+            this.runningRequest = value;
+        }
+        clearRunningRequestIf(runningRequest) {
+            if (this.runningRequest === runningRequest) {
+                this.runningRequest = undefined;
+            }
+        }
+        dispose() {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "dispose");
+            this.commDisconnect();
+            this.listeners = new Array();
+            this.lockCountListeners = 0;
+            this.lockedListeners = undefined;
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "dispose");
+        }
+        addListener(listener) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "addListener", [listener]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "addListener");
+            }
+            if (listener == undefined) {
+                throw new Error("listener is undefined");
+            }
+            if (this.lockCountListeners === 0) {
+                if (this.listeners !== undefined) {
+                    this.listeners.push(listener);
+                }
+            }
+            else {
+                if (this.lockedListeners == undefined) {
+                    this.lockedListeners = this.listeners.slice();
+                }
+                if (this.lockedListeners !== undefined) {
+                    this.lockedListeners.push(listener);
+                }
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "addListener");
+        }
+        removeListener(listener) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "removeListener", [listener]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "removeListener");
+            }
+            if (listener == undefined) {
+                throw new Error("listener is undefined");
+            }
+            if (this.lockCountListeners === 0) {
+                if (this.listeners !== undefined) {
+                    this.listeners = timapi.utils.ArrayAdditions.ArrayAdditions.remove(listener, this.listeners);
+                }
+            }
+            else {
+                if (this.lockedListeners == undefined) {
+                    if (this.listeners !== undefined) {
+                        this.lockedListeners = this.listeners.slice();
+                    }
+                    else {
+                        this.lockedListeners = new Array();
+                    }
+                }
+                this.lockedListeners = timapi.utils.ArrayAdditions.ArrayAdditions.remove(listener, this.lockedListeners);
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "removeListener");
+        }
+        notifyConnectCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyConnectCompleted");
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.connect);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.connectCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyConnectCompleted");
+        }
+        notifyDisconnected(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDisconnected");
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.disconnected(this.terminal, exception);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDisconnected");
+        }
+        notifyActivateCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyActivateCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyActivateCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.activate);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.activate);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.activateCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyActivateCompleted");
+        }
+        notifyApplicationInformationCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyApplicationInformationCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.applicationInformation);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.applicationInformation);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.applicationInformationCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyApplicationInformationCompleted");
+        }
+        notifyBalanceCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyBalanceCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyBalanceCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.balance);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.balance);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.balanceCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyBalanceCompleted");
+        }
+        notifyChangeSettingsCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyBalanceCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.changeSettings);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.changeSettings);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.changeSettingsCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyChangeSettingsCompleted");
+        }
+        notifyCommitCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCommitCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.commit);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.commit);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.commitCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCommitCompleted");
+        }
+        notifyCounterRequestCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCounterRequestCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCounterRequestCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.counterRequest);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.counterRequest);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.counterRequestCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCounterRequestCompleted");
+        }
+        notifyDeactivateCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDeactivateCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDeactivateCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.deactivate);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.deactivate);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.deactivateCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDeactivateCompleted");
+        }
+        notifyDccRatesCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDccRatesCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDccRatesCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.dccRates);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.dccRates);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.dccRatesCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyDeactivateCompleted");
+        }
+        notifyHardwareInformationCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyHardwareInformationCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyHardwareInformationCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.hardwareInformation);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.hardwareInformation);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.hardwareInformationCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyHardwareInformationCompleted");
+        }
+        notifyInitTransactionCompleted(exception, data) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyInitTransactionCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.initTransaction);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.initTransaction);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.initTransactionCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyInitTransactionCompleted");
+        }
+        notifyLoginCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyLoginCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.login);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.login);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.loginCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyLoginCompleted");
+        }
+        notifyLogoutCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyLogoutCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.logout);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.logout);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.logoutCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyLogoutCompleted");
+        }
+        notifyRebootCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyRebootCompleted", [exception]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.reboot);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.reboot);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.rebootCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyRebootCompleted");
+        }
+        notifyReconciliationCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReconciliationCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReconciliationCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.reconciliation);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.reconciliation);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.reconciliationCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReconciliationCompleted");
+        }
+        notifyReceiptRequestCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReceiptRequestCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReceiptRequestCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.receiptRequest);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.receiptRequest);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.receiptRequestCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReceiptRequestCompleted");
+        }
+        notifyReconfigCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReconfigCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReconfigCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.reconfig);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.reconfig);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.reconfigCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyReconfigCompleted");
+        }
+        notifyRollbackCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyRollbackCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyRollbackCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.rollback);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.rollback);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.rollbackCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyRollbackCompleted");
+        }
+        notifySoftwareUpdateCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifySoftwareUpdateCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifySoftwareUpdateCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.softwareUpdate);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.softwareUpdate);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.softwareUpdateCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifySoftwareUpdateCompleted");
+        }
+        notifySystemInformationCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifySystemInformationCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifySystemInformationCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.systemInformation);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.systemInformation);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.systemInformationCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifySystemInformationCompleted");
+        }
+        notifyTransactionCompleted(exception, data) {
+            if (TerminalBackend.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyTransactionCompleted", [exception, data]);
+            }
+            else {
+                TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyTransactionCompleted");
+            }
+            this.clearRunningRequestIf(timapi.constants.RequestType.transaction);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.transaction);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.transactionCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyTransactionCompleted");
+        }
+        notifyTerminalStatusChanged() {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyTerminalStatusChanged");
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.terminalStatusChanged(this.terminal);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "notifyTerminalStatusChanged");
+        }
+        notifyCloseReaderCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCloseReaderCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.closeReader);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.closeReader);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.closeReaderCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCloseReaderCompleted");
+        }
+        notifyOpenReaderCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyOpenReaderCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.openReader);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.openReader);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.openReaderCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyOpenReaderCompleted");
+        }
+        notifyEjectCardCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyEjectCardCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.ejectCard);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.ejectCard);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.ejectCardCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyEjectCardCompleted");
+        }
+        notifyOpenMaintenanceWindowCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyOpenMaintenanceWindowCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.openMaintenanceWindow);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.openMaintenanceWindow);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.openMaintenanceWindowCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyOpenMaintenanceWindowCompleted");
+        }
+        notifyCloseMaintenanceWindowCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCloseMaintenanceWindowCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.closeMaintenanceWindow);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.closeMaintenanceWindow);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.closeMaintenanceWindowCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCloseMaintenanceWindowCompleted");
+        }
+        notifyActivateServiceMenuCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyActivateServiceMenuCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.activateServiceMenu);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.activateServiceMenu);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.activateServiceMenuCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyActivateServiceMenuCompleted");
+        }
+        notifyOpenDialogModeCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyOpenDialogModeCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.openDialogMode);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.openDialogMode);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.openDialogModeCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyOpenDialogModeCompleted");
+        }
+        notifyCloseDialogModeCompleted(exception) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCloseDialogModeCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.closeDialogMode);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.closeDialogMode);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.closeDialogModeCompleted(event);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyCloseDialogModeCompleted");
+        }
+        notifyShowSignatureCaptureCompleted(exception, data) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyShowSignatureCaptureCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.showSignatureCapture);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.showSignatureCapture);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.showSignatureCaptureCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyShowSignatureCaptureCompleted");
+        }
+        notifyShowDialogCompleted(exception, data) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyShowDialogCompleted");
+            this.clearRunningRequestIf(timapi.constants.RequestType.showDialog);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.showDialog);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.showDialogCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyShowDialogCompleted");
+        }
+        notifyBalanceInquiryCompleted(exception, data) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyBalanceInquiryCompleted", [data]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.balanceInquiry);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.balanceInquiry);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.balanceInquiryCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyBalanceInquiryCompleted");
+        }
+        notifyQueryLoyaltyCompleted(exception, data) {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyQueryLoyaltyCompleted", [data]);
+            this.clearRunningRequestIf(timapi.constants.RequestType.queryLoyalty);
+            let event = new timapi.TimEvent(this.terminal, exception, timapi.constants.RequestType.queryLoyalty);
+            this.lockListeners();
+            try {
+                if (this.listeners !== undefined) {
+                    for (let listener of this.listeners) {
+                        listener.queryLoyaltyCompleted(event, data);
+                    }
+                }
+            }
+            finally {
+                this.unlockListeners();
+            }
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "notifyQueryLoyaltyCompleted");
+        }
+        get $commEndpoint() {
+            return this.commEndpoint;
+        }
+        isCommConnected() {
+            return this.commEndpoint !== undefined;
+        }
+        commConnect() {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "commConnect");
+            if (this.commEndpoint !== undefined) {
+                throw new Error("Already connected to this.terminal");
+            }
+            TerminalBackend.logger.log(timapi.logging.Level.INFO, "Connecting to this.terminal " + this.terminal.$settings.$terminalId);
+            this.commEndpoint = new timapi.SocketCommEndpoint(this, this.terminal.$settings);
+            this.commEndpoint.connect();
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "commConnect");
+        }
+        commDisconnect() {
+            TerminalBackend.logger.entering(TerminalBackend.CLASS_NAME, "commDisconnect");
+            if (this.commEndpoint !== undefined) {
+                this.commEndpoint.disconnect();
+                this.commEndpoint = undefined;
+            }
+            TerminalBackend.logger.exiting(TerminalBackend.CLASS_NAME, "commDisconnect");
+        }
+        hasGuide(guide) {
+            return this.terminal.$settings.$guides.has(guide);
+        }
+        hasAdminFunction(fnct) {
+            return (this.terminal.getFeatures() == undefined ||
+                this.terminal.getFeatures().$sixml.$adminFunctions.has(fnct));
+        }
+        hasStatusFunction(fnct) {
+            return (this.terminal.getFeatures() == undefined ||
+                this.terminal.getFeatures().$sixml.$statusFunctions.has(fnct));
+        }
+        hasFinancialFunction(fnct) {
+            return (this.terminal.getFeatures() == undefined ||
+                this.terminal.getFeatures().$sixml.$financialFunctions.has(fnct));
+        }
+        hasNonFinancialFunction(fnct) {
+            return (this.terminal.getFeatures() == undefined ||
+                this.terminal.getFeatures().$sixml.$nonFinancialFunctions.has(fnct));
+        }
+        hasDialogFunction(fnct) {
+            return (this.terminal.getFeatures() == undefined ||
+                this.terminal.getFeatures().$sixml.$dialogFunctions.has(fnct));
+        }
+        lockListeners() {
+            this.lockCountListeners++;
+        }
+        unlockListeners() {
+            this.lockCountListeners--;
+            if (this.lockCountListeners > 0) {
+                return;
+            }
+            if (this.lockedListeners !== undefined) {
+                this.listeners = this.lockedListeners;
+                this.lockedListeners = undefined;
+            }
+        }
+        connected() { }
+        disconnected() { }
+        messageReceived(message) { }
+        connectionFailed(error) { }
+    }
+    TerminalBackend.LOGGER_NAME = "TerminalBackend";
+    TerminalBackend.CLASS_NAME = "TerminalBackend";
+    TerminalBackend.logger = timapi.logging.Logger.getLogger(TerminalBackend.LOGGER_NAME);
+    timapi.TerminalBackend = TerminalBackend;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TerminalBackendSixml extends timapi.TerminalBackend {
+        constructor(terminal) {
+            super(terminal);
+            this.synchronousRequest = new timapi.SynchronousTerminalListener();
+            this.stateMachine = new timapi.statemachine.sixml.StateMachine(this);
+            this.nextSequenceNumber = 0;
+            this.m_xmlWriter = new timapi.protocol.XmlWriter(true, false);
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "<constructor>");
+            this.sixmlReceivedMessageHacks = new timapi.SixmlReceivedMessageHacks(terminal.$settings);
+            this.setDisconnectedTerminalStatus();
+            this.stateMachine.start();
+            if (this.synchronousRequest !== undefined) {
+                this.addListener(this.synchronousRequest);
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "<constructor>");
+        }
+        get $pendingAction() {
+            return this.pendingAction;
+        }
+        set $pendingAction(value) {
+            this.pendingAction = value;
+        }
+        dispose() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "dispose");
+            this.stateMachine.dispose();
+            this.synchronousRequest = undefined;
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "dispose");
+            super.dispose();
+        }
+        get $license() {
+            return this.license;
+        }
+        set $license(value) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "setLicense", [this.license]);
+            this.license = value;
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "setLicense");
+        }
+        isPendingRequestAllowed() {
+            switch (this.stateMachine.$pendingRequest) {
+                case timapi.constants.RequestType.activate:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.activate);
+                case timapi.constants.RequestType.applicationInformation:
+                    return this.hasStatusFunction(timapi.constants.StatusFunctions.applicationInformation);
+                case timapi.constants.RequestType.balance:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.balance);
+                case timapi.constants.RequestType.commit:
+                    return this.hasFinancialFunction(timapi.constants.FinancialTransactions.commit);
+                case timapi.constants.RequestType.counterRequest:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.counterRequest);
+                case timapi.constants.RequestType.dccRates:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.dccRates);
+                case timapi.constants.RequestType.deactivate:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.deactivate);
+                case timapi.constants.RequestType.hardwareInformation:
+                    return this.hasStatusFunction(timapi.constants.StatusFunctions.hardwareInformation);
+                case timapi.constants.RequestType.changeSettings:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.changeSettings);
+                case timapi.constants.RequestType.initTransaction:
+                    return this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.initTransaction);
+                case timapi.constants.RequestType.login:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.login);
+                case timapi.constants.RequestType.logout:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.logout);
+                case timapi.constants.RequestType.reboot:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.reboot);
+                case timapi.constants.RequestType.receiptRequest:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.receiptRequest);
+                case timapi.constants.RequestType.reconciliation:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.reconciliation);
+                case timapi.constants.RequestType.reconfig:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.reconfig);
+                case timapi.constants.RequestType.rollback:
+                    return this.hasFinancialFunction(timapi.constants.FinancialTransactions.rollback);
+                case timapi.constants.RequestType.softwareUpdate:
+                    return this.hasAdminFunction(timapi.constants.AdminFunctions.softwareUpdate);
+                case timapi.constants.RequestType.systemInformation:
+                    return this.hasStatusFunction(timapi.constants.StatusFunctions.systemInformation);
+                case timapi.constants.RequestType.transaction:
+                    switch (this.failTransactionType) {
+                        case timapi.constants.TransactionType.purchase:
+                            return this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchase);
+                        case timapi.constants.TransactionType.credit:
+                            return this.hasFinancialFunction(timapi.constants.FinancialTransactions.credit);
+                        case timapi.constants.TransactionType.reversal:
+                            return this.hasFinancialFunction(timapi.constants.FinancialTransactions.reversal);
+                        case timapi.constants.TransactionType.preAuthorization:
+                            return (this.hasGuide(timapi.constants.Guides.petrol) &&
+                                this.hasFinancialFunction(timapi.constants.FinancialTransactions.preAuthorization));
+                        case timapi.constants.TransactionType.finalizePurchase:
+                            return (this.hasGuide(timapi.constants.Guides.petrol) &&
+                                this.hasFinancialFunction(timapi.constants.FinancialTransactions.finalizePurchase));
+                        case timapi.constants.TransactionType.purchaseForcedAcceptance:
+                            return (this.hasGuide(timapi.constants.Guides.advancedRetail) &&
+                                this.hasFinancialFunction(timapi.constants.FinancialTransactions
+                                    .purchaseForcedAcceptance));
+                        case timapi.constants.TransactionType.cashAdvance:
+                            return (this.hasGuide(timapi.constants.Guides.advancedRetail) &&
+                                this.hasFinancialFunction(timapi.constants.FinancialTransactions.cashAdvance));
+                        case timapi.constants.TransactionType.purchaseWithCashback:
+                            return (this.hasGuide(timapi.constants.Guides.advancedRetail) &&
+                                this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchaseWithCashback));
+                        case timapi.constants.TransactionType.purchasePhoneAuthorized:
+                            return (this.hasGuide(timapi.constants.Guides.advancedRetail) &&
+                                this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchasePhoneAuthorized));
+                        default:
+                            return true;
+                    }
+                case timapi.constants.RequestType.openReader:
+                    return (this.hasGuide(timapi.constants.Guides.unattended) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.openReader));
+                case timapi.constants.RequestType.closeReader:
+                    return (this.hasGuide(timapi.constants.Guides.unattended) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.closeReader));
+                case timapi.constants.RequestType.ejectCard:
+                    return (this.hasGuide(timapi.constants.Guides.unattended) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.ejectCard));
+                case timapi.constants.RequestType.openMaintenanceWindow:
+                    return (this.hasGuide(timapi.constants.Guides.unattended) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.openMaintenanceWindow));
+                case timapi.constants.RequestType.closeMaintenanceWindow:
+                    return (this.hasGuide(timapi.constants.Guides.unattended) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.closeMaintenanceWindow));
+                case timapi.constants.RequestType.activateServiceMenu:
+                    return (this.hasGuide(timapi.constants.Guides.unattended) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.activateServiceMenu));
+                case timapi.constants.RequestType.openDialogMode:
+                    return (this.hasGuide(timapi.constants.Guides.dialog) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.openDialogMode));
+                case timapi.constants.RequestType.closeDialogMode:
+                    return (this.hasGuide(timapi.constants.Guides.dialog) &&
+                        this.hasAdminFunction(timapi.constants.AdminFunctions.closeDialogMode));
+                case timapi.constants.RequestType.showSignatureCapture:
+                    return (this.hasGuide(timapi.constants.Guides.DIALOG) &&
+                        this.hasDialogFunction(timapi.constants.DialogFunctions.showSignatureCapture));
+                case timapi.constants.RequestType.showDialog:
+                    return (this.hasGuide(timapi.constants.Guides.DIALOG) &&
+                        this.hasDialogFunction(timapi.constants.DialogFunctions.showDialog));
+                default:
+                    return true;
+            }
+        }
+        activate() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "activate");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.activate)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.activate);
+            this.$runningRequest = timapi.constants.RequestType.activate;
+            this.stateMachine.eventActivate();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "activate");
+            if (this.synchronousRequest.$lastActivateResponse == undefined) {
+                throw new Error("this.synchronousRequest.$lastActivateResponse == undefined");
+            }
+            return this.synchronousRequest.$lastActivateResponse;
+        }
+        activateAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "activateAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.activate)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.activate;
+            this.stateMachine.eventActivate();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "activateAsync");
+        }
+        applicationInformation() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "applicationInformation");
+            if (!this.hasStatusFunction(timapi.constants.StatusFunctions.applicationInformation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.applicationInformation);
+            this.$runningRequest = timapi.constants.RequestType.applicationInformation;
+            this.stateMachine.eventApplicationInformation();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "applicationInformation");
+        }
+        applicationInformationAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "applicationInformationAsync");
+            if (!this.hasStatusFunction(timapi.constants.StatusFunctions.applicationInformation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.applicationInformation;
+            this.stateMachine.eventApplicationInformation();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "applicationInformationAsync");
+        }
+        balance() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "balance");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.balance)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.balance);
+            this.$runningRequest = timapi.constants.RequestType.balance;
+            this.stateMachine.eventBalance();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "balance");
+            if (this.synchronousRequest.$lastBalanceResponse == undefined) {
+                throw new Error("this.synchronousRequest.$lastBalanceResponse == undefined");
+            }
+            return this.synchronousRequest.$lastBalanceResponse;
+        }
+        balanceAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "balanceAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.balance)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.balance;
+            this.stateMachine.eventBalance();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "balanceAsync");
+        }
+        cancel(silent, retainCard) {
+            if (arguments.length === 0) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "cancel");
+                if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.cancel)) {
+                    throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                }
+                this.stateMachine.$notificationCancel = new timapi.protocol.sixml.Notification_Cancel();
+                this.stateMachine.eventCancel();
+                TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "cancel");
+            }
+            else {
+                if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                    TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "cancel(silent,retainCard)", [silent, retainCard]);
+                }
+                else {
+                    TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "cancel(silent,retainCard)");
+                }
+                if (!(this.hasGuide(timapi.constants.Guides.petrol) ||
+                    this.hasGuide(timapi.constants.Guides.unattended))) {
+                    throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                }
+                if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.cancel)) {
+                    throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                }
+                let notification = new timapi.protocol.sixml.Notification_Cancel();
+                notification.silentFlag = silent;
+                notification.retainCardFlag = retainCard;
+                this.stateMachine.$notificationCancel = notification;
+                this.stateMachine.eventCancel();
+                TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "cancel(silnet,retainCard)");
+            }
+        }
+        changeSettings(settings) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "changeSettings", [settings]);
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.changeSettings)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest !== undefined) {
+                this.synchronousRequest.prepareWait(timapi.constants.RequestType.changeSettings);
+                let request = new timapi.protocol.sixml.Request_ChangeSettings();
+                request.settingsList = timapi.statemachine.sixml.ConvertTimApi2SIXml.convertSettings(settings);
+                this.stateMachine.$requestChangeSettings(request);
+                this.$runningRequest = timapi.constants.RequestType.changeSettings;
+                this.stateMachine.eventChangeSettings();
+                this.synchronousRequest.waitForRequestCompleted();
+                if (this.synchronousRequest.$lastException !== undefined) {
+                    throw this.synchronousRequest.$lastException;
+                }
+                TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "changeSettings");
+            }
+        }
+        changeSettingsAsync(settings) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "changeSettingsAsync", [settings]);
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.changeSettings)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            let request = new timapi.protocol.sixml.Request_ChangeSettings();
+            request.settingsList = timapi.statemachine.sixml.ConvertTimApi2SIXml.convertSettings(settings);
+            this.stateMachine.$requestChangeSettings(request);
+            this.$runningRequest = timapi.constants.RequestType.changeSettings;
+            this.stateMachine.eventChangeSettings();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "changeSettingsAsync");
+        }
+        commit() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "commit");
+            if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.commit)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest !== undefined) {
+                this.synchronousRequest.prepareWait(timapi.constants.RequestType.commit);
+                this.$runningRequest = timapi.constants.RequestType.commit;
+                this.stateMachine.eventCommit();
+                this.synchronousRequest.waitForRequestCompleted();
+                if (this.synchronousRequest.$lastException !== undefined) {
+                    throw this.synchronousRequest.$lastException;
+                }
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "commit");
+        }
+        commitAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "commitAsync");
+            if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.commit)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.commit;
+            this.stateMachine.eventCommit();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "commitAsync");
+        }
+        connect() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "connect");
+            this.stateMachine.eventConnect();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "connect");
+        }
+        disconnect() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "disconnect");
+            try {
+                this.stateMachine.eventDisconnect();
+            }
+            catch (ignore) {
+                console.log("exception ignore: $ignore");
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "disconnect");
+        }
+        counterRequest(type) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "counterRequest", type);
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.counterRequest)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.counterRequest);
+            let request = new timapi.protocol.sixml.Request_CounterRequest();
+            request.counterType = timapi.constants.CounterType.timApi2Protocol(type);
+            this.stateMachine.$requestCounterRequest(request);
+            this.$runningRequest = timapi.constants.RequestType.counterRequest;
+            this.stateMachine.eventCounterRequest();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "counterRequest");
+            if (this.synchronousRequest.$lastCountersRequestResponse == undefined) {
+                throw new Error("this.synchronousRequest.$lastCountersRequestResponse == undefined");
+            }
+            return this.synchronousRequest.$lastCountersRequestResponse;
+        }
+        counterRequestAsync(type) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "counterRequestAsync", type);
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.counterRequest)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            let request = new timapi.protocol.sixml.Request_CounterRequest();
+            request.counterType = timapi.constants.CounterType.timApi2Protocol(type);
+            this.stateMachine.$requestCounterRequest(request);
+            this.$runningRequest = timapi.constants.RequestType.counterRequest;
+            this.stateMachine.eventCounterRequest();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "counterRequestAsync");
+        }
+        deactivate() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "deactivate");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.deactivate)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest !== undefined) {
+                this.synchronousRequest.prepareWait(timapi.constants.RequestType.deactivate);
+                this.$runningRequest = timapi.constants.RequestType.deactivate;
+                this.stateMachine.eventDeactivate();
+                this.synchronousRequest.waitForRequestCompleted();
+                if (this.synchronousRequest.$lastException !== undefined) {
+                    throw this.synchronousRequest.$lastException;
+                }
+                TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "deactivate");
+                if (this.synchronousRequest.$lastDeactivateResponse == undefined) {
+                    throw new Error("this.synchronousRequest.$lastDeactivateResponse == undefined");
+                }
+                return this.synchronousRequest.$lastDeactivateResponse;
+            }
+        }
+        deactivateAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "deactivateAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.deactivate)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.deactivate;
+            this.stateMachine.eventDeactivate();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "deactivateAsync");
+        }
+        dccRates() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "dccRates");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.dccRates)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.dccRates);
+            this.$runningRequest = timapi.constants.RequestType.dccRates;
+            this.stateMachine.eventDccRates();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "dccRates");
+            if (this.synchronousRequest.$lastDccRatesResponse == undefined) {
+                throw new Error("this.synchronousRequest.$lastDccRatesResponse == undefined");
+            }
+            return this.synchronousRequest.$lastDccRatesResponse;
+        }
+        dccRatesAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "dccRatesAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.dccRates)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.dccRates;
+            this.stateMachine.eventDccRates();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "dccRatesAsync");
+        }
+        hardwareInformation() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "hardwareInformation");
+            if (!this.hasStatusFunction(timapi.constants.StatusFunctions.hardwareInformation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.hardwareInformation);
+            this.$runningRequest = timapi.constants.RequestType.hardwareInformation;
+            this.stateMachine.eventHardwareInformation();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "hardwareInformation");
+        }
+        hardwareInformationAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "hardwareInformationAsync");
+            if (!this.hasStatusFunction(timapi.constants.StatusFunctions.hardwareInformation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.hardwareInformation;
+            this.stateMachine.eventHardwareInformation();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "hardwareInformationAsync");
+        }
+        initTransaction(displayAmount, amount) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "initTransaction", [displayAmount, amount]);
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.initTransaction)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.initTransaction);
+            let request = new timapi.protocol.sixml.Request_InitTransaction();
+            request.displayAmountFlag = displayAmount;
+            request.amount = timapi.statemachine.sixml.ConvertSIXml2TimApi.convertAmountOrNull(amount);
+            this.stateMachine.$requestInitTransaction(request);
+            this.$runningRequest = timapi.constants.RequestType.initTransaction;
+            this.stateMachine.eventInitTransaction();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            let result = this.synchronousRequest.$lastInitTransactionResponse;
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "initTransaction", [result]);
+            if (result == undefined) {
+                throw new Error("result == undefined");
+            }
+            return result;
+        }
+        initTransactionAsync(displayAmount, amount) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "initTransactionAsync");
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.initTransaction)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            let request = new timapi.protocol.sixml.Request_InitTransaction();
+            request.displayAmountFlag = displayAmount;
+            request.amount = timapi.statemachine.sixml.ConvertSIXml2TimApi.convertAmountOrNull(amount);
+            this.stateMachine.$requestInitTransaction(request);
+            this.$runningRequest = timapi.constants.RequestType.initTransaction;
+            this.stateMachine.eventInitTransaction();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "initTransactionAsync");
+        }
+        login() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "login");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.login)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.login);
+            this.stateMachine.$requestLogin = timapi.statemachine.sixml.ConvertTimApi2SIXml.createLoginRequest(this.$terminal);
+            this.$runningRequest = timapi.constants.RequestType.login;
+            this.stateMachine.eventLogin();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "login");
+        }
+        loginAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "loginAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.login)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.stateMachine.$requestLogin =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.createLoginRequest(this.$terminal);
+            this.$runningRequest = timapi.constants.RequestType.login;
+            this.stateMachine.eventLogin();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "loginAsync");
+        }
+        logout() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "logout");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.logout)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.logout);
+            this.$runningRequest = timapi.constants.RequestType.logout;
+            this.stateMachine.eventLogout();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "logout");
+        }
+        logoutAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "logoutAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.logout)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.logout;
+            this.stateMachine.eventLogout();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "logoutAsync");
+        }
+        reboot() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "reboot");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.reboot)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.reboot);
+            this.$runningRequest = timapi.constants.RequestType.reboot;
+            this.stateMachine.eventReboot();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "reboot");
+        }
+        rebootAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "rebootAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.reboot)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.reboot;
+            this.stateMachine.eventReboot();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "rebootAsync");
+        }
+        reconciliation() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "reconciliation");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.reconciliation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined ||
+                this.synchronousRequest == undefined) {
+                throw new Error("this.synchronousRequest == undefined || this.synchronousRequest == undefined");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.reconciliation);
+            this.$runningRequest = timapi.constants.RequestType.reconciliation;
+            this.stateMachine.eventReconciliation();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "reconciliation");
+            if (this.synchronousRequest.$lastReconciliationResponse == undefined ||
+                this.synchronousRequest.$lastReconciliationResponse == undefined) {
+                throw new Error("this.synchronousRequest.$lastReconciliationResponse == undefined || this.synchronousRequest.$lastReconciliationResponse == undefined");
+            }
+            return this.synchronousRequest.$lastReconciliationResponse;
+        }
+        reconciliationAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "reconciliationAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.reconciliation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.reconciliation;
+            this.stateMachine.eventReconciliation();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "reconciliationAsync");
+        }
+        receiptRequest(receiptType) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "receiptRequest", [receiptType]);
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.receiptRequest)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.receiptRequest);
+            let request = new timapi.protocol.sixml.Request_ReceiptRequest();
+            request.receiptRequestType = timapi.constants.ReceiptRequestType.timApi2Protocol(receiptType);
+            this.stateMachine.$requestReceiptRequest = request;
+            this.$runningRequest = timapi.constants.RequestType.receiptRequest;
+            this.stateMachine.eventReceiptRequest();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "receiptRequest");
+            return this.synchronousRequest.$lastReceiptRequestResponse;
+        }
+        receiptRequestAsync(receiptType) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "receiptRequestAsync", [receiptType]);
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.receiptRequest)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            let request = new timapi.protocol.sixml.Request_ReceiptRequest();
+            request.receiptRequestType = timapi.constants.ReceiptRequestType.timApi2Protocol(receiptType);
+            this.stateMachine.$requestReceiptRequest = request;
+            this.$runningRequest = timapi.constants.RequestType.receiptRequest;
+            this.stateMachine.eventReceiptRequest();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "receiptRequestAsync");
+        }
+        reconfig() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "reconfig");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.reconfig)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.reconfig);
+            this.$runningRequest = timapi.constants.RequestType.reconfig;
+            this.stateMachine.eventReconfig();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "reconfig");
+            return this.synchronousRequest.$lastReconfigResponse;
+        }
+        reconfigAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "reconfigAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.reconfig)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.reconfig;
+            this.stateMachine.eventReconfig();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "reconfigAsync");
+        }
+        rollback() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "rollback");
+            if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.rollback)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.rollback);
+            this.$runningRequest = timapi.constants.RequestType.rollback;
+            this.stateMachine.eventRollback();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "rollback");
+            return this.synchronousRequest.$lastRollbackResponse;
+        }
+        rollbackAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "rollbackAsync");
+            if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.rollback)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.rollback;
+            this.stateMachine.eventRollback();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "rollbackAsync");
+        }
+        softwareUpdate() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "softwareUpdate");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.softwareUpdate)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.softwareInformation);
+            this.$runningRequest = timapi.constants.RequestType.softwareUpdate;
+            this.stateMachine.eventSoftwareUpdate();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "softwareUpdate");
+            return this.synchronousRequest.$lastSoftwareUpdateResponse;
+        }
+        softwareUpdateAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "softwareUpdateAsync");
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.softwareUpdate)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.softwareUpdate;
+            this.stateMachine.eventSoftwareUpdate();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "softwareUpdateAsync");
+        }
+        systemInformation() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "systemInformation");
+            if (!this.hasStatusFunction(timapi.constants.StatusFunctions.systemInformation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.systemInformation);
+            this.$runningRequest = timapi.constants.RequestType.systemInformation;
+            this.stateMachine.eventSystemInformation();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "systemInformation");
+            return this.synchronousRequest.$lastSystemInformationResponse;
+        }
+        systemInformationAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "systemInformationAsync");
+            if (!this.hasStatusFunction(timapi.constants.StatusFunctions.systemInformation)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.systemInformation;
+            this.stateMachine.eventSystemInformation();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "systemInformationAsync");
+        }
+        transaction(type, amountOrTransactionRequest) {
+            if (amountOrTransactionRequest instanceof timapi.Amount) {
+                return this.transactionWithAmount(type, amountOrTransactionRequest);
+            }
+            else {
+                return this.transactionWithTransactionRequest(type.amountOrTransactionRequest);
+            }
+        }
+        transactionWithAmount(type, amount) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transaction(TransactionType,Amount)", [type, amount]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transaction(TransactionType,Amount)");
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.transaction);
+            let terminal = this.$terminal;
+            let request = new timapi.TransactionRequest();
+            request.$amount = amount;
+            if (terminal.$merchantOptions != undefined && terminal.$merchantOptions.length > 0) {
+                request.$merchantOptions = new Array(terminal.$merchantOptions);
+            }
+            request.$userId = terminal.$userId;
+            request.$transactionData = terminal.$transactionData;
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transaction(TransactionType,Amount)");
+            return this.synchronousRequest.$lastTransactionResponse;
+        }
+        transactionWithTransactionRequest(type, request) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transaction(TransactionType,TransactionRequest)", [type, request]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transaction(TransactionType,TransactionRequest)");
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.transaction);
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transaction(TransactionType,TransactionRequest)");
+            return this.synchronousRequest.$lastTransactionResponse;
+        }
+        transactionAsync(type, amountOrTransactionRequest) {
+            if (amountOrTransactionRequest instanceof timapi.Amount) {
+                this.transactionAsyncWithAmount(type, amountOrTransactionRequest);
+            }
+            else if (amountOrTransactionRequest instanceof timapi.TransactionRequest) {
+                this.transactionWithTransactionRequest(type, amountOrTransactionRequest);
+            }
+        }
+        transactionAsyncWithAmount(type, amount) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionAsync(TransactionType,Amount)", [type, amount]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionAsync(TransactionType,Amount)");
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            let terminal = this.$terminal;
+            let request = new timapi.TransactionRequest();
+            request.$amount = amount;
+            if (terminal.$merchantOptions != undefined && terminal.$merchantOptions.length > 0) {
+                request.$merchantOptions = new Array(terminal.$merchantOptions);
+            }
+            request.$userId = terminal.$userId;
+            request.$transactionData = terminal.$transactionData;
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transactionAsync(TransactionType,Amount)");
+        }
+        transactionAsyncWithTransactionRequest(type, request) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionAsync(TransactionType,TransactionRequest)", [type, request]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionAsync(TransactionType,TransactionRequest)");
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transactionAsync(TransactionType,TransactionRequest)");
+        }
+        transactionTip(type, amount, tipAmount) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionTip(TransactionType,Amount,Amount)", [type, amount, tipAmount]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionTip(TransactionType,Amount,Amount)");
+            }
+            if (!this.hasGuide(timapi.constants.Guides.gastro)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.transaction);
+            let terminal = this.$terminal;
+            let request = new timapi.TransactionRequest();
+            request.$amount = amount;
+            request.$tipAmount = tipAmount;
+            if (terminal.$merchantOptions != undefined && terminal.$merchantOptions.length > 0) {
+                request.$merchantOptions = new Array(terminal.$merchantOptions);
+            }
+            request.$userId = terminal.$userId;
+            request.$transactionData = terminal.$transactionData;
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transactionTip(TransactionType,Amount,Amount)");
+            return this.synchronousRequest.$lastTransactionResponse;
+        }
+        transactionTipAsync(type, amount, tipAmount) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionTipAsync(TransactionType,Amount,Amount)", [type, amount]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionTipAsync(TransactionType,Amount,Amount)");
+            }
+            if (!this.hasGuide(timapi.constants.Guides.gastro)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            let terminal = this.$terminal;
+            let request = new timapi.TransactionRequest();
+            request.$amount = amount;
+            request.$tipAmount = tipAmount;
+            if (terminal.$merchantOptions != undefined && terminal.$merchantOptions.length > 0) {
+                request.$merchantOptions = new Array(terminal.$merchantOptions);
+            }
+            request.$userId = terminal.$userId;
+            request.$transactionData = terminal.$transactionData;
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transactionTipAsync(TransactionType,Amount,Amount)");
+        }
+        transactionCashback(type, amount, amountOther) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionCashback(TransactionType,Amount,Amount)", [type, amount, amountOther]);
+            if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.transaction);
+            let terminal = this.$terminal;
+            let request = new timapi.TransactionRequest();
+            request.$amount = amount;
+            request.$amountOther = amountOther;
+            if (terminal.$merchantOptions.lenngth > 0) {
+                request.$merchantOptions = new Array(terminal.$merchantOptions);
+            }
+            request.$userId = terminal.$userId;
+            request.$transactionData = terminal.$transactionData;
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transactionCashback(TransactionType,Amount,Amount)");
+            return this.synchronousRequest.$lastTransactionResponse;
+        }
+        transactionCashbackAsync(type, amount, amountOther) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "transactionCashbackAsync(TransactionType,Amount,Amount)", [type, amount, amountOther]);
+            if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.failTransactionType = type;
+            this.checkTransactionTypeAllowed(type);
+            let terminal = this.$terminal;
+            let request = new timapi.TransactionRequest();
+            request.$amount = amount;
+            request.$amountOther = amountOther;
+            if (terminal.$merchantOptions != undefined && terminal.$merchantOptions.length > 0) {
+                request.$merchantOptions = new Array(terminal.$merchantOptions);
+            }
+            request.$userId = terminal.$userId;
+            request.$transactionData = terminal.$transactionData;
+            this.stateMachine.$requestTransaction =
+                timapi.statemachine.sixml.ConvertTimApi2SIXml.convertTransactionRequest(this.$terminal, request, type, this.$terminal.$settings.$guides);
+            this.$runningRequest = timapi.constants.RequestType.transaction;
+            this.stateMachine.eventTransaction();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "transactionCashbackAsync(TransactionType,Amount,Amount)");
+        }
+        closeReader() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "closeReader");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.closeReader)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.closeReader);
+            this.$runningRequest = timapi.constants.RequestType.closeReader;
+            this.stateMachine.eventCloseReader();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "closeReader");
+        }
+        closeReaderAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "closeReaderAsync");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.closeReader)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.closeReader;
+            this.stateMachine.eventCloseReader();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "closeReaderAsync");
+        }
+        openReader() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "openReader");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.openReader)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.openReader);
+            this.$runningRequest = timapi.constants.RequestType.openReader;
+            this.stateMachine.eventOpenReader();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "openReader");
+        }
+        openReaderAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "openReaderAsync");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.openReader)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.openReader;
+            this.stateMachine.eventOpenReader();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "openReaderAsync");
+        }
+        ejectCard() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "ejectCard");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.ejectCard)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.ejectCard);
+            this.$runningRequest = timapi.constants.RequestType.ejectCard;
+            this.stateMachine.eventEjectCard();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "ejectCard");
+        }
+        ejectCardAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "ejectCardAsync");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.ejectCard)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.ejectCard;
+            this.stateMachine.eventEjectCard();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "ejectCardAsync");
+        }
+        openMaintenanceWindow() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "openMaintenanceWindow");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.openMaintenanceWindow)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return;
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.openMaintenanceWindow);
+            this.$runningRequest = timapi.constants.RequestType.openMaintenanceWindow;
+            this.stateMachine.eventOpenMaintenanceWindow();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "openMaintenanceWindow");
+        }
+        openMaintenanceWindowAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "openMaintenanceWindowAsync");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.openMaintenanceWindow)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.openMaintenanceWindow;
+            this.stateMachine.eventOpenMaintenanceWindow();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "openMaintenanceWindowAsync");
+        }
+        closeMaintenanceWindow() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "closeMaintenanceWindow");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.closeMaintenanceWindow)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                throw new Error("synchronousRequest is undefined or null");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.closeMaintenanceWindow);
+            this.$runningRequest = timapi.constants.RequestType.closeMaintenanceWindow;
+            this.stateMachine.eventCloseMaintenanceWindow();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "closeMaintenanceWindow");
+        }
+        closeMaintenanceWindowAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "closeMaintenanceWindowAsync");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.closeMaintenanceWindow)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.closeMaintenanceWindow;
+            this.stateMachine.eventCloseMaintenanceWindow();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "closeMaintenanceWindowAsync");
+        }
+        holdCommit() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "holdCommit");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.holdCommit)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            this.stateMachine.eventHoldCommit();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "holdCommit");
+        }
+        activateServiceMenu() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "activateServiceMenu");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.activateServiceMenu)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                throw new Error("synchronousRequest is undefined or null");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.activateServiceMenu);
+            this.$runningRequest = timapi.constants.RequestType.activateServiceMenu;
+            this.stateMachine.eventActivateServiceMenu();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "activateServiceMenu");
+        }
+        activateServiceMenuAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "activateServiceMenuAsync");
+            if (!this.hasGuide(timapi.constants.Guides.unattended)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.activateServiceMenu)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.activateServiceMenu;
+            this.stateMachine.eventActivateServiceMenu();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "activateServiceMenuAsync");
+        }
+        openDialogMode() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "openDialogMode");
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.openDialogMode)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                throw new Error("synchronousRequest is undefined or null");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.openDialogMode);
+            this.$runningRequest = timapi.constants.RequestType.openDialogMode;
+            this.stateMachine.eventOpenDialogMode();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "openDialogMode");
+        }
+        openDialogModeAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "openDialogModeAsync");
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.openDialogMode)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.openDialogMode;
+            this.stateMachine.eventOpenDialogMode();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "openDialogModeAsync");
+        }
+        closeDialogMode() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "closeDialogMode");
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.closeDialogMode)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                throw new Error("synchronousRequest is undefined or null");
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.closeDialogMode);
+            this.$runningRequest = timapi.constants.RequestType.closeDialogMode;
+            this.stateMachine.eventCloseDialogMode();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "closeDialogMode");
+        }
+        closeDialogModeAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "closeDialogModeAsync");
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasAdminFunction(timapi.constants.AdminFunctions.closeDialogMode)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.closeDialogMode;
+            this.stateMachine.eventCloseDialogMode();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "closeDialogModeAsync");
+        }
+        showSignatureCapture(request) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "showSignatureCapture", [request]);
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasDialogFunction(timapi.constants.DialogFunctions.showSignatureCapture)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.showSignatureCapture);
+            this.stateMachine.$requestShowSignatureCapture(timapi.statemachine.sixml.ConvertSIXml2TimApi.convertRequestShowSignatureCapture(request));
+            this.$runningRequest = timapi.constants.RequestType.showSignatureCapture;
+            this.stateMachine.eventShowSignatureCapture();
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                throw new Error("synchronousRequest is undefined or null");
+            }
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "showSignatureCapture");
+            return this.synchronousRequest.$lastShowSignatureCaptureResponse;
+        }
+        showSignatureCaptureAsync(request) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "showSignatureCaptureAsync", [request]);
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasDialogFunction(timapi.constants.DialogFunctions.showSignatureCapture)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.stateMachine.$requestShowSignatureCapture(timapi.statemachine.sixml.ConvertSIXml2TimApi.convertRequestShowSignatureCapture(request));
+            this.$runningRequest = timapi.constants.RequestType.showSignatureCapture;
+            this.stateMachine.eventShowSignatureCapture();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "showSignatureCaptureAsync");
+        }
+        showDialog(request) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "showDialog", [request]);
+            if (!this.hasGuide(timapi.constants.Guides.DIALOG)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasDialogFunction(timapi.constants.DialogFunctions.showDialog)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.showDialog);
+            this.stateMachine.$requestShowDialog(timapi.statemachine.sixml.ConvertTimApi2SIXml.convertRequestShowDialog(request));
+            this.$runningRequest = timapi.constants.RequestType.showDialog;
+            this.stateMachine.eventShowDialog();
+            if (this.synchronousRequest == undefined) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "synchronousRequest is undefined or null");
+                return undefined;
+            }
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "showDialog");
+            return this.synchronousRequest.$lastShowDialogResponse;
+        }
+        showDialogAsync(request) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "showDialogAsync", [request]);
+            if (!this.hasGuide(timapi.constants.Guides.dialog)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasDialogFunction(timapi.constants.DialogFunctions.showDialog)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.stateMachine.$requestShowDialog(timapi.statemachine.sixml.ConvertTimApi2SIXml.convertRequestShowDialog(request));
+            this.$runningRequest = timapi.constants.RequestType.showDialog;
+            this.stateMachine.eventShowDialog();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "showDialogAsync");
+        }
+        balanceInquiry() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "balanceInquiry");
+            if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.balanceInquiry)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.balanceInquiry);
+            this.$runningRequest = timapi.constants.RequestType.balanceInquiry;
+            this.stateMachine.eventBalanceInquiry();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            let response = this.synchronousRequest.$lastBalanceInquiryResponse;
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "balanceInquiry", [response]);
+            return response;
+        }
+        balanceInquiryAsync() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "balanceInquiryAsync");
+            if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.balanceInquiry)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.$runningRequest = timapi.constants.RequestType.balanceInquiry;
+            this.stateMachine.eventBalanceInquiry();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "balanceInquiryAsync");
+        }
+        queryLoyalty(retainCard, loyaltyInfoType) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "queryLoyalty", [retainCard, loyaltyInfoType]);
+            if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.queryLoyalty)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            this.synchronousRequest.prepareWait(timapi.constants.RequestType.queryLoyalty);
+            let request = new timapi.protocol.sixml.Request_QueryLoyalty();
+            request.retainCardFlag = retainCard;
+            request.loyaltyInfoType = loyaltyInfoType;
+            this.stateMachine.$requestQueryLoyalty(request);
+            this.$runningRequest = timapi.constants.RequestType.queryLoyalty;
+            this.stateMachine.eventQueryLoyalty();
+            this.synchronousRequest.waitForRequestCompleted();
+            if (this.synchronousRequest.$lastException !== undefined) {
+                throw this.synchronousRequest.$lastException;
+            }
+            let response = this.synchronousRequest.$lastQueryLoyaltyResponse;
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "queryLoyalty", [response]);
+            return response;
+        }
+        queryLoyaltyAsync(retainCard, loyaltyInfoType) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "queryLoyaltyAsync", [retainCard, loyaltyInfoType]);
+            if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (!this.hasNonFinancialFunction(timapi.constants.NonFinancialTransactions.queryLoyalty)) {
+                throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+            }
+            if (this.hasRunningRequest()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.requestPending);
+            }
+            let request = new timapi.protocol.sixml.Request_QueryLoyalty();
+            request.retainCardFlag = retainCard;
+            request.loyaltyInfoType = loyaltyInfoType;
+            this.stateMachine.$requestQueryLoyalty(request);
+            this.$runningRequest = timapi.constants.RequestType.queryLoyalty;
+            this.stateMachine.eventQueryLoyalty();
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "queryLoyaltyAsync");
+        }
+        failRunningRequest(exception) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "failRunningRequest", [exception, timapi.constants.RequestType[this.$runningRequest]]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "failRunningRequest");
+            }
+            if (this.hasRunningRequest()) {
+                this.failRequest(this.$runningRequest, exception);
+            }
+            this.failPendingRequest(exception);
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "failRunningRequest");
+        }
+        failPendingRequest(exception) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "failPendingRequest", [exception]);
+            let pendingRequest = this.stateMachine.$pendingRequest;
+            if (pendingRequest == undefined) {
+                return;
+            }
+            try {
+                this.stateMachine.actionClearPendingEvent();
+            }
+            catch (ignore) {
+                console.log(ignore);
+            }
+            this.failRequest(pendingRequest, exception);
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "failPendingRequest");
+        }
+        failRequest(requestType, exception) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "failRequest", [timapi.constants.RequestType[requestType], exception]);
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "failRequest");
+            }
+            TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "Fail request ", [timapi.constants.RequestType[requestType]]);
+            switch (requestType) {
+                case timapi.constants.RequestType.activate:
+                    this.notifyActivateCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.applicationInformation:
+                    this.notifyApplicationInformationCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.balance:
+                    this.notifyBalanceCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.commit:
+                    this.notifyCommitCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.counterRequest:
+                    this.notifyCounterRequestCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.dccRates:
+                    this.notifyDccRatesCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.deactivate:
+                    this.notifyDeactivateCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.hardwareInformation:
+                    this.notifyHardwareInformationCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.changeSettings:
+                    this.notifyChangeSettingsCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.initTransaction:
+                    this.notifyInitTransactionCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.login:
+                    this.notifyLoginCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.logout:
+                    this.notifyLogoutCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.reboot:
+                    this.notifyRebootCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.receiptRequest:
+                    this.notifyReceiptRequestCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.reconciliation:
+                    this.notifyReconciliationCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.reconfig:
+                    this.notifyReconfigCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.rollback:
+                    this.notifyRollbackCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.softwareUpdate:
+                    this.notifySoftwareUpdateCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.systemInformation:
+                    this.notifySystemInformationCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.transaction:
+                    this.notifyTransactionCompleted(exception, new timapi.TransactionResponse(this.failTransactionType, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, new Map(), new Array()));
+                    break;
+                case timapi.constants.RequestType.openReader:
+                    this.notifyOpenReaderCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.closeReader:
+                    this.notifyCloseReaderCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.ejectCard:
+                    this.notifyEjectCardCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.openMaintenanceWindow:
+                    this.notifyOpenMaintenanceWindowCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.closeMaintenanceWindow:
+                    this.notifyCloseMaintenanceWindowCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.activateServiceMenu:
+                    this.notifyActivateServiceMenuCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.openDialogMode:
+                    this.notifyOpenDialogModeCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.closeDialogMode:
+                    this.notifyCloseDialogModeCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.showSignatureCapture:
+                    this.notifyShowSignatureCaptureCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.showDialog:
+                    this.notifyShowDialogCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.balanceInquiry:
+                    this.notifyBalanceInquiryCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.queryLoyalty:
+                    this.notifyQueryLoyaltyCompleted(exception, undefined);
+                    break;
+                case timapi.constants.RequestType.connect:
+                    this.notifyConnectCompleted(exception);
+                    break;
+                case timapi.constants.RequestType.softwareInformation:
+                    this.notifySoftwareUpdateCompleted(exception, undefined);
+                    break;
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "failRequest");
+        }
+        consumeNextSequenceNumber() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "consumeNextSequenceNumber");
+            if (this.nextSequenceNumber === Number.MAX_VALUE) {
+                this.nextSequenceNumber = 1;
+                return Number.MAX_VALUE;
+            }
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "consumeNextSequenceNumber", [this.nextSequenceNumber + 1]);
+            }
+            else {
+                TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "consumeNextSequenceNumber");
+            }
+            this.nextSequenceNumber += 1;
+            return this.nextSequenceNumber;
+        }
+        hasPendingMessage() {
+            return this.pendingMessage !== undefined;
+        }
+        sendMessage(message) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "sendMessage");
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "sendMessage");
+            }
+            if (!this.isCommConnected()) {
+                throw new timapi.TimException(timapi.constants.ResultCode.TIM_COMMUNICATION_FAILURE);
+            }
+            let channel = 1;
+            let node = this.m_xmlWriter.writeXml(message.toXmlNode());
+            TerminalBackendSixml.logger.log(timapi.logging.Level.FINE, "Sending message: ", node);
+            let data = timapi.utils.StringEncoder.toArrayBuffer(node);
+            try {
+                this.$commEndpoint.sendMessage(new Uint8Array(data));
+                this.pendingMessage = message;
+            }
+            catch (e) {
+                throw new timapi.TimException(timapi.constants.ResultCode.TIM_COMMUNICATION_FAILURE);
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "sendMessage");
+        }
+        sendNotification(message) {
+            if (TerminalBackendSixml.logger.isLoggable(timapi.logging.Level.FINEST)) {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "sendNotification");
+            }
+            else {
+                TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "sendNotification");
+            }
+            if (!this.isCommConnected()) {
+                throw new Error("Not connected to terminal");
+            }
+            let channel = 1;
+            let node = this.m_xmlWriter.writeXml(message.toXmlNode());
+            let data = timapi.utils.StringEncoder.toArrayBuffer(node);
+            this.$commEndpoint.sendMessage(new Uint8Array(data));
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "sendNotification");
+        }
+        setDisconnectedTerminalStatus() {
+            this.terminalStatus = new timapi.TerminalStatus(new Array(), timapi.constants.ConnectionStatus.disconnected, timapi.constants.ManagementStatus.closed, timapi.constants.CardReaderStatus.cardReaderEmpty, timapi.constants.TransactionStatus.idle, undefined, false, undefined, false);
+        }
+        connected() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "connected");
+            try {
+                this.notifyConnectCompleted(undefined);
+                this.stateMachine.eventConnected();
+            }
+            catch (ignore) {
+                console.log(ignore);
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "connected");
+        }
+        connectionFailed(error) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "connectionFailed");
+            try {
+                this.notifyConnectCompleted(new timapi.TimException(error));
+                this.stateMachine.eventConnectFailed();
+            }
+            catch (ignore) {
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "connectionFailed");
+        }
+        disconnected() {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "disconnected");
+            let exception = new timapi.TimException(timapi.constants.ResultCode.TIM_COMMUNICATION_FAILURE);
+            try {
+                this.failRunningRequest(exception);
+                this.setDisconnectedTerminalStatus();
+                this.notifyDisconnected(exception);
+                this.stateMachine.eventDisconnect();
+            }
+            catch (ignore) {
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "disconnected");
+        }
+        checkTransactionTypeAllowed(type) {
+            switch (type) {
+                case timapi.constants.TransactionType.purchase:
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchase)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.credit:
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.credit)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.reversal:
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.reversal)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.preAuthorization:
+                    if (!this.hasGuide(timapi.constants.Guides.petrol)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.preAuthorization)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.finalizePurchase:
+                    if (!this.hasGuide(timapi.constants.Guides.petrol)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.finalizePurchase)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.purchaseForcedAcceptance:
+                    if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchaseForcedAcceptance)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.cashAdvance:
+                    if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.cashAdvance)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.purchaseWithCashback:
+                    if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchaseWithCashback)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+                case timapi.constants.TransactionType.purchasePhoneAuthorized:
+                    if (!this.hasGuide(timapi.constants.Guides.advancedRetail)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    if (!this.hasFinancialFunction(timapi.constants.FinancialTransactions.purchasePhoneAuthorized)) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    break;
+            }
+        }
+        connectionFailed(error) {
+            TerminalBackendSixml.logger.entering(TerminalBackendSixml.CLASS_NAME, "connectionFailed");
+            try {
+                this.notifyConnectCompleted(new timapi.TimException(error));
+                this.stateMachine.eventConnectFailed();
+            }
+            catch (_a) {
+                console.log("error occured");
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "connectionFailed");
+        }
+        disconnected() {
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "disconnected");
+            let exception = new timapi.TimException(timapi.constants.ResultCode.timCommunicationFailure);
+            try {
+                this.failRunningRequest(exception);
+                this.setDisconnectedTerminalStatus();
+                this.notifyDisconnected(exception);
+                this.stateMachine.eventDisconnect();
+            }
+            catch (_a) {
+                console.log("error occured");
+            }
+            TerminalBackendSixml.logger.exiting(TerminalBackendSixml.CLASS_NAME, "disconnected");
+        }
+        messageReceived(data) {
+            let channel = data[0];
+            try {
+                switch (channel) {
+                    case 1:
+                        let node = timapi.utils.SixmlParser.parseSIXMLFromUint8Array(data.subarray(1));
+                        let messageType = node.name;
+                        if (messageType === "sixml:Notification") {
+                            let notification = new timapi.protocol.sixml.Notification(node);
+                            if (notification.function === timapi.protocol.constants.Function.keepAlive) {
+                                TerminalBackendSixml.logger.log(timapi.logging.Level.FINEST, "Received keep alive:", node);
+                            }
+                            else {
+                                TerminalBackendSixml.logger.log(timapi.logging.Level.FINER, "Received notification: " + timapi.utils.StringHelper.fromUInt8Array(data), node);
+                            }
+                        }
+                        else {
+                            TerminalBackendSixml.logger.log(timapi.logging.Level.FINE, "Received message: " + timapi.utils.StringHelper.fromUInt8Array(data), node);
+                        }
+                        this.stateMachine.$lastReceivedMessage = node;
+                        this.stateMachine.armKeepAliveTimeout();
+                        if (messageType === "sixml:Notification") {
+                            let notification = new timapi.protocol.sixml.Notification(node);
+                            if (notification.functionGroup === timapi.protocol.constants.FunctionGroup.status) {
+                                if (notification.function === timapi.protocol.constants.Function.terminalStatus) {
+                                    this.stateMachine.eventNotificationStatusChanged();
+                                }
+                                else if (notification.function === timapi.protocol.constants.Function.licenseChanged) {
+                                    this.stateMachine.eventNotificationLicenseChanged();
+                                }
+                                else if (notification.function === timapi.protocol.constants.Function.keepAlive) {
+                                    this.stateMachine.eventNotificationKeepAlive();
+                                }
+                                else {
+                                    this.stateMachine.eventResponseInvalid();
+                                }
+                            }
+                            else {
+                                this.stateMachine.eventResponseInvalid();
+                            }
+                        }
+                        else if (messageType === "sixml:Response") {
+                            if (this.pendingMessage == undefined) {
+                                this.stateMachine.eventResponseInvalid();
+                            }
+                            else {
+                                let response = new timapi.protocol.sixml.Response(node);
+                                if (response.sequenceNumber === this.pendingMessage.sequenceNumber
+                                    && response.functionGroup === this.pendingMessage.functionGroup
+                                    && response.function === this.pendingMessage.function) {
+                                    this.pendingMessage = null;
+                                    if (response.resultCode == 0) {
+                                        this.stateMachine.eventResponseRequest();
+                                    }
+                                    else {
+                                        this.stateMachine.eventResponseError();
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                    case 2:
+                        break;
+                    case 3:
+                        break;
+                    case 4:
+                        break;
+                    default:
+                        break;
+                }
+            }
+            catch (e) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.SEVERE, "Failed to parse received message", e);
+                if (channel == 1) {
+                    TerminalBackendSixml.logger.log(timapi.logging.Level.SEVERE, String.fromCharCode(data.subarray(1)));
+                }
+                try {
+                    stateMachine.eventResponseInvalid();
+                }
+                catch (ignore) {
+                    console.log(ignore);
+                }
+            }
+        }
+        checkPendingAction() {
+            if (this.pendingAction !== timapi.SocketAction.none) {
+                TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "Pending request present, waiting");
+                return;
+            }
+            switch (this.pendingAction) {
+                case timapi.SocketAction.transaction:
+                    switch (this.state) {
+                        case SocketState.disconnected:
+                            this.connect();
+                            break;
+                        case SocketState.loggedOut:
+                            this.login();
+                            break;
+                        case SocketState.loggedIn:
+                            this.activate();
+                            break;
+                        case SocketState.open:
+                            this.pendingAction = timapi.SocketAction.none;
+                            this.purchase();
+                            break;
+                    }
+                    break;
+                case timapi.SocketAction.disconnect:
+                    switch (this.state) {
+                        case SocketState.open:
+                            this.deactivate();
+                            break;
+                        case SocketState.loggedIn:
+                            this.logout();
+                            break;
+                        case SocketState.loggedOut:
+                            this.pendingAction = timapi.SocketAction.none;
+                            this.disconnect();
+                            break;
+                    }
+            }
+        }
+        activate() {
+            if (this.state !== SocketState.loggedIn) {
+                return;
+            }
+            let sequenceNumber = this.nextSeqNum;
+            this.nextSeqNum += 1;
+            let messageBuilder = new Array();
+            messageBuilder.push("<?xml version=\"1.0\" ?>");
+            messageBuilder.push("<sixml:Request Function=\"Activate\" FunctionGroup=\"Admin\" SequenceNumber=\"" + sequenceNumber + "\" xmlns:sixml=\"http://www.six-payment-services.com/\">");
+            messageBuilder.push("<sixml:UsrId>" + this.userId + "</sixml:UsrId>");
+            messageBuilder.push("</sixml:Request>");
+            TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "Send message Admin/Activate " + messageBuilder.join("").length + " bytes");
+            this.state = SocketState.activating;
+            this.runningRequest = timapi.constants.RequestType.activate;
+            this.sendMessage(messageBuilder.join(""));
+        }
+        purchase() {
+            if (this.state !== SocketState.open) {
+                return;
+            }
+            let sequenceNumber = this.nextSeqNum;
+            this.nextSeqNum += 1;
+            let messageBuilder = new Array();
+            messageBuilder.push("<?xml version=\"1.0\" ?>");
+            messageBuilder.push("<sixml:Request Function=\"Purchase\" FunctionGroup=\"FinTransaction\" SequenceNumber=\"" + sequenceNumber + "\" xmlns:sixml=\"http://www.six-payment-services.com/\">");
+            messageBuilder.push("<sixml:UsrId>" + this.userId + "</sixml:UsrId>");
+            messageBuilder.push("<sixml:Amount Currency=\"CHF\" Exponent=\"2\">" + this.transactionAmount + "</sixml:Amount>");
+            messageBuilder.push("<sixml:TransactionData EcrSeqCounter=\"1\"/>");
+            messageBuilder.push("</sixml:Request>");
+            TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "Send message FinTransaction/Purchase " + messageBuilder.join("").length + " bytes");
+            this.state = SocketState.transaction;
+            this.runningRequest = { funcGroup: "FinTransaction", func: "Purchase", seqNum: sequenceNumber };
+            this.sendMessage(messageBuilder.join(""));
+        }
+        deactivate() {
+            if (this.state !== SocketState.open) {
+                return;
+            }
+            let sequenceNumber = this.nextSeqNum;
+            this.nextSeqNum += 1;
+            let messageBuilder = new Array();
+            messageBuilder.push("<?xml version=\"1.0\" ?>");
+            messageBuilder.push("<sixml:Request Function=\"Deactivate\" FunctionGroup=\"Admin\" SequenceNumber=\"" + sequenceNumber + "\" xmlns:sixml=\"http://www.six-payment-services.com/\">");
+            messageBuilder.push("</sixml:Request>");
+            TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "Send message Admin/Deactivate " + messageBuilder.join("").length + " bytes");
+            this.state = SocketState.deactivating;
+            this.runningRequest = { funcGroup: "Admin", func: "Deactivate", seqNum: sequenceNumber };
+            this.sendMessage(messageBuilder.join(""));
+        }
+        logout() {
+            if (this.state !== SocketState.loggedIn) {
+                return;
+            }
+            let sequenceNumber = this.nextSeqNum;
+            this.nextSeqNum += 1;
+            let messageBuilder = new Array();
+            messageBuilder.push("<?xml version=\"1.0\" ?>");
+            messageBuilder.push("<sixml:Request Function=\"Logout\" FunctionGroup=\"Admin\" SequenceNumber=\"" + sequenceNumber + "\" xmlns:sixml=\"http://www.six-payment-services.com/\">");
+            messageBuilder.push("</sixml:Request>");
+            TerminalBackendSixml.logger.log(timapi.logging.Level.INFO, "Send message Admin/Logout " + messageBuilder.join("").length + " bytes");
+            this.state = SocketState.loggedOut;
+            this.runningRequest = { funcGroup: "Admin", func: "Logout", seqNum: sequenceNumber };
+            this.sendMessage(messageBuilder.join(""));
+        }
+    }
+    TerminalBackendSixml.LOGGER_NAME = "TerminalBackendSixml";
+    TerminalBackendSixml.CLASS_NAME = "TerminalBackendSixml";
+    TerminalBackendSixml.logger = timapi.logging.Logger.getLogger(TerminalBackendSixml.LOGGER_NAME);
+    timapi.TerminalBackendSixml = TerminalBackendSixml;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TerminalSettings {
+        constructor() {
+            this.$logDir = "";
+            this.logRetainFileCount = 7;
+            this.logFileCountPerArchive = 30;
+            this.logRetainArchiveCount = 3;
+            this.terminalId = "";
+            this.$connectionMode = timapi.constants.ConnectionMode.broadcast;
+            this.connectionIPString = "";
+            this.connectionIPPort = 7784;
+            this.broadcastInterface = "";
+            this.$protocolType = timapi.constants.ProtocolType.sixml;
+            this.integratorId = "0";
+            this.guides = new Set();
+            this.guides.add(timapi.constants.Guides.retail);
+            this.manufacturerFlags = 0;
+            this.autoConnect = false;
+            this.autoLogin = false;
+            this.fetchBrands = false;
+            this.autoActivate = false;
+            this.autoCommit = true;
+            this.autoDeactivate = false;
+            this.autoLogout = false;
+            this.autoDisconnect = false;
+            this.autoShiftManagement = true;
+            this.autoShutterManagement = true;
+            this.cardInsertionTimeout = 60;
+            this.cardRemovalTimeout = 60;
+            this.commitTimeout = 60;
+            this.dcc = true;
+            this.partialApproval = false;
+            this.proceedTimeout = 60;
+            this.tipAllowed = false;
+            this.enableKeepAlive = true;
+            this.useSaferPay = false;
+            this.enabledHacks = new Set();
+        }
+        TerminalSettings(settings) {
+            this.logDir = settings.logDir;
+            this.logRetainFileCount = settings.logRetainFileCount;
+            this.logFileCountPerArchive = settings.logFileCountPerArchive;
+            this.logRetainArchiveCount = settings.logRetainArchiveCount;
+            this.terminalId = settings.terminalId;
+            this.connectionMode = settings.connectionMode;
+            this.connectionIPString = settings.connectionIPString;
+            this.connectionIPPort = settings.connectionIPPort;
+            this.broadcastInterface = settings.broadcastInterface;
+            this.protocolType = settings.protocolType;
+            this.integratorId = settings.integratorId;
+            this.guides = settings.guides;
+            this.manufacturerFlags = settings.manufacturerFlags;
+            this.autoConnect = settings.autoConnect;
+            this.autoLogin = settings.autoLogin;
+            this.fetchBrands = settings.fetchBrands;
+            this.autoActivate = settings.autoActivate;
+            this.autoCommit = settings.autoCommit;
+            this.autoDeactivate = settings.autoDeactivate;
+            this.autoLogout = settings.autoLogout;
+            this.autoDisconnect = settings.autoDisconnect;
+            this.autoShiftManagement = settings.autoShiftManagement;
+            this.autoShutterManagement = settings.autoShutterManagement;
+            this.cardInsertionTimeout = settings.cardInsertionTimeout;
+            this.cardRemovalTimeout = settings.cardRemovalTimeout;
+            this.commitTimeout = settings.commitTimeout;
+            this.dcc = settings.dcc;
+            this.partialApproval = settings.partialApproval;
+            this.proceedTimeout = settings.proceedTimeout;
+            this.tipAllowed = settings.tipAllowed;
+            this.enableKeepAlive = settings.enableKeepAlive;
+            this.enabledHacks = new Set(settings.enabledHacks);
+        }
+        get $logDir() {
+            return this.logDir;
+        }
+        set $logDir(value) {
+            this.logDir = value;
+        }
+        get $logRetainFileCount() {
+            return this.logRetainFileCount;
+        }
+        set $logRetainFileCount(value) {
+            this.logRetainFileCount = value;
+        }
+        get $logFileCountPerArchive() {
+            return this.logFileCountPerArchive;
+        }
+        set $logFileCountPerArchive(value) {
+            if (value < 0) {
+                throw new Error("value must be >= 0");
+            }
+            this.logFileCountPerArchive = value;
+        }
+        get $logRetainArchiveCount() {
+            return this.logRetainArchiveCount;
+        }
+        set $logRetainArchiveCount(value) {
+            if (value < 0) {
+                throw new Error("value must be >= 0");
+            }
+            this.logRetainArchiveCount = value;
+        }
+        get $terminalId() {
+            return this.terminalId;
+        }
+        set $terminalId(value) {
+            this.terminalId = value;
+        }
+        get $connectionMode() {
+            return this.connectionMode;
+        }
+        set $connectionMode(value) {
+            this.connectionMode = value;
+        }
+        get $connectionIPString() {
+            return this.connectionIPString;
+        }
+        set $connectionIPString(value) {
+            this.connectionIPString = value;
+        }
+        get $connectionIPPort() {
+            return this.connectionIPPort;
+        }
+        set $connectionIPPort(value) {
+            this.connectionIPPort = value;
+        }
+        get $broadcastInterface() {
+            return this.broadcastInterface;
+        }
+        set $broadcastInterface(value) {
+            this.broadcastInterface = value;
+        }
+        get $protocolType() {
+            return this.protocolType;
+        }
+        set $protocolType(value) {
+            this.protocolType = value;
+        }
+        get $integratorId() {
+            return this.integratorId;
+        }
+        set $integratorId(value) {
+            this.integratorId = value;
+        }
+        get $guides() {
+            return this.guides;
+        }
+        set $guides(value) {
+            if (!value.has(timapi.constants.Guides.retail)) {
+                throw new Error("value should include retail");
+            }
+            this.guides = value;
+        }
+        get $manufacturerFlags() {
+            return this.manufacturerFlags;
+        }
+        set $manufacturerFlags(value) {
+            this.manufacturerFlags = value;
+        }
+        get $autoConnect() {
+            return this.autoConnect;
+        }
+        set $autoConnect(value) {
+            this.autoConnect = value;
+        }
+        get $autoLogin() {
+            return this.autoLogin;
+        }
+        set $autoLogin(value) {
+            this.autoLogin = value;
+        }
+        get $fetchBrands() {
+            return this.fetchBrands;
+        }
+        set $fetchBrands(value) {
+            this.fetchBrands = value;
+        }
+        get $autoActivate() {
+            return this.autoActivate;
+        }
+        set $autoActivate(value) {
+            this.autoActivate = value;
+        }
+        get $autoCommit() {
+            return this.autoCommit;
+        }
+        set $autoCommit(value) {
+            this.autoCommit = value;
+        }
+        get $autoDeactivate() {
+            return this.autoDeactivate;
+        }
+        set $autoDeactivate(value) {
+            this.autoDeactivate = value;
+        }
+        get $autoLogout() {
+            return this.autoLogout;
+        }
+        set $autoLogout(value) {
+            this.autoLogout = value;
+        }
+        get $autoDisconnect() {
+            return this.autoDisconnect;
+        }
+        set $autoDisconnect(value) {
+            this.autoDisconnect = value;
+        }
+        get $autoShiftManagement() {
+            return this.autoShiftManagement;
+        }
+        set $autoShiftManagement(value) {
+            this.autoShiftManagement = value;
+        }
+        get $autoShutterManagement() {
+            return this.autoShutterManagement;
+        }
+        set $autoShutterManagement(value) {
+            this.autoShutterManagement = value;
+        }
+        get $cardInsertionTimeout() {
+            return this.cardInsertionTimeout;
+        }
+        set $cardInsertionTimeout(value) {
+            if (value < 1) {
+                throw new Error("value must be >= 1");
+            }
+            this.cardInsertionTimeout = value;
+        }
+        get $cardRemovalTimeout() {
+            return this.cardRemovalTimeout;
+        }
+        set $cardRemovalTimeout(value) {
+            if (value < 1) {
+                throw new Error("value must be >= 1");
+            }
+            this.cardRemovalTimeout = value;
+        }
+        get $commitTimeout() {
+            return this.commitTimeout;
+        }
+        set $commitTimeout(value) {
+            if (value < 1) {
+                throw new Error("value must be >= 1");
+            }
+            this.commitTimeout = value;
+        }
+        get $dcc() {
+            return this.dcc;
+        }
+        set $dcc(value) {
+            this.dcc = value;
+        }
+        get $partialApproval() {
+            return this.partialApproval;
+        }
+        set $partialApproval(value) {
+            this.partialApproval = value;
+        }
+        get $proceedTimeout() {
+            return this.proceedTimeout;
+        }
+        set $proceedTimeout(value) {
+            if (value < 1) {
+                throw new Error("value must be >= 1");
+            }
+            this.proceedTimeout = value;
+        }
+        get $tipAllowed() {
+            return this.tipAllowed;
+        }
+        set $tipAllowed(value) {
+            this.tipAllowed = value;
+        }
+        get $enableKeepAlive() {
+            return this.enableKeepAlive;
+        }
+        set $enableKeepAlive(value) {
+            this.enableKeepAlive = value;
+        }
+        get $enabledHacks() {
+            return this.enabledHacks;
+        }
+        loadConfigFile(filename) {
+            return new Map();
+        }
+    }
+    timapi.TerminalSettings = TerminalSettings;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TerminalSettingsImmutable {
+        constructor(settings) {
+            if (settings == undefined) {
+                throw new Error("settings cannot be undefined or null");
+            }
+            this.logDir = settings.$logDir;
+            this.logRetainFileCount = settings.$logRetainFileCount;
+            this.logFileCountPerArchive = settings.$logFileCountPerArchive;
+            this.logRetainArchiveCount = settings.$logRetainArchiveCount;
+            this.terminalId = settings.$terminalId;
+            this.connectionMode = settings.$connectionMode;
+            this.connectionIPString = settings.$connectionIPString;
+            this.connectionIPPort = settings.$connectionIPPort;
+            this.broadcastInterface = settings.$broadcastInterface;
+            this.protocolType = settings.$protocolType;
+            this.integratorId = settings.$integratorId;
+            this.guides = settings.$guides;
+            this.manufacturerFlags = settings.$manufacturerFlags;
+            this.autoConnect = settings.$autoConnect;
+            this.autoLogin = settings.$autoLogin;
+            this.fetchBrands = settings.$fetchBrands;
+            this.autoActivate = settings.$autoActivate;
+            this.autoCommit = settings.$autoCommit;
+            this.autoDeactivate = settings.$autoDeactivate;
+            this.autoLogout = settings.$autoLogout;
+            this.autoDisconnect = settings.$autoDisconnect;
+            this.autoShiftManagement = settings.$autoShiftManagement;
+            this.autoShutterManagement = settings.$autoShutterManagement;
+            this.cardInsertionTimeout = settings.$cardInsertionTimeout;
+            this.cardRemovalTimeout = settings.$cardRemovalTimeout;
+            this.commitTimeout = settings.$commitTimeout;
+            this.dcc = settings.$dcc;
+            this.partialApproval = settings.$partialApproval;
+            this.proceedTimeout = settings.$proceedTimeout;
+            this.tipAllowed = settings.$tipAllowed;
+            this.enableKeepAlive = settings.$enableKeepAlive;
+            this.enabledHacks = new Set(settings.$enabledHacks);
+        }
+        get $logDir() {
+            return this.logDir;
+        }
+        get $logRetainFileCount() {
+            return this.logRetainFileCount;
+        }
+        get $logFileCountPerArchive() {
+            return this.logFileCountPerArchive;
+        }
+        get $logRetainArchiveCount() {
+            return this.logRetainArchiveCount;
+        }
+        get $terminalId() {
+            return this.terminalId;
+        }
+        get $connectionMode() {
+            return this.connectionMode;
+        }
+        get $connectionIPString() {
+            return this.connectionIPString;
+        }
+        get $connectionIPPort() {
+            return this.connectionIPPort;
+        }
+        get $broadcastInterface() {
+            return this.broadcastInterface;
+        }
+        get $protocolType() {
+            return this.protocolType;
+        }
+        get $integratorId() {
+            return this.integratorId;
+        }
+        get $guides() {
+            return this.guides;
+        }
+        get $manufacturerFlags() {
+            return this.manufacturerFlags;
+        }
+        get $autoConnect() {
+            return this.autoConnect;
+        }
+        get $autoLogin() {
+            return this.autoLogin;
+        }
+        get $fetchBrands() {
+            return this.fetchBrands;
+        }
+        get $autoActivate() {
+            return this.autoActivate;
+        }
+        get $autoCommit() {
+            return this.autoCommit;
+        }
+        get $autoDeactivate() {
+            return this.autoDeactivate;
+        }
+        get $autoLogout() {
+            return this.autoLogout;
+        }
+        get $autoDisconnect() {
+            return this.autoDisconnect;
+        }
+        get $autoShiftManagement() {
+            return this.autoShiftManagement;
+        }
+        get $autoShutterManagement() {
+            return this.autoShutterManagement;
+        }
+        get $cardInsertionTimeout() {
+            return this.cardInsertionTimeout;
+        }
+        get $cardRemovalTimeout() {
+            return this.cardRemovalTimeout;
+        }
+        get $commitTimeout() {
+            return this.commitTimeout;
+        }
+        get $dcc() {
+            return this.dcc;
+        }
+        get $partialApproval() {
+            return this.partialApproval;
+        }
+        get $proceedTimeout() {
+            return this.proceedTimeout;
+        }
+        get $tipAllowed() {
+            return this.tipAllowed;
+        }
+        get $enableKeepAlive() {
+            return this.enableKeepAlive;
+        }
+        get $enabledHacks() {
+            return this.enabledHacks;
+        }
+    }
+    timapi.TerminalSettingsImmutable = TerminalSettingsImmutable;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TerminalStatus {
+        constructor($displayContent = new Array(), $connectionStatus, $managementStatus, $cardReaderStatus, $transactionStatus, $sleepModeStatus, $receiptInformation, $cardData, $swUpdateAvailable) {
+            this.displayContent = $displayContent.slice();
+            this.connectionStatus = $connectionStatus;
+            this.managementStatus = $managementStatus;
+            this.cardReaderStatus = $cardReaderStatus;
+            this.transactionStatus = $transactionStatus;
+            this.sleepModeStatus = $sleepModeStatus;
+            this.receiptInformation = $receiptInformation;
+            this.cardData = $cardData;
+            this.swUpdateAvailable = $swUpdateAvailable;
+        }
+        get $displayContent() {
+            return this.displayContent;
+        }
+        set $displayContent(value) {
+            this.displayContent = value;
+        }
+        get $connectionStatus() {
+            return this.connectionStatus;
+        }
+        get $managementStatus() {
+            return this.managementStatus;
+        }
+        get $cardReaderStatus() {
+            return this.cardReaderStatus;
+        }
+        get $transactionStatus() {
+            return this.transactionStatus;
+        }
+        get $sleepModeStatus() {
+            return this.sleepModeStatus;
+        }
+        get $receiptInformation() {
+            return this.receiptInformation;
+        }
+        get $cardData() {
+            return this.cardData;
+        }
+        get $swUpdateAvailable() {
+            return this.swUpdateAvailable;
+        }
+    }
+    timapi.TerminalStatus = TerminalStatus;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TimEvent {
+        constructor($terminal, $exception, $requestType) {
+            this.terminal = $terminal;
+            this.exception = $exception;
+            this.requestType = $requestType;
+        }
+        get $terminal() {
+            return this.terminal;
+        }
+        get $exception() {
+            return this.exception;
+        }
+        get $requestType() {
+            return this.requestType;
+        }
+    }
+    timapi.TimEvent = TimEvent;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TimException extends Error {
+        constructor($resultCode, $errorMessage, $nativeError, $ppInfo, $additionalErrorInfo = new Map(), $printData) {
+            super();
+            this.resultCode = $resultCode;
+            this.additionalErrorInfo = new Map();
+            this.errorMessage = $errorMessage;
+            this.nativeError = $nativeError;
+            this.ppInfo = $ppInfo;
+            this.additionalErrorInfo = $additionalErrorInfo;
+            this.printData = $printData;
+        }
+        getLocalizedMessage() {
+            return this.errorMessage;
+        }
+        get $errorMessage() {
+            return this.errorMessage;
+        }
+        get $resultCode() {
+            return this.resultCode;
+        }
+        getErrorMessage() {
+            return this.errorMessage;
+        }
+        get $nativeError() {
+            return this.nativeError;
+        }
+        get $ppInfo() {
+            return this.ppInfo;
+        }
+        get $additionalErrorInfo() {
+            return this.additionalErrorInfo;
+        }
+        get $printData() {
+            return this.printData;
+        }
+    }
+    timapi.TimException = TimException;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class Total {
+        constructor($count, $amountSum, $trxDetails) {
+            this.count = $count;
+            this.amountSum = $amountSum;
+            this.trxDetails = $trxDetails.slice();
+        }
+        get $count() {
+            return this.count;
+        }
+        get $amountSum() {
+            return this.amountSum;
+        }
+        get $trxDetails() {
+            return this.trxDetails;
+        }
+    }
+    timapi.Total = Total;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TransactionData {
+        constructor(data) {
+            if (data == undefined) {
+                this.dccAllowed = undefined;
+                this.trxOriginalDate = undefined;
+                this.ecrSeqCounter = undefined;
+                this.partialApprovalAllowed = undefined;
+                this.transRef = undefined;
+                this.transSeq = undefined;
+                this.cardRef = undefined;
+                this.acqId = undefined;
+                this.acqTransRef = undefined;
+                this.trmTransRef = undefined;
+                this.tipAllowed = undefined;
+                this.phoneAuthCode = undefined;
+            }
+            else {
+                this.dccAllowed = data.dccAllowed;
+                this.trxOriginalDate = data.trxOriginalDate;
+                this.ecrSeqCounter = data.ecrSeqCounter;
+                this.transRef = data.transRef;
+                this.transSeq = data.transSeq;
+                this.cardRef = data.cardRef;
+                this.acqId = data.acqId;
+                this.acqTransRef = data.acqTransRef;
+                this.trmTransRef = data.trmTransRef;
+                this.tipAllowed = data.tipAllowed;
+                this.phoneAuthCode = data.phoneAuthCode;
+            }
+        }
+        get $dccAllowed() {
+            return this.dccAllowed;
+        }
+        set $dccAllowed(value) {
+            this.dccAllowed = value;
+        }
+        get $trxOriginalDate() {
+            return this.trxOriginalDate;
+        }
+        set $trxOriginalDate(value) {
+            this.trxOriginalDate = value;
+        }
+        get $ecrSeqCounter() {
+            return this.ecrSeqCounter;
+        }
+        set $ecrSeqCounter(value) {
+            this.ecrSeqCounter = value;
+        }
+        get $partialApprovalAllowed() {
+            return this.partialApprovalAllowed;
+        }
+        set $partialApprovalAllowed(value) {
+            this.partialApprovalAllowed = value;
+        }
+        get $transRef() {
+            return this.transRef;
+        }
+        set $transRef(value) {
+            this.transRef = value;
+        }
+        get $transSeq() {
+            return this.transSeq;
+        }
+        set $transSeq(value) {
+            this.transSeq = value;
+        }
+        get $cardRef() {
+            return this.cardRef;
+        }
+        set $cardRef(value) {
+            this.cardRef = value;
+        }
+        get $acqId() {
+            return this.acqId;
+        }
+        set $acqId(value) {
+            this.acqId = value;
+        }
+        get $acqTransRef() {
+            return this.acqTransRef;
+        }
+        set $acqTransRef(value) {
+            this.acqTransRef = value;
+        }
+        get $trmTransRef() {
+            return this.trmTransRef;
+        }
+        set $trmTransRef(value) {
+            this.trmTransRef = value;
+        }
+        get $tipAllowed() {
+            return this.tipAllowed;
+        }
+        set $tipAllowed(value) {
+            this.tipAllowed = value;
+        }
+        get $phoneAuthCode() {
+            return this.phoneAuthCode;
+        }
+        set $phoneAuthCode(value) {
+            this.phoneAuthCode = value;
+        }
+        get $language() {
+            return this.language;
+        }
+        set $language(value) {
+            this.language = value;
+        }
+    }
+    timapi.TransactionData = TransactionData;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TransactionInformation {
+        constructor($posEntryMode, $cvm, $merchantAction, $authCode, $timeStamp, $transRef, $transSeq, $acqId, $signatureInformation, $trmTransRef, $acqTransRef) {
+            this.posEntryMode = $posEntryMode;
+            this.cvm = $cvm;
+            this.merchantAction = $merchantAction;
+            this.authCode = $authCode;
+            this.timeStamp = $timeStamp;
+            this.transRef = $transRef;
+            this.transSeq = $transSeq;
+            this.acqId = $acqId;
+            this.signatureInformation = $signatureInformation;
+            this.trmTransRef = $trmTransRef;
+            this.acqTransRef = $acqTransRef;
+        }
+        get $posEntryMode() {
+            return this.posEntryMode;
+        }
+        get $cvm() {
+            return this.cvm;
+        }
+        get $merchantAction() {
+            return this.merchantAction;
+        }
+        get $authCode() {
+            return this.authCode;
+        }
+        get $timeStamp() {
+            return this.timeStamp;
+        }
+        get $transRef() {
+            return this.transRef;
+        }
+        get $transSeq() {
+            return this.transSeq;
+        }
+        get $acqId() {
+            return this.acqId;
+        }
+        get $signatureInformation() {
+            return this.signatureInformation;
+        }
+        get $trmTransRef() {
+            return this.trmTransRef;
+        }
+        get $acqTransRef() {
+            return this.acqTransRef;
+        }
+    }
+    timapi.TransactionInformation = TransactionInformation;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TransactionRequest {
+        constructor(request) {
+            if (request !== undefined) {
+                this.userId = request.userId;
+                this.amount = request.amount;
+                this.transactionData = new timapi.TransactionData(request.transactionData);
+                this.merchantOptions = request.merchantOptions.slice();
+                this.tipAmount = request.tipAmount;
+                if (request.basket != undefined) {
+                    this.basket = request.basket.slice();
+                }
+                this.additionalInfo = request.additionalInfo;
+                this.amountOther = request.amountOther;
+            }
+            else {
+                this.merchantOptions = new Array();
+                this.additionalInfo = new Map();
+                this.basket = undefined;
+            }
+        }
+        get $userId() {
+            return this.userId;
+        }
+        set $userId(value) {
+            this.userId = value;
+        }
+        get $amount() {
+            return this.amount;
+        }
+        set $amount(value) {
+            this.amount = value;
+        }
+        get $transactionData() {
+            return this.transactionData;
+        }
+        set $transactionData(value) {
+            this.transactionData = value;
+        }
+        get $merchantOptions() {
+            return this.merchantOptions;
+        }
+        set $merchantOptions(value) {
+            this.merchantOptions = value;
+        }
+        get $additionalInfo() {
+            return this.additionalInfo;
+        }
+        set $additionalInfo(value) {
+            this.additionalInfo = value;
+        }
+        set $basket(value) {
+            this.basket = value;
+        }
+        get $basket() {
+            return this.basket;
+        }
+        get $tipAmount() {
+            return this.tipAmount;
+        }
+        set $tipAmount(value) {
+            this.tipAmount = value;
+        }
+        get $amountOther() {
+            return this.amountOther;
+        }
+        set $amountOther(value) {
+            this.amountOther = value;
+        }
+    }
+    timapi.TransactionRequest = TransactionRequest;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TransactionResponse {
+        constructor($transactionType, $amount, $amountDue, $amountDcc, $amountSaldo, $transactionInformation, $dccDisclaimer, $cardData, $printData, $tipAmount, $additionalInfo, $basket) {
+            this.transactionType = $transactionType;
+            this.amount = $amount;
+            this.amountDue = $amountDue;
+            this.amountDcc = $amountDcc;
+            this.amountSaldo = $amountSaldo;
+            this.transactionInformation = $transactionInformation;
+            this.dccDisclaimer = $dccDisclaimer;
+            this.cardData = $cardData;
+            this.printData = $printData;
+            this.tipAmount = $tipAmount;
+            this.additionalInfo = $additionalInfo;
+            if ($basket != undefined) {
+                this.basket = $basket.slice();
+            }
+        }
+        get $transactionType() {
+            return this.transactionType;
+        }
+        get $amount() {
+            return this.amount;
+        }
+        set $amount(value) {
+            this.amount = value;
+        }
+        get $amountDue() {
+            return this.amountDue;
+        }
+        get $amountDcc() {
+            return this.amountDcc;
+        }
+        get $amountSaldo() {
+            return this.amountSaldo;
+        }
+        get $transactionInformation() {
+            return this.transactionInformation;
+        }
+        get $dccDisclaimer() {
+            return this.dccDisclaimer;
+        }
+        get $cardData() {
+            return this.cardData;
+        }
+        get $printData() {
+            return this.printData;
+        }
+        get $tipAmount() {
+            return this.tipAmount;
+        }
+        get $additionalInfo() {
+            return this.additionalInfo;
+        }
+        get $basket() {
+            if (this.basket != undefined) {
+                return this.basket.slice();
+            }
+            return undefined;
+        }
+    }
+    timapi.TransactionResponse = TransactionResponse;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TrxDetail {
+        constructor($dccFlag, $transactionType, $count, $amountSum) {
+            this.dccFlag = $dccFlag;
+            this.transactionType = $transactionType;
+            this.count = $count;
+            this.amountSum = $amountSum;
+        }
+        get $dccFlag() {
+            return this.dccFlag;
+        }
+        get $transactionType() {
+            return this.transactionType;
+        }
+        get $count() {
+            return this.count;
+        }
+        get $amountSum() {
+            return this.amountSum;
+        }
+    }
+    timapi.TrxDetail = TrxDetail;
+})(timapi || (timapi = {}));
+timapi.constants.AdjustmentResult = {
+    ok: 0,
+    failRequestToLate: 1,
+    failAmountToHigh: 2
+};
+timapi.constants.CardReader = {
+    icc: 0,
+    cl: 1,
+    ms: 2
+};
+timapi.constants.CouponRejectionReason = {
+    alreadyRedeemed: 0,
+    articleDelisted: 1,
+    campaignExpired: 2,
+    campaignCancelled: 3,
+    other: 4
+};
+timapi.constants.NgvMode = {
+    mandatory: 0,
+    allowedWithFallback: 1,
+    notAllowed: 2
+};
+timapi.constants.ResourceParameterType = {
+    codeCheckType: 0,
+    codeCheckKeyId: 1,
+    codeCheckData: 2,
+    regularDataQueryType: 3,
+    regularData: 4,
+    petrolCardData1: 5,
+    petrolCardData2: 6,
+    petrolCardData3: 7
+};
+timapi.constants.ResponseType = {
+    positive: 0,
+    negative: 1,
+    cardRemoval: 2,
+    timeout: 3
+};
+var timapi;
+(function (timapi) {
+    var utils;
+    (function (utils) {
+        var Color;
+        (function (Color_1) {
+            class Color {
+                constructor($colorCode) {
+                    this.colorCode = $colorCode;
+                }
+                get $blue() {
+                    return this.blue;
+                }
+                get $green() {
+                    return this.green;
+                }
+                get $red() {
+                    return this.red;
+                }
+                get $colorCode() {
+                    return this.colorCode;
+                }
+            }
+            Color.black = new Color("ffffff");
+            Color.white = new Color("000000");
+            Color_1.Color = Color;
+        })(Color = utils.Color || (utils.Color = {}));
+    })(utils = timapi.utils || (timapi.utils = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var utils;
+    (function (utils) {
+        class SixmlParser {
+            static parseSIXMLFromUint8Array(data) {
+                let message = utils.StringHelper.fromUInt8Array(data);
+                let parser = new DOMParser();
+                let xmlNode = parser.parseFromString(message, "application/xml");
+                if (xmlNode == undefined) {
+                    throw Error("invalid xml");
+                }
+                let rootNode = xmlNode.children[0];
+                let node = SixmlParser.constructSixmlNode(rootNode);
+                return node;
+            }
+            static constructSixmlNode(basicNode) {
+                let node = new timapi.protocol.XmlNode(basicNode.nodeName);
+                if (basicNode.attributes != undefined) {
+                    let attrLentgh = basicNode.attributes.length;
+                    if (attrLentgh != undefined) {
+                        for (let i = 0; i < attrLentgh; i++) {
+                            let entry = basicNode.attributes.item(i);
+                            let value = entry.value;
+                            let key = entry.name;
+                            node.attributes.set(key, value);
+                        }
+                    }
+                }
+                if (basicNode.parentNode != undefined && basicNode.parentNode.parentNode != undefined) {
+                    node.textContent = basicNode.textContent;
+                }
+                basicNode.childNodes.forEach(function (child) {
+                    if (child.hasChildNodes) {
+                        let sixmlChild = SixmlParser.constructSixmlNode(child);
+                        node.children.push(sixmlChild);
+                        return sixmlChild;
+                    }
+                });
+                return node;
+            }
+        }
+        utils.SixmlParser = SixmlParser;
+    })(utils = timapi.utils || (timapi.utils = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var utils;
+    (function (utils) {
+        class StringEncoder {
+            static toArrayBuffer(input) {
+                let buffer = new ArrayBuffer(input.length);
+                let bufView = new Uint8Array(buffer);
+                for (let i = 0, strLen = input.length; i < strLen; i++) {
+                    bufView[i] = input.charCodeAt(i);
+                }
+                return buffer;
+            }
+        }
+        utils.StringEncoder = StringEncoder;
+    })(utils = timapi.utils || (timapi.utils = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var utils;
+    (function (utils) {
+        class StringHelper {
+            static fromUInt8Array(input) {
+                let out = "";
+                let i = 0;
+                let len = input.length;
+                let c;
+                let char2;
+                let char3;
+                while (i < len) {
+                    c = input[i++];
+                    switch (c >> 4) {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                            out += String.fromCharCode(c);
+                            break;
+                        case 12:
+                        case 13:
+                            char2 = input[i++];
+                            out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
+                            break;
+                        case 14:
+                            char2 = input[i++];
+                            char3 = input[i++];
+                            out += String.fromCharCode(((c & 0x0F) << 12) |
+                                ((char2 & 0x3F) << 6) |
+                                ((char3 & 0x3F) << 0));
+                            break;
+                    }
+                }
+                return out;
+            }
+            static makeString(input) {
+                let strRepresentation = "";
+                if (Array.isArray(input)) {
+                    strRepresentation = "[ ";
+                    for (var i = 0; i < input.length; i++) {
+                        strRepresentation += this.makeString(input[i]);
+                    }
+                    strRepresentation += " ]";
+                }
+                else if (input.toString() === "[object Object]") {
+                    let keys = Object.getOwnPropertyNames(input);
+                    if (keys.length == 0) {
+                        return "0";
+                    }
+                    strRepresentation = "{ ";
+                    let lastIndex = keys.length - 1;
+                    for (let idx = 0; idx < keys.length; idx++) {
+                        let key = keys[idx];
+                        strRepresentation += key + ":" + this.makeString(input[key]);
+                        if (idx != lastIndex) {
+                            strRepresentation += ", ";
+                        }
+                    }
+                    strRepresentation += " }";
+                }
+                else if (input.toString() === "[object Map]") {
+                    strRepresentation = "{ ";
+                    for (let [key, value] of input) {
+                        strRepresentation += key + "=\"" + this.makeString(value) + "\" ";
+                    }
+                    strRepresentation += " }";
+                }
+                else {
+                    strRepresentation = input.toString();
+                }
+                return strRepresentation;
+            }
+        }
+        utils.StringHelper = StringHelper;
+    })(utils = timapi.utils || (timapi.utils = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var constants;
+    (function (constants) {
+        let ConnectionMode;
+        (function (ConnectionMode) {
+            ConnectionMode[ConnectionMode["broadcast"] = 0] = "broadcast";
+            ConnectionMode[ConnectionMode["onFixIp"] = 1] = "onFixIp";
+        })(ConnectionMode = constants.ConnectionMode || (constants.ConnectionMode = {}));
+    })(constants = timapi.constants || (timapi.constants = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class CustomReceiptFormatter {
+        setLineFormatsCardholder(lines) {
+            this.lineFormatsCardholder = [];
+            for (let line of lines) {
+                this.lineFormatsCardholder.push(line);
+            }
+        }
+        setLineFormatsMerchant(lines) {
+            this.lineFormatsMerchant = [];
+            for (let line of lines) {
+                this.lineFormatsMerchant.push(line);
+            }
+        }
+        setLineFormatsSaldo(lines) {
+            this.lineFormatsSaldo = [];
+            for (let line of lines) {
+                this.lineFormatsSaldo.push(line);
+            }
+        }
+        formatReceipt(terminal, receiptItems) {
+            let itemsCardholder = this.filterRecipient(receiptItems, timapi.constants.Recipient.cardholder);
+            let itemsMerchant = this.filterRecipient(receiptItems, timapi.constants.Recipient.merchant);
+            let itemsBoth = this.filterRecipient(receiptItems, timapi.constants.Recipient.both);
+            let receipts = new Array();
+            let receiptType = receiptItems.$receiptType();
+            if (itemsBoth.length > 0) {
+                if (itemsCardholder.length > 0) {
+                    let builder = new timapi.utils.StringBuilder();
+                    this.formatReceiptText(builder, terminal, this.getPrintOption(terminal, timapi.constants.Recipient.cardholder)
+                        .$printWidth, this.getPrintOption(terminal, timapi.constants.Recipient.cardholder)
+                        .$printFlags, itemsCardholder, receiptType, this.lineFormatsCardholder);
+                    let text = timapi.utils.StringHelper.makeString(builder);
+                    if (text.length > 0) {
+                        receipts.push(new timapi.Receipt(timapi.constants.Recipient.cardholder, text));
+                    }
+                }
+                if (itemsMerchant.length > 0) {
+                    let builder = new timapi.utils.StringBuilder();
+                    this.formatReceiptText(builder, terminal, this.getPrintOption(terminal, timapi.constants.Recipient.merchant)
+                        .$printWidth, this.getPrintOption(terminal, timapi.constants.Recipient.merchant)
+                        .$printFlags, itemsMerchant, receiptType, this.lineFormatsMerchant);
+                    let text = timapi.utils.StringHelper.makeString(builder);
+                    if (text.length > 0) {
+                        receipts.push(new timapi.Receipt(timapi.constants.Recipient.merchant, text));
+                    }
+                }
+            }
+            else {
+                let builderC = new timapi.utils.StringBuilder();
+                this.formatReceiptText(builderC, terminal, this.getPrintOption(terminal, timapi.constants.Recipient.cardholder)
+                    .$printWidth, this.getPrintOption(terminal, timapi.constants.Recipient.cardholder)
+                    .$printFlags, itemsCardholder, receiptType, this.lineFormatsCardholder);
+                let textC = timapi.utils.StringHelper.makeString(builderC);
+                if (textC.length > 0) {
+                    receipts.push(new timapi.Receipt(timapi.constants.Recipient.cardholder, textC));
+                }
+                let builderM = new timapi.utils.StringBuilder();
+                this.formatReceiptText(builderM, terminal, this.getPrintOption(terminal, timapi.constants.Recipient.merchant)
+                    .$printWidth, this.getPrintOption(terminal, timapi.constants.Recipient.merchant)
+                    .$printFlags, itemsMerchant, receiptType, this.lineFormatsMerchant);
+                let textM = timapi.utils.StringHelper.makeString(builderM);
+                if (textM.length > 0) {
+                    receipts.push(new timapi.Receipt(timapi.constants.Recipient.merchant, textM));
+                }
+            }
+            return receipts;
+        }
+        formatReceiptText(builder, terminal, width, flags, receiptItems, receiptType, lineFormats) {
+            let configData = terminal.getConfigData();
+            if (configData !== undefined &&
+                !flags.has(timapi.constants.PrintFlag.suppressHeader)) {
+                for (let headerLine of configData.$receiptHeader) {
+                    this.formatReceiptAddLine(builder, width, headerLine, "", "", " ");
+                }
+            }
+            for (let lineFormat of lineFormats) {
+                this.formatReceiptAddLineWithTerminal(builder, terminal, width, flags, lineFormat, receiptItems, receiptType);
+            }
+            if (this.hasReceiptItemType(receiptItems, timapi.constants.ReceiptItemType.amountSaldo)) {
+                for (let lineFormat of this.lineFormatsSaldo) {
+                    this.formatReceiptAddLineWithTerminal(builder, terminal, width, flags, lineFormat, receiptItems, receiptType);
+                }
+            }
+        }
+        hasReceiptItemType(receiptItems, type) {
+            for (let receiptItem of receiptItems) {
+                if (receiptItem.$receiptItemType === type) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        filterRecipient(receiptItems, recipient) {
+            let filtered = new Array();
+            for (let receiptItem of receiptItems.$receiptItem) {
+                if (receiptItem.$recipient === recipient) {
+                    filtered.push(receiptItem);
+                }
+            }
+            return filtered;
+        }
+        getPrintOption(terminal, recipient) {
+            for (let printOption of terminal.$printOptions) {
+                if (printOption.$recipient === recipient) {
+                    return printOption;
+                }
+            }
+            return undefined;
+        }
+        formatReceiptAddLineWithTerminal(builder, terminal, width, flags, lineFormat, receiptItems, receiptType) {
+            let left = "";
+            let center = "";
+            let right = "";
+            for (let element of lineFormat.$elements) {
+                let text = "";
+                switch (element.$type) {
+                    case timapi.TextType.fieldAccPer:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.accPer);
+                        break;
+                    case timapi.TextType.fieldAcqId:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.acqId);
+                        break;
+                    case timapi.TextType.fieldActId:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.actId);
+                        break;
+                    case timapi.TextType.fieldAid:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.aid);
+                        break;
+                    case timapi.TextType.fieldAmount:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.amount);
+                        break;
+                    case timapi.TextType.fieldAmountDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.amountDcc);
+                        break;
+                    case timapi.TextType.fieldAmountOther:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.amountOther);
+                        break;
+                    case timapi.TextType.fieldAmountSaldo:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.amountSaldo);
+                        break;
+                    case timapi.TextType.fieldAuthCode:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.authCode);
+                        break;
+                    case timapi.TextType.fieldBrandName:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.brandName);
+                        break;
+                    case timapi.TextType.fieldCardExpiryDate:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.cardExpiryDate);
+                        break;
+                    case timapi.TextType.fieldCardNumberEnc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.cardNumberEnc);
+                        break;
+                    case timapi.TextType.fieldCardNumberPrintableCardholder:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.cardNumberPrintableCardholder);
+                        break;
+                    case timapi.TextType.fieldCardNumberPrintableMerchant:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.cardNumberPrintableMerchant);
+                        break;
+                    case timapi.TextType.fieldCurrency:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.currency);
+                        break;
+                    case timapi.TextType.fieldCurrencyDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.currencyDcc);
+                        break;
+                    case timapi.TextType.fieldDccDisclaimer:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.dccDisclaimer);
+                        break;
+                    case timapi.TextType.fieldDisclaimer:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.disclaimer);
+                        break;
+                    case timapi.TextType.fieldExponent:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.exponent);
+                        break;
+                    case timapi.TextType.fieldExponentDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.exponentDcc);
+                        break;
+                    case timapi.TextType.fieldMarkupDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.markupDcc);
+                        break;
+                    case timapi.TextType.fieldMarkupExponentDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.markupExponentDcc);
+                        break;
+                    case timapi.TextType.fieldPosEntryMode:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.posEntryMode);
+                        break;
+                    case timapi.TextType.fieldRateDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.rateDcc);
+                        break;
+                    case timapi.TextType.fieldRateExponentDcc:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.rateExponentDcc);
+                        break;
+                    case timapi.TextType.fieldTimeStampDate:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.timeStampDate);
+                        break;
+                    case timapi.TextType.fieldTimeStampTime:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.timeStampTime);
+                        break;
+                    case timapi.TextType.fieldTrmId:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.trmId);
+                        break;
+                    case timapi.TextType.fieldTrxRefNum:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.trxRefNum);
+                        break;
+                    case timapi.TextType.fieldTrxSeqCnt:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.trxSeqCnt);
+                        break;
+                    case timapi.TextType.fieldEctSeqCnt:
+                        text = this.resolveField(receiptItems, timapi.constants.ReceiptItemType.ecrSeqCounter);
+                        break;
+                    case timapi.TextType.posId:
+                        text = terminal.$posId;
+                        break;
+                    case timapi.TextType.text:
+                        text = element.$text;
+                        break;
+                    case timapi.TextType.transactionType:
+                        switch (receiptType) {
+                            case timapi.constants.ReceiptType.credit:
+                                text = "Gutschrift";
+                                break;
+                            case timapi.constants.ReceiptType.purchase:
+                                text = "Buchung";
+                                break;
+                            case timapi.constants.ReceiptType.reversal:
+                                text = "Storno";
+                                break;
+                            default:
+                                break;
+                        }
+                        break;
+                    case timapi.TextType.userId:
+                        text = "" + terminal.$userId;
+                        break;
+                    default:
+                        break;
+                }
+                if (text == undefined) {
+                    continue;
+                }
+                switch (element.$alignment) {
+                    case timapi.TextAlignment.center:
+                        center = center + text;
+                        break;
+                    case timapi.TextAlignment.left:
+                        left = left + text;
+                        break;
+                    case timapi.TextAlignment.right:
+                        right = right + text;
+                        break;
+                    default:
+                        break;
+                }
+            }
+            switch (lineFormat.$condition) {
+                case timapi.Condition.ECR_INFO:
+                    if (flags.has(timapi.constants.PrintFlag.suppressEcrInfo)) {
+                        return;
+                    }
+                    break;
+                case timapi.Condition.EFT_INFO:
+                    if (flags.has(timapi.constants.PrintFlag.suppressEftInfo)) {
+                        return;
+                    }
+                    break;
+                case timapi.Condition.SIGNATURE:
+                    if (flags.has(timapi.constants.PrintFlag.suppressSignature)) {
+                        return;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            this.formatReceiptAddLine(builder, width, left, center, right, lineFormat.$padding);
+        }
+        resolveField(receiptItems, field) {
+            for (let receiptItem of receiptItems) {
+                if (receiptItem.$receiptItemType === field) {
+                    if (receiptItem.$value == undefined || receiptItem.$value.length === 0) {
+                        return "NA";
+                    }
+                    else {
+                        return receiptItem.$value;
+                    }
+                }
+            }
+            return "NA";
+        }
+        formatReceiptAddLine(builder, width, left, center, right, paddingChar) {
+            let lenLeft = left.length;
+            let lenCenter = center.length;
+            let lenRight = right.length;
+            let paddingLeft = 0;
+            let paddingRight = 0;
+            if (lenLeft > 0 && lenCenter > 0) {
+                paddingLeft = 1;
+            }
+            if (lenCenter > 0 && lenRight > 0) {
+                paddingRight = 1;
+            }
+            if (lenLeft > 0 && lenCenter === 0 && lenRight > 0) {
+                paddingLeft = 1;
+            }
+            let padding = width - lenLeft - lenCenter - lenRight - paddingLeft - paddingRight;
+            if (padding > 0) {
+                let split = padding / 2;
+                paddingLeft += split;
+                paddingRight += padding - split;
+            }
+            if (lenLeft > width && lenCenter === 0 && lenRight === 0) {
+                while (left.length > width) {
+                    builder.append(left.substring(0, width));
+                    builder.append("\n");
+                    left = left.substring(width);
+                }
+                builder.append(left);
+                builder.append("\n");
+                return;
+            }
+            builder.append(left);
+            if (paddingLeft > 0) {
+            }
+            builder.append(center);
+            if (paddingRight > 0) {
+            }
+            builder.append(right);
+            builder.append("\n");
+        }
+    }
+    timapi.CustomReceiptFormatter = CustomReceiptFormatter;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class CompactReceiptFormatter extends timapi.CustomReceiptFormatter {
+        CompactReceiptFormatter() {
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Att-/ECR-Id/-Seq:", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("EFT Ref-No: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableMerchant, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(" ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldPosEntryMode, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("EXP:", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardExpiryDate, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trm-/Act-Id:", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("AID: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAid, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Seq/Ref/Aut:", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxRefNum, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("EPF: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberEnc, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            this.setLineFormatsMerchant(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Att-/ECR-Id/-Seq:", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("EFT Ref-No: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableCardholder, timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trm-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Seq/Aut:", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            this.setLineFormatsCardholder(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Saldo ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmountSaldo, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.setLineFormatsSaldo(this.lines);
+        }
+    }
+    timapi.CompactReceiptFormatter = CompactReceiptFormatter;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class NormalReceiptFormatter extends timapi.CustomReceiptFormatter {
+        constructor() {
+            super();
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Attendant-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("ECR-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(timapi.Condition.ECR_INFO, this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("ECR-Seq: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(timapi.Condition.ECR_INFO, this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("EFT Ref-No: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(timapi.Condition.EFT_INFO, this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableMerchant, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldPosEntryMode, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Expiration Date: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardExpiryDate, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trm-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Act-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("AID: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAid, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trx. Seq-Cnt: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trx. Ref-No: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxRefNum, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Auth. Code: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("EPF: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberEnc, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            this.setLineFormatsMerchant(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Attendant-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("ECR-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(timapi.Condition.ECR_INFO, this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("ECR-Seq: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(timapi.Condition.ECR_INFO, this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("EFT Ref-No: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(timapi.Condition.EFT_INFO, this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableCardholder, timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trm-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Act-Id: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("AID: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAid, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Trx. Seq-Cnt: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Auth. Code: ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            this.setLineFormatsCardholder(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Saldo ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmountSaldo, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.setLineFormatsSaldo(this.lines);
+        }
+    }
+    timapi.NormalReceiptFormatter = NormalReceiptFormatter;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class SuperCompactReceiptFormatter extends timapi.CustomReceiptFormatter {
+        SuperCompactReceiptFormatter() {
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements, "*"));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableMerchant, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(" ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldPosEntryMode, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("EXP:", timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardExpiryDate, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAid, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxRefNum, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberEnc, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            super.setLineFormatsMerchant(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements, "*"));
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableCardholder, timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.right));
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            super.setLineFormatsCardholder(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Saldo ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmountSaldo, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            super.setLineFormatsSaldo(this.lines);
+        }
+    }
+    timapi.SuperCompactReceiptFormatter = SuperCompactReceiptFormatter;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class UltraCompactReceiptFormatter extends timapi.CustomReceiptFormatter {
+        constructor() {
+            super();
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements, "*"));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableMerchant, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldPosEntryMode, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardExpiryDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAid, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxRefNum, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberEnc, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            super.setLineFormatsMerchant(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.userId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.posId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldEctSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements, "*"));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement(timapi.TextType.transactionType, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldBrandName, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCardNumberPrintableCardholder, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampDate, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTimeStampTime, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrmId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("/", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldActId, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldTrxSeqCnt, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("*", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAuthCode, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement("#", timapi.TextAlignment.left));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Total-EFT ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmount, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            this.lines.push(new timapi.LineFormat());
+            this.lines.push(new timapi.LineFormat());
+            super.setLineFormatsCardholder(this.lines);
+            this.lines = new Array();
+            this.lines.push(new timapi.LineFormat());
+            this.elements = new Array();
+            this.elements.push(new timapi.TextElement("Saldo ", timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldCurrency, timapi.TextAlignment.left));
+            this.elements.push(new timapi.TextElement(timapi.TextType.fieldAmountSaldo, timapi.TextAlignment.right));
+            this.lines.push(new timapi.LineFormat(this.elements));
+            super.setLineFormatsSaldo(this.lines);
+        }
+    }
+    timapi.UltraCompactReceiptFormatter = UltraCompactReceiptFormatter;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class DefaultCommListener {
+        disconnected() {
+        }
+        connected() {
+        }
+        connectionFailed(error) {
+        }
+        messageReceived(message) {
+        }
+    }
+    timapi.DefaultCommListener = DefaultCommListener;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    let SocketState;
+    (function (SocketState) {
+        SocketState[SocketState["disconnected"] = 0] = "disconnected";
+        SocketState[SocketState["connecting"] = 1] = "connecting";
+        SocketState[SocketState["loggedOut"] = 2] = "loggedOut";
+        SocketState[SocketState["logingIn"] = 3] = "logingIn";
+        SocketState[SocketState["loggedIn"] = 4] = "loggedIn";
+        SocketState[SocketState["activating"] = 5] = "activating";
+        SocketState[SocketState["open"] = 6] = "open";
+        SocketState[SocketState["transaction"] = 7] = "transaction";
+        SocketState[SocketState["deactivating"] = 8] = "deactivating";
+        SocketState[SocketState["logingOut"] = 9] = "logingOut";
+    })(SocketState || (SocketState = {}));
+    let SocketAction;
+    (function (SocketAction) {
+        SocketAction[SocketAction["none"] = 0] = "none";
+        SocketAction[SocketAction["transaction"] = 1] = "transaction";
+        SocketAction[SocketAction["disconnect"] = 2] = "disconnect";
+    })(SocketAction = timapi.SocketAction || (timapi.SocketAction = {}));
+    class SocketCommEndpoint {
+        constructor($backend, $settings) {
+            this.keepThreadRunning = false;
+            this.backend = $backend;
+            this.settings = $settings;
+            this.state = SocketState.disconnected;
+            this.backend.$pendingAction = SocketAction.none;
+            this.posId = this.backend.$terminal.$posId;
+            this.userId = timapi.utils.StringHelper.makeString(this.backend.$terminal.$userId);
+            this.nextSeqNum = 1;
+        }
+        transaction(amount) {
+            if (isNaN(amount.$amount) || amount.$amount < 0.01) {
+                throw new Error("Amount has to be a positive decimal number.");
+            }
+            if (this.backend.$pendingAction !== SocketAction.none) {
+                throw new Error("Action pending");
+            }
+            this.transactionAmount = Math.floor(amount.$amount * 100.0);
+            this.backend.$pendingAction = SocketAction.transaction;
+            this.backend.checkPendingAction();
+        }
+        connect() {
+            if (this.state !== SocketState.disconnected) {
+                return;
+            }
+            SocketCommEndpoint.logger.log(timapi.logging.Level.INFO, "Connecting to terminal " + this.settings.$connectionIPString);
+            this.state = SocketState.connecting;
+            this.keepThreadRunning = true;
+            this.socket = new WebSocket("ws://" + this.settings.$connectionIPString + ":" + this.settings.$connectionIPPort + "/SIXml");
+            this.socket.binaryType = "arraybuffer";
+            this.socket.onopen = this.onSocketOpen.bind(this);
+            this.socket.onmessage = this.onSocketMessage.bind(this);
+            this.socket.onclose = this.onSocketClosed.bind(this);
+            this.socket.onerror = this.onSocketError.bind(this);
+        }
+        disconnect() {
+            this.backend.$pendingAction = SocketAction.none;
+            this.disconnectWithReason(4001, "Normal disconnecting");
+        }
+        disconnectWithReason(reason, reasonText) {
+            if (this.socket == undefined) {
+                return;
+            }
+            this.socket.close(reason, reasonText);
+            this.socket = undefined;
+            this.displayContent = new Array();
+            this.state = SocketState.disconnected;
+            SocketCommEndpoint.logger.log(timapi.logging.Level.INFO, "Disconnected from terminal " + this.settings.$connectionIPString);
+        }
+        sendMessage(message) {
+            if (this.socket == undefined) {
+                throw new Error("Socket was not initialized");
+            }
+            let len = message.length + 1;
+            let buffer = new Uint8Array(8 + len);
+            let i;
+            for (i = 0; i < 6; i++) {
+                buffer[i] = SocketCommEndpoint.sixmlChannelHeader[i];
+            }
+            buffer[6] = (len >> 8) & 0xff;
+            buffer[7] = len & 0xff;
+            buffer[8] = 0x1;
+            for (i = 0; i < len - 1; i++) {
+                buffer[9 + i] = message[i];
+            }
+            this.socket.send(buffer.buffer);
+        }
+        onSocketOpen() {
+            this.backend.connected();
+            if (this.state !== SocketState.connecting) {
+                return;
+            }
+            SocketCommEndpoint.logger.log(timapi.logging.Level.INFO, "Connection established to " + this.settings.$connectionIPString + ":" + this.settings.$connectionIPPort);
+            this.state = SocketState.loggedOut;
+            this.backend.checkPendingAction();
+        }
+        onSocketError(error) {
+            SocketCommEndpoint.logger.log(timapi.logging.Level.SEVERE, "WebSocket Error ", error);
+            this.backend.connectionFailed(timapi.constants.ResultCode.apiConnectFailTerminal);
+        }
+        onSocketMessage(event) {
+            switch (this.state) {
+                case SocketState.disconnected:
+                    return;
+            }
+            if (this.keepThreadRunning) {
+                let data = new Uint8Array(event.data);
+                let header = data.subarray(0, 8);
+                if (SocketCommEndpoint.sixmlChannelHeader === header) {
+                    throw new Error("SixmlMessage has incorrect header");
+                }
+                let messageData = data.subarray(8);
+                this.backend.messageReceived(messageData);
+            }
+        }
+        onSocketClosed(closeEvent) {
+            if (this.socket == undefined) {
+                return;
+            }
+            this.socket = undefined;
+            this.keepThreadRunning = false;
+            this.displayContent = new Array();
+            this.state = SocketState.disconnected;
+            SocketCommEndpoint.logger.log(timapi.logging.Level.INFO, "Connection closed to terminal " + this.settings.$connectionIPString);
+            this.backend.checkPendingAction();
+            this.backend.disconnected();
+        }
+    }
+    SocketCommEndpoint.loggername = "timapi.comm.SocketCommEndpoint";
+    SocketCommEndpoint.classname = "timapi.comm.SocketCommEndpoint";
+    SocketCommEndpoint.logger = timapi.logging.Logger.getLogger(SocketCommEndpoint.loggername);
+    SocketCommEndpoint.sixmlChannelHeader = new Uint8Array([0x53, 0x49, 0x58, 0x6D, 0x6C, 0x02]);
+    timapi.SocketCommEndpoint = SocketCommEndpoint;
+})(timapi || (timapi = {}));
+timapi.protocol.constants.AdjustmentResult = {};
+timapi.protocol.constants.AdjustmentResult.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (AdjustmentResult)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.AdjustmentResult.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (AdjustmentResult)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.AdjustmentResult.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.AdjustmentResult._timApi2Protocol =
+    new Map([[timapi.constants.AdjustmentResult.ok, 0],
+        [timapi.constants.AdjustmentResult.failRequestToLate, 1],
+        [timapi.constants.AdjustmentResult.failAmountToHigh, 2]]);
+timapi.protocol.constants.AdjustmentResult._protocol2TimApi =
+    new Map([[0, timapi.constants.AdjustmentResult.ok],
+        [1, timapi.constants.AdjustmentResult.failRequestToLate],
+        [2, timapi.constants.AdjustmentResult.failAmountToHigh]]);
+timapi.protocol.constants.CardReader = {};
+timapi.protocol.constants.CardReader.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CardReader)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.CardReader.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CardReader)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CardReader.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CardReader._timApi2Protocol =
+    new Map([[timapi.constants.CardReader.icc, "ICC"],
+        [timapi.constants.CardReader.cl, "CL"],
+        [timapi.constants.CardReader.ms, "MS"]]);
+timapi.protocol.constants.CardReader._protocol2TimApi =
+    new Map([["ICC", timapi.constants.CardReader.icc],
+        ["CL", timapi.constants.CardReader.cl],
+        ["MS", timapi.constants.CardReader.ms]]);
+timapi.protocol.constants.CouponRejectionReason = {};
+timapi.protocol.constants.CouponRejectionReason.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CouponRejectionReason)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.CouponRejectionReason.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (CouponRejectionReason)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CouponRejectionReason.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.CouponRejectionReason._timApi2Protocol =
+    new Map([[timapi.constants.CouponRejectionReason.alreadyRedeemed, "AlreadyRedeemed"],
+        [timapi.constants.CouponRejectionReason.articleDelisted, "ArticleDelisted"],
+        [timapi.constants.CouponRejectionReason.campaignExpired, "CampaignExpired"],
+        [timapi.constants.CouponRejectionReason.campaignCancelled, "CampaignCancelled"],
+        [timapi.constants.CouponRejectionReason.other, "Other"]]);
+timapi.protocol.constants.CouponRejectionReason._protocol2TimApi =
+    new Map([["AlreadyRedeemed", timapi.constants.CouponRejectionReason.alreadyRedeemed],
+        ["ArticleDelisted", timapi.constants.CouponRejectionReason.articleDelisted],
+        ["CampaignExpired", timapi.constants.CouponRejectionReason.campaignExpired],
+        ["CampaignCancelled", timapi.constants.CouponRejectionReason.campaignCancelled],
+        ["Other", timapi.constants.CouponRejectionReason.other]]);
+timapi.protocol.constants.NgvMode = {};
+timapi.protocol.constants.NgvMode.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (NgvMode)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.NgvMode.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (NgvMode)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.NgvMode.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.NgvMode._timApi2Protocol =
+    new Map([[timapi.constants.NgvMode.mandatory, "Mandatory"],
+        [timapi.constants.NgvMode.allowedWithFallback, "AllowedWithFallback"],
+        [timapi.constants.NgvMode.notAllowed, "NotAllowed"]]);
+timapi.protocol.constants.NgvMode._protocol2TimApi =
+    new Map([["Mandatory", timapi.constants.NgvMode.mandatory],
+        ["AllowedWithFallback", timapi.constants.NgvMode.allowedWithFallback],
+        ["NotAllowed", timapi.constants.NgvMode.notAllowed]]);
+timapi.protocol.constants.ResourceParameterType = {};
+timapi.protocol.constants.ResourceParameterType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResourceParameterType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ResourceParameterType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResourceParameterType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResourceParameterType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResourceParameterType._timApi2Protocol =
+    new Map([[timapi.constants.ResourceParameterType.codeCheckType, "CodeCheckType"],
+        [timapi.constants.ResourceParameterType.codeCheckKeyId, "CodeCheckKeyId"],
+        [timapi.constants.ResourceParameterType.codeCheckData, "CodeCheckData"],
+        [timapi.constants.ResourceParameterType.regularDataQueryType, "RegularDataQueryType"],
+        [timapi.constants.ResourceParameterType.regularData, "RegularData"],
+        [timapi.constants.ResourceParameterType.petrolCardData1, "PetrolCardData1"],
+        [timapi.constants.ResourceParameterType.petrolCardData2, "PetrolCardData2"],
+        [timapi.constants.ResourceParameterType.petrolCardData3, "PetrolCardData3"]]);
+timapi.protocol.constants.ResourceParameterType._protocol2TimApi =
+    new Map([["CodeCheckType", timapi.constants.ResourceParameterType.codeCheckType],
+        ["CodeCheckKeyId", timapi.constants.ResourceParameterType.codeCheckKeyId],
+        ["CodeCheckData", timapi.constants.ResourceParameterType.codeCheckData],
+        ["RegularDataQueryType", timapi.constants.ResourceParameterType.regularDataQueryType],
+        ["RegularData", timapi.constants.ResourceParameterType.regularData],
+        ["PetrolCardData1", timapi.constants.ResourceParameterType.petrolCardData1],
+        ["PetrolCardData2", timapi.constants.ResourceParameterType.petrolCardData2],
+        ["PetrolCardData3", timapi.constants.ResourceParameterType.petrolCardData3]]);
+timapi.protocol.constants.ResponseType = {};
+timapi.protocol.constants.ResponseType.timApi2Protocol = function (value) {
+    if (!this._timApi2Protocol.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResponseType)");
+    }
+    return this._timApi2Protocol.get(value);
+};
+timapi.protocol.constants.ResponseType.protocol2TimApi = function (value) {
+    if (!this._protocol2TimApi.has(value)) {
+        throw new Error("Invalid argument '" + value + "' (ResponseType)");
+    }
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResponseType.protocol2TimApiIfValid = function (value) {
+    return this._protocol2TimApi.get(value);
+};
+timapi.protocol.constants.ResponseType._timApi2Protocol =
+    new Map([[timapi.constants.ResponseType.positive, "Positive"],
+        [timapi.constants.ResponseType.negative, "Negative"],
+        [timapi.constants.ResponseType.cardRemoval, "CardRemoval"],
+        [timapi.constants.ResponseType.timeout, "Timeout"]]);
+timapi.protocol.constants.ResponseType._protocol2TimApi =
+    new Map([["Positive", timapi.constants.ResponseType.positive],
+        ["Negative", timapi.constants.ResponseType.negative],
+        ["CardRemoval", timapi.constants.ResponseType.cardRemoval],
+        ["Timeout", timapi.constants.ResponseType.timeout]]);
+timapi.protocol.sixml.AmountGross = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.AmountGross) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.AmountGross.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.AmountGross.prototype.value = 0;
+timapi.protocol.sixml.AmountGross.prototype.currency = undefined;
+timapi.protocol.sixml.AmountGross.prototype.exponent = undefined;
+timapi.protocol.sixml.AmountGross.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:AmountGross");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.CommandRequest = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CommandRequest) {
+        var value = a;
+        this.orderNumber = value.orderNumber;
+        this.cardReader = value.cardReader;
+        this.cardCommand = value.cardCommand;
+        this.positiveAnswerList = value.positiveAnswerList ? new timapi.protocol.sixml.PositiveAnswerList(value.positiveAnswerList) : undefined;
+        this.commandResources = value.commandResources ? new timapi.protocol.sixml.CommandResources(value.commandResources) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "OrderNumber")) {
+            this.orderNumber = (this.xmlGetAttribute(node, "OrderNumber") ? parseInt(this.xmlGetAttribute(node, "OrderNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CardReader")) {
+            this.cardReader = this.xmlGetAttribute(node, "CardReader");
+        }
+        if (this.xmlHasChild(node, "sixml:CardCommand")) {
+            this.cardCommand = this.xmlGetChild(node, "sixml:CardCommand").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:PositiveAnswerList")) {
+            this.positiveAnswerList = new timapi.protocol.sixml.PositiveAnswerList(this.xmlGetChild(node, "sixml:PositiveAnswerList"));
+        }
+        if (this.xmlHasChild(node, "sixml:CommandResources")) {
+            this.commandResources = new timapi.protocol.sixml.CommandResources(this.xmlGetChild(node, "sixml:CommandResources"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CommandRequest.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CommandRequest.prototype.orderNumber = undefined;
+timapi.protocol.sixml.CommandRequest.prototype.cardReader = undefined;
+timapi.protocol.sixml.CommandRequest.prototype.cardCommand = undefined;
+timapi.protocol.sixml.CommandRequest.prototype.positiveAnswerList = undefined;
+timapi.protocol.sixml.CommandRequest.prototype.commandResources = undefined;
+timapi.protocol.sixml.CommandRequest.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CommandRequest");
+    if (this.orderNumber != undefined) {
+        this.xmlSetAttribute(node, "OrderNumber", timapi.utils.StringHelper.makeString(this.orderNumber));
+    }
+    if (this.cardReader != undefined) {
+        this.xmlSetAttribute(node, "CardReader", this.cardReader);
+    }
+    if (this.cardCommand != undefined) {
+        this.xmlAddChild(node, "sixml:CardCommand", this.cardCommand);
+    }
+    if (this.positiveAnswerList != undefined) {
+        this.xmlAddChild(node, "sixml:PositiveAnswerList", this.positiveAnswerList);
+    }
+    if (this.commandResources != undefined) {
+        this.xmlAddChild(node, "sixml:CommandResources", this.commandResources);
+    }
+    return node;
+};
+timapi.protocol.sixml.CommandRequestList = function (a) {
+    this.commandRequest = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CommandRequestList) {
+        var value = a;
+        for (var each of value.commandRequest) {
+            this.commandRequest.push(each ? new timapi.protocol.sixml.CommandRequest(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:CommandRequest")) {
+            this.commandRequest.push(new timapi.protocol.sixml.CommandRequest(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CommandRequestList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CommandRequestList.prototype.commandRequest = undefined;
+timapi.protocol.sixml.CommandRequestList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CommandRequestList");
+    for (var each of this.commandRequest) {
+        this.xmlAddChild(node, "sixml:CommandRequest", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.CommandResources = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CommandResources) {
+        var value = a;
+        this.positiveResource = value.positiveResource;
+        this.negativeResource = value.negativeResource;
+        this.executionResource = value.executionResource;
+        this.preResource = value.preResource;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "PositiveResource")) {
+            this.positiveResource = (this.xmlGetAttribute(node, "PositiveResource") ? parseInt(this.xmlGetAttribute(node, "PositiveResource")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "NegativeResource")) {
+            this.negativeResource = (this.xmlGetAttribute(node, "NegativeResource") ? parseInt(this.xmlGetAttribute(node, "NegativeResource")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ExecutionResource")) {
+            this.executionResource = (this.xmlGetAttribute(node, "ExecutionResource") ? parseInt(this.xmlGetAttribute(node, "ExecutionResource")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "PreResource")) {
+            this.preResource = (this.xmlGetAttribute(node, "PreResource") ? parseInt(this.xmlGetAttribute(node, "PreResource")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CommandResources.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CommandResources.prototype.positiveResource = undefined;
+timapi.protocol.sixml.CommandResources.prototype.negativeResource = undefined;
+timapi.protocol.sixml.CommandResources.prototype.executionResource = undefined;
+timapi.protocol.sixml.CommandResources.prototype.preResource = undefined;
+timapi.protocol.sixml.CommandResources.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CommandResources");
+    if (this.positiveResource != undefined) {
+        this.xmlSetAttribute(node, "PositiveResource", timapi.utils.StringHelper.makeString(this.positiveResource));
+    }
+    if (this.negativeResource != undefined) {
+        this.xmlSetAttribute(node, "NegativeResource", timapi.utils.StringHelper.makeString(this.negativeResource));
+    }
+    if (this.executionResource != undefined) {
+        this.xmlSetAttribute(node, "ExecutionResource", timapi.utils.StringHelper.makeString(this.executionResource));
+    }
+    if (this.preResource != undefined) {
+        this.xmlSetAttribute(node, "PreResource", timapi.utils.StringHelper.makeString(this.preResource));
+    }
+    return node;
+};
+timapi.protocol.sixml.CommandResponse = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CommandResponse) {
+        var value = a;
+        this.orderNumber = value.orderNumber;
+        this.responseType = value.responseType;
+        this.cardResponse = value.cardResponse;
+        this.uid = value.uid;
+        this.atr = value.atr;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "OrderNumber")) {
+            this.orderNumber = (this.xmlGetAttribute(node, "OrderNumber") ? parseInt(this.xmlGetAttribute(node, "OrderNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResponseType")) {
+            this.responseType = this.xmlGetAttribute(node, "ResponseType");
+        }
+        if (this.xmlHasChild(node, "sixml:CardResponse")) {
+            this.cardResponse = this.xmlGetChild(node, "sixml:CardResponse").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Uid")) {
+            this.uid = this.xmlGetChild(node, "sixml:Uid").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:ATR")) {
+            this.atr = this.xmlGetChild(node, "sixml:ATR").textContent;
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CommandResponse.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CommandResponse.prototype.orderNumber = undefined;
+timapi.protocol.sixml.CommandResponse.prototype.responseType = undefined;
+timapi.protocol.sixml.CommandResponse.prototype.cardResponse = undefined;
+timapi.protocol.sixml.CommandResponse.prototype.uid = undefined;
+timapi.protocol.sixml.CommandResponse.prototype.atr = undefined;
+timapi.protocol.sixml.CommandResponse.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CommandResponse");
+    if (this.orderNumber != undefined) {
+        this.xmlSetAttribute(node, "OrderNumber", timapi.utils.StringHelper.makeString(this.orderNumber));
+    }
+    if (this.responseType != undefined) {
+        this.xmlSetAttribute(node, "ResponseType", this.responseType);
+    }
+    if (this.cardResponse != undefined) {
+        this.xmlAddChild(node, "sixml:CardResponse", this.cardResponse);
+    }
+    if (this.uid != undefined) {
+        this.xmlAddChild(node, "sixml:Uid", this.uid);
+    }
+    if (this.atr != undefined) {
+        this.xmlAddChild(node, "sixml:ATR", this.atr);
+    }
+    return node;
+};
+timapi.protocol.sixml.CommandResponseList = function (a) {
+    this.commandResponse = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.CommandResponseList) {
+        var value = a;
+        for (var each of value.commandResponse) {
+            this.commandResponse.push(each ? new timapi.protocol.sixml.CommandResponse(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:CommandResponse")) {
+            this.commandResponse.push(new timapi.protocol.sixml.CommandResponse(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.CommandResponseList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.CommandResponseList.prototype.commandResponse = undefined;
+timapi.protocol.sixml.CommandResponseList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:CommandResponseList");
+    for (var each of this.commandResponse) {
+        this.xmlAddChild(node, "sixml:CommandResponse", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.FinalAmount = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.FinalAmount) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        this.adjustmentResult = value.adjustmentResult;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "AdjustmentResult")) {
+            this.adjustmentResult = (this.xmlGetAttribute(node, "AdjustmentResult") ? parseInt(this.xmlGetAttribute(node, "AdjustmentResult")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.FinalAmount.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.FinalAmount.prototype.value = 0;
+timapi.protocol.sixml.FinalAmount.prototype.currency = undefined;
+timapi.protocol.sixml.FinalAmount.prototype.exponent = undefined;
+timapi.protocol.sixml.FinalAmount.prototype.adjustmentResult = undefined;
+timapi.protocol.sixml.FinalAmount.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:FinalAmount");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    if (this.adjustmentResult != undefined) {
+        this.xmlSetAttribute(node, "AdjustmentResult", timapi.utils.StringHelper.makeString(this.adjustmentResult));
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyBasket = function (a) {
+    this.loyaltyItem = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyBasket) {
+        var value = a;
+        for (var each of value.loyaltyItem) {
+            this.loyaltyItem.push(each ? new timapi.protocol.sixml.LoyaltyItem(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:LoyaltyItem")) {
+            this.loyaltyItem.push(new timapi.protocol.sixml.LoyaltyItem(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyBasket.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyBasket.prototype.loyaltyItem = undefined;
+timapi.protocol.sixml.LoyaltyBasket.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyBasket");
+    for (var each of this.loyaltyItem) {
+        this.xmlAddChild(node, "sixml:LoyaltyItem", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyCashbackAmount = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyCashbackAmount) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyCashbackAmount.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyCashbackAmount.prototype.value = 0;
+timapi.protocol.sixml.LoyaltyCashbackAmount.prototype.currency = undefined;
+timapi.protocol.sixml.LoyaltyCashbackAmount.prototype.exponent = undefined;
+timapi.protocol.sixml.LoyaltyCashbackAmount.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyCashbackAmount");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyCheckoutInformation = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyCheckoutInformation) {
+        var value = a;
+        this.provideBasketFlag = value.provideBasketFlag;
+        this.loyaltyInformationList = value.loyaltyInformationList ? new timapi.protocol.sixml.LoyaltyInformationList(value.loyaltyInformationList) : undefined;
+        this.loyaltyCouponList = value.loyaltyCouponList ? new timapi.protocol.sixml.LoyaltyCouponList(value.loyaltyCouponList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasChild(node, "sixml:ProvideBasketFlag")) {
+            this.provideBasketFlag = this.xmlGetChild(node, "sixml:ProvideBasketFlag").textContent == "1";
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyInformationList")) {
+            this.loyaltyInformationList = new timapi.protocol.sixml.LoyaltyInformationList(this.xmlGetChild(node, "sixml:LoyaltyInformationList"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCouponList")) {
+            this.loyaltyCouponList = new timapi.protocol.sixml.LoyaltyCouponList(this.xmlGetChild(node, "sixml:LoyaltyCouponList"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyCheckoutInformation.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyCheckoutInformation.prototype.provideBasketFlag = undefined;
+timapi.protocol.sixml.LoyaltyCheckoutInformation.prototype.loyaltyInformationList = undefined;
+timapi.protocol.sixml.LoyaltyCheckoutInformation.prototype.loyaltyCouponList = undefined;
+timapi.protocol.sixml.LoyaltyCheckoutInformation.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyCheckoutInformation");
+    if (this.provideBasketFlag != undefined) {
+        this.xmlAddChild(node, "sixml:ProvideBasketFlag", (this.provideBasketFlag ? "1" : "0"));
+    }
+    if (this.loyaltyInformationList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyInformationList", this.loyaltyInformationList);
+    }
+    if (this.loyaltyCouponList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCouponList", this.loyaltyCouponList);
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyCoupon = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyCoupon) {
+        var value = a;
+        this.value = value.value;
+        this.couponId = value.couponId;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        this.couponRejectionReason = value.couponRejectionReason;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "CouponId")) {
+            this.couponId = this.xmlGetAttribute(node, "CouponId");
+        }
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "CouponRejectionReason")) {
+            this.couponRejectionReason = this.xmlGetAttribute(node, "CouponRejectionReason");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyCoupon.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyCoupon.prototype.value = 0;
+timapi.protocol.sixml.LoyaltyCoupon.prototype.couponId = undefined;
+timapi.protocol.sixml.LoyaltyCoupon.prototype.currency = undefined;
+timapi.protocol.sixml.LoyaltyCoupon.prototype.exponent = undefined;
+timapi.protocol.sixml.LoyaltyCoupon.prototype.couponRejectionReason = undefined;
+timapi.protocol.sixml.LoyaltyCoupon.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyCoupon");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.couponId != undefined) {
+        this.xmlSetAttribute(node, "CouponId", this.couponId);
+    }
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    if (this.couponRejectionReason != undefined) {
+        this.xmlSetAttribute(node, "CouponRejectionReason", this.couponRejectionReason);
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyCouponList = function (a) {
+    this.loyaltyCoupon = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyCouponList) {
+        var value = a;
+        for (var each of value.loyaltyCoupon) {
+            this.loyaltyCoupon.push(each ? new timapi.protocol.sixml.LoyaltyCoupon(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:LoyaltyCoupon")) {
+            this.loyaltyCoupon.push(new timapi.protocol.sixml.LoyaltyCoupon(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyCouponList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyCouponList.prototype.loyaltyCoupon = undefined;
+timapi.protocol.sixml.LoyaltyCouponList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyCouponList");
+    for (var each of this.loyaltyCoupon) {
+        this.xmlAddChild(node, "sixml:LoyaltyCoupon", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyData) {
+        var value = a;
+        this.value = value.value;
+        this.loyaltyDataType = value.loyaltyDataType;
+        this.loyaltyFunctionType = value.loyaltyFunctionType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = timapi.ConversionHelper.hexStringToByte(node.textContent);
+        if (this.xmlHasAttribute(node, "LoyaltyDataType")) {
+            this.loyaltyDataType = this.xmlGetAttribute(node, "LoyaltyDataType");
+        }
+        if (this.xmlHasAttribute(node, "LoyaltyFunctionType")) {
+            this.loyaltyFunctionType = this.xmlGetAttribute(node, "LoyaltyFunctionType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyData.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyData.prototype.value = new Uint8Array(0);
+timapi.protocol.sixml.LoyaltyData.prototype.loyaltyDataType = undefined;
+timapi.protocol.sixml.LoyaltyData.prototype.loyaltyFunctionType = undefined;
+timapi.protocol.sixml.LoyaltyData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyData");
+    node.textContent = timapi.protocol.ConversionHelper.byteToHexString(this.value);
+    if (this.loyaltyDataType != undefined) {
+        this.xmlSetAttribute(node, "LoyaltyDataType", this.loyaltyDataType);
+    }
+    if (this.loyaltyFunctionType != undefined) {
+        this.xmlSetAttribute(node, "LoyaltyFunctionType", this.loyaltyFunctionType);
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyDiscount = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyDiscount) {
+        var value = a;
+        this.value = value.value;
+        this.discountDescription = value.discountDescription;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "DiscountDescription")) {
+            this.discountDescription = this.xmlGetAttribute(node, "DiscountDescription");
+        }
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyDiscount.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyDiscount.prototype.value = 0;
+timapi.protocol.sixml.LoyaltyDiscount.prototype.discountDescription = undefined;
+timapi.protocol.sixml.LoyaltyDiscount.prototype.currency = undefined;
+timapi.protocol.sixml.LoyaltyDiscount.prototype.exponent = undefined;
+timapi.protocol.sixml.LoyaltyDiscount.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyDiscount");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.discountDescription != undefined) {
+        this.xmlSetAttribute(node, "DiscountDescription", this.discountDescription);
+    }
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyDiscountList = function (a) {
+    this.loyaltyDiscount = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyDiscountList) {
+        var value = a;
+        for (var each of value.loyaltyDiscount) {
+            this.loyaltyDiscount.push(each ? new timapi.protocol.sixml.LoyaltyDiscount(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:LoyaltyDiscount")) {
+            this.loyaltyDiscount.push(new timapi.protocol.sixml.LoyaltyDiscount(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyDiscountList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyDiscountList.prototype.loyaltyDiscount = undefined;
+timapi.protocol.sixml.LoyaltyDiscountList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyDiscountList");
+    for (var each of this.loyaltyDiscount) {
+        this.xmlAddChild(node, "sixml:LoyaltyDiscount", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.LoyaltyItem = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.LoyaltyItem) {
+        var value = a;
+        this.itemId = value.itemId;
+        this.prodDescription = value.prodDescription;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.itemQuantity = value.itemQuantity ? new timapi.protocol.sixml.ItemQuantity(value.itemQuantity) : undefined;
+        this.amountTotal = value.amountTotal ? new timapi.protocol.sixml.AmountTotal(value.amountTotal) : undefined;
+        this.loyaltyDiscountList = value.loyaltyDiscountList ? new timapi.protocol.sixml.LoyaltyDiscountList(value.loyaltyDiscountList) : undefined;
+        this.loyaltyCouponList = value.loyaltyCouponList ? new timapi.protocol.sixml.LoyaltyCouponList(value.loyaltyCouponList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "ItemId")) {
+            this.itemId = this.xmlGetAttribute(node, "ItemId");
+        }
+        if (this.xmlHasAttribute(node, "ProdDescription")) {
+            this.prodDescription = this.xmlGetAttribute(node, "ProdDescription");
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:ItemQuantity")) {
+            this.itemQuantity = new timapi.protocol.sixml.ItemQuantity(this.xmlGetChild(node, "sixml:ItemQuantity"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTotal")) {
+            this.amountTotal = new timapi.protocol.sixml.AmountTotal(this.xmlGetChild(node, "sixml:AmountTotal"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyDiscountList")) {
+            this.loyaltyDiscountList = new timapi.protocol.sixml.LoyaltyDiscountList(this.xmlGetChild(node, "sixml:LoyaltyDiscountList"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCouponList")) {
+            this.loyaltyCouponList = new timapi.protocol.sixml.LoyaltyCouponList(this.xmlGetChild(node, "sixml:LoyaltyCouponList"));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.LoyaltyItem.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.LoyaltyItem.prototype.itemId = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.prodDescription = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.amount = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.itemQuantity = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.amountTotal = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.loyaltyDiscountList = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.loyaltyCouponList = undefined;
+timapi.protocol.sixml.LoyaltyItem.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:LoyaltyItem");
+    if (this.itemId != undefined) {
+        this.xmlSetAttribute(node, "ItemId", this.itemId);
+    }
+    if (this.prodDescription != undefined) {
+        this.xmlSetAttribute(node, "ProdDescription", this.prodDescription);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.itemQuantity != undefined) {
+        this.xmlAddChild(node, "sixml:ItemQuantity", this.itemQuantity);
+    }
+    if (this.amountTotal != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTotal", this.amountTotal);
+    }
+    if (this.loyaltyDiscountList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyDiscountList", this.loyaltyDiscountList);
+    }
+    if (this.loyaltyCouponList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCouponList", this.loyaltyCouponList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_AmtAdjustment = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_AmtAdjustment) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.loyaltyCouponList = value.loyaltyCouponList ? new timapi.protocol.sixml.LoyaltyCouponList(value.loyaltyCouponList) : undefined;
+        this.amountDiscount = value.amountDiscount ? new timapi.protocol.sixml.AmountDiscount(value.amountDiscount) : undefined;
+        this.loyaltyInformationList = value.loyaltyInformationList ? new timapi.protocol.sixml.LoyaltyInformationList(value.loyaltyInformationList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCouponList")) {
+            this.loyaltyCouponList = new timapi.protocol.sixml.LoyaltyCouponList(this.xmlGetChild(node, "sixml:LoyaltyCouponList"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDiscount")) {
+            this.amountDiscount = new timapi.protocol.sixml.AmountDiscount(this.xmlGetChild(node, "sixml:AmountDiscount"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyInformationList")) {
+            this.loyaltyInformationList = new timapi.protocol.sixml.LoyaltyInformationList(this.xmlGetChild(node, "sixml:LoyaltyInformationList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "AmtAdjustment";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.function = undefined;
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.amount = undefined;
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.loyaltyCouponList = undefined;
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.amountDiscount = undefined;
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.loyaltyInformationList = undefined;
+timapi.protocol.sixml.Notification_AmtAdjustment.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.loyaltyCouponList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCouponList", this.loyaltyCouponList);
+    }
+    if (this.amountDiscount != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDiscount", this.amountDiscount);
+    }
+    if (this.loyaltyInformationList != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyInformationList", this.loyaltyInformationList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Notification_LoyaltyInfo = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Notification_LoyaltyInfo) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.loyaltyCheckoutInformation = value.loyaltyCheckoutInformation ? new timapi.protocol.sixml.LoyaltyCheckoutInformation(value.loyaltyCheckoutInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCheckoutInformation")) {
+            this.loyaltyCheckoutInformation = new timapi.protocol.sixml.LoyaltyCheckoutInformation(this.xmlGetChild(node, "sixml:LoyaltyCheckoutInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Status";
+        this.function = "LoyaltyInfo";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Notification_LoyaltyInfo.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Notification_LoyaltyInfo.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Notification_LoyaltyInfo.prototype.function = undefined;
+timapi.protocol.sixml.Notification_LoyaltyInfo.prototype.loyaltyCheckoutInformation = undefined;
+timapi.protocol.sixml.Notification_LoyaltyInfo.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Notification");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.loyaltyCheckoutInformation != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCheckoutInformation", this.loyaltyCheckoutInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.PositiveAnswerList = function (a) {
+    this.positiveAnswer = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.PositiveAnswerList) {
+        var value = a;
+        for (var each of value.positiveAnswer) {
+            this.positiveAnswer.push(each);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:PositiveAnswer")) {
+            this.positiveAnswer.push(each.textContent);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.PositiveAnswerList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.PositiveAnswerList.prototype.positiveAnswer = undefined;
+timapi.protocol.sixml.PositiveAnswerList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:PositiveAnswerList");
+    for (var each of this.positiveAnswer) {
+        this.xmlAddChild(node, "sixml:PositiveAnswer", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_FinishCheckout = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_FinishCheckout) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "FinishCheckout";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_FinishCheckout.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_FinishCheckout.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_FinishCheckout.prototype.function = undefined;
+timapi.protocol.sixml.Request_FinishCheckout.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_FinishCheckout.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_LoyaltyData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_LoyaltyData) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.loyaltyData = value.loyaltyData ? new timapi.protocol.sixml.LoyaltyData(value.loyaltyData) : undefined;
+        this.retainCardFlag = value.retainCardFlag;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyData")) {
+            this.loyaltyData = new timapi.protocol.sixml.LoyaltyData(this.xmlGetChild(node, "sixml:LoyaltyData"));
+        }
+        if (this.xmlHasChild(node, "sixml:RetainCardFlag")) {
+            this.retainCardFlag = this.xmlGetChild(node, "sixml:RetainCardFlag").textContent == "1";
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "LoyaltyData";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_LoyaltyData.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_LoyaltyData.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_LoyaltyData.prototype.function = undefined;
+timapi.protocol.sixml.Request_LoyaltyData.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_LoyaltyData.prototype.loyaltyData = undefined;
+timapi.protocol.sixml.Request_LoyaltyData.prototype.retainCardFlag = undefined;
+timapi.protocol.sixml.Request_LoyaltyData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.loyaltyData != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyData", this.loyaltyData);
+    }
+    if (this.retainCardFlag != undefined) {
+        this.xmlAddChild(node, "sixml:RetainCardFlag", (this.retainCardFlag ? "1" : "0"));
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_ProvideLoyaltyBasket) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.loyaltyBasket = value.loyaltyBasket ? new timapi.protocol.sixml.LoyaltyBasket(value.loyaltyBasket) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyBasket")) {
+            this.loyaltyBasket = new timapi.protocol.sixml.LoyaltyBasket(this.xmlGetChild(node, "sixml:LoyaltyBasket"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "ProvideLoyaltyBasket";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket.prototype.function = undefined;
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket.prototype.loyaltyBasket = undefined;
+timapi.protocol.sixml.Request_ProvideLoyaltyBasket.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.loyaltyBasket != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyBasket", this.loyaltyBasket);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchaseMailOrdered = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchaseMailOrdered) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseMailOrdered";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchaseMailOrdered.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchasePhoneOrdered = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchasePhoneOrdered) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.usrId = value.usrId;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:UsrId")) {
+            this.usrId = (this.xmlGetChild(node, "sixml:UsrId").textContent ? parseInt(this.xmlGetChild(node, "sixml:UsrId").textContent) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchasePhoneOrdered";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.usrId = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchasePhoneOrdered.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.usrId != undefined) {
+        this.xmlAddChild(node, "sixml:UsrId", timapi.utils.StringHelper.makeString(this.usrId));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.transactionData = value.transactionData ? new timapi.protocol.sixml.TransactionData(value.transactionData) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.merchantOptionList = value.merchantOptionList ? new timapi.protocol.sixml.MerchantOptionList(value.merchantOptionList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionData")) {
+            this.transactionData = new timapi.protocol.sixml.TransactionData(this.xmlGetChild(node, "sixml:TransactionData"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:MerchantOptionList")) {
+            this.merchantOptionList = new timapi.protocol.sixml.MerchantOptionList(this.xmlGetChild(node, "sixml:MerchantOptionList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseReservationPhoneAuthorized";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.function = undefined;
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.transactionData = undefined;
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.amount = undefined;
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.merchantOptionList = undefined;
+timapi.protocol.sixml.Request_PurchaseReservationPhoneAuthorized.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.transactionData != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionData", this.transactionData);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.merchantOptionList != undefined) {
+        this.xmlAddChild(node, "sixml:MerchantOptionList", this.merchantOptionList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_SendCardCommand = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_SendCardCommand) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.commandRequestList = value.commandRequestList ? new timapi.protocol.sixml.CommandRequestList(value.commandRequestList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasChild(node, "sixml:CommandRequestList")) {
+            this.commandRequestList = new timapi.protocol.sixml.CommandRequestList(this.xmlGetChild(node, "sixml:CommandRequestList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Dialog";
+        this.function = "SendCardCommand";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_SendCardCommand.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_SendCardCommand.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_SendCardCommand.prototype.function = undefined;
+timapi.protocol.sixml.Request_SendCardCommand.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_SendCardCommand.prototype.commandRequestList = undefined;
+timapi.protocol.sixml.Request_SendCardCommand.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.commandRequestList != undefined) {
+        this.xmlAddChild(node, "sixml:CommandRequestList", this.commandRequestList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Request_StartCheckout = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Request_StartCheckout) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "StartCheckout";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Request_StartCheckout.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Request_StartCheckout.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Request_StartCheckout.prototype.function = undefined;
+timapi.protocol.sixml.Request_StartCheckout.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Request_StartCheckout.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Request");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    return node;
+};
+timapi.protocol.sixml.ResourceParameter = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ResourceParameter) {
+        var value = a;
+        this.value = value.value;
+        this.resourceParameterType = value.resourceParameterType;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = node.textContent;
+        if (this.xmlHasAttribute(node, "ResourceParameterType")) {
+            this.resourceParameterType = this.xmlGetAttribute(node, "ResourceParameterType");
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ResourceParameter.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ResourceParameter.prototype.value = "";
+timapi.protocol.sixml.ResourceParameter.prototype.resourceParameterType = undefined;
+timapi.protocol.sixml.ResourceParameter.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ResourceParameter");
+    node.textContent = this.value;
+    if (this.resourceParameterType != undefined) {
+        this.xmlSetAttribute(node, "ResourceParameterType", this.resourceParameterType);
+    }
+    return node;
+};
+timapi.protocol.sixml.ResourceParameterList = function (a) {
+    this.resourceParameter = [];
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.ResourceParameterList) {
+        var value = a;
+        for (var each of value.resourceParameter) {
+            this.resourceParameter.push(each ? new timapi.protocol.sixml.ResourceParameter(each) : undefined);
+        }
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        for (var each of this.xmlGetChildren(node, "sixml:ResourceParameter")) {
+            this.resourceParameter.push(new timapi.protocol.sixml.ResourceParameter(each));
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.ResourceParameterList.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.ResourceParameterList.prototype.resourceParameter = undefined;
+timapi.protocol.sixml.ResourceParameterList.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:ResourceParameterList");
+    for (var each of this.resourceParameter) {
+        this.xmlAddChild(node, "sixml:ResourceParameter", each);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_FinishCheckout = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_FinishCheckout) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.loyaltyCheckoutInformation = value.loyaltyCheckoutInformation ? new timapi.protocol.sixml.LoyaltyCheckoutInformation(value.loyaltyCheckoutInformation) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyCheckoutInformation")) {
+            this.loyaltyCheckoutInformation = new timapi.protocol.sixml.LoyaltyCheckoutInformation(this.xmlGetChild(node, "sixml:LoyaltyCheckoutInformation"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "FinishCheckout";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_FinishCheckout.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_FinishCheckout.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_FinishCheckout.prototype.function = undefined;
+timapi.protocol.sixml.Response_FinishCheckout.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_FinishCheckout.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_FinishCheckout.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_FinishCheckout.prototype.loyaltyCheckoutInformation = undefined;
+timapi.protocol.sixml.Response_FinishCheckout.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.loyaltyCheckoutInformation != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyCheckoutInformation", this.loyaltyCheckoutInformation);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_LoyaltyData = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_LoyaltyData) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "LoyaltyData";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_LoyaltyData.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_LoyaltyData.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_LoyaltyData.prototype.function = undefined;
+timapi.protocol.sixml.Response_LoyaltyData.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_LoyaltyData.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_LoyaltyData.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_LoyaltyData.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_LoyaltyData.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_ProvideLoyaltyBasket) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.loyaltyBasket = value.loyaltyBasket ? new timapi.protocol.sixml.LoyaltyBasket(value.loyaltyBasket) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:LoyaltyBasket")) {
+            this.loyaltyBasket = new timapi.protocol.sixml.LoyaltyBasket(this.xmlGetChild(node, "sixml:LoyaltyBasket"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "ProvideLoyaltyBasket";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.function = undefined;
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.loyaltyBasket = undefined;
+timapi.protocol.sixml.Response_ProvideLoyaltyBasket.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.loyaltyBasket != undefined) {
+        this.xmlAddChild(node, "sixml:LoyaltyBasket", this.loyaltyBasket);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchaseMailOrdered = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchaseMailOrdered) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseMailOrdered";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchaseMailOrdered.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchasePhoneOrdered = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchasePhoneOrdered) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountSaldo = value.amountSaldo ? new timapi.protocol.sixml.AmountSaldo(value.amountSaldo) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountSaldo")) {
+            this.amountSaldo = new timapi.protocol.sixml.AmountSaldo(this.xmlGetChild(node, "sixml:AmountSaldo"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchasePhoneOrdered";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.amountSaldo = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchasePhoneOrdered.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountSaldo != undefined) {
+        this.xmlAddChild(node, "sixml:AmountSaldo", this.amountSaldo);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.amount = value.amount ? new timapi.protocol.sixml.Amount(value.amount) : undefined;
+        this.amountDcc = value.amountDcc ? new timapi.protocol.sixml.AmountDcc(value.amountDcc) : undefined;
+        this.amountTip = value.amountTip ? new timapi.protocol.sixml.AmountTip(value.amountTip) : undefined;
+        this.amountDue = value.amountDue ? new timapi.protocol.sixml.AmountDue(value.amountDue) : undefined;
+        this.transactionInformation = value.transactionInformation ? new timapi.protocol.sixml.TransactionInformation(value.transactionInformation) : undefined;
+        this.dccDisclaimer = value.dccDisclaimer;
+        this.disclaimer = value.disclaimer;
+        this.cardData = value.cardData ? new timapi.protocol.sixml.CardData(value.cardData) : undefined;
+        this.printData = value.printData ? new timapi.protocol.sixml.PrintData(value.printData) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:Amount")) {
+            this.amount = new timapi.protocol.sixml.Amount(this.xmlGetChild(node, "sixml:Amount"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDcc")) {
+            this.amountDcc = new timapi.protocol.sixml.AmountDcc(this.xmlGetChild(node, "sixml:AmountDcc"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountTip")) {
+            this.amountTip = new timapi.protocol.sixml.AmountTip(this.xmlGetChild(node, "sixml:AmountTip"));
+        }
+        if (this.xmlHasChild(node, "sixml:AmountDue")) {
+            this.amountDue = new timapi.protocol.sixml.AmountDue(this.xmlGetChild(node, "sixml:AmountDue"));
+        }
+        if (this.xmlHasChild(node, "sixml:TransactionInformation")) {
+            this.transactionInformation = new timapi.protocol.sixml.TransactionInformation(this.xmlGetChild(node, "sixml:TransactionInformation"));
+        }
+        if (this.xmlHasChild(node, "sixml:DccDisclaimer")) {
+            this.dccDisclaimer = this.xmlGetChild(node, "sixml:DccDisclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:Disclaimer")) {
+            this.disclaimer = this.xmlGetChild(node, "sixml:Disclaimer").textContent;
+        }
+        if (this.xmlHasChild(node, "sixml:CardData")) {
+            this.cardData = new timapi.protocol.sixml.CardData(this.xmlGetChild(node, "sixml:CardData"));
+        }
+        if (this.xmlHasChild(node, "sixml:PrintData")) {
+            this.printData = new timapi.protocol.sixml.PrintData(this.xmlGetChild(node, "sixml:PrintData"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "FinTransaction";
+        this.function = "PurchaseReservationPhoneAuthorized";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.function = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.amount = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.amountDcc = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.amountTip = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.amountDue = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.transactionInformation = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.dccDisclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.disclaimer = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.cardData = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.printData = undefined;
+timapi.protocol.sixml.Response_PurchaseReservationPhoneAuthorized.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.amount != undefined) {
+        this.xmlAddChild(node, "sixml:Amount", this.amount);
+    }
+    if (this.amountDcc != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDcc", this.amountDcc);
+    }
+    if (this.amountTip != undefined) {
+        this.xmlAddChild(node, "sixml:AmountTip", this.amountTip);
+    }
+    if (this.amountDue != undefined) {
+        this.xmlAddChild(node, "sixml:AmountDue", this.amountDue);
+    }
+    if (this.transactionInformation != undefined) {
+        this.xmlAddChild(node, "sixml:TransactionInformation", this.transactionInformation);
+    }
+    if (this.dccDisclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:DccDisclaimer", this.dccDisclaimer);
+    }
+    if (this.disclaimer != undefined) {
+        this.xmlAddChild(node, "sixml:Disclaimer", this.disclaimer);
+    }
+    if (this.cardData != undefined) {
+        this.xmlAddChild(node, "sixml:CardData", this.cardData);
+    }
+    if (this.printData != undefined) {
+        this.xmlAddChild(node, "sixml:PrintData", this.printData);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_SendCardCommand = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_SendCardCommand) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        this.commandResponseList = value.commandResponseList ? new timapi.protocol.sixml.CommandResponseList(value.commandResponseList) : undefined;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        if (this.xmlHasChild(node, "sixml:CommandResponseList")) {
+            this.commandResponseList = new timapi.protocol.sixml.CommandResponseList(this.xmlGetChild(node, "sixml:CommandResponseList"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "Dialog";
+        this.function = "SendCardCommand";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_SendCardCommand.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_SendCardCommand.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_SendCardCommand.prototype.function = undefined;
+timapi.protocol.sixml.Response_SendCardCommand.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_SendCardCommand.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_SendCardCommand.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_SendCardCommand.prototype.commandResponseList = undefined;
+timapi.protocol.sixml.Response_SendCardCommand.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    if (this.commandResponseList != undefined) {
+        this.xmlAddChild(node, "sixml:CommandResponseList", this.commandResponseList);
+    }
+    return node;
+};
+timapi.protocol.sixml.Response_StartCheckout = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.Response_StartCheckout) {
+        var value = a;
+        this.functionGroup = value.functionGroup;
+        this.function = value.function;
+        this.sequenceNumber = value.sequenceNumber;
+        this.resultCode = value.resultCode;
+        this.timeStamp = value.timeStamp;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        if (this.xmlHasAttribute(node, "FunctionGroup")) {
+            this.functionGroup = this.xmlGetAttribute(node, "FunctionGroup");
+        }
+        if (this.xmlHasAttribute(node, "Function")) {
+            this.function = this.xmlGetAttribute(node, "Function");
+        }
+        if (this.xmlHasAttribute(node, "SequenceNumber")) {
+            this.sequenceNumber = (this.xmlGetAttribute(node, "SequenceNumber") ? parseInt(this.xmlGetAttribute(node, "SequenceNumber")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "ResultCode")) {
+            this.resultCode = (this.xmlGetAttribute(node, "ResultCode") ? parseInt(this.xmlGetAttribute(node, "ResultCode")) : 0);
+        }
+        if (this.xmlHasAttribute(node, "TimeStamp")) {
+            this.timeStamp = new timapi.protocol.TimeDate("yyyyMMdd'T'HHmmssZ", this.xmlGetAttribute(node, "TimeStamp"));
+        }
+        return;
+    }
+    if (arguments.length == 0) {
+        this.functionGroup = "NonFinTransaction";
+        this.function = "StartCheckout";
+        return;
+    }
+    throw new Error("Invalid argument");
+};
+timapi.protocol.sixml.Response_StartCheckout.prototype = Object.create(timapi.protocol.Message.prototype);
+timapi.protocol.sixml.Response_StartCheckout.prototype.functionGroup = undefined;
+timapi.protocol.sixml.Response_StartCheckout.prototype.function = undefined;
+timapi.protocol.sixml.Response_StartCheckout.prototype.sequenceNumber = undefined;
+timapi.protocol.sixml.Response_StartCheckout.prototype.resultCode = undefined;
+timapi.protocol.sixml.Response_StartCheckout.prototype.timeStamp = undefined;
+timapi.protocol.sixml.Response_StartCheckout.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:Response");
+    this.xmlSetAttribute(node, "xmlns:sixml", "http://www.six-payment-services.com/");
+    if (this.functionGroup != undefined) {
+        this.xmlSetAttribute(node, "FunctionGroup", this.functionGroup);
+    }
+    if (this.function != undefined) {
+        this.xmlSetAttribute(node, "Function", this.function);
+    }
+    if (this.sequenceNumber != undefined) {
+        this.xmlSetAttribute(node, "SequenceNumber", timapi.utils.StringHelper.makeString(this.sequenceNumber));
+    }
+    if (this.resultCode != undefined) {
+        this.xmlSetAttribute(node, "ResultCode", timapi.utils.StringHelper.makeString(this.resultCode));
+    }
+    if (this.timeStamp != undefined) {
+        this.xmlSetAttribute(node, "TimeStamp", this.timeStamp.format("yyyyMMdd'T'HHmmssZ"));
+    }
+    return node;
+};
+timapi.protocol.sixml.UnitAmountDiscount = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.UnitAmountDiscount) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.UnitAmountDiscount.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.UnitAmountDiscount.prototype.value = 0;
+timapi.protocol.sixml.UnitAmountDiscount.prototype.currency = undefined;
+timapi.protocol.sixml.UnitAmountDiscount.prototype.exponent = undefined;
+timapi.protocol.sixml.UnitAmountDiscount.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:UnitAmountDiscount");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.protocol.sixml.UnitAmountGross = function (a) {
+    if (arguments.length == 1 && a instanceof timapi.protocol.sixml.UnitAmountGross) {
+        var value = a;
+        this.value = value.value;
+        this.currency = value.currency;
+        this.exponent = value.exponent;
+        return;
+    }
+    if (arguments.length == 1 && a instanceof timapi.protocol.XmlNode) {
+        var node = a;
+        this.value = (node.textContent ? parseInt(node.textContent) : 0);
+        if (this.xmlHasAttribute(node, "Currency")) {
+            this.currency = this.xmlGetAttribute(node, "Currency");
+        }
+        if (this.xmlHasAttribute(node, "Exponent")) {
+            this.exponent = (this.xmlGetAttribute(node, "Exponent") ? parseInt(this.xmlGetAttribute(node, "Exponent")) : 0);
+        }
+        return;
+    }
+    if (arguments.length != 0) {
+        throw new Error("Invalid argument");
+    }
+};
+timapi.protocol.sixml.UnitAmountGross.prototype = Object.create(timapi.protocol.Container.prototype);
+timapi.protocol.sixml.UnitAmountGross.prototype.value = 0;
+timapi.protocol.sixml.UnitAmountGross.prototype.currency = undefined;
+timapi.protocol.sixml.UnitAmountGross.prototype.exponent = undefined;
+timapi.protocol.sixml.UnitAmountGross.prototype.toXmlNode = function () {
+    var node = new timapi.protocol.XmlNode("sixml:UnitAmountGross");
+    node.textContent = timapi.utils.StringHelper.makeString(this.value);
+    if (this.currency != undefined) {
+        this.xmlSetAttribute(node, "Currency", this.currency);
+    }
+    if (this.exponent != undefined) {
+        this.xmlSetAttribute(node, "Exponent", timapi.utils.StringHelper.makeString(this.exponent));
+    }
+    return node;
+};
+timapi.statemachine.states.CommandFinishedInClosed = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.CommandFinishedInClosed.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.CommandFinishedInClosed.loggerName = "timapi.statemachine.states.CommandFinishedInClosed";
+timapi.statemachine.states.CommandFinishedInClosed.classname = "CommandFinishedInClosed";
+timapi.statemachine.states.CommandFinishedInClosed.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.CommandFinishedInClosed.loggerName);
+timapi.statemachine.states.CommandFinishedInClosed.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionIsEnabledAutoActivate()) {
+        try {
+            this.context.actionActivate();
+        }
+        catch (e) {
+            timapi.statemachine.states.CommandFinishedInClosed.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Activating(this.context));
+        return;
+    }
+    this.context.setState(new timapi.statemachine.states.LoggedIn(this.context));
+};
+timapi.statemachine.states.CommandFinishedInOpen = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.CommandFinishedInOpen.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.CommandFinishedInOpen.loggerName = "timapi.statemachine.states.CommandFinishedInOpen";
+timapi.statemachine.states.CommandFinishedInOpen.classname = "CommandFinishedInOpen";
+timapi.statemachine.states.CommandFinishedInOpen.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.CommandFinishedInOpen.loggerName);
+timapi.statemachine.states.CommandFinishedInOpen.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    if (this.context.conditionIsEnabledAutoDeactivate()) {
+        try {
+            this.context.actionDeactivate();
+        }
+        catch (e) {
+            timapi.statemachine.states.CommandFinishedInOpen.logger.log(timapi.logging.Level.severe, "Exception", e);
+            this.context.setState(new timapi.statemachine.states.Open(this.context));
+            return;
+        }
+        this.context.setState(new timapi.statemachine.states.Deactivating(this.context));
+        return;
+    }
+    this.context.setState(new timapi.statemachine.states.Open(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitBalanceInquiry.loggerName = "timapi.statemachine.states.WaitBalanceInquiry";
+timapi.statemachine.states.WaitBalanceInquiry.classname = "WaitBalanceInquiry";
+timapi.statemachine.states.WaitBalanceInquiry.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitBalanceInquiry.loggerName);
+timapi.statemachine.states.WaitBalanceInquiry.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.responseRequest = function () {
+    this.context.actionProcessResponseBalanceInquiry();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitBalanceInquiry.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitBalanceInquiry.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitReceiptRequestClosed.loggerName = "timapi.statemachine.states.WaitReceiptRequestClosed";
+timapi.statemachine.states.WaitReceiptRequestClosed.classname = "WaitReceiptRequestClosed";
+timapi.statemachine.states.WaitReceiptRequestClosed.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitReceiptRequestClosed.loggerName);
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.responseRequest = function () {
+    this.context.actionProcessResponseReceiptRequest();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInClosed(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitReceiptRequestClosed.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestClosed.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitReceiptRequestOpen.loggerName = "timapi.statemachine.states.WaitReceiptRequestOpen";
+timapi.statemachine.states.WaitReceiptRequestOpen.classname = "WaitReceiptRequestOpen";
+timapi.statemachine.states.WaitReceiptRequestOpen.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitReceiptRequestOpen.loggerName);
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.responseRequest = function () {
+    this.context.actionProcessResponseReceiptRequest();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.CommandFinishedInOpen(this.context));
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitReceiptRequestOpen.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitReceiptRequestOpen.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand = function (context) {
+    timapi.statemachine.states.DefaultState.call(this, context);
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype = Object.create(timapi.statemachine.states.DefaultState.prototype);
+timapi.statemachine.states.WaitSendCardCommand.loggerName = "timapi.statemachine.states.WaitSendCardCommand";
+timapi.statemachine.states.WaitSendCardCommand.classname = "WaitSendCardCommand";
+timapi.statemachine.states.WaitSendCardCommand.logger = timapi.logging.Logger.getLogger(timapi.statemachine.states.WaitSendCardCommand.loggerName);
+timapi.statemachine.states.WaitSendCardCommand.prototype.enterState = function () {
+    timapi.statemachine.states.DefaultState.prototype.enterState.call(this);
+    this.context.actionClearPendingEvent();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.activate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.applicationInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.balance = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.cancel = function () {
+    this.context.actionClearPendingCancel();
+    this.context.actionCancel();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.changeSettings = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.commit = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.connect = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.counterRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.deactivate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.disconnect = function () {
+    this.context.actionSendErrorResponseDisconnect();
+    this.context.actionClearPendingEvent();
+    this.context.actionDisconnect();
+    this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.dccRates = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.hardwareInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.initTransaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.login = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.logout = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.reboot = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.reconciliation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.receiptRequest = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.reconfig = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.rollback = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.softwareUpdate = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.systemInformation = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.transaction = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.connected = function () {
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.connectFailed = function () {
+    this.context.actionClearPendingEvent();
+    this.context.setState(new timapi.statemachine.states.ErrorState(this.context));
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.responseRequest = function () {
+    this.context.actionProcessResponseSendCardCommand();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.responseError = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.responseBusy = function () {
+    this.context.actionClearPendingEvent();
+    this.context.actionProcessResponseError();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.timeout = function () {
+    this.context.actionErrorTimeout();
+    this.context.setState(new timapi.statemachine.states.DialogMode(this.context));
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.keepAliveTimeout = function () {
+    try {
+        this.context.actionErrorConnectionLost();
+        this.context.actionDisconnect();
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+    catch (e) {
+        timapi.statemachine.states.WaitSendCardCommand.logger.log(timapi.logging.Level.severe, "Exception", e);
+        this.context.setState(new timapi.statemachine.states.Disconnected(this.context));
+    }
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.closeReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.openReader = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.ejectCard = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.openMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.closeMaintenanceWindow = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.activateServiceMenu = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.balanceInquiry = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.openDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.closeDialogMode = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.showSignatureCapture = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.showDialog = function () {
+    this.context.actionErrorRequestInProgress();
+};
+timapi.statemachine.states.WaitSendCardCommand.prototype.sendCardCommand = function () {
+    this.context.actionErrorRequestInProgress();
+};
+var timapi;
+(function (timapi) {
+    let Condition;
+    (function (Condition) {
+        Condition[Condition["NONE"] = 0] = "NONE";
+        Condition[Condition["ECR_INFO"] = 1] = "ECR_INFO";
+        Condition[Condition["EFT_INFO"] = 2] = "EFT_INFO";
+        Condition[Condition["SIGNATURE"] = 3] = "SIGNATURE";
+    })(Condition = timapi.Condition || (timapi.Condition = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class LineFormat {
+        constructor(conditionOrElements, elementsOrPadding, padding) {
+            this.padding = " ";
+            this.condition = timapi.Condition.NONE;
+            this.elements = new Array();
+            if (padding !== undefined && padding !== undefined) {
+                this.padding = padding;
+            }
+            else {
+                this.padding = " ";
+            }
+            if (elementsOrPadding !== undefined && elementsOrPadding !== undefined) {
+                if (elementsOrPadding instanceof Array) {
+                    this.elements = elementsOrPadding.slice();
+                }
+                else if (typeof elementsOrPadding === "string") {
+                    this.padding = elementsOrPadding;
+                }
+            }
+            if (conditionOrElements !== undefined && conditionOrElements !== undefined) {
+                if (conditionOrElements instanceof Array) {
+                    this.elements = conditionOrElements.slice();
+                }
+                else {
+                    this.condition = conditionOrElements;
+                }
+            }
+        }
+        get $elements() {
+            return this.elements;
+        }
+        get $padding() {
+            return this.padding;
+        }
+        get $condition() {
+            return this.condition;
+        }
+    }
+    timapi.LineFormat = LineFormat;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    let TextAlignment;
+    (function (TextAlignment) {
+        TextAlignment[TextAlignment["left"] = 0] = "left";
+        TextAlignment[TextAlignment["right"] = 1] = "right";
+        TextAlignment[TextAlignment["center"] = 2] = "center";
+    })(TextAlignment = timapi.TextAlignment || (timapi.TextAlignment = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    class TextElement {
+        constructor(textOrType, alignment) {
+            if (typeof textOrType === "string") {
+                this.type = timapi.TextType.text;
+                this.text = textOrType;
+            }
+            else {
+                this.alignment = alignment;
+                this.type = textOrType;
+                this.text = "";
+            }
+        }
+        get $type() {
+            return this.type;
+        }
+        get $alignment() {
+            return this.alignment;
+        }
+        get $text() {
+            return this.text;
+        }
+    }
+    timapi.TextElement = TextElement;
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    let TextType;
+    (function (TextType) {
+        TextType[TextType["text"] = 0] = "text";
+        TextType[TextType["userId"] = 1] = "userId";
+        TextType[TextType["posId"] = 2] = "posId";
+        TextType[TextType["transactionType"] = 3] = "transactionType";
+        TextType[TextType["fieldActId"] = 4] = "fieldActId";
+        TextType[TextType["fieldAccPer"] = 5] = "fieldAccPer";
+        TextType[TextType["fieldAcqId"] = 6] = "fieldAcqId";
+        TextType[TextType["fieldAid"] = 7] = "fieldAid";
+        TextType[TextType["fieldAmount"] = 8] = "fieldAmount";
+        TextType[TextType["fieldAmountDcc"] = 9] = "fieldAmountDcc";
+        TextType[TextType["fieldAmountOther"] = 10] = "fieldAmountOther";
+        TextType[TextType["fieldAuthCode"] = 11] = "fieldAuthCode";
+        TextType[TextType["fieldBrandName"] = 12] = "fieldBrandName";
+        TextType[TextType["fieldCurrency"] = 13] = "fieldCurrency";
+        TextType[TextType["fieldCurrencyDcc"] = 14] = "fieldCurrencyDcc";
+        TextType[TextType["fieldDccDisclaimer"] = 15] = "fieldDccDisclaimer";
+        TextType[TextType["fieldDisclaimer"] = 16] = "fieldDisclaimer";
+        TextType[TextType["fieldExponent"] = 17] = "fieldExponent";
+        TextType[TextType["fieldExponentDcc"] = 18] = "fieldExponentDcc";
+        TextType[TextType["fieldMarkupDcc"] = 19] = "fieldMarkupDcc";
+        TextType[TextType["fieldMarkupExponentDcc"] = 20] = "fieldMarkupExponentDcc";
+        TextType[TextType["fieldCardNumberPrintableMerchant"] = 21] = "fieldCardNumberPrintableMerchant";
+        TextType[TextType["fieldCardNumberPrintableCardholder"] = 22] = "fieldCardNumberPrintableCardholder";
+        TextType[TextType["fieldRateDcc"] = 23] = "fieldRateDcc";
+        TextType[TextType["fieldRateExponentDcc"] = 24] = "fieldRateExponentDcc";
+        TextType[TextType["fieldTimeStampDate"] = 25] = "fieldTimeStampDate";
+        TextType[TextType["fieldTimeStampTime"] = 26] = "fieldTimeStampTime";
+        TextType[TextType["fieldTrmId"] = 27] = "fieldTrmId";
+        TextType[TextType["fieldTrxRefNum"] = 28] = "fieldTrxRefNum";
+        TextType[TextType["fieldTrxSeqCnt"] = 29] = "fieldTrxSeqCnt";
+        TextType[TextType["fieldPosEntryMode"] = 30] = "fieldPosEntryMode";
+        TextType[TextType["fieldCardExpiryDate"] = 31] = "fieldCardExpiryDate";
+        TextType[TextType["fieldCardNumberEnc"] = 32] = "fieldCardNumberEnc";
+        TextType[TextType["fieldAmountSaldo"] = 33] = "fieldAmountSaldo";
+        TextType[TextType["fieldEctSeqCnt"] = 34] = "fieldEctSeqCnt";
+    })(TextType = timapi.TextType || (timapi.TextType = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var statemachine;
+    (function (statemachine) {
+        var sixml;
+        (function (sixml) {
+            class ConvertSIXml2TimApi {
+                static convertPrintData(printData) {
+                    let timReceipts = new Array();
+                    let timItemsItems = new Array();
+                    for (let receipt of printData.receipt) {
+                        timReceipts.push(new timapi.Receipt(timapi.protocol.constants.Recipient.protocol2TimApi(receipt.recipient), receipt.value));
+                    }
+                    for (let items of printData.receiptItems) {
+                        let timItems = new Array();
+                        for (let item of items.receiptItem) {
+                            timItems.push(new timapi.ReceiptItem(timapi.protocol.constants.ReceiptItemType.protocol2TimApi(item.receiptItemType), timapi.protocol.constants.Recipient.protocol2TimApi(item.recipient), item.value));
+                        }
+                        timItemsItems.push(new timapi.ReceiptItems(timapi.protocol.constants.ReceiptType.protocol2TimApi(items.receiptType), timItems));
+                    }
+                    return new timapi.PrintData(timReceipts, timItemsItems);
+                }
+                static convertPrintDataOrNull(printData) {
+                    if (printData == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertPrintData(printData);
+                    }
+                }
+                static convertAdditionalInfo(list) {
+                    let timList = new Map();
+                    for (let item of list.AdditionalInfoItem) {
+                        timList.set(item.iItemTextcode, item.value);
+                    }
+                    return timList;
+                }
+                static convertAdditionalInfoOrEmpty(list) {
+                    if (list == undefined) {
+                        return new Map();
+                    }
+                    else {
+                        return this.convertAdditionalInfo(list);
+                    }
+                }
+                static convertBasket(basket) {
+                    let timList = new Array();
+                    for (let item of basket.item) {
+                        let timItem = new timapi.BasketItem();
+                        timItem.$amountDiscount(this.convertAmountDiscountOrNull(item.amountDiscount));
+                        timItem.$amountTax(this.convertAmount(item.amountTax));
+                        timItem.$amountTotal(this.convertAmount(item.amountTotal));
+                        timItem.$authResult(item.itemAuthResult);
+                        timItem.$itemId(item.itemId);
+                        timItem.$itemQuantity(this.convertItemQuantity(item.itemQuantity));
+                        timItem.$loyaltyAuthResult(item.loyaltyAuthResult);
+                        timItem.$loyaltyId(item.loyaltyId);
+                        timItem.$prodDescription(item.prodDescription);
+                        timList.push(timItem);
+                    }
+                    return timList;
+                }
+                static convertBasketOrEmpty(basket) {
+                    if (basket == undefined) {
+                        return new Array();
+                    }
+                    else {
+                        return this.convertBasket(basket);
+                    }
+                }
+                static convertItemQuantity(itemQuantity) {
+                    return new timapi.ItemQuantity(itemQuantity.value, itemQuantity.exponent, itemQuantity.itemQuantityType);
+                }
+                static convertItemQuantityOrNull(itemQuantity) {
+                    if (itemQuantity == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertItemQuantity(itemQuantity);
+                    }
+                }
+                static convertCounters(counters) {
+                    let timCounters = new Array();
+                    for (let counter of counters.counter) {
+                        let timTotals = new Array();
+                        for (let total of counter.total) {
+                            let currency = timapi.constants.Currency[total.currency];
+                            let timDetails = new Array();
+                            for (let detail of total.trxDetail) {
+                                timDetails.push(new timapi.TrxDetail(detail.dccFlag, timapi.protocol.constants.TransactionType.protocol2TimApi(detail.transactionType), detail.count, new timapi.Amount(detail.amountSum, currency)));
+                            }
+                            timTotals.push(new timapi.Total(total.count, new timapi.Amount(total.amountSum, currency), timDetails));
+                        }
+                        timCounters.push(new timapi.Counter(counter.brandName, timapi.constants.PaymentProtocol.ep2, counter.acqId, counter.count, counter.countDcc, counter.countForeign, timTotals));
+                    }
+                    return new timapi.Counters(timapi.protocol.constants.CounterType.protocol2TimApi(counters.counterType), counters.actSeqCounter !== undefined ? counters.actSeqCounter : counters.periodSeqCounter, timCounters);
+                }
+                static convertCountersOrNull(counters) {
+                    if (counters == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertCounters(counters);
+                    }
+                }
+                static convertTimeDate(timeDate) {
+                    return new timapi.TimeDate(timeDate.$year, timeDate.$month, timeDate.$day, timeDate.$hour, timeDate.$minute, timeDate.$second);
+                }
+                static convertTimeDateOrNull(timeDate) {
+                    if (timeDate == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertTimeDate(timeDate);
+                    }
+                }
+                static convertAmount(amount) {
+                    return new timapi.Amount(amount.value, timapi.constants.Currency[amount.currency]);
+                }
+                static convertAmountDue(amount) {
+                    return new timapi.Amount(amount.value, timapi.constants.Currency[amount.currency]);
+                }
+                static convertAmountTax(amount) {
+                    return new timapi.Amount(amount.value, timapi.constants.Currency[amount.currency]);
+                }
+                static convertAmountTotal(amount) {
+                    return new timapi.Amount(amount.value, timapi.constants.Currency[amount.currency]);
+                }
+                static convertAmountSaldo(amount) {
+                    return new timapi.Amount(amount.value, timapi.constants.Currency[amount.currency]);
+                }
+                static convertAmountOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmount(amount);
+                    }
+                }
+                static convertAmountDueOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmount(amount);
+                    }
+                }
+                static convertAmountSaldoOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmount(amount);
+                    }
+                }
+                static convertAmountDcc(amount) {
+                    return new timapi.AmountDcc(amount.value, timapi.constants.Currency[amount.currency], amount.rate, amount.rateExponent, amount.markup, amount.markupExponent);
+                }
+                static convertAmountDccOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmountDcc(amount);
+                    }
+                }
+                static convertAmountTip(amount) {
+                    return new timapi.Amount(amount.value, timapi.constants.Currency[amount.currency]);
+                }
+                static convertAmountTipOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmountTip(amount);
+                    }
+                }
+                static convertTransactionInformation(info, terminalId) {
+                    return new timapi.TransactionInformation(info.posEntryMode ? timapi.protocol.constants.PosEntryMode.protocol2TimApi(info.posEntryMode) : undefined, info.cvm ? timapi.protocol.constants.Cvm.protocol2TimApi(info.cvm) : undefined, info.merchantAction ? timapi.protocol.constants.MerchantAction.protocol2TimApi(info.merchantAction) : undefined, info.authCode, this.convertTimeDateOrNull(info.timeStamp), info.transRef !== undefined ? info.transRef : undefined, info.transSeq !== undefined ? info.transSeq : undefined, info.acqId !== undefined ? info.acqId : 0, this.convertSignatureInformationOrNull(info.signatureInformation), info.trmTransRef, info.acqTransRef);
+                }
+                static convertTransactionInformationOrNull(info, terminaleId) {
+                    if (info == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertTransactionInformation(info);
+                    }
+                }
+                static convertAmountDiscount(amount) {
+                    return new timapi.AmountDiscount(amount.value, timapi.constants.Currency[amount.currency], amount.discountId);
+                }
+                static convertAmountDiscountOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmountDiscount(amount);
+                    }
+                }
+                static convertSignatureInformation(info) {
+                    return new timapi.SignatureInformation(timapi.protocol.constants.ImageFileFormat.protocol2TimApi(info.imageFileFormat), info.imageWidth, info.imageHeight, info.value);
+                }
+                static convertSignatureInformationOrNull(info) {
+                    if (info == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertSignatureInformation(info);
+                    }
+                }
+                static convertCardData(cardData) {
+                    let timTrackDatas = new Array();
+                    for (let trackData of cardData.cardTrackData) {
+                        timTrackDatas.push(new timapi.CardTrackData(trackData.trackNum, trackData.value));
+                    }
+                    let timLoyalityInfos = new Map();
+                    if (cardData.loyaltyInformationList !== undefined) {
+                        for (let info of cardData.loyaltyInformationList.loyaltyInformation) {
+                            timLoyalityInfos.set(info.loyaltyInfoType, info.value);
+                        }
+                    }
+                    return new timapi.CardData(timapi.protocol.constants.PosEntryMode.protocol2TimApiIfValid(cardData.posEntryMode), cardData.aid, cardData.acc, cardData.cardNumber, cardData.cardNumberPrintable, cardData.cardNumberPrintableCardholder, cardData.cardNumberEnc, cardData.cardNumberEncKeyIndex !== undefined
+                        ? cardData.cardNumberEncKeyIndex
+                        : 0, this.convertTimeDateOrNull(cardData.cardExpiryDate), cardData.brandName, cardData.tenderName, timTrackDatas, timLoyalityInfos, cardData.cardRef, timapi.protocol.constants.ProcessingDisposition.protocol2TimApiIfValid(cardData.processingDisposition), cardData.language);
+                }
+                static convertCardDataOrNull(cardData) {
+                    if (cardData == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertCardData(cardData);
+                    }
+                }
+                static convertNativeErrorOrNull(nativeError) {
+                    if (nativeError == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertNativeError(nativeError);
+                    }
+                }
+                static convertNativeError(nativeError) {
+                    return new timapi.NativeError(nativeError.errorMessage, nativeError.getErrorSource, nativeError.errorCode);
+                }
+                static convertPpInfoOrNull(ppInfo) {
+                    if (ppInfo == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertPpInfo(ppInfo);
+                    }
+                }
+                static convertPpInfo(ppInfo) {
+                    return new timapi.PpInfo(timapi.protocol.constants.PaymentProtocol.protocol2TimApi(ppInfo.paymentProtocol), ppInfo.ppEp2TransSeqCntOrig, ppInfo.ppEp2AuthReslt, ppInfo.ppEp2AuthRespC);
+                }
+                static convertRequestShowSignatureCapture(request) {
+                    let sixmlRequest = new timapi.protocol.sixml.Request_ShowSignatureCapture();
+                    sixmlRequest.setBrandBar(this.convertBrandBar(request.$brandMode, request.$brandBar));
+                    let sixmlSigData = new timapi.protocol.sixml.SignatureData();
+                    sixmlSigData.setBackgroundColor(this.convertColor(request.$backgroundColor));
+                    sixmlSigData.setImageFileFormat(timapi.protocol.constants.ImageFileFormat.protocol2TimApi(request.$imageFileFormat));
+                    sixmlSigData.setImageHeight(request.$imageFileHeight);
+                    sixmlSigData.setImageWidth(request.$imageFileWidth);
+                    if (request.$language != undefined) {
+                        sixmlSigData.setLanguage(request.$language);
+                    }
+                    sixmlSigData.setResourceId(timapi.protocol.constants.ResourceId.protocol2TimApi(request.$resourceId));
+                    sixmlSigData.setSignatureColor(this.convertColor(request.$signatureColor));
+                    sixmlSigData.setTheme(timapi.protocol.constants.Theme.protocol2TimApi(request.$theme));
+                    sixmlSigData.setTimeout(request.$timeout);
+                    if (request.$watermarkColor != undefined) {
+                        sixmlSigData.setWatermarkColor(this.convertColor(request.$watermarkColor));
+                    }
+                    if (request.$watermarkItems.length > 0) {
+                        let sixmlWatermarkList = new timapi.protocol.sixml.WatermarkItemList();
+                        for (let each of request.$watermarkItems) {
+                            sixmlWatermarkList.getWatermarkItem().push(each);
+                        }
+                        sixmlSigData.setWatermarkItemList(sixmlWatermarkList);
+                    }
+                    sixmlRequest.setSignatureData(sixmlSigData);
+                    return sixmlRequest;
+                }
+                static convertBrandBar(mode, brands) {
+                    let sixmlBrandBar = new timapi.protocol.sixml.BrandBar();
+                    sixmlBrandBar.setBrandMode(timapi.protocol.constants.BrandMode.protocol2TimApi(mode));
+                    if (mode === timapi.constants.BrandMode.selected) {
+                        let string = new timapi.utils.StringBuilder();
+                        let addSeparator = false;
+                        for (let each of brands) {
+                            if (addSeparator) {
+                                string.append(",");
+                            }
+                            addSeparator = true;
+                            string.append(timapi.protocol.constants.BrandBarBrand.protocol2TimApi(each));
+                        }
+                        sixmlBrandBar.setValue(timapi.utils.StringHelper.makeString(string));
+                    }
+                    return sixmlBrandBar;
+                }
+                static convertColor(color) {
+                    return color.$colorCode;
+                }
+            }
+            sixml.ConvertSIXml2TimApi = ConvertSIXml2TimApi;
+        })(sixml = statemachine.sixml || (statemachine.sixml = {}));
+    })(statemachine = timapi.statemachine || (timapi.statemachine = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var statemachine;
+    (function (statemachine) {
+        var sixml;
+        (function (sixml) {
+            class ConvertTimApi2SIXml {
+                static convertSettings(settings) {
+                    let sixmlSettingList = new timapi.protocol.sixml.SettingsList();
+                    for (let [key, value] of settings.entries()) {
+                        let sixmlSetting = new timapi.protocol.sixml.Setting();
+                        sixmlSetting.settingType = timapi.protocol.constants.SettingType.timApi2Protocol(key);
+                        sixmlSetting.value = value;
+                        sixmlSettingList.setting.push(sixmlSetting);
+                    }
+                    return sixmlSettingList;
+                }
+                static convertTransactionRequest(terminal, request, type, guides) {
+                    let data = request.$transactionData;
+                    let hasGastro = guides.has(timapi.constants.Guides.gastro);
+                    let hasPetrol = guides.has(timapi.constants.Guides.petrol);
+                    let hasUnattendd = guides.has(timapi.constants.Guides.unattended);
+                    switch (type) {
+                        case timapi.constants.TransactionType.purchase: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_Purchase();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (hasGastro && request.$tipAmount !== undefined) {
+                                sixmlRequest.amountTip = this.convertAmountTip(request.$tipAmount);
+                            }
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                if (hasGastro) {
+                                    sixmlData.tipAllowed = data.$tipAllowed;
+                                }
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                                if (hasPetrol || hasUnattendd) {
+                                    sixmlRequest.language = data.$language;
+                                }
+                            }
+                            sixmlRequest.usrId = request.$userId;
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.credit: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_Credit();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.transRef = data.$transRef;
+                                if (data.$trxOriginalDate !== undefined) {
+                                    sixmlData.setTrxOriginalDate(this.convertTimeDate(data.$trxOriginalDate));
+                                }
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            sixmlRequest.usrId = request.$userId;
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.reversal: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_Reversal();
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            let sixmlData = new timapi.protocol.sixml.TransactionData();
+                            sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                            sixmlData.transSeq = data.$transSeq;
+                            sixmlData.acqId = data.$acqId;
+                            sixmlData.acqTransRef = data.$acqTransRef;
+                            sixmlData.cardRef = data.$cardRef;
+                            sixmlData.trmTransRef = data.$trmTransRef;
+                            sixmlRequest.transactionData = sixmlData;
+                            sixmlRequest.usrId = request.$userId;
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.preAuthorization: {
+                            let sixmlRequest = new timapi.protocol.sixml
+                                .Request_PreAuthorization();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                                if (hasPetrol || hasUnattendd) {
+                                    sixmlRequest.language = data.$language;
+                                }
+                            }
+                            sixmlRequest.usrId = request.$userId;
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.finalizePurchase: {
+                            let sixmlRequest = new timapi.protocol.sixml
+                                .Request_FinalizePurchase();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (request.$additionalInfo.size > 0) {
+                                sixmlRequest.additionalInfoList = this.convertAdditionalInfoList(request.$additionalInfo);
+                            }
+                            if (request.$basket.length > 0) {
+                                sixmlRequest.basket = this.convertBasket(request.$basket);
+                            }
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.transRef = data.$transRef;
+                                sixmlData.transSeq = data.$transSeq;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.purchaseForcedAcceptance: {
+                            let sixmlRequest = new timapi.protocol.sixml
+                                .Request_PurchaseForcedAcceptance();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                if (hasGastro) {
+                                    sixmlData.tipAllowed = data.$tipAllowed;
+                                }
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            sixmlRequest.usrId = request.$userId;
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.cashAdvance: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_CashAdvance();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            sixmlRequest.usrId = terminal.$userId;
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.transRef = data.$transRef;
+                                sixmlData.transSeq = data.$transSeq;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.purchaseWithCashback: {
+                            let sixmlRequest = new timapi.protocol.sixml
+                                .Request_PurchaseWithCashback();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            sixmlRequest.amountOther = this.convertAmountOther(request.$amountOther);
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                if (hasGastro) {
+                                    sixmlData.tipAllowed = data.$tipAllowed;
+                                }
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            sixmlRequest.usrId = request.$userId;
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.purchasePhoneAuthorized: {
+                            let sixmlRequest = new timapi.protocol.sixml
+                                .Request_PurchasePhoneAuthorized();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (request.$merchantOptions.length > 0) {
+                                sixmlRequest.merchantOptionList = this.convertMerchantOptions(request.$merchantOptions);
+                            }
+                            sixmlRequest.usrId = terminal.$userId;
+                            if (data !== undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                if (hasGastro) {
+                                    sixmlData.tipAllowed = data.$tipAllowed;
+                                }
+                                sixmlData.acqId = data.$acqId;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.phoneAuthCode = data.$phoneAuthCode;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.reservation: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_Reservation();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (data != undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlData.trmTransRef = data.$trmTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.adjustReservation: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_AdjustReservation();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (data != undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.partialApprovalAllowed = data.$partialApprovalAllowed;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.cancelReservation: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_CancelReservation();
+                            if (data != undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.ecrSeqCounter = data.$ecrSeqCounter;
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        case timapi.constants.TransactionType.purchaseReservation: {
+                            let sixmlRequest = new timapi.protocol.sixml.Request_PurchaseReservation();
+                            sixmlRequest.amount = this.convertAmount(request.$amount);
+                            if (data != undefined) {
+                                let sixmlData = new timapi.protocol.sixml.TransactionData();
+                                sixmlData.dccAllowed = data.$dccAllowed;
+                                sixmlData.$ecrSeqCounter = data.$ecrSeqCounter;
+                                if (hasGastro) {
+                                    sixmlData.tipAllowed = data.$tipAllowed;
+                                }
+                                sixmlData.acqTransRef = data.$acqTransRef;
+                                sixmlData.cardRef = data.$cardRef;
+                                sixmlRequest.transactionData = sixmlData;
+                            }
+                            return sixmlRequest;
+                        }
+                        default:
+                            throw new Error("unexpected transactiont type");
+                    }
+                }
+                static convertAmount(amount) {
+                    let sixmlAmount = new timapi.protocol.sixml.Amount();
+                    sixmlAmount.currency = amount.$currency.code;
+                    sixmlAmount.exponent = amount.$currency.exponent;
+                    sixmlAmount.value = Math.round(amount.$amount);
+                    return sixmlAmount;
+                }
+                static convertAmountOrNull(amount) {
+                    if (amount == undefined) {
+                        return undefined;
+                    }
+                    else {
+                        return this.convertAmount(amount);
+                    }
+                }
+                static convertAmountTip(amount) {
+                    let sixmlAmountTip = new timapi.protocol.sixml.AmountTip();
+                    sixmlAmountTip.currency = amount.$currency.code;
+                    sixmlAmountTip.exponent = amount.$currency.exponent;
+                    sixmlAmountTip.value = amount.$amount;
+                    return sixmlAmountTip;
+                }
+                static convertAmountOther(amount) {
+                    let sixmlAmountOther = new timapi.protocol.sixml.AmountOther();
+                    sixmlAmountOther.currency = amount.$currency.code;
+                    sixmlAmountOther.exponent = amount.$currency.exponent;
+                    sixmlAmountOther.value = amount.$amount;
+                    return sixmlAmountOther;
+                }
+                static convertAmountDiscount(amount) {
+                    let sixmlAmount = new timapi.protocol.sixml.AmountDiscount();
+                    sixmlAmount.currency = amount.$currency.code;
+                    sixmlAmount.exponent = amount.$currency.exponent;
+                    sixmlAmount.value = amount.$amount;
+                    sixmlAmount.discountId = amount.$discountId;
+                    return sixmlAmount;
+                }
+                static convertAmountTax(amount) {
+                    let sixmlAmount = new timapi.protocol.sixml.AmountTax();
+                    sixmlAmount.currency = amount.$currency.code;
+                    sixmlAmount.exponent = amount.$currency.exponent;
+                    sixmlAmount.value = amount.$amount;
+                    return sixmlAmount;
+                }
+                static convertAmountTotal(amount) {
+                    let sixmlAmount = new timapi.protocol.sixml.AmountTotal();
+                    sixmlAmount.currency = amount.$currency.code;
+                    sixmlAmount.exponent = amount.$currency.exponent;
+                    sixmlAmount.value = amount.$amount;
+                    return sixmlAmount;
+                }
+                static convertMerchantOptions(options) {
+                    let sixmlList = new timapi.protocol.sixml.MerchantOptionList();
+                    for (let option of options) {
+                        let sixmlOption = new timapi.protocol.sixml.MerchantOption();
+                        sixmlOption.setMerchantOptionType(timapi.protocol.constants.MerchantOptionType.timApi2Protocol(option.$type));
+                        sixmlOption.value = option.$value;
+                        sixmlList.merchantOption.push(sixmlOption);
+                    }
+                    return sixmlList;
+                }
+                static convertAdditionalInfoList(list) {
+                    let sixmlList = new timapi.protocol.sixml.AdditionalInfoList();
+                    for (let [key, value] of list.entries()) {
+                        let sixmlItem = new timapi.protocol.sixml.AdditionalInfoItem();
+                        sixmlItem.itemTextcode = key;
+                        sixmlItem.value = value;
+                        sixmlList.additionalInfoItem.push(sixmlItem);
+                    }
+                    return sixmlList;
+                }
+                static convertBasket(basket) {
+                    let sixmlBasket = new timapi.protocol.sixml.Basket();
+                    for (let item of basket) {
+                        let sixmlItem = new timapi.protocol.sixml.Item();
+                        sixmlItem.amount = this.convertAmount(item.$amount);
+                        if (item.$amountDiscount !== undefined) {
+                            sixmlItem.amountDiscount = this.convertAmountDiscount(item.$amountDiscount);
+                        }
+                        sixmlItem.amountTax = this.convertAmountTax(item.$amountTax);
+                        sixmlItem.amountTotal = this.convertAmountTotal(item.$amountTotal);
+                        sixmlItem.itemAuthResult = item.$authResult;
+                        sixmlItem.itemId = item.$itemId;
+                        sixmlItem.itemQuantity = this.convertItemQuantity(item.$itemQuantity);
+                        sixmlItem.loyaltyAuthResult = item.$loyaltyAuthResult;
+                        sixmlItem.loyaltyId = item.$loyaltyId;
+                        sixmlItem.prodDescription = item.$prodDescription;
+                        sixmlBasket.item.push(sixmlItem);
+                    }
+                    return sixmlBasket;
+                }
+                static convertItemQuantity(itemQuantity) {
+                    let sixmlItemQuantity = new timapi.protocol.sixml.ItemQuantity();
+                    sixmlItemQuantity.value = itemQuantity.$quantity;
+                    sixmlItemQuantity.exponent = itemQuantity.$exponent;
+                    sixmlItemQuantity.itemQuantityType = itemQuantity.$quantityType;
+                    return sixmlItemQuantity;
+                }
+                static convertTimeDate(timeDate) {
+                    return new timapi.protocol.TimeDate(timeDate.$year, timeDate.$month, timeDate.$day, timeDate.$hour, timeDate.$minute, timeDate.$second);
+                }
+                static findMatchingProtocolLevel(terminal) {
+                    let protocolLevel = 0;
+                    if (terminal.getFeatures() == undefined) {
+                        for (let pl of Object.values(timapi.constants.ProtocolLevel)) {
+                            protocolLevel = Math.max(protocolLevel, timapi.protocol.constants.ProtocolLevel.timApi2Protocol(pl));
+                        }
+                    }
+                    else {
+                        if (terminal.getFeatures().$sixml.$protocolLevels.size === 0) {
+                            return 0;
+                        }
+                        for (let pl of terminal.getFeatures().$sixml.$protocolLevels) {
+                            protocolLevel = Math.max(protocolLevel, timapi.protocol.constants.ProtocolLevel.timApi2Protocol(pl));
+                        }
+                    }
+                    return protocolLevel;
+                }
+                static createLoginRequest(terminal) {
+                    let settings = terminal.$settings;
+                    let guides = settings.$guides;
+                    let request = new timapi.protocol.sixml.Request_Login();
+                    request.integratorId = settings.$integratorId;
+                    request.manufacturerFlags = settings.$manufacturerFlags;
+                    request.posId = terminal.$posId;
+                    if (terminal.$printOptions.length > 0) {
+                        let printOptionList = new timapi.protocol.sixml.PrintOptionList();
+                        for (let option of terminal.$printOptions) {
+                            let printOption = new timapi.protocol.sixml.PrintOptions();
+                            printOption.printFlags = timapi.protocol.constants.PrintFlag.timApi2Protocol(option.$printFlags);
+                            printOption.printFormat = timapi.protocol.constants.PrintFormat.timApi2Protocol(option.$printFormat);
+                            printOption.printWidth = option.$printWidth;
+                            printOption.recipient = timapi.protocol.constants.Recipient.timApi2Protocol(option.$recipient);
+                            printOptionList.printOptions.push(printOption);
+                        }
+                        request.printOptionList = printOptionList;
+                    }
+                    let requestAutoCommit = settings.$autoCommit;
+                    if (terminal.getFeatures() !== undefined) {
+                        if (terminal.getFeatures().$sixml.$autoCommit === timapi.Support.disabled) {
+                            requestAutoCommit = false;
+                        }
+                    }
+                    let protocolOptionList = new timapi.protocol.sixml.ProtocolOptionList();
+                    let protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlProtocolLevel;
+                    let protocolLevel = this.findMatchingProtocolLevel(terminal);
+                    if (protocolLevel == 0) {
+                        throw new timapi.TimException(timapi.constants.ResultCode.apiFunctionDisallowed);
+                    }
+                    protocolOption.value = protocolLevel;
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlGuides;
+                    protocolOption.value = timapi.protocol.constants.Guides.timApi2Protocol(guides).toString(16);
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlAutoCommit;
+                    protocolOption.value = requestAutoCommit ? 1 : 0;
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    if (guides.has(timapi.constants.Guides.unattended)) {
+                        protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                        protocolOption.optionType =
+                            timapi.protocol.constants.OptionType.sixmlAutoShiftManagement;
+                        protocolOption.value = settings.$autoShiftManagement ? 1 : 0;
+                        protocolOptionList.protocolOption.push(protocolOption);
+                        protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                        protocolOption.optionType =
+                            timapi.protocol.constants.OptionType.sixmlAutoShutterManagement;
+                        protocolOption.value = settings.$autoShutterManagement ? 1 : 0;
+                        protocolOptionList.protocolOption.push(protocolOption);
+                    }
+                    protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlCardInsertionTimeout;
+                    protocolOption.value = settings.$cardInsertionTimeout;
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlCardRemovalTimeout;
+                    protocolOption.value = settings.$cardRemovalTimeout;
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlCommitTimeout;
+                    protocolOption.value = settings.$commitTimeout;
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                    protocolOption.optionType =
+                        timapi.protocol.constants.OptionType.sixmlPartialApproval;
+                    protocolOption.value = settings.$partialApproval ? 1 : 0;
+                    protocolOptionList.protocolOption.push(protocolOption);
+                    if (guides.has(timapi.constants.Guides.petrol)) {
+                        protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                        protocolOption.optionType =
+                            timapi.protocol.constants.OptionType.sixmlProceedTimeout;
+                        protocolOption.value = settings.$proceedTimeout;
+                        protocolOptionList.protocolOption.push(protocolOption);
+                    }
+                    if (guides.has(timapi.constants.Guides.gastro)) {
+                        protocolOption = new timapi.protocol.sixml.ProtocolOption();
+                        protocolOption.optionType =
+                            timapi.protocol.constants.OptionType.sixmlTip;
+                        protocolOption.value = settings.$tipAllowed ? 1 : 0;
+                        protocolOptionList.protocolOption.push(protocolOption);
+                    }
+                    request.protocolOptionList = protocolOptionList;
+                    return request;
+                }
+                static convertRequestShowSignatureCapture(request) {
+                    let sixmlRequest = new timapi.protocol.sixml
+                        .Request_ShowSignatureCapture();
+                    sixmlRequest.setBrandBar(this.convertBrandBar(request.$brandMode, request.$brandBar));
+                    let sixmlSigData = new timapi.protocol.sixml.SignatureData();
+                    sixmlSigData.vackgroundColor = this.convertColor(request.$backgroundColor);
+                    sixmlSigData.setImageFileFormat(timapi.protocol.constants.ImageFileFormat.timApi2Protocol(request.$imageFileFormat));
+                    sixmlSigData.setImageHeight(request.$imageFileHeight);
+                    sixmlSigData.setImageWidth(request.$imageFileWidth);
+                    if (request.$language !== undefined) {
+                        sixmlSigData.setLanguage(request.$language);
+                    }
+                    sixmlSigData.setResourceId(timapi.protocol.constants.ResourceId.timApi2Protocol(request.$resourceId));
+                    sixmlSigData.setSignatureColor(this.convertColor(request.$signatureColor));
+                    sixmlSigData.setTheme(timapi.protocol.constants.Theme.timApi2Protocol(request.$theme));
+                    sixmlSigData.setTimeout(request.$timeout);
+                    if (request.$watermarkColor !== undefined) {
+                        sixmlSigData.setWatermarkColor(this.convertColor(request.$watermarkColor));
+                    }
+                    if (request.$watermarkItems.length > 0) {
+                        let sixmlWatermarkList = new timapi.protocol.sixml.WatermarkItemList();
+                        for (let each of request.$watermarkItems) {
+                            sixmlWatermarkList.getWatermarkItem().push(each);
+                        }
+                        sixmlSigData.setWatermarkItemList(sixmlWatermarkList);
+                    }
+                    sixmlRequest.setSignatureData(sixmlSigData);
+                    return sixmlRequest;
+                }
+                static convertBrandBar(mode, brands) {
+                    let sixmlBrandBar = new timapi.protocol.sixml.BrandBar();
+                    sixmlBrandBar.setBrandMode(timapi.protocol.constants.BrandMode.timApi2Protocol(mode));
+                    if (mode === timapi.constants.BrandMode.selected) {
+                        let string = new timapi.utils.StringBuilder();
+                        let addSeparator = false;
+                        for (let each of brands) {
+                            if (addSeparator) {
+                                string.append(",");
+                            }
+                            addSeparator = true;
+                            string.append(timapi.protocol.constants.BrandBarBrand.timApi2Protocol(each));
+                        }
+                        sixmlBrandBar.value = timapi.utils.StringHelper.makeString(string);
+                    }
+                    return sixmlBrandBar;
+                }
+                static convertRequestShowDialog(request) {
+                    let sixmlRequest = new timapi.protocol.sixml.Request_ShowDialog();
+                    sixmlRequest.setBrandBar(this.convertBrandBar(request.$brandMode, request.$brandBar));
+                    let sixmlResData = new timapi.protocol.sixml.ResourceData();
+                    sixmlResData.setResourceId(timapi.protocol.constants.ResourceId.timApi2Protocol(request.$resourceId));
+                    sixmlResData.setTheme(timapi.protocol.constants.Theme.timApi2Protocol(request.$theme));
+                    sixmlResData.setTimeout(request.$timeout);
+                    if (request.$language !== undefined) {
+                        sixmlResData.setLanguage(request.$language);
+                    }
+                    if (request.$placeholderItems.size > 0) {
+                        let sixmlList = new timapi.protocol.sixml.PlaceholderItemList();
+                        for (let [key, value] of request.$placeholderItems.entries()) {
+                            let sixmlItem = new timapi.protocol.sixml.PlaceholderItem();
+                            sixmlItem.placeholderNumber = key;
+                            sixmlItem.value = value;
+                            sixmlList.placeholderItem.push(sixmlItem);
+                        }
+                        sixmlResData.setPlaceholderItemList(sixmlList);
+                    }
+                    sixmlRequest.setResourceData(sixmlResData);
+                    return sixmlRequest;
+                }
+                static convertColor(color) {
+                    return color.$colorCode;
+                }
+            }
+            sixml.ConvertTimApi2SIXml = ConvertTimApi2SIXml;
+        })(sixml = statemachine.sixml || (statemachine.sixml = {}));
+    })(statemachine = timapi.statemachine || (timapi.statemachine = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var statemachine;
+    (function (statemachine) {
+        var sixml;
+        (function (sixml) {
+            class TaskKeepAliveCheck {
+                constructor($delegate, $sleepInSeconds) {
+                    this.delegate = $delegate;
+                    let _this = this;
+                    this.id = setTimeout(function () {
+                        _this.run();
+                    }, $sleepInSeconds);
+                }
+                run() {
+                    this.delegate.armKeepAliveTimer();
+                    try {
+                        this.delegate.eventKeepAliveTimer();
+                    }
+                    catch (error) {
+                        this.delegate.onError(error);
+                    }
+                }
+                cancel() {
+                    try {
+                        clearTimeout(this.id);
+                    }
+                    catch (error) {
+                    }
+                }
+            }
+            sixml.TaskKeepAliveCheck = TaskKeepAliveCheck;
+        })(sixml = statemachine.sixml || (statemachine.sixml = {}));
+    })(statemachine = timapi.statemachine || (timapi.statemachine = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var statemachine;
+    (function (statemachine) {
+        var sixml;
+        (function (sixml) {
+            class TaskKeepAliveDisconnect {
+                constructor($delegate, $sleepInSeconds) {
+                    this.delegate = $delegate;
+                    let _this = this;
+                    this.id = setTimeout(function () {
+                        _this.run();
+                    }, $sleepInSeconds);
+                }
+                run() {
+                    this.delegate.cancelTaskKeepAliveDisconnect();
+                    try {
+                        this.delegate.eventKeepAliveTimeout();
+                    }
+                    catch (error) {
+                        this.delegate.onError(error);
+                    }
+                }
+                cancel() {
+                    try {
+                        clearTimeout(this.id);
+                    }
+                    catch (error) {
+                    }
+                }
+            }
+            sixml.TaskKeepAliveDisconnect = TaskKeepAliveDisconnect;
+        })(sixml = statemachine.sixml || (statemachine.sixml = {}));
+    })(statemachine = timapi.statemachine || (timapi.statemachine = {}));
+})(timapi || (timapi = {}));
+var timapi;
+(function (timapi) {
+    var statemachine;
+    (function (statemachine) {
+        var sixml;
+        (function (sixml) {
+            class TaskTimeout {
+                constructor($delegate, $sleepInSeconds) {
+                    this.delegate = $delegate;
+                    let _this = this;
+                    this.id = setTimeout(function () {
+                        _this.run();
+                    }, $sleepInSeconds);
+                }
+                run() {
+                    this.delegate.cancelTaskTimeout();
+                    try {
+                        this.delegate.eventTimeout();
+                    }
+                    catch (error) {
+                        this.delegate.onError(error);
+                    }
+                }
+                cancel() {
+                    try {
+                        clearTimeout(this.id);
+                    }
+                    catch (error) {
+                    }
+                }
+            }
+            sixml.TaskTimeout = TaskTimeout;
+        })(sixml = statemachine.sixml || (statemachine.sixml = {}));
+    })(statemachine = timapi.statemachine || (timapi.statemachine = {}));
+})(timapi || (timapi = {}));
diff --git a/addons/pos_six/static/src/js/models.js b/addons/pos_six/static/src/js/models.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf00744239cb11d36ceccfc44b7f1b3a296d6762
--- /dev/null
+++ b/addons/pos_six/static/src/js/models.js
@@ -0,0 +1,9 @@
+odoo.define('pos_six.models', function (require) {
+
+var models = require('point_of_sale.models');
+var PaymentSix = require('pos_six.payment');
+
+models.register_payment_method('six', PaymentSix);
+models.load_fields('pos.payment.method', ['six_terminal_ip']);
+
+});
diff --git a/addons/pos_six/static/src/js/payment_six.js b/addons/pos_six/static/src/js/payment_six.js
new file mode 100644
index 0000000000000000000000000000000000000000..15bbcb6745d67687a29b278c2e24a57aad796ac3
--- /dev/null
+++ b/addons/pos_six/static/src/js/payment_six.js
@@ -0,0 +1,134 @@
+odoo.define('pos_six.payment', function (require) {
+"use strict";
+
+var core = require('web.core');
+var PaymentInterface = require('point_of_sale.PaymentInterface');
+
+var _t = core._t;
+
+var PaymentSix = PaymentInterface.extend({
+
+    //--------------------------------------------------------------------------
+    // Public
+    //--------------------------------------------------------------------------
+
+    /**
+     * @override
+     */
+    init: function () {
+        this._super.apply(this, arguments);
+        this.enable_reversals();
+
+        var settings = new timapi.TerminalSettings();
+        settings.connectionMode = timapi.constants.ConnectionMode.onFixIp;
+        settings.connectionIPString = this.payment_method.six_terminal_ip;
+        settings.connectionIPPort = "80";
+
+        this.terminal = new timapi.Terminal(settings);
+        this.terminal.posId = this.pos.pos_session.name;
+        this.terminal.userId = this.pos.pos_session.user_id[0];
+
+        this.terminalListener = new timapi.DefaultTerminalListener();
+        this.terminalListener.transactionCompleted = this._onTransactionComplete.bind(this);
+        this.terminal.addListener(this.terminalListener);
+
+        var recipients = [timapi.constants.Recipient.merchant, timapi.constants.Recipient.cardholder];
+        var options = [];
+        _.forEach(recipients, (recipient) => {
+            var option = new timapi.PrintOption(
+                recipient,
+                timapi.constants.PrintFormat.normal,
+                45,
+                [timapi.constants.PrintFlag.suppressHeader, timapi.constants.PrintFlag.suppressEcrInfo]
+            );
+            options.push(option);
+        });
+        this.terminal.printOptions = options;
+    },
+
+    /**
+     * @override
+     */
+    send_payment_cancel: function () {
+        this._super.apply(this, arguments);
+        this.terminal.cancel();
+        return Promise.resolve();
+    },
+
+    /**
+     * @override
+     */
+    send_payment_request: function () {
+        this._super.apply(this, arguments);
+        this.pos.get_order().selected_paymentline.set_payment_status('waitingCard');
+        return this._sendTransaction(timapi.constants.TransactionType.purchase);
+    },
+
+    /**
+     * @override
+     */
+    send_payment_reversal: function () {
+        this._super.apply(this, arguments);
+        this.pos.get_order().selected_paymentline.set_payment_status('reversing');
+        return this._sendTransaction(timapi.constants.TransactionType.reversal);
+    },
+
+    //--------------------------------------------------------------------------
+    // Private
+    //--------------------------------------------------------------------------
+
+    _onTransactionComplete: function (event, data) {
+        timapi.DefaultTerminalListener.prototype.transactionCompleted(event, data);
+
+        if (event.exception) {
+            this.pos.gui.show_popup('error', {
+                title: _t('Terminal Error'),
+                body: _t('Transaction was not processed correctly'),
+            });
+
+            this.transactionResolve();
+        } else {
+            if (data.printData){
+                this._printReceipts(data.printData.receipts)
+            }
+
+            // Store Transaction Data
+            var transactionData = new timapi.TransactionData();
+            transactionData.transSeq = data.transactionInformation.transSeq;
+            this.terminal.transactionData = transactionData;
+
+            this.transactionResolve(true);
+        }
+    },
+
+    _printReceipts: function (receipts) {
+        _.forEach(receipts, (receipt) => {
+            var value = receipt.value.replace(/\n/g, "<br />");
+            if (receipt.recipient === timapi.constants.Recipient.merchant && this.pos.proxy.printer) {
+                this.pos.proxy.printer.print_receipt(
+                    "<div class='pos-receipt'><div class='pos-payment-terminal-receipt'>" +
+                        value +
+                    "</div></div>"
+                );
+            } else if (receipt.recipient === timapi.constants.Recipient.cardholder) {
+                this.pos.get_order().selected_paymentline.set_receipt_info(value);
+            }
+        });
+    },
+
+    _sendTransaction: function (transactionType) {
+        var amount = new timapi.Amount(
+            this.pos.get_order().selected_paymentline.amount,
+            timapi.constants.Currency[this.pos.currency.name]
+        );
+
+        return new Promise((resolve) => {
+            this.transactionResolve = resolve;
+            this.terminal.transactionAsync(transactionType, amount);
+        });
+    },
+});
+
+return PaymentSix;
+
+});
diff --git a/addons/pos_six/views/point_of_sale_assets.xml b/addons/pos_six/views/point_of_sale_assets.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f5c9acc51cfb2dc7cb730865feed8c71d58d8b8
--- /dev/null
+++ b/addons/pos_six/views/point_of_sale_assets.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <template id="assets" inherit_id="point_of_sale.assets">
+        <xpath expr="." position="inside">
+            <script type="text/javascript" src="/pos_six/static/lib/six_timapi/timapi.bundle.js"></script>
+            <script type="text/javascript" src="/pos_six/static/src/js/models.js"></script>
+            <script type="text/javascript" src="/pos_six/static/src/js/payment_six.js"></script>
+        </xpath>
+    </template>
+</odoo>
diff --git a/addons/pos_six/views/pos_payment_method_views.xml b/addons/pos_six/views/pos_payment_method_views.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7c7de74ebcf5cb7670c8f0daed2b8ec6964da022
--- /dev/null
+++ b/addons/pos_six/views/pos_payment_method_views.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <record id="pos_payment_method_view_form_inherit_pos_adyen" model="ir.ui.view">
+        <field name="name">pos.payment.method.form.inherit.adyen</field>
+        <field name="model">pos.payment.method</field>
+        <field name="inherit_id" ref="point_of_sale.pos_payment_method_view_form"/>
+        <field name="arch" type="xml">
+            <xpath expr="//field[@name='use_payment_terminal']" position="after">
+                <field name="six_terminal_ip"
+                    attrs="{'invisible': [('use_payment_terminal', '!=', 'six')], 'required': [('use_payment_terminal', '=', 'six')]}"/>
+            </xpath>
+        </field>
+    </record>
+</odoo>