diff --git a/mock/LightDMMock.js b/mock/LightDMMock.js deleted file mode 100644 index 5ca033c..0000000 --- a/mock/LightDMMock.js +++ /dev/null @@ -1,576 +0,0 @@ -/** - * LightDMMock "class" - * - * @author Roel Walraven - * - * A LightDM Mock that is tightly based on the source C code of - * Antergos' lightdm-webkit2-greeter. Please note that the deprecation errors - * are intrusive for a reason. - * - * Usage: - * Include the file in your theme that needs mocking - * - * Create a new instance of LightDMMock - * if(!("lightdm" in window)) { - * var LightDMMock = LightDMMock || {}; - * window.lightdm = new LightDMMock(autofill, timeout, autoGuest); - * } - * - * @param {boolean} autofill [wether or not the arrays for users, languages, - * layouts, and sessions need to be filled with mock - * data. I advise to test both to make your theme - * less prone to crashing.] - * @param {number} timeout [Value to use for simulated autologin (this value - * is in seconds).] - * @param {boolean} autoGuest [Wether or not to simulate automatic guest login. - * This will also enable a guest account - * in lightdm.has_guest_account] - */ -"use strict"; - -function LightDMMock(autofill, timeout, autoGuest) { - window.checkForUpdate("v1.0.0"); - - this.hostname = null; - this.users = null; - this.default_language = null; - this.language = null; - this.languages = null; - this.default_layout = null; - this.layouts = null; - this.layout = null; - this.sessions = null; - this.num_users = 0; - this.default_session = null; - this.timed_login_user = null; - this.timed_login_delay = null; - this.authentication_user = null; - this.in_authentication = false; - this.is_authenticated = false; - this.can_suspend = false; - this.can_hibernate = false; - this.can_restart = false; - this.can_shutdown = false; - this.lock_hint = false; - this.has_guest_account = false; - this.hide_users = false; - this.select_user = null; - this.select_guest = false; - this.autologin_user = null; - this.autologin_guest = false; - this.autologin_timeout = 0; - - if(typeof autofill === "boolean" && autofill) { - this.users = JSON.parse(atob("W3siZGlzcGxheV9uYW1lIjoiQWxleGFuZGVyIHRoZSBHcmVhdCIsImxhbmd1YWdlIjoiZ3JfR1IiLCJyZWFsX25hbWUiOiJCYXNpbGV1cyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2Jhc2lsZXVzYWxleC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9iYXNpbGV1c2FsZXgiLCJuYW1lIjoiYmFzaWxldXNhbGV4IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJOYXBvbGVvbiBCb25hcGFydGUiLCJsYW5ndWFnZSI6ImZyX0ZSIiwicmVhbF9uYW1lIjoiTmFwb2xlb24gQm9uYXBhcnRlIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbmFwb2xlb25pYi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9uYXBvbGVvbmliIiwibmFtZSI6Im5hcG9sZW9uaWIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGFuZ3VhZ2UiOiJpdF9JVCIsInJlYWxfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMiLCJuYW1lIjoiaW1wZXJhdG9yYXVndXN0dXMiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IlNpciBXaW5zdG9uIExlb25hcmQgU3BlbmNlci1DaHVyY2hpbGwiLCJsYW5ndWFnZSI6ImVuX0dCIiwicmVhbF9uYW1lIjoiU2lyIFdpbnN0b24gTGVvbmFyZCBTcGVuY2VyLUNodXJjaGlsbCIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uIiwibmFtZSI6Imhvbm91cmFibGV3aW5zdG9uIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxhbmd1YWdlIjoicnVfUlUiLCJyZWFsX25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3BldGVyYWxleGV5ZXZpY2gvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svcGV0ZXJhbGV4ZXlldmljaCIsIm5hbWUiOiJwZXRlcmFsZXhleWV2aWNoIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxhbmd1YWdlIjoiZW5fVVMiLCJyZWFsX25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2phY2trZW5uZWR5Ly5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2phY2trZW5uZWR5IiwibmFtZSI6ImphY2trZW5uZWR5IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJNdWhhbW1lZCBiaW4gTXVyYWQiLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTXVoYW1tZWQgYmluIE11cmFkIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbWVobWVkaXNhbmkvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svbWVobWVkaXNhbmkiLCJuYW1lIjoibWVobWVkaXNhbmkiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGFuZ3VhZ2UiOiJzdl9TRSIsInJlYWxfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svZ3VzdGF2Mi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9ndXN0YXYyIiwibmFtZSI6Imd1c3RhdjIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ik1hbyBaZWRvbmciLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTWFvIFplZG9uZyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2NoYWlybWFuemVkb25nLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2NoYWlybWFuemVkb25nIiwibmFtZSI6ImNoYWlybWFuemVkb25nIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxhbmd1YWdlIjoibm9fTk8iLCJyZWFsX25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3JlZHRob3J2YWxkLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL3JlZHRob3J2YWxkIiwibmFtZSI6InJlZHRob3J2YWxkIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJDcmlzdG9mb3JvIENvbG9tYm8iLCJsYW5ndWFnZSI6Iml0X0lUIiwicmVhbF9uYW1lIjoiQ3Jpc3RvZm9ybyBDb2xvbWJvIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svY3Jpc3RvY29sb21iby8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9jcmlzdG9jb2xvbWJvIiwibmFtZSI6ImNyaXN0b2NvbG9tYm8iLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGFuZ3VhZ2UiOiJubF9OTCIsInJlYWxfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svc2lsZW50d2lsbC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9zaWxlbnR3aWxsIiwibmFtZSI6InNpbGVudHdpbGwiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdlbmdoaXMgS2hhbiIsImxhbmd1YWdlIjoibW5fTU4iLCJyZWFsX25hbWUiOiJHZW5naGlzIEtoYW4iLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9raGFnYW50ZW11amluLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2toYWdhbnRlbXVqaW4iLCJuYW1lIjoia2hhZ2FudGVtdWppbiIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9LHsiZGlzcGxheV9uYW1lIjoiTWlraGFpbCBTZXJnZXlldmljaCBHb3JiYWNoZXYiLCJsYW5ndWFnZSI6InJ1X1JVIiwicmVhbF9uYW1lIjoiTWlraGFpbCBTZXJnZXlldmljaCBHb3JiYWNoZXYiLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9nb3JiYWNoZXYvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svZ29yYmFjaGV2IiwibmFtZSI6ImdvcmJhY2hldiIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9LHsiZGlzcGxheV9uYW1lIjoiTWVpamkiLCJsYW5ndWFnZSI6ImpwX0pQIiwicmVhbF9uYW1lIjoiTWVpamkiLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9tZWlqaXRhaXRlaS8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9tZWlqaXRhaXRlaSIsIm5hbWUiOiJtZWlqaXRhaXRlaSIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9XQ==")); - this.languages = JSON.parse(atob("W3sibmFtZSI6IkVuZ2xpc2giLCJjb2RlIjoiZW4iLCJ0ZXJyaXRvcnkiOm51bGx9XQ==")); - this.layouts = JSON.parse(atob("W3sibmFtZSI6InVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVVMpIn0seyJuYW1lIjoidXNcdGNociIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY2hyIiwiZGVzY3JpcHRpb24iOiJDaGVyb2tlZSJ9LHsibmFtZSI6InVzXHRldXJvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVTLCB3aXRoIGV1cm8gb24gNSkifSx7Im5hbWUiOiJ1c1x0aW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChVUywgaW50ZXJuYXRpb25hbCB3aXRoIGRlYWQga2V5cykifSx7Im5hbWUiOiJ1c1x0YWx0LWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVVMsIGFsdGVybmF0aXZlIGludGVybmF0aW9uYWwpIn0seyJuYW1lIjoidXNcdGNvbGVtYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoQ29sZW1haykifSx7Im5hbWUiOiJ1c1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKER2b3JhaykifSx7Im5hbWUiOiJ1c1x0ZHZvcmFrLWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoRHZvcmFrLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6InVzXHRkdm9yYWstYWx0LWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoRHZvcmFrIGFsdGVybmF0aXZlIGludGVybmF0aW9uYWwgbm8gZGVhZCBrZXlzKSJ9LHsibmFtZSI6InVzXHRkdm9yYWstbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChsZWZ0IGhhbmRlZCBEdm9yYWspIn0seyJuYW1lIjoidXNcdGR2b3Jhay1yIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKHJpZ2h0IGhhbmRlZCBEdm9yYWspIn0seyJuYW1lIjoidXNcdGR2b3Jhay1jbGFzc2ljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKGNsYXNzaWMgRHZvcmFrKSJ9LHsibmFtZSI6InVzXHRkdnAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAocHJvZ3JhbW1lciBEdm9yYWspIn0seyJuYW1lIjoidXNcdHJ1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKFVTLCBwaG9uZXRpYykifSx7Im5hbWUiOiJ1c1x0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJ1c1x0YWx0Z3ItaW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChpbnRlcm5hdGlvbmFsIEFsdEdyIGRlYWQga2V5cykifSx7Im5hbWUiOiJ1c1x0b2xwYzIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAodGhlIGRpdmlkZS9tdWx0aXBseSBrZXlzIHRvZ2dsZSB0aGUgbGF5b3V0KSJ9LHsibmFtZSI6InVzXHRoYnMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYm8tQ3JvYXRpYW4gKFVTKSJ9LHsibmFtZSI6InVzXHR3b3JrbWFuIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFdvcmttYW4pIn0seyJuYW1lIjoidXNcdHdvcmttYW4taW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChXb3JrbWFuLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImFmIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmYSIsImRlc2NyaXB0aW9uIjoiQWZnaGFuaSJ9LHsibmFtZSI6ImFmXHRwcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicHMiLCJkZXNjcmlwdGlvbiI6IlBhc2h0byJ9LHsibmFtZSI6ImFmXHR1eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXoiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIChBZmdoYW5pc3RhbikifSx7Im5hbWUiOiJhZlx0b2xwYy1wcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicHMiLCJkZXNjcmlwdGlvbiI6IlBhc2h0byAoQWZnaGFuaXN0YW4sIE9MUEMpIn0seyJuYW1lIjoiYWZcdGZhLW9scGMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZhIiwiZGVzY3JpcHRpb24iOiJQZXJzaWFuIChBZmdoYW5pc3RhbiwgRGFyaSBPTFBDKSJ9LHsibmFtZSI6ImFmXHR1ei1vbHBjIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ1eiIsImRlc2NyaXB0aW9uIjoiVXpiZWsgKEFmZ2hhbmlzdGFuLCBPTFBDKSJ9LHsibmFtZSI6ImFyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyJ9LHsibmFtZSI6ImFyYVx0YXplcnR5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoYXplcnR5KSJ9LHsibmFtZSI6ImFyYVx0YXplcnR5X2RpZ2l0cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcmFiaWMgKGF6ZXJ0eS9kaWdpdHMpIn0seyJuYW1lIjoiYXJhXHRkaWdpdHMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChkaWdpdHMpIn0seyJuYW1lIjoiYXJhXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChxd2VydHkpIn0seyJuYW1lIjoiYXJhXHRxd2VydHlfZGlnaXRzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAocXdlcnR5L2RpZ2l0cykifSx7Im5hbWUiOiJhcmFcdGJ1Y2t3YWx0ZXIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChCdWNrd2FsdGVyKSJ9LHsibmFtZSI6ImFsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzcSIsImRlc2NyaXB0aW9uIjoiQWxiYW5pYW4ifSx7Im5hbWUiOiJhbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaHkiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIn0seyJuYW1lIjoiYW1cdHBob25ldGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIChwaG9uZXRpYykifSx7Im5hbWUiOiJhbVx0cGhvbmV0aWMtYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIChhbHRlcm5hdGl2ZSBwaG9uZXRpYykifSx7Im5hbWUiOiJhbVx0ZWFzdGVybiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcm1lbmlhbiAoZWFzdGVybikifSx7Im5hbWUiOiJhbVx0d2VzdGVybiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcm1lbmlhbiAod2VzdGVybikifSx7Im5hbWUiOiJhbVx0ZWFzdGVybi1hbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJtZW5pYW4gKGFsdGVybmF0aXZlIGVhc3Rlcm4pIn0seyJuYW1lIjoiYXQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImRlIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKEF1c3RyaWEpIn0seyJuYW1lIjoiYXRcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChBdXN0cmlhLCBlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImF0XHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKEF1c3RyaWEsIFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiYXRcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKEF1c3RyaWEsIE1hY2ludG9zaCkifSx7Im5hbWUiOiJheiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXoiLCJkZXNjcmlwdGlvbiI6IkF6ZXJiYWlqYW5pIn0seyJuYW1lIjoiYXpcdGN5cmlsbGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkF6ZXJiYWlqYW5pIChDeXJpbGxpYykifSx7Im5hbWUiOiJieSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYnkiLCJkZXNjcmlwdGlvbiI6IkJlbGFydXNpYW4ifSx7Im5hbWUiOiJieVx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJlbGFydXNpYW4gKGxlZ2FjeSkifSx7Im5hbWUiOiJieVx0bGF0aW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmVsYXJ1c2lhbiAoTGF0aW4pIn0seyJuYW1lIjoiYmUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImJlIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIn0seyJuYW1lIjoiYmVcdG9zcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChhbHRlcm5hdGl2ZSkifSx7Im5hbWUiOiJiZVx0b3NzX2xhdGluOSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChhbHRlcm5hdGl2ZSwgTGF0aW4tOSBvbmx5KSJ9LHsibmFtZSI6ImJlXHRvc3Nfc3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmVsZ2lhbiAoYWx0ZXJuYXRpdmUsIFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiYmVcdGlzby1hbHRlcm5hdGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmVsZ2lhbiAoSVNPIGFsdGVybmF0ZSkifSx7Im5hbWUiOiJiZVx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImJlXHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImJlXHR3YW5nIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJlbGdpYW4gKFdhbmcgbW9kZWwgNzI0IGF6ZXJ0eSkifSx7Im5hbWUiOiJiZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYm4iLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSJ9LHsibmFtZSI6ImJkXHRwcm9iaGF0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSAoUHJvYmhhdCkifSx7Im5hbWUiOiJpbiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaW4iLCJkZXNjcmlwdGlvbiI6IkluZGlhbiJ9LHsibmFtZSI6ImluXHRiZW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImJuIiwiZGVzY3JpcHRpb24iOiJCYW5nbGEgKEluZGlhKSJ9LHsibmFtZSI6ImluXHRiZW5fcHJvYmhhdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYm4iLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSAoSW5kaWEsIFByb2JoYXQpIn0seyJuYW1lIjoiaW5cdGJlbl9iYWlzaGFraGkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmFuZ2xhIChJbmRpYSwgQmFpc2hha2hpKSJ9LHsibmFtZSI6ImluXHRiZW5fYm9ybm9uYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCYW5nbGEgKEluZGlhLCBCb3Jub25hKSJ9LHsibmFtZSI6ImluXHRiZW5fZ2l0YW5qYWxpIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSAoSW5kaWEsIFVuaSBHaXRhbmphbGkpIn0seyJuYW1lIjoiaW5cdGJlbl9pbnNjcmlwdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCYW5nbGEgKEluZGlhLCBCYWlzaGFraGkgSW5zY3JpcHQpIn0seyJuYW1lIjoiaW5cdGd1aiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZ3UiLCJkZXNjcmlwdGlvbiI6Ikd1amFyYXRpIn0seyJuYW1lIjoiaW5cdGd1cnUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InBhIiwiZGVzY3JpcHRpb24iOiJQdW5qYWJpIChHdXJtdWtoaSkifSx7Im5hbWUiOiJpblx0amhlbHVtIiwic2hvcnRfZGVzY3JpcHRpb24iOiJwYSIsImRlc2NyaXB0aW9uIjoiUHVuamFiaSAoR3VybXVraGkgSmhlbHVtKSJ9LHsibmFtZSI6ImluXHRrYW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImtuIiwiZGVzY3JpcHRpb24iOiJLYW5uYWRhIn0seyJuYW1lIjoiaW5cdGthbi1rYWdhcGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImtuIiwiZGVzY3JpcHRpb24iOiJLYW5uYWRhIChLYUdhUGEgcGhvbmV0aWMpIn0seyJuYW1lIjoiaW5cdG1hbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoibWwiLCJkZXNjcmlwdGlvbiI6Ik1hbGF5YWxhbSJ9LHsibmFtZSI6ImluXHRtYWxfbGFsaXRoYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoibWwiLCJkZXNjcmlwdGlvbiI6Ik1hbGF5YWxhbSAoTGFsaXRoYSkifSx7Im5hbWUiOiJpblx0bWFsX2VuaGFuY2VkIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtbCIsImRlc2NyaXB0aW9uIjoiTWFsYXlhbGFtIChlbmhhbmNlZCBJbnNjcmlwdCB3aXRoIFJ1cGVlIFNpZ24pIn0seyJuYW1lIjoiaW5cdG9yaSIsInNob3J0X2Rlc2NyaXB0aW9uIjoib3IiLCJkZXNjcmlwdGlvbiI6Ik9yaXlhIn0seyJuYW1lIjoiaW5cdHRhbV91bmljb2RlIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0YSIsImRlc2NyaXB0aW9uIjoiVGFtaWwgKFVuaWNvZGUpIn0seyJuYW1lIjoiaW5cdHRhbV9rZXlib2FyZF93aXRoX251bWVyYWxzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0YSIsImRlc2NyaXB0aW9uIjoiVGFtaWwgKGtleWJvYXJkIHdpdGggbnVtZXJhbHMpIn0seyJuYW1lIjoiaW5cdHRhbV9UQUIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRhIiwiZGVzY3JpcHRpb24iOiJUYW1pbCAoVEFCIHR5cGV3cml0ZXIpIn0seyJuYW1lIjoiaW5cdHRhbV9UU0NJSSIsInNob3J0X2Rlc2NyaXB0aW9uIjoidGEiLCJkZXNjcmlwdGlvbiI6IlRhbWlsIChUU0NJSSB0eXBld3JpdGVyKSJ9LHsibmFtZSI6ImluXHR0YW0iLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRhIiwiZGVzY3JpcHRpb24iOiJUYW1pbCJ9LHsibmFtZSI6ImluXHR0ZWwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRlIiwiZGVzY3JpcHRpb24iOiJUZWx1Z3UifSx7Im5hbWUiOiJpblx0dGVsLWthZ2FwYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoidGUiLCJkZXNjcmlwdGlvbiI6IlRlbHVndSAoS2FHYVBhIHBob25ldGljKSJ9LHsibmFtZSI6ImluXHR1cmQtcGhvbmV0aWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InVyIiwiZGVzY3JpcHRpb24iOiJVcmR1IChwaG9uZXRpYykifSx7Im5hbWUiOiJpblx0dXJkLXBob25ldGljMyIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKGFsdGVybmF0aXZlIHBob25ldGljKSJ9LHsibmFtZSI6ImluXHR1cmQtd2lua2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKFdpbktleXMpIn0seyJuYW1lIjoiaW5cdGJvbG5hZ3JpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJoaSIsImRlc2NyaXB0aW9uIjoiSGluZGkgKEJvbG5hZ3JpKSJ9LHsibmFtZSI6ImluXHRoaW4td3giLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhpIiwiZGVzY3JpcHRpb24iOiJIaW5kaSAoV3gpIn0seyJuYW1lIjoiaW5cdGhpbi1rYWdhcGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhpIiwiZGVzY3JpcHRpb24iOiJIaW5kaSAoS2FHYVBhIHBob25ldGljKSJ9LHsibmFtZSI6ImluXHRzYW4ta2FnYXBhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzYSIsImRlc2NyaXB0aW9uIjoiU2Fuc2tyaXQgKEthR2FQYSBwaG9uZXRpYykifSx7Im5hbWUiOiJpblx0bWFyLWthZ2FwYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoibXIiLCJkZXNjcmlwdGlvbiI6Ik1hcmF0aGkgKEthR2FQYSBwaG9uZXRpYykifSx7Im5hbWUiOiJpblx0ZW5nIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoSW5kaWEsIHdpdGggUnVwZWVTaWduKSJ9LHsibmFtZSI6ImJhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJicyIsImRlc2NyaXB0aW9uIjoiQm9zbmlhbiJ9LHsibmFtZSI6ImJhXHRhbHRlcm5hdGVxdW90ZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQm9zbmlhbiAodXNlIGd1aWxsZW1ldHMgZm9yIHF1b3RlcykifSx7Im5hbWUiOiJiYVx0dW5pY29kZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCb3NuaWFuICh1c2UgQm9zbmlhbiBkaWdyYXBocykifSx7Im5hbWUiOiJiYVx0dW5pY29kZXVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJvc25pYW4gKFVTIGtleWJvYXJkIHdpdGggQm9zbmlhbiBkaWdyYXBocykifSx7Im5hbWUiOiJiYVx0dXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQm9zbmlhbiAoVVMga2V5Ym9hcmQgd2l0aCBCb3NuaWFuIGxldHRlcnMpIn0seyJuYW1lIjoiYnIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InB0IiwiZGVzY3JpcHRpb24iOiJQb3J0dWd1ZXNlIChCcmF6aWwpIn0seyJuYW1lIjoiYnJcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSAoQnJhemlsLCBlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImJyXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSAoQnJhemlsLCBEdm9yYWspIn0seyJuYW1lIjoiYnJcdG5hdGl2byIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb3J0dWd1ZXNlIChCcmF6aWwsIG5hdGl2bykifSx7Im5hbWUiOiJiclx0bmF0aXZvLXVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKEJyYXppbCwgbmF0aXZvIGZvciBVUyBrZXlib2FyZHMpIn0seyJuYW1lIjoiYnJcdG5hdGl2by1lcG8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSAoQnJhemlsLCBuYXRpdm8gZm9yIEVzcGVyYW50bykifSx7Im5hbWUiOiJiZyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmciLCJkZXNjcmlwdGlvbiI6IkJ1bGdhcmlhbiJ9LHsibmFtZSI6ImJnXHRwaG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCdWxnYXJpYW4gKHRyYWRpdGlvbmFsIHBob25ldGljKSJ9LHsibmFtZSI6ImJnXHRiYXNfcGhvbmV0aWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQnVsZ2FyaWFuIChuZXcgcGhvbmV0aWMpIn0seyJuYW1lIjoibWEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImFyIiwiZGVzY3JpcHRpb24iOiJBcmFiaWMgKE1vcm9jY28pIn0seyJuYW1lIjoibWFcdGZyZW5jaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoTW9yb2NjbykifSx7Im5hbWUiOiJtYVx0dGlmaW5hZ2giLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImJlciIsImRlc2NyaXB0aW9uIjoiQmVyYmVyIChNb3JvY2NvLCBUaWZpbmFnaCkifSx7Im5hbWUiOiJtYVx0dGlmaW5hZ2gtYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJiZXIiLCJkZXNjcmlwdGlvbiI6IkJlcmJlciAoTW9yb2NjbywgVGlmaW5hZ2ggYWx0ZXJuYXRpdmUpIn0seyJuYW1lIjoibWFcdHRpZmluYWdoLWFsdC1waG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIGFsdGVybmF0aXZlIHBob25ldGljKSJ9LHsibmFtZSI6Im1hXHR0aWZpbmFnaC1leHRlbmRlZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIGV4dGVuZGVkKSJ9LHsibmFtZSI6Im1hXHR0aWZpbmFnaC1waG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIHBob25ldGljKSJ9LHsibmFtZSI6Im1hXHR0aWZpbmFnaC1leHRlbmRlZC1waG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIGV4dGVuZGVkIHBob25ldGljKSJ9LHsibmFtZSI6ImNtIiwic2hvcnRfZGVzY3JpcHRpb24iOiJjbSIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoQ2FtZXJvb24pIn0seyJuYW1lIjoiY21cdGZyZW5jaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKENhbWVyb29uKSJ9LHsibmFtZSI6ImNtXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2FtZXJvb24gTXVsdGlsaW5ndWFsIChxd2VydHkpIn0seyJuYW1lIjoiY21cdGF6ZXJ0eSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDYW1lcm9vbiBNdWx0aWxpbmd1YWwgKGF6ZXJ0eSkifSx7Im5hbWUiOiJjbVx0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNhbWVyb29uIE11bHRpbGluZ3VhbCAoRHZvcmFrKSJ9LHsibmFtZSI6Im1tIiwic2hvcnRfZGVzY3JpcHRpb24iOiJteSIsImRlc2NyaXB0aW9uIjoiQnVybWVzZSJ9LHsibmFtZSI6ImNhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmciIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChDYW5hZGEpIn0seyJuYW1lIjoiY2FcdGZyLWR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoQ2FuYWRhLCBEdm9yYWspIn0seyJuYW1lIjoiY2FcdGZyLWxlZ2FjeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoQ2FuYWRhLCBsZWdhY3kpIn0seyJuYW1lIjoiY2FcdG11bHRpeCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDYW5hZGlhbiBNdWx0aWxpbmd1YWwifSx7Im5hbWUiOiJjYVx0bXVsdGkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2FuYWRpYW4gTXVsdGlsaW5ndWFsIChmaXJzdCBwYXJ0KSJ9LHsibmFtZSI6ImNhXHRtdWx0aS0yZ3IiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2FuYWRpYW4gTXVsdGlsaW5ndWFsIChzZWNvbmQgcGFydCkifSx7Im5hbWUiOiJjYVx0aWtlIiwic2hvcnRfZGVzY3JpcHRpb24iOiJpa2UiLCJkZXNjcmlwdGlvbiI6IkludWt0aXR1dCJ9LHsibmFtZSI6ImNhXHRlbmciLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChDYW5hZGEpIn0seyJuYW1lIjoiY2QiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIENvbmdvKSJ9LHsibmFtZSI6ImNuIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ6aCIsImRlc2NyaXB0aW9uIjoiQ2hpbmVzZSJ9LHsibmFtZSI6ImNuXHR0aWIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGliZXRhbiJ9LHsibmFtZSI6ImNuXHR0aWJfYXNjaWludW0iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGliZXRhbiAod2l0aCBBU0NJSSBudW1lcmFscykifSx7Im5hbWUiOiJjblx0dWlnIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlV5Z2h1ciJ9LHsibmFtZSI6ImhyIiwic2hvcnRfZGVzY3JpcHRpb24iOiJociIsImRlc2NyaXB0aW9uIjoiQ3JvYXRpYW4ifSx7Im5hbWUiOiJoclx0YWx0ZXJuYXRlcXVvdGVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNyb2F0aWFuICh1c2UgZ3VpbGxlbWV0cyBmb3IgcXVvdGVzKSJ9LHsibmFtZSI6ImhyXHR1bmljb2RlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNyb2F0aWFuICh1c2UgQ3JvYXRpYW4gZGlncmFwaHMpIn0seyJuYW1lIjoiaHJcdHVuaWNvZGV1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDcm9hdGlhbiAoVVMga2V5Ym9hcmQgd2l0aCBDcm9hdGlhbiBkaWdyYXBocykifSx7Im5hbWUiOiJoclx0dXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3JvYXRpYW4gKFVTIGtleWJvYXJkIHdpdGggQ3JvYXRpYW4gbGV0dGVycykifSx7Im5hbWUiOiJjeiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY3MiLCJkZXNjcmlwdGlvbiI6IkN6ZWNoIn0seyJuYW1lIjoiY3pcdGJrc2wiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKHdpdGggPFxcfD4ga2V5KSJ9LHsibmFtZSI6ImN6XHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKHF3ZXJ0eSkifSx7Im5hbWUiOiJjelx0cXdlcnR5X2Jrc2wiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKHF3ZXJ0eSwgZXh0ZW5kZWQgQmFja3NsYXNoKSJ9LHsibmFtZSI6ImN6XHR1Y3ciLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKFVDVyBsYXlvdXQsIGFjY2VudGVkIGxldHRlcnMgb25seSkifSx7Im5hbWUiOiJjelx0ZHZvcmFrLXVjdyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDemVjaCAoVVMgRHZvcmFrIHdpdGggQ1ogVUNXIHN1cHBvcnQpIn0seyJuYW1lIjoiZGsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImRhIiwiZGVzY3JpcHRpb24iOiJEYW5pc2gifSx7Im5hbWUiOiJka1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJEYW5pc2ggKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiZGtcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJEYW5pc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJka1x0bWFjX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRGFuaXNoIChNYWNpbnRvc2gsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiZGtcdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJEYW5pc2ggKER2b3JhaykifSx7Im5hbWUiOiJubCIsInNob3J0X2Rlc2NyaXB0aW9uIjoibmwiLCJkZXNjcmlwdGlvbiI6IkR1dGNoIn0seyJuYW1lIjoibmxcdHN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkR1dGNoIChTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6Im5sXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRHV0Y2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJubFx0c3RkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkR1dGNoIChzdGFuZGFyZCkifSx7Im5hbWUiOiJidCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZHoiLCJkZXNjcmlwdGlvbiI6IkR6b25na2hhIn0seyJuYW1lIjoiZWUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImV0IiwiZGVzY3JpcHRpb24iOiJFc3RvbmlhbiJ9LHsibmFtZSI6ImVlXHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVzdG9uaWFuIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImVlXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRXN0b25pYW4gKER2b3JhaykifSx7Im5hbWUiOiJlZVx0dXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRXN0b25pYW4gKFVTIGtleWJvYXJkIHdpdGggRXN0b25pYW4gbGV0dGVycykifSx7Im5hbWUiOiJpciIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZmEiLCJkZXNjcmlwdGlvbiI6IlBlcnNpYW4ifSx7Im5hbWUiOiJpclx0cGVzX2tleXBhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQZXJzaWFuICh3aXRoIFBlcnNpYW4gS2V5cGFkKSJ9LHsibmFtZSI6ImlyXHRrdSIsInNob3J0X2Rlc2NyaXB0aW9uIjoia3UiLCJkZXNjcmlwdGlvbiI6Ikt1cmRpc2ggKElyYW4sIExhdGluIFEpIn0seyJuYW1lIjoiaXJcdGt1X2YiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChJcmFuLCBGKSJ9LHsibmFtZSI6ImlyXHRrdV9hbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChJcmFuLCBMYXRpbiBBbHQtUSkifSx7Im5hbWUiOiJpclx0a3VfYXJhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoSXJhbiwgQXJhYmljLUxhdGluKSJ9LHsibmFtZSI6ImlxIiwic2hvcnRfZGVzY3JpcHRpb24iOiJhciIsImRlc2NyaXB0aW9uIjoiSXJhcWkifSx7Im5hbWUiOiJpcVx0a3UiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChJcmFxLCBMYXRpbiBRKSJ9LHsibmFtZSI6ImlxXHRrdV9mIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoSXJhcSwgRikifSx7Im5hbWUiOiJpcVx0a3VfYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoSXJhcSwgTGF0aW4gQWx0LVEpIn0seyJuYW1lIjoiaXFcdGt1X2FyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoia3UiLCJkZXNjcmlwdGlvbiI6Ikt1cmRpc2ggKElyYXEsIEFyYWJpYy1MYXRpbikifSx7Im5hbWUiOiJmbyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZm8iLCJkZXNjcmlwdGlvbiI6IkZhcm9lc2UifSx7Im5hbWUiOiJmb1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGYXJvZXNlIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImZpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmaSIsImRlc2NyaXB0aW9uIjoiRmlubmlzaCJ9LHsibmFtZSI6ImZpXHRjbGFzc2ljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZpbm5pc2ggKGNsYXNzaWMpIn0seyJuYW1lIjoiZmlcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlubmlzaCAoY2xhc3NpYywgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJmaVx0c21pIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik5vcnRoZXJuIFNhYW1pIChGaW5sYW5kKSJ9LHsibmFtZSI6ImZpXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlubmlzaCAoTWFjaW50b3NoKSJ9LHsibmFtZSI6ImZyIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmciIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIn0seyJuYW1lIjoiZnJcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImZyXHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiZnJcdG9zcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKGFsdGVybmF0aXZlKSJ9LHsibmFtZSI6ImZyXHRvc3NfbGF0aW45Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoYWx0ZXJuYXRpdmUsIExhdGluLTkgb25seSkifSx7Im5hbWUiOiJmclx0b3NzX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChhbHRlcm5hdGl2ZSwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJmclx0b3NzX3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoYWx0ZXJuYXRpdmUsIFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiZnJcdGxhdGluOSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKGxlZ2FjeSwgYWx0ZXJuYXRpdmUpIn0seyJuYW1lIjoiZnJcdGxhdGluOV9ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAobGVnYWN5LCBhbHRlcm5hdGl2ZSwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJmclx0bGF0aW45X3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAobGVnYWN5LCBhbHRlcm5hdGl2ZSwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJmclx0YmVwbyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKEJlcG8sIGVyZ29ub21pYywgRHZvcmFrIHdheSkifSx7Im5hbWUiOiJmclx0YmVwb19sYXRpbjkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChCZXBvLCBlcmdvbm9taWMsIER2b3JhayB3YXksIExhdGluLTkgb25seSkifSx7Im5hbWUiOiJmclx0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoRHZvcmFrKSJ9LHsibmFtZSI6ImZyXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChNYWNpbnRvc2gpIn0seyJuYW1lIjoiZnJcdGJyZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKEJyZXRvbikifSx7Im5hbWUiOiJmclx0b2NpIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik9jY2l0YW4ifSx7Im5hbWUiOiJmclx0Z2VvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlb3JnaWFuIChGcmFuY2UsIEFaRVJUWSBUc2thcG8pIn0seyJuYW1lIjoiZ2giLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChHaGFuYSkifSx7Im5hbWUiOiJnaFx0Z2VuZXJpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChHaGFuYSwgbXVsdGlsaW5ndWFsKSJ9LHsibmFtZSI6ImdoXHRha2FuIiwic2hvcnRfZGVzY3JpcHRpb24iOiJhayIsImRlc2NyaXB0aW9uIjoiQWthbiJ9LHsibmFtZSI6ImdoXHRld2UiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVlIiwiZGVzY3JpcHRpb24iOiJFd2UifSx7Im5hbWUiOiJnaFx0ZnVsYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZmYiLCJkZXNjcmlwdGlvbiI6IkZ1bGEifSx7Im5hbWUiOiJnaFx0Z2EiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImdhYSIsImRlc2NyaXB0aW9uIjoiR2EifSx7Im5hbWUiOiJnaFx0aGF1c2EiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhhIiwiZGVzY3JpcHRpb24iOiJIYXVzYSJ9LHsibmFtZSI6ImdoXHRhdm4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImF2biIsImRlc2NyaXB0aW9uIjoiQXZhdGltZSJ9LHsibmFtZSI6ImdoXHRnaWxsYnQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoR2hhbmEsIEdJTExCVCkifSx7Im5hbWUiOiJnbiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoR3VpbmVhKSJ9LHsibmFtZSI6ImdlIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrYSIsImRlc2NyaXB0aW9uIjoiR2VvcmdpYW4ifSx7Im5hbWUiOiJnZVx0ZXJnb25vbWljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlb3JnaWFuIChlcmdvbm9taWMpIn0seyJuYW1lIjoiZ2VcdG1lc3MiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VvcmdpYW4gKE1FU1MpIn0seyJuYW1lIjoiZ2VcdHJ1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJydSIsImRlc2NyaXB0aW9uIjoiUnVzc2lhbiAoR2VvcmdpYSkifSx7Im5hbWUiOiJnZVx0b3MiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiT3NzZXRpYW4gKEdlb3JnaWEpIn0seyJuYW1lIjoiZGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImRlIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4ifSx7Im5hbWUiOiJkZVx0ZGVhZGFjdXRlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoZGVhZCBhY3V0ZSkifSx7Im5hbWUiOiJkZVx0ZGVhZGdyYXZlYWN1dGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChkZWFkIGdyYXZlIGFjdXRlKSJ9LHsibmFtZSI6ImRlXHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJkZVx0VDMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChUMykifSx7Im5hbWUiOiJkZVx0cm8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUm9tYW5pYW4gKEdlcm1hbnkpIn0seyJuYW1lIjoiZGVcdHJvX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUm9tYW5pYW4gKEdlcm1hbnksIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiZGVcdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKER2b3JhaykifSx7Im5hbWUiOiJkZVx0c3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImRlXHRuZW8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChOZW8gMikifSx7Im5hbWUiOiJkZVx0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoTWFjaW50b3NoKSJ9LHsibmFtZSI6ImRlXHRtYWNfbm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKE1hY2ludG9zaCwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJkZVx0ZHNiIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikxvd2VyIFNvcmJpYW4ifSx7Im5hbWUiOiJkZVx0ZHNiX3F3ZXJ0eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMb3dlciBTb3JiaWFuIChxd2VydHopIn0seyJuYW1lIjoiZGVcdHF3ZXJ0eSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKHF3ZXJ0eSkifSx7Im5hbWUiOiJkZVx0cnUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InJ1IiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChHZXJtYW55LCBwaG9uZXRpYykifSx7Im5hbWUiOiJkZVx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAobGVnYWN5KSJ9LHsibmFtZSI6ImdyIiwic2hvcnRfZGVzY3JpcHRpb24iOiJnciIsImRlc2NyaXB0aW9uIjoiR3JlZWsifSx7Im5hbWUiOiJnclx0c2ltcGxlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkdyZWVrIChzaW1wbGUpIn0seyJuYW1lIjoiZ3JcdGV4dGVuZGVkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkdyZWVrIChleHRlbmRlZCkifSx7Im5hbWUiOiJnclx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHcmVlayAoZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJnclx0cG9seXRvbmljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkdyZWVrIChwb2x5dG9uaWMpIn0seyJuYW1lIjoiaHUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imh1IiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4ifSx7Im5hbWUiOiJodVx0c3RhbmRhcmQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuIChzdGFuZGFyZCkifSx7Im5hbWUiOiJodVx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdHF3ZXJ0eSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKHF3ZXJ0eSkifSx7Im5hbWUiOiJodVx0MTAxX3F3ZXJ0el9jb21tYV9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAxL3F3ZXJ0ei9jb21tYS9kZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMV9xd2VydHpfY29tbWFfbm9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAxL3F3ZXJ0ei9jb21tYS9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDFfcXdlcnR6X2RvdF9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAxL3F3ZXJ0ei9kb3QvZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDFfcXdlcnR6X2RvdF9ub2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR6L2RvdC9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDFfcXdlcnR5X2NvbW1hX2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR5L2NvbW1hL2RlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAxX3F3ZXJ0eV9jb21tYV9ub2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR5L2NvbW1hL2VsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMV9xd2VydHlfZG90X2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR5L2RvdC9kZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMV9xd2VydHlfZG90X25vZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMS9xd2VydHkvZG90L2VsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMl9xd2VydHpfY29tbWFfZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMi9xd2VydHovY29tbWEvZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDJfcXdlcnR6X2NvbW1hX25vZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMi9xd2VydHovY29tbWEvZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAyX3F3ZXJ0el9kb3RfZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMi9xd2VydHovZG90L2RlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAyX3F3ZXJ0el9kb3Rfbm9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0ei9kb3QvZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAyX3F3ZXJ0eV9jb21tYV9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0eS9jb21tYS9kZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMl9xd2VydHlfY29tbWFfbm9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0eS9jb21tYS9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDJfcXdlcnR5X2RvdF9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0eS9kb3QvZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDJfcXdlcnR5X2RvdF9ub2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDIvcXdlcnR5L2RvdC9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJpcyIsImRlc2NyaXB0aW9uIjoiSWNlbGFuZGljIn0seyJuYW1lIjoiaXNcdFN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkljZWxhbmRpYyAoU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJpc1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJY2VsYW5kaWMgKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaXNcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJY2VsYW5kaWMgKE1hY2ludG9zaCkifSx7Im5hbWUiOiJpc1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkljZWxhbmRpYyAoRHZvcmFrKSJ9LHsibmFtZSI6ImlsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJoZSIsImRlc2NyaXB0aW9uIjoiSGVicmV3In0seyJuYW1lIjoiaWxcdGx5eCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIZWJyZXcgKGx5eCkifSx7Im5hbWUiOiJpbFx0cGhvbmV0aWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSGVicmV3IChwaG9uZXRpYykifSx7Im5hbWUiOiJpbFx0YmlibGljYWwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSGVicmV3IChCaWJsaWNhbCwgVGlybykifSx7Im5hbWUiOiJpdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaXQiLCJkZXNjcmlwdGlvbiI6Ikl0YWxpYW4ifSx7Im5hbWUiOiJpdFx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJdGFsaWFuIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Iml0XHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSXRhbGlhbiAoTWFjaW50b3NoKSJ9LHsibmFtZSI6Iml0XHR1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJdGFsaWFuIChVUyBrZXlib2FyZCB3aXRoIEl0YWxpYW4gbGV0dGVycykifSx7Im5hbWUiOiJpdFx0Z2VvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlb3JnaWFuIChJdGFseSkifSx7Im5hbWUiOiJpdFx0aWJtIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikl0YWxpYW4gKElCTSAxNDIpIn0seyJuYW1lIjoianAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImphIiwiZGVzY3JpcHRpb24iOiJKYXBhbmVzZSJ9LHsibmFtZSI6ImpwXHRrYW5hIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkphcGFuZXNlIChLYW5hKSJ9LHsibmFtZSI6ImpwXHRrYW5hODYiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSmFwYW5lc2UgKEthbmEgODYpIn0seyJuYW1lIjoianBcdE9BREcxMDlBIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkphcGFuZXNlIChPQURHIDEwOUEpIn0seyJuYW1lIjoianBcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJKYXBhbmVzZSAoTWFjaW50b3NoKSJ9LHsibmFtZSI6ImpwXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSmFwYW5lc2UgKER2b3JhaykifSx7Im5hbWUiOiJrZyIsInNob3J0X2Rlc2NyaXB0aW9uIjoia2kiLCJkZXNjcmlwdGlvbiI6Ikt5cmd5eiJ9LHsibmFtZSI6ImtnXHRwaG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJLeXJneXogKHBob25ldGljKSJ9LHsibmFtZSI6ImtoIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrbSIsImRlc2NyaXB0aW9uIjoiS2htZXIgKENhbWJvZGlhKSJ9LHsibmFtZSI6Imt6Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrayIsImRlc2NyaXB0aW9uIjoiS2F6YWtoIn0seyJuYW1lIjoia3pcdHJ1c2theiIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKEthemFraHN0YW4sIHdpdGggS2F6YWtoKSJ9LHsibmFtZSI6Imt6XHRrYXpydXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiS2F6YWtoICh3aXRoIFJ1c3NpYW4pIn0seyJuYW1lIjoibGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImxvIiwiZGVzY3JpcHRpb24iOiJMYW8ifSx7Im5hbWUiOiJsYVx0c3RlYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMYW8gKFNURUEgcHJvcG9zZWQgc3RhbmRhcmQgbGF5b3V0KSJ9LHsibmFtZSI6ImxhdGFtIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlcyIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoTGF0aW4gQW1lcmljYW4pIn0seyJuYW1lIjoibGF0YW1cdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoTGF0aW4gQW1lcmljYW4sIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibGF0YW1cdGRlYWR0aWxkZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTcGFuaXNoIChMYXRpbiBBbWVyaWNhbiwgaW5jbHVkZSBkZWFkIHRpbGRlKSJ9LHsibmFtZSI6ImxhdGFtXHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTcGFuaXNoIChMYXRpbiBBbWVyaWNhbiwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJsdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoibHQiLCJkZXNjcmlwdGlvbiI6IkxpdGh1YW5pYW4ifSx7Im5hbWUiOiJsdFx0c3RkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxpdGh1YW5pYW4gKHN0YW5kYXJkKSJ9LHsibmFtZSI6Imx0XHR1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMaXRodWFuaWFuIChVUyBrZXlib2FyZCB3aXRoIExpdGh1YW5pYW4gbGV0dGVycykifSx7Im5hbWUiOiJsdFx0aWJtIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxpdGh1YW5pYW4gKElCTSBMU1QgMTIwNS05MikifSx7Im5hbWUiOiJsdFx0bGVrcCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMaXRodWFuaWFuIChMRUtQKSJ9LHsibmFtZSI6Imx0XHRsZWtwYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMaXRodWFuaWFuIChMRUtQYSkifSx7Im5hbWUiOiJsdiIsInNob3J0X2Rlc2NyaXB0aW9uIjoibHYiLCJkZXNjcmlwdGlvbiI6IkxhdHZpYW4ifSx7Im5hbWUiOiJsdlx0YXBvc3Ryb3BoZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMYXR2aWFuIChhcG9zdHJvcGhlIHZhcmlhbnQpIn0seyJuYW1lIjoibHZcdHRpbGRlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxhdHZpYW4gKHRpbGRlIHZhcmlhbnQpIn0seyJuYW1lIjoibHZcdGZrZXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTGF0dmlhbiAoRiB2YXJpYW50KSJ9LHsibmFtZSI6Imx2XHRtb2Rlcm4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTGF0dmlhbiAobW9kZXJuKSJ9LHsibmFtZSI6Imx2XHRlcmdvbm9taWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTGF0dmlhbiAoZXJnb25vbWljLCDFqkdKUk1WKSJ9LHsibmFtZSI6Imx2XHRhZGFwdGVkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxhdHZpYW4gKGFkYXB0ZWQpIn0seyJuYW1lIjoibWFvIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtaSIsImRlc2NyaXB0aW9uIjoiTWFvcmkifSx7Im5hbWUiOiJtZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3IiLCJkZXNjcmlwdGlvbiI6Ik1vbnRlbmVncmluIn0seyJuYW1lIjoibWVcdGN5cmlsbGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1vbnRlbmVncmluIChDeXJpbGxpYykifSx7Im5hbWUiOiJtZVx0Y3lyaWxsaWN5eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJNb250ZW5lZ3JpbiAoQ3lyaWxsaWMsIFogYW5kIFpIRSBzd2FwcGVkKSJ9LHsibmFtZSI6Im1lXHRsYXRpbnVuaWNvZGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTW9udGVuZWdyaW4gKExhdGluIFVuaWNvZGUpIn0seyJuYW1lIjoibWVcdGxhdGlueXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTW9udGVuZWdyaW4gKExhdGluIHF3ZXJ0eSkifSx7Im5hbWUiOiJtZVx0bGF0aW51bmljb2RleXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTW9udGVuZWdyaW4gKExhdGluIFVuaWNvZGUgcXdlcnR5KSJ9LHsibmFtZSI6Im1lXHRjeXJpbGxpY2FsdGVybmF0ZXF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJNb250ZW5lZ3JpbiAoQ3lyaWxsaWMgd2l0aCBndWlsbGVtZXRzKSJ9LHsibmFtZSI6Im1lXHRsYXRpbmFsdGVybmF0ZXF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJNb250ZW5lZ3JpbiAoTGF0aW4gd2l0aCBndWlsbGVtZXRzKSJ9LHsibmFtZSI6Im1rIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtayIsImRlc2NyaXB0aW9uIjoiTWFjZWRvbmlhbiJ9LHsibmFtZSI6Im1rXHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1hY2Vkb25pYW4gKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibXQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Im10IiwiZGVzY3JpcHRpb24iOiJNYWx0ZXNlIn0seyJuYW1lIjoibXRcdHVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1hbHRlc2UgKHdpdGggVVMgbGF5b3V0KSJ9LHsibmFtZSI6Im1uIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtbiIsImRlc2NyaXB0aW9uIjoiTW9uZ29saWFuIn0seyJuYW1lIjoibm8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6Im5vIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4ifSx7Im5hbWUiOiJub1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4gKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibm9cdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4gKER2b3JhaykifSx7Im5hbWUiOiJub1x0c21pIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik5vcnRoZXJuIFNhYW1pIChOb3J3YXkpIn0seyJuYW1lIjoibm9cdHNtaV9ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik5vcnRoZXJuIFNhYW1pIChOb3J3YXksIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibm9cdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4gKE1hY2ludG9zaCkifSx7Im5hbWUiOiJub1x0bWFjX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTm9yd2VnaWFuIChNYWNpbnRvc2gsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibm9cdGNvbGVtYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTm9yd2VnaWFuIChDb2xlbWFrKSJ9LHsibmFtZSI6InBsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJwbCIsImRlc2NyaXB0aW9uIjoiUG9saXNoIn0seyJuYW1lIjoicGxcdGxlZ2FjeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb2xpc2ggKGxlZ2FjeSkifSx7Im5hbWUiOiJwbFx0cXdlcnR6Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvbGlzaCAocXdlcnR6KSJ9LHsibmFtZSI6InBsXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9saXNoIChEdm9yYWspIn0seyJuYW1lIjoicGxcdGR2b3Jha19xdW90ZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9saXNoIChEdm9yYWssIFBvbGlzaCBxdW90ZXMgb24gcXVvdGVtYXJrIGtleSkifSx7Im5hbWUiOiJwbFx0ZHZvcmFrX2FsdHF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb2xpc2ggKER2b3JhaywgUG9saXNoIHF1b3RlcyBvbiBrZXkgMSkifSx7Im5hbWUiOiJwbFx0Y3NiIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikthc2h1YmlhbiJ9LHsibmFtZSI6InBsXHRzemwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2lsZXNpYW4ifSx7Im5hbWUiOiJwbFx0cnVfcGhvbmV0aWNfZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiJydSIsImRlc2NyaXB0aW9uIjoiUnVzc2lhbiAoUG9sYW5kLCBwaG9uZXRpYyBEdm9yYWspIn0seyJuYW1lIjoicGxcdGR2cCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb2xpc2ggKHByb2dyYW1tZXIgRHZvcmFrKSJ9LHsibmFtZSI6InB0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJwdCIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSJ9LHsibmFtZSI6InB0XHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoicHRcdHN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoicHRcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb3J0dWd1ZXNlIChNYWNpbnRvc2gpIn0seyJuYW1lIjoicHRcdG1hY19ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE1hY2ludG9zaCwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJwdFx0bWFjX3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE1hY2ludG9zaCwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJwdFx0bmF0aXZvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE5hdGl2bykifSx7Im5hbWUiOiJwdFx0bmF0aXZvLXVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE5hdGl2byBmb3IgVVMga2V5Ym9hcmRzKSJ9LHsibmFtZSI6InB0XHRuYXRpdm8tZXBvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVzcGVyYW50byAoUG9ydHVnYWwsIE5hdGl2bykifSx7Im5hbWUiOiJybyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicm8iLCJkZXNjcmlwdGlvbiI6IlJvbWFuaWFuIn0seyJuYW1lIjoicm9cdGNlZGlsbGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUm9tYW5pYW4gKGNlZGlsbGEpIn0seyJuYW1lIjoicm9cdHN0ZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSb21hbmlhbiAoc3RhbmRhcmQpIn0seyJuYW1lIjoicm9cdHN0ZF9jZWRpbGxhIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJvbWFuaWFuIChzdGFuZGFyZCBjZWRpbGxhKSJ9LHsibmFtZSI6InJvXHR3aW5rZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJvbWFuaWFuIChXaW5LZXlzKSJ9LHsibmFtZSI6InJ1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJydSIsImRlc2NyaXB0aW9uIjoiUnVzc2lhbiJ9LHsibmFtZSI6InJ1XHRwaG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChwaG9uZXRpYykifSx7Im5hbWUiOiJydVx0cGhvbmV0aWNfd2lua2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChwaG9uZXRpYyBXaW5LZXlzKSJ9LHsibmFtZSI6InJ1XHR0eXBld3JpdGVyIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKHR5cGV3cml0ZXIpIn0seyJuYW1lIjoicnVcdGxlZ2FjeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChsZWdhY3kpIn0seyJuYW1lIjoicnVcdHR5cGV3cml0ZXItbGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKHR5cGV3cml0ZXIsIGxlZ2FjeSkifSx7Im5hbWUiOiJydVx0dHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGF0YXIifSx7Im5hbWUiOiJydVx0b3NfbGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik9zc2V0aWFuIChsZWdhY3kpIn0seyJuYW1lIjoicnVcdG9zX3dpbmtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiT3NzZXRpYW4gKFdpbktleXMpIn0seyJuYW1lIjoicnVcdGN2Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNodXZhc2gifSx7Im5hbWUiOiJydVx0Y3ZfbGF0aW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2h1dmFzaCAoTGF0aW4pIn0seyJuYW1lIjoicnVcdHVkbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJVZG11cnQifSx7Im5hbWUiOiJydVx0a29tIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IktvbWkifSx7Im5hbWUiOiJydVx0c2FoIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Illha3V0In0seyJuYW1lIjoicnVcdHhhbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJLYWxteWsifSx7Im5hbWUiOiJydVx0ZG9zIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKERPUykifSx7Im5hbWUiOiJydVx0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKE1hY2ludG9zaCkifSx7Im5hbWUiOiJydVx0c3JwIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4gKFJ1c3NpYSkifSx7Im5hbWUiOiJydVx0YmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJhc2hraXJpYW4ifSx7Im5hbWUiOiJydVx0Y2htIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1hcmkifSx7Im5hbWUiOiJycyIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3IiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4ifSx7Im5hbWUiOiJyc1x0eXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYmlhbiAoQ3lyaWxsaWMsIFogYW5kIFpIRSBzd2FwcGVkKSJ9LHsibmFtZSI6InJzXHRsYXRpbiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTZXJiaWFuIChMYXRpbikifSx7Im5hbWUiOiJyc1x0bGF0aW51bmljb2RlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4gKExhdGluIFVuaWNvZGUpIn0seyJuYW1lIjoicnNcdGxhdGlueXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYmlhbiAoTGF0aW4gcXdlcnR5KSJ9LHsibmFtZSI6InJzXHRsYXRpbnVuaWNvZGV5eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTZXJiaWFuIChMYXRpbiBVbmljb2RlIHF3ZXJ0eSkifSx7Im5hbWUiOiJyc1x0YWx0ZXJuYXRlcXVvdGVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4gKEN5cmlsbGljIHdpdGggZ3VpbGxlbWV0cykifSx7Im5hbWUiOiJyc1x0bGF0aW5hbHRlcm5hdGVxdW90ZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYmlhbiAoTGF0aW4gd2l0aCBndWlsbGVtZXRzKSJ9LHsibmFtZSI6InJzXHRydWUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUGFubm9uaWFuIFJ1c3luIChob21vcGhvbmljKSJ9LHsibmFtZSI6InNpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzbCIsImRlc2NyaXB0aW9uIjoiU2xvdmVuaWFuIn0seyJuYW1lIjoic2lcdGFsdGVybmF0ZXF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTbG92ZW5pYW4gKHVzZSBndWlsbGVtZXRzIGZvciBxdW90ZXMpIn0seyJuYW1lIjoic2lcdHVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNsb3ZlbmlhbiAoVVMga2V5Ym9hcmQgd2l0aCBTbG92ZW5pYW4gbGV0dGVycykifSx7Im5hbWUiOiJzayIsInNob3J0X2Rlc2NyaXB0aW9uIjoic2siLCJkZXNjcmlwdGlvbiI6IlNsb3ZhayJ9LHsibmFtZSI6InNrXHRia3NsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNsb3ZhayAoZXh0ZW5kZWQgQmFja3NsYXNoKSJ9LHsibmFtZSI6InNrXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2xvdmFrIChxd2VydHkpIn0seyJuYW1lIjoic2tcdHF3ZXJ0eV9ia3NsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNsb3ZhayAocXdlcnR5LCBleHRlbmRlZCBCYWNrc2xhc2gpIn0seyJuYW1lIjoiZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVzIiwiZGVzY3JpcHRpb24iOiJTcGFuaXNoIn0seyJuYW1lIjoiZXNcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJlc1x0ZGVhZHRpbGRlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNwYW5pc2ggKGluY2x1ZGUgZGVhZCB0aWxkZSkifSx7Im5hbWUiOiJlc1x0c3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJlc1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNwYW5pc2ggKER2b3JhaykifSx7Im5hbWUiOiJlc1x0YXN0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFzdHVyaWFuIChTcGFpbiwgd2l0aCBib3R0b20tZG90IEggYW5kIGJvdHRvbS1kb3QgTCkifSx7Im5hbWUiOiJlc1x0Y2F0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNhdGFsYW4gKFNwYWluLCB3aXRoIG1pZGRsZS1kb3QgTCkifSx7Im5hbWUiOiJlc1x0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNwYW5pc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJzZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3YiLCJkZXNjcmlwdGlvbiI6IlN3ZWRpc2gifSx7Im5hbWUiOiJzZVx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTd2VkaXNoIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6InNlXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3dlZGlzaCAoRHZvcmFrKSJ9LHsibmFtZSI6InNlXHRydXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InJ1IiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChTd2VkZW4sIHBob25ldGljKSJ9LHsibmFtZSI6InNlXHRydXNfbm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKFN3ZWRlbiwgcGhvbmV0aWMsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoic2VcdHNtaSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J0aGVybiBTYWFtaSAoU3dlZGVuKSJ9LHsibmFtZSI6InNlXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3dlZGlzaCAoTWFjaW50b3NoKSJ9LHsibmFtZSI6InNlXHRzdmR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTd2VkaXNoIChTdmR2b3JhaykifSx7Im5hbWUiOiJzZVx0c3dsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlN3ZWRpc2ggU2lnbiBMYW5ndWFnZSJ9LHsibmFtZSI6ImNoIiwic2hvcnRfZGVzY3JpcHRpb24iOiJkZSIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChTd2l0emVybGFuZCkifSx7Im5hbWUiOiJjaFx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoU3dpdHplcmxhbmQsIGxlZ2FjeSkifSx7Im5hbWUiOiJjaFx0ZGVfbm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZGUiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoU3dpdHplcmxhbmQsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiY2hcdGRlX3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJkZSIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChTd2l0emVybGFuZCwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJjaFx0ZnIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN3aXR6ZXJsYW5kKSJ9LHsibmFtZSI6ImNoXHRmcl9ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmciIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChTd2l0emVybGFuZCwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJjaFx0ZnJfc3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN3aXR6ZXJsYW5kLCBTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImNoXHRmcl9tYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN3aXR6ZXJsYW5kLCBNYWNpbnRvc2gpIn0seyJuYW1lIjoiY2hcdGRlX21hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZGUiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoU3dpdHplcmxhbmQsIE1hY2ludG9zaCkifSx7Im5hbWUiOiJzeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoU3lyaWEpIn0seyJuYW1lIjoic3lcdHN5YyIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3ljIiwiZGVzY3JpcHRpb24iOiJTeXJpYWMifSx7Im5hbWUiOiJzeVx0c3ljX3Bob25ldGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzeWMiLCJkZXNjcmlwdGlvbiI6IlN5cmlhYyAocGhvbmV0aWMpIn0seyJuYW1lIjoic3lcdGt1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoU3lyaWEsIExhdGluIFEpIn0seyJuYW1lIjoic3lcdGt1X2YiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChTeXJpYSwgRikifSx7Im5hbWUiOiJzeVx0a3VfYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoU3lyaWEsIExhdGluIEFsdC1RKSJ9LHsibmFtZSI6InRqIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0ZyIsImRlc2NyaXB0aW9uIjoiVGFqaWsifSx7Im5hbWUiOiJ0alx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlRhamlrIChsZWdhY3kpIn0seyJuYW1lIjoibGsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InNpIiwiZGVzY3JpcHRpb24iOiJTaW5oYWxhIChwaG9uZXRpYykifSx7Im5hbWUiOiJsa1x0dGFtX3VuaWNvZGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRhIiwiZGVzY3JpcHRpb24iOiJUYW1pbCAoU3JpIExhbmthLCBVbmljb2RlKSJ9LHsibmFtZSI6ImxrXHR0YW1fVEFCIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlRhbWlsIChTcmkgTGFua2EsIFRBQiBUeXBld3JpdGVyKSJ9LHsibmFtZSI6InRoIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0aCIsImRlc2NyaXB0aW9uIjoiVGhhaSJ9LHsibmFtZSI6InRoXHR0aXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGhhaSAoVElTLTgyMC4yNTM4KSJ9LHsibmFtZSI6InRoXHRwYXQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGhhaSAoUGF0dGFjaG90ZSkifSx7Im5hbWUiOiJ0ciIsInNob3J0X2Rlc2NyaXB0aW9uIjoidHIiLCJkZXNjcmlwdGlvbiI6IlR1cmtpc2gifSx7Im5hbWUiOiJ0clx0ZiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJUdXJraXNoIChGKSJ9LHsibmFtZSI6InRyXHRhbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVHVya2lzaCAoQWx0LVEpIn0seyJuYW1lIjoidHJcdHN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlR1cmtpc2ggKFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoidHJcdGt1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoVHVya2V5LCBMYXRpbiBRKSJ9LHsibmFtZSI6InRyXHRrdV9mIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoVHVya2V5LCBGKSJ9LHsibmFtZSI6InRyXHRrdV9hbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChUdXJrZXksIExhdGluIEFsdC1RKSJ9LHsibmFtZSI6InRyXHRpbnRsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlR1cmtpc2ggKGludGVybmF0aW9uYWwgd2l0aCBkZWFkIGtleXMpIn0seyJuYW1lIjoidHJcdGNyaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY3JoIiwiZGVzY3JpcHRpb24iOiJDcmltZWFuIFRhdGFyIChUdXJraXNoIFEpIn0seyJuYW1lIjoidHJcdGNyaF9mIiwic2hvcnRfZGVzY3JpcHRpb24iOiJjcmgiLCJkZXNjcmlwdGlvbiI6IkNyaW1lYW4gVGF0YXIgKFR1cmtpc2ggRikifSx7Im5hbWUiOiJ0clx0Y3JoX2FsdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY3JoIiwiZGVzY3JpcHRpb24iOiJDcmltZWFuIFRhdGFyIChUdXJraXNoIEFsdC1RKSJ9LHsibmFtZSI6InR3Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJ6aCIsImRlc2NyaXB0aW9uIjoiVGFpd2FuZXNlIn0seyJuYW1lIjoidHdcdGluZGlnZW5vdXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGFpd2FuZXNlIChpbmRpZ2Vub3VzKSJ9LHsibmFtZSI6InR3XHRzYWlzaXlhdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoieHN5IiwiZGVzY3JpcHRpb24iOiJTYWlzaXlhdCAoVGFpd2FuKSJ9LHsibmFtZSI6InVhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ1ayIsImRlc2NyaXB0aW9uIjoiVWtyYWluaWFuIn0seyJuYW1lIjoidWFcdHBob25ldGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAocGhvbmV0aWMpIn0seyJuYW1lIjoidWFcdHR5cGV3cml0ZXIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVWtyYWluaWFuICh0eXBld3JpdGVyKSJ9LHsibmFtZSI6InVhXHR3aW5rZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAoV2luS2V5cykifSx7Im5hbWUiOiJ1YVx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAobGVnYWN5KSJ9LHsibmFtZSI6InVhXHRyc3R1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAoc3RhbmRhcmQgUlNUVSkifSx7Im5hbWUiOiJ1YVx0cnN0dV9ydSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChVa3JhaW5lLCBzdGFuZGFyZCBSU1RVKSJ9LHsibmFtZSI6InVhXHRob21vcGhvbmljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAoaG9tb3Bob25pYykifSx7Im5hbWUiOiJnYiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZW4iLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLKSJ9LHsibmFtZSI6ImdiXHRleHRkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBleHRlbmRlZCBXaW5LZXlzKSJ9LHsibmFtZSI6ImdiXHRpbnRsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImdiXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVUssIER2b3JhaykifSx7Im5hbWUiOiJnYlx0ZHZvcmFrdWtwIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBEdm9yYWsgd2l0aCBVSyBwdW5jdHVhdGlvbikifSx7Im5hbWUiOiJnYlx0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBNYWNpbnRvc2gpIn0seyJuYW1lIjoiZ2JcdG1hY19pbnRsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBNYWNpbnRvc2ggaW50ZXJuYXRpb25hbCkifSx7Im5hbWUiOiJnYlx0Y29sZW1hayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChVSywgQ29sZW1haykifSx7Im5hbWUiOiJ1eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXoiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIn0seyJuYW1lIjoidXpcdGxhdGluIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIChMYXRpbikifSx7Im5hbWUiOiJ2biIsInNob3J0X2Rlc2NyaXB0aW9uIjoidmkiLCJkZXNjcmlwdGlvbiI6IlZpZXRuYW1lc2UifSx7Im5hbWUiOiJrciIsInNob3J0X2Rlc2NyaXB0aW9uIjoia28iLCJkZXNjcmlwdGlvbiI6IktvcmVhbiJ9LHsibmFtZSI6ImtyXHRrcjEwNCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJLb3JlYW4gKDEwMS8xMDQga2V5IGNvbXBhdGlibGUpIn0seyJuYW1lIjoibmVjX3ZuZHIvanAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImphIiwiZGVzY3JpcHRpb24iOiJKYXBhbmVzZSAoUEMtOTh4eCBTZXJpZXMpIn0seyJuYW1lIjoiaWUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImllIiwiZGVzY3JpcHRpb24iOiJJcmlzaCJ9LHsibmFtZSI6ImllXHRDbG9HYWVsYWNoIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNsb0dhZWxhY2gifSx7Im5hbWUiOiJpZVx0VW5pY29kZUV4cGVydCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJcmlzaCAoVW5pY29kZUV4cGVydCkifSx7Im5hbWUiOiJpZVx0b2dhbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJPZ2hhbSJ9LHsibmFtZSI6ImllXHRvZ2FtX2lzNDM0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik9naGFtIChJUzQzNCkifSx7Im5hbWUiOiJwayIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKFBha2lzdGFuKSJ9LHsibmFtZSI6InBrXHR1cmQtY3J1bHAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVXJkdSAoUGFraXN0YW4sIENSVUxQKSJ9LHsibmFtZSI6InBrXHR1cmQtbmxhIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKFBha2lzdGFuLCBOTEEpIn0seyJuYW1lIjoicGtcdGFyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoUGFraXN0YW4pIn0seyJuYW1lIjoicGtcdHNuZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoic2QiLCJkZXNjcmlwdGlvbiI6IlNpbmRoaSJ9LHsibmFtZSI6Im12Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJkdiIsImRlc2NyaXB0aW9uIjoiRGhpdmVoaSJ9LHsibmFtZSI6InphIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoU291dGggQWZyaWNhKSJ9LHsibmFtZSI6ImVwbyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZW8iLCJkZXNjcmlwdGlvbiI6IkVzcGVyYW50byJ9LHsibmFtZSI6ImVwb1x0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVzcGVyYW50byAoZGlzcGxhY2VkIHNlbWljb2xvbiBhbmQgcXVvdGUsIG9ic29sZXRlKSJ9LHsibmFtZSI6Im5wIiwic2hvcnRfZGVzY3JpcHRpb24iOiJuZSIsImRlc2NyaXB0aW9uIjoiTmVwYWxpIn0seyJuYW1lIjoibmciLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChOaWdlcmlhKSJ9LHsibmFtZSI6Im5nXHRpZ2JvIiwic2hvcnRfZGVzY3JpcHRpb24iOiJpZyIsImRlc2NyaXB0aW9uIjoiSWdibyJ9LHsibmFtZSI6Im5nXHR5b3J1YmEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InlvIiwiZGVzY3JpcHRpb24iOiJZb3J1YmEifSx7Im5hbWUiOiJuZ1x0aGF1c2EiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhhIiwiZGVzY3JpcHRpb24iOiJIYXVzYSJ9LHsibmFtZSI6ImV0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJhbSIsImRlc2NyaXB0aW9uIjoiQW1oYXJpYyJ9LHsibmFtZSI6InNuIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ3byIsImRlc2NyaXB0aW9uIjoiV29sb2YifSx7Im5hbWUiOiJicmFpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJicmwiLCJkZXNjcmlwdGlvbiI6IkJyYWlsbGUifSx7Im5hbWUiOiJicmFpXHRsZWZ0X2hhbmQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQnJhaWxsZSAobGVmdCBoYW5kKSJ9LHsibmFtZSI6ImJyYWlcdHJpZ2h0X2hhbmQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQnJhaWxsZSAocmlnaHQgaGFuZCkifSx7Im5hbWUiOiJ0bSIsInNob3J0X2Rlc2NyaXB0aW9uIjoidGsiLCJkZXNjcmlwdGlvbiI6IlR1cmttZW4ifSx7Im5hbWUiOiJ0bVx0YWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlR1cmttZW4gKEFsdC1RKSJ9LHsibmFtZSI6Im1sIiwic2hvcnRfZGVzY3JpcHRpb24iOiJibSIsImRlc2NyaXB0aW9uIjoiQmFtYmFyYSJ9LHsibmFtZSI6Im1sXHRmci1vc3MiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKE1hbGksIGFsdGVybmF0aXZlKSJ9LHsibmFtZSI6Im1sXHR1cy1tYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChNYWxpLCBVUyBNYWNpbnRvc2gpIn0seyJuYW1lIjoibWxcdHVzLWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChNYWxpLCBVUyBpbnRlcm5hdGlvbmFsKSJ9LHsibmFtZSI6InR6Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJzdyIsImRlc2NyaXB0aW9uIjoiU3dhaGlsaSAoVGFuemFuaWEpIn0seyJuYW1lIjoia2UiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InN3IiwiZGVzY3JpcHRpb24iOiJTd2FoaWxpIChLZW55YSkifSx7Im5hbWUiOiJrZVx0a2lrIiwic2hvcnRfZGVzY3JpcHRpb24iOiJraSIsImRlc2NyaXB0aW9uIjoiS2lrdXl1In0seyJuYW1lIjoiYnciLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRuIiwiZGVzY3JpcHRpb24iOiJUc3dhbmEifSx7Im5hbWUiOiJwaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoicGgiLCJkZXNjcmlwdGlvbiI6IkZpbGlwaW5vIn0seyJuYW1lIjoicGhcdHF3ZXJ0eS1iYXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKFFXRVJUWSBCYXliYXlpbikifSx7Im5hbWUiOiJwaFx0Y2FwZXdlbGwtZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZpbGlwaW5vIChDYXBld2VsbC1Edm9yYWsgTGF0aW4pIn0seyJuYW1lIjoicGhcdGNhcGV3ZWxsLWR2b3Jhay1iYXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKENhcGV3ZWxsLUR2b3JhayBCYXliYXlpbikifSx7Im5hbWUiOiJwaFx0Y2FwZXdlbGwtcXdlcmYyazYiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKENhcGV3ZWxsLVFXRVJGIDIwMDYgTGF0aW4pIn0seyJuYW1lIjoicGhcdGNhcGV3ZWxsLXF3ZXJmMms2LWJheSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGaWxpcGlubyAoQ2FwZXdlbGwtUVdFUkYgMjAwNiBCYXliYXlpbikifSx7Im5hbWUiOiJwaFx0Y29sZW1hayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGaWxpcGlubyAoQ29sZW1hayBMYXRpbikifSx7Im5hbWUiOiJwaFx0Y29sZW1hay1iYXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKENvbGVtYWsgQmF5YmF5aW4pIn0seyJuYW1lIjoicGhcdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGaWxpcGlubyAoRHZvcmFrIExhdGluKSJ9LHsibmFtZSI6InBoXHRkdm9yYWstYmF5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZpbGlwaW5vIChEdm9yYWsgQmF5YmF5aW4pIn0seyJuYW1lIjoibWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Im1kIiwiZGVzY3JpcHRpb24iOiJNb2xkYXZpYW4ifSx7Im5hbWUiOiJtZFx0Z2FnIiwic2hvcnRfZGVzY3JpcHRpb24iOiJnYWciLCJkZXNjcmlwdGlvbiI6Ik1vbGRhdmlhbiAoR2FnYXV6KSJ9XQ==")); - this.sessions = JSON.parse(atob("W3sibmFtZSI6IkxYREUiLCJrZXkiOiJMWERFIiwiY29tbWVudCI6IkxYREUgLSBMaWdodHdlaWdodCBYMTEgZGVza3RvcCBlbnZpcm9ubWVudCJ9LHsibmFtZSI6Ik9wZW5ib3giLCJrZXkiOiJvcGVuYm94IiwiY29tbWVudCI6IkxvZyBpbiB1c2luZyB0aGUgT3BlbmJveCB3aW5kb3cgbWFuYWdlciAod2l0aG91dCBhIHNlc3Npb24gbWFuYWdlcikifSx7Im5hbWUiOiJUV00iLCJrZXkiOiJ0d20iLCJjb21tZW50IjoiVGhlIFRhYiBXaW5kb3cgTWFuYWdlciJ9LHsibmFtZSI6IlRpbnl3bSIsImtleSI6InRpbnl3bSIsImNvbW1lbnQiOiJSaWRpY3Vsb3VzbHkgdGlueSB3aW5kb3cgbWFuYWdlciJ9XQ")); - this.language = this.languages[0].name; - this.layout = this.layouts[0].name; - this.default_session = this.sessions[0].name; - this.layout = this.layouts[0].name; - this.num_users = this.users.length; - - if(typeof timeout === "number" && timeout > 0) { - if(typeof autoGuest === "boolean" && autoGuest) { - this.autologin_user = null; - this.autologin_guest = autoGuest; - } - - this.autologin_user = this.users[0].name; - this.autologin_timeout = timeout * 1000; - - setTimeout(function() { - if((typeof autoGuest === "boolean" && autoGuest) || this.autologin_user !== null) - window.autologin_timer_expired(); - }.bind(this), this.timed_login_delay); - } - - for(var i = 0; i <= this.users; i++) { - this.users[i].logged_in = Boolean(Math.floor(Math.random() * 2)); - this.users[i].session = this.sessions[Math.floor((Math.random() * this.sessions.length))].name; - } - } -} - -/** - * Deprecated method. - */ -LightDMMock.prototype.cancel_timed_login = function() { - window.logCall("cancel_timed_login", arguments); - window.deprecationNotifier("method", "lightdm.cancel_timed_login()", "lightdm.cancel_autologin()"); -}; - -/** - * Cancels the authentication of the autologin user. The older function - * lightdm.cancel_timed_login() has been deprecated. - */ -LightDMMock.prototype.cancel_autologin = function() { - window.logCall("cancel_autologin", arguments); - window.checkArguments(arguments, 0, []); - - this.autologin_user = null; - this.autologin_guest = false; - this.autologin_timeout = 0; -}; - -/** - * Deprecated method. - */ -LightDMMock.prototype.start_authentication = function() { - window.logCall("start_authentication", arguments); - window.deprecationNotifier("method", "lightdm.start_authentication()", "lightdm.authenticate(username)"); -}; - -/** - * Specifies the username of the user we'd like to start authenticating as. - * Note that if you call lightdm.authenticate with no argument, LightDM - * (via PAM) will issue a show_prompt() call to ask for the username. The - * older function lightdm.start_authentication() has been deprecated. - * - * @param {String} username [username to authenticate] - */ -LightDMMock.prototype.authenticate = function(username) { - window.logCall("authenticate", arguments); - window.checkArguments(arguments, 1, ["string"]); - - if(this.in_authentication) { - window.show_message("Already authenticating " + this.authentication_user, "error"); - return; - } - - var exists = false; - - for(var i = 0; i <= this.users.length -1; i++) { - if(this.users[i].name === username) - exists = true; - } - - if(!exists) { - window.show_message("Invalid username", "error"); - return; - } - - this.authentication_user = username; - this.in_authentication = true; - - window.show_prompt("Password:", "password"); -}; - -/** - * Authenticates as the guest user. - */ -LightDMMock.prototype.authenticate_as_guest = function() { - window.logCall("authenticate_as_guest", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.has_guest_account) - throw new IlligalUsageException("Guest accounts are turned off. Make sure you check the value of 'lightdm.has_guest_account' before calling this function."); - - if(this.in_authentication) { - window.show_message("Already authenticating" + this.authentication_user, "error"); - return; - } - - this.authentication_user = "guest"; - this.in_authentication = true; -}; - -/** - * When LightDM has prompted for input, provide the response to LightDM. The - * deprecated function was "provide_secret". This is still available for - * backwards compatibility, but authors of greeters should move - * to using lightdm.respond(). - * - * @param {String} text [the response to the challange, usually a password] - */ -LightDMMock.prototype.respond = function(text) { - window.logCall("respond", arguments); - window.checkArguments(arguments, 1, ["string"]); - - if(!this.in_authentication) - throw new IlligalUsageException("LightDM is currently not in the authentication phase. Make sure to call 'lightdm.authenticate(username)' before calling this function."); - - if(text === "password") { - this.is_authenticated = true; - window.authentication_complete(); - } else { - window.show_message("Invalid password", "error"); - } -}; - -/** - * Deprecated method. - */ -LightDMMock.prototype.provide_secret = function() { - window.logCall("provide_secret", arguments); - window.deprecationNotifier("method", "lightdm.provide_secret(text)", "lightdm.respond(text)"); -}; - -/** - * Cancels the authentication of any user currently in the - * process of authenticating. - */ -LightDMMock.prototype.cancel_authentication = function() { - window.logCall("cancel_authentication", arguments); - window.checkArguments(arguments, 0, []); - - this.authentication_user = null; - this.in_authentication = false; -}; - -/** - * Suspends the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.suspend = function() { - window.logCall("suspend", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_suspend) - throw new IlligalUsageException("LightDM cannot suspend the system. Make sure you check the value of 'lightdm.can_suspend' before calling this function."); - - window.alert("System suspended."); - document.location.reload(true); -}; - -/** - * Hibernates the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.hibernate = function() { - window.logCall("hibernate", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_hibernate) - throw new IlligalUsageException("LightDM cannot hibernate the system. Make sure you check the value of 'lightdm.can_hibernate' before calling this function."); - - window.alert("System hibernated."); - document.location.reload(true); -}; - -/** - * Shuts down the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.shutdown = function() { - window.logCall("shutdown", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_shutdown) - throw new IlligalUsageException("LightDM cannot shut down the system. Make sure you check the value of 'lightdm.can_shutdown' before calling this function."); - - window.alert("System shut down."); - document.location.reload(true); -}; - -/** - * Restarts the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.restart = function() { - window.logCall("restart", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_restart) - throw new IlligalUsageException("LightDM cannot restart the system. Make sure you check the value of 'lightdm.can_restart' before calling this function."); - - window.alert("System restarted."); - document.location.reload(true); -}; - -/** - * Will set the language for the current LightDM session. - * - * @param {String} lang [the language to change to] - */ -LightDMMock.prototype.set_language = function(lang) { - window.logCall("set_language", arguments); - window.checkArguments(arguments, 1, ["string"]); - - this.language = lang; -}; - -/** - * Deprecated method. - */ -LightDMMock.prototype.login = function() { - window.logCall("login", arguments); - window.deprecationNotifier("method", "lightdm.login()", "lightdm.start_session_sync(session)"); -}; - -/** - * Once LightDM has successfully authenticated the user, start the user's - * session by calling this function. "session" is the authenticated user's - * session. If no session is passed, start the authenticated user with the - * system default session. The older function lightdm.login(user, session) - * has been deprecated. - * - * @param {String} session [the session name to start] - */ -LightDMMock.prototype.start_session_sync = function(session) { - window.logCall("start_session_sync", arguments); - window.checkArguments(arguments, 1, ["string"]); - - if(!this.in_authentication) - throw new IlligalUsageException("LightDM is currently not in the authentication phase. Make sure to call 'lightdm.authenticate(username)' before calling this function."); - - if(!this.is_authenticated) - throw new IlligalUsageException("LightDM has no authenticated users to log in. Make sure to call 'lightdm.respond()' before calling this function."); - - window.alert("LightDM has started a " + session + " session for " + this.authentication_user); - document.location.reload(true); -}; - -/** - * Returns the value of a named hint provided by LightDM. - * - * @param {String} hint_name [name of the hint to show] - */ -LightDMMock.prototype.get_hint = function(hint_name) { - window.logCall("get_hint", arguments); - window.checkArguments(arguments, 1, ["string"]); - - // @fixme: I have no clue how to simulate this... -}; - - -/****************************************************************************** - * Throwables * -*******************************************************************************/ - -/** - * Throwable IlligalUsageException - * - * @param {string} message [description of illigal usage] - */ -function IlligalUsageException(message) { - this.name = "IlligalUsageException"; - this.message = message; - this.toString = function() { - return "[" + this.name + "] " + this.message; - }; -} - -/** - * Throwable DeprecationException - * - * @param {String} type [method||property] - * @param {String} depricated [deprecated method or property name] - * @param {String} alternative [alternative method or property to use] - */ -function DeprecationException(type, deprecated, alternative) { - this.name = "DeprecationException"; - this.message = "The " + type + " '" + deprecated + "' is deprecated. Consider using '" + alternative + "' instead."; - this.toString = function() { - return "[" + this.name + "] " + this.message; - }; -} - -/** - * Throwable IncompatibleArgumentCountException - * - * @param {Number} expected [expected length of arguments] - * @param {Number} received [found length of arguments] - */ -function IncompatibleArgumentCountException(expected, received) { - this.name = "IncompatibleArgumentCountException"; - this.message = "Incorrect number of arguments in function call. Expected " + expected + ", found " + received; - this.toString = function() { - return "[" + this.name + "] " + this.message; - }; -} - -/** - * Throwable IncompatibleArgumentTypesException - * - * @param {Number} type [argument number (non-zero)] - * @param {String} expected [expected type] - * @param {String} received [found type] - */ -function IncompatibleArgumentTypesException(number, expected, received) { - this.name = "IncompatibleArgumentTypesException"; - this.message = "Argument " + number + " is of a wrong type. Expected '" + expected + "', found '" + received + "'"; - this.toString = function() { - return "[" + this.name + "] " + this.message; - }; -} - - -/****************************************************************************** - * Helpers * -*******************************************************************************/ - -/** - * global helper deprecationNotifier - * throws ~balls~ errors at users who use deprecated methods and properties. - * - * @param {String} type [method||property] - * @param {String} depricated [deprecated method or property name] - * @param {String} alternative [alternative method or property to use] - * - * @throws {DeprecationException} - */ -window.deprecationNotifier = function(type, deprecated, alternative) { - throw new DeprecationException(type, deprecated, alternative); -}; - -/** - * global helper checkArguments - * throws ~tables~ errors at users who call methods - * with erroneous arguments. - * - * @param {Array} args [the arguments passed to the original method] - * @param {Number} length [the expected amount of arguments] - * @param {Arrray} types [the expected types of the arguments] - * - * @throws {IncompatibleArgumentTypesException} - */ -window.checkArguments = function(args, length, types) { - if(args.length !== length) - throw new IncompatibleArgumentCountException(length, args.length); - - for(var i = 1; i <= types.length; i++) { - if(typeof args[i-1] !== types[i-1]) - throw new IncompatibleArgumentTypesException(i, types[i-1], typeof args[i-1]); - } -}; - -/** - * global helper logCall - * logs a function call with the arguments provided to help with debugging a - * lightdm js script. - * - * @param {String} name [called function name] - * @param {Array} args [called function arguments] - * - * @return {window.console.info} - */ -window.logCall = function(name, args) { - var argv = []; - - if(args !== undefined && args.length !== 0) { - for(var i = 0; i <= args.length; i++) { - if(args[i] !== undefined) - argv.push({type: typeof args[i], value: args[i]}); - } - } - - if(argv.length > 0) - return window.console.info("[lightdm." + name + "] called with " + argv.length + " argument(s)", argv); - - return window.console.info("[lightdm." + name + "] called with 0 arguments"); -}; - -/** - * global helper checkForUpdate - * compares curentVersion with the tag name of GitHub's latest release and - * prompts the user to download a new version if it is available. - * - * @param {String} currentVersion [the current tag version] - */ -window.checkForUpdate = function(currentVersion) { - var request = new XMLHttpRequest(); - - request.onreadystatechange = function() { - if(request.readyState === XMLHttpRequest.DONE) { - switch(request.status) { - case 200: - try { - var latest = JSON.parse(request.responseText).tag_name; - - if(currentVersion !== latest) { - window.console.warn("You are using an outdated version of LightDMMock. Please download the new version from https://github.com/CytoDev/LightDMMock/releases/" + latest); - } - } catch(e) { - window.console.error(e.toString()); - window.console.warn("Could not check for new version of LightDMMock. Please check for a new version manually by visiting https://github.com/CytoDev/LightDMMock/releases/latest"); - } - break; - case 404: - window.console.warn("Could not check for new version of LightDMMock. Please check for a new version manually by visiting https://github.com/CytoDev/LightDMMock/releases/latest"); - break; - default: - break; - } - } - }; - - request.open("GET", "https://api.github.com/repos/CytoDev/LightDMMock/releases/latest", true); - request.send(); -}; - - -/****************************************************************************** - * Object.watch shim * -*******************************************************************************/ - -/* - * object.watch polyfill - * - * 2012-04-03 - * - * By Eli Grey, http://eligrey.com - * Public Domain. - * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - */ - -// object.watch -if (!Object.prototype.watch) { - Object.defineProperty(Object.prototype, "watch", { - enumerable: false, - configurable: true, - writable: false, - value: function(prop, handler) { - var oldval = this[prop], - newval = oldval, - getter = function () { - return newval; - }, - setter = function (val) { - oldval = newval; - newval = handler.call(this, prop, oldval, val); - return newval; - }; - - if(delete this[prop]) { // can't watch constants - Object.defineProperty(this, prop, { - get: getter, - set: setter, - enumerable: true, - configurable: true - }); - } - } - }); -} - -// object.unwatch -if(!Object.prototype.unwatch) { - Object.defineProperty(Object.prototype, "unwatch", { - enumerable: false, - configurable: true, - writable: false, - value: function (prop) { - var val = this[prop]; - delete this[prop]; // remove accessors - this[prop] = val; - } - }); -} - -LightDMMock.watch('default_language', function() { - window.deprecationNotifier("property", "default_language", "lightdm.language"); -}); - -LightDMMock.watch('default_layout', function() { - window.deprecationNotifier("property", "default_layout", "lightdm.layout"); -}); - -LightDMMock.watch('timed_login_user', function() { - window.deprecationNotifier("property", "timed_login_user", "lightdm.autologin_user"); -}); - -LightDMMock.watch('timed_login_delay', function() { - window.deprecationNotifier("property", "timed_login_delay", "lightdm.autologin_timeout"); -}); - -if (module) { - module.exports = LightDMMock; -} diff --git a/readme.md b/readme.md index e0934af..02fda0c 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@ #LightDMMock -A LightDM Mock that is tightly based on the source C code of [Antergos](https://github.com/Antergos)' [lightdm-webkit2-greeter](https://github.com/Antergos/lightdm-webkit2-greeter). Please note that the deprecation errors are intrusive for a reason. +A LightDM Mock that is tightly based on the source [C code](https://github.com/Antergos/web-greeter/blob/before-python/src/webkit2-extension.c) of [Antergos](https://github.com/Antergos)' [lightdm-webkit2-greeter](https://github.com/Antergos/lightdm-webkit2-greeter). Please note that the deprecation errors are intrusive for a reason. ##Usage: [1]. Clone the repo @@ -18,6 +18,9 @@ if(!("lightdm" in window)) { } ```` +##Note: +If you plan on using the `.face` files in the mock you have to include the path to `LightDMMock/src`. The `.face` files linked in `users.json` are absolute links to `/home/[username/.face`. + ##Parameters of LightDMMock() ####autofill > **_`boolean`_**
diff --git a/src/LightDMMock.js b/src/LightDMMock.js new file mode 100644 index 0000000..be489e6 --- /dev/null +++ b/src/LightDMMock.js @@ -0,0 +1,689 @@ +/** + * LightDMMock "class" + * + * @author Roel Walraven + * + * A LightDM Mock that is tightly based on the source C code of + * Antergos' lightdm-webkit2-greeter. Please note that the deprecation errors + * are intrusive for a reason. + * + * Usage: + * Include the file in your theme that needs mocking + * + * Create a new instance of LightDMMock + * if(!("lightdm" in window)) { + * var LightDMMock = LightDMMock || {}; + * window.lightdm = new LightDMMock(autofill, timeout, autoGuest); + * } + * + * @param {boolean} autofill [wether or not the arrays for users, languages, + * layouts, and sessions need to be filled with mock + * data. I advise to test both to make your theme + * less prone to crashing.] + * @param {number} timeout [Value to use for simulated autologin (this value + * is in seconds).] + * @param {boolean} autoGuest [Wether or not to simulate automatic guest login. + * This will also enable a guest account + * in lightdm.has_guest_account] + */ +"use strict"; + +function LightDMMock(autofill, timeout, autoGuest) { + window.checkForUpdate("v1.0.0"); + + // see + + this.authentication_user = null; + this.autologin_guest = false; + this.autologin_timeout = 0; + this.autologin_user = null; + this.can_hibernate = false; + this.can_restart = false; + this.can_shutdown = false; + this.can_suspend = false; + this.default_session = null; + this.has_guest_account = false; + this.hide_users = false; + this.hostname = null; + this.in_authentication = false; + this.is_authenticated = false; + this.language = null; + this.languages = null; + this.layout = null; + this.layouts = null; + this.lock_hint = false; + this.num_users = 0; + this.select_guest_hint = null; + this.select_user_hint = null; + this.sessions = null; + this.users = null; + this.default_language = null; // Deprecated + this.default_layout = null; // Deprecated + this.select_guest = null; // Deprecated + this.select_user = null; // Deprecated + this.timed_login_delay = null; // Deprecated + this.timed_login_user = null; // Deprecated + + if(typeof autofill === "boolean" && autofill) { + var me = document.querySelector("script[src$=\"LightDMMock.js\"]"); + + if(!(me instanceof HTMLElement)) + return window.console.error("Could not find my script element."); + + var includePath = me.src; + + if(includePath === undefined) + return window.console.error("Could not find my src attribute."); + + includePath = includePath.substr(0, includePath.lastIndexOf("/")); + + var asyncLoadEnd = function(that) { + that.default_session = that.sessions[0].name; + that.language = that.languages[0].name; + that.layout = that.layouts[0].name; + that.num_users = that.users.length; + + if(typeof timeout === "number" && timeout > 0) { + if(typeof autoGuest === "boolean" && autoGuest) { + that.autologin_user = null; + that.autologin_guest = autoGuest; + } + + that.autologin_user = that.users[0].username; + that.autologin_timeout = timeout * 1000; + + // @fixme: am I deprecated as well? + setTimeout(function() { + if((typeof autoGuest === "boolean" && autoGuest) || that.autologin_user !== null) + window.autologin_timer_expired(); + }.bind(that), that.timed_login_delay); + } + + for(var i = 0; i <= that.users; i++) { + that.users[i].logged_in = Boolean(Math.floor(Math.random() * 2)); + that.users[i].session = that.sessions[Math.floor((Math.random() * that.sessions.length))].name; + } + }; + + // see + window.loadJSON(includePath + "/json/users.json", function(that) { + if(this.status !== 200) + return window.console.warn("users.json did not load correctly."); + + that.users = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + + // see + window.loadJSON(includePath + "/json/languages.json", function(that) { + if(this.status !== 200) + return window.console.warn("languages.json did not load correctly."); + + that.languages = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + + // see + window.loadJSON(includePath + "/json/layouts.json", function(that) { + if(this.status !== 200) + return window.console.warn("layouts.json did not load correctly."); + + that.layouts = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + + // see + window.loadJSON(includePath + "/json/sessions.json", function(that) { + if(this.status !== 200) + return window.console.warn("sessions.json did not load correctly."); + + that.sessions = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + } +} + + +/****************************************************************************** + * Methods * + ******************************************************************************/ + +// see + +/** + * Specifies the username of the user we'd like to start authenticating as. + * Note that if you call lightdm.authenticate with no argument, LightDM + * (via PAM) will issue a show_prompt() call to ask for the username. The + * older function lightdm.start_authentication() has been deprecated. + * + * @param {String} username [username to authenticate] + */ +LightDMMock.prototype.authenticate = function(username) { + window.logCall("authenticate", arguments); + window.checkArguments(arguments, 1, ["string"]); + + if(this.in_authentication) { + window.show_message("Already authenticating " + this.authentication_user, "error"); + return; + } + + var exists = false; + + for(var i = 0; i <= this.users.length -1; i++) { + if(this.users[i].username === username) + exists = true; + } + + if(!exists) { + window.show_message("Invalid username", "error"); + return; + } + + this.authentication_user = username; + this.in_authentication = true; + + window.show_prompt("Password:", "password"); +}; + +/** + * Authenticates as the guest user. + */ +LightDMMock.prototype.authenticate_as_guest = function() { + window.logCall("authenticate_as_guest", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.has_guest_account) + throw new IlligalUsageException("Guest accounts are turned off. Make sure you check the value of 'lightdm.has_guest_account' before calling this function."); + + if(this.in_authentication) { + window.show_message("Already authenticating" + this.authentication_user, "error"); + return; + } + + this.authentication_user = "guest"; + this.in_authentication = true; +}; + +/** + * Cancels the authentication of any user currently in the + * process of authenticating. + */ +LightDMMock.prototype.cancel_authentication = function() { + window.logCall("cancel_authentication", arguments); + window.checkArguments(arguments, 0, []); + + this.authentication_user = null; + this.in_authentication = false; +}; + +/** + * Cancels the authentication of the autologin user. The older function + * lightdm.cancel_timed_login() has been deprecated. + */ +LightDMMock.prototype.cancel_autologin = function() { + window.logCall("cancel_autologin", arguments); + window.checkArguments(arguments, 0, []); + + this.autologin_user = null; + this.autologin_guest = false; + this.autologin_timeout = 0; +}; + +/** + * Returns the value of a named hint provided by LightDM. + * + * @param {String} hint_name [name of the hint to show] + */ +LightDMMock.prototype.get_hint = function(hint_name) { + window.logCall("get_hint", arguments); + window.checkArguments(arguments, 1, ["string"]); + + // @fixme: I have no clue how to simulate this... +}; + +/** + * Hibernates the system, if the greeter has the authority to do so. + */ +LightDMMock.prototype.hibernate = function() { + window.logCall("hibernate", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.can_hibernate) + throw new IlligalUsageException("LightDM cannot hibernate the system. Make sure you check the value of 'lightdm.can_hibernate' before calling this function."); + + window.alert("System hibernated."); + document.location.reload(true); +}; + +/** + * When LightDM has prompted for input, provide the response to LightDM. The + * deprecated function was "provide_secret". This is still available for + * backwards compatibility, but authors of greeters should move + * to using lightdm.respond(). + * + * @param {String} text [the response to the challange, usually a password] + */ +LightDMMock.prototype.respond = function(text) { + window.logCall("respond", arguments); + window.checkArguments(arguments, 1, ["string"]); + + if(!this.in_authentication) + throw new IlligalUsageException("LightDM is currently not in the authentication phase. Make sure to call 'lightdm.authenticate(username)' before calling this function."); + + if(text === "password") { + this.is_authenticated = true; + window.authentication_complete(); + } else { + window.show_message("Invalid password", "error"); + } +}; + +/** + * Restarts the system, if the greeter has the authority to do so. + */ +LightDMMock.prototype.restart = function() { + window.logCall("restart", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.can_restart) + throw new IlligalUsageException("LightDM cannot restart the system. Make sure you check the value of 'lightdm.can_restart' before calling this function."); + + window.alert("System restarted."); + document.location.reload(true); +}; + +/** + * Will set the language for the current LightDM session. + * + * @param {String} lang [the language to change to] + */ +LightDMMock.prototype.set_language = function(lang) { + window.logCall("set_language", arguments); + window.checkArguments(arguments, 1, ["string"]); + + this.language = lang; +}; + +/** + * Shuts down the system, if the greeter has the authority to do so. + */ +LightDMMock.prototype.shutdown = function() { + window.logCall("shutdown", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.can_shutdown) + throw new IlligalUsageException("LightDM cannot shut down the system. Make sure you check the value of 'lightdm.can_shutdown' before calling this function."); + + window.alert("System shut down."); + document.location.reload(true); +}; + +/** + * Once LightDM has successfully authenticated the user, start the user's + * session by calling this function. "session" is the authenticated user's + * session. If no session is passed, start the authenticated user with the + * system default session. The older function lightdm.login(user, session) + * has been deprecated. + * + * @param {String} session [the session name to start] + */ +LightDMMock.prototype.start_session = function(session) { + window.logCall("start_session_sync", arguments); + window.checkArguments(arguments, 1, ["string"]); + + if(!this.in_authentication) + throw new IlligalUsageException("LightDM is currently not in the authentication phase. Make sure to call 'lightdm.authenticate(username)' before calling this function."); + + if(!this.is_authenticated) + throw new IlligalUsageException("LightDM has no authenticated users to log in. Make sure to call 'lightdm.respond()' before calling this function."); + + window.alert("LightDM has started a " + session + " session for " + this.authentication_user); + document.location.reload(true); +}; + +/** + * Suspends the system, if the greeter has the authority to do so. + */ +LightDMMock.prototype.suspend = function() { + window.logCall("suspend", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.can_suspend) + throw new IlligalUsageException("LightDM cannot suspend the system. Make sure you check the value of 'lightdm.can_suspend' before calling this function."); + + window.alert("System suspended."); + document.location.reload(true); +}; + + +/****************************************************************************** + * Deprecated methods * + ******************************************************************************/ + +LightDMMock.prototype.cancel_timed_login = function() { + window.logCall("cancel_timed_login", arguments); + window.deprecationNotifier("method", "lightdm.cancel_timed_login()", "lightdm.cancel_autologin()"); +}; + +LightDMMock.prototype.start_authentication = function() { + window.logCall("start_authentication", arguments); + window.deprecationNotifier("method", "lightdm.start_authentication()", "lightdm.authenticate(username)"); +}; + +LightDMMock.prototype.login = function() { + window.logCall("login", arguments); + window.deprecationNotifier("method", "lightdm.login()", "lightdm.start_session(session)"); +}; + +LightDMMock.prototype.provide_secret = function() { + window.logCall("provide_secret", arguments); + window.deprecationNotifier("method", "lightdm.provide_secret(text)", "lightdm.respond(text)"); +}; + +LightDMMock.prototype.start_session_sync = function() { + window.logCall("login", arguments); + window.deprecationNotifier("method", "lightdm.start_session_sync(session)", "lightdm.start_session(session)"); +}; + + +/****************************************************************************** + * Throwables * + ******************************************************************************/ + +/** + * Throwable IlligalUsageException + * + * @param {string} message [description of illigal usage] + */ +function IlligalUsageException(message) { + this.name = "IlligalUsageException"; + this.message = message; + this.toString = function() { + return "[" + this.name + "] " + this.message; + }; +} + +/** + * Throwable DeprecationException + * + * @param {String} type [method||property] + * @param {String} depricated [deprecated method or property name] + * @param {String} alternative [alternative method or property to use] + */ +function DeprecationException(type, deprecated, alternative) { + this.name = "DeprecationException"; + this.message = "The " + type + " '" + deprecated + "' is deprecated. Consider using '" + alternative + "' instead."; + this.toString = function() { + return "[" + this.name + "] " + this.message; + }; +} + +/** + * Throwable IncompatibleArgumentCountException + * + * @param {Number} expected [expected length of arguments] + * @param {Number} received [found length of arguments] + */ +function IncompatibleArgumentCountException(expected, received) { + this.name = "IncompatibleArgumentCountException"; + this.message = "Incorrect number of arguments in function call. Expected " + expected + ", found " + received; + this.toString = function() { + return "[" + this.name + "] " + this.message; + }; +} + +/** + * Throwable IncompatibleArgumentTypesException + * + * @param {Number} type [argument number (non-zero)] + * @param {String} expected [expected type] + * @param {String} received [found type] + */ +function IncompatibleArgumentTypesException(number, expected, received) { + this.name = "IncompatibleArgumentTypesException"; + this.message = "Argument " + number + " is of a wrong type. Expected '" + expected + "', found '" + received + "'"; + this.toString = function() { + return "[" + this.name + "] " + this.message; + }; +} + + +/****************************************************************************** + * Helpers * + ******************************************************************************/ + +/** + * global helper deprecationNotifier + * throws ~balls~ errors at users who use deprecated methods and properties. + * + * @param {String} type [method||property] + * @param {String} depricated [deprecated method or property name] + * @param {String} alternative [alternative method or property to use] + * + * @throws {DeprecationException} + */ +window.deprecationNotifier = function(type, deprecated, alternative) { + throw new DeprecationException(type, deprecated, alternative); +}; + +/** + * global helper checkArguments + * throws ~tables~ errors at users who call methods + * with erroneous arguments. + * + * @param {Array} args [the arguments passed to the original method] + * @param {Number} length [the expected amount of arguments] + * @param {Arrray} types [the expected types of the arguments] + * + * @throws {IncompatibleArgumentTypesException} + */ +window.checkArguments = function(args, length, types) { + if(args.length !== length) + throw new IncompatibleArgumentCountException(length, args.length); + + for(var i = 1; i <= types.length; i++) { + if(typeof args[i-1] !== types[i-1]) + throw new IncompatibleArgumentTypesException(i, types[i-1], typeof args[i-1]); + } +}; + +/** + * global helper logCall + * logs a function call with the arguments provided to help with debugging a + * lightdm js script. + * + * @param {String} name [called function name] + * @param {Array} args [called function arguments] + * + * @return {window.console.info} + */ +window.logCall = function(name, args) { + var argv = []; + + if(args !== undefined && args.length !== 0) { + for(var i = 0; i <= args.length; i++) { + if(args[i] !== undefined) + argv.push({type: typeof args[i], value: args[i]}); + } + } + + if(argv.length > 0) + return window.console.info("[lightdm." + name + "] called with " + argv.length + " argument(s)", argv); + + return window.console.info("[lightdm." + name + "] called with 0 arguments"); +}; + +/** + * global helper checkForUpdate + * compares curentVersion with the tag name of GitHub's latest release and + * prompts the user to download a new version if it is available. + * + * @param {String} currentVersion [the current tag version] + */ +window.checkForUpdate = function(currentVersion) { + var request = new XMLHttpRequest(); + + request.onreadystatechange = function() { + if(request.readyState === XMLHttpRequest.DONE) { + switch(request.status) { + case 200: + try { + var latest; + + if(request.responseText !== undefined) + latest = JSON.parse(request.responseText).tag_name; + + if(currentVersion !== latest) + window.console.warn("You are using an outdated version of LightDMMock. Please download the new version from https://github.com/CytoDev/LightDMMock/releases/" + latest); + } catch(e) { + window.console.error(e.toString()); + window.console.warn("Could not check for new version of LightDMMock. Please check for a new version manually by visiting https://github.com/CytoDev/LightDMMock/releases/latest"); + } + break; + case 404: + window.console.warn("Could not check for new version of LightDMMock. Please check for a new version manually by visiting https://github.com/CytoDev/LightDMMock/releases/latest"); + break; + default: + break; + } + } + }; + + request.open("GET", "https://api.github.com/repos/CytoDev/LightDMMock/releases/latest", true); + request.send(); +}; + +/** + * global helper loadJSON + * Loads JSON from a path. Removes the need to b64 encode them in this file. + * + * @param {String} url [path to JSON file] + * @param {Function} callback [callback function] + */ +window.loadJSON = function(url, callback) { + var request = new XMLHttpRequest(); + + var onSuccess = function() { + this.callback.apply(request, request.arguments); + }; + + var onFailure = function() { + window.console.error(this.statusText); + }; + + request.callback = callback; + request.arguments = Array.prototype.slice.call(arguments, 2); + request.onload = onSuccess; + request.onerror = onFailure; + + request.open("get", url, true); + request.send(null); +}; + + +/****************************************************************************** + * Object.watch shim * + ******************************************************************************/ + +/* + * object.watch polyfill + * + * 2012-04-03 + * + * By Eli Grey, http://eligrey.com + * Public Domain. + * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + */ + +// object.watch +if (!Object.prototype.watch) { + Object.defineProperty(Object.prototype, "watch", { + enumerable: false, + configurable: true, + writable: false, + value: function(prop, handler) { + var oldval = this[prop], + newval = oldval, + getter = function () { + return newval; + }, + setter = function (val) { + oldval = newval; + newval = handler.call(this, prop, oldval, val); + return newval; + }; + + if(delete this[prop]) { // can't watch constants + Object.defineProperty(this, prop, { + get: getter, + set: setter, + enumerable: true, + configurable: true + }); + } + } + }); +} + +// object.unwatch +if(!Object.prototype.unwatch) { + Object.defineProperty(Object.prototype, "unwatch", { + enumerable: false, + configurable: true, + writable: false, + value: function (prop) { + var val = this[prop]; + delete this[prop]; // remove accessors + this[prop] = val; + } + }); +} + + +/****************************************************************************** + * Deprecated properties * + ******************************************************************************/ + +LightDMMock.watch('default_language', function() { + window.deprecationNotifier("property", "default_language", "lightdm.language"); +}); + +LightDMMock.watch('default_layout', function() { + window.deprecationNotifier("property", "default_layout", "lightdm.layout"); +}); + +LightDMMock.watch('select_guest', function() { + window.deprecationNotifier("property", "select_guest", "lightdm.select_guest_hint"); +}); + +LightDMMock.watch('select_user', function() { + window.deprecationNotifier("property", "select_user", "lightdm.select_user_hint"); +}); + +LightDMMock.watch('timed_login_user', function() { + window.deprecationNotifier("property", "timed_login_user", "lightdm.autologin_user"); +}); + +LightDMMock.watch('timed_login_delay', function() { + window.deprecationNotifier("property", "timed_login_delay", "lightdm.autologin_timeout"); +}); + + +/****************************************************************************** + * Module loading * + ******************************************************************************/ + +/* jshint node : true */ + +if(typeof module !== "undefined" && module.exports) + module.exports = LightDMMock; + +/* jshint node : false */ diff --git a/mock/basileusalex/.face b/src/home/basileusalex/.face similarity index 100% rename from mock/basileusalex/.face rename to src/home/basileusalex/.face diff --git a/mock/chairmanzedong/.face b/src/home/chairmanzedong/.face similarity index 100% rename from mock/chairmanzedong/.face rename to src/home/chairmanzedong/.face diff --git a/mock/cristocolombo/.face b/src/home/cristocolombo/.face similarity index 100% rename from mock/cristocolombo/.face rename to src/home/cristocolombo/.face diff --git a/mock/gorbachev/.face b/src/home/gorbachev/.face similarity index 100% rename from mock/gorbachev/.face rename to src/home/gorbachev/.face diff --git a/mock/gustav2/.face b/src/home/gustav2/.face similarity index 100% rename from mock/gustav2/.face rename to src/home/gustav2/.face diff --git a/mock/honourablewinston/.face b/src/home/honourablewinston/.face similarity index 100% rename from mock/honourablewinston/.face rename to src/home/honourablewinston/.face diff --git a/mock/imperatoraugustus/.face b/src/home/imperatoraugustus/.face similarity index 100% rename from mock/imperatoraugustus/.face rename to src/home/imperatoraugustus/.face diff --git a/mock/jackkennedy/.face b/src/home/jackkennedy/.face similarity index 100% rename from mock/jackkennedy/.face rename to src/home/jackkennedy/.face diff --git a/mock/khagantemujin/.face b/src/home/khagantemujin/.face similarity index 100% rename from mock/khagantemujin/.face rename to src/home/khagantemujin/.face diff --git a/mock/mehmedisani/.face b/src/home/mehmedisani/.face similarity index 100% rename from mock/mehmedisani/.face rename to src/home/mehmedisani/.face diff --git a/mock/meijitaitei/.face b/src/home/meijitaitei/.face similarity index 100% rename from mock/meijitaitei/.face rename to src/home/meijitaitei/.face diff --git a/mock/napoleonib/.face b/src/home/napoleonib/.face similarity index 100% rename from mock/napoleonib/.face rename to src/home/napoleonib/.face diff --git a/mock/peteralexeyevich/.face b/src/home/peteralexeyevich/.face similarity index 100% rename from mock/peteralexeyevich/.face rename to src/home/peteralexeyevich/.face diff --git a/mock/redthorvald/.face b/src/home/redthorvald/.face similarity index 100% rename from mock/redthorvald/.face rename to src/home/redthorvald/.face diff --git a/mock/silentwill/.face b/src/home/silentwill/.face similarity index 100% rename from mock/silentwill/.face rename to src/home/silentwill/.face diff --git a/mock/wilhelm1/.face b/src/home/wilhelm1/.face similarity index 100% rename from mock/wilhelm1/.face rename to src/home/wilhelm1/.face diff --git a/src/json/languages.json b/src/json/languages.json new file mode 100644 index 0000000..cb9946a --- /dev/null +++ b/src/json/languages.json @@ -0,0 +1,7 @@ +[ + { + "name":"English", + "code":"en", + "territory":null + } +] diff --git a/src/json/layouts.json b/src/json/layouts.json new file mode 100644 index 0000000..c7d2c90 --- /dev/null +++ b/src/json/layouts.json @@ -0,0 +1,1999 @@ +[ + { + "name" : "us", + "short_description" : "en", + "description" : "English (US)" + }, { + "name" : "us\tchr", + "short_description" : "chr", + "description" : "Cherokee" + }, { + "name" : "us\teuro", + "short_description" : "", + "description" : "English (US, with euro on 5)" + }, { + "name" : "us\tintl", + "short_description" : "", + "description" : "English (US, international with dead keys)" + }, { + "name" : "us\talt-intl", + "short_description" : "", + "description" : "English (US, alternative international)" + }, { + "name" : "us\tcolemak", + "short_description" : "", + "description" : "English (Colemak)" + }, { + "name" : "us\tdvorak", + "short_description" : "", + "description" : "English (Dvorak)" + }, { + "name" : "us\tdvorak-intl", + "short_description" : "", + "description" : "English (Dvorak, international with dead keys)" + }, { + "name" : "us\tdvorak-alt-intl", + "short_description" : "", + "description" : "English (Dvorak alternative international no dead keys)" + }, { + "name" : "us\tdvorak-l", + "short_description" : "", + "description" : "English (left handed Dvorak)" + }, { + "name" : "us\tdvorak-r", + "short_description" : "", + "description" : "English (right handed Dvorak)" + }, { + "name" : "us\tdvorak-classic", + "short_description" : "", + "description" : "English (classic Dvorak)" + }, { + "name" : "us\tdvp", + "short_description" : "", + "description" : "English (programmer Dvorak)" + }, { + "name" : "us\trus", + "short_description" : "ru", + "description" : "Russian (US, phonetic)" + }, { + "name" : "us\tmac", + "short_description" : "", + "description" : "English (Macintosh)" + }, { + "name" : "us\taltgr-intl", + "short_description" : "", + "description" : "English (international AltGr dead keys)" + }, { + "name" : "us\tolpc2", + "short_description" : "", + "description" : "English (the divide/multiply keys toggle the layout)" + }, { + "name" : "us\thbs", + "short_description" : "", + "description" : "Serbo-Croatian (US)" + }, { + "name" : "us\tworkman", + "short_description" : "", + "description" : "English (Workman)" + }, { + "name" : "us\tworkman-intl", + "short_description" : "", + "description" : "English (Workman, international with dead keys)" + }, { + "name" : "af", + "short_description" : "fa", + "description" : "Afghani" + }, { + "name" : "af\tps", + "short_description" : "ps", + "description" : "Pashto" + }, { + "name" : "af\tuz", + "short_description" : "uz", + "description" : "Uzbek (Afghanistan)" + }, { + "name" : "af\tolpc-ps", + "short_description" : "ps", + "description" : "Pashto (Afghanistan, OLPC)" + }, { + "name" : "af\tfa-olpc", + "short_description" : "fa", + "description" : "Persian (Afghanistan, Dari OLPC)" + }, { + "name" : "af\tuz-olpc", + "short_description" : "uz", + "description" : "Uzbek (Afghanistan, OLPC)" + }, { + "name" : "ara", + "short_description" : "ar", + "description" : "Arabic" + }, { + "name" : "ara\tazerty", + "short_description" : "", + "description" : "Arabic (azerty)" + }, { + "name" : "ara\tazerty_digits", + "short_description" : "", + "description" : "Arabic (azerty/digits)" + }, { + "name" : "ara\tdigits", + "short_description" : "", + "description" : "Arabic (digits)" + }, { + "name" : "ara\tqwerty", + "short_description" : "", + "description" : "Arabic (qwerty)" + }, { + "name" : "ara\tqwerty_digits", + "short_description" : "", + "description" : "Arabic (qwerty/digits)" + }, { + "name" : "ara\tbuckwalter", + "short_description" : "", + "description" : "Arabic (Buckwalter)" + }, { + "name" : "al", + "short_description" : "sq", + "description" : "Albanian" + }, { + "name" : "am", + "short_description" : "hy", + "description" : "Armenian" + }, { + "name" : "am\tphonetic", + "short_description" : "", + "description" : "Armenian (phonetic)" + }, { + "name" : "am\tphonetic-alt", + "short_description" : "", + "description" : "Armenian (alternative phonetic)" + }, { + "name" : "am\teastern", + "short_description" : "", + "description" : "Armenian (eastern)" + }, { + "name" : "am\twestern", + "short_description" : "", + "description" : "Armenian (western)" + }, { + "name" : "am\teastern-alt", + "short_description" : "", + "description" : "Armenian (alternative eastern)" + }, { + "name" : "at", + "short_description" : "de", + "description" : "German (Austria)" + }, { + "name" : "at\tnodeadkeys", + "short_description" : "", + "description" : "German (Austria, eliminate dead keys)" + }, { + "name" : "at\tsundeadkeys", + "short_description" : "", + "description" : "German (Austria, Sun dead keys)" + }, { + "name" : "at\tmac", + "short_description" : "", + "description" : "German (Austria, Macintosh)" + }, { + "name" : "az", + "short_description" : "az", + "description" : "Azerbaijani" + }, { + "name" : "az\tcyrillic", + "short_description" : "", + "description" : "Azerbaijani (Cyrillic)" + }, { + "name" : "by", + "short_description" : "by", + "description" : "Belarusian" + }, { + "name" : "by\tlegacy", + "short_description" : "", + "description" : "Belarusian (legacy)" + }, { + "name" : "by\tlatin", + "short_description" : "", + "description" : "Belarusian (Latin)" + }, { + "name" : "be", + "short_description" : "be", + "description" : "Belgian" + }, { + "name" : "be\toss", + "short_description" : "", + "description" : "Belgian (alternative)" + }, { + "name" : "be\toss_latin9", + "short_description" : "", + "description" : "Belgian (alternative, Latin-9 only)" + }, { + "name" : "be\toss_sundeadkeys", + "short_description" : "", + "description" : "Belgian (alternative, Sun dead keys)" + }, { + "name" : "be\tiso-alternate", + "short_description" : "", + "description" : "Belgian (ISO alternate)" + }, { + "name" : "be\tnodeadkeys", + "short_description" : "", + "description" : "Belgian (eliminate dead keys)" + }, { + "name" : "be\tsundeadkeys", + "short_description" : "", + "description" : "Belgian (Sun dead keys)" + }, { + "name" : "be\twang", + "short_description" : "", + "description" : "Belgian (Wang model 724 azerty)" + }, { + "name" : "bd", + "short_description" : "bn", + "description" : "Bangla" + }, { + "name" : "bd\tprobhat", + "short_description" : "", + "description" : "Bangla (Probhat)" + }, { + "name" : "in", + "short_description" : "in", + "description" : "Indian" + }, { + "name" : "in\tben", + "short_description" : "bn", + "description" : "Bangla (India)" + }, { + "name" : "in\tben_probhat", + "short_description" : "bn", + "description" : "Bangla (India, Probhat)" + }, { + "name" : "in\tben_baishakhi", + "short_description" : "", + "description" : "Bangla (India, Baishakhi)" + }, { + "name" : "in\tben_bornona", + "short_description" : "", + "description" : "Bangla (India, Bornona)" + }, { + "name" : "in\tben_gitanjali", + "short_description" : "", + "description" : "Bangla (India, Uni Gitanjali)" + }, { + "name" : "in\tben_inscript", + "short_description" : "", + "description" : "Bangla (India, Baishakhi Inscript)" + }, { + "name" : "in\tguj", + "short_description" : "gu", + "description" : "Gujarati" + }, { + "name" : "in\tguru", + "short_description" : "pa", + "description" : "Punjabi (Gurmukhi)" + }, { + "name" : "in\tjhelum", + "short_description" : "pa", + "description" : "Punjabi (Gurmukhi Jhelum)" + }, { + "name" : "in\tkan", + "short_description" : "kn", + "description" : "Kannada" + }, { + "name" : "in\tkan-kagapa", + "short_description" : "kn", + "description" : "Kannada (KaGaPa phonetic)" + }, { + "name" : "in\tmal", + "short_description" : "ml", + "description" : "Malayalam" + }, { + "name" : "in\tmal_lalitha", + "short_description" : "ml", + "description" : "Malayalam (Lalitha)" + }, { + "name" : "in\tmal_enhanced", + "short_description" : "ml", + "description" : "Malayalam (enhanced Inscript with Rupee Sign)" + }, { + "name" : "in\tori", + "short_description" : "or", + "description" : "Oriya" + }, { + "name" : "in\ttam_unicode", + "short_description" : "ta", + "description" : "Tamil (Unicode)" + }, { + "name" : "in\ttam_keyboard_with_numerals", + "short_description" : "ta", + "description" : "Tamil (keyboard with numerals)" + }, { + "name" : "in\ttam_TAB", + "short_description" : "ta", + "description" : "Tamil (TAB typewriter)" + }, { + "name" : "in\ttam_TSCII", + "short_description" : "ta", + "description" : "Tamil (TSCII typewriter)" + }, { + "name" : "in\ttam", + "short_description" : "ta", + "description" : "Tamil" + }, { + "name" : "in\ttel", + "short_description" : "te", + "description" : "Telugu" + }, { + "name" : "in\ttel-kagapa", + "short_description" : "te", + "description" : "Telugu (KaGaPa phonetic)" + }, { + "name" : "in\turd-phonetic", + "short_description" : "ur", + "description" : "Urdu (phonetic)" + }, { + "name" : "in\turd-phonetic3", + "short_description" : "ur", + "description" : "Urdu (alternative phonetic)" + }, { + "name" : "in\turd-winkeys", + "short_description" : "ur", + "description" : "Urdu (WinKeys)" + }, { + "name" : "in\tbolnagri", + "short_description" : "hi", + "description" : "Hindi (Bolnagri)" + }, { + "name" : "in\thin-wx", + "short_description" : "hi", + "description" : "Hindi (Wx)" + }, { + "name" : "in\thin-kagapa", + "short_description" : "hi", + "description" : "Hindi (KaGaPa phonetic)" + }, { + "name" : "in\tsan-kagapa", + "short_description" : "sa", + "description" : "Sanskrit (KaGaPa phonetic)" + }, { + "name" : "in\tmar-kagapa", + "short_description" : "mr", + "description" : "Marathi (KaGaPa phonetic)" + }, { + "name" : "in\teng", + "short_description" : "en", + "description" : "English (India, with RupeeSign)" + }, { + "name" : "ba", + "short_description" : "bs", + "description" : "Bosnian" + }, { + "name" : "ba\talternatequotes", + "short_description" : "", + "description" : "Bosnian (use guillemets for quotes)" + }, { + "name" : "ba\tunicode", + "short_description" : "", + "description" : "Bosnian (use Bosnian digraphs)" + }, { + "name" : "ba\tunicodeus", + "short_description" : "", + "description" : "Bosnian (US keyboard with Bosnian digraphs)" + }, { + "name" : "ba\tus", + "short_description" : "", + "description" : "Bosnian (US keyboard with Bosnian letters)" + }, { + "name" : "br", + "short_description" : "pt", + "description" : "Portuguese (Brazil)" + }, { + "name" : "br\tnodeadkeys", + "short_description" : "", + "description" : "Portuguese (Brazil, eliminate dead keys)" + }, { + "name" : "br\tdvorak", + "short_description" : "", + "description" : "Portuguese (Brazil, Dvorak)" + }, { + "name" : "br\tnativo", + "short_description" : "", + "description" : "Portuguese (Brazil, nativo)" + }, { + "name" : "br\tnativo-us", + "short_description" : "", + "description" : "Portuguese (Brazil, nativo for US keyboards)" + }, { + "name" : "br\tnativo-epo", + "short_description" : "", + "description" : "Portuguese (Brazil, nativo for Esperanto)" + }, { + "name" : "bg", + "short_description" : "bg", + "description" : "Bulgarian" + }, { + "name" : "bg\tphonetic", + "short_description" : "", + "description" : "Bulgarian (traditional phonetic)" + }, { + "name" : "bg\tbas_phonetic", + "short_description" : "", + "description" : "Bulgarian (new phonetic)" + }, { + "name" : "ma", + "short_description" : "ar", + "description" : "Arabic (Morocco)" + }, { + "name" : "ma\tfrench", + "short_description" : "fr", + "description" : "French (Morocco)" + }, { + "name" : "ma\ttifinagh", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh)" + }, { + "name" : "ma\ttifinagh-alt", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh alternative)" + }, { + "name" : "ma\ttifinagh-alt-phonetic", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh alternative phonetic)" + }, { + "name" : "ma\ttifinagh-extended", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh extended)" + }, { + "name" : "ma\ttifinagh-phonetic", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh phonetic)" + }, { + "name" : "ma\ttifinagh-extended-phonetic", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh extended phonetic)" + }, { + "name" : "cm", + "short_description" : "cm", + "description" : "English (Cameroon)" + }, { + "name" : "cm\tfrench", + "short_description" : "", + "description" : "French (Cameroon)" + }, { + "name" : "cm\tqwerty", + "short_description" : "", + "description" : "Cameroon Multilingual (qwerty)" + }, { + "name" : "cm\tazerty", + "short_description" : "", + "description" : "Cameroon Multilingual (azerty)" + }, { + "name" : "cm\tdvorak", + "short_description" : "", + "description" : "Cameroon Multilingual (Dvorak)" + }, { + "name" : "mm", + "short_description" : "my", + "description" : "Burmese" + }, { + "name" : "ca", + "short_description" : "fr", + "description" : "French (Canada)" + }, { + "name" : "ca\tfr-dvorak", + "short_description" : "fr", + "description" : "French (Canada, Dvorak)" + }, { + "name" : "ca\tfr-legacy", + "short_description" : "fr", + "description" : "French (Canada, legacy)" + }, { + "name" : "ca\tmultix", + "short_description" : "", + "description" : "Canadian Multilingual" + }, { + "name" : "ca\tmulti", + "short_description" : "", + "description" : "Canadian Multilingual (first part)" + }, { + "name" : "ca\tmulti-2gr", + "short_description" : "", + "description" : "Canadian Multilingual (second part)" + }, { + "name" : "ca\tike", + "short_description" : "ike", + "description" : "Inuktitut" + }, { + "name" : "ca\teng", + "short_description" : "en", + "description" : "English (Canada)" + }, { + "name" : "cd", + "short_description" : "fr", + "description" : "French (Democratic Republic of the Congo)" + }, { + "name" : "cn", + "short_description" : "zh", + "description" : "Chinese" + }, { + "name" : "cn\ttib", + "short_description" : "", + "description" : "Tibetan" + }, { + "name" : "cn\ttib_asciinum", + "short_description" : "", + "description" : "Tibetan (with ASCII numerals)" + }, { + "name" : "cn\tuig", + "short_description" : "", + "description" : "Uyghur" + }, { + "name" : "hr", + "short_description" : "hr", + "description" : "Croatian" + }, { + "name" : "hr\talternatequotes", + "short_description" : "", + "description" : "Croatian (use guillemets for quotes)" + }, { + "name" : "hr\tunicode", + "short_description" : "", + "description" : "Croatian (use Croatian digraphs)" + }, { + "name" : "hr\tunicodeus", + "short_description" : "", + "description" : "Croatian (US keyboard with Croatian digraphs)" + }, { + "name" : "hr\tus", + "short_description" : "", + "description" : "Croatian (US keyboard with Croatian letters)" + }, { + "name" : "cz", + "short_description" : "cs", + "description" : "Czech" + }, { + "name" : "cz\tbksl", + "short_description" : "", + "description" : "Czech (with <\\|> key)" + }, { + "name" : "cz\tqwerty", + "short_description" : "", + "description" : "Czech (qwerty)" + }, { + "name" : "cz\tqwerty_bksl", + "short_description" : "", + "description" : "Czech (qwerty, extended Backslash)" + }, { + "name" : "cz\tucw", + "short_description" : "", + "description" : "Czech (UCW layout, accented letters only)" + }, { + "name" : "cz\tdvorak-ucw", + "short_description" : "", + "description" : "Czech (US Dvorak with CZ UCW support)" + }, { + "name" : "dk", + "short_description" : "da", + "description" : "Danish" + }, { + "name" : "dk\tnodeadkeys", + "short_description" : "", + "description" : "Danish (eliminate dead keys)" + }, { + "name" : "dk\tmac", + "short_description" : "", + "description" : "Danish (Macintosh)" + }, { + "name" : "dk\tmac_nodeadkeys", + "short_description" : "", + "description" : "Danish (Macintosh, eliminate dead keys)" + }, { + "name" : "dk\tdvorak", + "short_description" : "", + "description" : "Danish (Dvorak)" + }, { + "name" : "nl", + "short_description" : "nl", + "description" : "Dutch" + }, { + "name" : "nl\tsundeadkeys", + "short_description" : "", + "description" : "Dutch (Sun dead keys)" + }, { + "name" : "nl\tmac", + "short_description" : "", + "description" : "Dutch (Macintosh)" + }, { + "name" : "nl\tstd", + "short_description" : "", + "description" : "Dutch (standard)" + }, { + "name" : "bt", + "short_description" : "dz", + "description" : "Dzongkha" + }, { + "name" : "ee", + "short_description" : "et", + "description" : "Estonian" + }, { + "name" : "ee\tnodeadkeys", + "short_description" : "", + "description" : "Estonian (eliminate dead keys)" + }, { + "name" : "ee\tdvorak", + "short_description" : "", + "description" : "Estonian (Dvorak)" + }, { + "name" : "ee\tus", + "short_description" : "", + "description" : "Estonian (US keyboard with Estonian letters)" + }, { + "name" : "ir", + "short_description" : "fa", + "description" : "Persian" + }, { + "name" : "ir\tpes_keypad", + "short_description" : "", + "description" : "Persian (with Persian Keypad)" + }, { + "name" : "ir\tku", + "short_description" : "ku", + "description" : "Kurdish (Iran, Latin Q)" + }, { + "name" : "ir\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Iran, F)" + }, { + "name" : "ir\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Iran, Latin Alt-Q)" + }, { + "name" : "ir\tku_ara", + "short_description" : "ku", + "description" : "Kurdish (Iran, Arabic-Latin)" + }, { + "name" : "iq", + "short_description" : "ar", + "description" : "Iraqi" + }, { + "name" : "iq\tku", + "short_description" : "ku", + "description" : "Kurdish (Iraq, Latin Q)" + }, { + "name" : "iq\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Iraq, F)" + }, { + "name" : "iq\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Iraq, Latin Alt-Q)" + }, { + "name" : "iq\tku_ara", + "short_description" : "ku", + "description" : "Kurdish (Iraq, Arabic-Latin)" + }, { + "name" : "fo", + "short_description" : "fo", + "description" : "Faroese" + }, { + "name" : "fo\tnodeadkeys", + "short_description" : "", + "description" : "Faroese (eliminate dead keys)" + }, { + "name" : "fi", + "short_description" : "fi", + "description" : "Finnish" + }, { + "name" : "fi\tclassic", + "short_description" : "", + "description" : "Finnish (classic)" + }, { + "name" : "fi\tnodeadkeys", + "short_description" : "", + "description" : "Finnish (classic, eliminate dead keys)" + }, { + "name" : "fi\tsmi", + "short_description" : "", + "description" : "Northern Saami (Finland)" + }, { + "name" : "fi\tmac", + "short_description" : "", + "description" : "Finnish (Macintosh)" + }, { + "name" : "fr", + "short_description" : "fr", + "description" : "French" + }, { + "name" : "fr\tnodeadkeys", + "short_description" : "", + "description" : "French (eliminate dead keys)" + }, { + "name" : "fr\tsundeadkeys", + "short_description" : "", + "description" : "French (Sun dead keys)" + }, { + "name" : "fr\toss", + "short_description" : "", + "description" : "French (alternative)" + }, { + "name" : "fr\toss_latin9", + "short_description" : "", + "description" : "French (alternative, Latin-9 only)" + }, { + "name" : "fr\toss_nodeadkeys", + "short_description" : "", + "description" : "French (alternative, eliminate dead keys)" + }, { + "name" : "fr\toss_sundeadkeys", + "short_description" : "", + "description" : "French (alternative, Sun dead keys)" + }, { + "name" : "fr\tlatin9", + "short_description" : "", + "description" : "French (legacy, alternative)" + }, { + "name" : "fr\tlatin9_nodeadkeys", + "short_description" : "", + "description" : "French (legacy, alternative, eliminate dead keys)" + }, { + "name" : "fr\tlatin9_sundeadkeys", + "short_description" : "", + "description" : "French (legacy, alternative, Sun dead keys)" + }, { + "name" : "fr\tbepo", + "short_description" : "", + "description" : "French (Bepo, ergonomic, Dvorak way)" + }, { + "name" : "fr\tbepo_latin9", + "short_description" : "", + "description" : "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" + }, { + "name" : "fr\tdvorak", + "short_description" : "", + "description" : "French (Dvorak)" + }, { + "name" : "fr\tmac", + "short_description" : "", + "description" : "French (Macintosh)" + }, { + "name" : "fr\tbre", + "short_description" : "", + "description" : "French (Breton)" + }, { + "name" : "fr\toci", + "short_description" : "", + "description" : "Occitan" + }, { + "name" : "fr\tgeo", + "short_description" : "", + "description" : "Georgian (France, AZERTY Tskapo)" + }, { + "name" : "gh", + "short_description" : "en", + "description" : "English (Ghana)" + }, { + "name" : "gh\tgeneric", + "short_description" : "", + "description" : "English (Ghana, multilingual)" + }, { + "name" : "gh\takan", + "short_description" : "ak", + "description" : "Akan" + }, { + "name" : "gh\tewe", + "short_description" : "ee", + "description" : "Ewe" + }, { + "name" : "gh\tfula", + "short_description" : "ff", + "description" : "Fula" + }, { + "name" : "gh\tga", + "short_description" : "gaa", + "description" : "Ga" + }, { + "name" : "gh\thausa", + "short_description" : "ha", + "description" : "Hausa" + }, { + "name" : "gh\tavn", + "short_description" : "avn", + "description" : "Avatime" + }, { + "name" : "gh\tgillbt", + "short_description" : "", + "description" : "English (Ghana, GILLBT)" + }, { + "name" : "gn", + "short_description" : "fr", + "description" : "French (Guinea)" + }, { + "name" : "ge", + "short_description" : "ka", + "description" : "Georgian" + }, { + "name" : "ge\tergonomic", + "short_description" : "", + "description" : "Georgian (ergonomic)" + }, { + "name" : "ge\tmess", + "short_description" : "", + "description" : "Georgian (MESS)" + }, { + "name" : "ge\tru", + "short_description" : "ru", + "description" : "Russian (Georgia)" + }, { + "name" : "ge\tos", + "short_description" : "", + "description" : "Ossetian (Georgia)" + }, { + "name" : "de", + "short_description" : "de", + "description" : "German" + }, { + "name" : "de\tdeadacute", + "short_description" : "", + "description" : "German (dead acute)" + }, { + "name" : "de\tdeadgraveacute", + "short_description" : "", + "description" : "German (dead grave acute)" + }, { + "name" : "de\tnodeadkeys", + "short_description" : "", + "description" : "German (eliminate dead keys)" + }, { + "name" : "de\tT3", + "short_description" : "", + "description" : "German (T3)" + }, { + "name" : "de\tro", + "short_description" : "", + "description" : "Romanian (Germany)" + }, { + "name" : "de\tro_nodeadkeys", + "short_description" : "", + "description" : "Romanian (Germany, eliminate dead keys)" + }, { + "name" : "de\tdvorak", + "short_description" : "", + "description" : "German (Dvorak)" + }, { + "name" : "de\tsundeadkeys", + "short_description" : "", + "description" : "German (Sun dead keys)" + }, { + "name" : "de\tneo", + "short_description" : "", + "description" : "German (Neo 2)" + }, { + "name" : "de\tmac", + "short_description" : "", + "description" : "German (Macintosh)" + }, { + "name" : "de\tmac_nodeadkeys", + "short_description" : "", + "description" : "German (Macintosh, eliminate dead keys)" + }, { + "name" : "de\tdsb", + "short_description" : "", + "description" : "Lower Sorbian" + }, { + "name" : "de\tdsb_qwertz", + "short_description" : "", + "description" : "Lower Sorbian (qwertz)" + }, { + "name" : "de\tqwerty", + "short_description" : "", + "description" : "German (qwerty)" + }, { + "name" : "de\tru", + "short_description" : "ru", + "description" : "Russian (Germany, phonetic)" + }, { + "name" : "de\tlegacy", + "short_description" : "", + "description" : "German (legacy)" + }, { + "name" : "gr", + "short_description" : "gr", + "description" : "Greek" + }, { + "name" : "gr\tsimple", + "short_description" : "", + "description" : "Greek (simple)" + }, { + "name" : "gr\textended", + "short_description" : "", + "description" : "Greek (extended)" + }, { + "name" : "gr\tnodeadkeys", + "short_description" : "", + "description" : "Greek (eliminate dead keys)" + }, { + "name" : "gr\tpolytonic", + "short_description" : "", + "description" : "Greek (polytonic)" + }, { + "name" : "hu", + "short_description" : "hu", + "description" : "Hungarian" + }, { + "name" : "hu\tstandard", + "short_description" : "", + "description" : "Hungarian (standard)" + }, { + "name" : "hu\tnodeadkeys", + "short_description" : "", + "description" : "Hungarian (eliminate dead keys)" + }, { + "name" : "hu\tqwerty", + "short_description" : "", + "description" : "Hungarian (qwerty)" + }, { + "name" : "hu\t101_qwertz_comma_dead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/comma/dead keys)" + }, { + "name" : "hu\t101_qwertz_comma_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/comma/eliminate dead keys)" + }, { + "name" : "hu\t101_qwertz_dot_dead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/dot/dead keys)" + }, { + "name" : "hu\t101_qwertz_dot_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/dot/eliminate dead keys)" + }, { + "name" : "hu\t101_qwerty_comma_dead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/comma/dead keys)" + }, { + "name" : "hu\t101_qwerty_comma_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/comma/eliminate dead keys)" + }, { + "name" : "hu\t101_qwerty_dot_dead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/dot/dead keys)" + }, { + "name" : "hu\t101_qwerty_dot_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/dot/eliminate dead keys)" + }, { + "name" : "hu\t102_qwertz_comma_dead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/comma/dead keys)" + }, { + "name" : "hu\t102_qwertz_comma_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/comma/eliminate dead keys)" + }, { + "name" : "hu\t102_qwertz_dot_dead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/dot/dead keys)" + }, { + "name" : "hu\t102_qwertz_dot_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/dot/eliminate dead keys)" + }, { + "name" : "hu\t102_qwerty_comma_dead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/comma/dead keys)" + }, { + "name" : "hu\t102_qwerty_comma_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/comma/eliminate dead keys)" + }, { + "name" : "hu\t102_qwerty_dot_dead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/dot/dead keys)" + }, { + "name" : "hu\t102_qwerty_dot_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/dot/eliminate dead keys)" + }, { + "name" : "is", + "short_description" : "is", + "description" : "Icelandic" + }, { + "name" : "is\tSundeadkeys", + "short_description" : "", + "description" : "Icelandic (Sun dead keys)" + }, { + "name" : "is\tnodeadkeys", + "short_description" : "", + "description" : "Icelandic (eliminate dead keys)" + }, { + "name" : "is\tmac", + "short_description" : "", + "description" : "Icelandic (Macintosh)" + }, { + "name" : "is\tdvorak", + "short_description" : "", + "description" : "Icelandic (Dvorak)" + }, { + "name" : "il", + "short_description" : "he", + "description" : "Hebrew" + }, { + "name" : "il\tlyx", + "short_description" : "", + "description" : "Hebrew (lyx)" + }, { + "name" : "il\tphonetic", + "short_description" : "", + "description" : "Hebrew (phonetic)" + }, { + "name" : "il\tbiblical", + "short_description" : "", + "description" : "Hebrew (Biblical, Tiro)" + }, { + "name" : "it", + "short_description" : "it", + "description" : "Italian" + }, { + "name" : "it\tnodeadkeys", + "short_description" : "", + "description" : "Italian (eliminate dead keys)" + }, { + "name" : "it\tmac", + "short_description" : "", + "description" : "Italian (Macintosh)" + }, { + "name" : "it\tus", + "short_description" : "", + "description" : "Italian (US keyboard with Italian letters)" + }, { + "name" : "it\tgeo", + "short_description" : "", + "description" : "Georgian (Italy)" + }, { + "name" : "it\tibm", + "short_description" : "", + "description" : "Italian (IBM 142)" + }, { + "name" : "jp", + "short_description" : "ja", + "description" : "Japanese" + }, { + "name" : "jp\tkana", + "short_description" : "", + "description" : "Japanese (Kana)" + }, { + "name" : "jp\tkana86", + "short_description" : "", + "description" : "Japanese (Kana 86)" + }, { + "name" : "jp\tOADG109A", + "short_description" : "", + "description" : "Japanese (OADG 109A)" + }, { + "name" : "jp\tmac", + "short_description" : "", + "description" : "Japanese (Macintosh)" + }, { + "name" : "jp\tdvorak", + "short_description" : "", + "description" : "Japanese (Dvorak)" + }, { + "name" : "kg", + "short_description" : "ki", + "description" : "Kyrgyz" + }, { + "name" : "kg\tphonetic", + "short_description" : "", + "description" : "Kyrgyz (phonetic)" + }, { + "name" : "kh", + "short_description" : "km", + "description" : "Khmer (Cambodia)" + }, { + "name" : "kz", + "short_description" : "kk", + "description" : "Kazakh" + }, { + "name" : "kz\truskaz", + "short_description" : "ru", + "description" : "Russian (Kazakhstan, with Kazakh)" + }, { + "name" : "kz\tkazrus", + "short_description" : "", + "description" : "Kazakh (with Russian)" + }, { + "name" : "la", + "short_description" : "lo", + "description" : "Lao" + }, { + "name" : "la\tstea", + "short_description" : "", + "description" : "Lao (STEA proposed standard layout)" + }, { + "name" : "latam", + "short_description" : "es", + "description" : "Spanish (Latin American)" + }, { + "name" : "latam\tnodeadkeys", + "short_description" : "", + "description" : "Spanish (Latin American, eliminate dead keys)" + }, { + "name" : "latam\tdeadtilde", + "short_description" : "", + "description" : "Spanish (Latin American, include dead tilde)" + }, { + "name" : "latam\tsundeadkeys", + "short_description" : "", + "description" : "Spanish (Latin American, Sun dead keys)" + }, { + "name" : "lt", + "short_description" : "lt", + "description" : "Lithuanian" + }, { + "name" : "lt\tstd", + "short_description" : "", + "description" : "Lithuanian (standard)" + }, { + "name" : "lt\tus", + "short_description" : "", + "description" : "Lithuanian (US keyboard with Lithuanian letters)" + }, { + "name" : "lt\tibm", + "short_description" : "", + "description" : "Lithuanian (IBM LST 1205-92)" + }, { + "name" : "lt\tlekp", + "short_description" : "", + "description" : "Lithuanian (LEKP)" + }, { + "name" : "lt\tlekpa", + "short_description" : "", + "description" : "Lithuanian (LEKPa)" + }, { + "name" : "lv", + "short_description" : "lv", + "description" : "Latvian" + }, { + "name" : "lv\tapostrophe", + "short_description" : "", + "description" : "Latvian (apostrophe variant)" + }, { + "name" : "lv\ttilde", + "short_description" : "", + "description" : "Latvian (tilde variant)" + }, { + "name" : "lv\tfkey", + "short_description" : "", + "description" : "Latvian (F variant)" + }, { + "name" : "lv\tmodern", + "short_description" : "", + "description" : "Latvian (modern)" + }, { + "name" : "lv\tergonomic", + "short_description" : "", + "description" : "Latvian (ergonomic, ŪGJRMV)" + }, { + "name" : "lv\tadapted", + "short_description" : "", + "description" : "Latvian (adapted)" + }, { + "name" : "mao", + "short_description" : "mi", + "description" : "Maori" + }, { + "name" : "me", + "short_description" : "sr", + "description" : "Montenegrin" + }, { + "name" : "me\tcyrillic", + "short_description" : "", + "description" : "Montenegrin (Cyrillic)" + }, { + "name" : "me\tcyrillicyz", + "short_description" : "", + "description" : "Montenegrin (Cyrillic, Z and ZHE swapped)" + }, { + "name" : "me\tlatinunicode", + "short_description" : "", + "description" : "Montenegrin (Latin Unicode)" + }, { + "name" : "me\tlatinyz", + "short_description" : "", + "description" : "Montenegrin (Latin qwerty)" + }, { + "name" : "me\tlatinunicodeyz", + "short_description" : "", + "description" : "Montenegrin (Latin Unicode qwerty)" + }, { + "name" : "me\tcyrillicalternatequotes", + "short_description" : "", + "description" : "Montenegrin (Cyrillic with guillemets)" + }, { + "name" : "me\tlatinalternatequotes", + "short_description" : "", + "description" : "Montenegrin (Latin with guillemets)" + }, { + "name" : "mk", + "short_description" : "mk", + "description" : "Macedonian" + }, { + "name" : "mk\tnodeadkeys", + "short_description" : "", + "description" : "Macedonian (eliminate dead keys)" + }, { + "name" : "mt", + "short_description" : "mt", + "description" : "Maltese" + }, { + "name" : "mt\tus", + "short_description" : "", + "description" : "Maltese (with US layout)" + }, { + "name" : "mn", + "short_description" : "mn", + "description" : "Mongolian" + }, { + "name" : "no", + "short_description" : "no", + "description" : "Norwegian" + }, { + "name" : "no\tnodeadkeys", + "short_description" : "", + "description" : "Norwegian (eliminate dead keys)" + }, { + "name" : "no\tdvorak", + "short_description" : "", + "description" : "Norwegian (Dvorak)" + }, { + "name" : "no\tsmi", + "short_description" : "", + "description" : "Northern Saami (Norway)" + }, { + "name" : "no\tsmi_nodeadkeys", + "short_description" : "", + "description" : "Northern Saami (Norway, eliminate dead keys)" + }, { + "name" : "no\tmac", + "short_description" : "", + "description" : "Norwegian (Macintosh)" + }, { + "name" : "no\tmac_nodeadkeys", + "short_description" : "", + "description" : "Norwegian (Macintosh, eliminate dead keys)" + }, { + "name" : "no\tcolemak", + "short_description" : "", + "description" : "Norwegian (Colemak)" + }, { + "name" : "pl", + "short_description" : "pl", + "description" : "Polish" + }, { + "name" : "pl\tlegacy", + "short_description" : "", + "description" : "Polish (legacy)" + }, { + "name" : "pl\tqwertz", + "short_description" : "", + "description" : "Polish (qwertz)" + }, { + "name" : "pl\tdvorak", + "short_description" : "", + "description" : "Polish (Dvorak)" + }, { + "name" : "pl\tdvorak_quotes", + "short_description" : "", + "description" : "Polish (Dvorak, Polish quotes on quotemark key)" + }, { + "name" : "pl\tdvorak_altquotes", + "short_description" : "", + "description" : "Polish (Dvorak, Polish quotes on key 1)" + }, { + "name" : "pl\tcsb", + "short_description" : "", + "description" : "Kashubian" + }, { + "name" : "pl\tszl", + "short_description" : "", + "description" : "Silesian" + }, { + "name" : "pl\tru_phonetic_dvorak", + "short_description" : "ru", + "description" : "Russian (Poland, phonetic Dvorak)" + }, { + "name" : "pl\tdvp", + "short_description" : "", + "description" : "Polish (programmer Dvorak)" + }, { + "name" : "pt", + "short_description" : "pt", + "description" : "Portuguese" + }, { + "name" : "pt\tnodeadkeys", + "short_description" : "", + "description" : "Portuguese (eliminate dead keys)" + }, { + "name" : "pt\tsundeadkeys", + "short_description" : "", + "description" : "Portuguese (Sun dead keys)" + }, { + "name" : "pt\tmac", + "short_description" : "", + "description" : "Portuguese (Macintosh)" + }, { + "name" : "pt\tmac_nodeadkeys", + "short_description" : "", + "description" : "Portuguese (Macintosh, eliminate dead keys)" + }, { + "name" : "pt\tmac_sundeadkeys", + "short_description" : "", + "description" : "Portuguese (Macintosh, Sun dead keys)" + }, { + "name" : "pt\tnativo", + "short_description" : "", + "description" : "Portuguese (Nativo)" + }, { + "name" : "pt\tnativo-us", + "short_description" : "", + "description" : "Portuguese (Nativo for US keyboards)" + }, { + "name" : "pt\tnativo-epo", + "short_description" : "", + "description" : "Esperanto (Portugal, Nativo)" + }, { + "name" : "ro", + "short_description" : "ro", + "description" : "Romanian" + }, { + "name" : "ro\tcedilla", + "short_description" : "", + "description" : "Romanian (cedilla)" + }, { + "name" : "ro\tstd", + "short_description" : "", + "description" : "Romanian (standard)" + }, { + "name" : "ro\tstd_cedilla", + "short_description" : "", + "description" : "Romanian (standard cedilla)" + }, { + "name" : "ro\twinkeys", + "short_description" : "", + "description" : "Romanian (WinKeys)" + }, { + "name" : "ru", + "short_description" : "ru", + "description" : "Russian" + }, { + "name" : "ru\tphonetic", + "short_description" : "", + "description" : "Russian (phonetic)" + }, { + "name" : "ru\tphonetic_winkeys", + "short_description" : "", + "description" : "Russian (phonetic WinKeys)" + }, { + "name" : "ru\ttypewriter", + "short_description" : "", + "description" : "Russian (typewriter)" + }, { + "name" : "ru\tlegacy", + "short_description" : "", + "description" : "Russian (legacy)" + }, { + "name" : "ru\ttypewriter-legacy", + "short_description" : "", + "description" : "Russian (typewriter, legacy)" + }, { + "name" : "ru\ttt", + "short_description" : "", + "description" : "Tatar" + }, { + "name" : "ru\tos_legacy", + "short_description" : "", + "description" : "Ossetian (legacy)" + }, { + "name" : "ru\tos_winkeys", + "short_description" : "", + "description" : "Ossetian (WinKeys)" + }, { + "name" : "ru\tcv", + "short_description" : "", + "description" : "Chuvash" + }, { + "name" : "ru\tcv_latin", + "short_description" : "", + "description" : "Chuvash (Latin)" + }, { + "name" : "ru\tudm", + "short_description" : "", + "description" : "Udmurt" + }, { + "name" : "ru\tkom", + "short_description" : "", + "description" : "Komi" + }, { + "name" : "ru\tsah", + "short_description" : "", + "description" : "Yakut" + }, { + "name" : "ru\txal", + "short_description" : "", + "description" : "Kalmyk" + }, { + "name" : "ru\tdos", + "short_description" : "", + "description" : "Russian (DOS)" + }, { + "name" : "ru\tmac", + "short_description" : "", + "description" : "Russian (Macintosh)" + }, { + "name" : "ru\tsrp", + "short_description" : "", + "description" : "Serbian (Russia)" + }, { + "name" : "ru\tbak", + "short_description" : "", + "description" : "Bashkirian" + }, { + "name" : "ru\tchm", + "short_description" : "", + "description" : "Mari" + }, { + "name" : "rs", + "short_description" : "sr", + "description" : "Serbian" + }, { + "name" : "rs\tyz", + "short_description" : "", + "description" : "Serbian (Cyrillic, Z and ZHE swapped)" + }, { + "name" : "rs\tlatin", + "short_description" : "", + "description" : "Serbian (Latin)" + }, { + "name" : "rs\tlatinunicode", + "short_description" : "", + "description" : "Serbian (Latin Unicode)" + }, { + "name" : "rs\tlatinyz", + "short_description" : "", + "description" : "Serbian (Latin qwerty)" + }, { + "name" : "rs\tlatinunicodeyz", + "short_description" : "", + "description" : "Serbian (Latin Unicode qwerty)" + }, { + "name" : "rs\talternatequotes", + "short_description" : "", + "description" : "Serbian (Cyrillic with guillemets)" + }, { + "name" : "rs\tlatinalternatequotes", + "short_description" : "", + "description" : "Serbian (Latin with guillemets)" + }, { + "name" : "rs\true", + "short_description" : "", + "description" : "Pannonian Rusyn (homophonic)" + }, { + "name" : "si", + "short_description" : "sl", + "description" : "Slovenian" + }, { + "name" : "si\talternatequotes", + "short_description" : "", + "description" : "Slovenian (use guillemets for quotes)" + }, { + "name" : "si\tus", + "short_description" : "", + "description" : "Slovenian (US keyboard with Slovenian letters)" + }, { + "name" : "sk", + "short_description" : "sk", + "description" : "Slovak" + }, { + "name" : "sk\tbksl", + "short_description" : "", + "description" : "Slovak (extended Backslash)" + }, { + "name" : "sk\tqwerty", + "short_description" : "", + "description" : "Slovak (qwerty)" + }, { + "name" : "sk\tqwerty_bksl", + "short_description" : "", + "description" : "Slovak (qwerty, extended Backslash)" + }, { + "name" : "es", + "short_description" : "es", + "description" : "Spanish" + }, { + "name" : "es\tnodeadkeys", + "short_description" : "", + "description" : "Spanish (eliminate dead keys)" + }, { + "name" : "es\tdeadtilde", + "short_description" : "", + "description" : "Spanish (include dead tilde)" + }, { + "name" : "es\tsundeadkeys", + "short_description" : "", + "description" : "Spanish (Sun dead keys)" + }, { + "name" : "es\tdvorak", + "short_description" : "", + "description" : "Spanish (Dvorak)" + }, { + "name" : "es\tast", + "short_description" : "", + "description" : "Asturian (Spain, with bottom-dot H and bottom-dot L)" + }, { + "name" : "es\tcat", + "short_description" : "", + "description" : "Catalan (Spain, with middle-dot L)" + }, { + "name" : "es\tmac", + "short_description" : "", + "description" : "Spanish (Macintosh)" + }, { + "name" : "se", + "short_description" : "sv", + "description" : "Swedish" + }, { + "name" : "se\tnodeadkeys", + "short_description" : "", + "description" : "Swedish (eliminate dead keys)" + }, { + "name" : "se\tdvorak", + "short_description" : "", + "description" : "Swedish (Dvorak)" + }, { + "name" : "se\trus", + "short_description" : "ru", + "description" : "Russian (Sweden, phonetic)" + }, { + "name" : "se\trus_nodeadkeys", + "short_description" : "ru", + "description" : "Russian (Sweden, phonetic, eliminate dead keys)" + }, { + "name" : "se\tsmi", + "short_description" : "", + "description" : "Northern Saami (Sweden)" + }, { + "name" : "se\tmac", + "short_description" : "", + "description" : "Swedish (Macintosh)" + }, { + "name" : "se\tsvdvorak", + "short_description" : "", + "description" : "Swedish (Svdvorak)" + }, { + "name" : "se\tswl", + "short_description" : "", + "description" : "Swedish Sign Language" + }, { + "name" : "ch", + "short_description" : "de", + "description" : "German (Switzerland)" + }, { + "name" : "ch\tlegacy", + "short_description" : "", + "description" : "German (Switzerland, legacy)" + }, { + "name" : "ch\tde_nodeadkeys", + "short_description" : "de", + "description" : "German (Switzerland, eliminate dead keys)" + }, { + "name" : "ch\tde_sundeadkeys", + "short_description" : "de", + "description" : "German (Switzerland, Sun dead keys)" + }, { + "name" : "ch\tfr", + "short_description" : "fr", + "description" : "French (Switzerland)" + }, { + "name" : "ch\tfr_nodeadkeys", + "short_description" : "fr", + "description" : "French (Switzerland, eliminate dead keys)" + }, { + "name" : "ch\tfr_sundeadkeys", + "short_description" : "fr", + "description" : "French (Switzerland, Sun dead keys)" + }, { + "name" : "ch\tfr_mac", + "short_description" : "fr", + "description" : "French (Switzerland, Macintosh)" + }, { + "name" : "ch\tde_mac", + "short_description" : "de", + "description" : "German (Switzerland, Macintosh)" + }, { + "name" : "sy", + "short_description" : "ar", + "description" : "Arabic (Syria)" + }, { + "name" : "sy\tsyc", + "short_description" : "syc", + "description" : "Syriac" + }, { + "name" : "sy\tsyc_phonetic", + "short_description" : "syc", + "description" : "Syriac (phonetic)" + }, { + "name" : "sy\tku", + "short_description" : "ku", + "description" : "Kurdish (Syria, Latin Q)" + }, { + "name" : "sy\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Syria, F)" + }, { + "name" : "sy\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Syria, Latin Alt-Q)" + }, { + "name" : "tj", + "short_description" : "tg", + "description" : "Tajik" + }, { + "name" : "tj\tlegacy", + "short_description" : "", + "description" : "Tajik (legacy)" + }, { + "name" : "lk", + "short_description" : "si", + "description" : "Sinhala (phonetic)" + }, { + "name" : "lk\ttam_unicode", + "short_description" : "ta", + "description" : "Tamil (Sri Lanka, Unicode)" + }, { + "name" : "lk\ttam_TAB", + "short_description" : "", + "description" : "Tamil (Sri Lanka, TAB Typewriter)" + }, { + "name" : "th", + "short_description" : "th", + "description" : "Thai" + }, { + "name" : "th\ttis", + "short_description" : "", + "description" : "Thai (TIS-820.2538)" + }, { + "name" : "th\tpat", + "short_description" : "", + "description" : "Thai (Pattachote)" + }, { + "name" : "tr", + "short_description" : "tr", + "description" : "Turkish" + }, { + "name" : "tr\tf", + "short_description" : "", + "description" : "Turkish (F)" + }, { + "name" : "tr\talt", + "short_description" : "", + "description" : "Turkish (Alt-Q)" + }, { + "name" : "tr\tsundeadkeys", + "short_description" : "", + "description" : "Turkish (Sun dead keys)" + }, { + "name" : "tr\tku", + "short_description" : "ku", + "description" : "Kurdish (Turkey, Latin Q)" + }, { + "name" : "tr\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Turkey, F)" + }, { + "name" : "tr\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Turkey, Latin Alt-Q)" + }, { + "name" : "tr\tintl", + "short_description" : "", + "description" : "Turkish (international with dead keys)" + }, { + "name" : "tr\tcrh", + "short_description" : "crh", + "description" : "Crimean Tatar (Turkish Q)" + }, { + "name" : "tr\tcrh_f", + "short_description" : "crh", + "description" : "Crimean Tatar (Turkish F)" + }, { + "name" : "tr\tcrh_alt", + "short_description" : "crh", + "description" : "Crimean Tatar (Turkish Alt-Q)" + }, { + "name" : "tw", + "short_description" : "zh", + "description" : "Taiwanese" + }, { + "name" : "tw\tindigenous", + "short_description" : "", + "description" : "Taiwanese (indigenous)" + }, { + "name" : "tw\tsaisiyat", + "short_description" : "xsy", + "description" : "Saisiyat (Taiwan)" + }, { + "name" : "ua", + "short_description" : "uk", + "description" : "Ukrainian" + }, { + "name" : "ua\tphonetic", + "short_description" : "", + "description" : "Ukrainian (phonetic)" + }, { + "name" : "ua\ttypewriter", + "short_description" : "", + "description" : "Ukrainian (typewriter)" + }, { + "name" : "ua\twinkeys", + "short_description" : "", + "description" : "Ukrainian (WinKeys)" + }, { + "name" : "ua\tlegacy", + "short_description" : "", + "description" : "Ukrainian (legacy)" + }, { + "name" : "ua\trstu", + "short_description" : "", + "description" : "Ukrainian (standard RSTU)" + }, { + "name" : "ua\trstu_ru", + "short_description" : "", + "description" : "Russian (Ukraine, standard RSTU)" + }, { + "name" : "ua\thomophonic", + "short_description" : "", + "description" : "Ukrainian (homophonic)" + }, { + "name" : "gb", + "short_description" : "en", + "description" : "English (UK)" + }, { + "name" : "gb\textd", + "short_description" : "", + "description" : "English (UK, extended WinKeys)" + }, { + "name" : "gb\tintl", + "short_description" : "", + "description" : "English (UK, international with dead keys)" + }, { + "name" : "gb\tdvorak", + "short_description" : "", + "description" : "English (UK, Dvorak)" + }, { + "name" : "gb\tdvorakukp", + "short_description" : "", + "description" : "English (UK, Dvorak with UK punctuation)" + }, { + "name" : "gb\tmac", + "short_description" : "", + "description" : "English (UK, Macintosh)" + }, { + "name" : "gb\tmac_intl", + "short_description" : "", + "description" : "English (UK, Macintosh international)" + }, { + "name" : "gb\tcolemak", + "short_description" : "", + "description" : "English (UK, Colemak)" + }, { + "name" : "uz", + "short_description" : "uz", + "description" : "Uzbek" + }, { + "name" : "uz\tlatin", + "short_description" : "", + "description" : "Uzbek (Latin)" + }, { + "name" : "vn", + "short_description" : "vi", + "description" : "Vietnamese" + }, { + "name" : "kr", + "short_description" : "ko", + "description" : "Korean" + }, { + "name" : "kr\tkr104", + "short_description" : "", + "description" : "Korean (101/104 key compatible)" + }, { + "name" : "nec_vndr/jp", + "short_description" : "ja", + "description" : "Japanese (PC-98xx Series)" + }, { + "name" : "ie", + "short_description" : "ie", + "description" : "Irish" + }, { + "name" : "ie\tCloGaelach", + "short_description" : "", + "description" : "CloGaelach" + }, { + "name" : "ie\tUnicodeExpert", + "short_description" : "", + "description" : "Irish (UnicodeExpert)" + }, { + "name" : "ie\togam", + "short_description" : "", + "description" : "Ogham" + }, { + "name" : "ie\togam_is434", + "short_description" : "", + "description" : "Ogham (IS434)" + }, { + "name" : "pk", + "short_description" : "ur", + "description" : "Urdu (Pakistan)" + }, { + "name" : "pk\turd-crulp", + "short_description" : "", + "description" : "Urdu (Pakistan, CRULP)" + }, { + "name" : "pk\turd-nla", + "short_description" : "", + "description" : "Urdu (Pakistan, NLA)" + }, { + "name" : "pk\tara", + "short_description" : "ar", + "description" : "Arabic (Pakistan)" + }, { + "name" : "pk\tsnd", + "short_description" : "sd", + "description" : "Sindhi" + }, { + "name" : "mv", + "short_description" : "dv", + "description" : "Dhivehi" + }, { + "name" : "za", + "short_description" : "en", + "description" : "English (South Africa)" + }, { + "name" : "epo", + "short_description" : "eo", + "description" : "Esperanto" + }, { + "name" : "epo\tlegacy", + "short_description" : "", + "description" : "Esperanto (displaced semicolon and quote, obsolete)" + }, { + "name" : "np", + "short_description" : "ne", + "description" : "Nepali" + }, { + "name" : "ng", + "short_description" : "en", + "description" : "English (Nigeria)" + }, { + "name" : "ng\tigbo", + "short_description" : "ig", + "description" : "Igbo" + }, { + "name" : "ng\tyoruba", + "short_description" : "yo", + "description" : "Yoruba" + }, { + "name" : "ng\thausa", + "short_description" : "ha", + "description" : "Hausa" + }, { + "name" : "et", + "short_description" : "am", + "description" : "Amharic" + }, { + "name" : "sn", + "short_description" : "wo", + "description" : "Wolof" + }, { + "name" : "brai", + "short_description" : "brl", + "description" : "Braille" + }, { + "name" : "brai\tleft_hand", + "short_description" : "", + "description" : "Braille (left hand)" + }, { + "name" : "brai\tright_hand", + "short_description" : "", + "description" : "Braille (right hand)" + }, { + "name" : "tm", + "short_description" : "tk", + "description" : "Turkmen" + }, { + "name" : "tm\talt", + "short_description" : "", + "description" : "Turkmen (Alt-Q)" + }, { + "name" : "ml", + "short_description" : "bm", + "description" : "Bambara" + }, { + "name" : "ml\tfr-oss", + "short_description" : "fr", + "description" : "French (Mali, alternative)" + }, { + "name" : "ml\tus-mac", + "short_description" : "en", + "description" : "English (Mali, US Macintosh)" + }, { + "name" : "ml\tus-intl", + "short_description" : "en", + "description" : "English (Mali, US international)" + }, { + "name" : "tz", + "short_description" : "sw", + "description" : "Swahili (Tanzania)" + }, { + "name" : "ke", + "short_description" : "sw", + "description" : "Swahili (Kenya)" + }, { + "name" : "ke\tkik", + "short_description" : "ki", + "description" : "Kikuyu" + }, { + "name" : "bw", + "short_description" : "tn", + "description" : "Tswana" + }, { + "name" : "ph", + "short_description" : "ph", + "description" : "Filipino" + }, { + "name" : "ph\tqwerty-bay", + "short_description" : "", + "description" : "Filipino (QWERTY Baybayin)" + }, { + "name" : "ph\tcapewell-dvorak", + "short_description" : "", + "description" : "Filipino (Capewell-Dvorak Latin)" + }, { + "name" : "ph\tcapewell-dvorak-bay", + "short_description" : "", + "description" : "Filipino (Capewell-Dvorak Baybayin)" + }, { + "name" : "ph\tcapewell-qwerf2k6", + "short_description" : "", + "description" : "Filipino (Capewell-QWERF 2006 Latin)" + }, { + "name" : "ph\tcapewell-qwerf2k6-bay", + "short_description" : "", + "description" : "Filipino (Capewell-QWERF 2006 Baybayin)" + }, { + "name" : "ph\tcolemak", + "short_description" : "", + "description" : "Filipino (Colemak Latin)" + }, { + "name" : "ph\tcolemak-bay", + "short_description" : "", + "description" : "Filipino (Colemak Baybayin)" + }, { + "name" : "ph\tdvorak", + "short_description" : "", + "description" : "Filipino (Dvorak Latin)" + }, { + "name" : "ph\tdvorak-bay", + "short_description" : "", + "description" : "Filipino (Dvorak Baybayin)" + }, { + "name" : "md", + "short_description" : "md", + "description" : "Moldavian" + }, { + "name" : "md\tgag", + "short_description" : "gag", + "description" : "Moldavian (Gagauz)" + } +] diff --git a/src/json/sessions.json b/src/json/sessions.json new file mode 100644 index 0000000..3caec50 --- /dev/null +++ b/src/json/sessions.json @@ -0,0 +1,19 @@ +[ + { + "key" : "LXDE", + "name" : "LXDE", + "comment" : "LXDE - Lightweight X11 desktop environment" + }, { + "key" : "openbox", + "name" : "Openbox", + "comment" : "Log in using the Openbox window manager (without a session manager)" + }, { + "key" : "twm", + "name" : "TWM", + "comment" : "The Tab Window Manager" + }, { + "key" : "tinywm", + "name" : "Tinywm", + "comment" : "Ridiculously tiny window manager" + } +] diff --git a/src/json/users.json b/src/json/users.json new file mode 100644 index 0000000..bd3b2b8 --- /dev/null +++ b/src/json/users.json @@ -0,0 +1,138 @@ +[ + { + "display_name" : "Alexander the Great", + "home_directory" : "/home/basileusalex", + "image" : "/home/basileusalex/.face", + "language" : "gr_GR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "basileusalex" + }, { + "display_name" : "Napoleon Bonaparte", + "home_directory" : "/home/napoleonib", + "image" : "/home/napoleonib/.face", + "language" : "fr_FR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "napoleonib" + },{ + "display_name" : "Gaius Octavius", + "home_directory" : "/home/imperatoraugustus", + "image" : "/home/imperatoraugustus/.face", + "language" : "it_IT", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "imperatoraugustus" + },{ + "display_name" : "Sir Winston Leonard Spencer-Churchill", + "home_directory" : "/home/honourablewinston", + "image" : "/home/honourablewinston/.face", + "language" : "en_GB", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "honourablewinston" + },{ + "display_name" : "Peter Alekseyevich Romanov", + "home_directory" : "/home/peteralexeyevich", + "image" : "/home/peteralexeyevich/.face", + "language" : "ru_RU", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "peteralexeyevich" + },{ + "display_name" : "John Fitzgerald Kennedy", + "home_directory" : "/home/jackkennedy", + "image" : "/home/jackkennedy/.face", + "language" : "en_US", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "jackkennedy" + },{ + "display_name" : "Muhammed bin Murad", + "home_directory" : "/home/mehmedisani", + "image" : "/home/mehmedisani/.face", + "language" : "tr_TR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "mehmedisani" + },{ + "display_name" : "Gustavus Adolphus", + "home_directory" : "/home/gustav2", + "image" : "/home/gustav2/.face", + "language" : "sv_SE", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "gustav2" + },{ + "display_name" : "Mao Zedong", + "home_directory" : "/home/chairmanzedong", + "image" : "/home/chairmanzedong/.face", + "language" : "tr_TR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "chairmanzedong" + },{ + "display_name" : "Erik Thorvaldsson", + "home_directory" : "/home/redthorvald", + "image" : "/home/redthorvald/.face", + "language" : "no_NO", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "redthorvald" + },{ + "display_name" : "Cristoforo Colombo", + "home_directory" : "/home/cristocolombo", + "image" : "/home/cristocolombo/.face", + "language" : "it_IT", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "cristocolombo" + },{ + "display_name" : "Willem van Oranje", + "home_directory" : "/home/silentwill", + "image" : "/home/silentwill/.face", + "language" : "nl_NL", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "silentwill" + },{ + "display_name" : "Genghis Khan", + "home_directory" : "/home/khagantemujin", + "image" : "/home/khagantemujin/.face", + "language" : "mn_MN", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "khagantemujin" + },{ + "display_name" : "Mikhail Sergeyevich Gorbachev", + "home_directory" : "/home/gorbachev", + "image" : "/home/gorbachev/.face", + "language" : "ru_RU", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "gorbachev" + },{ + "display_name" : "Meiji", + "home_directory" : "/home/meijitaitei", + "image" : "/home/meijitaitei/.face", + "language" : "jp_JP", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "meijitaitei" + } +]