UNPKG

tethysfaceid

Version:

60 lines (46 loc) 16.4 MB
exports.ids = [0]; exports.modules = { /***/ "./common/Config.js": /*!**************************!*\ !*** ./common/Config.js ***! \**************************/ /*! exports provided: Config */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return Config; });\nvar Config = function () {\n // -------------------------------------\n // REQUIRED\n // Available at https://dev.facetec.com/#/account\n // NOTE: This field is auto-populated by the FaceTec SDK Configuration Wizard.\n var DeviceKeyIdentifier = \"dZ8k2xxyoeb50uRS0AnkSmDejrFL4pZM\"; // -------------------------------------\n // REQUIRED\n // The URL to call to process FaceTec SDK Sessions.\n // In Production, you likely will handle network requests elsewhere and without the use of this variable.\n // See https://dev.facetec.com/#/security-best-practices for more information.\n // NOTE: This field is auto-populated by the FaceTec SDK Configuration Wizard.\n\n var BaseURL = \"https://api.facetec.com/api/v3/biometrics\"; // -------------------------------------\n // REQUIRED\n // The FaceMap Encryption Key you define for your application.\n // Please see https://dev.facetec.com/#/licensing-and-encryption-keys for more information.\n // NOTE: This field is auto-populated by the FaceTec SDK Configuration Wizard.\n\n var PublicFaceMapEncryptionKey = \"-----BEGIN PUBLIC KEY-----\\n\" + \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5PxZ3DLj+zP6T6HFgzzk\\n\" + \"M77LdzP3fojBoLasw7EfzvLMnJNUlyRb5m8e5QyyJxI+wRjsALHvFgLzGwxM8ehz\\n\" + \"DqqBZed+f4w33GgQXFZOS4AOvyPbALgCYoLehigLAbbCNTkeY5RDcmmSI/sbp+s6\\n\" + \"mAiAKKvCdIqe17bltZ/rfEoL3gPKEfLXeN549LTj3XBp0hvG4loQ6eC1E1tRzSkf\\n\" + \"GJD4GIVvR+j12gXAaftj3ahfYxioBH7F7HQxzmWkwDyn3bqU54eaiB7f0ftsPpWM\\n\" + \"ceUaqkL2DZUvgN0efEJjnWy5y1/Gkq5GGWCROI9XG/SwXJ30BbVUehTbVcD70+ZF\\n\" + \"8QIDAQAB\\n\" + \"-----END PUBLIC KEY-----\";\n return {\n DeviceKeyIdentifier,\n BaseURL,\n PublicFaceMapEncryptionKey\n };\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21tb24vQ29uZmlnLmpzP2U2YmYiXSwibmFtZXMiOlsiQ29uZmlnIiwiRGV2aWNlS2V5SWRlbnRpZmllciIsIkJhc2VVUkwiLCJQdWJsaWNGYWNlTWFwRW5jcnlwdGlvbktleSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFPLElBQUlBLE1BQU0sR0FBSSxZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSUMsbUJBQW1CLEdBQUcsa0NBQTFCLENBTDZCLENBTzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxNQUFJQyxPQUFPLEdBQUcsMkNBQWQsQ0FiNkIsQ0FlN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxNQUFJQywwQkFBMEIsR0FDMUIsaUNBQ0Esb0VBREEsR0FFQSxvRUFGQSxHQUdBLG9FQUhBLEdBSUEsb0VBSkEsR0FLQSxvRUFMQSxHQU1BLG9FQU5BLEdBT0EsWUFQQSxHQVFBLDBCQVRKO0FBV0EsU0FBTztBQUNIRix1QkFERztBQUVIQyxXQUZHO0FBR0hDO0FBSEcsR0FBUDtBQU1ILENBckNtQixFQUFiIiwiZmlsZSI6Ii4vY29tbW9uL0NvbmZpZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgQ29uZmlnID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gUkVRVUlSRURcbiAgICAvLyBBdmFpbGFibGUgYXQgaHR0cHM6Ly9kZXYuZmFjZXRlYy5jb20vIy9hY2NvdW50XG4gICAgLy8gTk9URTogVGhpcyBmaWVsZCBpcyBhdXRvLXBvcHVsYXRlZCBieSB0aGUgRmFjZVRlYyBTREsgQ29uZmlndXJhdGlvbiBXaXphcmQuXG4gICAgdmFyIERldmljZUtleUlkZW50aWZpZXIgPSBcImRaOGsyeHh5b2ViNTB1UlMwQW5rU21EZWpyRkw0cFpNXCI7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gUkVRVUlSRURcbiAgICAvLyBUaGUgVVJMIHRvIGNhbGwgdG8gcHJvY2VzcyBGYWNlVGVjIFNESyBTZXNzaW9ucy5cbiAgICAvLyBJbiBQcm9kdWN0aW9uLCB5b3UgbGlrZWx5IHdpbGwgaGFuZGxlIG5ldHdvcmsgcmVxdWVzdHMgZWxzZXdoZXJlIGFuZCB3aXRob3V0IHRoZSB1c2Ugb2YgdGhpcyB2YXJpYWJsZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXYuZmFjZXRlYy5jb20vIy9zZWN1cml0eS1iZXN0LXByYWN0aWNlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBOT1RFOiBUaGlzIGZpZWxkIGlzIGF1dG8tcG9wdWxhdGVkIGJ5IHRoZSBGYWNlVGVjIFNESyBDb25maWd1cmF0aW9uIFdpemFyZC5cbiAgICB2YXIgQmFzZVVSTCA9IFwiaHR0cHM6Ly9hcGkuZmFjZXRlYy5jb20vYXBpL3YzL2Jpb21ldHJpY3NcIjtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBSRVFVSVJFRFxuICAgIC8vIFRoZSBGYWNlTWFwIEVuY3J5cHRpb24gS2V5IHlvdSBkZWZpbmUgZm9yIHlvdXIgYXBwbGljYXRpb24uXG4gICAgLy8gUGxlYXNlIHNlZSBodHRwczovL2Rldi5mYWNldGVjLmNvbS8jL2xpY2Vuc2luZy1hbmQtZW5jcnlwdGlvbi1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIC8vIE5PVEU6IFRoaXMgZmllbGQgaXMgYXV0by1wb3B1bGF0ZWQgYnkgdGhlIEZhY2VUZWMgU0RLIENvbmZpZ3VyYXRpb24gV2l6YXJkLlxuICAgIHZhciBQdWJsaWNGYWNlTWFwRW5jcnlwdGlvbktleSA9XG4gICAgICAgIFwiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG5cIiArXG4gICAgICAgIFwiTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE1UHhaM0RMait6UDZUNkhGZ3p6a1xcblwiICtcbiAgICAgICAgXCJNNzdMZHpQM2ZvakJvTGFzdzdFZnp2TE1uSk5VbHlSYjVtOGU1UXl5SnhJK3dSanNBTEh2RmdMekd3eE04ZWh6XFxuXCIgK1xuICAgICAgICBcIkRxcUJaZWQrZjR3MzNHZ1FYRlpPUzRBT3Z5UGJBTGdDWW9MZWhpZ0xBYmJDTlRrZVk1UkRjbW1TSS9zYnArczZcXG5cIiArXG4gICAgICAgIFwibUFpQUtLdkNkSXFlMTdibHRaL3JmRW9MM2dQS0VmTFhlTjU0OUxUajNYQnAwaHZHNGxvUTZlQzFFMXRSelNrZlxcblwiICtcbiAgICAgICAgXCJHSkQ0R0lWdlIrajEyZ1hBYWZ0ajNhaGZZeGlvQkg3RjdIUXh6bVdrd0R5bjNicVU1NGVhaUI3ZjBmdHNQcFdNXFxuXCIgK1xuICAgICAgICBcImNlVWFxa0wyRFpVdmdOMGVmRUpqbld5NXkxL0drcTVHR1dDUk9JOVhHL1N3WEozMEJiVlVlaFRiVmNENzArWkZcXG5cIiArXG4gICAgICAgIFwiOFFJREFRQUJcXG5cIiArXG4gICAgICAgIFwiLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBEZXZpY2VLZXlJZGVudGlmaWVyLFxuICAgICAgICBCYXNlVVJMLFxuICAgICAgICBQdWJsaWNGYWNlTWFwRW5jcnlwdGlvbktleVxuICAgIH07XG5cbn0pKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./common/Config.js\n"); /***/ }), /***/ "./common/apiConstants.js": /*!********************************!*\ !*** ./common/apiConstants.js ***! \********************************/ /*! exports provided: LOGIN, FACE_COMPARE, ACCESS_KEY, LiCENCE_KEY */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOGIN\", function() { return LOGIN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FACE_COMPARE\", function() { return FACE_COMPARE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ACCESS_KEY\", function() { return ACCESS_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiCENCE_KEY\", function() { return LiCENCE_KEY; });\nconst LOGIN = 'https://cors-anywhere.herokuapp.com/https://auon7ei0z2.execute-api.us-east-2.amazonaws.com/prod/loginuser'; // 'https://auon7ei0z2.execute-api.us-east-2.amazonaws.com/prod/loginuser',\n\nconst FACE_COMPARE = 'https://cors-anywhere.herokuapp.com/https://meza8z760k.execute-api.us-east-2.amazonaws.com/default/facecompare';\nconst ACCESS_KEY = '9a23ad06e00c048f4aebfbcf7d1928acc';\nconst LiCENCE_KEY = '001-593-3147';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21tb24vYXBpQ29uc3RhbnRzLmpzP2NkZGUiXSwibmFtZXMiOlsiTE9HSU4iLCJGQUNFX0NPTVBBUkUiLCJBQ0NFU1NfS0VZIiwiTGlDRU5DRV9LRVkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBTyxNQUFNQSxLQUFLLEdBQ2hCLDJHQURLLEMsQ0FFUDs7QUFFTyxNQUFNQyxZQUFZLEdBQUcsZ0hBQXJCO0FBRUEsTUFBTUMsVUFBVSxHQUFHLG1DQUFuQjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxjQUFwQiIsImZpbGUiOiIuL2NvbW1vbi9hcGlDb25zdGFudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTE9HSU4gPVxuICAnaHR0cHM6Ly9jb3JzLWFueXdoZXJlLmhlcm9rdWFwcC5jb20vaHR0cHM6Ly9hdW9uN2VpMHoyLmV4ZWN1dGUtYXBpLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tL3Byb2QvbG9naW51c2VyJztcbi8vICdodHRwczovL2F1b243ZWkwejIuZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vcHJvZC9sb2dpbnVzZXInLFxuXG5leHBvcnQgY29uc3QgRkFDRV9DT01QQVJFID0gJ2h0dHBzOi8vY29ycy1hbnl3aGVyZS5oZXJva3VhcHAuY29tL2h0dHBzOi8vbWV6YTh6NzYway5leGVjdXRlLWFwaS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9kZWZhdWx0L2ZhY2Vjb21wYXJlJztcblxuZXhwb3J0IGNvbnN0IEFDQ0VTU19LRVkgPSAnOWEyM2FkMDZlMDBjMDQ4ZjRhZWJmYmNmN2QxOTI4YWNjJztcbmV4cG9ydCBjb25zdCBMaUNFTkNFX0tFWSA9ICcwMDEtNTkzLTMxNDcnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./common/apiConstants.js\n"); /***/ }), /***/ "./common/utils.js": /*!*************************!*\ !*** ./common/utils.js ***! \*************************/ /*! exports provided: handleError, getConfig */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"handleError\", function() { return handleError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getConfig\", function() { return getConfig; });\nconst handleError = e => {\n console.log(e);\n};\nconst getConfig = () => {\n const config = {\n headers: {\n Accept: 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n 'access-control-allow-credentials': 'true'\n }\n };\n return config;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21tb24vdXRpbHMuanM/YjM5ZCJdLCJuYW1lcyI6WyJoYW5kbGVFcnJvciIsImUiLCJjb25zb2xlIiwibG9nIiwiZ2V0Q29uZmlnIiwiY29uZmlnIiwiaGVhZGVycyIsIkFjY2VwdCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQU8sTUFBTUEsV0FBVyxHQUFJQyxDQUFELElBQU87QUFDaENDLFNBQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0QsQ0FGTTtBQUlBLE1BQU1HLFNBQVMsR0FBRyxNQUFNO0FBQzdCLFFBQU1DLE1BQU0sR0FBRztBQUNiQyxXQUFPLEVBQUU7QUFDUEMsWUFBTSxFQUFFLGtCQUREO0FBRVAscUNBQStCLEdBRnhCO0FBR1Asc0JBQWdCLGtCQUhUO0FBSVAsMENBQW9DO0FBSjdCO0FBREksR0FBZjtBQVFBLFNBQU9GLE1BQVA7QUFDRCxDQVZNIiwiZmlsZSI6Ii4vY29tbW9uL3V0aWxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGhhbmRsZUVycm9yID0gKGUpID0+IHtcbiAgY29uc29sZS5sb2coZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKCkgPT4ge1xuICBjb25zdCBjb25maWcgPSB7XG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyc6ICd0cnVlJyxcbiAgICB9LFxuICB9O1xuICByZXR1cm4gY29uZmlnO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./common/utils.js\n"); /***/ }), /***/ "./components/LivenessCheck/liveness.js": /*!**********************************************!*\ !*** ./components/LivenessCheck/liveness.js ***! \**********************************************/ /*! exports provided: Liveness */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Liveness\", function() { return Liveness; });\n/* harmony import */ var common_Config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! common/Config */ \"./common/Config.js\");\n/* harmony import */ var core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-sdk/FaceTecSDK.js/FaceTecSDK */ \"./core-sdk/FaceTecSDK.js/FaceTecSDK.js\");\n/* harmony import */ var core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _processors_LivenessCheckProcessor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./processors/LivenessCheckProcessor */ \"./components/LivenessCheck/processors/LivenessCheckProcessor.js\");\n/* harmony import */ var _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/faceMapAppUtilities */ \"./components/LivenessCheck/utilities/faceMapAppUtilities.js\");\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! antd */ \"antd\");\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _utilities_themeHelpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utilities/themeHelpers */ \"./components/LivenessCheck/utilities/themeHelpers.js\");\n\n\n\n\n\n\nvar Liveness = function () {\n var latestEnrollmentIdentifier = \"\";\n var latestSessionResult = null;\n var latestIDScanResult = null;\n var latestProcessor; // Wait for onload to be complete before attempting to access the Browser SDK.\n\n window.onload = function () {\n // Set a the directory path for other FaceTec Browser SDK Resources.\n core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].setResourceDirectory(\"/resources\"); // Set the directory path for required FaceTec Browser SDK images.\n\n core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].setImagesDirectory(\"/FaceTec_images\"); // Initialize FaceTec Browser SDK and configure the UI features.\n\n core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].initializeInDevelopmentMode(common_Config__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].DeviceKeyIdentifier, common_Config__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].PublicFaceMapEncryptionKey, function (initializedSuccessfully) {\n if (initializedSuccessfully) {\n Object(_utilities_themeHelpers__WEBPACK_IMPORTED_MODULE_5__[\"ThemeHelpers\"])();\n _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__[\"FaceMapAppUtillities\"].enableAllButtons();\n }\n\n _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__[\"FaceMapAppUtillities\"].displayStatus(core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].getFriendlyDescriptionForFaceTecSDKStatus(core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].getStatus()), antd__WEBPACK_IMPORTED_MODULE_4__[\"message\"].success);\n });\n _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__[\"FaceMapAppUtillities\"].formatUIForDevice();\n }; // Initiate a 3D Liveness Check.\n\n\n function onLivenessCheckPressed(data, onContinue) {\n _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__[\"FaceMapAppUtillities\"].fadeOutMainUIAndPrepareForSession(); // Get a Session Token from the FaceTec SDK, then start the 3D Liveness Check.\n\n getSessionToken(function (sessionToken) {\n latestProcessor = new _processors_LivenessCheckProcessor__WEBPACK_IMPORTED_MODULE_2__[\"LivenessCheckProcessor\"](sessionToken, Liveness, data, onContinue);\n });\n } // Show the final result and transition back into the main interface.\n\n\n function onComplete() {\n _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__[\"FaceMapAppUtillities\"].showMainUI();\n\n if (!latestProcessor.isSuccess()) {\n // Reset the enrollment identifier.\n latestEnrollmentIdentifier = \"\"; // Show early exit message to screen. If this occurs, please check logs.\n // FaceMapAppUtillities.displayStatus(\"Complete your face scan first!\");\n\n return;\n } // Show successful message to screen\n // FaceMapAppUtillities.displayStatus(\"Success\", message.success);\n\n } // Get the Session Token from the server\n\n\n function getSessionToken(sessionTokenCallback) {\n var XHR = new XMLHttpRequest();\n XHR.open(\"GET\", common_Config__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].BaseURL + \"/session-token\");\n XHR.setRequestHeader(\"X-Device-Key\", common_Config__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].DeviceKeyIdentifier);\n XHR.setRequestHeader(\"X-User-Agent\", core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].createFaceTecAPIUserAgentString(\"\"));\n\n XHR.onreadystatechange = function () {\n if (this.readyState === XMLHttpRequest.DONE) {\n var sessionToken = \"\";\n\n try {\n // Attempt to get the sessionToken from the response object.\n sessionToken = JSON.parse(this.responseText).sessionToken; // Something went wrong in parsing the response. Return an error.\n\n if (typeof sessionToken !== \"string\") {\n onServerSessionTokenError();\n return;\n }\n } catch {\n // Something went wrong in parsing the response. Return an error.\n onServerSessionTokenError();\n return;\n }\n\n sessionTokenCallback(sessionToken);\n }\n };\n\n XHR.onerror = function () {\n onServerSessionTokenError();\n };\n\n XHR.send();\n }\n\n function onServerSessionTokenError() {\n _utilities_faceMapAppUtilities__WEBPACK_IMPORTED_MODULE_3__[\"FaceMapAppUtillities\"].handleErrorGettingServerSessionToken();\n } //\n // DEVELOPER NOTE: This is a convenience function for demonstration purposes only so the Sample App can have access to the latest session results.\n // In your code, you may not even want or need to do this.\n //\n\n\n function setLatestSessionResult(sessionResult) {\n latestSessionResult = sessionResult;\n }\n\n function setIDScanResult(idScanResult) {\n latestIDScanResult = idScanResult;\n }\n\n function getLatestEnrollmentIdentifier() {\n return latestEnrollmentIdentifier;\n }\n\n function setLatestServerResult(responseJSON) {}\n\n return {\n onLivenessCheckPressed,\n onComplete,\n setLatestSessionResult,\n setIDScanResult,\n getLatestEnrollmentIdentifier,\n setLatestServerResult\n };\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL0xpdmVuZXNzQ2hlY2svbGl2ZW5lc3MuanM/ZDA4ZCJdLCJuYW1lcyI6WyJMaXZlbmVzcyIsImxhdGVzdEVucm9sbG1lbnRJZGVudGlmaWVyIiwibGF0ZXN0U2Vzc2lvblJlc3VsdCIsImxhdGVzdElEU2NhblJlc3VsdCIsImxhdGVzdFByb2Nlc3NvciIsIndpbmRvdyIsIm9ubG9hZCIsIkZhY2VUZWNTREsiLCJzZXRSZXNvdXJjZURpcmVjdG9yeSIsInNldEltYWdlc0RpcmVjdG9yeSIsImluaXRpYWxpemVJbkRldmVsb3BtZW50TW9kZSIsIkNvbmZpZyIsIkRldmljZUtleUlkZW50aWZpZXIiLCJQdWJsaWNGYWNlTWFwRW5jcnlwdGlvbktleSIsImluaXRpYWxpemVkU3VjY2Vzc2Z1bGx5IiwiVGhlbWVIZWxwZXJzIiwiRmFjZU1hcEFwcFV0aWxsaXRpZXMiLCJlbmFibGVBbGxCdXR0b25zIiwiZGlzcGxheVN0YXR1cyIsImdldEZyaWVuZGx5RGVzY3JpcHRpb25Gb3JGYWNlVGVjU0RLU3RhdHVzIiwiZ2V0U3RhdHVzIiwibWVzc2FnZSIsInN1Y2Nlc3MiLCJmb3JtYXRVSUZvckRldmljZSIsIm9uTGl2ZW5lc3NDaGVja1ByZXNzZWQiLCJkYXRhIiwib25Db250aW51ZSIsImZhZGVPdXRNYWluVUlBbmRQcmVwYXJlRm9yU2Vzc2lvbiIsImdldFNlc3Npb25Ub2tlbiIsInNlc3Npb25Ub2tlbiIsIkxpdmVuZXNzQ2hlY2tQcm9jZXNzb3IiLCJvbkNvbXBsZXRlIiwic2hvd01haW5VSSIsImlzU3VjY2VzcyIsInNlc3Npb25Ub2tlbkNhbGxiYWNrIiwiWEhSIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwiQmFzZVVSTCIsInNldFJlcXVlc3RIZWFkZXIiLCJjcmVhdGVGYWNlVGVjQVBJVXNlckFnZW50U3RyaW5nIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJvblNlcnZlclNlc3Npb25Ub2tlbkVycm9yIiwib25lcnJvciIsInNlbmQiLCJoYW5kbGVFcnJvckdldHRpbmdTZXJ2ZXJTZXNzaW9uVG9rZW4iLCJzZXRMYXRlc3RTZXNzaW9uUmVzdWx0Iiwic2Vzc2lvblJlc3VsdCIsInNldElEU2NhblJlc3VsdCIsImlkU2NhblJlc3VsdCIsImdldExhdGVzdEVucm9sbG1lbnRJZGVudGlmaWVyIiwic2V0TGF0ZXN0U2VydmVyUmVzdWx0IiwicmVzcG9uc2VKU09OIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLElBQUlBLFFBQVEsR0FBSSxZQUFZO0FBQ2pDLE1BQUlDLDBCQUEwQixHQUFHLEVBQWpDO0FBQ0EsTUFBSUMsbUJBQW1CLEdBQUcsSUFBMUI7QUFDQSxNQUFJQyxrQkFBa0IsR0FBRyxJQUF6QjtBQUNBLE1BQUlDLGVBQUosQ0FKaUMsQ0FNakM7O0FBQ0FDLFFBQU0sQ0FBQ0MsTUFBUCxHQUFnQixZQUFZO0FBRTFCO0FBQ0FDLGdGQUFVLENBQUNDLG9CQUFYLENBQWdDLFlBQWhDLEVBSDBCLENBSzFCOztBQUNBRCxnRkFBVSxDQUFDRSxrQkFBWCxDQUE4QixpQkFBOUIsRUFOMEIsQ0FRMUI7O0FBQ0FGLGdGQUFVLENBQUNHLDJCQUFYLENBQXVDQyxvREFBTSxDQUFDQyxtQkFBOUMsRUFBbUVELG9EQUFNLENBQUNFLDBCQUExRSxFQUFzRyxVQUFVQyx1QkFBVixFQUFtQztBQUN2SSxVQUFJQSx1QkFBSixFQUE2QjtBQUMzQkMsb0ZBQVk7QUFDWkMsMkZBQW9CLENBQUNDLGdCQUFyQjtBQUNEOztBQUNERCx5RkFBb0IsQ0FBQ0UsYUFBckIsQ0FBbUNYLDRFQUFVLENBQUNZLHlDQUFYLENBQXFEWiw0RUFBVSxDQUFDYSxTQUFYLEVBQXJELENBQW5DLEVBQWlIQyw0Q0FBTyxDQUFDQyxPQUF6SDtBQUNELEtBTkQ7QUFRQU4sdUZBQW9CLENBQUNPLGlCQUFyQjtBQUVELEdBbkJELENBUGlDLENBNEJqQzs7O0FBQ0EsV0FBU0Msc0JBQVQsQ0FBZ0NDLElBQWhDLEVBQXNDQyxVQUF0QyxFQUFrRDtBQUNoRFYsdUZBQW9CLENBQUNXLGlDQUFyQixHQURnRCxDQUdoRDs7QUFDQUMsbUJBQWUsQ0FBQyxVQUFVQyxZQUFWLEVBQXdCO0FBQ3RDekIscUJBQWUsR0FBRyxJQUFJMEIseUZBQUosQ0FBMkJELFlBQTNCLEVBQXlDN0IsUUFBekMsRUFBbUR5QixJQUFuRCxFQUF5REMsVUFBekQsQ0FBbEI7QUFDRCxLQUZjLENBQWY7QUFJRCxHQXJDZ0MsQ0F1Q2pDOzs7QUFDQSxXQUFTSyxVQUFULEdBQXNCO0FBQ3BCZix1RkFBb0IsQ0FBQ2dCLFVBQXJCOztBQUVBLFFBQUksQ0FBQzVCLGVBQWUsQ0FBQzZCLFNBQWhCLEVBQUwsRUFBa0M7QUFDaEM7QUFDQWhDLGdDQUEwQixHQUFHLEVBQTdCLENBRmdDLENBSWhDO0FBQ0E7O0FBRUE7QUFDRCxLQVhtQixDQWFwQjtBQUNBOztBQUNELEdBdkRnQyxDQXlEakM7OztBQUNBLFdBQVMyQixlQUFULENBQXlCTSxvQkFBekIsRUFBK0M7QUFDN0MsUUFBSUMsR0FBRyxHQUFHLElBQUlDLGNBQUosRUFBVjtBQUNBRCxPQUFHLENBQUNFLElBQUosQ0FBUyxLQUFULEVBQWdCMUIsb0RBQU0sQ0FBQzJCLE9BQVAsR0FBaUIsZ0JBQWpDO0FBQ0FILE9BQUcsQ0FBQ0ksZ0JBQUosQ0FBcUIsY0FBckIsRUFBcUM1QixvREFBTSxDQUFDQyxtQkFBNUM7QUFDQXVCLE9BQUcsQ0FBQ0ksZ0JBQUosQ0FBcUIsY0FBckIsRUFBcUNoQyw0RUFBVSxDQUFDaUMsK0JBQVgsQ0FBMkMsRUFBM0MsQ0FBckM7O0FBQ0FMLE9BQUcsQ0FBQ00sa0JBQUosR0FBeUIsWUFBWTtBQUNuQyxVQUFJLEtBQUtDLFVBQUwsS0FBb0JOLGNBQWMsQ0FBQ08sSUFBdkMsRUFBNkM7QUFDM0MsWUFBSWQsWUFBWSxHQUFHLEVBQW5COztBQUNBLFlBQUk7QUFDRjtBQUNBQSxzQkFBWSxHQUFHZSxJQUFJLENBQUNDLEtBQUwsQ0FBVyxLQUFLQyxZQUFoQixFQUE4QmpCLFlBQTdDLENBRkUsQ0FHRjs7QUFDQSxjQUFJLE9BQU9BLFlBQVAsS0FBd0IsUUFBNUIsRUFBc0M7QUFDcENrQixxQ0FBeUI7QUFDekI7QUFDRDtBQUNGLFNBUkQsQ0FTQSxNQUFNO0FBQ0o7QUFDQUEsbUNBQXlCO0FBQ3pCO0FBQ0Q7O0FBQ0RiLDRCQUFvQixDQUFDTCxZQUFELENBQXBCO0FBQ0Q7QUFDRixLQW5CRDs7QUFxQkFNLE9BQUcsQ0FBQ2EsT0FBSixHQUFjLFlBQVk7QUFDeEJELCtCQUF5QjtBQUMxQixLQUZEOztBQUdBWixPQUFHLENBQUNjLElBQUo7QUFDRDs7QUFFRCxXQUFTRix5QkFBVCxHQUFxQztBQUNuQy9CLHVGQUFvQixDQUFDa0Msb0NBQXJCO0FBQ0QsR0E1RmdDLENBOEZqQztBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU0Msc0JBQVQsQ0FBZ0NDLGFBQWhDLEVBQStDO0FBQzdDbEQsdUJBQW1CLEdBQUdrRCxhQUF0QjtBQUNEOztBQUVELFdBQVNDLGVBQVQsQ0FBeUJDLFlBQXpCLEVBQXVDO0FBQ3JDbkQsc0JBQWtCLEdBQUdtRCxZQUFyQjtBQUNEOztBQUVELFdBQVNDLDZCQUFULEdBQXlDO0FBQ3ZDLFdBQU90RCwwQkFBUDtBQUNEOztBQUVELFdBQVN1RCxxQkFBVCxDQUErQkMsWUFBL0IsRUFBNkMsQ0FDNUM7O0FBRUQsU0FBTztBQUNMakMsMEJBREs7QUFFTE8sY0FGSztBQUdMb0IsMEJBSEs7QUFJTEUsbUJBSks7QUFLTEUsaUNBTEs7QUFNTEM7QUFOSyxHQUFQO0FBU0QsQ0ExSHFCLEVBQWYiLCJmaWxlIjoiLi9jb21wb25lbnRzL0xpdmVuZXNzQ2hlY2svbGl2ZW5lc3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiY29tbW9uL0NvbmZpZ1wiO1xuaW1wb3J0IHsgRmFjZVRlY1NESyB9IGZyb20gXCJjb3JlLXNkay9GYWNlVGVjU0RLLmpzL0ZhY2VUZWNTREtcIjtcbmltcG9ydCB7IExpdmVuZXNzQ2hlY2tQcm9jZXNzb3IgfSBmcm9tIFwiLi9wcm9jZXNzb3JzL0xpdmVuZXNzQ2hlY2tQcm9jZXNzb3JcIjtcbmltcG9ydCB7IEZhY2VNYXBBcHBVdGlsbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2ZhY2VNYXBBcHBVdGlsaXRpZXNcIjtcbmltcG9ydCB7IG1lc3NhZ2UgfSBmcm9tICdhbnRkJztcbmltcG9ydCB7IFRoZW1lSGVscGVycyB9IGZyb20gXCIuL3V0aWxpdGllcy90aGVtZUhlbHBlcnNcIjtcblxuZXhwb3J0IHZhciBMaXZlbmVzcyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBsYXRlc3RFbnJvbGxtZW50SWRlbnRpZmllciA9IFwiXCI7XG4gIHZhciBsYXRlc3RTZXNzaW9uUmVzdWx0ID0gbnVsbDtcbiAgdmFyIGxhdGVzdElEU2NhblJlc3VsdCA9IG51bGw7XG4gIHZhciBsYXRlc3RQcm9jZXNzb3I7XG5cbiAgLy8gV2FpdCBmb3Igb25sb2FkIHRvIGJlIGNvbXBsZXRlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFjY2VzcyB0aGUgQnJvd3NlciBTREsuXG4gIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBTZXQgYSB0aGUgZGlyZWN0b3J5IHBhdGggZm9yIG90aGVyIEZhY2VUZWMgQnJvd3NlciBTREsgUmVzb3VyY2VzLlxuICAgIEZhY2VUZWNTREsuc2V0UmVzb3VyY2VEaXJlY3RvcnkoXCIvcmVzb3VyY2VzXCIpO1xuXG4gICAgLy8gU2V0IHRoZSBkaXJlY3RvcnkgcGF0aCBmb3IgcmVxdWlyZWQgRmFjZVRlYyBCcm93c2VyIFNESyBpbWFnZXMuXG4gICAgRmFjZVRlY1NESy5zZXRJbWFnZXNEaXJlY3RvcnkoXCIvRmFjZVRlY19pbWFnZXNcIik7XG5cbiAgICAvLyBJbml0aWFsaXplIEZhY2VUZWMgQnJvd3NlciBTREsgYW5kIGNvbmZpZ3VyZSB0aGUgVUkgZmVhdHVyZXMuXG4gICAgRmFjZVRlY1NESy5pbml0aWFsaXplSW5EZXZlbG9wbWVudE1vZGUoQ29uZmlnLkRldmljZUtleUlkZW50aWZpZXIsIENvbmZpZy5QdWJsaWNGYWNlTWFwRW5jcnlwdGlvbktleSwgZnVuY3Rpb24gKGluaXRpYWxpemVkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICBpZiAoaW5pdGlhbGl6ZWRTdWNjZXNzZnVsbHkpIHtcbiAgICAgICAgVGhlbWVIZWxwZXJzKCk7XG4gICAgICAgIEZhY2VNYXBBcHBVdGlsbGl0aWVzLmVuYWJsZUFsbEJ1dHRvbnMoKTtcbiAgICAgIH1cbiAgICAgIEZhY2VNYXBBcHBVdGlsbGl0aWVzLmRpc3BsYXlTdGF0dXMoRmFjZVRlY1NESy5nZXRGcmllbmRseURlc2NyaXB0aW9uRm9yRmFjZVRlY1NES1N0YXR1cyhGYWNlVGVjU0RLLmdldFN0YXR1cygpKSwgbWVzc2FnZS5zdWNjZXNzKTtcbiAgICB9KTtcblxuICAgIEZhY2VNYXBBcHBVdGlsbGl0aWVzLmZvcm1hdFVJRm9yRGV2aWNlKCk7XG5cbiAgfVxuXG4gIC8vIEluaXRpYXRlIGEgM0QgTGl2ZW5lc3MgQ2hlY2suXG4gIGZ1bmN0aW9uIG9uTGl2ZW5lc3NDaGVja1ByZXNzZWQoZGF0YSwgb25Db250aW51ZSkge1xuICAgIEZhY2VNYXBBcHBVdGlsbGl0aWVzLmZhZGVPdXRNYWluVUlBbmRQcmVwYXJlRm9yU2Vzc2lvbigpO1xuXG4gICAgLy8gR2V0IGEgU2Vzc2lvbiBUb2tlbiBmcm9tIHRoZSBGYWNlVGVjIFNESywgdGhlbiBzdGFydCB0aGUgM0QgTGl2ZW5lc3MgQ2hlY2suXG4gICAgZ2V0U2Vzc2lvblRva2VuKGZ1bmN0aW9uIChzZXNzaW9uVG9rZW4pIHtcbiAgICAgIGxhdGVzdFByb2Nlc3NvciA9IG5ldyBMaXZlbmVzc0NoZWNrUHJvY2Vzc29yKHNlc3Npb25Ub2tlbiwgTGl2ZW5lc3MsIGRhdGEsIG9uQ29udGludWUpO1xuICAgIH0pXG5cbiAgfVxuXG4gIC8vIFNob3cgdGhlIGZpbmFsIHJlc3VsdCBhbmQgdHJhbnNpdGlvbiBiYWNrIGludG8gdGhlIG1haW4gaW50ZXJmYWNlLlxuICBmdW5jdGlvbiBvbkNvbXBsZXRlKCkge1xuICAgIEZhY2VNYXBBcHBVdGlsbGl0aWVzLnNob3dNYWluVUkoKTtcblxuICAgIGlmICghbGF0ZXN0UHJvY2Vzc29yLmlzU3VjY2VzcygpKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZW5yb2xsbWVudCBpZGVudGlmaWVyLlxuICAgICAgbGF0ZXN0RW5yb2xsbWVudElkZW50aWZpZXIgPSBcIlwiO1xuXG4gICAgICAvLyBTaG93IGVhcmx5IGV4aXQgbWVzc2FnZSB0byBzY3JlZW4uICBJZiB0aGlzIG9jY3VycywgcGxlYXNlIGNoZWNrIGxvZ3MuXG4gICAgICAvLyBGYWNlTWFwQXBwVXRpbGxpdGllcy5kaXNwbGF5U3RhdHVzKFwiQ29tcGxldGUgeW91ciBmYWNlIHNjYW4gZmlyc3QhXCIpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2hvdyBzdWNjZXNzZnVsIG1lc3NhZ2UgdG8gc2NyZWVuXG4gICAgLy8gRmFjZU1hcEFwcFV0aWxsaXRpZXMuZGlzcGxheVN0YXR1cyhcIlN1Y2Nlc3NcIiwgbWVzc2FnZS5zdWNjZXNzKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgU2Vzc2lvbiBUb2tlbiBmcm9tIHRoZSBzZXJ2ZXJcbiAgZnVuY3Rpb24gZ2V0U2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbkNhbGxiYWNrKSB7XG4gICAgdmFyIFhIUiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIFhIUi5vcGVuKFwiR0VUXCIsIENvbmZpZy5CYXNlVVJMICsgXCIvc2Vzc2lvbi10b2tlblwiKTtcbiAgICBYSFIuc2V0UmVxdWVzdEhlYWRlcihcIlgtRGV2aWNlLUtleVwiLCBDb25maWcuRGV2aWNlS2V5SWRlbnRpZmllcik7XG4gICAgWEhSLnNldFJlcXVlc3RIZWFkZXIoXCJYLVVzZXItQWdlbnRcIiwgRmFjZVRlY1NESy5jcmVhdGVGYWNlVGVjQVBJVXNlckFnZW50U3RyaW5nKFwiXCIpKTtcbiAgICBYSFIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICB2YXIgc2Vzc2lvblRva2VuID0gXCJcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgc2Vzc2lvblRva2VuIGZyb20gdGhlIHJlc3BvbnNlIG9iamVjdC5cbiAgICAgICAgICBzZXNzaW9uVG9rZW4gPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KS5zZXNzaW9uVG9rZW47XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gcGFyc2luZyB0aGUgcmVzcG9uc2UuIFJldHVybiBhbiBlcnJvci5cbiAgICAgICAgICBpZiAodHlwZW9mIHNlc3Npb25Ub2tlbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb25TZXJ2ZXJTZXNzaW9uVG9rZW5FcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gcGFyc2luZyB0aGUgcmVzcG9uc2UuIFJldHVybiBhbiBlcnJvci5cbiAgICAgICAgICBvblNlcnZlclNlc3Npb25Ub2tlbkVycm9yKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25Ub2tlbkNhbGxiYWNrKHNlc3Npb25Ub2tlbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhIUi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgb25TZXJ2ZXJTZXNzaW9uVG9rZW5FcnJvcigpO1xuICAgIH1cbiAgICBYSFIuc2VuZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25TZXJ2ZXJTZXNzaW9uVG9rZW5FcnJvcigpIHtcbiAgICBGYWNlTWFwQXBwVXRpbGxpdGllcy5oYW5kbGVFcnJvckdldHRpbmdTZXJ2ZXJTZXNzaW9uVG9rZW4oKTtcbiAgfVxuXG4gIC8vXG4gIC8vIERFVkVMT1BFUiBOT1RFOiAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzIG9ubHkgc28gdGhlIFNhbXBsZSBBcHAgY2FuIGhhdmUgYWNjZXNzIHRvIHRoZSBsYXRlc3Qgc2Vzc2lvbiByZXN1bHRzLlxuICAvLyBJbiB5b3VyIGNvZGUsIHlvdSBtYXkgbm90IGV2ZW4gd2FudCBvciBuZWVkIHRvIGRvIHRoaXMuXG4gIC8vXG4gIGZ1bmN0aW9uIHNldExhdGVzdFNlc3Npb25SZXN1bHQoc2Vzc2lvblJlc3VsdCkge1xuICAgIGxhdGVzdFNlc3Npb25SZXN1bHQgPSBzZXNzaW9uUmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0SURTY2FuUmVzdWx0KGlkU2NhblJlc3VsdCkge1xuICAgIGxhdGVzdElEU2NhblJlc3VsdCA9IGlkU2NhblJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhdGVzdEVucm9sbG1lbnRJZGVudGlmaWVyKCkge1xuICAgIHJldHVybiBsYXRlc3RFbnJvbGxtZW50SWRlbnRpZmllclxuICB9XG5cbiAgZnVuY3Rpb24gc2V0TGF0ZXN0U2VydmVyUmVzdWx0KHJlc3BvbnNlSlNPTikge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbkxpdmVuZXNzQ2hlY2tQcmVzc2VkLFxuICAgIG9uQ29tcGxldGUsXG4gICAgc2V0TGF0ZXN0U2Vzc2lvblJlc3VsdCxcbiAgICBzZXRJRFNjYW5SZXN1bHQsXG4gICAgZ2V0TGF0ZXN0RW5yb2xsbWVudElkZW50aWZpZXIsXG4gICAgc2V0TGF0ZXN0U2VydmVyUmVzdWx0XG4gIH1cblxufSkoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/LivenessCheck/liveness.js\n"); /***/ }), /***/ "./components/LivenessCheck/processors/LivenessCheckProcessor.js": /*!***********************************************************************!*\ !*** ./components/LivenessCheck/processors/LivenessCheckProcessor.js ***! \***********************************************************************/ /*! exports provided: LivenessCheckProcessor */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LivenessCheckProcessor\", function() { return LivenessCheckProcessor; });\n/* harmony import */ var common_Config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! common/Config */ \"./common/Config.js\");\n/* harmony import */ var core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-sdk/FaceTecSDK.js/FaceTecSDK */ \"./core-sdk/FaceTecSDK.js/FaceTecSDK.js\");\n/* harmony import */ var core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ \"antd\");\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var common_apiConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! common/apiConstants */ \"./common/apiConstants.js\");\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n// Welcome to the annotated FaceTec Device SDK core code for performing secure Liveness Checks!\n//\n\n\n\n //\n// This is an example self-contained class to perform Liveness Checks with the FaceTec SDK.\n// You may choose to further componentize parts of this in your own Apps based on your specific requirements.\n//\n\nclass LivenessCheckProcessor {\n //\n // DEVELOPER NOTE: These properties are for demonstration purposes only so the Sample App can get information about what is happening in the processor.\n // In the code in your own App, you can pass around signals, flags, intermediates, and results however you would like.\n //\n constructor(sessionToken, sampleAppControllerReference, data, onContinue) {\n _defineProperty(this, \"latestNetworkRequest\", new XMLHttpRequest());\n\n _defineProperty(this, \"success\", void 0);\n\n _defineProperty(this, \"sampleAppControllerReference\", void 0);\n\n _defineProperty(this, \"data\", void 0);\n\n //\n // DEVELOPER NOTE: These properties are for demonstration purposes only so the Sample App can get information about what is happening in the processor.\n // In the code in your own App, you can pass around signals, flags, intermediates, and results however you would like.\n //\n this.success = false;\n this.sampleAppControllerReference = sampleAppControllerReference;\n this.data = data;\n this.continue = onContinue, //\n // Part 1: Starting the FaceTec Session\n //\n // Required parameters:\n // - FaceTecFaceScanProcessor: A class that implements FaceTecFaceScanProcessor, which handles the FaceScan when the User completes a Session. In this example, \"this\" implements the class.\n // - sessionToken: A valid Session Token you just created by calling your API to get a Session Token from the Server SDK.\n //\n new core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].FaceTecSession(this, sessionToken);\n } //\n // Part 2: Handling the Result of a FaceScan\n //\n\n\n processSessionResultWhileFaceTecSDKWaits(sessionResult, faceScanResultCallback) {\n //\n // DEVELOPER NOTE: These properties are for demonstration purposes only so the Sample App can get information about what is happening in the processor.\n // In the code in your own App, you can pass around signals, flags, intermediates, and results however you would like.\n //\n this.sampleAppControllerReference.setLatestSessionResult(sessionResult); //\n // Part 3: Handles early exit scenarios where there is no FaceScan to handle -- i.e. User Cancellation, Timeouts, etc.\n //\n\n if (sessionResult.status !== core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].FaceTecSessionStatus.SessionCompletedSuccessfully) {\n antd__WEBPACK_IMPORTED_MODULE_2__[\"message\"].error(\"Session was not completed successfully, cancelling. Status: \" + sessionResult.status, 3);\n this.latestNetworkRequest.abort();\n faceScanResultCallback.cancel();\n return;\n } // IMPORTANT: FaceTecSDK.FaceTecSessionStatus.SessionCompletedSuccessfully DOES NOT mean the Liveness Check was Successful.\n // It simply means the User completed the Session and a 3D FaceScan was created. You still need to perform the Liveness Check on your Servers.\n //\n // Part 4: Get essential data off the FaceTecSessionResult\n //\n\n\n const {\n id,\n username\n } = this.data;\n var parameters = {\n // faceScan: sessionResult.faceScan,\n // auditTrailImage: sessionResult.auditTrail[0],\n pic: sessionResult.lowQualityAuditTrail[0],\n // sessionId: sessionResult.sessionId,\n id,\n username\n }; //\n // Part 5: Make the Networking Call to Your Servers. Below is just example code, you are free to customize based on how your own API works.\n //\n\n this.latestNetworkRequest = new XMLHttpRequest();\n this.latestNetworkRequest.open(\"POST\", common_apiConstants__WEBPACK_IMPORTED_MODULE_3__[\"FACE_COMPARE\"], true);\n this.latestNetworkRequest.setRequestHeader(\"licence\", common_apiConstants__WEBPACK_IMPORTED_MODULE_3__[\"LiCENCE_KEY\"]);\n this.latestNetworkRequest.setRequestHeader(\"Content-Type\", \"application/json\");\n this.latestNetworkRequest.setRequestHeader(\"access_key\", common_apiConstants__WEBPACK_IMPORTED_MODULE_3__[\"ACCESS_KEY\"]); // TODO: Make this prettier and more consolidated and perhaps less things to do here.\n\n this.latestNetworkRequest.setRequestHeader(\"X-Device-Key\", common_Config__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].DeviceKeyIdentifier);\n this.latestNetworkRequest.setRequestHeader(\"X-User-Agent\", core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].createFaceTecAPIUserAgentString(sessionResult.sessionId));\n\n this.latestNetworkRequest.onreadystatechange = () => {\n //\n // Part 6: In our Sample, we evaluate a boolean response and treat true as success, false as \"User Needs to Retry\",\n // and handle all other non-nominal responses by cancelling out. You may have different paradigms in your own API and are free to customize based on these.\n //\n if (this.latestNetworkRequest.readyState === XMLHttpRequest.DONE) {\n try {\n var responseJSON = JSON.parse(this.latestNetworkRequest.responseText); //\n // DEVELOPER NOTE: These properties are for demonstration purposes only so the Sample App can get information about what is happening in the processor.\n // In the code in your own App, you can pass around signals, flags, intermediates, and results however you would like.\n //\n\n this.sampleAppControllerReference.setLatestServerResult(responseJSON);\n\n if (responseJSON.Similarity === true) {\n // CASE: Success! The Liveness Check was performed and the User Proved Liveness.\n //\n // DEVELOPER NOTE: These properties are for demonstration purposes only so the Sample App can get information about what is happening in the processor.\n // In the code in your own App, you can pass around signals, flags, intermediates, and results however you would like.\n //\n this.success = true; // Demonstrates dynamically setting the Success Screen Message.\n\n core_sdk_FaceTecSDK_js_FaceTecSDK__WEBPACK_IMPORTED_MODULE_1__[\"FaceTecSDK\"].FaceTecCustomization.setOverrideResultScreenSuccessMessage(\"Liveness\\nConfirmed\");\n faceScanResultCallback.succeed();\n this.continue('Matched');\n antd__WEBPACK_IMPORTED_MODULE_2__[\"message\"].success(responseJSON.message);\n } else if (responseJSON.Similarity === false || responseJSON.message) {\n // CASE: In our Sample code, \"success\" being present and false means that the User Needs to Retry.\n // Real Users will likely succeed on subsequent attempts after following on-screen guidance.\n // Attackers/Fraudsters will continue to get rejected.\n faceScanResultCallback.cancel();\n this.continue('NotMatched');\n\n if (responseJSON.message) {\n antd__WEBPACK_IMPORTED_MODULE_2__[\"message\"].error(responseJSON.message);\n }\n } else {\n faceScanResultCallback.retry();\n antd__WEBPACK_IMPORTED_MODULE_2__[\"message\"].info(\"User needs to retry, invoking retry.\", 3);\n } // else {\n // // CASE: UNEXPECTED response from API. Our Sample Code keys of a success boolean on the root of the JSON object --> You define your own API contracts with yourself and may choose to do something different here based on the error.\n // message.info(\"Unexpected API response, cancelling out.\", 3);\n // faceScanResultCallback.cancel();\n // }\n\n } catch {\n // CASE: Parsing the response into JSON failed --> You define your own API contracts with yourself and may choose to do something different here based on the error. Solid server-side code should ensure you don't get to this case.\n faceScanResultCallback.cancel();\n antd__WEBPACK_IMPORTED_MODULE_2__[\"message\"].error(\"Exception while handling API response, cancelling out.\", 3);\n }\n }\n };\n\n this.latestNetworkRequest.onerror = function () {\n // CASE: Network Request itself is erroring --> You define your own API contracts with yourself and may choose to do something different here based on the error.\n console.log(\"XHR error, cancelling.\");\n faceScanResultCallback.cancel();\n }; //\n // Part 7: Demonstrates updating the Progress Bar based on the progress event.\n //\n\n\n this.latestNetworkRequest.upload.onprogress = function name(event) {\n var progress = event.loaded / event.total;\n faceScanResultCallback.uploadProgress(progress);\n }; //\n // Part 8: Actually send the request.\n //\n\n\n var jsonStringToUpload = JSON.stringify(parameters);\n this.latestNetworkRequest.send(jsonStringToUpload); //\n // Part 9: For better UX, update the User if the upload is taking a while. You are free to customize and enhance this behavior to your liking.\n //\n\n setTimeout(() => {\n if (this.latestNetworkRequest.readyState === XMLHttpRequest.DONE) {\n return;\n }\n\n faceScanResultCallback.uploadMessageOverride(\"Still Uploading...\");\n }, 6000);\n } //\n // Part 10: This function gets called after the FaceTec SDK is completely done. There are no parameters because you have already been passed all data in the processSessionWhileFaceTecSDKWaits function and have already handled all of your own results.\n //\n\n\n onFaceTecSDKCompletelyDone() {\n //\n // DEVELOPER NOTE: onFaceTecSDKCompletelyDone() is called after you signal the FaceTec SDK with success() or cancel().\n // Calling a custom function on the Sample App Controller is done for demonstration purposes to show you that here is where you get control back from the FaceTec SDK.\n //\n this.sampleAppControllerReference.onComplete();\n } //\n // DEVELOPER NOTE: This public convenience method is for demonstration purposes only so the Sample App can get information about what is happening in the processor.\n // In your code, you may not even want or need to do this.\n //\n\n\n isSuccess() {\n return this.success;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL0xpdmVuZXNzQ2hlY2svcHJvY2Vzc29ycy9MaXZlbmVzc0NoZWNrUHJvY2Vzc29yLmpzP2YyN2QiXSwibmFtZXMiOlsiTGl2ZW5lc3NDaGVja1Byb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwic2Vzc2lvblRva2VuIiwic2FtcGxlQXBwQ29udHJvbGxlclJlZmVyZW5jZSIsImRhdGEiLCJvbkNvbnRpbnVlIiwiWE1MSHR0cFJlcXVlc3QiLCJzdWNjZXNzIiwiY29udGludWUiLCJGYWNlVGVjU0RLIiwiRmFjZVRlY1Nlc3Npb24iLCJwcm9jZXNzU2Vzc2lvblJlc3VsdFdoaWxlRmFjZVRlY1NES1dhaXRzIiwic2Vzc2lvblJlc3VsdCIsImZhY2VTY2FuUmVzdWx0Q2FsbGJhY2siLCJzZXRMYXRlc3RTZXNzaW9uUmVzdWx0Iiwic3RhdHVzIiwiRmFjZVRlY1Nlc3Npb25TdGF0dXMiLCJTZXNzaW9uQ29tcGxldGVkU3VjY2Vzc2Z1bGx5IiwibWVzc2FnZSIsImVycm9yIiwibGF0ZXN0TmV0d29ya1JlcXVlc3QiLCJhYm9ydCIsImNhbmNlbCIsImlkIiwidXNlcm5hbWUiLCJwYXJhbWV0ZXJzIiwicGljIiwibG93UXVhbGl0eUF1ZGl0VHJhaWwiLCJvcGVuIiwiRkFDRV9DT01QQVJFIiwic2V0UmVxdWVzdEhlYWRlciIsIkxpQ0VOQ0VfS0VZIiwiQUNDRVNTX0tFWSIsIkNvbmZpZyIsIkRldmljZUtleUlkZW50aWZpZXIiLCJjcmVhdGVGYWNlVGVjQVBJVXNlckFnZW50U3RyaW5nIiwic2Vzc2lvbklkIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZUpTT04iLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzZXRMYXRlc3RTZXJ2ZXJSZXN1bHQiLCJTaW1pbGFyaXR5IiwiRmFjZVRlY0N1c3RvbWl6YXRpb24iLCJzZXRPdmVycmlkZVJlc3VsdFNjcmVlblN1Y2Nlc3NNZXNzYWdlIiwic3VjY2VlZCIsInJldHJ5IiwiaW5mbyIsIm9uZXJyb3IiLCJjb25zb2xlIiwibG9nIiwidXBsb2FkIiwib25wcm9ncmVzcyIsIm5hbWUiLCJldmVudCIsInByb2dyZXNzIiwibG9hZGVkIiwidG90YWwiLCJ1cGxvYWRQcm9ncmVzcyIsImpzb25TdHJpbmdUb1VwbG9hZCIsInN0cmluZ2lmeSIsInNlbmQiLCJzZXRUaW1lb3V0IiwidXBsb2FkTWVzc2FnZU92ZXJyaWRlIiwib25GYWNlVGVjU0RLQ29tcGxldGVseURvbmUiLCJvbkNvbXBsZXRlIiwiaXNTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0NBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ08sTUFBTUEsc0JBQU4sQ0FBNkI7QUFHbEM7QUFDQTtBQUNBO0FBQ0E7QUFLQUMsYUFBVyxDQUFDQyxZQUFELEVBQWVDLDRCQUFmLEVBQTZDQyxJQUE3QyxFQUFtREMsVUFBbkQsRUFBK0Q7QUFBQSxrREFWbkQsSUFBSUMsY0FBSixFQVVtRDs7QUFBQTs7QUFBQTs7QUFBQTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBZjtBQUNBLFNBQUtKLDRCQUFMLEdBQW9DQSw0QkFBcEM7QUFDQSxTQUFLQyxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLSSxRQUFMLEdBQWdCSCxVQUFoQixFQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBSUksNEVBQVUsQ0FBQ0MsY0FBZixDQUNFLElBREYsRUFFRVIsWUFGRixDQVJGO0FBWUQsR0FoQ2lDLENBa0NsQztBQUNBO0FBQ0E7OztBQUNBUywwQ0FBd0MsQ0FBQ0MsYUFBRCxFQUFnQkMsc0JBQWhCLEVBQXdDO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBS1YsNEJBQUwsQ0FBa0NXLHNCQUFsQyxDQUF5REYsYUFBekQsRUFMOEUsQ0FPOUU7QUFDQTtBQUNBOztBQUNBLFFBQUlB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LEdBM0xpQyxDQTZMbEM7QUFDQTtBQUNBO0FBQ0E7OztBQUNBQyxXQUFTLEdBQUc7QUFDVixXQUFPLEtBQUs5RCxPQUFaO0FBQ0Q7O0FBbk1pQyIsImZpbGUiOiIuL2NvbXBvbmVudHMvTGl2ZW5lc3NDaGVjay9wcm9jZXNzb3JzL0xpdmVuZXNzQ2hlY2tQcm9jZXNzb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy8gV2VsY29tZSB0byB0aGUgYW5ub3RhdGVkIEZhY2VUZWMgRGV2aWNlIFNESyBjb3JlIGNvZGUgZm9yIHBlcmZvcm1pbmcgc2VjdXJlIExpdmVuZXNzIENoZWNrcyFcbi8vXG5cbmltcG9ydCB7IENvbmZpZyB9IGZyb20gXCJjb21tb24vQ29uZmlnXCI7XG5pbXBvcnQgeyBGYWNlVGVjU0RLIH0gZnJvbSBcImNvcmUtc2RrL0ZhY2VUZWNTREsuanMvRmFjZVRlY1NES1wiO1xuaW1wb3J0IHsgbWVzc2FnZSB9IGZyb20gXCJhbnRkXCI7XG5pbXBvcnQgeyBBQ0NFU1NfS0VZLCBGQUNFX0NPTVBBUkUsIExpQ0VOQ0VfS0VZIH0gZnJvbSBcImNvbW1vbi9hcGlDb25zdGFudHNcIjtcbi8vXG4vLyBUaGlzIGlzIGFuIGV4YW1wbGUgc2VsZi1jb250YWluZWQgY2xhc3MgdG8gcGVyZm9ybSBMaXZlbmVzcyBDaGVja3Mgd2l0aCB0aGUgRmFjZVRlYyBTREsuXG4vLyBZb3UgbWF5IGNob29zZSB0byBmdXJ0aGVyIGNvbXBvbmVudGl6ZSBwYXJ0cyBvZiB0aGlzIGluIHlvdXIgb3duIEFwcHMgYmFzZWQgb24geW91ciBzcGVjaWZpYyByZXF1aXJlbWVudHMuXG4vL1xuZXhwb3J0IGNsYXNzIExpdmVuZXNzQ2hlY2tQcm9jZXNzb3Ige1xuICBsYXRlc3ROZXR3b3JrUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gIC8vXG4gIC8vIERFVkVMT1BFUiBOT1RFOiAgVGhlc2UgcHJvcGVydGllcyBhcmUgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMgb25seSBzbyB0aGUgU2FtcGxlIEFwcCBjYW4gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaXMgaGFwcGVuaW5nIGluIHRoZSBwcm9jZXNzb3IuXG4gIC8vIEluIHRoZSBjb2RlIGluIHlvdXIgb3duIEFwcCwgeW91IGNhbiBwYXNzIGFyb3VuZCBzaWduYWxzLCBmbGFncywgaW50ZXJtZWRpYXRlcywgYW5kIHJlc3VsdHMgaG93ZXZlciB5b3Ugd291bGQgbGlrZS5cbiAgLy9cbiAgc3VjY2VzcztcbiAgc2FtcGxlQXBwQ29udHJvbGxlclJlZmVyZW5jZTtcbiAgZGF0YTtcblxuICBjb25zdHJ1Y3RvcihzZXNzaW9uVG9rZW4sIHNhbXBsZUFwcENvbnRyb2xsZXJSZWZlcmVuY2UsIGRhdGEsIG9uQ29udGludWUpIHtcblxuICAgIC8vXG4gICAgLy8gREVWRUxPUEVSIE5PVEU6ICBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5IHNvIHRoZSBTYW1wbGUgQXBwIGNhbiBnZXQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpcyBoYXBwZW5pbmcgaW4gdGhlIHByb2Nlc3Nvci5cbiAgICAvLyBJbiB0aGUgY29kZSBpbiB5b3VyIG93biBBcHAsIHlvdSBjYW4gcGFzcyBhcm91bmQgc2lnbmFscywgZmxhZ3MsIGludGVybWVkaWF0ZXMsIGFuZCByZXN1bHRzIGhvd2V2ZXIgeW91IHdvdWxkIGxpa2UuXG4gICAgLy9cbiAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB0aGlzLnNhbXBsZUFwcENvbnRyb2xsZXJSZWZlcmVuY2UgPSBzYW1wbGVBcHBDb250cm9sbGVyUmVmZXJlbmNlO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jb250aW51ZSA9IG9uQ29udGludWUsXG4gICAgICAvL1xuICAgICAgLy8gUGFydCAxOiAgU3RhcnRpbmcgdGhlIEZhY2VUZWMgU2Vzc2lvblxuICAgICAgLy9cbiAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlcnM6XG4gICAgICAvLyAtIEZhY2VUZWNGYWNlU2NhblByb2Nlc3NvcjogIEEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIEZhY2VUZWNGYWNlU2NhblByb2Nlc3Nvciwgd2hpY2ggaGFuZGxlcyB0aGUgRmFjZVNjYW4gd2hlbiB0aGUgVXNlciBjb21wbGV0ZXMgYSBTZXNzaW9uLiAgSW4gdGhpcyBleGFtcGxlLCBcInRoaXNcIiBpbXBsZW1lbnRzIHRoZSBjbGFzcy5cbiAgICAgIC8vIC0gc2Vzc2lvblRva2VuOiAgQSB2YWxpZCBTZXNzaW9uIFRva2VuIHlvdSBqdXN0IGNyZWF0ZWQgYnkgY2FsbGluZyB5b3VyIEFQSSB0byBnZXQgYSBTZXNzaW9uIFRva2VuIGZyb20gdGhlIFNlcnZlciBTREsuXG4gICAgICAvL1xuICAgICAgbmV3IEZhY2VUZWNTREsuRmFjZVRlY1Nlc3Npb24oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHNlc3Npb25Ub2tlblxuICAgICAgKTtcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnQgMjogIEhhbmRsaW5nIHRoZSBSZXN1bHQgb2YgYSBGYWNlU2NhblxuICAvL1xuICBwcm9jZXNzU2Vzc2lvblJlc3VsdFdoaWxlRmFjZVRlY1NES1dhaXRzKHNlc3Npb25SZXN1bHQsIGZhY2VTY2FuUmVzdWx0Q2FsbGJhY2spIHtcbiAgICAvL1xuICAgIC8vIERFVkVMT1BFUiBOT1RFOiAgVGhlc2UgcHJvcGVydGllcyBhcmUgZm9yIGRlbW9uc3RyYXRpb24g