firebaseAuthBundle top-level property

MasonBundle firebaseAuthBundle
final

Implementation

final firebaseAuthBundle = MasonBundle.fromJson(<String, dynamic>{
  "files": [
    {
      "path": "lib/core/auth/firebase_auth_service.dart",
      "data":
          "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKCmltcG9ydCAncGFja2FnZTpmaXJlYmFzZV9hdXRoL2ZpcmViYXNlX2F1dGguZGFydCc7CmltcG9ydCAncGFja2FnZTpmbHV0dGVyL2ZvdW5kYXRpb24uZGFydCc7CgppbXBvcnQgJ2F1dGhfc2VydmljZS5kYXJ0JzsKCi8vLyBSZXR1cm5zIHRoZSBzaWduLWluIHNlcnZpY2Ugb2YgdGhlIGFwcCBvbiBGaXJlYmFzZSBBdXRoZW50aWNhdGlvbiwgd2l0aAovLy8gdGhlIHVzZXIgd2hvIGlzIHNpZ25lZCBpbiBvbiB0aGlzIGRldmljZS4KLy8vCi8vLyBGaXJlYmFzZSBpcyBpbml0aWFsaXplZCBmaXJzdCwgYXMgYGJvb3RzdHJhcCgpYCBkb2VzLiBGaXJlYmFzZSBrZWVwcyB0aGUKLy8vIHVzZXIgb24gdGhlIGRldmljZSBhbmQgaGFuZHMgdGhhdCB1c2VyIG92ZXIgd2hlbiBpdCBpcyBpbml0aWFsaXplZCwgc28KLy8vIHRoZSBzZXJ2aWNlIGhhcyB0aGUgdXNlciBhdCBvbmNlLCB3aXRob3V0IGEgcmVxdWVzdCB0byB0aGUgc2VydmVyLgpBdXRoU2VydmljZSBjcmVhdGVGaXJlYmFzZUF1dGhTZXJ2aWNlKCkgPT4KICAgIEZpcmViYXNlQXV0aFNlcnZpY2UoRmlyZWJhc2VBdXRoLmluc3RhbmNlKTsKCi8vLyBUaGUgY29kZXMgd2l0aCB3aGljaCBGaXJlYmFzZSBhbnN3ZXJzIGEgY2FsbCBmb3IgdGhlIHVzZXIgd2hvIGlzIHNpZ25lZAovLy8gaW4gd2hlbiB0aGUgc2Vzc2lvbiBvZiB0aGF0IHVzZXIgaGFzIGVuZGVkIG9uIHRoZSBzZXJ2ZXIsIGFzIHdoZW4gdGhlCi8vLyBhY2NvdW50IHdhcyBkZWxldGVkLCBvciBpdHMgcGFzc3dvcmQgY2hhbmdlZCwgb24gYW5vdGhlciBkZXZpY2UuCmNvbnN0IF9lbmRlZFNlc3Npb24gPSB7CiAgJ3VzZXItdG9rZW4tZXhwaXJlZCcsCiAgJ2ludmFsaWQtdXNlci10b2tlbicsCiAgJ3VzZXItbm90LWZvdW5kJywKICAnbm8tY3VycmVudC11c2VyJywKfTsKCi8vLyBTaWduLWluIHdpdGgKLy8vIFtGaXJlYmFzZSBBdXRoZW50aWNhdGlvbl0oaHR0cHM6Ly9maXJlYmFzZS5nb29nbGUuY29tL2RvY3MvYXV0aCksIHdpdGgKLy8vIGFuIGVtYWlsIGFkZHJlc3MgYW5kIGEgcGFzc3dvcmQsIGFuZCBhcyBhbiBhbm9ueW1vdXMgdXNlci4KLy8vCi8vLyBUaGUgY29kZSBvZiB0aGUgYXBwIGRvZXMgbm90IHVzZSBpdDogaXQgc2lnbnMgaW4gdGhyb3VnaCBgYXBwU2Vzc2lvbmAgb2YKLy8vIGBhcHBfc2Vzc2lvbi5kYXJ0YC4KLy8vCi8vLyBUaGUgd2F5cyB0byBzaWduIGluIGFyZSBlbmFibGVkIGluIHRoZSBGaXJlYmFzZSBwcm9qZWN0LCBub3QgaGVyZToKLy8vIEVtYWlsL1Bhc3N3b3JkLCBhbmQgQW5vbnltb3VzIGZvciBhbiBhcHAgdGhhdCBzaWducyBpbiBhbm9ueW1vdXMgdXNlcnMuCi8vLyBgdG9vbC9lbmFibGVfZmlyZWJhc2Vfc2lnbl9pbi5kYXJ0YCBlbmFibGVzIHRoZW0uIFVudGlsIHRoZXkgYXJlLCBhIGNhbGwKLy8vIGZhaWxzIHdpdGggW0F1dGhGYWlsdXJlUmVhc29uLm5vdENvbmZpZ3VyZWRdLCBhbmQgaXRzCi8vLyBbQXV0aEZhaWx1cmUuZGV2ZWxvcGVySGludF0gdGVsbHMgaG93IHRvIGVuYWJsZSB0aGVtLgovLy8KLy8vIEFuIGVtcHR5IGFkZHJlc3Mgb3IgcGFzc3dvcmQgZmFpbHMgaGVyZSwgYmVmb3JlIEZpcmViYXNlIGlzIGFza2VkLCBzaW5jZQovLy8gQW5kcm9pZCBhbmQgaU9TIGFuc3dlciBpdCB3aXRoIGRpZmZlcmVudCBjb2RlczogYW4gZW1wdHkgYWRkcmVzcyB3aXRoCi8vLyBbQXV0aEZhaWx1cmVSZWFzb24uaW52YWxpZEVtYWlsXSwgYW5kIGFuIGVtcHR5IHBhc3N3b3JkIHdpdGgKLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5pbnZhbGlkQ3JlZGVudGlhbHNdIGluIFtzaWduSW5dIGFuZCB3aXRoCi8vLyBbQXV0aEZhaWx1cmVSZWFzb24ud2Vha1Bhc3N3b3JkXSBpbiBbc2lnblVwXSBhbmQgW2xpbmtQYXNzd29yZF0uCmZpbmFsIGNsYXNzIEZpcmViYXNlQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBBdXRoU2VydmljZSB7CiAgLy8vIENyZWF0ZXMgdGhlIHNlcnZpY2Ugb24gW19hdXRoXS4KICBGaXJlYmFzZUF1dGhTZXJ2aWNlKHRoaXMuX2F1dGgpOwoKICBmaW5hbCBGaXJlYmFzZUF1dGggX2F1dGg7CgogIC8vLyBUZWxscyB0aGF0IHRoZSB1c2VyIG1heSBoYXZlIGNoYW5nZWQ6IGFmdGVyIGVhY2ggY2FsbCBoZXJlLCBhbmQgd2hlbgogIC8vLyBGaXJlYmFzZSB0ZWxscyBvZiBhIGNoYW5nZSB0aGF0IG5vIGNhbGwgaGVyZSBtYWRlLCBzdWNoIGFzIHRoZSBlbmQgb2YKICAvLy8gdGhlIHNlc3Npb24gb2YgdGhlIHVzZXIgb24gdGhlIHNlcnZlci4gSXQgZm9sbG93cyBGaXJlYmFzZSBvbmx5IHdoaWxlCiAgLy8vIGl0IGhhcyBhIGxpc3RlbmVyLgogIGxhdGUgZmluYWwgU3RyZWFtQ29udHJvbGxlcjx2b2lkPiBfY2hhbmdlcyA9IFN0cmVhbUNvbnRyb2xsZXIuYnJvYWRjYXN0KAogICAgb25MaXN0ZW46ICgpID0+IF9mcm9tRmlyZWJhc2UgPSBfYXV0aC51c2VyQ2hhbmdlcygpLmxpc3RlbigKICAgICAgICAgIChfKSA9PiBfY2hhbmdlcy5hZGQobnVsbCksCiAgICAgICAgICBvbkVycm9yOiBfY2hhbmdlcy5hZGRFcnJvciwKICAgICAgICApLAogICAgb25DYW5jZWw6ICgpID0+IF9mcm9tRmlyZWJhc2U/LmNhbmNlbCgpLAogICk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVc2VyPz4/IF9mcm9tRmlyZWJhc2U7CgogIEBvdmVycmlkZQogIEF1dGhVc2VyPyBnZXQgY3VycmVudFVzZXIgewogICAgZmluYWwgdXNlciA9IF9hdXRoLmN1cnJlbnRVc2VyOwogICAgaWYgKHVzZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBlbWFpbCA9IHVzZXIuZW1haWw7CiAgICByZXR1cm4gQXV0aFVzZXIoCiAgICAgIHVpZDogdXNlci51aWQsCiAgICAgIGlzQW5vbnltb3VzOiB1c2VyLmlzQW5vbnltb3VzLAogICAgICAvLyBBbmRyb2lkIGhhcyBhbiBlbXB0eSBhZGRyZXNzLCBub3Qgbm9uZSwgZm9yIGFuIGFub255bW91cyB1c2VyIHdob20KICAgICAgLy8gaXQga2VwdCBvbiB0aGUgZGV2aWNlLgogICAgICBlbWFpbDogZW1haWwgPT0gbnVsbCB8fCBlbWFpbC5pc0VtcHR5ID8gbnVsbCA6IGVtYWlsLAogICAgKTsKICB9CgogIC8vLyBFYWNoIGV2ZW50IGhhcyB0aGUgdXNlciBvZiB0aGUgbW9tZW50IGluIHdoaWNoIGEgbGlzdGVuZXIgZ2V0cyBpdCwgc28KICAvLy8gYSBsaXN0ZW5lciBuZXZlciBoZWFycyBvZiBhIHVzZXIgd2hvIGlzIG5vdCBbY3VycmVudFVzZXJdIGFueSBtb3JlLgogIEBvdmVycmlkZQogIFN0cmVhbTxBdXRoVXNlcj8+IGdldCB1c2VyQ2hhbmdlcyA9PiBfY2hhbmdlcy5zdHJlYW0ubWFwKChfKSA9PiBjdXJyZW50VXNlcik7CgogIEBvdmVycmlkZQogIEZ1dHVyZTx2b2lkPiBzaWduSW4oe3JlcXVpcmVkIFN0cmluZyBlbWFpbCwgcmVxdWlyZWQgU3RyaW5nIHBhc3N3b3JkfSkgPT4KICAgICAgX3J1bigoKSB7CiAgICAgICAgX2NoZWNrR2l2ZW4oZW1haWwsIHBhc3N3b3JkLCBBdXRoRmFpbHVyZVJlYXNvbi5pbnZhbGlkQ3JlZGVudGlhbHMpOwogICAgICAgIHJldHVybiBfYXV0aC5zaWduSW5XaXRoRW1haWxBbmRQYXNzd29yZCgKICAgICAgICAgIGVtYWlsOiBlbWFpbCwKICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCwKICAgICAgICApOwogICAgICB9KTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPHZvaWQ+IHNpZ25VcCh7cmVxdWlyZWQgU3RyaW5nIGVtYWlsLCByZXF1aXJlZCBTdHJpbmcgcGFzc3dvcmR9KSA9PgogICAgICBfcnVuKCgpIHsKICAgICAgICBfY2hlY2tHaXZlbihlbWFpbCwgcGFzc3dvcmQsIEF1dGhGYWlsdXJlUmVhc29uLndlYWtQYXNzd29yZCk7CiAgICAgICAgcmV0dXJuIF9hdXRoLmNyZWF0ZVVzZXJXaXRoRW1haWxBbmRQYXNzd29yZCgKICAgICAgICAgIGVtYWlsOiBlbWFpbCwKICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCwKICAgICAgICApOwogICAgICB9KTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPHZvaWQ+IGxpbmtQYXNzd29yZCh7CiAgICByZXF1aXJlZCBTdHJpbmcgZW1haWwsCiAgICByZXF1aXJlZCBTdHJpbmcgcGFzc3dvcmQsCiAgfSkgPT4KICAgICAgX3J1bkZvclVzZXIoKHVzZXIpIHsKICAgICAgICBfY2hlY2tHaXZlbihlbWFpbCwgcGFzc3dvcmQsIEF1dGhGYWlsdXJlUmVhc29uLndlYWtQYXNzd29yZCk7CiAgICAgICAgcmV0dXJuIHVzZXIubGlua1dpdGhDcmVkZW50aWFsKAogICAgICAgICAgRW1haWxBdXRoUHJvdmlkZXIuY3JlZGVudGlhbChlbWFpbDogZW1haWwsIHBhc3N3b3JkOiBwYXNzd29yZCksCiAgICAgICAgKTsKICAgICAgfSk7CgogIC8vLyBXaGlsZSBhbiBhbm9ueW1vdXMgdXNlciBpcyBzaWduZWQgaW4sIEZpcmViYXNlIGFuc3dlcnMgd2l0aCB0aGF0IHVzZXIKICAvLy8gYW5kIGNyZWF0ZXMgbm8gb3RoZXIuCiAgQG92ZXJyaWRlCiAgRnV0dXJlPHZvaWQ+IHNpZ25JbkFub255bW91c2x5KCkgPT4gX3J1bihfYXV0aC5zaWduSW5Bbm9ueW1vdXNseSk7CgogIC8vLyBGaXJlYmFzZSBzZW5kcyB0aGUgbWVzc2FnZSBmcm9tIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgcHJvamVjdAogIC8vLyAoQXV0aGVudGljYXRpb24gPiBUZW1wbGF0ZXMgaW4gdGhlIEZpcmViYXNlIGNvbnNvbGUpLgogIEBvdmVycmlkZQogIEZ1dHVyZTx2b2lkPiBzZW5kUGFzc3dvcmRSZXNldChTdHJpbmcgZW1haWwpID0+IF9ydW4oKCkgYXN5bmMgewogICAgICAgIF9jaGVja0dpdmVuKGVtYWlsKTsKICAgICAgICB7e3tlbWFpbF9sYW5ndWFnZX19fQogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCBfYXV0aC5zZW5kUGFzc3dvcmRSZXNldEVtYWlsKGVtYWlsOiBlbWFpbCk7CiAgICAgICAgfSBvbiBGaXJlYmFzZUF1dGhFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAvLyBBIHByb2plY3Qgd2l0aG91dCB0aGUgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoZSBlbnVtZXJhdGlvbiBvZgogICAgICAgICAgLy8gZW1haWwgYWRkcmVzc2VzIHRlbGxzIHRoYXQgYW4gYWRkcmVzcyBoYXMgbm8gYWNjb3VudC4KICAgICAgICAgIGlmIChlcnJvci5jb2RlICE9ICd1c2VyLW5vdC1mb3VuZCcpIHJldGhyb3c7CiAgICAgICAgfQogICAgICB9KTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPHZvaWQ+IHNpZ25PdXQoKSA9PiBfcnVuKF9hdXRoLnNpZ25PdXQpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8dm9pZD4gZGVsZXRlQWNjb3VudCgpID0+IF9ydW5Gb3JVc2VyKCh1c2VyKSBhc3luYyB7CiAgICAgICAgYXdhaXQgdXNlci5kZWxldGUoKTsKICAgICAgICAvLyBGaXJlYmFzZSBzaWducyBhIGRlbGV0ZWQgdXNlciBvdXQsIGJ1dCB0aGUgcGx1Z2luIGtlZXBzIHRoYXQgdXNlcgogICAgICAgIC8vIGFzIHRoZSBjdXJyZW50IG9uZSB1bnRpbCB0aGUgcGxhdGZvcm0gdGVsbHMgaXQgb2YgdGhlIHNpZ24tb3V0LAogICAgICAgIC8vIHdoaWNoIG1heSBjb21lIGFmdGVyIHRoaXMgY2FsbCBpcyBvdmVyLgogICAgICAgIGF3YWl0IF9hdXRoLnNpZ25PdXQoKTsKICAgICAgfSk7CgogIC8vLyBSdW5zIFtjYWxsXSBmb3IgdGhlIHVzZXIgd2hvIGlzIHNpZ25lZCBpbi4KICAvLy8KICAvLy8gSXQgZmFpbHMgd2l0aCBbQXV0aEZhaWx1cmVSZWFzb24ucmVjZW50U2lnbkluUmVxdWlyZWRdIHdoZW4gbm9ib2R5IGlzCiAgLy8vIHNpZ25lZCBpbiwgYW5kIHdoZW4gRmlyZWJhc2UgYW5zd2VycyB0aGF0IHRoZSBzZXNzaW9uIG9mIHRoZSB1c2VyIGhhcwogIC8vLyBlbmRlZDogdGhlIHVzZXIgaXMgdGhlbiBzaWduZWQgb3V0IG9uIHRoaXMgZGV2aWNlIGZpcnN0LgogIEZ1dHVyZTx2b2lkPiBfcnVuRm9yVXNlcihGdXR1cmU8dm9pZD4gRnVuY3Rpb24oVXNlciB1c2VyKSBjYWxsKSA9PgogICAgICBfcnVuKCgpIGFzeW5jIHsKICAgICAgICBmaW5hbCB1c2VyID0gX2F1dGguY3VycmVudFVzZXI7CiAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgY29uc3QgQXV0aEZhaWx1cmUoQXV0aEZhaWx1cmVSZWFzb24ucmVjZW50U2lnbkluUmVxdWlyZWQpOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgY2FsbCh1c2VyKTsKICAgICAgICB9IG9uIEZpcmViYXNlQXV0aEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGlmICghX2VuZGVkU2Vzc2lvbi5jb250YWlucyhlcnJvci5jb2RlKSkgcmV0aHJvdzsKICAgICAgICAgIGF3YWl0IF9hdXRoLnNpZ25PdXQoKTsKICAgICAgICAgIHRocm93IGNvbnN0IEF1dGhGYWlsdXJlKEF1dGhGYWlsdXJlUmVhc29uLnJlY2VudFNpZ25JblJlcXVpcmVkKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAvLy8gRmFpbHMgZm9yIGFuIFtlbWFpbF0gdGhhdCBpcyBlbXB0eSB3aXRoCiAgLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5pbnZhbGlkRW1haWxdLCBhbmQgZm9yIGEgW3Bhc3N3b3JkXSB0aGF0IGlzIGVtcHR5CiAgLy8vIHdpdGggW3dpdGhvdXRQYXNzd29yZF0sIGJlZm9yZSBGaXJlYmFzZSBpcyBhc2tlZC4gQW5kcm9pZCByZWZ1c2VzIGFuCiAgLy8vIGVtcHR5IHRleHQgd2l0aCBhIGNvZGUgdGhhdCBoYXMgbm8gcmVhc29uLCBhbmQgaU9TIGFuc3dlcnMgYW4gZW1wdHkKICAvLy8gcGFzc3dvcmQgYXMgYSB3cm9uZyBvbmUsIHNvIHRoZSBzZXJ2aWNlIGRlY2lkZXMgZm9yIGJvdGguCiAgdm9pZCBfY2hlY2tHaXZlbigKICAgIFN0cmluZyBlbWFpbCwgWwogICAgU3RyaW5nPyBwYXNzd29yZCwKICAgIEF1dGhGYWlsdXJlUmVhc29uIHdpdGhvdXRQYXNzd29yZCA9IEF1dGhGYWlsdXJlUmVhc29uLndlYWtQYXNzd29yZCwKICBdKSB7CiAgICBpZiAoZW1haWwuaXNFbXB0eSkgewogICAgICB0aHJvdyBjb25zdCBBdXRoRmFpbHVyZShBdXRoRmFpbHVyZVJlYXNvbi5pbnZhbGlkRW1haWwpOwogICAgfQogICAgaWYgKHBhc3N3b3JkICE9IG51bGwgJiYgcGFzc3dvcmQuaXNFbXB0eSkgewogICAgICB0aHJvdyBBdXRoRmFpbHVyZSh3aXRob3V0UGFzc3dvcmQpOwogICAgfQogIH0KCiAgLy8vIFJ1bnMgW2NhbGxdLCB3aGljaCB0aGVuIGZhaWxzIG9ubHkgd2l0aCBhbiBbQXV0aEZhaWx1cmVdLCBhbmQgdGVsbHMKICAvLy8gb2YgdGhlIHVzZXIgdGhhdCBpdCBsZWF2ZXMsIGFsc28gd2hlbiBpdCBmYWlsZWQuCiAgRnV0dXJlPHZvaWQ+IF9ydW4oRnV0dXJlPHZvaWQ+IEZ1bmN0aW9uKCkgY2FsbCkgYXN5bmMgewogICAgdHJ5IHsKICAgICAgYXdhaXQgY2FsbCgpOwogICAgfSBvbiBPYmplY3QgY2F0Y2ggKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgIEVycm9yLnRocm93V2l0aFN0YWNrVHJhY2UoX2ZhaWx1cmVPZihlcnJvciksIHN0YWNrVHJhY2UpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX2NoYW5nZXMuYWRkKG51bGwpOwogICAgfQogIH0KCiAgLy8vIFRoZSBmYWlsdXJlIG9mIGEgY2FsbCB0aGF0IGZhaWxlZCB3aXRoIFtlcnJvcl06IHRoZSByZWFzb24gZm9yIHRoZQogIC8vLyBjb2RlIG9mIEZpcmViYXNlLiBBIGNvZGUgdGhhdCBoYXMgbm8gcmVhc29uIHlldCBnZXRzIG9uZSBoZXJlLgogIEF1dGhGYWlsdXJlIF9mYWlsdXJlT2YoT2JqZWN0IGVycm9yKSB7CiAgICBpZiAoZXJyb3IgaXMgQXV0aEZhaWx1cmUpIHJldHVybiBlcnJvcjsKICAgIGlmIChlcnJvciBpcyEgRmlyZWJhc2VBdXRoRXhjZXB0aW9uKSB7CiAgICAgIHJldHVybiBBdXRoRmFpbHVyZShBdXRoRmFpbHVyZVJlYXNvbi51bmtub3duLCBkZXZlbG9wZXJIaW50OiAnJGVycm9yJyk7CiAgICB9CiAgICBmaW5hbCByZWFzb24gPSBzd2l0Y2ggKGVycm9yLmNvZGUpIHsKICAgICAgLy8gRmlyZWJhc2UgYW5zd2VycyBhIHdyb25nIHBhc3N3b3JkIGFuZCBhbiBhZGRyZXNzIHdpdGhvdXQgYW4gYWNjb3VudAogICAgICAvLyBhbGlrZSwgdW5sZXNzIHRoZSBwcm9qZWN0IGlzIHdpdGhvdXQgdGhlIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUKICAgICAgLy8gZW51bWVyYXRpb24gb2YgZW1haWwgYWRkcmVzc2VzLgogICAgICAnaW52YWxpZC1jcmVkZW50aWFsJyB8fAogICAgICAnaW52YWxpZC1sb2dpbi1jcmVkZW50aWFscycgfHwKICAgICAgJ3dyb25nLXBhc3N3b3JkJyB8fAogICAgICAndXNlci1ub3QtZm91bmQnID0+CiAgICAgICAgQXV0aEZhaWx1cmVSZWFzb24uaW52YWxpZENyZWRlbnRpYWxzLAogICAgICAnZW1haWwtYWxyZWFkeS1pbi11c2UnIHx8CiAgICAgICdjcmVkZW50aWFsLWFscmVhZHktaW4tdXNlJyA9PgogICAgICAgIEF1dGhGYWlsdXJlUmVhc29uLmVtYWlsSW5Vc2UsCiAgICAgICd3ZWFrLXBhc3N3b3JkJyB8fAogICAgICAncGFzc3dvcmQtZG9lcy1ub3QtbWVldC1yZXF1aXJlbWVudHMnID0+CiAgICAgICAgQXV0aEZhaWx1cmVSZWFzb24ud2Vha1Bhc3N3b3JkLAogICAgICAnaW52YWxpZC1lbWFpbCcgfHwgJ21pc3NpbmctZW1haWwnID0+IEF1dGhGYWlsdXJlUmVhc29uLmludmFsaWRFbWFpbCwKICAgICAgJ3VzZXItZGlzYWJsZWQnID0+IEF1dGhGYWlsdXJlUmVhc29uLnVzZXJEaXNhYmxlZCwKICAgICAgJ3Rvby1tYW55LXJlcXVlc3RzJyA9PiBBdXRoRmFpbHVyZVJlYXNvbi50b29NYW55QXR0ZW1wdHMsCiAgICAgICduZXR3b3JrLXJlcXVlc3QtZmFpbGVkJyA9PiBBdXRoRmFpbHVyZVJlYXNvbi5uZXR3b3JrLAogICAgICAncmVxdWlyZXMtcmVjZW50LWxvZ2luJyA9PiBBdXRoRmFpbHVyZVJlYXNvbi5yZWNlbnRTaWduSW5SZXF1aXJlZCwKICAgICAgXyA9PiBudWxsLAogICAgfTsKICAgIGlmIChyZWFzb24gIT0gbnVsbCkgcmV0dXJuIEF1dGhGYWlsdXJlKHJlYXNvbik7CiAgICAvLyBUaGUgbWVzc2FnZSBvbiBvbmUgbGluZTogdGhhdCBvZiBpT1MgbWF5IGJlIHRoZSBkZXNjcmlwdGlvbiBvZiBhbgogICAgLy8gZXJyb3Igb3ZlciBtYW55IGxpbmVzLgogICAgZmluYWwgbWVzc2FnZSA9CiAgICAgICAgKGVycm9yLm1lc3NhZ2UgPz8gJycpLnJlcGxhY2VBbGwoUmVnRXhwKHInXHMrJyksICcgJykudHJpbSgpOwogICAgZmluYWwgYW5zd2VyID0gbWVzc2FnZS5pc0VtcHR5ID8gZXJyb3IuY29kZSA6ICcke2Vycm9yLmNvZGV9OiAkbWVzc2FnZSc7CiAgICBmaW5hbCBwcm9qZWN0ID0gX2F1dGguYXBwLm9wdGlvbnMucHJvamVjdElkOwogICAgZmluYWwgZW5hYmxlID0gJ3J1biBgZGFydCB0b29sL2VuYWJsZV9maXJlYmFzZV9zaWduX2luLmRhcnRgIGluIHRoZSAnCiAgICAgICAgJ2RpcmVjdG9yeSBvZiB0aGUgYXBwLCBvciBlbmFibGUgRW1haWwvUGFzc3dvcmQsIGFuZCBBbm9ueW1vdXMgZm9yICcKICAgICAgICAnYW4gYXBwIHRoYXQgc2lnbnMgaW4gYW5vbnltb3VzIHVzZXJzLCBpbiB0aGUgRmlyZWJhc2UgY29uc29sZSAnCiAgICAgICAgJ3VuZGVyIEF1dGhlbnRpY2F0aW9uID4gU2lnbi1pbiBtZXRob2Q6ICcKICAgICAgICAnaHR0cHM6Ly9jb25zb2xlLmZpcmViYXNlLmdvb2dsZS5jb20vcHJvamVjdC8kcHJvamVjdC8nCiAgICAgICAgJ2F1dGhlbnRpY2F0aW9uL3Byb3ZpZGVycyc7CiAgICAvLyBBIHdheSB0byBzaWduIGluIHRoYXQgaXMgbm90IGVuYWJsZWQsIHdoaWNoIEZpcmViYXNlIHRlbGxzIGJ5IGl0cwogICAgLy8gY29kZSwgYW5kIGEgcHJvamVjdCBpbiB3aGljaCBBdXRoZW50aWNhdGlvbiB3YXMgbmV2ZXIgc2V0IHVwLCB3aGljaAogICAgLy8gaXQgdGVsbHMgb25seSBpbiBpdHMgbWVzc2FnZS4KICAgIGNvbnN0IG5vQ29uZmlndXJhdGlvbiA9ICdDT05GSUdVUkFUSU9OX05PVF9GT1VORCc7CiAgICBmaW5hbCBub3RFbmFibGVkID0gc3dpdGNoIChlcnJvci5jb2RlKSB7CiAgICAgICdvcGVyYXRpb24tbm90LWFsbG93ZWQnIHx8ICdhZG1pbi1yZXN0cmljdGVkLW9wZXJhdGlvbicgPT4gZXJyb3IuY29kZSwKICAgICAgXyB3aGVuIG1lc3NhZ2UuY29udGFpbnMobm9Db25maWd1cmF0aW9uKSA9PgogICAgICAgICcke2Vycm9yLmNvZGV9LCAkbm9Db25maWd1cmF0aW9uJywKICAgICAgXyA9PiBudWxsLAogICAgfTsKICAgIGlmIChub3RFbmFibGVkICE9IG51bGwpIHsKICAgICAgcmV0dXJuIEF1dGhGYWlsdXJlKAogICAgICAgIEF1dGhGYWlsdXJlUmVhc29uLm5vdENvbmZpZ3VyZWQsCiAgICAgICAgZGV2ZWxvcGVySGludDogJ1NpZ24taW4gaXMgbm90IGVuYWJsZWQgaW4gdGhlIEZpcmViYXNlIHByb2plY3QgJwogICAgICAgICAgICAnJHByb2plY3QgKEZpcmViYXNlIGFuc3dlcmVkICRub3RFbmFibGVkKS4gVG8gZml4IGl0LCAkZW5hYmxlJywKICAgICAgKTsKICAgIH0KICAgIC8vIE9uIGlPUyBhbmQgbWFjT1MsIEZpcmViYXNlIG1heSBhbnN3ZXIgZm9yIHN1Y2ggYSBwcm9qZWN0IHdpdGggYW4KICAgIC8vIGludGVybmFsIGVycm9yIHdob3NlIG1lc3NhZ2Ugc2F5cyBubyBtb3JlLCB3aGljaCBub3RoaW5nIHRlbGxzIGZyb20KICAgIC8vIGFub3RoZXIgaW50ZXJuYWwgZXJyb3IuCiAgICBpZiAoZXJyb3IuY29kZSA9PSAnaW50ZXJuYWwtZXJyb3InICYmCiAgICAgICAgKGRlZmF1bHRUYXJnZXRQbGF0Zm9ybSA9PSBUYXJnZXRQbGF0Zm9ybS5pT1MgfHwKICAgICAgICAgICAgZGVmYXVsdFRhcmdldFBsYXRmb3JtID09IFRhcmdldFBsYXRmb3JtLm1hY09TKSkgewogICAgICByZXR1cm4gQXV0aEZhaWx1cmUoCiAgICAgICAgQXV0aEZhaWx1cmVSZWFzb24ubm90Q29uZmlndXJlZCwKICAgICAgICBkZXZlbG9wZXJIaW50OiAnRmlyZWJhc2UgcmVwb3J0ZWQgYW4gaW50ZXJuYWwgZXJyb3IgKCRhbnN3ZXIpLCB3aGljaCAnCiAgICAgICAgICAgICdpcyBhbHNvIHdoYXQgaXQgYW5zd2VycyBvbiBpT1MgYW5kIG1hY09TIHdoZW4gc2lnbi1pbiBpcyBub3QgJwogICAgICAgICAgICAnZW5hYmxlZCBpbiB0aGUgRmlyZWJhc2UgcHJvamVjdCAkcHJvamVjdC4gSWYgdGhhdCBpcyB0aGUgJwogICAgICAgICAgICAnY2F1c2UsICRlbmFibGUnLAogICAgICApOwogICAgfQogICAgcmV0dXJuIEF1dGhGYWlsdXJlKEF1dGhGYWlsdXJlUmVhc29uLnVua25vd24sIGRldmVsb3BlckhpbnQ6IGFuc3dlcik7CiAgfQp9Cg==",
      "type": "text"
    },
    {
      "path": "tool/enable_firebase_sign_in.dart",
      "data":
          "Ly8gRW5hYmxlcyB0aGUgc2lnbi1pbiBtZXRob2RzIG9mIHRoZSBhcHAgaW4gaXRzIEZpcmViYXNlIHByb2plY3Q6Ci8vIEVtYWlsL1Bhc3N3b3JkLCBhbmQgQW5vbnltb3VzIHdoZW4gdGhlIGFwcCBpcyBpbiB0aGUgbW9kZSBgYW5vbnltb3VzYCwKLy8gd2hpY2ggdGhlIHNjcmlwdCByZWFkcyBmcm9tIGBhdXRoTW9kZWAgb2YgdGhlIGFwcC4KLy8KLy8gICAgIGRhcnQgdG9vbC9lbmFibGVfZmlyZWJhc2Vfc2lnbl9pbi5kYXJ0Ci8vCi8vIFRoZSBwcm9qZWN0IGlzIHRoZSBvbmUgdGhhdCBgZmx1dHRlcmZpcmUgY29uZmlndXJlYCB3cm90ZSBpbnRvCi8vIGBmaXJlYmFzZS5qc29uYCBvZiB0aGUgYXBwLCBvciB0aGUgb25lIHRoYXQgYC0tcHJvamVjdCA8aWQ+YCBuYW1lcy4gVGhlCi8vIHNjcmlwdCBzYXlzIHdoaWNoLCBhbmQgZ2l2ZXMgdGhlIEZpcmViYXNlIENMSSB0aGF0IHByb2plY3QgYW5kIG5vIG90aGVyLgovLwovLyBUaGUgc2NyaXB0IGVuYWJsZXMgdGhlIG1ldGhvZHMgd2l0aCBgZmlyZWJhc2UgZGVwbG95IC0tb25seSBhdXRoYCBvZiB0aGUKLy8gRmlyZWJhc2UgQ0xJLCB3aGljaCBlbmFibGVzIHdoYXQgaXRzIGNvbmZpZ3VyYXRpb24gbmFtZXMgYW5kIGRpc2FibGVzCi8vIG5vdGhpbmcuIEl0IHJ1bnMgdGhlIEZpcmViYXNlIENMSSBpbiBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIHdpdGggYQovLyBjb25maWd1cmF0aW9uIG9mIGl0cyBvd24gdGhlcmUsIHNvIG5vIGZpbGUgb2YgdGhlIGFwcCBjaGFuZ2VzOgovLyBgZmlyZWJhc2UuanNvbmAgb2YgdGhlIGFwcCBzdGF5cyBhcyBpdCBpcywgYW5kIGEgYGZpcmViYXNlIGRlcGxveWAgb2YgdGhlCi8vIGFwcCBkb2VzIG5vdCB0b3VjaCB0aGUgc2lnbi1pbiBtZXRob2RzLiBUaGUgRmlyZWJhc2UgQ0xJIGtlZXBzIGl0cyBsb2cgaW4KLy8gdGhlIGRpcmVjdG9yeSB0aGF0IGl0IHJ1bnMgaW4sIHNvIHRoZSBsb2cgaXMgbm90IGluIHRoZSBhcHAgZWl0aGVyLgovLwovLyBUaGUgc2NyaXB0IHJlbW92ZXMgdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlbiB0aGUgRmlyZWJhc2UgQ0xJIGVuZHMuCi8vIEFmdGVyIEN0cmwrQyBpdCB3YWl0cyBmb3IgdGhlIEZpcmViYXNlIENMSSB0byBlbmQsIHJlbW92ZXMgdGhlIGRpcmVjdG9yeQovLyBhbmQgZXhpdHMgd2l0aCB0aGUgY29kZSAxMzAuIEEgc2NyaXB0IHRoYXQgaXMgc3RvcHBlZCBpbiBhbm90aGVyIHdheSwgYXMKLy8gd2l0aCBga2lsbGAsIGxlYXZlcyB0aGUgZGlyZWN0b3J5IGFtb25nIHRoZSB0ZW1wb3JhcnkgZmlsZXMgb2YgdGhlCi8vIHN5c3RlbSwgYW5kIHNvIGRvZXMgQ3RybCtDIHdoZXJlIHRoZSBzY3JpcHQgY2Fubm90IHdhdGNoIGZvciBpdC4KLy8KLy8gVGhlIEZpcmViYXNlIENMSSBhZGRzIGEgd2ViIGFwcCBuYW1lZCAiRGVmYXVsdCBXZWIgQXBwIiB0byBhIHByb2plY3QgdGhhdAovLyBoYXMgbm8gd2ViIGFwcCwgYmVjYXVzZSBpdCBlbmFibGVzIHRoZSBtZXRob2RzIHRocm91Z2ggb25lCi8vIChodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvZmlyZWJhc2UtdG9vbHMvaXNzdWVzLzExMjUwKS4gVGhlIEZpcmViYXNlCi8vIGNvbnNvbGUgZW5hYmxlcyB0aGVtIHdpdGhvdXQgaXQsIHVuZGVyIEF1dGhlbnRpY2F0aW9uID4gU2lnbi1pbiBtZXRob2QuCi8vCi8vIFRoZSBvdGhlciBhcmd1bWVudHMgZ28gdG8gdGhlIEZpcmViYXNlIENMSSBhcyB0aGV5IGFyZS4gQW4gYWNjb3VudCB0aGF0Ci8vIGBmaXJlYmFzZSBsb2dpbjp1c2VgIGNob3NlIGZvciB0aGUgZGlyZWN0b3J5IG9mIHRoZSBhcHAgZG9lcyBub3QgYXBwbHkgaW4KLy8gdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnk6IGAtLWFjY291bnQgPGVtYWlsPmAgbmFtZXMgdGhlIGFjY291bnQuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDppbyc7CgovLy8gVGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIEZpcmViYXNlIENMSSB0aGF0IGhhcyBgZGVwbG95IC0tb25seSBhdXRoYC4KY29uc3QgX2ZpcnN0Q2xpID0gJ3t7e21pbmltdW1fZmlyZWJhc2VfY2xpfX19JzsKCi8vLyBUaGUgZmlsZSBvZiB0aGUgYXBwIHdpdGggYGF1dGhNb2RlYCwgdGhlIHNpZ24taW4gbW9kZSBvZiB0aGUgYXBwLgpjb25zdCBfc2Vzc2lvbkZpbGUgPSAne3t7c2Vzc2lvbl9maWxlfX19JzsKCi8vLyBUaGUgbW9kZSBpbiB3aGljaCB0aGUgYXBwIHNpZ25zIGluIGFub255bW91cyB1c2Vycy4KY29uc3QgX2Fub255bW91cyA9ICd7e3thbm9ueW1vdXNfbW9kZX19fSc7CgovLy8gVGhlIGNvbW1lbnRzIG9mIFtfc2Vzc2lvbkZpbGVdIGFuZCB0aGUgZGVjbGFyYXRpb25zIG9mIGBhdXRoTW9kZWAgaW4gaXQsCi8vLyBpbiB0aGUgZm9ybSB0aGF0IHRoZSBmaWxlIGtlZXBzOiBhIGRlY2xhcmF0aW9uIHN0YXJ0cyBpdHMgbGluZSBhbmQgaGFzIGEKLy8vIG1vZGUgYXMgaXRzIHZhbHVlLCBhbmQgb25seSBhIGRlY2xhcmF0aW9uIGhhcyB0aGUgZmlyc3QgZ3JvdXAsIHRoZSBuYW1lCi8vLyBvZiBpdHMgbW9kZS4KZmluYWwgX21vZGVEZWNsYXJhdGlvbiA9IFJlZ0V4cCgKICB7e3ttb2RlX2RlY2xhcmF0aW9ufX19LAogIG11bHRpTGluZTogdHJ1ZSwKKTsKCi8vLyBUaGlzIHNjcmlwdCwgYXMgdGhlIHVzZXIgcnVucyBpdCBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBhcHAuCmNvbnN0IF9jb21tYW5kID0gJ2RhcnQgdG9vbC9lbmFibGVfZmlyZWJhc2Vfc2lnbl9pbi5kYXJ0JzsKCkZ1dHVyZTx2b2lkPiBtYWluKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMpIGFzeW5jIHsKICAvLyBUaGUgYXBwIGlzIHRoZSBkaXJlY3RvcnkgYWJvdmUgYHRvb2xgLCB3aGVyZXZlciB0aGUgc2NyaXB0IGlzIHJ1biBmcm9tLAogIC8vIGFsc28gdGhyb3VnaCBhIGxpbmsgdG8gaXQuCiAgZmluYWwgc2NyaXB0ID0gRmlsZS5mcm9tVXJpKFBsYXRmb3JtLnNjcmlwdCkucmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jKCk7CiAgdHJ5IHsKICAgIGV4aXRDb2RlID0gYXdhaXQgX2VuYWJsZShGaWxlKHNjcmlwdCkucGFyZW50LnBhcmVudCwgYXJndW1lbnRzKTsKICB9IG9uIF9TdG9wIGNhdGNoIChzdG9wKSB7CiAgICBzdGRlcnIud3JpdGVsbihzdG9wLndoeSk7CiAgICBleGl0Q29kZSA9IDE7CiAgfQp9CgovLy8gRW5hYmxlcyB0aGUgc2lnbi1pbiBtZXRob2RzIHRoYXQgW2FwcF0gbmVlZHMgaW4gaXRzIEZpcmViYXNlIHByb2plY3QsIG9yCi8vLyBpbiB0aGUgb25lIHRoYXQgW2FyZ3VtZW50c10gbmFtZSwgYW5kIHJldHVybnMgdGhlIGV4aXQgY29kZSBvZiB0aGUKLy8vIEZpcmViYXNlIENMSSwgb3IgMTMwIGFmdGVyIEN0cmwrQy4KLy8vCi8vLyBUaHJvd3MgYSBbX1N0b3BdIHdoZW4gaXQgY2Fubm90IHRlbGwgdGhlIG1ldGhvZHMgb3IgdGhlIHByb2plY3QsIGFuZAovLy8gd2hlbiB0aGUgRmlyZWJhc2UgQ0xJIG9mIHRoZSBtYWNoaW5lIGNhbm5vdCBlbmFibGUgdGhlbS4KRnV0dXJlPGludD4gX2VuYWJsZShEaXJlY3RvcnkgYXBwLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzKSBhc3luYyB7CiAgZmluYWwgbW9kZSA9IF9tb2RlT2YoYXBwKTsKICBmaW5hbCBhbm9ueW1vdXMgPSBtb2RlID09IF9hbm9ueW1vdXM7CiAgZmluYWwgKG5hbWVkLCBwYXNzZWRPbikgPSBfd2l0aG91dFByb2plY3QoYXJndW1lbnRzKTsKICBpZiAobmFtZWQgIT0gbnVsbCAmJiAhX3Byb2plY3RJZC5oYXNNYXRjaChuYW1lZCkpIHsKICAgIHRocm93IF9TdG9wKAogICAgICAnVGhlIGFyZ3VtZW50cyBuYW1lICIkbmFtZWQiIGFzIHRoZSBGaXJlYmFzZSBwcm9qZWN0LCB3aGljaCBpcyBubyBpZCAnCiAgICAgICdvZiBhIHByb2plY3QuJywKICAgICk7CiAgfQogIGZpbmFsIHByb2plY3QgPSBuYW1lZCA/PyBfY29uZmlndXJlZFByb2plY3QoYXBwKTsKCiAgLy8gRXZlcnkgY2FsbCBvZiB0aGUgRmlyZWJhc2UgQ0xJIHJ1bnMgaW4gdGhpcyBkaXJlY3RvcnksIGFsc28gdGhlIG9uZSBmb3IKICAvLyBpdHMgdmVyc2lvbjogdGhlIEZpcmViYXNlIENMSSBrZWVwcyBpdHMgbG9nIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBpdAogIC8vIHJ1bnMgaW4uCiAgZmluYWwgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoJ2ZpcmViYXNlX3NpZ25faW5fJyk7CiAgUHJvY2Vzcz8gZmlyZWJhc2U7CiAgdmFyIGludGVycnVwdGVkID0gZmFsc2U7CiAgLy8gQ3RybCtDLiBJbiBhIHRlcm1pbmFsLCB0aGUgRmlyZWJhc2UgQ0xJIGdldHMgdGhlIHNpZ25hbCB3aXRoIHRoZQogIC8vIHNjcmlwdCwgYW5kIGVsc2V3aGVyZSB0aGUgc2NyaXB0IHBhc3NlcyBpdCBvbiwgd2hpY2ggV2luZG93cyBoYXMgbm8gd2F5CiAgLy8gdG8gZG8uIFdoZXJlIHRoZSBzaWduYWwgY2Fubm90IGJlIHdhdGNoZWQsIEN0cmwrQyBlbmRzIHRoZSBzY3JpcHQgYXQKICAvLyBvbmNlLCBhbmQgdGhlIGRpcmVjdG9yeSBzdGF5cy4KICBmaW5hbCBpbnRlcnJ1cHRzID0gUHJvY2Vzc1NpZ25hbC5zaWdpbnQud2F0Y2goKS5saXN0ZW4oKF8pIHsKICAgIGludGVycnVwdGVkID0gdHJ1ZTsKICAgIGlmICghUGxhdGZvcm0uaXNXaW5kb3dzKSBmaXJlYmFzZT8ua2lsbChQcm9jZXNzU2lnbmFsLnNpZ2ludCk7CiAgfSwgb25FcnJvcjogKE9iamVjdCBfKSB7fSk7CiAgRnV0dXJlPFByb2Nlc3M+IHN0YXJ0KExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsIFByb2Nlc3NTdGFydE1vZGUgbW9kZSkgYXN5bmMgPT4KICAgICAgZmlyZWJhc2UgPSBhd2FpdCBQcm9jZXNzLnN0YXJ0KAogICAgICAgICdmaXJlYmFzZScsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IGRpcmVjdG9yeS5wYXRoLAogICAgICAgIC8vIFdpdGhvdXQgaXRzIGNoZWNrIGZvciBhIG5ld2VyIHZlcnNpb24sIHdoaWNoIHJ1bnMgb24gYXMgYSBwcm9jZXNzCiAgICAgICAgLy8gb2YgaXRzIG93bjogb24gV2luZG93cywgdGhlIGRpcmVjdG9yeSBvZiBhIHByb2Nlc3MgdGhhdCBydW5zCiAgICAgICAgLy8gY2Fubm90IGJlIHJlbW92ZWQuCiAgICAgICAgZW52aXJvbm1lbnQ6IGNvbnN0IHsnTk9fVVBEQVRFX05PVElGSUVSJzogJzEnfSwKICAgICAgICBtb2RlOiBtb2RlLAogICAgICAgIC8vIE9uIFdpbmRvd3MsIG5wbSBpbnN0YWxscyB0aGUgRmlyZWJhc2UgQ0xJIGFzIGBmaXJlYmFzZS5jbWRgLgogICAgICAgIHJ1bkluU2hlbGw6IFBsYXRmb3JtLmlzV2luZG93cywKICAgICAgKTsKICB0cnkgewogICAgZmluYWwgaW50IGFza2VkOwogICAgZmluYWwgU3RyaW5nIHZlcnNpb247CiAgICBmaW5hbCBTdHJpbmcgZXJyb3JzOwogICAgdHJ5IHsKICAgICAgZmluYWwgcHJvY2VzcyA9IGF3YWl0IHN0YXJ0KGNvbnN0IFsnLS12ZXJzaW9uJ10sIFByb2Nlc3NTdGFydE1vZGUubm9ybWFsKTsKICAgICAgZmluYWwgcHJpbnRlZCA9IHByb2Nlc3Muc3Rkb3V0LnRyYW5zZm9ybShzeXN0ZW1FbmNvZGluZy5kZWNvZGVyKS5qb2luKCk7CiAgICAgIGZpbmFsIGZhaWxlZCA9IHByb2Nlc3Muc3RkZXJyLnRyYW5zZm9ybShzeXN0ZW1FbmNvZGluZy5kZWNvZGVyKS5qb2luKCk7CiAgICAgIGFza2VkID0gYXdhaXQgcHJvY2Vzcy5leGl0Q29kZTsKICAgICAgdmVyc2lvbiA9IGF3YWl0IHByaW50ZWQ7CiAgICAgIGVycm9ycyA9IChhd2FpdCBmYWlsZWQpLnRyaW0oKTsKICAgIH0gb24gUHJvY2Vzc0V4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgICAgdGhyb3cgX1N0b3AoX25vdFJ1bm5pbmcoZXJyb3IubWVzc2FnZSwgcHJvamVjdCkpOwogICAgfQogICAgaWYgKGludGVycnVwdGVkKSByZXR1cm4gMTMwOwogICAgaWYgKGFza2VkICE9IDApIHsKICAgICAgdGhyb3cgX1N0b3AoCiAgICAgICAgX25vdFJ1bm5pbmcoCiAgICAgICAgICAnZXhpdCBjb2RlICRhc2tlZCR7ZXJyb3JzLmlzRW1wdHkgPyAnJyA6ICc6ICRlcnJvcnMnfScsCiAgICAgICAgICBwcm9qZWN0LAogICAgICAgICksCiAgICAgICk7CiAgICB9CiAgICBpZiAoX29sZGVyQ2xpKHZlcnNpb24pIGNhc2UgZmluYWwgb2xkZXI/KSB7CiAgICAgIHRocm93IF9TdG9wKAogICAgICAgICdUaGUgRmlyZWJhc2UgQ0xJIG9mIHRoaXMgbWFjaGluZSBpcyAkb2xkZXIsIGFuZCBlbmFibGluZyBzaWduLWluICcKICAgICAgICAnbWV0aG9kcyBuZWVkcyAkX2ZpcnN0Q2xpIG9yIGxhdGVyLiBVcGRhdGUgaXQgd2l0aCAibnBtIGluc3RhbGwgLWcgJwogICAgICAgICdmaXJlYmFzZS10b29scyIgaWYgbnBtIGluc3RhbGxlZCBpdCwgb3Igc2VlICcKICAgICAgICAnaHR0cHM6Ly9maXJlYmFzZS5nb29nbGUuY29tL2RvY3MvY2xpI3VwZGF0ZS1jbGlcbicKICAgICAgICAnJHtfaW5Db25zb2xlKHByb2plY3QpfScsCiAgICAgICk7CiAgICB9CgogICAgRmlsZSgnJHtkaXJlY3RvcnkucGF0aH0vZmlyZWJhc2UuanNvbicpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICBqc29uRW5jb2RlKHsKICAgICAgICAnYXV0aCc6IHsKICAgICAgICAgICdwcm92aWRlcnMnOiB7CiAgICAgICAgICAgICdlbWFpbFBhc3N3b3JkJzogdHJ1ZSwKICAgICAgICAgICAgaWYgKGFub255bW91cykgJ2Fub255bW91cyc6IHRydWUsCiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0pLAogICAgKTsKICAgIHN0ZG91dC53cml0ZWxuKAogICAgICAnRW5hYmxpbmcgRW1haWwvUGFzc3dvcmQke2Fub255bW91cyA/ICcgYW5kIEFub255bW91cycgOiAnJ30gaW4gdGhlICcKICAgICAgJ0ZpcmViYXNlIHByb2plY3QgJHByb2plY3QgKHRoZSBtb2RlIG9mIHRoZSBhcHAgaXMgJG1vZGUpLicsCiAgICApOwogICAgLy8gV2hhdCB0aGUgRmlyZWJhc2UgQ0xJIHByaW50cyBjb21lcyBhZnRlciB0aGlzIGxpbmUuCiAgICBhd2FpdCBzdGRvdXQuZmx1c2goKTsKICAgIGlmIChpbnRlcnJ1cHRlZCkgcmV0dXJuIDEzMDsKICAgIGZpbmFsIGRlcGxveSA9IGF3YWl0IHN0YXJ0KFsKICAgICAgJ2RlcGxveScsCiAgICAgICctLW9ubHknLAogICAgICAnYXV0aCcsCiAgICAgIC8vIFRoZSBwcm9qZWN0IHRoYXQgdGhlIGxpbmUgYWJvdmUgbmFtZXMsIGFuZCBubyBvdGhlcjogdGhlIGFyZ3VtZW50cwogICAgICAvLyB0aGF0IGFyZSBwYXNzZWQgb24gbmFtZSBub25lLgogICAgICAnLS1wcm9qZWN0PSRwcm9qZWN0JywKICAgICAgJy0tbm9uLWludGVyYWN0aXZlJywKICAgICAgLi4ucGFzc2VkT24sCiAgICBdLCBQcm9jZXNzU3RhcnRNb2RlLmluaGVyaXRTdGRpbyk7CiAgICBmaW5hbCBjb2RlID0gYXdhaXQgZGVwbG95LmV4aXRDb2RlOwogICAgaWYgKGludGVycnVwdGVkKSByZXR1cm4gMTMwOwogICAgaWYgKGNvZGUgIT0gMCkgc3RkZXJyLndyaXRlbG4oX2FmdGVyRmFpbHVyZShjb2RlLCBwcm9qZWN0LCBwYXNzZWRPbikpOwogICAgcmV0dXJuIGNvZGU7CiAgfSBmaW5hbGx5IHsKICAgIGF3YWl0IGludGVycnVwdHMuY2FuY2VsKCk7CiAgICB0cnkgewogICAgICBkaXJlY3RvcnkuZGVsZXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlcnJvcikgewogICAgICBzdGRlcnIud3JpdGVsbigKICAgICAgICAnVGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgJHtkaXJlY3RvcnkucGF0aH0gb2YgdGhpcyBzY3JpcHQgaXMgbGVmdDogJwogICAgICAgICcke2Vycm9yLm1lc3NhZ2V9LicsCiAgICAgICk7CiAgICB9CiAgfQp9CgovLy8gV2h5IHRoZSBzY3JpcHQgc3RvcHMgYmVmb3JlIGl0IHJ1bnMgdGhlIEZpcmViYXNlIENMSS4KZmluYWwgY2xhc3MgX1N0b3AgaW1wbGVtZW50cyBFeGNlcHRpb24gewogIGNvbnN0IF9TdG9wKHRoaXMud2h5KTsKCiAgZmluYWwgU3RyaW5nIHdoeTsKfQoKLy8vIEFuIGlkIG9mIGEgRmlyZWJhc2UgcHJvamVjdCwgYXMgdGhlIEZpcmViYXNlIENMSSB0YWtlcyBpdDogbG93ZXItY2FzZQovLy8gbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zLCBhZnRlciB0aGUgZG9tYWluIG9mIGFuIG9yZ2FuaXphdGlvbiwgaWYgaXQKLy8vIGhhcyBvbmUuCmZpbmFsIF9wcm9qZWN0SWQgPSBSZWdFeHAocideKD86W2EtejAtOV1bYS16MC05Li1dKjopP1thLXowLTldW2EtejAtOS1dKiQnKTsKCi8vLyBIb3cgdG8gZW5hYmxlIHRoZSBtZXRob2RzIHdpdGhvdXQgdGhlIEZpcmViYXNlIENMSTogaW4gdGhlIEZpcmViYXNlCi8vLyBjb25zb2xlIG9mIFtwcm9qZWN0XSwgb3Igb2YgdGhlIHByb2plY3QgdGhhdCB0aGUgdXNlciBwaWNrcyB0aGVyZS4KU3RyaW5nIF9pbkNvbnNvbGUoW1N0cmluZyBwcm9qZWN0ID0gJ18nXSkgPT4KICAgICdUaGUgRmlyZWJhc2UgY29uc29sZSBlbmFibGVzIHRoZSBtZXRob2RzIHRvbywgdW5kZXIgQXV0aGVudGljYXRpb24gPiAnCiAgICAnU2lnbi1pbiBtZXRob2Q6IGh0dHBzOi8vY29uc29sZS5maXJlYmFzZS5nb29nbGUuY29tL3Byb2plY3QvJHByb2plY3QvJwogICAgJ2F1dGhlbnRpY2F0aW9uL3Byb3ZpZGVycyc7CgovLy8gV2hhdCB0aGUgc2NyaXB0IHRlbGxzIHdoZW4gdGhlIEZpcmViYXNlIENMSSBkb2VzIG5vdCBydW4sIGJlY2F1c2Ugb2YKLy8vIFt3aHldLgpTdHJpbmcgX25vdFJ1bm5pbmcoU3RyaW5nIHdoeSwgU3RyaW5nIHByb2plY3QpID0+CiAgICAnVGhlIEZpcmViYXNlIENMSSBkaWQgbm90IHJ1biAoJHdoeSkuIEluc3RhbGwgaXQsIG9yIHB1dCBpdCBvbiB0aGUgJwogICAgJ1BBVEg6IGh0dHBzOi8vZmlyZWJhc2UuZ29vZ2xlLmNvbS9kb2NzL2NsaVxuJHtfaW5Db25zb2xlKHByb2plY3QpfSc7CgovLy8gV2hhdCB0aGUgc2NyaXB0IHRlbGxzIGFmdGVyIHRoZSBGaXJlYmFzZSBDTEkgZmFpbGVkIHdpdGggdGhlIGV4aXQgY29kZQovLy8gW2NvZGVdIGZvciBbcHJvamVjdF0sIHdpdGggdGhlIGFyZ3VtZW50cyBbcGFzc2VkT25dOiB3aGljaCBhY2NvdW50IGl0Ci8vLyBtYXkgaGF2ZSBydW4gYXMsIHdoZXJlIGl0cyBsb2cgd2FzLCBhbmQgdGhlIG90aGVyIHdheSB0byBlbmFibGUgdGhlCi8vLyBtZXRob2RzLgpTdHJpbmcgX2FmdGVyRmFpbHVyZShpbnQgY29kZSwgU3RyaW5nIHByb2plY3QsIExpc3Q8U3RyaW5nPiBwYXNzZWRPbikgewogIGZpbmFsIG9wdGlvbnMgPSBwYXNzZWRPbi50YWtlV2hpbGUoKGFyZ3VtZW50KSA9PiBhcmd1bWVudCAhPSAnLS0nKS50b0xpc3QoKTsKICAvLyBUaGUgbGFzdCBhY2NvdW50IHRoYXQgdGhlIG9wdGlvbnMgbmFtZSBpcyB0aGUgb25lIG9mIHRoZSBGaXJlYmFzZSBDTEkuCiAgU3RyaW5nPyBhY2NvdW50OwogIGZvciAoZmluYWwgKGluZGV4LCBvcHRpb24pIGluIG9wdGlvbnMuaW5kZXhlZCkgewogICAgaWYgKG9wdGlvbi5zdGFydHNXaXRoKCctLWFjY291bnQ9JykpIHsKICAgICAgYWNjb3VudCA9IG9wdGlvbi5zdWJzdHJpbmcoJy0tYWNjb3VudD0nLmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbiA9PSAnLS1hY2NvdW50JyAmJiBpbmRleCArIDEgPCBvcHRpb25zLmxlbmd0aCkgewogICAgICBhY2NvdW50ID0gb3B0aW9uc1tpbmRleCArIDFdOwogICAgfQogIH0KICByZXR1cm4gWwogICAgJ1RoZSBGaXJlYmFzZSBDTEkgZGlkIG5vdCBlbmFibGUgdGhlIHNpZ24taW4gbWV0aG9kcyAoZXhpdCBjb2RlICRjb2RlKS4nLAogICAgaWYgKGFjY291bnQgIT0gbnVsbCkKICAgICAgJy0gVGhlIGFyZ3VtZW50cyBuYW1lIHRoZSBhY2NvdW50ICRhY2NvdW50IGZvciBpdC4gImZpcmViYXNlICcKICAgICAgICAgICdsb2dpbjpsaXN0IiBzaG93cyB0aGUgYWNjb3VudHMgdGhhdCB0aGUgRmlyZWJhc2UgQ0xJIGhhcy4nCiAgICBlbHNlCiAgICAgICctIElmIGl0IHJhbiBhcyB0aGUgd3JvbmcgYWNjb3VudDogdGhpcyBzY3JpcHQgcnVucyB0aGUgRmlyZWJhc2UgQ0xJICcKICAgICAgICAgICdpbiBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIHdoZXJlIGFuIGFjY291bnQgdGhhdCAiZmlyZWJhc2UgJwogICAgICAgICAgJ2xvZ2luOnVzZSIgY2hvc2UgZm9yIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGFwcCBkb2VzIG5vdCBhcHBseS4gVG8gJwogICAgICAgICAgJ25hbWUgdGhlIGFjY291bnQsIHJ1bjogJF9jb21tYW5kIC0tYWNjb3VudCA8ZW1haWw+JywKICAgIGlmICghb3B0aW9ucy5jb250YWlucygnLS1kZWJ1ZycpKQogICAgICAnLSBJdHMgbG9nLCBmaXJlYmFzZS1kZWJ1Zy5sb2csIHdhcyBpbiB0aGF0IHRlbXBvcmFyeSBkaXJlY3RvcnksICcKICAgICAgICAgICd3aGljaCB0aGlzIHNjcmlwdCByZW1vdmVzLiBUbyBzZWUgd2hhdCB0aGUgRmlyZWJhc2UgQ0xJIGRpZCwgJwogICAgICAgICAgJ3J1bjogJF9jb21tYW5kIC0tZGVidWcnLAogICAgJy0gJHtfaW5Db25zb2xlKHByb2plY3QpfScsCiAgXS5qb2luKCdcbicpOwp9CgovLy8gVGhlIHRleHQgb2YgW2ZpbGVdLCB3aGljaCBpcyBpbiBVVEYtOC4KU3RyaW5nIF90ZXh0T2YoRmlsZSBmaWxlKSB7CiAgdHJ5IHsKICAgIHJldHVybiBmaWxlLnJlYWRBc1N0cmluZ1N5bmMoKTsKICB9IG9uIEZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICB0aHJvdyBfU3RvcCgKICAgICAgJyR7ZmlsZS5wYXRofSBjb3VsZCBub3QgYmUgcmVhZCBhcyBhIHRleHQgaW4gVVRGLTggKCR7ZXJyb3IubWVzc2FnZX0pLicsCiAgICApOwogIH0KfQoKLy8vIFRoZSBzaWduLWluIG1vZGUgb2YgW2FwcF0sIHN1Y2ggYXMgYHJlcXVpcmVkYCwgYXMgYGF1dGhNb2RlYCBpbgovLy8gW19zZXNzaW9uRmlsZV0gaGFzIGl0LgovLy8KLy8vIFRoYXQgZmlsZSBpbXBvcnRzIEZsdXR0ZXIsIHNvIHRoaXMgc2NyaXB0IGNhbm5vdCBpbXBvcnQgaXQsIGFuZCByZWFkcwovLy8gdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBjb25zdGFudCBpbnN0ZWFkOyBzZWUgW19tb2RlRGVjbGFyYXRpb25dLgpTdHJpbmcgX21vZGVPZihEaXJlY3RvcnkgYXBwKSB7CiAgY29uc3QgY2Fubm90VGVsbCA9CiAgICAgICdDYW5ub3QgdGVsbCB0aGUgc2lnbi1pbiBtb2RlIG9mIHRoZSBhcHAsIGJ5IHdoaWNoIHRoaXMgJwogICAgICAnc2NyaXB0IGVuYWJsZXMgQW5vbnltb3VzIG9yIGxlYXZlcyBpdCBvdXQnOwogIGZpbmFsIGZpbGUgPSBGaWxlKCcke2FwcC5wYXRofS8kX3Nlc3Npb25GaWxlJyk7CiAgaWYgKCFmaWxlLmV4aXN0c1N5bmMoKSkgewogICAgdGhyb3cgX1N0b3AoJyRjYW5ub3RUZWxsOiAke2ZpbGUucGF0aH0gaXMgbWlzc2luZy5cbiR7X2luQ29uc29sZSgpfScpOwogIH0KICBmaW5hbCBtb2RlcyA9IFsKICAgIGZvciAoZmluYWwgbWF0Y2ggaW4gX21vZGVEZWNsYXJhdGlvbi5hbGxNYXRjaGVzKF90ZXh0T2YoZmlsZSkpKSA/bWF0Y2hbMV0sCiAgXTsKICBpZiAobW9kZXMubGVuZ3RoICE9IDEpIHsKICAgIHRocm93IF9TdG9wKAogICAgICAnJGNhbm5vdFRlbGw6ICR7ZmlsZS5wYXRofSBkb2VzIG5vdCBoYXZlIG9uZSBkZWNsYXJhdGlvbiBzdWNoIGFzICcKICAgICAgJyJjb25zdCBBdXRoTW9kZSBhdXRoTW9kZSA9IEF1dGhNb2RlLnJlcXVpcmVkOyIsIHdoaWNoIHN0YXJ0cyBpdHMgbGluZSAnCiAgICAgICdhbmQgaGFzIGEgbW9kZSBvZiB0aGUgYXBwIGFzIGl0cyB2YWx1ZS5cbicKICAgICAgJyR7X2luQ29uc29sZSgpfScsCiAgICApOwogIH0KICByZXR1cm4gbW9kZXMuc2luZ2xlOwp9CgovLy8gVGhlIHByb2plY3QgdGhhdCBbYXJndW1lbnRzXSBuYW1lIGZvciB0aGUgRmlyZWJhc2UgQ0xJLCBpZiB0aGV5IG5hbWUKLy8vIG9uZSwgYW5kIHRoZSBhcmd1bWVudHMgd2l0aG91dCB3aGF0IG5hbWVzIGl0LgovLy8KLy8vIFRoZSBGaXJlYmFzZSBDTEkgdGFrZXMgdGhlIGxhc3QgYC0tcHJvamVjdCA8aWQ+YCwgYC0tcHJvamVjdD08aWQ+YCwKLy8vIGAtUCA8aWQ+YCBvciBgLVA8aWQ+YCBiZWZvcmUgYC0tYCwgc28gdGhlIHNjcmlwdCBkb2VzIHRvbywgYW5kIHBhc3NlcwovLy8gbm9uZSBvZiB0aGVtIG9uOiBpdCBnaXZlcyB0aGUgRmlyZWJhc2UgQ0xJIHRoZSBwcm9qZWN0IGl0c2VsZi4gSXQgc3RvcHMKLy8vIGF0IHNob3J0IG9wdGlvbnMgaW4gb25lIGFyZ3VtZW50IHRoYXQgaGF2ZSBgUGAgYW1vbmcgdGhlbSwgc3VjaCBhcwovLy8gYC1qUGAsIHdoaWNoIHRoZSBGaXJlYmFzZSBDTEkgbWF5IHJlYWQgYXMgYSBwcm9qZWN0IHRvby4KKFN0cmluZz8sIExpc3Q8U3RyaW5nPikgX3dpdGhvdXRQcm9qZWN0KExpc3Q8U3RyaW5nPiBhcmd1bWVudHMpIHsKICBmaW5hbCBlbmQgPSBhcmd1bWVudHMuaW5kZXhPZignLS0nKTsKICBmaW5hbCBvcHRpb25zID0gZW5kIDwgMCA/IGFyZ3VtZW50cyA6IGFyZ3VtZW50cy5zdWJsaXN0KDAsIGVuZCk7CiAgU3RyaW5nPyBwcm9qZWN0OwogIGZpbmFsIG90aGVycyA9IDxTdHJpbmc+W107CiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICBmaW5hbCBvcHRpb24gPSBvcHRpb25zW2luZGV4XTsKICAgIGlmIChvcHRpb24gPT0gJy0tcHJvamVjdCcgfHwgb3B0aW9uID09ICctUCcpIHsKICAgICAgaWYgKCsraW5kZXggPT0gb3B0aW9ucy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBfU3RvcCgnJG9wdGlvbiBuZWVkcyB0aGUgaWQgb2YgYSBGaXJlYmFzZSBwcm9qZWN0IGFmdGVyIGl0LicpOwogICAgICB9CiAgICAgIHByb2plY3QgPSBvcHRpb25zW2luZGV4XTsKICAgIH0gZWxzZSBpZiAob3B0aW9uLnN0YXJ0c1dpdGgoJy0tcHJvamVjdD0nKSkgewogICAgICBwcm9qZWN0ID0gb3B0aW9uLnN1YnN0cmluZygnLS1wcm9qZWN0PScubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uLnN0YXJ0c1dpdGgoJy1QJykpIHsKICAgICAgcHJvamVjdCA9IG9wdGlvbi5zdWJzdHJpbmcoMik7CiAgICB9IGVsc2UgaWYgKFJlZ0V4cChyJ14tW0EtWmEtel0qUCcpLmhhc01hdGNoKG9wdGlvbikpIHsKICAgICAgdGhyb3cgX1N0b3AoCiAgICAgICAgJ0Nhbm5vdCB0ZWxsIHdoZXRoZXIgIiRvcHRpb24iIG5hbWVzIGEgRmlyZWJhc2UgcHJvamVjdC4gTmFtZSB0aGUgJwogICAgICAgICdwcm9qZWN0IHdpdGggLS1wcm9qZWN0IDxpZD4sIGFwYXJ0IGZyb20gdGhlIG90aGVyIG9wdGlvbnMuJywKICAgICAgKTsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVycy5hZGQob3B0aW9uKTsKICAgIH0KICB9CiAgcmV0dXJuIChwcm9qZWN0LCBbLi4ub3RoZXJzLCBpZiAoZW5kID49IDApIC4uLmFyZ3VtZW50cy5zdWJsaXN0KGVuZCldKTsKfQoKLy8vIFRoZSBpZCBvZiB0aGUgRmlyZWJhc2UgcHJvamVjdCB0aGF0IGBmbHV0dGVyZmlyZSBjb25maWd1cmVgIHdyb3RlIGludG8KLy8vIGBmaXJlYmFzZS5qc29uYCBvZiBbYXBwXTogdW5kZXIgYGZsdXR0ZXJgLCBlYWNoIHBsYXRmb3JtIG9mIHRoZSBhcHAgaGFzCi8vLyB0aGUgaWQgb2YgaXRzIHByb2plY3QuClN0cmluZyBfY29uZmlndXJlZFByb2plY3QoRGlyZWN0b3J5IGFwcCkgewogIGZpbmFsIGZpbGUgPSBGaWxlKCcke2FwcC5wYXRofS9maXJlYmFzZS5qc29uJyk7CiAgY29uc3Qgb3JOYW1lID0gJ29yIG5hbWUgdGhlIHByb2plY3Q6ICRfY29tbWFuZCAtLXByb2plY3QgPGlkPic7CiAgaWYgKCFmaWxlLmV4aXN0c1N5bmMoKSkgewogICAgdGhyb3cgX1N0b3AoCiAgICAgICcke2ZpbGUucGF0aH0gaXMgbWlzc2luZywgc28gdGhlIGFwcCBpcyBub3QgY29uZmlndXJlZCBmb3IgRmlyZWJhc2UgJwogICAgICAneWV0LiBSdW4gImZsdXR0ZXJmaXJlIGNvbmZpZ3VyZSIgZmlyc3QgKHNlZSBSRUFETUUubWQpLCAkb3JOYW1lJywKICAgICk7CiAgfQogIGZpbmFsIE9iamVjdD8ganNvbjsKICB0cnkgewogICAganNvbiA9IGpzb25EZWNvZGUoX3RleHRPZihmaWxlKSk7CiAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICB0aHJvdyBfU3RvcCgKICAgICAgJyR7ZmlsZS5wYXRofSBpcyBub3QgSlNPTiAoJHtlcnJvci5tZXNzYWdlfSkuIFJ1biAiZmx1dHRlcmZpcmUgJwogICAgICAnY29uZmlndXJlIiBhZ2FpbiAoc2VlIFJFQURNRS5tZCksICRvck5hbWUnLAogICAgKTsKICB9CiAgZmluYWwgcHJvamVjdHMgPSA8U3RyaW5nPnt9OwogIHZvaWQgY29sbGVjdChPYmplY3Q/IG5vZGUpIHsKICAgIGlmIChub2RlIGlzISBNYXApIHJldHVybjsKICAgIGZvciAoZmluYWwgTWFwRW50cnkoOmtleSwgOnZhbHVlKSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgaWYgKGtleSA9PSAncHJvamVjdElkJyAmJiB2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgICBwcm9qZWN0cy5hZGQodmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbGxlY3QodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBjb2xsZWN0KGpzb24gaXMgTWFwID8ganNvblsnZmx1dHRlciddIDogbnVsbCk7CiAgaWYgKHByb2plY3RzLmlzRW1wdHkpIHsKICAgIHRocm93IF9TdG9wKAogICAgICAnJHtmaWxlLnBhdGh9IGhhcyBubyBGaXJlYmFzZSBwcm9qZWN0IG9mICJmbHV0dGVyZmlyZSBjb25maWd1cmUiLiBSdW4gJwogICAgICAnaXQgZmlyc3QgKHNlZSBSRUFETUUubWQpLCAkb3JOYW1lJywKICAgICk7CiAgfQogIGlmIChwcm9qZWN0cy5sZW5ndGggPiAxKSB7CiAgICB0aHJvdyBfU3RvcCgKICAgICAgJyR7ZmlsZS5wYXRofSBoYXMgc2V2ZXJhbCBGaXJlYmFzZSBwcm9qZWN0cyAoJHtwcm9qZWN0cy5qb2luKCcsICcpfSkuICcKICAgICAgJ05hbWUgb25lOiAkX2NvbW1hbmQgLS1wcm9qZWN0IDxpZD4nLAogICAgKTsKICB9CiAgZmluYWwgcHJvamVjdCA9IHByb2plY3RzLnNpbmdsZTsKICBpZiAoIV9wcm9qZWN0SWQuaGFzTWF0Y2gocHJvamVjdCkpIHsKICAgIHRocm93IF9TdG9wKAogICAgICAnJHtmaWxlLnBhdGh9IGhhcyAiJHByb2plY3QiIGFzIGl0cyBGaXJlYmFzZSBwcm9qZWN0LCB3aGljaCBpcyBubyBpZCAnCiAgICAgICdvZiBhIHByb2plY3QuIFJ1biAiZmx1dHRlcmZpcmUgY29uZmlndXJlIiBhZ2FpbiAoc2VlIFJFQURNRS5tZCksICcKICAgICAgJyRvck5hbWUnLAogICAgKTsKICB9CiAgcmV0dXJuIHByb2plY3Q7Cn0KCi8vLyBBIHZlcnNpb24gYXMgYGZpcmViYXNlIC0tdmVyc2lvbmAgcHJpbnRzIGl0IG9uIGEgbGluZSBvZiBpdHMgb3duOiB0aHJlZQovLy8gbnVtYmVycywgdGhlbiBhIHByZS1yZWxlYXNlIGFmdGVyIGAtYCBhbmQgYSBidWlsZCBhZnRlciBgK2AsIGlmIGFueS4KZmluYWwgX3ZlcnNpb24gPSBSZWdFeHAocideKFxkKylcLihcZCspXC4oXGQrKSgtW14rXHNdKyk/KFwrXFMrKT8kJyk7CgovLy8gVGhlIHZlcnNpb24gb2YgdGhlIEZpcmViYXNlIENMSSBpbiBbcHJpbnRlZF0sIHdoYXQgYGZpcmViYXNlIC0tdmVyc2lvbmAKLy8vIHByaW50ZWQsIGlmIGl0IGNvbWVzIGJlZm9yZSBbX2ZpcnN0Q2xpXSwgb3IgYG51bGxgIGlmIGl0IGRvZXMgbm90LgovLy8KLy8vIFRoZSB2ZXJzaW9uIGlzIHRoZSBsYXN0IGxpbmUgdGhhdCBpcyBvbmUsIHNpbmNlIHRoZSBGaXJlYmFzZSBDTEkgbWF5Ci8vLyBwcmludCBtb3JlLiBBIHByZS1yZWxlYXNlIG9mIFtfZmlyc3RDbGldIGNvbWVzIGJlZm9yZSBpdDogaXQgbWF5IGxhY2sKLy8vIHdoYXQgdGhlIHZlcnNpb24gaGFzLiBBIHZlcnNpb24gdGhhdCB0aGUgc2NyaXB0IGNhbm5vdCByZWFkIGlzIG5vbmUKLy8vIGJlZm9yZSBpdDogdGhlIEZpcmViYXNlIENMSSB0aGVuIHRlbGxzIGl0c2VsZiB3aGF0IGl0IGNhbm5vdCBkby4KU3RyaW5nPyBfb2xkZXJDbGkoU3RyaW5nIHByaW50ZWQpIHsKICBmaW5hbCB2ZXJzaW9uID0gWwogICAgZm9yIChmaW5hbCBsaW5lIGluIHByaW50ZWQuc3BsaXQoJ1xuJykpID9fdmVyc2lvbi5maXJzdE1hdGNoKGxpbmUudHJpbSgpKSwKICBdLmxhc3RPck51bGw7CiAgaWYgKHZlcnNpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgZmluYWwgZmlyc3QgPSBfZmlyc3RDbGkuc3BsaXQoJy4nKS5tYXAoaW50LnBhcnNlKS50b0xpc3QoKTsKICBmb3IgKGZpbmFsIChpbmRleCwgbnVtYmVyKSBpbiBmaXJzdC5pbmRleGVkKSB7CiAgICBmaW5hbCBmb3VuZCA9IGludC50cnlQYXJzZSh2ZXJzaW9uW2luZGV4ICsgMV0hKTsKICAgIGlmIChmb3VuZCA9PSBudWxsIHx8IGZvdW5kID4gbnVtYmVyKSByZXR1cm4gbnVsbDsKICAgIGlmIChmb3VuZCA8IG51bWJlcikgcmV0dXJuIHZlcnNpb25bMF07CiAgfQogIHJldHVybiB2ZXJzaW9uWzRdID09IG51bGwgPyBudWxsIDogdmVyc2lvblswXTsKfQo=",
      "type": "text"
    }
  ],
  "hooks": [],
  "name": "firebase_auth",
  "description":
      "The sign-in of an SMF app with Firebase Authentication: the sign-in service on FirebaseAuth.",
  "version": "0.1.0+1",
  "environment": {"mason": "^0.1.1"},
  "vars": {}
});