diff --git a/mix.lock b/mix.lock
index d7caabe..a4da9a2 100644
--- a/mix.lock
+++ b/mix.lock
@@ -1,6 +1,6 @@
%{
- "bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.0", "851d16b901b6c94a0ceadd3470f2b58d9899007bf04a42e0e4b399e2dd6ab307", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "fe251accb51f1aa17d67009cb125bddf81fb056cacad71bfad7827a44652f4ee"},
- "castore": {:hex, :castore, "0.1.16", "2675f717adc700475345c5512c381ef9273eb5df26bdd3f8c13e2636cf4cc175", [:mix], [], "hexpm", "28ed2c43d83b5c25d35c51bc0abf229ac51359c170cba76171a462ced2e4b651"},
+ "bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.1", "9be815469e6bfefec40fa74658ecbbe6897acfb57614df1416eeccd4903f602c", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "486bb95efb645d1efc6794c1ddd776a186a9a713abf06f45708a6ce324fb96cf"},
+ "castore": {:hex, :castore, "0.1.20", "62a0126cbb7cb3e259257827b9190f88316eb7aa3fdac01fd6f2dfd64e7f46e9", [:mix], [], "hexpm", "a020b7650529c986c454a4035b6b13a328e288466986307bea3aadb4c95ac98a"},
"certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"},
"comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"},
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
@@ -8,59 +8,60 @@
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
"dart_sass": {:git, "https://github.com/kmx-io/dart_sass", "eae1bed34e4ee7cca0bc72f9f3fb237a948ca565", []},
- "db_connection": {:hex, :db_connection, "2.4.2", "f92e79aff2375299a16bcb069a14ee8615c3414863a6fef93156aee8e86c2ff3", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4fe53ca91b99f55ea249693a0229356a08f4d1a7931d8ffa79289b145fe83668"},
+ "db_connection": {:hex, :db_connection, "2.4.3", "3b9aac9f27347ec65b271847e6baeb4443d8474289bd18c1d6f4de655b70c94d", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c127c15b0fa6cfb32eed07465e05da6c815b032508d4ed7c116122871df73c12"},
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
- "earmark": {:hex, :earmark, "1.4.24", "1923e201c3742af421860b983560967cc3e3deacc59c12966bc991a5435565e6", [:mix], [{:earmark_parser, "~> 1.4.25", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "9724242f241f2ad634756d8f2bb57a3d0992cedd10c51842fa655703b4da7c67"},
- "earmark_parser": {:hex, :earmark_parser, "1.4.25", "2024618731c55ebfcc5439d756852ec4e85978a39d0d58593763924d9a15916f", [:mix], [], "hexpm", "56749c5e1c59447f7b7a23ddb235e4b3defe276afc220a6227237f3efe83f51e"},
- "ecto": {:hex, :ecto, "3.7.2", "44c034f88e1980754983cc4400585970b4206841f6f3780967a65a9150ef09a8", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a600da5772d1c31abbf06f3e4a1ffb150e74ed3e2aa92ff3cee95901657a874e"},
- "ecto_sql": {:hex, :ecto_sql, "3.7.2", "55c60aa3a06168912abf145c6df38b0295c34118c3624cf7a6977cd6ce043081", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.7.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0 or ~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c218ea62f305dcaef0b915fb56583195e7b91c91dcfb006ba1f669bfacbff2a"},
+ "earmark": {:hex, :earmark, "1.4.34", "d7f89d3bbd7567a0bffc465e0a949f8f8dcbe43909c3acf96f4761a302cea10c", [:mix], [{:earmark_parser, "~> 1.4.29", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "90b106f3dad85b133b10d7d628167c88246123fd1cecb4557d83d21ec9e65504"},
+ "earmark_parser": {:hex, :earmark_parser, "1.4.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"},
+ "ecto": {:hex, :ecto, "3.9.4", "3ee68e25dbe0c36f980f1ba5dd41ee0d3eb0873bccae8aeaf1a2647242bffa35", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "de5f988c142a3aa4ec18b85a4ec34a2390b65b24f02385c1144252ff6ff8ee75"},
+ "ecto_sql": {:hex, :ecto_sql, "3.9.2", "34227501abe92dba10d9c3495ab6770e75e79b836d114c41108a4bf2ce200ad5", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1eb5eeb4358fdbcd42eac11c1fbd87e3affd7904e639d77903c1358b2abd3f70"},
"elixir_auth_google": {:hex, :elixir_auth_google, "1.6.3", "13f9fcecc32d8a0e5eee5d24419d603dbec495fcc9c60ac314d64ba4af17fc83", [:mix], [{:httpoison, "~> 1.8.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6c0e9852879b22ac20908ca155cfe389fc099de6075359adbffe5a3d8fa8592f"},
- "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"},
- "esbuild": {:hex, :esbuild, "0.4.0", "9f17db148aead4cf1e6e6a584214357287a93407b5fb51a031f122b61385d4c2", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "b61e4e6b92ffe45e4ee4755a22de6211a67c67987dc02afb35a425a0add1d447"},
+ "elixir_make": {:hex, :elixir_make, "0.7.3", "c37fdae1b52d2cc51069713a58c2314877c1ad40800a57efb213f77b078a460d", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "24ada3e3996adbed1fa024ca14995ef2ba3d0d17b678b0f3f2b1f66e6ce2b274"},
+ "esbuild": {:hex, :esbuild, "0.6.0", "9ba6ead054abd43cb3d7b14946a0cdd1493698ccd8e054e0e5d6286d7f0f509c", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "30f9a05d4a5bab0d3e37398f312f80864e1ee1a081ca09149d06d474318fd040"},
"exgravatar": {:hex, :exgravatar, "2.0.3", "2349709832ee535f826f48db98cddd294ae62b01acb44d539a16419bd8ebc3e5", [:mix], [], "hexpm", "aca18ff9bd8991d3be3e5446d3bdefc051be084c1ffc9ab2d43b3e65339300e1"},
"file_size": {:hex, :file_size, "3.0.1", "ad447a69442a82fc701765a73992d7b1110136fa0d4a9d3190ea685d60034dcd", [:mix], [{:decimal, ">= 1.0.0 and < 3.0.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:number, "~> 1.0", [hex: :number, repo: "hexpm", optional: false]}], "hexpm", "64dd665bc37920480c249785788265f5d42e98830d757c6a477b3246703b8e20"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"finch": {:hex, :finch, "0.10.2", "9ad27d68270d879f73f26604bb2e573d40f29bf0e907064a9a337f90a16a0312", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dd8b11b282072cec2ef30852283949c248bd5d2820c88d8acc89402b81db7550"},
- "floki": {:hex, :floki, "0.32.1", "dfe3b8db3b793939c264e6f785bca01753d17318d144bd44b407fb3493acaa87", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "d4b91c713e4a784a3f7b1e3cc016eefc619f6b1c3898464222867cafd3c681a3"},
- "gen_smtp": {:hex, :gen_smtp, "1.1.1", "bf9303c31735100631b1d708d629e4c65944319d1143b5c9952054f4a1311d85", [:rebar3], [{:hut, "1.3.0", [hex: :hut, repo: "hexpm", optional: false]}, {:ranch, ">= 1.7.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "51bc50cc017efd4a4248cbc39ea30fb60efa7d4a49688986fafad84434ff9ab7"},
- "gettext": {:hex, :gettext, "0.19.1", "564953fd21f29358e68b91634799d9d26989f8d039d7512622efb3c3b1c97892", [:mix], [], "hexpm", "10c656c0912b8299adba9b061c06947511e3f109ab0d18b44a866a4498e77222"},
+ "floki": {:hex, :floki, "0.34.0", "002d0cc194b48794d74711731db004fafeb328fe676976f160685262d43706a8", [:mix], [], "hexpm", "9c3a9f43f40dde00332a589bd9d389b90c1f518aef500364d00636acc5ebc99c"},
+ "gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
+ "gettext": {:hex, :gettext, "0.20.0", "75ad71de05f2ef56991dbae224d35c68b098dd0e26918def5bb45591d5c8d429", [:mix], [], "hexpm", "1c03b177435e93a47441d7f681a7040bd2a816ece9e2666d1c9001035121eb3d"},
"guardian": {:hex, :guardian, "2.2.1", "5a4a949fd46eac79ef37f074ada7d1ef82e274bc99e335c286e042f5383f4f80", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "09b5c4d08f18524bd33ffe49617003cbca9f617237e23b5f42223cda61c5f052"},
- "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"},
+ "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~> 2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"},
"html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
- "httpoison": {:hex, :httpoison, "1.8.0", "6b85dea15820b7804ef607ff78406ab449dd78bed923a49c7160e1886e987a3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "28089eaa98cf90c66265b6b5ad87c59a3729bea2e74e9d08f9b51eb9729b3c3a"},
+ "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"},
"hut": {:hex, :hut, "1.3.0", "71f2f054e657c03f959cf1acc43f436ea87580696528ca2a55c8afb1b06c85e7", [:"erlang.mk", :rebar, :rebar3], [], "hexpm", "7e15d28555d8a1f2b5a3a931ec120af0753e4853a4c66053db354f35bf9ab563"},
- "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
- "jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"},
+ "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
+ "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
"jose": {:hex, :jose, "1.11.2", "f4c018ccf4fdce22c71e44d471f15f723cb3efab5d909ab2ba202b5bf35557b3", [:mix, :rebar3], [], "hexpm", "98143fbc48d55f3a18daba82d34fe48959d44538e9697c08f34200fa5f0947d2"},
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
- "mime": {:hex, :mime, "2.0.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"},
+ "mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"},
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
"mint": {:hex, :mint, "1.4.0", "cd7d2451b201fc8e4a8fd86257fb3878d9e3752899eb67b0c5b25b180bde1212", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "10a99e144b815cbf8522dccbc8199d15802440fc7a64d67b6853adb6fa170217"},
- "mogrify": {:hex, :mogrify, "0.9.1", "a26f107c4987477769f272bd0f7e3ac4b7b75b11ba597fd001b877beffa9c068", [:mix], [], "hexpm", "134edf189337d2125c0948bf0c228fdeef975c594317452d536224069a5b7f05"},
+ "mogrify": {:hex, :mogrify, "0.9.2", "b360984adea7dd6a55f18028e6327973c58de7f548fdb86c9859848aa904d5b0", [:mix], [], "hexpm", "c18d10fd70ca20e2585301616c89f6e4f7159d92efc9cc8ee579e00c886f699d"},
"nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"},
"nimble_pool": {:hex, :nimble_pool, "0.2.4", "1db8e9f8a53d967d595e0b32a17030cdb6c0dc4a451b8ac787bf601d3f7704c3", [:mix], [], "hexpm", "367e8071e137b787764e6a9992ccb57b276dc2282535f767a07d881951ebeac6"},
"number": {:hex, :number, "1.0.3", "932c8a2d478a181c624138958ca88a78070332191b8061717270d939778c9857", [:mix], [{:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "dd397bbc096b2ca965a6a430126cc9cf7b9ef7421130def69bcf572232ca0f18"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
- "phoenix": {:hex, :phoenix, "1.6.6", "281c8ce8dccc9f60607346b72cdfc597c3dde134dd9df28dff08282f0b751754", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "807bd646e64cd9dc83db016199715faba72758e6db1de0707eef0a2da4924364"},
+ "phoenix": {:hex, :phoenix, "1.6.15", "0a1d96bbc10747fd83525370d691953cdb6f3ccbac61aa01b4acb012474b047d", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d70ab9fbf6b394755ea88b644d34d79d8b146e490973151f248cacd122d20672"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},
"phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.6.5", "1495bb014be12c9a9252eca04b9af54246f6b5c1e4cd1f30210cd00ec540cf8e", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.3", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.17.7", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "ef4fa50dd78364409039c99cf6f98ab5209b4c5f8796c17f4db118324f0db852"},
- "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"},
- "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.7", "05a42377075868a678d446361effba80cefef19ab98941c01a7a4c7560b29121", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.5.9 or ~> 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "25eaf41028eb351b90d4f69671874643a09944098fefd0d01d442f40a6091b6f"},
- "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"},
- "phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"},
- "plug": {:hex, :plug, "1.13.4", "addb6e125347226e3b11489e23d22a60f7ab74786befb86c14f94fb5f23ca9a4", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "06114c1f2a334212fe3ae567dbb3b1d29fd492c1a09783d52f3d489c1a6f4cf2"},
- "plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"},
- "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
+ "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"},
+ "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.12", "74f4c0ad02d7deac2d04f50b52827a5efdc5c6e7fac5cede145f5f0e4183aedc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.0 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "af6dd5e0aac16ff43571f527a8e0616d62cb80b10eb87aac82170243e50d99c8"},
+ "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
+ "phoenix_template": {:hex, :phoenix_template, "1.0.0", "c57bc5044f25f007dc86ab21895688c098a9f846a8dda6bc40e2d0ddc146e38f", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "1b066f99a26fd22064c12b2600a9a6e56700f591bf7b20b418054ea38b4d4357"},
+ "phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"},
+ "plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"},
+ "plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"},
+ "plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"},
"plug_recaptcha": {:git, "https://github.com/thodg/plug_recaptcha.git", "69e69c1cd5934f98b728b31ce35542042a46373e", []},
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"},
- "postgrex": {:hex, :postgrex, "0.16.2", "0f83198d0e73a36e8d716b90f45f3bde75b5eebf4ade4f43fa1f88c90a812f74", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "a9ea589754d9d4d076121090662b7afe155b374897a6550eb288f11d755acfa0"},
+ "postgrex": {:hex, :postgrex, "0.16.5", "fcc4035cc90e23933c5d69a9cd686e329469446ef7abba2cf70f08e2c4b69810", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "edead639dc6e882618c01d8fc891214c481ab9a3788dfe38dd5e37fd1d5fb2e8"},
"pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"},
"qrcode_ex": {:hex, :qrcode_ex, "0.1.1", "8907a7558325babd30f7f43ff85a0169ef65c30820d68e90d792802318f9a062", [:mix], [], "hexpm", "9eb0b397fb3a1c3b16e55b6de6f845a0b4e7b7100ade39eb59fad98fb62455a7"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},
- "swoosh": {:hex, :swoosh, "1.6.3", "598d3f07641004bedb3eede40057760ae18be1073cff72f079ca1e1fc9cd97b9", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "81ff9d7c7c4005a57465a7eb712edd71db51829aef94c8a34c30c5b9e9964adf"},
- "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"},
+ "swoosh": {:hex, :swoosh, "1.9.1", "0a5d7bf9954eb41d7e55525bc0940379982b090abbaef67cd8e1fd2ed7f8ca1a", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "76dffff3ffcab80f249d5937a592eaef7cc49ac6f4cdd27e622868326ed6371e"},
+ "telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"},
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
diff --git a/priv/static/_assets/app.js b/priv/static/_assets/app.js
index fcffe4c..04dc7e5 100644
--- a/priv/static/_assets/app.js
+++ b/priv/static/_assets/app.js
@@ -29487,7 +29487,7 @@
}, false);
})();
- // ../deps/phoenix/priv/static/phoenix.esm.js
+ // ../deps/phoenix/priv/static/phoenix.mjs
var closure = (value) => {
if (typeof value === "function") {
return value;
@@ -29500,7 +29500,7 @@
};
var globalSelf = typeof self !== "undefined" ? self : null;
var phxWindow = typeof window !== "undefined" ? window : null;
- var global2 = globalSelf || phxWindow || void 0;
+ var global2 = globalSelf || phxWindow || global2;
var DEFAULT_VSN = "2.0.0";
var SOCKET_STATES = { connecting: 0, open: 1, closing: 2, closed: 3 };
var DEFAULT_TIMEOUT = 1e4;
@@ -29819,10 +29819,10 @@
static request(method, endPoint, accept, body, timeout, ontimeout, callback) {
if (global2.XDomainRequest) {
let req = new global2.XDomainRequest();
- this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback);
+ return this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback);
} else {
let req = new global2.XMLHttpRequest();
- this.xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback);
+ return this.xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback);
}
}
static xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback) {
@@ -29838,14 +29838,13 @@
req.onprogress = () => {
};
req.send(body);
+ return req;
}
static xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback) {
req.open(method, endPoint, true);
req.timeout = timeout;
req.setRequestHeader("Content-Type", accept);
- req.onerror = () => {
- callback && callback(null);
- };
+ req.onerror = () => callback && callback(null);
req.onreadystatechange = () => {
if (req.readyState === XHR_STATES.complete && callback) {
let response = this.parseJSON(req.responseText);
@@ -29856,6 +29855,7 @@
req.ontimeout = ontimeout;
}
req.send(body);
+ return req;
}
static parseJSON(resp) {
if (!resp || resp === "") {
@@ -29897,6 +29897,7 @@
this.endPoint = null;
this.token = null;
this.skipHeartbeat = true;
+ this.reqs = /* @__PURE__ */ new Set();
this.onopen = function() {
};
this.onerror = function() {
@@ -29915,19 +29916,19 @@
endpointURL() {
return Ajax.appendParams(this.pollEndpoint, { token: this.token });
}
- closeAndRetry() {
- this.close();
+ closeAndRetry(code, reason, wasClean) {
+ this.close(code, reason, wasClean);
this.readyState = SOCKET_STATES.connecting;
}
ontimeout() {
this.onerror("timeout");
- this.closeAndRetry();
+ this.closeAndRetry(1005, "timeout", false);
+ }
+ isActive() {
+ return this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting;
}
poll() {
- if (!(this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting)) {
- return;
- }
- Ajax.request("GET", this.endpointURL(), "application/json", null, this.timeout, this.ontimeout.bind(this), (resp) => {
+ this.ajax("GET", null, () => this.ontimeout(), (resp) => {
if (resp) {
var { status, token, messages } = resp;
this.token = token;
@@ -29937,9 +29938,7 @@
switch (status) {
case 200:
messages.forEach((msg) => {
- setTimeout(() => {
- this.onmessage({ data: msg });
- }, 0);
+ setTimeout(() => this.onmessage({ data: msg }), 0);
});
this.poll();
break;
@@ -29948,17 +29947,17 @@
break;
case 410:
this.readyState = SOCKET_STATES.open;
- this.onopen();
+ this.onopen({});
this.poll();
break;
case 403:
- this.onerror();
- this.close();
+ this.onerror(403);
+ this.close(1008, "forbidden", false);
break;
case 0:
case 500:
- this.onerror();
- this.closeAndRetry();
+ this.onerror(500);
+ this.closeAndRetry(1011, "internal server error", 500);
break;
default:
throw new Error(`unhandled poll status ${status}`);
@@ -29966,16 +29965,38 @@
});
}
send(body) {
- Ajax.request("POST", this.endpointURL(), "application/json", body, this.timeout, this.onerror.bind(this, "timeout"), (resp) => {
+ this.ajax("POST", body, () => this.onerror("timeout"), (resp) => {
if (!resp || resp.status !== 200) {
this.onerror(resp && resp.status);
- this.closeAndRetry();
+ this.closeAndRetry(1011, "internal server error", false);
}
});
}
- close(_code, _reason) {
+ close(code, reason, wasClean) {
+ for (let req of this.reqs) {
+ req.abort();
+ }
this.readyState = SOCKET_STATES.closed;
- this.onclose();
+ let opts = Object.assign({ code: 1e3, reason: void 0, wasClean: true }, { code, reason, wasClean });
+ if (typeof CloseEvent !== "undefined") {
+ this.onclose(new CloseEvent("close", opts));
+ } else {
+ this.onclose(opts);
+ }
+ }
+ ajax(method, body, onCallerTimeout, callback) {
+ let req;
+ let ontimeout = () => {
+ this.reqs.delete(req);
+ onCallerTimeout();
+ };
+ req = Ajax.request(method, this.endpointURL(), "application/json", body, this.timeout, ontimeout, (resp) => {
+ this.reqs.delete(req);
+ if (this.isActive()) {
+ callback(resp);
+ }
+ });
+ this.reqs.add(req);
}
};
var serializer_default = {
@@ -30131,14 +30152,25 @@
this.params = closure(opts.params || {});
this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`;
this.vsn = opts.vsn || DEFAULT_VSN;
+ this.heartbeatTimeoutTimer = null;
this.heartbeatTimer = null;
this.pendingHeartbeatRef = null;
this.reconnectTimer = new Timer(() => {
this.teardown(() => this.connect());
}, this.reconnectAfterMs);
}
+ getLongPollTransport() {
+ return LongPoll;
+ }
replaceTransport(newTransport) {
- this.disconnect();
+ this.connectClock++;
+ this.closeWasClean = true;
+ this.reconnectTimer.reset();
+ this.sendBuffer = [];
+ if (this.conn) {
+ this.conn.close();
+ this.conn = null;
+ }
this.transport = newTransport;
}
protocol() {
@@ -30161,7 +30193,6 @@
this.teardown(callback, code, reason);
}
connect(params) {
- this.connectClock++;
if (params) {
console && console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor");
this.params = closure(params);
@@ -30169,6 +30200,7 @@
if (this.conn) {
return;
}
+ this.connectClock++;
this.closeWasClean = false;
this.conn = new this.transport(this.endPointURL());
this.conn.binaryType = this.binaryType;
@@ -30204,6 +30236,25 @@
this.stateChangeCallbacks.message.push([ref, callback]);
return ref;
}
+ ping(callback) {
+ if (!this.isConnected()) {
+ return false;
+ }
+ let ref = this.makeRef();
+ let startTime = Date.now();
+ this.push({ topic: "phoenix", event: "heartbeat", payload: {}, ref });
+ let onMsgRef = this.onMessage((msg) => {
+ if (msg.ref === ref) {
+ this.off([onMsgRef]);
+ callback(Date.now() - startTime);
+ }
+ });
+ return true;
+ }
+ clearHeartbeats() {
+ clearTimeout(this.heartbeatTimer);
+ clearTimeout(this.heartbeatTimeoutTimer);
+ }
onConnOpen() {
if (this.hasLogger())
this.log("transport", `connected to ${this.endPointURL()}`);
@@ -30220,7 +30271,9 @@
if (this.hasLogger()) {
this.log("transport", "heartbeat timeout. Attempting to re-establish connection");
}
- this.abnormalClose("heartbeat timeout");
+ this.triggerChanError();
+ this.closeWasClean = false;
+ this.teardown(() => this.reconnectTimer.scheduleTimeout(), WS_CLOSE_NORMAL, "heartbeat timeout");
}
}
resetHeartbeat() {
@@ -30228,8 +30281,8 @@
return;
}
this.pendingHeartbeatRef = null;
- clearTimeout(this.heartbeatTimer);
- setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);
+ this.clearHeartbeats();
+ this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);
}
teardown(callback, code, reason) {
if (!this.conn) {
@@ -30245,6 +30298,12 @@
}
this.waitForSocketClosed(() => {
if (this.conn) {
+ this.conn.onopen = function() {
+ };
+ this.conn.onerror = function() {
+ };
+ this.conn.onmessage = function() {
+ };
this.conn.onclose = function() {
};
this.conn = null;
@@ -30276,7 +30335,7 @@
if (this.hasLogger())
this.log("transport", "close", event);
this.triggerChanError();
- clearTimeout(this.heartbeatTimer);
+ this.clearHeartbeats();
if (!this.closeWasClean && closeCode !== 1e3) {
this.reconnectTimer.scheduleTimeout();
}
@@ -30358,13 +30417,7 @@
}
this.pendingHeartbeatRef = this.makeRef();
this.push({ topic: "phoenix", event: "heartbeat", payload: {}, ref: this.pendingHeartbeatRef });
- this.heartbeatTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs);
- }
- abnormalClose(reason) {
- this.closeWasClean = false;
- if (this.isConnected()) {
- this.conn.close(WS_CLOSE_NORMAL, reason);
- }
+ this.heartbeatTimeoutTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs);
}
flushSendBuffer() {
if (this.isConnected() && this.sendBuffer.length > 0) {
@@ -30376,9 +30429,9 @@
this.decode(rawMessage.data, (msg) => {
let { topic, event, payload, ref, join_ref } = msg;
if (ref && ref === this.pendingHeartbeatRef) {
- clearTimeout(this.heartbeatTimer);
+ this.clearHeartbeats();
this.pendingHeartbeatRef = null;
- setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);
+ this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);
}
if (this.hasLogger())
this.log("receive", `${payload.status || ""} ${topic} ${event} ${ref && "(" + ref + ")" || ""}`, payload);
@@ -30408,8 +30461,8 @@
// ../deps/phoenix_live_view/priv/static/phoenix_live_view.esm.js
var CONSECUTIVE_RELOADS = "consecutive-reloads";
var MAX_RELOADS = 10;
- var RELOAD_JITTER_MIN = 1e3;
- var RELOAD_JITTER_MAX = 3e3;
+ var RELOAD_JITTER_MIN = 5e3;
+ var RELOAD_JITTER_MAX = 1e4;
var FAILSAFE_JITTER = 3e4;
var PHX_EVENT_CLASSES = [
"phx-click-loading",
@@ -30765,7 +30818,7 @@
let { prefix, suffix } = titleEl.dataset;
document.title = `${prefix || ""}${str}${suffix || ""}`;
},
- debounce(el, event, phxDebounce, defaultDebounce, phxThrottle, defaultThrottle, callback) {
+ debounce(el, event, phxDebounce, defaultDebounce, phxThrottle, defaultThrottle, asyncFilter, callback) {
let debounce2 = el.getAttribute(phxDebounce);
let throttle = el.getAttribute(phxThrottle);
if (debounce2 === "") {
@@ -30802,10 +30855,18 @@
} else {
callback();
this.putPrivate(el, THROTTLED, true);
- setTimeout(() => this.triggerCycle(el, DEBOUNCE_TRIGGER), timeout);
+ setTimeout(() => {
+ if (asyncFilter()) {
+ this.triggerCycle(el, DEBOUNCE_TRIGGER);
+ }
+ }, timeout);
}
} else {
- setTimeout(() => this.triggerCycle(el, DEBOUNCE_TRIGGER, currentCycle), timeout);
+ setTimeout(() => {
+ if (asyncFilter()) {
+ this.triggerCycle(el, DEBOUNCE_TRIGGER, currentCycle);
+ }
+ }, timeout);
}
let form = el.form;
if (form && this.once(form, "bind-debounce")) {
@@ -30872,8 +30933,10 @@
firstPhxChild(el) {
return this.isPhxChild(el) ? el : this.all(el, `[${PHX_PARENT_ID}]`)[0];
},
- dispatchEvent(target, eventString, detail = {}) {
- let event = new CustomEvent(eventString, { bubbles: true, cancelable: true, detail });
+ dispatchEvent(target, name, opts = {}) {
+ let bubbles = opts.bubbles === void 0 ? true : !!opts.bubbles;
+ let eventOpts = { bubbles, cancelable: true, detail: opts.detail || {} };
+ let event = name === "click" ? new MouseEvent("click", eventOpts) : new CustomEvent(name, eventOpts);
target.dispatchEvent(event);
},
cloneNode(node, html) {
@@ -30911,7 +30974,7 @@
},
mergeFocusedInput(target, source) {
if (!(target instanceof HTMLSelectElement)) {
- DOM.mergeAttrs(target, source, { except: ["value"] });
+ DOM.mergeAttrs(target, source, { exclude: ["value"] });
}
if (source.readOnly) {
target.setAttribute("readonly", true);
@@ -32272,7 +32335,7 @@ within:
}
constructor(view, el, callbacks) {
this.__view = view;
- this.__liveSocket = view.liveSocket;
+ this.liveSocket = view.liveSocket;
this.__callbacks = callbacks;
this.__listeners = /* @__PURE__ */ new Set();
this.__isDisconnected = false;
@@ -32351,17 +32414,23 @@ within:
isVisible(el) {
return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length > 0);
},
- exec_dispatch(eventType, phxEvent, view, sourceEl, el, { to, event, detail }) {
- dom_default.dispatchEvent(el, event, detail);
+ exec_dispatch(eventType, phxEvent, view, sourceEl, el, { to, event, detail, bubbles }) {
+ detail = detail || {};
+ detail.dispatcher = sourceEl;
+ dom_default.dispatchEvent(el, event, { detail, bubbles });
},
exec_push(eventType, phxEvent, view, sourceEl, el, args) {
- let { event, data, target, page_loading, loading, value } = args;
+ if (!view.isConnected()) {
+ return;
+ }
+ let { event, data, target, page_loading, loading, value, dispatcher } = args;
let pushOpts = { loading, value, target, page_loading: !!page_loading };
- let targetSrc = eventType === "change" ? sourceEl.form : sourceEl;
+ let targetSrc = eventType === "change" && dispatcher ? dispatcher : sourceEl;
let phxTarget = target || targetSrc.getAttribute(view.binding("target")) || targetSrc;
view.withinTargets(phxTarget, (targetView, targetCtx) => {
if (eventType === "change") {
let { newCid, _target, callback } = args;
+ _target = _target || (sourceEl instanceof HTMLInputElement ? sourceEl.name : void 0);
if (_target) {
pushOpts._target = _target;
}
@@ -32484,19 +32553,15 @@ within:
},
setOrRemoveAttrs(el, sets, removes) {
let [prevSets, prevRemoves] = dom_default.getSticky(el, "attrs", [[], []]);
- let keepSets = sets.filter(([attr, _val]) => !this.hasSet(prevSets, attr) && !el.attributes.getNamedItem(attr));
- let keepRemoves = removes.filter((attr) => prevRemoves.indexOf(attr) < 0 && el.attributes.getNamedItem(attr));
- let newSets = prevSets.filter(([attr, _val]) => removes.indexOf(attr) < 0).concat(keepSets);
- let newRemoves = prevRemoves.filter((attr) => !this.hasSet(sets, attr)).concat(keepRemoves);
+ let alteredAttrs = sets.map(([attr, _val]) => attr).concat(removes);
+ let newSets = prevSets.filter(([attr, _val]) => !alteredAttrs.includes(attr)).concat(sets);
+ let newRemoves = prevRemoves.filter((attr) => !alteredAttrs.includes(attr)).concat(removes);
dom_default.putSticky(el, "attrs", (currentEl) => {
newRemoves.forEach((attr) => currentEl.removeAttribute(attr));
newSets.forEach(([attr, val]) => currentEl.setAttribute(attr, val));
return [newSets, newRemoves];
});
},
- hasSet(sets, nameSearch) {
- return sets.find(([name, val]) => name === nameSearch);
- },
hasAllClasses(el, classes) {
return classes.every((name) => el.classList.contains(name));
},
@@ -32508,7 +32573,7 @@ within:
}
};
var js_default = JS;
- var serializeForm = (form, meta = {}) => {
+ var serializeForm = (form, meta, onlyNames = []) => {
let formData = new FormData(form);
let toRemove = [];
formData.forEach((val, key, _index) => {
@@ -32519,7 +32584,9 @@ within:
toRemove.forEach((key) => formData.delete(key));
let params = new URLSearchParams();
for (let [key, val] of formData.entries()) {
- params.append(key, val);
+ if (onlyNames.length === 0 || onlyNames.indexOf(key) >= 0) {
+ params.append(key, val);
+ }
}
for (let metaKey in meta) {
params.append(metaKey, meta[metaKey]);
@@ -32815,12 +32882,15 @@ within:
let destroyedCIDs = [];
elements.forEach((parent) => {
let components = dom_default.all(parent, `[${PHX_COMPONENT}]`);
+ let hooks = dom_default.all(parent, `[${this.binding(PHX_HOOK)}]`);
components.concat(parent).forEach((el) => {
let cid = this.componentID(el);
if (isCid(cid) && destroyedCIDs.indexOf(cid) === -1) {
destroyedCIDs.push(cid);
}
- let hook = this.getHook(el);
+ });
+ hooks.concat(parent).forEach((hookEl) => {
+ let hook = this.getHook(hookEl);
hook && this.destroyHook(hook);
});
});
@@ -32884,7 +32954,7 @@ within:
});
}
update(diff, events) {
- if (this.isJoinPending() || this.liveSocket.hasPendingLink()) {
+ if (this.isJoinPending() || this.liveSocket.hasPendingLink() && !dom_default.isPhxSticky(this.el)) {
return this.pendingDiffs.push({ diff, events });
}
this.rendered.mergeDiff(diff);
@@ -33036,13 +33106,15 @@ within:
return this.onLiveRedirect(resp.live_redirect);
}
this.log("error", () => ["unable to join", resp]);
- return this.liveSocket.reloadWithJitter(this);
+ if (this.liveSocket.isConnected()) {
+ this.liveSocket.reloadWithJitter(this);
+ }
}
onClose(reason) {
if (this.isDestroyed()) {
return;
}
- if (this.isJoinPending() && document.visibilityState !== "hidden" || this.liveSocket.hasPendingLink() && reason !== "leave") {
+ if (this.liveSocket.hasPendingLink() && reason !== "leave") {
return this.liveSocket.reloadWithJitter(this);
}
this.destroyAllChildren();
@@ -33056,14 +33128,16 @@ within:
}
onError(reason) {
this.onClose(reason);
- this.log("error", () => ["view crashed", reason]);
+ if (this.liveSocket.isConnected()) {
+ this.log("error", () => ["view crashed", reason]);
+ }
if (!this.liveSocket.isUnloaded()) {
this.displayError();
}
}
displayError() {
if (this.isMain()) {
- dom_default.dispatchEvent(window, "phx:page-loading-start", { to: this.href, kind: "error" });
+ dom_default.dispatchEvent(window, "phx:page-loading-start", { detail: { to: this.href, kind: "error" } });
}
this.showLoader();
this.setContainerClasses(PHX_DISCONNECTED_CLASS, PHX_ERROR_CLASS);
@@ -33260,7 +33334,12 @@ within:
let uploads;
let cid = isCid(forceCid) ? forceCid : this.targetComponentID(inputEl.form, targetCtx);
let refGenerator = () => this.putRef([inputEl, inputEl.form], "change", opts);
- let formData = serializeForm(inputEl.form, { _target: opts._target });
+ let formData;
+ if (inputEl.getAttribute(this.binding("change"))) {
+ formData = serializeForm(inputEl.form, { _target: opts._target }, [inputEl.name]);
+ } else {
+ formData = serializeForm(inputEl.form, { _target: opts._target });
+ }
if (dom_default.isUploadInput(inputEl) && inputEl.files && inputEl.files.length > 0) {
LiveUploader.trackFiles(inputEl, Array.from(inputEl.files));
}
@@ -33362,7 +33441,7 @@ within:
}, onReply);
});
} else {
- let formData = serializeForm(formEl);
+ let formData = serializeForm(formEl, {});
this.pushWithReply(refGenerator, "event", {
type: "form",
event: phxEvent,
@@ -33416,7 +33495,7 @@ within:
} else if (inputs.length > 1) {
logError(`duplicate live file inputs found matching the name "${name}"`);
} else {
- dom_default.dispatchEvent(inputs[0], PHX_TRACK_UPLOADS, { files: filesOrBlobs });
+ dom_default.dispatchEvent(inputs[0], PHX_TRACK_UPLOADS, { detail: { files: filesOrBlobs } });
}
}
pushFormRecovery(form, newCid, callback) {
@@ -33524,8 +33603,9 @@ within:
this.prevActive = null;
this.silenced = false;
this.main = null;
+ this.outgoingMainEl = null;
+ this.clickStartedAtTarget = null;
this.linkRef = 1;
- this.clickRef = 1;
this.roots = {};
this.href = window.location.href;
this.pendingLink = null;
@@ -33533,6 +33613,7 @@ within:
this.hooks = opts.hooks || {};
this.uploaders = opts.uploaders || {};
this.loaderTimeout = opts.loaderTimeout || LOADER_TIMEOUT;
+ this.reloadWithJitterTimer = null;
this.maxReloads = opts.maxReloads || MAX_RELOADS;
this.reloadJitterMin = opts.reloadJitterMin || RELOAD_JITTER_MIN;
this.reloadJitterMax = opts.reloadJitterMax || RELOAD_JITTER_MAX;
@@ -33557,6 +33638,9 @@ within:
isDebugEnabled() {
return this.sessionStorage.getItem(PHX_LV_DEBUG) === "true";
}
+ isDebugDisabled() {
+ return this.sessionStorage.getItem(PHX_LV_DEBUG) === "false";
+ }
enableDebug() {
this.sessionStorage.setItem(PHX_LV_DEBUG, "true");
}
@@ -33564,7 +33648,7 @@ within:
this.sessionStorage.setItem(PHX_LV_PROFILE, "true");
}
disableDebug() {
- this.sessionStorage.removeItem(PHX_LV_DEBUG);
+ this.sessionStorage.setItem(PHX_LV_DEBUG, "false");
}
disableProfiling() {
this.sessionStorage.removeItem(PHX_LV_PROFILE);
@@ -33585,10 +33669,15 @@ within:
return this.socket;
}
connect() {
+ if (window.location.hostname === "localhost" && !this.isDebugDisabled()) {
+ this.enableDebug();
+ }
let doConnect = () => {
if (this.joinRootViews()) {
this.bindTopLevelEvents();
this.socket.connect();
+ } else if (this.main) {
+ this.socket.connect();
}
};
if (["complete", "loaded", "interactive"].indexOf(document.readyState) >= 0) {
@@ -33598,8 +33687,14 @@ within:
}
}
disconnect(callback) {
+ clearTimeout(this.reloadWithJitterTimer);
this.socket.disconnect(callback);
}
+ replaceTransport(transport) {
+ clearTimeout(this.reloadWithJitterTimer);
+ this.socket.replaceTransport(transport);
+ this.connect();
+ }
execJS(el, encodedJS, eventType = null) {
this.owner(el, (view) => js_default.exec(eventType, encodedJS, view, el));
}
@@ -33646,7 +33741,7 @@ within:
let latency = this.getLatencySim();
let oldJoinCount = view.joinCount;
if (!latency) {
- if (opts.timeout) {
+ if (this.isConnected() && opts.timeout) {
return push().receive("timeout", () => {
if (view.joinCount === oldJoinCount && !view.isDestroyed()) {
this.reloadWithJitter(view, () => {
@@ -33674,18 +33769,24 @@ within:
return fakePush;
}
reloadWithJitter(view, log) {
- view.destroy();
+ clearTimeout(this.reloadWithJitterTimer);
this.disconnect();
let minMs = this.reloadJitterMin;
let maxMs = this.reloadJitterMax;
let afterMs = Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs;
let tries = browser_default.updateLocal(this.localStorage, window.location.pathname, CONSECUTIVE_RELOADS, 0, (count) => count + 1);
- log ? log() : this.log(view, "join", () => [`encountered ${tries} consecutive reloads`]);
if (tries > this.maxReloads) {
- this.log(view, "join", () => [`exceeded ${this.maxReloads} consecutive reloads. Entering failsafe mode`]);
afterMs = this.failsafeJitter;
}
- setTimeout(() => {
+ this.reloadWithJitterTimer = setTimeout(() => {
+ if (view.isDestroyed() || view.isConnected()) {
+ return;
+ }
+ view.destroy();
+ log ? log() : this.log(view, "join", () => [`encountered ${tries} consecutive reloads`]);
+ if (tries > this.maxReloads) {
+ this.log(view, "join", () => [`exceeded ${this.maxReloads} consecutive reloads. Entering failsafe mode`]);
+ }
if (this.hasPendingLink()) {
window.location = this.pendingLink;
} else {
@@ -33731,8 +33832,8 @@ within:
browser_default.redirect(to, flash);
}
replaceMain(href, flash, callback = null, linkRef = this.setPendingLink(href)) {
- let oldMainEl = this.main.el;
- let newMainEl = dom_default.cloneNode(oldMainEl, "");
+ this.outgoingMainEl = this.outgoingMainEl || this.main.el;
+ let newMainEl = dom_default.cloneNode(this.outgoingMainEl, "");
this.main.showLoader(this.loaderTimeout);
this.main.destroy();
this.main = this.newRootView(newMainEl, flash);
@@ -33742,8 +33843,9 @@ within:
if (joinCount === 1 && this.commitPendingLink(linkRef)) {
this.requestDOMUpdate(() => {
dom_default.findPhxSticky(document).forEach((el) => newMainEl.appendChild(el));
- oldMainEl.replaceWith(newMainEl);
- callback && callback();
+ this.outgoingMainEl.replaceWith(newMainEl);
+ this.outgoingMainEl = null;
+ callback && requestAnimationFrame(callback);
onDone();
});
}
@@ -33787,6 +33889,7 @@ within:
this.roots[id].destroy();
delete this.roots[id];
}
+ this.main = null;
}
destroyViewByEl(el) {
let root = this.getRootById(el.getAttribute(PHX_ROOT_ID));
@@ -33841,7 +33944,7 @@ within:
}
this.boundTopLevelEvents = true;
this.socket.onClose((event) => {
- if (event.code === 1e3 && this.main) {
+ if (event && event.code === 1e3 && this.main) {
this.reloadWithJitter(this.main);
}
});
@@ -33934,7 +34037,7 @@ within:
let windowBinding = this.binding(`window-${event}`);
let targetPhxEvent = e.target.getAttribute && e.target.getAttribute(binding);
if (targetPhxEvent) {
- this.debounce(e.target, e, () => {
+ this.debounce(e.target, e, browserEventName, () => {
this.withinOwners(e.target, (view) => {
callback(e, event, view, e.target, targetPhxEvent, null);
});
@@ -33942,7 +34045,7 @@ within:
} else {
dom_default.all(document, `[${windowBinding}]`, (el) => {
let phxEvent = el.getAttribute(windowBinding);
- this.debounce(el, e, () => {
+ this.debounce(el, e, browserEventName, () => {
this.withinOwners(el, (view) => {
callback(e, event, view, el, phxEvent, "window");
});
@@ -33953,23 +34056,21 @@ within:
}
}
bindClicks() {
+ window.addEventListener("mousedown", (e) => this.clickStartedAtTarget = e.target);
this.bindClick("click", "click", false);
this.bindClick("mousedown", "capture-click", true);
}
bindClick(eventName, bindingName, capture) {
let click = this.binding(bindingName);
window.addEventListener(eventName, (e) => {
- if (!this.isConnected()) {
- return;
- }
- this.clickRef++;
- let clickRefWas = this.clickRef;
let target = null;
if (capture) {
target = e.target.matches(`[${click}]`) ? e.target : e.target.querySelector(`[${click}]`);
} else {
- target = closestPhxBinding(e.target, click);
- this.dispatchClickAway(e, clickRefWas);
+ let clickStartedAtTarget = this.clickStartedAtTarget || e.target;
+ target = closestPhxBinding(clickStartedAtTarget, click);
+ this.dispatchClickAway(e, clickStartedAtTarget);
+ this.clickStartedAtTarget = null;
}
let phxEvent = target && target.getAttribute(click);
if (!phxEvent) {
@@ -33978,22 +34079,20 @@ within:
if (target.getAttribute("href") === "#") {
e.preventDefault();
}
- this.debounce(target, e, () => {
+ this.debounce(target, e, "click", () => {
this.withinOwners(target, (view) => {
js_default.exec("click", phxEvent, view, target, ["push", { data: this.eventMeta("click", e, target) }]);
});
});
}, capture);
}
- dispatchClickAway(e, clickRefWas) {
+ dispatchClickAway(e, clickStartedAt) {
let phxClickAway = this.binding("click-away");
- let phxClick = this.binding("click");
dom_default.all(document, `[${phxClickAway}]`, (el) => {
- if (!(el.isSameNode(e.target) || el.contains(e.target))) {
+ if (!(el.isSameNode(clickStartedAt) || el.contains(clickStartedAt))) {
this.withinOwners(e.target, (view) => {
let phxEvent = el.getAttribute(phxClickAway);
if (js_default.isVisible(el)) {
- let target = e.target.closest(`[${phxClick}]`) || e.target;
js_default.exec("click", phxEvent, view, el, ["push", { data: this.eventMeta("click", e, e.target) }]);
}
});
@@ -34047,6 +34146,7 @@ within:
let href = target.href;
let linkState = target.getAttribute(PHX_LINK_STATE);
e.preventDefault();
+ e.stopImmediatePropagation();
if (this.pendingLink === href) {
return;
}
@@ -34062,14 +34162,14 @@ within:
}, false);
}
dispatchEvent(event, payload = {}) {
- dom_default.dispatchEvent(window, `phx:${event}`, payload);
+ dom_default.dispatchEvent(window, `phx:${event}`, { detail: payload });
}
dispatchEvents(events) {
events.forEach(([event, payload]) => this.dispatchEvent(event, payload));
}
withPageLoading(info, callback) {
- dom_default.dispatchEvent(window, "phx:page-loading-start", info);
- let done = () => dom_default.dispatchEvent(window, "phx:page-loading-stop", info);
+ dom_default.dispatchEvent(window, "phx:page-loading-start", { detail: info });
+ let done = () => dom_default.dispatchEvent(window, "phx:page-loading-stop", { detail: info });
return callback ? callback(done) : done;
}
pushHistoryPatch(href, linkState, targetEl) {
@@ -34124,14 +34224,18 @@ within:
}, false);
for (let type of ["change", "input"]) {
this.on(type, (e) => {
+ let phxChange = this.binding("change");
let input = e.target;
- let phxEvent = input.form && input.form.getAttribute(this.binding("change"));
+ let inputEvent = input.getAttribute(phxChange);
+ let formEvent = input.form && input.form.getAttribute(phxChange);
+ let phxEvent = inputEvent || formEvent;
if (!phxEvent) {
return;
}
if (input.type === "number" && input.validity && input.validity.badInput) {
return;
}
+ let dispatcher = inputEvent ? input : input.form;
let currentIterations = iterations;
iterations++;
let { at, type: lastType } = dom_default.private(input, "prev-iteration") || {};
@@ -34139,24 +34243,32 @@ within:
return;
}
dom_default.putPrivate(input, "prev-iteration", { at: currentIterations, type });
- this.debounce(input, e, () => {
- this.withinOwners(input.form, (view) => {
+ this.debounce(input, e, type, () => {
+ this.withinOwners(dispatcher, (view) => {
dom_default.putPrivate(input, PHX_HAS_FOCUSED, true);
if (!dom_default.isTextualInput(input)) {
this.setActiveElement(input);
}
- js_default.exec("change", phxEvent, view, input, ["push", { _target: e.target.name }]);
+ js_default.exec("change", phxEvent, view, input, ["push", { _target: e.target.name, dispatcher }]);
});
});
}, false);
}
}
- debounce(el, event, callback) {
+ debounce(el, event, eventType, callback) {
+ if (eventType === "blur" || eventType === "focusout") {
+ return callback();
+ }
let phxDebounce = this.binding(PHX_DEBOUNCE);
let phxThrottle = this.binding(PHX_THROTTLE);
let defaultDebounce = this.defaults.debounce.toString();
let defaultThrottle = this.defaults.throttle.toString();
- dom_default.debounce(el, event, phxDebounce, defaultDebounce, phxThrottle, defaultThrottle, callback);
+ this.withinOwners(el, (view) => {
+ let asyncFilter = () => !view.isDestroyed() && document.body.contains(el);
+ dom_default.debounce(el, event, phxDebounce, defaultDebounce, phxThrottle, defaultThrottle, asyncFilter, () => {
+ callback();
+ });
+ });
}
silenceEvents(callback) {
this.silenced = true;
@@ -34264,3 +34376,4 @@ bootstrap/dist/js/bootstrap.esm.js:
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*)
*/
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL3ZlbmRvci9wcmlzbS5qcyIsICIuLi8uLi8uLi9hc3NldHMvdmVuZG9yL3RvcGJhci5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMvYXBwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2luZGV4LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9mb3JtYXQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdmFsaWRhdGVNb2RpZmllcnMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdW5pcXVlQnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci1saXRlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9pbmRleC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL2V2ZW50LWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2RvbS9kYXRhLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vbWFuaXB1bGF0b3IuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvY29uZmlnLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9iYXNlLWNvbXBvbmVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9hbGVydC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYnV0dG9uLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vc2VsZWN0b3ItZW5naW5lLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3N3aXBlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9jYXJvdXNlbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvY29sbGFwc2UuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2Ryb3Bkb3duLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3Njcm9sbGJhci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9iYWNrZHJvcC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9mb2N1c3RyYXAuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL21vZGFsLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9vZmZjYW52YXMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc2FuaXRpemVyLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3RlbXBsYXRlLWZhY3RvcnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3Rvb2x0aXAuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3BvcG92ZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3Njcm9sbHNweS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdGFiLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90b2FzdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMvcmVwb3NpdG9yeS5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMva214X2FuaW0uanMiLCAiLi4vLi4vLi4vYXNzZXRzL2pzL2tteF9jb2xvcnMuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2h0bWwvcHJpdi9zdGF0aWMvcGhvZW5peF9odG1sLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC91dGlscy5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9wdXNoLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC90aW1lci5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvY2hhbm5lbC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvYWpheC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvbG9uZ3BvbGwuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3ByZXNlbmNlLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9zZXJpYWxpemVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9zb2NrZXQuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2VudHJ5X3VwbG9hZGVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L3V0aWxzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2Jyb3dzZXIuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvZG9tLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L3VwbG9hZF9lbnRyeS5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9saXZlX3VwbG9hZGVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2hvb2tzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2RvbV9wb3N0X21vcnBoX3Jlc3RvcmVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL25vZGVfbW9kdWxlcy9tb3JwaGRvbS9kaXN0L21vcnBoZG9tLWVzbS5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9kb21fcGF0Y2guanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvcmVuZGVyZWQuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdmlld19ob29rLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2pzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L3ZpZXcuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvbGl2ZV9zb2NrZXQuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My42LjBcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMS0wMy0wMlQxNzowOFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjYuMFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXZlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICggaSArIDEgKSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0b2RkOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gaSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIHByb3ZpZGVkIGNvbnRleHQ7IGZhbGxzIGJhY2sgdG8gdGhlIGdsb2JhbCBvbmVcblx0Ly8gaWYgbm90IHNwZWNpZmllZC5cblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMsIGRvYyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSwgZG9jICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy42XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDIxLTAyLTE2XG4gKi9cbiggZnVuY3Rpb24oIHdpbmRvdyApIHtcbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICgge30gKS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hOYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbIGkgXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufFwiICtcblx0XHRcImlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdXG5cdFx0Ly8gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRyZXR1cm4gbm9uSGV4ID9cblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRub25IZXggOlxuXG5cdFx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArXG5cdFx0XHRcdGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKCB0YXJnZXRbIGorKyBdID0gZWxzWyBpKysgXSApICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KCBub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJjb21iaW5hdG9ycy50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9PSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdCggXCJ8XCIgKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFyclsgaSBdIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLm5leHRTaWJsaW5nICkgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKCBuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggcHJlZmVycmVkRG9jICE9IGRvY3VtZW50ICYmXG5cdFx0KCBzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldyApICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSAxMSssIEVkZ2UgMTIgLSAxOCssIENocm9tZSA8PTE2IC0gMjUgb25seSwgRmlyZWZveCA8PTMuNiAtIDMxIG9ubHksXG5cdC8vIFNhZmFyaSA0IC0gNSBvbmx5LCBPcGVyYSA8PTExLjYgLSAxMi54IG9ubHlcblx0Ly8gSUUvRWRnZSAmIG9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjAgb25seVxuXHQvLyBTYWZhcmkgNi4wIHN1cHBvcnRzIDpzY29wZSBidXQgaXQncyBhbiBhbGlhcyBvZiA6cm9vdCB0aGVyZS5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXHRcdHJldHVybiB0eXBlb2YgZWwucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0IWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlIGZpZWxkc2V0IGRpdlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCBcImNsYXNzTmFtZVwiICk7XG5cdH0gKTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCggXCJcIiApICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCIqXCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFsgXCJUQUdcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbIFwiQ0xBU1NcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoICggc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSApICkge1xuXG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHR2YXIgaW5wdXQ7XG5cblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlttc2FsbG93Y2FwdHVyZV49JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdFx0Ly8gYXJvdW5kIHRoZSBpc3N1ZS5cblx0XHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIlwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqbmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKj1cIiArXG5cdFx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmNoZWNrZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLiMuK1srfl1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9My42IC0gNSBvbmx5XG5cdFx0XHQvLyBPbGQgRmlyZWZveCBkb2Vzbid0IHRocm93IG9uIGEgYmFkbHktZXNjYXBlZCBpZGVudGlmaWVyLlxuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCJcXFxcXFxmXCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIltcXFxcclxcXFxuXFxcXGZdXCIgKTtcblx0XHR9ICk7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmVuYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IE9wZXJhIDEwIC0gMTEgb25seVxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiKiw6eFwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIsLio6XCIgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoICggbWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICkgKSApICkge1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSApO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoICggYiA9IGIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdHJldHVybiBhID09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbIGkgXSA9PT0gYnBbIGkgXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFsgaSBdLCBicFsgaSBdICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdGFwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHRzZXREb2N1bWVudCggZWxlbSApO1xuXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG59O1xuXG5TaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxuICovXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5vZGUsXG5cdFx0cmV0ID0gXCJcIixcblx0XHRpID0gMCxcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0fVxuXG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fFxuXHRcdFx0XHRtYXRjaFsgNSBdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFsgNiBdICYmIG1hdGNoWyAyIF07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByWyBcIkNISUxEXCIgXS50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQoIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcdFx0XCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkgKSAmJiBjbGFzc0NhY2hlKFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHxcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSBub2RlWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcInhtbDpsYW5nXCIgKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSggXCJsYW5nXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKCBlbGVtID0gZWxlbS5wYXJlbnROb2RlICkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmXG5cdFx0XHRcdCggIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkgKSAmJlxuXHRcdFx0XHQhISggZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCApO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkICkgfHxcblx0XHRcdFx0KCBub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1sgXCJlbXB0eVwiIF0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgP1xuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XG5cdFx0XHRcdGFyZ3VtZW50ID4gbGVuZ3RoID9cblx0XHRcdFx0XHRsZW5ndGggOlxuXHRcdFx0XHRcdGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1sgXCJudGhcIiBdID0gRXhwci5wc2V1ZG9zWyBcImVxXCIgXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKCBtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWyAwIF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKCB0b2tlbnMgPSBbXSApICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoICggbWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbIDAgXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSApO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKCBtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkgKSAmJiAoICFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KCBtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSApICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1sgaSBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAoIG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzWyBpIF0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbIDAgXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyhcblx0XHRcdFx0c2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsXG5cdFx0XHRcdFtdXG5cdFx0XHQpLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICggZWxlbSA9IHRlbXBbIGkgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbIGkgXSBdID0gISggbWF0Y2hlckluWyBwb3N0TWFwWyBpIF0gXSA9IGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblxuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKCBtYXRjaGVySW5bIGkgXSA9IGVsZW0gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAoIG1hdGNoZXJPdXQgPSBbXSApLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSAmJlxuXHRcdFx0XHRcdFx0KCB0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdCggY2hlY2tDb250ZXh0ID0gY29udGV4dCApLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdHRva2Vuc1xuXHRcdFx0XHRcdFx0LnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHQuY29uY2F0KCB7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSApXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAoIHRva2VucyA9IHRva2Vucy5zbGljZSggaiApICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyBcIlRBR1wiIF0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFsgaSBdICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKFxuXHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKVxuXHRcdCk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFsgXCJJRFwiIF0oIHRva2VuLm1hdGNoZXNbIDAgXVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwgY29udGV4dCApIHx8IFtdIClbIDAgXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbIFwibmVlZHNDb250ZXh0XCIgXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcImhyZWZcIiApID09PSBcIiNcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgX25hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0cmV0dXJuIGVsLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT0gbnVsbDtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0gKTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSApKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHRcdFx0Ly8gSW4gQ2hyb21lLCBpZiBhbiBlbGVtZW50IGhhdmluZyBhIGZvY3Vzb3V0IGhhbmRsZXIgaXMgYmx1cnJlZCBieVxuXHRcdFx0XHRcdFx0Ly8gY2xpY2tpbmcgb3V0c2lkZSBvZiBpdCwgaXQgaW52b2tlcyB0aGUgaGFuZGxlciBzeW5jaHJvbm91c2x5LiBJZlxuXHRcdFx0XHRcdFx0Ly8gdGhhdCBoYW5kbGVyIGNhbGxzIGAucmVtb3ZlKClgIG9uIHRoZSBlbGVtZW50LCB0aGUgZGF0YSBpcyBjbGVhcmVkLFxuXHRcdFx0XHRcdFx0Ly8gbGVhdmluZyBgcmVzdWx0YCB1bmRlZmluZWQuIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGlzLlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGFzIGl0J3MgYWxyZWFkeSBiZWluZyBmaXJlZFxuXHRcdC8vIGluIGxldmVyYWdlTmF0aXZlLlxuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA3MCtcblx0XHQvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRoc1xuXHRcdC8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGVcIjtcblx0XHRcdFx0dHIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgZGlzcGxheTogYmxvY2tcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cbmpRdWVyeS50cmltID0gZnVuY3Rpb24oIHRleHQgKSB7XG5cdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFwiXCIgOlxuXHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwgIi8qIFByaXNtSlMgMS4yOC4wXG5odHRwczovL3ByaXNtanMuY29tL2Rvd25sb2FkLmh0bWwjdGhlbWVzPXByaXNtLXRvbW9ycm93Jmxhbmd1YWdlcz1tYXJrdXArY3NzK2NsaWtlK2phdmFzY3JpcHQrYWJhcCthYm5mK2FjdGlvbnNjcmlwdCthZGErYWdkYSthbCthbnRscjQrYXBhY2hlY29uZithcGV4K2FwbCthcHBsZXNjcmlwdCthcWwrYXJkdWlubythcmZmK2FybWFzbSthcnR1cm8rYXNjaWlkb2MrYXNwbmV0K2FzbTY1MDIrYXNtYXRtZWwrYXV0b2hvdGtleSthdXRvaXQrYXZpc3ludGgrYXZyby1pZGwrYXdrK2Jhc2grYmFzaWMrYmF0Y2grYmJjb2RlK2JpY2VwK2JpcmIrYmlzb24rYm5mK2JyYWluZnVjayticmlnaHRzY3JpcHQrYnJvK2JzbCtjK2NzaGFycCtjcHArY2ZzY3JpcHQrY2hhaXNjcmlwdCtjaWwrY2xvanVyZStjbWFrZStjb2JvbCtjb2ZmZWVzY3JpcHQrY29uY3VybmFzK2NzcCtjb29rbGFuZytjb3ErY3J5c3RhbCtjc3MtZXh0cmFzK2NzditjdWUrY3lwaGVyK2QrZGFydCtkYXRhd2VhdmUrZGF4K2RoYWxsK2RpZmYrZGphbmdvK2Rucy16b25lLWZpbGUrZG9ja2VyK2RvdCtlYm5mK2VkaXRvcmNvbmZpZytlaWZmZWwrZWpzK2VsaXhpcitlbG0rZXRsdWErZXJiK2VybGFuZytleGNlbC1mb3JtdWxhK2ZzaGFycCtmYWN0b3IrZmFsc2UrZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzK2Zsb3crZm9ydHJhbitmdGwrZ21sK2dhcCtnY29kZStnZHNjcmlwdCtnZWRjb20rZ2V0dGV4dCtnaGVya2luK2dpdCtnbHNsK2duK2xpbmtlci1zY3JpcHQrZ28rZ28tbW9kdWxlK2dyYWRsZStncmFwaHFsK2dyb292eStoYW1sK2hhbmRsZWJhcnMraGFza2VsbCtoYXhlK2hjbCtobHNsK2hvb24raHR0cCtocGtwK2hzdHMraWNoaWdvamFtK2ljb24raWN1LW1lc3NhZ2UtZm9ybWF0K2lkcmlzK2lnbm9yZStpbmZvcm03K2luaStpbytqK2phdmEramF2YWRvYytqYXZhZG9jbGlrZStqYXZhc3RhY2t0cmFjZStqZXhsK2pvbGllK2pxK2pzZG9jK2pzLWV4dHJhcytqc29uK2pzb241K2pzb25wK2pzc3RhY2t0cmFjZStqcy10ZW1wbGF0ZXMranVsaWEra2VlcGFsaXZlZCtrZXltYW4ra290bGluK2t1bWlyK2t1c3RvK2xhdGV4K2xhdHRlK2xlc3MrbGlseXBvbmQrbGlxdWlkK2xpc3ArbGl2ZXNjcmlwdCtsbHZtK2xvZytsb2xjb2RlK2x1YSttYWdtYSttYWtlZmlsZSttYXJrZG93bittYXJrdXAtdGVtcGxhdGluZyttYXRhK21hdGxhYittYXhzY3JpcHQrbWVsK21lcm1haWQrbWl6YXIrbW9uZ29kYittb25rZXkrbW9vbnNjcmlwdCtuMXFsK240anMrbmFuZDJ0ZXRyaXMtaGRsK25hbmlzY3JpcHQrbmFzbStuZW9uK25ldm9kK25naW54K25pbStuaXgrbnNpcytvYmplY3RpdmVjK29jYW1sK29kaW4rb3BlbmNsK29wZW5xYXNtK296K3BhcmlncCtwYXJzZXIrcGFzY2FsK3Bhc2NhbGlnbytwc2wrcGNheGlzK3Blb3BsZWNvZGUrcGVybCtwaHArcGhwZG9jK3BocC1leHRyYXMrcGxhbnQtdW1sK3Bsc3FsK3Bvd2VycXVlcnkrcG93ZXJzaGVsbCtwcm9jZXNzaW5nK3Byb2xvZytwcm9tcWwrcHJvcGVydGllcytwcm90b2J1ZitwdWcrcHVwcGV0K3B1cmUrcHVyZWJhc2ljK3B1cmVzY3JpcHQrcHl0aG9uK3FzaGFycCtxK3FtbCtxb3JlK3IrcmFja2V0K2NzaHRtbCtqc3grdHN4K3JlYXNvbityZWdleCtyZWdvK3JlbnB5K3Jlc2NyaXB0K3Jlc3QrcmlwK3JvYm9jb25mK3JvYm90ZnJhbWV3b3JrK3J1YnkrcnVzdCtzYXMrc2FzcytzY3NzK3NjYWxhK3NjaGVtZStzaGVsbC1zZXNzaW9uK3NtYWxpK3NtYWxsdGFsaytzbWFydHkrc21sK3NvbGlkaXR5K3NvbHV0aW9uLWZpbGUrc295K3NwYXJxbCtzcGx1bmstc3BsK3NxZitzcWwrc3F1aXJyZWwrc3RhbitzdGF0YStpZWNzdCtzdHlsdXMrc3VwZXJjb2xsaWRlcitzd2lmdCtzeXN0ZW1kK3Q0LXRlbXBsYXRpbmcrdDQtY3MrdDQtdmIrdGFwK3RjbCt0dDIrdGV4dGlsZSt0b21sK3RyZW1vcit0dXJ0bGUrdHdpZyt0eXBlc2NyaXB0K3R5cG9zY3JpcHQrdW5yZWFsc2NyaXB0K3VvcmF6b3IrdXJpK3YrdmFsYSt2Ym5ldCt2ZWxvY2l0eSt2ZXJpbG9nK3ZoZGwrdmltK3Zpc3VhbC1iYXNpYyt3YXJwc2NyaXB0K3dhc20rd2ViLWlkbCt3Z3NsK3dpa2krd29sZnJhbSt3cmVuK3hlb3JhK3htbC1kb2MreG9qbyt4cXVlcnkreWFtbCt5YW5nK3ppZyZwbHVnaW5zPWxpbmUtbnVtYmVycytmaWxlLWhpZ2hsaWdodCAqL1xuLy8vIDxyZWZlcmVuY2UgbGliPVwiV2ViV29ya2VyXCIvPlxuXG52YXIgX3NlbGYgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG5cdD8gd2luZG93ICAgLy8gaWYgaW4gYnJvd3NlclxuXHQ6IChcblx0XHQodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUpXG5cdFx0XHQ/IHNlbGYgLy8gaWYgaW4gd29ya2VyXG5cdFx0XHQ6IHt9ICAgLy8gaWYgaW4gbm9kZSBqc1xuXHQpO1xuXG4vKipcbiAqIFByaXNtOiBMaWdodHdlaWdodCwgcm9idXN0LCBlbGVnYW50IHN5bnRheCBoaWdobGlnaHRpbmdcbiAqXG4gKiBAbGljZW5zZSBNSVQgPGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPlxuICogQGF1dGhvciBMZWEgVmVyb3UgPGh0dHBzOi8vbGVhLnZlcm91Lm1lPlxuICogQG5hbWVzcGFjZVxuICogQHB1YmxpY1xuICovXG52YXIgUHJpc20gPSAoZnVuY3Rpb24gKF9zZWxmKSB7XG5cblx0Ly8gUHJpdmF0ZSBoZWxwZXIgdmFyc1xuXHR2YXIgbGFuZyA9IC8oPzpefFxccylsYW5nKD86dWFnZSk/LShbXFx3LV0rKSg/PVxcc3wkKS9pO1xuXHR2YXIgdW5pcXVlSWQgPSAwO1xuXG5cdC8vIFRoZSBncmFtbWFyIG9iamVjdCBmb3IgcGxhaW50ZXh0XG5cdHZhciBwbGFpblRleHRHcmFtbWFyID0ge307XG5cblxuXHR2YXIgXyA9IHtcblx0XHQvKipcblx0XHQgKiBCeSBkZWZhdWx0LCBQcmlzbSB3aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0IGFsbCBjb2RlIGVsZW1lbnRzIChieSBjYWxsaW5nIHtAbGluayBQcmlzbS5oaWdobGlnaHRBbGx9KSBvbiB0aGVcblx0XHQgKiBjdXJyZW50IHBhZ2UgYWZ0ZXIgdGhlIHBhZ2UgZmluaXNoZWQgbG9hZGluZy4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gaWYgZS5nLiB5b3Ugd2FudGVkIHRvIGFzeW5jaHJvbm91c2x5IGxvYWRcblx0XHQgKiBhZGRpdGlvbmFsIGxhbmd1YWdlcyBvciBwbHVnaW5zIHlvdXJzZWxmLlxuXHRcdCAqXG5cdFx0ICogQnkgc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCwgUHJpc20gd2lsbCBub3QgYXV0b21hdGljYWxseSBoaWdobGlnaHQgYWxsIGNvZGUgZWxlbWVudHMgb24gdGhlIHBhZ2UuXG5cdFx0ICpcblx0XHQgKiBZb3Ugb2J2aW91c2x5IGhhdmUgdG8gY2hhbmdlIHRoaXMgdmFsdWUgYmVmb3JlIHRoZSBhdXRvbWF0aWMgaGlnaGxpZ2h0aW5nIHN0YXJ0ZWQuIFRvIGRvIHRoaXMsIHlvdSBjYW4gYWRkIGFuXG5cdFx0ICogZW1wdHkgUHJpc20gb2JqZWN0IGludG8gdGhlIGdsb2JhbCBzY29wZSBiZWZvcmUgbG9hZGluZyB0aGUgUHJpc20gc2NyaXB0IGxpa2UgdGhpczpcblx0XHQgKlxuXHRcdCAqIGBgYGpzXG5cdFx0ICogd2luZG93LlByaXNtID0gd2luZG93LlByaXNtIHx8IHt9O1xuXHRcdCAqIFByaXNtLm1hbnVhbCA9IHRydWU7XG5cdFx0ICogLy8gYWRkIGEgbmV3IDxzY3JpcHQ+IHRvIGxvYWQgUHJpc20ncyBzY3JpcHRcblx0XHQgKiBgYGBcblx0XHQgKlxuXHRcdCAqIEBkZWZhdWx0IGZhbHNlXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdG1hbnVhbDogX3NlbGYuUHJpc20gJiYgX3NlbGYuUHJpc20ubWFudWFsLFxuXHRcdC8qKlxuXHRcdCAqIEJ5IGRlZmF1bHQsIGlmIFByaXNtIGlzIGluIGEgd2ViIHdvcmtlciwgaXQgYXNzdW1lcyB0aGF0IGl0IGlzIGluIGEgd29ya2VyIGl0IGNyZWF0ZWQgaXRzZWxmLCBzbyBpdCB1c2VzXG5cdFx0ICogYGFkZEV2ZW50TGlzdGVuZXJgIHRvIGNvbW11bmljYXRlIHdpdGggaXRzIHBhcmVudCBpbnN0YW5jZS4gSG93ZXZlciwgaWYgeW91J3JlIHVzaW5nIFByaXNtIG1hbnVhbGx5IGluIHlvdXJcblx0XHQgKiBvd24gd29ya2VyLCB5b3UgZG9uJ3Qgd2FudCBpdCB0byBkbyB0aGlzLlxuXHRcdCAqXG5cdFx0ICogQnkgc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCwgUHJpc20gd2lsbCBub3QgYWRkIGl0cyBvd24gbGlzdGVuZXJzIHRvIHRoZSB3b3JrZXIuXG5cdFx0ICpcblx0XHQgKiBZb3Ugb2J2aW91c2x5IGhhdmUgdG8gY2hhbmdlIHRoaXMgdmFsdWUgYmVmb3JlIFByaXNtIGV4ZWN1dGVzLiBUbyBkbyB0aGlzLCB5b3UgY2FuIGFkZCBhblxuXHRcdCAqIGVtcHR5IFByaXNtIG9iamVjdCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgYmVmb3JlIGxvYWRpbmcgdGhlIFByaXNtIHNjcmlwdCBsaWtlIHRoaXM6XG5cdFx0ICpcblx0XHQgKiBgYGBqc1xuXHRcdCAqIHdpbmRvdy5QcmlzbSA9IHdpbmRvdy5QcmlzbSB8fCB7fTtcblx0XHQgKiBQcmlzbS5kaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXIgPSB0cnVlO1xuXHRcdCAqIC8vIExvYWQgUHJpc20ncyBzY3JpcHRcblx0XHQgKiBgYGBcblx0XHQgKlxuXHRcdCAqIEBkZWZhdWx0IGZhbHNlXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcjogX3NlbGYuUHJpc20gJiYgX3NlbGYuUHJpc20uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyLFxuXG5cdFx0LyoqXG5cdFx0ICogQSBuYW1lc3BhY2UgZm9yIHV0aWxpdHkgbWV0aG9kcy5cblx0XHQgKlxuXHRcdCAqIEFsbCBmdW5jdGlvbiBpbiB0aGlzIG5hbWVzcGFjZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBtYXJrZWQgYXMgX3B1YmxpY18gYXJlIGZvciBfX2ludGVybmFsIHVzZSBvbmx5X18gYW5kIG1heVxuXHRcdCAqIGNoYW5nZSBvciBkaXNhcHBlYXIgYXQgYW55IHRpbWUuXG5cdFx0ICpcblx0XHQgKiBAbmFtZXNwYWNlXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICovXG5cdFx0dXRpbDoge1xuXHRcdFx0ZW5jb2RlOiBmdW5jdGlvbiBlbmNvZGUodG9rZW5zKSB7XG5cdFx0XHRcdGlmICh0b2tlbnMgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4odG9rZW5zLnR5cGUsIGVuY29kZSh0b2tlbnMuY29udGVudCksIHRva2Vucy5hbGlhcyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0b2tlbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRva2Vucy5tYXAoZW5jb2RlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdG9rZW5zLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge2FueX0gb1xuXHRcdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiB0eXBlKG51bGwpICAgICAgPT09ICdOdWxsJ1xuXHRcdFx0ICogdHlwZSh1bmRlZmluZWQpID09PSAnVW5kZWZpbmVkJ1xuXHRcdFx0ICogdHlwZSgxMjMpICAgICAgID09PSAnTnVtYmVyJ1xuXHRcdFx0ICogdHlwZSgnZm9vJykgICAgID09PSAnU3RyaW5nJ1xuXHRcdFx0ICogdHlwZSh0cnVlKSAgICAgID09PSAnQm9vbGVhbidcblx0XHRcdCAqIHR5cGUoWzEsIDJdKSAgICA9PT0gJ0FycmF5J1xuXHRcdFx0ICogdHlwZSh7fSkgICAgICAgID09PSAnT2JqZWN0J1xuXHRcdFx0ICogdHlwZShTdHJpbmcpICAgID09PSAnRnVuY3Rpb24nXG5cdFx0XHQgKiB0eXBlKC9hYmMrLykgICAgPT09ICdSZWdFeHAnXG5cdFx0XHQgKi9cblx0XHRcdHR5cGU6IGZ1bmN0aW9uIChvKSB7XG5cdFx0XHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIGEgdW5pcXVlIG51bWJlciBmb3IgdGhlIGdpdmVuIG9iamVjdC4gTGF0ZXIgY2FsbHMgd2lsbCBzdGlsbCByZXR1cm4gdGhlIHNhbWUgbnVtYmVyLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0XHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0XHRcdG9iaklkOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRcdGlmICghb2JqWydfX2lkJ10pIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19pZCcsIHsgdmFsdWU6ICsrdW5pcXVlSWQgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9ialsnX19pZCddO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDcmVhdGVzIGEgZGVlcCBjbG9uZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZSBtYWluIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGNsb25lIGxhbmd1YWdlIGRlZmluaXRpb25zLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7VH0gb1xuXHRcdFx0ICogQHBhcmFtIHtSZWNvcmQ8bnVtYmVyLCBhbnk+fSBbdmlzaXRlZF1cblx0XHRcdCAqIEByZXR1cm5zIHtUfVxuXHRcdFx0ICogQHRlbXBsYXRlIFRcblx0XHRcdCAqL1xuXHRcdFx0Y2xvbmU6IGZ1bmN0aW9uIGRlZXBDbG9uZShvLCB2aXNpdGVkKSB7XG5cdFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xuXG5cdFx0XHRcdHZhciBjbG9uZTsgdmFyIGlkO1xuXHRcdFx0XHRzd2l0Y2ggKF8udXRpbC50eXBlKG8pKSB7XG5cdFx0XHRcdFx0Y2FzZSAnT2JqZWN0Jzpcblx0XHRcdFx0XHRcdGlkID0gXy51dGlsLm9iaklkKG8pO1xuXHRcdFx0XHRcdFx0aWYgKHZpc2l0ZWRbaWRdKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2aXNpdGVkW2lkXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNsb25lID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAoe30pO1xuXHRcdFx0XHRcdFx0dmlzaXRlZFtpZF0gPSBjbG9uZTtcblxuXHRcdFx0XHRcdFx0Zm9yICh2YXIga2V5IGluIG8pIHtcblx0XHRcdFx0XHRcdFx0aWYgKG8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNsb25lW2tleV0gPSBkZWVwQ2xvbmUob1trZXldLCB2aXNpdGVkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gLyoqIEB0eXBlIHthbnl9ICovIChjbG9uZSk7XG5cblx0XHRcdFx0XHRjYXNlICdBcnJheSc6XG5cdFx0XHRcdFx0XHRpZCA9IF8udXRpbC5vYmpJZChvKTtcblx0XHRcdFx0XHRcdGlmICh2aXNpdGVkW2lkXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmlzaXRlZFtpZF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdFx0dmlzaXRlZFtpZF0gPSBjbG9uZTtcblxuXHRcdFx0XHRcdFx0KC8qKiBAdHlwZSB7QXJyYXl9ICovKC8qKiBAdHlwZSB7YW55fSAqLyhvKSkpLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmVbaV0gPSBkZWVwQ2xvbmUodiwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIC8qKiBAdHlwZSB7YW55fSAqLyAoY2xvbmUpO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBvO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIFByaXNtIGxhbmd1YWdlIG9mIHRoZSBnaXZlbiBlbGVtZW50IHNldCBieSBhIGBsYW5ndWFnZS14eHh4YCBvciBgbGFuZy14eHh4YCBjbGFzcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBJZiBubyBsYW5ndWFnZSBpcyBzZXQgZm9yIHRoZSBlbGVtZW50IG9yIHRoZSBlbGVtZW50IGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgYG5vbmVgIHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG5cdFx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHRnZXRMYW5ndWFnZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0d2hpbGUgKGVsZW1lbnQpIHtcblx0XHRcdFx0XHR2YXIgbSA9IGxhbmcuZXhlYyhlbGVtZW50LmNsYXNzTmFtZSk7XG5cdFx0XHRcdFx0aWYgKG0pIHtcblx0XHRcdFx0XHRcdHJldHVybiBtWzFdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICdub25lJztcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0cyB0aGUgUHJpc20gYGxhbmd1YWdlLXh4eHhgIGNsYXNzIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdFx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHRcdCAqL1xuXHRcdFx0c2V0TGFuZ3VhZ2U6IGZ1bmN0aW9uIChlbGVtZW50LCBsYW5ndWFnZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgYWxsIGBsYW5ndWFnZS14eHh4YCBjbGFzc2VzXG5cdFx0XHRcdC8vICh0aGlzIG1pZ2h0IGxlYXZlIGJlaGluZCBhIGxlYWRpbmcgc3BhY2UpXG5cdFx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShSZWdFeHAobGFuZywgJ2dpJyksICcnKTtcblxuXHRcdFx0XHQvLyBhZGQgdGhlIG5ldyBgbGFuZ3VhZ2UteHh4eGAgY2xhc3Ncblx0XHRcdFx0Ly8gKHVzaW5nIGBjbGFzc0xpc3RgIHdpbGwgYXV0b21hdGljYWxseSBjbGVhbiB1cCBzcGFjZXMgZm9yIHVzKVxuXHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xhbmd1YWdlLScgKyBsYW5ndWFnZSk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIHNjcmlwdCBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5IGV4ZWN1dGluZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIGRvZXMgX19ub3RfXyB3b3JrIGZvciBsaW5lIHNjcmlwdCBlbGVtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEByZXR1cm5zIHtIVE1MU2NyaXB0RWxlbWVudCB8IG51bGx9XG5cdFx0XHQgKi9cblx0XHRcdGN1cnJlbnRTY3JpcHQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50ICYmIDEgPCAyIC8qIGhhY2sgdG8gdHJpcCBUUycgZmxvdyBhbmFseXNpcyAqLykge1xuXHRcdFx0XHRcdHJldHVybiAvKiogQHR5cGUge2FueX0gKi8gKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSUUxMSB3b3JrYXJvdW5kXG5cdFx0XHRcdC8vIHdlJ2xsIGdldCB0aGUgc3JjIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBieSBwYXJzaW5nIElFMTEncyBlcnJvciBzdGFjayB0cmFjZVxuXHRcdFx0XHQvLyB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGlubGluZSBzY3JpcHRzXG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IGZpbGUgc3JjIHVybCBmcm9tIHN0YWNrLiBTcGVjaWZpY2FsbHkgd29ya3Mgd2l0aCB0aGUgZm9ybWF0IG9mIHN0YWNrIHRyYWNlcyBpbiBJRS5cblx0XHRcdFx0XHQvLyBBIHN0YWNrIHdpbGwgbG9vayBsaWtlIHRoaXM6XG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHQvLyBFcnJvclxuXHRcdFx0XHRcdC8vICAgIGF0IF8udXRpbC5jdXJyZW50U2NyaXB0IChodHRwOi8vbG9jYWxob3N0L2NvbXBvbmVudHMvcHJpc20tY29yZS5qczoxMTk6NSlcblx0XHRcdFx0XHQvLyAgICBhdCBHbG9iYWwgY29kZSAoaHR0cDovL2xvY2FsaG9zdC9jb21wb25lbnRzL3ByaXNtLWNvcmUuanM6NjA2OjEpXG5cblx0XHRcdFx0XHR2YXIgc3JjID0gKC9hdCBbXihcXHJcXG5dKlxcKCguKik6W146XSs6W146XStcXCkkL2kuZXhlYyhlcnIuc3RhY2spIHx8IFtdKVsxXTtcblx0XHRcdFx0XHRpZiAoc3JjKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgaW4gc2NyaXB0cykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc2NyaXB0c1tpXS5zcmMgPT0gc3JjKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNjcmlwdHNbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB3aGV0aGVyIGEgZ2l2ZW4gY2xhc3MgaXMgYWN0aXZlIGZvciBgZWxlbWVudGAuXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhlIGNsYXNzIGNhbiBiZSBhY3RpdmF0ZWQgaWYgYGVsZW1lbnRgIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyB0aGUgZ2l2ZW4gY2xhc3MgYW5kIGl0IGNhbiBiZSBkZWFjdGl2YXRlZFxuXHRcdFx0ICogaWYgYGVsZW1lbnRgIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyB0aGUgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBjbGFzcy4gVGhlIF9uZWdhdGVkIHZlcnNpb25fIG9mIHRoZVxuXHRcdFx0ICogZ2l2ZW4gY2xhc3MgaXMganVzdCB0aGUgZ2l2ZW4gY2xhc3Mgd2l0aCBhIGBuby1gIHByZWZpeC5cblx0XHRcdCAqXG5cdFx0XHQgKiBXaGV0aGVyIHRoZSBjbGFzcyBpcyBhY3RpdmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2VzdCBhbmNlc3RvciBvZiBgZWxlbWVudGAgKHdoZXJlIGBlbGVtZW50YCBpdHNlbGYgaXNcblx0XHRcdCAqIGNsb3Nlc3QgYW5jZXN0b3IpIHRoYXQgaGFzIHRoZSBnaXZlbiBjbGFzcyBvciB0aGUgbmVnYXRlZCB2ZXJzaW9uIG9mIGl0LiBJZiBuZWl0aGVyIGBlbGVtZW50YCBub3IgYW55IG9mIGl0c1xuXHRcdFx0ICogYW5jZXN0b3JzIGhhdmUgdGhlIGdpdmVuIGNsYXNzIG9yIHRoZSBuZWdhdGVkIHZlcnNpb24gb2YgaXQsIHRoZW4gdGhlIGRlZmF1bHQgYWN0aXZhdGlvbiB3aWxsIGJlIHJldHVybmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEluIHRoZSBwYXJhZG94aWNhbCBzaXR1YXRpb24gd2hlcmUgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgY29udGFpbnMgX19ib3RoX18gdGhlIGdpdmVuIGNsYXNzIGFuZCB0aGUgbmVnYXRlZFxuXHRcdFx0ICogdmVyc2lvbiBvZiBpdCwgdGhlIGNsYXNzIGlzIGNvbnNpZGVyZWQgYWN0aXZlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuXHRcdFx0ICogQHBhcmFtIHtib29sZWFufSBbZGVmYXVsdEFjdGl2YXRpb249ZmFsc2VdXG5cdFx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHRcdCAqL1xuXHRcdFx0aXNBY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUsIGRlZmF1bHRBY3RpdmF0aW9uKSB7XG5cdFx0XHRcdHZhciBubyA9ICduby0nICsgY2xhc3NOYW1lO1xuXG5cdFx0XHRcdHdoaWxlIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0dmFyIGNsYXNzTGlzdCA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuXHRcdFx0XHRcdGlmIChjbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjbGFzc0xpc3QuY29udGFpbnMobm8pKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICEhZGVmYXVsdEFjdGl2YXRpb247XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCBjdXJyZW50bHkgbG9hZGVkIGxhbmd1YWdlcyBhbmQgdGhlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kIG1vZGlmeSBsYW5ndWFnZXMuXG5cdFx0ICpcblx0XHQgKiBAbmFtZXNwYWNlXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGxhbmd1YWdlczoge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgZ3JhbW1hciBmb3IgcGxhaW4sIHVuZm9ybWF0dGVkIHRleHQuXG5cdFx0XHQgKi9cblx0XHRcdHBsYWluOiBwbGFpblRleHRHcmFtbWFyLFxuXHRcdFx0cGxhaW50ZXh0OiBwbGFpblRleHRHcmFtbWFyLFxuXHRcdFx0dGV4dDogcGxhaW5UZXh0R3JhbW1hcixcblx0XHRcdHR4dDogcGxhaW5UZXh0R3JhbW1hcixcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDcmVhdGVzIGEgZGVlcCBjb3B5IG9mIHRoZSBsYW5ndWFnZSB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgYXBwZW5kcyB0aGUgZ2l2ZW4gdG9rZW5zLlxuXHRcdFx0ICpcblx0XHRcdCAqIElmIGEgdG9rZW4gaW4gYHJlZGVmYCBhbHNvIGFwcGVhcnMgaW4gdGhlIGNvcGllZCBsYW5ndWFnZSwgdGhlbiB0aGUgZXhpc3RpbmcgdG9rZW4gaW4gdGhlIGNvcGllZCBsYW5ndWFnZVxuXHRcdFx0ICogd2lsbCBiZSBvdmVyd3JpdHRlbiBhdCBpdHMgb3JpZ2luYWwgcG9zaXRpb24uXG5cdFx0XHQgKlxuXHRcdFx0ICogIyMgQmVzdCBwcmFjdGljZXNcblx0XHRcdCAqXG5cdFx0XHQgKiBTaW5jZSB0aGUgcG9zaXRpb24gb2Ygb3ZlcndyaXRpbmcgdG9rZW5zICh0b2tlbiBpbiBgcmVkZWZgIHRoYXQgb3ZlcndyaXRlIHRva2VucyBpbiB0aGUgY29waWVkIGxhbmd1YWdlKVxuXHRcdFx0ICogZG9lc24ndCBtYXR0ZXIsIHRoZXkgY2FuIHRlY2huaWNhbGx5IGJlIGluIGFueSBvcmRlci4gSG93ZXZlciwgdGhpcyBjYW4gYmUgY29uZnVzaW5nIHRvIG90aGVycyB0aGF0IHRyeWluZyB0b1xuXHRcdFx0ICogdW5kZXJzdGFuZCB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBiZWNhdXNlLCBub3JtYWxseSwgdGhlIG9yZGVyIG9mIHRva2VucyBtYXR0ZXJzIGluIFByaXNtIGdyYW1tYXJzLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZXJlZm9yZSwgaXQgaXMgZW5jb3VyYWdlZCB0byBvcmRlciBvdmVyd3JpdGluZyB0b2tlbnMgYWNjb3JkaW5nIHRvIHRoZSBwb3NpdGlvbnMgb2YgdGhlIG92ZXJ3cml0dGVuIHRva2Vucy5cblx0XHRcdCAqIEZ1cnRoZXJtb3JlLCBhbGwgbm9uLW92ZXJ3cml0aW5nIHRva2VucyBzaG91bGQgYmUgcGxhY2VkIGFmdGVyIHRoZSBvdmVyd3JpdGluZyBvbmVzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgb2YgdGhlIGxhbmd1YWdlIHRvIGV4dGVuZC4gVGhpcyBoYXMgdG8gYmUgYSBrZXkgaW4gYFByaXNtLmxhbmd1YWdlc2AuXG5cdFx0XHQgKiBAcGFyYW0ge0dyYW1tYXJ9IHJlZGVmIFRoZSBuZXcgdG9rZW5zIHRvIGFwcGVuZC5cblx0XHRcdCAqIEByZXR1cm5zIHtHcmFtbWFyfSBUaGUgbmV3IGxhbmd1YWdlIGNyZWF0ZWQuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogUHJpc20ubGFuZ3VhZ2VzWydjc3Mtd2l0aC1jb2xvcnMnXSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NzcycsIHtcblx0XHRcdCAqICAgICAvLyBQcmlzbS5sYW5ndWFnZXMuY3NzIGFscmVhZHkgaGFzIGEgJ2NvbW1lbnQnIHRva2VuLCBzbyB0aGlzIHRva2VuIHdpbGwgb3ZlcndyaXRlIENTUycgJ2NvbW1lbnQnIHRva2VuXG5cdFx0XHQgKiAgICAgLy8gYXQgaXRzIG9yaWdpbmFsIHBvc2l0aW9uXG5cdFx0XHQgKiAgICAgJ2NvbW1lbnQnOiB7IC4uLiB9LFxuXHRcdFx0ICogICAgIC8vIENTUyBkb2Vzbid0IGhhdmUgYSAnY29sb3InIHRva2VuLCBzbyB0aGlzIHRva2VuIHdpbGwgYmUgYXBwZW5kZWRcblx0XHRcdCAqICAgICAnY29sb3InOiAvXFxiKD86cmVkfGdyZWVufGJsdWUpXFxiL1xuXHRcdFx0ICogfSk7XG5cdFx0XHQgKi9cblx0XHRcdGV4dGVuZDogZnVuY3Rpb24gKGlkLCByZWRlZikge1xuXHRcdFx0XHR2YXIgbGFuZyA9IF8udXRpbC5jbG9uZShfLmxhbmd1YWdlc1tpZF0pO1xuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiByZWRlZikge1xuXHRcdFx0XHRcdGxhbmdba2V5XSA9IHJlZGVmW2tleV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbGFuZztcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSW5zZXJ0cyB0b2tlbnMgX2JlZm9yZV8gYW5vdGhlciB0b2tlbiBpbiBhIGxhbmd1YWdlIGRlZmluaXRpb24gb3IgYW55IG90aGVyIGdyYW1tYXIuXG5cdFx0XHQgKlxuXHRcdFx0ICogIyMgVXNhZ2Vcblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIGhlbHBlciBtZXRob2QgbWFrZXMgaXQgZWFzeSB0byBtb2RpZnkgZXhpc3RpbmcgbGFuZ3VhZ2VzLiBGb3IgZXhhbXBsZSwgdGhlIENTUyBsYW5ndWFnZSBkZWZpbml0aW9uXG5cdFx0XHQgKiBub3Qgb25seSBkZWZpbmVzIENTUyBoaWdobGlnaHRpbmcgZm9yIENTUyBkb2N1bWVudHMsIGJ1dCBhbHNvIG5lZWRzIHRvIGRlZmluZSBoaWdobGlnaHRpbmcgZm9yIENTUyBlbWJlZGRlZFxuXHRcdFx0ICogaW4gSFRNTCB0aHJvdWdoIGA8c3R5bGU+YCBlbGVtZW50cy4gVG8gZG8gdGhpcywgaXQgbmVlZHMgdG8gbW9kaWZ5IGBQcmlzbS5sYW5ndWFnZXMubWFya3VwYCBhbmQgYWRkIHRoZVxuXHRcdFx0ICogYXBwcm9wcmlhdGUgdG9rZW5zLiBIb3dldmVyLCBgUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cGAgaXMgYSByZWd1bGFyIEphdmFTY3JpcHQgb2JqZWN0IGxpdGVyYWwsIHNvIGlmIHlvdSBkb1xuXHRcdFx0ICogdGhpczpcblx0XHRcdCAqXG5cdFx0XHQgKiBgYGBqc1xuXHRcdFx0ICogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5zdHlsZSA9IHtcblx0XHRcdCAqICAgICAvLyB0b2tlblxuXHRcdFx0ICogfTtcblx0XHRcdCAqIGBgYFxuXHRcdFx0ICpcblx0XHRcdCAqIHRoZW4gdGhlIGBzdHlsZWAgdG9rZW4gd2lsbCBiZSBhZGRlZCAoYW5kIHByb2Nlc3NlZCkgYXQgdGhlIGVuZC4gYGluc2VydEJlZm9yZWAgYWxsb3dzIHlvdSB0byBpbnNlcnQgdG9rZW5zXG5cdFx0XHQgKiBiZWZvcmUgZXhpc3RpbmcgdG9rZW5zLiBGb3IgdGhlIENTUyBleGFtcGxlIGFib3ZlLCB5b3Ugd291bGQgdXNlIGl0IGxpa2UgdGhpczpcblx0XHRcdCAqXG5cdFx0XHQgKiBgYGBqc1xuXHRcdFx0ICogUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya3VwJywgJ2NkYXRhJywge1xuXHRcdFx0ICogICAgICdzdHlsZSc6IHtcblx0XHRcdCAqICAgICAgICAgLy8gdG9rZW5cblx0XHRcdCAqICAgICB9XG5cdFx0XHQgKiB9KTtcblx0XHRcdCAqIGBgYFxuXHRcdFx0ICpcblx0XHRcdCAqICMjIFNwZWNpYWwgY2FzZXNcblx0XHRcdCAqXG5cdFx0XHQgKiBJZiB0aGUgZ3JhbW1hcnMgb2YgYGluc2lkZWAgYW5kIGBpbnNlcnRgIGhhdmUgdG9rZW5zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIHRva2VucyBpbiBgaW5zaWRlYCdzIGdyYW1tYXJcblx0XHRcdCAqIHdpbGwgYmUgaWdub3JlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIGJlaGF2aW9yIGNhbiBiZSB1c2VkIHRvIGluc2VydCB0b2tlbnMgYWZ0ZXIgYGJlZm9yZWA6XG5cdFx0XHQgKlxuXHRcdFx0ICogYGBganNcblx0XHRcdCAqIFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmt1cCcsICdjb21tZW50Jywge1xuXHRcdFx0ICogICAgICdjb21tZW50JzogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5jb21tZW50LFxuXHRcdFx0ICogICAgIC8vIHRva2VucyBhZnRlciAnY29tbWVudCdcblx0XHRcdCAqIH0pO1xuXHRcdFx0ICogYGBgXG5cdFx0XHQgKlxuXHRcdFx0ICogIyMgTGltaXRhdGlvbnNcblx0XHRcdCAqXG5cdFx0XHQgKiBUaGUgbWFpbiBwcm9ibGVtIGBpbnNlcnRCZWZvcmVgIGhhcyB0byBzb2x2ZSBpcyBpdGVyYXRpb24gb3JkZXIuIFNpbmNlIEVTMjAxNSwgdGhlIGl0ZXJhdGlvbiBvcmRlciBmb3Igb2JqZWN0XG5cdFx0XHQgKiBwcm9wZXJ0aWVzIGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIGluc2VydGlvbiBvcmRlciAoZXhjZXB0IGZvciBpbnRlZ2VyIGtleXMpIGJ1dCBzb21lIGJyb3dzZXJzIGJlaGF2ZVxuXHRcdFx0ICogZGlmZmVyZW50bHkgd2hlbiBrZXlzIGFyZSBkZWxldGVkIGFuZCByZS1pbnNlcnRlZC4gU28gYGluc2VydEJlZm9yZWAgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgYnkgdGVtcG9yYXJpbHlcblx0XHRcdCAqIGRlbGV0aW5nIHByb3BlcnRpZXMgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIGluc2VydCBhdCBhcmJpdHJhcnkgcG9zaXRpb25zLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYGluc2VydEJlZm9yZWAgZG9lc24ndCBhY3R1YWxseSBpbnNlcnQgdGhlIGdpdmVuIHRva2VucyBpbnRvIHRoZSB0YXJnZXQgb2JqZWN0LlxuXHRcdFx0ICogSW5zdGVhZCwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgb2JqZWN0IGFuZCByZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIG5ldyBvbmUuIFRoaXNcblx0XHRcdCAqIGNhbiBiZSBkb25lIHdpdGhvdXQgdGVtcG9yYXJpbHkgZGVsZXRpbmcgcHJvcGVydGllcywgc28gdGhlIGl0ZXJhdGlvbiBvcmRlciBpcyB3ZWxsLWRlZmluZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogSG93ZXZlciwgb25seSByZWZlcmVuY2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSBgUHJpc20ubGFuZ3VhZ2VzYCBvciBgaW5zZXJ0YCB3aWxsIGJlIHJlcGxhY2VkLiBJLmUuIGlmXG5cdFx0XHQgKiB5b3UgaG9sZCB0aGUgdGFyZ2V0IG9iamVjdCBpbiBhIHZhcmlhYmxlLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2lsbCBub3QgY2hhbmdlLlxuXHRcdFx0ICpcblx0XHRcdCAqIGBgYGpzXG5cdFx0XHQgKiB2YXIgb2xkTWFya3VwID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblx0XHRcdCAqIHZhciBuZXdNYXJrdXAgPSBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtYXJrdXAnLCAnY29tbWVudCcsIHsgLi4uIH0pO1xuXHRcdFx0ICpcblx0XHRcdCAqIGFzc2VydChvbGRNYXJrdXAgIT09IFByaXNtLmxhbmd1YWdlcy5tYXJrdXApO1xuXHRcdFx0ICogYXNzZXJ0KG5ld01hcmt1cCA9PT0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCk7XG5cdFx0XHQgKiBgYGBcblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5zaWRlIFRoZSBwcm9wZXJ0eSBvZiBgcm9vdGAgKGUuZy4gYSBsYW5ndWFnZSBpZCBpbiBgUHJpc20ubGFuZ3VhZ2VzYCkgdGhhdCBjb250YWlucyB0aGVcblx0XHRcdCAqIG9iamVjdCB0byBiZSBtb2RpZmllZC5cblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBiZWZvcmUgVGhlIGtleSB0byBpbnNlcnQgYmVmb3JlLlxuXHRcdFx0ICogQHBhcmFtIHtHcmFtbWFyfSBpbnNlcnQgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGtleS12YWx1ZSBwYWlycyB0byBiZSBpbnNlcnRlZC5cblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gW3Jvb3RdIFRoZSBvYmplY3QgY29udGFpbmluZyBgaW5zaWRlYCwgaS5lLiB0aGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlXG5cdFx0XHQgKiBvYmplY3QgdG8gYmUgbW9kaWZpZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogRGVmYXVsdHMgdG8gYFByaXNtLmxhbmd1YWdlc2AuXG5cdFx0XHQgKiBAcmV0dXJucyB7R3JhbW1hcn0gVGhlIG5ldyBncmFtbWFyIG9iamVjdC5cblx0XHRcdCAqIEBwdWJsaWNcblx0XHRcdCAqL1xuXHRcdFx0aW5zZXJ0QmVmb3JlOiBmdW5jdGlvbiAoaW5zaWRlLCBiZWZvcmUsIGluc2VydCwgcm9vdCkge1xuXHRcdFx0XHRyb290ID0gcm9vdCB8fCAvKiogQHR5cGUge2FueX0gKi8gKF8ubGFuZ3VhZ2VzKTtcblx0XHRcdFx0dmFyIGdyYW1tYXIgPSByb290W2luc2lkZV07XG5cdFx0XHRcdC8qKiBAdHlwZSB7R3JhbW1hcn0gKi9cblx0XHRcdFx0dmFyIHJldCA9IHt9O1xuXG5cdFx0XHRcdGZvciAodmFyIHRva2VuIGluIGdyYW1tYXIpIHtcblx0XHRcdFx0XHRpZiAoZ3JhbW1hci5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcblxuXHRcdFx0XHRcdFx0aWYgKHRva2VuID09IGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuZXdUb2tlbiBpbiBpbnNlcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5zZXJ0Lmhhc093blByb3BlcnR5KG5ld1Rva2VuKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0W25ld1Rva2VuXSA9IGluc2VydFtuZXdUb2tlbl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIERvIG5vdCBpbnNlcnQgdG9rZW4gd2hpY2ggYWxzbyBvY2N1ciBpbiBpbnNlcnQuIFNlZSAjMTUyNVxuXHRcdFx0XHRcdFx0aWYgKCFpbnNlcnQuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG5cdFx0XHRcdFx0XHRcdHJldFt0b2tlbl0gPSBncmFtbWFyW3Rva2VuXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgb2xkID0gcm9vdFtpbnNpZGVdO1xuXHRcdFx0XHRyb290W2luc2lkZV0gPSByZXQ7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHJlZmVyZW5jZXMgaW4gb3RoZXIgbGFuZ3VhZ2UgZGVmaW5pdGlvbnNcblx0XHRcdFx0Xy5sYW5ndWFnZXMuREZTKF8ubGFuZ3VhZ2VzLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gb2xkICYmIGtleSAhPSBpbnNpZGUpIHtcblx0XHRcdFx0XHRcdHRoaXNba2V5XSA9IHJldDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUcmF2ZXJzZSBhIGxhbmd1YWdlIGRlZmluaXRpb24gd2l0aCBEZXB0aCBGaXJzdCBTZWFyY2hcblx0XHRcdERGUzogZnVuY3Rpb24gREZTKG8sIGNhbGxiYWNrLCB0eXBlLCB2aXNpdGVkKSB7XG5cdFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xuXG5cdFx0XHRcdHZhciBvYmpJZCA9IF8udXRpbC5vYmpJZDtcblxuXHRcdFx0XHRmb3IgKHZhciBpIGluIG8pIHtcblx0XHRcdFx0XHRpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suY2FsbChvLCBpLCBvW2ldLCB0eXBlIHx8IGkpO1xuXG5cdFx0XHRcdFx0XHR2YXIgcHJvcGVydHkgPSBvW2ldO1xuXHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5VHlwZSA9IF8udXRpbC50eXBlKHByb3BlcnR5KTtcblxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gJ09iamVjdCcgJiYgIXZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSkge1xuXHRcdFx0XHRcdFx0XHR2aXNpdGVkW29iaklkKHByb3BlcnR5KV0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRERlMocHJvcGVydHksIGNhbGxiYWNrLCBudWxsLCB2aXNpdGVkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlUeXBlID09PSAnQXJyYXknICYmICF2aXNpdGVkW29iaklkKHByb3BlcnR5KV0pIHtcblx0XHRcdFx0XHRcdFx0dmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0REZTKHByb3BlcnR5LCBjYWxsYmFjaywgaSwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHBsdWdpbnM6IHt9LFxuXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgbW9zdCBoaWdoLWxldmVsIGZ1bmN0aW9uIGluIFByaXNtXHUyMDE5cyBBUEkuXG5cdFx0ICogSXQgZmV0Y2hlcyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGAubGFuZ3VhZ2UteHh4eGAgY2xhc3MgYW5kIHRoZW4gY2FsbHMge0BsaW5rIFByaXNtLmhpZ2hsaWdodEVsZW1lbnR9IG9uXG5cdFx0ICogZWFjaCBvbmUgb2YgdGhlbS5cblx0XHQgKlxuXHRcdCAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgUHJpc20uaGlnaGxpZ2h0QWxsVW5kZXIoZG9jdW1lbnQsIGFzeW5jLCBjYWxsYmFjaylgLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbYXN5bmM9ZmFsc2VdIFNhbWUgYXMgaW4ge0BsaW5rIFByaXNtLmhpZ2hsaWdodEFsbFVuZGVyfS5cblx0XHQgKiBAcGFyYW0ge0hpZ2hsaWdodENhbGxiYWNrfSBbY2FsbGJhY2tdIFNhbWUgYXMgaW4ge0BsaW5rIFByaXNtLmhpZ2hsaWdodEFsbFVuZGVyfS5cblx0XHQgKiBAbWVtYmVyb2YgUHJpc21cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0aGlnaGxpZ2h0QWxsOiBmdW5jdGlvbiAoYXN5bmMsIGNhbGxiYWNrKSB7XG5cdFx0XHRfLmhpZ2hsaWdodEFsbFVuZGVyKGRvY3VtZW50LCBhc3luYywgY2FsbGJhY2spO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGZXRjaGVzIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgYGNvbnRhaW5lcmAgdGhhdCBoYXZlIGEgYC5sYW5ndWFnZS14eHh4YCBjbGFzcyBhbmQgdGhlbiBjYWxsc1xuXHRcdCAqIHtAbGluayBQcmlzbS5oaWdobGlnaHRFbGVtZW50fSBvbiBlYWNoIG9uZSBvZiB0aGVtLlxuXHRcdCAqXG5cdFx0ICogVGhlIGZvbGxvd2luZyBob29rcyB3aWxsIGJlIHJ1bjpcblx0XHQgKiAxLiBgYmVmb3JlLWhpZ2hsaWdodGFsbGBcblx0XHQgKiAyLiBgYmVmb3JlLWFsbC1lbGVtZW50cy1oaWdobGlnaHRgXG5cdFx0ICogMy4gQWxsIGhvb2tzIG9mIHtAbGluayBQcmlzbS5oaWdobGlnaHRFbGVtZW50fSBmb3IgZWFjaCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtQYXJlbnROb2RlfSBjb250YWluZXIgVGhlIHJvb3QgZWxlbWVudCwgd2hvc2UgZGVzY2VuZGFudHMgdGhhdCBoYXZlIGEgYC5sYW5ndWFnZS14eHh4YCBjbGFzcyB3aWxsIGJlIGhpZ2hsaWdodGVkLlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzeW5jPWZhbHNlXSBXaGV0aGVyIGVhY2ggZWxlbWVudCBpcyB0byBiZSBoaWdobGlnaHRlZCBhc3luY2hyb25vdXNseSB1c2luZyBXZWIgV29ya2Vycy5cblx0XHQgKiBAcGFyYW0ge0hpZ2hsaWdodENhbGxiYWNrfSBbY2FsbGJhY2tdIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gZWFjaCBlbGVtZW50IGFmdGVyIGl0cyBoaWdobGlnaHRpbmcgaXMgZG9uZS5cblx0XHQgKiBAbWVtYmVyb2YgUHJpc21cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0aGlnaGxpZ2h0QWxsVW5kZXI6IGZ1bmN0aW9uIChjb250YWluZXIsIGFzeW5jLCBjYWxsYmFjaykge1xuXHRcdFx0dmFyIGVudiA9IHtcblx0XHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrLFxuXHRcdFx0XHRjb250YWluZXI6IGNvbnRhaW5lcixcblx0XHRcdFx0c2VsZWN0b3I6ICdjb2RlW2NsYXNzKj1cImxhbmd1YWdlLVwiXSwgW2NsYXNzKj1cImxhbmd1YWdlLVwiXSBjb2RlLCBjb2RlW2NsYXNzKj1cImxhbmctXCJdLCBbY2xhc3MqPVwibGFuZy1cIl0gY29kZSdcblx0XHRcdH07XG5cblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0YWxsJywgZW52KTtcblxuXHRcdFx0ZW52LmVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGVudi5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbChlbnYuc2VsZWN0b3IpKTtcblxuXHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1hbGwtZWxlbWVudHMtaGlnaGxpZ2h0JywgZW52KTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGVsZW1lbnQ7IChlbGVtZW50ID0gZW52LmVsZW1lbnRzW2krK10pOykge1xuXHRcdFx0XHRfLmhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudCwgYXN5bmMgPT09IHRydWUsIGVudi5jYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhpZ2hsaWdodHMgdGhlIGNvZGUgaW5zaWRlIGEgc2luZ2xlIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBUaGUgZm9sbG93aW5nIGhvb2tzIHdpbGwgYmUgcnVuOlxuXHRcdCAqIDEuIGBiZWZvcmUtc2FuaXR5LWNoZWNrYFxuXHRcdCAqIDIuIGBiZWZvcmUtaGlnaGxpZ2h0YFxuXHRcdCAqIDMuIEFsbCBob29rcyBvZiB7QGxpbmsgUHJpc20uaGlnaGxpZ2h0fS4gVGhlc2UgaG9va3Mgd2lsbCBiZSBydW4gYnkgYW4gYXN5bmNocm9ub3VzIHdvcmtlciBpZiBgYXN5bmNgIGlzIGB0cnVlYC5cblx0XHQgKiA0LiBgYmVmb3JlLWluc2VydGBcblx0XHQgKiA1LiBgYWZ0ZXItaGlnaGxpZ2h0YFxuXHRcdCAqIDYuIGBjb21wbGV0ZWBcblx0XHQgKlxuXHRcdCAqIFNvbWUgdGhlIGFib3ZlIGhvb2tzIHdpbGwgYmUgc2tpcHBlZCBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGNvbnRhaW4gYW55IHRleHQgb3IgdGhlcmUgaXMgbm8gZ3JhbW1hciBsb2FkZWQgZm9yXG5cdFx0ICogdGhlIGVsZW1lbnQncyBsYW5ndWFnZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBjb2RlLlxuXHRcdCAqIEl0IG11c3QgaGF2ZSBhIGNsYXNzIG9mIGBsYW5ndWFnZS14eHh4YCB0byBiZSBwcm9jZXNzZWQsIHdoZXJlIGB4eHh4YCBpcyBhIHZhbGlkIGxhbmd1YWdlIGlkZW50aWZpZXIuXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbYXN5bmM9ZmFsc2VdIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdG8gYmUgaGlnaGxpZ2h0ZWQgYXN5bmNocm9ub3VzbHkgdXNpbmcgV2ViIFdvcmtlcnNcblx0XHQgKiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBhdm9pZCBibG9ja2luZyB0aGUgVUkgd2hlbiBoaWdobGlnaHRpbmcgdmVyeSBsYXJnZSBjaHVua3Mgb2YgY29kZS4gVGhpcyBvcHRpb24gaXNcblx0XHQgKiBbZGlzYWJsZWQgYnkgZGVmYXVsdF0oaHR0cHM6Ly9wcmlzbWpzLmNvbS9mYXEuaHRtbCN3aHktaXMtYXN5bmNocm9ub3VzLWhpZ2hsaWdodGluZy1kaXNhYmxlZC1ieS1kZWZhdWx0KS5cblx0XHQgKlxuXHRcdCAqIE5vdGU6IEFsbCBsYW5ndWFnZSBkZWZpbml0aW9ucyByZXF1aXJlZCB0byBoaWdobGlnaHQgdGhlIGNvZGUgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFpbiBgcHJpc20uanNgIGZpbGUgZm9yXG5cdFx0ICogYXN5bmNocm9ub3VzIGhpZ2hsaWdodGluZyB0byB3b3JrLiBZb3UgY2FuIGJ1aWxkIHlvdXIgb3duIGJ1bmRsZSBvbiB0aGVcblx0XHQgKiBbRG93bmxvYWQgcGFnZV0oaHR0cHM6Ly9wcmlzbWpzLmNvbS9kb3dubG9hZC5odG1sKS5cblx0XHQgKiBAcGFyYW0ge0hpZ2hsaWdodENhbGxiYWNrfSBbY2FsbGJhY2tdIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGhpZ2hsaWdodGluZyBpcyBkb25lLlxuXHRcdCAqIE1vc3RseSB1c2VmdWwgd2hlbiBgYXN5bmNgIGlzIGB0cnVlYCwgc2luY2UgaW4gdGhhdCBjYXNlLCB0aGUgaGlnaGxpZ2h0aW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkuXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBhc3luYywgY2FsbGJhY2spIHtcblx0XHRcdC8vIEZpbmQgbGFuZ3VhZ2Vcblx0XHRcdHZhciBsYW5ndWFnZSA9IF8udXRpbC5nZXRMYW5ndWFnZShlbGVtZW50KTtcblx0XHRcdHZhciBncmFtbWFyID0gXy5sYW5ndWFnZXNbbGFuZ3VhZ2VdO1xuXG5cdFx0XHQvLyBTZXQgbGFuZ3VhZ2Ugb24gdGhlIGVsZW1lbnQsIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRfLnV0aWwuc2V0TGFuZ3VhZ2UoZWxlbWVudCwgbGFuZ3VhZ2UpO1xuXG5cdFx0XHQvLyBTZXQgbGFuZ3VhZ2Ugb24gdGhlIHBhcmVudCwgZm9yIHN0eWxpbmdcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRpZiAocGFyZW50ICYmIHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAncHJlJykge1xuXHRcdFx0XHRfLnV0aWwuc2V0TGFuZ3VhZ2UocGFyZW50LCBsYW5ndWFnZSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb2RlID0gZWxlbWVudC50ZXh0Q29udGVudDtcblxuXHRcdFx0dmFyIGVudiA9IHtcblx0XHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlLFxuXHRcdFx0XHRncmFtbWFyOiBncmFtbWFyLFxuXHRcdFx0XHRjb2RlOiBjb2RlXG5cdFx0XHR9O1xuXG5cdFx0XHRmdW5jdGlvbiBpbnNlcnRIaWdobGlnaHRlZENvZGUoaGlnaGxpZ2h0ZWRDb2RlKSB7XG5cdFx0XHRcdGVudi5oaWdobGlnaHRlZENvZGUgPSBoaWdobGlnaHRlZENvZGU7XG5cblx0XHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1pbnNlcnQnLCBlbnYpO1xuXG5cdFx0XHRcdGVudi5lbGVtZW50LmlubmVySFRNTCA9IGVudi5oaWdobGlnaHRlZENvZGU7XG5cblx0XHRcdFx0Xy5ob29rcy5ydW4oJ2FmdGVyLWhpZ2hsaWdodCcsIGVudik7XG5cdFx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XG5cdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLXNhbml0eS1jaGVjaycsIGVudik7XG5cblx0XHRcdC8vIHBsdWdpbnMgbWF5IGNoYW5nZS9hZGQgdGhlIHBhcmVudC9lbGVtZW50XG5cdFx0XHRwYXJlbnQgPSBlbnYuZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ByZScgJiYgIXBhcmVudC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcblx0XHRcdFx0cGFyZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWVudi5jb2RlKSB7XG5cdFx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XG5cdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0JywgZW52KTtcblxuXHRcdFx0aWYgKCFlbnYuZ3JhbW1hcikge1xuXHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy51dGlsLmVuY29kZShlbnYuY29kZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhc3luYyAmJiBfc2VsZi5Xb3JrZXIpIHtcblx0XHRcdFx0dmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoXy5maWxlbmFtZSk7XG5cblx0XHRcdFx0d29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoZXZ0LmRhdGEpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHdvcmtlci5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IGVudi5sYW5ndWFnZSxcblx0XHRcdFx0XHRjb2RlOiBlbnYuY29kZSxcblx0XHRcdFx0XHRpbW1lZGlhdGVDbG9zZTogdHJ1ZVxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy5oaWdobGlnaHQoZW52LmNvZGUsIGVudi5ncmFtbWFyLCBlbnYubGFuZ3VhZ2UpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTG93LWxldmVsIGZ1bmN0aW9uLCBvbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdVx1MjAxOXJlIGRvaW5nLiBJdCBhY2NlcHRzIGEgc3RyaW5nIG9mIHRleHQgYXMgaW5wdXRcblx0XHQgKiBhbmQgdGhlIGxhbmd1YWdlIGRlZmluaXRpb25zIHRvIHVzZSwgYW5kIHJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgSFRNTCBwcm9kdWNlZC5cblx0XHQgKlxuXHRcdCAqIFRoZSBmb2xsb3dpbmcgaG9va3Mgd2lsbCBiZSBydW46XG5cdFx0ICogMS4gYGJlZm9yZS10b2tlbml6ZWBcblx0XHQgKiAyLiBgYWZ0ZXItdG9rZW5pemVgXG5cdFx0ICogMy4gYHdyYXBgOiBPbiBlYWNoIHtAbGluayBUb2tlbn0uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBBIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvIGJlIGhpZ2hsaWdodGVkLlxuXHRcdCAqIEBwYXJhbSB7R3JhbW1hcn0gZ3JhbW1hciBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgdG9rZW5zIHRvIHVzZS5cblx0XHQgKlxuXHRcdCAqIFVzdWFsbHkgYSBsYW5ndWFnZSBkZWZpbml0aW9uIGxpa2UgYFByaXNtLmxhbmd1YWdlcy5tYXJrdXBgLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBwYXNzZWQgdG8gYGdyYW1tYXJgLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoaWdobGlnaHRlZCBIVE1MLlxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIFByaXNtLmhpZ2hsaWdodCgndmFyIGZvbyA9IHRydWU7JywgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQsICdqYXZhc2NyaXB0Jyk7XG5cdFx0ICovXG5cdFx0aGlnaGxpZ2h0OiBmdW5jdGlvbiAodGV4dCwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcblx0XHRcdHZhciBlbnYgPSB7XG5cdFx0XHRcdGNvZGU6IHRleHQsXG5cdFx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXG5cdFx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZVxuXHRcdFx0fTtcblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtdG9rZW5pemUnLCBlbnYpO1xuXHRcdFx0aWYgKCFlbnYuZ3JhbW1hcikge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsYW5ndWFnZSBcIicgKyBlbnYubGFuZ3VhZ2UgKyAnXCIgaGFzIG5vIGdyYW1tYXIuJyk7XG5cdFx0XHR9XG5cdFx0XHRlbnYudG9rZW5zID0gXy50b2tlbml6ZShlbnYuY29kZSwgZW52LmdyYW1tYXIpO1xuXHRcdFx0Xy5ob29rcy5ydW4oJ2FmdGVyLXRva2VuaXplJywgZW52KTtcblx0XHRcdHJldHVybiBUb2tlbi5zdHJpbmdpZnkoXy51dGlsLmVuY29kZShlbnYudG9rZW5zKSwgZW52Lmxhbmd1YWdlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgaGVhcnQgb2YgUHJpc20sIGFuZCB0aGUgbW9zdCBsb3ctbGV2ZWwgZnVuY3Rpb24geW91IGNhbiB1c2UuIEl0IGFjY2VwdHMgYSBzdHJpbmcgb2YgdGV4dCBhcyBpbnB1dFxuXHRcdCAqIGFuZCB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgdG8gdXNlLCBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSB0b2tlbml6ZWQgY29kZS5cblx0XHQgKlxuXHRcdCAqIFdoZW4gdGhlIGxhbmd1YWdlIGRlZmluaXRpb24gaW5jbHVkZXMgbmVzdGVkIHRva2VucywgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWN1cnNpdmVseSBvbiBlYWNoIG9mIHRoZXNlIHRva2Vucy5cblx0XHQgKlxuXHRcdCAqIFRoaXMgbWV0aG9kIGNvdWxkIGJlIHVzZWZ1bCBpbiBvdGhlciBjb250ZXh0cyBhcyB3ZWxsLCBhcyBhIHZlcnkgY3J1ZGUgcGFyc2VyLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSBzdHJpbmcgd2l0aCB0aGUgY29kZSB0byBiZSBoaWdobGlnaHRlZC5cblx0XHQgKiBAcGFyYW0ge0dyYW1tYXJ9IGdyYW1tYXIgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRva2VucyB0byB1c2UuXG5cdFx0ICpcblx0XHQgKiBVc3VhbGx5IGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBsaWtlIGBQcmlzbS5sYW5ndWFnZXMubWFya3VwYC5cblx0XHQgKiBAcmV0dXJucyB7VG9rZW5TdHJlYW19IEFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIHRva2VucywgYSB0b2tlbiBzdHJlYW0uXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbGV0IGNvZGUgPSBgdmFyIGZvbyA9IDA7YDtcblx0XHQgKiBsZXQgdG9rZW5zID0gUHJpc20udG9rZW5pemUoY29kZSwgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQpO1xuXHRcdCAqIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHtcblx0XHQgKiAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgUHJpc20uVG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHQgKiAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCBudW1lcmljIGxpdGVyYWw6ICR7dG9rZW4uY29udGVudH1gKTtcblx0XHQgKiAgICAgfVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdHRva2VuaXplOiBmdW5jdGlvbiAodGV4dCwgZ3JhbW1hcikge1xuXHRcdFx0dmFyIHJlc3QgPSBncmFtbWFyLnJlc3Q7XG5cdFx0XHRpZiAocmVzdCkge1xuXHRcdFx0XHRmb3IgKHZhciB0b2tlbiBpbiByZXN0KSB7XG5cdFx0XHRcdFx0Z3JhbW1hclt0b2tlbl0gPSByZXN0W3Rva2VuXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBncmFtbWFyLnJlc3Q7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0b2tlbkxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuXHRcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCB0b2tlbkxpc3QuaGVhZCwgdGV4dCk7XG5cblx0XHRcdG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIHRva2VuTGlzdC5oZWFkLCAwKTtcblxuXHRcdFx0cmV0dXJuIHRvQXJyYXkodG9rZW5MaXN0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQG5hbWVzcGFjZVxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRob29rczoge1xuXHRcdFx0YWxsOiB7fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIHRoZSBnaXZlbiBjYWxsYmFjayB0byB0aGUgbGlzdCBvZiBjYWxsYmFja3MgZm9yIHRoZSBnaXZlbiBob29rLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgaG9vayBpdCBpcyByZWdpc3RlcmVkIGZvciBpcyBydW4uXG5cdFx0XHQgKiBIb29rcyBhcmUgdXN1YWxseSBkaXJlY3RseSBydW4gYnkgYSBoaWdobGlnaHQgZnVuY3Rpb24gYnV0IHlvdSBjYW4gYWxzbyBydW4gaG9va3MgeW91cnNlbGYuXG5cdFx0XHQgKlxuXHRcdFx0ICogT25lIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSByZWdpc3RlcmVkIHRvIG11bHRpcGxlIGhvb2tzIGFuZCB0aGUgc2FtZSBob29rIG11bHRpcGxlIHRpbWVzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBob29rLlxuXHRcdFx0ICogQHBhcmFtIHtIb29rQ2FsbGJhY2t9IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKi9cblx0XHRcdGFkZDogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0XHRcdHZhciBob29rcyA9IF8uaG9va3MuYWxsO1xuXG5cdFx0XHRcdGhvb2tzW25hbWVdID0gaG9va3NbbmFtZV0gfHwgW107XG5cblx0XHRcdFx0aG9va3NbbmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJ1bnMgYSBob29rIGludm9raW5nIGFsbCByZWdpc3RlcmVkIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQ2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFuZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHJlZ2lzdGVyZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhvb2suXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IGVudiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBob29rIHBhc3NlZCB0byBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKi9cblx0XHRcdHJ1bjogZnVuY3Rpb24gKG5hbWUsIGVudikge1xuXHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gXy5ob29rcy5hbGxbbmFtZV07XG5cblx0XHRcdFx0aWYgKCFjYWxsYmFja3MgfHwgIWNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBpID0gMCwgY2FsbGJhY2s7IChjYWxsYmFjayA9IGNhbGxiYWNrc1tpKytdKTspIHtcblx0XHRcdFx0XHRjYWxsYmFjayhlbnYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdFRva2VuOiBUb2tlblxuXHR9O1xuXHRfc2VsZi5QcmlzbSA9IF87XG5cblxuXHQvLyBUeXBlc2NyaXB0IG5vdGU6XG5cdC8vIFRoZSBmb2xsb3dpbmcgY2FuIGJlIHVzZWQgdG8gaW1wb3J0IHRoZSBUb2tlbiB0eXBlIGluIEpTRG9jOlxuXHQvL1xuXHQvLyAgIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8aW1wb3J0KFwiLi9wcmlzbS1jb3JlXCIpW1wiVG9rZW5cIl0+fSBUb2tlblxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHRva2VuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBTZWUge0BsaW5rIFRva2VuI3R5cGUgdHlwZX1cblx0ICogQHBhcmFtIHtzdHJpbmcgfCBUb2tlblN0cmVhbX0gY29udGVudCBTZWUge0BsaW5rIFRva2VuI2NvbnRlbnQgY29udGVudH1cblx0ICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFthbGlhc10gVGhlIGFsaWFzKGVzKSBvZiB0aGUgdG9rZW4uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbWF0Y2hlZFN0cj1cIlwiXSBBIGNvcHkgb2YgdGhlIGZ1bGwgc3RyaW5nIHRoaXMgdG9rZW4gd2FzIGNyZWF0ZWQgZnJvbS5cblx0ICogQGNsYXNzXG5cdCAqIEBnbG9iYWxcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0ZnVuY3Rpb24gVG9rZW4odHlwZSwgY29udGVudCwgYWxpYXMsIG1hdGNoZWRTdHIpIHtcblx0XHQvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdG9rZW4uXG5cdFx0ICpcblx0XHQgKiBUaGlzIGlzIHVzdWFsbHkgdGhlIGtleSBvZiBhIHBhdHRlcm4gaW4gYSB7QGxpbmsgR3JhbW1hcn0uXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBzZWUgR3JhbW1hclRva2VuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cdFx0LyoqXG5cdFx0ICogVGhlIHN0cmluZ3Mgb3IgdG9rZW5zIGNvbnRhaW5lZCBieSB0aGlzIHRva2VuLlxuXHRcdCAqXG5cdFx0ICogVGhpcyB3aWxsIGJlIGEgdG9rZW4gc3RyZWFtIGlmIHRoZSBwYXR0ZXJuIG1hdGNoZWQgYWxzbyBkZWZpbmVkIGFuIGBpbnNpZGVgIGdyYW1tYXIuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7c3RyaW5nIHwgVG9rZW5TdHJlYW19XG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGFsaWFzKGVzKSBvZiB0aGUgdG9rZW4uXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7c3RyaW5nfHN0cmluZ1tdfVxuXHRcdCAqIEBzZWUgR3JhbW1hclRva2VuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdHRoaXMuYWxpYXMgPSBhbGlhcztcblx0XHQvLyBDb3B5IG9mIHRoZSBmdWxsIHN0cmluZyB0aGlzIHRva2VuIHdhcyBjcmVhdGVkIGZyb21cblx0XHR0aGlzLmxlbmd0aCA9IChtYXRjaGVkU3RyIHx8ICcnKS5sZW5ndGggfCAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgdG9rZW4gc3RyZWFtIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIHtAbGluayBUb2tlbiBUb2tlbn0gb2JqZWN0cy5cblx0ICpcblx0ICogVG9rZW4gc3RyZWFtcyBoYXZlIHRvIGZ1bGZpbGwgYSBmZXcgcHJvcGVydGllcyB0aGF0IGFyZSBhc3N1bWVkIGJ5IG1vc3QgZnVuY3Rpb25zIChtb3N0bHkgaW50ZXJuYWwgb25lcykgdGhhdCBwcm9jZXNzXG5cdCAqIHRoZW0uXG5cdCAqXG5cdCAqIDEuIE5vIGFkamFjZW50IHN0cmluZ3MuXG5cdCAqIDIuIE5vIGVtcHR5IHN0cmluZ3MuXG5cdCAqXG5cdCAqICAgIFRoZSBvbmx5IGV4Y2VwdGlvbiBoZXJlIGlzIHRoZSB0b2tlbiBzdHJlYW0gdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBlbXB0eSBzdHJpbmcgYW5kIG5vdGhpbmcgZWxzZS5cblx0ICpcblx0ICogQHR5cGVkZWYge0FycmF5PHN0cmluZyB8IFRva2VuPn0gVG9rZW5TdHJlYW1cblx0ICogQGdsb2JhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdG9rZW4gb3IgdG9rZW4gc3RyZWFtIHRvIGFuIEhUTUwgcmVwcmVzZW50YXRpb24uXG5cdCAqXG5cdCAqIFRoZSBmb2xsb3dpbmcgaG9va3Mgd2lsbCBiZSBydW46XG5cdCAqIDEuIGB3cmFwYDogT24gZWFjaCB7QGxpbmsgVG9rZW59LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IFRva2VuIHwgVG9rZW5TdHJlYW19IG8gVGhlIHRva2VuIG9yIHRva2VuIHN0cmVhbSB0byBiZSBjb252ZXJ0ZWQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbmFtZSBvZiBjdXJyZW50IGxhbmd1YWdlLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgSFRNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdG9rZW4gb3IgdG9rZW4gc3RyZWFtLlxuXHQgKiBAbWVtYmVyb2YgVG9rZW5cblx0ICogQHN0YXRpY1xuXHQgKi9cblx0VG9rZW4uc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KG8sIGxhbmd1YWdlKSB7XG5cdFx0aWYgKHR5cGVvZiBvID09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gbztcblx0XHR9XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobykpIHtcblx0XHRcdHZhciBzID0gJyc7XG5cdFx0XHRvLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0cyArPSBzdHJpbmdpZnkoZSwgbGFuZ3VhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcztcblx0XHR9XG5cblx0XHR2YXIgZW52ID0ge1xuXHRcdFx0dHlwZTogby50eXBlLFxuXHRcdFx0Y29udGVudDogc3RyaW5naWZ5KG8uY29udGVudCwgbGFuZ3VhZ2UpLFxuXHRcdFx0dGFnOiAnc3BhbicsXG5cdFx0XHRjbGFzc2VzOiBbJ3Rva2VuJywgby50eXBlXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHt9LFxuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlXG5cdFx0fTtcblxuXHRcdHZhciBhbGlhc2VzID0gby5hbGlhcztcblx0XHRpZiAoYWxpYXNlcykge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW52LmNsYXNzZXMsIGFsaWFzZXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW52LmNsYXNzZXMucHVzaChhbGlhc2VzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRfLmhvb2tzLnJ1bignd3JhcCcsIGVudik7XG5cblx0XHR2YXIgYXR0cmlidXRlcyA9ICcnO1xuXHRcdGZvciAodmFyIG5hbWUgaW4gZW52LmF0dHJpYnV0ZXMpIHtcblx0XHRcdGF0dHJpYnV0ZXMgKz0gJyAnICsgbmFtZSArICc9XCInICsgKGVudi5hdHRyaWJ1dGVzW25hbWVdIHx8ICcnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykgKyAnXCInO1xuXHRcdH1cblxuXHRcdHJldHVybiAnPCcgKyBlbnYudGFnICsgJyBjbGFzcz1cIicgKyBlbnYuY2xhc3Nlcy5qb2luKCcgJykgKyAnXCInICsgYXR0cmlidXRlcyArICc+JyArIGVudi5jb250ZW50ICsgJzwvJyArIGVudi50YWcgKyAnPic7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwb3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHBhcmFtIHtib29sZWFufSBsb29rYmVoaW5kXG5cdCAqIEByZXR1cm5zIHtSZWdFeHBFeGVjQXJyYXkgfCBudWxsfVxuXHQgKi9cblx0ZnVuY3Rpb24gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIHBvcywgdGV4dCwgbG9va2JlaGluZCkge1xuXHRcdHBhdHRlcm4ubGFzdEluZGV4ID0gcG9zO1xuXHRcdHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcblx0XHRpZiAobWF0Y2ggJiYgbG9va2JlaGluZCAmJiBtYXRjaFsxXSkge1xuXHRcdFx0Ly8gY2hhbmdlIHRoZSBtYXRjaCB0byByZW1vdmUgdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgUHJpc20gbG9va2JlaGluZCBncm91cFxuXHRcdFx0dmFyIGxvb2tiZWhpbmRMZW5ndGggPSBtYXRjaFsxXS5sZW5ndGg7XG5cdFx0XHRtYXRjaC5pbmRleCArPSBsb29rYmVoaW5kTGVuZ3RoO1xuXHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZShsb29rYmVoaW5kTGVuZ3RoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdDxzdHJpbmcgfCBUb2tlbj59IHRva2VuTGlzdFxuXHQgKiBAcGFyYW0ge2FueX0gZ3JhbW1hclxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3ROb2RlPHN0cmluZyB8IFRva2VuPn0gc3RhcnROb2RlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFBvc1xuXHQgKiBAcGFyYW0ge1JlbWF0Y2hPcHRpb25zfSBbcmVtYXRjaF1cblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwcml2YXRlXG5cdCAqXG5cdCAqIEB0eXBlZGVmIFJlbWF0Y2hPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYXVzZVxuXHQgKiBAcHJvcGVydHkge251bWJlcn0gcmVhY2hcblx0ICovXG5cdGZ1bmN0aW9uIG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIHN0YXJ0Tm9kZSwgc3RhcnRQb3MsIHJlbWF0Y2gpIHtcblx0XHRmb3IgKHZhciB0b2tlbiBpbiBncmFtbWFyKSB7XG5cdFx0XHRpZiAoIWdyYW1tYXIuaGFzT3duUHJvcGVydHkodG9rZW4pIHx8ICFncmFtbWFyW3Rva2VuXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBhdHRlcm5zID0gZ3JhbW1hclt0b2tlbl07XG5cdFx0XHRwYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkocGF0dGVybnMpID8gcGF0dGVybnMgOiBbcGF0dGVybnNdO1xuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBhdHRlcm5zLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGlmIChyZW1hdGNoICYmIHJlbWF0Y2guY2F1c2UgPT0gdG9rZW4gKyAnLCcgKyBqKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHBhdHRlcm5PYmogPSBwYXR0ZXJuc1tqXTtcblx0XHRcdFx0dmFyIGluc2lkZSA9IHBhdHRlcm5PYmouaW5zaWRlO1xuXHRcdFx0XHR2YXIgbG9va2JlaGluZCA9ICEhcGF0dGVybk9iai5sb29rYmVoaW5kO1xuXHRcdFx0XHR2YXIgZ3JlZWR5ID0gISFwYXR0ZXJuT2JqLmdyZWVkeTtcblx0XHRcdFx0dmFyIGFsaWFzID0gcGF0dGVybk9iai5hbGlhcztcblxuXHRcdFx0XHRpZiAoZ3JlZWR5ICYmICFwYXR0ZXJuT2JqLnBhdHRlcm4uZ2xvYmFsKSB7XG5cdFx0XHRcdFx0Ly8gV2l0aG91dCB0aGUgZ2xvYmFsIGZsYWcsIGxhc3RJbmRleCB3b24ndCB3b3JrXG5cdFx0XHRcdFx0dmFyIGZsYWdzID0gcGF0dGVybk9iai5wYXR0ZXJuLnRvU3RyaW5nKCkubWF0Y2goL1tpbXN1eV0qJC8pWzBdO1xuXHRcdFx0XHRcdHBhdHRlcm5PYmoucGF0dGVybiA9IFJlZ0V4cChwYXR0ZXJuT2JqLnBhdHRlcm4uc291cmNlLCBmbGFncyArICdnJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKiogQHR5cGUge1JlZ0V4cH0gKi9cblx0XHRcdFx0dmFyIHBhdHRlcm4gPSBwYXR0ZXJuT2JqLnBhdHRlcm4gfHwgcGF0dGVybk9iajtcblxuXHRcdFx0XHRmb3IgKCAvLyBpdGVyYXRlIHRoZSB0b2tlbiBsaXN0IGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHRva2VuL3N0cmluZyBwb3NpdGlvblxuXHRcdFx0XHRcdHZhciBjdXJyZW50Tm9kZSA9IHN0YXJ0Tm9kZS5uZXh0LCBwb3MgPSBzdGFydFBvcztcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSAhPT0gdG9rZW5MaXN0LnRhaWw7XG5cdFx0XHRcdFx0cG9zICs9IGN1cnJlbnROb2RlLnZhbHVlLmxlbmd0aCwgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0XG5cdFx0XHRcdCkge1xuXG5cdFx0XHRcdFx0aWYgKHJlbWF0Y2ggJiYgcG9zID49IHJlbWF0Y2gucmVhY2gpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBzdHIgPSBjdXJyZW50Tm9kZS52YWx1ZTtcblxuXHRcdFx0XHRcdGlmICh0b2tlbkxpc3QubGVuZ3RoID4gdGV4dC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIFNvbWV0aGluZyB3ZW50IHRlcnJpYmx5IHdyb25nLCBBQk9SVCwgQUJPUlQhXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHN0ciBpbnN0YW5jZW9mIFRva2VuKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgcmVtb3ZlQ291bnQgPSAxOyAvLyB0aGlzIGlzIHRoZSB0byBwYXJhbWV0ZXIgb2YgcmVtb3ZlQmV0d2VlblxuXHRcdFx0XHRcdHZhciBtYXRjaDtcblxuXHRcdFx0XHRcdGlmIChncmVlZHkpIHtcblx0XHRcdFx0XHRcdG1hdGNoID0gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIHBvcywgdGV4dCwgbG9va2JlaGluZCk7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ID49IHRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4O1xuXHRcdFx0XHRcdFx0dmFyIHRvID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR2YXIgcCA9IHBvcztcblxuXHRcdFx0XHRcdFx0Ly8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBtYXRjaFxuXHRcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoZnJvbSA+PSBwKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dDtcblx0XHRcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBhZGp1c3QgcG9zIChhbmQgcClcblx0XHRcdFx0XHRcdHAgLT0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoO1xuXHRcdFx0XHRcdFx0cG9zID0gcDtcblxuXHRcdFx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFRva2VuLCB0aGVuIHRoZSBtYXRjaCBzdGFydHMgaW5zaWRlIGFub3RoZXIgVG9rZW4sIHdoaWNoIGlzIGludmFsaWRcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50Tm9kZS52YWx1ZSBpbnN0YW5jZW9mIFRva2VuKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBmaW5kIHRoZSBsYXN0IG5vZGUgd2hpY2ggaXMgYWZmZWN0ZWQgYnkgdGhpcyBtYXRjaFxuXHRcdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdFx0dmFyIGsgPSBjdXJyZW50Tm9kZTtcblx0XHRcdFx0XHRcdFx0ayAhPT0gdG9rZW5MaXN0LnRhaWwgJiYgKHAgPCB0byB8fCB0eXBlb2Ygay52YWx1ZSA9PT0gJ3N0cmluZycpO1xuXHRcdFx0XHRcdFx0XHRrID0gay5uZXh0XG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ291bnQrKztcblx0XHRcdFx0XHRcdFx0cCArPSBrLnZhbHVlLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlbW92ZUNvdW50LS07XG5cblx0XHRcdFx0XHRcdC8vIHJlcGxhY2Ugd2l0aCB0aGUgbmV3IG1hdGNoXG5cdFx0XHRcdFx0XHRzdHIgPSB0ZXh0LnNsaWNlKHBvcywgcCk7XG5cdFx0XHRcdFx0XHRtYXRjaC5pbmRleCAtPSBwb3M7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1hdGNoID0gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIDAsIHN0ciwgbG9va2JlaGluZCk7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblx0XHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4O1xuXHRcdFx0XHRcdHZhciBtYXRjaFN0ciA9IG1hdGNoWzBdO1xuXHRcdFx0XHRcdHZhciBiZWZvcmUgPSBzdHIuc2xpY2UoMCwgZnJvbSk7XG5cdFx0XHRcdFx0dmFyIGFmdGVyID0gc3RyLnNsaWNlKGZyb20gKyBtYXRjaFN0ci5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0dmFyIHJlYWNoID0gcG9zICsgc3RyLmxlbmd0aDtcblx0XHRcdFx0XHRpZiAocmVtYXRjaCAmJiByZWFjaCA+IHJlbWF0Y2gucmVhY2gpIHtcblx0XHRcdFx0XHRcdHJlbWF0Y2gucmVhY2ggPSByZWFjaDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgcmVtb3ZlRnJvbSA9IGN1cnJlbnROb2RlLnByZXY7XG5cblx0XHRcdFx0XHRpZiAoYmVmb3JlKSB7XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCBiZWZvcmUpO1xuXHRcdFx0XHRcdFx0cG9zICs9IGJlZm9yZS5sZW5ndGg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVtb3ZlUmFuZ2UodG9rZW5MaXN0LCByZW1vdmVGcm9tLCByZW1vdmVDb3VudCk7XG5cblx0XHRcdFx0XHR2YXIgd3JhcHBlZCA9IG5ldyBUb2tlbih0b2tlbiwgaW5zaWRlID8gXy50b2tlbml6ZShtYXRjaFN0ciwgaW5zaWRlKSA6IG1hdGNoU3RyLCBhbGlhcywgbWF0Y2hTdHIpO1xuXHRcdFx0XHRcdGN1cnJlbnROb2RlID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCB3cmFwcGVkKTtcblxuXHRcdFx0XHRcdGlmIChhZnRlcikge1xuXHRcdFx0XHRcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCBjdXJyZW50Tm9kZSwgYWZ0ZXIpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZW1vdmVDb3VudCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIGF0IGxlYXN0IG9uZSBUb2tlbiBvYmplY3Qgd2FzIHJlbW92ZWQsIHNvIHdlIGhhdmUgdG8gZG8gc29tZSByZW1hdGNoaW5nXG5cdFx0XHRcdFx0XHQvLyB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgY3VycmVudCBwYXR0ZXJuIGlzIGdyZWVkeVxuXG5cdFx0XHRcdFx0XHQvKiogQHR5cGUge1JlbWF0Y2hPcHRpb25zfSAqL1xuXHRcdFx0XHRcdFx0dmFyIG5lc3RlZFJlbWF0Y2ggPSB7XG5cdFx0XHRcdFx0XHRcdGNhdXNlOiB0b2tlbiArICcsJyArIGosXG5cdFx0XHRcdFx0XHRcdHJlYWNoOiByZWFjaFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIGN1cnJlbnROb2RlLnByZXYsIHBvcywgbmVzdGVkUmVtYXRjaCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoZSByZWFjaCBtaWdodCBoYXZlIGJlZW4gZXh0ZW5kZWQgYmVjYXVzZSBvZiB0aGUgcmVtYXRjaGluZ1xuXHRcdFx0XHRcdFx0aWYgKHJlbWF0Y2ggJiYgbmVzdGVkUmVtYXRjaC5yZWFjaCA+IHJlbWF0Y2gucmVhY2gpIHtcblx0XHRcdFx0XHRcdFx0cmVtYXRjaC5yZWFjaCA9IG5lc3RlZFJlbWF0Y2gucmVhY2g7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEB0eXBlZGVmIExpbmtlZExpc3ROb2RlXG5cdCAqIEBwcm9wZXJ0eSB7VH0gdmFsdWVcblx0ICogQHByb3BlcnR5IHtMaW5rZWRMaXN0Tm9kZTxUPiB8IG51bGx9IHByZXYgVGhlIHByZXZpb3VzIG5vZGUuXG5cdCAqIEBwcm9wZXJ0eSB7TGlua2VkTGlzdE5vZGU8VD4gfCBudWxsfSBuZXh0IFRoZSBuZXh0IG5vZGUuXG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXG5cdC8qKlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gTGlua2VkTGlzdCgpIHtcblx0XHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xuXHRcdHZhciBoZWFkID0geyB2YWx1ZTogbnVsbCwgcHJldjogbnVsbCwgbmV4dDogbnVsbCB9O1xuXHRcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXG5cdFx0dmFyIHRhaWwgPSB7IHZhbHVlOiBudWxsLCBwcmV2OiBoZWFkLCBuZXh0OiBudWxsIH07XG5cdFx0aGVhZC5uZXh0ID0gdGFpbDtcblxuXHRcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXG5cdFx0dGhpcy5oZWFkID0gaGVhZDtcblx0XHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xuXHRcdHRoaXMudGFpbCA9IHRhaWw7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBuZXcgbm9kZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbGlzdC5cblx0ICpcblx0ICogQHBhcmFtIHtMaW5rZWRMaXN0PFQ+fSBsaXN0XG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdE5vZGU8VD59IG5vZGVcblx0ICogQHBhcmFtIHtUfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7TGlua2VkTGlzdE5vZGU8VD59IFRoZSBhZGRlZCBub2RlLlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKi9cblx0ZnVuY3Rpb24gYWRkQWZ0ZXIobGlzdCwgbm9kZSwgdmFsdWUpIHtcblx0XHQvLyBhc3N1bWVzIHRoYXQgbm9kZSAhPSBsaXN0LnRhaWwgJiYgdmFsdWVzLmxlbmd0aCA+PSAwXG5cdFx0dmFyIG5leHQgPSBub2RlLm5leHQ7XG5cblx0XHR2YXIgbmV3Tm9kZSA9IHsgdmFsdWU6IHZhbHVlLCBwcmV2OiBub2RlLCBuZXh0OiBuZXh0IH07XG5cdFx0bm9kZS5uZXh0ID0gbmV3Tm9kZTtcblx0XHRuZXh0LnByZXYgPSBuZXdOb2RlO1xuXHRcdGxpc3QubGVuZ3RoKys7XG5cblx0XHRyZXR1cm4gbmV3Tm9kZTtcblx0fVxuXHQvKipcblx0ICogUmVtb3ZlcyBgY291bnRgIG5vZGVzIGFmdGVyIHRoZSBnaXZlbiBub2RlLiBUaGUgZ2l2ZW4gbm9kZSB3aWxsIG5vdCBiZSByZW1vdmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3Q8VD59IGxpc3Rcblx0ICogQHBhcmFtIHtMaW5rZWRMaXN0Tm9kZTxUPn0gbm9kZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gY291bnRcblx0ICogQHRlbXBsYXRlIFRcblx0ICovXG5cdGZ1bmN0aW9uIHJlbW92ZVJhbmdlKGxpc3QsIG5vZGUsIGNvdW50KSB7XG5cdFx0dmFyIG5leHQgPSBub2RlLm5leHQ7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudCAmJiBuZXh0ICE9PSBsaXN0LnRhaWw7IGkrKykge1xuXHRcdFx0bmV4dCA9IG5leHQubmV4dDtcblx0XHR9XG5cdFx0bm9kZS5uZXh0ID0gbmV4dDtcblx0XHRuZXh0LnByZXYgPSBub2RlO1xuXHRcdGxpc3QubGVuZ3RoIC09IGk7XG5cdH1cblx0LyoqXG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxuXHQgKiBAcmV0dXJucyB7VFtdfVxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BcnJheShsaXN0KSB7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0dmFyIG5vZGUgPSBsaXN0LmhlYWQubmV4dDtcblx0XHR3aGlsZSAobm9kZSAhPT0gbGlzdC50YWlsKSB7XG5cdFx0XHRhcnJheS5wdXNoKG5vZGUudmFsdWUpO1xuXHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblxuXHRpZiAoIV9zZWxmLmRvY3VtZW50KSB7XG5cdFx0aWYgKCFfc2VsZi5hZGRFdmVudExpc3RlbmVyKSB7XG5cdFx0XHQvLyBpbiBOb2RlLmpzXG5cdFx0XHRyZXR1cm4gXztcblx0XHR9XG5cblx0XHRpZiAoIV8uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHQvLyBJbiB3b3JrZXJcblx0XHRcdF9zZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRcdHZhciBtZXNzYWdlID0gSlNPTi5wYXJzZShldnQuZGF0YSk7XG5cdFx0XHRcdHZhciBsYW5nID0gbWVzc2FnZS5sYW5ndWFnZTtcblx0XHRcdFx0dmFyIGNvZGUgPSBtZXNzYWdlLmNvZGU7XG5cdFx0XHRcdHZhciBpbW1lZGlhdGVDbG9zZSA9IG1lc3NhZ2UuaW1tZWRpYXRlQ2xvc2U7XG5cblx0XHRcdFx0X3NlbGYucG9zdE1lc3NhZ2UoXy5oaWdobGlnaHQoY29kZSwgXy5sYW5ndWFnZXNbbGFuZ10sIGxhbmcpKTtcblx0XHRcdFx0aWYgKGltbWVkaWF0ZUNsb3NlKSB7XG5cdFx0XHRcdFx0X3NlbGYuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBfO1xuXHR9XG5cblx0Ly8gR2V0IGN1cnJlbnQgc2NyaXB0IGFuZCBoaWdobGlnaHRcblx0dmFyIHNjcmlwdCA9IF8udXRpbC5jdXJyZW50U2NyaXB0KCk7XG5cblx0aWYgKHNjcmlwdCkge1xuXHRcdF8uZmlsZW5hbWUgPSBzY3JpcHQuc3JjO1xuXG5cdFx0aWYgKHNjcmlwdC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWFudWFsJykpIHtcblx0XHRcdF8ubWFudWFsID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2soKSB7XG5cdFx0aWYgKCFfLm1hbnVhbCkge1xuXHRcdFx0Xy5oaWdobGlnaHRBbGwoKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIV8ubWFudWFsKSB7XG5cdFx0Ly8gSWYgdGhlIGRvY3VtZW50IHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aGVuIHdlJ2xsIHVzZSBET01Db250ZW50TG9hZGVkLlxuXHRcdC8vIElmIHRoZSBkb2N1bWVudCBzdGF0ZSBpcyBcImludGVyYWN0aXZlXCIgYW5kIHRoZSBwcmlzbS5qcyBzY3JpcHQgaXMgZGVmZXJyZWQsIHRoZW4gd2UnbGwgYWxzbyB1c2UgdGhlXG5cdFx0Ly8gRE9NQ29udGVudExvYWRlZCBldmVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgcGx1Z2lucyBvciBsYW5ndWFnZXMgd2hpY2ggaGF2ZSBhbHNvIGJlZW4gZGVmZXJyZWQgYW5kIHRoZXlcblx0XHQvLyBtaWdodCB0YWtlIGxvbmdlciBvbmUgYW5pbWF0aW9uIGZyYW1lIHRvIGV4ZWN1dGUgd2hpY2ggY2FuIGNyZWF0ZSBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9ubHkgc29tZSBwbHVnaW5zIGhhdmVcblx0XHQvLyBiZWVuIGxvYWRlZCB3aGVuIFByaXNtLmhpZ2hsaWdodEFsbCgpIGlzIGV4ZWN1dGVkLCBkZXBlbmRpbmcgb24gaG93IGZhc3QgcmVzb3VyY2VzIGFyZSBsb2FkZWQuXG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yMTAyXG5cdFx0dmFyIHJlYWR5U3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRcdGlmIChyZWFkeVN0YXRlID09PSAnbG9hZGluZycgfHwgcmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJyAmJiBzY3JpcHQgJiYgc2NyaXB0LmRlZmVyKSB7XG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2spO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrLCAxNik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIF87XG5cbn0oX3NlbGYpKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gUHJpc207XG59XG5cbi8vIGhhY2sgZm9yIGNvbXBvbmVudHMgdG8gd29yayBjb3JyZWN0bHkgaW4gbm9kZS5qc1xuaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG5cdGdsb2JhbC5QcmlzbSA9IFByaXNtO1xufVxuXG4vLyBzb21lIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbi90eXBlc1xuXG4vKipcbiAqIFRoZSBleHBhbnNpb24gb2YgYSBzaW1wbGUgYFJlZ0V4cGAgbGl0ZXJhbCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZWRlZiBHcmFtbWFyVG9rZW5cbiAqIEBwcm9wZXJ0eSB7UmVnRXhwfSBwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gb2YgdGhlIHRva2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbG9va2JlaGluZD1mYWxzZV0gSWYgYHRydWVgLCB0aGVuIHRoZSBmaXJzdCBjYXB0dXJpbmcgZ3JvdXAgb2YgYHBhdHRlcm5gIHdpbGwgKGVmZmVjdGl2ZWx5KVxuICogYmVoYXZlIGFzIGEgbG9va2JlaGluZCBncm91cCBtZWFuaW5nIHRoYXQgdGhlIGNhcHR1cmVkIHRleHQgd2lsbCBub3QgYmUgcGFydCBvZiB0aGUgbWF0Y2hlZCB0ZXh0IG9mIHRoZSBuZXcgdG9rZW4uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtncmVlZHk9ZmFsc2VdIFdoZXRoZXIgdGhlIHRva2VuIGlzIGdyZWVkeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN0cmluZ1tdfSBbYWxpYXNdIEFuIG9wdGlvbmFsIGFsaWFzIG9yIGxpc3Qgb2YgYWxpYXNlcy5cbiAqIEBwcm9wZXJ0eSB7R3JhbW1hcn0gW2luc2lkZV0gVGhlIG5lc3RlZCBncmFtbWFyIG9mIHRoaXMgdG9rZW4uXG4gKlxuICogVGhlIGBpbnNpZGVgIGdyYW1tYXIgd2lsbCBiZSB1c2VkIHRvIHRva2VuaXplIHRoZSB0ZXh0IHZhbHVlIG9mIGVhY2ggdG9rZW4gb2YgdGhpcyBraW5kLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBuZXN0ZWQgYW5kIGV2ZW4gcmVjdXJzaXZlIGxhbmd1YWdlIGRlZmluaXRpb25zLlxuICpcbiAqIE5vdGU6IFRoaXMgY2FuIGNhdXNlIGluZmluaXRlIHJlY3Vyc2lvbi4gQmUgY2FyZWZ1bCB3aGVuIHlvdSBlbWJlZCBkaWZmZXJlbnQgbGFuZ3VhZ2VzIG9yIGV2ZW4gdGhlIHNhbWUgbGFuZ3VhZ2UgaW50b1xuICogZWFjaCBhbm90aGVyLlxuICogQGdsb2JhbFxuICogQHB1YmxpY1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgR3JhbW1hclxuICogQHR5cGUge09iamVjdDxzdHJpbmcsIFJlZ0V4cCB8IEdyYW1tYXJUb2tlbiB8IEFycmF5PFJlZ0V4cCB8IEdyYW1tYXJUb2tlbj4+fVxuICogQHByb3BlcnR5IHtHcmFtbWFyfSBbcmVzdF0gQW4gb3B0aW9uYWwgZ3JhbW1hciBvYmplY3QgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgZ3JhbW1hci5cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBpbnZva2VkIGFmdGVyIGFuIGVsZW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBoaWdobGlnaHRlZC5cbiAqXG4gKiBAY2FsbGJhY2sgSGlnaGxpZ2h0Q2FsbGJhY2tcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCBzdWNjZXNzZnVsbHkgaGlnaGxpZ2h0ZWQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBIb29rQ2FsbGJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gZW52IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb2YgdGhlIGhvb2suXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuO1xuUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzwhLS0oPzooPyE8IS0tKVtcXHNcXFNdKSo/LS0+Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3Byb2xvZyc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcP1tcXHNcXFNdKz9cXD8+Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2RvY3R5cGUnOiB7XG5cdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQtZG9jdHlwZWRlY2xcblx0XHRwYXR0ZXJuOiAvPCFET0NUWVBFKD86W14+XCInW1xcXV18XCJbXlwiXSpcInwnW14nXSonKSsoPzpcXFsoPzpbXjxcIidcXF1dfFwiW15cIl0qXCJ8J1teJ10qJ3w8KD8hIS0tKXw8IS0tKD86W14tXXwtKD8hLT4pKSotLT4pKlxcXVxccyopPz4vaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJuYWwtc3Vic2V0Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5bXlxcW10qXFxbKVtcXHNcXFNdKyg/PVxcXT4kKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cIlteXCJdKlwifCdbXiddKicvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXjwhfD4kfFtbXFxdXS8sXG5cdFx0XHQnZG9jdHlwZS10YWcnOiAvXkRPQ1RZUEUvaSxcblx0XHRcdCduYW1lJzogL1teXFxzPD4nXCJdKy9cblx0XHR9XG5cdH0sXG5cdCdjZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvPCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+L2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd0YWcnOiB7XG5cdFx0cGF0dGVybjogLzxcXC8/KD8hXFxkKVteXFxzPlxcLz0kPCVdKyg/Olxccyg/OlxccypbXlxccz5cXC89XSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKD89W1xccz5dKSl8KD89W1xccy8+XSkpKSspP1xccypcXC8/Pi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHtcblx0XHRcdFx0cGF0dGVybjogL148XFwvP1teXFxzPlxcL10rLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148XFwvPy8sXG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9eW15cXHM+XFwvOl0rOi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzcGVjaWFsLWF0dHInOiBbXSxcblx0XHRcdCdhdHRyLXZhbHVlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL149Lyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdhdHRyLWVxdWFscydcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopW1wiJ118W1wiJ10kLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC8/Pi8sXG5cdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW15cXHM+XFwvXSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzogL15bXlxccz5cXC86XSs6L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cdH0sXG5cdCdlbnRpdHknOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyZbXFxkYS16XXsxLDh9Oy9pLFxuXHRcdFx0YWxpYXM6ICduYW1lZC1lbnRpdHknXG5cdFx0fSxcblx0XHQvJiN4P1tcXGRhLWZdezEsOH07L2lcblx0XVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10uaW5zaWRlWydlbnRpdHknXSA9XG5cdFByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ2VudGl0eSddO1xuUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsnZG9jdHlwZSddLmluc2lkZVsnaW50ZXJuYWwtc3Vic2V0J10uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblxuLy8gUGx1Z2luIHRvIG1ha2UgZW50aXR5IHRpdGxlIHNob3cgdGhlIHJlYWwgZW50aXR5LCBpZGVhIGJ5IFJvbWFuIEtvbWFyb3ZcblByaXNtLmhvb2tzLmFkZCgnd3JhcCcsIGZ1bmN0aW9uIChlbnYpIHtcblxuXHRpZiAoZW52LnR5cGUgPT09ICdlbnRpdHknKSB7XG5cdFx0ZW52LmF0dHJpYnV0ZXNbJ3RpdGxlJ10gPSBlbnYuY29udGVudC5yZXBsYWNlKC8mYW1wOy8sICcmJyk7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcsICdhZGRJbmxpbmVkJywge1xuXHQvKipcblx0ICogQWRkcyBhbiBpbmxpbmVkIGxhbmd1YWdlIHRvIG1hcmt1cC5cblx0ICpcblx0ICogQW4gZXhhbXBsZSBvZiBhbiBpbmxpbmVkIGxhbmd1YWdlIGlzIENTUyB3aXRoIGA8c3R5bGU+YCB0YWdzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnIHRoYXQgY29udGFpbnMgdGhlIGlubGluZWQgbGFuZ3VhZ2UuIFRoaXMgbmFtZSB3aWxsIGJlIHRyZWF0ZWQgYXNcblx0ICogY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1YWdlIGtleS5cblx0ICogQGV4YW1wbGVcblx0ICogYWRkSW5saW5lZCgnc3R5bGUnLCAnY3NzJyk7XG5cdCAqL1xuXHR2YWx1ZTogZnVuY3Rpb24gYWRkSW5saW5lZCh0YWdOYW1lLCBsYW5nKSB7XG5cdFx0dmFyIGluY2x1ZGVkQ2RhdGFJbnNpZGUgPSB7fTtcblx0XHRpbmNsdWRlZENkYXRhSW5zaWRlWydsYW5ndWFnZS0nICsgbGFuZ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvKF48IVxcW0NEQVRBXFxbKVtcXHNcXFNdKz8oPz1cXF1cXF0+JCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdH07XG5cdFx0aW5jbHVkZWRDZGF0YUluc2lkZVsnY2RhdGEnXSA9IC9ePCFcXFtDREFUQVxcW3xcXF1cXF0+JC9pO1xuXG5cdFx0dmFyIGluc2lkZSA9IHtcblx0XHRcdCdpbmNsdWRlZC1jZGF0YSc6IHtcblx0XHRcdFx0cGF0dGVybjogLzwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPi9pLFxuXHRcdFx0XHRpbnNpZGU6IGluY2x1ZGVkQ2RhdGFJbnNpZGVcblx0XHRcdH1cblx0XHR9O1xuXHRcdGluc2lkZVsnbGFuZ3VhZ2UtJyArIGxhbmddID0ge1xuXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdH07XG5cblx0XHR2YXIgZGVmID0ge307XG5cdFx0ZGVmW3RhZ05hbWVdID0ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oPF9fW14+XSo+KSg/OjwhXFxbQ0RBVEFcXFsoPzpbXlxcXV18XFxdKD8hXFxdPikpKlxcXVxcXT58KD8hPCFcXFtDREFUQVxcWylbXFxzXFxTXSkqPyg/PTxcXC9fXz4pLy5zb3VyY2UucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFnTmFtZTsgfSksICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBpbnNpZGVcblx0XHR9O1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya3VwJywgJ2NkYXRhJywgZGVmKTtcblx0fVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcsICdhZGRBdHRyaWJ1dGUnLCB7XG5cdC8qKlxuXHQgKiBBZGRzIGFuIHBhdHRlcm4gdG8gaGlnaGxpZ2h0IGxhbmd1YWdlcyBlbWJlZGRlZCBpbiBIVE1MIGF0dHJpYnV0ZXMuXG5cdCAqXG5cdCAqIEFuIGV4YW1wbGUgb2YgYW4gaW5saW5lZCBsYW5ndWFnZSBpcyBDU1Mgd2l0aCBgc3R5bGVgIGF0dHJpYnV0ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnIHRoYXQgY29udGFpbnMgdGhlIGlubGluZWQgbGFuZ3VhZ2UuIFRoaXMgbmFtZSB3aWxsIGJlIHRyZWF0ZWQgYXNcblx0ICogY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1YWdlIGtleS5cblx0ICogQGV4YW1wbGVcblx0ICogYWRkQXR0cmlidXRlKCdzdHlsZScsICdjc3MnKTtcblx0ICovXG5cdHZhbHVlOiBmdW5jdGlvbiAoYXR0ck5hbWUsIGxhbmcpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5pbnNpZGVbJ3NwZWNpYWwtYXR0ciddLnB1c2goe1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHQvKF58W1wiJ1xcc10pLy5zb3VyY2UgKyAnKD86JyArIGF0dHJOYW1lICsgJyknICsgL1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSsoPz1bXFxzPl0pKS8uc291cmNlLFxuXHRcdFx0XHQnaSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHRyLW5hbWUnOiAvXlteXFxzPV0rLyxcblx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLz1bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF49XFxzKihbXCInXXwoPyFbXCInXSkpKVxcU1tcXHNcXFNdKig/PVxcMiQpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6IFtsYW5nLCAnbGFuZ3VhZ2UtJyArIGxhbmddLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9ePS8sXG5cdFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdhdHRyLWVxdWFscydcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0L1wifCcvXG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaHRtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5QcmlzbS5sYW5ndWFnZXMubWF0aG1sID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblByaXNtLmxhbmd1YWdlcy5zdmcgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuXG5QcmlzbS5sYW5ndWFnZXMueG1sID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xuUHJpc20ubGFuZ3VhZ2VzLnNzbWwgPSBQcmlzbS5sYW5ndWFnZXMueG1sO1xuUHJpc20ubGFuZ3VhZ2VzLmF0b20gPSBQcmlzbS5sYW5ndWFnZXMueG1sO1xuUHJpc20ubGFuZ3VhZ2VzLnJzcyA9IFByaXNtLmxhbmd1YWdlcy54bWw7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nID0gLyg/OlwiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcInwnKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W14nXFxcXFxcclxcbl0pKicpLztcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NzID0ge1xuXHRcdCdjb21tZW50JzogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdCdhdHJ1bGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ0BbXFxcXHctXSg/OicgKyAvW147e1xcc1wiJ118XFxzKyg/IVxccykvLnNvdXJjZSArICd8JyArIHN0cmluZy5zb3VyY2UgKyAnKSo/JyArIC8oPzo7fCg/PVxccypcXHspKS8uc291cmNlKSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncnVsZSc6IC9eQFtcXHctXSsvLFxuXHRcdFx0XHQnc2VsZWN0b3ItZnVuY3Rpb24tYXJndW1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXGJzZWxlY3RvclxccypcXChcXHMqKD8hW1xccyldKSkoPzpbXigpXFxzXXxcXHMrKD8hW1xccyldKXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkrKD89XFxzKlxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86YW5kfG5vdHxvbmx5fG9yKSg/IVtcXHctXSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3VybCc6IHtcblx0XHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXFxcXGJ1cmxcXFxcKCg/OicgKyBzdHJpbmcuc291cmNlICsgJ3wnICsgLyg/OlteXFxcXFxcclxcbigpXCInXXxcXFxcW1xcc1xcU10pKi8uc291cmNlICsgJylcXFxcKScsICdpJyksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL151cmwvaSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCh8XFwpJC8sXG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHN0cmluZy5zb3VyY2UgKyAnJCcpLFxuXHRcdFx0XHRcdGFsaWFzOiAndXJsJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc2VsZWN0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhefFt7fVxcXFxzXSlbXnt9XFxcXHNdKD86W157fTtcIlxcJ1xcXFxzXXxcXFxccysoPyFbXFxcXHN7XSl8JyArIHN0cmluZy5zb3VyY2UgKyAnKSooPz1cXFxccypcXFxceyknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiBzdHJpbmcsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi1cXHdcXHhBMC1cXHVGRkZGXSkoPyFcXHMpWy1fYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKjopL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnaW1wb3J0YW50JzogLyFpbXBvcnRhbnRcXGIvaSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14tYS16MC05XSlbLWEtejAtOV0rKD89XFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9OzosXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NzWydhdHJ1bGUnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5jc3M7XG5cblx0dmFyIG1hcmt1cCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5cdGlmIChtYXJrdXApIHtcblx0XHRtYXJrdXAudGFnLmFkZElubGluZWQoJ3N0eWxlJywgJ2NzcycpO1xuXHRcdG1hcmt1cC50YWcuYWRkQXR0cmlidXRlKCdzdHlsZScsICdjc3MnKTtcblx0fVxuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5jbGlrZSA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGludGVyZmFjZXxuZXd8dHJhaXQpXFxzK3xcXGJjYXRjaFxccytcXCgpW1xcdy5cXFxcXSsvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1suXFxcXF0vXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXRjaHxjb250aW51ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufGluc3RhbmNlb2Z8bmV3fG51bGx8cmV0dXJufHRocm93fHRyeXx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvWzw+XT0/fFshPV09Pz0/fC0tP3xcXCtcXCs/fCYmP3xcXHxcXHw/fFs/Ki9+XiVdLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmNsaWtlWydjbGFzcy1uYW1lJ10sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteJFxcd1xceEEwLVxcdUZGRkZdKSg/IVxccylbXyRBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXC4oPzpjb25zdHJ1Y3Rvcnxwcm90b3R5cGUpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFx9KVxccyopY2F0Y2hcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteLl18XFwuXFwuXFwuXFxzKilcXGIoPzphc3xhc3NlcnQoPz1cXHMqXFx7KXxhc3luYyg/PVxccyooPzpmdW5jdGlvblxcYnxcXCh8WyRcXHdcXHhBMC1cXHVGRkZGXXwkKSl8YXdhaXR8YnJlYWt8Y2FzZXxjbGFzc3xjb25zdHxjb250aW51ZXxkZWJ1Z2dlcnxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8ZmluYWxseSg/PVxccyooPzpcXHt8JCkpfGZvcnxmcm9tKD89XFxzKig/OlsnXCJdfCQpKXxmdW5jdGlvbnwoPzpnZXR8c2V0KSg/PVxccyooPzpbI1xcWyRcXHdcXHhBMC1cXHVGRkZGXXwkKSl8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnRlcmZhY2V8bGV0fG5ld3xudWxsfG9mfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzdGF0aWN8c3VwZXJ8c3dpdGNofHRoaXN8dGhyb3d8dHJ5fHR5cGVvZnx1bmRlZmluZWR8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZClcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdF0sXG5cdC8vIEFsbG93IGZvciBhbGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMDA4NDQ0KVxuXHQnZnVuY3Rpb24nOiAvIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKig/OlxcLlxccyooPzphcHBseXxiaW5kfGNhbGwpXFxzKik/XFwoKS8sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0LyhefFteXFx3JF0pLy5zb3VyY2UgK1xuXHRcdFx0Jyg/OicgK1xuXHRcdFx0KFxuXHRcdFx0XHQvLyBjb25zdGFudFxuXHRcdFx0XHQvTmFOfEluZmluaXR5Ly5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBiaW5hcnkgaW50ZWdlclxuXHRcdFx0XHQvMFtiQl1bMDFdKyg/Ol9bMDFdKykqbj8vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIG9jdGFsIGludGVnZXJcblx0XHRcdFx0LzBbb09dWzAtN10rKD86X1swLTddKykqbj8vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIGhleGFkZWNpbWFsIGludGVnZXJcblx0XHRcdFx0LzBbeFhdW1xcZEEtRmEtZl0rKD86X1tcXGRBLUZhLWZdKykqbj8vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIGRlY2ltYWwgYmlnaW50XG5cdFx0XHRcdC9cXGQrKD86X1xcZCspKm4vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIGRlY2ltYWwgbnVtYmVyIChpbnRlZ2VyIG9yIGZsb2F0KSBidXQgbm8gYmlnaW50XG5cdFx0XHRcdC8oPzpcXGQrKD86X1xcZCspKig/OlxcLig/OlxcZCsoPzpfXFxkKykqKT8pP3xcXC5cXGQrKD86X1xcZCspKikoPzpbRWVdWystXT9cXGQrKD86X1xcZCspKik/Ly5zb3VyY2Vcblx0XHRcdCkgK1xuXHRcdFx0JyknICtcblx0XHRcdC8oPyFbXFx3JF0pLy5zb3VyY2Vcblx0XHQpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLy0tfFxcK1xcK3xcXCpcXCo9P3w9PnwmJj0/fFxcfFxcfD0/fFshPV09PXw8PD0/fD4+Pj89P3xbLSsqLyUmfF4hPTw+XT0/fFxcLnszfXxcXD9cXD89P3xcXD9cXC4/fFt+Ol0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ2NsYXNzLW5hbWUnXVswXS5wYXR0ZXJuID0gLyhcXGIoPzpjbGFzc3xleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxpbnRlcmZhY2V8bmV3KVxccyspW1xcdy5cXFxcXSsvO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2tleXdvcmQnLCB7XG5cdCdyZWdleCc6IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHQvLyBsb29rYmVoaW5kXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWR1cGUtY2hhcmFjdGVycy1jaGFyYWN0ZXItY2xhc3Ncblx0XHRcdC8oKD86XnxbXiRcXHdcXHhBMC1cXHVGRkZGLlwiJ1xcXSlcXHNdfFxcYig/OnJldHVybnx5aWVsZCkpXFxzKikvLnNvdXJjZSArXG5cdFx0XHQvLyBSZWdleCBwYXR0ZXJuOlxuXHRcdFx0Ly8gVGhlcmUgYXJlIDIgcmVnZXggcGF0dGVybnMgaGVyZS4gVGhlIFJlZ0V4cCBzZXQgbm90YXRpb24gcHJvcG9zYWwgYWRkZWQgc3VwcG9ydCBmb3IgbmVzdGVkIGNoYXJhY3RlclxuXHRcdFx0Ly8gY2xhc3NlcyBpZiB0aGUgYHZgIGZsYWcgaXMgcHJlc2VudC4gVW5mb3J0dW5hdGVseSwgbmVzdGVkIENDcyBhcmUgYm90aCBjb250ZXh0LWZyZWUgYW5kIGluY29tcGF0aWJsZVxuXHRcdFx0Ly8gd2l0aCB0aGUgb25seSBzeW50YXgsIHNvIHdlIGhhdmUgdG8gZGVmaW5lIDIgZGlmZmVyZW50IHJlZ2V4IHBhdHRlcm5zLlxuXHRcdFx0L1xcLy8uc291cmNlICtcblx0XHRcdCcoPzonICtcblx0XHRcdC8oPzpcXFsoPzpbXlxcXVxcXFxcXHJcXG5dfFxcXFwuKSpcXF18XFxcXC58W14vXFxcXFxcW1xcclxcbl0pK1xcL1tkZ2lteXVzXXswLDd9Ly5zb3VyY2UgK1xuXHRcdFx0J3wnICtcblx0XHRcdC8vIGB2YCBmbGFnIHN5bnRheC4gVGhpcyBzdXBwb3J0cyAzIGxldmVscyBvZiBuZXN0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG5cdFx0XHQvKD86XFxbKD86W15bXFxdXFxcXFxcclxcbl18XFxcXC58XFxbKD86W15bXFxdXFxcXFxcclxcbl18XFxcXC58XFxbKD86W15bXFxdXFxcXFxcclxcbl18XFxcXC4pKlxcXSkqXFxdKSpcXF18XFxcXC58W14vXFxcXFxcW1xcclxcbl0pK1xcL1tkZ2lteXVzXXswLDd9dltkZ2lteXVzXXswLDd9Ly5zb3VyY2UgK1xuXHRcdFx0JyknICtcblx0XHRcdC8vIGxvb2thaGVhZFxuXHRcdFx0Lyg/PSg/Olxcc3xcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcLykqKD86JHxbXFxyXFxuLC47On0pXFxdXXxcXC9cXC8pKS8uc291cmNlXG5cdFx0KSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyZWdleC1zb3VyY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFxcLylbXFxzXFxTXSsoPz1cXC9bYS16XSokKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcmVnZXgnLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5yZWdleFxuXHRcdFx0fSxcblx0XHRcdCdyZWdleC1kZWxpbWl0ZXInOiAvXlxcL3xcXC8kLyxcblx0XHRcdCdyZWdleC1mbGFncyc6IC9eW2Etel0rJC8sXG5cdFx0fVxuXHR9LFxuXHQvLyBUaGlzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGtleXdvcmQgYmVjYXVzZSB3ZSB1c2UgXCJmdW5jdGlvblwiIGluc2lkZSB0aGUgbG9vay1mb3J3YXJkXG5cdCdmdW5jdGlvbi12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKls9Ol1cXHMqKD86YXN5bmNcXHMqKT8oPzpcXGJmdW5jdGlvblxcYnwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKVxccyo9PikpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQncGFyYW1ldGVyJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oZnVuY3Rpb24oPzpcXHMrKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKik/XFxzKlxcKFxccyopKD8hXFxzKSg/OlteKClcXHNdfFxccysoPyFbXFxzKV0pfFxcKFteKCldKlxcKSkrKD89XFxzKlxcKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXHdcXHhBMC1cXHVGRkZGXSkoPyFcXHMpW18kYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKj0+KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwoXFxzKikoPyFcXHMpKD86W14oKVxcc118XFxzKyg/IVtcXHMpXSl8XFwoW14oKV0qXFwpKSsoPz1cXHMqXFwpXFxzKj0+KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLygoPzpcXGJ8XFxzfF4pKD8hKD86YXN8YXN5bmN8YXdhaXR8YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb25zdHxjb250aW51ZXxkZWJ1Z2dlcnxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8ZmluYWxseXxmb3J8ZnJvbXxmdW5jdGlvbnxnZXR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnRlcmZhY2V8bGV0fG5ld3xudWxsfG9mfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpKD8hWyRcXHdcXHhBMC1cXHVGRkZGXSkpKD86KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKlxccyopXFwoXFxzKnxcXF1cXHMqXFwoXFxzKikoPyFcXHMpKD86W14oKVxcc118XFxzKyg/IVtcXHMpXSl8XFwoW14oKV0qXFwpKSsoPz1cXHMqXFwpXFxzKlxceykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9XG5cdF0sXG5cdCdjb25zdGFudCc6IC9cXGJbQS1aXSg/OltBLVpfXXxcXGR4PykqXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnc3RyaW5nJywge1xuXHQnaGFzaGJhbmcnOiB7XG5cdFx0cGF0dGVybjogL14jIS4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXHQndGVtcGxhdGUtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9gKD86XFxcXFtcXHNcXFNdfFxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfXwoPyFcXCRcXHspW15cXFxcYF0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0ZW1wbGF0ZS1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmctcHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFsse10pWyBcXHRdKikoW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMig/PVxccyo6KS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ29wZXJhdG9yJywge1xuXHQnbGl0ZXJhbC1wcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58Wyx7XSlbIFxcdF0qKSg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqOikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG59KTtcblxuaWYgKFByaXNtLmxhbmd1YWdlcy5tYXJrdXApIHtcblx0UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcuYWRkSW5saW5lZCgnc2NyaXB0JywgJ2phdmFzY3JpcHQnKTtcblxuXHQvLyBhZGQgYXR0cmlidXRlIHN1cHBvcnQgZm9yIGFsbCBET00gZXZlbnRzLlxuXHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMjU3RhbmRhcmRfZXZlbnRzXG5cdFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLmFkZEF0dHJpYnV0ZShcblx0XHQvb24oPzphYm9ydHxibHVyfGNoYW5nZXxjbGlja3xjb21wb3NpdGlvbig/OmVuZHxzdGFydHx1cGRhdGUpfGRibGNsaWNrfGVycm9yfGZvY3VzKD86aW58b3V0KT98a2V5KD86ZG93bnx1cCl8bG9hZHxtb3VzZSg/OmRvd258ZW50ZXJ8bGVhdmV8bW92ZXxvdXR8b3Zlcnx1cCl8cmVzZXR8cmVzaXplfHNjcm9sbHxzZWxlY3R8c2xvdGNoYW5nZXxzdWJtaXR8dW5sb2FkfHdoZWVsKS8uc291cmNlLFxuXHRcdCdqYXZhc2NyaXB0J1xuXHQpO1xufVxuXG5QcmlzbS5sYW5ndWFnZXMuanMgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdDtcblxuUHJpc20ubGFuZ3VhZ2VzLmFiYXAgPSB7XG5cdCdjb21tZW50JzogL15cXCouKi9tLFxuXHQnc3RyaW5nJzogLyhgfCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdCdzdHJpbmctdGVtcGxhdGUnOiB7XG5cdFx0cGF0dGVybjogLyhbfH1dKSg/OlxcXFwufFteXFxcXHx7XFxyXFxuXSkqKD89W3x7XSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdC8qIEVuZCBPZiBMaW5lIGNvbW1lbnRzIHNob3VsZCBub3QgaW50ZXJmZXJlIHdpdGggc3RyaW5ncyB3aGVuIHRoZVxuXHRxdW90ZSBjaGFyYWN0ZXIgb2NjdXJzIHdpdGhpbiB0aGVtLiBXZSBhc3N1bWUgYSBzdHJpbmcgYmVpbmcgaGlnaGxpZ2h0ZWRcblx0aW5zaWRlIGFuIEVPTCBjb21tZW50IGlzIG1vcmUgYWNjZXB0YWJsZSB0aGFuIHRoZSBvcHBvc2l0ZS5cblx0Ki9cblx0J2VvbC1jb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpXCIuKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcc3xcXC58XikoPzpcXCotSU5QVVR8XFw/VE98QUJBUC1TT1VSQ0V8QUJCUkVWSUFURUR8QUJTfEFCU1RSQUNUfEFDQ0VQVHxBQ0NFUFRJTkd8QUNDRVNTUE9MSUNZfEFDQ09SRElOR3xBQ09TfEFDVElWQVRJT058QUNUVUFMfEFERHxBREQtQ09SUkVTUE9ORElOR3xBREpBQ0VOVHxBRlRFUnxBTElBU3xBTElBU0VTfEFMSUdOfEFMTHxBTExPQ0FURXxBTFBIQXxBTkFMWVNJU3xBTkFMWVpFUnxBTkR8QU5ZfEFQUEVORHxBUFBFTkRBR0V8QVBQRU5ESU5HfEFQUExJQ0FUSU9OfEFSQ0hJVkV8QVJFQXxBUklUSE1FVElDfEFTfEFTQ0VORElOR3xBU0lOfEFTUEVDVHxBU1NFUlR8QVNTSUdOfEFTU0lHTkVEfEFTU0lHTklOR3xBU1NPQ0lBVElPTnxBU1lOQ0hST05PVVN8QVR8QVRBTnxBVFRSSUJVVEVTfEFVVEhPUklUWXxBVVRIT1JJVFktQ0hFQ0t8QVZHfEJBQ0t8QkFDS0dST1VORHxCQUNLVVB8QkFDS1dBUkR8QkFESXxCQVNFfEJFRk9SRXxCRUdJTnxCRVRXRUVOfEJJR3xCSU5BUll8QklORElOR3xCSVR8QklULUFORHxCSVQtTk9UfEJJVC1PUnxCSVQtWE9SfEJMQUNLfEJMQU5LfEJMQU5LU3xCTE9CfEJMT0NLfEJMT0NLU3xCTFVFfEJPVU5EfEJPVU5EQVJJRVN8Qk9VTkRTfEJPWEVEfEJSRUFLLVBPSU5UfEJUfEJVRkZFUnxCWXxCWVBBU1NJTkd8QllURXxCWVRFLUNBfEJZVEUtQ058QllURS1DT3xCWVRFLUNTfEJZVEUtTkF8QllURS1OU3xCWVRFLU9SREVSfEN8Q0F8Q0FMTHxDQUxMSU5HfENBU0V8Q0FTVHxDQVNUSU5HfENBVENIfENFSUx8Q0VOVEVSfENFTlRFUkVEfENIQUlOfENIQUlOLUlOUFVUfENIQUlOLVJFUVVFU1R8Q0hBTkdFfENIQU5HSU5HfENIQU5ORUxTfENIQVItVE8tSEVYfENIQVJBQ1RFUnxDSEFSTEVOfENIRUNLfENIRUNLQk9YfENJUkNVTEFSfENJX3xDTEFTU3xDTEFTUy1DT0RJTkd8Q0xBU1MtREFUQXxDTEFTUy1FVkVOVFN8Q0xBU1MtTUVUSE9EU3xDTEFTUy1QT09MfENMRUFOVVB8Q0xFQVJ8Q0xJRU5UfENMT0J8Q0xPQ0t8Q0xPU0V8Q058Q05UfENPfENPQUxFU0NFfENPREV8Q09ESU5HfENPTExFQ1R8Q09MT1J8Q09MVU1OfENPTFVNTlN8Q09MX0JBQ0tHUk9VTkR8Q09MX0dST1VQfENPTF9IRUFESU5HfENPTF9LRVl8Q09MX05FR0FUSVZFfENPTF9OT1JNQUx8Q09MX1BPU0lUSVZFfENPTF9UT1RBTHxDT01NRU5UfENPTU1FTlRTfENPTU1JVHxDT01NT058Q09NTVVOSUNBVElPTnxDT01QQVJJTkd8Q09NUE9ORU5UfENPTVBPTkVOVFN8Q09NUFJFU1NJT058Q09NUFVURXxDT05DQVR8Q09OQ0FURU5BVEV8Q09ORHxDT05ERU5TRXxDT05ESVRJT058Q09OTkVDVHxDT05ORUNUSU9OfENPTlNUQU5UU3xDT05URVhUfENPTlRFWFRTfENPTlRJTlVFfENPTlRST0x8Q09OVFJPTFN8Q09OVnxDT05WRVJTSU9OfENPTlZFUlR8Q09QSUVTfENPUFl8Q09SUkVTUE9ORElOR3xDT1N8Q09TSHxDT1VOVHxDT1VOVFJZfENPVkVSfENQfENQSXxDUkVBVEV8Q1JFQVRJTkd8Q1JJVElDQUx8Q1N8Q1VSUkVOQ1l8Q1VSUkVOQ1lfQ09OVkVSU0lPTnxDVVJSRU5UfENVUlNPUnxDVVJTT1ItU0VMRUNUSU9OfENVU1RPTUVSfENVU1RPTUVSLUZVTkNUSU9OfERBTkdFUk9VU3xEQVRBfERBVEFCQVNFfERBVEFJTkZPfERBVEFTRVR8REFURXxEQVlMSUdIVHxEQk1BWExFTnxERFxcL01NXFwvWVl8RERcXC9NTVxcL1lZWVl8RERNTVlZfERFQUxMT0NBVEV8REVDSU1BTFN8REVDSU1BTF9TSElGVHxERUNMQVJBVElPTlN8REVFUHxERUZBVUxUfERFRkVSUkVEfERFRklORXxERUZJTklOR3xERUZJTklUSU9OfERFTEVURXxERUxFVElOR3xERU1BTkR8REVQQVJUTUVOVHxERVNDRU5ESU5HfERFU0NSSUJFfERFU1RJTkFUSU9OfERFVEFJTHxESUFMT0d8RElSRUNUT1JZfERJU0NPTk5FQ1R8RElTUExBWXxESVNQTEFZLU1PREV8RElTVEFOQ0V8RElTVElOQ1R8RElWfERJVklERXxESVZJREUtQ09SUkVTUE9ORElOR3xESVZJU0lPTnxET3xEVU1NWXxEVVBMSUNBVEV8RFVQTElDQVRFU3xEVVJBVElPTnxEVVJJTkd8RFlOQU1JQ3xEWU5QUk98RXxFQUNIfEVESVR8RURJVE9SLUNBTEx8RUxTRXxFTFNFSUZ8RU1QVFl8RU5BQkxFRHxFTkFCTElOR3xFTkNPRElOR3xFTkR8RU5ELUVOSEFOQ0VNRU5ULVNFQ1RJT058RU5ELUxJTkVTfEVORC1PRi1ERUZJTklUSU9OfEVORC1PRi1GSUxFfEVORC1PRi1QQUdFfEVORC1PRi1TRUxFQ1RJT058RU5EQVR8RU5EQ0FTRXxFTkRDQVRDSHxFTkRDSEFJTnxFTkRDTEFTU3xFTkRET3xFTkRFTkhBTkNFTUVOVHxFTkRFWEVDfEVOREZPUnxFTkRGT1JNfEVOREZVTkNUSU9OfEVORElBTnxFTkRJRnxFTkRJTkd8RU5ESU5URVJGQUNFfEVORExPT1B8RU5ETUVUSE9EfEVORE1PRFVMRXxFTkRPTnxFTkRQUk9WSURFfEVORFNFTEVDVHxFTkRUUll8RU5EV0hJTEV8RU5HSU5FRVJJTkd8RU5IQU5DRU1FTlR8RU5IQU5DRU1FTlQtUE9JTlR8RU5IQU5DRU1FTlQtU0VDVElPTnxFTkhBTkNFTUVOVFN8RU5UUklFU3xFTlRSWXxFTlZJUk9OTUVOVHxFUXxFUVVBTHxFUVVJVnxFUlJPUk1FU1NBR0V8RVJST1JTfEVTQ0FQRXxFU0NBUElOR3xFVkVOVHxFVkVOVFN8RVhBQ1R8RVhDRVBUfEVYQ0VQVElPTnxFWENFUFRJT04tVEFCTEV8RVhDRVBUSU9OU3xFWENMVURFfEVYQ0xVRElOR3xFWEVDfEVYRUNVVEV8RVhJU1RTfEVYSVR8RVhJVC1DT01NQU5EfEVYUHxFWFBBTkR8RVhQQU5ESU5HfEVYUElSQVRJT058RVhQTElDSVR8RVhQT05FTlR8RVhQT1JUfEVYUE9SVElOR3xFWFRFTkR8RVhURU5ERUR8RVhURU5TSU9OfEVYVFJBQ1R8RkFJTHxGRVRDSHxGSUVMRHxGSUVMRC1HUk9VUFN8RklFTEQtU1lNQk9MfEZJRUxELVNZTUJPTFN8RklFTERTfEZJTEV8RklMVEVSfEZJTFRFUi1UQUJMRXxGSUxURVJTfEZJTkFMfEZJTkR8RklSU1R8RklSU1QtTElORXxGSVhFRC1QT0lOVHxGS0VRfEZLR0V8RkxPT1J8RkxVU0h8Rk9OVHxGT1J8Rk9STXxGT1JNQVR8Rk9SV0FSRHxGT1VORHxGUkFDfEZSQU1FfEZSQU1FU3xGUkVFfEZSSUVORFN8RlJPTXxGVU5DVElPTnxGVU5DVElPTi1QT09MfEZVTkNUSU9OQUxJVFl8RlVSVEhFUnxHQVBTfEdFfEdFTkVSQVRFfEdFVHxHSVZJTkd8R0tFUXxHS0dFfEdMT0JBTHxHUkFOVHxHUkVBVEVSfEdSRUVOfEdST1VQfEdST1VQU3xHVHxIQU5ETEV8SEFORExFUnxIQVJNTEVTU3xIQVNIRUR8SEFWSU5HfEhEQnxIRUFELUxJTkVTfEhFQURFUnxIRUFERVJTfEhFQURJTkd8SEVMUC1JRHxIRUxQLVJFUVVFU1R8SElERXxISUdIfEhJTlR8SE9MRHxIT1RTUE9UfEl8SUNPTnxJRHxJREVOVElGSUNBVElPTnxJREVOVElGSUVSfElEU3xJRnxJR05PUkV8SUdOT1JJTkd8SU1NRURJQVRFTFl8SU1QTEVNRU5UQVRJT058SU1QTEVNRU5UQVRJT05TfElNUExFTUVOVEVEfElNUExJQ0lUfElNUE9SVHxJTVBPUlRJTkd8SU58SU5BQ1RJVkV8SU5DTHxJTkNMVURFfElOQ0xVREVTfElOQ0xVRElOR3xJTkNSRU1FTlR8SU5ERVh8SU5ERVgtTElORXxJTkZPVFlQRVN8SU5IRVJJVElOR3xJTklUfElOSVRJQUx8SU5JVElBTElaQVRJT058SU5ORVJ8SU5PVVR8SU5QVVR8SU5TRVJUfElOU1RBTkNFU3xJTlRFTlNJRklFRHxJTlRFUkZBQ0V8SU5URVJGQUNFLVBPT0x8SU5URVJGQUNFU3xJTlRFUk5BTHxJTlRFUlZBTFN8SU5UT3xJTlZFUlNFfElOVkVSVEVELURBVEV8SVN8SVNPfElURVJBVE9SfElUTk98Sk9CfEpPSU58S0VFUHxLRUVQSU5HfEtFUk5FTHxLRVl8S0VZU3xLRVlXT1JEU3xLSU5EfExBTkdVQUdFfExBU1R8TEFURXxMQVlPVVR8TEV8TEVBRElOR3xMRUFWRXxMRUZUfExFRlQtSlVTVElGSUVEfExFRlRQTFVTfExFRlRTUEFDRXxMRUdBQ1l8TEVOR1RIfExFU1N8TEVUfExFVkVMfExFVkVMU3xMSUtFfExJTkV8TElORS1DT1VOVHxMSU5FLVNFTEVDVElPTnxMSU5FLVNJWkV8TElORUZFRUR8TElORVN8TElTVHxMSVNULVBST0NFU1NJTkd8TElTVEJPWHxMSVRUTEV8TExBTkd8TE9BRHxMT0FELU9GLVBST0dSQU18TE9CfExPQ0FMfExPQ0FMRXxMT0NBVE9SfExPR3xMT0ctUE9JTlR8TE9HMTB8TE9HRklMRXxMT0dJQ0FMfExPTkd8TE9PUHxMT1d8TE9XRVJ8TFBBRHxMUEl8TFR8TXxNQUlMfE1BSU58TUFKT1ItSUR8TUFQUElOR3xNQVJHSU58TUFSS3xNQVNLfE1BVENIfE1BVENIQ09ERXxNQVh8TUFYSU1VTXxNRURJVU18TUVNQkVSU3xNRU1PUll8TUVTSHxNRVNTQUdFfE1FU1NBR0UtSUR8TUVTU0FHRVN8TUVTU0FHSU5HfE1FVEhPRHxNRVRIT0RTfE1JTnxNSU5JTVVNfE1JTk9SLUlEfE1NXFwvRERcXC9ZWXxNTVxcL0REXFwvWVlZWXxNTUREWVl8TU9EfE1PREV8TU9ESUZ8TU9ESUZJRVJ8TU9ESUZZfE1PRFVMRXxNT1ZFfE1PVkUtQ09SUkVTUE9ORElOR3xNVUxUSVBMWXxNVUxUSVBMWS1DT1JSRVNQT05ESU5HfE5BfE5BTUV8TkFNRVRBQnxOQVRJVkV8TkJ8TkV8TkVTVEVEfE5FU1RJTkd8TkVXfE5FVy1MSU5FfE5FVy1QQUdFfE5FVy1TRUNUSU9OfE5FWFR8Tk98Tk8tRElTUExBWXxOTy1FWFRFTlNJT058Tk8tR0FQfE5PLUdBUFN8Tk8tR1JPVVBJTkd8Tk8tSEVBRElOR3xOTy1TQ1JPTExJTkd8Tk8tU0lHTnxOTy1USVRMRXxOTy1UT1BPRlBBR0V8Tk8tWkVST3xOT0RFfE5PREVTfE5PTi1VTklDT0RFfE5PTi1VTklRVUV8Tk9UfE5QfE5TfE5VTEx8TlVNQkVSfE5VTU9GQ0hBUnxPfE9CSkVDVHxPQkpFQ1RTfE9CTElHQVRPUll8T0NDVVJSRU5DRXxPQ0NVUlJFTkNFU3xPQ0NVUlN8T0Z8T0ZGfE9GRlNFVHxPTEV8T058T05MWXxPUEVOfE9QVElPTnxPUFRJT05BTHxPUFRJT05TfE9SfE9SREVSfE9USEVSfE9USEVSU3xPVVR8T1VURVJ8T1VUUFVUfE9VVFBVVC1MRU5HVEh8T1ZFUkZMT1d8T1ZFUkxBWXxQQUNLfFBBQ0tBR0V8UEFEfFBBRERJTkd8UEFHRXxQQUdFU3xQQVJBTUVURVJ8UEFSQU1FVEVSLVRBQkxFfFBBUkFNRVRFUlN8UEFSVHxQQVJUSUFMTFl8UEFUVEVSTnxQRVJDRU5UQUdFfFBFUkZPUk18UEVSRk9STUlOR3xQRVJTT058UEZ8UEYtU1RBVFVTfFBJTkt8UExBQ0VTfFBPT0x8UE9TSVRJT058UE9TX0hJR0h8UE9TX0xPV3xQUkFHTUFTfFBSRUNPTVBJTEVEfFBSRUZFUlJFRHxQUkVTRVJWSU5HfFBSSU1BUll8UFJJTlR8UFJJTlQtQ09OVFJPTHxQUklPUklUWXxQUklWQVRFfFBST0NFRFVSRXxQUk9DRVNTfFBST0dSQU18UFJPUEVSVFl8UFJPVEVDVEVEfFBST1ZJREV8UFVCTElDfFBVU0hCVVRUT058UFVUfFFVRVVFLU9OTFl8UVVJQ0tJTkZPfFJBRElPQlVUVE9OfFJBSVNFfFJBSVNJTkd8UkFOR0V8UkFOR0VTfFJBV3xSRUFEfFJFQUQtT05MWXxSRUFERVJ8UkVDRUlWRXxSRUNFSVZFRHxSRUNFSVZFUnxSRUNFSVZJTkd8UkVEfFJFREVGSU5JVElPTnxSRURVQ0V8UkVEVUNFRHxSRUZ8UkVGRVJFTkNFfFJFRlJFU0h8UkVHRVh8UkVKRUNUfFJFTU9URXxSRU5BTUlOR3xSRVBMQUNFfFJFUExBQ0VNRU5UfFJFUExBQ0lOR3xSRVBPUlR8UkVRVUVTVHxSRVFVRVNURUR8UkVTRVJWRXxSRVNFVHxSRVNPTFVUSU9OfFJFU1BFQ1RJTkd8UkVTUE9OU0lCTEV8UkVTVUxUfFJFU1VMVFN8UkVTVU1BQkxFfFJFU1VNRXxSRVRSWXxSRVRVUk58UkVUVVJOQ09ERXxSRVRVUk5JTkd8UklHSFR8UklHSFQtSlVTVElGSUVEfFJJR0hUUExVU3xSSUdIVFNQQUNFfFJJU0t8Uk1DX0NPTU1VTklDQVRJT05fRkFJTFVSRXxSTUNfSU5WQUxJRF9TVEFUVVN8Uk1DX1NZU1RFTV9GQUlMVVJFfFJPTEV8Uk9MTEJBQ0t8Uk9VTkR8Uk9XU3xSVFRJfFJVTnxTQVB8U0FQLVNQT09MfFNBVklOR3xTQ0FMRV9QUkVTRVJWSU5HfFNDQUxFX1BSRVNFUlZJTkdfU0NJRU5USUZJQ3xTQ0FOfFNDSUVOVElGSUN8U0NJRU5USUZJQ19XSVRIX0xFQURJTkdfWkVST3xTQ1JFRU58U0NST0xMfFNDUk9MTC1CT1VOREFSWXxTQ1JPTExJTkd8U0VBUkNIfFNFQ09OREFSWXxTRUNPTkRTfFNFQ1RJT058U0VMRUNUfFNFTEVDVC1PUFRJT05TfFNFTEVDVElPTnxTRUxFQ1RJT04tU0NSRUVOfFNFTEVDVElPTi1TRVR8U0VMRUNUSU9OLVNFVFN8U0VMRUNUSU9OLVRBQkxFfFNFTEVDVElPTlN8U0VMRUNUT1J8U0VORHxTRVBBUkFURXxTRVBBUkFURUR8U0VUfFNIQVJFRHxTSElGVHxTSE9SVHxTSE9SVERVTVAtSUR8U0lHTnxTSUdOX0FTX1BPU1RGSVh8U0lNUExFfFNJTnxTSU5HTEV8U0lOSHxTSVpFfFNLSVB8U0tJUFBJTkd8U01BUlR8U09NRXxTT1JUfFNPUlRBQkxFfFNPUlRFRHxTT1VSQ0V8U1BBQ0V8U1BFQ0lGSUVEfFNQTElUfFNQT09MfFNQT1RTfFNRTHxTUUxTQ1JJUFR8U1FSVHxTVEFCTEV8U1RBTVB8U1RBTkRBUkR8U1RBUlQtT0YtU0VMRUNUSU9OfFNUQVJUSU5HfFNUQVRFfFNUQVRFTUVOVHxTVEFURU1FTlRTfFNUQVRJQ3xTVEFUSUNTfFNUQVRVU0lORk98U1RFUC1MT09QfFNUT1B8U1RSTEVOfFNUUlVDVFVSRXxTVFJVQ1RVUkVTfFNUWUxFfFNVQktFWXxTVUJNQVRDSEVTfFNVQk1JVHxTVUJST1VUSU5FfFNVQlNDUkVFTnxTVUJTVFJJTkd8U1VCVFJBQ1R8U1VCVFJBQ1QtQ09SUkVTUE9ORElOR3xTVUZGSVh8U1VNfFNVTU1BUll8U1VNTUlOR3xTVVBQTElFRHxTVVBQTFl8U1VQUFJFU1N8U1dJVENIfFNXSVRDSFNUQVRFU3xTWU1CT0x8U1lOQ1BPSU5UU3xTWU5UQVh8U1lOVEFYLUNIRUNLfFNZTlRBWC1UUkFDRXxTWVNURU0tQ0FMTHxTWVNURU0tRVhDRVBUSU9OU3xTWVNURU0tRVhJVHxUQUJ8VEFCQkVEfFRBQkxFfFRBQkxFU3xUQUJMRVZJRVd8VEFCU1RSSVB8VEFOfFRBTkh8VEFSR0VUfFRBU0t8VEFTS1N8VEVTVHxURVNUSU5HfFRFWFR8VEVYVFBPT0x8VEhFTnxUSFJPV3xUSU1FfFRJTUVTfFRJTUVTVEFNUHxUSU1FWk9ORXxUSVRMRXxUSVRMRS1MSU5FU3xUSVRMRUJBUnxUT3xUT0tFTklaQVRJT058VE9LRU5TfFRPUC1MSU5FU3xUT1AtT0YtUEFHRXxUUkFDRS1GSUxFfFRSQUNFLVRBQkxFfFRSQUlMSU5HfFRSQU5TQUNUSU9OfFRSQU5TRkVSfFRSQU5TRk9STUFUSU9OfFRSQU5TTEFURXxUUkFOU1BPUlRJTkd8VFJNQUN8VFJVTkN8VFJVTkNBVEV8VFJVTkNBVElPTnxUUll8VFlQRXxUWVBFLVBPT0x8VFlQRS1QT09MU3xUWVBFU3xVTElORXxVTkFTU0lHTnxVTkRFUnxVTklDT0RFfFVOSU9OfFVOSVFVRXxVTklUfFVOSVRfQ09OVkVSU0lPTnxVTklYfFVOUEFDS3xVTlRJTHxVTldJTkR8VVB8VVBEQVRFfFVQUEVSfFVTRVJ8VVNFUi1DT01NQU5EfFVTSU5HfFVURi04fFZBTElEfFZBTFVFfFZBTFVFLVJFUVVFU1R8VkFMVUVTfFZBUll8VkFSWUlOR3xWRVJJRklDQVRJT04tTUVTU0FHRXxWRVJTSU9OfFZJQXxWSUVXfFZJU0lCTEV8V0FJVHxXQVJOSU5HfFdIRU58V0hFTkVWRVJ8V0hFUkV8V0hJTEV8V0lEVEh8V0lORE9XfFdJTkRPV1N8V0lUSHxXSVRILUhFQURJTkd8V0lUSC1USVRMRXxXSVRIT1VUfFdPUkR8V09SS3xXUklURXxXUklURVJ8WHxYTUx8WE9SfFhTRHxYU1RSTEVOfFlFTExPV3xZRVN8WVlNTUREfFp8WkVST3xaT05FKSg/IVtcXHctXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdC8qIE51bWJlcnMgY2FuIGJlIG9ubHkgaW50ZWdlcnMuIERlY2ltYWwgb3IgSGV4IGFwcGVhciBvbmx5IGFzIHN0cmluZ3MgKi9cblx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0LyogT3BlcmF0b3JzIG11c3QgYWx3YXlzIGJlIHN1cnJvdW5kZWQgYnkgd2hpdGVzcGFjZSwgdGhleSBjYW5ub3QgYmUgcHV0XG5cdGFkamFjZW50IHRvIG9wZXJhbmRzLlxuXHQqL1xuXHQnb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhcXHMpKD86XFwqXFwqP3w8Wz0+XT98Pj0/fFxcPz18Wy0rXFwvPV0pKD89XFxzKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXFxzKSYmPyg/PVxccykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0LyogVGhlIG9mZmljaWFsIGVkaXRvciBoaWdobGlnaHRzICovXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQndG9rZW4tb3BlcmF0b3InOiBbe1xuXHRcdC8qIFNwZWNpYWwgb3BlcmF0b3JzIHVzZWQgdG8gYWNjZXNzIHN0cnVjdHVyZSBjb21wb25lbnRzLCBjbGFzcyBtZXRob2RzL2F0dHJpYnV0ZXMsIGV0Yy4gKi9cblx0XHRwYXR0ZXJuOiAvKFxcdykoPzotPj98PT58W358e31dKSg/PVxcdykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSwge1xuXHRcdC8qIFNwZWNpYWwgdG9rZW5zIHVzZWQgZG8gZGVsaW1pdCBzdHJpbmcgdGVtcGxhdGVzICovXG5cdFx0cGF0dGVybjogL1t8e31dLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9XSxcblx0J3B1bmN0dWF0aW9uJzogL1ssLjooKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvcmVSdWxlcyA9ICcoPzpBTFBIQXxCSVR8Q0hBUnxDUnxDUkxGfENUTHxESUdJVHxEUVVPVEV8SEVYRElHfEhUQUJ8TEZ8TFdTUHxPQ1RFVHxTUHxWQ0hBUnxXU1ApJztcblxuXHRQcmlzbS5sYW5ndWFnZXMuYWJuZiA9IHtcblx0XHQnY29tbWVudCc6IC87LiovLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86JVtpc10pP1wiW15cIlxcblxccl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eJVtpc10vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncmFuZ2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJSg/OmJbMDFdKy1bMDFdK3xkXFxkKy1cXGQrfHhbQS1GXFxkXSstW0EtRlxcZF0rKS9pLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQndGVybWluYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJSg/OmJbMDFdKyg/OlxcLlswMV0rKSp8ZFxcZCsoPzpcXC5cXGQrKSp8eFtBLUZcXGRdKyg/OlxcLltBLUZcXGRdKykqKS9pLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQncmVwZXRpdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OlxcZCpcXCpcXGQqfFxcZCspLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2RlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OlthLXpdW1xcdy1dKnw8W148Plxcclxcbl0qPikoPz1cXHMqPSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC88fD4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29yZS1ydWxlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoPzooXnxbXjxcXFxcdy1dKScgKyBjb3JlUnVsZXMgKyAnfDwnICsgY29yZVJ1bGVzICsgJz4pKD8hW1xcXFx3LV0pJywgJ2knKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogWydydWxlJywgJ2NvbnN0YW50J10sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzx8Pi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdydWxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFtePFxcdy1dKVthLXpdW1xcdy1dKnw8W148Plxcclxcbl0qPi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvPHw+L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzogLz1cXC8/fFxcLy8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXV0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFjdGlvbnNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8ZGVmYXVsdHxkZWxldGV8ZG98ZHluYW1pY3xlYWNofGVsc2V8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZvcnxmdW5jdGlvbnxnZXR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5jbHVkZXxpbnN0YW5jZW9mfGludGVyZmFjZXxpbnRlcm5hbHxpc3xuYW1lc3BhY2V8bmF0aXZlfG5ld3xudWxsfG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dXNlfHZhcnx2b2lkfHdoaWxlfHdpdGgpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXwoPzpbK1xcLSpcXC8lXl18JiY/fFxcfFxcfD98PDw/fD4+Pz4/fFshPV09Pyk9P3xbfj9AXS9cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmFjdGlvbnNjcmlwdFsnY2xhc3MtbmFtZSddLmFsaWFzID0gJ2Z1bmN0aW9uJztcblxuLy8gZG9lc24ndCB3b3JrIHdpdGggQVMgYmVjYXVzZSBBUyBpcyB0b28gY29tcGxleFxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5hY3Rpb25zY3JpcHRbJ3BhcmFtZXRlciddO1xuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5hY3Rpb25zY3JpcHRbJ2xpdGVyYWwtcHJvcGVydHknXTtcblxuaWYgKFByaXNtLmxhbmd1YWdlcy5tYXJrdXApIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYWN0aW9uc2NyaXB0JywgJ3N0cmluZycsIHtcblx0XHQneG1sJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLl0pPFxcLz9cXHcrKD86XFxzK1teXFxzPlxcLz1dKz0oXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwyKVteXFxcXF0pKlxcMikqXFxzKlxcLz8+Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9XG5cdH0pO1xufVxuO1xuUHJpc20ubGFuZ3VhZ2VzLmFkYSA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKi8sXG5cdCdzdHJpbmcnOiAvXCIoPzpcIlwifFteXCJcXHJcXGZcXG5dKSpcIi8sXG5cdCdudW1iZXInOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYlxcZCg/Ol8/XFxkKSojW1xcZEEtRl0oPzpfP1tcXGRBLUZdKSooPzpcXC5bXFxkQS1GXSg/Ol8/W1xcZEEtRl0pKik/Iyg/OkVbKy1dP1xcZCg/Ol8/XFxkKSopPy9pXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFxkKD86Xz9cXGQpKig/OlxcLlxcZCg/Ol8/XFxkKSopPyg/OkVbKy1dP1xcZCg/Ol8/XFxkKSopP1xcYi9pXG5cdFx0fVxuXHRdLFxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9cXGInXFx3Ky8sXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFib3J0fGFic3xhYnN0cmFjdHxhY2NlcHR8YWNjZXNzfGFsaWFzZWR8YWxsfGFuZHxhcnJheXxhdHxiZWdpbnxib2R5fGNhc2V8Y29uc3RhbnR8ZGVjbGFyZXxkZWxheXxkZWx0YXxkaWdpdHN8ZG98ZWxzZXxlbHNpZnxlbmR8ZW50cnl8ZXhjZXB0aW9ufGV4aXR8Zm9yfGZ1bmN0aW9ufGdlbmVyaWN8Z290b3xpZnxpbnxpbnRlcmZhY2V8aXN8bGltaXRlZHxsb29wfG1vZHxuZXd8bm90fG51bGx8b2Z8b3J8b3RoZXJzfG91dHxvdmVycmlkaW5nfHBhY2thZ2V8cHJhZ21hfHByaXZhdGV8cHJvY2VkdXJlfHByb3RlY3RlZHxyYWlzZXxyYW5nZXxyZWNvcmR8cmVtfHJlbmFtZXN8cmVxdWV1ZXxyZXR1cm58cmV2ZXJzZXxzZWxlY3R8c2VwYXJhdGV8c29tZXxzdWJ0eXBlfHN5bmNocm9uaXplZHx0YWdnZWR8dGFza3x0ZXJtaW5hdGV8dGhlbnx0eXBlfHVudGlsfHVzZXx3aGVufHdoaWxlfHdpdGh8eG9yKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3w9Pj98Oj18XFwvPT98XFwqXFwqP3xbJistXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9cXC5cXC4/fFssOygpOl0vLFxuXHQnY2hhcic6IC8nLicvLFxuXHQndmFyaWFibGUnOiAvXFxiW2Etel0oPzpcXHcpKlxcYi9pXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFnZGEgPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFx7LVtcXHNcXFNdKj8oPzotXFx9fCQpfC0tLiovLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHJcXG5cIl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVx1Mjk4M1x1Mjk4NC47QF0vLFxuXHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpkYXRhfHJlY29yZCkgKylcXFMrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/IVxccylbXjpcXHJcXG5dKyg/PTopL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyheXFxzKnxcXHMpKD86Wz18Olx1MjIwMFx1MjE5Mlx1MDNCQlxcXFw/X118LT4pKD89XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86U2V0fGFic3RyYWN0fGNvbnN0cnVjdG9yfGRhdGF8ZXRhLWVxdWFsaXR5fGZpZWxkfGZvcmFsbHxoaWRpbmd8aW1wb3J0fGlufGluZHVjdGl2ZXxpbmZpeHxpbmZpeGx8aW5maXhyfGluc3RhbmNlfGxldHxtYWNyb3xtb2R1bGV8bXV0dWFsfG5vLWV0YS1lcXVhbGl0eXxvcGVufG92ZXJsYXB8cGF0dGVybnxwb3N0dWxhdGV8cHJpbWl0aXZlfHByaXZhdGV8cHVibGljfHF1b3RlfHF1b3RlQ29udGV4dHxxdW90ZUdvYWx8cXVvdGVUZXJtfHJlY29yZHxyZW5hbWluZ3xyZXdyaXRlfHN5bnRheHx0YWN0aWN8dW5xdW90ZXx1bnF1b3RlRGVjbHx1bnF1b3RlRGVmfHVzaW5nfHZhcmlhYmxlfHdoZXJlfHdpdGgpXFxiLyxcblx0fTtcbn0oUHJpc20pKTtcblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9BTC9ibG9iL21hc3Rlci9ncmFtbWFyL2Fsc3ludGF4LnRtbGFuZ3VhZ2VcblxuUHJpc20ubGFuZ3VhZ2VzLmFsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OicnfFteJ1xcclxcbl0pKicoPyEnKXxcIig/OlwiXCJ8W15cIlxcclxcbl0pKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZXZlbnR8cHJvY2VkdXJlfHRyaWdnZXIpXFxzK3woPzpefFteLl0pXFwuXFxzKilbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC8vIGtleXdvcmRzXG5cdFx0L1xcYig/OmFycmF5fGFzc2VydGVycm9yfGJlZ2lufGJyZWFrfGNhc2V8ZG98ZG93bnRvfGVsc2V8ZW5kfGV2ZW50fGV4aXR8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258aWZ8aW1wbGVtZW50c3xpbnxpbmRhdGFzZXR8aW50ZXJmYWNlfGludGVybmFsfGxvY2FsfG9mfHByb2NlZHVyZXxwcm9ncmFtfHByb3RlY3RlZHxyZXBlYXR8cnVub25jbGllbnR8c2VjdXJpdHlmaWx0ZXJpbmd8c3VwcHJlc3NkaXNwb3NlfHRlbXBvcmFyeXx0aGVufHRvfHRyaWdnZXJ8dW50aWx8dmFyfHdoaWxlfHdpdGh8d2l0aGV2ZW50cylcXGIvaSxcblx0XHQvLyBvYmplY3RzIGFuZCBtZXRhZGF0YSB0aGF0IGFyZSB1c2VkIGxpa2Uga2V5d29yZHNcblx0XHQvXFxiKD86YWN0aW9ufGFjdGlvbnN8YWRkYWZ0ZXJ8YWRkYmVmb3JlfGFkZGZpcnN0fGFkZGxhc3R8YXJlYXxhc3NlbWJseXxjaGFydHBhcnR8Y29kZXVuaXR8Y29sdW1ufGNvbnRyb2xhZGRpbnxjdWVncm91cHxjdXN0b21pemVzfGRhdGFpdGVtfGRhdGFzZXR8ZG90bmV0fGVsZW1lbnRzfGVudW18ZW51bWV4dGVuc2lvbnxleHRlbmRzfGZpZWxkfGZpZWxkYXR0cmlidXRlfGZpZWxkZWxlbWVudHxmaWVsZGdyb3VwfGZpZWxkZ3JvdXBzfGZpZWxkc3xmaWx0ZXJ8Zml4ZWR8Z3JpZHxncm91cHxrZXl8a2V5c3xsYWJlbHxsYWJlbHN8bGF5b3V0fG1vZGlmeXxtb3ZlYWZ0ZXJ8bW92ZWJlZm9yZXxtb3ZlZmlyc3R8bW92ZWxhc3R8cGFnZXxwYWdlY3VzdG9taXphdGlvbnxwYWdlZXh0ZW5zaW9ufHBhcnR8cHJvZmlsZXxxdWVyeXxyZXBlYXRlcnxyZXBvcnR8cmVxdWVzdHBhZ2V8c2NoZW1hfHNlcGFyYXRvcnxzeXN0ZW1wYXJ0fHRhYmxlfHRhYmxlZWxlbWVudHx0YWJsZWV4dGVuc2lvbnx0ZXh0YXR0cmlidXRlfHRleHRlbGVtZW50fHR5cGV8dXNlcmNvbnRyb2x8dmFsdWV8eG1scG9ydClcXGIvaVxuXHRdLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZl0rfCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8pKD86RnxMTD98VSg/OkxMPyk/KT9cXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J3ZhcmlhYmxlJzogL1xcYig/OkN1cnIoPzpGaWVsZE5vfFBhZ2V8UmVwb3J0KXx4P1JlY3xSZXF1ZXN0T3B0aW9uc1BhZ2UpXFxiLyxcblx0J2NsYXNzLW5hbWUnOiAvXFxiKD86YXV0b21hdGlvbnxiaWdpbnRlZ2VyfGJpZ3RleHR8YmxvYnxib29sZWFufGJ5dGV8Y2hhcnxjbGllbnR0eXBlfGNvZGV8Y29tcGxldGlvbnRyaWdnZXJlcnJvcmxldmVsfGNvbm5lY3Rpb250eXBlfGRhdGFiYXNlfGRhdGFjbGFzc2lmaWNhdGlvbnxkYXRhc2NvcGV8ZGF0ZXxkYXRlZm9ybXVsYXxkYXRldGltZXxkZWNpbWFsfGRlZmF1bHRsYXlvdXR8ZGlhbG9nfGRpY3Rpb25hcnl8ZG90bmV0YXNzZW1ibHl8ZG90bmV0dHlwZWRlY2xhcmF0aW9ufGR1cmF0aW9ufGVycm9yaW5mb3xlcnJvcnR5cGV8ZXhlY3V0aW9uY29udGV4dHxleGVjdXRpb25tb2RlfGZpZWxkY2xhc3N8ZmllbGRyZWZ8ZmllbGR0eXBlfGZpbGV8ZmlsdGVycGFnZWJ1aWxkZXJ8Z3VpZHxodHRwY2xpZW50fGh0dHBjb250ZW50fGh0dHBoZWFkZXJzfGh0dHByZXF1ZXN0bWVzc2FnZXxodHRwcmVzcG9uc2VtZXNzYWdlfGluc3RyZWFtfGludGVnZXJ8am9rZXJ8anNvbmFycmF5fGpzb25vYmplY3R8anNvbnRva2VufGpzb252YWx1ZXxrZXlyZWZ8bGlzdHxtb2R1bGVkZXBlbmRlbmN5aW5mb3xtb2R1bGVpbmZvfG5vbmV8bm90aWZpY2F0aW9ufG5vdGlmaWNhdGlvbnNjb3BlfG9iamVjdHR5cGV8b3B0aW9ufG91dHN0cmVhbXxwYWdlcmVzdWx0fHJlY29yZHxyZWNvcmRpZHxyZWNvcmRyZWZ8cmVwb3J0Zm9ybWF0fHNlY3VyaXR5ZmlsdGVyfHNlc3Npb25zZXR0aW5nc3x0YWJsZWNvbm5lY3Rpb250eXBlfHRhYmxlZmlsdGVyfHRlc3RhY3Rpb258dGVzdGZpZWxkfHRlc3RmaWx0ZXJmaWVsZHx0ZXN0cGFnZXx0ZXN0cGVybWlzc2lvbnN8dGVzdHJlcXVlc3RwYWdlfHRleHR8dGV4dGJ1aWxkZXJ8dGV4dGNvbnN0fHRleHRlbmNvZGluZ3x0aW1lfHRyYW5zYWN0aW9ubW9kZWx8dHJhbnNhY3Rpb250eXBlfHZhcmlhbnR8dmVyYm9zaXR5fHZlcnNpb258dmlld3x2aWV3c3x3ZWJzZXJ2aWNlYWN0aW9uY29udGV4dHx3ZWJzZXJ2aWNlYWN0aW9ucmVzdWx0Y29kZXx4bWxhdHRyaWJ1dGV8eG1sYXR0cmlidXRlY29sbGVjdGlvbnx4bWxjZGF0YXx4bWxjb21tZW50fHhtbGRlY2xhcmF0aW9ufHhtbGRvY3VtZW50fHhtbGRvY3VtZW50dHlwZXx4bWxlbGVtZW50fHhtbG5hbWVzcGFjZW1hbmFnZXJ8eG1sbmFtZXRhYmxlfHhtbG5vZGV8eG1sbm9kZWxpc3R8eG1scHJvY2Vzc2luZ2luc3RydWN0aW9ufHhtbHJlYWRvcHRpb25zfHhtbHRleHR8eG1sd3JpdGVvcHRpb25zKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvXFwuXFwufDpbPTpdfFstKyovXT0/fDw+fFs8Pl09P3w9fFxcYig/OmFuZHxkaXZ8bW9kfG5vdHxvcnx4b3IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fTouOyxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFudGxyNCA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyYWN0ZXItY2xhc3MnOiB7XG5cdFx0cGF0dGVybjogL1xcWyg/OlxcXFwufFteXFxcXFxcXVxcclxcbl0pKlxcXS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncmVnZXgnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3JhbmdlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFteW118KD86XnxbXlxcXFxdKSg/OlxcXFxcXFxcKSpcXFxcXFxbKS0oPyFcXF0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnZXNjYXBlJzogL1xcXFwoPzp1KD86W2EtZkEtRlxcZF17NH18XFx7W2EtZkEtRlxcZF0rXFx9KXxbcFBdXFx7Wz1cXHctXStcXH18W15cXHJcXG51cFBdKS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXV0vXG5cdFx0fVxuXHR9LFxuXHQnYWN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkqXFx9KSpcXH0vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHQvLyB0aGlzIG1pZ2h0IGJlIEMsIEMrKywgUHl0aG9uLCBKYXZhLCBDIywgb3IgYW55IG90aGVyIGxhbmd1YWdlIEFOVExSNCBjb21waWxlcyB0b1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxceylbXFxzXFxTXSsoPz1cXH0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9be31dL1xuXHRcdH1cblx0fSxcblx0J2NvbW1hbmQnOiB7XG5cdFx0cGF0dGVybjogLygtPlxccyooPyFcXHMpKSg/OlxccyooPzosXFxzKik/XFxiW2Etel1cXHcqKD86XFxzKlxcKFteKClcXHJcXG5dKlxcKSk/KSsoPz1cXHMqOykvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXHMqKD86WywoXXwkKSkvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssKCldL1xuXHRcdH1cblx0fSxcblx0J2Fubm90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0BcXHcrKD86OjpcXHcrKSovLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC8jWyBcXHRdKlxcdysvLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmNhdGNofGNoYW5uZWxzfGZpbmFsbHl8ZnJhZ21lbnR8Z3JhbW1hcnxpbXBvcnR8bGV4ZXJ8bG9jYWxzfG1vZGV8b3B0aW9uc3xwYXJzZXJ8cmV0dXJuc3x0aHJvd3N8dG9rZW5zKVxcYi8sXG5cdCdkZWZpbml0aW9uJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPz1cXHMqOikvLFxuXHRcdFx0YWxpYXM6IFsncnVsZScsICdjbGFzcy1uYW1lJ11cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdyooPz1cXHMqOikvLFxuXHRcdFx0YWxpYXM6IFsndG9rZW4nLCAnY29uc3RhbnQnXVxuXHRcdH0sXG5cdF0sXG5cdCdjb25zdGFudCc6IC9cXGJbQS1aXVtBLVpfXSpcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwuXFwufC0+fFt8fl18WyorP11cXD8/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1s7OigpPV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZzQgPSBQcmlzbS5sYW5ndWFnZXMuYW50bHI0O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXBhY2hlY29uZiA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J2RpcmVjdGl2ZS1pbmxpbmUnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKilcXGIoPzpBY2NlcHRGaWx0ZXJ8QWNjZXB0UGF0aEluZm98QWNjZXNzRmlsZU5hbWV8QWN0aW9ufEFkZCg/OkFsdHxBbHRCeUVuY29kaW5nfEFsdEJ5VHlwZXxDaGFyc2V0fERlZmF1bHRDaGFyc2V0fERlc2NyaXB0aW9ufEVuY29kaW5nfEhhbmRsZXJ8SWNvbnxJY29uQnlFbmNvZGluZ3xJY29uQnlUeXBlfElucHV0RmlsdGVyfExhbmd1YWdlfE1vZHVsZUluZm98T3V0cHV0RmlsdGVyfE91dHB1dEZpbHRlckJ5VHlwZXxUeXBlKXxBbGlhc3xBbGlhc01hdGNofEFsbG93KD86Q09OTkVDVHxFbmNvZGVkU2xhc2hlc3xNZXRob2RzfE92ZXJyaWRlfE92ZXJyaWRlTGlzdCk/fEFub255bW91cyg/Ol9Mb2dFbWFpbHxfTXVzdEdpdmVFbWFpbHxfTm9Vc2VySUR8X1ZlcmlmeUVtYWlsKT98QXN5bmNSZXF1ZXN0V29ya2VyRmFjdG9yfEF1dGgoPzpCYXNpY0F1dGhvcml0YXRpdmV8QmFzaWNGYWtlfEJhc2ljUHJvdmlkZXJ8QmFzaWNVc2VEaWdlc3RBbGdvcml0aG18REJEVXNlclBXUXVlcnl8REJEVXNlclJlYWxtUXVlcnl8REJNR3JvdXBGaWxlfERCTVR5cGV8REJNVXNlckZpbGV8RGlnZXN0KD86QWxnb3JpdGhtfERvbWFpbnxOb25jZUxpZmV0aW1lfFByb3ZpZGVyfFFvcHxTaG1lbVNpemUpfEZvcm0oPzpBdXRob3JpdGF0aXZlfEJvZHl8RGlzYWJsZU5vU3RvcmV8RmFrZUJhc2ljQXV0aHxMb2NhdGlvbnxMb2dpblJlcXVpcmVkTG9jYXRpb258TG9naW5TdWNjZXNzTG9jYXRpb258TG9nb3V0TG9jYXRpb258TWV0aG9kfE1pbWV0eXBlfFBhc3N3b3JkfFByb3ZpZGVyfFNpdGVQYXNzcGhyYXNlfFNpemV8VXNlcm5hbWUpfEdyb3VwRmlsZXxMREFQKD86QXV0aG9yaXplUHJlZml4fEJpbmRBdXRob3JpdGF0aXZlfEJpbmRETnxCaW5kUGFzc3dvcmR8Q2hhcnNldENvbmZpZ3xDb21wYXJlQXNVc2VyfENvbXBhcmVETk9uU2VydmVyfERlcmVmZXJlbmNlQWxpYXNlc3xHcm91cEF0dHJpYnV0ZXxHcm91cEF0dHJpYnV0ZUlzRE58SW5pdGlhbEJpbmRBc1VzZXJ8SW5pdGlhbEJpbmRQYXR0ZXJufE1heFN1Ykdyb3VwRGVwdGh8UmVtb3RlVXNlckF0dHJpYnV0ZXxSZW1vdGVVc2VySXNETnxTZWFyY2hBc1VzZXJ8U3ViR3JvdXBBdHRyaWJ1dGV8U3ViR3JvdXBDbGFzc3xVcmwpfE1lcmdpbmd8TmFtZXxuQ2FjaGUoPzpDb250ZXh0fEVuYWJsZXxQcm92aWRlRm9yfFNPQ2FjaGV8VGltZW91dCl8bnpGY2dpQ2hlY2tBdXRoblByb3ZpZGVyfG56RmNnaURlZmluZVByb3ZpZGVyfFR5cGV8VXNlckZpbGV8ekRCRExvZ2luVG9SZWZlcmVyfHpEQkRRdWVyeXx6REJEUmVkaXJlY3RRdWVyeXx6REJNVHlwZXx6U2VuZEZvcmJpZGRlbk9uRmFpbHVyZSl8QmFsYW5jZXJHcm93dGh8QmFsYW5jZXJJbmhlcml0fEJhbGFuY2VyTWVtYmVyfEJhbGFuY2VyUGVyc2lzdHxCcm93c2VyTWF0Y2h8QnJvd3Nlck1hdGNoTm9DYXNlfEJ1ZmZlcmVkTG9nc3xCdWZmZXJTaXplfENhY2hlKD86RGVmYXVsdEV4cGlyZXxEZXRhaWxIZWFkZXJ8RGlyTGVuZ3RofERpckxldmVsc3xEaXNhYmxlfEVuYWJsZXxGaWxlfEhlYWRlcnxJZ25vcmVDYWNoZUNvbnRyb2x8SWdub3JlSGVhZGVyc3xJZ25vcmVOb0xhc3RNb2R8SWdub3JlUXVlcnlTdHJpbmd8SWdub3JlVVJMU2Vzc2lvbklkZW50aWZpZXJzfEtleUJhc2VVUkx8TGFzdE1vZGlmaWVkRmFjdG9yfExvY2t8TG9ja01heEFnZXxMb2NrUGF0aHxNYXhFeHBpcmV8TWF4RmlsZVNpemV8TWluRXhwaXJlfE1pbkZpbGVTaXplfE5lZ290aWF0ZWREb2NzfFF1aWNrSGFuZGxlcnxSZWFkU2l6ZXxSZWFkVGltZXxSb290fFNvY2FjaGUoPzpNYXhTaXplfE1heFRpbWV8TWluVGltZXxSZWFkU2l6ZXxSZWFkVGltZSk/fFN0YWxlT25FcnJvcnxTdG9yZUV4cGlyZWR8U3RvcmVOb1N0b3JlfFN0b3JlUHJpdmF0ZSl8Q0dJRFNjcmlwdFRpbWVvdXR8Q0dJTWFwRXh0ZW5zaW9ufENoYXJzZXREZWZhdWx0fENoYXJzZXRPcHRpb25zfENoYXJzZXRTb3VyY2VFbmN8Q2hlY2tDYXNlT25seXxDaGVja1NwZWxsaW5nfENocm9vdERpcnxDb250ZW50RGlnZXN0fENvb2tpZURvbWFpbnxDb29raWVFeHBpcmVzfENvb2tpZU5hbWV8Q29va2llU3R5bGV8Q29va2llVHJhY2tpbmd8Q29yZUR1bXBEaXJlY3Rvcnl8Q3VzdG9tTG9nfERhdnxEYXZEZXB0aEluZmluaXR5fERhdkdlbmVyaWNMb2NrREJ8RGF2TG9ja0RCfERhdk1pblRpbWVvdXR8REJERXhwdGltZXxEQkRJbml0U1FMfERCREtlZXB8REJETWF4fERCRE1pbnxEQkRQYXJhbXN8REJEUGVyc2lzdHxEQkRQcmVwYXJlU1FMfERCRHJpdmVyfERlZmF1bHRJY29ufERlZmF1bHRMYW5ndWFnZXxEZWZhdWx0UnVudGltZURpcnxEZWZhdWx0VHlwZXxEZWZpbmV8RGVmbGF0ZSg/OkJ1ZmZlclNpemV8Q29tcHJlc3Npb25MZXZlbHxGaWx0ZXJOb3RlfEluZmxhdGVMaW1pdFJlcXVlc3RCb2R5fEluZmxhdGVSYXRpbyg/OkJ1cnN0fExpbWl0KXxNZW1MZXZlbHxXaW5kb3dTaXplKXxEZW55fERpcmVjdG9yeUNoZWNrSGFuZGxlcnxEaXJlY3RvcnlJbmRleHxEaXJlY3RvcnlJbmRleFJlZGlyZWN0fERpcmVjdG9yeVNsYXNofERvY3VtZW50Um9vdHxEVHJhY2VQcml2aWxlZ2VzfER1bXBJT0lucHV0fER1bXBJT091dHB1dHxFbmFibGVFeGNlcHRpb25Ib29rfEVuYWJsZU1NQVB8RW5hYmxlU2VuZGZpbGV8RXJyb3J8RXJyb3JEb2N1bWVudHxFcnJvckxvZ3xFcnJvckxvZ0Zvcm1hdHxFeGFtcGxlfEV4cGlyZXNBY3RpdmV8RXhwaXJlc0J5VHlwZXxFeHBpcmVzRGVmYXVsdHxFeHRlbmRlZFN0YXR1c3xFeHRGaWx0ZXJEZWZpbmV8RXh0RmlsdGVyT3B0aW9uc3xGYWxsYmFja1Jlc291cmNlfEZpbGVFVGFnfEZpbHRlckNoYWlufEZpbHRlckRlY2xhcmV8RmlsdGVyUHJvdG9jb2x8RmlsdGVyUHJvdmlkZXJ8RmlsdGVyVHJhY2V8Rm9yY2VMYW5ndWFnZVByaW9yaXR5fEZvcmNlVHlwZXxGb3JlbnNpY0xvZ3xHcHJvZkRpcnxHcmFjZWZ1bFNodXRkb3duVGltZW91dHxHcm91cHxIZWFkZXJ8SGVhZGVyTmFtZXxIZWFydGJlYXQoPzpBZGRyZXNzfExpc3RlbnxNYXhTZXJ2ZXJzfFN0b3JhZ2UpfEhvc3RuYW1lTG9va3Vwc3xJZGVudGl0eUNoZWNrfElkZW50aXR5Q2hlY2tUaW1lb3V0fEltYXBCYXNlfEltYXBEZWZhdWx0fEltYXBNZW51fEluY2x1ZGV8SW5jbHVkZU9wdGlvbmFsfEluZGV4KD86SGVhZEluc2VydHxJZ25vcmV8SWdub3JlUmVzZXR8T3B0aW9uc3xPcmRlckRlZmF1bHR8U3R5bGVTaGVldCl8SW5wdXRTZWR8SVNBUEkoPzpBcHBlbmRMb2dUb0Vycm9yc3xBcHBlbmRMb2dUb1F1ZXJ5fENhY2hlRmlsZXxGYWtlQXN5bmN8TG9nTm90U3VwcG9ydGVkfFJlYWRBaGVhZEJ1ZmZlcil8S2VlcEFsaXZlfEtlZXBBbGl2ZVRpbWVvdXR8S2VwdEJvZHlTaXplfExhbmd1YWdlUHJpb3JpdHl8TERBUCg/OkNhY2hlRW50cmllc3xDYWNoZVRUTHxDb25uZWN0aW9uUG9vbFRUTHxDb25uZWN0aW9uVGltZW91dHxMaWJyYXJ5RGVidWd8T3BDYWNoZUVudHJpZXN8T3BDYWNoZVRUTHxSZWZlcnJhbEhvcExpbWl0fFJlZmVycmFsc3xSZXRyaWVzfFJldHJ5RGVsYXl8U2hhcmVkQ2FjaGVGaWxlfFNoYXJlZENhY2hlU2l6ZXxUaW1lb3V0fFRydXN0ZWRDbGllbnRDZXJ0fFRydXN0ZWRHbG9iYWxDZXJ0fFRydXN0ZWRNb2RlfFZlcmlmeVNlcnZlckNlcnQpfExpbWl0KD86SW50ZXJuYWxSZWN1cnNpb258UmVxdWVzdCg/OkJvZHl8RmllbGRzfEZpZWxkU2l6ZXxMaW5lKXxYTUxSZXF1ZXN0Qm9keSl8TGlzdGVufExpc3RlbkJhY2tMb2d8TG9hZEZpbGV8TG9hZE1vZHVsZXxMb2dGb3JtYXR8TG9nTGV2ZWx8TG9nTWVzc2FnZXxMdWFBdXRoelByb3ZpZGVyfEx1YUNvZGVDYWNoZXxMdWEoPzpIb29rKD86QWNjZXNzQ2hlY2tlcnxBdXRoQ2hlY2tlcnxDaGVja1VzZXJJRHxGaXh1cHN8SW5zZXJ0RmlsdGVyfExvZ3xNYXBUb1N0b3JhZ2V8VHJhbnNsYXRlTmFtZXxUeXBlQ2hlY2tlcil8SW5oZXJpdHxJbnB1dEZpbHRlcnxNYXBIYW5kbGVyfE91dHB1dEZpbHRlcnxQYWNrYWdlQ1BhdGh8UGFja2FnZVBhdGh8UXVpY2tIYW5kbGVyfFJvb3R8U2NvcGUpfE1heCg/OkNvbm5lY3Rpb25zUGVyQ2hpbGR8S2VlcEFsaXZlUmVxdWVzdHN8TWVtRnJlZXxSYW5nZU92ZXJsYXBzfFJhbmdlUmV2ZXJzYWxzfFJhbmdlc3xSZXF1ZXN0V29ya2Vyc3xTcGFyZVNlcnZlcnN8U3BhcmVUaHJlYWRzfFRocmVhZHMpfE1lcmdlVHJhaWxlcnN8TWV0YURpcnxNZXRhRmlsZXN8TWV0YVN1ZmZpeHxNaW1lTWFnaWNGaWxlfE1pblNwYXJlU2VydmVyc3xNaW5TcGFyZVRocmVhZHN8TU1hcEZpbGV8TW9kZW1TdGFuZGFyZHxNb2RNaW1lVXNlUGF0aEluZm98TXVsdGl2aWV3c01hdGNofE11dGV4fE5hbWVWaXJ0dWFsSG9zdHxOb1Byb3h5fE5XU1NMVHJ1c3RlZENlcnRzfE5XU1NMVXBncmFkZWFibGV8T3B0aW9uc3xPcmRlcnxPdXRwdXRTZWR8UGFzc0VudnxQaWRGaWxlfFByaXZpbGVnZXNNb2RlfFByb3RvY29sfFByb3RvY29sRWNob3xQcm94eSg/OkFkZEhlYWRlcnN8QmFkSGVhZGVyfEJsb2NrfERvbWFpbnxFcnJvck92ZXJyaWRlfEV4cHJlc3NEQk1GaWxlfEV4cHJlc3NEQk1UeXBlfEV4cHJlc3NFbmFibGV8RnRwRGlyQ2hhcnNldHxGdHBFc2NhcGVXaWxkY2FyZHN8RnRwTGlzdE9uV2lsZGNhcmR8SFRNTCg/OkJ1ZlNpemV8Q2hhcnNldE91dHxEb2NUeXBlfEVuYWJsZXxFdmVudHN8RXh0ZW5kZWR8Rml4dXBzfEludGVycHxMaW5rc3xNZXRhfFN0cmlwQ29tbWVudHN8VVJMTWFwKXxJT0J1ZmZlclNpemV8TWF4Rm9yd2FyZHN8UGFzcyg/OkluaGVyaXR8SW50ZXJwb2xhdGVFbnZ8TWF0Y2h8UmV2ZXJzZXxSZXZlcnNlQ29va2llRG9tYWlufFJldmVyc2VDb29raWVQYXRoKT98UHJlc2VydmVIb3N0fFJlY2VpdmVCdWZmZXJTaXplfFJlbW90ZXxSZW1vdGVNYXRjaHxSZXF1ZXN0c3xTQ0dJSW50ZXJuYWxSZWRpcmVjdHxTQ0dJU2VuZGZpbGV8U2V0fFNvdXJjZUFkZHJlc3N8U3RhdHVzfFRpbWVvdXR8VmlhKXxSZWFkbWVOYW1lfFJlY2VpdmVCdWZmZXJTaXplfFJlZGlyZWN0fFJlZGlyZWN0TWF0Y2h8UmVkaXJlY3RQZXJtYW5lbnR8UmVkaXJlY3RUZW1wfFJlZmxlY3RvckhlYWRlcnxSZW1vdGVJUCg/OkhlYWRlcnxJbnRlcm5hbFByb3h5fEludGVybmFsUHJveHlMaXN0fFByb3hpZXNIZWFkZXJ8VHJ1c3RlZFByb3h5fFRydXN0ZWRQcm94eUxpc3QpfFJlbW92ZUNoYXJzZXR8UmVtb3ZlRW5jb2Rpbmd8UmVtb3ZlSGFuZGxlcnxSZW1vdmVJbnB1dEZpbHRlcnxSZW1vdmVMYW5ndWFnZXxSZW1vdmVPdXRwdXRGaWx0ZXJ8UmVtb3ZlVHlwZXxSZXF1ZXN0SGVhZGVyfFJlcXVlc3RSZWFkVGltZW91dHxSZXF1aXJlfFJld3JpdGUoPzpCYXNlfENvbmR8RW5naW5lfE1hcHxPcHRpb25zfFJ1bGUpfFJMaW1pdENQVXxSTGltaXRNRU18UkxpbWl0TlBST0N8U2F0aXNmeXxTY29yZUJvYXJkRmlsZXxTY3JpcHQoPzpBbGlhc3xBbGlhc01hdGNofEludGVycHJldGVyU291cmNlfExvZ3xMb2dCdWZmZXJ8TG9nTGVuZ3RofFNvY2spP3xTZWN1cmVMaXN0ZW58U2VlUmVxdWVzdFRhaWx8U2VuZEJ1ZmZlclNpemV8U2VydmVyKD86QWRtaW58QWxpYXN8TGltaXR8TmFtZXxQYXRofFJvb3R8U2lnbmF0dXJlfFRva2Vucyl8U2Vzc2lvbig/OkNvb2tpZSg/Ok5hbWV8TmFtZTJ8UmVtb3ZlKXxDcnlwdG8oPzpDaXBoZXJ8RHJpdmVyfFBhc3NwaHJhc2V8UGFzc3BocmFzZUZpbGUpfERCRCg/OkNvb2tpZU5hbWV8Q29va2llTmFtZTJ8Q29va2llUmVtb3ZlfERlbGV0ZUxhYmVsfEluc2VydExhYmVsfFBlclVzZXJ8U2VsZWN0TGFiZWx8VXBkYXRlTGFiZWwpfEVudnxFeGNsdWRlfEhlYWRlcnxJbmNsdWRlfE1heEFnZSk/fFNldEVudnxTZXRFbnZJZnxTZXRFbnZJZkV4cHJ8U2V0RW52SWZOb0Nhc2V8U2V0SGFuZGxlcnxTZXRJbnB1dEZpbHRlcnxTZXRPdXRwdXRGaWx0ZXJ8U1NJRW5kVGFnfFNTSUVycm9yTXNnfFNTSUVUYWd8U1NJTGFzdE1vZGlmaWVkfFNTSUxlZ2FjeUV4cHJQYXJzZXJ8U1NJU3RhcnRUYWd8U1NJVGltZUZvcm1hdHxTU0lVbmRlZmluZWRFY2hvfFNTTCg/OkNBQ2VydGlmaWNhdGVGaWxlfENBQ2VydGlmaWNhdGVQYXRofENBRE5SZXF1ZXN0RmlsZXxDQUROUmVxdWVzdFBhdGh8Q0FSZXZvY2F0aW9uQ2hlY2t8Q0FSZXZvY2F0aW9uRmlsZXxDQVJldm9jYXRpb25QYXRofENlcnRpZmljYXRlQ2hhaW5GaWxlfENlcnRpZmljYXRlRmlsZXxDZXJ0aWZpY2F0ZUtleUZpbGV8Q2lwaGVyU3VpdGV8Q29tcHJlc3Npb258Q3J5cHRvRGV2aWNlfEVuZ2luZXxGSVBTfEhvbm9yQ2lwaGVyT3JkZXJ8SW5zZWN1cmVSZW5lZ290aWF0aW9ufE9DU1AoPzpEZWZhdWx0UmVzcG9uZGVyfEVuYWJsZXxPdmVycmlkZVJlc3BvbmRlcnxSZXNwb25kZXJUaW1lb3V0fFJlc3BvbnNlTWF4QWdlfFJlc3BvbnNlVGltZVNrZXd8VXNlUmVxdWVzdE5vbmNlKXxPcGVuU1NMQ29uZkNtZHxPcHRpb25zfFBhc3NQaHJhc2VEaWFsb2d8UHJvdG9jb2x8UHJveHkoPzpDQUNlcnRpZmljYXRlRmlsZXxDQUNlcnRpZmljYXRlUGF0aHxDQVJldm9jYXRpb24oPzpDaGVja3xGaWxlfFBhdGgpfENoZWNrUGVlcig/OkNOfEV4cGlyZXxOYW1lKXxDaXBoZXJTdWl0ZXxFbmdpbmV8TWFjaGluZUNlcnRpZmljYXRlKD86Q2hhaW5GaWxlfEZpbGV8UGF0aCl8UHJvdG9jb2x8VmVyaWZ5fFZlcmlmeURlcHRoKXxSYW5kb21TZWVkfFJlbmVnQnVmZmVyU2l6ZXxSZXF1aXJlfFJlcXVpcmVTU0x8U2Vzc2lvbig/OkNhY2hlfENhY2hlVGltZW91dHxUaWNrZXRLZXlGaWxlfFRpY2tldHMpfFNSUFVua25vd25Vc2VyU2VlZHxTUlBWZXJpZmllckZpbGV8U3RhcGxpbmcoPzpDYWNoZXxFcnJvckNhY2hlVGltZW91dHxGYWtlVHJ5TGF0ZXJ8Rm9yY2VVUkx8UmVzcG9uZGVyVGltZW91dHxSZXNwb25zZU1heEFnZXxSZXNwb25zZVRpbWVTa2V3fFJldHVyblJlc3BvbmRlckVycm9yc3xTdGFuZGFyZENhY2hlVGltZW91dCl8U3RyaWN0U05JVkhvc3RDaGVja3xVc2VyTmFtZXxVc2VTdGFwbGluZ3xWZXJpZnlDbGllbnR8VmVyaWZ5RGVwdGgpfFN0YXJ0U2VydmVyc3xTdGFydFRocmVhZHN8U3Vic3RpdHV0ZXxTdWV4ZWN8U3VleGVjVXNlckdyb3VwfFRocmVhZExpbWl0fFRocmVhZHNQZXJDaGlsZHxUaHJlYWRTdGFja1NpemV8VGltZU91dHxUcmFjZUVuYWJsZXxUcmFuc2ZlckxvZ3xUeXBlc0NvbmZpZ3xVbkRlZmluZXxVbmRlZk1hY3JvfFVuc2V0RW52fFVzZXxVc2VDYW5vbmljYWxOYW1lfFVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydHxVc2VyfFVzZXJEaXJ8Vkhvc3RDR0lNb2RlfFZIb3N0Q0dJUHJpdnN8Vkhvc3RHcm91cHxWSG9zdFByaXZzfFZIb3N0U2VjdXJlfFZIb3N0VXNlcnxWaXJ0dWFsKD86RG9jdW1lbnRSb290fFNjcmlwdEFsaWFzKSg/OklQKT98V2F0Y2hkb2dJbnRlcnZhbHxYQml0SGFja3x4bWwyRW5jQWxpYXN8eG1sMkVuY0RlZmF1bHR8eG1sMlN0YXJ0UGFyc2UpXFxiL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J2RpcmVjdGl2ZS1ibG9jayc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcLz9cXGIoPzpBdXRoW256XVByb3ZpZGVyQWxpYXN8RGlyZWN0b3J5fERpcmVjdG9yeU1hdGNofEVsc2V8RWxzZUlmfEZpbGVzfEZpbGVzTWF0Y2h8SWZ8SWZEZWZpbmV8SWZNb2R1bGV8SWZWZXJzaW9ufExpbWl0fExpbWl0RXhjZXB0fExvY2F0aW9ufExvY2F0aW9uTWF0Y2h8TWFjcm98UHJveHl8UmVxdWlyZSg/OkFsbHxBbnl8Tm9uZSl8VmlydHVhbEhvc3QpXFxiLio+L2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGlyZWN0aXZlLWJsb2NrJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXjxcXC8/XFx3Ky8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePFxcLz8vXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsaWFzOiAndGFnJ1xuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUtYmxvY2stcGFyYW1ldGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvLipbXj5dLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzovLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFwifCcpLipcXDEvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9bJCVdXFx7Pyg/Olxcd1xcLj9bLSs6XT8pK1xcfT8vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLz4vXG5cdFx0fSxcblx0XHRhbGlhczogJ3RhZydcblx0fSxcblx0J2RpcmVjdGl2ZS1mbGFncyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxbKD86W1xcdz1dLD8pK1xcXS8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykuKlxcMS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvWyQlXVxcez8oPzpcXHdcXC4/Wy0rOl0/KStcXH0/L1xuXHRcdH1cblx0fSxcblx0J3ZhcmlhYmxlJzogL1skJV1cXHs/KD86XFx3XFwuP1stKzpdPykrXFx9Py8sXG5cdCdyZWdleCc6IC9cXF4/LipcXCR8XFxeLipcXCQ/L1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNxbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3woPzotLXxcXC9cXC98IykuKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9AKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pK1xcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdC9AW1xcdy4kXSsvXG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteQFxcXFxdKShcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDIpW15cXFxcXXxcXDJcXDIpKlxcMi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteQFxcXFxdKWAoPzpcXFxcW1xcc1xcU118W15gXFxcXF18YGApKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15gfGAkL1xuXHRcdH1cblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OkFWR3xDT1VOVHxGSVJTVHxGT1JNQVR8TEFTVHxMQ0FTRXxMRU58TUFYfE1JRHxNSU58TU9EfE5PV3xST1VORHxTVU18VUNBU0UpKD89XFxzKlxcKCkvaSwgLy8gU2hvdWxkIHdlIGhpZ2hsaWdodCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zIHRvbz9cblx0J2tleXdvcmQnOiAvXFxiKD86QUNUSU9OfEFERHxBRlRFUnxBTEdPUklUSE18QUxMfEFMVEVSfEFOQUxZWkV8QU5ZfEFQUExZfEFTfEFTQ3xBVVRIT1JJWkFUSU9OfEFVVE9fSU5DUkVNRU5UfEJBQ0tVUHxCREJ8QkVHSU58QkVSS0VMRVlEQnxCSUdJTlR8QklOQVJZfEJJVHxCTE9CfEJPT0x8Qk9PTEVBTnxCUkVBS3xCUk9XU0V8QlRSRUV8QlVMS3xCWXxDQUxMfENBU0NBREVEP3xDQVNFfENIQUlOfENIQVIoPzpBQ1RFUnxTRVQpP3xDSEVDSyg/OlBPSU5UKT98Q0xPU0V8Q0xVU1RFUkVEfENPQUxFU0NFfENPTExBVEV8Q09MVU1OUz98Q09NTUVOVHxDT01NSVQoPzpURUQpP3xDT01QVVRFfENPTk5FQ1R8Q09OU0lTVEVOVHxDT05TVFJBSU5UfENPTlRBSU5TKD86VEFCTEUpP3xDT05USU5VRXxDT05WRVJUfENSRUFURXxDUk9TU3xDVVJSRU5UKD86X0RBVEV8X1RJTUV8X1RJTUVTVEFNUHxfVVNFUik/fENVUlNPUnxDWUNMRXxEQVRBKD86QkFTRVM/KT98REFURSg/OlRJTUUpP3xEQVl8REJDQ3xERUFMTE9DQVRFfERFQ3xERUNJTUFMfERFQ0xBUkV8REVGQVVMVHxERUZJTkVSfERFTEFZRUR8REVMRVRFfERFTElNSVRFUlM/fERFTll8REVTQ3xERVNDUklCRXxERVRFUk1JTklTVElDfERJU0FCTEV8RElTQ0FSRHxESVNLfERJU1RJTkNUfERJU1RJTkNUUk9XfERJU1RSSUJVVEVEfERPfERPVUJMRXxEUk9QfERVTU1ZfERVTVAoPzpGSUxFKT98RFVQTElDQVRFfEVMU0UoPzpJRik/fEVOQUJMRXxFTkNMT1NFRHxFTkR8RU5HSU5FfEVOVU18RVJSTFZMfEVSUk9SU3xFU0NBUEVEP3xFWENFUFR8RVhFQyg/OlVURSk/fEVYSVNUU3xFWElUfEVYUExBSU58RVhURU5ERUR8RkVUQ0h8RklFTERTfEZJTEV8RklMTEZBQ1RPUnxGSVJTVHxGSVhFRHxGTE9BVHxGT0xMT1dJTkd8Rk9SKD86IEVBQ0ggUk9XKT98Rk9SQ0V8Rk9SRUlHTnxGUkVFVEVYVCg/OlRBQkxFKT98RlJPTXxGVUxMfEZVTkNUSU9OfEdFT01FVFJZKD86Q09MTEVDVElPTik/fEdMT0JBTHxHT1RPfEdSQU5UfEdST1VQfEhBTkRMRVJ8SEFTSHxIQVZJTkd8SE9MRExPQ0t8SE9VUnxJREVOVElUWSg/OkNPTHxfSU5TRVJUKT98SUZ8SUdOT1JFfElNUE9SVHxJTkRFWHxJTkZJTEV8SU5ORVJ8SU5OT0RCfElOT1VUfElOU0VSVHxJTlR8SU5URUdFUnxJTlRFUlNFQ1R8SU5URVJWQUx8SU5UT3xJTlZPS0VSfElTT0xBVElPTnxJVEVSQVRFfEpPSU58S0VZUz98S0lMTHxMQU5HVUFHRXxMQVNUfExFQVZFfExFRlR8TEVWRUx8TElNSVR8TElORU5PfExJTkVTfExJTkVTVFJJTkd8TE9BRHxMT0NBTHxMT0NLfExPTkcoPzpCTE9CfFRFWFQpfExPT1B8TUFUQ0goPzpFRCk/fE1FRElVTSg/OkJMT0J8SU5UfFRFWFQpfE1FUkdFfE1JRERMRUlOVHxNSU5VVEV8TU9ERXxNT0RJRklFU3xNT0RJRll8TU9OVEh8TVVMVEkoPzpMSU5FU1RSSU5HfFBPSU5UfFBPTFlHT04pfE5BVElPTkFMfE5BVFVSQUx8TkNIQVJ8TkVYVHxOT3xOT05DTFVTVEVSRUR8TlVMTElGfE5VTUVSSUN8T0ZGP3xPRkZTRVRTP3xPTnxPUEVOKD86REFUQVNPVVJDRXxRVUVSWXxST1dTRVQpP3xPUFRJTUlaRXxPUFRJT04oPzpBTExZKT98T1JERVJ8T1VUKD86RVJ8RklMRSk/fE9WRVJ8UEFSVElBTHxQQVJUSVRJT058UEVSQ0VOVHxQSVZPVHxQTEFOfFBPSU5UfFBPTFlHT058UFJFQ0VESU5HfFBSRUNJU0lPTnxQUkVQQVJFfFBSRVZ8UFJJTUFSWXxQUklOVHxQUklWSUxFR0VTfFBST0MoPzpFRFVSRSk/fFBVQkxJQ3xQVVJHRXxRVUlDS3xSQUlTRVJST1J8UkVBRFM/fFJFQUx8UkVDT05GSUdVUkV8UkVGRVJFTkNFU3xSRUxFQVNFfFJFTkFNRXxSRVBFQVQoPzpBQkxFKT98UkVQTEFDRXxSRVBMSUNBVElPTnxSRVFVSVJFfFJFU0lHTkFMfFJFU1RPUkV8UkVTVFJJQ1R8UkVUVVJOKD86SU5HfFMpP3xSRVZPS0V8UklHSFR8Uk9MTEJBQ0t8Uk9VVElORXxST1coPzpDT1VOVHxHVUlEQ09MfFMpP3xSVFJFRXxSVUxFfFNBVkUoPzpQT0lOVCk/fFNDSEVNQXxTRUNPTkR8U0VMRUNUfFNFUklBTCg/OklaQUJMRSk/fFNFU1NJT04oPzpfVVNFUik/fFNFVCg/OlVTRVIpP3xTSEFSRXxTSE9XfFNIVVRET1dOfFNJTVBMRXxTTUFMTElOVHxTTkFQU0hPVHxTT01FfFNPTkFNRXxTUUx8U1RBUlQoPzpJTkcpP3xTVEFUSVNUSUNTfFNUQVRVU3xTVFJJUEVEfFNZU1RFTV9VU0VSfFRBQkxFUz98VEFCTEVTUEFDRXxURU1QKD86T1JBUll8VEFCTEUpP3xURVJNSU5BVEVEfFRFWFQoPzpTSVpFKT98VEhFTnxUSU1FKD86U1RBTVApP3xUSU5ZKD86QkxPQnxJTlR8VEVYVCl8VE9QP3xUUkFOKD86U0FDVElPTlM/KT98VFJJR0dFUnxUUlVOQ0FURXxUU0VRVUFMfFRZUEVTP3xVTkJPVU5ERUR8VU5DT01NSVRURUR8VU5ERUZJTkVEfFVOSU9OfFVOSVFVRXxVTkxPQ0t8VU5QSVZPVHxVTlNJR05FRHxVUERBVEUoPzpURVhUKT98VVNBR0V8VVNFfFVTRVJ8VVNJTkd8VkFMVUVTP3xWQVIoPzpCSU5BUll8Q0hBUnxDSEFSQUNURVJ8WUlORyl8VklFV3xXQUlURk9SfFdBUk5JTkdTfFdIRU58V0hFUkV8V0hJTEV8V0lUSCg/OiBST0xMVVB8SU4pP3xXT1JLfFdSSVRFKD86VEVYVCk/fFlFQVIpXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfE5VTEx8VFJVRSlcXGIvaSxcblx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnxcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCtcXGIvaSxcblx0J29wZXJhdG9yJzogL1stKypcXC89JV5+XXwmJj98XFx8XFx8P3whPT98PCg/Oj0+P3w8fD4pP3w+Wz49XT98XFxiKD86QU5EfEJFVFdFRU58RElWfElMSUtFfElOfElTfExJS0V8Tk9UfE9SfFJFR0VYUHxSTElLRXxTT1VORFMgTElLRXxYT1IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bO1tcXF0oKWAsLl0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGtleXdvcmRzID0gL1xcYig/Oig/OmFmdGVyfGJlZm9yZSkoPz1cXHMrW2Etel0pfGFic3RyYWN0fGFjdGl2YXRlfGFuZHxhbnl8YXJyYXl8YXN8YXNjfGF1dG9ub21vdXN8YmVnaW58YmlnZGVjaW1hbHxibG9ifGJvb2xlYW58YnJlYWt8YnVsa3xieXxieXRlfGNhc2V8Y2FzdHxjYXRjaHxjaGFyfGNsYXNzfGNvbGxlY3R8Y29tbWl0fGNvbnN0fGNvbnRpbnVlfGN1cnJlbmN5fGRhdGV8ZGF0ZXRpbWV8ZGVjaW1hbHxkZWZhdWx0fGRlbGV0ZXxkZXNjfGRvfGRvdWJsZXxlbHNlfGVuZHxlbnVtfGV4Y2VwdGlvbnxleGl0fGV4cG9ydHxleHRlbmRzfGZpbmFsfGZpbmFsbHl8ZmxvYXR8Zm9yfGZyb218Z2V0KD89XFxzKlt7fTtdKXxnbG9iYWx8Z290b3xncm91cHxoYXZpbmd8aGludHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbm5lcnxpbnNlcnR8aW5zdGFuY2VvZnxpbnR8aW50ZWdlcnxpbnRlcmZhY2V8aW50b3xqb2lufGxpa2V8bGltaXR8bGlzdHxsb25nfGxvb3B8bWFwfG1lcmdlfG5ld3xub3R8bnVsbHxudWxsc3xudW1iZXJ8b2JqZWN0fG9mfG9ufG9yfG91dGVyfG92ZXJyaWRlfHBhY2thZ2V8cGFyYWxsZWx8cHJhZ21hfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXRyaWV2ZXxyZXR1cm58cm9sbGJhY2t8c2VsZWN0fHNldHxzaG9ydHxzT2JqZWN0fHNvcnR8c3RhdGljfHN0cmluZ3xzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHN5c3RlbXx0ZXN0bWV0aG9kfHRoZW58dGhpc3x0aHJvd3x0aW1lfHRyYW5zYWN0aW9ufHRyYW5zaWVudHx0cmlnZ2VyfHRyeXx1bmRlbGV0ZXx1cGRhdGV8dXBzZXJ0fHVzaW5nfHZpcnR1YWx8dm9pZHx3ZWJzZXJ2aWNlfHdoZW58d2hlcmV8d2hpbGV8KD86aW5oZXJpdGVkfHdpdGh8d2l0aG91dClcXHMrc2hhcmluZylcXGIvaTtcblxuXHR2YXIgY2xhc3NOYW1lID0gL1xcYig/Oig/PVthLXpfXVxcdypcXHMqWzxcXFtdKXwoPyE8a2V5d29yZD4pKVtBLVpfXVxcdyooPzpcXHMqXFwuXFxzKltBLVpfXVxcdyopKlxcYig/OlxccyooPzpcXFtcXHMqXFxdfDwoPzpbXjw+XXw8KD86W148Pl18PFtePD5dKj4pKj4pKj4pKSovLnNvdXJjZVxuXHRcdC5yZXBsYWNlKC88a2V5d29yZD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5d29yZHMuc291cmNlOyB9KTtcblx0LyoqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuICovXG5cdGZ1bmN0aW9uIGluc2VydENsYXNzTmFtZShwYXR0ZXJuKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChwYXR0ZXJuLnJlcGxhY2UoLzxDTEFTUy1OQU1FPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjbGFzc05hbWU7IH0pLCAnaScpO1xuXHR9XG5cblx0dmFyIGNsYXNzTmFtZUluc2lkZSA9IHtcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fTssOi48Pl0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFwZXggPSB7XG5cdFx0J2NvbW1lbnQnOiBQcmlzbS5sYW5ndWFnZXMuY2xpa2UuY29tbWVudCxcblx0XHQnc3RyaW5nJzogUHJpc20ubGFuZ3VhZ2VzLmNsaWtlLnN0cmluZyxcblx0XHQnc3FsJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpbPSwoezpdfFxcYnJldHVybilcXHMqKVxcW1teXFxbXFxdXSpcXF0vaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLXNxbCcsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5zcWxcblx0XHR9LFxuXG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFxcdytcXGIvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBpbnNlcnRDbGFzc05hbWUoLyhcXGIoPzpjbGFzc3xlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGludGVyZmFjZXxuZXd8dHJpZ2dlclxccytcXHcrXFxzK29uKVxccyspPENMQVNTLU5BTUU+Ly5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNsYXNzTmFtZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gY2FzdFxuXHRcdFx0XHRwYXR0ZXJuOiBpbnNlcnRDbGFzc05hbWUoLyhcXChcXHMqKTxDTEFTUy1OQU1FPig/PVxccypcXClcXHMqW1xcdyhdKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHZhcmlhYmxlL3BhcmFtZXRlciBkZWNsYXJhdGlvbiBhbmQgcmV0dXJuIHR5cGVzXG5cdFx0XHRcdHBhdHRlcm46IGluc2VydENsYXNzTmFtZSgvPENMQVNTLU5BTUU+KD89XFxzKlxcdytcXHMqWzs9LCgpezpdKS8uc291cmNlKSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCd0cmlnZ2VyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGJ0cmlnZ2VyXFxzKylcXHcrXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXG5cdFx0J251bWJlcic6IC8oPzpcXEJcXC5cXGQrfFxcYlxcZCsoPzpcXC5cXGQrfEwpPylcXGIvaSxcblx0XHQnb3BlcmF0b3InOiAvWyE9XSg/Oj09Pyk/fFxcP1xcLj98JiZ8XFx8XFx8fC0tfFxcK1xcK3xbLSsqL14mfF09P3w6fDw8Pz0/fD57MSwzfT0/Lyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde307LC5dL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5hcGwgPSB7XG5cdCdjb21tZW50JzogLyg/Olx1MjM1RHwjWyEgXSkuKiQvbSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcclxcbl18JycpKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzogL1x1MDBBRj8oPzpcXGQqXFwuP1xcYlxcZCsoPzplWytcdTAwQUZdP1xcZCspP3xcdTAwQUZ8XHUyMjFFKSg/OmpcdTAwQUY/KD86KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OmVbK1x1MDBBRl0/XFxkKyk/fFx1MDBBRnxcdTIyMUUpKT8vaSxcblx0J3N0YXRlbWVudCc6IC86W0EtWl1bYS16XVtBLVphLXpdKlxcYi8sXG5cdCdzeXN0ZW0tZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1x1MjM5NVtBLVpdKy9pLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdjb25zdGFudCc6IC9bXHUyMzZDXHUyMzNFI1x1MjM5NVx1MjM1RV0vLFxuXHQnZnVuY3Rpb24nOiAvWy0rXHUwMEQ3XHUwMEY3XHUyMzA4XHUyMzBBXHUyMjIzfFx1MjM3M1x1MjM3OD8qXHUyMzVGXHUyNUNCIVx1MjMzOTxcdTIyNjQ9Plx1MjI2NVx1MjI2MFx1MjI2MVx1MjI2Mlx1MjIwQVx1MjM3N1x1MjIyQVx1MjIyOX5cdTIyMjhcdTIyMjdcdTIzNzFcdTIzNzJcdTIzNzQsXHUyMzZBXHUyMzNEXHUyMjk2XHUyMzQ5XHUyMTkxXHUyMTkzXHUyMjgyXHUyMjgzXHUyMjg2XHUyMjg3XHUyMzM3XHUyMzRCXHUyMzUyXHUyMkE0XHUyMkE1XHUyMzU1XHUyMzRFXHUyMkEzXHUyMkEyXHUyMzQxXHUyMzQyXHUyMjQ4XHUyMzZGXHUyMTk3XHUwMEE0XHUyMTkyXS8sXG5cdCdtb25hZGljLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC9bXFxcXFxcL1x1MjMzRlx1MjM0MFx1MDBBOFx1MjM2OFx1MjMzNiZcdTIyMjVdLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnZHlhZGljLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC9bLlx1MjM2M1x1MjM2MFx1MjM2NFx1MjIxOFx1MjMzOEBcdTIzM0FcdTIzNjVdLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnYXNzaWdubWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXHUyMTkwLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbO1xcXSgpXHUyNUM3XHUyMkM0XS8sXG5cdCdkZm4nOiB7XG5cdFx0cGF0dGVybjogL1t7fVx1MjM3QVx1MjM3NVx1MjM3Nlx1MjM3OVx1MjIwN1x1MjM2QjpdLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5hcHBsZXNjcmlwdCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0Ly8gQWxsb3cgb25lIGxldmVsIG9mIG5lc3Rpbmdcblx0XHQvXFwoXFwqKD86XFwoXFwqKD86W14qXXxcXCooPyFcXCkpKSpcXCpcXCl8KD8hXFwoXFwqKVtcXHNcXFNdKSo/XFwqXFwpLyxcblx0XHQvLS0uKy8sXG5cdFx0LyMuKy9cblx0XSxcblx0J3N0cmluZyc6IC9cIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplLT9cXGQrKT9cXGIvaSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9bJj1cdTIyNjBcdTIyNjRcdTIyNjUqK1xcLVxcL1x1MDBGN15dfFs8Pl09Py8sXG5cdFx0L1xcYig/Oig/OmJlZ2lufGVuZHxzdGFydClzPyB3aXRofCg/OmNvbnRhaW5zP3woPzpkb2VzIG5vdHxkb2Vzbid0KSBjb250YWluKXwoPzppc3xpc24ndHxpcyBub3QpICg/OmNvbnRhaW5lZCBieXxpbil8KD86KD86aXN8aXNuJ3R8aXMgbm90KSApPyg/OmdyZWF0ZXJ8bGVzcykgdGhhbig/OiBvciBlcXVhbCk/KD86IHRvKT98KD86Y29tZXN8KD86ZG9lcyBub3R8ZG9lc24ndCkgY29tZSkgKD86YWZ0ZXJ8YmVmb3JlKXwoPzppc3xpc24ndHxpcyBub3QpIGVxdWFsKD86IHRvKT98KD86KD86ZG9lcyBub3R8ZG9lc24ndCkgZXF1YWx8ZXF1YWwgdG98ZXF1YWxzfGlzIG5vdHxpc24ndCl8KD86YSApPyg/OnJlZig/OiB0byk/fHJlZmVyZW5jZSB0byl8KD86YW5kfGFzfGRpdnxtb2R8bm90fG9yKSlcXGIvXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFib3V0fGFib3ZlfGFmdGVyfGFnYWluc3R8YXBhcnQgZnJvbXxhcm91bmR8YXNpZGUgZnJvbXxhdHxiYWNrfGJlZm9yZXxiZWdpbm5pbmd8YmVoaW5kfGJlbG93fGJlbmVhdGh8YmVzaWRlfGJldHdlZW58YnV0fGJ5fGNvbnNpZGVyaW5nfGNvbnRpbnVlfGNvcHl8ZG9lc3xlaWdodGh8ZWxzZXxlbmR8ZXF1YWx8ZXJyb3J8ZXZlcnl8ZXhpdHxmYWxzZXxmaWZ0aHxmaXJzdHxmb3J8Zm91cnRofGZyb218ZnJvbnR8Z2V0fGdpdmVufGdsb2JhbHxpZnxpZ25vcmluZ3xpbnxpbnN0ZWFkIG9mfGludG98aXN8aXR8aXRzfGxhc3R8bG9jYWx8bWV8bWlkZGxlfG15fG5pbnRofG9mfG9ufG9udG98b3V0IG9mfG92ZXJ8cHJvcHxwcm9wZXJ0eXxwdXR8cmVwZWF0fHJldHVybnxyZXR1cm5pbmd8c2Vjb25kfHNldHxzZXZlbnRofHNpbmNlfHNpeHRofHNvbWV8dGVsbHx0ZW50aHx0aGF0fHRoZXx0aGVufHRoaXJkfHRocm91Z2h8dGhydXx0aW1lb3V0fHRpbWVzfHRvfHRyYW5zYWN0aW9ufHRydWV8dHJ5fHVudGlsfHdoZXJlfHdoaWxlfHdob3NlfHdpdGh8d2l0aG91dClcXGIvLFxuXHQnY2xhc3MtbmFtZSc6IC9cXGIoPzpQT1NJWCBmaWxlfFJHQiBjb2xvcnxhbGlhc3xhcHBsaWNhdGlvbnxib29sZWFufGNlbnRpbWV0ZXJzfGNlbnRpbWV0cmVzfGNsYXNzfGNvbnN0YW50fGN1YmljIGNlbnRpbWV0ZXJzfGN1YmljIGNlbnRpbWV0cmVzfGN1YmljIGZlZXR8Y3ViaWMgaW5jaGVzfGN1YmljIG1ldGVyc3xjdWJpYyBtZXRyZXN8Y3ViaWMgeWFyZHN8ZGF0ZXxkZWdyZWVzIENlbHNpdXN8ZGVncmVlcyBGYWhyZW5oZWl0fGRlZ3JlZXMgS2VsdmlufGZlZXR8ZmlsZXxnYWxsb25zfGdyYW1zfGluY2hlc3xpbnRlZ2VyfGtpbG9ncmFtc3xraWxvbWV0ZXJzfGtpbG9tZXRyZXN8bGlzdHxsaXRlcnN8bGl0cmVzfG1ldGVyc3xtZXRyZXN8bWlsZXN8bnVtYmVyfG91bmNlc3xwb3VuZHN8cXVhcnRzfHJlYWx8cmVjb3JkfHJlZmVyZW5jZXxzY3JpcHR8c3F1YXJlIGZlZXR8c3F1YXJlIGtpbG9tZXRlcnN8c3F1YXJlIGtpbG9tZXRyZXN8c3F1YXJlIG1ldGVyc3xzcXVhcmUgbWV0cmVzfHNxdWFyZSBtaWxlc3xzcXVhcmUgeWFyZHN8dGV4dHx5YXJkcylcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KCk6LFx1MDBBQ1x1MDBBQlx1MDBCQlx1MzAwQVx1MzAwQl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXFsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oW3ssXVxccyopKD86KD8hXFxkKVxcdyt8KFtcIidcdTAwQjRgXSkoPzooPyFcXDIpW15cXFxcXFxyXFxuXXxcXFxcLikqXFwyKSg/PVxccyo6KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/Oig/IVxcMSlbXlxcXFxcXHJcXG5dfFxcXFwuKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvKFtcdTAwQjRgXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxcLikqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogL0BAP1xcdysvLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYldJVEhcXHMrKUNPVU5UKD89XFxzK0lOVE9cXGIpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvXFxiKD86QUdHUkVHQVRFfEFMTHxBTkR8QU5ZfEFTQ3xDT0xMRUNUfERFU0N8RElTVElOQ1R8RklMVEVSfEZPUnxHUkFQSHxJTnxJTkJPVU5EfElOU0VSVHxJTlRPfEtfUEFUSFN8S19TSE9SVEVTVF9QQVRIU3xMRVR8TElLRXxMSU1JVHxOT05FfE5PVHxOVUxMfE9SfE9VVEJPVU5EfFJFTU9WRXxSRVBMQUNFfFJFVFVSTnxTSE9SVEVTVF9QQVRIfFNPUlR8VVBEQVRFfFVQU0VSVHxXSU5ET1d8V0lUSClcXGIvaSxcblx0XHQvLyBwc2V1ZG8ga2V5d29yZHMgZ2V0IGEgbG9va2JlaGluZCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXNcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuW10pKD86S0VFUHxQUlVORXxTRUFSQ0h8VE8pXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuW10pKD86Q1VSUkVOVHxORVd8T0xEKVxcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiT1BUSU9OUyg/PVxccypcXHspL2lcblx0XHR9XG5cdF0sXG5cdCdmdW5jdGlvbic6IC9cXGIoPyFcXGQpXFx3Kyg/PVxccypcXCgpLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J3JhbmdlJzoge1xuXHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdudW1iZXInOiBbXG5cdFx0L1xcYjBiWzAxXSsvaSxcblx0XHQvXFxiMHhbMC05YS1mXSsvaSxcblx0XHQvKD86XFxCXFwuXFxkK3xcXGIoPzowfFsxLTldXFxkKikoPzpcXC5cXGQrKT8pKD86ZVsrLV0/XFxkKyk/L2lcblx0XSxcblx0J29wZXJhdG9yJzogL1xcKnsyLH18Wz0hXX58WyE9PD5dPT98JiZ8XFx8XFx8fFstKyovJV0vLFxuXHQncHVuY3R1YXRpb24nOiAvOjp8Wz8uOiw7KClbXFxde31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLyg/OlteXFxyXFxuXFxcXF18XFxcXCg/Olxcclxcbj98XFxufCg/IVtcXHJcXG5dKSkpKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHQvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jL2xhbmd1YWdlL3N0cmluZ19saXRlcmFsXG5cdFx0cGF0dGVybjogL1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxzdHJ1Y3QpXFxzKyg/Ol9fYXR0cmlidXRlX19cXHMqXFwoXFwoW1xcc1xcU10qP1xcKVxcKVxccyopPylcXHcrfFxcYlthLXpdXFx3Kl90XFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/Ol9BbGlnbmFzfF9BbGlnbm9mfF9BdG9taWN8X0Jvb2x8X0NvbXBsZXh8X0dlbmVyaWN8X0ltYWdpbmFyeXxfTm9yZXR1cm58X1N0YXRpY19hc3NlcnR8X1RocmVhZF9sb2NhbHxfX2F0dHJpYnV0ZV9ffGFzbXxhdXRvfGJyZWFrfGNhc2V8Y2hhcnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZXJufGZsb2F0fGZvcnxnb3RvfGlmfGlubGluZXxpbnR8bG9uZ3xyZWdpc3RlcnxyZXR1cm58c2hvcnR8c2lnbmVkfHNpemVvZnxzdGF0aWN8c3RydWN0fHN3aXRjaHx0eXBlZGVmfHR5cGVvZnx1bmlvbnx1bnNpZ25lZHx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0J251bWJlcic6IC8oPzpcXGIweCg/OltcXGRhLWZdKyg/OlxcLltcXGRhLWZdKik/fFxcLltcXGRhLWZdKykoPzpwWystXT9cXGQrKT98KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylbZnVsXXswLDR9L2ksXG5cdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98LT58KFstKyZ8Ol0pXFwxfFs/On5dfFstKyovJSZ8XiE9PD5dPT8vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYycsICdzdHJpbmcnLCB7XG5cdCdjaGFyJzoge1xuXHRcdC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2MvbGFuZ3VhZ2UvY2hhcmFjdGVyX2NvbnN0YW50XG5cdFx0cGF0dGVybjogLycoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXidcXFxcXFxyXFxuXSl7MCwzMn0nLyxcblx0XHRncmVlZHk6IHRydWVcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2MnLCAnc3RyaW5nJywge1xuXHQnbWFjcm8nOiB7XG5cdFx0Ly8gYWxsb3cgZm9yIG11bHRpbGluZSBtYWNybyBkZWZpbml0aW9uc1xuXHRcdC8vIHNwYWNlcyBhZnRlciB0aGUgIyBjaGFyYWN0ZXIgY29tcGlsZSBmaW5lIHdpdGggZ2NjXG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikjXFxzKlthLXpdKD86W15cXHJcXG5cXFxcL118XFwvKD8hXFwqKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3xcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N0cmluZyc6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIGhpZ2hsaWdodCB0aGUgcGF0aCBvZiB0aGUgaW5jbHVkZSBzdGF0ZW1lbnQgYXMgYSBzdHJpbmdcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXigjXFxzKmluY2x1ZGVcXHMqKTxbXj5dKz4vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmNbJ3N0cmluZyddXG5cdFx0XHRdLFxuXHRcdFx0J2NoYXInOiBQcmlzbS5sYW5ndWFnZXMuY1snY2hhciddLFxuXHRcdFx0J2NvbW1lbnQnOiBQcmlzbS5sYW5ndWFnZXMuY1snY29tbWVudCddLFxuXHRcdFx0J21hY3JvLW5hbWUnOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4jXFxzKmRlZmluZVxccyspXFx3K1xcYig/IVxcKCkvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4jXFxzKmRlZmluZVxccyspXFx3K1xcYig/PVxcKCkvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHRcdH1cblx0XHRcdF0sXG5cdFx0XHQvLyBoaWdobGlnaHQgbWFjcm8gZGlyZWN0aXZlcyBhcyBrZXl3b3Jkc1xuXHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oI1xccyopW2Etel0rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUtaGFzaCc6IC9eIy8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvIyN8XFxcXCg/PVtcXHJcXG5dKS8sXG5cdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjJywgJ2Z1bmN0aW9uJywge1xuXHQvLyBoaWdobGlnaHQgcHJlZGVmaW5lZCBtYWNyb3MgYXMgY29uc3RhbnRzXG5cdCdjb25zdGFudCc6IC9cXGIoPzpFT0Z8TlVMTHxTRUVLX0NVUnxTRUVLX0VORHxTRUVLX1NFVHxfX0RBVEVfX3xfX0ZJTEVfX3xfX0xJTkVfX3xfX1RJTUVTVEFNUF9ffF9fVElNRV9ffF9fZnVuY19ffHN0ZGVycnxzdGRpbnxzdGRvdXQpXFxiL1xufSk7XG5cbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuY1snYm9vbGVhbiddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGtleXdvcmQgPSAvXFxiKD86YWxpZ25hc3xhbGlnbm9mfGFzbXxhdXRvfGJvb2x8YnJlYWt8Y2FzZXxjYXRjaHxjaGFyfGNoYXIxNl90fGNoYXIzMl90fGNoYXI4X3R8Y2xhc3N8Y29fYXdhaXR8Y29fcmV0dXJufGNvX3lpZWxkfGNvbXBsfGNvbmNlcHR8Y29uc3R8Y29uc3RfY2FzdHxjb25zdGV2YWx8Y29uc3RleHByfGNvbnN0aW5pdHxjb250aW51ZXxkZWNsdHlwZXxkZWZhdWx0fGRlbGV0ZXxkb3xkb3VibGV8ZHluYW1pY19jYXN0fGVsc2V8ZW51bXxleHBsaWNpdHxleHBvcnR8ZXh0ZXJufGZpbmFsfGZsb2F0fGZvcnxmcmllbmR8Z290b3xpZnxpbXBvcnR8aW5saW5lfGludHxpbnQxNl90fGludDMyX3R8aW50NjRfdHxpbnQ4X3R8bG9uZ3xtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG5vZXhjZXB0fG51bGxwdHJ8b3BlcmF0b3J8b3ZlcnJpZGV8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlZ2lzdGVyfHJlaW50ZXJwcmV0X2Nhc3R8cmVxdWlyZXN8cmV0dXJufHNob3J0fHNpZ25lZHxzaXplb2Z8c3RhdGljfHN0YXRpY19hc3NlcnR8c3RhdGljX2Nhc3R8c3RydWN0fHN3aXRjaHx0ZW1wbGF0ZXx0aGlzfHRocmVhZF9sb2NhbHx0aHJvd3x0cnl8dHlwZWRlZnx0eXBlaWR8dHlwZW5hbWV8dWludDE2X3R8dWludDMyX3R8dWludDY0X3R8dWludDhfdHx1bmlvbnx1bnNpZ25lZHx1c2luZ3x2aXJ0dWFsfHZvaWR8dm9sYXRpbGV8d2NoYXJfdHx3aGlsZSlcXGIvO1xuXHR2YXIgbW9kTmFtZSA9IC9cXGIoPyE8a2V5d29yZD4pXFx3Kyg/OlxccypcXC5cXHMqXFx3KykqXFxiLy5zb3VyY2UucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmQuc291cmNlOyB9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3BwID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHtcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiKD86Y2xhc3N8Y29uY2VwdHxlbnVtfHN0cnVjdHx0eXBlbmFtZSlcXHMrKSg/ITxrZXl3b3JkPilcXHcrLy5zb3VyY2Vcblx0XHRcdFx0XHQucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmQuc291cmNlOyB9KSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvLyBUaGlzIGlzIGludGVuZGVkIHRvIGNhcHR1cmUgdGhlIGNsYXNzIG5hbWUgb2YgbWV0aG9kIGltcGxlbWVudGF0aW9ucyBsaWtlOlxuXHRcdFx0Ly8gICB2b2lkIGZvbzo6YmFyKCkgY29uc3Qge31cblx0XHRcdC8vIEhvd2V2ZXIhIFRoZSBgZm9vYCBpbiB0aGUgYWJvdmUgZXhhbXBsZSBjb3VsZCBhbHNvIGJlIGEgbmFtZXNwYWNlLCBzbyB3ZSBvbmx5IGNhcHR1cmUgdGhlIGNsYXNzIG5hbWUgaWZcblx0XHRcdC8vIGl0IHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuIFRoaXMgYXBwcm94aW1hdGlvbiBzaG91bGQgZ2l2ZSBkZWNlbnQgcmVzdWx0cy5cblx0XHRcdC9cXGJbQS1aXVxcdyooPz1cXHMqOjpcXHMqXFx3K1xccypcXCgpLyxcblx0XHRcdC8vIFRoaXMgd2lsbCBjYXB0dXJlIHRoZSBjbGFzcyBuYW1lIGJlZm9yZSBkZXN0cnVjdG9ycyBsaWtlOlxuXHRcdFx0Ly8gICBGb286On5Gb28oKSB7fVxuXHRcdFx0L1xcYltBLVpfXVxcdyooPz1cXHMqOjpcXHMqflxcdytcXHMqXFwoKS9pLFxuXHRcdFx0Ly8gVGhpcyBhbHNvIGludGVuZHMgdG8gY2FwdHVyZSB0aGUgY2xhc3MgbmFtZSBvZiBtZXRob2QgaW1wbGVtZW50YXRpb25zIGJ1dCBoZXJlIHRoZSBjbGFzcyBoYXMgdGVtcGxhdGVcblx0XHRcdC8vIHBhcmFtZXRlcnMsIHNvIGl0IGNhbid0IGJlIGEgbmFtZXNwYWNlICh1bnRpbCBDKysgYWRkcyBnZW5lcmljIG5hbWVzcGFjZXMpLlxuXHRcdFx0L1xcYlxcdysoPz1cXHMqPCg/OltePD5dfDwoPzpbXjw+XXw8W148Pl0qPikqPikqPlxccyo6OlxccypcXHcrXFxzKlxcKCkvXG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmQsXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpcXGIwYlswMSddK3xcXGIweCg/OltcXGRhLWYnXSsoPzpcXC5bXFxkYS1mJ10qKT98XFwuW1xcZGEtZiddKykoPzpwWystXT9bXFxkJ10rKT98KD86XFxiW1xcZCddKyg/OlxcLltcXGQnXSopP3xcXEJcXC5bXFxkJ10rKSg/OmVbKy1dP1tcXGQnXSspPylbZnVsXXswLDR9L2ksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98LT58LS18XFwrXFwrfCYmfFxcfFxcfHxbPzp+XXw8PT58Wy0rKi8lJnxeIT08Pl09P3xcXGIoPzphbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxub3R8bm90X2VxfG9yfG9yX2VxfHhvcnx4b3JfZXEpXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ3N0cmluZycsIHtcblx0XHQnbW9kdWxlJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL21vZHVsZXNcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhcXGIoPzppbXBvcnR8bW9kdWxlKVxccyspLy5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdC8vIGhlYWRlci1uYW1lXG5cdFx0XHRcdC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCJ8PFtePD5cXHJcXG5dKj4vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIG1vZHVsZSBuYW1lIG9yIHBhcnRpdGlvbiBvciBib3RoXG5cdFx0XHRcdC88bW9kLW5hbWU+KD86XFxzKjpcXHMqPG1vZC1uYW1lPik/fDpcXHMqPG1vZC1uYW1lPi8uc291cmNlLnJlcGxhY2UoLzxtb2QtbmFtZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbW9kTmFtZTsgfSkgK1xuXHRcdFx0XHQnKSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzdHJpbmcnOiAvXls8XCJdW1xcc1xcU10rLyxcblx0XHRcdFx0J29wZXJhdG9yJzogLzovLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3Jhdy1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvUlwiKFteKClcXFxcIF17MCwxNn0pXFwoW1xcc1xcU10qP1xcKVxcMVwiLyxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ2tleXdvcmQnLCB7XG5cdFx0J2dlbmVyaWMtZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD8hb3BlcmF0b3JcXGIpW2Etel9dXFx3Klxccyo8KD86W148Pl18PFtePD5dKj4pKj4oPz1cXHMqXFwoKS9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eXFx3Ky8sXG5cdFx0XHRcdCdnZW5lcmljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W1xcc1xcU10rLyxcblx0XHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNwcFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjcHAnLCAnb3BlcmF0b3InLCB7XG5cdFx0J2RvdWJsZS1jb2xvbic6IHtcblx0XHRcdHBhdHRlcm46IC86Oi8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0Ly8gdGhlIGJhc2UgY2xhdXNlIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcGFyZW50IGNsYXNzZXNcblx0XHQvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvY2xhc3Ncblx0XHQnYmFzZS1jbGF1c2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfHN0cnVjdClcXHMrXFx3K1xccyo6XFxzKilbXjt7fVwiJ1xcc10rKD86XFxzK1teO3t9XCInXFxzXSspKig/PVxccypbO3tdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjcHAnLCB7fSlcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdkb3VibGUtY29sb24nLCB7XG5cdFx0Ly8gQWxsIHVudG9rZW5pemVkIHdvcmRzIHRoYXQgYXJlIG5vdCBuYW1lc3BhY2VzIHNob3VsZCBiZSBjbGFzcyBuYW1lc1xuXHRcdCdjbGFzcy1uYW1lJzogL1xcYlthLXpfXVxcdypcXGIoPyFcXHMqOjopL2lcblx0fSwgUHJpc20ubGFuZ3VhZ2VzLmNwcFsnYmFzZS1jbGF1c2UnXSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFyZHVpbm8gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjcHAnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OlN0cmluZ3xhcnJheXxib29sfGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbnxpbnN0YW5jZW9mfGludHxpbnRlZ2VyfGxvbmd8bG9vcHxuZXd8bnVsbHxyZXR1cm58c2V0dXB8c3RyaW5nfHN3aXRjaHx0aHJvd3x0cnl8dm9pZHx3aGlsZXx3b3JkKVxcYi8sXG5cdCdjb25zdGFudCc6IC9cXGIoPzpBTkFMT0dfTUVTU0FHRXxERUZBVUxUfERJR0lUQUxfTUVTU0FHRXxFWFRFUk5BTHxGSVJNQVRBX1NUUklOR3xISUdIfElOUFVUfElOUFVUX1BVTExVUHxJTlRFUk5BTHxJTlRFUk5BTDFWMXxJTlRFUk5BTDJWNTZ8TEVEX0JVSUxUSU58TE9XfE9VVFBVVHxSRVBPUlRfQU5BTE9HfFJFUE9SVF9ESUdJVEFMfFNFVF9QSU5fTU9ERXxTWVNFWF9TVEFSVHxTWVNURU1fUkVTRVQpXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86QXVkaW98QlNTSUR8QnJpZGdlfENsaWVudHxDb25zb2xlfEVFUFJPTXxFc3Bsb3JhfEVzcGxvcmFURlR8RXRoZXJuZXR8RXRoZXJuZXRDbGllbnR8RXRoZXJuZXRTZXJ2ZXJ8RXRoZXJuZXRVRFB8RmlsZXxGaWxlSU98RmlsZVN5c3RlbXxGaXJtYXRhfEdQUlN8R1NNfEdTTUJhbmR8R1NNQ2xpZW50fEdTTU1vZGVtfEdTTVBJTnxHU01TY2FubmVyfEdTTVNlcnZlcnxHU01Wb2ljZUNhbGx8R1NNX1NNU3xIdHRwQ2xpZW50fElQQWRkcmVzc3xJUnJlYWR8S2V5Ym9hcmR8S2V5Ym9hcmRDb250cm9sbGVyfExpcXVpZENyeXN0YWx8TGlxdWlkQ3J5c3RhbF9JMkN8TWFpbGJveHxNb3VzZXxNb3VzZUNvbnRyb2xsZXJ8UEltYWdlfFByb2Nlc3N8UlNTSXxSb2JvdENvbnRyb2x8Um9ib3RNb3RvcnxTRHxTUEl8U1NJRHxTY2hlZHVsZXJ8U2VyaWFsfFNlcnZlcnxTZXJ2b3xTb2Z0d2FyZVNlcmlhbHxTdGVwcGVyfFN0cmVhbXxURlR8VGFza3xVU0JIb3N0fFdpRml8V2lGaUNsaWVudHxXaUZpU2VydmVyfFdpRmlVRFB8V2lyZXxZdW5DbGllbnR8WXVuU2VydmVyfGFic3xhZGRQYXJhbWV0ZXJ8YW5hbG9nUmVhZHxhbmFsb2dSZWFkUmVzb2x1dGlvbnxhbmFsb2dSZWZlcmVuY2V8YW5hbG9nV3JpdGV8YW5hbG9nV3JpdGVSZXNvbHV0aW9ufGFuc3dlckNhbGx8YXR0YWNofGF0dGFjaEdQUlN8YXR0YWNoSW50ZXJydXB0fGF0dGFjaGVkfGF1dG9zY3JvbGx8YXZhaWxhYmxlfGJhY2tncm91bmR8YmVlcHxiZWdpbnxiZWdpblBhY2tldHxiZWdpblNEfGJlZ2luU01TfGJlZ2luU3BlYWtlcnxiZWdpblRGVHxiZWdpblRyYW5zbWlzc2lvbnxiZWdpbldyaXRlfGJpdHxiaXRDbGVhcnxiaXRSZWFkfGJpdFNldHxiaXRXcml0ZXxibGlua3xibGlua1ZlcnNpb258YnVmZmVyfGNoYW5nZVBJTnxjaGVja1BJTnxjaGVja1BVS3xjaGVja1JlZ3xjaXJjbGV8Y2l0eU5hbWVSZWFkfGNpdHlOYW1lV3JpdGV8Y2xlYXJ8Y2xlYXJTY3JlZW58Y2xpY2t8Y2xvc2V8Y29tcGFzc1JlYWR8Y29uZmlnfGNvbm5lY3R8Y29ubmVjdGVkfGNvbnN0cmFpbnxjb3N8Y291bnRyeU5hbWVSZWFkfGNvdW50cnlOYW1lV3JpdGV8Y3JlYXRlQ2hhcnxjdXJzb3J8ZGVidWdQcmludHxkZWxheXxkZWxheU1pY3Jvc2Vjb25kc3xkZXRhY2h8ZGV0YWNoSW50ZXJydXB0fGRpZ2l0YWxSZWFkfGRpZ2l0YWxXcml0ZXxkaXNjb25uZWN0fGRpc3BsYXl8ZGlzcGxheUxvZ29zfGRyYXdCTVB8ZHJhd0NvbXBhc3N8ZW5jcnlwdGlvblR5cGV8ZW5kfGVuZFBhY2tldHxlbmRTTVN8ZW5kVHJhbnNtaXNzaW9ufGVuZFdyaXRlfGV4aXN0c3xleGl0VmFsdWV8ZmlsbHxmaW5kfGZpbmRVbnRpbHxmbHVzaHxnYXRld2F5SVB8Z2V0fGdldEFzeW5jaHJvbm91c2x5fGdldEJhbmR8Z2V0QnV0dG9ufGdldEN1cnJlbnRDYXJyaWVyfGdldElNRUl8Z2V0S2V5fGdldE1vZGlmaWVyc3xnZXRPZW1LZXl8Z2V0UElOVXNlZHxnZXRSZXN1bHR8Z2V0U2lnbmFsU3RyZW5ndGh8Z2V0U29ja2V0fGdldFZvaWNlQ2FsbFN0YXR1c3xnZXRYQ2hhbmdlfGdldFlDaGFuZ2V8aGFuZ0NhbGx8aGVpZ2h0fGhpZ2hCeXRlfGhvbWV8aW1hZ2V8aW50ZXJydXB0c3xpc0FjdGlvbkRvbmV8aXNEaXJlY3Rvcnl8aXNMaXN0ZW5pbmd8aXNQSU58aXNQcmVzc2VkfGlzVmFsaWR8a2V5UHJlc3NlZHxrZXlSZWxlYXNlZHxrZXlib2FyZFJlYWR8a25vYlJlYWR8bGVmdFRvUmlnaHR8bGluZXxsaW5lRm9sbG93Q29uZmlnfGxpc3RlbnxsaXN0ZW5PbkxvY2FsaG9zdHxsb2FkSW1hZ2V8bG9jYWxJUHxsb3dCeXRlfG1hY0FkZHJlc3N8bWFpbnRhaW58bWFwfG1heHxtZXNzYWdlQXZhaWxhYmxlfG1pY3Jvc3xtaWxsaXN8bWlufG1rZGlyfG1vdG9yc1N0b3B8bW90b3JzV3JpdGV8bW91c2VEcmFnZ2VkfG1vdXNlTW92ZWR8bW91c2VQcmVzc2VkfG1vdXNlUmVsZWFzZWR8bW92ZXxub0F1dG9zY3JvbGx8bm9CbGlua3xub0J1ZmZlcnxub0N1cnNvcnxub0Rpc3BsYXl8bm9GaWxsfG5vSW50ZXJydXB0c3xub0xpc3Rlbk9uTG9jYWxob3N0fG5vU3Ryb2tlfG5vVG9uZXxvblJlY2VpdmV8b25SZXF1ZXN0fG9wZW58b3Blbk5leHRGaWxlfG92ZXJmbG93fHBhcnNlQ29tbWFuZHxwYXJzZUZsb2F0fHBhcnNlSW50fHBhcnNlUGFja2V0fHBhdXNlTW9kZXxwZWVrfHBpbk1vZGV8cGxheUZpbGV8cGxheU1lbG9keXxwb2ludHxwb2ludFRvfHBvc2l0aW9ufHBvd3xwcmVwYXJlfHByZXNzfHByaW50fHByaW50RmlybXdhcmVWZXJzaW9ufHByaW50VmVyc2lvbnxwcmludGxufHByb2Nlc3N8cHJvY2Vzc0lucHV0fHB1bHNlSW58cHV0fHJhbmRvbXxyYW5kb21TZWVkfHJlYWR8cmVhZEFjY2VsZXJvbWV0ZXJ8cmVhZEJsdWV8cmVhZEJ1dHRvbnxyZWFkQnl0ZXN8cmVhZEJ5dGVzVW50aWx8cmVhZEdyZWVufHJlYWRKb3lzdGlja0J1dHRvbnxyZWFkSm95c3RpY2tTd2l0Y2h8cmVhZEpveXN0aWNrWHxyZWFkSm95c3RpY2tZfHJlYWRMaWdodFNlbnNvcnxyZWFkTWVzc2FnZXxyZWFkTWljcm9waG9uZXxyZWFkTmV0d29ya3N8cmVhZFJlZHxyZWFkU2xpZGVyfHJlYWRTdHJpbmd8cmVhZFN0cmluZ1VudGlsfHJlYWRUZW1wZXJhdHVyZXxyZWFkeXxyZWN0fHJlbGVhc2V8cmVsZWFzZUFsbHxyZW1vdGVJUHxyZW1vdGVOdW1iZXJ8cmVtb3RlUG9ydHxyZW1vdmV8cmVxdWVzdEZyb218cmV0cmlldmVDYWxsaW5nTnVtYmVyfHJld2luZERpcmVjdG9yeXxyaWdodFRvTGVmdHxybWRpcnxyb2JvdE5hbWVSZWFkfHJvYm90TmFtZVdyaXRlfHJ1bnxydW5Bc3luY2hyb25vdXNseXxydW5TaGVsbENvbW1hbmR8cnVuU2hlbGxDb21tYW5kQXN5bmNocm9ub3VzbHl8cnVubmluZ3xzY2FuTmV0d29ya3N8c2Nyb2xsRGlzcGxheUxlZnR8c2Nyb2xsRGlzcGxheVJpZ2h0fHNlZWt8c2VuZEFuYWxvZ3xzZW5kRGlnaXRhbFBvcnRQYWlyfHNlbmREaWdpdGFsUG9ydHN8c2VuZFN0cmluZ3xzZW5kU3lzZXh8c2VyaWFsRXZlbnR8c2V0QmFuZHxzZXRCaXRPcmRlcnxzZXRDbG9ja0RpdmlkZXJ8c2V0Q3Vyc29yfHNldEROU3xzZXREYXRhTW9kZXxzZXRGaXJtd2FyZVZlcnNpb258c2V0TW9kZXxzZXRQSU5Vc2VkfHNldFNwZWVkfHNldFRleHRTaXplfHNldFRpbWVvdXR8c2hpZnRJbnxzaGlmdE91dHxzaHV0ZG93bnxzaW58c2l6ZXxzcXJ0fHN0YXJ0TG9vcHxzdGVwfHN0b3B8c3Ryb2tlfHN1Ym5ldE1hc2t8c3dpdGNoUElOfHRhbnx0ZW1wb1dyaXRlfHRleHR8dG9uZXx0cmFuc2Zlcnx0dW5lV3JpdGV8dHVybnx1cGRhdGVJUnx1c2VyTmFtZVJlYWR8dXNlck5hbWVXcml0ZXx2b2ljZUNhbGx8d2FpdENvbnRpbnVlfHdpZHRofHdyaXRlfHdyaXRlQmx1ZXx3cml0ZUdyZWVufHdyaXRlSlNPTnx3cml0ZU1lc3NhZ2V8d3JpdGVNaWNyb3NlY29uZHN8d3JpdGVSR0J8d3JpdGVSZWR8eWllbGQpXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbm8gPSBQcmlzbS5sYW5ndWFnZXMuYXJkdWlubztcblxuUHJpc20ubGFuZ3VhZ2VzLmFyZmYgPSB7XG5cdCdjb21tZW50JzogLyUuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvQCg/OmF0dHJpYnV0ZXxkYXRhfGVuZHxyZWxhdGlvbilcXGIvaSxcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFybWFzbSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzsuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcclxcbl18XCJcIikqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteJF0pKD86XFwkezJ9KSopXFwkXFx3Ky8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W14nXFxyXFxuXXswLDR9fCcnKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmVyc2lvbi1zeW1ib2wnOiB7XG5cdFx0cGF0dGVybjogL1xcfFtcXHdAXStcXHwvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfFRSVUUpXFxiLyxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86QUxJQVN8QUxJR058QVJFQXxBUk18QVNTRVJUfEFUVFJ8Q058Q09ERXxDT0RFMTZ8Q09ERTMyfENPTU1PTnxDUHxEQVRBfERDQnxEQ0R8RENET3xEQ0RVfERDRkR8RENGRFV8RENJfERDUXxEQ1FVfERDV3xEQ1dVfEROfEVMSUZ8RUxTRXxFTkR8RU5ERlVOQ3xFTkRJRnxFTkRQfEVOVFJZfEVRVXxFWFBPUlR8RVhQT1JUQVN8RVhURVJOfEZJRUxEfEZJTEx8Rk58RlVOQ1RJT058R0JMQXxHQkxMfEdCTFN8R0VUfEdMT0JBTHxJRnxJTVBPUlR8SU5DQklOfElOQ0xVREV8SU5GT3xLRUVQfExDTEF8TENMTHxMQ0xTfExUT1JHfE1BQ1JPfE1BUHxNRU5EfE1FWElUfE5PRlB8T1BUfFBSRVNFUlZFOHxQUk9DfFFOfFJFQURPTkxZfFJFTE9DfFJFUVVJUkV8UkVRVUlSRTh8UkxJU1R8Uk9VVHxTRVRBfFNFVEx8U0VUU3xTTnxTUEFDRXxTVUJUfFRIVU1CfFRIVU1CWHxUVEx8V0VORHxXSElMRSlcXGIvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdpbnN0cnVjdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58KD86XnxbXlxcXFxdKSg/Olxcclxcbj98XFxuKSlbIFxcdF0qKD86KD86W0EtWl1bQS1aMC05X10qW2Etel1cXHcqfFthLXpdXFx3KnxcXGQrKVsgXFx0XSspPylcXGJbQS1aLl0rXFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXG5cdCdudW1iZXInOiAvKD86XFxiWzItOV1fXFxkK3woPzpcXGJcXGQrKD86XFwuXFxkKyk/fFxcQlxcLlxcZCspKD86ZS0/XFxkKyk/fFxcYjAoPzpbZmRdX3x4KVswLTlhLWZdK3wmWzAtOWEtZl0rKVxcYi9pLFxuXG5cdCdyZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86clxcZHxscilcXGIvLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9LFxuXG5cdCdvcGVyYXRvcic6IC88Pnw8PHw+PnwmJnxcXHxcXHx8Wz0hPD4vXT0/fFsrXFwtKiUjPyZ8Xl18OltBLVpdKzovLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzWydhcm0tYXNtJ10gPSBQcmlzbS5sYW5ndWFnZXMuYXJtYXNtO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKi9cblx0dmFyIGNyZWF0ZUxhbmd1YWdlU3RyaW5nID0gZnVuY3Rpb24gKGxhbmcsIHBhdHRlcm4pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC9cXHshLy5zb3VyY2UgKyAnKD86JyArIChwYXR0ZXJuIHx8IGxhbmcpICsgJyknICsgLyRbXFxzXFxTXSpcXH0vLnNvdXJjZSwgJ20nKSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZW1iZWRkZWQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFx7IVxcdytcXGIpW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS0nICsgbGFuZyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5hcnR1cm8gPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvOy4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnY2hhcmFjdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL2AuYC8sXG5cdFx0XHRhbGlhczogJ2NoYXInLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFxkKyg/OlxcLlxcZCsoPzpcXC5cXGQrKD86LVtcXHcrLV0rKT8pPyk/XFxiLyxcblx0XHR9LFxuXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdyZWdleCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtcXC8uKj9cXC9cXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdodG1sLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdodG1sJyksXG5cdFx0J2Nzcy1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnY3NzJyksXG5cdFx0J2pzLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdqcycpLFxuXHRcdCdtZC1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnbWQnKSxcblx0XHQnc3FsLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdzcWwnKSxcblx0XHQnc2gtc3RyaW5nJzogY3JlYXRlTGFuZ3VhZ2VTdHJpbmcoJ3NoZWxsJywgJ3NoJyksXG5cblx0XHQnbXVsdGlzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXHUwMEJCLip8XFx7OltcXHNcXFNdKj86XFx9fFxce1tcXHNcXFNdKj9cXH18Xi17Nn0kW1xcc1xcU10qL20sXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2xhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogL1xcdytcXGJcXD8/Oi8sXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cblx0XHQnbGl0ZXJhbCc6IHtcblx0XHRcdHBhdHRlcm46IC8nKD86XFx3K1xcYlxcPz86PykvLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXG5cdFx0J3R5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvOig/OlxcdytcXGJcXD8/Oj8pLyxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXG5cdFx0J2NvbG9yJzogLyNcXHcrLyxcblxuXHRcdCdwcmVkaWNhdGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YWxsfGFuZHxhbnl8YXNjaWl8YXR0cnxhdHRyaWJ1dGV8YXR0cmlidXRlTGFiZWx8YmluYXJ5fGJsb2NrfGNoYXJ8Y29udGFpbnN8ZGF0YWJhc2V8ZGF0ZXxkaWN0aW9uYXJ5fGVtcHR5fGVxdWFsfGV2ZW58ZXZlcnl8ZXhpc3RzfGZhbHNlfGZsb2F0aW5nfGZ1bmN0aW9ufGdyZWF0ZXJ8Z3JlYXRlck9yRXF1YWx8aWZ8aW58aW5saW5lfGludGVnZXJ8aXN8a2V5fGxhYmVsfGxlYXB8bGVzc3xsZXNzT3JFcXVhbHxsaXRlcmFsfGxvZ2ljYWx8bG93ZXJ8bmFuZHxuZWdhdGl2ZXxub3J8bm90fG5vdEVxdWFsfG51bGx8bnVtZXJpY3xvZGR8b3J8cGF0aHxwYXRoTGFiZWx8cG9zaXRpdmV8cHJlZml4fHByaW1lfHJlZ2V4fHNhbWV8c2V0fHNvbWV8c29ydGVkfHN0YW5kYWxvbmV8c3RyaW5nfHN1YnNldHxzdWZmaXh8c3VwZXJzZXR8c3ltYm9sfHN5bWJvbExpdGVyYWx8dHJ1ZXx0cnl8dHlwZXx1bmxlc3N8dXBwZXJ8d2hlbnx3aGl0ZXNwYWNlfHdvcmR8eG5vcnx4b3J8emVybylcXD8vLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQnYnVpbHRpbi1mdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzphYnN8YWNvc3xhY29zaHxhY3NlY3xhY3NlY2h8YWN0YW58YWN0YW5ofGFkZHxhZnRlcnxhbGVydHxhbGlhc3xhbmR8YW5nbGV8YXBwZW5kfGFyZ3xhcmdzfGFyaXR5fGFycmF5fGFzfGFzZWN8YXNlY2h8YXNpbnxhc2luaHxhdGFufGF0YW4yfGF0YW5ofGF0dHJ8YXR0cnN8YXZlcmFnZXxiZWZvcmV8YmVuY2htYXJrfGJsZW5kfGJyZWFrfGNhbGx8Y2FwaXRhbGl6ZXxjYXNlfGNlaWx8Y2hvcHxjbGVhcnxjbGlwfGNsb3NlfGNvbG9yfGNvbWJpbmV8Y29uanxjb250aW51ZXxjb3B5fGNvc3xjb3NofGNyY3xjc2VjfGNzZWNofGN0YW58Y3Rhbmh8Y3Vyc29yfGRhcmtlbnxkZWN8ZGVjb2RlfGRlZmluZXxkZWxldGV8ZGVzYXR1cmF0ZXxkZXZpYXRpb258ZGlhbG9nfGRpY3Rpb25hcnl8ZGlmZmVyZW5jZXxkaWdlc3R8ZGlnaXRzfGRpdnxkb3xkb3dubG9hZHxkcm9wfGR1cHxlfGVsc2V8ZW1wdHl8ZW5jb2RlfGVuc3VyZXxlbnZ8ZXNjYXBlfGV4ZWN1dGV8ZXhpdHxleHB8ZXh0ZW5kfGV4dHJhY3R8ZmFjdG9yc3xmZGl2fGZpbHRlcnxmaXJzdHxmbGF0dGVufGZsb29yfGZvbGR8ZnJvbXxmdW5jdGlvbnxnYW1tYXxnY2R8Z2V0fGdvdG98aGFzaHxoeXBvdHxpZnxpbmN8aW5kZW50fGluZGV4fGluZmluaXR5fGluZm98aW5wdXR8aW5zZXJ0fGluc3BlY3R8aW50ZXJzZWN0aW9ufGludmVydHxqYXJvfGpvaW58a2V5c3xrdXJ0b3Npc3xsYXN0fGxldHxsZXZlbnNodGVpbnxsaWdodGVufGxpc3R8bG58bG9nfGxvb3B8bG93ZXJ8bWFpbHxtYXB8bWF0Y2h8bWF4fG1lZGlhbnxtaW58bW9kfG1vZHVsZXxtdWx8bmFuZHxuZWd8bmV3fG5vcnxub3JtYWxpemV8bm90fG5vd3xudWxsfG9wZW58b3J8b3V0ZGVudHxwYWR8cGFsZXR0ZXxwYW5pY3xwYXRofHBhdXNlfHBlcm1pc3Npb25zfHBlcm11dGF0ZXxwaXxwb3B8cG9wdXB8cG93fHBvd2Vyc2V0fHBvd21vZHxwcmVmaXh8cHJpbnR8cHJpbnRzfHByb2Nlc3N8cHJvZHVjdHxxdWVyeXxyYW5kb218cmFuZ2V8cmVhZHxyZWxhdGl2ZXxyZW1vdmV8cmVuYW1lfHJlbmRlcnxyZXBlYXR8cmVwbGFjZXxyZXF1ZXN0fHJldHVybnxyZXZlcnNlfHJvdW5kfHNhbXBsZXxzYXR1cmF0ZXxzY3JpcHR8c2VjfHNlY2h8c2VsZWN0fHNlcnZlfHNldHxzaGx8c2hyfHNodWZmbGV8c2lufHNpbmh8c2l6ZXxza2V3bmVzc3xzbGljZXxzb3J0fHNwaW58c3BsaXR8c3FydHxzcXVlZXplfHN0YWNrfHN0cmlwfHN1YnxzdWZmaXh8c3VtfHN3aXRjaHxzeW1ib2xzfHN5bWxpbmt8c3lzfHRha2V8dGFufHRhbmh8dGVybWluYWx8dGVybWluYXRlfHRvfHRydW5jYXRlfHRyeXx0eXBlfHVuY2xpcHx1bmlvbnx1bmlxdWV8dW5sZXNzfHVudGlsfHVuemlwfHVwcGVyfHZhbHVlc3x2YXJ8dmFyaWFuY2V8dm9sdW1lfHdlYnZpZXd8d2hpbGV8d2l0aHx3b3Jkd3JhcHx3cml0ZXx4bm9yfHhvcnx6aXApXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J3N1Z2FyJzoge1xuXHRcdFx0cGF0dGVybjogLy0+fD0+fFxcfHw6Oi8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cblx0XHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdLyxcblxuXHRcdCdzeW1ib2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvPDp8LTp8XHUwMEY4fEB8I3xcXCt8XFx8fFxcKnxcXCR8LS0tfC18JXxcXC98XFwuXFwufFxcXnx+fD18PHw+fFxcXFwvXG5cdFx0fSxcblxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmZhbHNlfG1heWJlfHRydWUpXFxiL1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYXJ0ID0gUHJpc20ubGFuZ3VhZ2VzWydhcnR1cm8nXTtcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBhdHRyaWJ1dGVzID0ge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFxbKD8hXFxbKSg/OihbXCInJGBdKSg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSpcXDJ8XFxbKD86W15cXFtcXF1cXFxcXXxcXFxcLikqXFxdfFteXFxbXFxdXFxcXFwiJyRgXXxcXFxcLikqXFxdL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdxdW90ZWQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oWyRgXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqXFwxLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bJGBdfFskYF0kL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycHJldGVkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxdfFxcXFwuKSonLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14nfCckL1xuXHRcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHQndmFyaWFibGUnOiAvXFx3Kyg/PT0pLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbfFxcXSR8LC8sXG5cdFx0XHQnb3BlcmF0b3InOiAvPS8sXG5cdFx0XHQvLyBUaGUgbmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50cyBibGFuayBtYXRjaGVzXG5cdFx0XHQnYXR0ci12YWx1ZSc6IC8oPyFeXFxzKyQpLisvXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhc2NpaWRvYyA9IFByaXNtLmxhbmd1YWdlcy5hc2NpaWRvYyA9IHtcblx0XHQnY29tbWVudC1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFxcL3s0LH0pKD86XFxyP1xcbnxcXHIpKD86W1xcc1xcU10qKD86XFxyP1xcbnxcXHIpKT8/XFwxL20sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQndGFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxcfD17Myx9KD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKS4qKSo/KD86XFxyP1xcbnxcXHIpXFx8PXszLH0kL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3NwZWNpZmllcnMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/Oig/Oig/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKylbKypdKD86WzxePl0oPzpcXC5bPF4+XSk/fFxcLls8Xj5dKT98WzxePl0oPzpcXC5bPF4+XSk/fFxcLls8Xj5dKVthLXpdKnxbYS16XSspKD89XFx8KS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pW3whXT0qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Bhc3N0aHJvdWdoLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL14oXFwrezQsfSkoPzpcXHI/XFxufFxccikoPzpbXFxzXFxTXSooPzpcXHI/XFxufFxccikpPz9cXDEkL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCsrfFxcKyskL1xuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gTGl0ZXJhbCBibG9ja3MgYW5kIGxpc3RpbmcgYmxvY2tzXG5cdFx0J2xpdGVyYWwtYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXigtezQsfXxcXC57NCx9KSg/Olxccj9cXG58XFxyKSg/OltcXHNcXFNdKig/Olxccj9cXG58XFxyKSk/P1xcMSQvbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXig/Oi0rfFxcLispfCg/Oi0rfFxcLispJC9cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIFNpZGViYXIgYmxvY2tzLCBxdW90ZSBibG9ja3MsIGV4YW1wbGUgYmxvY2tzIGFuZCBvcGVuIGJsb2Nrc1xuXHRcdCdvdGhlci1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9eKC0tfFxcKns0LH18X3s0LH18PXs0LH0pKD86XFxyP1xcbnxcXHIpKD86W1xcc1xcU10qKD86XFxyP1xcbnxcXHIpKT8/XFwxJC9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eKD86LSt8XFwqK3xfK3w9Kyl8KD86LSt8XFwqK3xfK3w9KykkL1xuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBsaXN0LXB1bmN0dWF0aW9uIGFuZCBsaXN0LWxhYmVsIG11c3QgYXBwZWFyIGJlZm9yZSBpbmRlbnRlZC1ibG9ja1xuXHRcdCdsaXN0LXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzotfFxcKnsxLDV9fFxcLnsxLDV9fCg/OlthLXpdfFxcZCspXFwufFt4dmldK1xcKSkoPz0gKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J2xpc3QtbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVthLXpcXGRdLisoPzo6ezIsNH18OzspKD89XFxzKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXHRcdCdpbmRlbnRlZC1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC8oKFxccj9cXG58XFxyKVxcMikoWyBcXHRdKylcXFMuKig/Oig/Olxccj9cXG58XFxyKVxcMy4rKSooPz1cXDJ7Mn18JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnY29tbWVudCc6IC9eXFwvXFwvLiovbSxcblx0XHQndGl0bGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXi4rKD86XFxyP1xcbnxcXHIpKD86PXszLH18LXszLH18fnszLH18XFxeezMsfXxcXCt7Myx9KSR8Xj17MSw1fSAuK3xeXFwuKD8hW1xccy5dKS4qL20sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14oPzpcXC58PSspfCg/Oj0rfC0rfH4rfFxcXit8XFwrKykkL1xuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2F0dHJpYnV0ZS1lbnRyeSc6IHtcblx0XHRcdHBhdHRlcm46IC9eOlteOlxcclxcbl0rOig/OiAuKj8oPzogXFwrKD86XFxyP1xcbnxcXHIpLio/KSopPyQvbSxcblx0XHRcdGFsaWFzOiAndGFnJ1xuXHRcdH0sXG5cdFx0J2F0dHJpYnV0ZXMnOiBhdHRyaWJ1dGVzLFxuXHRcdCdocic6IHtcblx0XHRcdHBhdHRlcm46IC9eJ3szLH0kL20sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3BhZ2UtYnJlYWsnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjx7Myx9JC9tLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdhZG1vbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL14oPzpDQVVUSU9OfElNUE9SVEFOVHxOT1RFfFRJUHxXQVJOSU5HKTovbSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdjYWxsb3V0JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKTw/XFxkKj4vbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvPFxcZCs+Lyxcblx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbWFjcm8nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2EtelxcZF1bYS16XFxkLV0qOjo/KD86W15cXHNcXFtcXF1dKlxcWyg/OlteXFxdXFxcXFwiJ118KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSpcXDF8XFxcXC4pKlxcXSkvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eW2EtelxcZC1dKyg/PTopLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL146Oj8vLFxuXHRcdFx0XHQnYXR0cmlidXRlcyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD86XFxbKD86W15cXF1cXFxcXCInXXwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKlxcMXxcXFxcLikqXFxdKS8sXG5cdFx0XHRcdFx0aW5zaWRlOiBhdHRyaWJ1dGVzLmluc2lkZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaW5saW5lJzoge1xuXHRcdFx0Lypcblx0XHRcdFRoZSBpbml0aWFsIGxvb2stYmVoaW5kIHByZXZlbnRzIHRoZSBoaWdobGlnaHRpbmcgb2YgZXNjYXBlZCBxdW90ZWQgdGV4dC5cblxuXHRcdFx0UXVvdGVkIHRleHQgY2FuIGJlIG11bHRpLWxpbmUgYnV0IGNhbm5vdCBzcGFuIGFuIGVtcHR5IGxpbmUuXG5cdFx0XHRBbGwgcXVvdGVkIHRleHQgY2FuIGhhdmUgYXR0cmlidXRlcyBiZWZvcmUgW2Zvb2JhciwgJ2Zvb2JhcicsIGJhej1cImJhclwiXS5cblxuXHRcdFx0Rmlyc3QsIHdlIGhhbmRsZSB0aGUgY29uc3RyYWluZWQgcXVvdGVzLlxuXHRcdFx0VGhvc2UgbXVzdCBiZSBib3VuZGVkIGJ5IG5vbi13b3JkIGNoYXJzIGFuZCBjYW5ub3QgaGF2ZSBzcGFjZXMgYmV0d2VlbiB0aGUgZGVsaW1pdGVyIGFuZCB0aGUgZmlyc3QgY2hhci5cblx0XHRcdFRoZXkgYXJlLCBpbiBvcmRlcjogX2VtcGhhc2lzXywgYGBkb3VibGUgcXVvdGVzJycsIGBzaW5nbGUgcXVvdGVzJywgYG1vbm9zcGFjZWAsICdlbXBoYXNpcycsICpzdHJvbmcqLCArbW9ub3NwYWNlKyBhbmQgI3VucXVvdGVkI1xuXG5cdFx0XHRUaGVuIHdlIGhhbmRsZSB0aGUgdW5jb25zdHJhaW5lZCBxdW90ZXMuXG5cdFx0XHRUaG9zZSBkbyBub3QgaGF2ZSB0aGUgcmVzdHJpY3Rpb25zIG9mIHRoZSBjb25zdHJhaW5lZCBxdW90ZXMuXG5cdFx0XHRUaGV5IGFyZSwgaW4gb3JkZXI6IF9fZW1waGFzaXNfXywgKipzdHJvbmcqKiwgKyttb25vc3BhY2UrKywgKysrcGFzc3Rocm91Z2grKyssICMjdW5xdW90ZWQjIywgJCRwYXNzdGhyb3VnaCQkLCB+c3Vic2NyaXB0fiwgXnN1cGVyc2NyaXB0Xiwge2F0dHJpYnV0ZS1yZWZlcmVuY2V9LCBbW2FuY2hvcl1dLCBbW1tiaWJsaW9ncmFwaHkgYW5jaG9yXV1dLCA8PHhyZWY+PiwgKCgoaW5kZXhlcykpKSBhbmQgKChpbmRleGVzKSlcblx0XHRcdCAqL1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86KD86XFxCXFxbKD86W15cXF1cXFxcXCInXXwoW1wiJ10pKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKlxcMnxcXFxcLikqXFxdKT8oPzpcXGJfKD8hXFxzKSg/OiBffFteX1xcXFxcXHJcXG5dfFxcXFwuKSsoPzooPzpcXHI/XFxufFxccikoPzogX3xbXl9cXFxcXFxyXFxuXXxcXFxcLikrKSpfXFxifFxcQmBgKD8hXFxzKS4rPyg/Oig/Olxccj9cXG58XFxyKS4rPykqJydcXEJ8XFxCYCg/IVxccykoPzpbXmAnXFxzXXxcXHMrXFxTKStbJ2BdXFxCfFxcQihbJyorI10pKD8hXFxzKSg/OiBcXDN8KD8hXFwzKVteXFxcXFxcclxcbl18XFxcXC4pKyg/Oig/Olxccj9cXG58XFxyKSg/OiBcXDN8KD8hXFwzKVteXFxcXFxcclxcbl18XFxcXC4pKykqXFwzXFxCKXwoPzpcXFsoPzpbXlxcXVxcXFxcIiddfChbXCInXSkoPzooPyFcXDQpW15cXFxcXXxcXFxcLikqXFw0fFxcXFwuKSpcXF0pPyg/OihfX3xcXCpcXCp8XFwrXFwrXFwrP3wjI3xcXCRcXCR8W35eXSkuKz8oPzooPzpcXHI/XFxufFxccikuKz8pKlxcNXxcXHtbXn1cXHJcXG5dK1xcfXxcXFtcXFtcXFs/Lis/KD86KD86XFxyP1xcbnxcXHIpLis/KSpcXF0/XFxdXFxdfDw8Lis/KD86KD86XFxyP1xcbnxcXHIpLis/KSo+PnxcXChcXChcXCg/Lis/KD86KD86XFxyP1xcbnxcXHIpLis/KSpcXCk/XFwpXFwpKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2F0dHJpYnV0ZXMnOiBhdHRyaWJ1dGVzLFxuXHRcdFx0XHQndXJsJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKD86XFxbXFxbXFxbPy4rP1xcXT9cXF1cXF18PDwuKz8+PikkLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eKD86XFxbXFxbXFxbP3w8PCl8KD86XFxdXFxdXFxdP3w+PikkL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2F0dHJpYnV0ZS1yZWYnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXHsuK1xcfSQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXHspW2EtelxcZCwrXy1dKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXls9PyEjJUAkXXwhKD89Wzp9XSkvLFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXHt8XFx9JHw6Oj8vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaXRhbGljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFsnX10pW1xcc1xcU10rXFwxJC8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXig/OicnP3xfXz8pfCg/OicnP3xfXz8pJC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdib2xkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFwqW1xcc1xcU10rXFwqJC8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRwdW5jdHVhdGlvbjogL15cXCpcXCo/fFxcKlxcKj8kL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14oPzpgYD98XFwrezEsM318IyM/fFxcJFxcJHxbfl5dfFxcKFxcKFxcKD8pfCg/OicnP3xcXCt7MSwzfXwjIz98XFwkXFwkfFt+XmBdfFxcKT9cXClcXCkpJC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdyZXBsYWNlbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCgoPzpDfFJ8VE0pXFwpLyxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9LFxuXHRcdCdlbnRpdHknOiAvJiM/W1xcZGEtel17MSw4fTsvaSxcblx0XHQnbGluZS1jb250aW51YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58IClcXCskL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH07XG5cblxuXHQvLyBBbGxvdyBzb21lIG5lc3RpbmcuIFRoZXJlIGlzIG5vIHJlY3Vyc2lvbiB0aG91Z2gsIHNvIGNsb25pbmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQuXG5cblx0ZnVuY3Rpb24gY29weUZyb21Bc2NpaURvYyhrZXlzKSB7XG5cdFx0a2V5cyA9IGtleXMuc3BsaXQoJyAnKTtcblxuXHRcdHZhciBvID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0b1trZXlzW2ldXSA9IGFzY2lpZG9jW2tleXNbaV1dO1xuXHRcdH1cblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGF0dHJpYnV0ZXMuaW5zaWRlWydpbnRlcnByZXRlZCddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnbWFjcm8gaW5saW5lIHJlcGxhY2VtZW50IGVudGl0eScpO1xuXG5cdGFzY2lpZG9jWydwYXNzdGhyb3VnaC1ibG9jayddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnbWFjcm8nKTtcblxuXHRhc2NpaWRvY1snbGl0ZXJhbC1ibG9jayddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnY2FsbG91dCcpO1xuXG5cdGFzY2lpZG9jWyd0YWJsZSddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnY29tbWVudC1ibG9jayBwYXNzdGhyb3VnaC1ibG9jayBsaXRlcmFsLWJsb2NrIG90aGVyLWJsb2NrIGxpc3QtcHVuY3R1YXRpb24gaW5kZW50ZWQtYmxvY2sgY29tbWVudCB0aXRsZSBhdHRyaWJ1dGUtZW50cnkgYXR0cmlidXRlcyBociBwYWdlLWJyZWFrIGFkbW9uaXRpb24gbGlzdC1sYWJlbCBjYWxsb3V0IG1hY3JvIGlubGluZSByZXBsYWNlbWVudCBlbnRpdHkgbGluZS1jb250aW51YXRpb24nKTtcblxuXHRhc2NpaWRvY1snb3RoZXItYmxvY2snXS5pbnNpZGUucmVzdCA9IGNvcHlGcm9tQXNjaWlEb2MoJ3RhYmxlIGxpc3QtcHVuY3R1YXRpb24gaW5kZW50ZWQtYmxvY2sgY29tbWVudCBhdHRyaWJ1dGUtZW50cnkgYXR0cmlidXRlcyBociBwYWdlLWJyZWFrIGFkbW9uaXRpb24gbGlzdC1sYWJlbCBtYWNybyBpbmxpbmUgcmVwbGFjZW1lbnQgZW50aXR5IGxpbmUtY29udGludWF0aW9uJyk7XG5cblx0YXNjaWlkb2NbJ3RpdGxlJ10uaW5zaWRlLnJlc3QgPSBjb3B5RnJvbUFzY2lpRG9jKCdtYWNybyBpbmxpbmUgcmVwbGFjZW1lbnQgZW50aXR5Jyk7XG5cblxuXHQvLyBQbHVnaW4gdG8gbWFrZSBlbnRpdHkgdGl0bGUgc2hvdyB0aGUgcmVhbCBlbnRpdHksIGlkZWEgYnkgUm9tYW4gS29tYXJvdlxuXHRQcmlzbS5ob29rcy5hZGQoJ3dyYXAnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi50eXBlID09PSAnZW50aXR5Jykge1xuXHRcdFx0ZW52LmF0dHJpYnV0ZXNbJ3RpdGxlJ10gPSBlbnYuY29udGVudC5yZXBsYWNlKC8mYW1wOy8sICcmJyk7XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYWRvYyA9IFByaXNtLmxhbmd1YWdlcy5hc2NpaWRvYztcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBSZXBsYWNlcyBhbGwgcGxhY2Vob2xkZXJzIFwiPDxuPj5cIiBvZiBnaXZlbiBwYXR0ZXJuIHdpdGggdGhlIG4tdGggcmVwbGFjZW1lbnQgKHplcm8gYmFzZWQpLlxuXHQgKlxuXHQgKiBOb3RlOiBUaGlzIGlzIGEgc2ltcGxlIHRleHQgYmFzZWQgcmVwbGFjZW1lbnQuIEJlIGNhcmVmdWwgd2hlbiB1c2luZyBiYWNrcmVmZXJlbmNlcyFcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm4gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50cyBhIGxpc3Qgb2YgcmVwbGFjZW1lbnQgd2hpY2ggY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwYXR0ZXJuIHdpdGggYWxsIHBsYWNlaG9sZGVycyByZXBsYWNlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnRzLlxuXHQgKiBAZXhhbXBsZSByZXBsYWNlKC9hPDwwPj5hLy5zb3VyY2UsIFsvYisvLnNvdXJjZV0pID09PSAvYSg/OmIrKWEvLnNvdXJjZVxuXHQgKi9cblx0ZnVuY3Rpb24gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpIHtcblx0XHRyZXR1cm4gcGF0dGVybi5yZXBsYWNlKC88PChcXGQrKT4+L2csIGZ1bmN0aW9uIChtLCBpbmRleCkge1xuXHRcdFx0cmV0dXJuICcoPzonICsgcmVwbGFjZW1lbnRzWytpbmRleF0gKyAnKSc7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gcmUocGF0dGVybiwgcmVwbGFjZW1lbnRzLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAocmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpLCBmbGFncyB8fCAnJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5lc3RlZCBwYXR0ZXJuIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc3RyaW5nIGA8PHNlbGY+PmAgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHBhdHRlcm4gaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gZGVwdGhMb2cyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBuZXN0ZWQocGF0dGVybiwgZGVwdGhMb2cyKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXB0aExvZzI7IGkrKykge1xuXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXR0ZXJuICsgJyknOyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgJ1teXFxcXHNcXFxcU10nKTtcblx0fVxuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvbGFuZ3VhZ2UtcmVmZXJlbmNlL2tleXdvcmRzL1xuXHR2YXIga2V5d29yZEtpbmRzID0ge1xuXHRcdC8vIGtleXdvcmRzIHdoaWNoIHJlcHJlc2VudCBhIHJldHVybiBvciB2YXJpYWJsZSB0eXBlXG5cdFx0dHlwZTogJ2Jvb2wgYnl0ZSBjaGFyIGRlY2ltYWwgZG91YmxlIGR5bmFtaWMgZmxvYXQgaW50IGxvbmcgb2JqZWN0IHNieXRlIHNob3J0IHN0cmluZyB1aW50IHVsb25nIHVzaG9ydCB2YXIgdm9pZCcsXG5cdFx0Ly8ga2V5d29yZHMgd2hpY2ggYXJlIHVzZWQgdG8gZGVjbGFyZSBhIHR5cGVcblx0XHR0eXBlRGVjbGFyYXRpb246ICdjbGFzcyBlbnVtIGludGVyZmFjZSByZWNvcmQgc3RydWN0Jyxcblx0XHQvLyBjb250ZXh0dWFsIGtleXdvcmRzXG5cdFx0Ly8gKFwidmFyXCIgYW5kIFwiZHluYW1pY1wiIGFyZSBtaXNzaW5nIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBsaWtlIHR5cGVzKVxuXHRcdGNvbnRleHR1YWw6ICdhZGQgYWxpYXMgYW5kIGFzY2VuZGluZyBhc3luYyBhd2FpdCBieSBkZXNjZW5kaW5nIGZyb20oPz1cXFxccyooPzpcXFxcd3wkKSkgZ2V0IGdsb2JhbCBncm91cCBpbnRvIGluaXQoPz1cXFxccyo7KSBqb2luIGxldCBuYW1lb2Ygbm90IG5vdG51bGwgb24gb3Igb3JkZXJieSBwYXJ0aWFsIHJlbW92ZSBzZWxlY3Qgc2V0IHVubWFuYWdlZCB2YWx1ZSB3aGVuIHdoZXJlIHdpdGgoPz1cXFxccyp7KScsXG5cdFx0Ly8gYWxsIG90aGVyIGtleXdvcmRzXG5cdFx0b3RoZXI6ICdhYnN0cmFjdCBhcyBiYXNlIGJyZWFrIGNhc2UgY2F0Y2ggY2hlY2tlZCBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRlbGVnYXRlIGRvIGVsc2UgZXZlbnQgZXhwbGljaXQgZXh0ZXJuIGZpbmFsbHkgZml4ZWQgZm9yIGZvcmVhY2ggZ290byBpZiBpbXBsaWNpdCBpbiBpbnRlcm5hbCBpcyBsb2NrIG5hbWVzcGFjZSBuZXcgbnVsbCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNlYWxlZCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1bmNoZWNrZWQgdW5zYWZlIHVzaW5nIHZpcnR1YWwgdm9sYXRpbGUgd2hpbGUgeWllbGQnXG5cdH07XG5cblx0Ly8ga2V5d29yZHNcblx0ZnVuY3Rpb24ga2V5d29yZHNUb1BhdHRlcm4od29yZHMpIHtcblx0XHRyZXR1cm4gJ1xcXFxiKD86JyArIHdvcmRzLnRyaW0oKS5yZXBsYWNlKC8gL2csICd8JykgKyAnKVxcXFxiJztcblx0fVxuXHR2YXIgdHlwZURlY2xhcmF0aW9uS2V5d29yZHMgPSBrZXl3b3Jkc1RvUGF0dGVybihrZXl3b3JkS2luZHMudHlwZURlY2xhcmF0aW9uKTtcblx0dmFyIGtleXdvcmRzID0gUmVnRXhwKGtleXdvcmRzVG9QYXR0ZXJuKGtleXdvcmRLaW5kcy50eXBlICsgJyAnICsga2V5d29yZEtpbmRzLnR5cGVEZWNsYXJhdGlvbiArICcgJyArIGtleXdvcmRLaW5kcy5jb250ZXh0dWFsICsgJyAnICsga2V5d29yZEtpbmRzLm90aGVyKSk7XG5cdHZhciBub25UeXBlS2V5d29yZHMgPSBrZXl3b3Jkc1RvUGF0dGVybihrZXl3b3JkS2luZHMudHlwZURlY2xhcmF0aW9uICsgJyAnICsga2V5d29yZEtpbmRzLmNvbnRleHR1YWwgKyAnICcgKyBrZXl3b3JkS2luZHMub3RoZXIpO1xuXHR2YXIgbm9uQ29udGV4dHVhbEtleXdvcmRzID0ga2V5d29yZHNUb1BhdHRlcm4oa2V5d29yZEtpbmRzLnR5cGUgKyAnICcgKyBrZXl3b3JkS2luZHMudHlwZURlY2xhcmF0aW9uICsgJyAnICsga2V5d29yZEtpbmRzLm90aGVyKTtcblxuXHQvLyB0eXBlc1xuXHR2YXIgZ2VuZXJpYyA9IG5lc3RlZCgvPCg/OltePD47PStcXC0qLyUmfF5dfDw8c2VsZj4+KSo+Ly5zb3VyY2UsIDIpOyAvLyB0aGUgaWRlYSBiZWhpbmQgdGhlIG90aGVyIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGlzIHRvIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzLiBTYW1lIGZvciB0dXBsZUVsZW1lbnQuXG5cdHZhciBuZXN0ZWRSb3VuZCA9IG5lc3RlZCgvXFwoKD86W14oKV18PDxzZWxmPj4pKlxcKS8uc291cmNlLCAyKTtcblx0dmFyIG5hbWUgPSAvQD9cXGJbQS1aYS16X11cXHcqXFxiLy5zb3VyY2U7XG5cdHZhciBnZW5lcmljTmFtZSA9IHJlcGxhY2UoLzw8MD4+KD86XFxzKjw8MT4+KT8vLnNvdXJjZSwgW25hbWUsIGdlbmVyaWNdKTtcblx0dmFyIGlkZW50aWZpZXIgPSByZXBsYWNlKC8oPyE8PDA+Pik8PDE+Pig/OlxccypcXC5cXHMqPDwxPj4pKi8uc291cmNlLCBbbm9uVHlwZUtleXdvcmRzLCBnZW5lcmljTmFtZV0pO1xuXHR2YXIgYXJyYXkgPSAvXFxbXFxzKig/OixcXHMqKSpcXF0vLnNvdXJjZTtcblx0dmFyIHR5cGVFeHByZXNzaW9uV2l0aG91dFR1cGxlID0gcmVwbGFjZSgvPDwwPj4oPzpcXHMqKD86XFw/XFxzKik/PDwxPj4pKig/OlxccypcXD8pPy8uc291cmNlLCBbaWRlbnRpZmllciwgYXJyYXldKTtcblx0dmFyIHR1cGxlRWxlbWVudCA9IHJlcGxhY2UoL1teLCgpPD5bXFxdOz0rXFwtKi8lJnxeXXw8PDA+Pnw8PDE+Pnw8PDI+Pi8uc291cmNlLCBbZ2VuZXJpYywgbmVzdGVkUm91bmQsIGFycmF5XSk7XG5cdHZhciB0dXBsZSA9IHJlcGxhY2UoL1xcKDw8MD4+Kyg/Oiw8PDA+PispK1xcKS8uc291cmNlLCBbdHVwbGVFbGVtZW50XSk7XG5cdHZhciB0eXBlRXhwcmVzc2lvbiA9IHJlcGxhY2UoLyg/Ojw8MD4+fDw8MT4+KSg/OlxccyooPzpcXD9cXHMqKT88PDI+PikqKD86XFxzKlxcPyk/Ly5zb3VyY2UsIFt0dXBsZSwgaWRlbnRpZmllciwgYXJyYXldKTtcblxuXHR2YXIgdHlwZUluc2lkZSA9IHtcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKT8sLjpbXFxdXS9cblx0fTtcblxuXHQvLyBzdHJpbmdzICYgY2hhcmFjdGVyc1xuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL2xhbmd1YWdlLXJlZmVyZW5jZS9sYW5ndWFnZS1zcGVjaWZpY2F0aW9uL2xleGljYWwtc3RydWN0dXJlI2NoYXJhY3Rlci1saXRlcmFsc1xuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL2xhbmd1YWdlLXJlZmVyZW5jZS9sYW5ndWFnZS1zcGVjaWZpY2F0aW9uL2xleGljYWwtc3RydWN0dXJlI3N0cmluZy1saXRlcmFsc1xuXHR2YXIgY2hhcmFjdGVyID0gLycoPzpbXlxcclxcbidcXFxcXXxcXFxcLnxcXFxcW1V1eF1bXFxkYS1mQS1GXXsxLDh9KScvLnNvdXJjZTsgLy8gc2ltcGxpZmllZCBwYXR0ZXJuXG5cdHZhciByZWd1bGFyU3RyaW5nID0gL1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIi8uc291cmNlO1xuXHR2YXIgdmVyYmF0aW1TdHJpbmcgPSAvQFwiKD86XCJcInxcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIig/IVwiKS8uc291cmNlO1xuXG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzaGFycCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXnxbXiRcXFxcXSk8PDA+Pi8uc291cmNlLCBbdmVyYmF0aW1TdHJpbmddKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKF58W15AJFxcXFxdKTw8MD4+Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFVzaW5nIHN0YXRpY1xuXHRcdFx0XHQvLyB1c2luZyBzdGF0aWMgU3lzdGVtLk1hdGg7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxidXNpbmdcXHMrc3RhdGljXFxzKyk8PDA+Pig/PVxccyo7KS8uc291cmNlLCBbaWRlbnRpZmllcl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFVzaW5nIGFsaWFzICh0eXBlKVxuXHRcdFx0XHQvLyB1c2luZyBQcm9qZWN0ID0gUEMuTXlDb21wYW55LlByb2plY3Q7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxidXNpbmdcXHMrPDwwPj5cXHMqPVxccyopPDwxPj4oPz1cXHMqOykvLnNvdXJjZSwgW25hbWUsIHR5cGVFeHByZXNzaW9uXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gVXNpbmcgYWxpYXMgKGFsaWFzKVxuXHRcdFx0XHQvLyB1c2luZyBQcm9qZWN0ID0gUEMuTXlDb21wYW55LlByb2plY3Q7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxidXNpbmdcXHMrKTw8MD4+KD89XFxzKj0pLy5zb3VyY2UsIFtuYW1lXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFR5cGUgZGVjbGFyYXRpb25zXG5cdFx0XHRcdC8vIGNsYXNzIEZvbzxBLCBCPlxuXHRcdFx0XHQvLyBpbnRlcmZhY2UgRm9vPG91dCBBLCBCPlxuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYjw8MD4+XFxzKyk8PDE+Pi8uc291cmNlLCBbdHlwZURlY2xhcmF0aW9uS2V5d29yZHMsIGdlbmVyaWNOYW1lXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gU2luZ2xlIGNhdGNoIGV4Y2VwdGlvbiBkZWNsYXJhdGlvblxuXHRcdFx0XHQvLyBjYXRjaChGb28pXG5cdFx0XHRcdC8vICh0aGluZ3MgbGlrZSBjYXRjaChGb28gZSkgaXMgY292ZXJlZCBieSB2YXJpYWJsZSBkZWNsYXJhdGlvbilcblx0XHRcdFx0cGF0dGVybjogcmUoLyhcXGJjYXRjaFxccypcXChcXHMqKTw8MD4+Ly5zb3VyY2UsIFtpZGVudGlmaWVyXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gTmFtZSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIgb2YgZ2VuZXJpYyBjb25zdHJhaW50c1xuXHRcdFx0XHQvLyB3aGVyZSBGb28gOiBjbGFzc1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYndoZXJlXFxzKyk8PDA+Pi8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBDYXN0cyBhbmQgY2hlY2tzIHZpYSBhcyBhbmQgaXMuXG5cdFx0XHRcdC8vIGFzIEZvbzxBPiwgaXMgQmFyPEI+XG5cdFx0XHRcdC8vICh0aGluZ3MgbGlrZSBpZihhIGlzIEZvbyBiKSBpcyBjb3ZlcmVkIGJ5IHZhcmlhYmxlIGRlY2xhcmF0aW9uKVxuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYig/OmlzKD86XFxzK25vdCk/fGFzKVxccyspPDwwPj4vLnNvdXJjZSwgW3R5cGVFeHByZXNzaW9uV2l0aG91dFR1cGxlXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gVmFyaWFibGUsIGZpZWxkIGFuZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25cblx0XHRcdFx0Ly8gKEZvbyBiYXIsIEJhciBiYXosIEZvb1ssLF0gYmF5LCBGb288QmFyLCBGb29CYXI8QmFyPj4gYmF4KVxuXHRcdFx0XHRwYXR0ZXJuOiByZSgvXFxiPDwwPj4oPz1cXHMrKD8hPDwxPj58d2l0aFxccypcXHspPDwyPj4oPzpcXHMqWz0sOzp7KVxcXV18XFxzKyg/OmlufHdoZW4pXFxiKSkvLnNvdXJjZSwgW3R5cGVFeHByZXNzaW9uLCBub25Db250ZXh0dWFsS2V5d29yZHMsIG5hbWVdKSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvbGFuZ3VhZ2UtcmVmZXJlbmNlL2xhbmd1YWdlLXNwZWNpZmljYXRpb24vbGV4aWNhbC1zdHJ1Y3R1cmUjbGl0ZXJhbHNcblx0XHQnbnVtYmVyJzogLyg/OlxcYjAoPzp4W1xcZGEtZl9dKltcXGRhLWZdfGJbMDFfXSpbMDFdKXwoPzpcXEJcXC5cXGQrKD86XytcXGQrKSp8XFxiXFxkKyg/Ol8rXFxkKykqKD86XFwuXFxkKyg/Ol8rXFxkKykqKT8pKD86ZVstK10/XFxkKyg/Ol8rXFxkKykqKT8pKD86W2RmbG11XXxsdXx1bCk/XFxiL2ksXG5cdFx0J29wZXJhdG9yJzogLz4+PT98PDw9P3xbLT1dPnwoWy0rJnxdKVxcMXx+fFxcP1xcPz0/fFstKyovJSZ8XiE9PD5dPT8vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXD9cXC4/fDo6fFt7fVtcXF07KCksLjpdL1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAnbnVtYmVyJywge1xuXHRcdCdyYW5nZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzaGFycCcsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnbmFtZWQtcGFyYW1ldGVyJzoge1xuXHRcdFx0cGF0dGVybjogcmUoLyhbKCxdXFxzKik8PDA+Pig/PVxccyo6KS8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAnY2xhc3MtbmFtZScsIHtcblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0Ly8gbmFtZXNwYWNlIEZvby5CYXIge31cblx0XHRcdC8vIHVzaW5nIEZvby5CYXI7XG5cdFx0XHRwYXR0ZXJuOiByZSgvKFxcYig/Om5hbWVzcGFjZXx1c2luZylcXHMrKTw8MD4+KD86XFxzKlxcLlxccyo8PDA+PikqKD89XFxzKls7e10pLy5zb3VyY2UsIFtuYW1lXSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndHlwZS1leHByZXNzaW9uJzoge1xuXHRcdFx0Ly8gZGVmYXVsdChGb28pLCB0eXBlb2YoRm9vPEJhcj4pLCBzaXplb2YoaW50KVxuXHRcdFx0cGF0dGVybjogcmUoLyhcXGIoPzpkZWZhdWx0fHNpemVvZnx0eXBlb2YpXFxzKlxcKFxccyooPyFcXHMpKSg/OlteKClcXHNdfFxccyg/IVxccyl8PDwwPj4pKig/PVxccypcXCkpLy5zb3VyY2UsIFtuZXN0ZWRSb3VuZF0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHR9LFxuXHRcdCdyZXR1cm4tdHlwZSc6IHtcblx0XHRcdC8vIEZvbzxCYXI+IEZvckJhcigpOyBGb28gSUZvby5CYXIoKSA9PiAwXG5cdFx0XHQvLyBpbnQgdGhpc1tpbnQgaW5kZXhdID0+IDA7IFQgSVJlYWRPbmx5TGlzdDxUPi50aGlzW2ludCBpbmRleF0gPT4gdGhpc1tpbmRleF07XG5cdFx0XHQvLyBpbnQgRm9vID0+IDA7IGludCBGb28geyBnZXQ7IHNldCB9ID0gMDtcblx0XHRcdHBhdHRlcm46IHJlKC88PDA+Pig/PVxccysoPzo8PDE+PlxccyooPzo9PnxbKHtdfFxcLlxccyp0aGlzXFxzKlxcWyl8dGhpc1xccypcXFspKS8uc291cmNlLCBbdHlwZUV4cHJlc3Npb24sIGlkZW50aWZpZXJdKSxcblx0XHRcdGluc2lkZTogdHlwZUluc2lkZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdjb25zdHJ1Y3Rvci1pbnZvY2F0aW9uJzoge1xuXHRcdFx0Ly8gbmV3IExpc3Q8Rm9vPEJhcltdPj4geyB9XG5cdFx0XHRwYXR0ZXJuOiByZSgvKFxcYm5ld1xccyspPDwwPj4oPz1cXHMqW1soe10pLy5zb3VyY2UsIFt0eXBlRXhwcmVzc2lvbl0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogdHlwZUluc2lkZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdC8qJ2V4cGxpY2l0LWltcGxlbWVudGF0aW9uJzoge1xuXHRcdFx0Ly8gaW50IElGb288Rm9vPi5CYXIgPT4gMDsgdm9pZCBJRm9vPEZvbzxGb28+Pi5Gb288VD4oKTtcblx0XHRcdHBhdHRlcm46IHJlcGxhY2UoL1xcYjw8MD4+KD89XFwuPDwxPj4pLywgY2xhc3NOYW1lLCBtZXRob2RPclByb3BlcnR5RGVjbGFyYXRpb24pLFxuXHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSwqL1xuXHRcdCdnZW5lcmljLW1ldGhvZCc6IHtcblx0XHRcdC8vIGZvbzxCYXI+KClcblx0XHRcdHBhdHRlcm46IHJlKC88PDA+Plxccyo8PDE+Pig/PVxccypcXCgpLy5zb3VyY2UsIFtuYW1lLCBnZW5lcmljXSksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogcmUoL148PDA+Pi8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0XHQnZ2VuZXJpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoZ2VuZXJpYyksXG5cdFx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3R5cGUtbGlzdCc6IHtcblx0XHRcdC8vIFRoZSBsaXN0IG9mIHR5cGVzIGluaGVyaXRlZCBvciBvZiBnZW5lcmljIGNvbnN0cmFpbnRzXG5cdFx0XHQvLyBjbGFzcyBGb288Rj4gOiBCYXIsIElMaXN0PEZvb0Jhcj5cblx0XHRcdC8vIHdoZXJlIEYgOiBCYXIsIElMaXN0PGludD5cblx0XHRcdHBhdHRlcm46IHJlKFxuXHRcdFx0XHQvXFxiKCg/Ojw8MD4+XFxzKzw8MT4+fHJlY29yZFxccys8PDE+Plxccyo8PDU+Pnx3aGVyZVxccys8PDI+PilcXHMqOlxccyopKD86PDwzPj58PDw0Pj58PDwxPj5cXHMqPDw1Pj58PDw2Pj4pKD86XFxzKixcXHMqKD86PDwzPj58PDw0Pj58PDw2Pj4pKSooPz1cXHMqKD86d2hlcmV8W3s7XXw9PnwkKSkvLnNvdXJjZSxcblx0XHRcdFx0W3R5cGVEZWNsYXJhdGlvbktleXdvcmRzLCBnZW5lcmljTmFtZSwgbmFtZSwgdHlwZUV4cHJlc3Npb24sIGtleXdvcmRzLnNvdXJjZSwgbmVzdGVkUm91bmQsIC9cXGJuZXdcXHMqXFwoXFxzKlxcKS8uc291cmNlXVxuXHRcdFx0KSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3JlY29yZC1hcmd1bWVudHMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogcmUoLyheKD8hbmV3XFxzKlxcKCk8PDA+PlxccyopPDwxPj4vLnNvdXJjZSwgW2dlbmVyaWNOYW1lLCBuZXN0ZWRSb3VuZF0pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNzaGFycFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodHlwZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssKCldL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ByZXByb2Nlc3Nvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopIy4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gaGlnaGxpZ2h0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFzIGtleXdvcmRzXG5cdFx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygjKVxcYig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZW5kcmVnaW9ufGVycm9yfGlmfGxpbmV8bnVsbGFibGV8cHJhZ21hfHJlZ2lvbnx1bmRlZnx3YXJuaW5nKVxcYi8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIGF0dHJpYnV0ZXNcblx0dmFyIHJlZ3VsYXJTdHJpbmdPckNoYXJhY3RlciA9IHJlZ3VsYXJTdHJpbmcgKyAnfCcgKyBjaGFyYWN0ZXI7XG5cdHZhciByZWd1bGFyU3RyaW5nQ2hhcmFjdGVyT3JDb21tZW50ID0gcmVwbGFjZSgvXFwvKD8hWyovXSl8XFwvXFwvW15cXHJcXG5dKltcXHJcXG5dfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvfDw8MD4+Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nT3JDaGFyYWN0ZXJdKTtcblx0dmFyIHJvdW5kRXhwcmVzc2lvbiA9IG5lc3RlZChyZXBsYWNlKC9bXlwiJy8oKV18PDwwPj58XFwoPDxzZWxmPj4qXFwpLy5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nQ2hhcmFjdGVyT3JDb21tZW50XSksIDIpO1xuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvcHJvZ3JhbW1pbmctZ3VpZGUvY29uY2VwdHMvYXR0cmlidXRlcy8jYXR0cmlidXRlLXRhcmdldHNcblx0dmFyIGF0dHJUYXJnZXQgPSAvXFxiKD86YXNzZW1ibHl8ZXZlbnR8ZmllbGR8bWV0aG9kfG1vZHVsZXxwYXJhbXxwcm9wZXJ0eXxyZXR1cm58dHlwZSlcXGIvLnNvdXJjZTtcblx0dmFyIGF0dHIgPSByZXBsYWNlKC88PDA+Pig/OlxccypcXCg8PDE+PipcXCkpPy8uc291cmNlLCBbaWRlbnRpZmllciwgcm91bmRFeHByZXNzaW9uXSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J2F0dHJpYnV0ZSc6IHtcblx0XHRcdC8vIEF0dHJpYnV0ZXNcblx0XHRcdC8vIFtGb29dLCBbRm9vKDEpLCBCYXIoMiwgUHJvcCA9IFwiZm9vXCIpXSwgW3JldHVybjogRm9vKDEpLCBCYXIoMildLCBbYXNzZW1ibHk6IEZvbyhCYXIpXVxuXHRcdFx0cGF0dGVybjogcmUoLygoPzpefFteXFxzXFx3Pik/XSlcXHMqXFxbXFxzKikoPzo8PDA+Plxccyo6XFxzKik/PDwxPj4oPzpcXHMqLFxccyo8PDE+PikqKD89XFxzKlxcXSkvLnNvdXJjZSwgW2F0dHJUYXJnZXQsIGF0dHJdKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RhcmdldCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvXjw8MD4+KD89XFxzKjopLy5zb3VyY2UsIFthdHRyVGFyZ2V0XSksXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXR0cmlidXRlLWFyZ3VtZW50cyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvXFwoPDwwPj4qXFwpLy5zb3VyY2UsIFtyb3VuZEV4cHJlc3Npb25dKSxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnBcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGlkZW50aWZpZXIpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bOixdL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblxuXHQvLyBzdHJpbmcgaW50ZXJwb2xhdGlvblxuXHR2YXIgZm9ybWF0U3RyaW5nID0gLzpbXn1cXHJcXG5dKy8uc291cmNlO1xuXHQvLyBtdWx0aSBsaW5lXG5cdHZhciBtSW50ZXJwb2xhdGlvblJvdW5kID0gbmVzdGVkKHJlcGxhY2UoL1teXCInLygpXXw8PDA+PnxcXCg8PHNlbGY+PipcXCkvLnNvdXJjZSwgW3JlZ3VsYXJTdHJpbmdDaGFyYWN0ZXJPckNvbW1lbnRdKSwgMik7XG5cdHZhciBtSW50ZXJwb2xhdGlvbiA9IHJlcGxhY2UoL1xceyg/IVxceykoPzooPyFbfTpdKTw8MD4+KSo8PDE+Pj9cXH0vLnNvdXJjZSwgW21JbnRlcnBvbGF0aW9uUm91bmQsIGZvcm1hdFN0cmluZ10pO1xuXHQvLyBzaW5nbGUgbGluZVxuXHR2YXIgc0ludGVycG9sYXRpb25Sb3VuZCA9IG5lc3RlZChyZXBsYWNlKC9bXlwiJy8oKV18XFwvKD8hXFwqKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3w8PDA+PnxcXCg8PHNlbGY+PipcXCkvLnNvdXJjZSwgW3JlZ3VsYXJTdHJpbmdPckNoYXJhY3Rlcl0pLCAyKTtcblx0dmFyIHNJbnRlcnBvbGF0aW9uID0gcmVwbGFjZSgvXFx7KD8hXFx7KSg/Oig/IVt9Ol0pPDwwPj4pKjw8MT4+P1xcfS8uc291cmNlLCBbc0ludGVycG9sYXRpb25Sb3VuZCwgZm9ybWF0U3RyaW5nXSk7XG5cblx0ZnVuY3Rpb24gY3JlYXRlSW50ZXJwb2xhdGlvbkluc2lkZShpbnRlcnBvbGF0aW9uLCBpbnRlcnBvbGF0aW9uUm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oKD86XnxbXntdKSg/Olxce1xceykqKTw8MD4+Ly5zb3VyY2UsIFtpbnRlcnBvbGF0aW9uXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdmb3JtYXQtc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheXFx7KD86KD8hW306XSk8PDA+PikqKTw8MT4+KD89XFx9JCkvLnNvdXJjZSwgW2ludGVycG9sYXRpb25Sb3VuZCwgZm9ybWF0U3RyaW5nXSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eOi9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFx7fFxcfSQvLFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWNzaGFycCcsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9O1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ3N0cmluZycsIHtcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXnxbXlxcXFxdKSg/OlxcJEB8QFxcJClcIig/OlwiXCJ8XFxcXFtcXHNcXFNdfFxce1xce3w8PDA+PnxbXlxcXFx7XCJdKSpcIi8uc291cmNlLCBbbUludGVycG9sYXRpb25dKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNyZWF0ZUludGVycG9sYXRpb25JbnNpZGUobUludGVycG9sYXRpb24sIG1JbnRlcnBvbGF0aW9uUm91bmQpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogcmUoLyhefFteQFxcXFxdKVxcJFwiKD86XFxcXC58XFx7XFx7fDw8MD4+fFteXFxcXFwie10pKlwiLy5zb3VyY2UsIFtzSW50ZXJwb2xhdGlvbl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY3JlYXRlSW50ZXJwb2xhdGlvbkluc2lkZShzSW50ZXJwb2xhdGlvbiwgc0ludGVycG9sYXRpb25Sb3VuZCksXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY2hhcic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChjaGFyYWN0ZXIpLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZG90bmV0ID0gUHJpc20ubGFuZ3VhZ2VzLmNzID0gUHJpc20ubGFuZ3VhZ2VzLmNzaGFycDtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuYXNwbmV0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHQncGFnZS1kaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLzwlXFxzKkAuKiU+Lyxcblx0XHRhbGlhczogJ3RhZycsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncGFnZS1kaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC88JVxccypAXFxzKig/OkFzc2VtYmx5fENvbnRyb2x8SW1wbGVtZW50c3xJbXBvcnR8TWFzdGVyKD86VHlwZSk/fE91dHB1dENhY2hlfFBhZ2V8UHJldmlvdXNQYWdlVHlwZXxSZWZlcmVuY2V8UmVnaXN0ZXIpP3wlPi9pLFxuXHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5pbnNpZGVcblx0XHR9XG5cdH0sXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLzwlLiolPi8sXG5cdFx0YWxpYXM6ICd0YWcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLzwlXFxzKj9bJD0lIzpdezAsMn18JT4vLFxuXHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuY3NoYXJwXG5cdFx0fVxuXHR9XG59KTtcbi8vIFJlZ2V4cCBjb3BpZWQgZnJvbSBwcmlzbS1tYXJrdXAsIHdpdGggYSBuZWdhdGl2ZSBsb29rLWFoZWFkIGFkZGVkXG5QcmlzbS5sYW5ndWFnZXMuYXNwbmV0LnRhZy5wYXR0ZXJuID0gLzwoPyElKVxcLz9bXlxccz5cXC9dKyg/OlxccytbXlxccz5cXC89XSsoPzo9KD86KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDF8W15cXHMnXCI+PV0rKSk/KSpcXHMqXFwvPz4vO1xuXG4vLyBtYXRjaCBkaXJlY3RpdmVzIG9mIGF0dHJpYnV0ZSB2YWx1ZSBmb289XCI8JSBCYXIgJT5cIlxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ3B1bmN0dWF0aW9uJywge1xuXHQnZGlyZWN0aXZlJzogUHJpc20ubGFuZ3VhZ2VzLmFzcG5ldFsnZGlyZWN0aXZlJ11cbn0sIFByaXNtLmxhbmd1YWdlcy5hc3BuZXQudGFnLmluc2lkZVsnYXR0ci12YWx1ZSddKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYXNwbmV0JywgJ2NvbW1lbnQnLCB7XG5cdCdhc3AtY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvPCUtLVtcXHNcXFNdKj8tLSU+Lyxcblx0XHRhbGlhczogWydhc3AnLCAnY29tbWVudCddXG5cdH1cbn0pO1xuXG4vLyBzY3JpcHQgcnVuYXQ9XCJzZXJ2ZXJcIiBjb250YWlucyBjc2hhcnAsIG5vdCBqYXZhc2NyaXB0XG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdhc3BuZXQnLCBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdCA/ICdzY3JpcHQnIDogJ3RhZycsIHtcblx0J2FzcC1zY3JpcHQnOiB7XG5cdFx0cGF0dGVybjogLyg8c2NyaXB0KD89LipydW5hdD1bJ1wiXT9zZXJ2ZXJcXGIpW14+XSo+KVtcXHNcXFNdKj8oPz08XFwvc2NyaXB0PikvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiBbJ2FzcCcsICdzY3JpcHQnXSxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnAgfHwge31cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5hc202NTAyID0ge1xuXHQnY29tbWVudCc6IC87LiovLFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXC5cXHcrKD89ICkvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdzdHJpbmcnOiAvKFtcIidgXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0J29wLWNvZGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFEQ3xBTkR8QVNMfEJDQ3xCQ1N8QkVRfEJJVHxCTUl8Qk5FfEJQTHxCUkt8QlZDfEJWU3xDTEN8Q0xEfENMSXxDTFZ8Q01QfENQWHxDUFl8REVDfERFWHxERVl8RU9SfElOQ3xJTlh8SU5ZfEpNUHxKU1J8TERBfExEWHxMRFl8TFNSfE5PUHxPUkF8UEhBfFBIUHxQTEF8UExQfFJPTHxST1J8UlRJfFJUU3xTQkN8U0VDfFNFRHxTRUl8U1RBfFNUWHxTVFl8VEFYfFRBWXxUU1h8VFhBfFRYU3xUWUF8YWRjfGFuZHxhc2x8YmNjfGJjc3xiZXF8Yml0fGJtaXxibmV8YnBsfGJya3xidmN8YnZzfGNsY3xjbGR8Y2xpfGNsdnxjbXB8Y3B4fGNweXxkZWN8ZGV4fGRleXxlb3J8aW5jfGlueHxpbnl8am1wfGpzcnxsZGF8bGR4fGxkeXxsc3J8bm9wfG9yYXxwaGF8cGhwfHBsYXxwbHB8cm9sfHJvcnxydGl8cnRzfHNiY3xzZWN8c2VkfHNlaXxzdGF8c3R4fHN0eXx0YXh8dGF5fHRzeHx0eGF8dHhzfHR5YSlcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2hleC1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/XFwkW1xcZGEtZl17MSw0fVxcYi9pLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnYmluYXJ5LW51bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvIz8lWzAxXStcXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnZGVjaW1hbC1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/XFxiXFxkK1xcYi8sXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdyZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW3h5YV1cXGIvaSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpLDpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFzbWF0bWVsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvOy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY29uc3RhbnQnOiAvXFxiKD86UE9SVFtBLVpdfEREUltBLVpdfCg/OkREfFApW0EtWl0oPzpcXGR8WzAtMl1cXGR8M1swMV0pKVxcYi8sXG5cblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFwuXFx3Kyg/PSApLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnci1yZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxicig/OlxcZHxbMTJdXFxkfDNbMDFdKVxcYi8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J29wLWNvZGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFEQ3xBRER8QURJV3xBTkR8QU5ESXxBU1J8QkNMUnxCTER8QlJCQ3xCUkJTfEJSQ0N8QlJDU3xCUkVBS3xCUkVRfEJSR0V8QlJIQ3xCUkhTfEJSSUR8QlJJRXxCUkxPfEJSTFR8QlJNSXxCUk5FfEJSUEx8QlJTSHxCUlRDfEJSVFN8QlJWQ3xCUlZTfEJTRVR8QlNUfENBTEx8Q0JJfENCUnxDTEN8Q0xIfENMSXxDTE58Q0xSfENMU3xDTFR8Q0xWfENMWnxDT018Q1B8Q1BDfENQSXxDUFNFfERFQ3xERVN8RUlDQUxMfEVJSk1QfEVMUE18RU9SfEZNVUx8Rk1VTFN8Rk1VTFNVfElDQUxMfElKTVB8SU58SU5DfEpNUHxMQUN8TEFTfExBVHxMRHxMRFtBLVphLXowLTldfExQTXxMU0x8TFNSfE1PVnxNT1ZXfE1VTHxNVUxTfE1VTFNVfE5FR3xOT1B8T1J8T1JJfE9VVHxQT1B8UFVTSHxSQ0FMTHxSRVR8UkVUSXxSSk1QfFJPTHxST1J8U0JDfFNCQ0l8U0JJfFNCSUN8U0JJU3xTQklXfFNCUnxTQlJDfFNCUlN8U0VDfFNFSHxTRUl8U0VOfFNFUnxTRVN8U0VUfFNFVnxTRVp8U0xFRVB8U1BNfFNUfFNUW0EtWjAtOV18U1VCfFNVQkl8U1dBUHxUU1R8V0RSfFhDSHxhZGN8YWRkfGFkaXd8YW5kfGFuZGl8YXNyfGJjbHJ8YmxkfGJyYmN8YnJic3xicmNjfGJyY3N8YnJlYWt8YnJlcXxicmdlfGJyaGN8YnJoc3xicmlkfGJyaWV8YnJsb3xicmx0fGJybWl8YnJuZXxicnBsfGJyc2h8YnJ0Y3xicnRzfGJydmN8YnJ2c3xic2V0fGJzdHxjYWxsfGNiaXxjYnJ8Y2xjfGNsaHxjbGl8Y2xufGNscnxjbHN8Y2x0fGNsdnxjbHp8Y29tfGNwfGNwY3xjcGl8Y3BzZXxkZWN8ZGVzfGVpY2FsbHxlaWptcHxlbHBtfGVvcnxmbXVsfGZtdWxzfGZtdWxzdXxpY2FsbHxpam1wfGlufGluY3xqbXB8bGFjfGxhc3xsYXR8bGR8bGRbYS16MC05XXxscG18bHNsfGxzcnxtb3Z8bW92d3xtdWx8bXVsc3xtdWxzdXxuZWd8bm9wfG9yfG9yaXxvdXR8cG9wfHB1c2h8cmNhbGx8cmV0fHJldGl8cmptcHxyb2x8cm9yfHNiY3xzYmNpfHNiaXxzYmljfHNiaXN8c2Jpd3xzYnJ8c2JyY3xzYnJzfHNlY3xzZWh8c2VpfHNlbnxzZXJ8c2VzfHNldHxzZXZ8c2V6fHNsZWVwfHNwbXxzdHxzdFthLXpBLVowLTldfHN1YnxzdWJpfHN3YXB8dHN0fHdkcnx4Y2gpXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdoZXgtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jP1xcJFtcXGRhLWZdezIsNH1cXGIvaSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2JpbmFyeS1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/JVswMV0rXFxiLyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2RlY2ltYWwtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jP1xcYlxcZCtcXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQncmVnaXN0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYlthY3pudnNodGl4eV1cXGIvaSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvPj49P3w8PD0/fCZbJj1dP3xcXHxbXFx8PV0/fFstKyovJV4hPTw+P109Py8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCksOl0vXG59O1xuXG4vLyBOT1RFUyAtIGZvbGxvd3MgZmlyc3QtZmlyc3QgaGlnaGxpZ2h0IG1ldGhvZCwgYmxvY2sgaXMgbG9ja2VkIGFmdGVyIGhpZ2hsaWdodCwgZGlmZmVyZW50IGZyb20gU3ludGF4SGxcblByaXNtLmxhbmd1YWdlcy5hdXRvaG90a2V5ID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKTsuKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKVxcL1xcKig/OltcXHJcXG5dKD8hWyBcXHRdKlxcKlxcLyl8W15cXHJcXG5dKSooPzpbXFxyXFxuXVsgXFx0XSpcXCpcXC8pPy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3RhZyc6IHtcblx0XHQvLyBsYWJlbHNcblx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKVteXFxzLGBcIjpdKyg/PTpbIFxcdF0qJCkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiAvXCIoPzpbXlwiXFxuXFxyXXxcIlwiKSpcIi8sXG5cdCd2YXJpYWJsZSc6IC8lXFx3KyUvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdLT9cXGQrKT8vLFxuXHQnb3BlcmF0b3InOiAvXFw/fFxcL1xcLz89P3w6PXxcXHxbPXxdP3wmWz0mXT98XFwrWz0rXT98LVs9LV0/fFxcKls9Kl0/fDwoPzo8PT98Pnw9KT98Pj4/PT98Wy5eIT1+XT0/fFxcYig/OkFORHxOT1R8T1IpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdjb21tYW5kJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpBdXRvVHJpbXxCbG9ja0lucHV0fEJyZWFrfENsaWNrfENsaXBXYWl0fENvbnRpbnVlfENvbnRyb2x8Q29udHJvbENsaWNrfENvbnRyb2xGb2N1c3xDb250cm9sR2V0fENvbnRyb2xHZXRGb2N1c3xDb250cm9sR2V0UG9zfENvbnRyb2xHZXRUZXh0fENvbnRyb2xNb3ZlfENvbnRyb2xTZW5kfENvbnRyb2xTZW5kUmF3fENvbnRyb2xTZXRUZXh0fENvb3JkTW9kZXxDcml0aWNhbHxEZXRlY3RIaWRkZW5UZXh0fERldGVjdEhpZGRlbldpbmRvd3N8RHJpdmV8RHJpdmVHZXR8RHJpdmVTcGFjZUZyZWV8RW52QWRkfEVudkRpdnxFbnZHZXR8RW52TXVsdHxFbnZTZXR8RW52U3VifEVudlVwZGF0ZXxFeGl0fEV4aXRBcHB8RmlsZUFwcGVuZHxGaWxlQ29weXxGaWxlQ29weURpcnxGaWxlQ3JlYXRlRGlyfEZpbGVDcmVhdGVTaG9ydGN1dHxGaWxlRGVsZXRlfEZpbGVFbmNvZGluZ3xGaWxlR2V0QXR0cmlifEZpbGVHZXRTaG9ydGN1dHxGaWxlR2V0U2l6ZXxGaWxlR2V0VGltZXxGaWxlR2V0VmVyc2lvbnxGaWxlSW5zdGFsbHxGaWxlTW92ZXxGaWxlTW92ZURpcnxGaWxlUmVhZHxGaWxlUmVhZExpbmV8RmlsZVJlY3ljbGV8RmlsZVJlY3ljbGVFbXB0eXxGaWxlUmVtb3ZlRGlyfEZpbGVTZWxlY3RGaWxlfEZpbGVTZWxlY3RGb2xkZXJ8RmlsZVNldEF0dHJpYnxGaWxlU2V0VGltZXxGb3JtYXRUaW1lfEdldEtleVN0YXRlfEdvc3VifEdvdG98R3JvdXBBY3RpdmF0ZXxHcm91cEFkZHxHcm91cENsb3NlfEdyb3VwRGVhY3RpdmF0ZXxHdWl8R3VpQ29udHJvbHxHdWlDb250cm9sR2V0fEhvdGtleXxJbWFnZVNlYXJjaHxJbmlEZWxldGV8SW5pUmVhZHxJbmlXcml0ZXxJbnB1dHxJbnB1dEJveHxLZXlXYWl0fExpc3RIb3RrZXlzfExpc3RMaW5lc3xMaXN0VmFyc3xMb29wfE1lbnV8TW91c2VDbGlja3xNb3VzZUNsaWNrRHJhZ3xNb3VzZUdldFBvc3xNb3VzZU1vdmV8TXNnQm94fE9uRXhpdHxPdXRwdXREZWJ1Z3xQYXVzZXxQaXhlbEdldENvbG9yfFBpeGVsU2VhcmNofFBvc3RNZXNzYWdlfFByb2Nlc3N8UHJvZ3Jlc3N8UmFuZG9tfFJlZ0RlbGV0ZXxSZWdSZWFkfFJlZ1dyaXRlfFJlbG9hZHxSZXBlYXR8UmV0dXJufFJ1bnxSdW5Bc3xSdW5XYWl0fFNlbmR8U2VuZEV2ZW50fFNlbmRJbnB1dHxTZW5kTWVzc2FnZXxTZW5kTW9kZXxTZW5kUGxheXxTZW5kUmF3fFNldEJhdGNoTGluZXN8U2V0Q2Fwc2xvY2tTdGF0ZXxTZXRDb250cm9sRGVsYXl8U2V0RGVmYXVsdE1vdXNlU3BlZWR8U2V0RW52fFNldEZvcm1hdHxTZXRLZXlEZWxheXxTZXRNb3VzZURlbGF5fFNldE51bWxvY2tTdGF0ZXxTZXRSZWdWaWV3fFNldFNjcm9sbExvY2tTdGF0ZXxTZXRTdG9yZUNhcHNsb2NrTW9kZXxTZXRUaW1lcnxTZXRUaXRsZU1hdGNoTW9kZXxTZXRXaW5EZWxheXxTZXRXb3JraW5nRGlyfFNodXRkb3dufFNsZWVwfFNvcnR8U291bmRCZWVwfFNvdW5kR2V0fFNvdW5kR2V0V2F2ZVZvbHVtZXxTb3VuZFBsYXl8U291bmRTZXR8U291bmRTZXRXYXZlVm9sdW1lfFNwbGFzaEltYWdlfFNwbGFzaFRleHRPZmZ8U3BsYXNoVGV4dE9ufFNwbGl0UGF0aHxTdGF0dXNCYXJHZXRUZXh0fFN0YXR1c0JhcldhaXR8U3RyaW5nQ2FzZVNlbnNlfFN0cmluZ0dldFBvc3xTdHJpbmdMZWZ0fFN0cmluZ0xlbnxTdHJpbmdMb3dlcnxTdHJpbmdNaWR8U3RyaW5nUmVwbGFjZXxTdHJpbmdSaWdodHxTdHJpbmdTcGxpdHxTdHJpbmdUcmltTGVmdHxTdHJpbmdUcmltUmlnaHR8U3RyaW5nVXBwZXJ8U3VzcGVuZHxTeXNHZXR8VGhyZWFkfFRvb2xUaXB8VHJhbnNmb3JtfFRyYXlUaXB8VVJMRG93bmxvYWRUb0ZpbGV8V2luQWN0aXZhdGV8V2luQWN0aXZhdGVCb3R0b218V2luQ2xvc2V8V2luR2V0fFdpbkdldEFjdGl2ZVN0YXRzfFdpbkdldEFjdGl2ZVRpdGxlfFdpbkdldENsYXNzfFdpbkdldFBvc3xXaW5HZXRUZXh0fFdpbkdldFRpdGxlfFdpbkhpZGV8V2luS2lsbHxXaW5NYXhpbWl6ZXxXaW5NZW51U2VsZWN0SXRlbXxXaW5NaW5pbWl6ZXxXaW5NaW5pbWl6ZUFsbHxXaW5NaW5pbWl6ZUFsbFVuZG98V2luTW92ZXxXaW5SZXN0b3JlfFdpblNldHxXaW5TZXRUaXRsZXxXaW5TaG93fFdpbldhaXR8V2luV2FpdEFjdGl2ZXxXaW5XYWl0Q2xvc2V8V2luV2FpdE5vdEFjdGl2ZSlcXGIvaSxcblx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHR9LFxuXG5cdCdjb25zdGFudCc6IC9cXGIoPzphX2Foa3BhdGh8YV9haGt2ZXJzaW9ufGFfYXBwZGF0YXxhX2FwcGRhdGFjb21tb258YV9hdXRvdHJpbXxhX2JhdGNobGluZXN8YV9jYXJldHh8YV9jYXJldHl8YV9jb21wdXRlcm5hbWV8YV9jb250cm9sZGVsYXl8YV9jdXJzb3J8YV9kZHxhX2RkZHxhX2RkZGR8YV9kZWZhdWx0bW91c2VzcGVlZHxhX2Rlc2t0b3B8YV9kZXNrdG9wY29tbW9ufGFfZGV0ZWN0aGlkZGVudGV4dHxhX2RldGVjdGhpZGRlbndpbmRvd3N8YV9lbmRjaGFyfGFfZXZlbnRpbmZvfGFfZXhpdHJlYXNvbnxhX2ZpbGVlbmNvZGluZ3xhX2Zvcm1hdGZsb2F0fGFfZm9ybWF0aW50ZWdlcnxhX2d1aXxhX2d1aWNvbnRyb2x8YV9ndWljb250cm9sZXZlbnR8YV9ndWlldmVudHxhX2d1aWhlaWdodHxhX2d1aXdpZHRofGFfZ3VpeHxhX2d1aXl8YV9ob3VyfGFfaWNvbmZpbGV8YV9pY29uaGlkZGVufGFfaWNvbm51bWJlcnxhX2ljb250aXB8YV9pbmRleHxhX2lwYWRkcmVzczF8YV9pcGFkZHJlc3MyfGFfaXBhZGRyZXNzM3xhX2lwYWRkcmVzczR8YV9pczY0Yml0b3N8YV9pc2FkbWlufGFfaXNjb21waWxlZHxhX2lzY3JpdGljYWx8YV9pc3BhdXNlZHxhX2lzc3VzcGVuZGVkfGFfaXN1bmljb2RlfGFfa2V5ZGVsYXl8YV9sYW5ndWFnZXxhX2xhc3RlcnJvcnxhX2xpbmVmaWxlfGFfbGluZW51bWJlcnxhX2xvb3BmaWVsZHxhX2xvb3BmaWxlYXR0cmlifGFfbG9vcGZpbGVkaXJ8YV9sb29wZmlsZWV4dHxhX2xvb3BmaWxlZnVsbHBhdGh8YV9sb29wZmlsZWxvbmdwYXRofGFfbG9vcGZpbGVuYW1lfGFfbG9vcGZpbGVzaG9ydG5hbWV8YV9sb29wZmlsZXNob3J0cGF0aHxhX2xvb3BmaWxlc2l6ZXxhX2xvb3BmaWxlc2l6ZWtifGFfbG9vcGZpbGVzaXplbWJ8YV9sb29wZmlsZXRpbWVhY2Nlc3NlZHxhX2xvb3BmaWxldGltZWNyZWF0ZWR8YV9sb29wZmlsZXRpbWVtb2RpZmllZHxhX2xvb3ByZWFkbGluZXxhX2xvb3ByZWdrZXl8YV9sb29wcmVnbmFtZXxhX2xvb3ByZWdzdWJrZXl8YV9sb29wcmVndGltZW1vZGlmaWVkfGFfbG9vcHJlZ3R5cGV8YV9tZGF5fGFfbWlufGFfbW18YV9tbW18YV9tbW1tfGFfbW9ufGFfbW91c2VkZWxheXxhX21zZWN8YV9teWRvY3VtZW50c3xhX25vd3xhX25vd3V0Y3xhX251bWJhdGNobGluZXN8YV9vc3R5cGV8YV9vc3ZlcnNpb258YV9wcmlvcmhvdGtleXxhX3ByaW9ya2V5fGFfcHJvZ3JhbWZpbGVzfGFfcHJvZ3JhbXN8YV9wcm9ncmFtc2NvbW1vbnxhX3B0cnNpemV8YV9yZWd2aWV3fGFfc2NyZWVuZHBpfGFfc2NyZWVuaGVpZ2h0fGFfc2NyZWVud2lkdGh8YV9zY3JpcHRkaXJ8YV9zY3JpcHRmdWxscGF0aHxhX3NjcmlwdGh3bmR8YV9zY3JpcHRuYW1lfGFfc2VjfGFfc3BhY2V8YV9zdGFydG1lbnV8YV9zdGFydG1lbnVjb21tb258YV9zdGFydHVwfGFfc3RhcnR1cGNvbW1vbnxhX3N0cmluZ2Nhc2VzZW5zZXxhX3RhYnxhX3RlbXB8YV90aGlzZnVuY3xhX3RoaXNob3RrZXl8YV90aGlzbGFiZWx8YV90aGlzbWVudXxhX3RoaXNtZW51aXRlbXxhX3RoaXNtZW51aXRlbXBvc3xhX3RpY2tjb3VudHxhX3RpbWVpZGxlfGFfdGltZWlkbGVwaHlzaWNhbHxhX3RpbWVzaW5jZXByaW9yaG90a2V5fGFfdGltZXNpbmNldGhpc2hvdGtleXxhX3RpdGxlbWF0Y2htb2RlfGFfdGl0bGVtYXRjaG1vZGVzcGVlZHxhX3VzZXJuYW1lfGFfd2RheXxhX3dpbmRlbGF5fGFfd2luZGlyfGFfd29ya2luZ2RpcnxhX3lkYXl8YV95ZWFyfGFfeXdlZWt8YV95eXl5fGNsaXBib2FyZHxjbGlwYm9hcmRhbGx8Y29tc3BlY3xlcnJvcmxldmVsfHByb2dyYW1maWxlcylcXGIvaSxcblxuXHQnYnVpbHRpbic6IC9cXGIoPzphYnN8YWNvc3xhc2N8YXNpbnxhdGFufGNlaWx8Y2hyfGNsYXNzfGNvbW9iamFjdGl2ZXxjb21vYmphcnJheXxjb21vYmpjb25uZWN0fGNvbW9iamNyZWF0ZXxjb21vYmplcnJvcnxjb21vYmpmbGFnc3xjb21vYmpnZXR8Y29tb2JqcXVlcnl8Y29tb2JqdHlwZXxjb21vYmp2YWx1ZXxjb3N8ZGxsY2FsbHxleHB8ZmlsZWV4aXN0fEZpbGVvcGVufGZsb29yfGZvcm1hdHxpbF9hZGR8aWxfY3JlYXRlfGlsX2Rlc3Ryb3l8aW5zdHJ8aXNmdW5jfGlzbGFiZWx8SXNPYmplY3R8bG58bG9nfGx0cmltfGx2X2FkZHxsdl9kZWxldGV8bHZfZGVsZXRlY29sfGx2X2dldGNvdW50fGx2X2dldG5leHR8bHZfZ2V0dGV4dHxsdl9pbnNlcnR8bHZfaW5zZXJ0Y29sfGx2X21vZGlmeXxsdl9tb2RpZnljb2x8bHZfc2V0aW1hZ2VsaXN0fG1vZHxudW1nZXR8bnVtcHV0fG9ubWVzc2FnZXxyZWdleG1hdGNofHJlZ2V4cmVwbGFjZXxyZWdpc3RlcmNhbGxiYWNrfHJvdW5kfHJ0cmltfHNiX3NldGljb258c2Jfc2V0cGFydHN8c2Jfc2V0dGV4dHxzaW58c3FydHxzdHJsZW58c3RycmVwbGFjZXxzdHJzcGxpdHxzdWJzdHJ8dGFufHR2X2FkZHx0dl9kZWxldGV8dHZfZ2V0fHR2X2dldGNoaWxkfHR2X2dldGNvdW50fHR2X2dldG5leHR8dHZfZ2V0cGFyZW50fHR2X2dldHByZXZ8dHZfZ2V0c2VsZWN0aW9ufHR2X2dldHRleHR8dHZfbW9kaWZ5fHZhcnNldGNhcGFjaXR5fHdpbmFjdGl2ZXx3aW5leGlzdHxfX0NhbGx8X19HZXR8X19OZXd8X19TZXQpXFxiL2ksXG5cblx0J3N5bWJvbCc6IC9cXGIoPzphbHR8YWx0ZG93bnxhbHR1cHxhcHBza2V5fGJhY2tzcGFjZXxicm93c2VyX2JhY2t8YnJvd3Nlcl9mYXZvcml0ZXN8YnJvd3Nlcl9mb3J3YXJkfGJyb3dzZXJfaG9tZXxicm93c2VyX3JlZnJlc2h8YnJvd3Nlcl9zZWFyY2h8YnJvd3Nlcl9zdG9wfGJzfGNhcHNsb2NrfGN0cmx8Y3RybGJyZWFrfGN0cmxkb3dufGN0cmx1cHxkZWx8ZGVsZXRlfGRvd258ZW5kfGVudGVyfGVzY3xlc2NhcGV8ZjF8ZjEwfGYxMXxmMTJ8ZjEzfGYxNHxmMTV8ZjE2fGYxN3xmMTh8ZjE5fGYyfGYyMHxmMjF8ZjIyfGYyM3xmMjR8ZjN8ZjR8ZjV8ZjZ8Zjd8Zjh8Zjl8aG9tZXxpbnN8aW5zZXJ0fGpveTF8am95MTB8am95MTF8am95MTJ8am95MTN8am95MTR8am95MTV8am95MTZ8am95MTd8am95MTh8am95MTl8am95Mnxqb3kyMHxqb3kyMXxqb3kyMnxqb3kyM3xqb3kyNHxqb3kyNXxqb3kyNnxqb3kyN3xqb3kyOHxqb3kyOXxqb3kzfGpveTMwfGpveTMxfGpveTMyfGpveTR8am95NXxqb3k2fGpveTd8am95OHxqb3k5fGpveWF4ZXN8am95YnV0dG9uc3xqb3lpbmZvfGpveW5hbWV8am95cG92fGpveXJ8am95dXxqb3l2fGpveXh8am95eXxqb3l6fGxhbHR8bGF1bmNoX2FwcDF8bGF1bmNoX2FwcDJ8bGF1bmNoX21haWx8bGF1bmNoX21lZGlhfGxidXR0b258bGNvbnRyb2x8bGN0cmx8bGVmdHxsc2hpZnR8bHdpbnxsd2luZG93bnxsd2ludXB8bWJ1dHRvbnxtZWRpYV9uZXh0fG1lZGlhX3BsYXlfcGF1c2V8bWVkaWFfcHJldnxtZWRpYV9zdG9wfG51bWxvY2t8bnVtcGFkMHxudW1wYWQxfG51bXBhZDJ8bnVtcGFkM3xudW1wYWQ0fG51bXBhZDV8bnVtcGFkNnxudW1wYWQ3fG51bXBhZDh8bnVtcGFkOXxudW1wYWRhZGR8bnVtcGFkY2xlYXJ8bnVtcGFkZGVsfG51bXBhZGRpdnxudW1wYWRkb3R8bnVtcGFkZG93bnxudW1wYWRlbmR8bnVtcGFkZW50ZXJ8bnVtcGFkaG9tZXxudW1wYWRpbnN8bnVtcGFkbGVmdHxudW1wYWRtdWx0fG51bXBhZHBnZG58bnVtcGFkcGd1cHxudW1wYWRyaWdodHxudW1wYWRzdWJ8bnVtcGFkdXB8cGdkbnxwZ3VwfHByaW50c2NyZWVufHJhbHR8cmJ1dHRvbnxyY29udHJvbHxyY3RybHxyaWdodHxyc2hpZnR8cndpbnxyd2luZG93bnxyd2ludXB8c2Nyb2xsbG9ja3xzaGlmdHxzaGlmdGRvd258c2hpZnR1cHxzcGFjZXx0YWJ8dXB8dm9sdW1lX2Rvd258dm9sdW1lX211dGV8dm9sdW1lX3VwfHdoZWVsZG93bnx3aGVlbGxlZnR8d2hlZWxyaWdodHx3aGVlbHVwfHhidXR0b24xfHhidXR0b24yKVxcYi9pLFxuXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLyNbYS16XStcXGIvaSxcblx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0fSxcblxuXHQna2V5d29yZCc6IC9cXGIoPzpBYm9ydHxBYm92ZU5vcm1hbHxBZGR8YWhrX2NsYXNzfGFoa19leGV8YWhrX2dyb3VwfGFoa19pZHxhaGtfcGlkfEFsbHxBbG51bXxBbHBoYXxBbHRTdWJtaXR8QWx0VGFifEFsdFRhYkFuZE1lbnV8QWx0VGFiTWVudXxBbHRUYWJNZW51RGlzbWlzc3xBbHdheXNPblRvcHxBdXRvU2l6ZXxCYWNrZ3JvdW5kfEJhY2tncm91bmRUcmFuc3xCZWxvd05vcm1hbHxiZXR3ZWVufEJpdEFuZHxCaXROb3R8Qml0T3J8Qml0U2hpZnRMZWZ0fEJpdFNoaWZ0UmlnaHR8Qml0WE9yfEJvbGR8Qm9yZGVyfEJ1dHRvbnxCeVJlZnxDYXRjaHxDaGVja2JveHxDaGVja2VkfENoZWNrZWRHcmF5fENob29zZXxDaG9vc2VTdHJpbmd8Q2xvc2V8Q29sb3J8Q29tYm9Cb3h8Q29udGFpbnN8Q29udHJvbExpc3R8Q291bnR8RGF0ZXxEYXRlVGltZXxEYXlzfERETHxEZWZhdWx0fERlbGV0ZUFsbHxEZWxpbWl0ZXJ8RGVyZWZ8RGVzdHJveXxEaWdpdHxEaXNhYmxlfERpc2FibGVkfERyb3BEb3duTGlzdHxFZGl0fEVqZWN0fEVsc2V8RW5hYmxlfEVuYWJsZWR8RXJyb3J8RXhpc3R8RXhwYW5kfEV4U3R5bGV8RmlsZVN5c3RlbXxGaW5hbGx5fEZpcnN0fEZsYXNofEZsb2F0fEZsb2F0RmFzdHxGb2N1c3xGb250fGZvcnxnbG9iYWx8R3JpZHxHcm91cHxHcm91cEJveHxHdWlDbG9zZXxHdWlDb250ZXh0TWVudXxHdWlEcm9wRmlsZXN8R3VpRXNjYXBlfEd1aVNpemV8SGRyfEhpZGRlbnxIaWRlfEhpZ2h8SEtDQ3xIS0NSfEhLQ1V8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0xPQ0FMX01BQ0hJTkV8SEtFWV9VU0VSU3xIS0xNfEhLVXxIb3Vyc3xIU2Nyb2xsfEljb258SWNvblNtYWxsfElEfElETGFzdHxJZnxJZkVxdWFsfElmRXhpc3R8SWZHcmVhdGVyfElmR3JlYXRlck9yRXF1YWx8SWZJblN0cmluZ3xJZkxlc3N8SWZMZXNzT3JFcXVhbHxJZk1zZ0JveHxJZk5vdEVxdWFsfElmTm90RXhpc3R8SWZOb3RJblN0cmluZ3xJZldpbkFjdGl2ZXxJZldpbkV4aXN0fElmV2luTm90QWN0aXZlfElmV2luTm90RXhpc3R8SWdub3JlfEltYWdlTGlzdHxpbnxJbnRlZ2VyfEludGVnZXJGYXN0fEludGVycnVwdHxpc3xpdGFsaWN8Sm9pbnxMYWJlbHxMYXN0Rm91bmR8TGFzdEZvdW5kRXhpc3R8TGltaXR8TGluZXN8TGlzdHxMaXN0Qm94fExpc3RWaWV3fGxvY2FsfExvY2t8TG9nb2ZmfExvd3xMb3dlcnxMb3dlcmNhc2V8TWFpbldpbmRvd3xNYXJnaW58TWF4aW1pemV8TWF4aW1pemVCb3h8TWF4U2l6ZXxNaW5pbWl6ZXxNaW5pbWl6ZUJveHxNaW5NYXh8TWluU2l6ZXxNaW51dGVzfE1vbnRoQ2FsfE1vdXNlfE1vdmV8TXVsdGl8TkF8Tm98Tm9BY3RpdmF0ZXxOb0RlZmF1bHR8Tm9IaWRlfE5vSWNvbnxOb01haW5XaW5kb3d8bm9ybXxOb3JtYWx8Tm9Tb3J0fE5vU29ydEhkcnxOb1N0YW5kYXJkfE5vdHxOb1RhYnxOb1RpbWVyc3xOdW1iZXJ8T2ZmfE9rfE9ufE93bkRpYWxvZ3N8T3duZXJ8UGFyc2V8UGFzc3dvcmR8UGljdHVyZXxQaXhlbHxQb3N8UG93fFByaW9yaXR5fFByb2Nlc3NOYW1lfFJhZGlvfFJhbmdlfFJlYWR8UmVhZE9ubHl8UmVhbHRpbWV8UmVkcmF3fFJlZ2lvbnxSRUdfQklOQVJZfFJFR19EV09SRHxSRUdfRVhQQU5EX1NafFJFR19NVUxUSV9TWnxSRUdfU1p8UmVsYXRpdmV8UmVuYW1lfFJlcG9ydHxSZXNpemV8UmVzdG9yZXxSZXRyeXxSR0J8U2NyZWVufFNlY29uZHN8U2VjdGlvbnxTZXJpYWx8U2V0TGFiZWx8U2hpZnRBbHRUYWJ8U2hvd3xTaW5nbGV8U2xpZGVyfFNvcnREZXNjfFN0YW5kYXJkfHN0YXRpY3xTdGF0dXN8U3RhdHVzQmFyfFN0YXR1c0NEfHN0cmlrZXxTdHlsZXxTdWJtaXR8U3lzTWVudXxUYWIyfFRhYlN0b3B8VGV4dHxUaGVtZXxUaHJvd3xUaWxlfFRvZ2dsZUNoZWNrfFRvZ2dsZUVuYWJsZXxUb29sV2luZG93fFRvcHxUb3Btb3N0fFRyYW5zQ29sb3J8VHJhbnNwYXJlbnR8VHJheXxUcmVlVmlld3xUcnl8VHJ5QWdhaW58VHlwZXxVbkNoZWNrfHVuZGVybGluZXxVbmljb2RlfFVubG9ja3xVbnRpbHxVcERvd258VXBwZXJ8VXBwZXJjYXNlfFVzZUVycm9yTGV2ZWx8VmlzfFZpc0ZpcnN0fFZpc2libGV8VlNjcm9sbHxXYWl0fFdhaXRDbG9zZXxXYW50Q3RybEF8V2FudEYyfFdhbnRSZXR1cm58V2hpbGV8V3JhcHxYZGlnaXR8eG18eHB8eHN8WWVzfHltfHlwfHlzKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvW14oKTsgXFx0LFxcbisqXFwtPT8+OlxcXFxcXC88JiVcXFtcXF1dKyg/PVxcKCkvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSgpOixdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmF1dG9pdCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0LzsuKi8sXG5cdFx0e1xuXHRcdFx0Ly8gVGhlIG11bHRpLWxpbmUgY29tbWVudHMgZGVsaW1pdGVycyBjYW4gYWN0dWFsbHkgYmUgY29tbWVudGVkIG91dCB3aXRoIFwiO1wiXG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSMoPzpjb21tZW50cy1zdGFydHxjcylbXFxzXFxTXSo/XlsgXFx0XSojKD86Y2V8Y29tbWVudHMtZW5kKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3VybCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qI2luY2x1ZGVcXHMrKSg/OjxbXlxcclxcbj5dKz58XCJbXlxcclxcblwiXStcIikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXDFcXDF8KD8hXFwxKVteXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvKFslJEBdKVxcdytcXDEvXG5cdFx0fVxuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopI1tcXHctXSsvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0Ly8gVmFyaWFibGVzIGFuZCBtYWNyb3Ncblx0J3ZhcmlhYmxlJzogL1skQF1cXHcrLyxcblx0J2tleXdvcmQnOiAvXFxiKD86Q2FzZXxDb25zdHxDb250aW51ZSg/OkNhc2V8TG9vcCl8RGVmYXVsdHxEaW18RG98RWxzZSg/OklmKT98RW5kKD86RnVuY3xJZnxTZWxlY3R8U3dpdGNofFdpdGgpfEVudW18RXhpdCg/Okxvb3ApP3xGb3J8RnVuY3xHbG9iYWx8SWZ8SW58TG9jYWx8TmV4dHxOdWxsfFJlRGltfFNlbGVjdHxTdGF0aWN8U3RlcHxTd2l0Y2h8VGhlbnxUb3xVbnRpbHxWb2xhdGlsZXxXRW5kfFdoaWxlfFdpdGgpXFxiL2ksXG5cdCdudW1iZXInOiAvXFxiKD86MHhbXFxkYS1mXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8VHJ1ZSlcXGIvaSxcblx0J29wZXJhdG9yJzogLzxbPT5dP3xbLSsqXFwvPSY+XT0/fFs/Xl18XFxiKD86QW5kfE5vdHxPcilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKS4sOl0vXG59O1xuXG4vLyBodHRwOi8vYXZpc3ludGgubmwvaW5kZXgucGhwL1RoZV9mdWxsX0F2aVN5bnRoX2dyYW1tYXJcbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRmdW5jdGlvbiByZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50cykge1xuXHRcdHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoLzw8KFxcZCspPj4vZywgZnVuY3Rpb24gKG0sIGluZGV4KSB7XG5cdFx0XHRyZXR1cm4gcmVwbGFjZW1lbnRzWytpbmRleF07XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZShwYXR0ZXJuLCByZXBsYWNlbWVudHMsIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChyZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50cyksIGZsYWdzIHx8ICcnKTtcblx0fVxuXG5cdHZhciB0eXBlcyA9IC9ib29sfGNsaXB8ZmxvYXR8aW50fHN0cmluZ3x2YWwvLnNvdXJjZTtcblx0dmFyIGludGVybmFscyA9IFtcblx0XHQvLyBib29sc1xuXHRcdC9pcyg/OmJvb2x8Y2xpcHxmbG9hdHxpbnR8c3RyaW5nKXxkZWZpbmVkfCg/Oig/OmludGVybmFsKT9mdW5jdGlvbnx2YXIpP2V4aXN0cz8vLnNvdXJjZSxcblx0XHQvLyBjb250cm9sXG5cdFx0L2FwcGx5fGFzc2VydHxkZWZhdWx0fGV2YWx8aW1wb3J0fG5vcHxzZWxlY3R8dW5kZWZpbmVkLy5zb3VyY2UsXG5cdFx0Ly8gZ2xvYmFsXG5cdFx0L29wdF8oPzphbGxvd2Zsb2F0YXVkaW98YXZpcGFkc2NhbmxpbmVzfGR3Y2hhbm5lbG1hc2t8ZW5hYmxlXyg/OmI2NGF8cGxhbmFydG9wYWNrZWRyZ2J8djIxMHx5M18xMF8xMHx5M18xMF8xNil8dXNld2F2ZWV4dGVuc2libGV8dmR1YnBsYW5hcmhhY2spfHNldCg/OmNhY2hlbW9kZXxtYXhjcHV8bWVtb3J5bWF4fHBsYW5hcmxlZ2FjeWFsaWdubWVudHx3b3JraW5nZGlyKS8uc291cmNlLFxuXHRcdC8vIGNvbnZcblx0XHQvaGV4KD86dmFsdWUpP3x2YWx1ZS8uc291cmNlLFxuXHRcdC8vIG51bWVyaWNcblx0XHQvYWJzfGNlaWx8Y29udGludWVkKD86ZGVub21pbmF0b3J8bnVtZXJhdG9yKT98ZXhwfGZsb29yfGZtb2R8ZnJhY3xsb2coPzoxMCk/fG1heHxtaW58bXVsZGl2fHBpfHBvd3xyYW5kfHJvdW5kfHNpZ258c3BsaW5lfHNxcnQvLnNvdXJjZSxcblx0XHQvLyB0cmlnXG5cdFx0L2E/c2luaD98YT9jb3NoP3xhP3RhblsyaF0/Ly5zb3VyY2UsXG5cdFx0Ly8gYml0XG5cdFx0Lyg/OmJpdCg/OmFuZHxub3R8eD9vcnxbbHJdP3NoaWZ0W2FzbHVdP3xzaFtscl18c2FbbHJdfFtscl1yb3RhdGVsP3xyb1tybF18dGU/c3R8c2V0KD86Y291bnQpP3xjbCg/OmVhKT9yfGNoKD86YW4pP2dlPykpLy5zb3VyY2UsXG5cdFx0Ly8gcnVudGltZVxuXHRcdC9hdmVyYWdlKD86W2Jncl18Y2hyb21hW3V2XXxsdW1hKXwoPzpbcmdiXXxjaHJvbWFbdXZdfGx1bWF8cmdifFt5dXZdKD89ZGlmZmVyZW5jZSg/OmZyb21wcmV2aW91c3x0b25leHQpKSlkaWZmZXJlbmNlKD86ZnJvbXByZXZpb3VzfHRvbmV4dCk/fFt5dXZyZ2JdcGxhbmUoPzptZWRpYW58bWlufG1heHxtaW5tYXhkaWZmZXJlbmNlKS8uc291cmNlLFxuXHRcdC8vIHNjcmlwdFxuXHRcdC9nZXRwcm9jZXNzaW5mb3xsb2dtc2d8c2NyaXB0KD86ZGlyKD86dXRmOCk/fGZpbGUoPzp1dGY4KT98bmFtZSg/OnV0ZjgpPyl8c2V0bG9ncGFyYW1zLy5zb3VyY2UsXG5cdFx0Ly8gc3RyaW5nXG5cdFx0L2NocnwoPzpmaWxsfGZpbmR8bGVmdHxtaWR8cmVwbGFjZXxyZXZ8cmlnaHQpc3RyfGZvcm1hdHxbbHVdY2FzZXxvcmR8c3RyKD86Y21waT98ZnJvbXV0Zjh8bGVufHRvdXRmOCl8dGltZXx0cmltKD86YWxsfGxlZnR8cmlnaHQpLy5zb3VyY2UsXG5cdFx0Ly8gdmVyc2lvblxuXHRcdC9pc3ZlcnNpb25vcmdyZWF0ZXJ8dmVyc2lvbig/Om51bWJlcnxzdHJpbmcpLy5zb3VyY2UsXG5cdFx0Ly8gaGVscGVyXG5cdFx0L2J1aWxkcGl4ZWx0eXBlfGNvbG9yc3BhY2VuYW1ldG9waXhlbHR5cGUvLnNvdXJjZSxcblx0XHQvLyBhdnNwbHVzXG5cdFx0L2FkZGF1dG9sb2FkZGlyfG9uKD86Y3B1fGN1ZGEpfHByZWZldGNofHNldGZpbHRlcm10bW9kZS8uc291cmNlXG5cdF0uam9pbignfCcpO1xuXHR2YXIgcHJvcGVydGllcyA9IFtcblx0XHQvLyBjb250ZW50XG5cdFx0L2hhcyg/OmF1ZGlvfHZpZGVvKS8uc291cmNlLFxuXHRcdC8vIHJlc29sdXRpb25cblx0XHQvaGVpZ2h0fHdpZHRoLy5zb3VyY2UsXG5cdFx0Ly8gZnJhbWVyYXRlXG5cdFx0L2ZyYW1lKD86Y291bnR8cmF0ZSl8ZnJhbWVyYXRlKD86ZGVub21pbmF0b3J8bnVtZXJhdG9yKS8uc291cmNlLFxuXHRcdC8vIGludGVybGFjaW5nXG5cdFx0L2dldHBhcml0eXxpcyg/OmZpZWxkfGZyYW1lKWJhc2VkLy5zb3VyY2UsXG5cdFx0Ly8gY29sb3IgZm9ybWF0XG5cdFx0L2JpdHNwZXJjb21wb25lbnR8Y29tcG9uZW50c2l6ZXxoYXNhbHBoYXxpcyg/OnBsYW5hcig/OnJnYmE/KT98aW50ZXJsZWF2ZWR8cmdiKD86MjR8MzJ8NDh8NjQpP3x5KD86OHx1KD86dmE/fHkyKSk/fHl2KD86MTJ8MTZ8MjR8NDExKXw0MjB8NDIyfDQ0NHxwYWNrZWRyZ2IpfG51bWNvbXBvbmVudHN8cGl4ZWx0eXBlLy5zb3VyY2UsXG5cdFx0Ly8gYXVkaW9cblx0XHQvYXVkaW8oPzpiaXRzfGNoYW5uZWxzfGR1cmF0aW9ufGxlbmd0aCg/Oltmc118aGl8bG8pP3xyYXRlKXxpc2F1ZGlvKD86ZmxvYXR8aW50KS8uc291cmNlXG5cdF0uam9pbignfCcpO1xuXHR2YXIgZmlsdGVycyA9IFtcblx0XHQvLyBzb3VyY2Vcblx0XHQvYXZpKD86ZmlsZSk/c291cmNlfGRpcmVjdHNob3dzb3VyY2V8aW1hZ2UoPzpyZWFkZXJ8c291cmNlfHNvdXJjZWFuaW0pfG9wZW5kbWxzb3VyY2V8c2VnbWVudGVkKD86YXZpc291cmNlfGRpcmVjdHNob3dzb3VyY2UpfHdhdnNvdXJjZS8uc291cmNlLFxuXHRcdC8vIGNvbG9yXG5cdFx0L2NvbG9yeXV2fGNvbnZlcnRiYWNrdG95dXkyfGNvbnZlcnR0byg/OlJHQig/OjI0fDMyfDQ4fDY0KXwoPzpwbGFuYXIpP1JHQkE/fFk4P3xZVig/OjEyfDE2fDI0fDQxMSl8WVVWQT8oPzo0MTF8NDIwfDQyMnw0NDQpfFlVWTIpfGZpeGx1bWluYW5jZXxnclthZV15c2NhbGV8aW52ZXJ0fGxldmVsc3xsaW1pdGVyfG1lcmdlYT9yZ2J8bWVyZ2UoPzpjaHJvbWF8bHVtYSl8cmdiYWRqdXN0fHNob3coPzphbHBoYXxibHVlfGdyZWVufHJlZCl8c3dhcHV2fHR3ZWFrfFt1dl10b3k4P3x5dG91di8uc291cmNlLFxuXHRcdC8vIG92ZXJsYXlcblx0XHQvKD86Y29sb3JrZXl8cmVzZXQpbWFza3xsYXllcnxtYXNrKD86aHMpP3xtZXJnZXxvdmVybGF5fHN1YnRyYWN0Ly5zb3VyY2UsXG5cdFx0Ly8gZ2VvbWV0cnlcblx0XHQvYWRkYm9yZGVyc3woPzpiaWN1YmljfGJpbGluZWFyfGJsYWNrbWFufGdhdXNzfGxhbmN6b3M0fGxhbmN6b3N8cG9pbnR8c2luY3xzcGxpbmUoPzoxNnwzNnw2NCkpcmVzaXplfGNyb3AoPzpib3R0b20pP3xmbGlwKD86aG9yaXpvbnRhbHx2ZXJ0aWNhbCl8KD86aG9yaXpvbnRhbHx2ZXJ0aWNhbCk/cmVkdWNlYnkyfGxldHRlcmJveHxza2V3cm93c3x0dXJuKD86MTgwfGxlZnR8cmlnaHQpLy5zb3VyY2UsXG5cdFx0Ly8gcGl4ZWxcblx0XHQvYmx1cnxmaXhicm9rZW5jaHJvbWF1cHNhbXBsaW5nfGdlbmVyYWxjb252b2x1dGlvbnwoPzpzcGF0aWFsfHRlbXBvcmFsKXNvZnRlbnxzaGFycGVuLy5zb3VyY2UsXG5cdFx0Ly8gdGltZWxpbmVcblx0XHQvdHJpbXwoPzp1bik/YWxpZ25lZHNwbGljZXwoPzphc3N1bWV8YXNzdW1lc2NhbGVkfGNoYW5nZXxjb252ZXJ0KUZQU3woPzpkZWxldGV8ZHVwbGljYXRlKWZyYW1lfGRpc3NvbHZlfGZhZGUoPzppbnxpb3xvdXQpWzAyXT98ZnJlZXplZnJhbWV8aW50ZXJsZWF2ZXxsb29wfHJldmVyc2V8c2VsZWN0KD86ZXZlbnxvZGR8KD86cmFuZ2UpP2V2ZXJ5KS8uc291cmNlLFxuXHRcdC8vIGludGVybGFjZVxuXHRcdC9hc3N1bWVbYnRdZmZ8YXNzdW1lKD86ZmllbGR8ZnJhbWUpYmFzZWR8Ym9ifGNvbXBsZW1lbnRwYXJpdHl8ZG91Ymxld2VhdmV8cGVjdWxpYXJibGVuZHxwdWxsZG93bnxzZXBhcmF0ZSg/OmNvbHVtbnN8ZmllbGRzfHJvd3MpfHN3YXBmaWVsZHN8d2VhdmUoPzpjb2x1bW5zfHJvd3MpPy8uc291cmNlLFxuXHRcdC8vIGF1ZGlvXG5cdFx0L2FtcGxpZnkoPzpkYik/fGFzc3VtZXNhbXBsZXJhdGV8YXVkaW9kdWIoPzpleCk/fGF1ZGlvdHJpbXxjb252ZXJ0YXVkaW90byg/Oig/Ojh8MTZ8MjR8MzIpYml0fGZsb2F0KXxjb252ZXJ0dG9tb25vfGRlbGF5YXVkaW98ZW5zdXJldmJybXAzc3luY3xnZXQoPzpsZWZ0fHJpZ2h0KT9jaGFubmVsfGtpbGwoPzphdWRpb3x2aWRlbyl8bWVyZ2VjaGFubmVsc3xtaXhhdWRpb3xtb25vdG9zdGVyZW98bm9ybWFsaXplfHJlc2FtcGxlYXVkaW98c3NyY3xzdXBlcmVxfHRpbWVzdHJldGNoLy5zb3VyY2UsXG5cdFx0Ly8gY29uZGl0aW9uYWxcblx0XHQvYW5pbWF0ZXxhcHBseXJhbmdlfGNvbmRpdGlvbmFsKD86ZmlsdGVyfHJlYWRlcnxzZWxlY3QpfGZyYW1lZXZhbHVhdGV8c2NyaXB0Y2xpcHx0Y3AoPzpzZXJ2ZXJ8c291cmNlKXx3cml0ZWZpbGUoPzplbmR8aWZ8c3RhcnQpPy8uc291cmNlLFxuXHRcdC8vIGV4cG9ydFxuXHRcdC9pbWFnZXdyaXRlci8uc291cmNlLFxuXHRcdC8vIGRlYnVnXG5cdFx0L2JsYWNrbmVzc3xibGFua2NsaXB8Y29sb3JiYXJzKD86aGQpP3xjb21wYXJlfGR1bXBmaWx0ZXJncmFwaHxlY2hvfGhpc3RvZ3JhbXxpbmZvfG1lc3NhZ2VjbGlwfHByZXJvbGx8c2V0Z3JhcGhhbmFseXNpc3xzaG93KD86ZnJhbWVudW1iZXJ8c21wdGV8dGltZSl8c2hvd2ZpdmV2ZXJzaW9uc3xzdGFjayg/Omhvcml6b250YWx8dmVydGljYWwpfHN1YnRpdGxlfHRvbmV8dmVyc2lvbi8uc291cmNlXG5cdF0uam9pbignfCcpO1xuXHR2YXIgYWxsaW50ZXJuYWxzID0gW2ludGVybmFscywgcHJvcGVydGllcywgZmlsdGVyc10uam9pbignfCcpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5hdmlzeW50aCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gTWF0Y2hlcyBbKiAqXSBuZXN0YWJsZSBibG9jayBjb21tZW50cywgYnV0IG9ubHkgc3VwcG9ydHMgMSBsZXZlbCBvZiBuZXN0ZWQgY29tbWVudHNcblx0XHRcdFx0Ly8gL1xcW1xcKig/OlteXFxbKl18XFxbKD8hXFwqKXxcXCooPyFcXF0pfDxzZWxmPikqXFwqXFxdL1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXFtcXCooPzpbXlxcWypdfFxcWyg/IVxcKil8XFwqKD8hXFxdKXxcXFtcXCooPzpbXlxcWypdfFxcWyg/IVxcKil8XFwqKD8hXFxdKSkqXFwqXFxdKSpcXCpcXF0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIE1hdGNoZXMgLyogKi8gYmxvY2sgY29tbWVudHNcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gTWF0Y2hlcyAjIGNvbW1lbnRzXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFwkXSkjLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0Ly8gSGFuZGxlIGJlZm9yZSBzdHJpbmdzIGJlY2F1c2Ugb3B0aW9uYWwgYXJndW1lbnRzIGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXNcblx0XHQnYXJndW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFxiKD86PDwwPj4pXFxzKyhcIj8pXFx3K1xcMS8uc291cmNlLCBbdHlwZXNdLCAnaScpLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15cXHcrL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBPcHRpb25hbCBhcmd1bWVudCBhc3NpZ25tZW50XG5cdFx0J2FyZ3VtZW50LWxhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogLyhbLChdW1xcc1xcXFxdKilcXHcrXFxzKj0oPyE9KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhcmd1bWVudC1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFx3Ky8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLz0kL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyB0cmlwbGUgZG91YmxlLXF1b3RlZFxuXHRcdFx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHNpbmdsZSBkb3VibGUtcXVvdGVkXG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdjb25zdGFudCc6IHtcblx0XHRcdFx0XHRcdC8vIFRoZXNlICphcmUqIGNhc2Utc2Vuc2l0aXZlIVxuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcYig/OkRFRkFVTFRfTVRfTU9ERXwoPzpNQUlOU0NSSVBUfFBST0dSQU18U0NSSVBUKURJUnwoPzpNQUNISU5FfFVTRVIpXyg/OkNMQVNTSUN8UExVUylfUExVR0lOUylcXGIvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8vIFRoZSBzcGVjaWFsIFwibGFzdFwiIHZhcmlhYmxlIHRoYXQgdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGltcGxpY2l0bHkgcmV0dXJuZWQgY2xpcFxuXHRcdCd2YXJpYWJsZSc6IC9cXGIoPzpsYXN0KVxcYi9pLFxuXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bm98dHJ1ZXx5ZXMpXFxiL2ksXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzpjYXRjaHxlbHNlfGZvcnxmdW5jdGlvbnxnbG9iYWx8aWZ8cmV0dXJufHRyeXx3aGlsZXxfX0VORF9fKVxcYi9pLFxuXG5cdFx0J2NvbnN0YW50JzogL1xcYk1UXyg/Ok1VTFRJX0lOU1RBTkNFfE5JQ0VfRklMVEVSfFNFUklBTElaRUR8U1BFQ0lBTF9NVClcXGIvLFxuXG5cdFx0Ly8gQXZpU3ludGgncyBpbnRlcm5hbCBmdW5jdGlvbnMsIGZpbHRlcnMsIGFuZCBwcm9wZXJ0aWVzXG5cdFx0J2J1aWx0aW4tZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFxiKD86PDwwPj4pXFxiLy5zb3VyY2UsIFthbGxpbnRlcm5hbHNdLCAnaScpLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXG5cdFx0J3R5cGUtY2FzdCc6IHtcblx0XHRcdHBhdHRlcm46IHJlKC9cXGIoPzo8PDA+PikoPz1cXHMqXFwoKS8uc291cmNlLCBbdHlwZXNdLCAnaScpLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQvLyBFeHRlcm5hbC91c2VyLWRlZmluZWQgZmlsdGVyc1xuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCl8KFxcLilbYS16X11cXHcqXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIE1hdGNoZXMgYSBcXCBhcyB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgb24gYSBsaW5lXG5cdFx0J2xpbmUtY29udGludWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKilcXFxcfFxcXFwoPz1bIFxcdF0qJCkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cblx0XHQnbnVtYmVyJzogL1xcQlxcJCg/OltcXGRhLWZdezZ9fFtcXGRhLWZdezh9KVxcYnwoPzooPzpcXGJ8XFxCLSlcXGQrKD86XFwuXFxkKik/XFxifFxcQlxcLlxcZCtcXGIpL2ksXG5cblx0XHQnb3BlcmF0b3InOiAvXFwrXFwrP3xbIT08Pl09P3wmJnxcXHxcXHx8Wz86Ki8lLV0vLFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fVxcW1xcXSgpOywuXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYXZzID0gUHJpc20ubGFuZ3VhZ2VzLmF2aXN5bnRoO1xuXG59KFByaXNtKSk7XG5cbi8vIEdpdEh1YjogaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS9hdnJvXG4vLyBEb2NzOiBodHRwczovL2F2cm8uYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvaWRsLmh0bWxcblxuUHJpc20ubGFuZ3VhZ2VzWydhdnJvLWlkbCddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlxcclxcblwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdhbm5vdGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9AKD86WyRcXHcuLV18YFteXFxyXFxuYF0rYCkrLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J2Z1bmN0aW9uLWlkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL2BbXlxcclxcbmBdK2AoPz1cXHMqXFwoKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9gW15cXHJcXG5gXStgLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmVudW18ZXJyb3J8cHJvdG9jb2x8cmVjb3JkfHRocm93cylcXGJcXHMrKVskXFx3XSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFycmF5fGJvb2xlYW58Ynl0ZXN8ZGF0ZXxkZWNpbWFsfGRvdWJsZXxlbnVtfGVycm9yfGZhbHNlfGZpeGVkfGZsb2F0fGlkbHxpbXBvcnR8aW50fGxvY2FsX3RpbWVzdGFtcF9tc3xsb25nfG1hcHxudWxsfG9uZXdheXxwcm90b2NvbHxyZWNvcmR8c2NoZW1hfHN0cmluZ3x0aHJvd3N8dGltZV9tc3x0aW1lc3RhbXBfbXN8dHJ1ZXx1bmlvbnx1dWlkfHZvaWQpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXG5cdCdudW1iZXInOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pLT8oPzooPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/fDB4KD86W2EtZjAtOV0rKD86XFwuW2EtZjAtOV0qKT98XFwuW2EtZjAtOV0rKSg/OnBbKy1dP1xcZCspPylbZGZsXT8oPyFbXFx3Ll0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLT9cXGIoPzpJbmZpbml0eXxOYU4pXFxiL1xuXHRdLFxuXG5cdCdvcGVyYXRvcic6IC89Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXXt9PD4uOiw7LV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXZkbCA9IFByaXNtLmxhbmd1YWdlc1snYXZyby1pZGwnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmF3ayA9IHtcblx0J2hhc2hiYW5nJzoge1xuXHRcdHBhdHRlcm46IC9eIyEuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlxcXFxcIlxcclxcbl18XFxcXC4pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFx3XFxzKV0pXFxzKilcXC8oPzpbXlxcL1xcXFxcXHJcXG5dfFxcXFwuKSpcXC8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXHQna2V5d29yZCc6IC9cXGIoPzpCRUdJTnxCRUdJTkZJTEV8RU5EfEVOREZJTEV8YnJlYWt8Y2FzZXxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGV4aXR8Zm9yfGZ1bmN0aW9ufGdldGxpbmV8aWZ8aW58bmV4dHxuZXh0ZmlsZXxwcmludGY/fHJldHVybnxzd2l0Y2h8d2hpbGUpXFxifEAoPzppbmNsdWRlfGxvYWQpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdCdudW1iZXInOiAvXFxiKD86XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP3wweFthLWZBLUYwLTldKylcXGIvLFxuXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8IT9+fD4mfD4+fDw8fCg/OlxcKlxcKnxbPD4hPStcXC0qLyVeXSk9P3wmJnxcXHxbfCZdfFs/Ol0vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdhd2sgPSBQcmlzbS5sYW5ndWFnZXMuYXdrO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8vICQgc2V0IHwgZ3JlcCAnXltBLVpdW15bOnNwYWNlOl1dKj0nIHwgY3V0IC1kPSAtZjEgfCB0ciAnXFxuJyAnfCdcblx0Ly8gKyBMQ19BTEwsIFJBTkRPTSwgUkVQTFksIFNFQ09ORFMuXG5cdC8vICsgbWFrZSBzdXJlIFBTMS4uNCBhcmUgaGVyZSBhcyB0aGV5IGFyZSBub3QgYWx3YXlzIHNldCxcblx0Ly8gLSBzb21lIHVzZWxlc3MgdGhpbmdzLlxuXHR2YXIgZW52VmFycyA9ICdcXFxcYig/OkJBU0h8QkFTSE9QVFN8QkFTSF9BTElBU0VTfEJBU0hfQVJHQ3xCQVNIX0FSR1Z8QkFTSF9DTURTfEJBU0hfQ09NUExFVElPTl9DT01QQVRfRElSfEJBU0hfTElORU5PfEJBU0hfUkVNQVRDSHxCQVNIX1NPVVJDRXxCQVNIX1ZFUlNJTkZPfEJBU0hfVkVSU0lPTnxDT0xPUlRFUk18Q09MVU1OU3xDT01QX1dPUkRCUkVBS1N8REJVU19TRVNTSU9OX0JVU19BRERSRVNTfERFRkFVTFRTX1BBVEh8REVTS1RPUF9TRVNTSU9OfERJUlNUQUNLfERJU1BMQVl8RVVJRHxHRE1TRVNTSU9OfEdETV9MQU5HfEdOT01FX0tFWVJJTkdfQ09OVFJPTHxHTk9NRV9LRVlSSU5HX1BJRHxHUEdfQUdFTlRfSU5GT3xHUk9VUFN8SElTVENPTlRST0x8SElTVEZJTEV8SElTVEZJTEVTSVpFfEhJU1RTSVpFfEhPTUV8SE9TVE5BTUV8SE9TVFRZUEV8SUZTfElOU1RBTkNFfEpPQnxMQU5HfExBTkdVQUdFfExDX0FERFJFU1N8TENfQUxMfExDX0lERU5USUZJQ0FUSU9OfExDX01FQVNVUkVNRU5UfExDX01PTkVUQVJZfExDX05BTUV8TENfTlVNRVJJQ3xMQ19QQVBFUnxMQ19URUxFUEhPTkV8TENfVElNRXxMRVNTQ0xPU0V8TEVTU09QRU58TElORVN8TE9HTkFNRXxMU19DT0xPUlN8TUFDSFRZUEV8TUFJTENIRUNLfE1BTkRBVE9SWV9QQVRIfE5PX0FUX0JSSURHRXxPTERQV0R8T1BURVJSfE9QVElORHxPUkJJVF9TT0NLRVRESVJ8T1NUWVBFfFBBUEVSU0laRXxQQVRIfFBJUEVTVEFUVVN8UFBJRHxQUzF8UFMyfFBTM3xQUzR8UFdEfFJBTkRPTXxSRVBMWXxTRUNPTkRTfFNFTElOVVhfSU5JVHxTRVNTSU9OfFNFU1NJT05UWVBFfFNFU1NJT05fTUFOQUdFUnxTSEVMTHxTSEVMTE9QVFN8U0hMVkx8U1NIX0FVVEhfU09DS3xURVJNfFVJRHxVUFNUQVJUX0VWRU5UU3xVUFNUQVJUX0lOU1RBTkNFfFVQU1RBUlRfSk9CfFVQU1RBUlRfU0VTU0lPTnxVU0VSfFdJTkRPV0lEfFhBVVRIT1JJVFl8WERHX0NPTkZJR19ESVJTfFhER19DVVJSRU5UX0RFU0tUT1B8WERHX0RBVEFfRElSU3xYREdfR1JFRVRFUl9EQVRBX0RJUnxYREdfTUVOVV9QUkVGSVh8WERHX1JVTlRJTUVfRElSfFhER19TRUFUfFhER19TRUFUX1BBVEh8WERHX1NFU1NJT05fREVTS1RPUHxYREdfU0VTU0lPTl9JRHxYREdfU0VTU0lPTl9QQVRIfFhER19TRVNTSU9OX1RZUEV8WERHX1ZUTlJ8WE1PRElGSUVSUylcXFxcYic7XG5cblx0dmFyIGNvbW1hbmRBZnRlckhlcmVkb2MgPSB7XG5cdFx0cGF0dGVybjogLyheKFtcIiddPylcXHcrXFwyKVsgXFx0XStcXFMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJywgLy8gdGhpcyBsb29rcyByZWFzb25hYmx5IHdlbGwgaW4gYWxsIHRoZW1lc1xuXHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0fTtcblxuXHR2YXIgaW5zaWRlU3RyaW5nID0ge1xuXHRcdCdiYXNoJzogY29tbWFuZEFmdGVySGVyZWRvYyxcblx0XHQnZW52aXJvbm1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ1xcXFwkJyArIGVudlZhcnMpLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXHRcdCd2YXJpYWJsZSc6IFtcblx0XHRcdC8vIFswXTogQXJpdGhtZXRpYyBFbnZpcm9ubWVudFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkP1xcKFxcKFtcXHNcXFNdKz9cXClcXCkvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgJCBzaWduIGF0IHRoZSBiZWdpbm5pbmcgaGlnaGxpZ2h0ICQoKCBhbmQgKSkgYXMgdmFyaWFibGVcblx0XHRcdFx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcJFxcKFxcKFtcXHNcXFNdKylcXClcXCkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0L15cXCRcXChcXCgvXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdLT9cXGQrKT8vLFxuXHRcdFx0XHRcdC8vIE9wZXJhdG9ycyBhY2NvcmRpbmcgdG8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9iYXNocmVmLmh0bWwjU2hlbGwtQXJpdGhtZXRpY1xuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8XFwqXFwqPT98PDw9P3w+Pj0/fCYmfFxcfFxcfHxbPSErXFwtKi8lPD5eJnxdPT98Wz9+Ol0vLFxuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG5vICQgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIGhpZ2hsaWdodCAoKCBhbmQgKSkgYXMgcHVuY3R1YXRpb25cblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwoXFwoP3xcXClcXCk/fCx8Oy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFsxXTogQ29tbWFuZCBTdWJzdGl0dXRpb25cblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcJFxcKCg/OlxcKFteKV0rXFwpfFteKCldKStcXCl8YFteYF0rYC8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogL15cXCRcXCh8XmB8XFwpJHxgJC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFsyXTogQnJhY2UgZXhwYW5zaW9uXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXHtbXn1dK1xcfS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J29wZXJhdG9yJzogLzpbLT0/K10/fFshXFwvXXwjIz98JSU/fFxcXlxcXj98LCw/Lyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXV0vLFxuXHRcdFx0XHRcdCdlbnZpcm9ubWVudCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKFxcXFx7KScgKyBlbnZWYXJzKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC9cXCQoPzpcXHcrfFsjPyohQCRdKS9cblx0XHRdLFxuXHRcdC8vIEVzY2FwZSBzZXF1ZW5jZXMgZnJvbSBlY2hvIGFuZCBwcmludGYncyBtYW51YWxzLCBhbmQgZXNjYXBlZCBxdW90ZXMuXG5cdFx0J2VudGl0eSc6IC9cXFxcKD86W2FiY2VFZm5ydHZcXFxcXCJdfE8/WzAtN117MSwzfXxVWzAtOWEtZkEtRl17OH18dVswLTlhLWZBLUZdezR9fHhbMC05YS1mQS1GXXsxLDJ9KS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYmFzaCA9IHtcblx0XHQnc2hlYmFuZyc6IHtcblx0XHRcdHBhdHRlcm46IC9eIyFcXHMqXFwvLiovLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlwie1xcXFwkXSkjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLW5hbWUnOiBbXG5cdFx0XHQvLyBhKSBmdW5jdGlvbiBmb28ge1xuXHRcdFx0Ly8gYikgZm9vKCkge1xuXHRcdFx0Ly8gYykgZnVuY3Rpb24gZm9vKCkge1xuXHRcdFx0Ly8gYnV0IG5vdCBcdTIwMUNmb28ge1x1MjAxRFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBhKSBhbmQgYylcblx0XHRcdFx0cGF0dGVybjogLyhcXGJmdW5jdGlvblxccyspW1xcdy1dKyg/PSg/OlxccypcXCg/OlxccypcXCkpP1xccypcXHspLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGIpXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJbXFx3LV0rKD89XFxzKlxcKFxccypcXClcXHMqXFx7KS8sXG5cdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBIaWdobGlnaHQgdmFyaWFibGUgbmFtZXMgYXMgdmFyaWFibGVzIGluIGZvciBhbmQgc2VsZWN0IGJlZ2lubmluZ3MuXG5cdFx0J2Zvci1vci1zZWxlY3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmZvcnxzZWxlY3QpXFxzKylcXHcrKD89XFxzK2luXFxzKS8sXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIEhpZ2hsaWdodCB2YXJpYWJsZSBuYW1lcyBhcyB2YXJpYWJsZXMgaW4gdGhlIGxlZnQtaGFuZCBwYXJ0XG5cdFx0Ly8gb2YgYXNzaWdubWVudHMgKFx1MjAxQz1cdTIwMUQgYW5kIFx1MjAxQys9XHUyMDFEKS5cblx0XHQnYXNzaWduLWxlZnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKClcXHcrKD89XFwrPz0pLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZW52aXJvbm1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXnxbXFxcXHM7fCZdfFs8Pl1cXFxcKCknICsgZW52VmFycyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0Ly8gU3VwcG9ydCBmb3IgSGVyZS1kb2N1bWVudHMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVyZV9kb2N1bWVudFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W148XSk8PC0/XFxzKikoXFx3KylcXHNbXFxzXFxTXSo/KD86XFxyP1xcbnxcXHIpXFwyLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGluc2lkZVN0cmluZ1xuXHRcdFx0fSxcblx0XHRcdC8vIEhlcmUtZG9jdW1lbnQgd2l0aCBxdW90ZXMgYXJvdW5kIHRoZSB0YWdcblx0XHRcdC8vIFx1MjE5MiBObyBleHBhbnNpb24gKHNvIG5vIFx1MjAxQ2luc2lkZVx1MjAxRCkuXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXjxdKTw8LT9cXHMqKShbXCInXSkoXFx3KylcXDJcXHNbXFxzXFxTXSo/KD86XFxyP1xcbnxcXHIpXFwzLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnYmFzaCc6IGNvbW1hbmRBZnRlckhlcmVkb2Ncblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFx1MjAxQ05vcm1hbFx1MjAxRCBzdHJpbmdcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvRG91YmxlLVF1b3Rlcy5odG1sXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKD86XFxcXFxcXFwpKilcIig/OlxcXFxbXFxzXFxTXXxcXCRcXChbXildK1xcKXxcXCQoPyFcXCgpfGBbXmBdK2B8W15cIlxcXFxgJF0pKlwiLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGluc2lkZVN0cmluZ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2luZ2xlLVF1b3Rlcy5odG1sXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXFxcXSknW14nXSonLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jhc2gvbWFudWFsL2h0bWxfbm9kZS9BTlNJXzAwMmRDLVF1b3RpbmcuaHRtbFxuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2VudGl0eSc6IGluc2lkZVN0cmluZy5lbnRpdHlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Vudmlyb25tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdcXFxcJD8nICsgZW52VmFycyksXG5cdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogaW5zaWRlU3RyaW5nLnZhcmlhYmxlLFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmFkZHxhcHJvcG9zfGFwdHxhcHQtY2FjaGV8YXB0LWdldHxhcHRpdHVkZXxhc3BlbGx8YXV0b215c3FsYmFja3VwfGF3a3xiYXNlbmFtZXxiYXNofGJjfGJjb25zb2xlfGJnfGJ6aXAyfGNhbHxjYXR8Y2ZkaXNrfGNoZ3JwfGNoa2NvbmZpZ3xjaG1vZHxjaG93bnxjaHJvb3R8Y2tzdW18Y2xlYXJ8Y21wfGNvbHVtbnxjb21tfGNvbXBvc2VyfGNwfGNyb258Y3JvbnRhYnxjc3BsaXR8Y3VybHxjdXR8ZGF0ZXxkY3xkZHxkZHJlc2N1ZXxkZWJvb3RzdHJhcHxkZnxkaWZmfGRpZmYzfGRpZ3xkaXJ8ZGlyY29sb3JzfGRpcm5hbWV8ZGlyc3xkbWVzZ3xkb2NrZXJ8ZG9ja2VyLWNvbXBvc2V8ZHV8ZWdyZXB8ZWplY3R8ZW52fGV0aHRvb2x8ZXhwYW5kfGV4cGVjdHxleHByfGZkZm9ybWF0fGZkaXNrfGZnfGZncmVwfGZpbGV8ZmluZHxmbXR8Zm9sZHxmb3JtYXR8ZnJlZXxmc2NrfGZ0cHxmdXNlcnxnYXdrfGdpdHxncGFydGVkfGdyZXB8Z3JvdXBhZGR8Z3JvdXBkZWx8Z3JvdXBtb2R8Z3JvdXBzfGdydWItbWtjb25maWd8Z3ppcHxoYWx0fGhlYWR8aGd8aGlzdG9yeXxob3N0fGhvc3RuYW1lfGh0b3B8aWNvbnZ8aWR8aWZjb25maWd8aWZkb3dufGlmdXB8aW1wb3J0fGluc3RhbGx8aXB8am9ic3xqb2lufGtpbGx8a2lsbGFsbHxsZXNzfGxpbmt8bG58bG9jYXRlfGxvZ25hbWV8bG9ncm90YXRlfGxvb2t8bHBjfGxwcnxscHJpbnR8bHByaW50ZHxscHJpbnRxfGxwcm18bHN8bHNvZnxseW54fG1ha2V8bWFufG1jfG1kYWRtfG1rY29uZmlnfG1rZGlyfG1rZTJmc3xta2ZpZm98bWtmc3xta2lzb2ZzfG1rbm9kfG1rc3dhcHxtbXZ8bW9yZXxtb3N0fG1vdW50fG10b29sc3xtdHJ8bXV0dHxtdnxuYW5vfG5jfG5ldHN0YXR8bmljZXxubHxub2RlfG5vaHVwfG5vdGlmeS1zZW5kfG5wbXxuc2xvb2t1cHxvcHxvcGVufHBhcnRlZHxwYXNzd2R8cGFzdGV8cGF0aGNoa3xwaW5nfHBraWxsfHBucG18cG9kbWFufHBvZG1hbi1jb21wb3NlfHBvcGR8cHJ8cHJpbnRjYXB8cHJpbnRlbnZ8cHN8cHVzaGR8cHZ8cXVvdGF8cXVvdGFjaGVja3xxdW90YWN0bHxyYW18cmFyfHJjcHxyZWJvb3R8cmVtc3luY3xyZW5hbWV8cmVuaWNlfHJldnxybXxybWRpcnxycG18cnN5bmN8c2NwfHNjcmVlbnxzZGlmZnxzZWR8c2VuZG1haWx8c2VxfHNlcnZpY2V8c2Z0cHxzaHxzaGVsbGNoZWNrfHNodWZ8c2h1dGRvd258c2xlZXB8c2xvY2F0ZXxzb3J0fHNwbGl0fHNzaHxzdGF0fHN0cmFjZXxzdXxzdWRvfHN1bXxzdXNwZW5kfHN3YXBvbnxzeW5jfHRhY3x0YWlsfHRhcnx0ZWV8dGltZXx0aW1lb3V0fHRvcHx0b3VjaHx0cnx0cmFjZXJvdXRlfHRzb3J0fHR0eXx1bW91bnR8dW5hbWV8dW5leHBhbmR8dW5pcXx1bml0c3x1bnJhcnx1bnNoYXJ8dW56aXB8dXBkYXRlLWdydWJ8dXB0aW1lfHVzZXJhZGR8dXNlcmRlbHx1c2VybW9kfHVzZXJzfHV1ZGVjb2RlfHV1ZW5jb2RlfHZ8dmNwa2d8dmRpcnx2aXx2aW18dmlyc2h8dm1zdGF0fHdhaXR8d2F0Y2h8d2N8d2dldHx3aGVyZWlzfHdoaWNofHdob3x3aG9hbWl8d3JpdGV8eGFyZ3N8eGRnLW9wZW58eWFybnx5ZXN8emVuaXR5fHppcHx6c2h8enlwcGVyKSg/PSR8WylcXHM7fCZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmNhc2V8ZG98ZG9uZXxlbGlmfGVsc2V8ZXNhY3xmaXxmb3J8ZnVuY3Rpb258aWZ8aW58c2VsZWN0fHRoZW58dW50aWx8d2hpbGUpKD89JHxbKVxcczt8Jl0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NoZWxsLUJ1aWx0aW4tQ29tbWFuZHMuaHRtbFxuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpKD86XFwufDp8YWxpYXN8YmluZHxicmVha3xidWlsdGlufGNhbGxlcnxjZHxjb21tYW5kfGNvbnRpbnVlfGRlY2xhcmV8ZWNob3xlbmFibGV8ZXZhbHxleGVjfGV4aXR8ZXhwb3J0fGdldG9wdHN8aGFzaHxoZWxwfGxldHxsb2NhbHxsb2dvdXR8bWFwZmlsZXxwcmludGZ8cHdkfHJlYWR8cmVhZGFycmF5fHJlYWRvbmx5fHJldHVybnxzZXR8c2hpZnR8c2hvcHR8c291cmNlfHRlc3R8dGltZXN8dHJhcHx0eXBlfHR5cGVzZXR8dWxpbWl0fHVtYXNrfHVuYWxpYXN8dW5zZXQpKD89JHxbKVxcczt8Jl0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHQvLyBBbGlhcyBhZGRlZCB0byBtYWtlIHRob3NlIGVhc2llciB0byBkaXN0aW5ndWlzaCBmcm9tIHN0cmluZ3MuXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmZhbHNlfHRydWUpKD89JHxbKVxcczt8Jl0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmaWxlLWRlc2NyaXB0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxCJlxcZFxcYi8sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdC8vIExvdHMgb2YgcmVkaXJlY3Rpb25zIGhlcmUsIGJ1dCBub3QganVzdCB0aGF0LlxuXHRcdFx0cGF0dGVybjogL1xcZD88Pnw+XFx8fFxcKz18PVs9fl0/fCE9P3w8PFs8LV0/fFsmXFxkXT8+PnxcXGRbPD5dJj98Wzw+XVsmPV0/fCZbPiZdP3xcXHxbJnxdPy8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ZpbGUtZGVzY3JpcHRvcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcZC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXCQ/XFwoXFwoP3xcXClcXCk/fFxcLlxcLnxbe31bXFxdO1xcXFxdLyxcblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPzpbMS05XVxcZCp8MCkoPzpbLixdXFxkKyk/XFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH07XG5cblx0Y29tbWFuZEFmdGVySGVyZWRvYy5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuYmFzaDtcblxuXHQvKiBQYXR0ZXJucyBpbiBjb21tYW5kIHN1YnN0aXR1dGlvbi4gKi9cblx0dmFyIHRvQmVDb3BpZWQgPSBbXG5cdFx0J2NvbW1lbnQnLFxuXHRcdCdmdW5jdGlvbi1uYW1lJyxcblx0XHQnZm9yLW9yLXNlbGVjdCcsXG5cdFx0J2Fzc2lnbi1sZWZ0Jyxcblx0XHQnc3RyaW5nJyxcblx0XHQnZW52aXJvbm1lbnQnLFxuXHRcdCdmdW5jdGlvbicsXG5cdFx0J2tleXdvcmQnLFxuXHRcdCdidWlsdGluJyxcblx0XHQnYm9vbGVhbicsXG5cdFx0J2ZpbGUtZGVzY3JpcHRvcicsXG5cdFx0J29wZXJhdG9yJyxcblx0XHQncHVuY3R1YXRpb24nLFxuXHRcdCdudW1iZXInXG5cdF07XG5cdHZhciBpbnNpZGUgPSBpbnNpZGVTdHJpbmcudmFyaWFibGVbMV0uaW5zaWRlO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRvQmVDb3BpZWQubGVuZ3RoOyBpKyspIHtcblx0XHRpbnNpZGVbdG9CZUNvcGllZFtpXV0gPSBQcmlzbS5sYW5ndWFnZXMuYmFzaFt0b0JlQ29waWVkW2ldXTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5zaGVsbCA9IFByaXNtLmxhbmd1YWdlcy5iYXNoO1xufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuYmFzaWMgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oPzohfFJFTVxcYikuKy9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXlJFTS9pXG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8WyEjJCUmJygpKixcXC86Ozw9Pj9eXFx3ICtcXC0uXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpFWystXT9cXGQrKT8vaSxcblx0J2tleXdvcmQnOiAvXFxiKD86QVN8QkVFUHxCTE9BRHxCU0FWRXxDQUxMKD86IEFCU09MVVRFKT98Q0FTRXxDSEFJTnxDSERJUnxDTEVBUnxDTE9TRXxDTFN8Q09NfENPTU1PTnxDT05TVHxEQVRBfERFQ0xBUkV8REVGKD86IEZOfCBTRUd8REJMfElOVHxMTkd8U05HfFNUUil8RElNfERPfERPVUJMRXxFTFNFfEVMU0VJRnxFTkR8RU5WSVJPTnxFUkFTRXxFUlJPUnxFWElUfEZJRUxEfEZJTEVTfEZPUnxGVU5DVElPTnxHRVR8R09TVUJ8R09UT3xJRnxJTlBVVHxJTlRFR0VSfElPQ1RMfEtFWXxLSUxMfExJTkUgSU5QVVR8TE9DQVRFfExPQ0t8TE9OR3xMT09QfExTRVR8TUtESVJ8TkFNRXxORVhUfE9GRnxPTig/OiBDT018IEVSUk9SfCBLRVl8IFRJTUVSKT98T1BFTnxPUFRJT04gQkFTRXxPVVR8UE9LRXxQVVR8UkVBRHxSRURJTXxSRU18UkVTVE9SRXxSRVNVTUV8UkVUVVJOfFJNRElSfFJTRVR8UlVOfFNFTEVDVCBDQVNFfFNIQVJFRHxTSEVMTHxTSU5HTEV8U0xFRVB8U1RBVElDfFNURVB8U1RPUHxTVFJJTkd8U1VCfFNXQVB8U1lTVEVNfFRIRU58VElNRVJ8VE98VFJPRkZ8VFJPTnxUWVBFfFVOTE9DS3xVTlRJTHxVU0lOR3xWSUVXIFBSSU5UfFdBSVR8V0VORHxXSElMRXxXUklURSkoPzpcXCR8XFxiKS9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86QUJTfEFDQ0VTU3xBQ09TfEFOR0xFfEFSRUF8QVJJVEhNRVRJQ3xBUlJBWXxBU0lOfEFTS3xBVHxBVE58QkFTRXxCRUdJTnxCUkVBS3xDQVVTRXxDRUlMfENIUnxDTElQfENPTExBVEV8Q09MT1J8Q09OfENPU3xDT1NIfENPVHxDU0N8REFURXxEQVRVTXxERUJVR3xERUNJTUFMfERFRnxERUd8REVHUkVFU3xERUxFVEV8REVUfERFVklDRXxESVNQTEFZfERPVHxFTEFQU0VEfEVQU3xFUkFTQUJMRXxFWExJTkV8RVhQfEVYVEVSTkFMfEVYVFlQRXxGSUxFVFlQRXxGSVhFRHxGUHxHT3xHUkFQSHxIQU5ETEVSfElETnxJTUFHRXxJTnxJTlR8SU5URVJOQUx8SVB8SVN8S0VZRUR8TEJPVU5EfExDQVNFfExFRlR8TEVOfExFTkdUSHxMRVR8TElORXxMSU5FU3xMT0d8TE9HMTB8TE9HMnxMVFJJTXxNQVJHSU58TUFUfE1BWHxNQVhOVU18TUlEfE1JTnxNSVNTSU5HfE1PRHxOQVRJVkV8TlVMfE5VTUVSSUN8T0Z8T1BUSU9OfE9SRHxPUkdBTklaQVRJT058T1VUSU58T1VUUFVUfFBJfFBPSU5UfFBPSU5URVJ8UE9JTlRTfFBPU3xQUklOVHxQUk9HUkFNfFBST01QVHxSQUR8UkFESUFOU3xSQU5ET01JWkV8UkVDT1JEfFJFQ1NJWkV8UkVDVFlQRXxSRUxBVElWRXxSRU1BSU5ERVJ8UkVQRUFUfFJFU1R8UkVUUll8UkVXUklURXxSSUdIVHxSTkR8Uk9VTkR8UlRSSU18U0FNRXxTRUN8U0VMRUNUfFNFUVVFTlRJQUx8U0VUfFNFVFRFUnxTR058U0lOfFNJTkh8U0laRXxTS0lQfFNRUnxTVEFOREFSRHxTVEFUVVN8U1RSfFNUUkVBTXxTVFlMRXxUQUJ8VEFOfFRBTkh8VEVNUExBVEV8VEVYVHxUSEVSRXxUSU1FfFRJTUVPVVR8VFJBQ0V8VFJBTlNGT1JNfFRSVU5DQVRFfFVCT1VORHxVQ0FTRXxVU0V8VkFMfFZBUklBQkxFfFZJRVdQT1JUfFdIRU58V0lORE9XfFdJVEh8WkVSfFpPTkVXSURUSCkoPzpcXCR8XFxiKS9pLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3xbK1xcLSpcXC9ePSZdfFxcYig/OkFORHxFUVZ8SU1QfE5PVHxPUnxYT1IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bLDs6KCldL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgdmFyaWFibGUgPSAvJSU/W346XFx3XSslP3whXFxTKyEvO1xuXHR2YXIgcGFyYW1ldGVyID0ge1xuXHRcdHBhdHRlcm46IC9cXC9bYS16P10rKD89WyA6XXwkKTo/fC1bYS16XVxcYnwtLVthLXotXStcXGIvaW0sXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLzovXG5cdFx0fVxuXHR9O1xuXHR2YXIgc3RyaW5nID0gL1wiKD86W1xcXFxcIl1cInxbXlwiXSkqXCIoPyFcIikvO1xuXHR2YXIgbnVtYmVyID0gLyg/OlxcYnwtKVxcZCtcXGIvO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5iYXRjaCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdC9eOjouKi9tLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58WyYoXSlbIFxcdF0qKXJlbVxcYig/OlteXiYpXFxyXFxuXXxcXF4oPzpcXHJcXG58W1xcc1xcU10pKSovaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdsYWJlbCc6IHtcblx0XHRcdHBhdHRlcm46IC9eOi4qL20sXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J2NvbW1hbmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEZPUiBjb21tYW5kXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbJihdKVsgXFx0XSopZm9yKD86IFxcL1thLXo/XSg/OlsgOl0oPzpcIlteXCJdKlwifFteXFxzXCIvXVxcUyopKT8pKiBcXFMrIGluIFxcKFteKV0rXFwpIGRvL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzpkb3xpbilcXGJ8XmZvclxcYi9pLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0XHRcdFx0J3BhcmFtZXRlcic6IHBhcmFtZXRlcixcblx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCknLF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIElGIGNvbW1hbmRcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFsmKF0pWyBcXHRdKilpZig/OiBcXC9bYS16P10oPzpbIDpdKD86XCJbXlwiXSpcInxbXlxcc1wiL11cXFMqKSk/KSogKD86bm90ICk/KD86Y21kZXh0dmVyc2lvbiBcXGQrfGRlZmluZWQgXFx3K3xlcnJvcmxldmVsIFxcZCt8ZXhpc3QgXFxTK3woPzpcIlteXCJdKlwifCg/IVwiKSg/Oig/IT09KVxcUykrKT8oPzo9PXwgKD86ZXF1fGdlcXxndHJ8bGVxfGxzc3xuZXEpICkoPzpcIlteXCJdKlwifFteXFxzXCJdXFxTKikpL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzpjbWRleHR2ZXJzaW9ufGRlZmluZWR8ZXJyb3JsZXZlbHxleGlzdHxub3QpXFxifF5pZlxcYi9pLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0XHRcdFx0J3BhcmFtZXRlcic6IHBhcmFtZXRlcixcblx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC9cXF58PT18XFxiKD86ZXF1fGdlcXxndHJ8bGVxfGxzc3xuZXEpXFxiL2lcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gRUxTRSBjb21tYW5kXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbJigpXSlbIFxcdF0qKWVsc2VcXGIvaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL15lbHNlXFxiL2lcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gU0VUIGNvbW1hbmRcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFsmKF0pWyBcXHRdKilzZXQoPzogXFwvW2Etel0oPzpbIDpdKD86XCJbXlwiXSpcInxbXlxcc1wiL11cXFMqKSk/KSogKD86W15eJilcXHJcXG5dfFxcXig/OlxcclxcbnxbXFxzXFxTXSkpKi9pbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXnNldFxcYi9pLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0XHRcdFx0J3BhcmFtZXRlcic6IHBhcmFtZXRlcixcblx0XHRcdFx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHRcdFx0XHR2YXJpYWJsZSxcblx0XHRcdFx0XHRcdC9cXHcrKD89KD86WypcXC8lK1xcLSZefF18PDx8Pj4pPz0pL1xuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvWypcXC8lK1xcLSZefF09P3w8PD0/fD4+PT98WyF+Xz1dLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpJyxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBPdGhlciBjb21tYW5kc1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58WyYoXSlbIFxcdF0qQD8pXFx3K1xcYig/OlwiKD86W1xcXFxcIl1cInxbXlwiXSkqXCIoPyFcIil8W15cIl4mKVxcclxcbl18XFxeKD86XFxyXFxufFtcXHNcXFNdKSkqL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL15cXHcrXFxiLyxcblx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0J2xhYmVsJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFxzKik6XFxTKy9tLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC9cXF4vXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdvcGVyYXRvcic6IC9bJkBdLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpJ10vXG5cdH07XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5iYmNvZGUgPSB7XG5cdCd0YWcnOiB7XG5cdFx0cGF0dGVybjogL1xcW1xcLz9bXlxccz1cXF1dKyg/Olxccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIlxcXT1dKykpPyg/OlxccytbXlxccz1cXF1dK1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIlxcXT1dKykpKlxccypcXF0vLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXFtcXC8/W15cXHM9XFxdXSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW1xcLz8vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLz1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiXFxdPV0rKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IFtcblx0XHRcdFx0XHRcdC9ePS8sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopW1wiJ118W1wiJ10kLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXF0vLFxuXHRcdFx0J2F0dHItbmFtZSc6IC9bXlxccz1cXF1dKy9cblx0XHR9XG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zaG9ydGNvZGUgPSBQcmlzbS5sYW5ndWFnZXMuYmJjb2RlO1xuXG4vLyBiYXNlZCBsb29zZWx5IHVwb246IGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9iaWNlcC9ibG9iL21haW4vc3JjL3RleHRtYXRlL2JpY2VwLnRtbGFuZ3VhZ2VcblByaXNtLmxhbmd1YWdlcy5iaWNlcCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gbXVsdGlsaW5lIGNvbW1lbnRzIGVnIC8qIEFTREYgKi9cblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gc2luZ2xlbGluZSBjb21tZW50cyBlZyAvLyBBU0RGXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblxuXHQncHJvcGVydHknOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXVsgXFx0XSopW2Etel9dXFx3Kig/PVsgXFx0XSo6KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXVsgXFx0XSopJyg/OlxcXFwufFxcJCg/IVxceyl8W14nXFxcXFxcclxcbiRdKSonKD89WyBcXHRdKjopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLycnJ1teJ11bXFxzXFxTXSo/JycnLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXCddKScoPzpcXFxcLnxcXCQoPyFcXHspfFteJ1xcXFxcXHJcXG4kXSkqJy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH1cblx0XSxcblx0J2ludGVycG9sYXRlZC1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXCddKScoPzpcXFxcLnxcXCQoPzooPyFcXHspfFxce1tee31cXHJcXG5dKlxcfSl8W14nXFxcXFxcclxcbiRdKSonLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFx7W157fVxcclxcbl0qXFx9Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cblx0J2RhdGF0eXBlJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86b3V0cHV0fHBhcmFtKVxcYlsgXFx0XStcXHcrWyBcXHRdKylcXHcrXFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9iaWNlcC9ibG9iLzExNGEzMjUxYjRlNmUzMDA4MmE1ODcyOWYxOWE4Y2M0ZTM3NGZmYTYvc3JjL3RleHRtYXRlL2JpY2VwLnRtbGFuZ3VhZ2UjTDE4NFxuXHQna2V5d29yZCc6IC9cXGIoPzpleGlzdGluZ3xmb3J8aWZ8aW58bW9kdWxlfG51bGx8b3V0cHV0fHBhcmFtfHJlc291cmNlfHRhcmdldFNjb3BlfHZhcilcXGIvLFxuXG5cdCdkZWNvcmF0b3InOiAvQFxcdytcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVsgXFx0XSpcXCgpL2ksXG5cblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86RVsrLV0/XFxkKyk/L2ksXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8XFwqXFwqPT98PT58JiY9P3xcXHxcXHw9P3xbIT1dPT18PDw9P3w+Pj4/PT98Wy0rKi8lJnxeIT08Pl09P3xcXC57M318XFw/XFw/PT98XFw/XFwuP3xbfjpdLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy5iaWNlcFsnaW50ZXJwb2xhdGVkLXN0cmluZyddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnZXhwcmVzc2lvbiddLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5iaWNlcDtcblxuUHJpc20ubGFuZ3VhZ2VzLmJpcmIgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvcj8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0L1xcYltBLVpdKD86W1xcZF9dKlthLXpBLVpdXFx3Kik/XFxiLyxcblxuXHRcdC8vIG1hdGNoZXMgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIHJldHVybiB0eXBlcyAocGFyYW1ldGVycyBhcyB3ZWxsKS5cblx0XHQvXFxiKD86W0EtWl1cXHcqfCg/ISg/OnZhcnx2b2lkKVxcYilbYS16XVxcdyopKD89XFxzK1xcdytcXHMqWzssPSgpXSkvXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzc2VydHxicmVha3xjYXNlfGNsYXNzfGNvbnN0fGRlZmF1bHR8ZWxzZXxlbnVtfGZpbmFsfGZvbGxvd3N8Zm9yfGdyYWJ8aWZ8bmVzdHxuZXd8bmV4dHxub1NlZWJ8cmV0dXJufHN0YXRpY3xzd2l0Y2h8dGhyb3d8dmFyfHZvaWR8d2hpbGUpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXwmJnxcXHxcXHx8PDw9P3w+Pj0/fH4oPzpcXC89Pyk/fFsrXFwtKlxcLyUmXnw9ITw+XT0/fFxcP3w6Lyxcblx0J3ZhcmlhYmxlJzogL1xcYlthLXpfXVxcdypcXGIvLFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2JpcmInLCAnZnVuY3Rpb24nLCB7XG5cdCdtZXRhZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcdys+Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuYmlzb24gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge30pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdiaXNvbicsICdjb21tZW50Jywge1xuXHQnYmlzb24nOiB7XG5cdFx0Ly8gVGhpcyBzaG91bGQgbWF0Y2ggYWxsIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVcblx0XHQvLyBpbmNsdWRpbmcgdGhlIHByb2xvZ3VlKHMpLCB0aGUgYmlzb24gZGVjbGFyYXRpb25zIGFuZFxuXHRcdC8vIHRoZSBncmFtbWFyIHJ1bGVzLlxuXHRcdHBhdHRlcm46IC9eKD86W14lXXwlKD8hJSkpKiUlW1xcc1xcU10qPyUlLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjJzoge1xuXHRcdFx0XHQvLyBBbGxvdyBmb3Igb25lIGxldmVsIG9mIG5lc3RlZCBicmFjZXNcblx0XHRcdFx0cGF0dGVybjogLyVcXHtbXFxzXFxTXSo/JVxcfXxcXHsoPzpcXHtbXn1dKlxcfXxbXnt9XSkqXFx9Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eJT9cXHt8JT9cXH0kLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnYmlzb24tdmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvWyRAXSg/OjxbXlxccz5dKz4pP1tcXHckXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzx8Pi9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5jXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnY29tbWVudCc6IFByaXNtLmxhbmd1YWdlcy5jLmNvbW1lbnQsXG5cdFx0XHQnc3RyaW5nJzogUHJpc20ubGFuZ3VhZ2VzLmMuc3RyaW5nLFxuXHRcdFx0J3Byb3BlcnR5JzogL1xcUysoPz06KS8sXG5cdFx0XHQna2V5d29yZCc6IC8lXFx3Ky8sXG5cdFx0XHQnbnVtYmVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15AXSlcXGIoPzoweFtcXGRhLWZdK3xcXGQrKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLyVbJT9dfFt8OjtcXFtcXF08Pl0vXG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJuZiA9IHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlxcclxcblwiXSpcInwnW15cXHJcXG4nXSonL1xuXHR9LFxuXHQnZGVmaW5pdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvPFtePD5cXHJcXG5cXHRdKz4oPz1cXHMqOjo9KS8sXG5cdFx0YWxpYXM6IFsncnVsZScsICdrZXl3b3JkJ10sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXjx8PiQvXG5cdFx0fVxuXHR9LFxuXHQncnVsZSc6IHtcblx0XHRwYXR0ZXJuOiAvPFtePD5cXHJcXG5cXHRdKz4vLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL148fD4kL1xuXHRcdH1cblx0fSxcblx0J29wZXJhdG9yJzogLzo6PXxbfCgpW1xcXXt9Kis/XXxcXC57M30vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucmJuZiA9IFByaXNtLmxhbmd1YWdlcy5ibmY7XG5cblByaXNtLmxhbmd1YWdlcy5icmFpbmZ1Y2sgPSB7XG5cdCdwb2ludGVyJzoge1xuXHRcdHBhdHRlcm46IC88fD4vLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2luY3JlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwrLyxcblx0XHRhbGlhczogJ2luc2VydGVkJ1xuXHR9LFxuXHQnZGVjcmVtZW50Jzoge1xuXHRcdHBhdHRlcm46IC8tLyxcblx0XHRhbGlhczogJ2RlbGV0ZWQnXG5cdH0sXG5cdCdicmFuY2hpbmcnOiB7XG5cdFx0cGF0dGVybjogL1xcW3xcXF0vLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvWy4sXS8sXG5cdCdjb21tZW50JzogL1xcUysvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYnJpZ2h0c2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IC8oPzpcXGJyZW18JykuKi9pLFxuXHQnZGlyZWN0aXZlLXN0YXRlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSMoPzpjb25zdHxlbHNlKD86W1xcdCBdK2lmKT98ZW5kW1xcdCBdK2lmfGVycm9yfGlmKS4qL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZXJyb3ItbWVzc2FnZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheI2Vycm9yKS4rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eIyg/OmNvbnN0fGVsc2UoPzpbXFx0IF0raWYpP3xlbmRbXFx0IF0raWZ8ZXJyb3J8aWYpLyxcblx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0fSxcblx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oW1xcclxcbnssXVtcXHQgXSopKD86KD8hXFxkKVxcdyt8XCIoPzpbXlwiXFxyXFxuXXxcIlwiKSpcIig/IVwiKSkoPz1bIFxcdF0qOikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcclxcbl18XCJcIikqXCIoPyFcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYkFzW1xcdCBdKylcXHcrL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpBc3xEaW18RWFjaHxFbHNlfEVsc2VpZnxFbmR8RXhpdHxGb3J8RnVuY3Rpb258R290b3xJZnxJbnxQcmludHxSZXR1cm58U3RlcHxTdG9wfFN1YnxUaGVufFRvfFdoaWxlKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1bXFx0IF0qXFwoKS8sXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCspPyg/OltlZF1bKy1dXFxkKyk/fCZoW2EtZlxcZF0rKVxcYlslJiEjXT8vaSxcblx0J29wZXJhdG9yJzogLy0tfFxcK1xcK3w+Pj0/fDw8PT98PD58Wy0rKi9cXFxcPD5dPT98WzpePT9dfFxcYig/OmFuZHxtb2R8bm90fG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOygpW1xcXXt9XS8sXG5cdCdjb25zdGFudCc6IC9cXGIoPzpMSU5FX05VTSlcXGIvaVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJyaWdodHNjcmlwdFsnZGlyZWN0aXZlLXN0YXRlbWVudCddLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5icmlnaHRzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5icm8gPSB7XG5cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXCRdKSMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpdGFsaWMnOiAvXFxiKD86RklYTUV8VE9ET3xYWFgpXFxiL1xuXHRcdH1cblx0fSxcblxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiAvXFxiW1RGXVxcYi8sXG5cblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZXZlbnR8ZnVuY3Rpb258aG9vaylbIFxcdF0rKVxcdysoPzo6OlxcdyspPy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdidWlsdGluJzogLyg/OkAoPzpsb2FkKD86LSg/OnBsdWdpbnxzaWdzKSk/fHVubG9hZHxwcmVmaXhlc3xpZm4/ZGVmfGVsc2V8KD86ZW5kKT9pZnxESVJ8RklMRU5BTUUpKXwoPzomPyg/OmFkZF9mdW5jfGNyZWF0ZV9leHBpcmV8ZGVmYXVsdHxkZWxldGVfZnVuY3xlbmNyeXB0fGVycm9yX2hhbmRsZXJ8ZXhwaXJlX2Z1bmN8Z3JvdXB8bG9nfG1lcmdlYWJsZXxvcHRpb25hbHxwZXJzaXN0ZW50fHByaW9yaXR5fHJhd19vdXRwdXR8cmVhZF9leHBpcmV8cmVkZWZ8cm90YXRlX2ludGVydmFsfHJvdGF0ZV9zaXplfHN5bmNocm9uaXplZHx0eXBlX2NvbHVtbnx3cml0ZV9leHBpcmUpKS8sXG5cblx0J2NvbnN0YW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxiY29uc3RbIFxcdF0rKVxcdysvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86YWRkfGFkZHJ8YWxhcm18YW55fGJvb2x8YnJlYWt8Y29uc3R8Y29udGludWV8Y291bnR8ZGVsZXRlfGRvdWJsZXxlbHNlfGVudW18ZXZlbnR8ZXhwb3J0fGZpbGV8Zm9yfGZ1bmN0aW9ufGdsb2JhbHxob29rfGlmfGlufGludHxpbnRlcnZhbHxsb2NhbHxtb2R1bGV8bmV4dHxvZnxvcGFxdWV8cGF0dGVybnxwb3J0fHByaW50fHJlY29yZHxyZXR1cm58c2NoZWR1bGV8c2V0fHN0cmluZ3xzdWJuZXR8dGFibGV8dGltZXx0aW1lb3V0fHVzaW5nfHZlY3Rvcnx3aGVuKVxcYi8sXG5cblx0J29wZXJhdG9yJzogLy0tP3xcXCtcXCs/fCE9Pz0/fDw9P3w+PT98PT0/PT98JiZ8XFx8XFx8P3xcXD98XFwqfFxcL3x+fFxcXnwlLyxcblxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcblxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzcyAqL1xuXG4vLyAxQzpFbnRlcnByaXNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGl2ZXJzdXMyMy9cbi8vXG5QcmlzbS5sYW5ndWFnZXMuYnNsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiBbXG5cdFx0Ly8gXHUwNDIxXHUwNDQyXHUwNDQwXHUwNDNFXHUwNDNBXHUwNDM4XG5cdFx0Ly8gU3RyaW5nc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gXHUwNDE0XHUwNDMwXHUwNDQyXHUwNDMwIFx1MDQzOCBcdTA0MzJcdTA0NDBcdTA0MzVcdTA0M0NcdTA0NEZcblx0XHQvLyBEYXRlICYgdGltZVxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8nKD86W14nXFxyXFxuXFxcXF18XFxcXC4pKicvXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHQvLyBSVVxuXHRcdFx0cGF0dGVybjogLyhefFteXFx3XFx1MDQwMC1cXHUwNDg0XFx1MDQ4Ny1cXHUwNTJmXFx1MWQyYlxcdTFkNzhcXHUyZGUwLVxcdTJkZmZcXHVhNjQwLVxcdWE2OWZcXHVmZTJlXFx1ZmUyZl0pKD86XHUwNDNGXHUwNDNFXHUwNDNBXHUwNDMwfFx1MDQzNFx1MDQzQlx1MDQ0RnxcdTA0M0RcdTA0M0VcdTA0MzJcdTA0NEJcdTA0Mzl8XHUwNDNGXHUwNDQwXHUwNDM1XHUwNDQwXHUwNDMyXHUwNDMwXHUwNDQyXHUwNDRDfFx1MDQzRlx1MDQzRVx1MDQzRlx1MDQ0Qlx1MDQ0Mlx1MDQzQVx1MDQzMHxcdTA0MzhcdTA0NDFcdTA0M0FcdTA0M0JcdTA0NEVcdTA0NDdcdTA0MzVcdTA0M0RcdTA0MzhcdTA0MzV8XHUwNDMyXHUwNDRCXHUwNDM3XHUwNDMyXHUwNDMwXHUwNDQyXHUwNDRDXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1fFx1MDQzOFx1MDQzRFx1MDQzMFx1MDQ0N1x1MDQzNXxcdTA0M0FcdTA0M0VcdTA0M0RcdTA0MzVcdTA0NDZcdTA0M0ZcdTA0M0VcdTA0M0ZcdTA0NEJcdTA0NDJcdTA0M0FcdTA0Mzh8XHUwNDNEXHUwNDM1XHUwNDNFXHUwNDNGXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNCXHUwNDM1XHUwNDNEXHUwNDNFfFx1MDQ0NFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQ0RnxcdTA0M0ZcdTA0MzVcdTA0NDBcdTA0MzVcdTA0M0N8XHUwNDMyXHUwNDNFXHUwNDM3XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDQyfFx1MDQzQVx1MDQzRVx1MDQzRFx1MDQzNVx1MDQ0Nlx1MDQ0NFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQzOHxcdTA0MzVcdTA0NDFcdTA0M0JcdTA0Mzh8XHUwNDM4XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDM1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQzRlx1MDQ0MFx1MDQzRVx1MDQ0Nlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0MFx1MDQzMHxcdTA0M0FcdTA0M0VcdTA0M0RcdTA0MzVcdTA0NDZcdTA0M0ZcdTA0NDBcdTA0M0VcdTA0NDZcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NDBcdTA0NEJ8XHUwNDQyXHUwNDNFXHUwNDMzXHUwNDM0XHUwNDMwfFx1MDQzN1x1MDQzRFx1MDQzMFx1MDQ0N3xcdTA0NERcdTA0M0FcdTA0NDFcdTA0M0ZcdTA0M0VcdTA0NDBcdTA0NDJ8XHUwNDNBXHUwNDNFXHUwNDNEXHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQzOFx1MDQzN3xcdTA0M0FcdTA0MzBcdTA0MzZcdTA0MzRcdTA0M0VcdTA0MzNcdTA0M0V8XHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM4XHUwNDNEXHUwNDMwfFx1MDQzQlx1MDQzRVx1MDQzNlx1MDQ0Q3xcdTA0M0ZcdTA0M0V8XHUwNDQ2XHUwNDM4XHUwNDNBXHUwNDNCfFx1MDQzQVx1MDQzRVx1MDQzRFx1MDQzNVx1MDQ0Nlx1MDQ0Nlx1MDQzOFx1MDQzQVx1MDQzQlx1MDQzMHxcdTA0MzJcdTA0NEJcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0M0RcdTA0MzhcdTA0NDJcdTA0NEMpKD8hW1xcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gRU5cblx0XHRcdHBhdHRlcm46IC9cXGIoPzpicmVha3xkb3xlYWNofGVsc2V8ZWxzZWlmfGVuZGRvfGVuZGZ1bmN0aW9ufGVuZGlmfGVuZHByb2NlZHVyZXxlbmR0cnl8ZXhjZXB0fGV4ZWN1dGV8ZXhwb3J0fGZhbHNlfGZvcnxmdW5jdGlvbnxpZnxpbnxuZXd8bnVsbHxwcm9jZWR1cmV8cmFpc2V8cmV0dXJufHRoZW58dG98dHJ1ZXx0cnl8dW5kZWZpbmVkfHZhbHx2YXJ8d2hpbGUpXFxiL2lcblx0XHR9XG5cdF0sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyheKD89XFxkKXxbXlxcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKSg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzpFWystXT9cXGQrKT8vaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvWzw+K1xcLSovXT0/fFslPV0vLFxuXHRcdC8vIFJVXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3XFx1MDQwMC1cXHUwNDg0XFx1MDQ4Ny1cXHUwNTJmXFx1MWQyYlxcdTFkNzhcXHUyZGUwLVxcdTJkZmZcXHVhNjQwLVxcdWE2OWZcXHVmZTJlXFx1ZmUyZl0pKD86XHUwNDM4fFx1MDQzOFx1MDQzQlx1MDQzOHxcdTA0M0RcdTA0MzUpKD8hW1xcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gRU5cblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YW5kfG5vdHxvcilcXGIvaVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1xcKFxcLnxcXC5cXCl8WygpXFxbXFxdOjssLl0vLFxuXHQnZGlyZWN0aXZlJzogW1xuXHRcdC8vIFx1MDQyMlx1MDQzNVx1MDQzM1x1MDQzOCBcdTA0M0ZcdTA0NDBcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0M0VcdTA0NDZcdTA0MzVcdTA0NDFcdTA0NDFcdTA0M0VcdTA0NDBcdTA0MzAgXHUwNDMyXHUwNDM4XHUwNDM0XHUwNDMwICZcdTA0MUFcdTA0M0JcdTA0MzhcdTA0MzVcdTA0M0RcdTA0NDIsICZcdTA0MjFcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0NDAsIC4uLlxuXHRcdC8vIFByZXByb2Nlc3NvciB0YWdzIG9mIHRoZSB0eXBlICZDbGllbnQsICZTZXJ2ZXIsIC4uLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopJi4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQvLyBcdTA0MThcdTA0M0RcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NDNcdTA0M0FcdTA0NDZcdTA0MzhcdTA0MzggXHUwNDNGXHUwNDQwXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDNFXHUwNDQ2XHUwNDM1XHUwNDQxXHUwNDQxXHUwNDNFXHUwNDQwXHUwNDMwIFx1MDQzMlx1MDQzOFx1MDQzNFx1MDQzMDpcblx0XHQvLyAjXHUwNDE1XHUwNDQxXHUwNDNCXHUwNDM4IFx1MDQyMVx1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQ0MCBcdTA0MjJcdTA0M0VcdTA0MzNcdTA0MzRcdTA0MzBcblx0XHQvLyAuLi5cblx0XHQvLyAjXHUwNDFBXHUwNDNFXHUwNDNEXHUwNDM1XHUwNDQ2XHUwNDE1XHUwNDQxXHUwNDNCXHUwNDM4XG5cdFx0Ly8gUHJlcHJvY2Vzc29yIGluc3RydWN0aW9ucyBvZiB0aGUgZm9ybTpcblx0XHQvLyAjSWYgU2VydmVyIFRoZW5cblx0XHQvLyAuLi5cblx0XHQvLyAjRW5kSWZcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSMuKi9nbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9XG5cdF1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5vc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzWydic2wnXTtcblxuLy8gaHR0cHM6Ly9jZmRvY3Mub3JnL3NjcmlwdFxuUHJpc20ubGFuZ3VhZ2VzLmNmc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYW5ub3RhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD86XnxbXi5dKUBbXFx3XFwuXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxicmVha3xjYXRjaHxjb21wb25lbnR8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5jbHVkZXxwYWNrYWdlfHByaXZhdGV8cHJvcGVydHl8cHVibGljfHJlbW90ZXxyZXF1aXJlZHxyZXRocm93fHJldHVybnxzdGF0aWN8c3dpdGNofHRocm93fHRyeXx2YXJ8d2hpbGV8eG1sKVxcYig/IVxccyo9KS8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvXFwrXFwrfC0tfCYmfFxcfFxcfHw6Onw9PnxbIT1dPT18Wy0rKi8lJnxeIT08Pl09P3xcXD8oPzpcXC58Oik/fDovLFxuXHRcdC9cXGIoPzphbmR8Y29udGFpbnN8ZXF8ZXF1YWx8ZXF2fGd0fGd0ZXxpbXB8aXN8bHR8bHRlfG1vZHxub3R8b3J8eG9yKVxcYi9cblx0XSxcblx0J3Njb3BlJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphcHBsaWNhdGlvbnxhcmd1bWVudHN8Y2dpfGNsaWVudHxjb29raWV8bG9jYWx8c2Vzc2lvbnxzdXBlcnx0aGlzfHZhcmlhYmxlcylcXGIvLFxuXHRcdGFsaWFzOiAnZ2xvYmFsJ1xuXHR9LFxuXHQndHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW55fGFycmF5fGJpbmFyeXxib29sZWFufGRhdGV8Z3VpZHxudW1lcmljfHF1ZXJ5fHN0cmluZ3xzdHJ1Y3R8dXVpZHx2b2lkfHhtbClcXGIvLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2Nmc2NyaXB0JywgJ2tleXdvcmQnLCB7XG5cdC8vIFRoaXMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUga2V5d29yZCBiZWNhdXNlIHdlIHVzZSBcImZ1bmN0aW9uXCIgaW5zaWRlIHRoZSBsb29rYWhlYWRcblx0J2Z1bmN0aW9uLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC9bXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqWz06XVxccyooPzpcXGJmdW5jdGlvblxcYnwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKVxccyo9PikpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9XG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5jZnNjcmlwdFsnY2xhc3MtbmFtZSddO1xuUHJpc20ubGFuZ3VhZ2VzLmNmYyA9IFByaXNtLmxhbmd1YWdlc1snY2ZzY3JpcHQnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNoYWlzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSknKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IFtcblx0XHR7XG5cdFx0XHQvLyBlLmcuIGNsYXNzIFJlY3RhbmdsZSB7IC4uLiB9XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmNsYXNzXFxzKylcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGUuZy4gYXR0ciBSZWN0YW5nbGU6OmhlaWdodCwgZGVmIFJlY3RhbmdsZTo6YXJlYSgpIHsgLi4uIH1cblx0XHRcdHBhdHRlcm46IC8oXFxiKD86YXR0cnxkZWYpXFxzKylcXHcrKD89XFxzKjo6KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzphdHRyfGF1dG98YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb250aW51ZXxkZWZ8ZGVmYXVsdHxlbHNlfGZpbmFsbHl8Zm9yfGZ1bnxnbG9iYWx8aWZ8cmV0dXJufHN3aXRjaHx0aGlzfHRyeXx2YXJ8d2hpbGUpXFxiLyxcblx0J251bWJlcic6IFtcblx0XHRQcmlzbS5sYW5ndWFnZXMuY3BwLm51bWJlcixcblx0XHQvXFxiKD86SW5maW5pdHl8TmFOKVxcYi9cblx0XSxcblx0J29wZXJhdG9yJzogLz4+PT98PDw9P3xcXHxcXHx8JiZ8Ols6PV0/fC0tfFxcK1xcK3xbPSE8PitcXC0qLyV8Jl5dPT98Wz9+XXxgW15gXFxyXFxuXXsxLDR9YC8sXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY2hhaXNjcmlwdCcsICdvcGVyYXRvcicsIHtcblx0J3BhcmFtZXRlci10eXBlJzoge1xuXHRcdC8vIGUuZy4gZGVmIGZvbyhpbnQgeCwgVmVjdG9yIHkpIHsuLi59XG5cdFx0cGF0dGVybjogLyhbLChdXFxzKilcXHcrKD89XFxzK1xcdykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NoYWlzY3JpcHQnLCAnc3RyaW5nJywge1xuXHQnc3RyaW5nLWludGVycG9sYXRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlwiJFxcXFxdfFxcXFxbXFxzXFxTXXxcXCQoPyFcXHspfFxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tee31dKlxcfSkqXFx9KSpcXH0pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkXFx7KD86W157fV18XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKlxcfS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLWV4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNoYWlzY3JpcHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuY2lsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLyhefFxcVylcXC5bYS16XSsoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblxuXHQvLyBBY3R1YWxseSBhbiBhc3NlbWJseSByZWZlcmVuY2Vcblx0J3ZhcmlhYmxlJzogL1xcW1tcXHdcXC5dK1xcXS8sXG5cblxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxhbnNpfGFzc2VtYmx5fGF1dG98YXV0b2NoYXJ8YmVmb3JlZmllbGRpbml0fGJvb2x8YnN0cnxieXZhbHN0cnxjYXRjaHxjaGFyfGNpbHxjbGFzc3xjdXJyZW5jeXxkYXRlfGRlY2ltYWx8ZGVmYXVsdHxlbnVtfGVycm9yfGV4cGxpY2l0fGV4dGVuZHN8ZXh0ZXJufGZhbWFuZGFzc2VtfGZhbWlseXxmYW1vcmFzc2VtfGZpbmFsKD86bHkpP3xmbG9hdDMyfGZsb2F0NjR8aGlkZWJ5c2lnfHU/aW50KD86OHwxNnwzMnw2NCk/fGlhbnR8aWRpc3BhdGNofGltcGxlbWVudHN8aW1wb3J0fGluaXRvbmx5fGluc3RhbmNlfGludGVyZmFjZXxpdW5rbm93bnxsaXRlcmFsfGxwc3RyfGxwc3RydWN0fGxwdHN0cnxscHdzdHJ8bWFuYWdlZHxtZXRob2R8bmF0aXZlKD86VHlwZSk/fG5lc3RlZHxuZXdzbG90fG9iamVjdCg/OnJlZik/fHBpbnZva2VpbXBsfHByaXZhdGV8cHJpdmF0ZXNjb3BlfHB1YmxpY3xyZXFzZWNvYmp8cnRzcGVjaWFsbmFtZXxydW50aW1lfHNlYWxlZHxzZXF1ZW50aWFsfHNlcmlhbGl6YWJsZXxzcGVjaWFsbmFtZXxzdGF0aWN8c3RyaW5nfHN0cnVjdHxzeXNjaGFyfHRic3RyfHVuaWNvZGV8dW5tYW5hZ2VkZXhwfHVuc2lnbmVkfHZhbHVlKD86dHlwZSk/fHZhcmlhbnR8dmlydHVhbHx2b2lkKVxcYi8sXG5cblx0J2Z1bmN0aW9uJzogL1xcYig/Oig/OmNvbnN0cmFpbmVkfG5vfHJlYWRvbmx5fHRhaWx8dW5hbGlnbmVkfHZvbGF0aWxlKVxcLik/KD86Y29udlxcLig/OltpdV1bMTI0OF0/fG92ZlxcLltpdV1bMTI0OF0/KD86XFwudW4pP3xyXFwudW58cjR8cjgpfGxkY1xcLig/Omk0KD86XFwuXFxkK3xcXC5bbU1dMXxcXC5zKT98aTh8cjR8cjgpfGxkZWxlbSg/OlxcLltpdV1bMTI0OF0/fFxcLnJbNDhdfFxcLnJlZnxhKT98bGRpbmRcXC4oPzpbaXVdWzEyNDhdP3xyWzQ4XXxyZWYpfHN0ZWxlbVxcLj8oPzppWzEyNDhdP3xyWzQ4XXxyZWYpP3xzdGluZFxcLig/OmlbMTI0OF0/fHJbNDhdfHJlZik/fGVuZCg/OmZhdWx0fGZpbHRlcnxmaW5hbGx5KXxsZGFyZyg/OlxcLlswLTNzXXxhKD86XFwucyk/KT98bGRsb2MoPzpcXC5cXGQrfFxcLnMpP3xzdWIoPzpcXC5vdmYoPzpcXC51bik/KT98bXVsKD86XFwub3ZmKD86XFwudW4pPyk/fGFkZCg/OlxcLm92Zig/OlxcLnVuKT8pP3xzdGxvYyg/OlxcLlswLTNzXSk/fHJlZmFueSg/OnR5cGV8dmFsKXxibHQoPzpcXC51bik/KD86XFwucyk/fGJsZSg/OlxcLnVuKT8oPzpcXC5zKT98Ymd0KD86XFwudW4pPyg/OlxcLnMpP3xiZ2UoPzpcXC51bik/KD86XFwucyk/fHVuYm94KD86XFwuYW55KT98aW5pdCg/OmJsa3xvYmopfGNhbGwoPzppfHZpcnQpP3xicmZhbHNlKD86XFwucyk/fGJuZVxcLnVuKD86XFwucyk/fGxkbG9jYSg/OlxcLnMpP3xicnplcm8oPzpcXC5zKT98YnJ0cnVlKD86XFwucyk/fGJybnVsbCg/OlxcLnMpP3xicmluc3QoPzpcXC5zKT98c3RhcmcoPzpcXC5zKT98bGVhdmUoPzpcXC5zKT98c2hyKD86XFwudW4pP3xyZW0oPzpcXC51bik/fGRpdig/OlxcLnVuKT98Y2x0KD86XFwudW4pP3xhbGlnbm1lbnR8Y2FzdGNsYXNzfGxkdmlydGZ0bnxiZXEoPzpcXC5zKT98Y2tmaW5pdGV8bGRzZmxkYXxsZHRva2VufGxvY2FsbG9jfG1rcmVmYW55fHJldGhyb3d8Y2d0XFwudW58YXJnbGlzdHxzd2l0Y2h8c3RzZmxkfHNpemVvZnxuZXdvYmp8bmV3YXJyfGxkc2ZsZHxsZG51bGx8bGRmbGRhfGlzaW5zdHx0aHJvd3xzdG9ianxzdGZsZHxsZHN0cnxsZG9ianxsZGxlbnxsZGZ0bnxsZGZsZHxjcG9ianxjcGJsa3xicmVha3xiclxcLnN8eG9yfHNobHxyZXR8cG9wfG5vdHxub3B8bmVnfGptcHxkdXB8Y2d0fGNlcXxib3h8YW5kfG9yfGJyKVxcYi8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYi0/KD86MHhbMC05YS1mXSt8XFxkKykoPzpcXC5bMC05YS1mXSspP1xcYi9pLFxuXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLDo9XXxJTF9bMC05QS1aYS16XSsvXG59O1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vamVsdWFyZC9wcmlzbS1jbG9qdXJlXG5QcmlzbS5sYW5ndWFnZXMuY2xvanVyZSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzsuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzogL1xcXFxcXHcrLyxcblx0J3N5bWJvbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1xccygpXFxbXFxde30sXSk6Oj9bXFx3KishPyc8Pj0vLi1dKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcKCkoPzotfC0+fC0+PnxcXC58XFwuXFwufFxcKnxcXC98XFwrfDx8PD18PXw9PXw+fD49fGFjY2Vzc29yfGFnZW50fGFnZW50LWVycm9yc3xhZ2V0fGFsZW5ndGh8YWxsLW5zfGFsdGVyfGFuZHxhcHBlbmQtY2hpbGR8YXBwbHl8YXJyYXktbWFwfGFzZXR8YXNldC1ib29sZWFufGFzZXQtYnl0ZXxhc2V0LWNoYXJ8YXNldC1kb3VibGV8YXNldC1mbG9hdHxhc2V0LWludHxhc2V0LWxvbmd8YXNldC1zaG9ydHxhc3NlcnR8YXNzb2N8YXdhaXR8YXdhaXQtZm9yfGJlYW58YmluZGluZ3xiaXQtYW5kfGJpdC1ub3R8Yml0LW9yfGJpdC1zaGlmdC1sZWZ0fGJpdC1zaGlmdC1yaWdodHxiaXQteG9yfGJvb2xlYW58YnJhbmNoXFw/fGJ1dGxhc3R8Ynl0ZXxjYXN0fGNoYXJ8Y2hpbGRyZW58Y2xhc3N8Y2xlYXItYWdlbnQtZXJyb3JzfGNvbW1lbnR8Y29tbXV0ZXxjb21wfGNvbXBhcmF0b3J8Y29tcGxlbWVudHxjb25jYXR8Y29uZHxjb25qfGNvbnN8Y29uc3RhbnRseXxjb25zdHJ1Y3QtcHJveHl8Y29udGFpbnNcXD98Y291bnR8Y3JlYXRlLW5zfGNyZWF0ZS1zdHJ1Y3R8Y3ljbGV8ZGVjfGRlY2xhcmV8ZGVmfGRlZi18ZGVmaW5saW5lfGRlZmludGVyZmFjZXxkZWZtYWNyb3xkZWZtZXRob2R8ZGVmbXVsdGl8ZGVmbnxkZWZuLXxkZWZvbmNlfGRlZnByb2plY3R8ZGVmcHJvdG9jb2x8ZGVmcmVjb3JkfGRlZnN0cnVjdHxkZWZ0eXBlfGRlcmVmfGRpZmZlcmVuY2V8ZGlzanxkaXNzb2N8ZGlzdGluY3R8ZG98ZG9hbGx8ZG9jfGRvcnVufGRvc2VxfGRvc3luY3xkb3RpbWVzfGRvdG98ZG91YmxlfGRvd258ZHJvcHxkcm9wLXdoaWxlfGVkaXR8ZW5kXFw/fGVuc3VyZXxldmFsfGV2ZXJ5XFw/fGZhbHNlXFw/fGZmaXJzdHxmaWxlLXNlcXxmaWx0ZXJ8ZmluZHxmaW5kLWRvY3xmaW5kLW5zfGZpbmQtdmFyfGZpcnN0fGZsb2F0fGZsdXNofGZufGZuc2VxfGZvcnxmcmVzdHxnZW5zeW18Z2V0fGdldC1wcm94eS1jbGFzc3xoYXNoLW1hcHxoYXNoLXNldHxpZGVudGljYWxcXD98aWRlbnRpdHl8aWZ8aWYtbGV0fGlmLW5vdHxpbXBvcnR8aW4tbnN8aW5jfGluZGV4fGluc2VydC1jaGlsZHxpbnNlcnQtbGVmdHxpbnNlcnQtcmlnaHR8aW5zcGVjdC10YWJsZXxpbnNwZWN0LXRyZWV8aW5zdGFuY2VcXD98aW50fGludGVybGVhdmV8aW50ZXJzZWN0aW9ufGludG98aW50by1hcnJheXxpdGVyYXRlfGpvaW58a2V5fGtleXN8a2V5d29yZHxrZXl3b3JkXFw/fGxhc3R8bGF6eS1jYXR8bGF6eS1jb25zfGxlZnR8bGVmdHN8bGV0fGxpbmUtc2VxfGxpc3R8bGlzdFxcKnxsb2FkfGxvYWQtZmlsZXxsb2NraW5nfGxvbmd8bG9vcHxtYWNyb2V4cGFuZHxtYWNyb2V4cGFuZC0xfG1ha2UtYXJyYXl8bWFrZS1ub2RlfG1hcHxtYXAtaW52ZXJ0fG1hcFxcP3xtYXBjYXR8bWF4fG1heC1rZXl8bWVtZm58bWVyZ2V8bWVyZ2Utd2l0aHxtZXRhfG1pbnxtaW4ta2V5fG1vbml0b3ItZW50ZXJ8bmFtZXxuYW1lc3BhY2V8bmVnXFw/fG5ld3xuZXdsaW5lfG5leHR8bmlsXFw/fG5vZGV8bm90fG5vdC1hbnlcXD98bm90LWV2ZXJ5XFw/fG5vdD18bnN8bnMtaW1wb3J0c3xucy1pbnRlcm5zfG5zLW1hcHxucy1uYW1lfG5zLXB1YmxpY3N8bnMtcmVmZXJzfG5zLXJlc29sdmV8bnMtdW5tYXB8bnRofG50aHJlc3R8b3J8cGFyc2V8cGFydGlhbHxwYXRofHBlZWt8cG9wfHBvc1xcP3xwcnxwci1zdHJ8cHJpbnR8cHJpbnQtc3RyfHByaW50bG58cHJpbnRsbi1zdHJ8cHJufHBybi1zdHJ8cHJvamVjdHxwcm94eXxwcm94eS1tYXBwaW5nc3xxdW90fHF1b3RlfHJhbmR8cmFuZC1pbnR8cmFuZ2V8cmUtZmluZHxyZS1ncm91cHN8cmUtbWF0Y2hlcnxyZS1tYXRjaGVzfHJlLXBhdHRlcm58cmUtc2VxfHJlYWR8cmVhZC1saW5lfHJlY3VyfHJlZHVjZXxyZWZ8cmVmLXNldHxyZWZlcnxyZW18cmVtb3ZlfHJlbW92ZS1tZXRob2R8cmVtb3ZlLW5zfHJlbmFtZXxyZW5hbWUta2V5c3xyZXBlYXR8cmVwbGFjZXxyZXBsaWNhdGV8cmVzb2x2ZXxyZXN0fHJlc3VsdHNldC1zZXF8cmV2ZXJzZXxyZmlyc3R8cmlnaHR8cmlnaHRzfHJvb3R8cnJlc3R8cnNlcXxzZWNvbmR8c2VsZWN0fHNlbGVjdC1rZXlzfHNlbmR8c2VuZC1vZmZ8c2VxfHNlcS16aXB8c2VxXFw/fHNldHxzZXQhfHNob3J0fHNsdXJwfHNvbWV8c29ydHxzb3J0LWJ5fHNvcnRlZC1tYXB8c29ydGVkLW1hcC1ieXxzb3J0ZWQtc2V0fHNwZWNpYWwtc3ltYm9sXFw/fHNwbGl0LWF0fHNwbGl0LXdpdGh8c3RyfHN0cmluZ1xcP3xzdHJ1Y3R8c3RydWN0LW1hcHxzdWJzfHN1YnZlY3xzeW1ib2x8c3ltYm9sXFw/fHN5bmN8dGFrZXx0YWtlLW50aHx0YWtlLXdoaWxlfHRlc3R8dGhyb3d8dGltZXx0by1hcnJheXx0by1hcnJheS0yZHx0cmVlLXNlcXx0cnVlXFw/fHRyeXx1bmlvbnx1cHx1cGRhdGUtcHJveHl8dmFsfHZhbHN8dmFyfHZhci1nZXR8dmFyLXNldHx2YXJcXD98dmVjdG9yfHZlY3Rvci16aXB8dmVjdG9yXFw/fHdoZW58d2hlbi1maXJzdHx3aGVuLWxldHx3aGVuLW5vdHx3aXRoLWxvY2FsLXZhcnN8d2l0aC1tZXRhfHdpdGgtb3Blbnx3aXRoLW91dC1zdHJ8eG1sLXNlcXx4bWwtemlwfHplcm9cXD98emlwbWFwfHppcHBlcikoPz1bXFxzKV18JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bmlsfHRydWUpXFxiLyxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHckQF0pKD86XFxkKyg/OlsvLl1cXGQrKT8oPzplWystXT9cXGQrKT98MHhbYS1mMC05XSt8WzEtOV1cXGQ/clthLXowLTldKylbbG1uXT8oPyFbXFx3JEBdKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXiddKVxcKClbXFx3KishPyc8Pj0vLi1dKyg/PVtcXHMpXXwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvWyNAXmB+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31cXFtcXF0oKSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNtYWtlID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXFxcXFwiXXxcXFxcLikqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFx7KD86W157fSRdfFxcJFxce1tee30kXSpcXH0pKlxcfS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXCRcXHt8XFx9Lyxcblx0XHRcdFx0XHQndmFyaWFibGUnOiAvXFx3Ky9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcYig/OkNNQUtFX1xcdyt8XFx3K18oPzooPzpCSU5BUll8U09VUkNFKV9ESVJ8REVTQ1JJUFRJT058SE9NRVBBR0VfVVJMfFJPT1R8VkVSU0lPTig/Ol9NQUpPUnxfTUlOT1J8X1BBVENIfF9UV0VBSyk/KXwoPzpBTkRST0lEfEFQUExFfEJPUkxBTkR8QlVJTERfU0hBUkVEX0xJQlN8Q0FDSEV8Q1BBQ0tfKD86QUJTT0xVVEVfREVTVElOQVRJT05fRklMRVN8Q09NUE9ORU5UX0lOQ0xVREVfVE9QTEVWRUxfRElSRUNUT1JZfEVSUk9SX09OX0FCU09MVVRFX0lOU1RBTExfREVTVElOQVRJT058SU5DTFVERV9UT1BMRVZFTF9ESVJFQ1RPUll8SU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OU3xJTlNUQUxMX1NDUklQVHxQQUNLQUdJTkdfSU5TVEFMTF9QUkVGSVh8U0VUX0RFU1RESVJ8V0FSTl9PTl9BQlNPTFVURV9JTlNUQUxMX0RFU1RJTkFUSU9OKXxDVEVTVF8oPzpCSU5BUllfRElSRUNUT1JZfEJVSUxEX0NPTU1BTkR8QlVJTERfTkFNRXxCWlJfQ09NTUFORHxCWlJfVVBEQVRFX09QVElPTlN8Q0hBTkdFX0lEfENIRUNLT1VUX0NPTU1BTkR8Q09ORklHVVJBVElPTl9UWVBFfENPTkZJR1VSRV9DT01NQU5EfENPVkVSQUdFX0NPTU1BTkR8Q09WRVJBR0VfRVhUUkFfRkxBR1N8Q1VSTF9PUFRJT05TfENVU1RPTV8oPzpDT1ZFUkFHRV9FWENMVURFfEVSUk9SX0VYQ0VQVElPTnxFUlJPUl9NQVRDSHxFUlJPUl9QT1NUX0NPTlRFWFR8RVJST1JfUFJFX0NPTlRFWFR8TUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRXxNQVhJTVVNX05VTUJFUl9PRl8oPzpFUlJPUlN8V0FSTklOR1MpfE1BWElNVU1fUEFTU0VEX1RFU1RfT1VUUFVUX1NJWkV8TUVNQ0hFQ0tfSUdOT1JFfFBPU1RfTUVNQ0hFQ0t8UE9TVF9URVNUfFBSRV9NRU1DSEVDS3xQUkVfVEVTVHxURVNUU19JR05PUkV8V0FSTklOR19FWENFUFRJT058V0FSTklOR19NQVRDSCl8Q1ZTX0NIRUNLT1VUfENWU19DT01NQU5EfENWU19VUERBVEVfT1BUSU9OU3xEUk9QX0xPQ0FUSU9OfERST1BfTUVUSE9EfERST1BfU0lURXxEUk9QX1NJVEVfQ0RBU0h8RFJPUF9TSVRFX1BBU1NXT1JEfERST1BfU0lURV9VU0VSfEVYVFJBX0NPVkVSQUdFX0dMT0J8R0lUX0NPTU1BTkR8R0lUX0lOSVRfU1VCTU9EVUxFU3xHSVRfVVBEQVRFX0NVU1RPTXxHSVRfVVBEQVRFX09QVElPTlN8SEdfQ09NTUFORHxIR19VUERBVEVfT1BUSU9OU3xMQUJFTFNfRk9SX1NVQlBST0pFQ1RTfE1FTU9SWUNIRUNLXyg/OkNPTU1BTkR8Q09NTUFORF9PUFRJT05TfFNBTklUSVpFUl9PUFRJT05TfFNVUFBSRVNTSU9OU19GSUxFfFRZUEUpfE5JR0hUTFlfU1RBUlRfVElNRXxQNF9DTElFTlR8UDRfQ09NTUFORHxQNF9PUFRJT05TfFA0X1VQREFURV9PUFRJT05TfFJVTl9DVVJSRU5UX1NDUklQVHxTQ1BfQ09NTUFORHxTSVRFfFNPVVJDRV9ESVJFQ1RPUll8U1VCTUlUX1VSTHxTVk5fQ09NTUFORHxTVk5fT1BUSU9OU3xTVk5fVVBEQVRFX09QVElPTlN8VEVTVF9MT0FEfFRFU1RfVElNRU9VVHxUUklHR0VSX1NJVEV8VVBEQVRFX0NPTU1BTkR8VVBEQVRFX09QVElPTlN8VVBEQVRFX1ZFUlNJT05fT05MWXxVU0VfTEFVTkNIRVJTKXxDWUdXSU58RU5WfEVYRUNVVEFCTEVfT1VUUFVUX1BBVEh8R0hTLU1VTFRJfElPU3xMSUJSQVJZX09VVFBVVF9QQVRIfE1JTkdXfE1TVkMoPzoxMHwxMXwxMnwxNHw2MHw3MHw3MXw4MHw5MHxfSURFfF9UT09MU0VUX1ZFUlNJT058X1ZFUlNJT04pP3xNU1lTfFBST0pFQ1RfTkFNRXxVTklYfFdJTjMyfFdJTkNFfFdJTkRPV1NfUEhPTkV8V0lORE9XU19TVE9SRXxYQ09ERSkpXFxiLyxcblx0J3Byb3BlcnR5JzogL1xcYig/OmN4eF9cXHcrfCg/OkFSQ0hJVkVfT1VUUFVUXyg/OkRJUkVDVE9SWXxOQU1FKXxDT01QSUxFX0RFRklOSVRJT05TfENPTVBJTEVfUERCX05BTUV8Q09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWXxFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRHxJTVBPUlRFRF8oPzpJTVBMSUJ8TElCTkFNRXxMSU5LX0RFUEVOREVOVF9MSUJSQVJJRVN8TElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTfExJTktfSU5URVJGQUNFX0xJQlJBUklFU3xMSU5LX0lOVEVSRkFDRV9NVUxUSVBMSUNJVFl8TE9DQVRJT058Tk9fU09OQU1FfE9CSkVDVFN8U09OQU1FKXxJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OfExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWXxMSUJSQVJZX09VVFBVVF9OQU1FfExJTktfRkxBR1N8TElOS19JTlRFUkZBQ0VfTElCUkFSSUVTfExJTktfSU5URVJGQUNFX01VTFRJUExJQ0lUWXxMT0NBVElPTnxNQVBfSU1QT1JURURfQ09ORklHfE9TWF9BUkNISVRFQ1RVUkVTfE9VVFBVVF9OQU1FfFBEQl9OQU1FfFBEQl9PVVRQVVRfRElSRUNUT1JZfFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWXxSVU5USU1FX09VVFBVVF9OQU1FfFNUQVRJQ19MSUJSQVJZX0ZMQUdTfFZTX0NTSEFSUHxWU19ET1RORVRfUkVGRVJFTkNFUFJPUHxWU19ET1RORVRfUkVGRVJFTkNFfFZTX0dMT0JBTF9TRUNUSU9OX1BPU1R8VlNfR0xPQkFMX1NFQ1RJT05fUFJFfFZTX0dMT0JBTHxYQ09ERV9BVFRSSUJVVEUpX1xcdyt8XFx3K18oPzpDTEFOR19USURZfENPTVBJTEVSX0xBVU5DSEVSfENQUENIRUNLfENQUExJTlR8SU5DTFVERV9XSEFUX1lPVV9VU0V8T1VUUFVUX05BTUV8UE9TVEZJWHxWSVNJQklMSVRZX1BSRVNFVCl8QUJTVFJBQ1R8QURESVRJT05BTF9NQUtFX0NMRUFOX0ZJTEVTfEFEVkFOQ0VEfEFMSUFTRURfVEFSR0VUfEFMTE9XX0RVUExJQ0FURV9DVVNUT01fVEFSR0VUU3xBTkRST0lEXyg/OkFOVF9BRERJVElPTkFMX09QVElPTlN8QVBJfEFQSV9NSU58QVJDSHxBU1NFVFNfRElSRUNUT1JJRVN8R1VJfEpBUl9ERVBFTkRFTkNJRVN8TkFUSVZFX0xJQl9ERVBFTkRFTkNJRVN8TkFUSVZFX0xJQl9ESVJFQ1RPUklFU3xQUk9DRVNTX01BWHxQUk9HVUFSRHxQUk9HVUFSRF9DT05GSUdfUEFUSHxTRUNVUkVfUFJPUFNfUEFUSHxTS0lQX0FOVF9TVEVQfFNUTF9UWVBFKXxBUkNISVZFX09VVFBVVF9ESVJFQ1RPUll8QVRUQUNIRURfRklMRVN8QVRUQUNIRURfRklMRVNfT05fRkFJTHxBVVRPR0VOXyg/OkJVSUxEX0RJUnxPUklHSU5fREVQRU5EU3xQQVJBTExFTHxTT1VSQ0VfR1JPVVB8VEFSR0VUU19GT0xERVJ8VEFSR0VUX0RFUEVORFMpfEFVVE9NT0N8QVVUT01PQ18oPzpDT01QSUxFUl9QUkVERUZJTkVTfERFUEVORF9GSUxURVJTfEVYRUNVVEFCTEV8TUFDUk9fTkFNRVN8TU9DX09QVElPTlN8U09VUkNFX0dST1VQfFRBUkdFVFNfRk9MREVSKXxBVVRPUkNDfEFVVE9SQ0NfRVhFQ1VUQUJMRXxBVVRPUkNDX09QVElPTlN8QVVUT1JDQ19TT1VSQ0VfR1JPVVB8QVVUT1VJQ3xBVVRPVUlDX0VYRUNVVEFCTEV8QVVUT1VJQ19PUFRJT05TfEFVVE9VSUNfU0VBUkNIX1BBVEhTfEJJTkFSWV9ESVJ8QlVJTERTWVNURU1fVEFSR0VUU3xCVUlMRF9SUEFUSHxCVUlMRF9SUEFUSF9VU0VfT1JJR0lOfEJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUnxCVUlMRF9XSVRIX0lOU1RBTExfUlBBVEh8QlVORExFfEJVTkRMRV9FWFRFTlNJT058Q0FDSEVfVkFSSUFCTEVTfENMRUFOX05PX0NVU1RPTXxDT01NT05fTEFOR1VBR0VfUlVOVElNRXxDT01QQVRJQkxFX0lOVEVSRkFDRV8oPzpCT09MfE5VTUJFUl9NQVh8TlVNQkVSX01JTnxTVFJJTkcpfENPTVBJTEVfKD86REVGSU5JVElPTlN8RkVBVFVSRVN8RkxBR1N8T1BUSU9OU3xQREJfTkFNRXxQREJfT1VUUFVUX0RJUkVDVE9SWSl8Q09TVHxDUEFDS19ERVNLVE9QX1NIT1JUQ1VUU3xDUEFDS19ORVZFUl9PVkVSV1JJVEV8Q1BBQ0tfUEVSTUFORU5UfENQQUNLX1NUQVJUVVBfU0hPUlRDVVRTfENQQUNLX1NUQVJUX01FTlVfU0hPUlRDVVRTfENQQUNLX1dJWF9BQ0x8Q1JPU1NDT01QSUxJTkdfRU1VTEFUT1J8Q1VEQV9FWFRFTlNJT05TfENVREFfUFRYX0NPTVBJTEFUSU9OfENVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MU3xDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTnxDVURBX1NUQU5EQVJEfENVREFfU1RBTkRBUkRfUkVRVUlSRUR8Q1hYX0VYVEVOU0lPTlN8Q1hYX1NUQU5EQVJEfENYWF9TVEFOREFSRF9SRVFVSVJFRHxDX0VYVEVOU0lPTlN8Q19TVEFOREFSRHxDX1NUQU5EQVJEX1JFUVVJUkVEfERFQlVHX0NPTkZJR1VSQVRJT05TfERFRklORV9TWU1CT0x8REVGSU5JVElPTlN8REVQRU5EU3xERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVN8REVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZfERJU0FCTEVEfERJU0FCTEVEX0ZFQVRVUkVTfEVDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFN8RUNMSVBTRV9FWFRSQV9OQVRVUkVTfEVOQUJMRURfRkVBVFVSRVN8RU5BQkxFRF9MQU5HVUFHRVN8RU5BQkxFX0VYUE9SVFN8RU5WSVJPTk1FTlR8RVhDTFVERV9GUk9NX0FMTHxFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRHxFWFBPUlRfTkFNRXxFWFBPUlRfUFJPUEVSVElFU3xFWFRFUk5BTF9PQkpFQ1R8RWNob1N0cmluZ3xGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTnxGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTfEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFN8RklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFN8RklORF9MSUJSQVJZX1VTRV9PUEVOQlNEX1ZFUlNJT05JTkd8RklYVFVSRVNfQ0xFQU5VUHxGSVhUVVJFU19SRVFVSVJFRHxGSVhUVVJFU19TRVRVUHxGT0xERVJ8RlJBTUVXT1JLfEZvcnRyYW5fRk9STUFUfEZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWXxHRU5FUkFURUR8R0VORVJBVE9SX0ZJTEVfTkFNRXxHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHfEdIU19JTlRFR1JJVFlfQVBQfEdIU19OT19TT1VSQ0VfR1JPVVBfRklMRXxHTE9CQUxfREVQRU5EU19ERUJVR19NT0RFfEdMT0JBTF9ERVBFTkRTX05PX0NZQ0xFU3xHTlV0b01TfEhBU19DWFh8SEVBREVSX0ZJTEVfT05MWXxIRUxQU1RSSU5HfElNUExJQ0lUX0RFUEVORFNfSU5DTFVERV9UUkFOU0ZPUk18SU1QT1JURUR8SU1QT1JURURfKD86Q09NTU9OX0xBTkdVQUdFX1JVTlRJTUV8Q09ORklHVVJBVElPTlN8R0xPQkFMfElNUExJQnxMSUJOQU1FfExJTktfREVQRU5ERU5UX0xJQlJBUklFU3xMSU5LX0lOVEVSRkFDRV8oPzpMQU5HVUFHRVN8TElCUkFSSUVTfE1VTFRJUExJQ0lUWSl8TE9DQVRJT058Tk9fU09OQU1FfE9CSkVDVFN8U09OQU1FKXxJTVBPUlRfUFJFRklYfElNUE9SVF9TVUZGSVh8SU5DTFVERV9ESVJFQ1RPUklFU3xJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTnxJTlNUQUxMX05BTUVfRElSfElOU1RBTExfUlBBVEh8SU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIfElOVEVSRkFDRV8oPzpBVVRPVUlDX09QVElPTlN8Q09NUElMRV9ERUZJTklUSU9OU3xDT01QSUxFX0ZFQVRVUkVTfENPTVBJTEVfT1BUSU9OU3xJTkNMVURFX0RJUkVDVE9SSUVTfExJTktfREVQRU5EU3xMSU5LX0RJUkVDVE9SSUVTfExJTktfTElCUkFSSUVTfExJTktfT1BUSU9OU3xQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFfFNPVVJDRVN8U1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMpfElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT058SU5fVFJZX0NPTVBJTEV8SU9TX0lOU1RBTExfQ09NQklORUR8Sk9CX1BPT0xTfEpPQl9QT09MX0NPTVBJTEV8Sk9CX1BPT0xfTElOS3xLRUVQX0VYVEVOU0lPTnxMQUJFTFN8TEFOR1VBR0V8TElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfExJTktFUl9MQU5HVUFHRXxMSU5LXyg/OkRFUEVORFN8REVQRU5EU19OT19TSEFSRUR8RElSRUNUT1JJRVN8RkxBR1N8SU5URVJGQUNFX0xJQlJBUklFU3xJTlRFUkZBQ0VfTVVMVElQTElDSVRZfExJQlJBUklFU3xPUFRJT05TfFNFQVJDSF9FTkRfU1RBVElDfFNFQVJDSF9TVEFSVF9TVEFUSUN8V0hBVF9ZT1VfVVNFKXxMSVNURklMRV9TVEFDS3xMT0NBVElPTnxNQUNPU1hfQlVORExFfE1BQ09TWF9CVU5ETEVfSU5GT19QTElTVHxNQUNPU1hfRlJBTUVXT1JLX0lORk9fUExJU1R8TUFDT1NYX1BBQ0tBR0VfTE9DQVRJT058TUFDT1NYX1JQQVRIfE1BQ1JPU3xNQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVN8TUVBU1VSRU1FTlR8TU9ESUZJRUR8TkFNRXxOT19TT05BTUV8Tk9fU1lTVEVNX0ZST01fSU1QT1JURUR8T0JKRUNUX0RFUEVORFN8T0JKRUNUX09VVFBVVFN8T1NYX0FSQ0hJVEVDVFVSRVN8T1VUUFVUX05BTUV8UEFDS0FHRVNfRk9VTkR8UEFDS0FHRVNfTk9UX0ZPVU5EfFBBUkVOVF9ESVJFQ1RPUll8UEFTU19SRUdVTEFSX0VYUFJFU1NJT058UERCX05BTUV8UERCX09VVFBVVF9ESVJFQ1RPUll8UE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERXxQT1NUX0lOU1RBTExfU0NSSVBUfFBSRURFRklORURfVEFSR0VUU19GT0xERVJ8UFJFRklYfFBSRV9JTlNUQUxMX1NDUklQVHxQUklWQVRFX0hFQURFUnxQUk9DRVNTT1JTfFBST0NFU1NPUl9BRkZJTklUWXxQUk9KRUNUX0xBQkVMfFBVQkxJQ19IRUFERVJ8UkVQT1JUX1VOREVGSU5FRF9QUk9QRVJUSUVTfFJFUVVJUkVEX0ZJTEVTfFJFU09VUkNFfFJFU09VUkNFX0xPQ0t8UlVMRV9MQVVOQ0hfQ09NUElMRXxSVUxFX0xBVU5DSF9DVVNUT018UlVMRV9MQVVOQ0hfTElOS3xSVUxFX01FU1NBR0VTfFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWXxSVU5fU0VSSUFMfFNLSVBfQVVUT0dFTnxTS0lQX0FVVE9NT0N8U0tJUF9BVVRPUkNDfFNLSVBfQVVUT1VJQ3xTS0lQX0JVSUxEX1JQQVRIfFNLSVBfUkVUVVJOX0NPREV8U09VUkNFU3xTT1VSQ0VfRElSfFNPVkVSU0lPTnxTVEFUSUNfTElCUkFSWV9GTEFHU3xTVEFUSUNfTElCUkFSWV9PUFRJT05TfFNUUklOR1N8U1VCRElSRUNUT1JJRVN8U1VGRklYfFNZTUJPTElDfFRBUkdFVF9BUkNISVZFU19NQVlfQkVfU0hBUkVEX0xJQlN8VEFSR0VUX01FU1NBR0VTfFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCU3xURVNUU3xURVNUX0lOQ0xVREVfRklMRXxURVNUX0lOQ0xVREVfRklMRVN8VElNRU9VVHxUSU1FT1VUX0FGVEVSX01BVENIfFRZUEV8VVNFX0ZPTERFUlN8VkFMVUV8VkFSSUFCTEVTfFZFUlNJT058VklTSUJJTElUWV9JTkxJTkVTX0hJRERFTnxWU18oPzpDT05GSUdVUkFUSU9OX1RZUEV8Q09QWV9UT19PVVRfRElSfERFQlVHR0VSXyg/OkNPTU1BTkR8Q09NTUFORF9BUkdVTUVOVFN8RU5WSVJPTk1FTlR8V09SS0lOR19ESVJFQ1RPUlkpfERFUExPWU1FTlRfQ09OVEVOVHxERVBMT1lNRU5UX0xPQ0FUSU9OfERPVE5FVF9SRUZFUkVOQ0VTfERPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUx8SU5DTFVERV9JTl9WU0lYfElPVF9TVEFSVFVQX1RBU0t8S0VZV09SRHxSRVNPVVJDRV9HRU5FUkFUT1J8U0NDX0FVWFBBVEh8U0NDX0xPQ0FMUEFUSHxTQ0NfUFJPSkVDVE5BTUV8U0NDX1BST1ZJREVSfFNES19SRUZFUkVOQ0VTfFNIQURFUl8oPzpESVNBQkxFX09QVElNSVpBVElPTlN8RU5BQkxFX0RFQlVHfEVOVFJZUE9JTlR8RkxBR1N8TU9ERUx8T0JKRUNUX0ZJTEVfTkFNRXxPVVRQVVRfSEVBREVSX0ZJTEV8VFlQRXxWQVJJQUJMRV9OQU1FKXxTVEFSVFVQX1BST0pFQ1R8VE9PTF9PVkVSUklERXxVU0VSX1BST1BTfFdJTlJUX0NPTVBPTkVOVHxXSU5SVF9FWFRFTlNJT05TfFdJTlJUX1JFRkVSRU5DRVN8WEFNTF9UWVBFKXxXSUxMX0ZBSUx8V0lOMzJfRVhFQ1VUQUJMRXxXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MU3xXT1JLSU5HX0RJUkVDVE9SWXxXUkFQX0VYQ0xVREV8WENPREVfKD86RU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRXxFWFBMSUNJVF9GSUxFX1RZUEV8RklMRV9BVFRSSUJVVEVTfExBU1RfS05PV05fRklMRV9UWVBFfFBST0RVQ1RfVFlQRXxTQ0hFTUVfKD86QUREUkVTU19TQU5JVElaRVJ8QUREUkVTU19TQU5JVElaRVJfVVNFX0FGVEVSX1JFVFVSTnxBUkdVTUVOVFN8RElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSfERZTkFNSUNfTElCUkFSWV9MT0FEU3xEWU5BTUlDX0xJTktFUl9BUElfVVNBR0V8RU5WSVJPTk1FTlR8RVhFQ1VUQUJMRXxHVUFSRF9NQUxMT0N8TUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QfE1BTExPQ19HVUFSRF9FREdFU3xNQUxMT0NfU0NSSUJCTEV8TUFMTE9DX1NUQUNLfFRIUkVBRF9TQU5JVElaRVIoPzpfU1RPUCk/fFVOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSKD86X1NUT1ApP3xaT01CSUVfT0JKRUNUUykpfFhDVEVTVClcXGIvLFxuXHQna2V5d29yZCc6IC9cXGIoPzphZGRfY29tcGlsZV9kZWZpbml0aW9uc3xhZGRfY29tcGlsZV9vcHRpb25zfGFkZF9jdXN0b21fY29tbWFuZHxhZGRfY3VzdG9tX3RhcmdldHxhZGRfZGVmaW5pdGlvbnN8YWRkX2RlcGVuZGVuY2llc3xhZGRfZXhlY3V0YWJsZXxhZGRfbGlicmFyeXxhZGRfbGlua19vcHRpb25zfGFkZF9zdWJkaXJlY3Rvcnl8YWRkX3Rlc3R8YXV4X3NvdXJjZV9kaXJlY3Rvcnl8YnJlYWt8YnVpbGRfY29tbWFuZHxidWlsZF9uYW1lfGNtYWtlX2hvc3Rfc3lzdGVtX2luZm9ybWF0aW9ufGNtYWtlX21pbmltdW1fcmVxdWlyZWR8Y21ha2VfcGFyc2VfYXJndW1lbnRzfGNtYWtlX3BvbGljeXxjb25maWd1cmVfZmlsZXxjb250aW51ZXxjcmVhdGVfdGVzdF9zb3VyY2VsaXN0fGN0ZXN0X2J1aWxkfGN0ZXN0X2NvbmZpZ3VyZXxjdGVzdF9jb3ZlcmFnZXxjdGVzdF9lbXB0eV9iaW5hcnlfZGlyZWN0b3J5fGN0ZXN0X21lbWNoZWNrfGN0ZXN0X3JlYWRfY3VzdG9tX2ZpbGVzfGN0ZXN0X3J1bl9zY3JpcHR8Y3Rlc3Rfc2xlZXB8Y3Rlc3Rfc3RhcnR8Y3Rlc3Rfc3VibWl0fGN0ZXN0X3Rlc3R8Y3Rlc3RfdXBkYXRlfGN0ZXN0X3VwbG9hZHxkZWZpbmVfcHJvcGVydHl8ZWxzZXxlbHNlaWZ8ZW5hYmxlX2xhbmd1YWdlfGVuYWJsZV90ZXN0aW5nfGVuZGZvcmVhY2h8ZW5kZnVuY3Rpb258ZW5kaWZ8ZW5kbWFjcm98ZW5kd2hpbGV8ZXhlY19wcm9ncmFtfGV4ZWN1dGVfcHJvY2Vzc3xleHBvcnR8ZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzfGZpbGV8ZmluZF9maWxlfGZpbmRfbGlicmFyeXxmaW5kX3BhY2thZ2V8ZmluZF9wYXRofGZpbmRfcHJvZ3JhbXxmbHRrX3dyYXBfdWl8Zm9yZWFjaHxmdW5jdGlvbnxnZXRfY21ha2VfcHJvcGVydHl8Z2V0X2RpcmVjdG9yeV9wcm9wZXJ0eXxnZXRfZmlsZW5hbWVfY29tcG9uZW50fGdldF9wcm9wZXJ0eXxnZXRfc291cmNlX2ZpbGVfcHJvcGVydHl8Z2V0X3RhcmdldF9wcm9wZXJ0eXxnZXRfdGVzdF9wcm9wZXJ0eXxpZnxpbmNsdWRlfGluY2x1ZGVfZGlyZWN0b3JpZXN8aW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3R8aW5jbHVkZV9ndWFyZHxpbmNsdWRlX3JlZ3VsYXJfZXhwcmVzc2lvbnxpbnN0YWxsfGluc3RhbGxfZmlsZXN8aW5zdGFsbF9wcm9ncmFtc3xpbnN0YWxsX3RhcmdldHN8bGlua19kaXJlY3Rvcmllc3xsaW5rX2xpYnJhcmllc3xsaXN0fGxvYWRfY2FjaGV8bG9hZF9jb21tYW5kfG1hY3JvfG1ha2VfZGlyZWN0b3J5fG1hcmtfYXNfYWR2YW5jZWR8bWF0aHxtZXNzYWdlfG9wdGlvbnxvdXRwdXRfcmVxdWlyZWRfZmlsZXN8cHJvamVjdHxxdF93cmFwX2NwcHxxdF93cmFwX3VpfHJlbW92ZXxyZW1vdmVfZGVmaW5pdGlvbnN8cmV0dXJufHNlcGFyYXRlX2FyZ3VtZW50c3xzZXR8c2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzfHNldF9wcm9wZXJ0eXxzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXN8c2V0X3RhcmdldF9wcm9wZXJ0aWVzfHNldF90ZXN0c19wcm9wZXJ0aWVzfHNpdGVfbmFtZXxzb3VyY2VfZ3JvdXB8c3RyaW5nfHN1YmRpcl9kZXBlbmRzfHN1YmRpcnN8dGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnN8dGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXN8dGFyZ2V0X2NvbXBpbGVfb3B0aW9uc3x0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc3x0YXJnZXRfbGlua19kaXJlY3Rvcmllc3x0YXJnZXRfbGlua19saWJyYXJpZXN8dGFyZ2V0X2xpbmtfb3B0aW9uc3x0YXJnZXRfc291cmNlc3x0cnlfY29tcGlsZXx0cnlfcnVufHVuc2V0fHVzZV9tYW5nbGVkX21lc2F8dXRpbGl0eV9zb3VyY2V8dmFyaWFibGVfcmVxdWlyZXN8dmFyaWFibGVfd2F0Y2h8d2hpbGV8d3JpdGVfZmlsZSkoPz1cXHMqXFwoKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfE9GRnxPTnxUUlVFKVxcYi8sXG5cdCduYW1lc3BhY2UnOiAvXFxiKD86SU5URVJGQUNFfFBSSVZBVEV8UFJPUEVSVElFU3xQVUJMSUN8U0hBUkVEfFNUQVRJQ3xUQVJHRVRfT0JKRUNUUylcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFxiKD86QU5EfERFRklORUR8RVFVQUx8R1JFQVRFUnxMRVNTfE1BVENIRVN8Tk9UfE9SfFNUUkVRVUFMfFNUUkdSRUFURVJ8U1RSTEVTU3xWRVJTSU9OX0VRVUFMfFZFUlNJT05fR1JFQVRFUnxWRVJTSU9OX0xFU1MpXFxiLyxcblx0J2luc2VydGVkJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXHcrOjpcXHcrXFxiLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspKlxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKClcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1soKT59XXxcXCRbPHtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNvYm9sID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwqPi4qfCheWyBcXHRdKilcXCouKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1t4emduXT8oPzpcIig/OlteXFxyXFxuXCJdfFwiXCIpKlwiKD8hXCIpfCcoPzpbXlxcclxcbiddfCcnKSonKD8hJykpL2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2xldmVsJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFxkK1xcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRsci9ncmFtbWFycy12NC9ibG9iLzQyZWRkNWI2ODdkMTgzYjVmYTY3OWU4NThhODIyOTdiZDI3MTQxZTcvY29ib2w4NS9Db2JvbDg1Lmc0I0wxMDE1XG5cdFx0cGF0dGVybjogLyhcXGJwaWMoPzp0dXJlKT9cXHMrKSg/Oig/OlstXFx3JC8sOiorPD5dfFxcLig/IVxcc3wkKSkoPzpcXChcXGQrXFwpKT8pKy9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbnVtYmVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKClcXGQrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldL1xuXHRcdH1cblx0fSxcblxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSkoPzpBQk9SVHxBQ0NFUFR8QUNDRVNTfEFERHxBRERSRVNTfEFEVkFOQ0lOR3xBRlRFUnxBTElHTkVEfEFMTHxBTFBIQUJFVHxBTFBIQUJFVElDfEFMUEhBQkVUSUMtTE9XRVJ8QUxQSEFCRVRJQy1VUFBFUnxBTFBIQU5VTUVSSUN8QUxQSEFOVU1FUklDLUVESVRFRHxBTFNPfEFMVEVSfEFMVEVSTkFURXxBTll8QVJFfEFSRUF8QVJFQVN8QVN8QVNDRU5ESU5HfEFTQ0lJfEFTU0lHTnxBU1NPQ0lBVEVELURBVEF8QVNTT0NJQVRFRC1EQVRBLUxFTkdUSHxBVHxBVFRSSUJVVEV8QVVUSE9SfEFVVE98QVVUTy1TS0lQfEJBQ0tHUk9VTkQtQ09MT1J8QkFDS0dST1VORC1DT0xPVVJ8QkFTSVN8QkVFUHxCRUZPUkV8QkVHSU5OSU5HfEJFTEx8QklOQVJZfEJJVHxCTEFOS3xCTElOS3xCTE9DS3xCT1RUT018Qk9VTkRTfEJZfEJZRlVOQ1RJT058QllUSVRMRXxDQUxMfENBTkNFTHxDQVBBQkxFfENDU1ZFUlNJT058Q0R8Q0Z8Q0h8Q0hBSU5JTkd8Q0hBTkdFRHxDSEFOTkVMfENIQVJBQ1RFUnxDSEFSQUNURVJTfENMQVNTfENMQVNTLUlEfENMT0NLLVVOSVRTfENMT1NFfENMT1NFLURJU1BPU0lUSU9OfENPQk9MfENPREV8Q09ERS1TRVR8Q09MfENPTExBVElOR3xDT0xVTU58Q09NLVJFR3xDT01NQXxDT01NSVRNRU5UfENPTU1PTnxDT01NVU5JQ0FUSU9OfENPTVB8Q09NUC0xfENPTVAtMnxDT01QLTN8Q09NUC00fENPTVAtNXxDT01QVVRBVElPTkFMfENPTVBVVEFUSU9OQUwtMXxDT01QVVRBVElPTkFMLTJ8Q09NUFVUQVRJT05BTC0zfENPTVBVVEFUSU9OQUwtNHxDT01QVVRBVElPTkFMLTV8Q09NUFVURXxDT05GSUdVUkFUSU9OfENPTlRBSU5TfENPTlRFTlR8Q09OVElOVUV8Q09OVFJPTHxDT05UUk9MLVBPSU5UfENPTlRST0xTfENPTlZFTlRJT058Q09OVkVSVElOR3xDT1BZfENPUlJ8Q09SUkVTUE9ORElOR3xDT1VOVHxDUlVOQ0h8Q1VSUkVOQ1l8Q1VSU09SfERBVEF8REFUQS1CQVNFfERBVEV8REFURS1DT01QSUxFRHxEQVRFLVdSSVRURU58REFZfERBWS1PRi1XRUVLfERCQ1N8REV8REVCVUctQ09OVEVOVFN8REVCVUctSVRFTXxERUJVRy1MSU5FfERFQlVHLU5BTUV8REVCVUctU1VCLTF8REVCVUctU1VCLTJ8REVCVUctU1VCLTN8REVCVUdHSU5HfERFQ0lNQUwtUE9JTlR8REVDTEFSQVRJVkVTfERFRkFVTFR8REVGQVVMVC1ESVNQTEFZfERFRklOSVRJT058REVMRVRFfERFTElNSVRFRHxERUxJTUlURVJ8REVQRU5ESU5HfERFU0NFTkRJTkd8REVTVElOQVRJT058REVUQUlMfERGSFJFU1B8REZIVkFMVUV8RElTQUJMRXxESVNLfERJU1BMQVl8RElTUExBWS0xfERJVklERXxESVZJU0lPTnxET05UQ0FSRXxET1VCTEV8RE9XTnxEVVBMSUNBVEVTfERZTkFNSUN8RUJDRElDfEVHQ1N8RUdJfEVMU0V8RU1JfEVNUFRZLUNIRUNLfEVOQUJMRXxFTkR8RU5ELUFDQ0VQVHxFTkQtQUREfEVORC1DQUxMfEVORC1DT01QVVRFfEVORC1ERUxFVEV8RU5ELURJVklERXxFTkQtRVZBTFVBVEV8RU5ELUlGfEVORC1NVUxUSVBMWXxFTkQtT0YtUEFHRXxFTkQtUEVSRk9STXxFTkQtUkVBRHxFTkQtUkVDRUlWRXxFTkQtUkVUVVJOfEVORC1SRVdSSVRFfEVORC1TRUFSQ0h8RU5ELVNUQVJUfEVORC1TVFJJTkd8RU5ELVNVQlRSQUNUfEVORC1VTlNUUklOR3xFTkQtV1JJVEV8RU5ESU5HfEVOVEVSfEVOVFJZfEVOVFJZLVBST0NFRFVSRXxFTlZJUk9OTUVOVHxFT0x8RU9QfEVPU3xFUkFTRXxFUlJPUnxFU0NBUEV8RVNJfEVWQUxVQVRFfEVWRU5UfEVWRVJZfEVYQ0VQVElPTnxFWENMVVNJVkV8RVhISUJJVHxFWElUfEVYUE9SVHxFWFRFTkR8RVhURU5ERUR8RVhURVJOQUx8RkR8RklMRXxGSUxFLUNPTlRST0x8RklMTEVSfEZJTkFMfEZJUlNUfEZPT1RJTkd8Rk9SfEZPUkVHUk9VTkQtQ09MT1J8Rk9SRUdST1VORC1DT0xPVVJ8RlJPTXxGVUxMfEZVTkNUSU9OfEZVTkNUSU9OLVBPSU5URVJ8RlVOQ1RJT05OQU1FfEdFTkVSQVRFfEdJVklOR3xHTE9CQUx8R098R09CQUNLfEdSSUR8R1JPVVB8SEVBRElOR3xISUdILVZBTFVFfEhJR0gtVkFMVUVTfEhJR0hMSUdIVHxJLU98SS1PLUNPTlRST0x8SUR8SURFTlRJRklDQVRJT058SUZ8SU1QTElDSVR8SU1QT1JUfElOfElOREVYfElOREVYRUR8SU5ESUNBVEV8SU5JVElBTHxJTklUSUFMSVpFfElOSVRJQVRFfElOUFVUfElOUFVULU9VVFBVVHxJTlNQRUNUfElOU1RBTExBVElPTnxJTlRFR0VSfElOVE98SU5WQUxJRHxJTlZPS0V8SVN8SlVTVHxKVVNUSUZJRUR8S0FOSkl8S0VQVHxLRVl8S0VZQk9BUkR8TEFCRUx8TEFOR1VBR0V8TEFTVHxMQnxMRHxMRUFESU5HfExFRlR8TEVGVExJTkV8TEVOR1RIfExFTkdUSC1DSEVDS3xMSUJBQ0NFU1N8TElCUEFSQU1FVEVSfExJQlJBUll8TElNSVR8TElNSVRTfExJTkFHRXxMSU5BR0UtQ09VTlRFUnxMSU5FfExJTkUtQ09VTlRFUnxMSU5FU3xMSU5LQUdFfExJU1R8TE9DQUx8TE9DQUwtU1RPUkFHRXxMT0NLfExPTkctREFURXxMT05HLVRJTUV8TE9XLVZBTFVFfExPVy1WQUxVRVN8TE9XRVJ8TE9XTElHSFR8TUVNT1JZfE1FUkdFfE1FU1NBR0V8TU1ERFlZWVl8TU9ERXxNT0RVTEVTfE1PUkUtTEFCRUxTfE1PVkV8TVVMVElQTEV8TVVMVElQTFl8TkFNRUR8TkFUSU9OQUx8TkFUSU9OQUwtRURJVEVEfE5BVElWRXxORUdBVElWRXxORVRXT1JLfE5FWFR8Tk98Tk8tRUNIT3xOVUxMfE5VTExTfE5VTUJFUnxOVU1FUklDfE5VTUVSSUMtREFURXxOVU1FUklDLUVESVRFRHxOVU1FUklDLVRJTUV8T0JKRUNULUNPTVBVVEVSfE9DQ1VSU3xPRFR8T0Z8T0ZGfE9NSVRURUR8T058T1BFTnxPUFRJT05BTHxPUkRFUnxPUkRFUkxZfE9SR0FOSVpBVElPTnxPVEhFUnxPVVRQVVR8T1ZFUkZMT1d8T1ZFUkxJTkV8T1dOfFBBQ0tFRC1ERUNJTUFMfFBBRERJTkd8UEFHRXxQQUdFLUNPVU5URVJ8UEFTU1dPUkR8UEVSRk9STXxQRnxQSHxQSUN8UElDVFVSRXxQTFVTfFBPSU5URVJ8UE9SVHxQT1NJVElPTnxQT1NJVElWRXxQUklOVEVSfFBSSU5USU5HfFBSSVZBVEV8UFJPQ0VEVVJFfFBST0NFRFVSRS1QT0lOVEVSfFBST0NFRFVSRVN8UFJPQ0VFRHxQUk9DRVNTfFBST0dSQU18UFJPR1JBTS1JRHxQUk9HUkFNLUxJQlJBUll8UFJPTVBUfFBVUkdFfFFVRVVFfFFVT1RFfFFVT1RFU3xSQU5ET018UkR8UkVBRHxSRUFERVJ8UkVBTHxSRUNFSVZFfFJFQ0VJVkVEfFJFQ09SRHxSRUNPUkRJTkd8UkVDT1JEU3xSRUNVUlNJVkV8UkVERUZJTkVTfFJFRUx8UkVGfFJFRkVSRU5DRXxSRUZFUkVOQ0VTfFJFTEFUSVZFfFJFTEVBU0V8UkVNQUlOREVSfFJFTUFSS1N8UkVNT1RFfFJFTU9WQUx8UkVNT1ZFfFJFTkFNRVN8UkVQTEFDRXxSRVBMQUNJTkd8UkVQT1JUfFJFUE9SVElOR3xSRVBPUlRTfFJFUVVJUkVEfFJFUlVOfFJFU0VSVkV8UkVTRVR8UkVUVVJOfFJFVFVSTi1DT0RFfFJFVFVSTklOR3xSRVZFUlNFLVZJREVPfFJFVkVSU0VEfFJFV0lORHxSRVdSSVRFfFJGfFJIfFJJR0hUfFJPVU5ERUR8UlVOfFNBTUV8U0FWRXxTQ1JFRU58U0R8U0VBUkNIfFNFQ1RJT058U0VDVVJFfFNFQ1VSSVRZfFNFR01FTlR8U0VHTUVOVC1MSU1JVHxTRUxFQ1R8U0VORHxTRU5URU5DRXxTRVBBUkFURXxTRVFVRU5DRXxTRVFVRU5USUFMfFNFVHxTSEFSRUR8U0hBUkVEQllBTEx8U0hBUkVEQllSVU5VTklUfFNIQVJJTkd8U0hJRlQtSU58U0hJRlQtT1VUfFNIT1JULURBVEV8U0lHTnxTSVpFfFNPUlR8U09SVC1DT05UUk9MfFNPUlQtQ09SRS1TSVpFfFNPUlQtRklMRS1TSVpFfFNPUlQtTUVSR0V8U09SVC1NRVNTQUdFfFNPUlQtTU9ERS1TSVpFfFNPUlQtUkVUVVJOfFNPVVJDRXxTT1VSQ0UtQ09NUFVURVJ8U1BBQ0V8U1BBQ0VTfFNQRUNJQUwtTkFNRVN8U1RBTkRBUkR8U1RBTkRBUkQtMXxTVEFOREFSRC0yfFNUQVJUfFNUQVRVU3xTVE9QfFNUUklOR3xTVUItUVVFVUUtMXxTVUItUVVFVUUtMnxTVUItUVVFVUUtM3xTVUJUUkFDVHxTVU18U1VQUFJFU1N8U1lNQk9MfFNZTUJPTElDfFNZTkN8U1lOQ0hST05JWkVEfFRBQkxFfFRBTExZfFRBTExZSU5HfFRBUEV8VEFTS3xURVJNSU5BTHxURVJNSU5BVEV8VEVTVHxURVhUfFRIRU58VEhSRUFEfFRIUkVBRC1MT0NBTHxUSFJPVUdIfFRIUlV8VElNRXxUSU1FUnxUSU1FU3xUSVRMRXxUT3xUT0RBWVMtREFURXxUT0RBWVMtTkFNRXxUT1B8VFJBSUxJTkd8VFJVTkNBVEVEfFRZUEV8VFlQRURFRnxVTkRFUkxJTkV8VU5JVHxVTlNUUklOR3xVTlRJTHxVUHxVUE9OfFVTQUdFfFVTRXxVU0lOR3xWQUxVRXxWQUxVRVN8VkFSWUlOR3xWSVJUVUFMfFdBSVR8V0hFTnxXSEVOLUNPTVBJTEVEfFdJVEh8V09SRFN8V09SS0lORy1TVE9SQUdFfFdSSVRFfFlFQVJ8WVlZWURERHxZWVlZTU1ERHxaRVJPLUZJTEx8WkVST0VTfFpFUk9TKSg/IVtcXHctXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86ZmFsc2V8dHJ1ZSkoPyFbXFx3LV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OlsrLV0/KD86KD86XFxkKyg/OlsuLF1cXGQrKT98Wy4sXVxcZCspKD86ZVsrLV0/XFxkKyk/fHplcm8pKSg/IVtcXHctXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvPD58Wzw+XT0/fFs9KyovJl0vLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/Oi18YW5kfGVxdWFsfGdyZWF0ZXJ8bGVzc3xub3R8b3J8dGhhbikoPyFbXFx3LV0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWy46LCgpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBJZ25vcmUgY29tbWVudHMgc3RhcnRpbmcgd2l0aCB7IHRvIHByaXZpbGVnZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBoaWdobGlnaHRpbmdcblx0dmFyIGNvbW1lbnQgPSAvIyg/IVxceykuKy87XG5cdHZhciBpbnRlcnBvbGF0aW9uID0ge1xuXHRcdHBhdHRlcm46IC8jXFx7W159XStcXH0vLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNvZmZlZXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7XG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdCdzdHJpbmcnOiBbXG5cblx0XHRcdC8vIFN0cmluZ3MgYXJlIG11bHRpbGluZVxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHQvLyBTdHJpbmdzIGFyZSBtdWx0aWxpbmVcblx0XHRcdFx0cGF0dGVybjogL1wiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzphbmR8YnJlYWt8Ynl8Y2F0Y2h8Y2xhc3N8Y29udGludWV8ZGVidWdnZXJ8ZGVsZXRlfGRvfGVhY2h8ZWxzZXxleHRlbmR8ZXh0ZW5kc3xmYWxzZXxmaW5hbGx5fGZvcnxpZnxpbnxpbnN0YW5jZW9mfGlzfGlzbnR8bGV0fGxvb3B8bmFtZXNwYWNlfG5ld3xub3xub3R8bnVsbHxvZnxvZmZ8b258b3J8b3dufHJldHVybnxzdXBlcnxzd2l0Y2h8dGhlbnx0aGlzfHRocm93fHRydWV8dHJ5fHR5cGVvZnx1bmRlZmluZWR8dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8d2luZG93fHdpdGh8eWVzfHlpZWxkKVxcYi8sXG5cdFx0J2NsYXNzLW1lbWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC9AKD8hXFxkKVxcdysvLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvZmZlZXNjcmlwdCcsICdjb21tZW50Jywge1xuXHRcdCdtdWx0aWxpbmUtY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8jIyNbXFxzXFxTXSs/IyMjLyxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXG5cdFx0Ly8gQmxvY2sgcmVnZXhwIGNhbiBjb250YWluIGNvbW1lbnRzIGFuZCBpbnRlcnBvbGF0aW9uXG5cdFx0J2Jsb2NrLXJlZ2V4Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL3szfVtcXHNcXFNdKj9cXC97M30vLFxuXHRcdFx0YWxpYXM6ICdyZWdleCcsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb25cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvZmZlZXNjcmlwdCcsICdzdHJpbmcnLCB7XG5cdFx0J2lubGluZS1qYXZhc2NyaXB0Jzoge1xuXHRcdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118W15cXFxcYF0pKmAvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc2NyaXB0Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YXNjcmlwdCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEJsb2NrIHN0cmluZ3Ncblx0XHQnbXVsdGlsaW5lLXN0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLycnJ1tcXHNcXFNdKj8nJycvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1wiXCJcIltcXHNcXFNdKj9cIlwiXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0aW50ZXJwb2xhdGlvbjogaW50ZXJwb2xhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvZmZlZXNjcmlwdCcsICdrZXl3b3JkJywge1xuXHRcdC8vIE9iamVjdCBwcm9wZXJ0eVxuXHRcdCdwcm9wZXJ0eSc6IC8oPyFcXGQpXFx3Kyg/PVxccyo6KD8hOikpL1xuXHR9KTtcblxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmNvZmZlZXNjcmlwdFsndGVtcGxhdGUtc3RyaW5nJ107XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNvZmZlZSA9IFByaXNtLmxhbmd1YWdlcy5jb2ZmZWVzY3JpcHQ7XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5jb25jdXJuYXMgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8XFwvXFwvLiopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbGFuZ2V4dCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFx3K1xccypcXHxcXHxbXFxzXFxTXSs/XFx8XFx8Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnY2xhc3MtbmFtZSc6IC9eXFx3Ky8sXG5cdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cXHMqXFx8XFx8KVtcXHNcXFNdKyg/PVxcfFxcfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHxcXHwvXG5cdFx0fVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccylkZWZbIFxcdF0rKVthLXpBLVpfXVxcdyooPz1cXHMqXFwoKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxhY3RvcnxhbHNvfGFubm90YXRpb258YXNzZXJ0fGFzeW5jfGF3YWl0fGJvb2x8Ym9vbGVhbnxicmVha3xieXRlfGNhc2V8Y2F0Y2h8Y2hhbmdlZHxjaGFyfGNsYXNzfGNsb3NlZHxjb25zdGFudHxjb250aW51ZXxkZWZ8ZGVmYXVsdHxkZWx8ZG91YmxlfGVsaWZ8ZWxzZXxlbnVtfGV2ZXJ5fGV4dGVuZHN8ZmFsc2V8ZmluYWxseXxmbG9hdHxmb3J8ZnJvbXxnbG9iYWx8Z3B1ZGVmfGdwdWtlcm5lbHxpZnxpbXBvcnR8aW58aW5pdHxpbmplY3R8aW50fGxhbWJkYXxsb2NhbHxsb25nfGxvb3B8bWF0Y2h8bmV3fG5vZGVmYXVsdHxudWxsfG9mfG9uY2hhbmdlfG9wZW58b3V0fG92ZXJyaWRlfHBhY2thZ2V8cGFyZm9yfHBhcmZvcnN5bmN8cG9zdHxwcmV8cHJpdmF0ZXxwcm90ZWN0ZWR8cHJvdmlkZXxwcm92aWRlcnxwdWJsaWN8cmV0dXJufHNoYXJlZHxzaG9ydHxzaW5nbGV8c2l6ZV90fHNpemVvZnxzdXBlcnxzeW5jfHRoaXN8dGhyb3d8dHJhaXR8dHJhbnN8dHJhbnNpZW50fHRydWV8dHJ5fHR5cGVkZWZ8dW5jaGVja2VkfHVzaW5nfHZhbHx2YXJ8dm9pZHx3aGlsZXx3aXRoKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bWJlcic6IC9cXGIwYlswMV1bMDFfXSpMP1xcYnxcXGIweCg/OltcXGRhLWZfXSpcXC4pP1tcXGRhLWZfcCstXStcXGJ8KD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5cXGRbXFxkX10qKSg/OmVbKy1dP1xcZFtcXGRfXSopP1tkZmxzXT8vaSxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdLyxcblx0J29wZXJhdG9yJzogLzw9PXw+PT18PT58LT58PC18PD58Jj09fCY8PnxcXD86P3xcXC5cXD98XFwrXFwrfC0tfFstKyovPTw+XT0/fFshXn5dfFxcYig/OmFuZHxhc3xiYW5kfGJvcnxieG9yfGNvbXB8aXN8aXNub3R8bW9kfG9yKVxcYj0/Lyxcblx0J2Fubm90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0AoPzpcXHcrOik/KD86XFx3K3xcXFtbXlxcXV0rXFxdKT8vLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY29uY3VybmFzJywgJ2xhbmdleHQnLCB7XG5cdCdyZWdleC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJyKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jb25jdXJuYXNcblx0XHRcdH0sXG5cdFx0XHQncmVnZXgnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcblx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC8oPzpcXEJ8XFxicykoXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNvbmN1cm5hc1xuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5jb25jID0gUHJpc20ubGFuZ3VhZ2VzLmNvbmN1cm5hcztcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBTY290dCBIZWxtZS5cbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHBzOi8vc2NvdHRoZWxtZS5jby51ay9jc3AtY2hlYXQtc2hlZXQvXG4gKlxuICogU3VwcG9ydHMgdGhlIGZvbGxvd2luZzpcbiAqICAtIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AxL1xuICogIC0gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUDIvXG4gKiAgLSBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMy9cbiAqL1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIHZhbHVlKHNvdXJjZSkge1xuXHRcdHJldHVybiBSZWdFeHAoLyhbIFxcdF0pLy5zb3VyY2UgKyAnKD86JyArIHNvdXJjZSArICcpJyArIC8oPz1bXFxzO118JCkvLnNvdXJjZSwgJ2knKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5jc3AgPSB7XG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO10pKD86YmFzZS11cml8YmxvY2stYWxsLW1peGVkLWNvbnRlbnR8KD86Y2hpbGR8Y29ubmVjdHxkZWZhdWx0fGZvbnR8ZnJhbWV8aW1nfG1hbmlmZXN0fG1lZGlhfG9iamVjdHxwcmVmZXRjaHxzY3JpcHR8c3R5bGV8d29ya2VyKS1zcmN8ZGlzb3duLW9wZW5lcnxmb3JtLWFjdGlvbnxmcmFtZS0oPzphbmNlc3RvcnN8b3B0aW9ucyl8aW5wdXQtcHJvdGVjdGlvbig/Oi0oPzpjbGlwfHNlbGVjdG9ycykpP3xuYXZpZ2F0ZS10b3xwbHVnaW4tdHlwZXN8cG9saWN5LXVyaXxyZWZlcnJlcnxyZWZsZWN0ZWQteHNzfHJlcG9ydC0oPzp0b3x1cmkpfHJlcXVpcmUtc3JpLWZvcnxzYW5kYm94fCg/OnNjcmlwdHxzdHlsZSktc3JjLSg/OmF0dHJ8ZWxlbSl8dXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0cykoPz1bXFxzO118JCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J3NjaGVtZSc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKC9bYS16XVthLXowLTkuKy1dKjovLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbm9uZSc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKC8nbm9uZScvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J25vbmNlJzoge1xuXHRcdFx0cGF0dGVybjogdmFsdWUoLydub25jZS1bLSsvXFx3PV0rJy8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdoYXNoJzoge1xuXHRcdFx0cGF0dGVybjogdmFsdWUoLydzaGEoPzoyNTZ8Mzg0fDUxMiktWy0rL1xcdz1dKycvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnaG9zdCc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKFxuXHRcdFx0XHQvW2Etel1bYS16MC05ListXSo6XFwvXFwvW15cXHM7LCddKi8uc291cmNlICtcblx0XHRcdFx0J3wnICtcblx0XHRcdFx0L1xcKlteXFxzOywnXSovLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC9bYS16MC05LV0rKD86XFwuW2EtejAtOS1dKykrKD86OltcXGQqXSspPyg/OlxcL1teXFxzOywnXSopPy8uc291cmNlXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndXJsJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW1wb3J0YW50JzogL1xcKi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiB2YWx1ZSgvJ3Vuc2FmZS1bYS16LV0rJy8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICd1bnNhZmUnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiB2YWx1ZSgvJ1thLXotXSsnLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3NhZmUnXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0J3B1bmN0dWF0aW9uJzogLzsvXG5cdH07XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29va2xhbmcvc3BlYy9ibG9iL21haW4vRUJORi5tZFxuXG5cdHZhciBzaW5nbGVfdG9rZW5fc3VmZml4ID0gLyg/Oig/IVxccylbXFxkJCs8PWEtekEtWlxceDgwLVxcdUZGRkZdKSsvLnNvdXJjZTtcblx0dmFyIG11bHRpX3Rva2VuX2luZml4ID0gL1tee31AI10rLy5zb3VyY2U7XG5cdHZhciBtdWx0aV90b2tlbl9zdWZmaXggPSAvXFx7W159I0BdKlxcfS8uc291cmNlO1xuXG5cdHZhciBtdWx0aV90b2tlbiA9IG11bHRpX3Rva2VuX2luZml4ICsgbXVsdGlfdG9rZW5fc3VmZml4O1xuXG5cdHZhciB0aW1lcl91bml0cyA9IC8oPzpofGhvdXJzfGhyc3xtfG1pbnxtaW51dGVzKS8uc291cmNlO1xuXG5cdHZhciBhbW91bnRfZ3JvdXBfaW1wbCA9IHtcblx0XHRwYXR0ZXJuOiAvXFx7W157fV0qXFx9Lyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhbW91bnQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xce3xdKVtee318KiVdKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdH0sXG5cdFx0XHQndW5pdCc6IHtcblx0XHRcdFx0cGF0dGVybjogLyglKVtefV0rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnLFxuXHRcdFx0fSxcblx0XHRcdCdzZXJ2aW5ncy1zY2FsZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCovLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdH0sXG5cdFx0XHQnc2VydmluZ3MtYWx0ZXJuYXRpdmUtc2VwYXJhdG9yJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFx8Lyxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0J3VuaXQtc2VwYXJhdG9yJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86JXwoXFwqKSUpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vLFxuXHRcdH1cblx0fTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5jb29rbGFuZyA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdC8vIFstIGNvbW1lbnQgLV1cblx0XHRcdC8vIC0tIGNvbW1lbnRcblx0XHRcdHBhdHRlcm46IC9cXFstW1xcc1xcU10qPy1cXF18LS0uKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQnbWV0YSc6IHsgLy8gPj4ga2V5OiB2YWx1ZVxuXHRcdFx0cGF0dGVybjogLz4+Lio6LiovLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwcm9wZXJ0eSc6IHsgLy8ga2V5OlxuXHRcdFx0XHRcdHBhdHRlcm46IC8oPj5cXHMqKVteXFxzOl0oPzpbXjpdKlteXFxzOl0pPy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2Nvb2t3YXJlLWdyb3VwJzogeyAvLyAjLi4uey4uLn0sICMuLi5cblx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoJyMoPzonXG5cdFx0XHRcdCsgbXVsdGlfdG9rZW5cblx0XHRcdFx0KyAnfCdcblx0XHRcdFx0KyBzaW5nbGVfdG9rZW5fc3VmZml4XG5cdFx0XHRcdCsgJyknXG5cdFx0XHQpLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb29rd2FyZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKCcoXiMpKD86J1xuXHRcdFx0XHRcdFx0KyBtdWx0aV90b2tlbl9pbmZpeFxuXHRcdFx0XHRcdFx0KyAnKSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb29rd2FyZS1rZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eIy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3F1YW50aXR5LWdyb3VwJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoL1xce1tee31AI10qXFx9LyksXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncXVhbnRpdHknOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoLyheXFx7KS8uc291cmNlICsgbXVsdGlfdG9rZW5faW5maXgpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vLFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdCdpbmdyZWRpZW50LWdyb3VwJzogeyAvLyBALi4uey4uLn0sIEAuLi5cblx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoJ0AoPzonXG5cdFx0XHRcdCsgbXVsdGlfdG9rZW5cblx0XHRcdFx0KyAnfCdcblx0XHRcdFx0KyBzaW5nbGVfdG9rZW5fc3VmZml4XG5cdFx0XHRcdCsgJyknKSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW5ncmVkaWVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKCcoXkApKD86J1xuXHRcdFx0XHRcdFx0KyBtdWx0aV90b2tlbl9pbmZpeFxuXHRcdFx0XHRcdFx0KyAnKScpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbmdyZWRpZW50LWtleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15ALyxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYW1vdW50LWdyb3VwJzogYW1vdW50X2dyb3VwX2ltcGwsXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndGltZXItZ3JvdXAnOiB7IC8vIH50aW1lcnsuLi59XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3NvcnQtYWx0ZXJuYXRpdmVzXG5cdFx0XHRwYXR0ZXJuOiAvfig/IVxccylbXkAjfnt9XSpcXHtbXnt9XSpcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0aW1lcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5+KVtee10rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZHVyYXRpb24tZ3JvdXAnOiB7IC8vIHsuLi59XG5cdFx0XHRcdFx0cGF0dGVybjogL1xce1tee31dKlxcfS8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW3t9XS8sXG5cdFx0XHRcdFx0XHQndW5pdCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogbmV3IFJlZ0V4cCgvKCVcXHMqKS8uc291cmNlICsgdGltZXJfdW5pdHMgKyAvXFxiLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCcsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogLyUvLFxuXHRcdFx0XHRcdFx0J2R1cmF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxkKy8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQndGltZXIta2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXn4vLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NvcS9jb3FcblxuXHR2YXIgY29tbWVudFNvdXJjZSA9IC9cXChcXCooPzpbXigqXXxcXCgoPyFcXCopfFxcKig/IVxcKSl8PHNlbGY+KSpcXCpcXCkvLnNvdXJjZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHtcblx0XHRjb21tZW50U291cmNlID0gY29tbWVudFNvdXJjZS5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWVudFNvdXJjZTsgfSk7XG5cdH1cblx0Y29tbWVudFNvdXJjZSA9IGNvbW1lbnRTb3VyY2UucmVwbGFjZSgvPHNlbGY+L2csICdbXScpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5jb3EgPSB7XG5cdFx0J2NvbW1lbnQnOiBSZWdFeHAoY29tbWVudFNvdXJjZSksXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2F0dHJpYnV0ZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdC8jXFxbKD86W15cXFtcXF0oXCJdfFwiKD86W15cIl18XCJcIikqXCIoPyFcIil8XFwoKD8hXFwqKXw8Y29tbWVudD4pKlxcXS8uc291cmNlXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvPGNvbW1lbnQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1lbnRTb3VyY2U7IH0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnY29tbWVudCc6IFJlZ0V4cChjb21tZW50U291cmNlKSxcblx0XHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1wiKD86W15cIl18XCJcIikqXCIoPyFcIikvLFxuXHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXiNcXFt8XFxdJHxbLCgpXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OkN1bXVsYXRpdmV8R2xvYmFsfExvY2FsfE1vbm9tb3JwaGljfE5vbkN1bXVsYXRpdmV8UG9seW1vcnBoaWN8UHJpdmF0ZXxQcm9ncmFtKVxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzpBYm9ydHxBYm91dHxBZGR8QWRtaXR8QWRtaXR0ZWR8QWxsfEFyZ3VtZW50c3xBc3xBc3N1bXB0aW9uc3xBeGlvbXxBeGlvbXN8QmFja3xCYWNrVG98QmFja3RyYWNlfEJpbk9wfEJpbk9wU3BlY3xCaW5SZWx8QmluZHxCbGFja2xpc3R8Q2Fub25pY2FsfENhc2V8Q2R8Q2hlY2t8Q2xhc3N8Q2xhc3Nlc3xDbG9zZXxDb0ZpeHBvaW50fENvSW5kdWN0aXZlfENvZXJjaW9ufENvZXJjaW9uc3xDb2xsZWN0aW9ufENvbWJpbmVkfENvbXB1dGV8Q29uamVjdHVyZXxDb25qZWN0dXJlc3xDb25zdGFudHxDb25zdGFudHN8Q29uc3RyYWludHxDb25zdHJ1Y3RvcnN8Q29udGV4dHxDb3JvbGxhcnl8Q3JlYXRlfENzdE9wfEN1c3RvbXxDdXR8RGVidWd8RGVjbGFyZXxEZWZpbmVkfERlZmluaXRpb258RGVsaW1pdHxEZXBlbmRlbmNpZXN8RGVwZW5kZW50fERlcml2ZXxEaWZmc3xEcm9wfEVsaW1pbmF0aW9ufEVuZHxFbnRyeXxFcXVhbGl0eXxFdmFsfEV4YW1wbGV8RXhpc3RlbnRpYWx8RXhpc3RlbnRpYWxzfEV4aXN0aW5nfEV4cG9ydHxFeHRlcm58RXh0cmFjdGlvbnxGYWN0fEZhaWx8RmllbGR8RmlsZXxGaXJzdG9yZGVyfEZpeHBvaW50fEZsYWdzfEZvY3VzfEZyb218RnVuY2xhc3N8RnVuY3Rpb258RnVuY3Rpb25hbHxHQ3xHZW5lcmFsaXphYmxlfEdvYWx8R3JhYnxHcmFtbWFyfEdyYXBofEd1YXJkZWR8SGFza2VsbHxIZWFwfEhpZGV8SGludHxIaW50RGJ8SGludHN8SHlwb3RoZXNlc3xIeXBvdGhlc2lzfElGfElkZW50aXR5fEltbWVkaWF0ZXxJbXBsaWNpdHxJbXBsaWNpdHN8SW1wb3J0fEluY2x1ZGV8SW5kdWN0aW9ufEluZHVjdGl2ZXxJbmZpeHxJbmZvfEluaXRpYWx8SW5qVHlwfElubGluZXxJbnNwZWN0fEluc3RhbmNlfEluc3RhbmNlc3xJbnRyb3xJbnRyb3N8SW52ZXJzaW9ufEludmVyc2lvbl9jbGVhcnxKU09OfExhbmd1YWdlfExlZnR8TGVtbWF8TGV0fExpYXxMaWJyYXJpZXN8TGlicmFyeXxMb2FkfExvYWRQYXRofExvY2F0ZXxMdGFjfEx0YWMyfE1MfE1hdGNofE1ldGhvZHxNaW5pbWFsaXR5fE1vZHVsZXxNb2R1bGVzfE1vcnBoaXNtfE5leHR8Tm9JbmxpbmV8Tm90YXRpb258TnVtYmVyfE9DYW1sfE9ibGlnYXRpb258T2JsaWdhdGlvbnN8T3BhcXVlfE9wZW58T3B0aW1pemV8UGFyYW1ldGVyfFBhcmFtZXRlcnN8UGFyYW1ldHJpY3xQYXRofFBhdGhzfFByZW5leHxQcmV0ZXJtfFByaW1pdGl2ZXxQcmludHxQcm9maWxlfFByb2plY3Rpb25zfFByb29mfFByb3B8UHJvcEJpbk9wfFByb3BPcHxQcm9wVU9wfFByb3BlcnR5fFByb3Bvc2l0aW9ufFB3ZHxRZWR8UXVpdHxSZWN8UmVjb3JkfFJlY3Vyc2l2ZXxSZWRpcmVjdHxSZWR1Y3Rpb258UmVnaXN0ZXJ8UmVsYXRpb258UmVtYXJrfFJlbW92ZXxSZXF1aXJlfFJlc2VydmVkfFJlc2V0fFJlc29sdmV8UmVzdGFydHxSZXdyaXRlfFJpZ2h0fFJpbmd8UmluZ3N8U1Byb3B8U2F0dXJhdGV8U2F2ZXxTY2hlbWV8U2NvcGV8U2NvcGVzfFNlYXJjaHxTZWFyY2hIZWFkfFNlYXJjaFBhdHRlcm58U2VhcmNoUmV3cml0ZXxTZWN0aW9ufFNlcGFyYXRlfFNldHxTZXRvaWR8U2hvd3xTaWduYXR1cmVzfFNvbHZlfFNvbHZlcnxTb3J0fFNvcnRjbGFzc3xTb3J0ZWR8U3BlY3xTdGVwfFN0cmF0ZWdpZXN8U3RyYXRlZ3l8U3RyaW5nfFN0cnVjdHVyZXxTdWJDbGFzc3xTdWJncmFwaHxTdWNoVGhhdHxUYWN0aWN8VGVybXxUZXN0Q29tcGlsZXxUaGVvcmVtfFRpbWV8VGltZW91dHxUb3xUcmFuc3BhcmVudHxUeXBlfFR5cGVjbGFzc2VzfFR5cGVzfFR5cGluZ3xVbk9wfFVuT3BTcGVjfFVuZGVsaW1pdHxVbmRvfFVuZm9jdXN8VW5mb2N1c2VkfFVuZm9sZHxVbml2ZXJzZXxVbml2ZXJzZXN8VW5zaGVsdmV8VmFyaWFibGV8VmFyaWFibGVzfFZhcmlhbnR8VmVyYm9zZXxWaWV3fFZpc2liaWxpdHl8WmlmeXxffGFwcGx5fGFzfGF0fGJ5fGNvZml4fGVsc2V8ZW5kfGV4aXN0c3xleGlzdHMyfGZpeHxmb3J8Zm9yYWxsfGZ1bnxpZnxpbnxsZXR8bWF0Y2h8bWVhc3VyZXxtb3ZlfHJlbW92ZWR8cmV0dXJufHN0cnVjdHx0aGVufHVzaW5nfHdmfHdoZXJlfHdpdGgpXFxiLyxcblxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mMC05XVthLWYwLTlfXSooPzpcXC5bYS1mMC05X10rKT8oPzpwWystXT9cXGRbXFxkX10qKT98XFxkW1xcZF9dKig/OlxcLltcXGRfXSspPyg/OmVbKy1dP1xcZFtcXGRfXSopPylcXGIvaSxcblxuXHRcdCdwdW5jdCc6IHtcblx0XHRcdHBhdHRlcm46IC9AXFx7fFxce1xcfHxcXFs9fDo+Lyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvXFwvXFxcXHxcXFxcXFwvfFxcLnsyLDN9fDp7MSwyfT18XFwqXFwqfFstPV0+fDwoPzotPj98Wys6PT5dfDw6KXw+KD86PXwtPil8XFx8Wy18XT98Wy0hJSYqKy88PT4/QF5+J10vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXC5cXCh8YFxcKHxAXFx7fGBcXHt8XFx7XFx8fFxcWz18Oj58WzouLDsoKXt9XFxbXFxdXS9cblx0fTtcblxufShQcmlzbSkpO1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IFNhbXVlbCBGbG9yZXNcbiAqXG4gKiBBZGRzIHRoZSBmb2xsb3dpbmcgbmV3IHRva2VuIGNsYXNzZXM6XG4gKiAgICAgY29uc3RhbnQsIGJ1aWx0aW4sIHZhcmlhYmxlLCBzeW1ib2wsIHJlZ2V4XG4gKi9cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnJ1YnkgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8jLip8Xj1iZWdpblxcc1tcXHNcXFNdKj9ePWVuZC9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8bW9kdWxlKVxccyt8XFxiY2F0Y2hcXHMrXFwoKVtcXHcuXFxcXF0rfFxcYltBLVpfXVxcdyooPz1cXHMqXFwuXFxzKm5ld1xcYikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWy5cXFxcXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OkJFR0lOfEVORHxhbGlhc3xhbmR8YmVnaW58YnJlYWt8Y2FzZXxjbGFzc3xkZWZ8ZGVmaW5lX21ldGhvZHxkZWZpbmVkfGRvfGVhY2h8ZWxzZXxlbHNpZnxlbmR8ZW5zdXJlfGV4dGVuZHxmb3J8aWZ8aW58aW5jbHVkZXxtb2R1bGV8bmV3fG5leHR8bmlsfG5vdHxvcnxwcmVwZW5kfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyYWlzZXxyZWRvfHJlcXVpcmV8cmVzY3VlfHJldHJ5fHJldHVybnxzZWxmfHN1cGVyfHRoZW58dGhyb3d8dW5kZWZ8dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8eWllbGQpXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwuezIsM318JlxcLnw9PT18PD89PnxbIT1dP358KD86JiZ8XFx8XFx8fDw8fD4+fFxcKlxcKnxbK1xcLSovJTw+IV4mfD1dKT0/fFs/Ol0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0uLDtdLyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncnVieScsICdvcGVyYXRvcicsIHtcblx0XHQnZG91YmxlLWNvbG9uJzoge1xuXHRcdFx0cGF0dGVybjogLzo6Lyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0fSk7XG5cblx0dmFyIGludGVycG9sYXRpb24gPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKSNcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXigjXFx7KVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0fSxcblx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5ydWJ5LmZ1bmN0aW9uO1xuXG5cdHZhciBwZXJjZW50RXhwcmVzc2lvbiA9ICcoPzonICsgW1xuXHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzw9XSkoPzooPyFcXDEpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMS8uc291cmNlLFxuXHRcdC9cXCgoPzpbXigpXFxcXF18XFxcXFtcXHNcXFNdfFxcKCg/OlteKClcXFxcXXxcXFxcW1xcc1xcU10pKlxcKSkqXFwpLy5zb3VyY2UsXG5cdFx0L1xceyg/Oltee31cXFxcXXxcXFxcW1xcc1xcU118XFx7KD86W157fVxcXFxdfFxcXFxbXFxzXFxTXSkqXFx9KSpcXH0vLnNvdXJjZSxcblx0XHQvXFxbKD86W15cXFtcXF1cXFxcXXxcXFxcW1xcc1xcU118XFxbKD86W15cXFtcXF1cXFxcXXxcXFxcW1xcc1xcU10pKlxcXSkqXFxdLy5zb3VyY2UsXG5cdFx0LzwoPzpbXjw+XFxcXF18XFxcXFtcXHNcXFNdfDwoPzpbXjw+XFxcXF18XFxcXFtcXHNcXFNdKSo+KSo+Ly5zb3VyY2Vcblx0XS5qb2luKCd8JykgKyAnKSc7XG5cblx0dmFyIHN5bWJvbE5hbWUgPSAvKD86XCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifCg/OlxcYlthLXpBLVpfXVxcdyp8W15cXHNcXDAtXFx4N0ZdKylbPyFdP3xcXCQuKS8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3J1YnknLCAna2V5d29yZCcsIHtcblx0XHQncmVnZXgtbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8lci8uc291cmNlICsgcGVyY2VudEV4cHJlc3Npb24gKyAvW2VnaW1ub3N1eF17MCw2fS8uc291cmNlKSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdFx0J3JlZ2V4JzogL1tcXHNcXFNdKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteL10pXFwvKD8hXFwvKSg/OlxcW1teXFxyXFxuXFxdXStcXF18XFxcXC58W15bL1xcXFxcXHJcXG5dKStcXC9bZWdpbW5vc3V4XXswLDZ9KD89XFxzKig/OiR8W1xcclxcbiwuO30pI10pKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdyZWdleCc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCd2YXJpYWJsZSc6IC9bQCRdK1thLXpBLVpfXVxcdyooPzpbPyFdfFxcYikvLFxuXHRcdCdzeW1ib2wnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W146XSk6Ly5zb3VyY2UgKyBzeW1ib2xOYW1lKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhbXFxyXFxueygsXVsgXFx0XSopLy5zb3VyY2UgKyBzeW1ib2xOYW1lICsgLyg/PTooPyE6KSkvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdtZXRob2QtZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiZGVmXFxzKylcXHcrKD86XFxzKlxcLlxccypcXHcrKT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXFxiXFx3KyQvLFxuXHRcdFx0XHQna2V5d29yZCc6IC9ec2VsZlxcYi8sXG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogL15cXHcrLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3J1YnknLCAnc3RyaW5nJywge1xuXHRcdCdzdHJpbmctbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8lW3FRaUl3V3NdPy8uc291cmNlICsgcGVyY2VudEV4cHJlc3Npb24pLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcInwnKSg/OiNcXHtbXn1dK1xcfXwjKD8hXFx7KXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcI1xcclxcbl0pKlxcMS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvPDxbLX5dPyhbYS16X11cXHcqKVtcXHJcXG5dKD86LipbXFxyXFxuXSkqP1tcXHQgXSpcXDEvaSxcblx0XHRcdFx0YWxpYXM6ICdoZXJlZG9jLXN0cmluZycsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9ePDxbLX5dP1thLXpfXVxcdyp8XFxiW2Etel9dXFx3KiQvaSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnc3ltYm9sJzogL1xcYlxcdysvLFxuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjw8Wy1+XT8vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC88PFstfl0/JyhbYS16X11cXHcqKSdbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9bXFx0IF0qXFwxL2ksXG5cdFx0XHRcdGFsaWFzOiAnaGVyZWRvYy1zdHJpbmcnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXjw8Wy1+XT8nW2Etel9dXFx3Kid8XFxiW2Etel9dXFx3KiQvaSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnc3ltYm9sJzogL1xcYlxcdysvLFxuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjw8Wy1+XT8nfCckLyxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY29tbWFuZC1saXRlcmFsJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyV4Ly5zb3VyY2UgKyBwZXJjZW50RXhwcmVzc2lvbiksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdjb21tYW5kJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9gKD86I1xce1tefV0rXFx9fCMoPyFcXHspfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXGAjXFxyXFxuXSkqYC8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdjb21tYW5kJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0pO1xuXG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMucnVieS5zdHJpbmc7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncnVieScsICdudW1iZXInLCB7XG5cdFx0J2J1aWx0aW4nOiAvXFxiKD86QXJyYXl8QmlnbnVtfEJpbmRpbmd8Q2xhc3N8Q29udGludWF0aW9ufERpcnxFeGNlcHRpb258RmFsc2VDbGFzc3xGaWxlfEZpeG51bXxGbG9hdHxIYXNofElPfEludGVnZXJ8TWF0Y2hEYXRhfE1ldGhvZHxNb2R1bGV8TmlsQ2xhc3N8TnVtZXJpY3xPYmplY3R8UHJvY3xSYW5nZXxSZWdleHB8U3RhdHxTdHJpbmd8U3RydWN0fFN5bWJvbHxUTVN8VGhyZWFkfFRocmVhZEdyb3VwfFRpbWV8VHJ1ZUNsYXNzKVxcYi8sXG5cdFx0J2NvbnN0YW50JzogL1xcYltBLVpdW0EtWjAtOV9dKig/Ols/IV18XFxiKS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJiID0gUHJpc20ubGFuZ3VhZ2VzLnJ1Ynk7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmNyeXN0YWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdydWJ5Jywge1xuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0L1xcYig/Ol9fRElSX198X19FTkRfTElORV9ffF9fRklMRV9ffF9fTElORV9ffGFic3RyYWN0fGFsaWFzfGFubm90YXRpb258YXN8YXNtfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRvfGVsc2V8ZWxzaWZ8ZW5kfGVuc3VyZXxlbnVtfGV4dGVuZHxmb3J8ZnVufGlmfGlmZGVmfGluY2x1ZGV8aW5zdGFuY2Vfc2l6ZW9mfGxpYnxtYWNyb3xtb2R1bGV8bmV4dHxvZnxvdXR8cG9pbnRlcm9mfHByaXZhdGV8cHJvdGVjdGVkfHB0cnxyZXF1aXJlfHJlc2N1ZXxyZXR1cm58c2VsZWN0fHNlbGZ8c2l6ZW9mfHN0cnVjdHxzdXBlcnx0aGVufHR5cGV8dHlwZW9mfHVuZGVmfHVuaW5pdGlhbGl6ZWR8dW5pb258dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8d2l0aHx5aWVsZClcXGIvLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcLlxccyopKD86aXNfYXxyZXNwb25kc190bylcXD8vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbnVtYmVyJzogL1xcYig/OjBiWzAxX10qWzAxXXwwb1swLTdfXSpbMC03XXwweFtcXGRhLWZBLUZfXSpbXFxkYS1mQS1GXXwoPzpcXGQoPzpbXFxkX10qXFxkKT8pKD86XFwuW1xcZF9dKlxcZCk/KD86W2VFXVsrLV0/W1xcZF9dKlxcZCk/KSg/Ol8oPzpbdWlmXSg/Ojh8MTZ8MzJ8NjQpKT8pP1xcYi8sXG5cdFx0J29wZXJhdG9yJzogW1xuXHRcdFx0Ly0+Lyxcblx0XHRcdFByaXNtLmxhbmd1YWdlcy5ydWJ5Lm9wZXJhdG9yLFxuXHRcdF0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9W1xcXS4sO1xcXFxdLyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3J5c3RhbCcsICdzdHJpbmctbGl0ZXJhbCcsIHtcblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogL0BcXFsuKj9cXF0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15AXFxbfFxcXSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilcXHcrLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0J2FyZ3MnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jcnlzdGFsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZXhwYW5zaW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xceyg/Olxcey4qP1xcfXwlLio/JSlcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxcey4pW1xcc1xcU10rKD89LlxcfSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNyeXN0YWxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxce1tcXHslXXxbXFx9JV1cXH0kLyxcblx0XHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2hhcic6IHtcblx0XHRcdHBhdHRlcm46IC8nKD86W15cXFxcXFxyXFxuXXsxLDJ9fFxcXFwoPzoufHUoPzpbQS1GYS1mMC05XXsxLDR9fFxce1tBLUZhLWYwLTldezEsNn1cXH0pKSknLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBzdHJpbmcgPSAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XG5cdHZhciBzZWxlY3Rvckluc2lkZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NzLnNlbGVjdG9yID0ge1xuXHRcdHBhdHRlcm46IFByaXNtLmxhbmd1YWdlcy5jc3Muc2VsZWN0b3IucGF0dGVybixcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZTogc2VsZWN0b3JJbnNpZGUgPSB7XG5cdFx0XHQncHNldWRvLWVsZW1lbnQnOiAvOig/OmFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxzZWxlY3Rpb24pfDo6Wy1cXHddKy8sXG5cdFx0XHQncHNldWRvLWNsYXNzJzogLzpbLVxcd10rLyxcblx0XHRcdCdjbGFzcyc6IC9cXC5bLVxcd10rLyxcblx0XHRcdCdpZCc6IC8jWy1cXHddKy8sXG5cdFx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ1xcXFxbKD86W15bXFxcXF1cIlxcJ118JyArIHN0cmluZy5zb3VyY2UgKyAnKSpcXFxcXScpLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbfFxcXSQvLFxuXHRcdFx0XHRcdCdjYXNlLXNlbnNpdGl2aXR5Jzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhcXHMpW3NpXSQvaSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKikoPzooPyFcXHMpWy0qXFx3XFx4QTAtXFx1RkZGRl0pKlxcfCg/IT0pLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfCQvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKikoPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkrLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdhdHRyLXZhbHVlJzogW1xuXHRcdFx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKSg/Oig/IVxccylbLVxcd1xceEEwLVxcdUZGRkZdKSsoPz1cXHMqJCkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvW3x+Kl4kXT89L1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J24tdGgnOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcKFxccyopWystXT9cXGQqW1xcZG5dKD86XFxzKlsrLV1cXHMqXFxkKyk/KD89XFxzKlxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnbnVtYmVyJzogL1tcXGRuXSsvLFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogL1srLV0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXChcXHMqKSg/OmV2ZW58b2RkKSg/PVxccypcXCkpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0J2NvbWJpbmF0b3InOiAvPnxcXCt8fnxcXHxcXHwvLFxuXG5cdFx0XHQvLyB0aGUgYHRhZ2AgdG9rZW4gaGFzIGJlZW4gZXhpc3RlZCBhbmQgcmVtb3ZlZC5cblx0XHRcdC8vIGJlY2F1c2Ugd2UgY2FuJ3QgZmluZCBhIHBlcmZlY3QgdG9rZW5pemUgdG8gbWF0Y2ggaXQuXG5cdFx0XHQvLyBpZiB5b3Ugd2FudCB0byBhZGQgaXQsIHBsZWFzZSByZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL3B1bGwvMjM3MyBmaXJzdC5cblxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdLyxcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzc1snYXRydWxlJ10uaW5zaWRlWydzZWxlY3Rvci1mdW5jdGlvbi1hcmd1bWVudCddLmluc2lkZSA9IHNlbGVjdG9ySW5zaWRlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzcycsICdwcm9wZXJ0eScsIHtcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14tXFx3XFx4QTAtXFx1RkZGRl0pLS0oPyFcXHMpWy1fYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkqL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgdW5pdCA9IHtcblx0XHRwYXR0ZXJuOiAvKFxcYlxcZCspKD86JXxbYS16XSsoPyFbXFx3LV0pKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9O1xuXHQvLyAxMjMgLTEyMyAuMTIzIC0uMTIzIDEyLjMgLTEyLjNcblx0dmFyIG51bWJlciA9IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pLT8oPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NzJywgJ2Z1bmN0aW9uJywge1xuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxzKVsrXFwtKlxcL10oPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIENBUkVGVUwhXG5cdFx0Ly8gUHJldmlld2VycyBhbmQgSW5saW5lIGNvbG9yIHVzZSBoZXhjb2RlIGFuZCBjb2xvci5cblx0XHQnaGV4Y29kZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXEIjW1xcZGEtZl17Myw4fVxcYi9pLFxuXHRcdFx0YWxpYXM6ICdjb2xvcidcblx0XHR9LFxuXHRcdCdjb2xvcic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86QWxpY2VCbHVlfEFudGlxdWVXaGl0ZXxBcXVhfEFxdWFtYXJpbmV8QXp1cmV8QmVpZ2V8QmlzcXVlfEJsYWNrfEJsYW5jaGVkQWxtb25kfEJsdWV8Qmx1ZVZpb2xldHxCcm93bnxCdXJseVdvb2R8Q2FkZXRCbHVlfENoYXJ0cmV1c2V8Q2hvY29sYXRlfENvcmFsfENvcm5mbG93ZXJCbHVlfENvcm5zaWxrfENyaW1zb258Q3lhbnxEYXJrQmx1ZXxEYXJrQ3lhbnxEYXJrR29sZGVuUm9kfERhcmtHclthZV15fERhcmtHcmVlbnxEYXJrS2hha2l8RGFya01hZ2VudGF8RGFya09saXZlR3JlZW58RGFya09yYW5nZXxEYXJrT3JjaGlkfERhcmtSZWR8RGFya1NhbG1vbnxEYXJrU2VhR3JlZW58RGFya1NsYXRlQmx1ZXxEYXJrU2xhdGVHclthZV15fERhcmtUdXJxdW9pc2V8RGFya1Zpb2xldHxEZWVwUGlua3xEZWVwU2t5Qmx1ZXxEaW1HclthZV15fERvZGdlckJsdWV8RmlyZUJyaWNrfEZsb3JhbFdoaXRlfEZvcmVzdEdyZWVufEZ1Y2hzaWF8R2FpbnNib3JvfEdob3N0V2hpdGV8R29sZHxHb2xkZW5Sb2R8R3JbYWVdeXxHcmVlbnxHcmVlblllbGxvd3xIb25leURld3xIb3RQaW5rfEluZGlhblJlZHxJbmRpZ298SXZvcnl8S2hha2l8TGF2ZW5kZXJ8TGF2ZW5kZXJCbHVzaHxMYXduR3JlZW58TGVtb25DaGlmZm9ufExpZ2h0Qmx1ZXxMaWdodENvcmFsfExpZ2h0Q3lhbnxMaWdodEdvbGRlblJvZFllbGxvd3xMaWdodEdyW2FlXXl8TGlnaHRHcmVlbnxMaWdodFBpbmt8TGlnaHRTYWxtb258TGlnaHRTZWFHcmVlbnxMaWdodFNreUJsdWV8TGlnaHRTbGF0ZUdyW2FlXXl8TGlnaHRTdGVlbEJsdWV8TGlnaHRZZWxsb3d8TGltZXxMaW1lR3JlZW58TGluZW58TWFnZW50YXxNYXJvb258TWVkaXVtQXF1YU1hcmluZXxNZWRpdW1CbHVlfE1lZGl1bU9yY2hpZHxNZWRpdW1QdXJwbGV8TWVkaXVtU2VhR3JlZW58TWVkaXVtU2xhdGVCbHVlfE1lZGl1bVNwcmluZ0dyZWVufE1lZGl1bVR1cnF1b2lzZXxNZWRpdW1WaW9sZXRSZWR8TWlkbmlnaHRCbHVlfE1pbnRDcmVhbXxNaXN0eVJvc2V8TW9jY2FzaW58TmF2YWpvV2hpdGV8TmF2eXxPbGRMYWNlfE9saXZlfE9saXZlRHJhYnxPcmFuZ2V8T3JhbmdlUmVkfE9yY2hpZHxQYWxlR29sZGVuUm9kfFBhbGVHcmVlbnxQYWxlVHVycXVvaXNlfFBhbGVWaW9sZXRSZWR8UGFwYXlhV2hpcHxQZWFjaFB1ZmZ8UGVydXxQaW5rfFBsdW18UG93ZGVyQmx1ZXxQdXJwbGV8UmViZWNjYVB1cnBsZXxSZWR8Um9zeUJyb3dufFJveWFsQmx1ZXxTYWRkbGVCcm93bnxTYWxtb258U2FuZHlCcm93bnxTZWFHcmVlbnxTZWFTaGVsbHxTaWVubmF8U2lsdmVyfFNreUJsdWV8U2xhdGVCbHVlfFNsYXRlR3JbYWVdeXxTbm93fFNwcmluZ0dyZWVufFN0ZWVsQmx1ZXxUYW58VGVhbHxUaGlzdGxlfFRvbWF0b3xUcmFuc3BhcmVudHxUdXJxdW9pc2V8VmlvbGV0fFdoZWF0fFdoaXRlfFdoaXRlU21va2V8WWVsbG93fFllbGxvd0dyZWVuKSg/IVtcXHctXSkvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OmhzbHxyZ2IpXFwoXFxzKlxcZHsxLDN9XFxzKixcXHMqXFxkezEsM30lP1xccyosXFxzKlxcZHsxLDN9JT9cXHMqXFwpXFxCfFxcYig/OmhzbHxyZ2IpYVxcKFxccypcXGR7MSwzfVxccyosXFxzKlxcZHsxLDN9JT9cXHMqLFxccypcXGR7MSwzfSU/XFxzKixcXHMqKD86MHwwP1xcLlxcZCt8MSlcXHMqXFwpXFxCL2ksXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCd1bml0JzogdW5pdCxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdmdW5jdGlvbic6IC9bXFx3LV0rKD89XFwoKS8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBpdCdzIGltcG9ydGFudCB0aGF0IHRoZXJlIGlzIG5vIGJvdW5kYXJ5IGFzc2VydGlvbiBhZnRlciB0aGUgaGV4IGRpZ2l0c1xuXHRcdCdlbnRpdHknOiAvXFxcXFtcXGRhLWZdezEsOH0vaSxcblx0XHQndW5pdCc6IHVuaXQsXG5cdFx0J251bWJlcic6IG51bWJlclxuXHR9KTtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDE4MFxuXG5QcmlzbS5sYW5ndWFnZXMuY3N2ID0ge1xuXHQndmFsdWUnOiAvW15cXHJcXG4sXCJdK3xcIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0J3B1bmN0dWF0aW9uJzogLywvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly9jdWVsYW5nLm9yZy9kb2NzL3JlZmVyZW5jZXMvc3BlYy9cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHR2YXIgc3RyaW5nRXNjYXBlID0gL1xcXFwoPzooPyFcXDIpfFxcMig/OlteKClcXHJcXG5dfFxcKFteKCldKlxcKSkpLy5zb3VyY2U7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdHZhciBzdHJpbmdUeXBlcyA9IC9cIlwiXCIoPzpbXlxcXFxcIl18XCIoPyFcIlwiXFwyKXw8ZXNjPikqXCJcIlwiLy5zb3VyY2UgK1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0J3wnICsgLycnJyg/OlteXFxcXCddfCcoPyEnJ1xcMil8PGVzYz4pKicnJy8uc291cmNlICtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdCd8JyArIC9cIig/OlteXFxcXFxcclxcblwiXXxcIig/IVxcMil8PGVzYz4pKlwiLy5zb3VyY2UgK1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0J3wnICsgLycoPzpbXlxcXFxcXHJcXG4nXXwnKD8hXFwyKXw8ZXNjPikqJy8uc291cmNlO1xuXHR2YXIgc3RyaW5nTGl0ZXJhbCA9ICcoPzonICsgc3RyaW5nVHlwZXMucmVwbGFjZSgvPGVzYz4vZywgc3RyaW5nRXNjYXBlKSArICcpJztcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3VlID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W14jXCInXFxcXF0pKCMqKS8uc291cmNlICsgc3RyaW5nTGl0ZXJhbCArIC8oPyFbXCInXSlcXDIvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEknbSB1c2luZyBkaXJ0eSBoYWNrIGhlcmUuIFdlIGhhdmUgdG8ga25vdyB0aGUgbnVtYmVyIGhhc2hlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBzb21laG93LFxuXHRcdFx0XHQvLyBidXQgd2UgY2FuJ3QgbG9vayBiYWNrLiBTbyBpbnN0ZWFkLCB3ZSB3aWxsIHVzZSBhIGxvb2thaGVhZCwgZ28gdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBhbmRcblx0XHRcdFx0Ly8gY2FwdHVyZSB0aGUgaGFzaGVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cblx0XHRcdFx0J2VzY2FwZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD89W1xcc1xcU10qW1wiJ10oIyopJClcXFxcXFwxKD86VVthLWZBLUYwLTldezEsOH18dVthLWZBLUYwLTldezEsNH18eFthLWZBLUYwLTldezEsMn18XFxkezIsM318W14oXSkvLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/PVtcXHNcXFNdKltcIiddKCMqKSQpXFxcXFxcMVxcKFteKCldKlxcKS8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFxcIypcXCh8XFwpJC8sXG5cdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbnVsbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JF0pKD86Zm9yfGlmfGltcG9ydHxpbnxsZXR8bnVsbHxwYWNrYWdlKSg/IVtcXHckXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHckXSkoPzpmYWxzZXx0cnVlKSg/IVtcXHckXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2J1aWx0aW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHckXSkoPzpib29sfGJ5dGVzfGZsb2F0fGZsb2F0KD86MzJ8NjQpfHU/aW50KD86OHwxNnwzMnw2NHwxMjgpP3xudW1iZXJ8cnVuZXxzdHJpbmcpKD8hW1xcdyRdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFtcXHckXSsoPz1cXHMqXFwoKS8sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JF0pW2Etel8kXVtcXHckXSooPz1cXHMqXFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JC5dKSg/OjBiWzAxXSsoPzpfWzAxXSspKnwwb1swLTddKyg/Ol9bMC03XSspKnwwW3hYXVswLTlBLUZhLWZdKyg/Ol9bMC05QS1GYS1mXSspKnwoPzpcXGQrKD86X1xcZCspKig/OlxcLig/OlxcZCsoPzpfXFxkKykqKT8pP3xcXC5cXGQrKD86X1xcZCspKikoPzpbZUVdWystXT9cXGQrKD86X1xcZCspKik/KD86W0tNR1RQXWk/KT8pKD8hW1xcdyRdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdCdvcGVyYXRvcic6IC9cXC57M318X1xcfF98JiY/fFxcfFxcfD98Wz0hXX58Wzw+PSFdPT98WytcXC0qLz9dLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LC46XS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3VlWydzdHJpbmctbGl0ZXJhbCddLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5jdWU7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmN5cGhlciA9IHtcblx0Ly8gaHR0cHM6Ly9uZW80ai5jb20vZG9jcy9jeXBoZXItbWFudWFsL2N1cnJlbnQvc3ludGF4L2NvbW1lbnRzL1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXC4pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKDpcXHMqKSg/Olxcdyt8YCg/OlteYFxcXFxcXHJcXG5dKSpgKSg/PVxccypbeyk6XSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdyZWxhdGlvbnNoaXAnOiB7XG5cdFx0cGF0dGVybjogLygtXFxbXFxzKig/OlxcdytcXHMqfGAoPzpbXmBcXFxcXFxyXFxuXSkqYFxccyopPzpcXHMqfFxcfFxccyo6XFxzKikoPzpcXHcrfGAoPzpbXmBcXFxcXFxyXFxuXSkqYCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9gKD86W15gXFxcXFxcclxcbl0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCd2YXJpYWJsZSc6IC9cXCRcXHcrLyxcblxuXHQvLyBodHRwczovL25lbzRqLmNvbS9kb2NzL2N5cGhlci1tYW51YWwvY3VycmVudC9zeW50YXgvcmVzZXJ2ZWQvXG5cdCdrZXl3b3JkJzogL1xcYig/OkFERHxBTEx8QU5EfEFTfEFTQ3xBU0NFTkRJTkd8QVNTRVJUfEJZfENBTEx8Q0FTRXxDT01NSVR8Q09OU1RSQUlOVHxDT05UQUlOU3xDUkVBVEV8Q1NWfERFTEVURXxERVNDfERFU0NFTkRJTkd8REVUQUNIfERJU1RJTkNUfERPfERST1B8RUxTRXxFTkR8RU5EU3xFWElTVFN8Rk9SfEZPUkVBQ0h8SU58SU5ERVh8SVN8Sk9JTnxLRVl8TElNSVR8TE9BRHxNQU5EQVRPUll8TUFUQ0h8TUVSR0V8Tk9ERXxOT1R8T0Z8T058T1BUSU9OQUx8T1J8T1JERVIoPz1cXHMrQlkpfFBFUklPRElDfFJFTU9WRXxSRVFVSVJFfFJFVFVSTnxTQ0FMQVJ8U0NBTnxTRVR8U0tJUHxTVEFSVHxTVEFSVFN8VEhFTnxVTklPTnxVTklRVUV8VU5XSU5EfFVTSU5HfFdIRU58V0hFUkV8V0lUSHxYT1J8WUlFTEQpXFxiL2ksXG5cblx0J2Z1bmN0aW9uJzogL1xcYlxcdytcXGIoPz1cXHMqXFwoKS8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi9pLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZkEtRl0rfFxcZCsoPzpcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT8pXFxiLyxcblx0Ly8gaHR0cHM6Ly9uZW80ai5jb20vZG9jcy9jeXBoZXItbWFudWFsL2N1cnJlbnQvc3ludGF4L29wZXJhdG9ycy9cblx0J29wZXJhdG9yJzogLzp8PC0tP3wtLT8+P3w8Pnw9fj98Wzw+XT0/fFsrKi8lXnxdfFxcLlxcLlxcLj8vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDsuXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5kID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdC8vIFNoZWJhbmdcblx0XHRcdHBhdHRlcm46IC9eXFxzKiMhLisvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteXFxcXF0pLy5zb3VyY2UgKyAnKD86JyArIFtcblx0XHRcdFx0Ly8gLysgY29tbWVudCArL1xuXHRcdFx0XHQvLyBBbGxvdyBvbmUgbGV2ZWwgb2YgbmVzdGluZ1xuXHRcdFx0XHQvXFwvXFwrKD86XFwvXFwrKD86W14rXXxcXCsoPyFcXC8pKSpcXCtcXC98KD8hXFwvXFwrKVtcXHNcXFNdKSo/XFwrXFwvLy5zb3VyY2UsXG5cdFx0XHRcdC8vIC8vIGNvbW1lbnRcblx0XHRcdFx0L1xcL1xcLy4qLy5zb3VyY2UsXG5cdFx0XHRcdC8vIC8qIGNvbW1lbnQgKi9cblx0XHRcdFx0L1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLnNvdXJjZVxuXHRcdFx0XS5qb2luKCd8JykgKyAnKScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoW1xuXHRcdFx0XHQvLyByXCJcIiwgeFwiXCJcblx0XHRcdFx0L1xcYltyeF1cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiW2N3ZF0/Ly5zb3VyY2UsXG5cblx0XHRcdFx0Ly8gcVwiW11cIiwgcVwiKClcIiwgcVwiPD5cIiwgcVwie31cIlxuXHRcdFx0XHQvXFxicVwiKD86XFxbW1xcc1xcU10qP1xcXXxcXChbXFxzXFxTXSo/XFwpfDxbXFxzXFxTXSo/PnxcXHtbXFxzXFxTXSo/XFx9KVwiLy5zb3VyY2UsXG5cblx0XHRcdFx0Ly8gcVwiSURFTlRcblx0XHRcdFx0Ly8gLi4uXG5cdFx0XHRcdC8vIElERU5UXCJcblx0XHRcdFx0L1xcYnFcIigoPyFcXGQpXFx3KykkW1xcc1xcU10qP15cXDFcIi8uc291cmNlLFxuXG5cdFx0XHRcdC8vIHFcIi8vXCIsIHFcInx8XCIsIGV0Yy5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0L1xcYnFcIiguKVtcXHNcXFNdKj9cXDJcIi8uc291cmNlLFxuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdC8oW1wiYF0pKD86XFxcXFtcXHNcXFNdfCg/IVxcMylbXlxcXFxdKSpcXDNbY3dkXT8vLnNvdXJjZVxuXHRcdFx0XS5qb2luKCd8JyksICdtJyksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJxXFx7KD86XFx7W157fV0qXFx9fFtee31dKSpcXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd0b2tlbi1zdHJpbmcnXG5cdFx0fVxuXHRdLFxuXG5cdC8vIEluIG9yZGVyOiAkLCBrZXl3b3JkcyBhbmQgc3BlY2lhbCB0b2tlbnMsIGdsb2JhbGx5IGRlZmluZWQgc3ltYm9sc1xuXHQna2V5d29yZCc6IC9cXCR8XFxiKD86X18oPzooPzpEQVRFfEVPRnxGSUxFfEZVTkNUSU9OfExJTkV8TU9EVUxFfFBSRVRUWV9GVU5DVElPTnxUSU1FU1RBTVB8VElNRXxWRU5ET1J8VkVSU0lPTilfX3xnc2hhcmVkfHBhcmFtZXRlcnN8dHJhaXRzfHZlY3Rvcil8YWJzdHJhY3R8YWxpYXN8YWxpZ258YXNtfGFzc2VydHxhdXRvfGJvZHl8Ym9vbHxicmVha3xieXRlfGNhc2V8Y2FzdHxjYXRjaHxjZG91YmxlfGNlbnR8Y2Zsb2F0fGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8Y3JlYWx8ZGNoYXJ8ZGVidWd8ZGVmYXVsdHxkZWxlZ2F0ZXxkZWxldGV8ZGVwcmVjYXRlZHxkb3xkb3VibGV8ZHN0cmluZ3xlbHNlfGVudW18ZXhwb3J0fGV4dGVybnxmYWxzZXxmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxmb3JlYWNofGZvcmVhY2hfcmV2ZXJzZXxmdW5jdGlvbnxnb3RvfGlkb3VibGV8aWZ8aWZsb2F0fGltbXV0YWJsZXxpbXBvcnR8aW5vdXR8aW50fGludGVyZmFjZXxpbnZhcmlhbnR8aXJlYWx8bGF6eXxsb25nfG1hY3JvfG1peGlufG1vZHVsZXxuZXd8bm90aHJvd3xudWxsfG91dHxvdmVycmlkZXxwYWNrYWdlfHByYWdtYXxwcml2YXRlfHByb3RlY3RlZHxwdHJkaWZmX3R8cHVibGljfHB1cmV8cmVhbHxyZWZ8cmV0dXJufHNjb3BlfHNoYXJlZHxzaG9ydHxzaXplX3R8c3RhdGljfHN0cmluZ3xzdHJ1Y3R8c3VwZXJ8c3dpdGNofHN5bmNocm9uaXplZHx0ZW1wbGF0ZXx0aGlzfHRocm93fHRydWV8dHJ5fHR5cGVkZWZ8dHlwZWlkfHR5cGVvZnx1Ynl0ZXx1Y2VudHx1aW50fHVsb25nfHVuaW9ufHVuaXR0ZXN0fHVzaG9ydHx2ZXJzaW9ufHZvaWR8dm9sYXRpbGV8d2NoYXJ8d2hpbGV8d2l0aHx3c3RyaW5nKVxcYi8sXG5cblx0J251bWJlcic6IFtcblx0XHQvLyBUaGUgbG9va2JlaGluZCBhbmQgdGhlIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJ5IHRvIHByZXZlbnQgYmFkIGhpZ2hsaWdodGluZyBvZiB0aGUgLi4gb3BlcmF0b3Jcblx0XHQvLyBIZXhhZGVjaW1hbCBudW1iZXJzIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZXhwb25lbnQgXCJlXCJcblx0XHQvXFxiMHhcXC4/W2EtZlxcZF9dKyg/Oig/IVxcLlxcLilcXC5bYS1mXFxkX10qKT8oPzpwWystXT9bYS1mXFxkX10rKT9bdWxmaV17MCw0fS9pLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oKD86XFwuXFwuKT8pKD86XFxiMGJcXC4/fFxcYnxcXC4pXFxkW1xcZF9dKig/Oig/IVxcLlxcLilcXC5bXFxkX10qKT8oPzplWystXT9cXGRbXFxkX10qKT9bdWxmaV17MCw0fS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblxuXHQnb3BlcmF0b3InOiAvXFx8W3w9XT98JlsmPV0/fFxcK1srPV0/fC1bLT1dP3xcXC4/XFwuXFwufD1bPj1dP3whKD86aVtuc11cXGJ8PD4/PT98Pj0/fD0pP3xcXGJpW25zXVxcYnwoPzo8Wzw+XT98Pj4/Pj98XFxeXFxefFsqXFwvJV5+XSk9Py9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkJywgJ3N0cmluZycsIHtcblx0Ly8gQ2hhcmFjdGVyc1xuXHQvLyAnYScsICdcXFxcJywgJ1xcbicsICdcXHhGRicsICdcXDM3NycsICdcXHVGRkZGJywgJ1xcVTAwMTBGRkZGJywgJ1xccXVvdCdcblx0J2NoYXInOiAvJyg/OlxcXFwoPzpcXFd8XFx3Kyl8W15cXFxcXSknL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2QnLCAna2V5d29yZCcsIHtcblx0J3Byb3BlcnR5JzogL1xcQkBcXHcqL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2QnLCAnZnVuY3Rpb24nLCB7XG5cdCdyZWdpc3Rlcic6IHtcblx0XHQvLyBJYXNtIHJlZ2lzdGVyc1xuXHRcdHBhdHRlcm46IC9cXGIoPzpbQUJDRF1bTEhYXXxFPyg/OkJQfERJfFNJfFNQKXxbQlNdUEx8W0VDU0RHRl1TfENSWzAyMzRdfFtEU11JTHxEUlswMTIzNjddfEVbQUJDRF1YfFg/TU1bMC03XXxSKD86MVswLTVdfFs4OV0pW0JXRF0/fFJbQUJDRF1YfFJbQlNdUHxSW0RTXUl8VFJbMy03XXxYTU0oPzoxWzAtNV18Wzg5XSl8WU1NKD86MVswLTVdfFxcZCkpXFxifFxcYlNUKD86XFwoWzAtN11cXCl8XFxiKS8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIGtleXdvcmRzID0gW1xuXHRcdC9cXGIoPzphc3luY3xzeW5jfHlpZWxkKVxcKi8sXG5cdFx0L1xcYig/OmFic3RyYWN0fGFzc2VydHxhc3luY3xhd2FpdHxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnRpbnVlfGNvdmFyaWFudHxkZWZhdWx0fGRlZmVycmVkfGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGV4dGVuc2lvbnxleHRlcm5hbHxmYWN0b3J5fGZpbmFsfGZpbmFsbHl8Zm9yfGdldHxoaWRlfGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGludGVyZmFjZXxsaWJyYXJ5fG1peGlufG5ld3xudWxsfG9ufG9wZXJhdG9yfHBhcnR8cmV0aHJvd3xyZXR1cm58c2V0fHNob3d8c3RhdGljfHN1cGVyfHN3aXRjaHxzeW5jfHRoaXN8dGhyb3d8dHJ5fHR5cGVkZWZ8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZClcXGIvXG5cdF07XG5cblx0Ly8gSGFuZGxlcyBuYW1lZCBpbXBvcnRzLCBzdWNoIGFzIGh0dHAuQ2xpZW50XG5cdHZhciBwYWNrYWdlUHJlZml4ID0gLyhefFteXFx3Ll0pKD86W2Etel1cXHcqXFxzKlxcLlxccyopKig/OltBLVpdXFx3KlxccypcXC5cXHMqKSovLnNvdXJjZTtcblxuXHQvLyBiYXNlZCBvbiB0aGUgZGFydCBuYW1pbmcgY29udmVudGlvbnNcblx0dmFyIGNsYXNzTmFtZSA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAocGFja2FnZVByZWZpeCArIC9bQS1aXSg/OltcXGRfQS1aXSpbYS16XVxcdyopP1xcYi8uc291cmNlKSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bYS16XVxcdyooPzpcXHMqXFwuXFxzKlthLXpdXFx3KikqKD86XFxzKlxcLik/Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRhcnQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gdmFyaWFibGVzIGFuZCBwYXJhbWV0ZXJzXG5cdFx0XHRcdC8vIHRoaXMgdG8gc3VwcG9ydCBjbGFzcyBuYW1lcyAob3IgZ2VuZXJpYyBwYXJhbWV0ZXJzKSB3aGljaCBkbyBub3QgY29udGFpbiBhIGxvd2VyIGNhc2UgbGV0dGVyIChhbHNvIHdvcmtzIGZvciBtZXRob2RzKVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFja2FnZVByZWZpeCArIC9bQS1aXVxcdyooPz1cXHMrXFx3K1xccypbOyw9KCldKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWUuaW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdvcGVyYXRvcic6IC9cXGJpcyF8XFxiKD86YXN8aXMpXFxifFxcK1xcK3wtLXwmJnxcXHxcXHx8PDw9P3w+Pj0/fH4oPzpcXC89Pyk/fFsrXFwtKlxcLyUmXnw9ITw+XT0/fFxcPy9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZGFydCcsICdzdHJpbmcnLCB7XG5cdFx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdFx0cGF0dGVybjogL3I/KD86KFwiXCJcInwnJycpW1xcc1xcU10qP1xcMXwoW1wiJ10pKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMig/IVxcMikpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkKD86XFx3K3xcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmRhcnRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHVuZGVmaW5lZFxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkYXJ0JywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J21ldGFkYXRhJzoge1xuXHRcdFx0cGF0dGVybjogL0BcXHcrLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkYXJ0JywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J2dlbmVyaWNzJzoge1xuXHRcdFx0cGF0dGVybjogLzwoPzpbXFx3XFxzLC4mP118PCg/OltcXHdcXHMsLiY/XXw8KD86W1xcd1xccywuJj9dfDxbXFx3XFxzLC4mP10qPikqPikqPikqPi8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiBjbGFzc05hbWUsXG5cdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKSwuOl0vLFxuXHRcdFx0XHQnb3BlcmF0b3InOiAvWz8mfF0vXG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmRhdGF3ZWF2ZSA9IHtcblx0XHQndXJsJzogL1xcYltBLVphLXpdKzpcXC9cXC9bXFx3LzouPz0mLV0rfFxcYnVybjpbXFx3Oi4/PSYtXSsvLFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpcXGJcXHcrIyk/KD86XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwifFxcYlxcdyspKD89XFxzKls6QF0pLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J21pbWUtdHlwZSc6IC9cXGIoPzphcHBsaWNhdGlvbnxhdWRpb3xpbWFnZXxtdWx0aXBhcnR8dGV4dHx2aWRlbylcXC9bXFx3Ky1dKy8sXG5cdFx0J2RhdGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx8W1xcdzorLV0rXFx8Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3JlZ2V4Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcLyg/OlteXFxcXFxcL1xcclxcbl18XFxcXFteXFxyXFxuXSkrXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGF0fGNhc2V8ZG98ZWxzZXxmdW58aWZ8aW5wdXR8aXN8bWF0Y2h8bm90fG5zfG51bGx8b3J8b3V0cHV0fHR5cGV8dW5sZXNzfHVwZGF0ZXx1c2luZ3x2YXIpXFxiLyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW0EtWl9dXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0J251bWJlcic6IC8tP1xcYlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT9cXGIvaSxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOkBdLyxcblx0XHQnb3BlcmF0b3InOiAvPDx8Pj58LT58Wzw+fj1dPT98IT18LS0/LT98XFwrXFwrP3whfFxcPy8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5kYXggPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98KD86LS18XFwvXFwvKS4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnZGF0YS1maWVsZCc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ118JycpKicoPyEnKSg/OlxcW1sgXFx3XFx4QTAtXFx1RkZGRl0rXFxdKT98XFx3K1xcW1sgXFx3XFx4QTAtXFx1RkZGRl0rXFxdLyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0J21lYXN1cmUnOiB7XG5cdFx0cGF0dGVybjogL1xcW1sgXFx3XFx4QTAtXFx1RkZGRl0rXFxdLyxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OkFCU3xBQ09TfEFDT1NIfEFDT1R8QUNPVEh8QUREQ09MVU1OU3xBRERNSVNTSU5HSVRFTVN8QUxMfEFMTENST1NTRklMVEVSRUR8QUxMRVhDRVBUfEFMTE5PQkxBTktST1d8QUxMU0VMRUNURUR8QU5EfEFQUFJPWElNQVRFRElTVElOQ1RDT1VOVHxBU0lOfEFTSU5IfEFUQU58QVRBTkh8QVZFUkFHRXxBVkVSQUdFQXxBVkVSQUdFWHxCRVRBXFwuRElTVHxCRVRBXFwuSU5WfEJMQU5LfENBTENVTEFURXxDQUxDVUxBVEVUQUJMRXxDQUxFTkRBUnxDQUxFTkRBUkFVVE98Q0VJTElOR3xDSElTUVxcLkRJU1R8Q0hJU1FcXC5ESVNUXFwuUlR8Q0hJU1FcXC5JTlZ8Q0hJU1FcXC5JTlZcXC5SVHxDTE9TSU5HQkFMQU5DRU1PTlRIfENMT1NJTkdCQUxBTkNFUVVBUlRFUnxDTE9TSU5HQkFMQU5DRVlFQVJ8Q09BTEVTQ0V8Q09NQklOfENPTUJJTkF8Q09NQklORVZBTFVFU3xDT05DQVRFTkFURXxDT05DQVRFTkFURVh8Q09ORklERU5DRVxcLk5PUk18Q09ORklERU5DRVxcLlR8Q09OVEFJTlN8Q09OVEFJTlNST1d8Q09OVEFJTlNTVFJJTkd8Q09OVEFJTlNTVFJJTkdFWEFDVHxDT05WRVJUfENPU3xDT1NIfENPVHxDT1RIfENPVU5UfENPVU5UQXxDT1VOVEFYfENPVU5UQkxBTkt8Q09VTlRST1dTfENPVU5UWHxDUk9TU0ZJTFRFUnxDUk9TU0pPSU58Q1VSUkVOQ1l8Q1VSUkVOVEdST1VQfENVU1RPTURBVEF8REFUQVRBQkxFfERBVEV8REFURUFERHxEQVRFRElGRnxEQVRFU0JFVFdFRU58REFURVNJTlBFUklPRHxEQVRFU01URHxEQVRFU1FURHxEQVRFU1lURHxEQVRFVkFMVUV8REFZfERFR1JFRVN8REVUQUlMUk9XU3xESVNUSU5DVHxESVNUSU5DVENPVU5UfERJU1RJTkNUQ09VTlROT0JMQU5LfERJVklERXxFQVJMSUVSfEVBUkxJRVNUfEVEQVRFfEVORE9GTU9OVEh8RU5ET0ZRVUFSVEVSfEVORE9GWUVBUnxFT01PTlRIfEVSUk9SfEVWRU58RVhBQ1R8RVhDRVBUfEVYUHxFWFBPTlxcLkRJU1R8RkFDVHxGQUxTRXxGSUxURVJ8RklMVEVSU3xGSU5EfEZJUlNUREFURXxGSVJTVE5PTkJMQU5LfEZJUlNUTk9OQkxBTktWQUxVRXxGSVhFRHxGTE9PUnxGT1JNQVR8R0NEfEdFTkVSQVRFfEdFTkVSQVRFQUxMfEdFTkVSQVRFU0VSSUVTfEdFT01FQU58R0VPTUVBTlh8R1JPVVBCWXxIQVNPTkVGSUxURVJ8SEFTT05FVkFMVUV8SE9VUnxJRnxJRlxcLkVBR0VSfElGRVJST1J8SUdOT1JFfElOVHxJTlRFUlNFQ1R8SVNCTEFOS3xJU0NST1NTRklMVEVSRUR8SVNFTVBUWXxJU0VSUk9SfElTRVZFTnxJU0ZJTFRFUkVEfElTSU5TQ09QRXxJU0xPR0lDQUx8SVNOT05URVhUfElTTlVNQkVSfElTT1xcLkNFSUxJTkd8SVNPRER8SVNPTk9SQUZURVJ8SVNTRUxFQ1RFRE1FQVNVUkV8SVNTVUJUT1RBTHxJU1RFWFR8S0VFUEZJTFRFUlN8S0VZV09SRE1BVENIfExBU1REQVRFfExBU1ROT05CTEFOS3xMQVNUTk9OQkxBTktWQUxVRXxMQ018TEVGVHxMRU58TE58TE9HfExPRzEwfExPT0tVUFZBTFVFfExPV0VSfE1BWHxNQVhBfE1BWFh8TUVESUFOfE1FRElBTlh8TUlEfE1JTnxNSU5BfE1JTlVURXxNSU5YfE1PRHxNT05USHxNUk9VTkR8TkFUVVJBTElOTkVSSk9JTnxOQVRVUkFMTEVGVE9VVEVSSk9JTnxORVhUREFZfE5FWFRNT05USHxORVhUUVVBUlRFUnxORVhUWUVBUnxOT05WSVNVQUx8Tk9STVxcLkRJU1R8Tk9STVxcLklOVnxOT1JNXFwuU1xcLkRJU1R8Tk9STVxcLlNcXC5JTlZ8Tk9UfE5PV3xPRER8T1BFTklOR0JBTEFOQ0VNT05USHxPUEVOSU5HQkFMQU5DRVFVQVJURVJ8T1BFTklOR0JBTEFOQ0VZRUFSfE9SfFBBUkFMTEVMUEVSSU9EfFBBVEh8UEFUSENPTlRBSU5TfFBBVEhJVEVNfFBBVEhJVEVNUkVWRVJTRXxQQVRITEVOR1RIfFBFUkNFTlRJTEVcXC5FWEN8UEVSQ0VOVElMRVxcLklOQ3xQRVJDRU5USUxFWFxcLkVYQ3xQRVJDRU5USUxFWFxcLklOQ3xQRVJNVVR8UEl8UE9JU1NPTlxcLkRJU1R8UE9XRVJ8UFJFVklPVVNEQVl8UFJFVklPVVNNT05USHxQUkVWSU9VU1FVQVJURVJ8UFJFVklPVVNZRUFSfFBST0RVQ1R8UFJPRFVDVFh8UVVBUlRFUnxRVU9USUVOVHxSQURJQU5TfFJBTkR8UkFOREJFVFdFRU58UkFOS1xcLkVRfFJBTktYfFJFTEFURUR8UkVMQVRFRFRBQkxFfFJFTU9WRUZJTFRFUlN8UkVQTEFDRXxSRVBUfFJJR0hUfFJPTExVUHxST0xMVVBBRERJU1NVQlRPVEFMfFJPTExVUEdST1VQfFJPTExVUElTU1VCVE9UQUx8Uk9VTkR8Uk9VTkRET1dOfFJPVU5EVVB8Uk9XfFNBTUVQRVJJT0RMQVNUWUVBUnxTQU1QTEV8U0VBUkNIfFNFQ09ORHxTRUxFQ1RDT0xVTU5TfFNFTEVDVEVETUVBU1VSRXxTRUxFQ1RFRE1FQVNVUkVGT1JNQVRTVFJJTkd8U0VMRUNURURNRUFTVVJFTkFNRXxTRUxFQ1RFRFZBTFVFfFNJR058U0lOfFNJTkh8U1FSVHxTUVJUUEl8U1RBUlRPRk1PTlRIfFNUQVJUT0ZRVUFSVEVSfFNUQVJUT0ZZRUFSfFNUREVWXFwuUHxTVERFVlxcLlN8U1RERVZYXFwuUHxTVERFVlhcXC5TfFNVQlNUSVRVVEV8U1VCU1RJVFVURVdJVEhJTkRFWHxTVU18U1VNTUFSSVpFfFNVTU1BUklaRUNPTFVNTlN8U1VNWHxTV0lUQ0h8VFxcLkRJU1R8VFxcLkRJU1RcXC4yVHxUXFwuRElTVFxcLlJUfFRcXC5JTlZ8VFxcLklOVlxcLjJUfFRBTnxUQU5IfFRJTUV8VElNRVZBTFVFfFRPREFZfFRPUE58VE9QTlBFUkxFVkVMfFRPUE5TS0lQfFRPVEFMTVREfFRPVEFMUVREfFRPVEFMWVREfFRSRUFUQVN8VFJJTXxUUlVFfFRSVU5DfFVOSUNIQVJ8VU5JQ09ERXxVTklPTnxVUFBFUnxVU0VSRUxBVElPTlNISVB8VVNFUk5BTUV8VVNFUk9CSkVDVElEfFVTRVJQUklOQ0lQQUxOQU1FfFVUQ05PV3xVVENUT0RBWXxWQUxVRXxWQUxVRVN8VkFSXFwuUHxWQVJcXC5TfFZBUlhcXC5QfFZBUlhcXC5TfFdFRUtEQVl8V0VFS05VTXxYSVJSfFhOUFZ8WUVBUnxZRUFSRlJBQykoPz1cXHMqXFwoKS9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzpERUZJTkV8RVZBTFVBVEV8TUVBU1VSRXxPUkRFUlxccytCWXxSRVRVUk58VkFSfFNUQVJUXFxzK0FUfEFTQ3xERVNDKVxcYi9pLFxuXHQnYm9vbGVhbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86RkFMU0V8TlVMTHxUUlVFKVxcYi9pLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrXFxiLyxcblx0J29wZXJhdG9yJzogLzo9fFstKypcXC89Xl18JiY/fFxcfFxcfHw8KD86PT4/fDx8Pik/fD5bPj1dP3xcXGIoPzpJTnxOT1QpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bO1xcW1xcXSgpe31gLC5dL1xufTtcblxuLy8gQUJORiBncmFtbWFyOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RoYWxsLWxhbmcvZGhhbGwtbGFuZy9ibG9iL21hc3Rlci9zdGFuZGFyZC9kaGFsbC5hYm5mXG5cblByaXNtLmxhbmd1YWdlcy5kaGFsbCA9IHtcblx0Ly8gTXVsdGktbGluZSBjb21tZW50cyBjYW4gYmUgbmVzdGVkLiBFLmcuIHstIGZvbyB7LSBiYXIgLX0gLX1cblx0Ly8gVGhlIG11bHRpLWxpbmUgcGF0dGVybiBpcyBlc3NlbnRpYWxseSB0aGlzOlxuXHQvLyAgIFxcey0oPzpbXi17XXwtKD8hXFx9KXxcXHsoPyEtKXw8U0VMRj4pKi1cXH1cblx0J2NvbW1lbnQnOiAvLS0uKnxcXHstKD86W14te118LSg/IVxcfSl8XFx7KD8hLSl8XFx7LSg/OlteLXtdfC0oPyFcXH0pfFxceyg/IS0pKSotXFx9KSotXFx9Lyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifCcnKD86W14nXXwnKD8hJyl8JycnfCcnXFwkXFx7KSonJyg/ISd8XFwkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXHtbXnt9XSpcXH0vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcJFxceylbXFxzXFxTXSsoPz1cXH0kKS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1kaGFsbCcsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJsb3dcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXCRcXHt8XFx9L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogL2BbXmBdKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndXJsJzoge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi81ZmRlOGVmMWJlYWQ2ZmI0ZTk5OWQzYzFmZmU3MDQ0Y2QwMTlkNjNhL3N0YW5kYXJkL2RoYWxsLmFibmYjTDU5NlxuXHRcdHBhdHRlcm46IC9cXGJodHRwcz86XFwvXFwvW1xcdy46JSEkJicqKzs9QH4tXSsoPzpcXC9bXFx3LjolISQmJyorOz1Afi1dKikqKD86XFw/Wy8/XFx3LjolISQmJyorOz1Afi1dKik/Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Vudic6IHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZGhhbGwtbGFuZy9kaGFsbC1sYW5nL2Jsb2IvNWZkZThlZjFiZWFkNmZiNGU5OTlkM2MxZmZlNzA0NGNkMDE5ZDYzYS9zdGFuZGFyZC9kaGFsbC5hYm5mI0w2NjFcblx0XHRwYXR0ZXJuOiAvXFxiZW52Oig/Oig/IVxcZClcXHcrfFwiKD86W15cIlxcXFw9XXxcXFxcLikqXCIpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnVuY3Rpb24nOiAvXmVudi8sXG5cdFx0XHQnb3BlcmF0b3InOiAvXjovLFxuXHRcdFx0J3ZhcmlhYmxlJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdoYXNoJzoge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi81ZmRlOGVmMWJlYWQ2ZmI0ZTk5OWQzYzFmZmU3MDQ0Y2QwMTlkNjNhL3N0YW5kYXJkL2RoYWxsLmFibmYjTDcyNVxuXHRcdHBhdHRlcm46IC9cXGJzaGEyNTY6W1xcZGEtZkEtRl17NjR9XFxiLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmdW5jdGlvbic6IC9zaGEyNTYvLFxuXHRcdFx0J29wZXJhdG9yJzogLzovLFxuXHRcdFx0J251bWJlcic6IC9bXFxkYS1mQS1GXXs2NH0vXG5cdFx0fVxuXHR9LFxuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi81ZmRlOGVmMWJlYWQ2ZmI0ZTk5OWQzYzFmZmU3MDQ0Y2QwMTlkNjNhL3N0YW5kYXJkL2RoYWxsLmFibmYjTDM1OVxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xhc3NlcnR8ZWxzZXxmb3JhbGx8aWZ8aW58bGV0fG1lcmdlfG1pc3Npbmd8dGhlbnx0b01hcHx1c2luZ3x3aXRoKVxcYnxcXHUyMjAwLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86Tm9uZXxTb21lKVxcYi8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8VHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYk5hTlxcYnwtP1xcYkluZmluaXR5XFxifFsrLV0/XFxiKD86MHhbXFxkYS1mQS1GXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwvXFxcXHxcXC9cXC9cXFxcXFxcXHwmJnxcXHxcXHx8PT09fFshPV09fFxcL1xcL3wtPnxcXCtcXCt8Ojp8WysqI0A9Oj88PnxcXFxcXFx1MjIyN1xcdTJhNTNcXHUyMjYxXFx1MmFmZFxcdTAzYmJcXHUyMTkyXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9cXC5cXC58W3t9XFxbXFxdKCksLi9dLyxcblxuXHQvLyB3ZSdsbCBqdXN0IGFzc3VtZSB0aGF0IGV2ZXJ5IGNhcGl0YWwgd29yZCBsZWZ0IGlzIGEgdHlwZSBuYW1lXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KlxcYi9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5kaGFsbC5zdHJpbmcuaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmRoYWxsO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRpZmYgPSB7XG5cdFx0J2Nvb3JkJzogW1xuXHRcdFx0Ly8gTWF0Y2ggYWxsIGtpbmRzIG9mIGNvb3JkIGxpbmVzIChwcmVmaXhlZCBieSBcIisrK1wiLCBcIi0tLVwiIG9yIFwiKioqXCIpLlxuXHRcdFx0L14oPzpcXCp7M318LXszfXxcXCt7M30pLiokL20sXG5cdFx0XHQvLyBNYXRjaCBcIkBAIC4uLiBAQFwiIGNvb3JkIGxpbmVzIGluIHVuaWZpZWQgZGlmZi5cblx0XHRcdC9eQEAuKkBAJC9tLFxuXHRcdFx0Ly8gTWF0Y2ggY29vcmQgbGluZXMgaW4gbm9ybWFsIGRpZmYgKHN0YXJ0cyB3aXRoIGEgbnVtYmVyKS5cblx0XHRcdC9eXFxkLiokL21cblx0XHRdXG5cblx0XHQvLyBkZWxldGVkLCBpbnNlcnRlZCwgdW5jaGFuZ2VkLCBkaWZmXG5cdH07XG5cblx0LyoqXG5cdCAqIEEgbWFwIGZyb20gdGhlIG5hbWUgb2YgYSBibG9jayB0byBpdHMgbGluZSBwcmVmaXguXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fVxuXHQgKi9cblx0dmFyIFBSRUZJWEVTID0ge1xuXHRcdCdkZWxldGVkLXNpZ24nOiAnLScsXG5cdFx0J2RlbGV0ZWQtYXJyb3cnOiAnPCcsXG5cdFx0J2luc2VydGVkLXNpZ24nOiAnKycsXG5cdFx0J2luc2VydGVkLWFycm93JzogJz4nLFxuXHRcdCd1bmNoYW5nZWQnOiAnICcsXG5cdFx0J2RpZmYnOiAnIScsXG5cdH07XG5cblx0Ly8gYWRkIGEgdG9rZW4gZm9yIGVhY2ggcHJlZml4XG5cdE9iamVjdC5rZXlzKFBSRUZJWEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0dmFyIHByZWZpeCA9IFBSRUZJWEVTW25hbWVdO1xuXG5cdFx0dmFyIGFsaWFzID0gW107XG5cdFx0aWYgKCEvXlxcdyskLy50ZXN0KG5hbWUpKSB7IC8vIFwiZGVsZXRlZC1zaWduXCIgLT4gXCJkZWxldGVkXCJcblx0XHRcdGFsaWFzLnB1c2goL1xcdysvLmV4ZWMobmFtZSlbMF0pO1xuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gJ2RpZmYnKSB7XG5cdFx0XHRhbGlhcy5wdXNoKCdib2xkJyk7XG5cdFx0fVxuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmRpZmZbbmFtZV0gPSB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oPzpbJyArIHByZWZpeCArICddLiooPzpcXHJcXG4/fFxcbnwoPyFbXFxcXHNcXFxcU10pKSkrJywgJ20nKSxcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnbGluZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKC4pKD89W1xcc1xcU10pLiooPzpcXHJcXG4/fFxcbik/Lyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwcmVmaXgnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdLyxcblx0XHRcdFx0XHRhbGlhczogL1xcdysvLmV4ZWMobmFtZSlbMF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0fSk7XG5cblx0Ly8gbWFrZSBwcmVmaXhlcyBhdmFpbGFibGUgdG8gRGlmZiBwbHVnaW5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFByaXNtLmxhbmd1YWdlcy5kaWZmLCAnUFJFRklYRVMnLCB7XG5cdFx0dmFsdWU6IFBSRUZJWEVTXG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZCBhbmQgaW5kZXguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGluZGV4XG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRQbGFjZWhvbGRlcihsYW5ndWFnZSwgaW5kZXgpIHtcblx0XHRyZXR1cm4gJ19fXycgKyBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpICsgaW5kZXggKyAnX19fJztcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXSA9IHt9LCB7XG5cdFx0YnVpbGRQbGFjZWhvbGRlcnM6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogVG9rZW5pemUgYWxsIGlubGluZSB0ZW1wbGF0aW5nIGV4cHJlc3Npb25zIG1hdGNoaW5nIGBwbGFjZWhvbGRlclBhdHRlcm5gLlxuXHRcdFx0ICpcblx0XHRcdCAqIElmIGByZXBsYWNlRmlsdGVyYCBpcyBwcm92aWRlZCwgb25seSBtYXRjaGVzIG9mIGBwbGFjZWhvbGRlclBhdHRlcm5gIGZvciB3aGljaCBgcmVwbGFjZUZpbHRlcmAgcmV0dXJuc1xuXHRcdFx0ICogYHRydWVgIHdpbGwgYmUgcmVwbGFjZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtvYmplY3R9IGVudiBUaGUgZW52aXJvbm1lbnQgb2YgdGhlIGBiZWZvcmUtdG9rZW5pemVgIGhvb2suXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIGlkLlxuXHRcdFx0ICogQHBhcmFtIHtSZWdFeHB9IHBsYWNlaG9sZGVyUGF0dGVybiBUaGUgbWF0Y2hlcyBvZiB0aGlzIHBhdHRlcm4gd2lsbCBiZSByZXBsYWNlZCBieSBwbGFjZWhvbGRlcnMuXG5cdFx0XHQgKiBAcGFyYW0geyhtYXRjaDogc3RyaW5nKSA9PiBib29sZWFufSBbcmVwbGFjZUZpbHRlcl1cblx0XHRcdCAqL1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChlbnYsIGxhbmd1YWdlLCBwbGFjZWhvbGRlclBhdHRlcm4sIHJlcGxhY2VGaWx0ZXIpIHtcblx0XHRcdFx0aWYgKGVudi5sYW5ndWFnZSAhPT0gbGFuZ3VhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdG9rZW5TdGFjayA9IGVudi50b2tlblN0YWNrID0gW107XG5cblx0XHRcdFx0ZW52LmNvZGUgPSBlbnYuY29kZS5yZXBsYWNlKHBsYWNlaG9sZGVyUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiByZXBsYWNlRmlsdGVyID09PSAnZnVuY3Rpb24nICYmICFyZXBsYWNlRmlsdGVyKG1hdGNoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgaSA9IHRva2VuU3RhY2subGVuZ3RoO1xuXHRcdFx0XHRcdHZhciBwbGFjZWhvbGRlcjtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGZvciBleGlzdGluZyBzdHJpbmdzXG5cdFx0XHRcdFx0d2hpbGUgKGVudi5jb2RlLmluZGV4T2YocGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcihsYW5ndWFnZSwgaSkpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0KytpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNwYXJzZSBhcnJheVxuXHRcdFx0XHRcdHRva2VuU3RhY2tbaV0gPSBtYXRjaDtcblxuXHRcdFx0XHRcdHJldHVybiBwbGFjZWhvbGRlcjtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gU3dpdGNoIHRoZSBncmFtbWFyIHRvIG1hcmt1cFxuXHRcdFx0XHRlbnYuZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0b2tlbml6ZVBsYWNlaG9sZGVyczoge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIHByb3BlciB0b2tlbnMgYWZ0ZXIgdG9rZW5pemluZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge29iamVjdH0gZW52IFRoZSBlbnZpcm9ubWVudCBvZiB0aGUgYGFmdGVyLXRva2VuaXplYCBob29rLlxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBpZC5cblx0XHRcdCAqL1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChlbnYsIGxhbmd1YWdlKSB7XG5cdFx0XHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09IGxhbmd1YWdlIHx8ICFlbnYudG9rZW5TdGFjaykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN3aXRjaCB0aGUgZ3JhbW1hciBiYWNrXG5cdFx0XHRcdGVudi5ncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcblxuXHRcdFx0XHR2YXIgaiA9IDA7XG5cdFx0XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMoZW52LnRva2VuU3RhY2spO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIHdhbGtUb2tlbnModG9rZW5zKSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdC8vIGFsbCBwbGFjZWhvbGRlcnMgYXJlIHJlcGxhY2VkIGFscmVhZHlcblx0XHRcdFx0XHRcdGlmIChqID49IGtleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyB8fCAodG9rZW4uY29udGVudCAmJiB0eXBlb2YgdG9rZW4uY29udGVudCA9PT0gJ3N0cmluZycpKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBrID0ga2V5c1tqXTtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlbnYudG9rZW5TdGFja1trXTtcblx0XHRcdFx0XHRcdFx0dmFyIHMgPSB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnID8gdG9rZW4gOiB0b2tlbi5jb250ZW50O1xuXHRcdFx0XHRcdFx0XHR2YXIgcGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcihsYW5ndWFnZSwgayk7XG5cblx0XHRcdFx0XHRcdFx0dmFyIGluZGV4ID0gcy5pbmRleE9mKHBsYWNlaG9sZGVyKTtcblx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQrK2o7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgYmVmb3JlID0gcy5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBtaWRkbGUgPSBuZXcgUHJpc20uVG9rZW4obGFuZ3VhZ2UsIFByaXNtLnRva2VuaXplKHQsIGVudi5ncmFtbWFyKSwgJ2xhbmd1YWdlLScgKyBsYW5ndWFnZSwgdCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFmdGVyID0gcy5zdWJzdHJpbmcoaW5kZXggKyBwbGFjZWhvbGRlci5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50ID0gW107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucHVzaC5hcHBseShyZXBsYWNlbWVudCwgd2Fsa1Rva2VucyhbYmVmb3JlXSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoKG1pZGRsZSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFmdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoLmFwcGx5KHJlcGxhY2VtZW50LCB3YWxrVG9rZW5zKFthZnRlcl0pKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZS5hcHBseSh0b2tlbnMsIFtpLCAxXS5jb25jYXQocmVwbGFjZW1lbnQpKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0dG9rZW4uY29udGVudCA9IHJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0b2tlbi5jb250ZW50IC8qICYmIHR5cGVvZiB0b2tlbi5jb250ZW50ICE9PSAnc3RyaW5nJyAqLykge1xuXHRcdFx0XHRcdFx0XHR3YWxrVG9rZW5zKHRva2VuLmNvbnRlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0b2tlbnM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuLy8gRGphbmdvL0ppbmphMiBzeW50YXggZGVmaW5pdGlvbiBmb3IgUHJpc20uanMgPGh0dHA6Ly9wcmlzbWpzLmNvbT4gc3ludGF4IGhpZ2hsaWdodGVyLlxuLy8gTW9zdGx5IGl0IHdvcmtzIE9LIGJ1dCBjYW4gcGFpbnQgY29kZSBpbmNvcnJlY3RseSBvbiBjb21wbGV4IGh0bWwvdGVtcGxhdGUgdGFnIGNvbWJpbmF0aW9ucy5cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5kamFuZ28gPSB7XG5cdFx0J2NvbW1lbnQnOiAvXlxceyNbXFxzXFxTXSo/I1xcfSQvLFxuXHRcdCd0YWcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHslWystXT9cXHMqKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxce1t7JV1bKy1dP3xbKy1dP1t9JV1cXH0kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZmlsdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHwpXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCd0ZXN0Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGJpc1xccysoPzpub3RcXHMrKT8pKD8hbm90XFxiKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kyg/PVxccypcXCgpL2ksXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGJ5fGVsc2V8Zm9yfGlmfGltcG9ydHxpbnxpc3xsb29wfG5vdHxvcnxyZWN1cnNpdmV8d2l0aHx3aXRob3V0KVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1stKyU9XT0/fCE9fFxcKlxcKj89P3xcXC9cXC8/PT98PFs8PT5dP3w+Wz0+XT98WyZ8Xn5dLyxcblx0XHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHRcdCdib29sZWFuJzogL1tGZl1hbHNlfFtObl1vbmV8W1R0XXJ1ZS8sXG5cdFx0J3ZhcmlhYmxlJzogL1xcYlxcdytcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdKCksLjo7XS9cblx0fTtcblxuXG5cdHZhciBwYXR0ZXJuID0gL1xce1xce1tcXHNcXFNdKj9cXH1cXH18XFx7JVtcXHNcXFNdKj8lXFx9fFxceyNbXFxzXFxTXSo/I1xcfS9nO1xuXHR2YXIgbWFya3VwVGVtcGxhdGluZyA9IFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2RqYW5nbycsIHBhdHRlcm4pO1xuXHR9KTtcblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2RqYW5nbycpO1xuXHR9KTtcblxuXHQvLyBBZGQgYW4gSmluamEyIGFsaWFzXG5cdFByaXNtLmxhbmd1YWdlcy5qaW5qYTIgPSBQcmlzbS5sYW5ndWFnZXMuZGphbmdvO1xuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2ppbmphMicsIHBhdHRlcm4pO1xuXHR9KTtcblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2ppbmphMicpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXNbJ2Rucy16b25lLWZpbGUnXSA9IHtcblx0J2NvbW1lbnQnOiAvOy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlxcJE9SSUdJTlsgXFx0XSspXFxTKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpQCg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiAvXlxcJCg/OklOQ0xVREV8T1JJR0lOfFRUTCkoPz1cXHN8JCkvbSxcblx0J2NsYXNzJzoge1xuXHRcdC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMDM1I3BhZ2UtMTNcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OkNIfENTfEhTfElOKSg/PVxcc3wkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCd0eXBlJzoge1xuXHRcdC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfRE5TX3JlY29yZF90eXBlc1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86QXxBNnxBQUFBfEFGU0RCfEFQTHxBVE1BfENBQXxDRE5TS0VZfENEU3xDRVJUfENOQU1FfERIQ0lEfERMVnxETkFNRXxETlNLRVl8RFN8RUlEfEdJRHxHUE9TfEhJTkZPfEhJUHxJUFNFQ0tFWXxJU0ROfEtFWXxLWHxMT0N8TUFJTEF8TUFJTEJ8TUJ8TUR8TUZ8TUd8TUlORk98TVJ8TVh8TkFQVFJ8TkJ8TkJTVEFUfE5JTUxPQ3xOSU5GT3xOU3xOU0FQfE5TQVAtUFRSfE5TRUN8TlNFQzN8TlNFQzNQQVJBTXxOVUxMfE5YVHxPUEVOUEdQS0VZfFBUUnxQWHxSS0VZfFJQfFJSU0lHfFJUfFNJR3xTSU5LfFNNSU1FQXxTT0F8U1BGfFNSVnxTU0hGUHxUQXxUS0VZfFRMU0F8VFNJR3xUWFR8VUlEfFVJTkZPfFVOU1BFQ3xVUkl8V0tTfFgyNSkoPz1cXHN8JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpXS9cbn07XG5cblByaXNtLmxhbmd1YWdlc1snZG5zLXpvbmUnXSA9IFByaXNtLmxhbmd1YWdlc1snZG5zLXpvbmUtZmlsZSddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gTWFueSBvZiB0aGUgZm9sbG93aW5nIHJlZ2V4ZXMgd2lsbCBjb250YWluIG5lZ2F0ZWQgbG9va2FoZWFkcyBsaWtlIGBbIFxcdF0rKD8hWyBcXHRdKWAuIFRoaXMgaXMgYSB0cmljayB0byBlbnN1cmVcblx0Ly8gdGhhdCBxdWFudGlmaWVycyBiZWhhdmUgKmF0b21pY2FsbHkqLiBBdG9taWMgcXVhbnRpZmllcnMgYXJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGV4cG9uZW50aWFsIGJhY2t0cmFja2luZy5cblxuXHR2YXIgc3BhY2VBZnRlckJhY2tTbGFzaCA9IC9cXFxcW1xcclxcbl0oPzpcXHN8XFxcXFtcXHJcXG5dfCMuKig/IS4pKSooPyFbXFxzI118XFxcXFtcXHJcXG5dKS8uc291cmNlO1xuXHQvLyBBdCBsZWFzdCBvbmUgc3BhY2UsIGNvbW1lbnQsIG9yIGxpbmUgYnJlYWtcblx0dmFyIHNwYWNlID0gLyg/OlsgXFx0XSsoPyFbIFxcdF0pKD86PFNQX0JTPik/fDxTUF9CUz4pLy5zb3VyY2Vcblx0XHQucmVwbGFjZSgvPFNQX0JTPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzcGFjZUFmdGVyQmFja1NsYXNoOyB9KTtcblxuXHR2YXIgc3RyaW5nID0gL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKicvLnNvdXJjZTtcblx0dmFyIG9wdGlvbiA9IC8tLVtcXHctXSs9KD86PFNUUj58KD8hW1wiJ10pKD86W15cXHNcXFxcXXxcXFxcLikrKS8uc291cmNlLnJlcGxhY2UoLzxTVFI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZzsgfSk7XG5cblx0dmFyIHN0cmluZ1J1bGUgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZyksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH07XG5cdHZhciBjb21tZW50UnVsZSA9IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiByZShzb3VyY2UsIGZsYWdzKSB7XG5cdFx0c291cmNlID0gc291cmNlXG5cdFx0XHQucmVwbGFjZSgvPE9QVD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gb3B0aW9uOyB9KVxuXHRcdFx0LnJlcGxhY2UoLzxTUD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3BhY2U7IH0pO1xuXG5cdFx0cmV0dXJuIFJlZ0V4cChzb3VyY2UsIGZsYWdzKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5kb2NrZXIgPSB7XG5cdFx0J2luc3RydWN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzpBRER8QVJHfENNRHxDT1BZfEVOVFJZUE9JTlR8RU5WfEVYUE9TRXxGUk9NfEhFQUxUSENIRUNLfExBQkVMfE1BSU5UQUlORVJ8T05CVUlMRHxSVU58U0hFTEx8U1RPUFNJR05BTHxVU0VSfFZPTFVNRXxXT1JLRElSKSg/PVxccykoPzpcXFxcLnxbXlxcclxcblxcXFxdKSooPzpcXFxcJCg/Olxcc3wjLiokKSooPyFbXFxzI10pKD86XFxcXC58W15cXHJcXG5cXFxcXSkqKSovaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvcHRpb25zJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHJlKC8oXig/Ok9OQlVJTEQ8U1A+KT9cXHcrPFNQPik8T1BUPig/OjxTUD48T1BUPikqLy5zb3VyY2UsICdpJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpLS1bXFx3LV0rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdzdHJpbmcnOiBbXG5cdFx0XHRcdFx0XHRcdHN0cmluZ1J1bGUsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD0pKD8hW1wiJ10pKD86W15cXHNcXFxcXXxcXFxcLikrLyxcblx0XHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXFxcXCQvbSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC89L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNoZWFsdGhjaGVja1xuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheKD86T05CVUlMRDxTUD4pP0hFQUxUSENIRUNLPFNQPig/OjxPUFQ+PFNQPikqKSg/OkNNRHxOT05FKVxcYi8uc291cmNlLCAnaScpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNmcm9tXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvKF4oPzpPTkJVSUxEPFNQPik/RlJPTTxTUD4oPzo8T1BUPjxTUD4pKig/IS0tKVteIFxcdFxcXFxdKzxTUD4pQVMvLnNvdXJjZSwgJ2knKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jb25idWlsZFxuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheT05CVUlMRDxTUD4pXFx3Ky8uc291cmNlLCAnaScpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXHcrLyxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50UnVsZSxcblx0XHRcdFx0J3N0cmluZyc6IHN0cmluZ1J1bGUsXG5cdFx0XHRcdCd2YXJpYWJsZSc6IC9cXCQoPzpcXHcrfFxce1tee31cIidcXFxcXSpcXH0pLyxcblx0XHRcdFx0J29wZXJhdG9yJzogL1xcXFwkL21cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb21tZW50JzogY29tbWVudFJ1bGVcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZG9ja2VyZmlsZSA9IFByaXNtLmxhbmd1YWdlcy5kb2NrZXI7XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2xhbmcuaHRtbFxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIElEID0gJyg/OicgKyBbXG5cdFx0Ly8gYW4gaWRlbnRpZmllclxuXHRcdC9bYS16QS1aX1xceDgwLVxcdUZGRkZdW1xcd1xceDgwLVxcdUZGRkZdKi8uc291cmNlLFxuXHRcdC8vIGEgbnVtYmVyXG5cdFx0Ly0/KD86XFwuXFxkK3xcXGQrKD86XFwuXFxkKik/KS8uc291cmNlLFxuXHRcdC8vIGEgZG91YmxlLXF1b3RlZCBzdHJpbmdcblx0XHQvXCJbXlwiXFxcXF0qKD86XFxcXFtcXHNcXFNdW15cIlxcXFxdKikqXCIvLnNvdXJjZSxcblx0XHQvLyBIVE1MLWxpa2Ugc3RyaW5nXG5cdFx0LzwoPzpbXjw+XXwoPyE8IS0tKTwoPzpbXjw+XCInXXxcIlteXCJdKlwifCdbXiddKicpKz58PCEtLSg/OlteLV18LSg/IS0+KSkqLS0+KSo+Ly5zb3VyY2Vcblx0XS5qb2luKCd8JykgKyAnKSc7XG5cblx0dmFyIElESW5zaWRlID0ge1xuXHRcdCdtYXJrdXAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF48KVtcXHNcXFNdKyg/PT4kKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6IFsnbGFuZ3VhZ2UtbWFya3VwJywgJ2xhbmd1YWdlLWh0bWwnLCAnbGFuZ3VhZ2UteG1sJ10sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiB3aXRoSUQoc291cmNlLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAoc291cmNlLnJlcGxhY2UoLzxJRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gSUQ7IH0pLCBmbGFncyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuZG90ID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC98XiMuKi9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZ3JhcGgtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IHdpdGhJRCgvKFxcYig/OmRpZ3JhcGh8Z3JhcGh8c3ViZ3JhcGgpWyBcXHRcXHJcXG5dKyk8SUQ+Ly5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdGluc2lkZTogSURJbnNpZGVcblx0XHR9LFxuXHRcdCdhdHRyLXZhbHVlJzoge1xuXHRcdFx0cGF0dGVybjogd2l0aElEKC8oPVsgXFx0XFxyXFxuXSopPElEPi8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogd2l0aElEKC8oW1xcWzssIFxcdFxcclxcbl0pPElEPig/PVsgXFx0XFxyXFxuXSo9KS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzpkaWdyYXBofGVkZ2V8Z3JhcGh8bm9kZXxzdHJpY3R8c3ViZ3JhcGgpXFxiL2ksXG5cdFx0J2NvbXBhc3MtcG9pbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKDpbIFxcdFxcclxcbl0qKSg/Oltld2NfXXxbbnNdW2V3XT8pKD8hW1xcd1xceDgwLVxcdUZGRkZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdidWlsdGluJ1xuXHRcdH0sXG5cdFx0J25vZGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3aXRoSUQoLyhefFteLS5cXHdcXHg4MC1cXHVGRkZGXFxcXF0pPElEPi8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvWz06XXwtWy0+XS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF17fTssXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ3YgPSBQcmlzbS5sYW5ndWFnZXMuZG90O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5lYm5mID0ge1xuXHQnY29tbWVudCc6IC9cXChcXCpbXFxzXFxTXSo/XFwqXFwpLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3NwZWNpYWwnOiB7XG5cdFx0cGF0dGVybjogL1xcP1teP1xcclxcbl0qXFw/Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXG5cdCdkZWZpbml0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopW2Etel1cXHcqKD86WyBcXHRdK1thLXpdXFx3KikqKD89XFxzKj0pL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6IFsncnVsZScsICdrZXl3b3JkJ11cblx0fSxcblx0J3J1bGUnOiAvXFxiW2Etel1cXHcqKD86WyBcXHRdK1thLXpdXFx3KikqXFxiL2ksXG5cblx0J3B1bmN0dWF0aW9uJzogL1xcKFs6L118WzovXVxcKXxbLiw7KClbXFxde31dLyxcblx0J29wZXJhdG9yJzogL1stPXwqLyFdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmVkaXRvcmNvbmZpZyA9IHtcblx0Ly8gaHR0cHM6Ly9lZGl0b3Jjb25maWctc3BlY2lmaWNhdGlvbi5yZWFkdGhlZG9jcy5pb1xuXHQnY29tbWVudCc6IC9bOyNdLiovLFxuXHQnc2VjdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVxcWy4rXFxdL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3NlbGVjdG9yJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyZWdleCc6IC9cXFxcXFxcXFtcXFtcXF17fSwhPy4qXS8sIC8vIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgd2l0aCAnXFxcXCdcblx0XHRcdCdvcGVyYXRvcic6IC9bIT9dfFxcLlxcLnxcXCp7MSwyfS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXXt9LF0vXG5cdFx0fVxuXHR9LFxuXHQna2V5Jzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopW15cXHM9XSsoPz1bIFxcdF0qPSkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHR9LFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLz0uKi8sXG5cdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePS9cblx0XHR9XG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5laWZmZWwgPSB7XG5cdCdjb21tZW50JzogLy0tLiovLFxuXHQnc3RyaW5nJzogW1xuXHRcdC8vIEFsaWduZWQtdmVyYmF0aW0tc3RyaW5nc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIihbXltdKilcXFtbXFxzXFxTXSo/XFxdXFwxXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvLyBOb24tYWxpZ25lZC12ZXJiYXRpbS1zdHJpbmdzXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1wiKFtee10qKVxce1tcXHNcXFNdKj9cXH1cXDFcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdC8vIFNpbmdsZS1saW5lIHN0cmluZ1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OiUoPzooPyFcXG4pXFxzKSpcXG5cXHMqJXwlXFxTfFteJVwiXFxyXFxuXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQvLyBub3JtYWwgY2hhciB8IHNwZWNpYWwgY2hhciB8IGNoYXIgY29kZVxuXHQnY2hhcic6IC8nKD86JS58W14lJ1xcclxcbl0pKycvLFxuXHQna2V5d29yZCc6IC9cXGIoPzphY3Jvc3N8YWdlbnR8YWxpYXN8YWxsfGFuZHxhc3xhc3NpZ258YXR0YWNoZWR8YXR0cmlidXRlfGNoZWNrfGNsYXNzfGNvbnZlcnR8Y3JlYXRlfEN1cnJlbnR8ZGVidWd8ZGVmZXJyZWR8ZGV0YWNoYWJsZXxkb3xlbHNlfGVsc2VpZnxlbmR8ZW5zdXJlfGV4cGFuZGVkfGV4cG9ydHxleHRlcm5hbHxmZWF0dXJlfGZyb218ZnJvemVufGlmfGltcGxpZXN8aW5oZXJpdHxpbnNwZWN0fGludmFyaWFudHxsaWtlfGxvY2FsfGxvb3B8bm90fG5vdGV8b2Jzb2xldGV8b2xkfG9uY2V8b3J8UHJlY3Vyc29yfHJlZGVmaW5lfHJlbmFtZXxyZXF1aXJlfHJlc2N1ZXxSZXN1bHR8cmV0cnl8c2VsZWN0fHNlcGFyYXRlfHNvbWV8dGhlbnx1bmRlZmluZXx1bnRpbHx2YXJpYW50fFZvaWR8d2hlbnx4b3IpXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfFRydWUpXFxiL2ksXG5cdC8vIENvbnZlbnRpb246IGNsYXNzLW5hbWVzIGFyZSBhbHdheXMgYWxsIHVwcGVyLWNhc2UgY2hhcmFjdGVyc1xuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVtcXGRBLVpfXSpcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC8vIGhleGEgfCBvY3RhbCB8IGJpblxuXHRcdC9cXGIwW3hjYl1bXFxkYS1mXSg/Ol8qW1xcZGEtZl0pKlxcYi9pLFxuXHRcdC8vIERlY2ltYWxcblx0XHQvKD86XFxiXFxkKD86XypcXGQpKik/XFwuKD86KD86XFxkKD86XypcXGQpKik/ZVsrLV0/KT9cXGQoPzpfKlxcZCkqXFxifFxcYlxcZCg/Ol8qXFxkKSpcXGJcXC4/L2lcblx0XSxcblx0J3B1bmN0dWF0aW9uJzogLzo9fDw8fD4+fFxcKFxcfHxcXHxcXCl8LT58XFwuKD89XFx3KXxbe31bXFxdOygpLDo/XS8sXG5cdCdvcGVyYXRvcic6IC9cXFxcXFxcXHxcXHxcXC5cXC5cXHx8XFwuXFwufFxcL1t+XFwvPV0/fFs+PF09P3xbLSsqXj1+XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZWpzID0ge1xuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjwlWy1fPV0/fFstX10/JT4kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IC9eI1tcXHNcXFNdKi8sXG5cdFx0J2xhbmd1YWdlLWphdmFzY3JpcHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIGVqc1BhdHRlcm4gPSAvPCUoPyElKVtcXHNcXFNdKz8lPi9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdlanMnLCBlanNQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnZWpzJyk7XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ldGEgPSBQcmlzbS5sYW5ndWFnZXMuZWpzO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5lbGl4aXIgPSB7XG5cdCdkb2MnOiB7XG5cdFx0cGF0dGVybjogL0AoPzpkb2N8bW9kdWxlZG9jKVxccysoPzooXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxfChcInwnKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMilbXlxcXFxcXHJcXG5dKSpcXDIpLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhdHRyaWJ1dGUnOiAvXkBcXHcrLyxcblx0XHRcdCdzdHJpbmcnOiAvWydcIl1bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gfnJcIlwiXCJmb29cIlwiXCIgKG11bHRpLWxpbmUpLCB+cicnJ2ZvbycnJyAobXVsdGktbGluZSksIH5yL2Zvby8sIH5yfGZvb3wsIH5yXCJmb29cIiwgfnInZm9vJywgfnIoZm9vKSwgfnJbZm9vXSwgfnJ7Zm9vfSwgfnI8Zm9vPlxuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogL35bclJdKD86KFwiXCJcInwnJycpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKStcXDF8KFtcXC98XCInXSkoPzpcXFxcLnwoPyFcXDIpW15cXFxcXFxyXFxuXSkrXFwyfFxcKCg/OlxcXFwufFteXFxcXClcXHJcXG5dKStcXCl8XFxbKD86XFxcXC58W15cXFxcXFxdXFxyXFxuXSkrXFxdfFxceyg/OlxcXFwufFteXFxcXH1cXHJcXG5dKStcXH18PCg/OlxcXFwufFteXFxcXD5cXHJcXG5dKSs+KVt1aXNteGZyXSovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzogW1xuXHRcdHtcblx0XHRcdC8vIH5zXCJcIlwiZm9vXCJcIlwiIChtdWx0aS1saW5lKSwgfnMnJydmb28nJycgKG11bHRpLWxpbmUpLCB+cy9mb28vLCB+c3xmb298LCB+c1wiZm9vXCIsIH5zJ2ZvbycsIH5zKGZvbyksIH5zW2Zvb10sIH5ze2Zvb30gKHdpdGggaW50ZXJwb2xhdGlvbiBjYXJlKSwgfnM8Zm9vPlxuXHRcdFx0cGF0dGVybjogL35bY0NzU3dXXSg/OihcIlwiXCJ8JycnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkrXFwxfChbXFwvfFwiJ10pKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pK1xcMnxcXCgoPzpcXFxcLnxbXlxcXFwpXFxyXFxuXSkrXFwpfFxcWyg/OlxcXFwufFteXFxcXFxcXVxcclxcbl0pK1xcXXxcXHsoPzpcXFxcLnwjXFx7W159XStcXH18Iyg/IVxceyl8W14jXFxcXH1cXHJcXG5dKStcXH18PCg/OlxcXFwufFteXFxcXD5cXHJcXG5dKSs+KVtjc2FdPy8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQvLyBTZWUgaW50ZXJwb2xhdGlvbiBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gTXVsdGktbGluZSBzdHJpbmdzIGFyZSBhbGxvd2VkXG5cdFx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cdCdhdG9tJzoge1xuXHRcdC8vIExvb2stYmVoaW5kIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmcgb2YgdGhlIDo6IG9wZXJhdG9yXG5cdFx0cGF0dGVybjogLyhefFteOl0pOlxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdtb2R1bGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYltBLVpdXFx3KlxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQvLyBMb29rLWFoZWFkIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmcgb2YgdGhlIDo6IG9wZXJhdG9yXG5cdCdhdHRyLW5hbWUnOiAvXFxiXFx3K1xcPz86KD8hOikvLFxuXHQnYXJndW1lbnQnOiB7XG5cdFx0Ly8gTG9vay1iZWhpbmQgcHJldmVudHMgYmFkIGhpZ2hsaWdodGluZyBvZiB0aGUgJiYgb3BlcmF0b3Jcblx0XHRwYXR0ZXJuOiAvKF58W14mXSkmXFxkKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9AXFx3Ky8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYltfYS16QS1aXVxcdypbPyFdPyg/Oig/PVxccyooPzpcXC5cXHMqKT9cXCgpfCg/PVxcL1xcZCkpLyxcblx0J251bWJlcic6IC9cXGIoPzowW2JveF1bYS1mXFxkX10rfFxcZFtcXGRfXSopKD86XFwuW1xcZF9dKyk/KD86ZVsrLV0/W1xcZF9dKyk/XFxiL2ksXG5cdCdrZXl3b3JkJzogL1xcYig/OmFmdGVyfGFsaWFzfGFuZHxjYXNlfGNhdGNofGNvbmR8ZGVmKD86Y2FsbGJhY2t8ZGVsZWdhdGV8ZXhjZXB0aW9ufGltcGx8bWFjcm98bW9kdWxlfG58bnB8cHxwcm90b2NvbHxzdHJ1Y3QpP3xkb3xlbHNlfGVuZHxmbnxmb3J8aWZ8aW1wb3J0fG5vdHxvcnxxdW90ZXxyYWlzZXxyZXF1aXJlfHJlc2N1ZXx0cnl8dW5sZXNzfHVucXVvdGV8dXNlfHdoZW4pXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bmlsfHRydWUpXFxiLyxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9cXGJpblxcYnwmJj98XFx8W3w+XT98XFxcXFxcXFx8Ojp8XFwuXFwuXFwuP3xcXCtcXCs/fC1bLT5dP3w8Wy09Pl18Pj18IT09P3xcXEIhfD0oPzo9PT98Wz5+XSk/fFsqXFwvXl0vLFxuXHRcdHtcblx0XHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggPDxcblx0XHRcdHBhdHRlcm46IC8oW148XSk8KD8hPCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCA+PlxuXHRcdFx0cGF0dGVybjogLyhbXj5dKT4oPyE+KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvPDx8Pj58Wy4sJVxcW1xcXXt9KCldL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmVsaXhpci5zdHJpbmcuZm9yRWFjaChmdW5jdGlvbiAobykge1xuXHRvLmluc2lkZSA9IHtcblx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8jXFx7W159XStcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14jXFx7fFxcfSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5lbGl4aXJcblx0XHRcdH1cblx0XHR9XG5cdH07XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmVsbSA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKnxcXHstW1xcc1xcU10qPy1cXH0vLFxuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteXFxcXCdcXHJcXG5dfFxcXFwoPzpbYWJmbnJ0dlxcXFwnXXxcXGQrfHhbMC05YS1mQS1GXSt8dVxce1swLTlhLWZBLUZdK1xcfSkpJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gTXVsdGlsaW5lIHN0cmluZ3MgYXJlIHdyYXBwZWQgaW4gdHJpcGxlIFwiLiBRdW90ZXMgbWF5IGFwcGVhciB1bmVzY2FwZWQuXG5cdFx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXFxcXFwiXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHQvLyBUaGUgaW1wb3J0ZWQgb3IgaGlkZGVuIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBpbXBvcnRcblx0XHQvLyBzdGF0ZW1lbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZSBleGFjdGx5IGxpa2Vcblx0XHQvLyB3ZSBkbyBmb3IgdGhlIG5hbWVzIGluIHRoZSBwcm9ncmFtLlxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopaW1wb3J0XFxzK1tBLVpdXFx3Kig/OlxcLltBLVpdXFx3KikqKD86XFxzK2FzXFxzKyg/OltBLVpdXFx3KikoPzpcXC5bQS1aXVxcdyopKik/KD86XFxzK2V4cG9zaW5nXFxzKyk/L20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmFzfGV4cG9zaW5nfGltcG9ydClcXGIvXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphbGlhc3xhc3xjYXNlfGVsc2V8ZXhwb3Npbmd8aWZ8aW58aW5maXhsfGluZml4cnxsZXR8bW9kdWxlfG9mfHRoZW58dHlwZSlcXGIvLFxuXHQvLyBUaGVzZSBhcmUgYnVpbHRpbiB2YXJpYWJsZXMgb25seS4gQ29uc3RydWN0b3JzIGFyZSBoaWdobGlnaHRlZCBsYXRlciBhcyBhIGNvbnN0YW50LlxuXHQnYnVpbHRpbic6IC9cXGIoPzphYnN8YWNvc3xhbHdheXN8YXNpbnxhdGFufGF0YW4yfGNlaWxpbmd8Y2xhbXB8Y29tcGFyZXxjb3N8Y3Vycnl8ZGVncmVlc3xlfGZsaXB8Zmxvb3J8ZnJvbVBvbGFyfGlkZW50aXR5fGlzSW5maW5pdGV8aXNOYU58bG9nQmFzZXxtYXh8bWlufG5lZ2F0ZXxuZXZlcnxub3R8cGl8cmFkaWFuc3xyZW18cm91bmR8c2lufHNxcnR8dGFufHRvRmxvYXR8dG9Qb2xhcnx0b1N0cmluZ3x0cnVuY2F0ZXx0dXJuc3x1bmN1cnJ5fHhvcilcXGIvLFxuXHQvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHwgaGV4YWRlY2ltYWwgaW50ZWdlcnNcblx0J251bWJlcic6IC9cXGIoPzpcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/fDB4WzAtOWEtZl0rKVxcYi9pLFxuXHQvLyBNb3N0IG9mIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIG1lYW5pbmcgb2YgYSBzaW5nbGUgJy4nLlxuXHQvLyBJZiBpdCBzdGFuZHMgYWxvbmUgZnJlZWx5LCBpdCBpcyB0aGUgZnVuY3Rpb24gY29tcG9zaXRpb24uXG5cdC8vIEl0IG1heSBhbHNvIGJlIGEgc2VwYXJhdG9yIGJldHdlZW4gYSBtb2R1bGUgbmFtZSBhbmQgYW4gaWRlbnRpZmllciA9PiBub1xuXHQvLyBvcGVyYXRvci4gSWYgaXQgY29tZXMgdG9nZXRoZXIgd2l0aCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgaXQgaXMgYW5cblx0Ly8gb3BlcmF0b3IgdG9vLlxuXHQvLyBWYWxpZCBvcGVyYXRvciBjaGFyYWN0ZXJzIGluIDAuMTg6ICstLyo9LiQ8PjomfF4/JSNAfiFcblx0Ly8gUmVmOiBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhbXNnL2VsbS1kZXYvMEFIU25EZGtTa1EvRTBTVlU3MEpFUUFKXG5cdCdvcGVyYXRvcic6IC9cXHNcXC5cXHN8WytcXC0vKj0uJDw+OiZ8Xj8lI0B+IV17Mix9fFsrXFwtLyo9JDw+OiZ8Xj8lI0B+IV0vLFxuXHQvLyBJbiBFbG0sIG5lYXJseSBldmVyeXRoaW5nIGlzIGEgdmFyaWFibGUsIGRvIG5vdCBoaWdobGlnaHQgdGhlc2UuXG5cdCdodmFyaWFibGUnOiAvXFxiKD86W0EtWl1cXHcqXFwuKSpbYS16XVxcdypcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86W0EtWl1cXHcqXFwuKSpbQS1aXVxcdypcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXXwoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubHVhID0ge1xuXHQnY29tbWVudCc6IC9eIyEuK3wtLSg/OlxcWyg9KilcXFtbXFxzXFxTXSo/XFxdXFwxXFxdfC4qKS9tLFxuXHQvLyBcXHogbWF5IGJlIHVzZWQgdG8gc2tpcCB0aGUgZm9sbG93aW5nIHNwYWNlXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxceig/OlxcclxcbnxcXHMpfFxcXFwoPzpcXHJcXG58W156XSkpKlxcMXxcXFsoPSopXFxbW1xcc1xcU10qP1xcXVxcMlxcXS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiMHhbYS1mXFxkXSsoPzpcXC5bYS1mXFxkXSopPyg/OnBbKy1dP1xcZCspP1xcYnxcXGJcXGQrKD86XFwuXFxCfCg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspP1xcYil8XFxCXFwuXFxkKyg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YnJlYWt8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGZhbHNlfGZvcnxmdW5jdGlvbnxnb3RvfGlmfGlufGxvY2FsfG5pbHxub3R8b3J8cmVwZWF0fHJldHVybnx0aGVufHRydWV8dW50aWx8d2hpbGUpXFxiLyxcblx0J2Z1bmN0aW9uJzogLyg/IVxcZClcXHcrKD89XFxzKig/Olsoe10pKS8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvWy0rKiVeJnwjXXxcXC9cXC8/fDxbPD1dP3w+Wz49XT98Wz1+XT0/Lyxcblx0XHR7XG5cdFx0XHQvLyBNYXRjaCBcIi4uXCIgYnV0IGRvbid0IGJyZWFrIFwiLi4uXCJcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKVxcLlxcLig/IVxcLikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9LDtdfFxcLit8OisvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmV0bHVhID0ge1xuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjwlWy09XT98LT8lPiQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdsYW5ndWFnZS1sdWEnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmx1YVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgcGF0dGVybiA9IC88JVtcXHNcXFNdKz8lPi9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdldGx1YScsIHBhdHRlcm4pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdldGx1YScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmVyYiA9IHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL14oXFxzKik8JT0/fCU+KD89XFxzKiQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3J1YnknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLXJ1YnknLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgZXJiUGF0dGVybiA9IC88JT0/KD86W15cXHJcXG5dfFtcXHJcXG5dKD8hPWJlZ2luKXxbXFxyXFxuXT1iZWdpblxccyg/OlteXFxyXFxuXXxbXFxyXFxuXSg/IT1lbmQpKSpbXFxyXFxuXT1lbmQpKz8lPi9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdlcmInLCBlcmJQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnZXJiJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5lcmxhbmcgPSB7XG5cdCdjb21tZW50JzogLyUuKy8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdxdW90ZWQtZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkrJyg/PVxcKCkvLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdxdW90ZWQtYXRvbSc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteXFxcXCdcXHJcXG5dKSsnLyxcblx0XHRhbGlhczogJ2F0b20nXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWZ0ZXJ8YmVnaW58Y2FzZXxjYXRjaHxlbmR8ZnVufGlmfG9mfHJlY2VpdmV8dHJ5fHdoZW4pXFxiLyxcblx0J251bWJlcic6IFtcblx0XHQvXFwkXFxcXD8uLyxcblx0XHQvXFxiXFxkKyNbYS16MC05XSsvaSxcblx0XHQvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pXG5cdF0sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16XVtcXHdAXSooPz1cXCgpLyxcblx0J3ZhcmlhYmxlJzoge1xuXHRcdC8vIExvb2stYmVoaW5kIGlzIHVzZWQgdG8gcHJldmVudCB3cm9uZyBoaWdobGlnaHRpbmcgb2YgYXRvbXMgY29udGFpbmluZyBcIkBcIlxuXHRcdHBhdHRlcm46IC8oXnxbXkBdKSg/OlxcYnxcXD8pW0EtWl9dW1xcd0BdKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0L1s9XFwvPD46XT18PVs6XFwvXT18XFwrXFwrP3wtLT98Wz0qXFwvIV18XFxiKD86YW5kfGFuZGFsc298YmFuZHxibm90fGJvcnxic2x8YnNyfGJ4b3J8ZGl2fG5vdHxvcnxvcmVsc2V8cmVtfHhvcilcXGIvLFxuXHRcdHtcblx0XHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggPDxcblx0XHRcdHBhdHRlcm46IC8oXnxbXjxdKTwoPyE8KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoID4+XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14+XSk+KD8hPikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2F0b20nOiAvXFxiW2Etel1bXFx3QF0qLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fTo7LC4jfF18PDx8Pj4vXG5cbn07XG5cblByaXNtLmxhbmd1YWdlc1snZXhjZWwtZm9ybXVsYSddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYk5cXChcXHMqKVwiKD86W15cIl18XCJcIikqXCIoPz1cXHMqXFwpKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIl18XCJcIikqXCIoPyFcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncmVmZXJlbmNlJzoge1xuXHRcdC8vIGh0dHBzOi8vd3d3LmFibGViaXRzLmNvbS9vZmZpY2UtYWRkaW5zLWJsb2cvMjAxNS8xMi8wOC9leGNlbC1yZWZlcmVuY2UtYW5vdGhlci1zaGVldC13b3JrYm9vay9cblxuXHRcdC8vIFNhbGVzIUIyXG5cdFx0Ly8gJ1dpbnRlciBzYWxlcychQjJcblx0XHQvLyBbU2FsZXMueGxzeF1KYW4hQjI6QjVcblx0XHQvLyBEOlxcUmVwb3J0c1xcW1NhbGVzLnhsc3hdSmFuIUIyOkI1XG5cdFx0Ly8gJ1tTYWxlcy54bHN4XUphbiBzYWxlcychQjI6QjVcblx0XHQvLyAnRDpcXFJlcG9ydHNcXFtTYWxlcy54bHN4XUphbiBzYWxlcychQjI6QjVcblxuXHRcdHBhdHRlcm46IC8oPzonW14nXSonfCg/OlteXFxzKClbXFxde308Pio/XCInOywkJl0qXFxbW15eXFxzKClbXFxde308Pio/XCInXStcXF0pP1xcdyspIS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC8hJC8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvJy8sXG5cdFx0XHQnc2hlZXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXltcXF1dKyQvLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdmaWxlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxbW15bXFxdXStcXF0kLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tbXFxdXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwYXRoJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdmdW5jdGlvbi1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdyooPz1cXCgpL2ksXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQncmFuZ2UnOiB7XG5cdFx0cGF0dGVybjogL1xcJD9cXGIoPzpbQS1aXStcXCQ/XFxkKzpcXCQ/W0EtWl0rXFwkP1xcZCt8W0EtWl0rOlxcJD9bQS1aXSt8XFxkKzpcXCQ/XFxkKylcXGIvaSxcblx0XHRhbGlhczogJ3NlbGVjdG9yJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC86Lyxcblx0XHRcdCdjZWxsJzogL1xcJD9bQS1aXStcXCQ/XFxkKy9pLFxuXHRcdFx0J2NvbHVtbic6IC9cXCQ/W0EtWl0rL2ksXG5cdFx0XHQncm93JzogL1xcJD9cXGQrL1xuXHRcdH1cblx0fSxcblx0J2NlbGwnOiB7XG5cdFx0Ly8gRXhjZWwgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgc28gdGhlIHN0cmluZyBcImZvbzFcIiBjb3VsZCBiZSBlaXRoZXIgYSB2YXJpYWJsZSBvciBhIGNlbGwuXG5cdFx0Ly8gVG8gY29tYmF0IHRoaXMsIHdlIG1hdGNoIGNlbGxzIGNhc2UgaW5zZW5zaXRpdmUsIGlmIHRoZSBjb250YWluIGF0IGxlYXN0IG9uZSBcIiRcIiwgYW5kIGNhc2Ugc2Vuc2l0aXZlIG90aGVyd2lzZS5cblx0XHRwYXR0ZXJuOiAvXFxiW0EtWl0rXFxkK1xcYnxcXCRbQS1aYS16XStcXCQ/XFxkK1xcYnxcXGJbQS1aYS16XStcXCRcXGQrXFxiLyxcblx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHR9LFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQrKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT9cXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8VFJVRSlcXGIvaSxcblx0J29wZXJhdG9yJzogL1stKyovXiU9JixdfDxbPT5dP3w+PT8vLFxuXHQncHVuY3R1YXRpb24nOiAvW1tcXF0oKTt7fXxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzWyd4bHN4J10gPSBQcmlzbS5sYW5ndWFnZXNbJ3hscyddID0gUHJpc20ubGFuZ3VhZ2VzWydleGNlbC1mb3JtdWxhJ107XG5cblByaXNtLmxhbmd1YWdlcy5mc2hhcnAgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwoXFwqKD8hXFwpKVtcXHNcXFNdKj9cXCpcXCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OlwiXCJcIltcXHNcXFNdKj9cIlwiXCJ8QFwiKD86XCJcInxbXlwiXSkqXCJ8XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIilCPy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZXhjZXB0aW9ufGluaGVyaXR8aW50ZXJmYWNlfG5ld3xvZnx0eXBlKVxccyt8XFx3XFxzKjpcXHMqfFxcczpcXD8/PlxccyopWy5cXHddK1xcYig/OlxccyooPzotPnxcXCopXFxzKlsuXFx3XStcXGIpKig/IVxccypbOi5dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC8tPnxcXCovLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmxldHxyZXR1cm58dXNlfHlpZWxkKSg/OiFcXEJ8XFxiKXxcXGIoPzphYnN0cmFjdHxhbmR8YXN8YXNyfGFzc2VydHxhdG9taWN8YmFzZXxiZWdpbnxicmVha3xjaGVja2VkfGNsYXNzfGNvbXBvbmVudHxjb25zdHxjb25zdHJhaW50fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGRlZmF1bHR8ZGVsZWdhdGV8ZG98ZG9uZXxkb3duY2FzdHxkb3dudG98ZWFnZXJ8ZWxpZnxlbHNlfGVuZHxldmVudHxleGNlcHRpb258ZXh0ZXJufGV4dGVybmFsfGZhbHNlfGZpbmFsbHl8Zml4ZWR8Zm9yfGZ1bnxmdW5jdGlvbnxmdW5jdG9yfGdsb2JhbHxpZnxpbnxpbmNsdWRlfGluaGVyaXR8aW5saW5lfGludGVyZmFjZXxpbnRlcm5hbHxsYW5kfGxhenl8bG9yfGxzbHxsc3J8bHhvcnxtYXRjaHxtZW1iZXJ8bWV0aG9kfG1peGlufG1vZHxtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG5vdHxudWxsfG9iamVjdHxvZnxvcGVufG9yfG92ZXJyaWRlfHBhcmFsbGVsfHByaXZhdGV8cHJvY2Vzc3xwcm90ZWN0ZWR8cHVibGljfHB1cmV8cmVjfHNlYWxlZHxzZWxlY3R8c2lnfHN0YXRpY3xzdHJ1Y3R8dGFpbGNhbGx8dGhlbnx0b3x0cmFpdHx0cnVlfHRyeXx0eXBlfHVwY2FzdHx2YWx8dmlydHVhbHx2b2lkfHZvbGF0aWxlfHdoZW58d2hpbGV8d2l0aClcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC9cXGIweFtcXGRhLWZBLUZdKyg/OkxGfGxmfHVuKT9cXGIvLFxuXHRcdC9cXGIwYlswMV0rKD86dXl8eSk/XFxiLyxcblx0XHQvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltmbV18ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdFx0L1xcYlxcZCsoPzpbSWxMc3ldfFVMfHVbbHN5XT8pP1xcYi9cblx0XSxcblx0J29wZXJhdG9yJzogLyhbPD5+Jl5dKVxcMVxcMXwoWyouOjw+Jl0pXFwyfDwtfC0+fFshPTpdPXw8P1xcfHsxLDN9Pj98XFw/Pyg/Ojw9fD49fDw+fFstKyovJT08Pl0pXFw/P3xbIT9eJl18flsrfi1dfDo+fDpcXD8+Py9cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZnNoYXJwJywgJ2tleXdvcmQnLCB7XG5cdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikjLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheIylcXGIoPzplbHNlfGVuZGlmfGlmfGxpZ2h0fGxpbmV8bm93YXJuKVxcYi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZnNoYXJwJywgJ3B1bmN0dWF0aW9uJywge1xuXHQnY29tcHV0YXRpb24tZXhwcmVzc2lvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW19hLXpdXFx3Kig/PVxccypcXHspL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9XG59KTtcblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2ZzaGFycCcsICdzdHJpbmcnLCB7XG5cdCdhbm5vdGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXFs8Lis/PlxcXS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFs8fD5cXF0kLyxcblx0XHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcdyskfChefDtcXHMqKVtBLVpdXFx3Kig/PVxcKCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2Fubm90YXRpb24tY29udGVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmZzaGFycFxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXlxcXFwnXXxcXFxcKD86LnxcXGR7M318eFthLWZBLUZcXGRdezJ9fHVbYS1mQS1GXFxkXXs0fXxVW2EtZkEtRlxcZF17OH0pKSdCPy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnRfaW5zaWRlID0ge1xuXHRcdCdmdW5jdGlvbic6IC9cXGIoPzpCVUdTP3xGSVgoPzpNRVM/KT98Tk9URVM/fFRPRE9TP3xYWCt8SEFDS1M/fFdBUk4oPzpJTkcpP3xcXD97Mix9fCF7Mix9KVxcYi9cblx0fTtcblx0dmFyIHN0cmluZ19pbnNpZGUgPSB7XG5cdFx0J251bWJlcic6IC9cXFxcW15cXHMnXXwlXFx3L1xuXHR9O1xuXG5cdHZhciBmYWN0b3IgPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vICEgc2luZ2xlLWxpbmUgZXhjbGFtYXRpb24gcG9pbnQgY29tbWVudHMgd2l0aCB3aGl0ZXNwYWNlIGFmdGVyL2Fyb3VuZCB0aGUgIVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OiEgLip8ISQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjb21tZW50X2luc2lkZVxuXHRcdFx0fSxcblxuXHRcdFx0LyogZnJvbSBiYXNpcy9tdWx0aWxpbmU6ICovXG5cdFx0XHR7XG5cdFx0XHRcdC8vIC8qIGNvbW1lbnQgKi8sIC8qIGNvbW1lbnQqL1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcL1xcKlxcc1tcXHNcXFNdKj9cXCpcXC8oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY29tbWVudF9pbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vICFbWyBjb21tZW50IF1dICwgIVs9PT1bIGNvbW1lbnRdPT09XVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSFcXFsoPXswLDZ9KVxcW1xcc1tcXHNcXFNdKj9cXF1cXDJcXF0oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY29tbWVudF9pbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J251bWJlcic6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gYmFzaWMgYmFzZSAxMCBpbnRlZ2VycyA5LCAtOVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVsrLV0/XFxkKyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGJhc2UgcHJlZml4IGludGVnZXJzIDBiMDEwIDBvNzAgMHhhZCAwZDEwIDBYQUQgLTB4YTlcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylbKy1dPzAoPzpiWzAxXSt8b1swLTddK3xkXFxkK3x4W1xcZEEtRl0rKSg/PVxcc3wkKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBmcmFjdGlvbmFsIHJhdGlvcyAxLzUgLTEvNSBhbmQgdGhlIGxpdGVyYWwgZmxvYXQgYXBwcm94aW1hdGlvbnMgMS81LiAtMS81LlxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVsrLV0/XFxkK1xcL1xcZCtcXC4/KD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gcG9zaXRpdmUgbWl4ZWQgbnVtYmVycyAyMysxLzUgKzIzKzEvNVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcKz9cXGQrXFwrXFxkK1xcL1xcZCsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBuZWdhdGl2ZSBtaXhlZCBudW1iZXJzIC0yMy0xLzVcblx0XHRcdFx0cGF0dGVybjogLyhefFxccyktXFxkKy1cXGQrXFwvXFxkKyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGJhc2ljIGRlY2ltYWwgZmxvYXRzIC0wLjAxIDAuIC4wIC4xIC0uMSAtMS4gLTEyLjEzICsxMi4xM1xuXHRcdFx0XHQvLyBhbmQgc2NpZW50aWZpYyBub3RhdGlvbiB3aXRoIGJhc2UgMTAgZXhwb25lbnRzIDNlNCAzZS00IC4zZS00XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpWystXT8oPzpcXGQqXFwuXFxkK3xcXGQrXFwuXFxkKnxcXGQrKSg/OmVbKy1dP1xcZCspPyg/PVxcc3wkKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBOQU4gbGl0ZXJhbCBzeW50YXggTkFOOiA4MDAwMGRlYWRiZWVmLCBOQU46IGFcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylOQU46XFxzK1tcXGRhLWZBLUZdKyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8qXG5cdFx0XHRcdFx0YmFzZSBwcmVmaXggZmxvYXRzIDB4MS4wcDMgKDguMCkgMGIxLjAxMHAyICg1LjApIDB4MS5wMSAwYjEuMTExMTExMTFwMTExMTEuLi5cblx0XHRcdFx0XHRcIlRoZSBub3JtYWxpemVkIGhleCBmb3JtIFx1MDBCMTB4MS5NTU1NTU1NTU1NTU1NW3BQXVx1MDBCMUVFRUUgYWxsb3dzIGFueSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gYmUgc3BlY2lmaWVkIHByZWNpc2VseS5cblx0XHRcdFx0XHRUaGUgdmFsdWVzIG9mIE1NTU1NTU1NTU1NTU0gYW5kIEVFRUUgbWFwIGRpcmVjdGx5IHRvIHRoZSBtYW50aXNzYSBhbmQgZXhwb25lbnQgZmllbGRzIG9mIHRoZSBiaW5hcnkgSUVFRSA3NTQgcmVwcmVzZW50YXRpb24uXCJcblx0XHRcdFx0XHQ8aHR0cHM6Ly9kb2NzLmZhY3RvcmNvZGUub3JnL2NvbnRlbnQvYXJ0aWNsZS1zeW50YXgtZmxvYXRzLmh0bWw+XG5cdFx0XHRcdCovXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpWystXT8wKD86YjFcXC5bMDFdKnxvMVxcLlswLTddKnxkMVxcLlxcZCp8eDFcXC5bXFxkQS1GXSopcFxcZCsoPz1cXHN8JCkvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQvLyBSLyByZWdleHA/XFwvXFxcXC9cblx0XHQncmVnZXhwJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccylSXFwvXFxzKD86XFxcXFxcU3xbXlxcXFwvXSkqXFwvKD86W2lkbXNyXSp8W2lkbXNyXSstW2lkbXNyXSspKD89XFxzfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhcmlhYmxlJzogL1xcXFxcXFMvLFxuXHRcdFx0XHQna2V5d29yZCc6IC9bKz8qXFxbXFxdXiQoKXt9LnxdLyxcblx0XHRcdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFwvKVtpZG1zcl0rKD86LVtpZG1zcl0rKT8vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpW3RmXSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIFNCVUZcIiBhc2RcIiwgVVJMXCIgOi8vLi4uXCIsIFBcIiAvZXRjL1wiXG5cdFx0J2N1c3RvbS1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVtBLVowLTlcXC1dK1wiXFxzKD86XFxcXFxcU3xbXlwiXFxcXF0pKlwiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J251bWJlcic6IC9cXFxcXFxTfCVcXHd8XFwvL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnbXVsdGlsaW5lLXN0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gU1RSSU5HOiBuYW1lIFxcbiBjb250ZW50IFxcbiA7IC0+IENPTlNUQU5UOiBuYW1lIFwiY29udGVudFwiIChzeW1ib2wpXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpU1RSSU5HOlxccytcXFMrKD86XFxufFxcclxcbikuKig/OlxcbnxcXHJcXG4pXFxzKjsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J251bWJlcic6IHN0cmluZ19pbnNpZGUubnVtYmVyLFxuXHRcdFx0XHRcdC8vIHRyYWlsaW5nIHNlbWljb2xvbiBvbiBpdHMgb3duIGxpbmVcblx0XHRcdFx0XHQnc2VtaWNvbG9uLW9yLXNldGxvY2FsJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXVsgXFx0XSopOyg/PVxcc3wkKS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEhFUkVET0M6IG1hcmtlciBcXG4gY29udGVudCBcXG4gbWFya2VyIDsgLT4gXCJjb250ZW50XCIgKGltbWVkaWF0ZSlcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylIRVJFRE9DOlxccytcXFMrKD86XFxufFxcclxcbikuKig/OlxcbnxcXHJcXG4pXFxzKlxcUysoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiBzdHJpbmdfaW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBbWyBzdHJpbmcgXV0sIFs9PVsgc3RyaW5nXT09XVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcWyg9ezAsNn0pXFxbXFxzW1xcc1xcU10qP1xcXVxcMlxcXSg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0XHRpbnNpZGU6IHN0cmluZ19pbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J3NwZWNpYWwtdXNpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVVTSU5HOig/Olxcc1xcUyspKig/PVxccys7KD86XFxzfCQpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gdGhpcyBpcyBlc3NlbnRpYWxseSBhIHJlZ2V4IGZvciB2b2NhYiBuYW1lcywgd2hpY2ggaSBkb24ndCB3YW50IHRvIHNwZWNpZnlcblx0XHRcdFx0Ly8gYnV0IHRoZSBVU0lORzogZ2V0cyBwaWNrZWQgdXAgYXMgYSB2b2NhYiBuYW1lXG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXHMpW146XFxzXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiB0aGlzIGRlc2NyaXB0aW9uIG9mIHN0YWNrIGVmZmVjdCBsaXRlcmFsIHN5bnRheCBpcyBub3QgY29tcGxldGUgYW5kIG5vdCBhcyBzcGVjaWZpYyBhcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlXG5cdFx0XHR0cnlpbmcgdG8gZG8gYmV0dGVyIGlzIG1vcmUgd29yayBhbmQgcmVnZXgtY29tcHV0YXRpb24tdGltZSB0aGFuIGl0J3Mgd29ydGggdGhvdWdoLlxuXHRcdFx0LSB3ZSdkIGxpa2UgdG8gaGF2ZSB0aGUgXCJkZWxpbWl0ZXJcIiBwYXJ0cyBvZiB0aGUgc3RhY2sgZWZmZWN0IFsgKCwgLS0sIGFuZCApIF0gYmUgYSBkaWZmZXJlbnQgKGxlc3MtaW1wb3J0YW50IG9yIGNvbW1lbnQtbGlrZSkgY29sb3VyIHRvIHRoZSBzdGFjayBlZmZlY3QgY29udGVudHNcblx0XHRcdC0gd2UnZCBsaWtlIGlmIG5lc3RlZCBzdGFjayBlZmZlY3RzIHdlcmUgdHJlYXRlZCBhcyBzdWNoIHJhdGhlciB0aGFuIGp1c3QgYXBwZWFyaW5nIGZsYXQgKHdpdGggYGluc2lkZWApXG5cdFx0XHQtIHdlJ2QgbGlrZSBpZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUgY29udmVudGlvbnMgd2VyZSByZWNvZ25pc2VkIHNwZWNpZmljYWxseTpcblx0XHRcdFx0c3BlY2lhbCByb3cgdmFyaWFibGVzID0gLi5hIGIuLlxuXHRcdFx0XHR0eXBlIGFuZCBzdGFjayBlZmZlY3QgYW5ub3RhdGlvbnMgZW5kIHdpdGggYSBjb2xvbiA9ICggcXVvdDogKCBhOiAoIC0tICkgLS0gYiApIC0tIHggKSwgKCB4OiBudW1iZXIgLS0gKVxuXHRcdFx0XHR3b3JkIHRocm93cyB1bmNvbmRpdGlvbmFsIGVycm9yID0gKlxuXHRcdFx0XHRhbnkgb3RoZXIgd29yZC1saWtlIHZhcmlhYmxlIG5hbWUgPSBhID8gcScgZXRjXG5cblx0XHRcdGh0dHBzOi8vZG9jcy5mYWN0b3Jjb2RlLm9yZy9jb250ZW50L2FydGljbGUtZWZmZWN0cy5odG1sXG5cblx0XHRcdHRoZXNlIGFyZSBwcmV0dHkgY29tcGxpY2F0ZWQgdG8gaGlnaGxpZ2h0IHByb3Blcmx5IHdpdGhvdXQgYSByZWFsIHBhcnNlciwgYW5kIHRoZXJlZm9yZSBvdXQgb2Ygc2NvcGVcblx0XHRcdHRoZSBvbGQgcGF0dGVybiwgd2hpY2ggbWF5IGJlIGxhdGVyIHVzZWZ1bCwgd2FzOiAoXnxcXHMpKD86Y2FsbHxleGVjdXRlfGV2YWwpP1xcKCg/OlxccytbXlwiXFxyXFxuXFx0IF1cXFMqKSo/XFxzKy0tKD86XFxzK1teXCJcXG5cXHQgXVxcUyopKj9cXHMrXFwpKD89XFxzfCQpXG5cdFx0Ki9cblxuXHRcdC8vIGN1cnJlbnQgc29sdXRpb24gaXMgbm90IGdyZWF0XG5cdFx0J3N0YWNrLWVmZmVjdC1kZWxpbWl0ZXInOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG9wZW5pbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0cGF0dGVybjogLyhefFxccykoPzpjYWxsfGV2YWx8ZXhlY3V0ZSk/XFwoKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBtaWRkbGUgLS1cblx0XHRcdFx0cGF0dGVybjogLyhcXHMpLS0oPz1cXHMpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0cGF0dGVybjogLyhcXHMpXFwpKD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J2NvbWJpbmF0b3JzJzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdrZXJuZWwtYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IG51bGwsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXG5cdFx0J3NlcXVlbmNlcy1idWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH0sXG5cblx0XHQnbWF0aC1idWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH0sXG5cblx0XHQnY29uc3RydWN0b3Itd29yZCc6IHtcblx0XHRcdC8vIDxhcnJheT4gYnV0IG5vdCA8PT5cblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpPCg/IT0rPnwtKz4pXFxTKz4oPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J290aGVyLWJ1aWx0aW4tc3ludGF4Jzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cblx0XHQvKlxuXHRcdFx0ZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCB3b3JkIG5hbWluZyBjb252ZW50aW9uczogKHRoZSBjb252ZW50aW9uIGFwcGVhcnMgb3V0c2lkZSBvZiB0aGUgW2JyYWNrZXRzXSlcblx0XHRcdFx0c2V0LVt4XVxuXHRcdFx0XHRjaGFuZ2UtW3hdXG5cdFx0XHRcdHdpdGgtW3hdXG5cdFx0XHRcdG5ldy1beF1cblx0XHRcdFx0PltzdHJpbmddXG5cdFx0XHRcdFtiYXNlXT5cblx0XHRcdFx0W3N0cmluZ10+W251bWJlcl1cblx0XHRcdFx0K1tzeW1ib2xdK1xuXHRcdFx0XHRbYm9vbGVhbi13b3JkXT9cblx0XHRcdFx0P1tvZl1cblx0XHRcdFx0W3Nsb3QtcmVhZGVyXT4+XG5cdFx0XHRcdD4+W3Nsb3Qtc2V0dGVyXVxuXHRcdFx0XHRbc2xvdC13cml0ZXJdPDxcblx0XHRcdFx0KFtpbXBsZW1lbnRhdGlvbi1kZXRhaWxdKVxuXHRcdFx0XHRbbXV0YXRlcl0hXG5cdFx0XHRcdFt2YXJpYW50XSpcblx0XHRcdFx0W3ByZXR0eXByaW50XS5cblx0XHRcdFx0JFtoZWxwLW1hcmt1cF1cblxuXHRcdFx0PGNvbnN0cnVjdG9ycz4sIFNZTlRBWDosIGV0YyBhcmUgc3VwcG9ydGVkIGJ5IHRoZWlyIG93biBwYXR0ZXJucy5cblxuXHRcdFx0YHdpdGhgIGFuZCBgbmV3YCBmcm9tIGBrZXJuZWxgIGFyZSB0aGVpciBvd24gYnVpbHRpbnMuXG5cblx0XHRcdHNlZSA8aHR0cHM6Ly9kb2NzLmZhY3RvcmNvZGUub3JnL2NvbnRlbnQvYXJ0aWNsZS1jb252ZW50aW9ucy5odG1sPlxuXHRcdCovXG5cdFx0J2NvbnZlbnRpb25hbGx5LW5hbWVkLXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/IVwiKSg/Oig/OmNoYW5nZXxuZXd8c2V0fHdpdGgpLVxcUyt8XFwkXFxTK3w+W14+XFxzXSt8W146Plxcc10rPnxbXj5cXHNdKz5bXj5cXHNdK3xcXCtbXitcXHNdK1xcK3xbXj9cXHNdK1xcP3xcXD9bXj9cXHNdK3xbXj5cXHNdKz4+fD4+W14+XFxzXSt8W148XFxzXSs8PHxcXChbXigpXFxzXStcXCl8W14hXFxzXSshfFteKlxcc11cXFMqXFwqfFteLlxcc11cXFMqXFwuKSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQnY29sb24tc3ludGF4Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPzpbQS1aMC05XFwtXSsjPyk/OnsxLDJ9XFxzKyg/OjtcXFMrfCg/ITspXFxTKykoPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdzZW1pY29sb24tb3Itc2V0bG9jYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykoPzo7fDo+KSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXG5cdFx0Ly8gZG8gbm90IGhpZ2hsaWdodCBsZWFkaW5nIH0gb3IgdHJhaWxpbmcgWHsgYXQgdGhlIGJlZ2luL2VuZCBvZiB0aGUgZmlsZSBhcyBpdCdzIGludmFsaWQgc3ludGF4XG5cdFx0J2N1cmx5LWJyYWNlLWxpdGVyYWwtZGVsaW1pdGVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvcGVuaW5nXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpW2Etel0qXFx7KD89XFxzKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gY2xvc2luZ1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccylcXH0oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblxuXHRcdF0sXG5cblx0XHQvLyBkbyBub3QgaGlnaGxpZ2h0IGxlYWRpbmcgXSBvciB0cmFpbGluZyBbIGF0IHRoZSBiZWdpbi9lbmQgb2YgdGhlIGZpbGUgYXMgaXQncyBpbnZhbGlkIHN5bnRheFxuXHRcdCdxdW90YXRpb24tZGVsaW1pdGVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvcGVuaW5nXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpXFxbKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBjbG9zaW5nXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcXSg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdF0sXG5cblx0XHQnbm9ybWFsLXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVteXCJcXHNdXFxTKig/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8qXG5cdFx0XHRiYXNpYyBmaXJzdC1jbGFzcyBzdHJpbmcgXCJhXCJcblx0XHRcdFx0d2l0aCBlc2NhcGVkIGRvdWJsZS1xdW90ZSBcImFcXFwiXCJcblx0XHRcdFx0ZXNjYXBlZCBiYWNrc2xhc2ggXCJcXFxcXCJcblx0XHRcdFx0YW5kIGdlbmVyYWwgZXNjYXBlcyBzaW5jZSBGYWN0b3IgaGFzIHNvIG1hbnkgXCJcXE5cIlxuXG5cdFx0XHRzeW50YXggdGhhdCB3b3JrcyBpbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHRoYXQgaXNuJ3QgZnVsbHlcblx0XHRcdHN1cHBvcnRlZCBiZWNhdXNlIGl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsOlxuXHRcdFx0XHRcInN0cmluZyAxXCJcInN0cmluZyAyXCIgLT4gMiBzdHJpbmdzICh3b3JrcyBhbnl3YXkpXG5cdFx0XHRcdFwic3RyaW5nXCI1IC0+IHN0cmluZywgNVxuXHRcdFx0XHRcInN0cmluZ1wiWyBdIC0+IHN0cmluZywgcXVvdGF0aW9uXG5cdFx0XHRcdHsgXCJhXCJ9IC0+IGFycmF5PHN0cmluZz5cblxuXHRcdFx0dGhlIHJlc3Qgb2YgdGhvc2UgZXhhbXBsZXMgYWxsIHByb3Blcmx5IHJlY29nbmlzZSB0aGUgc3RyaW5nLCBidXQgbm90XG5cdFx0XHRcdHRoZSBvdGhlciBvYmplY3QgKG51bWJlciwgcXVvdGF0aW9uLCBldGMpXG5cdFx0XHR0aGlzIGlzIGZpbmUgZm9yIGEgcmVnZXgtb25seSBpbXBsZW1lbnRhdGlvbi5cblx0XHQqL1xuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcXFxTfFteXCJcXFxcXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBzdHJpbmdfaW5zaWRlXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBlc2NhcGUgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdFx0cmV0dXJuIChzdHIgKyAnJykucmVwbGFjZSgvKFsuPyorXFxeJFxcW1xcXVxcXFwoKXt9fFxcLV0pL2csICdcXFxcJDEnKTtcblx0fTtcblxuXHR2YXIgYXJyVG9Xb3Jkc1JlZ0V4cCA9IGZ1bmN0aW9uIChhcnIpIHtcblx0XHRyZXR1cm4gbmV3IFJlZ0V4cChcblx0XHRcdCcoXnxcXFxccykoPzonICsgYXJyLm1hcChlc2NhcGUpLmpvaW4oJ3wnKSArICcpKD89XFxcXHN8JCknXG5cdFx0KTtcblx0fTtcblxuXHR2YXIgYnVpbHRpbnMgPSB7XG5cdFx0J2tlcm5lbC1idWlsdGluJzogW1xuXHRcdFx0J29yJywgJzJuaXBkJywgJzRkcm9wJywgJ3R1Y2snLCAnd3JhcHBlcicsICduaXAnLCAnd3JhcHBlcj8nLCAnY2FsbHN0YWNrPmFycmF5JywgJ2RpZScsICdkdXBkJywgJ2NhbGxzdGFjaycsICdjYWxsc3RhY2s/JywgJzNkdXAnLCAnaGFzaGNvZGUnLCAncGljaycsICc0bmlwJywgJ2J1aWxkJywgJz5ib29sZWFuJywgJ25pcGQnLCAnY2xvbmUnLCAnNW5pcCcsICdlcT8nLCAnPycsICc9JywgJ3N3YXBkJywgJzJvdmVyJywgJ2NsZWFyJywgJzJkdXAnLCAnZ2V0LXJldGFpbnN0YWNrJywgJ25vdCcsICd0dXBsZT8nLCAnZHVwJywgJzNuaXBkJywgJ2NhbGwnLCAnLXJvdGQnLCAnb2JqZWN0JywgJ2Ryb3AnLCAnYXNzZXJ0PScsICdhc3NlcnQ/JywgJy1yb3QnLCAnZXhlY3V0ZScsICdib2EnLCAnZ2V0LWNhbGxzdGFjaycsICdjdXJyaWVkPycsICczZHJvcCcsICdwaWNrZCcsICdvdmVyZCcsICdvdmVyJywgJ3JvbGwnLCAnM25pcCcsICdzd2FwJywgJ2FuZCcsICcybmlwJywgJ3JvdGQnLCAndGhyb3cnLCAnKGNsb25lKScsICdoYXNoY29kZSonLCAnc3BpbicsICdyZWFjaCcsICc0ZHVwJywgJ2VxdWFsPycsICdnZXQtZGF0YXN0YWNrJywgJ2Fzc2VydCcsICcyZHJvcCcsICc8d3JhcHBlcj4nLCAnYm9vbGVhbj8nLCAnaWRlbnRpdHktaGFzaGNvZGUnLCAnaWRlbnRpdHktdHVwbGU/JywgJ251bGwnLCAnY29tcG9zZWQ/JywgJ25ldycsICc1ZHJvcCcsICdyb3QnLCAnLXJvbGwnLCAneG9yJywgJ2lkZW50aXR5LXR1cGxlJywgJ2Jvb2xlYW4nXG5cdFx0XSxcblx0XHQnb3RoZXItYnVpbHRpbi1zeW50YXgnOiBbXG5cdFx0XHQvLyBzeW50YXhcblx0XHRcdCc9PT09PT09JywgJ3JlY3Vyc2l2ZScsICdmbHVzaGFibGUnLCAnPj4nLCAnPDw8PDw8JywgJ01cXFxcJywgJ0InLCAnUFJJVkFURT4nLCAnXFxcXCcsICc9PT09PT0nLCAnZmluYWwnLCAnaW5saW5lJywgJ2RlbGltaXRlcicsICdkZXByZWNhdGVkJywgJzxQUklWQVRFJywgJz4+Pj4+PicsICc8PDw8PDw8JywgJ3BhcnNlLWNvbXBsZXgnLCAnbWFsZm9ybWVkLWNvbXBsZXgnLCAncmVhZC1vbmx5JywgJz4+Pj4+Pj4nLCAnY2FsbC1uZXh0LW1ldGhvZCcsICc8PCcsICdmb2xkYWJsZScsXG5cdFx0XHQvLyBsaXRlcmFsc1xuXHRcdFx0JyQnLCAnJFsnLCAnJHsnXG5cdFx0XSxcblx0XHQnc2VxdWVuY2VzLWJ1aWx0aW4nOiBbXG5cdFx0XHQnbWVtYmVyLWVxPycsICdtaXNtYXRjaCcsICdhcHBlbmQnLCAnYXNzZXJ0LXNlcXVlbmNlPScsICdsb25nZXInLCAncmVwZXRpdGlvbicsICdjbG9uZS1saWtlJywgJzNzZXF1ZW5jZScsICdhc3NlcnQtc2VxdWVuY2U/JywgJ2xhc3QtaW5kZXgtZnJvbScsICdyZXZlcnNlZCcsICdpbmRleC1mcm9tJywgJ2N1dConLCAncGFkLXRhaWwnLCAnam9pbi1hcycsICdyZW1vdmUtZXEhJywgJ2NvbmNhdC1hcycsICdidXQtbGFzdCcsICdzbmlwJywgJ250aHMnLCAnbnRoJywgJ3NlcXVlbmNlJywgJ2xvbmdlc3QnLCAnc2xpY2U/JywgJzxzbGljZT4nLCAncmVtb3ZlLW50aCcsICd0YWlsLXNsaWNlJywgJ2VtcHR5PycsICd0YWlsKicsICdtZW1iZXI/JywgJ3ZpcnR1YWwtc2VxdWVuY2U/JywgJ3NldC1sZW5ndGgnLCAnZHJvcC1wcmVmaXgnLCAnaW90YScsICd1bmNsaXAnLCAnYm91bmRzLWVycm9yPycsICd1bmNsaXAtbGFzdC1zbGljZScsICdub24tbmVnYXRpdmUtaW50ZWdlci1leHBlY3RlZCcsICdub24tbmVnYXRpdmUtaW50ZWdlci1leHBlY3RlZD8nLCAnbWlkcG9pbnRAJywgJ2xvbmdlcj8nLCAnP3NldC1udGgnLCAnP2ZpcnN0JywgJ3Jlc3Qtc2xpY2UnLCAncHJlcGVuZC1hcycsICdwcmVwZW5kJywgJ2ZvdXJ0aCcsICdzaWZ0JywgJ3N1YnNlcS1zdGFydCcsICduZXctc2VxdWVuY2UnLCAnP2xhc3QnLCAnbGlrZScsICdmaXJzdDQnLCAnMXNlcXVlbmNlJywgJ3JldmVyc2UnLCAnc2xpY2UnLCAndmlydHVhbEAnLCAncmVwZXRpdGlvbj8nLCAnc2V0LWxhc3QnLCAnaW5kZXgnLCAnNHNlcXVlbmNlJywgJ21heC1sZW5ndGgnLCAnc2V0LXNlY29uZCcsICdpbW11dGFibGUtc2VxdWVuY2UnLCAnZmlyc3QyJywgJ2ZpcnN0MycsICdzdXByZW11bScsICd1bmNsaXAtc2xpY2UnLCAnc3VmZml4IScsICdpbnNlcnQtbnRoJywgJ3RhaWwnLCAnM2FwcGVuZCcsICdzaG9ydCcsICdzdWZmaXgnLCAnY29uY2F0JywgJ2ZsaXAnLCAnaW1tdXRhYmxlPycsICdyZXZlcnNlIScsICcyc2VxdWVuY2UnLCAnc3VtJywgJ2RlbGV0ZS1hbGwnLCAnaW5kaWNlcycsICdzbmlwLXNsaWNlJywgJzxpb3RhPicsICdjaGVjay1zbGljZScsICdzZXF1ZW5jZT8nLCAnaGVhZCcsICdhcHBlbmQtYXMnLCAnaGFsdmVzJywgJ3NlcXVlbmNlPScsICdjb2xsYXBzZS1zbGljZScsICc/c2Vjb25kJywgJ3NsaWNlLWVycm9yPycsICdwcm9kdWN0JywgJ2JvdW5kcy1jaGVjaz8nLCAnYm91bmRzLWNoZWNrJywgJ2ltbXV0YWJsZScsICd2aXJ0dWFsLWV4ZW1wbGFyJywgJ2hhcnZlc3QnLCAncmVtb3ZlJywgJ3BhZC1oZWFkJywgJ2xhc3QnLCAnc2V0LWZvdXJ0aCcsICdjYXJ0ZXNpYW4tcHJvZHVjdCcsICdyZW1vdmUtZXEnLCAnc2hvcnRlbicsICdzaG9ydGVyJywgJ3JldmVyc2VkPycsICdzaG9ydGVyPycsICdzaG9ydGVzdCcsICdoZWFkLXNsaWNlJywgJ3BvcConLCAndGFpbC1zbGljZSonLCAnYnV0LWxhc3Qtc2xpY2UnLCAnaW90YT8nLCAnYXBwZW5kIScsICdjdXQtc2xpY2UnLCAnbmV3LXJlc2l6YWJsZScsICdoZWFkLXNsaWNlKicsICdzZXF1ZW5jZS1oYXNoY29kZScsICdwb3AnLCAnc2V0LW50aCcsICc/bnRoJywgJ3NlY29uZCcsICdqb2luJywgJ2ltbXV0YWJsZS1zZXF1ZW5jZT8nLCAnPHJldmVyc2VkPicsICczYXBwZW5kLWFzJywgJ3ZpcnR1YWwtc2VxdWVuY2UnLCAnc3Vic2VxPycsICdyZW1vdmUtbnRoIScsICdsZW5ndGgnLCAnbGFzdC1pbmRleCcsICdsZW5ndGhlbicsICdhc3NlcnQtc2VxdWVuY2UnLCAnY29weScsICdtb3ZlJywgJ3RoaXJkJywgJ2ZpcnN0JywgJ3RhaWw/JywgJ3NldC1maXJzdCcsICdwcmVmaXgnLCAnYm91bmRzLWVycm9yJywgJzxyZXBldGl0aW9uPicsICdleGNoYW5nZScsICdzdXJyb3VuZCcsICdjdXQnLCAnbWluLWxlbmd0aCcsICdzZXQtdGhpcmQnLCAncHVzaC1hbGwnLCAnaGVhZD8nLCAnc3Vic2VxLXN0YXJ0LWZyb20nLCAnZGVsZXRlLXNsaWNlJywgJ3Jlc3QnLCAnc3VtLWxlbmd0aHMnLCAnaGVhZConLCAnaW5maW11bScsICdyZW1vdmUhJywgJ2dsdWUnLCAnc2xpY2UtZXJyb3InLCAnc3Vic2VxJywgJ3B1c2gnLCAncmVwbGFjZS1zbGljZScsICdzdWJzZXEtYXMnLCAndW5jbGlwLWxhc3QnXG5cdFx0XSxcblx0XHQnbWF0aC1idWlsdGluJzogW1xuXHRcdFx0J251bWJlcj0nLCAnbmV4dC1wb3dlci1vZi0yJywgJz8xKycsICdmcC1zcGVjaWFsPycsICdpbWFnaW5hcnktcGFydCcsICdmbG9hdD5iaXRzJywgJ251bWJlcj8nLCAnZnAtaW5maW5pdHk/JywgJ2JpZ251bT8nLCAnZnAtc25hbj8nLCAnZGVub21pbmF0b3InLCAnZ2NkJywgJyonLCAnKycsICdmcC1iaXR3aXNlPScsICctJywgJ3U+PScsICcvJywgJz49JywgJ2JpdGFuZCcsICdwb3dlci1vZi0yPycsICdsb2cyLWV4cGVjdHMtcG9zaXRpdmUnLCAnbmVnPycsICc8JywgJ2xvZzInLCAnPicsICdpbnRlZ2VyPycsICdudW1iZXInLCAnYml0cz5kb3VibGUnLCAnMi8nLCAnemVybz8nLCAnYml0cz5mbG9hdCcsICdmbG9hdD8nLCAnc2hpZnQnLCAncmF0aW8/JywgJ3JlY3Q+JywgJ2V2ZW4/JywgJ3JhdGlvJywgJ2ZwLXNpZ24nLCAnYml0bm90JywgJz5maXhudW0nLCAnY29tcGxleD8nLCAnL2knLCAnaW50ZWdlcj5maXhudW0nLCAnL2YnLCAnc2duJywgJz5iaWdudW0nLCAnbmV4dC1mbG9hdCcsICd1PCcsICd1PicsICdtb2QnLCAncmVjaXAnLCAncmF0aW9uYWwnLCAnPmZsb2F0JywgJzJeJywgJ2ludGVnZXInLCAnZml4bnVtPycsICduZWcnLCAnZml4bnVtJywgJ3NxJywgJ2JpZ251bScsICc+cmVjdCcsICdiaXQ/JywgJ2ZwLXFuYW4/JywgJ3NpbXBsZS1nY2QnLCAnY29tcGxleCcsICc8ZnAtbmFuPicsICdyZWFsJywgJz5mcmFjdGlvbicsICdkb3VibGU+Yml0cycsICdiaXRvcicsICdyZW0nLCAnZnAtbmFuLXBheWxvYWQnLCAncmVhbC1wYXJ0JywgJ2xvZzItZXhwZWN0cy1wb3NpdGl2ZT8nLCAncHJldi1mbG9hdCcsICdhbGlnbicsICd1bm9yZGVyZWQ/JywgJ2Zsb2F0JywgJ2ZwLW5hbj8nLCAnYWJzJywgJ2JpdHhvcicsICdpbnRlZ2VyPmZpeG51bS1zdHJpY3QnLCAndTw9JywgJ29kZD8nLCAnPD0nLCAnL21vZCcsICc+aW50ZWdlcicsICdyZWFsPycsICdyYXRpb25hbD8nLCAnbnVtZXJhdG9yJ1xuXHRcdF1cblx0XHQvLyB0aGF0J3MgYWxsIGZvciBub3dcblx0fTtcblxuXHRPYmplY3Qua2V5cyhidWlsdGlucykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuXHRcdGZhY3RvcltrXS5wYXR0ZXJuID0gYXJyVG9Xb3Jkc1JlZ0V4cChidWlsdGluc1trXSk7XG5cdH0pO1xuXG5cdHZhciBjb21iaW5hdG9ycyA9IFtcblx0XHQvLyBrZXJuZWxcblx0XHQnMmJpJywgJ3doaWxlJywgJzJ0cmknLCAnYmkqJywgJzRkaXAnLCAnYm90aD8nLCAnc2FtZT8nLCAndHJpQCcsICdjdXJyeScsICdwcmVwb3NlJywgJzNiaScsICc/aWYnLCAndHJpKicsICcya2VlcCcsICcza2VlcCcsICdjdXJyaWVkJywgJzJrZWVwZCcsICd3aGVuJywgJzJiaSonLCAnMnRyaSonLCAnNGtlZXAnLCAnYmlAJywgJ2tlZXBkZCcsICdkbycsICd1bmxlc3MqJywgJ3RyaS1jdXJyeScsICdpZionLCAnbG9vcCcsICdiaS1jdXJyeSonLCAnd2hlbionLCAnMmJpQCcsICcydHJpQCcsICd3aXRoJywgJzJ3aXRoJywgJ2VpdGhlcj8nLCAnYmknLCAndW50aWwnLCAnM2RpcCcsICczY3VycnknLCAndHJpLWN1cnJ5KicsICd0cmktY3VycnlAJywgJ2JpLWN1cnJ5JywgJ2tlZXBkJywgJ2NvbXBvc2UnLCAnMmRpcCcsICdpZicsICczdHJpJywgJ3VubGVzcycsICd0dXBsZScsICdrZWVwJywgJzJjdXJyeScsICd0cmknLCAnbW9zdCcsICd3aGlsZSonLCAnZGlwJywgJ2NvbXBvc2VkJywgJ2JpLWN1cnJ5QCcsXG5cdFx0Ly8gc2VxdWVuY2VzXG5cdFx0J2ZpbmQtbGFzdC1mcm9tJywgJ3RyaW0taGVhZC1zbGljZScsICdtYXAtYXMnLCAnZWFjaC1mcm9tJywgJ25vbmU/JywgJ3RyaW0tdGFpbCcsICdwYXJ0aXRpb24nLCAnaWYtZW1wdHknLCAnYWNjdW11bGF0ZSonLCAncmVqZWN0IScsICdmaW5kLWZyb20nLCAnYWNjdW11bGF0ZS1hcycsICdjb2xsZWN0b3ItZm9yLWFzJywgJ3JlamVjdCcsICdtYXAnLCAnbWFwLXN1bScsICdhY2N1bXVsYXRlIScsICcyZWFjaC1mcm9tJywgJ2ZvbGxvdycsICdzdXByZW11bS1ieScsICdtYXAhJywgJ3VubGVzcy1lbXB0eScsICdjb2xsZWN0b3InLCAncGFkZGluZycsICdyZWR1Y2UtaW5kZXgnLCAncmVwbGljYXRlLWFzJywgJ2luZmltdW0tYnknLCAndHJpbS10YWlsLXNsaWNlJywgJ2NvdW50JywgJ2ZpbmQtaW5kZXgnLCAnZmlsdGVyJywgJ2FjY3VtdWxhdGUqIScsICdyZWplY3QtYXMnLCAnbWFwLWludGVnZXJzJywgJ21hcC1maW5kJywgJ3JlZHVjZScsICdzZWxlY3RvcicsICdpbnRlcmxlYXZlJywgJzJtYXAnLCAnZmlsdGVyLWFzJywgJ2JpbmFyeS1yZWR1Y2UnLCAnbWFwLWluZGV4LWFzJywgJ2ZpbmQnLCAncHJvZHVjZScsICdmaWx0ZXIhJywgJ3JlcGxpY2F0ZScsICdjYXJ0ZXNpYW4tbWFwJywgJ2NhcnRlc2lhbi1lYWNoJywgJ2ZpbmQtaW5kZXgtZnJvbScsICdtYXAtZmluZC1sYXN0JywgJzNtYXAtYXMnLCAnM21hcCcsICdmaW5kLWxhc3QnLCAnc2VsZWN0b3ItYXMnLCAnMm1hcC1hcycsICcybWFwLXJlZHVjZScsICdhY2N1bXVsYXRlJywgJ2VhY2gnLCAnZWFjaC1pbmRleCcsICdhY2N1bXVsYXRlKi1hcycsICd3aGVuLWVtcHR5JywgJ2FsbD8nLCAnY29sbGVjdG9yLWFzJywgJ3B1c2gtZWl0aGVyJywgJ25ldy1saWtlJywgJ2NvbGxlY3Rvci1mb3InLCAnMnNlbGVjdG9yJywgJ3B1c2gtaWYnLCAnMmFsbD8nLCAnbWFwLXJlZHVjZScsICczZWFjaCcsICdhbnk/JywgJ3RyaW0tc2xpY2UnLCAnMnJlZHVjZScsICdjaGFuZ2UtbnRoJywgJ3Byb2R1Y2UtYXMnLCAnMmVhY2gnLCAndHJpbScsICd0cmltLWhlYWQnLCAnY2FydGVzaWFuLWZpbmQnLCAnbWFwLWluZGV4Jyxcblx0XHQvLyBtYXRoXG5cdFx0J2lmLXplcm8nLCAnZWFjaC1pbnRlZ2VyJywgJ3VubGVzcy16ZXJvJywgJyhmaW5kLWludGVnZXIpJywgJ3doZW4temVybycsICdmaW5kLWxhc3QtaW50ZWdlcicsICcoYWxsLWludGVnZXJzPyknLCAndGltZXMnLCAnKGVhY2gtaW50ZWdlciknLCAnZmluZC1pbnRlZ2VyJywgJ2FsbC1pbnRlZ2Vycz8nLFxuXHRcdC8vIG1hdGguY29tYmluYXRvcnNcblx0XHQndW5sZXNzLW5lZ2F0aXZlJywgJ2lmLXBvc2l0aXZlJywgJ3doZW4tcG9zaXRpdmUnLCAnd2hlbi1uZWdhdGl2ZScsICd1bmxlc3MtcG9zaXRpdmUnLCAnaWYtbmVnYXRpdmUnLFxuXHRcdC8vIGNvbWJpbmF0b3JzXG5cdFx0J2Nhc2UnLCAnMmNsZWF2ZScsICdjb25kPnF1b3QnLCAnY2FzZT5xdW90JywgJzNjbGVhdmUnLCAnd3JvbmctdmFsdWVzJywgJ3RvLWZpeGVkLXBvaW50JywgJ2FsaXN0PnF1b3QnLCAnY29uZCcsICdjbGVhdmUnLCAnY2FsbC1lZmZlY3QnLCAncmVjdXJzaXZlLWhhc2hjb2RlJywgJ3NwcmVhZCcsICdkZWVwLXNwcmVhZD5xdW90Jyxcblx0XHQvLyBjb21iaW5hdG9ycy5zaG9ydC1jaXJjdWl0XG5cdFx0JzJ8fCcsICcwfHwnLCAnbnx8JywgJzAmJicsICcyJiYnLCAnM3x8JywgJzF8fCcsICcxJiYnLCAnbiYmJywgJzMmJicsXG5cdFx0Ly8gY29tYmluYXRvcnMuc21hcnRcblx0XHQnc21hcnQtdW5sZXNzKicsICdrZWVwLWlucHV0cycsICdyZWR1Y2Utb3V0cHV0cycsICdzbWFydC13aGVuKicsICdjbGVhdmU+YXJyYXknLCAnc21hcnQtd2l0aCcsICdzbWFydC1hcHBseScsICdzbWFydC1pZicsICdpbnB1dHMvb3V0cHV0cycsICdvdXRwdXQ+c2VxdWVuY2UtbicsICdtYXAtb3V0cHV0cycsICdtYXAtcmVkdWNlLW91dHB1dHMnLCAnZHJvcHBpbmcnLCAnb3V0cHV0PmFycmF5JywgJ3NtYXJ0LW1hcC1yZWR1Y2UnLCAnc21hcnQtMm1hcC1yZWR1Y2UnLCAnb3V0cHV0PmFycmF5LW4nLCAnbnVsbGFyeScsICdpbnB1dDxzZXF1ZW5jZScsICdhcHBlbmQtb3V0cHV0cycsICdkcm9wLWlucHV0cycsICdpbnB1dHMnLCAnc21hcnQtMnJlZHVjZScsICdkcm9wLW91dHB1dHMnLCAnc21hcnQtcmVkdWNlJywgJ3ByZXNlcnZpbmcnLCAnc21hcnQtd2hlbicsICdvdXRwdXRzJywgJ2FwcGVuZC1vdXRwdXRzLWFzJywgJ3NtYXJ0LXVubGVzcycsICdzbWFydC1pZionLCAnc3VtLW91dHB1dHMnLCAnaW5wdXQ8c2VxdWVuY2UtdW5zYWZlJywgJ291dHB1dD5zZXF1ZW5jZScsXG5cdFx0Ly8gdGFmblxuXHRdO1xuXG5cdGZhY3Rvci5jb21iaW5hdG9ycy5wYXR0ZXJuID0gYXJyVG9Xb3Jkc1JlZ0V4cChjb21iaW5hdG9ycyk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmZhY3RvciA9IGZhY3RvcjtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8qKlxuXHQgKiBCYXNlZCBvbiB0aGUgbWFudWFsIGJ5IFdvdXRlciB2YW4gT29ydG1lcnNzZW4uXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yODAxI2lzc3VlLTgyOTcxNzUwNH1cblx0ICovXG5cdFByaXNtLmxhbmd1YWdlc1snZmFsc2UnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtbXn1dKlxcfS9cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjaGFyYWN0ZXItY29kZSc6IHtcblx0XHRcdHBhdHRlcm46IC8nKD86W15cXHJdfFxcclxcbj8pLyxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J2Fzc2VtYmxlci1jb2RlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcZCtgLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J251bWJlcic6IC9cXGQrLyxcblx0XHQnb3BlcmF0b3InOiAvWy0hIyQlJicqKywuLzo7PT4/QFxcXFxeX2B8flx1MDBERlx1MDBGOF0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXFt8XFxdLyxcblx0XHQndmFyaWFibGUnOiAvW2Etel0vLFxuXHRcdCdub24tc3RhbmRhcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvWygpPEJET1x1MDBBRV0vLFxuXHRcdFx0YWxpYXM6ICdib2xkJ1xuXHRcdH1cblx0fTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzWydmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXMnXSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFsbG93fGZ1bmN0aW9ufGlmfG1hdGNofG51bGx8cmV0dXJufHJ1bGVzX3ZlcnNpb258c2VydmljZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvJiZ8XFx8XFx8fFs8PiE9XT0/fFstKyovJV18XFxiKD86aW58aXMpXFxiLyxcbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzWydmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXMnXVsnY2xhc3MtbmFtZSddO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXMnLCAna2V5d29yZCcsIHtcblx0J3BhdGgnOiB7XG5cdFx0cGF0dGVybjogLyhefFtcXHMoKSxdKSg/OlxcLyg/OltcXHdcXHhBMC1cXHVGRkZGXSt8XFx7W1xcd1xceEEwLVxcdUZGRkZdKyg/Oj1cXCpcXCopP1xcfXxcXCRcXChbXFx3XFx4QTAtXFx1RkZGRi5dK1xcKSkpKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXHtbXFx3XFx4QTAtXFx1RkZGRl0rKD86PVxcKlxcKik/XFx9fFxcJFxcKFtcXHdcXHhBMC1cXHVGRkZGLl0rXFwpLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J29wZXJhdG9yJzogLz0vLFxuXHRcdFx0XHRcdCdrZXl3b3JkJzogL1xcKlxcKi8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1suJCgpe31dL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLy9cblx0XHR9XG5cdH0sXG5cdCdtZXRob2QnOiB7XG5cdFx0Ly8gdG8gbWFrZSB0aGUgcGF0dGVybiBzaG9ydGVyLCB0aGUgYWN0dWFsIG1ldGhvZCBuYW1lcyBhcmUgb21pdHRlZFxuXHRcdHBhdHRlcm46IC8oXFxiYWxsb3dcXHMrKVthLXpdKyg/OlxccyosXFxzKlthLXpdKykqKD89XFxzKls6O10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYnVpbHRpbicsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHR9XG5cdH0sXG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMuZmxvdyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZmxvdycsICdrZXl3b3JkJywge1xuXHRcdCd0eXBlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86W0JiXW9vbGVhbnxGdW5jdGlvbnxbTm5ddW1iZXJ8W1NzXXRyaW5nfFtTc115bWJvbHxhbnl8bWl4ZWR8bnVsbHx2b2lkKVxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdH1cblx0XHRdXG5cdH0pO1xuXHRQcmlzbS5sYW5ndWFnZXMuZmxvd1snZnVuY3Rpb24tdmFyaWFibGUnXS5wYXR0ZXJuID0gLyg/IVxccylbXyRhLXpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqPVxccyooPzpmdW5jdGlvblxcYnwoPzpcXChbXigpXSpcXCkoPzpcXHMqOlxccypcXHcrKT98KD8hXFxzKVtfJGEtelxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKilcXHMqPT4pKS9pO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmZsb3dbJ3BhcmFtZXRlciddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2Zsb3cnLCAnb3BlcmF0b3InLCB7XG5cdFx0J2Zsb3ctcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx7XFx8fFxcfFxcfS8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKCFBcnJheS5pc0FycmF5KFByaXNtLmxhbmd1YWdlcy5mbG93LmtleXdvcmQpKSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmZsb3cua2V5d29yZCA9IFtQcmlzbS5sYW5ndWFnZXMuZmxvdy5rZXl3b3JkXTtcblx0fVxuXHRQcmlzbS5sYW5ndWFnZXMuZmxvdy5rZXl3b3JkLnVuc2hpZnQoXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteJF1cXGIpKD86Q2xhc3N8ZGVjbGFyZXxvcGFxdWV8dHlwZSlcXGIoPyFcXCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRdXFxCKVxcJCg/OkRpZmZ8RW51bXxFeGFjdHxLZXlzfE9iak1hcHxQcm9wZXJ0eVR5cGV8UmVjb3JkfFNoYXBlfFN1YnR5cGV8U3VwZXJ0eXBlfGF3YWl0KVxcYig/IVxcJCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0KTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmZvcnRyYW4gPSB7XG5cdCdxdW90ZWQtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC9bQk9aXShbJ1wiXSlbQS1GMC05XStcXDEvaSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKD86XFxiXFx3K18pPyhbJ1wiXSkoPzpcXDFcXDF8Jig/Olxcclxcbj98XFxuKSg/OlsgXFx0XSohLiooPzpcXHJcXG4/fFxcbil8KD8hWyBcXHRdKiEpKXwoPyFcXDEpLikqKD86XFwxfCYpLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb21tZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCYoPzpcXHJcXG4/fFxcbilcXHMqKSEuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8hLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYm9vbGVhbic6IC9cXC4oPzpGQUxTRXxUUlVFKVxcLig/Ol9cXHcrKT8vaSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VEXVsrLV0/XFxkKyk/KD86X1xcdyspPy9pLFxuXHQna2V5d29yZCc6IFtcblx0XHQvLyBUeXBlc1xuXHRcdC9cXGIoPzpDSEFSQUNURVJ8Q09NUExFWHxET1VCTEUgP1BSRUNJU0lPTnxJTlRFR0VSfExPR0lDQUx8UkVBTClcXGIvaSxcblx0XHQvLyBFTkQgc3RhdGVtZW50c1xuXHRcdC9cXGIoPzpFTkQgPyk/KD86QkxPQ0sgP0RBVEF8RE98RklMRXxGT1JBTEx8RlVOQ1RJT058SUZ8SU5URVJGQUNFfE1PRFVMRSg/ISBQUk9DRURVUkUpfFBST0dSQU18U0VMRUNUfFNVQlJPVVRJTkV8VFlQRXxXSEVSRSlcXGIvaSxcblx0XHQvLyBTdGF0ZW1lbnRzXG5cdFx0L1xcYig/OkFMTE9DQVRBQkxFfEFMTE9DQVRFfEJBQ0tTUEFDRXxDQUxMfENBU0V8Q0xPU0V8Q09NTU9OfENPTlRBSU5TfENPTlRJTlVFfENZQ0xFfERBVEF8REVBTExPQ0FURXxESU1FTlNJT058RE98RU5EfEVRVUlWQUxFTkNFfEVYSVR8RVhURVJOQUx8Rk9STUFUfEdPID9UT3xJTVBMSUNJVCg/OiBOT05FKT98SU5RVUlSRXxJTlRFTlR8SU5UUklOU0lDfE1PRFVMRSBQUk9DRURVUkV8TkFNRUxJU1R8TlVMTElGWXxPUEVOfE9QVElPTkFMfFBBUkFNRVRFUnxQT0lOVEVSfFBSSU5UfFBSSVZBVEV8UFVCTElDfFJFQUR8UkVUVVJOfFJFV0lORHxTQVZFfFNFTEVDVHxTVE9QfFRBUkdFVHxXSElMRXxXUklURSlcXGIvaSxcblx0XHQvLyBPdGhlcnNcblx0XHQvXFxiKD86QVNTSUdOTUVOVHxERUZBVUxUfEVMRU1FTlRBTHxFTFNFfEVMU0VJRnxFTFNFV0hFUkV8RU5UUll8SU58SU5DTFVERXxJTk9VVHxLSU5EfE5VTEx8T05MWXxPUEVSQVRPUnxPVVR8UFVSRXxSRUNVUlNJVkV8UkVTVUxUfFNFUVVFTkNFfFNUQVR8VEhFTnxVU0UpXFxiL2lcblx0XSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9cXCpcXCp8XFwvXFwvfD0+fFs9XFwvXT18Wzw+XT0/fDo6fFsrXFwtKj0lXXxcXC5bQS1aXStcXC4vaSxcblx0XHR7XG5cdFx0XHQvLyBVc2UgbG9va2JlaGluZCB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoICgvIC8pXG5cdFx0XHRwYXR0ZXJuOiAvKF58KD8hXFwoKS4pXFwvKD8hXFwpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvXFwoXFwvfFxcL1xcKXxbKCksOzomXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBodHRwczovL2ZyZWVtYXJrZXIuYXBhY2hlLm9yZy9kb2NzL2RndWlfdGVtcGxhdGVfZXhwLmh0bWxcblxuXHQvLyBGVEwgZXhwcmVzc2lvbiB3aXRoIDQgbGV2ZWxzIG9mIG5lc3Rpbmcgc3VwcG9ydGVkXG5cdHZhciBGVExfRVhQUiA9IC9bXjwoKVwiJ118XFwoKD86PGV4cHI+KSpcXCl8PCg/ISMtLSl8PCMtLSg/OlteLV18LSg/IS0+KSkqLS0+fFwiKD86W15cXFxcXCJdfFxcXFwuKSpcInwnKD86W15cXFxcJ118XFxcXC4pKicvLnNvdXJjZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHtcblx0XHRGVExfRVhQUiA9IEZUTF9FWFBSLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBGVExfRVhQUjsgfSk7XG5cdH1cblx0RlRMX0VYUFIgPSBGVExfRVhQUi5yZXBsYWNlKC88ZXhwcj4vZywgL1teXFxzXFxTXS8uc291cmNlKTtcblxuXHR2YXIgZnRsID0ge1xuXHRcdCdjb21tZW50JzogLzwjLS1bXFxzXFxTXSo/LS0+Lyxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyByYXcgc3RyaW5nXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJyKFwifCcpKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKlxcMS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXCJ8JykoPzooPyFcXDF8XFwkXFx7KVteXFxcXF18XFxcXC58XFwkXFx7KD86KD8hXFx9KSg/OjxleHByPikpKlxcfSkqXFwxLy5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEZUTF9FWFBSOyB9KSksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLygoPzpefFteXFxcXF0pKD86XFxcXFxcXFwpKilcXCRcXHsoPzooPyFcXH0pKD86PGV4cHI+KSkqXFx9Ly5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEZUTF9FWFBSOyB9KSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHJlc3Q6IG51bGxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFzKVxcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdidWlsdGluLWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteP10pXFw/XFxzKilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXHMqXFwoKS8sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwuXFwuWzwqIV0/fC0+fC0tfFxcK1xcK3wmJnxcXHxcXHx8XFw/ezEsMn18Wy0rKi8lIT08Pl09P3xcXGIoPzpndHxndGV8bHR8bHRlKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1ssOy46KClbXFxde31dL1xuXHR9O1xuXG5cdGZ0bC5zdHJpbmdbMV0uaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLnJlc3QgPSBmdGw7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmZ0bCA9IHtcblx0XHQnZnRsLWNvbW1lbnQnOiB7XG5cdFx0XHQvLyB0aGUgcGF0dGVybiBpcyBzaG9ydGVuZWQgdG8gYmUgbW9yZSBlZmZpY2llbnRcblx0XHRcdHBhdHRlcm46IC9ePCMtLVtcXHNcXFNdKi8sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQnZnRsLWRpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC9ePFtcXHNcXFNdKz4kLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXjxcXC8/KVsjQF1bYS16XVxcdyovaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148XFwvP3xcXC8/PiQvLFxuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdmdGwnLFxuXHRcdFx0XHRcdGluc2lkZTogZnRsXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdmdGwtaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFwkXFx7W1xcc1xcU10qXFx9JC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXHMqXFxTW1xcc1xcU10qLyxcblx0XHRcdFx0XHRhbGlhczogJ2Z0bCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBmdGxcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtbGF6eVxuXHRcdHZhciBwYXR0ZXJuID0gUmVnRXhwKC88Iy0tW1xcc1xcU10qPy0tPnw8XFwvP1sjQF1bYS16QS1aXSg/OjxleHByPikqPz58XFwkXFx7KD86PGV4cHI+KSo/XFx9Ly5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEZUTF9FWFBSOyB9KSwgJ2dpJyk7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2Z0bCcsIHBhdHRlcm4pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdmdGwnKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdhbWVtYWtlcmxhbmd1YWdlID0gUHJpc20ubGFuZ3VhZ2VzLmdtbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxlbnVtfGV4aXR8Zm9yfGdsb2JhbHZhcnxpZnxyZXBlYXR8cmV0dXJufHN3aXRjaHx1bnRpbHx2YXJ8d2hpbGUpXFxiLyxcblx0J251bWJlcic6IC8oPzpcXGIweFtcXGRhLWZdK3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KVt1bGZdezAsNH0vaSxcblx0J29wZXJhdG9yJzogLy0tfFxcK1xcK3xbLSslLz1dPT98IT18XFwqXFwqPz0/fDxbPD0+XT98Pls9Pl0/fCYmP3xcXF5cXF4/fFxcfFxcfD98fnxcXGIoPzphbmR8YXR8bm90fG9yfHdpdGh8eG9yKVxcYi8sXG5cdCdjb25zdGFudCc6IC9cXGIoPzpHTV9idWlsZF9kYXRlfEdNX3ZlcnNpb258YWN0aW9uXyg/OmNvbnRpbnVlfHJlc3RhcnR8cmV2ZXJzZXxzdG9wKXxhbGx8Z2FtZXNwZWVkXyg/OmZwc3xtaWNyb3NlY29uZHMpfGdsb2JhbHxsb2NhbHxub29uZXxvdGhlcnxwaXxwb2ludGVyXyg/OmludmFsaWR8bnVsbCl8c2VsZnx0aW1lem9uZV8oPzpsb2NhbHx1dGMpfHVuZGVmaW5lZHxldl8oPzpjcmVhdGV8ZGVzdHJveXxzdGVwfGFsYXJtfGtleWJvYXJkfG1vdXNlfGNvbGxpc2lvbnxvdGhlcnxkcmF3fGRyYXdfKD86YmVnaW58ZW5kfHBvc3R8cHJlKXxrZXlwcmVzc3xrZXlyZWxlYXNlfHRyaWdnZXJ8KD86bGVmdHxtaWRkbGV8bm98cmlnaHQpX2J1dHRvbnwoPzpsZWZ0fG1pZGRsZXxyaWdodClfcHJlc3N8KD86bGVmdHxtaWRkbGV8cmlnaHQpX3JlbGVhc2V8bW91c2VfKD86ZW50ZXJ8bGVhdmV8d2hlZWxfZG93bnx3aGVlbF91cCl8Z2xvYmFsXyg/OmxlZnR8bWlkZGxlfHJpZ2h0KV9idXR0b258Z2xvYmFsXyg/OmxlZnR8bWlkZGxlfHJpZ2h0KV9wcmVzc3xnbG9iYWxfKD86bGVmdHxtaWRkbGV8cmlnaHQpX3JlbGVhc2V8am95c3RpY2soPzoxfDIpXyg/OmJ1dHRvbjF8YnV0dG9uMnxidXR0b24zfGJ1dHRvbjR8YnV0dG9uNXxidXR0b242fGJ1dHRvbjd8YnV0dG9uOHxkb3dufGxlZnR8cmlnaHR8dXApfG91dHNpZGV8Ym91bmRhcnl8Z2FtZV9zdGFydHxnYW1lX2VuZHxyb29tX3N0YXJ0fHJvb21fZW5kfG5vX21vcmVfbGl2ZXN8YW5pbWF0aW9uX2VuZHxlbmRfb2ZfcGF0aHxub19tb3JlX2hlYWx0aHx1c2VyXFxkfGd1aXxndWlfYmVnaW58Z3VpX2VuZHxzdGVwXyg/OmJlZ2lufGVuZHxub3JtYWwpKXx2a18oPzphbHR8YW55a2V5fGJhY2tzcGFjZXxjb250cm9sfGRlbGV0ZXxkb3dufGVuZHxlbnRlcnxlc2NhcGV8aG9tZXxpbnNlcnR8bGVmdHxub2tleXxwYWdlZG93bnxwYWdldXB8cGF1c2V8cHJpbnRzY3JlZW58cmV0dXJufHJpZ2h0fHNoaWZ0fHNwYWNlfHRhYnx1cHxmXFxkfG51bXBhZFxcZHxhZGR8ZGVjaW1hbHxkaXZpZGV8bGFsdHxsY29udHJvbHxsc2hpZnR8bXVsdGlwbHl8cmFsdHxyY29udHJvbHxyc2hpZnR8c3VidHJhY3QpfGFjaGlldmVtZW50Xyg/OmZpbHRlcl8oPzphbGxfcGxheWVyc3xmYXZvcml0ZXNfb25seXxmcmllbmRzX29ubHkpfGZyaWVuZHNfaW5mb3xpbmZvfGxlYWRlcmJvYXJkX2luZm98b3VyX2luZm98cGljX2xvYWRlZHxzaG93Xyg/OmFjaGlldmVtZW50fGJhbmt8ZnJpZW5kX3BpY2tlcnxsZWFkZXJib2FyZHxwcm9maWxlfHB1cmNoYXNlX3Byb21wdHx1aSl8dHlwZV9jaGFsbGVuZ2V8dHlwZV9zY29yZV9jaGFsbGVuZ2UpfGFzc2V0Xyg/OmZvbnR8b2JqZWN0fHBhdGh8cm9vbXxzY3JpcHR8c2hhZGVyfHNvdW5kfHNwcml0ZXx0aWxlc3x0aW1lbGluZXx1bmtub3duKXxhdWRpb18oPzozZHxmYWxsb2ZmXyg/OmV4cG9uZW50X2Rpc3RhbmNlfGV4cG9uZW50X2Rpc3RhbmNlX2NsYW1wZWR8aW52ZXJzZV9kaXN0YW5jZXxpbnZlcnNlX2Rpc3RhbmNlX2NsYW1wZWR8bGluZWFyX2Rpc3RhbmNlfGxpbmVhcl9kaXN0YW5jZV9jbGFtcGVkfG5vbmUpfG1vbm98bmV3X3N5c3RlbXxvbGRfc3lzdGVtfHN0ZXJlbyl8Ym1fKD86YWRkfGNvbXBsZXh8ZGVzdF9hbHBoYXxkZXN0X2NvbG9yfGRlc3RfY29sb3VyfGludl9kZXN0X2FscGhhfGludl9kZXN0X2NvbG9yfGludl9kZXN0X2NvbG91cnxpbnZfc3JjX2FscGhhfGludl9zcmNfY29sb3J8aW52X3NyY19jb2xvdXJ8bWF4fG5vcm1hbHxvbmV8c3JjX2FscGhhfHNyY19hbHBoYV9zYXR8c3JjX2NvbG9yfHNyY19jb2xvdXJ8c3VidHJhY3R8emVybyl8YnJvd3Nlcl8oPzpjaHJvbWV8ZmlyZWZveHxpZXxpZV9tb2JpbGV8bm90X2FfYnJvd3NlcnxvcGVyYXxzYWZhcml8c2FmYXJpX21vYmlsZXx0aXplbnx1bmtub3dufHdpbmRvd3Nfc3RvcmUpfGJ1ZmZlcl8oPzpib29sfGYxNnxmMzJ8ZjY0fGZhc3R8Zml4ZWR8Z2VuZXJhbGVycm9yfGdyb3d8aW52YWxpZHR5cGV8bmV0d29ya3xvdXRvZmJvdW5kc3xvdXRvZnNwYWNlfHMxNnxzMzJ8czh8c2Vla19lbmR8c2Vla19yZWxhdGl2ZXxzZWVrX3N0YXJ0fHN0cmluZ3x0ZXh0fHUxNnx1MzJ8dTY0fHU4fHZidWZmZXJ8d3JhcCl8Y18oPzphcXVhfGJsYWNrfGJsdWV8ZGtncmF5fGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1lfGx0Z3JheXxtYXJvb258bmF2eXxvbGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3cpfGNtcGZ1bmNfKD86YWx3YXlzfGVxdWFsfGdyZWF0ZXJ8Z3JlYXRlcmVxdWFsfGxlc3N8bGVzc2VxdWFsfG5ldmVyfG5vdGVxdWFsKXxjcl8oPzphcHBzdGFydHxhcnJvd3xiZWFtfGNyb3NzfGRlZmF1bHR8ZHJhZ3xoYW5kcG9pbnR8aG91cmdsYXNzfG5vbmV8c2l6ZV9hbGx8c2l6ZV9uZXN3fHNpemVfbnN8c2l6ZV9ud3NlfHNpemVfd2V8dXBhcnJvdyl8Y3VsbF8oPzpjbG9ja3dpc2V8Y291bnRlcmNsb2Nrd2lzZXxub2N1bGxpbmcpfGRldmljZV8oPzplbXVsYXRvcnx0YWJsZXQpfGRldmljZV9pb3NfKD86aXBhZHxpcGFkX3JldGluYXxpcGhvbmV8aXBob25lNXxpcGhvbmU2fGlwaG9uZTZwbHVzfGlwaG9uZV9yZXRpbmF8dW5rbm93bil8ZGlzcGxheV8oPzpsYW5kc2NhcGV8bGFuZHNjYXBlX2ZsaXBwZWR8cG9ydHJhaXR8cG9ydHJhaXRfZmxpcHBlZCl8ZGxsXyg/OmNkZWNsfGNkZWx8c3RkY2FsbCl8ZHNfdHlwZV8oPzpncmlkfGxpc3R8bWFwfHByaW9yaXR5fHF1ZXVlfHN0YWNrKXxlZl8oPzpjbG91ZHxlbGxpcHNlfGV4cGxvc2lvbnxmaXJld29ya3xmbGFyZXxyYWlufHJpbmd8c21va2V8c21va2V1cHxzbm93fHNwYXJrfHN0YXIpfGZhXyg/OmFyY2hpdmV8Ym90dG9tfGNlbnRlcnxkaXJlY3Rvcnl8aGlkZGVufGxlZnR8bWlkZGxlfHJlYWRvbmx5fHJpZ2h0fHN5c2ZpbGV8dG9wfHZvbHVtZWlkKXxmYl9sb2dpbl8oPzpkZWZhdWx0fGZhbGxiYWNrX3RvX3dlYnZpZXd8Zm9yY2luZ19zYWZhcml8Zm9yY2luZ193ZWJ2aWV3fG5vX2ZhbGxiYWNrX3RvX3dlYnZpZXd8dXNlX3N5c3RlbV9hY2NvdW50KXxpYXBfKD86YXZhaWxhYmxlfGNhbmNlbGVkfGV2X2NvbnN1bWV8ZXZfcHJvZHVjdHxldl9wdXJjaGFzZXxldl9yZXN0b3JlfGV2X3N0b3JlbG9hZHxmYWlsZWR8cHVyY2hhc2VkfHJlZnVuZGVkfHN0YXR1c19hdmFpbGFibGV8c3RhdHVzX2xvYWRpbmd8c3RhdHVzX3Byb2Nlc3Npbmd8c3RhdHVzX3Jlc3RvcmluZ3xzdGF0dXNfdW5hdmFpbGFibGV8c3RhdHVzX3VuaW5pdGlhbGlzZWR8c3RvcmVsb2FkX2ZhaWxlZHxzdG9yZWxvYWRfb2t8dW5hdmFpbGFibGUpfGxlYWRlcmJvYXJkX3R5cGVfKD86bnVtYmVyfHRpbWVfbWluc19zZWNzKXxsaWdodHR5cGVfKD86ZGlyfHBvaW50KXxtYXRyaXhfKD86cHJvamVjdGlvbnx2aWV3fHdvcmxkKXxtYl8oPzphbnl8bGVmdHxtaWRkbGV8bm9uZXxyaWdodCl8bmV0d29ya18oPzpjb25maWdfKD86Y29ubmVjdF90aW1lb3V0fGRpc2FibGVfcmVsaWFibGVfdWRwfGVuYWJsZV9yZWxpYWJsZV91ZHB8dXNlX25vbl9ibG9ja2luZ19zb2NrZXQpfHNvY2tldF8oPzpibHVldG9vdGh8dGNwfHVkcCl8dHlwZV8oPzpjb25uZWN0fGRhdGF8ZGlzY29ubmVjdHxub25fYmxvY2tpbmdfY29ubmVjdCkpfG9mX2NoYWxsZW5nZV8oPzpsb3NlfHRpZXx3aW4pfG9zXyg/OmFuZHJvaWR8aW9zfGxpbnV4fG1hY29zeHxwczN8cHM0fHBzdml0YXx1bmtub3dufHV3cHx3aW4zMnx3aW44bmF0aXZlfHdpbmRvd3N8d2lucGhvbmV8eGJveG9uZSl8cGh5X2RlYnVnX3JlbmRlcl8oPzphYWJifGNvbGxpc2lvbl9wYWlyc3xjb21zfGNvcmVfc2hhcGVzfGpvaW50c3xvYmJ8c2hhcGVzKXxwaHlfam9pbnRfKD86YW5jaG9yXzFfeHxhbmNob3JfMV95fGFuY2hvcl8yX3h8YW5jaG9yXzJfeXxhbmdsZXxhbmdsZV9saW1pdHN8ZGFtcGluZ19yYXRpb3xmcmVxdWVuY3l8bGVuZ3RoXzF8bGVuZ3RoXzJ8bG93ZXJfYW5nbGVfbGltaXR8bWF4X2ZvcmNlfG1heF9sZW5ndGh8bWF4X21vdG9yX2ZvcmNlfG1heF9tb3Rvcl90b3JxdWV8bWF4X3RvcnF1ZXxtb3Rvcl9mb3JjZXxtb3Rvcl9zcGVlZHxtb3Rvcl90b3JxdWV8cmVhY3Rpb25fZm9yY2VfeHxyZWFjdGlvbl9mb3JjZV95fHJlYWN0aW9uX3RvcnF1ZXxzcGVlZHx0cmFuc2xhdGlvbnx1cHBlcl9hbmdsZV9saW1pdCl8cGh5X3BhcnRpY2xlX2RhdGFfZmxhZ18oPzpjYXRlZ29yeXxjb2xvcnxjb2xvdXJ8cG9zaXRpb258dHlwZWZsYWdzfHZlbG9jaXR5KXxwaHlfcGFydGljbGVfZmxhZ18oPzpjb2xvcm1peGluZ3xjb2xvdXJtaXhpbmd8ZWxhc3RpY3xwb3dkZXJ8c3ByaW5nfHRlbnNpbGV8dmlzY291c3x3YWxsfHdhdGVyfHpvbWJpZSl8cGh5X3BhcnRpY2xlX2dyb3VwX2ZsYWdfKD86cmlnaWR8c29saWQpfHByXyg/OmxpbmVsaXN0fGxpbmVzdHJpcHxwb2ludGxpc3R8dHJpYW5nbGVmYW58dHJpYW5nbGVsaXN0fHRyaWFuZ2xlc3RyaXApfHBzXyg/OmRpc3RyfHNoYXBlKV8oPzpkaWFtb25kfGVsbGlwc2V8Z2F1c3NpYW58aW52Z2F1c3NpYW58bGluZXxsaW5lYXJ8cmVjdGFuZ2xlKXxwdF9zaGFwZV8oPzpjaXJjbGV8Y2xvdWR8ZGlza3xleHBsb3Npb258ZmxhcmV8bGluZXxwaXhlbHxyaW5nfHNtb2tlfHNub3d8c3Bhcmt8c3BoZXJlfHNxdWFyZXxzdGFyKXx0eV8oPzpyZWFsfHN0cmluZyl8Z3BfKD86ZmFjZVxcZHxheGlzbGh8YXhpc2x2fGF4aXNyaHxheGlzcnZ8cGFkZHxwYWRsfHBhZHJ8cGFkdXxzZWxlY3R8c2hvdWxkZXJsfHNob3VsZGVybGJ8c2hvdWxkZXJyfHNob3VsZGVycmJ8c3RhcnR8c3RpY2tsfHN0aWNrcil8bGJfZGlzcF8oPzpub25lfG51bWVyaWN8dGltZV9tc3x0aW1lX3NlYyl8bGJfc29ydF8oPzphc2NlbmRpbmd8ZGVzY2VuZGluZ3xub25lKXxvdl8oPzphY2hpZXZlbWVudHN8Y29tbXVuaXR5fGZyaWVuZHN8Z2FtZWdyb3VwfHBsYXllcnN8c2V0dGluZ3MpfHVnY18oPzpmaWxldHlwZV8oPzpjb21tdW5pdHl8bWljcm90cmFucyl8bGlzdF8oPzpGYXZvcml0ZWR8Rm9sbG93ZWR8UHVibGlzaGVkfFN1YnNjcmliZWR8VXNlZE9yUGxheWVkfFZvdGVkRG93bnxWb3RlZE9ufFZvdGVkVXB8V2lsbFZvdGVMYXRlcil8bWF0Y2hfKD86QWxsR3VpZGVzfEFydHdvcmt8Q29sbGVjdGlvbnN8Q29udHJvbGxlckJpbmRpbmdzfEludGVncmF0ZWRHdWlkZXN8SXRlbXN8SXRlbXNfTXR4fEl0ZW1zX1JlYWR5VG9Vc2V8U2NyZWVuc2hvdHN8VXNhYmxlSW5HYW1lfFZpZGVvc3xXZWJHdWlkZXMpfHF1ZXJ5Xyg/OkFjY2VwdGVkRm9yR2FtZVJhbmtlZEJ5QWNjZXB0YW5jZURhdGV8Q3JlYXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlfEZhdm9yaXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlfE5vdFlldFJhdGVkKXxxdWVyeV9SYW5rZWRCeSg/Ok51bVRpbWVzUmVwb3J0ZWR8UHVibGljYXRpb25EYXRlfFRleHRTZWFyY2h8VG90YWxWb3Rlc0FzY3xUcmVuZHxWb3RlfFZvdGVzVXApfHJlc3VsdF9zdWNjZXNzfHNvcnRvcmRlcl9DcmVhdGlvbk9yZGVyKD86QXNjfERlc2MpfHNvcnRvcmRlcl8oPzpGb3JNb2RlcmF0aW9ufExhc3RVcGRhdGVkRGVzY3xTdWJzY3JpcHRpb25EYXRlRGVzY3xUaXRsZUFzY3xWb3RlU2NvcmVEZXNjKXx2aXNpYmlsaXR5Xyg/OmZyaWVuZHNfb25seXxwcml2YXRlfHB1YmxpYykpfHZlcnRleF91c2FnZV8oPzpiaW5vcm1hbHxibGVuZGluZGljZXN8YmxlbmR3ZWlnaHR8Y29sb3J8Y29sb3VyfGRlcHRofGZvZ3xub3JtYWx8cG9zaXRpb258cHNpemV8c2FtcGxlfHRhbmdlbnR8dGV4Y29vcmR8dGV4dGNvb3JkKXx2ZXJ0ZXhfdHlwZV8oPzpmbG9hdFxcZHxjb2xvcnxjb2xvdXJ8dWJ5dGU0KXxpbnB1dF90eXBlfGxheWVyZWxlbWVudHR5cGVfKD86YmFja2dyb3VuZHxpbnN0YW5jZXxvbGR0aWxlbWFwfHBhcnRpY2xlc3lzdGVtfHNwcml0ZXx0aWxlfHRpbGVtYXB8dW5kZWZpbmVkKXxzZV8oPzpjaG9ydXN8Y29tcHJlc3NvcnxlY2hvfGVxdWFsaXplcnxmbGFuZ2VyfGdhcmdsZXxub25lfHJldmVyYil8dGV4dF90eXBlfHRpbGVfKD86ZmxpcHxpbmRleF9tYXNrfG1pcnJvcnxyb3RhdGUpfCg/Om9ianxybXxzY3J8c3ByKVxcdyspXFxiLyxcblx0J3ZhcmlhYmxlJzogL1xcYig/OmFsYXJtfGFwcGxpY2F0aW9uX3N1cmZhY2V8YXN5bmNfbG9hZHxiYWNrZ3JvdW5kXyg/OmFscGhhfGJsZW5kfGNvbG9yfGNvbG91cnxmb3JlZ3JvdW5kfGhlaWdodHxoc3BlZWR8aHRpbGVkfGluZGV4fHNob3djb2xvcnxzaG93Y29sb3VyfHZpc2libGV8dnNwZWVkfHZ0aWxlZHx3aWR0aHx4fHhzY2FsZXx5fHlzY2FsZSl8YmJveF8oPzpib3R0b218bGVmdHxyaWdodHx0b3ApfGJyb3dzZXJfKD86aGVpZ2h0fHdpZHRoKXxjYXB0aW9uXyg/OmhlYWx0aHxsaXZlc3xzY29yZSl8Y3VycmVudF8oPzpkYXl8aG91cnxtaW51dGV8bW9udGh8c2Vjb25kfHRpbWV8d2Vla2RheXx5ZWFyKXxjdXJzb3Jfc3ByaXRlfGRlYnVnX21vZGV8ZGVsdGFfdGltZXxkaXJlY3Rpb258ZGlzcGxheV9hYXxlcnJvcl8oPzpsYXN0fG9jY3VycmVkKXxldmVudF8oPzphY3Rpb258bnVtYmVyfG9iamVjdHx0eXBlKXxmcHN8ZnBzX3JlYWx8ZnJpY3Rpb258Z2FtZV8oPzpkaXNwbGF5fHByb2plY3R8c2F2ZSlfKD86aWR8bmFtZSl8Z2FtZW1ha2VyXyg/OnByb3xyZWdpc3RlcmVkfHZlcnNpb24pfGdyYXZpdHl8Z3Jhdml0eV9kaXJlY3Rpb258KD86aHx2KXNwZWVkfGhlYWx0aHxpYXBfZGF0YXxpZHxpbWFnZV8oPzphbHBoYXxhbmdsZXxibGVuZHxkZXB0aHxpbmRleHxudW1iZXJ8c3BlZWR8eHNjYWxlfHlzY2FsZSl8aW5zdGFuY2VfKD86Y291bnR8aWQpfGtleWJvYXJkXyg/OmtleXxsYXN0Y2hhcnxsYXN0a2V5fHN0cmluZyl8bGF5ZXJ8bGl2ZXN8bWFza19pbmRleHxtb3VzZV8oPzpidXR0b258bGFzdGJ1dHRvbnx4fHkpfG9iamVjdF9pbmRleHxvc18oPzpicm93c2VyfGRldmljZXx0eXBlfHZlcnNpb24pfHBhdGhfKD86ZW5kYWN0aW9ufGluZGV4fG9yaWVudGF0aW9ufHBvc2l0aW9ufHBvc2l0aW9ucHJldmlvdXN8c2NhbGV8c3BlZWQpfHBlcnNpc3RlbnR8cGh5Xyg/OnJvdGF0aW9ufCg/OmNvbF9ub3JtYWx8Y29sbGlzaW9ufGNvbXxsaW5lYXJfdmVsb2NpdHl8cG9zaXRpb258c3BlZWQpXyg/Onh8eSl8YW5ndWxhcl8oPzpkYW1waW5nfHZlbG9jaXR5KXxwb3NpdGlvbl8oPzp4fHkpcHJldmlvdXN8c3BlZWR8bGluZWFyX2RhbXBpbmd8YnVsbGV0fGZpeGVkX3JvdGF0aW9ufGFjdGl2ZXxtYXNzfGluZXJ0aWF8ZHluYW1pY3xraW5lbWF0aWN8c2xlZXBpbmd8Y29sbGlzaW9uX3BvaW50cyl8cG9pbnRlcl8oPzppbnZhbGlkfG51bGwpfHJvb218cm9vbV8oPzpjYXB0aW9ufGZpcnN0fGhlaWdodHxsYXN0fHBlcnNpc3RlbnR8c3BlZWR8d2lkdGgpfHNjb3JlfHNlY3VyZV9tb2RlfHNob3dfKD86aGVhbHRofGxpdmVzfHNjb3JlKXxzb2xpZHxzcGVlZHxzcHJpdGVfKD86aGVpZ2h0fGluZGV4fHdpZHRofHhvZmZzZXR8eW9mZnNldCl8dGVtcF9kaXJlY3Rvcnl8dGltZWxpbmVfKD86aW5kZXh8bG9vcHxwb3NpdGlvbnxydW5uaW5nfHNwZWVkKXx0cmFuc2l0aW9uXyg/OmNvbG9yfGtpbmR8c3RlcHMpfHVuZGVmaW5lZHx2aWV3Xyg/OmFuZ2xlfGN1cnJlbnR8ZW5hYmxlZHwoPzpofHYpKD86Ym9yZGVyfHNwZWVkKXwoPzpofHd8eHx5KXBvcnR8KD86aHx3fHh8eSl2aWV3fG9iamVjdHxzdXJmYWNlX2lkfHZpc2libGUpfHZpc2libGV8d2ViZ2xfZW5hYmxlZHx3b3JraW5nX2RpcmVjdG9yeXwoPzp4fHkpKD86cHJldmlvdXN8c3RhcnQpfHh8eXxhcmd1bWVudCg/Ol9yZWxpdGl2ZXxfY291bnR8XFxkKXxhcmd1bWVudHxnbG9iYWx8bG9jYWx8b3RoZXJ8c2VsZilcXGIvXG59KTtcblxuLy8gaHR0cHM6Ly93d3cuZ2FwLXN5c3RlbS5vcmcvTWFudWFscy9kb2MvcmVmL2NoYXA0Lmh0bWxcbi8vIGh0dHBzOi8vd3d3LmdhcC1zeXN0ZW0ub3JnL01hbnVhbHMvZG9jL3JlZi9jaGFwMjcuaHRtbFxuXG5QcmlzbS5sYW5ndWFnZXMuZ2FwID0ge1xuXHQnc2hlbGwnOiB7XG5cdFx0cGF0dGVybjogL15nYXA+W1xcc1xcU10qPyg/PV5nYXA+fCQoPyFbXFxzXFxTXSkpL20sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2dhcCc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oZ2FwPikuKyg/Oig/Olxccig/OlxcbnwoPyFcXG4pKXxcXG4pPi4qKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15nYXA+L1xuXHRcdH1cblx0fSxcblxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcJ1wiXSkoPzonKD86W15cXHJcXG5cXFxcJ118XFxcXC4pezEsMTB9J3xcIig/OlteXFxyXFxuXFxcXFwiXXxcXFxcLikqXCIoPyFcIil8XCJcIlwiW1xcc1xcU10qP1wiXCJcIikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NvbnRpbnVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXSk+Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86QXNzZXJ0fEluZm98SXNCb3VuZHxRVUlUfFRyeU5leHRNZXRob2R8VW5iaW5kfGFuZHxhdG9taWN8YnJlYWt8Y29udGludWV8ZG98ZWxpZnxlbHNlfGVuZHxmaXxmb3J8ZnVuY3Rpb258aWZ8aW58bG9jYWx8bW9kfG5vdHxvZHxvcnxxdWl0fHJlYWRvbmx5fHJlYWR3cml0ZXxyZWN8cmVwZWF0fHJldHVybnx0aGVufHVudGlsfHdoaWxlKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuXXxcXC5cXC4pKD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspPyg/Ol9bYS16XT8pPyg/PSR8W15cXHcuXXxcXC5cXC4pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2NvbnRpbnVhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKFtcXHJcXG5dKT4vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J29wZXJhdG9yJzogLy0+fFstKyovXn49IV18PD58Wzw+XT0/fDo9fFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClbXFxde30sOy46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nYXAuc2hlbGwuaW5zaWRlLmdhcC5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZ2FwO1xuXG5QcmlzbS5sYW5ndWFnZXMuZ2NvZGUgPSB7XG5cdCdjb21tZW50JzogLzsuKnxcXEJcXCguKj9cXClcXEIvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8W15cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiW0dNXVxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQncHJvcGVydHknOiAvXFxiW0EtWl0vLFxuXHQnY2hlY2tzdW0nOiB7XG5cdFx0cGF0dGVybjogLyhcXCopXFxkKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0Ly8gVDA6MDowXG5cdCdwdW5jdHVhdGlvbic6IC9bOipdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdkc2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9APyg/OihcInwnKSg/Oig/IVxcMSlbXlxcblxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxKD8hXCJ8Jyl8XCJcIlwiKD86W15cXFxcXXxcXFxcW1xcc1xcU10pKj9cIlwiXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0Ly8gY2xhc3NfbmFtZSBGb28sIGV4dGVuZHMgQmFyLCBjbGFzcyBJbm5lckNsYXNzXG5cdFx0Ly8gZXhwb3J0KGludCkgdmFyIGJheiwgZXhwb3J0KGludCwgMCkgdmFyIGlcblx0XHQvLyBhcyBOb2RlXG5cdFx0Ly8gY29uc3QgRk9POiBpbnQgPSA5LCB2YXIgYmFyOiBib29sID0gdHJ1ZVxuXHRcdC8vIGZ1bmMgYWRkKHJlZmVyZW5jZTogSXRlbSwgYW1vdW50OiBpbnQpIC0+IEl0ZW06XG5cdFx0cGF0dGVybjogLyheKD86Y2xhc3N8Y2xhc3NfbmFtZXxleHRlbmRzKVsgXFx0XSt8XmV4cG9ydFxcKFsgXFx0XSp8XFxiYXNbIFxcdF0rfCg/OlxcYig/OmNvbnN0fHZhcilbIFxcdF18WywoXSlbIFxcdF0qXFx3K1sgXFx0XSo6WyBcXHRdKnwtPlsgXFx0XSopW2EtekEtWl9dXFx3Ki9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGFzc2VydHxicmVha3xicmVha3BvaW50fGNsYXNzfGNsYXNzX25hbWV8Y29uc3R8Y29udGludWV8ZWxpZnxlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8Zm9yfGZ1bmN8aWZ8aW58aXN8bWFzdGVyfG1hc3RlcnN5bmN8bWF0Y2h8bm90fG51bGx8b25yZWFkeXxvcnxwYXNzfHByZWxvYWR8cHVwcGV0fHB1cHBldHN5bmN8cmVtb3RlfHJlbW90ZXN5bmN8cmV0dXJufHNlbGZ8c2V0Z2V0fHNpZ25hbHxzdGF0aWN8dG9vbHx2YXJ8d2hpbGV8eWllbGQpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1bIFxcdF0qXFwoKS9pLFxuXHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cdCdudW1iZXInOiBbXG5cdFx0L1xcYjBiWzAxX10rXFxifFxcYjB4W1xcZGEtZkEtRl9dK1xcYnwoPzpcXGJcXGRbXFxkX10qKD86XFwuW1xcZF9dKik/fFxcQlxcLltcXGRfXSspKD86ZVsrLV0/W1xcZF9dKyk/XFxiLyxcblx0XHQvXFxiKD86SU5GfE5BTnxQSXxUQVUpXFxiL1xuXHRdLFxuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aX1xcZF0qXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvLT58Oj18JiZ8XFx8XFx8fDw8fD4+fFstKyovJSZ8ITw+PV09P3xbfl5dLyxcblx0J3B1bmN0dWF0aW9uJzogL1suOiw7KClbXFxde31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdlZGNvbSA9IHtcblx0J2xpbmUtdmFsdWUnOiB7XG5cdFx0Ly8gUHJlY2VkZWQgYnkgbGV2ZWwsIG9wdGlvbmFsIHBvaW50ZXIsIGFuZCB0YWdcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFxkKyArKD86QFxcd1tcXHchXCIkJSYnKCkqKyxcXC0uLzo7PD0+P1tcXFxcXFxdXmB7fH1+XFx4ODAtXFx4ZmUgI10qQCArKT9cXHcrICkuKy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncG9pbnRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogL15AXFx3W1xcdyFcIiQlJicoKSorLFxcLS4vOjs8PT4/W1xcXFxcXF1eYHt8fX5cXHg4MC1cXHhmZSAjXSpAJC8sXG5cdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQncmVjb3JkJzoge1xuXHRcdC8vIFByZWNlZGVkIGJ5IGxldmVsIGFuZCBvcHRpb25hbCBwb2ludGVyXG5cdFx0cGF0dGVybjogLyheW1xcdCBdKlxcZCsgKyg/OkBcXHdbXFx3IVwiJCUmJygpKissXFwtLi86Ozw9Pj9bXFxcXFxcXV5ge3x9flxceDgwLVxceGZlICNdKkAgKyk/KVxcdysvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndGFnJ1xuXHR9LFxuXHQnbGV2ZWwnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKilcXGQrL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J3BvaW50ZXInOiB7XG5cdFx0cGF0dGVybjogL0BcXHdbXFx3IVwiJCUmJygpKissXFwtLi86Ozw9Pj9bXFxcXFxcXV5ge3x9flxceDgwLVxceGZlICNdKkAvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nZXR0ZXh0ID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvIyAuKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3RyYW5zbGF0b3ItY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jXFwuLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdleHRyYWN0ZWQtY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jOi4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncmVmZXJlbmNlLWNvbW1lbnQnXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvIywuKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ZsYWctY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jXFx8LiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcmV2aW91c2x5LXVudHJhbnNsYXRlZC1jb21tZW50J1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXm1zZyg/OmN0eHR8aWR8aWRfcGx1cmFsfHN0cilcXGIvbSxcblx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBvID0gUHJpc20ubGFuZ3VhZ2VzLmdldHRleHQ7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgdGFibGVSb3cgPSAvKD86XFxyP1xcbnxcXHIpWyBcXHRdKlxcfC4rXFx8KD86KD8hXFx8KS4pKi8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5naGVya2luID0ge1xuXHRcdCdweXN0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXCJcIlwifCcnJylbXFxzXFxTXSs/XFwxLyxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3RhZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopQFxcUyovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmZWF0dXJlJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVsgXFx0XSopKD86QWJpbGl0eXxBaG95IG1hdGV5IXxBcndlZGR8QXNwZWt0fEJlc2lnaGVpZCBCZWhvZWZ0ZXxCdXNpbmVzcyBOZWVkfENhcmFjdGVyaXN0aWNhfENhcmFjdGVyXHUwMEVEc3RpY2F8RWdlbnNrYWJ8RWdlbnNrYXB8RWlnaW5sZWlraXxGZWF0dXJlfEZcdTAxMkJcdTAxMERhfEZpdHVyfEZvbmN0aW9ubmFsaXRcdTAwRTl8Rm9ua3N5b25hbGl0ZXxGdW5jaW9uYWxpZGFkZXxGdW5jaW9uYWxpdGF0fEZ1bmN0aW9uYWxpdGF0ZXxGdW5jXHUwMTYzaW9uYWxpdGF0ZXxGdW5jXHUwMjFCaW9uYWxpdGF0ZXxGdW5jdGlvbmFsaXRlaXR8RnVuZ3NpfEZ1bmtjaWF8RnVua2NpamF8RnVua2Npb25hbGl0XHUwMTAxdGV8RnVua2Npb25hbG5vc3R8RnVua2NqYXxGdW5rc2llfEZ1bmt0aW9uYWxpdFx1MDBFNHR8RnVua3Rpb25hbGl0XHUwMEU5aXR8RnVuemlvbmFsaXRcdTAwRTB8SHdhZXR8SHdcdTAwRTZ0fEplbGxlbXpcdTAxNTF8S2FyYWt0ZXJpc3Rpa3xMYXN0bm9zdHxNYWt8TW9ndWNub3N0fGxhSHxNb2d1XHUwMTA3bm9zdHxNb3pub3N0aXxNb1x1MDE3RW5vc3RpfE9IIEhBSXxPbWFkdXN8T21pbmFpc3V1c3xPc29iaW5hfFx1MDBENnplbGxpa3xQb3RyemViYSBiaXpuZXNvd2F8cGVyYm9naHxwb1Fib2doIG1hbGphJ3xQb1x1MDE3RWFkYXZla3xQb1x1MDE3RWlhZGF2a2F8UHJldHR5IG11Y2h8UWFwfFF1J21lSCAndXR8U2F2eWJcdTAxMTd8VFx1MDBFRG5oIG5cdTAxMDNuZ3xUcmFqdG98VmVybW9cdTAwRUJ8Vmxhc3Rub3NcdTAxNjV8V1x1MDE0MmFcdTAxNUJjaXdvXHUwMTVCXHUwMTA3fFpuYVx1MDEwRGlsbm9zdHxcdTAzOTRcdTAzQzVcdTAzQkRcdTAzQjFcdTAzQzRcdTAzQ0NcdTAzQzRcdTAzQjdcdTAzQzRcdTAzQjF8XHUwMzlCXHUwM0I1XHUwM0I5XHUwM0M0XHUwM0JGXHUwM0M1XHUwM0MxXHUwM0IzXHUwM0FGXHUwM0IxfFx1MDQxQ1x1MDQzRVx1MDQzM1x1MDQ0M1x1MDQ1Qlx1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0MnxcdTA0MUNcdTA0RTlcdTA0M0NcdTA0M0FcdTA0MzhcdTA0M0RcdTA0M0JcdTA0MzVcdTA0M0F8XHUwNDFFXHUwNDQxXHUwNDNFXHUwNDMxXHUwNDM4XHUwNDNEXHUwNDMwfFx1MDQyMVx1MDQzMlx1MDQzRVx1MDQzOVx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQzRXxcdTA0QUVcdTA0MzdcdTA0MzVcdTA0M0RcdTA0NDdcdTA0RDlcdTA0M0JcdTA0MzVcdTA0M0FcdTA0M0JcdTA0MzVcdTA0M0JcdTA0MzVcdTA0M0F8XHUwNDI0XHUwNDQzXHUwNDNEXHUwNDNBXHUwNDQ2XHUwNDM4XHUwNDNFXHUwNDNEXHUwNDMwXHUwNDNCfFx1MDQyNFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQzRVx1MDQzRFx1MDQzMFx1MDQzQlx1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0MnxcdTA0MjRcdTA0NDNcdTA0M0RcdTA0M0FcdTA0NDZcdTA0MzhcdTA0NEZ8XHUwNDI0XHUwNDQzXHUwNDNEXHUwNDNBXHUwNDQ2XHUwNDU2XHUwNDNFXHUwNDNEXHUwNDMwXHUwNDNCfFx1MDVFQVx1MDVEQlx1MDVENVx1MDVFMFx1MDVENHxcdTA2MkVcdTA2MjdcdTA2MzVcdTA2NEFcdTA2Mjl8XHUwNjJFXHUwNjM1XHUwNjQ4XHUwNjM1XHUwNkNDXHUwNjJBfFx1MDYzNVx1MDY0NFx1MDYyN1x1MDYyRFx1MDZDQ1x1MDYyQXxcdTA2QTlcdTA2MjdcdTA2MzFcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MzEgXHUwNkE5XHUwNkNDIFx1MDYzNlx1MDYzMVx1MDY0OFx1MDYzMVx1MDYyQXxcdTA2NDhcdTA2NTBcdTA2Q0NcdTA2OThcdTA2QUZcdTA2Q0N8XHUwOTMwXHUwOTQyXHUwOTJBIFx1MDkzMlx1MDk0N1x1MDkxNnxcdTBBMTZcdTBBM0VcdTBBMzhcdTBBNDBcdTBBMDVcdTBBMjR8XHUwQTI4XHUwQTE1XHUwQTM2IFx1MEEyOFx1MEE0MVx1MEEzOVx1MEEzRVx1MEEzMHxcdTBBMkVcdTBBNDFcdTBBMzlcdTBBM0VcdTBBMDJcdTBBMjZcdTBBMzBcdTBBM0V8XHUwQzE3XHUwQzQxXHUwQzIzXHUwQzJFXHUwQzQxfFx1MENCOVx1MENDNlx1MEM5QVx1MENDRFx1MEM5QVx1MENCM3xcdTBFMDRcdTBFMjdcdTBFMzJcdTBFMjFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDdcdTBFMDFcdTBFMzJcdTBFMjNcdTBFMTdcdTBFMzJcdTBFMDdcdTBFMThcdTBFMzhcdTBFMjNcdTBFMDFcdTBFMzRcdTBFMDh8XHUwRTA0XHUwRTI3XHUwRTMyXHUwRTIxXHUwRTJBXHUwRTMyXHUwRTIxXHUwRTMyXHUwRTIzXHUwRTE2fFx1MEU0Mlx1MEUwNFx1MEUyM1x1MEUwN1x1MEUyQlx1MEUyNVx1MEUzMVx1MEUwMXxcdUFFMzBcdUIyQTV8XHUzMEQ1XHUzMEEzXHUzMEZDXHUzMEMxXHUzMEUzfFx1NTI5Rlx1ODBGRHxcdTZBNUZcdTgwRkQpOig/OlteOlxcclxcbl0rKD86XFxyP1xcbnxcXHJ8JCkpKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbXBvcnRhbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg6KVteXFxyXFxuXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiAvW146XFxyXFxuXSs6L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3NjZW5hcmlvJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzpBYnN0cmFjdCBTY2VuYXJpb3xBYnN0cmFrdCBTY2VuYXJpb3xBY2h0ZXJncm9uZHxBZXJ8XHUwMEM2cnxBZ3Rlcmdyb25kfEFsbCB5J2FsbHxBbnRlY2VkZW50ZXN8QW50ZWNlZGVudHN8QXRidXJcdTAwRjBhclx1MDBFMXN8QXRidXJcdTAwRjBhclx1MDBFMXNpcnxBd3d3LCBsb29rIG1hdGV8QjR8QmFja2dyb3VuZHxCYWdncnVuZHxCYWtncnVuZHxCYWtncnVubnxCYWtncnVubnVyfEJlaXNwaWVsZXxCZWlzcGlsbGVyfEJcdTFFRDFpIGNcdTFFQTNuaHxDZWZuZGlyfENlbmFyaW98Q2VuXHUwMEUxcmlvfENlbmFyaW8gZGUgRnVuZG98Q2VuXHUwMEUxcmlvIGRlIEZ1bmRvfENlbmFyaW9zfENlblx1MDBFMXJpb3N8Q29udGVzdG98Q29udGV4dHxDb250ZXh0ZXxDb250ZXh0b3xDb250b3xDb250b2h8Q29udG9uZXxEXHUwMEU2bWl8RGFzYXJ8RGVhZCBtZW4gdGVsbCBubyB0YWxlc3xEZWxpbmVhY2FvIGRvIENlbmFyaW98RGVsaW5lYVx1MDBFN1x1MDBFM28gZG8gQ2VuXHUwMEUxcmlvfERpcyBpcyB3aGF0IHdlbnQgZG93bnxEXHUxRUVGIGxpXHUxRUM3dXxEeWFncmFtIFNlbmFyeW98RHlhZ3JhbSBzZW5hcnlvfEVnemFucHxFamVtcGxvc3xFa3NlbXBsZXJ8RWt6ZW1wbG9qfEVuZ2hyZWlmZnRpYXV8RXNib3pvIGRvIGVzY2VuYXJpb3xFc2NlbmFyaXxFc2NlbmFyaW98RXNlbXBpfEVzcXVlbWEgZGUgbCdlc2NlbmFyaXxFc3F1ZW1hIGRlbCBlc2NlbmFyaW98RXNxdWVtYSBkbyBDZW5hcmlvfEVzcXVlbWEgZG8gQ2VuXHUwMEUxcmlvfEVYQU1QTFp8RXhhbXBsZXN8RXhlbXBlbHxFeGVtcGxlfEV4ZW1wbGVzfEV4ZW1wbG9zfEZpcnN0IG9mZnxGb25vfEZvcmdhdFx1MDBGM2tcdTAwRjZueXZ8Rm9yZ2F0XHUwMEYza1x1MDBGNm55diB2XHUwMEUxemxhdHxGdW5kb3xHZVx1MDBFN21pXHUwMTVGfEdydW5kbGFnZXxIYW5uZXJncm9uZHxnaGFudG9IfEhcdTAwRTF0dFx1MDBFOXJ8SGVhdmUgdG98SXN0b3Jpa3xKdWh0dW1pZHxLZWFkYWFufEtodW5nIGtcdTFFQ0JjaCBiXHUxRUEzbnxLaHVuZyB0XHUwMEVDbmggaHVcdTFFRDFuZ3xLXHUxRUNCY2ggYlx1MUVBM258S29uY2VwdHxLb25zZXAgc2tlbmFyaW98S29udFx1MDBFOGtzfEtvbnRla3N0fEtvbnRla3N0YXN8S29udGVrc3RzfEtvbnRleHR8S29udHVybyBkZSBsYSBzY2VuYXJvfExhdGFyIEJlbGFrYW5nfGx1dCBjaG92bmF0bGh8bHV0fGx1dG1leXxMXHUwMEZEc2luZyBBdGJ1clx1MDBGMGFyXHUwMEUxc2FyfExcdTAwRkRzaW5nIERcdTAwRTZtYXxNSVNIVU4gU1JTTFl8TUlTSFVOfE1lbmdnYXJpc2thbiBTZW5hcmlvfG1vJ3xOXHUwMEUxXHUwMTBEcnQgU2Nlblx1MDBFMXJhfE5cdTAwRTFcdTAxMERydCBTY1x1MDBFOW5cdTAwRTFcdTAxNTllfE5cdTAwRTFcdTAxMERydCBTY2VuXHUwMEUxcnV8T3JpcyBzY2VuYXJpamF8XHUwMEQ2cm5la2xlcnxPc25vdmF8T3Nub3ZhIFNjZW5cdTAwRTFyYXxPc25vdmEgc2NcdTAwRTluXHUwMEUxXHUwMTU5ZXxPc251dGVrfE96YWRqZXxQYXJhdWdzfFBhdnl6ZFx1MDE3RWlhaXxQXHUwMEU5bGRcdTAwRTFrfFBpZW1cdTAxMTNyaXxQbGFuIGR1IHNjXHUwMEU5bmFyaW98UGxhbiBkdSBTY1x1MDBFOW5hcmlvfFBsYW4gU2VuYXJ5b3xQbGFuIHNlbmFyeW98UGxhbmcgdnVtIFN6ZW5hcmlvfFBvemFkXHUwMEVEfFBvemFkaWV8UG96YWRpbmF8UHJcdTAwRURrbGFkeXxQXHUwMTU5XHUwMEVEa2xhZHl8UHJpbWVyfFByaW1lcml8UHJpbWplcml8UHJ6eWtcdTAxNDJhZHl8UmFhbXN0c2VuYWFyaXVtfFJlY2tvbiBpdCdzIGxpa2V8UmVyZWZvbnN8U2Nlblx1MDBFMXJ8U2NcdTAwRTluXHUwMEUxXHUwMTU5fFNjZW5hcmllfFNjZW5hcmlqfFNjZW5hcmlqYWl8U2NlbmFyaWphdXMgXHUwMTYxYWJsb25hc3xTY2VuYXJpaml8U2Nlblx1MDEwMXJpanN8U2Nlblx1MDEwMXJpanMgcFx1MDExM2MgcGFyYXVnYXxTY2VuYXJpanVzfFNjZW5hcmlvfFNjXHUwMEU5bmFyaW98U2NlbmFyaW8gQW1saW5lbGxvbHxTY2VuYXJpbyBPdXRsaW5lfFNjZW5hcmlvIFRlbXBsYXRlfFNjZW5hcmlvbWFsfFNjZW5hcmlvbWFsbHxTY2VuYXJpb3N8U2NlbmFyaXV8U2NlbmFyaXVzenxTY2VuYXJvfFNjaGVtYSBkZWxsbyBzY2VuYXJpb3xTZSBcdTAwRjBlfFNlIHRoZXxTZSBcdTAwRkVlfFNlbmFyaW98U2VuYXJ5byBEZXNrcmlwc3lvbnxTZW5hcnlvIGRlc2tyaXBzeW9ufFNlbmFyeW98U2VuYXJ5byB0YXNsYVx1MDExRlx1MDEzMXxTaGl2ZXIgbWUgdGltYmVyc3xTaXR1XHUwMTAxY2lqYXxTaXR1YWl8U2l0dWFzaWUgVWl0ZWVuc2V0dGluZ3xTaXR1YXNpZXxTa2VuYXJpbyBrb25zZXB8U2tlbmFyaW98U2tpY2F8U3RydWN0dXJhIHNjZW5hcml1fFN0cnVjdHVyXHUwMTAzIHNjZW5hcml1fFN0cnVrdHVyYSBzY2VuYXJpamF8U3RzZW5hYXJpdW18U3dhIGh3YWVyIHN3YXxTd2F8U3dhIGh3XHUwMEU2ciBzd2F8U3phYmxvbiBzY2VuYXJpdXN6YXxTemVuYXJpb3xTemVuYXJpb2dydW5kcmlzc3xUYXBhdWtzZXR8VGFwYXVzfFRhcGF1c2FpaGlvfFRhdXN0fFRhdXN0YXxUZW1wbGF0ZSBLZWFkYWFufFRlbXBsYXRlIFNlbmFyaW98VGVtcGxhdGUgU2l0dWFpfFRoZSB0aGluZyBvZiBpdCBpc3xUXHUwMEVDbmggaHVcdTFFRDFuZ3xWYXJpYW50YWl8Vm9vcmJlZWxkZXxWb29yYmVlbGRlbnxXaGFycmltZWFuIGlzfFlvLWhvLWhvfFlvdSdsbCB3YW5uYXxaYVx1MDE0Mm9cdTAxN0NlbmlhfFx1MDNBMFx1MDNCMVx1MDNDMVx1MDNCMVx1MDNCNFx1MDNCNVx1MDNBRlx1MDNCM1x1MDNCQ1x1MDNCMVx1MDNDNFx1MDNCMXxcdTAzQTBcdTAzQjVcdTAzQzFcdTAzQjlcdTAzQjNcdTAzQzFcdTAzQjFcdTAzQzZcdTAzQUUgXHUwM0EzXHUwM0I1XHUwM0JEXHUwM0IxXHUwM0MxXHUwM0FGXHUwM0JGXHUwM0M1fFx1MDNBM1x1MDNCNVx1MDNCRFx1MDNBQ1x1MDNDMVx1MDNCOVx1MDNCMXxcdTAzQTNcdTAzQjVcdTAzQkRcdTAzQUNcdTAzQzFcdTAzQjlcdTAzQkZ8XHUwM0E1XHUwM0MwXHUwM0NDXHUwM0IyXHUwM0IxXHUwM0I4XHUwM0MxXHUwM0JGfFx1MDQxQVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0OHxcdTA0MUFcdTA0M0VcdTA0M0RcdTA0NDJcdTA0MzVcdTA0M0FcdTA0NDFcdTA0NDJ8XHUwNDFBXHUwNDNFXHUwNDNEXHUwNDQ2XHUwNDM1XHUwNDNGXHUwNDQyfFx1MDQxQ1x1MDQzOFx1MDQ0MVx1MDQzMFx1MDQzQlx1MDQzQlx1MDQzMFx1MDQ0MHxcdTA0MUNcdTA0MzhcdTA0NDFcdTA0M0VcdTA0M0JcdTA0M0JcdTA0MzBcdTA0NDB8XHUwNDFFXHUwNDQxXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDMwfFx1MDQxRlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQzQ1x1MDQzRVx1MDQzMlx1MDQzMHxcdTA0MUZcdTA0M0VcdTA0MzdcdTA0MzBcdTA0MzRcdTA0MzhcdTA0M0RcdTA0MzB8XHUwNDFGXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNFXHUwNDQwXHUwNDM4XHUwNDRGfFx1MDQxRlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0Qlx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQ0MFx1MDQzOFx1MDQ0RnxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0FcdTA0M0JcdTA0MzBcdTA0MzRcdTA0Mzh8XHUwNDFGXHUwNDQwXHUwNDM4XHUwNDNDXHUwNDM1XHUwNDQwfFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzQ1x1MDQzNVx1MDQ0MFx1MDQzOHxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0NcdTA0MzVcdTA0NDBcdTA0NEJ8XHUwNDIwXHUwNDMwXHUwNDNDXHUwNDNBXHUwNDMwIFx1MDQzRFx1MDQzMCBcdTA0NDFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0Mzl8XHUwNDIxXHUwNDNBXHUwNDM4XHUwNDQ2XHUwNDMwfFx1MDQyMVx1MDQ0Mlx1MDQ0MFx1MDQ0M1x1MDQzQVx1MDQ0Mlx1MDQ0M1x1MDQ0MFx1MDQzMCBcdTA0NDFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0NThcdTA0MzB8XHUwNDIxXHUwNDQyXHUwNDQwXHUwNDQzXHUwNDNBXHUwNDQyXHUwNDQzXHUwNDQwXHUwNDMwIFx1MDQ0MVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQ0RnxcdTA0MjFcdTA0NDJcdTA0NDBcdTA0NDNcdTA0M0FcdTA0NDJcdTA0NDNcdTA0NDBcdTA0MzAgXHUwNDQxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDU2XHUwNDRFfFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzOXxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0MzkgXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDQzXHUwNDNBXHUwNDQyXHUwNDQzXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM4fFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzOVx1MDQzRFx1MDQ0Qlx1MDRBMyBcdTA0NDJcdTA0RTlcdTA0MzdcdTA0MzVcdTA0M0JcdTA0MzVcdTA0NDhcdTA0MzV8XHUwNDIxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDU4XHUwNDM4fFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzRXxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0NTZcdTA0Mzl8XHUwNDIyXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDQ1fFx1MDRBRVx1MDQ0MFx1MDQzRFx1MDREOVx1MDQzQVx1MDQzQlx1MDREOVx1MDQ0MHxcdTA1RDNcdTA1RDVcdTA1RDJcdTA1REVcdTA1RDBcdTA1RDVcdTA1RUF8XHUwNUU4XHUwNUU3XHUwNUUyfFx1MDVFQVx1MDVEMVx1MDVFMFx1MDVEOVx1MDVFQSBcdTA1RUFcdTA1RThcdTA1RDdcdTA1RDlcdTA1RTl8XHUwNUVBXHUwNUU4XHUwNUQ3XHUwNUQ5XHUwNUU5fFx1MDYyN1x1MDY0NFx1MDYyRVx1MDY0NFx1MDY0MVx1MDY0QVx1MDYyOXxcdTA2MjdcdTA2NDRcdTA2QUZcdTA2NDhcdTA2Q0MgXHUwNjMzXHUwNjQ2XHUwNjI3XHUwNjMxXHUwNkNDXHUwNjQ4fFx1MDYyN1x1MDY0NVx1MDYyQlx1MDY0NFx1MDYyOXxcdTA2N0VcdTA2MzMgXHUwNjQ1XHUwNjQ2XHUwNjM4XHUwNjMxfFx1MDYzMlx1MDY0NVx1MDZDQ1x1MDY0Nlx1MDY0N3xcdTA2MzNcdTA2NDZcdTA2MjdcdTA2MzFcdTA2Q0NcdTA2NDh8XHUwNjMzXHUwNjRBXHUwNjQ2XHUwNjI3XHUwNjMxXHUwNjRBXHUwNjQ4fFx1MDYzM1x1MDY0QVx1MDY0Nlx1MDYyN1x1MDYzMVx1MDY0QVx1MDY0OCBcdTA2NDVcdTA2MkVcdTA2MzdcdTA2Mzd8XHUwNjQ1XHUwNjJCXHUwNjI3XHUwNjQ0XHUwNkNDXHUwNkJBfFx1MDY0NVx1MDY0Nlx1MDYzOFx1MDYzMSBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2RDIgXHUwNkE5XHUwNjI3IFx1MDYyRVx1MDYyN1x1MDZBOVx1MDZDMXxcdTA2NDVcdTA2NDZcdTA2MzhcdTA2MzFcdTA2NDZcdTA2MjdcdTA2NDVcdTA2QzF8XHUwNjQ2XHUwNjQ1XHUwNjQ4XHUwNjQ2XHUwNjQ3IFx1MDY0N1x1MDYyN3xcdTA5MDlcdTA5MjZcdTA5M0VcdTA5MzlcdTA5MzBcdTA5MjN8XHUwOTJBXHUwOTMwXHUwOTNGXHUwOTI2XHUwOTQzXHUwOTM2XHUwOTREXHUwOTJGfFx1MDkyQVx1MDkzMFx1MDkzRlx1MDkyNlx1MDk0M1x1MDkzNlx1MDk0RFx1MDkyRiBcdTA5MzBcdTA5NDJcdTA5MkFcdTA5MzBcdTA5NDdcdTA5MTZcdTA5M0V8XHUwOTJBXHUwOTQzXHUwOTM3XHUwOTREXHUwOTIwXHUwOTJEXHUwOTQyXHUwOTJFXHUwOTNGfFx1MEEwOVx1MEEyNlx1MEEzRVx1MEEzOVx1MEEzMFx1MEEyOFx1MEEzRVx1MEEwMnxcdTBBMkFcdTBBMUZcdTBBMTVcdTBBMjVcdTBBM0V8XHUwQTJBXHUwQTFGXHUwQTE1XHUwQTI1XHUwQTNFIFx1MEEyMlx1MEEzRVx1MEEwMlx1MEExQVx1MEEzRXxcdTBBMkFcdTBBMUZcdTBBMTVcdTBBMjVcdTBBM0UgXHUwQTMwXHUwQTQyXHUwQTJBIFx1MEEzMFx1MEE0N1x1MEExNlx1MEEzRXxcdTBBMkFcdTBBM0ZcdTBBMUJcdTBBNEJcdTBBMTVcdTBBNUN8XHUwQzA5XHUwQzI2XHUwQzNFXHUwQzM5XHUwQzMwXHUwQzIzXHUwQzMyXHUwQzQxfFx1MEMxNVx1MEMyNVx1MEMyOFx1MEMwMnxcdTBDMjhcdTBDNDdcdTBDMkFcdTBDMjVcdTBDNERcdTBDMkZcdTBDMDJ8XHUwQzM4XHUwQzI4XHUwQzREXHUwQzI4XHUwQzNGXHUwQzM1XHUwQzQ3XHUwQzM2XHUwQzAyfFx1MEM4OVx1MENBNlx1MENCRVx1MENCOVx1MENCMFx1MENBM1x1MENDNlx1MEM5N1x1MENCM1x1MENDMXxcdTBDOTVcdTBDQTVcdTBDQkVcdTBDQjhcdTBDQkVcdTBDQjBcdTBDQkVcdTBDODJcdTBDQjZ8XHUwQ0I1XHUwQ0JGXHUwQ0I1XHUwQ0IwXHUwQ0EzXHUwQ0M2fFx1MENCOVx1MENCRlx1MENBOFx1MENDRFx1MENBOFx1MENDNlx1MENCMlx1MENDNnxcdTBFNDJcdTBFMDRcdTBFMjNcdTBFMDdcdTBFMkFcdTBFMjNcdTBFNDlcdTBFMzJcdTBFMDdcdTBFMDJcdTBFMkRcdTBFMDdcdTBFNDBcdTBFMkJcdTBFMTVcdTBFMzhcdTBFMDFcdTBFMzJcdTBFMjNcdTBFMTNcdTBFNEN8XHUwRTBBXHUwRTM4XHUwRTE0XHUwRTAyXHUwRTJEXHUwRTA3XHUwRTE1XHUwRTMxXHUwRTI3XHUwRTJEXHUwRTIyXHUwRTQ4XHUwRTMyXHUwRTA3fFx1MEUwQVx1MEUzOFx1MEUxNFx1MEUwMlx1MEUyRFx1MEUwN1x1MEU0MFx1MEUyQlx1MEUxNVx1MEUzOFx1MEUwMVx1MEUzMlx1MEUyM1x1MEUxM1x1MEU0Q3xcdTBFNDFcdTBFMTlcdTBFMjdcdTBFMDRcdTBFMzRcdTBFMTR8XHUwRTJBXHUwRTIzXHUwRTM4XHUwRTFCXHUwRTQwXHUwRTJCXHUwRTE1XHUwRTM4XHUwRTAxXHUwRTMyXHUwRTIzXHUwRTEzXHUwRTRDfFx1MEU0MFx1MEUyQlx1MEUxNVx1MEUzOFx1MEUwMVx1MEUzMlx1MEUyM1x1MEUxM1x1MEU0Q3xcdUJDMzBcdUFDQkR8XHVDMkRDXHVCMDk4XHVCOUFDXHVDNjI0fFx1QzJEQ1x1QjA5OFx1QjlBQ1x1QzYyNCBcdUFDMUNcdUM2OTR8XHVDNjA4fFx1MzBCNVx1MzBGM1x1MzBEN1x1MzBFQnxcdTMwQjdcdTMwQ0FcdTMwRUFcdTMwQUF8XHUzMEI3XHUzMENBXHUzMEVBXHUzMEFBXHUzMEEyXHUzMEE2XHUzMEM4XHUzMEU5XHUzMEE0XHUzMEYzfFx1MzBCN1x1MzBDQVx1MzBFQVx1MzBBQVx1MzBDNlx1MzBGM1x1MzBEN1x1MzBFQ3xcdTMwQjdcdTMwQ0FcdTMwRUFcdTMwQUFcdTMwQzZcdTMwRjNcdTMwRDdcdTMwRUNcdTMwRkNcdTMwQzh8XHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDfFx1NEY4QnxcdTRGOEJcdTVCNTB8XHU1MjY3XHU2NzJDfFx1NTI2N1x1NjcyQ1x1NTkyN1x1N0VCMnxcdTUyODdcdTY3MkN8XHU1Mjg3XHU2NzJDXHU1OTI3XHU3REIxfFx1NTczQVx1NjY2RnxcdTU3M0FcdTY2NkZcdTU5MjdcdTdFQjJ8XHU1ODM0XHU2NjZGfFx1NTgzNFx1NjY2Rlx1NTkyN1x1N0RCMXxcdTgwQ0NcdTY2NkYpOlteOlxcclxcbl0qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbXBvcnRhbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg6KVteXFxyXFxuXSovLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiAvW146XFxyXFxuXSs6L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3RhYmxlLWJvZHknOiB7XG5cdFx0XHQvLyBMb29rLWJlaGluZCBpcyB1c2VkIHRvIHNraXAgdGhlIHRhYmxlIGhlYWQsIHdoaWNoIGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgYW55IHRhYmxlIHJvd1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoJyArIHRhYmxlUm93ICsgJykoPzonICsgdGFibGVSb3cgKyAnKSsnKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J291dGxpbmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLzxbXj5dKz4vLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd0ZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlteXFxzfF1bXnxdKi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndGFibGUtaGVhZCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWJsZVJvdyksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RoJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXHMqW15cXHN8XVtefF0qLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2F0cnVsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSspKD86J2F8J2FjaHwnZWp8N3xhfEEgdGFrXHUwMEU5fEEgdGFrdGllXHUwMTdFfEEgdGllXHUwMTdFfEEgelx1MDBFMXJvdmVcdTAxNDh8QWJlcnxBY3xBZG90dHxBa2tvcnxBa3xBbGVzaG9yZXN8QWxlfEFsaXxBbGxvcmF8QWxvcnN8QWxzfEFtYXxBbWVubnlpYmVufEFtaWtvcnxBbXBha3xhbnxBTnxBbmFuZ2luZ3xBbmQgeSdhbGx8QW5kfEFuZ2Vub21tZW58QW5yaGVnZWRpZyBhfEFufEFwYWJpbGF8QXRcdTAwRThzfEF0ZXNhfEF0dW5jaXxBdmFzdCF8QXllfEF8YXdlcnxCYWdpfEJhbmp1cnxCZXR8QmlcdTFFQkZ0fEJsaW1leSF8QnVofEJ1dCBhdCB0aGUgZW5kIG9mIHRoZSBkYXkgSSByZWNrb258QnV0IHknYWxsfEJ1dHxCVVR8Q2FsfENcdTAwRTJuZHxDYW5kfENhbmRvfENlfEN1YW5kb3xcdTAxMENlfFx1MDBEMGEgXHUwMEYwZXxcdTAwRDBhfERhZGFzfERhZGF8RGFkb3N8RGFkb3xEYUggZ2h1JyBiZWpsdSd8ZGFubnxEYW5ufERhbm98RGFufERhcnxEYXQgZmlpbmR8RGF0YXxEYXRlIGZpaW5kfERhdGV8RGF0aSBmaWluZHxEYXRpfERhXHUwMTYzaSBmaWluZHxEYVx1MDIxQmkgZmlpbmR8REVOfERhdG98RGV8RGVuIHlvdXNlIGdvdHRhfERlbmdhbnxEaWJlcml8RGl5ZWxpbSBraXxEb25hZGF8RG9uYXR8RG9uaXRhXHUwMTM1b3xEb3xEdW58RHVvdGF8XHUwMEQwdXJofEVlbGRhZGVzfEVmfEVcdTAxMUZlciBraXxFbnRhb3xFbnRcdTAwRTNvfEVudFx1MDBGM258RXxFbnxFbnRvbmNlc3xFcGl8XHUwMEM5c3xFdGFudCBkb25uXHUwMEU5ZXxFdGFudCBkb25uXHUwMEU5fEV0fFx1MDBDOXRhbnQgZG9ublx1MDBFOWVzfFx1MDBDOXRhbnQgZG9ublx1MDBFOWV8XHUwMEM5dGFudCBkb25uXHUwMEU5fEV0YW50IGRvbm5cdTAwRTllc3xFdGFudCBkb25uXHUwMEU5c3xcdTAwQzl0YW50IGRvbm5cdTAwRTlzfEZha2F0fEdhbmd3YXkhfEdkeXxHZWdlYmVuIHNlaWVufEdlZ2ViZW4gc2VpfEdlZ2V2ZW58R2VnZXdlfGdodScgbm9ibHUnfEdpdHR8R2l2ZW4geSdhbGx8R2l2ZW58R2l2ZXR8R2l2dW58SGF8Q2hvfEkgQ0FOIEhBWnxJbnxJcnxJdCdzIGp1c3QgdW5iZWxpZXZhYmxlfEl8SmF8SmVcdTAxNUJsaXxKZVx1MDE3Q2VsaXxLYWR8S2FkYXxLYWRhcnxLYWl8S2FqfEtkeVx1MDE3RXxLZVx1MDEwRnxLZW11ZGlhbnxLZXRpa2F8S2hpfEtpZWR5fEtvfEt1aWR8S3VpfEt1bnxMYW58bGF0bGh8TGUgc2EgYXxMZXQgZ28gYW5kIGhhdWx8TGV8TFx1MDBFOCBzYSBhfExcdTAwRTh8TG9nb3xMb3JzcXUnPHxMb3JzcXVlfG1cdTAwRTR8TWFhcnxNYWlzfE1halx1MDEwNWN8TWF8TWFqZHxNYWthfE1hbmF3YXxNYXN8TWVufE1lbmF3YXxNdXR0YXxOYWxpa2F8TmFsaWthbmluZ3xOYW5naW5nfE5cdTAwRTVyfE5cdTAwRTRyfE5hdG98TmhcdTAxQjBuZ3xOaWlufE5qdWt8TyB6YW1hbnxPY2h8T2d8T2xldGV0YWFufE9uZHxPbmRhfE9yYXp8UGFrfFBlcm98UGVyXHUwMEYyfFBvZGFub3xQb2tpYVx1MDEzRXxQb2t1ZHxQb3RlbXxQb3RvbXxQcml2emV0b3xQcnlkfFF1YW58UXVhbmR8UXVhbmRvfHFhU0RJJ3xTXHUwMEU1fFNlZHxTZXxTaWlzfFNpcG96ZSBrZXxTaXBvemUgS2V8U2lwb3plfFNpfFx1MDE1RWl8XHUwMjE4aXxTb2l0fFN0ZWx8VGFkYXxUYWR8VGFrcmF0fFRha3xUYXBpfFRlcnxUZXRhcGl8VGhhIHRoZXxUaGF8VGhlbiB5J2FsbHxUaGVufFRoXHUwMEVDfFRodXJofFRvZGF8VG9vIHJpZ2h0fFVufFVuZHx1Z2Vob2xsfFZcdTAwRTB8dmFqfFZlbmRhcnxWZXx3YW5ufFdhbm5lZXJ8V0VOfFdlbm58V2hlbiB5J2FsbHxXaGVufFd0ZWR5fFd1bnxZJ2tub3d8WWVhaCBuYWh8WW5hfFlvdXNlIGtub3cgbGlrZSB3aGVufFlvdXNlIGtub3cgd2hlbiB5b3VzZSBnb3R8WXxaYSBwcmVkcG9rbGFkdXxaYSBwXHUwMTU5ZWRwb2tsYWR1fFphZGFufFphZGFuaXxaYWRhbm98WmFkYXRlfFphZGF0b3xaYWtcdTAxNDJhZGFqXHUwMTA1Y3xaYXJhZGl8WmF0YXRpfFx1MDBERWEgXHUwMEZFZXxcdTAwREVhfFx1MDBERVx1MDBFMXxcdTAwREVlZ2FyfFx1MDBERXVyaHxcdTAzOTFcdTAzQkJcdTAzQkJcdTAzQUN8XHUwMzk0XHUwM0I1XHUwM0I0XHUwM0JGXHUwM0JDXHUwM0FEXHUwM0JEXHUwM0JGXHUwM0M1fFx1MDM5QVx1MDNCMVx1MDNCOXxcdTAzOENcdTAzQzRcdTAzQjFcdTAzQkR8XHUwM0E0XHUwM0NDXHUwM0M0XHUwM0I1fFx1MDQxMCBcdTA0NDJcdTA0MzBcdTA0M0FcdTA0M0VcdTA0MzZ8XHUwNDEwXHUwNDMzXHUwNDMwXHUwNDQwfFx1MDQxMFx1MDQzQlx1MDQzNXxcdTA0MTBcdTA0M0JcdTA0Mzh8XHUwNDEwXHUwNDNDXHUwNDNDXHUwNDNFfFx1MDQxMHxcdTA0RDhcdTA0MzNcdTA0RDlcdTA0NDB8XHUwNEQ4XHUwNDM5XHUwNDQyXHUwNDM4XHUwNDNBfFx1MDREOFx1MDQzQ1x1MDQzQ1x1MDQzMHxcdTA0MTFcdTA0MzhcdTA0NDBcdTA0M0VcdTA0M0F8XHUwNDEyXHUwNDMwfFx1MDQxMlx1MDREOXxcdTA0MTRcdTA0MzBcdTA0MzRcdTA0MzVcdTA0M0RcdTA0M0V8XHUwNDE0XHUwNDMwXHUwNDNEXHUwNDNFfFx1MDQxNFx1MDQzRVx1MDQzRlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzQ3xcdTA0MTVcdTA0NDFcdTA0M0JcdTA0Mzh8XHUwNDE3XHUwNDMwXHUwNDM0XHUwNDMwXHUwNDQyXHUwNDM1fFx1MDQxN1x1MDQzMFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQzOHxcdTA0MTdcdTA0MzBcdTA0MzRcdTA0MzBcdTA0NDJcdTA0M0V8XHUwNDE4fFx1MDQwNnxcdTA0MUEgXHUwNDQyXHUwNDNFXHUwNDNDXHUwNDQzIFx1MDQzNlx1MDQzNXxcdTA0MUFcdTA0MzBcdTA0MzRcdTA0MzB8XHUwNDFBXHUwNDMwXHUwNDM0fFx1MDQxQVx1MDQzRVx1MDQzM1x1MDQzMFx1MDQ0Mlx1MDQzRXxcdTA0MUFcdTA0M0VcdTA0MzNcdTA0MzRcdTA0MzB8XHUwNDFBXHUwNDNFXHUwNDNCXHUwNDM4fFx1MDQxQlx1MDREOVx1MDQzQVx1MDQzOFx1MDQzRHxcdTA0MUJcdTA0MzVcdTA0M0FcdTA0MzhcdTA0M0R8XHUwNDFEXHUwNEQ5XHUwNDQyXHUwNDM4XHUwNDk3XHUwNEQ5XHUwNDM0XHUwNEQ5fFx1MDQxRFx1MDQzNVx1MDQ0NVx1MDQzMFx1MDQzOXxcdTA0MURcdTA0M0V8XHUwNDFFXHUwNDNEXHUwNDM0XHUwNDMwfFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzRlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzQ1x1MDQzRSwgXHUwNDQ5XHUwNDNFfFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzRlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzQ1x1MDQzRXxcdTA0MUZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0NEN8XHUwNDIyXHUwNDMwXHUwNDNBXHUwNDM2XHUwNDM1fFx1MDQyMlx1MDQzMHxcdTA0MjJcdTA0M0VcdTA0MzNcdTA0MzRcdTA0MzB8XHUwNDIyXHUwNDNFXHUwNDM0XHUwNDU2fFx1MDQyMlx1MDQzRXxcdTA0MjNcdTA0M0RcdTA0MzRcdTA0MzB8XHUwNEJBXHUwNEQ5XHUwNDNDfFx1MDQyRlx1MDQzQVx1MDQ0OVx1MDQzRXxcdTA1RDBcdTA1RDFcdTA1REN8XHUwNUQwXHUwNUQ2XHUwNUQ5fFx1MDVEMFx1MDVENnxcdTA1RDFcdTA1RDRcdTA1RDlcdTA1RTBcdTA1RUFcdTA1REZ8XHUwNUQ1XHUwNUQyXHUwNUREfFx1MDVEQlx1MDVEMFx1MDVFOVx1MDVFOHxcdTA2MjJcdTA2NDZcdTA2QUZcdTA2MjdcdTA2NDd8XHUwNjI3XHUwNjMwXHUwNjI3XHUwNjRCfFx1MDYyN1x1MDZBRlx1MDYzMXxcdTA2MjdcdTA2NDVcdTA2Mjd8XHUwNjI3XHUwNjQ4XHUwNjMxfFx1MDYyOFx1MDYyNyBcdTA2NDFcdTA2MzFcdTA2MzZ8XHUwNjI4XHUwNjI3XHUwNjQ0XHUwNjQxXHUwNjMxXHUwNjM2fFx1MDYyOFx1MDY0MVx1MDYzMVx1MDYzNnxcdTA2N0VcdTA2QkVcdTA2MzF8XHUwNjJBXHUwNjI4fFx1MDYyQlx1MDY0NXxcdTA2MkNcdTA2Mjh8XHUwNjM5XHUwNjQ2XHUwNjJGXHUwNjQ1XHUwNjI3fFx1MDY0MVx1MDYzMVx1MDYzNiBcdTA2QTlcdTA2Q0NcdTA2Mjd8XHUwNjQ0XHUwNjQzXHUwNjQ2fFx1MDY0NFx1MDZDQ1x1MDZBOVx1MDY0NnxcdTA2NDVcdTA2MkFcdTA2NDl8XHUwNjQ3XHUwNjQ2XHUwNkFGXHUwNjI3XHUwNjQ1XHUwNkNDfFx1MDY0OHxcdTA5MDVcdTA5MTdcdTA5MzB8XHUwOTE0XHUwOTMwfFx1MDkxNVx1MDkyNlx1MDkzRXxcdTA5MTVcdTA5M0ZcdTA5MjhcdTA5NERcdTA5MjRcdTA5NDF8XHUwOTFBXHUwOTQyXHUwOTAyXHUwOTE1XHUwOTNGfFx1MDkxQ1x1MDkyQ3xcdTA5MjRcdTA5MjVcdTA5M0V8XHUwOTI0XHUwOTI2XHUwOTNFfFx1MDkyNFx1MDkyQ3xcdTA5MkFcdTA5MzBcdTA5MjhcdTA5NERcdTA5MjRcdTA5NDF8XHUwOTJBXHUwOTMwfFx1MDkyRlx1MDkyNlx1MDkzRnxcdTBBMDVcdTBBMjRcdTBBNDd8XHUwQTFDXHUwQTI2XHUwQTRCXHUwQTAyfFx1MEExQ1x1MEEzRlx1MEEzNVx1MEE0N1x1MEEwMiBcdTBBMTVcdTBBM0Z8XHUwQTFDXHUwQTQ3XHUwQTE1XHUwQTMwfFx1MEEyNFx1MEEyNnxcdTBBMkFcdTBBMzB8XHUwQzA1XHUwQzJBXHUwQzREXHUwQzJBXHUwQzQxXHUwQzIxXHUwQzQxfFx1MEMwOCBcdTBDMkFcdTBDMzBcdTBDM0ZcdTBDMzhcdTBDNERcdTBDMjVcdTBDM0ZcdTBDMjRcdTBDM0ZcdTBDMzJcdTBDNEJ8XHUwQzE1XHUwQzNFXHUwQzI4XHUwQzNGfFx1MEMxQVx1MEM0Nlx1MEMyQVx1MEM0RFx1MEMyQVx1MEMyQ1x1MEMyMVx1MEMzRlx1MEMyOFx1MEMyNlx1MEMzRnxcdTBDMkVcdTBDMzBcdTBDM0ZcdTBDMkZcdTBDNDF8XHUwQzg2XHUwQ0E2XHUwQ0IwXHUwQ0M2fFx1MENBOFx1MEM4Mlx1MENBNFx1MENCMHxcdTBDQThcdTBDQkZcdTBDRDVcdTBDQTFcdTBDQkZcdTBDQTZ8XHUwQ0FFXHUwQ0E0XHUwQ0NEXHUwQ0E0XHUwQ0MxfFx1MENCOFx1MENDRFx1MENBNVx1MENCRlx1MENBNFx1MENCRlx1MENBRlx1MENBOFx1MENDRFx1MENBOFx1MENDMXxcdTBFMDFcdTBFMzNcdTBFMkJcdTBFMTlcdTBFMTRcdTBFNDNcdTBFMkJcdTBFNDl8XHUwRTE0XHUwRTMxXHUwRTA3XHUwRTE5XHUwRTMxXHUwRTQ5XHUwRTE5fFx1MEU0MVx1MEUxNVx1MEU0OHxcdTBFNDBcdTBFMjFcdTBFMzdcdTBFNDhcdTBFMkR8XHUwRTQxXHUwRTI1XHUwRTMwfFx1QURGOFx1QjdFQ1x1QkE3NDx8XHVBREY4XHVCOUFDXHVBQ0UwPHxcdUIyRTg8fFx1QjlDQ1x1QzU3RDx8XHVCOUNDXHVDNzdDPHxcdUJBM0NcdUM4MDA8fFx1Qzg3MFx1QUM3NDx8XHVENTU4XHVDOUMwXHVCOUNDPHxcdTMwNEJcdTMwNjQ8fFx1MzA1N1x1MzA0Qlx1MzA1Nzx8XHUzMDVGXHUzMDYwXHUzMDU3PHxcdTMwNkFcdTMwODlcdTMwNzA8fFx1MzA4Mlx1MzA1Nzx8XHU0RTI2XHU0RTE0PHxcdTRGNDZcdTMwNTc8fFx1NEY0Nlx1NjYyRjx8XHU1MDQ3XHU1OTgyPHxcdTUwNDdcdTVCOUE8fFx1NTA0N1x1OEEyRDx8XHU1MDQ3XHU4QkJFPHxcdTUyNERcdTYzRDA8fFx1NTQwQ1x1NjVGNjx8XHU1NDBDXHU2NjQyPHxcdTVFNzZcdTRFMTQ8fFx1NUY1Mzx8XHU3NTc2PHxcdTgwMENcdTRFMTQ8fFx1OTBBM1x1NEU0ODx8XHU5MEEzXHU5RUJDPCkoPz1bIFxcdF0pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcInwnKD86XFxcXC58W14nXFxcXFxcclxcbl0pKicvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvdXRsaW5lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W14+XSs+Lyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb3V0bGluZSc6IHtcblx0XHRcdHBhdHRlcm46IC88W14+XSs+Lyxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0fVxuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5naXQgPSB7XG5cdC8qXG5cdCAqIEEgc2ltcGxlIG9uZSBsaW5lIGNvbW1lbnQgbGlrZSBpbiBhIGdpdCBzdGF0dXMgY29tbWFuZFxuXHQgKiBGb3IgaW5zdGFuY2U6XG5cdCAqICQgZ2l0IHN0YXR1c1xuXHQgKiAjIE9uIGJyYW5jaCBpbmZpbml0ZS1zY3JvbGxcblx0ICogIyBZb3VyIGJyYW5jaCBhbmQgJ29yaWdpbi9zaGFyZWRCcmFuY2hlcy9mcm9udGVuZFRlYW0vaW5maW5pdGUtc2Nyb2xsJyBoYXZlIGRpdmVyZ2VkLFxuXHQgKiAjIGFuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuXHQgKiBub3RoaW5nIHRvIGNvbW1pdCAod29ya2luZyBkaXJlY3RvcnkgY2xlYW4pXG5cdCAqL1xuXHQnY29tbWVudCc6IC9eIy4qL20sXG5cblx0Lypcblx0ICogUmVnZXhwIHRvIG1hdGNoIHRoZSBjaGFuZ2VkIGxpbmVzIGluIGEgZ2l0IGRpZmYgb3V0cHV0LiBDaGVjayB0aGUgZXhhbXBsZSBiZWxvdy5cblx0ICovXG5cdCdkZWxldGVkJzogL15bLVx1MjAxM10uKi9tLFxuXHQnaW5zZXJ0ZWQnOiAvXlxcKy4qL20sXG5cblx0Lypcblx0ICogYSBzdHJpbmcgKGRvdWJsZSBhbmQgc2ltcGxlIHF1b3RlKVxuXHQgKi9cblx0J3N0cmluZyc6IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblxuXHQvKlxuXHQgKiBhIGdpdCBjb21tYW5kLiBJdCBzdGFydHMgd2l0aCBhIHJhbmRvbSBwcm9tcHQgZmluaXNoaW5nIGJ5IGEgJCwgdGhlbiBcImdpdFwiIHRoZW4gc29tZSBvdGhlciBwYXJhbWV0ZXJzXG5cdCAqIEZvciBpbnN0YW5jZTpcblx0ICogJCBnaXQgYWRkIGZpbGUudHh0XG5cdCAqL1xuXHQnY29tbWFuZCc6IHtcblx0XHRwYXR0ZXJuOiAvXi4qXFwkIGdpdCAuKiQvbSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdC8qXG5cdFx0XHQgKiBBIGdpdCBjb21tYW5kIGNhbiBjb250YWluIGEgcGFyYW1ldGVyIHN0YXJ0aW5nIGJ5IGEgc2luZ2xlIG9yIGEgZG91YmxlIGRhc2ggZm9sbG93ZWQgYnkgYSBzdHJpbmdcblx0XHRcdCAqIEZvciBpbnN0YW5jZTpcblx0XHRcdCAqICQgZ2l0IGRpZmYgLS1jYWNoZWRcblx0XHRcdCAqICQgZ2l0IGxvZyAtcFxuXHRcdFx0ICovXG5cdFx0XHQncGFyYW1ldGVyJzogL1xccy0tP1xcdysvXG5cdFx0fVxuXHR9LFxuXG5cdC8qXG5cdCAqIENvb3JkaW5hdGVzIGRpc3BsYXllZCBpbiBhIGdpdCBkaWZmIGNvbW1hbmRcblx0ICogRm9yIGluc3RhbmNlOlxuXHQgKiAkIGdpdCBkaWZmXG5cdCAqIGRpZmYgLS1naXQgZmlsZS50eHQgZmlsZS50eHRcblx0ICogaW5kZXggNjIxNDk1My4uMWQ1NGE1MiAxMDA2NDRcblx0ICogLS0tIGZpbGUudHh0XG5cdCAqICsrKyBmaWxlLnR4dFxuXHQgKiBAQCAtMSArMSwyIEBAXG5cdCAqIC1IZXJlJ3MgbXkgdGV0eCBmaWxlXG5cdCAqICtIZXJlJ3MgbXkgdGV4dCBmaWxlXG5cdCAqICtBbmQgdGhpcyBpcyB0aGUgc2Vjb25kIGxpbmVcblx0ICovXG5cdCdjb29yZCc6IC9eQEAuKkBAJC9tLFxuXG5cdC8qXG5cdCAqIE1hdGNoIGEgXCJjb21taXQgW1NIQTFdXCIgbGluZSBpbiBhIGdpdCBsb2cgb3V0cHV0LlxuXHQgKiBGb3IgaW5zdGFuY2U6XG5cdCAqICQgZ2l0IGxvZ1xuXHQgKiBjb21taXQgYTExYTE0ZWY3ZTI2ZjJjYTYyZDRiMzVlYWM0NTVjZTYzNmQwZGMwOVxuXHQgKiBBdXRob3I6IGxnaXJhdWRlbFxuXHQgKiBEYXRlOiAgIE1vbiBGZWIgMTcgMTE6MTg6MzQgMjAxNCArMDEwMFxuXHQgKlxuXHQgKiAgICAgQWRkIG9mIGEgbmV3IGxpbmVcblx0ICovXG5cdCdjb21taXQtc2hhMSc6IC9eY29tbWl0IFxcd3s0MH0kL21cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nbHNsID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHtcblx0J2tleXdvcmQnOiAvXFxiKD86YWN0aXZlfGFzbXxhdG9taWNfdWludHxhdHRyaWJ1dGV8W2liZHVdP3ZlY1syMzRdfGJvb2x8YnJlYWt8YnVmZmVyfGNhc2V8Y2FzdHxjZW50cm9pZHxjbGFzc3xjb2hlcmVudHxjb21tb258Y29uc3R8Y29udGludWV8ZD9tYXRbMjM0XSg/OnhbMjM0XSk/fGRlZmF1bHR8ZGlzY2FyZHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4dGVybnxleHRlcm5hbHxmYWxzZXxmaWx0ZXJ8Zml4ZWR8ZmxhdHxmbG9hdHxmb3J8ZnZlY1syMzRdfGdvdG98aGFsZnxoaWdocHxodmVjWzIzNF18W2l1XT9zYW1wbGVyMkRNUyg/OkFycmF5KT98W2l1XT9zYW1wbGVyMkRSZWN0fFtpdV0/c2FtcGxlckJ1ZmZlcnxbaXVdP3NhbXBsZXJDdWJlfFtpdV0/c2FtcGxlckN1YmVBcnJheXxbaXVdP3NhbXBsZXJbMTIzXUR8W2l1XT9zYW1wbGVyWzEyXURBcnJheXxbaXVdP2ltYWdlMkRNUyg/OkFycmF5KT98W2l1XT9pbWFnZTJEUmVjdHxbaXVdP2ltYWdlQnVmZmVyfFtpdV0/aW1hZ2VDdWJlfFtpdV0/aW1hZ2VDdWJlQXJyYXl8W2l1XT9pbWFnZVsxMjNdRHxbaXVdP2ltYWdlWzEyXURBcnJheXxpZnxpbnxpbmxpbmV8aW5vdXR8aW5wdXR8aW50fGludGVyZmFjZXxpbnZhcmlhbnR8bGF5b3V0fGxvbmd8bG93cHxtZWRpdW1wfG5hbWVzcGFjZXxub2lubGluZXxub3BlcnNwZWN0aXZlfG91dHxvdXRwdXR8cGFydGl0aW9ufHBhdGNofHByZWNpc2V8cHJlY2lzaW9ufHB1YmxpY3xyZWFkb25seXxyZXNvdXJjZXxyZXN0cmljdHxyZXR1cm58c2FtcGxlfHNhbXBsZXJbMTJdREFycmF5U2hhZG93fHNhbXBsZXJbMTJdRFNoYWRvd3xzYW1wbGVyMkRSZWN0U2hhZG93fHNhbXBsZXIzRFJlY3R8c2FtcGxlckN1YmVBcnJheVNoYWRvd3xzYW1wbGVyQ3ViZVNoYWRvd3xzaGFyZWR8c2hvcnR8c2l6ZW9mfHNtb290aHxzdGF0aWN8c3RydWN0fHN1YnJvdXRpbmV8c3VwZXJwfHN3aXRjaHx0ZW1wbGF0ZXx0aGlzfHRydWV8dHlwZWRlZnx1aW50fHVuaWZvcm18dW5pb258dW5zaWduZWR8dXNpbmd8dmFyeWluZ3x2b2lkfHZvbGF0aWxlfHdoaWxlfHdyaXRlb25seSlcXGIvXG59KTtcblxuLy8gaHR0cHM6Ly9nbi5nb29nbGVzb3VyY2UuY29tL2duLysvcmVmcy9oZWFkcy9tYWluL2RvY3MvcmVmZXJlbmNlLm1kI2dyYW1tYXJcblxuUHJpc20ubGFuZ3VhZ2VzLmduID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxcIl0pXCIoPzpbXlxcclxcblwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkKD86XFx7W1xcc1xcU10qP1xcfXxbYS16QS1aX11cXHcqfDB4W2EtZkEtRjAtOV17Mn0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J251bWJlcic6IC9eXFwkMHhbXFxzXFxTXXsyfSQvLFxuXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9eXFwkXFx3KyQvLFxuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86ZWxzZXxpZilcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdidWlsdGluLWZ1bmN0aW9uJzoge1xuXHRcdC8vIGEgZmV3IGZ1bmN0aW9ucyBnZXQgc3BlY2lhbCBoaWdobGlnaHRpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eVxuXHRcdHBhdHRlcm46IC9cXGIoPzphc3NlcnR8ZGVmaW5lZHxmb3JlYWNofGltcG9ydHxwb29sfHByaW50fHRlbXBsYXRlfHRvb2x8dG9vbGNoYWluKSg/PVxccypcXCgpL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdCdjb25zdGFudCc6IC9cXGIoPzpjdXJyZW50X2NwdXxjdXJyZW50X29zfGN1cnJlbnRfdG9vbGNoYWlufGRlZmF1bHRfdG9vbGNoYWlufGhvc3RfY3B1fGhvc3Rfb3N8cm9vdF9idWlsZF9kaXJ8cm9vdF9nZW5fZGlyfHJvb3Rfb3V0X2Rpcnx0YXJnZXRfY3B1fHRhcmdldF9nZW5fZGlyfHRhcmdldF9vc3x0YXJnZXRfb3V0X2RpcilcXGIvLFxuXG5cdCdudW1iZXInOiAvLT9cXGJcXGQrXFxiLyxcblxuXHQnb3BlcmF0b3InOiAvWy0rIT08Pl09P3wmJnxcXHxcXHwvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdLC5dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmduWydzdHJpbmctbGl0ZXJhbCddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnZXhwcmVzc2lvbiddLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5nbjtcblxuUHJpc20ubGFuZ3VhZ2VzLmduaSA9IFByaXNtLmxhbmd1YWdlcy5nbjtcblxuUHJpc20ubGFuZ3VhZ2VzWydsaW5rZXItc2NyaXB0J10gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpXFwvXFwqW1xcc1xcU10qPyg/OiR8XFwqXFwvKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdsb2NhdGlvbi1jb3VudGVyJzoge1xuXHRcdHBhdHRlcm46IC9cXEJcXC5cXEIvLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXG5cdCdzZWN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdypdKVxcLlxcdytcXGIvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiW0EtWl1bQS1aX10qKD89XFxzKlxcKCkvLFxuXG5cdCdudW1iZXInOiAvXFxiKD86MFt4WF1bYS1mQS1GMC05XSt8XFxkKylbS01dP1xcYi8sXG5cblx0J29wZXJhdG9yJzogLz4+PT98PDw9P3wtPnxcXCtcXCt8LS18JiZ8XFx8XFx8fDo6fFs/On5dfFstKyovJSZ8XiE9PD5dPT8vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe30sO10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXNbJ2xkJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ2xpbmtlci1zY3JpcHQnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdvID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifGBbXmBdKmAvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrfGNhc2V8Y2hhbnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRlZmVyfGVsc2V8ZmFsbHRocm91Z2h8Zm9yfGZ1bmN8Z28oPzp0byk/fGlmfGltcG9ydHxpbnRlcmZhY2V8bWFwfHBhY2thZ2V8cmFuZ2V8cmV0dXJufHNlbGVjdHxzdHJ1Y3R8c3dpdGNofHR5cGV8dmFyKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/Ol98ZmFsc2V8aW90YXxuaWx8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC8vIGJpbmFyeSBhbmQgb2N0YWwgaW50ZWdlcnNcblx0XHQvXFxiMCg/OmJbMDFfXSt8b1swLTdfXSspaT9cXGIvaSxcblx0XHQvLyBoZXhhZGVjaW1hbCBpbnRlZ2VycyBhbmQgZmxvYXRzXG5cdFx0L1xcYjB4KD86W2EtZlxcZF9dKyg/OlxcLlthLWZcXGRfXSopP3xcXC5bYS1mXFxkX10rKSg/OnBbKy1dP1xcZCsoPzpfXFxkKykqKT9pPyg/IVxcdykvaSxcblx0XHQvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHNcblx0XHQvKD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5cXGRbXFxkX10qKSg/OmVbKy1dP1tcXGRfXSspP2k/KD8hXFx3KS9pXG5cdF0sXG5cdCdvcGVyYXRvcic6IC9bKlxcLyVeIT1dPT98XFwrWz0rXT98LVs9LV0/fFxcfFs9fF0/fCYoPzo9fCZ8XFxePT8pP3w+KD86Pj0/fD0pP3w8KD86PD0/fD18LSk/fDo9fFxcLlxcLlxcLi8sXG5cdCdidWlsdGluJzogL1xcYig/OmFwcGVuZHxib29sfGJ5dGV8Y2FwfGNsb3NlfGNvbXBsZXh8Y29tcGxleCg/OjY0fDEyOCl8Y29weXxkZWxldGV8ZXJyb3J8ZmxvYXQoPzozMnw2NCl8dT9pbnQoPzo4fDE2fDMyfDY0KT98aW1hZ3xsZW58bWFrZXxuZXd8cGFuaWN8cHJpbnQoPzpsbik/fHJlYWx8cmVjb3ZlcnxydW5lfHN0cmluZ3x1aW50cHRyKVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdnbycsICdzdHJpbmcnLCB7XG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXC58W14nXFxcXFxcclxcbl0pezAsMTB9Jy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmdvWydjbGFzcy1uYW1lJ107XG5cbi8vIGh0dHBzOi8vZ28uZGV2L3JlZi9tb2QjZ28tbW9kLWZpbGUtbW9kdWxlXG5cblByaXNtLmxhbmd1YWdlc1snZ28tbW9kJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ2dvLW1vZHVsZSddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmVyc2lvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1xccygpW1xcXSxdKXZcXGQrXFwuXFxkK1xcLlxcZCsoPzpbKy1dWy0rLlxcd10qKT8oPyFbXlxccygpW1xcXSxdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2dvLXZlcnNpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccylnb1xccyspXFxkKyg/OlxcLlxcZCspezEsMn0vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD86ZXhjbHVkZXxnb3xtb2R1bGV8cmVwbGFjZXxyZXF1aXJlfHJldHJhY3QpXFxiL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvPT4vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcJF0pKD86XFxcXHsyfSkqKVxcJCg/Olxcdyt8XFx7W157fV0qXFx9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0aW5zaWRlOiBudWxsLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ncmFkbGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLycnJyg/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/JycnfCcoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkqJy8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQna2V5d29yZCc6XG5cdFx0XHQvXFxiKD86YXBwbHl8ZGVmfGRlcGVuZGVuY2llc3xlbHNlfGlmfGltcGxlbWVudGF0aW9ufGltcG9ydHxwbHVnaW58cGx1Z2luc3xwcm9qZWN0fHJlcG9zaXRvcmllc3xyZXBvc2l0b3J5fHNvdXJjZVNldHN8dGFza3N8dmFsKVxcYi8sXG5cdFx0J251bWJlcic6IC9cXGIoPzowYlswMV9dK3wweFtcXGRhLWZfXSsoPzpcXC5bXFxkYS1mX3BcXC1dKyk/fFtcXGRfXSsoPzpcXC5bXFxkX10rKT8oPzplWystXT9cXGQrKT8pW2dsaWRmXT9cXGIvaSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOlxuXHRcdFx0XHQvKF58W14uXSkoPzp+fD09P34/fFxcP1suOl0/fFxcKig/OlsuPV18XFwqPT8pP3xcXC5bQCZdfFxcLlxcLjx8XFwuXFwuKD8hXFwuKXwtWy09Pl0/fFxcK1srPV0/fCE9P3w8KD86PD0/fD0+Pyk/fD4oPzo+Pj89P3w9KT98JlsmPV0/fFxcfFt8PV0/fFxcLz0/fFxcXj0/fCU9PykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXC4rfFt7fVtcXF07KCksOiRdLyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ3JhZGxlJywgJ3N0cmluZycsIHtcblx0XHQnc2hlYmFuZyc6IHtcblx0XHRcdHBhdHRlcm46IC8jIS4rLyxcblx0XHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOlxuXHRcdFx0XHQvXCJcIlwiKD86W15cXFxcXXxcXFxcW1xcc1xcU10pKj9cIlwiXCJ8KFtcIi9dKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDF8XFwkXFwvKD86W14vJF18XFwkKD86Wy8kXXwoPyFbLyRdKSl8XFwvKD8hXFwkKSkqXFwvXFwkLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rLyxcblx0XHRcdH0sXG5cdFx0fSxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ3JhZGxlJywgJ3B1bmN0dWF0aW9uJywge1xuXHRcdCdzcG9jay1ibG9jayc6IC9cXGIoPzphbmR8Y2xlYW51cHxleHBlY3R8Z2l2ZW58c2V0dXB8dGhlbnx3aGVufHdoZXJlKTovLFxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdncmFkbGUnLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlAXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0fSxcblx0fSk7XG5cblx0aW50ZXJwb2xhdGlvbi5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZ3JhZGxlO1xufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZ3JhcGhxbCA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J2Rlc2NyaXB0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oPzpcIlwiXCIoPzpbXlwiXXwoPyFcIlwiXCIpXCIpKlwiXCJcInxcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIpKD89XFxzKlthLXpfXSkvaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2xhbmd1YWdlLW1hcmtkb3duJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cIig/OlwiXCIpPykoPyFcXDEpW1xcc1xcU10rKD89XFwxJCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJcIlwiKD86W15cIl18KD8hXCJcIlwiKVwiKSpcIlwiXCJ8XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC8oPzpcXEItfFxcYilcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J3ZhcmlhYmxlJzogL1xcJFthLXpfXVxcdyovaSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFthLXpfXVxcdyovaSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnYXR0ci1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKig/OlxcKCg/OlteKClcIl18XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKSpcXCkpPzopL2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdhdG9tLWlucHV0Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdypJbnB1dFxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnc2NhbGFyJzogL1xcYig/OkJvb2xlYW58RmxvYXR8SUR8SW50fFN0cmluZylcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aX1xcZF0qXFxiLyxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfGltcGxlbWVudHN8aW50ZXJmYWNlfG9ufHNjYWxhcnx0eXBlfHVuaW9uKVxccyt8Jlxccyp8Olxccyp8XFxbKVtBLVpfXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2ZyYWdtZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxiZnJhZ21lbnRcXHMrfFxcLnszfVxccyooPyFvblxcYikpW2EtekEtWl9dXFx3Ki8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnZGVmaW5pdGlvbi1tdXRhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYm11dGF0aW9uXFxzKylbYS16QS1aX11cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdkZWZpbml0aW9uLXF1ZXJ5Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxicXVlcnlcXHMrKVthLXpBLVpfXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86ZGlyZWN0aXZlfGVudW18ZXh0ZW5kfGZyYWdtZW50fGltcGxlbWVudHN8aW5wdXR8aW50ZXJmYWNlfG11dGF0aW9ufG9ufHF1ZXJ5fHJlcGVhdGFibGV8c2NhbGFyfHNjaGVtYXxzdWJzY3JpcHRpb258dHlwZXx1bmlvbilcXGIvLFxuXHQnb3BlcmF0b3InOiAvWyE9fCZdfFxcLnszfS8sXG5cdCdwcm9wZXJ0eS1xdWVyeSc6IC9cXHcrKD89XFxzKlxcKCkvLFxuXHQnb2JqZWN0JzogL1xcdysoPz1cXHMqXFx7KS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bISgpe31cXFtcXF06PSxdLyxcblx0J3Byb3BlcnR5JzogL1xcdysvXG59O1xuXG5QcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gYWZ0ZXJUb2tlbml6ZUdyYXBocWwoZW52KSB7XG5cdGlmIChlbnYubGFuZ3VhZ2UgIT09ICdncmFwaHFsJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgdGhlIGdyYXBocWwgdG9rZW4gc3RyZWFtIHRoYXQgd2Ugd2FudCB0byBjdXN0b21pemVcblx0ICpcblx0ICogQHR5cGVkZWYge0luc3RhbmNlVHlwZTxpbXBvcnQoXCIuL3ByaXNtLWNvcmVcIilbXCJUb2tlblwiXT59IFRva2VuXG5cdCAqIEB0eXBlIHtUb2tlbltdfVxuXHQgKi9cblx0dmFyIHZhbGlkVG9rZW5zID0gZW52LnRva2Vucy5maWx0ZXIoZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycgJiYgdG9rZW4udHlwZSAhPT0gJ2NvbW1lbnQnICYmIHRva2VuLnR5cGUgIT09ICdzY2FsYXInO1xuXHR9KTtcblxuXHR2YXIgY3VycmVudEluZGV4ID0gMDtcblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIHRoZSB0b2tlbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpbmRleCBoYXMgdGhlIGdpdmVuIHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcblx0ICogQHJldHVybnMge1Rva2VuIHwgdW5kZWZpbmVkfVxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0VG9rZW4ob2Zmc2V0KSB7XG5cdFx0cmV0dXJuIHZhbGlkVG9rZW5zW2N1cnJlbnRJbmRleCArIG9mZnNldF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIHRoZSB0b2tlbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpbmRleCBoYXMgdGhlIGdpdmVuIHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7cmVhZG9ubHkgc3RyaW5nW119IHR5cGVzXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZnVuY3Rpb24gaXNUb2tlblR5cGUodHlwZXMsIG9mZnNldCkge1xuXHRcdG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB0b2tlbiA9IGdldFRva2VuKGkgKyBvZmZzZXQpO1xuXHRcdFx0aWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlICE9PSB0eXBlc1tpXSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zaW5nIGJyYWNrZXQgdG8gYW4gb3BlbmluZyBicmFja2V0LlxuXHQgKlxuXHQgKiBJdCBpcyBhc3N1bWVkIHRoYXQgYHRva2VuW2N1cnJlbnRJbmRleCAtIDFdYCBpcyBhbiBvcGVuaW5nIGJyYWNrZXQuXG5cdCAqXG5cdCAqIElmIG5vIGNsb3NpbmcgYnJhY2tldCBjb3VsZCBiZSBmb3VuZCwgYC0xYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1JlZ0V4cH0gb3BlblxuXHQgKiBAcGFyYW0ge1JlZ0V4cH0gY2xvc2Vcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdGZ1bmN0aW9uIGZpbmRDbG9zaW5nQnJhY2tldChvcGVuLCBjbG9zZSkge1xuXHRcdHZhciBzdGFja0hlaWdodCA9IDE7XG5cblx0XHRmb3IgKHZhciBpID0gY3VycmVudEluZGV4OyBpIDwgdmFsaWRUb2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB0b2tlbiA9IHZhbGlkVG9rZW5zW2ldO1xuXHRcdFx0dmFyIGNvbnRlbnQgPSB0b2tlbi5jb250ZW50O1xuXG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKG9wZW4udGVzdChjb250ZW50KSkge1xuXHRcdFx0XHRcdHN0YWNrSGVpZ2h0Kys7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY2xvc2UudGVzdChjb250ZW50KSkge1xuXHRcdFx0XHRcdHN0YWNrSGVpZ2h0LS07XG5cblx0XHRcdFx0XHRpZiAoc3RhY2tIZWlnaHQgPT09IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGFsaWFzIHRvIHRoZSBnaXZlbiB0b2tlbi5cblx0ICpcblx0ICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRkQWxpYXModG9rZW4sIGFsaWFzKSB7XG5cdFx0dmFyIGFsaWFzZXMgPSB0b2tlbi5hbGlhcztcblx0XHRpZiAoIWFsaWFzZXMpIHtcblx0XHRcdHRva2VuLmFsaWFzID0gYWxpYXNlcyA9IFtdO1xuXHRcdH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcblx0XHRcdHRva2VuLmFsaWFzID0gYWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cdFx0YWxpYXNlcy5wdXNoKGFsaWFzKTtcblx0fVxuXG5cdGZvciAoOyBjdXJyZW50SW5kZXggPCB2YWxpZFRva2Vucy5sZW5ndGg7KSB7XG5cdFx0dmFyIHN0YXJ0VG9rZW4gPSB2YWxpZFRva2Vuc1tjdXJyZW50SW5kZXgrK107XG5cblx0XHQvLyBhZGQgc3BlY2lhbCBhbGlhc2VzIGZvciBtdXRhdGlvbiB0b2tlbnNcblx0XHRpZiAoc3RhcnRUb2tlbi50eXBlID09PSAna2V5d29yZCcgJiYgc3RhcnRUb2tlbi5jb250ZW50ID09PSAnbXV0YXRpb24nKSB7XG5cdFx0XHQvLyBhbnkgYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBpbnB1dCB2YXJpYWJsZXMgKGlmIGFueSlcblx0XHRcdHZhciBpbnB1dFZhcmlhYmxlcyA9IFtdO1xuXG5cdFx0XHRpZiAoaXNUb2tlblR5cGUoWydkZWZpbml0aW9uLW11dGF0aW9uJywgJ3B1bmN0dWF0aW9uJ10pICYmIGdldFRva2VuKDEpLmNvbnRlbnQgPT09ICcoJykge1xuXHRcdFx0XHQvLyBkZWZpbml0aW9uXG5cblx0XHRcdFx0Y3VycmVudEluZGV4ICs9IDI7IC8vIHNraXAgJ2RlZmluaXRpb24tbXV0YXRpb24nIGFuZCAncHVuY3R1YXRpb24nXG5cblx0XHRcdFx0dmFyIGRlZmluaXRpb25FbmQgPSBmaW5kQ2xvc2luZ0JyYWNrZXQoL15cXCgkLywgL15cXCkkLyk7XG5cdFx0XHRcdGlmIChkZWZpbml0aW9uRW5kID09PSAtMSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZmluZCBhbGwgaW5wdXQgdmFyaWFibGVzXG5cdFx0XHRcdGZvciAoOyBjdXJyZW50SW5kZXggPCBkZWZpbml0aW9uRW5kOyBjdXJyZW50SW5kZXgrKykge1xuXHRcdFx0XHRcdHZhciB0ID0gZ2V0VG9rZW4oMCk7XG5cdFx0XHRcdFx0aWYgKHQudHlwZSA9PT0gJ3ZhcmlhYmxlJykge1xuXHRcdFx0XHRcdFx0YWRkQWxpYXModCwgJ3ZhcmlhYmxlLWlucHV0Jyk7XG5cdFx0XHRcdFx0XHRpbnB1dFZhcmlhYmxlcy5wdXNoKHQuY29udGVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudEluZGV4ID0gZGVmaW5pdGlvbkVuZCArIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1Rva2VuVHlwZShbJ3B1bmN0dWF0aW9uJywgJ3Byb3BlcnR5LXF1ZXJ5J10pICYmIGdldFRva2VuKDApLmNvbnRlbnQgPT09ICd7Jykge1xuXHRcdFx0XHRjdXJyZW50SW5kZXgrKzsgLy8gc2tpcCBvcGVuaW5nIGJyYWNrZXRcblxuXHRcdFx0XHRhZGRBbGlhcyhnZXRUb2tlbigwKSwgJ3Byb3BlcnR5LW11dGF0aW9uJyk7XG5cblx0XHRcdFx0aWYgKGlucHV0VmFyaWFibGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR2YXIgbXV0YXRpb25FbmQgPSBmaW5kQ2xvc2luZ0JyYWNrZXQoL15cXHskLywgL15cXH0kLyk7XG5cdFx0XHRcdFx0aWYgKG11dGF0aW9uRW5kID09PSAtMSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gZ2l2ZSByZWZlcmVuY2VzIHRvIGlucHV0IHZhcmlhYmxlcyBhIHNwZWNpYWwgYWxpYXNcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gY3VycmVudEluZGV4OyBpIDwgbXV0YXRpb25FbmQ7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIHZhclRva2VuID0gdmFsaWRUb2tlbnNbaV07XG5cdFx0XHRcdFx0XHRpZiAodmFyVG9rZW4udHlwZSA9PT0gJ3ZhcmlhYmxlJyAmJiBpbnB1dFZhcmlhYmxlcy5pbmRleE9mKHZhclRva2VuLmNvbnRlbnQpID49IDApIHtcblx0XHRcdFx0XHRcdFx0YWRkQWxpYXModmFyVG9rZW4sICd2YXJpYWJsZS1pbnB1dCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcJF0pKD86XFxcXHsyfSkqKVxcJCg/Olxcdyt8XFx7W157fV0qXFx9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9LFxuXHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ncm9vdnkgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9ncm9vdnktbGFuZy5vcmcvc3ludGF4Lmh0bWwjX2RvbGxhcl9zbGFzaHlfc3RyaW5nXG5cdFx0XHRwYXR0ZXJuOiAvJycnKD86W15cXFxcXXxcXFxcW1xcc1xcU10pKj8nJyd8Jyg/OlxcXFwufFteXFxcXCdcXHJcXG5dKSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YXN8YXNzZXJ0fGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZW51bXxleHRlbmRzfGZpbmFsfGZpbmFsbHl8ZmxvYXR8Zm9yfGdvdG98aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnR8aW50ZXJmYWNlfGxvbmd8bmF0aXZlfG5ld3xwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2hvcnR8c3RhdGljfHN0cmljdGZwfHN1cGVyfHN3aXRjaHxzeW5jaHJvbml6ZWR8dGhpc3x0aHJvd3x0aHJvd3N8dHJhaXR8dHJhbnNpZW50fHRyeXx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sXG5cdFx0J251bWJlcic6IC9cXGIoPzowYlswMV9dK3wweFtcXGRhLWZfXSsoPzpcXC5bXFxkYS1mX3BcXC1dKyk/fFtcXGRfXSsoPzpcXC5bXFxkX10rKT8oPzplWystXT9cXGQrKT8pW2dsaWRmXT9cXGIvaSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSkoPzp+fD09P34/fFxcP1suOl0/fFxcKig/OlsuPV18XFwqPT8pP3xcXC5bQCZdfFxcLlxcLjx8XFwuXFwuKD8hXFwuKXwtWy09Pl0/fFxcK1srPV0/fCE9P3w8KD86PD0/fD0+Pyk/fD4oPzo+Pj89P3w9KT98JlsmPV0/fFxcfFt8PV0/fFxcLz0/fFxcXj0/fCU9PykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1xcLit8W3t9W1xcXTsoKSw6JF0vXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2dyb292eScsICdzdHJpbmcnLCB7XG5cdFx0J3NoZWJhbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIyEuKy8sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiB7XG5cdFx0XHQvLyBUT0RPOiBTbGFzaCBzdHJpbmdzIChlLmcuIC9mb28vKSBjYW4gY29udGFpbiBsaW5lIGJyZWFrcyBidXQgdGhpcyB3aWxsIGNhdXNlIGEgbG90IG9mIHRyb3VibGUgd2l0aFxuXHRcdFx0Ly8gc2ltcGxlIGRpdmlzaW9uIChzZWUgSlMgcmVnZXgpLCBzbyBmaW5kIGEgZml4IG1heWJlP1xuXHRcdFx0cGF0dGVybjogL1wiXCJcIig/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/XCJcIlwifChbXCIvXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxfFxcJFxcLyg/OlteLyRdfFxcJCg/OlsvJF18KD8hWy8kXSkpfFxcLyg/IVxcJCkpKlxcL1xcJC8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2dyb292eScsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnc3BvY2stYmxvY2snOiAvXFxiKD86YW5kfGNsZWFudXB8ZXhwZWN0fGdpdmVufHNldHVwfHRoZW58d2hlbnx3aGVyZSk6L1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdncm9vdnknLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlAXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdGludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmdyb292eTtcblxufShQcmlzbSkpO1xuXG4vKiBUT0RPXG5cdEhhbmRsZSBtdWx0aWxpbmUgY29kZSBhZnRlciB0YWdcblx0ICAgICVmb289IHNvbWUgfFxuXHRcdFx0bXVsdGlsaW5lIHxcblx0XHRcdGNvZGUgfFxuKi9cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5oYW1sID0ge1xuXHRcdC8vIE11bHRpbGluZSBzdHVmZiBzaG91bGQgYXBwZWFyIGJlZm9yZSB0aGUgcmVzdFxuXG5cdFx0J211bHRpbGluZS1jb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSkoPzpcXC98LSMpLiooPzooPzpcXHI/XFxufFxccilcXDJbXFx0IF0uKykqLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblxuXHRcdCdtdWx0aWxpbmUtY29kZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSg/Olt+LV18WyYhXT89KSkuKixbXFx0IF0qKD86KD86XFxyP1xcbnxcXHIpXFwyW1xcdCBdLiosW1xcdCBdKikqKD86KD86XFxyP1xcbnxcXHIpXFwyW1xcdCBdLispLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSg/Olt+LV18WyYhXT89KSkuKlxcfFtcXHQgXSooPzooPzpcXHI/XFxufFxccilcXDJbXFx0IF0uKlxcfFtcXHQgXSopKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0Ly8gU2VlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgZm9yIGtub3duIGZpbHRlcnNcblx0XHQnZmlsdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSk6W1xcdy1dKyg/Oig/Olxccj9cXG58XFxyKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ZpbHRlci1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eOltcXHctXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdtYXJrdXAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKik8LisvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFxuXHRcdH0sXG5cdFx0J2RvY3R5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKikhISEoPzogLispPy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndGFnJzoge1xuXHRcdFx0Ly8gQWxsb3dzIGZvciBvbmUgbmVzdGVkIGdyb3VwIG9mIGJyYWNlc1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVtcXHQgXSopWyUuI11bXFx3XFwtIy5dKltcXHdcXC1dKD86XFwoW14pXStcXCl8XFx7KD86XFx7W159XStcXH18W157fV0pK1xcfXxcXFtbXlxcXV0rXFxdKSpbXFwvPD5dKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHRyaWJ1dGVzJzogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIExvb2tiZWhpbmQgdHJpZXMgdG8gcHJldmVudCBpbnRlcnBvbGF0aW9ucyBmcm9tIGJyZWFraW5nIGl0IGFsbFxuXHRcdFx0XHRcdFx0Ly8gQWxsb3dzIGZvciBvbmUgbmVzdGVkIGdyb3VwIG9mIGJyYWNlc1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhefFteI10pXFx7KD86XFx7W159XStcXH18W157fV0pK1xcfS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKSg/OlwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxbXilcXHNdKykvLFxuXHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2F0dHItbmFtZSc6IC9bXFx3Oi1dKyg/PVxccyohPz18XFxzKlssKV0pLyxcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1s9KCksXS9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXFtbXlxcXV0rXFxdLyxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD5dL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvZGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKig/Olt+LV18WyYhXT89KSkuKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdH0sXG5cdFx0Ly8gSW50ZXJwb2xhdGlvbnMgaW4gcGxhaW4gdGV4dFxuXHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyNcXHtbXn1dK1xcfS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiNcXHt8XFx9JC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3J1YnknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKilbfj1cXC0mIV0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH07XG5cblx0dmFyIGZpbHRlcl9wYXR0ZXJuID0gJygoPzpefFxcXFxyP1xcXFxufFxcXFxyKShbXFxcXHQgXSopKTp7e2ZpbHRlcl9uYW1lfX0oPzooPzpcXFxccj9cXFxcbnxcXFxccikoPzpcXFxcMltcXFxcdCBdLit8XFxcXHMqPyg/PVxcXFxyP1xcXFxufFxcXFxyKSkpKyc7XG5cblx0Ly8gTm9uIGV4aGF1c3RpdmUgbGlzdCBvZiBhdmFpbGFibGUgZmlsdGVycyBhbmQgYXNzb2NpYXRlZCBsYW5ndWFnZXNcblx0dmFyIGZpbHRlcnMgPSBbXG5cdFx0J2NzcycsXG5cdFx0eyBmaWx0ZXI6ICdjb2ZmZWUnLCBsYW5ndWFnZTogJ2NvZmZlZXNjcmlwdCcgfSxcblx0XHQnZXJiJyxcblx0XHQnamF2YXNjcmlwdCcsXG5cdFx0J2xlc3MnLFxuXHRcdCdtYXJrZG93bicsXG5cdFx0J3J1YnknLFxuXHRcdCdzY3NzJyxcblx0XHQndGV4dGlsZSdcblx0XTtcblx0dmFyIGFsbF9maWx0ZXJzID0ge307XG5cdGZvciAodmFyIGkgPSAwLCBsID0gZmlsdGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHR2YXIgZmlsdGVyID0gZmlsdGVyc1tpXTtcblx0XHRmaWx0ZXIgPSB0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyA/IHsgZmlsdGVyOiBmaWx0ZXIsIGxhbmd1YWdlOiBmaWx0ZXIgfSA6IGZpbHRlcjtcblx0XHRpZiAoUHJpc20ubGFuZ3VhZ2VzW2ZpbHRlci5sYW5ndWFnZV0pIHtcblx0XHRcdGFsbF9maWx0ZXJzWydmaWx0ZXItJyArIGZpbHRlci5maWx0ZXJdID0ge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoZmlsdGVyX3BhdHRlcm4ucmVwbGFjZSgne3tmaWx0ZXJfbmFtZX19JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyLmZpbHRlcjsgfSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZmlsdGVyLW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXFx3LV0rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3RleHQnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiBbZmlsdGVyLmxhbmd1YWdlLCAnbGFuZ3VhZ2UtJyArIGZpbHRlci5sYW5ndWFnZV0sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tmaWx0ZXIubGFuZ3VhZ2VdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2hhbWwnLCAnZmlsdGVyJywgYWxsX2ZpbHRlcnMpO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaGFuZGxlYmFycyA9IHtcblx0XHQnY29tbWVudCc6IC9cXHtcXHshW1xcc1xcU10qP1xcfVxcfS8sXG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7XFx7XFx7P3xcXH1cXH1cXH0/JC8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IC8oW1wiJ10pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/Lyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J2Jsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL14oXFxzKig/On5cXHMqKT8pWyNcXC9dXFxTKz8oPz1cXHMqKD86flxccyopPyR8XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J2JyYWNrZXRzJzoge1xuXHRcdFx0cGF0dGVybjogL1xcW1teXFxdXStcXF0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFxbfFxcXS8sXG5cdFx0XHRcdHZhcmlhYmxlOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1shXCIjJSYnOigpKissLlxcLzs8PT5AXFxbXFxcXFxcXV5ge3x9fl0vLFxuXHRcdCd2YXJpYWJsZSc6IC9bXiFcIiMlJicoKSorLFxcLzs8PT5AXFxbXFxcXFxcXV5ge3x9flxcc10rL1xuXHR9O1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdHZhciBoYW5kbGViYXJzUGF0dGVybiA9IC9cXHtcXHtcXHtbXFxzXFxTXSs/XFx9XFx9XFx9fFxce1xce1tcXHNcXFNdKz9cXH1cXH0vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnaGFuZGxlYmFycycsIGhhbmRsZWJhcnNQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnaGFuZGxlYmFycycpO1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaGJzID0gUHJpc20ubGFuZ3VhZ2VzLmhhbmRsZWJhcnM7XG5cdFByaXNtLmxhbmd1YWdlcy5tdXN0YWNoZSA9IFByaXNtLmxhbmd1YWdlcy5oYW5kbGViYXJzO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5oYXNrZWxsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXSkoPzotLSg/Oig/PS4pW14tISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXS4qfCQpfFxcey1bXFxzXFxTXSo/LVxcfSkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W15cXFxcJ118XFxcXCg/OlthYmZucnR2XFxcXFwiJyZdfFxcXltBLVpAW1xcXV5fXXxBQ0t8QkVMfEJTfENBTnxDUnxEQzF8REMyfERDM3xEQzR8REVMfERMRXxFTXxFTlF8RU9UfEVTQ3xFVEJ8RVRYfEZGfEZTfEdTfEhUfExGfE5BS3xOVUx8UlN8U0l8U098U09IfFNQfFNUWHxTVUJ8U1lOfFVTfFZUfFxcZCt8b1swLTddK3x4WzAtOWEtZkEtRl0rKSknLyxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFxcIl18XFxcXCg/OlxcU3xcXHMrXFxcXCkpKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86Y2FzZXxjbGFzc3xkYXRhfGRlcml2aW5nfGRvfGVsc2V8aWZ8aW58aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8bW9kdWxlfG5ld3R5cGV8b2Z8cHJpbWl0aXZlfHRoZW58dHlwZXx3aGVyZSlcXGIvLFxuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHQvLyBUaGUgaW1wb3J0ZWQgb3IgaGlkZGVuIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBpbXBvcnRcblx0XHQvLyBzdGF0ZW1lbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZSBleGFjdGx5IGxpa2Vcblx0XHQvLyB3ZSBkbyBmb3IgdGhlIG5hbWVzIGluIHRoZSBwcm9ncmFtLlxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopaW1wb3J0XFxzKyg/OnF1YWxpZmllZFxccyspPyg/OltBLVpdW1xcdyddKikoPzpcXC5bQS1aXVtcXHcnXSopKig/Olxccythc1xccysoPzpbQS1aXVtcXHcnXSopKD86XFwuW0EtWl1bXFx3J10qKSopPyg/OlxccytoaWRpbmdcXGIpPy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGIoPzphc3xoaWRpbmd8aW1wb3J0fHF1YWxpZmllZClcXGIvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cdC8vIFRoZXNlIGFyZSBidWlsdGluIHZhcmlhYmxlcyBvbmx5LiBDb25zdHJ1Y3RvcnMgYXJlIGhpZ2hsaWdodGVkIGxhdGVyIGFzIGEgY29uc3RhbnQuXG5cdCdidWlsdGluJzogL1xcYig/OmFic3xhY29zfGFjb3NofGFsbHxhbmR8YW55fGFwcGVuZEZpbGV8YXBwcm94UmF0aW9uYWx8YXNUeXBlT2Z8YXNpbnxhc2luaHxhdGFufGF0YW4yfGF0YW5ofGJhc2ljSU9SdW58YnJlYWt8Y2F0Y2h8Y2VpbGluZ3xjaHJ8Y29tcGFyZXxjb25jYXR8Y29uY2F0TWFwfGNvbnN0fGNvc3xjb3NofGN1cnJ5fGN5Y2xlfGRlY29kZUZsb2F0fGRlbm9taW5hdG9yfGRpZ2l0VG9JbnR8ZGl2fGRpdk1vZHxkcm9wfGRyb3BXaGlsZXxlaXRoZXJ8ZWxlbXxlbmNvZGVGbG9hdHxlbnVtRnJvbXxlbnVtRnJvbVRoZW58ZW51bUZyb21UaGVuVG98ZW51bUZyb21Ub3xlcnJvcnxldmVufGV4cHxleHBvbmVudHxmYWlsfGZpbHRlcnxmbGlwfGZsb2F0RGlnaXRzfGZsb2F0UmFkaXh8ZmxvYXRSYW5nZXxmbG9vcnxmbWFwfGZvbGRsfGZvbGRsMXxmb2xkcnxmb2xkcjF8ZnJvbURvdWJsZXxmcm9tRW51bXxmcm9tSW50fGZyb21JbnRlZ2VyfGZyb21JbnRlZ3JhbHxmcm9tUmF0aW9uYWx8ZnN0fGdjZHxnZXRDaGFyfGdldENvbnRlbnRzfGdldExpbmV8Z3JvdXB8aGVhZHxpZHxpblJhbmdlfGluZGV4fGluaXR8aW50VG9EaWdpdHxpbnRlcmFjdHxpb0Vycm9yfGlzQWxwaGF8aXNBbHBoYU51bXxpc0FzY2lpfGlzQ29udHJvbHxpc0Rlbm9ybWFsaXplZHxpc0RpZ2l0fGlzSGV4RGlnaXR8aXNJRUVFfGlzSW5maW5pdGV8aXNMb3dlcnxpc05hTnxpc05lZ2F0aXZlWmVyb3xpc09jdERpZ2l0fGlzUHJpbnR8aXNTcGFjZXxpc1VwcGVyfGl0ZXJhdGV8bGFzdHxsY218bGVuZ3RofGxleHxsZXhEaWdpdHN8bGV4TGl0Q2hhcnxsaW5lc3xsb2d8bG9nQmFzZXxsb29rdXB8bWFwfG1hcE18bWFwTV98bWF4fG1heEJvdW5kfG1heGltdW18bWF5YmV8bWlufG1pbkJvdW5kfG1pbmltdW18bW9kfG5lZ2F0ZXxub3R8bm90RWxlbXxudWxsfG51bWVyYXRvcnxvZGR8b3J8b3JkfG90aGVyd2lzZXxwYWNrfHBpfHByZWR8cHJpbUV4aXRXaXRofHByaW50fHByb2R1Y3R8cHJvcGVyRnJhY3Rpb258cHV0Q2hhcnxwdXRTdHJ8cHV0U3RyTG58cXVvdHxxdW90UmVtfHJhbmdlfHJhbmdlU2l6ZXxyZWFkfHJlYWREZWN8cmVhZEZpbGV8cmVhZEZsb2F0fHJlYWRIZXh8cmVhZElPfHJlYWRJbnR8cmVhZExpc3R8cmVhZExpdENoYXJ8cmVhZExufHJlYWRPY3R8cmVhZFBhcmVufHJlYWRTaWduZWR8cmVhZHN8cmVhZHNQcmVjfHJlYWxUb0ZyYWN8cmVjaXB8cmVtfHJlcGVhdHxyZXBsaWNhdGV8cmV0dXJufHJldmVyc2V8cm91bmR8c2NhbGVGbG9hdHxzY2FubHxzY2FubDF8c2NhbnJ8c2NhbnIxfHNlcXxzZXF1ZW5jZXxzZXF1ZW5jZV98c2hvd3xzaG93Q2hhcnxzaG93SW50fHNob3dMaXN0fHNob3dMaXRDaGFyfHNob3dQYXJlbnxzaG93U2lnbmVkfHNob3dTdHJpbmd8c2hvd3N8c2hvd3NQcmVjfHNpZ25pZmljYW5kfHNpZ251bXxzaW58c2luaHxzbmR8c29ydHxzcGFufHNwbGl0QXR8c3FydHxzdWJ0cmFjdHxzdWNjfHN1bXx0YWlsfHRha2V8dGFrZVdoaWxlfHRhbnx0YW5ofHRocmVhZFRvSU9SZXN1bHR8dG9FbnVtfHRvSW50fHRvSW50ZWdlcnx0b0xvd2VyfHRvUmF0aW9uYWx8dG9VcHBlcnx0cnVuY2F0ZXx1bmN1cnJ5fHVuZGVmaW5lZHx1bmxpbmVzfHVudGlsfHVud29yZHN8dW56aXB8dW56aXAzfHVzZXJFcnJvcnx3b3Jkc3x3cml0ZUZpbGV8emlwfHppcDN8emlwV2l0aHx6aXBXaXRoMylcXGIvLFxuXHQvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHwgb2N0YWwgaW50ZWdlcnMgfCBoZXhhZGVjaW1hbCBpbnRlZ2Vyc1xuXHQnbnVtYmVyJzogL1xcYig/OlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT98MG9bMC03XSt8MHhbMC05YS1mXSspXFxiL2ksXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHQvLyBpbmZpeCBvcGVyYXRvclxuXHRcdFx0cGF0dGVybjogL2AoPzpbQS1aXVtcXHcnXSpcXC4pKltfYS16XVtcXHcnXSpgLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gZnVuY3Rpb24gY29tcG9zaXRpb25cblx0XHRcdHBhdHRlcm46IC8oXFxzKVxcLig/PVxccykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gTW9zdCBvZiB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBtZWFuaW5nIG9mIGEgc2luZ2xlICcuJy5cblx0XHQvLyBJZiBpdCBzdGFuZHMgYWxvbmUgZnJlZWx5LCBpdCBpcyB0aGUgZnVuY3Rpb24gY29tcG9zaXRpb24uXG5cdFx0Ly8gSXQgbWF5IGFsc28gYmUgYSBzZXBhcmF0b3IgYmV0d2VlbiBhIG1vZHVsZSBuYW1lIGFuZCBhbiBpZGVudGlmaWVyID0+IG5vXG5cdFx0Ly8gb3BlcmF0b3IuIElmIGl0IGNvbWVzIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIGl0IGlzIGFuXG5cdFx0Ly8gb3BlcmF0b3IgdG9vLlxuXHRcdC8vXG5cdFx0Ly8gVGhpcyByZWdleCBtZWFuczogL1stISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXSsvIHdpdGhvdXQgL1xcLi8uXG5cdFx0L1stISMkJSorPT8mQHx+Ojw+XlxcXFxcXC9dWy0hIyQlKis9PyZAfH4uOjw+XlxcXFxcXC9dKnxcXC5bLSEjJCUqKz0/JkB8fi46PD5eXFxcXFxcL10rLyxcblx0XSxcblx0Ly8gSW4gSGFza2VsbCwgbmVhcmx5IGV2ZXJ5dGhpbmcgaXMgYSB2YXJpYWJsZSwgZG8gbm90IGhpZ2hsaWdodCB0aGVzZS5cblx0J2h2YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86W0EtWl1bXFx3J10qXFwuKSpbX2Etel1bXFx3J10qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQnY29uc3RhbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OltBLVpdW1xcdyddKlxcLikqW0EtWl1bXFx3J10qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaHMgPSBQcmlzbS5sYW5ndWFnZXMuaGFza2VsbDtcblxuUHJpc20ubGFuZ3VhZ2VzLmhheGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHQvLyBTdHJpbmdzIGNhbiBiZSBtdWx0aS1saW5lXG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmFic3RyYWN0fGNsYXNzfGVudW18ZXh0ZW5kc3xpbXBsZW1lbnRzfGludGVyZmFjZXxuZXd8dHlwZWRlZilcXHMrKVtBLVpfXVxcdyovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdC8vIGJhc2VkIG9uIG5hbWluZyBjb252ZW50aW9uXG5cdFx0L1xcYltBLVpdXFx3Ki9cblx0XSxcblx0Ly8gVGhlIGZpbmFsIGxvb2stYWhlYWQgcHJldmVudHMgaGlnaGxpZ2h0aW5nIG9mIGtleXdvcmRzIGlmIGV4cHJlc3Npb25zIHN1Y2ggYXMgXCJoYXhlLm1hY3JvLkV4cHJcIlxuXHQna2V5d29yZCc6IC9cXGJ0aGlzXFxifFxcYig/OmFic3RyYWN0fGFzfGJyZWFrfGNhc2V8Y2FzdHxjYXRjaHxjbGFzc3xjb250aW51ZXxkZWZhdWx0fGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4dGVuZHN8ZXh0ZXJufGZpbmFsfGZvcnxmcm9tfGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGlubGluZXxpbnRlcmZhY2V8bWFjcm98bmV3fG51bGx8b3BlcmF0b3J8b3ZlcmxvYWR8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHB1YmxpY3xyZXR1cm58c3RhdGljfHN1cGVyfHN3aXRjaHx0aHJvd3x0b3x0cnl8dHlwZWRlZnx1bnR5cGVkfHVzaW5nfHZhcnx3aGlsZSkoPyFcXC4pXFxiLyxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKig/OjxbXjw+XSo+XFxzKik/XFwoKS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvXFwuezN9fFxcK1xcK3wtLXwmJnxcXHxcXHx8LT58PT58KD86PDw/fD57MSwzfXxbLSsqLyUhPSZ8Xl0pPT98Wz86fl0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaGF4ZScsICdzdHJpbmcnLCB7XG5cdCdzdHJpbmctaW50ZXJwb2xhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcJCg/Olxcdyt8XFx7W157fV0rXFx9KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5oYXhlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2hheGUnLCAnY2xhc3MtbmFtZScsIHtcblx0J3JlZ2V4Jzoge1xuXHRcdHBhdHRlcm46IC9+XFwvKD86W15cXC9cXFxcXFxyXFxuXXxcXFxcLikrXFwvW2Etel0qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVnZXgtZmxhZ3MnOiAvXFxiW2Etel0rJC8sXG5cdFx0XHQncmVnZXgtc291cmNlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXih+XFwvKVtcXHNcXFNdKyg/PVxcLyQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1yZWdleCcsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJlZ2V4XG5cdFx0XHR9LFxuXHRcdFx0J3JlZ2V4LWRlbGltaXRlcic6IC9eflxcL3xcXC8kLyxcblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdoYXhlJywgJ2tleXdvcmQnLCB7XG5cdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0cGF0dGVybjogLyMoPzplbHNlfGVsc2VpZnxlbmR8aWYpXFxiLiovLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdtZXRhZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvQDo/W1xcdy5dKy8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdyZWlmaWNhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFwkKD86XFx3K3woPz1cXHspKS8sXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaGNsID0ge1xuXHQnY29tbWVudCc6IC8oPzpcXC9cXC98IykuKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0J2hlcmVkb2MnOiB7XG5cdFx0cGF0dGVybjogLzw8LT8oXFx3K1xcYilbXFxzXFxTXSo/XlsgXFx0XSpcXDEvbSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oPzpkYXRhfHJlc291cmNlKVxccysoPzpcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiKSg/PVxccytcIltcXHctXStcIlxccytcXHspL2ksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3R5cGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhyZXNvdXJjZXxkYXRhfFxccyspKD86XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIikvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oPzpiYWNrZW5kfG1vZHVsZXxvdXRwdXR8cHJvdmlkZXJ8cHJvdmlzaW9uZXJ8dmFyaWFibGUpXFxzKyg/OltcXHctXSt8XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIilcXHMrKD89XFx7KS9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0eXBlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oYmFja2VuZHxtb2R1bGV8b3V0cHV0fHByb3ZpZGVyfHByb3Zpc2lvbmVyfHZhcmlhYmxlKVxccysoPzpbXFx3LV0rfFwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIpXFxzKy9pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0L1tcXHctXSsoPz1cXHMrXFx7KS9cblx0XSxcblx0J3Byb3BlcnR5JzogW1xuXHRcdC9bLVxcd1xcLl0rKD89XFxzKj0oPyE9KSkvLFxuXHRcdC9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pK1wiKD89XFxzKls6PV0pLyxcblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFwkXCJdfFxcXFxbXFxzXFxTXXxcXCQoPzooPz1cIil8XFwkKyg/IVxcJCl8W15cIiR7XSl8XFwkXFx7KD86W157fVwiXXxcIig/OlteXFxcXFwiXXxcXFxcW1xcc1xcU10pKlwiKSpcXH0pKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteJF0pXFwkXFx7KD86W157fVwiXXxcIig/OlteXFxcXFwiXXxcXFxcW1xcc1xcU10pKlwiKSpcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndHlwZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y291bnR8ZGF0YXxsb2NhbHxtb2R1bGV8cGF0aHxzZWxmfHRlcnJhZm9ybXx2YXIpXFxiXFwuKVtcXHdcXCpdKy9pLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzpjb3VudHxkYXRhfGxvY2FsfG1vZHVsZXxwYXRofHNlbGZ8dGVycmFmb3JtfHZhcilcXGIvaSxcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxcKCkvLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIi8sXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifFxcYlxcZCsoPzpcXC5cXGQqKT8oPzplWystXT9cXGQrKT8vaSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyFcXCQjJSYnKCkqKywuXFwvOzw9PkBcXFtcXFxcXFxdXmB7fH1+PzpdLyxcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9XG5cdH0sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8XFxiXFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspPy9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWz1cXFtcXF17fV0vLFxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmhsc2wgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge1xuXG5cdC8vIFJlZ2FyZGluZyBrZXl3b3JkcyBhbmQgY2xhc3MgbmFtZXM6XG5cdC8vIFRoZSBsaXN0IG9mIGFsbCBrZXl3b3JkcyB3YXMgc3BsaXQgaW50byAna2V5d29yZCcgYW5kICdjbGFzcy1uYW1lJyB0b2tlbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFyZSBjYXBpdGFsaXplZC5cblx0Ly8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9kaXJlY3QzZGhsc2wvZHgtZ3JhcGhpY3MtaGxzbC1hcHBlbmRpeC1rZXl3b3Jkc1xuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2RpcmVjdDNkaGxzbC9keC1ncmFwaGljcy1obHNsLWFwcGVuZGl4LXJlc2VydmVkLXdvcmRzXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdFByaXNtLmxhbmd1YWdlcy5jWydjbGFzcy1uYW1lJ10sXG5cdFx0L1xcYig/OkFwcGVuZFN0cnVjdHVyZWRCdWZmZXJ8QmxlbmRTdGF0ZXxCdWZmZXJ8Qnl0ZUFkZHJlc3NCdWZmZXJ8Q29tcGlsZVNoYWRlcnxDb21wdXRlU2hhZGVyfENvbnN1bWVTdHJ1Y3R1cmVkQnVmZmVyfERlcHRoU3RlbmNpbFN0YXRlfERlcHRoU3RlbmNpbFZpZXd8RG9tYWluU2hhZGVyfEdlb21ldHJ5U2hhZGVyfEh1bGxzaGFkZXJ8SW5wdXRQYXRjaHxMaW5lU3RyZWFtfE91dHB1dFBhdGNofFBpeGVsU2hhZGVyfFBvaW50U3RyZWFtfFJXQnVmZmVyfFJXQnl0ZUFkZHJlc3NCdWZmZXJ8UldTdHJ1Y3R1cmVkQnVmZmVyfFJXVGV4dHVyZSg/OjFEfDFEQXJyYXl8MkR8MkRBcnJheXwzRCl8UmFzdGVyaXplclN0YXRlfFJlbmRlclRhcmdldFZpZXd8U2FtcGxlckNvbXBhcmlzb25TdGF0ZXxTYW1wbGVyU3RhdGV8U3RydWN0dXJlZEJ1ZmZlcnxUZXh0dXJlKD86MUR8MURBcnJheXwyRHwyREFycmF5fDJETVN8MkRNU0FycmF5fDNEfEN1YmV8Q3ViZUFycmF5KXxUcmlhbmdsZVN0cmVhbXxWZXJ0ZXhTaGFkZXIpXFxiL1xuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHQvLyBITFNMIGtleXdvcmRcblx0XHQvXFxiKD86YXNtfGFzbV9mcmFnbWVudHxhdXRvfGJyZWFrfGNhc2V8Y2F0Y2h8Y2J1ZmZlcnxjZW50cm9pZHxjaGFyfGNsYXNzfGNvbHVtbl9tYWpvcnxjb21waWxlfGNvbXBpbGVfZnJhZ21lbnR8Y29uc3R8Y29uc3RfY2FzdHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkaXNjYXJkfGRvfGR5bmFtaWNfY2FzdHxlbHNlfGVudW18ZXhwbGljaXR8ZXhwb3J0fGV4dGVybnxmb3J8ZnJpZW5kfGZ4Z3JvdXB8Z290b3xncm91cHNoYXJlZHxpZnxpbnxpbmxpbmV8aW5vdXR8aW50ZXJmYWNlfGxpbmV8bGluZWFkanxsaW5lYXJ8bG9uZ3xtYXRyaXh8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG5vaW50ZXJwb2xhdGlvbnxub3BlcnNwZWN0aXZlfG9wZXJhdG9yfG91dHxwYWNrb2Zmc2V0fHBhc3N8cGl4ZWxmcmFnbWVudHxwb2ludHxwcmVjaXNlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWdpc3RlcnxyZWludGVycHJldF9jYXN0fHJldHVybnxyb3dfbWFqb3J8c2FtcGxlfHNhbXBsZXJ8c2hhcmVkfHNob3J0fHNpZ25lZHxzaXplb2Z8c25vcm18c3RhdGVibG9ja3xzdGF0ZWJsb2NrX3N0YXRlfHN0YXRpY3xzdGF0aWNfY2FzdHxzdHJpbmd8c3RydWN0fHN3aXRjaHx0YnVmZmVyfHRlY2huaXF1ZXx0ZWNobmlxdWUxMHx0ZWNobmlxdWUxMXx0ZW1wbGF0ZXx0ZXh0dXJlfHRoaXN8dGhyb3d8dHJpYW5nbGV8dHJpYW5nbGVhZGp8dHJ5fHR5cGVkZWZ8dHlwZW5hbWV8dW5pZm9ybXx1bmlvbnx1bm9ybXx1bnNpZ25lZHx1c2luZ3x2ZWN0b3J8dmVydGV4ZnJhZ21lbnR8dmlydHVhbHx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sXG5cdFx0Ly8gc2NhbGFyLCB2ZWN0b3IsIGFuZCBtYXRyaXggdHlwZXNcblx0XHQvXFxiKD86Ym9vbHxkb3VibGV8ZHdvcmR8ZmxvYXR8aGFsZnxpbnR8bWluKD86MTBmbG9hdHwxMmludHwxNig/OmZsb2F0fGludHx1aW50KSl8dWludCkoPzpbMS00XSg/OnhbMS00XSk/KT9cXGIvXG5cdF0sXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZGlyZWN0M2RobHNsL2R4LWdyYXBoaWNzLWhsc2wtYXBwZW5kaXgtZ3JhbW1hciNmbG9hdGluZy1wb2ludC1udW1iZXJzXG5cdCdudW1iZXInOiAvKD86KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspP3xcXGIweFtcXGRhLWZBLUZdKylbZkZoSGxMdVVdP1xcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ob29uID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvOjouKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIl0qXCJ8J1teJ10qJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjb25zdGFudCc6IC8lKD86XFwuW255XXxbXFx3LV0rKS8sXG5cdCdjbGFzcy1uYW1lJzogL0AoPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXCovaSxcblx0J2Z1bmN0aW9uJzogLyg/OlxcK1stK10gezJ9KT8oPzpbYS16XSg/OlthLXowLTktXSpbYS16MC05XSk/KS8sXG5cdCdrZXl3b3JkJzogL1xcLltcXF5cXCtcXCo9XFw/XXwhWz48OlxcLj1cXD8hXXw9Wz58OixcXC5cXC1cXF48KzsvflxcKlxcP118XFw/Wz58OlxcLlxcLVxcXjxcXCsmfj1AIV18XFx8W1xcJF8lOlxcLlxcLVxcXn5cXCo9QFxcP118XFwrW3xcXCRcXCtcXCpdfDpbX1xcLVxcXlxcK35cXCpdfCVbXzpcXC5cXC1cXF5cXCt+XFwqPV18XFxeW3w6XFwuXFwtXFwrJn5cXCo9XFw/XXxcXCRbfF8lOjw+XFwtXFxeJn5APVxcP118O1s6PFxcKztcXC9+XFwqPV18fls+fFxcJF8lPFxcK1xcLyY9XFw/IV18LS18PT0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBoZWFkZXJWYWx1ZU9mKG5hbWUpIHtcblx0XHRyZXR1cm4gUmVnRXhwKCcoXig/OicgKyBuYW1lICsgJyk6WyBcXHRdKig/IVsgXFx0XSkpW15dKycsICdpJyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuaHR0cCA9IHtcblx0XHQncmVxdWVzdC1saW5lJzoge1xuXHRcdFx0cGF0dGVybjogL14oPzpDT05ORUNUfERFTEVURXxHRVR8SEVBRHxPUFRJT05TfFBBVENIfFBPU1R8UFJJfFBVVHxTRUFSQ0h8VFJBQ0UpXFxzKD86aHR0cHM/OlxcL1xcL3xcXC8pXFxTKlxcc0hUVFBcXC9bXFxkLl0rL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gSFRUUCBNZXRob2Rcblx0XHRcdFx0J21ldGhvZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXltBLVpdK1xcYi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gUmVxdWVzdCBUYXJnZXQgZS5nLiBodHRwOi8vZXhhbXBsZS5jb20sIC9wYXRoL3RvL2ZpbGVcblx0XHRcdFx0J3JlcXVlc3QtdGFyZ2V0Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccykoPzpodHRwcz86XFwvXFwvfFxcLylcXFMqKD89XFxzKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3VybCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMudXJpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIEhUVFAgVmVyc2lvblxuXHRcdFx0XHQnaHR0cC12ZXJzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccylIVFRQXFwvW1xcZC5dKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3Jlc3BvbnNlLXN0YXR1cyc6IHtcblx0XHRcdHBhdHRlcm46IC9eSFRUUFxcL1tcXGQuXSsgXFxkKyAuKy9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEhUVFAgVmVyc2lvblxuXHRcdFx0XHQnaHR0cC12ZXJzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eSFRUUFxcL1tcXGQuXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFN0YXR1cyBDb2RlXG5cdFx0XHRcdCdzdGF0dXMtY29kZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMpXFxkKyg/PVxccykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFJlYXNvbiBQaHJhc2Vcblx0XHRcdFx0J3JlYXNvbi1waHJhc2UnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKS4rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaGVhZGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15bXFx3LV0rOi4rKD86KD86XFxyXFxuP3xcXG4pWyBcXHRdLispKi9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdoZWFkZXItdmFsdWUnOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6IFsnY3NwJywgJ2xhbmd1YWdlcy1jc3AnXSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNzcFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvUHVibGljLUtleS1QaW5zKD86LVJlcG9ydC1Pbmx5KT8vLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6IFsnaHBrcCcsICdsYW5ndWFnZXMtaHBrcCddLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuaHBrcFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eS8uc291cmNlKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogWydoc3RzJywgJ2xhbmd1YWdlcy1oc3RzJ10sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5oc3RzXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBoZWFkZXJWYWx1ZU9mKC9bXjpdKy8uc291cmNlKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdoZWFkZXItbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlteOl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eOi9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gQ3JlYXRlIGEgbWFwcGluZyBvZiBDb250ZW50LVR5cGUgaGVhZGVycyB0byBsYW5ndWFnZSBkZWZpbml0aW9uc1xuXHR2YXIgbGFuZ3MgPSBQcmlzbS5sYW5ndWFnZXM7XG5cdHZhciBodHRwTGFuZ3VhZ2VzID0ge1xuXHRcdCdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzogbGFuZ3MuamF2YXNjcmlwdCxcblx0XHQnYXBwbGljYXRpb24vanNvbic6IGxhbmdzLmpzb24gfHwgbGFuZ3MuamF2YXNjcmlwdCxcblx0XHQnYXBwbGljYXRpb24veG1sJzogbGFuZ3MueG1sLFxuXHRcdCd0ZXh0L3htbCc6IGxhbmdzLnhtbCxcblx0XHQndGV4dC9odG1sJzogbGFuZ3MuaHRtbCxcblx0XHQndGV4dC9jc3MnOiBsYW5ncy5jc3MsXG5cdFx0J3RleHQvcGxhaW4nOiBsYW5ncy5wbGFpblxuXHR9O1xuXG5cdC8vIERlY2xhcmUgd2hpY2ggdHlwZXMgY2FuIGFsc28gYmUgc3VmZml4ZXNcblx0dmFyIHN1ZmZpeFR5cGVzID0ge1xuXHRcdCdhcHBsaWNhdGlvbi9qc29uJzogdHJ1ZSxcblx0XHQnYXBwbGljYXRpb24veG1sJzogdHJ1ZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcGF0dGVybiBmb3IgdGhlIGdpdmVuIGNvbnRlbnQgdHlwZSB3aGljaCBtYXRjaGVzIGl0IGFuZCBhbnkgdHlwZSB3aGljaCBoYXMgaXQgYXMgYSBzdWZmaXguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50VHlwZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0U3VmZml4UGF0dGVybihjb250ZW50VHlwZSkge1xuXHRcdHZhciBzdWZmaXggPSBjb250ZW50VHlwZS5yZXBsYWNlKC9eW2Etel0rXFwvLywgJycpO1xuXHRcdHZhciBzdWZmaXhQYXR0ZXJuID0gJ1xcXFx3Ky8oPzpbXFxcXHcuLV0rXFxcXCspKycgKyBzdWZmaXggKyAnKD8hWytcXFxcdy4tXSknO1xuXHRcdHJldHVybiAnKD86JyArIGNvbnRlbnRUeXBlICsgJ3wnICsgc3VmZml4UGF0dGVybiArICcpJztcblx0fVxuXG5cdC8vIEluc2VydCBlYWNoIGNvbnRlbnQgdHlwZSBwYXJzZXIgdGhhdCBoYXMgaXRzIGFzc29jaWF0ZWQgbGFuZ3VhZ2Vcblx0Ly8gY3VycmVudGx5IGxvYWRlZC5cblx0dmFyIG9wdGlvbnM7XG5cdGZvciAodmFyIGNvbnRlbnRUeXBlIGluIGh0dHBMYW5ndWFnZXMpIHtcblx0XHRpZiAoaHR0cExhbmd1YWdlc1tjb250ZW50VHlwZV0pIHtcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0XHR2YXIgcGF0dGVybiA9IHN1ZmZpeFR5cGVzW2NvbnRlbnRUeXBlXSA/IGdldFN1ZmZpeFBhdHRlcm4oY29udGVudFR5cGUpIDogY29udGVudFR5cGU7XG5cdFx0XHRvcHRpb25zW2NvbnRlbnRUeXBlLnJlcGxhY2UoL1xcLy9nLCAnLScpXSA9IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdCcoJyArIC9jb250ZW50LXR5cGU6XFxzKi8uc291cmNlICsgcGF0dGVybiArIC8oPzooPzpcXHJcXG4/fFxcbilbXFx3LV0uKikqKD86XFxyKD86XFxufCg/IVxcbikpfFxcbikvLnNvdXJjZSArICcpJyArXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIGxpdHRsZSBpbnRlcmVzdGluZzpcblx0XHRcdFx0XHQvLyBUaGUgSFRUUCBmb3JtYXQgc3BlYyByZXF1aXJlZCAxIGVtcHR5IGxpbmUgYmVmb3JlIHRoZSBib2R5IHRvIG1ha2UgZXZlcnl0aGluZyB1bmFtYmlndW91cy5cblx0XHRcdFx0XHQvLyBIb3dldmVyLCB3aGVuIHdyaXRpbmcgY29kZSBieSBoYW5kIChlLmcuIHRvIGRpc3BsYXkgb24gYSB3ZWJzaXRlKSBwZW9wbGUgY2FuIGZvcmdldCBhYm91dCB0aGlzLFxuXHRcdFx0XHRcdC8vIHNvIHdlIHdhbnQgdG8gYmUgbGliZXJhbCBoZXJlLiBXZSB3aWxsIGFsbG93IHRoZSBlbXB0eSBsaW5lIHRvIGJlIG9taXR0ZWQgaWYgdGhlIGZpcnN0IGxpbmUgb2Zcblx0XHRcdFx0XHQvLyB0aGUgYm9keSBkb2VzIG5vdCBzdGFydCB3aXRoIGEgW1xcdy1dIGNoYXJhY3RlciAoYXMgaGVhZGVycyBkbykuXG5cdFx0XHRcdFx0L1teIFxcdFxcdy1dW1xcc1xcU10qLy5zb3VyY2UsXG5cdFx0XHRcdFx0J2knXG5cdFx0XHRcdCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogaHR0cExhbmd1YWdlc1tjb250ZW50VHlwZV1cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zKSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaHR0cCcsICdoZWFkZXInLCBvcHRpb25zKTtcblx0fVxuXG59KFByaXNtKSk7XG5cbi8qKlxuICogT3JpZ2luYWwgYnkgU2NvdHQgSGVsbWUuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL3Njb3R0aGVsbWUuY28udWsvaHBrcC1jaGVhdC1zaGVldC9cbiAqL1xuXG5QcmlzbS5sYW5ndWFnZXMuaHBrcCA9IHtcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86aW5jbHVkZVN1YkRvbWFpbnN8bWF4LWFnZXxwaW4tc2hhMjU2fHByZWxvYWR8cmVwb3J0LXRvfHJlcG9ydC11cml8c3RyaWN0KSg/PVtcXHM7PV18JCkvaSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvPS8sXG5cdCdwdW5jdHVhdGlvbic6IC87L1xufTtcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBTY290dCBIZWxtZS5cbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHBzOi8vc2NvdHRoZWxtZS5jby51ay9oc3RzLWNoZWF0LXNoZWV0L1xuICovXG5cblByaXNtLmxhbmd1YWdlcy5oc3RzID0ge1xuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzppbmNsdWRlU3ViRG9tYWluc3xtYXgtYWdlfHByZWxvYWQpKD89W1xcczs9XXwkKS9pLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdvcGVyYXRvcic6IC89Lyxcblx0J3B1bmN0dWF0aW9uJzogLzsvXG59O1xuXG4vLyBhY2NvcmRpbmcgdG8gdGhlIG9mZmljYWwgcmVmZXJlbmNlIChFTilcbi8vIGh0dHBzOi8vaWNoaWdvamFtLm5ldC9JY2hpZ29KYW0tZW4uaHRtbFxuUHJpc20ubGFuZ3VhZ2VzLmljaGlnb2phbSA9IHtcblx0J2NvbW1lbnQnOiAvKD86XFxCJ3xSRU0pKD86W15cXG5cXHJdKikvaSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcIlwifFshIyQlJicoKSosXFwvOjs8PT4/XlxcdyArXFwtLl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC9cXEIjWzAtOUEtRl0rfFxcQmBbMDFdK3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86RVsrLV0/XFxkKyk/L2ksXG5cdCdrZXl3b3JkJzogL1xcYig/OkJFRVB8QlBTfENBU0V8Q0xFQVJ8Q0xLfENMT3xDTFB8Q0xTfENMVHxDTFZ8Q09OVHxDT1BZfEVMU0V8RU5EfEZJTEV8RklMRVN8Rk9SfEdPU1VCfEdPVE98R1NCfElGfElOUFVUfEtCRHxMRUR8TEVUfExJU1R8TE9BRHxMT0NBVEV8TFJVTnxORVd8TkVYVHxPVVR8UExBWXxQT0tFfFBSSU5UfFBXTXxSRU18UkVOVU18UkVTRVR8UkVUVVJOfFJJR0hUfFJUTnxSVU58U0FWRXxTQ1JPTEx8U0xFRVB8U1JORHxTVEVQfFNUT1B8U1VCfFRFTVBPfFRIRU58VE98VUFSVHxWSURFT3xXQUlUKSg/OlxcJHxcXGIpL2ksXG5cdCdmdW5jdGlvbic6IC9cXGIoPzpBQlN8QU5BfEFTQ3xCSU58QlROfERFQ3xFTkR8RlJFRXxIRUxQfEhFWHxJMkNSfEkyQ1d8SU58SU5LRVl8TEVOfExJTkV8UEVFS3xSTkR8U0NSfFNPVU5EfFNUUnxUSUNLfFVTUnxWRVJ8VlBFRUt8WkVSKSg/OlxcJHxcXGIpL2ksXG5cdCdsYWJlbCc6IC8oPzpcXEJAXFxTKykvLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3xcXHxcXHx8JiZ8WytcXC0qXFwvPXwmXn4hXXxcXGIoPzpBTkR8Tk9UfE9SKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcWyw7OigpXFxdXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5pY29uID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86KD8hXFwxKVteXFxcXFxcclxcbl9dfFxcXFwufF8oPyFcXDEpKD86XFxyXFxufFtcXHNcXFNdKSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC9cXGIoPzpcXGQrclthLXpcXGRdK3xcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/KVxcYnxcXC5cXGQrXFxiL2ksXG5cdCdidWlsdGluLWtleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyYoPzphbGxvY2F0ZWR8YXNjaWl8Y2xvY2t8Y29sbGVjdGlvbnN8Y3NldHxjdXJyZW50fGRhdGV8ZGF0ZWxpbmV8ZGlnaXRzfGR1bXB8ZXxlcnJvcig/Om51bWJlcnx0ZXh0fHZhbHVlKT98ZXJyb3V0fGZhaWx8ZmVhdHVyZXN8ZmlsZXxob3N0fGlucHV0fGxjYXNlfGxldHRlcnN8bGV2ZWx8bGluZXxtYWlufG51bGx8b3V0cHV0fHBoaXxwaXxwb3N8cHJvZ25hbWV8cmFuZG9tfHJlZ2lvbnN8c291cmNlfHN0b3JhZ2V8c3ViamVjdHx0aW1lfHRyYWNlfHVjYXNlfHZlcnNpb24pXFxiLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXCRcXHcrLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrfGJ5fGNhc2V8Y3JlYXRlfGRlZmF1bHR8ZG98ZWxzZXxlbmR8ZXZlcnl8ZmFpbHxnbG9iYWx8aWZ8aW5pdGlhbHxpbnZvY2FibGV8bGlua3xsb2NhbHxuZXh0fG5vdHxvZnxwcm9jZWR1cmV8cmVjb3JkfHJlcGVhdHxyZXR1cm58c3RhdGljfHN1c3BlbmR8dGhlbnx0b3x1bnRpbHx3aGlsZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1cXHMqWyh7XXxcXHMqIVxccypcXFspLyxcblx0J29wZXJhdG9yJzogL1srLV06KD8hPSl8KD86W1xcLz9AXiUmXXxcXCtcXCs/fC0tP3w9PT89P3x+PT0/PT98XFwqXFwqP3xcXHxcXHxcXHw/fDwoPzotPj98PD89Pyl8Pj4/PT8pKD86Oj0pP3w6KD86PTo/KT98WyEuXFxcXHx+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fSw7XS9cbn07XG5cbi8vIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS91c2VyZ3VpZGUvZm9ybWF0X3BhcnNlL21lc3NhZ2VzL1xuLy8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRqL2NvbS9pYm0vaWN1L3RleHQvTWVzc2FnZUZvcm1hdC5odG1sXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIG5lc3RlZChzb3VyY2UsIGxldmVsKSB7XG5cdFx0aWYgKGxldmVsIDw9IDApIHtcblx0XHRcdHJldHVybiAvW10vLnNvdXJjZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNvdXJjZS5yZXBsYWNlKC88U0VMRj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmVzdGVkKHNvdXJjZSwgbGV2ZWwgLSAxKTsgfSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHN0cmluZ1BhdHRlcm4gPSAvJ1t7fTo9LF0oPzpbXiddfCcnKSonKD8hJykvO1xuXG5cdHZhciBlc2NhcGUgPSB7XG5cdFx0cGF0dGVybjogLycnLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fTtcblx0dmFyIHN0cmluZyA9IHtcblx0XHRwYXR0ZXJuOiBzdHJpbmdQYXR0ZXJuLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdlc2NhcGUnOiBlc2NhcGVcblx0XHR9XG5cdH07XG5cblx0dmFyIGFyZ3VtZW50U291cmNlID0gbmVzdGVkKFxuXHRcdC9cXHsoPzpbXnt9J118Jyg/IVt7fSwnXSl8Jyd8PFNUUj58PFNFTEY+KSpcXH0vLnNvdXJjZVxuXHRcdFx0LnJlcGxhY2UoLzxTVFI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm4uc291cmNlOyB9KSxcblx0XHQ4XG5cdCk7XG5cblx0dmFyIG5lc3RlZE1lc3NhZ2UgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKGFyZ3VtZW50U291cmNlKSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdtZXNzYWdlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0J21lc3NhZ2UtZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvLi8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlc1snaWN1LW1lc3NhZ2UtZm9ybWF0J10gPSB7XG5cdFx0J2FyZ3VtZW50Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKGFyZ3VtZW50U291cmNlKSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnYXJndW1lbnQtbmFtZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbXnt9Oj0sXFxzXSsvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2Nob2ljZS1zdHlsZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRjL2NsYXNzaWN1XzFfMUNob2ljZUZvcm1hdC5odG1sI2RldGFpbHNcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKixcXHMqY2hvaWNlXFxzKixcXHMqKVxcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC8sXG5cdFx0XHRcdFx0XHRcdFx0J3JhbmdlJzoge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbKy1dPyg/OlxcZCsoPzpcXC5cXGQqKT98XFx1MjIxZSlcXHMqWzwjXFx1MjI2NF0vLFxuXHRcdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvWzwjXFx1MjI2NF0vLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnbnVtYmVyJzogL1xcUysvXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRyZXN0OiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3BsdXJhbC1zdHlsZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRqL2NvbS9pYm0vaWN1L3RleHQvUGx1cmFsRm9ybWF0Lmh0bWwjOn46dGV4dD1QYXR0ZXJucyUyMGFuZCUyMFRoZWlyJTIwSW50ZXJwcmV0YXRpb25cblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKixcXHMqKD86cGx1cmFsfHNlbGVjdG9yZGluYWwpXFxzKixcXHMqKVxcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J29mZnNldCc6IC9eb2Zmc2V0OlxccypcXGQrLyxcblx0XHRcdFx0XHRcdFx0XHQnbmVzdGVkLW1lc3NhZ2UnOiBuZXN0ZWRNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3Rvcic6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC89XFxkK3xbXnt9Oj0sXFxzXSsvLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL14oPzpmZXd8bWFueXxvbmV8b3RoZXJ8dHdvfHplcm8pJC9cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnc2VsZWN0LXN0eWxlJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3VuaWNvZGUtb3JnLmdpdGh1Yi5pby9pY3UtZG9jcy9hcGlkb2MvcmVsZWFzZWQvaWN1NGovY29tL2libS9pY3UvdGV4dC9TZWxlY3RGb3JtYXQuaHRtbCM6fjp0ZXh0PVBhdHRlcm5zJTIwYW5kJTIwVGhlaXIlMjBJbnRlcnByZXRhdGlvblxuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqLFxccypzZWxlY3RcXHMqLFxccyopXFxTKD86W1xcc1xcU10qXFxTKT8vLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0XHQnbmVzdGVkLW1lc3NhZ2UnOiBuZXN0ZWRNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3Rvcic6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXnt9Oj0sXFxzXSsvLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL15vdGhlciQvXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86Y2hvaWNlfHBsdXJhbHxzZWxlY3R8c2VsZWN0b3JkaW5hbClcXGIvLFxuXHRcdFx0XHRcdFx0J2FyZy10eXBlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86ZGF0ZXxkdXJhdGlvbnxudW1iZXJ8b3JkaW5hbHxzcGVsbG91dHx0aW1lKVxcYi8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnYXJnLXNrZWxldG9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKCxcXHMqKTo6W157fTo9LFxcc10rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdhcmctc3R5bGUnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oLFxccyopKD86Y3VycmVuY3l8ZnVsbHxpbnRlZ2VyfGxvbmd8bWVkaXVtfHBlcmNlbnR8c2hvcnQpKD89XFxzKiQpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdhcmctc3R5bGUtdGV4dCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXlxccyosXFxzKig/PVxcUykpLy5zb3VyY2UgKyBuZXN0ZWQoLyg/Oltee30nXXwnW14nXSonfFxceyg/OjxTRUxGPik/XFx9KSsvLnNvdXJjZSwgOCkgKyAnJCcpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhcmd1bWVudC1kZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLy4vLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0J3N0cmluZyc6IHN0cmluZ1xuXHR9O1xuXG5cdG5lc3RlZE1lc3NhZ2UuaW5zaWRlLm1lc3NhZ2UuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzWydpY3UtbWVzc2FnZS1mb3JtYXQnXTtcblx0UHJpc20ubGFuZ3VhZ2VzWydpY3UtbWVzc2FnZS1mb3JtYXQnXS5hcmd1bWVudC5pbnNpZGUuY29udGVudC5pbnNpZGVbJ2Nob2ljZS1zdHlsZSddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzWydpY3UtbWVzc2FnZS1mb3JtYXQnXTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuaWRyaXMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdoYXNrZWxsJywge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86KD86LS18XFx8XFx8XFx8KS4qJHxcXHstW1xcc1xcU10qPy1cXH0pL20sXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OlR5cGV8Y2FzZXxjbGFzc3xjb2RhdGF8Y29uc3RydWN0b3J8Y29yZWNvcmR8ZGF0YXxkb3xkc2x8ZWxzZXxleHBvcnR8aWZ8aW1wbGVtZW50YXRpb258aW1wbGljaXR8aW1wb3J0fGltcG9zc2libGV8aW58aW5maXh8aW5maXhsfGluZml4cnxpbnN0YW5jZXxpbnRlcmZhY2V8bGV0fG1vZHVsZXxtdXR1YWx8bmFtZXNwYWNlfG9mfHBhcmFtZXRlcnN8cGFydGlhbHxwb3N0dWxhdGV8cHJpdmF0ZXxwcm9vZnxwdWJsaWN8cXVvdGVHb2FsfHJlY29yZHxyZXdyaXRlfHN5bnRheHx0aGVufHRvdGFsfHVzaW5nfHdoZXJlfHdpdGgpXFxiLyxcblx0J2J1aWx0aW4nOiB1bmRlZmluZWRcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpZHJpcycsICdrZXl3b3JkJywge1xuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHMqaW1wb3J0XFxzKykoPzpbQS1aXVtcXHcnXSopKD86XFwuW0EtWl1bXFx3J10qKSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaWRyID0gUHJpc20ubGFuZ3VhZ2VzLmlkcmlzO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5pZ25vcmUgPSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdGlnbm9yZVxuXHRcdCdjb21tZW50JzogL14jLiovbSxcblx0XHQnZW50cnknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxTKD86LiooPzooPzpcXFxcICl8XFxTKSk/Lyxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvXiF8XFwqXFwqP3xcXD8vLFxuXHRcdFx0XHQncmVnZXgnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFxbW15cXFtcXF1dKlxcXS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwvL1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ2l0aWdub3JlID0gUHJpc20ubGFuZ3VhZ2VzLmlnbm9yZTtcblx0UHJpc20ubGFuZ3VhZ2VzLmhnaWdub3JlID0gUHJpc20ubGFuZ3VhZ2VzLmlnbm9yZTtcblx0UHJpc20ubGFuZ3VhZ2VzLm5wbWlnbm9yZSA9IFByaXNtLmxhbmd1YWdlcy5pZ25vcmU7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluZm9ybTcgPSB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N1YnN0aXR1dGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcW1teXFxbXFxdXStcXF0vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcW3xcXF0vLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcW1teXFxbXFxdXStcXF0vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndGl0bGUnOiB7XG5cdFx0cGF0dGVybjogL15bIFxcdF0qKD86Ym9va3xjaGFwdGVyfHBhcnQoPyEgb2YpfHNlY3Rpb258dGFibGV8dm9sdW1lKVxcYi4rL2ltLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKSg/OlxcYlxcZCsoPzpcXC5cXGQrKT8oPzpcXF5cXGQrKT8oPzooPyFcXGQpXFx3Kyk/fFxcYig/OmVpZ2h0fGVsZXZlbnxmaXZlfGZvdXJ8bmluZXxvbmV8c2V2ZW58c2l4fHRlbnx0aHJlZXx0d2VsdmV8dHdvKSlcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3ZlcmInOiB7XG5cdFx0cGF0dGVybjogLyhefFteLV0pXFxiKD86YW5zd2VyaW5nfGFwcGx5aW5nIHRvfGFyZXxhc2tpbmd8YXR0YWNraW5nfGJlKD86aW5nKT98YnVybmluZ3xidXlpbmd8Y2FsbGVkfGNhcnJpZXN8Y2FycnkoPyEgb3V0KXxjYXJyeWluZ3xjbGltYmluZ3xjbG9zaW5nfGNvbmNlYWwoPzppbmd8cyk/fGNvbnN1bHRpbmd8Y29udGFpbig/OmluZ3xzKT98Y3V0dGluZ3xkcmlua2luZ3xkcm9wcGluZ3xlYXRpbmd8ZW5jbG9zKD86ZXM/fGluZyl8ZW50ZXJpbmd8ZXhhbWluaW5nfGV4aXRpbmd8Z2V0dGluZ3xnaXZpbmd8Z29pbmd8aGEoPzpzfHZlfHZpbmcpfGhvbGQoPzppbmd8cyk/fGltcGwoPzppZXN8eSl8aW5jb3Jwb3JhdCg/OmVzP3xpbmcpfGluc2VydGluZ3xpc3xqdW1waW5nfGtpc3Npbmd8bGlzdGVuaW5nfGxvY2tpbmd8bG9va2luZ3xtZWFuKD86aW5nfHMpP3xvcGVuaW5nfHByb3ZpZCg/OmVzP3xpbmcpfHB1bGxpbmd8cHVzaGluZ3xwdXR0aW5nfHJlbGF0KD86ZXM/fGluZyl8cmVtb3Zpbmd8c2VhcmNoaW5nfHNlZSg/OmluZ3xzKT98c2V0dGluZ3xzaG93aW5nfHNpbmdpbmd8c2xlZXBpbmd8c21lbGxpbmd8c3F1ZWV6aW5nfHN1cHBvcnQoPzppbmd8cyk/fHN3ZWFyaW5nfHN3aXRjaGluZ3x0YWtpbmd8dGFzdGluZ3x0ZWxsaW5nfHRoaW5raW5nfHRocm93aW5nfHRvdWNoaW5nfHR1cm5pbmd8dHlpbmd8dW5sb2NrKD86aW5nfHMpP3x2YXIoPzppZXN8eXx5aW5nKXx3YWl0aW5nfHdha2luZ3x3YXZpbmd8d2Vhcig/OmluZ3xzKT8pXFxiKD8hLSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFmdGVyfGJlZm9yZXxjYXJyeSBvdXR8Y2hlY2t8Y29udGludWUgdGhlIGFjdGlvbnxkZWZpbml0aW9uKD89ICo6KXxkbyBub3RoaW5nfGVsc2V8ZW5kICg/OmlmfHRoZSBzdG9yeXx1bmxlc3MpfGV2ZXJ5IHR1cm58aWZ8aW5jbHVkZXxpbnN0ZWFkKD86IG9mKT98bGV0fG1vdmV8bm98bm93fG90aGVyd2lzZXxyZXBlYXR8cmVwb3J0fHJlc3VtZSB0aGUgc3Rvcnl8cnVsZSBmb3J8cnVubmluZyB0aHJvdWdofHNheSg/OmluZyk/fHN0b3AgdGhlIGFjdGlvbnx0ZXN0fHRyeSg/OmluZyk/fHVuZGVyc3RhbmR8dW5sZXNzfHVzZXx3aGVufHdoaWxlfHllcylcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFkamFjZW50KD8hIHRvKXxjYXJyaWVkfGNsb3NlZHxjb25jZWFsZWR8Y29udGFpbmVkfGRhcmt8ZGVzY3JpYmVkfGVkaWJsZXxlbXB0eXxlbmNsb3NlZHxlbnRlcmFibGV8ZXZlbnxmZW1hbGV8Zml4ZWQgaW4gcGxhY2V8ZnVsbHxoYW5kbGVkfGhlbGR8aW1wcm9wZXItbmFtZWR8aW5jb3Jwb3JhdGVkfGluZWRpYmxlfGludmlzaWJsZXxsaWdodGVkfGxpdHxsb2NrKD86YWJsZXxlZCl8bWFsZXxtYXJrZWQgZm9yIGxpc3Rpbmd8bWVudGlvbmVkfG5lZ2F0aXZlfG5ldXRlcnxub24tKD86ZW1wdHl8ZnVsbHxyZWN1cnJpbmcpfG9kZHxvcGFxdWV8b3Blbig/OmFibGUpP3xwbHVyYWwtbmFtZWR8cG9ydGFibGV8cG9zaXRpdmV8cHJpdmF0ZWx5LW5hbWVkfHByb3Blci1uYW1lZHxwcm92aWRlZHxwdWJsaWNhbGx5LW5hbWVkfHB1c2hhYmxlIGJldHdlZW4gcm9vbXN8cmVjdXJyaW5nfHJlbGF0ZWR8cnViYmluZ3xzY2VuZXJ5fHNlZW58c2luZ3VsYXItbmFtZWR8c3VwcG9ydGVkfHN3aW5naW5nfHN3aXRjaCg/OmFibGV8ZWQoPzogb2ZmfCBvbik/KXx0b3VjaCg/OmFibGV8ZWQpfHRyYW5zcGFyZW50fHVuY29uY2VhbGVkfHVuZGVzY3JpYmVkfHVubGl0fHVubG9ja2VkfHVubWFya2VkIGZvciBsaXN0aW5nfHVubWVudGlvbmVkfHVub3BlbmFibGV8dW50b3VjaGFibGV8dW52aXNpdGVkfHZhcmlhYmxlfHZpc2libGV8dmlzaXRlZHx3ZWFyYWJsZXx3b3JuKVxcYig/IS0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0J3Bvc2l0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFib3ZlfGFkamFjZW50IHRvfGJhY2sgc2lkZSBvZnxiZWxvd3xiZXR3ZWVufGRvd258ZWFzdHxldmVyeXdoZXJlfGZyb250IHNpZGV8aGVyZXxpbnxpbnNpZGUoPzogZnJvbSk/fG5vcnRoKD86ZWFzdHx3ZXN0KT98bm93aGVyZXxvbig/OiB0b3Agb2YpP3xvdGhlciBzaWRlfG91dHNpZGUoPzogZnJvbSk/fHBhcnRzPyBvZnxyZWdpb25hbGx5IGlufHNvdXRoKD86ZWFzdHx3ZXN0KT98dGhyb3VnaHx1cHx3ZXN0fHdpdGhpbilcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQndHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSlcXGIoPzphY3Rpb25zP3xhY3Rpdml0KD86aWVzfHkpfGFjdG9ycz98YW5pbWFscz98YmFja2Ryb3BzP3xjb250YWluZXJzP3xkZXZpY2VzP3xkaXJlY3Rpb25zP3xkb29ycz98aG9sZGVycz98a2luZHM/fGxpc3RzP3xtW2FlXW58bm9ib2R5fG5vdGhpbmd8bm91bnM/fG51bWJlcnM/fG9iamVjdHM/fHBlb3BsZXxwZXJzb25zP3xwbGF5ZXIoPzoncyBob2xkYWxsKT98cmVnaW9ucz98cmVsYXRpb25zP3xyb29tcz98cnVsZSg/OmJvb2spP3M/fHNjZW5lcz98c29tZW9uZXxzb21ldGhpbmd8c3VwcG9ydGVycz98dGFibGVzP3x0ZXh0cz98dGhpbmdzP3x0aW1lfHZlaGljbGVzP3x3b21bYWVdbilcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1suLDo7KCl7fV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5mb3JtN1snc3RyaW5nJ10uaW5zaWRlWydzdWJzdGl0dXRpb24nXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5pbmZvcm03O1xuLy8gV2UgZG9uJ3Qgd2FudCB0aGUgcmVtYWluaW5nIHRleHQgaW4gdGhlIHN1YnN0aXR1dGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyB0aGUgc3RyaW5nLlxuUHJpc20ubGFuZ3VhZ2VzLmluZm9ybTdbJ3N0cmluZyddLmluc2lkZVsnc3Vic3RpdHV0aW9uJ10uaW5zaWRlLnJlc3QudGV4dCA9IHtcblx0cGF0dGVybjogL1xcUyg/OlxccypcXFMpKi8sXG5cdGFsaWFzOiAnY29tbWVudCdcbn07XG5cblByaXNtLmxhbmd1YWdlcy5pbmkgPSB7XG5cblx0LyoqXG5cdCAqIFRoZSBjb21wb25lbnQgbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgV2luMzIgQVBJIHBhcnNlci5cblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1ByaXNtSlMvcHJpc20vaXNzdWVzLzI3NzUjaXNzdWVjb21tZW50LTc4NzQ3NzcyM31cblx0ICovXG5cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXGZcXHRcXHZdKilbIztdW15cXG5cXHJdKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3NlY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXGZcXHRcXHZdKilcXFtbXlxcblxcclxcXV0qXFxdPy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnc2VjdGlvbi1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cXFtbIFxcZlxcdFxcdl0qKVteIFxcZlxcdFxcdlxcXV0rKD86WyBcXGZcXHRcXHZdK1teIFxcZlxcdFxcdlxcXV0rKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFt8XFxdL1xuXHRcdH1cblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcZlxcdFxcdl0qKVteIFxcZlxcblxcclxcdFxcdj1dKyg/OlsgXFxmXFx0XFx2XStbXiBcXGZcXG5cXHJcXHRcXHY9XSspKig/PVsgXFxmXFx0XFx2XSo9KS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdH0sXG5cdCd2YWx1ZSc6IHtcblx0XHRwYXR0ZXJuOiAvKD1bIFxcZlxcdFxcdl0qKVteIFxcZlxcblxcclxcdFxcdl0rKD86WyBcXGZcXHRcXHZdK1teIFxcZlxcblxcclxcdFxcdl0rKSovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbm5lci12YWx1ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXCJ8JykuKyg/PVxcMSQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3B1bmN0dWF0aW9uJzogLz0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW8gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8XFwvXFwvLip8Iy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCIoPzpcXFxcW1xcc1xcU118KD8hXCJcIlwiKVteXFxcXF0pKlwiXCJcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFxcclxcblwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphY3RpdmF0ZXxhY3RpdmVDb3JvQ291bnR8YXNTdHJpbmd8YmxvY2t8YnJlYWt8Y2FsbHxjYXRjaHxjbG9uZXxjb2xsZWN0R2FyYmFnZXxjb21waWxlU3RyaW5nfGNvbnRpbnVlfGRvfGRvRmlsZXxkb01lc3NhZ2V8ZG9TdHJpbmd8ZWxzZXxlbHNlaWZ8ZXhpdHxmb3J8Zm9yZWFjaHxmb3J3YXJkfGdldEVudmlyb25tZW50VmFyaWFibGV8Z2V0U2xvdHxoYXNTbG90fGlmfGlmRmFsc2V8aWZOaWx8aWZOaWxFdmFsfGlmVHJ1ZXxpc0FjdGl2ZXxpc05pbHxpc1Jlc3VtYWJsZXxsaXN0fG1lc3NhZ2V8bWV0aG9kfHBhcmVudHxwYXNzfHBhdXNlfHBlcmZvcm18cGVyZm9ybVdpdGhBcmdMaXN0fHByaW50fHByaW50bG58cHJvdG98cmFpc2V8cmFpc2VSZXN1bWFibGV8cmVtb3ZlU2xvdHxyZXNlbmR8cmVzdW1lfHNjaGVkdWxlclNsZWVwU2Vjb25kc3xzZWxmfHNlbmRlcnxzZXRTY2hlZHVsZXJTbGVlcFNlY29uZHN8c2V0U2xvdHxzaGFsbG93Q29weXxzbG90TmFtZXN8c3VwZXJ8c3lzdGVtfHRoZW58dGhpc0Jsb2NrfHRoaXNDb250ZXh0fHRyeXx0eXBlfHVuaXF1ZUlkfHVwZGF0ZVNsb3R8d2FpdHx3aGlsZXx3cml0ZXx5aWVsZClcXGIvLFxuXHQnYnVpbHRpbic6IC9cXGIoPzpBcnJheXxBdWRpb0RldmljZXxBdWRpb01peGVyfEJpZ051bXxCbG9ja3xCb3h8QnVmZmVyfENGdW5jdGlvbnxDR0l8Q29sb3J8Q3Vyc2VzfERCTXxETlNSZXNvbHZlcnxET0Nvbm5lY3Rpb258RE9Qcm94eXxET1NlcnZlcnxEYXRlfERpcmVjdG9yeXxEdXJhdGlvbnxEeW5MaWJ8RXJyb3J8RXhjZXB0aW9ufEZGVHxGaWxlfEZubWF0Y2h8Rm9udHxGdXR1cmV8R0x8R0xFfEdMU2Npc3NvcnxHTFV8R0xVQ3lsaW5kZXJ8R0xVUXVhZHJpY3xHTFVTcGhlcmV8R0xVVHxIb3N0fEltYWdlfEltcG9ydGVyfExpbmtMaXN0fExpc3R8TG9iYnl8TG9jYWxzfE1ENXxNUDNEZWNvZGVyfE1QM0VuY29kZXJ8TWFwfE1lc3NhZ2V8TW92aWV8Tm90aWZpY2F0aW9ufE51bWJlcnxPYmplY3R8T3BlbkdMfFBvaW50fFByb3Rvc3xSYW5kb218UmVnZXh8U0dNTHxTR01MRWxlbWVudHxTR01MUGFyc2VyfFNRTGl0ZXxTZXF1ZW5jZXxTZXJ2ZXJ8U2hvd01lc3NhZ2V8U2xlZXB5Q2F0fFNsZWVweUNhdEN1cnNvcnxTb2NrZXR8U29ja2V0TWFuYWdlcnxTb3VuZHxTb3VwfFN0b3JlfFN0cmluZ3xUcmVlfFVEUFNlbmRlcnxVUERSZWNlaXZlcnxVUkx8VXNlcnxXYXJuaW5nfFdlYWtMaW5rKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5pbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmUtP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvWz0hKi8lK1xcLV4mfF09fD4+Pz0/fDw8Pz0/fDo/Oj89fFxcK1xcKz98LS0/fFxcKlxcKj98XFwvXFwvP3wlfFxcfFxcfD98JiY/fFxcYig/OmFuZHxub3R8b3J8cmV0dXJuKVxcYnxAQD98XFw/XFw/P3xcXC5cXC4vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcYk5CXFwuLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8nKD86Jyd8W14nXFxyXFxuXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/Oig/OkNSfExGfGFkdmVyYnxjb25qdW5jdGlvbnxkZWZ8ZGVmaW5lfGR5YWR8bW9uYWR8bm91bnx2ZXJiKVxcYnwoPzphc3NlcnR8YnJlYWt8Y2FzZXxjYXRjaFtkdF0/fGNvbnRpbnVlfGRvfGVsc2V8ZWxzZWlmfGVuZHxmY2FzZXxmb3J8Zm9yX1xcdyt8Z290b19cXHcrfGlmfGxhYmVsX1xcdyt8cmV0dXJufHNlbGVjdHx0aHJvd3x0cnl8d2hpbGV8d2hpbHN0KVxcLikvLFxuXHQndmVyYic6IHtcblx0XHQvLyBOZWdhdGl2ZSBsb29rLWFoZWFkIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmdcblx0XHQvLyBvZiBeOiA7LiA9LiA9OiAhLiAhOlxuXHRcdHBhdHRlcm46IC8oPyFcXF46fDtcXC58Wz0hXVsuOl0pKD86XFx7KD86XFwufDo6Pyk/fHAoPzpcXC5cXC4/fDopfFs9IVxcXV18Wzw+KypcXC0lJHwsI11bLjpdP3xbP15dXFwuP3xbO1xcW106P3xbfn1cImldWy46XXxbQUNlRUlqTG9yXVxcLnwoPzpbX1xcL1xcXFxxc3V4XXxfP1xcZCk6KS8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYl8/KD86KD8hXFxkOilcXGQrKD86XFwuXFxkKyk/KD86KD86YWR8YXJ8W2VqcHhdKV8/XFxkKyg/OlxcLlxcZCspPykqKD86Yl8/W1xcZGEtel0rKD86XFwuW1xcZGEtel0rKT8pP3xfXFxiKD8hXFwuKSkvLFxuXHQnYWR2ZXJiJzoge1xuXHRcdHBhdHRlcm46IC9bfn1dfFtcXC9cXFxcXVxcLj98W2JmTV1cXC58dFsuOl0vLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fSxcblx0J29wZXJhdG9yJzogL1s9YV1bLjpdfF9cXC4vLFxuXHQnY29uanVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyYoPzpcXC46P3w6KT98Wy46QF1bLjpdP3xbIURdWy46XXxbO2RIVF1cXC58YDo/fFtcXF5MU106fFwiLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5d29yZHMgPSAvXFxiKD86YWJzdHJhY3R8YXNzZXJ0fGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4cG9ydHN8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxnb3RvfGlmfGltcGxlbWVudHN8aW1wb3J0fGluc3RhbmNlb2Z8aW50fGludGVyZmFjZXxsb25nfG1vZHVsZXxuYXRpdmV8bmV3fG5vbi1zZWFsZWR8bnVsbHxvcGVufG9wZW5zfHBhY2thZ2V8cGVybWl0c3xwcml2YXRlfHByb3RlY3RlZHxwcm92aWRlc3xwdWJsaWN8cmVjb3JkKD8hXFxzKlsoKXt9W1xcXTw+PSV+LjosOz8rXFwtKi8mfF5dKXxyZXF1aXJlc3xyZXR1cm58c2VhbGVkfHNob3J0fHN0YXRpY3xzdHJpY3RmcHxzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHRoaXN8dGhyb3d8dGhyb3dzfHRvfHRyYW5zaWVudHx0cmFuc2l0aXZlfHRyeXx1c2VzfHZhcnx2b2lkfHZvbGF0aWxlfHdoaWxlfHdpdGh8eWllbGQpXFxiLztcblxuXHQvLyBmdWxsIHBhY2thZ2UgKG9wdGlvbmFsKSArIHBhcmVudCBjbGFzc2VzIChvcHRpb25hbClcblx0dmFyIGNsYXNzTmFtZVByZWZpeCA9IC8oPzpbYS16XVxcdypcXHMqXFwuXFxzKikqKD86W0EtWl1cXHcqXFxzKlxcLlxccyopKi8uc291cmNlO1xuXG5cdC8vIGJhc2VkIG9uIHRoZSBqYXZhIG5hbWluZyBjb252ZW50aW9uc1xuXHR2YXIgY2xhc3NOYW1lID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W15cXHcuXSkvLnNvdXJjZSArIGNsYXNzTmFtZVByZWZpeCArIC9bQS1aXSg/OltcXGRfQS1aXSpbYS16XVxcdyopP1xcYi8uc291cmNlKSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bYS16XVxcdyooPzpcXHMqXFwuXFxzKlthLXpdXFx3KikqKD86XFxzKlxcLik/Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gdmFyaWFibGVzLCBwYXJhbWV0ZXJzLCBhbmQgY29uc3RydWN0b3IgcmVmZXJlbmNlc1xuXHRcdFx0XHQvLyB0aGlzIHRvIHN1cHBvcnQgY2xhc3MgbmFtZXMgKG9yIGdlbmVyaWMgcGFyYW1ldGVycykgd2hpY2ggZG8gbm90IGNvbnRhaW4gYSBsb3dlciBjYXNlIGxldHRlciAoYWxzbyB3b3JrcyBmb3IgbWV0aG9kcylcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbXlxcdy5dKS8uc291cmNlICsgY2xhc3NOYW1lUHJlZml4ICsgL1tBLVpdXFx3Kig/PVxccytcXHcrXFxzKls7LD0oKV18XFxzKig/OlxcW1tcXHMsXSpcXF1cXHMqKT86OlxccypuZXdcXGIpLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNsYXNzTmFtZS5pbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNsYXNzIG5hbWVzIGJhc2VkIG9uIGtleXdvcmRcblx0XHRcdFx0Ly8gdGhpcyB0byBzdXBwb3J0IGNsYXNzIG5hbWVzIChvciBnZW5lcmljIHBhcmFtZXRlcnMpIHdoaWNoIGRvIG5vdCBjb250YWluIGEgbG93ZXIgY2FzZSBsZXR0ZXIgKGFsc28gd29ya3MgZm9yIG1ldGhvZHMpXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmNsYXNzfGVudW18ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8aW50ZXJmYWNlfG5ld3xyZWNvcmR8dGhyb3dzKVxccyspLy5zb3VyY2UgKyBjbGFzc05hbWVQcmVmaXggKyAvW0EtWl1cXHcqXFxiLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNsYXNzTmFtZS5pbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmNsaWtlLmZ1bmN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKDo6XFxzKilbYS16X11cXHcqLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J251bWJlcic6IC9cXGIwYlswMV1bMDFfXSpMP1xcYnxcXGIweCg/OlxcLltcXGRhLWZfcCstXSt8W1xcZGEtZl9dKyg/OlxcLltcXGRhLWZfcCstXSspPylcXGJ8KD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5cXGRbXFxkX10qKSg/OmVbKy1dP1xcZFtcXGRfXSopP1tkZmxdPy9pLFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKSg/Ojw8PT98Pj4+Pz0/fC0+fC0tfFxcK1xcK3wmJnxcXHxcXHx8Ojp8Wz86fl18Wy0rKi8lJnxeIT08Pl09PykvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmEnLCAnc3RyaW5nJywge1xuXHRcdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcblx0XHRcdC8vIGh0dHA6Ly9vcGVuamRrLmphdmEubmV0L2plcHMvMzU1I0Rlc2NyaXB0aW9uXG5cdFx0XHRwYXR0ZXJuOiAvXCJcIlwiWyBcXHRdKltcXHJcXG5dKD86KD86XCJ8XCJcIik/KD86XFxcXC58W15cIlxcXFxdKSkqXCJcIlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKXsxLDZ9Jy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmEnLCAnY2xhc3MtbmFtZScsIHtcblx0XHQnYW5ub3RhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKUBcXHcrKD86XFxzKlxcLlxccypcXHcrKSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnZ2VuZXJpY3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvPCg/OltcXHdcXHMsLj9dfCYoPyEmKXw8KD86W1xcd1xccywuP118Jig/ISYpfDwoPzpbXFx3XFxzLC4/XXwmKD8hJil8PCg/OltcXHdcXHMsLj9dfCYoPyEmKSkqPikqPikqPikqPi8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiBjbGFzc05hbWUsXG5cdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKSwuOl0vLFxuXHRcdFx0XHQnb3BlcmF0b3InOiAvWz8mfF0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaW1wb3J0JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGJpbXBvcnRcXHMrKS8uc291cmNlICsgY2xhc3NOYW1lUHJlZml4ICsgLyg/OltBLVpdXFx3KnxcXCopKD89XFxzKjspLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzogY2xhc3NOYW1lLmluc2lkZS5uYW1lc3BhY2UsXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi8sXG5cdFx0XHRcdFx0J29wZXJhdG9yJzogL1xcKi8sXG5cdFx0XHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiaW1wb3J0XFxzK3N0YXRpY1xccyspLy5zb3VyY2UgKyBjbGFzc05hbWVQcmVmaXggKyAvKD86XFx3K3xcXCopKD89XFxzKjspLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0YXRpYycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCduYW1lc3BhY2UnOiBjbGFzc05hbWUuaW5zaWRlLm5hbWVzcGFjZSxcblx0XHRcdFx0XHQnc3RhdGljJzogL1xcYlxcdyskLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuLyxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXFwqLyxcblx0XHRcdFx0XHQnY2xhc3MtbmFtZSc6IC9cXHcrL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHQvKFxcYig/OmV4cG9ydHN8aW1wb3J0KD86XFxzK3N0YXRpYyk/fG1vZHVsZXxvcGVufG9wZW5zfHBhY2thZ2V8cHJvdmlkZXN8cmVxdWlyZXN8dG98dHJhbnNpdGl2ZXx1c2VzfHdpdGgpXFxzKykoPyE8a2V5d29yZD4pW2Etel1cXHcqKD86XFwuW2Etel1cXHcqKSpcXC4/L1xuXHRcdFx0XHRcdC5zb3VyY2UucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmRzLnNvdXJjZTsgfSkpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuLyxcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufShQcmlzbSkpO1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IEFhcm9uIEhhcnVuOiBodHRwOi8vYWFoYWNyZWF0aXZlLmNvbS8yMDEyLzA3LzMxL3BocC1zeW50YXgtaGlnaGxpZ2h0aW5nLXByaXNtL1xuICogTW9kaWZpZWQgYnkgTWlsZXMgSm9obnNvbjogaHR0cDovL21pbGVzai5tZVxuICogUmV3cml0dGVuIGJ5IFRvbSBQYXZlbGVjXG4gKlxuICogU3VwcG9ydHMgUEhQIDUuMyAtIDguMFxuICovXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBjb21tZW50ID0gL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLip8Iyg/IVxcWykuKi87XG5cdHZhciBjb25zdGFudCA9IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0XHRcdGFsaWFzOiAnYm9vbGVhbidcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oOjpcXHMqKVxcYlthLXpfXVxcdypcXGIoPyFcXHMqXFwoKS9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2FzZXxjb25zdClcXHMrKVxcYlthLXpfXVxcdyooPz1cXHMqWzs9XSkvaSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQvXFxiKD86bnVsbClcXGIvaSxcblx0XHQvXFxiW0EtWl9dW0EtWjAtOV9dKlxcYig/IVxccypcXCgpLyxcblx0XTtcblx0dmFyIG51bWJlciA9IC9cXGIwYlswMV0rKD86X1swMV0rKSpcXGJ8XFxiMG9bMC03XSsoPzpfWzAtN10rKSpcXGJ8XFxiMHhbXFxkYS1mXSsoPzpfW1xcZGEtZl0rKSpcXGJ8KD86XFxiXFxkKyg/Ol9cXGQrKSpcXC4/KD86XFxkKyg/Ol9cXGQrKSopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pO1xuXHR2YXIgb3BlcmF0b3IgPSAvPD89PnxcXD9cXD89P3xcXC57M318XFw/Py0+fFshPV09Pz0/fDo6fFxcKlxcKj0/fC0tfFxcK1xcK3wmJnxcXHxcXHx8PDx8Pj58Wz9+XXxbL158JSomPD4uKy1dPT8vO1xuXHR2YXIgcHVuY3R1YXRpb24gPSAvW3t9XFxbXFxdKCksOjtdLztcblxuXHRQcmlzbS5sYW5ndWFnZXMucGhwID0ge1xuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFw/PiR8XjxcXD8oPzpwaHAoPz1cXHMpfD0pPy9pLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0J3ZhcmlhYmxlJzogL1xcJCsoPzpcXHcrXFxifCg/PVxceykpLyxcblx0XHQncGFja2FnZSc6IHtcblx0XHRcdHBhdHRlcm46IC8obmFtZXNwYWNlXFxzK3x1c2VcXHMrKD86ZnVuY3Rpb25cXHMrKT8pKD86XFxcXD9cXGJbYS16X11cXHcqKStcXGIoPyFcXFxcKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGVudW18aW50ZXJmYWNlfHRyYWl0KVxccyspXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmZ1bmN0aW9uXFxzKylbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwoXFxzKilcXGIoPzphcnJheXxib29sfGJvb2xlYW58ZmxvYXR8aW50fGludGVnZXJ8b2JqZWN0fHN0cmluZylcXGIoPz1cXHMqXFwpKS9pLFxuXHRcdFx0XHRhbGlhczogJ3R5cGUtY2FzdGluZycsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhbKCw/XVxccyopXFxiKD86YXJyYXkoPyFcXHMqXFwoKXxib29sfGNhbGxhYmxlfCg/OmZhbHNlfG51bGwpKD89XFxzKlxcfCl8ZmxvYXR8aW50fGl0ZXJhYmxlfG1peGVkfG9iamVjdHxzZWxmfHN0YXRpY3xzdHJpbmcpXFxiKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWhpbnQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwpXFxzKjpcXHMqKD86XFw/XFxzKik/KVxcYig/OmFycmF5KD8hXFxzKlxcKCl8Ym9vbHxjYWxsYWJsZXwoPzpmYWxzZXxudWxsKSg/PVxccypcXHwpfGZsb2F0fGludHxpdGVyYWJsZXxtaXhlZHxuZXZlcnxvYmplY3R8c2VsZnxzdGF0aWN8c3RyaW5nfHZvaWQpXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAncmV0dXJuLXR5cGUnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzphcnJheSg/IVxccypcXCgpfGJvb2x8ZmxvYXR8aW50fGl0ZXJhYmxlfG1peGVkfG9iamVjdHxzdHJpbmd8dm9pZClcXGIvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWRlY2xhcmF0aW9uJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcfFxccyopKD86ZmFsc2V8bnVsbClcXGJ8XFxiKD86ZmFsc2V8bnVsbCkoPz1cXHMqXFx8KS9pLFxuXHRcdFx0XHRhbGlhczogJ3R5cGUtZGVjbGFyYXRpb24nLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpwYXJlbnR8c2VsZnxzdGF0aWMpKD89XFxzKjo6KS9pLFxuXHRcdFx0XHRhbGlhczogJ3N0YXRpYy1jb250ZXh0Jyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyB5aWVsZCBmcm9tXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxieWllbGRcXHMrKWZyb21cXGIvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC8vIGBjbGFzc2AgaXMgYWx3YXlzIGEga2V5d29yZCB1bmxpa2Ugb3RoZXIga2V5d29yZHNcblx0XHRcdC9cXGJjbGFzc1xcYi9pLFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC5rZXl3b3Jkcy5waHBcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8ga2V5d29yZHMgY2Fubm90IGJlIHByZWNlZGVkIGJ5IFwiLT5cIlxuXHRcdFx0XHQvLyB0aGUgY29tcGxleCBsb29rYmVoaW5kIG1lYW5zIGAoPzwhKD86LT58OjopXFxzKilgXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxccz46XXwoPzpefFteLV0pPnwoPzpefFteOl0pOilcXHMqKVxcYig/OmFic3RyYWN0fGFuZHxhcnJheXxhc3xicmVha3xjYWxsYWJsZXxjYXNlfGNhdGNofGNsb25lfGNvbnN0fGNvbnRpbnVlfGRlY2xhcmV8ZGVmYXVsdHxkaWV8ZG98ZWNob3xlbHNlfGVsc2VpZnxlbXB0eXxlbmRkZWNsYXJlfGVuZGZvcnxlbmRmb3JlYWNofGVuZGlmfGVuZHN3aXRjaHxlbmR3aGlsZXxlbnVtfGV2YWx8ZXhpdHxleHRlbmRzfGZpbmFsfGZpbmFsbHl8Zm58Zm9yfGZvcmVhY2h8ZnVuY3Rpb258Z2xvYmFsfGdvdG98aWZ8aW1wbGVtZW50c3xpbmNsdWRlfGluY2x1ZGVfb25jZXxpbnN0YW5jZW9mfGluc3RlYWRvZnxpbnRlcmZhY2V8aXNzZXR8bGlzdHxtYXRjaHxuYW1lc3BhY2V8bmV2ZXJ8bmV3fG9yfHBhcmVudHxwcmludHxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVhZG9ubHl8cmVxdWlyZXxyZXF1aXJlX29uY2V8cmV0dXJufHNlbGZ8c3RhdGljfHN3aXRjaHx0aHJvd3x0cmFpdHx0cnl8dW5zZXR8dXNlfHZhcnx3aGlsZXx4b3J8eWllbGR8X19oYWx0X2NvbXBpbGVyKVxcYi9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnYXJndW1lbnQtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oWygsXVxccyopXFxiW2Etel9dXFx3Kig/PVxccyo6KD8hOikpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxuZXcoPyFcXHMrc2VsZnxcXHMrc3RhdGljKSlcXHMrfFxcYmNhdGNoXFxzKlxcKClcXGJbYS16X11cXHcqKD8hXFxcXClcXGIvaSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcfFxccyopXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPyFcXFxcKVxcYig/PVxccypcXHwpL2ksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86XFxcXD9cXGJbYS16X11cXHcqKStcXGIoPz1cXHMqXFx8KS9pLFxuXHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxuZXcoPyFcXHMrc2VsZlxcYnxcXHMrc3RhdGljXFxiKSlcXHMrfFxcYmNhdGNoXFxzKlxcKCkoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCQpL2ksXG5cdFx0XHRcdGFsaWFzOiAndHlwZS1kZWNsYXJhdGlvbicsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6IFsnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLCAndHlwZS1kZWNsYXJhdGlvbiddLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyo6OikvaSxcblx0XHRcdFx0YWxpYXM6ICdzdGF0aWMtY29udGV4dCcsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKjo6KS9pLFxuXHRcdFx0XHRhbGlhczogWydjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZCcsICdzdGF0aWMtY29udGV4dCddLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFsoLD9dXFxzKilbYS16X11cXHcqKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWhpbnQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oWygsP11cXHMqKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6IFsnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLCAndHlwZS1oaW50J10sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwpXFxzKjpcXHMqKD86XFw/XFxzKik/KVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLFxuXHRcdFx0XHRhbGlhczogJ3JldHVybi10eXBlJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKVxccyo6XFxzKig/OlxcP1xccyopPykoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksXG5cdFx0XHRcdGFsaWFzOiBbJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJywgJ3JldHVybi10eXBlJ10sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjb25zdGFudCc6IGNvbnN0YW50LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxcXHddKVxcXFw/W2Etel9dKD86W1xcd1xcXFxdKlxcdyk/KD89XFxzKlxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKC0+XFxzKilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0J29wZXJhdG9yJzogb3BlcmF0b3IsXG5cdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb25cblx0fTtcblxuXHR2YXIgc3RyaW5nX2ludGVycG9sYXRpb24gPSB7XG5cdFx0cGF0dGVybjogL1xce1xcJCg/Olxceyg/Olxce1tee31dK1xcfXxbXnt9XSspXFx9fFtee31dKStcXH18KF58W15cXFxce10pXFwkKyg/OlxcdysoPzpcXFtbXlxcclxcblxcW1xcXV0rXFxdfC0+XFx3Kyk/KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5waHBcblx0fTtcblxuXHR2YXIgc3RyaW5nID0gW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC88PDwnKFteJ10rKSdbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDE7Lyxcblx0XHRcdGFsaWFzOiAnbm93ZG9jLXN0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjw8PCdbXiddKyd8W2Etel9dXFx3KjskL2ksXG5cdFx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148PDwnP3xbJztdJC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC88PDwoPzpcIihbXlwiXSspXCJbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDE7fChbYS16X11cXHcqKVtcXHJcXG5dKD86LipbXFxyXFxuXSkqP1xcMjspL2ksXG5cdFx0XHRhbGlhczogJ2hlcmVkb2Mtc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9ePDw8KD86XCJbXlwiXStcInxbYS16X11cXHcqKXxbYS16X11cXHcqOyQvaSxcblx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCcsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjw8PFwiP3xbXCI7XSQvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHN0cmluZ19pbnRlcnBvbGF0aW9uXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvYCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxgXSkqYC8sXG5cdFx0XHRhbGlhczogJ2JhY2t0aWNrLXF1b3RlZC1zdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJy8sXG5cdFx0XHRhbGlhczogJ3NpbmdsZS1xdW90ZWQtc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIvLFxuXHRcdFx0YWxpYXM6ICdkb3VibGUtcXVvdGVkLXN0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBzdHJpbmdfaW50ZXJwb2xhdGlvblxuXHRcdFx0fVxuXHRcdH1cblx0XTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwaHAnLCAndmFyaWFibGUnLCB7XG5cdFx0J3N0cmluZyc6IHN0cmluZyxcblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogLyNcXFsoPzpbXlwiJ1xcLyNdfFxcLyg/IVsqL10pfFxcL1xcLy4qJHwjKD8hXFxbKS4qJHxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3xcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifCcoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKicpK1xcXSg/PVxccypbYS16JCNdKS9pbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0cmlidXRlLWNvbnRlbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oI1xcWylbXFxzXFxTXSsoPz1cXF0kKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHQvLyBpbnNpZGUgY2FuIGFwcGVhciBzdWJzZXQgb2YgcGhwXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdFx0J2F0dHJpYnV0ZS1jbGFzcy1uYW1lJzogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyhbXjpdfF4pXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdFx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyhbXjpdfF4pKD86XFxcXD9cXGJbYS16X11cXHcqKSsvaSxcblx0XHRcdFx0XHRcdFx0XHRhbGlhczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0J2NsYXNzLW5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJ1xuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHQnY29uc3RhbnQnOiBjb25zdGFudCxcblx0XHRcdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiBvcGVyYXRvcixcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eI1xcW3xcXF0kLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKCEvPFxcPy8udGVzdChlbnYuY29kZSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgcGhwUGF0dGVybiA9IC88XFw/KD86W15cIicvI118XFwvKD8hWyovXSl8KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDF8KD86XFwvXFwvfCMoPyFcXFspKSg/OlteP1xcblxccl18XFw/KD8hPikpKig/PSR8XFw/PnxbXFxyXFxuXSl8I1xcW3xcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKig/OlxcKlxcL3wkKSkqPyg/OlxcPz58JCkvZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAncGhwJywgcGhwUGF0dGVybik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3BocCcpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGphdmFEb2NMaWtlID0gUHJpc20ubGFuZ3VhZ2VzLmphdmFkb2NsaWtlID0ge1xuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKD86XFwvezN9fFxcKnxcXC9cXCpcXCopXFxzKkAoPzphcmd8YXJndW1lbnRzfHBhcmFtKVxccyspXFx3Ky9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHQvLyBrZXl3b3JkcyBhcmUgdGhlIGZpcnN0IHdvcmQgaW4gYSBsaW5lIHByZWNlZGVkIGJlIGFuIGBAYCBvciBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlcy5cblx0XHRcdC8vIEB3b3JkLCB7QHdvcmR9XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKD86XFwvezN9fFxcKnxcXC9cXCpcXCopXFxzKnxcXHspQFthLXpdW2EtekEtWi1dK1xcYi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vXG5cdH07XG5cblxuXHQvKipcblx0ICogQWRkcyBkb2MgY29tbWVudCBzdXBwb3J0IHRvIHRoZSBnaXZlbiBsYW5ndWFnZSBhbmQgY2FsbHMgYSBnaXZlbiBjYWxsYmFjayBvbiBlYWNoIGRvYyBjb21tZW50IHBhdHRlcm4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIHRoZSBsYW5ndWFnZSBhZGQgZG9jIGNvbW1lbnQgc3VwcG9ydCB0by5cblx0ICogQHBhcmFtIHsocGF0dGVybjoge2luc2lkZToge3Jlc3Q6IHVuZGVmaW5lZH19KSA9PiB2b2lkfSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCBkb2MgY29tbWVudCBwYXR0ZXJuIGFzIGFyZ3VtZW50LlxuXHQgKi9cblx0ZnVuY3Rpb24gZG9jQ29tbWVudFN1cHBvcnQobGFuZywgY2FsbGJhY2spIHtcblx0XHR2YXIgdG9rZW5OYW1lID0gJ2RvYy1jb21tZW50JztcblxuXHRcdHZhciBncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2xhbmddO1xuXHRcdGlmICghZ3JhbW1hcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR2YXIgdG9rZW4gPSBncmFtbWFyW3Rva2VuTmFtZV07XG5cblx0XHRpZiAoIXRva2VuKSB7XG5cdFx0XHQvLyBhZGQgZG9jIGNvbW1lbnQ6IC8qKiAqL1xuXHRcdFx0dmFyIGRlZmluaXRpb24gPSB7fTtcblx0XHRcdGRlZmluaXRpb25bdG9rZW5OYW1lXSA9IHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqXFwqW14vXVtcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0XHR9O1xuXG5cdFx0XHRncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShsYW5nLCAnY29tbWVudCcsIGRlZmluaXRpb24pO1xuXHRcdFx0dG9rZW4gPSBncmFtbWFyW3Rva2VuTmFtZV07XG5cdFx0fVxuXG5cdFx0aWYgKHRva2VuIGluc3RhbmNlb2YgUmVnRXhwKSB7IC8vIGNvbnZlcnQgcmVnZXggdG8gb2JqZWN0XG5cdFx0XHR0b2tlbiA9IGdyYW1tYXJbdG9rZW5OYW1lXSA9IHsgcGF0dGVybjogdG9rZW4gfTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0b2tlbikpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdG9rZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0b2tlbltpXSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuXHRcdFx0XHRcdHRva2VuW2ldID0geyBwYXR0ZXJuOiB0b2tlbltpXSB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhbGxiYWNrKHRva2VuW2ldKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FsbGJhY2sodG9rZW4pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGRvYy1jb21tZW50IHN1cHBvcnQgdG8gdGhlIGdpdmVuIGxhbmd1YWdlcyBmb3IgdGhlIGdpdmVuIGRvY3VtZW50YXRpb24gbGFuZ3VhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nW118c3RyaW5nfSBsYW5ndWFnZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IGRvY0xhbmd1YWdlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGRTdXBwb3J0KGxhbmd1YWdlcywgZG9jTGFuZ3VhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGxhbmd1YWdlcyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGxhbmd1YWdlcyA9IFtsYW5ndWFnZXNdO1xuXHRcdH1cblxuXHRcdGxhbmd1YWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5nKSB7XG5cdFx0XHRkb2NDb21tZW50U3VwcG9ydChsYW5nLCBmdW5jdGlvbiAocGF0dGVybikge1xuXHRcdFx0XHRpZiAoIXBhdHRlcm4uaW5zaWRlKSB7XG5cdFx0XHRcdFx0cGF0dGVybi5pbnNpZGUgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXR0ZXJuLmluc2lkZS5yZXN0ID0gZG9jTGFuZ3VhZ2U7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXZhRG9jTGlrZSwgJ2FkZFN1cHBvcnQnLCB7IHZhbHVlOiBhZGRTdXBwb3J0IH0pO1xuXG5cdGphdmFEb2NMaWtlLmFkZFN1cHBvcnQoWydqYXZhJywgJ2phdmFzY3JpcHQnLCAncGhwJ10sIGphdmFEb2NMaWtlKTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvZGVMaW5lUGF0dGVybiA9IC8oXig/OltcXHQgXSooPzpcXCpcXHMqKSopKVteKlxcc10uKiQvbTtcblxuXHR2YXIgbWVtYmVyUmVmZXJlbmNlID0gLyNcXHMqXFx3Kyg/OlxccypcXChbXigpXSpcXCkpPy8uc291cmNlO1xuXHR2YXIgcmVmZXJlbmNlID0gLyg/OlxcYlthLXpBLVpdXFx3K1xccypcXC5cXHMqKSpcXGJbQS1aXVxcdyooPzpcXHMqPG1lbT4pP3w8bWVtPi8uc291cmNlLnJlcGxhY2UoLzxtZW0+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lbWJlclJlZmVyZW5jZTsgfSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFkb2MgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhZG9jbGlrZScsIHt9KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YWRvYycsICdrZXl3b3JkJywge1xuXHRcdCdyZWZlcmVuY2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhAKD86ZXhjZXB0aW9ufGxpbmt8bGlua3BsYWlufHNlZXx0aHJvd3N8dmFsdWUpXFxzKyg/OlxcKlxccyopPykvLnNvdXJjZSArICcoPzonICsgcmVmZXJlbmNlICsgJyknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oI1xccyopXFx3Kyg/PVxccypcXCgpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdmaWVsZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCNcXHMqKVxcdysvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86W2Etel1cXHcqXFxzKlxcLlxccyopKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiAvXFxiW0EtWl1cXHcqLyxcblx0XHRcdFx0J2tleXdvcmQnOiBQcmlzbS5sYW5ndWFnZXMuamF2YS5rZXl3b3JkLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyMoKVtcXF0sLl0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdC8vIEBwYXJhbSA8VD4gdGhlIGZpcnN0IGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJcblx0XHRcdHBhdHRlcm46IC8oQHBhcmFtXFxzKyk8W0EtWl1cXHcqPi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLjw+XS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb2RlLXNlY3Rpb24nOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFx7QGNvZGVcXHMrKD8hXFxzKSkoPzpbXlxcc3t9XXxcXHMrKD8hW1xcc31dKXxcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkqXFx9KSpcXH0pKyg/PVxccypcXH0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2NvZGUnOiB7XG5cdFx0XHRcdFx0XHQvLyB0aGVyZSBjYW4ndCBiZSBhbnkgSFRNTCBpbnNpZGUgb2Yge0Bjb2RlfSB0YWdzXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBjb2RlTGluZVBhdHRlcm4sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YSdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oPChjb2RlfHByZXx0dCk+KD8hPGNvZGU+KVxccyopXFxTKD86XFxTfFxccytcXFMpKj8oPz1cXHMqPFxcL1xcMj4pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2xpbmUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBjb2RlTGluZVBhdHRlcm4sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGhpZ2hsaWdodCBIVE1MIHRhZ3MgYW5kIGVudGl0aWVzXG5cdFx0XHRcdFx0XHRcdCd0YWcnOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZyxcblx0XHRcdFx0XHRcdFx0J2VudGl0eSc6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAuZW50aXR5LFxuXHRcdFx0XHRcdFx0XHQnY29kZSc6IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBldmVyeXRoaW5nIGVsc2UgaXMgSmF2YSBjb2RlXG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLy4rLyxcblx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YSdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3RhZyc6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLFxuXHRcdCdlbnRpdHknOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLmVudGl0eSxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFkb2NsaWtlLmFkZFN1cHBvcnQoJ2phdmEnLCBQcmlzbS5sYW5ndWFnZXMuamF2YWRvYyk7XG59KFByaXNtKSk7XG5cbi8vIFNwZWNpZmljYXRpb246XG4vLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMy9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI3ByaW50U3RhY2tUcmFjZSgpXG5cblByaXNtLmxhbmd1YWdlcy5qYXZhc3RhY2t0cmFjZSA9IHtcblxuXHQvLyBqYXZhLnNxbC5TUUxFeGNlcHRpb246IFZpb2xhdGlvbiBvZiB1bmlxdWUgY29uc3RyYWludCBNWV9FTlRJVFlfVUtfMTogZHVwbGljYXRlIHZhbHVlKHMpIGZvciBjb2x1bW4ocykgTVlfQ09MVU1OIGluIHN0YXRlbWVudCBbLi4uXVxuXHQvLyBDYXVzZWQgYnk6IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjogVmlvbGF0aW9uIG9mIHVuaXF1ZSBjb25zdHJhaW50IE1ZX0VOVElUWV9VS18xOiBkdXBsaWNhdGUgdmFsdWUocykgZm9yIGNvbHVtbihzKSBNWV9DT0xVTU4gaW4gc3RhdGVtZW50IFsuLi5dXG5cdC8vIENhdXNlZCBieTogY29tLmV4YW1wbGUubXlwcm9qZWN0Lk15UHJvamVjdFNlcnZsZXRFeGNlcHRpb25cblx0Ly8gQ2F1c2VkIGJ5OiBNaWRMZXZlbEV4Y2VwdGlvbjogTG93TGV2ZWxFeGNlcHRpb25cblx0Ly8gU3VwcHJlc3NlZDogUmVzb3VyY2UkQ2xvc2VGYWlsRXhjZXB0aW9uOiBSZXNvdXJjZSBJRCA9IDBcblx0J3N1bW1hcnknOiB7XG5cdFx0cGF0dGVybjogL14oW1xcdCBdKikoPzooPzpDYXVzZWQgYnk6fFN1cHByZXNzZWQ6fEV4Y2VwdGlvbiBpbiB0aHJlYWQgXCJbXlwiXSpcIilbXFx0IF0rKT9bXFx3JC5dKyg/OjouKik/JC9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oW1xcdCBdKikoPzooPzpDYXVzZWQgYnl8U3VwcHJlc3NlZCkoPz06KXxFeGNlcHRpb24gaW4gdGhyZWFkKS9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyB0aGUgY3VycmVudCB0aHJlYWQgaWYgdGhlIHN1bW1hcnkgc3RhcnRzIHdpdGggJ0V4Y2VwdGlvbiBpbiB0aHJlYWQnXG5cdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVwiW15cIl0qXCIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2V4Y2VwdGlvbnMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKDo/XFxzKilbXFx3JC5dKyg/PTp8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnY2xhc3MtbmFtZSc6IC9bXFx3JF0rJC8sXG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9cXGJbYS16XVxcdypcXGIvLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnbWVzc2FnZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyg6XFxzKilcXFMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdH1cblx0fSxcblxuXHQvLyBhdCBvcmcubW9ydGJheS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIYW5kbGVyJENhY2hlZENoYWluLmRvRmlsdGVyKFNlcnZsZXRIYW5kbGVyLmphdmE6MTE2Nilcblx0Ly8gYXQgb3JnLmhzcWxkYi5qZGJjLlV0aWwudGhyb3dFcnJvcihVbmtub3duIFNvdXJjZSkgaGVyZSBjb3VsZCBiZSBzb21lIG5vdGVzXG5cdC8vIGF0IGphdmEuYmFzZS9qYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZClcblx0Ly8gYXQgVXRpbC48aW5pdD4oVW5rbm93biBTb3VyY2UpXG5cdC8vIGF0IGNvbS5mb28ubG9hZGVyL2Zvb0A5LjAvY29tLmZvby5NYWluLnJ1bihNYWluLmphdmE6MTAxKVxuXHQvLyBhdCBjb20uZm9vLmxvYWRlci8vY29tLmZvby5iYXIuQXBwLnJ1bihBcHAuamF2YToxMilcblx0Ly8gYXQgYWNtZUAyLjEvb3JnLmFjbWUuTGliLnRlc3QoTGliLmphdmE6ODApXG5cdC8vIGF0IE15Q2xhc3MubWFzaChNeUNsYXNzLmphdmE6OSlcblx0Ly9cblx0Ly8gTW9yZSBpbmZvcm1hdGlvbjpcblx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTMvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvbGFuZy9TdGFja1RyYWNlRWxlbWVudC5odG1sI3RvU3RyaW5nKClcblx0Ly9cblx0Ly8gQSB2YWxpZCBKYXZhIG1vZHVsZSBuYW1lIGlzIGRlZmluZWQgYXM6XG5cdC8vICAgXCJBIG1vZHVsZSBuYW1lIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIEphdmEgaWRlbnRpZmllcnMgKFx1MDBBNzMuOCkgc2VwYXJhdGVkIGJ5IFwiLlwiIHRva2Vucy5cIlxuXHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlOS9odG1sL2pscy02Lmh0bWwjamxzLU1vZHVsZU5hbWVcblx0Ly9cblx0Ly8gQSBKYXZhIG1vZHVsZSB2ZXJzaW9uIGlzIGRlZmluZWQgYnkgdGhpcyBjbGFzczpcblx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzkvZG9jcy9hcGkvamF2YS9sYW5nL21vZHVsZS9Nb2R1bGVEZXNjcmlwdG9yLlZlcnNpb24uaHRtbFxuXHQvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHBhcnNlYCBtZXRob2QgaW4gSkRLMTM6XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRjZGFjL2pkay9ibG9iLzIzMDVkZjcxZDFiNzcxMDI2NmFlMDk1NmQ3MzkyN2EyMjUxMzJjMGYvc3JjL2phdmEuYmFzZS9zaGFyZS9jbGFzc2VzL2phdmEvbGFuZy9tb2R1bGUvTW9kdWxlRGVzY3JpcHRvci5qYXZhI0wxMTA4XG5cdC8vIEhvd2V2ZXIsIHRvIGtlZXAgdGhpcyBzaW1wbGUsIGEgdmVyc2lvbiB3aWxsIGJlIG1hdGNoZWQgYnkgdGhlIHBhdHRlcm4gL0BbXFx3JC4rLV0qLy5cblx0J3N0YWNrLWZyYW1lJzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopYXQgKD86W1xcdyQuL118QFtcXHckListXSpcXC8pKyg/Ojxpbml0Pik/XFwoW14oKV0qXFwpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKWF0KD89ICkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3NvdXJjZSc6IFtcblx0XHRcdFx0Ly8gKE1haW4uamF2YToxNSlcblx0XHRcdFx0Ly8gKE1haW4uc2NhbGE6MTUpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcKClcXHcrXFwuXFx3KzpcXGQrKD89XFwpKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdmaWxlJzogL15cXHcrXFwuXFx3Ky8sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdFx0XHQnbGluZS1udW1iZXInOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXGJcXGQrXFxiLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyAoVW5rbm93biBTb3VyY2UpXG5cdFx0XHRcdC8vIChOYXRpdmUgTWV0aG9kKVxuXHRcdFx0XHQvLyAoLi4uc29tZXRoaW5nLi4uKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXCgpW14oKV0qKD89XFwpKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL14oPzpOYXRpdmUgTWV0aG9kfFVua25vd24gU291cmNlKSQvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0J2NsYXNzLW5hbWUnOiAvW1xcdyRdKyg/PVxcLig/Ojxpbml0PnxbXFx3JF0rKVxcKCkvLFxuXHRcdFx0J2Z1bmN0aW9uJzogLyg/Ojxpbml0PnxbXFx3JF0rKSg/PVxcKCkvLFxuXHRcdFx0J2NsYXNzLWxvYWRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHMpW2Etel1cXHcqKD86XFwuW2Etel1cXHcqKSooPz1cXC9bXFx3QCQuXSpcXC8pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICduYW1lc3BhY2UnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J21vZHVsZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXFxzL10pW2Etel1cXHcqKD86XFwuW2Etel1cXHcqKSooPzpAW1xcdyQuKy1dKik/KD89XFwvKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCd2ZXJzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhAKVtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW0AuXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXGJbYS16XVxcdypcXC4pKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLy5dL1xuXHRcdH1cblx0fSxcblxuXHQvLyAuLi4gMzIgbW9yZVxuXHQvLyAuLi4gMzIgY29tbW9uIGZyYW1lcyBvbWl0dGVkXG5cdCdtb3JlJzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopXFwuezN9IFxcZCsgW2Etel0rKD86IFthLXpdKykqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC57M30vLFxuXHRcdFx0J251bWJlcic6IC9cXGQrLyxcblx0XHRcdCdrZXl3b3JkJzogL1xcYlthLXpdKyg/OiBbYS16XSspKlxcYi9cblx0XHR9XG5cdH1cblxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmpleGwgPSB7XG5cdCdzdHJpbmcnOiAvKFtcIiddKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0J3RyYW5zZm9ybSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcfFxccyopW2EtekEtWlx1MDQzMC1cdTA0NEZcdTA0MTAtXHUwNDJGX1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRiRdW1xcd1x1MDQzMC1cdTA0NEZcdTA0MTAtXHUwNDJGXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGJF0qLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9bYS16QS1aXHUwNDMwLVx1MDQ0Rlx1MDQxMC1cdTA0MkZfXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGJF1bXFx3XHUwNDMwLVx1MDQ0Rlx1MDQxMC1cdTA0MkZcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAwRkYkXSpcXHMqKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspP1xcYnxcXEJcXC5cXGQrXFxiLyxcblx0J29wZXJhdG9yJzogL1s8PiFdPT98LXxcXCt8JiZ8PT18XFx8XFx8P3xcXC9cXC8/fFs/OipeJV0vLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYmluXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF0oKSwuXS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuam9saWUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlxcXFxbXFxzXFxTXXxbXlwiXFxcXF0pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/OlxcYig/OmFzfGNvdXJpZXJ8ZW1iZWR8aW58aW5wdXRQb3J0fG91dHB1dFBvcnR8c2VydmljZSlcXGJ8QClbIFxcdF0qKVxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YXN8Y0h8Y29tcHxjb25jdXJyZW50fGNvbnN0YW50c3xjb3VyaWVyfGNzZXR8Y3NldHN8ZGVmYXVsdHxkZWZpbmV8ZWxzZXxlbWJlZHxlbWJlZGRlZHxleGVjdXRpb258ZXhpdHxleHRlbmRlcnxmb3J8Zm9yZWFjaHxmb3J3YXJkfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpbmNsdWRlfGluaXR8aW5wdXRQb3J0fGluc3RhbGx8aW5zdGFuY2VvZnxpbnRlcmZhY2V8aXNfZGVmaW5lZHxsaW5rSW58bGlua091dHxtYWlufG5ld3xudWxsUHJvY2Vzc3xvdXRwdXRQb3J0fG92ZXJ8cHJpdmF0ZXxwcm92aWRlfHB1YmxpY3xzY29wZXxzZXF1ZW50aWFsfHNlcnZpY2V8c2luZ2xlfHNwYXdufHN5bmNocm9uaXplZHx0aGlzfHRocm93fHRocm93c3x0eXBlfHVuZGVmfHVudGlsfHdoaWxlfHdpdGgpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1bIFxcdF0qW0AoXSkvaSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/bD8vaSxcblx0J29wZXJhdG9yJzogLy1bLT0+XT98XFwrWys9XT98PFs8PV0/fFs+PSohXT0/fCYmfFxcfFxcfHxbP1xcLyVeQHxdLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fSw7LjpdLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86Qnl0ZXxhbnl8Ym9vbHxjaGFyfGRvdWJsZXxlbnVtfGZsb2F0fGludHxsZW5ndGh8bG9uZ3xyYW5nZXN8cmVnZXh8c3RyaW5nfHVuZGVmaW5lZHx2b2lkKVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqb2xpZScsICdrZXl3b3JkJywge1xuXHQnYWdncmVnYXRlcyc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYkFnZ3JlZ2F0ZXNcXHMqOlxccyopKD86XFx3Kyg/Olxccyt3aXRoXFxzK1xcdyspP1xccyosXFxzKikqXFx3Kyg/Olxccyt3aXRoXFxzK1xcdyspPy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL1xcYndpdGhcXGIvLFxuXHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHR9XG5cdH0sXG5cdCdyZWRpcmVjdHMnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJSZWRpcmVjdHNcXHMqOlxccyopKD86XFx3K1xccyo9PlxccypcXHcrXFxzKixcXHMqKSooPzpcXHcrXFxzKj0+XFxzKlxcdyspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLywvLFxuXHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky8sXG5cdFx0XHQnb3BlcmF0b3InOiAvPT4vXG5cdFx0fVxuXHR9LFxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFnZ3JlZ2F0ZXN8W0lpXW50ZXJmYWNlc3xKYXZhfEphdmFzY3JpcHR8Sm9saWV8W0xsXW9jYXRpb258T25lV2F5fFtQcF1yb3RvY29sfFJlZGlyZWN0c3xSZXF1ZXN0UmVzcG9uc2UpXFxiKD89WyBcXHRdKjopL1xuXHR9XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uID0gL1xcXFxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKS8uc291cmNlO1xuXHR2YXIgc3RyaW5nID0gUmVnRXhwKC8oXnxbXlxcXFxdKVwiKD86W15cIlxcclxcblxcXFxdfFxcXFxbXlxcclxcbihdfF9fKSpcIi8uc291cmNlLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVycG9sYXRpb247IH0pKTtcblx0dmFyIHN0cmluZ0ludGVycG9sYXRpb24gPSB7XG5cdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKS8uc291cmNlICsgaW50ZXJwb2xhdGlvbiksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxcXFxcXCgpW1xcc1xcU10rKD89XFwpJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcXFxcXCh8XFwpJC9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGpxID0gUHJpc20ubGFuZ3VhZ2VzLmpxID0ge1xuXHRcdCdjb21tZW50JzogLyMuKi8sXG5cdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZy5zb3VyY2UgKyAvKD89XFxzKjooPyE6KSkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBzdHJpbmdJbnRlcnBvbGF0aW9uXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogc3RyaW5nSW50ZXJwb2xhdGlvblxuXHRcdH0sXG5cblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmRlZlxccyspW2Etel9dXFx3Ky9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQndmFyaWFibGUnOiAvXFxCXFwkXFx3Ky8sXG5cdFx0J3Byb3BlcnR5LWxpdGVyYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyo6KD8hOikpL2ksXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YXN8YnJlYWt8Y2F0Y2h8ZGVmfGVsaWZ8ZWxzZXxlbmR8Zm9yZWFjaHxpZnxpbXBvcnR8aW5jbHVkZXxsYWJlbHxtb2R1bGV8bW9kdWxlbWV0YXxudWxsfHJlZHVjZXx0aGVufHRyeXx3aGlsZSlcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnbnVtYmVyJzogLyg/OlxcYlxcZCtcXC58XFxCXFwuKT9cXGJcXGQrKD86W2VFXVsrLV0/XFxkKyk/XFxiLyxcblxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcfD0/Lyxcblx0XHRcdFx0YWxpYXM6ICdwaXBlJ1xuXHRcdFx0fSxcblx0XHRcdC9cXC5cXC58WyE9PD5dPz18XFw/XFwvXFwvfFxcL1xcLz0/fFstKyovJV09P3xbPD4/XXxcXGIoPzphbmR8bm90fG9yKVxcYi9cblx0XHRdLFxuXHRcdCdjLXN0eWxlLWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC86OnxbKClcXFtcXF17fSw6O118XFwuKD89XFxzKltcXFtcXHckXSkvLFxuXHRcdCdkb3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH1cblx0fTtcblxuXHRzdHJpbmdJbnRlcnBvbGF0aW9uLmludGVycG9sYXRpb24uaW5zaWRlLmNvbnRlbnQuaW5zaWRlID0ganE7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YXNjcmlwdCcsIHtcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8aW50ZXJmYWNlfG5ld3x0eXBlKVxccyspKD8ha2V5b2ZcXGIpKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/Olxccyo8KD86W148Pl18PCg/OltePD5dfDxbXjw+XSo+KSo+KSo+KT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHR9LFxuXHRcdCdidWlsdGluJzogL1xcYig/OkFycmF5fEZ1bmN0aW9ufFByb21pc2V8YW55fGJvb2xlYW58Y29uc29sZXxuZXZlcnxudW1iZXJ8c3RyaW5nfHN5bWJvbHx1bmtub3duKVxcYi8sXG5cdH0pO1xuXG5cdC8vIFRoZSBrZXl3b3JkcyBUeXBlU2NyaXB0IGFkZHMgdG8gSmF2YVNjcmlwdFxuXHRQcmlzbS5sYW5ndWFnZXMudHlwZXNjcmlwdC5rZXl3b3JkLnB1c2goXG5cdFx0L1xcYig/OmFic3RyYWN0fGRlY2xhcmV8aXN8a2V5b2Z8cmVhZG9ubHl8cmVxdWlyZSlcXGIvLFxuXHRcdC8vIGtleXdvcmRzIHRoYXQgaGF2ZSB0byBiZSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyXG5cdFx0L1xcYig/OmFzc2VydHN8aW5mZXJ8aW50ZXJmYWNlfG1vZHVsZXxuYW1lc3BhY2V8dHlwZSlcXGIoPz1cXHMqKD86W3tfJGEtekEtWlxceEEwLVxcdUZGRkZdfCQpKS8sXG5cdFx0Ly8gVGhpcyBpcyBmb3IgYGltcG9ydCB0eXBlICosIHt9YFxuXHRcdC9cXGJ0eXBlXFxiKD89XFxzKig/OltcXHsqXXwkKSkvXG5cdCk7XG5cblx0Ly8gZG9lc24ndCB3b3JrIHdpdGggVFMgYmVjYXVzZSBUUyBpcyB0b28gY29tcGxleFxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbJ3BhcmFtZXRlciddO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbJ2xpdGVyYWwtcHJvcGVydHknXTtcblxuXHQvLyBhIHZlcnNpb24gb2YgdHlwZXNjcmlwdCBzcGVjaWZpY2FsbHkgZm9yIGhpZ2hsaWdodGluZyB0eXBlc1xuXHR2YXIgdHlwZUluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ3R5cGVzY3JpcHQnLCB7fSk7XG5cdGRlbGV0ZSB0eXBlSW5zaWRlWydjbGFzcy1uYW1lJ107XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbJ2NsYXNzLW5hbWUnXS5pbnNpZGUgPSB0eXBlSW5zaWRlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3R5cGVzY3JpcHQnLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2RlY29yYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC9AWyRcXHdcXHhBMC1cXHVGRkZGXSsvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXkAvLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2dlbmVyaWMtZnVuY3Rpb24nOiB7XG5cdFx0XHQvLyBlLmcuIGZvbzxUIGV4dGVuZHMgXCJiYXJcIiB8IFwiYmF6XCI+KCAuLi5cblx0XHRcdHBhdHRlcm46IC8jPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSpcXHMqPCg/OltePD5dfDwoPzpbXjw+XXw8W148Pl0qPikqPikqPig/PVxccypcXCgpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXiM/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKi8sXG5cdFx0XHRcdCdnZW5lcmljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W1xcc1xcU10rLywgLy8gZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgPFxuXHRcdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy50cyA9IFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0O1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgamF2YXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0O1xuXG5cdHZhciB0eXBlID0gL1xceyg/Oltee31dfFxceyg/Oltee31dfFxce1tee31dKlxcfSkqXFx9KStcXH0vLnNvdXJjZTtcblx0dmFyIHBhcmFtZXRlclByZWZpeCA9ICcoQCg/OmFyZ3xhcmd1bWVudHxwYXJhbXxwcm9wZXJ0eSlcXFxccysoPzonICsgdHlwZSArICdcXFxccyspPyknO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qc2RvYyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFkb2NsaWtlJywge1xuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHQvLyBAcGFyYW0ge3N0cmluZ30gZm9vIC0gZm9vIGJhclxuXHRcdFx0cGF0dGVybjogUmVnRXhwKHBhcmFtZXRlclByZWZpeCArIC8oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGLl0pKyg/PVxcc3wkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2pzZG9jJywgJ2tleXdvcmQnLCB7XG5cdFx0J29wdGlvbmFsLXBhcmFtZXRlcic6IHtcblx0XHRcdC8vIEBwYXJhbSB7c3RyaW5nfSBbYmF6LmZvbz1cImJhclwiXSBmb28gYmFyXG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyYW1ldGVyUHJlZml4ICsgL1xcWyg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkYuXSkrKD86PVteW1xcXV0rKT9cXF0oPz1cXHN8JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFxbKVskXFx3XFx4QTAtXFx1RkZGRlxcLl0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb2RlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPSlbXFxzXFxTXSooPz1cXF0kKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IGphdmFzY3JpcHQsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhc2NyaXB0J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWz1bXFxdXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhAKD86YXVnbWVudHN8Y2xhc3N8ZXh0ZW5kc3xpbnRlcmZhY2V8bWVtYmVyb2YhP3x0ZW1wbGF0ZXx0aGlzfHR5cGVkZWYpXFxzKyg/OjxUWVBFPlxccyspPylbQS1aXVxcdyooPzpcXC5bQS1aXVxcdyopKi8uc291cmNlLnJlcGxhY2UoLzxUWVBFPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlOyB9KSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKEBbYS16XStcXFxccyspJyArIHR5cGUpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnc3RyaW5nJzogamF2YXNjcmlwdC5zdHJpbmcsXG5cdFx0XHRcdFx0J251bWJlcic6IGphdmFzY3JpcHQubnVtYmVyLFxuXHRcdFx0XHRcdCdib29sZWFuJzogamF2YXNjcmlwdC5ib29sZWFuLFxuXHRcdFx0XHRcdCdrZXl3b3JkJzogUHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHQua2V5d29yZCxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvPT58XFwuXFwuXFwufFsmfD86Kl0vLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLiw7PTw+e30oKVtcXF1dL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnZXhhbXBsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oQGV4YW1wbGVcXHMrKD8hXFxzKSkoPzpbXkBcXHNdfFxccysoPyFcXHMpKSs/KD89XFxzKig/OlxcKlxccyopPyg/OkBcXHd8XFwqXFwvKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29kZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKD86XFwqXFxzKik/KVxcUy4qJC9tLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBqYXZhc2NyaXB0LFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YXNjcmlwdCdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFkb2NsaWtlLmFkZFN1cHBvcnQoJ2phdmFzY3JpcHQnLCBQcmlzbS5sYW5ndWFnZXMuanNkb2MpO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2Z1bmN0aW9uLXZhcmlhYmxlJywge1xuXHRcdCdtZXRob2QtdmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhcXFxcLlxcXFxzKiknICsgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ2Z1bmN0aW9uLXZhcmlhYmxlJ10ucGF0dGVybi5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiBbJ2Z1bmN0aW9uLXZhcmlhYmxlJywgJ21ldGhvZCcsICdmdW5jdGlvbicsICdwcm9wZXJ0eS1hY2Nlc3MnXVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdmdW5jdGlvbicsIHtcblx0XHQnbWV0aG9kJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXFxcXC5cXFxccyopJyArIFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0WydmdW5jdGlvbiddLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6IFsnZnVuY3Rpb24nLCAncHJvcGVydHktYWNjZXNzJ11cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnY29uc3RhbnQnLCB7XG5cdFx0J2tub3duLWNsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHN0YW5kYXJkIGJ1aWx0LWluc1xuXHRcdFx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0c1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86KD86RmxvYXQoPzozMnw2NCl8KD86SW50fFVpbnQpKD86OHwxNnwzMil8VWludDhDbGFtcGVkKT9BcnJheXxBcnJheUJ1ZmZlcnxCaWdJbnR8Qm9vbGVhbnxEYXRhVmlld3xEYXRlfEVycm9yfEZ1bmN0aW9ufEludGx8SlNPTnwoPzpXZWFrKT8oPzpNYXB8U2V0KXxNYXRofE51bWJlcnxPYmplY3R8UHJvbWlzZXxQcm94eXxSZWZsZWN0fFJlZ0V4cHxTdHJpbmd8U3ltYm9sfFdlYkFzc2VtYmx5KVxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGVycm9yc1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86W0EtWl1cXHcqKUVycm9yXFxiLyxcblx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdFx0fVxuXHRcdF1cblx0fSk7XG5cblx0LyoqXG5cdCAqIFJlcGxhY2VzIHRoZSBgPElEPmAgcGxhY2Vob2xkZXIgaW4gdGhlIGdpdmVuIHBhdHRlcm4gd2l0aCBhIHBhdHRlcm4gZm9yIGdlbmVyYWwgSlMgaWRlbnRpZmllcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIHdpdGhJZChzb3VyY2UsIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChcblx0XHRcdHNvdXJjZS5yZXBsYWNlKC88SUQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqLy5zb3VyY2U7IH0pLFxuXHRcdFx0ZmxhZ3MpO1xuXHR9XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAna2V5d29yZCcsIHtcblx0XHQnaW1wb3J0cyc6IHtcblx0XHRcdC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaW1wb3J0c1xuXHRcdFx0cGF0dGVybjogd2l0aElkKC8oXFxiaW1wb3J0XFxiXFxzKikoPzo8SUQ+KD86XFxzKixcXHMqKD86XFwqXFxzKmFzXFxzKzxJRD58XFx7W157fV0qXFx9KSk/fFxcKlxccyphc1xccys8SUQ+fFxce1tee31dKlxcfSkoPz1cXHMqXFxiZnJvbVxcYikvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0J2V4cG9ydHMnOiB7XG5cdFx0XHQvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWV4cG9ydHNcblx0XHRcdHBhdHRlcm46IHdpdGhJZCgvKFxcYmV4cG9ydFxcYlxccyopKD86XFwqKD86XFxzKmFzXFxzKzxJRD4pPyg/PVxccypcXGJmcm9tXFxiKXxcXHtbXnt9XSpcXH0pLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0WydrZXl3b3JkJ10udW5zaGlmdChcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YXN8ZGVmYXVsdHxleHBvcnR8ZnJvbXxpbXBvcnQpXFxiLyxcblx0XHRcdGFsaWFzOiAnbW9kdWxlJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmF3YWl0fGJyZWFrfGNhdGNofGNvbnRpbnVlfGRvfGVsc2V8ZmluYWxseXxmb3J8aWZ8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8d2hpbGV8eWllbGQpXFxiLyxcblx0XHRcdGFsaWFzOiAnY29udHJvbC1mbG93J1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYm51bGxcXGIvLFxuXHRcdFx0YWxpYXM6IFsnbnVsbCcsICduaWwnXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYnVuZGVmaW5lZFxcYi8sXG5cdFx0XHRhbGlhczogJ25pbCdcblx0XHR9XG5cdCk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdvcGVyYXRvcicsIHtcblx0XHQnc3ByZWFkJzoge1xuXHRcdFx0cGF0dGVybjogL1xcLnszfS8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2Fycm93Jzoge1xuXHRcdFx0cGF0dGVybjogLz0+Lyxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ3B1bmN0dWF0aW9uJywge1xuXHRcdCdwcm9wZXJ0eS1hY2Nlc3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3aXRoSWQoLyhcXC5cXHMqKSM/PElEPi8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdtYXliZS1jbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteJFxcd1xceEEwLVxcdUZGRkZdKVtBLVpdWyRcXHdcXHhBMC1cXHVGRkZGXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RvbSc6IHtcblx0XHRcdC8vIHRoaXMgY29udGFpbnMgb25seSBhIGZldyBjb21tb25seSB1c2VkIERPTSB2YXJpYWJsZXNcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpkb2N1bWVudHwoPzpsb2NhbHxzZXNzaW9uKVN0b3JhZ2V8bG9jYXRpb258bmF2aWdhdG9yfHBlcmZvcm1hbmNlfHdpbmRvdylcXGIvLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXHRcdCdjb25zb2xlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYmNvbnNvbGUoPz1cXHMqXFwuKS8sXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fVxuXHR9KTtcblxuXG5cdC8vIGFkZCAnbWF5YmUtY2xhc3MtbmFtZScgdG8gdG9rZW5zIHdoaWNoIG1pZ2h0IGJlIGEgY2xhc3MgbmFtZVxuXHR2YXIgbWF5YmVDbGFzc05hbWVUb2tlbnMgPSBbJ2Z1bmN0aW9uJywgJ2Z1bmN0aW9uLXZhcmlhYmxlJywgJ21ldGhvZCcsICdtZXRob2QtdmFyaWFibGUnLCAncHJvcGVydHktYWNjZXNzJ107XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXliZUNsYXNzTmFtZVRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0b2tlbiA9IG1heWJlQ2xhc3NOYW1lVG9rZW5zW2ldO1xuXHRcdHZhciB2YWx1ZSA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0W3Rva2VuXTtcblxuXHRcdC8vIGNvbnZlcnQgcmVnZXggdG8gb2JqZWN0XG5cdFx0aWYgKFByaXNtLnV0aWwudHlwZSh2YWx1ZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHR2YWx1ZSA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0W3Rva2VuXSA9IHtcblx0XHRcdFx0cGF0dGVybjogdmFsdWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8ga2VlcCBpbiBtaW5kIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCBhcnJheXNcblxuXHRcdHZhciBpbnNpZGUgPSB2YWx1ZS5pbnNpZGUgfHwge307XG5cdFx0dmFsdWUuaW5zaWRlID0gaW5zaWRlO1xuXG5cdFx0aW5zaWRlWydtYXliZS1jbGFzcy1uYW1lJ10gPSAvXltBLVpdW1xcc1xcU10qLztcblx0fVxuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3Lmpzb24ub3JnL2pzb24tZW4uaHRtbFxuUHJpc20ubGFuZ3VhZ2VzLmpzb24gPSB7XG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIoPz1cXHMqOikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKD8hXFxzKjopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvLT9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdLF0vLFxuXHQnb3BlcmF0b3InOiAvOi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bGwnOiB7XG5cdFx0cGF0dGVybjogL1xcYm51bGxcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLndlYm1hbmlmZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLmpzb247XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nID0gLyhcInwnKSg/OlxcXFwoPzpcXHJcXG4/fFxcbnwuKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLztcblxuXHRQcmlzbS5sYW5ndWFnZXMuanNvbjUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqc29uJywge1xuXHRcdCdwcm9wZXJ0eSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZy5zb3VyY2UgKyAnKD89XFxcXHMqOiknKSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyo6KS8sXG5cdFx0XHRcdGFsaWFzOiAndW5xdW90ZWQnXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1srLV0/XFxiKD86TmFOfEluZmluaXR5fDB4W2EtZkEtRlxcZF0rKVxcYnxbKy1dPyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbZUVdWystXT9cXGQrXFxiKT8vXG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5qc29ucCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2pzb24nLCB7XG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdKCk7LC5dL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2pzb25wJywgJ3B1bmN0dWF0aW9uJywge1xuXHQnZnVuY3Rpb24nOiAvKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccypcXCgpL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5qc3N0YWNrdHJhY2UgPSB7XG5cdCdlcnJvci1tZXNzYWdlJzoge1xuXHRcdHBhdHRlcm46IC9eXFxTLiovbSxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblxuXHQnc3RhY2stZnJhbWUnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKylhdFsgXFx0XS4qL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdub3QtbXktY29kZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15hdFsgXFx0XSsoPyFcXHMpKD86bm9kZVxcLmpzfDx1bmtub3duPnwuKig/Om5vZGVfbW9kdWxlc3xcXCg8YW5vbnltb3VzPlxcKXxcXCg8dW5rbm93bj58PGFub255bW91cz4kfFxcKGludGVybmFsXFwvfFxcKG5vZGVcXC5qcykpLiovbSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fSxcblxuXHRcdFx0J2ZpbGVuYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcYmF0XFxzKyg/IVxccyl8XFwoKSg/OlthLXpBLVpdOik/W14oKTpdKyg/PTopLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICd1cmwnXG5cdFx0XHR9LFxuXG5cdFx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiYXRcXHMrKD86bmV3XFxzKyk/KSg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGPF1bLiRcXHdcXHhBMC1cXHVGRkZGPD5dKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldLyxcblxuXHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXR8bmV3KVxcYi8sXG5cblx0XHRcdCdhbGlhcyc6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcWyg/OmFzXFxzKyk/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSpcXF0vLFxuXHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0fSxcblxuXHRcdFx0J2xpbmUtbnVtYmVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvOlxcZCsoPzo6XFxkKyk/XFxiLyxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdH1cblx0fVxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciB0ZW1wbGF0ZVN0cmluZyA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0Wyd0ZW1wbGF0ZS1zdHJpbmcnXTtcblxuXHQvLyBzZWUgdGhlIHBhdHRlcm4gaW4gcHJpc20tamF2YXNjcmlwdC5qc1xuXHR2YXIgdGVtcGxhdGVMaXRlcmFsUGF0dGVybiA9IHRlbXBsYXRlU3RyaW5nLnBhdHRlcm4uc291cmNlO1xuXHR2YXIgaW50ZXJwb2xhdGlvbk9iamVjdCA9IHRlbXBsYXRlU3RyaW5nLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddO1xuXHR2YXIgaW50ZXJwb2xhdGlvblB1bmN0dWF0aW9uT2JqZWN0ID0gaW50ZXJwb2xhdGlvbk9iamVjdC5pbnNpZGVbJ2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nXTtcblx0dmFyIGludGVycG9sYXRpb25QYXR0ZXJuID0gaW50ZXJwb2xhdGlvbk9iamVjdC5wYXR0ZXJuLnNvdXJjZTtcblxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHBhdHRlcm4gdG8gbWF0Y2ggYSB0ZW1wbGF0ZSBzdHJpbmcgd2l0aCBhIHNwZWNpYWwgdGFnLlxuXHQgKlxuXHQgKiBUaGlzIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIGdyYW1tYXIgd2l0aCB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbGFuZ3VhZ2UgaWQgb2YgdGhlIGVtYmVkZGVkIGxhbmd1YWdlLiBFLmcuIGBtYXJrZG93bmAuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggdGhlIHRhZy5cblx0ICogQHJldHVybnMge29iamVjdCB8IHVuZGVmaW5lZH1cblx0ICogQGV4YW1wbGVcblx0ICogY3JlYXRlVGVtcGxhdGUoJ2NzcycsIC9cXGJjc3MvLnNvdXJjZSk7XG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZShsYW5ndWFnZSwgdGFnKSB7XG5cdFx0aWYgKCFQcmlzbS5sYW5ndWFnZXNbbGFuZ3VhZ2VdKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJygoPzonICsgdGFnICsgJylcXFxccyopJyArIHRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndGVtcGxhdGUtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0fSxcblx0XHRcdFx0J2VtYmVkZGVkLWNvZGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0YWxpYXM6IGxhbmd1YWdlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFsndGVtcGxhdGUtc3RyaW5nJ10gPSBbXG5cdFx0Ly8gc3R5bGVkLWpzeDpcblx0XHQvLyAgIGNzc2BhIHsgY29sb3I6ICMyNUY7IH1gXG5cdFx0Ly8gc3R5bGVkLWNvbXBvbmVudHM6XG5cdFx0Ly8gICBzdHlsZWQuaDFgY29sb3I6IHJlZDtgXG5cdFx0Y3JlYXRlVGVtcGxhdGUoJ2NzcycsIC9cXGIoPzpzdHlsZWQoPzpcXChbXildKlxcKSk/KD86XFxzKlxcLlxccypcXHcrKD86XFwoW14pXSpcXCkpKikqfGNzcyg/OlxccypcXC5cXHMqKD86Z2xvYmFsfHJlc29sdmUpKT98Y3JlYXRlR2xvYmFsU3R5bGV8a2V5ZnJhbWVzKS8uc291cmNlKSxcblxuXHRcdC8vIGh0bWxgPHA+PC9wPmBcblx0XHQvLyBkaXYuaW5uZXJIVE1MID0gYDxwPjwvcD5gXG5cdFx0Y3JlYXRlVGVtcGxhdGUoJ2h0bWwnLCAvXFxiaHRtbHxcXC5cXHMqKD86aW5uZXJ8b3V0ZXIpSFRNTFxccypcXCs/PS8uc291cmNlKSxcblxuXHRcdC8vIHN2Z2A8cGF0aCBmaWxsPVwiI2ZmZlwiIGQ9XCJNNTUuMzcgLi4uXCIvPmBcblx0XHRjcmVhdGVUZW1wbGF0ZSgnc3ZnJywgL1xcYnN2Zy8uc291cmNlKSxcblxuXHRcdC8vIG1kYCMgaDFgLCBtYXJrZG93bmAjIyBoMmBcblx0XHRjcmVhdGVUZW1wbGF0ZSgnbWFya2Rvd24nLCAvXFxiKD86bWFya2Rvd258bWQpLy5zb3VyY2UpLFxuXG5cdFx0Ly8gZ3FsYC4uLmAsIGdyYXBocWxgLi4uYCwgZ3JhcGhxbC5leHBlcmltZW50YWxgLi4uYFxuXHRcdGNyZWF0ZVRlbXBsYXRlKCdncmFwaHFsJywgL1xcYig/OmdxbHxncmFwaHFsKD86XFxzKlxcLlxccypleHBlcmltZW50YWwpPykvLnNvdXJjZSksXG5cblx0XHQvLyBzcWxgLi4uYFxuXHRcdGNyZWF0ZVRlbXBsYXRlKCdzcWwnLCAvXFxic3FsLy5zb3VyY2UpLFxuXG5cdFx0Ly8gdmFuaWxsYSB0ZW1wbGF0ZSBzdHJpbmdcblx0XHR0ZW1wbGF0ZVN0cmluZ1xuXHRdLmZpbHRlcihCb29sZWFuKTtcblxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3BlY2lmaWMgcGxhY2Vob2xkZXIgbGl0ZXJhbCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gY291bnRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyKGNvdW50ZXIsIGxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuICdfX18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKSArICdfJyArIGNvdW50ZXIgKyAnX19fJztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0b2tlbnMgb2YgYFByaXNtLnRva2VuaXplYCBidXQgYWxzbyBydW5zIHRoZSBgYmVmb3JlLXRva2VuaXplYCBhbmQgYGFmdGVyLXRva2VuaXplYCBob29rcy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcblx0ICogQHBhcmFtIHthbnl9IGdyYW1tYXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEByZXR1cm5zIHsoc3RyaW5nfFRva2VuKVtdfVxuXHQgKi9cblx0ZnVuY3Rpb24gdG9rZW5pemVXaXRoSG9va3MoY29kZSwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcblx0XHR2YXIgZW52ID0ge1xuXHRcdFx0Y29kZTogY29kZSxcblx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXG5cdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2Vcblx0XHR9O1xuXHRcdFByaXNtLmhvb2tzLnJ1bignYmVmb3JlLXRva2VuaXplJywgZW52KTtcblx0XHRlbnYudG9rZW5zID0gUHJpc20udG9rZW5pemUoZW52LmNvZGUsIGVudi5ncmFtbWFyKTtcblx0XHRQcmlzbS5ob29rcy5ydW4oJ2FmdGVyLXRva2VuaXplJywgZW52KTtcblx0XHRyZXR1cm4gZW52LnRva2Vucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0b2tlbiBvZiB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFRoZSBjb2RlIG9mIHRoZSBleHByZXNzaW9uLiBFLmcuIGBcIiR7NDJ9XCJgXG5cdCAqIEByZXR1cm5zIHtUb2tlbn1cblx0ICovXG5cdGZ1bmN0aW9uIHRva2VuaXplSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuXHRcdHZhciB0ZW1wR3JhbW1hciA9IHt9O1xuXHRcdHRlbXBHcmFtbWFyWydpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJ10gPSBpbnRlcnBvbGF0aW9uUHVuY3R1YXRpb25PYmplY3Q7XG5cblx0XHQvKiogQHR5cGUge0FycmF5fSAqL1xuXHRcdHZhciB0b2tlbnMgPSBQcmlzbS50b2tlbml6ZShleHByZXNzaW9uLCB0ZW1wR3JhbW1hcik7XG5cdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDMpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIHRva2VuIGFycmF5IHdpbGwgbG9vayBsaWtlIHRoaXNcblx0XHRcdCAqIFtcblx0XHRcdCAqICAgICBbXCJpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uXCIsIFwiJHtcIl1cblx0XHRcdCAqICAgICBcIi4uLlwiIC8vIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBvZiB0aGUgaW50ZXJwb2xhdGlvblxuXHRcdFx0ICogICAgIFtcImludGVycG9sYXRpb24tcHVuY3R1YXRpb25cIiwgXCJ9XCJdXG5cdFx0XHQgKiBdXG5cdFx0XHQgKi9cblxuXHRcdFx0dmFyIGFyZ3MgPSBbMSwgMV07XG5cdFx0XHRhcmdzLnB1c2guYXBwbHkoYXJncywgdG9rZW5pemVXaXRoSG9va3ModG9rZW5zWzFdLCBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdCwgJ2phdmFzY3JpcHQnKSk7XG5cblx0XHRcdHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBhcmdzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByaXNtLlRva2VuKCdpbnRlcnBvbGF0aW9uJywgdG9rZW5zLCBpbnRlcnBvbGF0aW9uT2JqZWN0LmFsaWFzLCBleHByZXNzaW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2tlbml6ZXMgdGhlIGdpdmVuIGNvZGUgd2l0aCBzdXBwb3J0IGZvciBKYXZhU2NyaXB0IGludGVycG9sYXRpb24gZXhwcmVzc2lvbnMgbWl4ZWQgaW4uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaGFzIDMgcGhhc2VzOlxuXHQgKlxuXHQgKiAxLiBSZXBsYWNlIGFsbCBKYXZhU2NyaXB0IGludGVycG9sYXRpb24gZXhwcmVzc2lvbiB3aXRoIGEgcGxhY2Vob2xkZXIuXG5cdCAqICAgIFRoZSBwbGFjZWhvbGRlciB3aWxsIGhhdmUgdGhlIHN5bnRheCBvZiBhIGlkZW50aWZ5IG9mIHRoZSB0YXJnZXQgbGFuZ3VhZ2UuXG5cdCAqIDIuIFRva2VuaXplIHRoZSBjb2RlIHdpdGggcGxhY2Vob2xkZXJzLlxuXHQgKiAzLiBUb2tlbml6ZSB0aGUgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9ucyBhbmQgcmUtaW5zZXJ0IHRoZW0gaW50byB0aGUgdG9rZW5pemUgY29kZS5cblx0ICogICAgVGhlIGluc2VydGlvbiBvbmx5IHdvcmtzIGlmIGEgcGxhY2Vob2xkZXIgaGFzbid0IGJlZW4gXCJyaXBwZWQgYXBhcnRcIiBtZWFuaW5nIHRoYXQgdGhlIHBsYWNlaG9sZGVyIGhhcyBiZWVuXG5cdCAqICAgIHRva2VuaXplZCBhcyB0d28gdG9rZW5zIGJ5IHRoZSBncmFtbWFyIG9mIHRoZSBlbWJlZGRlZCBsYW5ndWFnZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcblx0ICogQHBhcmFtIHtvYmplY3R9IGdyYW1tYXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEByZXR1cm5zIHtUb2tlbn1cblx0ICovXG5cdGZ1bmN0aW9uIHRva2VuaXplRW1iZWRkZWQoY29kZSwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcblx0XHQvLyAxLiBGaXJzdCBmaWx0ZXIgb3V0IGFsbCBpbnRlcnBvbGF0aW9uc1xuXG5cdFx0Ly8gYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGVzY2FwZWQsIHdlIG5lZWQgYSBsb29rYmVoaW5kLCBzbyB3ZSB1c2UgUHJpc21cblx0XHQvKiogQHR5cGUgeyhUb2tlbnxzdHJpbmcpW119ICovXG5cdFx0dmFyIF90b2tlbnMgPSBQcmlzbS50b2tlbml6ZShjb2RlLCB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGludGVycG9sYXRpb25QYXR0ZXJuKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gcmVwbGFjZSBhbGwgaW50ZXJwb2xhdGlvbnMgd2l0aCBhIHBsYWNlaG9sZGVyIHdoaWNoIGlzIG5vdCBpbiB0aGUgY29kZSBhbHJlYWR5XG5cdFx0dmFyIHBsYWNlaG9sZGVyQ291bnRlciA9IDA7XG5cdFx0LyoqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fSAqL1xuXHRcdHZhciBwbGFjZWhvbGRlck1hcCA9IHt9O1xuXHRcdHZhciBlbWJlZGRlZENvZGUgPSBfdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybiB0b2tlbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBpbnRlcnBvbGF0aW9uRXhwcmVzc2lvbiA9IHRva2VuLmNvbnRlbnQ7XG5cblx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyO1xuXHRcdFx0XHR3aGlsZSAoY29kZS5pbmRleE9mKHBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb3VudGVyKyssIGxhbmd1YWdlKSkgIT09IC0xKSB7IC8qIG5vb3AgKi8gfVxuXHRcdFx0XHRwbGFjZWhvbGRlck1hcFtwbGFjZWhvbGRlcl0gPSBpbnRlcnBvbGF0aW9uRXhwcmVzc2lvbjtcblx0XHRcdFx0cmV0dXJuIHBsYWNlaG9sZGVyO1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oJycpO1xuXG5cblx0XHQvLyAyLiBUb2tlbml6ZSB0aGUgZW1iZWRkZWQgY29kZVxuXG5cdFx0dmFyIGVtYmVkZGVkVG9rZW5zID0gdG9rZW5pemVXaXRoSG9va3MoZW1iZWRkZWRDb2RlLCBncmFtbWFyLCBsYW5ndWFnZSk7XG5cblxuXHRcdC8vIDMuIFJlLWluc2VydCB0aGUgaW50ZXJwb2xhdGlvblxuXG5cdFx0dmFyIHBsYWNlaG9sZGVycyA9IE9iamVjdC5rZXlzKHBsYWNlaG9sZGVyTWFwKTtcblx0XHRwbGFjZWhvbGRlckNvdW50ZXIgPSAwO1xuXG5cdFx0LyoqXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhUb2tlbnxzdHJpbmcpW119IHRva2Vuc1xuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHdhbGtUb2tlbnModG9rZW5zKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocGxhY2Vob2xkZXJDb3VudGVyID49IHBsYWNlaG9sZGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRva2VuLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJzW3BsYWNlaG9sZGVyQ291bnRlcl07XG5cdFx0XHRcdFx0dmFyIHMgPSB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnID8gdG9rZW4gOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRva2VuLmNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0dmFyIGluZGV4ID0gcy5pbmRleE9mKHBsYWNlaG9sZGVyKTtcblx0XHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0XHQrK3BsYWNlaG9sZGVyQ291bnRlcjtcblxuXHRcdFx0XHRcdFx0dmFyIGJlZm9yZSA9IHMuc3Vic3RyaW5nKDAsIGluZGV4KTtcblx0XHRcdFx0XHRcdHZhciBtaWRkbGUgPSB0b2tlbml6ZUludGVycG9sYXRpb25FeHByZXNzaW9uKHBsYWNlaG9sZGVyTWFwW3BsYWNlaG9sZGVyXSk7XG5cdFx0XHRcdFx0XHR2YXIgYWZ0ZXIgPSBzLnN1YnN0cmluZyhpbmRleCArIHBsYWNlaG9sZGVyLmxlbmd0aCk7XG5cblx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoKGJlZm9yZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoKG1pZGRsZSk7XG5cdFx0XHRcdFx0XHRpZiAoYWZ0ZXIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFmdGVyVG9rZW5zID0gW2FmdGVyXTtcblx0XHRcdFx0XHRcdFx0d2Fsa1Rva2VucyhhZnRlclRva2Vucyk7XG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnB1c2guYXBwbHkocmVwbGFjZW1lbnQsIGFmdGVyVG9rZW5zKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZS5hcHBseSh0b2tlbnMsIFtpLCAxXS5jb25jYXQocmVwbGFjZW1lbnQpKTtcblx0XHRcdFx0XHRcdFx0aSArPSByZXBsYWNlbWVudC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dG9rZW4uY29udGVudCA9IHJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY29udGVudCA9IHRva2VuLmNvbnRlbnQ7XG5cdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcblx0XHRcdFx0XHRcdHdhbGtUb2tlbnMoY29udGVudCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHdhbGtUb2tlbnMoW2NvbnRlbnRdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0d2Fsa1Rva2VucyhlbWJlZGRlZFRva2Vucyk7XG5cblx0XHRyZXR1cm4gbmV3IFByaXNtLlRva2VuKGxhbmd1YWdlLCBlbWJlZGRlZFRva2VucywgJ2xhbmd1YWdlLScgKyBsYW5ndWFnZSwgY29kZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGxhbmd1YWdlcyBmb3Igd2hpY2ggSlMgdGVtcGxhdGluZyB3aWxsIGhhbmRsZSB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbHMuXG5cdCAqXG5cdCAqIEpTIHRlbXBsYXRpbmcgaXNuJ3QgYWN0aXZlIGZvciBvbmx5IEphdmFTY3JpcHQgYnV0IGFsc28gcmVsYXRlZCBsYW5ndWFnZXMgbGlrZSBUeXBlU2NyaXB0LCBKU1gsIGFuZCBUU1guXG5cdCAqL1xuXHR2YXIgc3VwcG9ydGVkTGFuZ3VhZ2VzID0ge1xuXHRcdCdqYXZhc2NyaXB0JzogdHJ1ZSxcblx0XHQnanMnOiB0cnVlLFxuXHRcdCd0eXBlc2NyaXB0JzogdHJ1ZSxcblx0XHQndHMnOiB0cnVlLFxuXHRcdCdqc3gnOiB0cnVlLFxuXHRcdCd0c3gnOiB0cnVlLFxuXHR9O1xuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmICghKGVudi5sYW5ndWFnZSBpbiBzdXBwb3J0ZWRMYW5ndWFnZXMpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRmluZHMgYW5kIHRva2VuaXplcyBhbGwgdGVtcGxhdGUgc3RyaW5ncyB3aXRoIGFuIGVtYmVkZGVkIGxhbmd1YWdlcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7KFRva2VuIHwgc3RyaW5nKVtdfSB0b2tlbnNcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmaW5kVGVtcGxhdGVTdHJpbmdzKHRva2Vucykge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGNvbnRlbnQgPSB0b2tlbi5jb250ZW50O1xuXHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRmaW5kVGVtcGxhdGVTdHJpbmdzKFtjb250ZW50XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICd0ZW1wbGF0ZS1zdHJpbmcnKSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogQSBKYXZhU2NyaXB0IHRlbXBsYXRlLXN0cmluZyB0b2tlbiB3aWxsIGxvb2sgbGlrZSB0aGlzOlxuXHRcdFx0XHRcdCAqXG5cdFx0XHRcdFx0ICogW1widGVtcGxhdGUtc3RyaW5nXCIsIFtcblx0XHRcdFx0XHQgKiAgICAgW1widGVtcGxhdGUtcHVuY3R1YXRpb25cIiwgXCJgXCJdLFxuXHRcdFx0XHRcdCAqICAgICAoXG5cdFx0XHRcdFx0ICogICAgICAgICBBbiBhcnJheSBvZiBcInN0cmluZ1wiIGFuZCBcImludGVycG9sYXRpb25cIiB0b2tlbnMuIFRoaXMgaXMgdGhlIHNpbXBsZSBzdHJpbmcgY2FzZS5cblx0XHRcdFx0XHQgKiAgICAgICAgIG9yXG5cdFx0XHRcdFx0ICogICAgICAgICBbXCJlbWJlZGRlZC1jb2RlXCIsIFwiLi4uXCJdIFRoaXMgaXMgdGhlIHRva2VuIGNvbnRhaW5pbmcgdGhlIGVtYmVkZGVkIGNvZGUuXG5cdFx0XHRcdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgYWxzbyBoYXMgYW4gYWxpYXMgd2hpY2ggaXMgdGhlIGxhbmd1YWdlIG9mIHRoZSBlbWJlZGRlZCBjb2RlLlxuXHRcdFx0XHRcdCAqICAgICApLFxuXHRcdFx0XHRcdCAqICAgICBbXCJ0ZW1wbGF0ZS1wdW5jdHVhdGlvblwiLCBcImBcIl1cblx0XHRcdFx0XHQgKiBdXVxuXHRcdFx0XHRcdCAqL1xuXG5cdFx0XHRcdFx0dmFyIGVtYmVkZGVkID0gY29udGVudFsxXTtcblx0XHRcdFx0XHRpZiAoY29udGVudC5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVtYmVkZGVkICE9PSAnc3RyaW5nJyAmJiBlbWJlZGRlZC50eXBlID09PSAnZW1iZWRkZWQtY29kZScpIHtcblx0XHRcdFx0XHRcdC8vIGdldCBzdHJpbmcgY29udGVudFxuXHRcdFx0XHRcdFx0dmFyIGNvZGUgPSBzdHJpbmdDb250ZW50KGVtYmVkZGVkKTtcblxuXHRcdFx0XHRcdFx0dmFyIGFsaWFzID0gZW1iZWRkZWQuYWxpYXM7XG5cdFx0XHRcdFx0XHR2YXIgbGFuZ3VhZ2UgPSBBcnJheS5pc0FycmF5KGFsaWFzKSA/IGFsaWFzWzBdIDogYWxpYXM7XG5cblx0XHRcdFx0XHRcdHZhciBncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcblx0XHRcdFx0XHRcdGlmICghZ3JhbW1hcikge1xuXHRcdFx0XHRcdFx0XHQvLyB0aGUgZW1iZWRkZWQgbGFuZ3VhZ2UgaXNuJ3QgcmVnaXN0ZXJlZC5cblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnRlbnRbMV0gPSB0b2tlbml6ZUVtYmVkZGVkKGNvZGUsIGdyYW1tYXIsIGxhbmd1YWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmluZFRlbXBsYXRlU3RyaW5ncyhjb250ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZpbmRUZW1wbGF0ZVN0cmluZ3MoZW52LnRva2Vucyk7XG5cdH0pO1xuXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyBjb250ZW50IG9mIGEgdG9rZW4gb3IgdG9rZW4gc3RyZWFtLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IFRva2VuIHwgKHN0cmluZyB8IFRva2VuKVtdfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gc3RyaW5nQ29udGVudCh2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChzdHJpbmdDb250ZW50KS5qb2luKCcnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHN0cmluZ0NvbnRlbnQodmFsdWUuY29udGVudCk7XG5cdFx0fVxuXHR9XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmp1bGlhID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHQvLyBzdXBwb3J0IG9uZSBsZXZlbCBvZiBuZXN0ZWQgY29tbWVudHNcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vSnVsaWFMYW5nL2p1bGlhL3B1bGwvNjEyOFxuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OiM9KD86W14jPV18PSg/ISMpfCMoPyE9KXwjPSg/OlteIz1dfD0oPyEjKXwjKD8hPSkpKj0jKSo9I3wjLiopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdyZWdleCc6IHtcblx0XHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvc3RyaW5ncy8jUmVndWxhci1FeHByZXNzaW9ucy0xXG5cdFx0cGF0dGVybjogL3JcIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCJbaW1zeF17MCw0fS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL3N0cmluZ3MvI1N0cmluZy1CYXNpY3MtMVxuXHRcdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9zdHJpbmdzLyNub24tc3RhbmRhcmQtc3RyaW5nLWxpdGVyYWxzLTFcblx0XHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvcnVubmluZy1leHRlcm5hbC1wcm9ncmFtcy8jUnVubmluZy1FeHRlcm5hbC1Qcm9ncmFtcy0xXG5cdFx0cGF0dGVybjogL1wiXCJcIltcXHNcXFNdKz9cIlwiXCJ8KD86XFxiXFx3Kyk/XCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifGAoPzpbXlxcXFxgXFxyXFxuXXxcXFxcLikqYC8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9zdHJpbmdzLyNtYW4tY2hhcmFjdGVycy0xXG5cdFx0cGF0dGVybjogLyhefFteXFx3J10pJyg/OlxcXFxbXlxcclxcbl1bXidcXHJcXG5dKnxbXlxcXFxcXHJcXG5dKScvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGJhcmVtb2R1bGV8YmVnaW58Yml0c3R5cGV8YnJlYWt8Y2F0Y2h8Y2NhbGx8Y29uc3R8Y29udGludWV8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGV4cG9ydHxmaW5hbGx5fGZvcnxmdW5jdGlvbnxnbG9iYWx8aWZ8aW1tdXRhYmxlfGltcG9ydHxpbXBvcnRhbGx8aW58bGV0fGxvY2FsfG1hY3JvfG1vZHVsZXxwcmludHxwcmludGxufHF1b3RlfHJldHVybnxzdHJ1Y3R8dHJ5fHR5cGV8dHlwZWFsaWFzfHVzaW5nfHdoaWxlKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bWJlcic6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib3hdKT8oPzpbXFxkYS1mXSsoPzpfW1xcZGEtZl0rKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFwuXFxkKyg/Ol9cXGQrKSopKD86W2VmcF1bKy1dP1xcZCsoPzpfXFxkKykqKT9qPy9pLFxuXHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvbWF0aGVtYXRpY2FsLW9wZXJhdGlvbnMvXG5cdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9tYXRoZW1hdGljYWwtb3BlcmF0aW9ucy8jT3BlcmF0b3ItUHJlY2VkZW5jZS1hbmQtQXNzb2NpYXRpdml0eS0xXG5cdCdvcGVyYXRvcic6IC8mJnxcXHxcXHx8Wy0rKl4lXHUwMEY3XHUyMkJCJiRcXFxcXT0/fFxcL1tcXC89XT98IT0/PT98XFx8Wz0+XT98PCg/Ojw9P3xbPTp8XSk/fD4oPzo9fD4+Pz0/KT98PT0/PT98W35cdTIyNjBcdTIyNjRcdTIyNjUnXHUyMjFBXHUyMjFCXS8sXG5cdCdwdW5jdHVhdGlvbic6IC86Oj98W3t9W1xcXSgpOywuP10vLFxuXHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9iYXNlL251bWJlcnMvI0Jhc2UuaW1cblx0J2NvbnN0YW50JzogL1xcYig/Oig/OkluZnxOYU4pKD86MTZ8MzJ8NjQpP3xpbXxwaSlcXGJ8W1x1MDNDMFx1MjEyRl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMua2VlcGFsaXZlZCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1sjIV0uKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlwiXFxcXFxcclxcbl0pKlwifCcoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXidcXFxcXFxyXFxuXSkqJykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0Ly8gc3VwcG9ydCBJUHY0LCBJUHY2LCBzdWJuZXQgbWFza1xuXHQnaXAnOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0L1xcYig/Oig/Oig/OltcXGRhLWZdezEsNH06KXs3fVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezZ9OltcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezV9Oig/OltcXGRhLWZdezEsNH06KT9bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXs0fTooPzpbXFxkYS1mXXsxLDR9Oil7MCwyfVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezN9Oig/OltcXGRhLWZdezEsNH06KXswLDN9W1xcZGEtZl17MSw0fXwoPzpbXFxkYS1mXXsxLDR9Oil7Mn06KD86W1xcZGEtZl17MSw0fTopezAsNH1bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXs2fTxpcHY0PnwoPzpbXFxkYS1mXXsxLDR9Oil7MCw1fTo8aXB2ND58OjooPzpbXFxkYS1mXXsxLDR9Oil7MCw1fTxpcHY0PnxbXFxkYS1mXXsxLDR9OjooPzpbXFxkYS1mXXsxLDR9Oil7MCw1fVtcXGRhLWZdezEsNH18OjooPzpbXFxkYS1mXXsxLDR9Oil7MCw2fVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezEsN306KSg/OlxcL1xcZHsxLDN9KT98PGlwdjQ+KD86XFwvXFxkezEsMn0pPylcXGIvLnNvdXJjZVxuXHRcdFx0XHQucmVwbGFjZSgvPGlwdjQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oPzooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZClcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKS8uc291cmNlOyB9KSxcblx0XHRcdCdpJ1xuXHRcdCksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cblx0Ly8gc3VwcG9ydCAqbml4IC8gV2luZG93cywgZGlyZWN0b3J5IC8gZmlsZVxuXHQncGF0aCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxccylcXC8oPzpbXlxcL1xcc10rXFwvKSpbXlxcL1xcc10qfFxcYlthLXpBLVpdOlxcXFwoPzpbXlxcXFxcXHNdK1xcXFwpKlteXFxcXFxcc10qLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcez9cXHcrXFx9Py8sXG5cdCdlbWFpbCc6IHtcblx0XHRwYXR0ZXJuOiAvW1xcdy1dK0BbXFx3LV0rKD86XFwuW1xcdy1dezIsM30pezEsMn0vLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0fSxcblx0J2NvbmRpdGlvbmFsLWNvbmZpZ3VyYXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0BcXF4/W1xcdy1dKy8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J29wZXJhdG9yJzogLz0vLFxuXG5cdCdwcm9wZXJ0eSc6IC9cXGIoPzpCRkRfQ0hFQ0t8RE5TX0NIRUNLfEZJTEVfQ0hFQ0t8SFRUUF9HRVR8TUlTQ19DSEVDS3xOQU1FfFBJTkdfQ0hFQ0t8U0NSSVBUU3xTTVRQX0NIRUNLfFNTTHxTU0xfR0VUfFRDUF9DSEVDS3xVRFBfQ0hFQ0t8YWNjZXB0fGFkdmVydF9pbnR8YWxwaGF8YXV0aF9wYXNzfGF1dGhfdHlwZXxhdXRoZW50aWNhdGlvbnxiZmRfY3B1X2FmZmluaXR5fGJmZF9pbnN0YW5jZXxiZmRfbm9fc3dhcHxiZmRfcHJpb3JpdHl8YmZkX3Byb2Nlc3NfbmFtZXxiZmRfcmxpbWl0X3J0dGltZXxiZmRfcnRfcHJpb3JpdHl8YmluZF9pZnxiaW5kX3BvcnR8YmluZHRvfGNhfGNlcnRpZmljYXRlfGNoZWNrX3VuaWNhc3Rfc3JjfGNoZWNrZXJ8Y2hlY2tlcl9jcHVfYWZmaW5pdHl8Y2hlY2tlcl9sb2dfYWxsX2ZhaWx1cmVzfGNoZWNrZXJfbm9fc3dhcHxjaGVja2VyX3ByaW9yaXR5fGNoZWNrZXJfcmxpbWl0X3J0dGltZXxjaGVja2VyX3J0X3ByaW9yaXR5fGNoaWxkX3dhaXRfdGltZXxjb25uZWN0X2lwfGNvbm5lY3RfcG9ydHxjb25uZWN0X3RpbWVvdXR8ZGJ1c19zZXJ2aWNlX25hbWV8ZGVidWd8ZGVmYXVsdF9pbnRlcmZhY2V8ZGVsYXl8ZGVsYXlfYmVmb3JlX3JldHJ5fGRlbGF5X2xvb3B8ZGlnZXN0fGRvbnRfdHJhY2tfcHJpbWFyeXxkeW5hbWljfGR5bmFtaWNfaW50ZXJmYWNlc3xlbmFibGVfKD86ZGJ1c3xzY3JpcHRfc2VjdXJpdHl8c25pfHNubXBfY2hlY2tlcnxzbm1wX3JmY3xzbm1wX3JmY3YyfHNubXBfcmZjdjN8c25tcF92cnJwfHRyYXBzKXxlbmR8ZmFsbHxmYXN0X3JlY292ZXJ5fGZpbGV8ZmxhZy1bMTIzXXxmb3JrX2RlbGF5fGZ1bGxfY29tbWFuZHxmd21hcmt8Z2FycF9ncm91cHxnYXJwX2ludGVydmFsfGdhcnBfbG93ZXJfcHJpb19kZWxheXxnYXJwX2xvd2VyX3ByaW9fcmVwZWF0fGdhcnBfbWFzdGVyX2RlbGF5fGdhcnBfbWFzdGVyX3JlZnJlc2h8Z2FycF9tYXN0ZXJfcmVmcmVzaF9yZXBlYXR8Z2FycF9tYXN0ZXJfcmVwZWF0fGdsb2JhbF9kZWZzfGdsb2JhbF90cmFja2luZ3xnbmFfaW50ZXJ2YWx8Z3JvdXB8aGFfc3VzcGVuZHxoYXNoZWR8aGVsb19uYW1lfGhpZ2hlcl9wcmlvX3NlbmRfYWR2ZXJ0fGhvcGxpbWl0fGh0dHBfcHJvdG9jb2x8aHlzdGVyZXNpc3xpZGxlX3R4fGluY2x1ZGV8aW5oaWJpdF9vbl9mYWlsdXJlfGluaXRfZmFpbHxpbml0X2ZpbGV8aW5zdGFuY2V8aW50ZXJmYWNlfGludGVyZmFjZXN8aW50ZXJ2YWx8aXBfZmFtaWx5fGlwdnNfcHJvY2Vzc19uYW1lfGtlZXBhbGl2ZWQuY29uZnxrZXJuZWxfcnhfYnVmX3NpemV8a2V5fGxpbmtiZWF0X2ludGVyZmFjZXN8bGlua2JlYXRfdXNlX3BvbGxpbmd8bG9nX2FsbF9mYWlsdXJlc3xsb2dfdW5rbm93bl92cmlkc3xsb3dlcl9wcmlvX25vX2FkdmVydHxsdGhyZXNob2xkfGx2c19mbHVzaHxsdnNfZmx1c2hfb25zdG9wfGx2c19tZXRob2R8bHZzX25ldGxpbmtfY21kX3Jjdl9idWZzfGx2c19uZXRsaW5rX2NtZF9yY3ZfYnVmc19mb3JjZXxsdnNfbmV0bGlua19tb25pdG9yX3Jjdl9idWZzfGx2c19uZXRsaW5rX21vbml0b3JfcmN2X2J1ZnNfZm9yY2V8bHZzX25vdGlmeV9maWZvfGx2c19ub3RpZnlfZmlmb19zY3JpcHR8bHZzX3NjaGVkfGx2c19zeW5jX2RhZW1vbnxtYXhfYXV0b19wcmlvcml0eXxtYXhfaG9wc3xtY2FzdF9zcmNfaXB8bWgtZmFsbGJhY2t8bWgtcG9ydHxtaW5fYXV0b19wcmlvcml0eV9kZWxheXxtaW5fcnh8bWluX3R4fG1pc2NfZHluYW1pY3xtaXNjX3BhdGh8bWlzY190aW1lb3V0fG11bHRpcGxpZXJ8bmFtZXxuYW1lc3BhY2Vfd2l0aF9pcHNldHN8bmF0aXZlX2lwdjZ8bmVpZ2hib3JfaXB8bmV0X25hbWVzcGFjZXxuZXRfbmFtZXNwYWNlX2lwdnN8bmZ0YWJsZXN8bmZ0YWJsZXNfY291bnRlcnN8bmZ0YWJsZXNfaWZpbmRleHxuZnRhYmxlc19wcmlvcml0eXxub19hY2NlcHR8bm9fY2hlY2tlcl9lbWFpbHN8bm9fZW1haWxfZmF1bHRzfG5vcHJlZW1wdHxub3RpZmljYXRpb25fZW1haWx8bm90aWZpY2F0aW9uX2VtYWlsX2Zyb218bm90aWZ5fG5vdGlmeV9iYWNrdXB8bm90aWZ5X2RlbGV0ZWR8bm90aWZ5X2Rvd258bm90aWZ5X2ZhdWx0fG5vdGlmeV9maWZvfG5vdGlmeV9maWZvX3NjcmlwdHxub3RpZnlfbWFzdGVyfG5vdGlmeV9tYXN0ZXJfcnhfbG93ZXJfcHJpfG5vdGlmeV9wcmlvcml0eV9jaGFuZ2VzfG5vdGlmeV9zdG9wfG5vdGlmeV91cHxvbGRfdW5pY2FzdF9jaGVja3N1bXxvbWVnYXxvcHN8cGFyYW1fbWF0Y2h8cGFzc2l2ZXxwYXNzd29yZHxwYXRofHBlcnNpc3RlbmNlX2VuZ2luZXxwZXJzaXN0ZW5jZV9ncmFudWxhcml0eXxwZXJzaXN0ZW5jZV90aW1lb3V0fHByZWVtcHR8cHJlZW1wdF9kZWxheXxwcmlvcml0eXxwcm9jZXNzfHByb2Nlc3NfbW9uaXRvcl9yY3ZfYnVmc3xwcm9jZXNzX21vbml0b3JfcmN2X2J1ZnNfZm9yY2V8cHJvY2Vzc19uYW1lfHByb2Nlc3NfbmFtZXN8cHJvbW90ZV9zZWNvbmRhcmllc3xwcm90b2NvbHxwcm94eV9hcnB8cHJveHlfYXJwX3B2bGFufHF1b3J1bXxxdW9ydW1fZG93bnxxdW9ydW1fbWF4fHF1b3J1bV91cHxyYW5kb21fc2VlZHxyZWFsX3NlcnZlcnxyZWdleHxyZWdleF9tYXhfb2Zmc2V0fHJlZ2V4X21pbl9vZmZzZXR8cmVnZXhfbm9fbWF0Y2h8cmVnZXhfb3B0aW9uc3xyZWdleF9zdGFja3xyZWxvYWRfcmVwZWF0fHJlbG9hZF90aW1lX2ZpbGV8cmVxdWlyZV9yZXBseXxyZXRyeXxyaXNlfHJvdXRlcl9pZHxyc19pbml0X25vdGlmaWVzfHNjcmlwdHxzY3JpcHRfdXNlcnxzaC1mYWxsYmFja3xzaC1wb3J0fHNodXRkb3duX3NjcmlwdHxzaHV0ZG93bl9zY3JpcHRfdGltZW91dHxza2lwX2NoZWNrX2Fkdl9hZGRyfHNtdHBfYWxlcnR8c210cF9hbGVydF9jaGVja2VyfHNtdHBfYWxlcnRfdnJycHxzbXRwX2Nvbm5lY3RfdGltZW91dHxzbXRwX2hlbG9fbmFtZXxzbXRwX3NlcnZlcnxzbm1wX3NvY2tldHxzb3JyeV9zZXJ2ZXJ8c29ycnlfc2VydmVyX2luaGliaXR8c29ycnlfc2VydmVyX2x2c19tZXRob2R8c291cmNlX2lwfHN0YXJ0fHN0YXJ0dXBfc2NyaXB0fHN0YXJ0dXBfc2NyaXB0X3RpbWVvdXR8c3RhdGV8c3RhdGljX2lwYWRkcmVzc3xzdGF0aWNfcm91dGVzfHN0YXRpY19ydWxlc3xzdGF0dXNfY29kZXxzdGVwfHN0cmljdF9tb2RlfHN5bmNfZ3JvdXBfdHJhY2tpbmdfd2VpZ2h0fHRlcm1pbmF0ZV9kZWxheXx0aW1lb3V0fHRyYWNrX2JmZHx0cmFja19maWxlfHRyYWNrX2dyb3VwfHRyYWNrX2ludGVyZmFjZXx0cmFja19wcm9jZXNzfHRyYWNrX3NjcmlwdHx0cmFja19zcmNfaXB8dHRsfHR5cGV8dW1hc2t8dW5pY2FzdF9wZWVyfHVuaWNhc3Rfc3JjX2lwfHVuaWNhc3RfdHRsfHVybHx1c2VfaXB2bGFufHVzZV9waWRfZGlyfHVzZV92bWFjfHVzZXJ8dXRocmVzaG9sZHx2YWxbMTIzXXx2ZXJzaW9ufHZpcnR1YWxfaXBhZGRyZXNzfHZpcnR1YWxfaXBhZGRyZXNzX2V4Y2x1ZGVkfHZpcnR1YWxfcm91dGVyX2lkfHZpcnR1YWxfcm91dGVzfHZpcnR1YWxfcnVsZXN8dmlydHVhbF9zZXJ2ZXJ8dmlydHVhbF9zZXJ2ZXJfZ3JvdXB8dmlydHVhbGhvc3R8dm1hY194bWl0X2Jhc2V8dnJycHx2cnJwXyg/OmNoZWNrX3VuaWNhc3Rfc3JjfGNwdV9hZmZpbml0eXxnYXJwX2ludGVydmFsfGdhcnBfbG93ZXJfcHJpb19kZWxheXxnYXJwX2xvd2VyX3ByaW9fcmVwZWF0fGdhcnBfbWFzdGVyX2RlbGF5fGdhcnBfbWFzdGVyX3JlZnJlc2h8Z2FycF9tYXN0ZXJfcmVmcmVzaF9yZXBlYXR8Z2FycF9tYXN0ZXJfcmVwZWF0fGduYV9pbnRlcnZhbHxoaWdoZXJfcHJpb19zZW5kX2FkdmVydHxpbnN0YW5jZXxpcHNldHN8aXB0YWJsZXN8bG93ZXJfcHJpb19ub19hZHZlcnR8bWNhc3RfZ3JvdXA0fG1jYXN0X2dyb3VwNnxtaW5fZ2FycHxuZXRsaW5rX2NtZF9yY3ZfYnVmc3xuZXRsaW5rX2NtZF9yY3ZfYnVmc19mb3JjZXxuZXRsaW5rX21vbml0b3JfcmN2X2J1ZnN8bmV0bGlua19tb25pdG9yX3Jjdl9idWZzX2ZvcmNlfG5vX3N3YXB8bm90aWZ5X2ZpZm98bm90aWZ5X2ZpZm9fc2NyaXB0fG5vdGlmeV9wcmlvcml0eV9jaGFuZ2VzfHByaW9yaXR5fHByb2Nlc3NfbmFtZXxybGltaXRfcnR0aW1lfHJ0X3ByaW9yaXR5fHJ4X2J1ZnNfbXVsdGlwbGllcnxyeF9idWZzX3BvbGljeXxzY3JpcHR8c2tpcF9jaGVja19hZHZfYWRkcnxzdGFydHVwX2RlbGF5fHN0cmljdHxzeW5jX2dyb3VwfHRyYWNrX3Byb2Nlc3N8dmVyc2lvbil8d2FybXVwfHdlaWdodClcXGIvLFxuXG5cdCdjb25zdGFudCc6IC9cXGIoPzpBfEFBQUF8QUh8QkFDS1VQfENOQU1FfERSfE1BU1RFUnxNWHxOQVR8TlN8UEFTU3xTQ1RQfFNPQXxUQ1B8VFVOfFRYVHxVRFB8ZGh8Zm98bGJsY3xsYmxjcnxsY3xtaHxucXxvdmZ8cnJ8c2VkfHNofHdsY3x3cnIpXFxiLyxcblxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSktP1xcZCsoPzpcXC5cXGQrKT8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxub3xvZmZ8b258dHJ1ZXx5ZXMpXFxiLyxcblxuXHQncHVuY3R1YXRpb24nOiAvW1xce1xcfV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMua2V5bWFuID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiYyAuKi9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwifCdbXidcXHJcXG5dKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmlydHVhbC1rZXknOiB7XG5cdFx0cGF0dGVybjogL1xcW1xccyooPzooPzpBTFR8Q0FQU3xDVFJMfExBTFR8TENUUkx8TkNBUFN8UkFMVHxSQ1RSTHxTSElGVClcXHMrKSooPzpbVEtVXV9bXFx3P10rfFtBLUVdXFxkXFxkP3xcIlteXCJcXHJcXG5dKlwifCdbXidcXHJcXG5dKicpXFxzKlxcXS9pLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyAvLyBhbGlhcyBmb3Igc3R5bGVzXG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9oZWxwLmtleW1hbi5jb20vZGV2ZWxvcGVyL2xhbmd1YWdlL2d1aWRlL2hlYWRlcnNcblx0J2hlYWRlci1rZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8mXFx3Ky8sXG5cdFx0YWxpYXM6ICdib2xkJyAvLyBhbGlhcyBmb3Igc3R5bGVzXG5cdH0sXG5cdCdoZWFkZXItc3RhdGVtZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpiaXRtYXB8Yml0bWFwc3xjYXBzIGFsd2F5cyBvZmZ8Y2FwcyBvbiBvbmx5fGNvcHlyaWdodHxob3RrZXl8bGFuZ3VhZ2V8bGF5b3V0fG1lc3NhZ2V8bmFtZXxzaGlmdCBmcmVlcyBjYXBzfHZlcnNpb24pXFxiL2ksXG5cdFx0YWxpYXM6ICdib2xkJyAvLyBhbGlhcyBmb3Igc3R5bGVzXG5cdH0sXG5cblx0J3J1bGUta2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW55fGJhc2VsYXlvdXR8YmVlcHxjYWxsfGNvbnRleHR8ZGVhZGtleXxka3xpZnxpbmRleHxsYXllcnxub3Rhbnl8bnVsfG91dHN8cGxhdGZvcm18cmVzZXR8cmV0dXJufHNhdmV8c2V0fHN0b3JlfHVzZSlcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdzdHJ1Y3R1cmFsLWtleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFuc2l8YmVnaW58Z3JvdXB8bWF0Y2h8bmV3Y29udGV4dHxub21hdGNofHBvc3RrZXlzdHJva2V8cmVhZG9ubHl8dW5pY29kZXx1c2luZyBrZXlzKVxcYi9pLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblxuXHQnY29tcGlsZS10YXJnZXQnOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/OmtleW1hbnxrZXltYW5vbmx5fGtleW1hbndlYnxrbWZsfHdlYXZlcik6L2ksXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQvLyBVKyMjIyMsIHgjIyMsIGQjIyMgY2hhcmFjdGVycyBhbmQgbnVtYmVyc1xuXHQnbnVtYmVyJzogL1xcYig/OlVcXCtbXFxkQS1GXSt8ZFxcZCt8eFtcXGRhLWZdK3xcXGQrKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvWys+XFxcXCRdfFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCk9LF0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5rb3RsaW4gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdC8vIFRoZSBsb29rYmVoaW5kIHByZXZlbnRzIHdyb25nIGhpZ2hsaWdodGluZyBvZiBlLmcuIGtvdGxpbi5wcm9wZXJ0aWVzLmdldFxuXHRcdFx0cGF0dGVybjogLyhefFteLl0pXFxiKD86YWJzdHJhY3R8YWN0dWFsfGFubm90YXRpb258YXN8YnJlYWt8Ynl8Y2F0Y2h8Y2xhc3N8Y29tcGFuaW9ufGNvbnN0fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGNyb3NzaW5saW5lfGRhdGF8ZG98ZHluYW1pY3xlbHNlfGVudW18ZXhwZWN0fGV4dGVybmFsfGZpbmFsfGZpbmFsbHl8Zm9yfGZ1bnxnZXR8aWZ8aW1wb3J0fGlufGluZml4fGluaXR8aW5saW5lfGlubmVyfGludGVyZmFjZXxpbnRlcm5hbHxpc3xsYXRlaW5pdHxub2lubGluZXxudWxsfG9iamVjdHxvcGVufG9wZXJhdG9yfG91dHxvdmVycmlkZXxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWlmaWVkfHJldHVybnxzZWFsZWR8c2V0fHN1cGVyfHN1c3BlbmR8dGFpbHJlY3x0aGlzfHRocm93fHRvfHRyeXx0eXBlYWxpYXN8dmFsfHZhcnx2YXJhcmd8d2hlbnx3aGVyZXx3aGlsZSlcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86YFteXFxyXFxuYF0rYHxcXGJcXHcrKSg/PVxccypcXCgpLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcLikoPzpgW15cXHJcXG5gXStgfFxcdyspKD89XFxzKlxceykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MFt4WF1bXFxkYS1mQS1GXSsoPzpfW1xcZGEtZkEtRl0rKSp8MFtiQl1bMDFdKyg/Ol9bMDFdKykqfFxcZCsoPzpfXFxkKykqKD86XFwuXFxkKyg/Ol9cXGQrKSopPyg/OltlRV1bKy1dP1xcZCsoPzpfXFxkKykqKT9bZkZMXT8pXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwrWys9XT98LVstPT5dP3w9PT89P3whKD86IXw9PT8pP3xbXFwvKiU8Pl09P3xbPzpdOj98XFwuXFwufCYmfFxcfFxcfHxcXGIoPzphbmR8aW52fG9yfHNobHxzaHJ8dXNocnx4b3IpXFxiL1xuXHR9KTtcblxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmtvdGxpblsnY2xhc3MtbmFtZSddO1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uSW5zaWRlID0ge1xuXHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5rb3RsaW5cblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgna290bGluJywgJ3N0cmluZycsIHtcblx0XHQvLyBodHRwczovL2tvdGxpbmxhbmcub3JnL3NwZWMvZXhwcmVzc2lvbnMuaHRtbCNzdHJpbmctaW50ZXJwb2xhdGlvbi1leHByZXNzaW9uc1xuXHRcdCdzdHJpbmctbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1wiXCJcIig/OlteJF18XFwkKD86KD8hXFx7KXxcXHtbXnt9XSpcXH0pKSo/XCJcIlwiLyxcblx0XHRcdFx0YWxpYXM6ICdtdWx0aWxpbmUnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpbYS16X11cXHcqfFxce1tee31dKlxcfSkvaSxcblx0XHRcdFx0XHRcdGluc2lkZTogaW50ZXJwb2xhdGlvbkluc2lkZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuJF18XFxcXC58XFwkKD86KD8hXFx7KXxcXHtbXnt9XSpcXH0pKSpcIi8sXG5cdFx0XHRcdGFsaWFzOiAnc2luZ2xlbGluZScsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJCg/OlthLXpfXVxcdyp8XFx7W157fV0qXFx9KS9pLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZTogaW50ZXJwb2xhdGlvbkluc2lkZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjaGFyJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZy9zcGVjL2V4cHJlc3Npb25zLmh0bWwjY2hhcmFjdGVyLWxpdGVyYWxzXG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwoPzoufHVbYS1mQS1GMC05XXswLDR9KSknLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5rb3RsaW5bJ3N0cmluZyddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2tvdGxpbicsICdrZXl3b3JkJywge1xuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xcQkAoPzpcXHcrOik/KD86W0EtWl1cXHcqfFxcW1teXFxdXStcXF0pLyxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2tvdGxpbicsICdmdW5jdGlvbicsIHtcblx0XHQnbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFx3K0B8QFxcdytcXGIvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMua3QgPSBQcmlzbS5sYW5ndWFnZXMua290bGluO1xuXHRQcmlzbS5sYW5ndWFnZXMua3RzID0gUHJpc20ubGFuZ3VhZ2VzLmtvdGxpbjtcbn0oUHJpc20pKTtcblxuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWR1cGUtY2hhcmFjdGVycy1jaGFyYWN0ZXItY2xhc3MgKi9cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogUmVndWxhciBleHByZXNzaW9uIGZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGluIGlkZW50aWZpZXJzLlxuXHQgKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0dmFyIG5vbklkID0gL1xcc1xceDAwLVxceDFmXFx4MjItXFx4MmZcXHgzYS1cXHgzZlxceDViLVxceDVlXFx4NjBcXHg3Yi1cXHg3ZS8uc291cmNlO1xuXG5cdC8qKlxuXHQgKiBTdXJyb3VuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgSURzIHdpdGggcGF0dGVybnMgZm9yIG5vbi1JRCBzZXF1ZW5jZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuIEEgcmVndWxhciBleHByZXNzaW9uIGZvciBpZGVudGlmaWVycy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc10gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncy5cblx0ICogQHJldHVybnMge1JlZ0V4cH0gQSB3cmFwcGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaWRlbnRpZmllcnMuXG5cdCAqL1xuXHRmdW5jdGlvbiB3cmFwSWQocGF0dGVybiwgZmxhZ3MpIHtcblx0XHRyZXR1cm4gUmVnRXhwKHBhdHRlcm4ucmVwbGFjZSgvPG5vbklkPi9nLCBub25JZCksIGZsYWdzKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5rdW1pciA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHwuKi9cblx0XHR9LFxuXG5cdFx0J3Byb2xvZyc6IHtcblx0XHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlxcblxcclwiXSpcInwnW15cXG5cXHInXSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzNFx1MDQzMHxcdTA0M0RcdTA0MzVcdTA0NDIpKD89Wzxub25JZD5dfCQpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnb3BlcmF0b3Itd29yZCc6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzOHxcdTA0MzhcdTA0M0JcdTA0Mzh8XHUwNDNEXHUwNDM1KSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdzeXN0ZW0tdmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3cmFwSWQoLyhefFs8bm9uSWQ+XSlcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDcoPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQndHlwZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pKD86XHUwNDMyXHUwNDM1XHUwNDQ5fFx1MDQzQlx1MDQzOFx1MDQ0MnxcdTA0M0JcdTA0M0VcdTA0MzN8XHUwNDQxXHUwNDM4XHUwNDNDfFx1MDQ0Nlx1MDQzNVx1MDQzQikoPzpcXHgyMCpcdTA0NDJcdTA0MzBcdTA0MzEpPyg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdidWlsdGluJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pKD86XHUwNDNBXHUwNDNFXHUwNDNDXHUwNDNGXHUwNDNCfFx1MDQ0MVx1MDQzQVx1MDQzMFx1MDQzRFx1MDQzQVx1MDQzRVx1MDQzNHxcdTA0NDRcdTA0MzBcdTA0MzlcdTA0M0J8XHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQyKSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvciB0eXBlIG5hbWVzIGJlY2F1c2Ugb2YgXCJcdTA0NDJcdTA0MzBcdTA0MzFcIi5cblx0XHQgKiBcIlx1MDQ0Mlx1MDQzMFx1MDQzMVwiIGlzIGEgcmVzZXJ2ZWQgd29yZCwgYnV0IG5ldmVyIHVzZWQgd2l0aG91dCBhIHByZWNlZGluZyB0eXBlIG5hbWUuXG5cdFx0ICogXCJcdTA0MURcdTA0MTBcdTA0MTdcdTA0MURcdTA0MTBcdTA0MjdcdTA0MThcdTA0MjJcdTA0MkNcIiwgXCJcdTA0MjRcdTA0MzJcdTA0MzJcdTA0M0VcdTA0MzRcIiwgYW5kIFwiXHUwNDI0XHUwNDMyXHUwNDRCXHUwNDMyXHUwNDNFXHUwNDM0XCIgYXJlIG5vdCByZXNlcnZlZCB3b3Jkcy5cblx0XHQgKi9cblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzMFx1MDQzQlx1MDQzM3xcdTA0MzBcdTA0NDBcdTA0MzMoPzpcXHgyMCpcdTA0NDBcdTA0MzVcdTA0MzcpP3xcdTA0MzJcdTA0MzJcdTA0M0VcdTA0MzR8XHUwNDEyXHUwNDFBXHUwNDFCXHUwNDJFXHUwNDI3XHUwNDE4XHUwNDIyXHUwNDJDfFx1MDQzMlx1MDQ0MVtcdTA0MzVcdTA0NTFdfFx1MDQzMlx1MDQ0Qlx1MDQzMVx1MDQzRVx1MDQ0MHxcdTA0MzJcdTA0NEJcdTA0MzJcdTA0M0VcdTA0MzR8XHUwNDMyXHUwNDRCXHUwNDQ1XHUwNDNFXHUwNDM0fFx1MDQzNFx1MDQzMFx1MDQzRFx1MDQzRXxcdTA0MzRcdTA0M0JcdTA0NEZ8XHUwNDM0XHUwNDNFfFx1MDQzNFx1MDQ0MXxcdTA0MzVcdTA0NDFcdTA0M0JcdTA0Mzh8XHUwNDM4XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1fFx1MDQzOFx1MDQ0MVx1MDQzRnxcdTA0MzhcdTA0NDFcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NENcdTA0MzdcdTA0M0VcdTA0MzJcdTA0MzBcdTA0NDJcdTA0NEN8XHUwNDNBXHUwNDNFXHUwNDNEKD86KD86XFx4MjArfF8pXHUwNDM4XHUwNDQxXHUwNDNGKT98XHUwNDNBXHUwNDQ2KD86KD86XFx4MjArfF8pXHUwNDNGXHUwNDQwXHUwNDM4KT98XHUwNDNEXHUwNDMwXHUwNDM0XHUwNDNFfFx1MDQzRFx1MDQzMFx1MDQ0N3xcdTA0M0RcdTA0NDF8XHUwNDNEXHUwNDQ2fFx1MDQzRVx1MDQ0MnxcdTA0M0ZcdTA0MzBcdTA0NDNcdTA0MzdcdTA0MzB8XHUwNDNGXHUwNDNFXHUwNDNBXHUwNDMwfFx1MDQzRlx1MDQ0MFx1MDQzOHxcdTA0NDBcdTA0MzBcdTA0MzdcdTA0MzA/fFx1MDQ0MFx1MDQzNVx1MDQzN3xcdTA0NDFcdTA0NDJcdTA0M0VcdTA0M0Z8XHUwNDQyXHUwNDMwXHUwNDMxfFx1MDQ0Mlx1MDQzRXxcdTA0NDNcdTA0NDJcdTA0MzJ8XHUwNDQ4XHUwNDMwXHUwNDMzKSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0LyoqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvciByZXNlcnZlZCB3b3Jkcy4gKi9cblx0XHQnbmFtZSc6IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pW15cXGQ8bm9uSWQ+XVtePG5vbklkPl0qKD86XFx4MjArW148bm9uSWQ+XSspKig/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0LyoqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvciBuYW1lcy4gKi9cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pKD86XFxCXFwkW1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pKD89Wzxub25JZD5dfCQpLy5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8qKiBTaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHNlYXJjaGluZyBmb3Igd29yZHMuICovXG5cdFx0J3B1bmN0dWF0aW9uJzogLzo9fFsoKSw6O1xcW1xcXV0vLFxuXG5cdFx0LyoqXG5cdFx0ICogU2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciBzZWFyY2hpbmcgZm9yXG5cdFx0ICogLSBudW1lcmljIGNvbnN0YW50cyAoYmVjYXVzZSBvZiBcIitcIiBhbmQgXCItXCIpO1xuXHRcdCAqIC0gcHVuY3R1YXRpb24gbWFya3MgKGJlY2F1c2Ugb2YgXCI6PVwiIGFuZCBcIj1cIikuXG5cdFx0ICovXG5cdFx0J29wZXJhdG9yLWNoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwqXFwqP3w8Wz0+XT98Pj0/fFstKy89XS8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMua3VtID0gUHJpc20ubGFuZ3VhZ2VzLmt1bWlyO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5rdXN0byA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvYGBgW1xcc1xcU10qP2BgYHxbaEhdPyg/OlwiKD86W15cXHJcXG5cXFxcXCJdfFxcXFwuKSpcInwnKD86W15cXHJcXG5cXFxcJ118XFxcXC4pKid8QCg/OlwiW15cXHJcXG5cIl0qXCJ8J1teXFxyXFxuJ10qJykpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQndmVyYic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcfFxccyopW2Etel1bXFx3LV0qL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cblx0J2NvbW1hbmQnOiB7XG5cdFx0cGF0dGVybjogL1xcLlthLXpdW2EtelxcZC1dKlxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OmJvb2x8ZGF0ZXRpbWV8ZGVjaW1hbHxkeW5hbWljfGd1aWR8aW50fGxvbmd8cmVhbHxzdHJpbmd8dGltZXNwYW4pXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWNjZXNzfGFsaWFzfGFuZHxhbnRpfGFzfGFzY3xhdXRvfGJldHdlZW58Ynl8KD86Y29udGFpbnN8KD86ZW5kc3xzdGFydHMpd2l0aHxoYXMoPzpwZXJmaXh8c3VmZml4KT8pKD86X2NzKT98ZGF0YWJhc2V8ZGVjbGFyZXxkZXNjfGV4dGVybmFsfGZyb218ZnVsbG91dGVyfGhhc19hbGx8aW58aW5nZXN0aW9ufGlubGluZXxpbm5lcnxpbm5lcnVuaXF1ZXxpbnRvfCg/OmxlZnR8cmlnaHQpKD86YW50aSg/OnNlbWkpP3xpbm5lcnxvdXRlcnxzZW1pKT98bGV0fGxpa2V8bG9jYWx8bm90fG9mfG9ufG9yfHBhdHRlcm58cHJpbnR8cXVlcnlfcGFyYW1ldGVyc3xyYW5nZXxyZXN0cmljdHxzY2hlbWF8c2V0fHN0ZXB8dGFibGV8dGFibGVzfHRvfHZpZXd8d2hlcmV8d2l0aHxtYXRjaGVzXFxzK3JlZ2V4fG51bGxzXFxzKyg/OmZpcnN0fGxhc3QpKSg/IVtcXHctXSkvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxudWxsfHRydWUpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpLyxcblxuXHQnZGF0ZXRpbWUnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gUkZDIDgyMiArIFJGQyA4NTBcblx0XHRcdHBhdHRlcm46IC9cXGIoPzooPzpGcml8RnJpZGF5fE1vbnxNb25kYXl8U2F0fFNhdHVyZGF5fFN1bnxTdW5kYXl8VGh1fFRodXJzZGF5fFR1ZXxUdWVzZGF5fFdlZHxXZWRuZXNkYXkpXFxzKixcXHMqKT9cXGR7MSwyfSg/Olxccyt8LSkoPzpBcHJ8QXVnfERlY3xGZWJ8SmFufEp1bHxKdW58TWFyfE1heXxOb3Z8T2N0fFNlcCkoPzpcXHMrfC0pXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn0oPzo6XFxkezJ9KT8oPzpcXHMqKD86XFxiKD86W0EtWl18KD86W0VDTVRdW0RTXXxHTXxVKVQpfFsrLV1cXGR7NH0pKT9cXGIvLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBJU08gODYwMVxuXHRcdFx0cGF0dGVybjogL1srLV0/XFxiKD86XFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpbIFRdXFxkezJ9OlxcZHsyfSg/OjpcXGR7Mn0oPzpcXC5cXGQrKT8pPyk/fFxcZHsyfTpcXGR7Mn0oPzo6XFxkezJ9KD86XFwuXFxkKyk/KT8pWj8vLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fVxuXHRdLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4WzAtOUEtRmEtZl0rfFxcZCsoPzpcXC5cXGQrKT8oPzpbRWVdWystXT9cXGQrKT8pKD86KD86bWlufHNlY3xbbW5cdTAwQjVdc3xbZGhtc118bWljcm9zZWNvbmR8dGljaylcXGIpP3xbKy1dP1xcYmluZlxcYi8sXG5cblx0J29wZXJhdG9yJzogLz0+fFshPV1+fFshPTw+XT0/fFstKyovJXxdfFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fSw7LjpdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgZnVuY1BhdHRlcm4gPSAvXFxcXCg/OlteYS16KClbXFxdXXxbYS16Kl0rKS9pO1xuXHR2YXIgaW5zaWRlRXF1ID0ge1xuXHRcdCdlcXVhdGlvbi1jb21tYW5kJzoge1xuXHRcdFx0cGF0dGVybjogZnVuY1BhdHRlcm4sXG5cdFx0XHRhbGlhczogJ3JlZ2V4J1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMubGF0ZXggPSB7XG5cdFx0J2NvbW1lbnQnOiAvJS4qLyxcblx0XHQvLyB0aGUgdmVyYmF0aW0gZW52aXJvbm1lbnQgcHJpbnRzIHdoaXRlc3BhY2UgdG8gdGhlIGRvY3VtZW50XG5cdFx0J2NkYXRhJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFxcYmVnaW5cXHsoKD86bHN0bGlzdGluZ3x2ZXJiYXRpbSlcXCo/KVxcfSlbXFxzXFxTXSo/KD89XFxcXGVuZFxce1xcMlxcfSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgKiBlcXVhdGlvbnMgY2FuIGJlIGJldHdlZW4gJCQgJCQgb3IgJCAkIG9yIFxcKCBcXCkgb3IgXFxbIFxcXVxuXHRcdCAqIChhbGwgYXJlIG11bHRpbGluZSlcblx0XHQgKi9cblx0XHQnZXF1YXRpb24nOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXCQoPzpcXFxcW1xcc1xcU118W15cXFxcJF0pK1xcJFxcJHxcXCQoPzpcXFxcW1xcc1xcU118W15cXFxcJF0pK1xcJHxcXFxcXFwoW1xcc1xcU10qP1xcXFxcXCl8XFxcXFxcW1tcXHNcXFNdKj9cXFxcXFxdLyxcblx0XHRcdFx0aW5zaWRlOiBpbnNpZGVFcXUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXFxcYmVnaW5cXHsoKD86YWxpZ258ZXFuYXJyYXl8ZXF1YXRpb258Z2F0aGVyfG1hdGh8bXVsdGxpbmUpXFwqPylcXH0pW1xcc1xcU10qPyg/PVxcXFxlbmRcXHtcXDJcXH0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBpbnNpZGVFcXUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0Lypcblx0XHQgKiBhcmd1bWVudHMgd2hpY2ggYXJlIGtleXdvcmRzIG9yIHJlZmVyZW5jZXMgYXJlIGhpZ2hsaWdodGVkXG5cdFx0ICogYXMga2V5d29yZHNcblx0XHQgKi9cblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxcXCg/OmJlZ2lufGNpdGV8ZG9jdW1lbnRjbGFzc3xlbmR8bGFiZWx8cmVmfHVzZXBhY2thZ2UpKD86XFxbW15cXF1dK1xcXSk/XFx7KVtefV0rKD89XFx9KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndXJsJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFxcdXJsXFx7KVtefV0rKD89XFx9KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvKlxuXHRcdCAqIHNlY3Rpb24gb3IgY2hhcHRlciBoZWFkbGluZXMgYXJlIGhpZ2hsaWdodGVkIGFzIGJvbGQgc28gdGhhdFxuXHRcdCAqIHRoZXkgc3RhbmQgb3V0IG1vcmVcblx0XHQgKi9cblx0XHQnaGVhZGxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcXFwoPzpjaGFwdGVyfGZyYW1ldGl0bGV8cGFyYWdyYXBofHBhcnR8c2VjdGlvbnxzdWJwYXJhZ3JhcGh8c3Vic2VjdGlvbnxzdWJzdWJwYXJhZ3JhcGh8c3Vic3Vic2VjdGlvbnxzdWJzdWJzdWJwYXJhZ3JhcGgpXFwqPyg/OlxcW1teXFxdXStcXF0pP1xceylbXn1dKyg/PVxcfSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IGZ1bmNQYXR0ZXJuLFxuXHRcdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXXt9Jl0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnRleCA9IFByaXNtLmxhbmd1YWdlcy5sYXRleDtcblx0UHJpc20ubGFuZ3VhZ2VzLmNvbnRleHQgPSBQcmlzbS5sYW5ndWFnZXMubGF0ZXg7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmxhdHRlID0ge1xuXHRcdCdjb21tZW50JzogL15cXHtcXCpbXFxzXFxTXSovLFxuXHRcdCdsYXR0ZS10YWcnOiB7XG5cdFx0XHQvLyBodHRwczovL2xhdHRlLm5ldHRlLm9yZy9lbi90YWdzXG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHsoPzpcXC8oPz1bYS16XSkpPykoPzpbPV9dfFthLXpdXFx3KlxcYig/IVxcKCkpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtcXC8/fFxcfSQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdwaHAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxTKD86W1xcc1xcU10qXFxTKT8vLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1waHAnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucGhwXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBtYXJrdXBMYXR0ZSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ2F0dHItdmFsdWUnLCB7XG5cdFx0J24tYXR0cic6IHtcblx0XHRcdHBhdHRlcm46IC9uOltcXHctXSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKSk/Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eW15cXHM9XSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvPVtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXG5cdFx0XHRcdFx0XHRcdC9ePS8sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVtcIiddfFtcIiddJC8sXG5cdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0J3BocCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1xcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucGhwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdH0sIG1hcmt1cExhdHRlLnRhZyk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi5sYW5ndWFnZSAhPT0gJ2xhdHRlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR2YXIgbGF0dGVQYXR0ZXJuID0gL1xce1xcKltcXHNcXFNdKj9cXCpcXH18XFx7W14nXCJcXHN7fSpdKD86W15cIicve31dfFxcLyg/IVsqL10pfChcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXH0vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnbGF0dGUnLCBsYXR0ZVBhdHRlcm4pO1xuXHRcdGVudi5ncmFtbWFyID0gbWFya3VwTGF0dGU7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2xhdHRlJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbi8qIEZJWE1FIDpcbiA6ZXh0ZW5kKCkgaXMgbm90IGhhbmRsZWQgc3BlY2lmaWNhbGx5IDogaXRzIGhpZ2hsaWdodGluZyBpcyBidWdneS5cbiBNaXhpbiB1c2FnZSBtdXN0IGJlIGluc2lkZSBhIHJ1bGVzZXQgdG8gYmUgaGlnaGxpZ2h0ZWQuXG4gQXQtcnVsZXMgKGUuZy4gaW1wb3J0KSBjb250YWluaW5nIGludGVycG9sYXRpb25zIGFyZSBidWdneS5cbiBEZXRhY2hlZCBydWxlc2V0cyBhcmUgaGlnaGxpZ2h0ZWQgYXMgYXQtcnVsZXMuXG4gQSBjb21tZW50IGJlZm9yZSBhIG1peGluIHVzYWdlIHByZXZlbnRzIHRoZSBsYXR0ZXIgdG8gYmUgcHJvcGVybHkgaGlnaGxpZ2h0ZWQuXG4gKi9cblxuUHJpc20ubGFuZ3VhZ2VzLmxlc3MgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjc3MnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnYXRydWxlJzoge1xuXHRcdHBhdHRlcm46IC9AW1xcdy1dKD86XFwoKD86W14oKXt9XXxcXChbXigpe31dKlxcKSkqXFwpfFteKCl7fTtcXHNdfFxccysoPyFcXHMpKSo/KD89XFxzKlxceykvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1s6KCldL1xuXHRcdH1cblx0fSxcblx0Ly8gc2VsZWN0b3JzIGFuZCBtaXhpbnMgYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWVcblx0J3NlbGVjdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oPzpAXFx7W1xcdy1dK1xcfXxbXnt9O1xcc0BdKSg/OkBcXHtbXFx3LV0rXFx9fFxcKCg/OlteKCl7fV18XFwoW14oKXt9XSpcXCkpKlxcKXxbXigpe307QFxcc118XFxzKyg/IVxccykpKj8oPz1cXHMqXFx7KS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQvLyBtaXhpbiBwYXJhbWV0ZXJzXG5cdFx0XHQndmFyaWFibGUnOiAvQCtbXFx3LV0rL1xuXHRcdH1cblx0fSxcblxuXHQncHJvcGVydHknOiAvKD86QFxce1tcXHctXStcXH18W1xcdy1dKSsoPzpcXCtfPyk/KD89XFxzKjopLyxcblx0J29wZXJhdG9yJzogL1srXFwtKlxcL10vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbGVzcycsICdwcm9wZXJ0eScsIHtcblx0J3ZhcmlhYmxlJzogW1xuXHRcdC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uICh0aGUgY29sb24gbXVzdCBiZSBjb25zdW1lZCEpXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL0BbXFx3LV0rXFxzKjovLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBWYXJpYWJsZSB1c2FnZVxuXHRcdC9AQD9bXFx3LV0rL1xuXHRdLFxuXHQnbWl4aW4tdXNhZ2UnOiB7XG5cdFx0cGF0dGVybjogLyhbeztdXFxzKilbLiNdKD8hXFxkKVtcXHctXS4qPyg/PVsoO10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5zY2hlbWUgPSB7XG5cdFx0Ly8gdGhpcyBzdXBwb3J0cyBcIm5vcm1hbFwiIHNpbmdsZS1saW5lIGNvbW1lbnRzOlxuXHRcdC8vICAgOyBjb21tZW50XG5cdFx0Ly8gYW5kIChwb3RlbnRpYWxseSBuZXN0ZWQpIG11bHRpbGluZSBjb21tZW50czpcblx0XHQvLyAgICN8IGNvbW1lbnQgI3wgbmVzdGVkIHwjIHN0aWxsIGNvbW1lbnQgfCNcblx0XHQvLyAob25seSAxIGxldmVsIG9mIG5lc3RpbmcgaXMgc3VwcG9ydGVkKVxuXHRcdCdjb21tZW50JzogLzsuKnwjO1xccyooPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXFsoPzpbXlxcW1xcXV18XFxbW15cXFtcXF1dKlxcXSkqXFxdKXwjXFx8KD86W14jfF18Iyg/IVxcfCl8XFx8KD8hIyl8I1xcfCg/OlteI3xdfCMoPyFcXHwpfFxcfCg/ISMpKSpcXHwjKSpcXHwjLyxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzeW1ib2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJ1teKClcXFtcXF0jJ1xcc10rLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvI1xcXFwoPzpbdXhdW2EtZkEtRlxcZF0rXFxifFstYS16QS1aXStcXGJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxcXFMpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2xhbWJkYS1wYXJhbWV0ZXInOiBbXG5cdFx0XHQvLyBodHRwczovL3d3dy5jcy5jbXUuZWR1L0dyb3Vwcy9BSS9odG1sL3I0cnMvcjRyc182Lmh0bWwjU0VDMzBcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW11sYW1iZGFcXHMrKSg/OltefCgpXFxbXFxdJ1xcc10rfFxcfCg/OlteXFxcXHxdfFxcXFwuKSpcXHwpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW11sYW1iZGFcXHMrWyhcXFtdKVteKClcXFtcXF0nXSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdKSg/OmJlZ2lufGNhc2UoPzotbGFtYmRhKT98Y29uZCg/Oi1leHBhbmQpP3xkZWZpbmUoPzotbGlicmFyeXwtbWFjcm98LXJlY29yZC10eXBlfC1zeW50YXh8LXZhbHVlcyk/fGRlZm1hY3JvfGRlbGF5KD86LWZvcmNlKT98ZG98ZWxzZXxleGNlcHR8ZXhwb3J0fGd1YXJkfGlmfGltcG9ydHxpbmNsdWRlKD86LWNpfC1saWJyYXJ5LWRlY2xhcmF0aW9ucyk/fGxhbWJkYXxsZXQoPzpyZWMpPyg/Oi1zeW50YXh8LXZhbHVlc3xcXCopP3xsZXRcXCotdmFsdWVzfG9ubHl8cGFyYW1ldGVyaXplfHByZWZpeHwoPzpxdWFzaS0/KT9xdW90ZXxyZW5hbWV8c2V0IXxzeW50YXgtKD86Y2FzZXxydWxlcyl8dW5sZXNzfHVucXVvdGUoPzotc3BsaWNpbmcpP3x3aGVuKSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2J1aWx0aW4nOiB7XG5cdFx0XHQvLyBhbGwgZnVuY3Rpb25zIG9mIHRoZSBiYXNlIGxpYnJhcnkgb2YgUjdSUyBwbHVzIHNvbWUgb2YgYnVpbHQtaW5zIG9mIFI1UnNcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdKSg/OmFic3xhbmR8YXBwZW5kfGFwcGx5fGFzc29jfGFzc1txdl18YmluYXJ5LXBvcnRcXD98Ym9vbGVhbj0/XFw/fGJ5dGV2ZWN0b3IoPzotYXBwZW5kfC1jb3B5fC1jb3B5IXwtbGVuZ3RofC11OC1yZWZ8LXU4LXNldCF8XFw/KT98Y2FhcnxjYWRyfGNhbGwtd2l0aC0oPzpjdXJyZW50LWNvbnRpbnVhdGlvbnxwb3J0fHZhbHVlcyl8Y2FsbFxcL2NjfGNhcnxjZGFyfGNkZHJ8Y2RyfGNlaWxpbmd8Y2hhcig/Oi0+aW50ZWdlcnwtcmVhZHlcXD98XFw/fDxcXD98PD1cXD98PVxcP3w+XFw/fD49XFw/KXxjbG9zZS0oPzppbnB1dC1wb3J0fG91dHB1dC1wb3J0fHBvcnQpfGNvbXBsZXhcXD98Y29uc3xjdXJyZW50LSg/OmVycm9yfGlucHV0fG91dHB1dCktcG9ydHxkZW5vbWluYXRvcnxkeW5hbWljLXdpbmR8ZW9mLW9iamVjdFxcPz98ZXFcXD98ZXF1YWxcXD98ZXF2XFw/fGVycm9yfGVycm9yLW9iamVjdCg/Oi1pcnJpdGFudHN8LW1lc3NhZ2V8XFw/KXxldmFsfGV2ZW5cXD98ZXhhY3QoPzotaW50ZWdlci1zcXJ0fC1pbnRlZ2VyXFw/fFxcPyk/fGV4cHR8ZmVhdHVyZXN8ZmlsZS1lcnJvclxcP3xmbG9vcig/Oi1xdW90aWVudHwtcmVtYWluZGVyfFxcLyk/fGZsdXNoLW91dHB1dC1wb3J0fGZvci1lYWNofGdjZHxnZXQtb3V0cHV0LSg/OmJ5dGV2ZWN0b3J8c3RyaW5nKXxpbmV4YWN0XFw/P3xpbnB1dC1wb3J0KD86LW9wZW5cXD98XFw/KXxpbnRlZ2VyKD86LT5jaGFyfFxcPyl8bGNtfGxlbmd0aHxsaXN0KD86LT5zdHJpbmd8LT52ZWN0b3J8LWNvcHl8LXJlZnwtc2V0IXwtdGFpbHxcXD8pP3xtYWtlLSg/OmJ5dGV2ZWN0b3J8bGlzdHxwYXJhbWV0ZXJ8c3RyaW5nfHZlY3Rvcil8bWFwfG1heHxtZW1iZXJ8bWVtcXxtZW12fG1pbnxtb2R1bG98bmVnYXRpdmVcXD98bmV3bGluZXxub3R8bnVsbFxcP3xudW1iZXIoPzotPnN0cmluZ3xcXD8pfG51bWVyYXRvcnxvZGRcXD98b3Blbi0oPzppbnB1dHxvdXRwdXQpLSg/OmJ5dGV2ZWN0b3J8c3RyaW5nKXxvcnxvdXRwdXQtcG9ydCg/Oi1vcGVuXFw/fFxcPyl8cGFpclxcP3xwZWVrLWNoYXJ8cGVlay11OHxwb3J0XFw/fHBvc2l0aXZlXFw/fHByb2NlZHVyZVxcP3xxdW90aWVudHxyYWlzZXxyYWlzZS1jb250aW51YWJsZXxyYXRpb25hbFxcP3xyYXRpb25hbGl6ZXxyZWFkLSg/OmJ5dGV2ZWN0b3J8Ynl0ZXZlY3RvciF8Y2hhcnxlcnJvclxcP3xsaW5lfHN0cmluZ3x1OCl8cmVhbFxcP3xyZW1haW5kZXJ8cmV2ZXJzZXxyb3VuZHxzZXQtY1thZF1yIXxzcXVhcmV8c3RyaW5nKD86LT5saXN0fC0+bnVtYmVyfC0+c3ltYm9sfC0+dXRmOHwtPnZlY3RvcnwtYXBwZW5kfC1jb3B5fC1jb3B5IXwtZmlsbCF8LWZvci1lYWNofC1sZW5ndGh8LW1hcHwtcmVmfC1zZXQhfFxcP3w8XFw/fDw9XFw/fD1cXD98PlxcP3w+PVxcPyk/fHN1YnN0cmluZ3xzeW1ib2woPzotPnN0cmluZ3xcXD98PVxcPyl8c3ludGF4LWVycm9yfHRleHR1YWwtcG9ydFxcP3x0cnVuY2F0ZSg/Oi1xdW90aWVudHwtcmVtYWluZGVyfFxcLyk/fHU4LXJlYWR5XFw/fHV0ZjgtPnN0cmluZ3x2YWx1ZXN8dmVjdG9yKD86LT5saXN0fC0+c3RyaW5nfC1hcHBlbmR8LWNvcHl8LWNvcHkhfC1maWxsIXwtZm9yLWVhY2h8LWxlbmd0aHwtbWFwfC1yZWZ8LXNldCF8XFw/KT98d2l0aC1leGNlcHRpb24taGFuZGxlcnx3cml0ZS0oPzpieXRldmVjdG9yfGNoYXJ8c3RyaW5nfHU4KXx6ZXJvXFw/KSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW10pKD86Wy0rKiUvXXxbPD5dPT98PT4/KSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IHtcblx0XHRcdC8vIFRoZSBudW1iZXIgcGF0dGVybiBmcm9tIFt0aGUgUjdSUyBzcGVjXShodHRwczovL3NtYWxsLnI3cnMub3JnL2F0dGFjaG1lbnQvcjdycy5wZGYpLlxuXHRcdFx0Ly9cblx0XHRcdC8vIDxudW1iZXI+ICAgICAgOj0gPG51bSAyPnw8bnVtIDg+fDxudW0gMTA+fDxudW0gMTY+XG5cdFx0XHQvLyA8bnVtIFI+ICAgICAgIDo9IDxwcmVmaXggUj48Y29tcGxleCBSPlxuXHRcdFx0Ly8gPGNvbXBsZXggUj4gICA6PSA8cmVhbCBSPig/OkA8cmVhbCBSPnw8aW1hZ2luYXJ5IFI+KT98PGltYWdpbmFyeSBSPlxuXHRcdFx0Ly8gPGltYWdpbmFyeSBSPiA6PSBbKy1dKD86PHVyZWFsIFI+fCg/OmluZnxuYW4pXFwuMCk/aVxuXHRcdFx0Ly8gPHJlYWwgUj4gICAgICA6PSBbKy1dPzx1cmVhbCBSPnxbKy1dKD86aW5mfG5hbilcXC4wXG5cdFx0XHQvLyA8dXJlYWwgUj4gICAgIDo9IDx1aW50IFI+KD86XFwvPHVpbnQgUj4pP1xuXHRcdFx0Ly8gICAgICAgICAgICAgICAgfCA8ZGVjaW1hbCBSPlxuXHRcdFx0Ly9cblx0XHRcdC8vIDxkZWNpbWFsIDEwPiAgOj0gKD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspP1xuXHRcdFx0Ly8gPHVpbnQgUj4gICAgICA6PSA8ZGlnaXQgUj4rXG5cdFx0XHQvLyA8cHJlZml4IFI+ICAgIDo9IDxyYWRpeCBSPig/OiNbZWldKT98KD86I1tlaV0pPzxyYWRpeCBSPlxuXHRcdFx0Ly8gPHJhZGl4IDI+ICAgICA6PSAjYlxuXHRcdFx0Ly8gPHJhZGl4IDg+ICAgICA6PSAjb1xuXHRcdFx0Ly8gPHJhZGl4IDEwPiAgICA6PSAoPzojZCk/XG5cdFx0XHQvLyA8cmFkaXggMTY+ICAgIDo9ICN4XG5cdFx0XHQvLyA8ZGlnaXQgMj4gICAgIDo9IFswMV1cblx0XHRcdC8vIDxkaWdpdCA4PiAgICAgOj0gWzAtN11cblx0XHRcdC8vIDxkaWdpdCAxMD4gICAgOj0gXFxkXG5cdFx0XHQvLyA8ZGlnaXQgMTY+ICAgIDo9IFswLTlhLWZdXG5cdFx0XHQvL1xuXHRcdFx0Ly8gVGhlIHByb2JsZW0gd2l0aCB0aGlzIGdyYW1tYXIgaXMgdGhhdCB0aGUgcmVzdWx0aW5nIHJlZ2V4IGlzIHdheSB0byBjb21wbGV4LCBzbyB3ZSBzaW1wbGlmeSBieSBncm91cGluZyBhbGxcblx0XHRcdC8vIG5vbi1kZWNpbWFsIGJhc2VzIHRvZ2V0aGVyLiBUaGlzIHJlc3VsdHMgaW4gYSBkZWNpbWFsIChkZWMpIGFuZCBjb21iaW5lZCBiaW5hcnksIG9jdGFsLCBhbmQgaGV4YWRlY2ltYWwgKGJveClcblx0XHRcdC8vIHBhdHRlcm46XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoU29ydGVkQk5GKHtcblx0XHRcdFx0Jzx1cmVhbCBkZWM+JzogL1xcZCsoPzpcXC9cXGQrKXwoPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VzZmRsXVsrLV0/XFxkKyk/Ly5zb3VyY2UsXG5cdFx0XHRcdCc8cmVhbCBkZWM+JzogL1srLV0/PHVyZWFsIGRlYz58WystXSg/OmluZnxuYW4pXFwuMC8uc291cmNlLFxuXHRcdFx0XHQnPGltYWdpbmFyeSBkZWM+JzogL1srLV0oPzo8dXJlYWwgZGVjPnwoPzppbmZ8bmFuKVxcLjApP2kvLnNvdXJjZSxcblx0XHRcdFx0Jzxjb21wbGV4IGRlYz4nOiAvPHJlYWwgZGVjPig/OkA8cmVhbCBkZWM+fDxpbWFnaW5hcnkgZGVjPik/fDxpbWFnaW5hcnkgZGVjPi8uc291cmNlLFxuXHRcdFx0XHQnPG51bSBkZWM+JzogLyg/OiNkKD86I1tlaV0pP3wjW2VpXSg/OiNkKT8pPzxjb21wbGV4IGRlYz4vLnNvdXJjZSxcblxuXHRcdFx0XHQnPHVyZWFsIGJveD4nOiAvWzAtOWEtZl0rKD86XFwvWzAtOWEtZl0rKT8vLnNvdXJjZSxcblx0XHRcdFx0JzxyZWFsIGJveD4nOiAvWystXT88dXJlYWwgYm94PnxbKy1dKD86aW5mfG5hbilcXC4wLy5zb3VyY2UsXG5cdFx0XHRcdCc8aW1hZ2luYXJ5IGJveD4nOiAvWystXSg/Ojx1cmVhbCBib3g+fCg/OmluZnxuYW4pXFwuMCk/aS8uc291cmNlLFxuXHRcdFx0XHQnPGNvbXBsZXggYm94Pic6IC88cmVhbCBib3g+KD86QDxyZWFsIGJveD58PGltYWdpbmFyeSBib3g+KT98PGltYWdpbmFyeSBib3g+Ly5zb3VyY2UsXG5cdFx0XHRcdCc8bnVtIGJveD4nOiAvI1tib3hdKD86I1tlaV0pP3woPzojW2VpXSk/I1tib3hdPGNvbXBsZXggYm94Pi8uc291cmNlLFxuXG5cdFx0XHRcdCc8bnVtYmVyPic6IC8oXnxbKClcXFtcXF1cXHNdKSg/OjxudW0gZGVjPnw8bnVtIGJveD4pKD89WygpXFxbXFxdXFxzXXwkKS8uc291cmNlLFxuXHRcdFx0fSksICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbKClcXFtcXF1cXHNdKSMoPzpbZnRdfGZhbHNlfHRydWUpKD89WygpXFxbXFxdXFxzXXwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W14nYCNdKVsoXFxbXSkoPzpbXnwoKVxcW1xcXSdcXHNdK3xcXHwoPzpbXlxcXFx8XXxcXFxcLikqXFx8KSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2lkZW50aWZpZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58WygpXFxbXFxdXFxzXSlcXHwoPzpbXlxcXFx8XXxcXFxcLikqXFx8KD89WygpXFxbXFxdXFxzXXwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxdJ10vXG5cdH07XG5cblx0LyoqXG5cdCAqIEdpdmVuIGEgdG9wb2xvZ2ljYWxseSBzb3J0ZWQgQk5GIGdyYW1tYXIsIHRoaXMgd2lsbCByZXR1cm4gdGhlIFJlZ0V4cCBzb3VyY2Ugb2YgbGFzdCBydWxlIG9mIHRoZSBncmFtbWFyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGdyYW1tYXJcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIFNvcnRlZEJORihncmFtbWFyKSB7XG5cdFx0Zm9yICh2YXIga2V5IGluIGdyYW1tYXIpIHtcblx0XHRcdGdyYW1tYXJba2V5XSA9IGdyYW1tYXJba2V5XS5yZXBsYWNlKC88W1xcd1xcc10rPi9nLCBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdHJldHVybiAnKD86JyArIGdyYW1tYXJba2V5XS50cmltKCkgKyAnKSc7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gcmV0dXJuIHRoZSBsYXN0IGl0ZW1cblx0XHRyZXR1cm4gZ3JhbW1hcltrZXldO1xuXHR9XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBzY2hlbWVFeHByZXNzaW9uID0gL1xcKCg/OlteKCk7XCIjXFxcXF18XFxcXFtcXHNcXFNdfDsuKig/IS4pfFwiKD86W15cIlxcXFxdfFxcXFwuKSpcInwjKD86XFx7KD86KD8hI1xcfSlbXFxzXFxTXSkqI1xcfXxbXntdKXw8ZXhwcj4pKlxcKS8uc291cmNlO1xuXHQvLyBhbGxvdyBmb3IgdXAgdG8gcG93KDIsIHJlY3Vyc2l2ZW5lc3NMb2cyKSBtYW55IGxldmVscyBvZiByZWN1cnNpdmUgYnJhY2UgZXhwcmVzc2lvbnNcblx0Ly8gRm9yIHNvbWUgcmVhc29uLCB0aGlzIGNhbid0IGJlIDRcblx0dmFyIHJlY3Vyc2l2ZW5lc3NMb2cyID0gNTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZWN1cnNpdmVuZXNzTG9nMjsgaSsrKSB7XG5cdFx0c2NoZW1lRXhwcmVzc2lvbiA9IHNjaGVtZUV4cHJlc3Npb24ucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVtZUV4cHJlc3Npb247IH0pO1xuXHR9XG5cdHNjaGVtZUV4cHJlc3Npb24gPSBzY2hlbWVFeHByZXNzaW9uLnJlcGxhY2UoLzxleHByPi9nLCAvW15cXHNcXFNdLy5zb3VyY2UpO1xuXG5cblx0dmFyIGxpbHlwb25kID0gUHJpc20ubGFuZ3VhZ2VzLmxpbHlwb25kID0ge1xuXHRcdCdjb21tZW50JzogLyUoPzooPyFcXHspLip8XFx7W1xcc1xcU10qPyVcXH0pLyxcblx0XHQnZW1iZWRkZWQtc2NoZW1lJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbPVxcc10pIyg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcInxbXlxccygpXCJdKig/OlteXFxzKCldfDxleHByPikpLy5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVtZUV4cHJlc3Npb247IH0pLCAnbScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc2NoZW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKCMpW1xcc1xcU10rJC8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLXNjaGVtZScsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnZW1iZWRkZWQtbGlseXBvbmQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8jXFx7W1xcc1xcU10qPyNcXH0vLFxuXHRcdFx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eI1xce3wjXFx9JC8sXG5cdFx0XHRcdFx0XHRcdFx0J2xpbHlwb25kJzoge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWxpbHlwb25kJyxcblx0XHRcdFx0XHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuc2NoZW1lXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvIy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcXFxuZXdcXHMrKVtcXHctXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxcXFthLXpdWy1cXHddKi9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxcXC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC9bPXxdfDw8fD4+Lyxcblx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W2EtelxcZF0pKD86Jyt8LCt8W19eXT8tW19eXT8oPzpbLSteIT4uX118KD89XFxkKSl8W19eXVxcLj98Wy4hXSl8W3t9KClbXFxdPD5efl18XFxcXFsoKVtcXF08PlxcXFwhXXwtLXxfXy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC9cXGQrKT9cXGIvXG5cdH07XG5cblx0bGlseXBvbmRbJ2VtYmVkZGVkLXNjaGVtZSddLmluc2lkZVsnc2NoZW1lJ10uaW5zaWRlWydlbWJlZGRlZC1saWx5cG9uZCddLmluc2lkZVsnbGlseXBvbmQnXS5pbnNpZGUgPSBsaWx5cG9uZDtcblxuXHRQcmlzbS5sYW5ndWFnZXMubHkgPSBsaWx5cG9uZDtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubGlxdWlkID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHslXFxzKmNvbW1lbnRcXHMqJVxcfSlbXFxzXFxTXSsoPz1cXHslXFxzKmVuZGNvbW1lbnRcXHMqJVxcfSQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdkZWxpbWl0ZXInOiB7XG5cdFx0cGF0dGVybjogL15cXHsoPzpcXHtcXHt8WyVcXHtdKS0/fC0/KD86XFx9XFx9fFslXFx9XSlcXH0kLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJdKlwifCdbXiddKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xhc3NpZ258YnJlYWt8KD86ZW5kKT8oPzpjYXB0dXJlfGNhc2V8Y29tbWVudHxmb3J8Zm9ybXxpZnxwYWdpbmF0ZXxyYXd8c3R5bGV8dGFibGVyb3d8dW5sZXNzKXxjb250aW51ZXxjeWNsZXxkZWNyZW1lbnR8ZWNob3xlbHNlfGVsc2lmfGlufGluY2x1ZGV8aW5jcmVtZW50fGxpbWl0fGxpcXVpZHxvZmZzZXR8cmFuZ2V8cmVuZGVyfHJldmVyc2VkfHNlY3Rpb258d2hlbnx3aXRoKVxcYi8sXG5cdCdvYmplY3QnOiAvXFxiKD86YWRkcmVzc3xhbGxfY291bnRyeV9vcHRpb25fdGFnc3xhcnRpY2xlfGJsb2NrfGJsb2d8Y2FydHxjaGVja291dHxjb2xsZWN0aW9ufGNvbG9yfGNvdW50cnl8Y291bnRyeV9vcHRpb25fdGFnc3xjdXJyZW5jeXxjdXJyZW50X3BhZ2V8Y3VycmVudF90YWdzfGN1c3RvbWVyfGN1c3RvbWVyX2FkZHJlc3N8ZGF0ZXxkaXNjb3VudF9hbGxvY2F0aW9ufGRpc2NvdW50X2FwcGxpY2F0aW9ufGV4dGVybmFsX3ZpZGVvfGZpbHRlcnxmaWx0ZXJfdmFsdWV8Zm9udHxmb3Jsb29wfGZ1bGZpbGxtZW50fGdlbmVyaWNfZmlsZXxnaWZ0X2NhcmR8Z3JvdXB8aGFuZGxlfGltYWdlfGxpbmVfaXRlbXxsaW5rfGxpbmtsaXN0fGxvY2FsaXphdGlvbnxsb2NhdGlvbnxtZWFzdXJlbWVudHxtZWRpYXxtZXRhZmllbGR8bW9kZWx8bW9kZWxfc291cmNlfG9yZGVyfHBhZ2V8cGFnZV9kZXNjcmlwdGlvbnxwYWdlX2ltYWdlfHBhZ2VfdGl0bGV8cGFydHxwb2xpY3l8cHJvZHVjdHxwcm9kdWN0X29wdGlvbnxyZWNvbW1lbmRhdGlvbnN8cmVxdWVzdHxyb2JvdHN8cm91dGVzfHJ1bGV8c2NyaXB0fHNlYXJjaHxzZWxsaW5nX3BsYW58c2VsbGluZ19wbGFuX2FsbG9jYXRpb258c2VsbGluZ19wbGFuX2dyb3VwfHNoaXBwaW5nX21ldGhvZHxzaG9wfHNob3BfbG9jYWxlfHNpdGVtYXB8c3RvcmVfYXZhaWxhYmlsaXR5fHRheF9saW5lfHRlbXBsYXRlfHRoZW1lfHRyYW5zYWN0aW9ufHVuaXRfcHJpY2VfbWVhc3VyZW1lbnR8dXNlcl9hZ2VudHx2YXJpYW50fHZpZGVvfHZpZGVvX3NvdXJjZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZmlsdGVyJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gYXJyYXkgZnVuY3Rpb25zXG5cdFx0XHRwYXR0ZXJuOiAvKFxcLlxccyopKD86Zmlyc3R8bGFzdHxzaXplKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxuaWx8dHJ1ZSlcXGIvLFxuXHQncmFuZ2UnOiB7XG5cdFx0cGF0dGVybjogL1xcLlxcLi8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL1Nob3BpZnkvbGlxdWlkL2Jsb2IvNjk4ZjVlMGQ5Njc0MjNlMDEzZjYxNjlkOTExMWJkOTY5YmQ3ODMzNy9saWIvbGlxdWlkL2xleGVyLnJiI0wyMVxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQnb3BlcmF0b3InOiAvWyE9XT18PD58Wzw+XT0/fFt8Pzo9LV18XFxiKD86YW5kfGNvbnRhaW5zKD89XFxzKXxvcilcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sXFxbXFxdKCldLyxcblx0J2VtcHR5Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJlbXB0eVxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxufTtcblxuUHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdHZhciBsaXF1aWRQYXR0ZXJuID0gL1xceyVcXHMqY29tbWVudFxccyolXFx9W1xcc1xcU10qP1xceyVcXHMqZW5kY29tbWVudFxccyolXFx9fFxceyg/OiVbXFxzXFxTXSo/JXxcXHtcXHtbXFxzXFxTXSo/XFx9XFx9fFxce1tcXHNcXFNdKj9cXH0pXFx9L2c7XG5cdHZhciBpbnNpZGVSYXcgPSBmYWxzZTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnbGlxdWlkJywgbGlxdWlkUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0dmFyIHRhZ01hdGNoID0gL15cXHslLT9cXHMqKFxcdyspLy5leGVjKG1hdGNoKTtcblx0XHRpZiAodGFnTWF0Y2gpIHtcblx0XHRcdHZhciB0YWcgPSB0YWdNYXRjaFsxXTtcblx0XHRcdGlmICh0YWcgPT09ICdyYXcnICYmICFpbnNpZGVSYXcpIHtcblx0XHRcdFx0aW5zaWRlUmF3ID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHRhZyA9PT0gJ2VuZHJhdycpIHtcblx0XHRcdFx0aW5zaWRlUmF3ID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAhaW5zaWRlUmF3O1xuXHR9KTtcbn0pO1xuXG5QcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnbGlxdWlkJyk7XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvKipcblx0ICogRnVuY3Rpb25zIHRvIGNvbnN0cnVjdCByZWd1bGFyIGV4cHJlc3Npb25zXG5cdCAqIGUuZy4gKGludGVyYWN0aXZlIC4uLiBvciAoaW50ZXJhY3RpdmUpXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBzaW1wbGVfZm9ybShuYW1lKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cCgvKFxcKCkvLnNvdXJjZSArICcoPzonICsgbmFtZSArICcpJyArIC8oPz1bXFxzXFwpXSkvLnNvdXJjZSk7XG5cdH1cblx0LyoqXG5cdCAqIGJvb2xlYW5zIGFuZCBudW1iZXJzXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBwcmltaXRpdmUocGF0dGVybikge1xuXHRcdHJldHVybiBSZWdFeHAoLyhbXFxzKFtdKS8uc291cmNlICsgJyg/OicgKyBwYXR0ZXJuICsgJyknICsgLyg/PVtcXHMpXSkvLnNvdXJjZSk7XG5cdH1cblxuXHQvLyBQYXR0ZXJucyBpbiByZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gU3ltYm9sIG5hbWUuIFNlZSBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVhbC9odG1sX25vZGUvZWxpc3AvU3ltYm9sLVR5cGUuaHRtbFxuXHQvLyAmIGFuZCA6IGFyZSBleGNsdWRlZCBhcyB0aGV5IGFyZSB1c3VhbGx5IHVzZWQgZm9yIHNwZWNpYWwgcHVycG9zZXNcblx0dmFyIHN5bWJvbCA9IC8oPyFcXGQpWy0rKi9+IUAkJV49PD57fVxcd10rLy5zb3VyY2U7XG5cdC8vIHN5bWJvbCBzdGFydGluZyB3aXRoICYgdXNlZCBpbiBmdW5jdGlvbiBhcmd1bWVudHNcblx0dmFyIG1hcmtlciA9ICcmJyArIHN5bWJvbDtcblx0Ly8gT3BlbiBwYXJlbnRoZXNpcyBmb3IgbG9vay1iZWhpbmRcblx0dmFyIHBhciA9ICcoXFxcXCgpJztcblx0dmFyIGVuZHBhciA9ICcoPz1cXFxcKSknO1xuXHQvLyBFbmQgdGhlIHBhdHRlcm4gd2l0aCBsb29rLWFoZWFkIHNwYWNlXG5cdHZhciBzcGFjZSA9ICcoPz1cXFxccyknO1xuXHR2YXIgbmVzdGVkUGFyID0gLyg/OlteKCldfFxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKSpcXCkpKlxcKSkqXFwpKSovLnNvdXJjZTtcblxuXHR2YXIgbGFuZ3VhZ2UgPSB7XG5cdFx0Ly8gVGhyZWUgb3IgZm91ciBzZW1pY29sb25zIGFyZSBjb25zaWRlcmVkIGEgaGVhZGluZy5cblx0XHQvLyBTZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFjcy9tYW51YWwvaHRtbF9ub2RlL2VsaXNwL0NvbW1lbnQtVGlwcy5odG1sXG5cdFx0aGVhZGluZzoge1xuXHRcdFx0cGF0dGVybjogLzs7Oy4qLyxcblx0XHRcdGFsaWFzOiBbJ2NvbW1lbnQnLCAndGl0bGUnXVxuXHRcdH0sXG5cdFx0Y29tbWVudDogLzsuKi8sXG5cdFx0c3RyaW5nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRhcmd1bWVudDogL1stQS1aXSsoPz1bLixcXHNdKS8sXG5cdFx0XHRcdHN5bWJvbDogUmVnRXhwKCdgJyArIHN5bWJvbCArIFwiJ1wiKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3F1b3RlZC1zeW1ib2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXCIjPydcIiArIHN5bWJvbCksXG5cdFx0XHRhbGlhczogWyd2YXJpYWJsZScsICdzeW1ib2wnXVxuXHRcdH0sXG5cdFx0J2xpc3AtcHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJzonICsgc3ltYm9sKSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblx0XHRzcGxpY2U6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnLEA/JyArIHN5bWJvbCksXG5cdFx0XHRhbGlhczogWydzeW1ib2wnLCAndmFyaWFibGUnXVxuXHRcdH0sXG5cdFx0a2V5d29yZDogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdFx0cGFyICtcblx0XHRcdFx0XHRcdCcoPzphbmR8KD86Y2wtKT9sZXRmfGNsLWxvb3B8Y29uZHxjb25zfGVycm9yfGlmfCg/OmxleGljYWwtKT9sZXRcXFxcKj98bWVzc2FnZXxub3R8bnVsbHxvcnxwcm92aWRlfHJlcXVpcmV8c2V0cXx1bmxlc3N8dXNlLXBhY2thZ2V8d2hlbnx3aGlsZSknICtcblx0XHRcdFx0XHRcdHNwYWNlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHRwYXIgKyAnKD86YXBwZW5kfGJ5fGNvbGxlY3R8Y29uY2F0fGRvfGZpbmFsbHl8Zm9yfGlufHJldHVybiknICsgc3BhY2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdGRlY2xhcmU6IHtcblx0XHRcdHBhdHRlcm46IHNpbXBsZV9mb3JtKC9kZWNsYXJlLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdGludGVyYWN0aXZlOiB7XG5cdFx0XHRwYXR0ZXJuOiBzaW1wbGVfZm9ybSgvaW50ZXJhY3RpdmUvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0Ym9vbGVhbjoge1xuXHRcdFx0cGF0dGVybjogcHJpbWl0aXZlKC9uaWx8dC8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdG51bWJlcjoge1xuXHRcdFx0cGF0dGVybjogcHJpbWl0aXZlKC9bLStdP1xcZCsoPzpcXC5cXGQqKT8vLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHRkZWZ2YXI6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChwYXIgKyAnZGVmKD86Y29uc3R8Y3VzdG9tfGdyb3VwfHZhcilcXFxccysnICsgc3ltYm9sKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0a2V5d29yZDogL15kZWZbYS16XSsvLFxuXHRcdFx0XHR2YXJpYWJsZTogUmVnRXhwKHN5bWJvbClcblx0XHRcdH1cblx0XHR9LFxuXHRcdGRlZnVuOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgLyg/OmNsLSk/KD86ZGVmbWFjcm98ZGVmdW5cXCo/KVxccysvLnNvdXJjZSArIHN5bWJvbCArIC9cXHMrXFwoLy5zb3VyY2UgKyBuZXN0ZWRQYXIgKyAvXFwpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRrZXl3b3JkOiAvXig/OmNsLSk/ZGVmXFxTKy8sXG5cdFx0XHRcdC8vIFNlZSBiZWxvdywgdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBiZSBkZWZpbmVkIGxhdGVyIHNvIHRoYXQgaXQgY2FuXG5cdFx0XHRcdC8vIHJlZmVyZW5jZSB0aGUgbGFuZ3VhZ2Ugb2JqZWN0LlxuXHRcdFx0XHRhcmd1bWVudHM6IG51bGwsXG5cdFx0XHRcdGZ1bmN0aW9uOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXlxcXFxzKScgKyBzeW1ib2wpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cHVuY3R1YXRpb246IC9bKCldL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGFtYmRhOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgJ2xhbWJkYVxcXFxzK1xcXFwoXFxcXHMqKD86Jj8nICsgc3ltYm9sICsgJyg/OlxcXFxzKyY/JyArIHN5bWJvbCArICcpKlxcXFxzKik/XFxcXCknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0a2V5d29yZDogL15sYW1iZGEvLFxuXHRcdFx0XHQvLyBTZWUgYmVsb3csIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgZGVmaW5lZCBsYXRlciBzbyB0aGF0IGl0IGNhblxuXHRcdFx0XHQvLyByZWZlcmVuY2UgdGhlIGxhbmd1YWdlIG9iamVjdC5cblx0XHRcdFx0YXJndW1lbnRzOiBudWxsLFxuXHRcdFx0XHRwdW5jdHVhdGlvbjogL1soKV0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjYXI6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChwYXIgKyBzeW1ib2wpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0cHVuY3R1YXRpb246IFtcblx0XHRcdC8vIG9wZW4gcGFyZW4sIGJyYWNrZXRzLCBhbmQgY2xvc2UgcGFyZW5cblx0XHRcdC8oPzpbJ2AsXT9cXCh8WylcXFtcXF1dKS8sXG5cdFx0XHQvLyBjb25zXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcLig/PVxccykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdF1cblx0fTtcblxuXHR2YXIgYXJnID0ge1xuXHRcdCdsaXNwLW1hcmtlcic6IFJlZ0V4cChtYXJrZXIpLFxuXHRcdCd2YXJmb3JtJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC9cXCgvLnNvdXJjZSArIHN5bWJvbCArIC9cXHMrKD89XFxTKS8uc291cmNlICsgbmVzdGVkUGFyICsgL1xcKS8uc291cmNlKSxcblx0XHRcdGluc2lkZTogbGFuZ3VhZ2Vcblx0XHR9LFxuXHRcdCdhcmd1bWVudCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W1xccyhdKS8uc291cmNlICsgc3ltYm9sKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH0sXG5cdFx0cmVzdDogbGFuZ3VhZ2Vcblx0fTtcblxuXHR2YXIgZm9ybXMgPSAnXFxcXFMrKD86XFxcXHMrXFxcXFMrKSonO1xuXG5cdHZhciBhcmdsaXN0ID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChwYXIgKyBuZXN0ZWRQYXIgKyBlbmRwYXIpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVzdC12YXJzJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyYoPzpib2R5fHJlc3QpXFxcXHMrJyArIGZvcm1zKSxcblx0XHRcdFx0aW5zaWRlOiBhcmdcblx0XHRcdH0sXG5cdFx0XHQnb3RoZXItbWFya2VyLXZhcnMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnJig/OmF1eHxvcHRpb25hbClcXFxccysnICsgZm9ybXMpLFxuXHRcdFx0XHRpbnNpZGU6IGFyZ1xuXHRcdFx0fSxcblx0XHRcdGtleXM6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcma2V5XFxcXHMrJyArIGZvcm1zICsgJyg/OlxcXFxzKyZhbGxvdy1vdGhlci1rZXlzKT8nKSxcblx0XHRcdFx0aW5zaWRlOiBhcmdcblx0XHRcdH0sXG5cdFx0XHRhcmd1bWVudDoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoc3ltYm9sKSxcblx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdH0sXG5cdFx0XHRwdW5jdHVhdGlvbjogL1soKV0vXG5cdFx0fVxuXHR9O1xuXG5cdGxhbmd1YWdlWydsYW1iZGEnXS5pbnNpZGUuYXJndW1lbnRzID0gYXJnbGlzdDtcblx0bGFuZ3VhZ2VbJ2RlZnVuJ10uaW5zaWRlLmFyZ3VtZW50cyA9IFByaXNtLnV0aWwuY2xvbmUoYXJnbGlzdCk7XG5cdGxhbmd1YWdlWydkZWZ1biddLmluc2lkZS5hcmd1bWVudHMuaW5zaWRlLnN1Ymxpc3QgPSBhcmdsaXN0O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5saXNwID0gbGFuZ3VhZ2U7XG5cdFByaXNtLmxhbmd1YWdlcy5lbGlzcCA9IGxhbmd1YWdlO1xuXHRQcmlzbS5sYW5ndWFnZXMuZW1hY3MgPSBsYW5ndWFnZTtcblx0UHJpc20ubGFuZ3VhZ2VzWydlbWFjcy1saXNwJ10gPSBsYW5ndWFnZTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmxpdmVzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdpbnRlcnBvbGF0ZWQtc3RyaW5nJzoge1xuXHRcdC8qIExvb2stYmVoaW5kIGFuZCBsb29rLWFoZWFkIHByZXZlbnRzIHdyb25nIGJlaGF2aW9yIG9mIHRoZSBncmVlZHkgcGF0dGVyblxuXHRcdCogZm9yY2luZyBpdCB0byBtYXRjaCBcIlwiXCItcXVvdGVkIHN0cmluZyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBtYXRjaCBcIi1xdW90ZWQgZmlyc3QuICovXG5cdFx0cGF0dGVybjogLyhefFteXCJdKShcIlwiXCJ8XCIpKD86XFxcXFtcXHNcXFNdfCg/IVxcMilbXlxcXFxdKSpcXDIoPyFcIikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjW2Etel9dKD86LT9bYS16XXxbXFxkX10pKi9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSNcXHtbXn1dK1xcfS9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLygnJyd8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC88XFxbW1xcc1xcU10qP1xcXT4vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvXFxcXFteXFxzLDtcXF0pfV0rL1xuXHRdLFxuXHQncmVnZXgnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLyg/OlxcW1teXFxyXFxuXFxdXSpcXF18XFxcXC58KD8hXFwvXFwvKVteXFxcXFxcW10pK1xcL1xcL1tnaW15dV17MCw1fS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXC8oPzpcXFtbXlxcclxcblxcXV0qXFxdfFxcXFwufFteL1xcXFxcXHJcXG5cXFtdKStcXC9bZ2lteXVdezAsNX0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58KD8hLSkuKVxcYig/OmJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGV4dGVuZHN8ZmFsbHRocm91Z2h8ZmluYWxseXxmb3IoPzogZXZlcik/fGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aXR8bGV0fGxvb3B8bmV3fG51bGx8b3RoZXJ3aXNlfG93bnxyZXR1cm58c3VwZXJ8c3dpdGNofHRoYXR8dGhlbnx0aGlzfHRocm93fHRyeXx1bmxlc3N8dW50aWx8dmFyfHZvaWR8d2hlbnx3aGlsZXx5aWVsZCkoPyEtKVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQtb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhefFteLV0pXFxiKD86KD86ZGVsZXRlfHJlcXVpcmV8dHlwZW9mKSF8KD86YW5kfGJ5fGRlbGV0ZXxleHBvcnR8ZnJvbXxpbXBvcnQoPzogYWxsKT98aW58aW5zdGFuY2VvZnxpcyg/OiBub3R8bnQpP3xub3R8b2Z8b3J8dGlsfHRvfHR5cGVvZnx3aXRofHhvcikoPyEtKVxcYikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdib29sZWFuJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmZhbHNlfG5vfG9mZnxvbnx0cnVlfHllcykoPyEtKVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2FyZ3VtZW50Jzoge1xuXHRcdC8vIERvbid0IG1hdGNoIC4mLiBub3IgJiZcblx0XHRwYXR0ZXJuOiAvKF58KD8hXFwuJlxcLilbXiZdKSYoPyEmKVxcZCovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiKD86XFxkK35bXFxkYS16XSt8XFxkW1xcZF9dKig/OlxcLlxcZFtcXGRfXSopPyg/OlthLXpdXFx3Kik/KS9pLFxuXHQnaWRlbnRpZmllcic6IC9bYS16X10oPzotP1thLXpdfFtcXGRfXSkqL2ksXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvLyBTcGFjZWQgLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oIClcXC4oPz0gKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBGdWxsIGxpc3QsIGluIG9yZGVyOlxuXHRcdC8vIC49IC5+IC4uIC4uLlxuXHRcdC8vIC4mLiAuXi4gLjw8LiAuPj4uIC4+Pj4uXG5cdFx0Ly8gOj0gOjogOjo9XG5cdFx0Ly8gJiZcblx0XHQvLyB8fCB8PlxuXHRcdC8vIDwgPDwgPDw8IDw8PDxcblx0XHQvLyA8LSA8LS0gPC0hIDwtLSFcblx0XHQvLyA8fiA8fn4gPH4hIDx+fiFcblx0XHQvLyA8fCA8PSA8P1xuXHRcdC8vID4gPj4gPj0gPj9cblx0XHQvLyAtIC0tIC0+IC0tPlxuXHRcdC8vICsgKytcblx0XHQvLyBAIEBAXG5cdFx0Ly8gJSAlJVxuXHRcdC8vICogKipcblx0XHQvLyAhICE9ICF+PVxuXHRcdC8vICF+PiAhfn4+XG5cdFx0Ly8gIS0+ICEtLT5cblx0XHQvLyB+IH4+IH5+PiB+PVxuXHRcdC8vID0gPT1cblx0XHQvLyBeIF5eXG5cdFx0Ly8gLyA/XG5cdFx0L1xcLig/Ols9fl18XFwuXFwuPyl8XFwuKD86WyZ8Xl18PDx8Pj4+PylcXC58Oig/Oj18Oj0/KXwmJnxcXHxbfD5dfDwoPzo8PD88P3wtLT8hP3x+fj8hP3xbfD0/XSk/fD5bPj0/XT98LSg/Oi0+P3w+KT98XFwrXFwrP3xAQD98JSU/fFxcKlxcKj98ISg/On4/PXwtLT8+fH4/fj4pP3x+KD86fj8+fD0pP3w9PT98XFxeXFxeP3xbXFwvP10vXG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXXwuLDo7YF0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubGl2ZXNjcmlwdFsnaW50ZXJwb2xhdGVkLXN0cmluZyddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLmxpdmVzY3JpcHQ7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmxsdm0gPSB7XG5cdFx0J2NvbW1lbnQnOiAvOy4qLyxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCd2YXJpYWJsZSc6IC9bJUAhI10oPzooPyFcXGQpKD86Wy0kLlxcd118XFxcXFthLWZcXGRdezJ9KSt8XFxkKykvaSxcblx0XHQnbGFiZWwnOiAvKD8hXFxkKSg/OlstJC5cXHddfFxcXFxbYS1mXFxkXXsyfSkrOi9pLFxuXHRcdCd0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmRvdWJsZXxmbG9hdHxmcDEyOHxoYWxmfGlbMS05XVxcZCp8bGFiZWx8bWV0YWRhdGF8cHBjX2ZwMTI4fHRva2VufHZvaWR8eDg2X2ZwODB8eDg2X21teClcXGIvLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYlthLXpfXVthLXpfMC05XSpcXGIvLFxuXHRcdCdudW1iZXInOiAvWystXT9cXGJcXGQrKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/XFxifFxcYjB4W1xcZEEtRmEtZl0rXFxifFxcYjB4S1tcXGRBLUZhLWZdezIwfVxcYnxcXGIweFtNTF1bXFxkQS1GYS1mXXszMn1cXGJ8XFxiMHhIW1xcZEEtRmEtZl17NH1cXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC4hKj08Pl0vLFxuXHR9O1xufShQcmlzbSkpO1xuXG4vLyBUaGlzIGlzIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgZ2VuZXJpYyBsb2cgZmlsZXMuXG4vLyBTaW5jZSB0aGVyZSBpcyBubyBvbmUgbG9nIGZvcm1hdCwgdGhpcyBsYW5ndWFnZSBkZWZpbml0aW9uIGhhcyB0byBzdXBwb3J0IGFsbCBmb3JtYXRzIHRvIHNvbWUgZGVncmVlLlxuLy9cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9NVERMOS92aW0tbG9nLWhpZ2hsaWdodGluZ1xuXG5QcmlzbS5sYW5ndWFnZXMubG9nID0ge1xuXHQnc3RyaW5nJzoge1xuXHRcdC8vIFNpbmdsZS1xdW90ZWQgc3RyaW5ncyBtdXN0IG5vdCBiZSBjb25mdXNlZCB3aXRoIHBsYWluIHRleHQuIEUuZy4gQ2FuJ3QgaXNuJ3QgU3VzYW4ncyBDaHJpcycgdG95XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD8hW3N0XSB8IFxcdykoPzpbXidcXFxcXFxyXFxuXXxcXFxcLikqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHR9LFxuXG5cdCdleGNlcHRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3Ll0pW2Etel1bXFx3Ll0qKD86RXJyb3J8RXhjZXB0aW9uKTouKig/Oig/Olxcclxcbj98XFxuKVsgXFx0XSooPzphdFsgXFx0XS4rfFxcLnszfS4qfENhdXNlZCBieTouKikpKyg/Oig/Olxcclxcbj98XFxuKVsgXFx0XSpcXC5cXC5cXC4gLiopPy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6IFsnamF2YXN0YWNrdHJhY2UnLCAnbGFuZ3VhZ2UtamF2YXN0YWNrdHJhY2UnXSxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1snamF2YXN0YWNrdHJhY2UnXSB8fCB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGJhdFxcYi8sXG5cdFx0XHQnZnVuY3Rpb24nOiAvW2Etel9dW1xcdyRdKig/PVxcKCkvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1suOigpXS9cblx0XHR9XG5cdH0sXG5cblx0J2xldmVsJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpBTEVSVHxDUklUfENSSVRJQ0FMfEVNRVJHfEVNRVJHRU5DWXxFUlJ8RVJST1J8RkFJTFVSRXxGQVRBTHxTRVZFUkUpXFxiLyxcblx0XHRcdGFsaWFzOiBbJ2Vycm9yJywgJ2ltcG9ydGFudCddXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86V0FSTnxXQVJOSU5HfFdSTilcXGIvLFxuXHRcdFx0YWxpYXM6IFsnd2FybmluZycsICdpbXBvcnRhbnQnXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkRJU1BMQVl8SU5GfElORk98Tk9USUNFfFNUQVRVUylcXGIvLFxuXHRcdFx0YWxpYXM6IFsnaW5mbycsICdrZXl3b3JkJ11cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpEQkd8REVCVUd8RklORSlcXGIvLFxuXHRcdFx0YWxpYXM6IFsnZGVidWcnLCAna2V5d29yZCddXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86RklORVJ8RklORVNUfFRSQUNFfFRSQ3xWRVJCT1NFfFZSQilcXGIvLFxuXHRcdFx0YWxpYXM6IFsndHJhY2UnLCAnY29tbWVudCddXG5cdFx0fVxuXHRdLFxuXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W1xcXXxdKVsgXFx0XSopW2Etel9dKD86W1xcdy1dfFxcYlxcL1xcYikqKD86Wy4gXVxcKD9cXHcoPzpbXFx3LV18XFxiXFwvXFxiKSpcXCk/KSo6KD89XFxzKS9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J3NlcGFyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tK10pLXszLH18PXszLH18XFwqezMsfXwtIC0gL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdH0sXG5cblx0J3VybCc6IC9cXGIoPzpmaWxlfGZ0cHxodHRwcz8pOlxcL1xcL1teXFxzfCw7J1wiXSpbXlxcc3wsOydcIj4uXS8sXG5cdCdlbWFpbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKVstXFx3Ky5dK0BbYS16XVthLXowLTktXSooPzpcXC5bYS16XVthLXowLTktXSopKyg/PVxccykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd1cmwnXG5cdH0sXG5cblx0J2lwLWFkZHJlc3MnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OlxcZHsxLDN9KD86XFwuXFxkezEsM30pezN9KVxcYi8sXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblx0J21hYy1hZGRyZXNzJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS1mMC05XXsyfSg/OjpbYS1mMC05XXsyfSl7NX1cXGIvaSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnZG9tYWluJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpW2Etel1bYS16MC05LV0qKD86XFwuW2Etel1bYS16MC05LV0qKSpcXC5bYS16XVthLXowLTktXSsoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cblx0J3V1aWQnOiB7XG5cdFx0cGF0dGVybjogL1xcYlswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfVxcYi9pLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cdCdoYXNoJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpbYS1mMC05XXszMn0pezEsMn1cXGIvaSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXG5cdCdmaWxlLXBhdGgnOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpdOltcXFxcL11bXlxcc3wsOzooKXt9XFxbXFxdXCInXSt8KF58W1xcczpcXFtcXF0oPnxdKVxcLnswLDJ9XFwvXFx3W15cXHN8LDs6KCl7fVxcW1xcXVwiJ10qL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cblx0J2RhdGUnOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0L1xcYlxcZHs0fVstL11cXGR7Mn1bLS9dXFxkezJ9KD86VCg/PVxcZHsxLDJ9Oil8KD89XFxzXFxkezEsMn06KSkvLnNvdXJjZSArXG5cdFx0XHQnfCcgK1xuXHRcdFx0L1xcYlxcZHsxLDR9Wy0vIF0oPzpcXGR7MSwyfXxBcHJ8QXVnfERlY3xGZWJ8SmFufEp1bHxKdW58TWFyfE1heXxOb3Z8T2N0fFNlcClbLS8gXVxcZHsyLDR9VD9cXGIvLnNvdXJjZSArXG5cdFx0XHQnfCcgK1xuXHRcdFx0L1xcYig/Oig/OkZyaXxNb258U2F0fFN1bnxUaHV8VHVlfFdlZCkoPzpcXHN7MSwyfSg/OkFwcnxBdWd8RGVjfEZlYnxKYW58SnVsfEp1bnxNYXJ8TWF5fE5vdnxPY3R8U2VwKSk/fEFwcnxBdWd8RGVjfEZlYnxKYW58SnVsfEp1bnxNYXJ8TWF5fE5vdnxPY3R8U2VwKVxcc3sxLDJ9XFxkezEsMn1cXGIvLnNvdXJjZSxcblx0XHRcdCdpJ1xuXHRcdCksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCd0aW1lJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXGR7MSwyfTpcXGR7MSwyfTpcXGR7MSwyfSg/OlsuLDpdXFxkKyk/KD86XFxzP1srLV1cXGR7Mn06P1xcZHsyfXxaKT9cXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG51bGx8dHJ1ZSlcXGIvaSxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14uXFx3XSkoPzoweFthLWYwLTldK3wwb1swLTddK3wwYlswMV0rfHY/XFxkW1xcZGEtZl0qKD86XFwuXFxkKykqKD86ZVsrLV0/XFxkKyk/W2Etel17MCwzfVxcYilcXGIoPyFcXC5cXHcpL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdvcGVyYXRvcic6IC9bOzo/PD0+fi9AISQlJitcXC18Xigpe30qI10vLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXS4sXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5sb2xjb2RlID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHQvXFxiT0JUV1xcc1tcXHNcXFNdKj9cXHNUTERSXFxiLyxcblx0XHQvXFxiQlRXLisvXG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86Oi58W15cIjpdKSpcIi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvOlxce1tefV0rXFx9Lyxcblx0XHRcdCdzeW1ib2wnOiBbXG5cdFx0XHRcdC86XFwoW2EtZlxcZF0rXFwpL2ksXG5cdFx0XHRcdC86XFxbW15cXF1dK1xcXS8sXG5cdFx0XHRcdC86Wyk+b1wiOl0vXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC8oPzpcXEItKT8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspLyxcblx0J3N5bWJvbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OkEgKT8oPzpCVUtLSVR8Tk9PQnxOVU1CQVJ8TlVNQlJ8VFJPT0Z8WUFSTikoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL0EoPz1cXHMpL1xuXHRcdH1cblx0fSxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpKD86SU0gSU4gWVJ8SU0gT1VUVEEgWVIpIClbYS16QS1aXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKSg/OkhPVyBJWiBJfEkgSVp8SVopIClbYS16QS1aXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPzpBTnxGT1VORCBZUnxHSU1NRUh8R1RGT3xIQUl8SEFTIEF8SE9XIElaIEl8SSBIQVMgQXxJIElafElGIFUgU0FZIFNPfElNIElOIFlSfElNIE9VVFRBIFlSfElTIE5PVyg/OiBBKT98SVRaKD86IEEpP3xJWnxLVEhYfEtUSFhCWUV8TElFSyg/OiBBKT98TUFFS3xNRUJCRXxNS0FZfE5FUkZJTnxOTyBXQUl8TyBIQUkgSU18TyBSTFlcXD98T0lDfE9NR3xPTUdXVEZ8UnxTTU9PU0h8U1JTfFRJTHxVUFBJTnxWSVNJQkxFfFdJTEV8V1RGXFw/fFlBIFJMWXxZUikoPz1cXHN8LHwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvJ1ooPz1cXHN8LHwkKS9cblx0XSxcblx0J2Jvb2xlYW4nOiB7XG5cdFx0cGF0dGVybjogLyhefFxccykoPzpGQUlMfFdJTikoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogLyhefFxccylJVCg/PVxcc3wsfCQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/Ok5PVHxCT1RIIFNBRU18RElGRlJJTlR8KD86QUxMfEFOWXxCSUdHUnxCT1RIfERJRkZ8RUlUSEVSfE1PRHxQUk9EVUtUfFFVT1NIVU5UfFNNQUxMUnxTVU18V09OKSBPRikoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvXFwuezN9fFx1MjAyNnwsfCEvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubWFnbWEgPSB7XG5cdCdvdXRwdXQnOiB7XG5cdFx0cGF0dGVybjogL14oPi4qKD86XFxyKD86XFxufCg/IVxcbikpfFxcbikpKD8hPikoPzouK3woPzpcXHIoPzpcXG58KD8hXFxuKSl8XFxuKSg/IT4pLiopKD86KD86XFxyKD86XFxufCg/IVxcbikpfFxcbikoPyE+KS4qKSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXCJdKVwiKD86W15cXHJcXG5cXFxcXCJdfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQvLyBodHRwOi8vbWFnbWEubWF0aHMudXN5ZC5lZHUuYXUvbWFnbWEvaGFuZGJvb2svdGV4dC84MlxuXHQna2V5d29yZCc6IC9cXGIoPzpffGFkanxhbmR8YXNzZXJ0fGFzc2VydDJ8YXNzZXJ0M3xhc3NpZ25lZHxicmVha3xieXxjYXNlfGNhdHxjYXRjaHxjbGVhcnxjbXBlcXxjbXBuZXxjb250aW51ZXxkZWNsYXJlfGRlZmF1bHR8ZGVsZXRlfGRpZmZ8ZGl2fGRvfGVsaWZ8ZWxzZXxlbmR8ZXF8ZXJyb3J8ZXZhbHxleGlzdHN8ZXhpdHxmb3J8Zm9yYWxsfGZvcndhcmR8ZnByaW50ZnxmcmVlemV8ZnVuY3Rpb258Z2V8Z3R8aWZ8aWxvYWR8aW1wb3J0fGlufGludHJpbnNpY3xpc3xqb2lufGxlfGxvYWR8bG9jYWx8bHR8bWVldHxtb2R8bmV8bm90fG5vdGFkanxub3Rpbnxub3RzdWJzZXR8b3J8cHJpbnR8cHJpbnRmfHByb2NlZHVyZXxxdWl0fHJhbmRvbXxyZWFkfHJlYWRpfHJlcGVhdHxyZXF1aXJlfHJlcXVpcmVnZXxyZXF1aXJlcmFuZ2V8cmVzdG9yZXxyZXR1cm58c2F2ZXxzZGlmZnxzZWxlY3R8c3Vic2V0fHRoZW58dGltZXx0b3x0cnl8dW50aWx8dnByaW50fHZwcmludGZ8dnRpbWV8d2hlbnx3aGVyZXx3aGlsZXx4b3IpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdnZW5lcmF0b3InOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqPCkvaSxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dfFxcLlxcLikoPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/KD86X1thLXpdPyk/KD89JHxbXlxcdy5dfFxcLlxcLikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnb3BlcmF0b3InOiAvLT58Wy0rKi9efiF8Iz1dfDo9fFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClbXFxde308Piw7LjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1ha2VmaWxlID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxyXFxuXSkqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnYnVpbHRpbi10YXJnZXQnOiB7XG5cdFx0cGF0dGVybjogL1xcLltBLVpdW146Iz1cXHNdKyg/PVxccyo6KD8hPSkpLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH0sXG5cblx0J3RhcmdldCc6IHtcblx0XHRwYXR0ZXJuOiAvXig/OlteOj1cXHNdfFsgXFx0XSsoPyFbXFxzOl0pKSsoPz1cXHMqOig/IT0pKS9tLFxuXHRcdGFsaWFzOiAnc3ltYm9sJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC9cXCQrKD86KD8hXFwkKVteKCl7fTojPVxcc10rfCg/PVsoe10pKS9cblx0XHR9XG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCQrKD86KD8hXFwkKVteKCl7fTojPVxcc10rfFxcKFtAKiU8Xis/XVtERl1cXCl8KD89Wyh7XSkpLyxcblxuXHQvLyBEaXJlY3RpdmVzXG5cdCdrZXl3b3JkJzogLy1pbmNsdWRlXFxifFxcYig/OmRlZmluZXxlbHNlfGVuZGVmfGVuZGlmfGV4cG9ydHxpZm4/ZGVmfGlmbj9lcXxpbmNsdWRlfG92ZXJyaWRlfHByaXZhdGV8c2luY2x1ZGV8dW5kZWZpbmV8dW5leHBvcnR8dnBhdGgpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyhcXCgpKD86YWJzcGF0aHxhZGRzdWZmaXh8YW5kfGJhc2VuYW1lfGNhbGx8ZGlyfGVycm9yfGV2YWx8ZmlsZXxmaWx0ZXIoPzotb3V0KT98ZmluZHN0cmluZ3xmaXJzdHdvcmR8Zmxhdm9yfGZvcmVhY2h8Z3VpbGV8aWZ8aW5mb3xqb2lufGxhc3R3b3JkfGxvYWR8bm90ZGlyfG9yfG9yaWdpbnxwYXRzdWJzdHxyZWFscGF0aHxzaGVsbHxzb3J0fHN0cmlwfHN1YnN0fHN1ZmZpeHx2YWx1ZXx3YXJuaW5nfHdpbGRjYXJkfHdvcmQoPzpsaXN0fHMpPykoPz1bIFxcdF0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC8oPzo6OnxbPzorIV0pPz18W3xAXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bOjsoKXt9XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBBbGxvdyBvbmx5IG9uZSBsaW5lIGJyZWFrXG5cdHZhciBpbm5lciA9IC8oPzpcXFxcLnxbXlxcXFxcXG5cXHJdfCg/OlxcbnxcXHJcXG4/KSg/IVtcXHJcXG5dKSkvLnNvdXJjZTtcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBib2xkIG9yIGl0YWxpYyBwYXR0ZXJuLlxuXHQgKlxuXHQgKiBUaGlzIGFsc28gYWRkcyBhIGxvb2tiZWhpbmQgZ3JvdXAgdG8gdGhlIGdpdmVuIHBhdHRlcm4gdG8gZW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gaXMgbm90IGJhY2tzbGFzaC1lc2NhcGVkLlxuXHQgKlxuXHQgKiBfTm90ZTpfIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgYWRkcyBhIGNhcHR1cmluZyBncm91cC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIGNyZWF0ZUlubGluZShwYXR0ZXJuKSB7XG5cdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPGlubmVyPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lcjsgfSk7XG5cdFx0cmV0dXJuIFJlZ0V4cCgvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopLy5zb3VyY2UgKyAnKD86JyArIHBhdHRlcm4gKyAnKScpO1xuXHR9XG5cblxuXHR2YXIgdGFibGVDZWxsID0gLyg/OlxcXFwufGBgKD86W15gXFxyXFxuXXxgKD8hYCkpK2BgfGBbXmBcXHJcXG5dK2B8W15cXFxcfFxcclxcbmBdKSsvLnNvdXJjZTtcblx0dmFyIHRhYmxlUm93ID0gL1xcfD9fXyg/OlxcfF9fKStcXHw/KD86KD86XFxufFxcclxcbj8pfCg/IVtcXHNcXFNdKSkvLnNvdXJjZS5yZXBsYWNlKC9fXy9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0YWJsZUNlbGw7IH0pO1xuXHR2YXIgdGFibGVMaW5lID0gL1xcfD9bIFxcdF0qOj8tezMsfTo/WyBcXHRdKig/OlxcfFsgXFx0XSo6Py17Myx9Oj9bIFxcdF0qKStcXHw/KD86XFxufFxcclxcbj8pLy5zb3VyY2U7XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMubWFya2Rvd24gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7fSk7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmtkb3duJywgJ3Byb2xvZycsIHtcblx0XHQnZnJvbnQtbWF0dGVyLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogLyheKD86XFxzKltcXHJcXG5dKT8pLS0tKD8hLilbXFxzXFxTXSo/W1xcclxcbl0tLS0oPyEuKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eLS0tfC0tLSQvLFxuXHRcdFx0XHQnZnJvbnQtbWF0dGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXFMrKD86XFxzK1xcUyspKi8sXG5cdFx0XHRcdFx0YWxpYXM6IFsneWFtbCcsICdsYW5ndWFnZS15YW1sJ10sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMueWFtbFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnYmxvY2txdW90ZSc6IHtcblx0XHRcdC8vID4gLi4uXG5cdFx0XHRwYXR0ZXJuOiAvXj4oPzpbXFx0IF0qPikqL20sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3RhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHRhYmxlUm93ICsgdGFibGVMaW5lICsgJyg/OicgKyB0YWJsZVJvdyArICcpKicsICdtJyksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RhYmxlLWRhdGEtcm93cyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oJyArIHRhYmxlUm93ICsgdGFibGVMaW5lICsgJykoPzonICsgdGFibGVSb3cgKyAnKSokJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0YWJsZS1kYXRhJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVDZWxsKSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3RhYmxlLWxpbmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKCcgKyB0YWJsZVJvdyArICcpJyArIHRhYmxlTGluZSArICckJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHx8Oj8tezMsfTo/L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3RhYmxlLWhlYWRlci1yb3cnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHRhYmxlUm93ICsgJyQnKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0YWJsZS1oZWFkZXInOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWJsZUNlbGwpLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb2RlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBQcmVmaXhlZCBieSA0IHNwYWNlcyBvciAxIHRhYiBhbmQgcHJlY2VkZWQgYnkgYW4gZW1wdHkgbGluZVxuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxuKVsgXFx0XSpcXG58KD86XnxcXHJcXG4/KVsgXFx0XSpcXHJcXG4/KSg/OiB7NH18XFx0KS4rKD86KD86XFxufFxcclxcbj8pKD86IHs0fXxcXHQpLispKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGBgYG9wdGlvbmFsIGxhbmd1YWdlXG5cdFx0XHRcdC8vIGNvZGUgYmxvY2tcblx0XHRcdFx0Ly8gYGBgXG5cdFx0XHRcdHBhdHRlcm46IC9eYGBgW1xcc1xcU10qP15gYGAkL20sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2NvZGUtYmxvY2snOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihgYGAuKig/OlxcbnxcXHJcXG4/KSlbXFxzXFxTXSs/KD89KD86XFxufFxcclxcbj8pXmBgYCQpL20sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnY29kZS1sYW5ndWFnZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKGBgYCkuKy8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvYGBgL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQndGl0bGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHRpdGxlIDFcblx0XHRcdFx0Ly8gPT09PT09PVxuXG5cdFx0XHRcdC8vIHRpdGxlIDJcblx0XHRcdFx0Ly8gLS0tLS0tLVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFxTLiooPzpcXG58XFxyXFxuPykoPzo9PSt8LS0rKSg/PVsgXFx0XSokKS9tLFxuXHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdHB1bmN0dWF0aW9uOiAvPT0rJHwtLSskL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyAjIHRpdGxlIDFcblx0XHRcdFx0Ly8gIyMjIyMjIHRpdGxlIDZcblx0XHRcdFx0cGF0dGVybjogLyheXFxzKikjLisvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRwdW5jdHVhdGlvbjogL14jK3wjKyQvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdocic6IHtcblx0XHRcdC8vICoqKlxuXHRcdFx0Ly8gLS0tXG5cdFx0XHQvLyAqICogKlxuXHRcdFx0Ly8gLS0tLS0tLS0tLS1cblx0XHRcdHBhdHRlcm46IC8oXlxccyopKFsqLV0pKD86W1xcdCBdKlxcMil7Mix9KD89XFxzKiQpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdsaXN0Jzoge1xuXHRcdFx0Ly8gKiBpdGVtXG5cdFx0XHQvLyArIGl0ZW1cblx0XHRcdC8vIC0gaXRlbVxuXHRcdFx0Ly8gMS4gaXRlbVxuXHRcdFx0cGF0dGVybjogLyheXFxzKikoPzpbKistXXxcXGQrXFwuKSg/PVtcXHQgXS4pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCd1cmwtcmVmZXJlbmNlJzoge1xuXHRcdFx0Ly8gW2lkXTogaHR0cDovL2V4YW1wbGUuY29tIFwiT3B0aW9uYWwgdGl0bGVcIlxuXHRcdFx0Ly8gW2lkXTogaHR0cDovL2V4YW1wbGUuY29tICdPcHRpb25hbCB0aXRsZSdcblx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSAoT3B0aW9uYWwgdGl0bGUpXG5cdFx0XHQvLyBbaWRdOiA8aHR0cDovL2V4YW1wbGUuY29tPiBcIk9wdGlvbmFsIHRpdGxlXCJcblx0XHRcdHBhdHRlcm46IC8hP1xcW1teXFxdXStcXF06W1xcdCBdKyg/OlxcUyt8PCg/OlxcXFwufFtePlxcXFxdKSs+KSg/OltcXHQgXSsoPzpcIig/OlxcXFwufFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxdKSonfFxcKCg/OlxcXFwufFteKVxcXFxdKSpcXCkpKT8vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXighP1xcWylbXlxcXV0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvKD86XCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwifCcoPzpcXFxcLnxbXidcXFxcXSkqJ3xcXCgoPzpcXFxcLnxbXilcXFxcXSkqXFwpKSQvLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXltcXFtcXF0hOl18Wzw+XS9cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ3VybCdcblx0XHR9LFxuXHRcdCdib2xkJzoge1xuXHRcdFx0Ly8gKipzdHJvbmcqKlxuXHRcdFx0Ly8gX19zdHJvbmdfX1xuXG5cdFx0XHQvLyBhbGxvdyBvbmUgbmVzdGVkIGluc3RhbmNlIG9mIGl0YWxpYyB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC9cXGJfXyg/Oig/IV8pPGlubmVyPnxfKD86KD8hXyk8aW5uZXI+KStfKStfX1xcYnxcXCpcXCooPzooPyFcXCopPGlubmVyPnxcXCooPzooPyFcXCopPGlubmVyPikrXFwqKStcXCpcXCovLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXi4uKVtcXHNcXFNdKyg/PS4uJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKlxcKnxfXy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdpdGFsaWMnOiB7XG5cdFx0XHQvLyAqZW0qXG5cdFx0XHQvLyBfZW1fXG5cblx0XHRcdC8vIGFsbG93IG9uZSBuZXN0ZWQgaW5zdGFuY2Ugb2YgYm9sZCB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC9cXGJfKD86KD8hXyk8aW5uZXI+fF9fKD86KD8hXyk8aW5uZXI+KStfXykrX1xcYnxcXCooPzooPyFcXCopPGlubmVyPnxcXCpcXCooPzooPyFcXCopPGlubmVyPikrXFwqXFwqKStcXCovLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXi4pW1xcc1xcU10rKD89LiQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKl9dL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3N0cmlrZSc6IHtcblx0XHRcdC8vIH5+c3RyaWtlIHRocm91Z2h+flxuXHRcdFx0Ly8gfnN0cmlrZX5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoLyh+fj8pKD86KD8hfik8aW5uZXI+KStcXDIvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXn5+PylbXFxzXFxTXSsoPz1cXDEkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvfn4/L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvZGUtc25pcHBldCc6IHtcblx0XHRcdC8vIGBjb2RlYFxuXHRcdFx0Ly8gYGBjb2RlYGBcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxgXSkoPzpgYFteYFxcclxcbl0rKD86YFteYFxcclxcbl0rKSpgYCg/IWApfGBbXmBcXHJcXG5dK2AoPyFgKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiBbJ2NvZGUnLCAna2V5d29yZCddXG5cdFx0fSxcblx0XHQndXJsJzoge1xuXHRcdFx0Ly8gW2V4YW1wbGVdKGh0dHA6Ly9leGFtcGxlLmNvbSBcIk9wdGlvbmFsIHRpdGxlXCIpXG5cdFx0XHQvLyBbZXhhbXBsZV1baWRdXG5cdFx0XHQvLyBbZXhhbXBsZV0gW2lkXVxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC8hP1xcWyg/Oig/IVxcXSk8aW5uZXI+KStcXF0oPzpcXChbXlxccyldKyg/OltcXHQgXStcIig/OlxcXFwufFteXCJcXFxcXSkqXCIpP1xcKXxbIFxcdF0/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvcGVyYXRvcic6IC9eIS8sXG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcWylbXlxcXV0rKD89XFxdKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFxdWyBcXHRdP1xcWylbXlxcXV0rKD89XFxdJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3VybCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXF1cXCgpW15cXHMpXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0rKVwiKD86XFxcXC58W15cIlxcXFxdKSpcIig/PVxcKSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFsndXJsJywgJ2JvbGQnLCAnaXRhbGljJywgJ3N0cmlrZSddLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0Wyd1cmwnLCAnYm9sZCcsICdpdGFsaWMnLCAnc3RyaWtlJywgJ2NvZGUtc25pcHBldCddLmZvckVhY2goZnVuY3Rpb24gKGluc2lkZSkge1xuXHRcdFx0aWYgKHRva2VuICE9PSBpbnNpZGUpIHtcblx0XHRcdFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duW3Rva2VuXS5pbnNpZGUuY29udGVudC5pbnNpZGVbaW5zaWRlXSA9IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93bltpbnNpZGVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09ICdtYXJrZG93bicgJiYgZW52Lmxhbmd1YWdlICE9PSAnbWQnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gd2Fsa1Rva2Vucyh0b2tlbnMpIHtcblx0XHRcdGlmICghdG9rZW5zIHx8IHR5cGVvZiB0b2tlbnMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ2NvZGUnKSB7XG5cdFx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8qXG5cdFx0XHRcdCAqIEFkZCB0aGUgY29ycmVjdCBgbGFuZ3VhZ2UteHh4eGAgY2xhc3MgdG8gdGhpcyBjb2RlIGJsb2NrLiBLZWVwIGluIG1pbmQgdGhhdCB0aGUgYGNvZGUtbGFuZ3VhZ2VgIHRva2VuXG5cdFx0XHRcdCAqIGlzIG9wdGlvbmFsLiBCdXQgdGhlIGdyYW1tYXIgaXMgZGVmaW5lZCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGNhc2Ugd2UgaGF2ZSB0byBoYW5kbGU6XG5cdFx0XHRcdCAqXG5cdFx0XHRcdCAqIHRva2VuLmNvbnRlbnQgPSBbXG5cdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cInB1bmN0dWF0aW9uXCI+YGBgPC9zcGFuPixcblx0XHRcdFx0ICogICAgIDxzcGFuIGNsYXNzPVwiY29kZS1sYW5ndWFnZVwiPnh4eHg8L3NwYW4+LFxuXHRcdFx0XHQgKiAgICAgJ1xcbicsIC8vIGV4YWN0bHkgb25lIG5ldyBsaW5lcyAoXFxyIG9yIFxcbiBvciBcXHJcXG4pXG5cdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cImNvZGUtYmxvY2tcIj4uLi48L3NwYW4+LFxuXHRcdFx0XHQgKiAgICAgJ1xcbicsIC8vIGV4YWN0bHkgb25lIG5ldyBsaW5lcyBhZ2FpblxuXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJwdW5jdHVhdGlvblwiPmBgYDwvc3Bhbj5cblx0XHRcdFx0ICogXTtcblx0XHRcdFx0ICovXG5cblx0XHRcdFx0dmFyIGNvZGVMYW5nID0gdG9rZW4uY29udGVudFsxXTtcblx0XHRcdFx0dmFyIGNvZGVCbG9jayA9IHRva2VuLmNvbnRlbnRbM107XG5cblx0XHRcdFx0aWYgKGNvZGVMYW5nICYmIGNvZGVCbG9jayAmJlxuXHRcdFx0XHRcdGNvZGVMYW5nLnR5cGUgPT09ICdjb2RlLWxhbmd1YWdlJyAmJiBjb2RlQmxvY2sudHlwZSA9PT0gJ2NvZGUtYmxvY2snICYmXG5cdFx0XHRcdFx0dHlwZW9mIGNvZGVMYW5nLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cblx0XHRcdFx0XHQvLyB0aGlzIG1pZ2h0IGJlIGEgbGFuZ3VhZ2UgdGhhdCBQcmlzbSBkb2VzIG5vdCBzdXBwb3J0XG5cblx0XHRcdFx0XHQvLyBkbyBzb21lIHJlcGxhY2VtZW50cyB0byBzdXBwb3J0IEMrKywgQyMsIGFuZCBGI1xuXHRcdFx0XHRcdHZhciBsYW5nID0gY29kZUxhbmcuY29udGVudC5yZXBsYWNlKC9cXGIjL2csICdzaGFycCcpLnJlcGxhY2UoL1xcYlxcK1xcKy9nLCAncHAnKTtcblx0XHRcdFx0XHQvLyBvbmx5IHVzZSB0aGUgZmlyc3Qgd29yZFxuXHRcdFx0XHRcdGxhbmcgPSAoL1thLXpdW1xcdy1dKi9pLmV4ZWMobGFuZykgfHwgWycnXSlbMF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHR2YXIgYWxpYXMgPSAnbGFuZ3VhZ2UtJyArIGxhbmc7XG5cblx0XHRcdFx0XHQvLyBhZGQgYWxpYXNcblx0XHRcdFx0XHRpZiAoIWNvZGVCbG9jay5hbGlhcykge1xuXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzID0gW2FsaWFzXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjb2RlQmxvY2suYWxpYXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRjb2RlQmxvY2suYWxpYXMgPSBbY29kZUJsb2NrLmFsaWFzLCBhbGlhc107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvZGVCbG9jay5hbGlhcy5wdXNoKGFsaWFzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ3dyYXAnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi50eXBlICE9PSAnY29kZS1ibG9jaycpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgY29kZUxhbmcgPSAnJztcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGVudi5jbGFzc2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0dmFyIGNscyA9IGVudi5jbGFzc2VzW2ldO1xuXHRcdFx0dmFyIG1hdGNoID0gL2xhbmd1YWdlLSguKykvLmV4ZWMoY2xzKTtcblx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRjb2RlTGFuZyA9IG1hdGNoWzFdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tjb2RlTGFuZ107XG5cblx0XHRpZiAoIWdyYW1tYXIpIHtcblx0XHRcdGlmIChjb2RlTGFuZyAmJiBjb2RlTGFuZyAhPT0gJ25vbmUnICYmIFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlcikge1xuXHRcdFx0XHR2YXIgaWQgPSAnbWQtJyArIG5ldyBEYXRlKCkudmFsdWVPZigpICsgJy0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWUxNik7XG5cdFx0XHRcdGVudi5hdHRyaWJ1dGVzWydpZCddID0gaWQ7XG5cblx0XHRcdFx0UHJpc20ucGx1Z2lucy5hdXRvbG9hZGVyLmxvYWRMYW5ndWFnZXMoY29kZUxhbmcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR2YXIgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRcdGlmIChlbGUpIHtcblx0XHRcdFx0XHRcdGVsZS5pbm5lckhUTUwgPSBQcmlzbS5oaWdobGlnaHQoZWxlLnRleHRDb250ZW50LCBQcmlzbS5sYW5ndWFnZXNbY29kZUxhbmddLCBjb2RlTGFuZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW52LmNvbnRlbnQgPSBQcmlzbS5oaWdobGlnaHQodGV4dENvbnRlbnQoZW52LmNvbnRlbnQpLCBncmFtbWFyLCBjb2RlTGFuZyk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgdGFnUGF0dGVybiA9IFJlZ0V4cChQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5wYXR0ZXJuLnNvdXJjZSwgJ2dpJyk7XG5cblx0LyoqXG5cdCAqIEEgbGlzdCBvZiBrbm93biBlbnRpdHkgbmFtZXMuXG5cdCAqXG5cdCAqIFRoaXMgd2lsbCBhbHdheXMgYmUgaW5jb21wbGV0ZSB0byBzYXZlIHNwYWNlLiBUaGUgY3VycmVudCBsaXN0IGlzIHRoZSBvbmUgdXNlZCBieSBsb3dkYXNoJ3MgdW5lc2NhcGUgZnVuY3Rpb24uXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvMmRhMDI0YzNiNGY5OTQ3YTQ4NTE3NjM5ZGU3NTYwNDU3Y2Q0ZWM2Yy91bmVzY2FwZS5qcyNMMn1cblx0ICovXG5cdHZhciBLTk9XTl9FTlRJVFlfTkFNRVMgPSB7XG5cdFx0J2FtcCc6ICcmJyxcblx0XHQnbHQnOiAnPCcsXG5cdFx0J2d0JzogJz4nLFxuXHRcdCdxdW90JzogJ1wiJyxcblx0fTtcblxuXHQvLyBJRSAxMSBkb2Vzbid0IHN1cHBvcnQgYFN0cmluZy5mcm9tQ29kZVBvaW50YFxuXHR2YXIgZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50IHx8IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiBhIGdpdmVuIEhUTUwgc291cmNlIGNvZGUgc3RyaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gdGV4dENvbnRlbnQoaHRtbCkge1xuXHRcdC8vIHJlbW92ZSBhbGwgdGFnc1xuXHRcdHZhciB0ZXh0ID0gaHRtbC5yZXBsYWNlKHRhZ1BhdHRlcm4sICcnKTtcblxuXHRcdC8vIGRlY29kZSBrbm93biBlbnRpdGllc1xuXHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoLyYoXFx3ezEsOH18I3g/W1xcZGEtZl17MSw4fSk7L2dpLCBmdW5jdGlvbiAobSwgY29kZSkge1xuXHRcdFx0Y29kZSA9IGNvZGUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKGNvZGVbMF0gPT09ICcjJykge1xuXHRcdFx0XHR2YXIgdmFsdWU7XG5cdFx0XHRcdGlmIChjb2RlWzFdID09PSAneCcpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHBhcnNlSW50KGNvZGUuc2xpY2UoMiksIDE2KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE51bWJlcihjb2RlLnNsaWNlKDEpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmcm9tQ29kZVBvaW50KHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBrbm93biA9IEtOT1dOX0VOVElUWV9OQU1FU1tjb2RlXTtcblx0XHRcdFx0aWYgKGtub3duKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGtub3duO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gdW5hYmxlIHRvIGRlY29kZVxuXHRcdFx0XHRyZXR1cm4gbTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB0ZXh0O1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1kID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duO1xuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3LnN0YXRhLmNvbS9tYW51YWxzL20ucGRmXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgb3JnVHlwZSA9IC9cXGIoPzooPzpjb2x8cm93KT92ZWN0b3J8bWF0cml4fHNjYWxhcilcXGIvLnNvdXJjZTtcblx0dmFyIHR5cGUgPSAvXFxidm9pZFxcYnw8b3JnPnxcXGIoPzpjb21wbGV4fG51bWVyaWN8cG9pbnRlcig/OlxccypcXChbXigpXSpcXCkpP3xyZWFsfHN0cmluZ3woPzpjbGFzc3xzdHJ1Y3QpXFxzK1xcdyt8dHJhbnNtb3JwaGljKSg/Olxccyo8b3JnPik/Ly5zb3VyY2Vcblx0XHQucmVwbGFjZSgvPG9yZz4vZywgb3JnVHlwZSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1hdGEgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXCpcXC8vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCJ8W1x1MjAxOGAnXVwiLio/XCJbXHUyMDE5YCddLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZXh0ZW5kc3xzdHJ1Y3QpXFxzKylcXHcrKD89XFxzKig/Olxce3xcXGJleHRlbmRzXFxiKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3R5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAodHlwZSksXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldLyxcblx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86Y2xhc3N8ZnVuY3Rpb258c3RydWN0fHZvaWQpXFxiL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2xhc3N8Y29udGludWV8ZG98ZWxzZXxlbmR8ZXh0ZW5kc3xleHRlcm5hbHxmaW5hbHxmb3J8ZnVuY3Rpb258Z290b3xpZnxwcmFnbWF8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzdGF0aWN8c3RydWN0fHVuc2V0fHVudXNlZHx2ZXJzaW9ufHZpcnR1YWx8d2hpbGUpXFxiLyxcblx0XHQnY29uc3RhbnQnOiAvXFxiTlVMTFxcYi8sXG5cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pKD86XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP3xcXGRbYS1mMC05XSooPzpcXC5bYS1mMC05XSspP3hbKy1dP1xcZCspaT8oPyFbXFx3Ll0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbWlzc2luZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dKSg/OlxcLlthLXpdPykoPyFbXFx3Ll0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXG5cdFx0J29wZXJhdG9yJzogL1xcLlxcLnxcXCtcXCt8LS18JiZ8XFx8XFx8fDo/KD86WyE9PD5dPXxbK1xcLSovXjw+Jnw6XSl8WyE/PVxcXFwjXHUyMDE5YCddLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDsuXS9cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubWF0bGFiID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHQvJVxce1tcXHNcXFNdKj9cXH0lLyxcblx0XHQvJS4rL1xuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cXEInKD86Jyd8W14nXFxyXFxuXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdC8vIEZJWE1FIFdlIGNvdWxkIGhhbmRsZSBpbWFnaW5hcnkgbnVtYmVycyBhcyBhIHdob2xlXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspPyg/Oltpal0pP3xcXGJbaWpdXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86TmFOfGJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZWxzZXxlbHNlaWZ8ZW5kfGZvcnxmdW5jdGlvbnxpZnxpbmZ8b3RoZXJ3aXNlfHBhcmZvcnxwYXVzZXxwaXxyZXR1cm58c3dpdGNofHRyeXx3aGlsZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1cXHMqXFwoKS8sXG5cdCdvcGVyYXRvcic6IC9cXC4/WypeXFwvXFxcXCddfFsrXFwtOkBdfFs8Pj1+XT0/fCYmP3xcXHxcXHw/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1xcLnszfXxbLiw7XFxbXFxdKCl7fSFdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXl3b3JkcyA9IC9cXGIoPzphYm91dHxhbmR8YW5pbWF0ZXxhc3xhdHxhdHRyaWJ1dGVzfGJ5fGNhc2V8Y2F0Y2h8Y29sbGVjdHxjb250aW51ZXxjb29yZHN5c3xkb3xlbHNlfGV4aXR8Zm58Zm9yfGZyb218ZnVuY3Rpb258Z2xvYmFsfGlmfGlufGxvY2FsfG1hY3Jvc2NyaXB0fG1hcHBlZHxtYXh8bm90fG9mfG9mZnxvbnxvcnxwYXJhbWV0ZXJzfHBlcnNpc3RlbnR8cGx1Z2lufHJjbWVudXxyZXR1cm58cm9sbG91dHxzZXR8c3RydWN0fHRoZW58dGhyb3d8dG98dG9vbHx0cnl8dW5kb3x1dGlsaXR5fHdoZW58d2hlcmV8d2hpbGV8d2l0aClcXGIvaTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5tYXhzY3JpcHQgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKXwtLS4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlwiXFxcXEBdKSg/OlwiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCJ8QFwiW15cIl0qXCIpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdwYXRoJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJCg/OltcXHcvXFxcXC4qP118J1teJ10qJykqLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cblx0XHQnZnVuY3Rpb24tY2FsbCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0JygoPzonICsgKFxuXHRcdFx0XHRcdC8vIHN0YXJ0IG9mIGxpbmVcblx0XHRcdFx0XHQvXi8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIG9wZXJhdG9ycyBhbmQgb3RoZXIgbGFuZ3VhZ2UgY29uc3RydWN0c1xuXHRcdFx0XHRcdC9bOz08PitcXC0qL14oe1xcW10vLnNvdXJjZSArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQvLyBrZXl3b3JkcyBhcyBwYXJ0IG9mIHN0YXRlbWVudHNcblx0XHRcdFx0XHQvXFxiKD86YW5kfGJ5fGNhc2V8Y2F0Y2h8Y29sbGVjdHxkb3xlbHNlfGlmfGlufG5vdHxvcnxyZXR1cm58dGhlbnx0b3x0cnl8d2hlcmV8d2hpbGV8d2l0aClcXGIvLnNvdXJjZVxuXHRcdFx0XHQpICsgJylbIFxcdF0qKScgK1xuXG5cdFx0XHRcdCcoPyEnICsga2V5d29yZHMuc291cmNlICsgJyknICsgL1thLXpfXVxcdypcXGIvLnNvdXJjZSArXG5cblx0XHRcdFx0Jyg/PVsgXFx0XSooPzonICsgKFxuXHRcdFx0XHRcdC8vIHZhcmlhYmxlXG5cdFx0XHRcdFx0Jyg/IScgKyBrZXl3b3Jkcy5zb3VyY2UgKyAnKScgKyAvW2Etel9dLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCd8JyArXG5cdFx0XHRcdFx0Ly8gbnVtYmVyXG5cdFx0XHRcdFx0L1xcZHwtXFwuP1xcZC8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIG90aGVyIGV4cHJlc3Npb25zIG9yIGxpdGVyYWxzXG5cdFx0XHRcdFx0L1soeydcIiRAIz9dLy5zb3VyY2Vcblx0XHRcdFx0KSArICcpKScsXG5cdFx0XHRcdCdpbSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmZufGZ1bmN0aW9uKVxccyspXFx3K1xcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdhcmd1bWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89OikvaSxcblx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHRcdH0sXG5cblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHRcdCd0aW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pKD86KD86KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRWREXVsrLV1cXGQrfFtMUF0pP1ttc2Z0XSkrfFxcZCs6XFxkKyg/OlxcLlxcZCopPykoPyFbXFx3LjpdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuXSkoPzooPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VFZERdWystXVxcZCt8W0xQXSk/fDB4W2EtZkEtRjAtOV0rKSg/IVtcXHcuOl0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzplfHBpKVxcYi9cblx0XHRdLFxuXG5cdFx0J2NvbnN0YW50JzogL1xcYig/OmRvbnRjb2xsZWN0fG9rfHNpbGVudFZhbHVlfHVuZGVmaW5lZHx1bnN1cHBsaWVkKVxcYi8sXG5cdFx0J2NvbG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmJsYWNrfGJsdWV8YnJvd258Z3JheXxncmVlbnxvcmFuZ2V8cmVkfHdoaXRlfHllbGxvdylcXGIvaSxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fSxcblxuXHRcdCdvcGVyYXRvcic6IC9bLSsqLzw+PSFdPT98WyZeP118Iyg/IVxcKCkvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fS46LDtdfCMoPz1cXCgpfFxcXFwkL21cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubWVsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjb2RlJzoge1xuXHRcdHBhdHRlcm46IC9gKD86XFxcXC58W15cXFxcYF0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2l0YWxpYycsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXmB8YCQvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdzdGF0ZW1lbnQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mQS1GXStcXGJ8XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrLyxcblx0J2ZsYWcnOiB7XG5cdFx0cGF0dGVybjogLy1bXlxcZFxcV11cXHcqLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxmbG9hdHxmb3J8Z2xvYmFsfGlmfGlufGludHxtYXRyaXh8cHJvY3xyZXR1cm58c3RyaW5nfHN3aXRjaHx2ZWN0b3J8d2hpbGUpXFxiLyxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbeztdKVsgXFx0XSopW2Etel9dXFx3KlxcYig/IVxccyooPzpcXC4oPyFcXC4pfFtbez1dKSl8XFxiW2Etel9dXFx3Kig/PVsgXFx0XSpcXCgpL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J3RlbnNvci1wdW5jdHVhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvPDx8Pj4vLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCdvcGVyYXRvcic6IC9cXCtbKz1dP3wtWy09XT98JiZ8XFx8XFx8fFs8Pl09P3xbKlxcLyE9XT0/fFslXl0vLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOjs/XFxbXFxdKCl7fV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubWVsWydjb2RlJ10uaW5zaWRlWydzdGF0ZW1lbnQnXS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMubWVsO1xuXG5QcmlzbS5sYW5ndWFnZXMubWVybWFpZCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyUlLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdzdHlsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKD86Y2xhc3NEZWZ8bGlua1N0eWxlfHN0eWxlKVsgXFx0XStbXFx3JC1dK1sgXFx0XSspXFx3LipbXlxccztdL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwcm9wZXJ0eSc6IC9cXGJcXHdbXFx3LV0qKD89WyBcXHRdKjopLyxcblx0XHRcdCdvcGVyYXRvcic6IC86Lyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC8sL1xuXHRcdH1cblx0fSxcblxuXHQnaW50ZXItYXJyb3ctbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogLyhbXjw+b3guPS1dKSg/Oi1bLS5dfD09KSg/IVs8Pm94Lj0tXSlbIFxcdF0qKD86XCJbXlwiXFxyXFxuXSpcInxbXlxcc1wiLj0tXSg/OlteXFxyXFxuLj0tXSpbXlxccy49LV0pPylbIFxcdF0qKD86XFwuKy0+P3wtLStbLT5dfD09K1s9Pl0pKD8hWzw+b3guPS1dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYXJyb3cnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXC4rLT4/fC0tK1stPl18PT0rWz0+XSkkLyxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH0sXG5cdFx0XHQnbGFiZWwnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHNcXFNdezJ9WyBcXHRdKilcXFMoPzpbXFxzXFxTXSpcXFMpPy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHR9LFxuXHRcdFx0J2Fycm93LWhlYWQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFxTKy8sXG5cdFx0XHRcdGFsaWFzOiBbJ2Fycm93JywgJ29wZXJhdG9yJ11cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0J2Fycm93JzogW1xuXHRcdC8vIFRoaXMgbWlnaHQgbG9vayBjb21wbGV4IGJ1dCBpdCByZWFsbHkgaXNuJ3QuXG5cdFx0Ly8gVGhlcmUgYXJlIG1hbnkgcG9zc2libGUgYXJyb3dzIChzZWUgdGVzdHMpIGFuZCBpdCdzIGltcG9zc2libGUgdG8gZml0IGFsbCBvZiB0aGVtIGludG8gb25lIHBhdHRlcm4uIFRoZVxuXHRcdC8vIHByb2JsZW0gaXMgdGhhdCB3ZSBvbmx5IGhhdmUgb25lIGxvb2tiZWhpbmQgcGVyIHBhdHRlcm4uIEhvd2V2ZXIsIHdlIGNhbm5vdCBkaXNhbGxvdyB0b28gbWFueSBhcnJvd1xuXHRcdC8vIGNoYXJhY3RlcnMgaW4gdGhlIG9uZSBsb29rYmVoaW5kIGJlY2F1c2UgdGhhdCB3b3VsZCBjcmVhdGUgdG9vIG1hbnkgZmFsc2UgbmVnYXRpdmVzLiBTbyB3ZSBoYXZlIHRvIHNwbGl0IHRoZVxuXHRcdC8vIGFycm93cyBpbnRvIGRpZmZlcmVudCBwYXR0ZXJucy5cblx0XHR7XG5cdFx0XHQvLyBFUiBkaWFncmFtXG5cdFx0XHRwYXR0ZXJuOiAvKF58W157fXxvLi1dKVt8fV1bfG9dKD86LS18XFwuXFwuKVt8b11bfHtdKD8hW3t9fG8uLV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gZmxvdyBjaGFydFxuXHRcdFx0Ly8gKD86PT0rfC0tK3wtXFwuKi0pXG5cdFx0XHRwYXR0ZXJuOiAvKF58W148Pm94Lj0tXSkoPzpbPG94XSg/Oj09K3wtLSt8LVxcLiotKVs+b3hdP3woPzo9PSt8LS0rfC1cXC4qLSlbPm94XXw9PT0rfC0tLSt8LVxcListKSg/IVs8Pm94Lj0tXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBzZXF1ZW5jZSBkaWFncmFtXG5cdFx0XHRwYXR0ZXJuOiAvKF58W148PigpeC1dKSg/Oi0tPyg/Oj4+fFt4PildKSg/IVs8PigpeF0pfCg/Ojw8fFt4PChdKS0tPyg/IS0pKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGNsYXNzIGRpYWdyYW1cblx0XHRcdHBhdHRlcm46IC8oXnxbXjw+fCpvLi1dKSg/Olsqb10tLXwtLVsqb118PFxcfD8oPzotLXxcXC5cXC4pfCg/Oi0tfFxcLlxcLilcXHw/PnwtLXxcXC5cXC4pKD8hWzw+fCpvLi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRdLFxuXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W158PF0pXFx8KD86W15cXHJcXG5cInxdfFwiW15cIlxcclxcbl0qXCIpK1xcfC8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQndGV4dCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86WyhcXFt7XSt8XFxiPikoPzpbXlxcclxcblwiKClcXFtcXF17fV18XCJbXlwiXFxyXFxuXSpcIikrKD86WylcXF19XSt8PikvLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnYW5ub3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvPDwoPzphYnN0cmFjdHxjaG9pY2V8ZW51bWVyYXRpb258Zm9ya3xpbnRlcmZhY2V8am9pbnxzZXJ2aWNlKT4+fFxcW1xcWyg/OmNob2ljZXxmb3JrfGpvaW4pXFxdXFxdL2ksXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cblx0J2tleXdvcmQnOiBbXG5cdFx0Ly8gVGhpcyBsYW5ndWFnZSBoYXMgYm90aCBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FzZS1pbnNlbnNpdGl2ZSBrZXl3b3Jkc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86YWN0aW9ufGNhbGxiYWNrfGNsYXNzfGNsYXNzRGVmfGNsYXNzRGlhZ3JhbXxjbGlja3xkaXJlY3Rpb258ZXJEaWFncmFtfGZsb3djaGFydHxnYW50dHxnaXRHcmFwaHxncmFwaHxqb3VybmV5fGxpbmt8bGlua1N0eWxlfHBpZXxyZXF1aXJlbWVudERpYWdyYW18c2VxdWVuY2VEaWFncmFtfHN0YXRlRGlhZ3JhbXxzdGF0ZURpYWdyYW0tdjJ8c3R5bGV8c3ViZ3JhcGgpKD8hW1xcdyQtXSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86YWN0aXZhdGV8YWx0fGFuZHxhc3xhdXRvbnVtYmVyfGRlYWN0aXZhdGV8ZWxzZXxlbmQoPzpbIFxcdF0rbm90ZSk/fGxvb3B8b3B0fHBhcnxwYXJ0aWNpcGFudHxyZWN0fHN0YXRlfG5vdGVbIFxcdF0rKD86b3ZlcnwoPzpsZWZ0fHJpZ2h0KVsgXFx0XStvZikpKD8hW1xcdyQtXSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXG5cdCdlbnRpdHknOiAvI1thLXowLTldKzsvLFxuXG5cdCdvcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcd1sgXFx0XSopJig/PVsgXFx0XSpcXHcpfDo6Onw6Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fTtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1pemFyID0ge1xuXHQnY29tbWVudCc6IC86Oi4rLyxcblx0J2tleXdvcmQnOiAvQHByb29mXFxifFxcYig/OmFjY29yZGluZ3xhZ2dyZWdhdGV8YWxsfGFuZHxhbnRvbnltfGFyZXxhc3xhc3NvY2lhdGl2aXR5fGFzc3VtZXxhc3ltbWV0cnl8YXR0cnxiZXxiZWdpbnxiZWluZ3xieXxjYW5jZWxlZHxjYXNlfGNhc2VzfGNsdXN0ZXJzP3xjb2hlcmVuY2V8Y29tbXV0YXRpdml0eXxjb21wYXRpYmlsaXR5fGNvbm5lY3RlZG5lc3N8Y29uc2lkZXJ8Y29uc2lzdGVuY3l8Y29uc3RydWN0b3JzfGNvbnRyYWRpY3Rpb258Y29ycmVjdG5lc3N8ZGVmfGRlZmZ1bmN8ZGVmaW5lfGRlZmluaXRpb25zP3xkZWZwcmVkfGRvfGRvZXN8ZW5kfGVudmlyb258ZXF1YWxzfGV4fGV4YWN0bHl8ZXhpc3RlbmNlfGZvcnxmcm9tfGZ1bmN8Z2l2ZW58aGVuY2V8aGVyZWJ5fGhvbGRzfGlkZW1wb3RlbmNlfGlkZW50aXR5fGlmZj98aW1wbGllc3xpbnZvbHV0aXZlbmVzc3xpcnJlZmxleGl2aXR5fGlzfGl0fGxldHxtZWFuc3xtb2RlfG5vbnxub3R8bm90YXRpb25zP3xub3d8b2Z8b3J8b3RoZXJ3aXNlfG92ZXJ8cGVyfHByZWR8cHJlZml4fHByb2plY3Rpdml0eXxwcm9vZnxwcm92aWRlZHxxdWF8cmVjb25zaWRlcnxyZWRlZmluZXxyZWR1Y2V8cmVkdWNpYmlsaXR5fHJlZmxleGl2aXR5fHJlZ2lzdHJhdGlvbnM/fHJlcXVpcmVtZW50c3xyZXNlcnZlfHNjaHxzY2hlbWVzP3xzZWN0aW9ufHNlbGVjdG9yfHNldHxzZXRob29kfHN0fHN0cnVjdHxzdWNofHN1cHBvc2V8c3ltbWV0cnl8c3lub255bXx0YWtlfHRoYXR8dGhlfHRoZW58dGhlb3JlbXM/fHRoZXNpc3x0aHVzfHRvfHRyYW5zaXRpdml0eXx1bmlxdWVuZXNzfHZvY2FidWxhcig/Omllc3x5KXx3aGVufHdoZXJlfHdpdGh8d3J0KVxcYi8sXG5cdCdwYXJhbWV0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/OjEwfFxcZCkvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXGJcXHcrKD89OikvLFxuXHQnbnVtYmVyJzogLyg/OlxcYnwtKVxcZCtcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwuXFwuXFwufC0+fCZ8XFwuPz0vLFxuXHQncHVuY3R1YXRpb24nOiAvXFwoI3wjXFwpfFssOjtcXFtcXF0oKXt9XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgb3BlcmF0b3JzID0gW1xuXHRcdC8vIHF1ZXJ5IGFuZCBwcm9qZWN0aW9uXG5cdFx0JyRlcScsICckZ3QnLCAnJGd0ZScsICckaW4nLCAnJGx0JywgJyRsdGUnLCAnJG5lJywgJyRuaW4nLCAnJGFuZCcsICckbm90JywgJyRub3InLCAnJG9yJyxcblx0XHQnJGV4aXN0cycsICckdHlwZScsICckZXhwcicsICckanNvblNjaGVtYScsICckbW9kJywgJyRyZWdleCcsICckdGV4dCcsICckd2hlcmUnLCAnJGdlb0ludGVyc2VjdHMnLFxuXHRcdCckZ2VvV2l0aGluJywgJyRuZWFyJywgJyRuZWFyU3BoZXJlJywgJyRhbGwnLCAnJGVsZW1NYXRjaCcsICckc2l6ZScsICckYml0c0FsbENsZWFyJywgJyRiaXRzQWxsU2V0Jyxcblx0XHQnJGJpdHNBbnlDbGVhcicsICckYml0c0FueVNldCcsICckY29tbWVudCcsICckZWxlbU1hdGNoJywgJyRtZXRhJywgJyRzbGljZScsXG5cblx0XHQvLyB1cGRhdGVcblx0XHQnJGN1cnJlbnREYXRlJywgJyRpbmMnLCAnJG1pbicsICckbWF4JywgJyRtdWwnLCAnJHJlbmFtZScsICckc2V0JywgJyRzZXRPbkluc2VydCcsICckdW5zZXQnLFxuXHRcdCckYWRkVG9TZXQnLCAnJHBvcCcsICckcHVsbCcsICckcHVzaCcsICckcHVsbEFsbCcsICckZWFjaCcsICckcG9zaXRpb24nLCAnJHNsaWNlJywgJyRzb3J0JywgJyRiaXQnLFxuXG5cdFx0Ly8gYWdncmVnYXRpb24gcGlwZWxpbmUgc3RhZ2VzXG5cdFx0JyRhZGRGaWVsZHMnLCAnJGJ1Y2tldCcsICckYnVja2V0QXV0bycsICckY29sbFN0YXRzJywgJyRjb3VudCcsICckY3VycmVudE9wJywgJyRmYWNldCcsICckZ2VvTmVhcicsXG5cdFx0JyRncmFwaExvb2t1cCcsICckZ3JvdXAnLCAnJGluZGV4U3RhdHMnLCAnJGxpbWl0JywgJyRsaXN0TG9jYWxTZXNzaW9ucycsICckbGlzdFNlc3Npb25zJywgJyRsb29rdXAnLFxuXHRcdCckbWF0Y2gnLCAnJG1lcmdlJywgJyRvdXQnLCAnJHBsYW5DYWNoZVN0YXRzJywgJyRwcm9qZWN0JywgJyRyZWRhY3QnLCAnJHJlcGxhY2VSb290JywgJyRyZXBsYWNlV2l0aCcsXG5cdFx0JyRzYW1wbGUnLCAnJHNldCcsICckc2tpcCcsICckc29ydCcsICckc29ydEJ5Q291bnQnLCAnJHVuaW9uV2l0aCcsICckdW5zZXQnLCAnJHVud2luZCcsICckc2V0V2luZG93RmllbGRzJyxcblxuXHRcdC8vIGFnZ3JlZ2F0aW9uIHBpcGVsaW5lIG9wZXJhdG9yc1xuXHRcdCckYWJzJywgJyRhY2N1bXVsYXRvcicsICckYWNvcycsICckYWNvc2gnLCAnJGFkZCcsICckYWRkVG9TZXQnLCAnJGFsbEVsZW1lbnRzVHJ1ZScsICckYW5kJyxcblx0XHQnJGFueUVsZW1lbnRUcnVlJywgJyRhcnJheUVsZW1BdCcsICckYXJyYXlUb09iamVjdCcsICckYXNpbicsICckYXNpbmgnLCAnJGF0YW4nLCAnJGF0YW4yJyxcblx0XHQnJGF0YW5oJywgJyRhdmcnLCAnJGJpbmFyeVNpemUnLCAnJGJzb25TaXplJywgJyRjZWlsJywgJyRjbXAnLCAnJGNvbmNhdCcsICckY29uY2F0QXJyYXlzJywgJyRjb25kJyxcblx0XHQnJGNvbnZlcnQnLCAnJGNvcycsICckZGF0ZUZyb21QYXJ0cycsICckZGF0ZVRvUGFydHMnLCAnJGRhdGVGcm9tU3RyaW5nJywgJyRkYXRlVG9TdHJpbmcnLCAnJGRheU9mTW9udGgnLFxuXHRcdCckZGF5T2ZXZWVrJywgJyRkYXlPZlllYXInLCAnJGRlZ3JlZXNUb1JhZGlhbnMnLCAnJGRpdmlkZScsICckZXEnLCAnJGV4cCcsICckZmlsdGVyJywgJyRmaXJzdCcsXG5cdFx0JyRmbG9vcicsICckZnVuY3Rpb24nLCAnJGd0JywgJyRndGUnLCAnJGhvdXInLCAnJGlmTnVsbCcsICckaW4nLCAnJGluZGV4T2ZBcnJheScsICckaW5kZXhPZkJ5dGVzJyxcblx0XHQnJGluZGV4T2ZDUCcsICckaXNBcnJheScsICckaXNOdW1iZXInLCAnJGlzb0RheU9mV2VlaycsICckaXNvV2VlaycsICckaXNvV2Vla1llYXInLCAnJGxhc3QnLFxuXHRcdCckbGFzdCcsICckbGV0JywgJyRsaXRlcmFsJywgJyRsbicsICckbG9nJywgJyRsb2cxMCcsICckbHQnLCAnJGx0ZScsICckbHRyaW0nLCAnJG1hcCcsICckbWF4Jyxcblx0XHQnJG1lcmdlT2JqZWN0cycsICckbWV0YScsICckbWluJywgJyRtaWxsaXNlY29uZCcsICckbWludXRlJywgJyRtb2QnLCAnJG1vbnRoJywgJyRtdWx0aXBseScsICckbmUnLFxuXHRcdCckbm90JywgJyRvYmplY3RUb0FycmF5JywgJyRvcicsICckcG93JywgJyRwdXNoJywgJyRyYWRpYW5zVG9EZWdyZWVzJywgJyRyYW5nZScsICckcmVkdWNlJyxcblx0XHQnJHJlZ2V4RmluZCcsICckcmVnZXhGaW5kQWxsJywgJyRyZWdleE1hdGNoJywgJyRyZXBsYWNlT25lJywgJyRyZXBsYWNlQWxsJywgJyRyZXZlcnNlQXJyYXknLCAnJHJvdW5kJyxcblx0XHQnJHJ0cmltJywgJyRzZWNvbmQnLCAnJHNldERpZmZlcmVuY2UnLCAnJHNldEVxdWFscycsICckc2V0SW50ZXJzZWN0aW9uJywgJyRzZXRJc1N1YnNldCcsICckc2V0VW5pb24nLFxuXHRcdCckc2l6ZScsICckc2luJywgJyRzbGljZScsICckc3BsaXQnLCAnJHNxcnQnLCAnJHN0ZERldlBvcCcsICckc3RkRGV2U2FtcCcsICckc3RyY2FzZWNtcCcsICckc3RyTGVuQnl0ZXMnLFxuXHRcdCckc3RyTGVuQ1AnLCAnJHN1YnN0cicsICckc3Vic3RyQnl0ZXMnLCAnJHN1YnN0ckNQJywgJyRzdWJ0cmFjdCcsICckc3VtJywgJyRzd2l0Y2gnLCAnJHRhbicsXG5cdFx0JyR0b0Jvb2wnLCAnJHRvRGF0ZScsICckdG9EZWNpbWFsJywgJyR0b0RvdWJsZScsICckdG9JbnQnLCAnJHRvTG9uZycsICckdG9PYmplY3RJZCcsICckdG9TdHJpbmcnLFxuXHRcdCckdG9Mb3dlcicsICckdG9VcHBlcicsICckdHJpbScsICckdHJ1bmMnLCAnJHR5cGUnLCAnJHdlZWsnLCAnJHllYXInLCAnJHppcCcsICckY291bnQnLCAnJGRhdGVBZGQnLFxuXHRcdCckZGF0ZURpZmYnLCAnJGRhdGVTdWJ0cmFjdCcsICckZGF0ZVRydW5jJywgJyRnZXRGaWVsZCcsICckcmFuZCcsICckc2FtcGxlUmF0ZScsICckc2V0RmllbGQnLCAnJHVuc2V0RmllbGQnLFxuXG5cdFx0Ly8gYWdncmVnYXRpb24gcGlwZWxpbmUgcXVlcnkgbW9kaWZpZXJzXG5cdFx0JyRjb21tZW50JywgJyRleHBsYWluJywgJyRoaW50JywgJyRtYXgnLCAnJG1heFRpbWVNUycsICckbWluJywgJyRvcmRlcmJ5JywgJyRxdWVyeScsXG5cdFx0JyRyZXR1cm5LZXknLCAnJHNob3dEaXNrTG9jJywgJyRuYXR1cmFsJyxcblx0XTtcblxuXHR2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9IFtcblx0XHQnT2JqZWN0SWQnLFxuXHRcdCdDb2RlJyxcblx0XHQnQmluRGF0YScsXG5cdFx0J0RCUmVmJyxcblx0XHQnVGltZXN0YW1wJyxcblx0XHQnTnVtYmVyTG9uZycsXG5cdFx0J051bWJlckRlY2ltYWwnLFxuXHRcdCdNYXhLZXknLFxuXHRcdCdNaW5LZXknLFxuXHRcdCdSZWdFeHAnLFxuXHRcdCdJU09EYXRlJyxcblx0XHQnVVVJRCcsXG5cdF07XG5cblx0b3BlcmF0b3JzID0gb3BlcmF0b3JzLm1hcChmdW5jdGlvbiAob3BlcmF0b3IpIHtcblx0XHRyZXR1cm4gb3BlcmF0b3IucmVwbGFjZSgnJCcsICdcXFxcJCcpO1xuXHR9KTtcblxuXHR2YXIgb3BlcmF0b3JzU291cmNlID0gJyg/OicgKyBvcGVyYXRvcnMuam9pbignfCcpICsgJylcXFxcYic7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1vbmdvZGIgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge30pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21vbmdvZGInLCAnc3RyaW5nJywge1xuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPzooW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKSg/PVxccyo6KS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiBSZWdFeHAoJ14oW1xcJ1wiXSk/JyArIG9wZXJhdG9yc1NvdXJjZSArICcoPzpcXFxcMSk/JCcpXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMubW9uZ29kYi5zdHJpbmcuaW5zaWRlID0ge1xuXHRcdHVybDoge1xuXHRcdFx0Ly8gdXJsIHBhdHRlcm5cblx0XHRcdHBhdHRlcm46IC9odHRwcz86XFwvXFwvWy1cXHdAOiUuK34jPV17MSwyNTZ9XFwuW2EtejAtOSgpXXsxLDZ9XFxiWy1cXHcoKUA6JSsufiM/Ji89XSovaSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0ZW50aXR5OiB7XG5cdFx0XHQvLyBpcHY0XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86KD86WzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLil7M30oPzpbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFxiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtb25nb2RiJywgJ2NvbnN0YW50Jywge1xuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdcXFxcYig/OicgKyBidWlsdGluRnVuY3Rpb25zLmpvaW4oJ3wnKSArICcpXFxcXGInKSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5tb25rZXkgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9eI1JlbVxcc1tcXHNcXFNdKj9eI0VuZHwnLisvaW0sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J3ByZXByb2Nlc3Nvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0J3R5cGUtY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiWz8lIyRdLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLygoPzpcXC5cXC4pPykoPzooPzpcXGJ8XFxCLVxcLj98XFxCXFwuKVxcZCsoPzooPyFcXC5cXC4pXFwuXFxkKik/fFxcJFtcXGRhLWZdKykvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OkFic3RyYWN0fEFycmF5fEJvb2x8Q2FzZXxDYXRjaHxDbGFzc3xDb25zdHxDb250aW51ZXxEZWZhdWx0fEVhY2hpbnxFbHNlfEVsc2VJZnxFbmR8RW5kSWZ8RXhpdHxFeHRlbmRzfEV4dGVybnxGYWxzZXxGaWVsZHxGaW5hbHxGbG9hdHxGb3J8Rm9yZXZlcnxGdW5jdGlvbnxHbG9iYWx8SWZ8SW1wbGVtZW50c3xJbXBvcnR8SW5saW5lfEludHxJbnRlcmZhY2V8TG9jYWx8TWV0aG9kfE1vZHVsZXxOZXd8TmV4dHxOdWxsfE9iamVjdHxQcml2YXRlfFByb3BlcnR5fFB1YmxpY3xSZXBlYXR8UmV0dXJufFNlbGVjdHxTZWxmfFN0ZXB8U3RyaWN0fFN0cmluZ3xTdXBlcnxUaGVufFRocm93fFRvfFRydWV8VHJ5fFVudGlsfFZvaWR8V2VuZHxXaGlsZSlcXGIvaSxcblx0J29wZXJhdG9yJzogL1xcLlxcLnw8Wz0+XT98Pj0/fDo/PXwoPzpbK1xcLSpcXC8mfnxdfFxcYig/Ok1vZHxTaGx8U2hyKVxcYik9P3xcXGIoPzpBbmR8Tm90fE9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOjsoKVxcW1xcXV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdCA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKi8sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLydbXiddKid8XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDFcXF0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyNcXHtbXnt9XSpcXH0vLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vb25zY3JpcHQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXiNcXHspW1xcc1xcU10rKD89XFx9KS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVvd1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvI1xce3xcXH0vLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XSxcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xleHRlbmRzKVsgXFx0XSspXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBjbGFzcy1saWtlIG5hbWVzIHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlclxuXHRcdC9cXGJbQS1aXVxcdyovXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmNsYXNzfGNvbnRpbnVlfGRvfGVsc2V8ZWxzZWlmfGV4cG9ydHxleHRlbmRzfGZvcnxmcm9tfGlmfGltcG9ydHxpbnxsb2NhbHxuaWx8cmV0dXJufHNlbGZ8c3VwZXJ8c3dpdGNofHRoZW58dW5sZXNzfHVzaW5nfHdoZW58d2hpbGV8d2l0aClcXGIvLFxuXHQndmFyaWFibGUnOiAvQEA/XFx3Ki8sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD8hXFxkKVxcdysoPz06KXwoOikoPyFcXGQpXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/Ol9HfF9WRVJTSU9OfGFzc2VydHxjb2xsZWN0Z2FyYmFnZXxjb3JvdXRpbmVcXC4oPzpjcmVhdGV8cmVzdW1lfHJ1bm5pbmd8c3RhdHVzfHdyYXB8eWllbGQpfGRlYnVnXFwuKD86ZGVidWd8Z2V0ZmVudnxnZXRob29rfGdldGluZm98Z2V0bG9jYWx8Z2V0bWV0YXRhYmxlfGdldHJlZ2lzdHJ5fGdldHVwdmFsdWV8c2V0ZmVudnxzZXRob29rfHNldGxvY2FsfHNldG1ldGF0YWJsZXxzZXR1cHZhbHVlfHRyYWNlYmFjayl8ZG9maWxlfGVycm9yfGdldGZlbnZ8Z2V0bWV0YXRhYmxlfGlvXFwuKD86Y2xvc2V8Zmx1c2h8aW5wdXR8bGluZXN8b3BlbnxvdXRwdXR8cG9wZW58cmVhZHxzdGRlcnJ8c3RkaW58c3Rkb3V0fHRtcGZpbGV8dHlwZXx3cml0ZSl8aXBhaXJzfGxvYWR8bG9hZGZpbGV8bG9hZHN0cmluZ3xtYXRoXFwuKD86YWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGNlaWx8Y29zfGNvc2h8ZGVnfGV4cHxmbG9vcnxmbW9kfGZyZXhwfGxkZXhwfGxvZ3xsb2cxMHxtYXh8bWlufG1vZGZ8cGl8cG93fHJhZHxyYW5kb218cmFuZG9tc2VlZHxzaW58c2luaHxzcXJ0fHRhbnx0YW5oKXxtb2R1bGV8bmV4dHxvc1xcLig/OmNsb2NrfGRhdGV8ZGlmZnRpbWV8ZXhlY3V0ZXxleGl0fGdldGVudnxyZW1vdmV8cmVuYW1lfHNldGxvY2FsZXx0aW1lfHRtcG5hbWUpfHBhY2thZ2VcXC4oPzpjcGF0aHxsb2FkZWR8bG9hZGxpYnxwYXRofHByZWxvYWR8c2VlYWxsKXxwYWlyc3xwY2FsbHxwcmludHxyYXdlcXVhbHxyYXdnZXR8cmF3c2V0fHJlcXVpcmV8c2VsZWN0fHNldGZlbnZ8c2V0bWV0YXRhYmxlfHN0cmluZ1xcLig/OmJ5dGV8Y2hhcnxkdW1wfGZpbmR8Zm9ybWF0fGdtYXRjaHxnc3VifGxlbnxsb3dlcnxtYXRjaHxyZXB8cmV2ZXJzZXxzdWJ8dXBwZXIpfHRhYmxlXFwuKD86Y29uY2F0fGluc2VydHxtYXhufHJlbW92ZXxzb3J0KXx0b251bWJlcnx0b3N0cmluZ3x0eXBlfHVucGFja3x4cGNhbGwpXFxiLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvKD86XFxCXFwuXFxkK3xcXGJcXGQrXFwuXFxkK3xcXGJcXGQrKD89W2VFXSkpKD86W2VFXVstK10/XFxkKyk/XFxifFxcYig/OjB4W2EtZkEtRlxcZF0rfFxcZCspKD86VT9MTCk/XFxiLyxcblx0J29wZXJhdG9yJzogL1xcLnszfXxbLT1dPnx+PXwoPzpbLSsqLyU8PiE9XXxcXC5cXC4pPT98WzojXl18XFxiKD86YW5kfG9yKVxcYj0/fFxcYig/Om5vdClcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sKClbXFxde31cXFxcXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5tb29uc2NyaXB0LnN0cmluZ1sxXS5pbnNpZGUuaW50ZXJwb2xhdGlvbi5pbnNpZGUubW9vbnNjcmlwdC5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdDtcblxuUHJpc20ubGFuZ3VhZ2VzLm1vb24gPSBQcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdDtcblxuLy8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9pbmRleC5odG1sXG5cblByaXNtLmxhbmd1YWdlcy5uMXFsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwqW1xcc1xcU10qPyg/OiR8XFwqXFwvKXwtLS4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF18XFwxXFwxKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118W15cXFxcYF18YGApKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J3BhcmFtZXRlcic6IC9cXCRbXFx3Ll0rLyxcblx0Ly8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWwjbjFxbC1yZXNlcnZlZC13b3Jkc1xuXHQna2V5d29yZCc6IC9cXGIoPzpBRFZJU0V8QUxMfEFMVEVSfEFOQUxZWkV8QVN8QVNDfEFUfEJFR0lOfEJJTkFSWXxCT09MRUFOfEJSRUFLfEJVQ0tFVHxCVUlMRHxCWXxDQUxMfENBU1R8Q0xVU1RFUnxDT0xMQVRFfENPTExFQ1RJT058Q09NTUlUfENPTU1JVFRFRHxDT05ORUNUfENPTlRJTlVFfENPUlJFTEFURXxDT1JSRUxBVEVEfENPVkVSfENSRUFURXxDVVJSRU5UfERBVEFCQVNFfERBVEFTRVR8REFUQVNUT1JFfERFQ0xBUkV8REVDUkVNRU5UfERFTEVURXxERVJJVkVEfERFU0N8REVTQ1JJQkV8RElTVElOQ1R8RE98RFJPUHxFQUNIfEVMRU1FTlR8RVhDRVBUfEVYQ0xVREV8RVhFQ1VURXxFWFBMQUlOfEZFVENIfEZJTFRFUnxGTEFUVEVOfEZMVVNIfEZPTExPV0lOR3xGT1J8Rk9SQ0V8RlJPTXxGVFN8RlVOQ1RJT058R09MQU5HfEdSQU5UfEdST1VQfEdST1VQU3xHU0l8SEFTSHxIQVZJTkd8SUZ8SUdOT1JFfElMSUtFfElOQ0xVREV8SU5DUkVNRU5UfElOREVYfElORkVSfElOTElORXxJTk5FUnxJTlNFUlR8SU5URVJTRUNUfElOVE98SVN8SVNPTEFUSU9OfEpBVkFTQ1JJUFR8Sk9JTnxLRVl8S0VZU3xLRVlTUEFDRXxLTk9XTnxMQU5HVUFHRXxMQVNUfExFRlR8TEVUfExFVFRJTkd8TEVWRUx8TElNSVR8TFNNfE1BUHxNQVBQSU5HfE1BVENIRUR8TUFURVJJQUxJWkVEfE1FUkdFfE1JTlVTfE1JU1NJTkd8TkFNRVNQQUNFfE5FU1R8Tkx8Tk98TlRIX1ZBTFVFfE5VTEx8TlVMTFN8TlVNQkVSfE9CSkVDVHxPRkZTRVR8T058T1BUSU9OfE9QVElPTlN8T1JERVJ8T1RIRVJTfE9VVEVSfE9WRVJ8UEFSU0V8UEFSVElUSU9OfFBBU1NXT1JEfFBBVEh8UE9PTHxQUkVDRURJTkd8UFJFUEFSRXxQUklNQVJZfFBSSVZBVEV8UFJJVklMRUdFfFBST0JFfFBST0NFRFVSRXxQVUJMSUN8UkFOR0V8UkFXfFJFQUxNfFJFRFVDRXxSRU5BTUV8UkVTUEVDVHxSRVRVUk58UkVUVVJOSU5HfFJFVk9LRXxSSUdIVHxST0xFfFJPTExCQUNLfFJPV3xST1dTfFNBVElTRklFU3xTQVZFUE9JTlR8U0NIRU1BfFNDT1BFfFNFTEVDVHxTRUxGfFNFTUl8U0VUfFNIT1d8U09NRXxTVEFSVHxTVEFUSVNUSUNTfFNUUklOR3xTWVNURU18VElFU3xUT3xUUkFOfFRSQU5TQUNUSU9OfFRSSUdHRVJ8VFJVTkNBVEV8VU5CT1VOREVEfFVOREVSfFVOSU9OfFVOSVFVRXxVTktOT1dOfFVOTkVTVHxVTlNFVHxVUERBVEV8VVBTRVJUfFVTRXxVU0VSfFVTSU5HfFZBTElEQVRFfFZBTFVFfFZBTFVFU3xWSUF8VklFV3xXSEVSRXxXSElMRXxXSU5ET1d8V0lUSHxXT1JLfFhPUilcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxUUlVFKVxcYi9pLFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCtcXC58XFxCXFwuKVxcZCtlWytcXC1dP1xcZCtcXGJ8XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bLSsqXFwvJV18IT18PT0/fFxcfFxcfHw8Wz49XT98Pj0/fFxcYig/OkFORHxBTll8QVJSQVl8QkVUV0VFTnxDQVNFfEVMU0V8RU5EfEVWRVJZfEVYSVNUU3xGSVJTVHxJTnxMSUtFfE5PVHxPUnxUSEVOfFZBTFVFRHxXSEVOfFdJVEhJTilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1s7W1xcXSgpLC57fTpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm40anMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge1xuXHQvLyBLZXl3b3JkcyBmcm9tIE40SlMgbGFuZ3VhZ2Ugc3BlYzogaHR0cHM6Ly9udW1iZXJmb3VyLmdpdGh1Yi5pby9uNGpzL3NwZWMvTjRKU1NwZWMuaHRtbFxuXHQna2V5d29yZCc6IC9cXGIoPzpBcnJheXxhbnl8Ym9vbGVhbnxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGRlYnVnZ2VyfGRlY2xhcmV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZhbHNlfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxtb2R1bGV8bmV3fG51bGx8bnVtYmVyfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN0cmluZ3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnVlfHRyeXx0eXBlb2Z8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZClcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbjRqcycsICdjb25zdGFudCcsIHtcblx0Ly8gQW5ub3RhdGlvbnMgaW4gTjRKUyBzcGVjOiBodHRwczovL251bWJlcmZvdXIuZ2l0aHViLmlvL240anMvc3BlYy9ONEpTU3BlYy5odG1sI19hbm5vdGF0aW9uc1xuXHQnYW5ub3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvQCtcXHcrLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLm40anNkID0gUHJpc20ubGFuZ3VhZ2VzLm40anM7XG5cblByaXNtLmxhbmd1YWdlc1snbmFuZDJ0ZXRyaXMtaGRsJ10gPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHQna2V5d29yZCc6IC9cXGIoPzpCVUlMVElOfENISVB8Q0xPQ0tFRHxJTnxPVVR8UEFSVFMpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW0EtWmEtel1bQS1aYS16MC05XSooPz1cXCgpLyxcblx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0J29wZXJhdG9yJzogLz18XFwuXFwuLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksOl0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGV4cHJlc3Npb25EZWYgPSAvXFx7W15cXHJcXG5cXFtcXF17fV0qXFx9LztcblxuXHR2YXIgcGFyYW1zID0ge1xuXHRcdCdxdW90ZWQtc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2NvbW1hbmQtcGFyYW0taWQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccylcXHcrOi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXHRcdCdjb21tYW5kLXBhcmFtLXZhbHVlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBleHByZXNzaW9uRGVmLFxuXHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcdCBdKVxcUysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcUyg/Oi4qXFxTKT8vLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdH1cblx0XHRdXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm5hbmlzY3JpcHQgPSB7XG5cdFx0Ly8gOyAuLi5cblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSopOy4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0Ly8gPiAuLi5cblx0XHQvLyBEZWZpbmUgaXMgYSBjb250cm9sIGxpbmUgc3RhcnRpbmcgd2l0aCAnPicgZm9sbG93ZWQgYnkgYSB3b3JkLCBhIHNwYWNlIGFuZCBhIHRleHQuXG5cdFx0J2RlZmluZSc6IHtcblx0XHRcdHBhdHRlcm46IC9ePi4rL20sXG5cdFx0XHRhbGlhczogJ3RhZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhbHVlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXj5cXHcrW1xcdCBdKykoPyFcXHMpW157fVxcclxcbl0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhePilcXHcrLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyAjIC4uLlxuXHRcdCdsYWJlbCc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSopI1tcXHQgXSpcXHcrW1xcdCBdKiQvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3JlZ2V4J1xuXHRcdH0sXG5cdFx0J2NvbW1hbmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKUBcXHcrKD89W1xcdCBdfCQpLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29tbWFuZC1uYW1lJzogL15AXFx3Ky8sXG5cdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IGV4cHJlc3Npb25EZWYsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb21tYW5kLXBhcmFtcyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0aW5zaWRlOiBwYXJhbXNcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIEdlbmVyaWMgaXMgYW55IGxpbmUgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggb3BlcmF0b3JzOiA7PiNAXG5cdFx0J2dlbmVyaWMtdGV4dCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopW14jQD47XFxzXS4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gXFx7IC4uLiBcXH0gLi4uIFxcWyAuLi4gXFxdIC4uLiBcXFwiXG5cdFx0XHRcdCdlc2NhcGVkLWNoYXInOiAvXFxcXFt7fVxcW1xcXVwiXS8sXG5cdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IGV4cHJlc3Npb25EZWYsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbmxpbmUtY29tbWFuZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxbW1xcdCBdKlxcd1teXFxyXFxuXFxbXFxdXSpcXF0vLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdjb21tYW5kLXBhcmFtcyc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFxbW1xcdCBdKlxcdytcXGIpW1xcc1xcU10rKD89XFxdJCkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IHBhcmFtc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdjb21tYW5kLXBhcmFtLW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxcW1tcXHQgXSopXFx3Ky8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnbmFtZScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3N0YXJ0LXN0b3AtY2hhcic6IC9bXFxbXFxdXS8sXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0UHJpc20ubGFuZ3VhZ2VzLm5hbmkgPSBQcmlzbS5sYW5ndWFnZXNbJ25hbmlzY3JpcHQnXTtcblxuXHQvKiogQHR5cGVkZWYge0luc3RhbmNlVHlwZTxpbXBvcnQoXCIuL3ByaXNtLWNvcmVcIilbXCJUb2tlblwiXT59IFRva2VuICovXG5cblx0LyoqXG5cdCAqIFRoaXMgaG9vayBpcyB1c2VkIHRvIHZhbGlkYXRlIGdlbmVyaWMtdGV4dCB0b2tlbnMgZm9yIGJhbGFuY2VkIGJyYWNrZXRzLlxuXHQgKiBNYXJrIHRva2VuIGFzIGJhZC1saW5lIHdoZW4gY29udGFpbnMgbm90IGJhbGFuY2VkIGJyYWNrZXRzOiB7fSxbXVxuXHQgKi9cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHQvKiogQHR5cGUgeyhUb2tlbiB8IHN0cmluZylbXX0gKi9cblx0XHR2YXIgdG9rZW5zID0gZW52LnRva2Vucztcblx0XHR0b2tlbnMuZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnICYmIHRva2VuLnR5cGUgPT09ICdnZW5lcmljLXRleHQnKSB7XG5cdFx0XHRcdHZhciBjb250ZW50ID0gZ2V0VGV4dENvbnRlbnQodG9rZW4pO1xuXHRcdFx0XHRpZiAoIWlzQnJhY2tldHNCYWxhbmNlZChjb250ZW50KSkge1xuXHRcdFx0XHRcdHRva2VuLnR5cGUgPSAnYmFkLWxpbmUnO1xuXHRcdFx0XHRcdHRva2VuLmNvbnRlbnQgPSBjb250ZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRmdW5jdGlvbiBpc0JyYWNrZXRzQmFsYW5jZWQoaW5wdXQpIHtcblx0XHR2YXIgYnJhY2tldHMgPSAnW117fSc7XG5cdFx0dmFyIHN0YWNrID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGJyYWNrZXQgPSBpbnB1dFtpXTtcblx0XHRcdHZhciBicmFja2V0c0luZGV4ID0gYnJhY2tldHMuaW5kZXhPZihicmFja2V0KTtcblx0XHRcdGlmIChicmFja2V0c0luZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRpZiAoYnJhY2tldHNJbmRleCAlIDIgPT09IDApIHtcblx0XHRcdFx0XHRzdGFjay5wdXNoKGJyYWNrZXRzSW5kZXggKyAxKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdGFjay5wb3AoKSAhPT0gYnJhY2tldHNJbmRleCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc3RhY2subGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgVG9rZW4gfCAoc3RyaW5nIHwgVG9rZW4pW119IHRva2VuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRUZXh0Q29udGVudCh0b2tlbikge1xuXHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdG9rZW47XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRva2VuLm1hcChnZXRUZXh0Q29udGVudCkuam9pbignJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBnZXRUZXh0Q29udGVudCh0b2tlbi5jb250ZW50KTtcblx0XHR9XG5cdH1cblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubmFzbSA9IHtcblx0J2NvbW1lbnQnOiAvOy4qJC9tLFxuXHQnc3RyaW5nJzogLyhbXCInYF0pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHMqKVtBLVphLXouXz8kXVtcXHcuPyRAfiNdKjovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC9cXFs/QklUUyAoPzoxNnwzMnw2NClcXF0/Lyxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHMqKXNlY3Rpb25cXHMqW2Etei5dKzo/L2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Lyg/OmV4dGVybnxnbG9iYWwpW147XFxyXFxuXSovaSxcblx0XHQvKD86Q1BVfERFRkFVTFR8RkxPQVQpLiokL21cblx0XSxcblx0J3JlZ2lzdGVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpzdFxcZHxbeHl6XW1tXFxkXFxkP3xbY2R0XXJcXGR8clxcZFxcZD9bYndkXT98W2VyXT9bYWJjZF14fFthYmNkXVtobF18W2VyXT8oPzpicHxkaXxzaXxzcCl8W2NkZWZnc11zKVxcYi9pLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdudW1iZXInOiAvKD86XFxifCg/PVxcJCkpKD86MFtoeF0oPzpcXC5bXFxkYS1mXSt8W1xcZGEtZl0rKD86XFwuW1xcZGEtZl0rKT8pKD86cFsrLV0/XFxkKyk/fFxcZFtcXGRhLWZdK1toeF18XFwkXFxkW1xcZGEtZl0qfDBbb3FdWzAtN10rfFswLTddK1tvcV18MFtieV1bMDFdK3xbMDFdK1tieV18MFtkdF1cXGQrfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpcXC4/ZVsrLV0/XFxkKyk/W2R0XT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bXFxbXFxdKitcXC1cXC8lPD49JnwkIV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubmVvbiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdkYXRldGltZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KD06LFxcc10pXFxkXFxkXFxkXFxkLVxcZFxcZD8tXFxkXFxkPyg/Oig/OltUdF18ICspXFxkXFxkPzpcXGRcXGQ6XFxkXFxkKD86XFwuXFxkKik/ICooPzpafFstK11cXGRcXGQ/KD86Oj9cXGRcXGQpPyk/KT8oPz0kfFtcXF19KSxcXHNdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KCxcXHNdKVteLDo9W1xcXXt9KCknXCJcXHNdKyg/PVxccyo6KD86JHxbXFxdfSksXFxzXSl8XFxzKj0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKVsrLV0/KD86MHhbXFxkYS1mQS1GXSt8MG9bMC03XSt8MGJbMDFdK3woPzpcXGQrKD86XFwuXFxkKik/fFxcLj9cXGQrKSg/OltlRV1bKy1dP1xcZCspPykoPz0kfFtcXF19KSw6PVxcc10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdib29sZWFuJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbW3soPTosXFxzXSkoPzpmYWxzZXxub3x0cnVlfHllcykoPz0kfFtcXF19KSw6PVxcc10pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbnVsbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KD06LFxcc10pKD86bnVsbCkoPz0kfFtcXF19KSw6PVxcc10pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKSg/OignJyd8XCJcIlwiKVxccj9cXG4oPzooPzpbXlxcclxcbl18XFxyP1xcbig/IVtcXHQgXSpcXDIpKSpcXHI/XFxuKT9bXFx0IF0qXFwyfCdbXidcXHJcXG5dKid8XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2xpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKSg/OlteI1wiJyw6PVtcXF17fSgpXFxzYC1dfFs6LV1bXlwiJyw9W1xcXXt9KClcXHNdKSg/OlteLDo9XFxdfSkoXFxzXXw6KD8hW1xccyxcXF19KV18JCl8WyBcXHRdK1teIyw6PVxcXX0pKFxcc10pKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZycsXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bLDo9W1xcXXt9KCktXS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubmV2b2QgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfCg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkpLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKD86XCIoPzpcIlwifFteXCJdKSpcIig/IVwiKXwnKD86Jyd8W14nXSkqJyg/IScpKSE/XFwqPy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N0cmluZy1hdHRycyc6IC8hJHwhXFwqJHxcXCokLyxcblx0XHR9LFxuXHR9LFxuXHQnbmFtZXNwYWNlJzoge1xuXHRcdHBhdHRlcm46IC8oQG5hbWVzcGFjZVxccyspW2EtekEtWjAtOVxcLS5dKyg/PVxccypcXHspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHR9LFxuXHQncGF0dGVybic6IHtcblx0XHRwYXR0ZXJuOiAvKEBwYXR0ZXJuXFxzKyk/Iz9bYS16QS1aMC05XFwtLl0rKD86XFxzKlxcKFxccyooPzp+XFxzKik/W2EtekEtWjAtOVxcLS5dK1xccyooPzosXFxzKig/On5cXHMqKT9bYS16QS1aMC05XFwtLl0qKSpcXCkpPyg/PVxccyo9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwYXR0ZXJuLW5hbWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eIz9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdH0sXG5cdFx0XHQnZmllbGRzJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwoLipcXCkvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZmllbGQtbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssKCldLyxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvfi8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ2ZpZWxkLWhpZGRlbi1tYXJrJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXHQnc2VhcmNoJzoge1xuXHRcdHBhdHRlcm46IC8oQHNlYXJjaFxccyt8IylbYS16QS1aMC05XFwtLl0rKD86XFwuXFwqKT8oPz1cXHMqOykvLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdH0sXG5cdCdrZXl3b3JkJzogL0AoPzpoYXZpbmd8aW5zaWRlfG5hbWVzcGFjZXxvdXRzaWRlfHBhdHRlcm58cmVxdWlyZXxzZWFyY2h8d2hlcmUpXFxiLyxcblx0J3N0YW5kYXJkLXBhdHRlcm4nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFscGhhfEFscGhhTnVtfEFueXxCbGFua3xFbmR8TGluZUJyZWFrfE51bXxOdW1BbHBoYXxQdW5jdHxTcGFjZXxTdGFydHxTeW1ib2x8V29yZHxXb3JkQnJlYWspXFxiKD86XFwoW2EtekEtWjAtOVxcLS4sXFxzK10qXFwpKT8vLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N0YW5kYXJkLXBhdHRlcm4tbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0YWxpYXM6ICdidWlsdGluJyxcblx0XHRcdH0sXG5cdFx0XHQncXVhbnRpZmllcic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcYlxcZCsoPzpcXHMqXFwrfFxccyotXFxzKlxcZCspPyg/IVxcdykvLFxuXHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHR9LFxuXHRcdFx0J3N0YW5kYXJkLXBhdHRlcm4tYXR0cic6IHtcblx0XHRcdFx0cGF0dGVybjogL1thLXpBLVowLTlcXC0uXSsvLFxuXHRcdFx0XHRhbGlhczogJ2J1aWx0aW4nLFxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLCgpXS8sXG5cdFx0fSxcblx0fSxcblx0J3F1YW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYlxcZCsoPzpcXHMqXFwrfFxccyotXFxzKlxcZCspPyg/IVxcdykvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0fSxcblx0J29wZXJhdG9yJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC89Lyxcblx0XHRcdGFsaWFzOiAncGF0dGVybi1kZWYnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyYvLFxuXHRcdFx0YWxpYXM6ICdjb25qdW5jdGlvbicsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvfi8sXG5cdFx0XHRhbGlhczogJ2V4Y2VwdGlvbicsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFw/Lyxcblx0XHRcdGFsaWFzOiAnb3B0aW9uYWxpdHknLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1tbXFxdXS8sXG5cdFx0XHRhbGlhczogJ3JlcGV0aXRpb24nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1t7fV0vLFxuXHRcdFx0YWxpYXM6ICd2YXJpYXRpb24nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1srX10vLFxuXHRcdFx0YWxpYXM6ICdzZXF1ZW5jZScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuezIsM30vLFxuXHRcdFx0YWxpYXM6ICdzcGFuJyxcblx0XHR9LFxuXHRdLFxuXHQnZmllbGQtY2FwdHVyZSc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFthLXpBLVowLTlcXC0uXStcXHMqXFwoKVxccypbYS16QS1aMC05XFwtLl0rXFxzKjpcXHMqW2EtekEtWjAtOVxcLS5dKyg/OlxccyosXFxzKlthLXpBLVowLTlcXC0uXStcXHMqOlxccypbYS16QS1aMC05XFwtLl0rKSooPz1cXHMqXFwpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWVsZC1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbG9uJzogLzovLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rXFxzKjovLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWVsZC1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbG9uJzogLzovLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWzo7LCgpXS8sXG5cdCduYW1lJzogL1thLXpBLVowLTlcXC0uXSsvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHZhcmlhYmxlID0gL1xcJCg/Olxcd1thLXpcXGRdKig/Ol9bXlxceDAwLVxceDFGXFxzXCInXFxcXCgpJF0qKT98XFx7W159XFxzXCInXFxcXF0rXFx9KS9pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5uZ2lueCA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxze307XSkjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpXFx3KD86W147e31cIidcXFxcXFxzXXxcXFxcLnxcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8Jyg/OlteJ1xcXFxdfFxcXFwuKSonfFxccysoPzojLiooPyEuKXwoPyFbI1xcc10pKSkqPyg/PVxccypbO3tdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXFxcXFwpKikoPzpcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8Jyg/OlteJ1xcXFxdfFxcXFwuKSonKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnZXNjYXBlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxcXFtcIidcXFxcbnJ0XS8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnZW50aXR5J1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29tbWVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxccykjLiovLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFxTKy8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gb3RoZXIgcGF0dGVybnNcblxuXHRcdFx0XHQnYm9vbGVhbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxccykoPzpvZmZ8b24pKD8hXFxTKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnbnVtYmVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcZCtbYS16XSooPyFcXFMpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fTtdL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5uaW0gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdC8vIERvdWJsZS1xdW90ZWQgc3RyaW5ncyBjYW4gYmUgcHJlZml4ZWQgYnkgYW4gaWRlbnRpZmllciAoR2VuZXJhbGl6ZWQgcmF3IHN0cmluZyBsaXRlcmFscylcblx0XHRwYXR0ZXJuOiAvKD86XFxiKD8hXFxkKSg/Olxcd3xcXFxceFs4OWEtZkEtRl1bMC05YS1mQS1GXSkrKT8oPzpcIlwiXCJbXFxzXFxTXSo/XCJcIlwiKD8hXCIpfFwiKD86XFxcXFtcXHNcXFNdfFwiXCJ8W15cIlxcXFxdKSpcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2hhcic6IHtcblx0XHQvLyBDaGFyYWN0ZXIgbGl0ZXJhbHMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgaXNzdWVzIHdpdGggbnVtZXJpYyB0eXBlIHN1ZmZpeGVzXG5cdFx0cGF0dGVybjogLycoPzpcXFxcKD86XFxkK3x4W1xcZGEtZkEtRl17MCwyfXwuKXxbXiddKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKD86KD8hXFxkKSg/Olxcd3xcXFxceFs4OWEtZkEtRl1bMC05YS1mQS1GXSkrfGBbXmBcXHJcXG5dK2ApXFwqPyg/OlxcW1teXFxdXStcXF0pPyg/PVxccypcXCgpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnb3BlcmF0b3InOiAvXFwqJC9cblx0XHR9XG5cdH0sXG5cdC8vIFdlIGRvbid0IHdhbnQgdG8gaGlnaGxpZ2h0IG9wZXJhdG9ycyAoYW5kIGFueXRoaW5nIHJlYWxseSkgaW5zaWRlIGJhY2t0aWNrc1xuXHQnaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvYFteYFxcclxcbl0rYC8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL2AvXG5cdFx0fVxuXHR9LFxuXG5cdC8vIFRoZSBuZWdhdGl2ZSBsb29rIGFoZWFkIHByZXZlbnRzIHdyb25nIGhpZ2hsaWdodGluZyBvZiB0aGUgLi4gb3BlcmF0b3Jcblx0J251bWJlcic6IC9cXGIoPzowW3hYb09iQl1bXFxkYS1mQS1GX10rfFxcZFtcXGRfXSooPzooPyFcXC5cXC4pXFwuW1xcZF9dKik/KD86W2VFXVsrLV0/XFxkW1xcZF9dKik/KSg/Oic/W2l1Zl1cXGQqKT8vLFxuXHQna2V5d29yZCc6IC9cXGIoPzphZGRyfGFzfGFzbXxhdG9taWN8YmluZHxibG9ja3xicmVha3xjYXNlfGNhc3R8Y29uY2VwdHxjb25zdHxjb250aW51ZXxjb252ZXJ0ZXJ8ZGVmZXJ8ZGlzY2FyZHxkaXN0aW5jdHxkb3xlbGlmfGVsc2V8ZW5kfGVudW18ZXhjZXB0fGV4cG9ydHxmaW5hbGx5fGZvcnxmcm9tfGZ1bmN8Z2VuZXJpY3xpZnxpbXBvcnR8aW5jbHVkZXxpbnRlcmZhY2V8aXRlcmF0b3J8bGV0fG1hY3JvfG1ldGhvZHxtaXhpbnxuaWx8b2JqZWN0fG91dHxwcm9jfHB0cnxyYWlzZXxyZWZ8cmV0dXJufHN0YXRpY3x0ZW1wbGF0ZXx0cnl8dHVwbGV8dHlwZXx1c2luZ3x2YXJ8d2hlbnx3aGlsZXx3aXRofHdpdGhvdXR8eWllbGQpXFxiLyxcblx0J29wZXJhdG9yJzoge1xuXHRcdC8vIExvb2sgYmVoaW5kIGFuZCBsb29rIGFoZWFkIHByZXZlbnQgd3JvbmcgaGlnaGxpZ2h0aW5nIG9mIHB1bmN0dWF0aW9ucyBbLiAuXSB7LiAufSAoLiAuKVxuXHRcdC8vIGJ1dCBhbGxvdyB0aGUgc2xpY2Ugb3BlcmF0b3IgLi4gdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlbVxuXHRcdC8vIE9uZSBjYW4gZGVmaW5lIGhpcyBvd24gb3BlcmF0b3JzIGluIE5pbSBzbyBhbGwgY29tYmluYXRpb24gb2Ygb3BlcmF0b3JzIG1pZ2h0IGJlIGFuIG9wZXJhdG9yLlxuXHRcdHBhdHRlcm46IC8oXnxbKHtcXFtdKD89XFwuXFwuKXwoPyFbKHtcXFtdXFwuKS4pKD86KD86Wz0rXFwtKlxcLzw+QCR+JiV8IT9eOlxcXFxdfFxcLlxcLnxcXC4oPyFbKX1cXF1dKSkrfFxcYig/OmFuZHxkaXZ8aW58aXN8aXNub3R8bW9kfG5vdHxub3RpbnxvZnxvcnxzaGx8c2hyfHhvcilcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWyh7XFxbXVxcLnxcXC5bKX1cXF1dfFtgKCl7fVxcW1xcXSw6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5uaXggPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfCMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCJ8JycoPzooPyEnJylbXFxzXFxTXXwnJyg/Oid8XFxcXHxcXCRcXHspKSonJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdC8vIFRoZSBsb29rYmVoaW5kIGVuc3VyZXMgdGhlICR7fSBpcyBub3QgcHJlY2VkZWQgYnkgXFwgb3IgJydcblx0XHRcdFx0cGF0dGVybjogLyhefCg/Ol58KD8hJycpLilbXlxcXFxdKVxcJFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQndXJsJzogW1xuXHRcdC9cXGIoPzpbYS16XXszLDd9OlxcL1xcLylbXFx3XFwtKyV+XFwvLjojPT8mXSsvLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oW15cXC9dKSg/OltcXHdcXC0rJX4uOiM9PyZdKig/IVxcL1xcLylbXFx3XFwtKyV+XFwvLjojPT8mXSk/KD8hXFwvXFwvKVxcL1tcXHdcXC0rJX5cXC8uOiM9PyZdKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnYW50aXF1b3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFwkKD89XFx7KS8sXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiXFxkK1xcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzc2VydHxidWlsdGluc3xlbHNlfGlmfGlufGluaGVyaXR8bGV0fG51bGx8b3J8dGhlbnx3aXRoKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGIoPzphYm9ydHxhZGR8YWxsfGFueXxhdHRyTmFtZXN8YXR0clZhbHVlc3xiYXNlTmFtZU9mfGNvbXBhcmVWZXJzaW9uc3xjb25jYXRMaXN0c3xjdXJyZW50U3lzdGVtfGRlZXBTZXF8ZGVyaXZhdGlvbnxkaXJPZnxkaXZ8ZWxlbSg/OkF0KT98ZmV0Y2goPzpUYXJiYWxsfHVybCl8ZmlsdGVyKD86U291cmNlKT98ZnJvbUpTT058Z2VuTGlzdHxnZXRBdHRyfGdldEVudnxoYXNBdHRyfGhhc2hTdHJpbmd8aGVhZHxpbXBvcnR8aW50ZXJzZWN0QXR0cnN8aXMoPzpBdHRyc3xCb29sfEZ1bmN0aW9ufEludHxMaXN0fE51bGx8U3RyaW5nKXxsZW5ndGh8bGVzc1RoYW58bGlzdFRvQXR0cnN8bWFwfG11bHxwYXJzZURydk5hbWV8cGF0aEV4aXN0c3xyZWFkKD86RGlyfEZpbGUpfHJlbW92ZUF0dHJzfHJlcGxhY2VTdHJpbmdzfHNlcXxzb3J0fHN0cmluZ0xlbmd0aHxzdWIoPzpzdHJpbmcpP3x0YWlsfHRocm93fHRvKD86RmlsZXxKU09OfFBhdGh8U3RyaW5nfFhNTCl8dHJhY2V8dHlwZU9mKVxcYnxcXGJmb2xkbCdcXEIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdvcGVyYXRvcic6IC9bPSE8Pl09P3xcXCtcXCs/fFxcfFxcfHwmJnxcXC9cXC98LT4/fFs/QF0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KClbXFxdLiw6O10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubml4LnN0cmluZy5pbnNpZGUuaW50ZXJwb2xhdGlvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMubml4O1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IEphbiBULiBTb3R0IChodHRwOi8vZ2l0aHViLmNvbS9pZGxlYmVyZylcbiAqXG4gKiBJbmNsdWRlcyBhbGwgY29tbWFuZHMgYW5kIHBsdWctaW5zIHNoaXBwZWQgd2l0aCBOU0lTIDMuMDhcbiAqL1xuUHJpc20ubGFuZ3VhZ2VzLm5zaXMgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98WyM7XS4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86QWJvcnR8QWRkKD86QnJhbmRpbmdJbWFnZXxTaXplKXxBZHZTcGxhc2h8QWxsb3coPzpSb290RGlySW5zdGFsbHxTa2lwRmlsZXMpfEF1dG9DbG9zZVdpbmRvd3xCRyg/OkZvbnR8R3JhZGllbnR8SW1hZ2UpfEJhbm5lcnxCcmFuZGluZ1RleHR8QnJpbmdUb0Zyb250fENSQ0NoZWNrfENhbGwoPzpJbnN0RExMKT98Q2FwdGlvbnxDaGFuZ2VVSXxDaGVja0JpdG1hcHxDbGVhckVycm9yc3xDb21wbGV0ZWRUZXh0fENvbXBvbmVudFRleHR8Q29weUZpbGVzfENyZWF0ZSg/OkRpcmVjdG9yeXxGb250fFNob3J0Q3V0KXxEZWxldGUoPzpJTklTZWN8SU5JU3RyfFJlZ0tleXxSZWdWYWx1ZSk/fERldGFpbCg/OlByaW50fHNCdXR0b25UZXh0KXxEaWFsZXJ8RGlyKD86VGV4dHxWYXJ8VmVyaWZ5KXxFbmFibGVXaW5kb3d8RW51bSg/OlJlZ0tleXxSZWdWYWx1ZSl8RXhjaHxFeGVjKD86U2hlbGwoPzpXYWl0KT98V2FpdCk/fEV4cGFuZEVudlN0cmluZ3N8RmlsZSg/OkJ1ZlNpemV8Q2xvc2V8RXJyb3JUZXh0fE9wZW58UmVhZHxSZWFkQnl0ZXxSZWFkVVRGMTZMRXxSZWFkV29yZHxTZWVrfFdyaXRlfFdyaXRlQnl0ZXxXcml0ZVVURjE2TEV8V3JpdGVXb3JkKT98RmluZCg/OkNsb3NlfEZpcnN0fE5leHR8V2luZG93KXxGbHVzaElOSXxHZXQoPzpDdXJJbnN0VHlwZXxDdXJyZW50QWRkcmVzc3xETExWZXJzaW9uKD86TG9jYWwpP3xEbGdJdGVtfEVycm9yTGV2ZWx8RmlsZVRpbWUoPzpMb2NhbCk/fEZ1bGxQYXRoTmFtZXxGdW5jdGlvbig/OkFkZHJlc3N8RW5kKT98SW5zdERpckVycm9yfExhYmVsQWRkcmVzc3xUZW1wRmlsZU5hbWUpfEdvdG98SGlkZVdpbmRvd3xJY29ufElmKD86QWJvcnR8RXJyb3JzfEZpbGVFeGlzdHN8UmVib290RmxhZ3xTaWxlbnQpfEluaXRQbHVnaW5zRGlyfEluc3RQcm9ncmVzc0ZsYWdzfEluc3QoPzpUeXBlKD86R2V0VGV4dHxTZXRUZXh0KT8pfEluc3RhbGwoPzpCdXR0b25UZXh0fENvbG9yc3xEaXIoPzpSZWdLZXkpPyl8SW50KD86NjR8UHRyKT9DbXBVP3xJbnQoPzo2NCk/Rm10fEludCg/OlB0cik/T3B8SXNXaW5kb3d8TGFuZyg/OkRMTHxTdHJpbmcpfExpY2Vuc2UoPzpCa0NvbG9yfERhdGF8Rm9yY2VTZWxlY3Rpb258TGFuZ1N0cmluZ3xUZXh0KXxMb2FkTGFuZ3VhZ2VGaWxlfExvY2tXaW5kb3d8TG9nKD86U2V0fFRleHQpfE1hbmlmZXN0KD86RFBJQXdhcmV8U3VwcG9ydGVkT1MpfE1hdGh8TWVzc2FnZUJveHxNaXNjQnV0dG9uVGV4dHxOU0lTZGx8TmFtZXxOb3B8T3V0RmlsZXxQRSg/OkRsbENoYXJhY3RlcmlzdGljc3xTdWJzeXNWZXIpfFBhZ2UoPzpDYWxsYmFja3MpP3xQb3B8UHVzaHxRdWl0fFJNRGlyfFJlYWQoPzpFbnZTdHJ8SU5JU3RyfFJlZ0RXT1JEfFJlZ1N0cil8UmVib290fFJlZ0RMTHxSZW5hbWV8UmVxdWVzdEV4ZWN1dGlvbkxldmVsfFJlc2VydmVGaWxlfFJldHVybnxTZWFyY2hQYXRofFNlY3Rpb24oPzpFbmR8R2V0RmxhZ3N8R2V0SW5zdFR5cGVzfEdldFNpemV8R2V0VGV4dHxHcm91cHxJbnxTZXRGbGFnc3xTZXRJbnN0VHlwZXN8U2V0U2l6ZXxTZXRUZXh0KT98U2VuZE1lc3NhZ2V8U2V0KD86QXV0b0Nsb3NlfEJyYW5kaW5nSW1hZ2V8Q29tcHJlc3N8Q29tcHJlc3Nvcig/OkRpY3RTaXplKT98Q3RsQ29sb3JzfEN1ckluc3RUeXBlfERhdGFibG9ja09wdGltaXplfERhdGVTYXZlfERldGFpbHMoPzpQcmludHxWaWV3KXxFcnJvckxldmVsfEVycm9yc3xGaWxlQXR0cmlidXRlc3xGb250fE91dFBhdGh8T3ZlcndyaXRlfFBsdWdpblVubG9hZHxSZWJvb3RGbGFnfFJlZ1ZpZXd8U2hlbGxWYXJDb250ZXh0fFNpbGVudCl8U2hvdyg/Okluc3REZXRhaWxzfFVuaW5zdERldGFpbHN8V2luZG93KXxTaWxlbnQoPzpJbnN0YWxsfFVuSW5zdGFsbCl8U2xlZXB8U3BhY2VUZXh0c3xTcGxhc2h8U3RhcnRNZW51fFN0cig/OkNtcFM/fENweXxMZW4pfFN1YkNhcHRpb258U3lzdGVtfFVuUmVnRExMfFVuaWNvZGV8VW5pbnN0UGFnZXxVbmluc3RhbGwoPzpCdXR0b25UZXh0fENhcHRpb258SWNvbnxTdWJDYXB0aW9ufFRleHQpfFVzZXJJbmZvfFZJKD86QWRkVmVyc2lvbktleXxGaWxlVmVyc2lvbnxQcm9kdWN0VmVyc2lvbil8VlBhdGNofFZhcnxXaW5kb3dJY29ufFdyaXRlKD86SU5JU3RyfFJlZyg/OkJpbnxEV09SRHxFeHBhbmRTdHJ8TXVsdGlTdHJ8Tm9uZXxTdHIpfFVuaW5zdGFsbGVyKXxYUFN0eWxlfG5zKD86RGlhbG9nc3xFeGVjKSlcXGIvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdwcm9wZXJ0eSc6IC9cXGIoPzpBUkNISVZFfEZJTEVfKD86QVRUUklCVVRFX0FSQ0hJVkV8QVRUUklCVVRFX05PUk1BTHxBVFRSSUJVVEVfT0ZGTElORXxBVFRSSUJVVEVfUkVBRE9OTFl8QVRUUklCVVRFX1NZU1RFTXxBVFRSSUJVVEVfVEVNUE9SQVJZKXxISyg/Oig/OkNSfENVfExNKSg/OjMyfDY0KT98RER8UER8VSl8SEtFWV8oPzpDTEFTU0VTX1JPT1R8Q1VSUkVOVF9DT05GSUd8Q1VSUkVOVF9VU0VSfERZTl9EQVRBfExPQ0FMX01BQ0hJTkV8UEVSRk9STUFOQ0VfREFUQXxVU0VSUyl8SUQoPzpBQk9SVHxDQU5DRUx8SUdOT1JFfE5PfE9LfFJFVFJZfFlFUyl8TUJfKD86QUJPUlRSRVRSWUlHTk9SRXxERUZCVVRUT04xfERFRkJVVFRPTjJ8REVGQlVUVE9OM3xERUZCVVRUT040fElDT05FWENMQU1BVElPTnxJQ09OSU5GT1JNQVRJT058SUNPTlFVRVNUSU9OfElDT05TVE9QfE9LfE9LQ0FOQ0VMfFJFVFJZQ0FOQ0VMfFJJR0hUfFJUTFJFQURJTkd8U0VURk9SRUdST1VORHxUT1BNT1NUfFVTRVJJQ09OfFlFU05PKXxOT1JNQUx8T0ZGTElORXxSRUFET05MWXxTSENUWHxTSEVMTF9DT05URVhUfFNZU1RFTXxURU1QT1JBUll8YWRtaW58YWxsfGF1dG98Ym90aHxjb2xvcmVkfGZhbHNlfGZvcmNlfGhpZGV8aGlnaGVzdHxsYXN0dXNlZHxsZWF2ZXxsaXN0b25seXxub25lfG5vcm1hbHxub3RzZXR8b2ZmfG9ufG9wZW58cHJpbnR8c2hvd3xzaWxlbnR8c2lsZW50bG9nfHNtb290aHx0ZXh0b25seXx0cnVlfHVzZXIpXFxiLyxcblx0J2NvbnN0YW50JzogL1xcJFxce1shXFx3XFwuOlxcXi1dK1xcfXxcXCRcXChbIVxcd1xcLjpcXF4tXStcXCkvLFxuXHQndmFyaWFibGUnOiAvXFwkXFx3W1xcd1xcLl0qLyxcblx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/Lyxcblx0J29wZXJhdG9yJzogLy0tP3xcXCtcXCs/fDw9P3w+PT98PT0/PT98JiY/fFxcfFxcfD98Wz8qXFwvfl4lXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS8sXG5cdCdpbXBvcnRhbnQnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikhKD86YWRkaW5jbHVkZWRpcnxhZGRwbHVnaW5kaXJ8YXBwZW5kZmlsZXxjZHxkZWZpbmV8ZGVsZmlsZXxlY2hvfGVsc2V8ZW5kaWZ8ZXJyb3J8ZXhlY3V0ZXxmaW5hbGl6ZXxnZXRkbGx2ZXJzaW9ufGdldHRsYnZlcnNpb258aWZ8aWZkZWZ8aWZtYWNyb2RlZnxpZm1hY3JvbmRlZnxpZm5kZWZ8aW5jbHVkZXxpbnNlcnRtYWNyb3xtYWNyb3xtYWNyb2VuZHxtYWtlbnNpc3xwYWNraGRyfHByYWdtYXxzZWFyY2hwYXJzZXxzZWFyY2hyZXBsYWNlfHN5c3RlbXx0ZW1wZmlsZXx1bmRlZnx2ZXJib3NlfHdhcm5pbmcpXFxiL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm9iamVjdGl2ZWMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9AP1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzbXxhdXRvfGJyZWFrfGNhc2V8Y2hhcnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZXJufGZsb2F0fGZvcnxnb3RvfGlmfGlufGlubGluZXxpbnR8bG9uZ3xyZWdpc3RlcnxyZXR1cm58c2VsZnxzaG9ydHxzaWduZWR8c2l6ZW9mfHN0YXRpY3xzdHJ1Y3R8c3VwZXJ8c3dpdGNofHR5cGVkZWZ8dHlwZW9mfHVuaW9ufHVuc2lnbmVkfHZvaWR8dm9sYXRpbGV8d2hpbGUpXFxifCg/OkBpbnRlcmZhY2V8QGVuZHxAaW1wbGVtZW50YXRpb258QHByb3RvY29sfEBjbGFzc3xAcHVibGljfEBwcm90ZWN0ZWR8QHByaXZhdGV8QHByb3BlcnR5fEB0cnl8QGNhdGNofEBmaW5hbGx5fEB0aHJvd3xAc3ludGhlc2l6ZXxAZHluYW1pY3xAc2VsZWN0b3IpXFxiLyxcblx0J29wZXJhdG9yJzogLy1bLT5dP3xcXCtcXCs/fCE9P3w8PD89P3w+Pj89P3w9PT98JiY/fFxcfFxcfD98W35eJT8qXFwvQF0vXG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5vYmplY3RpdmVjWydjbGFzcy1uYW1lJ107XG5cblByaXNtLmxhbmd1YWdlcy5vYmpjID0gUHJpc20ubGFuZ3VhZ2VzLm9iamVjdGl2ZWM7XG5cbi8vIGh0dHBzOi8vb2NhbWwub3JnL21hbnVhbC9sZXguaHRtbFxuXG5QcmlzbS5sYW5ndWFnZXMub2NhbWwgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXChcXCpbXFxzXFxTXSo/XFwqXFwpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXlxcXFxcXHJcXG4nXXxcXFxcKD86Lnxbb3hdP1swLTlhLWZdezEsM30pKScvaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86W1xcc1xcU118XFxyXFxuKXxbXlxcXFxcXHJcXG5cIl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xceyhbYS16X10qKVxcfFtcXHNcXFNdKj9cXHxcXDFcXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnbnVtYmVyJzogW1xuXHRcdC8vIGJpbmFyeSBhbmQgb2N0YWxcblx0XHQvXFxiKD86MGJbMDFdWzAxX10qfDBvWzAtN11bMC03X10qKVxcYi9pLFxuXHRcdC8vIGhleGFkZWNpbWFsXG5cdFx0L1xcYjB4W2EtZjAtOV1bYS1mMC05X10qKD86XFwuW2EtZjAtOV9dKik/KD86cFsrLV0/XFxkW1xcZF9dKik/KD8hXFx3KS9pLFxuXHRcdC8vIGRlY2ltYWxcblx0XHQvXFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopPyg/OmVbKy1dP1xcZFtcXGRfXSopPyg/IVxcdykvaSxcblx0XSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxCI1xcdysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxCflxcdysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCd0eXBlLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC9cXEInXFx3Ky8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3ZhcmlhbnQnOiB7XG5cdFx0cGF0dGVybjogL2BcXHcrLyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0Ly8gRm9yIHRoZSBsaXN0IG9mIGtleXdvcmRzIGFuZCBvcGVyYXRvcnMsXG5cdC8vIHNlZTogaHR0cDovL2NhbWwuaW5yaWEuZnIvcHViL2RvY3MvbWFudWFsLW9jYW1sL2xleC5odG1sI3NlYzg0XG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGFzc2VydHxiZWdpbnxjbGFzc3xjb25zdHJhaW50fGRvfGRvbmV8ZG93bnRvfGVsc2V8ZW5kfGV4Y2VwdGlvbnxleHRlcm5hbHxmb3J8ZnVufGZ1bmN0aW9ufGZ1bmN0b3J8aWZ8aW58aW5jbHVkZXxpbmhlcml0fGluaXRpYWxpemVyfGxhenl8bGV0fG1hdGNofG1ldGhvZHxtb2R1bGV8bXV0YWJsZXxuZXd8bm9ucmVjfG9iamVjdHxvZnxvcGVufHByaXZhdGV8cmVjfHNpZ3xzdHJ1Y3R8dGhlbnx0b3x0cnl8dHlwZXx2YWx8dmFsdWV8dmlydHVhbHx3aGVufHdoZXJlfHdoaWxlfHdpdGgpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdvcGVyYXRvci1saWtlLXB1bmN0dWF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXFtbPD58XXxbPnxdXFxdfFxcezx8PlxcfS8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0Ly8gQ3VzdG9tIG9wZXJhdG9ycyBhcmUgYWxsb3dlZFxuXHQnb3BlcmF0b3InOiAvXFwuWy5+XXw6Wz0+XXxbPTw+QF58JitcXC0qXFwvJCUhP35dWyEkJSYqK1xcLS5cXC86PD0+P0BefH5dKnxcXGIoPzphbmR8YXNyfGxhbmR8bG9yfGxzbHxsc3J8bHhvcnxtb2R8b3IpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogLzs7fDo6fFsoKXt9XFxbXFxdLiw6OyNdfFxcYl9cXGIvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBlc2NhcGVzID0gL1xcXFwoPzpbXCInXFxcXGFiZWZucnR2XXwwWzAtN117Mn18VVtcXGRBLUZhLWZdezZ9fHVbXFxkQS1GYS1mXXs0fXx4W1xcZEEtRmEtZl17Mn0pLztcblxuXHRQcmlzbS5sYW5ndWFnZXMub2RpbiA9IHtcblx0XHQvKipcblx0XHQgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IDEgbGV2ZWwgb2YgbmVzdGluZy5cblx0XHQgKlxuXHRcdCAqIEBhdXRob3IgTWljaGFlbCBTY2htaWR0XG5cdFx0ICogQGF1dGhvciBlZHVraXN0b1xuXHRcdCAqL1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvXFwqKD86W14vKl18XFwvKD8hXFwqKXxcXCooPyFcXC8pfFxcL1xcKig/OlxcKig/IVxcLyl8W14qXSkqKD86XFwqXFwvfCQpKSooPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8jIVteXFxuXFxyXSovLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXC9cXC9bXlxcblxccl0qLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3VsZCBiZSBmb3VuZCBiZWZvcmUgc3RyaW5ncyBiZWNhdXNlIG9mICdcIidcIi0gYW5kICdgJ2AtbGlrZSBzZXF1ZW5jZXMuXG5cdFx0ICovXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwoPzoufFswVXV4XVswLTlBLUZhLWZdezEsNn0pfFteXFxuXFxyJ1xcXFxdKScvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzeW1ib2wnOiBlc2NhcGVzXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9gW15gXSpgLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcblxcclwiXFxcXF0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnc3ltYm9sJzogZXNjYXBlc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvI1xcdysvLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXG5cdFx0J251bWJlcic6IC9cXGIwKD86YlswMV9dK3xkW1xcZF9dK3xoXyooPzooPzooPzpbXFxkQS1GYS1mXV8qKXs4fSl7MSwyfXwoPzpbXFxkQS1GYS1mXV8qKXs0fSl8b1swLTdfXSt8eFtcXGRBLUZfYS1mXSt8eltcXGRBQl9hYl0rKVxcYnwoPzpcXGJcXGQrKD86XFwuKD8hXFwuKVxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCopP1tpamtdPyg/IVxcdykvLFxuXG5cdFx0J2Rpc2NhcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiX1xcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdwcm9jZWR1cmUtZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJcXHcrKD89WyBcXHRdKig/OjpcXHMqKXsyfXByb2NcXGIpLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFzbXxhdXRvX2Nhc3R8Yml0X3NldHxicmVha3xjYXNlfGNhc3R8Y29udGV4dHxjb250aW51ZXxkZWZlcnxkaXN0aW5jdHxkb3xkeW5hbWljfGVsc2V8ZW51bXxmYWxsdGhyb3VnaHxmb3J8Zm9yZWlnbnxpZnxpbXBvcnR8aW58bWFwfG1hdHJpeHxub3RfaW58b3JfZWxzZXxvcl9yZXR1cm58cGFja2FnZXxwcm9jfHJldHVybnxzdHJ1Y3R8c3dpdGNofHRyYW5zbXV0ZXx0eXBlaWR8dW5pb258dXNpbmd8d2hlbnx3aGVyZSlcXGIvLFxuXG5cdFx0LyoqXG5cdFx0ICogZmFsc2UsIG5pbCwgdHJ1ZSBjYW4gYmUgdXNlZCBhcyBwcm9jZWR1cmUgbmFtZXMuIFwiX1wiIGFuZCBrZXl3b3JkcyBjYW4ndC5cblx0XHQgKi9cblx0XHQncHJvY2VkdXJlLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFx3Kyg/PVsgXFx0XSpcXCgpLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5pbHx0cnVlKVxcYi8sXG5cblx0XHQnY29uc3RhbnQtcGFyYW1ldGVyLXNpZ24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cblx0XHQndW5kZWZpbmVkJzoge1xuXHRcdFx0cGF0dGVybjogLy0tLS8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cblx0XHQnYXJyb3cnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvLT4vLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXG5cdFx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXxcXC5cXC5bPD1dP3woPzomfnxbLSEqKy89fl18WyUmPD58XXsxLDJ9KT0/fFs/Xl0vLFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKSwuOjtAXFxbXFxde31dL1xuXHR9O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8qIE9wZW5DTCBrZXJuZWwgbGFuZ3VhZ2UgKi9cblx0UHJpc20ubGFuZ3VhZ2VzLm9wZW5jbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2MnLCB7XG5cdFx0Ly8gRXh0cmFjdGVkIGZyb20gdGhlIG9mZmljaWFsIHNwZWNzICgyLjApIGFuZCBodHRwOi8vc3RyZWFtY29tcHV0aW5nLmV1L2Rvd25sb2Fkcy8/b3BlbmNsLmxhbmcgKG9wZW5jbC1rZXl3b3Jkcywgb3BlbmNsLXR5cGVzKSBhbmQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9Mjk1Nzc5NCZncm91cF9pZD05NTcxNyZhdGlkPTYxMjM4NCAoV29yZHMyLCBwYXJ0bHkgV29yZHMzKVxuXHRcdCdrZXl3b3JkJzogL1xcYig/Oig/Ol9fKT8oPzpjb25zdGFudHxnbG9iYWx8a2VybmVsfGxvY2FsfHByaXZhdGV8cmVhZF9vbmx5fHJlYWRfd3JpdGV8d3JpdGVfb25seSl8X19hdHRyaWJ1dGVfX3xhdXRvfCg/OmJvb2x8dT8oPzpjaGFyfGludHxsb25nfHNob3J0KXxoYWxmfHF1YWQpKD86MnwzfDR8OHwxNik/fGJyZWFrfGNhc2V8Y29tcGxleHxjb25zdHxjb250aW51ZXwoPzpkb3VibGV8ZmxvYXQpKD86MTYoPzp4KD86MXwyfDR8OHwxNikpP3wxeCg/OjF8Mnw0fDh8MTYpfDIoPzp4KD86MXwyfDR8OHwxNikpP3wzfDQoPzp4KD86MXwyfDR8OHwxNikpP3w4KD86eCg/OjF8Mnw0fDh8MTYpKT8pP3xkZWZhdWx0fGRvfGVsc2V8ZW51bXxleHRlcm58Zm9yfGdvdG98aWZ8aW1hZ2luYXJ5fGlubGluZXxwYWNrZWR8cGlwZXxyZWdpc3RlcnxyZXN0cmljdHxyZXR1cm58c2lnbmVkfHNpemVvZnxzdGF0aWN8c3RydWN0fHN3aXRjaHx0eXBlZGVmfHVuaWZvcm18dW5pb258dW5zaWduZWR8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2wubGFuZyAob3BlbmNsLWNvbnN0KVxuXHRcdC8vIE1hdGggQ29uc3RhbnRzOiBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuQ0wvc2RrLzIuMS9kb2NzL21hbi94aHRtbC9tYXRoQ29uc3RhbnRzLmh0bWxcblx0XHQvLyBNYWNyb3MgYW5kIExpbWl0czogaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkNML3Nkay8yLjEvZG9jcy9tYW4veGh0bWwvbWFjcm9MaW1pdHMuaHRtbFxuXHRcdCdudW1iZXInOiAvKD86XFxiMHgoPzpbXFxkYS1mXSsoPzpcXC5bXFxkYS1mXSopP3xcXC5bXFxkYS1mXSspKD86cFsrLV0/XFxkKyk/fCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pW2Z1aGxdezAsNH0vaSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J2NvbnN0YW50LW9wZW5jbC1rZXJuZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86Q0hBUl8oPzpCSVR8TUFYfE1JTil8Q0xLXyg/OkFERFJFU1NfKD86Q0xBTVAoPzpfVE9fRURHRSk/fE5PTkV8UkVQRUFUKXxGSUxURVJfKD86TElORUFSfE5FQVJFU1QpfCg/OkdMT0JBTHxMT0NBTClfTUVNX0ZFTkNFfE5PUk1BTElaRURfQ09PUkRTXyg/OkZBTFNFfFRSVUUpKXxDTF8oPzpCR1JBfCg/OkhBTEZfKT9GTE9BVHxJTlRFTlNJVFl8TFVNSU5BTkNFfEE/Uj9HP0I/W0F4XT98KD86KD86VU4pP1NJR05FRHxbVVNdTk9STSlfKD86SU5UKD86OHwxNnwzMikpfFVOT1JNXyg/OklOVF8xMDEwMTB8U0hPUlRfKD86NTU1fDU2NSkpKXwoPzpEQkx8RkxUfEhBTEYpXyg/OkRJR3xFUFNJTE9OfCg/Ok1BWHxNSU4pKD86KD86XzEwKT9fRVhQKT98TUFOVF9ESUcpfEZMVF9SQURJWHxIVUdFX1ZBTEY/fCg/OklOVHxMT05HfFNDSEFSfFNIUlQpXyg/Ok1BWHxNSU4pfElORklOSVRZfE1BWEZMT0FUfE1fKD86WzEyXV9QSXwyX1NRUlRQSXxFfExOKD86MnwxMCl8TE9HKD86MnwxMClFP3xQSSg/Ol9bMjRdKT98U1FSVCg/OjFfMnwyKSkoPzpfRnxfSCk/fE5BTnwoPzpVQ0hBUnxVSU5UfFVMT05HfFVTSFJUKV9NQVgpXFxiLyxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdvcGVuY2wnLCAnY2xhc3MtbmFtZScsIHtcblx0XHQvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuQ0wvc2RrLzIuMS9kb2NzL21hbi94aHRtbC9zY2FsYXJEYXRhVHlwZXMuaHRtbFxuXHRcdC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5DTC9zZGsvMi4xL2RvY3MvbWFuL3hodG1sL290aGVyRGF0YVR5cGVzLmh0bWxcblx0XHQnYnVpbHRpbi10eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/Ol9jbF8oPzpjb21tYW5kX3F1ZXVlfGNvbnRleHR8ZGV2aWNlX2lkfGV2ZW50fGtlcm5lbHxtZW18cGxhdGZvcm1faWR8cHJvZ3JhbXxzYW1wbGVyKXxjbF8oPzppbWFnZV9mb3JtYXR8bWVtX2ZlbmNlX2ZsYWdzKXxjbGtfZXZlbnRfdHxldmVudF90fGltYWdlKD86MWRfKD86YXJyYXlffGJ1ZmZlcl8pP3R8MmRfKD86YXJyYXlfKD86ZGVwdGhffG1zYWFfZGVwdGhffG1zYWFfKT98ZGVwdGhffG1zYWFfZGVwdGhffG1zYWFfKT90fDNkX3QpfGludHB0cl90fG5kcmFuZ2VfdHxwdHJkaWZmX3R8cXVldWVfdHxyZXNlcnZlX2lkX3R8c2FtcGxlcl90fHNpemVfdHx1aW50cHRyX3QpXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBhdHRyaWJ1dGVzID0ge1xuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2xfaG9zdC5sYW5nIChvcGVuY2wtdHlwZXMgYW5kIG9wZW5jbC1ob3N0KVxuXHRcdCd0eXBlLW9wZW5jbC1ob3N0Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmNsXyg/OkdMZW51bXxHTGludHxHTHVpbnxhZGRyZXNzaW5nX21vZGV8Yml0ZmllbGR8Ym9vbHxidWZmZXJfY3JlYXRlX3R5cGV8YnVpbGRfc3RhdHVzfGNoYW5uZWxfKD86b3JkZXJ8dHlwZSl8KD86dT8oPzpjaGFyfGludHxsb25nfHNob3J0KXxkb3VibGV8ZmxvYXQpKD86MnwzfDR8OHwxNik/fGNvbW1hbmRfKD86cXVldWUoPzpfaW5mb3xfcHJvcGVydGllcyk/fHR5cGUpfGNvbnRleHQoPzpfaW5mb3xfcHJvcGVydGllcyk/fGRldmljZV8oPzpleGVjX2NhcGFiaWxpdGllc3xmcF9jb25maWd8aWR8aW5mb3xsb2NhbF9tZW1fdHlwZXxtZW1fY2FjaGVfdHlwZXx0eXBlKXwoPzpldmVudHxzYW1wbGVyKSg/Ol9pbmZvKT98ZmlsdGVyX21vZGV8aGFsZnxpbWFnZV9pbmZvfGtlcm5lbCg/Ol9pbmZvfF93b3JrX2dyb3VwX2luZm8pP3xtYXBfZmxhZ3N8bWVtKD86X2ZsYWdzfF9pbmZvfF9vYmplY3RfdHlwZSk/fHBsYXRmb3JtXyg/OmlkfGluZm8pfHByb2ZpbGluZ19pbmZvfHByb2dyYW0oPzpfYnVpbGRfaW5mb3xfaW5mbyk/KSlcXGIvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J2Jvb2xlYW4tb3BlbmNsLWhvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiQ0xfKD86RkFMU0V8VFJVRSlcXGIvLFxuXHRcdFx0YWxpYXM6ICdib29sZWFuJ1xuXHRcdH0sXG5cdFx0Ly8gRXh0cmFjdGVkIGZyb20gY2wuaCAoMi4wKSBhbmQgaHR0cDovL3N0cmVhbWNvbXB1dGluZy5ldS9kb3dubG9hZHMvP29wZW5jbF9ob3N0LmxhbmcgKG9wZW5jbC1jb25zdClcblx0XHQnY29uc3RhbnQtb3BlbmNsLWhvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiQ0xfKD86QXxBQkdSfEFERFJFU1NfKD86Q0xBTVAoPzpfVE9fRURHRSk/fE1JUlJPUkVEX1JFUEVBVHxOT05FfFJFUEVBVCl8QVJHQnxCR1JBfEJMT0NLSU5HfEJVRkZFUl9DUkVBVEVfVFlQRV9SRUdJT058QlVJTERfKD86RVJST1J8SU5fUFJPR1JFU1N8Tk9ORXxQUk9HUkFNX0ZBSUxVUkV8U1VDQ0VTUyl8Q09NTUFORF8oPzpBQ1FVSVJFX0dMX09CSkVDVFN8QkFSUklFUnxDT1BZXyg/OkJVRkZFUig/Ol9SRUNUfF9UT19JTUFHRSk/fElNQUdFKD86X1RPX0JVRkZFUik/KXxGSUxMXyg/OkJVRkZFUnxJTUFHRSl8TUFQKD86X0JVRkZFUnxfSU1BR0UpfE1BUktFUnxNSUdSQVRFKD86X1NWTSk/X01FTV9PQkpFQ1RTfE5BVElWRV9LRVJORUx8TkRSQU5HRV9LRVJORUx8UkVBRF8oPzpCVUZGRVIoPzpfUkVDVCk/fElNQUdFKXxSRUxFQVNFX0dMX09CSkVDVFN8U1ZNXyg/OkZSRUV8TUFQfE1FTUNQWXxNRU1GSUxMfFVOTUFQKXxUQVNLfFVOTUFQX01FTV9PQkpFQ1R8VVNFUnxXUklURV8oPzpCVUZGRVIoPzpfUkVDVCk/fElNQUdFKSl8Q09NUElMRVJfTk9UX0FWQUlMQUJMRXxDT01QSUxFX1BST0dSQU1fRkFJTFVSRXxDT01QTEVURXxDT05URVhUXyg/OkRFVklDRVN8SU5URVJPUF9VU0VSX1NZTkN8TlVNX0RFVklDRVN8UExBVEZPUk18UFJPUEVSVElFU3xSRUZFUkVOQ0VfQ09VTlQpfERFUFRIKD86X1NURU5DSUwpP3xERVZJQ0VfKD86QUREUkVTU19CSVRTfEFGRklOSVRZX0RPTUFJTl8oPzpMWzEtNF1fQ0FDSEV8TkVYVF9QQVJUSVRJT05BQkxFfE5VTUEpfEFWQUlMQUJMRXxCVUlMVF9JTl9LRVJORUxTfENPTVBJTEVSX0FWQUlMQUJMRXxET1VCTEVfRlBfQ09ORklHfEVORElBTl9MSVRUTEV8RVJST1JfQ09SUkVDVElPTl9TVVBQT1JUfEVYRUNVVElPTl9DQVBBQklMSVRJRVN8RVhURU5TSU9OU3xHTE9CQUxfKD86TUVNXyg/OkNBQ0hFTElORV9TSVpFfENBQ0hFX1NJWkV8Q0FDSEVfVFlQRXxTSVpFKXxWQVJJQUJMRV9QUkVGRVJSRURfVE9UQUxfU0laRSl8SE9TVF9VTklGSUVEX01FTU9SWXxJTF9WRVJTSU9OfElNQUdFKD86MkRfTUFYXyg/OkhFSUdIVHxXSURUSCl8M0RfTUFYXyg/OkRFUFRIfEhFSUdIVHxXSURUSCl8X0JBU0VfQUREUkVTU19BTElHTk1FTlR8X01BWF9BUlJBWV9TSVpFfF9NQVhfQlVGRkVSX1NJWkV8X1BJVENIX0FMSUdOTUVOVHxfU1VQUE9SVCl8TElOS0VSX0FWQUlMQUJMRXxMT0NBTF9NRU1fU0laRXxMT0NBTF9NRU1fVFlQRXxNQVhfKD86Q0xPQ0tfRlJFUVVFTkNZfENPTVBVVEVfVU5JVFN8Q09OU1RBTlRfQVJHU3xDT05TVEFOVF9CVUZGRVJfU0laRXxHTE9CQUxfVkFSSUFCTEVfU0laRXxNRU1fQUxMT0NfU0laRXxOVU1fU1VCX0dST1VQU3xPTl9ERVZJQ0VfKD86RVZFTlRTfFFVRVVFUyl8UEFSQU1FVEVSX1NJWkV8UElQRV9BUkdTfFJFQURfSU1BR0VfQVJHU3xSRUFEX1dSSVRFX0lNQUdFX0FSR1N8U0FNUExFUlN8V09SS19HUk9VUF9TSVpFfFdPUktfSVRFTV9ESU1FTlNJT05TfFdPUktfSVRFTV9TSVpFU3xXUklURV9JTUFHRV9BUkdTKXxNRU1fQkFTRV9BRERSX0FMSUdOfE1JTl9EQVRBX1RZUEVfQUxJR05fU0laRXxOQU1FfE5BVElWRV9WRUNUT1JfV0lEVEhfKD86Q0hBUnxET1VCTEV8RkxPQVR8SEFMRnxJTlR8TE9OR3xTSE9SVCl8Tk9UXyg/OkFWQUlMQUJMRXxGT1VORCl8T1BFTkNMX0NfVkVSU0lPTnxQQVJFTlRfREVWSUNFfFBBUlRJVElPTl8oPzpBRkZJTklUWV9ET01BSU58QllfQUZGSU5JVFlfRE9NQUlOfEJZX0NPVU5UU3xCWV9DT1VOVFNfTElTVF9FTkR8RVFVQUxMWXxGQUlMRUR8TUFYX1NVQl9ERVZJQ0VTfFBST1BFUlRJRVN8VFlQRSl8UElQRV9NQVhfKD86QUNUSVZFX1JFU0VSVkFUSU9OU3xQQUNLRVRfU0laRSl8UExBVEZPUk18UFJFRkVSUkVEXyg/OkdMT0JBTF9BVE9NSUNfQUxJR05NRU5UfElOVEVST1BfVVNFUl9TWU5DfExPQ0FMX0FUT01JQ19BTElHTk1FTlR8UExBVEZPUk1fQVRPTUlDX0FMSUdOTUVOVHxWRUNUT1JfV0lEVEhfKD86Q0hBUnxET1VCTEV8RkxPQVR8SEFMRnxJTlR8TE9OR3xTSE9SVCkpfFBSSU5URl9CVUZGRVJfU0laRXxQUk9GSUxFfFBST0ZJTElOR19USU1FUl9SRVNPTFVUSU9OfFFVRVVFXyg/Ok9OXyg/OkRFVklDRV8oPzpNQVhfU0laRXxQUkVGRVJSRURfU0laRXxQUk9QRVJUSUVTKXxIT1NUX1BST1BFUlRJRVMpfFBST1BFUlRJRVMpfFJFRkVSRU5DRV9DT1VOVHxTSU5HTEVfRlBfQ09ORklHfFNVQl9HUk9VUF9JTkRFUEVOREVOVF9GT1JXQVJEX1BST0dSRVNTfFNWTV8oPzpBVE9NSUNTfENBUEFCSUxJVElFU3xDT0FSU0VfR1JBSU5fQlVGRkVSfEZJTkVfR1JBSU5fQlVGRkVSfEZJTkVfR1JBSU5fU1lTVEVNKXxUWVBFKD86X0FDQ0VMRVJBVE9SfF9BTEx8X0NQVXxfQ1VTVE9NfF9ERUZBVUxUfF9HUFUpP3xWRU5ET1IoPzpfSUQpP3xWRVJTSU9OKXxEUklWRVJfVkVSU0lPTnxFVkVOVF8oPzpDT01NQU5EXyg/OkVYRUNVVElPTl9TVEFUVVN8UVVFVUV8VFlQRSl8Q09OVEVYVHxSRUZFUkVOQ0VfQ09VTlQpfEVYRUNfKD86S0VSTkVMfE5BVElWRV9LRVJORUx8U1RBVFVTX0VSUk9SX0ZPUl9FVkVOVFNfSU5fV0FJVF9MSVNUKXxGSUxURVJfKD86TElORUFSfE5FQVJFU1QpfEZMT0FUfEZQXyg/OkNPUlJFQ1RMWV9ST1VOREVEX0RJVklERV9TUVJUfERFTk9STXxGTUF8SU5GX05BTnxST1VORF9UT19JTkZ8Uk9VTkRfVE9fTkVBUkVTVHxST1VORF9UT19aRVJPfFNPRlRfRkxPQVQpfEdMT0JBTHxIQUxGX0ZMT0FUfElNQUdFXyg/OkFSUkFZX1NJWkV8QlVGRkVSfERFUFRIfEVMRU1FTlRfU0laRXxGT1JNQVR8Rk9STUFUX01JU01BVENIfEZPUk1BVF9OT1RfU1VQUE9SVEVEfEhFSUdIVHxOVU1fTUlQX0xFVkVMU3xOVU1fU0FNUExFU3xST1dfUElUQ0h8U0xJQ0VfUElUQ0h8V0lEVEgpfElOVEVOU0lUWXxJTlZBTElEXyg/OkFSR19JTkRFWHxBUkdfU0laRXxBUkdfVkFMVUV8QklOQVJZfEJVRkZFUl9TSVpFfEJVSUxEX09QVElPTlN8Q09NTUFORF9RVUVVRXxDT01QSUxFUl9PUFRJT05TfENPTlRFWFR8REVWSUNFfERFVklDRV9QQVJUSVRJT05fQ09VTlR8REVWSUNFX1FVRVVFfERFVklDRV9UWVBFfEVWRU5UfEVWRU5UX1dBSVRfTElTVHxHTE9CQUxfT0ZGU0VUfEdMT0JBTF9XT1JLX1NJWkV8R0xfT0JKRUNUfEhPU1RfUFRSfElNQUdFX0RFU0NSSVBUT1J8SU1BR0VfRk9STUFUX0RFU0NSSVBUT1J8SU1BR0VfU0laRXxLRVJORUx8S0VSTkVMX0FSR1N8S0VSTkVMX0RFRklOSVRJT058S0VSTkVMX05BTUV8TElOS0VSX09QVElPTlN8TUVNX09CSkVDVHxNSVBfTEVWRUx8T1BFUkFUSU9OfFBJUEVfU0laRXxQTEFURk9STXxQUk9HUkFNfFBST0dSQU1fRVhFQ1VUQUJMRXxQUk9QRVJUWXxRVUVVRV9QUk9QRVJUSUVTfFNBTVBMRVJ8VkFMVUV8V09SS19ESU1FTlNJT058V09SS19HUk9VUF9TSVpFfFdPUktfSVRFTV9TSVpFKXxLRVJORUxfKD86QVJHXyg/OkFDQ0VTU18oPzpOT05FfFFVQUxJRklFUnxSRUFEX09OTFl8UkVBRF9XUklURXxXUklURV9PTkxZKXxBRERSRVNTXyg/OkNPTlNUQU5UfEdMT0JBTHxMT0NBTHxQUklWQVRFfFFVQUxJRklFUil8SU5GT19OT1RfQVZBSUxBQkxFfE5BTUV8VFlQRV8oPzpDT05TVHxOQU1FfE5PTkV8UElQRXxRVUFMSUZJRVJ8UkVTVFJJQ1R8Vk9MQVRJTEUpKXxBVFRSSUJVVEVTfENPTVBJTEVfTlVNX1NVQl9HUk9VUFN8Q09NUElMRV9XT1JLX0dST1VQX1NJWkV8Q09OVEVYVHxFWEVDX0lORk9fU1ZNX0ZJTkVfR1JBSU5fU1lTVEVNfEVYRUNfSU5GT19TVk1fUFRSU3xGVU5DVElPTl9OQU1FfEdMT0JBTF9XT1JLX1NJWkV8TE9DQUxfTUVNX1NJWkV8TE9DQUxfU0laRV9GT1JfU1VCX0dST1VQX0NPVU5UfE1BWF9OVU1fU1VCX0dST1VQU3xNQVhfU1VCX0dST1VQX1NJWkVfRk9SX05EUkFOR0V8TlVNX0FSR1N8UFJFRkVSUkVEX1dPUktfR1JPVVBfU0laRV9NVUxUSVBMRXxQUklWQVRFX01FTV9TSVpFfFBST0dSQU18UkVGRVJFTkNFX0NPVU5UfFNVQl9HUk9VUF9DT1VOVF9GT1JfTkRSQU5HRXxXT1JLX0dST1VQX1NJWkUpfExJTktFUl9OT1RfQVZBSUxBQkxFfExJTktfUFJPR1JBTV9GQUlMVVJFfExPQ0FMfExVTUlOQU5DRXxNQVBfKD86RkFJTFVSRXxSRUFEfFdSSVRFfFdSSVRFX0lOVkFMSURBVEVfUkVHSU9OKXxNRU1fKD86QUxMT0NfSE9TVF9QVFJ8QVNTT0NJQVRFRF9NRU1PQkpFQ1R8Q09OVEVYVHxDT1BZX0hPU1RfUFRSfENPUFlfT1ZFUkxBUHxGTEFHU3xIT1NUX05PX0FDQ0VTU3xIT1NUX1BUUnxIT1NUX1JFQURfT05MWXxIT1NUX1dSSVRFX09OTFl8S0VSTkVMX1JFQURfQU5EX1dSSVRFfE1BUF9DT1VOVHxPQkpFQ1RfKD86QUxMT0NBVElPTl9GQUlMVVJFfEJVRkZFUnxJTUFHRTFEfElNQUdFMURfQVJSQVl8SU1BR0UxRF9CVUZGRVJ8SU1BR0UyRHxJTUFHRTJEX0FSUkFZfElNQUdFM0R8UElQRSl8T0ZGU0VUfFJFQURfT05MWXxSRUFEX1dSSVRFfFJFRkVSRU5DRV9DT1VOVHxTSVpFfFNWTV9BVE9NSUNTfFNWTV9GSU5FX0dSQUlOX0JVRkZFUnxUWVBFfFVTRVNfU1ZNX1BPSU5URVJ8VVNFX0hPU1RfUFRSfFdSSVRFX09OTFkpfE1JR1JBVEVfTUVNX09CSkVDVF8oPzpDT05URU5UX1VOREVGSU5FRHxIT1NUKXxNSVNBTElHTkVEX1NVQl9CVUZGRVJfT0ZGU0VUfE5PTkV8Tk9OX0JMT0NLSU5HfE9VVF9PRl8oPzpIT1NUX01FTU9SWXxSRVNPVVJDRVMpfFBJUEVfKD86TUFYX1BBQ0tFVFN8UEFDS0VUX1NJWkUpfFBMQVRGT1JNXyg/OkVYVEVOU0lPTlN8SE9TVF9USU1FUl9SRVNPTFVUSU9OfE5BTUV8UFJPRklMRXxWRU5ET1J8VkVSU0lPTil8UFJPRklMSU5HXyg/OkNPTU1BTkRfKD86Q09NUExFVEV8RU5EfFFVRVVFRHxTVEFSVHxTVUJNSVQpfElORk9fTk9UX0FWQUlMQUJMRSl8UFJPR1JBTV8oPzpCSU5BUklFU3xCSU5BUllfU0laRVN8QklOQVJZX1RZUEUoPzpfQ09NUElMRURfT0JKRUNUfF9FWEVDVVRBQkxFfF9MSUJSQVJZfF9OT05FKT98QlVJTERfKD86R0xPQkFMX1ZBUklBQkxFX1RPVEFMX1NJWkV8TE9HfE9QVElPTlN8U1RBVFVTKXxDT05URVhUfERFVklDRVN8SUx8S0VSTkVMX05BTUVTfE5VTV9ERVZJQ0VTfE5VTV9LRVJORUxTfFJFRkVSRU5DRV9DT1VOVHxTT1VSQ0UpfFFVRVVFRHxRVUVVRV8oPzpDT05URVhUfERFVklDRXxERVZJQ0VfREVGQVVMVHxPTl9ERVZJQ0V8T05fREVWSUNFX0RFRkFVTFR8T1VUX09GX09SREVSX0VYRUNfTU9ERV9FTkFCTEV8UFJPRklMSU5HX0VOQUJMRXxQUk9QRVJUSUVTfFJFRkVSRU5DRV9DT1VOVHxTSVpFKXxSfFJBfFJFQURfKD86T05MWXxXUklURSlfQ0FDSEV8Ukd8UkdCfFJHQkF8UkdCeHxSR3h8UlVOTklOR3xSeHxTQU1QTEVSXyg/OkFERFJFU1NJTkdfTU9ERXxDT05URVhUfEZJTFRFUl9NT0RFfExPRF9NQVh8TE9EX01JTnxNSVBfRklMVEVSX01PREV8Tk9STUFMSVpFRF9DT09SRFN8UkVGRVJFTkNFX0NPVU5UKXwoPzpVTik/U0lHTkVEX0lOVCg/Ojh8MTZ8MzIpfFNOT1JNX0lOVCg/Ojh8MTYpfFNVQk1JVFRFRHxTVUNDRVNTfFVOT1JNX0lOVCg/Ojh8MTZ8MjR8XzEwMTAxMHxfMTAxMDEwXzIpfFVOT1JNX1NIT1JUXyg/OjU1NXw1NjUpfFZFUlNJT05fKD86MV8wfDFfMXwxXzJ8Ml8wfDJfMSl8c0JHUkF8c1JHQnxzUkdCQXxzUkdCeClcXGIvLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGNsLmggKDIuMCkgYW5kIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2xfaG9zdC5sYW5nIChvcGVuY2wtaG9zdClcblx0XHQnZnVuY3Rpb24tb3BlbmNsLWhvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiY2woPzpCdWlsZFByb2dyYW18Q2xvbmVLZXJuZWx8Q29tcGlsZVByb2dyYW18Q3JlYXRlKD86QnVmZmVyfENvbW1hbmRRdWV1ZSg/OldpdGhQcm9wZXJ0aWVzKT98Q29udGV4dHxDb250ZXh0RnJvbVR5cGV8SW1hZ2V8SW1hZ2UyRHxJbWFnZTNEfEtlcm5lbHxLZXJuZWxzSW5Qcm9ncmFtfFBpcGV8UHJvZ3JhbVdpdGgoPzpCaW5hcnl8QnVpbHRJbktlcm5lbHN8SUx8U291cmNlKXxTYW1wbGVyfFNhbXBsZXJXaXRoUHJvcGVydGllc3xTdWJCdWZmZXJ8U3ViRGV2aWNlc3xVc2VyRXZlbnQpfEVucXVldWUoPzooPzpCYXJyaWVyfE1hcmtlcikoPzpXaXRoV2FpdExpc3QpP3xDb3B5KD86QnVmZmVyKD86UmVjdHxUb0ltYWdlKT98SW1hZ2UoPzpUb0J1ZmZlcik/KXwoPzpGaWxsfE1hcCkoPzpCdWZmZXJ8SW1hZ2UpfE1pZ3JhdGVNZW1PYmplY3RzfE5EUmFuZ2VLZXJuZWx8TmF0aXZlS2VybmVsfCg/OlJlYWR8V3JpdGUpKD86QnVmZmVyKD86UmVjdCk/fEltYWdlKXxTVk0oPzpGcmVlfE1hcHxNZW1GaWxsfE1lbWNweXxNaWdyYXRlTWVtfFVubWFwKXxUYXNrfFVubWFwTWVtT2JqZWN0fFdhaXRGb3JFdmVudHMpfEZpbmlzaHxGbHVzaHxHZXQoPzpDb21tYW5kUXVldWVJbmZvfENvbnRleHRJbmZvfERldmljZSg/OkFuZEhvc3RUaW1lcnxJRHN8SW5mbyl8RXZlbnQoPzpQcm9maWxpbmcpP0luZm98RXh0ZW5zaW9uRnVuY3Rpb25BZGRyZXNzKD86Rm9yUGxhdGZvcm0pP3xIb3N0VGltZXJ8SW1hZ2VJbmZvfEtlcm5lbCg/OkFyZ0luZm98SW5mb3xTdWJHcm91cEluZm98V29ya0dyb3VwSW5mbyl8TWVtT2JqZWN0SW5mb3xQaXBlSW5mb3xQbGF0Zm9ybSg/OklEc3xJbmZvKXxQcm9ncmFtKD86QnVpbGQpP0luZm98U2FtcGxlckluZm98U3VwcG9ydGVkSW1hZ2VGb3JtYXRzKXxMaW5rUHJvZ3JhbXwoPzpSZWxlYXNlfFJldGFpbikoPzpDb21tYW5kUXVldWV8Q29udGV4dHxEZXZpY2V8RXZlbnR8S2VybmVsfE1lbU9iamVjdHxQcm9ncmFtfFNhbXBsZXIpfFNWTSg/OkFsbG9jfEZyZWUpfFNldCg/OkNvbW1hbmRRdWV1ZVByb3BlcnR5fERlZmF1bHREZXZpY2VDb21tYW5kUXVldWV8RXZlbnRDYWxsYmFja3xLZXJuZWx8S2VybmVsKD86QXJnKD86U1ZNUG9pbnRlcik/fEV4ZWNJbmZvKXxNZW1PYmplY3REZXN0cnVjdG9yQ2FsbGJhY2t8VXNlckV2ZW50U3RhdHVzKXxVbmxvYWQoPzpQbGF0Zm9ybSk/Q29tcGlsZXJ8V2FpdEZvckV2ZW50cylcXGIvLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9XG5cdH07XG5cblx0LyogT3BlbkNMIGhvc3QgQVBJICovXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2MnLCAna2V5d29yZCcsIGF0dHJpYnV0ZXMpO1xuXG5cdC8vIEMrKyBpbmNsdWRlcyBldmVyeXRoaW5nIGZyb20gdGhlIE9wZW5DTCBDIGhvc3QgQVBJIHBsdXMgdGhlIGNsYXNzZXMgZGVmaW5lZCBpbiBjbDIuaFxuXHRpZiAoUHJpc20ubGFuZ3VhZ2VzLmNwcCkge1xuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGRveHlnZW4gY2xhc3MgbGlzdCBodHRwOi8vZ2l0aHViLmtocm9ub3Mub3JnL09wZW5DTC1DTEhQUC9hbm5vdGF0ZWQuaHRtbFxuXHRcdGF0dHJpYnV0ZXNbJ3R5cGUtb3BlbmNsLWhvc3QtY3BwJ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86QnVmZmVyfEJ1ZmZlckdMfEJ1ZmZlclJlbmRlckdMfENvbW1hbmRRdWV1ZXxDb250ZXh0fERldmljZXxEZXZpY2VDb21tYW5kUXVldWV8RW5xdWV1ZUFyZ3N8RXZlbnR8SW1hZ2V8SW1hZ2UxRHxJbWFnZTFEQXJyYXl8SW1hZ2UxREJ1ZmZlcnxJbWFnZTJEfEltYWdlMkRBcnJheXxJbWFnZTJER0x8SW1hZ2UzRHxJbWFnZTNER0x8SW1hZ2VGb3JtYXR8SW1hZ2VHTHxLZXJuZWx8S2VybmVsRnVuY3RvcnxMb2NhbFNwYWNlQXJnfE1lbW9yeXxORFJhbmdlfFBpcGV8UGxhdGZvcm18UHJvZ3JhbXxTVk1BbGxvY2F0b3J8U1ZNVHJhaXRBdG9taWN8U1ZNVHJhaXRDb2Fyc2V8U1ZNVHJhaXRGaW5lfFNWTVRyYWl0UmVhZE9ubHl8U1ZNVHJhaXRSZWFkV3JpdGV8U1ZNVHJhaXRXcml0ZU9ubHl8U2FtcGxlcnxVc2VyRXZlbnQpXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9O1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ2tleXdvcmQnLCBhdHRyaWJ1dGVzKTtcblx0fVxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3Fpc2tpdC5naXRodWIuaW8vb3BlbnFhc20vZ3JhbW1hci9pbmRleC5odG1sXG5cblByaXNtLmxhbmd1YWdlcy5vcGVucWFzbSA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcblxcdF0qXCJ8J1teJ1xcclxcblxcdF0qJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86Q1h8T1BFTlFBU018VXxiYXJyaWVyfGJveGFzfGJveHRvfGJyZWFrfGNvbnN0fGNvbnRpbnVlfGN0cmx8ZGVmfGRlZmNhbHxkZWZjYWxncmFtbWFyfGRlbGF5fGVsc2V8ZW5kfGZvcnxnYXRlfGdwaGFzZXxpZnxpbnxpbmNsdWRlfGludnxrZXJuZWx8bGVuZ3Rob2Z8bGV0fG1lYXN1cmV8cG93fHJlc2V0fHJldHVybnxyb3Rhcnl8c3RyZXRjaGluZnx3aGlsZSlcXGJ8I3ByYWdtYVxcYi8sXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OmFuZ2xlfGJpdHxib29sfGNyZWd8Zml4ZWR8ZmxvYXR8aW50fGxlbmd0aHxxcmVnfHF1Yml0fHN0cmV0Y2h8dWludClcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86Y29zfGV4cHxsbnxwb3Bjb3VudHxyb3RsfHJvdHJ8c2lufHNxcnR8dGFuKVxcYig/PVxccypcXCgpLyxcblxuXHQnY29uc3RhbnQnOiAvXFxiKD86ZXVsZXJ8cGl8dGF1KVxcYnxcdTAzQzB8XHVEODM1XHVERjBGfFx1MjEwNy8sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteLlxcdyRdKSg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8oPzpkdHxuc3x1c3xcdTAwQjVzfG1zfHMpPy9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLy0+fD4+PT98PDw9P3wmJnxcXHxcXHx8XFwrXFwrfC0tfFshPTw+Jnx+XitcXC0qLyVdPT98QC8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXTssOi5dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnFhc20gPSBQcmlzbS5sYW5ndWFnZXMub3BlbnFhc207XG5cblByaXNtLmxhbmd1YWdlcy5veiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98JS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXFtcXHNcXFNdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdhdG9tJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXCR8XFxbXFxdfFxcYig/Ol98YXR8YXR0cnxjYXNlfGNhdGNofGNob2ljZXxjbGFzc3xjb25kfGRlY2xhcmV8ZGVmaW5lfGRpc3xlbHNlKD86Y2FzZXxpZik/fGVuZHxleHBvcnR8ZmFpbHxmYWxzZXxmZWF0fGZpbmFsbHl8ZnJvbXxmdW58ZnVuY3RvcnxpZnxpbXBvcnR8aW58bG9jYWx8bG9ja3xtZXRofG5pbHxub3R8b2Z8b3J8cHJlcGFyZXxwcm9jfHByb3B8cmFpc2V8cmVxdWlyZXxzZWxmfHNraXB8dGhlbnx0aHJlYWR8dHJ1ZXx0cnl8dW5pdClcXGIvLFxuXHQnZnVuY3Rpb24nOiBbXG5cdFx0L1xcYlthLXpdW0EtWmEtelxcZF0qKD89XFwoKS8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHspW0EtWl1bQS1aYS16XFxkXSpcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J251bWJlcic6IC9cXGIoPzowW2J4XVtcXGRhLWZdK3xcXGQrKD86XFwuXFxkKik/KD86ZX4/XFxkKyk/KVxcYnwmKD86W15cXFxcXXxcXFxcKD86XFxkezN9fC4pKS9pLFxuXHQndmFyaWFibGUnOiAvYCg/OlteYFxcXFxdfFxcXFwuKStgLyxcblx0J2F0dHItbmFtZSc6IC9cXGJcXHcrKD89WyBcXHRdKjooPyFbOj1dKSkvLFxuXHQnb3BlcmF0b3InOiAvOig/Oj18Ojo/KXw8Wy06PV0/fD0oPzo9fDw/Oj8pfD49Pzo/fFxcXFw9Oj98ISE/fFt8IytcXC0qXFwvLH5eQF18XFxiKD86YW5kdGhlbnxkaXZ8bW9kfG9yZWxzZSlcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXSgpe30uOjs/XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5wYXJpZ3AgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFxcXFxcXFwuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdC8vIFBBUkkvR1AgZG9lcyBub3QgY2FyZSBhYm91dCB3aGl0ZSBzcGFjZXMgYXQgYWxsXG5cdC8vIHNvIGxldCdzIHByb2Nlc3MgdGhlIGtleXdvcmRzIHRvIGJ1aWxkIGFuIGFwcHJvcHJpYXRlIHJlZ2V4cFxuXHQvLyAoZS5nLiBcImIgKnIgKmUgKmEgKmtcIiwgZXRjLilcblx0J2tleXdvcmQnOiAoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBrZXl3b3JkcyA9IFtcblx0XHRcdCdicmVha3BvaW50JywgJ2JyZWFrJywgJ2RiZ19kb3duJywgJ2RiZ19lcnInLCAnZGJnX3VwJywgJ2RiZ194Jyxcblx0XHRcdCdmb3Jjb21wb3NpdGUnLCAnZm9yZGl2JywgJ2ZvcmVsbCcsICdmb3JwYXJ0JywgJ2ZvcnByaW1lJyxcblx0XHRcdCdmb3JzdGVwJywgJ2ZvcnN1Ymdyb3VwJywgJ2ZvcnZlYycsICdmb3InLCAnaWZlcnInLCAnaWYnLFxuXHRcdFx0J2xvY2FsJywgJ215JywgJ25leHQnLCAncmV0dXJuJywgJ3VudGlsJywgJ3doaWxlJ1xuXHRcdF07XG5cdFx0a2V5d29yZHMgPSBrZXl3b3Jkcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0XHRcdHJldHVybiBrZXl3b3JkLnNwbGl0KCcnKS5qb2luKCcgKicpO1xuXHRcdH0pLmpvaW4oJ3wnKTtcblx0XHRyZXR1cm4gUmVnRXhwKCdcXFxcYig/OicgKyBrZXl3b3JkcyArICcpXFxcXGInKTtcblx0fSgpKSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdyg/OltcXHcgXSpcXHcpPyg/PSAqXFwoKS8sXG5cdCdudW1iZXInOiB7XG5cdFx0Ly8gVGhlIGxvb2tiZWhpbmQgYW5kIHRoZSBuZWdhdGl2ZSBsb29rYWhlYWQgcHJldmVudCBmcm9tIGJyZWFraW5nIHRoZSAuLiBvcGVyYXRvclxuXHRcdHBhdHRlcm46IC8oKD86XFwuICpcXC4gKik/KSg/OlxcYlxcZCg/OiAqXFxkKSooPzogKig/IVxcLiAqXFwuKVxcLig/OiAqXFxkKSopP3xcXC4gKlxcZCg/OiAqXFxkKSopKD86ICplICooPzpbKy1dICopP1xcZCg/OiAqXFxkKSopPy9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogL1xcLiAqXFwufFsqXFwvIV0oPzogKj0pP3wlKD86ICo9fCg/OiAqIyk/KD86IConKSopP3xcXCsoPzogKlsrPV0pP3wtKD86ICpbLT0+XSk/fDwoPzogKj58KD86ICo8KT8oPzogKj0pPyk/fD4oPzogKj4pPyg/OiAqPSk/fD0oPzogKj0pezAsMn18XFxcXCg/OiAqXFwvKT8oPzogKj0pP3wmKD86IComKT98XFx8ICpcXHx8Wycjfl5dLyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF17fSgpLiw6O3xdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBwYXJzZXIgPSBQcmlzbS5sYW5ndWFnZXMucGFyc2VyID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXl0pKD86XFxeKD86Y2FzZXxldmFsfGZvcnxpZnxzd2l0Y2h8dGhyb3cpXFxifEAoPzpCQVNFfENMQVNTfEdFVCg/Ol9ERUZBVUxUKT98T1BUSU9OU3xTRVRfREVGQVVMVHxVU0UpXFxiKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15eXSlcXEJcXCQoPzpcXHcrfCg/PVsue10pKSg/Oig/OlxcLnw6Oj8pXFx3KykqKD86XFwufDo6Pyk/Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLnw6Ky9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXl5dKVxcQltAXl1cXHcrKD86KD86XFwufDo6PylcXHcrKSooPzpcXC58Ojo/KT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5AKSg/OkdFVF98U0VUXykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLnw6Ky9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdlc2NhcGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxeKD86WyReO0AoKVxcW1xcXXt9XCInOl18I1thLWZcXGRdKikvaSxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fTtdL1xuXHR9KTtcblxuXHRwYXJzZXIgPSBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwYXJzZXInLCAna2V5d29yZCcsIHtcblx0XHQncGFyc2VyLWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0Ly8gQWxsb3cgZm9yIDMgbGV2ZWxzIG9mIGRlcHRoXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15eXSlcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXCgoPzpbXigpXSkqXFwpKSpcXCkpKlxcKS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXl0pKFtcIiddKSg/Oig/IVxcMilbXl5dfFxcXltcXHNcXFNdKSpcXDIvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBwYXJzZXIua2V5d29yZCxcblx0XHRcdFx0J3ZhcmlhYmxlJzogcGFyc2VyLnZhcmlhYmxlLFxuXHRcdFx0XHQnZnVuY3Rpb24nOiBwYXJzZXIuZnVuY3Rpb24sXG5cdFx0XHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHRcdFx0J251bWJlcic6IC9cXGIoPzoweFthLWZcXGRdK3xcXGQrKD86XFwuXFxkKik/KD86ZVsrLV0/XFxkKyk/KVxcYi9pLFxuXHRcdFx0XHQnZXNjYXBlJzogcGFyc2VyLmVzY2FwZSxcblx0XHRcdFx0J29wZXJhdG9yJzogL1t+KypcXC9cXFxcJV18ISg/OlxcfFxcfD98PSk/fCYmP3xcXHxcXHw/fD09fDxbPD1dP3w+Wz49XT98LVtmZF0/fFxcYig/OmRlZnxlcXxnZXxndHxpbnxpc3xsZXxsdHxuZSlcXGIvLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwYXJzZXIucHVuY3R1YXRpb25cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnZXhwcmVzc2lvbic6IHBhcnNlci5leHByZXNzaW9uLFxuXHRcdCdrZXl3b3JkJzogcGFyc2VyLmtleXdvcmQsXG5cdFx0J3ZhcmlhYmxlJzogcGFyc2VyLnZhcmlhYmxlLFxuXHRcdCdmdW5jdGlvbic6IHBhcnNlci5mdW5jdGlvbixcblx0XHQnZXNjYXBlJzogcGFyc2VyLmVzY2FwZSxcblx0XHQncGFyc2VyLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogcGFyc2VyLnB1bmN0dWF0aW9uLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0sIHBhcnNlclsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10pO1xuXG59KFByaXNtKSk7XG5cbi8vIEJhc2VkIG9uIEZyZWUgUGFzY2FsXG5cbi8qIFRPRE9cblx0U3VwcG9ydCBpbmxpbmUgYXNtID9cbiovXG5cblByaXNtLmxhbmd1YWdlcy5wYXNjYWwgPSB7XG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL1xce1xcJFtcXHNcXFNdKj9cXH0vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogWydtYXJjbycsICdwcm9wZXJ0eSddXG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXChcXCpbXFxzXFxTXSo/XFwqXFwpfFxce1tcXHNcXFNdKj9cXH18XFwvXFwvLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzonKD86Jyd8W14nXFxyXFxuXSkqJyg/IScpfCNbJiQlXT9bYS1mXFxkXSspK3xcXF5bYS16XS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYXNtJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiYXNtXFxiKVtcXHNcXFNdKz8oPz1cXGJlbmRcXHMqWztbXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdC8vIFR1cmJvIFBhc2NhbFxuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86YWJzb2x1dGV8YXJyYXl8YXNtfGJlZ2lufGNhc2V8Y29uc3R8Y29uc3RydWN0b3J8ZGVzdHJ1Y3Rvcnxkb3xkb3dudG98ZWxzZXxlbmR8ZmlsZXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbXBsZW1lbnRhdGlvbnxpbmhlcml0ZWR8aW5saW5lfGludGVyZmFjZXxsYWJlbHxuaWx8b2JqZWN0fG9mfG9wZXJhdG9yfHBhY2tlZHxwcm9jZWR1cmV8cHJvZ3JhbXxyZWNvcmR8cmVpbnRyb2R1Y2V8cmVwZWF0fHNlbGZ8c2V0fHN0cmluZ3x0aGVufHRvfHR5cGV8dW5pdHx1bnRpbHx1c2VzfHZhcnx3aGlsZXx3aXRoKVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gRnJlZSBQYXNjYWxcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmRpc3Bvc2V8ZXhpdHxmYWxzZXxuZXd8dHJ1ZSlcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIE9iamVjdCBQYXNjYWxcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmNsYXNzfGRpc3BpbnRlcmZhY2V8ZXhjZXB0fGV4cG9ydHN8ZmluYWxpemF0aW9ufGZpbmFsbHl8aW5pdGlhbGl6YXRpb258aW5saW5lfGxpYnJhcnl8b258b3V0fHBhY2tlZHxwcm9wZXJ0eXxyYWlzZXxyZXNvdXJjZXN0cmluZ3x0aHJlYWR2YXJ8dHJ5KVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gTW9kaWZpZXJzXG5cdFx0XHRwYXR0ZXJuOiAvKF58W14mXSlcXGIoPzphYnNvbHV0ZXxhYnN0cmFjdHxhbGlhc3xhc3NlbWJsZXJ8Yml0cGFja2VkfGJyZWFrfGNkZWNsfGNvbnRpbnVlfGNwcGRlY2x8Y3ZhcnxkZWZhdWx0fGRlcHJlY2F0ZWR8ZHluYW1pY3xlbnVtZXJhdG9yfGV4cGVyaW1lbnRhbHxleHBvcnR8ZXh0ZXJuYWx8ZmFyfGZhcjE2fGZvcndhcmR8Z2VuZXJpY3xoZWxwZXJ8aW1wbGVtZW50c3xpbmRleHxpbnRlcnJ1cHR8aW9jaGVja3N8bG9jYWx8bWVzc2FnZXxuYW1lfG5lYXJ8bm9kZWZhdWx0fG5vcmV0dXJufG5vc3RhY2tmcmFtZXxvbGRmcGNjYWxsfG90aGVyd2lzZXxvdmVybG9hZHxvdmVycmlkZXxwYXNjYWx8cGxhdGZvcm18cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHB1Ymxpc2hlZHxyZWFkfHJlZ2lzdGVyfHJlaW50cm9kdWNlfHJlc3VsdHxzYWZlY2FsbHxzYXZlcmVnaXN0ZXJzfHNvZnRmbG9hdHxzcGVjaWFsaXplfHN0YXRpY3xzdGRjYWxsfHN0b3JlZHxzdHJpY3R8dW5hbGlnbmVkfHVuaW1wbGVtZW50ZWR8dmFyYXJnc3x2aXJ0dWFsfHdyaXRlKVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J251bWJlcic6IFtcblx0XHQvLyBIZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeVxuXHRcdC8oPzpbJiVdXFxkK3xcXCRbYS1mXFxkXSspL2ksXG5cdFx0Ly8gRGVjaW1hbFxuXHRcdC9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/L2lcblx0XSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9cXC5cXC58XFwqXFwqfDo9fDxbPD0+XT98Pls+PV0/fFsrXFwtKlxcL109P3xbQF49XS8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86YW5kfGFzfGRpdnxleGNsdWRlfGlufGluY2x1ZGV8aXN8bW9kfG5vdHxvcnxzaGx8c2hyfHhvcilcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1xcKFxcLnxcXC5cXCl8WygpXFxbXFxdOjssLl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucGFzY2FsLmFzbS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdwYXNjYWwnLCB7XG5cdCdhc20nOiB1bmRlZmluZWQsXG5cdCdrZXl3b3JkJzogdW5kZWZpbmVkLFxuXHQnb3BlcmF0b3InOiB1bmRlZmluZWRcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMub2JqZWN0cGFzY2FsID0gUHJpc20ubGFuZ3VhZ2VzLnBhc2NhbDtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIFBhc2NhbGlnbyBpcyBhIGxheWVyIDIgc21hcnQgY29udHJhY3QgbGFuZ3VhZ2UgZm9yIHRoZSB0ZXpvcyBibG9ja2NoYWluXG5cblx0dmFyIGJyYWNlcyA9IC9cXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkqXFwpLy5zb3VyY2U7XG5cdHZhciB0eXBlID0gLyg/OlxcYlxcdysoPzo8YnJhY2VzPik/fDxicmFjZXM+KS8uc291cmNlLnJlcGxhY2UoLzxicmFjZXM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJyYWNlczsgfSk7XG5cblx0dmFyIHBhc2NhbGlnbyA9IFByaXNtLmxhbmd1YWdlcy5wYXNjYWxpZ28gPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFwoXFwqW1xcc1xcU10rP1xcKlxcKXxcXC9cXC8uKi8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFxcXlthLXpdL2ksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGJ0eXBlXFxzK1xcdytcXHMraXNcXHMrKTx0eXBlPi8uc291cmNlLnJlcGxhY2UoLzx0eXBlPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlOyB9KSwgJ2knKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC88dHlwZT4oPz1cXHMraXNcXGIpLy5zb3VyY2UucmVwbGFjZSgvPHR5cGU+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGU7IH0pLCAnaScpLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyg6XFxzKik8dHlwZT4vLnNvdXJjZS5yZXBsYWNlKC88dHlwZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZTsgfSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmJlZ2lufGJsb2NrfGNhc2V8Y29uc3R8ZWxzZXxlbmR8ZmFpbHxmb3J8ZnJvbXxmdW5jdGlvbnxpZnxpc3xuaWx8b2Z8cmVtb3ZlfHJldHVybnxza2lwfHRoZW58dHlwZXx2YXJ8d2hpbGV8d2l0aClcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86RmFsc2V8VHJ1ZSlcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86Ym9vbHxpbnR8bGlzdHxtYXB8bmF0fHJlY29yZHxzdHJpbmd8dW5pdClcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHRcdCdudW1iZXInOiBbXG5cdFx0XHQvLyBIZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeVxuXHRcdFx0LyVbMDFdK3wmWzAtN10rfFxcJFthLWZcXGRdKy9pLFxuXHRcdFx0Ly8gRGVjaW1hbFxuXHRcdFx0L1xcYlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8oPzptdHp8bik/L2lcblx0XHRdLFxuXHRcdCdvcGVyYXRvcic6IC8tPnw9XFwvPXxcXC5cXC58XFwqXFwqfDo9fDxbPD0+XT98Pls+PV0/fFsrXFwtKlxcL109P3xbQF49fF18XFxiKD86YW5kfG1vZHxvcilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXChcXC58XFwuXFwpfFsoKVxcW1xcXTo7LC57fV0vXG5cdH07XG5cblx0dmFyIGNsYXNzTmFtZUluc2lkZSA9IFsnY29tbWVudCcsICdrZXl3b3JkJywgJ2J1aWx0aW4nLCAnb3BlcmF0b3InLCAncHVuY3R1YXRpb24nXS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtLCBrZXkpIHtcblx0XHRhY2N1bVtrZXldID0gcGFzY2FsaWdvW2tleV07XG5cdFx0cmV0dXJuIGFjY3VtO1xuXHR9LCB7fSk7XG5cblx0cGFzY2FsaWdvWydjbGFzcy1uYW1lJ10uZm9yRWFjaChmdW5jdGlvbiAocCkge1xuXHRcdHAuaW5zaWRlID0gY2xhc3NOYW1lSW5zaWRlO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMucHNsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcXFxcIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnc3ltYm9sJzogL1xcXFxbbnRyYkEtWlwiXFxcXF0vXG5cdFx0fVxuXHR9LFxuXHQnaGVyZWRvYy1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLzw8PChbYS16QS1aX11cXHcqKVtcXHJcXG5dKD86LipbXFxyXFxuXSkqP1xcMVxcYi8sXG5cdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpfX211bHRpfF9fc2luZ2xlfGNhc2V8ZGVmYXVsdHxkb3xlbHNlfGVsc2lmfGV4aXR8ZXhwb3J0fGZvcnxmb3JlYWNofGZ1bmN0aW9ufGlmfGxhc3R8bGluZXxsb2NhbHxuZXh0fHJlcXVpcmVzfHJldHVybnxzd2l0Y2h8dW50aWx8d2hpbGV8d29yZClcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86QUxBUk18Q0hBUlRfQUREX0dSQVBIfENIQVJUX0RFTEVURV9HUkFQSHxDSEFSVF9ERVNUUk9ZfENIQVJUX0xPQUR8Q0hBUlRfUFJJTlR8RU9GfE9GRkxJTkV8T0t8UFNMX1BST0ZfTE9HfFJfQ0hFQ0tfSE9SSVp8Ul9DSEVDS19WRVJUfFJfQ0xJQ0tFUnxSX0NPTFVNTnxSX0ZSQU1FfFJfSUNPTnxSX0xBQkVMfFJfTEFCRUxfQ0VOVEVSfFJfTElTVF9NVUxUSVBMRXxSX0xJU1RfTVVMVElQTEVfTkR8Ul9MSVNUX1NJTkdMRXxSX0xJU1RfU0lOR0xFX05EfFJfTUVOVXxSX1BPUFVQfFJfUE9QVVBfU0NST0xMRUR8Ul9SQURJT19IT1JJWnxSX1JBRElPX1ZFUlR8Ul9ST1d8Ul9TQ0FMRV9IT1JJWnxSX1NDQUxFX1ZFUlR8Ul9TRVBfSE9SSVp8Ul9TRVBfVkVSVHxSX1NQSU5ORVJ8Ul9URVhUX0ZJRUxEfFJfVEVYVF9GSUVMRF9MQUJFTHxSX1RPR0dMRXxUUklNX0xFQURJTkd8VFJJTV9MRUFESU5HX0FORF9UUkFJTElOR3xUUklNX1JFRFVOREFOVHxUUklNX1RSQUlMSU5HfFZPSUR8V0FSTilcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxGYWxzZXxOT3xOb3xUUlVFfFRydWV8WUVTfFllc3xmYWxzZXxub3x0cnVlfHllcylcXGIvLFxuXHQndmFyaWFibGUnOiAvXFxiKD86UHNsRGVidWd8ZXJybm98ZXhpdF9zdGF0dXMpXFxiLyxcblx0J2J1aWx0aW4nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OlBzbEV4ZWN1dGV8UHNsRnVuY3Rpb25DYWxsfFBzbEZ1bmN0aW9uRXhpc3RzfFBzbFNldE9wdGlvbnN8X3NubXBfZGVidWd8YWNvc3xhZGRfZGlhcnl8YW5ub3RhdGV8YW5ub3RhdGVfZ2V0fGFzY2lpX3RvX2ViY2RpY3xhc2N0aW1lfGFzaW58YXRhbnxhdGV4aXR8YmF0Y2hfc2V0fGJsYWNrb3V0fGNhdHxjZWlsfGNoYW5fZXhpc3RzfGNoYW5nZV9zdGF0ZXxjbG9zZXxjb2RlX2N2dHxjb25kX3NpZ25hbHxjb25kX3dhaXR8Y29uc29sZV90eXBlfGNvbnZlcnRfYmFzZXxjb252ZXJ0X2RhdGV8Y29udmVydF9sb2NhbGVfZGF0ZXxjb3N8Y29zaHxjcmVhdGV8ZGF0ZXxkY2dldF90ZXh0fGRlc3Ryb3l8ZGVzdHJveV9sb2NrfGRnZXRfdGV4dHxkaWZmZXJlbmNlfGR1bXBfaGlzdHxlYmNkaWNfdG9fYXNjaWl8ZW5jcnlwdHxldmVudF9hcmNoaXZlfGV2ZW50X2NhdGFsb2dfZ2V0fGV2ZW50X2NoZWNrfGV2ZW50X3F1ZXJ5fGV2ZW50X3JhbmdlX21hbmFnZXxldmVudF9yYW5nZV9xdWVyeXxldmVudF9yZXBvcnR8ZXZlbnRfc2NoZWR1bGV8ZXZlbnRfdHJpZ2dlcnxldmVudF90cmlnZ2VyMnxleGVjdXRlfGV4aXN0c3xleHB8ZmFic3xmaWxlfGZsb29yfGZtb2R8Zm9wZW58ZnNlZWt8ZnRlbGx8ZnVsbF9kaXNjb3Zlcnl8Z2V0fGdldF9jaGFuX2luZm98Z2V0X3Jhbmdlc3xnZXRfdGV4dHxnZXRfdmFyc3xnZXRlbnZ8Z2V0aG9zdGluZm98Z2V0cGlkfGdldHBuYW1lfGdyZXB8aGlzdG9yeXxoaXN0b3J5X2dldF9yZXRlbnRpb258aW5fdHJhbnNpdGlvbnxpbmRleHxpbnR8aW50ZXJuYWx8aW50ZXJzZWN0aW9ufGlzX3Zhcnxpc251bWJlcnxqb2lufGtpbGx8bGVuZ3RofGxpbmVzfGxvY2t8bG9ja19pbmZvfGxvZ3xsb2cxMHxsb2dlfG1hdGNobGluZXxtc2dfY2hlY2t8bXNnX2dldF9mb3JtYXR8bXNnX2dldF9zZXZlcml0eXxtc2dfcHJpbnRmfG1zZ19zcHJpbnRmfG50aGFyZ3xudGhhcmdmfG50aGxpbmV8bnRobGluZWZ8bnVtX2J5dGVzfG51bV9jb25zb2xlc3xwY29uZmlnfHBvcGVufHBvcGxpbmVzfHBvd3xwcmludHxwcmludGZ8cHJvY19leGlzdHN8cHJvY2Vzc3xyYW5kb218cmVhZHxyZWFkbG58cmVmcmVzaF9wYXJhbWV0ZXJzfHJlbW90ZV9jaGVja3xyZW1vdGVfY2xvc2V8cmVtb3RlX2V2ZW50X3F1ZXJ5fHJlbW90ZV9ldmVudF90cmlnZ2VyfHJlbW90ZV9maWxlX3NlbmR8cmVtb3RlX29wZW58cmVtb3ZlfHJlcGxhY2V8cmluZGV4fHNlY19jaGVja19wcml2fHNlY19zdG9yZV9nZXR8c2VjX3N0b3JlX3NldHxzZXR8c2V0X2FsYXJtX3Jhbmdlc3xzZXRfbG9jYWxlfHNoYXJlfHNpbnxzaW5ofHNsZWVwfHNubXBfYWdlbnRfY29uZmlnfHNubXBfYWdlbnRfc3RhcnR8c25tcF9hZ2VudF9zdG9wfHNubXBfY2xvc2V8c25tcF9jb25maWd8c25tcF9nZXR8c25tcF9nZXRfbmV4dHxzbm1wX2hfZ2V0fHNubXBfaF9nZXRfbmV4dHxzbm1wX2hfc2V0fHNubXBfb3Blbnxzbm1wX3NldHxzbm1wX3RyYXBfaWdub3JlfHNubXBfdHJhcF9saXN0ZW58c25tcF90cmFwX3JhaXNlX3N0ZF90cmFwfHNubXBfdHJhcF9yZWNlaXZlfHNubXBfdHJhcF9yZWdpc3Rlcl9pbXxzbm1wX3RyYXBfc2VuZHxzbm1wX3dhbGt8c29wZW58c29ydHxzcGxpdGxpbmV8c3ByaW50ZnxzcXJ0fHNyYW5kb218c3RyX3JlcGVhdHxzdHJjYXNlY21wfHN1YnNldHxzdWJzdHJ8c3lzdGVtfHRhaWx8dGFufHRhbmh8dGV4dF9kb21haW58dGltZXx0bXBuYW18dG9sb3dlcnx0b3VwcGVyfHRyYWNlX3BzbF9wcm9jZXNzfHRyaW18dW5pb258dW5pcXVlfHVubG9ja3x1bnNldHx2YV9hcmd8dmFfc3RhcnR8d3JpdGUpXFxiLyxcblx0XHRhbGlhczogJ2J1aWx0aW4tZnVuY3Rpb24nXG5cdH0sXG5cdCdmb3JlYWNoLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiZm9yZWFjaFxccysoPzooPzpcXHcrXFxifFwiKD86XFxcXC58W15cXFxcXCJdKSpcIilcXHMrKXswLDJ9KVtfYS16QS1aXVxcdyooPz1cXHMqXFwoKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYltfYS16XVxcdypcXGIoPz1cXHMqXFwoKS9pLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4WzAtOWEtZl0rfFxcZCsoPzpcXC5cXGQrKT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8JiY9P3xcXHxcXHw9P3w8PD0/fD4+PT98Wz0hXX58Wy0rKi8lJnxeIT08Pl09P3xcXC58Wzo/XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXTssXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5wY2F4aXMgPSB7XG5cdCdzdHJpbmcnOiAvXCJbXlwiXSpcIi8sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8oKD86Xnw7KVxccyopWy1BLVpcXGRdKyg/OlxccypcXFtbLVxcd10rXFxdKT8oPzpcXHMqXFwoXCJbXlwiXSpcIig/OixcXHMqXCJbXlwiXSpcIikqXFwpKT8oPz1cXHMqPSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXlstQS1aXFxkXSsvLFxuXHRcdFx0J2xhbmd1YWdlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVxcW1stXFx3XStcXF0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0XHQncHJvcGVydHknOiAvWy1cXHddKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdWIta2V5Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCh8XFwpJHwsL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvPS8sXG5cdCd0bGlzdCc6IHtcblx0XHRwYXR0ZXJuOiAvVExJU1RcXHMqXFwoXFxzKlxcdysoPzooPzpcXHMqLFxccypcIlteXCJdKlwiKSt8XFxzKixcXHMqXCJbXlwiXSpcIi1cIlteXCJdKlwiKT9cXHMqXFwpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnVuY3Rpb24nOiAvXlRMSVNULyxcblx0XHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFxzKlxcKFxccyopXFx3Ky8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1wiW15cIl0qXCIvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdLyxcblx0XHRcdCdvcGVyYXRvcic6IC8tL1xuXHRcdH1cblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1s7LF0vLFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpXFxkKyg/OlxcLlxcZCspPyg/IVxcUykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Jvb2xlYW4nOiAvTk98WUVTLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy5weCA9IFByaXNtLmxhbmd1YWdlcy5wY2F4aXM7XG5cblByaXNtLmxhbmd1YWdlcy5wZW9wbGVjb2RlID0ge1xuXHQnY29tbWVudCc6IFJlZ0V4cChbXG5cdFx0Ly8gQy1zdHlsZSBtdWx0aWxpbmUgY29tbWVudHNcblx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8uc291cmNlLFxuXHRcdC8vIFJFTSBjb21tZW50c1xuXHRcdC9cXGJSRU1bXjtdKjsvLnNvdXJjZSxcblx0XHQvLyBOZXN0ZWQgPCogKj4gY29tbWVudHNcblx0XHQvPFxcKig/OltePCpdfFxcKig/IT4pfDwoPyFcXCopfDxcXCooPzooPyFcXCo+KVtcXHNcXFNdKSpcXCo+KSpcXCo+Ly5zb3VyY2UsXG5cdFx0Ly8gLysgKy8gY29tbWVudHNcblx0XHQvXFwvXFwrW1xcc1xcU10qP1xcK1xcLy8uc291cmNlLFxuXHRdLmpvaW4oJ3wnKSksXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLycoPzonJ3xbXidcXHJcXG5dKSonKD8hJyl8XCIoPzpcIlwifFteXCJcXHJcXG5dKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC8lXFx3Ky8sXG5cdCdmdW5jdGlvbi1kZWZpbml0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXlxcdy1dKSg/OmZ1bmN0aW9ufG1ldGhvZClcXHMrKVxcdysvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXi1cXHddKSg/OmFzfGNhdGNofGNsYXNzfGNvbXBvbmVudHxjcmVhdGV8ZXh0ZW5kc3xnbG9iYWx8aW1wbGVtZW50c3xpbnN0YW5jZXxsb2NhbHxvZnxwcm9wZXJ0eXxyZXR1cm5zKVxccyspXFx3Kyg/OjpcXHcrKSovaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLzovXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxhbGlhc3xhc3xjYXRjaHxjbGFzc3xjb21wb25lbnR8Y29uc3RhbnR8Y3JlYXRlfGRlY2xhcmV8ZWxzZXxlbmQtKD86Y2xhc3N8ZXZhbHVhdGV8Zm9yfGZ1bmN0aW9ufGdldHxpZnxtZXRob2R8c2V0fHRyeXx3aGlsZSl8ZXZhbHVhdGV8ZXh0ZW5kc3xmb3J8ZnVuY3Rpb258Z2V0fGdsb2JhbHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnN0YW5jZXxsaWJyYXJ5fGxvY2FsfG1ldGhvZHxudWxsfG9mfG91dHxwZW9wbGVDb2RlfHByaXZhdGV8cHJvZ3JhbXxwcm9wZXJ0eXxwcm90ZWN0ZWR8cmVhZG9ubHl8cmVmfHJlcGVhdHxyZXR1cm5zP3xzZXR8c3RlcHx0aGVufHRocm93fHRvfHRyeXx1bnRpbHx2YWx1ZXx3aGVuKD86LW90aGVyKT98d2hpbGUpXFxiL2ksXG5cdCdvcGVyYXRvci1rZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphbmR8bm90fG9yKVxcYi9pLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9bX2Etel1cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQnb3BlcmF0b3InOiAvPD58Wzw+XT0/fCE9fFxcKlxcKnxbLSsqL3w9QF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWzouOywoKVtcXF1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBjb2RlID0gUHJpc20ubGFuZ3VhZ2VzLnBlb3BsZWNvZGU7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgYnJhY2tldHMgPSAvKD86XFwoKD86W14oKVxcXFxdfFxcXFxbXFxzXFxTXSkqXFwpfFxceyg/Oltee31cXFxcXXxcXFxcW1xcc1xcU10pKlxcfXxcXFsoPzpbXltcXF1cXFxcXXxcXFxcW1xcc1xcU10pKlxcXXw8KD86W148PlxcXFxdfFxcXFxbXFxzXFxTXSkqPikvLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucGVybCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gUE9EXG5cdFx0XHRcdHBhdHRlcm46IC8oXlxccyopPVxcd1tcXHNcXFNdKj89Y3V0LiovbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcJF0pIy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBUT0RPIENvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIEhlcmVkb2MgdG9vLlxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvXFxiKD86cXxxcXxxd3xxeCkoPyFbYS16QS1aMC05XSlcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCcoPzonICtcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQvLyBxLy4uLi9cblx0XHRcdFx0XHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzxdKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIHEgYS4uLmFcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdFx0XHQvKFthLXpBLVowLTldKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIHEoLi4uKVxuXHRcdFx0XHRcdFx0Ly8gcXsuLi59XG5cdFx0XHRcdFx0XHQvLyBxWy4uLl1cblx0XHRcdFx0XHRcdC8vIHE8Li4uPlxuXHRcdFx0XHRcdFx0YnJhY2tldHMsXG5cdFx0XHRcdFx0XS5qb2luKCd8JykgK1xuXHRcdFx0XHRcdCcpJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vIFwiLi4uXCIsIGAuLi5gXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXCJ8YCkoPzooPyFcXDEpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblxuXHRcdFx0Ly8gJy4uLidcblx0XHRcdC8vIEZJWE1FIE11bHRpLWxpbmUgc2luZ2xlLXF1b3RlZCBzdHJpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGFzIHRoZXkgd291bGQgYnJlYWsgdmFyaWFibGVzIGNvbnRhaW5pbmcgJ1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwuKSonLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncmVnZXgnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvXFxiKD86bXxxcikoPyFbYS16QS1aMC05XSlcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCcoPzonICtcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQvLyBtLy4uLi9cblx0XHRcdFx0XHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzxdKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIG0gYS4uLmFcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdFx0XHQvKFthLXpBLVowLTldKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIG0oLi4uKVxuXHRcdFx0XHRcdFx0Ly8gbXsuLi59XG5cdFx0XHRcdFx0XHQvLyBtWy4uLl1cblx0XHRcdFx0XHRcdC8vIG08Li4uPlxuXHRcdFx0XHRcdFx0YnJhY2tldHMsXG5cdFx0XHRcdFx0XS5qb2luKCd8JykgK1xuXHRcdFx0XHRcdCcpJyArXG5cdFx0XHRcdFx0L1ttc2l4cG9kdWFsbmdjXSovLnNvdXJjZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRoZSBsb29rYmVoaW5kcyBwcmV2ZW50IC1zIGZyb20gYnJlYWtpbmdcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdC8oXnxbXi1dKVxcYig/OnN8dHJ8eSkoPyFbYS16QS1aMC05XSlcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCcoPzonICtcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQvLyBzLy4uLi8uLi4vXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdFx0XHRcdFx0LyhbXmEtekEtWjAtOVxcc3soXFxbPF0pKD86KD8hXFwyKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDIoPzooPyFcXDIpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMi8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBzIGEuLi5hLi4uYVxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0XHRcdC8oW2EtekEtWjAtOV0pKD86KD8hXFwzKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDMoPzooPyFcXDMpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMy8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBzKC4uLikoLi4uKVxuXHRcdFx0XHRcdFx0Ly8gc3suLi59ey4uLn1cblx0XHRcdFx0XHRcdC8vIHNbLi4uXVsuLi5dXG5cdFx0XHRcdFx0XHQvLyBzPC4uLj48Li4uPlxuXHRcdFx0XHRcdFx0Ly8gcyguLi4pWy4uLl1cblx0XHRcdFx0XHRcdGJyYWNrZXRzICsgL1xccyovLnNvdXJjZSArIGJyYWNrZXRzLFxuXHRcdFx0XHRcdF0uam9pbignfCcpICtcblx0XHRcdFx0XHQnKScgK1xuXHRcdFx0XHRcdC9bbXNpeHBvZHVhbG5nY2VyXSovLnNvdXJjZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vIC8uLi4vXG5cdFx0XHQvLyBUaGUgbG9vay1haGVhZCB0cmllcyB0byBwcmV2ZW50IHR3byBkaXZpc2lvbnMgb25cblx0XHRcdC8vIHRoZSBzYW1lIGxpbmUgZnJvbSBiZWluZyBoaWdobGlnaHRlZCBhcyByZWdleC5cblx0XHRcdC8vIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS1saW5lIHJlZ2V4LlxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvKD86W15cXC9cXFxcXFxyXFxuXXxcXFxcLikqXFwvW21zaXhwb2R1YWxuZ2NdKig/PVxccyooPzokfFtcXHJcXG4sLjt9KSZ8XFwtKyp+PD4hP15dfCg/OmFuZHxjbXB8ZXF8Z2V8Z3R8bGV8bHR8bmV8bm90fG9yfHh8eG9yKVxcYikpLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8vIEZJWE1FIE5vdCBzdXJlIGFib3V0IHRoZSBoYW5kbGluZyBvZiA6OiwgJywgYW5kICNcblx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHQvLyAke15QT1NUTUFUQ0h9XG5cdFx0XHQvWyYqJEAlXVxce1xcXltBLVpdK1xcfS8sXG5cdFx0XHQvLyAkXlZcblx0XHRcdC9bJiokQCVdXFxeW0EtWl9dLyxcblx0XHRcdC8vICR7Li4ufVxuXHRcdFx0L1smKiRAJV0jPyg/PVxceykvLFxuXHRcdFx0Ly8gJGZvb1xuXHRcdFx0L1smKiRAJV0jPyg/Oig/Ojo6KSonPyg/IVxcZClbXFx3JF0rKD8hW1xcdyRdKSkrKD86OjopKi8sXG5cdFx0XHQvLyAkMVxuXHRcdFx0L1smKiRAJV1cXGQrLyxcblx0XHRcdC8vICRfLCBAXywgJSFcblx0XHRcdC8vIFRoZSBuZWdhdGl2ZSBsb29rYWhlYWQgcHJldmVudHMgZnJvbSBicmVha2luZyB0aGUgJT0gb3BlcmF0b3Jcblx0XHRcdC8oPyElPSlbJEAlXVshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BbXFxcXFxcXV5fYHt8fX5dL1xuXHRcdF0sXG5cdFx0J2ZpbGVoYW5kbGUnOiB7XG5cdFx0XHQvLyA8PiwgPEZPTz4sIF9cblx0XHRcdHBhdHRlcm46IC88KD8hWzw9XSlcXFMqPz58XFxiX1xcYi8sXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXHRcdCd2LXN0cmluZyc6IHtcblx0XHRcdC8vIHYxLjIsIDEuMi4zXG5cdFx0XHRwYXR0ZXJuOiAvdlxcZCsoPzpcXC5cXGQrKSp8XFxkKyg/OlxcLlxcZCspezIsfS8sXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxic3ViWyBcXHRdKylcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFueXxicmVha3xjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkaWV8ZG98ZWxzZXxlbHNpZnxldmFsfGZvcnxmb3JlYWNofGdpdmVufGdvdG98aWZ8bGFzdHxsb2NhbHxteXxuZXh0fG91cnxwYWNrYWdlfHByaW50fHJlZG98cmVxdWlyZXxyZXR1cm58c2F5fHN0YXRlfHN1Ynxzd2l0Y2h8dW5kZWZ8dW5sZXNzfHVudGlsfHVzZXx3aGVufHdoaWxlKVxcYi8sXG5cdFx0J251bWJlcic6IC9cXGIoPzoweFtcXGRBLUZhLWZdKD86Xz9bXFxkQS1GYS1mXSkqfDBiWzAxXSg/Ol8/WzAxXSkqfCg/Oig/OlxcZCg/Ol8/XFxkKSopP1xcLik/XFxkKD86Xz9cXGQpKig/OltFZV1bKy1dP1xcZCspPylcXGIvLFxuXHRcdCdvcGVyYXRvcic6IC8tW3J3eG9SV1hPZXpzZmRscFNiY3R1Z2tUQk1BQ11cXGJ8XFwrWys9XT98LVstPT5dP3xcXCpcXCo/PT98XFwvXFwvPz0/fD1bPX4+XT98flt+PV0/fFxcfFxcfD89P3wmJj89P3w8KD86PT4/fDw9Pyk/fD4+Pz0/fCFbfj1dP3xbJV5dPT98XFwuKD86PXxcXC5cXC4/KT98W1xcXFw/XXxcXGJ4KD86PXxcXGIpfFxcYig/OmFuZHxjbXB8ZXF8Z2V8Z3R8bGV8bHR8bmV8bm90fG9yfHhvcilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLDpdL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgdHlwZUV4cHJlc3Npb24gPSAvKD86XFxiW2EtekEtWl1cXHcqfFt8XFxcXFtcXF1dKSsvLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucGhwZG9jID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YWRvY2xpa2UnLCB7XG5cdFx0J3BhcmFtZXRlcic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKEAoPzpnbG9iYWx8cGFyYW18cHJvcGVydHkoPzotcmVhZHwtd3JpdGUpP3x2YXIpXFxcXHMrKD86JyArIHR5cGVFeHByZXNzaW9uICsgJ1xcXFxzKyk/KVxcXFwkXFxcXHcrJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwaHBkb2MnLCAna2V5d29yZCcsIHtcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcoQCg/Omdsb2JhbHxwYWNrYWdlfHBhcmFtfHByb3BlcnR5KD86LXJlYWR8LXdyaXRlKT98cmV0dXJufHN1YnBhY2thZ2V8dGhyb3dzfHZhcilcXFxccyspJyArIHR5cGVFeHByZXNzaW9uKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXJyYXl8Ym9vbHxib29sZWFufGNhbGxiYWNrfGRvdWJsZXxmYWxzZXxmbG9hdHxpbnR8aW50ZWdlcnxtaXhlZHxudWxsfG9iamVjdHxyZXNvdXJjZXxzZWxmfHN0cmluZ3x0cnVlfHZvaWQpXFxiLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW3xcXFxcW1xcXSgpXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhZG9jbGlrZS5hZGRTdXBwb3J0KCdwaHAnLCBQcmlzbS5sYW5ndWFnZXMucGhwZG9jKTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwaHAnLCAndmFyaWFibGUnLCB7XG5cdCd0aGlzJzoge1xuXHRcdHBhdHRlcm46IC9cXCR0aGlzXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdnbG9iYWwnOiAvXFwkKD86R0xPQkFMU3xIVFRQX1JBV19QT1NUX0RBVEF8Xyg/OkNPT0tJRXxFTlZ8RklMRVN8R0VUfFBPU1R8UkVRVUVTVHxTRVJWRVJ8U0VTU0lPTil8YXJnY3xhcmd2fGh0dHBfcmVzcG9uc2VfaGVhZGVyfHBocF9lcnJvcm1zZylcXGIvLFxuXHQnc2NvcGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYltcXHdcXFxcXSs6Oi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGIoPzpwYXJlbnR8c2VsZnxzdGF0aWMpXFxiLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86OnxcXFxcL1xuXHRcdH1cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHZhcmlhYmxlID0gL1xcJFxcdyt8JVthLXpdKyUvO1xuXG5cdHZhciBhcnJvd0F0dHIgPSAvXFxbW15bXFxdXSpcXF0vLnNvdXJjZTtcblx0dmFyIGFycm93RGlyZWN0aW9uID0gLyg/Oltkcmx1XXxkb3xkb3dufGxlfGxlZnR8cml8cmlnaHR8dXApLy5zb3VyY2U7XG5cdHZhciBhcnJvd0JvZHkgPSAnKD86LSsnICsgYXJyb3dEaXJlY3Rpb24gKyAnLSt8XFxcXC4rJyArIGFycm93RGlyZWN0aW9uICsgJ1xcXFwuK3wtKyg/OicgKyBhcnJvd0F0dHIgKyAnLSopP3wnICsgYXJyb3dBdHRyICsgJy0rfFxcXFwuKyg/OicgKyBhcnJvd0F0dHIgKyAnXFxcXC4qKT98JyArIGFycm93QXR0ciArICdcXFxcLispJztcblx0dmFyIGFycm93TGVmdCA9IC8oPzo8ezEsMn18XFwvezEsMn18XFxcXHsxLDJ9fDxcXHx8WyMqXit9eG9dKS8uc291cmNlO1xuXHR2YXIgYXJyb3dSaWdodCA9IC8oPzo+ezEsMn18XFwvezEsMn18XFxcXHsxLDJ9fFxcfD58WyMqXit7eG9dKS8uc291cmNlO1xuXHR2YXIgYXJyb3dQcmVmaXggPSAvW1s/XT9bb3hdPy8uc291cmNlO1xuXHR2YXIgYXJyb3dTdWZmaXggPSAvW294XT9bXFxdP10/Ly5zb3VyY2U7XG5cdHZhciBhcnJvdyA9XG5cdFx0YXJyb3dQcmVmaXggK1xuXHRcdCcoPzonICtcblx0XHRhcnJvd0JvZHkgKyBhcnJvd1JpZ2h0ICtcblx0XHQnfCcgK1xuXHRcdGFycm93TGVmdCArIGFycm93Qm9keSArICcoPzonICsgYXJyb3dSaWdodCArICcpPycgK1xuXHRcdCcpJyArXG5cdFx0YXJyb3dTdWZmaXg7XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydwbGFudC11bWwnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86Jy4qfFxcLydbXFxzXFxTXSo/J1xcLykvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSEuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKilAKD86ZW5kfHN0YXJ0KXVtbFxcYi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblxuXHRcdCdhcnJvdyc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W14tLjw+P3xcXFxcW1xcXW94XSkvLnNvdXJjZSArIGFycm93ICsgLyg/IVstLjw+P3xcXFxcXFxdb3hdKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcWylbXltcXF1dKyg/PVxcXSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbKD89JHxcXF0pfF5cXF0vXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCd0ZXh0Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFtbIFxcdF0qW1xcclxcbl0rKD8hW1xcclxcbl0pKVteXFxdXSooPz1cXF0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXG5cdFx0J2tleXdvcmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD86YWJzdHJhY3RcXHMrY2xhc3N8ZW5kXFxzKyg/OmJveHxmb3JrfGdyb3VwfG1lcmdlfG5vdGV8cmVmfHNwbGl0fHRpdGxlKXwoPzpmb3JrfHNwbGl0KSg/OlxccythZ2Fpbik/fGFjdGl2YXRlfGFjdG9yfGFnZW50fGFsdHxhbm5vdGF0aW9ufGFydGlmYWN0fGF1dG9hY3RpdmF0ZXxhdXRvbnVtYmVyfGJhY2t3YXJkfGJpbmFyeXxib3VuZGFyeXxib3h8YnJlYWt8Y2FwdGlvbnxjYXJkfGNhc2V8Y2lyY2xlfGNsYXNzfGNsb2NrfGNsb3VkfGNvbGxlY3Rpb25zfGNvbXBvbmVudHxjb25jaXNlfGNvbnRyb2x8Y3JlYXRlfGNyaXRpY2FsfGRhdGFiYXNlfGRlYWN0aXZhdGV8ZGVzdHJveXxkZXRhY2h8ZGlhbW9uZHxlbHNlfGVsc2VpZnxlbmR8ZW5kW2hyXW5vdGV8ZW5kaWZ8ZW5kc3dpdGNofGVuZHdoaWxlfGVudGl0eXxlbnVtfGZpbGV8Zm9sZGVyfGZvb3RlcnxmcmFtZXxncm91cHxbaHJdP25vdGV8aGVhZGVyfGhleGFnb258aGlkZXxpZnxpbnRlcmZhY2V8bGFiZWx8bGVnZW5kfGxvb3B8bWFwfG5hbWVzcGFjZXxuZXR3b3JrfG5ld3BhZ2V8bm9kZXxud2RpYWd8b2JqZWN0fG9wdHxwYWNrYWdlfHBhZ2V8cGFyfHBhcnRpY2lwYW50fHBlcnNvbnxxdWV1ZXxyZWN0YW5nbGV8cmVmfHJlbW92ZXxyZXBlYXR8cmVzdG9yZXxyZXR1cm58cm9idXN0fHNjYWxlfHNldHxzaG93fHNraW5wYXJhbXxzdGFja3xzdGFydHxzdGF0ZXxzdG9wfHN0b3JhZ2V8c3dpdGNofHRpdGxlfHRvZ2V0aGVyfHVzZWNhc2V8dXNlY2FzZVxcL3x3aGlsZSkoPz1cXHN8JCkvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0L1xcYig/OmVsc2VpZnxlcXVhbHN8bm90fHdoaWxlKSg/PVxccypcXCgpLyxcblx0XHRcdC9cXGIoPzphc3xpc3x0aGVuKVxcYi9cblx0XHRdLFxuXG5cdFx0J2RpdmlkZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXj09Lis9PSQvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cblx0XHQndGltZSc6IHtcblx0XHRcdHBhdHRlcm46IC9AKD86XFxkKyg/Ols6L11cXGQrKXsyfXxbKy1dP1xcZCt8OlthLXpdXFx3Kig/OlsrLV1cXGQrKT8pXFxiL2ksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXG5cdFx0J2NvbG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyMoPzpbYS16X10rfFthLWZBLUYwLTldKylcXGIvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblxuXHRcdCdwdW5jdHVhdGlvbic6IC9bOiw7KClbXFxde31dfFxcLnszfS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3BsYW50LXVtbCddLmFycm93Lmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlc1sncGxhbnQtdW1sJ107XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydwbGFudHVtbCddID0gUHJpc20ubGFuZ3VhZ2VzWydwbGFudC11bWwnXTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMucGxzcWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdzcWwnLCB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfC0tLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9kYXRhYmFzZS9vcmFjbGUvb3JhY2xlLWRhdGFiYXNlLzIxL2xucGxzL3Bsc3FsLXJlc2VydmVkLXdvcmRzLWtleXdvcmRzLmh0bWxcblx0J2tleXdvcmQnOiAvXFxiKD86QXxBQ0NFU1NJQkxFfEFERHxBR0VOVHxBR0dSRUdBVEV8QUxMfEFMVEVSfEFORHxBTll8QVJSQVl8QVN8QVNDfEFUfEFUVFJJQlVURXxBVVRISUR8QVZHfEJFR0lOfEJFVFdFRU58QkZJTEVfQkFTRXxCSU5BUll8QkxPQl9CQVNFfEJMT0NLfEJPRFl8Qk9USHxCT1VORHxCVUxLfEJZfEJZVEV8Q3xDQUxMfENBTExJTkd8Q0FTQ0FERXxDQVNFfENIQVJ8Q0hBUkFDVEVSfENIQVJTRVR8Q0hBUlNFVEZPUk18Q0hBUlNFVElEfENIQVJfQkFTRXxDSEVDS3xDTE9CX0JBU0V8Q0xPTkV8Q0xPU0V8Q0xVU1RFUnxDTFVTVEVSU3xDT0xBVVRIfENPTExFQ1R8Q09MVU1OU3xDT01NRU5UfENPTU1JVHxDT01NSVRURUR8Q09NUElMRUR8Q09NUFJFU1N8Q09OTkVDVHxDT05TVEFOVHxDT05TVFJVQ1RPUnxDT05URVhUfENPTlRJTlVFfENPTlZFUlR8Q09VTlR8Q1JBU0h8Q1JFQVRFfENSRURFTlRJQUx8Q1VSUkVOVHxDVVJTT1J8Q1VTVE9NREFUVU18REFOR0xJTkd8REFUQXxEQVRFfERBVEVfQkFTRXxEQVl8REVDTEFSRXxERUZBVUxUfERFRklORXxERUxFVEV8REVTQ3xERVRFUk1JTklTVElDfERJUkVDVE9SWXxESVNUSU5DVHxET1VCTEV8RFJPUHxEVVJBVElPTnxFTEVNRU5UfEVMU0V8RUxTSUZ8RU1QVFl8RU5EfEVTQ0FQRXxFWENFUFR8RVhDRVBUSU9OfEVYQ0VQVElPTlN8RVhDTFVTSVZFfEVYRUNVVEV8RVhJU1RTfEVYSVR8RVhURVJOQUx8RkVUQ0h8RklOQUx8RklSU1R8RklYRUR8RkxPQVR8Rk9SfEZPUkFMTHxGT1JDRXxGUk9NfEZVTkNUSU9OfEdFTkVSQUx8R09UT3xHUkFOVHxHUk9VUHxIQVNIfEhBVklOR3xIRUFQfEhJRERFTnxIT1VSfElERU5USUZJRUR8SUZ8SU1NRURJQVRFfElNTVVUQUJMRXxJTnxJTkNMVURJTkd8SU5ERVh8SU5ERVhFU3xJTkRJQ0FUT1J8SU5ESUNFU3xJTkZJTklURXxJTlNFUlR8SU5TVEFOVElBQkxFfElOVHxJTlRFUkZBQ0V8SU5URVJTRUNUfElOVEVSVkFMfElOVE98SU5WQUxJREFURXxJU3xJU09MQVRJT058SkFWQXxMQU5HVUFHRXxMQVJHRXxMRUFESU5HfExFTkdUSHxMRVZFTHxMSUJSQVJZfExJS0V8TElLRTJ8TElLRTR8TElLRUN8TElNSVR8TElNSVRFRHxMT0NBTHxMT0NLfExPTkd8TE9PUHxNQVB8TUFYfE1BWExFTnxNRU1CRVJ8TUVSR0V8TUlOfE1JTlVTfE1JTlVURXxNT0R8TU9ERXxNT0RJRll8TU9OVEh8TVVMVElTRVR8TVVUQUJMRXxOQU1FfE5BTnxOQVRJT05BTHxOQVRJVkV8TkNIQVJ8TkVXfE5PQ09NUFJFU1N8Tk9DT1BZfE5PVHxOT1dBSVR8TlVMTHxOVU1CRVJfQkFTRXxPQkpFQ1R8T0NJQ09MTHxPQ0lEQVRFfE9DSURBVEVUSU1FfE9DSURVUkFUSU9OfE9DSUlOVEVSVkFMfE9DSUxPQkxPQ0FUT1J8T0NJTlVNQkVSfE9DSVJBV3xPQ0lSRUZ8T0NJUkVGQ1VSU09SfE9DSVJPV0lEfE9DSVNUUklOR3xPQ0lUWVBFfE9GfE9MRHxPTnxPTkxZfE9QQVFVRXxPUEVOfE9QRVJBVE9SfE9QVElPTnxPUnxPUkFDTEV8T1JBREFUQXxPUkRFUnxPUkdBTklaQVRJT058T1JMQU5ZfE9STFZBUll8T1RIRVJTfE9VVHxPVkVSTEFQU3xPVkVSUklESU5HfFBBQ0tBR0V8UEFSQUxMRUxfRU5BQkxFfFBBUkFNRVRFUnxQQVJBTUVURVJTfFBBUkVOVHxQQVJUSVRJT058UEFTQ0FMfFBFUlNJU1RBQkxFfFBJUEV8UElQRUxJTkVEfFBMVUdHQUJMRXxQT0xZTU9SUEhJQ3xQUkFHTUF8UFJFQ0lTSU9OfFBSSU9SfFBSSVZBVEV8UFJPQ0VEVVJFfFBVQkxJQ3xSQUlTRXxSQU5HRXxSQVd8UkVBRHxSRUNPUkR8UkVGfFJFRkVSRU5DRXxSRUxJRVNfT058UkVNfFJFTUFJTkRFUnxSRU5BTUV8UkVTT1VSQ0V8UkVTVUxUfFJFU1VMVF9DQUNIRXxSRVRVUk58UkVUVVJOSU5HfFJFVkVSU0V8UkVWT0tFfFJPTExCQUNLfFJPV3xTQU1QTEV8U0FWRXxTQVZFUE9JTlR8U0IxfFNCMnxTQjR8U0VDT05EfFNFR01FTlR8U0VMRUNUfFNFTEZ8U0VQQVJBVEV8U0VRVUVOQ0V8U0VSSUFMSVpBQkxFfFNFVHxTSEFSRXxTSE9SVHxTSVpFfFNJWkVfVHxTT01FfFNQQVJTRXxTUUx8U1FMQ09ERXxTUUxEQVRBfFNRTE5BTUV8U1FMU1RBVEV8U1RBTkRBUkR8U1RBUlR8U1RBVElDfFNURERFVnxTVE9SRUR8U1RSSU5HfFNUUlVDVHxTVFlMRXxTVUJNVUxUSVNFVHxTVUJQQVJUSVRJT058U1VCU1RJVFVUQUJMRXxTVUJUWVBFfFNVTXxTWU5PTllNfFRBQkFVVEh8VEFCTEV8VERPfFRIRXxUSEVOfFRJTUV8VElNRVNUQU1QfFRJTUVaT05FX0FCQlJ8VElNRVpPTkVfSE9VUnxUSU1FWk9ORV9NSU5VVEV8VElNRVpPTkVfUkVHSU9OfFRPfFRSQUlMSU5HfFRSQU5TQUNUSU9OfFRSQU5TQUNUSU9OQUx8VFJVU1RFRHxUWVBFfFVCMXxVQjJ8VUI0fFVOREVSfFVOSU9OfFVOSVFVRXxVTlBMVUd8VU5TSUdORUR8VU5UUlVTVEVEfFVQREFURXxVU0V8VVNJTkd8VkFMSVNUfFZBTFVFfFZBTFVFU3xWQVJJQUJMRXxWQVJJQU5DRXxWQVJSQVl8VkFSWUlOR3xWSUVXfFZJRVdTfFZPSUR8V0hFTnxXSEVSRXxXSElMRXxXSVRIfFdPUkt8V1JBUFBFRHxXUklURXxZRUFSfFpPTkUpXFxiL2ksXG5cdC8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2RhdGFiYXNlL29yYWNsZS9vcmFjbGUtZGF0YWJhc2UvMjEvbG5wbHMvcGxzcWwtbGFuZ3VhZ2UtZnVuZGFtZW50YWxzLmh0bWwjR1VJRC05NkE0MkY3Qy03QTcxLTRCOTAtODI1NS1DQTlDOEJEOTcyMkVcblx0J29wZXJhdG9yJzogLzo9P3w9PnxbPD5efiFdPXxcXC5cXC58XFx8XFx8fFxcKlxcKnxbLSsqLyU8Pj1AXS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwbHNxbCcsICdvcGVyYXRvcicsIHtcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC88PFxccypcXHcrXFxzKj4+Lyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcbn0pO1xuXG4vLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wb3dlcnF1ZXJ5LW0vcG93ZXItcXVlcnktbS1sYW5ndWFnZS1zcGVjaWZpY2F0aW9uXG5cblByaXNtLmxhbmd1YWdlcy5wb3dlcnF1ZXJ5ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3F1b3RlZC1pZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC8jXCIoPzpbXlwiXFxyXFxuXXxcIlwiKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OiMhKT9cIig/OlteXCJcXHJcXG5dfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NvbnN0YW50JzogW1xuXHRcdC9cXGJEYXlcXC4oPzpGcmlkYXl8TW9uZGF5fFNhdHVyZGF5fFN1bmRheXxUaHVyc2RheXxUdWVzZGF5fFdlZG5lc2RheSlcXGIvLFxuXHRcdC9cXGJUcmFjZUxldmVsXFwuKD86Q3JpdGljYWx8RXJyb3J8SW5mb3JtYXRpb258VmVyYm9zZXxXYXJuaW5nKVxcYi8sXG5cdFx0L1xcYk9jY3VycmVuY2VcXC4oPzpBbGx8Rmlyc3R8TGFzdClcXGIvLFxuXHRcdC9cXGJPcmRlclxcLig/OkFzY2VuZGluZ3xEZXNjZW5kaW5nKVxcYi8sXG5cdFx0L1xcYlJvdW5kaW5nTW9kZVxcLig/OkF3YXlGcm9tWmVyb3xEb3dufFRvRXZlbnxUb3dhcmRaZXJvfFVwKVxcYi8sXG5cdFx0L1xcYk1pc3NpbmdGaWVsZFxcLig/OkVycm9yfElnbm9yZXxVc2VOdWxsKVxcYi8sXG5cdFx0L1xcYlF1b3RlU3R5bGVcXC4oPzpDc3Z8Tm9uZSlcXGIvLFxuXHRcdC9cXGJKb2luS2luZFxcLig/OkZ1bGxPdXRlcnxJbm5lcnxMZWZ0QW50aXxMZWZ0T3V0ZXJ8UmlnaHRBbnRpfFJpZ2h0T3V0ZXIpXFxiLyxcblx0XHQvXFxiR3JvdXBLaW5kXFwuKD86R2xvYmFsfExvY2FsKVxcYi8sXG5cdFx0L1xcYkV4dHJhVmFsdWVzXFwuKD86RXJyb3J8SWdub3JlfExpc3QpXFxiLyxcblx0XHQvXFxiSm9pbkFsZ29yaXRobVxcLig/OkR5bmFtaWN8TGVmdEhhc2h8TGVmdEluZGV4fFBhaXJ3aXNlSGFzaHxSaWdodEhhc2h8UmlnaHRJbmRleHxTb3J0TWVyZ2UpXFxiLyxcblx0XHQvXFxiSm9pblNpZGVcXC4oPzpMZWZ0fFJpZ2h0KVxcYi8sXG5cdFx0L1xcYlByZWNpc2lvblxcLig/OkRlY2ltYWx8RG91YmxlKVxcYi8sXG5cdFx0L1xcYlJlbGF0aXZlUG9zaXRpb25cXC5Gcm9tKD86RW5kfFN0YXJ0KVxcYi8sXG5cdFx0L1xcYlRleHRFbmNvZGluZ1xcLig/OkFzY2lpfEJpZ0VuZGlhblVuaWNvZGV8VW5pY29kZXxVdGYxNnxVdGY4fFdpbmRvd3MpXFxiLyxcblx0XHQvXFxiKD86QW55fEJpbmFyeXxEYXRlfERhdGVUaW1lfERhdGVUaW1lWm9uZXxEdXJhdGlvbnxGdW5jdGlvbnxJbnQxNnxJbnQzMnxJbnQ2NHxJbnQ4fExpc3R8TG9naWNhbHxOb25lfE51bWJlcnxSZWNvcmR8VGFibGV8VGV4dHxUaW1lKVxcLlR5cGVcXGIvLFxuXHRcdC9cXGJudWxsXFxiL1xuXHRdLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xlYWNofGVsc2V8ZXJyb3J8aWZ8aW58aXN8bGV0fG1ldGF8bm90fG51bGxhYmxlfG9wdGlvbmFsfG9yfG90aGVyd2lzZXxzZWN0aW9ufHNoYXJlZHx0aGVufHRyeXx0eXBlKVxcYnwjKD86YmluYXJ5fGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWV6b25lfGR1cmF0aW9ufGluZmluaXR5fG5hbnxzZWN0aW9uc3xzaGFyZWR8dGFibGV8dGltZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteI1xcdy5dKVthLXpfXVtcXHcuXSooPz1cXHMqXFwoKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2RhdGEtdHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW55fGFueW5vbm51bGx8YmluYXJ5fGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWV6b25lfGR1cmF0aW9ufGZ1bmN0aW9ufGxpc3R8bG9naWNhbHxub25lfG51bWJlcnxyZWNvcmR8dGFibGV8dGV4dHx0aW1lKVxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpbKy1dPyg/OlxcYlxcZCtcXC4pP1xcYlxcZCt8WystXVxcLlxcZCt8KF58W14uXSlcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogL1stKypcXC8mP0BeXXw8KD86PT4/fD4pP3w+PT98PT4/fFxcLlxcLlxcLj8vLFxuXHQncHVuY3R1YXRpb24nOiAvWyw7XFxbXFxdKCl7fV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucHEgPSBQcmlzbS5sYW5ndWFnZXNbJ3Bvd2VycXVlcnknXTtcblByaXNtLmxhbmd1YWdlcy5tc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzWydwb3dlcnF1ZXJ5J107XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgcG93ZXJzaGVsbCA9IFByaXNtLmxhbmd1YWdlcy5wb3dlcnNoZWxsID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15gXSk8I1tcXHNcXFNdKj8jPi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXmBdKSMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OmBbXFxzXFxTXXxbXmBcIl0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ118JycpKicvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdC8vIE1hdGNoZXMgbmFtZSBzcGFjZXMgYXMgd2VsbCBhcyBjYXN0cywgYXR0cmlidXRlIGRlY29yYXRvcnMuIEZvcmNlIHN0YXJ0aW5nIHdpdGggbGV0dGVyIHRvIGF2b2lkIG1hdGNoaW5nIGFycmF5IGluZGljZXNcblx0XHQvLyBTdXBwb3J0cyB0d28gbGV2ZWxzIG9mIG5lc3RlZCBicmFja2V0cyAoZS5nLiBgW091dHB1dFR5cGUoW1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RbaW50XV0pXWApXG5cdFx0J25hbWVzcGFjZSc6IC9cXFtbYS16XSg/OlxcWyg/OlxcW1teXFxdXSpcXF18W15cXFtcXF1dKSpcXF18W15cXFtcXF1dKSpcXF0vaSxcblx0XHQnYm9vbGVhbic6IC9cXCQoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHRcdCd2YXJpYWJsZSc6IC9cXCRcXHcrXFxiLyxcblx0XHQvLyBDbWRsZXRzIGFuZCBhbGlhc2VzLiBBbGlhc2VzIHNob3VsZCBjb21lIGxhc3QsIG90aGVyd2lzZSBcIndyaXRlXCIgZ2V0cyBwcmVmZXJyZWQgb3ZlciBcIndyaXRlLWhvc3RcIiBmb3IgZXhhbXBsZVxuXHRcdC8vIEdldC1Db21tYW5kIHwgP3sgJF8uTW9kdWxlTmFtZSAtbWF0Y2ggXCJNaWNyb3NvZnQuUG93ZXJTaGVsbC4oVXRpbHxDb3JlfE1hbmFnZW1lbnQpXCIgfVxuXHRcdC8vIEdldC1BbGlhcyB8ID97ICRfLlJlZmVyZW5jZWRDb21tYW5kLk1vZHVsZS5OYW1lIC1tYXRjaCBcIk1pY3Jvc29mdC5Qb3dlclNoZWxsLihVdGlsfENvcmV8TWFuYWdlbWVudClcIiB9XG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0L1xcYig/OkFkZHxBcHByb3ZlfEFzc2VydHxCYWNrdXB8QmxvY2t8Q2hlY2twb2ludHxDbGVhcnxDbG9zZXxDb21wYXJlfENvbXBsZXRlfENvbXByZXNzfENvbmZpcm18Q29ubmVjdHxDb252ZXJ0fENvbnZlcnRGcm9tfENvbnZlcnRUb3xDb3B5fERlYnVnfERlbnl8RGlzYWJsZXxEaXNjb25uZWN0fERpc21vdW50fEVkaXR8RW5hYmxlfEVudGVyfEV4aXR8RXhwYW5kfEV4cG9ydHxGaW5kfEZvckVhY2h8Rm9ybWF0fEdldHxHcmFudHxHcm91cHxIaWRlfEltcG9ydHxJbml0aWFsaXplfEluc3RhbGx8SW52b2tlfEpvaW58TGltaXR8TG9ja3xNZWFzdXJlfE1lcmdlfE1vdmV8TmV3fE9wZW58T3B0aW1pemV8T3V0fFBpbmd8UG9wfFByb3RlY3R8UHVibGlzaHxQdXNofFJlYWR8UmVjZWl2ZXxSZWRvfFJlZ2lzdGVyfFJlbW92ZXxSZW5hbWV8UmVwYWlyfFJlcXVlc3R8UmVzZXR8UmVzaXplfFJlc29sdmV8UmVzdGFydHxSZXN0b3JlfFJlc3VtZXxSZXZva2V8U2F2ZXxTZWFyY2h8U2VsZWN0fFNlbmR8U2V0fFNob3d8U2tpcHxTb3J0fFNwbGl0fFN0YXJ0fFN0ZXB8U3RvcHxTdWJtaXR8U3VzcGVuZHxTd2l0Y2h8U3luY3xUZWV8VGVzdHxUcmFjZXxVbmJsb2NrfFVuZG98VW5pbnN0YWxsfFVubG9ja3xVbnByb3RlY3R8VW5wdWJsaXNofFVucmVnaXN0ZXJ8VXBkYXRlfFVzZXxXYWl0fFdhdGNofFdoZXJlfFdyaXRlKS1bYS16XStcXGIvaSxcblx0XHRcdC9cXGIoPzphY3xjYXR8Y2hkaXJ8Y2xjfGNsaXxjbHB8Y2x2fGNvbXBhcmV8Y29weXxjcHxjcGl8Y3BwfGN2cGF8ZGJwfGRlbHxkaWZmfGRpcnxlYnB8ZWNob3xlcGFsfGVwY3N2fGVwc258ZXJhc2V8ZmN8Zmx8ZnR8Znd8Z2FsfGdicHxnY3xnY2l8Z2NzfGdkcnxnaXxnbHxnbXxncHxncHN8Z3JvdXB8Z3N2fGd1fGd2fGd3bWl8aWV4fGlpfGlwYWx8aXBjc3Z8aXBzbnxpcm18aXdtaXxpd3J8a2lsbHxscHxsc3xtZWFzdXJlfG1pfG1vdW50fG1vdmV8bXB8bXZ8bmFsfG5kcnxuaXxudnxvZ3Z8cG9wZHxwc3xwdXNoZHxwd2R8cmJwfHJkfHJkcnxyZW58cml8cm18cm1kaXJ8cm5pfHJucHxycHxydnxydnBhfHJ3bWl8c2FsfHNhcHN8c2FzdnxzYnB8c2N8c2VsZWN0fHNldHxzaGNtfHNpfHNsfHNsZWVwfHNsc3xzb3J0fHNwfHNwcHN8c3BzdnxzdGFydHxzdnxzd21pfHRlZXx0cmNtfHR5cGV8d3JpdGUpXFxiL2lcblx0XHRdLFxuXHRcdC8vIHBlciBodHRwOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaGg4NDc3NDQuYXNweFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OkJlZ2lufEJyZWFrfENhdGNofENsYXNzfENvbnRpbnVlfERhdGF8RGVmaW5lfERvfER5bmFtaWNQYXJhbXxFbHNlfEVsc2VJZnxFbmR8RXhpdHxGaWx0ZXJ8RmluYWxseXxGb3J8Rm9yRWFjaHxGcm9tfEZ1bmN0aW9ufElmfElubGluZVNjcmlwdHxQYXJhbGxlbHxQYXJhbXxQcm9jZXNzfFJldHVybnxTZXF1ZW5jZXxTd2l0Y2h8VGhyb3d8VHJhcHxUcnl8VW50aWx8VXNpbmd8VmFyfFdoaWxlfFdvcmtmbG93KVxcYi9pLFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXFcpKD86IXwtKD86Yj8oPzphbmR8eD9vcil8YXN8KD86Tm90KT8oPzpDb250YWluc3xJbnxMaWtlfE1hdGNoKXxlcXxnZXxndHxpcyg/Ok5vdCk/fEpvaW58bGV8bHR8bmV8bm90fFJlcGxhY2V8c2hbbHJdKVxcYnwtWy09XT98XFwrWys9XT98WypcXC8lXT0/KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t8e31bXFxdOygpLC5dL1xuXHR9O1xuXG5cdC8vIFZhcmlhYmxlIGludGVycG9sYXRpb24gaW5zaWRlIHN0cmluZ3MsIGFuZCBuZXN0ZWQgZXhwcmVzc2lvbnNcblx0cG93ZXJzaGVsbC5zdHJpbmdbMF0uaW5zaWRlID0ge1xuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdC8vIEFsbG93IGZvciBvbmUgbGV2ZWwgb2YgbmVzdGluZ1xuXHRcdFx0cGF0dGVybjogLyhefFteYF0pXFwkXFwoKD86XFwkXFwoW15cXHJcXG4oKV0qXFwpfCg/IVxcJFxcKClbXlxcclxcbildKSpcXCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogcG93ZXJzaGVsbFxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiBwb3dlcnNoZWxsLmJvb2xlYW4sXG5cdFx0J3ZhcmlhYmxlJzogcG93ZXJzaGVsbC52YXJpYWJsZSxcblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMucHJvY2Vzc2luZyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnRpbnVlfGRlZmF1bHR8ZWxzZXxleHRlbmRzfGZpbmFsfGZvcnxpZnxpbXBsZW1lbnRzfGltcG9ydHxuZXd8bnVsbHxwcml2YXRlfHB1YmxpY3xyZXR1cm58c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRyeXx2b2lkfHdoaWxlKVxcYi8sXG5cdC8vIFNwYWNlcyBhcmUgYWxsb3dlZCBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmVudGhlc2lzXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHQnb3BlcmF0b3InOiAvPFs8PV0/fD5bPj1dP3wmJj98XFx8XFx8P3xbJT9dfFshPStcXC0qXFwvXT0/L1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3Byb2Nlc3NpbmcnLCAnbnVtYmVyJywge1xuXHQvLyBTcGVjaWFsIGNhc2U6IFhNTCBpcyBhIHR5cGVcblx0J2NvbnN0YW50JzogL1xcYig/IVhNTFxcYilbQS1aXVtBLVpcXGRfXStcXGIvLFxuXHQndHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86Ym9vbGVhbnxieXRlfGNoYXJ8Y29sb3J8ZG91YmxlfGZsb2F0fGludHxbQS1aXVxcdyopXFxiLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMucHJvbG9nID0ge1xuXHQvLyBTeW50YXggZGVwZW5kcyBvbiB0aGUgaW1wbGVtZW50YXRpb25cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98JS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gRGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgc3RyaW5ncyBtYXkgYWxsb3cgZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGUtZXNjYXBlXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXDFcXDF8XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMSg/IVxcMSkvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYnVpbHRpbic6IC9cXGIoPzpmeHxmeXx4Zlt4eV0/fHlmeD8pXFxiLyxcblx0Ly8gRklYTUU6IFNob3VsZCB3ZSBsaXN0IGFsbCBudWxsLWFyeSBwcmVkaWNhdGVzIChub3QgZm9sbG93ZWQgYnkgYSBwYXJlbnRoZXNpcykgbGlrZSBoYWx0LCB0cmFjZSwgZXRjLj9cblx0J2Z1bmN0aW9uJzogL1xcYlthLXpdXFx3Kig/Oig/PVxcKCl8XFwvXFxkKykvLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQqKT8vLFxuXHQvLyBDdXN0b20gb3BlcmF0b3JzIGFyZSBhbGxvd2VkXG5cdCdvcGVyYXRvcic6IC9bOlxcXFw9PjxcXC0/KkBcXC87K158ISQuXSt8XFxiKD86aXN8bW9kfG5vdHx4b3IpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9XFxbXFxdLF0vXG59O1xuXG4vLyBUaGFua3MgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9tZXRoZXVzLWNvbW11bml0eS9tb25hY28tcHJvbXFsL2Jsb2IvbWFzdGVyL3NyYy9wcm9tcWwvcHJvbXFsLnRzXG4vLyBBcyB3ZWxsIGFzOiBodHRwczovL2thdXNhbC5jby9ibG9nL3NsYXRlLXByaXNtLWFkZC1uZXctc3ludGF4LXByb21xbC9cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvLyBQcm9tUUwgQWdncmVnYXRpb24gT3BlcmF0b3JzXG5cdC8vIChodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9wcm9tZXRoZXVzL2xhdGVzdC9xdWVyeWluZy9vcGVyYXRvcnMvI2FnZ3JlZ2F0aW9uLW9wZXJhdG9ycylcblx0dmFyIGFnZ3JlZ2F0aW9ucyA9IFtcblx0XHQnc3VtJyxcblx0XHQnbWluJyxcblx0XHQnbWF4Jyxcblx0XHQnYXZnJyxcblx0XHQnZ3JvdXAnLFxuXHRcdCdzdGRkZXYnLFxuXHRcdCdzdGR2YXInLFxuXHRcdCdjb3VudCcsXG5cdFx0J2NvdW50X3ZhbHVlcycsXG5cdFx0J2JvdHRvbWsnLFxuXHRcdCd0b3BrJyxcblx0XHQncXVhbnRpbGUnXG5cdF07XG5cblx0Ly8gUHJvbVFMIHZlY3RvciBtYXRjaGluZyArIHRoZSBieSBhbmQgd2l0aG91dCBjbGF1c2VzXG5cdC8vIChodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9wcm9tZXRoZXVzL2xhdGVzdC9xdWVyeWluZy9vcGVyYXRvcnMvI3ZlY3Rvci1tYXRjaGluZylcblx0dmFyIHZlY3Rvck1hdGNoaW5nID0gW1xuXHRcdCdvbicsXG5cdFx0J2lnbm9yaW5nJyxcblx0XHQnZ3JvdXBfcmlnaHQnLFxuXHRcdCdncm91cF9sZWZ0Jyxcblx0XHQnYnknLFxuXHRcdCd3aXRob3V0Jyxcblx0XTtcblxuXHQvLyBQcm9tUUwgb2Zmc2V0IG1vZGlmaWVyXG5cdC8vIChodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9wcm9tZXRoZXVzL2xhdGVzdC9xdWVyeWluZy9iYXNpY3MvI29mZnNldC1tb2RpZmllcilcblx0dmFyIG9mZnNldE1vZGlmaWVyID0gWydvZmZzZXQnXTtcblxuXHR2YXIga2V5d29yZHMgPSBhZ2dyZWdhdGlvbnMuY29uY2F0KHZlY3Rvck1hdGNoaW5nLCBvZmZzZXRNb2RpZmllcik7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnByb21xbCA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopIy4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndmVjdG9yLW1hdGNoJzoge1xuXHRcdFx0Ly8gTWF0Y2ggdGhlIGNvbW1hLXNlcGFyYXRlZCBsYWJlbCBsaXN0cyBpbnNpZGUgdmVjdG9yIG1hdGNoaW5nOlxuXHRcdFx0cGF0dGVybjogbmV3IFJlZ0V4cCgnKCg/OicgKyB2ZWN0b3JNYXRjaGluZy5qb2luKCd8JykgKyAnKVxcXFxzKilcXFxcKFteKV0qXFxcXCknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2xhYmVsLWtleSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiW14sXStcXGIvLFxuXHRcdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdL1xuXHRcdFx0fSxcblx0XHR9LFxuXHRcdCdjb250ZXh0LWxhYmVscyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtbXnt9XSpcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdsYWJlbC1rZXknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqKD86PXwhWz1+XSkpLyxcblx0XHRcdFx0XHRhbGlhczogJ2F0dHItbmFtZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdsYWJlbC12YWx1ZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHt8XFx9fD1+P3whWz1+XXwsLyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHQnY29udGV4dC1yYW5nZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcW1tcXHdcXHM6XStcXF0vLCAvLyBbMW1dXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFt8XFxdfDovLFxuXHRcdFx0XHRcdCdyYW5nZS1kdXJhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpcXGQrKD86W3NtaGR3eV18bXMpKStcXGIvaSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGJvZmZzZXRcXHMrKVxcdysvLCAvLyBvZmZzZXQgMW1cblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3JhbmdlLWR1cmF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcYig/OlxcZCsoPzpbc21oZHd5XXxtcykpK1xcYi9pLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiBuZXcgUmVnRXhwKCdcXFxcYig/OicgKyBrZXl3b3Jkcy5qb2luKCd8JykgKyAnKVxcXFxiJywgJ2knKSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0J251bWJlcic6IC9bLStdPyg/Oig/OlxcYlxcZCsoPzpcXC5cXGQrKT98XFxCXFwuXFxkKykoPzplWy0rXT9cXGQrKT9cXGJ8XFxiKD86MHhbMC05YS1mXSt8bmFufGluZilcXGIpL2ksXG5cdFx0J29wZXJhdG9yJzogL1tcXF4qLyUrLV18PT18IT18PD18PHw+PXw+fFxcYig/OmFuZHxvcnx1bmxlc3MpXFxiL2ksXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fTsoKWAsLltcXF1dLyxcblx0fTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnByb3BlcnRpZXMgPSB7XG5cdCdjb21tZW50JzogL15bIFxcdF0qWyMhXS4qJC9tLFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXFxcczo9XSkrKD86ICpbPTpdICooPyEgKXwgKSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHJcXG5dKSsvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvXlsgXFx0XSooPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHM6PV0pKyg/PSAqWz06XXwgKS9tLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWz06XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgYnVpbHRpblR5cGVzID0gL1xcYig/OmJvb2x8Ynl0ZXN8ZG91YmxlfHM/Zml4ZWQoPzozMnw2NCl8ZmxvYXR8W3N1XT9pbnQoPzozMnw2NCl8c3RyaW5nKVxcYi87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnByb3RvYnVmID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxleHRlbmR8bWVzc2FnZXxzZXJ2aWNlKVxccyspW0EtWmEtel9dXFx3Kig/PVxccypcXHspLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpycGNcXHMrXFx3K3xyZXR1cm5zKVxccypcXChcXHMqKD86c3RyZWFtXFxzKyk/KVxcLj9bQS1aYS16X11cXHcqKD86XFwuW0EtWmEtel9dXFx3KikqKD89XFxzKlxcKSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzplbnVtfGV4dGVuZHxleHRlbnNpb25zfGltcG9ydHxtZXNzYWdlfG9uZW9mfG9wdGlvbnxvcHRpb25hbHxwYWNrYWdlfHB1YmxpY3xyZXBlYXRlZHxyZXF1aXJlZHxyZXNlcnZlZHxyZXR1cm5zfHJwYyg/PVxccytcXHcpfHNlcnZpY2V8c3RyZWFtfHN5bnRheHx0bylcXGIoPyFcXHMqPVxccypcXGQpLyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2lcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncHJvdG9idWYnLCAnb3BlcmF0b3InLCB7XG5cdFx0J21hcCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJtYXA8XFxzKltcXHcuXStcXHMqLFxccypbXFx3Ll0rXFxzKj4oPz1cXHMrW2Etel9dXFx3KlxccypbPTtdKS9pLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+LixdLyxcblx0XHRcdFx0J2J1aWx0aW4nOiBidWlsdGluVHlwZXNcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdidWlsdGluJzogYnVpbHRpblR5cGVzLFxuXHRcdCdwb3NpdGlvbmFsLWNsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86XFxifFxcQlxcLilbYS16X11cXHcqKD86XFwuW2Etel9dXFx3KikqKD89XFxzK1thLXpfXVxcdypcXHMqWz07XSkvaSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFtcXHMqKVthLXpfXVxcdyooPz1cXHMqPSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0Ly8gVE9ETzpcblx0Ly8gLSBBZGQgQ1NTIGhpZ2hsaWdodGluZyBpbnNpZGUgPHN0eWxlPiB0YWdzXG5cdC8vIC0gQWRkIHN1cHBvcnQgZm9yIG11bHRpLWxpbmUgY29kZSBibG9ja3Ncblx0Ly8gLSBBZGQgc3VwcG9ydCBmb3IgaW50ZXJwb2xhdGlvbiAje30gYW5kICF7fVxuXHQvLyAtIEFkZCBzdXBwb3J0IGZvciB0YWcgaW50ZXJwb2xhdGlvbiAjW11cblx0Ly8gLSBBZGQgZXhwbGljaXQgc3VwcG9ydCBmb3IgcGxhaW4gdGV4dCB1c2luZyB8XG5cdC8vIC0gQWRkIHN1cHBvcnQgZm9yIG1hcmt1cCBlbWJlZGRlZCBpbiBwbGFpbiB0ZXh0XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnB1ZyA9IHtcblxuXHRcdC8vIE11bHRpbGluZSBzdHVmZiBzaG91bGQgYXBwZWFyIGJlZm9yZSB0aGUgcmVzdFxuXG5cdFx0Ly8gVGhpcyBoYW5kbGVzIGJvdGggc2luZ2xlLWxpbmUgYW5kIG11bHRpLWxpbmUgY29tbWVudHNcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXihbXFx0IF0qKSlcXC9cXC8uKig/Oig/Olxccj9cXG58XFxyKVxcMltcXHQgXS4rKSovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0Ly8gQWxsIHRoZSB0YWctcmVsYXRlZCBwYXJ0IGlzIGluIGxvb2tiZWhpbmRcblx0XHQvLyBzbyB0aGF0IGl0IGNhbiBiZSBoaWdobGlnaHRlZCBieSB0aGUgXCJ0YWdcIiBwYXR0ZXJuXG5cdFx0J211bHRpbGluZS1zY3JpcHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKilzY3JpcHRcXGIuKlxcLltcXHQgXSopKD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cblx0XHQvLyBTZWUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBmb3Iga25vd24gZmlsdGVyc1xuXHRcdCdmaWx0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKikpOi4rKD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWx0ZXItbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXFx3LV0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQndGV4dCc6IC9cXFNbXFxzXFxTXSovLFxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnbXVsdGlsaW5lLXBsYWluLXRleHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKilbXFx3XFwtIy5dK1xcLltcXHQgXSopKD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbWFya3VwJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKik8LisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9LFxuXHRcdCdkb2N0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxcbilbXFx0IF0qKWRvY3R5cGUoPzogLispPy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIFRoaXMgaGFuZGxlIGFsbCBjb25kaXRpb25hbCBhbmQgbG9vcCBrZXl3b3Jkc1xuXHRcdCdmbG93LWNvbnRyb2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/OmNhc2V8ZGVmYXVsdHxlYWNofGVsc2V8aWZ8dW5sZXNzfHdoZW58d2hpbGUpXFxiKD86IC4rKT8vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2VhY2gnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15lYWNoIC4rPyBpblxcYi8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzplYWNofGluKVxcYi8sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdicmFuY2gnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oPzpjYXNlfGRlZmF1bHR8ZWxzZXxpZnx1bmxlc3N8d2hlbnx3aGlsZSlcXGIvLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzphcHBlbmR8YmxvY2t8ZXh0ZW5kc3xpbmNsdWRlfHByZXBlbmQpXFxiLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdtaXhpbic6IFtcblx0XHRcdC8vIERlY2xhcmF0aW9uXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopbWl4aW4gLisvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXm1peGluLyxcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxccypcXCh8XFxzKiQpLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLC5dL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gVXNhZ2Vcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyheW1xcdCBdKilcXCsuKy9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwrXFx3Ky8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3NjcmlwdCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpzY3JpcHQoPzooPzomW14oXSspP1xcKFteKV0rXFwpKSpbXFx0IF0pLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fSxcblxuXHRcdCdwbGFpbi10ZXh0Jzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKig/IS0pW1xcd1xcLSMuXSpbXFx3XFwtXSg/Oig/OiZbXihdKyk/XFwoW14pXStcXCkpKlxcLz9bXFx0IF0pLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd0YWcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/IS0pW1xcd1xcLSMuXSpbXFx3XFwtXSg/Oig/OiZbXihdKyk/XFwoW14pXStcXCkpKlxcLz86Py9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0cmlidXRlcyc6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvJlteKF0rXFwoW14pXStcXCkvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKD8hXFxzKSkoPzpcXHtbXn1dKlxcfXxbXiwpXFxyXFxuXSspLyxcblx0XHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2F0dHItbmFtZSc6IC9bXFx3LV0rKD89XFxzKiE/PXxcXHMqWywpXSkvLFxuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyE9KCksXSsvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdCdhdHRyLWlkJzogLyNbXFx3XFwtXSsvLFxuXHRcdFx0XHQnYXR0ci1jbGFzcyc6IC9cXC5bXFx3XFwtXSsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29kZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyheW1xcdCBdKig/Oi18IT89KSkuKy9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncHVuY3R1YXRpb24nOiAvWy5cXC0hPXxdKy9cblx0fTtcblxuXHR2YXIgZmlsdGVyX3BhdHRlcm4gPSAvKF4oW1xcdCBdKikpOjxmaWx0ZXJfbmFtZT4oPzooPzpcXHI/XFxufFxccig/IVxcbikpKD86XFwyW1xcdCBdLit8XFxzKj8oPz1cXHI/XFxufFxccikpKSsvLnNvdXJjZTtcblxuXHQvLyBOb24gZXhoYXVzdGl2ZSBsaXN0IG9mIGF2YWlsYWJsZSBmaWx0ZXJzIGFuZCBhc3NvY2lhdGVkIGxhbmd1YWdlc1xuXHR2YXIgZmlsdGVycyA9IFtcblx0XHR7IGZpbHRlcjogJ2F0cGwnLCBsYW5ndWFnZTogJ3R3aWcnIH0sXG5cdFx0eyBmaWx0ZXI6ICdjb2ZmZWUnLCBsYW5ndWFnZTogJ2NvZmZlZXNjcmlwdCcgfSxcblx0XHQnZWpzJyxcblx0XHQnaGFuZGxlYmFycycsXG5cdFx0J2xlc3MnLFxuXHRcdCdsaXZlc2NyaXB0Jyxcblx0XHQnbWFya2Rvd24nLFxuXHRcdHsgZmlsdGVyOiAnc2FzcycsIGxhbmd1YWdlOiAnc2NzcycgfSxcblx0XHQnc3R5bHVzJ1xuXHRdO1xuXHR2YXIgYWxsX2ZpbHRlcnMgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBmaWx0ZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXHRcdGZpbHRlciA9IHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnID8geyBmaWx0ZXI6IGZpbHRlciwgbGFuZ3VhZ2U6IGZpbHRlciB9IDogZmlsdGVyO1xuXHRcdGlmIChQcmlzbS5sYW5ndWFnZXNbZmlsdGVyLmxhbmd1YWdlXSkge1xuXHRcdFx0YWxsX2ZpbHRlcnNbJ2ZpbHRlci0nICsgZmlsdGVyLmZpbHRlcl0gPSB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChmaWx0ZXJfcGF0dGVybi5yZXBsYWNlKCc8ZmlsdGVyX25hbWU+JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyLmZpbHRlcjsgfSksICdtJyksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdmaWx0ZXItbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eOltcXHctXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd0ZXh0Jzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0XHRhbGlhczogW2ZpbHRlci5sYW5ndWFnZSwgJ2xhbmd1YWdlLScgKyBmaWx0ZXIubGFuZ3VhZ2VdLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbZmlsdGVyLmxhbmd1YWdlXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwdWcnLCAnZmlsdGVyJywgYWxsX2ZpbHRlcnMpO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnB1cHBldCA9IHtcblx0XHQnaGVyZWRvYyc6IFtcblx0XHRcdC8vIE1hdGNoZXMgdGhlIGNvbnRlbnQgb2YgYSBxdW90ZWQgaGVyZWRvYyBzdHJpbmcgKHN1YmplY3QgdG8gaW50ZXJwb2xhdGlvbilcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhAXFwoXCIoW15cIlxcclxcblxcLyk6XSspXCIoPzpcXC9bbnJ0cyR1TF0qKT9cXCkuKig/Olxccj9cXG58XFxyKSkoPzouKig/Olxccj9cXG58XFxyKD8hXFxuKSkpKj9bIFxcdF0qKD86XFx8WyBcXHRdKik/KD86LVsgXFx0XSopP1xcMi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0Ly8gTWF0Y2hlcyB0aGUgZW5kIHRhZ1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC8oPz1cXFMpLipcXFMoPz0gKiQpL1xuXHRcdFx0XHRcdC8vIFNlZSBpbnRlcnBvbGF0aW9uIGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBNYXRjaGVzIHRoZSBjb250ZW50IG9mIGFuIHVucXVvdGVkIGhlcmVkb2Mgc3RyaW5nIChubyBpbnRlcnBvbGF0aW9uKVxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKEBcXCgoW15cIlxcclxcblxcLyk6XSspKD86XFwvW25ydHMkdUxdKik/XFwpLiooPzpcXHI/XFxufFxccikpKD86LiooPzpcXHI/XFxufFxccig/IVxcbikpKSo/WyBcXHRdKig/OlxcfFsgXFx0XSopPyg/Oi1bIFxcdF0qKT9cXDIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0Ly8gTWF0Y2hlcyB0aGUgZW5kIHRhZ1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC8oPz1cXFMpLipcXFMoPz0gKiQpL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gTWF0Y2hlcyB0aGUgc3RhcnQgdGFnIG9mIGhlcmVkb2Mgc3RyaW5nc1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvQFxcKFwiPyg/OlteXCJcXHJcXG5cXC8pOl0rKVwiPyg/OlxcL1tucnRzJHVMXSopP1xcKS8sXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhcXCgpLis/KD89XFwpKS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbXVsdGlsaW5lLWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQncmVnZXgnOiB7XG5cdFx0XHQvLyBNdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGtleXdvcmQgXCJub2RlXCIgb3IgYSBub24td29yZCBjaGFyXG5cdFx0XHRwYXR0ZXJuOiAvKCg/OlxcYm5vZGVcXHMrfFt+PVxcKFxcW1xceyxdXFxzKnxbPStdPlxccyp8XlxccyopKVxcLyg/OlteXFwvXFxcXF18XFxcXFtcXHNcXFNdKStcXC8oPzpbaW14XStcXGJ8XFxCKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEV4dGVuZGVkIHJlZ2V4ZXMgbXVzdCBoYXZlIHRoZSB4IGZsYWcuIFRoZXkgY2FuIGNvbnRhaW4gc2luZ2xlLWxpbmUgY29tbWVudHMuXG5cdFx0XHRcdCdleHRlbmRlZC1yZWdleCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcLyg/OlteXFwvXFxcXF18XFxcXFtcXHNcXFNdKStcXC9baW1dKnhbaW1dKiQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2NvbW1lbnQnOiAvIy4qL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHQvLyBBbGxvdyBmb3Igb25lIG5lc3RlZCBsZXZlbCBvZiBkb3VibGUgcXVvdGVzIGluc2lkZSBpbnRlcnBvbGF0aW9uXG5cdFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcJFxceyg/OlteJ1wifV18KFtcIiddKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyKStcXH18XFwkKD8hXFx7KXwoPyFcXDEpW15cXFxcJF18XFxcXFtcXHNcXFNdKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkb3VibGUtcXVvdGVkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXCJbXFxzXFxTXSpcIiQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCQoPzo6Oik/XFx3Kyg/Ojo6XFx3KykqLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOjovXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnYXR0ci1uYW1lJzogLyg/OlxcYlxcdyt8XFwqKSg/PVxccyo9PikvLFxuXHRcdCdmdW5jdGlvbic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXC4pKD8hXFxkKVxcdysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0L1xcYig/OmNvbnRhaW58ZGVidWd8ZXJyfGZhaWx8aW5jbHVkZXxpbmZvfG5vdGljZXxyZWFsaXplfHJlcXVpcmV8dGFnfHdhcm5pbmcpXFxifFxcYig/IVxcZClcXHcrKD89XFwoKS9cblx0XHRdLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mXFxkXSt8XFxkKyg/OlxcLlxcZCspPyg/OmUtP1xcZCspPylcXGIvaSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0Ly8gSW5jbHVkZXMgd29yZHMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Vcblx0XHQna2V5d29yZCc6IC9cXGIoPzphcHBsaWNhdGlvbnxhdHRyfGNhc2V8Y2xhc3N8Y29uc3VtZXN8ZGVmYXVsdHxkZWZpbmV8ZWxzZXxlbHNpZnxmdW5jdGlvbnxpZnxpbXBvcnR8aW5oZXJpdHN8bm9kZXxwcml2YXRlfHByb2R1Y2VzfHR5cGV8dW5kZWZ8dW5sZXNzKVxcYi8sXG5cdFx0J2RhdGF0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkFueXxBcnJheXxCb29sZWFufENhbGxhYmxlfENhdGFsb2dlbnRyeXxDbGFzc3xDb2xsZWN0aW9ufERhdGF8RGVmYXVsdHxFbnVtfEZsb2F0fEhhc2h8SW50ZWdlcnxOb3RVbmRlZnxOdW1lcmljfE9wdGlvbmFsfFBhdHRlcm58UmVnZXhwfFJlc291cmNlfFJ1bnRpbWV8U2NhbGFyfFN0cmluZ3xTdHJ1Y3R8VHVwbGV8VHlwZXxVbmRlZnxWYXJpYW50KVxcYi8sXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC89Wz1+Pl0/fCFbPX5dP3w8KD86PFxcfD98Wz1+fC1dKT98Pls+PV0/fC0+P3x+PnxcXHw+Pz4/fFsqXFwvJSs/XXxcXGIoPzphbmR8aW58b3IpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXXt9KCkuLDtdfDorL1xuXHR9O1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uID0gW1xuXHRcdHtcblx0XHRcdC8vIEFsbG93IGZvciBvbmUgbmVzdGVkIGxldmVsIG9mIGJyYWNlcyBpbnNpZGUgaW50ZXJwb2xhdGlvblxuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwkXFx7KD86W14nXCJ7fV18XFx7W159XSpcXH18KFtcIiddKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyKStcXH0vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc2hvcnQtdmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0Ly8gTmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50IHdyb25nIGhpZ2hsaWdodGluZyBvZiBmdW5jdGlvbnNcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspKD8hXFx3K1xcKCkoPzo6Oik/XFx3Kyg/Ojo6XFx3KykqLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLnB1cHBldFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwkKD86OjopP1xcdysoPzo6OlxcdyspKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0fVxuXHRcdH1cblx0XTtcblx0UHJpc20ubGFuZ3VhZ2VzLnB1cHBldFsnaGVyZWRvYyddWzBdLmluc2lkZS5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcblx0UHJpc20ubGFuZ3VhZ2VzLnB1cHBldFsnc3RyaW5nJ10uaW5zaWRlWydkb3VibGUtcXVvdGVkJ10uaW5zaWRlLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uO1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8vIGh0dHBzOi8vYWdyYWVmLmdpdGh1Yi5pby9wdXJlLWRvY3MvcHVyZS5odG1sI2xleGljYWwtbWF0dGVyc1xuXG5cdFByaXNtLmxhbmd1YWdlcy5wdXJlID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC8jIS4rL1xuXHRcdF0sXG5cdFx0J2lubGluZS1sYW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyU8W1xcc1xcU10rPyU+Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnbGFuZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4lPCAqKS1cXCotLis/LVxcKi0vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eJTwuKnwlPiQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IHtcblx0XHRcdC8vIFRoZSBsb29rLWJlaGluZCBwcmV2ZW50cyB3cm9uZyBoaWdobGlnaHRpbmcgb2YgdGhlIC4uIG9wZXJhdG9yXG5cdFx0XHRwYXR0ZXJuOiAvKCg/OlxcLlxcLik/KSg/OlxcYig/OmluZnxuYW4pXFxifFxcYjB4W1xcZGEtZl0rfCg/OlxcYig/OjBiKT9cXGQrKD86XFwuXFxkKyk/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/TD8pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzpOVUxMfGFuc3xicmVha3xidHxjYXNlfGNhdGNofGNkfGNsZWFyfGNvbnN0fGRlZnxkZWx8ZHVtcHxlbHNlfGVuZHxleGl0fGV4dGVybnxmYWxzZXxmb3JjZXxoZWxwfGlmfGluZml4W2xyXT98aW50ZXJmYWNlfGxldHxsc3xtZW18bmFtZXNwYWNlfG5vbmZpeHxvZnxvdGhlcndpc2V8b3V0Zml4fG92ZXJyaWRlfHBvc3RmaXh8cHJlZml4fHByaXZhdGV8cHVibGljfHB3ZHxxdWl0fHJ1bnxzYXZlfHNob3d8c3RhdHN8dGhlbnx0aHJvd3x0cmFjZXx0cnVlfHR5cGV8dW5kZXJyaWRlfHVzaW5nfHdoZW58d2l0aClcXGIvLFxuXHRcdCdmdW5jdGlvbic6IC9cXGIoPzphYnN8YWRkXyg/OmFkZHJ8Y29uc3RkZWZ8KD86ZnVuZGVmfGludGVyZmFjZXxtYWNkZWZ8dHlwZWRlZikoPzpfYXQpP3x2YXJkZWYpfGFsbHxhbnl8YXBwbHA/fGFyaXR5fGJpZ2ludHA/fGJsb2IoPzpfY3JjfF9zaXplfHApP3xib29scD98Ynl0ZV9jP3N0cmluZyg/Ol9wb2ludGVyKT98Ynl0ZV8oPzptYXRyaXh8cG9pbnRlcil8Y2FsbG9jfGNhdHxjYXRtYXB8Y2VpbHxjaGFyW3BzXT98Y2hlY2tfcHRydGFnfGNocnxjbGVhcl9zZW50cnl8Y2xlYXJzeW18Y2xvc3VyZXA/fGNtYXRyaXhwP3xjb2xzP3xjb2xjYXQoPzptYXApP3xjb2xtYXB8Y29scmV2fGNvbHZlY3Rvcig/OnB8c2VxKT98Y29tcGxleCg/Ol9mbG9hdF8oPzptYXRyaXh8cG9pbnRlcil8X21hdHJpeCg/Ol92aWV3KT98X3BvaW50ZXJ8cCk/fGNvbmp8Y29va2VkcD98Y3N0fGNzdHJpbmcoPzpfKD86ZHVwfGxpc3R8dmVjdG9yKSk/fGN1cnJ5Mz98Y3ljbGVuP3xkZWxfKD86Y29uc3RkZWZ8ZnVuZGVmfGludGVyZmFjZXxtYWNkZWZ8dHlwZWRlZnx2YXJkZWYpfGRlbGV0ZXxkaWFnKD86bWF0KT98ZGltfGRtYXRyaXhwP3xkb3xkb3VibGUoPzpfbWF0cml4KD86X3ZpZXcpP3xfcG9pbnRlcnxwKT98ZG93aXRoMz98ZHJvcHxkcm9wd2hpbGV8ZXZhbCg/OmNtZCk/fGV4YWN0cHxmaWx0ZXJ8Zml4fGZpeGl0eXxmbGlwfGZsb2F0KD86X21hdHJpeHxfcG9pbnRlcil8Zmxvb3J8Zm9sZFtscl0xP3xmcmFjfGZyZWV8ZnVucD98ZnVuY3Rpb25wP3xnY2R8Z2V0KD86Xyg/OmJ5dGV8Y29uc3RkZWZ8ZG91YmxlfGZsb2F0fGZ1bmRlZnxpbnQoPzo2NCk/fGludGVyZmFjZSg/Ol90eXBlZGVmKT98bG9uZ3xtYWNkZWZ8cG9pbnRlcnxwdHJ0YWd8c2VudHJ5fHNob3J0fHN0cmluZ3x0eXBlZGVmfHZhcmRlZikpP3xnbG9ic3ltfGhhc2h8aGVhZHxpZHxpbXxpbWF0cml4cD98aW5kZXh8aW5leGFjdHB8aW5mcHxpbml0fGluc2VydHxpbnQoPzpfbWF0cml4KD86X3ZpZXcpP3xfcG9pbnRlcnxwKT98aW50NjRfKD86bWF0cml4fHBvaW50ZXIpfGludGVnZXJwP3xpdGVyYXRlbj98aXRlcndoaWxlfGpvaW58a2V5cz98bGFtYmRhcD98bGFzdCg/OmVycig/OnBvcyk/KT98bGNkfGxpc3RbMnBdP3xsaXN0bWFwfG1ha2VfcHRydGFnfG1hbGxvY3xtYXB8bWF0Y2F0fG1hdHJpeHA/fG1heHxtZW1iZXJ8bWlufG5hbnB8bmFyZ3N8bm1hdHJpeHA/fG51bGx8bnVtYmVycD98b3JkfHBhY2soPzplZCk/fHBvaW50ZXIoPzpfY2FzdHxfdGFnfF90eXBlfHApP3xwb3d8cHJlZHxwdHJ0YWd8cHV0KD86Xyg/OmJ5dGV8ZG91YmxlfGZsb2F0fGludCg/OjY0KT98bG9uZ3xwb2ludGVyfHNob3J0fHN0cmluZykpP3xyYXRpb25hbHA/fHJlfHJlYWxwP3xyZWFsbG9jfHJlY29yZHA/fHJlZGltfHJlZHVjZSg/Ol93aXRoKT98cmVmcD98cmVwZWF0bj98cmV2ZXJzZXxybGlzdHA/fHJvdW5kfHJvd3M/fHJvd2NhdCg/Om1hcCk/fHJvd21hcHxyb3dyZXZ8cm93dmVjdG9yKD86cHxzZXEpP3xzYW1lfHNjYW5bbHJdMT98c2VudHJ5fHNnbnxzaG9ydF8oPzptYXRyaXh8cG9pbnRlcil8c2xpY2V8c21hdHJpeHA/fHNvcnR8c3BsaXR8c3RyfHN0cmNhdHxzdHJlYW18c3RyaWRlfHN0cmluZyg/Ol8oPzpkdXB8bGlzdHx2ZWN0b3IpfHApP3xzdWJkaWFnKD86bWF0KT98c3VibWF0fHN1YnNlcTI/fHN1YnN0cnxzdWNjfHN1cGRpYWcoPzptYXQpP3xzeW1ib2xwP3x0YWlsfHRha2V8dGFrZXdoaWxlfHRodW5rcD98dHJhbnNwb3NlfHRydW5jfHR1cGxlcD98dHlwZXB8dWJ5dGV8dWludCg/OjY0KT98dWxvbmd8dW5jdXJyeTM/fHVucmVmfHVuemlwMz98dXBkYXRlfHVzaG9ydHx2YWxzP3x2YXJwP3x2ZWN0b3IoPzpwfHNlcSk/fHZvaWR8emlwMz98emlwd2l0aDM/KVxcYi8sXG5cdFx0J3NwZWNpYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiX19bYS16XStfX1xcYi9pLFxuXHRcdFx0YWxpYXM6ICdidWlsdGluJ1xuXHRcdH0sXG5cdFx0Ly8gQW55IGNvbWJpbmF0aW9uIG9mIG9wZXJhdG9yIGNoYXJzIGNhbiBiZSBhbiBvcGVyYXRvclxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzc1xuXHRcdCdvcGVyYXRvcic6IC8oPzpbIVwiIyQlJicqKyxcXC0uXFwvOjw9Pj9AXFxcXF5gfH5cXHUwMGExLVxcdTAwYmZcXHUwMGQ3LVxcdTAwZjdcXHUyMGQwLVxcdTJiZmZdfFxcYl8rXFxiKSt8XFxiKD86YW5kfGRpdnxtb2R8bm90fG9yKVxcYi8sXG5cdFx0Ly8gRklYTUU6IEhvdyBjYW4gd2UgcHJldmVudCB8IGFuZCAsIHRvIGJlIGhpZ2hsaWdodGVkIGFzIG9wZXJhdG9yIHdoZW4gdGhleSBhcmUgdXNlZCBhbG9uZT9cblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF07LHxdL1xuXHR9O1xuXG5cdHZhciBpbmxpbmVMYW5ndWFnZXMgPSBbXG5cdFx0J2MnLFxuXHRcdHsgbGFuZzogJ2MrKycsIGFsaWFzOiAnY3BwJyB9LFxuXHRcdCdmb3J0cmFuJ1xuXHRdO1xuXHR2YXIgaW5saW5lTGFuZ3VhZ2VSZSA9IC8lPCAqLVxcKi0gKjxsYW5nPlxcZCogKi1cXCotW1xcc1xcU10rPyU+Ly5zb3VyY2U7XG5cblx0aW5saW5lTGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxhbmcpIHtcblx0XHR2YXIgYWxpYXMgPSBsYW5nO1xuXHRcdGlmICh0eXBlb2YgbGFuZyAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGFsaWFzID0gbGFuZy5hbGlhcztcblx0XHRcdGxhbmcgPSBsYW5nLmxhbmc7XG5cdFx0fVxuXHRcdGlmIChQcmlzbS5sYW5ndWFnZXNbYWxpYXNdKSB7XG5cdFx0XHR2YXIgbyA9IHt9O1xuXHRcdFx0b1snaW5saW5lLWxhbmctJyArIGFsaWFzXSA9IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGlubGluZUxhbmd1YWdlUmUucmVwbGFjZSgnPGxhbmc+JywgbGFuZy5yZXBsYWNlKC8oWy4rKj9cXC9cXFxcKCl7fVxcW1xcXV0pL2csICdcXFxcJDEnKSksICdpJyksXG5cdFx0XHRcdGluc2lkZTogUHJpc20udXRpbC5jbG9uZShQcmlzbS5sYW5ndWFnZXMucHVyZVsnaW5saW5lLWxhbmcnXS5pbnNpZGUpXG5cdFx0XHR9O1xuXHRcdFx0b1snaW5saW5lLWxhbmctJyArIGFsaWFzXS5pbnNpZGUucmVzdCA9IFByaXNtLnV0aWwuY2xvbmUoUHJpc20ubGFuZ3VhZ2VzW2FsaWFzXSk7XG5cdFx0XHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwdXJlJywgJ2lubGluZS1sYW5nJywgbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBDIGlzIHRoZSBkZWZhdWx0IGlubGluZSBsYW5ndWFnZVxuXHRpZiAoUHJpc20ubGFuZ3VhZ2VzLmMpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXMucHVyZVsnaW5saW5lLWxhbmcnXS5pbnNpZGUucmVzdCA9IFByaXNtLnV0aWwuY2xvbmUoUHJpc20ubGFuZ3VhZ2VzLmMpO1xuXHR9XG5cbn0oUHJpc20pKTtcblxuLypcbk9yaWdpbmFsIENvZGUgYnkgQmFzIEdyb290aGVkZGVcbiEhTUFOWSBUSEFOS1MhISBJIG5ldmVyIHdvdWxkIGhhdmUgbWFkZSB0aGlzLCByZWdleCBhbmQgbWUgd2lsbCBuZXZlciBiZSBiZXN0IGZyaWVuZHMgOylcbj09PiBodHRwczovL2NvZGVwZW4uaW8vSW1hZ2luZVByb2dyYW1taW5nL2RldGFpbHMvSll5ZEJ5L1xuc2xpZ2h0bHkgY2hhbmdlZCB0byBwYXNzIGFsbCB0ZXN0c1xuKi9cblxuXG4vLyBQdXJlQmFzaWMgc3VwcG9ydCwgc3RlYWwgc3R1ZmYgZnJvbSBhbnNpLWNcblByaXNtLmxhbmd1YWdlcy5wdXJlYmFzaWMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiAvOy4qLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWxpZ258YW5kfGFzfGJyZWFrfGNhbGxkZWJ1Z2dlcnxjYXNlfGNvbXBpbGVyY2FzZXxjb21waWxlcmRlZmF1bHR8Y29tcGlsZXJlbHNlfGNvbXBpbGVyZWxzZWlmfGNvbXBpbGVyZW5kaWZ8Y29tcGlsZXJlbmRzZWxlY3R8Y29tcGlsZXJlcnJvcnxjb21waWxlcmlmfGNvbXBpbGVyc2VsZWN0fGNvbnRpbnVlfGRhdGF8ZGF0YXNlY3Rpb258ZGVidWd8ZGVidWdsZXZlbHxkZWNsYXJlfGRlY2xhcmVjfGRlY2xhcmVjZGxsfGRlY2xhcmVkbGx8ZGVjbGFyZW1vZHVsZXxkZWZhdWx0fGRlZmluZXxkaW18ZGlzYWJsZWFzbXxkaXNhYmxlZGVidWdnZXJ8ZGlzYWJsZWV4cGxpY2l0fGVsc2V8ZWxzZWlmfGVuYWJsZWFzbXxlbmFibGVkZWJ1Z2dlcnxlbmFibGVleHBsaWNpdHxlbmR8ZW5kZGF0YXNlY3Rpb258ZW5kZGVjbGFyZW1vZHVsZXxlbmRlbnVtZXJhdGlvbnxlbmRpZnxlbmRpbXBvcnR8ZW5kaW50ZXJmYWNlfGVuZG1hY3JvfGVuZG1vZHVsZXxlbmRwcm9jZWR1cmV8ZW5kc2VsZWN0fGVuZHN0cnVjdHVyZXxlbmRzdHJ1Y3R1cmV1bmlvbnxlbmR3aXRofGVudW1lcmF0aW9ufGV4dGVuZHN8ZmFrZXJldHVybnxmb3J8Zm9yZWFjaHxmb3JldmVyfGdsb2JhbHxnb3N1Ynxnb3RvfGlmfGltcG9ydHxpbXBvcnRjfGluY2x1ZGViaW5hcnl8aW5jbHVkZWZpbGV8aW5jbHVkZXBhdGh8aW50ZXJmYWNlfG1hY3JvfG1vZHVsZXxuZXdsaXN0fG5ld21hcHxuZXh0fG5vdHxvcnxwcm9jZWR1cmV8cHJvY2VkdXJlY3xwcm9jZWR1cmVjZGxsfHByb2NlZHVyZWRsbHxwcm9jZWR1cmVyZXR1cm58cHJvdGVjdGVkfHByb3RvdHlwZXxwcm90b3R5cGVjfHJlYWR8cmVkaW18cmVwZWF0fHJlc3RvcmV8cmV0dXJufHJ1bnRpbWV8c2VsZWN0fHNoYXJlZHxzdGF0aWN8c3RlcHxzdHJ1Y3R1cmV8c3RydWN0dXJldW5pb258c3dhcHx0aHJlYWRlZHx0b3x1bnRpbHx3ZW5kfHdoaWxlfHdpdGh8eGluY2x1ZGVmaWxlfHhvcilcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPzpcXC5cXHcrKT9cXHMqKD89XFwoKS8sXG5cdCdudW1iZXInOiAvKD86XFwkW1xcZGEtZl0rfFxcYi0/KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylcXGIvaSxcblx0J29wZXJhdG9yJzogLyg/OkBcXCo/fFxcP3xcXCopXFx3K1xcJD98LVs+LV0/fFxcK1xcKz98IT0/fDw8Pz0/fD4+Pz0/fD09P3wmJj98XFx8P1xcfHxbfl4lPyovQF0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncHVyZWJhc2ljJywgJ2tleXdvcmQnLCB7XG5cdCd0YWcnOiAvI1xcdytcXCQ/Lyxcblx0J2FzbSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSEuKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd0YWcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NvbW1lbnQnOiAvOy4qLyxcblx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvLyBBbm9ueW1vdXMgbGFiZWwgcmVmZXJlbmNlcywgaS5lLjogam1wIEBiXG5cdFx0XHQnbGFiZWwtcmVmZXJlbmNlLWFub255bW91cyc6IHtcblx0XHRcdFx0cGF0dGVybjogLyghXFxzKmpbYS16XStcXHMrKUBbZmJdL2ksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnZmFzbS1sYWJlbCdcblx0XHRcdH0sXG5cdFx0XHQvLyBOYW1lZCBsYWJlbCByZWZlcmVuY2UsIGkuZS46IGpuZSBsYWJlbDFcblx0XHRcdCdsYWJlbC1yZWZlcmVuY2UtYWRkcmVzc2VkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCFcXHMqalthLXpdK1xccyspW0EtWi5fPyRAXVtcXHcuPyRAfiNdKi9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Zhc20tbGFiZWwnXG5cdFx0XHR9LFxuXHRcdFx0J2tleXdvcmQnOiBbXG5cdFx0XHRcdC9cXGIoPzpleHRlcm58Z2xvYmFsKVxcYlteO1xcclxcbl0qL2ksXG5cdFx0XHRcdC9cXGIoPzpDUFV8REVGQVVMVHxGTE9BVClcXGIuKi9cblx0XHRcdF0sXG5cdFx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSohXFxzKilbXFxkYS16XSsoPz1cXHN8JCkvaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnZnVuY3Rpb24taW5saW5lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKDpcXHMqKVtcXGRhLXpdKyg/PVxccykvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnbGFiZWwnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSohXFxzKilbQS1aYS16Ll8/JEBdW1xcdy4/JEB+I10qKD89OikvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmYXNtLWxhYmVsJ1xuXHRcdFx0fSxcblx0XHRcdCdyZWdpc3Rlcic6IC9cXGIoPzpzdFxcZHxbeHl6XW1tXFxkXFxkP3xbY2R0XXJcXGR8clxcZFxcZD9bYndkXT98W2VyXT9bYWJjZF14fFthYmNkXVtobF18W2VyXT8oPzpicHxkaXxzaXxzcCl8W2NkZWZnc11zfG1tXFxkKylcXGIvaSxcblx0XHRcdCdudW1iZXInOiAvKD86XFxifC18KD89XFwkKSkoPzowW2h4XSg/OltcXGRhLWZdKlxcLik/W1xcZGEtZl0rKD86cFsrLV0/XFxkKyk/fFxcZFtcXGRhLWZdK1toeF18XFwkXFxkW1xcZGEtZl0qfDBbb3FdWzAtN10rfFswLTddK1tvcV18MFtieV1bMDFdK3xbMDFdK1tieV18MFtkdF1cXGQrfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpcXC4/ZVsrLV0/XFxkKyk/W2R0XT8pXFxiL2ksXG5cdFx0XHQnb3BlcmF0b3InOiAvW1xcW1xcXSorXFwtLyU8Pj0mfCQhLC46XS9cblx0XHR9XG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnB1cmViYXNpY1snY2xhc3MtbmFtZSddO1xuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5wdXJlYmFzaWNbJ2Jvb2xlYW4nXTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBiZmFzbSA9IFByaXNtLmxhbmd1YWdlc1sncHVyZWJhc2ljJ107XG5cblByaXNtLmxhbmd1YWdlcy5wdXJlc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnaGFza2VsbCcsIHtcblx0J2tleXdvcmQnOiAvXFxiKD86YWRvfGNhc2V8Y2xhc3N8ZGF0YXxkZXJpdmV8ZG98ZWxzZXxmb3JhbGx8aWZ8aW58aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8bW9kdWxlfG5ld3R5cGV8b2Z8cHJpbWl0aXZlfHRoZW58dHlwZXx3aGVyZSlcXGJ8XHUyMjAwLyxcblxuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHQvLyBUaGUgaW1wb3J0ZWQgb3IgaGlkZGVuIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBpbXBvcnRcblx0XHQvLyBzdGF0ZW1lbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZSBleGFjdGx5IGxpa2Vcblx0XHQvLyB3ZSBkbyBmb3IgdGhlIG5hbWVzIGluIHRoZSBwcm9ncmFtLlxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopaW1wb3J0XFxzK1tBLVpdW1xcdyddKig/OlxcLltBLVpdW1xcdyddKikqKD86XFxzK2FzXFxzK1tBLVpdW1xcdyddKig/OlxcLltBLVpdW1xcdyddKikqKT8oPzpcXHMraGlkaW5nXFxiKT8vbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXN8aGlkaW5nfGltcG9ydClcXGIvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cblx0Ly8gVGhlc2UgYXJlIGJ1aWx0aW4gZnVuY3Rpb25zIG9ubHkuIENvbnN0cnVjdG9ycyBhcmUgaGlnaGxpZ2h0ZWQgbGF0ZXIgYXMgYSBjb25zdGFudC5cblx0J2J1aWx0aW4nOiAvXFxiKD86YWJzdXJkfGFkZHxhcHxhcHBlbmR8YXBwbHl8YmV0d2VlbnxiaW5kfGJvdHRvbXxjbGFtcHxjb21wYXJlfGNvbXBhcmluZ3xjb21wb3NlfGNvbmp8Y29uc3R8ZGVncmVlfGRpc2NhcmR8ZGlzanxkaXZ8ZXF8ZmxhcHxmbGlwfGdjZHxpZGVudGl0eXxpZk18am9pbnxsY218bGlmdEExfGxpZnRNMXxtYXB8bWF4fG1lbXB0eXxtaW58bW9kfG11bHxuZWdhdGV8bm90fG5vdEVxfG9uZXxvdGhlcndpc2V8cmVjaXB8c2hvd3xzdWJ8dG9wfHVuaXR8dW5sZXNzfHVubGVzc018dm9pZHx3aGVufHdoZW5NfHplcm8pXFxiLyxcblxuXHQnb3BlcmF0b3InOiBbXG5cdFx0Ly8gSW5maXggb3BlcmF0b3JzXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmhhc2tlbGwub3BlcmF0b3JbMF0sXG5cdFx0Ly8gQVNDSUkgb3BlcmF0b3JzXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmhhc2tlbGwub3BlcmF0b3JbMl0sXG5cdFx0Ly8gQWxsIFVURjE2IFVuaWNvZGUgb3BlcmF0b3Igc3ltYm9sc1xuXHRcdC8vIFRoaXMgcmVnZXggaXMgZXF1aXZhbGVudCB0byAvKD89W1xceDgwLVxcdUZGRkZdKVtcXHB7Z2M9TWF0aF9TeW1ib2x9XFxwe2djPUN1cnJlbmN5X1N5bWJvbH1cXHB7TW9kaWZpZXJfU3ltYm9sfVxccHtPdGhlcl9TeW1ib2x9XS91XG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8zMDA2IGZvciBtb3JlIGRldGFpbHMuXG5cdFx0L1tcXHhhMi1cXHhhNlxceGE4XFx4YTlcXHhhY1xceGFlLVxceGIxXFx4YjRcXHhiOFxceGQ3XFx4ZjdcXHUwMmMyLVxcdTAyYzVcXHUwMmQyLVxcdTAyZGZcXHUwMmU1LVxcdTAyZWJcXHUwMmVkXFx1MDJlZi1cXHUwMmZmXFx1MDM3NVxcdTAzODRcXHUwMzg1XFx1MDNmNlxcdTA0ODJcXHUwNThkLVxcdTA1OGZcXHUwNjA2LVxcdTA2MDhcXHUwNjBiXFx1MDYwZVxcdTA2MGZcXHUwNmRlXFx1MDZlOVxcdTA2ZmRcXHUwNmZlXFx1MDdmNlxcdTA3ZmVcXHUwN2ZmXFx1MDlmMlxcdTA5ZjNcXHUwOWZhXFx1MDlmYlxcdTBhZjFcXHUwYjcwXFx1MGJmMy1cXHUwYmZhXFx1MGM3ZlxcdTBkNGZcXHUwZDc5XFx1MGUzZlxcdTBmMDEtXFx1MGYwM1xcdTBmMTNcXHUwZjE1LVxcdTBmMTdcXHUwZjFhLVxcdTBmMWZcXHUwZjM0XFx1MGYzNlxcdTBmMzhcXHUwZmJlLVxcdTBmYzVcXHUwZmM3LVxcdTBmY2NcXHUwZmNlXFx1MGZjZlxcdTBmZDUtXFx1MGZkOFxcdTEwOWVcXHUxMDlmXFx1MTM5MC1cXHUxMzk5XFx1MTY2ZFxcdTE3ZGJcXHUxOTQwXFx1MTlkZS1cXHUxOWZmXFx1MWI2MS1cXHUxYjZhXFx1MWI3NC1cXHUxYjdjXFx1MWZiZFxcdTFmYmYtXFx1MWZjMVxcdTFmY2QtXFx1MWZjZlxcdTFmZGQtXFx1MWZkZlxcdTFmZWQtXFx1MWZlZlxcdTFmZmRcXHUxZmZlXFx1MjA0NFxcdTIwNTJcXHUyMDdhLVxcdTIwN2NcXHUyMDhhLVxcdTIwOGNcXHUyMGEwLVxcdTIwYmZcXHUyMTAwXFx1MjEwMVxcdTIxMDMtXFx1MjEwNlxcdTIxMDhcXHUyMTA5XFx1MjExNFxcdTIxMTYtXFx1MjExOFxcdTIxMWUtXFx1MjEyM1xcdTIxMjVcXHUyMTI3XFx1MjEyOVxcdTIxMmVcXHUyMTNhXFx1MjEzYlxcdTIxNDAtXFx1MjE0NFxcdTIxNGEtXFx1MjE0ZFxcdTIxNGZcXHUyMThhXFx1MjE4YlxcdTIxOTAtXFx1MjMwN1xcdTIzMGMtXFx1MjMyOFxcdTIzMmItXFx1MjQyNlxcdTI0NDAtXFx1MjQ0YVxcdTI0OWMtXFx1MjRlOVxcdTI1MDAtXFx1Mjc2N1xcdTI3OTQtXFx1MjdjNFxcdTI3YzctXFx1MjdlNVxcdTI3ZjAtXFx1Mjk4MlxcdTI5OTktXFx1MjlkN1xcdTI5ZGMtXFx1MjlmYlxcdTI5ZmUtXFx1MmI3M1xcdTJiNzYtXFx1MmI5NVxcdTJiOTctXFx1MmJmZlxcdTJjZTUtXFx1MmNlYVxcdTJlNTBcXHUyZTUxXFx1MmU4MC1cXHUyZTk5XFx1MmU5Yi1cXHUyZWYzXFx1MmYwMC1cXHUyZmQ1XFx1MmZmMC1cXHUyZmZiXFx1MzAwNFxcdTMwMTJcXHUzMDEzXFx1MzAyMFxcdTMwMzZcXHUzMDM3XFx1MzAzZVxcdTMwM2ZcXHUzMDliXFx1MzA5Y1xcdTMxOTBcXHUzMTkxXFx1MzE5Ni1cXHUzMTlmXFx1MzFjMC1cXHUzMWUzXFx1MzIwMC1cXHUzMjFlXFx1MzIyYS1cXHUzMjQ3XFx1MzI1MFxcdTMyNjAtXFx1MzI3ZlxcdTMyOGEtXFx1MzJiMFxcdTMyYzAtXFx1MzNmZlxcdTRkYzAtXFx1NGRmZlxcdWE0OTAtXFx1YTRjNlxcdWE3MDAtXFx1YTcxNlxcdWE3MjBcXHVhNzIxXFx1YTc4OVxcdWE3OGFcXHVhODI4LVxcdWE4MmJcXHVhODM2LVxcdWE4MzlcXHVhYTc3LVxcdWFhNzlcXHVhYjViXFx1YWI2YVxcdWFiNmJcXHVmYjI5XFx1ZmJiMi1cXHVmYmMxXFx1ZmRmY1xcdWZkZmRcXHVmZTYyXFx1ZmU2NC1cXHVmZTY2XFx1ZmU2OVxcdWZmMDRcXHVmZjBiXFx1ZmYxYy1cXHVmZjFlXFx1ZmYzZVxcdWZmNDBcXHVmZjVjXFx1ZmY1ZVxcdWZmZTAtXFx1ZmZlNlxcdWZmZTgtXFx1ZmZlZVxcdWZmZmNcXHVmZmZkXS9cblx0XVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5wdXJzID0gUHJpc20ubGFuZ3VhZ2VzLnB1cmVzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5weXRob24gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZy1pbnRlcnBvbGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oPzpmfGZyfHJmKSg/OihcIlwiXCJ8JycnKVtcXHNcXFNdKj9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMikvaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0Ly8gXCJ7XCIgPGV4cHJlc3Npb24+IDxvcHRpb25hbCBcIiFzXCIsIFwiIXJcIiwgb3IgXCIhYVwiPiA8b3B0aW9uYWwgXCI6XCIgZm9ybWF0IHNwZWNpZmllcj4gXCJ9XCJcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFtee10pKD86XFx7XFx7KSopXFx7KD8hXFx7KSg/Oltee31dfFxceyg/IVxceykoPzpbXnt9XXxcXHsoPyFcXHspKD86W157fV0pK1xcfSkrXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZm9ybWF0LXNwZWMnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKDopW146KCl7fV0rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2NvbnZlcnNpb24tb3B0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyFbc3JhXSg/PVs6fV0kKS8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzdDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQndHJpcGxlLXF1b3RlZC1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OltydWJdfGJyfHJiKT8oXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxL2ksXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzpbcnViXXxicnxyYik/KFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccylkZWZbIFxcdF0rKVthLXpBLVpfXVxcdyooPz1cXHMqXFwoKS9nLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJjbGFzc1xccyspXFx3Ky9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2RlY29yYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKUBcXHcrKD86XFwuXFx3KykqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogWydhbm5vdGF0aW9uJywgJ3B1bmN0dWF0aW9uJ10sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86Xyg/PVxccyo6KXxhbmR8YXN8YXNzZXJ0fGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8ZmluYWxseXxmb3J8ZnJvbXxnbG9iYWx8aWZ8aW1wb3J0fGlufGlzfGxhbWJkYXxtYXRjaHxub25sb2NhbHxub3R8b3J8cGFzc3xwcmludHxyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86X19pbXBvcnRfX3xhYnN8YWxsfGFueXxhcHBseXxhc2NpaXxiYXNlc3RyaW5nfGJpbnxib29sfGJ1ZmZlcnxieXRlYXJyYXl8Ynl0ZXN8Y2FsbGFibGV8Y2hyfGNsYXNzbWV0aG9kfGNtcHxjb2VyY2V8Y29tcGlsZXxjb21wbGV4fGRlbGF0dHJ8ZGljdHxkaXJ8ZGl2bW9kfGVudW1lcmF0ZXxldmFsfGV4ZWNmaWxlfGZpbGV8ZmlsdGVyfGZsb2F0fGZvcm1hdHxmcm96ZW5zZXR8Z2V0YXR0cnxnbG9iYWxzfGhhc2F0dHJ8aGFzaHxoZWxwfGhleHxpZHxpbnB1dHxpbnR8aW50ZXJufGlzaW5zdGFuY2V8aXNzdWJjbGFzc3xpdGVyfGxlbnxsaXN0fGxvY2Fsc3xsb25nfG1hcHxtYXh8bWVtb3J5dmlld3xtaW58bmV4dHxvYmplY3R8b2N0fG9wZW58b3JkfHBvd3xwcm9wZXJ0eXxyYW5nZXxyYXdfaW5wdXR8cmVkdWNlfHJlbG9hZHxyZXByfHJldmVyc2VkfHJvdW5kfHNldHxzZXRhdHRyfHNsaWNlfHNvcnRlZHxzdGF0aWNtZXRob2R8c3RyfHN1bXxzdXBlcnx0dXBsZXx0eXBlfHVuaWNocnx1bmljb2RlfHZhcnN8eHJhbmdlfHppcClcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGYWxzZXxOb25lfFRydWUpXFxiLyxcblx0J251bWJlcic6IC9cXGIwKD86Yig/Ol8/WzAxXSkrfG8oPzpfP1swLTddKSt8eCg/Ol8/W2EtZjAtOV0pKylcXGJ8KD86XFxiXFxkKyg/Ol9cXGQrKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFxCXFwuXFxkKyg/Ol9cXGQrKSopKD86ZVsrLV0/XFxkKyg/Ol9cXGQrKSopP2o/KD8hXFx3KS9pLFxuXHQnb3BlcmF0b3InOiAvWy0rJT1dPT98IT18Oj18XFwqXFwqPz0/fFxcL1xcLz89P3w8Wzw9Pl0/fD5bPT5dP3xbJnxefl0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucHl0aG9uWydzdHJpbmctaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcblxuUHJpc20ubGFuZ3VhZ2VzLnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBSZXBsYWNlcyBhbGwgcGxhY2Vob2xkZXJzIFwiPDxuPj5cIiBvZiBnaXZlbiBwYXR0ZXJuIHdpdGggdGhlIG4tdGggcmVwbGFjZW1lbnQgKHplcm8gYmFzZWQpLlxuXHQgKlxuXHQgKiBOb3RlOiBUaGlzIGlzIGEgc2ltcGxlIHRleHQgYmFzZWQgcmVwbGFjZW1lbnQuIEJlIGNhcmVmdWwgd2hlbiB1c2luZyBiYWNrcmVmZXJlbmNlcyFcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm4gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50cyBhIGxpc3Qgb2YgcmVwbGFjZW1lbnQgd2hpY2ggY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwYXR0ZXJuIHdpdGggYWxsIHBsYWNlaG9sZGVycyByZXBsYWNlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnRzLlxuXHQgKiBAZXhhbXBsZSByZXBsYWNlKC9hPDwwPj5hLy5zb3VyY2UsIFsvYisvLnNvdXJjZV0pID09PSAvYSg/OmIrKWEvLnNvdXJjZVxuXHQgKi9cblx0ZnVuY3Rpb24gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpIHtcblx0XHRyZXR1cm4gcGF0dGVybi5yZXBsYWNlKC88PChcXGQrKT4+L2csIGZ1bmN0aW9uIChtLCBpbmRleCkge1xuXHRcdFx0cmV0dXJuICcoPzonICsgcmVwbGFjZW1lbnRzWytpbmRleF0gKyAnKSc7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gcmUocGF0dGVybiwgcmVwbGFjZW1lbnRzLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAocmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpLCBmbGFncyB8fCAnJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5lc3RlZCBwYXR0ZXJuIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc3RyaW5nIGA8PHNlbGY+PmAgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHBhdHRlcm4gaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gZGVwdGhMb2cyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBuZXN0ZWQocGF0dGVybiwgZGVwdGhMb2cyKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXB0aExvZzI7IGkrKykge1xuXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXR0ZXJuICsgJyknOyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgJ1teXFxcXHNcXFxcU10nKTtcblx0fVxuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3F1YW50dW0vdXNlci1ndWlkZS9sYW5ndWFnZS90eXBlc3lzdGVtL1xuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3FzaGFycC1sYW5ndWFnZS90cmVlL21haW4vU3BlY2lmaWNhdGlvbnMvTGFuZ3VhZ2UvNV9HcmFtbWFyXG5cdHZhciBrZXl3b3JkS2luZHMgPSB7XG5cdFx0Ly8ga2V5d29yZHMgd2hpY2ggcmVwcmVzZW50IGEgcmV0dXJuIG9yIHZhcmlhYmxlIHR5cGVcblx0XHR0eXBlOiAnQWRqIEJpZ0ludCBCb29sIEN0bCBEb3VibGUgZmFsc2UgSW50IE9uZSBQYXVsaSBQYXVsaUkgUGF1bGlYIFBhdWxpWSBQYXVsaVogUXViaXQgUmFuZ2UgUmVzdWx0IFN0cmluZyB0cnVlIFVuaXQgWmVybycsXG5cdFx0Ly8gYWxsIG90aGVyIGtleXdvcmRzXG5cdFx0b3RoZXI6ICdBZGpvaW50IGFkam9pbnQgYXBwbHkgYXMgYXV0byBib2R5IGJvcnJvdyBib3Jyb3dpbmcgQ29udHJvbGxlZCBjb250cm9sbGVkIGRpc3RyaWJ1dGUgZWxpZiBlbHNlIGZhaWwgZml4dXAgZm9yIGZ1bmN0aW9uIGlmIGluIGludGVybmFsIGludHJpbnNpYyBpbnZlcnQgaXMgbGV0IG11dGFibGUgbmFtZXNwYWNlIG5ldyBuZXd0eXBlIG9wZW4gb3BlcmF0aW9uIHJlcGVhdCByZXR1cm4gc2VsZiBzZXQgdW50aWwgdXNlIHVzaW5nIHdoaWxlIHdpdGhpbidcblx0fTtcblx0Ly8ga2V5d29yZHNcblx0ZnVuY3Rpb24ga2V5d29yZHNUb1BhdHRlcm4od29yZHMpIHtcblx0XHRyZXR1cm4gJ1xcXFxiKD86JyArIHdvcmRzLnRyaW0oKS5yZXBsYWNlKC8gL2csICd8JykgKyAnKVxcXFxiJztcblx0fVxuXHR2YXIga2V5d29yZHMgPSBSZWdFeHAoa2V5d29yZHNUb1BhdHRlcm4oa2V5d29yZEtpbmRzLnR5cGUgKyAnICcgKyBrZXl3b3JkS2luZHMub3RoZXIpKTtcblxuXHQvLyB0eXBlc1xuXHR2YXIgaWRlbnRpZmllciA9IC9cXGJbQS1aYS16X11cXHcqXFxiLy5zb3VyY2U7XG5cdHZhciBxdWFsaWZpZWROYW1lID0gcmVwbGFjZSgvPDwwPj4oPzpcXHMqXFwuXFxzKjw8MD4+KSovLnNvdXJjZSwgW2lkZW50aWZpZXJdKTtcblxuXHR2YXIgdHlwZUluc2lkZSA9IHtcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKT8sLjpbXFxdXS9cblx0fTtcblxuXHQvLyBzdHJpbmdzXG5cdHZhciByZWd1bGFyU3RyaW5nID0gL1wiKD86XFxcXC58W15cXFxcXCJdKSpcIi8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5xc2hhcnAgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogcmUoLyhefFteJFxcXFxdKTw8MD4+Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub247XG5cdFx0XHRcdC8vIG9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub24gYXMgQ047XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxiKD86YXN8b3BlbilcXHMrKTw8MD4+KD89XFxzKig/Ojt8YXNcXGIpKS8uc291cmNlLCBbcXVhbGlmaWVkTmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG5hbWVzcGFjZSBRdWFudHVtLkFwcDE7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxibmFtZXNwYWNlXFxzKyk8PDA+Pig/PVxccypcXHspLy5zb3VyY2UsIFtxdWFsaWZpZWROYW1lXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J251bWJlcic6IC8oPzpcXGIwKD86eFtcXGRhLWZdK3xiWzAxXSt8b1swLTddKyl8KD86XFxCXFwuXFxkK3xcXGJcXGQrKD86XFwuXFxkKik/KSg/OmVbLStdP1xcZCspPylsP1xcYi9pLFxuXHRcdCdvcGVyYXRvcic6IC9cXGJhbmQ9fFxcYm9yPXxcXGJhbmRcXGJ8XFxibm90XFxifFxcYm9yXFxifDxbLT1dfFstPV0+fD4+Pj0/fDw8PD0/fFxcXlxcXlxcXj0/fFxcfFxcfFxcfD0/fCYmJj0/fHdcXC89P3x+fn58WypcXC8rXFwtXj0hJV09Py8sXG5cdFx0J3B1bmN0dWF0aW9uJzogLzo6fFt7fVtcXF07KCksLjpdL1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdxc2hhcnAnLCAnbnVtYmVyJywge1xuXHRcdCdyYW5nZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9XG5cdH0pO1xuXG5cdC8vIHNpbmdsZSBsaW5lXG5cdHZhciBpbnRlcnBvbGF0aW9uRXhwciA9IG5lc3RlZChyZXBsYWNlKC9cXHsoPzpbXlwie31dfDw8MD4+fDw8c2VsZj4+KSpcXH0vLnNvdXJjZSwgW3JlZ3VsYXJTdHJpbmddKSwgMik7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncXNoYXJwJywgJ3N0cmluZycsIHtcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFwkXCIoPzpcXFxcLnw8PDA+PnxbXlxcXFxcIntdKSpcIi8uc291cmNlLCBbaW50ZXJwb2xhdGlvbkV4cHJdKSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvKCg/Ol58W15cXFxcXSkoPzpcXFxcXFxcXCkqKTw8MD4+Ly5zb3VyY2UsIFtpbnRlcnBvbGF0aW9uRXhwcl0pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxce3xcXH0kLyxcblx0XHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1xc2hhcnAnLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5xc2hhcnBcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnFzID0gUHJpc20ubGFuZ3VhZ2VzLnFzaGFycDtcblxuUHJpc20ubGFuZ3VhZ2VzLnEgPSB7XG5cdCdzdHJpbmcnOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0J2NvbW1lbnQnOiBbXG5cdFx0Ly8gRnJvbSBodHRwOi8vY29kZS5reC5jb20vd2lraS9SZWZlcmVuY2UvU2xhc2g6XG5cdFx0Ly8gV2hlbiAvIGlzIGZvbGxvd2luZyBhIHNwYWNlIChvciBhIHJpZ2h0IHBhcmVudGhlc2lzLCBicmFja2V0LCBvciBicmFjZSksIGl0IGlzIGlnbm9yZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbGluZS5cblx0XHR7XG5cblx0XHRcdHBhdHRlcm46IC8oW1xcdCApXFxdfV0pXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gRnJvbSBodHRwOi8vY29kZS5reC5jb20vd2lraS9SZWZlcmVuY2UvU2xhc2g6XG5cdFx0Ly8gQSBsaW5lIHdoaWNoIGhhcyAvIGFzIGl0cyBmaXJzdCBjaGFyYWN0ZXIgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBvdGhlciBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgYSB3aG9sZS1saW5lIGNvbW1lbnQgYW5kIGlzIGlnbm9yZWQgZW50aXJlbHkuXG5cdFx0Ly8gQSAvIG9uIGEgbGluZSBieSBpdHNlbGYgYmVnaW5zIGEgbXVsdGlsaW5lIGNvbW1lbnQgd2hpY2ggaXMgdGVybWluYXRlZCBieSB0aGUgbmV4dCBcXCBvbiBhIGxpbmUgYnkgaXRzZWxmLlxuXHRcdC8vIElmIGEgLyBpcyBub3QgbWF0Y2hlZCBieSBhIFxcLCB0aGUgbXVsdGlsaW5lIGNvbW1lbnQgaXMgdW50ZXJtaW5hdGVkIGFuZCBjb250aW51ZXMgdG8gZW5kIG9mIGZpbGUuXG5cdFx0Ly8gVGhlIC8gYW5kIFxcIG11c3QgYmUgdGhlIGZpcnN0IGNoYXIgb24gdGhlIGxpbmUsIGJ1dCBtYXkgYmUgZm9sbG93ZWQgYnkgYW55IGFtb3VudCBvZiB3aGl0ZXNwYWNlLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHI/XFxufFxccilcXC9bXFx0IF0qKD86KD86XFxyP1xcbnxcXHIpKD86LiooPzpcXHI/XFxufFxccig/IVxcbikpKSo/KD86XFxcXCg/PVtcXHQgXSooPzpcXHI/XFxufFxccikpfCQpfFxcUy4qKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvLyBGcm9tIGh0dHA6Ly9jb2RlLmt4LmNvbS93aWtpL1JlZmVyZW5jZS9TbGFzaDpcblx0XHQvLyBBIFxcIG9uIGEgbGluZSBieSBpdHNlbGYgd2l0aCBubyBwcmVjZWRpbmcgbWF0Y2hpbmcgLyB3aWxsIGNvbW1lbnQgdG8gZW5kIG9mIGZpbGUuXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL15cXFxcW1xcdCBdKig/Olxccj9cXG58XFxyKVtcXHNcXFNdKy9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXiMhLisvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N5bWJvbCc6IC9gKD86OlxcUyt8W1xcdy5dKikvLFxuXHQnZGF0ZXRpbWUnOiB7XG5cdFx0cGF0dGVybjogLzBOW21kenV2dF18MFdbZHR6XXxcXGR7NH1cXC5cXGRcXGQoPzptfFxcLlxcZFxcZCg/OlQoPzpcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuOl1cXGRcXGRcXGQpPyk/KT8pPyk/W2R6XT8pfFxcZFxcZDpcXGRcXGQoPzo6XFxkXFxkKD86Wy46XVxcZFxcZFxcZCk/KT9bdXZ0XT8vLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQvLyBUaGUgbmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50cyBiYWQgaGlnaGxpZ2h0aW5nXG5cdC8vIG9mIHZlcmJzIDA6IGFuZCAxOlxuXHQnbnVtYmVyJzogL1xcYig/IVswMV06KSg/OjBOW2hqZV0/fDBXW2hqXT98MFt3bl18MHhbXFxkYS1mQS1GXSt8XFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspP1toamZlYl0/KS8sXG5cdCdrZXl3b3JkJzogL1xcXFxcXHcrXFxifFxcYig/OmFic3xhY29zfGFqMD98YWxsfGFuZHxhbnl8YXNjfGFzaW58YXNvZnxhdGFufGF0dHJ8YXZncz98Ymlucj98Ynl8Y2VpbGluZ3xjb2xzfGNvcnxjb3N8Y291bnR8Y292fGNyb3NzfGNzdnxjdXR8ZGVsZXRlfGRlbHRhc3xkZXNjfGRldnxkaWZmZXJ8ZGlzdGluY3R8ZGl2fGRvfGRzYXZlfGVqfGVubGlzdHxldmFsfGV4Y2VwdHxleGVjfGV4aXR8ZXhwfGZieXxmaWxsc3xmaXJzdHxma2V5c3xmbGlwfGZsb29yfGZyb218Z2V0fGdldGVudnxncm91cHxndGltZXxoY2xvc2V8aGNvdW50fGhkZWx8aG9wZW58aHN5bXxpYXNjfGlkZW50aXR5fGlkZXNjfGlmfGlqfGlufGluc2VydHxpbnRlcnxpbnZ8a2V5cz98bGFzdHxsaWtlfGxpc3R8bGpmP3xsb2FkfGxvZ3xsb3dlcnxsc3F8bHRpbWV8bHRyaW18bWF2Z3xtYXhzP3xtY291bnR8bWQ1fG1kZXZ8bWVkfG1ldGF8bWlucz98bW1heHxtbWlufG1tdXxtb2R8bXN1bXxuZWd8bmV4dHxub3R8bnVsbHxvcnxvdmVyfHBhcnNlfHBlYWNofHBqfHBsaXN0fHByZHM/fHByZXZ8cHJpb3J8cmFuZHxyYW5rfHJhdGlvc3xyYXplfHJlYWQwfHJlYWQxfHJlY2lwcm9jYWx8cmV2YWx8cmV2ZXJzZXxybG9hZHxyb3RhdGV8cnNhdmV8cnRyaW18c2F2ZXxzY2FufHNjb3Z8c2RldnxzZWxlY3R8c2V0fHNldGVudnxzaG93fHNpZ251bXxzaW58c3FydHxzc3I/fHN0cmluZ3xzdWJsaXN0fHN1bXM/fHN2fHN2YXJ8c3lzdGVtfHRhYmxlc3x0YW58dGlsfHRyaW18dHhmfHR5cGV8dWp8dW5ncm91cHx1bmlvbnx1cGRhdGV8dXBwZXJ8dXBzZXJ0fHZhbHVlfHZhcnx2aWV3cz98dnN8d2F2Z3x3aGVyZXx3aGlsZXx3aXRoaW58d2oxP3x3c3VtfHd3fHhhc2N8eGJhcnx4Y29scz98eGRlc2N8eGV4cHx4Z3JvdXB8eGtleXx4bG9nfHhwcmV2fHhyYW5rKVxcYi8sXG5cdCdhZHZlcmInOiB7XG5cdFx0cGF0dGVybjogL1snXFwvXFxcXF06P3xcXGJlYWNoXFxiLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQndmVyYic6IHtcblx0XHRwYXR0ZXJuOiAvKD86XFxCXFwuXFxCfFxcYlswMV06fDxbPT5dP3w+PT98WzorXFwtKiUsIT9+PXwkJiNAXl0pOj98XFxiX1xcYjo/Lyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF07Ll0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGpzU3RyaW5nID0gL1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInwnKD86XFxcXC58W15cXFxcJ1xcclxcbl0pKicvLnNvdXJjZTtcblx0dmFyIGpzQ29tbWVudCA9IC9cXC9cXC8uKig/IS4pfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvLy5zb3VyY2U7XG5cblx0dmFyIGpzRXhwciA9IC8oPzpbXlxcXFwoKVtcXF17fVwiJy9dfDxzdHJpbmc+fFxcLyg/IVsqL10pfDxjb21tZW50PnxcXCg8ZXhwcj4qXFwpfFxcWzxleHByPipcXF18XFx7PGV4cHI+KlxcfXxcXFxcW1xcc1xcU10pL1xuXHRcdC5zb3VyY2UucmVwbGFjZSgvPHN0cmluZz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNTdHJpbmc7IH0pLnJlcGxhY2UoLzxjb21tZW50Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBqc0NvbW1lbnQ7IH0pO1xuXG5cdC8vIHRoZSBwYXR0ZXJuIHdpbGwgYmxvdyB1cCwgc28gb25seSBhIGZldyBpdGVyYXRpb25zXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7XG5cdFx0anNFeHByID0ganNFeHByLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBqc0V4cHI7IH0pO1xuXHR9XG5cdGpzRXhwciA9IGpzRXhwci5yZXBsYWNlKC88ZXhwcj4vZywgJ1teXFxcXHNcXFxcU10nKTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5xbWwgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdqYXZhc2NyaXB0LWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oKD86Xnw7KVsgXFx0XSopZnVuY3Rpb25cXHMrKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKlxccypcXCg8anM+KlxcKVxccypcXHs8anM+KlxcfS8uc291cmNlLnJlcGxhY2UoLzxqcz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNFeHByOyB9KSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58Wzo7XSlbIFxcdF0qKSg/IVxcZClcXHcrKD89WyBcXHRdKlxce3xbIFxcdF0rb25cXGIpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQncHJvcGVydHknOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbO3tdKVsgXFx0XSopKD8hXFxkKVxcdysoPzpcXC5cXHcrKSooPz1bIFxcdF0qOikvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFs7e10pWyBcXHRdKilwcm9wZXJ0eVsgXFx0XSsoPyFcXGQpXFx3Kyg/OlxcLlxcdyspKlsgXFx0XSsoPyFcXGQpXFx3Kyg/OlxcLlxcdyspKig/PVsgXFx0XSo6KS9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9ecHJvcGVydHkvLFxuXHRcdFx0XHRcdCdwcm9wZXJ0eSc6IC9cXHcrKD86XFwuXFx3KykqL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnamF2YXNjcmlwdC1leHByZXNzaW9uJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oOlsgXFx0XSopKD8hW1xcczt9W10pKD86KD8hJHxbO31dKTxqcz4pKy8uc291cmNlLnJlcGxhY2UoLzxqcz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNFeHByOyB9KSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzphc3xpbXBvcnR8b24pXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTo7LF0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnFvcmUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3woPzpcXC9cXC98IykuKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0Ly8gT3ZlcnJpZGRlbiB0byBhbGxvdyB1bmVzY2FwZWQgbXVsdGktbGluZSBzdHJpbmdzXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YW55fGFzc2VydHxiaW5hcnl8Ym9vbHxib29sZWFufGJyZWFrfGJ5dGV8Y2FzZXxjYXRjaHxjaGFyfGNsYXNzfGNvZGV8Y29uc3R8Y29udGludWV8ZGF0YXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxnb3RvfGhhc2h8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW5oZXJpdHN8aW5zdGFuY2VvZnxpbnR8aW50ZXJmYWNlfGxvbmd8bXl8bmF0aXZlfG5ld3xub3RoaW5nfG51bGx8b2JqZWN0fG91cnxvd258cHJpdmF0ZXxyZWZlcmVuY2V8cmV0aHJvd3xyZXR1cm58c2hvcnR8c29mdCg/OmJvb2x8ZGF0ZXxmbG9hdHxpbnR8bGlzdHxudW1iZXJ8c3RyaW5nKXxzdGF0aWN8c3RyaWN0ZnB8c3RyaW5nfHN1YnxzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHRoaXN8dGhyb3d8dGhyb3dzfHRyYW5zaWVudHx0cnl8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFwkP1xcYig/IVxcZClcXHcrKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiKD86MGJbMDFdK3wweCg/OltcXGRhLWZdKlxcLik/W1xcZGEtZnBcXC1dK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86ZVxcZCspP1tkZl18KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSlcXGIvaSxcblx0J29wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi5dKSg/OlxcK1srPV0/fC1bLT1dP3xbIT1dKD86PT0/fH4pP3w+Pj89P3w8KD86PT4/fDw9Pyk/fCZbJj1dP3xcXHxbfD1dP3xbKlxcLyVeXT0/fFt+P10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCQoPyFcXGQpXFx3K1xcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuciA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFsnXCJdKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncGVyY2VudC1vcGVyYXRvcic6IHtcblx0XHQvLyBJbmNsdWRlcyB1c2VyLWRlZmluZWQgb3BlcmF0b3JzXG5cdFx0Ly8gYW5kICUlLCAlKiUsICUvJSwgJWluJSwgJW8lLCAleCVcblx0XHRwYXR0ZXJuOiAvJVteJVxcc10qJS8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8VFJVRSlcXGIvLFxuXHQnZWxsaXBzaXMnOiAvXFwuXFwuKD86XFwufFxcZCspLyxcblx0J251bWJlcic6IFtcblx0XHQvXFxiKD86SW5mfE5hTilcXGIvLFxuXHRcdC8oPzpcXGIweFtcXGRBLUZhLWZdKyg/OlxcLlxcZCopP3xcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlUHBdWystXT9cXGQrKT9baUxdPy9cblx0XSxcblx0J2tleXdvcmQnOiAvXFxiKD86TkF8TkFfY2hhcmFjdGVyX3xOQV9jb21wbGV4X3xOQV9pbnRlZ2VyX3xOQV9yZWFsX3xOVUxMfGJyZWFrfGVsc2V8Zm9yfGZ1bmN0aW9ufGlmfGlufG5leHR8cmVwZWF0fHdoaWxlKVxcYi8sXG5cdCdvcGVyYXRvcic6IC8tPj8+P3w8KD86PXw8Py0pP3xbPj0hXT0/fDo6P3wmJj98XFx8XFx8P3xbKypcXC9eJEB+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXSw7XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5yYWNrZXQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdzY2hlbWUnLCB7XG5cdCdsYW1iZGEtcGFyYW1ldGVyJzoge1xuXHRcdC8vIHRoZSByYWNrZXQgbGFtYmRhIHN5bnRheCBpcyBhIGxvdCBtb3JlIGNvbXBsZXgsIHNvIHdlIHdvbid0IGV2ZW4gYXR0ZW1wdCB0byBjYXB0dXJlIGl0LlxuXHRcdC8vIHRoaXMgd2lsbCBqdXN0IHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzIG9mIHRoZSBgZnVuY3Rpb25gIHBhdHRlcm5cblx0XHRwYXR0ZXJuOiAvKFsoXFxbXWxhbWJkYVxccytbKFxcW10pW14oKVxcW1xcXSdcXHNdKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncmFja2V0JywgJ3N0cmluZycsIHtcblx0J2xhbmcnOiB7XG5cdFx0cGF0dGVybjogL14jbGFuZy4rL20sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ya3QgPSBQcmlzbS5sYW5ndWFnZXMucmFja2V0O1xuXG4vLyBEb2NzOlxuLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXNwbmV0L2NvcmUvcmF6b3ItcGFnZXMvP3ZpZXc9YXNwbmV0Y29yZS01LjAmdGFicz12aXN1YWwtc3R1ZGlvXG4vLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9hc3BuZXQvY29yZS9tdmMvdmlld3MvcmF6b3I/dmlldz1hc3BuZXRjb3JlLTUuMFxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnRMaWtlID0gL1xcLyg/IVsvKl0pfFxcL1xcLy4qW1xcclxcbl18XFwvXFwqW14qXSooPzpcXCooPyFcXC8pW14qXSopKlxcKlxcLy8uc291cmNlO1xuXHR2YXIgc3RyaW5nTGlrZSA9XG5cdFx0L0AoPyFcIil8XCIoPzpbXlxcclxcblxcXFxcIl18XFxcXC4pKlwifEBcIig/OlteXFxcXFwiXXxcIlwifFxcXFxbXFxzXFxTXSkqXCIoPyFcIikvLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvJyg/Oig/OlteXFxyXFxuJ1xcXFxdfFxcXFwufFxcXFxbVXV4XVtcXGRhLWZBLUZdezEsOH0pJ3woPz1bXlxcXFxdKD8hJykpKS8uc291cmNlO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmVzdGVkIHBhdHRlcm4gd2hlcmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBzdHJpbmcgYDw8c2VsZj4+YCBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgcGF0dGVybiBpdHNlbGYuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aExvZzJcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIG5lc3RlZChwYXR0ZXJuLCBkZXB0aExvZzIpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcHRoTG9nMjsgaSsrKSB7XG5cdFx0XHRwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXR0ZXJuICsgJyknOyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhdHRlcm5cblx0XHRcdC5yZXBsYWNlKC88c2VsZj4vZywgJ1teXFxcXHNcXFxcU10nKVxuXHRcdFx0LnJlcGxhY2UoLzxzdHI+L2csICcoPzonICsgc3RyaW5nTGlrZSArICcpJylcblx0XHRcdC5yZXBsYWNlKC88Y29tbWVudD4vZywgJyg/OicgKyBjb21tZW50TGlrZSArICcpJyk7XG5cdH1cblxuXHR2YXIgcm91bmQgPSBuZXN0ZWQoL1xcKCg/OlteKCknXCJAL118PHN0cj58PGNvbW1lbnQ+fDxzZWxmPikqXFwpLy5zb3VyY2UsIDIpO1xuXHR2YXIgc3F1YXJlID0gbmVzdGVkKC9cXFsoPzpbXlxcW1xcXSdcIkAvXXw8c3RyPnw8Y29tbWVudD58PHNlbGY+KSpcXF0vLnNvdXJjZSwgMSk7XG5cdHZhciBjdXJseSA9IG5lc3RlZCgvXFx7KD86W157fSdcIkAvXXw8c3RyPnw8Y29tbWVudD58PHNlbGY+KSpcXH0vLnNvdXJjZSwgMik7XG5cdHZhciBhbmdsZSA9IG5lc3RlZCgvPCg/OltePD4nXCJAL118PGNvbW1lbnQ+fDxzZWxmPikqPi8uc291cmNlLCAxKTtcblxuXHR2YXIgaW5saW5lQ3MgPSAvQC8uc291cmNlICtcblx0XHQvKD86YXdhaXRcXGJcXHMqKT8vLnNvdXJjZSArXG5cdFx0Jyg/OicgKyAvKD8hYXdhaXRcXGIpXFx3K1xcYi8uc291cmNlICsgJ3wnICsgcm91bmQgKyAnKScgK1xuXHRcdCcoPzonICsgL1s/IV0/XFwuXFx3K1xcYi8uc291cmNlICsgJ3wnICsgJyg/OicgKyBhbmdsZSArICcpPycgKyByb3VuZCArICd8JyArIHNxdWFyZSArICcpKicgK1xuXHRcdC8oPyFbPyFcXC4oXFxbXXw8KD8hXFwvKSkvLnNvdXJjZTtcblxuXHQvLyBOb3RlIGFib3V0IHRoZSBhYm92ZSBicmFja2V0IHBhdHRlcm5zOlxuXHQvLyBUaGV5IGFsbCBpZ25vcmUgSFRNTCBleHByZXNzaW9ucyB0aGF0IG1pZ2h0IGJlIGluIHRoZSBDIyBjb2RlLiBUaGlzIGlzIGEgcHJvYmxlbSBiZWNhdXNlIEhUTUwgKGxpa2Ugc3RyaW5ncyBhbmRcblx0Ly8gY29tbWVudHMpIGlzIHBhcnNlZCBkaWZmZXJlbnRseS4gVGhpcyBpcyBhIGh1Z2UgcHJvYmxlbSBiZWNhdXNlIEhUTUwgbWlnaHQgY29udGFpbiBicmFja2V0cyBhbmQgcXVvdGVzIHdoaWNoXG5cdC8vIG1lc3NlcyB1cCB0aGUgYnJhY2tldCBhbmQgc3RyaW5nIGNvdW50aW5nIGltcGxlbWVudGVkIGJ5IHRoZSBhYm92ZSBwYXR0ZXJucy5cblx0Ly9cblx0Ly8gVGhpcyBwcm9ibGVtIGlzIG5vdCBmaXhhYmxlIGJlY2F1c2UgMSkgSFRNTCBleHByZXNzaW9uIGFyZSBoaWdobHkgY29udGV4dCBzZW5zaXRpdmUgYW5kIHZlcnkgZGlmZmljdWx0IHRvIGRldGVjdFxuXHQvLyBhbmQgMikgdGhleSByZXF1aXJlIG9uZSBjYXB0dXJpbmcgZ3JvdXAgYXQgZXZlcnkgbmVzdGVkIGxldmVsLiBTZWUgdGhlIGB0YWdSZWdpb25gIHBhdHRlcm4gdG8gYWRtaXJlIHRoZVxuXHQvLyBjb21wbGV4aXR5IG9mIGFuIEhUTUwgZXhwcmVzc2lvbi5cblx0Ly9cblx0Ly8gVG8gc29tZXdoYXQgYWxsZXZpYXRlIHRoZSBwcm9ibGVtIGEgYml0LCB0aGUgcGF0dGVybnMgZm9yIGNoYXJhY3RlcnMgKGUuZy4gJ2EnKSBpcyB2ZXJ5IHBlcm1pc3NpdmUsIGl0IGFsc29cblx0Ly8gYWxsb3dzIGludmFsaWQgY2hhcmFjdGVycyB0byBzdXBwb3J0IEhUTUwgZXhwcmVzc2lvbnMgbGlrZSB0aGlzOiA8cD5UaGF0J3MgaXQhPC9wPi5cblxuXHR2YXIgdGFnQXR0cklubGluZUNzID0gL0AoPyFbXFx3KCldKS8uc291cmNlICsgJ3wnICsgaW5saW5lQ3M7XG5cdHZhciB0YWdBdHRyVmFsdWUgPSAnKD86JyArXG5cdFx0L1wiW15cIkBdKlwifCdbXidAXSonfFteXFxzJ1wiQD49XSsoPz1bXFxzPl0pLy5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0J1tcIlxcJ11bXlwiXFwnQF0qKD86KD86JyArIHRhZ0F0dHJJbmxpbmVDcyArICcpW15cIlxcJ0BdKikrW1wiXFwnXScgK1xuXHRcdCcpJztcblxuXHR2YXIgdGFnQXR0cnMgPSAvKD86XFxzKD86XFxzKlteXFxzPlxcLz1dKyg/Olxccyo9XFxzKjx0YWdBdHRyVmFsdWU+fCg/PVtcXHMvPl0pKSkrKT8vLnNvdXJjZS5yZXBsYWNlKC88dGFnQXR0clZhbHVlPi8sIHRhZ0F0dHJWYWx1ZSk7XG5cdHZhciB0YWdDb250ZW50ID0gLyg/IVxcZClbXlxccz5cXC89JDwlXSsvLnNvdXJjZSArIHRhZ0F0dHJzICsgL1xccypcXC8/Pi8uc291cmNlO1xuXHR2YXIgdGFnUmVnaW9uID1cblx0XHQvXFxCQD8vLnNvdXJjZSArXG5cdFx0Jyg/OicgK1xuXHRcdC88KFthLXpBLVpdW1xcdzpdKikvLnNvdXJjZSArIHRhZ0F0dHJzICsgL1xccyo+Ly5zb3VyY2UgK1xuXHRcdCcoPzonICtcblx0XHQoXG5cdFx0XHQvW148XS8uc291cmNlICtcblx0XHRcdCd8JyArXG5cdFx0XHQvLyBhbGwgdGFncyB0aGF0IGFyZSBub3QgdGhlIHN0YXJ0IHRhZ1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdC88XFwvPyg/IVxcMVxcYikvLnNvdXJjZSArIHRhZ0NvbnRlbnQgK1xuXHRcdFx0J3wnICtcblx0XHRcdC8vIG5lc3RlZCBzdGFydCB0YWdcblx0XHRcdG5lc3RlZChcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0LzxcXDEvLnNvdXJjZSArIHRhZ0F0dHJzICsgL1xccyo+Ly5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdChcblx0XHRcdFx0XHQvW148XS8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIGFsbCB0YWdzIHRoYXQgYXJlIG5vdCB0aGUgc3RhcnQgdGFnXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0XHQvPFxcLz8oPyFcXDFcXGIpLy5zb3VyY2UgKyB0YWdDb250ZW50ICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdCc8c2VsZj4nXG5cdFx0XHRcdCkgK1xuXHRcdFx0XHQnKSonICtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0LzxcXC9cXDFcXHMqPi8uc291cmNlLFxuXHRcdFx0XHQyXG5cdFx0XHQpXG5cdFx0KSArXG5cdFx0JykqJyArXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHQvPFxcL1xcMVxccyo+Ly5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0LzwvLnNvdXJjZSArIHRhZ0NvbnRlbnQgK1xuXHRcdCcpJztcblxuXHQvLyBOb3cgZm9yIHRoZSBhY3R1YWwgbGFuZ3VhZ2UgZGVmaW5pdGlvbihzKTpcblx0Ly9cblx0Ly8gUmF6b3IgYXMgYSBsYW5ndWFnZSBoYXMgMiBwYXJ0czpcblx0Ly8gIDEpIENTSFRNTDogQSBtYXJrdXAtbGlrZSBsYW5ndWFnZSB0aGF0IGhhcyBiZWVuIGV4dGVuZGVkIHdpdGggaW5saW5lIEMjIGNvZGUgZXhwcmVzc2lvbnMgYW5kIGJsb2Nrcy5cblx0Ly8gIDIpIEMjK0hUTUw6IEEgdmFyaWFudCBvZiBDIyB0aGF0IGNhbiBjb250YWluIENTSFRNTCB0YWdzIGFzIGV4cHJlc3Npb25zLlxuXHQvL1xuXHQvLyBJbiB0aGUgYmVsb3cgY29kZSwgYm90aCBDU0hUTUwgYW5kIEMjK0hUTUwgd2lsbCBiZSBjcmVhdGUgYXMgc2VwYXJhdGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgdGhhdCByZWZlcmVuY2UgZWFjaFxuXHQvLyBvdGhlci4gSG93ZXZlciwgb25seSBDU0hUTUwgd2lsbCBiZSBleHBvcnRlZCB2aWEgYFByaXNtLmxhbmd1YWdlc2AuXG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzaHRtbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcblxuXHR2YXIgY3NoYXJwV2l0aEh0bWwgPSBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAnc3RyaW5nJywge1xuXHRcdCdodG1sJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHRhZ1JlZ2lvbiksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2h0bWxcblx0XHR9LFxuXHR9LCB7IGNzaGFycDogUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NoYXJwJywge30pIH0pO1xuXG5cdHZhciBjcyA9IHtcblx0XHRwYXR0ZXJuOiAvXFxTW1xcc1xcU10qLyxcblx0XHRhbGlhczogJ2xhbmd1YWdlLWNzaGFycCcsXG5cdFx0aW5zaWRlOiBjc2hhcnBXaXRoSHRtbFxuXHR9O1xuXG5cdHZhciBpbmxpbmVWYWx1ZSA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteQF0pLy5zb3VyY2UgKyBpbmxpbmVDcyksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9eQC8sXG5cdFx0XHQnY3NoYXJwJzogY3Ncblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzaHRtbC50YWcucGF0dGVybiA9IFJlZ0V4cCgvPFxcLz8vLnNvdXJjZSArIHRhZ0NvbnRlbnQpO1xuXHRQcmlzbS5sYW5ndWFnZXMuY3NodG1sLnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXS5wYXR0ZXJuID0gUmVnRXhwKC89XFxzKi8uc291cmNlICsgdGFnQXR0clZhbHVlKTtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ3B1bmN0dWF0aW9uJywgeyAndmFsdWUnOiBpbmxpbmVWYWx1ZSB9LCBQcmlzbS5sYW5ndWFnZXMuY3NodG1sLnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NodG1sJywgJ3Byb2xvZycsIHtcblx0XHQncmF6b3ItY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9AXFwqW1xcc1xcU10qP1xcKkAvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdH0sXG5cblx0XHQnYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oXnxbXkBdKUAvLnNvdXJjZSArXG5cdFx0XHRcdCcoPzonICtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC8vIEB7IC4uLiB9XG5cdFx0XHRcdFx0Y3VybHksXG5cdFx0XHRcdFx0Ly8gQGNvZGV7IC4uLiB9XG5cdFx0XHRcdFx0Lyg/OmNvZGV8ZnVuY3Rpb25zKVxccyovLnNvdXJjZSArIGN1cmx5LFxuXHRcdFx0XHRcdC8vIEBmb3IgKC4uLikgeyAuLi4gfVxuXHRcdFx0XHRcdC8oPzpmb3J8Zm9yZWFjaHxsb2NrfHN3aXRjaHx1c2luZ3x3aGlsZSlcXHMqLy5zb3VyY2UgKyByb3VuZCArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSxcblx0XHRcdFx0XHQvLyBAZG8geyAuLi4gfSB3aGlsZSAoLi4uKTtcblx0XHRcdFx0XHQvZG9cXHMqLy5zb3VyY2UgKyBjdXJseSArIC9cXHMqd2hpbGVcXHMqLy5zb3VyY2UgKyByb3VuZCArIC8oPzpcXHMqOyk/Ly5zb3VyY2UsXG5cdFx0XHRcdFx0Ly8gQHRyeSB7IC4uLiB9IGNhdGNoICguLi4pIHsgLi4uIH0gZmluYWxseSB7IC4uLiB9XG5cdFx0XHRcdFx0L3RyeVxccyovLnNvdXJjZSArIGN1cmx5ICsgL1xccypjYXRjaFxccyovLnNvdXJjZSArIHJvdW5kICsgL1xccyovLnNvdXJjZSArIGN1cmx5ICsgL1xccypmaW5hbGx5XFxzKi8uc291cmNlICsgY3VybHksXG5cdFx0XHRcdFx0Ly8gQGlmICguLi4pIHsuLi59IGVsc2UgaWYgKC4uLikgey4uLn0gZWxzZSB7Li4ufVxuXHRcdFx0XHRcdC9pZlxccyovLnNvdXJjZSArIHJvdW5kICsgL1xccyovLnNvdXJjZSArIGN1cmx5ICsgJyg/OicgKyAvXFxzKmVsc2UvLnNvdXJjZSArICcoPzonICsgL1xccytpZlxccyovLnNvdXJjZSArIHJvdW5kICsgJyk/JyArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSArICcpKicsXG5cdFx0XHRcdFx0Ly8gQGhlbHBlciBJZGVudChwYXJhbXMpIHsgLi4uIH1cblx0XHRcdFx0XHQvaGVscGVyXFxzK1xcdytcXHMqLy5zb3VyY2UgKyByb3VuZCArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSxcblx0XHRcdFx0XS5qb2luKCd8JykgK1xuXHRcdFx0XHQnKSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15AXFx3Ki8sXG5cdFx0XHRcdCdjc2hhcnAnOiBjc1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKilAKD86YWRkVGFnSGVscGVyfGF0dHJpYnV0ZXxpbXBsZW1lbnRzfGluaGVyaXRzfGluamVjdHxsYXlvdXR8bW9kZWx8bmFtZXNwYWNlfHBhZ2V8cHJlc2VydmV3aGl0ZXNwYWNlfHJlbW92ZVRhZ0hlbHBlcnxzZWN0aW9ufHRhZ0hlbHBlclByZWZpeHx1c2luZykoPz1cXHMpLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiAvXkBcXHcrLyxcblx0XHRcdFx0J2NzaGFycCc6IGNzXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCd2YWx1ZSc6IGlubGluZVZhbHVlLFxuXG5cdFx0J2RlbGVnYXRlLW9wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteQF0pQCg/PTwpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJhem9yID0gUHJpc20ubGFuZ3VhZ2VzLmNzaHRtbDtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGphdmFzY3JpcHQgPSBQcmlzbS51dGlsLmNsb25lKFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0KTtcblxuXHR2YXIgc3BhY2UgPSAvKD86XFxzfFxcL1xcLy4qKD8hLil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKVxcKlxcLykvLnNvdXJjZTtcblx0dmFyIGJyYWNlcyA9IC8oPzpcXHsoPzpcXHsoPzpcXHtbXnt9XSpcXH18W157fV0pKlxcfXxbXnt9XSkqXFx9KS8uc291cmNlO1xuXHR2YXIgc3ByZWFkID0gLyg/OlxcezxTPipcXC57M30oPzpbXnt9XXw8QlJBQ0VTPikqXFx9KS8uc291cmNlO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG5cdCAqL1xuXHRmdW5jdGlvbiByZShzb3VyY2UsIGZsYWdzKSB7XG5cdFx0c291cmNlID0gc291cmNlXG5cdFx0XHQucmVwbGFjZSgvPFM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNwYWNlOyB9KVxuXHRcdFx0LnJlcGxhY2UoLzxCUkFDRVM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJyYWNlczsgfSlcblx0XHRcdC5yZXBsYWNlKC88U1BSRUFEPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzcHJlYWQ7IH0pO1xuXHRcdHJldHVybiBSZWdFeHAoc291cmNlLCBmbGFncyk7XG5cdH1cblxuXHRzcHJlYWQgPSByZShzcHJlYWQpLnNvdXJjZTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5qc3ggPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCBqYXZhc2NyaXB0KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmpzeC50YWcucGF0dGVybiA9IHJlKFxuXHRcdC88XFwvPyg/OltcXHcuOi1dKyg/OjxTPisoPzpbXFx3LjokLV0rKD86PSg/OlwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCJ8Jyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJ3xbXlxcc3snXCIvPj1dK3w8QlJBQ0VTPikpP3w8U1BSRUFEPikpKjxTPipcXC8/KT8+Ly5zb3VyY2Vcblx0KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGVbJ3RhZyddLnBhdHRlcm4gPSAvXjxcXC8/W15cXHM+XFwvXSovO1xuXHRQcmlzbS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXS5wYXR0ZXJuID0gLz0oPyFcXHspKD86XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcInwnKD86XFxcXFtcXHNcXFNdfFteXFxcXCddKSonfFteXFxzJ1wiPl0rKS87XG5cdFByaXNtLmxhbmd1YWdlcy5qc3gudGFnLmluc2lkZVsndGFnJ10uaW5zaWRlWydjbGFzcy1uYW1lJ10gPSAvXltBLVpdXFx3Kig/OlxcLltBLVpdXFx3KikqJC87XG5cdFByaXNtLmxhbmd1YWdlcy5qc3gudGFnLmluc2lkZVsnY29tbWVudCddID0gamF2YXNjcmlwdFsnY29tbWVudCddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdhdHRyLW5hbWUnLCB7XG5cdFx0J3NwcmVhZCc6IHtcblx0XHRcdHBhdHRlcm46IHJlKC88U1BSRUFEPi8uc291cmNlKSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmpzeFxuXHRcdH1cblx0fSwgUHJpc20ubGFuZ3VhZ2VzLmpzeC50YWcpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdzcGVjaWFsLWF0dHInLCB7XG5cdFx0J3NjcmlwdCc6IHtcblx0XHRcdC8vIEFsbG93IGZvciB0d28gbGV2ZWxzIG9mIG5lc3Rpbmdcblx0XHRcdHBhdHRlcm46IHJlKC89PEJSQUNFUz4vLnNvdXJjZSksXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzY3JpcHQtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL149KD89XFx7KS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmpzeFxuXHRcdFx0fSxcblx0XHR9XG5cdH0sIFByaXNtLmxhbmd1YWdlcy5qc3gudGFnKTtcblxuXHQvLyBUaGUgZm9sbG93aW5nIHdpbGwgaGFuZGxlIHBsYWluIHRleHQgaW5zaWRlIHRhZ3Ncblx0dmFyIHN0cmluZ2lmeVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0aWYgKCF0b2tlbikge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHRva2VuO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHRva2VuLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdG9rZW4uY29udGVudDtcblx0XHR9XG5cdFx0cmV0dXJuIHRva2VuLmNvbnRlbnQubWFwKHN0cmluZ2lmeVRva2VuKS5qb2luKCcnKTtcblx0fTtcblxuXHR2YXIgd2Fsa1Rva2VucyA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcblx0XHR2YXIgb3BlbmVkVGFncyA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cdFx0XHR2YXIgbm90VGFnTm9yQnJhY2UgPSBmYWxzZTtcblxuXHRcdFx0aWYgKHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICd0YWcnICYmIHRva2VuLmNvbnRlbnRbMF0gJiYgdG9rZW4uY29udGVudFswXS50eXBlID09PSAndGFnJykge1xuXHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgdGFnLCBub3cgZmluZCBpdHMga2luZFxuXG5cdFx0XHRcdFx0aWYgKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFswXS5jb250ZW50ID09PSAnPC8nKSB7XG5cdFx0XHRcdFx0XHQvLyBDbG9zaW5nIHRhZ1xuXHRcdFx0XHRcdFx0aWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiBvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0udGFnTmFtZSA9PT0gc3RyaW5naWZ5VG9rZW4odG9rZW4uY29udGVudFswXS5jb250ZW50WzFdKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBQb3AgbWF0Y2hpbmcgb3BlbmluZyB0YWdcblx0XHRcdFx0XHRcdFx0b3BlbmVkVGFncy5wb3AoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHRva2VuLmNvbnRlbnRbdG9rZW4uY29udGVudC5sZW5ndGggLSAxXS5jb250ZW50ID09PSAnLz4nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEF1dG9jbG9zZWQgdGFnLCBpZ25vcmVcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIE9wZW5pbmcgdGFnXG5cdFx0XHRcdFx0XHRcdG9wZW5lZFRhZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0dGFnTmFtZTogc3RyaW5naWZ5VG9rZW4odG9rZW4uY29udGVudFswXS5jb250ZW50WzFdKSxcblx0XHRcdFx0XHRcdFx0XHRvcGVuZWRCcmFjZXM6IDBcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiB0b2tlbi50eXBlID09PSAncHVuY3R1YXRpb24nICYmIHRva2VuLmNvbnRlbnQgPT09ICd7Jykge1xuXG5cdFx0XHRcdFx0Ly8gSGVyZSB3ZSBtaWdodCBoYXZlIGVudGVyZWQgYSBKU1ggY29udGV4dCBpbnNpZGUgYSB0YWdcblx0XHRcdFx0XHRvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzKys7XG5cblx0XHRcdFx0fSBlbHNlIGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcyA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAnfScpIHtcblxuXHRcdFx0XHRcdC8vIEhlcmUgd2UgbWlnaHQgaGF2ZSBsZWZ0IGEgSlNYIGNvbnRleHQgaW5zaWRlIGEgdGFnXG5cdFx0XHRcdFx0b3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcy0tO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bm90VGFnTm9yQnJhY2UgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAobm90VGFnTm9yQnJhY2UgfHwgdHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRpZiAob3BlbmVkVGFncy5sZW5ndGggPiAwICYmIG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMgPT09IDApIHtcblx0XHRcdFx0XHQvLyBIZXJlIHdlIGFyZSBpbnNpZGUgYSB0YWcsIGFuZCBub3QgaW5zaWRlIGEgSlNYIGNvbnRleHQuXG5cdFx0XHRcdFx0Ly8gVGhhdCdzIHBsYWluIHRleHQ6IGRyb3AgYW55IHRva2VucyBtYXRjaGVkLlxuXHRcdFx0XHRcdHZhciBwbGFpblRleHQgPSBzdHJpbmdpZnlUb2tlbih0b2tlbik7XG5cblx0XHRcdFx0XHQvLyBBbmQgbWVyZ2UgdGV4dCB3aXRoIGFkamFjZW50IHRleHRcblx0XHRcdFx0XHRpZiAoaSA8IHRva2Vucy5sZW5ndGggLSAxICYmICh0eXBlb2YgdG9rZW5zW2kgKyAxXSA9PT0gJ3N0cmluZycgfHwgdG9rZW5zW2kgKyAxXS50eXBlID09PSAncGxhaW4tdGV4dCcpKSB7XG5cdFx0XHRcdFx0XHRwbGFpblRleHQgKz0gc3RyaW5naWZ5VG9rZW4odG9rZW5zW2kgKyAxXSk7XG5cdFx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGkgPiAwICYmICh0eXBlb2YgdG9rZW5zW2kgLSAxXSA9PT0gJ3N0cmluZycgfHwgdG9rZW5zW2kgLSAxXS50eXBlID09PSAncGxhaW4tdGV4dCcpKSB7XG5cdFx0XHRcdFx0XHRwbGFpblRleHQgPSBzdHJpbmdpZnlUb2tlbih0b2tlbnNbaSAtIDFdKSArIHBsYWluVGV4dDtcblx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoaSAtIDEsIDEpO1xuXHRcdFx0XHRcdFx0aS0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRva2Vuc1tpXSA9IG5ldyBQcmlzbS5Ub2tlbigncGxhaW4tdGV4dCcsIHBsYWluVGV4dCwgbnVsbCwgcGxhaW5UZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodG9rZW4uY29udGVudCAmJiB0eXBlb2YgdG9rZW4uY29udGVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoZW52Lmxhbmd1YWdlICE9PSAnanN4JyAmJiBlbnYubGFuZ3VhZ2UgIT09ICd0c3gnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHdhbGtUb2tlbnMoZW52LnRva2Vucyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHR5cGVzY3JpcHQgPSBQcmlzbS51dGlsLmNsb25lKFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0KTtcblx0UHJpc20ubGFuZ3VhZ2VzLnRzeCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2pzeCcsIHR5cGVzY3JpcHQpO1xuXG5cdC8vIGRvZXNuJ3Qgd29yayB3aXRoIFRTIGJlY2F1c2UgVFMgaXMgdG9vIGNvbXBsZXhcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50c3hbJ3BhcmFtZXRlciddO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnRzeFsnbGl0ZXJhbC1wcm9wZXJ0eSddO1xuXG5cdC8vIFRoaXMgd2lsbCBwcmV2ZW50IGNvbGxpc2lvbnMgYmV0d2VlbiBUU1ggdGFncyBhbmQgVFMgZ2VuZXJpYyB0eXBlcy5cblx0Ly8gSWRlYSBieSBodHRwczovL2dpdGh1Yi5jb20va2FybGhvcmt5XG5cdC8vIERpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yNTk0I2lzc3VlY29tbWVudC03MTA2NjY5Mjhcblx0dmFyIHRhZyA9IFByaXNtLmxhbmd1YWdlcy50c3gudGFnO1xuXHR0YWcucGF0dGVybiA9IFJlZ0V4cCgvKF58W15cXHckXXwoPz08XFwvKSkvLnNvdXJjZSArICcoPzonICsgdGFnLnBhdHRlcm4uc291cmNlICsgJyknLCB0YWcucGF0dGVybi5mbGFncyk7XG5cdHRhZy5sb29rYmVoaW5kID0gdHJ1ZTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnJlYXNvbiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXFxcclxcblwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyAnY2xhc3MtbmFtZScgbXVzdCBiZSBtYXRjaGVkICphZnRlciogJ2NvbnN0cnVjdG9yJyBkZWZpbmVkIGJlbG93XG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3Ki8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xhc3NlcnR8YmVnaW58Y2xhc3N8Y29uc3RyYWludHxkb3xkb25lfGRvd250b3xlbHNlfGVuZHxleGNlcHRpb258ZXh0ZXJuYWx8Zm9yfGZ1bnxmdW5jdGlvbnxmdW5jdG9yfGlmfGlufGluY2x1ZGV8aW5oZXJpdHxpbml0aWFsaXplcnxsYXp5fGxldHxtZXRob2R8bW9kdWxlfG11dGFibGV8bmV3fG5vbnJlY3xvYmplY3R8b2Z8b3Blbnxvcnxwcml2YXRlfHJlY3xzaWd8c3RydWN0fHN3aXRjaHx0aGVufHRvfHRyeXx0eXBlfHZhbHx2aXJ0dWFsfHdoZW58d2hpbGV8d2l0aClcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwuezN9fDpbOj1dfFxcfD58LT58PSg/Oj09P3w+KT98PD0/fD49P3xbfF4/JyMhfmBdfFsrXFwtKlxcL11cXC4/fFxcYig/OmFzcnxsYW5kfGxvcnxsc2x8bHNyfGx4b3J8bW9kKVxcYi9cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncmVhc29uJywgJ2NsYXNzLW5hbWUnLCB7XG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXHhbXFxkYS1mXXsyfXxcXFxcb1swLTNdWzAtN11bMC03XXxcXFxcXFxkezN9fFxcXFwufFteJ1xcXFxcXHJcXG5dKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBOZWdhdGl2ZSBsb29rLWFoZWFkIHByZXZlbnRzIGZyb20gbWF0Y2hpbmcgdGhpbmdzIGxpa2UgU3RyaW5nLmNhcGl0YWxpemVcblx0J2NvbnN0cnVjdG9yJzogL1xcYltBLVpdXFx3KlxcYig/IVxccypcXC4pLyxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPz06OikvLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9XG59KTtcblxuLy8gV2UgY2FuJ3QgbWF0Y2ggZnVuY3Rpb25zIHByb3BlcnR5LCBzbyBsZXQncyBub3QgZXZlbiB0cnkuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnJlYXNvbi5mdW5jdGlvbjtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBzcGVjaWFsRXNjYXBlID0ge1xuXHRcdHBhdHRlcm46IC9cXFxcW1xcXFwoKXt9W1xcXV4kKyo/fC5dLyxcblx0XHRhbGlhczogJ2VzY2FwZSdcblx0fTtcblx0dmFyIGVzY2FwZSA9IC9cXFxcKD86eFtcXGRhLWZBLUZdezJ9fHVbXFxkYS1mQS1GXXs0fXx1XFx7W1xcZGEtZkEtRl0rXFx9fDBbMC03XXswLDJ9fFsxMjNdWzAtN117Mn18Y1thLXpBLVpdfC4pLztcblx0dmFyIGNoYXJTZXQgPSB7XG5cdFx0cGF0dGVybjogL1xcLnxcXFxcW3dzZF18XFxcXHBcXHtbXnt9XStcXH0vaSxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH07XG5cdHZhciBjaGFyU2V0V2l0aG91dERvdCA9IHtcblx0XHRwYXR0ZXJuOiAvXFxcXFt3c2RdfFxcXFxwXFx7W157fV0rXFx9L2ksXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9O1xuXG5cdHZhciByYW5nZUNoYXIgPSAnKD86W15cXFxcXFxcXC1dfCcgKyBlc2NhcGUuc291cmNlICsgJyknO1xuXHR2YXIgcmFuZ2UgPSBSZWdFeHAocmFuZ2VDaGFyICsgJy0nICsgcmFuZ2VDaGFyKTtcblxuXHQvLyB0aGUgbmFtZSBvZiBhIGNhcHR1cmluZyBncm91cFxuXHR2YXIgZ3JvdXBOYW1lID0ge1xuXHRcdHBhdHRlcm46IC8oPHwnKVtePD4nXSsoPz1bPiddJCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucmVnZXggPSB7XG5cdFx0J2NoYXItY2xhc3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcXFxcXCkqKVxcWyg/OlteXFxcXFxcXV18XFxcXFtcXHNcXFNdKSpcXF0vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY2hhci1jbGFzcy1uZWdhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXFspXFxeLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjaGFyLWNsYXNzLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFxbfFxcXSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdyYW5nZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByYW5nZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0XHRcdFx0XHQncmFuZ2UtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8tLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzcGVjaWFsLWVzY2FwZSc6IHNwZWNpYWxFc2NhcGUsXG5cdFx0XHRcdCdjaGFyLXNldCc6IGNoYXJTZXRXaXRob3V0RG90LFxuXHRcdFx0XHQnZXNjYXBlJzogZXNjYXBlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3BlY2lhbC1lc2NhcGUnOiBzcGVjaWFsRXNjYXBlLFxuXHRcdCdjaGFyLXNldCc6IGNoYXJTZXQsXG5cdFx0J2JhY2tyZWZlcmVuY2UnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGEgYmFja3JlZmVyZW5jZSB3aGljaCBpcyBub3QgYW4gb2N0YWwgZXNjYXBlXG5cdFx0XHRcdHBhdHRlcm46IC9cXFxcKD8hWzEyM11bMC03XXsyfSlbMS05XS8sXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFxcazxbXjw+J10rPi8sXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdncm91cC1uYW1lJzogZ3JvdXBOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdhbmNob3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvWyReXXxcXFxcW0FCYkdael0vLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0J2dyb3VwJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvMTAvZG9jcy9hcGkvamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbFxuXHRcdFx0XHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvc3RhbmRhcmQvYmFzZS10eXBlcy9yZWd1bGFyLWV4cHJlc3Npb24tbGFuZ3VhZ2UtcXVpY2stcmVmZXJlbmNlP3ZpZXc9bmV0ZnJhbWV3b3JrLTQuNy4yI2dyb3VwaW5nLWNvbnN0cnVjdHNcblxuXHRcdFx0XHQvLyAoKSwgKD88bmFtZT4pLCAoPyduYW1lJyksICg/PiksICg/OiksICg/PSksICg/ISksICg/PD0pLCAoPzwhKSwgKD9pcy1tKSwgKD9pLW06KVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFwoKD86XFw/KD86PFtePD4nXSs+fCdbXjw+J10rJ3xbPjpdfDw/Wz0hXXxbaWRtbnN1eFVdKyg/Oi1baWRtbnN1eFVdKyk/Oj8pKT8vLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2dyb3VwLW5hbWUnOiBncm91cE5hbWVcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcKS8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncXVhbnRpZmllcic6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpbKyo/XXxcXHtcXGQrKD86LFxcZCopP1xcfSlbPytdPy8sXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdhbHRlcm5hdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXHwvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH1cblx0fTtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3d3dy5vcGVucG9saWN5YWdlbnQub3JnL2RvY3MvbGF0ZXN0L3BvbGljeS1yZWZlcmVuY2UvXG5cblByaXNtLmxhbmd1YWdlcy5yZWdvID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXC5dKSg/OlwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxgW15gXSpgfFxcYlthLXpfXVxcdypcXGIpKD89XFxzKjooPyE9KSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxgW15gXSpgLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGRlZmF1bHR8ZWxzZXxpbXBvcnR8bm90fG51bGx8cGFja2FnZXxzZXQoPz1cXHMqXFwoKXxzb21lfHdpdGgpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3KlxcYig/OlxccypcXC5cXHMqXFxiW2Etel9dXFx3KlxcYikqKD89XFxzKlxcKCkvaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCduYW1lc3BhY2UnOiAvXFxiXFx3K1xcYig/PVxccypcXC4pLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXG5cdCdudW1iZXInOiAvLT9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bLSsqLyV8Jl18Wzw+Oj1dPT98IT18XFxiX1xcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bLDsuXFxbXFxde30oKV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucmVucHkgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXF0pKlxcMnwoPzpeIz8oPzooPzpbMC05YS1mQS1GXSl7M318WzAtOWEtZkEtRl17Nn0pJCkvbSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxcKCkvaSxcblxuXHQncHJvcGVydHknOiAvXFxiKD86VXBkYXRlfFVwZGF0ZVZlcnNpb258YWN0aW9ufGFjdGl2YXRlX3NvdW5kfGFkdl9udmxfdHJhbnNpdGlvbnxhZnRlcl9sb2FkX3RyYW5zaXRpb258YWxpZ258YWxwaGF8YWx0fGFuY2hvcnxhbnRpYWxpYXN8YXJlYXxhdXRvfGJhY2tncm91bmR8YmFyX2ludmVydHxiYXJfcmVzaXppbmd8YmFyX3ZlcnRpY2FsfGJsYWNrX2NvbG9yfGJvbGR8Ym90dG9tX2Jhcnxib3R0b21fZ3V0dGVyfGJvdHRvbV9tYXJnaW58Ym90dG9tX3BhZGRpbmd8Ym94X3JldmVyc2V8Ym94X3dyYXB8Y2FuX3VwZGF0ZXxjYXJldHxjaGlsZHxjb2xvcnxjcm9wfGRlZmF1bHRfYWZtX2VuYWJsZXxkZWZhdWx0X2FmbV90aW1lfGRlZmF1bHRfZnVsbHNjcmVlbnxkZWZhdWx0X3RleHRfY3BzfGRldmVsb3BlcnxkaXJlY3RvcnlfbmFtZXxkcmFnX2hhbmRsZXxkcmFnX2pvaW5lZHxkcmFnX25hbWV8ZHJhZ19yYWlzZXxkcmFnZ2FibGV8ZHJhZ2dlZHxkcm9wX3NoYWRvd3xkcm9wX3NoYWRvd19jb2xvcnxkcm9wcGFibGV8ZHJvcHBlZHxlYXNlaW58ZWFzZW91dHxlZGdlc2Nyb2xsfGVuZF9nYW1lX3RyYW5zaXRpb258ZW5kX3NwbGFzaF90cmFuc2l0aW9ufGVudGVyX3JlcGxheV90cmFuc2l0aW9ufGVudGVyX3NvdW5kfGVudGVyX3RyYW5zaXRpb258ZW50ZXJfeWVzbm9fdHJhbnNpdGlvbnxleGVjdXRhYmxlX25hbWV8ZXhpdF9yZXBsYXlfdHJhbnNpdGlvbnxleGl0X3NvdW5kfGV4aXRfdHJhbnNpdGlvbnxleGl0X3llc25vX3RyYW5zaXRpb258ZmFkZWlufGZhZGVvdXR8Zmlyc3RfaW5kZW50fGZpcnN0X3NwYWNpbmd8Zml0X2ZpcnN0fGZvY3VzfGZvY3VzX21hc2t8Zm9udHxmb3JlZ3JvdW5kfGdhbWVfbWFpbl90cmFuc2l0aW9ufGdldF9pbnN0YWxsZWRfcGFja2FnZXN8Z29vZ2xlX3BsYXlfa2V5fGdvb2dsZV9wbGF5X3NhbHR8Z3JvdW5kfGhhc19tdXNpY3xoYXNfc291bmR8aGFzX3ZvaWNlfGhlaWdodHxoZWxwfGhpbnRpbmd8aG92ZXJ8aG92ZXJfYmFja2dyb3VuZHxob3Zlcl9jb2xvcnxob3Zlcl9zb3VuZHxob3ZlcmVkfGh5cGVybGlua19mdW5jdGlvbnN8aWRsZXxpZGxlX2NvbG9yfGltYWdlX3N0eWxlfGluY2x1ZGVfdXBkYXRlfGluc2Vuc2l0aXZlfGluc2Vuc2l0aXZlX2JhY2tncm91bmR8aW5zZW5zaXRpdmVfY29sb3J8aW5zaWRlfGludHJhX3RyYW5zaXRpb258aXRhbGljfGp1c3RpZnl8a2VybmluZ3xrZXlib2FyZF9mb2N1c3xsYW5ndWFnZXxsYXllcl9jbGlwcGluZ3xsYXllcnN8bGF5b3V0fGxlZnRfYmFyfGxlZnRfZ3V0dGVyfGxlZnRfbWFyZ2lufGxlZnRfcGFkZGluZ3xsZW5ndGh8bGluZV9sZWFkaW5nfGxpbmVfb3ZlcmxhcF9zcGxpdHxsaW5lX3NwYWNpbmd8bGluZWFyfG1haW5fZ2FtZV90cmFuc2l0aW9ufG1haW5fbWVudV9tdXNpY3xtYXhpbXVtfG1pbl93aWR0aHxtaW5pbXVtfG1pbndpZHRofG1vZGFsfG1vdXNlfG1vdXNld2hlZWx8bmFtZXxuYXJyYXRvcl9tZW51fG5ld2xpbmVfaW5kZW50fG52bF9hZHZfdHJhbnNpdGlvbnxvZmZzZXR8b3JkZXJfcmV2ZXJzZXxvdXRsaW5lc3xvdmVybGF5X2Z1bmN0aW9uc3xwb3N8cG9zaXRpb258cHJlZml4fHJhZGl1c3xyYW5nZXxyZXN0X2luZGVudHxyaWdodF9iYXJ8cmlnaHRfZ3V0dGVyfHJpZ2h0X21hcmdpbnxyaWdodF9wYWRkaW5nfHJvdGF0ZXxyb3RhdGVfcGFkfHJ1Ynlfc3R5bGV8c2FtcGxlX3NvdW5kfHNhdmVfZGlyZWN0b3J5fHNheV9hdHRyaWJ1dGVfdHJhbnNpdGlvbnxzY3JlZW5faGVpZ2h0fHNjcmVlbl93aWR0aHxzY3JvbGxiYXJzfHNlbGVjdGVkX2hvdmVyfHNlbGVjdGVkX2hvdmVyX2NvbG9yfHNlbGVjdGVkX2lkbGV8c2VsZWN0ZWRfaWRsZV9jb2xvcnxzZWxlY3RlZF9pbnNlbnNpdGl2ZXxzaG93X3NpZGVfaW1hZ2V8c2hvd190d29fd2luZG93fHNpZGVfc3BhY2luZ3xzaWRlX3hwb3N8c2lkZV95cG9zfHNpemV8c2l6ZV9ncm91cHxzbG93X2Nwc3xzbG93X2Nwc19tdWx0aXBsaWVyfHNwYWNpbmd8c3RyaWtldGhyb3VnaHxzdWJwaXhlbHx0ZXh0X2FsaWdufHRleHRfc3R5bGV8dGV4dF94cG9zfHRleHRfeV9mdWRnZXx0ZXh0X3lwb3N8dGh1bWJ8dGh1bWJfb2Zmc2V0fHRodW1iX3NoYWRvd3x0aHVtYm5haWxfaGVpZ2h0fHRodW1ibmFpbF93aWR0aHx0aW1lfHRvcF9iYXJ8dG9wX2d1dHRlcnx0b3BfbWFyZ2lufHRvcF9wYWRkaW5nfHRyYW5zbGF0aW9uc3x1bmRlcmxpbmV8dW5zY3JvbGxhYmxlfHVwZGF0ZXx2YWx1ZXx2ZXJzaW9ufHZlcnNpb25fbmFtZXx2ZXJzaW9uX3R1cGxlfHZlcnRpY2FsfHdpZHRofHdpbmRvd19oaWRlX3RyYW5zaXRpb258d2luZG93X2ljb258d2luZG93X2xlZnRfcGFkZGluZ3x3aW5kb3dfc2hvd190cmFuc2l0aW9ufHdpbmRvd190aXRsZXx3aW5kb3dzX2ljb258eGFkanVzdG1lbnR8eGFsaWdufHhhbmNob3J8eGFuY2hvcmFyb3VuZHx4YXJvdW5kfHhjZW50ZXJ8eGZpbGx8eGluaXRpYWx8eG1hcmdpbnx4bWF4aW11bXx4bWluaW11bXx4b2Zmc2V0fHhvZnNzZXR8eHBhZGRpbmd8eHBvc3x4c2l6ZXx4em9vbXx5YWRqdXN0bWVudHx5YWxpZ258eWFuY2hvcnx5YW5jaG9yYXJvdW5kfHlhcm91bmR8eWNlbnRlcnx5ZmlsbHx5aW5pdGlhbHx5bWFyZ2lufHltYXhpbXVtfHltaW5pbXVtfHlvZmZzZXR8eXBhZGRpbmd8eXBvc3x5c2l6ZXx5c2l6ZXh5c2l6ZXx5em9vbXx6b29tfHpvcmRlcilcXGIvLFxuXG5cdCd0YWcnOiAvXFxiKD86YmFyfGJsb2NrfGJ1dHRvbnxidXR0b3NjcmVlbm58ZHJhZ3xkcmFnZ3JvdXB8Zml4ZWR8ZnJhbWV8Z3JpZHxbaHZdYm94fGhvdGJhcnxob3RzcG90fGltYWdlfGltYWdlYnV0dG9ufGltYWdlbWFwfGlucHV0fGtleXxsYWJlbHxtZW51fG1tX21lbnVfZnJhbWV8bW91c2VhcmVhfG52bHxwYXJhbGxlbHxzY3JlZW58c2VsZnxzaWRlfHRhZ3x0ZXh0fHRleHRidXR0b258dGltZXJ8dmJhcnx2aWV3cG9ydHx3aW5kb3cpXFxifFxcJC8sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86Tm9uZXxhZGR8YWRqdXN0bWVudHxhbGlnbmFyb3VuZHxhbGxvd3xhbmdsZXxhbmltYXRpb258YXJvdW5kfGFzfGFzc2VydHxiZWhpbmR8Ym94X2xheW91dHxicmVha3xidWlsZHxjYWNoZXxjYWxsfGNlbnRlcnxjaGFuZ2VkfGNoaWxkX3NpemV8Y2hvaWNlfGNpcmNsZXN8Y2xhc3N8Y2xlYXJ8Y2xpY2tlZHxjbGlwcGluZ3xjbG9ja3dpc2V8Y29uZmlnfGNvbnRhaW5zfGNvbnRpbnVlfGNvcm5lcjF8Y29ybmVyMnxjb3VudGVyY2xvY2t3aXNlfGRlZnxkZWZhdWx0fGRlZmluZXxkZWx8ZGVsYXl8ZGlzYWJsZWR8ZGlzYWJsZWRfdGV4dHxkaXNzb2x2ZXxlbGlmfGVsc2V8ZXZlbnR8ZXhjZXB0fGV4Y2x1ZGV8ZXhlY3xleHByZXNzaW9ufGZhZGV8ZmluYWxseXxmb3J8ZnJvbXxmdW5jdGlvbnxnbG9iYWx8Z21fcm9vdHxoYXN8aGlkZXxpZHxpZnxpbXBvcnR8aW58aW5pdHxpc3xqdW1wfGtub3R8bGFtYmRhfGxlZnR8bGVzc19yb3VuZGVkfG1tX3Jvb3R8bW92aWV8bXVzaWN8bnVsbHxvbnxvbmxheWVyfHBhc3N8cGF1c2V8cGVyc2lzdGVudHxwbGF5fHByaW50fHB5dGhvbnxxdWV1ZXxyYWlzZXxyYW5kb218cmVucHl8cmVwZWF0fHJldHVybnxyaWdodHxyb3VuZGVkX3dpbmRvd3xzY2VuZXxzY29wZXxzZXR8c2hvd3xzbG93fHNsb3dfYWJvcnRhYmxlfHNsb3dfZG9uZXxzb3VuZHxzdG9wfHN0b3JlfHN0eWxlfHN0eWxlX2dyb3VwfHN1YnN0aXR1dGV8c3VmZml4fHRoZW1lfHRyYW5zZm9ybXx0cmFuc2Zvcm1fYW5jaG9yfHRyYW5zcG9zZXx0cnl8dWl8dW5ob3ZlcmVkfHVwZGF0ZXJ8dXNlfHZvaWNlfHdoaWxlfHdpZGdldHx3aWRnZXRfaG92ZXJ8d2lkZ2V0X3NlbGVjdGVkfHdpZGdldF90ZXh0fHlpZWxkKVxcYi8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86W0ZmXWFsc2V8W1R0XXJ1ZSlcXGIvLFxuXG5cdCdudW1iZXInOiAvKD86XFxiKD86MFtib10pPyg/Oig/OlxcZHwweFtcXGRhLWZdKVtcXGRhLWZdKig/OlxcLlxcZCopPyl8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT9qPy9pLFxuXG5cdCdvcGVyYXRvcic6IC9bLSslPV09P3whPXxcXCpcXCo/PT98XFwvXFwvPz0/fDxbPD0+XT98Pls9Pl0/fFsmfF5+XXxcXGIoPzphbmR8YXR8bm90fG9yfHdpdGgpXFxiLyxcblxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnJlbnB5O1xuXG5QcmlzbS5sYW5ndWFnZXMucmVzY3JpcHQgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7IHBhdHRlcm46IC8nKD86W15cXHJcXG5cXFxcXXxcXFxcKD86LnxcXHcrKSknLywgZ3JlZWR5OiB0cnVlIH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxyXFxuXCJdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KnxAW2Etei5dKnwjW0EtWmEtel1cXHcqfCNcXGQvLFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1thLXpBLVpdXFx3Kig/PVxcKCl8KFxcLilbYS16XVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdH0sXG5cdCdudW1iZXInOiAvKD86XFxiMHgoPzpbXFxkYS1mXSsoPzpcXC5bXFxkYS1mXSopP3xcXC5bXFxkYS1mXSspKD86cFsrLV0/XFxkKyk/fCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pW2Z1bF17MCw0fS9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdhdHRyLXZhbHVlJzogL1tBLVphLXpdXFx3Kig/PT0pLyxcblx0J2NvbnN0YW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxidHlwZVxccyspW2Etel1cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCd0YWcnOiB7XG5cdFx0cGF0dGVybjogLyg8KVthLXpdXFx3KnwoPzo8XFwvKVthLXpdXFx3Ki8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC88fD58XFwvLyxcblx0XHR9LFxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YXN8YXNzZXJ0fGJlZ2lufGJvb2x8Y2xhc3N8Y29uc3RyYWludHxkb3xkb25lfGRvd250b3xlbHNlfGVuZHxleGNlcHRpb258ZXh0ZXJuYWx8ZmxvYXR8Zm9yfGZ1bnxmdW5jdGlvbnxpZnxpbnxpbmNsdWRlfGluaGVyaXR8aW5pdGlhbGl6ZXJ8aW50fGxhenl8bGV0fG1ldGhvZHxtb2R1bGV8bXV0YWJsZXxuZXd8bm9ucmVjfG9iamVjdHxvZnxvcGVufG9yfHByaXZhdGV8cmVjfHN0cmluZ3xzd2l0Y2h8dGhlbnx0b3x0cnl8dHlwZXx3aGVufHdoaWxlfHdpdGgpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcLnszfXw6Wzo9XT98XFx8PnwtPnw9KD86PT0/fD4pP3w8PT98Pj0/fFt8Xj8nIyF+YF18WytcXC0qXFwvXVxcLj98XFxiKD86YXNyfGxhbmR8bG9yfGxzbHxsc3J8bHhvcnxtb2QpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9W1xcXSw7Ll0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdyZXNjcmlwdCcsICdzdHJpbmcnLCB7XG5cdCd0ZW1wbGF0ZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118XFwkXFx7KD86W157fV18XFx7KD86W157fV18XFx7W159XSpcXH0pKlxcfSkrXFx9fCg/IVxcJFxceylbXlxcXFxgXSkqYC8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RlbXBsYXRlLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXmB8YCQvLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5yZXNjcmlwdFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5yZXMgPSBQcmlzbS5sYW5ndWFnZXMucmVzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5yZXN0ID0ge1xuXHQndGFibGUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpcXCtbPS1dKykrXFwrKD86XFxyP1xcbnxcXHIpKD86XFwxWyt8XS4rWyt8XSg/Olxccj9cXG58XFxyKSkrXFwxKD86XFwrWz0tXSspK1xcKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8fCg/OlxcK1s9LV0rKStcXCsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKT0rIFsgPV0qPSg/Oig/Olxccj9cXG58XFxyKVxcMS4rKSsoPzpcXHI/XFxufFxccilcXDE9KyBbID1dKj0oPz0oPzpcXHI/XFxufFxccil7Mn18XFxzKiQpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPS1dKy9cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cblx0Ly8gRGlyZWN0aXZlLWxpa2UgcGF0dGVybnNcblxuXHQnc3Vic3RpdHV0aW9uLWRlZic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFwuXFwuIClcXHwoPzpbXnxcXHNdKD86W158XSpbXnxcXHNdKT8pXFx8IFteOl0rOjovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N1YnN0aXR1dGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXHwoPzpbXnxcXHNdfFtefFxcc11bXnxdKltefFxcc10pXFx8Lyxcblx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXHx8XFx8JC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oICkoPyEgKVteOl0rOjovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6JC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2xpbmstdGFyZ2V0JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4gKVxcW1teXFxdXStcXF0vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFt8XFxdJC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4gKV8oPzpgW15gXStgfCg/OlteOlxcXFxdfFxcXFwuKSspOi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXl98OiQvXG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4gKVteOl0rOjovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6JC9cblx0XHR9XG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdC8vIFRoZSB0d28gYWx0ZXJuYXRpdmVzIHRyeSB0byBwcmV2ZW50IGhpZ2hsaWdodGluZyBvZiBibGFuayBjb21tZW50c1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4pKD86KD86IC4rKT8oPzooPzpcXHI/XFxufFxccikuKykrfCAuKykoPz0oPzpcXHI/XFxufFxccil7Mn18JCkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J3RpdGxlJzogW1xuXHRcdC8vIE92ZXJsaW5lZCBhbmQgdW5kZXJsaW5lZFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9eKChbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKVxcMispKD86XFxyP1xcbnxcXHIpLisoPzpcXHI/XFxufFxccilcXDEkL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dK3xbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKyQvLFxuXHRcdFx0XHQnaW1wb3J0YW50JzogLy4rL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBVbmRlcmxpbmVkIG9ubHlcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58KD86XFxyP1xcbnxcXHIpezJ9KS4rKD86XFxyP1xcbnxcXHIpKFshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0pXFwyKyg/PVxccj9cXG58XFxyfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1shXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0rJC8sXG5cdFx0XHRcdCdpbXBvcnRhbnQnOiAvLisvXG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXHQnaHInOiB7XG5cdFx0cGF0dGVybjogLygoPzpcXHI/XFxufFxccil7Mn0pKFshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0pXFwyezMsfSg/PSg/Olxccj9cXG58XFxyKXsyfSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J2ZpZWxkJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopOlteOlxcclxcbl0rOig/PSApL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0fSxcblx0J2NvbW1hbmQtbGluZS1vcHRpb24nOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpbKy1dW2EtelxcZF18KD86LS18XFwvKVthLXpcXGQtXSspKD86WyA9XSg/OlthLXpdW1xcdy1dKnw8W148Pl0rPikpPyg/OiwgKD86WystXVthLXpcXGRdfCg/Oi0tfFxcLylbYS16XFxkLV0rKSg/OlsgPV0oPzpbYS16XVtcXHctXSp8PFtePD5dKz4pKT8pKig/PSg/Olxccj9cXG58XFxyKT8gezIsfVxcUykvaW0sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0J2xpdGVyYWwtYmxvY2snOiB7XG5cdFx0cGF0dGVybjogLzo6KD86XFxyP1xcbnxcXHIpezJ9KFsgXFx0XSspKD8hWyBcXHRdKS4rKD86KD86XFxyP1xcbnxcXHIpXFwxLispKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbGl0ZXJhbC1ibG9jay1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL146Oi8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQncXVvdGVkLWxpdGVyYWwtYmxvY2snOiB7XG5cdFx0cGF0dGVybjogLzo6KD86XFxyP1xcbnxcXHIpezJ9KFshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0pLiooPzooPzpcXHI/XFxufFxccilcXDEuKikqLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdsaXRlcmFsLWJsb2NrLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXig/Ojo6fChbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKVxcMSopL20sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnbGlzdC1idWxsZXQnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpbKitcXC1cdTIwMjJcdTIwMjNcdTIwNDNdfFxcKD8oPzpcXGQrfFthLXpdfFtpdnhkY2xtXSspXFwpfCg/OlxcZCt8W2Etel18W2l2eGRjbG1dKylcXC4pKD89ICkvaW0sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnZG9jdGVzdC1ibG9jayc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKT4+PiAuKyg/Oig/Olxccj9cXG58XFxyKS4rKSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL14+Pj4vXG5cdFx0fVxuXHR9LFxuXG5cdCdpbmxpbmUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFtcXHNcXC06XFwvJ1wiPChcXFt7XSkoPzo6W146XSs6YC4qP2B8YC4qP2A6W146XSs6fChcXCpcXCo/fGBgP3xcXHwpKD8hXFxzKSg/Oig/IVxcMikuKSpcXFNcXDIoPz1bXFxzXFwtLiw6OyE/XFxcXFxcLydcIilcXF19XXwkKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2JvbGQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFwqXFwqKS4rKD89XFwqXFwqJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2l0YWxpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCopLisoPz1cXCokKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5saW5lLWxpdGVyYWwnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheYGApLisoPz1gYCQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncm9sZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXjpdKzp8OlteOl0rOiQvLFxuXHRcdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL146fDokL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycHJldGVkLXRleHQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheYCkuKyg/PWAkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdWJzdGl0dXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFx8KS4rKD89XFx8JCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwqXFwqP3xgYD98XFx8L1xuXHRcdFx0fVxuXHRcdH1cblx0XSxcblxuXHQnbGluayc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxbW15cXFtcXF1dK1xcXV8oPz1bXFxzXFwtLiw6OyE/XFxcXFxcLydcIilcXF19XXwkKS8sXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFt8XFxdXyQvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKD86XFxiW2EtelxcZF0rKD86W18uOitdW2EtelxcZF0rKSpfP198YFteYF0rYF8/X3xfYFteYF0rYCkoPz1bXFxzXFwtLiw6OyE/XFxcXFxcLydcIilcXF19XXwkKS9pLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXz9gfGAkfGA/Xz9fJC9cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cblx0Ly8gTGluZSBibG9jayBzdGFydCxcblx0Ly8gcXVvdGUgYXR0cmlidXRpb24sXG5cdC8vIGV4cGxpY2l0IG1hcmt1cCBzdGFydCxcblx0Ly8gYW5kIGFub255bW91cyBoeXBlcmxpbmsgdGFyZ2V0IHNob3J0Y3V0IChfXylcblx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86XFx8KD89IHwkKXwoPzotLS0/fFx1MjAxNHxcXC5cXC58X18pKD89ICl8XFwuXFwuJCkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5yaXAgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC9cXEJgW15cXHNgJ1wiLC46OyNcXC9cXFxcKCk8PlxcW1xcXXt9XVxcYi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdyZWdleCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14vXSlcXC8oPyFcXC8pKD86XFxbW15cXG5cXHJcXF1dKlxcXXxcXFxcLnxbXi9cXFxcXFxyXFxuXFxbXSkrXFwvKD89XFxzKig/OiR8W1xcclxcbiwuO30pXSkpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogLyg/Oj0+fC0+KXxcXGIoPzpjYXNlfGNhdGNofGNsYXNzfGVsc2V8ZXhpdHxmaW5hbGx5fGlmfHJhaXNlfHJldHVybnxzd2l0Y2h8dHJ5KVxcYi8sXG5cblx0J2J1aWx0aW4nOiAvQHxcXGJTeXN0ZW1cXGIvLFxuXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnZGF0ZSc6IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfVxcYi8sXG5cdCd0aW1lJzogL1xcYlxcZHsyfTpcXGR7Mn06XFxkezJ9XFxiLyxcblx0J2RhdGV0aW1lJzogL1xcYlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9XFxiLyxcblxuXHQnc3ltYm9sJzogLzpbXlxcZFxcc2AnXCIsLjo7I1xcL1xcXFwoKTw+XFxbXFxde31dW15cXHNgJ1wiLC46OyNcXC9cXFxcKCk8PlxcW1xcXXt9XSovLFxuXHQnbnVtYmVyJzogL1srLV0/XFxiKD86XFxkK1xcLlxcZCt8XFxkKylcXGIvLFxuXG5cdCdwdW5jdHVhdGlvbic6IC8oPzpcXC57MiwzfSl8W2AsLjo7PVxcL1xcXFwoKTw+XFxbXFxde31dLyxcblxuXHQncmVmZXJlbmNlJzogL1teXFxkXFxzYCdcIiwuOjsjXFwvXFxcXCgpPD5cXFtcXF17fV1bXlxcc2AnXCIsLjo7I1xcL1xcXFwoKTw+XFxbXFxde31dKi9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5yb2JvY29uZiA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J2tleXdvcmQnOiB7XG5cdFx0J3BhdHRlcm4nOiAvKF58XFxzKSg/Oig/OmV4dGVybmFsfGltcG9ydClcXGJ8KD86ZmFjZXR8aW5zdGFuY2Ugb2YpKD89WyBcXHRdK1tcXHctXStbIFxcdF0qXFx7KSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2NvbXBvbmVudCc6IHtcblx0XHRwYXR0ZXJuOiAvW1xcdy1dKyg/PVsgXFx0XSpcXHspLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQncHJvcGVydHknOiAvW1xcdy4tXSsoPz1bIFxcdF0qOikvLFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLyg9WyBcXHRdKig/IVsgXFx0XSkpW14sO10rLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0fSxcblx0J29wdGlvbmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXChvcHRpb25hbFxcKS8sXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQnd2lsZGNhcmQnOiB7XG5cdFx0cGF0dGVybjogLyhcXC4pXFwqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9be30sLjs6PV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnQgPSB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKnwgezJ9fFxcdCkjLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXG5cdHZhciB2YXJpYWJsZSA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopWyRAJiVdXFx7KD86W157fVxcclxcbl18XFx7W157fVxcclxcbl0qXFx9KSpcXH0vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXlskQCYlXVxce3xcXH0kL1xuXHRcdH1cblx0fTtcblxuXHRmdW5jdGlvbiBjcmVhdGVTZWN0aW9uKG5hbWUsIGluc2lkZSkge1xuXHRcdHZhciBleHRlbmRlY0luc2lkZSA9IHt9O1xuXG5cdFx0ZXh0ZW5kZWNJbnNpZGVbJ3NlY3Rpb24taGVhZGVyJ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvXiA/XFwqezN9Lis/XFwqezN9Lyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9O1xuXG5cdFx0Ly8gY29weSBpbnNpZGUgdG9rZW5zXG5cdFx0Zm9yICh2YXIgdG9rZW4gaW4gaW5zaWRlKSB7XG5cdFx0XHRleHRlbmRlY0luc2lkZVt0b2tlbl0gPSBpbnNpZGVbdG9rZW5dO1xuXHRcdH1cblxuXHRcdGV4dGVuZGVjSW5zaWRlWyd0YWcnXSA9IHtcblx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0oPzogezJ9fFxcdClbIFxcdF0qKVxcW1stXFx3XStcXF0vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXS9cblx0XHRcdH1cblx0XHR9O1xuXHRcdGV4dGVuZGVjSW5zaWRlWyd2YXJpYWJsZSddID0gdmFyaWFibGU7XG5cdFx0ZXh0ZW5kZWNJbnNpZGVbJ2NvbW1lbnQnXSA9IGNvbW1lbnQ7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC9eID9cXCp7M31bIFxcdF0qPG5hbWU+WyBcXHRdKlxcKnszfSg/Oi58W1xcclxcbl0oPyFcXCp7M30pKSovLnNvdXJjZS5yZXBsYWNlKC88bmFtZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZTsgfSksICdpbScpLFxuXHRcdFx0YWxpYXM6ICdzZWN0aW9uJyxcblx0XHRcdGluc2lkZTogZXh0ZW5kZWNJbnNpZGVcblx0XHR9O1xuXHR9XG5cblxuXHR2YXIgZG9jVGFnID0ge1xuXHRcdHBhdHRlcm46IC8oXFxbRG9jdW1lbnRhdGlvblxcXSg/OiB7Mn18XFx0KVsgXFx0XSopKD8hWyBcXHRdfCMpKD86LnwoPzpcXHJcXG4/fFxcbilbIFxcdF0qXFwuezN9KSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH07XG5cblx0dmFyIHRlc3ROYW1lTGlrZSA9IHtcblx0XHRwYXR0ZXJuOiAvKFtcXHJcXG5dID8pKD8hIykoPzpcXFMoPzpbIFxcdF1cXFMpKikrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGVcblx0XHR9XG5cdH07XG5cblx0dmFyIHRlc3RQcm9wZXJ0eUxpa2UgPSB7XG5cdFx0cGF0dGVybjogLyhbXFxyXFxuXSg/OiB7Mn18XFx0KVsgXFx0XSopKD8hXFxbfFxcLnszfXwjKSg/OlxcUyg/OlsgXFx0XVxcUykqKSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3JvYm90ZnJhbWV3b3JrJ10gPSB7XG5cdFx0J3NldHRpbmdzJzogY3JlYXRlU2VjdGlvbignU2V0dGluZ3MnLCB7XG5cdFx0XHQnZG9jdW1lbnRhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXSA/RG9jdW1lbnRhdGlvbig/OiB7Mn18XFx0KVsgXFx0XSopKD8hWyBcXHRdfCMpKD86LnwoPzpcXHJcXG4/fFxcbilbIFxcdF0qXFwuezN9KSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0gPykoPyFcXC57M318IykoPzpcXFMoPzpbIFxcdF1cXFMpKikrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdCd2YXJpYWJsZXMnOiBjcmVhdGVTZWN0aW9uKCdWYXJpYWJsZXMnKSxcblx0XHQndGVzdC1jYXNlcyc6IGNyZWF0ZVNlY3Rpb24oJ1Rlc3QgQ2FzZXMnLCB7XG5cdFx0XHQndGVzdC1uYW1lJzogdGVzdE5hbWVMaWtlLFxuXHRcdFx0J2RvY3VtZW50YXRpb24nOiBkb2NUYWcsXG5cdFx0XHQncHJvcGVydHknOiB0ZXN0UHJvcGVydHlMaWtlXG5cdFx0fSksXG5cdFx0J2tleXdvcmRzJzogY3JlYXRlU2VjdGlvbignS2V5d29yZHMnLCB7XG5cdFx0XHQna2V5d29yZC1uYW1lJzogdGVzdE5hbWVMaWtlLFxuXHRcdFx0J2RvY3VtZW50YXRpb24nOiBkb2NUYWcsXG5cdFx0XHQncHJvcGVydHknOiB0ZXN0UHJvcGVydHlMaWtlXG5cdFx0fSksXG5cdFx0J3Rhc2tzJzogY3JlYXRlU2VjdGlvbignVGFza3MnLCB7XG5cdFx0XHQndGFzay1uYW1lJzogdGVzdE5hbWVMaWtlLFxuXHRcdFx0J2RvY3VtZW50YXRpb24nOiBkb2NUYWcsXG5cdFx0XHQncHJvcGVydHknOiB0ZXN0UHJvcGVydHlMaWtlXG5cdFx0fSksXG5cdFx0J2NvbW1lbnQnOiBjb21tZW50XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJvYm90ID0gUHJpc20ubGFuZ3VhZ2VzWydyb2JvdGZyYW1ld29yayddO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgbXVsdGlsaW5lQ29tbWVudCA9IC9cXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8PHNlbGY+KSpcXCpcXC8vLnNvdXJjZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHtcblx0XHQvLyBzdXBwb3J0IDQgbGV2ZWxzIG9mIG5lc3RlZCBjb21tZW50c1xuXHRcdG11bHRpbGluZUNvbW1lbnQgPSBtdWx0aWxpbmVDb21tZW50LnJlcGxhY2UoLzxzZWxmPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aWxpbmVDb21tZW50OyB9KTtcblx0fVxuXHRtdWx0aWxpbmVDb21tZW50ID0gbXVsdGlsaW5lQ29tbWVudC5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gL1teXFxzXFxTXS8uc291cmNlOyB9KTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5ydXN0ID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteXFxcXF0pLy5zb3VyY2UgKyBtdWx0aWxpbmVDb21tZW50KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYj9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifGI/cigjKilcIig/OlteXCJdfFwiKD8hXFwxKSkqXCJcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2hhcic6IHtcblx0XHRcdHBhdHRlcm46IC9iPycoPzpcXFxcKD86eFswLTddW1xcZGEtZkEtRl18dVxceyg/OltcXGRhLWZBLUZdXyopezEsNn1cXH18Lil8W15cXFxcXFxyXFxuXFx0J10pJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIyE/XFxbKD86W15cXFtcXF1cIl18XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIikqXFxdLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQ2xvc3VyZSBwYXJhbXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIGJpdHdpc2UgT1IgfFxuXHRcdCdjbG9zdXJlLXBhcmFtcyc6IHtcblx0XHRcdHBhdHRlcm46IC8oWz0oLDpdXFxzKnxcXGJtb3ZlXFxzKilcXHxbXnxdKlxcfHxcXHxbXnxdKlxcfCg/PVxccyooPzpcXHt8LT4pKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjbG9zdXJlLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFx8fFxcfCQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdsaWZldGltZS1hbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLydcXHcrLyxcblx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdH0sXG5cblx0XHQnZnJhZ21lbnQtc3BlY2lmaWVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXCRcXHcrOilbYS16XSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cblx0XHQnZnVuY3Rpb24tZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiZm5cXHMrKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQndHlwZS1kZWZpbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfHN0cnVjdHx0cmFpdHx0eXBlfHVuaW9uKVxccyspXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J21vZHVsZS1kZWNsYXJhdGlvbic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpjcmF0ZXxtb2QpXFxzKylbYS16XVthLXpfXFxkXSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ25hbWVzcGFjZSdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y3JhdGV8c2VsZnxzdXBlcilcXHMqKTo6XFxzKlthLXpdW2Etel9cXGRdKlxcYig/Olxccyo6Oig/OlxccypbYS16XVthLXpfXFxkXSpcXHMqOjopKik/Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICduYW1lc3BhY2UnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOjovXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZWZlcmVuY2UvYmxvYi9tYXN0ZXIvc3JjL2tleXdvcmRzLm1kXG5cdFx0XHQvXFxiKD86U2VsZnxhYnN0cmFjdHxhc3xhc3luY3xhd2FpdHxiZWNvbWV8Ym94fGJyZWFrfGNvbnN0fGNvbnRpbnVlfGNyYXRlfGRvfGR5bnxlbHNlfGVudW18ZXh0ZXJufGZpbmFsfGZufGZvcnxpZnxpbXBsfGlufGxldHxsb29wfG1hY3JvfG1hdGNofG1vZHxtb3ZlfG11dHxvdmVycmlkZXxwcml2fHB1YnxyZWZ8cmV0dXJufHNlbGZ8c3RhdGljfHN0cnVjdHxzdXBlcnx0cmFpdHx0cnl8dHlwZXx0eXBlb2Z8dW5pb258dW5zYWZlfHVuc2l6ZWR8dXNlfHZpcnR1YWx8d2hlcmV8d2hpbGV8eWllbGQpXFxiLyxcblx0XHRcdC8vIHByaW1pdGl2ZXMgYW5kIHN0clxuXHRcdFx0Ly8gaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvcnVzdC1ieS1leGFtcGxlL3ByaW1pdGl2ZXMuaHRtbFxuXHRcdFx0L1xcYig/OmJvb2x8Y2hhcnxmKD86MzJ8NjQpfFt1aV0oPzo4fDE2fDMyfDY0fDEyOHxzaXplKXxzdHIpXFxiL1xuXHRcdF0sXG5cblx0XHQvLyBmdW5jdGlvbnMgY2FuIHRlY2huaWNhbGx5IHN0YXJ0IHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIsIGJ1dCB0aGlzIHdpbGwgaW50cm9kdWNlIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlc1xuXHRcdC8vIGFuZCBSdXN0J3MgbmFtaW5nIGNvbnZlbnRpb25zIHJlY29tbWVuZCBzbmFrZV9jYXNlIGFueXdheS5cblx0XHQvLyBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnLzEuMC4wL3N0eWxlL3N0eWxlL25hbWluZy9SRUFETUUuaHRtbFxuXHRcdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKig/Ojo6XFxzKjx8XFwoKSkvLFxuXHRcdCdtYWNybyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJcXHcrIS8sXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J2NvbnN0YW50JzogL1xcYltBLVpfXVtBLVpfXFxkXStcXGIvLFxuXHRcdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KlxcYi8sXG5cblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0cGF0dGVybjogLyg/OlxcYlthLXpdW2Etel9cXGRdKlxccyo6OlxccyopKlxcYlthLXpdW2Etel9cXGRdKlxccyo6Oig/IVxccyo8KS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBIZXgsIG9jdCwgYmluLCBkZWMgbnVtYmVycyB3aXRoIHZpc3VhbCBzZXBhcmF0b3JzIGFuZCB0eXBlIHN1ZmZpeFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbXFxkQS1GYS1mXSg/Ol8/W1xcZEEtRmEtZl0pKnwwb1swLTddKD86Xz9bMC03XSkqfDBiWzAxXSg/Ol8/WzAxXSkqfCg/Oig/OlxcZCg/Ol8/XFxkKSopP1xcLik/XFxkKD86Xz9cXGQpKig/OltFZV1bKy1dP1xcZCspPykoPzpfPyg/OmYzMnxmNjR8W2l1XSg/Ojh8MTZ8MzJ8NjR8c2l6ZSk/KSk/XFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogLy0+fFxcLlxcLj18XFwuezEsM318Ojp8W3t9W1xcXTsoKSw6XS8sXG5cdFx0J29wZXJhdG9yJzogL1stKypcXC8lIV5dPT98PVs9Pl0/fCZbJj1dP3xcXHxbfD1dP3w8PD89P3w+Pj89P3xbQD9dL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ydXN0WydjbG9zdXJlLXBhcmFtcyddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnJ1c3Q7XG5cdFByaXNtLmxhbmd1YWdlcy5ydXN0WydhdHRyaWJ1dGUnXS5pbnNpZGVbJ3N0cmluZyddID0gUHJpc20ubGFuZ3VhZ2VzLnJ1c3RbJ3N0cmluZyddO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nUGF0dGVybiA9IC8oPzpcIig/OlwiXCJ8W15cIl0pKlwiKD8hXCIpfCcoPzonJ3xbXiddKSonKD8hJykpLy5zb3VyY2U7XG5cblx0dmFyIG51bWJlciA9IC9cXGIoPzpcXGRbXFxkYS1mXSp4fFxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8pXFxiL2k7XG5cdHZhciBudW1lcmljQ29uc3RhbnQgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZ1BhdHRlcm4gKyAnW2J4XScpLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9O1xuXG5cdHZhciBtYWNyb1ZhcmlhYmxlID0ge1xuXHRcdHBhdHRlcm46IC8mW2Etel9dXFx3Ki9pXG5cdH07XG5cblx0dmFyIG1hY3JvS2V5d29yZCA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzfD18XFwoKSklKD86QUJPUlR8Qll8Q01TfENPUFl8RElTUExBWXxET3xFTFNFfEVORHxFVkFMfEdMT0JBTHxHT3xHT1RPfElGfElOQ3xJTkNMVURFfElOREVYfElOUFVUfEtUUklNfExFTkdUSHxMRVR8TElTVHxMT0NBTHxQVVR8UUtUUklNfFFTQ0FOfFFTVUJTVFJ8UVNZU0ZVTkN8UVVQQ0FTRXxSRVRVUk58UlVOfFNDQU58U1VCU1RSfFNVUEVSUXxTWU1ERUx8U1lNRVhJU1R8U1lNR0xPQkx8U1lNTE9DQUx8U1lTQ0FMTHxTWVNFVkFMRnxTWVNFWEVDfFNZU0ZVTkN8U1lTR0VUfFNZU1JQVVR8VEhFTnxUT3xUU098VU5RVU9URXxVTlRJTHxVUENBU0V8V0hJTEV8V0lORE9XKVxcYi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9O1xuXG5cdHZhciBzdGVwID0ge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86cHJvY1xccytcXHcrfGRhdGEoPyE9KXxxdWl0fHJ1bilcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fTtcblxuXHR2YXIgY29tbWVudCA9IFtcblx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKnw7XFxzKilcXCpbXjtdKjsvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF07XG5cblx0dmFyIHN0cmluZyA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoc3RyaW5nUGF0dGVybiksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH07XG5cblx0dmFyIHB1bmN0dWF0aW9uID0gL1skJUAuKCl7fVxcW1xcXTssXFxcXF0vO1xuXG5cdHZhciBmdW5jID0ge1xuXHRcdHBhdHRlcm46IC8lP1xcYlxcdysoPz1cXCgpLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH07XG5cblx0dmFyIGFyZ3MgPSB7XG5cdFx0J2Z1bmN0aW9uJzogZnVuYyxcblx0XHQnYXJnLXZhbHVlJzoge1xuXHRcdFx0cGF0dGVybjogLyg9XFxzKilbQS1aXFwuXSsvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHQnbWFjcm8tdmFyaWFibGUnOiBtYWNyb1ZhcmlhYmxlLFxuXHRcdCdhcmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvW0EtWl0rL2ksXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0fTtcblxuXHR2YXIgZm9ybWF0ID0ge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpmb3JtYXR8cHV0KVxcYj0/W1xcdyckLl0rL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9eKD86Zm9ybWF0fHB1dCkoPz09KS9pLFxuXHRcdFx0J2VxdWFscyc6IC89Lyxcblx0XHRcdCdmb3JtYXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXHd8XFwkXFxkKStcXC5cXGQ/Lyxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhbHRmb3JtYXQgPSB7XG5cdFx0cGF0dGVybjogL1xcYig/OmZvcm1hdHxwdXQpXFxzK1tcXHcnXSsoPzpcXHMrWyQuXFx3XSspKyg/PTspL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9eKD86Zm9ybWF0fHB1dCkvaSxcblx0XHRcdCdmb3JtYXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFx3JF0rXFwuXFxkPy8sXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgZ2xvYmFsU3RhdGVtZW50cyA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKT0/KSg/OmNhdG5hbWV8Y2hlY2twb2ludCBleGVjdXRlX2Fsd2F5c3xkbXxlbmRzYXN8ZmlsZW5hbWV8Zm9vdG5vdGV8JWluY2x1ZGV8bGlibmFtZXwlbGlzdHxsb2NrfG1pc3Npbmd8b3B0aW9uc3xwYWdlfHJlc2V0bGluZXwlcnVufHNhc2ZpbGV8c2tpcHxzeXNlY2hvfHRpdGxlXFxkPylcXGIvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fTtcblxuXHR2YXIgc3VibWl0U3RhdGVtZW50ID0ge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86c3VibWl0KD86XFxzKyg/OmxvYWR8bm9ydW58cGFyc2Vvbmx5KSk/fGVuZHN1Ym1pdClcXGIvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fTtcblxuXHR2YXIgYWN0aW9uU2V0cyA9IC9hU3RvcmV8YWNjZXNzQ29udHJvbHxhZ2dyZWdhdGlvbnxhdWRpb3xhdXRvdHVuZXxiYXllc2lhbk5ldENsYXNzaWZpZXJ8YmlvTWVkSW1hZ2V8Ym9vbFJ1bGV8YnVpbHRpbnN8Y2FyZGluYWxpdHl8Y2RtfGNsdXN0ZXJpbmd8Y29uZGl0aW9uYWxSYW5kb21GaWVsZHN8Y29uZmlndXJhdGlvbnxjb3B1bGF8Y291bnRyZWd8ZGF0YURpc2NvdmVyeXxkYXRhUHJlcHJvY2Vzc3xkYXRhU2NpZW5jZVBpbG90fGRhdGFTdGVwfGRlY2lzaW9uVHJlZXxkZWR1cGxpY2F0aW9ufGRlZXBMZWFybnxkZWVwTmV1cmFsfGRlZXBSbm58ZHMyfGVjbXxlbnRpdHlSZXN8ZXNwQ2x1c3RlcnxleHBsYWluTW9kZWx8ZmFjdG1hY3xmYXN0S25ufGZjbXBhY3R8ZmVkU3FsfGZyZXFUYWJ8Z1ZhckNsdXN0ZXJ8Z2FtfGdsZWFtfGdyYXBoU2VtaVN1cExlYXJufGhpZGRlbk1hcmtvdk1vZGVsfGh5cGVyR3JvdXB8aWNhfGltYWdlfGltbHxrZXJuYWxQY2F8bGFuZ01vZGVsfGxkYVRvcGljfGxvYWRTdHJlYW1zfG1iY3xtaXhlZHxtbFRvb2xzfG1vZGVsUHVibGlzaGluZ3xuZXR3b3JrfG5ldXJhbE5ldHxubWZ8bm9uUGFyYW1ldHJpY0JheWVzfG5vbmxpbmVhcnxvcHROZXR3b3JrfG9wdGltaXphdGlvbnxwYW5lbHxwY2F8cGVyY2VudGlsZXxwaHJlZ3xwbHN8cWtifHFsaW18cXVhbnRyZWd8cmVjb21tZW5kfHJlZ3Jlc3Npb258cmVpbmZvcmNlbWVudExlYXJufHJvYnVzdFBjYXxydWxlTWluaW5nfHNhbXBsaW5nfHNhbmR3aWNofHNjY2FzbHxzZWFyY2goPzpBbmFseXRpY3MpP3xzZW50aW1lbnRBbmFseXNpc3xzZXF1ZW5jZXxzZXNzaW9uKD86UHJvcCk/fHNldmVyaXR5fHNpbVN5c3RlbXxzaW1wbGV8c21hcnREYXRhfHNwYXJrRW1iZWRkZWRQcm9jZXNzfHNwYXJzZU1MfHNwYXRpYWxyZWd8c3BjfHN0YWJpbGl0eU1vbml0b3Jpbmd8c3ZEYXRhRGVzY3JpcHRpb258c3ZtfHRhYmxlfHRleHQoPzpGaWx0ZXJzfEZyZXF1ZW5jeXxNaW5pbmd8UGFyc2V8UnVsZSg/OkRldmVsb3B8U2NvcmUpfFRvcGljfFV0aWwpfHRpbWVEYXRhfHRyYW5zcG9zZXx0c0luZm98dHNSZWNvbmNpbGV8dW5pVGltZVNlcmllc3x2YXJSZWR1Y2UvLnNvdXJjZTtcblxuXHR2YXIgY2FzQWN0aW9ucyA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFxccykoPzphY3Rpb25cXHMrKT8oPzo8YWN0PilcXC5bYS16XStcXGJbXjtdKy8uc291cmNlLnJlcGxhY2UoLzxhY3Q+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFjdGlvblNldHM7IH0pLCAnaScpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IFJlZ0V4cCgvKD86PGFjdD4pXFwuW2Etel0rXFxiLy5zb3VyY2UucmVwbGFjZSgvPGFjdD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aW9uU2V0czsgfSksICdpJyksXG5cdFx0XHQnYWN0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86YWN0aW9uKS9pLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHR9LFxuXHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0J2Z1bmN0aW9uJzogZnVuYyxcblx0XHRcdCdhcmctdmFsdWUnOiBhcmdzWydhcmctdmFsdWUnXSxcblx0XHRcdCdvcGVyYXRvcic6IGFyZ3Mub3BlcmF0b3IsXG5cdFx0XHQnYXJndW1lbnQnOiBhcmdzLmFyZyxcblx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdFx0J3N0cmluZyc6IHN0cmluZ1xuXHRcdH1cblx0fTtcblxuXHR2YXIga2V5d29yZHMgPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccyk9PykoPzphZnRlcnxhbmFseXNpc3xhbmR8YXJyYXl8YmFyY2hhcnR8YmFyd2lkdGh8YmVnaW5ncmFwaHxieXxjYWxsfGNhc3xjYmFybGluZXxjZmlsbHxjbGFzcyg/Omxldik/fGNsb3NlfGNvbHVtbnxjb21wdXRlZD98Y29udGFpbnN8Y29udGludWV8ZGF0YSg/PT0pfGRlZmluZXxkZWxldGV8ZGVzY3JpYmV8ZG9jdW1lbnR8ZG9cXHMrb3Zlcnxkb3xkb2x8ZHJvcHxkdWx8ZWxzZXxlbmQoPzpjb21wfHNvdXJjZSk/fGVudHJ5VGl0bGV8ZXZhbCg/OnVhdGUpP3xleGVjKD86dXRlKT98ZXhpdHxmaWxlKD86bmFtZSk/fGZpbGwoPzphdHRycyk/fGZsaXN0fGZuY3xmdW5jdGlvbig/Omxpc3QpP3xnbG9iYWx8Z290b3xncm91cCg/OmJ5KT98aGVhZGxpbmV8aGVhZHNraXB8aGlzdG9ncmFtfGlmfGluZmlsZXxrZWVwfGtleWxhYmVsfGtleXdvcmR8bGFiZWx8bGF5b3V0fGxlYXZlfGxlZ2VuZGxhYmVsfGxlbmd0aHxsaWJuYW1lfGxvYWRhY3Rpb25zZXR8bWVyZ2V8bWlkcG9pbnRzfF8/bnVsbF98bmFtZXxub29ic3xub3dkfG9kc3xvcHRpb25zfG9yfG90aGVyd2lzZXxvdXQoPzpwdXQpP3xvdmVyKD86bGF5KT98cGxvdHxwcmludHxwdXR8cmFpc2V8cmFuZXhwfHJhbm5vcnxyYnJlYWt8cmV0YWlufHJldHVybnxzZWxlY3R8c2Vzc2lvbnxzZXNzcmVmfHNldHxzb3VyY2V8c3RhdGdyYXBofHN1bXxzdW1tYXJpemV8dGFibGV8dGVtcHx0ZXJtaW5hdGV8dGhlblxccytkb3x0aGVufHRpdGxlXFxkP3x0b3x2YXJ8d2hlbnx3aGVyZXx4YXhpc29wdHN8eTJheGlzb3B0c3x5YXhpc29wdHMpXFxiL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc2FzID0ge1xuXHRcdCdkYXRhbGluZXMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSg/OmNhcmRzfCg/OmRhdGEpP2xpbmVzKTtbXFxzXFxTXSs/XlsgXFx0XSo7L2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXig/OmNhcmRzfCg/OmRhdGEpP2xpbmVzKS9pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC87L1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQncHJvYy1zcWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5wcm9jXFxzKyg/OmZlZCk/c3FsKD86XFxzK1tcXHd8PV0rKT87KVtcXHNcXFNdKz8oPz1eKD86cHJvY1xccytcXHcrfGRhdGF8cXVpdHxydW4pO3woPyFbXFxzXFxTXSkpL2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3FsJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvXlsgXFx0XSooPzpzZWxlY3R8YWx0ZXJcXHMrdGFibGV8KD86Y3JlYXRlfGRlc2NyaWJlfGRyb3ApXFxzKyg/OmluZGV4fHRhYmxlKD86XFxzK2NvbnN0cmFpbnRzKT98dmlldyl8Y3JlYXRlXFxzK3VuaXF1ZVxccytpbmRleHxpbnNlcnRcXHMraW50b3x1cGRhdGUpKD86PHN0cj58W147XCInXSkrOy8uc291cmNlLnJlcGxhY2UoLzxzdHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm47IH0pLCAnaW0nKSxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLXNxbCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuc3FsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdnbG9iYWwtc3RhdGVtZW50cyc6IGdsb2JhbFN0YXRlbWVudHMsXG5cdFx0XHRcdCdzcWwtc3RhdGVtZW50cyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OmRpc2Nvbm5lY3RcXHMrZnJvbXxiZWdpbnxjb21taXR8ZXhlYyg/OnV0ZSk/fHJlc2V0fHJvbGxiYWNrfHZhbGlkYXRlKVxcYi9pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Byb2MtZ3Jvb3Z5Jzoge1xuXHRcdFx0cGF0dGVybjogLyhecHJvY1xccytncm9vdnkoPzpcXHMrW1xcd3w9XSspPzspW1xcc1xcU10rPyg/PV4oPzpwcm9jXFxzK1xcdyt8ZGF0YXxxdWl0fHJ1bik7fCg/IVtcXHNcXFNdKSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J2dyb292eSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyheWyBcXHRdKnN1Ym1pdCg/OlxccysoPzpsb2FkfG5vcnVufHBhcnNlb25seSkpPykoPzo8c3RyPnxbXlwiJ10pKz8oPz1lbmRzdWJtaXQ7KS8uc291cmNlLnJlcGxhY2UoLzxzdHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm47IH0pLCAnaW0nKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtZ3Jvb3Z5Jyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5ncm9vdnlcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J3N1Ym1pdC1zdGF0ZW1lbnQnOiBzdWJtaXRTdGF0ZW1lbnQsXG5cdFx0XHRcdCdnbG9iYWwtc3RhdGVtZW50cyc6IGdsb2JhbFN0YXRlbWVudHMsXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvbixcblx0XHRcdFx0J3N0cmluZyc6IHN0cmluZ1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQncHJvYy1sdWEnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5wcm9jXFxzK2x1YSg/OlxccytbXFx3fD1dKyk/OylbXFxzXFxTXSs/KD89Xig/OnByb2NcXHMrXFx3K3xkYXRhfHF1aXR8cnVuKTt8KD8hW1xcc1xcU10pKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQnbHVhJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF5bIFxcdF0qc3VibWl0KD86XFxzKyg/OmxvYWR8bm9ydW58cGFyc2Vvbmx5KSk/KSg/OjxzdHI+fFteXCInXSkrPyg/PWVuZHN1Ym1pdDspLy5zb3VyY2UucmVwbGFjZSgvPHN0cj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nUGF0dGVybjsgfSksICdpbScpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1sdWEnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmx1YVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQnc3VibWl0LXN0YXRlbWVudCc6IHN1Ym1pdFN0YXRlbWVudCxcblx0XHRcdFx0J2dsb2JhbC1zdGF0ZW1lbnRzJzogZ2xvYmFsU3RhdGVtZW50cyxcblx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0J251bWVyaWMtY29uc3RhbnQnOiBudW1lcmljQ29uc3RhbnQsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdwcm9jLWNhcyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnByb2NcXHMrY2FzKD86XFxzK1tcXHd8PV0rKT87KVtcXHNcXFNdKz8oPz1eKD86cHJvY1xccytcXHcrfHF1aXR8ZGF0YSk7fCg/IVtcXHNcXFNdKSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J3N0YXRlbWVudC12YXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFxccyk9PylzYXZlcmVzdWx0XFxzW147XSsvaW0sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblxuXHRcdFx0XHRcdFx0J3N0YXRlbWVudCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL15zYXZlcmVzdWx0XFxzK1xcUysvaSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0a2V5d29yZDogL14oPzpzYXZlcmVzdWx0KS9pXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZXN0OiBhcmdzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY2FzLWFjdGlvbnMnOiBjYXNBY3Rpb25zLFxuXHRcdFx0XHQnc3RhdGVtZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHMpPT8pKD86ZGVmYXVsdHwoPzp1bik/c2V0fG9ufG91dHB1dHx1cGxvYWQpW147XSsvaW0sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IGFyZ3Ncblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0ZXAnOiBzdGVwLFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQnZnVuY3Rpb24nOiBmdW5jLFxuXHRcdFx0XHQnZm9ybWF0JzogZm9ybWF0LFxuXHRcdFx0XHQnYWx0Zm9ybWF0JzogYWx0Zm9ybWF0LFxuXHRcdFx0XHQnZ2xvYmFsLXN0YXRlbWVudHMnOiBnbG9iYWxTdGF0ZW1lbnRzLFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Byb2MtYXJncyc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF5wcm9jXFxzK1xcdytcXHMrKSg/IVxccykoPzpbXjtcIiddfDxzdHI+KSs7Ly5zb3VyY2UucmVwbGFjZSgvPHN0cj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nUGF0dGVybjsgfSksICdpbScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogYXJnc1xuXHRcdH0sXG5cdFx0LypTcGVjaWFsIGtleXdvcmRzIHdpdGhpbiBtYWNyb3MqL1xuXHRcdCdtYWNyby1rZXl3b3JkJzogbWFjcm9LZXl3b3JkLFxuXHRcdCdtYWNyby12YXJpYWJsZSc6IG1hY3JvVmFyaWFibGUsXG5cdFx0J21hY3JvLXN0cmluZy1mdW5jdGlvbnMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzfD0pKSUoPzpCUVVPVEV8TlJCUVVPVEV8TlJRVU9URXxOUlNUUnxRVU9URXxTVFIpXFwoLio/KD86W14lXVxcKSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8lKD86QlFVT1RFfE5SQlFVT1RFfE5SUVVPVEV8TlJTVFJ8UVVPVEV8U1RSKS9pLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J21hY3JvLWtleXdvcmQnOiBtYWNyb0tleXdvcmQsXG5cdFx0XHRcdCdtYWNyby12YXJpYWJsZSc6IG1hY3JvVmFyaWFibGUsXG5cdFx0XHRcdCdlc2NhcGVkLWNoYXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyVbJ1wiKCk8Pj1cdTAwQUNefjssI10vLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvblxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J21hY3JvLWRlY2xhcmF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL14lbWFjcm9bXjtdKyg/PTspL2ltLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogLyVtYWNyby9pLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J21hY3JvLWVuZCc6IHtcblx0XHRcdHBhdHRlcm46IC9eJW1lbmRbXjtdKyg/PTspL2ltLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogLyVtZW5kL2ksXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKiVfenNjb3JlKGhlYWRjaXIsIF9saGMsIF9taGMsIF9zaGMsIGhlYWRjeiwgaGVhZGNwY3QsIF9GaGVhZGN6KTsgKi9cblx0XHQnbWFjcm8nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJV9cXHcrKD89XFwoKS8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQnaW5wdXQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiaW5wdXRcXHNbLVxcd1xccy8qLiQmXSs7L2ksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2lucHV0Jzoge1xuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdFx0cGF0dGVybjogL15pbnB1dC9pLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb3B0aW9ucy1hcmdzJzoge1xuXHRcdFx0cGF0dGVybjogLyheb3B0aW9ucylbLSdcInwvXFxcXDw+Kis9OigpXFx3XFxzXSooPz07KS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IGFyZ3Ncblx0XHR9LFxuXHRcdCdjYXMtYWN0aW9ucyc6IGNhc0FjdGlvbnMsXG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdCdmdW5jdGlvbic6IGZ1bmMsXG5cdFx0J2Zvcm1hdCc6IGZvcm1hdCxcblx0XHQnYWx0Zm9ybWF0JzogYWx0Zm9ybWF0LFxuXHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdCdkYXRldGltZSc6IHtcblx0XHRcdC8vICcxamFuMjAxMydkLCAnOToyNToxOXBtJ3QsICcxOGphbjIwMDM6OToyNzowNWFtJ2R0XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoc3RyaW5nUGF0dGVybiArICcoPzpkdD98dCknKSxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHN0cmluZyxcblx0XHQnc3RlcCc6IHN0ZXAsXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQvLyBJbiBTQVMgU3R1ZGlvIHN5bnRheCBoaWdobGlnaHRpbmcsIHRoZXNlIG9wZXJhdG9ycyBhcmUgc3R5bGVkIGxpa2Uga2V5d29yZHNcblx0XHQnb3BlcmF0b3Ita2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzplcXxnZXxndHxpbnxsZXxsdHxuZXxub3QpXFxiL2ksXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0Ly8gRGVjaW1hbCAoMS4yZTIzKSwgaGV4YWRlY2ltYWwgKDBjMXgpXG5cdFx0J251bWJlcic6IG51bWJlcixcblx0XHQnb3BlcmF0b3InOiAvXFwqXFwqP3xcXHxcXHw/fCEhP3xcdTAwQTZcdTAwQTY/fDxbPj1dP3w+Wzw9XT98Wy0rXFwvPSZdfFt+XHUwMEFDXl09Py8sXG5cdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb25cblx0fTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5zYXNzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NzJywge1xuXHRcdC8vIFNhc3MgY29tbWVudHMgZG9uJ3QgbmVlZCB0byBiZSBjbG9zZWQsIG9ubHkgaW5kZW50ZWRcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopXFwvW1xcLypdLiooPzooPzpcXHI/XFxufFxccilcXDFbIFxcdF0uKykqL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzYXNzJywgJ2F0cnVsZScsIHtcblx0XHQvLyBXZSB3YW50IHRvIGNvbnN1bWUgdGhlIHdob2xlIGxpbmVcblx0XHQnYXRydWxlLWxpbmUnOiB7XG5cdFx0XHQvLyBJbmNsdWRlcyBzdXBwb3J0IGZvciA9IGFuZCArIHNob3J0Y3V0c1xuXHRcdFx0cGF0dGVybjogL14oPzpbIFxcdF0qKVtAKz1dLisvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXRydWxlJzogLyg/OkBbXFx3LV0rfFsrPV0pL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuc2Fzcy5hdHJ1bGU7XG5cblxuXHR2YXIgdmFyaWFibGUgPSAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS87XG5cdHZhciBvcGVyYXRvciA9IFtcblx0XHQvWysqXFwvJV18Wz0hXT18PD0/fD49P3xcXGIoPzphbmR8bm90fG9yKVxcYi8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHMpLSg/PVxccykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzYXNzJywgJ3Byb3BlcnR5Jywge1xuXHRcdC8vIFdlIHdhbnQgdG8gY29uc3VtZSB0aGUgd2hvbGUgbGluZVxuXHRcdCd2YXJpYWJsZS1saW5lJzoge1xuXHRcdFx0cGF0dGVybjogL15bIFxcdF0qXFwkLisvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlLFxuXHRcdFx0XHQnb3BlcmF0b3InOiBvcGVyYXRvclxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gV2Ugd2FudCB0byBjb25zdW1lIHRoZSB3aG9sZSBsaW5lXG5cdFx0J3Byb3BlcnR5LWxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlsgXFx0XSooPzpbXjpcXHNdKyAqOi4qfDpbXjpcXHNdLiopL20sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3Byb3BlcnR5JzogW1xuXHRcdFx0XHRcdC9bXjpcXHNdKyg/PVxccyo6KS8sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyg6KVteOlxcc10rLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Lyxcblx0XHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGUsXG5cdFx0XHRcdCdvcGVyYXRvcic6IG9wZXJhdG9yLFxuXHRcdFx0XHQnaW1wb3J0YW50JzogUHJpc20ubGFuZ3VhZ2VzLnNhc3MuaW1wb3J0YW50XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5zYXNzLnByb3BlcnR5O1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNhc3MuaW1wb3J0YW50O1xuXG5cdC8vIE5vdyB0aGF0IHdob2xlIGxpbmVzIGZvciBvdGhlciBwYXR0ZXJucyBhcmUgY29uc3VtZWQsXG5cdC8vIHdoYXQncyBsZWZ0IHNob3VsZCBiZSBzZWxlY3RvcnNcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc2FzcycsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnc2VsZWN0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKVxcUyg/OixbXixcXHJcXG5dK3xbXixcXHJcXG5dKikoPzosW14sXFxyXFxuXSspKig/OiwoPzpcXHI/XFxufFxccilcXDFbIFxcdF0rXFxTKD86LFteLFxcclxcbl0rfFteLFxcclxcbl0qKSg/OixbXixcXHJcXG5dKykqKSovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5zY3NzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NzJywge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnYXRydWxlJzoge1xuXHRcdHBhdHRlcm46IC9AW1xcdy1dKD86XFwoW14oKV0rXFwpfFteKClcXHNdfFxccysoPyFcXHMpKSo/KD89XFxzK1t7O10pLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdydWxlJzogL0BbXFx3LV0rL1xuXHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHR9XG5cdH0sXG5cdC8vIHVybCwgY29tcGFzc2lmaWVkXG5cdCd1cmwnOiAvKD86Wy1hLXpdKy0pP3VybCg/PVxcKCkvaSxcblx0Ly8gQ1NTIHNlbGVjdG9yIHJlZ2V4IGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgU2Fzc1xuXHQvLyBzaW5jZSB0aGVyZSBjYW4gYmUgbG90IG1vcmUgdGhpbmdzICh2YXIsIEAgZGlyZWN0aXZlLCBuZXN0aW5nLi4pXG5cdC8vIGEgc2VsZWN0b3IgbXVzdCBzdGFydCBhdCB0aGUgZW5kIG9mIGEgcHJvcGVydHkgb3IgYWZ0ZXIgYSBicmFjZSAoZW5kIG9mIG90aGVyIHJ1bGVzIG9yIG5lc3RpbmcpXG5cdC8vIGl0IGNhbiBjb250YWluIHNvbWUgY2hhcmFjdGVycyB0aGF0IGFyZW4ndCB1c2VkIGZvciBkZWZpbmluZyBydWxlcyBvciBlbmQgb2Ygc2VsZWN0b3IsICYgKHBhcmVudCBzZWxlY3RvciksIG9yIGludGVycG9sYXRlZCB2YXJpYWJsZVxuXHQvLyB0aGUgZW5kIG9mIGEgc2VsZWN0b3IgaXMgZm91bmQgd2hlbiB0aGVyZSBpcyBubyBydWxlcyBpbiBpdCAoIHt9IG9yIHtcXHN9KSBvciBpZiB0aGVyZSBpcyBhIHByb3BlcnR5IChiZWNhdXNlIGFuIGludGVycG9sYXRlZCB2YXJcblx0Ly8gY2FuIFwicGFzc1wiIGFzIGEgc2VsZWN0b3ItIGUuZzogcHJvcGVyI3skZXJ0eX0pXG5cdC8vIHRoaXMgb25lIHdhcyBoYXJkIHRvIGRvLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBpZiB5b3UgZWRpdCB0aGlzIG9uZSA6KVxuXHQnc2VsZWN0b3InOiB7XG5cdFx0Ly8gSW5pdGlhbCBsb29rLWFoZWFkIGlzIHVzZWQgdG8gcHJldmVudCBtYXRjaGluZyBvZiBibGFuayBzZWxlY3RvcnNcblx0XHRwYXR0ZXJuOiAvKD89XFxTKVteQDt7fSgpXT8oPzpbXkA7e30oKVxcc118XFxzKyg/IVxccyl8I1xce1xcJFstXFx3XStcXH0pKyg/PVxccypcXHsoPzpcXH18XFxzfFtefV1bXjp7fV0qWzp7XVtefV0pKS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncGFyZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvJi8sXG5cdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0fSxcblx0XHRcdCdwbGFjZWhvbGRlcic6IC8lWy1cXHddKy8sXG5cdFx0XHQndmFyaWFibGUnOiAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS9cblx0XHR9XG5cdH0sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKD86Wy1cXHddfFxcJFstXFx3XXwjXFx7XFwkWy1cXHddK1xcfSkrKD89XFxzKjopLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC9cXCRbLVxcd10rfCNcXHtcXCRbLVxcd10rXFx9L1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3Njc3MnLCAnYXRydWxlJywge1xuXHQna2V5d29yZCc6IFtcblx0XHQvQCg/OmNvbnRlbnR8ZGVidWd8ZWFjaHxlbHNlKD86IGlmKT98ZXh0ZW5kfGZvcnxmb3J3YXJkfGZ1bmN0aW9ufGlmfGltcG9ydHxpbmNsdWRlfG1peGlufHJldHVybnx1c2V8d2Fybnx3aGlsZSlcXGIvaSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKCApKD86ZnJvbXx0aHJvdWdoKSg/PSApLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzY3NzJywgJ2ltcG9ydGFudCcsIHtcblx0Ly8gdmFyIGFuZCBpbnRlcnBvbGF0ZWQgdmFyc1xuXHQndmFyaWFibGUnOiAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzY3NzJywgJ2Z1bmN0aW9uJywge1xuXHQnbW9kdWxlLW1vZGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphc3xoaWRlfHNob3d8d2l0aClcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdwbGFjZWhvbGRlcic6IHtcblx0XHRwYXR0ZXJuOiAvJVstXFx3XSsvLFxuXHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdH0sXG5cdCdzdGF0ZW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcQiEoPzpkZWZhdWx0fG9wdGlvbmFsKVxcYi9pLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVsbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxibnVsbFxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhcXHMpKD86Wy0rKlxcLyVdfFs9IV09fDw9P3w+PT98YW5kfG5vdHxvcikoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuc2Nzc1snYXRydWxlJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMuc2NzcztcblxuUHJpc20ubGFuZ3VhZ2VzLnNjYWxhID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YScsIHtcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC88LXw9PnxcXGIoPzphYnN0cmFjdHxjYXNlfGNhdGNofGNsYXNzfGRlZnxkb3xlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8Zm9yU29tZXxpZnxpbXBsaWNpdHxpbXBvcnR8bGF6eXxtYXRjaHxuZXd8bnVsbHxvYmplY3R8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxyZXR1cm58c2VhbGVkfHNlbGZ8c3VwZXJ8dGhpc3x0aHJvd3x0cmFpdHx0cnl8dHlwZXx2YWx8dmFyfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0J251bWJlcic6IC9cXGIweCg/OltcXGRhLWZdKlxcLik/W1xcZGEtZl0rfCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplXFxkKyk/W2RmbF0/L2ksXG5cdCdidWlsdGluJzogL1xcYig/OkFueXxBbnlSZWZ8QW55VmFsfEJvb2xlYW58Qnl0ZXxDaGFyfERvdWJsZXxGbG9hdHxJbnR8TG9uZ3xOb3RoaW5nfFNob3J0fFN0cmluZ3xVbml0KVxcYi8sXG5cdCdzeW1ib2wnOiAvJ1teXFxkXFxzXFxcXF1cXHcqL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NjYWxhJywgJ3RyaXBsZS1xdW90ZWQtc3RyaW5nJywge1xuXHQnc3RyaW5nLWludGVycG9sYXRpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpdXFx3Kig/OlwiXCJcIig/OlteJF18XFwkKD86W157XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkpKj9cIlwiXCJ8XCIoPzpbXiRcIlxcclxcbl18XFwkKD86W157XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkpKlwiKS9pLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpZCc6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXHcrLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdlc2NhcGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFxcXFwkXCJ8XFwkWyRcIl0vLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0fSxcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86XFx3K3xcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwkXFx7P3xcXH0kLyxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuc2NhbGFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNjYWxhWydjbGFzcy1uYW1lJ107XG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNjYWxhWydmdW5jdGlvbiddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gQ0FSRUZVTCFcblx0Ly8gVGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgY29uY2F0ZW5hdGVkLCBzbyB0aGUgZ3JvdXAgcmVmZXJlbmNlZCBieSBhIGJhY2sgcmVmZXJlbmNlIGlzIG5vbi1vYnZpb3VzIVxuXG5cdHZhciBzdHJpbmdzID0gW1xuXHRcdC8vIG5vcm1hbCBzdHJpbmdcblx0XHQvXCIoPzpcXFxcW1xcc1xcU118XFwkXFwoW14pXStcXCl8XFwkKD8hXFwoKXxgW15gXStgfFteXCJcXFxcYCRdKSpcIi8uc291cmNlLFxuXHRcdC8nW14nXSonLy5zb3VyY2UsXG5cdFx0L1xcJCcoPzpbXidcXFxcXXxcXFxcW1xcc1xcU10pKicvLnNvdXJjZSxcblxuXHRcdC8vIGhlcmUgZG9jXG5cdFx0Ly8gMiBjYXB0dXJpbmcgZ3JvdXBzXG5cdFx0Lzw8LT9cXHMqKFtcIiddPykoXFx3KylcXDFcXHNbXFxzXFxTXSo/W1xcclxcbl1cXDIvLnNvdXJjZVxuXHRdLmpvaW4oJ3wnKTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3NoZWxsLXNlc3Npb24nXSA9IHtcblx0XHQnY29tbWFuZCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0Ly8gdXNlciBpbmZvXG5cdFx0XHRcdC9eLy5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdChcblx0XHRcdFx0XHQvLyA8dXNlcj4gXCI6XCIgKCA8cGF0aD4gKT9cblx0XHRcdFx0XHQvW15cXHNAOiQjJSohL1xcXFxdK0BbXlxcclxcbkA6JCMlKiEvXFxcXF0rKD86OlteXFwwLVxceDFGJCMlKj9cIjw+Ojt8XSspPy8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIDxwYXRoPlxuXHRcdFx0XHRcdC8vIFNpbmNlIHRoZSBwYXRoIHBhdHRlcm4gaXMgcXVpdGUgZ2VuZXJhbCwgd2Ugd2lsbCByZXF1aXJlIGl0IHRvIHN0YXJ0IHdpdGggYSBzcGVjaWFsIGNoYXJhY3RlciB0b1xuXHRcdFx0XHRcdC8vIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzLlxuXHRcdFx0XHRcdC9bL34uXVteXFwwLVxceDFGJCMlKj9cIjw+QDo7fF0qLy5zb3VyY2Vcblx0XHRcdFx0KSArXG5cdFx0XHRcdCcpPycgK1xuXHRcdFx0XHQvLyBzaGVsbCBzeW1ib2xcblx0XHRcdFx0L1skIyVdKD89XFxzKS8uc291cmNlICtcblx0XHRcdFx0Ly8gYmFzaCBjb21tYW5kXG5cdFx0XHRcdC8oPzpbXlxcXFxcXHJcXG4gXFx0J1wiPCRdfFsgXFx0XSg/Oig/ISMpfCMuKiQpfFxcXFwoPzpbXlxccl18XFxyXFxuPyl8XFwkKD8hJyl8PCg/ITwpfDw8c3RyPj4pKy8uc291cmNlLnJlcGxhY2UoLzw8c3RyPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nczsgfSksXG5cdFx0XHRcdCdtJ1xuXHRcdFx0KSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW5mbyc6IHtcblx0XHRcdFx0XHQvLyBmb29AYmFyOn4vZmlsZXMkIGV4aXRcblx0XHRcdFx0XHQvLyBmb29AYmFyJCBleGl0XG5cdFx0XHRcdFx0Ly8gfi9maWxlcyQgZXhpdFxuXHRcdFx0XHRcdHBhdHRlcm46IC9eW14jJCVdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndXNlcic6IC9eW15cXHNAOiQjJSohL1xcXFxdK0BbXlxcclxcbkA6JCMlKiEvXFxcXF0rLyxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Lyxcblx0XHRcdFx0XHRcdCdwYXRoJzogL1tcXHNcXFNdKy9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdiYXNoJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlskIyVdXFxzKilcXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1iYXNoJyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5iYXNoXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzaGVsbC1zeW1ib2wnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15bJCMlXS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvdXRwdXQnOiAvLig/Oi4qKD86W1xcclxcbl18LiQpKSovXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydzaC1zZXNzaW9uJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ3NoZWxsc2Vzc2lvbiddID0gUHJpc20ubGFuZ3VhZ2VzWydzaGVsbC1zZXNzaW9uJ107XG5cbn0oUHJpc20pKTtcblxuLy8gVGVzdCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpdHNlbGY6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vSmVzdXNGcmVrZS9zbWFsaS90cmVlL21hc3Rlci9zbWFsaS9zcmMvdGVzdC9yZXNvdXJjZXMvTGV4ZXJUZXN0XG5cblByaXNtLmxhbmd1YWdlcy5zbWFsaSA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcclxcblxcXFxcIl18XFxcXC4pKlwifCcoPzpbXlxcclxcblxcXFwnXXxcXFxcKD86Lnx1W1xcZGEtZkEtRl17NH0pKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXkxdKUwoPzooPzpcXHcrfGBbXmBcXHJcXG5dKmApXFwvKSooPzpbXFx3JF0rfGBbXmBcXHJcXG5dKmApKD89XFxzKjspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXkx8XFwvKSg/OltcXHckXSt8YFteYFxcclxcbl0qYCkkLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKEwpKD86KD86XFx3K3xgW15gXFxyXFxuXSpgKVxcLykrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdidWlsdGluJzogL15ML1xuXHRcdH1cblx0fSxcblx0J2J1aWx0aW4nOiBbXG5cdFx0e1xuXHRcdFx0Ly8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vSmVzdXNGcmVrZS9zbWFsaS93aWtpL1R5cGVzTWV0aG9kc0FuZEZpZWxkcyN0eXBlc1xuXHRcdFx0cGF0dGVybjogLyhbKCk7XFxbXSlbQkNERklKU1ZaXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gZS5nLiAuZmllbGQgbVdpZmlPblVpZDpJXG5cdFx0XHRwYXR0ZXJuOiAvKFtcXHckPl06KVtCQ0RGSUpTVlpdLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwuZW5kXFxzKylbXFx3LV0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSlcXC4oPyFcXGQpW1xcdy1dKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pKD86YWJzdHJhY3R8YW5ub3RhdGlvbnxicmlkZ2V8Y29uc3RydWN0b3J8ZW51bXxmaW5hbHxpbnRlcmZhY2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJ1bnRpbWV8c3RhdGljfHN5bnRoZXRpY3xzeXN0ZW18dHJhbnNpZW50KSg/IVtcXHcuLV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pKD86XFx3K3w8W1xcdyQtXSs+KSg/PVxcKCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnZmllbGQnOiB7XG5cdFx0cGF0dGVybjogL1tcXHckXSsoPz06KS8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3JlZ2lzdGVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSlbdnBdXFxkKD8hW1xcdy4tXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblxuXHQnYm9vbGVhbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pKD86ZmFsc2V8dHJ1ZSkoPyFbXFx3Li1dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi9cXHcuLV0pLT8oPzpOQU58SU5GSU5JVFl8MHgoPzpbXFxkQS1GXSsoPzpcXC5bXFxkQS1GXSopP3xcXC5bXFxkQS1GXSspKD86cFsrLV0/W1xcZEEtRl0rKT98KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylbZGZsc3RdPyg/IVtcXHcuLV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKDopXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXG5cdCdvcGVyYXRvcic6IC8tPnxcXC5cXC58W1xcWz1dLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpLDs6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zbWFsbHRhbGsgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8W15cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogL1xcJC4vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8nKD86Jyd8W14nXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzeW1ib2wnOiAvI1tcXGRhLXpdK3wjKD86LXwoWytcXC9cXFxcKn48Pj1AJXwmPyFdKVxcMT8pfCMoPz1cXCgpL2ksXG5cdCdibG9jay1hcmd1bWVudHMnOiB7XG5cdFx0cGF0dGVybjogLyhcXFtcXHMqKTpbXlxcW3xdKlxcfC8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC86W1xcZGEtel0rL2ksXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdH1cblx0fSxcblx0J3RlbXBvcmFyeS12YXJpYWJsZXMnOiB7XG5cdFx0cGF0dGVybjogL1xcfFtefF0rXFx8Lyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC9bXFxkYS16XSsvaSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpuZXd8bmlsfHNlbGZ8c3VwZXIpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC9cXGQrci0/W1xcZEEtWl0rKD86XFwuW1xcZEEtWl0rKT8oPzplLT9cXGQrKT8vLFxuXHRcdC9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZS0/XFxkKyk/L1xuXHRdLFxuXHQnb3BlcmF0b3InOiAvWzw9XT0/fDo9fH5bfj1dfFxcL1xcLz98XFxcXFxcXFx8Pls+PV0/fFshXitcXC0qJnwsQF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWy47Oj9cXFtcXF0oKXt9XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21hcnR5ID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtcXCpbXFxzXFxTXSo/XFwqXFx9Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2VtYmVkZGVkLXBocCc6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7cGhwXFx9W1xcc1xcU10qP1xce1xcL3BocFxcfS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3NtYXJ0eSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxce3BocFxcfXxcXHtcXC9waHBcXH0kLyxcblx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwaHAnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1waHAnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnBocFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXHtbXnt9XSpcXH18YFteYF0qYC8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL15be2BdfFtgfV0kLyxcblx0XHRcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9cXCRcXHcrL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKSonLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHtcXC8/KVthLXpfXVxcdypcXGIoPyFcXCgpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtcXC8/fFxcfSQvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bLStdP1xcZCspPy8sXG5cdFx0J3ZhcmlhYmxlJzogW1xuXHRcdFx0L1xcJCg/IVxcZClcXHcrLyxcblx0XHRcdC8jKD8hXFxkKVxcdysjLyxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXC58LT58XFx3XFxzKj0pKD8hXFxkKVxcdytcXGIoPyFcXCgpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXFspKD8hXFxkKVxcdysoPz1cXF0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKUA/W2Etel9dXFx3KnxcXGJbYS16X11cXHcqKD89XFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2F0dHItbmFtZSc6IC9cXGJbYS16X11cXHcqKD89XFxzKj0pL2ksXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bm98b2ZmfG9ufHRydWV8eWVzKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9Liw6YF18LT4vLFxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdC9bK1xcLSpcXC8lXXw9PT89P3xbITw+XT0/fCYmfFxcfFxcfD8vLFxuXHRcdFx0L1xcYmlzXFxzKyg/Om5vdFxccyspPyg/OmRpdnxldmVufG9kZCkoPzpcXHMrYnkpP1xcYi8sXG5cdFx0XHQvXFxiKD86YW5kfGVxfGd0P2V8Z3R8bHQ/ZXxsdHxtb2R8bmVxP3xub3R8b3IpXFxiL1xuXHRcdF1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21hcnR5WydlbWJlZGRlZC1waHAnXS5pbnNpZGUuc21hcnR5Lmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zbWFydHk7XG5cdFByaXNtLmxhbmd1YWdlcy5zbWFydHkuc3RyaW5nWzBdLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zbWFydHk7XG5cblx0dmFyIHN0cmluZyA9IC9cIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKSonLztcblx0dmFyIHNtYXJ0eVBhdHRlcm4gPSBSZWdFeHAoXG5cdFx0Ly8gY29tbWVudHNcblx0XHQvXFx7XFwqW1xcc1xcU10qP1xcKlxcfS8uc291cmNlICtcblx0XHQnfCcgK1xuXHRcdC8vIHBocCB0YWdzXG5cdFx0L1xce3BocFxcfVtcXHNcXFNdKj9cXHtcXC9waHBcXH0vLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvLyBzbWFydHkgYmxvY2tzXG5cdFx0L1xceyg/Oltee31cIiddfDxzdHI+fFxceyg/Oltee31cIiddfDxzdHI+fFxceyg/Oltee31cIiddfDxzdHI+KSpcXH0pKlxcfSkqXFx9Ly5zb3VyY2Vcblx0XHRcdC5yZXBsYWNlKC88c3RyPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmcuc291cmNlOyB9KSxcblx0XHQnZydcblx0KTtcblxuXHQvLyBUb2tlbml6ZSBhbGwgaW5saW5lIFNtYXJ0eSBleHByZXNzaW9uc1xuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgc21hcnR5TGl0ZXJhbFN0YXJ0ID0gJ3tsaXRlcmFsfSc7XG5cdFx0dmFyIHNtYXJ0eUxpdGVyYWxFbmQgPSAney9saXRlcmFsfSc7XG5cdFx0dmFyIHNtYXJ0eUxpdGVyYWxNb2RlID0gZmFsc2U7XG5cblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnc21hcnR5Jywgc21hcnR5UGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0XHQvLyBTbWFydHkgdGFncyBpbnNpZGUge2xpdGVyYWx9IGJsb2NrIGFyZSBpZ25vcmVkXG5cdFx0XHRpZiAobWF0Y2ggPT09IHNtYXJ0eUxpdGVyYWxFbmQpIHtcblx0XHRcdFx0c21hcnR5TGl0ZXJhbE1vZGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzbWFydHlMaXRlcmFsTW9kZSkge1xuXHRcdFx0XHRpZiAobWF0Y2ggPT09IHNtYXJ0eUxpdGVyYWxTdGFydCkge1xuXHRcdFx0XHRcdHNtYXJ0eUxpdGVyYWxNb2RlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9KTtcblxuXHQvLyBSZS1pbnNlcnQgdGhlIHRva2VucyBhZnRlciB0b2tlbml6aW5nXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3NtYXJ0eScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3NtbGZhbWlseS5naXRodWIuaW8vc21sOTctZGVmbi5wZGZcbi8vIGh0dHBzOi8vcGVvcGxlLm1waS1zd3Mub3JnL35yb3NzYmVyZy9zbWwuaHRtbFxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXl3b3JkcyA9IC9cXGIoPzphYnN0eXBlfGFuZHxhbmRhbHNvfGFzfGNhc2V8ZGF0YXR5cGV8ZG98ZWxzZXxlbmR8ZXF0eXBlfGV4Y2VwdGlvbnxmbnxmdW58ZnVuY3RvcnxoYW5kbGV8aWZ8aW58aW5jbHVkZXxpbmZpeHxpbmZpeHJ8bGV0fGxvY2FsfG5vbmZpeHxvZnxvcHxvcGVufG9yZWxzZXxyYWlzZXxyZWN8c2hhcmluZ3xzaWd8c2lnbmF0dXJlfHN0cnVjdHxzdHJ1Y3R1cmV8dGhlbnx0eXBlfHZhbHx3aGVyZXx3aGlsZXx3aXRofHdpdGh0eXBlKVxcYi9pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zbWwgPSB7XG5cdFx0Ly8gYWxsb3cgb25lIGxldmVsIG9mIG5lc3Rpbmdcblx0XHQnY29tbWVudCc6IC9cXChcXCooPzpbXiooXXxcXCooPyFcXCkpfFxcKCg/IVxcKil8XFwoXFwqKD86W14qKF18XFwqKD8hXFwpKXxcXCgoPyFcXCopKSpcXCpcXCkpKlxcKlxcKS8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8jP1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFRoaXMgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIHNpbmNlIHRoZSByZWFsIGdyYW1tYXIgaXMgY29udGV4dC1mcmVlXG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIFdoeSB0aGUgbWFpbiBsb29wIHNvIGNvbXBsZXg/XG5cdFx0XHRcdC8vIFRoZSBtYWluIGxvb3AgaXMgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBhcyAvKD86XFxzKig/OlsqLF18LT4pXFxzKjxURVJNSU5BTD4pKi8gd2hpY2ggaXMsIG9idmlvdXNseSwgYSBsb3Rcblx0XHRcdFx0Ly8gc2ltcGxlci4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpZiBhIGNvbW1hIGlzIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgdGhlbiB0aGUgdGVybWluYWwgbXVzdCBiZVxuXHRcdFx0XHQvLyBmb2xsb3dlZCBieSBhIGxvbmcgaWRlbnRpZmllci5cblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdC8oKD86XnxbXjpdKTpcXHMqKTxURVJNSU5BTD4oPzpcXHMqKD86KD86XFwqfC0+KVxccyo8VEVSTUlOQUw+fCxcXHMqPFRFUk1JTkFMPig/Oig/PTxOT1QtTEFTVD4pfCg/ITxOT1QtTEFTVD4pXFxzKzxMT05HLUlEPikpKSovLnNvdXJjZVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLzxOT1QtTEFTVD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gL1xccyooPzpbKixdfC0+KS8uc291cmNlOyB9KVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLzxURVJNSU5BTD4vZywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gLyg/OidbXFx3J10qfDxMT05HLUlEPnxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkoPzpcXHMrPExPTkctSUQ+KSovLnNvdXJjZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvPExPTkctSUQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oPyE8S0VZV09SRD4pW2EtelxcZF9dW1xcdycuXSovLnNvdXJjZTsgfSlcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC88S0VZV09SRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5d29yZHMuc291cmNlOyB9KSxcblx0XHRcdFx0XHQnaSdcblx0XHRcdFx0KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXHcnXSkoPzpkYXRhdHlwZXxleGNlcHRpb258ZnVuY3RvcnxzaWduYXR1cmV8c3RydWN0dXJlfHR5cGUpXFxzKylbYS16X11bXFx3Jy5dKi9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXHcnXSlmdW5cXHMrKVthLXpfXVtcXHcnLl0qL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3J10pJ1tcXHcnXSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXG5cdFx0J251bWJlcic6IC9+P1xcYig/OlxcZCsoPzpcXC5cXGQrKT8oPzplfj9cXGQrKT98MHhbXFxkYS1mXSspXFxiL2ksXG5cdFx0J3dvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiMHcoPzpcXGQrfHhbXFxkYS1mXSspXFxiL2ksXG5cdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHRcdCdvcGVyYXRvcic6IC9cXC5cXC5cXC58Ols+PTpdfD0+P3wtPnxbPD5dPT98WyErXFwtKi9eI3xAfl0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXS46LDtdL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zbWxbJ2NsYXNzLW5hbWUnXVswXS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuc21sO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zbWxuaiA9IFByaXNtLmxhbmd1YWdlcy5zbWw7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNvbGlkaXR5ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86Y29udHJhY3R8ZW51bXxpbnRlcmZhY2V8bGlicmFyeXxuZXd8c3RydWN0fHVzaW5nKVxccyspKD8hXFxkKVtcXHckXSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86X3xhbm9ueW1vdXN8YXN8YXNzZW1ibHl8YXNzZXJ0fGJyZWFrfGNhbGxkYXRhfGNhc2V8Y29uc3RhbnR8Y29uc3RydWN0b3J8Y29udGludWV8Y29udHJhY3R8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbWl0fGVudW18ZXZlbnR8ZXh0ZXJuYWx8Zm9yfGZyb218ZnVuY3Rpb258aWZ8aW1wb3J0fGluZGV4ZWR8aW5oZXJpdGVkfGludGVyZmFjZXxpbnRlcm5hbHxpc3xsZXR8bGlicmFyeXxtYXBwaW5nfG1lbW9yeXxtb2RpZmllcnxuZXd8cGF5YWJsZXxwcmFnbWF8cHJpdmF0ZXxwdWJsaWN8cHVyZXxyZXF1aXJlfHJldHVybnM/fHJldmVydHxzZWxmZGVzdHJ1Y3R8c29saWRpdHl8c3RvcmFnZXxzdHJ1Y3R8c3VpY2lkZXxzd2l0Y2h8dGhpc3x0aHJvd3x1c2luZ3x2YXJ8dmlld3x3aGlsZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvPT58LT58Oj18PTp8XFwqXFwqfFxcK1xcK3wtLXxcXHxcXHx8JiZ8PDw9P3w+Pj0/fFstKyovJV4mfDw+IT1dPT98W34/XS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzb2xpZGl0eScsICdrZXl3b3JkJywge1xuXHQnYnVpbHRpbic6IC9cXGIoPzphZGRyZXNzfGJvb2x8Ynl0ZXx1P2ludCg/Ojh8MTZ8MjR8MzJ8NDB8NDh8NTZ8NjR8NzJ8ODB8ODh8OTZ8MTA0fDExMnwxMjB8MTI4fDEzNnwxNDR8MTUyfDE2MHwxNjh8MTc2fDE4NHwxOTJ8MjAwfDIwOHwyMTZ8MjI0fDIzMnwyNDB8MjQ4fDI1Nik/fHN0cmluZ3xieXRlcyg/OlsxLTldfFsxMl1cXGR8M1swLTJdKT8pXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NvbGlkaXR5JywgJ251bWJlcicsIHtcblx0J3ZlcnNpb24nOiB7XG5cdFx0cGF0dGVybjogLyhbPD5dPT98XFxeKVxcZCtcXC5cXGQrXFwuXFxkK1xcYi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcicsXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuc29sID0gUHJpc20ubGFuZ3VhZ2VzLnNvbGlkaXR5O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGd1aWQgPSB7XG5cdFx0Ly8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pdmVyc2FsbHlfdW5pcXVlX2lkZW50aWZpZXIjRm9ybWF0XG5cdFx0cGF0dGVybjogL1xce1tcXGRhLWZdezh9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezEyfVxcfS9pLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlc1snc29sdXRpb24tZmlsZSddID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZ3VpZCc6IGd1aWRcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvYmplY3QnOiB7XG5cdFx0XHQvLyBGb29cblx0XHRcdC8vICAgQmFyKFwiYWJzXCIpID0gOVxuXHRcdFx0Ly8gICBFbmRCYXJcblx0XHRcdC8vICAgUHJvcCA9IFRSVUVcblx0XHRcdC8vIEVuZEZvb1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKikoPzooW0EtWl1cXHcqKVxcYig/PS4qKD86XFxyXFxuP3xcXG4pKD86XFwxWyBcXHRdLiooPzpcXHJcXG4/fFxcbikpKlxcMUVuZFxcMig/PVsgXFx0XSokKSl8RW5kW0EtWl1cXHcqKD89WyBcXHRdKiQpKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD8hXFxzKVteXFxyXFxuXCIjPSgpXSpbXlxcc1wiIz0oKV0oPz1cXHMqPSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2d1aWQnOiBndWlkXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZ3VpZCc6IGd1aWQsXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKykqXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxUUlVFKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogLz0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3NsbiddID0gUHJpc20ubGFuZ3VhZ2VzWydzb2x1dGlvbi1maWxlJ107XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgc3RyaW5nUGF0dGVybiA9IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XG5cdHZhciBudW1iZXJQYXR0ZXJuID0gL1xcYlxcZCsoPzpcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT9cXGJ8XFxiMHhbXFxkQS1GXStcXGIvO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zb3kgPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY29tbWFuZC1hcmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxceytcXC8/XFxzKig/OmFsaWFzfGNhbGx8ZGVsY2FsbHxkZWxwYWNrYWdlfGRlbHRlbXBsYXRlfG5hbWVzcGFjZXx0ZW1wbGF0ZSlcXHMrKVxcLj9bXFx3Ll0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxceytcXC8/XFxzKkA/cGFyYW1cXD8/XFxzKylcXC4/W1xcdy5dKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxceytcXC8/W15cXFNcXHJcXG5dKikoPzpcXFxcW25ydF18YWxpYXN8Y2FsbHxjYXNlfGNzc3xkZWZhdWx0fGRlbGNhbGx8ZGVscGFja2FnZXxkZWx0ZW1wbGF0ZXxlbHNlKD86aWYpP3xmYWxsYmFja21zZ3xmb3IoPzplYWNoKT98aWYoPzplbXB0eSk/fGxifGxldHxsaXRlcmFsfG1zZ3xuYW1lc3BhY2V8bmlsfEA/cGFyYW1cXD8/fHJifHNwfHN3aXRjaHx0ZW1wbGF0ZXx4aWQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzphbnl8YXN8YXR0cmlidXRlc3xib29sfGNzc3xmbG9hdHxodG1sfGlufGludHxqc3xsaXN0fG1hcHxudWxsfG51bWJlcnxzdHJpbmd8dXJpKVxcYi9cblx0XHRdLFxuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxceytcXC8/fFxcLz9cXH0rJC8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3Byb3BlcnR5JzogL1xcdysoPz09KS8sXG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJFteXFxXXFxkXVxcdyooPzpcXD8/KD86XFwuXFx3K3xcXFtbXlxcXV0rXFxdKSkqLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHN0cmluZ1BhdHRlcm4sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXJQYXR0ZXJuLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXS4/XS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiBzdHJpbmdQYXR0ZXJuLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiBbXG5cdFx0XHQvXFx3Kyg/PVxcKCkvLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcfFteXFxTXFxyXFxuXSopXFx3Ky8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnbnVtYmVyJzogbnVtYmVyUGF0dGVybixcblx0XHQnb3BlcmF0b3InOiAvXFw/Oj98PD0/fD49P3w9PT98IT18WysqLyUtXXxcXGIoPzphbmR8bm90fG9yKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdfC4sOl0vXG5cdH07XG5cblx0Ly8gVG9rZW5pemUgYWxsIGlubGluZSBTb3kgZXhwcmVzc2lvbnNcblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIHNveVBhdHRlcm4gPSAvXFx7XFx7Lis/XFx9XFx9fFxcey4rP1xcfXxcXHNcXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2c7XG5cdFx0dmFyIHNveUxpdHRlcmFsU3RhcnQgPSAne2xpdGVyYWx9Jztcblx0XHR2YXIgc295TGl0dGVyYWxFbmQgPSAney9saXRlcmFsfSc7XG5cdFx0dmFyIHNveUxpdHRlcmFsTW9kZSA9IGZhbHNlO1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ3NveScsIHNveVBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuXHRcdFx0Ly8gU295IHRhZ3MgaW5zaWRlIHtsaXRlcmFsfSBibG9jayBhcmUgaWdub3JlZFxuXHRcdFx0aWYgKG1hdGNoID09PSBzb3lMaXR0ZXJhbEVuZCkge1xuXHRcdFx0XHRzb3lMaXR0ZXJhbE1vZGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzb3lMaXR0ZXJhbE1vZGUpIHtcblx0XHRcdFx0aWYgKG1hdGNoID09PSBzb3lMaXR0ZXJhbFN0YXJ0KSB7XG5cdFx0XHRcdFx0c295TGl0dGVyYWxNb2RlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9KTtcblxuXHQvLyBSZS1pbnNlcnQgdGhlIHRva2VucyBhZnRlciB0b2tlbml6aW5nXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3NveScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudHVydGxlID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J211bHRpbGluZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiXCJcIig/Oig/OlwiXCI/KT8oPzpbXlwiXFxcXF18XFxcXC4pKSpcIlwiXCJ8JycnKD86KD86Jyc/KT8oPzpbXidcXFxcXXxcXFxcLikpKicnJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb21tZW50JzogLyMuKi9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cXFxcXCJcXHJcXG5dfFxcXFwuKSpcInwnKD86W15cXFxcJ1xcclxcbl18XFxcXC4pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndXJsJzoge1xuXHRcdHBhdHRlcm46IC88KD86W15cXHgwMC1cXHgyMDw+XCJ7fXxeYFxcXFxdfFxcXFwoPzp1W1xcZGEtZkEtRl17NH18VVtcXGRhLWZBLUZdezh9KSkqPi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1s8Pl0vXG5cdFx0fVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyg/Oig/IVstLlxcZFxceEI3XSlbLS5cXHdcXHhCN1xceEMwLVxcdUZGRkRdKyk/Oig/Oig/IVstLl0pKD86Wy0uOlxcd1xceEMwLVxcdUZGRkRdfCVbXFxkYS1mXXsyfXxcXFxcLikrKT8vaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdsb2NhbC1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFteOl0qOilbXFxzXFxTXSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3ByZWZpeCc6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnbnVtYmVyJzogL1srLV0/XFxiXFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspPy9pLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9Liw7KClbXFxdXXxcXF5cXF4vLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC8oPzpcXGJhfEBwcmVmaXh8QGJhc2UpXFxifD0vLFxuXHRcdC9cXGIoPzpiYXNlfGdyYXBofHByZWZpeClcXGIvaVxuXHRdLFxuXHQndGFnJzoge1xuXHRcdHBhdHRlcm46IC9AW2Etel0rKD86LVthLXpcXGRdKykqL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvQC9cblx0XHR9XG5cdH1cbn07XG5QcmlzbS5sYW5ndWFnZXMudHJpZyA9IFByaXNtLmxhbmd1YWdlc1sndHVydGxlJ107XG5cblByaXNtLmxhbmd1YWdlcy5zcGFycWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCd0dXJ0bGUnLCB7XG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdCd2YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvWz8kXVxcdysvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxufVxuKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc3BhcnFsJywgJ3B1bmN0dWF0aW9uJywge1xuXHQna2V5d29yZCc6IFtcblx0XHQvXFxiKD86QXxBRER8QUxMfEFTfEFTQ3xBU0t8Qk5PREV8Qll8Q0xFQVJ8Q09OU1RSVUNUfENPUFl8Q1JFQVRFfERBVEF8REVGQVVMVHxERUxFVEV8REVTQ3xERVNDUklCRXxESVNUSU5DVHxEUk9QfEVYSVNUU3xGSUxURVJ8RlJPTXxHUk9VUHxIQVZJTkd8SU5TRVJUfElOVE98TElNSVR8TE9BRHxNSU5VU3xNT1ZFfE5BTUVEfE5PVHxOT1d8T0ZGU0VUfE9QVElPTkFMfE9SREVSfFJBTkR8UkVEVUNFRHxTRUxFQ1R8U0VQQVJBVE9SfFNFUlZJQ0V8U0lMRU5UfFNUUlVVSUR8VU5JT058VVNJTkd8VVVJRHxWQUxVRVN8V0hFUkUpXFxiL2ksXG5cdFx0L1xcYig/OkFCU3xBVkd8QklORHxCT1VORHxDRUlMfENPQUxFU0NFfENPTkNBVHxDT05UQUlOU3xDT1VOVHxEQVRBVFlQRXxEQVl8RU5DT0RFX0ZPUl9VUkl8RkxPT1J8R1JPVVBfQ09OQ0FUfEhPVVJTfElGfElSSXxpc0JMQU5LfGlzSVJJfGlzTElURVJBTHxpc05VTUVSSUN8aXNVUkl8TEFOR3xMQU5HTUFUQ0hFU3xMQ0FTRXxNQVh8TUQ1fE1JTnxNSU5VVEVTfE1PTlRIfFJFR0VYfFJFUExBQ0V8Uk9VTkR8c2FtZVRlcm18U0FNUExFfFNFQ09ORFN8U0hBMXxTSEEyNTZ8U0hBMzg0fFNIQTUxMnxTVFJ8U1RSQUZURVJ8U1RSQkVGT1JFfFNUUkRUfFNUUkVORFN8U1RSTEFOR3xTVFJMRU58U1RSU1RBUlRTfFNVQlNUUnxTVU18VElNRVpPTkV8VFp8VUNBU0V8VVJJfFlFQVIpXFxiKD89XFxzKlxcKCkvaSxcblx0XHQvXFxiKD86QkFTRXxHUkFQSHxQUkVGSVgpXFxiL2lcblx0XVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ycSA9IFByaXNtLmxhbmd1YWdlcy5zcGFycWw7XG5cblByaXNtLmxhbmd1YWdlc1snc3BsdW5rLXNwbCddID0ge1xuXHQnY29tbWVudCc6IC9gY29tbWVudFxcKFwiKD86XFxcXC58W15cXFxcXCJdKSpcIlxcKWAvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBodHRwczovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay83LjMuMC9TZWFyY2hSZWZlcmVuY2UvTGlzdE9mU2VhcmNoQ29tbWFuZHNcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YWNjdW18YWRkY29sdG90YWxzfGFkZGluZm98YWRkdG90YWxzfGFuYWx5emVmaWVsZHN8YW5vbWFsaWVzfGFub21hbG91c3ZhbHVlfGFub21hbHlkZXRlY3Rpb258YXBwZW5kfGFwcGVuZGNvbHN8YXBwZW5kY3N2fGFwcGVuZGxvb2t1cHxhcHBlbmRwaXBlfGFydWxlc3xhc3NvY2lhdGV8YXVkaXR8YXV0b3JlZ3Jlc3N8YmlufGJ1Y2tldHxidWNrZXRkaXJ8Y2hhcnR8Y2x1c3Rlcnxjb2ZpbHRlcnxjb2xsZWN0fGNvbmN1cnJlbmN5fGNvbnRpbmdlbmN5fGNvbnZlcnR8Y29ycmVsYXRlfGRhdGFtb2RlbHxkYmluc3BlY3R8ZGVkdXB8ZGVsZXRlfGRlbHRhfGRpZmZ8ZXJleHxldmFsfGV2ZW50Y291bnR8ZXZlbnRzdGF0c3xleHRyYWN0fGZpZWxkZm9ybWF0fGZpZWxkc3xmaWVsZHN1bW1hcnl8ZmlsbGRvd258ZmlsbG51bGx8ZmluZHR5cGVzfGZvbGRlcml6ZXxmb3JlYWNofGZvcm1hdHxmcm9tfGdhdWdlfGdlbnRpbWVzfGdlb218Z2VvbWZpbHRlcnxnZW9zdGF0c3xoZWFkfGhpZ2hsaWdodHxoaXN0b3J5fGljb25pZnl8aW5wdXR8aW5wdXRjc3Z8aW5wdXRsb29rdXB8aXBsb2NhdGlvbnxqb2lufGttZWFuc3xrdnxrdmZvcm18bG9hZGpvYnxsb2NhbGl6ZXxsb2NhbG9wfGxvb2t1cHxtYWtlY29udGludW91c3xtYWtlbXZ8bWFrZXJlc3VsdHN8bWFwfG1jb2xsZWN0fG1ldGFkYXRhfG1ldGFzZWFyY2h8bWV2ZW50Y29sbGVjdHxtc3RhdHN8bXVsdGlrdnxtdWx0aXNlYXJjaHxtdmNvbWJpbmV8bXZleHBhbmR8bm9tdnxvdXRsaWVyfG91dHB1dGNzdnxvdXRwdXRsb29rdXB8b3V0cHV0dGV4dHxvdmVybGFwfHBpdm90fHByZWRpY3R8cmFuZ2VtYXB8cmFyZXxyZWdleHxyZWxldmFuY3l8cmVsdGltZXxyZW5hbWV8cmVwbGFjZXxyZXN0fHJldHVybnxyZXZlcnNlfHJleHxydG9yZGVyfHJ1bnxzYXZlZHNlYXJjaHxzY3JpcHR8c2NydWJ8c2VhcmNofHNlYXJjaHR4bnxzZWxmam9pbnxzZW5kZW1haWx8c2V0fHNldGZpZWxkc3xzaWNoYXJ0fHNpcmFyZXxzaXN0YXRzfHNpdGltZWNoYXJ0fHNpdG9wfHNvcnR8c3BhdGh8c3RhdHN8c3RyY2F0fHN0cmVhbXN0YXRzfHRhYmxlfHRhZ3N8dGFpbHx0aW1lY2hhcnR8dGltZXdyYXB8dG9wfHRyYW5zYWN0aW9ufHRyYW5zcG9zZXx0cmVuZGxpbmV8dHNjb2xsZWN0fHRzdGF0c3x0eXBlYWhlYWR8dHlwZWxlYXJuZXJ8dHlwZXJ8dW5pb258dW5pcXx1bnRhYmxlfHdoZXJlfHgxMXx4bWxrdnx4bWx1bmVzY2FwZXx4cGF0aHx4eXNlcmllcylcXGIvaSxcblx0J29wZXJhdG9yLXdvcmQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFuZHxhc3xieXxub3R8b3J8eG9yKVxcYi9pLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHQncHJvcGVydHknOiAvXFxiXFx3Kyg/PVxccyo9KD8hPSkpLyxcblx0J2RhdGUnOiB7XG5cdFx0Ly8gTU0vREQvWVlZWSg6SEg6TU06U1MpP1xuXHRcdHBhdHRlcm46IC9cXGJcXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezEsNH0oPzooPzo6XFxkezEsMn0pezN9KT9cXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmfGZhbHNlfHR8dHJ1ZSlcXGIvaSxcblx0J29wZXJhdG9yJzogL1s8Pj1dPT98Wy0rKi8lfF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNxZiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/Oig/OlwiXCIpP1teXCJdKSpcIig/IVwiKXwnKD86W14nXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrT3V0fGJyZWFrVG98Y2FsbHxjYXNlfGNhdGNofGRlZmF1bHR8ZG98ZWNob3xlbHNlfGV4ZWNGU018ZXhlY1ZNfGV4aXRXaXRofGZvcnxmb3JFYWNofGZvckVhY2hNZW1iZXJ8Zm9yRWFjaE1lbWJlckFnZW50fGZvckVhY2hNZW1iZXJUZWFtfGZyb218Z290b3xpZnxuaWx8cHJlcHJvY2Vzc0ZpbGV8cHJlcHJvY2Vzc0ZpbGVMaW5lTnVtYmVyc3xwcml2YXRlfHNjb3BlTmFtZXxzcGF3bnxzdGVwfHN3aXRjaHx0aGVufHRocm93fHRvfHRyeXx3aGlsZXx3aXRoKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86YWJzfGFjY1RpbWV8YWNvc3xhY3Rpb258YWN0aW9uSURzfGFjdGlvbktleXN8YWN0aW9uS2V5c0ltYWdlc3xhY3Rpb25LZXlzTmFtZXN8YWN0aW9uS2V5c05hbWVzQXJyYXl8YWN0aW9uTmFtZXxhY3Rpb25QYXJhbXN8YWN0aXZhdGVBZGRvbnN8YWN0aXZhdGVkQWRkb25zfGFjdGl2YXRlS2V5fGFkZDNERU5Db25uZWN0aW9ufGFkZDNERU5FdmVudEhhbmRsZXJ8YWRkM0RFTkxheWVyfGFkZEFjdGlvbnxhZGRCYWNrcGFja3xhZGRCYWNrcGFja0NhcmdvfGFkZEJhY2twYWNrQ2FyZ29HbG9iYWx8YWRkQmFja3BhY2tHbG9iYWx8YWRkQ2FtU2hha2V8YWRkQ3VyYXRvckFkZG9uc3xhZGRDdXJhdG9yQ2FtZXJhQXJlYXxhZGRDdXJhdG9yRWRpdGFibGVPYmplY3RzfGFkZEN1cmF0b3JFZGl0aW5nQXJlYXxhZGRDdXJhdG9yUG9pbnRzfGFkZEVkaXRvck9iamVjdHxhZGRFdmVudEhhbmRsZXJ8YWRkRm9yY2V8YWRkRm9yY2VHZW5lcmF0b3JSVER8YWRkR29nZ2xlc3xhZGRHcm91cEljb258YWRkSGFuZGd1bkl0ZW18YWRkSGVhZGdlYXJ8YWRkSXRlbXxhZGRJdGVtQ2FyZ298YWRkSXRlbUNhcmdvR2xvYmFsfGFkZEl0ZW1Qb29sfGFkZEl0ZW1Ub0JhY2twYWNrfGFkZEl0ZW1Ub1VuaWZvcm18YWRkSXRlbVRvVmVzdHxhZGRMaXZlU3RhdHN8YWRkTWFnYXppbmV8YWRkTWFnYXppbmVBbW1vQ2FyZ298YWRkTWFnYXppbmVDYXJnb3xhZGRNYWdhemluZUNhcmdvR2xvYmFsfGFkZE1hZ2F6aW5lR2xvYmFsfGFkZE1hZ2F6aW5lUG9vbHxhZGRNYWdhemluZXN8YWRkTWFnYXppbmVUdXJyZXR8YWRkTWVudXxhZGRNZW51SXRlbXxhZGRNaXNzaW9uRXZlbnRIYW5kbGVyfGFkZE1QRXZlbnRIYW5kbGVyfGFkZE11c2ljRXZlbnRIYW5kbGVyfGFkZE93bmVkTWluZXxhZGRQbGF5ZXJTY29yZXN8YWRkUHJpbWFyeVdlYXBvbkl0ZW18YWRkUHVibGljVmFyaWFibGVFdmVudEhhbmRsZXJ8YWRkUmF0aW5nfGFkZFJlc291cmNlc3xhZGRTY29yZXxhZGRTY29yZVNpZGV8YWRkU2Vjb25kYXJ5V2VhcG9uSXRlbXxhZGRTd2l0Y2hhYmxlVW5pdHxhZGRUZWFtTWVtYmVyfGFkZFRvUmVtYWluc0NvbGxlY3RvcnxhZGRUb3JxdWV8YWRkVW5pZm9ybXxhZGRWZWhpY2xlfGFkZFZlc3R8YWRkV2F5cG9pbnR8YWRkV2VhcG9ufGFkZFdlYXBvbkNhcmdvfGFkZFdlYXBvbkNhcmdvR2xvYmFsfGFkZFdlYXBvbkdsb2JhbHxhZGRXZWFwb25JdGVtfGFkZFdlYXBvblBvb2x8YWRkV2VhcG9uVHVycmV0fGFkbWlufGFnZW50fGFnZW50c3xBR0xUb0FTTHxhaW1lZEF0VGFyZ2V0fGFpbVBvc3xhaXJEZW5zaXR5Q3VydmVSVER8YWlyRGVuc2l0eVJURHxhaXJwbGFuZVRocm90dGxlfGFpcnBvcnRTaWRlfEFJU0ZpbmlzaEhlYWx8YWxpdmV8YWxsM0RFTkVudGl0aWVzfGFsbEFpcnBvcnRzfGFsbENvbnRyb2xzfGFsbEN1cmF0b3JzfGFsbEN1dExheWVyc3xhbGxEZWFkfGFsbERlYWRNZW58YWxsRGlzcGxheXN8YWxsR3JvdXBzfGFsbE1hcE1hcmtlcnN8YWxsTWluZXN8YWxsTWlzc2lvbk9iamVjdHN8YWxsb3czRE1vZGV8YWxsb3dDcmV3SW5JbW1vYmlsZXxhbGxvd0N1cmF0b3JMb2dpY0lnbm9yZUFyZWFzfGFsbG93RGFtYWdlfGFsbG93RGFtbWFnZXxhbGxvd0ZpbGVPcGVyYXRpb25zfGFsbG93RmxlZWluZ3xhbGxvd0dldElufGFsbG93U3ByaW50fGFsbFBsYXllcnN8YWxsU2ltcGxlT2JqZWN0c3xhbGxTaXRlc3xhbGxUdXJyZXRzfGFsbFVuaXRzfGFsbFVuaXRzVUFWfGFsbFZhcmlhYmxlc3xhbW1vfGFtbW9PblB5bG9ufGFuaW1hdGV8YW5pbWF0ZUJheXxhbmltYXRlRG9vcnxhbmltYXRlUHlsb258YW5pbWF0ZVNvdXJjZXxhbmltYXRpb25OYW1lc3xhbmltYXRpb25QaGFzZXxhbmltYXRpb25Tb3VyY2VQaGFzZXxhbmltYXRpb25TdGF0ZXxhcHBlbmR8YXBwbHl8YXJtb3J5UG9pbnRzfGFycmF5SW50ZXJzZWN0fGFzaW58QVNMVG9BR0x8QVNMVG9BVEx8YXNzZXJ0fGFzc2lnbkFzQ2FyZ298YXNzaWduQXNDYXJnb0luZGV4fGFzc2lnbkFzQ29tbWFuZGVyfGFzc2lnbkFzRHJpdmVyfGFzc2lnbkFzR3VubmVyfGFzc2lnbkFzVHVycmV0fGFzc2lnbkN1cmF0b3J8YXNzaWduZWRDYXJnb3xhc3NpZ25lZENvbW1hbmRlcnxhc3NpZ25lZERyaXZlcnxhc3NpZ25lZEd1bm5lcnxhc3NpZ25lZEl0ZW1zfGFzc2lnbmVkVGFyZ2V0fGFzc2lnbmVkVGVhbXxhc3NpZ25lZFZlaGljbGV8YXNzaWduZWRWZWhpY2xlUm9sZXxhc3NpZ25JdGVtfGFzc2lnblRlYW18YXNzaWduVG9BaXJwb3J0fGF0YW58YXRhbjJ8YXRnfEFUTFRvQVNMfGF0dGFjaGVkT2JqZWN0fGF0dGFjaGVkT2JqZWN0c3xhdHRhY2hlZFRvfGF0dGFjaE9iamVjdHxhdHRhY2hUb3xhdHRhY2tFbmFibGVkfGJhY2twYWNrfGJhY2twYWNrQ2FyZ298YmFja3BhY2tDb250YWluZXJ8YmFja3BhY2tJdGVtc3xiYWNrcGFja01hZ2F6aW5lc3xiYWNrcGFja1NwYWNlRm9yfGJlaGF2aW91cnxiZW5jaG1hcmt8Ymlub2N1bGFyfGJsdWZvcnxib3VuZGluZ0JveHxib3VuZGluZ0JveFJlYWx8Ym91bmRpbmdDZW50ZXJ8YnJpZWZpbmdOYW1lfGJ1aWxkaW5nRXhpdHxidWlsZGluZ1Bvc3xidWxkb3plcl9FbmFibGVSb2FkRGlhZ3xidWxkb3plcl9Jc0VuYWJsZWRSb2FkRGlhZ3xidWxkb3plcl9Mb2FkTmV3Um9hZHN8YnVsZG96ZXJfcmVsb2FkT3Blck1hcHxidXR0b25BY3Rpb258YnV0dG9uU2V0QWN0aW9ufGNhZGV0TW9kZXxjYWxsRXh0ZW5zaW9ufGNhbUNvbW1hbmR8Y2FtQ29tbWl0fGNhbUNvbW1pdFByZXBhcmVkfGNhbUNvbW1pdHRlZHxjYW1Db25zdHVjdGlvblNldFBhcmFtc3xjYW1DcmVhdGV8Y2FtRGVzdHJveXxjYW1lcmFFZmZlY3R8Y2FtZXJhRWZmZWN0RW5hYmxlSFVEfGNhbWVyYUludGVyZXN0fGNhbWVyYU9ufGNhbWVyYVZpZXd8Y2FtcGFpZ25Db25maWdGaWxlfGNhbVByZWxvYWR8Y2FtUHJlbG9hZGVkfGNhbVByZXBhcmVCYW5rfGNhbVByZXBhcmVEaXJ8Y2FtUHJlcGFyZURpdmV8Y2FtUHJlcGFyZUZvY3VzfGNhbVByZXBhcmVGb3Z8Y2FtUHJlcGFyZUZvdlJhbmdlfGNhbVByZXBhcmVQb3N8Y2FtUHJlcGFyZVJlbFBvc3xjYW1QcmVwYXJlVGFyZ2V0fGNhbVNldEJhbmt8Y2FtU2V0RGlyfGNhbVNldERpdmV8Y2FtU2V0Rm9jdXN8Y2FtU2V0Rm92fGNhbVNldEZvdlJhbmdlfGNhbVNldFBvc3xjYW1TZXRSZWxQb3N8Y2FtU2V0VGFyZ2V0fGNhbVRhcmdldHxjYW1Vc2VOVkd8Y2FuQWRkfGNhbkFkZEl0ZW1Ub0JhY2twYWNrfGNhbkFkZEl0ZW1Ub1VuaWZvcm18Y2FuQWRkSXRlbVRvVmVzdHxjYW5jZWxTaW1wbGVUYXNrRGVzdGluYXRpb258Y2FuRmlyZXxjYW5Nb3ZlfGNhblNsaW5nTG9hZHxjYW5TdGFuZHxjYW5TdXNwZW5kfGNhblRyaWdnZXJEeW5hbWljU2ltdWxhdGlvbnxjYW5VbmxvYWRJbkNvbWJhdHxjYW5WZWhpY2xlQ2FyZ298Y2FwdGl2ZXxjYXB0aXZlTnVtfGNiQ2hlY2tlZHxjYlNldENoZWNrZWR8Y2VpbHxjaGFubmVsRW5hYmxlZHxjaGVhdHNFbmFibGVkfGNoZWNrQUlGZWF0dXJlfGNoZWNrVmlzaWJpbGl0eXxjaXZpbGlhbnxjbGFzc05hbWV8Y2xlYXIzREVOQXR0cmlidXRlfGNsZWFyM0RFTkludmVudG9yeXxjbGVhckFsbEl0ZW1zRnJvbUJhY2twYWNrfGNsZWFyQmFja3BhY2tDYXJnb3xjbGVhckJhY2twYWNrQ2FyZ29HbG9iYWx8Y2xlYXJGb3JjZXNSVER8Y2xlYXJHcm91cEljb25zfGNsZWFySXRlbUNhcmdvfGNsZWFySXRlbUNhcmdvR2xvYmFsfGNsZWFySXRlbVBvb2x8Y2xlYXJNYWdhemluZUNhcmdvfGNsZWFyTWFnYXppbmVDYXJnb0dsb2JhbHxjbGVhck1hZ2F6aW5lUG9vbHxjbGVhck92ZXJsYXl8Y2xlYXJSYWRpb3xjbGVhclZlaGljbGVJbml0fGNsZWFyV2VhcG9uQ2FyZ298Y2xlYXJXZWFwb25DYXJnb0dsb2JhbHxjbGVhcldlYXBvblBvb2x8Y2xpZW50T3duZXJ8Y2xvc2VEaWFsb2d8Y2xvc2VEaXNwbGF5fGNsb3NlT3ZlcmxheXxjb2xsYXBzZU9iamVjdFRyZWV8Y29sbGVjdDNERU5IaXN0b3J5fGNvbGxlY3RpdmVSVER8Y29tYmF0TW9kZXxjb21tYW5kQXJ0aWxsZXJ5RmlyZXxjb21tYW5kQ2hhdHxjb21tYW5kZXJ8Y29tbWFuZEZpcmV8Y29tbWFuZEZvbGxvd3xjb21tYW5kRlNNfGNvbW1hbmRHZXRPdXR8Y29tbWFuZGluZ01lbnV8Y29tbWFuZE1vdmV8Y29tbWFuZFJhZGlvfGNvbW1hbmRTdG9wfGNvbW1hbmRTdXBwcmVzc2l2ZUZpcmV8Y29tbWFuZFRhcmdldHxjb21tYW5kV2F0Y2h8Y29tbWVudHxjb21taXRPdmVybGF5fGNvbXBpbGV8Y29tcGlsZUZpbmFsfGNvbXBsZXRlZEZTTXxjb21wb3NlVGV4dHxjb25maWdDbGFzc2VzfGNvbmZpZ0ZpbGV8Y29uZmlnSGllcmFyY2h5fGNvbmZpZ05hbWV8Y29uZmlnTnVsbHxjb25maWdQcm9wZXJ0aWVzfGNvbmZpZ1NvdXJjZUFkZG9uTGlzdHxjb25maWdTb3VyY2VNb2R8Y29uZmlnU291cmNlTW9kTGlzdHxjb25maXJtU2Vuc29yVGFyZ2V0fGNvbm5lY3RUZXJtaW5hbFRvVUFWfGNvbnRyb2xOdWxsfGNvbnRyb2xzR3JvdXBDdHJsfGNvcHlGcm9tQ2xpcGJvYXJkfGNvcHlUb0NsaXBib2FyZHxjb3B5V2F5cG9pbnRzfGNvc3xjb3VudHxjb3VudEVuZW15fGNvdW50RnJpZW5kbHl8Y291bnRTaWRlfGNvdW50VHlwZXxjb3VudFVua25vd258Y3JlYXRlM0RFTkNvbXBvc2l0aW9ufGNyZWF0ZTNERU5FbnRpdHl8Y3JlYXRlQWdlbnR8Y3JlYXRlQ2VudGVyfGNyZWF0ZURpYWxvZ3xjcmVhdGVEaWFyeUxpbmt8Y3JlYXRlRGlhcnlSZWNvcmR8Y3JlYXRlRGlhcnlTdWJqZWN0fGNyZWF0ZURpc3BsYXl8Y3JlYXRlR2VhckRpYWxvZ3xjcmVhdGVHcm91cHxjcmVhdGVHdWFyZGVkUG9pbnR8Y3JlYXRlTG9jYXRpb258Y3JlYXRlTWFya2VyfGNyZWF0ZU1hcmtlckxvY2FsfGNyZWF0ZU1lbnV8Y3JlYXRlTWluZXxjcmVhdGVNaXNzaW9uRGlzcGxheXxjcmVhdGVNUENhbXBhaWduRGlzcGxheXxjcmVhdGVTaW1wbGVPYmplY3R8Y3JlYXRlU2ltcGxlVGFza3xjcmVhdGVTaXRlfGNyZWF0ZVNvdW5kU291cmNlfGNyZWF0ZVRhc2t8Y3JlYXRlVGVhbXxjcmVhdGVUcmlnZ2VyfGNyZWF0ZVVuaXR8Y3JlYXRlVmVoaWNsZXxjcmVhdGVWZWhpY2xlQ3Jld3xjcmVhdGVWZWhpY2xlTG9jYWx8Y3Jld3xjdEFkZEhlYWRlcnxjdEFkZFJvd3xjdENsZWFyfGN0Q3VyU2VsfGN0RGF0YXxjdEZpbmRIZWFkZXJSb3dzfGN0RmluZFJvd0hlYWRlcnxjdEhlYWRlckNvbnRyb2xzfGN0SGVhZGVyQ291bnR8Y3RSZW1vdmVIZWFkZXJzfGN0UmVtb3ZlUm93c3xjdHJsQWN0aXZhdGV8Y3RybEFkZEV2ZW50SGFuZGxlcnxjdHJsQW5nbGV8Y3RybEF1dG9TY3JvbGxEZWxheXxjdHJsQXV0b1Njcm9sbFJld2luZHxjdHJsQXV0b1Njcm9sbFNwZWVkfGN0cmxDaGVja2VkfGN0cmxDbGFzc05hbWV8Y3RybENvbW1pdHxjdHJsQ29tbWl0dGVkfGN0cmxDcmVhdGV8Y3RybERlbGV0ZXxjdHJsRW5hYmxlfGN0cmxFbmFibGVkfGN0cmxGYWRlfGN0cmxIVE1MTG9hZGVkfGN0cmxJREN8Y3RybElERHxjdHJsTWFwQW5pbUFkZHxjdHJsTWFwQW5pbUNsZWFyfGN0cmxNYXBBbmltQ29tbWl0fGN0cmxNYXBBbmltRG9uZXxjdHJsTWFwQ3Vyc29yfGN0cmxNYXBNb3VzZU92ZXJ8Y3RybE1hcFNjYWxlfGN0cmxNYXBTY3JlZW5Ub1dvcmxkfGN0cmxNYXBXb3JsZFRvU2NyZWVufGN0cmxNb2RlbHxjdHJsTW9kZWxEaXJBbmRVcHxjdHJsTW9kZWxTY2FsZXxjdHJsUGFyZW50fGN0cmxQYXJlbnRDb250cm9sc0dyb3VwfGN0cmxQb3NpdGlvbnxjdHJsUmVtb3ZlQWxsRXZlbnRIYW5kbGVyc3xjdHJsUmVtb3ZlRXZlbnRIYW5kbGVyfGN0cmxTY2FsZXxjdHJsU2V0QWN0aXZlQ29sb3J8Y3RybFNldEFuZ2xlfGN0cmxTZXRBdXRvU2Nyb2xsRGVsYXl8Y3RybFNldEF1dG9TY3JvbGxSZXdpbmR8Y3RybFNldEF1dG9TY3JvbGxTcGVlZHxjdHJsU2V0QmFja2dyb3VuZENvbG9yfGN0cmxTZXRDaGVja2VkfGN0cmxTZXREaXNhYmxlZENvbG9yfGN0cmxTZXRFdmVudEhhbmRsZXJ8Y3RybFNldEZhZGV8Y3RybFNldEZvY3VzfGN0cmxTZXRGb250fGN0cmxTZXRGb250SDF8Y3RybFNldEZvbnRIMUJ8Y3RybFNldEZvbnRIMnxjdHJsU2V0Rm9udEgyQnxjdHJsU2V0Rm9udEgzfGN0cmxTZXRGb250SDNCfGN0cmxTZXRGb250SDR8Y3RybFNldEZvbnRINEJ8Y3RybFNldEZvbnRINXxjdHJsU2V0Rm9udEg1QnxjdHJsU2V0Rm9udEg2fGN0cmxTZXRGb250SDZCfGN0cmxTZXRGb250SGVpZ2h0fGN0cmxTZXRGb250SGVpZ2h0SDF8Y3RybFNldEZvbnRIZWlnaHRIMnxjdHJsU2V0Rm9udEhlaWdodEgzfGN0cmxTZXRGb250SGVpZ2h0SDR8Y3RybFNldEZvbnRIZWlnaHRINXxjdHJsU2V0Rm9udEhlaWdodEg2fGN0cmxTZXRGb250SGVpZ2h0U2Vjb25kYXJ5fGN0cmxTZXRGb250UHxjdHJsU2V0Rm9udFBCfGN0cmxTZXRGb250U2Vjb25kYXJ5fGN0cmxTZXRGb3JlZ3JvdW5kQ29sb3J8Y3RybFNldE1vZGVsfGN0cmxTZXRNb2RlbERpckFuZFVwfGN0cmxTZXRNb2RlbFNjYWxlfGN0cmxTZXRQaXhlbFByZWNpc2lvbnxjdHJsU2V0UG9zaXRpb258Y3RybFNldFNjYWxlfGN0cmxTZXRTdHJ1Y3R1cmVkVGV4dHxjdHJsU2V0VGV4dHxjdHJsU2V0VGV4dENvbG9yfGN0cmxTZXRUZXh0Q29sb3JTZWNvbmRhcnl8Y3RybFNldFRleHRTZWNvbmRhcnl8Y3RybFNldFRvb2x0aXB8Y3RybFNldFRvb2x0aXBDb2xvckJveHxjdHJsU2V0VG9vbHRpcENvbG9yU2hhZGV8Y3RybFNldFRvb2x0aXBDb2xvclRleHR8Y3RybFNob3d8Y3RybFNob3dufGN0cmxUZXh0fGN0cmxUZXh0SGVpZ2h0fGN0cmxUZXh0U2Vjb25kYXJ5fGN0cmxUZXh0V2lkdGh8Y3RybFR5cGV8Y3RybFZpc2libGV8Y3RSb3dDb250cm9sc3xjdFJvd0NvdW50fGN0U2V0Q3VyU2VsfGN0U2V0RGF0YXxjdFNldEhlYWRlclRlbXBsYXRlfGN0U2V0Um93VGVtcGxhdGV8Y3RTZXRWYWx1ZXxjdFZhbHVlfGN1cmF0b3JBZGRvbnN8Y3VyYXRvckNhbWVyYXxjdXJhdG9yQ2FtZXJhQXJlYXxjdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmd8Y3VyYXRvckNvZWZ8Y3VyYXRvckVkaXRhYmxlT2JqZWN0c3xjdXJhdG9yRWRpdGluZ0FyZWF8Y3VyYXRvckVkaXRpbmdBcmVhVHlwZXxjdXJhdG9yTW91c2VPdmVyfGN1cmF0b3JQb2ludHN8Y3VyYXRvclJlZ2lzdGVyZWRPYmplY3RzfGN1cmF0b3JTZWxlY3RlZHxjdXJhdG9yV2F5cG9pbnRDb3N0fGN1cnJlbnQzREVOT3BlcmF0aW9ufGN1cnJlbnRDaGFubmVsfGN1cnJlbnRDb21tYW5kfGN1cnJlbnRNYWdhemluZXxjdXJyZW50TWFnYXppbmVEZXRhaWx8Y3VycmVudE1hZ2F6aW5lRGV0YWlsVHVycmV0fGN1cnJlbnRNYWdhemluZVR1cnJldHxjdXJyZW50TXV6emxlfGN1cnJlbnROYW1lc3BhY2V8Y3VycmVudFRhc2t8Y3VycmVudFRhc2tzfGN1cnJlbnRUaHJvd2FibGV8Y3VycmVudFZpc2lvbk1vZGV8Y3VycmVudFdheXBvaW50fGN1cnJlbnRXZWFwb258Y3VycmVudFdlYXBvbk1vZGV8Y3VycmVudFdlYXBvblR1cnJldHxjdXJyZW50WmVyb2luZ3xjdXJzb3JPYmplY3R8Y3Vyc29yVGFyZ2V0fGN1c3RvbUNoYXR8Y3VzdG9tUmFkaW98Y3V0RmFkZU91dHxjdXRPYmp8Y3V0UnNjfGN1dFRleHR8ZGFtYWdlfGRhdGV8ZGF0ZVRvTnVtYmVyfGRheXRpbWV8ZGVBY3RpdmF0ZUtleXxkZWJyaWVmaW5nVGV4dHxkZWJ1Z0ZTTXxkZWJ1Z0xvZ3xkZWd8ZGVsZXRlM0RFTkVudGl0aWVzfGRlbGV0ZUF0fGRlbGV0ZUNlbnRlcnxkZWxldGVDb2xsZWN0aW9ufGRlbGV0ZUVkaXRvck9iamVjdHxkZWxldGVHcm91cHxkZWxldGVHcm91cFdoZW5FbXB0eXxkZWxldGVJZGVudGl0eXxkZWxldGVMb2NhdGlvbnxkZWxldGVNYXJrZXJ8ZGVsZXRlTWFya2VyTG9jYWx8ZGVsZXRlUmFuZ2V8ZGVsZXRlUmVzb3VyY2VzfGRlbGV0ZVNpdGV8ZGVsZXRlU3RhdHVzfGRlbGV0ZVRlYW18ZGVsZXRlVmVoaWNsZXxkZWxldGVWZWhpY2xlQ3Jld3xkZWxldGVXYXlwb2ludHxkZXRhY2h8ZGV0ZWN0ZWRNaW5lc3xkaWFnX2FjdGl2ZU1pc3Npb25GU01zfGRpYWdfYWN0aXZlU2NyaXB0c3xkaWFnX2FjdGl2ZVNRRlNjcmlwdHN8ZGlhZ19hY3RpdmVTUVNTY3JpcHRzfGRpYWdfY2FwdHVyZUZyYW1lfGRpYWdfY2FwdHVyZUZyYW1lVG9GaWxlfGRpYWdfY2FwdHVyZVNsb3dGcmFtZXxkaWFnX2NvZGVQZXJmb3JtYW5jZXxkaWFnX2RyYXdNb2RlfGRpYWdfZHluYW1pY1NpbXVsYXRpb25FbmR8ZGlhZ19lbmFibGV8ZGlhZ19lbmFibGVkfGRpYWdfZnBzfGRpYWdfZnBzTWlufGRpYWdfZnJhbWVOb3xkaWFnX2xpZ2h0TmV3TG9hZHxkaWFnX2xpc3R8ZGlhZ19sb2d8ZGlhZ19sb2dTbG93RnJhbWV8ZGlhZ19tZXJnZUNvbmZpZ0ZpbGV8ZGlhZ19yZWNvcmRUdXJyZXRMaW1pdHN8ZGlhZ19zZXRMaWdodE5ld3xkaWFnX3RpY2tUaW1lfGRpYWdfdG9nZ2xlfGRpYWxvZ3xkaWFyeVN1YmplY3RFeGlzdHN8ZGlkSklQfGRpZEpJUE93bmVyfGRpZmZpY3VsdHl8ZGlmZmljdWx0eUVuYWJsZWR8ZGlmZmljdWx0eUVuYWJsZWRSVER8ZGlmZmljdWx0eU9wdGlvbnxkaXJlY3Rpb258ZGlyZWN0U2F5fGRpc2FibGVBSXxkaXNhYmxlQ29sbGlzaW9uV2l0aHxkaXNhYmxlQ29udmVyc2F0aW9ufGRpc2FibGVEZWJyaWVmaW5nU3RhdHN8ZGlzYWJsZU1hcEluZGljYXRvcnN8ZGlzYWJsZU5WR0VxdWlwbWVudHxkaXNhYmxlUmVtb3RlU2Vuc29yc3xkaXNhYmxlU2VyaWFsaXphdGlvbnxkaXNhYmxlVElFcXVpcG1lbnR8ZGlzYWJsZVVBVkNvbm5lY3RhYmlsaXR5fGRpc2FibGVVc2VySW5wdXR8ZGlzcGxheUFkZEV2ZW50SGFuZGxlcnxkaXNwbGF5Q3RybHxkaXNwbGF5TnVsbHxkaXNwbGF5UGFyZW50fGRpc3BsYXlSZW1vdmVBbGxFdmVudEhhbmRsZXJzfGRpc3BsYXlSZW1vdmVFdmVudEhhbmRsZXJ8ZGlzcGxheVNldEV2ZW50SGFuZGxlcnxkaXNzb2x2ZVRlYW18ZGlzdGFuY2V8ZGlzdGFuY2UyRHxkaXN0YW5jZVNxcnxkaXN0cmlidXRpb25SZWdpb258ZG8zREVOQWN0aW9ufGRvQXJ0aWxsZXJ5RmlyZXxkb0ZpcmV8ZG9Gb2xsb3d8ZG9GU018ZG9HZXRPdXR8ZG9Nb3ZlfGRvb3JQaGFzZXxkb1N0b3B8ZG9TdXBwcmVzc2l2ZUZpcmV8ZG9UYXJnZXR8ZG9XYXRjaHxkcmF3QXJyb3d8ZHJhd0VsbGlwc2V8ZHJhd0ljb258ZHJhd0ljb24zRHxkcmF3TGluZXxkcmF3TGluZTNEfGRyYXdMaW5rfGRyYXdMb2NhdGlvbnxkcmF3UG9seWdvbnxkcmF3UmVjdGFuZ2xlfGRyYXdUcmlhbmdsZXxkcml2ZXJ8ZHJvcHxkeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlfGR5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2VDb2VmfGR5bmFtaWNTaW11bGF0aW9uRW5hYmxlZHxkeW5hbWljU2ltdWxhdGlvblN5c3RlbUVuYWJsZWR8ZWFzdHxlZGl0M0RFTk1pc3Npb25BdHRyaWJ1dGVzfGVkaXRPYmplY3R8ZWRpdG9yU2V0RXZlbnRIYW5kbGVyfGVmZmVjdGl2ZUNvbW1hbmRlcnxlbXB0eVBvc2l0aW9uc3xlbmFibGVBSXxlbmFibGVBSUZlYXR1cmV8ZW5hYmxlQWltUHJlY2lzaW9ufGVuYWJsZUF0dGFja3xlbmFibGVBdWRpb0ZlYXR1cmV8ZW5hYmxlQXV0b1N0YXJ0VXBSVER8ZW5hYmxlQXV0b1RyaW1SVER8ZW5hYmxlQ2FtU2hha2V8ZW5hYmxlQ2F1c3RpY3N8ZW5hYmxlQ2hhbm5lbHxlbmFibGVDb2xsaXNpb25XaXRofGVuYWJsZUNvcGlsb3R8ZW5hYmxlRGVicmllZmluZ1N0YXRzfGVuYWJsZURpYWdMZWdlbmR8ZW5hYmxlRHluYW1pY1NpbXVsYXRpb258ZW5hYmxlRHluYW1pY1NpbXVsYXRpb25TeXN0ZW18ZW5hYmxlRW5kRGlhbG9nfGVuYWJsZUVuZ2luZUFydGlsbGVyeXxlbmFibGVFbnZpcm9ubWVudHxlbmFibGVGYXRpZ3VlfGVuYWJsZUd1bkxpZ2h0c3xlbmFibGVJbmZvUGFuZWxDb21wb25lbnR8ZW5hYmxlSVJMYXNlcnN8ZW5hYmxlTWltaWNzfGVuYWJsZVBlcnNvblR1cnJldHxlbmFibGVSYWRpb3xlbmFibGVSZWxvYWR8ZW5hYmxlUm9wZUF0dGFjaHxlbmFibGVTYXROb3JtYWxPbkRldGFpbHxlbmFibGVTYXZpbmd8ZW5hYmxlU2VudGVuY2VzfGVuYWJsZVNpbXVsYXRpb258ZW5hYmxlU2ltdWxhdGlvbkdsb2JhbHxlbmFibGVTdGFtaW5hfGVuYWJsZVN0cmVzc0RhbWFnZXxlbmFibGVUZWFtU3dpdGNofGVuYWJsZVRyYWZmaWN8ZW5hYmxlVUFWQ29ubmVjdGFiaWxpdHl8ZW5hYmxlVUFWV2F5cG9pbnRzfGVuYWJsZVZlaGljbGVDYXJnb3xlbmFibGVWZWhpY2xlU2Vuc29yfGVuYWJsZVdlYXBvbkRpc2Fzc2VtYmx5fGVuZGx8ZW5kTG9hZGluZ1NjcmVlbnxlbmRNaXNzaW9ufGVuZ2luZU9ufGVuZ2luZXNJc09uUlREfGVuZ2luZXNQb3dlclJURHxlbmdpbmVzUnBtUlREfGVuZ2luZXNUb3JxdWVSVER8ZW50aXRpZXN8ZW52aXJvbm1lbnRFbmFibGVkfGVzdGltYXRlZEVuZFNlcnZlclRpbWV8ZXN0aW1hdGVkVGltZUxlZnR8ZXZhbE9iamVjdEFyZ3VtZW50fGV2ZXJ5QmFja3BhY2t8ZXZlcnlDb250YWluZXJ8ZXhlY3xleGVjRWRpdG9yU2NyaXB0fGV4cHxleHBlY3RlZERlc3RpbmF0aW9ufGV4cG9ydEpJUE1lc3NhZ2VzfGV5ZURpcmVjdGlvbnxleWVQb3N8ZmFjZXxmYWN0aW9ufGZhZGVNdXNpY3xmYWRlUmFkaW98ZmFkZVNvdW5kfGZhZGVTcGVlY2h8ZmFpbE1pc3Npb258ZmlsbFdlYXBvbnNGcm9tUG9vbHxmaW5kfGZpbmRDb3ZlcnxmaW5kRGlzcGxheXxmaW5kRWRpdG9yT2JqZWN0fGZpbmRFbXB0eVBvc2l0aW9ufGZpbmRFbXB0eVBvc2l0aW9uUmVhZHl8ZmluZElmfGZpbmROZWFyZXN0RW5lbXl8ZmluaXNoTWlzc2lvbkluaXR8ZmluaXRlfGZpcmV8ZmlyZUF0VGFyZ2V0fGZpcnN0QmFja3BhY2t8ZmxhZ3xmbGFnQW5pbWF0aW9uUGhhc2V8ZmxhZ093bmVyfGZsYWdTaWRlfGZsYWdUZXh0dXJlfGZsZWVpbmd8Zmxvb3J8Zmx5SW5IZWlnaHR8Zmx5SW5IZWlnaHRBU0x8Zm9nfGZvZ0ZvcmVjYXN0fGZvZ1BhcmFtc3xmb3JjZUFkZFVuaWZvcm18Zm9yY2VBdFBvc2l0aW9uUlREfGZvcmNlZE1hcHxmb3JjZUVuZHxmb3JjZUZsYWdUZXh0dXJlfGZvcmNlRm9sbG93Um9hZHxmb3JjZUdlbmVyYXRvclJURHxmb3JjZU1hcHxmb3JjZVJlc3Bhd258Zm9yY2VTcGVlZHxmb3JjZVdhbGt8Zm9yY2VXZWFwb25GaXJlfGZvcmNlV2VhdGhlckNoYW5nZXxmb3JnZXRUYXJnZXR8Zm9ybWF0fGZvcm1hdGlvbnxmb3JtYXRpb25EaXJlY3Rpb258Zm9ybWF0aW9uTGVhZGVyfGZvcm1hdGlvbk1lbWJlcnN8Zm9ybWF0aW9uUG9zaXRpb258Zm9ybWF0aW9uVGFza3xmb3JtYXRUZXh0fGZvcm1MZWFkZXJ8ZnJlZUxvb2t8ZnJvbUVkaXRvcnxmdWVsfGZ1bGxDcmV3fGdlYXJJRENBbW1vQ291bnR8Z2VhclNsb3RBbW1vQ291bnR8Z2VhclNsb3REYXRhfGdldDNERU5BY3Rpb25TdGF0ZXxnZXQzREVOQXR0cmlidXRlfGdldDNERU5DYW1lcmF8Z2V0M0RFTkNvbm5lY3Rpb25zfGdldDNERU5FbnRpdHl8Z2V0M0RFTkVudGl0eUlEfGdldDNERU5HcmlkfGdldDNERU5JY29uc1Zpc2libGV8Z2V0M0RFTkxheWVyRW50aXRpZXN8Z2V0M0RFTkxpbmVzVmlzaWJsZXxnZXQzREVOTWlzc2lvbkF0dHJpYnV0ZXxnZXQzREVOTW91c2VPdmVyfGdldDNERU5TZWxlY3RlZHxnZXRBaW1pbmdDb2VmfGdldEFsbEVudlNvdW5kQ29udHJvbGxlcnN8Z2V0QWxsSGl0UG9pbnRzRGFtYWdlfGdldEFsbE93bmVkTWluZXN8Z2V0QWxsU291bmRDb250cm9sbGVyc3xnZXRBbW1vQ2FyZ298Z2V0QW5pbUFpbVByZWNpc2lvbnxnZXRBbmltU3BlZWRDb2VmfGdldEFycmF5fGdldEFydGlsbGVyeUFtbW98Z2V0QXJ0aWxsZXJ5Q29tcHV0ZXJTZXR0aW5nc3xnZXRBcnRpbGxlcnlFVEF8Z2V0QXNzaWduZWRDdXJhdG9yTG9naWN8Z2V0QXNzaWduZWRDdXJhdG9yVW5pdHxnZXRCYWNrcGFja0NhcmdvfGdldEJsZWVkaW5nUmVtYWluaW5nfGdldEJ1cm5pbmdWYWx1ZXxnZXRDYW1lcmFWaWV3RGlyZWN0aW9ufGdldENhcmdvSW5kZXh8Z2V0Q2VudGVyT2ZNYXNzfGdldENsaWVudFN0YXRlfGdldENsaWVudFN0YXRlTnVtYmVyfGdldENvbXBhdGlibGVQeWxvbk1hZ2F6aW5lc3xnZXRDb25uZWN0ZWRVQVZ8Z2V0Q29udGFpbmVyTWF4TG9hZHxnZXRDdXJzb3JPYmplY3RQYXJhbXN8Z2V0Q3VzdG9tQWltQ29lZnxnZXREYW1tYWdlfGdldERlc2NyaXB0aW9ufGdldERpcnxnZXREaXJWaXN1YWx8Z2V0RExDQXNzZXRzVXNhZ2V8Z2V0RExDQXNzZXRzVXNhZ2VCeU5hbWV8Z2V0RExDc3xnZXRETENVc2FnZVRpbWV8Z2V0RWRpdG9yQ2FtZXJhfGdldEVkaXRvck1vZGV8Z2V0RWRpdG9yT2JqZWN0U2NvcGV8Z2V0RWxldmF0aW9uT2Zmc2V0fGdldEVuZ2luZVRhcmdldFJwbVJURHxnZXRFbnZTb3VuZENvbnRyb2xsZXJ8Z2V0RmF0aWd1ZXxnZXRGaWVsZE1hbnVhbFN0YXJ0UGFnZXxnZXRGb3JjZWRGbGFnVGV4dHVyZXxnZXRGcmllbmR8Z2V0RlNNVmFyaWFibGV8Z2V0RnVlbENhcmdvfGdldEdyb3VwSWNvbnxnZXRHcm91cEljb25QYXJhbXN8Z2V0R3JvdXBJY29uc3xnZXRIaWRlRnJvbXxnZXRIaXR8Z2V0SGl0SW5kZXh8Z2V0SGl0UG9pbnREYW1hZ2V8Z2V0SXRlbUNhcmdvfGdldE1hZ2F6aW5lQ2FyZ298Z2V0TWFya2VyQ29sb3J8Z2V0TWFya2VyUG9zfGdldE1hcmtlclNpemV8Z2V0TWFya2VyVHlwZXxnZXRNYXNzfGdldE1pc3Npb25Db25maWd8Z2V0TWlzc2lvbkNvbmZpZ1ZhbHVlfGdldE1pc3Npb25ETENzfGdldE1pc3Npb25MYXllckVudGl0aWVzfGdldE1pc3Npb25MYXllcnN8Z2V0TW9kZWxJbmZvfGdldE1vdXNlUG9zaXRpb258Z2V0TXVzaWNQbGF5ZWRUaW1lfGdldE51bWJlcnxnZXRPYmplY3RBcmd1bWVudHxnZXRPYmplY3RDaGlsZHJlbnxnZXRPYmplY3RETEN8Z2V0T2JqZWN0TWF0ZXJpYWxzfGdldE9iamVjdFByb3h5fGdldE9iamVjdFRleHR1cmVzfGdldE9iamVjdFR5cGV8Z2V0T2JqZWN0Vmlld0Rpc3RhbmNlfGdldE94eWdlblJlbWFpbmluZ3xnZXRQZXJzb25Vc2VkRExDc3xnZXRQaWxvdENhbWVyYURpcmVjdGlvbnxnZXRQaWxvdENhbWVyYVBvc2l0aW9ufGdldFBpbG90Q2FtZXJhUm90YXRpb258Z2V0UGlsb3RDYW1lcmFUYXJnZXR8Z2V0UGxhdGVOdW1iZXJ8Z2V0UGxheWVyQ2hhbm5lbHxnZXRQbGF5ZXJTY29yZXN8Z2V0UGxheWVyVUlEfGdldFBsYXllclVJRE9sZHxnZXRQb3N8Z2V0UG9zQVNMfGdldFBvc0FTTFZpc3VhbHxnZXRQb3NBU0xXfGdldFBvc0FUTHxnZXRQb3NBVExWaXN1YWx8Z2V0UG9zVmlzdWFsfGdldFBvc1dvcmxkfGdldFB5bG9uTWFnYXppbmVzfGdldFJlbERpcnxnZXRSZWxQb3N8Z2V0UmVtb3RlU2Vuc29yc0Rpc2FibGVkfGdldFJlcGFpckNhcmdvfGdldFJlc29sdXRpb258Z2V0Um90b3JCcmFrZVJURHxnZXRTaGFkb3dEaXN0YW5jZXxnZXRTaG90UGFyZW50c3xnZXRTbGluZ0xvYWR8Z2V0U291bmRDb250cm9sbGVyfGdldFNvdW5kQ29udHJvbGxlclJlc3VsdHxnZXRTcGVlZHxnZXRTdGFtaW5hfGdldFN0YXRWYWx1ZXxnZXRTdXBwcmVzc2lvbnxnZXRUZXJyYWluR3JpZHxnZXRUZXJyYWluSGVpZ2h0QVNMfGdldFRleHR8Z2V0VG90YWxETENVc2FnZVRpbWV8Z2V0VHJpbU9mZnNldFJURHxnZXRVbml0TG9hZG91dHxnZXRVbml0VHJhaXR8Z2V0VXNlck1GRFRleHR8Z2V0VXNlck1GRFZhbHVlfGdldFZhcmlhYmxlfGdldFZlaGljbGVDYXJnb3xnZXRXZWFwb25DYXJnb3xnZXRXZWFwb25Td2F5fGdldFdpbmdzT3JpZW50YXRpb25SVER8Z2V0V2luZ3NQb3NpdGlvblJURHxnZXRXUFBvc3xnbGFuY2VBdHxnbG9iYWxDaGF0fGdsb2JhbFJhZGlvfGdvZ2dsZXN8Z3JvdXB8Z3JvdXBDaGF0fGdyb3VwRnJvbU5ldElkfGdyb3VwSWNvblNlbGVjdGFibGV8Z3JvdXBJY29uc1Zpc2libGV8Z3JvdXBJZHxncm91cE93bmVyfGdyb3VwUmFkaW98Z3JvdXBTZWxlY3RlZFVuaXRzfGdyb3VwU2VsZWN0VW5pdHxncnBOdWxsfGd1bm5lcnxndXN0c3xoYWx0fGhhbmRndW5JdGVtc3xoYW5kZ3VuTWFnYXppbmV8aGFuZGd1bldlYXBvbnxoYW5kc0hpdHxoYXNJbnRlcmZhY2V8aGFzUGlsb3RDYW1lcmF8aGFzV2VhcG9ufGhjQWxsR3JvdXBzfGhjR3JvdXBQYXJhbXN8aGNMZWFkZXJ8aGNSZW1vdmVBbGxHcm91cHN8aGNSZW1vdmVHcm91cHxoY1NlbGVjdGVkfGhjU2VsZWN0R3JvdXB8aGNTZXRHcm91cHxoY1Nob3dCYXJ8aGNTaG93bkJhcnxoZWFkZ2VhcnxoaWRlQm9keXxoaWRlT2JqZWN0fGhpZGVPYmplY3RHbG9iYWx8aGlkZVNlbGVjdGlvbnxoaW50fGhpbnRDfGhpbnRDYWRldHxoaW50U2lsZW50fGhtZHxob3N0TWlzc2lvbnxodG1sTG9hZHxIVURNb3ZlbWVudExldmVsc3xodW1pZGl0eXxpbWFnZXxpbXBvcnRBbGxHcm91cHN8aW1wb3J0YW5jZXxpbnxpbkFyZWF8aW5BcmVhQXJyYXl8aW5jYXBhY2l0YXRlZFN0YXRlfGluZGVwZW5kZW50fGluZmxhbWV8aW5mbGFtZWR8aW5mb1BhbmVsfGluZm9QYW5lbENvbXBvbmVudEVuYWJsZWR8aW5mb1BhbmVsQ29tcG9uZW50c3xpbmZvUGFuZWxzfGluR2FtZVVJU2V0RXZlbnRIYW5kbGVyfGluaGVyaXRzRnJvbXxpbml0QW1iaWVudExpZmV8aW5Qb2x5Z29ufGlucHV0QWN0aW9ufGluUmFuZ2VPZkFydGlsbGVyeXxpbnNlcnRFZGl0b3JPYmplY3R8aW50ZXJzZWN0fGlzM0RFTnxpczNERU5NdWx0aXBsYXllcnxpc0FibGVUb0JyZWF0aGV8aXNBZ2VudHxpc0FpbVByZWNpc2lvbkVuYWJsZWR8aXNBcnJheXxpc0F1dG9Ib3Zlck9ufGlzQXV0b25vbW91c3xpc0F1dG9TdGFydFVwRW5hYmxlZFJURHxpc0F1dG90ZXN0fGlzQXV0b1RyaW1PblJURHxpc0JsZWVkaW5nfGlzQnVybmluZ3xpc0NsYXNzfGlzQ29sbGlzaW9uTGlnaHRPbnxpc0NvcGlsb3RFbmFibGVkfGlzRGFtYWdlQWxsb3dlZHxpc0RlZGljYXRlZHxpc0RMQ0F2YWlsYWJsZXxpc0VuZ2luZU9ufGlzRXF1YWxUb3xpc0VxdWFsVHlwZXxpc0VxdWFsVHlwZUFsbHxpc0VxdWFsVHlwZUFueXxpc0VxdWFsVHlwZUFycmF5fGlzRXF1YWxUeXBlUGFyYW1zfGlzRmlsZVBhdGNoaW5nRW5hYmxlZHxpc0ZsYXNobGlnaHRPbnxpc0ZsYXRFbXB0eXxpc0ZvcmNlZFdhbGt8aXNGb3JtYXRpb25MZWFkZXJ8aXNHcm91cERlbGV0ZWRXaGVuRW1wdHl8aXNIaWRkZW58aXNJblJlbWFpbnNDb2xsZWN0b3J8aXNJbnN0cnVjdG9yRmlndXJlRW5hYmxlZHxpc0lSTGFzZXJPbnxpc0tleUFjdGl2ZXxpc0tpbmRPZnxpc0xhc2VyT258aXNMaWdodE9ufGlzTG9jYWxpemVkfGlzTWFudWFsRmlyZXxpc01hcmtlZEZvckNvbGxlY3Rpb258aXNNdWx0aXBsYXllcnxpc011bHRpcGxheWVyU29sb3xpc05pbHxpc051bGx8aXNOdW1iZXJ8aXNPYmplY3RIaWRkZW58aXNPYmplY3RSVER8aXNPblJvYWR8aXNQaXBFbmFibGVkfGlzUGxheWVyfGlzUmVhbFRpbWV8aXNSZW1vdGVFeGVjdXRlZHxpc1JlbW90ZUV4ZWN1dGVkSklQfGlzU2VydmVyfGlzU2hvd2luZzNESWNvbnN8aXNTaW1wbGVPYmplY3R8aXNTcHJpbnRBbGxvd2VkfGlzU3RhbWluYUVuYWJsZWR8aXNTdGVhbU1pc3Npb258aXNTdHJlYW1GcmllbmRseVVJRW5hYmxlZHxpc1N0cmVzc0RhbWFnZUVuYWJsZWR8aXNUZXh0fGlzVG91Y2hpbmdHcm91bmR8aXNUdXJuZWRPdXR8aXNUdXRIaW50c0VuYWJsZWR8aXNVQVZDb25uZWN0YWJsZXxpc1VBVkNvbm5lY3RlZHxpc1VJQ29udGV4dHxpc1VuaWZvcm1BbGxvd2VkfGlzVmVoaWNsZUNhcmdvfGlzVmVoaWNsZVJhZGFyT258aXNWZWhpY2xlU2Vuc29yRW5hYmxlZHxpc1dhbGtpbmd8aXNXZWFwb25EZXBsb3llZHxpc1dlYXBvblJlc3RlZHxpdGVtQ2FyZ298aXRlbXN8aXRlbXNXaXRoTWFnYXppbmVzfGpvaW58am9pbkFzfGpvaW5Bc1NpbGVudHxqb2luU2lsZW50fGpvaW5TdHJpbmd8a2JBZGREYXRhYmFzZXxrYkFkZERhdGFiYXNlVGFyZ2V0c3xrYkFkZFRvcGljfGtiSGFzVG9waWN8a2JSZWFjdHxrYlJlbW92ZVRvcGljfGtiVGVsbHxrYldhc1NhaWR8a2V5SW1hZ2V8a2V5TmFtZXxrbm93c0Fib3V0fGxhbmR8bGFuZEF0fGxhbmRSZXN1bHR8bGFuZ3VhZ2V8bGFzZXJUYXJnZXR8bGJBZGR8bGJDbGVhcnxsYkNvbG9yfGxiQ29sb3JSaWdodHxsYkN1clNlbHxsYkRhdGF8bGJEZWxldGV8bGJJc1NlbGVjdGVkfGxiUGljdHVyZXxsYlBpY3R1cmVSaWdodHxsYlNlbGVjdGlvbnxsYlNldENvbG9yfGxiU2V0Q29sb3JSaWdodHxsYlNldEN1clNlbHxsYlNldERhdGF8bGJTZXRQaWN0dXJlfGxiU2V0UGljdHVyZUNvbG9yfGxiU2V0UGljdHVyZUNvbG9yRGlzYWJsZWR8bGJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZHxsYlNldFBpY3R1cmVSaWdodHxsYlNldFBpY3R1cmVSaWdodENvbG9yfGxiU2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZHxsYlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWR8bGJTZXRTZWxlY3RDb2xvcnxsYlNldFNlbGVjdENvbG9yUmlnaHR8bGJTZXRTZWxlY3RlZHxsYlNldFRleHR8bGJTZXRUZXh0UmlnaHR8bGJTZXRUb29sdGlwfGxiU2V0VmFsdWV8bGJTaXplfGxiU29ydHxsYlNvcnRCeVZhbHVlfGxiVGV4dHxsYlRleHRSaWdodHxsYlZhbHVlfGxlYWRlcnxsZWFkZXJib2FyZERlSW5pdHxsZWFkZXJib2FyZEdldFJvd3N8bGVhZGVyYm9hcmRJbml0fGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NGcmllbmRzfGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NHbG9iYWx8bGVhZGVyYm9hcmRSZXF1ZXN0Um93c0dsb2JhbEFyb3VuZFVzZXJ8bGVhZGVyYm9hcmRzUmVxdWVzdFVwbG9hZFNjb3JlfGxlYWRlcmJvYXJkc1JlcXVlc3RVcGxvYWRTY29yZUtlZXBCZXN0fGxlYWRlcmJvYXJkU3RhdGV8bGVhdmVWZWhpY2xlfGxpYnJhcnlDcmVkaXRzfGxpYnJhcnlEaXNjbGFpbWVyc3xsaWZlU3RhdGV8bGlnaHRBdHRhY2hPYmplY3R8bGlnaHREZXRhY2hPYmplY3R8bGlnaHRJc09ufGxpZ2h0bmluZ3N8bGltaXRTcGVlZHxsaW5lYXJDb252ZXJzaW9ufGxpbmVCcmVha3xsaW5lSW50ZXJzZWN0c3xsaW5lSW50ZXJzZWN0c09ianN8bGluZUludGVyc2VjdHNTdXJmYWNlc3xsaW5lSW50ZXJzZWN0c1dpdGh8bGlua0l0ZW18bGlzdHxsaXN0T2JqZWN0c3xsaXN0UmVtb3RlVGFyZ2V0c3xsaXN0VmVoaWNsZVNlbnNvcnN8bG58bG5iQWRkQXJyYXl8bG5iQWRkQ29sdW1ufGxuYkFkZFJvd3xsbmJDbGVhcnxsbmJDb2xvcnxsbmJDb2xvclJpZ2h0fGxuYkN1clNlbFJvd3xsbmJEYXRhfGxuYkRlbGV0ZUNvbHVtbnxsbmJEZWxldGVSb3d8bG5iR2V0Q29sdW1uc1Bvc2l0aW9ufGxuYlBpY3R1cmV8bG5iUGljdHVyZVJpZ2h0fGxuYlNldENvbG9yfGxuYlNldENvbG9yUmlnaHR8bG5iU2V0Q29sdW1uc1Bvc3xsbmJTZXRDdXJTZWxSb3d8bG5iU2V0RGF0YXxsbmJTZXRQaWN0dXJlfGxuYlNldFBpY3R1cmVDb2xvcnxsbmJTZXRQaWN0dXJlQ29sb3JSaWdodHxsbmJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZHxsbmJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZFJpZ2h0fGxuYlNldFBpY3R1cmVSaWdodHxsbmJTZXRUZXh0fGxuYlNldFRleHRSaWdodHxsbmJTZXRWYWx1ZXxsbmJTaXplfGxuYlNvcnR8bG5iU29ydEJ5VmFsdWV8bG5iVGV4dHxsbmJUZXh0UmlnaHR8bG5iVmFsdWV8bG9hZHxsb2FkQWJzfGxvYWRCYWNrcGFja3xsb2FkRmlsZXxsb2FkR2FtZXxsb2FkSWRlbnRpdHl8bG9hZE1hZ2F6aW5lfGxvYWRPdmVybGF5fGxvYWRTdGF0dXN8bG9hZFVuaWZvcm18bG9hZFZlc3R8bG9jYWx8bG9jYWxpemV8bG9jYXRpb25OdWxsfGxvY2F0aW9uUG9zaXRpb258bG9ja3xsb2NrQ2FtZXJhVG98bG9ja0NhcmdvfGxvY2tEcml2ZXJ8bG9ja2VkfGxvY2tlZENhcmdvfGxvY2tlZERyaXZlcnxsb2NrZWRUdXJyZXR8bG9ja0lkZW50aXR5fGxvY2tUdXJyZXR8bG9ja1dQfGxvZ3xsb2dFbnRpdGllc3xsb2dOZXR3b3JrfGxvZ05ldHdvcmtUZXJtaW5hdGV8bG9va0F0fGxvb2tBdFBvc3xtYWdhemluZUNhcmdvfG1hZ2F6aW5lc3xtYWdhemluZXNBbGxUdXJyZXRzfG1hZ2F6aW5lc0FtbW98bWFnYXppbmVzQW1tb0NhcmdvfG1hZ2F6aW5lc0FtbW9GdWxsfG1hZ2F6aW5lc0RldGFpbHxtYWdhemluZXNEZXRhaWxCYWNrcGFja3xtYWdhemluZXNEZXRhaWxVbmlmb3JtfG1hZ2F6aW5lc0RldGFpbFZlc3R8bWFnYXppbmVzVHVycmV0fG1hZ2F6aW5lVHVycmV0QW1tb3xtYXBBbmltQWRkfG1hcEFuaW1DbGVhcnxtYXBBbmltQ29tbWl0fG1hcEFuaW1Eb25lfG1hcENlbnRlck9uQ2FtZXJhfG1hcEdyaWRQb3NpdGlvbnxtYXJrQXNGaW5pc2hlZE9uU3RlYW18bWFya2VyQWxwaGF8bWFya2VyQnJ1c2h8bWFya2VyQ29sb3J8bWFya2VyRGlyfG1hcmtlclBvc3xtYXJrZXJTaGFwZXxtYXJrZXJTaXplfG1hcmtlclRleHR8bWFya2VyVHlwZXxtYXh8bWVtYmVyc3xtZW51QWN0aW9ufG1lbnVBZGR8bWVudUNoZWNrZWR8bWVudUNsZWFyfG1lbnVDb2xsYXBzZXxtZW51RGF0YXxtZW51RGVsZXRlfG1lbnVFbmFibGV8bWVudUVuYWJsZWR8bWVudUV4cGFuZHxtZW51SG92ZXJ8bWVudVBpY3R1cmV8bWVudVNldEFjdGlvbnxtZW51U2V0Q2hlY2t8bWVudVNldERhdGF8bWVudVNldFBpY3R1cmV8bWVudVNldFZhbHVlfG1lbnVTaG9ydGN1dHxtZW51U2hvcnRjdXRUZXh0fG1lbnVTaXplfG1lbnVTb3J0fG1lbnVUZXh0fG1lbnVVUkx8bWVudVZhbHVlfG1pbnxtaW5lQWN0aXZlfG1pbmVEZXRlY3RlZEJ5fG1pc3Npb25Db25maWdGaWxlfG1pc3Npb25EaWZmaWN1bHR5fG1pc3Npb25OYW1lfG1pc3Npb25OYW1lc3BhY2V8bWlzc2lvblN0YXJ0fG1pc3Npb25WZXJzaW9ufG1vZGVsVG9Xb3JsZHxtb2RlbFRvV29ybGRWaXN1YWx8bW9kZWxUb1dvcmxkVmlzdWFsV29ybGR8bW9kZWxUb1dvcmxkV29ybGR8bW9kUGFyYW1zfG1vb25JbnRlbnNpdHl8bW9vblBoYXNlfG1vcmFsZXxtb3ZlfG1vdmUzREVOQ2FtZXJhfG1vdmVJbkFueXxtb3ZlSW5DYXJnb3xtb3ZlSW5Db21tYW5kZXJ8bW92ZUluRHJpdmVyfG1vdmVJbkd1bm5lcnxtb3ZlSW5UdXJyZXR8bW92ZU9iamVjdFRvRW5kfG1vdmVPdXR8bW92ZVRpbWV8bW92ZVRvfG1vdmVUb0NvbXBsZXRlZHxtb3ZlVG9GYWlsZWR8bXVzaWNWb2x1bWV8bmFtZXxuYW1lU291bmR8bmVhckVudGl0aWVzfG5lYXJlc3RCdWlsZGluZ3xuZWFyZXN0TG9jYXRpb258bmVhcmVzdExvY2F0aW9uc3xuZWFyZXN0TG9jYXRpb25XaXRoRHViYmluZ3xuZWFyZXN0T2JqZWN0fG5lYXJlc3RPYmplY3RzfG5lYXJlc3RUZXJyYWluT2JqZWN0c3xuZWFyT2JqZWN0c3xuZWFyT2JqZWN0c1JlYWR5fG5lYXJSb2Fkc3xuZWFyU3VwcGxpZXN8bmVhclRhcmdldHN8bmVlZFJlbG9hZHxuZXRJZHxuZXRPYmpOdWxsfG5ld092ZXJsYXl8bmV4dE1lbnVJdGVtSW5kZXh8bmV4dFdlYXRoZXJDaGFuZ2V8bk1lbnVJdGVtc3xudW1iZXJPZkVuZ2luZXNSVER8bnVtYmVyVG9EYXRlfG9iamVjdEN1cmF0b3JzfG9iamVjdEZyb21OZXRJZHxvYmplY3RQYXJlbnR8b2JqTnVsbHxvYmpTdGF0dXN8b25CcmllZmluZ0dlYXJ8b25CcmllZmluZ0dyb3VwfG9uQnJpZWZpbmdOb3Rlc3xvbkJyaWVmaW5nUGxhbnxvbkJyaWVmaW5nVGVhbVN3aXRjaHxvbkNvbW1hbmRNb2RlQ2hhbmdlZHxvbkRvdWJsZUNsaWNrfG9uRWFjaEZyYW1lfG9uR3JvdXBJY29uQ2xpY2t8b25Hcm91cEljb25PdmVyRW50ZXJ8b25Hcm91cEljb25PdmVyTGVhdmV8b25IQ0dyb3VwU2VsZWN0aW9uQ2hhbmdlZHxvbk1hcFNpbmdsZUNsaWNrfG9uUGxheWVyQ29ubmVjdGVkfG9uUGxheWVyRGlzY29ubmVjdGVkfG9uUHJlbG9hZEZpbmlzaGVkfG9uUHJlbG9hZFN0YXJ0ZWR8b25TaG93TmV3T2JqZWN0fG9uVGVhbVN3aXRjaHxvcGVuQ3VyYXRvckludGVyZmFjZXxvcGVuRExDUGFnZXxvcGVuRFNJbnRlcmZhY2V8b3Blbk1hcHxvcGVuU3RlYW1BcHB8b3BlbllvdXR1YmVWaWRlb3xvcGZvcnxvcmRlckdldElufG92ZXJjYXN0fG92ZXJjYXN0Rm9yZWNhc3R8b3duZXJ8cGFyYW18cGFyYW1zfHBhcnNlTnVtYmVyfHBhcnNlU2ltcGxlQXJyYXl8cGFyc2VUZXh0fHBhcnNpbmdOYW1lc3BhY2V8cGFydGljbGVzUXVhbGl0eXxwaXxwaWNrV2VhcG9uUG9vbHxwaXRjaHxwaXhlbEdyaWR8cGl4ZWxHcmlkQmFzZXxwaXhlbEdyaWROb1VJU2NhbGV8cGl4ZWxIfHBpeGVsV3xwbGF5YWJsZVNsb3RzTnVtYmVyfHBsYXlhYmxlVW5pdHN8cGxheUFjdGlvbnxwbGF5QWN0aW9uTm93fHBsYXllcnxwbGF5ZXJSZXNwYXduVGltZXxwbGF5ZXJTaWRlfHBsYXllcnNOdW1iZXJ8cGxheUdlc3R1cmV8cGxheU1pc3Npb258cGxheU1vdmV8cGxheU1vdmVOb3d8cGxheU11c2ljfHBsYXlTY3JpcHRlZE1pc3Npb258cGxheVNvdW5kfHBsYXlTb3VuZDNEfHBvc2l0aW9ufHBvc2l0aW9uQ2FtZXJhVG9Xb3JsZHxwb3NTY3JlZW5Ub1dvcmxkfHBvc1dvcmxkVG9TY3JlZW58cHBFZmZlY3RBZGp1c3R8cHBFZmZlY3RDb21taXR8cHBFZmZlY3RDb21taXR0ZWR8cHBFZmZlY3RDcmVhdGV8cHBFZmZlY3REZXN0cm95fHBwRWZmZWN0RW5hYmxlfHBwRWZmZWN0RW5hYmxlZHxwcEVmZmVjdEZvcmNlSW5OVkd8cHJlY2lzaW9ufHByZWxvYWRDYW1lcmF8cHJlbG9hZE9iamVjdHxwcmVsb2FkU291bmR8cHJlbG9hZFRpdGxlT2JqfHByZWxvYWRUaXRsZVJzY3xwcmltYXJ5V2VhcG9ufHByaW1hcnlXZWFwb25JdGVtc3xwcmltYXJ5V2VhcG9uTWFnYXppbmV8cHJpb3JpdHl8cHJvY2Vzc0RpYXJ5TGlua3xwcm9jZXNzSW5pdENvbW1hbmRzfHByb2R1Y3RWZXJzaW9ufHByb2ZpbGVOYW1lfHByb2ZpbGVOYW1lc3BhY2V8cHJvZmlsZU5hbWVTdGVhbXxwcm9ncmVzc0xvYWRpbmdTY3JlZW58cHJvZ3Jlc3NQb3NpdGlvbnxwcm9ncmVzc1NldFBvc2l0aW9ufHB1YmxpY1ZhcmlhYmxlfHB1YmxpY1ZhcmlhYmxlQ2xpZW50fHB1YmxpY1ZhcmlhYmxlU2VydmVyfHB1c2hCYWNrfHB1c2hCYWNrVW5pcXVlfHB1dFdlYXBvblBvb2x8cXVlcnlJdGVtc1Bvb2x8cXVlcnlNYWdhemluZVBvb2x8cXVlcnlXZWFwb25Qb29sfHJhZHxyYWRpb0NoYW5uZWxBZGR8cmFkaW9DaGFubmVsQ3JlYXRlfHJhZGlvQ2hhbm5lbFJlbW92ZXxyYWRpb0NoYW5uZWxTZXRDYWxsU2lnbnxyYWRpb0NoYW5uZWxTZXRMYWJlbHxyYWRpb1ZvbHVtZXxyYWlufHJhaW5ib3d8cmFuZG9tfHJhbmt8cmFua0lkfHJhdGluZ3xyZWN0YW5ndWxhcnxyZWdpc3RlcmVkVGFza3N8cmVnaXN0ZXJUYXNrfHJlbG9hZHxyZWxvYWRFbmFibGVkfHJlbW90ZUNvbnRyb2x8cmVtb3RlRXhlY3xyZW1vdGVFeGVjQ2FsbHxyZW1vdGVFeGVjdXRlZE93bmVyfHJlbW92ZTNERU5Db25uZWN0aW9ufHJlbW92ZTNERU5FdmVudEhhbmRsZXJ8cmVtb3ZlM0RFTkxheWVyfHJlbW92ZUFjdGlvbnxyZW1vdmVBbGwzREVORXZlbnRIYW5kbGVyc3xyZW1vdmVBbGxBY3Rpb25zfHJlbW92ZUFsbEFzc2lnbmVkSXRlbXN8cmVtb3ZlQWxsQ29udGFpbmVyc3xyZW1vdmVBbGxDdXJhdG9yQWRkb25zfHJlbW92ZUFsbEN1cmF0b3JDYW1lcmFBcmVhc3xyZW1vdmVBbGxDdXJhdG9yRWRpdGluZ0FyZWFzfHJlbW92ZUFsbEV2ZW50SGFuZGxlcnN8cmVtb3ZlQWxsSGFuZGd1bkl0ZW1zfHJlbW92ZUFsbEl0ZW1zfHJlbW92ZUFsbEl0ZW1zV2l0aE1hZ2F6aW5lc3xyZW1vdmVBbGxNaXNzaW9uRXZlbnRIYW5kbGVyc3xyZW1vdmVBbGxNUEV2ZW50SGFuZGxlcnN8cmVtb3ZlQWxsTXVzaWNFdmVudEhhbmRsZXJzfHJlbW92ZUFsbE93bmVkTWluZXN8cmVtb3ZlQWxsUHJpbWFyeVdlYXBvbkl0ZW1zfHJlbW92ZUFsbFdlYXBvbnN8cmVtb3ZlQmFja3BhY2t8cmVtb3ZlQmFja3BhY2tHbG9iYWx8cmVtb3ZlQ3VyYXRvckFkZG9uc3xyZW1vdmVDdXJhdG9yQ2FtZXJhQXJlYXxyZW1vdmVDdXJhdG9yRWRpdGFibGVPYmplY3RzfHJlbW92ZUN1cmF0b3JFZGl0aW5nQXJlYXxyZW1vdmVEcmF3SWNvbnxyZW1vdmVEcmF3TGlua3N8cmVtb3ZlRXZlbnRIYW5kbGVyfHJlbW92ZUZyb21SZW1haW5zQ29sbGVjdG9yfHJlbW92ZUdvZ2dsZXN8cmVtb3ZlR3JvdXBJY29ufHJlbW92ZUhhbmRndW5JdGVtfHJlbW92ZUhlYWRnZWFyfHJlbW92ZUl0ZW18cmVtb3ZlSXRlbUZyb21CYWNrcGFja3xyZW1vdmVJdGVtRnJvbVVuaWZvcm18cmVtb3ZlSXRlbUZyb21WZXN0fHJlbW92ZUl0ZW1zfHJlbW92ZU1hZ2F6aW5lfHJlbW92ZU1hZ2F6aW5lR2xvYmFsfHJlbW92ZU1hZ2F6aW5lc3xyZW1vdmVNYWdhemluZXNUdXJyZXR8cmVtb3ZlTWFnYXppbmVUdXJyZXR8cmVtb3ZlTWVudUl0ZW18cmVtb3ZlTWlzc2lvbkV2ZW50SGFuZGxlcnxyZW1vdmVNUEV2ZW50SGFuZGxlcnxyZW1vdmVNdXNpY0V2ZW50SGFuZGxlcnxyZW1vdmVPd25lZE1pbmV8cmVtb3ZlUHJpbWFyeVdlYXBvbkl0ZW18cmVtb3ZlU2Vjb25kYXJ5V2VhcG9uSXRlbXxyZW1vdmVTaW1wbGVUYXNrfHJlbW92ZVN3aXRjaGFibGVVbml0fHJlbW92ZVRlYW1NZW1iZXJ8cmVtb3ZlVW5pZm9ybXxyZW1vdmVWZXN0fHJlbW92ZVdlYXBvbnxyZW1vdmVXZWFwb25BdHRhY2htZW50Q2FyZ298cmVtb3ZlV2VhcG9uQ2FyZ298cmVtb3ZlV2VhcG9uR2xvYmFsfHJlbW92ZVdlYXBvblR1cnJldHxyZXBvcnRSZW1vdGVUYXJnZXR8cmVxdWlyZWRWZXJzaW9ufHJlc2V0Q2FtU2hha2V8cmVzZXRTdWJncm91cERpcmVjdGlvbnxyZXNpc3RhbmNlfHJlc2l6ZXxyZXNvdXJjZXN8cmVzcGF3blZlaGljbGV8cmVzdGFydEVkaXRvckNhbWVyYXxyZXZlYWx8cmV2ZWFsTWluZXxyZXZlcnNlfHJldmVyc2VkTW91c2VZfHJvYWRBdHxyb2Fkc0Nvbm5lY3RlZFRvfHJvbGVEZXNjcmlwdGlvbnxyb3BlQXR0YWNoZWRPYmplY3RzfHJvcGVBdHRhY2hlZFRvfHJvcGVBdHRhY2hFbmFibGVkfHJvcGVBdHRhY2hUb3xyb3BlQ3JlYXRlfHJvcGVDdXR8cm9wZURlc3Ryb3l8cm9wZURldGFjaHxyb3BlRW5kUG9zaXRpb258cm9wZUxlbmd0aHxyb3Blc3xyb3BlVW53aW5kfHJvcGVVbndvdW5kfHJvdG9yc0ZvcmNlc1JURHxyb3RvcnNScG1SVER8cm91bmR8cnVuSW5pdFNjcmlwdHxzYWZlWm9uZUh8c2FmZVpvbmVXfHNhZmVab25lV0Fic3xzYWZlWm9uZVh8c2FmZVpvbmVYQWJzfHNhZmVab25lWXxzYXZlM0RFTkludmVudG9yeXxzYXZlR2FtZXxzYXZlSWRlbnRpdHl8c2F2ZUpveXN0aWNrc3xzYXZlT3ZlcmxheXxzYXZlUHJvZmlsZU5hbWVzcGFjZXxzYXZlU3RhdHVzfHNhdmVWYXJ8c2F2aW5nRW5hYmxlZHxzYXl8c2F5MkR8c2F5M0R8c2NvcmV8c2NvcmVTaWRlfHNjcmVlbnNob3R8c2NyZWVuVG9Xb3JsZHxzY3JpcHREb25lfHNjcmlwdE5hbWV8c2NyaXB0TnVsbHxzY3VkU3RhdGV8c2Vjb25kYXJ5V2VhcG9ufHNlY29uZGFyeVdlYXBvbkl0ZW1zfHNlY29uZGFyeVdlYXBvbk1hZ2F6aW5lfHNlbGVjdHxzZWxlY3RCZXN0UGxhY2VzfHNlbGVjdERpYXJ5U3ViamVjdHxzZWxlY3RlZEVkaXRvck9iamVjdHN8c2VsZWN0RWRpdG9yT2JqZWN0fHNlbGVjdGlvbk5hbWVzfHNlbGVjdGlvblBvc2l0aW9ufHNlbGVjdExlYWRlcnxzZWxlY3RNYXh8c2VsZWN0TWlufHNlbGVjdE5vUGxheWVyfHNlbGVjdFBsYXllcnxzZWxlY3RSYW5kb218c2VsZWN0UmFuZG9tV2VpZ2h0ZWR8c2VsZWN0V2VhcG9ufHNlbGVjdFdlYXBvblR1cnJldHxzZW5kQVVNZXNzYWdlfHNlbmRTaW1wbGVDb21tYW5kfHNlbmRUYXNrfHNlbmRUYXNrUmVzdWx0fHNlbmRVRFBNZXNzYWdlfHNlcnZlckNvbW1hbmR8c2VydmVyQ29tbWFuZEF2YWlsYWJsZXxzZXJ2ZXJDb21tYW5kRXhlY3V0YWJsZXxzZXJ2ZXJOYW1lfHNlcnZlclRpbWV8c2V0fHNldDNERU5BdHRyaWJ1dGV8c2V0M0RFTkF0dHJpYnV0ZXN8c2V0M0RFTkdyaWR8c2V0M0RFTkljb25zVmlzaWJsZXxzZXQzREVOTGF5ZXJ8c2V0M0RFTkxpbmVzVmlzaWJsZXxzZXQzREVOTG9naWNUeXBlfHNldDNERU5NaXNzaW9uQXR0cmlidXRlfHNldDNERU5NaXNzaW9uQXR0cmlidXRlc3xzZXQzREVOTW9kZWxzVmlzaWJsZXxzZXQzREVOT2JqZWN0VHlwZXxzZXQzREVOU2VsZWN0ZWR8c2V0QWNjVGltZXxzZXRBY3R1YWxDb2xsZWN0aXZlUlREfHNldEFpcnBsYW5lVGhyb3R0bGV8c2V0QWlycG9ydFNpZGV8c2V0QW1tb3xzZXRBbW1vQ2FyZ298c2V0QW1tb09uUHlsb258c2V0QW5pbVNwZWVkQ29lZnxzZXRBcGVydHVyZXxzZXRBcGVydHVyZU5ld3xzZXRBcm1vcnlQb2ludHN8c2V0QXR0cmlidXRlc3xzZXRBdXRvbm9tb3VzfHNldEJlaGF2aW91cnxzZXRCbGVlZGluZ1JlbWFpbmluZ3xzZXRCcmFrZXNSVER8c2V0Q2FtZXJhSW50ZXJlc3R8c2V0Q2FtU2hha2VEZWZQYXJhbXN8c2V0Q2FtU2hha2VQYXJhbXN8c2V0Q2FtVXNlVEl8c2V0Q2FwdGl2ZXxzZXRDZW50ZXJPZk1hc3N8c2V0Q29sbGlzaW9uTGlnaHR8c2V0Q29tYmF0TW9kZXxzZXRDb21wYXNzT3NjaWxsYXRpb258c2V0Q29udm95U2VwYXJhdGlvbnxzZXRDdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmd8c2V0Q3VyYXRvckNvZWZ8c2V0Q3VyYXRvckVkaXRpbmdBcmVhVHlwZXxzZXRDdXJhdG9yV2F5cG9pbnRDb3N0fHNldEN1cnJlbnRDaGFubmVsfHNldEN1cnJlbnRUYXNrfHNldEN1cnJlbnRXYXlwb2ludHxzZXRDdXN0b21BaW1Db2VmfHNldEN1c3RvbVdlaWdodFJURHxzZXREYW1hZ2V8c2V0RGFtbWFnZXxzZXREYXRlfHNldERlYnJpZWZpbmdUZXh0fHNldERlZmF1bHRDYW1lcmF8c2V0RGVzdGluYXRpb258c2V0RGV0YWlsTWFwQmxlbmRQYXJzfHNldERpcnxzZXREaXJlY3Rpb258c2V0RHJhd0ljb258c2V0RHJpdmVPblBhdGh8c2V0RHJvcEludGVydmFsfHNldER5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2V8c2V0RHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZUNvZWZ8c2V0RWRpdG9yTW9kZXxzZXRFZGl0b3JPYmplY3RTY29wZXxzZXRFZmZlY3RDb25kaXRpb258c2V0RW5naW5lUnBtUlREfHNldEZhY2V8c2V0RmFjZUFuaW1hdGlvbnxzZXRGYXRpZ3VlfHNldEZlYXR1cmVUeXBlfHNldEZsYWdBbmltYXRpb25QaGFzZXxzZXRGbGFnT3duZXJ8c2V0RmxhZ1NpZGV8c2V0RmxhZ1RleHR1cmV8c2V0Rm9nfHNldEZvcmNlR2VuZXJhdG9yUlREfHNldEZvcm1hdGlvbnxzZXRGb3JtYXRpb25UYXNrfHNldEZvcm1EaXJ8c2V0RnJpZW5kfHNldEZyb21FZGl0b3J8c2V0RlNNVmFyaWFibGV8c2V0RnVlbHxzZXRGdWVsQ2FyZ298c2V0R3JvdXBJY29ufHNldEdyb3VwSWNvblBhcmFtc3xzZXRHcm91cEljb25zU2VsZWN0YWJsZXxzZXRHcm91cEljb25zVmlzaWJsZXxzZXRHcm91cElkfHNldEdyb3VwSWRHbG9iYWx8c2V0R3JvdXBPd25lcnxzZXRHdXN0c3xzZXRIaWRlQmVoaW5kfHNldEhpdHxzZXRIaXRJbmRleHxzZXRIaXRQb2ludERhbWFnZXxzZXRIb3Jpem9uUGFyYWxsYXhDb2VmfHNldEhVRE1vdmVtZW50TGV2ZWxzfHNldElkZW50aXR5fHNldEltcG9ydGFuY2V8c2V0SW5mb1BhbmVsfHNldExlYWRlcnxzZXRMaWdodEFtYmllbnR8c2V0TGlnaHRBdHRlbnVhdGlvbnxzZXRMaWdodEJyaWdodG5lc3N8c2V0TGlnaHRDb2xvcnxzZXRMaWdodERheUxpZ2h0fHNldExpZ2h0RmxhcmVNYXhEaXN0YW5jZXxzZXRMaWdodEZsYXJlU2l6ZXxzZXRMaWdodEludGVuc2l0eXxzZXRMaWdodG5pbmdzfHNldExpZ2h0VXNlRmxhcmV8c2V0TG9jYWxXaW5kUGFyYW1zfHNldE1hZ2F6aW5lVHVycmV0QW1tb3xzZXRNYXJrZXJBbHBoYXxzZXRNYXJrZXJBbHBoYUxvY2FsfHNldE1hcmtlckJydXNofHNldE1hcmtlckJydXNoTG9jYWx8c2V0TWFya2VyQ29sb3J8c2V0TWFya2VyQ29sb3JMb2NhbHxzZXRNYXJrZXJEaXJ8c2V0TWFya2VyRGlyTG9jYWx8c2V0TWFya2VyUG9zfHNldE1hcmtlclBvc0xvY2FsfHNldE1hcmtlclNoYXBlfHNldE1hcmtlclNoYXBlTG9jYWx8c2V0TWFya2VyU2l6ZXxzZXRNYXJrZXJTaXplTG9jYWx8c2V0TWFya2VyVGV4dHxzZXRNYXJrZXJUZXh0TG9jYWx8c2V0TWFya2VyVHlwZXxzZXRNYXJrZXJUeXBlTG9jYWx8c2V0TWFzc3xzZXRNaW1pY3xzZXRNb3VzZVBvc2l0aW9ufHNldE11c2ljRWZmZWN0fHNldE11c2ljRXZlbnRIYW5kbGVyfHNldE5hbWV8c2V0TmFtZVNvdW5kfHNldE9iamVjdEFyZ3VtZW50c3xzZXRPYmplY3RNYXRlcmlhbHxzZXRPYmplY3RNYXRlcmlhbEdsb2JhbHxzZXRPYmplY3RQcm94eXxzZXRPYmplY3RUZXh0dXJlfHNldE9iamVjdFRleHR1cmVHbG9iYWx8c2V0T2JqZWN0Vmlld0Rpc3RhbmNlfHNldE92ZXJjYXN0fHNldE93bmVyfHNldE94eWdlblJlbWFpbmluZ3xzZXRQYXJ0aWNsZUNpcmNsZXxzZXRQYXJ0aWNsZUNsYXNzfHNldFBhcnRpY2xlRmlyZXxzZXRQYXJ0aWNsZVBhcmFtc3xzZXRQYXJ0aWNsZVJhbmRvbXxzZXRQaWxvdENhbWVyYURpcmVjdGlvbnxzZXRQaWxvdENhbWVyYVJvdGF0aW9ufHNldFBpbG90Q2FtZXJhVGFyZ2V0fHNldFBpbG90TGlnaHR8c2V0UGlQRWZmZWN0fHNldFBpdGNofHNldFBsYXRlTnVtYmVyfHNldFBsYXlhYmxlfHNldFBsYXllclJlc3Bhd25UaW1lfHNldFBvc3xzZXRQb3NBU0x8c2V0UG9zQVNMMnxzZXRQb3NBU0xXfHNldFBvc0FUTHxzZXRQb3NpdGlvbnxzZXRQb3NXb3JsZHxzZXRQeWxvbkxvYWRPdXR8c2V0UHlsb25zUHJpb3JpdHl8c2V0UmFkaW9Nc2d8c2V0UmFpbnxzZXRSYWluYm93fHNldFJhbmRvbUxpcHxzZXRSYW5rfHNldFJlY3Rhbmd1bGFyfHNldFJlcGFpckNhcmdvfHNldFJvdG9yQnJha2VSVER8c2V0U2hhZG93RGlzdGFuY2V8c2V0U2hvdFBhcmVudHN8c2V0U2lkZXxzZXRTaW1wbGVUYXNrQWx3YXlzVmlzaWJsZXxzZXRTaW1wbGVUYXNrQ3VzdG9tRGF0YXxzZXRTaW1wbGVUYXNrRGVzY3JpcHRpb258c2V0U2ltcGxlVGFza0Rlc3RpbmF0aW9ufHNldFNpbXBsZVRhc2tUYXJnZXR8c2V0U2ltcGxlVGFza1R5cGV8c2V0U2ltdWxXZWF0aGVyTGF5ZXJzfHNldFNpemV8c2V0U2tpbGx8c2V0U2xpbmdMb2FkfHNldFNvdW5kRWZmZWN0fHNldFNwZWFrZXJ8c2V0U3BlZWNofHNldFNwZWVkTW9kZXxzZXRTdGFtaW5hfHNldFN0YW1pbmFTY2hlbWV8c2V0U3RhdFZhbHVlfHNldFN1cHByZXNzaW9ufHNldFN5c3RlbU9mVW5pdHN8c2V0VGFyZ2V0QWdlfHNldFRhc2tNYXJrZXJPZmZzZXR8c2V0VGFza1Jlc3VsdHxzZXRUYXNrU3RhdGV8c2V0VGVycmFpbkdyaWR8c2V0VGV4dHxzZXRUaW1lTXVsdGlwbGllcnxzZXRUaXRsZUVmZmVjdHxzZXRUb25lTWFwcGluZ3xzZXRUb25lTWFwcGluZ1BhcmFtc3xzZXRUcmFmZmljRGVuc2l0eXxzZXRUcmFmZmljRGlzdGFuY2V8c2V0VHJhZmZpY0dhcHxzZXRUcmFmZmljU3BlZWR8c2V0VHJpZ2dlckFjdGl2YXRpb258c2V0VHJpZ2dlckFyZWF8c2V0VHJpZ2dlclN0YXRlbWVudHN8c2V0VHJpZ2dlclRleHR8c2V0VHJpZ2dlclRpbWVvdXR8c2V0VHJpZ2dlclR5cGV8c2V0VHlwZXxzZXRVbmNvbnNjaW91c3xzZXRVbml0QWJpbGl0eXxzZXRVbml0TG9hZG91dHxzZXRVbml0UG9zfHNldFVuaXRQb3NXZWFrfHNldFVuaXRSYW5rfHNldFVuaXRSZWNvaWxDb2VmZmljaWVudHxzZXRVbml0VHJhaXR8c2V0VW5sb2FkSW5Db21iYXR8c2V0VXNlckFjdGlvblRleHR8c2V0VXNlck1GRFRleHR8c2V0VXNlck1GRFZhbHVlfHNldFZhcmlhYmxlfHNldFZlY3RvckRpcnxzZXRWZWN0b3JEaXJBbmRVcHxzZXRWZWN0b3JVcHxzZXRWZWhpY2xlQW1tb3xzZXRWZWhpY2xlQW1tb0RlZnxzZXRWZWhpY2xlQXJtb3J8c2V0VmVoaWNsZUNhcmdvfHNldFZlaGljbGVJZHxzZXRWZWhpY2xlSW5pdHxzZXRWZWhpY2xlTG9ja3xzZXRWZWhpY2xlUG9zaXRpb258c2V0VmVoaWNsZVJhZGFyfHNldFZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0c3xzZXRWZWhpY2xlUmVwb3J0T3duUG9zaXRpb258c2V0VmVoaWNsZVJlcG9ydFJlbW90ZVRhcmdldHN8c2V0VmVoaWNsZVRJUGFyc3xzZXRWZWhpY2xlVmFyTmFtZXxzZXRWZWxvY2l0eXxzZXRWZWxvY2l0eU1vZGVsU3BhY2V8c2V0VmVsb2NpdHlUcmFuc2Zvcm1hdGlvbnxzZXRWaWV3RGlzdGFuY2V8c2V0VmlzaWJsZUlmVHJlZUNvbGxhcHNlZHxzZXRXYW50ZWRScG1SVER8c2V0V2F2ZXN8c2V0V2F5cG9pbnRCZWhhdmlvdXJ8c2V0V2F5cG9pbnRDb21iYXRNb2RlfHNldFdheXBvaW50Q29tcGxldGlvblJhZGl1c3xzZXRXYXlwb2ludERlc2NyaXB0aW9ufHNldFdheXBvaW50Rm9yY2VCZWhhdmlvdXJ8c2V0V2F5cG9pbnRGb3JtYXRpb258c2V0V2F5cG9pbnRIb3VzZVBvc2l0aW9ufHNldFdheXBvaW50TG9pdGVyUmFkaXVzfHNldFdheXBvaW50TG9pdGVyVHlwZXxzZXRXYXlwb2ludE5hbWV8c2V0V2F5cG9pbnRQb3NpdGlvbnxzZXRXYXlwb2ludFNjcmlwdHxzZXRXYXlwb2ludFNwZWVkfHNldFdheXBvaW50U3RhdGVtZW50c3xzZXRXYXlwb2ludFRpbWVvdXR8c2V0V2F5cG9pbnRUeXBlfHNldFdheXBvaW50VmlzaWJsZXxzZXRXZWFwb25SZWxvYWRpbmdUaW1lfHNldFdpbmR8c2V0V2luZERpcnxzZXRXaW5kRm9yY2V8c2V0V2luZFN0cnxzZXRXaW5nRm9yY2VTY2FsZVJURHxzZXRXUFBvc3xzaG93M0RJY29uc3xzaG93Q2hhdHxzaG93Q2luZW1hQm9yZGVyfHNob3dDb21tYW5kaW5nTWVudXxzaG93Q29tcGFzc3xzaG93Q3VyYXRvckNvbXBhc3N8c2hvd0dQU3xzaG93SFVEfHNob3dMZWdlbmR8c2hvd01hcHxzaG93bkFydGlsbGVyeUNvbXB1dGVyfHNob3duQ2hhdHxzaG93bkNvbXBhc3N8c2hvd25DdXJhdG9yQ29tcGFzc3xzaG93TmV3RWRpdG9yT2JqZWN0fHNob3duR1BTfHNob3duSFVEfHNob3duTWFwfHNob3duUGFkfHNob3duUmFkaW98c2hvd25TY29yZXRhYmxlfHNob3duVUFWRmVlZHxzaG93bldhcnJhbnR8c2hvd25XYXRjaHxzaG93UGFkfHNob3dSYWRpb3xzaG93U2NvcmV0YWJsZXxzaG93U3VidGl0bGVzfHNob3dVQVZGZWVkfHNob3dXYXJyYW50fHNob3dXYXRjaHxzaG93V2F5cG9pbnR8c2hvd1dheXBvaW50c3xzaWRlfHNpZGVBbWJpZW50TGlmZXxzaWRlQ2hhdHxzaWRlRW1wdHl8c2lkZUVuZW15fHNpZGVGcmllbmRseXxzaWRlTG9naWN8c2lkZVJhZGlvfHNpZGVVbmtub3dufHNpbXBsZVRhc2tzfHNpbXVsYXRpb25FbmFibGVkfHNpbXVsQ2xvdWREZW5zaXR5fHNpbXVsQ2xvdWRPY2NsdXNpb258c2ltdWxJbkNsb3Vkc3xzaW11bFdlYXRoZXJTeW5jfHNpbnxzaXplfHNpemVPZnxza2lsbHxza2lsbEZpbmFsfHNraXBUaW1lfHNsZWVwfHNsaWRlclBvc2l0aW9ufHNsaWRlclJhbmdlfHNsaWRlclNldFBvc2l0aW9ufHNsaWRlclNldFJhbmdlfHNsaWRlclNldFNwZWVkfHNsaWRlclNwZWVkfHNsaW5nTG9hZEFzc2lzdGFudFNob3dufHNvbGRpZXJNYWdhemluZXN8c29tZUFtbW98c29ydHxzb3VuZFZvbHVtZXxzcGVha2VyfHNwZWVkfHNwZWVkTW9kZXxzcGxpdFN0cmluZ3xzcXJ0fHNxdWFkUGFyYW1zfHN0YW5jZXxzdGFydExvYWRpbmdTY3JlZW58c3RvcHxzdG9wRW5naW5lUlREfHN0b3BwZWR8c3RyfHN1bk9yTW9vbnxzdXBwb3J0SW5mb3xzdXBwcmVzc0ZvcnxzdXJmYWNlSXNXYXRlcnxzdXJmYWNlTm9ybWFsfHN1cmZhY2VUeXBlfHN3aW1JbkRlcHRofHN3aXRjaGFibGVVbml0c3xzd2l0Y2hBY3Rpb258c3dpdGNoQ2FtZXJhfHN3aXRjaEdlc3R1cmV8c3dpdGNoTGlnaHR8c3dpdGNoTW92ZXxzeW5jaHJvbml6ZWRPYmplY3RzfHN5bmNocm9uaXplZFRyaWdnZXJzfHN5bmNocm9uaXplZFdheXBvaW50c3xzeW5jaHJvbml6ZU9iamVjdHNBZGR8c3luY2hyb25pemVPYmplY3RzUmVtb3ZlfHN5bmNocm9uaXplVHJpZ2dlcnxzeW5jaHJvbml6ZVdheXBvaW50fHN5c3RlbUNoYXR8c3lzdGVtT2ZVbml0c3x0YW58dGFyZ2V0S25vd2xlZGdlfHRhcmdldHN8dGFyZ2V0c0FnZ3JlZ2F0ZXx0YXJnZXRzUXVlcnl8dGFza0Fsd2F5c1Zpc2libGV8dGFza0NoaWxkcmVufHRhc2tDb21wbGV0ZWR8dGFza0N1c3RvbURhdGF8dGFza0Rlc2NyaXB0aW9ufHRhc2tEZXN0aW5hdGlvbnx0YXNrSGludHx0YXNrTWFya2VyT2Zmc2V0fHRhc2tOdWxsfHRhc2tQYXJlbnR8dGFza1Jlc3VsdHx0YXNrU3RhdGV8dGFza1R5cGV8dGVhbU1lbWJlcnx0ZWFtTWVtYmVyTnVsbHx0ZWFtTmFtZXx0ZWFtc3x0ZWFtU3dpdGNofHRlYW1Td2l0Y2hFbmFibGVkfHRlYW1UeXBlfHRlcm1pbmF0ZXx0ZXJyYWluSW50ZXJzZWN0fHRlcnJhaW5JbnRlcnNlY3RBU0x8dGVycmFpbkludGVyc2VjdEF0QVNMfHRleHR8dGV4dExvZ3x0ZXh0TG9nRm9ybWF0fHRnfHRpbWV8dGltZU11bHRpcGxpZXJ8dGl0bGVDdXR8dGl0bGVGYWRlT3V0fHRpdGxlT2JqfHRpdGxlUnNjfHRpdGxlVGV4dHx0b0FycmF5fHRvRml4ZWR8dG9Mb3dlcnx0b1N0cmluZ3x0b1VwcGVyfHRyaWdnZXJBY3RpdmF0ZWR8dHJpZ2dlckFjdGl2YXRpb258dHJpZ2dlckFyZWF8dHJpZ2dlckF0dGFjaGVkVmVoaWNsZXx0cmlnZ2VyQXR0YWNoT2JqZWN0fHRyaWdnZXJBdHRhY2hWZWhpY2xlfHRyaWdnZXJEeW5hbWljU2ltdWxhdGlvbnx0cmlnZ2VyU3RhdGVtZW50c3x0cmlnZ2VyVGV4dHx0cmlnZ2VyVGltZW91dHx0cmlnZ2VyVGltZW91dEN1cnJlbnR8dHJpZ2dlclR5cGV8dHVycmV0TG9jYWx8dHVycmV0T3duZXJ8dHVycmV0VW5pdHx0dkFkZHx0dkNsZWFyfHR2Q29sbGFwc2V8dHZDb2xsYXBzZUFsbHx0dkNvdW50fHR2Q3VyU2VsfHR2RGF0YXx0dkRlbGV0ZXx0dkV4cGFuZHx0dkV4cGFuZEFsbHx0dlBpY3R1cmV8dHZQaWN0dXJlUmlnaHR8dHZTZXRDb2xvcnx0dlNldEN1clNlbHx0dlNldERhdGF8dHZTZXRQaWN0dXJlfHR2U2V0UGljdHVyZUNvbG9yfHR2U2V0UGljdHVyZUNvbG9yRGlzYWJsZWR8dHZTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZHx0dlNldFBpY3R1cmVSaWdodHx0dlNldFBpY3R1cmVSaWdodENvbG9yfHR2U2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZHx0dlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWR8dHZTZXRTZWxlY3RDb2xvcnx0dlNldFRleHR8dHZTZXRUb29sdGlwfHR2U2V0VmFsdWV8dHZTb3J0fHR2U29ydEJ5VmFsdWV8dHZUZXh0fHR2VG9vbHRpcHx0dlZhbHVlfHR5cGV8dHlwZU5hbWV8dHlwZU9mfFVBVkNvbnRyb2x8dWlOYW1lc3BhY2V8dWlTbGVlcHx1bmFzc2lnbkN1cmF0b3J8dW5hc3NpZ25JdGVtfHVuYXNzaWduVGVhbXx1bmFzc2lnblZlaGljbGV8dW5kZXJ3YXRlcnx1bmlmb3JtfHVuaWZvcm1Db250YWluZXJ8dW5pZm9ybUl0ZW1zfHVuaWZvcm1NYWdhemluZXN8dW5pdEFkZG9uc3x1bml0QWltUG9zaXRpb258dW5pdEFpbVBvc2l0aW9uVmlzdWFsfHVuaXRCYWNrcGFja3x1bml0SXNVQVZ8dW5pdFBvc3x1bml0UmVhZHl8dW5pdFJlY29pbENvZWZmaWNpZW50fHVuaXRzfHVuaXRzQmVsb3dIZWlnaHR8dW5saW5rSXRlbXx1bmxvY2tBY2hpZXZlbWVudHx1bnJlZ2lzdGVyVGFza3x1cGRhdGVEcmF3SWNvbnx1cGRhdGVNZW51SXRlbXx1cGRhdGVPYmplY3RUcmVlfHVzZUFJT3Blck1hcE9ic3RydWN0aW9uVGVzdHx1c2VBSVN0ZWVyaW5nQ29tcG9uZW50fHVzZUF1ZGlvVGltZUZvck1vdmVzfHVzZXJJbnB1dERpc2FibGVkfHZlY3RvckFkZHx2ZWN0b3JDb3N8dmVjdG9yQ3Jvc3NQcm9kdWN0fHZlY3RvckRpZmZ8dmVjdG9yRGlyfHZlY3RvckRpclZpc3VhbHx2ZWN0b3JEaXN0YW5jZXx2ZWN0b3JEaXN0YW5jZVNxcnx2ZWN0b3JEb3RQcm9kdWN0fHZlY3RvckZyb21Ub3x2ZWN0b3JNYWduaXR1ZGV8dmVjdG9yTWFnbml0dWRlU3FyfHZlY3Rvck1vZGVsVG9Xb3JsZHx2ZWN0b3JNb2RlbFRvV29ybGRWaXN1YWx8dmVjdG9yTXVsdGlwbHl8dmVjdG9yTm9ybWFsaXplZHx2ZWN0b3JVcHx2ZWN0b3JVcFZpc3VhbHx2ZWN0b3JXb3JsZFRvTW9kZWx8dmVjdG9yV29ybGRUb01vZGVsVmlzdWFsfHZlaGljbGV8dmVoaWNsZUNhcmdvRW5hYmxlZHx2ZWhpY2xlQ2hhdHx2ZWhpY2xlUmFkaW98dmVoaWNsZVJlY2VpdmVSZW1vdGVUYXJnZXRzfHZlaGljbGVSZXBvcnRPd25Qb3NpdGlvbnx2ZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0c3x2ZWhpY2xlc3x2ZWhpY2xlVmFyTmFtZXx2ZWxvY2l0eXx2ZWxvY2l0eU1vZGVsU3BhY2V8dmVyaWZ5U2lnbmF0dXJlfHZlc3R8dmVzdENvbnRhaW5lcnx2ZXN0SXRlbXN8dmVzdE1hZ2F6aW5lc3x2aWV3RGlzdGFuY2V8dmlzaWJsZUNvbXBhc3N8dmlzaWJsZUdQU3x2aXNpYmxlTWFwfHZpc2libGVQb3NpdGlvbnx2aXNpYmxlUG9zaXRpb25BU0x8dmlzaWJsZVNjb3JldGFibGV8dmlzaWJsZVdhdGNofHdhaXRVbnRpbHx3YXZlc3x3YXlwb2ludEF0dGFjaGVkT2JqZWN0fHdheXBvaW50QXR0YWNoZWRWZWhpY2xlfHdheXBvaW50QXR0YWNoT2JqZWN0fHdheXBvaW50QXR0YWNoVmVoaWNsZXx3YXlwb2ludEJlaGF2aW91cnx3YXlwb2ludENvbWJhdE1vZGV8d2F5cG9pbnRDb21wbGV0aW9uUmFkaXVzfHdheXBvaW50RGVzY3JpcHRpb258d2F5cG9pbnRGb3JjZUJlaGF2aW91cnx3YXlwb2ludEZvcm1hdGlvbnx3YXlwb2ludEhvdXNlUG9zaXRpb258d2F5cG9pbnRMb2l0ZXJSYWRpdXN8d2F5cG9pbnRMb2l0ZXJUeXBlfHdheXBvaW50TmFtZXx3YXlwb2ludFBvc2l0aW9ufHdheXBvaW50c3x3YXlwb2ludFNjcmlwdHx3YXlwb2ludHNFbmFibGVkVUFWfHdheXBvaW50U2hvd3x3YXlwb2ludFNwZWVkfHdheXBvaW50U3RhdGVtZW50c3x3YXlwb2ludFRpbWVvdXR8d2F5cG9pbnRUaW1lb3V0Q3VycmVudHx3YXlwb2ludFR5cGV8d2F5cG9pbnRWaXNpYmxlfHdlYXBvbkFjY2Vzc29yaWVzfHdlYXBvbkFjY2Vzc29yaWVzQ2FyZ298d2VhcG9uQ2FyZ298d2VhcG9uRGlyZWN0aW9ufHdlYXBvbkluZXJ0aWF8d2VhcG9uTG93ZXJlZHx3ZWFwb25zfHdlYXBvbnNJdGVtc3x3ZWFwb25zSXRlbXNDYXJnb3x3ZWFwb25TdGF0ZXx3ZWFwb25zVHVycmV0fHdlaWdodFJURHx3ZXN0fFdGU2lkZVRleHR8d2luZHx3aW5kRGlyfHdpbmRSVER8d2luZFN0cnx3aW5nc0ZvcmNlc1JURHx3b3JsZE5hbWV8d29ybGRTaXplfHdvcmxkVG9Nb2RlbHx3b3JsZFRvTW9kZWxWaXN1YWx8d29ybGRUb1NjcmVlbilcXGIvaSxcblx0J251bWJlcic6IC8oPzpcXCR8XFxiMHgpW1xcZGEtZl0rXFxifCg/OlxcQlxcLlxcZCt8XFxiXFxkKyg/OlxcLlxcZCspPykoPzplWystXT9cXGQrKT9cXGIvaSxcblx0J29wZXJhdG9yJzogLyMjfD4+fCYmfFxcfFxcfHxbIT08Pl09P3xbLSsqLyUjXl18XFxiKD86YW5kfG1vZHxub3R8b3IpXFxiL2ksXG5cdCdtYWdpYy12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86dGhpc3x0aGlzTGlzdHx0aGlzVHJpZ2dlcnxfZXhjZXB0aW9ufF9mbmNfc2NyaXB0TmFtZXxfZm5jX3NjcmlwdE5hbWVQYXJlbnR8X2ZvckVhY2hJbmRleHxfdGhpc3xfdGhpc0V2ZW50SGFuZGxlcnxfdGhpc0ZTTXxfdGhpc1NjcmlwdHxfeClcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdjb25zdGFudCc6IC9cXGJESUsoPzpfW2EtelxcZF0rKStcXGIvaVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NxZicsICdzdHJpbmcnLCB7XG5cdCdtYWNybyc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSNbYS16XSg/OlteXFxyXFxuXFxcXF18XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKi9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8jW2Etel0rXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHQnY29tbWVudCc6IFByaXNtLmxhbmd1YWdlcy5zcWYuY29tbWVudFxuXHRcdH1cblx0fVxufSk7XG5cbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuc3FmWydjbGFzcy1uYW1lJ107XG5cblByaXNtLmxhbmd1YWdlcy5zcXVpcnJlbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY29tbWVudCc6IFtcblx0XHRQcmlzbS5sYW5ndWFnZXMuY2xpa2VbJ2NvbW1lbnQnXVswXSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pKD86XFwvXFwvfCMpLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXCInQF0pKD86QFwiKD86W15cIl18XCJcIikqXCIoPyFcIil8XCIoPzpbXlxcXFxcXHJcXG5cIl18XFxcXC4pKlwiKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGVudW18ZXh0ZW5kc3xpbnN0YW5jZW9mKVxccyspXFx3Kyg/OlxcLlxcdyspKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpfX0ZJTEVfX3xfX0xJTkVfX3xiYXNlfGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y2xvbmV8Y29uc3R8Y29uc3RydWN0b3J8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZWxzZXxlbnVtfGV4dGVuZHN8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxsb2NhbHxudWxsfHJlc3VtZXxyZXR1cm58c3RhdGljfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8d2hpbGV8eWllbGQpXFxiLyxcblxuXHQnbnVtYmVyJzogL1xcYig/OjB4WzAtOWEtZkEtRl0rfFxcZCsoPzpcXC4oPzpcXGQrfFtlRV1bKy1dP1xcZCspKT8pXFxiLyxcblx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXw8PT58PFstPF18Pj4+P3wmJj98XFx8XFx8P3xbLSsqLyUhPTw+XT0/fFt+Xl18Ojo/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9XFxbXFxdLDsuXS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzcXVpcnJlbCcsICdzdHJpbmcnLCB7XG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxcIiddKScoPzpbXlxcXFwnXXxcXFxcKD86W3h1VV1bMC05YS1mQS1GXXswLDh9fFtcXHNcXFNdKSknLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc3F1aXJyZWwnLCAnb3BlcmF0b3InLCB7XG5cdCdhdHRyaWJ1dGUtcHVuY3R1YXRpb24nOiB7XG5cdFx0cGF0dGVybjogLzxcXC98XFwvPi8sXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cdCdsYW1iZGEnOiB7XG5cdFx0cGF0dGVybjogL0AoPz1cXCgpLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIGh0dHBzOi8vbWMtc3Rhbi5vcmcvZG9jcy8yXzI4L3JlZmVyZW5jZS1tYW51YWwvYm5mLWdyYW1tYXJzLmh0bWxcblxuXHR2YXIgaGlnaGVyT3JkZXJGdW5jdGlvbnMgPSAvXFxiKD86YWxnZWJyYV9zb2x2ZXJ8YWxnZWJyYV9zb2x2ZXJfbmV3dG9ufGludGVncmF0ZV8xZHxpbnRlZ3JhdGVfb2RlfGludGVncmF0ZV9vZGVfYmRmfGludGVncmF0ZV9vZGVfcms0NXxtYXBfcmVjdHxvZGVfKD86YWRhbXN8YmRmfGNrcmt8cms0NSkoPzpfdG9sKT98b2RlX2Fkam9pbnRfdG9sX2N0bHxyZWR1Y2Vfc3VtfHJlZHVjZV9zdW1fc3RhdGljKVxcYi87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnN0YW4gPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcL3wjKD8haW5jbHVkZSkuKi8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdC8vIFN0cmluZyBsaXRlcmFscyBjYW4gY29udGFpbiBzcGFjZXMgYW5kIGFueSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBleGNlcHQgZm9yIFwiIGFuZCBcXFxuXHRcdFx0Ly8gaHR0cHM6Ly9tYy1zdGFuLm9yZy9kb2NzLzJfMjQvcmVmZXJlbmNlLW1hbnVhbC9wcmludC1zdGF0ZW1lbnRzLXNlY3Rpb24uaHRtbCNzdHJpbmctbGl0ZXJhbHNcblx0XHRcdHBhdHRlcm46IC9cIltcXHgyMFxceDIxXFx4MjMtXFx4NUJcXHg1RC1cXHg3RV0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKikjaW5jbHVkZVxcYi4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uLWFyZyc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0JygnICtcblx0XHRcdFx0aGlnaGVyT3JkZXJGdW5jdGlvbnMuc291cmNlICtcblx0XHRcdFx0L1xccypcXChcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHQnKScgK1xuXHRcdFx0XHQvW2EtekEtWl1cXHcqLy5zb3VyY2Vcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdjb25zdHJhaW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzppbnR8bWF0cml4fHJlYWx8cm93X3ZlY3Rvcnx2ZWN0b3IpXFxzKik8W148Pl0qPi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPVxccyopXFxTKD86XFxTfFxccysoPyFcXHMpKSo/KD89XFxzKig/Oj4kfCxcXHMqXFx3K1xccyo9KSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHJvcGVydHknOiAvXFxiW2Etel1cXHcqKD89XFxzKj0pL2ksXG5cdFx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148fD4kfCwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYmRhdGEoPz1cXHMqXFx7KXxcXGIoPzpmdW5jdGlvbnN8Z2VuZXJhdGVkfG1vZGVsfHBhcmFtZXRlcnN8cXVhbnRpdGllc3x0cmFuc2Zvcm1lZClcXGIvLFxuXHRcdFx0XHRhbGlhczogJ3Byb2dyYW0tYmxvY2snXG5cdFx0XHR9LFxuXHRcdFx0L1xcYig/OmFycmF5fGJyZWFrfGNob2xlc2t5X2ZhY3Rvcl9jb3JyfGNob2xlc2t5X2ZhY3Rvcl9jb3Z8Y29tcGxleHxjb250aW51ZXxjb3JyX21hdHJpeHxjb3ZfbWF0cml4fGRhdGF8ZWxzZXxmb3J8aWZ8aW58aW5jcmVtZW50X2xvZ19wcm9ifGludHxtYXRyaXh8b3JkZXJlZHxwb3NpdGl2ZV9vcmRlcmVkfHByaW50fHJlYWx8cmVqZWN0fHJldHVybnxyb3dfdmVjdG9yfHNpbXBsZXh8dGFyZ2V0fHVuaXRfdmVjdG9yfHZlY3Rvcnx2b2lkfHdoaWxlKVxcYi8sXG5cdFx0XHQvLyB0aGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGtub3duIHRvIHRha2UgYW5vdGhlciBmdW5jdGlvbiBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC5cblx0XHRcdGhpZ2hlck9yZGVyRnVuY3Rpb25zXG5cdFx0XSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel1cXHcqKD89XFxzKlxcKCkvaSxcblx0XHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpfXFxkKykqKD86XFwuKD86XFxkKyg/Ol9cXGQrKSopPyk/fFxcQlxcLlxcZCsoPzpfXFxkKykqKSg/OkVbKy1dP1xcZCsoPzpfXFxkKykqKT9pPyg/IVxcdykvaSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cblx0XHQnb3BlcmF0b3InOiAvPC18XFwuWyovXT0/fFxcfFxcfD98JiZ8WyE9PD4rXFwtKi9dPT98WydeJX4/Ol0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fSw7XS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc3Rhbi5jb25zdHJhaW50Lmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zdGFuO1xuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3LnN0YXRhLmNvbS9tYW51YWxzL3UucGRmXG4vLyBodHRwczovL3d3dy5zdGF0YS5jb20vbWFudWFscy9wLnBkZlxuXG5QcmlzbS5sYW5ndWFnZXMuc3RhdGEgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFwqLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nLWxpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCJ8W1x1MjAxOGAnXVwiLio/XCJbXHUyMDE5YCddLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcJFxce1tee31dKlxcfXxbXHUyMDE4YCddXFx3W15cdTIwMTlgJ1xcclxcbl0qW1x1MjAxOWAnXS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXG5cdCdtYXRhJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSptYXRhWyBcXHRdKjopW1xcc1xcU10rPyg/PV5lbmRcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS1tYXRhJyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXRhXG5cdH0sXG5cdCdqYXZhJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSpqYXZhWyBcXHRdKjopW1xcc1xcU10rPyg/PV5lbmRcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhJyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhXG5cdH0sXG5cdCdweXRob24nOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKnB5dGhvblsgXFx0XSo6KVtcXHNcXFNdKz8oPz1eZW5kXFxiKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcHl0aG9uJyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5weXRob25cblx0fSxcblxuXG5cdCdjb21tYW5kJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSooPzpcXC5bIFxcdF0rKT8oPzooPzpiYXllc3xib290c3RyYXB8Ynl8Ynlzb3J0fGNhcHR1cmV8Y29sbGVjdHxmbW18ZnB8ZnJhbWV8amFja2tuaWZlfG1mcHxtaXxuZXN0cmVnfG5vaXNpbHl8cGVybXV0ZXxxdWlldGx5fHJvbGxpbmd8c2ltdWxhdGV8c3RhdHNieXxzdGVwd2lzZXxzdnl8dmVyc2lvbnx4aSlcXGJbXjpcXHJcXG5dKjpbIFxcdF0qfCg/OmNhcHR1cmV8bm9pc2lseXxxdWlldGx5fHZlcnNpb24pWyBcXHRdKyk/KVthLXpBLVpdXFx3Ki9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcdyt8W1x1MjAxOGAnXVxcd1teXHUyMDE5YCdcXHJcXG5dKltcdTIwMTlgJ10vLFxuXHQna2V5d29yZCc6IC9cXGIoPzpiYXllc3xib290c3RyYXB8Ynl8Ynlzb3J0fGNhcHR1cmV8Y2xlYXJ8Y29sbGVjdHxmbW18ZnB8ZnJhbWV8aWZ8aW58amFja2tuaWZlfG1pWyBcXHRdK2VzdGltYXRlfG1mcHxuZXN0cmVnfG5vaXNpbHl8b2Z8cGVybXV0ZXxxdWlldGx5fHJvbGxpbmd8c2ltdWxhdGV8c29ydHxzdGF0c2J5fHN0ZXB3aXNlfHN2eXx2YXJsaXN0fHZlcnNpb258eGkpXFxiLyxcblxuXG5cdCdib29sZWFuJzogL1xcYig/Om9mZnxvbilcXGIvLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGJ8XFxCXFwuXFxkKy8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFwoKS9pLFxuXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18IyM/fFs8PiE9fl09P3xbK1xcLSpeJnwvXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0sOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc3RhdGFbJ3N0cmluZy1saXRlcmFsJ10uaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnN0YXRhO1xuXG5QcmlzbS5sYW5ndWFnZXMuaWVjc3QgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8XFwoXFwqW1xcc1xcU10qPyg/OlxcKlxcKXwkKXxcXHtbXFxzXFxTXSo/KD86XFx9fCQpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J2tleXdvcmQnOiBbXG5cdFx0L1xcYig/OkVORF8pPyg/OlBST0dSQU18Q09ORklHVVJBVElPTnxJTlRFUkZBQ0V8RlVOQ1RJT05fQkxPQ0t8RlVOQ1RJT058QUNUSU9OfFRSQU5TSVRJT058VFlQRXxTVFJVQ1R8KD86SU5JVElBTF8pP1NURVB8TkFNRVNQQUNFfExJQlJBUll8Q0hBTk5FTHxGT0xERVJ8UkVTT1VSQ0V8VkFSXyg/OkFDQ0VTU3xDT05GSUd8RVhURVJOQUx8R0xPQkFMfElOUFVUfElOX09VVHxPVVRQVVR8VEVNUCl8VkFSfE1FVEhPRHxQUk9QRVJUWSlcXGIvaSxcblx0XHQvXFxiKD86QVR8Qll8KD86RU5EXyk/KD86Q0FTRXxGT1J8SUZ8UkVQRUFUfFdISUxFKXxDT05TVEFOVHxDT05USU5VRXxET3xFTFNFfEVMU0lGfEVYSVR8RVhURU5EU3xGUk9NfEdFVHxHT1RPfElNUExFTUVOVFN8Sk1QfE5PTl9SRVRBSU58T0Z8UFJJVkFURXxQUk9URUNURUR8UFVCTElDfFJFVEFJTnxSRVRVUk58U0VUfFRBU0t8VEhFTnxUT3xVTlRJTHxVU0lOR3xXSVRIfF9fQ0FUQ0h8X19FTkRUUll8X19GSU5BTExZfF9fVFJZKVxcYi9cblx0XSxcblx0J2NsYXNzLW5hbWUnOiAvXFxiKD86QU5ZfEFSUkFZfEJPT0x8QllURXxVPyg/OkR8THxTKT9JTlR8KD86RHxMKT9XT1JEfERBVEUoPzpfQU5EX1RJTUUpP3xEVHxMP1JFQUx8UE9JTlRFUnxTVFJJTkd8VElNRSg/Ol9PRl9EQVkpP3xUT0QpXFxiLyxcblx0J2FkZHJlc3MnOiB7XG5cdFx0cGF0dGVybjogLyVbSVFNXVtYQldETF1bXFxkLl0qfCVbSVFdW1xcZC5dKi8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiKD86MTYjW1xcZGEtZl0rfDIjWzAxX10rfDB4W1xcZGEtZl0rKVxcYnxcXGIoPzpEfERUfFR8VE9EKSNbXFxkX3NobWQ6XSp8XFxiW0EtWl0qI1tcXGQuLF9dKnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/L2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfE5VTEx8VFJVRSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvUz9SPzo/PT4/fCYmP3xcXCpcXCo/fDxbPT5dP3w+PT98Wy06Xi8rI118XFxiKD86QU5EfEVRfEVYUFR8R0V8R1R8TEV8TFR8TU9EfE5FfE5PVHxPUnxYT1IpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXS4sO10vLFxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgdW5pdCA9IHtcblx0XHRwYXR0ZXJuOiAvKFxcYlxcZCspKD86JXxbYS16XSspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH07XG5cdC8vIDEyMyAtMTIzIC4xMjMgLS4xMjMgMTIuMyAtMTIuM1xuXHR2YXIgbnVtYmVyID0ge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSktPyg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fTtcblxuXHR2YXIgaW5zaWRlID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3VybCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJ1cmxcXCgoW1wiJ10/KS4qP1xcMVxcKS9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhcInwnKSg/Oig/IVxcMSlbXlxcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbic6IG51bGwsIC8vIFNlZSBiZWxvd1xuXHRcdCdmdW5jJzogbnVsbCwgLy8gU2VlIGJlbG93XG5cdFx0J2ltcG9ydGFudCc6IC9cXEIhKD86aW1wb3J0YW50fG9wdGlvbmFsKVxcYi9pLFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccyspKD86KD86ZWxzZXxmb3J8aWZ8cmV0dXJufHVubGVzcykoPz1cXHN8JCl8QFtcXHctXSspLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdoZXhjb2RlJzogLyNbXFxkYS1mXXszLDZ9L2ksXG5cdFx0J2NvbG9yJzogW1xuXHRcdFx0L1xcYig/OkFsaWNlQmx1ZXxBbnRpcXVlV2hpdGV8QXF1YXxBcXVhbWFyaW5lfEF6dXJlfEJlaWdlfEJpc3F1ZXxCbGFja3xCbGFuY2hlZEFsbW9uZHxCbHVlfEJsdWVWaW9sZXR8QnJvd258QnVybHlXb29kfENhZGV0Qmx1ZXxDaGFydHJldXNlfENob2NvbGF0ZXxDb3JhbHxDb3JuZmxvd2VyQmx1ZXxDb3Juc2lsa3xDcmltc29ufEN5YW58RGFya0JsdWV8RGFya0N5YW58RGFya0dvbGRlblJvZHxEYXJrR3JbYWVdeXxEYXJrR3JlZW58RGFya0toYWtpfERhcmtNYWdlbnRhfERhcmtPbGl2ZUdyZWVufERhcmtPcmFuZ2V8RGFya09yY2hpZHxEYXJrUmVkfERhcmtTYWxtb258RGFya1NlYUdyZWVufERhcmtTbGF0ZUJsdWV8RGFya1NsYXRlR3JbYWVdeXxEYXJrVHVycXVvaXNlfERhcmtWaW9sZXR8RGVlcFBpbmt8RGVlcFNreUJsdWV8RGltR3JbYWVdeXxEb2RnZXJCbHVlfEZpcmVCcmlja3xGbG9yYWxXaGl0ZXxGb3Jlc3RHcmVlbnxGdWNoc2lhfEdhaW5zYm9yb3xHaG9zdFdoaXRlfEdvbGR8R29sZGVuUm9kfEdyW2FlXXl8R3JlZW58R3JlZW5ZZWxsb3d8SG9uZXlEZXd8SG90UGlua3xJbmRpYW5SZWR8SW5kaWdvfEl2b3J5fEtoYWtpfExhdmVuZGVyfExhdmVuZGVyQmx1c2h8TGF3bkdyZWVufExlbW9uQ2hpZmZvbnxMaWdodEJsdWV8TGlnaHRDb3JhbHxMaWdodEN5YW58TGlnaHRHb2xkZW5Sb2RZZWxsb3d8TGlnaHRHclthZV15fExpZ2h0R3JlZW58TGlnaHRQaW5rfExpZ2h0U2FsbW9ufExpZ2h0U2VhR3JlZW58TGlnaHRTa3lCbHVlfExpZ2h0U2xhdGVHclthZV15fExpZ2h0U3RlZWxCbHVlfExpZ2h0WWVsbG93fExpbWV8TGltZUdyZWVufExpbmVufE1hZ2VudGF8TWFyb29ufE1lZGl1bUFxdWFNYXJpbmV8TWVkaXVtQmx1ZXxNZWRpdW1PcmNoaWR8TWVkaXVtUHVycGxlfE1lZGl1bVNlYUdyZWVufE1lZGl1bVNsYXRlQmx1ZXxNZWRpdW1TcHJpbmdHcmVlbnxNZWRpdW1UdXJxdW9pc2V8TWVkaXVtVmlvbGV0UmVkfE1pZG5pZ2h0Qmx1ZXxNaW50Q3JlYW18TWlzdHlSb3NlfE1vY2Nhc2lufE5hdmFqb1doaXRlfE5hdnl8T2xkTGFjZXxPbGl2ZXxPbGl2ZURyYWJ8T3JhbmdlfE9yYW5nZVJlZHxPcmNoaWR8UGFsZUdvbGRlblJvZHxQYWxlR3JlZW58UGFsZVR1cnF1b2lzZXxQYWxlVmlvbGV0UmVkfFBhcGF5YVdoaXB8UGVhY2hQdWZmfFBlcnV8UGlua3xQbHVtfFBvd2RlckJsdWV8UHVycGxlfFJlZHxSb3N5QnJvd258Um95YWxCbHVlfFNhZGRsZUJyb3dufFNhbG1vbnxTYW5keUJyb3dufFNlYUdyZWVufFNlYVNoZWxsfFNpZW5uYXxTaWx2ZXJ8U2t5Qmx1ZXxTbGF0ZUJsdWV8U2xhdGVHclthZV15fFNub3d8U3ByaW5nR3JlZW58U3RlZWxCbHVlfFRhbnxUZWFsfFRoaXN0bGV8VG9tYXRvfFRyYW5zcGFyZW50fFR1cnF1b2lzZXxWaW9sZXR8V2hlYXR8V2hpdGV8V2hpdGVTbW9rZXxZZWxsb3d8WWVsbG93R3JlZW4pXFxiL2ksXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpoc2x8cmdiKVxcKFxccypcXGR7MSwzfVxccyosXFxzKlxcZHsxLDN9JT9cXHMqLFxccypcXGR7MSwzfSU/XFxzKlxcKVxcQnxcXGIoPzpoc2x8cmdiKWFcXChcXHMqXFxkezEsM31cXHMqLFxccypcXGR7MSwzfSU/XFxzKixcXHMqXFxkezEsM30lP1xccyosXFxzKig/OjB8MD9cXC5cXGQrfDEpXFxzKlxcKVxcQi9pLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndW5pdCc6IHVuaXQsXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvW1xcdy1dKyg/PVxcKCkvLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2VudGl0eSc6IC9cXFxcW1xcZGEtZl17MSw4fS9pLFxuXHRcdCd1bml0JzogdW5pdCxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogW1xuXHRcdFx0Ly8gV2Ugd2FudCBub24td29yZCBjaGFycyBhcm91bmQgXCItXCIgYmVjYXVzZSBpdCBpc1xuXHRcdFx0Ly8gYWNjZXB0ZWQgaW4gcHJvcGVydHkgbmFtZXMuXG5cdFx0XHQvfnxbKyFcXC8lPD4/PV09P3xbLTpdPXxcXCpbKj1dP3xcXC57MiwzfXwmJnxcXHxcXHx8XFxCLVxcQnxcXGIoPzphbmR8aW58aXMoPzogYXwgZGVmaW5lZHwgbm90fG50KT98bm90fG9yKVxcYi9cblx0XHRdLFxuXHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdOzosXS9cblx0fTtcblxuXHRpbnNpZGVbJ2ludGVycG9sYXRpb24nXSA9IHtcblx0XHRwYXR0ZXJuOiAvXFx7W15cXHJcXG59Ol0rXFx9Lyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFx7fFxcfSQvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdHJlc3Q6IGluc2lkZVxuXHRcdH1cblx0fTtcblx0aW5zaWRlWydmdW5jJ10gPSB7XG5cdFx0cGF0dGVybjogL1tcXHctXStcXChbXildKlxcKS4qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmdW5jdGlvbic6IC9eW14oXSsvLFxuXHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zdHlsdXMgPSB7XG5cdFx0J2F0cnVsZS1kZWNsYXJhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopQC4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHJ1bGUnOiAvXkBbXFx3LV0rLyxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndmFyaWFibGUtZGVjbGFyYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVtcXHckLV0rXFxzKi4/PVsgXFx0XSooPzpcXHtbXnt9XSpcXH18XFxTLip8JCkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhcmlhYmxlJzogL15cXFMrLyxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdzdGF0ZW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OmVsc2V8Zm9yfGlmfHJldHVybnx1bmxlc3MpWyBcXHRdLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiAvXlxcUysvLFxuXHRcdFx0XHRyZXN0OiBpbnNpZGVcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQSBwcm9wZXJ0eS92YWx1ZSBwYWlyIGNhbm5vdCBlbmQgd2l0aCBhIGNvbW1hIG9yIGEgYnJhY2Vcblx0XHQvLyBJdCBjYW5ub3QgaGF2ZSBpbmRlbnRlZCBjb250ZW50IHVubGVzcyBpdCBlbmRlZCB3aXRoIGEgc2VtaWNvbG9uXG5cdFx0J3Byb3BlcnR5LWRlY2xhcmF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxceykoWyBcXHRdKikpKD86W1xcdy1dfFxce1tefVxcclxcbl0rXFx9KSsoPzpcXHMqOlxccyp8WyBcXHRdKykoPyFcXHMpW157XFxyXFxuXSooPzo7fFtee1xcclxcbixdJCg/ISg/Olxccj9cXG58XFxyKSg/Olxce3xcXDJbIFxcdF0pKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eW15cXHM6XSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnNpZGUuaW50ZXJwb2xhdGlvblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblxuXG5cdFx0Ly8gQSBzZWxlY3RvciBjYW4gY29udGFpbiBwYXJlbnRoZXNlcyBvbmx5IGFzIHBhcnQgb2YgYSBwc2V1ZG8tZWxlbWVudFxuXHRcdC8vIEl0IGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzLlxuXHRcdC8vIEl0IG11c3QgZW5kIHdpdGggYSBjb21tYSBvciBhbiBhY2NvbGFkZSBvciBoYXZlIGluZGVudGVkIGNvbnRlbnQuXG5cdFx0J3NlbGVjdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzooPz1cXFMpKD86W157fVxcclxcbjooKV18Ojo/W1xcdy1dKyg/OlxcKFteKVxcclxcbl0qXFwpfCg/IVtcXHctXSkpfFxce1tefVxcclxcbl0rXFx9KSspKD86KD86XFxyP1xcbnxcXHIpKD86XFwxKD86KD89XFxTKSg/Oltee31cXHJcXG46KCldfDo6P1tcXHctXSsoPzpcXChbXilcXHJcXG5dKlxcKXwoPyFbXFx3LV0pKXxcXHtbXn1cXHJcXG5dK1xcfSkrKSkpKig/OiwkfFxce3woPz0oPzpcXHI/XFxufFxccikoPzpcXHt8XFwxWyBcXHRdKSkpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW5zaWRlLmludGVycG9sYXRpb24sXG5cdFx0XHRcdCdjb21tZW50JzogaW5zaWRlLmNvbW1lbnQsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9be30sXS9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J2Z1bmMnOiBpbnNpZGUuZnVuYyxcblx0XHQnc3RyaW5nJzogaW5zaWRlLnN0cmluZyxcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLiopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdpbnRlcnBvbGF0aW9uJzogaW5zaWRlLmludGVycG9sYXRpb24sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdOzouXS9cblx0fTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnN1cGVyY29sbGlkZXIgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC8pKlxcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlwiXFxcXF18XFxcXFtcXHNcXFNdKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/OlteXFxcXFxcclxcbl18XFxcXC4pLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N5bWJvbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSknKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonfFxcXFxcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/Ol98YXJnfGNsYXNzdmFyfGNvbnN0fG5pbHx2YXJ8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyo6KS8sXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQnbnVtYmVyJzogL1xcYig/OmluZnxwaXwweFswLTlhLWZBLUZdK3xcXGQrKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/KD86cGkpP3xcXGQrclswLTlhLXpBLVpdKyg/OlxcLlswLTlhLXpBLVpdKyk/fFxcZCtbc2JdezEsNH1cXGQqKVxcYi8sXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KlxcYi8sXG5cblx0J29wZXJhdG9yJzogL1xcLnsyLDN9fCMoPyFbW3tdKXwmJnxbIT1dPT0/fFxcKz4+fFxcK3sxLDN9fC1bLT5dfD0+fD4+fFxcP1xcP3xAXFx8P0B8XFx8KD86QHxbIT1dPSk/XFx8fCFcXD98PFshPT5dfFxcKnsxLDJ9fDx7MiwzfVxcKj98Wy0hJSYvPD4/QHw9YF0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KClbXFxdLjosO118I1tbe10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc2NsYW5nID0gUHJpc20ubGFuZ3VhZ2VzLnN1cGVyY29sbGlkZXI7XG5cblByaXNtLmxhbmd1YWdlcy5zd2lmdCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0Ly8gTmVzdGVkIGNvbW1lbnRzIGFyZSBzdXBwb3J0ZWQgdXAgdG8gMiBsZXZlbHNcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pKD86XFwvXFwvLip8XFwvXFwqKD86W14vKl18XFwvKD8hXFwqKXxcXCooPyFcXC8pfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXCpcXC8pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nLWxpdGVyYWwnOiBbXG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL0xhbmd1YWdlR3VpZGUvU3RyaW5nc0FuZENoYXJhY3RlcnMuaHRtbFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhefFteXCIjXSkvLnNvdXJjZVxuXHRcdFx0XHQrICcoPzonXG5cdFx0XHRcdC8vIHNpbmdsZS1saW5lIHN0cmluZ1xuXHRcdFx0XHQrIC9cIig/OlxcXFwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHJcXG58W14oXSl8W15cXFxcXFxyXFxuXCJdKSpcIi8uc291cmNlXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdC8vIG11bHRpLWxpbmUgc3RyaW5nXG5cdFx0XHRcdCsgL1wiXCJcIig/OlxcXFwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxbXihdKXxbXlxcXFxcIl18XCIoPyFcIlwiKSkqXCJcIlwiLy5zb3VyY2Vcblx0XHRcdFx0KyAnKSdcblx0XHRcdFx0KyAvKD8hW1wiI10pLy5zb3VyY2Vcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxcXFxcKCkoPzpbXigpXXxcXChbXigpXSpcXCkpKig/PVxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcKXxcXFxcXFwoJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwoPz1bXFxyXFxuXSkvLFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhefFteXCIjXSkoIyspLy5zb3VyY2Vcblx0XHRcdFx0KyAnKD86J1xuXHRcdFx0XHQvLyBzaW5nbGUtbGluZSBzdHJpbmdcblx0XHRcdFx0KyAvXCIoPzpcXFxcKD86IytcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHJcXG58W14jXSl8W15cXFxcXFxyXFxuXSkqP1wiLy5zb3VyY2Vcblx0XHRcdFx0KyAnfCdcblx0XHRcdFx0Ly8gbXVsdGktbGluZSBzdHJpbmdcblx0XHRcdFx0KyAvXCJcIlwiKD86XFxcXCg/OiMrXFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8W14jXSl8W15cXFxcXSkqP1wiXCJcIi8uc291cmNlXG5cdFx0XHRcdCsgJyknXG5cdFx0XHRcdCsgJ1xcXFwyJ1xuXHRcdFx0KSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXFxcIytcXCgpKD86W14oKV18XFwoW14oKV0qXFwpKSooPz1cXCkpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXCl8XFxcXCMrXFwoJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XSxcblxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdC8vIGRpcmVjdGl2ZXMgd2l0aCBjb25kaXRpb25zXG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0LyMvLnNvdXJjZVxuXHRcdFx0KyAnKD86J1xuXHRcdFx0KyAoXG5cdFx0XHRcdC8oPzplbHNlaWZ8aWYpXFxiLy5zb3VyY2Vcblx0XHRcdFx0KyAnKD86WyBcXHRdKidcblx0XHRcdFx0Ly8gVGhpcyByZWdleCBpcyBhIGxpdHRsZSBjb21wbGV4LiBJdCdzIGVxdWl2YWxlbnQgdG8gdGhpczpcblx0XHRcdFx0Ly8gICAoPzohWyBcXHRdKik/KD86XFxiXFx3K1xcYig/OlsgXFx0XSo8cm91bmQ+KT98PHJvdW5kPikoPzpbIFxcdF0qKD86JiZ8XFx8XFx8KSk/XG5cdFx0XHRcdC8vIHdoZXJlIDxyb3VuZD4gaXMgYSBnZW5lcmFsIHBhcmVudGhlc2VzIGV4cHJlc3Npb24uXG5cdFx0XHRcdCsgLyg/OiFbIFxcdF0qKT8oPzpcXGJcXHcrXFxiKD86WyBcXHRdKlxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKT98XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkpKD86WyBcXHRdKig/OiYmfFxcfFxcfCkpPy8uc291cmNlXG5cdFx0XHRcdCsgJykrJ1xuXHRcdFx0KVxuXHRcdFx0KyAnfCdcblx0XHRcdCsgLyg/OmVsc2V8ZW5kaWYpXFxiLy5zb3VyY2Vcblx0XHRcdCsgJyknXG5cdFx0KSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkaXJlY3RpdmUtbmFtZSc6IC9eI1xcdysvLFxuXHRcdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKykqXFxiLyxcblx0XHRcdCdvcGVyYXRvcic6IC8hfCYmfFxcfFxcfHxbPD5dPT8vLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdL1xuXHRcdH1cblx0fSxcblx0J2xpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogLyMoPzpjb2xvckxpdGVyYWx8Y29sdW1ufGRzb2hhbmRsZXxmaWxlKD86SUR8TGl0ZXJhbHxQYXRoKT98ZnVuY3Rpb258aW1hZ2VMaXRlcmFsfGxpbmUpXFxiLyxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnb3RoZXItZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8jXFx3K1xcYi8sXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9AXFx3Ky8sXG5cdFx0YWxpYXM6ICdhdHJ1bGUnXG5cdH0sXG5cblx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhcXGJmdW5jXFxzKylcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdsYWJlbCc6IHtcblx0XHQvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svTGFuZ3VhZ2VHdWlkZS9Db250cm9sRmxvdy5odG1sI0lEMTQxXG5cdFx0cGF0dGVybjogL1xcYihicmVha3xjb250aW51ZSlcXHMrXFx3K3xcXGJbYS16QS1aX11cXHcqKD89XFxzKjpcXHMqKD86Zm9yfHJlcGVhdHx3aGlsZSlcXGIpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OkFueXxQcm90b2NvbHxTZWxmfFR5cGV8YWN0b3J8YXN8YXNzaWdubWVudHxhc3NvY2lhdGVkdHlwZXxhc3NvY2lhdGl2aXR5fGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29udGludWV8Y29udmVuaWVuY2V8ZGVmYXVsdHxkZWZlcnxkZWluaXR8ZGlkU2V0fGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4dGVuc2lvbnxmYWxsdGhyb3VnaHxmaWxlcHJpdmF0ZXxmaW5hbHxmb3J8ZnVuY3xnZXR8Z3VhcmR8aGlnaGVyVGhhbnxpZnxpbXBvcnR8aW58aW5kaXJlY3R8aW5maXh8aW5pdHxpbm91dHxpbnRlcm5hbHxpc3xpc29sYXRlZHxsYXp5fGxlZnR8bGV0fGxvd2VyVGhhbnxtdXRhdGluZ3xub25lfG5vbmlzb2xhdGVkfG5vbm11dGF0aW5nfG9wZW58b3BlcmF0b3J8b3B0aW9uYWx8b3ZlcnJpZGV8cG9zdGZpeHxwcmVjZWRlbmNlZ3JvdXB8cHJlZml4fHByaXZhdGV8cHJvdG9jb2x8cHVibGljfHJlcGVhdHxyZXF1aXJlZHxyZXRocm93c3xyZXR1cm58cmlnaHR8c2FmZXxzZWxmfHNldHxzb21lfHN0YXRpY3xzdHJ1Y3R8c3Vic2NyaXB0fHN1cGVyfHN3aXRjaHx0aHJvd3x0aHJvd3N8dHJ5fHR5cGVhbGlhc3x1bm93bmVkfHVuc2FmZXx2YXJ8d2Vha3x3aGVyZXx3aGlsZXx3aWxsU2V0KVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J25pbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxibmlsXFxiLyxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXG5cdCdzaG9ydC1hcmd1bWVudCc6IC9cXCRcXGQrXFxiLyxcblx0J29taXQnOiB7XG5cdFx0cGF0dGVybjogL1xcYl9cXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J251bWJlcic6IC9cXGIoPzpbXFxkX10rKD86XFwuW1xcZGVfXSspP3wweFthLWYwLTlfXSsoPzpcXC5bYS1mMC05cF9dKyk/fDBiWzAxX10rfDBvWzAtN19dKylcXGIvaSxcblxuXHQvLyBBIGNsYXNzIG5hbWUgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyIGFuZCBiZSBlaXRoZXIgMSBsZXR0ZXIgbG9uZyBvciBjb250YWluIGEgbG93ZXItY2FzZSBsZXR0ZXIuXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdKD86W0EtWl9cXGRdKlthLXpdXFx3Kik/XFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86W0EtWl9dezIsfXxrW0EtWl1bQS1aYS16X10rKVxcYi8sXG5cblx0Ly8gT3BlcmF0b3JzIGFyZSBnZW5lcmljIGluIFN3aWZ0LiBEZXZlbG9wZXJzIGNhbiBldmVuIGNyZWF0ZSBuZXcgb3BlcmF0b3JzIChlLmcuICsrKykuXG5cdC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvenpTdW1tYXJ5T2ZUaGVHcmFtbWFyLmh0bWwjSUQ0ODFcblx0Ly8gVGhpcyByZWdleCBvbmx5IHN1cHBvcnRzIEFTQ0lJIG9wZXJhdG9ycy5cblx0J29wZXJhdG9yJzogL1stKyovJT0hPD4mfF5+P10rfFxcLlsuXFwtKyovJT0hPD4mfF5+P10rLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF0oKTssLjpcXFxcXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zd2lmdFsnc3RyaW5nLWxpdGVyYWwnXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG5cdHJ1bGUuaW5zaWRlWydpbnRlcnBvbGF0aW9uJ10uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnN3aWZ0O1xufSk7XG5cbi8vIGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zeXN0ZW1kL21hbi9zeXN0ZW1kLnN5bnRheC5odG1sXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgY29tbWVudCA9IHtcblx0XHRwYXR0ZXJuOiAvXls7I10uKi9tLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXG5cdHZhciBxdW90ZXNTb3VyY2UgPSAvXCIoPzpbXlxcclxcblwiXFxcXF18XFxcXCg/OlteXFxyXXxcXHJcXG4/KSkqXCIoPyFcXFMpLy5zb3VyY2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnN5c3RlbWQgPSB7XG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXG5cdFx0J3NlY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxcW1teXFxuXFxyXFxbXFxdXSpcXF0oPz1bIFxcdF0qJCkvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0J3NlY3Rpb24tbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQna2V5Jzoge1xuXHRcdFx0cGF0dGVybjogL15bXlxccz1dKyg/PVsgXFx0XSo9KS9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdFx0fSxcblx0XHQndmFsdWUnOiB7XG5cdFx0XHQvLyBUaGlzIHBhdHRlcm4gaXMgcXVpdGUgY29tcGxleCBiZWNhdXNlIG9mIHR3byBwcm9wZXJ0aWVzOlxuXHRcdFx0Ly8gIDEpIFF1b3RlcyAoc3RyaW5ncykgbXVzdCBiZSBwcmVjZWRlZCBieSBhIHNwYWNlLiBTaW5jZSB3ZSBjYW4ndCB1c2UgbG9va2JlaGluZHMsIHdlIGhhdmUgdG8gXCJyZXNvbHZlXCJcblx0XHRcdC8vICAgICB0aGUgbG9va2JlaGluZC4gWW91IHdpbGwgc2VlIHRoaXMgaW4gdGhlIG1haW4gbG9vcCB3aGVyZSBzcGFjZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS5cblx0XHRcdC8vICAyKSBMaW5lIGNvbnRpbnVhdGlvbnMuXG5cdFx0XHQvLyAgICAgQWZ0ZXIgbGluZSBjb250aW51YXRpb25zLCBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMgYXJlIGlnbm9yZWQgc28gd2UgaGF2ZSB0byBjb25zdW1lIHRoZW0uXG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oPVsgXFx0XSooPyFcXHMpKS8uc291cmNlICtcblx0XHRcdFx0Ly8gdGhlIHZhbHVlIGVpdGhlciBzdGFydHMgd2l0aCBxdW90ZXMgb3Igbm90XG5cdFx0XHRcdCcoPzonICsgcXVvdGVzU291cmNlICsgJ3woPz1bXlwiXFxyXFxuXSkpJyArXG5cdFx0XHRcdC8vIG1haW4gbG9vcFxuXHRcdFx0XHQnKD86JyArIChcblx0XHRcdFx0XHQvW15cXHNcXFxcXS8uc291cmNlICtcblx0XHRcdFx0XHQvLyBoYW5kbGUgc3BhY2VzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBxdW90ZXNcblx0XHRcdFx0XHQnfCcgKyAnWyBcXHRdKyg/Oig/IVsgXFx0XCJdKXwnICsgcXVvdGVzU291cmNlICsgJyknICtcblx0XHRcdFx0XHQvLyBsaW5lIGNvbnRpbnVhdGlvblxuXHRcdFx0XHRcdCd8JyArIC9cXFxcW1xcclxcbl0rKD86WyM7XS4qW1xcclxcbl0rKSooPyFbIztdKS8uc291cmNlXG5cdFx0XHRcdCkgK1xuXHRcdFx0XHQnKSonXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQncXVvdGVkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58XFxzKS8uc291cmNlICsgcXVvdGVzU291cmNlKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwkL20sXG5cblx0XHRcdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oPzpmYWxzZXxub3xvZmZ8b258dHJ1ZXx5ZXMpJC8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogLz0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZUJsb2NrKHByZWZpeCwgaW5zaWRlLCBjb250ZW50QWxpYXMpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCc8IycgKyBwcmVmaXggKyAnW1xcXFxzXFxcXFNdKj8jPicpLFxuXHRcdFx0YWxpYXM6ICdibG9jaycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ148IycgKyBwcmVmaXggKyAnfCM+JCcpLFxuXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRpbnNpZGU6IGluc2lkZSxcblx0XHRcdFx0XHRhbGlhczogY29udGVudEFsaWFzXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlVDQoaW5zaWRlTGFuZykge1xuXHRcdHZhciBncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2luc2lkZUxhbmddO1xuXHRcdHZhciBjbGFzc05hbWUgPSAnbGFuZ3VhZ2UtJyArIGluc2lkZUxhbmc7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0J2Jsb2NrJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPCNbXFxzXFxTXSs/Iz4vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZGlyZWN0aXZlJzogY3JlYXRlQmxvY2soJ0AnLCB7XG5cdFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLz0oPzooXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXxbXlxccydcIj49XSspLyxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL149fF5bXCInXXxbXCInXSQvXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGJcXHcrKD89XFxzKS8sXG5cdFx0XHRcdFx0XHQnYXR0ci1uYW1lJzogL1xcYlxcdysvXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiBjcmVhdGVCbG9jaygnPScsIGdyYW1tYXIsIGNsYXNzTmFtZSksXG5cdFx0XHRcdFx0J2NsYXNzLWZlYXR1cmUnOiBjcmVhdGVCbG9jaygnXFxcXCsnLCBncmFtbWFyLCBjbGFzc05hbWUpLFxuXHRcdFx0XHRcdCdzdGFuZGFyZCc6IGNyZWF0ZUJsb2NrKCcnLCBncmFtbWFyLCBjbGFzc05hbWUpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzWyd0NC10ZW1wbGF0aW5nJ10gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdjcmVhdGVUNCcsIHsgdmFsdWU6IGNyZWF0ZVQ0IH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy50NCA9IFByaXNtLmxhbmd1YWdlc1sndDQtY3MnXSA9IFByaXNtLmxhbmd1YWdlc1sndDQtdGVtcGxhdGluZyddLmNyZWF0ZVQ0KCdjc2hhcnAnKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnZibmV0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYmFzaWMnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oPzohfFJFTVxcYikuKy9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15SRU0vaVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKScuKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlwiXSlcIig/OlwiXCJ8W15cIl0pKlwiKD8hXCIpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC8oPzpcXGIoPzpBRERIQU5ETEVSfEFERFJFU1NPRnxBTElBU3xBTkR8QU5EQUxTT3xBU3xCRUVQfEJMT0FEfEJPT0xFQU58QlNBVkV8QllSRUZ8QllURXxCWVZBTHxDQUxMKD86IEFCU09MVVRFKT98Q0FTRXxDQVRDSHxDQk9PTHxDQllURXxDQ0hBUnxDREFURXxDREJMfENERUN8Q0hBSU58Q0hBUnxDSERJUnxDSU5UfENMQVNTfENMRUFSfENMTkd8Q0xPU0V8Q0xTfENPQkp8Q09NfENPTU1PTnxDT05TVHxDT05USU5VRXxDU0JZVEV8Q1NIT1JUfENTTkd8Q1NUUnxDVFlQRXxDVUlOVHxDVUxOR3xDVVNIT1JUfERBVEF8REFURXxERUNJTUFMfERFQ0xBUkV8REVGKD86IEZOfCBTRUd8REJMfElOVHxMTkd8U05HfFNUUil8REVGQVVMVHxERUxFR0FURXxESU18RElSRUNUQ0FTVHxET3xET1VCTEV8RUxTRXxFTFNFSUZ8RU5EfEVOVU18RU5WSVJPTnxFUkFTRXxFUlJPUnxFVkVOVHxFWElUfEZBTFNFfEZJRUxEfEZJTEVTfEZJTkFMTFl8Rk9SKD86IEVBQ0gpP3xGUklFTkR8RlVOQ1RJT058R0VUfEdFVFRZUEV8R0VUWE1MTkFNRVNQQUNFfEdMT0JBTHxHT1NVQnxHT1RPfEhBTkRMRVN8SUZ8SU1QTEVNRU5UU3xJTVBPUlRTfElOfElOSEVSSVRTfElOUFVUfElOVEVHRVJ8SU5URVJGQUNFfElPQ1RMfElTfElTTk9UfEtFWXxLSUxMfExFVHxMSUJ8TElLRXxMSU5FIElOUFVUfExPQ0FURXxMT0NLfExPTkd8TE9PUHxMU0VUfE1FfE1LRElSfE1PRHxNT0RVTEV8TVVTVElOSEVSSVR8TVVTVE9WRVJSSURFfE1ZQkFTRXxNWUNMQVNTfE5BTUV8TkFNRVNQQUNFfE5BUlJPV0lOR3xORVd8TkVYVHxOT1R8Tk9USElOR3xOT1RJTkhFUklUQUJMRXxOT1RPVkVSUklEQUJMRXxPQkpFQ1R8T0Z8T0ZGfE9OKD86IENPTXwgRVJST1J8IEtFWXwgVElNRVIpP3xPUEVOfE9QRVJBVE9SfE9QVElPTig/OiBCQVNFKT98T1BUSU9OQUx8T1J8T1JFTFNFfE9VVHxPVkVSTE9BRFN8T1ZFUlJJREFCTEV8T1ZFUlJJREVTfFBBUkFNQVJSQVl8UEFSVElBTHxQT0tFfFBSSVZBVEV8UFJPUEVSVFl8UFJPVEVDVEVEfFBVQkxJQ3xQVVR8UkFJU0VFVkVOVHxSRUFEfFJFQURPTkxZfFJFRElNfFJFTXxSRU1PVkVIQU5ETEVSfFJFU1RPUkV8UkVTVU1FfFJFVFVSTnxSTURJUnxSU0VUfFJVTnxTQllURXxTRUxFQ1QoPzogQ0FTRSk/fFNFVHxTSEFET1dTfFNIQVJFRHxTSEVMTHxTSE9SVHxTSU5HTEV8U0xFRVB8U1RBVElDfFNURVB8U1RPUHxTVFJJTkd8U1RSVUNUVVJFfFNVQnxTV0FQfFNZTkNMT0NLfFNZU1RFTXxUSEVOfFRIUk9XfFRJTUVSfFRPfFRST0ZGfFRST058VFJVRXxUUll8VFJZQ0FTVHxUWVBFfFRZUEVPRnxVSU5URUdFUnxVTE9OR3xVTkxPQ0t8VU5USUx8VVNIT1JUfFVTSU5HfFZJRVcgUFJJTlR8V0FJVHxXRU5EfFdIRU58V0hJTEV8V0lERU5JTkd8V0lUSHxXSVRIRVZFTlRTfFdSSVRFfFdSSVRFT05MWXxYT1IpfFxcQig/OiNDT05TVHwjRUxTRXwjRUxTRUlGfCNFTkR8I0lGKSkoPzpcXCR8XFxiKS9pLFxuXHQncHVuY3R1YXRpb24nOiAvWyw7Oigpe31dL1xufSk7XG5cblByaXNtLmxhbmd1YWdlc1sndDQtdmInXSA9IFByaXNtLmxhbmd1YWdlc1sndDQtdGVtcGxhdGluZyddLmNyZWF0ZVQ0KCd2Ym5ldCcpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjYy1ucy1hbmNob3ItcHJvcGVydHlcblx0Ly8gaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjYy1ucy1hbGlhcy1ub2RlXG5cdHZhciBhbmNob3JPckFsaWFzID0gL1sqJl1bXlxcc1tcXF17fSxdKy87XG5cdC8vIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2MtbnMtdGFnLXByb3BlcnR5XG5cdHZhciB0YWcgPSAvISg/OjxbXFx3XFwtJSM7Lz86QCY9KyQsLiF+KicoKVtcXF1dKz58KD86W2EtekEtWlxcZC1dKiEpP1tcXHdcXC0lIzsvPzpAJj0rJC5+KicoKV0rKT8vO1xuXHQvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNjLW5zLXByb3BlcnRpZXMobixjKVxuXHR2YXIgcHJvcGVydGllcyA9ICcoPzonICsgdGFnLnNvdXJjZSArICcoPzpbIFxcdF0rJyArIGFuY2hvck9yQWxpYXMuc291cmNlICsgJyk/fCdcblx0XHQrIGFuY2hvck9yQWxpYXMuc291cmNlICsgJyg/OlsgXFx0XSsnICsgdGFnLnNvdXJjZSArICcpPyknO1xuXHQvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNucy1wbGFpbihuLGMpXG5cdC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gdGhhdCBkb2Vzbid0IHN1cHBvcnQgXCIjXCIgYW5kIG11bHRpbGluZSBrZXlzXG5cdC8vIEFsbCB0aGVzZSBsb25nIHNjYXJyeSBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBZQU1MJ3MgY2hhcmFjdGVyc1xuXHR2YXIgcGxhaW5LZXkgPSAvKD86W15cXHNcXHgwMC1cXHgwOFxceDBlLVxceDFmIVwiIyUmJyosXFwtOj4/QFtcXF1ge3x9XFx4N2YtXFx4ODRcXHg4Ni1cXHg5ZlxcdWQ4MDAtXFx1ZGZmZlxcdWZmZmVcXHVmZmZmXXxbPzotXTxQTEFJTj4pKD86WyBcXHRdKig/Oig/IVsjOl0pPFBMQUlOPnw6PFBMQUlOPikpKi8uc291cmNlXG5cdFx0LnJlcGxhY2UoLzxQTEFJTj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gL1teXFxzXFx4MDAtXFx4MDhcXHgwZS1cXHgxZixbXFxde31cXHg3Zi1cXHg4NFxceDg2LVxceDlmXFx1ZDgwMC1cXHVkZmZmXFx1ZmZmZVxcdWZmZmZdLy5zb3VyY2U7IH0pO1xuXHR2YXIgc3RyaW5nID0gL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXC4pKicvLnNvdXJjZTtcblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVWYWx1ZVBhdHRlcm4odmFsdWUsIGZsYWdzKSB7XG5cdFx0ZmxhZ3MgPSAoZmxhZ3MgfHwgJycpLnJlcGxhY2UoL20vZywgJycpICsgJ20nOyAvLyBhZGQgbSBmbGFnXG5cdFx0dmFyIHBhdHRlcm4gPSAvKFs6XFwtLFt7XVxccyooPzpcXHM8PHByb3A+PlsgXFx0XSspPykoPzo8PHZhbHVlPj4pKD89WyBcXHRdKig/OiR8LHxcXF18XFx9fCg/OltcXHJcXG5dXFxzKik/IykpLy5zb3VyY2Vcblx0XHRcdC5yZXBsYWNlKC88PHByb3A+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wZXJ0aWVzOyB9KS5yZXBsYWNlKC88PHZhbHVlPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0pO1xuXHRcdHJldHVybiBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnlhbWwgPSB7XG5cdFx0J3NjYWxhcic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFtcXC06XVxccyooPzpcXHM8PHByb3A+PlsgXFx0XSspP1t8Pl0pWyBcXHRdKig/OigoPzpcXHI/XFxufFxccilbIFxcdF0rKVxcU1teXFxyXFxuXSooPzpcXDJbXlxcclxcbl0rKSopLy5zb3VyY2Vcblx0XHRcdFx0LnJlcGxhY2UoLzw8cHJvcD4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BlcnRpZXM7IH0pKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXHRcdCdjb21tZW50JzogLyMuKi8sXG5cdFx0J2tleSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKCg/Ol58WzpcXC0sW3tcXHJcXG4/XSlbIFxcdF0qKD86PDxwcm9wPj5bIFxcdF0rKT8pPDxrZXk+Pig/PVxccyo6XFxzKS8uc291cmNlXG5cdFx0XHRcdC5yZXBsYWNlKC88PHByb3A+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wZXJ0aWVzOyB9KVxuXHRcdFx0XHQucmVwbGFjZSgvPDxrZXk+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAnKD86JyArIHBsYWluS2V5ICsgJ3wnICsgc3RyaW5nICsgJyknOyB9KSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHJ1bGUnXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKiklLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXHRcdCdkYXRldGltZSc6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybigvXFxkezR9LVxcZFxcZD8tXFxkXFxkPyg/Olt0VF18WyBcXHRdKylcXGRcXGQ/OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQqKT8oPzpbIFxcdF0qKD86WnxbLStdXFxkXFxkPyg/OjpcXGR7Mn0pPykpP3xcXGR7NH0tXFxkezJ9LVxcZHsyfXxcXGRcXGQ/OlxcZHsyfSg/OjpcXGR7Mn0oPzpcXC5cXGQqKT8pPy8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogY3JlYXRlVmFsdWVQYXR0ZXJuKC9mYWxzZXx0cnVlLy5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnbnVsbCc6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybigvbnVsbHx+Ly5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogY3JlYXRlVmFsdWVQYXR0ZXJuKHN0cmluZyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogY3JlYXRlVmFsdWVQYXR0ZXJuKC9bKy1dPyg/OjB4W1xcZGEtZl0rfDBvWzAtN10rfCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT98XFwuaW5mfFxcLm5hbikvLnNvdXJjZSwgJ2knKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd0YWcnOiB0YWcsXG5cdFx0J2ltcG9ydGFudCc6IGFuY2hvck9yQWxpYXMsXG5cdFx0J3B1bmN0dWF0aW9uJzogLy0tLXxbOltcXF17fVxcLSx8Pj9dfFxcLlxcLlxcLi9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMueW1sID0gUHJpc20ubGFuZ3VhZ2VzLnlhbWw7XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGVzdF9Bbnl0aGluZ19Qcm90b2NvbFxuXG5QcmlzbS5sYW5ndWFnZXMudGFwID0ge1xuXHQnZmFpbCc6IC9ub3Qgb2tbXiN7XFxuXFxyXSovLFxuXHQncGFzcyc6IC9va1teI3tcXG5cXHJdKi8sXG5cdCdwcmFnbWEnOiAvcHJhZ21hIFsrLV1bYS16XSsvLFxuXHQnYmFpbG91dCc6IC9iYWlsIG91dCEuKi9pLFxuXHQndmVyc2lvbic6IC9UQVAgdmVyc2lvbiBcXGQrL2ksXG5cdCdwbGFuJzogL1xcYlxcZCtcXC5cXC5cXGQrKD86ICsjLiopPy8sXG5cdCdzdWJ0ZXN0Jzoge1xuXHRcdHBhdHRlcm46IC8jIFN1YnRlc3QoPzo6IC4qKT8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvW3t9XS8sXG5cdCdkaXJlY3RpdmUnOiAvIy4qLyxcblx0J3lhbWxpc2gnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKiktLS1bXFxzXFxTXSo/W1xcclxcbl1bIFxcdF0qXFwuXFwuXFwuJC9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMueWFtbCxcblx0XHRhbGlhczogJ2xhbmd1YWdlLXlhbWwnXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy50Y2wgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXCQpKD86OjopPyg/OlthLXpBLVowLTldKzo6KSpcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwkKVxce1tefV0rXFx9Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpzZXRbIFxcdF0rKSg/Ojo6KT8oPzpbYS16QS1aMC05XSs6OikqXFx3Ky9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpwcm9jWyBcXHRdKylcXFMrL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnYnVpbHRpbic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/OmJyZWFrfGNsYXNzfGNvbnRpbnVlfGVycm9yfGV2YWx8ZXhpdHxmb3J8Zm9yZWFjaHxpZnxwcm9jfHJldHVybnxzd2l0Y2h8d2hpbGUpXFxiL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvXFxiKD86ZWxzZXxlbHNlaWYpXFxiL1xuXHRdLFxuXHQnc2NvcGUnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpnbG9iYWx8dXB2YXJ8dmFyaWFibGUpXFxiL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qfFxcWykoPzpTYWZlX0Jhc2V8VGNsfGFmdGVyfGFwcGVuZHxhcHBseXxhcnJheXxhdXRvXyg/OmV4ZWNva3xpbXBvcnR8bG9hZHxta2luZGV4fHF1YWxpZnl8cmVzZXQpfGF1dG9ta2luZGV4X29sZHxiZ2Vycm9yfGJpbmFyeXxjYXRjaHxjZHxjaGFufGNsb2NrfGNsb3NlfGNvbmNhdHxkZGV8ZGljdHxlbmNvZGluZ3xlb2Z8ZXhlY3xleHByfGZibG9ja2VkfGZjb25maWd1cmV8ZmNvcHl8ZmlsZSg/OmV2ZW50fG5hbWUpP3xmbHVzaHxnZXRzfGdsb2J8aGlzdG9yeXxodHRwfGluY3J8aW5mb3xpbnRlcnB8am9pbnxsYXBwZW5kfGxhc3NpZ258bGluZGV4fGxpbnNlcnR8bGlzdHxsbGVuZ3RofGxvYWR8bHJhbmdlfGxyZXBlYXR8bHJlcGxhY2V8bHJldmVyc2V8bHNlYXJjaHxsc2V0fGxzb3J0fG1hdGgoPzpmdW5jfG9wKXxtZW1vcnl8bXNnY2F0fG5hbWVzcGFjZXxvcGVufHBhY2thZ2V8cGFycmF5fHBpZHxwa2dfbWtJbmRleHxwbGF0Zm9ybXxwdXRzfHB3ZHxyZV9zeW50YXh8cmVhZHxyZWZjaGFufHJlZ2V4cHxyZWdpc3RyeXxyZWdzdWJ8cmVuYW1lfHNjYW58c2Vla3xzZXR8c29ja2V0fHNvdXJjZXxzcGxpdHxzdHJpbmd8c3Vic3R8dGNsKD86X2VuZE9mV29yZHxfZmluZExpYnJhcnl8c3RhcnRPZig/Ok5leHR8UHJldmlvdXMpV29yZHx0ZXN0fHZhcnN8d29yZEJyZWFrKD86QWZ0ZXJ8QmVmb3JlKSl8dGVsbHx0aW1lfHRtfHRyYWNlfHVua25vd258dW5sb2FkfHVuc2V0fHVwZGF0ZXx1cGxldmVsfHZ3YWl0KVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLyE9P3xcXCpcXCo/fD09fCYmP3xcXHxcXHw/fDxbPTxdP3w+Wz0+XT98Wy0rflxcLyU/Xl18XFxiKD86ZXF8aW58bmV8bmkpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHQyID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NvbW1lbnQnOiAvIy4qfFxcWyUjW1xcc1xcU10qPyVcXF0vLFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OkJMT0NLfENBTEx8Q0FTRXxDQVRDSHxDTEVBUnxERUJVR3xERUZBVUxUfEVMU0V8RUxTSUZ8RU5EfEZJTFRFUnxGSU5BTHxGT1JFQUNIfEdFVHxJRnxJTnxJTkNMVURFfElOU0VSVHxMQVNUfE1BQ1JPfE1FVEF8TkVYVHxQRVJMfFBST0NFU1N8UkFXUEVSTHxSRVRVUk58U0VUfFNUT1B8U1dJVENIfFRBR1N8VEhST1d8VFJZfFVOTEVTU3xVU0V8V0hJTEV8V1JBUFBFUilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXXt9LCgpXS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndHQyJywgJ251bWJlcicsIHtcblx0XHQnb3BlcmF0b3InOiAvPVs+PV0/fCE9P3w8PT98Pj0/fCYmfFxcfFxcfD98XFxiKD86YW5kfG5vdHxvcilcXGIvLFxuXHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPzpcXHMqXFwuXFxzKig/OlxcZCt8XFwkP1thLXpdXFx3KikpKlxcYi9pXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd0dDInLCAna2V5d29yZCcsIHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL14oPzpcXFslfCUlKS0/fC0/JVxcXSQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3R0MicsICdzdHJpbmcnLCB7XG5cdFx0J3NpbmdsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLydbXlxcXFwnXSooPzpcXFxcW1xcc1xcU11bXlxcXFwnXSopKicvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0fSxcblx0XHQnZG91YmxlLXF1b3RlZC1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlxcXFxcIl0qKD86XFxcXFtcXHNcXFNdW15cXFxcXCJdKikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86W2Etel1cXHcqKD86XFwuKD86XFxkK3xcXCQ/W2Etel1cXHcqKSkqKS9pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgVFQyIHN0cmluZ3MgXCJyZXBsYWNlXCIgdGhlIEMtbGlrZSBzdGFuZGFyZCBzdHJpbmdcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50dDIuc3RyaW5nO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdHZhciB0dDJQYXR0ZXJuID0gL1xcWyVbXFxzXFxTXSs/JVxcXS9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICd0dDInLCB0dDJQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAndHQyJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0Ly8gV2UgZG9uJ3QgYWxsb3cgZm9yIHBpcGVzIGluc2lkZSBwYXJlbnRoZXNlc1xuXHQvLyB0byBub3QgYnJlYWsgdGFibGUgcGF0dGVybiB8KC4gZm9vIHwpLiBiYXIgfFxuXHR2YXIgbW9kaWZpZXJSZWdleCA9IC9cXChbXnwoKVxcbl0rXFwpfFxcW1teXFxdXFxuXStcXF18XFx7W159XFxuXStcXH0vLnNvdXJjZTtcblx0Ly8gT3BlbmluZyBhbmQgY2xvc2luZyBwYXJlbnRoZXNlcyB3aGljaCBhcmUgbm90IGEgbW9kaWZpZXJcblx0Ly8gVGhpcyBwYXR0ZXJuIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGV4cG9uZW50aWFsIGJhY2t0cmFja2luZ1xuXHR2YXIgcGFyZW50aGVzZXNSZWdleCA9IC9cXCl8XFwoKD8hW158KClcXG5dK1xcKSkvLnNvdXJjZTtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cblx0ICovXG5cdGZ1bmN0aW9uIHdpdGhNb2RpZmllcihzb3VyY2UsIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChcblx0XHRcdHNvdXJjZVxuXHRcdFx0XHQucmVwbGFjZSgvPE1PRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBtb2RpZmllclJlZ2V4ICsgJyknOyB9KVxuXHRcdFx0XHQucmVwbGFjZSgvPFBBUj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXJlbnRoZXNlc1JlZ2V4ICsgJyknOyB9KSxcblx0XHRcdGZsYWdzIHx8ICcnKTtcblx0fVxuXG5cdHZhciBtb2RpZmllclRva2VucyA9IHtcblx0XHQnY3NzJzoge1xuXHRcdFx0cGF0dGVybjogL1xce1tee31dK1xcfS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmNzc1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NsYXNzLWlkJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXCgpW14oKV0rKD89XFwpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdH0sXG5cdFx0J2xhbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcWylbXlxcW1xcXV0rKD89XFxdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdH0sXG5cdFx0Ly8gQW55dGhpbmcgZWxzZSBpcyBwdW5jdHVhdGlvbiAodGhlIGZpcnN0IHBhdHRlcm4gaXMgZm9yIHJvdy9jb2wgc3BhbnMgaW5zaWRlIHRhYmxlcylcblx0XHQncHVuY3R1YXRpb24nOiAvW1xcXFxcXC9dXFxkK3xcXFMvXG5cdH07XG5cblxuXHR2YXIgdGV4dGlsZSA9IFByaXNtLmxhbmd1YWdlcy50ZXh0aWxlID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHRcdCdwaHJhc2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxyfFxcbilcXFNbXFxzXFxTXSo/KD89JHxcXHI/XFxuXFxyP1xcbnxcXHJcXHIpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblxuXHRcdFx0XHQvLyBoMS4gSGVhZGVyIDFcblx0XHRcdFx0J2Jsb2NrLXRhZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoL15bYS16XVxcdyooPzo8TU9EPnw8UEFSPnxbPD49XSkqXFwuLy5zb3VyY2UpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheW2Etel1cXHcqKSg/OjxNT0Q+fDxQQVI+fFs8Pj1dKSsoPz1cXC4pLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3RhZyc6IC9eW2Etel1cXHcqLyxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4kL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyAjIExpc3QgaXRlbVxuXHRcdFx0XHQvLyAqIExpc3QgaXRlbVxuXHRcdFx0XHQnbGlzdCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoL15bKiNdKzxNT0Q+KlxccytcXFMuKi8uc291cmNlLCAnbScpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheWyojXSspPE1PRD4rLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bKiNdKy9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gfCBjZWxsIHwgY2VsbCB8IGNlbGwgfFxuXHRcdFx0XHQndGFibGUnOiB7XG5cdFx0XHRcdFx0Ly8gTW9kaWZpZXJzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSByb3c6IHtjb2xvcjpyZWR9LnwxfDJ8M3xcblx0XHRcdFx0XHQvLyBvciB0aGUgY2VsbDogfHtjb2xvcjpyZWR9LjF8MnwzfFxuXHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvXig/Oig/OjxNT0Q+fDxQQVI+fFs8Pj1efl0pK1xcLlxccyopPyg/OlxcfCg/Oig/OjxNT0Q+fDxQQVI+fFs8Pj1efl9dfFtcXFxcL11cXGQrKStcXC58KD8hKD86PE1PRD58PFBBUj58Wzw+PV5+X118W1xcXFwvXVxcZCspK1xcLikpW158XSopK1xcfC8uc291cmNlLCAnbScpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBNb2RpZmllcnMgZm9yIHJvd3MgYWZ0ZXIgdGhlIGZpcnN0IG9uZSBhcmVcblx0XHRcdFx0XHRcdFx0Ly8gcHJlY2VkZWQgYnkgYSBwaXBlIGFuZCBhIGxpbmUgZmVlZFxuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyhefFxcfCg/Olxccj9cXG58XFxyKT8pKD86PE1PRD58PFBBUj58Wzw+PV5+X118W1xcXFwvXVxcZCspKyg/PVxcLikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbW9kaWZpZXJUb2tlbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8fF5cXC4vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdCdpbmxpbmUnOiB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXnxbXmEtekEtWlxcZF0pKFxcKlxcKnxfX3xcXD9cXD98WypfJUArXFwtXn5dKTxNT0Q+Ki4rP1xcMig/IVthLXpBLVpcXGRdKS8uc291cmNlKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0Ly8gTm90ZTogc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIGFyZSBub3QgaGFuZGxlZCBzcGVjaWZpY2FsbHlcblxuXHRcdFx0XHRcdFx0Ly8gKmJvbGQqLCAqKmJvbGQqKlxuXHRcdFx0XHRcdFx0J2JvbGQnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheKFxcKlxcKj8pPE1PRD4qKS4rPyg/PVxcMikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vIF9pdGFsaWNfLCBfX2l0YWxpY19fXG5cdFx0XHRcdFx0XHQnaXRhbGljJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXihfXz8pPE1PRD4qKS4rPyg/PVxcMikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vID8/Y2l0ZT8/XG5cdFx0XHRcdFx0XHQnY2l0ZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cXD9cXD88TU9EPiopLis/KD89XFw/XFw/KS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyBAY29kZUBcblx0XHRcdFx0XHRcdCdjb2RlJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXkA8TU9EPiopLis/KD89QCkvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vICtpbnNlcnRlZCtcblx0XHRcdFx0XHRcdCdpbnNlcnRlZCc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cXCs8TU9EPiopLis/KD89XFwrKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0Ly8gLWRlbGV0ZWQtXG5cdFx0XHRcdFx0XHQnZGVsZXRlZCc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF4tPE1PRD4qKS4rPyg/PS0pLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyAlc3BhbiVcblx0XHRcdFx0XHRcdCdzcGFuJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXiU8TU9EPiopLis/KD89JSkvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlxcKlxcKnxfX3xcXD9cXD98WypfJUArXFwtXn5dKTxNT0Q+Ky8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKl8lP0ArXFwtXn5dKy9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gW2FsaWFzXWh0dHA6Ly9leGFtcGxlLmNvbVxuXHRcdFx0XHQnbGluay1yZWYnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXFtbXlxcXV0rXFxdXFxTKyQvbSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcWylbXlxcXV0rKD89XFxdKS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQndXJsJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXF0pXFxTKyQvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBcInRleHRcIjpodHRwOi8vZXhhbXBsZS5jb21cblx0XHRcdFx0Ly8gXCJ0ZXh0XCI6bGluay1yZWZcblx0XHRcdFx0J2xpbmsnOiB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC9cIjxNT0Q+KlteXCJdK1wiOi4rPyg/PVteXFx3L10/KD86XFxzfCQpKS8uc291cmNlKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0ZXh0Jzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlwiPE1PRD4qKVteXCJdKyg/PVwiKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlwiKTxNT0Q+Ky8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd1cmwnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oOikuKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1wiOl0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vICFpbWFnZS5qcGchXG5cdFx0XHRcdC8vICFpbWFnZS5qcGcoVGl0bGUpITpodHRwOi8vZXhhbXBsZS5jb21cblx0XHRcdFx0J2ltYWdlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvISg/OjxNT0Q+fDxQQVI+fFs8Pj1dKSooPyFbPD49XSlbXiFcXHMoKV0rKD86XFwoW14pXStcXCkpPyEoPzo6Lis/KD89W15cXHcvXT8oPzpcXHN8JCkpKT8vLnNvdXJjZSksXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnc291cmNlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheISg/OjxNT0Q+fDxQQVI+fFs8Pj1dKSopKD8hWzw+PV0pW14hXFxzKCldKyg/OlxcKFteKV0rXFwpKT8oPz0hKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICd1cmwnXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheISkoPzo8TU9EPnw8UEFSPnxbPD49XSkrLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3VybCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyg6KS4rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bITpdL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBGb290bm90ZVsxXVxuXHRcdFx0XHQnZm9vdG5vdGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYlxcW1xcZCtcXF0vLFxuXHRcdFx0XHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ1NTKENhc2NhZGluZyBTdHlsZSBTaGVldClcblx0XHRcdFx0J2Fjcm9ueW0nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYltBLVpcXGRdK1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdjb21tZW50Jzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcKClbXigpXSsoPz1cXCkpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBQcmlzbShDKVxuXHRcdFx0XHQnbWFyayc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFwoKD86Q3xSfFRNKVxcKS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0dmFyIHBocmFzZUluc2lkZSA9IHRleHRpbGVbJ3BocmFzZSddLmluc2lkZTtcblx0dmFyIG5lc3RlZFBhdHRlcm5zID0ge1xuXHRcdCdpbmxpbmUnOiBwaHJhc2VJbnNpZGVbJ2lubGluZSddLFxuXHRcdCdsaW5rJzogcGhyYXNlSW5zaWRlWydsaW5rJ10sXG5cdFx0J2ltYWdlJzogcGhyYXNlSW5zaWRlWydpbWFnZSddLFxuXHRcdCdmb290bm90ZSc6IHBocmFzZUluc2lkZVsnZm9vdG5vdGUnXSxcblx0XHQnYWNyb255bSc6IHBocmFzZUluc2lkZVsnYWNyb255bSddLFxuXHRcdCdtYXJrJzogcGhyYXNlSW5zaWRlWydtYXJrJ11cblx0fTtcblxuXHQvLyBPbmx5IGFsbG93IGFscGhhLW51bWVyaWMgSFRNTCB0YWdzLCBub3QgWE1MIHRhZ3Ncblx0dGV4dGlsZS50YWcucGF0dGVybiA9IC88XFwvPyg/IVxcZClbYS16MC05XSsoPzpcXHMrW15cXHM+XFwvPV0rKD86PSg/OihcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFteXFxzJ1wiPj1dKykpPykqXFxzKlxcLz8+L2k7XG5cblx0Ly8gQWxsb3cgc29tZSBuZXN0aW5nXG5cdHZhciBwaHJhc2VJbmxpbmVJbnNpZGUgPSBwaHJhc2VJbnNpZGVbJ2lubGluZSddLmluc2lkZTtcblx0cGhyYXNlSW5saW5lSW5zaWRlWydib2xkJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnaXRhbGljJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnaW5zZXJ0ZWQnXS5pbnNpZGUgPSBuZXN0ZWRQYXR0ZXJucztcblx0cGhyYXNlSW5saW5lSW5zaWRlWydkZWxldGVkJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnc3BhbiddLmluc2lkZSA9IG5lc3RlZFBhdHRlcm5zO1xuXG5cdC8vIEFsbG93IHNvbWUgc3R5bGVzIGluc2lkZSB0YWJsZSBjZWxsc1xuXHR2YXIgcGhyYXNlVGFibGVJbnNpZGUgPSBwaHJhc2VJbnNpZGVbJ3RhYmxlJ10uaW5zaWRlO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnaW5saW5lJ10gPSBuZXN0ZWRQYXR0ZXJuc1snaW5saW5lJ107XG5cdHBocmFzZVRhYmxlSW5zaWRlWydsaW5rJ10gPSBuZXN0ZWRQYXR0ZXJuc1snbGluayddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnaW1hZ2UnXSA9IG5lc3RlZFBhdHRlcm5zWydpbWFnZSddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnZm9vdG5vdGUnXSA9IG5lc3RlZFBhdHRlcm5zWydmb290bm90ZSddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnYWNyb255bSddID0gbmVzdGVkUGF0dGVybnNbJ2Fjcm9ueW0nXTtcblx0cGhyYXNlVGFibGVJbnNpZGVbJ21hcmsnXSA9IG5lc3RlZFBhdHRlcm5zWydtYXJrJ107XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXkgPSAvKD86W1xcdy1dK3wnW14nXFxuXFxyXSonfFwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIikvLnNvdXJjZTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICovXG5cdGZ1bmN0aW9uIGluc2VydEtleShwYXR0ZXJuKSB7XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5OyB9KTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy50b21sID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCd0YWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbnNlcnRLZXkoLyheW1xcdCBdKlxcW1xccyooPzpcXFtcXHMqKT8pX18oPzpcXHMqXFwuXFxzKl9fKSooPz1cXHMqXFxdKS8uc291cmNlKSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQna2V5Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKGluc2VydEtleSgvKF5bXFx0IF0qfFt7LF1cXHMqKV9fKD86XFxzKlxcLlxccypfXykqKD89XFxzKj0pLy5zb3VyY2UpLCAnbScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiXCJcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxdKSo/XCJcIlwifCcnJ1tcXHNcXFNdKj8nJyd8J1teJ1xcblxccl0qJ3xcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZGF0ZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gT2Zmc2V0IERhdGUtVGltZSwgTG9jYWwgRGF0ZS1UaW1lLCBMb2NhbCBEYXRlXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfSg/OltUXFxzXVxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkKyk/KD86WnxbKy1dXFxkezJ9OlxcZHsyfSk/KT9cXGIvaSxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBMb2NhbCBUaW1lXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspP1xcYi8sXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J251bWJlcic6IC8oPzpcXGIwKD86eFtcXGRhLXpBLVpdKyg/Ol9bXFxkYS16QS1aXSspKnxvWzAtN10rKD86X1swLTddKykqfGJbMTBdKyg/Ol9bMTBdKykqKSlcXGJ8Wy0rXT9cXGJcXGQrKD86X1xcZCspKig/OlxcLlxcZCsoPzpfXFxkKykqKT8oPzpbZUVdWystXT9cXGQrKD86X1xcZCspKik/XFxifFstK10/XFxiKD86aW5mfG5hbilcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWy4sPVtcXF17fV0vXG5cdH07XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHJlbW9yID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3woPzotLXxcXC9cXC98IykuKikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2ludGVycG9sYXRlZC1zdHJpbmcnOiBudWxsLCAvLyBzZWUgYmVsb3dcblx0XHQnZXh0cmFjdG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdypcXHwoPzpbXlxcclxcblxcXFx8XXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXFx8L2ksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3JlZ2V4Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnJlKVxcfFtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXlxcdysvLFxuXHRcdFx0XHQndmFsdWUnOiAvXFx8W1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2lkZW50aWZpZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYFteYF0qYC8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqKD86OjpcXHMqPHxcXCgpKVxcYi8sXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzphcmdzfGFzfGJ5fGNhc2V8Y29uZmlnfGNvbm5lY3R8Y29ubmVjdG9yfGNvbnN0fGNvcHl8Y3JlYXRlfGRlZmF1bHR8ZGVmaW5lfGRlcGxveXxkcm9wfGVhY2h8ZW1pdHxlbmR8ZXJhc2V8ZXZlbnR8Zmxvd3xmbnxmb3J8ZnJvbXxncm91cHxoYXZpbmd8aW5zZXJ0fGludG98aW50cmluc2ljfGxldHxsaW5rc3xtYXRjaHxtZXJnZXxtb2R8bW92ZXxvZnxvcGVyYXRvcnxwYXRjaHxwaXBlbGluZXxyZWN1cnxzY3JpcHR8c2VsZWN0fHNldHxzbGlkaW5nfHN0YXRlfHN0cmVhbXx0b3x0dW1ibGluZ3x1cGRhdGV8dXNlfHdoZW58d2hlcmV8d2luZG93fHdpdGgpXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxudWxsfHRydWUpXFxiL2ksXG5cblx0XHQnbnVtYmVyJzogL1xcYig/OjBiWzAxX10qfDB4WzAtOWEtZkEtRl9dKnxcXGRbXFxkX10qKD86XFwuXFxkW1xcZF9dKik/KD86W0VlXVsrLV0/W1xcZF9dKyk/KVxcYi8sXG5cblx0XHQncGF0dGVybi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8lKD89Wyh7W10pLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvWy0rKlxcLyV+IV5dPT98PVs9Pl0/fCZbJj1dP3xcXHxbfD1dP3w8PD89P3w+Pj8+Pz0/fCg/OmFic2VudHxhbmR8bm90fG9yfHByZXNlbnR8eG9yKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogLzo6fFs7XFxbXFxdKClcXHtcXH0sLjpdLyxcblx0fTtcblxuXHR2YXIgaW50ZXJwb2xhdGlvblBhdHRlcm4gPSAvI1xceyg/OlteXCJ7fV18XFx7W157fV0qXFx9fFwiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcIikqXFx9Ly5zb3VyY2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnRyZW1vclsnaW50ZXJwb2xhdGVkLXN0cmluZyddID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdC8oXnxbXlxcXFxdKS8uc291cmNlICtcblx0XHRcdCcoPzonICtcblx0XHRcdCdcIlwiXCIoPzonICsgL1teXCJcXFxcI118XFxcXFtcXHNcXFNdfFwiKD8hXCJcIil8Iyg/IVxceykvLnNvdXJjZSArICd8JyArIGludGVycG9sYXRpb25QYXR0ZXJuICsgJykqXCJcIlwiJyArXG5cdFx0XHQnfCcgK1xuXHRcdFx0J1wiKD86JyArIC9bXlwiXFxcXFxcclxcbiNdfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCMoPyFcXHspLy5zb3VyY2UgKyAnfCcgKyBpbnRlcnBvbGF0aW9uUGF0dGVybiArICcpKlwiJyArXG5cdFx0XHQnKSdcblx0XHQpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbnRlcnBvbGF0aW9uUGF0dGVybiksXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMudHJlbW9yXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy50cm95ID0gUHJpc20ubGFuZ3VhZ2VzWyd0cmVtb3InXTtcblx0UHJpc20ubGFuZ3VhZ2VzLnRyaWNrbGUgPSBQcmlzbS5sYW5ndWFnZXNbJ3RyZW1vciddO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy50d2lnID0ge1xuXHQnY29tbWVudCc6IC9eXFx7I1tcXHNcXFNdKj8jXFx9JC8sXG5cblx0J3RhZy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXlxceyUtP1xccyopXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdkZWxpbWl0ZXInOiB7XG5cdFx0cGF0dGVybjogL15cXHtbeyVdLT98LT9bJX1dXFx9JC8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWydcIl18WydcIl0kL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86ZXZlbnxpZnxvZGQpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bLStdP1xcZCspPy8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykoPzphbmR8Yi1hbmR8Yi1vcnxiLXhvcnxlbmRzIHdpdGh8aW58aXN8bWF0Y2hlc3xub3R8b3J8c2FtZSBhc3xzdGFydHMgd2l0aCkoPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC9bPTw+XT0/fCE9fFxcKlxcKj98XFwvXFwvP3xcXD86P3xbLSt+JXxdL1xuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde306LixdL1xufTtcblxuUHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdGlmIChlbnYubGFuZ3VhZ2UgIT09ICd0d2lnJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBwYXR0ZXJuID0gL1xceyg/OiNbXFxzXFxTXSo/I3wlW1xcc1xcU10qPyV8XFx7W1xcc1xcU10qP1xcfSlcXH0vZztcblx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ3R3aWcnLCBwYXR0ZXJuKTtcbn0pO1xuXG5QcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAndHdpZycpO1xufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5d29yZHMgPSAvXFxiKD86QUNUfEFDVElGU1VCfENBUlJBWXxDQVNFfENMRUFSR0lGfENPQXxDT0FfSU5UfENPTlNUQU5UU3xDT05URU5UfENVUnxFRElUUEFORUx8RUZGRUNUfEVYVHxGSUxFfEZMVUlEVEVNUExBVEV8Rk9STXxGUkFNRXxGUkFNRVNFVHxHSUZCVUlMREVSfEdNRU5VfEdNRU5VX0ZPTERPVVR8R01FTlVfTEFZRVJTfEdQfEhNRU5VfEhSVUxFUnxIVE1MfElFTlZ8SUZTVUJ8SU1BR0V8SU1HTUVOVXxJTUdNRU5VSVRFTXxJTUdURVhUfElNR19SRVNPVVJDRXxJTkNMVURFX1RZUE9TQ1JJUFR8SlNNRU5VfEpTTUVOVUlURU18TExMfExPQURfUkVHSVNURVJ8Tk98UEFHRXxSRUNPUkRTfFJFU1RPUkVfUkVHSVNURVJ8VEVNUExBVEV8VEVYVHxUTUVOVXxUTUVOVUlURU18VE1FTlVfTEFZRVJTfFVTRVJ8VVNFUl9JTlR8X0dJRkJVSUxERVJ8Z2xvYmFsfGdsb2JhbFN0cmluZ3xnbG9iYWxWYXIpXFxiLztcblxuXHRQcmlzbS5sYW5ndWFnZXMudHlwb3NjcmlwdCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gbXVsdGlsaW5lIGNvbW1lbnRzIC8qICovXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBkb3VibGUtc2xhc2ggY29tbWVudHMgLSBpZ25vcmVkIHdoZW4gYmFja3NsYXNoZXMgb3IgY29sb24gaXMgZm91bmQgaW4gZnJvbnRcblx0XHRcdFx0Ly8gYWxzbyBpZ25vcmVkIHdoZW5ldmVyIGRpcmVjdGx5IGFmdGVyIGFuIGVxdWFsLXNpZ24sIGJlY2F1c2UgaXQgd291bGQgcHJvYmFibHkgYmUgYW4gdXJsIHdpdGhvdXQgcHJvdG9jb2xcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXDo9IFxcdF18KD86XnxbXj0gXFx0XSlbIFxcdF0rKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBoYXNoIGNvbW1lbnRzIC0gaWdub3JlZCB3aGVuIGxlYWRpbmcgcXVvdGUgaXMgZm91bmQgZm9yIGhleCBjb2xvcnMgaW4gc3RyaW5nc1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cIiddKSMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvbGQgaW5jbHVkZSBzdHlsZVxuXHRcdFx0XHRwYXR0ZXJuOiAvPElOQ0xVREVfVFlQT1NDUklQVDpcXHMqc291cmNlXFxzKj1cXHMqKD86XCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonKVxccyo+Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwifCdbXidcXHJcXG5dKicvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvSU5DTFVERV9UWVBPU0NSSVBULyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gbmV3IGluY2x1ZGUgc3R5bGVcblx0XHRcdFx0cGF0dGVybjogL0BpbXBvcnRcXHMqKD86XCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdzdHJpbmcnOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbXj1dKj1bPCBdPykoPzooPyFcXF1cXG4pLikqLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL1xce1xcJC4qXFx9LywgLy8gY29uc3RhbnRzIGluY2x1ZGVcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J251bWJlcic6IC9eXFxkKyQvLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyx8Ol0vLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0Ly8gc3BlY2lhbCBoaWdobGlnaHRpbmcgZm9yIGluZGV4ZXMgb2YgYXJyYXlzIGluIHRhZ3Ncblx0XHRcdHBhdHRlcm46IC9cXGJcXGQrXFxzKlsuez1dLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvWy57PV0vLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3RhZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC4/Wy1cXHdcXFxcXStcXC4/Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuLyxcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46fF0vLFxuXHRcdCdvcGVyYXRvcic6IC9bPD5dPT98WyE9XT0/PT98LS0/fFxcK1xcKz98JiY/fFxcfFxcfD98Wz8qL35eJV0vLFxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy50c2NvbmZpZyA9IFByaXNtLmxhbmd1YWdlcy50eXBvc2NyaXB0O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy51bnJlYWxzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjYXRlZ29yeSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/Oig/OmF1dG9leHBhbmR8aGlkZXxzaG93KWNhdGVnb3JpZXN8dmFyKVxccypcXCgpW14oKV0rKD89XFwpKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J21ldGFkYXRhJzoge1xuXHRcdHBhdHRlcm46IC8oXFx3XFxzKik8XFxzKlxcdytcXHMqPVtePD58PVxcclxcbl0rKD86XFx8XFxzKlxcdytcXHMqPVtePD58PVxcclxcbl0rKSo+Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwcm9wZXJ0eSc6IC9cXGJcXHcrKD89XFxzKj0pLyxcblx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD58XS9cblx0XHR9XG5cdH0sXG5cdCdtYWNybyc6IHtcblx0XHRwYXR0ZXJuOiAvYFxcdysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZW51bXxleHRlbmRzfGludGVyZmFjZXxzdGF0ZSg/OlxcKFxcKSk/fHN0cnVjdHx3aXRoaW4pXFxzKylcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YWN0b3J8YXJyYXl8YXV0b3xhdXRvZXhwYW5kY2F0ZWdvcmllc3xib29sfGJyZWFrfGJ5dGV8Y2FzZXxjbGFzc3xjbGFzc2dyb3VwfGNsaWVudHxjb2VyY2V8Y29sbGFwc2VjYXRlZ29yaWVzfGNvbmZpZ3xjb25zdHxjb250aW51ZXxkZWZhdWx0fGRlZmF1bHRwcm9wZXJ0aWVzfGRlbGVnYXRlfGRlcGVuZHNvbnxkZXByZWNhdGVkfGRvfGRvbnRjb2xsYXBzZWNhdGVnb3JpZXN8ZWRpdGNvbnN0fGVkaXRpbmxpbmVuZXd8ZWxzZXxlbnVtfGV2ZW50fGV4ZWN8ZXhwb3J0fGV4dGVuZHN8ZmluYWx8ZmxvYXR8Zm9yfGZvcmNlc2NyaXB0b3JkZXJ8Zm9yZWFjaHxmdW5jdGlvbnxnb3RvfGd1aWR8aGlkZWNhdGVnb3JpZXN8aGlkZWRyb3Bkb3dufGlmfGlnbm9yZXN8aW1wbGVtZW50c3xpbmhlcml0c3xpbnB1dHxpbnR8aW50ZXJmYWNlfGl0ZXJhdG9yfGxhdGVudHxsb2NhbHxtYXRlcmlhbHxuYW1lfG5hdGl2ZXxuYXRpdmVyZXBsaWNhdGlvbnxub2V4cG9ydHxub250cmFuc2llbnR8bm90ZWRpdGlubGluZW5ld3xub3RwbGFjZWFibGV8b3BlcmF0b3J8b3B0aW9uYWx8b3V0fHBhd258cGVyb2JqZWN0Y29uZmlnfHBlcm9iamVjdGxvY2FsaXplZHxwbGFjZWFibGV8cG9zdG9wZXJhdG9yfHByZW9wZXJhdG9yfHByaXZhdGV8cHJvdGVjdGVkfHJlbGlhYmxlfHJlcGxpY2F0aW9ufHJldHVybnxzZXJ2ZXJ8c2hvd2NhdGVnb3JpZXN8c2ltdWxhdGVkfHNpbmd1bGFyfHN0YXRlfHN0YXRpY3xzdHJpbmd8c3RydWN0fHN0cnVjdGRlZmF1bHR8c3RydWN0ZGVmYXVsdHByb3BlcnRpZXN8c3dpdGNofHRleHR1cmV8dHJhbnNpZW50fHRyYXZlbHx1bnJlbGlhYmxlfHVudGlsfHZhcnx2ZWN0b3J8d2hpbGV8d2l0aGluKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLFxuXHQvLyBodHRwczovL2RvY3MudW5yZWFsZW5naW5lLmNvbS91ZGsvVGhyZWUvVW5yZWFsU2NyaXB0RXhwcmVzc2lvbnMuaHRtbFxuXHQnb3BlcmF0b3InOiAvPj58PDx8LS18XFwrXFwrfFxcKlxcKnxbLSsqL34hPTw+JEBdPT98JiY/fFxcfFxcfD98XFxeXFxeP3xbPzolXXxcXGIoPzpDbG9ja3dpc2VGcm9tfENyb3NzfERvdClcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9OywuXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy51YyA9IFByaXNtLmxhbmd1YWdlcy51c2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLnVucmVhbHNjcmlwdDtcblxuUHJpc20ubGFuZ3VhZ2VzLnVvcmF6b3IgPSB7XG5cdCdjb21tZW50LWhhc2gnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NvbW1lbnQtc2xhc2gnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWydcIl18WydcIl0kL1xuXHRcdH0sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzb3VyY2UtbGF5ZXJzJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphcm1zfGJhY2twYWNrfGJsdWV8YnJhY2VsZXR8Y2FuY2VsfGNsZWFyfGNsb2FrfGNyaW1pbmFsfGVhcnJpbmdzfGVuZW15fGZhY2lhbGhhaXJ8ZnJpZW5kfGZyaWVuZGx5fGdsb3Zlc3xncmF5fGdyZXl8Z3JvdW5kfGhhaXJ8aGVhZHxpbm5lcmxlZ3N8aW5uZXJ0b3Jzb3xpbm5vY2VudHxsZWZ0aGFuZHxtaWRkbGV0b3Jzb3xtdXJkZXJlcnxuZWNrfG5vbmZyaWVuZGx5fG9uZWhhbmRlZHNlY29uZGFyeXxvdXRlcmxlZ3N8b3V0ZXJ0b3Jzb3xwYW50c3xyZWR8cmlnaHRoYW5kfHJpbmd8c2VsZnxzaGlydHxzaG9lc3x0YWxpc21hbnx3YWlzdClcXGIvaSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnc291cmNlLWNvbW1hbmRzJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphbGxpYW5jZXxhdHRhY2t8Y2FzdHxjbGVhcmFsbHxjbGVhcmlnbm9yZXxjbGVhcmpvdXJuYWx8Y2xlYXJsaXN0fGNsZWFyc3lzbXNnfGNyZWF0ZWxpc3R8Y3JlYXRldGltZXJ8ZGNsaWNrfGRjbGlja3R5cGV8ZGNsaWNrdmFyfGRyZXNzfGRyZXNzY29uZmlnfGRyb3B8ZHJvcHJlbGxvY3xlbW90ZXxnZXRsYWJlbHxndWlsZHxndW1wY2xvc2V8Z3VtcHJlc3BvbnNlfGhvdGtleXxpZ25vcmV8bGFzdHRhcmdldHxsaWZ0fGxpZnR0eXBlfG1lbnV8bWVudXJlc3BvbnNlfG1zZ3xvcmd8b3JnYW5pemV8b3JnYW5pemVyfG92ZXJoZWFkfHBhdXNlfHBvcGxpc3R8cG90aW9ufHByb21wdHJlc3BvbnNlfHB1c2hsaXN0fHJlbW92ZWxpc3R8cmVtb3ZldGltZXJ8cmVuYW1lfHJlc3RvY2t8c2F5fHNjYXZ8c2NhdmVuZ2VyfHNjcmlwdHxzZXRhYmlsaXR5fHNldGxhc3R0YXJnZXR8c2V0c2tpbGx8c2V0dGltZXJ8c2V0dmFyfHN5c21zZ3x0YXJnZXR8dGFyZ2V0bG9jfHRhcmdldHJlbGxvY3x0YXJnZXR0eXBlfHVuZHJlc3N8dW5pZ25vcmV8dW5zZXR2YXJ8dXNlb2JqZWN0fHVzZW9uY2V8dXNlc2tpbGx8dXNldHlwZXx2aXJ0dWV8d2FpdHx3YWl0Zm9yZ3VtcHx3YWl0Zm9ybWVudXx3YWl0Zm9ycHJvbXB0fHdhaXRmb3JzdGF0fHdhaXRmb3JzeXNtc2d8d2FpdGZvcnRhcmdldHx3YWxrfHdmc3lzbXNnfHdmdHx3aGlzcGVyfHllbGwpXFxiLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQndGFnLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyheXFx7JS0/XFxzKilcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2RlbGltaXRlcic6IHtcblx0XHRwYXR0ZXJuOiAvXlxce1t7JV0tP3wtP1slfV1cXH0kLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86YXRsaXN0fGNsb3NlfGNsb3Nlc3R8Y291bnR8Y291bnRlcnxjb3VudHR5cGV8ZGVhZHxkZXh8ZGlmZmhpdHN8ZGlmZm1hbmF8ZGlmZnN0YW18ZGlmZndlaWdodHxmaW5kfGZpbmRidWZmfGZpbmRkZWJ1ZmZ8ZmluZGxheWVyfGZpbmR0eXBlfGZpbmR0eXBlbGlzdHxmb2xsb3dlcnN8Z3VtcGV4aXN0c3xoaWRkZW58aGl0c3xocHxodWV8aHVtYW58aHVtYW5vaWR8aW5ndW1wfGlubGlzdHxpbnN5c21lc3NhZ2V8aW5zeXNtc2d8aW50fGludnVsfGxoYW5kZW1wdHl8bGlzdHxsaXN0ZXhpc3RzfG1hbmF8bWF4aGl0c3xtYXhocHxtYXhtYW5hfG1heHN0YW18bWF4d2VpZ2h0fG1vbnN0ZXJ8bW91bnRlZHxuYW1lfG5leHR8bm90b3xwYXJhbHl6ZWR8cG9pc29uZWR8cG9zaXRpb258cHJldnxwcmV2aW91c3xxdWV1ZWR8cmFuZHxyYW5kb218cmhhbmRlbXB0eXxza2lsbHxzdGFtfHN0cnx0YXJnZXRleGlzdHN8dGltZXJ8dGltZXJleGlzdHN8dmFyZXhpc3R8d2FybW9kZXx3ZWlnaHQpXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGJyZWFrfGNvbnRpbnVlfGVsc2V8ZWxzZWlmfGVuZGZvcnxlbmRpZnxlbmR3aGlsZXxmb3J8aWZ8bG9vcHxub3R8b3J8cmVwbGF5fHN0b3B8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bLStdP1xcZCspPy8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykoPzphbmR8Yi1hbmR8Yi1vcnxiLXhvcnxlbmRzIHdpdGh8aW58aXN8bWF0Y2hlc3xub3R8b3J8c2FtZSBhc3xzdGFydHMgd2l0aCkoPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC9bPTw+XT0/fCE9fFxcKlxcKj98XFwvXFwvP3xcXD86P3xbLSt+JXxdL1xuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde306LixdL1xufTtcblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuXG5QcmlzbS5sYW5ndWFnZXMudXJpID0ge1xuXHQnc2NoZW1lJzoge1xuXHRcdHBhdHRlcm46IC9eW2Etel1bYS16MC05Ky4tXSo6L2ltLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzY2hlbWUtZGVsaW1pdGVyJzogLzokL1xuXHRcdH1cblx0fSxcblx0J2ZyYWdtZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jW1xcd1xcLS5+ISQmJygpKissOz0lOkAvP10qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmcmFnbWVudC1kZWxpbWl0ZXInOiAvXiMvXG5cdFx0fVxuXHR9LFxuXHQncXVlcnknOiB7XG5cdFx0cGF0dGVybjogL1xcP1tcXHdcXC0ufiEkJicoKSorLDs9JTpALz9dKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncXVlcnktZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcPy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwYWlyLWRlbGltaXRlcic6IC9bJjtdLyxcblx0XHRcdCdwYWlyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXltePV1bXFxzXFxTXSovLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5JzogL15bXj1dKy8sXG5cdFx0XHRcdFx0J3ZhbHVlJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhePSlbXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2F1dGhvcml0eSc6IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHQvXlxcL1xcLy8uc291cmNlXG5cdFx0XHQvLyBbIHVzZXJpbmZvIFwiQFwiIF1cblx0XHRcdCsgLyg/OltcXHdcXC0ufiEkJicoKSorLDs9JTpdKkApPy8uc291cmNlXG5cdFx0XHQvLyBob3N0XG5cdFx0XHQrIChcblx0XHRcdFx0Jyg/Oidcblx0XHRcdFx0Ly8gSVAtbGl0ZXJhbFxuXHRcdFx0XHQrIC9cXFsoPzpbMC05YS1mQS1GOi5dezIsNDh9fHZbMC05YS1mQS1GXStcXC5bXFx3XFwtLn4hJCYnKCkqKyw7PV0rKVxcXS8uc291cmNlXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdC8vIElQdjRhZGRyZXNzIG9yIHJlZ2lzdGVyZWQgbmFtZVxuXHRcdFx0XHQrIC9bXFx3XFwtLn4hJCYnKCkqKyw7PSVdKi8uc291cmNlXG5cdFx0XHRcdCsgJyknXG5cdFx0XHQpXG5cdFx0XHQvLyBbIFwiOlwiIHBvcnQgXVxuXHRcdFx0KyAvKD86OlxcZCopPy8uc291cmNlLFxuXHRcdFx0J20nXG5cdFx0KSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhdXRob3JpdHktZGVsaW1pdGVyJzogL15cXC9cXC8vLFxuXHRcdFx0J3VzZXItaW5mby1zZWdtZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXltcXHdcXC0ufiEkJicoKSorLDs9JTpdKkAvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndXNlci1pbmZvLWRlbGltaXRlcic6IC9AJC8sXG5cdFx0XHRcdFx0J3VzZXItaW5mbyc6IC9eW1xcd1xcLS5+ISQmJygpKissOz0lOl0rL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3BvcnQtc2VnbWVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogLzpcXGQqJC8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwb3J0LWRlbGltaXRlcic6IC9eOi8sXG5cdFx0XHRcdFx0J3BvcnQnOiAvXlxcZCsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnaG9zdCc6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpcC1saXRlcmFsJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXFtbXFxzXFxTXStcXF0kLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnaXAtbGl0ZXJhbC1kZWxpbWl0ZXInOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0XHRcdFx0J2lwdi1mdXR1cmUnOiAvXnZbXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0XHQnaXB2Ni1hZGRyZXNzJzogL15bXFxzXFxTXSsvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnaXB2NC1hZGRyZXNzJzogL14oPzooPzpbMDMtOV1cXGQ/fFsxMl1cXGR7MCwyfSlcXC4pezN9KD86WzAzLTldXFxkP3xbMTJdXFxkezAsMn0pJC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3BhdGgnOiB7XG5cdFx0cGF0dGVybjogL15bXFx3XFwtLn4hJCYnKCkqKyw7PSU6QC9dKy9tLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3BhdGgtc2VwYXJhdG9yJzogL1xcLy9cblx0XHR9XG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy51cmwgPSBQcmlzbS5sYW5ndWFnZXMudXJpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBpbnRlcnBvbGF0aW9uRXhwciA9IHtcblx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRpbnNpZGU6IG51bGxcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMudiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvcj8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0XHRhbGlhczogJ3F1b3RlZC1zdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCQoPzpcXHtbXnt9XSpcXH18XFx3Kyg/OlxcLlxcdysoPzpcXChbXlxcKFxcKV0qXFwpKT98XFxbW15cXFtcXF1dK1xcXSkqKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcd1tcXHNcXFNdKiQvLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxce3xcXH0kLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1leHByZXNzaW9uJzogaW50ZXJwb2xhdGlvbkV4cHJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfGludGVyZmFjZXxzdHJ1Y3R8dHlwZSlcXHMrKSg/OkNcXC4pP1xcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvKD86XFxiKD86X19nbG9iYWx8YXN8YXNtfGFzc2VydHxhdG9taWN8YnJlYWt8Y2hhbnxjb25zdHxjb250aW51ZXxkZWZlcnxlbHNlfGVtYmVkfGVudW18Zm58Zm9yfGdvKD86dG8pP3xpZnxpbXBvcnR8aW58aW50ZXJmYWNlfGlzfGxvY2t8bWF0Y2h8bW9kdWxlfG11dHxub25lfG9yfHB1YnxyZXR1cm58cmxvY2t8c2VsZWN0fHNoYXJlZHxzaXplb2Z8c3RhdGljfHN0cnVjdHx0eXBlKD86b2YpP3x1bmlvbnx1bnNhZmUpfFxcJCg/OmVsc2V8Zm9yfGlmKXwjKD86ZmxhZ3xpbmNsdWRlKSlcXGIvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mXFxkXSsoPzpfW2EtZlxcZF0rKSp8MGJbMDFdKyg/Ol9bMDFdKykqfDBvWzAtN10rKD86X1swLTddKykqfFxcZCsoPzpfXFxkKykqKD86XFwuXFxkKyg/Ol9cXGQrKSopPylcXGIvaSxcblx0XHQnb3BlcmF0b3InOiAvfnxcXD98WypcXC8lXiE9XT0/fFxcK1s9K10/fC1bPS1dP3xcXHxbPXxdP3wmKD86PXwmfFxcXj0/KT98Pig/Oj49P3w9KT98PCg/Ojw9P3w9fC0pP3w6PXxcXC5cXC5cXC4/Lyxcblx0XHQnYnVpbHRpbic6IC9cXGIoPzphbnkoPzpfZmxvYXR8X2ludCk/fGJvb2x8Ynl0ZSg/OnB0cik/fGNoYXJwdHJ8Zig/OjMyfDY0KXxpKD86OHwxNnw2NHwxMjh8bnQpfHJ1bmV8c2l6ZV90fHN0cmluZ3x1KD86MTZ8MzJ8NjR8MTI4KXx2b2lkcHRyKVxcYi9cblx0fSk7XG5cblx0aW50ZXJwb2xhdGlvbkV4cHIuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnY7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndicsICdzdHJpbmcnLCB7XG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYCg/OlxcXFxgfFxcXFw/W15gXXsxLDJ9KWAvLCAvLyB1c2luZyB7MSwyfSBpbnN0ZWFkIG9mIGB1YCBmbGFnIGZvciBjb21wYXRpYmlsaXR5XG5cdFx0XHRhbGlhczogJ3J1bmUnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd2JywgJ29wZXJhdG9yJywge1xuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKVxcWyg/OmRlcHJlY2F0ZWR8ZGlyZWN0X2FycmF5X2FjY2Vzc3xmbGFnfGlubGluZXxsaXZlfHJlZl9vbmx5fHR5cGVkZWZ8dW5zYWZlX2ZufHdpbmRvd3Nfc3RkY2FsbClcXF0vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Fubm90YXRpb24nLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdXS8sXG5cdFx0XHRcdCdrZXl3b3JkJzogL1xcdysvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZ2VuZXJpYyc6IHtcblx0XHRcdHBhdHRlcm46IC88XFx3Kz4oPz1cXHMqW1xcKVxce10pLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+XS8sXG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogL1xcdysvXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd2JywgJ2Z1bmN0aW9uJywge1xuXHRcdCdnZW5lcmljLWZ1bmN0aW9uJzoge1xuXHRcdFx0Ly8gZS5nLiBmb288VD4oIC4uLlxuXHRcdFx0cGF0dGVybjogL1xcYlxcdytcXHMqPFxcdys+KD89XFwoKS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL15cXHcrLyxcblx0XHRcdFx0J2dlbmVyaWMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLzxcXHcrPi8sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMudi5nZW5lcmljLmluc2lkZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnZhbGEgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0Ly8gQ2xhc3NlcyBjb3BpZWQgZnJvbSBwcmlzbS1jc2hhcnBcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gKEZvbyBiYXIsIEJhciBiYXopXG5cdFx0XHRwYXR0ZXJuOiAvXFxiW0EtWl1cXHcqKD86XFwuXFx3KykqXFxiKD89KD86XFw/XFxzK3xcXCo/XFxzK1xcKj8pXFx3KS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cHVuY3R1YXRpb246IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBbRm9vXVxuXHRcdFx0cGF0dGVybjogLyhcXFspW0EtWl1cXHcqKD86XFwuXFx3KykqXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cHVuY3R1YXRpb246IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBjbGFzcyBGb28gOiBCYXJcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8aW50ZXJmYWNlKVxccytbQS1aXVxcdyooPzpcXC5cXHcrKSpcXHMqOlxccyopW0EtWl1cXHcqKD86XFwuXFx3KykqXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cHVuY3R1YXRpb246IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBjbGFzcyBGb29cblx0XHRcdHBhdHRlcm46IC8oKD86XFxiKD86Y2xhc3N8ZW51bXxpbnRlcmZhY2V8bmV3fHN0cnVjdClcXHMrKXwoPzpjYXRjaFxccytcXCgpKVtBLVpdXFx3Kig/OlxcLlxcdyspKlxcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YXN8YXNzZXJ0fGFzeW5jfGJhc2V8Ym9vbHxicmVha3xjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29uc3RydWN0fGNvbnRpbnVlfGRlZmF1bHR8ZGVsZWdhdGV8ZGVsZXRlfGRvfGRvdWJsZXxkeW5hbWljfGVsc2V8ZW5zdXJlc3xlbnVtfGVycm9yZG9tYWlufGV4dGVybnxmaW5hbGx5fGZsb2F0fGZvcnxmb3JlYWNofGdldHxpZnxpbnxpbmxpbmV8aW50fGludDE2fGludDMyfGludDY0fGludDh8aW50ZXJmYWNlfGludGVybmFsfGlzfGxvY2t8bG9uZ3xuYW1lc3BhY2V8bmV3fG51bGx8b3V0fG92ZXJyaWRlfG93bmVkfHBhcmFtc3xwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVmfHJlcXVpcmVzfHJldHVybnxzZXR8c2hvcnR8c2lnbmFsfHNpemVvZnxzaXplX3R8c3NpemVfdHxzdGF0aWN8c3RyaW5nfHN0cnVjdHxzd2l0Y2h8dGhpc3x0aHJvd3x0aHJvd3N8dHJ5fHR5cGVvZnx1Y2hhcnx1aW50fHVpbnQxNnx1aW50MzJ8dWludDY0fHVpbnQ4fHVsb25nfHVuaWNoYXJ8dW5vd25lZHx1c2hvcnR8dXNpbmd8dmFsdWV8dmFyfHZpcnR1YWx8dm9pZHx2b2xhdGlsZXx3ZWFrfHdoaWxlfHlpZWxkKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxccypcXCgpLyxcblx0J251bWJlcic6IC8oPzpcXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KSg/OmZ8dT9sPyk/L2ksXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18JiZ8XFx8XFx8fDw8PT98Pj49P3w9PnwtPnx+fFsrXFwtKlxcLyUmXnw9ITw+XT0/fFxcP1xcPz98XFwuXFwuXFwuLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdLyxcblx0J2NvbnN0YW50JzogL1xcYltBLVowLTlfXStcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndmFsYScsICdzdHJpbmcnLCB7XG5cdCdyYXctc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCd0ZW1wbGF0ZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL0BcIltcXHNcXFNdKj9cIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpcXChbXildKlxcKXxbYS16QS1aXVxcdyopLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFwoP3xcXCkkLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMudmFsYVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndmFsYScsICdrZXl3b3JkJywge1xuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogL1xcLyg/OlxcWyg/OlteXFxdXFxcXFxcclxcbl18XFxcXC4pKlxcXXxcXFxcLnxbXi9cXFxcXFxbXFxyXFxuXSkrXFwvW2ltc3hdezAsNH0oPz1cXHMqKD86JHxbXFxyXFxuLC47fSlcXF1dKSkvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyZWdleC1zb3VyY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFxcLylbXFxzXFxTXSsoPz1cXC9bYS16XSokKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcmVnZXgnLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5yZWdleFxuXHRcdFx0fSxcblx0XHRcdCdyZWdleC1kZWxpbWl0ZXInOiAvXlxcLy8sXG5cdFx0XHQncmVnZXgtZmxhZ3MnOiAvXlthLXpdKyQvLFxuXHRcdH1cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnZlbG9jaXR5ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xuXG5cdHZhciB2ZWxvY2l0eSA9IHtcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSg/OlxcXFxcXFxcKSopXFwkIT8oPzpbYS16XVtcXHctXSooPzpcXChbXildKlxcKSk/KD86XFwuW2Etel1bXFx3LV0qKD86XFwoW14pXSpcXCkpP3xcXFtbXlxcXV0rXFxdKSp8XFx7W159XStcXH0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7fSAvLyBTZWUgYmVsb3dcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcInwnW14nXSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1s9ITw+XT0/fFsrKi8lLV18JiZ8XFx8XFx8fFxcLlxcLnxcXGIoPzplcXxnW2V0XXxsW2V0XXxuKD86ZXxvdCkpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdOiwuXS9cblx0fTtcblxuXHR2ZWxvY2l0eS52YXJpYWJsZS5pbnNpZGUgPSB7XG5cdFx0J3N0cmluZyc6IHZlbG9jaXR5WydzdHJpbmcnXSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFteXFx3LV0pW2Etel1bXFx3LV0qKD89XFwoKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogdmVsb2NpdHlbJ251bWJlciddLFxuXHRcdCdib29sZWFuJzogdmVsb2NpdHlbJ2Jvb2xlYW4nXSxcblx0XHQncHVuY3R1YXRpb24nOiB2ZWxvY2l0eVsncHVuY3R1YXRpb24nXVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3ZlbG9jaXR5JywgJ2NvbW1lbnQnLCB7XG5cdFx0J3VucGFyc2VkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pI1xcW1xcW1tcXHNcXFNdKj9cXF1cXF0jLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14jXFxbXFxbfFxcXVxcXSMkL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ZlbG9jaXR5LWNvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSNcXCpbXFxzXFxTXSo/XFwqIy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIyMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKD86XFxcXFxcXFwpKikjQD8oPzpbYS16XVtcXHctXSp8XFx7W2Etel1bXFx3LV0qXFx9KSg/OlxccypcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSk/L2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eI0A/KD86W2Etel1bXFx3LV0qfFxce1thLXpdW1xcdy1dKlxcfSl8XFxiaW5cXGIvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXN0OiB2ZWxvY2l0eVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogdmVsb2NpdHlbJ3ZhcmlhYmxlJ11cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnZlbG9jaXR5Wyd0YWcnXS5pbnNpZGVbJ2F0dHItdmFsdWUnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy52ZWxvY2l0eTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudmVyaWxvZyA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2VybmVsLWZ1bmN0aW9uJzoge1xuXHRcdC8vIHN1cHBvcnQgZm9yIGFueSBrZXJuZWwgZnVuY3Rpb24gKGV4OiAkZGlzcGxheSgpKVxuXHRcdHBhdHRlcm46IC9cXEJcXCRcXHcrXFxiLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQvLyBzdXBwb3J0IGZvciB1c2VyIGRlZmluZWQgY29uc3RhbnRzIChleDogYGRlZmluZSlcblx0J2NvbnN0YW50JzogL1xcQmBcXHcrXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0Ly8gc3VwcG9ydCBmb3IgdmVyaWxvZyBhbmQgc3lzdGVtIHZlcmlsb2cga2V5d29yZHNcblx0J2tleXdvcmQnOiAvXFxiKD86YWxpYXN8YW5kfGFzc2VydHxhc3NpZ258YXNzdW1lfGF1dG9tYXRpY3xiZWZvcmV8YmVnaW58YmluZHxiaW5zfGJpbnNvZnxiaXR8YnJlYWt8YnVmfGJ1ZmlmMHxidWZpZjF8Ynl0ZXxjYXNlfGNhc2V4fGNhc2V6fGNlbGx8Y2hhbmRsZXxjbGFzc3xjbG9ja2luZ3xjbW9zfGNvbmZpZ3xjb25zdHxjb25zdHJhaW50fGNvbnRleHR8Y29udGludWV8Y292ZXJ8Y292ZXJncm91cHxjb3ZlcnBvaW50fGNyb3NzfGRlYXNzaWdufGRlZmF1bHR8ZGVmcGFyYW18ZGVzaWdufGRpc2FibGV8ZGlzdHxkb3xlZGdlfGVsc2V8ZW5kfGVuZGNhc2V8ZW5kY2xhc3N8ZW5kY2xvY2tpbmd8ZW5kY29uZmlnfGVuZGZ1bmN0aW9ufGVuZGdlbmVyYXRlfGVuZGdyb3VwfGVuZGludGVyZmFjZXxlbmRtb2R1bGV8ZW5kcGFja2FnZXxlbmRwcmltaXRpdmV8ZW5kcHJvZ3JhbXxlbmRwcm9wZXJ0eXxlbmRzZXF1ZW5jZXxlbmRzcGVjaWZ5fGVuZHRhYmxlfGVuZHRhc2t8ZW51bXxldmVudHxleHBlY3R8ZXhwb3J0fGV4dGVuZHN8ZXh0ZXJufGZpbmFsfGZpcnN0X21hdGNofGZvcnxmb3JjZXxmb3JlYWNofGZvcmV2ZXJ8Zm9ya3xmb3Jram9pbnxmdW5jdGlvbnxnZW5lcmF0ZXxnZW52YXJ8aGlnaHowfGhpZ2h6MXxpZnxpZmZ8aWZub25lfGlnbm9yZV9iaW5zfGlsbGVnYWxfYmluc3xpbXBvcnR8aW5jZGlyfGluY2x1ZGV8aW5pdGlhbHxpbm91dHxpbnB1dHxpbnNpZGV8aW5zdGFuY2V8aW50fGludGVnZXJ8aW50ZXJmYWNlfGludGVyc2VjdHxqb2lufGpvaW5fYW55fGpvaW5fbm9uZXxsYXJnZXxsaWJsaXN0fGxpYnJhcnl8bG9jYWx8bG9jYWxwYXJhbXxsb2dpY3xsb25naW50fG1hY3JvbW9kdWxlfG1hdGNoZXN8bWVkaXVtfG1vZHBvcnR8bW9kdWxlfG5hbmR8bmVnZWRnZXxuZXd8bm1vc3xub3J8bm9zaG93Y2FuY2VsbGVkfG5vdHxub3RpZjB8bm90aWYxfG51bGx8b3J8b3V0cHV0fHBhY2thZ2V8cGFja2VkfHBhcmFtZXRlcnxwbW9zfHBvc2VkZ2V8cHJpbWl0aXZlfHByaW9yaXR5fHByb2dyYW18cHJvcGVydHl8cHJvdGVjdGVkfHB1bGwwfHB1bGwxfHB1bGxkb3dufHB1bGx1cHxwdWxzZXN0eWxlX29uZGV0ZWN0fHB1bHNlc3R5bGVfb25ldmVudHxwdXJlfHJhbmR8cmFuZGN8cmFuZGNhc2V8cmFuZHNlcXVlbmNlfHJjbW9zfHJlYWx8cmVhbHRpbWV8cmVmfHJlZ3xyZWxlYXNlfHJlcGVhdHxyZXR1cm58cm5tb3N8cnBtb3N8cnRyYW58cnRyYW5pZjB8cnRyYW5pZjF8c2NhbGFyZWR8c2VxdWVuY2V8c2hvcnRpbnR8c2hvcnRyZWFsfHNob3djYW5jZWxsZWR8c2lnbmVkfHNtYWxsfHNvbHZlfHNwZWNpZnl8c3BlY3BhcmFtfHN0YXRpY3xzdHJpbmd8c3Ryb25nMHxzdHJvbmcxfHN0cnVjdHxzdXBlcnxzdXBwbHkwfHN1cHBseTF8dGFibGV8dGFnZ2VkfHRhc2t8dGhpc3x0aHJvdWdob3V0fHRpbWV8dGltZXByZWNpc2lvbnx0aW1ldW5pdHx0cmFufHRyYW5pZjB8dHJhbmlmMXx0cml8dHJpMHx0cmkxfHRyaWFuZHx0cmlvcnx0cmlyZWd8dHlwZXx0eXBlZGVmfHVuaW9ufHVuaXF1ZXx1bnNpZ25lZHx1c2V8dXdpcmV8dmFyfHZlY3RvcmVkfHZpcnR1YWx8dm9pZHx3YWl0fHdhaXRfb3JkZXJ8d2FuZHx3ZWFrMHx3ZWFrMXx3aGlsZXx3aWxkY2FyZHx3aXJlfHdpdGh8d2l0aGlufHdvcnx4bm9yfHhvcilcXGIvLFxuXHQvLyBib2xkIGhpZ2hsaWdodGluZyBmb3IgYWxsIHZlcmlsb2cgYW5kIHN5c3RlbSB2ZXJpbG9nIGxvZ2ljIGJsb2Nrc1xuXHQnaW1wb3J0YW50JzogL1xcYig/OmFsd2F5c3xhbHdheXNfY29tYnxhbHdheXNfZmZ8YWx3YXlzX2xhdGNoKVxcYig/OiAqQCk/Lyxcblx0Ly8gc3VwcG9ydCBmb3IgdGltZSB0aWNrcywgdmVjdG9ycywgYW5kIHJlYWwgbnVtYmVyc1xuXHQnbnVtYmVyJzogL1xcQiMjP1xcZCt8KD86XFxiXFxkKyk/J1tvZGJoXSA/W1xcZGEtZnp4Xz9dK3xcXGIoPzpcXGQqWy5fXSk/XFxkKyg/OmVbLStdP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvWy0re31efiUqXFwvPz0hPD4mfF0rLyxcblx0J3B1bmN0dWF0aW9uJzogL1tbXFxdOygpLC46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy52aGRsID0ge1xuXHQnY29tbWVudCc6IC8tLS4rLyxcblx0Ly8gc3VwcG9ydCBmb3IgYWxsIGxvZ2ljIHZlY3RvcnNcblx0J3ZoZGwtdmVjdG9ycyc6IHtcblx0XHQncGF0dGVybic6IC9cXGJbb3hiXVwiW1xcZGEtZl9dK1wifFwiWzAxdXh6d2xoLV0rXCIvaSxcblx0XHQnYWxpYXMnOiAnbnVtYmVyJ1xuXHR9LFxuXHQvLyBzdXBwb3J0IGZvciBvcGVyYXRvciBvdmVybG9hZGluZyBpbmNsdWRlZFxuXHQncXVvdGVkLWZ1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cIlxcUys/XCIoPz1cXCgpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnc3RyaW5nJzogL1wiKD86W15cXFxcXCJcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcIi8sXG5cdCdhdHRyaWJ1dGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYidcXHcrLyxcblx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0fSxcblx0Ly8gc3VwcG9ydCBmb3IgcHJlZGVmaW5lZCBhdHRyaWJ1dGVzIGluY2x1ZGVkXG5cdCdrZXl3b3JkJzogL1xcYig/OmFjY2Vzc3xhZnRlcnxhbGlhc3xhbGx8YXJjaGl0ZWN0dXJlfGFycmF5fGFzc2VydHxhdHRyaWJ1dGV8YmVnaW58YmxvY2t8Ym9keXxidWZmZXJ8YnVzfGNhc2V8Y29tcG9uZW50fGNvbmZpZ3VyYXRpb258Y29uc3RhbnR8ZGlzY29ubmVjdHxkb3dudG98ZWxzZXxlbHNpZnxlbmR8ZW50aXR5fGV4aXR8ZmlsZXxmb3J8ZnVuY3Rpb258Z2VuZXJhdGV8Z2VuZXJpY3xncm91cHxndWFyZGVkfGlmfGltcHVyZXxpbnxpbmVydGlhbHxpbm91dHxpc3xsYWJlbHxsaWJyYXJ5fGxpbmthZ2V8bGl0ZXJhbHxsb29wfG1hcHxuZXd8bmV4dHxudWxsfG9mfG9ufG9wZW58b3RoZXJzfG91dHxwYWNrYWdlfHBvcnR8cG9zdHBvbmVkfHByaXZhdGV8cHJvY2VkdXJlfHByb2Nlc3N8cHVyZXxyYW5nZXxyZWNvcmR8cmVnaXN0ZXJ8cmVqZWN0fHJlcG9ydHxyZXR1cm58c2VsZWN0fHNldmVyaXR5fHNoYXJlZHxzaWduYWx8c3VidHlwZXx0aGVufHRvfHRyYW5zcG9ydHx0eXBlfHVuYWZmZWN0ZWR8dW5pdHN8dW50aWx8dXNlfHZhcmlhYmxlfHZpZXd8d2FpdHx3aGVufHdoaWxlfHdpdGgpXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdCdmdW5jdGlvbic6IC9cXHcrKD89XFwoKS8sXG5cdC8vIGRlY2ltYWwsIGJhc2VkLCBwaHlzaWNhbCwgYW5kIGV4cG9uZW50aWFsIG51bWJlcnMgc3VwcG9ydGVkXG5cdCdudW1iZXInOiAvJ1swMXV4endsaC1dJ3xcXGIoPzpcXGQrI1tcXGRhLWZfLl0rI3xcXGRbXFxkXy5dKikoPzplWy0rXT9cXGQrKT8vaSxcblx0J29wZXJhdG9yJzogL1s8Pl09P3w6PXxbLSsqLyY9XXxcXGIoPzphYnN8YW5kfG1vZHxuYW5kfG5vcnxub3R8b3J8cmVtfHJvbHxyb3J8c2xhfHNsbHxzcmF8c3JsfHhub3J8eG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudmltID0ge1xuXHQnc3RyaW5nJzogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxyXFxuXXwnJykqJy8sXG5cdCdjb21tZW50JzogL1wiLiovLFxuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxcKCkvLFxuXHQna2V5d29yZCc6IC9cXGIoPzpOfE5leHR8UHxQcmludHxYfFhNTGVudHxYTUxuc3xhYnxhYmJyZXZpYXRlfGFiY3xhYmNsZWFyfGFib3xhYm92ZWxlZnR8YWx8YWxsfGFyfGFyZ2F8YXJnYWRkfGFyZ2R8YXJnZGVsZXRlfGFyZ2RvfGFyZ2V8YXJnZWRpdHxhcmdnfGFyZ2dsb2JhbHxhcmdsfGFyZ2xvY2FsfGFyZ3N8YXJndXxhcmd1bWVudHxhc3xhc2NpaXxifGJOfGJOZXh0fGJhfGJhZHxiYWRkfGJhbGx8YmR8YmRlbGV0ZXxiZXxiZWx8YmVsb3dyaWdodHxiZnxiZmlyc3R8Ymx8Ymxhc3R8Ym18Ym1vZGlmaWVkfGJufGJuZXh0fGJvfGJvdHJpZ2h0fGJwfGJwcmV2aW91c3xicnxicmVhfGJyZWFrfGJyZWFrYXxicmVha2FkZHxicmVha2R8YnJlYWtkZWx8YnJlYWtsfGJyZWFrbGlzdHxicmV3aW5kfGJyb3xicm93c2V8YnVmZG98YnVmZmVyfGJ1ZmZlcnN8YnVufGJ1bmxvYWR8Ynd8YndpcGVvdXR8Y3xjTnxjTmV4dHxjTmZjTmZpbGV8Y2F8Y2FiYnJldnxjYWJjfGNhYmNsZWFyfGNhZHxjYWRkYnxjYWRkYnVmZmVyfGNhZGRleHByfGNhZGRmfGNhZGRmaWxlfGNhbHxjYWxsfGNhdHxjYXRjaHxjYnxjYnVmZmVyfGNjfGNjbHxjY2xvc2V8Y2R8Y2V8Y2VudGVyfGNleHxjZXhwcnxjZnxjZmlsZXxjZmlyfGNmaXJzdHxjZ3xjZ2V0YnxjZ2V0YnVmZmVyfGNnZXRlfGNnZXRleHByfGNnZXRmaWxlfGNoYW5nZXxjaGFuZ2VzfGNoZHxjaGRpcnxjaGV8Y2hlY2twYXRofGNoZWNrdHxjaGVja3RpbWV8Y2x8Y2xhfGNsYXN0fGNsaXN0fGNsb3xjbG9zZXxjbWFwY3xjbWFwY2xlYXJ8Y258Y25ld3xjbmV3ZXJ8Y25leHR8Y25mfGNuZmlsZXxjbm9yZWF8Y25vcmVhYmJyZXZ8Y298Y29sfGNvbGRlcnxjb2xvfGNvbG9yc2NoZW1lfGNvbWN8Y29tY2xlYXJ8Y29tcHxjb21waWxlcnxjb258Y29uZnxjb25maXJtfGNvbnRpbnVlfGNvcGV8Y29wZW58Y29weXxjcHxjcGZ8Y3BmaWxlfGNwcmV2aW91c3xjcXxjcXVpdHxjcnxjcmV3aW5kfGN1fGN1bmF8Y3VuYWJicmV2fGN1bm1hcHxjd3xjd2luZG93fGR8ZGVidWdnfGRlYnVnZ3JlZWR5fGRlbGN8ZGVsY29tbWFuZHxkZWxldGV8ZGVsZnxkZWxmdW5jdGlvbnxkZWxtfGRlbG1hcmtzfGRpfGRpZmZnfGRpZmZnZXR8ZGlmZm9mZnxkaWZmcGF0Y2h8ZGlmZnB1fGRpZmZwdXR8ZGlmZnNwbGl0fGRpZmZ0aGlzfGRpZmZ1fGRpZmZ1cGRhdGV8ZGlnfGRpZ3JhcGhzfGRpc3BsYXl8ZGp8ZGp1bXB8ZGx8ZGxpc3R8ZHJ8ZHJvcHxkc3xkc2VhcmNofGRzcHxkc3BsaXR8ZXxlYXJsaWVyfGVjaG9lfGVjaG9lcnJ8ZWNob218ZWNob21zZ3xlY2hvbnxlZGl0fGVsfGVsc2V8ZWxzZWl8ZWxzZWlmfGVtfGVtZW51fGVufGVuZGZ8ZW5kZm98ZW5kZm9yfGVuZGZ1bnxlbmRmdW5jdGlvbnxlbmRpZnxlbmR0fGVuZHRyeXxlbmR3fGVuZHdoaWxlfGVuZXxlbmV3fGV4fGV4aXxleGl0fGV4dXxleHVzYWdlfGZ8ZmlsZXxmaWxlc3xmaWxldHlwZXxmaW58ZmluYXxmaW5hbGx5fGZpbmR8ZmluaXxmaW5pc2h8ZmlyfGZpcnN0fGZpeHxmaXhkZWx8Zm98Zm9sZHxmb2xkY3xmb2xkY2xvc2V8Zm9sZGR8Zm9sZGRvY3xmb2xkZG9jbG9zZWR8Zm9sZGRvb3Blbnxmb2xkb3xmb2xkb3Blbnxmb3J8ZnV8ZnVufGZ1bmN0aW9ufGdvfGdvdG98Z3J8Z3JlcHxncmVwYXxncmVwYWRkfGh8aGF8aGFyZGNvcHl8aGVscHxoZWxwZnxoZWxwZmluZHxoZWxwZ3xoZWxwZ3JlcHxoZWxwdHxoZWxwdGFnc3xoaWR8aGlkZXxoaXN8aGlzdG9yeXxpYXxpYWJicmV2fGlhYmN8aWFiY2xlYXJ8aWZ8aWp8aWp1bXB8aWx8aWxpc3R8aW1hcGN8aW1hcGNsZWFyfGlufGlub3JlYXxpbm9yZWFiYnJldnxpc2VhcmNofGlzcHxpc3BsaXR8aXV8aXVuYXxpdW5hYmJyZXZ8aXVubWFwfGp8am9pbnxqdXxqdW1wc3xrfGtlZXxrZWVwYWx0fGtlZXBqfGtlZXBqdW1wc3xrZWVwbWFya3N8bHxsTnxsTmV4dHxsTmZ8bE5maWxlfGxhfGxhZHxsYWRkYnxsYWRkYnVmZmVyfGxhZGRleHByfGxhZGRmfGxhZGRmaWxlfGxhbnxsYW5ndWFnZXxsYXN0fGxhdGVyfGxifGxidWZmZXJ8bGN8bGNkfGxjaHxsY2hkaXJ8bGNsfGxjbG9zZXxsZWZ0fGxlZnRhfGxlZnRhYm92ZXxsZXR8bGV4fGxleHByfGxmfGxmaWxlfGxmaXJ8bGZpcnN0fGxnfGxnZXRifGxnZXRidWZmZXJ8bGdldGV8bGdldGV4cHJ8bGdldGZpbGV8bGdyfGxncmVwfGxncmVwYXxsZ3JlcGFkZHxsaHxsaGVscGdyZXB8bGlzdHxsbHxsbGF8bGxhc3R8bGxpfGxsaXN0fGxtfGxtYWt8bG1ha2V8bG1hcHxsbWFwY3xsbWFwY2xlYXJ8bG58bG5lfGxuZXd8bG5ld2VyfGxuZXh0fGxuZnxsbmZpbGV8bG5vcmVtYXB8bG98bG9hZHZpZXd8bG9jfGxvY2ttYXJrc3xsb2Nrdnxsb2NrdmFyfGxvbHxsb2xkZXJ8bG9wfGxvcGVufGxwfGxwZnxscGZpbGV8bHByZXZpb3VzfGxyfGxyZXdpbmR8bHN8bHR8bHRhZ3xsdXxsdW5tYXB8bHZ8bHZpbWdyZXB8bHZpbWdyZXBhfGx2aW1ncmVwYWRkfGx3fGx3aW5kb3d8bXxtYXxtYWt8bWFrZXxtYXJrfG1hcmtzfG1hdHxtYXRjaHxtZW51dHxtZW51dHJhbnNsYXRlfG1rfG1rZXhyY3xta3N8bWtzZXNzaW9ufG1rc3B8bWtzcGVsbHxta3Z8bWt2aWV8bWt2aWV3fG1rdmltcmN8bW9kfG1vZGV8bW92ZXxtenxtemZ8bXpmaWxlfG16c2NoZW1lfG58bmJrZXl8bmV3fG5leHR8bm1hcGN8bm1hcGNsZWFyfG5vaHxub2hsc2VhcmNofG5vcmVhfG5vcmVhYmJyZXZ8bnV8bnVtYmVyfG51bnxudW5tYXB8b3xvbWFwY3xvbWFwY2xlYXJ8b258b25seXxvcGVufG9wdHxvcHRpb25zfG91fG91bm1hcHxwfHBjfHBjbG9zZXxwZXxwZWR8cGVkaXR8cGVybHxwZXJsZHxwZXJsZG98cG98cG9wfHBvcHV8cG9wdXB8cHB8cHBvcHxwcmV8cHJlc2VydmV8cHJldnxwcmV2aW91c3xwcmludHxwcm9mfHByb2ZkfHByb2ZkZWx8cHJvZmlsZXxwcm9tcHRmfHByb21wdGZpbmR8cHJvbXB0cnxwcm9tcHRyZXBsfHBzfHBzZWFyY2h8cHROfHB0TmV4dHxwdGF8cHRhZ3xwdGZ8cHRmaXJzdHxwdGp8cHRqdW1wfHB0bHxwdGxhc3R8cHRufHB0bmV4dHxwdHB8cHRwcmV2aW91c3xwdHJ8cHRyZXdpbmR8cHRzfHB0c2VsZWN0fHB1fHB1dHxwd3xwd2R8cHl8cHlmfHB5ZmlsZXxweXRob258cXxxYXxxYWxsfHF1aXR8cXVpdGF8cXVpdGFsbHxyfHJlYWR8cmVjfHJlY292ZXJ8cmVkfHJlZGl8cmVkaXJ8cmVkb3xyZWRyfHJlZHJhd3xyZWRyYXdzfHJlZHJhd3N0YXR1c3xyZWd8cmVnaXN0ZXJzfHJlc3xyZXNpemV8cmV0fHJldGFifHJldHV8cmV0dXJufHJld3xyZXdpbmR8cml8cmlnaHR8cmlnaHRifHJpZ2h0YmVsb3d8cnV8cnVifHJ1Ynl8cnVieWR8cnVieWRvfHJ1YnlmfHJ1YnlmaWxlfHJ1bnRpbWV8cnZ8cnZpbWluZm98c058c05leHR8c2F8c2FsfHNhbGx8c2FufHNhbmRib3h8c2FyZ3VtZW50fHNhdnxzYXZlYXN8c2J8c2JOfHNiTmV4dHxzYmF8c2JhbGx8c2JmfHNiZmlyc3R8c2JsfHNibGFzdHxzYm18c2Jtb2RpZmllZHxzYm58c2JuZXh0fHNicHxzYnByZXZpb3VzfHNicnxzYnJld2luZHxzYnVmZmVyfHNjcmlwfHNjcmlwdGV8c2NyaXB0ZW5jb2Rpbmd8c2NyaXB0bmFtZXN8c2V8c2V0fHNldGZ8c2V0ZmlsZXR5cGV8c2V0Z3xzZXRnbG9iYWx8c2V0bHxzZXRsb2NhbHxzZnxzZmluZHxzZmlyfHNmaXJzdHxzaHxzaGVsbHxzaWdufHNpbHxzaWxlbnR8c2ltfHNpbWFsdHxzbHxzbGF8c2xhc3R8c2xlZXB8c218c21hZ2ljfHNtYXB8c21hcGN8c21hcGNsZWFyfHNtZXxzbWVudXxzbnxzbmV4dHxzbml8c25pZmZ8c25vfHNub21hZ2ljfHNub3J8c25vcmVtYXB8c25vcmVtZXxzbm9yZW1lbnV8c298c29yfHNvcnR8c291cmNlfHNwfHNwZXxzcGVsbGR8c3BlbGxkdW1wfHNwZWxsZ29vZHxzcGVsbGl8c3BlbGxpbmZvfHNwZWxscnxzcGVsbHJlcGFsbHxzcGVsbHV8c3BlbGx1bmRvfHNwZWxsd3xzcGVsbHdyb25nfHNwbGl0fHNwcnxzcHJldmlvdXN8c3JlfHNyZXdpbmR8c3R8c3RhfHN0YWd8c3RhcnxzdGFydGd8c3RhcnRncmVwbGFjZXxzdGFydGluc2VydHxzdGFydHJ8c3RhcnRyZXBsYWNlfHN0anxzdGp1bXB8c3RvcHxzdG9waXxzdG9waW5zZXJ0fHN0c3xzdHNlbGVjdHxzdW58c3VuaGlkZXxzdW5tfHN1bm1hcHxzdXN8c3VzcGVuZHxzdnxzdmlld3xzeW5jYmluZHx0fHROfHROZXh0fHRhfHRhYnx0YWJOfHRhYk5leHR8dGFiY3x0YWJjbG9zZXx0YWJkfHRhYmRvfHRhYmV8dGFiZWRpdHx0YWJmfHRhYmZpbmR8dGFiZmlyfHRhYmZpcnN0fHRhYmx8dGFibGFzdHx0YWJtfHRhYm1vdmV8dGFibnx0YWJuZXd8dGFibmV4dHx0YWJvfHRhYm9ubHl8dGFicHx0YWJwcmV2aW91c3x0YWJyfHRhYnJld2luZHx0YWJzfHRhZ3x0YWdzfHRjfHRjbHx0Y2xkfHRjbGRvfHRjbGZ8dGNsZmlsZXx0ZXx0ZWFyb2ZmfHRmfHRmaXJzdHx0aHx0aHJvd3x0anx0anVtcHx0bHx0bGFzdHx0bXx0bWVudXx0bnx0bmV4dHx0b3x0b3BsZWZ0fHRwfHRwcmV2aW91c3x0cnx0cmV3aW5kfHRyeXx0c3x0c2VsZWN0fHR1fHR1bm1lbnV8dXx1bmF8dW5hYmJyZXZpYXRlfHVuZG98dW5kb2p8dW5kb2pvaW58dW5kb2x8dW5kb2xpc3R8dW5ofHVuaGlkZXx1bmxldHx1bmxvfHVubG9ja3Zhcnx1bm18dW5tYXB8dXB8dXBkYXRlfHZlfHZlcmJ8dmVyYm9zZXx2ZXJzaW9ufHZlcnR8dmVydGljYWx8dml8dmllfHZpZXd8dmltfHZpbWdyZXB8dmltZ3JlcGF8dmltZ3JlcGFkZHx2aXN1YWx8dml1fHZpdXNhZ2V8dm1hcGN8dm1hcGNsZWFyfHZuZXx2bmV3fHZzfHZzcGxpdHx2dXx2dW5tYXB8d3x3Tnx3TmV4dHx3YXx3YWxsfHdofHdoaWxlfHdpbnx3aW5jfHdpbmNtZHx3aW5kb3x3aW5wfHdpbnBvc3x3aW5zaXplfHdufHduZXh0fHdwfHdwcmV2aW91c3x3cXx3cWF8d3FhbGx8d3JpdGV8d3N8d3N2ZXJifHd2fHd2aW1pbmZvfHh8eGF8eGFsbHx4aXR8eG18eG1hcHx4bWFwY3x4bWFwY2xlYXJ8eG1lfHhtZW51fHhufHhub3JlbWFwfHhub3JlbWV8eG5vcmVtZW51fHh1fHh1bm1hcHx5fHlhbmspXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86YWNkfGFpfGFrbXxhbGVwaHxhbGxvd3Jldmluc3xhbHRrZXltYXB8YW1iaXdpZHRofGFtYnd8YW50aXxhbnRpYWxpYXN8YXJhYnxhcmFiaWN8YXJhYmljc2hhcGV8YXJpfGFyc2hhcGV8YXV0b2NoZGlyfGF1dG9jbWR8YXV0b2luZGVudHxhdXRvcmVhZHxhdXRvd3JpdGV8YXV0b3dyaXRlYWxsfGF3fGF3YXxiYWNrZ3JvdW5kfGJhY2tzcGFjZXxiYWNrdXB8YmFja3VwY29weXxiYWNrdXBkaXJ8YmFja3VwZXh0fGJhY2t1cHNraXB8YmFsbG9vbmRlbGF5fGJhbGxvb25ldmFsfGJhbGxvb25leHByfGJkaXJ8YmRsYXl8YmV2YWx8YmV4fGJleHByfGJnfGJofGJpbnxiaW5hcnl8Ymlvc2t8Ymlvc2tleXxia3xia2N8Ym9tYnxicmVha2F0fGJya3xicm93c2VkaXJ8YnN8YnNkaXJ8YnNrfGJ0fGJ1ZmhpZGRlbnxidWZsaXN0ZWR8YnVmdHlwZXxjYXNlbWFwfGNjdnxjZHBhdGh8Y2VkaXR8Y2Z1fGNofGNoYXJjb252ZXJ0fGNpfGNpbnxjaW5kZW50fGNpbmt8Y2lua2V5c3xjaW5vfGNpbm9wdGlvbnN8Y2lud3xjaW53b3Jkc3xjbGlwYm9hcmR8Y21kaGVpZ2h0fGNtZHdpbmhlaWdodHxjbXB8Y21zfGNvbHVtbnN8Y29tfGNvbW1lbnRzfGNvbW1lbnRzdHJpbmd8Y29tcGF0aWJsZXxjb21wbGV0ZXxjb21wbGV0ZWZ1bmN8Y29tcGxldGVvcHR8Y29uc2t8Y29uc2tleXxjb3B5aW5kZW50fGNvdHxjcG98Y3BvcHRpb25zfGNwdHxjc2NvcGVwYXRoY29tcHxjc2NvcGVwcmd8Y3Njb3BlcXVpY2tmaXh8Y3Njb3BldGFnfGNzY29wZXRhZ29yZGVyfGNzY29wZXZlcmJvc2V8Y3NwY3xjc3ByZ3xjc3FmfGNzdHxjc3RvfGNzdmVyYnxjdWN8Y3VsfGN1cnNvcmNvbHVtbnxjdXJzb3JsaW5lfGN3aHxkZWJ1Z3xkZWNvfGRlZnxkZWZpbmV8ZGVsY29tYmluZXxkZXh8ZGd8ZGljdHxkaWN0aW9uYXJ5fGRpZmZ8ZGlmZmV4cHJ8ZGlmZm9wdHxkaWdyYXBofGRpcHxkaXJ8ZGlyZWN0b3J5fGR5fGVhfGVhZHxlYWRpcmVjdGlvbnxlYnxlZHxlZGNvbXBhdGlibGV8ZWZ8ZWZtfGVpfGVrfGVuY3xlbmNvZGluZ3xlbmRvZmxpbmV8ZW9sfGVwfGVxdWFsYWx3YXlzfGVxdWFscHJnfGVycm9yYmVsbHN8ZXJyb3JmaWxlfGVycm9yZm9ybWF0fGVzY2tleXN8ZXR8ZXZlbnRpZ25vcmV8ZXhwYW5kdGFifGV4cmN8ZmNsfGZjc3xmZGN8ZmRlfGZkaXxmZGx8ZmRsc3xmZG18ZmRufGZkb3xmZHR8ZmVufGZlbmN8ZmVuY3N8ZmV4fGZmfGZmc3xmaWxlZW5jb2Rpbmd8ZmlsZWVuY29kaW5nc3xmaWxlZm9ybWF0fGZpbGVmb3JtYXRzfGZpbGxjaGFyc3xma3xma21hcHxmbHB8Zm1sfGZtcnxmb2xkY29sdW1ufGZvbGRlbmFibGV8Zm9sZGV4cHJ8Zm9sZGlnbm9yZXxmb2xkbGV2ZWx8Zm9sZGxldmVsc3RhcnR8Zm9sZG1hcmtlcnxmb2xkbWV0aG9kfGZvbGRtaW5saW5lc3xmb2xkbmVzdG1heHxmb2xkdGV4dHxmb3JtYXRleHByfGZvcm1hdGxpc3RwYXR8Zm9ybWF0b3B0aW9uc3xmb3JtYXRwcmd8ZnB8ZnN8ZnN5bmN8ZnR8Z2NyfGdkfGdkZWZhdWx0fGdmbXxnZm58Z2ZzfGdmd3xnaHJ8Z3B8Z3JlcGZvcm1hdHxncmVwcHJnfGd0bHxndHR8Z3VpY3Vyc29yfGd1aWZvbnR8Z3VpZm9udHNldHxndWlmb250d2lkZXxndWloZWFkcm9vbXxndWlvcHRpb25zfGd1aXB0eXxndWl0YWJsYWJlbHxndWl0YWJ0b29sdGlwfGhlbHBmaWxlfGhlbHBoZWlnaHR8aGVscGxhbmd8aGZ8aGh8aGl8aGlkZGVufGhpZ2hsaWdodHxoa3xoa21hcHxoa21hcHB8aGtwfGhsfGhsZ3xobHN8aGxzZWFyY2h8aWN8aWNvbnxpY29uc3RyaW5nfGlnbm9yZWNhc2V8aW18aW1hY3RpdmF0ZWtleXxpbWFrfGltY3xpbWNtZGxpbmV8aW1kfGltZGlzYWJsZXxpbWl8aW1pbnNlcnR8aW1zfGltc2VhcmNofGluY3xpbmNsdWRlfGluY2x1ZGVleHByfGluY3NlYXJjaHxpbmRlfGluZGVudGV4cHJ8aW5kZW50a2V5c3xpbmRrfGluZXh8aW5mfGluZmVyY2FzZXxpbnNlcnRtb2RlfGludmFjZHxpbnZhaXxpbnZha218aW52YWxsb3dyZXZpbnN8aW52YWx0a2V5bWFwfGludmFudGl8aW52YW50aWFsaWFzfGludmFyfGludmFyYWJ8aW52YXJhYmljfGludmFyYWJpY3NoYXBlfGludmFyaXxpbnZhcnNoYXBlfGludmF1dG9jaGRpcnxpbnZhdXRvaW5kZW50fGludmF1dG9yZWFkfGludmF1dG93cml0ZXxpbnZhdXRvd3JpdGVhbGx8aW52YXd8aW52YXdhfGludmJhY2t1cHxpbnZiYWxsb29uZXZhbHxpbnZiZXZhbHxpbnZiaW58aW52YmluYXJ5fGludmJpb3NrfGludmJpb3NrZXl8aW52Ymt8aW52Ymx8aW52Ym9tYnxpbnZidWZsaXN0ZWR8aW52Y2Z8aW52Y2l8aW52Y2lufGludmNpbmRlbnR8aW52Y29tcGF0aWJsZXxpbnZjb25maXJtfGludmNvbnNrfGludmNvbnNrZXl8aW52Y29weWluZGVudHxpbnZjcHxpbnZjc2NvcGV0YWd8aW52Y3Njb3BldmVyYm9zZXxpbnZjc3R8aW52Y3N2ZXJifGludmN1Y3xpbnZjdWx8aW52Y3Vyc29yY29sdW1ufGludmN1cnNvcmxpbmV8aW52ZGVjb3xpbnZkZWxjb21iaW5lfGludmRnfGludmRpZmZ8aW52ZGlncmFwaHxpbnZkaXNhYmxlfGludmVhfGludmVifGludmVkfGludmVkY29tcGF0aWJsZXxpbnZla3xpbnZlbmRvZmxpbmV8aW52ZW9sfGludmVxdWFsYWx3YXlzfGludmVycm9yYmVsbHN8aW52ZXNja2V5c3xpbnZldHxpbnZleHxpbnZleHBhbmR0YWJ8aW52ZXhyY3xpbnZmZW58aW52Zmt8aW52ZmttYXB8aW52Zm9sZGVuYWJsZXxpbnZnZHxpbnZnZGVmYXVsdHxpbnZndWlwdHl8aW52aGlkfGludmhpZGRlbnxpbnZoa3xpbnZoa21hcHxpbnZoa21hcHB8aW52aGtwfGludmhsc3xpbnZobHNlYXJjaHxpbnZpY3xpbnZpY29ufGludmlnbm9yZWNhc2V8aW52aW18aW52aW1jfGludmltY21kbGluZXxpbnZpbWR8aW52aW5jc2VhcmNofGludmluZnxpbnZpbmZlcmNhc2V8aW52aW5zZXJ0bW9kZXxpbnZpc3xpbnZqb2luc3BhY2VzfGludmpzfGludmxhenlyZWRyYXd8aW52bGJyfGludmxpbmVicmVha3xpbnZsaXNwfGludmxpc3R8aW52bG9hZHBsdWdpbnN8aW52bHBsfGludmx6fGludm1hfGludm1hY2F0c3VpfGludm1hZ2ljfGludm1ofGludm1sfGludm1vZHxpbnZtb2RlbGluZXxpbnZtb2RpZmlhYmxlfGludm1vZGlmaWVkfGludm1vcmV8aW52bW91c2VmfGludm1vdXNlZm9jdXN8aW52bW91c2VoaWRlfGludm51fGludm51bWJlcnxpbnZvZGV2fGludm9wZW5kZXZpY2V8aW52cGFzdGV8aW52cGl8aW52cHJlc2VydmVpbmRlbnR8aW52cHJldmlld3dpbmRvd3xpbnZwcm9tcHR8aW52cHZ3fGludnJlYWRvbmx5fGludnJlbWFwfGludnJlc3RvcmVzY3JlZW58aW52cmV2aW5zfGludnJpfGludnJpZ2h0bGVmdHxpbnZyaWdodGxlZnRjbWR8aW52cmx8aW52cmxjfGludnJvfGludnJzfGludnJ1fGludnJ1bGVyfGludnNifGludnNjfGludnNjYnxpbnZzY3JvbGxiaW5kfGludnNjc3xpbnZzZWN1cmV8aW52c2Z0fGludnNoZWxsc2xhc2h8aW52c2hlbGx0ZW1wfGludnNoaWZ0cm91bmR8aW52c2hvcnRuYW1lfGludnNob3djbWR8aW52c2hvd2Z1bGx0YWd8aW52c2hvd21hdGNofGludnNob3dtb2RlfGludnNpfGludnNtfGludnNtYXJ0Y2FzZXxpbnZzbWFydGluZGVudHxpbnZzbWFydHRhYnxpbnZzbWR8aW52c258aW52c29sfGludnNwZWxsfGludnNwbGl0YmVsb3d8aW52c3BsaXRyaWdodHxpbnZzcHJ8aW52c3J8aW52c3NsfGludnN0YXxpbnZzdGFydG9mbGluZXxpbnZzdG1wfGludnN3YXBmaWxlfGludnN3ZnxpbnZ0YXxpbnZ0YWdic2VhcmNofGludnRhZ3JlbGF0aXZlfGludnRhZ3N0YWNrfGludnRiaXxpbnZ0YmlkaXxpbnZ0YnN8aW52dGVybWJpZGl8aW52dGVyc2V8aW52dGV4dGF1dG98aW52dGV4dG1vZGV8aW52dGZ8aW52dGdzdHxpbnZ0aWxkZW9wfGludnRpbWVvdXR8aW52dGl0bGV8aW52dG98aW52dG9wfGludnRyfGludnR0aW1lb3V0fGludnR0eWJ1aWx0aW58aW52dHR5ZmFzdHxpbnZ0eHxpbnZ2YnxpbnZ2aXN1YWxiZWxsfGludndhfGludndhcm58aW52d2J8aW52d2VpcmRpbnZlcnR8aW52d2ZofGludndmd3xpbnZ3aWxkbWVudXxpbnZ3aW5maXhoZWlnaHR8aW52d2luZml4d2lkdGh8aW52d2l2fGludndtbnV8aW52d3JhcHxpbnZ3cmFwc2NhbnxpbnZ3cml0ZXxpbnZ3cml0ZWFueXxpbnZ3cml0ZWJhY2t1cHxpbnZ3c3xpc2Z8aXNmbmFtZXxpc2l8aXNpZGVudHxpc2t8aXNrZXl3b3JkfGlzcHJpbnR8am9pbnNwYWNlc3xqc3xrZXl8a2V5bWFwfGtleW1vZGVsfGtleXdvcmRwcmd8a218a21wfGtwfGxhbmdtYXB8bGFuZ21lbnV8bGFzdHN0YXR1c3xsYXp5cmVkcmF3fGxicnxsY3N8bGluZWJyZWFrfGxpbmVzfGxpbmVzcGFjZXxsaXNwfGxpc3B3b3Jkc3xsaXN0Y2hhcnN8bG9hZHBsdWdpbnN8bHBsfGxzcHxsenxtYWNhdHN1aXxtYWdpY3xtYWtlZWZ8bWFrZXByZ3xtYXRjaHBhaXJzfG1hdGNodGltZXxtYXhjb21iaW5lfG1heGZ1bmNkZXB0aHxtYXhtYXBkZXB0aHxtYXhtZW18bWF4bWVtcGF0dGVybnxtYXhtZW10b3R8bWNvfG1lZnxtZW51aXRlbXN8bWZkfG1ofG1pc3xta3NwZWxsbWVtfG1sfG1sc3xtbXxtbWR8bW1wfG1tdHxtb2RlbGluZXxtb2RlbGluZXN8bW9kaWZpYWJsZXxtb2RpZmllZHxtb3JlfG1vdXNlfG1vdXNlZnxtb3VzZWZvY3VzfG1vdXNlaGlkZXxtb3VzZW18bW91c2Vtb2RlbHxtb3VzZXN8bW91c2VzaGFwZXxtb3VzZXR8bW91c2V0aW1lfG1wfG1wc3xtc218bXpxfG16cXVhbnR1bXxuZnxub2FjZHxub2FpfG5vYWttfG5vYWxsb3dyZXZpbnN8bm9hbHRrZXltYXB8bm9hbnRpfG5vYW50aWFsaWFzfG5vYXJ8bm9hcmFifG5vYXJhYmljfG5vYXJhYmljc2hhcGV8bm9hcml8bm9hcnNoYXBlfG5vYXV0b2NoZGlyfG5vYXV0b2luZGVudHxub2F1dG9yZWFkfG5vYXV0b3dyaXRlfG5vYXV0b3dyaXRlYWxsfG5vYXd8bm9hd2F8bm9iYWNrdXB8bm9iYWxsb29uZXZhbHxub2JldmFsfG5vYmlufG5vYmluYXJ5fG5vYmlvc2t8bm9iaW9za2V5fG5vYmt8bm9ibHxub2JvbWJ8bm9idWZsaXN0ZWR8bm9jZnxub2NpfG5vY2lufG5vY2luZGVudHxub2NvbXBhdGlibGV8bm9jb25maXJtfG5vY29uc2t8bm9jb25za2V5fG5vY29weWluZGVudHxub2NwfG5vY3Njb3BldGFnfG5vY3Njb3BldmVyYm9zZXxub2NzdHxub2NzdmVyYnxub2N1Y3xub2N1bHxub2N1cnNvcmNvbHVtbnxub2N1cnNvcmxpbmV8bm9kZWNvfG5vZGVsY29tYmluZXxub2RnfG5vZGlmZnxub2RpZ3JhcGh8bm9kaXNhYmxlfG5vZWF8bm9lYnxub2VkfG5vZWRjb21wYXRpYmxlfG5vZWt8bm9lbmRvZmxpbmV8bm9lb2x8bm9lcXVhbGFsd2F5c3xub2Vycm9yYmVsbHN8bm9lc2NrZXlzfG5vZXR8bm9leHxub2V4cGFuZHRhYnxub2V4cmN8bm9mZW58bm9ma3xub2ZrbWFwfG5vZm9sZGVuYWJsZXxub2dkfG5vZ2RlZmF1bHR8bm9ndWlwdHl8bm9oaWR8bm9oaWRkZW58bm9oa3xub2hrbWFwfG5vaGttYXBwfG5vaGtwfG5vaGxzfG5vaWN8bm9pY29ufG5vaWdub3JlY2FzZXxub2ltfG5vaW1jfG5vaW1jbWRsaW5lfG5vaW1kfG5vaW5jc2VhcmNofG5vaW5mfG5vaW5mZXJjYXNlfG5vaW5zZXJ0bW9kZXxub2lzfG5vam9pbnNwYWNlc3xub2pzfG5vbGF6eXJlZHJhd3xub2xicnxub2xpbmVicmVha3xub2xpc3B8bm9saXN0fG5vbG9hZHBsdWdpbnN8bm9scGx8bm9senxub21hfG5vbWFjYXRzdWl8bm9tYWdpY3xub21ofG5vbWx8bm9tb2R8bm9tb2RlbGluZXxub21vZGlmaWFibGV8bm9tb2RpZmllZHxub21vcmV8bm9tb3VzZWZ8bm9tb3VzZWZvY3VzfG5vbW91c2VoaWRlfG5vbnV8bm9udW1iZXJ8bm9vZGV2fG5vb3BlbmRldmljZXxub3Bhc3RlfG5vcGl8bm9wcmVzZXJ2ZWluZGVudHxub3ByZXZpZXd3aW5kb3d8bm9wcm9tcHR8bm9wdnd8bm9yZWFkb25seXxub3JlbWFwfG5vcmVzdG9yZXNjcmVlbnxub3Jldmluc3xub3JpfG5vcmlnaHRsZWZ0fG5vcmlnaHRsZWZ0Y21kfG5vcmx8bm9ybGN8bm9yb3xub3JzfG5vcnV8bm9ydWxlcnxub3NifG5vc2N8bm9zY2J8bm9zY3JvbGxiaW5kfG5vc2NzfG5vc2VjdXJlfG5vc2Z0fG5vc2hlbGxzbGFzaHxub3NoZWxsdGVtcHxub3NoaWZ0cm91bmR8bm9zaG9ydG5hbWV8bm9zaG93Y21kfG5vc2hvd2Z1bGx0YWd8bm9zaG93bWF0Y2h8bm9zaG93bW9kZXxub3NpfG5vc218bm9zbWFydGNhc2V8bm9zbWFydGluZGVudHxub3NtYXJ0dGFifG5vc21kfG5vc258bm9zb2x8bm9zcGVsbHxub3NwbGl0YmVsb3d8bm9zcGxpdHJpZ2h0fG5vc3ByfG5vc3J8bm9zc2x8bm9zdGF8bm9zdGFydG9mbGluZXxub3N0bXB8bm9zd2FwZmlsZXxub3N3Znxub3RhfG5vdGFnYnNlYXJjaHxub3RhZ3JlbGF0aXZlfG5vdGFnc3RhY2t8bm90Yml8bm90YmlkaXxub3Ric3xub3Rlcm1iaWRpfG5vdGVyc2V8bm90ZXh0YXV0b3xub3RleHRtb2RlfG5vdGZ8bm90Z3N0fG5vdGlsZGVvcHxub3RpbWVvdXR8bm90aXRsZXxub3RvfG5vdG9wfG5vdHJ8bm90dGltZW91dHxub3R0eWJ1aWx0aW58bm90dHlmYXN0fG5vdHh8bm92Ynxub3Zpc3VhbGJlbGx8bm93YXxub3dhcm58bm93Ynxub3dlaXJkaW52ZXJ0fG5vd2ZofG5vd2Z3fG5vd2lsZG1lbnV8bm93aW5maXhoZWlnaHR8bm93aW5maXh3aWR0aHxub3dpdnxub3dtbnV8bm93cmFwfG5vd3JhcHNjYW58bm93cml0ZXxub3dyaXRlYW55fG5vd3JpdGViYWNrdXB8bm93c3xucmZvcm1hdHN8bnVtYmVyd2lkdGh8bnV3fG9kZXZ8b2Z0fG9mdXxvbW5pZnVuY3xvcGVuZGV2aWNlfG9wZXJhdG9yZnVuY3xvcGZ1bmN8b3NmaWxldHlwZXxwYXxwYXJhfHBhcmFncmFwaHN8cGFzdGV8cGFzdGV0b2dnbGV8cGF0Y2hleHByfHBhdGNobW9kZXxwYXRofHBkZXZ8cGVuY3xwZXh8cGV4cHJ8cGZufHBofHBoZWFkZXJ8cGl8cG18cG1iY3N8cG1iZm58cG9wdHxwcmVzZXJ2ZWluZGVudHxwcmV2aWV3aGVpZ2h0fHByZXZpZXd3aW5kb3d8cHJpbnRkZXZpY2V8cHJpbnRlbmNvZGluZ3xwcmludGV4cHJ8cHJpbnRmb250fHByaW50aGVhZGVyfHByaW50bWJjaGFyc2V0fHByaW50bWJmb250fHByaW50b3B0aW9uc3xwcm9tcHR8cHR8cHVtaGVpZ2h0fHB2aHxwdnd8cWV8cXVvdGVlc2NhcGV8cmVhZG9ubHl8cmVtYXB8cmVwb3J0fHJlc3RvcmVzY3JlZW58cmV2aW5zfHJpZ2h0bGVmdHxyaWdodGxlZnRjbWR8cmx8cmxjfHJvfHJzfHJ0cHxydWZ8cnVsZXJ8cnVsZXJmb3JtYXR8cnVudGltZXBhdGh8c2JvfHNjfHNjYnxzY3J8c2Nyb2xsfHNjcm9sbGJpbmR8c2Nyb2xsanVtcHxzY3JvbGxvZmZ8c2Nyb2xsb3B0fHNjc3xzZWN0fHNlY3Rpb25zfHNlY3VyZXxzZWx8c2VsZWN0aW9ufHNlbGVjdG1vZGV8c2Vzc2lvbm9wdGlvbnN8c2Z0fHNoY2Z8c2hlbGxjbWRmbGFnfHNoZWxscGlwZXxzaGVsbHF1b3RlfHNoZWxscmVkaXJ8c2hlbGxzbGFzaHxzaGVsbHRlbXB8c2hlbGx0eXBlfHNoZWxseHF1b3RlfHNoaWZ0cm91bmR8c2hpZnR3aWR0aHxzaG18c2hvcnRtZXNzfHNob3J0bmFtZXxzaG93YnJlYWt8c2hvd2NtZHxzaG93ZnVsbHRhZ3xzaG93bWF0Y2h8c2hvd21vZGV8c2hvd3RhYmxpbmV8c2hxfHNpfHNpZGVzY3JvbGx8c2lkZXNjcm9sbG9mZnxzaXNvfHNqfHNsbXxzbWFydGNhc2V8c21hcnRpbmRlbnR8c21hcnR0YWJ8c21jfHNtZHxzb2Z0dGFic3RvcHxzb2x8c3BjfHNwZWxsfHNwZWxsY2FwY2hlY2t8c3BlbGxmaWxlfHNwZWxsbGFuZ3xzcGVsbHN1Z2dlc3R8c3BmfHNwbHxzcGxpdGJlbG93fHNwbGl0cmlnaHR8c3BzfHNyfHNycnxzc3xzc2x8c3NvcHxzdGFsfHN0YXJ0b2ZsaW5lfHN0YXR1c2xpbmV8c3RsfHN0bXB8c3V8c3VhfHN1ZmZpeGVzfHN1ZmZpeGVzYWRkfHN3fHN3YXBmaWxlfHN3YXBzeW5jfHN3Ynxzd2Z8c3dpdGNoYnVmfHN3c3xzeHF8c3lufHN5bm1heGNvbHxzeW50YXh8dF9BQnx0X0FGfHRfQUx8dF9DU3x0X0NWfHRfQ2V8dF9Db3x0X0NzfHRfREx8dF9FSXx0X0YxfHRfRjJ8dF9GM3x0X0Y0fHRfRjV8dF9GNnx0X0Y3fHRfRjh8dF9GOXx0X0lFfHRfSVN8dF9LMXx0X0szfHRfSzR8dF9LNXx0X0s2fHRfSzd8dF9LOHx0X0s5fHRfS0F8dF9LQnx0X0tDfHRfS0R8dF9LRXx0X0tGfHRfS0d8dF9LSHx0X0tJfHRfS0p8dF9LS3x0X0tMfHRfUkl8dF9SVnx0X1NJfHRfU2J8dF9TZnx0X1dQfHRfV1N8dF9aSHx0X1pSfHRfYWx8dF9iY3x0X2NkfHRfY2V8dF9jbHx0X2NtfHRfY3N8dF9kYXx0X2RifHRfZGx8dF9mc3x0X2sxfHRfazJ8dF9rM3x0X2s0fHRfazV8dF9rNnx0X2s3fHRfazh8dF9rOXx0X2tCfHRfa0R8dF9rSXx0X2tOfHRfa1B8dF9rYnx0X2tkfHRfa2V8dF9raHx0X2tsfHRfa3J8dF9rc3x0X2t1fHRfbGV8dF9tYnx0X21kfHRfbWV8dF9tcnx0X21zfHRfbmR8dF9vcHx0X3NlfHRfc298dF9zcnx0X3RlfHRfdGl8dF90c3x0X3VlfHRfdXN8dF91dHx0X3ZifHRfdmV8dF92aXx0X3ZzfHRfeHN8dGFibGluZXx0YWJwYWdlbWF4fHRhYnN0b3B8dGFnYnNlYXJjaHx0YWdsZW5ndGh8dGFncmVsYXRpdmV8dGFnc3RhY2t8dGFsfHRifHRiaXx0YmlkaXx0YmlzfHRic3x0ZW5jfHRlcm18dGVybWJpZGl8dGVybWVuY29kaW5nfHRlcnNlfHRleHRhdXRvfHRleHRtb2RlfHRleHR3aWR0aHx0Z3N0fHRoZXNhdXJ1c3x0aWxkZW9wfHRpbWVvdXR8dGltZW91dGxlbnx0aXRsZXx0aXRsZWxlbnx0aXRsZW9sZHx0aXRsZXN0cmluZ3x0b29sYmFyfHRvb2xiYXJpY29uc2l6ZXx0b3B8dHBtfHRzbHx0c3J8dHRpbWVvdXR8dHRpbWVvdXRsZW58dHRtfHR0eXx0dHlidWlsdGlufHR0eWZhc3R8dHR5bXx0dHltb3VzZXx0dHlzY3JvbGx8dHR5dHlwZXx0d3x0eHx1Y3x1bHx1bmRvbGV2ZWxzfHVwZGF0ZWNvdW50fHVwZGF0ZXRpbWV8dXR8dmJ8dmJzfHZkaXJ8dmVyYm9zZWZpbGV8dmZpbGV8dmlld2Rpcnx2aWV3b3B0aW9uc3x2aW1pbmZvfHZpcnR1YWxlZGl0fHZpc3VhbGJlbGx8dm9wfHdha3x3YXJufHdifHdjfHdjbXx3ZHx3ZWlyZGludmVydHx3Zmh8d2Z3fHdoaWNod3JhcHx3aXx3aWd8d2lsZGNoYXJ8d2lsZGNoYXJtfHdpbGRpZ25vcmV8d2lsZG1lbnV8d2lsZG1vZGV8d2lsZG9wdGlvbnN8d2ltfHdpbmFsdGtleXN8d2luZG93fHdpbmZpeGhlaWdodHx3aW5maXh3aWR0aHx3aW5oZWlnaHR8d2lubWluaGVpZ2h0fHdpbm1pbndpZHRofHdpbndpZHRofHdpdnx3aXd8d218d21ofHdtbnV8d213fHdvcHx3cmFwfHdyYXBtYXJnaW58d3JhcHNjYW58d3JpdGVhbnl8d3JpdGViYWNrdXB8d3JpdGVkZWxheXx3dylcXGIvLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZl0rfFxcZCsoPzpcXC5cXGQrKT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9cXHxcXHx8JiZ8Wy0rLl09P3xbPSFdKD86Wz1+XVsjP10/KT98Wzw+XT0/WyM/XT98WypcXC8lP118XFxiKD86aXMoPzpub3QpPylcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSgpLDs6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlc1sndmlzdWFsLWJhc2ljJ10gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oPzpbJ1x1MjAxOFx1MjAxOV18UkVNXFxiKSg/OlteXFxyXFxuX118Xyg/Olxcclxcbj98XFxuKT8pKi9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXlJFTS9pXG5cdFx0fVxuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8jKD86Q29uc3R8RWxzZXxFbHNlSWZ8RW5kfEV4dGVybmFsQ2hlY2tzdW18RXh0ZXJuYWxTb3VyY2V8SWZ8UmVnaW9uKSg/OlxcYl9bIFxcdF0qKD86XFxyXFxuP3xcXG4pfC4pKy9pLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cXCQ/W1wiXHUyMDFDXHUyMDFEXSg/OltcIlx1MjAxQ1x1MjAxRF17Mn18W15cIlx1MjAxQ1x1MjAxRF0pKltcIlx1MjAxQ1x1MjAxRF1DPy9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnZGF0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvI1sgXFx0XSooPzpcXGQrKFsvLV0pXFxkK1xcMVxcZCsoPzpbIFxcdF0rKD86XFxkK1sgXFx0XSooPzpBTXxQTSl8XFxkKzpcXGQrKD86OlxcZCspPyg/OlsgXFx0XSooPzpBTXxQTSkpPykpP3xcXGQrWyBcXHRdKig/OkFNfFBNKXxcXGQrOlxcZCsoPzo6XFxkKyk/KD86WyBcXHRdKig/OkFNfFBNKSk/KVsgXFx0XSojL2ksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdudW1iZXInOiAvKD86KD86XFxiXFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OkVbKy1dP1xcZCspP3wmW0hPXVtcXGRBLUZdKykoPzpbRlJEXXxVP1tJTFNdKT8vaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8Tm90aGluZ3xUcnVlKVxcYi9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzpBZGRIYW5kbGVyfEFkZHJlc3NPZnxBbGlhc3xBbmQoPzpBbHNvKT98QXN8Qm9vbGVhbnxCeVJlZnxCeXRlfEJ5VmFsfENhbGx8Q2FzZXxDYXRjaHxDKD86Qm9vbHxCeXRlfENoYXJ8RGF0ZXxEYmx8RGVjfEludHxMbmd8T2JqfFNCeXRlfFNob3J0fFNuZ3xTdHJ8VHlwZXxVSW50fFVMbmd8VVNob3J0KXxDaGFyfENsYXNzfENvbnN0fENvbnRpbnVlfEN1cnJlbmN5fERhdGV8RGVjaW1hbHxEZWNsYXJlfERlZmF1bHR8RGVsZWdhdGV8RGltfERpcmVjdENhc3R8RG98RG91YmxlfEVhY2h8RWxzZSg/OklmKT98RW5kKD86SWYpP3xFbnVtfEVyYXNlfEVycm9yfEV2ZW50fEV4aXR8RmluYWxseXxGb3J8RnJpZW5kfEZ1bmN0aW9ufEdldCg/OlR5cGV8WE1MTmFtZXNwYWNlKT98R2xvYmFsfEdvU3VifEdvVG98SGFuZGxlc3xJZnxJbXBsZW1lbnRzfEltcG9ydHN8SW58SW5oZXJpdHN8SW50ZWdlcnxJbnRlcmZhY2V8SXN8SXNOb3R8TGV0fExpYnxMaWtlfExvbmd8TG9vcHxNZXxNb2R8TW9kdWxlfE11c3QoPzpJbmhlcml0fE92ZXJyaWRlKXxNeSg/OkJhc2V8Q2xhc3MpfE5hbWVzcGFjZXxOYXJyb3dpbmd8TmV3fE5leHR8Tm90KD86SW5oZXJpdGFibGV8T3ZlcnJpZGFibGUpP3xPYmplY3R8T2Z8T258T3BlcmF0b3J8T3B0aW9uKD86YWwpP3xPcig/OkVsc2UpP3xPdXR8T3ZlcmxvYWRzfE92ZXJyaWRhYmxlfE92ZXJyaWRlc3xQYXJhbUFycmF5fFBhcnRpYWx8UHJpdmF0ZXxQcm9wZXJ0eXxQcm90ZWN0ZWR8UHVibGljfFJhaXNlRXZlbnR8UmVhZE9ubHl8UmVEaW18UmVtb3ZlSGFuZGxlcnxSZXN1bWV8UmV0dXJufFNCeXRlfFNlbGVjdHxTZXR8U2hhZG93c3xTaGFyZWR8c2hvcnR8U2luZ2xlfFN0YXRpY3xTdGVwfFN0b3B8U3RyaW5nfFN0cnVjdHVyZXxTdWJ8U3luY0xvY2t8VGhlbnxUaHJvd3xUb3xUcnl8VHJ5Q2FzdHxUeXBlfFR5cGVPZnxVKD86SW50ZWdlcnxMb25nfFNob3J0KXxVbnRpbHxVc2luZ3xWYXJpYW50fFdlbmR8V2hlbnxXaGlsZXxXaWRlbmluZ3xXaXRoKD86RXZlbnRzKT98V3JpdGVPbmx5fFhvcilcXGIvaSxcblx0J29wZXJhdG9yJzogL1srXFwtKi9cXFxcXjw9PiYjQCQlIV18XFxiXyg/PVsgXFx0XSpbXFxyXFxuXSkvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KCkuLDo/XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy52YiA9IFByaXNtLmxhbmd1YWdlc1sndmlzdWFsLWJhc2ljJ107XG5QcmlzbS5sYW5ndWFnZXMudmJhID0gUHJpc20ubGFuZ3VhZ2VzWyd2aXN1YWwtYmFzaWMnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLndhcnBzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogLyMuKnxcXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXFxcclxcbl18XFxcXC4pKlwifCcoPzpbXidcXFxcXFxyXFxuXXxcXFxcLikqJ3w8Jyg/OlteXFxcXCddfCcoPyE+KXxcXFxcLikqJz4vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiAvXFwkXFxTKy8sXG5cdCdtYWNybyc6IHtcblx0XHRwYXR0ZXJuOiAvQFxcUysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdC8vIFdhcnBTY3JpcHQgZG9lc24ndCBoYXZlIGFueSBrZXl3b3JkcywgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgdW5kZXIgdGhlIGNvbnRyb2wgY2F0ZWdvcnlcblx0Ly8gaHR0cHM6Ly93d3cud2FycDEwLmlvL3RhZ3MvY29udHJvbFxuXHQna2V5d29yZCc6IC9cXGIoPzpCUkVBS3xDSEVDS01BQ1JPfENPTlRJTlVFfENVREZ8REVGSU5FRHxERUZJTkVETUFDUk98RVZBTHxGQUlMfEZPUnxGT1JFQUNIfEZPUlNURVB8SUZUfElGVEV8TVNHRkFJTHxOUkVUVVJOfFJFVEhST1d8UkVUVVJOfFNXSVRDSHxUUll8VURGfFVOVElMfFdISUxFKVxcYi8sXG5cdCdudW1iZXInOiAvWystXT9cXGIoPzpOYU58SW5maW5pdHl8XFxkKyg/OlxcLlxcZCopPyg/OltFZV1bKy1dP1xcZCspP3wweFtcXGRhLWZBLUZdK3wwYlswMV0rKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OkZ8VHxmYWxzZXx0cnVlKVxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC88JXwlPnxbe31bXFxdKCldLyxcblx0Ly8gU29tZSBvcGVyYXRvcnMgZnJvbSB0aGUgXCJvcGVyYXRvcnNcIiBjYXRlZ29yeVxuXHQvLyBodHRwczovL3d3dy53YXJwMTAuaW8vdGFncy9vcGVyYXRvcnNcblx0J29wZXJhdG9yJzogLz09fCYmP3xcXHxcXHw/fFxcKlxcKj98Pj4+P3w8PHxbPD4hfl09P3xbLS8lXl18XFwrIT98XFxiKD86QU5EfE5PVHxPUilcXGIvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMud2FzbSA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0L1xcKDtbXFxzXFxTXSo/O1xcKS8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLzs7LiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFxbXFxzXFxTXXxbXlwiXFxcXF0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmFsaWdufG9mZnNldCk9Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvPS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzooPzpmMzJ8ZjY0fGkzMnxpNjQpKD86XFwuKD86YWJzfGFkZHxhbmR8Y2VpbHxjbHp8Y29uc3R8Y29udmVydF9bc3VdXFwvaSg/OjMyfDY0KXxjb3B5c2lnbnxjdHp8ZGVtb3RlXFwvZjY0fGRpdig/Ol9bc3VdKT98ZXF6P3xleHRlbmRfW3N1XVxcL2kzMnxmbG9vcnxnZSg/Ol9bc3VdKT98Z3QoPzpfW3N1XSk/fGxlKD86X1tzdV0pP3xsb2FkKD86KD86OHwxNnwzMilfW3N1XSk/fGx0KD86X1tzdV0pP3xtYXh8bWlufG11bHxuZWc/fG5lYXJlc3R8b3J8cG9wY250fHByb21vdGVcXC9mMzJ8cmVpbnRlcnByZXRcXC9bZmldKD86MzJ8NjQpfHJlbV9bc3VdfHJvdFtscl18c2hsfHNocl9bc3VdfHNxcnR8c3RvcmUoPzo4fDE2fDMyKT98c3VifHRydW5jKD86X1tzdV1cXC9mKD86MzJ8NjQpKT98d3JhcFxcL2k2NHx4b3IpKT98bWVtb3J5XFwuKD86Z3Jvd3xzaXplKSlcXGIvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvXFxiKD86YW55ZnVuY3xibG9ja3xicig/Ol9pZnxfdGFibGUpP3xjYWxsKD86X2luZGlyZWN0KT98ZGF0YXxkcm9wfGVsZW18ZWxzZXxlbmR8ZXhwb3J0fGZ1bmN8Z2V0Xyg/Omdsb2JhbHxsb2NhbCl8Z2xvYmFsfGlmfGltcG9ydHxsb2NhbHxsb29wfG1lbW9yeXxtb2R1bGV8bXV0fG5vcHxvZmZzZXR8cGFyYW18cmVzdWx0fHJldHVybnxzZWxlY3R8c2V0Xyg/Omdsb2JhbHxsb2NhbCl8c3RhcnR8dGFibGV8dGVlX2xvY2FsfHRoZW58dHlwZXx1bnJlYWNoYWJsZSlcXGIvXG5cdF0sXG5cdCd2YXJpYWJsZSc6IC9cXCRbXFx3ISMkJSYnKitcXC0uLzo8PT4/QFxcXFxeYHx+XSsvLFxuXHQnbnVtYmVyJzogL1srLV0/XFxiKD86XFxkKD86Xz9cXGQpKig/OlxcLlxcZCg/Ol8/XFxkKSopPyg/OltlRV1bKy1dP1xcZCg/Ol8/XFxkKSopP3wweFtcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1GXSkqKD86XFwuW1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLURdKSopPyg/OltwUF1bKy1dP1xcZCg/Ol8/XFxkKSopPylcXGJ8XFxiaW5mXFxifFxcYm5hbig/OjoweFtcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1EXSkqKT9cXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgaWQgPSAvKD86XFxCLXxcXGJffFxcYilbQS1aYS16XVtcXHctXSooPyFbXFx3LV0pLy5zb3VyY2U7XG5cdHZhciB0eXBlID1cblx0XHQnKD86JyArXG5cdFx0L1xcYig/OnVuc2lnbmVkXFxzKyk/bG9uZ1xccytsb25nKD8hW1xcdy1dKS8uc291cmNlICtcblx0XHQnfCcgK1xuXHRcdC9cXGIoPzp1bnJlc3RyaWN0ZWR8dW5zaWduZWQpXFxzK1thLXpdKyg/IVtcXHctXSkvLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvKD8hKD86dW5yZXN0cmljdGVkfHVuc2lnbmVkKVxcYikvLnNvdXJjZSArIGlkICsgLyg/Olxccyo8KD86W148Pl18PFtePD5dKj4pKj4pPy8uc291cmNlICtcblx0XHQnKScgKyAvKD86XFxzKlxcPyk/Ly5zb3VyY2U7XG5cblx0dmFyIHR5cGVJbnNpZGUgPSB7fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3dlYi1pZGwnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIlteXCJdKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxibmFtZXNwYWNlXFxzKykvLnNvdXJjZSArIGlkKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86aXRlcmFibGV8bWFwbGlrZXxzZXRsaWtlKVxccyo8KD86W148Pl18PFtePD5dKj4pKj4vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmF0dHJpYnV0ZXxjb25zdHxkZWxldGVyfGdldHRlcnxvcHRpb25hbHxzZXR0ZXIpXFxzKykvLnNvdXJjZSArIHR5cGUpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNhbGxiYWNrIHJldHVybiB0eXBlXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKCcgKyAvXFxiY2FsbGJhY2tcXHMrLy5zb3VyY2UgKyBpZCArIC9cXHMqPVxccyovLnNvdXJjZSArICcpJyArIHR5cGUpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHR5cGVkZWZcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxidHlwZWRlZlxcYlxccyopLy5zb3VyY2UgKyB0eXBlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmNhbGxiYWNrfGRpY3Rpb25hcnl8ZW51bXxpbnRlcmZhY2UoPzpcXHMrbWl4aW4pPylcXHMrKSg/ISg/OmludGVyZmFjZXxtaXhpbilcXGIpLy5zb3VyY2UgKyBpZCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBpbmhlcml0YW5jZVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyg6XFxzKikvLnNvdXJjZSArIGlkKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdH0sXG5cblx0XHRcdC8vIGluY2x1ZGVzIGFuZCBpbXBsZW1lbnRzXG5cdFx0XHRSZWdFeHAoaWQgKyAvKD89XFxzKyg/OmltcGxlbWVudHN8aW5jbHVkZXMpXFxiKS8uc291cmNlKSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiKD86aW1wbGVtZW50c3xpbmNsdWRlcylcXHMrKS8uc291cmNlICsgaWQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHQvLyBmdW5jdGlvbiByZXR1cm4gdHlwZSwgcGFyYW1ldGVyIHR5cGVzLCBhbmQgZGljdGlvbmFyeSBtZW1iZXJzXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0eXBlICsgJyg/PScgKyAvXFxzKig/OlxcLnszfVxccyopPy8uc291cmNlICsgaWQgKyAvXFxzKlsoKSw7PV0vLnNvdXJjZSArICcpJyksXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRdLFxuXG5cdFx0J2J1aWx0aW4nOiAvXFxiKD86QXJyYXlCdWZmZXJ8QmlnSW50NjRBcnJheXxCaWdVaW50NjRBcnJheXxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRhVmlld3xGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEZyb3plbkFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8T2JzZXJ2YWJsZUFycmF5fFByb21pc2V8VVNWU3RyaW5nfFVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXkpXFxiLyxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdC9cXGIoPzphc3luY3xhdHRyaWJ1dGV8Y2FsbGJhY2t8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5fGVudW18Z2V0dGVyfGltcGxlbWVudHN8aW5jbHVkZXN8aW5oZXJpdHxpbnRlcmZhY2V8bWl4aW58bmFtZXNwYWNlfG51bGx8b3B0aW9uYWx8b3J8cGFydGlhbHxyZWFkb25seXxyZXF1aXJlZHxzZXR0ZXJ8c3RhdGljfHN0cmluZ2lmaWVyfHR5cGVkZWZ8dW5yZXN0cmljdGVkKVxcYi8sXG5cdFx0XHQvLyB0eXBlIGtleXdvcmRzXG5cdFx0XHQvXFxiKD86YW55fGJpZ2ludHxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGl0ZXJhYmxlfGxvbmd8bWFwbGlrZXxvYmplY3R8b2N0ZXR8cmVjb3JkfHNlcXVlbmNlfHNldGxpa2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnNpZ25lZHx2b2lkKVxcYi9cblx0XHRdLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSktPyg/OjB4WzAtOWEtZl0rfCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT98TmFOfEluZmluaXR5KSg/IVtcXHctXSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC9cXC57M318Wz06Pzw+LV0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0uLDtdL1xuXHR9O1xuXG5cdGZvciAodmFyIGtleSBpbiBQcmlzbS5sYW5ndWFnZXNbJ3dlYi1pZGwnXSkge1xuXHRcdGlmIChrZXkgIT09ICdjbGFzcy1uYW1lJykge1xuXHRcdFx0dHlwZUluc2lkZVtrZXldID0gUHJpc20ubGFuZ3VhZ2VzWyd3ZWItaWRsJ11ba2V5XTtcblx0XHR9XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3dlYmlkbCddID0gUHJpc20ubGFuZ3VhZ2VzWyd3ZWItaWRsJ107XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLndnc2wgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdidWlsdGluLWF0dHJpYnV0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvKEApYnVpbHRpblxcKC4qP1xcKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eYnVpbHRpbi8sXG5cdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLF0vLFxuXHRcdFx0J2J1aWx0LWluLXZhbHVlcyc6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OmZyYWdfZGVwdGh8ZnJvbnRfZmFjaW5nfGdsb2JhbF9pbnZvY2F0aW9uX2lkfGluc3RhbmNlX2luZGV4fGxvY2FsX2ludm9jYXRpb25faWR8bG9jYWxfaW52b2NhdGlvbl9pbmRleHxudW1fd29ya2dyb3Vwc3xwb3NpdGlvbnxzYW1wbGVfaW5kZXh8c2FtcGxlX21hc2t8dmVydGV4X2luZGV4fHdvcmtncm91cF9pZClcXGIvLFxuXHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXHQnYXR0cmlidXRlcyc6IHtcblx0XHRwYXR0ZXJuOiAvKEApKD86YWxpZ258YmluZGluZ3xjb21wdXRlfGNvbnN0fGZyYWdtZW50fGdyb3VwfGlkfGludGVycG9sYXRlfGludmFyaWFudHxsb2NhdGlvbnxzaXplfHZlcnRleHx3b3JrZ3JvdXBfc2l6ZSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0fSxcblx0J2Z1bmN0aW9ucyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKGZuXFxzKylbX2EtekEtWl1cXHcqKD89Wyg8XSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJpdGNhc3R8YnJlYWt8Y2FzZXxjb25zdHxjb250aW51ZXxjb250aW51aW5nfGRlZmF1bHR8ZGlzY2FyZHxlbHNlfGVuYWJsZXxmYWxsdGhyb3VnaHxmbnxmb3J8ZnVuY3Rpb258aWZ8bGV0fGxvb3B8cHJpdmF0ZXxyZXR1cm58c3RvcmFnZXxzdHJ1Y3R8c3dpdGNofHR5cGV8dW5pZm9ybXx2YXJ8d2hpbGV8d29ya2dyb3VwKVxcYi8sXG5cdCdidWlsdGluJzogL1xcYig/OmFic3xhY29zfGFjb3NofGFsbHxhbnl8YXJyYXl8YXNpbnxhc2luaHxhdGFufGF0YW4yfGF0YW5ofGF0b21pY3xhdG9taWNBZGR8YXRvbWljQW5kfGF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWt8YXRvbWljRXhjaGFuZ2V8YXRvbWljTG9hZHxhdG9taWNNYXh8YXRvbWljTWlufGF0b21pY09yfGF0b21pY1N0b3JlfGF0b21pY1N1YnxhdG9taWNYb3J8Ym9vbHxjZWlsfGNsYW1wfGNvc3xjb3NofGNvdW50TGVhZGluZ1plcm9zfGNvdW50T25lQml0c3xjb3VudFRyYWlsaW5nWmVyb3N8Y3Jvc3N8ZGVncmVlc3xkZXRlcm1pbmFudHxkaXN0YW5jZXxkb3R8ZHBkeHxkcGR4Q29hcnNlfGRwZHhGaW5lfGRwZHl8ZHBkeUNvYXJzZXxkcGR5RmluZXxleHB8ZXhwMnxleHRyYWN0Qml0c3xmMzJ8ZjY0fGZhY2VGb3J3YXJkfGZpcnN0TGVhZGluZ0JpdHxmbG9vcnxmbWF8ZnJhY3R8ZnJleHB8ZndpZHRofGZ3aWR0aENvYXJzZXxmd2lkdGhGaW5lfGkzMnxpNjR8aW5zZXJ0Qml0c3xpbnZlcnNlU3FydHxsZGV4cHxsZW5ndGh8bG9nfGxvZzJ8bWF0WzItNF14WzItNF18bWF4fG1pbnxtaXh8bW9kZnxub3JtYWxpemV8b3ZlcnJpZGV8cGFjazJ4MTZmbG9hdHxwYWNrMngxNnNub3JtfHBhY2syeDE2dW5vcm18cGFjazR4OHNub3JtfHBhY2s0eDh1bm9ybXxwb3d8cHRyfHF1YW50aXplVG9GMTZ8cmFkaWFuc3xyZWZsZWN0fHJlZnJhY3R8cmV2ZXJzZUJpdHN8cm91bmR8c2FtcGxlcnxzYW1wbGVyX2NvbXBhcmlzb258c2VsZWN0fHNoaWZ0TGVmdHxzaGlmdFJpZ2h0fHNpZ258c2lufHNpbmh8c21vb3Roc3RlcHxzcXJ0fHN0YXRpY0Fzc2VydHxzdGVwfHN0b3JhZ2VCYXJyaWVyfHRhbnx0YW5ofHRleHR1cmVEaW1lbnNpb25zfHRleHR1cmVHYXRoZXJ8dGV4dHVyZUdhdGhlckNvbXBhcmV8dGV4dHVyZUxvYWR8dGV4dHVyZU51bUxheWVyc3x0ZXh0dXJlTnVtTGV2ZWxzfHRleHR1cmVOdW1TYW1wbGVzfHRleHR1cmVTYW1wbGV8dGV4dHVyZVNhbXBsZUJpYXN8dGV4dHVyZVNhbXBsZUNvbXBhcmV8dGV4dHVyZVNhbXBsZUNvbXBhcmVMZXZlbHx0ZXh0dXJlU2FtcGxlR3JhZHx0ZXh0dXJlU2FtcGxlTGV2ZWx8dGV4dHVyZVN0b3JlfHRleHR1cmVfMWR8dGV4dHVyZV8yZHx0ZXh0dXJlXzJkX2FycmF5fHRleHR1cmVfM2R8dGV4dHVyZV9jdWJlfHRleHR1cmVfY3ViZV9hcnJheXx0ZXh0dXJlX2RlcHRoXzJkfHRleHR1cmVfZGVwdGhfMmRfYXJyYXl8dGV4dHVyZV9kZXB0aF9jdWJlfHRleHR1cmVfZGVwdGhfY3ViZV9hcnJheXx0ZXh0dXJlX2RlcHRoX211bHRpc2FtcGxlZF8yZHx0ZXh0dXJlX211bHRpc2FtcGxlZF8yZHx0ZXh0dXJlX3N0b3JhZ2VfMWR8dGV4dHVyZV9zdG9yYWdlXzJkfHRleHR1cmVfc3RvcmFnZV8yZF9hcnJheXx0ZXh0dXJlX3N0b3JhZ2VfM2R8dHJhbnNwb3NlfHRydW5jfHUzMnx1NjR8dW5wYWNrMngxNmZsb2F0fHVucGFjazJ4MTZzbm9ybXx1bnBhY2syeDE2dW5vcm18dW5wYWNrNHg4c25vcm18dW5wYWNrNHg4dW5vcm18dmVjWzItNF18d29ya2dyb3VwQmFycmllcilcXGIvLFxuXHQnZnVuY3Rpb24tY2FsbHMnOiB7XG5cdFx0cGF0dGVybjogL1xcYltfYS16XVxcdyooPz1cXCgpL2ksXG5cdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OltBLVpdW0EtWmEtejAtOV0qKVxcYi8sXG5cdCdib29sLWxpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHRhbGlhczogJ2Jvb2xlYW4nLFxuXHR9LFxuXHQnaGV4LWludC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGIwW3hYXVswLTlhLWZBLUZdK1tpdV0/XFxiKD8hWy5wUF0pLyxcblx0XHRhbGlhczogJ251bWJlcicsXG5cdH0sXG5cdCdoZXgtZmxvYXQtbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiMFt4WF1bMC05YS1mQS1GXSooPzpcXC5bMC05YS1mQS1GXSopPyg/OltwUF1bKy1dP1xcZCtbZmhdPyk/LywgYWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdkZWNpbWFsLWZsb2F0LWxpdGVyYWwnOiBbXG5cdFx0eyBwYXR0ZXJuOiAvXFxkKlxcLlxcZCsoPzpbZUVdKD86XFwrfC0pP1xcZCspP1tmaF0/LywgYWxpYXM6ICdudW1iZXInIH0sXG5cdFx0eyBwYXR0ZXJuOiAvXFxkK1xcLlxcZCooPzpbZUVdKD86XFwrfC0pP1xcZCspP1tmaF0/LywgYWxpYXM6ICdudW1iZXInIH0sXG5cdFx0eyBwYXR0ZXJuOiAvXFxkK1tlRV0oPzpcXCt8LSk/XFxkK1tmaF0/LywgYWxpYXM6ICdudW1iZXInIH0sXG5cdFx0eyBwYXR0ZXJuOiAvXFxiXFxkK1tmaF1cXGIvLCBhbGlhczogJ251bWJlcicgfSxcblx0XSxcblx0J2ludC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXGQrW2l1XT9cXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0fSxcblx0J29wZXJhdG9yJzogW1xuXHRcdHsgcGF0dGVybjogLyg/OlxcXnx+fFxcfCg/IVxcfCl8XFx8XFx8fCYmfDw8fD4+fCEpKD8hPSkvIH0sXG5cdFx0eyBwYXR0ZXJuOiAvJig/IVsmPV0pLyB9LFxuXHRcdHsgcGF0dGVybjogLyg/OlxcKz18LT18XFwqPXxcXC89fCU9fFxcXj18Jj18XFx8PXw8PD18Pj49KS8gfSxcblx0XHR7IHBhdHRlcm46IC8oXnxbXjw+PSFdKT0oPyFbPT5dKS8sIGxvb2tiZWhpbmQ6IHRydWUgfSxcblx0XHR7IHBhdHRlcm46IC8oPzo9PXwhPXw8PXxcXCtcXCt8LS18KF58W149XSk+PSkvLCBsb29rYmVoaW5kOiB0cnVlIH0sXG5cdFx0eyBwYXR0ZXJuOiAvKD86KD86WyslXXwoPzpcXCooPyFcXHcpKSkoPyE9KSl8KD86LSg/IT4pKXwoPzpcXC8oPyFcXC8pKS8gfSxcblx0XHR7IHBhdHRlcm46IC8tPi8gfSxcblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1tAKCl7fVtcXF0sOzw+Oi5dLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy53aWtpID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHQnYmxvY2stY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblx0J2hlYWRpbmcnOiB7XG5cdFx0cGF0dGVybjogL14oPSspW149XFxyXFxuXS4qP1xcMS9tLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL149K3w9KyQvLFxuXHRcdFx0J2ltcG9ydGFudCc6IC8uKy9cblx0XHR9XG5cdH0sXG5cdCdlbXBoYXNpcyc6IHtcblx0XHQvLyBUT0RPIE11bHRpLWxpbmVcblx0XHRwYXR0ZXJuOiAvKCd7Miw1fSkuKz9cXDEvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2JvbGQtaXRhbGljJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCcnJycnKS4rPyg/PVxcMSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogWydib2xkJywgJ2l0YWxpYyddXG5cdFx0XHR9LFxuXHRcdFx0J2JvbGQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oJycnKVteJ10oPzouKj9bXiddKT8oPz1cXDEpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdpdGFsaWMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oJycpW14nXSg/Oi4qP1teJ10pPyg/PVxcMSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL14nJyt8JycrJC9cblx0XHR9XG5cdH0sXG5cdCdocic6IHtcblx0XHRwYXR0ZXJuOiAvXi17NCx9L20sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J3VybCc6IFtcblx0XHQvSVNCTiArKD86OTdbODldWyAtXT8pPyg/OlxcZFsgLV0/KXs5fVtcXGR4XVxcYnwoPzpQTUlEfFJGQykgK1xcZCsvaSxcblx0XHQvXFxbXFxbLis/XFxdXFxdfFxcWy4rP1xcXS9cblx0XSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdC9fX1tBLVpdK19fLyxcblx0XHQvLyBGSVhNRSBOZXN0ZWQgc3RydWN0dXJlcyBzaG91bGQgYmUgaGFuZGxlZFxuXHRcdC8vIHt7Zm9ybWF0bnVtOnt7I2V4cHI6e3t7M319fX19fX1cblx0XHQvXFx7ezN9Lis/XFx9ezN9Lyxcblx0XHQvXFx7XFx7Lis/XFx9XFx9L1xuXHRdLFxuXHQnc3ltYm9sJzogW1xuXHRcdC9eI3JlZGlyZWN0L2ltLFxuXHRcdC9+ezMsNX0vXG5cdF0sXG5cdC8vIEhhbmRsZSB0YWJsZSBhdHRyczpcblx0Ly8ge3xcblx0Ly8gISBzdHlsZT1cInRleHQtYWxpZ246bGVmdDtcInwgSXRlbVxuXHQvLyB8fVxuXHQndGFibGUtdGFnJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbfCFdKVt8IV0pW158XFxyXFxuXStcXHwoPyFcXHwpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWJsZS1iYXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXHwkLyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMubWFya3VwWyd0YWcnXS5pbnNpZGVcblx0XHR9XG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9eKD86XFx7XFx8fFxcfFxcfXxcXHwtfFsqIzo7IXxdKXxcXHxcXHx8ISEvbVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3dpa2knLCAndGFnJywge1xuXHQvLyBQcmV2ZW50IGhpZ2hsaWdodGluZyBpbnNpZGUgPG5vd2lraT4sIDxzb3VyY2U+IGFuZCA8cHJlPiB0YWdzXG5cdCdub3dpa2knOiB7XG5cdFx0cGF0dGVybjogLzwobm93aWtpfHByZXxzb3VyY2UpXFxiW14+XSo+W1xcc1xcU10qPzxcXC9cXDE+L2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndGFnJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPCg/Om5vd2lraXxwcmV8c291cmNlKVxcYltePl0qPnw8XFwvKD86bm93aWtpfHByZXxzb3VyY2UpPi9pLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ3RhZyddLmluc2lkZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy53b2xmcmFtID0ge1xuXHQnY29tbWVudCc6IC8vIEFsbG93IG9uZSBsZXZlbCBvZiBuZXN0aW5nIC0gbm90ZTogcmVnZXggdGFrZW4gZnJvbSBhcHBsZXNjaXB0XG5cdFx0L1xcKFxcKig/OlxcKFxcKig/OlteKl18XFwqKD8hXFwpKSkqXFwqXFwpfCg/IVxcKFxcKilbXFxzXFxTXSkqP1xcKlxcKS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OkFic3xBYnNBcmd8QWNjdXJhY3l8QmxvY2t8RG98Rm9yfEZ1bmN0aW9ufElmfE1hbmlwdWxhdGV8TW9kdWxlfE5lc3R8TmVzdExpc3R8Tm9uZXxSZXR1cm58U3dpdGNofFRhYmxlfFdoaWNofFdoaWxlKVxcYi8sXG5cdCdjb250ZXh0Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXHcrYCtcXHcqLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdibGFuayc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFx3K19cXGIvLFxuXHRcdGFsaWFzOiAncmVnZXgnXG5cdH0sXG5cdCdnbG9iYWwtdmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogL1xcJFxcdysvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfFRydWUpXFxiLyxcblx0J251bWJlcic6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib10pPyg/Oig/OlxcZHwweFtcXGRhLWZdKVtcXGRhLWZdKig/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspP2o/XFxiL2ksXG5cdCdvcGVyYXRvcic6IC9cXC9cXC58O3w9XFwufFxcXj18XFxeOj18Oj18PDx8Pj58PFxcfHxcXHw+fDo+fFxcfC0+fC0+fDwtfEBAQHxAQHxAfFxcL0B8PSE9fD09PXw9PXw9fFxcK3wtfFxcW1xcLy0rJT1cXF09P3whPXxcXCpcXCo/PT98XFwvXFwvPz0/fDxbPD0+XT98Pls9Pl0/fFsmfF5+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5tYXRoZW1hdGljYSA9IFByaXNtLmxhbmd1YWdlcy53b2xmcmFtO1xuUHJpc20ubGFuZ3VhZ2VzLndsID0gUHJpc20ubGFuZ3VhZ2VzLndvbGZyYW07XG5QcmlzbS5sYW5ndWFnZXMubmIgPSBQcmlzbS5sYW5ndWFnZXMud29sZnJhbTtcblxuLy8gaHR0cHM6Ly93cmVuLmlvL1xuXG5QcmlzbS5sYW5ndWFnZXMud3JlbiA9IHtcblx0Ly8gTXVsdGlsaW5lIGNvbW1lbnRzIGluIFdyZW4gY2FuIGhhdmUgbmVzdGVkIG11bHRpbGluZSBjb21tZW50c1xuXHQvLyBDb21tZW50czogLy8gYW5kIC8qICovXG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdC8vIHN1cHBvcnQgMyBsZXZlbHMgb2YgbmVzdGluZ1xuXHRcdFx0Ly8gcmVnZXg6IFxcL1xcKig/OlteKi9dfFxcKig/IVxcLyl8XFwvKD8hXFwqKXw8c2VsZj4pKlxcKlxcL1xuXHRcdFx0cGF0dGVybjogL1xcL1xcKig/OlteKi9dfFxcKig/IVxcLyl8XFwvKD8hXFwqKXxcXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8XFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopKSpcXCpcXC8pKlxcKlxcLykqXFwqXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cblx0Ly8gVHJpcGxlIHF1b3RlZCBzdHJpbmdzIGFyZSBtdWx0aWxpbmUgYnV0IGNhbm5vdCBoYXZlIGludGVycG9sYXRpb24gKHJhdyBzdHJpbmdzKVxuXHQvLyBCYXNlZCBvbiBwcmlzbS1weXRob24uanNcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cblx0Ly8gc2VlIGJlbG93XG5cdCdzdHJpbmctbGl0ZXJhbCc6IG51bGwsXG5cblx0Ly8gIyEvdXNyL2Jpbi9lbnYgd3JlbiBvbiB0aGUgZmlyc3QgbGluZVxuXHQnaGFzaGJhbmcnOiB7XG5cdFx0cGF0dGVybjogL14jIVxcLy4rLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXG5cdC8vIEF0dHJpYnV0ZXMgYXJlIHNwZWNpYWwga2V5d29yZHMgdG8gYWRkIG1ldGEgZGF0YSB0byBjbGFzc2VzXG5cdCdhdHRyaWJ1dGUnOiB7XG5cdFx0Ly8gIyEgYXR0cmlidXRlcyBhcmUgc3RvcmVkIGluIGNsYXNzIHByb3BlcnRpZXNcblx0XHQvLyAjIW15dmFyID0gdHJ1ZVxuXHRcdC8vICNhdHRyaWJ1dGVzIGFyZSBub3Qgc3RvcmVkIGFuZCBkaXNtaXNzZWQgYXQgY29tcGlsYXRpb25cblx0XHRwYXR0ZXJuOiAvIyE/WyBcXHRcXHUzMDAwXSpcXHcrLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdHtcblx0XHRcdC8vIGNsYXNzIGRlZmluaXRpb25cblx0XHRcdC8vIGNsYXNzIE1ldGEge31cblx0XHRcdHBhdHRlcm46IC8oXFxiY2xhc3NcXHMrKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gQSBjbGFzcyBtdXN0IGFsd2F5cyBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZS5cblx0XHQvLyBGaWxlLnJlYWRcblx0XHQvXFxiW0EtWl1bYS16XFxkX10qXFxiLyxcblx0XSxcblxuXHQvLyBBIGNvbnN0YW50IGNhbiBiZSBhIHZhcmlhYmxlLCBjbGFzcywgcHJvcGVydHkgb3IgbWV0aG9kLiBKdXN0IG5hbWVkIGluIGFsbCB1cHBlcmNhc2UgbGV0dGVyc1xuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aXFxkX10qXFxiLyxcblxuXHQnbnVsbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxibnVsbFxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xicmVha3xjbGFzc3xjb25zdHJ1Y3R8Y29udGludWV8ZWxzZXxmb3J8Zm9yZWlnbnxpZnxpbXBvcnR8aW58aXN8cmV0dXJufHN0YXRpY3xzdXBlcnx0aGlzfHZhcnx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiKD86MHhbXFxkYS1mXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGIvaSxcblxuXHQvLyBGdW5jdGlvbnMgY2FuIGJlIENsYXNzLm1ldGhvZCgpXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlsoe10pL2ksXG5cblx0J29wZXJhdG9yJzogLzw8fD4+fFs9ITw+XT0/fCYmfFxcfFxcfHxbLSsqLyV+XiZ8PzpdfFxcLnsyLDN9Lyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9Liw7XS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMud3Jlblsnc3RyaW5nLWxpdGVyYWwnXSA9IHtcblx0Ly8gQSBzaW5nbGUgcXVvdGUgc3RyaW5nIGlzIG11bHRpbGluZSBhbmQgY2FuIGhhdmUgaW50ZXJwb2xhdGlvbiAoc2ltaWxhciB0byBKUyBiYWNrdGlja3MgYGApXG5cdHBhdHRlcm46IC8oXnxbXlxcXFxcIl0pXCIoPzpbXlxcXFxcIiVdfFxcXFxbXFxzXFxTXXwlKD8hXFwoKXwlXFwoKD86W14oKV18XFwoKD86W14oKV18XFwoW14pXSpcXCkpKlxcKSkqXFwpKSpcIi8sXG5cdGxvb2tiZWhpbmQ6IHRydWUsXG5cdGdyZWVkeTogdHJ1ZSxcblx0aW5zaWRlOiB7XG5cdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHQvLyBcIiUoaW50ZXJwb2xhdGlvbilcIlxuXHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKSVcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXChbXildKlxcKSkqXFwpKSpcXCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiglXFwoKVtcXHNcXFNdKyg/PVxcKSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLndyZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14lXFwofFxcKSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0fVxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMueGVvcmEgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7XG5cdFx0J2NvbnN0YW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcJCg/OkRvbWFpbkNvbnRlbnRzfFBhZ2VSZW5kZXJEdXJhdGlvbilcXCQvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFwkL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkQD8oPzojK3xbLSsqfj1eXSk/W1xcdy5dK1xcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bJC5dL1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyMrfFstKyp+PV5AXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLWlubGluZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCRGOlstXFx3Ll0rXFw/Wy1cXHcuXSsoPzosKD86KD86QFstI10qXFx3K1xcLltcXHcrLl1cXC4qKSpcXHwpKig/Oig/OltcXHcrXXxbLSMqLn5eXStbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qfCg/OkBbLSNdKlxcdytcXC5bXFx3Ky5dXFwuKikrKD86KD86W1xcdytdfFstIyp+Xl1bLSMqLn5eXSpbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qKT8pPyk/XFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/OlssfF0pQD8oPzojK3xbLSsqfj1eXSk/W1xcdy5dKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bLC58XS9cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8jK3xbLSsqfj1eQF0vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcJFxcdzp8WyQ6Py4sfF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJFhGOlxce1stXFx3Ll0rXFw/Wy1cXHcuXSsoPzosKD86KD86QFstI10qXFx3K1xcLltcXHcrLl1cXC4qKSpcXHwpKig/Oig/OltcXHcrXXxbLSMqLn5eXStbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qfCg/OkBbLSNdKlxcdytcXC5bXFx3Ky5dXFwuKikrKD86KD86W1xcdytdfFstIyp+Xl1bLSMqLn5eXSpbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qKT8pPyk/XFx9OlhGXFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1skOnt9Py4sfF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZS1pbmxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkXFx3KD86I1xcZCtcXCs/KT8oPzpcXFtbLVxcdy5dK1xcXSk/OlstXFwvXFx3Ll0rXFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcJCg/Olxcdzp8Qyg/OlxcW3wjXFxkKSk/fFs6e1tcXF1dLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0YWcnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8jXFxkL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlLWJsb2NrLW9wZW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkXFx3KzpcXHt8XFwkXFx3KD86I1xcZCtcXCs/KT8oPzpcXFtbLVxcdy5dK1xcXSk/OlstXFx3Ll0rOlxceyg/OiFbQS1aXSspPy8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpcXHc6fEMoPzpcXFt8I1xcZCkpP3xbOntbXFxdXS8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndGFnJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvI1xcZC9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyFbQS1aXSskLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyEvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZS1ibG9jay1zZXBhcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx9OlstXFx3Ll0rOlxcey8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bOnt9XS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlLWJsb2NrLWNsb3NlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcfTpbLVxcdy5dK1xcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bOnt9JF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ3B1bmN0dWF0aW9uJywge1xuXHRcdCd2YXJpYWJsZSc6IFByaXNtLmxhbmd1YWdlcy54ZW9yYVsnZnVuY3Rpb24taW5saW5lJ10uaW5zaWRlWyd2YXJpYWJsZSddXG5cdH0sIFByaXNtLmxhbmd1YWdlcy54ZW9yYVsnZnVuY3Rpb24tYmxvY2snXSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnhlb3JhY3ViZSA9IFByaXNtLmxhbmd1YWdlcy54ZW9yYTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIElmIHRoZSBnaXZlbiBsYW5ndWFnZSBpcyBwcmVzZW50LCBpdCB3aWxsIGluc2VydCB0aGUgZ2l2ZW4gZG9jIGNvbW1lbnQgZ3JhbW1hciB0b2tlbiBpbnRvIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ1xuXHQgKiBAcGFyYW0ge2FueX0gZG9jQ29tbWVudFxuXHQgKi9cblx0ZnVuY3Rpb24gaW5zZXJ0RG9jQ29tbWVudChsYW5nLCBkb2NDb21tZW50KSB7XG5cdFx0aWYgKFByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuXHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShsYW5nLCAnY29tbWVudCcsIHtcblx0XHRcdFx0J2RvYy1jb21tZW50JzogZG9jQ29tbWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHRhZyA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnO1xuXG5cdHZhciBzbGFzaERvY0NvbW1lbnQgPSB7XG5cdFx0cGF0dGVybjogL1xcL1xcL1xcLy4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWcnOiB0YWdcblx0XHR9XG5cdH07XG5cdHZhciB0aWNrRG9jQ29tbWVudCA9IHtcblx0XHRwYXR0ZXJuOiAvJycnLiovLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHRhZ1xuXHRcdH1cblx0fTtcblxuXHRpbnNlcnREb2NDb21tZW50KCdjc2hhcnAnLCBzbGFzaERvY0NvbW1lbnQpO1xuXHRpbnNlcnREb2NDb21tZW50KCdmc2hhcnAnLCBzbGFzaERvY0NvbW1lbnQpO1xuXHRpbnNlcnREb2NDb21tZW50KCd2Ym5ldCcsIHRpY2tEb2NDb21tZW50KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMueG9qbyA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyg/Oid8XFwvXFwvfFJlbVxcYikuKy9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8W15cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IFtcblx0XHQvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OkVbKy1dP1xcZCspPy9pLFxuXHRcdC8mW2JjaG91XVthLXpcXGRdKy9pXG5cdF0sXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLyMoPzpFbHNlfEVsc2VJZnxFbmRpZnxJZnxQcmFnbWEpXFxiL2ksXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86QWRkSGFuZGxlcnxBcHB8QXJyYXl8QXMoPzpzaWducyk/fEF1dG98Qm9vbGVhbnxCcmVha3xCeSg/OlJlZnxWYWwpfEJ5dGV8Q2FsbHxDYXNlfENhdGNofENGU3RyaW5nUmVmfENHRmxvYXR8Q2xhc3N8Q29sb3J8Q29uc3R8Q29udGludWV8Q1N0cmluZ3xDdXJyZW5jeXxDdXJyZW50TWV0aG9kTmFtZXxEZWNsYXJlfERlbGVnYXRlfERpbXxEbyg/OnVibGV8d25Ubyk/fEVhY2h8RWxzZSg/OklmKT98RW5kfEVudW1lcmF0aW9ufEV2ZW50fEV4Y2VwdGlvbnxFeGl0fEV4dGVuZHN8RmFsc2V8RmluYWxseXxGb3J8RnVuY3Rpb258R2V0fEdldFR5cGVJbmZvfEdsb2JhbHxHT1RPfElmfEltcGxlbWVudHN8SW58SW5oZXJpdHN8SW50KD86OHwxNnwzMnw2NHxlZ2VyfGVyZmFjZSk/fExpYnxMb29wfE1lfE1vZHVsZXxOZXh0fE5pbHxPYmplY3R8T3B0aW9uYWx8T1NUeXBlfFBhcmFtQXJyYXl8UHJpdmF0ZXxQcm9wZXJ0eXxQcm90ZWN0ZWR8UFN0cmluZ3xQdHJ8UmFpc2UoPzpFdmVudCk/fFJlRGltfFJlbW92ZUhhbmRsZXJ8UmV0dXJufFNlbGVjdCg/Om9yKT98U2VsZnxTZXR8U2hhcmVkfFNob3J0fFNpbmdsZXxTb2Z0fFN0YXRpY3xTdGVwfFN0cmluZ3xTdWJ8U3VwZXJ8VGV4dHxUaGVufFRvfFRydWV8VHJ5fFVib3VuZHxVSW50KD86OHwxNnwzMnw2NHxlZ2VyKT98VW50aWx8VXNpbmd8VmFyKD86aWFudCk/fFdlbmR8V2hpbGV8V2luZG93UHRyfFdTdHJpbmcpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC88Wz0+XT98Pj0/fFsrXFwtKlxcL1xcXFxePV18XFxiKD86QWRkcmVzc09mfEFuZHxDdHlwZXxJc0E/fE1vZHxOZXd8Tm90fE9yfFdlYWtBZGRyZXNzT2Z8WG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOzooKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnhxdWVyeSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHtcblx0XHQneHF1ZXJ5LWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwoOltcXHNcXFNdKj86XFwpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcMVxcMXwoPyFcXDEpW1xcc1xcU10pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdleHRlbnNpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwoIy4rPyNcXCkvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiAvXFwkWy1cXHc6XSsvLFxuXHRcdCdheGlzJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLV0pKD86YW5jZXN0b3IoPzotb3Itc2VsZik/fGF0dHJpYnV0ZXxjaGlsZHxkZXNjZW5kYW50KD86LW9yLXNlbGYpP3xmb2xsb3dpbmcoPzotc2libGluZyk/fHBhcmVudHxwcmVjZWRpbmcoPzotc2libGluZyk/fHNlbGYpKD89OjopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQtb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W146LV0pXFxiKD86YW5kfGNhc3RhYmxlIGFzfGRpdnxlcXxleGNlcHR8Z2V8Z3R8aWRpdnxpbnN0YW5jZSBvZnxpbnRlcnNlY3R8aXN8bGV8bHR8bW9kfG5lfG9yfHVuaW9uKVxcYig/PSR8W146LV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W146LV0pXFxiKD86YXN8YXNjZW5kaW5nfGF0fGJhc2UtdXJpfGJvdW5kYXJ5LXNwYWNlfGNhc2V8Y2FzdCBhc3xjb2xsYXRpb258Y29uc3RydWN0aW9ufGNvcHktbmFtZXNwYWNlc3xkZWNsYXJlfGRlZmF1bHR8ZGVzY2VuZGluZ3xlbHNlfGVtcHR5ICg/OmdyZWF0ZXN0fGxlYXN0KXxlbmNvZGluZ3xldmVyeXxleHRlcm5hbHxmb3J8ZnVuY3Rpb258aWZ8aW1wb3J0fGlufGluaGVyaXR8bGF4fGxldHxtYXB8bW9kdWxlfG5hbWVzcGFjZXxuby1pbmhlcml0fG5vLXByZXNlcnZlfG9wdGlvbnxvcmRlcig/OiBieXxlZHxpbmcpP3xwcmVzZXJ2ZXxyZXR1cm58c2F0aXNmaWVzfHNjaGVtYXxzb21lfHN0YWJsZXxzdHJpY3R8c3RyaXB8dGhlbnx0b3x0cmVhdCBhc3x0eXBlc3dpdGNofHVub3JkZXJlZHx2YWxpZGF0ZXx2YXJpYWJsZXx2ZXJzaW9ufHdoZXJlfHhxdWVyeSlcXGIoPz0kfFteOi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiAvW1xcdy1dKyg/OjpbXFx3LV0rKSooPz1cXHMqXFwoKS8sXG5cdFx0J3hxdWVyeS1lbGVtZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhlbGVtZW50XFxzKylbXFx3LV0rKD86OltcXHctXSspKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd0YWcnXG5cdFx0fSxcblx0XHQneHF1ZXJ5LWF0dHJpYnV0ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oYXR0cmlidXRlXFxzKylbXFx3LV0rKD86OltcXHctXSspKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdFx0fSxcblx0XHQnYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXjotXSlcXGIoPzphdHRyaWJ1dGV8Y29tbWVudHxkb2N1bWVudHxlbGVtZW50fHByb2Nlc3NpbmctaW5zdHJ1Y3Rpb258dGV4dHx4czooPzpFTlRJVElFU3xFTlRJVFl8SUR8SURSRUZTP3xOQ05hbWV8Tk1UT0tFTlM/fE5PVEFUSU9OfE5hbWV8UU5hbWV8YW55QXRvbWljVHlwZXxhbnlUeXBlfGFueVVSSXxiYXNlNjRCaW5hcnl8Ym9vbGVhbnxieXRlfGRhdGV8ZGF0ZVRpbWV8ZGF5VGltZUR1cmF0aW9ufGRlY2ltYWx8ZG91YmxlfGR1cmF0aW9ufGZsb2F0fGdEYXl8Z01vbnRofGdNb250aERheXxnWWVhcnxnWWVhck1vbnRofGhleEJpbmFyeXxpbnR8aW50ZWdlcnxsYW5ndWFnZXxsb25nfG5lZ2F0aXZlSW50ZWdlcnxub25OZWdhdGl2ZUludGVnZXJ8bm9uUG9zaXRpdmVJbnRlZ2VyfG5vcm1hbGl6ZWRTdHJpbmd8cG9zaXRpdmVJbnRlZ2VyfHNob3J0fHN0cmluZ3x0aW1lfHRva2VufHVuc2lnbmVkKD86Qnl0ZXxJbnR8TG9uZ3xTaG9ydCl8dW50eXBlZCg/OkF0b21pYyk/fHllYXJNb250aER1cmF0aW9uKSlcXGIoPz0kfFteOi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT8oPzpFWystXT9cXGQrKT8vLFxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdC9bKyo9P3xAXXxcXC5cXC4/fDo9fCE9fDxbPTxdP3w+Wz0+XT8vLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccyktKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXSgpe30sOzovXS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnhxdWVyeS50YWcucGF0dGVybiA9IC88XFwvPyg/IVxcZClbXlxccz5cXC89JDwlXSsoPzpcXHMrW15cXHM+XFwvPV0rKD86PSg/OihcInwnKSg/OlxcXFxbXFxzXFxTXXxcXHsoPyFcXHspKD86XFx7KD86XFx7W157fV0qXFx9fFtee31dKSpcXH18W157fV0pK1xcfXwoPyFcXDEpW15cXFxcXSkqXFwxfFteXFxzJ1wiPj1dKykpPykqXFxzKlxcLz8+Lztcblx0UHJpc20ubGFuZ3VhZ2VzLnhxdWVyeVsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10ucGF0dGVybiA9IC89KD86KFwifCcpKD86XFxcXFtcXHNcXFNdfFxceyg/IVxceykoPzpcXHsoPzpcXHtbXnt9XSpcXH18W157fV0pKlxcfXxbXnt9XSkrXFx9fCg/IVxcMSlbXlxcXFxdKSpcXDF8W15cXHMnXCI+PV0rKS87XG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnlbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsncHVuY3R1YXRpb24nXSA9IC9ePVwifFwiJC87XG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnlbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsnZXhwcmVzc2lvbiddID0ge1xuXHRcdC8vIEFsbG93IGZvciB0d28gbGV2ZWxzIG9mIG5lc3Rpbmdcblx0XHRwYXR0ZXJuOiAvXFx7KD8hXFx7KSg/Olxceyg/Olxce1tee31dKlxcfXxbXnt9XSkqXFx9fFtee31dKStcXH0vLFxuXHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnhxdWVyeSxcblx0XHRhbGlhczogJ2xhbmd1YWdlLXhxdWVyeSdcblx0fTtcblxuXHQvLyBUaGUgZm9sbG93aW5nIHdpbGwgaGFuZGxlIHBsYWluIHRleHQgaW5zaWRlIHRhZ3Ncblx0dmFyIHN0cmluZ2lmeVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiB0b2tlbjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB0b2tlbi5jb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHRva2VuLmNvbnRlbnQ7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbi5jb250ZW50Lm1hcChzdHJpbmdpZnlUb2tlbikuam9pbignJyk7XG5cdH07XG5cblx0dmFyIHdhbGtUb2tlbnMgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG5cdFx0dmFyIG9wZW5lZFRhZ3MgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXHRcdFx0dmFyIG5vdFRhZ05vckJyYWNlID0gZmFsc2U7XG5cblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmICh0b2tlbi50eXBlID09PSAndGFnJyAmJiB0b2tlbi5jb250ZW50WzBdICYmIHRva2VuLmNvbnRlbnRbMF0udHlwZSA9PT0gJ3RhZycpIHtcblx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIHRhZywgbm93IGZpbmQgaXRzIGtpbmRcblxuXHRcdFx0XHRcdGlmICh0b2tlbi5jb250ZW50WzBdLmNvbnRlbnRbMF0uY29udGVudCA9PT0gJzwvJykge1xuXHRcdFx0XHRcdFx0Ly8gQ2xvc2luZyB0YWdcblx0XHRcdFx0XHRcdGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLnRhZ05hbWUgPT09IHN0cmluZ2lmeVRva2VuKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFsxXSkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gUG9wIG1hdGNoaW5nIG9wZW5pbmcgdGFnXG5cdFx0XHRcdFx0XHRcdG9wZW5lZFRhZ3MucG9wKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi5jb250ZW50W3Rva2VuLmNvbnRlbnQubGVuZ3RoIC0gMV0uY29udGVudCA9PT0gJy8+Jykge1xuXHRcdFx0XHRcdFx0XHQvLyBBdXRvY2xvc2VkIHRhZywgaWdub3JlXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBPcGVuaW5nIHRhZ1xuXHRcdFx0XHRcdFx0XHRvcGVuZWRUYWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHRhZ05hbWU6IHN0cmluZ2lmeVRva2VuKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFsxXSksXG5cdFx0XHRcdFx0XHRcdFx0b3BlbmVkQnJhY2VzOiAwXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAneycgJiZcblx0XHRcdFx0XHQvLyBJZ25vcmUgYHt7YFxuXHRcdFx0XHRcdCghdG9rZW5zW2kgKyAxXSB8fCB0b2tlbnNbaSArIDFdLnR5cGUgIT09ICdwdW5jdHVhdGlvbicgfHwgdG9rZW5zW2kgKyAxXS5jb250ZW50ICE9PSAneycpICYmXG5cdFx0XHRcdFx0KCF0b2tlbnNbaSAtIDFdIHx8IHRva2Vuc1tpIC0gMV0udHlwZSAhPT0gJ3BsYWluLXRleHQnIHx8IHRva2Vuc1tpIC0gMV0uY29udGVudCAhPT0gJ3snKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBIZXJlIHdlIG1pZ2h0IGhhdmUgZW50ZXJlZCBhbiBYUXVlcnkgZXhwcmVzc2lvbiBpbnNpZGUgYSB0YWdcblx0XHRcdFx0XHRvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzKys7XG5cblx0XHRcdFx0fSBlbHNlIGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcyA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAnfScpIHtcblxuXHRcdFx0XHRcdC8vIEhlcmUgd2UgbWlnaHQgaGF2ZSBsZWZ0IGFuIFhRdWVyeSBleHByZXNzaW9uIGluc2lkZSBhIHRhZ1xuXHRcdFx0XHRcdG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMtLTtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKHRva2VuLnR5cGUgIT09ICdjb21tZW50Jykge1xuXHRcdFx0XHRcdG5vdFRhZ05vckJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG5vdFRhZ05vckJyYWNlIHx8IHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiBvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gSGVyZSB3ZSBhcmUgaW5zaWRlIGEgdGFnLCBhbmQgbm90IGluc2lkZSBhbiBYUXVlcnkgZXhwcmVzc2lvbi5cblx0XHRcdFx0XHQvLyBUaGF0J3MgcGxhaW4gdGV4dDogZHJvcCBhbnkgdG9rZW5zIG1hdGNoZWQuXG5cdFx0XHRcdFx0dmFyIHBsYWluVGV4dCA9IHN0cmluZ2lmeVRva2VuKHRva2VuKTtcblxuXHRcdFx0XHRcdC8vIEFuZCBtZXJnZSB0ZXh0IHdpdGggYWRqYWNlbnQgdGV4dFxuXHRcdFx0XHRcdGlmIChpIDwgdG9rZW5zLmxlbmd0aCAtIDEgJiYgKHR5cGVvZiB0b2tlbnNbaSArIDFdID09PSAnc3RyaW5nJyB8fCB0b2tlbnNbaSArIDFdLnR5cGUgPT09ICdwbGFpbi10ZXh0JykpIHtcblx0XHRcdFx0XHRcdHBsYWluVGV4dCArPSBzdHJpbmdpZnlUb2tlbih0b2tlbnNbaSArIDFdKTtcblx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoaSArIDEsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgKHR5cGVvZiB0b2tlbnNbaSAtIDFdID09PSAnc3RyaW5nJyB8fCB0b2tlbnNbaSAtIDFdLnR5cGUgPT09ICdwbGFpbi10ZXh0JykpIHtcblx0XHRcdFx0XHRcdHBsYWluVGV4dCA9IHN0cmluZ2lmeVRva2VuKHRva2Vuc1tpIC0gMV0pICsgcGxhaW5UZXh0O1xuXHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZShpIC0gMSwgMSk7XG5cdFx0XHRcdFx0XHRpLS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKC9eXFxzKyQvLnRlc3QocGxhaW5UZXh0KSkge1xuXHRcdFx0XHRcdFx0dG9rZW5zW2ldID0gcGxhaW5UZXh0O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0b2tlbnNbaV0gPSBuZXcgUHJpc20uVG9rZW4oJ3BsYWluLXRleHQnLCBwbGFpblRleHQsIG51bGwsIHBsYWluVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0b2tlbi5jb250ZW50ICYmIHR5cGVvZiB0b2tlbi5jb250ZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHR3YWxrVG9rZW5zKHRva2VuLmNvbnRlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09ICd4cXVlcnknKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHdhbGtUb2tlbnMoZW52LnRva2Vucyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy55YW5nID0ge1xuXHQvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjAyMCNwYWdlLTM0XG5cdC8vIGh0dHA6Ly93d3cueWFuZy1jZW50cmFsLm9yZy90d2lraS9iaW4vdmlldy9NYWluL1lhbmdFeGFtcGxlc1xuXHQnY29tbWVudCc6IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFxcIl18XFxcXC4pKlwifCdbXiddKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W3t9O1xcclxcbl1bIFxcdF0qKVthLXpfXVtcXHcuLV0qL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbmFtZXNwYWNlJzoge1xuXHRcdHBhdHRlcm46IC8oXFxzKVthLXpfXVtcXHcuLV0qKD89OikvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcKy8sXG5cdCdwdW5jdHVhdGlvbic6IC9be307Ol0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0ZnVuY3Rpb24gbGl0ZXJhbChzdHIpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyOyB9O1xuXHR9XG5cblx0dmFyIGtleXdvcmQgPSAvXFxiKD86YWxpZ258YWxsb3d6ZXJvfGFuZHxhbnlmcmFtZXxhbnl0eXBlfGFzbXxhc3luY3xhd2FpdHxicmVha3xjYW5jZWx8Y2F0Y2h8Y29tcHRpbWV8Y29uc3R8Y29udGludWV8ZGVmZXJ8ZWxzZXxlbnVtfGVycmRlZmVyfGVycm9yfGV4cG9ydHxleHRlcm58Zm58Zm9yfGlmfGlubGluZXxsaW5rc2VjdGlvbnxuYWtlZGNjfG5vYWxpYXN8bm9zdXNwZW5kfG51bGx8b3J8b3JlbHNlfHBhY2tlZHxwcm9taXNlfHB1YnxyZXN1bWV8cmV0dXJufHN0ZGNhbGxjY3xzdHJ1Y3R8c3VzcGVuZHxzd2l0Y2h8dGVzdHx0aHJlYWRsb2NhbHx0cnl8dW5kZWZpbmVkfHVuaW9ufHVucmVhY2hhYmxlfHVzaW5nbmFtZXNwYWNlfHZhcnx2b2xhdGlsZXx3aGlsZSlcXGIvO1xuXG5cdHZhciBJREVOVElGSUVSID0gJ1xcXFxiKD8hJyArIGtleXdvcmQuc291cmNlICsgJykoPyFcXFxcZClcXFxcdytcXFxcYic7XG5cdHZhciBBTElHTiA9IC9hbGlnblxccypcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKS8uc291cmNlO1xuXHR2YXIgUFJFRklYX1RZUEVfT1AgPSAvKD86XFw/fFxcYnByb21pc2UtPnwoPzpcXFtbXltcXF1dKlxcXXxcXCooPyFcXCopfFxcKlxcKikoPzpcXHMqPEFMSUdOPnxcXHMqY29uc3RcXGJ8XFxzKnZvbGF0aWxlXFxifFxccyphbGxvd3plcm9cXGIpKikvLnNvdXJjZS5yZXBsYWNlKC88QUxJR04+L2csIGxpdGVyYWwoQUxJR04pKTtcblx0dmFyIFNVRkZJWF9FWFBSID0gLyg/OlxcYnByb21pc2VcXGJ8KD86XFxiZXJyb3JcXC4pPzxJRD4oPzpcXC48SUQ+KSooPyFcXHMrPElEPikpLy5zb3VyY2UucmVwbGFjZSgvPElEPi9nLCBsaXRlcmFsKElERU5USUZJRVIpKTtcblx0dmFyIFRZUEUgPSAnKD8hXFxcXHMpKD86IT9cXFxccyooPzonICsgUFJFRklYX1RZUEVfT1AgKyAnXFxcXHMqKSonICsgU1VGRklYX0VYUFIgKyAnKSsnO1xuXG5cdC8qXG5cdCAqIEEgc2ltcGxpZmllZCBncmFtbWFyIGZvciBaaWcgY29tcGlsZSB0aW1lIHR5cGUgbGl0ZXJhbHM6XG5cdCAqXG5cdCAqIFR5cGVFeHByID0gKCBcIiFcIj8gUFJFRklYX1RZUEVfT1AqIFNVRkZJWF9FWFBSICkrXG5cdCAqXG5cdCAqIFNVRkZJWF9FWFBSID0gKCBcXGIgXCJwcm9taXNlXCIgXFxiIHwgKCBcXGIgXCJlcnJvclwiIFwiLlwiICk/IElERU5USUZJRVIgKCBcIi5cIiBJREVOVElGSUVSICkqICg/ISBcXHMrIElERU5USUZJRVIgKSApXG5cdCAqXG5cdCAqIFBSRUZJWF9UWVBFX09QID0gXCI/XCJcblx0ICogICAgICAgICAgICAgICAgfCBcXGIgXCJwcm9taXNlXCIgXCItPlwiXG5cdCAqICAgICAgICAgICAgICAgIHwgKCBcIltcIiBbXlxcW1xcXV0qIFwiXVwiIHwgXCIqXCIgfCBcIioqXCIgKSAoIEFMSUdOIHwgXCJjb25zdFwiIFxcYiB8IFwidm9sYXRpbGVcIiBcXGIgfCBcImFsbG93emVyb1wiIFxcYiApKlxuXHQgKlxuXHQgKiBBTElHTiA9IFwiYWxpZ25cIiBcIihcIiAoIFteKCldIHwgXCIoXCIgW14oKV0qIFwiKVwiICkqIFwiKVwiXG5cdCAqXG5cdCAqIElERU5USUZJRVIgPSBcXGIgKD8hIEtFWVdPUkQgKSBbYS16QS1aX10gXFx3KiBcXGJcblx0ICpcblx0Ki9cblxuXHRQcmlzbS5sYW5ndWFnZXMuemlnID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvXFwvWy8hXS4qLyxcblx0XHRcdFx0YWxpYXM6ICdkb2MtY29tbWVudCdcblx0XHRcdH0sXG5cdFx0XHQvXFwvezJ9LiovXG5cdFx0XSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBcInN0cmluZ1wiIGFuZCBjXCJzdHJpbmdcIlxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcQF0pYz9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG11bHRpbGluZSBzdHJpbmdzIGFuZCBjLXN0cmluZ3Ncblx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXSkoWyBcXHRdK2M/XFxcXHsyfSkuKig/Oig/Olxcclxcbj98XFxuKVxcMi4qKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjaGFyJzoge1xuXHRcdFx0Ly8gY2hhcmFjdGVycyAnYScsICdcXG4nLCAnXFx4RkYnLCAnXFx1ezEwRkZGRn0nXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSknKD86W14nXFxcXFxcclxcbl18W1xcdUQ4MDAtXFx1REZGRl17Mn18XFxcXCg/Oi58eFthLWZBLUZcXGRdezJ9fHVcXHtbYS1mQS1GXFxkXXsxLDZ9XFx9KSknLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdidWlsdGluJzogL1xcQkAoPyFcXGQpXFx3Kyg/PVxccypcXCgpLyxcblx0XHQnbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmJyZWFrfGNvbnRpbnVlKVxccyo6XFxzKilcXHcrXFxifFxcYig/IVxcZClcXHcrXFxiKD89XFxzKjpcXHMqKD86XFx7fHdoaWxlXFxiKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHQvLyBjb25zdCBGb28gPSBzdHJ1Y3Qge307XG5cdFx0XHQvXFxiKD8hXFxkKVxcdysoPz1cXHMqPVxccyooPzooPzpleHRlcm58cGFja2VkKVxccyspPyg/OmVudW18c3RydWN0fHVuaW9uKVxccypbKHtdKS8sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNvbnN0IHg6IGkzMiA9IDk7XG5cdFx0XHRcdC8vIHZhciB4OiBCYXI7XG5cdFx0XHRcdC8vIGZuIGZvbyh4OiBib29sLCB5OiBmMzIpIHZvaWQge31cblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oOlxccyopPFRZUEU+KD89XFxzKig/OjxBTElHTj5cXHMqKT9bPTssKV0pfDxUWVBFPig/PVxccyooPzo8QUxJR04+XFxzKik/XFx7KS8uc291cmNlLnJlcGxhY2UoLzxUWVBFPi9nLCBsaXRlcmFsKFRZUEUpKS5yZXBsYWNlKC88QUxJR04+L2csIGxpdGVyYWwoQUxJR04pKSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGV4dGVybiBmbiBmb28oeDogZjY0KSBmNjQ7IChvcHRpb25hbCBhbGlnbm1lbnQpXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcKVxccyopPFRZUEU+KD89XFxzKig/OjxBTElHTj5cXHMqKT87KS8uc291cmNlLnJlcGxhY2UoLzxUWVBFPi9nLCBsaXRlcmFsKFRZUEUpKS5yZXBsYWNlKC88QUxJR04+L2csIGxpdGVyYWwoQUxJR04pKSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdidWlsdGluLXR5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YW55ZXJyb3J8Ym9vbHxjX3U/KD86aW50fGxvbmd8bG9uZ2xvbmd8c2hvcnQpfGNfbG9uZ2RvdWJsZXxjX3ZvaWR8Y29tcHRpbWVfKD86ZmxvYXR8aW50KXxmKD86MTZ8MzJ8NjR8MTI4KXxbaXVdKD86OHwxNnwzMnw2NHwxMjh8c2l6ZSl8bm9yZXR1cm58dHlwZXx2b2lkKVxcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IGtleXdvcmQsXG5cdFx0J2Z1bmN0aW9uJzogL1xcYig/IVxcZClcXHcrKD89XFxzKlxcKCkvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MGJbMDFdK3wwb1swLTddK3wweFthLWZBLUZcXGRdKyg/OlxcLlthLWZBLUZcXGRdKik/KD86W3BQXVsrLV0/W2EtZkEtRlxcZF0rKT98XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPylcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwuWyo/XXxcXC57MiwzfXxbLT1dPnxcXCpcXCp8XFwrXFwrfFxcfFxcfHwoPzo8PHw+PnxbLSsqXSV8Wy0rKi8lXiZ8PD4hPV0pPT98Wz9+XS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1suOiw7KCl7fVtcXF1dL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy56aWdbJ2NsYXNzLW5hbWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcblx0XHRpZiAob2JqLmluc2lkZSA9PT0gbnVsbCkge1xuXHRcdFx0b2JqLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy56aWc7XG5cdFx0fVxuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKCkge1xuXG5cdGlmICh0eXBlb2YgUHJpc20gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogUGx1Z2luIG5hbWUgd2hpY2ggaXMgdXNlZCBhcyBhIGNsYXNzIG5hbWUgZm9yIDxwcmU+IHdoaWNoIGlzIGFjdGl2YXRpbmcgdGhlIHBsdWdpblxuXHQgKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0dmFyIFBMVUdJTl9OQU1FID0gJ2xpbmUtbnVtYmVycyc7XG5cblx0LyoqXG5cdCAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGZvciBkZXRlcm1pbmluZyBsaW5lIGJyZWFrc1xuXHQgKlxuXHQgKiBAdHlwZSB7UmVnRXhwfVxuXHQgKi9cblx0dmFyIE5FV19MSU5FX0VYUCA9IC9cXG4oPyEkKS9nO1xuXG5cblx0LyoqXG5cdCAqIEdsb2JhbCBleHBvcnRzXG5cdCAqL1xuXHR2YXIgY29uZmlnID0gUHJpc20ucGx1Z2lucy5saW5lTnVtYmVycyA9IHtcblx0XHQvKipcblx0XHQgKiBHZXQgbm9kZSBmb3IgcHJvdmlkZWQgbGluZSBudW1iZXJcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBwcmUgZWxlbWVudFxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgbGluZSBudW1iZXJcblx0XHQgKiBAcmV0dXJucyB7RWxlbWVudHx1bmRlZmluZWR9XG5cdFx0ICovXG5cdFx0Z2V0TGluZTogZnVuY3Rpb24gKGVsZW1lbnQsIG51bWJlcikge1xuXHRcdFx0aWYgKGVsZW1lbnQudGFnTmFtZSAhPT0gJ1BSRScgfHwgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFBMVUdJTl9OQU1FKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsaW5lTnVtYmVyUm93cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJyk7XG5cdFx0XHRpZiAoIWxpbmVOdW1iZXJSb3dzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBsaW5lTnVtYmVyU3RhcnQgPSBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zdGFydCcpLCAxMCkgfHwgMTtcblx0XHRcdHZhciBsaW5lTnVtYmVyRW5kID0gbGluZU51bWJlclN0YXJ0ICsgKGxpbmVOdW1iZXJSb3dzLmNoaWxkcmVuLmxlbmd0aCAtIDEpO1xuXG5cdFx0XHRpZiAobnVtYmVyIDwgbGluZU51bWJlclN0YXJ0KSB7XG5cdFx0XHRcdG51bWJlciA9IGxpbmVOdW1iZXJTdGFydDtcblx0XHRcdH1cblx0XHRcdGlmIChudW1iZXIgPiBsaW5lTnVtYmVyRW5kKSB7XG5cdFx0XHRcdG51bWJlciA9IGxpbmVOdW1iZXJFbmQ7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsaW5lSW5kZXggPSBudW1iZXIgLSBsaW5lTnVtYmVyU3RhcnQ7XG5cblx0XHRcdHJldHVybiBsaW5lTnVtYmVyUm93cy5jaGlsZHJlbltsaW5lSW5kZXhdO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXNpemVzIHRoZSBsaW5lIG51bWJlcnMgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGFkZCBsaW5lIG51bWJlcnMuIEl0IHdpbGwgb25seSByZXNpemUgZXhpc3Rpbmcgb25lcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQSBgPHByZT5gIGVsZW1lbnQgd2l0aCBsaW5lIG51bWJlcnMuXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0cmVzaXplOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0cmVzaXplRWxlbWVudHMoW2VsZW1lbnRdKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogV2hldGhlciB0aGUgcGx1Z2luIGNhbiBhc3N1bWUgdGhhdCB0aGUgdW5pdHMgZm9udCBzaXplcyBhbmQgbWFyZ2lucyBhcmUgbm90IGRlcGVuZGVkIG9uIHRoZSBzaXplIG9mXG5cdFx0ICogdGhlIGN1cnJlbnQgdmlld3BvcnQuXG5cdFx0ICpcblx0XHQgKiBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIHdpbGwgYWxsb3cgdGhlIHBsdWdpbiB0byBkbyBjZXJ0YWluIG9wdGltaXphdGlvbnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cblx0XHQgKlxuXHRcdCAqIFNldCB0aGlzIHRvIGBmYWxzZWAgaWYgeW91IHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBDU1MgdW5pdHM6IGB2aGAsIGB2d2AsIGB2bWluYCwgYHZtYXhgLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0YXNzdW1lVmlld3BvcnRJbmRlcGVuZGVuY2U6IHRydWVcblx0fTtcblxuXHQvKipcblx0ICogUmVzaXplcyB0aGUgZ2l2ZW4gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXX0gZWxlbWVudHNcblx0ICovXG5cdGZ1bmN0aW9uIHJlc2l6ZUVsZW1lbnRzKGVsZW1lbnRzKSB7XG5cdFx0ZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcblx0XHRcdHZhciBjb2RlU3R5bGVzID0gZ2V0U3R5bGVzKGUpO1xuXHRcdFx0dmFyIHdoaXRlU3BhY2UgPSBjb2RlU3R5bGVzWyd3aGl0ZS1zcGFjZSddO1xuXHRcdFx0cmV0dXJuIHdoaXRlU3BhY2UgPT09ICdwcmUtd3JhcCcgfHwgd2hpdGVTcGFjZSA9PT0gJ3ByZS1saW5lJztcblx0XHR9KTtcblxuXHRcdGlmIChlbGVtZW50cy5sZW5ndGggPT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpbmZvcyA9IGVsZW1lbnRzLm1hcChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0dmFyIGNvZGVFbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdjb2RlJyk7XG5cdFx0XHR2YXIgbGluZU51bWJlcnNXcmFwcGVyID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubGluZS1udW1iZXJzLXJvd3MnKTtcblx0XHRcdGlmICghY29kZUVsZW1lbnQgfHwgIWxpbmVOdW1iZXJzV3JhcHBlcikge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqL1xuXHRcdFx0dmFyIGxpbmVOdW1iZXJTaXplciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1zaXplcicpO1xuXHRcdFx0dmFyIGNvZGVMaW5lcyA9IGNvZGVFbGVtZW50LnRleHRDb250ZW50LnNwbGl0KE5FV19MSU5FX0VYUCk7XG5cblx0XHRcdGlmICghbGluZU51bWJlclNpemVyKSB7XG5cdFx0XHRcdGxpbmVOdW1iZXJTaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0bGluZU51bWJlclNpemVyLmNsYXNzTmFtZSA9ICdsaW5lLW51bWJlcnMtc2l6ZXInO1xuXG5cdFx0XHRcdGNvZGVFbGVtZW50LmFwcGVuZENoaWxkKGxpbmVOdW1iZXJTaXplcik7XG5cdFx0XHR9XG5cblx0XHRcdGxpbmVOdW1iZXJTaXplci5pbm5lckhUTUwgPSAnMCc7XG5cdFx0XHRsaW5lTnVtYmVyU2l6ZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cblx0XHRcdHZhciBvbmVMaW5lckhlaWdodCA9IGxpbmVOdW1iZXJTaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0XHRsaW5lTnVtYmVyU2l6ZXIuaW5uZXJIVE1MID0gJyc7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnQsXG5cdFx0XHRcdGxpbmVzOiBjb2RlTGluZXMsXG5cdFx0XHRcdGxpbmVIZWlnaHRzOiBbXSxcblx0XHRcdFx0b25lTGluZXJIZWlnaHQ6IG9uZUxpbmVySGVpZ2h0LFxuXHRcdFx0XHRzaXplcjogbGluZU51bWJlclNpemVyLFxuXHRcdFx0fTtcblx0XHR9KS5maWx0ZXIoQm9vbGVhbik7XG5cblx0XHRpbmZvcy5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG5cdFx0XHR2YXIgbGluZU51bWJlclNpemVyID0gaW5mby5zaXplcjtcblx0XHRcdHZhciBsaW5lcyA9IGluZm8ubGluZXM7XG5cdFx0XHR2YXIgbGluZUhlaWdodHMgPSBpbmZvLmxpbmVIZWlnaHRzO1xuXHRcdFx0dmFyIG9uZUxpbmVySGVpZ2h0ID0gaW5mby5vbmVMaW5lckhlaWdodDtcblxuXHRcdFx0bGluZUhlaWdodHNbbGluZXMubGVuZ3RoIC0gMV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpbmRleCkge1xuXHRcdFx0XHRpZiAobGluZSAmJiBsaW5lLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR2YXIgZSA9IGxpbmVOdW1iZXJTaXplci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpO1xuXHRcdFx0XHRcdGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cdFx0XHRcdFx0ZS50ZXh0Q29udGVudCA9IGxpbmU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGluZUhlaWdodHNbaW5kZXhdID0gb25lTGluZXJIZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5mb3MuZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuXHRcdFx0dmFyIGxpbmVOdW1iZXJTaXplciA9IGluZm8uc2l6ZXI7XG5cdFx0XHR2YXIgbGluZUhlaWdodHMgPSBpbmZvLmxpbmVIZWlnaHRzO1xuXG5cdFx0XHR2YXIgY2hpbGRJbmRleCA9IDA7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVIZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChsaW5lSGVpZ2h0c1tpXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bGluZUhlaWdodHNbaV0gPSBsaW5lTnVtYmVyU2l6ZXIuY2hpbGRyZW5bY2hpbGRJbmRleCsrXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluZm9zLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcblx0XHRcdHZhciBsaW5lTnVtYmVyU2l6ZXIgPSBpbmZvLnNpemVyO1xuXHRcdFx0dmFyIHdyYXBwZXIgPSBpbmZvLmVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJyk7XG5cblx0XHRcdGxpbmVOdW1iZXJTaXplci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdFx0bGluZU51bWJlclNpemVyLmlubmVySFRNTCA9ICcnO1xuXG5cdFx0XHRpbmZvLmxpbmVIZWlnaHRzLmZvckVhY2goZnVuY3Rpb24gKGhlaWdodCwgbGluZU51bWJlcikge1xuXHRcdFx0XHR3cmFwcGVyLmNoaWxkcmVuW2xpbmVOdW1iZXJdLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHN0eWxlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRTdHlsZXMoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSA6IChlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCBudWxsKTtcblx0fVxuXG5cdHZhciBsYXN0V2lkdGggPSB1bmRlZmluZWQ7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGNvbmZpZy5hc3N1bWVWaWV3cG9ydEluZGVwZW5kZW5jZSAmJiBsYXN0V2lkdGggPT09IHdpbmRvdy5pbm5lcldpZHRoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxhc3RXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG5cdFx0cmVzaXplRWxlbWVudHMoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgncHJlLicgKyBQTFVHSU5fTkFNRSkpKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdjb21wbGV0ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoIWVudi5jb2RlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGNvZGUgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbnYuZWxlbWVudCk7XG5cdFx0dmFyIHByZSA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChjb2RlLnBhcmVudE5vZGUpO1xuXG5cdFx0Ly8gd29ya3Mgb25seSBmb3IgPGNvZGU+IHdyYXBwZWQgaW5zaWRlIDxwcmU+IChub3QgaW5saW5lKVxuXHRcdGlmICghcHJlIHx8ICEvcHJlL2kudGVzdChwcmUubm9kZU5hbWUpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnQgaWYgbGluZSBudW1iZXJzIGFscmVhZHkgZXhpc3RzXG5cdFx0aWYgKGNvZGUucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBvbmx5IGFkZCBsaW5lIG51bWJlcnMgaWYgPGNvZGU+IG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyB0aGUgYGxpbmUtbnVtYmVyc2AgY2xhc3Ncblx0XHRpZiAoIVByaXNtLnV0aWwuaXNBY3RpdmUoY29kZSwgUExVR0lOX05BTUUpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBjbGFzcyAnbGluZS1udW1iZXJzJyBmcm9tIHRoZSA8Y29kZT5cblx0XHRjb2RlLmNsYXNzTGlzdC5yZW1vdmUoUExVR0lOX05BTUUpO1xuXHRcdC8vIEFkZCB0aGUgY2xhc3MgJ2xpbmUtbnVtYmVycycgdG8gdGhlIDxwcmU+XG5cdFx0cHJlLmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUpO1xuXG5cdFx0dmFyIG1hdGNoID0gZW52LmNvZGUubWF0Y2goTkVXX0xJTkVfRVhQKTtcblx0XHR2YXIgbGluZXNOdW0gPSBtYXRjaCA/IG1hdGNoLmxlbmd0aCArIDEgOiAxO1xuXHRcdHZhciBsaW5lTnVtYmVyc1dyYXBwZXI7XG5cblx0XHR2YXIgbGluZXMgPSBuZXcgQXJyYXkobGluZXNOdW0gKyAxKS5qb2luKCc8c3Bhbj48L3NwYW4+Jyk7XG5cblx0XHRsaW5lTnVtYmVyc1dyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0bGluZU51bWJlcnNXcmFwcGVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXHRcdGxpbmVOdW1iZXJzV3JhcHBlci5jbGFzc05hbWUgPSAnbGluZS1udW1iZXJzLXJvd3MnO1xuXHRcdGxpbmVOdW1iZXJzV3JhcHBlci5pbm5lckhUTUwgPSBsaW5lcztcblxuXHRcdGlmIChwcmUuaGFzQXR0cmlidXRlKCdkYXRhLXN0YXJ0JykpIHtcblx0XHRcdHByZS5zdHlsZS5jb3VudGVyUmVzZXQgPSAnbGluZW51bWJlciAnICsgKHBhcnNlSW50KHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhcnQnKSwgMTApIC0gMSk7XG5cdFx0fVxuXG5cdFx0ZW52LmVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZU51bWJlcnNXcmFwcGVyKTtcblxuXHRcdHJlc2l6ZUVsZW1lbnRzKFtwcmVdKTtcblxuXHRcdFByaXNtLmhvb2tzLnJ1bignbGluZS1udW1iZXJzJywgZW52KTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdsaW5lLW51bWJlcnMnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0ZW52LnBsdWdpbnMgPSBlbnYucGx1Z2lucyB8fCB7fTtcblx0XHRlbnYucGx1Z2lucy5saW5lTnVtYmVycyA9IHRydWU7XG5cdH0pO1xuXG59KCkpO1xuXG4oZnVuY3Rpb24gKCkge1xuXG5cdGlmICh0eXBlb2YgUHJpc20gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9tYXRjaGVzI1BvbHlmaWxsXG5cdGlmICghRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuXHRcdEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdH1cblxuXHR2YXIgTE9BRElOR19NRVNTQUdFID0gJ0xvYWRpbmdcdTIwMjYnO1xuXHR2YXIgRkFJTFVSRV9NRVNTQUdFID0gZnVuY3Rpb24gKHN0YXR1cywgbWVzc2FnZSkge1xuXHRcdHJldHVybiAnXHUyNzE2IEVycm9yICcgKyBzdGF0dXMgKyAnIHdoaWxlIGZldGNoaW5nIGZpbGU6ICcgKyBtZXNzYWdlO1xuXHR9O1xuXHR2YXIgRkFJTFVSRV9FTVBUWV9NRVNTQUdFID0gJ1x1MjcxNiBFcnJvcjogRmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBlbXB0eSc7XG5cblx0dmFyIEVYVEVOU0lPTlMgPSB7XG5cdFx0J2pzJzogJ2phdmFzY3JpcHQnLFxuXHRcdCdweSc6ICdweXRob24nLFxuXHRcdCdyYic6ICdydWJ5Jyxcblx0XHQncHMxJzogJ3Bvd2Vyc2hlbGwnLFxuXHRcdCdwc20xJzogJ3Bvd2Vyc2hlbGwnLFxuXHRcdCdzaCc6ICdiYXNoJyxcblx0XHQnYmF0JzogJ2JhdGNoJyxcblx0XHQnaCc6ICdjJyxcblx0XHQndGV4JzogJ2xhdGV4J1xuXHR9O1xuXG5cdHZhciBTVEFUVVNfQVRUUiA9ICdkYXRhLXNyYy1zdGF0dXMnO1xuXHR2YXIgU1RBVFVTX0xPQURJTkcgPSAnbG9hZGluZyc7XG5cdHZhciBTVEFUVVNfTE9BREVEID0gJ2xvYWRlZCc7XG5cdHZhciBTVEFUVVNfRkFJTEVEID0gJ2ZhaWxlZCc7XG5cblx0dmFyIFNFTEVDVE9SID0gJ3ByZVtkYXRhLXNyY106bm90KFsnICsgU1RBVFVTX0FUVFIgKyAnPVwiJyArIFNUQVRVU19MT0FERUQgKyAnXCJdKSdcblx0XHQrICc6bm90KFsnICsgU1RBVFVTX0FUVFIgKyAnPVwiJyArIFNUQVRVU19MT0FESU5HICsgJ1wiXSknO1xuXG5cdC8qKlxuXHQgKiBMb2FkcyB0aGUgZ2l2ZW4gZmlsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNyYyBUaGUgVVJMIG9yIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGxvYWQuXG5cdCAqIEBwYXJhbSB7KHJlc3VsdDogc3RyaW5nKSA9PiB2b2lkfSBzdWNjZXNzXG5cdCAqIEBwYXJhbSB7KHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkfSBlcnJvclxuXHQgKi9cblx0ZnVuY3Rpb24gbG9hZEZpbGUoc3JjLCBzdWNjZXNzLCBlcnJvcikge1xuXHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHR4aHIub3BlbignR0VUJywgc3JjLCB0cnVlKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcblx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPCA0MDAgJiYgeGhyLnJlc3BvbnNlVGV4dCkge1xuXHRcdFx0XHRcdHN1Y2Nlc3MoeGhyLnJlc3BvbnNlVGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPj0gNDAwKSB7XG5cdFx0XHRcdFx0XHRlcnJvcihGQUlMVVJFX01FU1NBR0UoeGhyLnN0YXR1cywgeGhyLnN0YXR1c1RleHQpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZXJyb3IoRkFJTFVSRV9FTVBUWV9NRVNTQUdFKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdHhoci5zZW5kKG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgZ2l2ZW4gcmFuZ2UuXG5cdCAqXG5cdCAqIFRoaXMgcmV0dXJucyBhIHJhbmdlIHdpdGggaW5jbHVzaXZlIGVuZHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gcmFuZ2Vcblx0ICogQHJldHVybnMge1tudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZF0gfCB1bmRlZmluZWR9XG5cdCAqL1xuXHRmdW5jdGlvbiBwYXJzZVJhbmdlKHJhbmdlKSB7XG5cdFx0dmFyIG0gPSAvXlxccyooXFxkKylcXHMqKD86KCwpXFxzKig/OihcXGQrKVxccyopPyk/JC8uZXhlYyhyYW5nZSB8fCAnJyk7XG5cdFx0aWYgKG0pIHtcblx0XHRcdHZhciBzdGFydCA9IE51bWJlcihtWzFdKTtcblx0XHRcdHZhciBjb21tYSA9IG1bMl07XG5cdFx0XHR2YXIgZW5kID0gbVszXTtcblxuXHRcdFx0aWYgKCFjb21tYSkge1xuXHRcdFx0XHRyZXR1cm4gW3N0YXJ0LCBzdGFydF07XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWVuZCkge1xuXHRcdFx0XHRyZXR1cm4gW3N0YXJ0LCB1bmRlZmluZWRdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtzdGFydCwgTnVtYmVyKGVuZCldO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtaGlnaGxpZ2h0YWxsJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGVudi5zZWxlY3RvciArPSAnLCAnICsgU0VMRUNUT1I7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXNhbml0eS1jaGVjaycsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgcHJlID0gLyoqIEB0eXBlIHtIVE1MUHJlRWxlbWVudH0gKi8gKGVudi5lbGVtZW50KTtcblx0XHRpZiAocHJlLm1hdGNoZXMoU0VMRUNUT1IpKSB7XG5cdFx0XHRlbnYuY29kZSA9ICcnOyAvLyBmYXN0LXBhdGggdGhlIHdob2xlIHRoaW5nIGFuZCBnbyB0byBjb21wbGV0ZVxuXG5cdFx0XHRwcmUuc2V0QXR0cmlidXRlKFNUQVRVU19BVFRSLCBTVEFUVVNfTE9BRElORyk7IC8vIG1hcmsgYXMgbG9hZGluZ1xuXG5cdFx0XHQvLyBhZGQgY29kZSBlbGVtZW50IHdpdGggbG9hZGluZyBtZXNzYWdlXG5cdFx0XHR2YXIgY29kZSA9IHByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdDT0RFJykpO1xuXHRcdFx0Y29kZS50ZXh0Q29udGVudCA9IExPQURJTkdfTUVTU0FHRTtcblxuXHRcdFx0dmFyIHNyYyA9IHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG5cblx0XHRcdHZhciBsYW5ndWFnZSA9IGVudi5sYW5ndWFnZTtcblx0XHRcdGlmIChsYW5ndWFnZSA9PT0gJ25vbmUnKSB7XG5cdFx0XHRcdC8vIHRoZSBsYW5ndWFnZSBtaWdodCBiZSAnbm9uZScgYmVjYXVzZSB0aGVyZSBpcyBubyBsYW5ndWFnZSBzZXQ7XG5cdFx0XHRcdC8vIGluIHRoaXMgY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIGV4dGVuc2lvbiBhcyB0aGUgbGFuZ3VhZ2Vcblx0XHRcdFx0dmFyIGV4dGVuc2lvbiA9ICgvXFwuKFxcdyspJC8uZXhlYyhzcmMpIHx8IFssICdub25lJ10pWzFdO1xuXHRcdFx0XHRsYW5ndWFnZSA9IEVYVEVOU0lPTlNbZXh0ZW5zaW9uXSB8fCBleHRlbnNpb247XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCBsYW5ndWFnZSBjbGFzc2VzXG5cdFx0XHRQcmlzbS51dGlsLnNldExhbmd1YWdlKGNvZGUsIGxhbmd1YWdlKTtcblx0XHRcdFByaXNtLnV0aWwuc2V0TGFuZ3VhZ2UocHJlLCBsYW5ndWFnZSk7XG5cblx0XHRcdC8vIHByZWxvYWQgdGhlIGxhbmd1YWdlXG5cdFx0XHR2YXIgYXV0b2xvYWRlciA9IFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlcjtcblx0XHRcdGlmIChhdXRvbG9hZGVyKSB7XG5cdFx0XHRcdGF1dG9sb2FkZXIubG9hZExhbmd1YWdlcyhsYW5ndWFnZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGxvYWQgZmlsZVxuXHRcdFx0bG9hZEZpbGUoXG5cdFx0XHRcdHNyYyxcblx0XHRcdFx0ZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdFx0XHQvLyBtYXJrIGFzIGxvYWRlZFxuXHRcdFx0XHRcdHByZS5zZXRBdHRyaWJ1dGUoU1RBVFVTX0FUVFIsIFNUQVRVU19MT0FERUQpO1xuXG5cdFx0XHRcdFx0Ly8gaGFuZGxlIGRhdGEtcmFuZ2Vcblx0XHRcdFx0XHR2YXIgcmFuZ2UgPSBwYXJzZVJhbmdlKHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmFuZ2UnKSk7XG5cdFx0XHRcdFx0aWYgKHJhbmdlKSB7XG5cdFx0XHRcdFx0XHR2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHJcXG4/fFxcbi9nKTtcblxuXHRcdFx0XHRcdFx0Ly8gdGhlIHJhbmdlIGlzIG9uZS1iYXNlZCBhbmQgaW5jbHVzaXZlIG9uIGJvdGggZW5kc1xuXHRcdFx0XHRcdFx0dmFyIHN0YXJ0ID0gcmFuZ2VbMF07XG5cdFx0XHRcdFx0XHR2YXIgZW5kID0gcmFuZ2VbMV0gPT0gbnVsbCA/IGxpbmVzLmxlbmd0aCA6IHJhbmdlWzFdO1xuXG5cdFx0XHRcdFx0XHRpZiAoc3RhcnQgPCAwKSB7IHN0YXJ0ICs9IGxpbmVzLmxlbmd0aDsgfVxuXHRcdFx0XHRcdFx0c3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzdGFydCAtIDEsIGxpbmVzLmxlbmd0aCkpO1xuXHRcdFx0XHRcdFx0aWYgKGVuZCA8IDApIHsgZW5kICs9IGxpbmVzLmxlbmd0aDsgfVxuXHRcdFx0XHRcdFx0ZW5kID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZW5kLCBsaW5lcy5sZW5ndGgpKTtcblxuXHRcdFx0XHRcdFx0dGV4dCA9IGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLmpvaW4oJ1xcbicpO1xuXG5cdFx0XHRcdFx0XHQvLyBhZGQgZGF0YS1zdGFydCBmb3IgbGluZSBudW1iZXJzXG5cdFx0XHRcdFx0XHRpZiAoIXByZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc3RhcnQnKSkge1xuXHRcdFx0XHRcdFx0XHRwcmUuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXJ0JywgU3RyaW5nKHN0YXJ0ICsgMSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGhpZ2hsaWdodCBjb2RlXG5cdFx0XHRcdFx0Y29kZS50ZXh0Q29udGVudCA9IHRleHQ7XG5cdFx0XHRcdFx0UHJpc20uaGlnaGxpZ2h0RWxlbWVudChjb2RlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gbWFyayBhcyBmYWlsZWRcblx0XHRcdFx0XHRwcmUuc2V0QXR0cmlidXRlKFNUQVRVU19BVFRSLCBTVEFUVVNfRkFJTEVEKTtcblxuXHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSBlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodCA9IHtcblx0XHQvKipcblx0XHQgKiBFeGVjdXRlcyB0aGUgRmlsZSBIaWdobGlnaHQgcGx1Z2luIGZvciBhbGwgbWF0Y2hpbmcgYHByZWAgZWxlbWVudHMgdW5kZXIgdGhlIGdpdmVuIGNvbnRhaW5lci5cblx0XHQgKlxuXHRcdCAqIE5vdGU6IEVsZW1lbnRzIHdoaWNoIGFyZSBhbHJlYWR5IGxvYWRlZCBvciBjdXJyZW50bHkgbG9hZGluZyB3aWxsIG5vdCBiZSB0b3VjaGVkIGJ5IHRoaXMgbWV0aG9kLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtQYXJlbnROb2RlfSBbY29udGFpbmVyPWRvY3VtZW50XVxuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodDogZnVuY3Rpb24gaGlnaGxpZ2h0KGNvbnRhaW5lcikge1xuXHRcdFx0dmFyIGVsZW1lbnRzID0gKGNvbnRhaW5lciB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUik7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwLCBlbGVtZW50OyAoZWxlbWVudCA9IGVsZW1lbnRzW2krK10pOykge1xuXHRcdFx0XHRQcmlzbS5oaWdobGlnaHRFbGVtZW50KGVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgbG9nZ2VkID0gZmFsc2U7XG5cdC8qKiBAZGVwcmVjYXRlZCBVc2UgYFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodC5oaWdobGlnaHRgIGluc3RlYWQuICovXG5cdFByaXNtLmZpbGVIaWdobGlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFsb2dnZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUHJpc20uZmlsZUhpZ2hsaWdodCBpcyBkZXByZWNhdGVkLiBVc2UgYFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodC5oaWdobGlnaHRgIGluc3RlYWQuJyk7XG5cdFx0XHRsb2dnZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRQcmlzbS5wbHVnaW5zLmZpbGVIaWdobGlnaHQuaGlnaGxpZ2h0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdH07XG5cbn0oKSk7XG5cbiIsICIvKipcbiAqIEBsaWNlbnNlIE1JVFxuICogdG9wYmFyIDEuMC4wLCAyMDIxLTAxLTA2XG4gKiBodHRwOi8vYnV1bmd1eWVuLmdpdGh1Yi5pby90b3BiYXJcbiAqIENvcHlyaWdodCAoYykgMjAyMSBCdXUgTmd1eWVuXG4gKi9cbihmdW5jdGlvbiAod2luZG93LCBkb2N1bWVudCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvMTU3OTY3MVxuICAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBsYXN0VGltZSA9IDA7XG4gICAgdmFyIHZlbmRvcnMgPSBbXCJtc1wiLCBcIm1velwiLCBcIndlYmtpdFwiLCBcIm9cIl07XG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyBcIlJlcXVlc3RBbmltYXRpb25GcmFtZVwiXTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgXCJDYW5jZWxBbmltYXRpb25GcmFtZVwiXSB8fFxuICAgICAgICB3aW5kb3dbdmVuZG9yc1t4XSArIFwiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJdO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB2YXIgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcbiAgICAgICAgdmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XG4gICAgICAgIH0sIHRpbWVUb0NhbGwpO1xuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgfTtcbiAgICBpZiAoIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSlcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgfTtcbiAgfSkoKTtcblxuICB2YXIgY2FudmFzLFxuICAgIHByb2dyZXNzVGltZXJJZCxcbiAgICBmYWRlVGltZXJJZCxcbiAgICBjdXJyZW50UHJvZ3Jlc3MsXG4gICAgc2hvd2luZyxcbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uIChlbGVtLCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSBlbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgICAgZWxzZSBpZiAoZWxlbS5hdHRhY2hFdmVudCkgZWxlbS5hdHRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBoYW5kbGVyKTtcbiAgICAgIGVsc2UgZWxlbVtcIm9uXCIgKyB0eXBlXSA9IGhhbmRsZXI7XG4gICAgfSxcbiAgICBvcHRpb25zID0ge1xuICAgICAgYXV0b1J1bjogdHJ1ZSxcbiAgICAgIGJhclRoaWNrbmVzczogMyxcbiAgICAgIGJhckNvbG9yczoge1xuICAgICAgICAwOiBcInJnYmEoMjYsICAxODgsIDE1NiwgLjkpXCIsXG4gICAgICAgIFwiLjI1XCI6IFwicmdiYSg1MiwgIDE1MiwgMjE5LCAuOSlcIixcbiAgICAgICAgXCIuNTBcIjogXCJyZ2JhKDI0MSwgMTk2LCAxNSwgIC45KVwiLFxuICAgICAgICBcIi43NVwiOiBcInJnYmEoMjMwLCAxMjYsIDM0LCAgLjkpXCIsXG4gICAgICAgIFwiMS4wXCI6IFwicmdiYSgyMTEsIDg0LCAgMCwgICAuOSlcIixcbiAgICAgIH0sXG4gICAgICBzaGFkb3dCbHVyOiAxMCxcbiAgICAgIHNoYWRvd0NvbG9yOiBcInJnYmEoMCwgICAwLCAgIDAsICAgLjYpXCIsXG4gICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgfSxcbiAgICByZXBhaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gb3B0aW9ucy5iYXJUaGlja25lc3MgKiA1OyAvLyBuZWVkIHNwYWNlIGZvciBzaGFkb3dcblxuICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IG9wdGlvbnMuc2hhZG93Qmx1cjtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IG9wdGlvbnMuc2hhZG93Q29sb3I7XG5cbiAgICAgIHZhciBsaW5lR3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgY2FudmFzLndpZHRoLCAwKTtcbiAgICAgIGZvciAodmFyIHN0b3AgaW4gb3B0aW9ucy5iYXJDb2xvcnMpXG4gICAgICAgIGxpbmVHcmFkaWVudC5hZGRDb2xvclN0b3Aoc3RvcCwgb3B0aW9ucy5iYXJDb2xvcnNbc3RvcF0pO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IG9wdGlvbnMuYmFyVGhpY2tuZXNzO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbygwLCBvcHRpb25zLmJhclRoaWNrbmVzcyAvIDIpO1xuICAgICAgY3R4LmxpbmVUbyhcbiAgICAgICAgTWF0aC5jZWlsKGN1cnJlbnRQcm9ncmVzcyAqIGNhbnZhcy53aWR0aCksXG4gICAgICAgIG9wdGlvbnMuYmFyVGhpY2tuZXNzIC8gMlxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGxpbmVHcmFkaWVudDtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9LFxuICAgIGNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICB2YXIgc3R5bGUgPSBjYW52YXMuc3R5bGU7XG4gICAgICBzdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgIHN0eWxlLnRvcCA9IHN0eWxlLmxlZnQgPSBzdHlsZS5yaWdodCA9IHN0eWxlLm1hcmdpbiA9IHN0eWxlLnBhZGRpbmcgPSAwO1xuICAgICAgc3R5bGUuekluZGV4ID0gMTAwMDAxO1xuICAgICAgc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgaWYgKG9wdGlvbnMuY2xhc3NOYW1lKSBjYW52YXMuY2xhc3NMaXN0LmFkZChvcHRpb25zLmNsYXNzTmFtZSk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICBhZGRFdmVudCh3aW5kb3csIFwicmVzaXplXCIsIHJlcGFpbnQpO1xuICAgIH0sXG4gICAgdG9wYmFyID0ge1xuICAgICAgY29uZmlnOiBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cylcbiAgICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBvcHRpb25zW2tleV0gPSBvcHRzW2tleV07XG4gICAgICB9LFxuICAgICAgc2hvdzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2hvd2luZykgcmV0dXJuO1xuICAgICAgICBzaG93aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKGZhZGVUaW1lcklkICE9PSBudWxsKSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZmFkZVRpbWVySWQpO1xuICAgICAgICBpZiAoIWNhbnZhcykgY3JlYXRlQ2FudmFzKCk7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgY2FudmFzLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgIHRvcGJhci5wcm9ncmVzcygwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXV0b1J1bikge1xuICAgICAgICAgIChmdW5jdGlvbiBsb29wKCkge1xuICAgICAgICAgICAgcHJvZ3Jlc3NUaW1lcklkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcbiAgICAgICAgICAgIHRvcGJhci5wcm9ncmVzcyhcbiAgICAgICAgICAgICAgXCIrXCIgKyAwLjA1ICogTWF0aC5wb3coMSAtIE1hdGguc3FydChjdXJyZW50UHJvZ3Jlc3MpLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uICh0bykge1xuICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gY3VycmVudFByb2dyZXNzO1xuICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgdG8gPVxuICAgICAgICAgICAgKHRvLmluZGV4T2YoXCIrXCIpID49IDAgfHwgdG8uaW5kZXhPZihcIi1cIikgPj0gMFxuICAgICAgICAgICAgICA/IGN1cnJlbnRQcm9ncmVzc1xuICAgICAgICAgICAgICA6IDApICsgcGFyc2VGbG9hdCh0byk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFByb2dyZXNzID0gdG8gPiAxID8gMSA6IHRvO1xuICAgICAgICByZXBhaW50KCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50UHJvZ3Jlc3M7XG4gICAgICB9LFxuICAgICAgaGlkZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNob3dpbmcpIHJldHVybjtcbiAgICAgICAgc2hvd2luZyA9IGZhbHNlO1xuICAgICAgICBpZiAocHJvZ3Jlc3NUaW1lcklkICE9IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocHJvZ3Jlc3NUaW1lcklkKTtcbiAgICAgICAgICBwcm9ncmVzc1RpbWVySWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIChmdW5jdGlvbiBsb29wKCkge1xuICAgICAgICAgIGlmICh0b3BiYXIucHJvZ3Jlc3MoXCIrLjFcIikgPj0gMSkge1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLm9wYWNpdHkgLT0gMC4wNTtcbiAgICAgICAgICAgIGlmIChjYW52YXMuc3R5bGUub3BhY2l0eSA8PSAwLjA1KSB7XG4gICAgICAgICAgICAgIGNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICAgIGZhZGVUaW1lcklkID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmYWRlVGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB0b3BiYXI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRvcGJhcjtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRvcGJhciA9IHRvcGJhcjtcbiAgfVxufS5jYWxsKHRoaXMsIHdpbmRvdywgZG9jdW1lbnQpKTtcbiIsICJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG53aW5kb3cuJCA9ICQ7XG53aW5kb3cualF1ZXJ5ID0gJDtcblxuaW1wb3J0IFwiYm9vdHN0cmFwXCI7XG5pbXBvcnQgXCIuLi92ZW5kb3IvcHJpc21cIjtcblxuaW1wb3J0IFwiLi9yZXBvc2l0b3J5XCI7XG5pbXBvcnQgXCIuL2tteF9hbmltXCI7XG5cbi8vIElmIHlvdSB3YW50IHRvIHVzZSBQaG9lbml4IGNoYW5uZWxzLCBydW4gYG1peCBoZWxwIHBoeC5nZW4uY2hhbm5lbGBcbi8vIHRvIGdldCBzdGFydGVkIGFuZCB0aGVuIHVuY29tbWVudCB0aGUgbGluZSBiZWxvdy5cbi8vIGltcG9ydCBcIi4vdXNlcl9zb2NrZXQuanNcIlxuXG4vLyBJbmNsdWRlIHBob2VuaXhfaHRtbCB0byBoYW5kbGUgbWV0aG9kPVBVVC9ERUxFVEUgaW4gZm9ybXMgYW5kIGJ1dHRvbnMuXG5pbXBvcnQgXCJwaG9lbml4X2h0bWxcIjtcbi8vIEVzdGFibGlzaCBQaG9lbml4IFNvY2tldCBhbmQgTGl2ZVZpZXcgY29uZmlndXJhdGlvbi5cbmltcG9ydCB7U29ja2V0fSBmcm9tIFwicGhvZW5peFwiO1xuaW1wb3J0IHtMaXZlU29ja2V0fSBmcm9tIFwicGhvZW5peF9saXZlX3ZpZXdcIjtcbmltcG9ydCB0b3BiYXIgZnJvbSBcIi4uL3ZlbmRvci90b3BiYXJcIjtcblxubGV0IGNzcmZUb2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J2NzcmYtdG9rZW4nXVwiKS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpO1xubGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwge3BhcmFtczoge19jc3JmX3Rva2VuOiBjc3JmVG9rZW59fSk7XG5cbi8vIFNob3cgcHJvZ3Jlc3MgYmFyIG9uIGxpdmUgbmF2aWdhdGlvbiBhbmQgZm9ybSBzdWJtaXRzXG50b3BiYXIuY29uZmlnKHtiYXJDb2xvcnM6IHswOiBcIiMyOWRcIn0sIHNoYWRvd0NvbG9yOiBcInJnYmEoMCwgMCwgMCwgLjMpXCJ9KTtcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGh4OnBhZ2UtbG9hZGluZy1zdGFydFwiLCBpbmZvID0+IHRvcGJhci5zaG93KCkpO1xud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwaHg6cGFnZS1sb2FkaW5nLXN0b3BcIiwgaW5mbyA9PiB0b3BiYXIuaGlkZSgpKTtcblxuLy8gY29ubmVjdCBpZiB0aGVyZSBhcmUgYW55IExpdmVWaWV3cyBvbiB0aGUgcGFnZVxubGl2ZVNvY2tldC5jb25uZWN0KCk7XG5cbi8vIGV4cG9zZSBsaXZlU29ja2V0IG9uIHdpbmRvdyBmb3Igd2ViIGNvbnNvbGUgZGVidWcgbG9ncyBhbmQgbGF0ZW5jeSBzaW11bGF0aW9uOlxuLy8gPj4gbGl2ZVNvY2tldC5lbmFibGVEZWJ1ZygpXG4vLyA+PiBsaXZlU29ja2V0LmVuYWJsZUxhdGVuY3lTaW0oMTAwMCkgIC8vIGVuYWJsZWQgZm9yIGR1cmF0aW9uIG9mIGJyb3dzZXIgc2Vzc2lvblxuLy8gPj4gbGl2ZVNvY2tldC5kaXNhYmxlTGF0ZW5jeVNpbSgpXG53aW5kb3cubGl2ZVNvY2tldCA9IGxpdmVTb2NrZXQ7XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vZW51bXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3csIGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJCYXNlIH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyIsICJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsICJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwgImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIHRyYW5zaXRpb25Qcm9wZXJ0eSA9IGdldENvbXB1dGVkU3R5bGUoc3RhdGUuZWxlbWVudHMucG9wcGVyKS50cmFuc2l0aW9uUHJvcGVydHkgfHwgJyc7XG5cbiAgICBpZiAoYWRhcHRpdmUgJiYgWyd0cmFuc2Zvcm0nLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uc29tZShmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uUHJvcGVydHkuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMDtcbiAgICB9KSkge1xuICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBEZXRlY3RlZCBDU1MgdHJhbnNpdGlvbnMgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnLCAnQ1NTIHByb3BlcnRpZXM6IFwidHJhbnNmb3JtXCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIuJywgJ1xcblxcbicsICdEaXNhYmxlIHRoZSBcImNvbXB1dGVTdHlsZXNcIiBtb2RpZmllclxcJ3MgYGFkYXB0aXZlYCBvcHRpb24gdG8gYWxsb3cnLCAnZm9yIHNtb290aCB0cmFuc2l0aW9ucywgb3IgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMgZnJvbSB0aGUgQ1NTJywgJ3RyYW5zaXRpb24gZGVjbGFyYXRpb24gb24gdGhlIHBvcHBlciBlbGVtZW50IGlmIG9ubHkgdHJhbnNpdGlvbmluZycsICdvcGFjaXR5IG9yIGJhY2tncm91bmQtY29sb3IgZm9yIGV4YW1wbGUuJywgJ1xcblxcbicsICdXZSByZWNvbW1lbmQgdXNpbmcgdGhlIHBvcHBlciBlbGVtZW50IGFzIGEgd3JhcHBlciBhcm91bmQgYW4gaW5uZXInLCAnZWxlbWVudCB0aGF0IGNhbiBoYXZlIGFueSBDU1MgcHJvcGVydHkgdHJhbnNpdGlvbmVkIGZvciBhbmltYXRpb25zLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsICJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwgImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBUaGUgYGFsbG93ZWRBdXRvUGxhY2VtZW50c2Agb3B0aW9uIGRpZCBub3QgYWxsb3cgYW55JywgJ3BsYWNlbWVudHMuIEVuc3VyZSB0aGUgYHBsYWNlbWVudGAgb3B0aW9uIG1hdGNoZXMgdGhlIHZhcmlhdGlvbicsICdvZiB0aGUgYWxsb3dlZCBwbGFjZW1lbnRzLicsICdGb3IgZXhhbXBsZSwgXCJhdXRvXCIgY2Fubm90IGJlIHVzZWQgdG8gYWxsb3cgXCJib3R0b20tc3RhcnRcIi4nLCAnVXNlIFwiYXV0by1zdGFydFwiIGluc3RlYWQuJ10uam9pbignICcpKTtcbiAgICB9XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMgXHUyMDEzIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwgImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwgImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KHN0cikge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gW10uY29uY2F0KGFyZ3MpLnJlZHVjZShmdW5jdGlvbiAocCwgYykge1xuICAgIHJldHVybiBwLnJlcGxhY2UoLyVzLywgYyk7XG4gIH0sIHN0cik7XG59IiwgImltcG9ydCBmb3JtYXQgZnJvbSBcIi4vZm9ybWF0LmpzXCI7XG5pbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfTU9ESUZJRVJfRVJST1IgPSAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcHJvdmlkZWQgYW4gaW52YWxpZCAlcyBwcm9wZXJ0eSwgZXhwZWN0ZWQgJXMgYnV0IGdvdCAlcyc7XG52YXIgTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SID0gJ1BvcHBlcjogbW9kaWZpZXIgXCIlc1wiIHJlcXVpcmVzIFwiJXNcIiwgYnV0IFwiJXNcIiBtb2RpZmllciBpcyBub3QgYXZhaWxhYmxlJztcbnZhciBWQUxJRF9QUk9QRVJUSUVTID0gWyduYW1lJywgJ2VuYWJsZWQnLCAncGhhc2UnLCAnZm4nLCAnZWZmZWN0JywgJ3JlcXVpcmVzJywgJ29wdGlvbnMnXTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBbXS5jb25jYXQoT2JqZWN0LmtleXMobW9kaWZpZXIpLCBWQUxJRF9QUk9QRVJUSUVTKSAvLyBJRTExLWNvbXBhdGlibGUgcmVwbGFjZW1lbnQgZm9yIGBuZXcgU2V0KGl0ZXJhYmxlKWBcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIHNlbGYpIHtcbiAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgJ1wibmFtZVwiJywgJ1wic3RyaW5nXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5uYW1lKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVuYWJsZWRcIicsICdcImJvb2xlYW5cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmVuYWJsZWQpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwaGFzZSc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyUGhhc2VzLmluZGV4T2YobW9kaWZpZXIucGhhc2UpIDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicGhhc2VcIicsIFwiZWl0aGVyIFwiICsgbW9kaWZpZXJQaGFzZXMuam9pbignLCAnKSwgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucGhhc2UpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdmbic6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5mbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wiZm5cIicsICdcImZ1bmN0aW9uXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5mbikgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VmZmVjdCc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyLmVmZmVjdCAhPSBudWxsICYmIHR5cGVvZiBtb2RpZmllci5lZmZlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVmZmVjdFwiJywgJ1wiZnVuY3Rpb25cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmZuKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVxdWlyZXMnOlxuICAgICAgICAgIGlmIChtb2RpZmllci5yZXF1aXJlcyAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KG1vZGlmaWVyLnJlcXVpcmVzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicmVxdWlyZXNcIicsICdcImFycmF5XCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5yZXF1aXJlcykgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlcXVpcmVzSWZFeGlzdHMnOlxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicmVxdWlyZXNJZkV4aXN0c1wiJywgJ1wiYXJyYXlcIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUG9wcGVySlM6IGFuIGludmFsaWQgcHJvcGVydHkgaGFzIGJlZW4gcHJvdmlkZWQgdG8gdGhlIFxcXCJcIiArIG1vZGlmaWVyLm5hbWUgKyBcIlxcXCIgbW9kaWZpZXIsIHZhbGlkIHByb3BlcnRpZXMgYXJlIFwiICsgVkFMSURfUFJPUEVSVElFUy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlxcXCJcIiArIHMgKyBcIlxcXCJcIjtcbiAgICAgICAgICB9KS5qb2luKCcsICcpICsgXCI7IGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHByb3ZpZGVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgbW9kaWZpZXIucmVxdWlyZXMgJiYgbW9kaWZpZXIucmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWlyZW1lbnQpIHtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgICAgICByZXR1cm4gbW9kLm5hbWUgPT09IHJlcXVpcmVtZW50O1xuICAgICAgICB9KSA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SLCBTdHJpbmcobW9kaWZpZXIubmFtZSksIHJlcXVpcmVtZW50LCByZXF1aXJlbWVudCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXF1ZUJ5KGFyciwgZm4pIHtcbiAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICByZXR1cm4gYXJyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBpZGVudGlmaWVyID0gZm4oaXRlbSk7XG5cbiAgICBpZiAoIWlkZW50aWZpZXJzLmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgaWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCB2YWxpZGF0ZU1vZGlmaWVycyBmcm9tIFwiLi91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IHVuaXF1ZUJ5IGZyb20gXCIuL3V0aWxzL3VuaXF1ZUJ5LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfRUxFTUVOVF9FUlJPUiA9ICdQb3BwZXI6IEludmFsaWQgcmVmZXJlbmNlIG9yIHBvcHBlciBhcmd1bWVudCBwcm92aWRlZC4gVGhleSBtdXN0IGJlIGVpdGhlciBhIERPTSBlbGVtZW50IG9yIHZpcnR1YWwgZWxlbWVudC4nO1xudmFyIElORklOSVRFX0xPT1BfRVJST1IgPSAnUG9wcGVyOiBBbiBpbmZpbml0ZSBsb29wIGluIHRoZSBtb2RpZmllcnMgY3ljbGUgaGFzIGJlZW4gZGV0ZWN0ZWQhIFRoZSBjeWNsZSBoYXMgYmVlbiBpbnRlcnJ1cHRlZCB0byBwcmV2ZW50IGEgYnJvd3NlciBjcmFzaC4nO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pOyAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbW9kaWZpZXJzIHNvIHRoYXQgdGhlIGNvbnN1bWVyIHdpbGwgZ2V0IHdhcm5lZFxuICAgICAgICAvLyBpZiBvbmUgb2YgdGhlIG1vZGlmaWVycyBpcyBpbnZhbGlkIGZvciBhbnkgcmVhc29uXG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgIHZhciBtb2RpZmllcnMgPSB1bmlxdWVCeShbXS5jb25jYXQob3JkZXJlZE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpO1xuXG4gICAgICAgICAgaWYgKGdldEJhc2VQbGFjZW1lbnQoc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgICAgICAgICB2YXIgZmxpcE1vZGlmaWVyID0gc3RhdGUub3JkZXJlZE1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYyLm5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAnZmxpcCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFmbGlwTW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhdXRvXCIgcGxhY2VtZW50cyByZXF1aXJlIHRoZSBcImZsaXBcIiBtb2RpZmllciBiZScsICdwcmVzZW50IGFuZCBlbmFibGVkIHRvIHdvcmsuJ10uam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBvcHBlciksXG4gICAgICAgICAgICAgIG1hcmdpblRvcCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblRvcCxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCxcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdDsgLy8gV2Ugbm8gbG9uZ2VyIHRha2UgaW50byBhY2NvdW50IGBtYXJnaW5zYCBvbiB0aGUgcG9wcGVyLCBhbmQgaXQgY2FuXG4gICAgICAgICAgLy8gY2F1c2UgYnVncyB3aXRoIHBvc2l0aW9uaW5nLCBzbyB3ZSdsbCB3YXJuIHRoZSBjb25zdW1lclxuXG5cbiAgICAgICAgICBpZiAoW21hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdF0uc29tZShmdW5jdGlvbiAobWFyZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXJnaW4pO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IENTUyBcIm1hcmdpblwiIHN0eWxlcyBjYW5ub3QgYmUgdXNlZCB0byBhcHBseSBwYWRkaW5nJywgJ2JldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50IG9yIGJvdW5kYXJ5LicsICdUbyByZXBsaWNhdGUgbWFyZ2luLCB1c2UgdGhlIGBvZmZzZXRgIG1vZGlmaWVyLCBhcyB3ZWxsIGFzJywgJ3RoZSBgcGFkZGluZ2Agb3B0aW9uIGluIHRoZSBgcHJldmVudE92ZXJmbG93YCBhbmQgYGZsaXBgJywgJ21vZGlmaWVycy4nXS5qb2luKCcgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fZGVidWdfbG9vcHNfXyA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgX19kZWJ1Z19sb29wc19fICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChfX2RlYnVnX2xvb3BzX18gPiAxMDApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTkZJTklURV9MT09QX0VSUk9SKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmMyRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL2luZGV4LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTUFYX1VJRCA9IDFfMDAwXzAwMFxuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwXG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJ1xuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWBcbiAgfVxuXG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgKCFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YFxuICAgIH1cblxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG5jb25zdCBnZXRTZWxlY3RvckZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICBpZiAoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbFxufVxuXG5jb25zdCBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgbGV0IHsgdHJhbnNpdGlvbkR1cmF0aW9uLCB0cmFuc2l0aW9uRGVsYXkgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG5cbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KVxuXG4gIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb24uc3BsaXQoJywnKVswXVxuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXVxuXG4gIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVJcbn1cblxuY29uc3QgdHJpZ2dlclRyYW5zaXRpb25FbmQgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpXG59XG5cbmNvbnN0IGlzRWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodHlwZW9mIG9iamVjdC5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0WzBdXG4gIH1cblxuICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuY29uc3QgZ2V0RWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QuanF1ZXJ5ID8gb2JqZWN0WzBdIDogb2JqZWN0XG4gIH1cblxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvYmplY3QpXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBpc1Zpc2libGUgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSdcbiAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgY29uc3QgY2xvc2VkRGV0YWlscyA9IGVsZW1lbnQuY2xvc2VzdCgnZGV0YWlsczpub3QoW29wZW5dKScpXG5cbiAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGVcbiAgfVxuXG4gIGlmIChjbG9zZWREZXRhaWxzICE9PSBlbGVtZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnQuY2xvc2VzdCgnc3VtbWFyeScpXG4gICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGVcbn1cblxuY29uc3QgaXNEaXNhYmxlZCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgZWxlbWVudC5kaXNhYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZWxlbWVudC5kaXNhYmxlZFxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnXG59XG5cbmNvbnN0IGZpbmRTaGFkb3dSb290ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDYW4gZmluZCB0aGUgc2hhZG93IHJvb3Qgb3RoZXJ3aXNlIGl0J2xsIHJldHVybiB0aGUgZG9jdW1lbnRcbiAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJvb3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKVxuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsXG4gIH1cblxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSlcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50Lm9mZnNldEhlaWdodCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xufVxuXG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiB3aW5kb3cualF1ZXJ5XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW11cblxuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBpc1JUTCA9ICgpID0+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnXG5cbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwbHVnaW4uTkFNRVxuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXVxuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2VcbiAgICAgICQuZm5bbmFtZV0uQ29uc3RydWN0b3IgPSBwbHVnaW5cbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZXhlY3V0ZSA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNVxuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nXG5cbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG5cbiAgY29uc3QgaGFuZGxlciA9ICh7IHRhcmdldCB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNhbGxlZCA9IHRydWVcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gIH1cblxuICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpXG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBjb25zdCBsaXN0TGVuZ3RoID0gbGlzdC5sZW5ndGhcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpXG5cbiAgLy8gaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpc3QgcmV0dXJuIGFuIGVsZW1lbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gYW5kIGlmIGN5Y2xlIGlzIGFsbG93ZWRcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiAhc2hvdWxkR2V0TmV4dCAmJiBpc0N5Y2xlQWxsb3dlZCA/IGxpc3RbbGlzdExlbmd0aCAtIDFdIDogbGlzdFswXVxuICB9XG5cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMVxuXG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbGlzdFtNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdExlbmd0aCAtIDEpKV1cbn1cblxuZXhwb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBleGVjdXRlLFxuICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLFxuICBmaW5kU2hhZG93Um9vdCxcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgZ2V0alF1ZXJ5LFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCxcbiAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQsXG4gIGdldFVJRCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNFbGVtZW50LFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICBub29wLFxuICBvbkRPTUNvbnRlbnRMb2FkZWQsXG4gIHJlZmxvdyxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmQsXG4gIHRvVHlwZVxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBnZXRqUXVlcnkgfSBmcm9tICcuLi91dGlsL2luZGV4J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qL1xuY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovXG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvXG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge30gLy8gRXZlbnRzIHN0b3JhZ2VcbmxldCB1aWRFdmVudCA9IDFcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn1cblxuY29uc3QgbmF0aXZlRXZlbnRzID0gbmV3IFNldChbXG4gICdjbGljaycsXG4gICdkYmxjbGljaycsXG4gICdtb3VzZXVwJyxcbiAgJ21vdXNlZG93bicsXG4gICdjb250ZXh0bWVudScsXG4gICdtb3VzZXdoZWVsJyxcbiAgJ0RPTU1vdXNlU2Nyb2xsJyxcbiAgJ21vdXNlb3ZlcicsXG4gICdtb3VzZW91dCcsXG4gICdtb3VzZW1vdmUnLFxuICAnc2VsZWN0c3RhcnQnLFxuICAnc2VsZWN0ZW5kJyxcbiAgJ2tleWRvd24nLFxuICAna2V5cHJlc3MnLFxuICAna2V5dXAnLFxuICAnb3JpZW50YXRpb25jaGFuZ2UnLFxuICAndG91Y2hzdGFydCcsXG4gICd0b3VjaG1vdmUnLFxuICAndG91Y2hlbmQnLFxuICAndG91Y2hjYW5jZWwnLFxuICAncG9pbnRlcmRvd24nLFxuICAncG9pbnRlcm1vdmUnLFxuICAncG9pbnRlcnVwJyxcbiAgJ3BvaW50ZXJsZWF2ZScsXG4gICdwb2ludGVyY2FuY2VsJyxcbiAgJ2dlc3R1cmVzdGFydCcsXG4gICdnZXN0dXJlY2hhbmdlJyxcbiAgJ2dlc3R1cmVlbmQnLFxuICAnZm9jdXMnLFxuICAnYmx1cicsXG4gICdjaGFuZ2UnLFxuICAncmVzZXQnLFxuICAnc2VsZWN0JyxcbiAgJ3N1Ym1pdCcsXG4gICdmb2N1c2luJyxcbiAgJ2ZvY3Vzb3V0JyxcbiAgJ2xvYWQnLFxuICAndW5sb2FkJyxcbiAgJ2JlZm9yZXVubG9hZCcsXG4gICdyZXNpemUnLFxuICAnbW92ZScsXG4gICdET01Db250ZW50TG9hZGVkJyxcbiAgJ3JlYWR5c3RhdGVjaGFuZ2UnLFxuICAnZXJyb3InLFxuICAnYWJvcnQnLFxuICAnc2Nyb2xsJ1xuXSlcblxuLyoqXG4gKiBQcml2YXRlIG1ldGhvZHNcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRXZlbnRVaWQoZWxlbWVudCwgdWlkKSB7XG4gIHJldHVybiAodWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gKSB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kytcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChlbGVtZW50KVxuXG4gIGVsZW1lbnQudWlkRXZlbnQgPSB1aWRcbiAgZXZlbnRSZWdpc3RyeVt1aWRdID0gZXZlbnRSZWdpc3RyeVt1aWRdIHx8IHt9XG5cbiAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgaHlkcmF0ZU9iaihldmVudCwgeyBkZWxlZ2F0ZVRhcmdldDogZWxlbWVudCB9KVxuXG4gICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIGZuKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5hcHBseShlbGVtZW50LCBbZXZlbnRdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIHNlbGVjdG9yLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxuXG4gICAgZm9yIChsZXQgeyB0YXJnZXQgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaHlkcmF0ZU9iaihldmVudCwgeyBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0IH0pXG5cbiAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGFyZ2V0LCBbZXZlbnRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGV2ZW50cylcbiAgICAuZmluZChldmVudCA9PiBldmVudC5jYWxsYWJsZSA9PT0gY2FsbGFibGUgJiYgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yID09PSBkZWxlZ2F0aW9uU2VsZWN0b3IpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICBjb25zdCBpc0RlbGVnYXRlZCA9IHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJ1xuICAvLyB0b2RvOiB0b29sdGlwIHBhc3NlcyBgZmFsc2VgIGluc3RlYWQgb2Ygc2VsZWN0b3IsIHNvIHdlIG5lZWQgdG8gY2hlY2tcbiAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IChoYW5kbGVyIHx8IGRlbGVnYXRpb25GdW5jdGlvbilcbiAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudClcblxuICBpZiAoIW5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50XG4gIH1cblxuICByZXR1cm4gW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XVxufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIG9uZU9mZikge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG5cbiAgLy8gaW4gY2FzZSBvZiBtb3VzZWVudGVyIG9yIG1vdXNlbGVhdmUgd3JhcCB0aGUgaGFuZGxlciB3aXRoaW4gYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgaXRzIERPTSBwb3NpdGlvblxuICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgIGNvbnN0IHdyYXBGdW5jdGlvbiA9IGZuID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IChldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSlcbiAgfVxuXG4gIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudClcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSlcbiAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbClcblxuICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChjYWxsYWJsZSwgb3JpZ2luYWxUeXBlRXZlbnQucmVwbGFjZShuYW1lc3BhY2VSZWdleCwgJycpKVxuICBjb25zdCBmbiA9IGlzRGVsZWdhdGVkID9cbiAgICBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBjYWxsYWJsZSkgOlxuICAgIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpXG5cbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbFxuICBmbi5jYWxsYWJsZSA9IGNhbGxhYmxlXG4gIGZuLm9uZU9mZiA9IG9uZU9mZlxuICBmbi51aWRFdmVudCA9IHVpZFxuICBoYW5kbGVyc1t1aWRdID0gZm5cblxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgaXNEZWxlZ2F0ZWQpXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpXG5cbiAgaWYgKCFmbikge1xuICAgIHJldHVyblxuICB9XG5cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSlcbiAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XVxufVxuXG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9XG5cbiAgZm9yIChjb25zdCBoYW5kbGVyS2V5IG9mIE9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRbaGFuZGxlcktleV1cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAvLyBhbGxvdyB0byBnZXQgdGhlIG5hdGl2ZSBldmVudHMgZnJvbSBuYW1lc3BhY2VkIGV2ZW50cyAoJ2NsaWNrLmJzLmJ1dHRvbicgLS0+ICdjbGljaycpXG4gIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpXG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50XG59XG5cbmNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgZmFsc2UpXG4gIH0sXG5cbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpXG4gIH0sXG5cbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbilcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IHR5cGVFdmVudCAhPT0gb3JpZ2luYWxUeXBlRXZlbnRcbiAgICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpXG4gICAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuICAgIGNvbnN0IGlzTmFtZXNwYWNlID0gb3JpZ2luYWxUeXBlRXZlbnQuc3RhcnRzV2l0aCgnLicpXG5cbiAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2ltcGxlc3QgY2FzZTogaGFuZGxlciBpcyBwYXNzZWQsIHJlbW92ZSB0aGF0IGxpc3RlbmVyIE9OTFkuXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRFdmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXlIYW5kbGVycyBvZiBPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKVxuXG4gICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRba2V5SGFuZGxlcnNdXG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSBldmVudCAhPT0gdHlwZUV2ZW50XG5cbiAgICBsZXQgalF1ZXJ5RXZlbnQgPSBudWxsXG4gICAgbGV0IGJ1YmJsZXMgPSB0cnVlXG4gICAgbGV0IG5hdGl2ZURpc3BhdGNoID0gdHJ1ZVxuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2VcblxuICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICBqUXVlcnlFdmVudCA9ICQuRXZlbnQoZXZlbnQsIGFyZ3MpXG5cbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudClcbiAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKVxuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKVxuICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpXG4gICAgfVxuXG4gICAgbGV0IGV2dCA9IG5ldyBFdmVudChldmVudCwgeyBidWJibGVzLCBjYW5jZWxhYmxlOiB0cnVlIH0pXG4gICAgZXZ0ID0gaHlkcmF0ZU9iaihldnQsIGFyZ3MpXG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfVxuXG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2dFxuICB9XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhKSB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGEgfHwge30pKSB7XG4gICAgdHJ5IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWVcbiAgICB9IGNhdGNoIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50SGFuZGxlclxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogZG9tL2RhdGEuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKClcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzZXQoZWxlbWVudCwga2V5LCBpbnN0YW5jZSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KGVsZW1lbnQsIG5ldyBNYXAoKSlcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICAvLyBtYWtlIGl0IGNsZWFyIHdlIG9ubHkgd2FudCBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnRcbiAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlciB3aGVuIG11bHRpcGxlIGtleS9pbnN0YW5jZXMgYXJlIGZpbmUgdG8gYmUgdXNlZFxuICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEJvb3RzdHJhcCBkb2Vzbid0IGFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnQuIEJvdW5kIGluc3RhbmNlOiAke0FycmF5LmZyb20oaW5zdGFuY2VNYXAua2V5cygpKVswXX0uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGluc3RhbmNlTWFwLnNldChrZXksIGluc3RhbmNlKVxuICB9LFxuXG4gIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldChlbGVtZW50KS5nZXQoa2V5KSB8fCBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICByZW1vdmUoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KVxuXG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSlcblxuICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICBlbGVtZW50TWFwLmRlbGV0ZShlbGVtZW50KVxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YClcbn1cblxuY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gIHNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKVxuICB9LFxuXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YClcbiAgfSxcblxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge31cbiAgICBjb25zdCBic0tleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykgJiYgIWtleS5zdGFydHNXaXRoKCdic0NvbmZpZycpKVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgYnNLZXlzKSB7XG4gICAgICBsZXQgcHVyZUtleSA9IGtleS5yZXBsYWNlKC9eYnMvLCAnJylcbiAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aClcbiAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKVxuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRvclxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBpc0VsZW1lbnQsIHRvVHlwZSB9IGZyb20gJy4vaW5kZXgnXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi4vZG9tL21hbmlwdWxhdG9yJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge30gLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gIH1cblxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyhjb25maWdUeXBlcykpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZXMgPSBjb25maWdUeXBlc1twcm9wZXJ0eV1cbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW3Byb3BlcnR5XVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSlcblxuICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpZ1xuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRGF0YSBmcm9tICcuL2RvbS9kYXRhJ1xuaW1wb3J0IHsgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiwgZ2V0RWxlbWVudCB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBDb25maWcgZnJvbSAnLi91dGlsL2NvbmZpZydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBWRVJTSU9OID0gJzUuMi4zJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYXNlQ29tcG9uZW50IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudClcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcblxuICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpXG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgdGhpcy5fZWxlbWVudClcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZylcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHJldHVybiBEYXRhLmdldChnZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKVxuICB9XG5cbiAgc3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpXG4gIH1cblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAgfVxuXG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gXG4gIH1cblxuICBzdGF0aWMgZ2V0IEVWRU5UX0tFWSgpIHtcbiAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YFxuICB9XG5cbiAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLkVWRU5UX0tFWX1gXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZUNvbXBvbmVudFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCB7IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsIGlzRGlzYWJsZWQgfSBmcm9tICcuL2luZGV4J1xuXG5jb25zdCBlbmFibGVEaXNtaXNzVHJpZ2dlciA9IChjb21wb25lbnQsIG1ldGhvZCA9ICdoaWRlJykgPT4ge1xuICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YFxuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUVcblxuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIGNsaWNrRXZlbnQsIGBbZGF0YS1icy1kaXNtaXNzPVwiJHtuYW1lfVwiXWAsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YClcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICAgIC8vIE1ldGhvZCBhcmd1bWVudCBpcyBsZWZ0LCBmb3IgQWxlcnQgYW5kIG9ubHksIGFzIGl0IGRvZXNuJ3QgaW1wbGVtZW50IHRoZSAnaGlkZScgbWV0aG9kXG4gICAgaW5zdGFuY2VbbWV0aG9kXSgpXG4gIH0pXG59XG5cbmV4cG9ydCB7XG4gIGVuYWJsZURpc21pc3NUcmlnZ2VyXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnYWxlcnQnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKVxuXG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRClcbiAgICB0aGlzLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IGJ1dHRvbi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdidXR0b24nXG5jb25zdCBEQVRBX0tFWSA9ICdicy5idXR0b24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJ1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICAvLyBUb2dnbGUgY2xhc3MgYW5kIHN5bmMgdGhlIGBhcmlhLXByZXNzZWRgIGF0dHJpYnV0ZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGAudG9nZ2xlKClgIG1ldGhvZFxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcylcblxuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pXG5cbiAgZGF0YS50b2dnbGUoKVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25cbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IGRvbS9zZWxlY3Rvci1lbmdpbmUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBpc0Rpc2FibGVkLCBpc1Zpc2libGUgfSBmcm9tICcuLi91dGlsL2luZGV4J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICBmaW5kKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpKVxuICB9LFxuXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKVxuICB9LFxuXG4gIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5lbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpXG4gIH0sXG5cbiAgcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXVxuICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKVxuXG4gICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpXG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3RvcilcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50c1xuICB9LFxuXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmdcblxuICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbcHJldmlvdXNdXG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZ1xuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9LFxuICAvLyBUT0RPOiB0aGlzIGlzIG5vdyB1bnVzZWQ7IHJlbW92ZSBsYXRlciBhbG9uZyB3aXRoIHByZXYoKVxuICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IG5leHQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF1cbiAgICAgIH1cblxuICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbXG4gICAgICAnYScsXG4gICAgICAnYnV0dG9uJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnZGV0YWlscycsXG4gICAgICAnW3RhYmluZGV4XScsXG4gICAgICAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXG4gICAgXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJylcblxuICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpc0Rpc2FibGVkKGVsKSAmJiBpc1Zpc2libGUoZWwpKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdG9yRW5naW5lXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBleGVjdXRlIH0gZnJvbSAnLi9pbmRleCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3N3aXBlJ1xuY29uc3QgRVZFTlRfS0VZID0gJy5icy5zd2lwZSdcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWBcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCdcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJ1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fZGVsdGFYID0gMFxuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuICAgIHRoaXMuX2luaXRFdmVudHMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYXG4gICAgfVxuICB9XG5cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWFxuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKClcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjaylcbiAgfVxuXG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgP1xuICAgICAgMCA6XG4gICAgICBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVhcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYXG5cbiAgICB0aGlzLl9kZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKVxuICB9XG5cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpcGVcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgcmVmbG93LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZFxufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IFN3aXBlIGZyb20gJy4vdXRpbC9zd2lwZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjYXJvdXNlbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNhcm91c2VsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEFSUk9XX0xFRlRfS0VZID0gJ0Fycm93TGVmdCdcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0J1xuY29uc3QgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMCAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0J1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2J1xuY29uc3QgRElSRUNUSU9OX0xFRlQgPSAnbGVmdCdcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCdcblxuY29uc3QgRVZFTlRfU0xJREUgPSBgc2xpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TTElEID0gYHNsaWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9EUkFHX1NUQVJUID0gYGRyYWdzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0NBUk9VU0VMID0gJ2Nhcm91c2VsJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSdcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFSVCA9ICdjYXJvdXNlbC1pdGVtLXN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCdcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9JVEVNID0gU0VMRUNUT1JfQUNUSVZFICsgU0VMRUNUT1JfSVRFTVxuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJ1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycydcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU0xJREUgPSAnW2RhdGEtYnMtc2xpZGVdLCBbZGF0YS1icy1zbGlkZS10b10nXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1JJREUgPSAnW2RhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJdJ1xuXG5jb25zdCBLRVlfVE9fRElSRUNUSU9OID0ge1xuICBbQVJST1dfTEVGVF9LRVldOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVldOiBESVJFQ1RJT05fTEVGVFxufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHBhdXNlOiAnaG92ZXInLFxuICByaWRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHdyYXA6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsIC8vIFRPRE86djYgcmVtb3ZlIGJvb2xlYW4gc3VwcG9ydFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBwYXVzZTogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICByaWRlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIHRvdWNoOiAnYm9vbGVhbicsXG4gIHdyYXA6ICdib29sZWFuJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDYXJvdXNlbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbFxuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBudWxsXG5cbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ESUNBVE9SUywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJpZGUgPT09IENMQVNTX05BTUVfQ0FST1VTRUwpIHtcbiAgICAgIHRoaXMuY3ljbGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgbmV4dCgpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9ORVhUKVxuICB9XG5cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIEZJWE1FIFRPRE8gdXNlIGBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGVgXG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKVxuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhckludGVydmFsKClcbiAgfVxuXG4gIGN5Y2xlKCkge1xuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKVxuICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKClcblxuICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5uZXh0V2hlblZpc2libGUoKSwgdGhpcy5fY29uZmlnLmludGVydmFsKVxuICB9XG5cbiAgX21heWJlRW5hYmxlQ3ljbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucmlkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLmN5Y2xlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmN5Y2xlKClcbiAgfVxuXG4gIHRvKGluZGV4KSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtcygpXG4gICAgaWYgKGluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy50byhpbmRleCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9nZXRBY3RpdmUoKSlcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVlxuXG4gICAgdGhpcy5fc2xpZGUob3JkZXIsIGl0ZW1zW2luZGV4XSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N3aXBlSGVscGVyKSB7XG4gICAgICB0aGlzLl9zd2lwZUhlbHBlci5kaXNwb3NlKClcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IGNvbmZpZy5pbnRlcnZhbFxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRU5URVIsICgpID0+IHRoaXMucGF1c2UoKSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUxFQVZFLCAoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiBTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKClcbiAgICB9XG4gIH1cblxuICBfYWRkVG91Y2hFdmVudExpc3RlbmVycygpIHtcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU1fSU1HLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGltZywgRVZFTlRfRFJBR19TVEFSVCwgZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSlcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgIT09ICdob3ZlcicpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcbiAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgaWYgKHRoaXMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dClcbiAgICAgIH1cblxuICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbClcbiAgICB9XG5cbiAgICBjb25zdCBzd2lwZUNvbmZpZyA9IHtcbiAgICAgIGxlZnRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fTEVGVCkpLFxuICAgICAgcmlnaHRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fUklHSFQpKSxcbiAgICAgIGVuZENhbGxiYWNrOiBlbmRDYWxsQmFja1xuICAgIH1cblxuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbmV3IFN3aXBlKHRoaXMuX2VsZW1lbnQsIHN3aXBlQ29uZmlnKVxuICB9XG5cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05bZXZlbnQua2V5XVxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSlcbiAgICB9XG4gIH1cblxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbXMoKS5pbmRleE9mKGVsZW1lbnQpXG4gIH1cblxuICBfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChpbmRleCkge1xuICAgIGlmICghdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgIGFjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpXG5cbiAgICBjb25zdCBuZXdBY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGBbZGF0YS1icy1zbGlkZS10bz1cIiR7aW5kZXh9XCJdYCwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpXG5cbiAgICBpZiAobmV3QWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJylcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgdGhpcy5fZ2V0QWN0aXZlKClcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKVxuXG4gICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gZWxlbWVudEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWxcbiAgfVxuXG4gIF9zbGlkZShvcmRlciwgZWxlbWVudCA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZ2V0QWN0aXZlKClcbiAgICBjb25zdCBpc05leHQgPSBvcmRlciA9PT0gT1JERVJfTkVYVFxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRJdGVtcygpLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKVxuXG4gICAgaWYgKG5leHRFbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KVxuXG4gICAgY29uc3QgdHJpZ2dlckV2ZW50ID0gZXZlbnROYW1lID0+IHtcbiAgICAgIHJldHVybiBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBldmVudE5hbWUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlciksXG4gICAgICAgIGZyb206IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KSxcbiAgICAgICAgdG86IG5leHRFbGVtZW50SW5kZXhcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRyaWdnZXJFdmVudChFVkVOVF9TTElERSlcblxuICAgIGlmIChzbGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgLy8gdG9kbzogY2hhbmdlIHRlc3RzIHRoYXQgdXNlIGVtcHR5IGRpdnMgdG8gYXZvaWQgdGhpcyBjaGVja1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbClcbiAgICB0aGlzLnBhdXNlKClcblxuICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWVcblxuICAgIHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobmV4dEVsZW1lbnRJbmRleClcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnRcblxuICAgIGNvbnN0IGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9TVEFSVCA6IENMQVNTX05BTUVfRU5EXG4gICAgY29uc3Qgb3JkZXJDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX05FWFQgOiBDTEFTU19OQU1FX1BSRVZcblxuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQob3JkZXJDbGFzc05hbWUpXG5cbiAgICByZWZsb3cobmV4dEVsZW1lbnQpXG5cbiAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpXG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcblxuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSlcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuXG4gICAgICB0cmlnZ2VyRXZlbnQoRVZFTlRfU0xJRClcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIGFjdGl2ZUVsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSlcblxuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKVxuICAgIH1cbiAgfVxuXG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKVxuICB9XG5cbiAgX2dldEFjdGl2ZSgpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudClcbiAgfVxuXG4gIF9nZXRJdGVtcygpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICB9XG5cbiAgX2NsZWFySW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfUFJFViA6IE9SREVSX05FWFRcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWXG4gIH1cblxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVFxuICAgIH1cblxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRhdGEudG8oY29uZmlnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9TTElERSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0NBUk9VU0VMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gIGNvbnN0IGNhcm91c2VsID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG4gIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpXG5cbiAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICBjYXJvdXNlbC50byhzbGlkZUluZGV4KVxuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKHRoaXMsICdzbGlkZScpID09PSAnbmV4dCcpIHtcbiAgICBjYXJvdXNlbC5uZXh0KClcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjYXJvdXNlbC5wcmV2KClcbiAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBjb25zdCBjYXJvdXNlbHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfUklERSlcblxuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNhcm91c2Vscykge1xuICAgIENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoY2Fyb3VzZWwpXG4gIH1cbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENhcm91c2VsKVxuXG5leHBvcnQgZGVmYXVsdCBDYXJvdXNlbFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2NvbGxhcHNlJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY29sbGFwc2UnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSdcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRUQgPSAnY29sbGFwc2VkJ1xuY29uc3QgQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4gPSBgOnNjb3BlIC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YFxuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnXG5cbmNvbnN0IFdJRFRIID0gJ3dpZHRoJ1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCdcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFUyA9ICcuY29sbGFwc2Uuc2hvdywgLmNvbGxhcHNlLmNvbGxhcHNpbmcnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgcGFyZW50OiBudWxsLFxuICB0b2dnbGU6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIHBhcmVudDogJyhudWxsfGVsZW1lbnQpJyxcbiAgdG9nZ2xlOiAnYm9vbGVhbidcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl90cmlnZ2VyQXJyYXkgPSBbXVxuXG4gICAgY29uc3QgdG9nZ2xlTGlzdCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG5cbiAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdG9nZ2xlTGlzdCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pXG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcilcbiAgICAgICAgLmZpbHRlcihmb3VuZEVsZW1lbnQgPT4gZm91bmRFbGVtZW50ID09PSB0aGlzLl9lbGVtZW50KVxuXG4gICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0aGlzLl9pc1Nob3duKCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b2dnbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBhY3RpdmVDaGlsZHJlbiA9IFtdXG5cbiAgICAvLyBmaW5kIGFjdGl2ZSBjaGlsZHJlblxuICAgIGlmICh0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICBhY3RpdmVDaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9BQ1RJVkVTKVxuICAgICAgICAuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudClcbiAgICAgICAgLm1hcChlbGVtZW50ID0+IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgeyB0b2dnbGU6IGZhbHNlIH0pKVxuICAgIH1cblxuICAgIGlmIChhY3RpdmVDaGlsZHJlbi5sZW5ndGggJiYgYWN0aXZlQ2hpbGRyZW5bMF0uX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpXG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhY3RpdmVJbnN0YW5jZSBvZiBhY3RpdmVDaGlsZHJlbikge1xuICAgICAgYWN0aXZlSW5zdGFuY2UuaGlkZSgpXG4gICAgfVxuXG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpXG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwXG5cbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnXG5cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKVxuICAgIH1cblxuICAgIGNvbnN0IGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSlcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YFxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YFxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl19cHhgXG5cbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVylcblxuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0aGlzLl90cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRyaWdnZXIpXG5cbiAgICAgIGlmIChlbGVtZW50ICYmICF0aGlzLl9pc1Nob3duKGVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbdHJpZ2dlcl0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSkgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVFxuICB9XG5cbiAgX2luaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudClcblxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbZWxlbWVudF0sIHRoaXMuX2lzU2hvd24oc2VsZWN0ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9nZXRGaXJzdExldmVsQ2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpXG4gICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGlmIGdyZWF0ZXIgZGVwdGhcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW1lbnQgPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW1lbnQpKVxuICB9XG5cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyaWdnZXJBcnJheSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQ09MTEFQU0VELCAhaXNPcGVuKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHt9XG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgX2NvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IChldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiBldmVudC5kZWxlZ2F0ZVRhcmdldC50YWdOYW1lID09PSAnQScpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpXG4gIGNvbnN0IHNlbGVjdG9yRWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKVxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZWxlY3RvckVsZW1lbnRzKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7IHRvZ2dsZTogZmFsc2UgfSkudG9nZ2xlKClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzRGlzYWJsZWQsXG4gIGlzRWxlbWVudCxcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgbm9vcFxufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Ryb3Bkb3duJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMiAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSID0gJ2Ryb3B1cC1jZW50ZXInXG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04gPSBgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX0uJHtDTEFTU19OQU1FX1NIT1d9YFxuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IFNFTEVDVE9SX05BVkJBUiA9ICcubmF2YmFyJ1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdidcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5cbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvQ2xvc2U6IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBvZmZzZXQ6IFswLCAyXSxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlIC8vIGRyb3Bkb3duIHdyYXBwZXJcbiAgICAvLyB0b2RvOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjIvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgdGhpcy5fbWVudSA9IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KVxuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCByZWxhdGVkVGFyZ2V0KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF0aGlzLl9wYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJylcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmXG4gICAgICB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYClcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlXG4gICAgfVxuXG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKClcbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZylcbiAgfVxuXG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fcGFyZW50XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUF9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1RPUENFTlRFUlxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUlxuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJ1xuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT01cbiAgfVxuXG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVIpICE9PSBudWxsXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKSAvLyB0b2RvOnY2IHJlbW92ZVxuICAgICAgZGVmYXVsdEJzUG9wcGVyQ29uZmlnLm1vZGlmaWVycyA9IFt7XG4gICAgICAgIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9XVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi4odHlwZW9mIHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKGRlZmF1bHRCc1BvcHBlckNvbmZpZykgOiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKVxuICAgIH1cbiAgfVxuXG4gIF9zZWxlY3RNZW51SXRlbSh7IGtleSwgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGVsZW1lbnQgPT4gaXNWaXNpYmxlKGVsZW1lbnQpKVxuXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9wZW5Ub2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTilcblxuICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIG9wZW5Ub2dnbGVzKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlKVxuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpXG4gICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSlcbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8XG4gICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0KSB8fFxuICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldClcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmICgoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkpIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudCB9XG5cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgYW4gVVAgfCBET1dOIHwgRVNDQVBFIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWEgJiYgaWYga2V5IGlzIG90aGVyIHRoYW4gRVNDQVBFID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcblxuICAgIGNvbnN0IGlzSW5wdXQgPSAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKVxuICAgIGNvbnN0IGlzRXNjYXBlRXZlbnQgPSBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVlcbiAgICBjb25zdCBpc1VwT3JEb3duRXZlbnQgPSBbQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KVxuXG4gICAgaWYgKCFpc1VwT3JEb3duRXZlbnQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0lucHV0ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyB0b2RvOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjIvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFKSA/XG4gICAgICB0aGlzIDpcbiAgICAgIChTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXSB8fFxuICAgICAgICBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXSB8fFxuICAgICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKSlcblxuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pXG5cbiAgICBpZiAoaXNVcE9yRG93bkV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaW5zdGFuY2Uuc2hvdygpXG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuX2lzU2hvd24oKSkgeyAvLyBlbHNlIGlzIGVzY2FwZSBhbmQgd2UgY2hlY2sgaWYgaXQgaXMgc2hvd25cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBpbnN0YW5jZS5oaWRlKClcbiAgICAgIGdldFRvZ2dsZUJ1dHRvbi5mb2N1cygpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcilcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKClcbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93blxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL2luZGV4J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQgPSAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCdcbmNvbnN0IFNFTEVDVE9SX1NUSUNLWV9DT05URU5UID0gJy5zdGlja3ktdG9wJ1xuY29uc3QgUFJPUEVSVFlfUEFERElORyA9ICdwYWRkaW5nLXJpZ2h0J1xuY29uc3QgUFJPUEVSVFlfTUFSR0lOID0gJ21hcmdpbi1yaWdodCdcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHlcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aClcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKClcbiAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKVxuICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aClcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlIC0gd2lkdGgpXG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4pXG4gIH1cblxuICBpc092ZXJmbG93aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgfVxuXG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSlcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSlcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKVxuICB9XG5cbiAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KVxuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5LCBhY3R1YWxWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSlcbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byByZW1vdmUgdGhlIHByb3BlcnR5IGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGA7IHRoZSB2YWx1ZSBjYW4gYWxzbyBiZSB6ZXJvXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KVxuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSlcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjaylcbiAgfVxuXG4gIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICBjYWxsQmFjayhzZWxlY3RvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VsIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBjYWxsQmFjayhzZWwpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbEJhckhlbHBlclxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBleGVjdXRlLCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLCBnZXRFbGVtZW50LCByZWZsb3cgfSBmcm9tICcuL2luZGV4J1xuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2JhY2tkcm9wJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWBcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBjbGlja0NhbGxiYWNrOiBudWxsLFxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgaXNWaXNpYmxlOiB0cnVlLCAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdyhjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZCgpXG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3coZWxlbWVudClcbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cblxuICBoaWRlKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKVxuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWVcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRcbiAgfVxuXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KClcbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpXG5cbiAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKVxuICAgIH0pXG5cbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZVxuICB9XG5cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tkcm9wXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpIC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpXG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7IHRyYXBFbGVtZW50IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudClcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsIGlzUlRMLCBpc1Zpc2libGUsIHJlZmxvdyB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4vdXRpbC9iYWNrZHJvcCdcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi91dGlsL2ZvY3VzdHJhcCdcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdtb2RhbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSdcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19ESVNNSVNTID0gYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJ1xuXG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5tb2RhbC5zaG93J1xuY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnXG5jb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5J1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBmb2N1czogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGZvY3VzOiAnYm9vbGVhbicsXG4gIGtleWJvYXJkOiAnYm9vbGVhbidcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5fZGlhbG9nID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ESUFMT0csIHRoaXMuX2VsZW1lbnQpXG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgdGhpcy5fc2Nyb2xsQmFyID0gbmV3IFNjcm9sbEJhckhlbHBlcigpXG5cbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICB0aGlzLl9zY3JvbGxCYXIuaGlkZSgpXG5cbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9PUEVOKVxuXG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcblxuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IGh0bWxFbGVtZW50IG9mIFt3aW5kb3csIHRoaXMuX2RpYWxvZ10pIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoaHRtbEVsZW1lbnQsIEVWRU5UX0tFWSlcbiAgICB9XG5cbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKClcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGlzVmlzaWJsZTogQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApLCAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWUsXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAvLyB0cnkgdG8gYXBwZW5kIGR5bmFtaWMgbW9kYWxcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpXG4gICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cbiAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZylcbiAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMFxuICAgIH1cblxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgfSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgIXRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudDIgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0IHx8IHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50Mi50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcblxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTilcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKVxuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KClcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9KVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSlcbiAgfVxuXG4gIF90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKVxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaW5pdGlhbE92ZXJmbG93WSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZXG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKGluaXRpYWxPdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU1RBVElDKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbidcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZXG4gICAgICB9LCB0aGlzLl9kaWFsb2cpXG4gICAgfSwgdGhpcy5fZGlhbG9nKVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICovXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpXG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDBcblxuICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCdcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgXG4gICAgfVxuXG4gICAgaWYgKCFpc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nUmlnaHQnIDogJ3BhZGRpbmdMZWZ0J1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG4gIH1cblxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJydcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1csIHNob3dFdmVudCA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpXG4gIGlmIChhbHJlYWR5T3Blbikge1xuICAgIE1vZGFsLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE1vZGFsKVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc0Rpc2FibGVkLFxuICBpc1Zpc2libGVcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IFNjcm9sbEJhckhlbHBlciBmcm9tICcuL3V0aWwvc2Nyb2xsYmFyJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wJ1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL3V0aWwvZm9jdXN0cmFwJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ29mZmNhbnZhcydcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm9mZmNhbnZhcydcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnXG5jb25zdCBDTEFTU19OQU1FX0hJRElORyA9ICdoaWRpbmcnXG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCdcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93J1xuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCJdJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG5cbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsIHx8IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7IHJlbGF0ZWRUYXJnZXQgfSlcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHRoaXMuX2VsZW1lbnQuYmx1cigpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElESU5HKVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfSElESU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKVxuXG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KClcbiAgICAgIH1cblxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIGNvbnN0IGNsaWNrQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfVxuXG4gICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgY29uc3QgaXNWaXNpYmxlID0gQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApXG5cbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogaXNWaXNpYmxlID8gY2xpY2tDYWxsYmFjayA6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpXG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG4gIGRhdGEudG9nZ2xlKHRoaXMpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KClcbiAgfVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKVxuICAgIH1cbiAgfVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9zYW5pdGl6ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB1cmlBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2NpdGUnLFxuICAnaHJlZicsXG4gICdpdGVtdHlwZScsXG4gICdsb25nZGVzYycsXG4gICdwb3N0ZXInLFxuICAnc3JjJyxcbiAgJ3hsaW5rOmhyZWYnXG5dKVxuXG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2lcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gKlxuICogU2hvdXQtb3V0IHRvIEFuZ3VsYXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzEyLjIueC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50c1xuICovXG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZXxzbXMpOnxbXiMmLzo/XSooPzpbIy8/XXwkKSkvaVxuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IG1hdGNoZXMgc2FmZSBkYXRhIFVSTHMuIE9ubHkgbWF0Y2hlcyBpbWFnZSwgdmlkZW8gYW5kIGF1ZGlvIHR5cGVzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xMi4yLngvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAqL1xuY29uc3QgREFUQV9VUkxfUEFUVEVSTiA9IC9eZGF0YTooPzppbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFtcXGQrL2Etel0rPSokL2lcblxuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpIHx8IERBVEFfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gIHJldHVybiBhbGxvd2VkQXR0cmlidXRlTGlzdC5maWx0ZXIoYXR0cmlidXRlUmVnZXggPT4gYXR0cmlidXRlUmVnZXggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgLnNvbWUocmVnZXggPT4gcmVnZXgudGVzdChhdHRyaWJ1dGVOYW1lKSlcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGl2OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sXG4gIH1cblxuICBpZiAoc2FuaXRpemVGdW5jdGlvbiAmJiB0eXBlb2Ygc2FuaXRpemVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZ1bmN0aW9uKHVuc2FmZUh0bWwpXG4gIH1cblxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpXG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpXG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSlcblxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbGxvd0xpc3QpLmluY2x1ZGVzKGVsZW1lbnROYW1lKSkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKVxuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBbXS5jb25jYXQoLi4uZWxlbWVudC5hdHRyaWJ1dGVzKVxuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKVxuXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlTGlzdCkge1xuICAgICAgaWYgKCFhbGxvd2VkQXR0cmlidXRlKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS5ub2RlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL3RlbXBsYXRlLWZhY3RvcnkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBEZWZhdWx0QWxsb3dsaXN0LCBzYW5pdGl6ZUh0bWwgfSBmcm9tICcuL3Nhbml0aXplcidcbmltcG9ydCB7IGdldEVsZW1lbnQsIGlzRWxlbWVudCB9IGZyb20gJy4uL3V0aWwvaW5kZXgnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdUZW1wbGF0ZUZhY3RvcnknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgY29udGVudDoge30sIC8vIHsgc2VsZWN0b3IgOiB0ZXh0ICwgIHNlbGVjdG9yMiA6IHRleHQyICwgfVxuICBleHRyYUNsYXNzOiAnJyxcbiAgaHRtbDogZmFsc2UsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+J1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufVxuXG5jb25zdCBEZWZhdWx0Q29udGVudFR5cGUgPSB7XG4gIGVudHJ5OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9ufG51bGwpJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9jb25maWcuY29udGVudClcbiAgICAgIC5tYXAoY29uZmlnID0+IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbmZpZykpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIH1cblxuICBoYXNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggPiAwXG4gIH1cblxuICBjaGFuZ2VDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29udGVudClcbiAgICB0aGlzLl9jb25maWcuY29udGVudCA9IHsgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsIC4uLmNvbnRlbnQgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0ZW1wbGF0ZVdyYXBwZXIuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZSh0aGlzLl9jb25maWcudGVtcGxhdGUpXG5cbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpXG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZVdyYXBwZXIuY2hpbGRyZW5bMF1cbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpXG5cbiAgICBpZiAoZXh0cmFDbGFzcykge1xuICAgICAgdGVtcGxhdGUuY2xhc3NMaXN0LmFkZCguLi5leHRyYUNsYXNzLnNwbGl0KCcgJykpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnKSB7XG4gICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KVxuICB9XG5cbiAgX2NoZWNrQ29udGVudChhcmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoYXJnKSkge1xuICAgICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7IHNlbGVjdG9yLCBlbnRyeTogY29udGVudCB9LCBEZWZhdWx0Q29udGVudFR5cGUpXG4gICAgfVxuICB9XG5cbiAgX3NldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpXG5cbiAgICBpZiAoIXRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpXG5cbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgdGhpcy5fcHV0RWxlbWVudEluVGVtcGxhdGUoZ2V0RWxlbWVudChjb250ZW50KSwgdGVtcGxhdGVFbGVtZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZShjb250ZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudFxuICB9XG5cbiAgX21heWJlU2FuaXRpemUoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZSA/IHNhbml0aXplSHRtbChhcmcsIHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKSA6IGFyZ1xuICB9XG5cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nID8gYXJnKHRoaXMpIDogYXJnXG4gIH1cblxuICBfcHV0RWxlbWVudEluVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gJydcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5hcHBlbmQoZWxlbWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZUZhY3RvcnlcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGZpbmRTaGFkb3dSb290LCBnZXRFbGVtZW50LCBnZXRVSUQsIGlzUlRMLCBub29wIH0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCB9IGZyb20gJy4vdXRpbC9zYW5pdGl6ZXInXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IFRlbXBsYXRlRmFjdG9yeSBmcm9tICcuL3V0aWwvdGVtcGxhdGUtZmFjdG9yeSdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3Rvb2x0aXAnXG5jb25zdCBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFsnc2FuaXRpemUnLCAnYWxsb3dMaXN0JywgJ3Nhbml0aXplRm4nXSlcblxuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX01PREFMID0gJ21vZGFsJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbmNvbnN0IFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIgPSAnLnRvb2x0aXAtaW5uZXInXG5jb25zdCBTRUxFQ1RPUl9NT0RBTCA9IGAuJHtDTEFTU19OQU1FX01PREFMfWBcblxuY29uc3QgRVZFTlRfTU9EQUxfSElERSA9ICdoaWRlLmJzLm1vZGFsJ1xuXG5jb25zdCBUUklHR0VSX0hPVkVSID0gJ2hvdmVyJ1xuY29uc3QgVFJJR0dFUl9GT0NVUyA9ICdmb2N1cydcbmNvbnN0IFRSSUdHRVJfQ0xJQ0sgPSAnY2xpY2snXG5jb25zdCBUUklHR0VSX01BTlVBTCA9ICdtYW51YWwnXG5cbmNvbnN0IEVWRU5UX0hJREUgPSAnaGlkZSdcbmNvbnN0IEVWRU5UX0hJRERFTiA9ICdoaWRkZW4nXG5jb25zdCBFVkVOVF9TSE9XID0gJ3Nob3cnXG5jb25zdCBFVkVOVF9TSE9XTiA9ICdzaG93bidcbmNvbnN0IEVWRU5UX0lOU0VSVEVEID0gJ2luc2VydGVkJ1xuY29uc3QgRVZFTlRfQ0xJQ0sgPSAnY2xpY2snXG5jb25zdCBFVkVOVF9GT0NVU0lOID0gJ2ZvY3VzaW4nXG5jb25zdCBFVkVOVF9GT0NVU09VVCA9ICdmb2N1c291dCdcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSAnbW91c2VlbnRlcidcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSAnbW91c2VsZWF2ZSdcblxuY29uc3QgQXR0YWNobWVudE1hcCA9IHtcbiAgQVVUTzogJ2F1dG8nLFxuICBUT1A6ICd0b3AnLFxuICBSSUdIVDogaXNSVEwoKSA/ICdsZWZ0JyA6ICdyaWdodCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG4gIExFRlQ6IGlzUlRMKCkgPyAncmlnaHQnIDogJ2xlZnQnXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGN1c3RvbUNsYXNzOiAnJyxcbiAgZGVsYXk6IDAsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgaHRtbDogZmFsc2UsXG4gIG9mZnNldDogWzAsIDBdLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBzZWxlY3RvcjogZmFsc2UsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nLFxuICB0aXRsZTogJycsXG4gIHRyaWdnZXI6ICdob3ZlciBmb2N1cydcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgZGVsYXk6ICcobnVtYmVyfG9iamVjdCknLFxuICBmYWxsYmFja1BsYWNlbWVudHM6ICdhcnJheScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnLFxuICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICB0cmlnZ2VyOiAnc3RyaW5nJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpXG4gICAgfVxuXG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgICB0aGlzLl90aW1lb3V0ID0gMFxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGxcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge31cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbnVsbFxuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBudWxsXG5cbiAgICAvLyBQcm90ZWN0ZWRcbiAgICB0aGlzLnRpcCA9IG51bGxcblxuICAgIHRoaXMuX3NldExpc3RlbmVycygpXG5cbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2VcbiAgfVxuXG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZFxuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrID0gIXRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2tcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9sZWF2ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbnRlcigpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsIHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpXG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cycpXG4gICAgfVxuXG4gICAgaWYgKCEodGhpcy5faXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1cpKVxuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBmaW5kU2hhZG93Um9vdCh0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGlzSW5UaGVEb20gPSAoc2hhZG93Um9vdCB8fCB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFpc0luVGhlRG9tKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB0b2RvIHY2IHJlbW92ZSB0aGlzIE9SIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXAuZ2V0QXR0cmlidXRlKCdpZCcpKVxuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpXG4gICAgfVxuXG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcClcblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTikpXG5cbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlYXZlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElERSkpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KClcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGwgLy8gaXQgaXMgYSB0cmljayB0byBzdXBwb3J0IG1hbnVhbCB0cmlnZ2VyaW5nXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4pKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpXG4gIH1cblxuICBfZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudCB8fCB0aGlzLl9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aXBcbiAgfVxuXG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKClcblxuICAgIC8vIHRvZG86IHJlbW92ZSB0aGlzIGNoZWNrIG9uIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFLCBDTEFTU19OQU1FX1NIT1cpXG4gICAgLy8gdG9kbzogb24gdjYgdGhlIGZvbGxvd2luZyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBDU1Mgb25seVxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKGBicy0ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXV0b2ApXG5cbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKClcblxuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRpcFxuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICAgIHRoaXMuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3RvcnlcbiAgfVxuXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9UT09MVElQX0lOTkVSXTogdGhpcy5fZ2V0VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgKHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLl9jb25maWcucGxhY2VtZW50ID09PSAnZnVuY3Rpb24nID9cbiAgICAgIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuX2VsZW1lbnQpIDpcbiAgICAgIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnRcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV1cbiAgICByZXR1cm4gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSlcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicgPyBhcmcuY2FsbCh0aGlzLl9lbGVtZW50KSA6IGFyZ1xuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmVTZXRQbGFjZW1lbnQnLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgICBmbjogZGF0YSA9PiB7XG4gICAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgICB0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdkYXRhLXBvcHBlci1wbGFjZW1lbnQnLCBkYXRhLnN0YXRlLnBsYWNlbWVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uKHR5cGVvZiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnID09PSAnZnVuY3Rpb24nID8gdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyhkZWZhdWx0QnNQb3BwZXJDb25maWcpIDogdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZylcbiAgICB9XG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKVxuXG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0spLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KVxuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKClcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOKVxuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFTEVBVkUpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVClcblxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IHRydWVcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpXG4gICAgICAgIH0pXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPVxuICAgICAgICAgICAgY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxuXG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuICB9XG5cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcblxuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSkgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKVxuICB9XG5cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG5cbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93KClcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdylcbiAgfVxuXG4gIF9sZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKVxuICB9XG5cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG4gIH1cblxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKVxuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKVxuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcilcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9jb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdGhpcy5fY29uZmlnW2tleV0pIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB0aGlzLl9jb25maWdba2V5XVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlXG4gICAgY29uZmlnLnRyaWdnZXIgPSAnbWFudWFsJ1xuXG4gICAgLy8gSW4gdGhlIGZ1dHVyZSBjYW4gYmUgcmVwbGFjZWQgd2l0aDpcbiAgICAvLyBjb25zdCBrZXlzV2l0aERpZmZlcmVudFZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykuZmlsdGVyKGVudHJ5ID0+IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlbnRyeVswXV0gIT09IHRoaXMuX2NvbmZpZ1tlbnRyeVswXV0pXG4gICAgLy8gYE9iamVjdC5mcm9tRW50cmllcyhrZXlzV2l0aERpZmZlcmVudFZhbHVlcylgXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKClcbiAgICAgIHRoaXMudGlwID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApXG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdwb3BvdmVyJ1xuXG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInXG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgK1xuICAgICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICtcbiAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2NsaWNrJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKVxuXG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiBzY3JvbGxzcHkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGdldEVsZW1lbnQsIGlzRGlzYWJsZWQsIGlzVmlzaWJsZSB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnc2Nyb2xsc3B5J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX0FDVElWQVRFID0gYGFjdGl2YXRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0sgPSBgY2xpY2ske0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nXG5jb25zdCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MgPSAnW2hyZWZdJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgb2Zmc2V0OiBudWxsLCAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLCAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fcm9vdEVsZW1lbnQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnQpLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnID8gbnVsbCA6IHRoaXMuX2VsZW1lbnRcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsXG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhID0ge1xuICAgICAgdmlzaWJsZUVudHJ5VG9wOiAwLFxuICAgICAgcGFyZW50U2Nyb2xsVG9wOiAwXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaCgpIC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKClcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHlcblxuICAgIC8vIFRPRE86IHY2IE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFVzZSByb290TWFyZ2luIG9ubHlcbiAgICBjb25maWcucm9vdE1hcmdpbiA9IGNvbmZpZy5vZmZzZXQgPyBgJHtjb25maWcub2Zmc2V0fXB4IDBweCAtMzAlYCA6IGNvbmZpZy5yb290TWFyZ2luXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNtb290aFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSylcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSywgU0VMRUNUT1JfVEFSR0VUX0xJTktTLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQoZXZlbnQudGFyZ2V0Lmhhc2gpXG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG9ic2VydmFibGVTZWN0aW9uLm9mZnNldFRvcCAtIHRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wXG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7IHRvcDogaGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSwgb3B0aW9ucylcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKVxuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3BcbiAgICAgIHRoaXMuX3Byb2Nlc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50U2Nyb2xsVG9wID0gKHRoaXMuX3Jvb3RFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3BcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcFxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKVxuXG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldClcblxuICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIHRhcmdldExpbmtzKSB7XG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcyBhbiBpZCBhbmQgaXMgbm90IGRpc2FibGVkXG4gICAgICBpZiAoIWFuY2hvci5oYXNoIHx8IGlzRGlzYWJsZWQoYW5jaG9yKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYW5jaG9yLmhhc2gsIHRoaXMuX2VsZW1lbnQpXG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBvYnNlcnZhYmxlU2VjdGlvbiBleGlzdHMgJiBpcyB2aXNpYmxlXG4gICAgICBpZiAoaXNWaXNpYmxlKG9ic2VydmFibGVTZWN0aW9uKSkge1xuICAgICAgICB0aGlzLl90YXJnZXRMaW5rcy5zZXQoYW5jaG9yLmhhc2gsIGFuY2hvcilcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChhbmNob3IuaGFzaCwgb2JzZXJ2YWJsZVNlY3Rpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRoaXMuX2NvbmZpZy50YXJnZXQpXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgdGhpcy5fYWN0aXZhdGVQYXJlbnRzKHRhcmdldClcblxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7IHJlbGF0ZWRUYXJnZXQ6IHRhcmdldCB9KVxuICB9XG5cbiAgX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpIHtcbiAgICAvLyBBY3RpdmF0ZSBkcm9wZG93biBwYXJlbnRzXG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNKSkge1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIHRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSlcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpc3RHcm91cCBvZiBTZWxlY3RvckVuZ2luZS5wYXJlbnRzKHRhcmdldCwgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApKSB7XG4gICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAvLyBXaXRoIGJvdGggPHVsPiBhbmQgPG5hdj4gbWFya3VwIGEgcGFyZW50IGlzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGFueSBuYXYgYW5jZXN0b3JcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBTZWxlY3RvckVuZ2luZS5wcmV2KGxpc3RHcm91cCwgU0VMRUNUT1JfTElOS19JVEVNUykpIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgY29uc3QgYWN0aXZlTm9kZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGAke1NFTEVDVE9SX1RBUkdFVF9MSU5LU30uJHtDTEFTU19OQU1FX0FDVElWRX1gLCBwYXJlbnQpXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGFjdGl2ZU5vZGVzKSB7XG4gICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNweSBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKSkge1xuICAgIFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHNweSlcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oU2Nyb2xsU3B5KVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxTcHlcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiwgZ2V0RWxlbWVudEZyb21TZWxlY3RvciwgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsIGlzRGlzYWJsZWQgfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RhYidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnXG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCdcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nXG5cbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnOm5vdCguZHJvcGRvd24tdG9nZ2xlKSdcblxuY29uc3QgU0VMRUNUT1JfVEFCX1BBTkVMID0gJy5saXN0LWdyb3VwLCAubmF2LCBbcm9sZT1cInRhYmxpc3RcIl0nXG5jb25zdCBTRUxFQ1RPUl9PVVRFUiA9ICcubmF2LWl0ZW0sIC5saXN0LWdyb3VwLWl0ZW0nXG5jb25zdCBTRUxFQ1RPUl9JTk5FUiA9IGAubmF2LWxpbmske05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCAubGlzdC1ncm91cC1pdGVtJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgW3JvbGU9XCJ0YWJcIl0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9YFxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdJyAvLyB0b2RvOnY2OiBjb3VsZCBiZSBvbmx5IGB0YWJgXG5jb25zdCBTRUxFQ1RPUl9JTk5FUl9FTEVNID0gYCR7U0VMRUNUT1JfSU5ORVJ9LCAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfWBcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFID0gYC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXWBcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9UQUJfUEFORUwpXG5cbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgICAvLyB0b2RvOiBzaG91bGQgVGhyb3cgZXhjZXB0aW9uIG9uIHY2XG4gICAgICAvLyB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2VsZW1lbnQub3V0ZXJIVE1MfSBoYXMgbm90IGEgdmFsaWQgcGFyZW50ICR7U0VMRUNUT1JfSU5ORVJfRUxFTX1gKVxuICAgIH1cblxuICAgIC8vIFNldCB1cCBpbml0aWFsIGFyaWEgYXR0cmlidXRlc1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzKHRoaXMuX3BhcmVudCwgdGhpcy5fZ2V0Q2hpbGRyZW4oKSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHsgLy8gU2hvd3MgdGhpcyBlbGVtIGFuZCBkZWFjdGl2YXRlIHRoZSBhY3RpdmUgc2libGluZyBpZiBleGlzdHNcbiAgICBjb25zdCBpbm5lckVsZW0gPSB0aGlzLl9lbGVtZW50XG4gICAgaWYgKHRoaXMuX2VsZW1Jc0FjdGl2ZShpbm5lckVsZW0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZWFyY2ggZm9yIGFjdGl2ZSB0YWIgb24gc2FtZSBwYXJlbnQgdG8gZGVhY3RpdmF0ZSBpdFxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW0oKVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gYWN0aXZlID9cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGFjdGl2ZSwgRVZFTlRfSElERSwgeyByZWxhdGVkVGFyZ2V0OiBpbm5lckVsZW0gfSkgOlxuICAgICAgbnVsbFxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIoaW5uZXJFbGVtLCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQ6IGFjdGl2ZSB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IChoaWRlRXZlbnQgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGFjdGl2ZSwgaW5uZXJFbGVtKVxuICAgIHRoaXMuX2FjdGl2YXRlKGlubmVyRWxlbSwgYWN0aXZlKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgIHRoaXMuX2FjdGl2YXRlKGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpIC8vIFNlYXJjaCBhbmQgYWN0aXZhdGUvc2hvdyB0aGUgcHJvcGVyIHNlY3Rpb25cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCB0cnVlKVxuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgdHJ1ZSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSkpXG4gIH1cblxuICBfZGVhY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIGVsZW1lbnQuYmx1cigpXG5cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpIC8vIFNlYXJjaCBhbmQgZGVhY3RpdmF0ZSB0aGUgc2hvd24gc2VjdGlvbiB0b29cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJylcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIGZhbHNlKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfSElEREVOLCB7IHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSlcbiAgfVxuXG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKCEoW0FSUk9XX0xFRlRfS0VZLCBBUlJPV19SSUdIVF9LRVksIEFSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKS8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpXG4gICAgY29uc3QgbmV4dEFjdGl2ZUVsZW1lbnQgPSBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKSwgZXZlbnQudGFyZ2V0LCBpc05leHQsIHRydWUpXG5cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KVxuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRDaGlsZHJlbigpIHsgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudClcbiAgfVxuXG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbFxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhwYXJlbnQsICdyb2xlJywgJ3RhYmxpc3QnKVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZClcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZClcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoY2hpbGQpXG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpXG5cbiAgICBpZiAob3V0ZXJFbGVtICE9PSBjaGlsZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMob3V0ZXJFbGVtLCAncm9sZScsICdwcmVzZW50YXRpb24nKVxuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKVxuICAgIH1cblxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKVxuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKVxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpXG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpXG5cbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAjJHtjaGlsZC5pZH1gKVxuICAgIH1cbiAgfVxuXG4gIF90b2dnbGVEcm9wRG93bihlbGVtZW50LCBvcGVuKSB7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGVsZW1lbnQpXG4gICAgaWYgKCFvdXRlckVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX0RST1BET1dOKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdG9nZ2xlID0gKHNlbGVjdG9yLCBjbGFzc05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCBvdXRlckVsZW0pXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lLCBvcGVuKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIENMQVNTX05BTUVfQUNUSVZFKVxuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VLCBDTEFTU19OQU1FX1NIT1cpXG4gICAgb3V0ZXJFbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4pXG4gIH1cblxuICBfc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSlcbiAgICB9XG4gIH1cblxuICBfZWxlbUlzQWN0aXZlKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBpbm5lciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWxpbmspXG4gIF9nZXRJbm5lckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLm1hdGNoZXMoU0VMRUNUT1JfSU5ORVJfRUxFTSkgPyBlbGVtIDogU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTk5FUl9FTEVNLCBlbGVtKVxuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgb3V0ZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1pdGVtKVxuICBfZ2V0T3V0ZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbG9zZXN0KFNFTEVDVE9SX09VVEVSKSB8fCBlbGVtXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnNob3coKVxufSlcblxuLyoqXG4gKiBJbml0aWFsaXplIG9uIGZvY3VzXG4gKi9cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFKSkge1xuICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpXG4gIH1cbn0pXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUYWIpXG5cbmV4cG9ydCBkZWZhdWx0IFRhYlxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdG9hc3QuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIHJlZmxvdyB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnXG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZydcblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcblxuICAgICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0hJREUpIC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVywgQ0xBU1NfTkFNRV9TSE9XSU5HKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIGlzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KVxuICB9XG5cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6IHtcbiAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBjYXNlICdmb2N1c291dCc6IHtcbiAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0ludGVyYWN0aW5nKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG5leHRFbGVtZW50IHx8IHRoaXMuX2VsZW1lbnQuY29udGFpbnMobmV4dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpXG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9WRVIsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgfVxuXG4gIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdFxuIiwgImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIlxuXG4kKGZ1bmN0aW9uICgpIHtcbiAgJChcInNlbGVjdC50cmVlXCIpLmNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgZG9jdW1lbnQubG9jYXRpb24gPSB0aGlzLnZhbHVlO1xuICB9KTtcbn0pO1xuIiwgImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcbmltcG9ydCBrbXhfY29sb3JzIGZyb20gXCIuL2tteF9jb2xvcnNcIjtcblxuZnVuY3Rpb24gZ2V0UmFuZG9tSW50KG1heCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4KTtcbn1cblxuJChmdW5jdGlvbigpIHtcbiAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaSA9IGdldFJhbmRvbUludChrbXhfY29sb3JzLmluZGV4Lmxlbmd0aCk7XG4gICAgY29uc3QgbmFtZSA9IGtteF9jb2xvcnMuaW5kZXhbaV07XG4gICAgY29uc3QgY29sb3IgPSBrbXhfY29sb3JzW25hbWVdO1xuICAgIGNvbnN0IHggPSAoZ2V0UmFuZG9tSW50KDk5KSAtIDQ4KSAqIDAuMDAyO1xuICAgICQoXCJhXCIpLmNzcyhcInRleHQtc2hhZG93XCIsIFwiMCAwIDBcIik7XG4gICAgJChcImE6aG92ZXJcIikuY3NzKFwidGV4dC1zaGFkb3dcIiwgeCArIFwiZW0gMCAwIFwiICsgY29sb3IpO1xuICB9LCAyMDApO1xufSk7XG4iLCAiY29uc3Qga214X2NvbG9ycyA9IHtcbiAgXCJrbXgtYmxhY2tcIjogICBcIiMxZTFmMWRcIixcbiAgXCJrbXgtYmx1ZVwiOiAgICBcIiM1YTYwZjlcIixcbiAgXCJrbXgtYmx1ZTFcIjogICBcIiM2ZjcyZjlcIixcbiAgXCJrbXgtYmx1ZTJcIjogICBcIiM5Yzk5ZmRcIixcbiAgXCJrbXgtYmx1ZTNcIjogICBcIiM1YTYwZjlcIixcbiAgXCJrbXgtYmx1ZTRcIjogICBcIiM2ZjcyZjlcIixcbiAgXCJrbXgtYmx1ZTVcIjogICBcIiM5Yzk5ZmRcIixcbiAgXCJpbmRleFwiOiBbXG4gICAgXCJrbXgtYmxhY2tcIixcbiAgICBcImtteC1ibHVlXCIsXG4gICAgXCJrbXgtYmx1ZTFcIixcbiAgICBcImtteC1ibHVlMlwiLFxuICAgIFwia214LWJsdWUzXCIsXG4gICAgXCJrbXgtYmx1ZTRcIixcbiAgICBcImtteC1ibHVlNVwiLFxuICAgIFwia214LWN5YW5cIixcbiAgICBcImtteC1jeWFuMVwiLFxuICAgIFwia214LWdyZWVuXCIsXG4gICAgXCJrbXgtZ3JlZW4xXCIsXG4gICAgXCJrbXgtb3JhbmdlXCIsXG4gICAgXCJrbXgtb3JhbmdlMVwiLFxuICAgIFwia214LW9yYW5nZTJcIixcbiAgICBcImtteC1waW5rXCIsXG4gICAgXCJrbXgtd2hpdGVcIixcbiAgICBcImtteC13aGl0ZTFcIixcbiAgICBcImtteC13aGl0ZTJcIixcbiAgICBcImtteC15ZWxsb3dcIixcbiAgICBcImtteC15ZWxsb3cxXCIsXG4gICAgXCJrbXgteWVsbG93MlwiLFxuICAgIFwia214LXllbGxvdzNcIlxuICBdLFxuICBcImtteC1jeWFuXCI6ICAgIFwiI2Q0ZjNmNlwiLFxuICBcImtteC1jeWFuMVwiOiAgIFwiI2Q0ZjNmNlwiLFxuICBcImtteC1ncmVlblwiOiAgIFwiI2M0ZWQzYVwiLFxuICBcImtteC1ncmVlbjFcIjogIFwiI2M0ZWQzYVwiLFxuICBcImtteC1vcmFuZ2VcIjogIFwiI2Y4NjgxY1wiLFxuICBcImtteC1vcmFuZ2UxXCI6IFwiI2ZhNzczNFwiLFxuICBcImtteC1vcmFuZ2UyXCI6IFwiI2ZmYTUzMlwiLFxuICBcImtteC1waW5rXCI6ICAgIFwiI2ZjOWVmOVwiLFxuICBcImtteC13aGl0ZVwiOiAgIFwiI2Y1ZjhmNFwiLFxuICBcImtteC13aGl0ZTFcIjogIFwiI2ZmZjlmMlwiLFxuICBcImtteC13aGl0ZTJcIjogIFwiI2ZmZmZmZlwiLFxuICBcImtteC15ZWxsb3dcIjogIFwiI2VjZmU0OVwiLFxuICBcImtteC15ZWxsb3cxXCI6IFwiI2ZmZjQzZVwiLFxuICBcImtteC15ZWxsb3cyXCI6ICBcIiNlY2ZlNDlcIixcbiAgXCJrbXgteWVsbG93M1wiOiBcIiNmZmY0M2VcIlxufTtcbmV4cG9ydCBkZWZhdWx0IGtteF9jb2xvcnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbigpIHtcbiAgdmFyIFBvbHlmaWxsRXZlbnQgPSBldmVudENvbnN0cnVjdG9yKCk7XG5cbiAgZnVuY3Rpb24gZXZlbnRDb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gd2luZG93LkN1c3RvbUV2ZW50O1xuICAgIC8vIElFPD05IFN1cHBvcnRcbiAgICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge2J1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiBmYWxzZSwgZGV0YWlsOiB1bmRlZmluZWR9O1xuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKTtcbiAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGU7XG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRIaWRkZW5JbnB1dChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICBpbnB1dC5uYW1lID0gbmFtZTtcbiAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGVsZW1lbnQsIHRhcmdldE1vZGlmaWVyS2V5KSB7XG4gICAgdmFyIHRvID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvXCIpLFxuICAgICAgICBtZXRob2QgPSBidWlsZEhpZGRlbklucHV0KFwiX21ldGhvZFwiLCBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtbWV0aG9kXCIpKSxcbiAgICAgICAgY3NyZiA9IGJ1aWxkSGlkZGVuSW5wdXQoXCJfY3NyZl90b2tlblwiLCBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY3NyZlwiKSksXG4gICAgICAgIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKSxcbiAgICAgICAgdGFyZ2V0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG5cbiAgICBmb3JtLm1ldGhvZCA9IChlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtbWV0aG9kXCIpID09PSBcImdldFwiKSA/IFwiZ2V0XCIgOiBcInBvc3RcIjtcbiAgICBmb3JtLmFjdGlvbiA9IHRvO1xuICAgIGZvcm0uc3R5bGUuZGlzcGxheSA9IFwiaGlkZGVuXCI7XG5cbiAgICBpZiAodGFyZ2V0KSBmb3JtLnRhcmdldCA9IHRhcmdldDtcbiAgICBlbHNlIGlmICh0YXJnZXRNb2RpZmllcktleSkgZm9ybS50YXJnZXQgPSBcIl9ibGFua1wiO1xuXG4gICAgZm9ybS5hcHBlbmRDaGlsZChjc3JmKTtcbiAgICBmb3JtLmFwcGVuZENoaWxkKG1ldGhvZCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgICBmb3JtLnN1Ym1pdCgpO1xuICB9XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLnRhcmdldDtcbiAgICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSkge1xuICAgICAgdmFyIHBob2VuaXhMaW5rRXZlbnQgPSBuZXcgUG9seWZpbGxFdmVudCgncGhvZW5peC5saW5rLmNsaWNrJywge1xuICAgICAgICBcImJ1YmJsZXNcIjogdHJ1ZSwgXCJjYW5jZWxhYmxlXCI6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWVsZW1lbnQuZGlzcGF0Y2hFdmVudChwaG9lbml4TGlua0V2ZW50KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1tZXRob2RcIikpIHtcbiAgICAgICAgaGFuZGxlQ2xpY2soZWxlbWVudCwgZS5tZXRhS2V5IHx8IGUuc2hpZnRLZXkpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9LCBmYWxzZSk7XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Bob2VuaXgubGluay5jbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNvbmZpcm1cIik7XG4gICAgaWYobWVzc2FnZSAmJiAhd2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbn0pKCk7XG4iLCAiLy8gd3JhcHMgdmFsdWUgaW4gY2xvc3VyZSBvciByZXR1cm5zIGNsb3N1cmVcbmV4cG9ydCBsZXQgY2xvc3VyZSA9ICh2YWx1ZSkgPT4ge1xuICBpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH0gZWxzZSB7XG4gICAgbGV0IGNsb3N1cmUgPSBmdW5jdGlvbiAoKXsgcmV0dXJuIHZhbHVlIH1cbiAgICByZXR1cm4gY2xvc3VyZVxuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IGdsb2JhbFNlbGYgPSB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsXG5leHBvcnQgY29uc3QgcGh4V2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcbmV4cG9ydCBjb25zdCBnbG9iYWwgPSBnbG9iYWxTZWxmIHx8IHBoeFdpbmRvdyB8fCBnbG9iYWxcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZTTiA9IFwiMi4wLjBcIlxuZXhwb3J0IGNvbnN0IFNPQ0tFVF9TVEFURVMgPSB7Y29ubmVjdGluZzogMCwgb3BlbjogMSwgY2xvc2luZzogMiwgY2xvc2VkOiAzfVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDEwMDAwXG5leHBvcnQgY29uc3QgV1NfQ0xPU0VfTk9STUFMID0gMTAwMFxuZXhwb3J0IGNvbnN0IENIQU5ORUxfU1RBVEVTID0ge1xuICBjbG9zZWQ6IFwiY2xvc2VkXCIsXG4gIGVycm9yZWQ6IFwiZXJyb3JlZFwiLFxuICBqb2luZWQ6IFwiam9pbmVkXCIsXG4gIGpvaW5pbmc6IFwiam9pbmluZ1wiLFxuICBsZWF2aW5nOiBcImxlYXZpbmdcIixcbn1cbmV4cG9ydCBjb25zdCBDSEFOTkVMX0VWRU5UUyA9IHtcbiAgY2xvc2U6IFwicGh4X2Nsb3NlXCIsXG4gIGVycm9yOiBcInBoeF9lcnJvclwiLFxuICBqb2luOiBcInBoeF9qb2luXCIsXG4gIHJlcGx5OiBcInBoeF9yZXBseVwiLFxuICBsZWF2ZTogXCJwaHhfbGVhdmVcIlxufVxuXG5leHBvcnQgY29uc3QgVFJBTlNQT1JUUyA9IHtcbiAgbG9uZ3BvbGw6IFwibG9uZ3BvbGxcIixcbiAgd2Vic29ja2V0OiBcIndlYnNvY2tldFwiXG59XG5leHBvcnQgY29uc3QgWEhSX1NUQVRFUyA9IHtcbiAgY29tcGxldGU6IDRcbn1cbiIsICIvKipcbiAqIEluaXRpYWxpemVzIHRoZSBQdXNoXG4gKiBAcGFyYW0ge0NoYW5uZWx9IGNoYW5uZWwgLSBUaGUgQ2hhbm5lbFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gVGhlIGV2ZW50LCBmb3IgZXhhbXBsZSBgXCJwaHhfam9pblwiYFxuICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWQgLSBUaGUgcGF5bG9hZCwgZm9yIGV4YW1wbGUgYHt1c2VyX2lkOiAxMjN9YFxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgLSBUaGUgcHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdXNoIHtcbiAgY29uc3RydWN0b3IoY2hhbm5lbCwgZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQpe1xuICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWxcbiAgICB0aGlzLmV2ZW50ID0gZXZlbnRcbiAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkIHx8IGZ1bmN0aW9uICgpeyByZXR1cm4ge30gfVxuICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gbnVsbFxuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXRcbiAgICB0aGlzLnRpbWVvdXRUaW1lciA9IG51bGxcbiAgICB0aGlzLnJlY0hvb2tzID0gW11cbiAgICB0aGlzLnNlbnQgPSBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG4gICAqL1xuICByZXNlbmQodGltZW91dCl7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dFxuICAgIHRoaXMucmVzZXQoKVxuICAgIHRoaXMuc2VuZCgpXG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHNlbmQoKXtcbiAgICBpZih0aGlzLmhhc1JlY2VpdmVkKFwidGltZW91dFwiKSl7IHJldHVybiB9XG4gICAgdGhpcy5zdGFydFRpbWVvdXQoKVxuICAgIHRoaXMuc2VudCA9IHRydWVcbiAgICB0aGlzLmNoYW5uZWwuc29ja2V0LnB1c2goe1xuICAgICAgdG9waWM6IHRoaXMuY2hhbm5lbC50b3BpYyxcbiAgICAgIGV2ZW50OiB0aGlzLmV2ZW50LFxuICAgICAgcGF5bG9hZDogdGhpcy5wYXlsb2FkKCksXG4gICAgICByZWY6IHRoaXMucmVmLFxuICAgICAgam9pbl9yZWY6IHRoaXMuY2hhbm5lbC5qb2luUmVmKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gc3RhdHVzXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcbiAgICovXG4gIHJlY2VpdmUoc3RhdHVzLCBjYWxsYmFjayl7XG4gICAgaWYodGhpcy5oYXNSZWNlaXZlZChzdGF0dXMpKXtcbiAgICAgIGNhbGxiYWNrKHRoaXMucmVjZWl2ZWRSZXNwLnJlc3BvbnNlKVxuICAgIH1cblxuICAgIHRoaXMucmVjSG9va3MucHVzaCh7c3RhdHVzLCBjYWxsYmFja30pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVzZXQoKXtcbiAgICB0aGlzLmNhbmNlbFJlZkV2ZW50KClcbiAgICB0aGlzLnJlZiA9IG51bGxcbiAgICB0aGlzLnJlZkV2ZW50ID0gbnVsbFxuICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gbnVsbFxuICAgIHRoaXMuc2VudCA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1hdGNoUmVjZWl2ZSh7c3RhdHVzLCByZXNwb25zZSwgX3JlZn0pe1xuICAgIHRoaXMucmVjSG9va3MuZmlsdGVyKGggPT4gaC5zdGF0dXMgPT09IHN0YXR1cylcbiAgICAgIC5mb3JFYWNoKGggPT4gaC5jYWxsYmFjayhyZXNwb25zZSkpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbmNlbFJlZkV2ZW50KCl7XG4gICAgaWYoIXRoaXMucmVmRXZlbnQpeyByZXR1cm4gfVxuICAgIHRoaXMuY2hhbm5lbC5vZmYodGhpcy5yZWZFdmVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsVGltZW91dCgpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRUaW1lcilcbiAgICB0aGlzLnRpbWVvdXRUaW1lciA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhcnRUaW1lb3V0KCl7XG4gICAgaWYodGhpcy50aW1lb3V0VGltZXIpeyB0aGlzLmNhbmNlbFRpbWVvdXQoKSB9XG4gICAgdGhpcy5yZWYgPSB0aGlzLmNoYW5uZWwuc29ja2V0Lm1ha2VSZWYoKVxuICAgIHRoaXMucmVmRXZlbnQgPSB0aGlzLmNoYW5uZWwucmVwbHlFdmVudE5hbWUodGhpcy5yZWYpXG5cbiAgICB0aGlzLmNoYW5uZWwub24odGhpcy5yZWZFdmVudCwgcGF5bG9hZCA9PiB7XG4gICAgICB0aGlzLmNhbmNlbFJlZkV2ZW50KClcbiAgICAgIHRoaXMuY2FuY2VsVGltZW91dCgpXG4gICAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IHBheWxvYWRcbiAgICAgIHRoaXMubWF0Y2hSZWNlaXZlKHBheWxvYWQpXG4gICAgfSlcblxuICAgIHRoaXMudGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIoXCJ0aW1lb3V0XCIsIHt9KVxuICAgIH0sIHRoaXMudGltZW91dClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGFzUmVjZWl2ZWQoc3RhdHVzKXtcbiAgICByZXR1cm4gdGhpcy5yZWNlaXZlZFJlc3AgJiYgdGhpcy5yZWNlaXZlZFJlc3Auc3RhdHVzID09PSBzdGF0dXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJpZ2dlcihzdGF0dXMsIHJlc3BvbnNlKXtcbiAgICB0aGlzLmNoYW5uZWwudHJpZ2dlcih0aGlzLnJlZkV2ZW50LCB7c3RhdHVzLCByZXNwb25zZX0pXG4gIH1cbn1cbiIsICIvKipcbiAqXG4gKiBDcmVhdGVzIGEgdGltZXIgdGhhdCBhY2NlcHRzIGEgYHRpbWVyQ2FsY2AgZnVuY3Rpb24gdG8gcGVyZm9ybVxuICogY2FsY3VsYXRlZCB0aW1lb3V0IHJldHJpZXMsIHN1Y2ggYXMgZXhwb25lbnRpYWwgYmFja29mZi5cbiAqXG4gKiBAZXhhbXBsZVxuICogbGV0IHJlY29ubmVjdFRpbWVyID0gbmV3IFRpbWVyKCgpID0+IHRoaXMuY29ubmVjdCgpLCBmdW5jdGlvbih0cmllcyl7XG4gKiAgIHJldHVybiBbMTAwMCwgNTAwMCwgMTAwMDBdW3RyaWVzIC0gMV0gfHwgMTAwMDBcbiAqIH0pXG4gKiByZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKSAvLyBmaXJlcyBhZnRlciAxMDAwXG4gKiByZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKSAvLyBmaXJlcyBhZnRlciA1MDAwXG4gKiByZWNvbm5lY3RUaW1lci5yZXNldCgpXG4gKiByZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKSAvLyBmaXJlcyBhZnRlciAxMDAwXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRpbWVyQ2FsY1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaW1lciB7XG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lckNhbGMpe1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMudGltZXJDYWxjID0gdGltZXJDYWxjXG4gICAgdGhpcy50aW1lciA9IG51bGxcbiAgICB0aGlzLnRyaWVzID0gMFxuICB9XG5cbiAgcmVzZXQoKXtcbiAgICB0aGlzLnRyaWVzID0gMFxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYW55IHByZXZpb3VzIHNjaGVkdWxlVGltZW91dCBhbmQgc2NoZWR1bGVzIGNhbGxiYWNrXG4gICAqL1xuICBzY2hlZHVsZVRpbWVvdXQoKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcilcblxuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJpZXMgPSB0aGlzLnRyaWVzICsgMVxuICAgICAgdGhpcy5jYWxsYmFjaygpXG4gICAgfSwgdGhpcy50aW1lckNhbGModGhpcy50cmllcyArIDEpKVxuICB9XG59XG4iLCAiaW1wb3J0IHtjbG9zdXJlfSBmcm9tIFwiLi91dGlsc1wiXG5pbXBvcnQge1xuICBDSEFOTkVMX0VWRU5UUyxcbiAgQ0hBTk5FTF9TVEFURVMsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBQdXNoIGZyb20gXCIuL3B1c2hcIlxuaW1wb3J0IFRpbWVyIGZyb20gXCIuL3RpbWVyXCJcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcGljXG4gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24pfSBwYXJhbXNcbiAqIEBwYXJhbSB7U29ja2V0fSBzb2NrZXRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCB7XG4gIGNvbnN0cnVjdG9yKHRvcGljLCBwYXJhbXMsIHNvY2tldCl7XG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmNsb3NlZFxuICAgIHRoaXMudG9waWMgPSB0b3BpY1xuICAgIHRoaXMucGFyYW1zID0gY2xvc3VyZShwYXJhbXMgfHwge30pXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLmJpbmRpbmdzID0gW11cbiAgICB0aGlzLmJpbmRpbmdSZWYgPSAwXG4gICAgdGhpcy50aW1lb3V0ID0gdGhpcy5zb2NrZXQudGltZW91dFxuICAgIHRoaXMuam9pbmVkT25jZSA9IGZhbHNlXG4gICAgdGhpcy5qb2luUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmpvaW4sIHRoaXMucGFyYW1zLCB0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy5wdXNoQnVmZmVyID0gW11cbiAgICB0aGlzLnN0YXRlQ2hhbmdlUmVmcyA9IFtdXG5cbiAgICB0aGlzLnJlam9pblRpbWVyID0gbmV3IFRpbWVyKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLnJlam9pbigpIH1cbiAgICB9LCB0aGlzLnNvY2tldC5yZWpvaW5BZnRlck1zKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzLnB1c2godGhpcy5zb2NrZXQub25FcnJvcigoKSA9PiB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCkpKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzLnB1c2godGhpcy5zb2NrZXQub25PcGVuKCgpID0+IHtcbiAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKVxuICAgICAgaWYodGhpcy5pc0Vycm9yZWQoKSl7IHRoaXMucmVqb2luKCkgfVxuICAgIH0pXG4gICAgKVxuICAgIHRoaXMuam9pblB1c2gucmVjZWl2ZShcIm9rXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5qb2luZWRcbiAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKVxuICAgICAgdGhpcy5wdXNoQnVmZmVyLmZvckVhY2gocHVzaEV2ZW50ID0+IHB1c2hFdmVudC5zZW5kKCkpXG4gICAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXVxuICAgIH0pXG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwiZXJyb3JcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWRcbiAgICAgIGlmKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpIH1cbiAgICB9KVxuICAgIHRoaXMub25DbG9zZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KClcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIGBjbG9zZSAke3RoaXMudG9waWN9ICR7dGhpcy5qb2luUmVmKCl9YClcbiAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5jbG9zZWRcbiAgICAgIHRoaXMuc29ja2V0LnJlbW92ZSh0aGlzKVxuICAgIH0pXG4gICAgdGhpcy5vbkVycm9yKHJlYXNvbiA9PiB7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgZXJyb3IgJHt0aGlzLnRvcGljfWAsIHJlYXNvbilcbiAgICAgIGlmKHRoaXMuaXNKb2luaW5nKCkpeyB0aGlzLmpvaW5QdXNoLnJlc2V0KCkgfVxuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWRcbiAgICAgIGlmKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpIH1cbiAgICB9KVxuICAgIHRoaXMuam9pblB1c2gucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4ge1xuICAgICAgaWYodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYHRpbWVvdXQgJHt0aGlzLnRvcGljfSAoJHt0aGlzLmpvaW5SZWYoKX0pYCwgdGhpcy5qb2luUHVzaC50aW1lb3V0KVxuICAgICAgbGV0IGxlYXZlUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmxlYXZlLCBjbG9zdXJlKHt9KSwgdGhpcy50aW1lb3V0KVxuICAgICAgbGVhdmVQdXNoLnNlbmQoKVxuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWRcbiAgICAgIHRoaXMuam9pblB1c2gucmVzZXQoKVxuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgfVxuICAgIH0pXG4gICAgdGhpcy5vbihDSEFOTkVMX0VWRU5UUy5yZXBseSwgKHBheWxvYWQsIHJlZikgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyKHRoaXMucmVwbHlFdmVudE5hbWUocmVmKSwgcGF5bG9hZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEpvaW4gdGhlIGNoYW5uZWxcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQdXNofVxuICAgKi9cbiAgam9pbih0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICBpZih0aGlzLmpvaW5lZE9uY2Upe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJpZWQgdG8gam9pbiBtdWx0aXBsZSB0aW1lcy4gJ2pvaW4nIGNhbiBvbmx5IGJlIGNhbGxlZCBhIHNpbmdsZSB0aW1lIHBlciBjaGFubmVsIGluc3RhbmNlXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXRcbiAgICAgIHRoaXMuam9pbmVkT25jZSA9IHRydWVcbiAgICAgIHRoaXMucmVqb2luKClcbiAgICAgIHJldHVybiB0aGlzLmpvaW5QdXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgaW50byBjaGFubmVsIGNsb3NlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbkNsb3NlKGNhbGxiYWNrKXtcbiAgICB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLmNsb3NlLCBjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rIGludG8gY2hhbm5lbCBlcnJvcnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uRXJyb3IoY2FsbGJhY2spe1xuICAgIHJldHVybiB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLmVycm9yLCByZWFzb24gPT4gY2FsbGJhY2socmVhc29uKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIG9uIGNoYW5uZWwgZXZlbnRzXG4gICAqXG4gICAqIFN1YnNjcmlwdGlvbiByZXR1cm5zIGEgcmVmIGNvdW50ZXIsIHdoaWNoIGNhbiBiZSB1c2VkIGxhdGVyIHRvXG4gICAqIHVuc3Vic2NyaWJlIHRoZSBleGFjdCBldmVudCBsaXN0ZW5lclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByZWYxID0gY2hhbm5lbC5vbihcImV2ZW50XCIsIGRvX3N0dWZmKVxuICAgKiBjb25zdCByZWYyID0gY2hhbm5lbC5vbihcImV2ZW50XCIsIGRvX290aGVyX3N0dWZmKVxuICAgKiBjaGFubmVsLm9mZihcImV2ZW50XCIsIHJlZjEpXG4gICAqIC8vIFNpbmNlIHVuc3Vic2NyaXB0aW9uLCBkb19zdHVmZiB3b24ndCBmaXJlLFxuICAgKiAvLyB3aGlsZSBkb19vdGhlcl9zdHVmZiB3aWxsIGtlZXAgZmlyaW5nIG9uIHRoZSBcImV2ZW50XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtpbnRlZ2VyfSByZWZcbiAgICovXG4gIG9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMuYmluZGluZ1JlZisrXG4gICAgdGhpcy5iaW5kaW5ncy5wdXNoKHtldmVudCwgcmVmLCBjYWxsYmFja30pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlcyBvZmYgb2YgY2hhbm5lbCBldmVudHNcbiAgICpcbiAgICogVXNlIHRoZSByZWYgcmV0dXJuZWQgZnJvbSBhIGNoYW5uZWwub24oKSB0byB1bnN1YnNjcmliZSBvbmVcbiAgICogaGFuZGxlciwgb3IgcGFzcyBub3RoaW5nIGZvciB0aGUgcmVmIHRvIHVuc3Vic2NyaWJlIGFsbFxuICAgKiBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIGV2ZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBVbnN1YnNjcmliZSB0aGUgZG9fc3R1ZmYgaGFuZGxlclxuICAgKiBjb25zdCByZWYxID0gY2hhbm5lbC5vbihcImV2ZW50XCIsIGRvX3N0dWZmKVxuICAgKiBjaGFubmVsLm9mZihcImV2ZW50XCIsIHJlZjEpXG4gICAqXG4gICAqIC8vIFVuc3Vic2NyaWJlIGFsbCBoYW5kbGVycyBmcm9tIGV2ZW50XG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIilcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7aW50ZWdlcn0gcmVmXG4gICAqL1xuICBvZmYoZXZlbnQsIHJlZil7XG4gICAgdGhpcy5iaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MuZmlsdGVyKChiaW5kKSA9PiB7XG4gICAgICByZXR1cm4gIShiaW5kLmV2ZW50ID09PSBldmVudCAmJiAodHlwZW9mIHJlZiA9PT0gXCJ1bmRlZmluZWRcIiB8fCByZWYgPT09IGJpbmQucmVmKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5QdXNoKCl7IHJldHVybiB0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuaXNKb2luZWQoKSB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgbWVzc2FnZSBgZXZlbnRgIHRvIHBob2VuaXggd2l0aCB0aGUgcGF5bG9hZCBgcGF5bG9hZGAuXG4gICAqIFBob2VuaXggcmVjZWl2ZXMgdGhpcyBpbiB0aGUgYGhhbmRsZV9pbihldmVudCwgcGF5bG9hZCwgc29ja2V0KWBcbiAgICogZnVuY3Rpb24uIGlmIHBob2VuaXggcmVwbGllcyBvciBpdCB0aW1lcyBvdXQgKGRlZmF1bHQgMTAwMDBtcyksXG4gICAqIHRoZW4gb3B0aW9uYWxseSB0aGUgcmVwbHkgY2FuIGJlIHJlY2VpdmVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjaGFubmVsLnB1c2goXCJldmVudFwiKVxuICAgKiAgIC5yZWNlaXZlKFwib2tcIiwgcGF5bG9hZCA9PiBjb25zb2xlLmxvZyhcInBob2VuaXggcmVwbGllZDpcIiwgcGF5bG9hZCkpXG4gICAqICAgLnJlY2VpdmUoXCJlcnJvclwiLCBlcnIgPT4gY29uc29sZS5sb2coXCJwaG9lbml4IGVycm9yZWRcIiwgZXJyKSlcbiAgICogICAucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4gY29uc29sZS5sb2coXCJ0aW1lZCBvdXQgcHVzaGluZ1wiKSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF1cbiAgICogQHJldHVybnMge1B1c2h9XG4gICAqL1xuICBwdXNoKGV2ZW50LCBwYXlsb2FkLCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICBwYXlsb2FkID0gcGF5bG9hZCB8fCB7fVxuICAgIGlmKCF0aGlzLmpvaW5lZE9uY2Upe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmllZCB0byBwdXNoICcke2V2ZW50fScgdG8gJyR7dGhpcy50b3BpY30nIGJlZm9yZSBqb2luaW5nLiBVc2UgY2hhbm5lbC5qb2luKCkgYmVmb3JlIHB1c2hpbmcgZXZlbnRzYClcbiAgICB9XG4gICAgbGV0IHB1c2hFdmVudCA9IG5ldyBQdXNoKHRoaXMsIGV2ZW50LCBmdW5jdGlvbiAoKXsgcmV0dXJuIHBheWxvYWQgfSwgdGltZW91dClcbiAgICBpZih0aGlzLmNhblB1c2goKSl7XG4gICAgICBwdXNoRXZlbnQuc2VuZCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2hFdmVudC5zdGFydFRpbWVvdXQoKVxuICAgICAgdGhpcy5wdXNoQnVmZmVyLnB1c2gocHVzaEV2ZW50KVxuICAgIH1cblxuICAgIHJldHVybiBwdXNoRXZlbnRcbiAgfVxuXG4gIC8qKiBMZWF2ZXMgdGhlIGNoYW5uZWxcbiAgICpcbiAgICogVW5zdWJzY3JpYmVzIGZyb20gc2VydmVyIGV2ZW50cywgYW5kXG4gICAqIGluc3RydWN0cyBjaGFubmVsIHRvIHRlcm1pbmF0ZSBvbiBzZXJ2ZXJcbiAgICpcbiAgICogVHJpZ2dlcnMgb25DbG9zZSgpIGhvb2tzXG4gICAqXG4gICAqIFRvIHJlY2VpdmUgbGVhdmUgYWNrbm93bGVkZ2VtZW50cywgdXNlIHRoZSBgcmVjZWl2ZWBcbiAgICogaG9vayB0byBiaW5kIHRvIHRoZSBzZXJ2ZXIgYWNrLCBpZTpcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2hhbm5lbC5sZWF2ZSgpLnJlY2VpdmUoXCJva1wiLCAoKSA9PiBhbGVydChcImxlZnQhXCIpIClcbiAgICpcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQdXNofVxuICAgKi9cbiAgbGVhdmUodGltZW91dCA9IHRoaXMudGltZW91dCl7XG4gICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpXG4gICAgdGhpcy5qb2luUHVzaC5jYW5jZWxUaW1lb3V0KClcblxuICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5sZWF2aW5nXG4gICAgbGV0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgbGVhdmUgJHt0aGlzLnRvcGljfWApXG4gICAgICB0aGlzLnRyaWdnZXIoQ0hBTk5FTF9FVkVOVFMuY2xvc2UsIFwibGVhdmVcIilcbiAgICB9XG4gICAgbGV0IGxlYXZlUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmxlYXZlLCBjbG9zdXJlKHt9KSwgdGltZW91dClcbiAgICBsZWF2ZVB1c2gucmVjZWl2ZShcIm9rXCIsICgpID0+IG9uQ2xvc2UoKSlcbiAgICAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiBvbkNsb3NlKCkpXG4gICAgbGVhdmVQdXNoLnNlbmQoKVxuICAgIGlmKCF0aGlzLmNhblB1c2goKSl7IGxlYXZlUHVzaC50cmlnZ2VyKFwib2tcIiwge30pIH1cblxuICAgIHJldHVybiBsZWF2ZVB1c2hcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkYWJsZSBtZXNzYWdlIGhvb2tcbiAgICpcbiAgICogUmVjZWl2ZXMgYWxsIGV2ZW50cyBmb3Igc3BlY2lhbGl6ZWQgbWVzc2FnZSBoYW5kbGluZ1xuICAgKiBiZWZvcmUgZGlzcGF0Y2hpbmcgdG8gdGhlIGNoYW5uZWwgY2FsbGJhY2tzLlxuICAgKlxuICAgKiBNdXN0IHJldHVybiB0aGUgcGF5bG9hZCwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSByZWZcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIG9uTWVzc2FnZShfZXZlbnQsIHBheWxvYWQsIF9yZWYpeyByZXR1cm4gcGF5bG9hZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc01lbWJlcih0b3BpYywgZXZlbnQsIHBheWxvYWQsIGpvaW5SZWYpe1xuICAgIGlmKHRoaXMudG9waWMgIT09IHRvcGljKXsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmKGpvaW5SZWYgJiYgam9pblJlZiAhPT0gdGhpcy5qb2luUmVmKCkpe1xuICAgICAgaWYodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgXCJkcm9wcGluZyBvdXRkYXRlZCBtZXNzYWdlXCIsIHt0b3BpYywgZXZlbnQsIHBheWxvYWQsIGpvaW5SZWZ9KVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBqb2luUmVmKCl7IHJldHVybiB0aGlzLmpvaW5QdXNoLnJlZiB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWpvaW4odGltZW91dCA9IHRoaXMudGltZW91dCl7XG4gICAgaWYodGhpcy5pc0xlYXZpbmcoKSl7IHJldHVybiB9XG4gICAgdGhpcy5zb2NrZXQubGVhdmVPcGVuVG9waWModGhpcy50b3BpYylcbiAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuam9pbmluZ1xuICAgIHRoaXMuam9pblB1c2gucmVzZW5kKHRpbWVvdXQpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyaWdnZXIoZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pblJlZil7XG4gICAgbGV0IGhhbmRsZWRQYXlsb2FkID0gdGhpcy5vbk1lc3NhZ2UoZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pblJlZilcbiAgICBpZihwYXlsb2FkICYmICFoYW5kbGVkUGF5bG9hZCl7IHRocm93IG5ldyBFcnJvcihcImNoYW5uZWwgb25NZXNzYWdlIGNhbGxiYWNrcyBtdXN0IHJldHVybiB0aGUgcGF5bG9hZCwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZFwiKSB9XG5cbiAgICBsZXQgZXZlbnRCaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MuZmlsdGVyKGJpbmQgPT4gYmluZC5ldmVudCA9PT0gZXZlbnQpXG5cbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgZXZlbnRCaW5kaW5ncy5sZW5ndGg7IGkrKyl7XG4gICAgICBsZXQgYmluZCA9IGV2ZW50QmluZGluZ3NbaV1cbiAgICAgIGJpbmQuY2FsbGJhY2soaGFuZGxlZFBheWxvYWQsIHJlZiwgam9pblJlZiB8fCB0aGlzLmpvaW5SZWYoKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlcGx5RXZlbnROYW1lKHJlZil7IHJldHVybiBgY2hhbl9yZXBseV8ke3JlZn1gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzQ2xvc2VkKCl7IHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5jbG9zZWQgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNFcnJvcmVkKCl7IHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5lcnJvcmVkIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzSm9pbmVkKCl7IHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5qb2luZWQgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNKb2luaW5nKCl7IHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5qb2luaW5nIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzTGVhdmluZygpeyByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMubGVhdmluZyB9XG59XG4iLCAiaW1wb3J0IHtcbiAgZ2xvYmFsLFxuICBYSFJfU1RBVEVTXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFqYXgge1xuXG4gIHN0YXRpYyByZXF1ZXN0KG1ldGhvZCwgZW5kUG9pbnQsIGFjY2VwdCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayl7XG4gICAgaWYoZ2xvYmFsLlhEb21haW5SZXF1ZXN0KXtcbiAgICAgIGxldCByZXEgPSBuZXcgZ2xvYmFsLlhEb21haW5SZXF1ZXN0KCkgLy8gSUU4LCBJRTlcbiAgICAgIHJldHVybiB0aGlzLnhkb21haW5SZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjaylcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlcSA9IG5ldyBnbG9iYWwuWE1MSHR0cFJlcXVlc3QoKSAvLyBJRTcrLCBGaXJlZm94LCBDaHJvbWUsIE9wZXJhLCBTYWZhcmlcbiAgICAgIHJldHVybiB0aGlzLnhoclJlcXVlc3QocmVxLCBtZXRob2QsIGVuZFBvaW50LCBhY2NlcHQsIGJvZHksIHRpbWVvdXQsIG9udGltZW91dCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHhkb21haW5SZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayl7XG4gICAgcmVxLnRpbWVvdXQgPSB0aW1lb3V0XG4gICAgcmVxLm9wZW4obWV0aG9kLCBlbmRQb2ludClcbiAgICByZXEub25sb2FkID0gKCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5wYXJzZUpTT04ocmVxLnJlc3BvbnNlVGV4dClcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlc3BvbnNlKVxuICAgIH1cbiAgICBpZihvbnRpbWVvdXQpeyByZXEub250aW1lb3V0ID0gb250aW1lb3V0IH1cblxuICAgIC8vIFdvcmsgYXJvdW5kIGJ1ZyBpbiBJRTkgdGhhdCByZXF1aXJlcyBhbiBhdHRhY2hlZCBvbnByb2dyZXNzIGhhbmRsZXJcbiAgICByZXEub25wcm9ncmVzcyA9ICgpID0+IHsgfVxuXG4gICAgcmVxLnNlbmQoYm9keSlcbiAgICByZXR1cm4gcmVxXG4gIH1cblxuICBzdGF0aWMgeGhyUmVxdWVzdChyZXEsIG1ldGhvZCwgZW5kUG9pbnQsIGFjY2VwdCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayl7XG4gICAgcmVxLm9wZW4obWV0aG9kLCBlbmRQb2ludCwgdHJ1ZSlcbiAgICByZXEudGltZW91dCA9IHRpbWVvdXRcbiAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBhY2NlcHQpXG4gICAgcmVxLm9uZXJyb3IgPSAoKSA9PiBjYWxsYmFjayAmJiBjYWxsYmFjayhudWxsKVxuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZihyZXEucmVhZHlTdGF0ZSA9PT0gWEhSX1NUQVRFUy5jb21wbGV0ZSAmJiBjYWxsYmFjayl7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXMucGFyc2VKU09OKHJlcS5yZXNwb25zZVRleHQpXG4gICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlKVxuICAgICAgfVxuICAgIH1cbiAgICBpZihvbnRpbWVvdXQpeyByZXEub250aW1lb3V0ID0gb250aW1lb3V0IH1cblxuICAgIHJlcS5zZW5kKGJvZHkpXG4gICAgcmV0dXJuIHJlcVxuICB9XG5cbiAgc3RhdGljIHBhcnNlSlNPTihyZXNwKXtcbiAgICBpZighcmVzcCB8fCByZXNwID09PSBcIlwiKXsgcmV0dXJuIG51bGwgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3ApXG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICBjb25zb2xlICYmIGNvbnNvbGUubG9nKFwiZmFpbGVkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2VcIiwgcmVzcClcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZShvYmosIHBhcmVudEtleSl7XG4gICAgbGV0IHF1ZXJ5U3RyID0gW11cbiAgICBmb3IodmFyIGtleSBpbiBvYmope1xuICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpeyBjb250aW51ZSB9XG4gICAgICBsZXQgcGFyYW1LZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9WyR7a2V5fV1gIDoga2V5XG4gICAgICBsZXQgcGFyYW1WYWwgPSBvYmpba2V5XVxuICAgICAgaWYodHlwZW9mIHBhcmFtVmFsID09PSBcIm9iamVjdFwiKXtcbiAgICAgICAgcXVlcnlTdHIucHVzaCh0aGlzLnNlcmlhbGl6ZShwYXJhbVZhbCwgcGFyYW1LZXkpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlTdHIucHVzaChlbmNvZGVVUklDb21wb25lbnQocGFyYW1LZXkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWwpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnlTdHIuam9pbihcIiZcIilcbiAgfVxuXG4gIHN0YXRpYyBhcHBlbmRQYXJhbXModXJsLCBwYXJhbXMpe1xuICAgIGlmKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKXsgcmV0dXJuIHVybCB9XG5cbiAgICBsZXQgcHJlZml4ID0gdXJsLm1hdGNoKC9cXD8vKSA/IFwiJlwiIDogXCI/XCJcbiAgICByZXR1cm4gYCR7dXJsfSR7cHJlZml4fSR7dGhpcy5zZXJpYWxpemUocGFyYW1zKX1gXG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBTT0NLRVRfU1RBVEVTLFxuICBUUkFOU1BPUlRTXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBBamF4IGZyb20gXCIuL2FqYXhcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb25nUG9sbCB7XG5cbiAgY29uc3RydWN0b3IoZW5kUG9pbnQpe1xuICAgIHRoaXMuZW5kUG9pbnQgPSBudWxsXG4gICAgdGhpcy50b2tlbiA9IG51bGxcbiAgICB0aGlzLnNraXBIZWFydGJlYXQgPSB0cnVlXG4gICAgdGhpcy5yZXFzID0gbmV3IFNldCgpXG4gICAgdGhpcy5vbm9wZW4gPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgdGhpcy5vbmVycm9yID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgIHRoaXMub25tZXNzYWdlID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgIHRoaXMub25jbG9zZSA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICB0aGlzLnBvbGxFbmRwb2ludCA9IHRoaXMubm9ybWFsaXplRW5kcG9pbnQoZW5kUG9pbnQpXG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nXG4gICAgdGhpcy5wb2xsKClcbiAgfVxuXG4gIG5vcm1hbGl6ZUVuZHBvaW50KGVuZFBvaW50KXtcbiAgICByZXR1cm4gKGVuZFBvaW50XG4gICAgICAucmVwbGFjZShcIndzOi8vXCIsIFwiaHR0cDovL1wiKVxuICAgICAgLnJlcGxhY2UoXCJ3c3M6Ly9cIiwgXCJodHRwczovL1wiKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChcIiguKilcXC9cIiArIFRSQU5TUE9SVFMud2Vic29ja2V0KSwgXCIkMS9cIiArIFRSQU5TUE9SVFMubG9uZ3BvbGwpKVxuICB9XG5cbiAgZW5kcG9pbnRVUkwoKXtcbiAgICByZXR1cm4gQWpheC5hcHBlbmRQYXJhbXModGhpcy5wb2xsRW5kcG9pbnQsIHt0b2tlbjogdGhpcy50b2tlbn0pXG4gIH1cblxuICBjbG9zZUFuZFJldHJ5KGNvZGUsIHJlYXNvbiwgd2FzQ2xlYW4pe1xuICAgIHRoaXMuY2xvc2UoY29kZSwgcmVhc29uLCB3YXNDbGVhbilcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLmNvbm5lY3RpbmdcbiAgfVxuXG4gIG9udGltZW91dCgpe1xuICAgIHRoaXMub25lcnJvcihcInRpbWVvdXRcIilcbiAgICB0aGlzLmNsb3NlQW5kUmV0cnkoMTAwNSwgXCJ0aW1lb3V0XCIsIGZhbHNlKVxuICB9XG5cbiAgaXNBY3RpdmUoKXsgcmV0dXJuIHRoaXMucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5vcGVuIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nIH1cblxuICBwb2xsKCl7XG4gICAgdGhpcy5hamF4KFwiR0VUXCIsIG51bGwsICgpID0+IHRoaXMub250aW1lb3V0KCksIHJlc3AgPT4ge1xuICAgICAgaWYocmVzcCl7XG4gICAgICAgIHZhciB7c3RhdHVzLCB0b2tlbiwgbWVzc2FnZXN9ID0gcmVzcFxuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1cyA9IDBcbiAgICAgIH1cblxuICAgICAgc3dpdGNoKHN0YXR1cyl7XG4gICAgICAgIGNhc2UgMjAwOlxuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobXNnID0+IHtcbiAgICAgICAgICAgIC8vIFRhc2tzIGFyZSB3aGF0IHRoaW5ncyBsaWtlIGV2ZW50IGhhbmRsZXJzLCBzZXRUaW1lb3V0IGNhbGxiYWNrcyxcbiAgICAgICAgICAgIC8vIHByb21pc2UgcmVzb2x2ZXMgYW5kIG1vcmUgYXJlIHJ1biB3aXRoaW4uXG4gICAgICAgICAgICAvLyBJbiBtb2Rlcm4gYnJvd3NlcnMsIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGtpbmRzIG9mIHRhc2tzLFxuICAgICAgICAgICAgLy8gbWljcm90YXNrcyBhbmQgbWFjcm90YXNrcy5cbiAgICAgICAgICAgIC8vIE1pY3JvdGFza3MgYXJlIG1haW5seSB1c2VkIGZvciBQcm9taXNlcywgd2hpbGUgbWFjcm90YXNrcyBhcmVcbiAgICAgICAgICAgIC8vIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS5cbiAgICAgICAgICAgIC8vIE1pY3JvdGFza3MgYWx3YXlzIGhhdmUgcHJpb3JpdHkgb3ZlciBtYWNyb3Rhc2tzLiBJZiB0aGUgSlMgZW5naW5lXG4gICAgICAgICAgICAvLyBpcyBsb29raW5nIGZvciBhIHRhc2sgdG8gcnVuLCBpdCB3aWxsIGFsd2F5cyB0cnkgdG8gZW1wdHkgdGhlXG4gICAgICAgICAgICAvLyBtaWNyb3Rhc2sgcXVldWUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcnVuIGFueXRoaW5nIGZyb20gdGhlXG4gICAgICAgICAgICAvLyBtYWNyb3Rhc2sgcXVldWUuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRm9yIHRoZSBXZWJTb2NrZXQgdHJhbnNwb3J0LCBtZXNzYWdlcyBhbHdheXMgYXJyaXZlIGluIHRoZWlyIG93blxuICAgICAgICAgICAgLy8gZXZlbnQuIFRoaXMgbWVhbnMgdGhhdCBpZiBhbnkgcHJvbWlzZXMgYXJlIHJlc29sdmVkIGZyb20gd2l0aGluLFxuICAgICAgICAgICAgLy8gdGhlaXIgY2FsbGJhY2tzIHdpbGwgYWx3YXlzIGZpbmlzaCBleGVjdXRpb24gYnkgdGhlIHRpbWUgdGhlXG4gICAgICAgICAgICAvLyBuZXh0IG1lc3NhZ2UgZXZlbnQgaGFuZGxlciBpcyBydW4uXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSB0aGlzIGJlaGF2aW91ciwgd2UgbmVlZCB0byBtYWtlIHN1cmUgZWFjaFxuICAgICAgICAgICAgLy8gb25tZXNzYWdlIGhhbmRsZXIgaXMgcnVuIHdpdGhpbiBpdCdzIG93biBtYWNyb3Rhc2suXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub25tZXNzYWdlKHtkYXRhOiBtc2d9KSwgMClcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucG9sbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMDQ6XG4gICAgICAgICAgdGhpcy5wb2xsKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQxMDpcbiAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLm9wZW5cbiAgICAgICAgICB0aGlzLm9ub3Blbih7fSlcbiAgICAgICAgICB0aGlzLnBvbGwoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIHRoaXMub25lcnJvcig0MDMpXG4gICAgICAgICAgdGhpcy5jbG9zZSgxMDA4LCBcImZvcmJpZGRlblwiLCBmYWxzZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgNTAwOlxuICAgICAgICAgIHRoaXMub25lcnJvcig1MDApXG4gICAgICAgICAgdGhpcy5jbG9zZUFuZFJldHJ5KDEwMTEsIFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIsIDUwMClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBwb2xsIHN0YXR1cyAke3N0YXR1c31gKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzZW5kKGJvZHkpe1xuICAgIHRoaXMuYWpheChcIlBPU1RcIiwgYm9keSwgKCkgPT4gdGhpcy5vbmVycm9yKFwidGltZW91dFwiKSwgcmVzcCA9PiB7XG4gICAgICBpZighcmVzcCB8fCByZXNwLnN0YXR1cyAhPT0gMjAwKXtcbiAgICAgICAgdGhpcy5vbmVycm9yKHJlc3AgJiYgcmVzcC5zdGF0dXMpXG4gICAgICAgIHRoaXMuY2xvc2VBbmRSZXRyeSgxMDExLCBcImludGVybmFsIHNlcnZlciBlcnJvclwiLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY2xvc2UoY29kZSwgcmVhc29uLCB3YXNDbGVhbil7XG4gICAgZm9yKGxldCByZXEgb2YgdGhpcy5yZXFzKXsgcmVxLmFib3J0KCkgfVxuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMuY2xvc2VkXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtjb2RlOiAxMDAwLCByZWFzb246IHVuZGVmaW5lZCwgd2FzQ2xlYW46IHRydWV9LCB7Y29kZSwgcmVhc29uLCB3YXNDbGVhbn0pXG4gICAgaWYodHlwZW9mKENsb3NlRXZlbnQpICE9PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgIHRoaXMub25jbG9zZShuZXcgQ2xvc2VFdmVudChcImNsb3NlXCIsIG9wdHMpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uY2xvc2Uob3B0cylcbiAgICB9XG4gIH1cblxuICBhamF4KG1ldGhvZCwgYm9keSwgb25DYWxsZXJUaW1lb3V0LCBjYWxsYmFjayl7XG4gICAgbGV0IHJlcVxuICAgIGxldCBvbnRpbWVvdXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnJlcXMuZGVsZXRlKHJlcSlcbiAgICAgIG9uQ2FsbGVyVGltZW91dCgpXG4gICAgfVxuICAgIHJlcSA9IEFqYXgucmVxdWVzdChtZXRob2QsIHRoaXMuZW5kcG9pbnRVUkwoKSwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGJvZHksIHRoaXMudGltZW91dCwgb250aW1lb3V0LCByZXNwID0+IHtcbiAgICAgIHRoaXMucmVxcy5kZWxldGUocmVxKVxuICAgICAgaWYodGhpcy5pc0FjdGl2ZSgpKXsgY2FsbGJhY2socmVzcCkgfVxuICAgIH0pXG4gICAgdGhpcy5yZXFzLmFkZChyZXEpXG4gIH1cbn1cbiIsICIvKipcbiAqIEluaXRpYWxpemVzIHRoZSBQcmVzZW5jZVxuICogQHBhcmFtIHtDaGFubmVsfSBjaGFubmVsIC0gVGhlIENoYW5uZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIG9wdGlvbnMsXG4gKiAgICAgICAgZm9yIGV4YW1wbGUgYHtldmVudHM6IHtzdGF0ZTogXCJzdGF0ZVwiLCBkaWZmOiBcImRpZmZcIn19YFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVzZW5jZSB7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbCwgb3B0cyA9IHt9KXtcbiAgICBsZXQgZXZlbnRzID0gb3B0cy5ldmVudHMgfHwge3N0YXRlOiBcInByZXNlbmNlX3N0YXRlXCIsIGRpZmY6IFwicHJlc2VuY2VfZGlmZlwifVxuICAgIHRoaXMuc3RhdGUgPSB7fVxuICAgIHRoaXMucGVuZGluZ0RpZmZzID0gW11cbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsXG4gICAgdGhpcy5qb2luUmVmID0gbnVsbFxuICAgIHRoaXMuY2FsbGVyID0ge1xuICAgICAgb25Kb2luOiBmdW5jdGlvbiAoKXsgfSxcbiAgICAgIG9uTGVhdmU6IGZ1bmN0aW9uICgpeyB9LFxuICAgICAgb25TeW5jOiBmdW5jdGlvbiAoKXsgfVxuICAgIH1cblxuICAgIHRoaXMuY2hhbm5lbC5vbihldmVudHMuc3RhdGUsIG5ld1N0YXRlID0+IHtcbiAgICAgIGxldCB7b25Kb2luLCBvbkxlYXZlLCBvblN5bmN9ID0gdGhpcy5jYWxsZXJcblxuICAgICAgdGhpcy5qb2luUmVmID0gdGhpcy5jaGFubmVsLmpvaW5SZWYoKVxuICAgICAgdGhpcy5zdGF0ZSA9IFByZXNlbmNlLnN5bmNTdGF0ZSh0aGlzLnN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKVxuXG4gICAgICB0aGlzLnBlbmRpbmdEaWZmcy5mb3JFYWNoKGRpZmYgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlID0gUHJlc2VuY2Uuc3luY0RpZmYodGhpcy5zdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKVxuICAgICAgfSlcbiAgICAgIHRoaXMucGVuZGluZ0RpZmZzID0gW11cbiAgICAgIG9uU3luYygpXG4gICAgfSlcblxuICAgIHRoaXMuY2hhbm5lbC5vbihldmVudHMuZGlmZiwgZGlmZiA9PiB7XG4gICAgICBsZXQge29uSm9pbiwgb25MZWF2ZSwgb25TeW5jfSA9IHRoaXMuY2FsbGVyXG5cbiAgICAgIGlmKHRoaXMuaW5QZW5kaW5nU3luY1N0YXRlKCkpe1xuICAgICAgICB0aGlzLnBlbmRpbmdEaWZmcy5wdXNoKGRpZmYpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlID0gUHJlc2VuY2Uuc3luY0RpZmYodGhpcy5zdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKVxuICAgICAgICBvblN5bmMoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvbkpvaW4oY2FsbGJhY2speyB0aGlzLmNhbGxlci5vbkpvaW4gPSBjYWxsYmFjayB9XG5cbiAgb25MZWF2ZShjYWxsYmFjayl7IHRoaXMuY2FsbGVyLm9uTGVhdmUgPSBjYWxsYmFjayB9XG5cbiAgb25TeW5jKGNhbGxiYWNrKXsgdGhpcy5jYWxsZXIub25TeW5jID0gY2FsbGJhY2sgfVxuXG4gIGxpc3QoYnkpeyByZXR1cm4gUHJlc2VuY2UubGlzdCh0aGlzLnN0YXRlLCBieSkgfVxuXG4gIGluUGVuZGluZ1N5bmNTdGF0ZSgpe1xuICAgIHJldHVybiAhdGhpcy5qb2luUmVmIHx8ICh0aGlzLmpvaW5SZWYgIT09IHRoaXMuY2hhbm5lbC5qb2luUmVmKCkpXG4gIH1cblxuICAvLyBsb3dlci1sZXZlbCBwdWJsaWMgc3RhdGljIEFQSVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHN5bmMgdGhlIGxpc3Qgb2YgcHJlc2VuY2VzIG9uIHRoZSBzZXJ2ZXJcbiAgICogd2l0aCB0aGUgY2xpZW50J3Mgc3RhdGUuIEFuIG9wdGlvbmFsIGBvbkpvaW5gIGFuZCBgb25MZWF2ZWAgY2FsbGJhY2sgY2FuXG4gICAqIGJlIHByb3ZpZGVkIHRvIHJlYWN0IHRvIGNoYW5nZXMgaW4gdGhlIGNsaWVudCdzIGxvY2FsIHByZXNlbmNlcyBhY3Jvc3NcbiAgICogZGlzY29ubmVjdHMgYW5kIHJlY29ubmVjdHMgd2l0aCB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJlc2VuY2V9XG4gICAqL1xuICBzdGF0aWMgc3luY1N0YXRlKGN1cnJlbnRTdGF0ZSwgbmV3U3RhdGUsIG9uSm9pbiwgb25MZWF2ZSl7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5jbG9uZShjdXJyZW50U3RhdGUpXG4gICAgbGV0IGpvaW5zID0ge31cbiAgICBsZXQgbGVhdmVzID0ge31cblxuICAgIHRoaXMubWFwKHN0YXRlLCAoa2V5LCBwcmVzZW5jZSkgPT4ge1xuICAgICAgaWYoIW5ld1N0YXRlW2tleV0pe1xuICAgICAgICBsZWF2ZXNba2V5XSA9IHByZXNlbmNlXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLm1hcChuZXdTdGF0ZSwgKGtleSwgbmV3UHJlc2VuY2UpID0+IHtcbiAgICAgIGxldCBjdXJyZW50UHJlc2VuY2UgPSBzdGF0ZVtrZXldXG4gICAgICBpZihjdXJyZW50UHJlc2VuY2Upe1xuICAgICAgICBsZXQgbmV3UmVmcyA9IG5ld1ByZXNlbmNlLm1ldGFzLm1hcChtID0+IG0ucGh4X3JlZilcbiAgICAgICAgbGV0IGN1clJlZnMgPSBjdXJyZW50UHJlc2VuY2UubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgICBsZXQgam9pbmVkTWV0YXMgPSBuZXdQcmVzZW5jZS5tZXRhcy5maWx0ZXIobSA9PiBjdXJSZWZzLmluZGV4T2YobS5waHhfcmVmKSA8IDApXG4gICAgICAgIGxldCBsZWZ0TWV0YXMgPSBjdXJyZW50UHJlc2VuY2UubWV0YXMuZmlsdGVyKG0gPT4gbmV3UmVmcy5pbmRleE9mKG0ucGh4X3JlZikgPCAwKVxuICAgICAgICBpZihqb2luZWRNZXRhcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICBqb2luc1trZXldID0gbmV3UHJlc2VuY2VcbiAgICAgICAgICBqb2luc1trZXldLm1ldGFzID0gam9pbmVkTWV0YXNcbiAgICAgICAgfVxuICAgICAgICBpZihsZWZ0TWV0YXMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgbGVhdmVzW2tleV0gPSB0aGlzLmNsb25lKGN1cnJlbnRQcmVzZW5jZSlcbiAgICAgICAgICBsZWF2ZXNba2V5XS5tZXRhcyA9IGxlZnRNZXRhc1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqb2luc1trZXldID0gbmV3UHJlc2VuY2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0aGlzLnN5bmNEaWZmKHN0YXRlLCB7am9pbnM6IGpvaW5zLCBsZWF2ZXM6IGxlYXZlc30sIG9uSm9pbiwgb25MZWF2ZSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBVc2VkIHRvIHN5bmMgYSBkaWZmIG9mIHByZXNlbmNlIGpvaW4gYW5kIGxlYXZlXG4gICAqIGV2ZW50cyBmcm9tIHRoZSBzZXJ2ZXIsIGFzIHRoZXkgaGFwcGVuLiBMaWtlIGBzeW5jU3RhdGVgLCBgc3luY0RpZmZgXG4gICAqIGFjY2VwdHMgb3B0aW9uYWwgYG9uSm9pbmAgYW5kIGBvbkxlYXZlYCBjYWxsYmFja3MgdG8gcmVhY3QgdG8gYSB1c2VyXG4gICAqIGpvaW5pbmcgb3IgbGVhdmluZyBmcm9tIGEgZGV2aWNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJlc2VuY2V9XG4gICAqL1xuICBzdGF0aWMgc3luY0RpZmYoc3RhdGUsIGRpZmYsIG9uSm9pbiwgb25MZWF2ZSl7XG4gICAgbGV0IHtqb2lucywgbGVhdmVzfSA9IHRoaXMuY2xvbmUoZGlmZilcbiAgICBpZighb25Kb2luKXsgb25Kb2luID0gZnVuY3Rpb24gKCl7IH0gfVxuICAgIGlmKCFvbkxlYXZlKXsgb25MZWF2ZSA9IGZ1bmN0aW9uICgpeyB9IH1cblxuICAgIHRoaXMubWFwKGpvaW5zLCAoa2V5LCBuZXdQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV1cbiAgICAgIHN0YXRlW2tleV0gPSB0aGlzLmNsb25lKG5ld1ByZXNlbmNlKVxuICAgICAgaWYoY3VycmVudFByZXNlbmNlKXtcbiAgICAgICAgbGV0IGpvaW5lZFJlZnMgPSBzdGF0ZVtrZXldLm1ldGFzLm1hcChtID0+IG0ucGh4X3JlZilcbiAgICAgICAgbGV0IGN1ck1ldGFzID0gY3VycmVudFByZXNlbmNlLm1ldGFzLmZpbHRlcihtID0+IGpvaW5lZFJlZnMuaW5kZXhPZihtLnBoeF9yZWYpIDwgMClcbiAgICAgICAgc3RhdGVba2V5XS5tZXRhcy51bnNoaWZ0KC4uLmN1ck1ldGFzKVxuICAgICAgfVxuICAgICAgb25Kb2luKGtleSwgY3VycmVudFByZXNlbmNlLCBuZXdQcmVzZW5jZSlcbiAgICB9KVxuICAgIHRoaXMubWFwKGxlYXZlcywgKGtleSwgbGVmdFByZXNlbmNlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFByZXNlbmNlID0gc3RhdGVba2V5XVxuICAgICAgaWYoIWN1cnJlbnRQcmVzZW5jZSl7IHJldHVybiB9XG4gICAgICBsZXQgcmVmc1RvUmVtb3ZlID0gbGVmdFByZXNlbmNlLm1ldGFzLm1hcChtID0+IG0ucGh4X3JlZilcbiAgICAgIGN1cnJlbnRQcmVzZW5jZS5tZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIocCA9PiB7XG4gICAgICAgIHJldHVybiByZWZzVG9SZW1vdmUuaW5kZXhPZihwLnBoeF9yZWYpIDwgMFxuICAgICAgfSlcbiAgICAgIG9uTGVhdmUoa2V5LCBjdXJyZW50UHJlc2VuY2UsIGxlZnRQcmVzZW5jZSlcbiAgICAgIGlmKGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5sZW5ndGggPT09IDApe1xuICAgICAgICBkZWxldGUgc3RhdGVba2V5XVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHN0YXRlXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJlc2VuY2VzLCB3aXRoIHNlbGVjdGVkIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJlc2VuY2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNob29zZXJcbiAgICpcbiAgICogQHJldHVybnMge1ByZXNlbmNlfVxuICAgKi9cbiAgc3RhdGljIGxpc3QocHJlc2VuY2VzLCBjaG9vc2VyKXtcbiAgICBpZighY2hvb3Nlcil7IGNob29zZXIgPSBmdW5jdGlvbiAoa2V5LCBwcmVzKXsgcmV0dXJuIHByZXMgfSB9XG5cbiAgICByZXR1cm4gdGhpcy5tYXAocHJlc2VuY2VzLCAoa2V5LCBwcmVzZW5jZSkgPT4ge1xuICAgICAgcmV0dXJuIGNob29zZXIoa2V5LCBwcmVzZW5jZSlcbiAgICB9KVxuICB9XG5cbiAgLy8gcHJpdmF0ZVxuXG4gIHN0YXRpYyBtYXAob2JqLCBmdW5jKXtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5tYXAoa2V5ID0+IGZ1bmMoa2V5LCBvYmpba2V5XSkpXG4gIH1cblxuICBzdGF0aWMgY2xvbmUob2JqKXsgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSkgfVxufVxuIiwgIi8qIFRoZSBkZWZhdWx0IHNlcmlhbGl6ZXIgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBtZXNzYWdlcyAqL1xuaW1wb3J0IHtcbiAgQ0hBTk5FTF9FVkVOVFNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuZXhwb3J0IGRlZmF1bHQge1xuICBIRUFERVJfTEVOR1RIOiAxLFxuICBNRVRBX0xFTkdUSDogNCxcbiAgS0lORFM6IHtwdXNoOiAwLCByZXBseTogMSwgYnJvYWRjYXN0OiAyfSxcblxuICBlbmNvZGUobXNnLCBjYWxsYmFjayl7XG4gICAgaWYobXNnLnBheWxvYWQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKXtcbiAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLmJpbmFyeUVuY29kZShtc2cpKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcGF5bG9hZCA9IFttc2cuam9pbl9yZWYsIG1zZy5yZWYsIG1zZy50b3BpYywgbXNnLmV2ZW50LCBtc2cucGF5bG9hZF1cbiAgICAgIHJldHVybiBjYWxsYmFjayhKU09OLnN0cmluZ2lmeShwYXlsb2FkKSlcbiAgICB9XG4gIH0sXG5cbiAgZGVjb2RlKHJhd1BheWxvYWQsIGNhbGxiYWNrKXtcbiAgICBpZihyYXdQYXlsb2FkLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcil7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5iaW5hcnlEZWNvZGUocmF3UGF5bG9hZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBbam9pbl9yZWYsIHJlZiwgdG9waWMsIGV2ZW50LCBwYXlsb2FkXSA9IEpTT04ucGFyc2UocmF3UGF5bG9hZClcbiAgICAgIHJldHVybiBjYWxsYmFjayh7am9pbl9yZWYsIHJlZiwgdG9waWMsIGV2ZW50LCBwYXlsb2FkfSlcbiAgICB9XG4gIH0sXG5cbiAgLy8gcHJpdmF0ZVxuXG4gIGJpbmFyeUVuY29kZShtZXNzYWdlKXtcbiAgICBsZXQge2pvaW5fcmVmLCByZWYsIGV2ZW50LCB0b3BpYywgcGF5bG9hZH0gPSBtZXNzYWdlXG4gICAgbGV0IG1ldGFMZW5ndGggPSB0aGlzLk1FVEFfTEVOR1RIICsgam9pbl9yZWYubGVuZ3RoICsgcmVmLmxlbmd0aCArIHRvcGljLmxlbmd0aCArIGV2ZW50Lmxlbmd0aFxuICAgIGxldCBoZWFkZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5IRUFERVJfTEVOR1RIICsgbWV0YUxlbmd0aClcbiAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhoZWFkZXIpXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHRoaXMuS0lORFMucHVzaCkgLy8ga2luZFxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGpvaW5fcmVmLmxlbmd0aClcbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCByZWYubGVuZ3RoKVxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHRvcGljLmxlbmd0aClcbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBldmVudC5sZW5ndGgpXG4gICAgQXJyYXkuZnJvbShqb2luX3JlZiwgY2hhciA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKVxuICAgIEFycmF5LmZyb20ocmVmLCBjaGFyID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpXG4gICAgQXJyYXkuZnJvbSh0b3BpYywgY2hhciA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKVxuICAgIEFycmF5LmZyb20oZXZlbnQsIGNoYXIgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSlcblxuICAgIHZhciBjb21iaW5lZCA9IG5ldyBVaW50OEFycmF5KGhlYWRlci5ieXRlTGVuZ3RoICsgcGF5bG9hZC5ieXRlTGVuZ3RoKVxuICAgIGNvbWJpbmVkLnNldChuZXcgVWludDhBcnJheShoZWFkZXIpLCAwKVxuICAgIGNvbWJpbmVkLnNldChuZXcgVWludDhBcnJheShwYXlsb2FkKSwgaGVhZGVyLmJ5dGVMZW5ndGgpXG5cbiAgICByZXR1cm4gY29tYmluZWQuYnVmZmVyXG4gIH0sXG5cbiAgYmluYXJ5RGVjb2RlKGJ1ZmZlcil7XG4gICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKVxuICAgIGxldCBraW5kID0gdmlldy5nZXRVaW50OCgwKVxuICAgIGxldCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICBzd2l0Y2goa2luZCl7XG4gICAgICBjYXNlIHRoaXMuS0lORFMucHVzaDogcmV0dXJuIHRoaXMuZGVjb2RlUHVzaChidWZmZXIsIHZpZXcsIGRlY29kZXIpXG4gICAgICBjYXNlIHRoaXMuS0lORFMucmVwbHk6IHJldHVybiB0aGlzLmRlY29kZVJlcGx5KGJ1ZmZlciwgdmlldywgZGVjb2RlcilcbiAgICAgIGNhc2UgdGhpcy5LSU5EUy5icm9hZGNhc3Q6IHJldHVybiB0aGlzLmRlY29kZUJyb2FkY2FzdChidWZmZXIsIHZpZXcsIGRlY29kZXIpXG4gICAgfVxuICB9LFxuXG4gIGRlY29kZVB1c2goYnVmZmVyLCB2aWV3LCBkZWNvZGVyKXtcbiAgICBsZXQgam9pblJlZlNpemUgPSB2aWV3LmdldFVpbnQ4KDEpXG4gICAgbGV0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMilcbiAgICBsZXQgZXZlbnRTaXplID0gdmlldy5nZXRVaW50OCgzKVxuICAgIGxldCBvZmZzZXQgPSB0aGlzLkhFQURFUl9MRU5HVEggKyB0aGlzLk1FVEFfTEVOR1RIIC0gMSAvLyBwdXNoZXMgaGF2ZSBubyByZWZcbiAgICBsZXQgam9pblJlZiA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGpvaW5SZWZTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBqb2luUmVmU2l6ZVxuICAgIGxldCB0b3BpYyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRvcGljU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgdG9waWNTaXplXG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBldmVudFNpemVcbiAgICBsZXQgZGF0YSA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICAgIHJldHVybiB7am9pbl9yZWY6IGpvaW5SZWYsIHJlZjogbnVsbCwgdG9waWM6IHRvcGljLCBldmVudDogZXZlbnQsIHBheWxvYWQ6IGRhdGF9XG4gIH0sXG5cbiAgZGVjb2RlUmVwbHkoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKXtcbiAgICBsZXQgam9pblJlZlNpemUgPSB2aWV3LmdldFVpbnQ4KDEpXG4gICAgbGV0IHJlZlNpemUgPSB2aWV3LmdldFVpbnQ4KDIpXG4gICAgbGV0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMylcbiAgICBsZXQgZXZlbnRTaXplID0gdmlldy5nZXRVaW50OCg0KVxuICAgIGxldCBvZmZzZXQgPSB0aGlzLkhFQURFUl9MRU5HVEggKyB0aGlzLk1FVEFfTEVOR1RIXG4gICAgbGV0IGpvaW5SZWYgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBqb2luUmVmU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgam9pblJlZlNpemVcbiAgICBsZXQgcmVmID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgcmVmU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgcmVmU2l6ZVxuICAgIGxldCB0b3BpYyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRvcGljU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgdG9waWNTaXplXG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBldmVudFNpemVcbiAgICBsZXQgZGF0YSA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICAgIGxldCBwYXlsb2FkID0ge3N0YXR1czogZXZlbnQsIHJlc3BvbnNlOiBkYXRhfVxuICAgIHJldHVybiB7am9pbl9yZWY6IGpvaW5SZWYsIHJlZjogcmVmLCB0b3BpYzogdG9waWMsIGV2ZW50OiBDSEFOTkVMX0VWRU5UUy5yZXBseSwgcGF5bG9hZDogcGF5bG9hZH1cbiAgfSxcblxuICBkZWNvZGVCcm9hZGNhc3QoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKXtcbiAgICBsZXQgdG9waWNTaXplID0gdmlldy5nZXRVaW50OCgxKVxuICAgIGxldCBldmVudFNpemUgPSB2aWV3LmdldFVpbnQ4KDIpXG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIDJcbiAgICBsZXQgdG9waWMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0b3BpY1NpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIHRvcGljU2l6ZVxuICAgIGxldCBldmVudCA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGV2ZW50U2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgZXZlbnRTaXplXG4gICAgbGV0IGRhdGEgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcblxuICAgIHJldHVybiB7am9pbl9yZWY6IG51bGwsIHJlZjogbnVsbCwgdG9waWM6IHRvcGljLCBldmVudDogZXZlbnQsIHBheWxvYWQ6IGRhdGF9XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBnbG9iYWwsXG4gIHBoeFdpbmRvdyxcbiAgQ0hBTk5FTF9FVkVOVFMsXG4gIERFRkFVTFRfVElNRU9VVCxcbiAgREVGQVVMVF9WU04sXG4gIFNPQ0tFVF9TVEFURVMsXG4gIFRSQU5TUE9SVFMsXG4gIFdTX0NMT1NFX05PUk1BTFxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBjbG9zdXJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IEFqYXggZnJvbSBcIi4vYWpheFwiXG5pbXBvcnQgQ2hhbm5lbCBmcm9tIFwiLi9jaGFubmVsXCJcbmltcG9ydCBMb25nUG9sbCBmcm9tIFwiLi9sb25ncG9sbFwiXG5pbXBvcnQgU2VyaWFsaXplciBmcm9tIFwiLi9zZXJpYWxpemVyXCJcbmltcG9ydCBUaW1lciBmcm9tIFwiLi90aW1lclwiXG5cbi8qKiBJbml0aWFsaXplcyB0aGUgU29ja2V0ICpcbiAqXG4gKiBGb3IgSUU4IHN1cHBvcnQgdXNlIGFuIEVTNS1zaGltIChodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGVuZFBvaW50IC0gVGhlIHN0cmluZyBXZWJTb2NrZXQgZW5kcG9pbnQsIGllLCBgXCJ3czovL2V4YW1wbGUuY29tL3NvY2tldFwiYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXCJ3c3M6Ly9leGFtcGxlLmNvbVwiYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIi9zb2NrZXRcImAgKGluaGVyaXRlZCBob3N0ICYgcHJvdG9jb2wpXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudHJhbnNwb3J0XSAtIFRoZSBXZWJzb2NrZXQgVHJhbnNwb3J0LCBmb3IgZXhhbXBsZSBXZWJTb2NrZXQgb3IgUGhvZW5peC5Mb25nUG9sbC5cbiAqXG4gKiBEZWZhdWx0cyB0byBXZWJTb2NrZXQgd2l0aCBhdXRvbWF0aWMgTG9uZ1BvbGwgZmFsbGJhY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5lbmNvZGVdIC0gVGhlIGZ1bmN0aW9uIHRvIGVuY29kZSBvdXRnb2luZyBtZXNzYWdlcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBKU09OIGVuY29kZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuZGVjb2RlXSAtIFRoZSBmdW5jdGlvbiB0byBkZWNvZGUgaW5jb21pbmcgbWVzc2FnZXMuXG4gKlxuICogRGVmYXVsdHMgdG8gSlNPTjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAocGF5bG9hZCwgY2FsbGJhY2spID0+IGNhbGxiYWNrKEpTT04ucGFyc2UocGF5bG9hZCkpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMudGltZW91dF0gLSBUaGUgZGVmYXVsdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB0cmlnZ2VyIHB1c2ggdGltZW91dHMuXG4gKlxuICogRGVmYXVsdHMgYERFRkFVTFRfVElNRU9VVGBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5oZWFydGJlYXRJbnRlcnZhbE1zXSAtIFRoZSBtaWxsaXNlYyBpbnRlcnZhbCB0byBzZW5kIGEgaGVhcnRiZWF0IG1lc3NhZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5yZWNvbm5lY3RBZnRlck1zXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG1pbGxpc2VjXG4gKiBzb2NrZXQgcmVjb25uZWN0IGludGVydmFsLlxuICpcbiAqIERlZmF1bHRzIHRvIHN0ZXBwZWQgYmFja29mZiBvZjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbih0cmllcyl7XG4gKiAgIHJldHVybiBbMTAsIDUwLCAxMDAsIDE1MCwgMjAwLCAyNTAsIDUwMCwgMTAwMCwgMjAwMF1bdHJpZXMgLSAxXSB8fCA1MDAwXG4gKiB9XG4gKiBgYGBgXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnJlam9pbkFmdGVyTXNdIC0gVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbWlsbGlzZWNcbiAqIHJlam9pbiBpbnRlcnZhbCBmb3IgaW5kaXZpZHVhbCBjaGFubmVscy5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbih0cmllcyl7XG4gKiAgIHJldHVybiBbMTAwMCwgMjAwMCwgNTAwMF1bdHJpZXMgLSAxXSB8fCAxMDAwMFxuICogfVxuICogYGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmxvZ2dlcl0gLSBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gZm9yIHNwZWNpYWxpemVkIGxvZ2dpbmcsIGllOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGZ1bmN0aW9uKGtpbmQsIG1zZywgZGF0YSkge1xuICogICBjb25zb2xlLmxvZyhgJHtraW5kfTogJHttc2d9YCwgZGF0YSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5sb25ncG9sbGVyVGltZW91dF0gLSBUaGUgbWF4aW11bSB0aW1lb3V0IG9mIGEgbG9uZyBwb2xsIEFKQVggcmVxdWVzdC5cbiAqXG4gKiBEZWZhdWx0cyB0byAyMHMgKGRvdWJsZSB0aGUgc2VydmVyIGxvbmcgcG9sbCB0aW1lcikuXG4gKlxuICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKX0gW29wdHMucGFyYW1zXSAtIFRoZSBvcHRpb25hbCBwYXJhbXMgdG8gcGFzcyB3aGVuIGNvbm5lY3RpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5iaW5hcnlUeXBlXSAtIFRoZSBiaW5hcnkgdHlwZSB0byB1c2UgZm9yIGJpbmFyeSBXZWJTb2NrZXQgZnJhbWVzLlxuICpcbiAqIERlZmF1bHRzIHRvIFwiYXJyYXlidWZmZXJcIlxuICpcbiAqIEBwYXJhbSB7dnNufSBbb3B0cy52c25dIC0gVGhlIHNlcmlhbGl6ZXIncyBwcm90b2NvbCB2ZXJzaW9uIHRvIHNlbmQgb24gY29ubmVjdC5cbiAqXG4gKiBEZWZhdWx0cyB0byBERUZBVUxUX1ZTTi5cbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb2NrZXQge1xuICBjb25zdHJ1Y3RvcihlbmRQb2ludCwgb3B0cyA9IHt9KXtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzID0ge29wZW46IFtdLCBjbG9zZTogW10sIGVycm9yOiBbXSwgbWVzc2FnZTogW119XG4gICAgdGhpcy5jaGFubmVscyA9IFtdXG4gICAgdGhpcy5zZW5kQnVmZmVyID0gW11cbiAgICB0aGlzLnJlZiA9IDBcbiAgICB0aGlzLnRpbWVvdXQgPSBvcHRzLnRpbWVvdXQgfHwgREVGQVVMVF9USU1FT1VUXG4gICAgdGhpcy50cmFuc3BvcnQgPSBvcHRzLnRyYW5zcG9ydCB8fCBnbG9iYWwuV2ViU29ja2V0IHx8IExvbmdQb2xsXG4gICAgdGhpcy5lc3RhYmxpc2hlZENvbm5lY3Rpb25zID0gMFxuICAgIHRoaXMuZGVmYXVsdEVuY29kZXIgPSBTZXJpYWxpemVyLmVuY29kZS5iaW5kKFNlcmlhbGl6ZXIpXG4gICAgdGhpcy5kZWZhdWx0RGVjb2RlciA9IFNlcmlhbGl6ZXIuZGVjb2RlLmJpbmQoU2VyaWFsaXplcilcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSBmYWxzZVxuICAgIHRoaXMuYmluYXJ5VHlwZSA9IG9wdHMuYmluYXJ5VHlwZSB8fCBcImFycmF5YnVmZmVyXCJcbiAgICB0aGlzLmNvbm5lY3RDbG9jayA9IDFcbiAgICBpZih0aGlzLnRyYW5zcG9ydCAhPT0gTG9uZ1BvbGwpe1xuICAgICAgdGhpcy5lbmNvZGUgPSBvcHRzLmVuY29kZSB8fCB0aGlzLmRlZmF1bHRFbmNvZGVyXG4gICAgICB0aGlzLmRlY29kZSA9IG9wdHMuZGVjb2RlIHx8IHRoaXMuZGVmYXVsdERlY29kZXJcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmNvZGUgPSB0aGlzLmRlZmF1bHRFbmNvZGVyXG4gICAgICB0aGlzLmRlY29kZSA9IHRoaXMuZGVmYXVsdERlY29kZXJcbiAgICB9XG4gICAgbGV0IGF3YWl0aW5nQ29ubmVjdGlvbk9uUGFnZVNob3cgPSBudWxsXG4gICAgaWYocGh4V2luZG93ICYmIHBoeFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcbiAgICAgIHBoeFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgX2UgPT4ge1xuICAgICAgICBpZih0aGlzLmNvbm4pe1xuICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpXG4gICAgICAgICAgYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9IHRoaXMuY29ubmVjdENsb2NrXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBwaHhXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsIF9lID0+IHtcbiAgICAgICAgaWYoYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9PT0gdGhpcy5jb25uZWN0Q2xvY2spe1xuICAgICAgICAgIGF3YWl0aW5nQ29ubmVjdGlvbk9uUGFnZVNob3cgPSBudWxsXG4gICAgICAgICAgdGhpcy5jb25uZWN0KClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zID0gb3B0cy5oZWFydGJlYXRJbnRlcnZhbE1zIHx8IDMwMDAwXG4gICAgdGhpcy5yZWpvaW5BZnRlck1zID0gKHRyaWVzKSA9PiB7XG4gICAgICBpZihvcHRzLnJlam9pbkFmdGVyTXMpe1xuICAgICAgICByZXR1cm4gb3B0cy5yZWpvaW5BZnRlck1zKHRyaWVzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFsxMDAwLCAyMDAwLCA1MDAwXVt0cmllcyAtIDFdIHx8IDEwMDAwXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVjb25uZWN0QWZ0ZXJNcyA9ICh0cmllcykgPT4ge1xuICAgICAgaWYob3B0cy5yZWNvbm5lY3RBZnRlck1zKXtcbiAgICAgICAgcmV0dXJuIG9wdHMucmVjb25uZWN0QWZ0ZXJNcyh0cmllcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbMTAsIDUwLCAxMDAsIDE1MCwgMjAwLCAyNTAsIDUwMCwgMTAwMCwgMjAwMF1bdHJpZXMgLSAxXSB8fCA1MDAwXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyID0gb3B0cy5sb2dnZXIgfHwgbnVsbFxuICAgIHRoaXMubG9uZ3BvbGxlclRpbWVvdXQgPSBvcHRzLmxvbmdwb2xsZXJUaW1lb3V0IHx8IDIwMDAwXG4gICAgdGhpcy5wYXJhbXMgPSBjbG9zdXJlKG9wdHMucGFyYW1zIHx8IHt9KVxuICAgIHRoaXMuZW5kUG9pbnQgPSBgJHtlbmRQb2ludH0vJHtUUkFOU1BPUlRTLndlYnNvY2tldH1gXG4gICAgdGhpcy52c24gPSBvcHRzLnZzbiB8fCBERUZBVUxUX1ZTTlxuICAgIHRoaXMuaGVhcnRiZWF0VGltZW91dFRpbWVyID0gbnVsbFxuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBudWxsXG4gICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gbnVsbFxuICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBuZXcgVGltZXIoKCkgPT4ge1xuICAgICAgdGhpcy50ZWFyZG93bigoKSA9PiB0aGlzLmNvbm5lY3QoKSlcbiAgICB9LCB0aGlzLnJlY29ubmVjdEFmdGVyTXMpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgTG9uZ1BvbGwgdHJhbnNwb3J0IHJlZmVyZW5jZVxuICAgKi9cbiAgZ2V0TG9uZ1BvbGxUcmFuc3BvcnQoKXsgcmV0dXJuIExvbmdQb2xsIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdHMgYW5kIHJlcGxhY2VzIHRoZSBhY3RpdmUgdHJhbnNwb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld1RyYW5zcG9ydCAtIFRoZSBuZXcgdHJhbnNwb3J0IGNsYXNzIHRvIGluc3RhbnRpYXRlXG4gICAqXG4gICAqL1xuICByZXBsYWNlVHJhbnNwb3J0KG5ld1RyYW5zcG9ydCl7XG4gICAgdGhpcy5jb25uZWN0Q2xvY2srK1xuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IHRydWVcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KClcbiAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXVxuICAgIGlmKHRoaXMuY29ubil7XG4gICAgICB0aGlzLmNvbm4uY2xvc2UoKVxuICAgICAgdGhpcy5jb25uID0gbnVsbFxuICAgIH1cbiAgICB0aGlzLnRyYW5zcG9ydCA9IG5ld1RyYW5zcG9ydFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNvY2tldCBwcm90b2NvbFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcHJvdG9jb2woKXsgcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sLm1hdGNoKC9eaHR0cHMvKSA/IFwid3NzXCIgOiBcIndzXCIgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbHkgcXVhbGlmaWVkIHNvY2tldCB1cmxcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGVuZFBvaW50VVJMKCl7XG4gICAgbGV0IHVyaSA9IEFqYXguYXBwZW5kUGFyYW1zKFxuICAgICAgQWpheC5hcHBlbmRQYXJhbXModGhpcy5lbmRQb2ludCwgdGhpcy5wYXJhbXMoKSksIHt2c246IHRoaXMudnNufSlcbiAgICBpZih1cmkuY2hhckF0KDApICE9PSBcIi9cIil7IHJldHVybiB1cmkgfVxuICAgIGlmKHVyaS5jaGFyQXQoMSkgPT09IFwiL1wiKXsgcmV0dXJuIGAke3RoaXMucHJvdG9jb2woKX06JHt1cml9YCB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy5wcm90b2NvbCgpfTovLyR7bG9jYXRpb24uaG9zdH0ke3VyaX1gXG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdHMgdGhlIHNvY2tldFxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Nsb3NlRXZlbnQjU3RhdHVzX2NvZGVzIGZvciB2YWxpZCBzdGF0dXMgY29kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHNvY2tldCBpcyBkaXNjb25uZWN0ZWQuXG4gICAqIEBwYXJhbSB7aW50ZWdlcn0gY29kZSAtIEEgc3RhdHVzIGNvZGUgZm9yIGRpc2Nvbm5lY3Rpb24gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIEEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgcmVhc29uIHRvIGRpc2Nvbm5lY3QuIChPcHRpb25hbClcbiAgICovXG4gIGRpc2Nvbm5lY3QoY2FsbGJhY2ssIGNvZGUsIHJlYXNvbil7XG4gICAgdGhpcy5jb25uZWN0Q2xvY2srK1xuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IHRydWVcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KClcbiAgICB0aGlzLnRlYXJkb3duKGNhbGxiYWNrLCBjb2RlLCByZWFzb24pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBwYXJhbXMgdG8gc2VuZCB3aGVuIGNvbm5lY3RpbmcsIGZvciBleGFtcGxlIGB7dXNlcl9pZDogdXNlclRva2VufWBcbiAgICpcbiAgICogUGFzc2luZyBwYXJhbXMgdG8gY29ubmVjdCBpcyBkZXByZWNhdGVkOyBwYXNzIHRoZW0gaW4gdGhlIFNvY2tldCBjb25zdHJ1Y3RvciBpbnN0ZWFkOlxuICAgKiBgbmV3IFNvY2tldChcIi9zb2NrZXRcIiwge3BhcmFtczoge3VzZXJfaWQ6IHVzZXJUb2tlbn19KWAuXG4gICAqL1xuICBjb25uZWN0KHBhcmFtcyl7XG4gICAgaWYocGFyYW1zKXtcbiAgICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2coXCJwYXNzaW5nIHBhcmFtcyB0byBjb25uZWN0IGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgcGFzcyA6cGFyYW1zIHRvIHRoZSBTb2NrZXQgY29uc3RydWN0b3JcIilcbiAgICAgIHRoaXMucGFyYW1zID0gY2xvc3VyZShwYXJhbXMpXG4gICAgfVxuICAgIGlmKHRoaXMuY29ubil7IHJldHVybiB9XG5cbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gZmFsc2VcbiAgICB0aGlzLmNvbm4gPSBuZXcgdGhpcy50cmFuc3BvcnQodGhpcy5lbmRQb2ludFVSTCgpKVxuICAgIHRoaXMuY29ubi5iaW5hcnlUeXBlID0gdGhpcy5iaW5hcnlUeXBlXG4gICAgdGhpcy5jb25uLnRpbWVvdXQgPSB0aGlzLmxvbmdwb2xsZXJUaW1lb3V0XG4gICAgdGhpcy5jb25uLm9ub3BlbiA9ICgpID0+IHRoaXMub25Db25uT3BlbigpXG4gICAgdGhpcy5jb25uLm9uZXJyb3IgPSBlcnJvciA9PiB0aGlzLm9uQ29ubkVycm9yKGVycm9yKVxuICAgIHRoaXMuY29ubi5vbm1lc3NhZ2UgPSBldmVudCA9PiB0aGlzLm9uQ29ubk1lc3NhZ2UoZXZlbnQpXG4gICAgdGhpcy5jb25uLm9uY2xvc2UgPSBldmVudCA9PiB0aGlzLm9uQ29ubkNsb3NlKGV2ZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgdGhlIG1lc3NhZ2UuIE92ZXJyaWRlIGB0aGlzLmxvZ2dlcmAgZm9yIHNwZWNpYWxpemVkIGxvZ2dpbmcuIG5vb3BzIGJ5IGRlZmF1bHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cbiAgbG9nKGtpbmQsIG1zZywgZGF0YSl7IHRoaXMubG9nZ2VyKGtpbmQsIG1zZywgZGF0YSkgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBsb2dnZXIgaGFzIGJlZW4gc2V0IG9uIHRoaXMgc29ja2V0LlxuICAgKi9cbiAgaGFzTG9nZ2VyKCl7IHJldHVybiB0aGlzLmxvZ2dlciAhPT0gbnVsbCB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gb3BlbiBldmVudHNcbiAgICpcbiAgICogQGV4YW1wbGUgc29ja2V0Lm9uT3BlbihmdW5jdGlvbigpeyBjb25zb2xlLmluZm8oXCJ0aGUgc29ja2V0IHdhcyBvcGVuZWRcIikgfSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uT3BlbihjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5vcGVuLnB1c2goW3JlZiwgY2FsbGJhY2tdKVxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIGNsb3NlIGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25DbG9zZShjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5jbG9zZS5wdXNoKFtyZWYsIGNhbGxiYWNrXSlcbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiBlcnJvciBldmVudHNcbiAgICpcbiAgICogQGV4YW1wbGUgc29ja2V0Lm9uRXJyb3IoZnVuY3Rpb24oZXJyb3IpeyBhbGVydChcIkFuIGVycm9yIG9jY3VycmVkXCIpIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbkVycm9yKGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmVycm9yLnB1c2goW3JlZiwgY2FsbGJhY2tdKVxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIG1lc3NhZ2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbk1lc3NhZ2UoY2FsbGJhY2spe1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MubWVzc2FnZS5wdXNoKFtyZWYsIGNhbGxiYWNrXSlcbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICAvKipcbiAgICogUGluZ3MgdGhlIHNlcnZlciBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgUlRUIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBpbmcgd2FzIHB1c2hlZCBvciBmYWxzZSBpZiB1bmFibGUgdG8gYmUgcHVzaGVkLlxuICAgKi9cbiAgcGluZyhjYWxsYmFjayl7XG4gICAgaWYoIXRoaXMuaXNDb25uZWN0ZWQoKSl7IHJldHVybiBmYWxzZSB9XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICB0aGlzLnB1c2goe3RvcGljOiBcInBob2VuaXhcIiwgZXZlbnQ6IFwiaGVhcnRiZWF0XCIsIHBheWxvYWQ6IHt9LCByZWY6IHJlZn0pXG4gICAgbGV0IG9uTXNnUmVmID0gdGhpcy5vbk1lc3NhZ2UobXNnID0+IHtcbiAgICAgIGlmKG1zZy5yZWYgPT09IHJlZil7XG4gICAgICAgIHRoaXMub2ZmKFtvbk1zZ1JlZl0pXG4gICAgICAgIGNhbGxiYWNrKERhdGUubm93KCkgLSBzdGFydFRpbWUpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGNsZWFySGVhcnRiZWF0cygpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0YmVhdFRpbWVyKVxuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0YmVhdFRpbWVvdXRUaW1lcilcbiAgfVxuXG4gIG9uQ29ubk9wZW4oKXtcbiAgICBpZih0aGlzLmhhc0xvZ2dlcigpKSB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBgY29ubmVjdGVkIHRvICR7dGhpcy5lbmRQb2ludFVSTCgpfWApXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gZmFsc2VcbiAgICB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnMrK1xuICAgIHRoaXMuZmx1c2hTZW5kQnVmZmVyKClcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KClcbiAgICB0aGlzLnJlc2V0SGVhcnRiZWF0KClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm9wZW4uZm9yRWFjaCgoWywgY2FsbGJhY2tdKSA9PiBjYWxsYmFjaygpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGhlYXJ0YmVhdFRpbWVvdXQoKXtcbiAgICBpZih0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYpe1xuICAgICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gbnVsbFxuICAgICAgaWYodGhpcy5oYXNMb2dnZXIoKSl7IHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIFwiaGVhcnRiZWF0IHRpbWVvdXQuIEF0dGVtcHRpbmcgdG8gcmUtZXN0YWJsaXNoIGNvbm5lY3Rpb25cIikgfVxuICAgICAgdGhpcy50cmlnZ2VyQ2hhbkVycm9yKClcbiAgICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlXG4gICAgICB0aGlzLnRlYXJkb3duKCgpID0+IHRoaXMucmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCksIFdTX0NMT1NFX05PUk1BTCwgXCJoZWFydGJlYXQgdGltZW91dFwiKVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGVhcnRiZWF0KCl7XG4gICAgaWYodGhpcy5jb25uICYmIHRoaXMuY29ubi5za2lwSGVhcnRiZWF0KXsgcmV0dXJuIH1cbiAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsXG4gICAgdGhpcy5jbGVhckhlYXJ0YmVhdHMoKVxuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VuZEhlYXJ0YmVhdCgpLCB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMpXG4gIH1cblxuICB0ZWFyZG93bihjYWxsYmFjaywgY29kZSwgcmVhc29uKXtcbiAgICBpZighdGhpcy5jb25uKXtcbiAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgfVxuXG4gICAgdGhpcy53YWl0Rm9yQnVmZmVyRG9uZSgoKSA9PiB7XG4gICAgICBpZih0aGlzLmNvbm4pe1xuICAgICAgICBpZihjb2RlKXsgdGhpcy5jb25uLmNsb3NlKGNvZGUsIHJlYXNvbiB8fCBcIlwiKSB9IGVsc2UgeyB0aGlzLmNvbm4uY2xvc2UoKSB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2FpdEZvclNvY2tldENsb3NlZCgoKSA9PiB7XG4gICAgICAgIGlmKHRoaXMuY29ubil7XG4gICAgICAgICAgdGhpcy5jb25uLm9ub3BlbiA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICAgICAgICB0aGlzLmNvbm4ub25lcnJvciA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICAgICAgICB0aGlzLmNvbm4ub25tZXNzYWdlID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgICAgICAgIHRoaXMuY29ubi5vbmNsb3NlID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgICAgICAgIHRoaXMuY29ubiA9IG51bGxcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHdhaXRGb3JCdWZmZXJEb25lKGNhbGxiYWNrLCB0cmllcyA9IDEpe1xuICAgIGlmKHRyaWVzID09PSA1IHx8ICF0aGlzLmNvbm4gfHwgIXRoaXMuY29ubi5idWZmZXJlZEFtb3VudCl7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMud2FpdEZvckJ1ZmZlckRvbmUoY2FsbGJhY2ssIHRyaWVzICsgMSlcbiAgICB9LCAxNTAgKiB0cmllcylcbiAgfVxuXG4gIHdhaXRGb3JTb2NrZXRDbG9zZWQoY2FsbGJhY2ssIHRyaWVzID0gMSl7XG4gICAgaWYodHJpZXMgPT09IDUgfHwgIXRoaXMuY29ubiB8fCB0aGlzLmNvbm4ucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5jbG9zZWQpe1xuICAgICAgY2FsbGJhY2soKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndhaXRGb3JTb2NrZXRDbG9zZWQoY2FsbGJhY2ssIHRyaWVzICsgMSlcbiAgICB9LCAxNTAgKiB0cmllcylcbiAgfVxuXG4gIG9uQ29ubkNsb3NlKGV2ZW50KXtcbiAgICBsZXQgY2xvc2VDb2RlID0gZXZlbnQgJiYgZXZlbnQuY29kZVxuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIFwiY2xvc2VcIiwgZXZlbnQpXG4gICAgdGhpcy50cmlnZ2VyQ2hhbkVycm9yKClcbiAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpXG4gICAgaWYoIXRoaXMuY2xvc2VXYXNDbGVhbiAmJiBjbG9zZUNvZGUgIT09IDEwMDApe1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKVxuICAgIH1cbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmNsb3NlLmZvckVhY2goKFssIGNhbGxiYWNrXSkgPT4gY2FsbGJhY2soZXZlbnQpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkNvbm5FcnJvcihlcnJvcil7XG4gICAgaWYodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgZXJyb3IpXG4gICAgbGV0IHRyYW5zcG9ydEJlZm9yZSA9IHRoaXMudHJhbnNwb3J0XG4gICAgbGV0IGVzdGFibGlzaGVkQmVmb3JlID0gdGhpcy5lc3RhYmxpc2hlZENvbm5lY3Rpb25zXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5lcnJvci5mb3JFYWNoKChbLCBjYWxsYmFja10pID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCB0cmFuc3BvcnRCZWZvcmUsIGVzdGFibGlzaGVkQmVmb3JlKVxuICAgIH0pXG4gICAgaWYodHJhbnNwb3J0QmVmb3JlID09PSB0aGlzLnRyYW5zcG9ydCB8fCBlc3RhYmxpc2hlZEJlZm9yZSA+IDApe1xuICAgICAgdGhpcy50cmlnZ2VyQ2hhbkVycm9yKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyaWdnZXJDaGFuRXJyb3IoKXtcbiAgICB0aGlzLmNoYW5uZWxzLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBpZighKGNoYW5uZWwuaXNFcnJvcmVkKCkgfHwgY2hhbm5lbC5pc0xlYXZpbmcoKSB8fCBjaGFubmVsLmlzQ2xvc2VkKCkpKXtcbiAgICAgICAgY2hhbm5lbC50cmlnZ2VyKENIQU5ORUxfRVZFTlRTLmVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGNvbm5lY3Rpb25TdGF0ZSgpe1xuICAgIHN3aXRjaCh0aGlzLmNvbm4gJiYgdGhpcy5jb25uLnJlYWR5U3RhdGUpe1xuICAgICAgY2FzZSBTT0NLRVRfU1RBVEVTLmNvbm5lY3Rpbmc6IHJldHVybiBcImNvbm5lY3RpbmdcIlxuICAgICAgY2FzZSBTT0NLRVRfU1RBVEVTLm9wZW46IHJldHVybiBcIm9wZW5cIlxuICAgICAgY2FzZSBTT0NLRVRfU1RBVEVTLmNsb3Npbmc6IHJldHVybiBcImNsb3NpbmdcIlxuICAgICAgZGVmYXVsdDogcmV0dXJuIFwiY2xvc2VkXCJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0Nvbm5lY3RlZCgpeyByZXR1cm4gdGhpcy5jb25uZWN0aW9uU3RhdGUoKSA9PT0gXCJvcGVuXCIgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0NoYW5uZWx9XG4gICAqL1xuICByZW1vdmUoY2hhbm5lbCl7XG4gICAgdGhpcy5vZmYoY2hhbm5lbC5zdGF0ZUNoYW5nZVJlZnMpXG4gICAgdGhpcy5jaGFubmVscyA9IHRoaXMuY2hhbm5lbHMuZmlsdGVyKGMgPT4gYy5qb2luUmVmKCkgIT09IGNoYW5uZWwuam9pblJlZigpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYG9uT3BlbmAsIGBvbkNsb3NlYCwgYG9uRXJyb3IsYCBhbmQgYG9uTWVzc2FnZWAgcmVnaXN0cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtyZWZzfSAtIGxpc3Qgb2YgcmVmcyByZXR1cm5lZCBieSBjYWxscyB0b1xuICAgKiAgICAgICAgICAgICAgICAgYG9uT3BlbmAsIGBvbkNsb3NlYCwgYG9uRXJyb3IsYCBhbmQgYG9uTWVzc2FnZWBcbiAgICovXG4gIG9mZihyZWZzKXtcbiAgICBmb3IobGV0IGtleSBpbiB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzKXtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Nba2V5XSA9IHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Nba2V5XS5maWx0ZXIoKFtyZWZdKSA9PiB7XG4gICAgICAgIHJldHVybiByZWZzLmluZGV4T2YocmVmKSA9PT0gLTFcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBhIG5ldyBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gdG9waWNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcGljXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjaGFuUGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGNoYW5uZWxcbiAgICogQHJldHVybnMge0NoYW5uZWx9XG4gICAqL1xuICBjaGFubmVsKHRvcGljLCBjaGFuUGFyYW1zID0ge30pe1xuICAgIGxldCBjaGFuID0gbmV3IENoYW5uZWwodG9waWMsIGNoYW5QYXJhbXMsIHRoaXMpXG4gICAgdGhpcy5jaGFubmVscy5wdXNoKGNoYW4pXG4gICAgcmV0dXJuIGNoYW5cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cbiAgcHVzaChkYXRhKXtcbiAgICBpZih0aGlzLmhhc0xvZ2dlcigpKXtcbiAgICAgIGxldCB7dG9waWMsIGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5fcmVmfSA9IGRhdGFcbiAgICAgIHRoaXMubG9nKFwicHVzaFwiLCBgJHt0b3BpY30gJHtldmVudH0gKCR7am9pbl9yZWZ9LCAke3JlZn0pYCwgcGF5bG9hZClcbiAgICB9XG5cbiAgICBpZih0aGlzLmlzQ29ubmVjdGVkKCkpe1xuICAgICAgdGhpcy5lbmNvZGUoZGF0YSwgcmVzdWx0ID0+IHRoaXMuY29ubi5zZW5kKHJlc3VsdCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZEJ1ZmZlci5wdXNoKCgpID0+IHRoaXMuZW5jb2RlKGRhdGEsIHJlc3VsdCA9PiB0aGlzLmNvbm4uc2VuZChyZXN1bHQpKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBuZXh0IG1lc3NhZ2UgcmVmLCBhY2NvdW50aW5nIGZvciBvdmVyZmxvd3NcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIG1ha2VSZWYoKXtcbiAgICBsZXQgbmV3UmVmID0gdGhpcy5yZWYgKyAxXG4gICAgaWYobmV3UmVmID09PSB0aGlzLnJlZil7IHRoaXMucmVmID0gMCB9IGVsc2UgeyB0aGlzLnJlZiA9IG5ld1JlZiB9XG5cbiAgICByZXR1cm4gdGhpcy5yZWYudG9TdHJpbmcoKVxuICB9XG5cbiAgc2VuZEhlYXJ0YmVhdCgpe1xuICAgIGlmKHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiAmJiAhdGhpcy5pc0Nvbm5lY3RlZCgpKXsgcmV0dXJuIH1cbiAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSB0aGlzLm1ha2VSZWYoKVxuICAgIHRoaXMucHVzaCh7dG9waWM6IFwicGhvZW5peFwiLCBldmVudDogXCJoZWFydGJlYXRcIiwgcGF5bG9hZDoge30sIHJlZjogdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmfSlcbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oZWFydGJlYXRUaW1lb3V0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcbiAgfVxuXG4gIGZsdXNoU2VuZEJ1ZmZlcigpe1xuICAgIGlmKHRoaXMuaXNDb25uZWN0ZWQoKSAmJiB0aGlzLnNlbmRCdWZmZXIubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLnNlbmRCdWZmZXIuZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjaygpKVxuICAgICAgdGhpcy5zZW5kQnVmZmVyID0gW11cbiAgICB9XG4gIH1cblxuICBvbkNvbm5NZXNzYWdlKHJhd01lc3NhZ2Upe1xuICAgIHRoaXMuZGVjb2RlKHJhd01lc3NhZ2UuZGF0YSwgbXNnID0+IHtcbiAgICAgIGxldCB7dG9waWMsIGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5fcmVmfSA9IG1zZ1xuICAgICAgaWYocmVmICYmIHJlZiA9PT0gdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmKXtcbiAgICAgICAgdGhpcy5jbGVhckhlYXJ0YmVhdHMoKVxuICAgICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsXG4gICAgICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VuZEhlYXJ0YmVhdCgpLCB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMpXG4gICAgICB9XG5cbiAgICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwicmVjZWl2ZVwiLCBgJHtwYXlsb2FkLnN0YXR1cyB8fCBcIlwifSAke3RvcGljfSAke2V2ZW50fSAke3JlZiAmJiBcIihcIiArIHJlZiArIFwiKVwiIHx8IFwiXCJ9YCwgcGF5bG9hZClcblxuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbm5lbHMubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVsc1tpXVxuICAgICAgICBpZighY2hhbm5lbC5pc01lbWJlcih0b3BpYywgZXZlbnQsIHBheWxvYWQsIGpvaW5fcmVmKSl7IGNvbnRpbnVlIH1cbiAgICAgICAgY2hhbm5lbC50cmlnZ2VyKGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5fcmVmKVxuICAgICAgfVxuXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5tZXNzYWdlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgbGV0IFssIGNhbGxiYWNrXSA9IHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MubWVzc2FnZVtpXVxuICAgICAgICBjYWxsYmFjayhtc2cpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGxlYXZlT3BlblRvcGljKHRvcGljKXtcbiAgICBsZXQgZHVwQ2hhbm5lbCA9IHRoaXMuY2hhbm5lbHMuZmluZChjID0+IGMudG9waWMgPT09IHRvcGljICYmIChjLmlzSm9pbmVkKCkgfHwgYy5pc0pvaW5pbmcoKSkpXG4gICAgaWYoZHVwQ2hhbm5lbCl7XG4gICAgICBpZih0aGlzLmhhc0xvZ2dlcigpKSB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBgbGVhdmluZyBkdXBsaWNhdGUgdG9waWMgXCIke3RvcGljfVwiYClcbiAgICAgIGR1cENoYW5uZWwubGVhdmUoKVxuICAgIH1cbiAgfVxufSIsICJcbmV4cG9ydCBjb25zdCBDT05TRUNVVElWRV9SRUxPQURTID0gXCJjb25zZWN1dGl2ZS1yZWxvYWRzXCJcbmV4cG9ydCBjb25zdCBNQVhfUkVMT0FEUyA9IDEwXG5leHBvcnQgY29uc3QgUkVMT0FEX0pJVFRFUl9NSU4gPSA1MDAwXG5leHBvcnQgY29uc3QgUkVMT0FEX0pJVFRFUl9NQVggPSAxMDAwMFxuZXhwb3J0IGNvbnN0IEZBSUxTQUZFX0pJVFRFUiA9IDMwMDAwXG5leHBvcnQgY29uc3QgUEhYX0VWRU5UX0NMQVNTRVMgPSBbXG4gIFwicGh4LWNsaWNrLWxvYWRpbmdcIiwgXCJwaHgtY2hhbmdlLWxvYWRpbmdcIiwgXCJwaHgtc3VibWl0LWxvYWRpbmdcIixcbiAgXCJwaHgta2V5ZG93bi1sb2FkaW5nXCIsIFwicGh4LWtleXVwLWxvYWRpbmdcIiwgXCJwaHgtYmx1ci1sb2FkaW5nXCIsIFwicGh4LWZvY3VzLWxvYWRpbmdcIlxuXVxuZXhwb3J0IGNvbnN0IFBIWF9DT01QT05FTlQgPSBcImRhdGEtcGh4LWNvbXBvbmVudFwiXG5leHBvcnQgY29uc3QgUEhYX0xJVkVfTElOSyA9IFwiZGF0YS1waHgtbGlua1wiXG5leHBvcnQgY29uc3QgUEhYX1RSQUNLX1NUQVRJQyA9IFwidHJhY2stc3RhdGljXCJcbmV4cG9ydCBjb25zdCBQSFhfTElOS19TVEFURSA9IFwiZGF0YS1waHgtbGluay1zdGF0ZVwiXG5leHBvcnQgY29uc3QgUEhYX1JFRiA9IFwiZGF0YS1waHgtcmVmXCJcbmV4cG9ydCBjb25zdCBQSFhfUkVGX1NSQyA9IFwiZGF0YS1waHgtcmVmLXNyY1wiXG5leHBvcnQgY29uc3QgUEhYX1RSQUNLX1VQTE9BRFMgPSBcInRyYWNrLXVwbG9hZHNcIlxuZXhwb3J0IGNvbnN0IFBIWF9VUExPQURfUkVGID0gXCJkYXRhLXBoeC11cGxvYWQtcmVmXCJcbmV4cG9ydCBjb25zdCBQSFhfUFJFRkxJR0hURURfUkVGUyA9IFwiZGF0YS1waHgtcHJlZmxpZ2h0ZWQtcmVmc1wiXG5leHBvcnQgY29uc3QgUEhYX0RPTkVfUkVGUyA9IFwiZGF0YS1waHgtZG9uZS1yZWZzXCJcbmV4cG9ydCBjb25zdCBQSFhfRFJPUF9UQVJHRVQgPSBcImRyb3AtdGFyZ2V0XCJcbmV4cG9ydCBjb25zdCBQSFhfQUNUSVZFX0VOVFJZX1JFRlMgPSBcImRhdGEtcGh4LWFjdGl2ZS1yZWZzXCJcbmV4cG9ydCBjb25zdCBQSFhfTElWRV9GSUxFX1VQREFURUQgPSBcInBoeDpsaXZlLWZpbGU6dXBkYXRlZFwiXG5leHBvcnQgY29uc3QgUEhYX1NLSVAgPSBcImRhdGEtcGh4LXNraXBcIlxuZXhwb3J0IGNvbnN0IFBIWF9QUlVORSA9IFwiZGF0YS1waHgtcHJ1bmVcIlxuZXhwb3J0IGNvbnN0IFBIWF9QQUdFX0xPQURJTkcgPSBcInBhZ2UtbG9hZGluZ1wiXG5leHBvcnQgY29uc3QgUEhYX0NPTk5FQ1RFRF9DTEFTUyA9IFwicGh4LWNvbm5lY3RlZFwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUyA9IFwicGh4LWxvYWRpbmdcIlxuZXhwb3J0IGNvbnN0IFBIWF9OT19GRUVEQkFDS19DTEFTUyA9IFwicGh4LW5vLWZlZWRiYWNrXCJcbmV4cG9ydCBjb25zdCBQSFhfRVJST1JfQ0xBU1MgPSBcInBoeC1lcnJvclwiXG5leHBvcnQgY29uc3QgUEhYX1BBUkVOVF9JRCA9IFwiZGF0YS1waHgtcGFyZW50LWlkXCJcbmV4cG9ydCBjb25zdCBQSFhfTUFJTiA9IFwiZGF0YS1waHgtbWFpblwiXG5leHBvcnQgY29uc3QgUEhYX1JPT1RfSUQgPSBcImRhdGEtcGh4LXJvb3QtaWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9UUklHR0VSX0FDVElPTiA9IFwidHJpZ2dlci1hY3Rpb25cIlxuZXhwb3J0IGNvbnN0IFBIWF9GRUVEQkFDS19GT1IgPSBcImZlZWRiYWNrLWZvclwiXG5leHBvcnQgY29uc3QgUEhYX0hBU19GT0NVU0VEID0gXCJwaHgtaGFzLWZvY3VzZWRcIlxuZXhwb3J0IGNvbnN0IEZPQ1VTQUJMRV9JTlBVVFMgPSBbXCJ0ZXh0XCIsIFwidGV4dGFyZWFcIiwgXCJudW1iZXJcIiwgXCJlbWFpbFwiLCBcInBhc3N3b3JkXCIsIFwic2VhcmNoXCIsIFwidGVsXCIsIFwidXJsXCIsIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiLCBcImNvbG9yXCIsIFwicmFuZ2VcIl1cbmV4cG9ydCBjb25zdCBDSEVDS0FCTEVfSU5QVVRTID0gW1wiY2hlY2tib3hcIiwgXCJyYWRpb1wiXVxuZXhwb3J0IGNvbnN0IFBIWF9IQVNfU1VCTUlUVEVEID0gXCJwaHgtaGFzLXN1Ym1pdHRlZFwiXG5leHBvcnQgY29uc3QgUEhYX1NFU1NJT04gPSBcImRhdGEtcGh4LXNlc3Npb25cIlxuZXhwb3J0IGNvbnN0IFBIWF9WSUVXX1NFTEVDVE9SID0gYFske1BIWF9TRVNTSU9OfV1gXG5leHBvcnQgY29uc3QgUEhYX1NUSUNLWSA9IFwiZGF0YS1waHgtc3RpY2t5XCJcbmV4cG9ydCBjb25zdCBQSFhfU1RBVElDID0gXCJkYXRhLXBoeC1zdGF0aWNcIlxuZXhwb3J0IGNvbnN0IFBIWF9SRUFET05MWSA9IFwiZGF0YS1waHgtcmVhZG9ubHlcIlxuZXhwb3J0IGNvbnN0IFBIWF9ESVNBQkxFRCA9IFwiZGF0YS1waHgtZGlzYWJsZWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9ESVNBQkxFX1dJVEggPSBcImRpc2FibGUtd2l0aFwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFID0gXCJkYXRhLXBoeC1kaXNhYmxlLXdpdGgtcmVzdG9yZVwiXG5leHBvcnQgY29uc3QgUEhYX0hPT0sgPSBcImhvb2tcIlxuZXhwb3J0IGNvbnN0IFBIWF9ERUJPVU5DRSA9IFwiZGVib3VuY2VcIlxuZXhwb3J0IGNvbnN0IFBIWF9USFJPVFRMRSA9IFwidGhyb3R0bGVcIlxuZXhwb3J0IGNvbnN0IFBIWF9VUERBVEUgPSBcInVwZGF0ZVwiXG5leHBvcnQgY29uc3QgUEhYX0tFWSA9IFwia2V5XCJcbmV4cG9ydCBjb25zdCBQSFhfUFJJVkFURSA9IFwicGh4UHJpdmF0ZVwiXG5leHBvcnQgY29uc3QgUEhYX0FVVE9fUkVDT1ZFUiA9IFwiYXV0by1yZWNvdmVyXCJcbmV4cG9ydCBjb25zdCBQSFhfTFZfREVCVUcgPSBcInBoeDpsaXZlLXNvY2tldDpkZWJ1Z1wiXG5leHBvcnQgY29uc3QgUEhYX0xWX1BST0ZJTEUgPSBcInBoeDpsaXZlLXNvY2tldDpwcm9maWxpbmdcIlxuZXhwb3J0IGNvbnN0IFBIWF9MVl9MQVRFTkNZX1NJTSA9IFwicGh4OmxpdmUtc29ja2V0OmxhdGVuY3ktc2ltXCJcbmV4cG9ydCBjb25zdCBQSFhfUFJPR1JFU1MgPSBcInByb2dyZXNzXCJcbmV4cG9ydCBjb25zdCBMT0FERVJfVElNRU9VVCA9IDFcbmV4cG9ydCBjb25zdCBCRUZPUkVfVU5MT0FEX0xPQURFUl9USU1FT1VUID0gMjAwXG5leHBvcnQgY29uc3QgQklORElOR19QUkVGSVggPSBcInBoeC1cIlxuZXhwb3J0IGNvbnN0IFBVU0hfVElNRU9VVCA9IDMwMDAwXG5leHBvcnQgY29uc3QgTElOS19IRUFERVIgPSBcIngtcmVxdWVzdGVkLXdpdGhcIlxuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1VSTF9IRUFERVIgPSBcIngtcmVzcG9uc2UtdXJsXCJcbmV4cG9ydCBjb25zdCBERUJPVU5DRV9UUklHR0VSID0gXCJkZWJvdW5jZS10cmlnZ2VyXCJcbmV4cG9ydCBjb25zdCBUSFJPVFRMRUQgPSBcInRocm90dGxlZFwiXG5leHBvcnQgY29uc3QgREVCT1VOQ0VfUFJFVl9LRVkgPSBcImRlYm91bmNlLXByZXYta2V5XCJcbmV4cG9ydCBjb25zdCBERUZBVUxUUyA9IHtcbiAgZGVib3VuY2U6IDMwMCxcbiAgdGhyb3R0bGU6IDMwMFxufVxuXG4vLyBSZW5kZXJlZFxuZXhwb3J0IGNvbnN0IERZTkFNSUNTID0gXCJkXCJcbmV4cG9ydCBjb25zdCBTVEFUSUMgPSBcInNcIlxuZXhwb3J0IGNvbnN0IENPTVBPTkVOVFMgPSBcImNcIlxuZXhwb3J0IGNvbnN0IEVWRU5UUyA9IFwiZVwiXG5leHBvcnQgY29uc3QgUkVQTFkgPSBcInJcIlxuZXhwb3J0IGNvbnN0IFRJVExFID0gXCJ0XCJcbmV4cG9ydCBjb25zdCBURU1QTEFURVMgPSBcInBcIlxuIiwgImltcG9ydCB7XG4gIGxvZ0Vycm9yXG59IGZyb20gXCIuL3V0aWxzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW50cnlVcGxvYWRlciB7XG4gIGNvbnN0cnVjdG9yKGVudHJ5LCBjaHVua1NpemUsIGxpdmVTb2NrZXQpe1xuICAgIHRoaXMubGl2ZVNvY2tldCA9IGxpdmVTb2NrZXRcbiAgICB0aGlzLmVudHJ5ID0gZW50cnlcbiAgICB0aGlzLm9mZnNldCA9IDBcbiAgICB0aGlzLmNodW5rU2l6ZSA9IGNodW5rU2l6ZVxuICAgIHRoaXMuY2h1bmtUaW1lciA9IG51bGxcbiAgICB0aGlzLnVwbG9hZENoYW5uZWwgPSBsaXZlU29ja2V0LmNoYW5uZWwoYGx2dToke2VudHJ5LnJlZn1gLCB7dG9rZW46IGVudHJ5Lm1ldGFkYXRhKCl9KVxuICB9XG5cbiAgZXJyb3IocmVhc29uKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jaHVua1RpbWVyKVxuICAgIHRoaXMudXBsb2FkQ2hhbm5lbC5sZWF2ZSgpXG4gICAgdGhpcy5lbnRyeS5lcnJvcihyZWFzb24pXG4gIH1cblxuICB1cGxvYWQoKXtcbiAgICB0aGlzLnVwbG9hZENoYW5uZWwub25FcnJvcihyZWFzb24gPT4gdGhpcy5lcnJvcihyZWFzb24pKVxuICAgIHRoaXMudXBsb2FkQ2hhbm5lbC5qb2luKClcbiAgICAgIC5yZWNlaXZlKFwib2tcIiwgX2RhdGEgPT4gdGhpcy5yZWFkTmV4dENodW5rKCkpXG4gICAgICAucmVjZWl2ZShcImVycm9yXCIsIHJlYXNvbiA9PiB0aGlzLmVycm9yKHJlYXNvbikpXG4gIH1cblxuICBpc0RvbmUoKXsgcmV0dXJuIHRoaXMub2Zmc2V0ID49IHRoaXMuZW50cnkuZmlsZS5zaXplIH1cblxuICByZWFkTmV4dENodW5rKCl7XG4gICAgbGV0IHJlYWRlciA9IG5ldyB3aW5kb3cuRmlsZVJlYWRlcigpXG4gICAgbGV0IGJsb2IgPSB0aGlzLmVudHJ5LmZpbGUuc2xpY2UodGhpcy5vZmZzZXQsIHRoaXMuY2h1bmtTaXplICsgdGhpcy5vZmZzZXQpXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICBpZihlLnRhcmdldC5lcnJvciA9PT0gbnVsbCl7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IGUudGFyZ2V0LnJlc3VsdC5ieXRlTGVuZ3RoXG4gICAgICAgIHRoaXMucHVzaENodW5rKGUudGFyZ2V0LnJlc3VsdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcihcIlJlYWQgZXJyb3I6IFwiICsgZS50YXJnZXQuZXJyb3IpXG4gICAgICB9XG4gICAgfVxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICB9XG5cbiAgcHVzaENodW5rKGNodW5rKXtcbiAgICBpZighdGhpcy51cGxvYWRDaGFubmVsLmlzSm9pbmVkKCkpeyByZXR1cm4gfVxuICAgIHRoaXMudXBsb2FkQ2hhbm5lbC5wdXNoKFwiY2h1bmtcIiwgY2h1bmspXG4gICAgICAucmVjZWl2ZShcIm9rXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5lbnRyeS5wcm9ncmVzcygodGhpcy5vZmZzZXQgLyB0aGlzLmVudHJ5LmZpbGUuc2l6ZSkgKiAxMDApXG4gICAgICAgIGlmKCF0aGlzLmlzRG9uZSgpKXtcbiAgICAgICAgICB0aGlzLmNodW5rVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVhZE5leHRDaHVuaygpLCB0aGlzLmxpdmVTb2NrZXQuZ2V0TGF0ZW5jeVNpbSgpIHx8IDApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBQSFhfVklFV19TRUxFQ1RPUlxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQgRW50cnlVcGxvYWRlciBmcm9tIFwiLi9lbnRyeV91cGxvYWRlclwiXG5cbmV4cG9ydCBsZXQgbG9nRXJyb3IgPSAobXNnLCBvYmopID0+IGNvbnNvbGUuZXJyb3IgJiYgY29uc29sZS5lcnJvcihtc2csIG9iailcblxuZXhwb3J0IGxldCBpc0NpZCA9IChjaWQpID0+IHtcbiAgbGV0IHR5cGUgPSB0eXBlb2YoY2lkKVxuICByZXR1cm4gdHlwZSA9PT0gXCJudW1iZXJcIiB8fCAodHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAvXigwfFsxLTldXFxkKikkLy50ZXN0KGNpZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REdXBsaWNhdGVJZHMoKXtcbiAgbGV0IGlkcyA9IG5ldyBTZXQoKVxuICBsZXQgZWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKltpZF1cIilcbiAgZm9yKGxldCBpID0gMCwgbGVuID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuICAgIGlmKGlkcy5oYXMoZWxlbXNbaV0uaWQpKXtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE11bHRpcGxlIElEcyBkZXRlY3RlZDogJHtlbGVtc1tpXS5pZH0uIEVuc3VyZSB1bmlxdWUgZWxlbWVudCBpZHMuYClcbiAgICB9IGVsc2Uge1xuICAgICAgaWRzLmFkZChlbGVtc1tpXS5pZClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGxldCBkZWJ1ZyA9ICh2aWV3LCBraW5kLCBtc2csIG9iaikgPT4ge1xuICBpZih2aWV3LmxpdmVTb2NrZXQuaXNEZWJ1Z0VuYWJsZWQoKSl7XG4gICAgY29uc29sZS5sb2coYCR7dmlldy5pZH0gJHtraW5kfTogJHttc2d9IC0gYCwgb2JqKVxuICB9XG59XG5cbi8vIHdyYXBzIHZhbHVlIGluIGNsb3N1cmUgb3IgcmV0dXJucyBjbG9zdXJlXG5leHBvcnQgbGV0IGNsb3N1cmUgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIgPyB2YWwgOiBmdW5jdGlvbiAoKXsgcmV0dXJuIHZhbCB9XG5cbmV4cG9ydCBsZXQgY2xvbmUgPSAob2JqKSA9PiB7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpIH1cblxuZXhwb3J0IGxldCBjbG9zZXN0UGh4QmluZGluZyA9IChlbCwgYmluZGluZywgYm9yZGVyRWwpID0+IHtcbiAgZG8ge1xuICAgIGlmKGVsLm1hdGNoZXMoYFske2JpbmRpbmd9XWApKXsgcmV0dXJuIGVsIH1cbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQgfHwgZWwucGFyZW50Tm9kZVxuICB9IHdoaWxlKGVsICE9PSBudWxsICYmIGVsLm5vZGVUeXBlID09PSAxICYmICEoKGJvcmRlckVsICYmIGJvcmRlckVsLmlzU2FtZU5vZGUoZWwpKSB8fCBlbC5tYXRjaGVzKFBIWF9WSUVXX1NFTEVDVE9SKSkpXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBsZXQgaXNPYmplY3QgPSAob2JqKSA9PiB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiAhKG9iaiBpbnN0YW5jZW9mIEFycmF5KVxufVxuXG5leHBvcnQgbGV0IGlzRXF1YWxPYmogPSAob2JqMSwgb2JqMikgPT4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpXG5cbmV4cG9ydCBsZXQgaXNFbXB0eSA9IChvYmopID0+IHtcbiAgZm9yKGxldCB4IGluIG9iail7IHJldHVybiBmYWxzZSB9XG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBsZXQgbWF5YmUgPSAoZWwsIGNhbGxiYWNrKSA9PiBlbCAmJiBjYWxsYmFjayhlbClcblxuZXhwb3J0IGxldCBjaGFubmVsVXBsb2FkZXIgPSBmdW5jdGlvbiAoZW50cmllcywgb25FcnJvciwgcmVzcCwgbGl2ZVNvY2tldCl7XG4gIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgbGV0IGVudHJ5VXBsb2FkZXIgPSBuZXcgRW50cnlVcGxvYWRlcihlbnRyeSwgcmVzcC5jb25maWcuY2h1bmtfc2l6ZSwgbGl2ZVNvY2tldClcbiAgICBlbnRyeVVwbG9hZGVyLnVwbG9hZCgpXG4gIH0pXG59XG4iLCAibGV0IEJyb3dzZXIgPSB7XG4gIGNhblB1c2hTdGF0ZSgpeyByZXR1cm4gKHR5cGVvZiAoaGlzdG9yeS5wdXNoU3RhdGUpICE9PSBcInVuZGVmaW5lZFwiKSB9LFxuXG4gIGRyb3BMb2NhbChsb2NhbFN0b3JhZ2UsIG5hbWVzcGFjZSwgc3Via2V5KXtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5sb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSkpXG4gIH0sXG5cbiAgdXBkYXRlTG9jYWwobG9jYWxTdG9yYWdlLCBuYW1lc3BhY2UsIHN1YmtleSwgaW5pdGlhbCwgZnVuYyl7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmdldExvY2FsKGxvY2FsU3RvcmFnZSwgbmFtZXNwYWNlLCBzdWJrZXkpXG4gICAgbGV0IGtleSA9IHRoaXMubG9jYWxLZXkobmFtZXNwYWNlLCBzdWJrZXkpXG4gICAgbGV0IG5ld1ZhbCA9IGN1cnJlbnQgPT09IG51bGwgPyBpbml0aWFsIDogZnVuYyhjdXJyZW50KVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkobmV3VmFsKSlcbiAgICByZXR1cm4gbmV3VmFsXG4gIH0sXG5cbiAgZ2V0TG9jYWwobG9jYWxTdG9yYWdlLCBuYW1lc3BhY2UsIHN1YmtleSl7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSkpKVxuICB9LFxuXG4gIHVwZGF0ZUN1cnJlbnRTdGF0ZShjYWxsYmFjayl7XG4gICAgaWYoIXRoaXMuY2FuUHVzaFN0YXRlKCkpeyByZXR1cm4gfVxuICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKGNhbGxiYWNrKGhpc3Rvcnkuc3RhdGUgfHwge30pLCBcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgfSxcblxuICBwdXNoU3RhdGUoa2luZCwgbWV0YSwgdG8pe1xuICAgIGlmKHRoaXMuY2FuUHVzaFN0YXRlKCkpe1xuICAgICAgaWYodG8gIT09IHdpbmRvdy5sb2NhdGlvbi5ocmVmKXtcbiAgICAgICAgaWYobWV0YS50eXBlID09IFwicmVkaXJlY3RcIiAmJiBtZXRhLnNjcm9sbCl7XG4gICAgICAgICAgLy8gSWYgd2UncmUgcmVkaXJlY3Rpbmcgc3RvcmUgdGhlIGN1cnJlbnQgc2Nyb2xsWSBmb3IgdGhlIGN1cnJlbnQgaGlzdG9yeSBzdGF0ZS5cbiAgICAgICAgICBsZXQgY3VycmVudFN0YXRlID0gaGlzdG9yeS5zdGF0ZSB8fCB7fVxuICAgICAgICAgIGN1cnJlbnRTdGF0ZS5zY3JvbGwgPSBtZXRhLnNjcm9sbFxuICAgICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKGN1cnJlbnRTdGF0ZSwgXCJcIiwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgbWV0YS5zY3JvbGwgLy8gT25seSBzdG9yZSB0aGUgc2Nyb2xsIGluIHRoZSByZWRpcmVjdCBjYXNlLlxuICAgICAgICBoaXN0b3J5W2tpbmQgKyBcIlN0YXRlXCJdKG1ldGEsIFwiXCIsIHRvIHx8IG51bGwpIC8vIElFIHdpbGwgY29lcmNlIHVuZGVmaW5lZCB0byBzdHJpbmdcbiAgICAgICAgbGV0IGhhc2hFbCA9IHRoaXMuZ2V0SGFzaFRhcmdldEVsKHdpbmRvdy5sb2NhdGlvbi5oYXNoKVxuXG4gICAgICAgIGlmKGhhc2hFbCl7XG4gICAgICAgICAgaGFzaEVsLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgfSBlbHNlIGlmKG1ldGEudHlwZSA9PT0gXCJyZWRpcmVjdFwiKXtcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWRpcmVjdCh0bylcbiAgICB9XG4gIH0sXG5cbiAgc2V0Q29va2llKG5hbWUsIHZhbHVlKXtcbiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT0ke3ZhbHVlfWBcbiAgfSxcblxuICBnZXRDb29raWUobmFtZSl7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5yZXBsYWNlKG5ldyBSZWdFeHAoYCg/Oig/Ol58Lio7XFxzKikke25hbWV9XFxzKlxcPVxccyooW147XSopLiokKXxeLiokYCksIFwiJDFcIilcbiAgfSxcblxuICByZWRpcmVjdCh0b1VSTCwgZmxhc2gpe1xuICAgIGlmKGZsYXNoKXsgQnJvd3Nlci5zZXRDb29raWUoXCJfX3Bob2VuaXhfZmxhc2hfX1wiLCBmbGFzaCArIFwiOyBtYXgtYWdlPTYwMDAwOyBwYXRoPS9cIikgfVxuICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRvVVJMXG4gIH0sXG5cbiAgbG9jYWxLZXkobmFtZXNwYWNlLCBzdWJrZXkpeyByZXR1cm4gYCR7bmFtZXNwYWNlfS0ke3N1YmtleX1gIH0sXG5cbiAgZ2V0SGFzaFRhcmdldEVsKG1heWJlSGFzaCl7XG4gICAgbGV0IGhhc2ggPSBtYXliZUhhc2gudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSlcbiAgICBpZihoYXNoID09PSBcIlwiKXsgcmV0dXJuIH1cbiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCkgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgYVtuYW1lPVwiJHtoYXNofVwiXWApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnJvd3NlclxuIiwgImltcG9ydCB7XG4gIENIRUNLQUJMRV9JTlBVVFMsXG4gIERFQk9VTkNFX1BSRVZfS0VZLFxuICBERUJPVU5DRV9UUklHR0VSLFxuICBGT0NVU0FCTEVfSU5QVVRTLFxuICBQSFhfQ09NUE9ORU5ULFxuICBQSFhfRVZFTlRfQ0xBU1NFUyxcbiAgUEhYX0hBU19GT0NVU0VELFxuICBQSFhfSEFTX1NVQk1JVFRFRCxcbiAgUEhYX01BSU4sXG4gIFBIWF9OT19GRUVEQkFDS19DTEFTUyxcbiAgUEhYX1BBUkVOVF9JRCxcbiAgUEhYX1BSSVZBVEUsXG4gIFBIWF9SRUYsXG4gIFBIWF9SRUZfU1JDLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1NFU1NJT04sXG4gIFBIWF9TVEFUSUMsXG4gIFBIWF9VUExPQURfUkVGLFxuICBQSFhfVklFV19TRUxFQ1RPUixcbiAgUEhYX1NUSUNLWSxcbiAgVEhST1RUTEVEXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGxvZ0Vycm9yXG59IGZyb20gXCIuL3V0aWxzXCJcblxubGV0IERPTSA9IHtcbiAgYnlJZChpZCl7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgfHwgbG9nRXJyb3IoYG5vIGlkIGZvdW5kIGZvciAke2lkfWApIH0sXG5cbiAgcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSl7XG4gICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpXG4gICAgaWYoZWwuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCl7IGVsLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpIH1cbiAgfSxcblxuICBhbGwobm9kZSwgcXVlcnksIGNhbGxiYWNrKXtcbiAgICBpZighbm9kZSl7IHJldHVybiBbXSB9XG4gICAgbGV0IGFycmF5ID0gQXJyYXkuZnJvbShub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpKVxuICAgIHJldHVybiBjYWxsYmFjayA/IGFycmF5LmZvckVhY2goY2FsbGJhY2spIDogYXJyYXlcbiAgfSxcblxuICBjaGlsZE5vZGVMZW5ndGgoaHRtbCl7XG4gICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpXG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFxuICAgIHJldHVybiB0ZW1wbGF0ZS5jb250ZW50LmNoaWxkRWxlbWVudENvdW50XG4gIH0sXG5cbiAgaXNVcGxvYWRJbnB1dChlbCl7IHJldHVybiBlbC50eXBlID09PSBcImZpbGVcIiAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpICE9PSBudWxsIH0sXG5cbiAgZmluZFVwbG9hZElucHV0cyhub2RlKXsgcmV0dXJuIHRoaXMuYWxsKG5vZGUsIGBpbnB1dFt0eXBlPVwiZmlsZVwiXVske1BIWF9VUExPQURfUkVGfV1gKSB9LFxuXG4gIGZpbmRDb21wb25lbnROb2RlTGlzdChub2RlLCBjaWQpe1xuICAgIHJldHVybiB0aGlzLmZpbHRlcldpdGhpblNhbWVMaXZlVmlldyh0aGlzLmFsbChub2RlLCBgWyR7UEhYX0NPTVBPTkVOVH09XCIke2NpZH1cIl1gKSwgbm9kZSlcbiAgfSxcblxuICBpc1BoeERlc3Ryb3llZChub2RlKXtcbiAgICByZXR1cm4gbm9kZS5pZCAmJiBET00ucHJpdmF0ZShub2RlLCBcImRlc3Ryb3llZFwiKSA/IHRydWUgOiBmYWxzZVxuICB9LFxuXG4gIG1hcmtQaHhDaGlsZERlc3Ryb3llZChlbCl7XG4gICAgaWYodGhpcy5pc1BoeENoaWxkKGVsKSl7IGVsLnNldEF0dHJpYnV0ZShQSFhfU0VTU0lPTiwgXCJcIikgfVxuICAgIHRoaXMucHV0UHJpdmF0ZShlbCwgXCJkZXN0cm95ZWRcIiwgdHJ1ZSlcbiAgfSxcblxuICBmaW5kUGh4Q2hpbGRyZW5JbkZyYWdtZW50KGh0bWwsIHBhcmVudElkKXtcbiAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIilcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sXG4gICAgcmV0dXJuIHRoaXMuZmluZFBoeENoaWxkcmVuKHRlbXBsYXRlLmNvbnRlbnQsIHBhcmVudElkKVxuICB9LFxuXG4gIGlzSWdub3JlZChlbCwgcGh4VXBkYXRlKXtcbiAgICByZXR1cm4gKGVsLmdldEF0dHJpYnV0ZShwaHhVcGRhdGUpIHx8IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcGh4LXVwZGF0ZVwiKSkgPT09IFwiaWdub3JlXCJcbiAgfSxcblxuICBpc1BoeFVwZGF0ZShlbCwgcGh4VXBkYXRlLCB1cGRhdGVUeXBlcyl7XG4gICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSAmJiB1cGRhdGVUeXBlcy5pbmRleE9mKGVsLmdldEF0dHJpYnV0ZShwaHhVcGRhdGUpKSA+PSAwXG4gIH0sXG5cbiAgZmluZFBoeFN0aWNreShlbCl7IHJldHVybiB0aGlzLmFsbChlbCwgYFske1BIWF9TVElDS1l9XWApIH0sXG5cbiAgZmluZFBoeENoaWxkcmVuKGVsLCBwYXJlbnRJZCl7XG4gICAgcmV0dXJuIHRoaXMuYWxsKGVsLCBgJHtQSFhfVklFV19TRUxFQ1RPUn1bJHtQSFhfUEFSRU5UX0lEfT1cIiR7cGFyZW50SWR9XCJdYClcbiAgfSxcblxuICBmaW5kUGFyZW50Q0lEcyhub2RlLCBjaWRzKXtcbiAgICBsZXQgaW5pdGlhbCA9IG5ldyBTZXQoY2lkcylcbiAgICByZXR1cm4gY2lkcy5yZWR1Y2UoKGFjYywgY2lkKSA9PiB7XG4gICAgICBsZXQgc2VsZWN0b3IgPSBgWyR7UEhYX0NPTVBPTkVOVH09XCIke2NpZH1cIl0gWyR7UEhYX0NPTVBPTkVOVH1dYFxuXG4gICAgICB0aGlzLmZpbHRlcldpdGhpblNhbWVMaXZlVmlldyh0aGlzLmFsbChub2RlLCBzZWxlY3RvciksIG5vZGUpXG4gICAgICAgIC5tYXAoZWwgPT4gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpKSlcbiAgICAgICAgLmZvckVhY2goY2hpbGRDSUQgPT4gYWNjLmRlbGV0ZShjaGlsZENJRCkpXG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBpbml0aWFsKVxuICB9LFxuXG4gIGZpbHRlcldpdGhpblNhbWVMaXZlVmlldyhub2RlcywgcGFyZW50KXtcbiAgICBpZihwYXJlbnQucXVlcnlTZWxlY3RvcihQSFhfVklFV19TRUxFQ1RPUikpe1xuICAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcihlbCA9PiB0aGlzLndpdGhpblNhbWVMaXZlVmlldyhlbCwgcGFyZW50KSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGVzXG4gICAgfVxuICB9LFxuXG4gIHdpdGhpblNhbWVMaXZlVmlldyhub2RlLCBwYXJlbnQpe1xuICAgIHdoaWxlKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpe1xuICAgICAgaWYobm9kZS5pc1NhbWVOb2RlKHBhcmVudCkpeyByZXR1cm4gdHJ1ZSB9XG4gICAgICBpZihub2RlLmdldEF0dHJpYnV0ZShQSFhfU0VTU0lPTikgIT09IG51bGwpeyByZXR1cm4gZmFsc2UgfVxuICAgIH1cbiAgfSxcblxuICBwcml2YXRlKGVsLCBrZXkpeyByZXR1cm4gZWxbUEhYX1BSSVZBVEVdICYmIGVsW1BIWF9QUklWQVRFXVtrZXldIH0sXG5cbiAgZGVsZXRlUHJpdmF0ZShlbCwga2V5KXsgZWxbUEhYX1BSSVZBVEVdICYmIGRlbGV0ZSAoZWxbUEhYX1BSSVZBVEVdW2tleV0pIH0sXG5cbiAgcHV0UHJpdmF0ZShlbCwga2V5LCB2YWx1ZSl7XG4gICAgaWYoIWVsW1BIWF9QUklWQVRFXSl7IGVsW1BIWF9QUklWQVRFXSA9IHt9IH1cbiAgICBlbFtQSFhfUFJJVkFURV1ba2V5XSA9IHZhbHVlXG4gIH0sXG5cbiAgdXBkYXRlUHJpdmF0ZShlbCwga2V5LCBkZWZhdWx0VmFsLCB1cGRhdGVGdW5jKXtcbiAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLnByaXZhdGUoZWwsIGtleSlcbiAgICBpZihleGlzdGluZyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgIHRoaXMucHV0UHJpdmF0ZShlbCwga2V5LCB1cGRhdGVGdW5jKGRlZmF1bHRWYWwpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1dFByaXZhdGUoZWwsIGtleSwgdXBkYXRlRnVuYyhleGlzdGluZykpXG4gICAgfVxuICB9LFxuXG4gIGNvcHlQcml2YXRlcyh0YXJnZXQsIHNvdXJjZSl7XG4gICAgaWYoc291cmNlW1BIWF9QUklWQVRFXSl7XG4gICAgICB0YXJnZXRbUEhYX1BSSVZBVEVdID0gc291cmNlW1BIWF9QUklWQVRFXVxuICAgIH1cbiAgfSxcblxuICBwdXRUaXRsZShzdHIpe1xuICAgIGxldCB0aXRsZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpXG4gICAgbGV0IHtwcmVmaXgsIHN1ZmZpeH0gPSB0aXRsZUVsLmRhdGFzZXRcbiAgICBkb2N1bWVudC50aXRsZSA9IGAke3ByZWZpeCB8fCBcIlwifSR7c3RyfSR7c3VmZml4IHx8IFwiXCJ9YFxuICB9LFxuXG4gIGRlYm91bmNlKGVsLCBldmVudCwgcGh4RGVib3VuY2UsIGRlZmF1bHREZWJvdW5jZSwgcGh4VGhyb3R0bGUsIGRlZmF1bHRUaHJvdHRsZSwgYXN5bmNGaWx0ZXIsIGNhbGxiYWNrKXtcbiAgICBsZXQgZGVib3VuY2UgPSBlbC5nZXRBdHRyaWJ1dGUocGh4RGVib3VuY2UpXG4gICAgbGV0IHRocm90dGxlID0gZWwuZ2V0QXR0cmlidXRlKHBoeFRocm90dGxlKVxuICAgIGlmKGRlYm91bmNlID09PSBcIlwiKXsgZGVib3VuY2UgPSBkZWZhdWx0RGVib3VuY2UgfVxuICAgIGlmKHRocm90dGxlID09PSBcIlwiKXsgdGhyb3R0bGUgPSBkZWZhdWx0VGhyb3R0bGUgfVxuICAgIGxldCB2YWx1ZSA9IGRlYm91bmNlIHx8IHRocm90dGxlXG4gICAgc3dpdGNoKHZhbHVlKXtcbiAgICAgIGNhc2UgbnVsbDogcmV0dXJuIGNhbGxiYWNrKClcblxuICAgICAgY2FzZSBcImJsdXJcIjpcbiAgICAgICAgaWYodGhpcy5vbmNlKGVsLCBcImRlYm91bmNlLWJsdXJcIikpe1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IGNhbGxiYWNrKCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxldCB0aW1lb3V0ID0gcGFyc2VJbnQodmFsdWUpXG4gICAgICAgIGxldCB0cmlnZ2VyID0gKCkgPT4gdGhyb3R0bGUgPyB0aGlzLmRlbGV0ZVByaXZhdGUoZWwsIFRIUk9UVExFRCkgOiBjYWxsYmFjaygpXG4gICAgICAgIGxldCBjdXJyZW50Q3ljbGUgPSB0aGlzLmluY0N5Y2xlKGVsLCBERUJPVU5DRV9UUklHR0VSLCB0cmlnZ2VyKVxuICAgICAgICBpZihpc05hTih0aW1lb3V0KSl7IHJldHVybiBsb2dFcnJvcihgaW52YWxpZCB0aHJvdHRsZS9kZWJvdW5jZSB2YWx1ZTogJHt2YWx1ZX1gKSB9XG4gICAgICAgIGlmKHRocm90dGxlKXtcbiAgICAgICAgICBsZXQgbmV3S2V5RG93biA9IGZhbHNlXG4gICAgICAgICAgaWYoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpe1xuICAgICAgICAgICAgbGV0IHByZXZLZXkgPSB0aGlzLnByaXZhdGUoZWwsIERFQk9VTkNFX1BSRVZfS0VZKVxuICAgICAgICAgICAgdGhpcy5wdXRQcml2YXRlKGVsLCBERUJPVU5DRV9QUkVWX0tFWSwgZXZlbnQua2V5KVxuICAgICAgICAgICAgbmV3S2V5RG93biA9IHByZXZLZXkgIT09IGV2ZW50LmtleVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFuZXdLZXlEb3duICYmIHRoaXMucHJpdmF0ZShlbCwgVEhST1RUTEVEKSl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgdGhpcy5wdXRQcml2YXRlKGVsLCBUSFJPVFRMRUQsIHRydWUpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYoYXN5bmNGaWx0ZXIoKSl7IHRoaXMudHJpZ2dlckN5Y2xlKGVsLCBERUJPVU5DRV9UUklHR0VSKSB9XG4gICAgICAgICAgICB9LCB0aW1lb3V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmKGFzeW5jRmlsdGVyKCkpeyB0aGlzLnRyaWdnZXJDeWNsZShlbCwgREVCT1VOQ0VfVFJJR0dFUiwgY3VycmVudEN5Y2xlKSB9XG4gICAgICAgICAgfSwgdGltZW91dClcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmb3JtID0gZWwuZm9ybVxuICAgICAgICBpZihmb3JtICYmIHRoaXMub25jZShmb3JtLCBcImJpbmQtZGVib3VuY2VcIikpe1xuICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKChuZXcgRm9ybURhdGEoZm9ybSkpLmVudHJpZXMoKSwgKFtuYW1lXSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgaW5wdXQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPVwiJHtuYW1lfVwiXWApXG4gICAgICAgICAgICAgIHRoaXMuaW5jQ3ljbGUoaW5wdXQsIERFQk9VTkNFX1RSSUdHRVIpXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlUHJpdmF0ZShpbnB1dCwgVEhST1RUTEVEKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMub25jZShlbCwgXCJiaW5kLWRlYm91bmNlXCIpKXtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLnRyaWdnZXJDeWNsZShlbCwgREVCT1VOQ0VfVFJJR0dFUikpXG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdHJpZ2dlckN5Y2xlKGVsLCBrZXksIGN1cnJlbnRDeWNsZSl7XG4gICAgbGV0IFtjeWNsZSwgdHJpZ2dlcl0gPSB0aGlzLnByaXZhdGUoZWwsIGtleSlcbiAgICBpZighY3VycmVudEN5Y2xlKXsgY3VycmVudEN5Y2xlID0gY3ljbGUgfVxuICAgIGlmKGN1cnJlbnRDeWNsZSA9PT0gY3ljbGUpe1xuICAgICAgdGhpcy5pbmNDeWNsZShlbCwga2V5KVxuICAgICAgdHJpZ2dlcigpXG4gICAgfVxuICB9LFxuXG4gIG9uY2UoZWwsIGtleSl7XG4gICAgaWYodGhpcy5wcml2YXRlKGVsLCBrZXkpID09PSB0cnVlKXsgcmV0dXJuIGZhbHNlIH1cbiAgICB0aGlzLnB1dFByaXZhdGUoZWwsIGtleSwgdHJ1ZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGluY0N5Y2xlKGVsLCBrZXksIHRyaWdnZXIgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgbGV0IFtjdXJyZW50Q3ljbGVdID0gdGhpcy5wcml2YXRlKGVsLCBrZXkpIHx8IFswLCB0cmlnZ2VyXVxuICAgIGN1cnJlbnRDeWNsZSsrXG4gICAgdGhpcy5wdXRQcml2YXRlKGVsLCBrZXksIFtjdXJyZW50Q3ljbGUsIHRyaWdnZXJdKVxuICAgIHJldHVybiBjdXJyZW50Q3ljbGVcbiAgfSxcblxuICBkaXNjYXJkRXJyb3IoY29udGFpbmVyLCBlbCwgcGh4RmVlZGJhY2tGb3Ipe1xuICAgIGxldCBmaWVsZCA9IGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUocGh4RmVlZGJhY2tGb3IpXG4gICAgLy8gVE9ETzogUmVtb3ZlIGlkIGxvb2t1cCBhZnRlciB3ZSB1cGRhdGUgUGhvZW5peCB0byB1c2UgaW5wdXRfbmFtZSBpbnN0ZWFkIG9mIGlucHV0X2lkXG4gICAgbGV0IGlucHV0ID0gZmllbGQgJiYgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7ZmllbGR9XCJdLCBbbmFtZT1cIiR7ZmllbGR9XCJdYClcbiAgICBpZighaW5wdXQpeyByZXR1cm4gfVxuXG4gICAgaWYoISh0aGlzLnByaXZhdGUoaW5wdXQsIFBIWF9IQVNfRk9DVVNFRCkgfHwgdGhpcy5wcml2YXRlKGlucHV0LmZvcm0sIFBIWF9IQVNfU1VCTUlUVEVEKSkpe1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChQSFhfTk9fRkVFREJBQ0tfQ0xBU1MpXG4gICAgfVxuICB9LFxuXG4gIHNob3dFcnJvcihpbnB1dEVsLCBwaHhGZWVkYmFja0Zvcil7XG4gICAgaWYoaW5wdXRFbC5pZCB8fCBpbnB1dEVsLm5hbWUpe1xuICAgICAgdGhpcy5hbGwoaW5wdXRFbC5mb3JtLCBgWyR7cGh4RmVlZGJhY2tGb3J9PVwiJHtpbnB1dEVsLmlkfVwiXSwgWyR7cGh4RmVlZGJhY2tGb3J9PVwiJHtpbnB1dEVsLm5hbWV9XCJdYCwgKGVsKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoZWwsIFBIWF9OT19GRUVEQkFDS19DTEFTUylcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGlzUGh4Q2hpbGQobm9kZSl7XG4gICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKFBIWF9QQVJFTlRfSUQpXG4gIH0sXG5cbiAgaXNQaHhTdGlja3kobm9kZSl7XG4gICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKFBIWF9TVElDS1kpICE9PSBudWxsXG4gIH0sXG5cbiAgZmlyc3RQaHhDaGlsZChlbCl7XG4gICAgcmV0dXJuIHRoaXMuaXNQaHhDaGlsZChlbCkgPyBlbCA6IHRoaXMuYWxsKGVsLCBgWyR7UEhYX1BBUkVOVF9JRH1dYClbMF1cbiAgfSxcblxuICBkaXNwYXRjaEV2ZW50KHRhcmdldCwgbmFtZSwgb3B0cyA9IHt9KXtcbiAgICBsZXQgYnViYmxlcyA9IG9wdHMuYnViYmxlcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0cy5idWJibGVzXG4gICAgbGV0IGV2ZW50T3B0cyA9IHtidWJibGVzOiBidWJibGVzLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG9wdHMuZGV0YWlsIHx8IHt9fVxuICAgIGxldCBldmVudCA9IG5hbWUgPT09IFwiY2xpY2tcIiA/IG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIiwgZXZlbnRPcHRzKSA6IG5ldyBDdXN0b21FdmVudChuYW1lLCBldmVudE9wdHMpXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpXG4gIH0sXG5cbiAgY2xvbmVOb2RlKG5vZGUsIGh0bWwpe1xuICAgIGlmKHR5cGVvZiAoaHRtbCkgPT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgcmV0dXJuIG5vZGUuY2xvbmVOb2RlKHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjbG9uZWQgPSBub2RlLmNsb25lTm9kZShmYWxzZSlcbiAgICAgIGNsb25lZC5pbm5lckhUTUwgPSBodG1sXG4gICAgICByZXR1cm4gY2xvbmVkXG4gICAgfVxuICB9LFxuXG4gIG1lcmdlQXR0cnModGFyZ2V0LCBzb3VyY2UsIG9wdHMgPSB7fSl7XG4gICAgbGV0IGV4Y2x1ZGUgPSBvcHRzLmV4Y2x1ZGUgfHwgW11cbiAgICBsZXQgaXNJZ25vcmVkID0gb3B0cy5pc0lnbm9yZWRcbiAgICBsZXQgc291cmNlQXR0cnMgPSBzb3VyY2UuYXR0cmlidXRlc1xuICAgIGZvcihsZXQgaSA9IHNvdXJjZUF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcbiAgICAgIGxldCBuYW1lID0gc291cmNlQXR0cnNbaV0ubmFtZVxuICAgICAgaWYoZXhjbHVkZS5pbmRleE9mKG5hbWUpIDwgMCl7IHRhcmdldC5zZXRBdHRyaWJ1dGUobmFtZSwgc291cmNlLmdldEF0dHJpYnV0ZShuYW1lKSkgfVxuICAgIH1cblxuICAgIGxldCB0YXJnZXRBdHRycyA9IHRhcmdldC5hdHRyaWJ1dGVzXG4gICAgZm9yKGxldCBpID0gdGFyZ2V0QXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgbGV0IG5hbWUgPSB0YXJnZXRBdHRyc1tpXS5uYW1lXG4gICAgICBpZihpc0lnbm9yZWQpe1xuICAgICAgICBpZihuYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLVwiKSAmJiAhc291cmNlLmhhc0F0dHJpYnV0ZShuYW1lKSl7IHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUobmFtZSkgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYoIXNvdXJjZS5oYXNBdHRyaWJ1dGUobmFtZSkpeyB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKG5hbWUpIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWVyZ2VGb2N1c2VkSW5wdXQodGFyZ2V0LCBzb3VyY2Upe1xuICAgIC8vIHNraXAgc2VsZWN0cyBiZWNhdXNlIEZGIHdpbGwgcmVzZXQgaGlnaGxpZ2h0ZWQgaW5kZXggZm9yIGFueSBzZXRBdHRyaWJ1dGVcbiAgICBpZighKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSl7IERPTS5tZXJnZUF0dHJzKHRhcmdldCwgc291cmNlLCB7ZXhjbHVkZTogW1widmFsdWVcIl19KSB9XG4gICAgaWYoc291cmNlLnJlYWRPbmx5KXtcbiAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKFwicmVhZG9ubHlcIilcbiAgICB9XG4gIH0sXG5cbiAgaGFzU2VsZWN0aW9uUmFuZ2UoZWwpe1xuICAgIHJldHVybiBlbC5zZXRTZWxlY3Rpb25SYW5nZSAmJiAoZWwudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgZWwudHlwZSA9PT0gXCJ0ZXh0YXJlYVwiKVxuICB9LFxuXG4gIHJlc3RvcmVGb2N1cyhmb2N1c2VkLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKXtcbiAgICBpZighRE9NLmlzVGV4dHVhbElucHV0KGZvY3VzZWQpKXsgcmV0dXJuIH1cbiAgICBsZXQgd2FzRm9jdXNlZCA9IGZvY3VzZWQubWF0Y2hlcyhcIjpmb2N1c1wiKVxuICAgIGlmKGZvY3VzZWQucmVhZE9ubHkpeyBmb2N1c2VkLmJsdXIoKSB9XG4gICAgaWYoIXdhc0ZvY3VzZWQpeyBmb2N1c2VkLmZvY3VzKCkgfVxuICAgIGlmKHRoaXMuaGFzU2VsZWN0aW9uUmFuZ2UoZm9jdXNlZCkpe1xuICAgICAgZm9jdXNlZC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKVxuICAgIH1cbiAgfSxcblxuICBpc0Zvcm1JbnB1dChlbCl7IHJldHVybiAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2kudGVzdChlbC50YWdOYW1lKSAmJiBlbC50eXBlICE9PSBcImJ1dHRvblwiIH0sXG5cbiAgc3luY0F0dHJzVG9Qcm9wcyhlbCl7XG4gICAgaWYoZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIENIRUNLQUJMRV9JTlBVVFMuaW5kZXhPZihlbC50eXBlLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDApe1xuICAgICAgZWwuY2hlY2tlZCA9IGVsLmdldEF0dHJpYnV0ZShcImNoZWNrZWRcIikgIT09IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgaXNUZXh0dWFsSW5wdXQoZWwpeyByZXR1cm4gRk9DVVNBQkxFX0lOUFVUUy5pbmRleE9mKGVsLnR5cGUpID49IDAgfSxcblxuICBpc05vd1RyaWdnZXJGb3JtRXh0ZXJuYWwoZWwsIHBoeFRyaWdnZXJFeHRlcm5hbCl7XG4gICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUocGh4VHJpZ2dlckV4dGVybmFsKSAhPT0gbnVsbFxuICB9LFxuXG4gIHN5bmNQZW5kaW5nUmVmKGZyb21FbCwgdG9FbCwgZGlzYWJsZVdpdGgpe1xuICAgIGxldCByZWYgPSBmcm9tRWwuZ2V0QXR0cmlidXRlKFBIWF9SRUYpXG4gICAgaWYocmVmID09PSBudWxsKXsgcmV0dXJuIHRydWUgfVxuICAgIGxldCByZWZTcmMgPSBmcm9tRWwuZ2V0QXR0cmlidXRlKFBIWF9SRUZfU1JDKVxuXG4gICAgaWYoRE9NLmlzRm9ybUlucHV0KGZyb21FbCkgfHwgZnJvbUVsLmdldEF0dHJpYnV0ZShkaXNhYmxlV2l0aCkgIT09IG51bGwpe1xuICAgICAgaWYoRE9NLmlzVXBsb2FkSW5wdXQoZnJvbUVsKSl7IERPTS5tZXJnZUF0dHJzKGZyb21FbCwgdG9FbCwge2lzSWdub3JlZDogdHJ1ZX0pIH1cbiAgICAgIERPTS5wdXRQcml2YXRlKGZyb21FbCwgUEhYX1JFRiwgdG9FbClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICBQSFhfRVZFTlRfQ0xBU1NFUy5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgIGZyb21FbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSAmJiB0b0VsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKVxuICAgICAgfSlcbiAgICAgIHRvRWwuc2V0QXR0cmlidXRlKFBIWF9SRUYsIHJlZilcbiAgICAgIHRvRWwuc2V0QXR0cmlidXRlKFBIWF9SRUZfU1JDLCByZWZTcmMpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjbGVhbkNoaWxkTm9kZXMoY29udGFpbmVyLCBwaHhVcGRhdGUpe1xuICAgIGlmKERPTS5pc1BoeFVwZGF0ZShjb250YWluZXIsIHBoeFVwZGF0ZSwgW1wiYXBwZW5kXCIsIFwicHJlcGVuZFwiXSkpe1xuICAgICAgbGV0IHRvUmVtb3ZlID0gW11cbiAgICAgIGNvbnRhaW5lci5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGROb2RlID0+IHtcbiAgICAgICAgaWYoIWNoaWxkTm9kZS5pZCl7XG4gICAgICAgICAgLy8gU2tpcCB3YXJuaW5nIGlmIGl0J3MgYW4gZW1wdHkgdGV4dCBub2RlIChlLmcuIGEgbmV3LWxpbmUpXG4gICAgICAgICAgbGV0IGlzRW1wdHlUZXh0Tm9kZSA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgJiYgY2hpbGROb2RlLm5vZGVWYWx1ZS50cmltKCkgPT09IFwiXCJcbiAgICAgICAgICBpZighaXNFbXB0eVRleHROb2RlKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwib25seSBIVE1MIGVsZW1lbnQgdGFncyB3aXRoIGFuIGlkIGFyZSBhbGxvd2VkIGluc2lkZSBjb250YWluZXJzIHdpdGggcGh4LXVwZGF0ZS5cXG5cXG5cIiArXG4gICAgICAgICAgICAgIGByZW1vdmluZyBpbGxlZ2FsIG5vZGU6IFwiJHsoY2hpbGROb2RlLm91dGVySFRNTCB8fCBjaGlsZE5vZGUubm9kZVZhbHVlKS50cmltKCl9XCJcXG5cXG5gKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0b1JlbW92ZS5wdXNoKGNoaWxkTm9kZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRvUmVtb3ZlLmZvckVhY2goY2hpbGROb2RlID0+IGNoaWxkTm9kZS5yZW1vdmUoKSlcbiAgICB9XG4gIH0sXG5cbiAgcmVwbGFjZVJvb3RDb250YWluZXIoY29udGFpbmVyLCB0YWdOYW1lLCBhdHRycyl7XG4gICAgbGV0IHJldGFpbmVkQXR0cnMgPSBuZXcgU2V0KFtcImlkXCIsIFBIWF9TRVNTSU9OLCBQSFhfU1RBVElDLCBQSFhfTUFJTiwgUEhYX1JPT1RfSURdKVxuICAgIGlmKGNvbnRhaW5lci50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSl7XG4gICAgICBBcnJheS5mcm9tKGNvbnRhaW5lci5hdHRyaWJ1dGVzKVxuICAgICAgICAuZmlsdGVyKGF0dHIgPT4gIXJldGFpbmVkQXR0cnMuaGFzKGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgLmZvckVhY2goYXR0ciA9PiBjb250YWluZXIucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSkpXG5cbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKVxuICAgICAgICAuZmlsdGVyKG5hbWUgPT4gIXJldGFpbmVkQXR0cnMuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgIC5mb3JFYWNoKGF0dHIgPT4gY29udGFpbmVyLnNldEF0dHJpYnV0ZShhdHRyLCBhdHRyc1thdHRyXSkpXG5cbiAgICAgIHJldHVybiBjb250YWluZXJcblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKVxuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goYXR0ciA9PiBuZXdDb250YWluZXIuc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJzW2F0dHJdKSlcbiAgICAgIHJldGFpbmVkQXR0cnMuZm9yRWFjaChhdHRyID0+IG5ld0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoYXR0ciwgY29udGFpbmVyLmdldEF0dHJpYnV0ZShhdHRyKSkpXG4gICAgICBuZXdDb250YWluZXIuaW5uZXJIVE1MID0gY29udGFpbmVyLmlubmVySFRNTFxuICAgICAgY29udGFpbmVyLnJlcGxhY2VXaXRoKG5ld0NvbnRhaW5lcilcbiAgICAgIHJldHVybiBuZXdDb250YWluZXJcbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RpY2t5KGVsLCBuYW1lLCBkZWZhdWx0VmFsKXtcbiAgICBsZXQgb3AgPSAoRE9NLnByaXZhdGUoZWwsIFwic3RpY2t5XCIpIHx8IFtdKS5maW5kKChbZXhpc3RpbmdOYW1lLCBdKSA9PiBuYW1lID09PSBleGlzdGluZ05hbWUpXG4gICAgaWYob3Ape1xuICAgICAgbGV0IFtfbmFtZSwgX29wLCBzdGFzaGVkUmVzdWx0XSA9IG9wXG4gICAgICByZXR1cm4gc3Rhc2hlZFJlc3VsdFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHlwZW9mKGRlZmF1bHRWYWwpID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsKCkgOiBkZWZhdWx0VmFsXG4gICAgfVxuICB9LFxuXG4gIGRlbGV0ZVN0aWNreShlbCwgbmFtZSl7XG4gICAgdGhpcy51cGRhdGVQcml2YXRlKGVsLCBcInN0aWNreVwiLCBbXSwgb3BzID0+IHtcbiAgICAgIHJldHVybiBvcHMuZmlsdGVyKChbZXhpc3RpbmdOYW1lLCBfXSkgPT4gZXhpc3RpbmdOYW1lICE9PSBuYW1lKVxuICAgIH0pXG4gIH0sXG5cbiAgcHV0U3RpY2t5KGVsLCBuYW1lLCBvcCl7XG4gICAgbGV0IHN0YXNoZWRSZXN1bHQgPSBvcChlbClcbiAgICB0aGlzLnVwZGF0ZVByaXZhdGUoZWwsIFwic3RpY2t5XCIsIFtdLCBvcHMgPT4ge1xuICAgICAgbGV0IGV4aXN0aW5nSW5kZXggPSBvcHMuZmluZEluZGV4KChbZXhpc3RpbmdOYW1lLCBdKSA9PiBuYW1lID09PSBleGlzdGluZ05hbWUpXG4gICAgICBpZihleGlzdGluZ0luZGV4ID49IDApe1xuICAgICAgICBvcHNbZXhpc3RpbmdJbmRleF0gPSBbbmFtZSwgb3AsIHN0YXNoZWRSZXN1bHRdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHMucHVzaChbbmFtZSwgb3AsIHN0YXNoZWRSZXN1bHRdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wc1xuICAgIH0pXG4gIH0sXG5cbiAgYXBwbHlTdGlja3lPcGVyYXRpb25zKGVsKXtcbiAgICBsZXQgb3BzID0gRE9NLnByaXZhdGUoZWwsIFwic3RpY2t5XCIpXG4gICAgaWYoIW9wcyl7IHJldHVybiB9XG5cbiAgICBvcHMuZm9yRWFjaCgoW25hbWUsIG9wLCBfc3Rhc2hlZF0pID0+IHRoaXMucHV0U3RpY2t5KGVsLCBuYW1lLCBvcCkpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRE9NXG4iLCAiaW1wb3J0IHtcbiAgUEhYX0FDVElWRV9FTlRSWV9SRUZTLFxuICBQSFhfTElWRV9GSUxFX1VQREFURUQsXG4gIFBIWF9QUkVGTElHSFRFRF9SRUZTXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNoYW5uZWxVcGxvYWRlcixcbiAgbG9nRXJyb3Jcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgTGl2ZVVwbG9hZGVyIGZyb20gXCIuL2xpdmVfdXBsb2FkZXJcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRFbnRyeSB7XG4gIHN0YXRpYyBpc0FjdGl2ZShmaWxlRWwsIGZpbGUpe1xuICAgIGxldCBpc05ldyA9IGZpbGUuX3BoeFJlZiA9PT0gdW5kZWZpbmVkXG4gICAgbGV0IGFjdGl2ZVJlZnMgPSBmaWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9BQ1RJVkVfRU5UUllfUkVGUykuc3BsaXQoXCIsXCIpXG4gICAgbGV0IGlzQWN0aXZlID0gYWN0aXZlUmVmcy5pbmRleE9mKExpdmVVcGxvYWRlci5nZW5GaWxlUmVmKGZpbGUpKSA+PSAwXG4gICAgcmV0dXJuIGZpbGUuc2l6ZSA+IDAgJiYgKGlzTmV3IHx8IGlzQWN0aXZlKVxuICB9XG5cbiAgc3RhdGljIGlzUHJlZmxpZ2h0ZWQoZmlsZUVsLCBmaWxlKXtcbiAgICBsZXQgcHJlZmxpZ2h0ZWRSZWZzID0gZmlsZUVsLmdldEF0dHJpYnV0ZShQSFhfUFJFRkxJR0hURURfUkVGUykuc3BsaXQoXCIsXCIpXG4gICAgbGV0IGlzUHJlZmxpZ2h0ZWQgPSBwcmVmbGlnaHRlZFJlZnMuaW5kZXhPZihMaXZlVXBsb2FkZXIuZ2VuRmlsZVJlZihmaWxlKSkgPj0gMFxuICAgIHJldHVybiBpc1ByZWZsaWdodGVkICYmIHRoaXMuaXNBY3RpdmUoZmlsZUVsLCBmaWxlKVxuICB9XG5cbiAgY29uc3RydWN0b3IoZmlsZUVsLCBmaWxlLCB2aWV3KXtcbiAgICB0aGlzLnJlZiA9IExpdmVVcGxvYWRlci5nZW5GaWxlUmVmKGZpbGUpXG4gICAgdGhpcy5maWxlRWwgPSBmaWxlRWxcbiAgICB0aGlzLmZpbGUgPSBmaWxlXG4gICAgdGhpcy52aWV3ID0gdmlld1xuICAgIHRoaXMubWV0YSA9IG51bGxcbiAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlXG4gICAgdGhpcy5faXNEb25lID0gZmFsc2VcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDBcbiAgICB0aGlzLl9sYXN0UHJvZ3Jlc3NTZW50ID0gLTFcbiAgICB0aGlzLl9vbkRvbmUgPSBmdW5jdGlvbiAoKXsgfVxuICAgIHRoaXMuX29uRWxVcGRhdGVkID0gdGhpcy5vbkVsVXBkYXRlZC5iaW5kKHRoaXMpXG4gICAgdGhpcy5maWxlRWwuYWRkRXZlbnRMaXN0ZW5lcihQSFhfTElWRV9GSUxFX1VQREFURUQsIHRoaXMuX29uRWxVcGRhdGVkKVxuICB9XG5cbiAgbWV0YWRhdGEoKXsgcmV0dXJuIHRoaXMubWV0YSB9XG5cbiAgcHJvZ3Jlc3MocHJvZ3Jlc3Mpe1xuICAgIHRoaXMuX3Byb2dyZXNzID0gTWF0aC5mbG9vcihwcm9ncmVzcylcbiAgICBpZih0aGlzLl9wcm9ncmVzcyA+IHRoaXMuX2xhc3RQcm9ncmVzc1NlbnQpe1xuICAgICAgaWYodGhpcy5fcHJvZ3Jlc3MgPj0gMTAwKXtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSAxMDBcbiAgICAgICAgdGhpcy5fbGFzdFByb2dyZXNzU2VudCA9IDEwMFxuICAgICAgICB0aGlzLl9pc0RvbmUgPSB0cnVlXG4gICAgICAgIHRoaXMudmlldy5wdXNoRmlsZVByb2dyZXNzKHRoaXMuZmlsZUVsLCB0aGlzLnJlZiwgMTAwLCAoKSA9PiB7XG4gICAgICAgICAgTGl2ZVVwbG9hZGVyLnVudHJhY2tGaWxlKHRoaXMuZmlsZUVsLCB0aGlzLmZpbGUpXG4gICAgICAgICAgdGhpcy5fb25Eb25lKClcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2xhc3RQcm9ncmVzc1NlbnQgPSB0aGlzLl9wcm9ncmVzc1xuICAgICAgICB0aGlzLnZpZXcucHVzaEZpbGVQcm9ncmVzcyh0aGlzLmZpbGVFbCwgdGhpcy5yZWYsIHRoaXMuX3Byb2dyZXNzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpe1xuICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gdHJ1ZVxuICAgIHRoaXMuX2lzRG9uZSA9IHRydWVcbiAgICB0aGlzLl9vbkRvbmUoKVxuICB9XG5cbiAgaXNEb25lKCl7IHJldHVybiB0aGlzLl9pc0RvbmUgfVxuXG4gIGVycm9yKHJlYXNvbiA9IFwiZmFpbGVkXCIpe1xuICAgIHRoaXMudmlldy5wdXNoRmlsZVByb2dyZXNzKHRoaXMuZmlsZUVsLCB0aGlzLnJlZiwge2Vycm9yOiByZWFzb259KVxuICAgIExpdmVVcGxvYWRlci5jbGVhckZpbGVzKHRoaXMuZmlsZUVsKVxuICB9XG5cbiAgLy9wcml2YXRlXG5cbiAgb25Eb25lKGNhbGxiYWNrKXtcbiAgICB0aGlzLl9vbkRvbmUgPSAoKSA9PiB7XG4gICAgICB0aGlzLmZpbGVFbC5yZW1vdmVFdmVudExpc3RlbmVyKFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCwgdGhpcy5fb25FbFVwZGF0ZWQpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgb25FbFVwZGF0ZWQoKXtcbiAgICBsZXQgYWN0aXZlUmVmcyA9IHRoaXMuZmlsZUVsLmdldEF0dHJpYnV0ZShQSFhfQUNUSVZFX0VOVFJZX1JFRlMpLnNwbGl0KFwiLFwiKVxuICAgIGlmKGFjdGl2ZVJlZnMuaW5kZXhPZih0aGlzLnJlZikgPT09IC0xKXsgdGhpcy5jYW5jZWwoKSB9XG4gIH1cblxuICB0b1ByZWZsaWdodFBheWxvYWQoKXtcbiAgICByZXR1cm4ge1xuICAgICAgbGFzdF9tb2RpZmllZDogdGhpcy5maWxlLmxhc3RNb2RpZmllZCxcbiAgICAgIG5hbWU6IHRoaXMuZmlsZS5uYW1lLFxuICAgICAgc2l6ZTogdGhpcy5maWxlLnNpemUsXG4gICAgICB0eXBlOiB0aGlzLmZpbGUudHlwZSxcbiAgICAgIHJlZjogdGhpcy5yZWZcbiAgICB9XG4gIH1cblxuICB1cGxvYWRlcih1cGxvYWRlcnMpe1xuICAgIGlmKHRoaXMubWV0YS51cGxvYWRlcil7XG4gICAgICBsZXQgY2FsbGJhY2sgPSB1cGxvYWRlcnNbdGhpcy5tZXRhLnVwbG9hZGVyXSB8fCBsb2dFcnJvcihgbm8gdXBsb2FkZXIgY29uZmlndXJlZCBmb3IgJHt0aGlzLm1ldGEudXBsb2FkZXJ9YClcbiAgICAgIHJldHVybiB7bmFtZTogdGhpcy5tZXRhLnVwbG9hZGVyLCBjYWxsYmFjazogY2FsbGJhY2t9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7bmFtZTogXCJjaGFubmVsXCIsIGNhbGxiYWNrOiBjaGFubmVsVXBsb2FkZXJ9XG4gICAgfVxuICB9XG5cbiAgemlwUG9zdEZsaWdodChyZXNwKXtcbiAgICB0aGlzLm1ldGEgPSByZXNwLmVudHJpZXNbdGhpcy5yZWZdXG4gICAgaWYoIXRoaXMubWV0YSl7IGxvZ0Vycm9yKGBubyBwcmVmbGlnaHQgdXBsb2FkIHJlc3BvbnNlIHJldHVybmVkIHdpdGggcmVmICR7dGhpcy5yZWZ9YCwge2lucHV0OiB0aGlzLmZpbGVFbCwgcmVzcG9uc2U6IHJlc3B9KSB9XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBQSFhfRE9ORV9SRUZTLFxuICBQSFhfUFJFRkxJR0hURURfUkVGUyxcbiAgUEhYX1VQTE9BRF9SRUZcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgVXBsb2FkRW50cnkgZnJvbSBcIi4vdXBsb2FkX2VudHJ5XCJcblxubGV0IGxpdmVVcGxvYWRlckZpbGVSZWYgPSAwXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpdmVVcGxvYWRlciB7XG4gIHN0YXRpYyBnZW5GaWxlUmVmKGZpbGUpe1xuICAgIGxldCByZWYgPSBmaWxlLl9waHhSZWZcbiAgICBpZihyZWYgIT09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm4gcmVmXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGUuX3BoeFJlZiA9IChsaXZlVXBsb2FkZXJGaWxlUmVmKyspLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiBmaWxlLl9waHhSZWZcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RW50cnlEYXRhVVJMKGlucHV0RWwsIHJlZiwgY2FsbGJhY2spe1xuICAgIGxldCBmaWxlID0gdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5maW5kKGZpbGUgPT4gdGhpcy5nZW5GaWxlUmVmKGZpbGUpID09PSByZWYpXG4gICAgY2FsbGJhY2soVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSlcbiAgfVxuXG4gIHN0YXRpYyBoYXNVcGxvYWRzSW5Qcm9ncmVzcyhmb3JtRWwpe1xuICAgIGxldCBhY3RpdmUgPSAwXG4gICAgRE9NLmZpbmRVcGxvYWRJbnB1dHMoZm9ybUVsKS5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgIGlmKGlucHV0LmdldEF0dHJpYnV0ZShQSFhfUFJFRkxJR0hURURfUkVGUykgIT09IGlucHV0LmdldEF0dHJpYnV0ZShQSFhfRE9ORV9SRUZTKSl7XG4gICAgICAgIGFjdGl2ZSsrXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gYWN0aXZlID4gMFxuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZVVwbG9hZHMoaW5wdXRFbCl7XG4gICAgbGV0IGZpbGVzID0gdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKVxuICAgIGxldCBmaWxlRGF0YSA9IHt9XG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBlbnRyeSA9IHtwYXRoOiBpbnB1dEVsLm5hbWV9XG4gICAgICBsZXQgdXBsb2FkUmVmID0gaW5wdXRFbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpXG4gICAgICBmaWxlRGF0YVt1cGxvYWRSZWZdID0gZmlsZURhdGFbdXBsb2FkUmVmXSB8fCBbXVxuICAgICAgZW50cnkucmVmID0gdGhpcy5nZW5GaWxlUmVmKGZpbGUpXG4gICAgICBlbnRyeS5uYW1lID0gZmlsZS5uYW1lIHx8IGVudHJ5LnJlZlxuICAgICAgZW50cnkudHlwZSA9IGZpbGUudHlwZVxuICAgICAgZW50cnkuc2l6ZSA9IGZpbGUuc2l6ZVxuICAgICAgZmlsZURhdGFbdXBsb2FkUmVmXS5wdXNoKGVudHJ5KVxuICAgIH0pXG4gICAgcmV0dXJuIGZpbGVEYXRhXG4gIH1cblxuICBzdGF0aWMgY2xlYXJGaWxlcyhpbnB1dEVsKXtcbiAgICBpbnB1dEVsLnZhbHVlID0gbnVsbFxuICAgIGlucHV0RWwucmVtb3ZlQXR0cmlidXRlKFBIWF9VUExPQURfUkVGKVxuICAgIERPTS5wdXRQcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIiwgW10pXG4gIH1cblxuICBzdGF0aWMgdW50cmFja0ZpbGUoaW5wdXRFbCwgZmlsZSl7XG4gICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBET00ucHJpdmF0ZShpbnB1dEVsLCBcImZpbGVzXCIpLmZpbHRlcihmID0+ICFPYmplY3QuaXMoZiwgZmlsZSkpKVxuICB9XG5cbiAgc3RhdGljIHRyYWNrRmlsZXMoaW5wdXRFbCwgZmlsZXMpe1xuICAgIGlmKGlucHV0RWwuZ2V0QXR0cmlidXRlKFwibXVsdGlwbGVcIikgIT09IG51bGwpe1xuICAgICAgbGV0IG5ld0ZpbGVzID0gZmlsZXMuZmlsdGVyKGZpbGUgPT4gIXRoaXMuYWN0aXZlRmlsZXMoaW5wdXRFbCkuZmluZChmID0+IE9iamVjdC5pcyhmLCBmaWxlKSkpXG4gICAgICBET00ucHV0UHJpdmF0ZShpbnB1dEVsLCBcImZpbGVzXCIsIHRoaXMuYWN0aXZlRmlsZXMoaW5wdXRFbCkuY29uY2F0KG5ld0ZpbGVzKSlcbiAgICAgIGlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIiwgZmlsZXMpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFjdGl2ZUZpbGVJbnB1dHMoZm9ybUVsKXtcbiAgICBsZXQgZmlsZUlucHV0cyA9IERPTS5maW5kVXBsb2FkSW5wdXRzKGZvcm1FbClcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlSW5wdXRzKS5maWx0ZXIoZWwgPT4gZWwuZmlsZXMgJiYgdGhpcy5hY3RpdmVGaWxlcyhlbCkubGVuZ3RoID4gMClcbiAgfVxuXG4gIHN0YXRpYyBhY3RpdmVGaWxlcyhpbnB1dCl7XG4gICAgcmV0dXJuIChET00ucHJpdmF0ZShpbnB1dCwgXCJmaWxlc1wiKSB8fCBbXSkuZmlsdGVyKGYgPT4gVXBsb2FkRW50cnkuaXNBY3RpdmUoaW5wdXQsIGYpKVxuICB9XG5cbiAgc3RhdGljIGlucHV0c0F3YWl0aW5nUHJlZmxpZ2h0KGZvcm1FbCl7XG4gICAgbGV0IGZpbGVJbnB1dHMgPSBET00uZmluZFVwbG9hZElucHV0cyhmb3JtRWwpXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmlsZUlucHV0cykuZmlsdGVyKGlucHV0ID0+IHRoaXMuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dCkubGVuZ3RoID4gMClcbiAgfVxuXG4gIHN0YXRpYyBmaWxlc0F3YWl0aW5nUHJlZmxpZ2h0KGlucHV0KXtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWxlcyhpbnB1dCkuZmlsdGVyKGYgPT4gIVVwbG9hZEVudHJ5LmlzUHJlZmxpZ2h0ZWQoaW5wdXQsIGYpKVxuICB9XG5cbiAgY29uc3RydWN0b3IoaW5wdXRFbCwgdmlldywgb25Db21wbGV0ZSl7XG4gICAgdGhpcy52aWV3ID0gdmlld1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICB0aGlzLl9lbnRyaWVzID1cbiAgICAgIEFycmF5LmZyb20oTGl2ZVVwbG9hZGVyLmZpbGVzQXdhaXRpbmdQcmVmbGlnaHQoaW5wdXRFbCkgfHwgW10pXG4gICAgICAgIC5tYXAoZmlsZSA9PiBuZXcgVXBsb2FkRW50cnkoaW5wdXRFbCwgZmlsZSwgdmlldykpXG5cbiAgICB0aGlzLm51bUVudHJpZXNJblByb2dyZXNzID0gdGhpcy5fZW50cmllcy5sZW5ndGhcbiAgfVxuXG4gIGVudHJpZXMoKXsgcmV0dXJuIHRoaXMuX2VudHJpZXMgfVxuXG4gIGluaXRBZGFwdGVyVXBsb2FkKHJlc3AsIG9uRXJyb3IsIGxpdmVTb2NrZXQpe1xuICAgIHRoaXMuX2VudHJpZXMgPVxuICAgICAgdGhpcy5fZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICBlbnRyeS56aXBQb3N0RmxpZ2h0KHJlc3ApXG4gICAgICAgIGVudHJ5Lm9uRG9uZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5udW1FbnRyaWVzSW5Qcm9ncmVzcy0tXG4gICAgICAgICAgaWYodGhpcy5udW1FbnRyaWVzSW5Qcm9ncmVzcyA9PT0gMCl7IHRoaXMub25Db21wbGV0ZSgpIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGVudHJ5XG4gICAgICB9KVxuXG4gICAgbGV0IGdyb3VwZWRFbnRyaWVzID0gdGhpcy5fZW50cmllcy5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICAgIGxldCB7bmFtZSwgY2FsbGJhY2t9ID0gZW50cnkudXBsb2FkZXIobGl2ZVNvY2tldC51cGxvYWRlcnMpXG4gICAgICBhY2NbbmFtZV0gPSBhY2NbbmFtZV0gfHwge2NhbGxiYWNrOiBjYWxsYmFjaywgZW50cmllczogW119XG4gICAgICBhY2NbbmFtZV0uZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9KVxuXG4gICAgZm9yKGxldCBuYW1lIGluIGdyb3VwZWRFbnRyaWVzKXtcbiAgICAgIGxldCB7Y2FsbGJhY2ssIGVudHJpZXN9ID0gZ3JvdXBlZEVudHJpZXNbbmFtZV1cbiAgICAgIGNhbGxiYWNrKGVudHJpZXMsIG9uRXJyb3IsIHJlc3AsIGxpdmVTb2NrZXQpXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgUEhYX0FDVElWRV9FTlRSWV9SRUZTLFxuICBQSFhfTElWRV9GSUxFX1VQREFURUQsXG4gIFBIWF9QUkVGTElHSFRFRF9SRUZTLFxuICBQSFhfVVBMT0FEX1JFRlxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQgTGl2ZVVwbG9hZGVyIGZyb20gXCIuL2xpdmVfdXBsb2FkZXJcIlxuXG5sZXQgSG9va3MgPSB7XG4gIExpdmVGaWxlVXBsb2FkOiB7XG4gICAgYWN0aXZlUmVmcygpeyByZXR1cm4gdGhpcy5lbC5nZXRBdHRyaWJ1dGUoUEhYX0FDVElWRV9FTlRSWV9SRUZTKSB9LFxuXG4gICAgcHJlZmxpZ2h0ZWRSZWZzKCl7IHJldHVybiB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfUFJFRkxJR0hURURfUkVGUykgfSxcblxuICAgIG1vdW50ZWQoKXsgdGhpcy5wcmVmbGlnaHRlZFdhcyA9IHRoaXMucHJlZmxpZ2h0ZWRSZWZzKCkgfSxcblxuICAgIHVwZGF0ZWQoKXtcbiAgICAgIGxldCBuZXdQcmVmbGlnaHRzID0gdGhpcy5wcmVmbGlnaHRlZFJlZnMoKVxuICAgICAgaWYodGhpcy5wcmVmbGlnaHRlZFdhcyAhPT0gbmV3UHJlZmxpZ2h0cyl7XG4gICAgICAgIHRoaXMucHJlZmxpZ2h0ZWRXYXMgPSBuZXdQcmVmbGlnaHRzXG4gICAgICAgIGlmKG5ld1ByZWZsaWdodHMgPT09IFwiXCIpe1xuICAgICAgICAgIHRoaXMuX192aWV3LmNhbmNlbFN1Ym1pdCh0aGlzLmVsLmZvcm0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYodGhpcy5hY3RpdmVSZWZzKCkgPT09IFwiXCIpeyB0aGlzLmVsLnZhbHVlID0gbnVsbCB9XG4gICAgICB0aGlzLmVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCkpXG4gICAgfVxuICB9LFxuXG4gIExpdmVJbWdQcmV2aWV3OiB7XG4gICAgbW91bnRlZCgpe1xuICAgICAgdGhpcy5yZWYgPSB0aGlzLmVsLmdldEF0dHJpYnV0ZShcImRhdGEtcGh4LWVudHJ5LXJlZlwiKVxuICAgICAgdGhpcy5pbnB1dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpKVxuICAgICAgTGl2ZVVwbG9hZGVyLmdldEVudHJ5RGF0YVVSTCh0aGlzLmlucHV0RWwsIHRoaXMucmVmLCB1cmwgPT4ge1xuICAgICAgICB0aGlzLnVybCA9IHVybFxuICAgICAgICB0aGlzLmVsLnNyYyA9IHVybFxuICAgICAgfSlcbiAgICB9LFxuICAgIGRlc3Ryb3llZCgpe1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnVybClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSG9va3NcbiIsICJpbXBvcnQge1xuICBtYXliZVxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NUG9zdE1vcnBoUmVzdG9yZXIge1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXJCZWZvcmUsIGNvbnRhaW5lckFmdGVyLCB1cGRhdGVUeXBlKXtcbiAgICBsZXQgaWRzQmVmb3JlID0gbmV3IFNldCgpXG4gICAgbGV0IGlkc0FmdGVyID0gbmV3IFNldChbLi4uY29udGFpbmVyQWZ0ZXIuY2hpbGRyZW5dLm1hcChjaGlsZCA9PiBjaGlsZC5pZCkpXG5cbiAgICBsZXQgZWxlbWVudHNUb01vZGlmeSA9IFtdXG5cbiAgICBBcnJheS5mcm9tKGNvbnRhaW5lckJlZm9yZS5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICBpZihjaGlsZC5pZCl7IC8vIGFsbCBvZiBvdXIgY2hpbGRyZW4gc2hvdWxkIGJlIGVsZW1lbnRzIHdpdGggaWRzXG4gICAgICAgIGlkc0JlZm9yZS5hZGQoY2hpbGQuaWQpXG4gICAgICAgIGlmKGlkc0FmdGVyLmhhcyhjaGlsZC5pZCkpe1xuICAgICAgICAgIGxldCBwcmV2aW91c0VsZW1lbnRJZCA9IGNoaWxkLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgY2hpbGQucHJldmlvdXNFbGVtZW50U2libGluZy5pZFxuICAgICAgICAgIGVsZW1lbnRzVG9Nb2RpZnkucHVzaCh7ZWxlbWVudElkOiBjaGlsZC5pZCwgcHJldmlvdXNFbGVtZW50SWQ6IHByZXZpb3VzRWxlbWVudElkfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmNvbnRhaW5lcklkID0gY29udGFpbmVyQWZ0ZXIuaWRcbiAgICB0aGlzLnVwZGF0ZVR5cGUgPSB1cGRhdGVUeXBlXG4gICAgdGhpcy5lbGVtZW50c1RvTW9kaWZ5ID0gZWxlbWVudHNUb01vZGlmeVxuICAgIHRoaXMuZWxlbWVudElkc1RvQWRkID0gWy4uLmlkc0FmdGVyXS5maWx0ZXIoaWQgPT4gIWlkc0JlZm9yZS5oYXMoaWQpKVxuICB9XG5cbiAgLy8gV2UgZG8gdGhlIGZvbGxvd2luZyB0byBvcHRpbWl6ZSBhcHBlbmQvcHJlcGVuZCBvcGVyYXRpb25zOlxuICAvLyAgIDEpIFRyYWNrIGlkcyBvZiBtb2RpZmllZCBlbGVtZW50cyAmIG9mIG5ldyBlbGVtZW50c1xuICAvLyAgIDIpIEFsbCB0aGUgbW9kaWZpZWQgZWxlbWVudHMgYXJlIHB1dCBiYWNrIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBET00gdHJlZVxuICAvLyAgICAgIGJ5IHN0b3JpbmcgdGhlIGlkIG9mIHRoZWlyIHByZXZpb3VzIHNpYmxpbmdcbiAgLy8gICAzKSBOZXcgZWxlbWVudHMgYXJlIGdvaW5nIHRvIGJlIHB1dCBpbiB0aGUgcmlnaHQgcGxhY2UgYnkgbW9ycGhkb20gZHVyaW5nIGFwcGVuZC5cbiAgLy8gICAgICBGb3IgcHJlcGVuZCwgd2UgbW92ZSB0aGVtIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgY29udGFpbmVyXG4gIHBlcmZvcm0oKXtcbiAgICBsZXQgY29udGFpbmVyID0gRE9NLmJ5SWQodGhpcy5jb250YWluZXJJZClcbiAgICB0aGlzLmVsZW1lbnRzVG9Nb2RpZnkuZm9yRWFjaChlbGVtZW50VG9Nb2RpZnkgPT4ge1xuICAgICAgaWYoZWxlbWVudFRvTW9kaWZ5LnByZXZpb3VzRWxlbWVudElkKXtcbiAgICAgICAgbWF5YmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudFRvTW9kaWZ5LnByZXZpb3VzRWxlbWVudElkKSwgcHJldmlvdXNFbGVtID0+IHtcbiAgICAgICAgICBtYXliZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50VG9Nb2RpZnkuZWxlbWVudElkKSwgZWxlbSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNJblJpZ2h0UGxhY2UgPSBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgZWxlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlkID09IHByZXZpb3VzRWxlbS5pZFxuICAgICAgICAgICAgaWYoIWlzSW5SaWdodFBsYWNlKXtcbiAgICAgICAgICAgICAgcHJldmlvdXNFbGVtLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyZW5kXCIsIGVsZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgICBtYXliZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50VG9Nb2RpZnkuZWxlbWVudElkKSwgZWxlbSA9PiB7XG4gICAgICAgICAgbGV0IGlzSW5SaWdodFBsYWNlID0gZWxlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID09IG51bGxcbiAgICAgICAgICBpZighaXNJblJpZ2h0UGxhY2Upe1xuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgZWxlbSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmKHRoaXMudXBkYXRlVHlwZSA9PSBcInByZXBlbmRcIil7XG4gICAgICB0aGlzLmVsZW1lbnRJZHNUb0FkZC5yZXZlcnNlKCkuZm9yRWFjaChlbGVtSWQgPT4ge1xuICAgICAgICBtYXliZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtSWQpLCBlbGVtID0+IGNvbnRhaW5lci5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIGVsZW0pKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsICJ2YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG5mdW5jdGlvbiBtb3JwaEF0dHJzKGZyb21Ob2RlLCB0b05vZGUpIHtcbiAgICB2YXIgdG9Ob2RlQXR0cnMgPSB0b05vZGUuYXR0cmlidXRlcztcbiAgICB2YXIgYXR0cjtcbiAgICB2YXIgYXR0ck5hbWU7XG4gICAgdmFyIGF0dHJOYW1lc3BhY2VVUkk7XG4gICAgdmFyIGF0dHJWYWx1ZTtcbiAgICB2YXIgZnJvbVZhbHVlO1xuXG4gICAgLy8gZG9jdW1lbnQtZnJhZ21lbnRzIGRvbnQgaGF2ZSBhdHRyaWJ1dGVzIHNvIGxldHMgbm90IGRvIGFueXRoaW5nXG4gICAgaWYgKHRvTm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBmcm9tTm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBhdHRyaWJ1dGVzIG9uIG9yaWdpbmFsIERPTSBlbGVtZW50XG4gICAgZm9yICh2YXIgaSA9IHRvTm9kZUF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGF0dHIgPSB0b05vZGVBdHRyc1tpXTtcbiAgICAgICAgYXR0ck5hbWUgPSBhdHRyLm5hbWU7XG4gICAgICAgIGF0dHJOYW1lc3BhY2VVUkkgPSBhdHRyLm5hbWVzcGFjZVVSSTtcbiAgICAgICAgYXR0clZhbHVlID0gYXR0ci52YWx1ZTtcblxuICAgICAgICBpZiAoYXR0ck5hbWVzcGFjZVVSSSkge1xuICAgICAgICAgICAgYXR0ck5hbWUgPSBhdHRyLmxvY2FsTmFtZSB8fCBhdHRyTmFtZTtcbiAgICAgICAgICAgIGZyb21WYWx1ZSA9IGZyb21Ob2RlLmdldEF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gYXR0clZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHIucHJlZml4ID09PSAneG1sbnMnKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUgPSBhdHRyLm5hbWU7IC8vIEl0J3Mgbm90IGFsbG93ZWQgdG8gc2V0IGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBYTUxOUyBuYW1lc3BhY2Ugd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBgeG1sbnNgIHByZWZpeFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmcm9tTm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyTmFtZXNwYWNlVVJJLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21WYWx1ZSA9IGZyb21Ob2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChmcm9tVmFsdWUgIT09IGF0dHJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgZXh0cmEgYXR0cmlidXRlcyBmb3VuZCBvbiB0aGUgb3JpZ2luYWwgRE9NIGVsZW1lbnQgdGhhdFxuICAgIC8vIHdlcmVuJ3QgZm91bmQgb24gdGhlIHRhcmdldCBlbGVtZW50LlxuICAgIHZhciBmcm9tTm9kZUF0dHJzID0gZnJvbU5vZGUuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIGQgPSBmcm9tTm9kZUF0dHJzLmxlbmd0aCAtIDE7IGQgPj0gMDsgZC0tKSB7XG4gICAgICAgIGF0dHIgPSBmcm9tTm9kZUF0dHJzW2RdO1xuICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgYXR0ck5hbWVzcGFjZVVSSSA9IGF0dHIubmFtZXNwYWNlVVJJO1xuXG4gICAgICAgIGlmIChhdHRyTmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubG9jYWxOYW1lIHx8IGF0dHJOYW1lO1xuXG4gICAgICAgICAgICBpZiAoIXRvTm9kZS5oYXNBdHRyaWJ1dGVOUyhhdHRyTmFtZXNwYWNlVVJJLCBhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBmcm9tTm9kZS5yZW1vdmVBdHRyaWJ1dGVOUyhhdHRyTmFtZXNwYWNlVVJJLCBhdHRyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRvTm9kZS5oYXNBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZnJvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIHJhbmdlOyAvLyBDcmVhdGUgYSByYW5nZSBvYmplY3QgZm9yIGVmZmljZW50bHkgcmVuZGVyaW5nIHN0cmluZ3MgdG8gZWxlbWVudHMuXG52YXIgTlNfWEhUTUwgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG5cbnZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZG9jdW1lbnQ7XG52YXIgSEFTX1RFTVBMQVRFX1NVUFBPUlQgPSAhIWRvYyAmJiAnY29udGVudCcgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG52YXIgSEFTX1JBTkdFX1NVUFBPUlQgPSAhIWRvYyAmJiBkb2MuY3JlYXRlUmFuZ2UgJiYgJ2NyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCcgaW4gZG9jLmNyZWF0ZVJhbmdlKCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVRlbXBsYXRlKHN0cikge1xuICAgIHZhciB0ZW1wbGF0ZSA9IGRvYy5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IHN0cjtcbiAgICByZXR1cm4gdGVtcGxhdGUuY29udGVudC5jaGlsZE5vZGVzWzBdO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGcmFnbWVudEZyb21SYW5nZShzdHIpIHtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGUoZG9jLmJvZHkpO1xuICAgIH1cblxuICAgIHZhciBmcmFnbWVudCA9IHJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChzdHIpO1xuICAgIHJldHVybiBmcmFnbWVudC5jaGlsZE5vZGVzWzBdO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGcmFnbWVudEZyb21XcmFwKHN0cikge1xuICAgIHZhciBmcmFnbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdib2R5Jyk7XG4gICAgZnJhZ21lbnQuaW5uZXJIVE1MID0gc3RyO1xuICAgIHJldHVybiBmcmFnbWVudC5jaGlsZE5vZGVzWzBdO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYWJvdXQgdGhlIHNhbWVcbiAqIHZhciBodG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzdHIsICd0ZXh0L2h0bWwnKTtcbiAqIHJldHVybiBodG1sLmJvZHkuZmlyc3RDaGlsZDtcbiAqXG4gKiBAbWV0aG9kIHRvRWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0b0VsZW1lbnQoc3RyKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBpZiAoSEFTX1RFTVBMQVRFX1NVUFBPUlQpIHtcbiAgICAgIC8vIGF2b2lkIHJlc3RyaWN0aW9ucyBvbiBjb250ZW50IGZvciB0aGluZ3MgbGlrZSBgPHRyPjx0aD5IaTwvdGg+PC90cj5gIHdoaWNoXG4gICAgICAvLyBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZG9lc24ndCBzdXBwb3J0XG4gICAgICAvLyA8dGVtcGxhdGU+IHN1cHBvcnQgbm90IGF2YWlsYWJsZSBpbiBJRVxuICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRlbXBsYXRlKHN0cik7XG4gICAgfSBlbHNlIGlmIChIQVNfUkFOR0VfU1VQUE9SVCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVJhbmdlKHN0cik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVdyYXAoc3RyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdHdvIG5vZGUncyBuYW1lcyBhcmUgdGhlIHNhbWUuXG4gKlxuICogTk9URTogV2UgZG9uJ3QgYm90aGVyIGNoZWNraW5nIGBuYW1lc3BhY2VVUklgIGJlY2F1c2UgeW91IHdpbGwgbmV2ZXIgZmluZCB0d28gSFRNTCBlbGVtZW50cyB3aXRoIHRoZSBzYW1lXG4gKiAgICAgICBub2RlTmFtZSBhbmQgZGlmZmVyZW50IG5hbWVzcGFjZSBVUklzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiIFRoZSB0YXJnZXQgZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGFyZU5vZGVOYW1lcyhmcm9tRWwsIHRvRWwpIHtcbiAgICB2YXIgZnJvbU5vZGVOYW1lID0gZnJvbUVsLm5vZGVOYW1lO1xuICAgIHZhciB0b05vZGVOYW1lID0gdG9FbC5ub2RlTmFtZTtcbiAgICB2YXIgZnJvbUNvZGVTdGFydCwgdG9Db2RlU3RhcnQ7XG5cbiAgICBpZiAoZnJvbU5vZGVOYW1lID09PSB0b05vZGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZyb21Db2RlU3RhcnQgPSBmcm9tTm9kZU5hbWUuY2hhckNvZGVBdCgwKTtcbiAgICB0b0NvZGVTdGFydCA9IHRvTm9kZU5hbWUuY2hhckNvZGVBdCgwKTtcblxuICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBpcyBhIHZpcnR1YWwgRE9NIG5vZGUgb3IgU1ZHIG5vZGUgdGhlbiB3ZSBtYXlcbiAgICAvLyBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgdGFnIG5hbWUgYmVmb3JlIGNvbXBhcmluZy4gTm9ybWFsIEhUTUwgZWxlbWVudHMgdGhhdCBhcmVcbiAgICAvLyBpbiB0aGUgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCJcbiAgICAvLyBhcmUgY29udmVydGVkIHRvIHVwcGVyIGNhc2VcbiAgICBpZiAoZnJvbUNvZGVTdGFydCA8PSA5MCAmJiB0b0NvZGVTdGFydCA+PSA5NykgeyAvLyBmcm9tIGlzIHVwcGVyIGFuZCB0byBpcyBsb3dlclxuICAgICAgICByZXR1cm4gZnJvbU5vZGVOYW1lID09PSB0b05vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmICh0b0NvZGVTdGFydCA8PSA5MCAmJiBmcm9tQ29kZVN0YXJ0ID49IDk3KSB7IC8vIHRvIGlzIHVwcGVyIGFuZCBmcm9tIGlzIGxvd2VyXG4gICAgICAgIHJldHVybiB0b05vZGVOYW1lID09PSBmcm9tTm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbGVtZW50LCBvcHRpb25hbGx5IHdpdGggYSBrbm93biBuYW1lc3BhY2UgVVJJLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBlbGVtZW50IG5hbWUsIGUuZy4gJ2Rpdicgb3IgJ3N2ZydcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZXNwYWNlVVJJXSB0aGUgZWxlbWVudCdzIG5hbWVzcGFjZSBVUkksIGkuZS4gdGhlIHZhbHVlIG9mXG4gKiBpdHMgYHhtbG5zYCBhdHRyaWJ1dGUgb3IgaXRzIGluZmVycmVkIG5hbWVzcGFjZS5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMobmFtZSwgbmFtZXNwYWNlVVJJKSB7XG4gICAgcmV0dXJuICFuYW1lc3BhY2VVUkkgfHwgbmFtZXNwYWNlVVJJID09PSBOU19YSFRNTCA/XG4gICAgICAgIGRvYy5jcmVhdGVFbGVtZW50KG5hbWUpIDpcbiAgICAgICAgZG9jLmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIG5hbWUpO1xufVxuXG4vKipcbiAqIENvcGllcyB0aGUgY2hpbGRyZW4gb2Ygb25lIERPTSBlbGVtZW50IHRvIGFub3RoZXIgRE9NIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gbW92ZUNoaWxkcmVuKGZyb21FbCwgdG9FbCkge1xuICAgIHZhciBjdXJDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgIHdoaWxlIChjdXJDaGlsZCkge1xuICAgICAgICB2YXIgbmV4dENoaWxkID0gY3VyQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgIHRvRWwuYXBwZW5kQ2hpbGQoY3VyQ2hpbGQpO1xuICAgICAgICBjdXJDaGlsZCA9IG5leHRDaGlsZDtcbiAgICB9XG4gICAgcmV0dXJuIHRvRWw7XG59XG5cbmZ1bmN0aW9uIHN5bmNCb29sZWFuQXR0clByb3AoZnJvbUVsLCB0b0VsLCBuYW1lKSB7XG4gICAgaWYgKGZyb21FbFtuYW1lXSAhPT0gdG9FbFtuYW1lXSkge1xuICAgICAgICBmcm9tRWxbbmFtZV0gPSB0b0VsW25hbWVdO1xuICAgICAgICBpZiAoZnJvbUVsW25hbWVdKSB7XG4gICAgICAgICAgICBmcm9tRWwuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21FbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBzcGVjaWFsRWxIYW5kbGVycyA9IHtcbiAgICBPUFRJT046IGZ1bmN0aW9uKGZyb21FbCwgdG9FbCkge1xuICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGZyb21FbC5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5hbWUgPSBwYXJlbnROb2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAocGFyZW50TmFtZSA9PT0gJ09QVEdST1VQJykge1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmVudE5hbWUgPT09ICdTRUxFQ1QnICYmICFwYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgnbXVsdGlwbGUnKSkge1xuICAgICAgICAgICAgICAgIGlmIChmcm9tRWwuaGFzQXR0cmlidXRlKCdzZWxlY3RlZCcpICYmICF0b0VsLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIE1TIEVkZ2UgYnVnIHdoZXJlIHRoZSAnc2VsZWN0ZWQnIGF0dHJpYnV0ZSBjYW4gb25seSBiZVxuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVkIGlmIHNldCB0byBhIG5vbi1lbXB0eSB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTIwODc2NzkvXG4gICAgICAgICAgICAgICAgICAgIGZyb21FbC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIGZyb21FbC5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcmVzZXQgc2VsZWN0IGVsZW1lbnQncyBzZWxlY3RlZEluZGV4IHRvIC0xLCBvdGhlcndpc2Ugc2V0dGluZ1xuICAgICAgICAgICAgICAgIC8vIGZyb21FbC5zZWxlY3RlZCB1c2luZyB0aGUgc3luY0Jvb2xlYW5BdHRyUHJvcCBiZWxvdyBoYXMgbm8gZWZmZWN0LlxuICAgICAgICAgICAgICAgIC8vIFRoZSBjb3JyZWN0IHNlbGVjdGVkSW5kZXggd2lsbCBiZSBzZXQgaW4gdGhlIFNFTEVDVCBzcGVjaWFsIGhhbmRsZXIgYmVsb3cuXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3luY0Jvb2xlYW5BdHRyUHJvcChmcm9tRWwsIHRvRWwsICdzZWxlY3RlZCcpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGhlIFwidmFsdWVcIiBhdHRyaWJ1dGUgaXMgc3BlY2lhbCBmb3IgdGhlIDxpbnB1dD4gZWxlbWVudCBzaW5jZSBpdCBzZXRzXG4gICAgICogdGhlIGluaXRpYWwgdmFsdWUuIENoYW5naW5nIHRoZSBcInZhbHVlXCIgYXR0cmlidXRlIHdpdGhvdXQgY2hhbmdpbmcgdGhlXG4gICAgICogXCJ2YWx1ZVwiIHByb3BlcnR5IHdpbGwgaGF2ZSBubyBlZmZlY3Qgc2luY2UgaXQgaXMgb25seSB1c2VkIHRvIHRoZSBzZXQgdGhlXG4gICAgICogaW5pdGlhbCB2YWx1ZS4gIFNpbWlsYXIgZm9yIHRoZSBcImNoZWNrZWRcIiBhdHRyaWJ1dGUsIGFuZCBcImRpc2FibGVkXCIuXG4gICAgICovXG4gICAgSU5QVVQ6IGZ1bmN0aW9uKGZyb21FbCwgdG9FbCkge1xuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ2NoZWNrZWQnKTtcbiAgICAgICAgc3luY0Jvb2xlYW5BdHRyUHJvcChmcm9tRWwsIHRvRWwsICdkaXNhYmxlZCcpO1xuXG4gICAgICAgIGlmIChmcm9tRWwudmFsdWUgIT09IHRvRWwudmFsdWUpIHtcbiAgICAgICAgICAgIGZyb21FbC52YWx1ZSA9IHRvRWwudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRvRWwuaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG4gICAgICAgICAgICBmcm9tRWwucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIFRFWFRBUkVBOiBmdW5jdGlvbihmcm9tRWwsIHRvRWwpIHtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdG9FbC52YWx1ZTtcbiAgICAgICAgaWYgKGZyb21FbC52YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGZyb21FbC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBmcm9tRWwuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIC8vIE5lZWRlZCBmb3IgSUUuIEFwcGFyZW50bHkgSUUgc2V0cyB0aGUgcGxhY2Vob2xkZXIgYXMgdGhlXG4gICAgICAgICAgICAvLyBub2RlIHZhbHVlIGFuZCB2aXNlIHZlcnNhLiBUaGlzIGlnbm9yZXMgYW4gZW1wdHkgdXBkYXRlLlxuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gZmlyc3RDaGlsZC5ub2RlVmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZSA9PSBuZXdWYWx1ZSB8fCAoIW5ld1ZhbHVlICYmIG9sZFZhbHVlID09IGZyb21FbC5wbGFjZWhvbGRlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFNFTEVDVDogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIGlmICghdG9FbC5oYXNBdHRyaWJ1dGUoJ211bHRpcGxlJykpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBjaGlsZHJlbiBvZiBmcm9tRWwsIG5vdCB0b0VsIHNpbmNlIG5vZGVzIGNhbiBiZSBtb3ZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0b0VsIHRvIGZyb21FbCBkaXJlY3RseSB3aGVuIG1vcnBoaW5nLlxuICAgICAgICAgICAgLy8gQXQgdGhlIHRpbWUgdGhpcyBzcGVjaWFsIGhhbmRsZXIgaXMgaW52b2tlZCwgYWxsIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBiZWVuIG1vcnBoZWRcbiAgICAgICAgICAgIC8vIGFuZCBhcHBlbmRlZCB0byAvIHJlbW92ZWQgZnJvbSBmcm9tRWwsIHNvIHVzaW5nIGZyb21FbCBoZXJlIGlzIHNhZmUgYW5kIGNvcnJlY3QuXG4gICAgICAgICAgICB2YXIgY3VyQ2hpbGQgPSBmcm9tRWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHZhciBvcHRncm91cDtcbiAgICAgICAgICAgIHZhciBub2RlTmFtZTtcbiAgICAgICAgICAgIHdoaWxlKGN1ckNoaWxkKSB7XG4gICAgICAgICAgICAgICAgbm9kZU5hbWUgPSBjdXJDaGlsZC5ub2RlTmFtZSAmJiBjdXJDaGlsZC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlTmFtZSA9PT0gJ09QVEdST1VQJykge1xuICAgICAgICAgICAgICAgICAgICBvcHRncm91cCA9IGN1ckNoaWxkO1xuICAgICAgICAgICAgICAgICAgICBjdXJDaGlsZCA9IG9wdGdyb3VwLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnT1BUSU9OJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckNoaWxkLmhhc0F0dHJpYnV0ZSgnc2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gY3VyQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VyQ2hpbGQgJiYgb3B0Z3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gb3B0Z3JvdXAubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRncm91cCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyb21FbC5zZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUkMSA9IDExO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIGRlZmF1bHRHZXROb2RlS2V5KG5vZGUpIHtcbiAgaWYgKG5vZGUpIHtcbiAgICAgIHJldHVybiAobm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykpIHx8IG5vZGUuaWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9ycGhkb21GYWN0b3J5KG1vcnBoQXR0cnMpIHtcblxuICAgIHJldHVybiBmdW5jdGlvbiBtb3JwaGRvbShmcm9tTm9kZSwgdG9Ob2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0b05vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoZnJvbU5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQnIHx8IGZyb21Ob2RlLm5vZGVOYW1lID09PSAnSFRNTCcgfHwgZnJvbU5vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICAgICAgICAgIHZhciB0b05vZGVIdG1sID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIHRvTm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdodG1sJyk7XG4gICAgICAgICAgICAgICAgdG9Ob2RlLmlubmVySFRNTCA9IHRvTm9kZUh0bWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvTm9kZSA9IHRvRWxlbWVudCh0b05vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdldE5vZGVLZXkgPSBvcHRpb25zLmdldE5vZGVLZXkgfHwgZGVmYXVsdEdldE5vZGVLZXk7XG4gICAgICAgIHZhciBvbkJlZm9yZU5vZGVBZGRlZCA9IG9wdGlvbnMub25CZWZvcmVOb2RlQWRkZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uTm9kZUFkZGVkID0gb3B0aW9ucy5vbk5vZGVBZGRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25CZWZvcmVFbFVwZGF0ZWQgPSBvcHRpb25zLm9uQmVmb3JlRWxVcGRhdGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkVsVXBkYXRlZCA9IG9wdGlvbnMub25FbFVwZGF0ZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uQmVmb3JlTm9kZURpc2NhcmRlZCA9IG9wdGlvbnMub25CZWZvcmVOb2RlRGlzY2FyZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbk5vZGVEaXNjYXJkZWQgPSBvcHRpb25zLm9uTm9kZURpc2NhcmRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25CZWZvcmVFbENoaWxkcmVuVXBkYXRlZCA9IG9wdGlvbnMub25CZWZvcmVFbENoaWxkcmVuVXBkYXRlZCB8fCBub29wO1xuICAgICAgICB2YXIgY2hpbGRyZW5Pbmx5ID0gb3B0aW9ucy5jaGlsZHJlbk9ubHkgPT09IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBvYmplY3QgaXMgdXNlZCBhcyBhIGxvb2t1cCB0byBxdWlja2x5IGZpbmQgYWxsIGtleWVkIGVsZW1lbnRzIGluIHRoZSBvcmlnaW5hbCBET00gdHJlZS5cbiAgICAgICAgdmFyIGZyb21Ob2Rlc0xvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBrZXllZFJlbW92YWxMaXN0ID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkS2V5ZWRSZW1vdmFsKGtleSkge1xuICAgICAgICAgICAga2V5ZWRSZW1vdmFsTGlzdC5wdXNoKGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB3YWxrRGlzY2FyZGVkQ2hpbGROb2Rlcyhub2RlLCBza2lwS2V5ZWROb2Rlcykge1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VyQ2hpbGQpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChza2lwS2V5ZWROb2RlcyAmJiAoa2V5ID0gZ2V0Tm9kZUtleShjdXJDaGlsZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgc2tpcHBpbmcga2V5ZWQgbm9kZXMgdGhlbiB3ZSBhZGQgdGhlIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYSBsaXN0IHNvIHRoYXQgaXQgY2FuIGJlIGhhbmRsZWQgYXQgdGhlIHZlcnkgZW5kLlxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkS2V5ZWRSZW1vdmFsKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcG9ydCB0aGUgbm9kZSBhcyBkaXNjYXJkZWQgaWYgaXQgaXMgbm90IGtleWVkLiBXZSBkbyB0aGlzIGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBlbmQgd2UgbG9vcCB0aHJvdWdoIGFsbCBrZXllZCBlbGVtZW50cyB0aGF0IHdlcmUgdW5tYXRjaGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiBkaXNjYXJkIHRoZW0gaW4gb25lIGZpbmFsIHBhc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckNoaWxkLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrRGlzY2FyZGVkQ2hpbGROb2RlcyhjdXJDaGlsZCwgc2tpcEtleWVkTm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlcyBhIERPTSBub2RlIG91dCBvZiB0aGUgb3JpZ2luYWwgRE9NXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVtb3ZlXG4gICAgICAgICAqIEBwYXJhbSAge05vZGV9IHBhcmVudE5vZGUgVGhlIG5vZGVzIHBhcmVudFxuICAgICAgICAgKiBAcGFyYW0gIHtCb29sZWFufSBza2lwS2V5ZWROb2RlcyBJZiB0cnVlIHRoZW4gZWxlbWVudHMgd2l0aCBrZXlzIHdpbGwgYmUgc2tpcHBlZCBhbmQgbm90IGRpc2NhcmRlZC5cbiAgICAgICAgICogQHJldHVybiB7dW5kZWZpbmVkfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlLCBwYXJlbnROb2RlLCBza2lwS2V5ZWROb2Rlcykge1xuICAgICAgICAgICAgaWYgKG9uQmVmb3JlTm9kZURpc2NhcmRlZChub2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25Ob2RlRGlzY2FyZGVkKG5vZGUpO1xuICAgICAgICAgICAgd2Fsa0Rpc2NhcmRlZENoaWxkTm9kZXMobm9kZSwgc2tpcEtleWVkTm9kZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLy8gVHJlZVdhbGtlciBpbXBsZW1lbnRhdGlvbiBpcyBubyBmYXN0ZXIsIGJ1dCBrZWVwaW5nIHRoaXMgYXJvdW5kIGluIGNhc2UgdGhpcyBjaGFuZ2VzIGluIHRoZSBmdXR1cmVcbiAgICAgICAgLy8gZnVuY3Rpb24gaW5kZXhUcmVlKHJvb3QpIHtcbiAgICAgICAgLy8gICAgIHZhciB0cmVlV2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgLy8gICAgICAgICByb290LFxuICAgICAgICAvLyAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHZhciBlbDtcbiAgICAgICAgLy8gICAgIHdoaWxlKChlbCA9IHRyZWVXYWxrZXIubmV4dE5vZGUoKSkpIHtcbiAgICAgICAgLy8gICAgICAgICB2YXIga2V5ID0gZ2V0Tm9kZUtleShlbCk7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGVsO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIC8vIE5vZGVJdGVyYXRvciBpbXBsZW1lbnRhdGlvbiBpcyBubyBmYXN0ZXIsIGJ1dCBrZWVwaW5nIHRoaXMgYXJvdW5kIGluIGNhc2UgdGhpcyBjaGFuZ2VzIGluIHRoZSBmdXR1cmVcbiAgICAgICAgLy9cbiAgICAgICAgLy8gZnVuY3Rpb24gaW5kZXhUcmVlKG5vZGUpIHtcbiAgICAgICAgLy8gICAgIHZhciBub2RlSXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3Iobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO1xuICAgICAgICAvLyAgICAgdmFyIGVsO1xuICAgICAgICAvLyAgICAgd2hpbGUoKGVsID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpKSB7XG4gICAgICAgIC8vICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoZWwpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZnJvbU5vZGVzTG9va3VwW2tleV0gPSBlbDtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cblxuICAgICAgICBmdW5jdGlvbiBpbmRleFRyZWUobm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFJDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VyQ2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1ckNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBnZXROb2RlS2V5KGN1ckNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbU5vZGVzTG9va3VwW2tleV0gPSBjdXJDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdhbGsgcmVjdXJzaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhUcmVlKGN1ckNoaWxkKTtcblxuICAgICAgICAgICAgICAgICAgICBjdXJDaGlsZCA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4VHJlZShmcm9tTm9kZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlTm9kZUFkZGVkKGVsKSB7XG4gICAgICAgICAgICBvbk5vZGVBZGRlZChlbCk7XG5cbiAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IGVsLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICB3aGlsZSAoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFNpYmxpbmcgPSBjdXJDaGlsZC5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBnZXROb2RlS2V5KGN1ckNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bm1hdGNoZWRGcm9tRWwgPSBmcm9tTm9kZXNMb29rdXBba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgZmluZCBhIGR1cGxpY2F0ZSAjaWQgbm9kZSBpbiBjYWNoZSwgcmVwbGFjZSBgZWxgIHdpdGggY2FjaGUgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG1vcnBoIGl0IHRvIHRoZSBjaGlsZCBub2RlLlxuICAgICAgICAgICAgICAgICAgICBpZiAodW5tYXRjaGVkRnJvbUVsICYmIGNvbXBhcmVOb2RlTmFtZXMoY3VyQ2hpbGQsIHVubWF0Y2hlZEZyb21FbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHVubWF0Y2hlZEZyb21FbCwgY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhFbCh1bm1hdGNoZWRGcm9tRWwsIGN1ckNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlQWRkZWQoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGNhbGwgZm9yIGN1ckNoaWxkIGFuZCBpdCdzIGNoaWxkcmVuIHRvIHNlZSBpZiB3ZSBmaW5kIHNvbWV0aGluZyBpblxuICAgICAgICAgICAgICAgICAgLy8gZnJvbU5vZGVzTG9va3VwXG4gICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlQWRkZWQoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gbmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjbGVhbnVwRnJvbUVsKGZyb21FbCwgY3VyRnJvbU5vZGVDaGlsZCwgY3VyRnJvbU5vZGVLZXkpIHtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCBvZiB0aGUgXCJ0byBub2Rlc1wiLiBJZiBjdXJGcm9tTm9kZUNoaWxkIGlzXG4gICAgICAgICAgICAvLyBub24tbnVsbCB0aGVuIHdlIHN0aWxsIGhhdmUgc29tZSBmcm9tIG5vZGVzIGxlZnQgb3ZlciB0aGF0IG5lZWRcbiAgICAgICAgICAgIC8vIHRvIGJlIHJlbW92ZWRcbiAgICAgICAgICAgIHdoaWxlIChjdXJGcm9tTm9kZUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyb21OZXh0U2libGluZyA9IGN1ckZyb21Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKChjdXJGcm9tTm9kZUtleSA9IGdldE5vZGVLZXkoY3VyRnJvbU5vZGVDaGlsZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBub2RlIGlzIGtleWVkIGl0IG1pZ2h0IGJlIG1hdGNoZWQgdXAgbGF0ZXIgc28gd2UgZGVmZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZW1vdmFsIHRvIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgIGFkZEtleWVkUmVtb3ZhbChjdXJGcm9tTm9kZUtleSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugc2tpcCBuZXN0ZWQga2V5ZWQgbm9kZXMgZnJvbSBiZWluZyByZW1vdmVkIHNpbmNlIHRoZXJlIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgIHN0aWxsIGEgY2hhbmNlIHRoZXkgd2lsbCBiZSBtYXRjaGVkIHVwIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY3VyRnJvbU5vZGVDaGlsZCwgZnJvbUVsLCB0cnVlIC8qIHNraXAga2V5ZWQgbm9kZXMgKi8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbW9ycGhFbChmcm9tRWwsIHRvRWwsIGNoaWxkcmVuT25seSkge1xuICAgICAgICAgICAgdmFyIHRvRWxLZXkgPSBnZXROb2RlS2V5KHRvRWwpO1xuXG4gICAgICAgICAgICBpZiAodG9FbEtleSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGFuIGVsZW1lbnQgd2l0aCBhbiBJRCBpcyBiZWluZyBtb3JwaGVkIHRoZW4gaXQgd2lsbCBiZSBpbiB0aGUgZmluYWxcbiAgICAgICAgICAgICAgICAvLyBET00gc28gY2xlYXIgaXQgb3V0IG9mIHRoZSBzYXZlZCBlbGVtZW50cyBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgZGVsZXRlIGZyb21Ob2Rlc0xvb2t1cFt0b0VsS2V5XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk9ubHkpIHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25hbFxuICAgICAgICAgICAgICAgIGlmIChvbkJlZm9yZUVsVXBkYXRlZChmcm9tRWwsIHRvRWwpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGF0dHJpYnV0ZXMgb24gb3JpZ2luYWwgRE9NIGVsZW1lbnQgZmlyc3RcbiAgICAgICAgICAgICAgICBtb3JwaEF0dHJzKGZyb21FbCwgdG9FbCk7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9uYWxcbiAgICAgICAgICAgICAgICBvbkVsVXBkYXRlZChmcm9tRWwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlRWxDaGlsZHJlblVwZGF0ZWQoZnJvbUVsLCB0b0VsKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZyb21FbC5ub2RlTmFtZSAhPT0gJ1RFWFRBUkVBJykge1xuICAgICAgICAgICAgICBtb3JwaENoaWxkcmVuKGZyb21FbCwgdG9FbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzcGVjaWFsRWxIYW5kbGVycy5URVhUQVJFQShmcm9tRWwsIHRvRWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbW9ycGhDaGlsZHJlbihmcm9tRWwsIHRvRWwpIHtcbiAgICAgICAgICAgIHZhciBjdXJUb05vZGVDaGlsZCA9IHRvRWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHZhciBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbUVsLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICB2YXIgY3VyVG9Ob2RlS2V5O1xuICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlS2V5O1xuXG4gICAgICAgICAgICB2YXIgZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgdmFyIHRvTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB2YXIgbWF0Y2hpbmdGcm9tRWw7XG5cbiAgICAgICAgICAgIC8vIHdhbGsgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICBvdXRlcjogd2hpbGUgKGN1clRvTm9kZUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgdG9OZXh0U2libGluZyA9IGN1clRvTm9kZUNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIGN1clRvTm9kZUtleSA9IGdldE5vZGVLZXkoY3VyVG9Ob2RlQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgLy8gd2FsayB0aGUgZnJvbU5vZGUgY2hpbGRyZW4gYWxsIHRoZSB3YXkgdGhyb3VnaFxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJGcm9tTm9kZUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21OZXh0U2libGluZyA9IGN1ckZyb21Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1clRvTm9kZUNoaWxkLmlzU2FtZU5vZGUgJiYgY3VyVG9Ob2RlQ2hpbGQuaXNTYW1lTm9kZShjdXJGcm9tTm9kZUNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRnJvbU5vZGVDaGlsZCA9IGZyb21OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY3VyRnJvbU5vZGVLZXkgPSBnZXROb2RlS2V5KGN1ckZyb21Ob2RlQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJGcm9tTm9kZVR5cGUgPSBjdXJGcm9tTm9kZUNoaWxkLm5vZGVUeXBlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgaWYgdGhlIGN1ckZyb21Ob2RlQ2hpbGQgZG9lc250IGhhdmUgYSBtYXRjaCB3aXRoIHRoZSBjdXJUb05vZGVDaGlsZFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNDb21wYXRpYmxlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IGN1clRvTm9kZUNoaWxkLm5vZGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRnJvbU5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCb3RoIG5vZGVzIGJlaW5nIGNvbXBhcmVkIGFyZSBFbGVtZW50IG5vZGVzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgbm9kZSBoYXMgYSBrZXkgc28gd2Ugd2FudCB0byBtYXRjaCBpdCB1cCB3aXRoIHRoZSBjb3JyZWN0IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkgIT09IGN1ckZyb21Ob2RlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBvcmlnaW5hbCBET00gdHJlZSBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcga2V5IHNvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQncyBjaGVjayBvdXIgbG9va3VwIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBET00gdHJlZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYXRjaGluZ0Zyb21FbCA9IGZyb21Ob2Rlc0xvb2t1cFtjdXJUb05vZGVLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcm9tTmV4dFNpYmxpbmcgPT09IG1hdGNoaW5nRnJvbUVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Igc2luZ2xlIGVsZW1lbnQgcmVtb3ZhbHMuIFRvIGF2b2lkIHJlbW92aW5nIHRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBET00gbm9kZSBvdXQgb2YgdGhlIHRyZWUgKHNpbmNlIHRoYXQgY2FuIGJyZWFrIENTUyB0cmFuc2l0aW9ucywgZXRjLiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwgaW5zdGVhZCBkaXNjYXJkIHRoZSBjdXJyZW50IG5vZGUgYW5kIHdhaXQgdW50aWwgdGhlIG5leHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIHRvIHByb3Blcmx5IG1hdGNoIHVwIHRoZSBrZXllZCB0YXJnZXQgZWxlbWVudCB3aXRoIGl0cyBtYXRjaGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGluIHRoZSBvcmlnaW5hbCB0cmVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbWF0Y2hpbmcga2V5ZWQgZWxlbWVudCBzb21ld2hlcmUgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBtb3ZlIHRoZSBvcmlnaW5hbCBET00gbm9kZSBpbnRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCBtb3JwaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSB1c2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQgb2YgcmVwbGFjZUNoaWxkIGJlY2F1c2Ugd2Ugd2FudCB0byBnbyB0aHJvdWdoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBgcmVtb3ZlTm9kZSgpYCBmdW5jdGlvbiBmb3IgdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBkaXNjYXJkZWQgc28gdGhhdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgbGlmZWN5Y2xlIGhvb2tzIGFyZSBjb3JyZWN0bHkgaW52b2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRWwuaW5zZXJ0QmVmb3JlKG1hdGNoaW5nRnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tTmV4dFNpYmxpbmcgPSBjdXJGcm9tTm9kZUNoaWxkLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZW1vdmFsIHRvIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoY3VyRnJvbU5vZGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugc2tpcCBuZXN0ZWQga2V5ZWQgbm9kZXMgZnJvbSBiZWluZyByZW1vdmVkIHNpbmNlIHRoZXJlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBzdGlsbCBhIGNoYW5jZSB0aGV5IHdpbGwgYmUgbWF0Y2hlZCB1cCBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gbWF0Y2hpbmdGcm9tRWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZXMgYXJlIG5vdCBjb21wYXRpYmxlIHNpbmNlIHRoZSBcInRvXCIgbm9kZSBoYXMgYSBrZXkgYW5kIHRoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm8gbWF0Y2hpbmcga2V5ZWQgbm9kZSBpbiB0aGUgc291cmNlIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBhdGlibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyRnJvbU5vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGhhcyBhIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBhdGlibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBhdGlibGUgPSBpc0NvbXBhdGlibGUgIT09IGZhbHNlICYmIGNvbXBhcmVOb2RlTmFtZXMoY3VyRnJvbU5vZGVDaGlsZCwgY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBhdGlibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgY29tcGF0aWJsZSBET00gZWxlbWVudHMgc28gdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IFwiZnJvbVwiIG5vZGUgdG8gbWF0Y2ggdGhlIGN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IERPTSBub2RlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNT1JQSFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKGN1ckZyb21Ob2RlQ2hpbGQsIGN1clRvTm9kZUNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyRnJvbU5vZGVUeXBlID09PSBURVhUX05PREUgfHwgY3VyRnJvbU5vZGVUeXBlID09IENPTU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggbm9kZXMgYmVpbmcgY29tcGFyZWQgYXJlIFRleHQgb3IgQ29tbWVudCBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHVwZGF0ZSBub2RlVmFsdWUgb24gdGhlIG9yaWdpbmFsIG5vZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHRleHQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRnJvbU5vZGVDaGlsZC5ub2RlVmFsdWUgIT09IGN1clRvTm9kZUNoaWxkLm5vZGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkLm5vZGVWYWx1ZSA9IGN1clRvTm9kZUNoaWxkLm5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBhdGlibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgYm90aCB0aGUgXCJ0b1wiIGNoaWxkIGFuZCB0aGUgXCJmcm9tXCIgY2hpbGQgc2luY2Ugd2UgZm91bmQgYSBtYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90aGluZyBlbHNlIHRvIGRvIGFzIHdlIGFscmVhZHkgcmVjdXJzaXZlbHkgY2FsbGVkIG1vcnBoQ2hpbGRyZW4gYWJvdmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1clRvTm9kZUNoaWxkID0gdG9OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGNvbXBhdGlibGUgbWF0Y2ggc28gcmVtb3ZlIHRoZSBvbGQgbm9kZSBmcm9tIHRoZSBET00gYW5kIGNvbnRpbnVlIHRyeWluZyB0byBmaW5kIGFcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggaW4gdGhlIG9yaWdpbmFsIERPTS4gSG93ZXZlciwgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSBmcm9tIG5vZGUgaXMgbm90IGtleWVkXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBrZXllZCBub2RlIG1pZ2h0IG1hdGNoIHVwIHdpdGggYSBub2RlIHNvbWV3aGVyZSBlbHNlIGluIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyB0YXJnZXQgdHJlZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXNjYXJkIGl0IGp1c3QgeWV0IHNpbmNlIGl0IHN0aWxsIG1pZ2h0IGZpbmQgYVxuICAgICAgICAgICAgICAgICAgICAvLyBob21lIGluIHRoZSBmaW5hbCBET00gdHJlZS4gQWZ0ZXIgZXZlcnl0aGluZyBpcyBkb25lIHdlIHdpbGwgcmVtb3ZlIGFueSBrZXllZCBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGRpZG4ndCBmaW5kIGEgaG9tZVxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRnJvbU5vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBub2RlIGlzIGtleWVkIGl0IG1pZ2h0IGJlIG1hdGNoZWQgdXAgbGF0ZXIgc28gd2UgZGVmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgcmVtb3ZhbCB0byBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkS2V5ZWRSZW1vdmFsKGN1ckZyb21Ob2RlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IHdlIHNraXAgbmVzdGVkIGtleWVkIG5vZGVzIGZyb20gYmVpbmcgcmVtb3ZlZCBzaW5jZSB0aGVyZSBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgc3RpbGwgYSBjaGFuY2UgdGhleSB3aWxsIGJlIG1hdGNoZWQgdXAgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY3VyRnJvbU5vZGVDaGlsZCwgZnJvbUVsLCB0cnVlIC8qIHNraXAga2V5ZWQgbm9kZXMgKi8pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY3VyRnJvbU5vZGVDaGlsZCA9IGZyb21OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICB9IC8vIEVORDogd2hpbGUoY3VyRnJvbU5vZGVDaGlsZCkge31cblxuICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciB0aGVuIHdlIGRpZCBub3QgZmluZCBhIGNhbmRpZGF0ZSBtYXRjaCBmb3JcbiAgICAgICAgICAgICAgICAvLyBvdXIgXCJ0byBub2RlXCIgYW5kIHdlIGV4aGF1c3RlZCBhbGwgb2YgdGhlIGNoaWxkcmVuIFwiZnJvbVwiXG4gICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRoZXJlZm9yZSwgd2Ugd2lsbCBqdXN0IGFwcGVuZCB0aGUgY3VycmVudCBcInRvXCIgbm9kZVxuICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBlbmRcbiAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlS2V5ICYmIChtYXRjaGluZ0Zyb21FbCA9IGZyb21Ob2Rlc0xvb2t1cFtjdXJUb05vZGVLZXldKSAmJiBjb21wYXJlTm9kZU5hbWVzKG1hdGNoaW5nRnJvbUVsLCBjdXJUb05vZGVDaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLmFwcGVuZENoaWxkKG1hdGNoaW5nRnJvbUVsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTU9SUEhcbiAgICAgICAgICAgICAgICAgICAgbW9ycGhFbChtYXRjaGluZ0Zyb21FbCwgY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvbkJlZm9yZU5vZGVBZGRlZFJlc3VsdCA9IG9uQmVmb3JlTm9kZUFkZGVkKGN1clRvTm9kZUNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSBvbkJlZm9yZU5vZGVBZGRlZFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clRvTm9kZUNoaWxkLmFjdHVhbGl6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clRvTm9kZUNoaWxkID0gY3VyVG9Ob2RlQ2hpbGQuYWN0dWFsaXplKGZyb21FbC5vd25lckRvY3VtZW50IHx8IGRvYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRWwuYXBwZW5kQ2hpbGQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZUFkZGVkKGN1clRvTm9kZUNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1clRvTm9kZUNoaWxkID0gdG9OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGVhbnVwRnJvbUVsKGZyb21FbCwgY3VyRnJvbU5vZGVDaGlsZCwgY3VyRnJvbU5vZGVLZXkpO1xuXG4gICAgICAgICAgICB2YXIgc3BlY2lhbEVsSGFuZGxlciA9IHNwZWNpYWxFbEhhbmRsZXJzW2Zyb21FbC5ub2RlTmFtZV07XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEVsSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHNwZWNpYWxFbEhhbmRsZXIoZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBFTkQ6IG1vcnBoQ2hpbGRyZW4oLi4uKVxuXG4gICAgICAgIHZhciBtb3JwaGVkTm9kZSA9IGZyb21Ob2RlO1xuICAgICAgICB2YXIgbW9ycGhlZE5vZGVUeXBlID0gbW9ycGhlZE5vZGUubm9kZVR5cGU7XG4gICAgICAgIHZhciB0b05vZGVUeXBlID0gdG9Ob2RlLm5vZGVUeXBlO1xuXG4gICAgICAgIGlmICghY2hpbGRyZW5Pbmx5KSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGdpdmVuIHR3byBET00gbm9kZXMgdGhhdCBhcmUgbm90XG4gICAgICAgICAgICAvLyBjb21wYXRpYmxlIChlLmcuIDxkaXY+IC0tPiA8c3Bhbj4gb3IgPGRpdj4gLS0+IFRFWFQpXG4gICAgICAgICAgICBpZiAobW9ycGhlZE5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9Ob2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZU5vZGVOYW1lcyhmcm9tTm9kZSwgdG9Ob2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Ob2RlRGlzY2FyZGVkKGZyb21Ob2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gbW92ZUNoaWxkcmVuKGZyb21Ob2RlLCBjcmVhdGVFbGVtZW50TlModG9Ob2RlLm5vZGVOYW1lLCB0b05vZGUubmFtZXNwYWNlVVJJKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBHb2luZyBmcm9tIGFuIGVsZW1lbnQgbm9kZSB0byBhIHRleHQgbm9kZVxuICAgICAgICAgICAgICAgICAgICBtb3JwaGVkTm9kZSA9IHRvTm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vcnBoZWROb2RlVHlwZSA9PT0gVEVYVF9OT0RFIHx8IG1vcnBoZWROb2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7IC8vIFRleHQgb3IgY29tbWVudCBub2RlXG4gICAgICAgICAgICAgICAgaWYgKHRvTm9kZVR5cGUgPT09IG1vcnBoZWROb2RlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9ycGhlZE5vZGUubm9kZVZhbHVlICE9PSB0b05vZGUubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JwaGVkTm9kZS5ub2RlVmFsdWUgPSB0b05vZGUubm9kZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vcnBoZWROb2RlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRleHQgbm9kZSB0byBzb21ldGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICBtb3JwaGVkTm9kZSA9IHRvTm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9ycGhlZE5vZGUgPT09IHRvTm9kZSkge1xuICAgICAgICAgICAgLy8gVGhlIFwidG8gbm9kZVwiIHdhcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBcImZyb20gbm9kZVwiIHNvIHdlIGhhZCB0b1xuICAgICAgICAgICAgLy8gdG9zcyBvdXQgdGhlIFwiZnJvbSBub2RlXCIgYW5kIHVzZSB0aGUgXCJ0byBub2RlXCJcbiAgICAgICAgICAgIG9uTm9kZURpc2NhcmRlZChmcm9tTm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodG9Ob2RlLmlzU2FtZU5vZGUgJiYgdG9Ob2RlLmlzU2FtZU5vZGUobW9ycGhlZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtb3JwaEVsKG1vcnBoZWROb2RlLCB0b05vZGUsIGNoaWxkcmVuT25seSk7XG5cbiAgICAgICAgICAgIC8vIFdlIG5vdyBuZWVkIHRvIGxvb3Agb3ZlciBhbnkga2V5ZWQgbm9kZXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlXG4gICAgICAgICAgICAvLyByZW1vdmVkLiBXZSBvbmx5IGRvIHRoZSByZW1vdmFsIGlmIHdlIGtub3cgdGhhdCB0aGUga2V5ZWQgbm9kZVxuICAgICAgICAgICAgLy8gbmV2ZXIgZm91bmQgYSBtYXRjaC4gV2hlbiBhIGtleWVkIG5vZGUgaXMgbWF0Y2hlZCB1cCB3ZSByZW1vdmVcbiAgICAgICAgICAgIC8vIGl0IG91dCBvZiBmcm9tTm9kZXNMb29rdXAgYW5kIHdlIHVzZSBmcm9tTm9kZXNMb29rdXAgdG8gZGV0ZXJtaW5lXG4gICAgICAgICAgICAvLyBpZiBhIGtleWVkIG5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB1cCBvciBub3RcbiAgICAgICAgICAgIGlmIChrZXllZFJlbW92YWxMaXN0KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsZW49a2V5ZWRSZW1vdmFsTGlzdC5sZW5ndGg7IGk8bGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsVG9SZW1vdmUgPSBmcm9tTm9kZXNMb29rdXBba2V5ZWRSZW1vdmFsTGlzdFtpXV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbFRvUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGVsVG9SZW1vdmUsIGVsVG9SZW1vdmUucGFyZW50Tm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbk9ubHkgJiYgbW9ycGhlZE5vZGUgIT09IGZyb21Ob2RlICYmIGZyb21Ob2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZS5hY3R1YWxpemUpIHtcbiAgICAgICAgICAgICAgICBtb3JwaGVkTm9kZSA9IG1vcnBoZWROb2RlLmFjdHVhbGl6ZShmcm9tTm9kZS5vd25lckRvY3VtZW50IHx8IGRvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYWQgdG8gc3dhcCBvdXQgdGhlIGZyb20gbm9kZSB3aXRoIGEgbmV3IG5vZGUgYmVjYXVzZSB0aGUgb2xkXG4gICAgICAgICAgICAvLyBub2RlIHdhcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgbm9kZSB0aGVuIHdlIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIG9sZCBET00gbm9kZSBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWUuIFRoaXMgaXMgb25seVxuICAgICAgICAgICAgLy8gcG9zc2libGUgaWYgdGhlIG9yaWdpbmFsIERPTSBub2RlIHdhcyBwYXJ0IG9mIGEgRE9NIHRyZWUgd2hpY2hcbiAgICAgICAgICAgIC8vIHdlIGtub3cgaXMgdGhlIGNhc2UgaWYgaXQgaGFzIGEgcGFyZW50IG5vZGUuXG4gICAgICAgICAgICBmcm9tTm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChtb3JwaGVkTm9kZSwgZnJvbU5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vcnBoZWROb2RlO1xuICAgIH07XG59XG5cbnZhciBtb3JwaGRvbSA9IG1vcnBoZG9tRmFjdG9yeShtb3JwaEF0dHJzKTtcblxuZXhwb3J0IGRlZmF1bHQgbW9ycGhkb207XG4iLCAiaW1wb3J0IHtcbiAgUEhYX0NPTVBPTkVOVCxcbiAgUEhYX0RJU0FCTEVfV0lUSCxcbiAgUEhYX0ZFRURCQUNLX0ZPUixcbiAgUEhYX1BSVU5FLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1NFU1NJT04sXG4gIFBIWF9TS0lQLFxuICBQSFhfU1RBVElDLFxuICBQSFhfVFJJR0dFUl9BQ1RJT04sXG4gIFBIWF9VUERBVEVcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgZGV0ZWN0RHVwbGljYXRlSWRzLFxuICBpc0NpZFxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBET01Qb3N0TW9ycGhSZXN0b3JlciBmcm9tIFwiLi9kb21fcG9zdF9tb3JwaF9yZXN0b3JlclwiXG5pbXBvcnQgbW9ycGhkb20gZnJvbSBcIm1vcnBoZG9tXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NUGF0Y2gge1xuICBzdGF0aWMgcGF0Y2hFbChmcm9tRWwsIHRvRWwsIGFjdGl2ZUVsZW1lbnQpe1xuICAgIG1vcnBoZG9tKGZyb21FbCwgdG9FbCwge1xuICAgICAgY2hpbGRyZW5Pbmx5OiBmYWxzZSxcbiAgICAgIG9uQmVmb3JlRWxVcGRhdGVkOiAoZnJvbUVsLCB0b0VsKSA9PiB7XG4gICAgICAgIGlmKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC5pc1NhbWVOb2RlKGZyb21FbCkgJiYgRE9NLmlzRm9ybUlucHV0KGZyb21FbCkpe1xuICAgICAgICAgIERPTS5tZXJnZUZvY3VzZWRJbnB1dChmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY29uc3RydWN0b3IodmlldywgY29udGFpbmVyLCBpZCwgaHRtbCwgdGFyZ2V0Q0lEKXtcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5saXZlU29ja2V0ID0gdmlldy5saXZlU29ja2V0XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXJcbiAgICB0aGlzLmlkID0gaWRcbiAgICB0aGlzLnJvb3RJRCA9IHZpZXcucm9vdC5pZFxuICAgIHRoaXMuaHRtbCA9IGh0bWxcbiAgICB0aGlzLnRhcmdldENJRCA9IHRhcmdldENJRFxuICAgIHRoaXMuY2lkUGF0Y2ggPSBpc0NpZCh0aGlzLnRhcmdldENJRClcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHtcbiAgICAgIGJlZm9yZWFkZGVkOiBbXSwgYmVmb3JldXBkYXRlZDogW10sIGJlZm9yZXBoeENoaWxkQWRkZWQ6IFtdLFxuICAgICAgYWZ0ZXJhZGRlZDogW10sIGFmdGVydXBkYXRlZDogW10sIGFmdGVyZGlzY2FyZGVkOiBbXSwgYWZ0ZXJwaHhDaGlsZEFkZGVkOiBbXSxcbiAgICAgIGFmdGVydHJhbnNpdGlvbnNEaXNjYXJkZWQ6IFtdXG4gICAgfVxuICB9XG5cbiAgYmVmb3JlKGtpbmQsIGNhbGxiYWNrKXsgdGhpcy5jYWxsYmFja3NbYGJlZm9yZSR7a2luZH1gXS5wdXNoKGNhbGxiYWNrKSB9XG4gIGFmdGVyKGtpbmQsIGNhbGxiYWNrKXsgdGhpcy5jYWxsYmFja3NbYGFmdGVyJHtraW5kfWBdLnB1c2goY2FsbGJhY2spIH1cblxuICB0cmFja0JlZm9yZShraW5kLCAuLi5hcmdzKXtcbiAgICB0aGlzLmNhbGxiYWNrc1tgYmVmb3JlJHtraW5kfWBdLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soLi4uYXJncykpXG4gIH1cblxuICB0cmFja0FmdGVyKGtpbmQsIC4uLmFyZ3Mpe1xuICAgIHRoaXMuY2FsbGJhY2tzW2BhZnRlciR7a2luZH1gXS5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKC4uLmFyZ3MpKVxuICB9XG5cbiAgbWFya1BydW5hYmxlQ29udGVudEZvclJlbW92YWwoKXtcbiAgICBET00uYWxsKHRoaXMuY29udGFpbmVyLCBcIltwaHgtdXBkYXRlPWFwcGVuZF0gPiAqLCBbcGh4LXVwZGF0ZT1wcmVwZW5kXSA+ICpcIiwgZWwgPT4ge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFBIWF9QUlVORSwgXCJcIilcbiAgICB9KVxuICB9XG5cbiAgcGVyZm9ybSgpe1xuICAgIGxldCB7dmlldywgbGl2ZVNvY2tldCwgY29udGFpbmVyLCBodG1sfSA9IHRoaXNcbiAgICBsZXQgdGFyZ2V0Q29udGFpbmVyID0gdGhpcy5pc0NJRFBhdGNoKCkgPyB0aGlzLnRhcmdldENJRENvbnRhaW5lcihodG1sKSA6IGNvbnRhaW5lclxuICAgIGlmKHRoaXMuaXNDSURQYXRjaCgpICYmICF0YXJnZXRDb250YWluZXIpeyByZXR1cm4gfVxuXG4gICAgbGV0IGZvY3VzZWQgPSBsaXZlU29ja2V0LmdldEFjdGl2ZUVsZW1lbnQoKVxuICAgIGxldCB7c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZH0gPSBmb2N1c2VkICYmIERPTS5oYXNTZWxlY3Rpb25SYW5nZShmb2N1c2VkKSA/IGZvY3VzZWQgOiB7fVxuICAgIGxldCBwaHhVcGRhdGUgPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX1VQREFURSlcbiAgICBsZXQgcGh4RmVlZGJhY2tGb3IgPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX0ZFRURCQUNLX0ZPUilcbiAgICBsZXQgZGlzYWJsZVdpdGggPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX0RJU0FCTEVfV0lUSClcbiAgICBsZXQgcGh4VHJpZ2dlckV4dGVybmFsID0gbGl2ZVNvY2tldC5iaW5kaW5nKFBIWF9UUklHR0VSX0FDVElPTilcbiAgICBsZXQgcGh4UmVtb3ZlID0gbGl2ZVNvY2tldC5iaW5kaW5nKFwicmVtb3ZlXCIpXG4gICAgbGV0IGFkZGVkID0gW11cbiAgICBsZXQgdXBkYXRlcyA9IFtdXG4gICAgbGV0IGFwcGVuZFByZXBlbmRVcGRhdGVzID0gW11cbiAgICBsZXQgcGVuZGluZ1JlbW92ZXMgPSBbXVxuICAgIGxldCBleHRlcm5hbEZvcm1UcmlnZ2VyZWQgPSBudWxsXG5cbiAgICBsZXQgZGlmZkhUTUwgPSBsaXZlU29ja2V0LnRpbWUoXCJwcmVtb3JwaCBjb250YWluZXIgcHJlcFwiLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZERpZmZIVE1MKGNvbnRhaW5lciwgaHRtbCwgcGh4VXBkYXRlLCB0YXJnZXRDb250YWluZXIpXG4gICAgfSlcblxuICAgIHRoaXMudHJhY2tCZWZvcmUoXCJhZGRlZFwiLCBjb250YWluZXIpXG4gICAgdGhpcy50cmFja0JlZm9yZShcInVwZGF0ZWRcIiwgY29udGFpbmVyLCBjb250YWluZXIpXG5cbiAgICBsaXZlU29ja2V0LnRpbWUoXCJtb3JwaGRvbVwiLCAoKSA9PiB7XG4gICAgICBtb3JwaGRvbSh0YXJnZXRDb250YWluZXIsIGRpZmZIVE1MLCB7XG4gICAgICAgIGNoaWxkcmVuT25seTogdGFyZ2V0Q29udGFpbmVyLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSA9PT0gbnVsbCxcbiAgICAgICAgZ2V0Tm9kZUtleTogKG5vZGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gRE9NLmlzUGh4RGVzdHJveWVkKG5vZGUpID8gbnVsbCA6IG5vZGUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVOb2RlQWRkZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJhY2tCZWZvcmUoXCJhZGRlZFwiLCBlbClcbiAgICAgICAgICByZXR1cm4gZWxcbiAgICAgICAgfSxcbiAgICAgICAgb25Ob2RlQWRkZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIC8vIGhhY2sgdG8gZml4IFNhZmFyaSBoYW5kbGluZyBvZiBpbWcgc3Jjc2V0IGFuZCB2aWRlbyB0YWdzXG4gICAgICAgICAgaWYoZWwgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICYmIGVsLnNyY3NldCl7XG4gICAgICAgICAgICBlbC5zcmNzZXQgPSBlbC5zcmNzZXRcbiAgICAgICAgICB9IGVsc2UgaWYoZWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50ICYmIGVsLmF1dG9wbGF5KXtcbiAgICAgICAgICAgIGVsLnBsYXkoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihET00uaXNOb3dUcmlnZ2VyRm9ybUV4dGVybmFsKGVsLCBwaHhUcmlnZ2VyRXh0ZXJuYWwpKXtcbiAgICAgICAgICAgIGV4dGVybmFsRm9ybVRyaWdnZXJlZCA9IGVsXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vaW5wdXQgaGFuZGxpbmdcbiAgICAgICAgICBET00uZGlzY2FyZEVycm9yKHRhcmdldENvbnRhaW5lciwgZWwsIHBoeEZlZWRiYWNrRm9yKVxuICAgICAgICAgIC8vIG5lc3RlZCB2aWV3IGhhbmRsaW5nXG4gICAgICAgICAgaWYoKERPTS5pc1BoeENoaWxkKGVsKSAmJiB2aWV3Lm93bnNFbGVtZW50KGVsKSkgfHwgRE9NLmlzUGh4U3RpY2t5KGVsKSAmJiB2aWV3Lm93bnNFbGVtZW50KGVsLnBhcmVudE5vZGUpKXtcbiAgICAgICAgICAgIHRoaXMudHJhY2tBZnRlcihcInBoeENoaWxkQWRkZWRcIiwgZWwpXG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZGVkLnB1c2goZWwpXG4gICAgICAgIH0sXG4gICAgICAgIG9uTm9kZURpc2NhcmRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgLy8gbmVzdGVkIHZpZXcgaGFuZGxpbmdcbiAgICAgICAgICBpZihET00uaXNQaHhDaGlsZChlbCkgfHwgRE9NLmlzUGh4U3RpY2t5KGVsKSl7IGxpdmVTb2NrZXQuZGVzdHJveVZpZXdCeUVsKGVsKSB9XG4gICAgICAgICAgdGhpcy50cmFja0FmdGVyKFwiZGlzY2FyZGVkXCIsIGVsKVxuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZU5vZGVEaXNjYXJkZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIGlmKGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX1BSVU5FKSAhPT0gbnVsbCl7IHJldHVybiB0cnVlIH1cbiAgICAgICAgICBpZihlbC5wYXJlbnROb2RlICE9PSBudWxsICYmIERPTS5pc1BoeFVwZGF0ZShlbC5wYXJlbnROb2RlLCBwaHhVcGRhdGUsIFtcImFwcGVuZFwiLCBcInByZXBlbmRcIl0pICYmIGVsLmlkKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICBpZihlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKHBoeFJlbW92ZSkpe1xuICAgICAgICAgICAgcGVuZGluZ1JlbW92ZXMucHVzaChlbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZih0aGlzLnNraXBDSURTaWJsaW5nKGVsKSl7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb25FbFVwZGF0ZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIGlmKERPTS5pc05vd1RyaWdnZXJGb3JtRXh0ZXJuYWwoZWwsIHBoeFRyaWdnZXJFeHRlcm5hbCkpe1xuICAgICAgICAgICAgZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkID0gZWxcbiAgICAgICAgICB9XG4gICAgICAgICAgdXBkYXRlcy5wdXNoKGVsKVxuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZUVsVXBkYXRlZDogKGZyb21FbCwgdG9FbCkgPT4ge1xuICAgICAgICAgIERPTS5jbGVhbkNoaWxkTm9kZXModG9FbCwgcGh4VXBkYXRlKVxuICAgICAgICAgIGlmKHRoaXMuc2tpcENJRFNpYmxpbmcodG9FbCkpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIGlmKERPTS5pc1BoeFN0aWNreShmcm9tRWwpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICBpZihET00uaXNJZ25vcmVkKGZyb21FbCwgcGh4VXBkYXRlKSl7XG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICBET00ubWVyZ2VBdHRycyhmcm9tRWwsIHRvRWwsIHtpc0lnbm9yZWQ6IHRydWV9KVxuICAgICAgICAgICAgdXBkYXRlcy5wdXNoKGZyb21FbClcbiAgICAgICAgICAgIERPTS5hcHBseVN0aWNreU9wZXJhdGlvbnMoZnJvbUVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGZyb21FbC50eXBlID09PSBcIm51bWJlclwiICYmIChmcm9tRWwudmFsaWRpdHkgJiYgZnJvbUVsLnZhbGlkaXR5LmJhZElucHV0KSl7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgaWYoIURPTS5zeW5jUGVuZGluZ1JlZihmcm9tRWwsIHRvRWwsIGRpc2FibGVXaXRoKSl7XG4gICAgICAgICAgICBpZihET00uaXNVcGxvYWRJbnB1dChmcm9tRWwpKXtcbiAgICAgICAgICAgICAgdGhpcy50cmFja0JlZm9yZShcInVwZGF0ZWRcIiwgZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgICB1cGRhdGVzLnB1c2goZnJvbUVsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRE9NLmFwcGx5U3RpY2t5T3BlcmF0aW9ucyhmcm9tRWwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBuZXN0ZWQgdmlldyBoYW5kbGluZ1xuICAgICAgICAgIGlmKERPTS5pc1BoeENoaWxkKHRvRWwpKXtcbiAgICAgICAgICAgIGxldCBwcmV2U2Vzc2lvbiA9IGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04pXG4gICAgICAgICAgICBET00ubWVyZ2VBdHRycyhmcm9tRWwsIHRvRWwsIHtleGNsdWRlOiBbUEhYX1NUQVRJQ119KVxuICAgICAgICAgICAgaWYocHJldlNlc3Npb24gIT09IFwiXCIpeyBmcm9tRWwuc2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OLCBwcmV2U2Vzc2lvbikgfVxuICAgICAgICAgICAgZnJvbUVsLnNldEF0dHJpYnV0ZShQSFhfUk9PVF9JRCwgdGhpcy5yb290SUQpXG4gICAgICAgICAgICBET00uYXBwbHlTdGlja3lPcGVyYXRpb25zKGZyb21FbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlucHV0IGhhbmRsaW5nXG4gICAgICAgICAgRE9NLmNvcHlQcml2YXRlcyh0b0VsLCBmcm9tRWwpXG4gICAgICAgICAgRE9NLmRpc2NhcmRFcnJvcih0YXJnZXRDb250YWluZXIsIHRvRWwsIHBoeEZlZWRiYWNrRm9yKVxuXG4gICAgICAgICAgbGV0IGlzRm9jdXNlZEZvcm1FbCA9IGZvY3VzZWQgJiYgZnJvbUVsLmlzU2FtZU5vZGUoZm9jdXNlZCkgJiYgRE9NLmlzRm9ybUlucHV0KGZyb21FbClcbiAgICAgICAgICBpZihpc0ZvY3VzZWRGb3JtRWwpe1xuICAgICAgICAgICAgdGhpcy50cmFja0JlZm9yZShcInVwZGF0ZWRcIiwgZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgRE9NLm1lcmdlRm9jdXNlZElucHV0KGZyb21FbCwgdG9FbClcbiAgICAgICAgICAgIERPTS5zeW5jQXR0cnNUb1Byb3BzKGZyb21FbClcbiAgICAgICAgICAgIHVwZGF0ZXMucHVzaChmcm9tRWwpXG4gICAgICAgICAgICBET00uYXBwbHlTdGlja3lPcGVyYXRpb25zKGZyb21FbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihET00uaXNQaHhVcGRhdGUodG9FbCwgcGh4VXBkYXRlLCBbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKSl7XG4gICAgICAgICAgICAgIGFwcGVuZFByZXBlbmRVcGRhdGVzLnB1c2gobmV3IERPTVBvc3RNb3JwaFJlc3RvcmVyKGZyb21FbCwgdG9FbCwgdG9FbC5nZXRBdHRyaWJ1dGUocGh4VXBkYXRlKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBET00uc3luY0F0dHJzVG9Qcm9wcyh0b0VsKVxuICAgICAgICAgICAgRE9NLmFwcGx5U3RpY2t5T3BlcmF0aW9ucyh0b0VsKVxuICAgICAgICAgICAgdGhpcy50cmFja0JlZm9yZShcInVwZGF0ZWRcIiwgZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmKGxpdmVTb2NrZXQuaXNEZWJ1Z0VuYWJsZWQoKSl7IGRldGVjdER1cGxpY2F0ZUlkcygpIH1cblxuICAgIGlmKGFwcGVuZFByZXBlbmRVcGRhdGVzLmxlbmd0aCA+IDApe1xuICAgICAgbGl2ZVNvY2tldC50aW1lKFwicG9zdC1tb3JwaCBhcHBlbmQvcHJlcGVuZCByZXN0b3JhdGlvblwiLCAoKSA9PiB7XG4gICAgICAgIGFwcGVuZFByZXBlbmRVcGRhdGVzLmZvckVhY2godXBkYXRlID0+IHVwZGF0ZS5wZXJmb3JtKCkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGxpdmVTb2NrZXQuc2lsZW5jZUV2ZW50cygoKSA9PiBET00ucmVzdG9yZUZvY3VzKGZvY3VzZWQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpKVxuICAgIERPTS5kaXNwYXRjaEV2ZW50KGRvY3VtZW50LCBcInBoeDp1cGRhdGVcIilcbiAgICBhZGRlZC5mb3JFYWNoKGVsID0+IHRoaXMudHJhY2tBZnRlcihcImFkZGVkXCIsIGVsKSlcbiAgICB1cGRhdGVzLmZvckVhY2goZWwgPT4gdGhpcy50cmFja0FmdGVyKFwidXBkYXRlZFwiLCBlbCkpXG5cbiAgICBpZihwZW5kaW5nUmVtb3Zlcy5sZW5ndGggPiAwKXtcbiAgICAgIGxpdmVTb2NrZXQudHJhbnNpdGlvblJlbW92ZXMocGVuZGluZ1JlbW92ZXMpXG4gICAgICBsaXZlU29ja2V0LnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICBwZW5kaW5nUmVtb3Zlcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICBsZXQgY2hpbGQgPSBET00uZmlyc3RQaHhDaGlsZChlbClcbiAgICAgICAgICBpZihjaGlsZCl7IGxpdmVTb2NrZXQuZGVzdHJveVZpZXdCeUVsKGNoaWxkKSB9XG4gICAgICAgICAgZWwucmVtb3ZlKClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy50cmFja0FmdGVyKFwidHJhbnNpdGlvbnNEaXNjYXJkZWRcIiwgcGVuZGluZ1JlbW92ZXMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmKGV4dGVybmFsRm9ybVRyaWdnZXJlZCl7XG4gICAgICBsaXZlU29ja2V0LmRpc2Nvbm5lY3QoKVxuICAgICAgZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkLnN1Ym1pdCgpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpc0NJRFBhdGNoKCl7IHJldHVybiB0aGlzLmNpZFBhdGNoIH1cblxuICBza2lwQ0lEU2libGluZyhlbCl7XG4gICAgcmV0dXJuIGVsLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX1NLSVApICE9PSBudWxsXG4gIH1cblxuICB0YXJnZXRDSURDb250YWluZXIoaHRtbCl7XG4gICAgaWYoIXRoaXMuaXNDSURQYXRjaCgpKXsgcmV0dXJuIH1cbiAgICBsZXQgW2ZpcnN0LCAuLi5yZXN0XSA9IERPTS5maW5kQ29tcG9uZW50Tm9kZUxpc3QodGhpcy5jb250YWluZXIsIHRoaXMudGFyZ2V0Q0lEKVxuICAgIGlmKHJlc3QubGVuZ3RoID09PSAwICYmIERPTS5jaGlsZE5vZGVMZW5ndGgoaHRtbCkgPT09IDEpe1xuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaXJzdCAmJiBmaXJzdC5wYXJlbnROb2RlXG4gICAgfVxuICB9XG5cbiAgLy8gYnVpbGRzIEhUTUwgZm9yIG1vcnBoZG9tIHBhdGNoXG4gIC8vIC0gZm9yIGZ1bGwgcGF0Y2hlcyBvZiBMaXZlVmlldyBvciBhIGNvbXBvbmVudCB3aXRoIGEgc2luZ2xlXG4gIC8vICAgcm9vdCBub2RlLCBzaW1wbHkgcmV0dXJucyB0aGUgSFRNTFxuICAvLyAtIGZvciBwYXRjaGVzIG9mIGEgY29tcG9uZW50IHdpdGggbXVsdGlwbGUgcm9vdCBub2RlcywgdGhlXG4gIC8vICAgcGFyZW50IG5vZGUgYmVjb21lcyB0aGUgdGFyZ2V0IGNvbnRhaW5lciBhbmQgbm9uLWNvbXBvbmVudFxuICAvLyAgIHNpYmxpbmdzIGFyZSBtYXJrZWQgYXMgc2tpcC5cbiAgYnVpbGREaWZmSFRNTChjb250YWluZXIsIGh0bWwsIHBoeFVwZGF0ZSwgdGFyZ2V0Q29udGFpbmVyKXtcbiAgICBsZXQgaXNDSURQYXRjaCA9IHRoaXMuaXNDSURQYXRjaCgpXG4gICAgbGV0IGlzQ0lEV2l0aFNpbmdsZVJvb3QgPSBpc0NJRFBhdGNoICYmIHRhcmdldENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkgPT09IHRoaXMudGFyZ2V0Q0lELnRvU3RyaW5nKClcbiAgICBpZighaXNDSURQYXRjaCB8fCBpc0NJRFdpdGhTaW5nbGVSb290KXtcbiAgICAgIHJldHVybiBodG1sXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBvbmVudCBwYXRjaCB3aXRoIG11bHRpcGxlIENJRCByb290c1xuICAgICAgbGV0IGRpZmZDb250YWluZXIgPSBudWxsXG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIilcbiAgICAgIGRpZmZDb250YWluZXIgPSBET00uY2xvbmVOb2RlKHRhcmdldENvbnRhaW5lcilcbiAgICAgIGxldCBbZmlyc3RDb21wb25lbnQsIC4uLnJlc3RdID0gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdChkaWZmQ29udGFpbmVyLCB0aGlzLnRhcmdldENJRClcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWxcbiAgICAgIHJlc3QuZm9yRWFjaChlbCA9PiBlbC5yZW1vdmUoKSlcbiAgICAgIEFycmF5LmZyb20oZGlmZkNvbnRhaW5lci5jaGlsZE5vZGVzKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgLy8gd2UgY2FuIG9ubHkgc2tpcCB0cmFja2FibGUgbm9kZXMgd2l0aCBhbiBJRFxuICAgICAgICBpZihjaGlsZC5pZCAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgY2hpbGQuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpICE9PSB0aGlzLnRhcmdldENJRC50b1N0cmluZygpKXtcbiAgICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoUEhYX1NLSVAsIFwiXCIpXG4gICAgICAgICAgY2hpbGQuaW5uZXJIVE1MID0gXCJcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgQXJyYXkuZnJvbSh0ZW1wbGF0ZS5jb250ZW50LmNoaWxkTm9kZXMpLmZvckVhY2goZWwgPT4gZGlmZkNvbnRhaW5lci5pbnNlcnRCZWZvcmUoZWwsIGZpcnN0Q29tcG9uZW50KSlcbiAgICAgIGZpcnN0Q29tcG9uZW50LnJlbW92ZSgpXG4gICAgICByZXR1cm4gZGlmZkNvbnRhaW5lci5vdXRlckhUTUxcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBDT01QT05FTlRTLFxuICBEWU5BTUlDUyxcbiAgVEVNUExBVEVTLFxuICBFVkVOVFMsXG4gIFBIWF9DT01QT05FTlQsXG4gIFBIWF9TS0lQLFxuICBSRVBMWSxcbiAgU1RBVElDLFxuICBUSVRMRVxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgbG9nRXJyb3IsXG4gIGlzQ2lkLFxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbmRlcmVkIHtcbiAgc3RhdGljIGV4dHJhY3QoZGlmZil7XG4gICAgbGV0IHtbUkVQTFldOiByZXBseSwgW0VWRU5UU106IGV2ZW50cywgW1RJVExFXTogdGl0bGV9ID0gZGlmZlxuICAgIGRlbGV0ZSBkaWZmW1JFUExZXVxuICAgIGRlbGV0ZSBkaWZmW0VWRU5UU11cbiAgICBkZWxldGUgZGlmZltUSVRMRV1cbiAgICByZXR1cm4ge2RpZmYsIHRpdGxlLCByZXBseTogcmVwbHkgfHwgbnVsbCwgZXZlbnRzOiBldmVudHMgfHwgW119XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2aWV3SWQsIHJlbmRlcmVkKXtcbiAgICB0aGlzLnZpZXdJZCA9IHZpZXdJZFxuICAgIHRoaXMucmVuZGVyZWQgPSB7fVxuICAgIHRoaXMubWVyZ2VEaWZmKHJlbmRlcmVkKVxuICB9XG5cbiAgcGFyZW50Vmlld0lkKCl7IHJldHVybiB0aGlzLnZpZXdJZCB9XG5cbiAgdG9TdHJpbmcob25seUNpZHMpe1xuICAgIHJldHVybiB0aGlzLnJlY3Vyc2l2ZVRvU3RyaW5nKHRoaXMucmVuZGVyZWQsIHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU10sIG9ubHlDaWRzKVxuICB9XG5cbiAgcmVjdXJzaXZlVG9TdHJpbmcocmVuZGVyZWQsIGNvbXBvbmVudHMgPSByZW5kZXJlZFtDT01QT05FTlRTXSwgb25seUNpZHMpe1xuICAgIG9ubHlDaWRzID0gb25seUNpZHMgPyBuZXcgU2V0KG9ubHlDaWRzKSA6IG51bGxcbiAgICBsZXQgb3V0cHV0ID0ge2J1ZmZlcjogXCJcIiwgY29tcG9uZW50czogY29tcG9uZW50cywgb25seUNpZHM6IG9ubHlDaWRzfVxuICAgIHRoaXMudG9PdXRwdXRCdWZmZXIocmVuZGVyZWQsIG51bGwsIG91dHB1dClcbiAgICByZXR1cm4gb3V0cHV0LmJ1ZmZlclxuICB9XG5cbiAgY29tcG9uZW50Q0lEcyhkaWZmKXsgcmV0dXJuIE9iamVjdC5rZXlzKGRpZmZbQ09NUE9ORU5UU10gfHwge30pLm1hcChpID0+IHBhcnNlSW50KGkpKSB9XG5cbiAgaXNDb21wb25lbnRPbmx5RGlmZihkaWZmKXtcbiAgICBpZighZGlmZltDT01QT05FTlRTXSl7IHJldHVybiBmYWxzZSB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRpZmYpLmxlbmd0aCA9PT0gMVxuICB9XG5cbiAgZ2V0Q29tcG9uZW50KGRpZmYsIGNpZCl7IHJldHVybiBkaWZmW0NPTVBPTkVOVFNdW2NpZF0gfVxuXG4gIG1lcmdlRGlmZihkaWZmKXtcbiAgICBsZXQgbmV3YyA9IGRpZmZbQ09NUE9ORU5UU11cbiAgICBsZXQgY2FjaGUgPSB7fVxuICAgIGRlbGV0ZSBkaWZmW0NPTVBPTkVOVFNdXG4gICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMubXV0YWJsZU1lcmdlKHRoaXMucmVuZGVyZWQsIGRpZmYpXG4gICAgdGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSA9IHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU10gfHwge31cblxuICAgIGlmKG5ld2Mpe1xuICAgICAgbGV0IG9sZGMgPSB0aGlzLnJlbmRlcmVkW0NPTVBPTkVOVFNdXG5cbiAgICAgIGZvcihsZXQgY2lkIGluIG5ld2Mpe1xuICAgICAgICBuZXdjW2NpZF0gPSB0aGlzLmNhY2hlZEZpbmRDb21wb25lbnQoY2lkLCBuZXdjW2NpZF0sIG9sZGMsIG5ld2MsIGNhY2hlKVxuICAgICAgfVxuXG4gICAgICBmb3IobGV0IGNpZCBpbiBuZXdjKXsgb2xkY1tjaWRdID0gbmV3Y1tjaWRdIH1cbiAgICAgIGRpZmZbQ09NUE9ORU5UU10gPSBuZXdjXG4gICAgfVxuICB9XG5cbiAgY2FjaGVkRmluZENvbXBvbmVudChjaWQsIGNkaWZmLCBvbGRjLCBuZXdjLCBjYWNoZSl7XG4gICAgaWYoY2FjaGVbY2lkXSl7XG4gICAgICByZXR1cm4gY2FjaGVbY2lkXVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmRpZmYsIHN0YXQsIHNjaWQgPSBjZGlmZltTVEFUSUNdXG5cbiAgICAgIGlmKGlzQ2lkKHNjaWQpKXtcbiAgICAgICAgbGV0IHRkaWZmXG5cbiAgICAgICAgaWYoc2NpZCA+IDApe1xuICAgICAgICAgIHRkaWZmID0gdGhpcy5jYWNoZWRGaW5kQ29tcG9uZW50KHNjaWQsIG5ld2Nbc2NpZF0sIG9sZGMsIG5ld2MsIGNhY2hlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRkaWZmID0gb2xkY1stc2NpZF1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXQgPSB0ZGlmZltTVEFUSUNdXG4gICAgICAgIG5kaWZmID0gdGhpcy5jbG9uZU1lcmdlKHRkaWZmLCBjZGlmZilcbiAgICAgICAgbmRpZmZbU1RBVElDXSA9IHN0YXRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5kaWZmID0gY2RpZmZbU1RBVElDXSAhPT0gdW5kZWZpbmVkID8gY2RpZmYgOiB0aGlzLmNsb25lTWVyZ2Uob2xkY1tjaWRdIHx8IHt9LCBjZGlmZilcbiAgICAgIH1cblxuICAgICAgY2FjaGVbY2lkXSA9IG5kaWZmXG4gICAgICByZXR1cm4gbmRpZmZcbiAgICB9XG4gIH1cblxuICBtdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2Upe1xuICAgIGlmKHNvdXJjZVtTVEFUSUNdICE9PSB1bmRlZmluZWQpe1xuICAgICAgcmV0dXJuIHNvdXJjZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvTXV0YWJsZU1lcmdlKHRhcmdldCwgc291cmNlKVxuICAgICAgcmV0dXJuIHRhcmdldFxuICAgIH1cbiAgfVxuXG4gIGRvTXV0YWJsZU1lcmdlKHRhcmdldCwgc291cmNlKXtcbiAgICBmb3IobGV0IGtleSBpbiBzb3VyY2Upe1xuICAgICAgbGV0IHZhbCA9IHNvdXJjZVtrZXldXG4gICAgICBsZXQgdGFyZ2V0VmFsID0gdGFyZ2V0W2tleV1cbiAgICAgIGlmKGlzT2JqZWN0KHZhbCkgJiYgdmFsW1NUQVRJQ10gPT09IHVuZGVmaW5lZCAmJiBpc09iamVjdCh0YXJnZXRWYWwpKXtcbiAgICAgICAgdGhpcy5kb011dGFibGVNZXJnZSh0YXJnZXRWYWwsIHZhbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xvbmVNZXJnZSh0YXJnZXQsIHNvdXJjZSl7XG4gICAgbGV0IG1lcmdlZCA9IHsuLi50YXJnZXQsIC4uLnNvdXJjZX1cbiAgICBmb3IobGV0IGtleSBpbiBtZXJnZWQpe1xuICAgICAgbGV0IHZhbCA9IHNvdXJjZVtrZXldXG4gICAgICBsZXQgdGFyZ2V0VmFsID0gdGFyZ2V0W2tleV1cbiAgICAgIGlmKGlzT2JqZWN0KHZhbCkgJiYgdmFsW1NUQVRJQ10gPT09IHVuZGVmaW5lZCAmJiBpc09iamVjdCh0YXJnZXRWYWwpKXtcbiAgICAgICAgbWVyZ2VkW2tleV0gPSB0aGlzLmNsb25lTWVyZ2UodGFyZ2V0VmFsLCB2YWwpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWRcbiAgfVxuXG4gIGNvbXBvbmVudFRvU3RyaW5nKGNpZCl7IHJldHVybiB0aGlzLnJlY3Vyc2l2ZUNJRFRvU3RyaW5nKHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU10sIGNpZCkgfVxuXG4gIHBydW5lQ0lEcyhjaWRzKXtcbiAgICBjaWRzLmZvckVhY2goY2lkID0+IGRlbGV0ZSB0aGlzLnJlbmRlcmVkW0NPTVBPTkVOVFNdW2NpZF0pXG4gIH1cblxuICAvLyBwcml2YXRlXG5cbiAgZ2V0KCl7IHJldHVybiB0aGlzLnJlbmRlcmVkIH1cblxuICBpc05ld0ZpbmdlcnByaW50KGRpZmYgPSB7fSl7IHJldHVybiAhIWRpZmZbU1RBVElDXSB9XG5cbiAgdGVtcGxhdGVTdGF0aWMocGFydCwgdGVtcGxhdGVzKXtcbiAgICBpZih0eXBlb2YgKHBhcnQpID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGVzW3BhcnRdXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJ0XG4gICAgfVxuICB9XG5cbiAgdG9PdXRwdXRCdWZmZXIocmVuZGVyZWQsIHRlbXBsYXRlcywgb3V0cHV0KXtcbiAgICBpZihyZW5kZXJlZFtEWU5BTUlDU10peyByZXR1cm4gdGhpcy5jb21wcmVoZW5zaW9uVG9CdWZmZXIocmVuZGVyZWQsIHRlbXBsYXRlcywgb3V0cHV0KSB9XG4gICAgbGV0IHtbU1RBVElDXTogc3RhdGljc30gPSByZW5kZXJlZFxuICAgIHN0YXRpY3MgPSB0aGlzLnRlbXBsYXRlU3RhdGljKHN0YXRpY3MsIHRlbXBsYXRlcylcblxuICAgIG91dHB1dC5idWZmZXIgKz0gc3RhdGljc1swXVxuICAgIGZvcihsZXQgaSA9IDE7IGkgPCBzdGF0aWNzLmxlbmd0aDsgaSsrKXtcbiAgICAgIHRoaXMuZHluYW1pY1RvQnVmZmVyKHJlbmRlcmVkW2kgLSAxXSwgdGVtcGxhdGVzLCBvdXRwdXQpXG4gICAgICBvdXRwdXQuYnVmZmVyICs9IHN0YXRpY3NbaV1cbiAgICB9XG4gIH1cblxuICBjb21wcmVoZW5zaW9uVG9CdWZmZXIocmVuZGVyZWQsIHRlbXBsYXRlcywgb3V0cHV0KXtcbiAgICBsZXQge1tEWU5BTUlDU106IGR5bmFtaWNzLCBbU1RBVElDXTogc3RhdGljc30gPSByZW5kZXJlZFxuICAgIHN0YXRpY3MgPSB0aGlzLnRlbXBsYXRlU3RhdGljKHN0YXRpY3MsIHRlbXBsYXRlcylcbiAgICBsZXQgY29tcFRlbXBsYXRlcyA9IHRlbXBsYXRlcyB8fCByZW5kZXJlZFtURU1QTEFURVNdXG5cbiAgICBmb3IobGV0IGQgPSAwOyBkIDwgZHluYW1pY3MubGVuZ3RoOyBkKyspe1xuICAgICAgbGV0IGR5bmFtaWMgPSBkeW5hbWljc1tkXVxuICAgICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzWzBdXG4gICAgICBmb3IobGV0IGkgPSAxOyBpIDwgc3RhdGljcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZHluYW1pY1RvQnVmZmVyKGR5bmFtaWNbaSAtIDFdLCBjb21wVGVtcGxhdGVzLCBvdXRwdXQpXG4gICAgICAgIG91dHB1dC5idWZmZXIgKz0gc3RhdGljc1tpXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGR5bmFtaWNUb0J1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpe1xuICAgIGlmKHR5cGVvZiAocmVuZGVyZWQpID09PSBcIm51bWJlclwiKXtcbiAgICAgIG91dHB1dC5idWZmZXIgKz0gdGhpcy5yZWN1cnNpdmVDSURUb1N0cmluZyhvdXRwdXQuY29tcG9uZW50cywgcmVuZGVyZWQsIG91dHB1dC5vbmx5Q2lkcylcbiAgICB9IGVsc2UgaWYoaXNPYmplY3QocmVuZGVyZWQpKXtcbiAgICAgIHRoaXMudG9PdXRwdXRCdWZmZXIocmVuZGVyZWQsIHRlbXBsYXRlcywgb3V0cHV0KVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQuYnVmZmVyICs9IHJlbmRlcmVkXG4gICAgfVxuICB9XG5cbiAgcmVjdXJzaXZlQ0lEVG9TdHJpbmcoY29tcG9uZW50cywgY2lkLCBvbmx5Q2lkcyl7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY2lkXSB8fCBsb2dFcnJvcihgbm8gY29tcG9uZW50IGZvciBDSUQgJHtjaWR9YCwgY29tcG9uZW50cylcbiAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIilcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSB0aGlzLnJlY3Vyc2l2ZVRvU3RyaW5nKGNvbXBvbmVudCwgY29tcG9uZW50cywgb25seUNpZHMpXG4gICAgbGV0IGNvbnRhaW5lciA9IHRlbXBsYXRlLmNvbnRlbnRcbiAgICBsZXQgc2tpcCA9IG9ubHlDaWRzICYmICFvbmx5Q2lkcy5oYXMoY2lkKVxuXG4gICAgbGV0IFtoYXNDaGlsZE5vZGVzLCBoYXNDaGlsZENvbXBvbmVudHNdID1cbiAgICAgIEFycmF5LmZyb20oY29udGFpbmVyLmNoaWxkTm9kZXMpLnJlZHVjZSgoW2hhc05vZGVzLCBoYXNDb21wb25lbnRzXSwgY2hpbGQsIGkpID0+IHtcbiAgICAgICAgaWYoY2hpbGQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKXtcbiAgICAgICAgICBpZihjaGlsZC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkpe1xuICAgICAgICAgICAgcmV0dXJuIFtoYXNOb2RlcywgdHJ1ZV1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQsIGNpZClcbiAgICAgICAgICBpZighY2hpbGQuaWQpeyBjaGlsZC5pZCA9IGAke3RoaXMucGFyZW50Vmlld0lkKCl9LSR7Y2lkfS0ke2l9YCB9XG4gICAgICAgICAgaWYoc2tpcCl7XG4gICAgICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoUEhYX1NLSVAsIFwiXCIpXG4gICAgICAgICAgICBjaGlsZC5pbm5lckhUTUwgPSBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdHJ1ZSwgaGFzQ29tcG9uZW50c11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihjaGlsZC5ub2RlVmFsdWUudHJpbSgpICE9PSBcIlwiKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwib25seSBIVE1MIGVsZW1lbnQgdGFncyBhcmUgYWxsb3dlZCBhdCB0aGUgcm9vdCBvZiBjb21wb25lbnRzLlxcblxcblwiICtcbiAgICAgICAgICAgICAgYGdvdDogXCIke2NoaWxkLm5vZGVWYWx1ZS50cmltKCl9XCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgXCJ3aXRoaW46XFxuXCIsIHRlbXBsYXRlLmlubmVySFRNTC50cmltKCkpXG4gICAgICAgICAgICBjaGlsZC5yZXBsYWNlV2l0aCh0aGlzLmNyZWF0ZVNwYW4oY2hpbGQubm9kZVZhbHVlLCBjaWQpKVxuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBoYXNDb21wb25lbnRzXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZC5yZW1vdmUoKVxuICAgICAgICAgICAgcmV0dXJuIFtoYXNOb2RlcywgaGFzQ29tcG9uZW50c11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIFtmYWxzZSwgZmFsc2VdKVxuXG4gICAgaWYoIWhhc0NoaWxkTm9kZXMgJiYgIWhhc0NoaWxkQ29tcG9uZW50cyl7XG4gICAgICBsb2dFcnJvcihcImV4cGVjdGVkIGF0IGxlYXN0IG9uZSBIVE1MIGVsZW1lbnQgdGFnIGluc2lkZSBhIGNvbXBvbmVudCwgYnV0IHRoZSBjb21wb25lbnQgaXMgZW1wdHk6XFxuXCIsXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTC50cmltKCkpXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTcGFuKFwiXCIsIGNpZCkub3V0ZXJIVE1MXG4gICAgfSBlbHNlIGlmKCFoYXNDaGlsZE5vZGVzICYmIGhhc0NoaWxkQ29tcG9uZW50cyl7XG4gICAgICBsb2dFcnJvcihcImV4cGVjdGVkIGF0IGxlYXN0IG9uZSBIVE1MIGVsZW1lbnQgdGFnIGRpcmVjdGx5IGluc2lkZSBhIGNvbXBvbmVudCwgYnV0IG9ubHkgc3ViY29tcG9uZW50cyB3ZXJlIGZvdW5kLiBBIGNvbXBvbmVudCBtdXN0IHJlbmRlciBhdCBsZWFzdCBvbmUgSFRNTCB0YWcgZGlyZWN0bHkgaW5zaWRlIGl0c2VsZi5cIixcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5pbm5lckhUTUxcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLmlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVNwYW4odGV4dCwgY2lkKXtcbiAgICBsZXQgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpXG4gICAgc3Bhbi5pbm5lclRleHQgPSB0ZXh0XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCwgY2lkKVxuICAgIHJldHVybiBzcGFuXG4gIH1cbn1cbiIsICJsZXQgdmlld0hvb2tJRCA9IDFcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXdIb29rIHtcbiAgc3RhdGljIG1ha2VJRCgpeyByZXR1cm4gdmlld0hvb2tJRCsrIH1cbiAgc3RhdGljIGVsZW1lbnRJRChlbCl7IHJldHVybiBlbC5waHhIb29rSWQgfVxuXG4gIGNvbnN0cnVjdG9yKHZpZXcsIGVsLCBjYWxsYmFja3Mpe1xuICAgIHRoaXMuX192aWV3ID0gdmlld1xuICAgIHRoaXMubGl2ZVNvY2tldCA9IHZpZXcubGl2ZVNvY2tldFxuICAgIHRoaXMuX19jYWxsYmFja3MgPSBjYWxsYmFja3NcbiAgICB0aGlzLl9fbGlzdGVuZXJzID0gbmV3IFNldCgpXG4gICAgdGhpcy5fX2lzRGlzY29ubmVjdGVkID0gZmFsc2VcbiAgICB0aGlzLmVsID0gZWxcbiAgICB0aGlzLmVsLnBoeEhvb2tJZCA9IHRoaXMuY29uc3RydWN0b3IubWFrZUlEKClcbiAgICBmb3IobGV0IGtleSBpbiB0aGlzLl9fY2FsbGJhY2tzKXsgdGhpc1trZXldID0gdGhpcy5fX2NhbGxiYWNrc1trZXldIH1cbiAgfVxuXG4gIF9fbW91bnRlZCgpeyB0aGlzLm1vdW50ZWQgJiYgdGhpcy5tb3VudGVkKCkgfVxuICBfX3VwZGF0ZWQoKXsgdGhpcy51cGRhdGVkICYmIHRoaXMudXBkYXRlZCgpIH1cbiAgX19iZWZvcmVVcGRhdGUoKXsgdGhpcy5iZWZvcmVVcGRhdGUgJiYgdGhpcy5iZWZvcmVVcGRhdGUoKSB9XG4gIF9fZGVzdHJveWVkKCl7IHRoaXMuZGVzdHJveWVkICYmIHRoaXMuZGVzdHJveWVkKCkgfVxuICBfX3JlY29ubmVjdGVkKCl7XG4gICAgaWYodGhpcy5fX2lzRGlzY29ubmVjdGVkKXtcbiAgICAgIHRoaXMuX19pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlXG4gICAgICB0aGlzLnJlY29ubmVjdGVkICYmIHRoaXMucmVjb25uZWN0ZWQoKVxuICAgIH1cbiAgfVxuICBfX2Rpc2Nvbm5lY3RlZCgpe1xuICAgIHRoaXMuX19pc0Rpc2Nvbm5lY3RlZCA9IHRydWVcbiAgICB0aGlzLmRpc2Nvbm5lY3RlZCAmJiB0aGlzLmRpc2Nvbm5lY3RlZCgpXG4gIH1cblxuICBwdXNoRXZlbnQoZXZlbnQsIHBheWxvYWQgPSB7fSwgb25SZXBseSA9IGZ1bmN0aW9uICgpeyB9KXtcbiAgICByZXR1cm4gdGhpcy5fX3ZpZXcucHVzaEhvb2tFdmVudChudWxsLCBldmVudCwgcGF5bG9hZCwgb25SZXBseSlcbiAgfVxuXG4gIHB1c2hFdmVudFRvKHBoeFRhcmdldCwgZXZlbnQsIHBheWxvYWQgPSB7fSwgb25SZXBseSA9IGZ1bmN0aW9uICgpeyB9KXtcbiAgICByZXR1cm4gdGhpcy5fX3ZpZXcud2l0aGluVGFyZ2V0cyhwaHhUYXJnZXQsICh2aWV3LCB0YXJnZXRDdHgpID0+IHtcbiAgICAgIHJldHVybiB2aWV3LnB1c2hIb29rRXZlbnQodGFyZ2V0Q3R4LCBldmVudCwgcGF5bG9hZCwgb25SZXBseSlcbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlRXZlbnQoZXZlbnQsIGNhbGxiYWNrKXtcbiAgICBsZXQgY2FsbGJhY2tSZWYgPSAoY3VzdG9tRXZlbnQsIGJ5cGFzcykgPT4gYnlwYXNzID8gZXZlbnQgOiBjYWxsYmFjayhjdXN0b21FdmVudC5kZXRhaWwpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHBoeDoke2V2ZW50fWAsIGNhbGxiYWNrUmVmKVxuICAgIHRoaXMuX19saXN0ZW5lcnMuYWRkKGNhbGxiYWNrUmVmKVxuICAgIHJldHVybiBjYWxsYmFja1JlZlxuICB9XG5cbiAgcmVtb3ZlSGFuZGxlRXZlbnQoY2FsbGJhY2tSZWYpe1xuICAgIGxldCBldmVudCA9IGNhbGxiYWNrUmVmKG51bGwsIHRydWUpXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBoeDoke2V2ZW50fWAsIGNhbGxiYWNrUmVmKVxuICAgIHRoaXMuX19saXN0ZW5lcnMuZGVsZXRlKGNhbGxiYWNrUmVmKVxuICB9XG5cbiAgdXBsb2FkKG5hbWUsIGZpbGVzKXtcbiAgICByZXR1cm4gdGhpcy5fX3ZpZXcuZGlzcGF0Y2hVcGxvYWRzKG5hbWUsIGZpbGVzKVxuICB9XG5cbiAgdXBsb2FkVG8ocGh4VGFyZ2V0LCBuYW1lLCBmaWxlcyl7XG4gICAgcmV0dXJuIHRoaXMuX192aWV3LndpdGhpblRhcmdldHMocGh4VGFyZ2V0LCB2aWV3ID0+IHZpZXcuZGlzcGF0Y2hVcGxvYWRzKG5hbWUsIGZpbGVzKSlcbiAgfVxuXG4gIF9fY2xlYW51cF9fKCl7XG4gICAgdGhpcy5fX2xpc3RlbmVycy5mb3JFYWNoKGNhbGxiYWNrUmVmID0+IHRoaXMucmVtb3ZlSGFuZGxlRXZlbnQoY2FsbGJhY2tSZWYpKVxuICB9XG59XG4iLCAiaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuXG5sZXQgSlMgPSB7XG4gIGV4ZWMoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGRlZmF1bHRzKXtcbiAgICBsZXQgW2RlZmF1bHRLaW5kLCBkZWZhdWx0QXJnc10gPSBkZWZhdWx0cyB8fCBbbnVsbCwge31dXG4gICAgbGV0IGNvbW1hbmRzID0gcGh4RXZlbnQuY2hhckF0KDApID09PSBcIltcIiA/XG4gICAgICBKU09OLnBhcnNlKHBoeEV2ZW50KSA6IFtbZGVmYXVsdEtpbmQsIGRlZmF1bHRBcmdzXV1cblxuICAgIGNvbW1hbmRzLmZvckVhY2goKFtraW5kLCBhcmdzXSkgPT4ge1xuICAgICAgaWYoa2luZCA9PT0gZGVmYXVsdEtpbmQgJiYgZGVmYXVsdEFyZ3MuZGF0YSl7XG4gICAgICAgIGFyZ3MuZGF0YSA9IE9iamVjdC5hc3NpZ24oYXJncy5kYXRhIHx8IHt9LCBkZWZhdWx0QXJncy5kYXRhKVxuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJUb0Vscyhzb3VyY2VFbCwgYXJncykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIHRoaXNbYGV4ZWNfJHtraW5kfWBdKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwgYXJncylcbiAgICAgIH0pXG4gICAgfSlcbiAgfSxcblxuICBpc1Zpc2libGUoZWwpe1xuICAgIHJldHVybiAhIShlbC5vZmZzZXRXaWR0aCB8fCBlbC5vZmZzZXRIZWlnaHQgfHwgZWwuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwKVxuICB9LFxuXG4gIC8vIHByaXZhdGVcblxuICAvLyBjb21tYW5kc1xuXG4gIGV4ZWNfZGlzcGF0Y2goZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7dG8sIGV2ZW50LCBkZXRhaWwsIGJ1YmJsZXN9KXtcbiAgICBkZXRhaWwgPSBkZXRhaWwgfHwge31cbiAgICBkZXRhaWwuZGlzcGF0Y2hlciA9IHNvdXJjZUVsXG4gICAgRE9NLmRpc3BhdGNoRXZlbnQoZWwsIGV2ZW50LCB7ZGV0YWlsLCBidWJibGVzfSlcbiAgfSxcblxuICBleGVjX3B1c2goZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCBhcmdzKXtcbiAgICBpZighdmlldy5pc0Nvbm5lY3RlZCgpKXsgcmV0dXJuIH1cblxuICAgIGxldCB7ZXZlbnQsIGRhdGEsIHRhcmdldCwgcGFnZV9sb2FkaW5nLCBsb2FkaW5nLCB2YWx1ZSwgZGlzcGF0Y2hlcn0gPSBhcmdzXG4gICAgbGV0IHB1c2hPcHRzID0ge2xvYWRpbmcsIHZhbHVlLCB0YXJnZXQsIHBhZ2VfbG9hZGluZzogISFwYWdlX2xvYWRpbmd9XG4gICAgbGV0IHRhcmdldFNyYyA9IGV2ZW50VHlwZSA9PT0gXCJjaGFuZ2VcIiAmJiBkaXNwYXRjaGVyID8gZGlzcGF0Y2hlciA6IHNvdXJjZUVsXG4gICAgbGV0IHBoeFRhcmdldCA9IHRhcmdldCB8fCB0YXJnZXRTcmMuZ2V0QXR0cmlidXRlKHZpZXcuYmluZGluZyhcInRhcmdldFwiKSkgfHwgdGFyZ2V0U3JjXG4gICAgdmlldy53aXRoaW5UYXJnZXRzKHBoeFRhcmdldCwgKHRhcmdldFZpZXcsIHRhcmdldEN0eCkgPT4ge1xuICAgICAgaWYoZXZlbnRUeXBlID09PSBcImNoYW5nZVwiKXtcbiAgICAgICAgbGV0IHtuZXdDaWQsIF90YXJnZXQsIGNhbGxiYWNrfSA9IGFyZ3NcbiAgICAgICAgX3RhcmdldCA9IF90YXJnZXQgfHwgKHNvdXJjZUVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCA/IHNvdXJjZUVsLm5hbWUgOiB1bmRlZmluZWQpXG4gICAgICAgIGlmKF90YXJnZXQpeyBwdXNoT3B0cy5fdGFyZ2V0ID0gX3RhcmdldCB9XG4gICAgICAgIHRhcmdldFZpZXcucHVzaElucHV0KHNvdXJjZUVsLCB0YXJnZXRDdHgsIG5ld0NpZCwgZXZlbnQgfHwgcGh4RXZlbnQsIHB1c2hPcHRzLCBjYWxsYmFjaylcbiAgICAgIH0gZWxzZSBpZihldmVudFR5cGUgPT09IFwic3VibWl0XCIpe1xuICAgICAgICB0YXJnZXRWaWV3LnN1Ym1pdEZvcm0oc291cmNlRWwsIHRhcmdldEN0eCwgZXZlbnQgfHwgcGh4RXZlbnQsIHB1c2hPcHRzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0Vmlldy5wdXNoRXZlbnQoZXZlbnRUeXBlLCBzb3VyY2VFbCwgdGFyZ2V0Q3R4LCBldmVudCB8fCBwaHhFdmVudCwgZGF0YSwgcHVzaE9wdHMpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBleGVjX2FkZF9jbGFzcyhldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHtuYW1lcywgdHJhbnNpdGlvbiwgdGltZX0pe1xuICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBuYW1lcywgW10sIHRyYW5zaXRpb24sIHRpbWUsIHZpZXcpXG4gIH0sXG5cbiAgZXhlY19yZW1vdmVfY2xhc3MoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7bmFtZXMsIHRyYW5zaXRpb24sIHRpbWV9KXtcbiAgICB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgW10sIG5hbWVzLCB0cmFuc2l0aW9uLCB0aW1lLCB2aWV3KVxuICB9LFxuXG4gIGV4ZWNfdHJhbnNpdGlvbihldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHt0aW1lLCB0cmFuc2l0aW9ufSl7XG4gICAgbGV0IFt0cmFuc2l0aW9uX3N0YXJ0LCBydW5uaW5nLCB0cmFuc2l0aW9uX2VuZF0gPSB0cmFuc2l0aW9uXG4gICAgbGV0IG9uU3RhcnQgPSAoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgdHJhbnNpdGlvbl9zdGFydC5jb25jYXQocnVubmluZyksIFtdKVxuICAgIGxldCBvbkRvbmUgPSAoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgdHJhbnNpdGlvbl9lbmQsIHRyYW5zaXRpb25fc3RhcnQuY29uY2F0KHJ1bm5pbmcpKVxuICAgIHZpZXcudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCBvbkRvbmUpXG4gIH0sXG5cbiAgZXhlY190b2dnbGUoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7ZGlzcGxheSwgaW5zLCBvdXRzLCB0aW1lfSl7XG4gICAgdGhpcy50b2dnbGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgaW5zLCBvdXRzLCB0aW1lKVxuICB9LFxuXG4gIGV4ZWNfc2hvdyhldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHtkaXNwbGF5LCB0cmFuc2l0aW9uLCB0aW1lfSl7XG4gICAgdGhpcy5zaG93KGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIHRyYW5zaXRpb24sIHRpbWUpXG4gIH0sXG5cbiAgZXhlY19oaWRlKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge2Rpc3BsYXksIHRyYW5zaXRpb24sIHRpbWV9KXtcbiAgICB0aGlzLmhpZGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgdHJhbnNpdGlvbiwgdGltZSlcbiAgfSxcblxuICBleGVjX3NldF9hdHRyKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge2F0dHI6IFthdHRyLCB2YWxdfSl7XG4gICAgdGhpcy5zZXRPclJlbW92ZUF0dHJzKGVsLCBbW2F0dHIsIHZhbF1dLCBbXSlcbiAgfSxcblxuICBleGVjX3JlbW92ZV9hdHRyKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge2F0dHJ9KXtcbiAgICB0aGlzLnNldE9yUmVtb3ZlQXR0cnMoZWwsIFtdLCBbYXR0cl0pXG4gIH0sXG5cbiAgLy8gdXRpbHMgZm9yIGNvbW1hbmRzXG5cbiAgc2hvdyhldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCB0cmFuc2l0aW9uLCB0aW1lKXtcbiAgICBpZighdGhpcy5pc1Zpc2libGUoZWwpKXtcbiAgICAgIHRoaXMudG9nZ2xlKGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIHRyYW5zaXRpb24sIG51bGwsIHRpbWUpXG4gICAgfVxuICB9LFxuXG4gIGhpZGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgdHJhbnNpdGlvbiwgdGltZSl7XG4gICAgaWYodGhpcy5pc1Zpc2libGUoZWwpKXtcbiAgICAgIHRoaXMudG9nZ2xlKGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIG51bGwsIHRyYW5zaXRpb24sIHRpbWUpXG4gICAgfVxuICB9LFxuXG4gIHRvZ2dsZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCBpbnMsIG91dHMsIHRpbWUpe1xuICAgIGxldCBbaW5DbGFzc2VzLCBpblN0YXJ0Q2xhc3NlcywgaW5FbmRDbGFzc2VzXSA9IGlucyB8fCBbW10sIFtdLCBbXV1cbiAgICBsZXQgW291dENsYXNzZXMsIG91dFN0YXJ0Q2xhc3Nlcywgb3V0RW5kQ2xhc3Nlc10gPSBvdXRzIHx8IFtbXSwgW10sIFtdXVxuICAgIGlmKGluQ2xhc3Nlcy5sZW5ndGggPiAwIHx8IG91dENsYXNzZXMubGVuZ3RoID4gMCl7XG4gICAgICBpZih0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgICBsZXQgb25TdGFydCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgb3V0U3RhcnRDbGFzc2VzLCBpbkNsYXNzZXMuY29uY2F0KGluU3RhcnRDbGFzc2VzKS5jb25jYXQoaW5FbmRDbGFzc2VzKSlcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBvdXRDbGFzc2VzLCBbXSlcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIG91dEVuZENsYXNzZXMsIG91dFN0YXJ0Q2xhc3NlcykpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpoaWRlLXN0YXJ0XCIpKVxuICAgICAgICB2aWV3LnRyYW5zaXRpb24odGltZSwgb25TdGFydCwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBbXSwgb3V0Q2xhc3Nlcy5jb25jYXQob3V0RW5kQ2xhc3NlcykpXG4gICAgICAgICAgRE9NLnB1dFN0aWNreShlbCwgXCJ0b2dnbGVcIiwgY3VycmVudEVsID0+IGN1cnJlbnRFbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIpXG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJwaHg6aGlkZS1lbmRcIikpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihldmVudFR5cGUgPT09IFwicmVtb3ZlXCIpeyByZXR1cm4gfVxuICAgICAgICBsZXQgb25TdGFydCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgaW5TdGFydENsYXNzZXMsIG91dENsYXNzZXMuY29uY2F0KG91dFN0YXJ0Q2xhc3NlcykuY29uY2F0KG91dEVuZENsYXNzZXMpKVxuICAgICAgICAgIERPTS5wdXRTdGlja3koZWwsIFwidG9nZ2xlXCIsIGN1cnJlbnRFbCA9PiBjdXJyZW50RWwuc3R5bGUuZGlzcGxheSA9IChkaXNwbGF5IHx8IFwiYmxvY2tcIikpXG4gICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgaW5DbGFzc2VzLCBbXSlcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIGluRW5kQ2xhc3NlcywgaW5TdGFydENsYXNzZXMpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJwaHg6c2hvdy1zdGFydFwiKSlcbiAgICAgICAgdmlldy50cmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgW10sIGluQ2xhc3Nlcy5jb25jYXQoaW5FbmRDbGFzc2VzKSlcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpzaG93LWVuZFwiKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5pc1Zpc2libGUoZWwpKXtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJwaHg6aGlkZS1zdGFydFwiKSlcbiAgICAgICAgICBET00ucHV0U3RpY2t5KGVsLCBcInRvZ2dsZVwiLCBjdXJyZW50RWwgPT4gY3VycmVudEVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIilcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpoaWRlLWVuZFwiKSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OnNob3ctc3RhcnRcIikpXG4gICAgICAgICAgRE9NLnB1dFN0aWNreShlbCwgXCJ0b2dnbGVcIiwgY3VycmVudEVsID0+IGN1cnJlbnRFbC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheSB8fCBcImJsb2NrXCIpXG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJwaHg6c2hvdy1lbmRcIikpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgYWRkcywgcmVtb3ZlcywgdHJhbnNpdGlvbiwgdGltZSwgdmlldyl7XG4gICAgbGV0IFt0cmFuc2l0aW9uX3J1biwgdHJhbnNpdGlvbl9zdGFydCwgdHJhbnNpdGlvbl9lbmRdID0gdHJhbnNpdGlvbiB8fCBbW10sIFtdLCBbXV1cbiAgICBpZih0cmFuc2l0aW9uX3J1bi5sZW5ndGggPiAwKXtcbiAgICAgIGxldCBvblN0YXJ0ID0gKCkgPT4gdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIHRyYW5zaXRpb25fc3RhcnQuY29uY2F0KHRyYW5zaXRpb25fcnVuKSwgW10pXG4gICAgICBsZXQgb25Eb25lID0gKCkgPT4gdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIGFkZHMuY29uY2F0KHRyYW5zaXRpb25fZW5kKSwgcmVtb3Zlcy5jb25jYXQodHJhbnNpdGlvbl9ydW4pLmNvbmNhdCh0cmFuc2l0aW9uX3N0YXJ0KSlcbiAgICAgIHJldHVybiB2aWV3LnRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lKVxuICAgIH1cbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGxldCBbcHJldkFkZHMsIHByZXZSZW1vdmVzXSA9IERPTS5nZXRTdGlja3koZWwsIFwiY2xhc3Nlc1wiLCBbW10sIFtdXSlcbiAgICAgIGxldCBrZWVwQWRkcyA9IGFkZHMuZmlsdGVyKG5hbWUgPT4gcHJldkFkZHMuaW5kZXhPZihuYW1lKSA8IDAgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKSlcbiAgICAgIGxldCBrZWVwUmVtb3ZlcyA9IHJlbW92ZXMuZmlsdGVyKG5hbWUgPT4gcHJldlJlbW92ZXMuaW5kZXhPZihuYW1lKSA8IDAgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKG5hbWUpKVxuICAgICAgbGV0IG5ld0FkZHMgPSBwcmV2QWRkcy5maWx0ZXIobmFtZSA9PiByZW1vdmVzLmluZGV4T2YobmFtZSkgPCAwKS5jb25jYXQoa2VlcEFkZHMpXG4gICAgICBsZXQgbmV3UmVtb3ZlcyA9IHByZXZSZW1vdmVzLmZpbHRlcihuYW1lID0+IGFkZHMuaW5kZXhPZihuYW1lKSA8IDApLmNvbmNhdChrZWVwUmVtb3ZlcylcblxuICAgICAgRE9NLnB1dFN0aWNreShlbCwgXCJjbGFzc2VzXCIsIGN1cnJlbnRFbCA9PiB7XG4gICAgICAgIGN1cnJlbnRFbC5jbGFzc0xpc3QucmVtb3ZlKC4uLm5ld1JlbW92ZXMpXG4gICAgICAgIGN1cnJlbnRFbC5jbGFzc0xpc3QuYWRkKC4uLm5ld0FkZHMpXG4gICAgICAgIHJldHVybiBbbmV3QWRkcywgbmV3UmVtb3Zlc11cbiAgICAgIH0pXG4gICAgfSlcbiAgfSxcblxuICBzZXRPclJlbW92ZUF0dHJzKGVsLCBzZXRzLCByZW1vdmVzKXtcbiAgICBsZXQgW3ByZXZTZXRzLCBwcmV2UmVtb3Zlc10gPSBET00uZ2V0U3RpY2t5KGVsLCBcImF0dHJzXCIsIFtbXSwgW11dKVxuXG4gICAgbGV0IGFsdGVyZWRBdHRycyA9IHNldHMubWFwKChbYXR0ciwgX3ZhbF0pID0+IGF0dHIpLmNvbmNhdChyZW1vdmVzKTtcbiAgICBsZXQgbmV3U2V0cyA9IHByZXZTZXRzLmZpbHRlcigoW2F0dHIsIF92YWxdKSA9PiAhYWx0ZXJlZEF0dHJzLmluY2x1ZGVzKGF0dHIpKS5jb25jYXQoc2V0cyk7XG4gICAgbGV0IG5ld1JlbW92ZXMgPSBwcmV2UmVtb3Zlcy5maWx0ZXIoKGF0dHIpID0+ICFhbHRlcmVkQXR0cnMuaW5jbHVkZXMoYXR0cikpLmNvbmNhdChyZW1vdmVzKTtcblxuICAgIERPTS5wdXRTdGlja3koZWwsIFwiYXR0cnNcIiwgY3VycmVudEVsID0+IHtcbiAgICAgIG5ld1JlbW92ZXMuZm9yRWFjaChhdHRyID0+IGN1cnJlbnRFbC5yZW1vdmVBdHRyaWJ1dGUoYXR0cikpXG4gICAgICBuZXdTZXRzLmZvckVhY2goKFthdHRyLCB2YWxdKSA9PiBjdXJyZW50RWwuc2V0QXR0cmlidXRlKGF0dHIsIHZhbCkpXG4gICAgICByZXR1cm4gW25ld1NldHMsIG5ld1JlbW92ZXNdXG4gICAgfSlcbiAgfSxcblxuICBoYXNBbGxDbGFzc2VzKGVsLCBjbGFzc2VzKXsgcmV0dXJuIGNsYXNzZXMuZXZlcnkobmFtZSA9PiBlbC5jbGFzc0xpc3QuY29udGFpbnMobmFtZSkpIH0sXG5cbiAgaXNUb2dnbGVkT3V0KGVsLCBvdXRDbGFzc2VzKXtcbiAgICByZXR1cm4gIXRoaXMuaXNWaXNpYmxlKGVsKSB8fCB0aGlzLmhhc0FsbENsYXNzZXMoZWwsIG91dENsYXNzZXMpXG4gIH0sXG5cbiAgZmlsdGVyVG9FbHMoc291cmNlRWwsIHt0b30pe1xuICAgIHJldHVybiB0byA/IERPTS5hbGwoZG9jdW1lbnQsIHRvKSA6IFtzb3VyY2VFbF1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBKU1xuIiwgImltcG9ydCB7XG4gIEJFRk9SRV9VTkxPQURfTE9BREVSX1RJTUVPVVQsXG4gIENIRUNLQUJMRV9JTlBVVFMsXG4gIENPTlNFQ1VUSVZFX1JFTE9BRFMsXG4gIFBIWF9BVVRPX1JFQ09WRVIsXG4gIFBIWF9DT01QT05FTlQsXG4gIFBIWF9DT05ORUNURURfQ0xBU1MsXG4gIFBIWF9ESVNBQkxFX1dJVEgsXG4gIFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSxcbiAgUEhYX0RJU0FCTEVELFxuICBQSFhfRElTQ09OTkVDVEVEX0NMQVNTLFxuICBQSFhfRVZFTlRfQ0xBU1NFUyxcbiAgUEhYX0VSUk9SX0NMQVNTLFxuICBQSFhfRkVFREJBQ0tfRk9SLFxuICBQSFhfSEFTX1NVQk1JVFRFRCxcbiAgUEhYX0hPT0ssXG4gIFBIWF9QQUdFX0xPQURJTkcsXG4gIFBIWF9QQVJFTlRfSUQsXG4gIFBIWF9QUk9HUkVTUyxcbiAgUEhYX1JFQURPTkxZLFxuICBQSFhfUkVGLFxuICBQSFhfUkVGX1NSQyxcbiAgUEhYX1JPT1RfSUQsXG4gIFBIWF9TRVNTSU9OLFxuICBQSFhfU1RBVElDLFxuICBQSFhfVFJBQ0tfU1RBVElDLFxuICBQSFhfVFJBQ0tfVVBMT0FEUyxcbiAgUEhYX1VQREFURSxcbiAgUEhYX1VQTE9BRF9SRUYsXG4gIFBIWF9WSUVXX1NFTEVDVE9SLFxuICBQVVNIX1RJTUVPVVQsXG4gIFBIWF9NQUlOLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBjbG9uZSxcbiAgY2xvc2VzdFBoeEJpbmRpbmcsXG4gIGlzRW1wdHksXG4gIGlzRXF1YWxPYmosXG4gIGxvZ0Vycm9yLFxuICBtYXliZSxcbiAgaXNDaWQsXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgRE9NUGF0Y2ggZnJvbSBcIi4vZG9tX3BhdGNoXCJcbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5pbXBvcnQgUmVuZGVyZWQgZnJvbSBcIi4vcmVuZGVyZWRcIlxuaW1wb3J0IFZpZXdIb29rIGZyb20gXCIuL3ZpZXdfaG9va1wiXG5pbXBvcnQgSlMgZnJvbSBcIi4vanNcIlxuXG5sZXQgc2VyaWFsaXplRm9ybSA9IChmb3JtLCBtZXRhLCBvbmx5TmFtZXMgPSBbXSkgPT4ge1xuICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSlcbiAgbGV0IHRvUmVtb3ZlID0gW11cblxuICBmb3JtRGF0YS5mb3JFYWNoKCh2YWwsIGtleSwgX2luZGV4KSA9PiB7XG4gICAgaWYodmFsIGluc3RhbmNlb2YgRmlsZSl7IHRvUmVtb3ZlLnB1c2goa2V5KSB9XG4gIH0pXG5cbiAgLy8gQ2xlYW51cCBhZnRlciBidWlsZGluZyBmaWxlRGF0YVxuICB0b1JlbW92ZS5mb3JFYWNoKGtleSA9PiBmb3JtRGF0YS5kZWxldGUoa2V5KSlcblxuICBsZXQgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gIGZvcihsZXQgW2tleSwgdmFsXSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpe1xuICAgIGlmKG9ubHlOYW1lcy5sZW5ndGggPT09IDAgfHwgb25seU5hbWVzLmluZGV4T2Yoa2V5KSA+PSAwKXtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCB2YWwpXG4gICAgfVxuICB9XG4gIGZvcihsZXQgbWV0YUtleSBpbiBtZXRhKXsgcGFyYW1zLmFwcGVuZChtZXRhS2V5LCBtZXRhW21ldGFLZXldKSB9XG5cbiAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcge1xuICBjb25zdHJ1Y3RvcihlbCwgbGl2ZVNvY2tldCwgcGFyZW50VmlldywgZmxhc2gpe1xuICAgIHRoaXMubGl2ZVNvY2tldCA9IGxpdmVTb2NrZXRcbiAgICB0aGlzLmZsYXNoID0gZmxhc2hcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudFZpZXdcbiAgICB0aGlzLnJvb3QgPSBwYXJlbnRWaWV3ID8gcGFyZW50Vmlldy5yb290IDogdGhpc1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIHRoaXMuaWQgPSB0aGlzLmVsLmlkXG4gICAgdGhpcy5yZWYgPSAwXG4gICAgdGhpcy5jaGlsZEpvaW5zID0gMFxuICAgIHRoaXMubG9hZGVyVGltZXIgPSBudWxsXG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICAgIHRoaXMucHJ1bmluZ0NJRHMgPSBbXVxuICAgIHRoaXMucmVkaXJlY3QgPSBmYWxzZVxuICAgIHRoaXMuaHJlZiA9IG51bGxcbiAgICB0aGlzLmpvaW5Db3VudCA9IHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuam9pbkNvdW50IC0gMSA6IDBcbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gdHJ1ZVxuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcbiAgICB0aGlzLmpvaW5DYWxsYmFjayA9IGZ1bmN0aW9uKG9uRG9uZSl7IG9uRG9uZSAmJiBvbkRvbmUoKSB9XG4gICAgdGhpcy5zdG9wQ2FsbGJhY2sgPSBmdW5jdGlvbigpeyB9XG4gICAgdGhpcy5wZW5kaW5nSm9pbk9wcyA9IHRoaXMucGFyZW50ID8gbnVsbCA6IFtdXG4gICAgdGhpcy52aWV3SG9va3MgPSB7fVxuICAgIHRoaXMudXBsb2FkZXJzID0ge31cbiAgICB0aGlzLmZvcm1TdWJtaXRzID0gW11cbiAgICB0aGlzLmNoaWxkcmVuID0gdGhpcy5wYXJlbnQgPyBudWxsIDoge31cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF0gPSB7fVxuICAgIHRoaXMuY2hhbm5lbCA9IHRoaXMubGl2ZVNvY2tldC5jaGFubmVsKGBsdjoke3RoaXMuaWR9YCwgKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVkaXJlY3Q6IHRoaXMucmVkaXJlY3QgPyB0aGlzLmhyZWYgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybDogdGhpcy5yZWRpcmVjdCA/IHVuZGVmaW5lZCA6IHRoaXMuaHJlZiB8fCB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtczogdGhpcy5jb25uZWN0UGFyYW1zKCksXG4gICAgICAgIHNlc3Npb246IHRoaXMuZ2V0U2Vzc2lvbigpLFxuICAgICAgICBzdGF0aWM6IHRoaXMuZ2V0U3RhdGljKCksXG4gICAgICAgIGZsYXNoOiB0aGlzLmZsYXNoXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLnNob3dMb2FkZXIodGhpcy5saXZlU29ja2V0LmxvYWRlclRpbWVvdXQpXG4gICAgdGhpcy5iaW5kQ2hhbm5lbCgpXG4gIH1cblxuICBzZXRIcmVmKGhyZWYpeyB0aGlzLmhyZWYgPSBocmVmIH1cblxuICBzZXRSZWRpcmVjdChocmVmKXtcbiAgICB0aGlzLnJlZGlyZWN0ID0gdHJ1ZVxuICAgIHRoaXMuaHJlZiA9IGhyZWZcbiAgfVxuXG4gIGlzTWFpbigpeyByZXR1cm4gdGhpcy5lbC5nZXRBdHRyaWJ1dGUoUEhYX01BSU4pICE9PSBudWxsIH1cblxuICBjb25uZWN0UGFyYW1zKCl7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMubGl2ZVNvY2tldC5wYXJhbXModGhpcy5lbClcbiAgICBsZXQgbWFuaWZlc3QgPVxuICAgICAgRE9NLmFsbChkb2N1bWVudCwgYFske3RoaXMuYmluZGluZyhQSFhfVFJBQ0tfU1RBVElDKX1dYClcbiAgICAgICAgLm1hcChub2RlID0+IG5vZGUuc3JjIHx8IG5vZGUuaHJlZikuZmlsdGVyKHVybCA9PiB0eXBlb2YgKHVybCkgPT09IFwic3RyaW5nXCIpXG5cbiAgICBpZihtYW5pZmVzdC5sZW5ndGggPiAwKXsgcGFyYW1zW1wiX3RyYWNrX3N0YXRpY1wiXSA9IG1hbmlmZXN0IH1cbiAgICBwYXJhbXNbXCJfbW91bnRzXCJdID0gdGhpcy5qb2luQ291bnRcblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxuXG4gIGlzQ29ubmVjdGVkKCl7IHJldHVybiB0aGlzLmNoYW5uZWwuY2FuUHVzaCgpIH1cblxuICBnZXRTZXNzaW9uKCl7IHJldHVybiB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfU0VTU0lPTikgfVxuXG4gIGdldFN0YXRpYygpe1xuICAgIGxldCB2YWwgPSB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfU1RBVElDKVxuICAgIHJldHVybiB2YWwgPT09IFwiXCIgPyBudWxsIDogdmFsXG4gIH1cblxuICBkZXN0cm95KGNhbGxiYWNrID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHRoaXMuZGVzdHJveUFsbENoaWxkcmVuKClcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICBkZWxldGUgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdXG4gICAgaWYodGhpcy5wYXJlbnQpeyBkZWxldGUgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMucGFyZW50LmlkXVt0aGlzLmlkXSB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpXG4gICAgbGV0IG9uRmluaXNoZWQgPSAoKSA9PiB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICBmb3IobGV0IGlkIGluIHRoaXMudmlld0hvb2tzKXtcbiAgICAgICAgdGhpcy5kZXN0cm95SG9vayh0aGlzLnZpZXdIb29rc1tpZF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgRE9NLm1hcmtQaHhDaGlsZERlc3Ryb3llZCh0aGlzLmVsKVxuXG4gICAgdGhpcy5sb2coXCJkZXN0cm95ZWRcIiwgKCkgPT4gW1widGhlIGNoaWxkIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50XCJdKVxuICAgIHRoaXMuY2hhbm5lbC5sZWF2ZSgpXG4gICAgICAucmVjZWl2ZShcIm9rXCIsIG9uRmluaXNoZWQpXG4gICAgICAucmVjZWl2ZShcImVycm9yXCIsIG9uRmluaXNoZWQpXG4gICAgICAucmVjZWl2ZShcInRpbWVvdXRcIiwgb25GaW5pc2hlZClcbiAgfVxuXG4gIHNldENvbnRhaW5lckNsYXNzZXMoLi4uY2xhc3Nlcyl7XG4gICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgUEhYX0NPTk5FQ1RFRF9DTEFTUyxcbiAgICAgIFBIWF9ESVNDT05ORUNURURfQ0xBU1MsXG4gICAgICBQSFhfRVJST1JfQ0xBU1NcbiAgICApXG4gICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpXG4gIH1cblxuICBzaG93TG9hZGVyKHRpbWVvdXQpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRlclRpbWVyKVxuICAgIGlmKHRpbWVvdXQpe1xuICAgICAgdGhpcy5sb2FkZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93TG9hZGVyKCksIHRpbWVvdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcihsZXQgaWQgaW4gdGhpcy52aWV3SG9va3MpeyB0aGlzLnZpZXdIb29rc1tpZF0uX19kaXNjb25uZWN0ZWQoKSB9XG4gICAgICB0aGlzLnNldENvbnRhaW5lckNsYXNzZXMoUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUylcbiAgICB9XG4gIH1cblxuICBoaWRlTG9hZGVyKCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpXG4gICAgdGhpcy5zZXRDb250YWluZXJDbGFzc2VzKFBIWF9DT05ORUNURURfQ0xBU1MpXG4gIH1cblxuICB0cmlnZ2VyUmVjb25uZWN0ZWQoKXtcbiAgICBmb3IobGV0IGlkIGluIHRoaXMudmlld0hvb2tzKXsgdGhpcy52aWV3SG9va3NbaWRdLl9fcmVjb25uZWN0ZWQoKSB9XG4gIH1cblxuICBsb2coa2luZCwgbXNnQ2FsbGJhY2spe1xuICAgIHRoaXMubGl2ZVNvY2tldC5sb2codGhpcywga2luZCwgbXNnQ2FsbGJhY2spXG4gIH1cblxuICB0cmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSA9IGZ1bmN0aW9uKCl7fSl7XG4gICAgdGhpcy5saXZlU29ja2V0LnRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lKVxuICB9XG5cbiAgd2l0aGluVGFyZ2V0cyhwaHhUYXJnZXQsIGNhbGxiYWNrKXtcbiAgICBpZihwaHhUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBwaHhUYXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KXtcbiAgICAgIHJldHVybiB0aGlzLmxpdmVTb2NrZXQub3duZXIocGh4VGFyZ2V0LCB2aWV3ID0+IGNhbGxiYWNrKHZpZXcsIHBoeFRhcmdldCkpXG4gICAgfVxuXG4gICAgaWYoaXNDaWQocGh4VGFyZ2V0KSl7XG4gICAgICBsZXQgdGFyZ2V0cyA9IERPTS5maW5kQ29tcG9uZW50Tm9kZUxpc3QodGhpcy5lbCwgcGh4VGFyZ2V0KVxuICAgICAgaWYodGFyZ2V0cy5sZW5ndGggPT09IDApe1xuICAgICAgICBsb2dFcnJvcihgbm8gY29tcG9uZW50IGZvdW5kIG1hdGNoaW5nIHBoeC10YXJnZXQgb2YgJHtwaHhUYXJnZXR9YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMsIHBhcnNlSW50KHBoeFRhcmdldCkpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YXJnZXRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBoeFRhcmdldCkpXG4gICAgICBpZih0YXJnZXRzLmxlbmd0aCA9PT0gMCl7IGxvZ0Vycm9yKGBub3RoaW5nIGZvdW5kIG1hdGNoaW5nIHRoZSBwaHgtdGFyZ2V0IHNlbGVjdG9yIFwiJHtwaHhUYXJnZXR9XCJgKSB9XG4gICAgICB0YXJnZXRzLmZvckVhY2godGFyZ2V0ID0+IHRoaXMubGl2ZVNvY2tldC5vd25lcih0YXJnZXQsIHZpZXcgPT4gY2FsbGJhY2sodmlldywgdGFyZ2V0KSkpXG4gICAgfVxuICB9XG5cbiAgYXBwbHlEaWZmKHR5cGUsIHJhd0RpZmYsIGNhbGxiYWNrKXtcbiAgICB0aGlzLmxvZyh0eXBlLCAoKSA9PiBbXCJcIiwgY2xvbmUocmF3RGlmZildKVxuICAgIGxldCB7ZGlmZiwgcmVwbHksIGV2ZW50cywgdGl0bGV9ID0gUmVuZGVyZWQuZXh0cmFjdChyYXdEaWZmKVxuICAgIGlmKHRpdGxlKXsgRE9NLnB1dFRpdGxlKHRpdGxlKSB9XG5cbiAgICBjYWxsYmFjayh7ZGlmZiwgcmVwbHksIGV2ZW50c30pXG4gICAgcmV0dXJuIHJlcGx5XG4gIH1cblxuICBvbkpvaW4ocmVzcCl7XG4gICAgbGV0IHtyZW5kZXJlZCwgY29udGFpbmVyfSA9IHJlc3BcbiAgICBpZihjb250YWluZXIpe1xuICAgICAgbGV0IFt0YWcsIGF0dHJzXSA9IGNvbnRhaW5lclxuICAgICAgdGhpcy5lbCA9IERPTS5yZXBsYWNlUm9vdENvbnRhaW5lcih0aGlzLmVsLCB0YWcsIGF0dHJzKVxuICAgIH1cbiAgICB0aGlzLmNoaWxkSm9pbnMgPSAwXG4gICAgdGhpcy5qb2luUGVuZGluZyA9IHRydWVcbiAgICB0aGlzLmZsYXNoID0gbnVsbFxuXG4gICAgQnJvd3Nlci5kcm9wTG9jYWwodGhpcy5saXZlU29ja2V0LmxvY2FsU3RvcmFnZSwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBDT05TRUNVVElWRV9SRUxPQURTKVxuICAgIHRoaXMuYXBwbHlEaWZmKFwibW91bnRcIiwgcmVuZGVyZWQsICh7ZGlmZiwgZXZlbnRzfSkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IG5ldyBSZW5kZXJlZCh0aGlzLmlkLCBkaWZmKVxuICAgICAgbGV0IGh0bWwgPSB0aGlzLnJlbmRlckNvbnRhaW5lcihudWxsLCBcImpvaW5cIilcbiAgICAgIHRoaXMuZHJvcFBlbmRpbmdSZWZzKClcbiAgICAgIGxldCBmb3JtcyA9IHRoaXMuZm9ybXNGb3JSZWNvdmVyeShodG1sKVxuICAgICAgdGhpcy5qb2luQ291bnQrK1xuXG4gICAgICBpZihmb3Jtcy5sZW5ndGggPiAwKXtcbiAgICAgICAgZm9ybXMuZm9yRWFjaCgoW2Zvcm0sIG5ld0Zvcm0sIG5ld0NpZF0sIGkpID0+IHtcbiAgICAgICAgICB0aGlzLnB1c2hGb3JtUmVjb3ZlcnkoZm9ybSwgbmV3Q2lkLCByZXNwID0+IHtcbiAgICAgICAgICAgIGlmKGkgPT09IGZvcm1zLmxlbmd0aCAtIDEpe1xuICAgICAgICAgICAgICB0aGlzLm9uSm9pbkNvbXBsZXRlKHJlc3AsIGh0bWwsIGV2ZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkpvaW5Db21wbGV0ZShyZXNwLCBodG1sLCBldmVudHMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRyb3BQZW5kaW5nUmVmcygpe1xuICAgIERPTS5hbGwoZG9jdW1lbnQsIGBbJHtQSFhfUkVGX1NSQ309XCIke3RoaXMuaWR9XCJdWyR7UEhYX1JFRn1dYCwgZWwgPT4ge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9SRUYpXG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1JFRl9TUkMpXG4gICAgfSlcbiAgfVxuXG4gIG9uSm9pbkNvbXBsZXRlKHtsaXZlX3BhdGNofSwgaHRtbCwgZXZlbnRzKXtcbiAgICAvLyBJbiBvcmRlciB0byBwcm92aWRlIGEgYmV0dGVyIGV4cGVyaWVuY2UsIHdlIHdhbnQgdG8gam9pblxuICAgIC8vIGFsbCBMaXZlVmlld3MgZmlyc3QgYW5kIG9ubHkgdGhlbiBhcHBseSB0aGVpciBwYXRjaGVzLlxuICAgIGlmKHRoaXMuam9pbkNvdW50ID4gMSB8fCAodGhpcy5wYXJlbnQgJiYgIXRoaXMucGFyZW50LmlzSm9pblBlbmRpbmcoKSkpe1xuICAgICAgcmV0dXJuIHRoaXMuYXBwbHlKb2luUGF0Y2gobGl2ZV9wYXRjaCwgaHRtbCwgZXZlbnRzKVxuICAgIH1cblxuICAgIC8vIE9uZSBkb3duc2lkZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UgbmVlZCB0byBmaW5kIHBoeENoaWxkcmVuXG4gICAgLy8gaW4gdGhlIGh0bWwgZnJhZ21lbnQsIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIERPTS4gVGhlIGZyYWdtZW50XG4gICAgLy8gYWxzbyBkb2VzIG5vdCBpbmNsdWRlIFBIWF9TVEFUSUMsIHNvIHdlIG5lZWQgdG8gY29weSBpdCBvdmVyIGZyb21cbiAgICAvLyB0aGUgRE9NLlxuICAgIGxldCBuZXdDaGlsZHJlbiA9IERPTS5maW5kUGh4Q2hpbGRyZW5JbkZyYWdtZW50KGh0bWwsIHRoaXMuaWQpLmZpbHRlcih0b0VsID0+IHtcbiAgICAgIGxldCBmcm9tRWwgPSB0b0VsLmlkICYmIHRoaXMuZWwucXVlcnlTZWxlY3RvcihgW2lkPVwiJHt0b0VsLmlkfVwiXWApXG4gICAgICBsZXQgcGh4U3RhdGljID0gZnJvbUVsICYmIGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1NUQVRJQylcbiAgICAgIGlmKHBoeFN0YXRpYyl7IHRvRWwuc2V0QXR0cmlidXRlKFBIWF9TVEFUSUMsIHBoeFN0YXRpYykgfVxuICAgICAgcmV0dXJuIHRoaXMuam9pbkNoaWxkKHRvRWwpXG4gICAgfSlcblxuICAgIGlmKG5ld0NoaWxkcmVuLmxlbmd0aCA9PT0gMCl7XG4gICAgICBpZih0aGlzLnBhcmVudCl7XG4gICAgICAgIHRoaXMucm9vdC5wZW5kaW5nSm9pbk9wcy5wdXNoKFt0aGlzLCAoKSA9PiB0aGlzLmFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cyldKVxuICAgICAgICB0aGlzLnBhcmVudC5hY2tKb2luKHRoaXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uQWxsQ2hpbGRKb2luc0NvbXBsZXRlKClcbiAgICAgICAgdGhpcy5hcHBseUpvaW5QYXRjaChsaXZlX3BhdGNoLCBodG1sLCBldmVudHMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9vdC5wZW5kaW5nSm9pbk9wcy5wdXNoKFt0aGlzLCAoKSA9PiB0aGlzLmFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cyldKVxuICAgIH1cbiAgfVxuXG4gIGF0dGFjaFRydWVEb2NFbCgpe1xuICAgIHRoaXMuZWwgPSBET00uYnlJZCh0aGlzLmlkKVxuICAgIHRoaXMuZWwuc2V0QXR0cmlidXRlKFBIWF9ST09UX0lELCB0aGlzLnJvb3QuaWQpXG4gIH1cblxuICBhcHBseUpvaW5QYXRjaChsaXZlX3BhdGNoLCBodG1sLCBldmVudHMpe1xuICAgIHRoaXMuYXR0YWNoVHJ1ZURvY0VsKClcbiAgICBsZXQgcGF0Y2ggPSBuZXcgRE9NUGF0Y2godGhpcywgdGhpcy5lbCwgdGhpcy5pZCwgaHRtbCwgbnVsbClcbiAgICBwYXRjaC5tYXJrUHJ1bmFibGVDb250ZW50Rm9yUmVtb3ZhbCgpXG4gICAgdGhpcy5wZXJmb3JtUGF0Y2gocGF0Y2gsIGZhbHNlKVxuICAgIHRoaXMuam9pbk5ld0NoaWxkcmVuKClcbiAgICBET00uYWxsKHRoaXMuZWwsIGBbJHt0aGlzLmJpbmRpbmcoUEhYX0hPT0spfV0sIFtkYXRhLXBoeC0ke1BIWF9IT09LfV1gLCBob29rRWwgPT4ge1xuICAgICAgbGV0IGhvb2sgPSB0aGlzLmFkZEhvb2soaG9va0VsKVxuICAgICAgaWYoaG9vayl7IGhvb2suX19tb3VudGVkKCkgfVxuICAgIH0pXG5cbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gZmFsc2VcbiAgICB0aGlzLmxpdmVTb2NrZXQuZGlzcGF0Y2hFdmVudHMoZXZlbnRzKVxuICAgIHRoaXMuYXBwbHlQZW5kaW5nVXBkYXRlcygpXG5cbiAgICBpZihsaXZlX3BhdGNoKXtcbiAgICAgIGxldCB7a2luZCwgdG99ID0gbGl2ZV9wYXRjaFxuICAgICAgdGhpcy5saXZlU29ja2V0Lmhpc3RvcnlQYXRjaCh0bywga2luZClcbiAgICB9XG4gICAgdGhpcy5oaWRlTG9hZGVyKClcbiAgICBpZih0aGlzLmpvaW5Db3VudCA+IDEpeyB0aGlzLnRyaWdnZXJSZWNvbm5lY3RlZCgpIH1cbiAgICB0aGlzLnN0b3BDYWxsYmFjaygpXG4gIH1cblxuICB0cmlnZ2VyQmVmb3JlVXBkYXRlSG9vayhmcm9tRWwsIHRvRWwpe1xuICAgIHRoaXMubGl2ZVNvY2tldC50cmlnZ2VyRE9NKFwib25CZWZvcmVFbFVwZGF0ZWRcIiwgW2Zyb21FbCwgdG9FbF0pXG4gICAgbGV0IGhvb2sgPSB0aGlzLmdldEhvb2soZnJvbUVsKVxuICAgIGxldCBpc0lnbm9yZWQgPSBob29rICYmIERPTS5pc0lnbm9yZWQoZnJvbUVsLCB0aGlzLmJpbmRpbmcoUEhYX1VQREFURSkpXG4gICAgaWYoaG9vayAmJiAhZnJvbUVsLmlzRXF1YWxOb2RlKHRvRWwpICYmICEoaXNJZ25vcmVkICYmIGlzRXF1YWxPYmooZnJvbUVsLmRhdGFzZXQsIHRvRWwuZGF0YXNldCkpKXtcbiAgICAgIGhvb2suX19iZWZvcmVVcGRhdGUoKVxuICAgICAgcmV0dXJuIGhvb2tcbiAgICB9XG4gIH1cblxuICBwZXJmb3JtUGF0Y2gocGF0Y2gsIHBydW5lQ2lkcyl7XG4gICAgbGV0IHJlbW92ZWRFbHMgPSBbXVxuICAgIGxldCBwaHhDaGlsZHJlbkFkZGVkID0gZmFsc2VcbiAgICBsZXQgdXBkYXRlZEhvb2tJZHMgPSBuZXcgU2V0KClcblxuICAgIHBhdGNoLmFmdGVyKFwiYWRkZWRcIiwgZWwgPT4ge1xuICAgICAgdGhpcy5saXZlU29ja2V0LnRyaWdnZXJET00oXCJvbk5vZGVBZGRlZFwiLCBbZWxdKVxuXG4gICAgICBsZXQgbmV3SG9vayA9IHRoaXMuYWRkSG9vayhlbClcbiAgICAgIGlmKG5ld0hvb2speyBuZXdIb29rLl9fbW91bnRlZCgpIH1cbiAgICB9KVxuXG4gICAgcGF0Y2guYWZ0ZXIoXCJwaHhDaGlsZEFkZGVkXCIsIGVsID0+IHtcbiAgICAgIGlmKERPTS5pc1BoeFN0aWNreShlbCkpe1xuICAgICAgICB0aGlzLmxpdmVTb2NrZXQuam9pblJvb3RWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwaHhDaGlsZHJlbkFkZGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5iZWZvcmUoXCJ1cGRhdGVkXCIsIChmcm9tRWwsIHRvRWwpID0+IHtcbiAgICAgIGxldCBob29rID0gdGhpcy50cmlnZ2VyQmVmb3JlVXBkYXRlSG9vayhmcm9tRWwsIHRvRWwpXG4gICAgICBpZihob29rKXsgdXBkYXRlZEhvb2tJZHMuYWRkKGZyb21FbC5pZCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcInVwZGF0ZWRcIiwgZWwgPT4ge1xuICAgICAgaWYodXBkYXRlZEhvb2tJZHMuaGFzKGVsLmlkKSl7IHRoaXMuZ2V0SG9vayhlbCkuX191cGRhdGVkKCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcImRpc2NhcmRlZFwiLCAoZWwpID0+IHtcbiAgICAgIGlmKGVsLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSl7IHJlbW92ZWRFbHMucHVzaChlbCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcInRyYW5zaXRpb25zRGlzY2FyZGVkXCIsIGVscyA9PiB0aGlzLmFmdGVyRWxlbWVudHNSZW1vdmVkKGVscywgcHJ1bmVDaWRzKSlcbiAgICBwYXRjaC5wZXJmb3JtKClcbiAgICB0aGlzLmFmdGVyRWxlbWVudHNSZW1vdmVkKHJlbW92ZWRFbHMsIHBydW5lQ2lkcylcblxuICAgIHJldHVybiBwaHhDaGlsZHJlbkFkZGVkXG4gIH1cblxuICBhZnRlckVsZW1lbnRzUmVtb3ZlZChlbGVtZW50cywgcHJ1bmVDaWRzKXtcbiAgICBsZXQgZGVzdHJveWVkQ0lEcyA9IFtdXG4gICAgZWxlbWVudHMuZm9yRWFjaChwYXJlbnQgPT4ge1xuICAgICAgbGV0IGNvbXBvbmVudHMgPSBET00uYWxsKHBhcmVudCwgYFske1BIWF9DT01QT05FTlR9XWApXG4gICAgICBsZXQgaG9va3MgPSBET00uYWxsKHBhcmVudCwgYFske3RoaXMuYmluZGluZyhQSFhfSE9PSyl9XWApXG4gICAgICBjb21wb25lbnRzLmNvbmNhdChwYXJlbnQpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBsZXQgY2lkID0gdGhpcy5jb21wb25lbnRJRChlbClcbiAgICAgICAgaWYoaXNDaWQoY2lkKSAmJiBkZXN0cm95ZWRDSURzLmluZGV4T2YoY2lkKSA9PT0gLTEpeyBkZXN0cm95ZWRDSURzLnB1c2goY2lkKSB9XG4gICAgICB9KVxuICAgICAgaG9va3MuY29uY2F0KHBhcmVudCkuZm9yRWFjaChob29rRWwgPT4ge1xuICAgICAgICBsZXQgaG9vayA9IHRoaXMuZ2V0SG9vayhob29rRWwpXG4gICAgICAgIGhvb2sgJiYgdGhpcy5kZXN0cm95SG9vayhob29rKVxuICAgICAgfSlcbiAgICB9KVxuICAgIC8vIFdlIHNob3VsZCBub3QgcHJ1bmVDaWRzIG9uIGpvaW5zLiBPdGhlcndpc2UsIGluIGNhc2Ugb2ZcbiAgICAvLyByZWpvaW5zLCB3ZSBtYXkgbm90aWZ5IGNpZHMgdGhhdCBubyBsb25nZXIgYmVsb25nIHRvIHRoZVxuICAgIC8vIGN1cnJlbnQgTGl2ZVZpZXcgdG8gYmUgcmVtb3ZlZC5cbiAgICBpZihwcnVuZUNpZHMpe1xuICAgICAgdGhpcy5tYXliZVB1c2hDb21wb25lbnRzRGVzdHJveWVkKGRlc3Ryb3llZENJRHMpXG4gICAgfVxuICB9XG5cbiAgam9pbk5ld0NoaWxkcmVuKCl7XG4gICAgRE9NLmZpbmRQaHhDaGlsZHJlbih0aGlzLmVsLCB0aGlzLmlkKS5mb3JFYWNoKGVsID0+IHRoaXMuam9pbkNoaWxkKGVsKSlcbiAgfVxuXG4gIGdldENoaWxkQnlJZChpZCl7IHJldHVybiB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF1baWRdIH1cblxuICBnZXREZXNjZW5kZW50QnlFbChlbCl7XG4gICAgaWYoZWwuaWQgPT09IHRoaXMuaWQpe1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bZWwuZ2V0QXR0cmlidXRlKFBIWF9QQVJFTlRfSUQpXVtlbC5pZF1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95RGVzY2VuZGVudChpZCl7XG4gICAgZm9yKGxldCBwYXJlbnRJZCBpbiB0aGlzLnJvb3QuY2hpbGRyZW4pe1xuICAgICAgZm9yKGxldCBjaGlsZElkIGluIHRoaXMucm9vdC5jaGlsZHJlbltwYXJlbnRJZF0pe1xuICAgICAgICBpZihjaGlsZElkID09PSBpZCl7IHJldHVybiB0aGlzLnJvb3QuY2hpbGRyZW5bcGFyZW50SWRdW2NoaWxkSWRdLmRlc3Ryb3koKSB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgam9pbkNoaWxkKGVsKXtcbiAgICBsZXQgY2hpbGQgPSB0aGlzLmdldENoaWxkQnlJZChlbC5pZClcbiAgICBpZighY2hpbGQpe1xuICAgICAgbGV0IHZpZXcgPSBuZXcgVmlldyhlbCwgdGhpcy5saXZlU29ja2V0LCB0aGlzKVxuICAgICAgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdW3ZpZXcuaWRdID0gdmlld1xuICAgICAgdmlldy5qb2luKClcbiAgICAgIHRoaXMuY2hpbGRKb2lucysrXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlzSm9pblBlbmRpbmcoKXsgcmV0dXJuIHRoaXMuam9pblBlbmRpbmcgfVxuXG4gIGFja0pvaW4oX2NoaWxkKXtcbiAgICB0aGlzLmNoaWxkSm9pbnMtLVxuXG4gICAgaWYodGhpcy5jaGlsZEpvaW5zID09PSAwKXtcbiAgICAgIGlmKHRoaXMucGFyZW50KXtcbiAgICAgICAgdGhpcy5wYXJlbnQuYWNrSm9pbih0aGlzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkFsbENoaWxkSm9pbnNDb21wbGV0ZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25BbGxDaGlsZEpvaW5zQ29tcGxldGUoKXtcbiAgICB0aGlzLmpvaW5DYWxsYmFjaygoKSA9PiB7XG4gICAgICB0aGlzLnBlbmRpbmdKb2luT3BzLmZvckVhY2goKFt2aWV3LCBvcF0pID0+IHtcbiAgICAgICAgaWYoIXZpZXcuaXNEZXN0cm95ZWQoKSl7IG9wKCkgfVxuICAgICAgfSlcbiAgICAgIHRoaXMucGVuZGluZ0pvaW5PcHMgPSBbXVxuICAgIH0pXG4gIH1cblxuICB1cGRhdGUoZGlmZiwgZXZlbnRzKXtcbiAgICBpZih0aGlzLmlzSm9pblBlbmRpbmcoKSB8fCAodGhpcy5saXZlU29ja2V0Lmhhc1BlbmRpbmdMaW5rKCkgJiYgIURPTS5pc1BoeFN0aWNreSh0aGlzLmVsKSkpe1xuICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0RpZmZzLnB1c2goe2RpZmYsIGV2ZW50c30pXG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlZC5tZXJnZURpZmYoZGlmZilcbiAgICBsZXQgcGh4Q2hpbGRyZW5BZGRlZCA9IGZhbHNlXG5cbiAgICAvLyBXaGVuIHRoZSBkaWZmIG9ubHkgY29udGFpbnMgY29tcG9uZW50IGRpZmZzLCB0aGVuIHdhbGsgY29tcG9uZW50c1xuICAgIC8vIGFuZCBwYXRjaCBvbmx5IHRoZSBwYXJlbnQgY29tcG9uZW50IGNvbnRhaW5lcnMgZm91bmQgaW4gdGhlIGRpZmYuXG4gICAgLy8gT3RoZXJ3aXNlLCBwYXRjaCBlbnRpcmUgTFYgY29udGFpbmVyLlxuICAgIGlmKHRoaXMucmVuZGVyZWQuaXNDb21wb25lbnRPbmx5RGlmZihkaWZmKSl7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQudGltZShcImNvbXBvbmVudCBwYXRjaCBjb21wbGV0ZVwiLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJlbnRDaWRzID0gRE9NLmZpbmRQYXJlbnRDSURzKHRoaXMuZWwsIHRoaXMucmVuZGVyZWQuY29tcG9uZW50Q0lEcyhkaWZmKSlcbiAgICAgICAgcGFyZW50Q2lkcy5mb3JFYWNoKHBhcmVudENJRCA9PiB7XG4gICAgICAgICAgaWYodGhpcy5jb21wb25lbnRQYXRjaCh0aGlzLnJlbmRlcmVkLmdldENvbXBvbmVudChkaWZmLCBwYXJlbnRDSUQpLCBwYXJlbnRDSUQpKXsgcGh4Q2hpbGRyZW5BZGRlZCA9IHRydWUgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYoIWlzRW1wdHkoZGlmZikpe1xuICAgICAgdGhpcy5saXZlU29ja2V0LnRpbWUoXCJmdWxsIHBhdGNoIGNvbXBsZXRlXCIsICgpID0+IHtcbiAgICAgICAgbGV0IGh0bWwgPSB0aGlzLnJlbmRlckNvbnRhaW5lcihkaWZmLCBcInVwZGF0ZVwiKVxuICAgICAgICBsZXQgcGF0Y2ggPSBuZXcgRE9NUGF0Y2godGhpcywgdGhpcy5lbCwgdGhpcy5pZCwgaHRtbCwgbnVsbClcbiAgICAgICAgcGh4Q2hpbGRyZW5BZGRlZCA9IHRoaXMucGVyZm9ybVBhdGNoKHBhdGNoLCB0cnVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmxpdmVTb2NrZXQuZGlzcGF0Y2hFdmVudHMoZXZlbnRzKVxuICAgIGlmKHBoeENoaWxkcmVuQWRkZWQpeyB0aGlzLmpvaW5OZXdDaGlsZHJlbigpIH1cbiAgfVxuXG4gIHJlbmRlckNvbnRhaW5lcihkaWZmLCBraW5kKXtcbiAgICByZXR1cm4gdGhpcy5saXZlU29ja2V0LnRpbWUoYHRvU3RyaW5nIGRpZmYgKCR7a2luZH0pYCwgKCkgPT4ge1xuICAgICAgbGV0IHRhZyA9IHRoaXMuZWwudGFnTmFtZVxuICAgICAgLy8gRG9uJ3Qgc2tpcCBhbnkgY29tcG9uZW50IGluIHRoZSBkaWZmIG5vciBhbnkgbWFya2VkIGFzIHBydW5lZFxuICAgICAgLy8gKGFzIHRoZXkgbWF5IGhhdmUgYmVlbiBhZGRlZCBiYWNrKVxuICAgICAgbGV0IGNpZHMgPSBkaWZmID8gdGhpcy5yZW5kZXJlZC5jb21wb25lbnRDSURzKGRpZmYpLmNvbmNhdCh0aGlzLnBydW5pbmdDSURzKSA6IG51bGxcbiAgICAgIGxldCBodG1sID0gdGhpcy5yZW5kZXJlZC50b1N0cmluZyhjaWRzKVxuICAgICAgcmV0dXJuIGA8JHt0YWd9PiR7aHRtbH08LyR7dGFnfT5gXG4gICAgfSlcbiAgfVxuXG4gIGNvbXBvbmVudFBhdGNoKGRpZmYsIGNpZCl7XG4gICAgaWYoaXNFbXB0eShkaWZmKSkgcmV0dXJuIGZhbHNlXG4gICAgbGV0IGh0bWwgPSB0aGlzLnJlbmRlcmVkLmNvbXBvbmVudFRvU3RyaW5nKGNpZClcbiAgICBsZXQgcGF0Y2ggPSBuZXcgRE9NUGF0Y2godGhpcywgdGhpcy5lbCwgdGhpcy5pZCwgaHRtbCwgY2lkKVxuICAgIGxldCBjaGlsZHJlbkFkZGVkID0gdGhpcy5wZXJmb3JtUGF0Y2gocGF0Y2gsIHRydWUpXG4gICAgcmV0dXJuIGNoaWxkcmVuQWRkZWRcbiAgfVxuXG4gIGdldEhvb2soZWwpeyByZXR1cm4gdGhpcy52aWV3SG9va3NbVmlld0hvb2suZWxlbWVudElEKGVsKV0gfVxuXG4gIGFkZEhvb2soZWwpe1xuICAgIGlmKFZpZXdIb29rLmVsZW1lbnRJRChlbCkgfHwgIWVsLmdldEF0dHJpYnV0ZSl7IHJldHVybiB9XG4gICAgbGV0IGhvb2tOYW1lID0gZWwuZ2V0QXR0cmlidXRlKGBkYXRhLXBoeC0ke1BIWF9IT09LfWApIHx8IGVsLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0hPT0spKVxuICAgIGlmKGhvb2tOYW1lICYmICF0aGlzLm93bnNFbGVtZW50KGVsKSl7IHJldHVybiB9XG4gICAgbGV0IGNhbGxiYWNrcyA9IHRoaXMubGl2ZVNvY2tldC5nZXRIb29rQ2FsbGJhY2tzKGhvb2tOYW1lKVxuXG4gICAgaWYoY2FsbGJhY2tzKXtcbiAgICAgIGlmKCFlbC5pZCl7IGxvZ0Vycm9yKGBubyBET00gSUQgZm9yIGhvb2sgXCIke2hvb2tOYW1lfVwiLiBIb29rcyByZXF1aXJlIGEgdW5pcXVlIElEIG9uIGVhY2ggZWxlbWVudC5gLCBlbCkgfVxuICAgICAgbGV0IGhvb2sgPSBuZXcgVmlld0hvb2sodGhpcywgZWwsIGNhbGxiYWNrcylcbiAgICAgIHRoaXMudmlld0hvb2tzW1ZpZXdIb29rLmVsZW1lbnRJRChob29rLmVsKV0gPSBob29rXG4gICAgICByZXR1cm4gaG9va1xuICAgIH0gZWxzZSBpZihob29rTmFtZSAhPT0gbnVsbCl7XG4gICAgICBsb2dFcnJvcihgdW5rbm93biBob29rIGZvdW5kIGZvciBcIiR7aG9va05hbWV9XCJgLCBlbClcbiAgICB9XG4gIH1cblxuICBkZXN0cm95SG9vayhob29rKXtcbiAgICBob29rLl9fZGVzdHJveWVkKClcbiAgICBob29rLl9fY2xlYW51cF9fKClcbiAgICBkZWxldGUgdGhpcy52aWV3SG9va3NbVmlld0hvb2suZWxlbWVudElEKGhvb2suZWwpXVxuICB9XG5cbiAgYXBwbHlQZW5kaW5nVXBkYXRlcygpe1xuICAgIHRoaXMucGVuZGluZ0RpZmZzLmZvckVhY2goKHtkaWZmLCBldmVudHN9KSA9PiB0aGlzLnVwZGF0ZShkaWZmLCBldmVudHMpKVxuICAgIHRoaXMucGVuZGluZ0RpZmZzID0gW11cbiAgfVxuXG4gIG9uQ2hhbm5lbChldmVudCwgY2Ipe1xuICAgIHRoaXMubGl2ZVNvY2tldC5vbkNoYW5uZWwodGhpcy5jaGFubmVsLCBldmVudCwgcmVzcCA9PiB7XG4gICAgICBpZih0aGlzLmlzSm9pblBlbmRpbmcoKSl7XG4gICAgICAgIHRoaXMucm9vdC5wZW5kaW5nSm9pbk9wcy5wdXNoKFt0aGlzLCAoKSA9PiBjYihyZXNwKV0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiBjYihyZXNwKSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYmluZENoYW5uZWwoKXtcbiAgICAvLyBUaGUgZGlmZiBldmVudCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgcmVndWxhciB1cGRhdGUgb3BlcmF0aW9ucy5cbiAgICAvLyBBbGwgb3RoZXIgb3BlcmF0aW9ucyBhcmUgcXVldWVkIHRvIGJlIGFwcGxpZWQgb25seSBhZnRlciBqb2luLlxuICAgIHRoaXMubGl2ZVNvY2tldC5vbkNoYW5uZWwodGhpcy5jaGFubmVsLCBcImRpZmZcIiwgKHJhd0RpZmYpID0+IHtcbiAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXF1ZXN0RE9NVXBkYXRlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseURpZmYoXCJ1cGRhdGVcIiwgcmF3RGlmZiwgKHtkaWZmLCBldmVudHN9KSA9PiB0aGlzLnVwZGF0ZShkaWZmLCBldmVudHMpKVxuICAgICAgfSlcbiAgICB9KVxuICAgIHRoaXMub25DaGFubmVsKFwicmVkaXJlY3RcIiwgKHt0bywgZmxhc2h9KSA9PiB0aGlzLm9uUmVkaXJlY3Qoe3RvLCBmbGFzaH0pKVxuICAgIHRoaXMub25DaGFubmVsKFwibGl2ZV9wYXRjaFwiLCAocmVkaXIpID0+IHRoaXMub25MaXZlUGF0Y2gocmVkaXIpKVxuICAgIHRoaXMub25DaGFubmVsKFwibGl2ZV9yZWRpcmVjdFwiLCAocmVkaXIpID0+IHRoaXMub25MaXZlUmVkaXJlY3QocmVkaXIpKVxuICAgIHRoaXMuY2hhbm5lbC5vbkVycm9yKHJlYXNvbiA9PiB0aGlzLm9uRXJyb3IocmVhc29uKSlcbiAgICB0aGlzLmNoYW5uZWwub25DbG9zZShyZWFzb24gPT4gdGhpcy5vbkNsb3NlKHJlYXNvbikpXG4gIH1cblxuICBkZXN0cm95QWxsQ2hpbGRyZW4oKXtcbiAgICBmb3IobGV0IGlkIGluIHRoaXMucm9vdC5jaGlsZHJlblt0aGlzLmlkXSl7XG4gICAgICB0aGlzLmdldENoaWxkQnlJZChpZCkuZGVzdHJveSgpXG4gICAgfVxuICB9XG5cbiAgb25MaXZlUmVkaXJlY3QocmVkaXIpe1xuICAgIGxldCB7dG8sIGtpbmQsIGZsYXNofSA9IHJlZGlyXG4gICAgbGV0IHVybCA9IHRoaXMuZXhwYW5kVVJMKHRvKVxuICAgIHRoaXMubGl2ZVNvY2tldC5oaXN0b3J5UmVkaXJlY3QodXJsLCBraW5kLCBmbGFzaClcbiAgfVxuXG4gIG9uTGl2ZVBhdGNoKHJlZGlyKXtcbiAgICBsZXQge3RvLCBraW5kfSA9IHJlZGlyXG4gICAgdGhpcy5ocmVmID0gdGhpcy5leHBhbmRVUkwodG8pXG4gICAgdGhpcy5saXZlU29ja2V0Lmhpc3RvcnlQYXRjaCh0bywga2luZClcbiAgfVxuXG4gIGV4cGFuZFVSTCh0byl7XG4gICAgcmV0dXJuIHRvLnN0YXJ0c1dpdGgoXCIvXCIpID8gYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0ke3RvfWAgOiB0b1xuICB9XG5cbiAgb25SZWRpcmVjdCh7dG8sIGZsYXNofSl7IHRoaXMubGl2ZVNvY2tldC5yZWRpcmVjdCh0bywgZmxhc2gpIH1cblxuICBpc0Rlc3Ryb3llZCgpeyByZXR1cm4gdGhpcy5kZXN0cm95ZWQgfVxuXG4gIGpvaW4oY2FsbGJhY2spe1xuICAgIGlmKHRoaXMuaXNNYWluKCkpe1xuICAgICAgdGhpcy5zdG9wQ2FsbGJhY2sgPSB0aGlzLmxpdmVTb2NrZXQud2l0aFBhZ2VMb2FkaW5nKHt0bzogdGhpcy5ocmVmLCBraW5kOiBcImluaXRpYWxcIn0pXG4gICAgfVxuICAgIHRoaXMuam9pbkNhbGxiYWNrID0gKG9uRG9uZSkgPT4ge1xuICAgICAgb25Eb25lID0gb25Eb25lIHx8IGZ1bmN0aW9uKCl7fVxuICAgICAgY2FsbGJhY2sgPyBjYWxsYmFjayh0aGlzLmpvaW5Db3VudCwgb25Eb25lKSA6IG9uRG9uZSgpXG4gICAgfVxuICAgIHRoaXMubGl2ZVNvY2tldC53cmFwUHVzaCh0aGlzLCB7dGltZW91dDogZmFsc2V9LCAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFubmVsLmpvaW4oKVxuICAgICAgICAucmVjZWl2ZShcIm9rXCIsIGRhdGEgPT4ge1xuICAgICAgICAgIGlmKCF0aGlzLmlzRGVzdHJveWVkKCkpe1xuICAgICAgICAgICAgdGhpcy5saXZlU29ja2V0LnJlcXVlc3RET01VcGRhdGUoKCkgPT4gdGhpcy5vbkpvaW4oZGF0YSkpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVjZWl2ZShcImVycm9yXCIsIHJlc3AgPT4gIXRoaXMuaXNEZXN0cm95ZWQoKSAmJiB0aGlzLm9uSm9pbkVycm9yKHJlc3ApKVxuICAgICAgICAucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4gIXRoaXMuaXNEZXN0cm95ZWQoKSAmJiB0aGlzLm9uSm9pbkVycm9yKHtyZWFzb246IFwidGltZW91dFwifSkpXG4gICAgfSlcbiAgfVxuXG4gIG9uSm9pbkVycm9yKHJlc3Ape1xuICAgIGlmKHJlc3AucmVhc29uID09PSBcInVuYXV0aG9yaXplZFwiIHx8IHJlc3AucmVhc29uID09PSBcInN0YWxlXCIpe1xuICAgICAgdGhpcy5sb2coXCJlcnJvclwiLCAoKSA9PiBbXCJ1bmF1dGhvcml6ZWQgbGl2ZV9yZWRpcmVjdC4gRmFsbGluZyBiYWNrIHRvIHBhZ2UgcmVxdWVzdFwiLCByZXNwXSlcbiAgICAgIHJldHVybiB0aGlzLm9uUmVkaXJlY3Qoe3RvOiB0aGlzLmhyZWZ9KVxuICAgIH1cbiAgICBpZihyZXNwLnJlZGlyZWN0IHx8IHJlc3AubGl2ZV9yZWRpcmVjdCl7XG4gICAgICB0aGlzLmpvaW5QZW5kaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuY2hhbm5lbC5sZWF2ZSgpXG4gICAgfVxuICAgIGlmKHJlc3AucmVkaXJlY3QpeyByZXR1cm4gdGhpcy5vblJlZGlyZWN0KHJlc3AucmVkaXJlY3QpIH1cbiAgICBpZihyZXNwLmxpdmVfcmVkaXJlY3QpeyByZXR1cm4gdGhpcy5vbkxpdmVSZWRpcmVjdChyZXNwLmxpdmVfcmVkaXJlY3QpIH1cbiAgICB0aGlzLmxvZyhcImVycm9yXCIsICgpID0+IFtcInVuYWJsZSB0byBqb2luXCIsIHJlc3BdKVxuICAgIGlmKHRoaXMubGl2ZVNvY2tldC5pc0Nvbm5lY3RlZCgpKXsgdGhpcy5saXZlU29ja2V0LnJlbG9hZFdpdGhKaXR0ZXIodGhpcykgfVxuICB9XG5cbiAgb25DbG9zZShyZWFzb24pe1xuICAgIGlmKHRoaXMuaXNEZXN0cm95ZWQoKSl7IHJldHVybiB9XG4gICAgaWYodGhpcy5saXZlU29ja2V0Lmhhc1BlbmRpbmdMaW5rKCkgJiYgcmVhc29uICE9PSBcImxlYXZlXCIpe1xuICAgICAgcmV0dXJuIHRoaXMubGl2ZVNvY2tldC5yZWxvYWRXaXRoSml0dGVyKHRoaXMpXG4gICAgfVxuICAgIHRoaXMuZGVzdHJveUFsbENoaWxkcmVuKClcbiAgICB0aGlzLmxpdmVTb2NrZXQuZHJvcEFjdGl2ZUVsZW1lbnQodGhpcylcbiAgICAvLyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiBiZSBudWxsIGluIEludGVybmV0IEV4cGxvcmVyIDExXG4gICAgaWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl7IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpIH1cbiAgICBpZih0aGlzLmxpdmVTb2NrZXQuaXNVbmxvYWRlZCgpKXtcbiAgICAgIHRoaXMuc2hvd0xvYWRlcihCRUZPUkVfVU5MT0FEX0xPQURFUl9USU1FT1VUKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IocmVhc29uKXtcbiAgICB0aGlzLm9uQ2xvc2UocmVhc29uKVxuICAgIGlmKHRoaXMubGl2ZVNvY2tldC5pc0Nvbm5lY3RlZCgpKXsgdGhpcy5sb2coXCJlcnJvclwiLCAoKSA9PiBbXCJ2aWV3IGNyYXNoZWRcIiwgcmVhc29uXSkgfVxuICAgIGlmKCF0aGlzLmxpdmVTb2NrZXQuaXNVbmxvYWRlZCgpKXsgdGhpcy5kaXNwbGF5RXJyb3IoKSB9XG4gIH1cblxuICBkaXNwbGF5RXJyb3IoKXtcbiAgICBpZih0aGlzLmlzTWFpbigpKXsgRE9NLmRpc3BhdGNoRXZlbnQod2luZG93LCBcInBoeDpwYWdlLWxvYWRpbmctc3RhcnRcIiwge2RldGFpbDoge3RvOiB0aGlzLmhyZWYsIGtpbmQ6IFwiZXJyb3JcIn19KSB9XG4gICAgdGhpcy5zaG93TG9hZGVyKClcbiAgICB0aGlzLnNldENvbnRhaW5lckNsYXNzZXMoUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUywgUEhYX0VSUk9SX0NMQVNTKVxuICB9XG5cbiAgcHVzaFdpdGhSZXBseShyZWZHZW5lcmF0b3IsIGV2ZW50LCBwYXlsb2FkLCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIGlmKCF0aGlzLmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuXG4gICAgbGV0IFtyZWYsIFtlbF0sIG9wdHNdID0gcmVmR2VuZXJhdG9yID8gcmVmR2VuZXJhdG9yKCkgOiBbbnVsbCwgW10sIHt9XVxuICAgIGxldCBvbkxvYWRpbmdEb25lID0gZnVuY3Rpb24oKXsgfVxuICAgIGlmKG9wdHMucGFnZV9sb2FkaW5nIHx8IChlbCAmJiAoZWwuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfUEFHRV9MT0FESU5HKSkgIT09IG51bGwpKSl7XG4gICAgICBvbkxvYWRpbmdEb25lID0gdGhpcy5saXZlU29ja2V0LndpdGhQYWdlTG9hZGluZyh7a2luZDogXCJlbGVtZW50XCIsIHRhcmdldDogZWx9KVxuICAgIH1cblxuICAgIGlmKHR5cGVvZiAocGF5bG9hZC5jaWQpICE9PSBcIm51bWJlclwiKXsgZGVsZXRlIHBheWxvYWQuY2lkIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5saXZlU29ja2V0LndyYXBQdXNoKHRoaXMsIHt0aW1lb3V0OiB0cnVlfSwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLnB1c2goZXZlbnQsIHBheWxvYWQsIFBVU0hfVElNRU9VVCkucmVjZWl2ZShcIm9rXCIsIHJlc3AgPT4ge1xuICAgICAgICAgIGlmKHJlZiAhPT0gbnVsbCl7IHRoaXMudW5kb1JlZnMocmVmKSB9XG4gICAgICAgICAgbGV0IGZpbmlzaCA9IChob29rUmVwbHkpID0+IHtcbiAgICAgICAgICAgIGlmKHJlc3AucmVkaXJlY3QpeyB0aGlzLm9uUmVkaXJlY3QocmVzcC5yZWRpcmVjdCkgfVxuICAgICAgICAgICAgaWYocmVzcC5saXZlX3BhdGNoKXsgdGhpcy5vbkxpdmVQYXRjaChyZXNwLmxpdmVfcGF0Y2gpIH1cbiAgICAgICAgICAgIGlmKHJlc3AubGl2ZV9yZWRpcmVjdCl7IHRoaXMub25MaXZlUmVkaXJlY3QocmVzcC5saXZlX3JlZGlyZWN0KSB9XG4gICAgICAgICAgICBvbkxvYWRpbmdEb25lKClcbiAgICAgICAgICAgIG9uUmVwbHkocmVzcCwgaG9va1JlcGx5KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXNwLmRpZmYpe1xuICAgICAgICAgICAgdGhpcy5saXZlU29ja2V0LnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgaG9va1JlcGx5ID0gdGhpcy5hcHBseURpZmYoXCJ1cGRhdGVcIiwgcmVzcC5kaWZmLCAoe2RpZmYsIGV2ZW50c30pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShkaWZmLCBldmVudHMpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGZpbmlzaChob29rUmVwbHkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5pc2gobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHVuZG9SZWZzKHJlZil7XG4gICAgRE9NLmFsbChkb2N1bWVudCwgYFske1BIWF9SRUZfU1JDfT1cIiR7dGhpcy5pZH1cIl1bJHtQSFhfUkVGfT1cIiR7cmVmfVwiXWAsIGVsID0+IHtcbiAgICAgIGxldCBkaXNhYmxlZFZhbCA9IGVsLmdldEF0dHJpYnV0ZShQSFhfRElTQUJMRUQpXG4gICAgICAvLyByZW1vdmUgcmVmc1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9SRUYpXG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1JFRl9TUkMpXG4gICAgICAvLyByZXN0b3JlIGlucHV0c1xuICAgICAgaWYoZWwuZ2V0QXR0cmlidXRlKFBIWF9SRUFET05MWSkgIT09IG51bGwpe1xuICAgICAgICBlbC5yZWFkT25seSA9IGZhbHNlXG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVBRE9OTFkpXG4gICAgICB9XG4gICAgICBpZihkaXNhYmxlZFZhbCAhPT0gbnVsbCl7XG4gICAgICAgIGVsLmRpc2FibGVkID0gZGlzYWJsZWRWYWwgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfRElTQUJMRUQpXG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgY2xhc3Nlc1xuICAgICAgUEhYX0VWRU5UX0NMQVNTRVMuZm9yRWFjaChjbGFzc05hbWUgPT4gRE9NLnJlbW92ZUNsYXNzKGVsLCBjbGFzc05hbWUpKVxuICAgICAgLy8gcmVzdG9yZSBkaXNhYmxlc1xuICAgICAgbGV0IGRpc2FibGVSZXN0b3JlID0gZWwuZ2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSlcbiAgICAgIGlmKGRpc2FibGVSZXN0b3JlICE9PSBudWxsKXtcbiAgICAgICAgZWwuaW5uZXJUZXh0ID0gZGlzYWJsZVJlc3RvcmVcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSlcbiAgICAgIH1cbiAgICAgIGxldCB0b0VsID0gRE9NLnByaXZhdGUoZWwsIFBIWF9SRUYpXG4gICAgICBpZih0b0VsKXtcbiAgICAgICAgbGV0IGhvb2sgPSB0aGlzLnRyaWdnZXJCZWZvcmVVcGRhdGVIb29rKGVsLCB0b0VsKVxuICAgICAgICBET01QYXRjaC5wYXRjaEVsKGVsLCB0b0VsLCB0aGlzLmxpdmVTb2NrZXQuZ2V0QWN0aXZlRWxlbWVudCgpKVxuICAgICAgICBpZihob29rKXsgaG9vay5fX3VwZGF0ZWQoKSB9XG4gICAgICAgIERPTS5kZWxldGVQcml2YXRlKGVsLCBQSFhfUkVGKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwdXRSZWYoZWxlbWVudHMsIGV2ZW50LCBvcHRzID0ge30pe1xuICAgIGxldCBuZXdSZWYgPSB0aGlzLnJlZisrXG4gICAgbGV0IGRpc2FibGVXaXRoID0gdGhpcy5iaW5kaW5nKFBIWF9ESVNBQkxFX1dJVEgpXG4gICAgaWYob3B0cy5sb2FkaW5nKXsgZWxlbWVudHMgPSBlbGVtZW50cy5jb25jYXQoRE9NLmFsbChkb2N1bWVudCwgb3B0cy5sb2FkaW5nKSl9XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoYHBoeC0ke2V2ZW50fS1sb2FkaW5nYClcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShQSFhfUkVGLCBuZXdSZWYpXG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX1JFRl9TUkMsIHRoaXMuZWwuaWQpXG4gICAgICBsZXQgZGlzYWJsZVRleHQgPSBlbC5nZXRBdHRyaWJ1dGUoZGlzYWJsZVdpdGgpXG4gICAgICBpZihkaXNhYmxlVGV4dCAhPT0gbnVsbCl7XG4gICAgICAgIGlmKCFlbC5nZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFKSl7XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSwgZWwuaW5uZXJUZXh0KVxuICAgICAgICB9XG4gICAgICAgIGlmKGRpc2FibGVUZXh0ICE9PSBcIlwiKXsgZWwuaW5uZXJUZXh0ID0gZGlzYWJsZVRleHQgfVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIFtuZXdSZWYsIGVsZW1lbnRzLCBvcHRzXVxuICB9XG5cbiAgY29tcG9uZW50SUQoZWwpe1xuICAgIGxldCBjaWQgPSBlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpXG4gICAgcmV0dXJuIGNpZCA/IHBhcnNlSW50KGNpZCkgOiBudWxsXG4gIH1cblxuICB0YXJnZXRDb21wb25lbnRJRCh0YXJnZXQsIHRhcmdldEN0eCwgb3B0cyA9IHt9KXtcbiAgICBpZihpc0NpZCh0YXJnZXRDdHgpKXsgcmV0dXJuIHRhcmdldEN0eCB9XG5cbiAgICBsZXQgY2lkT3JTZWxlY3RvciA9IHRhcmdldC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFwidGFyZ2V0XCIpKVxuICAgIGlmKGlzQ2lkKGNpZE9yU2VsZWN0b3IpKXtcbiAgICAgIHJldHVybiBwYXJzZUludChjaWRPclNlbGVjdG9yKVxuICAgIH0gZWxzZSBpZih0YXJnZXRDdHggJiYgKGNpZE9yU2VsZWN0b3IgIT09IG51bGwgfHwgb3B0cy50YXJnZXQpKXtcbiAgICAgIHJldHVybiB0aGlzLmNsb3Nlc3RDb21wb25lbnRJRCh0YXJnZXRDdHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgY2xvc2VzdENvbXBvbmVudElEKHRhcmdldEN0eCl7XG4gICAgaWYoaXNDaWQodGFyZ2V0Q3R4KSl7XG4gICAgICByZXR1cm4gdGFyZ2V0Q3R4XG4gICAgfSBlbHNlIGlmKHRhcmdldEN0eCl7XG4gICAgICByZXR1cm4gbWF5YmUodGFyZ2V0Q3R4LmNsb3Nlc3QoYFske1BIWF9DT01QT05FTlR9XWApLCBlbCA9PiB0aGlzLm93bnNFbGVtZW50KGVsKSAmJiB0aGlzLmNvbXBvbmVudElEKGVsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBwdXNoSG9va0V2ZW50KHRhcmdldEN0eCwgZXZlbnQsIHBheWxvYWQsIG9uUmVwbHkpe1xuICAgIGlmKCF0aGlzLmlzQ29ubmVjdGVkKCkpe1xuICAgICAgdGhpcy5sb2coXCJob29rXCIsICgpID0+IFtcInVuYWJsZSB0byBwdXNoIGhvb2sgZXZlbnQuIExpdmVWaWV3IG5vdCBjb25uZWN0ZWRcIiwgZXZlbnQsIHBheWxvYWRdKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGxldCBbcmVmLCBlbHMsIG9wdHNdID0gdGhpcy5wdXRSZWYoW10sIFwiaG9va1wiKVxuICAgIHRoaXMucHVzaFdpdGhSZXBseSgoKSA9PiBbcmVmLCBlbHMsIG9wdHNdLCBcImV2ZW50XCIsIHtcbiAgICAgIHR5cGU6IFwiaG9va1wiLFxuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdmFsdWU6IHBheWxvYWQsXG4gICAgICBjaWQ6IHRoaXMuY2xvc2VzdENvbXBvbmVudElEKHRhcmdldEN0eClcbiAgICB9LCAocmVzcCwgcmVwbHkpID0+IG9uUmVwbHkocmVwbHksIHJlZikpXG5cbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICBleHRyYWN0TWV0YShlbCwgbWV0YSwgdmFsdWUpe1xuICAgIGxldCBwcmVmaXggPSB0aGlzLmJpbmRpbmcoXCJ2YWx1ZS1cIilcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgZWwuYXR0cmlidXRlcy5sZW5ndGg7IGkrKyl7XG4gICAgICBpZighbWV0YSl7IG1ldGEgPSB7fSB9XG4gICAgICBsZXQgbmFtZSA9IGVsLmF0dHJpYnV0ZXNbaV0ubmFtZVxuICAgICAgaWYobmFtZS5zdGFydHNXaXRoKHByZWZpeCkpeyBtZXRhW25hbWUucmVwbGFjZShwcmVmaXgsIFwiXCIpXSA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSB9XG4gICAgfVxuICAgIGlmKGVsLnZhbHVlICE9PSB1bmRlZmluZWQpe1xuICAgICAgaWYoIW1ldGEpeyBtZXRhID0ge30gfVxuICAgICAgbWV0YS52YWx1ZSA9IGVsLnZhbHVlXG5cbiAgICAgIGlmKGVsLnRhZ05hbWUgPT09IFwiSU5QVVRcIiAmJiBDSEVDS0FCTEVfSU5QVVRTLmluZGV4T2YoZWwudHlwZSkgPj0gMCAmJiAhZWwuY2hlY2tlZCl7XG4gICAgICAgIGRlbGV0ZSBtZXRhLnZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmKHZhbHVlKXtcbiAgICAgIGlmKCFtZXRhKXsgbWV0YSA9IHt9IH1cbiAgICAgIGZvcihsZXQga2V5IGluIHZhbHVlKXsgbWV0YVtrZXldID0gdmFsdWVba2V5XSB9XG4gICAgfVxuICAgIHJldHVybiBtZXRhXG4gIH1cblxuICBwdXNoRXZlbnQodHlwZSwgZWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIG1ldGEsIG9wdHMgPSB7fSl7XG4gICAgdGhpcy5wdXNoV2l0aFJlcGx5KCgpID0+IHRoaXMucHV0UmVmKFtlbF0sIHR5cGUsIG9wdHMpLCBcImV2ZW50XCIsIHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBldmVudDogcGh4RXZlbnQsXG4gICAgICB2YWx1ZTogdGhpcy5leHRyYWN0TWV0YShlbCwgbWV0YSwgb3B0cy52YWx1ZSksXG4gICAgICBjaWQ6IHRoaXMudGFyZ2V0Q29tcG9uZW50SUQoZWwsIHRhcmdldEN0eCwgb3B0cylcbiAgICB9KVxuICB9XG5cbiAgcHVzaEZpbGVQcm9ncmVzcyhmaWxlRWwsIGVudHJ5UmVmLCBwcm9ncmVzcywgb25SZXBseSA9IGZ1bmN0aW9uICgpeyB9KXtcbiAgICB0aGlzLmxpdmVTb2NrZXQud2l0aGluT3duZXJzKGZpbGVFbC5mb3JtLCAodmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICB2aWV3LnB1c2hXaXRoUmVwbHkobnVsbCwgXCJwcm9ncmVzc1wiLCB7XG4gICAgICAgIGV2ZW50OiBmaWxlRWwuZ2V0QXR0cmlidXRlKHZpZXcuYmluZGluZyhQSFhfUFJPR1JFU1MpKSxcbiAgICAgICAgcmVmOiBmaWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9VUExPQURfUkVGKSxcbiAgICAgICAgZW50cnlfcmVmOiBlbnRyeVJlZixcbiAgICAgICAgcHJvZ3Jlc3M6IHByb2dyZXNzLFxuICAgICAgICBjaWQ6IHZpZXcudGFyZ2V0Q29tcG9uZW50SUQoZmlsZUVsLmZvcm0sIHRhcmdldEN0eClcbiAgICAgIH0sIG9uUmVwbHkpXG4gICAgfSlcbiAgfVxuXG4gIHB1c2hJbnB1dChpbnB1dEVsLCB0YXJnZXRDdHgsIGZvcmNlQ2lkLCBwaHhFdmVudCwgb3B0cywgY2FsbGJhY2spe1xuICAgIGxldCB1cGxvYWRzXG4gICAgbGV0IGNpZCA9IGlzQ2lkKGZvcmNlQ2lkKSA/IGZvcmNlQ2lkIDogdGhpcy50YXJnZXRDb21wb25lbnRJRChpbnB1dEVsLmZvcm0sIHRhcmdldEN0eClcbiAgICBsZXQgcmVmR2VuZXJhdG9yID0gKCkgPT4gdGhpcy5wdXRSZWYoW2lucHV0RWwsIGlucHV0RWwuZm9ybV0sIFwiY2hhbmdlXCIsIG9wdHMpXG4gICAgbGV0IGZvcm1EYXRhXG4gICAgaWYoaW5wdXRFbC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFwiY2hhbmdlXCIpKSl7XG4gICAgICBmb3JtRGF0YSA9IHNlcmlhbGl6ZUZvcm0oaW5wdXRFbC5mb3JtLCB7X3RhcmdldDogb3B0cy5fdGFyZ2V0fSwgW2lucHV0RWwubmFtZV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhID0gc2VyaWFsaXplRm9ybShpbnB1dEVsLmZvcm0sIHtfdGFyZ2V0OiBvcHRzLl90YXJnZXR9KVxuICAgIH1cbiAgICBpZihET00uaXNVcGxvYWRJbnB1dChpbnB1dEVsKSAmJiBpbnB1dEVsLmZpbGVzICYmIGlucHV0RWwuZmlsZXMubGVuZ3RoID4gMCl7XG4gICAgICBMaXZlVXBsb2FkZXIudHJhY2tGaWxlcyhpbnB1dEVsLCBBcnJheS5mcm9tKGlucHV0RWwuZmlsZXMpKVxuICAgIH1cbiAgICB1cGxvYWRzID0gTGl2ZVVwbG9hZGVyLnNlcmlhbGl6ZVVwbG9hZHMoaW5wdXRFbClcbiAgICBsZXQgZXZlbnQgPSB7XG4gICAgICB0eXBlOiBcImZvcm1cIixcbiAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgIHZhbHVlOiBmb3JtRGF0YSxcbiAgICAgIHVwbG9hZHM6IHVwbG9hZHMsXG4gICAgICBjaWQ6IGNpZFxuICAgIH1cbiAgICB0aGlzLnB1c2hXaXRoUmVwbHkocmVmR2VuZXJhdG9yLCBcImV2ZW50XCIsIGV2ZW50LCByZXNwID0+IHtcbiAgICAgIERPTS5zaG93RXJyb3IoaW5wdXRFbCwgdGhpcy5saXZlU29ja2V0LmJpbmRpbmcoUEhYX0ZFRURCQUNLX0ZPUikpXG4gICAgICBpZihET00uaXNVcGxvYWRJbnB1dChpbnB1dEVsKSAmJiBpbnB1dEVsLmdldEF0dHJpYnV0ZShcImRhdGEtcGh4LWF1dG8tdXBsb2FkXCIpICE9PSBudWxsKXtcbiAgICAgICAgaWYoTGl2ZVVwbG9hZGVyLmZpbGVzQXdhaXRpbmdQcmVmbGlnaHQoaW5wdXRFbCkubGVuZ3RoID4gMCl7XG4gICAgICAgICAgbGV0IFtyZWYsIF9lbHNdID0gcmVmR2VuZXJhdG9yKClcbiAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzKGlucHV0RWwuZm9ybSwgdGFyZ2V0Q3R4LCByZWYsIGNpZCwgKF91cGxvYWRzKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyZXNwKVxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyQXdhaXRpbmdTdWJtaXQoaW5wdXRFbC5mb3JtKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlc3ApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHRyaWdnZXJBd2FpdGluZ1N1Ym1pdChmb3JtRWwpe1xuICAgIGxldCBhd2FpdGluZ1N1Ym1pdCA9IHRoaXMuZ2V0U2NoZWR1bGVkU3VibWl0KGZvcm1FbClcbiAgICBpZihhd2FpdGluZ1N1Ym1pdCl7XG4gICAgICBsZXQgW19lbCwgX3JlZiwgX29wdHMsIGNhbGxiYWNrXSA9IGF3YWl0aW5nU3VibWl0XG4gICAgICB0aGlzLmNhbmNlbFN1Ym1pdChmb3JtRWwpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgZ2V0U2NoZWR1bGVkU3VibWl0KGZvcm1FbCl7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN1Ym1pdHMuZmluZCgoW2VsLCBfcmVmLCBfb3B0cywgX2NhbGxiYWNrXSkgPT4gZWwuaXNTYW1lTm9kZShmb3JtRWwpKVxuICB9XG5cbiAgc2NoZWR1bGVTdWJtaXQoZm9ybUVsLCByZWYsIG9wdHMsIGNhbGxiYWNrKXtcbiAgICBpZih0aGlzLmdldFNjaGVkdWxlZFN1Ym1pdChmb3JtRWwpKXsgcmV0dXJuIHRydWUgfVxuICAgIHRoaXMuZm9ybVN1Ym1pdHMucHVzaChbZm9ybUVsLCByZWYsIG9wdHMsIGNhbGxiYWNrXSlcbiAgfVxuXG4gIGNhbmNlbFN1Ym1pdChmb3JtRWwpe1xuICAgIHRoaXMuZm9ybVN1Ym1pdHMgPSB0aGlzLmZvcm1TdWJtaXRzLmZpbHRlcigoW2VsLCByZWYsIF9jYWxsYmFja10pID0+IHtcbiAgICAgIGlmKGVsLmlzU2FtZU5vZGUoZm9ybUVsKSl7XG4gICAgICAgIHRoaXMudW5kb1JlZnMocmVmKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1c2hGb3JtU3VibWl0KGZvcm1FbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgb3B0cywgb25SZXBseSl7XG4gICAgbGV0IGZpbHRlcklnbm9yZWQgPSBlbCA9PiB7XG4gICAgICBsZXQgdXNlcklnbm9yZWQgPSBjbG9zZXN0UGh4QmluZGluZyhlbCwgYCR7dGhpcy5iaW5kaW5nKFBIWF9VUERBVEUpfT1pZ25vcmVgLCBlbC5mb3JtKVxuICAgICAgcmV0dXJuICEodXNlcklnbm9yZWQgfHwgY2xvc2VzdFBoeEJpbmRpbmcoZWwsIFwiZGF0YS1waHgtdXBkYXRlPWlnbm9yZVwiLCBlbC5mb3JtKSlcbiAgICB9XG4gICAgbGV0IGZpbHRlckRpc2FibGVzID0gZWwgPT4ge1xuICAgICAgcmV0dXJuIGVsLmhhc0F0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0RJU0FCTEVfV0lUSCkpXG4gICAgfVxuICAgIGxldCBmaWx0ZXJCdXR0b24gPSBlbCA9PiBlbC50YWdOYW1lID09IFwiQlVUVE9OXCJcblxuICAgIGxldCBmaWx0ZXJJbnB1dCA9IGVsID0+IFtcIklOUFVUXCIsIFwiVEVYVEFSRUFcIiwgXCJTRUxFQ1RcIl0uaW5jbHVkZXMoZWwudGFnTmFtZSlcblxuICAgIGxldCByZWZHZW5lcmF0b3IgPSAoKSA9PiB7XG4gICAgICBsZXQgZm9ybUVsZW1lbnRzID0gQXJyYXkuZnJvbShmb3JtRWwuZWxlbWVudHMpXG4gICAgICBsZXQgZGlzYWJsZXMgPSBmb3JtRWxlbWVudHMuZmlsdGVyKGZpbHRlckRpc2FibGVzKVxuICAgICAgbGV0IGJ1dHRvbnMgPSBmb3JtRWxlbWVudHMuZmlsdGVyKGZpbHRlckJ1dHRvbikuZmlsdGVyKGZpbHRlcklnbm9yZWQpXG4gICAgICBsZXQgaW5wdXRzID0gZm9ybUVsZW1lbnRzLmZpbHRlcihmaWx0ZXJJbnB1dCkuZmlsdGVyKGZpbHRlcklnbm9yZWQpXG5cbiAgICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFRCwgYnV0dG9uLmRpc2FibGVkKVxuICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlXG4gICAgICB9KVxuICAgICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoUEhYX1JFQURPTkxZLCBpbnB1dC5yZWFkT25seSlcbiAgICAgICAgaW5wdXQucmVhZE9ubHkgPSB0cnVlXG4gICAgICAgIGlmKGlucHV0LmZpbGVzKXtcbiAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVELCBpbnB1dC5kaXNhYmxlZClcbiAgICAgICAgICBpbnB1dC5kaXNhYmxlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGZvcm1FbC5zZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9QQUdFX0xPQURJTkcpLCBcIlwiKVxuICAgICAgcmV0dXJuIHRoaXMucHV0UmVmKFtmb3JtRWxdLmNvbmNhdChkaXNhYmxlcykuY29uY2F0KGJ1dHRvbnMpLmNvbmNhdChpbnB1dHMpLCBcInN1Ym1pdFwiLCBvcHRzKVxuICAgIH1cblxuICAgIGxldCBjaWQgPSB0aGlzLnRhcmdldENvbXBvbmVudElEKGZvcm1FbCwgdGFyZ2V0Q3R4KVxuICAgIGlmKExpdmVVcGxvYWRlci5oYXNVcGxvYWRzSW5Qcm9ncmVzcyhmb3JtRWwpKXtcbiAgICAgIGxldCBbcmVmLCBfZWxzXSA9IHJlZkdlbmVyYXRvcigpXG4gICAgICBsZXQgcHVzaCA9ICgpID0+IHRoaXMucHVzaEZvcm1TdWJtaXQoZm9ybUVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBvcHRzLCBvblJlcGx5KVxuICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVTdWJtaXQoZm9ybUVsLCByZWYsIG9wdHMsIHB1c2gpXG4gICAgfSBlbHNlIGlmKExpdmVVcGxvYWRlci5pbnB1dHNBd2FpdGluZ1ByZWZsaWdodChmb3JtRWwpLmxlbmd0aCA+IDApe1xuICAgICAgbGV0IFtyZWYsIGVsc10gPSByZWZHZW5lcmF0b3IoKVxuICAgICAgbGV0IHByb3h5UmVmR2VuID0gKCkgPT4gW3JlZiwgZWxzLCBvcHRzXVxuICAgICAgdGhpcy51cGxvYWRGaWxlcyhmb3JtRWwsIHRhcmdldEN0eCwgcmVmLCBjaWQsIChfdXBsb2FkcykgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBzZXJpYWxpemVGb3JtKGZvcm1FbCwge30pXG4gICAgICAgIHRoaXMucHVzaFdpdGhSZXBseShwcm94eVJlZkdlbiwgXCJldmVudFwiLCB7XG4gICAgICAgICAgdHlwZTogXCJmb3JtXCIsXG4gICAgICAgICAgZXZlbnQ6IHBoeEV2ZW50LFxuICAgICAgICAgIHZhbHVlOiBmb3JtRGF0YSxcbiAgICAgICAgICBjaWQ6IGNpZFxuICAgICAgICB9LCBvblJlcGx5KVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZvcm1EYXRhID0gc2VyaWFsaXplRm9ybShmb3JtRWwsIHt9KVxuICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KHJlZkdlbmVyYXRvciwgXCJldmVudFwiLCB7XG4gICAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgICBldmVudDogcGh4RXZlbnQsXG4gICAgICAgIHZhbHVlOiBmb3JtRGF0YSxcbiAgICAgICAgY2lkOiBjaWRcbiAgICAgIH0sIG9uUmVwbHkpXG4gICAgfVxuICB9XG5cbiAgdXBsb2FkRmlsZXMoZm9ybUVsLCB0YXJnZXRDdHgsIHJlZiwgY2lkLCBvbkNvbXBsZXRlKXtcbiAgICBsZXQgam9pbkNvdW50QXRVcGxvYWQgPSB0aGlzLmpvaW5Db3VudFxuICAgIGxldCBpbnB1dEVscyA9IExpdmVVcGxvYWRlci5hY3RpdmVGaWxlSW5wdXRzKGZvcm1FbClcbiAgICBsZXQgbnVtRmlsZUlucHV0c0luUHJvZ3Jlc3MgPSBpbnB1dEVscy5sZW5ndGhcblxuICAgIC8vIGdldCBlYWNoIGZpbGUgaW5wdXRcbiAgICBpbnB1dEVscy5mb3JFYWNoKGlucHV0RWwgPT4ge1xuICAgICAgbGV0IHVwbG9hZGVyID0gbmV3IExpdmVVcGxvYWRlcihpbnB1dEVsLCB0aGlzLCAoKSA9PiB7XG4gICAgICAgIG51bUZpbGVJbnB1dHNJblByb2dyZXNzLS1cbiAgICAgICAgaWYobnVtRmlsZUlucHV0c0luUHJvZ3Jlc3MgPT09IDApeyBvbkNvbXBsZXRlKCkgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBsb2FkZXJzW2lucHV0RWxdID0gdXBsb2FkZXJcbiAgICAgIGxldCBlbnRyaWVzID0gdXBsb2FkZXIuZW50cmllcygpLm1hcChlbnRyeSA9PiBlbnRyeS50b1ByZWZsaWdodFBheWxvYWQoKSlcblxuICAgICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICAgIHJlZjogaW5wdXRFbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpLFxuICAgICAgICBlbnRyaWVzOiBlbnRyaWVzLFxuICAgICAgICBjaWQ6IHRoaXMudGFyZ2V0Q29tcG9uZW50SUQoaW5wdXRFbC5mb3JtLCB0YXJnZXRDdHgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nKFwidXBsb2FkXCIsICgpID0+IFtcInNlbmRpbmcgcHJlZmxpZ2h0IHJlcXVlc3RcIiwgcGF5bG9hZF0pXG5cbiAgICAgIHRoaXMucHVzaFdpdGhSZXBseShudWxsLCBcImFsbG93X3VwbG9hZFwiLCBwYXlsb2FkLCByZXNwID0+IHtcbiAgICAgICAgdGhpcy5sb2coXCJ1cGxvYWRcIiwgKCkgPT4gW1wiZ290IHByZWZsaWdodCByZXNwb25zZVwiLCByZXNwXSlcbiAgICAgICAgaWYocmVzcC5lcnJvcil7XG4gICAgICAgICAgdGhpcy51bmRvUmVmcyhyZWYpXG4gICAgICAgICAgbGV0IFtlbnRyeV9yZWYsIHJlYXNvbl0gPSByZXNwLmVycm9yXG4gICAgICAgICAgdGhpcy5sb2coXCJ1cGxvYWRcIiwgKCkgPT4gW2BlcnJvciBmb3IgZW50cnkgJHtlbnRyeV9yZWZ9YCwgcmVhc29uXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgb25FcnJvciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsLm9uRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICBpZih0aGlzLmpvaW5Db3VudCA9PT0gam9pbkNvdW50QXRVcGxvYWQpeyBjYWxsYmFjaygpIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHVwbG9hZGVyLmluaXRBZGFwdGVyVXBsb2FkKHJlc3AsIG9uRXJyb3IsIHRoaXMubGl2ZVNvY2tldClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgZGlzcGF0Y2hVcGxvYWRzKG5hbWUsIGZpbGVzT3JCbG9icyl7XG4gICAgbGV0IGlucHV0cyA9IERPTS5maW5kVXBsb2FkSW5wdXRzKHRoaXMuZWwpLmZpbHRlcihlbCA9PiBlbC5uYW1lID09PSBuYW1lKVxuICAgIGlmKGlucHV0cy5sZW5ndGggPT09IDApeyBsb2dFcnJvcihgbm8gbGl2ZSBmaWxlIGlucHV0cyBmb3VuZCBtYXRjaGluZyB0aGUgbmFtZSBcIiR7bmFtZX1cImApIH1cbiAgICBlbHNlIGlmKGlucHV0cy5sZW5ndGggPiAxKXsgbG9nRXJyb3IoYGR1cGxpY2F0ZSBsaXZlIGZpbGUgaW5wdXRzIGZvdW5kIG1hdGNoaW5nIHRoZSBuYW1lIFwiJHtuYW1lfVwiYCkgfVxuICAgIGVsc2UgeyBET00uZGlzcGF0Y2hFdmVudChpbnB1dHNbMF0sIFBIWF9UUkFDS19VUExPQURTLCB7ZGV0YWlsOiB7ZmlsZXM6IGZpbGVzT3JCbG9ic319KSB9XG4gIH1cblxuICBwdXNoRm9ybVJlY292ZXJ5KGZvcm0sIG5ld0NpZCwgY2FsbGJhY2spe1xuICAgIHRoaXMubGl2ZVNvY2tldC53aXRoaW5Pd25lcnMoZm9ybSwgKHZpZXcsIHRhcmdldEN0eCkgPT4ge1xuICAgICAgbGV0IGlucHV0ID0gZm9ybS5lbGVtZW50c1swXVxuICAgICAgbGV0IHBoeEV2ZW50ID0gZm9ybS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9BVVRPX1JFQ09WRVIpKSB8fCBmb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIikpXG5cbiAgICAgIEpTLmV4ZWMoXCJjaGFuZ2VcIiwgcGh4RXZlbnQsIHZpZXcsIGlucHV0LCBbXCJwdXNoXCIsIHtfdGFyZ2V0OiBpbnB1dC5uYW1lLCBuZXdDaWQ6IG5ld0NpZCwgY2FsbGJhY2s6IGNhbGxiYWNrfV0pXG4gICAgfSlcbiAgfVxuXG4gIHB1c2hMaW5rUGF0Y2goaHJlZiwgdGFyZ2V0RWwsIGNhbGxiYWNrKXtcbiAgICBsZXQgbGlua1JlZiA9IHRoaXMubGl2ZVNvY2tldC5zZXRQZW5kaW5nTGluayhocmVmKVxuICAgIGxldCByZWZHZW4gPSB0YXJnZXRFbCA/ICgpID0+IHRoaXMucHV0UmVmKFt0YXJnZXRFbF0sIFwiY2xpY2tcIikgOiBudWxsXG4gICAgbGV0IGZhbGxiYWNrID0gKCkgPT4gdGhpcy5saXZlU29ja2V0LnJlZGlyZWN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuXG4gICAgbGV0IHB1c2ggPSB0aGlzLnB1c2hXaXRoUmVwbHkocmVmR2VuLCBcImxpdmVfcGF0Y2hcIiwge3VybDogaHJlZn0sIHJlc3AgPT4ge1xuICAgICAgdGhpcy5saXZlU29ja2V0LnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICBpZihyZXNwLmxpbmtfcmVkaXJlY3Qpe1xuICAgICAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXBsYWNlTWFpbihocmVmLCBudWxsLCBjYWxsYmFjaywgbGlua1JlZilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZih0aGlzLmxpdmVTb2NrZXQuY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZikpe1xuICAgICAgICAgICAgdGhpcy5ocmVmID0gaHJlZlxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFwcGx5UGVuZGluZ1VwZGF0ZXMoKVxuICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGxpbmtSZWYpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmKHB1c2gpe1xuICAgICAgcHVzaC5yZWNlaXZlKFwidGltZW91dFwiLCBmYWxsYmFjaylcbiAgICB9IGVsc2Uge1xuICAgICAgZmFsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIGZvcm1zRm9yUmVjb3ZlcnkoaHRtbCl7XG4gICAgaWYodGhpcy5qb2luQ291bnQgPT09IDApeyByZXR1cm4gW10gfVxuXG4gICAgbGV0IHBoeENoYW5nZSA9IHRoaXMuYmluZGluZyhcImNoYW5nZVwiKVxuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWxcblxuICAgIHJldHVybiAoXG4gICAgICBET00uYWxsKHRoaXMuZWwsIGBmb3JtWyR7cGh4Q2hhbmdlfV1gKVxuICAgICAgICAuZmlsdGVyKGZvcm0gPT4gZm9ybS5pZCAmJiB0aGlzLm93bnNFbGVtZW50KGZvcm0pKVxuICAgICAgICAuZmlsdGVyKGZvcm0gPT4gZm9ybS5lbGVtZW50cy5sZW5ndGggPiAwKVxuICAgICAgICAuZmlsdGVyKGZvcm0gPT4gZm9ybS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9BVVRPX1JFQ09WRVIpKSAhPT0gXCJpZ25vcmVcIilcbiAgICAgICAgLm1hcChmb3JtID0+IHtcbiAgICAgICAgICBsZXQgbmV3Rm9ybSA9IHRlbXBsYXRlLmNvbnRlbnQucXVlcnlTZWxlY3RvcihgZm9ybVtpZD1cIiR7Zm9ybS5pZH1cIl1bJHtwaHhDaGFuZ2V9PVwiJHtmb3JtLmdldEF0dHJpYnV0ZShwaHhDaGFuZ2UpfVwiXWApXG4gICAgICAgICAgaWYobmV3Rm9ybSl7XG4gICAgICAgICAgICByZXR1cm4gW2Zvcm0sIG5ld0Zvcm0sIHRoaXMudGFyZ2V0Q29tcG9uZW50SUQobmV3Rm9ybSldXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybSwgbnVsbCwgbnVsbF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKFtmb3JtLCBuZXdGb3JtLCBuZXdDaWRdKSA9PiBuZXdGb3JtKVxuICAgIClcbiAgfVxuXG4gIG1heWJlUHVzaENvbXBvbmVudHNEZXN0cm95ZWQoZGVzdHJveWVkQ0lEcyl7XG4gICAgbGV0IHdpbGxEZXN0cm95Q0lEcyA9IGRlc3Ryb3llZENJRHMuZmlsdGVyKGNpZCA9PiB7XG4gICAgICByZXR1cm4gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBjaWQpLmxlbmd0aCA9PT0gMFxuICAgIH0pXG4gICAgaWYod2lsbERlc3Ryb3lDSURzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5wcnVuaW5nQ0lEcy5wdXNoKC4uLndpbGxEZXN0cm95Q0lEcylcblxuICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KG51bGwsIFwiY2lkc193aWxsX2Rlc3Ryb3lcIiwge2NpZHM6IHdpbGxEZXN0cm95Q0lEc30sICgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNpZHMgYXJlIGVpdGhlciBiYWNrIG9uIHRoZSBwYWdlIG9yIHRoZXkgd2lsbCBiZSBmdWxseSByZW1vdmVkLFxuICAgICAgICAvLyBzbyB3ZSBjYW4gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgcHJ1bmluZ0NJRHMuXG4gICAgICAgIHRoaXMucHJ1bmluZ0NJRHMgPSB0aGlzLnBydW5pbmdDSURzLmZpbHRlcihjaWQgPT4gd2lsbERlc3Ryb3lDSURzLmluZGV4T2YoY2lkKSAhPT0gLTEpXG5cbiAgICAgICAgLy8gU2VlIGlmIGFueSBvZiB0aGUgY2lkcyB3ZSB3YW50ZWQgdG8gZGVzdHJveSB3ZXJlIGFkZGVkIGJhY2ssXG4gICAgICAgIC8vIGlmIHRoZXkgd2VyZSBhZGRlZCBiYWNrLCB3ZSBkb24ndCBhY3R1YWxseSBkZXN0cm95IHRoZW0uXG4gICAgICAgIGxldCBjb21wbGV0ZWx5RGVzdHJveUNJRHMgPSB3aWxsRGVzdHJveUNJRHMuZmlsdGVyKGNpZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIERPTS5maW5kQ29tcG9uZW50Tm9kZUxpc3QodGhpcy5lbCwgY2lkKS5sZW5ndGggPT09IDBcbiAgICAgICAgfSlcblxuICAgICAgICBpZihjb21wbGV0ZWx5RGVzdHJveUNJRHMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KG51bGwsIFwiY2lkc19kZXN0cm95ZWRcIiwge2NpZHM6IGNvbXBsZXRlbHlEZXN0cm95Q0lEc30sIChyZXNwKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkLnBydW5lQ0lEcyhyZXNwLmNpZHMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBvd25zRWxlbWVudChlbCl7XG4gICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShQSFhfUEFSRU5UX0lEKSA9PT0gdGhpcy5pZCB8fFxuICAgICAgbWF5YmUoZWwuY2xvc2VzdChQSFhfVklFV19TRUxFQ1RPUiksIG5vZGUgPT4gbm9kZS5pZCkgPT09IHRoaXMuaWRcbiAgfVxuXG4gIHN1Ym1pdEZvcm0oZm9ybSwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgb3B0cyA9IHt9KXtcbiAgICBET00ucHV0UHJpdmF0ZShmb3JtLCBQSFhfSEFTX1NVQk1JVFRFRCwgdHJ1ZSlcbiAgICBsZXQgcGh4RmVlZGJhY2sgPSB0aGlzLmxpdmVTb2NrZXQuYmluZGluZyhQSFhfRkVFREJBQ0tfRk9SKVxuICAgIGxldCBpbnB1dHMgPSBBcnJheS5mcm9tKGZvcm0uZWxlbWVudHMpXG4gICAgdGhpcy5saXZlU29ja2V0LmJsdXJBY3RpdmVFbGVtZW50KHRoaXMpXG4gICAgdGhpcy5wdXNoRm9ybVN1Ym1pdChmb3JtLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBvcHRzLCAoKSA9PiB7XG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiBET00uc2hvd0Vycm9yKGlucHV0LCBwaHhGZWVkYmFjaykpXG4gICAgICB0aGlzLmxpdmVTb2NrZXQucmVzdG9yZVByZXZpb3VzbHlBY3RpdmVGb2N1cygpXG4gICAgfSlcbiAgfVxuXG4gIGJpbmRpbmcoa2luZCl7IHJldHVybiB0aGlzLmxpdmVTb2NrZXQuYmluZGluZyhraW5kKSB9XG59XG4iLCAiLyoqIEluaXRpYWxpemVzIHRoZSBMaXZlU29ja2V0XG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmRQb2ludCAtIFRoZSBzdHJpbmcgV2ViU29ja2V0IGVuZHBvaW50LCBpZSwgYFwid3NzOi8vZXhhbXBsZS5jb20vbGl2ZVwiYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXCIvbGl2ZVwiYCAoaW5oZXJpdGVkIGhvc3QgJiBwcm90b2NvbClcbiAqIEBwYXJhbSB7UGhvZW5peC5Tb2NrZXR9IHNvY2tldCAtIHRoZSByZXF1aXJlZCBQaG9lbml4IFNvY2tldCBjbGFzcyBpbXBvcnRlZCBmcm9tIFwicGhvZW5peFwiLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgaW1wb3J0IHtTb2NrZXR9IGZyb20gXCJwaG9lbml4XCJcbiAqICAgICBpbXBvcnQge0xpdmVTb2NrZXR9IGZyb20gXCJwaG9lbml4X2xpdmVfdmlld1wiXG4gKiAgICAgbGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwgey4uLn0pXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24uIE91dHNpZGUgb2Yga2V5cyBsaXN0ZWQgYmVsb3csIGFsbFxuICogY29uZmlndXJhdGlvbiBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIFBob2VuaXggU29ja2V0IGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmRlZmF1bHRzXSAtIFRoZSBvcHRpb25hbCBkZWZhdWx0cyB0byB1c2UgZm9yIHZhcmlvdXMgYmluZGluZ3MsXG4gKiBzdWNoIGFzIGBwaHgtZGVib3VuY2VgLiBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKlxuICogICAtIGRlYm91bmNlIC0gdGhlIG1pbGxpc2Vjb25kIHBoeC1kZWJvdW5jZSB0aW1lLiBEZWZhdWx0cyAzMDBcbiAqICAgLSB0aHJvdHRsZSAtIHRoZSBtaWxsaXNlY29uZCBwaHgtdGhyb3R0bGUgdGltZS4gRGVmYXVsdHMgMzAwXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMucGFyYW1zXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiBmb3IgcGFzc2luZyBjb25uZWN0IHBhcmFtcy5cbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBMaXZlVmlldy4gRm9yIGV4YW1wbGU6XG4gKlxuICogICAgIChlbCkgPT4ge3ZpZXc6IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtbXktdmlldy1uYW1lXCIsIHRva2VuOiB3aW5kb3cubXlUb2tlbn1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYmluZGluZ1ByZWZpeF0gLSBUaGUgb3B0aW9uYWwgcHJlZml4IHRvIHVzZSBmb3IgYWxsIHBoeCBET00gYW5ub3RhdGlvbnMuXG4gKiBEZWZhdWx0cyB0byBcInBoeC1cIi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5ob29rc10gLSBUaGUgb3B0aW9uYWwgb2JqZWN0IGZvciByZWZlcmVuY2luZyBMaXZlVmlldyBob29rIGNhbGxiYWNrcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy51cGxvYWRlcnNdIC0gVGhlIG9wdGlvbmFsIG9iamVjdCBmb3IgcmVmZXJlbmNpbmcgTGl2ZVZpZXcgdXBsb2FkZXIgY2FsbGJhY2tzLlxuICogQHBhcmFtIHtpbnRlZ2VyfSBbb3B0cy5sb2FkZXJUaW1lb3V0XSAtIFRoZSBvcHRpb25hbCBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgYXBwbHlcbiAqIGxvYWRpbmcgc3RhdGVzLlxuICogQHBhcmFtIHtpbnRlZ2VyfSBbb3B0cy5tYXhSZWxvYWRzXSAtIFRoZSBtYXhpbXVtIHJlbG9hZHMgYmVmb3JlIGVudGVyaW5nIGZhaWxzYWZlIG1vZGUuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLnJlbG9hZEppdHRlck1pbl0gLSBUaGUgbWluaW11bSB0aW1lIGJldHdlZW4gbm9ybWFsIHJlbG9hZCBhdHRlbXB0cy5cbiAqIEBwYXJhbSB7aW50ZWdlcn0gW29wdHMucmVsb2FkSml0dGVyTWF4XSAtIFRoZSBtYXhpbXVtIHRpbWUgYmV0d2VlbiBub3JtYWwgcmVsb2FkIGF0dGVtcHRzLlxuICogQHBhcmFtIHtpbnRlZ2VyfSBbb3B0cy5mYWlsc2FmZUppdHRlcl0gLSBUaGUgdGltZSBiZXR3ZWVuIHJlbG9hZCBhdHRlbXB0cyBpbiBmYWlsc2FmZSBtb2RlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmlld0xvZ2dlcl0gLSBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gdG8gbG9nIGRlYnVnIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgKHZpZXcsIGtpbmQsIG1zZywgb2JqKSA9PiBjb25zb2xlLmxvZyhgJHt2aWV3LmlkfSAke2tpbmR9OiAke21zZ30gLSBgLCBvYmopXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLm1ldGFkYXRhXSAtIFRoZSBvcHRpb25hbCBvYmplY3QgbWFwcGluZyBldmVudCBuYW1lcyB0byBmdW5jdGlvbnMgZm9yXG4gKiBwb3B1bGF0aW5nIGV2ZW50IG1ldGFkYXRhLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgbWV0YWRhdGE6IHtcbiAqICAgICAgIGNsaWNrOiAoZSwgZWwpID0+IHtcbiAqICAgICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgICBjdHJsS2V5OiBlLmN0cmxLZXksXG4gKiAgICAgICAgICAgbWV0YUtleTogZS5tZXRhS2V5LFxuICogICAgICAgICAgIGRldGFpbDogZS5kZXRhaWwgfHwgMSxcbiAqICAgICAgICAgfVxuICogICAgICAgfSxcbiAqICAgICAgIGtleWRvd246IChlLCBlbCkgPT4ge1xuICogICAgICAgICByZXR1cm4ge1xuICogICAgICAgICAgIGtleTogZS5rZXksXG4gKiAgICAgICAgICAgY3RybEtleTogZS5jdHJsS2V5LFxuICogICAgICAgICAgIG1ldGFLZXk6IGUubWV0YUtleSxcbiAqICAgICAgICAgICBzaGlmdEtleTogZS5zaGlmdEtleVxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnNlc3Npb25TdG9yYWdlXSAtIEFuIG9wdGlvbmFsIFN0b3JhZ2UgY29tcGF0aWJsZSBvYmplY3RcbiAqIFVzZWZ1bCB3aGVuIExpdmVWaWV3IHdvbid0IGhhdmUgYWNjZXNzIHRvIGBzZXNzaW9uU3RvcmFnZWAuICBGb3IgZXhhbXBsZSwgVGhpcyBjb3VsZFxuICogaGFwcGVuIGlmIGEgc2l0ZSBsb2FkcyBhIGNyb3NzLWRvbWFpbiBMaXZlVmlldyBpbiBhbiBpZnJhbWUuICBFeGFtcGxlIHVzYWdlOlxuICpcbiAqICAgICBjbGFzcyBJbk1lbW9yeVN0b3JhZ2Uge1xuICogICAgICAgY29uc3RydWN0b3IoKSB7IHRoaXMuc3RvcmFnZSA9IHt9IH1cbiAqICAgICAgIGdldEl0ZW0oa2V5TmFtZSkgeyByZXR1cm4gdGhpcy5zdG9yYWdlW2tleU5hbWVdIH1cbiAqICAgICAgIHJlbW92ZUl0ZW0oa2V5TmFtZSkgeyBkZWxldGUgdGhpcy5zdG9yYWdlW2tleU5hbWVdIH1cbiAqICAgICAgIHNldEl0ZW0oa2V5TmFtZSwga2V5VmFsdWUpIHsgdGhpcy5zdG9yYWdlW2tleU5hbWVdID0ga2V5VmFsdWUgfVxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMubG9jYWxTdG9yYWdlXSAtIEFuIG9wdGlvbmFsIFN0b3JhZ2UgY29tcGF0aWJsZSBvYmplY3RcbiAqIFVzZWZ1bCBmb3Igd2hlbiBMaXZlVmlldyB3b24ndCBoYXZlIGFjY2VzcyB0byBgbG9jYWxTdG9yYWdlYC5cbiAqIFNlZSBgb3B0cy5zZXNzaW9uU3RvcmFnZWAgZm9yIGV4YW1wbGVzLlxuKi9cblxuaW1wb3J0IHtcbiAgQklORElOR19QUkVGSVgsXG4gIENPTlNFQ1VUSVZFX1JFTE9BRFMsXG4gIERFRkFVTFRTLFxuICBGQUlMU0FGRV9KSVRURVIsXG4gIExPQURFUl9USU1FT1VULFxuICBNQVhfUkVMT0FEUyxcbiAgUEhYX0RFQk9VTkNFLFxuICBQSFhfRFJPUF9UQVJHRVQsXG4gIFBIWF9IQVNfRk9DVVNFRCxcbiAgUEhYX0tFWSxcbiAgUEhYX0xJTktfU1RBVEUsXG4gIFBIWF9MSVZFX0xJTkssXG4gIFBIWF9MVl9ERUJVRyxcbiAgUEhYX0xWX0xBVEVOQ1lfU0lNLFxuICBQSFhfTFZfUFJPRklMRSxcbiAgUEhYX01BSU4sXG4gIFBIWF9QQVJFTlRfSUQsXG4gIFBIWF9WSUVXX1NFTEVDVE9SLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1RIUk9UVExFLFxuICBQSFhfVFJBQ0tfVVBMT0FEUyxcbiAgUEhYX1NFU1NJT04sXG4gIFJFTE9BRF9KSVRURVJfTUlOLFxuICBSRUxPQURfSklUVEVSX01BWCxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgY2xvbmUsXG4gIGNsb3Nlc3RQaHhCaW5kaW5nLFxuICBjbG9zdXJlLFxuICBkZWJ1ZyxcbiAgaXNPYmplY3QsXG4gIG1heWJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgSG9va3MgZnJvbSBcIi4vaG9va3NcIlxuaW1wb3J0IExpdmVVcGxvYWRlciBmcm9tIFwiLi9saXZlX3VwbG9hZGVyXCJcbmltcG9ydCBWaWV3IGZyb20gXCIuL3ZpZXdcIlxuaW1wb3J0IEpTIGZyb20gXCIuL2pzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZVNvY2tldCB7XG4gIGNvbnN0cnVjdG9yKHVybCwgcGh4U29ja2V0LCBvcHRzID0ge30pe1xuICAgIHRoaXMudW5sb2FkZWQgPSBmYWxzZVxuICAgIGlmKCFwaHhTb2NrZXQgfHwgcGh4U29ja2V0LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiT2JqZWN0XCIpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIGEgcGhvZW5peCBTb2NrZXQgbXVzdCBiZSBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMaXZlU29ja2V0IGNvbnN0cnVjdG9yLiBGb3IgZXhhbXBsZTpcblxuICAgICAgICAgIGltcG9ydCB7U29ja2V0fSBmcm9tIFwicGhvZW5peFwiXG4gICAgICAgICAgaW1wb3J0IHtMaXZlU29ja2V0fSBmcm9tIFwicGhvZW5peF9saXZlX3ZpZXdcIlxuICAgICAgICAgIGxldCBsaXZlU29ja2V0ID0gbmV3IExpdmVTb2NrZXQoXCIvbGl2ZVwiLCBTb2NrZXQsIHsuLi59KVxuICAgICAgYClcbiAgICB9XG4gICAgdGhpcy5zb2NrZXQgPSBuZXcgcGh4U29ja2V0KHVybCwgb3B0cylcbiAgICB0aGlzLmJpbmRpbmdQcmVmaXggPSBvcHRzLmJpbmRpbmdQcmVmaXggfHwgQklORElOR19QUkVGSVhcbiAgICB0aGlzLm9wdHMgPSBvcHRzXG4gICAgdGhpcy5wYXJhbXMgPSBjbG9zdXJlKG9wdHMucGFyYW1zIHx8IHt9KVxuICAgIHRoaXMudmlld0xvZ2dlciA9IG9wdHMudmlld0xvZ2dlclxuICAgIHRoaXMubWV0YWRhdGFDYWxsYmFja3MgPSBvcHRzLm1ldGFkYXRhIHx8IHt9XG4gICAgdGhpcy5kZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oY2xvbmUoREVGQVVMVFMpLCBvcHRzLmRlZmF1bHRzIHx8IHt9KVxuICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGxcbiAgICB0aGlzLnByZXZBY3RpdmUgPSBudWxsXG4gICAgdGhpcy5zaWxlbmNlZCA9IGZhbHNlXG4gICAgdGhpcy5tYWluID0gbnVsbFxuICAgIHRoaXMub3V0Z29pbmdNYWluRWwgPSBudWxsXG4gICAgdGhpcy5jbGlja1N0YXJ0ZWRBdFRhcmdldCA9IG51bGxcbiAgICB0aGlzLmxpbmtSZWYgPSAxXG4gICAgdGhpcy5yb290cyA9IHt9XG4gICAgdGhpcy5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICB0aGlzLnBlbmRpbmdMaW5rID0gbnVsbFxuICAgIHRoaXMuY3VycmVudExvY2F0aW9uID0gY2xvbmUod2luZG93LmxvY2F0aW9uKVxuICAgIHRoaXMuaG9va3MgPSBvcHRzLmhvb2tzIHx8IHt9XG4gICAgdGhpcy51cGxvYWRlcnMgPSBvcHRzLnVwbG9hZGVycyB8fCB7fVxuICAgIHRoaXMubG9hZGVyVGltZW91dCA9IG9wdHMubG9hZGVyVGltZW91dCB8fCBMT0FERVJfVElNRU9VVFxuICAgIHRoaXMucmVsb2FkV2l0aEppdHRlclRpbWVyID0gbnVsbFxuICAgIHRoaXMubWF4UmVsb2FkcyA9IG9wdHMubWF4UmVsb2FkcyB8fCBNQVhfUkVMT0FEU1xuICAgIHRoaXMucmVsb2FkSml0dGVyTWluID0gb3B0cy5yZWxvYWRKaXR0ZXJNaW4gfHwgUkVMT0FEX0pJVFRFUl9NSU5cbiAgICB0aGlzLnJlbG9hZEppdHRlck1heCA9IG9wdHMucmVsb2FkSml0dGVyTWF4IHx8IFJFTE9BRF9KSVRURVJfTUFYXG4gICAgdGhpcy5mYWlsc2FmZUppdHRlciA9IG9wdHMuZmFpbHNhZmVKaXR0ZXIgfHwgRkFJTFNBRkVfSklUVEVSXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBvcHRzLmxvY2FsU3RvcmFnZSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZSA9IG9wdHMuc2Vzc2lvblN0b3JhZ2UgfHwgd2luZG93LnNlc3Npb25TdG9yYWdlXG4gICAgdGhpcy5ib3VuZFRvcExldmVsRXZlbnRzID0gZmFsc2VcbiAgICB0aGlzLmRvbUNhbGxiYWNrcyA9IE9iamVjdC5hc3NpZ24oe29uTm9kZUFkZGVkOiBjbG9zdXJlKCksIG9uQmVmb3JlRWxVcGRhdGVkOiBjbG9zdXJlKCl9LCBvcHRzLmRvbSB8fCB7fSlcbiAgICB0aGlzLnRyYW5zaXRpb25zID0gbmV3IFRyYW5zaXRpb25TZXQoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgX2UgPT4ge1xuICAgICAgdGhpcy51bmxvYWRlZCA9IHRydWVcbiAgICB9KVxuICAgIHRoaXMuc29ja2V0Lm9uT3BlbigoKSA9PiB7XG4gICAgICBpZih0aGlzLmlzVW5sb2FkZWQoKSl7XG4gICAgICAgIC8vIHJlbG9hZCBwYWdlIGlmIGJlaW5nIHJlc3RvcmVkIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGFuZCBicm93c2VyIGRvZXMgbm90IGVtaXQgXCJwYWdlc2hvd1wiXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBwdWJsaWNcblxuICBpc1Byb2ZpbGVFbmFibGVkKCl7IHJldHVybiB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oUEhYX0xWX1BST0ZJTEUpID09PSBcInRydWVcIiB9XG5cbiAgaXNEZWJ1Z0VuYWJsZWQoKXsgcmV0dXJuIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfREVCVUcpID09PSBcInRydWVcIiB9XG5cbiAgaXNEZWJ1Z0Rpc2FibGVkKCl7IHJldHVybiB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oUEhYX0xWX0RFQlVHKSA9PT0gXCJmYWxzZVwiIH1cblxuICBlbmFibGVEZWJ1ZygpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oUEhYX0xWX0RFQlVHLCBcInRydWVcIikgfVxuXG4gIGVuYWJsZVByb2ZpbGluZygpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oUEhYX0xWX1BST0ZJTEUsIFwidHJ1ZVwiKSB9XG5cbiAgZGlzYWJsZURlYnVnKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQSFhfTFZfREVCVUcsIFwiZmFsc2VcIikgfVxuXG4gIGRpc2FibGVQcm9maWxpbmcoKXsgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFBIWF9MVl9QUk9GSUxFKSB9XG5cbiAgZW5hYmxlTGF0ZW5jeVNpbSh1cHBlckJvdW5kTXMpe1xuICAgIHRoaXMuZW5hYmxlRGVidWcoKVxuICAgIGNvbnNvbGUubG9nKFwibGF0ZW5jeSBzaW11bGF0b3IgZW5hYmxlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgYnJvd3NlciBzZXNzaW9uLiBDYWxsIGRpc2FibGVMYXRlbmN5U2ltKCkgdG8gZGlzYWJsZVwiKVxuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQSFhfTFZfTEFURU5DWV9TSU0sIHVwcGVyQm91bmRNcylcbiAgfVxuXG4gIGRpc2FibGVMYXRlbmN5U2ltKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShQSFhfTFZfTEFURU5DWV9TSU0pIH1cblxuICBnZXRMYXRlbmN5U2ltKCl7XG4gICAgbGV0IHN0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfTEFURU5DWV9TSU0pXG4gICAgcmV0dXJuIHN0ciA/IHBhcnNlSW50KHN0cikgOiBudWxsXG4gIH1cblxuICBnZXRTb2NrZXQoKXsgcmV0dXJuIHRoaXMuc29ja2V0IH1cblxuICBjb25uZWN0KCl7XG4gICAgLy8gZW5hYmxlIGRlYnVnIGJ5IGRlZmF1bHQgaWYgb24gbG9jYWxob3N0IGFuZCBub3QgZXhwbGljaXRseSBkaXNhYmxlZFxuICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gXCJsb2NhbGhvc3RcIiAmJiAhdGhpcy5pc0RlYnVnRGlzYWJsZWQoKSl7IHRoaXMuZW5hYmxlRGVidWcoKSB9XG4gICAgbGV0IGRvQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgIGlmKHRoaXMuam9pblJvb3RWaWV3cygpKXtcbiAgICAgICAgdGhpcy5iaW5kVG9wTGV2ZWxFdmVudHMoKVxuICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0KClcbiAgICAgIH0gZWxzZSBpZih0aGlzLm1haW4pe1xuICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoW1wiY29tcGxldGVcIiwgXCJsb2FkZWRcIiwgXCJpbnRlcmFjdGl2ZVwiXS5pbmRleE9mKGRvY3VtZW50LnJlYWR5U3RhdGUpID49IDApe1xuICAgICAgZG9Db25uZWN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4gZG9Db25uZWN0KCkpXG4gICAgfVxuICB9XG5cbiAgZGlzY29ubmVjdChjYWxsYmFjayl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkV2l0aEppdHRlclRpbWVyKVxuICAgIHRoaXMuc29ja2V0LmRpc2Nvbm5lY3QoY2FsbGJhY2spXG4gIH1cblxuICByZXBsYWNlVHJhbnNwb3J0KHRyYW5zcG9ydCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkV2l0aEppdHRlclRpbWVyKVxuICAgIHRoaXMuc29ja2V0LnJlcGxhY2VUcmFuc3BvcnQodHJhbnNwb3J0KVxuICAgIHRoaXMuY29ubmVjdCgpXG4gIH1cblxuICBleGVjSlMoZWwsIGVuY29kZWRKUywgZXZlbnRUeXBlID0gbnVsbCl7XG4gICAgdGhpcy5vd25lcihlbCwgdmlldyA9PiBKUy5leGVjKGV2ZW50VHlwZSwgZW5jb2RlZEpTLCB2aWV3LCBlbCkpXG4gIH1cblxuICAvLyBwcml2YXRlXG5cbiAgdHJpZ2dlckRPTShraW5kLCBhcmdzKXsgdGhpcy5kb21DYWxsYmFja3Nba2luZF0oLi4uYXJncykgfVxuXG4gIHRpbWUobmFtZSwgZnVuYyl7XG4gICAgaWYoIXRoaXMuaXNQcm9maWxlRW5hYmxlZCgpIHx8ICFjb25zb2xlLnRpbWUpeyByZXR1cm4gZnVuYygpIH1cbiAgICBjb25zb2xlLnRpbWUobmFtZSlcbiAgICBsZXQgcmVzdWx0ID0gZnVuYygpXG4gICAgY29uc29sZS50aW1lRW5kKG5hbWUpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgbG9nKHZpZXcsIGtpbmQsIG1zZ0NhbGxiYWNrKXtcbiAgICBpZih0aGlzLnZpZXdMb2dnZXIpe1xuICAgICAgbGV0IFttc2csIG9ial0gPSBtc2dDYWxsYmFjaygpXG4gICAgICB0aGlzLnZpZXdMb2dnZXIodmlldywga2luZCwgbXNnLCBvYmopXG4gICAgfSBlbHNlIGlmKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSl7XG4gICAgICBsZXQgW21zZywgb2JqXSA9IG1zZ0NhbGxiYWNrKClcbiAgICAgIGRlYnVnKHZpZXcsIGtpbmQsIG1zZywgb2JqKVxuICAgIH1cbiAgfVxuXG4gIHJlcXVlc3RET01VcGRhdGUoY2FsbGJhY2spe1xuICAgIHRoaXMudHJhbnNpdGlvbnMuYWZ0ZXIoY2FsbGJhY2spXG4gIH1cblxuICB0cmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSA9IGZ1bmN0aW9uKCl7fSl7XG4gICAgdGhpcy50cmFuc2l0aW9ucy5hZGRUcmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSlcbiAgfVxuXG4gIG9uQ2hhbm5lbChjaGFubmVsLCBldmVudCwgY2Ipe1xuICAgIGNoYW5uZWwub24oZXZlbnQsIGRhdGEgPT4ge1xuICAgICAgbGV0IGxhdGVuY3kgPSB0aGlzLmdldExhdGVuY3lTaW0oKVxuICAgICAgaWYoIWxhdGVuY3kpe1xuICAgICAgICBjYihkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYHNpbXVsYXRpbmcgJHtsYXRlbmN5fW1zIG9mIGxhdGVuY3kgZnJvbSBzZXJ2ZXIgdG8gY2xpZW50YClcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBjYihkYXRhKSwgbGF0ZW5jeSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgd3JhcFB1c2godmlldywgb3B0cywgcHVzaCl7XG4gICAgbGV0IGxhdGVuY3kgPSB0aGlzLmdldExhdGVuY3lTaW0oKVxuICAgIGxldCBvbGRKb2luQ291bnQgPSB2aWV3LmpvaW5Db3VudFxuICAgIGlmKCFsYXRlbmN5KXtcbiAgICAgIGlmKHRoaXMuaXNDb25uZWN0ZWQoKSAmJiBvcHRzLnRpbWVvdXQpe1xuICAgICAgICByZXR1cm4gcHVzaCgpLnJlY2VpdmUoXCJ0aW1lb3V0XCIsICgpID0+IHtcbiAgICAgICAgICBpZih2aWV3LmpvaW5Db3VudCA9PT0gb2xkSm9pbkNvdW50ICYmICF2aWV3LmlzRGVzdHJveWVkKCkpe1xuICAgICAgICAgICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyKHZpZXcsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2codmlldywgXCJ0aW1lb3V0XCIsICgpID0+IFtcInJlY2VpdmVkIHRpbWVvdXQgd2hpbGUgY29tbXVuaWNhdGluZyB3aXRoIHNlcnZlci4gRmFsbGluZyBiYWNrIHRvIGhhcmQgcmVmcmVzaCBmb3IgcmVjb3ZlcnlcIl0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwdXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgc2ltdWxhdGluZyAke2xhdGVuY3l9bXMgb2YgbGF0ZW5jeSBmcm9tIGNsaWVudCB0byBzZXJ2ZXJgKVxuICAgIGxldCBmYWtlUHVzaCA9IHtcbiAgICAgIHJlY2VpdmVzOiBbXSxcbiAgICAgIHJlY2VpdmUoa2luZCwgY2IpeyB0aGlzLnJlY2VpdmVzLnB1c2goW2tpbmQsIGNiXSkgfVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmKHZpZXcuaXNEZXN0cm95ZWQoKSl7IHJldHVybiB9XG4gICAgICBmYWtlUHVzaC5yZWNlaXZlcy5yZWR1Y2UoKGFjYywgW2tpbmQsIGNiXSkgPT4gYWNjLnJlY2VpdmUoa2luZCwgY2IpLCBwdXNoKCkpXG4gICAgfSwgbGF0ZW5jeSlcbiAgICByZXR1cm4gZmFrZVB1c2hcbiAgfVxuXG4gIHJlbG9hZFdpdGhKaXR0ZXIodmlldywgbG9nKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIpXG4gICAgdGhpcy5kaXNjb25uZWN0KClcbiAgICBsZXQgbWluTXMgPSB0aGlzLnJlbG9hZEppdHRlck1pblxuICAgIGxldCBtYXhNcyA9IHRoaXMucmVsb2FkSml0dGVyTWF4XG4gICAgbGV0IGFmdGVyTXMgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4TXMgLSBtaW5NcyArIDEpKSArIG1pbk1zXG4gICAgbGV0IHRyaWVzID0gQnJvd3Nlci51cGRhdGVMb2NhbCh0aGlzLmxvY2FsU3RvcmFnZSwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBDT05TRUNVVElWRV9SRUxPQURTLCAwLCBjb3VudCA9PiBjb3VudCArIDEpXG4gICAgaWYodHJpZXMgPiB0aGlzLm1heFJlbG9hZHMpe1xuICAgICAgYWZ0ZXJNcyA9IHRoaXMuZmFpbHNhZmVKaXR0ZXJcbiAgICB9XG4gICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGlmIHZpZXcgaGFzIHJlY292ZXJlZCwgc3VjaCBhcyB0cmFuc3BvcnQgcmVwbGFjZWQsIHRoZW4gY2FuY2VsXG4gICAgICBpZih2aWV3LmlzRGVzdHJveWVkKCkgfHwgdmlldy5pc0Nvbm5lY3RlZCgpKXsgcmV0dXJuIH1cbiAgICAgIHZpZXcuZGVzdHJveSgpXG4gICAgICBsb2cgPyBsb2coKSA6IHRoaXMubG9nKHZpZXcsIFwiam9pblwiLCAoKSA9PiBbYGVuY291bnRlcmVkICR7dHJpZXN9IGNvbnNlY3V0aXZlIHJlbG9hZHNgXSlcbiAgICAgIGlmKHRyaWVzID4gdGhpcy5tYXhSZWxvYWRzKXtcbiAgICAgICAgdGhpcy5sb2codmlldywgXCJqb2luXCIsICgpID0+IFtgZXhjZWVkZWQgJHt0aGlzLm1heFJlbG9hZHN9IGNvbnNlY3V0aXZlIHJlbG9hZHMuIEVudGVyaW5nIGZhaWxzYWZlIG1vZGVgXSlcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuaGFzUGVuZGluZ0xpbmsoKSl7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMucGVuZGluZ0xpbmtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgfVxuICAgIH0sIGFmdGVyTXMpXG4gIH1cblxuICBnZXRIb29rQ2FsbGJhY2tzKG5hbWUpe1xuICAgIHJldHVybiBuYW1lICYmIG5hbWUuc3RhcnRzV2l0aChcIlBob2VuaXguXCIpID8gSG9va3NbbmFtZS5zcGxpdChcIi5cIilbMV1dIDogdGhpcy5ob29rc1tuYW1lXVxuICB9XG5cbiAgaXNVbmxvYWRlZCgpeyByZXR1cm4gdGhpcy51bmxvYWRlZCB9XG5cbiAgaXNDb25uZWN0ZWQoKXsgcmV0dXJuIHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkgfVxuXG4gIGdldEJpbmRpbmdQcmVmaXgoKXsgcmV0dXJuIHRoaXMuYmluZGluZ1ByZWZpeCB9XG5cbiAgYmluZGluZyhraW5kKXsgcmV0dXJuIGAke3RoaXMuZ2V0QmluZGluZ1ByZWZpeCgpfSR7a2luZH1gIH1cblxuICBjaGFubmVsKHRvcGljLCBwYXJhbXMpeyByZXR1cm4gdGhpcy5zb2NrZXQuY2hhbm5lbCh0b3BpYywgcGFyYW1zKSB9XG5cbiAgam9pblJvb3RWaWV3cygpe1xuICAgIGxldCByb290c0ZvdW5kID0gZmFsc2VcbiAgICBET00uYWxsKGRvY3VtZW50LCBgJHtQSFhfVklFV19TRUxFQ1RPUn06bm90KFske1BIWF9QQVJFTlRfSUR9XSlgLCByb290RWwgPT4ge1xuICAgICAgaWYoIXRoaXMuZ2V0Um9vdEJ5SWQocm9vdEVsLmlkKSl7XG4gICAgICAgIGxldCB2aWV3ID0gdGhpcy5uZXdSb290Vmlldyhyb290RWwpXG4gICAgICAgIHZpZXcuc2V0SHJlZih0aGlzLmdldEhyZWYoKSlcbiAgICAgICAgdmlldy5qb2luKClcbiAgICAgICAgaWYocm9vdEVsLmdldEF0dHJpYnV0ZShQSFhfTUFJTikpeyB0aGlzLm1haW4gPSB2aWV3IH1cbiAgICAgIH1cbiAgICAgIHJvb3RzRm91bmQgPSB0cnVlXG4gICAgfSlcbiAgICByZXR1cm4gcm9vdHNGb3VuZFxuICB9XG5cbiAgcmVkaXJlY3QodG8sIGZsYXNoKXtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKVxuICAgIEJyb3dzZXIucmVkaXJlY3QodG8sIGZsYXNoKVxuICB9XG5cbiAgcmVwbGFjZU1haW4oaHJlZiwgZmxhc2gsIGNhbGxiYWNrID0gbnVsbCwgbGlua1JlZiA9IHRoaXMuc2V0UGVuZGluZ0xpbmsoaHJlZikpe1xuICAgIHRoaXMub3V0Z29pbmdNYWluRWwgPSB0aGlzLm91dGdvaW5nTWFpbkVsIHx8IHRoaXMubWFpbi5lbFxuICAgIGxldCBuZXdNYWluRWwgPSBET00uY2xvbmVOb2RlKHRoaXMub3V0Z29pbmdNYWluRWwsIFwiXCIpXG4gICAgdGhpcy5tYWluLnNob3dMb2FkZXIodGhpcy5sb2FkZXJUaW1lb3V0KVxuICAgIHRoaXMubWFpbi5kZXN0cm95KClcblxuICAgIHRoaXMubWFpbiA9IHRoaXMubmV3Um9vdFZpZXcobmV3TWFpbkVsLCBmbGFzaClcbiAgICB0aGlzLm1haW4uc2V0UmVkaXJlY3QoaHJlZilcbiAgICB0aGlzLnRyYW5zaXRpb25SZW1vdmVzKClcbiAgICB0aGlzLm1haW4uam9pbigoam9pbkNvdW50LCBvbkRvbmUpID0+IHtcbiAgICAgIGlmKGpvaW5Db3VudCA9PT0gMSAmJiB0aGlzLmNvbW1pdFBlbmRpbmdMaW5rKGxpbmtSZWYpKXtcbiAgICAgICAgdGhpcy5yZXF1ZXN0RE9NVXBkYXRlKCgpID0+IHtcbiAgICAgICAgICBET00uZmluZFBoeFN0aWNreShkb2N1bWVudCkuZm9yRWFjaChlbCA9PiBuZXdNYWluRWwuYXBwZW5kQ2hpbGQoZWwpKVxuICAgICAgICAgIHRoaXMub3V0Z29pbmdNYWluRWwucmVwbGFjZVdpdGgobmV3TWFpbkVsKVxuICAgICAgICAgIHRoaXMub3V0Z29pbmdNYWluRWwgPSBudWxsXG4gICAgICAgICAgY2FsbGJhY2sgJiYgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKVxuICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHRyYW5zaXRpb25SZW1vdmVzKGVsZW1lbnRzKXtcbiAgICBsZXQgcmVtb3ZlQXR0ciA9IHRoaXMuYmluZGluZyhcInJlbW92ZVwiKVxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMgfHwgRE9NLmFsbChkb2N1bWVudCwgYFske3JlbW92ZUF0dHJ9XWApXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBpZihkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSl7IC8vIHNraXAgY2hpbGRyZW4gYWxyZWFkeSByZW1vdmVkXG4gICAgICAgIHRoaXMuZXhlY0pTKGVsLCBlbC5nZXRBdHRyaWJ1dGUocmVtb3ZlQXR0ciksIFwicmVtb3ZlXCIpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGlzUGh4VmlldyhlbCl7IHJldHVybiBlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSAhPT0gbnVsbCB9XG5cbiAgbmV3Um9vdFZpZXcoZWwsIGZsYXNoKXtcbiAgICBsZXQgdmlldyA9IG5ldyBWaWV3KGVsLCB0aGlzLCBudWxsLCBmbGFzaClcbiAgICB0aGlzLnJvb3RzW3ZpZXcuaWRdID0gdmlld1xuICAgIHJldHVybiB2aWV3XG4gIH1cblxuICBvd25lcihjaGlsZEVsLCBjYWxsYmFjayl7XG4gICAgbGV0IHZpZXcgPSBtYXliZShjaGlsZEVsLmNsb3Nlc3QoUEhYX1ZJRVdfU0VMRUNUT1IpLCBlbCA9PiB0aGlzLmdldFZpZXdCeUVsKGVsKSkgfHwgdGhpcy5tYWluXG4gICAgaWYodmlldyl7IGNhbGxiYWNrKHZpZXcpIH1cbiAgfVxuXG4gIHdpdGhpbk93bmVycyhjaGlsZEVsLCBjYWxsYmFjayl7XG4gICAgdGhpcy5vd25lcihjaGlsZEVsLCB2aWV3ID0+IGNhbGxiYWNrKHZpZXcsIGNoaWxkRWwpKVxuICB9XG5cbiAgZ2V0Vmlld0J5RWwoZWwpe1xuICAgIGxldCByb290SWQgPSBlbC5nZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQpXG4gICAgcmV0dXJuIG1heWJlKHRoaXMuZ2V0Um9vdEJ5SWQocm9vdElkKSwgcm9vdCA9PiByb290LmdldERlc2NlbmRlbnRCeUVsKGVsKSlcbiAgfVxuXG4gIGdldFJvb3RCeUlkKGlkKXsgcmV0dXJuIHRoaXMucm9vdHNbaWRdIH1cblxuICBkZXN0cm95QWxsVmlld3MoKXtcbiAgICBmb3IobGV0IGlkIGluIHRoaXMucm9vdHMpe1xuICAgICAgdGhpcy5yb290c1tpZF0uZGVzdHJveSgpXG4gICAgICBkZWxldGUgdGhpcy5yb290c1tpZF1cbiAgICB9XG4gICAgdGhpcy5tYWluID0gbnVsbFxuICB9XG5cbiAgZGVzdHJveVZpZXdCeUVsKGVsKXtcbiAgICBsZXQgcm9vdCA9IHRoaXMuZ2V0Um9vdEJ5SWQoZWwuZ2V0QXR0cmlidXRlKFBIWF9ST09UX0lEKSlcbiAgICBpZihyb290ICYmIHJvb3QuaWQgPT09IGVsLmlkKXtcbiAgICAgIHJvb3QuZGVzdHJveSgpXG4gICAgICBkZWxldGUgdGhpcy5yb290c1tyb290LmlkXVxuICAgIH0gZWxzZSBpZihyb290KXtcbiAgICAgIHJvb3QuZGVzdHJveURlc2NlbmRlbnQoZWwuaWQpXG4gICAgfVxuICB9XG5cbiAgc2V0QWN0aXZlRWxlbWVudCh0YXJnZXQpe1xuICAgIGlmKHRoaXMuYWN0aXZlRWxlbWVudCA9PT0gdGFyZ2V0KXsgcmV0dXJuIH1cbiAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSB0YXJnZXRcbiAgICBsZXQgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgaWYodGFyZ2V0ID09PSB0aGlzLmFjdGl2ZUVsZW1lbnQpeyB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsIH1cbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzKVxuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCB0aGlzKVxuICAgIH1cbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgY2FuY2VsKVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgY2FuY2VsKVxuICB9XG5cbiAgZ2V0QWN0aXZlRWxlbWVudCgpe1xuICAgIGlmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpe1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIGJlIG51bGwgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTFcbiAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmJvZHlcbiAgICB9XG4gIH1cblxuICBkcm9wQWN0aXZlRWxlbWVudCh2aWV3KXtcbiAgICBpZih0aGlzLnByZXZBY3RpdmUgJiYgdmlldy5vd25zRWxlbWVudCh0aGlzLnByZXZBY3RpdmUpKXtcbiAgICAgIHRoaXMucHJldkFjdGl2ZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICByZXN0b3JlUHJldmlvdXNseUFjdGl2ZUZvY3VzKCl7XG4gICAgaWYodGhpcy5wcmV2QWN0aXZlICYmIHRoaXMucHJldkFjdGl2ZSAhPT0gZG9jdW1lbnQuYm9keSl7XG4gICAgICB0aGlzLnByZXZBY3RpdmUuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIGJsdXJBY3RpdmVFbGVtZW50KCl7XG4gICAgdGhpcy5wcmV2QWN0aXZlID0gdGhpcy5nZXRBY3RpdmVFbGVtZW50KClcbiAgICBpZih0aGlzLnByZXZBY3RpdmUgIT09IGRvY3VtZW50LmJvZHkpeyB0aGlzLnByZXZBY3RpdmUuYmx1cigpIH1cbiAgfVxuXG4gIGJpbmRUb3BMZXZlbEV2ZW50cygpe1xuICAgIGlmKHRoaXMuYm91bmRUb3BMZXZlbEV2ZW50cyl7IHJldHVybiB9XG5cbiAgICB0aGlzLmJvdW5kVG9wTGV2ZWxFdmVudHMgPSB0cnVlXG4gICAgLy8gZW50ZXIgZmFpbHNhZmUgcmVsb2FkIGlmIHNlcnZlciBoYXMgZ29uZSBhd2F5IGludGVudGlvbmFsbHksIHN1Y2ggYXMgXCJkaXNjb25uZWN0XCIgYnJvYWRjYXN0XG4gICAgdGhpcy5zb2NrZXQub25DbG9zZShldmVudCA9PiB7XG4gICAgICBpZihldmVudCAmJiBldmVudC5jb2RlID09PSAxMDAwICYmIHRoaXMubWFpbil7XG4gICAgICAgIHRoaXMucmVsb2FkV2l0aEppdHRlcih0aGlzLm1haW4pXG4gICAgICB9XG4gICAgfSlcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKXsgfSkgLy8gZW5zdXJlIGFsbCBjbGljayBldmVudHMgYnViYmxlIGZvciBtb2JpbGUgU2FmYXJpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBlID0+IHtcbiAgICAgIGlmKGUucGVyc2lzdGVkKXsgLy8gcmVsb2FkIHBhZ2UgaWYgYmVpbmcgcmVzdG9yZWQgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGVcbiAgICAgICAgdGhpcy5nZXRTb2NrZXQoKS5kaXNjb25uZWN0KClcbiAgICAgICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiB3aW5kb3cubG9jYXRpb24uaHJlZiwga2luZDogXCJyZWRpcmVjdFwifSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSwgdHJ1ZSlcbiAgICB0aGlzLmJpbmROYXYoKVxuICAgIHRoaXMuYmluZENsaWNrcygpXG4gICAgdGhpcy5iaW5kRm9ybXMoKVxuICAgIHRoaXMuYmluZCh7a2V5dXA6IFwia2V5dXBcIiwga2V5ZG93bjogXCJrZXlkb3duXCJ9LCAoZSwgdHlwZSwgdmlldywgdGFyZ2V0RWwsIHBoeEV2ZW50LCBldmVudFRhcmdldCkgPT4ge1xuICAgICAgbGV0IG1hdGNoS2V5ID0gdGFyZ2V0RWwuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfS0VZKSlcbiAgICAgIGxldCBwcmVzc2VkS2V5ID0gZS5rZXkgJiYgZS5rZXkudG9Mb3dlckNhc2UoKSAvLyBjaHJvbWUgY2xpY2tlZCBhdXRvY29tcGxldGVzIHNlbmQgYSBrZXlkb3duIHdpdGhvdXQga2V5XG4gICAgICBpZihtYXRjaEtleSAmJiBtYXRjaEtleS50b0xvd2VyQ2FzZSgpICE9PSBwcmVzc2VkS2V5KXsgcmV0dXJuIH1cblxuICAgICAgbGV0IGRhdGEgPSB7a2V5OiBlLmtleSwgLi4udGhpcy5ldmVudE1ldGEodHlwZSwgZSwgdGFyZ2V0RWwpfVxuICAgICAgSlMuZXhlYyh0eXBlLCBwaHhFdmVudCwgdmlldywgdGFyZ2V0RWwsIFtcInB1c2hcIiwge2RhdGF9XSlcbiAgICB9KVxuICAgIHRoaXMuYmluZCh7Ymx1cjogXCJmb2N1c291dFwiLCBmb2N1czogXCJmb2N1c2luXCJ9LCAoZSwgdHlwZSwgdmlldywgdGFyZ2V0RWwsIHBoeEV2ZW50LCBldmVudFRhcmdldCkgPT4ge1xuICAgICAgaWYoIWV2ZW50VGFyZ2V0KXtcbiAgICAgICAgbGV0IGRhdGEgPSB7a2V5OiBlLmtleSwgLi4udGhpcy5ldmVudE1ldGEodHlwZSwgZSwgdGFyZ2V0RWwpfVxuICAgICAgICBKUy5leGVjKHR5cGUsIHBoeEV2ZW50LCB2aWV3LCB0YXJnZXRFbCwgW1wicHVzaFwiLCB7ZGF0YX1dKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5iaW5kKHtibHVyOiBcImJsdXJcIiwgZm9jdXM6IFwiZm9jdXNcIn0sIChlLCB0eXBlLCB2aWV3LCB0YXJnZXRFbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgcGh4VGFyZ2V0KSA9PiB7XG4gICAgICAvLyBibHVyIGFuZCBmb2N1cyBhcmUgdHJpZ2dlcmVkIG9uIGRvY3VtZW50IGFuZCB3aW5kb3cuIERpc2NhcmQgb25lIHRvIGF2b2lkIGR1cHNcbiAgICAgIGlmKHBoeFRhcmdldCA9PT0gXCJ3aW5kb3dcIil7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5ldmVudE1ldGEodHlwZSwgZSwgdGFyZ2V0RWwpXG4gICAgICAgIEpTLmV4ZWModHlwZSwgcGh4RXZlbnQsIHZpZXcsIHRhcmdldEVsLCBbXCJwdXNoXCIsIHtkYXRhfV0pXG4gICAgICB9XG4gICAgfSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdvdmVyXCIsIGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCBlID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgbGV0IGRyb3BUYXJnZXRJZCA9IG1heWJlKGNsb3Nlc3RQaHhCaW5kaW5nKGUudGFyZ2V0LCB0aGlzLmJpbmRpbmcoUEhYX0RST1BfVEFSR0VUKSksIHRydWVUYXJnZXQgPT4ge1xuICAgICAgICByZXR1cm4gdHJ1ZVRhcmdldC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9EUk9QX1RBUkdFVCkpXG4gICAgICB9KVxuICAgICAgbGV0IGRyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZHJvcFRhcmdldElkKVxuICAgICAgbGV0IGZpbGVzID0gQXJyYXkuZnJvbShlLmRhdGFUcmFuc2Zlci5maWxlcyB8fCBbXSlcbiAgICAgIGlmKCFkcm9wVGFyZ2V0IHx8IGRyb3BUYXJnZXQuZGlzYWJsZWQgfHwgZmlsZXMubGVuZ3RoID09PSAwIHx8ICEoZHJvcFRhcmdldC5maWxlcyBpbnN0YW5jZW9mIEZpbGVMaXN0KSl7IHJldHVybiB9XG5cbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKGRyb3BUYXJnZXQsIGZpbGVzKVxuICAgICAgZHJvcFRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHtidWJibGVzOiB0cnVlfSkpXG4gICAgfSlcbiAgICB0aGlzLm9uKFBIWF9UUkFDS19VUExPQURTLCBlID0+IHtcbiAgICAgIGxldCB1cGxvYWRUYXJnZXQgPSBlLnRhcmdldFxuICAgICAgaWYoIURPTS5pc1VwbG9hZElucHV0KHVwbG9hZFRhcmdldCkpeyByZXR1cm4gfVxuICAgICAgbGV0IGZpbGVzID0gQXJyYXkuZnJvbShlLmRldGFpbC5maWxlcyB8fCBbXSkuZmlsdGVyKGYgPT4gZiBpbnN0YW5jZW9mIEZpbGUgfHwgZiBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICBMaXZlVXBsb2FkZXIudHJhY2tGaWxlcyh1cGxvYWRUYXJnZXQsIGZpbGVzKVxuICAgICAgdXBsb2FkVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwge2J1YmJsZXM6IHRydWV9KSlcbiAgICB9KVxuICB9XG5cbiAgZXZlbnRNZXRhKGV2ZW50TmFtZSwgZSwgdGFyZ2V0RWwpe1xuICAgIGxldCBjYWxsYmFjayA9IHRoaXMubWV0YWRhdGFDYWxsYmFja3NbZXZlbnROYW1lXVxuICAgIHJldHVybiBjYWxsYmFjayA/IGNhbGxiYWNrKGUsIHRhcmdldEVsKSA6IHt9XG4gIH1cblxuICBzZXRQZW5kaW5nTGluayhocmVmKXtcbiAgICB0aGlzLmxpbmtSZWYrK1xuICAgIHRoaXMucGVuZGluZ0xpbmsgPSBocmVmXG4gICAgcmV0dXJuIHRoaXMubGlua1JlZlxuICB9XG5cbiAgY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZil7XG4gICAgaWYodGhpcy5saW5rUmVmICE9PSBsaW5rUmVmKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhyZWYgPSB0aGlzLnBlbmRpbmdMaW5rXG4gICAgICB0aGlzLnBlbmRpbmdMaW5rID0gbnVsbFxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBnZXRIcmVmKCl7IHJldHVybiB0aGlzLmhyZWYgfVxuXG4gIGhhc1BlbmRpbmdMaW5rKCl7IHJldHVybiAhIXRoaXMucGVuZGluZ0xpbmsgfVxuXG4gIGJpbmQoZXZlbnRzLCBjYWxsYmFjayl7XG4gICAgZm9yKGxldCBldmVudCBpbiBldmVudHMpe1xuICAgICAgbGV0IGJyb3dzZXJFdmVudE5hbWUgPSBldmVudHNbZXZlbnRdXG5cbiAgICAgIHRoaXMub24oYnJvd3NlckV2ZW50TmFtZSwgZSA9PiB7XG4gICAgICAgIGxldCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nKGV2ZW50KVxuICAgICAgICBsZXQgd2luZG93QmluZGluZyA9IHRoaXMuYmluZGluZyhgd2luZG93LSR7ZXZlbnR9YClcbiAgICAgICAgbGV0IHRhcmdldFBoeEV2ZW50ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlICYmIGUudGFyZ2V0LmdldEF0dHJpYnV0ZShiaW5kaW5nKVxuICAgICAgICBpZih0YXJnZXRQaHhFdmVudCl7XG4gICAgICAgICAgdGhpcy5kZWJvdW5jZShlLnRhcmdldCwgZSwgYnJvd3NlckV2ZW50TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsIHZpZXcgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlLCBldmVudCwgdmlldywgZS50YXJnZXQsIHRhcmdldFBoeEV2ZW50LCBudWxsKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIERPTS5hbGwoZG9jdW1lbnQsIGBbJHt3aW5kb3dCaW5kaW5nfV1gLCBlbCA9PiB7XG4gICAgICAgICAgICBsZXQgcGh4RXZlbnQgPSBlbC5nZXRBdHRyaWJ1dGUod2luZG93QmluZGluZylcbiAgICAgICAgICAgIHRoaXMuZGVib3VuY2UoZWwsIGUsIGJyb3dzZXJFdmVudE5hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZWwsIHZpZXcgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGUsIGV2ZW50LCB2aWV3LCBlbCwgcGh4RXZlbnQsIFwid2luZG93XCIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYmluZENsaWNrcygpe1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGUgPT4gdGhpcy5jbGlja1N0YXJ0ZWRBdFRhcmdldCA9IGUudGFyZ2V0KVxuICAgIHRoaXMuYmluZENsaWNrKFwiY2xpY2tcIiwgXCJjbGlja1wiLCBmYWxzZSlcbiAgICB0aGlzLmJpbmRDbGljayhcIm1vdXNlZG93blwiLCBcImNhcHR1cmUtY2xpY2tcIiwgdHJ1ZSlcbiAgfVxuXG4gIGJpbmRDbGljayhldmVudE5hbWUsIGJpbmRpbmdOYW1lLCBjYXB0dXJlKXtcbiAgICBsZXQgY2xpY2sgPSB0aGlzLmJpbmRpbmcoYmluZGluZ05hbWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBlID0+IHtcbiAgICAgIGxldCB0YXJnZXQgPSBudWxsXG4gICAgICBpZihjYXB0dXJlKXtcbiAgICAgICAgdGFyZ2V0ID0gZS50YXJnZXQubWF0Y2hlcyhgWyR7Y2xpY2t9XWApID8gZS50YXJnZXQgOiBlLnRhcmdldC5xdWVyeVNlbGVjdG9yKGBbJHtjbGlja31dYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjbGlja1N0YXJ0ZWRBdFRhcmdldCA9IHRoaXMuY2xpY2tTdGFydGVkQXRUYXJnZXQgfHwgZS50YXJnZXRcbiAgICAgICAgdGFyZ2V0ID0gY2xvc2VzdFBoeEJpbmRpbmcoY2xpY2tTdGFydGVkQXRUYXJnZXQsIGNsaWNrKVxuICAgICAgICB0aGlzLmRpc3BhdGNoQ2xpY2tBd2F5KGUsIGNsaWNrU3RhcnRlZEF0VGFyZ2V0KVxuICAgICAgICB0aGlzLmNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gbnVsbFxuICAgICAgfVxuICAgICAgbGV0IHBoeEV2ZW50ID0gdGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoY2xpY2spXG4gICAgICBpZighcGh4RXZlbnQpeyByZXR1cm4gfVxuICAgICAgaWYodGFyZ2V0LmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiKXsgZS5wcmV2ZW50RGVmYXVsdCgpIH1cblxuICAgICAgdGhpcy5kZWJvdW5jZSh0YXJnZXQsIGUsIFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICB0aGlzLndpdGhpbk93bmVycyh0YXJnZXQsIHZpZXcgPT4ge1xuICAgICAgICAgIEpTLmV4ZWMoXCJjbGlja1wiLCBwaHhFdmVudCwgdmlldywgdGFyZ2V0LCBbXCJwdXNoXCIsIHtkYXRhOiB0aGlzLmV2ZW50TWV0YShcImNsaWNrXCIsIGUsIHRhcmdldCl9XSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSwgY2FwdHVyZSlcbiAgfVxuXG4gIGRpc3BhdGNoQ2xpY2tBd2F5KGUsIGNsaWNrU3RhcnRlZEF0KXtcbiAgICBsZXQgcGh4Q2xpY2tBd2F5ID0gdGhpcy5iaW5kaW5nKFwiY2xpY2stYXdheVwiKVxuICAgIERPTS5hbGwoZG9jdW1lbnQsIGBbJHtwaHhDbGlja0F3YXl9XWAsIGVsID0+IHtcbiAgICAgIGlmKCEoZWwuaXNTYW1lTm9kZShjbGlja1N0YXJ0ZWRBdCkgfHwgZWwuY29udGFpbnMoY2xpY2tTdGFydGVkQXQpKSl7XG4gICAgICAgIHRoaXMud2l0aGluT3duZXJzKGUudGFyZ2V0LCB2aWV3ID0+IHtcbiAgICAgICAgICBsZXQgcGh4RXZlbnQgPSBlbC5nZXRBdHRyaWJ1dGUocGh4Q2xpY2tBd2F5KVxuICAgICAgICAgIGlmKEpTLmlzVmlzaWJsZShlbCkpe1xuICAgICAgICAgICAgSlMuZXhlYyhcImNsaWNrXCIsIHBoeEV2ZW50LCB2aWV3LCBlbCwgW1wicHVzaFwiLCB7ZGF0YTogdGhpcy5ldmVudE1ldGEoXCJjbGlja1wiLCBlLCBlLnRhcmdldCl9XSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGJpbmROYXYoKXtcbiAgICBpZighQnJvd3Nlci5jYW5QdXNoU3RhdGUoKSl7IHJldHVybiB9XG4gICAgaWYoaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbil7IGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiIH1cbiAgICBsZXQgc2Nyb2xsVGltZXIgPSBudWxsXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgX2UgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKVxuICAgICAgc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgQnJvd3Nlci51cGRhdGVDdXJyZW50U3RhdGUoc3RhdGUgPT4gT2JqZWN0LmFzc2lnbihzdGF0ZSwge3Njcm9sbDogd2luZG93LnNjcm9sbFl9KSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgZXZlbnQgPT4ge1xuICAgICAgaWYoIXRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pKXsgcmV0dXJuIH1cbiAgICAgIGxldCB7dHlwZSwgaWQsIHJvb3QsIHNjcm9sbH0gPSBldmVudC5zdGF0ZSB8fCB7fVxuICAgICAgbGV0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuXG4gICAgICB0aGlzLnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICBpZih0aGlzLm1haW4uaXNDb25uZWN0ZWQoKSAmJiAodHlwZSA9PT0gXCJwYXRjaFwiICYmIGlkID09PSB0aGlzLm1haW4uaWQpKXtcbiAgICAgICAgICB0aGlzLm1haW4ucHVzaExpbmtQYXRjaChocmVmLCBudWxsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVwbGFjZU1haW4oaHJlZiwgbnVsbCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYocm9vdCl7IHRoaXMucmVwbGFjZVJvb3RIaXN0b3J5KCkgfVxuICAgICAgICAgICAgaWYodHlwZW9mKHNjcm9sbCkgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgc2Nyb2xsKVxuICAgICAgICAgICAgICB9LCAwKSAvLyB0aGUgYm9keSBuZWVkcyB0byByZW5kZXIgYmVmb3JlIHdlIHNjcm9sbC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sIGZhbHNlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZSA9PiB7XG4gICAgICBsZXQgdGFyZ2V0ID0gY2xvc2VzdFBoeEJpbmRpbmcoZS50YXJnZXQsIFBIWF9MSVZFX0xJTkspXG4gICAgICBsZXQgdHlwZSA9IHRhcmdldCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKFBIWF9MSVZFX0xJTkspXG4gICAgICBsZXQgd2FudHNOZXdUYWIgPSBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5IHx8IGUuYnV0dG9uID09PSAxXG4gICAgICBpZighdHlwZSB8fCAhdGhpcy5pc0Nvbm5lY3RlZCgpIHx8ICF0aGlzLm1haW4gfHwgd2FudHNOZXdUYWIpeyByZXR1cm4gfVxuXG4gICAgICBsZXQgaHJlZiA9IHRhcmdldC5ocmVmXG4gICAgICBsZXQgbGlua1N0YXRlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShQSFhfTElOS19TVEFURSlcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSAvLyBkbyBub3QgYnViYmxlIGNsaWNrIHRvIHJlZ3VsYXIgcGh4LWNsaWNrIGJpbmRpbmdzXG4gICAgICBpZih0aGlzLnBlbmRpbmdMaW5rID09PSBocmVmKXsgcmV0dXJuIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0RE9NVXBkYXRlKCgpID0+IHtcbiAgICAgICAgaWYodHlwZSA9PT0gXCJwYXRjaFwiKXtcbiAgICAgICAgICB0aGlzLnB1c2hIaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCB0YXJnZXQpXG4gICAgICAgIH0gZWxzZSBpZih0eXBlID09PSBcInJlZGlyZWN0XCIpe1xuICAgICAgICAgIHRoaXMuaGlzdG9yeVJlZGlyZWN0KGhyZWYsIGxpbmtTdGF0ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7UEhYX0xJVkVfTElOS30gdG8gYmUgXCJwYXRjaFwiIG9yIFwicmVkaXJlY3RcIiwgZ290OiAke3R5cGV9YClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LCBmYWxzZSlcbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnQoZXZlbnQsIHBheWxvYWQgPSB7fSl7XG4gICAgRE9NLmRpc3BhdGNoRXZlbnQod2luZG93LCBgcGh4OiR7ZXZlbnR9YCwge2RldGFpbDogcGF5bG9hZH0pXG4gIH1cblxuICBkaXNwYXRjaEV2ZW50cyhldmVudHMpe1xuICAgIGV2ZW50cy5mb3JFYWNoKChbZXZlbnQsIHBheWxvYWRdKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQsIHBheWxvYWQpKVxuICB9XG5cbiAgd2l0aFBhZ2VMb2FkaW5nKGluZm8sIGNhbGxiYWNrKXtcbiAgICBET00uZGlzcGF0Y2hFdmVudCh3aW5kb3csIFwicGh4OnBhZ2UtbG9hZGluZy1zdGFydFwiLCB7ZGV0YWlsOiBpbmZvfSlcbiAgICBsZXQgZG9uZSA9ICgpID0+IERPTS5kaXNwYXRjaEV2ZW50KHdpbmRvdywgXCJwaHg6cGFnZS1sb2FkaW5nLXN0b3BcIiwge2RldGFpbDogaW5mb30pXG4gICAgcmV0dXJuIGNhbGxiYWNrID8gY2FsbGJhY2soZG9uZSkgOiBkb25lXG4gIH1cblxuICBwdXNoSGlzdG9yeVBhdGNoKGhyZWYsIGxpbmtTdGF0ZSwgdGFyZ2V0RWwpe1xuICAgIHRoaXMud2l0aFBhZ2VMb2FkaW5nKHt0bzogaHJlZiwga2luZDogXCJwYXRjaFwifSwgZG9uZSA9PiB7XG4gICAgICB0aGlzLm1haW4ucHVzaExpbmtQYXRjaChocmVmLCB0YXJnZXRFbCwgbGlua1JlZiA9PiB7XG4gICAgICAgIHRoaXMuaGlzdG9yeVBhdGNoKGhyZWYsIGxpbmtTdGF0ZSwgbGlua1JlZilcbiAgICAgICAgZG9uZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBoaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCBsaW5rUmVmID0gdGhpcy5zZXRQZW5kaW5nTGluayhocmVmKSl7XG4gICAgaWYoIXRoaXMuY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZikpeyByZXR1cm4gfVxuXG4gICAgQnJvd3Nlci5wdXNoU3RhdGUobGlua1N0YXRlLCB7dHlwZTogXCJwYXRjaFwiLCBpZDogdGhpcy5tYWluLmlkfSwgaHJlZilcbiAgICB0aGlzLnJlZ2lzdGVyTmV3TG9jYXRpb24od2luZG93LmxvY2F0aW9uKVxuICB9XG5cbiAgaGlzdG9yeVJlZGlyZWN0KGhyZWYsIGxpbmtTdGF0ZSwgZmxhc2gpe1xuICAgIGxldCBzY3JvbGwgPSB3aW5kb3cuc2Nyb2xsWVxuICAgIHRoaXMud2l0aFBhZ2VMb2FkaW5nKHt0bzogaHJlZiwga2luZDogXCJyZWRpcmVjdFwifSwgZG9uZSA9PiB7XG4gICAgICB0aGlzLnJlcGxhY2VNYWluKGhyZWYsIGZsYXNoLCAoKSA9PiB7XG4gICAgICAgIEJyb3dzZXIucHVzaFN0YXRlKGxpbmtTdGF0ZSwge3R5cGU6IFwicmVkaXJlY3RcIiwgaWQ6IHRoaXMubWFpbi5pZCwgc2Nyb2xsOiBzY3JvbGx9LCBocmVmKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyTmV3TG9jYXRpb24od2luZG93LmxvY2F0aW9uKVxuICAgICAgICBkb25lKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlcGxhY2VSb290SGlzdG9yeSgpe1xuICAgIEJyb3dzZXIucHVzaFN0YXRlKFwicmVwbGFjZVwiLCB7cm9vdDogdHJ1ZSwgdHlwZTogXCJwYXRjaFwiLCBpZDogdGhpcy5tYWluLmlkfSlcbiAgfVxuXG4gIHJlZ2lzdGVyTmV3TG9jYXRpb24obmV3TG9jYXRpb24pe1xuICAgIGxldCB7cGF0aG5hbWUsIHNlYXJjaH0gPSB0aGlzLmN1cnJlbnRMb2NhdGlvblxuICAgIGlmKHBhdGhuYW1lICsgc2VhcmNoID09PSBuZXdMb2NhdGlvbi5wYXRobmFtZSArIG5ld0xvY2F0aW9uLnNlYXJjaCl7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSBjbG9uZShuZXdMb2NhdGlvbilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgYmluZEZvcm1zKCl7XG4gICAgbGV0IGl0ZXJhdGlvbnMgPSAwXG4gICAgdGhpcy5vbihcInN1Ym1pdFwiLCBlID0+IHtcbiAgICAgIGxldCBwaHhFdmVudCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJzdWJtaXRcIikpXG4gICAgICBpZighcGh4RXZlbnQpeyByZXR1cm4gfVxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnRhcmdldC5kaXNhYmxlZCA9IHRydWVcbiAgICAgIHRoaXMud2l0aGluT3duZXJzKGUudGFyZ2V0LCB2aWV3ID0+IHtcbiAgICAgICAgSlMuZXhlYyhcInN1Ym1pdFwiLCBwaHhFdmVudCwgdmlldywgZS50YXJnZXQsIFtcInB1c2hcIiwge31dKVxuICAgICAgfSlcbiAgICB9LCBmYWxzZSlcblxuICAgIGZvcihsZXQgdHlwZSBvZiBbXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSl7XG4gICAgICB0aGlzLm9uKHR5cGUsIGUgPT4ge1xuICAgICAgICBsZXQgcGh4Q2hhbmdlID0gdGhpcy5iaW5kaW5nKFwiY2hhbmdlXCIpXG4gICAgICAgIGxldCBpbnB1dCA9IGUudGFyZ2V0XG4gICAgICAgIGxldCBpbnB1dEV2ZW50ID0gaW5wdXQuZ2V0QXR0cmlidXRlKHBoeENoYW5nZSlcbiAgICAgICAgbGV0IGZvcm1FdmVudCA9IGlucHV0LmZvcm0gJiYgaW5wdXQuZm9ybS5nZXRBdHRyaWJ1dGUocGh4Q2hhbmdlKVxuICAgICAgICBsZXQgcGh4RXZlbnQgPSBpbnB1dEV2ZW50IHx8IGZvcm1FdmVudFxuICAgICAgICBpZighcGh4RXZlbnQpeyByZXR1cm4gfVxuICAgICAgICBpZihpbnB1dC50eXBlID09PSBcIm51bWJlclwiICYmIGlucHV0LnZhbGlkaXR5ICYmIGlucHV0LnZhbGlkaXR5LmJhZElucHV0KXsgcmV0dXJuIH1cblxuICAgICAgICBsZXQgZGlzcGF0Y2hlciA9IGlucHV0RXZlbnQgPyBpbnB1dCA6IGlucHV0LmZvcm1cbiAgICAgICAgbGV0IGN1cnJlbnRJdGVyYXRpb25zID0gaXRlcmF0aW9uc1xuICAgICAgICBpdGVyYXRpb25zKytcbiAgICAgICAgbGV0IHthdDogYXQsIHR5cGU6IGxhc3RUeXBlfSA9IERPTS5wcml2YXRlKGlucHV0LCBcInByZXYtaXRlcmF0aW9uXCIpIHx8IHt9XG4gICAgICAgIC8vIGRldGVjdCBkdXAgYmVjYXVzZSBzb21lIGJyb3dzZXJzIGRpc3BhdGNoIGJvdGggXCJpbnB1dFwiIGFuZCBcImNoYW5nZVwiXG4gICAgICAgIGlmKGF0ID09PSBjdXJyZW50SXRlcmF0aW9ucyAtIDEgJiYgdHlwZSAhPT0gbGFzdFR5cGUpeyByZXR1cm4gfVxuXG4gICAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0LCBcInByZXYtaXRlcmF0aW9uXCIsIHthdDogY3VycmVudEl0ZXJhdGlvbnMsIHR5cGU6IHR5cGV9KVxuXG4gICAgICAgIHRoaXMuZGVib3VuY2UoaW5wdXQsIGUsIHR5cGUsICgpID0+IHtcbiAgICAgICAgICB0aGlzLndpdGhpbk93bmVycyhkaXNwYXRjaGVyLCB2aWV3ID0+IHtcbiAgICAgICAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0LCBQSFhfSEFTX0ZPQ1VTRUQsIHRydWUpXG4gICAgICAgICAgICBpZighRE9NLmlzVGV4dHVhbElucHV0KGlucHV0KSl7XG4gICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRWxlbWVudChpbnB1dClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEpTLmV4ZWMoXCJjaGFuZ2VcIiwgcGh4RXZlbnQsIHZpZXcsIGlucHV0LCBbXCJwdXNoXCIsIHtfdGFyZ2V0OiBlLnRhcmdldC5uYW1lLCBkaXNwYXRjaGVyOiBkaXNwYXRjaGVyfV0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0sIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGRlYm91bmNlKGVsLCBldmVudCwgZXZlbnRUeXBlLCBjYWxsYmFjayl7XG4gICAgaWYoZXZlbnRUeXBlID09PSBcImJsdXJcIiB8fCBldmVudFR5cGUgPT09IFwiZm9jdXNvdXRcIil7IHJldHVybiBjYWxsYmFjaygpIH1cblxuICAgIGxldCBwaHhEZWJvdW5jZSA9IHRoaXMuYmluZGluZyhQSFhfREVCT1VOQ0UpXG4gICAgbGV0IHBoeFRocm90dGxlID0gdGhpcy5iaW5kaW5nKFBIWF9USFJPVFRMRSlcbiAgICBsZXQgZGVmYXVsdERlYm91bmNlID0gdGhpcy5kZWZhdWx0cy5kZWJvdW5jZS50b1N0cmluZygpXG4gICAgbGV0IGRlZmF1bHRUaHJvdHRsZSA9IHRoaXMuZGVmYXVsdHMudGhyb3R0bGUudG9TdHJpbmcoKVxuXG4gICAgdGhpcy53aXRoaW5Pd25lcnMoZWwsIHZpZXcgPT4ge1xuICAgICAgbGV0IGFzeW5jRmlsdGVyID0gKCkgPT4gIXZpZXcuaXNEZXN0cm95ZWQoKSAmJiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKVxuICAgICAgRE9NLmRlYm91bmNlKGVsLCBldmVudCwgcGh4RGVib3VuY2UsIGRlZmF1bHREZWJvdW5jZSwgcGh4VGhyb3R0bGUsIGRlZmF1bHRUaHJvdHRsZSwgYXN5bmNGaWx0ZXIsICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgc2lsZW5jZUV2ZW50cyhjYWxsYmFjayl7XG4gICAgdGhpcy5zaWxlbmNlZCA9IHRydWVcbiAgICBjYWxsYmFjaygpXG4gICAgdGhpcy5zaWxlbmNlZCA9IGZhbHNlXG4gIH1cblxuICBvbihldmVudCwgY2FsbGJhY2spe1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBlID0+IHtcbiAgICAgIGlmKCF0aGlzLnNpbGVuY2VkKXsgY2FsbGJhY2soZSkgfVxuICAgIH0pXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNpdGlvblNldCB7XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgdGhpcy50cmFuc2l0aW9ucyA9IG5ldyBTZXQoKVxuICAgIHRoaXMucGVuZGluZ09wcyA9IFtdXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICByZXNldCgpe1xuICAgIHRoaXMudHJhbnNpdGlvbnMuZm9yRWFjaCh0aW1lciA9PiB7XG4gICAgICBjYW5jZWxUaW1lb3V0KHRpbWVyKVxuICAgICAgdGhpcy50cmFuc2l0aW9ucy5kZWxldGUodGltZXIpXG4gICAgfSlcbiAgICB0aGlzLmZsdXNoUGVuZGluZ09wcygpXG4gIH1cblxuICBhZnRlcihjYWxsYmFjayl7XG4gICAgaWYodGhpcy5zaXplKCkgPT09IDApe1xuICAgICAgY2FsbGJhY2soKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hQZW5kaW5nT3AoY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgYWRkVHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCBvbkRvbmUpe1xuICAgIG9uU3RhcnQoKVxuICAgIGxldCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2l0aW9ucy5kZWxldGUodGltZXIpXG4gICAgICBvbkRvbmUoKVxuICAgICAgaWYodGhpcy5zaXplKCkgPT09IDApeyB0aGlzLmZsdXNoUGVuZGluZ09wcygpIH1cbiAgICB9LCB0aW1lKVxuICAgIHRoaXMudHJhbnNpdGlvbnMuYWRkKHRpbWVyKVxuICB9XG5cbiAgcHVzaFBlbmRpbmdPcChvcCl7IHRoaXMucGVuZGluZ09wcy5wdXNoKG9wKSB9XG5cbiAgc2l6ZSgpeyByZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5zaXplIH1cblxuICBmbHVzaFBlbmRpbmdPcHMoKXtcbiAgICB0aGlzLnBlbmRpbmdPcHMuZm9yRWFjaChvcCA9PiBvcCgpKVxuICAgIHRoaXMucGVuZGluZ09wcyA9IFtdXG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFhQSxPQUFFLFNBQVVBLFNBQVEsU0FBVTtBQUU3QjtBQUVBLFlBQUssT0FBTyxXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVksVUFBVztBQVN2RSxpQkFBTyxVQUFVQSxRQUFPLFdBQ3ZCLFFBQVNBLFNBQVEsSUFBSyxJQUN0QixTQUFVLEdBQUk7QUFDYixnQkFBSyxDQUFDLEVBQUUsVUFBVztBQUNsQixvQkFBTSxJQUFJLE1BQU8sMENBQTJDO0FBQUEsWUFDN0Q7QUFDQSxtQkFBTyxRQUFTLENBQUU7QUFBQSxVQUNuQjtBQUFBLFFBQ0YsT0FBTztBQUNOLGtCQUFTQSxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUdELEdBQUssT0FBTyxXQUFXLGNBQWMsU0FBUyxTQUFNLFNBQVVDLFNBQVEsVUFBVztBQU1qRjtBQUVBLFlBQUksTUFBTSxDQUFDO0FBRVgsWUFBSSxXQUFXLE9BQU87QUFFdEIsWUFBSSxRQUFRLElBQUk7QUFFaEIsWUFBSSxPQUFPLElBQUksT0FBTyxTQUFVLE9BQVE7QUFDdkMsaUJBQU8sSUFBSSxLQUFLLEtBQU0sS0FBTTtBQUFBLFFBQzdCLElBQUksU0FBVSxPQUFRO0FBQ3JCLGlCQUFPLElB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LFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBYTtBQUFBLFlBQW9CO0FBQUEsWUFBbUI7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFZO0FBQUEsWUFBVztBQUFBLFlBQWM7QUFBQSxZQUFhO0FBQUEsWUFBWTtBQUFBLFlBQVE7QUFBQSxZQUFRO0FBQUEsWUFBTztBQUFBLFlBQVk7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVc7QUFBQSxZQUFjO0FBQUEsWUFBYztBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQXFCO0FBQUEsWUFBYztBQUFBLFlBQWU7QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQWlCO0FBQUEsWUFBcUI7QUFBQSxZQUFpQztBQUFBLFlBQWtDO0FBQUEsWUFBYTtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBVztBQUFBLFlBQVU7QUFBQSxZQUFRO0FBQUEsWUFBZ0I7QUFBQSxZQUFnQjtBQUFBLFlBQVM7QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQWE7QUFBQSxZQUFXO0FBQUEsWUFBUztBQUFBLFlBQVk7QUFBQSxZQUFlO0FBQUEsWUFBWTtBQUFBLFlBQVM7QUFBQSxZQUFhO0FBQUEsWUFBYztBQUFBLFlBQWM7QUFBQSxZQUFzQjtBQUFBLFlBQVU7QUFBQSxZQUFVO0FBQUEsWUFBWTtBQUFBLFlBQWdCO0FBQUEsWUFBVztBQUFBLFlBQWM7QUFBQSxZQUFRO0FBQUEsWUFBVztBQUFBLFlBQVM7QUFBQSxZQUFVO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFjO0FBQUEsWUFBWTtBQUFBLFlBQWE7QUFBQSxZQUFPO0FBQUEsWUFBYztBQUFBLFlBQVc7QUFBQSxZQUFjO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUFhO0FBQUEsWUFBUTtBQUFBLFlBQWE7QUFBQSxZQUFVO0FBQUEsWUFBYTtBQUFBLFlBQWtCO0FBQUEsWUFBVztBQUFBLFlBQWdCO0FBQUEsWUFBVztBQUFBLFlBQWlCO0FBQUEsWUFBZ0I7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVk7QUFBQSxZQUFRO0FBQUEsWUFBYztBQUFBLFlBQXFCO0FBQUEsWUFBYTtBQUFBLFlBQVc7QUFBQSxZQUFXO0FBQUEsWUFBYTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBa0I7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQWE7QUFBQSxZQUFpQjtBQUFBLFlBQWU7QUFBQSxZQUFxQjtBQUFBLFlBQU87QUFBQSxZQUFXO0FBQUEsWUFBUTtBQUFBLFlBQVU7QUFBQSxZQUFRO0FBQUEsWUFBdUI7QUFBQSxZQUFjO0FBQUEsWUFBYztBQUFBLFlBQW9CO0FBQUEsWUFBVztBQUFBLFlBQWU7QUFBQSxZQUFVO0FBQUEsWUFBYztBQUFBLFlBQVk7QUFBQSxZQUFtQjtBQUFBLFlBQVE7QUFBQSxZQUFRO0FBQUEsWUFBUztBQUFBLFlBQVM7QUFBQSxZQUFTO0FBQUEsWUFBYTtBQUFBLFlBQVU7QUFBQSxZQUFnQjtBQUFBLFlBQWdCO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxZQUFPO0FBQUEsWUFBYztBQUFBLFlBQWE7QUFBQSxZQUFZO0FBQUEsWUFBUztBQUFBLFlBQXFCO0FBQUEsWUFBZ0I7QUFBQSxZQUFRO0FBQUEsWUFBZTtBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFpQjtBQUFBLFlBQWE7QUFBQSxVQUN6aUU7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBQ2Y7QUFBQSxZQUFXO0FBQUEsWUFBbUI7QUFBQSxZQUFPO0FBQUEsWUFBZTtBQUFBLFlBQWtCO0FBQUEsWUFBYztBQUFBLFlBQVc7QUFBQSxZQUFnQjtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBZTtBQUFBLFlBQU87QUFBQSxZQUFLO0FBQUEsWUFBSztBQUFBLFlBQWU7QUFBQSxZQUFLO0FBQUEsWUFBTztBQUFBLFlBQUs7QUFBQSxZQUFNO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUF5QjtBQUFBLFlBQVE7QUFBQSxZQUFLO0FBQUEsWUFBUTtBQUFBLFlBQUs7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUFNO0FBQUEsWUFBUztBQUFBLFlBQWM7QUFBQSxZQUFVO0FBQUEsWUFBUztBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBUztBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBTTtBQUFBLFlBQWtCO0FBQUEsWUFBTTtBQUFBLFlBQU87QUFBQSxZQUFXO0FBQUEsWUFBYztBQUFBLFlBQU07QUFBQSxZQUFNO0FBQUEsWUFBTztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQU07QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQU87QUFBQSxZQUFVO0FBQUEsWUFBTTtBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBUTtBQUFBLFlBQVk7QUFBQSxZQUFjO0FBQUEsWUFBVztBQUFBLFlBQVk7QUFBQSxZQUFRO0FBQUEsWUFBYTtBQUFBLFlBQWU7QUFBQSxZQUFTO0FBQUEsWUFBTztBQUFBLFlBQWtCO0FBQUEsWUFBYTtBQUFBLFlBQTBCO0FBQUEsWUFBYztBQUFBLFlBQVM7QUFBQSxZQUFjO0FBQUEsWUFBUztBQUFBLFlBQVc7QUFBQSxZQUFPO0FBQUEsWUFBVTtBQUFBLFlBQXlCO0FBQUEsWUFBTztBQUFBLFlBQVE7QUFBQSxZQUFNO0FBQUEsWUFBUTtBQUFBLFlBQVk7QUFBQSxZQUFTO0FBQUEsWUFBYTtBQUFBLFVBQzc3QjtBQUFBLFFBRUQ7QUFFQSxlQUFPLEtBQUssUUFBUSxFQUFFLFFBQVEsU0FBVSxHQUFHO0FBQzFDLGlCQUFPLEdBQUcsVUFBVSxpQkFBaUIsU0FBUyxFQUFFO0FBQUEsUUFDakQsQ0FBQztBQUVELFlBQUksY0FBYztBQUFBLFVBRWpCO0FBQUEsVUFBTztBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBTztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBVztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFTO0FBQUEsVUFBVztBQUFBLFVBQVU7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFTO0FBQUEsVUFBTztBQUFBLFVBQVU7QUFBQSxVQUFNO0FBQUEsVUFBVztBQUFBLFVBQWE7QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQWE7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVc7QUFBQSxVQUFNO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBYztBQUFBLFVBQWM7QUFBQSxVQUFZO0FBQUEsVUFBUztBQUFBLFVBQVc7QUFBQSxVQUFRO0FBQUEsVUFBTTtBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBTztBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBTztBQUFBLFVBQVk7QUFBQSxVQUV6ZjtBQUFBLFVBQWtCO0FBQUEsVUFBbUI7QUFBQSxVQUFVO0FBQUEsVUFBYTtBQUFBLFVBQVM7QUFBQSxVQUFhO0FBQUEsVUFBYTtBQUFBLFVBQVk7QUFBQSxVQUFlO0FBQUEsVUFBVztBQUFBLFVBQWE7QUFBQSxVQUFpQjtBQUFBLFVBQW9CO0FBQUEsVUFBVTtBQUFBLFVBQU87QUFBQSxVQUFXO0FBQUEsVUFBZTtBQUFBLFVBQWM7QUFBQSxVQUFVO0FBQUEsVUFBZTtBQUFBLFVBQVE7QUFBQSxVQUFnQjtBQUFBLFVBQWE7QUFBQSxVQUFXO0FBQUEsVUFBZ0I7QUFBQSxVQUFnQjtBQUFBLFVBQWM7QUFBQSxVQUFtQjtBQUFBLFVBQVM7QUFBQSxVQUFjO0FBQUEsVUFBVTtBQUFBLFVB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VUFDUjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1Y7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxjQUNSLFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGNBQ1IsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsY0FDUixZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGNBQ1IsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUVDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFFQTtBQUFBLFlBQ0E7QUFBQSxjQUtDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsaUJBQWlCO0FBQUEsWUFDaEIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsY0FDUixZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxjQUNSLFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsY0FDUixZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsZUFBZTtBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGNBQ1IsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU8sQ0FBQyw4QkFBOEIsa0JBQWtCO0FBQUEsY0FDeEQsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU8sQ0FBQyw4QkFBOEIsZ0JBQWdCO0FBQUEsY0FDdEQsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsY0FDUixZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU8sQ0FBQyw4QkFBOEIsV0FBVztBQUFBLGNBQ2pELFFBQVE7QUFBQSxjQUNSLFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGNBQ1IsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPLENBQUMsOEJBQThCLGFBQWE7QUFBQSxjQUNuRCxRQUFRO0FBQUEsY0FDUixZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsZUFBZTtBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFFQSxZQUFJLHVCQUF1QjtBQUFBLFVBQzFCLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVFBLE9BQU0sVUFBVTtBQUFBLFFBQ3pCO0FBRUEsWUFBSSxTQUFTO0FBQUEsVUFDWjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsYUFBYTtBQUFBLGdCQUNaLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsZ0JBQ1AsUUFBUTtBQUFBLGtCQUNQLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxhQUFhO0FBQUEsZ0JBQ1osU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxnQkFDUCxRQUFRO0FBQUEsa0JBQ1AsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGlCQUFpQjtBQUFBLFlBQ2xCO0FBQUEsVUFDRDtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxpQkFBaUI7QUFBQSxZQUNsQjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsUUFBQUEsT0FBTSxVQUFVLGFBQWEsT0FBTyxZQUFZO0FBQUEsVUFDL0MsVUFBVTtBQUFBLFVBQ1YsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AscUJBQXFCO0FBQUEsZ0JBQ3BCLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBRVosUUFBUTtBQUFBLGtCQUNQLFdBQVc7QUFBQSxrQkFDWCxVQUFVO0FBQUEsa0JBQ1Ysd0JBQXdCO0FBQUEsb0JBQ3ZCO0FBQUEsc0JBQ0MsU0FBUztBQUFBLHNCQUNULE9BQU87QUFBQSxzQkFDUCxRQUFRO0FBQUEsc0JBQ1IsWUFBWTtBQUFBLG9CQUNiO0FBQUEsb0JBQ0E7QUFBQSxzQkFDQyxTQUFTO0FBQUEsc0JBQ1QsT0FBTztBQUFBLHdCQUNOO0FBQUEsd0JBQ0E7QUFBQSxzQkFDRDtBQUFBLHNCQUNBLFFBQVE7QUFBQSxzQkFDUixZQUFZO0FBQUEsc0JBQ1osUUFBUTtBQUFBLHdCQUNQLGVBQWU7QUFBQSxzQkFDaEI7QUFBQSxvQkFDRDtBQUFBLGtCQUNEO0FBQUEsa0JBQ0EsWUFBWTtBQUFBLGtCQUNaLFVBQVU7QUFBQSxrQkFDVixZQUFZO0FBQUEsa0JBQ1osZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0QsQ0FBQztBQUVELFFBQUFBLE9BQU0sTUFBTSxJQUFJLG1CQUFtQixTQUFVLEtBQUs7QUFDakQsY0FBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBRztBQUMxQjtBQUFBLFVBQ0Q7QUFFQSxjQUFJLGFBQWE7QUFDakIsVUFBQUEsT0FBTSxVQUFVLHFCQUFxQixrQkFBa0IsS0FBSyxPQUFPLFVBQVU7QUFBQSxRQUM5RSxDQUFDO0FBRUQsUUFBQUEsT0FBTSxNQUFNLElBQUksa0JBQWtCLFNBQVUsS0FBSztBQUNoRCxVQUFBQSxPQUFNLFVBQVUscUJBQXFCLHFCQUFxQixLQUFLLEtBQUs7QUFBQSxRQUNyRSxDQUFDO0FBQUEsTUFFRixHQUFFLEtBQUs7QUFFUCxPQUFDLFNBQVVBLFFBQU87QUFFakIsWUFBSSxjQUFjQSxPQUFNLFVBQVUsY0FBYztBQUFBLFVBQy9DLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFHVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCO0FBU0EsaUJBQVMsa0JBQWtCLE1BQU0sVUFBVTtBQUMxQyxjQUFJLFlBQVk7QUFFaEIsY0FBSSxVQUFVQSxPQUFNLFVBQVU7QUFDOUIsY0FBSSxDQUFDLFNBQVM7QUFDYjtBQUFBLFVBQ0Q7QUFDQSxjQUFJLFFBQVEsUUFBUTtBQUVwQixjQUFJLENBQUMsT0FBTztBQUVYLGdCQUFJLGFBQWEsQ0FBQztBQUNsQix1QkFBVyxhQUFhO0FBQUEsY0FDdkIsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osT0FBTztBQUFBLFlBQ1I7QUFFQSxzQkFBVUEsT0FBTSxVQUFVLGFBQWEsTUFBTSxXQUFXLFVBQVU7QUFDbEUsb0JBQVEsUUFBUTtBQUFBLFVBQ2pCO0FBRUEsY0FBSSxpQkFBaUIsUUFBUTtBQUM1QixvQkFBUSxRQUFRLGFBQWEsRUFBRSxTQUFTLE1BQU07QUFBQSxVQUMvQztBQUVBLGNBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN6QixxQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDN0Msa0JBQUksTUFBTSxjQUFjLFFBQVE7QUFDL0Isc0JBQU0sS0FBSyxFQUFFLFNBQVMsTUFBTSxHQUFHO0FBQUEsY0FDaEM7QUFDQSx1QkFBUyxNQUFNLEVBQUU7QUFBQSxZQUNsQjtBQUFBLFVBQ0QsT0FBTztBQUNOLHFCQUFTLEtBQUs7QUFBQSxVQUNmO0FBQUEsUUFDRDtBQVFBLGlCQUFTLFdBQVcsV0FBVyxhQUFhO0FBQzNDLGNBQUksT0FBTyxjQUFjLFVBQVU7QUFDbEMsd0JBQVksQ0FBQyxTQUFTO0FBQUEsVUFDdkI7QUFFQSxvQkFBVSxRQUFRLFNBQVUsTUFBTTtBQUNqQyw4QkFBa0IsTUFBTSxTQUFVLFNBQVM7QUFDMUMsa0JBQUksQ0FBQyxRQUFRLFFBQVE7QUFDcEIsd0JBQVEsU0FBUyxDQUFDO0FBQUEsY0FDbkI7QUFDQSxzQkFBUSxPQUFPLE9BQU87QUFBQSxZQUN2QixDQUFDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDRjtBQUVBLGVBQU8sZUFBZSxhQUFhLGNBQWMsRUFBRSxPQUFPLFdBQVcsQ0FBQztBQUV0RSxvQkFBWSxXQUFXLENBQUMsUUFBUSxjQUFjLEtBQUssR0FBRyxXQUFXO0FBQUEsTUFFbEUsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksa0JBQWtCO0FBRXRCLFlBQUksa0JBQWtCLDRCQUE0QjtBQUNsRCxZQUFJSSxhQUFZLDBEQUEwRCxPQUFPLFFBQVEsVUFBVSxXQUFZO0FBQUUsaUJBQU87QUFBQSxRQUFpQixDQUFDO0FBRTFJLFFBQUFKLE9BQU0sVUFBVSxVQUFVQSxPQUFNLFVBQVUsT0FBTyxlQUFlLENBQUMsQ0FBQztBQUNsRSxRQUFBQSxPQUFNLFVBQVUsYUFBYSxXQUFXLFdBQVc7QUFBQSxVQUNsRCxhQUFhO0FBQUEsWUFDWixTQUFTLE9BQU8sZ0VBQWdFLFNBQVMsUUFBUUksYUFBWSxHQUFHO0FBQUEsWUFDaEgsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsWUFBWTtBQUFBLGdCQUNYLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsY0FDYjtBQUFBLGNBQ0EsU0FBUztBQUFBLGdCQUNSLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsY0FDYjtBQUFBLGNBQ0EsYUFBYTtBQUFBLGdCQUNaLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsa0JBQ1AsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGNBQWM7QUFBQSxjQUNkLFdBQVdKLE9BQU0sVUFBVSxLQUFLO0FBQUEsY0FDaEMsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsY0FBYztBQUFBLFlBRWIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsZ0JBQWdCO0FBQUEsWUFDZjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLFFBQVE7QUFBQSxrQkFFUCxTQUFTO0FBQUEsa0JBQ1QsWUFBWTtBQUFBLGtCQUNaLFFBQVFBLE9BQU0sVUFBVTtBQUFBLGtCQUN4QixPQUFPO0FBQUEsZ0JBQ1I7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxRQUFRO0FBQUEsa0JBQ1AsU0FBUztBQUFBLGtCQUNULFlBQVk7QUFBQSxrQkFDWixRQUFRO0FBQUEsb0JBRVAsT0FBT0EsT0FBTSxVQUFVLE9BQU87QUFBQSxvQkFDOUIsVUFBVUEsT0FBTSxVQUFVLE9BQU87QUFBQSxvQkFDakMsUUFBUTtBQUFBLHNCQUVQLFNBQVM7QUFBQSxzQkFDVCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxzQkFDeEIsT0FBTztBQUFBLG9CQUNSO0FBQUEsa0JBQ0Q7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsT0FBT0EsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUM5QixVQUFVQSxPQUFNLFVBQVUsT0FBTztBQUFBLFFBQ2xDLENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsWUFBWSxXQUFXLFFBQVFBLE9BQU0sVUFBVSxPQUFPO0FBQUEsTUFDdkUsR0FBRSxLQUFLO0FBS1AsWUFBTSxVQUFVLGlCQUFpQjtBQUFBLFFBT2hDLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLFdBQVc7QUFBQSxjQUNWLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFHQSxVQUFVO0FBQUEsY0FDVCxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0EsY0FBYztBQUFBLGNBQ2IsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGNBQWM7QUFBQSxnQkFDZCxhQUFhO0FBQUEsZ0JBQ2IsZUFBZTtBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFlBQ0EsV0FBVztBQUFBLGNBQ1YsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQXVCQSxlQUFlO0FBQUEsVUFDZCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsWUFDUCxXQUFXO0FBQUEsY0FDVixTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBR1Q7QUFBQSxnQkFDQyxTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxrQkFDUCxRQUFRO0FBQUEsa0JBQ1IsZUFBZTtBQUFBLGtCQUNmLGVBQWU7QUFBQSxvQkFDZCxTQUFTO0FBQUEsb0JBQ1QsT0FBTztBQUFBLGtCQUNSO0FBQUEsZ0JBQ0Q7QUFBQSxjQUNEO0FBQUEsY0FJQTtBQUFBLGdCQUNDLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osUUFBUTtBQUFBLGtCQUNQLFdBQVc7QUFBQSxnQkFDWjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQSxjQUFjO0FBQUEsWUFDZCxZQUFZO0FBQUEsWUFDWixnQkFBZ0I7QUFBQSxjQUNmLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDVCxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsV0FBVztBQUFBLGtCQUNWLFNBQVM7QUFBQSxrQkFDVCxZQUFZO0FBQUEsa0JBQ1osT0FBTztBQUFBLGdCQUNSO0FBQUEsZ0JBQ0EsZUFBZTtBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFlBQ0EsYUFBYTtBQUFBLGNBQ1osU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUlBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxZQUNmLFVBQVU7QUFBQSxZQUNWLFdBQVc7QUFBQSxVQUNaO0FBQUEsUUFDRDtBQUFBLE1BRUQ7QUFFQSxZQUFNLFVBQVUsT0FBTztBQUFBLFFBQ3RCLFVBQVU7QUFBQSxRQUNWLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxVQUNQLFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsUUFBUSxNQUFNLFVBQVUsT0FBTyxTQUFTO0FBQUEsUUFDdkQsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsUUFDZixXQUFXO0FBQUEsTUFDWixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsU0FBUyxXQUFXO0FBQUEsUUFDaEQsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFlBQ2YsY0FBYztBQUFBLFlBQ2QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsUUFDVjtBQUFBLE1BQ0QsQ0FBQztBQUVELE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLGdCQUFnQiw4QkFBOEI7QUFDbEQsWUFBSSxTQUFTLE9BQU8sMkNBQTJDLE9BQU8sUUFBUSxPQUFPLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQWUsQ0FBQyxDQUFDO0FBQzNILFlBQUksc0JBQXNCO0FBQUEsVUFDekIsaUJBQWlCO0FBQUEsWUFDaEIsU0FBUyxPQUFPLDBCQUEwQixTQUFTLGFBQWE7QUFBQSxZQUNoRSxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsY0FDVDtBQUFBLGNBQ0EsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFFQSxZQUFJLEtBQUtBLE9BQU0sVUFBVSxLQUFLO0FBQUEsVUFDN0IsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFlBQ1gsU0FBUyxPQUFPLE9BQU8sU0FBUyxnQkFBZ0IsTUFBTTtBQUFBLFlBQ3RELFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBRUEsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUVBLFlBQVk7QUFBQSxVQUNaLG9CQUFvQjtBQUFBLFlBQ25CLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsVUFFVixZQUFZO0FBQUEsWUFDWDtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUFBLFVBQ0Esb0JBQW9CO0FBQUEsWUFDbkIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGVBQWU7QUFBQSxVQUNmLE9BQU87QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRDtBQUVBLDRCQUFvQixjQUFjLE9BQU8sUUFBUSxTQUFTO0FBQUEsTUFFM0QsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFFBQUFBLE9BQU0sVUFBVSxhQUFhQSxPQUFNLFVBQVUsT0FBTyxjQUFjO0FBQUEsVUFDakUsY0FBYztBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFdBQVc7QUFBQSxRQUNaLENBQUM7QUFHRCxRQUFBQSxPQUFNLFVBQVUsV0FBVyxRQUFRO0FBQUEsVUFDbEM7QUFBQSxVQUVBO0FBQUEsVUFFQTtBQUFBLFFBQ0Q7QUFHQSxlQUFPQSxPQUFNLFVBQVUsV0FBVztBQUNsQyxlQUFPQSxPQUFNLFVBQVUsV0FBVztBQUdsQyxZQUFJLGFBQWFBLE9BQU0sVUFBVSxPQUFPLGNBQWMsQ0FBQyxDQUFDO0FBQ3hELGVBQU8sV0FBVztBQUVsQixRQUFBQSxPQUFNLFVBQVUsV0FBVyxjQUFjLFNBQVM7QUFFbEQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxZQUFZO0FBQUEsVUFDdEQsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsTUFBTTtBQUFBLGdCQUNMLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsVUFDQSxvQkFBb0I7QUFBQSxZQUVuQixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxZQUFZO0FBQUEsY0FDWixXQUFXO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxnQkFDUCxRQUFRO0FBQUEsY0FDVDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLEtBQUtBLE9BQU0sVUFBVTtBQUFBLE1BRXRDLEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLGFBQWFBLE9BQU0sVUFBVTtBQUVqQyxZQUFJLE9BQU8sMkNBQTJDO0FBQ3RELFlBQUksa0JBQWtCLDZDQUE2QyxPQUFPO0FBRTFFLFFBQUFBLE9BQU0sVUFBVSxRQUFRQSxPQUFNLFVBQVUsT0FBTyxlQUFlO0FBQUEsVUFDN0QsYUFBYTtBQUFBLFlBRVosU0FBUyxPQUFPLGtCQUFrQix1Q0FBdUMsTUFBTTtBQUFBLFlBQy9FLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxRQUNELENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsYUFBYSxTQUFTLFdBQVc7QUFBQSxVQUNoRCxzQkFBc0I7QUFBQSxZQUVyQixTQUFTLE9BQU8sa0JBQWtCLHdEQUF3RCxNQUFNO0FBQUEsWUFDaEcsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsYUFBYTtBQUFBLGdCQUNaLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osUUFBUTtBQUFBLGtCQUNQLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsY0FDQSxRQUFRO0FBQUEsZ0JBQ1AsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsZ0JBQ1IsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiO0FBQUEsY0FDQyxTQUFTLE9BQU8sbUhBQW1ILE9BQU8sUUFBUSxXQUFXLFdBQVk7QUFBRSx1QkFBTztBQUFBLGNBQU0sQ0FBQyxDQUFDO0FBQUEsY0FDMUwsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTLE9BQU8sa0JBQWtCLElBQUk7QUFBQSxjQUN0QyxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsVUFBVSxXQUFXO0FBQUEsZ0JBQ3JCLFVBQVUsV0FBVztBQUFBLGdCQUNyQixXQUFXLFdBQVc7QUFBQSxnQkFDdEIsV0FBV0EsT0FBTSxVQUFVLFdBQVc7QUFBQSxnQkFDdEMsWUFBWTtBQUFBLGdCQUNaLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxRQUFRO0FBQUEsZ0JBQ1AsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsZ0JBQ1IsT0FBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0QsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxZQUFZLFdBQVcsY0FBY0EsT0FBTSxVQUFVLEtBQUs7QUFBQSxNQUUzRSxHQUFFLEtBQUs7QUFFUCxPQUFDLFNBQVVBLFFBQU87QUFFakIsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxxQkFBcUI7QUFBQSxVQUMvRCxtQkFBbUI7QUFBQSxZQUNsQixTQUFTLE9BQU8sY0FBY0EsT0FBTSxVQUFVLFdBQVcscUJBQXFCLFFBQVEsTUFBTTtBQUFBLFlBQzVGLFlBQVk7QUFBQSxZQUNaLE9BQU8sQ0FBQyxxQkFBcUIsVUFBVSxZQUFZLGlCQUFpQjtBQUFBLFVBQ3JFO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxZQUFZO0FBQUEsVUFDdEQsVUFBVTtBQUFBLFlBQ1QsU0FBUyxPQUFPLGNBQWNBLE9BQU0sVUFBVSxXQUFXLFlBQVksTUFBTTtBQUFBLFlBQzNFLFlBQVk7QUFBQSxZQUNaLE9BQU8sQ0FBQyxZQUFZLGlCQUFpQjtBQUFBLFVBQ3RDO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxZQUFZO0FBQUEsVUFDdEQsb0JBQW9CO0FBQUEsWUFDbkI7QUFBQSxjQUdDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBU0QsaUJBQVMsT0FBTyxRQUFRLE9BQU87QUFDOUIsaUJBQU87QUFBQSxZQUNOLE9BQU8sUUFBUSxTQUFTLFdBQVk7QUFBRSxxQkFBTyx5REFBeUQ7QUFBQSxZQUFRLENBQUM7QUFBQSxZQUMvRztBQUFBLFVBQUs7QUFBQSxRQUNQO0FBQ0EsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxXQUFXO0FBQUEsVUFDckQsV0FBVztBQUFBLFlBRVYsU0FBUyxPQUFPLDRHQUE0RyxNQUFNO0FBQUEsWUFDbEksWUFBWTtBQUFBLFlBQ1osUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDekI7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUVWLFNBQVMsT0FBTyxtRUFBbUUsTUFBTTtBQUFBLFlBQ3pGLFlBQVk7QUFBQSxZQUNaLFFBQVFBLE9BQU0sVUFBVTtBQUFBLFVBQ3pCO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLFdBQVcsV0FBVztBQUFBLFVBQ3JDO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTyxDQUFDLFFBQVEsS0FBSztBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBRUEsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxZQUFZO0FBQUEsVUFDdEQsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFNBQVM7QUFBQSxZQUNSLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsY0FBYyxlQUFlO0FBQUEsVUFDekQsbUJBQW1CO0FBQUEsWUFDbEIsU0FBUyxPQUFPLGdCQUFnQixNQUFNO0FBQUEsWUFDdEMsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLG9CQUFvQjtBQUFBLFlBQ25CLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxPQUFPO0FBQUEsWUFFTixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNELENBQUM7QUFJRCxZQUFJLHVCQUF1QixDQUFDLFlBQVkscUJBQXFCLFVBQVUsbUJBQW1CLGlCQUFpQjtBQUUzRyxpQkFBUyxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsUUFBUSxLQUFLO0FBQ3JELGNBQUksUUFBUSxxQkFBcUI7QUFDakMsY0FBSSxRQUFRQSxPQUFNLFVBQVUsV0FBVztBQUd2QyxjQUFJQSxPQUFNLEtBQUssS0FBSyxLQUFLLE1BQU0sVUFBVTtBQUN4QyxvQkFBUUEsT0FBTSxVQUFVLFdBQVcsU0FBUztBQUFBLGNBQzNDLFNBQVM7QUFBQSxZQUNWO0FBQUEsVUFDRDtBQUlBLGNBQUksU0FBUyxNQUFNLFVBQVUsQ0FBQztBQUM5QixnQkFBTSxTQUFTO0FBRWYsaUJBQU8sc0JBQXNCO0FBQUEsUUFDOUI7QUFBQSxNQUVELEdBQUUsS0FBSztBQUdQLFlBQU0sVUFBVSxPQUFPO0FBQUEsUUFDdEIsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFFBQ1osV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBRUEsWUFBTSxVQUFVLGNBQWMsTUFBTSxVQUFVO0FBRTlDLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFNBQVM7QUFFYixRQUFBQSxPQUFNLFVBQVUsUUFBUUEsT0FBTSxVQUFVLE9BQU8sUUFBUTtBQUFBLFVBQ3RELFlBQVk7QUFBQSxZQUNYO0FBQUEsY0FDQyxTQUFTLE9BQU8sT0FBTyxTQUFTLFdBQVc7QUFBQSxjQUMzQyxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxRQUFRLE1BQU0sVUFBVSxPQUFPLFFBQVE7QUFBQSxRQUN0RCxlQUFlO0FBQUEsTUFDaEIsQ0FBQztBQUVELFlBQU0sVUFBVSxhQUFhLFNBQVMsZUFBZTtBQUFBLFFBQ3BELFlBQVk7QUFBQSxNQUNiLENBQUM7QUFFRCxZQUFNLFVBQVUsZUFBZTtBQUFBLFFBQzlCLGlCQUFpQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxlQUFlO0FBQUEsVUFDZCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsWUFDUCxlQUFlO0FBQUEsY0FDZCxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBRUEsWUFBWTtBQUFBLGNBQ1gsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUVBLFlBQVk7QUFBQSxjQUNYLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsWUFFQSxlQUFlO0FBQUEsWUFFZixXQUFXO0FBQUEsWUFFWCxTQUFTO0FBQUEsY0FDUixTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBRUEsZUFBZTtBQUFBLGNBQ2QsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxVQUVEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFFakIsWUFBSSxpQkFBaUJBLE9BQU0sVUFBVSxXQUFXO0FBR2hELFlBQUkseUJBQXlCLGVBQWUsUUFBUTtBQUNwRCxZQUFJLHNCQUFzQixlQUFlLE9BQU87QUFDaEQsWUFBSSxpQ0FBaUMsb0JBQW9CLE9BQU87QUFDaEUsWUFBSSx1QkFBdUIsb0JBQW9CLFFBQVE7QUFjdkQsaUJBQVMsZUFBZSxVQUFVLEtBQUs7QUFDdEMsY0FBSSxDQUFDQSxPQUFNLFVBQVUsV0FBVztBQUMvQixtQkFBTztBQUFBLFVBQ1I7QUFFQSxpQkFBTztBQUFBLFlBQ04sU0FBUyxPQUFPLFNBQVMsTUFBTSxXQUFXLHNCQUFzQjtBQUFBLFlBQ2hFLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLHdCQUF3QjtBQUFBLGdCQUN2QixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGlCQUFpQjtBQUFBLGdCQUNoQixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFHQSxRQUFBQSxPQUFNLFVBQVUsV0FBVyxxQkFBcUI7QUFBQSxVQUsvQyxlQUFlLE9BQU8sMEhBQTBILE1BQU07QUFBQSxVQUl0SixlQUFlLFFBQVEseUNBQXlDLE1BQU07QUFBQSxVQUd0RSxlQUFlLE9BQU8sUUFBUSxNQUFNO0FBQUEsVUFHcEMsZUFBZSxZQUFZLG9CQUFvQixNQUFNO0FBQUEsVUFHckQsZUFBZSxXQUFXLDZDQUE2QyxNQUFNO0FBQUEsVUFHN0UsZUFBZSxPQUFPLFFBQVEsTUFBTTtBQUFBLFVBR3BDO0FBQUEsUUFDRCxFQUFFLE9BQU8sT0FBTztBQVVoQixpQkFBUyxlQUFlLFNBQVMsVUFBVTtBQUMxQyxpQkFBTyxRQUFRLFNBQVMsWUFBWSxJQUFJLE1BQU0sVUFBVTtBQUFBLFFBQ3pEO0FBVUEsaUJBQVMsa0JBQWtCLE1BQU0sU0FBUyxVQUFVO0FBQ25ELGNBQUksTUFBTTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0Q7QUFDQSxVQUFBQSxPQUFNLE1BQU0sSUFBSSxtQkFBbUIsR0FBRztBQUN0QyxjQUFJLFNBQVNBLE9BQU0sU0FBUyxJQUFJLE1BQU0sSUFBSSxPQUFPO0FBQ2pELFVBQUFBLE9BQU0sTUFBTSxJQUFJLGtCQUFrQixHQUFHO0FBQ3JDLGlCQUFPLElBQUk7QUFBQSxRQUNaO0FBUUEsaUJBQVMsZ0NBQWdDLFlBQVk7QUFDcEQsY0FBSSxjQUFjLENBQUM7QUFDbkIsc0JBQVksK0JBQStCO0FBRzNDLGNBQUksU0FBU0EsT0FBTSxTQUFTLFlBQVksV0FBVztBQUNuRCxjQUFJLE9BQU8sV0FBVyxHQUFHO0FBVXhCLGdCQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDaEIsaUJBQUssS0FBSyxNQUFNLE1BQU0sa0JBQWtCLE9BQU8sSUFBSUEsT0FBTSxVQUFVLFlBQVksWUFBWSxDQUFDO0FBRTVGLG1CQUFPLE9BQU8sTUFBTSxRQUFRLElBQUk7QUFBQSxVQUNqQztBQUVBLGlCQUFPLElBQUlBLE9BQU0sTUFBTSxpQkFBaUIsUUFBUSxvQkFBb0IsT0FBTyxVQUFVO0FBQUEsUUFDdEY7QUFtQkEsaUJBQVMsaUJBQWlCLE1BQU0sU0FBUyxVQUFVO0FBS2xELGNBQUksVUFBVUEsT0FBTSxTQUFTLE1BQU07QUFBQSxZQUNsQyxpQkFBaUI7QUFBQSxjQUNoQixTQUFTLE9BQU8sb0JBQW9CO0FBQUEsY0FDcEMsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNELENBQUM7QUFHRCxjQUFJLHFCQUFxQjtBQUV6QixjQUFJLGlCQUFpQixDQUFDO0FBQ3RCLGNBQUksZUFBZSxRQUFRLElBQUksU0FBVSxPQUFPO0FBQy9DLGdCQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzlCLHFCQUFPO0FBQUEsWUFDUixPQUFPO0FBQ04sa0JBQUksMEJBQTBCLE1BQU07QUFFcEMsa0JBQUk7QUFDSixxQkFBTyxLQUFLLFFBQVEsY0FBYyxlQUFlLHNCQUFzQixRQUFRLENBQUMsTUFBTSxJQUFJO0FBQUEsY0FBYTtBQUN2Ryw2QkFBZSxlQUFlO0FBQzlCLHFCQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0QsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUtWLGNBQUksaUJBQWlCLGtCQUFrQixjQUFjLFNBQVMsUUFBUTtBQUt0RSxjQUFJLGVBQWUsT0FBTyxLQUFLLGNBQWM7QUFDN0MsK0JBQXFCO0FBT3JCLG1CQUFTLFdBQVcsUUFBUTtBQUMzQixxQkFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFFBQVEsS0FBSztBQUN2QyxrQkFBSSxzQkFBc0IsYUFBYSxRQUFRO0FBQzlDO0FBQUEsY0FDRDtBQUVBLGtCQUFJLFFBQVEsT0FBTztBQUVuQixrQkFBSSxPQUFPLFVBQVUsWUFBWSxPQUFPLE1BQU0sWUFBWSxVQUFVO0FBQ25FLG9CQUFJLGNBQWMsYUFBYTtBQUMvQixvQkFBSSxJQUFJLE9BQU8sVUFBVSxXQUFXLFFBQStCLE1BQU07QUFFekUsb0JBQUksUUFBUSxFQUFFLFFBQVEsV0FBVztBQUNqQyxvQkFBSSxVQUFVLElBQUk7QUFDakIsb0JBQUU7QUFFRixzQkFBSSxTQUFTLEVBQUUsVUFBVSxHQUFHLEtBQUs7QUFDakMsc0JBQUksU0FBUyxnQ0FBZ0MsZUFBZSxZQUFZO0FBQ3hFLHNCQUFJLFFBQVEsRUFBRSxVQUFVLFFBQVEsWUFBWSxNQUFNO0FBRWxELHNCQUFJLGNBQWMsQ0FBQztBQUNuQixzQkFBSSxRQUFRO0FBQ1gsZ0NBQVksS0FBSyxNQUFNO0FBQUEsa0JBQ3hCO0FBQ0EsOEJBQVksS0FBSyxNQUFNO0FBQ3ZCLHNCQUFJLE9BQU87QUFDVix3QkFBSSxjQUFjLENBQUMsS0FBSztBQUN4QiwrQkFBVyxXQUFXO0FBQ3RCLGdDQUFZLEtBQUssTUFBTSxhQUFhLFdBQVc7QUFBQSxrQkFDaEQ7QUFFQSxzQkFBSSxPQUFPLFVBQVUsVUFBVTtBQUM5QiwyQkFBTyxPQUFPLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sV0FBVyxDQUFDO0FBQ3RELHlCQUFLLFlBQVksU0FBUztBQUFBLGtCQUMzQixPQUFPO0FBQ04sMEJBQU0sVUFBVTtBQUFBLGtCQUNqQjtBQUFBLGdCQUNEO0FBQUEsY0FDRCxPQUFPO0FBQ04sb0JBQUksVUFBVSxNQUFNO0FBQ3BCLG9CQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDM0IsNkJBQVcsT0FBTztBQUFBLGdCQUNuQixPQUFPO0FBQ04sNkJBQVcsQ0FBQyxPQUFPLENBQUM7QUFBQSxnQkFDckI7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFDQSxxQkFBVyxjQUFjO0FBRXpCLGlCQUFPLElBQUlBLE9BQU0sTUFBTSxVQUFVLGdCQUFnQixjQUFjLFVBQVUsSUFBSTtBQUFBLFFBQzlFO0FBT0EsWUFBSSxxQkFBcUI7QUFBQSxVQUN4QixjQUFjO0FBQUEsVUFDZCxNQUFNO0FBQUEsVUFDTixjQUFjO0FBQUEsVUFDZCxNQUFNO0FBQUEsVUFDTixPQUFPO0FBQUEsVUFDUCxPQUFPO0FBQUEsUUFDUjtBQUNBLFFBQUFBLE9BQU0sTUFBTSxJQUFJLGtCQUFrQixTQUFVLEtBQUs7QUFDaEQsY0FBSSxFQUFFLElBQUksWUFBWSxxQkFBcUI7QUFDMUM7QUFBQSxVQUNEO0FBUUEsbUJBQVMsb0JBQW9CLFFBQVE7QUFDcEMscUJBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxRQUFRLElBQUksR0FBRyxLQUFLO0FBQzlDLGtCQUFJLFFBQVEsT0FBTztBQUVuQixrQkFBSSxPQUFPLFVBQVUsVUFBVTtBQUM5QjtBQUFBLGNBQ0Q7QUFFQSxrQkFBSSxVQUFVLE1BQU07QUFDcEIsa0JBQUksQ0FBQyxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQzVCLG9CQUFJLE9BQU8sWUFBWSxVQUFVO0FBQ2hDLHNDQUFvQixDQUFDLE9BQU8sQ0FBQztBQUFBLGdCQUM5QjtBQUNBO0FBQUEsY0FDRDtBQUVBLGtCQUFJLE1BQU0sU0FBUyxtQkFBbUI7QUFnQnJDLG9CQUFJLFdBQVcsUUFBUTtBQUN2QixvQkFBSSxRQUFRLFdBQVcsS0FBSyxPQUFPLGFBQWEsWUFBWSxTQUFTLFNBQVMsaUJBQWlCO0FBRTlGLHNCQUFJLE9BQU8sY0FBYyxRQUFRO0FBRWpDLHNCQUFJLFFBQVEsU0FBUztBQUNyQixzQkFBSSxXQUFXLE1BQU0sUUFBUSxLQUFLLElBQUksTUFBTSxLQUFLO0FBRWpELHNCQUFJLFVBQVVBLE9BQU0sVUFBVTtBQUM5QixzQkFBSSxDQUFDLFNBQVM7QUFFYjtBQUFBLGtCQUNEO0FBRUEsMEJBQVEsS0FBSyxpQkFBaUIsTUFBTSxTQUFTLFFBQVE7QUFBQSxnQkFDdEQ7QUFBQSxjQUNELE9BQU87QUFDTixvQ0FBb0IsT0FBTztBQUFBLGNBQzVCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFFQSw4QkFBb0IsSUFBSSxNQUFNO0FBQUEsUUFDL0IsQ0FBQztBQVNELGlCQUFTLGNBQWMsT0FBTztBQUM3QixjQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzlCLG1CQUFPO0FBQUEsVUFDUixXQUFXLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDaEMsbUJBQU8sTUFBTSxJQUFJLGFBQWEsRUFBRSxLQUFLLEVBQUU7QUFBQSxVQUN4QyxPQUFPO0FBQ04sbUJBQU8sY0FBYyxNQUFNLE9BQU87QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFBQSxNQUVELEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxRQUFRO0FBQUEsUUFDdkIsV0FBVztBQUFBLFVBR1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUVSLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFJVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBRVAsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUdWLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxRQUVmLFlBQVk7QUFBQSxNQUNiO0FBRUEsWUFBTSxVQUFVLGFBQWE7QUFBQSxRQUM1QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUdBLE1BQU07QUFBQSxVQUNMLFNBQVM7QUFBQSxZQUNSLHNoQkFBc2hCLE9BQ3BoQixRQUFRLFdBQVcsV0FBWTtBQUFFLHFCQUFPLDBGQUEwRjtBQUFBLFlBQVEsQ0FBQztBQUFBLFlBQzdJO0FBQUEsVUFDRDtBQUFBLFVBQ0EsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUdBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsNkJBQTZCO0FBQUEsVUFDNUIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUVaLFlBQVk7QUFBQSxRQUVaLFlBQVk7QUFBQSxRQUVaLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFFQSxXQUFXO0FBQUEsUUFFWCxlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsU0FBUztBQUFBLFFBQ3hCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ2QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUdBLGtCQUFrQjtBQUFBLFVBQ2pCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNuQixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsZ0JBQWdCO0FBQUEsVUFDZixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0Esc0JBQXNCO0FBQUEsVUFDckIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLGtCQUFrQjtBQUFBLFVBQ2pCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFHQSxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFDakIsUUFBQUEsT0FBTSxVQUFVLFNBQVNBLE9BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxVQUN4RCxXQUFXO0FBQUEsWUFFVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1g7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsUUFDYixDQUFDO0FBRUQsZUFBT0EsT0FBTSxVQUFVLE9BQU87QUFFOUIsWUFBSSxzQkFBc0I7QUFBQSxVQUN6Qiw2QkFBNkI7QUFBQSxZQUM1QixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsY0FBYztBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDekI7QUFBQSxRQUNEO0FBRUEsUUFBQUEsT0FBTSxVQUFVLGFBQWEsVUFBVSxVQUFVO0FBQUEsVUFFaEQsa0JBQWtCO0FBQUEsWUFDakI7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxpQkFBaUI7QUFBQSxrQkFDaEIsU0FBUztBQUFBLGtCQUNULFFBQVE7QUFBQSxnQkFDVDtBQUFBLGdCQUNBLFVBQVU7QUFBQSxjQUNYO0FBQUEsWUFDRDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxpQkFBaUI7QUFBQSxrQkFDaEIsU0FBUztBQUFBLGtCQUNULFlBQVk7QUFBQSxrQkFDWixRQUFRO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxVQUFVO0FBQUEsY0FDWDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxRQUFRO0FBQUEsWUFFUCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFFBQ0QsQ0FBQztBQUVELGVBQU9BLE9BQU0sVUFBVSxPQUFPO0FBRTlCLFFBQUFBLE9BQU0sVUFBVSxhQUFhLFVBQVUsV0FBVztBQUFBLFVBQ2pELGNBQWM7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsVUFBVSxZQUFZO0FBQUEsVUFDbEQsU0FBUztBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNELENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsS0FBS0EsT0FBTSxVQUFVO0FBQ3JDLFFBQUFBLE9BQU0sVUFBVSxNQUFNQSxPQUFNLFVBQVU7QUFBQSxNQUN2QyxHQUFFLEtBQUs7QUFHUCxPQUFDLFNBQVVBLFFBQU87QUFPakIsWUFBSSxRQUFRLHNEQUFzRDtBQVNsRSxpQkFBUyxPQUFPLFNBQVMsT0FBTztBQUMvQixpQkFBTyxPQUFPLFFBQVEsUUFBUSxZQUFZLEtBQUssR0FBRyxLQUFLO0FBQUEsUUFDeEQ7QUFFQSxRQUFBQSxPQUFNLFVBQVUsUUFBUTtBQUFBLFVBQ3ZCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxVQUNWO0FBQUEsVUFFQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBRUEsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUVBLFdBQVc7QUFBQSxZQUNWLFNBQVMsT0FBTyx5Q0FBeUMsTUFBTTtBQUFBLFlBQy9ELFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFFQSxpQkFBaUI7QUFBQSxZQUNoQixTQUFTLE9BQU8sMkNBQTJDLE1BQU07QUFBQSxZQUNqRSxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsbUJBQW1CO0FBQUEsWUFDbEIsU0FBUyxPQUFPLG1DQUFtQyxNQUFNO0FBQUEsWUFDekQsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFFBQVE7QUFBQSxZQUNQO0FBQUEsY0FDQyxTQUFTLE9BQU8sbUVBQW1FLE1BQU07QUFBQSxjQUN6RixZQUFZO0FBQUEsY0FDWixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVMsT0FBTywwREFBMEQsTUFBTTtBQUFBLGNBQ2hGLFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxZQUNSO0FBQUEsVUFDRDtBQUFBLFVBT0EsV0FBVztBQUFBLFlBQ1YsU0FBUyxPQUFPLHFQQUFxUCxNQUFNO0FBQUEsWUFDM1EsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUdBLFFBQVE7QUFBQSxZQUVQLFNBQVMsT0FBTywyRUFBMkUsTUFBTTtBQUFBLFlBQ2pHLFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFHQSxVQUFVO0FBQUEsWUFDVCxTQUFTLE9BQU8sMkZBQTJGLFFBQVEsR0FBRztBQUFBLFlBQ3RILFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFHQSxlQUFlO0FBQUEsVUFPZixpQkFBaUI7QUFBQSxZQUNoQixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0Q7QUFFQSxRQUFBQSxPQUFNLFVBQVUsTUFBTUEsT0FBTSxVQUFVO0FBQUEsTUFFdkMsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLFFBQVE7QUFBQSxRQUN2QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBRVgsWUFBWTtBQUFBLFFBRVosWUFBWTtBQUFBLFVBQ1g7QUFBQSxZQUVDLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQTtBQUFBLFlBRUMsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFFVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFDakIsWUFBSSxjQUFjO0FBQ2xCLFlBQUksWUFBWTtBQUFBLFVBQ2Ysb0JBQW9CO0FBQUEsWUFDbkIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBRUEsUUFBQUEsT0FBTSxVQUFVLFFBQVE7QUFBQSxVQUN2QixXQUFXO0FBQUEsVUFFWCxTQUFTO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBS0EsWUFBWTtBQUFBLFlBQ1g7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxjQUNSLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGNBQ1IsT0FBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQUEsVUFLQSxXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsT0FBTztBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUtBLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCO0FBRUEsUUFBQUEsT0FBTSxVQUFVLE1BQU1BLE9BQU0sVUFBVTtBQUN0QyxRQUFBQSxPQUFNLFVBQVUsVUFBVUEsT0FBTSxVQUFVO0FBQUEsTUFDM0MsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBQ2pCLFFBQUFBLE9BQU0sVUFBVSxRQUFRO0FBQUEsVUFDdkIsV0FBVztBQUFBLFVBQ1gsYUFBYTtBQUFBLFlBRVosU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxPQUFPO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxVQUN6QjtBQUFBLFFBQ0Q7QUFFQSxZQUFJLGNBQWNBLE9BQU0sVUFBVSxPQUFPLFVBQVUsQ0FBQyxDQUFDO0FBQ3JELFFBQUFBLE9BQU0sVUFBVSxhQUFhLFVBQVUsY0FBYztBQUFBLFVBQ3BELFVBQVU7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGNBQWM7QUFBQSxnQkFDYixTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLGVBQWU7QUFBQSxvQkFDZDtBQUFBLG9CQUNBO0FBQUEsc0JBQ0MsU0FBUztBQUFBLHNCQUNULFlBQVk7QUFBQSxvQkFDYjtBQUFBLGtCQUNEO0FBQUEsa0JBQ0EsT0FBTztBQUFBLG9CQUNOLFNBQVM7QUFBQSxvQkFDVCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxrQkFDekI7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0QsR0FBRyxZQUFZLEdBQUc7QUFFbEIsUUFBQUEsT0FBTSxNQUFNLElBQUksbUJBQW1CLFNBQVUsS0FBSztBQUNqRCxjQUFJLElBQUksYUFBYSxTQUFTO0FBQzdCO0FBQUEsVUFDRDtBQUNBLGNBQUksZUFBZTtBQUNuQixVQUFBQSxPQUFNLFVBQVUscUJBQXFCLGtCQUFrQixLQUFLLFNBQVMsWUFBWTtBQUNqRixjQUFJLFVBQVU7QUFBQSxRQUNmLENBQUM7QUFFRCxRQUFBQSxPQUFNLE1BQU0sSUFBSSxrQkFBa0IsU0FBVSxLQUFLO0FBQ2hELFVBQUFBLE9BQU0sVUFBVSxxQkFBcUIscUJBQXFCLEtBQUssT0FBTztBQUFBLFFBQ3ZFLENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQVVQLFlBQU0sVUFBVSxPQUFPLE1BQU0sVUFBVSxPQUFPLE9BQU87QUFBQSxRQUNwRCxXQUFXO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBRUEsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBRVAsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFFQSxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsTUFDYixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsUUFBUSxZQUFZO0FBQUEsUUFDaEQsWUFBWTtBQUFBLFVBRVg7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUdBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ2QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxNQUNELENBQUM7QUFFRCxPQUFDLFNBQVVBLFFBQU87QUFDakIsUUFBQUEsT0FBTSxVQUFVLFNBQVM7QUFBQSxVQU14QixXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxvQkFBb0I7QUFBQSxZQUVuQjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFFVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQTBCVCxTQUFTLE9BQU8sVUFBVTtBQUFBLGNBQ3pCLGVBQWUsMkRBQTJEO0FBQUEsY0FDMUUsY0FBYyxzQ0FBc0M7QUFBQSxjQUNwRCxtQkFBbUIsdUNBQXVDO0FBQUEsY0FDMUQsaUJBQWlCLDZEQUE2RDtBQUFBLGNBQzlFLGFBQWEsOENBQThDO0FBQUEsY0FFM0QsZUFBZSw0QkFBNEI7QUFBQSxjQUMzQyxjQUFjLHNDQUFzQztBQUFBLGNBQ3BELG1CQUFtQix1Q0FBdUM7QUFBQSxjQUMxRCxpQkFBaUIsNkRBQTZEO0FBQUEsY0FDOUUsYUFBYSxpREFBaUQ7QUFBQSxjQUU5RCxZQUFZLHdEQUF3RDtBQUFBLFlBQ3JFLENBQUMsR0FBRyxHQUFHO0FBQUEsWUFDUCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxjQUFjO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCO0FBUUEsaUJBQVMsVUFBVSxTQUFTO0FBQzNCLG1CQUFTLE9BQU8sU0FBUztBQUN4QixvQkFBUSxPQUFPLFFBQVEsS0FBSyxRQUFRLGNBQWMsU0FBVUssTUFBSztBQUNoRSxxQkFBTyxRQUFRLFFBQVFBLE1BQUssS0FBSyxJQUFJO0FBQUEsWUFDdEMsQ0FBQztBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxRQUFRO0FBQUEsUUFDaEI7QUFBQSxNQUVELEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVUwsUUFBTztBQUVqQixZQUFJLG1CQUFtQixtR0FBbUc7QUFHMUgsWUFBSSxvQkFBb0I7QUFDeEIsaUJBQVMsSUFBSSxHQUFHLElBQUksbUJBQW1CLEtBQUs7QUFDM0MsNkJBQW1CLGlCQUFpQixRQUFRLFdBQVcsV0FBWTtBQUFFLG1CQUFPO0FBQUEsVUFBa0IsQ0FBQztBQUFBLFFBQ2hHO0FBQ0EsMkJBQW1CLGlCQUFpQixRQUFRLFdBQVcsVUFBVSxNQUFNO0FBR3ZFLFlBQUksV0FBV0EsT0FBTSxVQUFVLFdBQVc7QUFBQSxVQUN6QyxXQUFXO0FBQUEsVUFDWCxtQkFBbUI7QUFBQSxZQUNsQixTQUFTLE9BQU8sOERBQThELE9BQU8sUUFBUSxXQUFXLFdBQVk7QUFBRSxxQkFBTztBQUFBLFlBQWtCLENBQUMsR0FBRyxHQUFHO0FBQUEsWUFDdEosWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsVUFBVTtBQUFBLGdCQUNULFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osT0FBTztBQUFBLGdCQUNQLFFBQVE7QUFBQSxrQkFDUCxxQkFBcUI7QUFBQSxvQkFDcEIsU0FBUztBQUFBLG9CQUNULFFBQVE7QUFBQSxvQkFDUixRQUFRO0FBQUEsc0JBQ1AsZUFBZTtBQUFBLHNCQUNmLFlBQVk7QUFBQSx3QkFDWCxTQUFTO0FBQUEsd0JBQ1QsT0FBTztBQUFBLHdCQUNQLFFBQVE7QUFBQSxzQkFDVDtBQUFBLG9CQUNEO0FBQUEsa0JBQ0Q7QUFBQSxrQkFDQSxNQUFNQSxPQUFNLFVBQVU7QUFBQSxnQkFDdkI7QUFBQSxjQUNEO0FBQUEsY0FDQSxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsY0FBYztBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGVBQWU7QUFBQSxZQUNkLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxVQUFVO0FBQUEsUUFDWDtBQUVBLGlCQUFTLG1CQUFtQixPQUFPLFVBQVUsT0FBTyxxQkFBcUIsT0FBTyxZQUFZLFNBQVM7QUFFckcsUUFBQUEsT0FBTSxVQUFVLEtBQUs7QUFBQSxNQUV0QixHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsU0FBUztBQUFBLFFBQ3hCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxVQUNYO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxZQUVDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxRQUNmLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUVBLFlBQU0sTUFBTSxJQUFJLG1CQUFtQixTQUFVLEtBQUs7QUFDakQsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxZQUFZO0FBRWhCLGNBQU0sVUFBVSxxQkFBcUIsa0JBQWtCLEtBQUssVUFBVSxlQUFlLFNBQVUsT0FBTztBQUNyRyxjQUFJLFdBQVcsaUJBQWlCLEtBQUssS0FBSztBQUMxQyxjQUFJLFVBQVU7QUFDYixnQkFBSSxNQUFNLFNBQVM7QUFDbkIsZ0JBQUksUUFBUSxTQUFTLENBQUMsV0FBVztBQUNoQywwQkFBWTtBQUNaLHFCQUFPO0FBQUEsWUFDUixXQUFXLFFBQVEsVUFBVTtBQUM1QiwwQkFBWTtBQUNaLHFCQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0Q7QUFFQSxpQkFBTyxDQUFDO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDRixDQUFDO0FBRUQsWUFBTSxNQUFNLElBQUksa0JBQWtCLFNBQVUsS0FBSztBQUNoRCxjQUFNLFVBQVUscUJBQXFCLHFCQUFxQixLQUFLLFFBQVE7QUFBQSxNQUN4RSxDQUFDO0FBRUQsT0FBQyxTQUFVQSxRQUFPO0FBUWpCLGlCQUFTLFlBQVksTUFBTTtBQUMxQixpQkFBTyxPQUFPLE9BQU8sU0FBUyxRQUFRLE9BQU8sTUFBTSxhQUFhLE1BQU07QUFBQSxRQUN2RTtBQU9BLGlCQUFTLFVBQVUsU0FBUztBQUMzQixpQkFBTyxPQUFPLFdBQVcsU0FBUyxRQUFRLFVBQVUsTUFBTSxZQUFZLE1BQU07QUFBQSxRQUM3RTtBQU1BLFlBQUksU0FBUyw2QkFBNkI7QUFFMUMsWUFBSSxTQUFTLE1BQU07QUFFbkIsWUFBSSxNQUFNO0FBQ1YsWUFBSSxTQUFTO0FBRWIsWUFBSSxRQUFRO0FBQ1osWUFBSSxZQUFZLG9GQUFvRjtBQUVwRyxZQUFJLFdBQVc7QUFBQSxVQUdkLFNBQVM7QUFBQSxZQUNSLFNBQVM7QUFBQSxZQUNULE9BQU8sQ0FBQyxXQUFXLE9BQU87QUFBQSxVQUMzQjtBQUFBLFVBQ0EsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsVUFBVTtBQUFBLGNBQ1YsUUFBUSxPQUFPLE1BQU0sU0FBUyxHQUFHO0FBQUEsWUFDbEM7QUFBQSxVQUNEO0FBQUEsVUFDQSxpQkFBaUI7QUFBQSxZQUNoQixTQUFTLE9BQU8sUUFBUSxNQUFNO0FBQUEsWUFDOUIsT0FBTyxDQUFDLFlBQVksUUFBUTtBQUFBLFVBQzdCO0FBQUEsVUFDQSxpQkFBaUI7QUFBQSxZQUNoQixTQUFTLE9BQU8sTUFBTSxNQUFNO0FBQUEsWUFDNUIsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUNQLFNBQVMsT0FBTyxRQUFRLE1BQU07QUFBQSxZQUM5QixPQUFPLENBQUMsVUFBVSxVQUFVO0FBQUEsVUFDN0I7QUFBQSxVQUNBLFNBQVM7QUFBQSxZQUNSO0FBQUEsY0FDQyxTQUFTO0FBQUEsZ0JBQ1IsTUFDQyxnSkFDQTtBQUFBLGNBQ0Y7QUFBQSxjQUNBLFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGdCQUNSLE1BQU0sMERBQTBEO0FBQUEsY0FDakU7QUFBQSxjQUNBLFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsU0FBUztBQUFBLFlBQ1IsU0FBUyxZQUFZLFVBQVUsTUFBTTtBQUFBLFlBQ3JDLFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxhQUFhO0FBQUEsWUFDWixTQUFTLFlBQVksY0FBYyxNQUFNO0FBQUEsWUFDekMsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFNBQVM7QUFBQSxZQUNSLFNBQVMsVUFBVSxRQUFRLE1BQU07QUFBQSxZQUNqQyxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1AsU0FBUyxVQUFVLHFCQUFxQixNQUFNO0FBQUEsWUFDOUMsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUNQLFNBQVMsT0FBTyxNQUFNLHNDQUFzQyxNQUFNO0FBQUEsWUFDbEUsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsVUFBVSxPQUFPLE1BQU07QUFBQSxZQUN4QjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLE9BQU87QUFBQSxZQUNOLFNBQVMsT0FBTyxNQUFNLG1DQUFtQyxTQUFTLFNBQVMsUUFBUSxTQUFTLFlBQVksS0FBSyxNQUFNO0FBQUEsWUFDbkgsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsU0FBUztBQUFBLGNBR1QsV0FBVztBQUFBLGNBQ1gsVUFBVTtBQUFBLGdCQUNULFNBQVMsT0FBTyxXQUFXLE1BQU07QUFBQSxnQkFDakMsWUFBWTtBQUFBLGNBQ2I7QUFBQSxjQUNBLGFBQWE7QUFBQSxZQUNkO0FBQUEsVUFDRDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1AsU0FBUyxPQUFPLE1BQU0sMkJBQTJCLFNBQVMsY0FBYyxTQUFTLGFBQWE7QUFBQSxZQUM5RixZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxTQUFTO0FBQUEsY0FHVCxXQUFXO0FBQUEsY0FDWCxhQUFhO0FBQUEsWUFDZDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLEtBQUs7QUFBQSxZQUNKLFNBQVMsT0FBTyxNQUFNLE1BQU07QUFBQSxZQUM1QixZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBRVo7QUFBQSxZQUVBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsWUFBSSxNQUFNO0FBQUEsVUFDVCxlQUFlLE9BQU8sTUFBTTtBQUFBLFVBQzVCLFdBQVc7QUFBQSxZQUNWLFNBQVMsT0FBTyxLQUFLLFNBQVMsU0FBUyxZQUFZLFNBQVMsWUFBWSxLQUFLLE1BQU07QUFBQSxZQUNuRixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUyxPQUFPLFlBQVksU0FBUyxNQUFNO0FBQUEsWUFDM0MsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLE1BQU07QUFBQSxRQUNQO0FBRUEsWUFBSSxRQUFRO0FBRVosWUFBSSxVQUFVO0FBQUEsVUFDYixTQUFTLE9BQU8sTUFBTSxZQUFZLE1BQU07QUFBQSxVQUN4QyxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsWUFDUCxhQUFhO0FBQUEsY0FDWixTQUFTLE9BQU8sdUJBQXVCLEtBQUs7QUFBQSxjQUM1QyxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0EscUJBQXFCO0FBQUEsY0FDcEIsU0FBUyxPQUFPLDBCQUEwQixLQUFLO0FBQUEsY0FDL0MsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLE1BQU07QUFBQSxjQUNMLFNBQVMsT0FBTyxhQUFhLFFBQVEsNEJBQTRCO0FBQUEsY0FDakUsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLFVBQVU7QUFBQSxjQUNULFNBQVMsT0FBTyxNQUFNO0FBQUEsY0FDdEIsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLGFBQWE7QUFBQSxVQUNkO0FBQUEsUUFDRDtBQUVBLGlCQUFTLFVBQVUsT0FBTyxZQUFZO0FBQ3RDLGlCQUFTLFNBQVMsT0FBTyxZQUFZQSxPQUFNLEtBQUssTUFBTSxPQUFPO0FBQzdELGlCQUFTLFNBQVMsT0FBTyxVQUFVLE9BQU8sVUFBVTtBQUVwRCxRQUFBQSxPQUFNLFVBQVUsT0FBTztBQUN2QixRQUFBQSxPQUFNLFVBQVUsUUFBUTtBQUN4QixRQUFBQSxPQUFNLFVBQVUsUUFBUTtBQUN4QixRQUFBQSxPQUFNLFVBQVUsZ0JBQWdCO0FBQUEsTUFDakMsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLGFBQWE7QUFBQSxRQUM1QixXQUFXO0FBQUEsVUFDVjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBR3RCLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLFlBQVk7QUFBQSxjQUNYLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQSxpQkFBaUI7QUFBQSxjQUNoQixTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsNkJBQTZCO0FBQUEsa0JBQzVCLFNBQVM7QUFBQSxrQkFDVCxPQUFPO0FBQUEsZ0JBQ1I7QUFBQSxjQUVEO0FBQUEsWUFDRDtBQUFBLFlBQ0EsVUFBVTtBQUFBLFVBQ1g7QUFBQSxRQUNEO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVDtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLGdCQUNWLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsY0FDYjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDbkIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFFWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFVBRVg7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUF3QkE7QUFBQSxRQUNEO0FBQUEsUUFDQSxlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsV0FBVyx1QkFBdUIsT0FBTyxpQkFBaUIsT0FBTyxPQUFPLE1BQU0sVUFBVTtBQUV4RyxPQUFDLFNBQVVBLFFBQU87QUFDakIsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUN0QixXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLGVBQWU7QUFBQSxRQUNoQjtBQUFBLE1BQ0QsR0FBRSxLQUFLO0FBT1AsWUFBTSxVQUFVLE1BQU07QUFBQSxRQUNyQixVQUFVO0FBQUEsVUFFVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsYUFBYTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsT0FBTyxDQUFDLGtCQUFrQix5QkFBeUI7QUFBQSxVQUNuRCxRQUFRLE1BQU0sVUFBVSxxQkFBcUI7QUFBQSxZQUM1QyxXQUFXO0FBQUEsWUFDWCxZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsVUFDaEI7QUFBQSxRQUNEO0FBQUEsUUFFQSxTQUFTO0FBQUEsVUFDUjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTyxDQUFDLFNBQVMsV0FBVztBQUFBLFVBQzdCO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTyxDQUFDLFdBQVcsV0FBVztBQUFBLFVBQy9CO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTyxDQUFDLFFBQVEsU0FBUztBQUFBLFVBQzFCO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTyxDQUFDLFNBQVMsU0FBUztBQUFBLFVBQzNCO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTyxDQUFDLFNBQVMsU0FBUztBQUFBLFVBQzNCO0FBQUEsUUFDRDtBQUFBLFFBRUEsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUVBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxPQUFPO0FBQUEsUUFDUCxTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNkLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsVUFDUixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFlBQ1IsNERBQTRELFNBQzVELE1BQ0EsNEZBQTRGLFNBQzVGLE1BQ0EsdUtBQXVLO0FBQUEsWUFDdks7QUFBQSxVQUNEO0FBQUEsVUFDQSxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFFQSxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsVUFBVTtBQUFBLFFBQ3pCLFdBQVc7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLFVBQVU7QUFBQSxjQUNUO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLFdBQVc7QUFBQSxVQUNaO0FBQUEsUUFDRDtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLFFBQVE7QUFBQSxRQUN2QixVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFHQSxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFFWCxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBRVosVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUVBLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxXQUFXO0FBQUEsUUFDMUIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFFQSxrQkFBa0I7QUFBQSxVQUNqQixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFHWixXQUFXO0FBQUEsUUFFWCxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsT0FBQyxTQUFVQSxRQUFPO0FBR2pCLFlBQUksUUFBUSwyQ0FBMkM7QUFZdkQsaUJBQVMsYUFBYSxTQUFTO0FBQzlCLG9CQUFVLFFBQVEsUUFBUSxZQUFZLFdBQVk7QUFBRSxtQkFBTztBQUFBLFVBQU8sQ0FBQztBQUNuRSxpQkFBTyxPQUFPLDBCQUEwQixTQUFTLFFBQVEsVUFBVSxHQUFHO0FBQUEsUUFDdkU7QUFHQSxZQUFJLFlBQVksNERBQTREO0FBQzVFLFlBQUksV0FBVywrQ0FBK0MsT0FBTyxRQUFRLE9BQU8sV0FBWTtBQUFFLGlCQUFPO0FBQUEsUUFBVyxDQUFDO0FBQ3JILFlBQUksWUFBWSxzRUFBc0U7QUFHdEYsUUFBQUEsT0FBTSxVQUFVLFdBQVdBLE9BQU0sVUFBVSxPQUFPLFVBQVUsQ0FBQyxDQUFDO0FBQzlELFFBQUFBLE9BQU0sVUFBVSxhQUFhLFlBQVksVUFBVTtBQUFBLFVBQ2xELHNCQUFzQjtBQUFBLFlBQ3JCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxjQUNmLGdCQUFnQjtBQUFBLGdCQUNmLFNBQVM7QUFBQSxnQkFDVCxPQUFPLENBQUMsUUFBUSxlQUFlO0FBQUEsZ0JBQy9CLFFBQVFBLE9BQU0sVUFBVTtBQUFBLGNBQ3pCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUViLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxTQUFTO0FBQUEsWUFDUixTQUFTLE9BQU8sTUFBTSxXQUFXLFlBQVksUUFBUSxXQUFXLE1BQU0sR0FBRztBQUFBLFlBQ3pFLFFBQVE7QUFBQSxjQUNQLG1CQUFtQjtBQUFBLGdCQUNsQixTQUFTLE9BQU8sT0FBTyxXQUFXLFlBQVksU0FBUyxXQUFXLEtBQUs7QUFBQSxnQkFDdkUsWUFBWTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxrQkFDUCxjQUFjO0FBQUEsb0JBQ2IsU0FBUyxPQUFPLFNBQVM7QUFBQSxvQkFDekIsUUFBUUEsT0FBTSxVQUFVO0FBQUEsa0JBQ3pCO0FBQUEsa0JBQ0EsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGNBQWM7QUFBQSxnQkFDYixTQUFTLE9BQU8sT0FBTyxXQUFXLE1BQU0sWUFBWSxHQUFHO0FBQUEsZ0JBQ3ZELFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsa0JBQ1AsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLG9CQUFvQjtBQUFBLGdCQUNuQixTQUFTLE9BQU8sTUFBTSxXQUFXLEdBQUc7QUFBQSxnQkFDcEMsUUFBUTtBQUFBLGtCQUNQLGdCQUFnQjtBQUFBLG9CQUNmLFNBQVMsT0FBTyxTQUFTO0FBQUEsb0JBQ3pCLE9BQU87QUFBQSxvQkFDUCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxrQkFDekI7QUFBQSxrQkFDQSxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxRQUFRO0FBQUEsWUFDUDtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsY0FJQyxTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsZ0JBQ1AsY0FBYztBQUFBLGtCQUNiLFNBQVM7QUFBQSxrQkFDVCxZQUFZO0FBQUEsZ0JBQ2I7QUFBQSxnQkFDQSxpQkFBaUI7QUFBQSxrQkFDaEIsU0FBUztBQUFBLGtCQUNULFlBQVk7QUFBQSxnQkFDYjtBQUFBLGdCQUNBLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxTQUFTO0FBQUEsWUFDUjtBQUFBLGNBTUMsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGdCQUNQLGFBQWE7QUFBQSxjQUNkO0FBQUEsWUFDRDtBQUFBLFlBQ0E7QUFBQSxjQUdDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxhQUFhO0FBQUEsY0FDZDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxNQUFNO0FBQUEsWUFLTCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBS1AsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGlCQUFpQjtBQUFBLFlBS2hCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLFlBQVk7QUFBQSxnQkFDWCxTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGNBQ2I7QUFBQSxjQUNBLFVBQVU7QUFBQSxjQUNWLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFlBQ0EsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUtQLFNBQVMsYUFBYSxrR0FBa0csTUFBTTtBQUFBLFlBQzlILFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVEsQ0FBQztBQUFBLGNBQ1Y7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUtULFNBQVMsYUFBYSxrR0FBa0csTUFBTTtBQUFBLFlBQzlILFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVEsQ0FBQztBQUFBLGNBQ1Y7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUlULFNBQVMsYUFBYSwyQkFBMkIsTUFBTTtBQUFBLFlBQ3ZELFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVEsQ0FBQztBQUFBLGNBQ1Y7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBR2YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTyxDQUFDLFFBQVEsU0FBUztBQUFBLFVBQzFCO0FBQUEsVUFDQSxPQUFPO0FBQUEsWUFJTixTQUFTLGFBQWEsbUdBQW1HLE1BQU07QUFBQSxZQUMvSCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxZQUFZO0FBQUEsY0FDWixXQUFXO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRLENBQUM7QUFBQSxjQUNWO0FBQUEsY0FDQSxZQUFZO0FBQUEsZ0JBQ1gsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxPQUFPO0FBQUEsZ0JBQ04sU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxVQUFVO0FBQUEsZ0JBQ1QsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNELENBQUM7QUFFRCxTQUFDLE9BQU8sUUFBUSxVQUFVLFFBQVEsRUFBRSxRQUFRLFNBQVUsT0FBTztBQUM1RCxXQUFDLE9BQU8sUUFBUSxVQUFVLFVBQVUsY0FBYyxFQUFFLFFBQVEsU0FBVSxRQUFRO0FBQzdFLGdCQUFJLFVBQVUsUUFBUTtBQUNyQixjQUFBQSxPQUFNLFVBQVUsU0FBUyxPQUFPLE9BQU8sUUFBUSxPQUFPLFVBQVVBLE9BQU0sVUFBVSxTQUFTO0FBQUEsWUFDMUY7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGLENBQUM7QUFFRCxRQUFBQSxPQUFNLE1BQU0sSUFBSSxrQkFBa0IsU0FBVSxLQUFLO0FBQ2hELGNBQUksSUFBSSxhQUFhLGNBQWMsSUFBSSxhQUFhLE1BQU07QUFDekQ7QUFBQSxVQUNEO0FBRUEsbUJBQVMsV0FBVyxRQUFRO0FBQzNCLGdCQUFJLENBQUMsVUFBVSxPQUFPLFdBQVcsVUFBVTtBQUMxQztBQUFBLFlBQ0Q7QUFFQSxxQkFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDOUMsa0JBQUksUUFBUSxPQUFPO0FBRW5CLGtCQUFJLE1BQU0sU0FBUyxRQUFRO0FBQzFCLDJCQUFXLE1BQU0sT0FBTztBQUN4QjtBQUFBLGNBQ0Q7QUFnQkEsa0JBQUksV0FBVyxNQUFNLFFBQVE7QUFDN0Isa0JBQUksWUFBWSxNQUFNLFFBQVE7QUFFOUIsa0JBQUksWUFBWSxhQUNmLFNBQVMsU0FBUyxtQkFBbUIsVUFBVSxTQUFTLGdCQUN4RCxPQUFPLFNBQVMsWUFBWSxVQUFVO0FBS3RDLG9CQUFJLE9BQU8sU0FBUyxRQUFRLFFBQVEsUUFBUSxPQUFPLEVBQUUsUUFBUSxXQUFXLElBQUk7QUFFNUUsd0JBQVEsZUFBZSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLFlBQVk7QUFDMUQsb0JBQUksUUFBUSxjQUFjO0FBRzFCLG9CQUFJLENBQUMsVUFBVSxPQUFPO0FBQ3JCLDRCQUFVLFFBQVEsQ0FBQyxLQUFLO0FBQUEsZ0JBQ3pCLFdBQVcsT0FBTyxVQUFVLFVBQVUsVUFBVTtBQUMvQyw0QkFBVSxRQUFRLENBQUMsVUFBVSxPQUFPLEtBQUs7QUFBQSxnQkFDMUMsT0FBTztBQUNOLDRCQUFVLE1BQU0sS0FBSyxLQUFLO0FBQUEsZ0JBQzNCO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBRUEscUJBQVcsSUFBSSxNQUFNO0FBQUEsUUFDdEIsQ0FBQztBQUVELFFBQUFBLE9BQU0sTUFBTSxJQUFJLFFBQVEsU0FBVSxLQUFLO0FBQ3RDLGNBQUksSUFBSSxTQUFTLGNBQWM7QUFDOUI7QUFBQSxVQUNEO0FBRUEsY0FBSSxXQUFXO0FBQ2YsbUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDbkQsZ0JBQUksTUFBTSxJQUFJLFFBQVE7QUFDdEIsZ0JBQUksUUFBUSxnQkFBZ0IsS0FBSyxHQUFHO0FBQ3BDLGdCQUFJLE9BQU87QUFDVix5QkFBVyxNQUFNO0FBQ2pCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFFQSxjQUFJLFVBQVVBLE9BQU0sVUFBVTtBQUU5QixjQUFJLENBQUMsU0FBUztBQUNiLGdCQUFJLFlBQVksYUFBYSxVQUFVQSxPQUFNLFFBQVEsWUFBWTtBQUNoRSxrQkFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLE1BQU0sS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLElBQUk7QUFDN0Usa0JBQUksV0FBVyxRQUFRO0FBRXZCLGNBQUFBLE9BQU0sUUFBUSxXQUFXLGNBQWMsVUFBVSxXQUFZO0FBQzVELG9CQUFJLE1BQU0sU0FBUyxlQUFlLEVBQUU7QUFDcEMsb0JBQUksS0FBSztBQUNSLHNCQUFJLFlBQVlBLE9BQU0sVUFBVSxJQUFJLGFBQWFBLE9BQU0sVUFBVSxXQUFXLFFBQVE7QUFBQSxnQkFDckY7QUFBQSxjQUNELENBQUM7QUFBQSxZQUNGO0FBQUEsVUFDRCxPQUFPO0FBQ04sZ0JBQUksVUFBVUEsT0FBTSxVQUFVLFlBQVksSUFBSSxPQUFPLEdBQUcsU0FBUyxRQUFRO0FBQUEsVUFDMUU7QUFBQSxRQUNELENBQUM7QUFFRCxZQUFJLGFBQWEsT0FBT0EsT0FBTSxVQUFVLE9BQU8sSUFBSSxRQUFRLFFBQVEsSUFBSTtBQVN2RSxZQUFJLHFCQUFxQjtBQUFBLFVBQ3hCLE9BQU87QUFBQSxVQUNQLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxRQUNUO0FBR0EsWUFBSSxnQkFBZ0IsT0FBTyxpQkFBaUIsT0FBTztBQVFuRCxpQkFBUyxZQUFZLE1BQU07QUFFMUIsY0FBSSxPQUFPLEtBQUssUUFBUSxZQUFZLEVBQUU7QUFHdEMsaUJBQU8sS0FBSyxRQUFRLGlDQUFpQyxTQUFVLEdBQUcsTUFBTTtBQUN2RSxtQkFBTyxLQUFLLFlBQVk7QUFFeEIsZ0JBQUksS0FBSyxPQUFPLEtBQUs7QUFDcEIsa0JBQUk7QUFDSixrQkFBSSxLQUFLLE9BQU8sS0FBSztBQUNwQix3QkFBUSxTQUFTLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUFBLGNBQ25DLE9BQU87QUFDTix3QkFBUSxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxjQUM3QjtBQUVBLHFCQUFPLGNBQWMsS0FBSztBQUFBLFlBQzNCLE9BQU87QUFDTixrQkFBSSxRQUFRLG1CQUFtQjtBQUMvQixrQkFBSSxPQUFPO0FBQ1YsdUJBQU87QUFBQSxjQUNSO0FBR0EscUJBQU87QUFBQSxZQUNSO0FBQUEsVUFDRCxDQUFDO0FBRUQsaUJBQU87QUFBQSxRQUNSO0FBRUEsUUFBQUEsT0FBTSxVQUFVLEtBQUtBLE9BQU0sVUFBVTtBQUFBLE1BRXRDLEdBQUUsS0FBSztBQUlQLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFVBQVUsMkNBQTJDO0FBQ3pELFlBQUksT0FBTyw4SEFBOEgsT0FDdkksUUFBUSxVQUFVLE9BQU87QUFFM0IsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUN0QixXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUVBLGNBQWM7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxRQUFRO0FBQUEsWUFDUCxTQUFTLE9BQU8sSUFBSTtBQUFBLFlBQ3BCLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxZQUNaO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFVBRVosVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSxZQUFZO0FBQUEsVUFFWixZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFBQSxNQUVELEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxTQUFTO0FBQUEsUUFDeEIsV0FBVztBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFVBQVU7QUFBQSxRQUNWLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFdBQVc7QUFHZixRQUFBQSxPQUFNLFVBQVUsWUFBWTtBQUFBLFVBQzNCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLGlCQUFpQjtBQUFBLFlBQ2hCLFNBQVM7QUFBQSxjQUNSLFVBRUMsSUFBSSxTQUNKLE1BRUEsbUJBQW1CLFNBQ25CLE1BRUEsNkZBQTZGLFVBQzFGLGVBRUksU0FBUyxTQUFTLE1BQU0sY0FBYyxTQUU5QyxpQkFFQyxRQUFRLFNBQVMsU0FBUyxNQUFNLFNBQVMsU0FDekMsTUFFQSxZQUFZLFNBQ1osTUFFQSxhQUFhLFVBQ1Y7QUFBQSxjQUNKO0FBQUEsWUFDRDtBQUFBLFlBQ0EsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLHVCQUF1QjtBQUFBLFlBQ3RCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsV0FBVztBQUFBLFVBQ1gsV0FBVztBQUFBLFVBRVgsUUFBUTtBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUNUO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQUEsVUFFQSxZQUFZO0FBQUEsVUFDWixTQUFTO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFFRCxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsTUFBTTtBQUFBLFFBQ3JCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsWUFDUCxhQUFhO0FBQUEsY0FDWixTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsYUFBYTtBQUFBLGNBQ1osU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsc0JBQXNCO0FBQUEsVUFDckIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxJQUFJLFFBQVEsT0FBTyxhQUFhLFNBQVMsTUFBTSxVQUFVO0FBRXpFLFlBQU0sVUFBVSxVQUFVO0FBQUEsUUFDekIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUVBLHFCQUFxQjtBQUFBLFVBQ3BCLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLFNBQVM7QUFBQSxjQUNSLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsY0FBYztBQUFBLGNBQ2IsU0FBUztBQUFBLGNBQ1QsT0FBTyxDQUFDLFNBQVMsVUFBVTtBQUFBLFlBQzVCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUVBLFNBQVM7QUFBQSxVQU1SO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxZQUdDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQTtBQUFBLFlBRUMsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0Q7QUFBQSxRQUVBLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLGNBQWM7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxXQUFXO0FBQUEsVUFFVjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFFBQ0Q7QUFBQSxRQUVBLFVBQVU7QUFBQSxRQUVWLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsUUFBUTtBQUFBLFFBQ3ZCLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNYLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFFakIsWUFBSSxZQUFZO0FBQUEsVUFFZjtBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFDbkY7QUFBQSxVQUFXO0FBQUEsVUFBUztBQUFBLFVBQVM7QUFBQSxVQUFlO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFTO0FBQUEsVUFBVTtBQUFBLFVBQ2pGO0FBQUEsVUFBYztBQUFBLFVBQVM7QUFBQSxVQUFlO0FBQUEsVUFBUTtBQUFBLFVBQWM7QUFBQSxVQUFTO0FBQUEsVUFBaUI7QUFBQSxVQUN0RjtBQUFBLFVBQWlCO0FBQUEsVUFBZTtBQUFBLFVBQVk7QUFBQSxVQUFjO0FBQUEsVUFBUztBQUFBLFVBR25FO0FBQUEsVUFBZ0I7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQVE7QUFBQSxVQUFnQjtBQUFBLFVBQ25GO0FBQUEsVUFBYTtBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBUztBQUFBLFVBQVk7QUFBQSxVQUFTO0FBQUEsVUFBYTtBQUFBLFVBQVU7QUFBQSxVQUFTO0FBQUEsVUFHNUY7QUFBQSxVQUFjO0FBQUEsVUFBVztBQUFBLFVBQWU7QUFBQSxVQUFjO0FBQUEsVUFBVTtBQUFBLFVBQWM7QUFBQSxVQUFVO0FBQUEsVUFDeEY7QUFBQSxVQUFnQjtBQUFBLFVBQVU7QUFBQSxVQUFlO0FBQUEsVUFBVTtBQUFBLFVBQXNCO0FBQUEsVUFBaUI7QUFBQSxVQUMxRjtBQUFBLFVBQVU7QUFBQSxVQUFVO0FBQUEsVUFBUTtBQUFBLFVBQW1CO0FBQUEsVUFBWTtBQUFBLFVBQVc7QUFBQSxVQUFnQjtBQUFBLFVBQ3RGO0FBQUEsVUFBVztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBUztBQUFBLFVBQWdCO0FBQUEsVUFBYztBQUFBLFVBQVU7QUFBQSxVQUFXO0FBQUEsVUFHeEY7QUFBQSxVQUFRO0FBQUEsVUFBZ0I7QUFBQSxVQUFTO0FBQUEsVUFBVTtBQUFBLFVBQVE7QUFBQSxVQUFhO0FBQUEsVUFBb0I7QUFBQSxVQUNwRjtBQUFBLFVBQW1CO0FBQUEsVUFBZ0I7QUFBQSxVQUFrQjtBQUFBLFVBQVM7QUFBQSxVQUFVO0FBQUEsVUFBUztBQUFBLFVBQ2pGO0FBQUEsVUFBVTtBQUFBLFVBQVE7QUFBQSxVQUFlO0FBQUEsVUFBYTtBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQWlCO0FBQUEsVUFDM0Y7QUFBQSxVQUFZO0FBQUEsVUFBUTtBQUFBLFVBQWtCO0FBQUEsVUFBZ0I7QUFBQSxVQUFtQjtBQUFBLFVBQWlCO0FBQUEsVUFDMUY7QUFBQSxVQUFjO0FBQUEsVUFBYztBQUFBLFVBQXFCO0FBQUEsVUFBVztBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQ3RGO0FBQUEsVUFBVTtBQUFBLFVBQWE7QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFXO0FBQUEsVUFBTztBQUFBLFVBQWlCO0FBQUEsVUFDbEY7QUFBQSxVQUFjO0FBQUEsVUFBWTtBQUFBLFVBQWE7QUFBQSxVQUFpQjtBQUFBLFVBQVk7QUFBQSxVQUFnQjtBQUFBLFVBQ3BGO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFZO0FBQUEsVUFBTztBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBTztBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBUTtBQUFBLFVBQ3ZGO0FBQUEsVUFBaUI7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQWdCO0FBQUEsVUFBVztBQUFBLFVBQVE7QUFBQSxVQUFVO0FBQUEsVUFBYTtBQUFBLFVBQzVGO0FBQUEsVUFBUTtBQUFBLFVBQWtCO0FBQUEsVUFBTztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBcUI7QUFBQSxVQUFVO0FBQUEsVUFDakY7QUFBQSxVQUFjO0FBQUEsVUFBaUI7QUFBQSxVQUFlO0FBQUEsVUFBZTtBQUFBLFVBQWU7QUFBQSxVQUFpQjtBQUFBLFVBQzdGO0FBQUEsVUFBVTtBQUFBLFVBQVc7QUFBQSxVQUFrQjtBQUFBLFVBQWM7QUFBQSxVQUFvQjtBQUFBLFVBQWdCO0FBQUEsVUFDekY7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFVO0FBQUEsVUFBUztBQUFBLFVBQWM7QUFBQSxVQUFlO0FBQUEsVUFBZTtBQUFBLFVBQzFGO0FBQUEsVUFBYTtBQUFBLFVBQVc7QUFBQSxVQUFnQjtBQUFBLFVBQWE7QUFBQSxVQUFhO0FBQUEsVUFBUTtBQUFBLFVBQVc7QUFBQSxVQUNyRjtBQUFBLFVBQVc7QUFBQSxVQUFXO0FBQUEsVUFBYztBQUFBLFVBQWE7QUFBQSxVQUFVO0FBQUEsVUFBVztBQUFBLFVBQWU7QUFBQSxVQUNyRjtBQUFBLFVBQVk7QUFBQSxVQUFZO0FBQUEsVUFBUztBQUFBLFVBQVU7QUFBQSxVQUFTO0FBQUEsVUFBUztBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBVTtBQUFBLFVBQ3hGO0FBQUEsVUFBYTtBQUFBLFVBQWlCO0FBQUEsVUFBYztBQUFBLFVBQWE7QUFBQSxVQUFTO0FBQUEsVUFBZTtBQUFBLFVBQWE7QUFBQSxVQUc5RjtBQUFBLFVBQVk7QUFBQSxVQUFZO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFjO0FBQUEsVUFBUTtBQUFBLFVBQVk7QUFBQSxVQUMzRTtBQUFBLFVBQWM7QUFBQSxVQUFnQjtBQUFBLFFBQy9CO0FBRUEsWUFBSSxtQkFBbUI7QUFBQSxVQUN0QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUVBLG9CQUFZLFVBQVUsSUFBSSxTQUFVLFVBQVU7QUFDN0MsaUJBQU8sU0FBUyxRQUFRLEtBQUssS0FBSztBQUFBLFFBQ25DLENBQUM7QUFFRCxZQUFJLGtCQUFrQixRQUFRLFVBQVUsS0FBSyxHQUFHLElBQUk7QUFFcEQsUUFBQUEsT0FBTSxVQUFVLFVBQVVBLE9BQU0sVUFBVSxPQUFPLGNBQWMsQ0FBQyxDQUFDO0FBRWpFLFFBQUFBLE9BQU0sVUFBVSxhQUFhLFdBQVcsVUFBVTtBQUFBLFVBQ2pELFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLFdBQVcsT0FBTyxhQUFjLGtCQUFrQixXQUFXO0FBQUEsWUFDOUQ7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLFFBQVEsT0FBTyxTQUFTO0FBQUEsVUFDdkMsS0FBSztBQUFBLFlBRUosU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUVQLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxhQUFhLFdBQVcsWUFBWTtBQUFBLFVBQ25ELFdBQVc7QUFBQSxZQUNWLFNBQVMsT0FBTyxXQUFXLGlCQUFpQixLQUFLLEdBQUcsSUFBSSxNQUFNO0FBQUEsWUFDOUQsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNELENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxTQUFTO0FBQUEsUUFDeEIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNmLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxZQUFZO0FBQUEsUUFDWixhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxhQUFhO0FBQUEsUUFDNUIsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFVBQ1Q7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsaUJBQWlCO0FBQUEsZ0JBQ2hCLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsa0JBQ1AsY0FBYztBQUFBLG9CQUNiLFNBQVM7QUFBQSxvQkFDVCxZQUFZO0FBQUEsb0JBQ1osUUFBUTtBQUFBLGtCQUNUO0FBQUEsa0JBQ0EsNkJBQTZCO0FBQUEsb0JBQzVCLFNBQVM7QUFBQSxvQkFDVCxPQUFPO0FBQUEsa0JBQ1I7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNiO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBRUE7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLFdBQVcsT0FBTyxHQUFHLE9BQU8sY0FBYyxPQUFPLFdBQVcsU0FBUyxNQUFNLFVBQVU7QUFFckcsWUFBTSxVQUFVLE9BQU8sTUFBTSxVQUFVO0FBSXZDLFlBQU0sVUFBVSxPQUFPO0FBQUEsUUFDdEIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDYixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBRWIsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFFBQ1osV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLE9BQU8sTUFBTSxVQUFVLE9BQU8sY0FBYztBQUFBLFFBRTNELFdBQVc7QUFBQSxNQUNaLENBQUM7QUFFRCxZQUFNLFVBQVUsYUFBYSxRQUFRLFlBQVk7QUFBQSxRQUVoRCxjQUFjO0FBQUEsVUFDYixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0QsQ0FBQztBQUVELFlBQU0sVUFBVSxRQUFRLE1BQU0sVUFBVTtBQUV4QyxZQUFNLFVBQVUscUJBQXFCO0FBQUEsUUFDcEMsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksZ0JBQWdCO0FBRXBCLFlBQUksU0FBUztBQUFBLFVBQ1osaUJBQWlCO0FBQUEsWUFDaEIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLG9CQUFvQjtBQUFBLFlBQ25CLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSx1QkFBdUI7QUFBQSxZQUN0QjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsY0FDUixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFFQSxRQUFBQSxPQUFNLFVBQVUsYUFBYTtBQUFBLFVBRTVCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFHQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxTQUFTO0FBQUEsZ0JBQ1IsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsT0FBTztBQUFBLGdCQUNOLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsY0FDYjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFFQSxTQUFTO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1AsZ0JBQWdCO0FBQUEsY0FDaEIsY0FBYztBQUFBLGdCQUNiLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsZ0JBQ1IsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGtCQUFrQjtBQUFBLGdCQUNqQixTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGNBQ1Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBRUEsZ0JBQWdCO0FBQUEsWUFDZixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FFUCxnQkFBZ0I7QUFBQSxjQUNoQixjQUFjO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGdCQUNULFFBQVE7QUFBQSxnQkFDUixPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0Esa0JBQWtCO0FBQUEsZ0JBQ2pCLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsZ0JBQ1IsT0FBTztBQUFBLGdCQUNQLFFBQVE7QUFBQSxrQkFDUCxrQkFBa0I7QUFBQSxvQkFDakIsU0FBUztBQUFBLG9CQUNULFlBQVk7QUFBQSxvQkFDWixRQUFRO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxzQkFBc0I7QUFBQSxvQkFDckIsU0FBUztBQUFBLG9CQUNULFlBQVk7QUFBQSxvQkFDWixPQUFPO0FBQUEsa0JBQ1I7QUFBQSxrQkFDQSxtQkFBbUI7QUFBQSxnQkFDcEI7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQ0EsUUFBQUEsT0FBTSxVQUFVLE9BQU9BLE9BQU0sVUFBVTtBQVF2QyxRQUFBQSxPQUFNLE1BQU0sSUFBSSxrQkFBa0IsU0FBVSxLQUFLO0FBRWhELGNBQUksU0FBUyxJQUFJO0FBQ2pCLGlCQUFPLFFBQVEsU0FBVSxPQUFPO0FBQy9CLGdCQUFJLE9BQU8sVUFBVSxZQUFZLE1BQU0sU0FBUyxnQkFBZ0I7QUFDL0Qsa0JBQUksVUFBVSxlQUFlLEtBQUs7QUFDbEMsa0JBQUksQ0FBQyxtQkFBbUIsT0FBTyxHQUFHO0FBQ2pDLHNCQUFNLE9BQU87QUFDYixzQkFBTSxVQUFVO0FBQUEsY0FDakI7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRixDQUFDO0FBTUQsaUJBQVMsbUJBQW1CLE9BQU87QUFDbEMsY0FBSSxXQUFXO0FBQ2YsY0FBSSxRQUFRLENBQUM7QUFDYixtQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUN0QyxnQkFBSSxVQUFVLE1BQU07QUFDcEIsZ0JBQUksZ0JBQWdCLFNBQVMsUUFBUSxPQUFPO0FBQzVDLGdCQUFJLGtCQUFrQixJQUFJO0FBQ3pCLGtCQUFJLGdCQUFnQixNQUFNLEdBQUc7QUFDNUIsc0JBQU0sS0FBSyxnQkFBZ0IsQ0FBQztBQUFBLGNBQzdCLFdBQVcsTUFBTSxJQUFJLE1BQU0sZUFBZTtBQUN6Qyx1QkFBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUNBLGlCQUFPLE1BQU0sV0FBVztBQUFBLFFBQ3pCO0FBTUEsaUJBQVMsZUFBZSxPQUFPO0FBQzlCLGNBQUksT0FBTyxVQUFVLFVBQVU7QUFDOUIsbUJBQU87QUFBQSxVQUNSLFdBQVcsTUFBTSxRQUFRLEtBQUssR0FBRztBQUNoQyxtQkFBTyxNQUFNLElBQUksY0FBYyxFQUFFLEtBQUssRUFBRTtBQUFBLFVBQ3pDLE9BQU87QUFDTixtQkFBTyxlQUFlLE1BQU0sT0FBTztBQUFBLFVBQ3BDO0FBQUEsUUFDRDtBQUFBLE1BRUQsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLE9BQU87QUFBQSxRQUN0QixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxNQUNiO0FBRUEsWUFBTSxVQUFVLE9BQU87QUFBQSxRQUN0QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNOLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxRQUFRO0FBQUEsUUFDdkIsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFlBQ1AsZ0JBQWdCO0FBQUEsVUFDakI7QUFBQSxRQUNEO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsZ0JBQWdCO0FBQUEsY0FDZixTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBQ1QsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLGNBQWM7QUFBQSxrQkFDYixTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGdCQUNSO0FBQUEsZ0JBQ0EsZUFBZTtBQUFBLGdCQUNmLFlBQVk7QUFBQSxrQkFDWCxTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGdCQUNSO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLG9CQUFvQjtBQUFBLFVBQ25CLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLHlCQUF5QjtBQUFBLGNBQ3hCLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxjQUFjO0FBQUEsY0FDYixTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EseUJBQXlCO0FBQUEsY0FDeEIsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWDtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2hCO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxjQUFjO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxjQUNSO0FBQUEsY0FDQSxTQUFTO0FBQUEsWUFDVjtBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxjQUFjO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxjQUNSO0FBQUEsY0FDQSxTQUFTO0FBQUEsWUFDVjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxlQUFlO0FBQUEsUUFDZixRQUFRO0FBQUEsTUFDVDtBQUVBLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFdBQVc7QUFFZixRQUFBQSxPQUFNLFVBQVUsUUFBUTtBQUFBLFVBQ3ZCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxVQUFVO0FBQUEsZ0JBQ1QsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsZ0JBQ1IsUUFBUTtBQUFBLGtCQUNQLFVBQVU7QUFBQSxvQkFDVCxTQUFTO0FBQUEsb0JBQ1QsT0FBTztBQUFBLGtCQUNSO0FBQUEsa0JBQ0EsWUFBWTtBQUFBLGdCQUNiO0FBQUEsY0FDRDtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osUUFBUTtBQUFBLGNBQ1Q7QUFBQSxjQUNBLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGNBQ1Q7QUFBQSxjQUlBLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGNBQ2I7QUFBQSxjQUNBLFVBQVU7QUFBQSxnQkFDVCxTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGNBQ2I7QUFBQSxjQUNBLFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFFRCxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsTUFBTTtBQUFBLFFBQ3JCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFFVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBRVAsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLFFBRUEsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBR0EsVUFBVTtBQUFBLFFBQ1YsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFVBSVgsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxNQUFNO0FBQUEsUUFDckIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLGlCQUFpQjtBQUFBLGNBRWhCLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNOO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFFBQ1osV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLElBQUksT0FBTyxPQUFPLGNBQWMsU0FBUyxNQUFNLFVBQVU7QUFPekUsWUFBTSxVQUFVLE9BQU87QUFBQSxRQUN0QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsUUFDZixhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLE1BQ0Q7QUFFQSxZQUFNLFVBQVUsYUFBYSxNQUFNLFVBQVUsT0FBTyxLQUFLO0FBQUEsUUFDeEQsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxNQUNiLENBQUM7QUFFRCxhQUFPLE1BQU0sVUFBVSxXQUFXO0FBRWxDLFlBQU0sVUFBVSxPQUFPLE1BQU0sVUFBVTtBQUl2QyxZQUFNLFVBQVUsUUFBUTtBQUFBLFFBQ3ZCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1Q7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFFVDtBQUFBLFVBRUE7QUFBQSxVQUVBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUdBLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUVYLDZCQUE2QjtBQUFBLFVBQzVCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFDakIsWUFBSSxVQUFVO0FBRWQsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQU90QixXQUFXO0FBQUEsWUFDVjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFVBS0EsUUFBUTtBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsVUFFQSxVQUFVO0FBQUEsWUFDVDtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsZ0JBQ1AsVUFBVTtBQUFBLGNBQ1g7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBRUEsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFVBQVU7QUFBQSxVQUVWLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSx3QkFBd0I7QUFBQSxZQUN2QixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsV0FBVztBQUFBLFVBS1gsa0JBQWtCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFdBQVc7QUFBQSxVQUVYLDJCQUEyQjtBQUFBLFlBQzFCLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSxhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsU0FBUztBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFlBQVk7QUFBQSxVQUVaLGVBQWU7QUFBQSxRQUNoQjtBQUFBLE1BQ0QsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFFBQUFBLE9BQU0sVUFBVSxTQUFTQSxPQUFNLFVBQVUsT0FBTyxLQUFLO0FBQUEsVUFFcEQsV0FBVztBQUFBLFVBSVgsVUFBVTtBQUFBLFVBQ1YsV0FBVztBQUFBLFVBQ1gsMEJBQTBCO0FBQUEsWUFDekIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNELENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsYUFBYSxVQUFVLGNBQWM7QUFBQSxVQUdwRCxnQkFBZ0I7QUFBQSxZQUNmLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxDQUFDO0FBRUQsWUFBSSxhQUFhO0FBQUEsVUFFaEIsb0JBQW9CO0FBQUEsWUFDbkIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLHVCQUF1QjtBQUFBLFlBQ3RCLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSx3QkFBd0I7QUFBQSxZQUN2QixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsd0JBQXdCO0FBQUEsWUFDdkIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBR0EsUUFBQUEsT0FBTSxVQUFVLGFBQWEsS0FBSyxXQUFXLFVBQVU7QUFHdkQsWUFBSUEsT0FBTSxVQUFVLEtBQUs7QUFFeEIscUJBQVcsMEJBQTBCO0FBQUEsWUFDcEMsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFFQSxVQUFBQSxPQUFNLFVBQVUsYUFBYSxPQUFPLFdBQVcsVUFBVTtBQUFBLFFBQzFEO0FBQUEsTUFDRCxHQUFFLEtBQUs7QUFJUCxZQUFNLFVBQVUsV0FBVztBQUFBLFFBQzFCLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFFQSxXQUFXO0FBQUEsUUFDWCxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsUUFFWixZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLE9BQU8sTUFBTSxVQUFVO0FBRXZDLFlBQU0sVUFBVSxLQUFLO0FBQUEsUUFDcEIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFVBQ1g7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxRQUNaLGFBQWE7QUFBQSxRQUNiLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxTQUFTO0FBQUEsUUFDeEIsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUlBLFdBQVksV0FBWTtBQUN2QixjQUFJLFdBQVc7QUFBQSxZQUNkO0FBQUEsWUFBYztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBVztBQUFBLFlBQVU7QUFBQSxZQUN4RDtBQUFBLFlBQWdCO0FBQUEsWUFBVTtBQUFBLFlBQVU7QUFBQSxZQUFXO0FBQUEsWUFDL0M7QUFBQSxZQUFXO0FBQUEsWUFBZTtBQUFBLFlBQVU7QUFBQSxZQUFPO0FBQUEsWUFBUztBQUFBLFlBQ3BEO0FBQUEsWUFBUztBQUFBLFlBQU07QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQVM7QUFBQSxVQUMzQztBQUNBLHFCQUFXLFNBQVMsSUFBSSxTQUFVLFNBQVM7QUFDMUMsbUJBQU8sUUFBUSxNQUFNLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFBQSxVQUNuQyxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ1gsaUJBQU8sT0FBTyxXQUFXLFdBQVcsTUFBTTtBQUFBLFFBQzNDLEVBQUU7QUFBQSxRQUNGLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxVQUVULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFFakIsWUFBSSxTQUFTQSxPQUFNLFVBQVUsU0FBU0EsT0FBTSxVQUFVLE9BQU8sVUFBVTtBQUFBLFVBQ3RFLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCLENBQUM7QUFFRCxpQkFBU0EsT0FBTSxVQUFVLGFBQWEsVUFBVSxXQUFXO0FBQUEsVUFDMUQsa0JBQWtCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUViLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLFVBQVU7QUFBQSxnQkFDVCxTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGNBQ2I7QUFBQSxjQUNBLFdBQVcsT0FBTztBQUFBLGNBQ2xCLFlBQVksT0FBTztBQUFBLGNBQ25CLFlBQVksT0FBTztBQUFBLGNBQ25CLFdBQVc7QUFBQSxjQUNYLFVBQVU7QUFBQSxjQUNWLFVBQVUsT0FBTztBQUFBLGNBQ2pCLFlBQVk7QUFBQSxjQUNaLGVBQWUsT0FBTztBQUFBLFlBQ3ZCO0FBQUEsVUFDRDtBQUFBLFFBQ0QsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxhQUFhLFVBQVUsZUFBZTtBQUFBLFVBQ3JELGNBQWMsT0FBTztBQUFBLFVBQ3JCLFdBQVcsT0FBTztBQUFBLFVBQ2xCLFlBQVksT0FBTztBQUFBLFVBQ25CLFlBQVksT0FBTztBQUFBLFVBQ25CLFVBQVUsT0FBTztBQUFBLFVBQ2pCLHNCQUFzQjtBQUFBLFlBQ3JCLFNBQVMsT0FBTztBQUFBLFlBQ2hCLE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxHQUFHLE9BQU8sT0FBTyxPQUFPLGFBQWE7QUFBQSxNQUV0QyxHQUFFLEtBQUs7QUFRUCxZQUFNLFVBQVUsU0FBUztBQUFBLFFBQ3hCLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLE9BQU8sQ0FBQyxTQUFTLFVBQVU7QUFBQSxRQUM1QjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDTixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1Y7QUFBQSxZQUVDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFlBRUMsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxZQUVDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBRVQ7QUFBQSxVQUVBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1g7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxPQUFPLElBQUksU0FBUyxNQUFNLFVBQVUsT0FBTyxVQUFVO0FBQUEsUUFDcEUsT0FBTztBQUFBLFFBQ1AsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ2IsQ0FBQztBQUVELFlBQU0sVUFBVSxlQUFlLE1BQU0sVUFBVTtBQUUvQyxPQUFDLFNBQVVBLFFBQU87QUFJakIsWUFBSSxTQUFTLDJDQUEyQztBQUN4RCxZQUFJLE9BQU8sa0NBQWtDLE9BQU8sUUFBUSxhQUFhLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQVEsQ0FBQztBQUV2RyxZQUFJLFlBQVlBLE9BQU0sVUFBVSxZQUFZO0FBQUEsVUFDM0MsV0FBVztBQUFBLFVBQ1gsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiO0FBQUEsY0FDQyxTQUFTLE9BQU8sK0JBQStCLE9BQU8sUUFBUSxXQUFXLFdBQVk7QUFBRSx1QkFBTztBQUFBLGNBQU0sQ0FBQyxHQUFHLEdBQUc7QUFBQSxjQUMzRyxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVMsT0FBTyxvQkFBb0IsT0FBTyxRQUFRLFdBQVcsV0FBWTtBQUFFLHVCQUFPO0FBQUEsY0FBTSxDQUFDLEdBQUcsR0FBRztBQUFBLGNBQ2hHLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUyxPQUFPLGVBQWUsT0FBTyxRQUFRLFdBQVcsV0FBWTtBQUFFLHVCQUFPO0FBQUEsY0FBTSxDQUFDLENBQUM7QUFBQSxjQUN0RixZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxZQUVUO0FBQUEsWUFFQTtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGVBQWU7QUFBQSxRQUNoQjtBQUVBLFlBQUksa0JBQWtCLENBQUMsV0FBVyxXQUFXLFdBQVcsWUFBWSxhQUFhLEVBQUUsT0FBTyxTQUFVLE9BQU8sS0FBSztBQUMvRyxnQkFBTSxPQUFPLFVBQVU7QUFDdkIsaUJBQU87QUFBQSxRQUNSLEdBQUcsQ0FBQyxDQUFDO0FBRUwsa0JBQVUsY0FBYyxRQUFRLFNBQVUsR0FBRztBQUM1QyxZQUFFLFNBQVM7QUFBQSxRQUNaLENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxNQUFNO0FBQUEsUUFDckIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLFVBQVU7QUFBQSxVQUNYO0FBQUEsUUFDRDtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsVUFDakIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNuQixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLFNBQVM7QUFBQSxRQUN4QixVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsWUFDUCxXQUFXO0FBQUEsWUFDWCxZQUFZO0FBQUEsY0FDWCxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsZUFBZTtBQUFBLGdCQUNmLFlBQVk7QUFBQSxjQUNiO0FBQUEsWUFDRDtBQUFBLFlBQ0EsV0FBVztBQUFBLGNBQ1YsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGFBQWE7QUFBQSxrQkFDWixTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGdCQUNSO0FBQUEsZ0JBQ0EsZUFBZTtBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsY0FDWCxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0EsVUFBVTtBQUFBLFlBQ1YsZUFBZTtBQUFBLFlBQ2YsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFDQSxlQUFlO0FBQUEsUUFDZixVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsV0FBVztBQUFBLE1BQ1o7QUFFQSxZQUFNLFVBQVUsS0FBSyxNQUFNLFVBQVU7QUFFckMsWUFBTSxVQUFVLGFBQWE7QUFBQSxRQUM1QixXQUFXLE9BQU87QUFBQSxVQUVqQixtQkFBbUI7QUFBQSxVQUVuQixjQUFjO0FBQUEsVUFFZCw0REFBNEQ7QUFBQSxVQUU1RCxtQkFBbUI7QUFBQSxRQUNwQixFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osdUJBQXVCO0FBQUEsVUFDdEIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLG9CQUFvQjtBQUFBLFVBQ25CLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFFWixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsUUFBUSxNQUFNLFVBQVU7QUFFeEMsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksV0FBVyw2R0FBNkc7QUFFNUgsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUN0QixXQUFXO0FBQUEsWUFDVjtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxVQUVBLFVBQVU7QUFBQSxZQUNUO0FBQUEsY0FDQyxTQUFTO0FBQUEsZ0JBQ1IscUNBQXFDLFNBQ3JDLFFBQ0E7QUFBQSxrQkFFQyxtREFBbUQ7QUFBQSxrQkFJbkQsMkNBQTJDO0FBQUEsa0JBTTNDO0FBQUEsZ0JBQ0QsRUFBRSxLQUFLLEdBQUcsSUFDVjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFHQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUlBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFNBQVM7QUFBQSxZQUNSO0FBQUEsY0FDQyxTQUFTO0FBQUEsZ0JBQ1IsK0JBQStCLFNBQy9CLFFBQ0E7QUFBQSxrQkFFQyxtREFBbUQ7QUFBQSxrQkFJbkQsMkNBQTJDO0FBQUEsa0JBTTNDO0FBQUEsZ0JBQ0QsRUFBRSxLQUFLLEdBQUcsSUFDVixNQUNBLG1CQUFtQjtBQUFBLGNBQ3BCO0FBQUEsY0FDQSxRQUFRO0FBQUEsWUFDVDtBQUFBLFlBR0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxnQkFDUix5Q0FBeUMsU0FDekMsUUFDQTtBQUFBLGtCQUdDLDhFQUE4RTtBQUFBLGtCQUk5RSxzRUFBc0U7QUFBQSxrQkFPdEUsV0FBVyxNQUFNLFNBQVM7QUFBQSxnQkFDM0IsRUFBRSxLQUFLLEdBQUcsSUFDVixNQUNBLHFCQUFxQjtBQUFBLGNBQ3RCO0FBQUEsY0FDQSxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBTUE7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFVBR0EsWUFBWTtBQUFBLFlBRVg7QUFBQSxZQUVBO0FBQUEsWUFFQTtBQUFBLFlBRUE7QUFBQSxZQUVBO0FBQUEsWUFHQTtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUViLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFFWCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLFlBQVk7QUFBQSxVQUNaLGVBQWU7QUFBQSxRQUNoQjtBQUFBLE1BRUQsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksaUJBQWlCLDhCQUE4QjtBQUVuRCxRQUFBQSxPQUFNLFVBQVUsU0FBU0EsT0FBTSxVQUFVLE9BQU8sZUFBZTtBQUFBLFVBQzlELGFBQWE7QUFBQSxZQUNaLFNBQVMsT0FBTyw0REFBNEQsaUJBQWlCLGdCQUFnQjtBQUFBLFlBQzdHLFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsVUFBVSxXQUFXO0FBQUEsVUFDakQsY0FBYztBQUFBLFlBQ2I7QUFBQSxjQUNDLFNBQVMsT0FBTywyRkFBMkYsY0FBYztBQUFBLGNBQ3pILFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxXQUFXO0FBQUEsZ0JBQ1gsZUFBZTtBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNELENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsWUFBWSxXQUFXLE9BQU9BLE9BQU0sVUFBVSxNQUFNO0FBQUEsTUFFckUsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLGFBQWEsT0FBTyxZQUFZO0FBQUEsUUFDL0MsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLFdBQVc7QUFBQSxZQUNYLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxPQUFDLFNBQVVBLFFBQU87QUFDakIsWUFBSSxXQUFXO0FBRWYsWUFBSSxZQUFZLGNBQWM7QUFDOUIsWUFBSSxpQkFBaUIseUNBQXlDO0FBQzlELFlBQUksWUFBWSxVQUFVLGlCQUFpQixZQUFZLGlCQUFpQixlQUFlLFlBQVksVUFBVSxZQUFZLGVBQWUsWUFBWSxZQUFZLFlBQVk7QUFDNUssWUFBSSxZQUFZLDJDQUEyQztBQUMzRCxZQUFJLGFBQWEsMkNBQTJDO0FBQzVELFlBQUksY0FBYyxhQUFhO0FBQy9CLFlBQUksY0FBYyxjQUFjO0FBQ2hDLFlBQUlNLFNBQ0gsY0FDQSxRQUNBLFlBQVksYUFDWixNQUNBLFlBQVksWUFBWSxRQUFRLGFBQWEsUUFFN0M7QUFFRCxRQUFBTixPQUFNLFVBQVUsZUFBZTtBQUFBLFVBQzlCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxnQkFBZ0I7QUFBQSxZQUNmLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxjQUNQLFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFNBQVM7QUFBQSxZQUNSLFNBQVMsT0FBTyx1QkFBdUIsU0FBU00sU0FBUSxxQkFBcUIsTUFBTTtBQUFBLFlBQ25GLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxjQUNQLGNBQWM7QUFBQSxnQkFDYixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxjQUNUO0FBQUEsY0FDQSxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFFQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFdBQVc7QUFBQSxZQUNWO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUFBLFVBRUEsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFFBQVE7QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSxTQUFTO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBRVosZUFBZTtBQUFBLFFBQ2hCO0FBRUEsUUFBQU4sT0FBTSxVQUFVLGFBQWEsTUFBTSxPQUFPLFdBQVcsU0FBU0EsT0FBTSxVQUFVO0FBRTlFLFFBQUFBLE9BQU0sVUFBVSxjQUFjQSxPQUFNLFVBQVU7QUFBQSxNQUUvQyxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsUUFBUSxNQUFNLFVBQVUsT0FBTyxPQUFPO0FBQUEsUUFDckQsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFdBQVc7QUFBQSxRQUVYLFlBQVk7QUFBQSxNQUNiLENBQUM7QUFFRCxZQUFNLFVBQVUsYUFBYSxTQUFTLFlBQVk7QUFBQSxRQUNqRCxTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0QsQ0FBQztBQUlELFlBQU0sVUFBVSxhQUFhO0FBQUEsUUFDNUIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ3BCLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1g7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLEtBQUssTUFBTSxVQUFVO0FBQ3JDLFlBQU0sVUFBVSxVQUFVLE1BQU0sVUFBVTtBQUUxQyxPQUFDLFNBQVVBLFFBQU87QUFFakIsWUFBSSxhQUFhQSxPQUFNLFVBQVUsYUFBYTtBQUFBLFVBQzdDLFdBQVc7QUFBQSxZQUNWO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1Q7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFHQSxhQUFhO0FBQUEsVUFDYixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFJWixZQUFZO0FBQUEsWUFDWDtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQUEsVUFFQSxXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCO0FBR0EsbUJBQVcsT0FBTyxHQUFHLFNBQVM7QUFBQSxVQUM3QixZQUFZO0FBQUEsWUFFWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsV0FBVyxXQUFXO0FBQUEsVUFDdEIsWUFBWSxXQUFXO0FBQUEsUUFDeEI7QUFBQSxNQUVELEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxhQUFhLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUM1RCxXQUFXO0FBQUEsUUFFWCxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsTUFDYixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsY0FBYyxVQUFVO0FBQUEsUUFFcEQsWUFBWTtBQUFBLFFBQ1osUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxNQUNELENBQUM7QUFFRCxZQUFNLFVBQVUsU0FBUztBQUFBLFFBRXhCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFFQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBRVgsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBRVYsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBS0EsT0FBQyxTQUFVQSxRQUFPO0FBR2pCLFlBQUksZUFBZTtBQUFBLFVBQ2xCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBSUEsWUFBSSxpQkFBaUI7QUFBQSxVQUNwQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUlBLFlBQUksaUJBQWlCLENBQUMsUUFBUTtBQUU5QixZQUFJLFdBQVcsYUFBYSxPQUFPLGdCQUFnQixjQUFjO0FBRWpFLFFBQUFBLE9BQU0sVUFBVSxTQUFTO0FBQUEsVUFDeEIsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBRWYsU0FBUyxJQUFJLE9BQU8sU0FBUyxlQUFlLEtBQUssR0FBRyxJQUFJLG1CQUFtQjtBQUFBLFlBQzNFLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGtCQUFrQjtBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGVBQWU7QUFBQSxnQkFDZCxTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGdCQUNSLE9BQU87QUFBQSxjQUNSO0FBQUEsY0FDQSxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQSxpQkFBaUI7QUFBQSxZQUNoQjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxnQkFDZixrQkFBa0I7QUFBQSxrQkFDakIsU0FBUztBQUFBLGtCQUNULE9BQU87QUFBQSxnQkFDUjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGtCQUFrQjtBQUFBLGtCQUNqQixTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGdCQUNSO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxXQUFXLElBQUksT0FBTyxXQUFXLFNBQVMsS0FBSyxHQUFHLElBQUksUUFBUSxHQUFHO0FBQUEsVUFDakUsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFDRCxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsYUFBYTtBQUFBLFFBQzVCLFdBQVc7QUFBQSxRQUNYLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDTixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsZUFBZTtBQUFBLE1BQ2hCO0FBRUEsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksZUFBZTtBQUVuQixRQUFBQSxPQUFNLFVBQVUsV0FBV0EsT0FBTSxVQUFVLE9BQU8sU0FBUztBQUFBLFVBQzFELGNBQWM7QUFBQSxZQUNiO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFFBQ2IsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxhQUFhLFlBQVksWUFBWTtBQUFBLFVBQ3BELE9BQU87QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxZQUNaO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gseUJBQXlCO0FBQUEsWUFDeEIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsY0FBYztBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNELENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVUEsUUFBTztBQVNqQixRQUFBQSxPQUFNLFVBQVUsTUFBTTtBQUFBLFVBS3JCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFJQSxvQkFBb0I7QUFBQSxZQUNuQixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRQSxPQUFNLFVBQVU7QUFBQSxVQUN6QjtBQUFBLFVBR0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLGdCQUNkLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFFQSx3QkFBd0I7QUFBQSxZQUN2QixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDekI7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFHQSxnQkFBZ0I7QUFBQSxZQUNmLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLFdBQVc7QUFBQSxrQkFDWCxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLGNBQ0EsVUFBVTtBQUFBLGdCQUNULFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsTUFBTUEsT0FBTSxVQUFVO0FBQUEsWUFDdkI7QUFBQSxVQUNEO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsU0FBUztBQUFBLFlBRVI7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxXQUFXO0FBQUEsZ0JBQ1gsWUFBWTtBQUFBLGdCQUNaLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUVBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsZ0JBQ1AsUUFBUTtBQUFBLGtCQUNQLFNBQVM7QUFBQSxrQkFDVCxPQUFPO0FBQUEsZ0JBQ1I7QUFBQSxnQkFDQSxNQUFNQSxPQUFNLFVBQVU7QUFBQSxjQUN2QjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRQSxPQUFNLFVBQVU7QUFBQSxVQUN6QjtBQUFBLFVBRUEsY0FBYztBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLE9BQU87QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLGNBQWM7QUFBQSxnQkFDYjtBQUFBLGtCQUNDLFNBQVM7QUFBQSxrQkFDVCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxnQkFDekI7QUFBQSxnQkFDQTtBQUFBLGtCQUNDLFNBQVM7QUFBQSxrQkFDVCxRQUFRO0FBQUEsb0JBQ1AsY0FBYztBQUFBLHNCQUNiLFNBQVM7QUFBQSxzQkFDVCxZQUFZO0FBQUEsc0JBQ1osUUFBUUEsT0FBTSxVQUFVO0FBQUEsb0JBQ3pCO0FBQUEsb0JBQ0EsYUFBYTtBQUFBLG9CQUNiLGVBQWU7QUFBQSxrQkFDaEI7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxjQUNYLGNBQWM7QUFBQSxZQUNmO0FBQUEsVUFDRDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1A7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVFBLE9BQU0sVUFBVTtBQUFBLFlBQ3pCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsZUFBZTtBQUFBLFFBQ2hCO0FBRUEsWUFBSSxpQkFBaUIsaUZBQWlGO0FBR3RHLFlBQUksVUFBVTtBQUFBLFVBQ2IsRUFBRSxRQUFRLFFBQVEsVUFBVSxPQUFPO0FBQUEsVUFDbkMsRUFBRSxRQUFRLFVBQVUsVUFBVSxlQUFlO0FBQUEsVUFDN0M7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxFQUFFLFFBQVEsUUFBUSxVQUFVLE9BQU87QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFDQSxZQUFJLGNBQWMsQ0FBQztBQUNuQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDL0MsY0FBSSxTQUFTLFFBQVE7QUFDckIsbUJBQVMsT0FBTyxXQUFXLFdBQVcsRUFBRSxRQUFnQixVQUFVLE9BQU8sSUFBSTtBQUM3RSxjQUFJQSxPQUFNLFVBQVUsT0FBTyxXQUFXO0FBQ3JDLHdCQUFZLFlBQVksT0FBTyxVQUFVO0FBQUEsY0FDeEMsU0FBUyxPQUFPLGVBQWUsUUFBUSxpQkFBaUIsV0FBWTtBQUFFLHVCQUFPLE9BQU87QUFBQSxjQUFRLENBQUMsR0FBRyxHQUFHO0FBQUEsY0FDbkcsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxrQkFDZCxTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGdCQUNSO0FBQUEsZ0JBQ0EsUUFBUTtBQUFBLGtCQUNQLFNBQVM7QUFBQSxrQkFDVCxPQUFPLENBQUMsT0FBTyxVQUFVLGNBQWMsT0FBTyxRQUFRO0FBQUEsa0JBQ3RELFFBQVFBLE9BQU0sVUFBVSxPQUFPO0FBQUEsZ0JBQ2hDO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxhQUFhLE9BQU8sVUFBVSxXQUFXO0FBQUEsTUFFMUQsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBQ2pCLFFBQUFBLE9BQU0sVUFBVSxTQUFTO0FBQUEsVUFDeEIsV0FBVztBQUFBLFlBRVY7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFFUCxlQUFlO0FBQUEsY0FFaEI7QUFBQSxZQUNEO0FBQUEsWUFFQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGNBQ1IsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGdCQUVQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUVBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsZ0JBQ1AsZUFBZTtBQUFBLGtCQUNkLFNBQVM7QUFBQSxrQkFDVCxZQUFZO0FBQUEsZ0JBQ2I7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLHFCQUFxQjtBQUFBLFlBQ3BCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxTQUFTO0FBQUEsWUFFUixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FFUCxrQkFBa0I7QUFBQSxnQkFDakIsU0FBUztBQUFBLGdCQUNULFFBQVE7QUFBQSxrQkFDUCxXQUFXO0FBQUEsZ0JBQ1o7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFFVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxpQkFBaUI7QUFBQSxnQkFDaEIsU0FBUztBQUFBLGdCQUNULFFBQVEsQ0FFUjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFVBQ2IsWUFBWTtBQUFBLFlBQ1g7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUVYLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFFQSxZQUFJLGdCQUFnQjtBQUFBLFVBQ25CO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxrQkFBa0I7QUFBQSxnQkFFakIsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixPQUFPO0FBQUEsZ0JBQ1AsUUFBUTtBQUFBLGtCQUNQLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsY0FDQSxhQUFhO0FBQUEsZ0JBQ1osU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxjQUNSO0FBQUEsY0FDQSxNQUFNQSxPQUFNLFVBQVU7QUFBQSxZQUN2QjtBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUNBLFFBQUFBLE9BQU0sVUFBVSxPQUFPLFdBQVcsR0FBRyxPQUFPLGdCQUFnQjtBQUM1RCxRQUFBQSxPQUFNLFVBQVUsT0FBTyxVQUFVLE9BQU8saUJBQWlCLE9BQU8sZ0JBQWdCO0FBQUEsTUFDakYsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBR2pCLFFBQUFBLE9BQU0sVUFBVSxPQUFPO0FBQUEsVUFDdEIsV0FBVztBQUFBLFlBQ1Y7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUFBLFVBQ0EsZUFBZTtBQUFBLFlBQ2QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLGdCQUNQLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUVULFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBR0EsWUFBWTtBQUFBLFVBRVosZUFBZTtBQUFBLFFBQ2hCO0FBRUEsWUFBSSxrQkFBa0I7QUFBQSxVQUNyQjtBQUFBLFVBQ0EsRUFBRSxNQUFNLE9BQU8sT0FBTyxNQUFNO0FBQUEsVUFDNUI7QUFBQSxRQUNEO0FBQ0EsWUFBSSxtQkFBbUIsc0NBQXNDO0FBRTdELHdCQUFnQixRQUFRLFNBQVUsTUFBTTtBQUN2QyxjQUFJLFFBQVE7QUFDWixjQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzdCLG9CQUFRLEtBQUs7QUFDYixtQkFBTyxLQUFLO0FBQUEsVUFDYjtBQUNBLGNBQUlBLE9BQU0sVUFBVSxRQUFRO0FBQzNCLGdCQUFJLElBQUksQ0FBQztBQUNULGNBQUUsaUJBQWlCLFNBQVM7QUFBQSxjQUMzQixTQUFTLE9BQU8saUJBQWlCLFFBQVEsVUFBVSxLQUFLLFFBQVEseUJBQXlCLE1BQU0sQ0FBQyxHQUFHLEdBQUc7QUFBQSxjQUN0RyxRQUFRQSxPQUFNLEtBQUssTUFBTUEsT0FBTSxVQUFVLEtBQUssZUFBZSxNQUFNO0FBQUEsWUFDcEU7QUFDQSxjQUFFLGlCQUFpQixPQUFPLE9BQU8sT0FBT0EsT0FBTSxLQUFLLE1BQU1BLE9BQU0sVUFBVSxNQUFNO0FBQy9FLFlBQUFBLE9BQU0sVUFBVSxhQUFhLFFBQVEsZUFBZSxDQUFDO0FBQUEsVUFDdEQ7QUFBQSxRQUNELENBQUM7QUFHRCxZQUFJQSxPQUFNLFVBQVUsR0FBRztBQUN0QixVQUFBQSxPQUFNLFVBQVUsS0FBSyxlQUFlLE9BQU8sT0FBT0EsT0FBTSxLQUFLLE1BQU1BLE9BQU0sVUFBVSxDQUFDO0FBQUEsUUFDckY7QUFBQSxNQUVELEdBQUUsS0FBSztBQVdQLFlBQU0sVUFBVSxZQUFZLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUMzRCxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsTUFDYixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsYUFBYSxXQUFXO0FBQUEsUUFDcEQsT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFVBQ04sU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLGNBQ1QsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUVBLDZCQUE2QjtBQUFBLGNBQzVCLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFFQSw2QkFBNkI7QUFBQSxjQUM1QixTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsV0FBVztBQUFBLGNBQ1Y7QUFBQSxjQUNBO0FBQUEsWUFDRDtBQUFBLFlBQ0EsWUFBWTtBQUFBLGNBQ1gsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBLG1CQUFtQjtBQUFBLGNBQ2xCLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBRUQsYUFBTyxNQUFNLFVBQVUsVUFBVTtBQUNqQyxhQUFPLE1BQU0sVUFBVSxVQUFVO0FBRWpDLFlBQU0sVUFBVSxTQUFTLE1BQU0sVUFBVTtBQUV6QyxZQUFNLFVBQVUsYUFBYSxNQUFNLFVBQVUsT0FBTyxXQUFXO0FBQUEsUUFDOUQsV0FBVztBQUFBLFFBRVgsb0JBQW9CO0FBQUEsVUFJbkIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBR0EsV0FBVztBQUFBLFFBRVgsWUFBWTtBQUFBLFVBRVgsTUFBTSxVQUFVLFFBQVEsU0FBUztBQUFBLFVBRWpDLE1BQU0sVUFBVSxRQUFRLFNBQVM7QUFBQSxVQUlqQztBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxZQUFNLFVBQVUsT0FBTyxNQUFNLFVBQVU7QUFFdkMsWUFBTSxVQUFVLFNBQVM7QUFBQSxRQUN4QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDdkIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFlBQ1AsaUJBQWlCO0FBQUEsY0FFaEIsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxrQkFDZCxTQUFTO0FBQUEsa0JBQ1QsWUFBWTtBQUFBLGdCQUNiO0FBQUEsZ0JBQ0EscUJBQXFCO0FBQUEsa0JBQ3BCLFNBQVM7QUFBQSxrQkFDVCxPQUFPO0FBQUEsZ0JBQ1I7QUFBQSxnQkFDQSxNQUFNO0FBQUEsY0FDUDtBQUFBLFlBQ0Q7QUFBQSxZQUNBLFVBQVU7QUFBQSxVQUNYO0FBQUEsUUFDRDtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDdkIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU8sQ0FBQyxjQUFjLGFBQWE7QUFBQSxVQUNuQyxRQUFRO0FBQUEsWUFDUCxlQUFlO0FBQUEsVUFDaEI7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsT0FBTyx3QkFBd0IsT0FBTyxpQkFBaUIsT0FBTyxPQUFPLE1BQU0sVUFBVTtBQUVyRyxZQUFNLFVBQVUsS0FBSyxNQUFNLFVBQVU7QUFFckMsT0FBQyxTQUFVQSxRQUFPO0FBWWpCLGlCQUFTLFFBQVEsU0FBUyxjQUFjO0FBQ3ZDLGlCQUFPLFFBQVEsUUFBUSxjQUFjLFNBQVUsR0FBRyxPQUFPO0FBQ3hELG1CQUFPLFFBQVEsYUFBYSxDQUFDLFNBQVM7QUFBQSxVQUN2QyxDQUFDO0FBQUEsUUFDRjtBQU9BLGlCQUFTLEdBQUcsU0FBUyxjQUFjLE9BQU87QUFDekMsaUJBQU8sT0FBTyxRQUFRLFNBQVMsWUFBWSxHQUFHLFNBQVMsRUFBRTtBQUFBLFFBQzFEO0FBU0EsaUJBQVMsT0FBTyxTQUFTLFdBQVc7QUFDbkMsbUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxLQUFLO0FBQ25DLHNCQUFVLFFBQVEsUUFBUSxhQUFhLFdBQVk7QUFBRSxxQkFBTyxRQUFRLFVBQVU7QUFBQSxZQUFLLENBQUM7QUFBQSxVQUNyRjtBQUNBLGlCQUFPLFFBQVEsUUFBUSxhQUFhLFdBQVc7QUFBQSxRQUNoRDtBQUlBLFlBQUksZUFBZTtBQUFBLFVBRWxCLE1BQU07QUFBQSxVQUVOLE9BQU87QUFBQSxRQUNSO0FBRUEsaUJBQVMsa0JBQWtCLE9BQU87QUFDakMsaUJBQU8sV0FBVyxNQUFNLEtBQUssRUFBRSxRQUFRLE1BQU0sR0FBRyxJQUFJO0FBQUEsUUFDckQ7QUFDQSxZQUFJLFdBQVcsT0FBTyxrQkFBa0IsYUFBYSxPQUFPLE1BQU0sYUFBYSxLQUFLLENBQUM7QUFHckYsWUFBSSxhQUFhLG1CQUFtQjtBQUNwQyxZQUFJLGdCQUFnQixRQUFRLDBCQUEwQixRQUFRLENBQUMsVUFBVSxDQUFDO0FBRTFFLFlBQUksYUFBYTtBQUFBLFVBQ2hCLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxRQUNoQjtBQUdBLFlBQUksZ0JBQWdCLG9CQUFvQjtBQUV4QyxRQUFBQSxPQUFNLFVBQVUsU0FBU0EsT0FBTSxVQUFVLE9BQU8sU0FBUztBQUFBLFVBQ3hELFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxZQUNUO0FBQUEsY0FDQyxTQUFTLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFBQSxjQUNyRCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiO0FBQUEsY0FHQyxTQUFTLEdBQUcsMkNBQTJDLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFBQSxjQUM5RSxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUVDLFNBQVMsR0FBRyxpQ0FBaUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztBQUFBLGNBQ3BFLFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCLENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsYUFBYSxVQUFVLFVBQVU7QUFBQSxVQUNoRCxTQUFTO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0QsQ0FBQztBQUdELFlBQUksb0JBQW9CLE9BQU8sUUFBUSxpQ0FBaUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7QUFFbkcsUUFBQUEsT0FBTSxVQUFVLGFBQWEsVUFBVSxVQUFVO0FBQUEsVUFDaEQsd0JBQXdCO0FBQUEsWUFDdkIsU0FBUyxHQUFHLDZCQUE2QixRQUFRLENBQUMsaUJBQWlCLENBQUM7QUFBQSxZQUNwRSxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxpQkFBaUI7QUFBQSxnQkFDaEIsU0FBUyxHQUFHLDhCQUE4QixRQUFRLENBQUMsaUJBQWlCLENBQUM7QUFBQSxnQkFDckUsWUFBWTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxrQkFDUCxlQUFlO0FBQUEsa0JBQ2YsY0FBYztBQUFBLG9CQUNiLFNBQVM7QUFBQSxvQkFDVCxPQUFPO0FBQUEsb0JBQ1AsUUFBUUEsT0FBTSxVQUFVO0FBQUEsa0JBQ3pCO0FBQUEsZ0JBQ0Q7QUFBQSxjQUNEO0FBQUEsY0FDQSxVQUFVO0FBQUEsWUFDWDtBQUFBLFVBQ0Q7QUFBQSxRQUNELENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxLQUFLLE1BQU0sVUFBVTtBQUVyQyxZQUFNLFVBQVUsSUFBSTtBQUFBLFFBQ25CLFVBQVU7QUFBQSxRQUNWLFdBQVc7QUFBQSxVQUdWO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBTUE7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFHQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFHQSxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGVBQWU7QUFBQSxNQUNoQjtBQUVBLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFdBQVcsOENBQThDO0FBQzdELFlBQUksWUFBWSx5Q0FBeUM7QUFFekQsWUFBSSxTQUFTLGlHQUNYLE9BQU8sUUFBUSxhQUFhLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQVUsQ0FBQyxFQUFFLFFBQVEsY0FBYyxXQUFZO0FBQUUsaUJBQU87QUFBQSxRQUFXLENBQUM7QUFHdkgsaUJBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQzNCLG1CQUFTLE9BQU8sUUFBUSxXQUFXLFdBQVk7QUFBRSxtQkFBTztBQUFBLFVBQVEsQ0FBQztBQUFBLFFBQ2xFO0FBQ0EsaUJBQVMsT0FBTyxRQUFRLFdBQVcsV0FBVztBQUc5QyxRQUFBQSxPQUFNLFVBQVUsTUFBTTtBQUFBLFVBQ3JCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSx1QkFBdUI7QUFBQSxZQUN0QixTQUFTLE9BQU8sMkdBQTJHLE9BQU8sUUFBUSxTQUFTLFdBQVk7QUFBRSxxQkFBTztBQUFBLFlBQVEsQ0FBQyxHQUFHLEdBQUc7QUFBQSxZQUN2TCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxVQUN6QjtBQUFBLFVBQ0EsY0FBYztBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFlBQVk7QUFBQSxZQUNYO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxXQUFXO0FBQUEsZ0JBQ1gsWUFBWTtBQUFBLGNBQ2I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EseUJBQXlCO0FBQUEsWUFDeEIsU0FBUyxPQUFPLDBDQUEwQyxPQUFPLFFBQVEsU0FBUyxXQUFZO0FBQUUscUJBQU87QUFBQSxZQUFRLENBQUMsR0FBRyxHQUFHO0FBQUEsWUFDdEgsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDekI7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWCxlQUFlO0FBQUEsUUFDaEI7QUFBQSxNQUVELEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxPQUFPLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUN0RCxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBRUEsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZO0FBQUEsTUFDYixDQUFDO0FBRUQsWUFBTSxVQUFVLElBQUk7QUFBQSxRQUNuQixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFHbkIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxTQUFTLE1BQU0sVUFBVSxPQUFPLFVBQVU7QUFBQSxRQUN6RCxvQkFBb0I7QUFBQSxVQUduQixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLE1BQ0QsQ0FBQztBQUVELFlBQU0sVUFBVSxhQUFhLFVBQVUsVUFBVTtBQUFBLFFBQ2hELFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxRQUNSO0FBQUEsTUFDRCxDQUFDO0FBRUQsWUFBTSxVQUFVLE1BQU0sTUFBTSxVQUFVO0FBTXRDLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLGNBQWMsMERBQTBEO0FBQzVFLFlBQUksYUFDSCwrREFBK0QsU0FDL0QsTUFDQSxpRUFBaUU7QUFTbEUsaUJBQVMsT0FBTyxTQUFTLFdBQVc7QUFDbkMsbUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxLQUFLO0FBQ25DLHNCQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVk7QUFBRSxxQkFBTyxRQUFRLFVBQVU7QUFBQSxZQUFLLENBQUM7QUFBQSxVQUNuRjtBQUNBLGlCQUFPLFFBQ0wsUUFBUSxXQUFXLFdBQVcsRUFDOUIsUUFBUSxVQUFVLFFBQVEsYUFBYSxHQUFHLEVBQzFDLFFBQVEsY0FBYyxRQUFRLGNBQWMsR0FBRztBQUFBLFFBQ2xEO0FBRUEsWUFBSU8sU0FBUSxPQUFPLDRDQUE0QyxRQUFRLENBQUM7QUFDeEUsWUFBSSxTQUFTLE9BQU8sOENBQThDLFFBQVEsQ0FBQztBQUMzRSxZQUFJLFFBQVEsT0FBTyw0Q0FBNEMsUUFBUSxDQUFDO0FBQ3hFLFlBQUksUUFBUSxPQUFPLG9DQUFvQyxRQUFRLENBQUM7QUFFaEUsWUFBSSxXQUFXLElBQUksU0FDbEIsa0JBQWtCLFNBQ2xCLFFBQVEsbUJBQW1CLFNBQVMsTUFBTUEsU0FBUSxTQUMxQyxlQUFlLFNBQVMsU0FBYyxRQUFRLE9BQU9BLFNBQVEsTUFBTSxTQUFTLE9BQ3BGLHdCQUF3QjtBQWN6QixZQUFJLGtCQUFrQixjQUFjLFNBQVMsTUFBTTtBQUNuRCxZQUFJLGVBQWUsUUFDbEIseUNBQXlDLFNBQ3pDLHVCQUN3QixrQkFBa0I7QUFHM0MsWUFBSSxXQUFXLGdFQUFnRSxPQUFPLFFBQVEsa0JBQWtCLFlBQVk7QUFDNUgsWUFBSSxhQUFhLHNCQUFzQixTQUFTLFdBQVcsVUFBVTtBQUNyRSxZQUFJLFlBQ0gsT0FBTyxTQUNQLFFBQ0Esb0JBQW9CLFNBQVMsV0FBVyxPQUFPLFNBQy9DLFNBRUMsT0FBTyxTQUNQLE1BR0EsZUFBZSxTQUFTLGFBQ3hCLE1BRUE7QUFBQSxVQUVDLE1BQU0sU0FBUyxXQUFXLE9BQU8sU0FDakMsU0FFQyxPQUFPLFNBQ1AsTUFHQSxlQUFlLFNBQVMsYUFDeEIsYUFHRCxPQUVBLFlBQVk7QUFBQSxVQUNaO0FBQUEsUUFDRCxLQUVELE9BRUEsWUFBWSxTQUNaLE1BQ0EsSUFBSSxTQUFTLGFBQ2I7QUFXRCxRQUFBUCxPQUFNLFVBQVUsU0FBU0EsT0FBTSxVQUFVLE9BQU8sVUFBVSxDQUFDLENBQUM7QUFFNUQsWUFBSSxpQkFBaUJBLE9BQU0sVUFBVSxhQUFhLFVBQVUsVUFBVTtBQUFBLFVBQ3JFLFFBQVE7QUFBQSxZQUNQLFNBQVMsT0FBTyxTQUFTO0FBQUEsWUFDekIsUUFBUTtBQUFBLFlBQ1IsUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDekI7QUFBQSxRQUNELEdBQUcsRUFBRSxRQUFRQSxPQUFNLFVBQVUsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFbkQsWUFBSSxLQUFLO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsUUFDVDtBQUVBLFlBQUksY0FBYztBQUFBLFVBQ2pCLFNBQVMsT0FBTyxXQUFXLFNBQVMsUUFBUTtBQUFBLFVBQzVDLFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxZQUNQLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxVQUNYO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxPQUFPLElBQUksVUFBVSxPQUFPLE9BQU8sU0FBUyxVQUFVO0FBQ3RFLFFBQUFBLE9BQU0sVUFBVSxPQUFPLElBQUksT0FBTyxjQUFjLFVBQVUsT0FBTyxPQUFPLFNBQVMsWUFBWTtBQUM3RixRQUFBQSxPQUFNLFVBQVUsYUFBYSxVQUFVLGVBQWUsRUFBRSxTQUFTLFlBQVksR0FBR0EsT0FBTSxVQUFVLE9BQU8sSUFBSSxPQUFPLGFBQWE7QUFFL0gsUUFBQUEsT0FBTSxVQUFVLGFBQWEsVUFBVSxVQUFVO0FBQUEsVUFDaEQsaUJBQWlCO0FBQUEsWUFDaEIsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLFNBQVM7QUFBQSxZQUNSLFNBQVM7QUFBQSxjQUNSLFlBQVksU0FDWixRQUNBO0FBQUEsZ0JBRUM7QUFBQSxnQkFFQSx3QkFBd0IsU0FBUztBQUFBLGdCQUVqQyw2Q0FBNkMsU0FBU08sU0FBUSxNQUFNLFNBQVM7QUFBQSxnQkFFN0UsUUFBUSxTQUFTLFFBQVEsY0FBYyxTQUFTQSxTQUFRLFlBQVk7QUFBQSxnQkFFcEUsU0FBUyxTQUFTLFFBQVEsY0FBYyxTQUFTQSxTQUFRLE1BQU0sU0FBUyxRQUFRLGdCQUFnQixTQUFTO0FBQUEsZ0JBRXpHLFFBQVEsU0FBU0EsU0FBUSxNQUFNLFNBQVMsUUFBUSxRQUFRLFVBQVUsU0FBUyxRQUFRLFdBQVcsU0FBU0EsU0FBUSxPQUFPLE1BQU0sU0FBUyxRQUFRO0FBQUEsZ0JBRTdJLGtCQUFrQixTQUFTQSxTQUFRLE1BQU0sU0FBUztBQUFBLGNBQ25ELEVBQUUsS0FBSyxHQUFHLElBQ1Y7QUFBQSxZQUNEO0FBQUEsWUFDQSxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsY0FDWCxVQUFVO0FBQUEsWUFDWDtBQUFBLFVBQ0Q7QUFBQSxVQUVBLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxjQUNYLFVBQVU7QUFBQSxZQUNYO0FBQUEsVUFDRDtBQUFBLFVBRUEsU0FBUztBQUFBLFVBRVQscUJBQXFCO0FBQUEsWUFDcEIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNELENBQUM7QUFFRCxRQUFBUCxPQUFNLFVBQVUsUUFBUUEsT0FBTSxVQUFVO0FBQUEsTUFFekMsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksYUFBYUEsT0FBTSxLQUFLLE1BQU1BLE9BQU0sVUFBVSxVQUFVO0FBRTVELFlBQUksUUFBUSwrQ0FBK0M7QUFDM0QsWUFBSSxTQUFTLCtDQUErQztBQUM1RCxZQUFJLFNBQVMsdUNBQXVDO0FBTXBELGlCQUFTLEdBQUcsUUFBUSxPQUFPO0FBQzFCLG1CQUFTLE9BQ1AsUUFBUSxRQUFRLFdBQVk7QUFBRSxtQkFBTztBQUFBLFVBQU8sQ0FBQyxFQUM3QyxRQUFRLGFBQWEsV0FBWTtBQUFFLG1CQUFPO0FBQUEsVUFBUSxDQUFDLEVBQ25ELFFBQVEsYUFBYSxXQUFZO0FBQUUsbUJBQU87QUFBQSxVQUFRLENBQUM7QUFDckQsaUJBQU8sT0FBTyxRQUFRLEtBQUs7QUFBQSxRQUM1QjtBQUVBLGlCQUFTLEdBQUcsTUFBTSxFQUFFO0FBR3BCLFFBQUFBLE9BQU0sVUFBVSxNQUFNQSxPQUFNLFVBQVUsT0FBTyxVQUFVLFVBQVU7QUFDakUsUUFBQUEsT0FBTSxVQUFVLElBQUksSUFBSSxVQUFVO0FBQUEsVUFDakMsd0lBQXdJO0FBQUEsUUFDekk7QUFFQSxRQUFBQSxPQUFNLFVBQVUsSUFBSSxJQUFJLE9BQU8sT0FBTyxVQUFVO0FBQ2hELFFBQUFBLE9BQU0sVUFBVSxJQUFJLElBQUksT0FBTyxjQUFjLFVBQVU7QUFDdkQsUUFBQUEsT0FBTSxVQUFVLElBQUksSUFBSSxPQUFPLE9BQU8sT0FBTyxnQkFBZ0I7QUFDN0QsUUFBQUEsT0FBTSxVQUFVLElBQUksSUFBSSxPQUFPLGFBQWEsV0FBVztBQUV2RCxRQUFBQSxPQUFNLFVBQVUsYUFBYSxVQUFVLGFBQWE7QUFBQSxVQUNuRCxVQUFVO0FBQUEsWUFDVCxTQUFTLEdBQUcsV0FBVyxNQUFNO0FBQUEsWUFDN0IsUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDekI7QUFBQSxRQUNELEdBQUdBLE9BQU0sVUFBVSxJQUFJLEdBQUc7QUFFMUIsUUFBQUEsT0FBTSxVQUFVLGFBQWEsVUFBVSxnQkFBZ0I7QUFBQSxVQUN0RCxVQUFVO0FBQUEsWUFFVCxTQUFTLEdBQUcsWUFBWSxNQUFNO0FBQUEsWUFDOUIsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1Asc0JBQXNCO0FBQUEsZ0JBQ3JCLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsTUFBTUEsT0FBTSxVQUFVO0FBQUEsWUFDdkI7QUFBQSxVQUNEO0FBQUEsUUFDRCxHQUFHQSxPQUFNLFVBQVUsSUFBSSxHQUFHO0FBRzFCLFlBQUksaUJBQWlCLFNBQVUsT0FBTztBQUNyQyxjQUFJLENBQUMsT0FBTztBQUNYLG1CQUFPO0FBQUEsVUFDUjtBQUNBLGNBQUksT0FBTyxVQUFVLFVBQVU7QUFDOUIsbUJBQU87QUFBQSxVQUNSO0FBQ0EsY0FBSSxPQUFPLE1BQU0sWUFBWSxVQUFVO0FBQ3RDLG1CQUFPLE1BQU07QUFBQSxVQUNkO0FBQ0EsaUJBQU8sTUFBTSxRQUFRLElBQUksY0FBYyxFQUFFLEtBQUssRUFBRTtBQUFBLFFBQ2pEO0FBRUEsWUFBSSxhQUFhLFNBQVUsUUFBUTtBQUNsQyxjQUFJLGFBQWEsQ0FBQztBQUNsQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFFBQVEsS0FBSztBQUN2QyxnQkFBSSxRQUFRLE9BQU87QUFDbkIsZ0JBQUksaUJBQWlCO0FBRXJCLGdCQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzlCLGtCQUFJLE1BQU0sU0FBUyxTQUFTLE1BQU0sUUFBUSxNQUFNLE1BQU0sUUFBUSxHQUFHLFNBQVMsT0FBTztBQUdoRixvQkFBSSxNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsWUFBWSxNQUFNO0FBRWpELHNCQUFJLFdBQVcsU0FBUyxLQUFLLFdBQVcsV0FBVyxTQUFTLEdBQUcsWUFBWSxlQUFlLE1BQU0sUUFBUSxHQUFHLFFBQVEsRUFBRSxHQUFHO0FBRXZILCtCQUFXLElBQUk7QUFBQSxrQkFDaEI7QUFBQSxnQkFDRCxPQUFPO0FBQ04sc0JBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxTQUFTLEdBQUcsWUFBWSxNQUFNO0FBQUEsa0JBRTlELE9BQU87QUFFTiwrQkFBVyxLQUFLO0FBQUEsc0JBQ2YsU0FBUyxlQUFlLE1BQU0sUUFBUSxHQUFHLFFBQVEsRUFBRTtBQUFBLHNCQUNuRCxjQUFjO0FBQUEsb0JBQ2YsQ0FBQztBQUFBLGtCQUNGO0FBQUEsZ0JBQ0Q7QUFBQSxjQUNELFdBQVcsV0FBVyxTQUFTLEtBQUssTUFBTSxTQUFTLGlCQUFpQixNQUFNLFlBQVksS0FBSztBQUcxRiwyQkFBVyxXQUFXLFNBQVMsR0FBRztBQUFBLGNBRW5DLFdBQVcsV0FBVyxTQUFTLEtBQUssV0FBVyxXQUFXLFNBQVMsR0FBRyxlQUFlLEtBQUssTUFBTSxTQUFTLGlCQUFpQixNQUFNLFlBQVksS0FBSztBQUdoSiwyQkFBVyxXQUFXLFNBQVMsR0FBRztBQUFBLGNBRW5DLE9BQU87QUFDTixpQ0FBaUI7QUFBQSxjQUNsQjtBQUFBLFlBQ0Q7QUFDQSxnQkFBSSxrQkFBa0IsT0FBTyxVQUFVLFVBQVU7QUFDaEQsa0JBQUksV0FBVyxTQUFTLEtBQUssV0FBVyxXQUFXLFNBQVMsR0FBRyxpQkFBaUIsR0FBRztBQUdsRixvQkFBSSxZQUFZLGVBQWUsS0FBSztBQUdwQyxvQkFBSSxJQUFJLE9BQU8sU0FBUyxNQUFNLE9BQU8sT0FBTyxJQUFJLE9BQU8sWUFBWSxPQUFPLElBQUksR0FBRyxTQUFTLGVBQWU7QUFDeEcsK0JBQWEsZUFBZSxPQUFPLElBQUksRUFBRTtBQUN6Qyx5QkFBTyxPQUFPLElBQUksR0FBRyxDQUFDO0FBQUEsZ0JBQ3ZCO0FBQ0Esb0JBQUksSUFBSSxNQUFNLE9BQU8sT0FBTyxJQUFJLE9BQU8sWUFBWSxPQUFPLElBQUksR0FBRyxTQUFTLGVBQWU7QUFDeEYsOEJBQVksZUFBZSxPQUFPLElBQUksRUFBRSxJQUFJO0FBQzVDLHlCQUFPLE9BQU8sSUFBSSxHQUFHLENBQUM7QUFDdEI7QUFBQSxnQkFDRDtBQUVBLHVCQUFPLEtBQUssSUFBSUEsT0FBTSxNQUFNLGNBQWMsV0FBVyxNQUFNLFNBQVM7QUFBQSxjQUNyRTtBQUFBLFlBQ0Q7QUFFQSxnQkFBSSxNQUFNLFdBQVcsT0FBTyxNQUFNLFlBQVksVUFBVTtBQUN2RCx5QkFBVyxNQUFNLE9BQU87QUFBQSxZQUN6QjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsUUFBQUEsT0FBTSxNQUFNLElBQUksa0JBQWtCLFNBQVUsS0FBSztBQUNoRCxjQUFJLElBQUksYUFBYSxTQUFTLElBQUksYUFBYSxPQUFPO0FBQ3JEO0FBQUEsVUFDRDtBQUNBLHFCQUFXLElBQUksTUFBTTtBQUFBLFFBQ3RCLENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVUEsUUFBTztBQUNqQixZQUFJLGFBQWFBLE9BQU0sS0FBSyxNQUFNQSxPQUFNLFVBQVUsVUFBVTtBQUM1RCxRQUFBQSxPQUFNLFVBQVUsTUFBTUEsT0FBTSxVQUFVLE9BQU8sT0FBTyxVQUFVO0FBRzlELGVBQU9BLE9BQU0sVUFBVSxJQUFJO0FBQzNCLGVBQU9BLE9BQU0sVUFBVSxJQUFJO0FBSzNCLFlBQUksTUFBTUEsT0FBTSxVQUFVLElBQUk7QUFDOUIsWUFBSSxVQUFVLE9BQU8scUJBQXFCLFNBQVMsUUFBUSxJQUFJLFFBQVEsU0FBUyxLQUFLLElBQUksUUFBUSxLQUFLO0FBQ3RHLFlBQUksYUFBYTtBQUFBLE1BQ2xCLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxTQUFTLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUN4RCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ2IsQ0FBQztBQUNELFlBQU0sVUFBVSxhQUFhLFVBQVUsY0FBYztBQUFBLFFBQ3BELFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFFQSxlQUFlO0FBQUEsUUFDZixTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0QsQ0FBQztBQUdELGFBQU8sTUFBTSxVQUFVLE9BQU87QUFFOUIsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksZ0JBQWdCO0FBQUEsVUFDbkIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFDQSxZQUFJLFNBQVM7QUFDYixZQUFJLFVBQVU7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQ0EsWUFBSSxvQkFBb0I7QUFBQSxVQUN2QixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksWUFBWSxpQkFBaUIsT0FBTyxTQUFTO0FBQ2pELFlBQUlRLFNBQVEsT0FBTyxZQUFZLE1BQU0sU0FBUztBQUc5QyxZQUFJLFlBQVk7QUFBQSxVQUNmLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBRUEsUUFBQVIsT0FBTSxVQUFVLFFBQVE7QUFBQSxVQUN2QixjQUFjO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCx1QkFBdUI7QUFBQSxnQkFDdEIsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsMEJBQTBCO0FBQUEsZ0JBQ3pCLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsU0FBUztBQUFBLGdCQUNSLFNBQVNRO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLFVBQVU7QUFBQSxrQkFDVixxQkFBcUI7QUFBQSxvQkFDcEIsU0FBUztBQUFBLG9CQUNULE9BQU87QUFBQSxrQkFDUjtBQUFBLGdCQUNEO0FBQUEsY0FDRDtBQUFBLGNBQ0Esa0JBQWtCO0FBQUEsY0FDbEIsWUFBWTtBQUFBLGNBQ1osVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsVUFDQSxrQkFBa0I7QUFBQSxVQUNsQixZQUFZO0FBQUEsVUFDWixpQkFBaUI7QUFBQSxZQUNoQjtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsZ0JBQ1AsY0FBYztBQUFBLGNBQ2Y7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxZQUNSO0FBQUEsY0FLQyxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCxRQUFRO0FBQUEsZ0JBQ1AsY0FBYztBQUFBLGNBQ2Y7QUFBQSxZQUNEO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQUEsVUFDQSxjQUFjO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsZUFBZTtBQUFBLFlBQ2QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBQUEsTUFFRCxHQUFFLEtBQUs7QUFJUCxZQUFNLFVBQVUsT0FBTztBQUFBLFFBQ3RCLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBRVgsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsYUFBYTtBQUFBLFlBQ2IsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBRUEsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLFFBQVE7QUFBQSxRQUN2QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBRUEsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFlBQVk7QUFBQSxRQUVaLFlBQVk7QUFBQSxRQUVaLE9BQU87QUFBQSxRQUVQLFdBQVc7QUFBQSxRQUVYLFdBQVc7QUFBQSxRQUVYLFVBQVU7QUFBQSxRQUVWLFlBQVk7QUFBQSxRQUVaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxNQUFNLE1BQU0sVUFBVTtBQUV0QyxZQUFNLFVBQVUsV0FBVztBQUFBLFFBQzFCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxRQUFRLEVBQUUsU0FBUywrQkFBK0IsUUFBUSxLQUFLO0FBQUEsUUFDL0QsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxRQUNkLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsT0FBTztBQUFBLFVBQ04sU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsYUFBYSxZQUFZLFVBQVU7QUFBQSxRQUNsRCxtQkFBbUI7QUFBQSxVQUNsQixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsWUFDUCx3QkFBd0I7QUFBQSxjQUN2QixTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsaUJBQWlCO0FBQUEsY0FDaEIsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLGdCQUNQLDZCQUE2QjtBQUFBLGtCQUM1QixTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGdCQUNSO0FBQUEsZ0JBQ0EsTUFBTSxNQUFNLFVBQVU7QUFBQSxjQUN2QjtBQUFBLFlBQ0Q7QUFBQSxZQUNBLFVBQVU7QUFBQSxVQUNYO0FBQUEsUUFDRDtBQUFBLE1BQ0QsQ0FBQztBQUVELFlBQU0sVUFBVSxNQUFNLE1BQU0sVUFBVTtBQUV0QyxZQUFNLFVBQVUsT0FBTztBQUFBLFFBQ3RCLFNBQVM7QUFBQSxVQUNSO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUlBLG9CQUFvQjtBQUFBLFVBQ25CLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLGdCQUFnQjtBQUFBLGNBQ2YsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBLGFBQWE7QUFBQSxjQUNaLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNkO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUVWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFFQSxTQUFTO0FBQUEsVUFFUjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLGNBQ2YsYUFBYTtBQUFBLFlBQ2Q7QUFBQSxVQUNEO0FBQUEsVUFHQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLGNBQ2YsYUFBYTtBQUFBLFlBQ2Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0wsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSx1QkFBdUI7QUFBQSxVQUN0QixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsNkJBQTZCO0FBQUEsY0FDNUIsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDdkIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsNkJBQTZCO0FBQUEsY0FDNUIsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ2QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUVBLFVBQVU7QUFBQSxVQUNUO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxRQUFRO0FBQUEsZ0JBQ1AsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxVQUFVO0FBQUEsZ0JBQ1QsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxrQkFBa0I7QUFBQSxnQkFDakIsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsUUFBUTtBQUFBLGdCQUNQLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsZ0JBQ1AsUUFBUTtBQUFBLGtCQUNQLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsY0FDQSxvQkFBb0I7QUFBQSxnQkFDbkIsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsZ0JBQWdCO0FBQUEsZ0JBQ2YsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUVBLFFBQVE7QUFBQSxVQUNQO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQU1BLGVBQWU7QUFBQSxVQUNkLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUVBLFlBQU0sVUFBVSxNQUFNO0FBQUEsUUFDckIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFdBQVc7QUFBQSxRQUVYLFdBQVc7QUFBQSxRQUVYLFdBQVc7QUFBQSxRQUVYLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLFlBQVk7QUFBQSxRQUVaLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxRQUVWLGVBQWU7QUFBQSxRQUVmLGFBQWE7QUFBQSxNQUNkO0FBRUEsWUFBTSxVQUFVLFdBQVc7QUFBQSxRQUMxQixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsVUFDVixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGVBQWU7QUFBQSxNQUNoQjtBQUVBLE9BQUMsU0FBVVIsUUFBTztBQUVqQixZQUFJLFVBQVU7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxRQUNUO0FBRUEsWUFBSSxXQUFXO0FBQUEsVUFDZCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsWUFDUCxlQUFlO0FBQUEsVUFDaEI7QUFBQSxRQUNEO0FBRUEsaUJBQVMsY0FBYyxNQUFNLFFBQVE7QUFDcEMsY0FBSSxpQkFBaUIsQ0FBQztBQUV0Qix5QkFBZSxvQkFBb0I7QUFBQSxZQUNsQyxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUdBLG1CQUFTLFNBQVMsUUFBUTtBQUN6QiwyQkFBZSxTQUFTLE9BQU87QUFBQSxVQUNoQztBQUVBLHlCQUFlLFNBQVM7QUFBQSxZQUN2QixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQ0EseUJBQWUsY0FBYztBQUM3Qix5QkFBZSxhQUFhO0FBRTVCLGlCQUFPO0FBQUEsWUFDTixTQUFTLE9BQU8sd0RBQXdELE9BQU8sUUFBUSxXQUFXLFdBQVk7QUFBRSxxQkFBTztBQUFBLFlBQU0sQ0FBQyxHQUFHLElBQUk7QUFBQSxZQUNySSxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsVUFDVDtBQUFBLFFBQ0Q7QUFHQSxZQUFJLFNBQVM7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBRUEsWUFBSSxlQUFlO0FBQUEsVUFDbEIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBRUEsWUFBSSxtQkFBbUI7QUFBQSxVQUN0QixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsWUFDUCxZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFFQSxRQUFBQSxPQUFNLFVBQVUsb0JBQW9CO0FBQUEsVUFDbkMsWUFBWSxjQUFjLFlBQVk7QUFBQSxZQUNyQyxpQkFBaUI7QUFBQSxjQUNoQixTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsWUFBWTtBQUFBLGNBQ1gsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNELENBQUM7QUFBQSxVQUNELGFBQWEsY0FBYyxXQUFXO0FBQUEsVUFDdEMsY0FBYyxjQUFjLGNBQWM7QUFBQSxZQUN6QyxhQUFhO0FBQUEsWUFDYixpQkFBaUI7QUFBQSxZQUNqQixZQUFZO0FBQUEsVUFDYixDQUFDO0FBQUEsVUFDRCxZQUFZLGNBQWMsWUFBWTtBQUFBLFlBQ3JDLGdCQUFnQjtBQUFBLFlBQ2hCLGlCQUFpQjtBQUFBLFlBQ2pCLFlBQVk7QUFBQSxVQUNiLENBQUM7QUFBQSxVQUNELFNBQVMsY0FBYyxTQUFTO0FBQUEsWUFDL0IsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFVBQ2IsQ0FBQztBQUFBLFVBQ0QsV0FBVztBQUFBLFFBQ1o7QUFFQSxRQUFBQSxPQUFNLFVBQVUsUUFBUUEsT0FBTSxVQUFVO0FBQUEsTUFFekMsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksbUJBQW1CLDhDQUE4QztBQUNyRSxpQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFFM0IsNkJBQW1CLGlCQUFpQixRQUFRLFdBQVcsV0FBWTtBQUFFLG1CQUFPO0FBQUEsVUFBa0IsQ0FBQztBQUFBLFFBQ2hHO0FBQ0EsMkJBQW1CLGlCQUFpQixRQUFRLFdBQVcsV0FBWTtBQUFFLGlCQUFPLFVBQVU7QUFBQSxRQUFRLENBQUM7QUFHL0YsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUN0QixXQUFXO0FBQUEsWUFDVjtBQUFBLGNBQ0MsU0FBUyxPQUFPLFlBQVksU0FBUyxnQkFBZ0I7QUFBQSxjQUNyRCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxVQUFVO0FBQUEsWUFDWDtBQUFBLFVBQ0Q7QUFBQSxVQUdBLGtCQUFrQjtBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLHVCQUF1QjtBQUFBLGdCQUN0QixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLE1BQU07QUFBQSxZQUNQO0FBQUEsVUFDRDtBQUFBLFVBRUEsdUJBQXVCO0FBQUEsWUFDdEIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLHNCQUFzQjtBQUFBLFlBQ3JCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFFWix1QkFBdUI7QUFBQSxZQUN0QixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsbUJBQW1CO0FBQUEsWUFDbEIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLHNCQUFzQjtBQUFBLFlBQ3JCO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBRVY7QUFBQSxZQUdBO0FBQUEsVUFDRDtBQUFBLFVBS0EsWUFBWTtBQUFBLFVBQ1osU0FBUztBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUVkLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUdBLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxVQUNmLFlBQVk7QUFBQSxRQUNiO0FBRUEsUUFBQUEsT0FBTSxVQUFVLEtBQUssa0JBQWtCLE9BQU8sT0FBT0EsT0FBTSxVQUFVO0FBQ3JFLFFBQUFBLE9BQU0sVUFBVSxLQUFLLGFBQWEsT0FBTyxZQUFZQSxPQUFNLFVBQVUsS0FBSztBQUFBLE1BRTNFLEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLGdCQUFnQiw4Q0FBOEM7QUFFbEUsWUFBSSxTQUFTO0FBQ2IsWUFBSSxrQkFBa0I7QUFBQSxVQUNyQixTQUFTLE9BQU8sZ0JBQWdCLE1BQU07QUFBQSxVQUN0QyxPQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksZ0JBQWdCO0FBQUEsVUFDbkIsU0FBUztBQUFBLFFBQ1Y7QUFFQSxZQUFJLGVBQWU7QUFBQSxVQUNsQixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksT0FBTztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsWUFBWTtBQUFBLFFBQ2I7QUFFQSxZQUFJLFVBQVU7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBRUEsWUFBSSxTQUFTO0FBQUEsVUFDWixTQUFTLE9BQU8sYUFBYTtBQUFBLFVBQzdCLFFBQVE7QUFBQSxRQUNUO0FBRUEsWUFBSSxjQUFjO0FBRWxCLFlBQUksT0FBTztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFFQSxZQUFJLE9BQU87QUFBQSxVQUNWLFlBQVk7QUFBQSxVQUNaLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixrQkFBa0I7QUFBQSxVQUNsQixPQUFPO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsVUFBVTtBQUFBLFVBQ1Ysb0JBQW9CO0FBQUEsVUFDcEIsZUFBZTtBQUFBLFVBQ2YsVUFBVTtBQUFBLFFBQ1g7QUFFQSxZQUFJUyxVQUFTO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsWUFDUCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsY0FDVCxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsWUFBSSxZQUFZO0FBQUEsVUFDZixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsWUFDUCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsY0FDVCxTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsWUFBSSxtQkFBbUI7QUFBQSxVQUN0QixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksa0JBQWtCO0FBQUEsVUFDckIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFFQSxZQUFJLGFBQWEsK2lDQUEraUM7QUFFaGtDLFlBQUksYUFBYTtBQUFBLFVBQ2hCLFNBQVMsT0FBTywrQ0FBK0MsT0FBTyxRQUFRLFVBQVUsV0FBWTtBQUFFLG1CQUFPO0FBQUEsVUFBWSxDQUFDLEdBQUcsR0FBRztBQUFBLFVBQ2hJLFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLFdBQVcsT0FBTyxzQkFBc0IsT0FBTyxRQUFRLFVBQVUsV0FBWTtBQUFFLHFCQUFPO0FBQUEsWUFBWSxDQUFDLEdBQUcsR0FBRztBQUFBLFlBQ3pHLFVBQVU7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxXQUFXO0FBQUEsWUFDWCxZQUFZO0FBQUEsWUFDWixhQUFhLEtBQUs7QUFBQSxZQUNsQixZQUFZLEtBQUs7QUFBQSxZQUNqQixZQUFZLEtBQUs7QUFBQSxZQUNqQixVQUFVO0FBQUEsWUFDVixvQkFBb0I7QUFBQSxZQUNwQixlQUFlO0FBQUEsWUFDZixVQUFVO0FBQUEsVUFDWDtBQUFBLFFBQ0Q7QUFFQSxZQUFJLFdBQVc7QUFBQSxVQUNkLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBRUEsUUFBQVQsT0FBTSxVQUFVLE1BQU07QUFBQSxVQUNyQixhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGNBQ1Y7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUVBLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLE9BQU87QUFBQSxnQkFDTixTQUFTLE9BQU8sb0tBQW9LLE9BQU8sUUFBUSxVQUFVLFdBQVk7QUFBRSx5QkFBTztBQUFBLGdCQUFlLENBQUMsR0FBRyxJQUFJO0FBQUEsZ0JBQ3pQLE9BQU87QUFBQSxnQkFDUCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxjQUN6QjtBQUFBLGNBQ0EscUJBQXFCO0FBQUEsY0FDckIsa0JBQWtCO0FBQUEsZ0JBQ2pCLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osT0FBTztBQUFBLGNBQ1I7QUFBQSxjQUNBLFVBQVU7QUFBQSxjQUNWLG9CQUFvQjtBQUFBLGNBQ3BCLGVBQWU7QUFBQSxjQUNmLFVBQVU7QUFBQSxZQUNYO0FBQUEsVUFDRDtBQUFBLFVBRUEsZUFBZTtBQUFBLFlBQ2QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLGNBQ1gsVUFBVTtBQUFBLGdCQUNULFNBQVMsT0FBTyxpRkFBaUYsT0FBTyxRQUFRLFVBQVUsV0FBWTtBQUFFLHlCQUFPO0FBQUEsZ0JBQWUsQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDdEssWUFBWTtBQUFBLGdCQUNaLE9BQU87QUFBQSxnQkFDUCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxjQUN6QjtBQUFBLGNBQ0EsV0FBVztBQUFBLGNBQ1gsb0JBQW9CO0FBQUEsY0FDcEIscUJBQXFCO0FBQUEsY0FDckIsVUFBVTtBQUFBLGNBQ1Ysb0JBQW9CO0FBQUEsY0FDcEIsZUFBZTtBQUFBLGNBQ2YsVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsVUFFQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsY0FDWCxPQUFPO0FBQUEsZ0JBQ04sU0FBUyxPQUFPLGlGQUFpRixPQUFPLFFBQVEsVUFBVSxXQUFZO0FBQUUseUJBQU87QUFBQSxnQkFBZSxDQUFDLEdBQUcsSUFBSTtBQUFBLGdCQUN0SyxZQUFZO0FBQUEsZ0JBQ1osT0FBTztBQUFBLGdCQUNQLFFBQVFBLE9BQU0sVUFBVTtBQUFBLGNBQ3pCO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWCxvQkFBb0I7QUFBQSxjQUNwQixxQkFBcUI7QUFBQSxjQUNyQixVQUFVO0FBQUEsY0FDVixvQkFBb0I7QUFBQSxjQUNwQixlQUFlO0FBQUEsY0FDZixVQUFVO0FBQUEsWUFDWDtBQUFBLFVBQ0Q7QUFBQSxVQUVBLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxjQUNYLGlCQUFpQjtBQUFBLGdCQUNoQixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxrQkFFUCxhQUFhO0FBQUEsb0JBQ1osU0FBUztBQUFBLG9CQUNULFFBQVE7QUFBQSxzQkFDUCxTQUFTO0FBQUEsb0JBQ1Y7QUFBQSxrQkFDRDtBQUFBLGtCQUNBLE1BQU07QUFBQSxnQkFDUDtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGVBQWU7QUFBQSxjQUNmLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxjQUNUO0FBQUEsY0FDQSxRQUFRO0FBQUEsY0FDUixXQUFXO0FBQUEsY0FDWCxZQUFZO0FBQUEsY0FDWixVQUFVUztBQUFBLGNBQ1YsYUFBYTtBQUFBLGNBQ2IscUJBQXFCO0FBQUEsY0FDckIsVUFBVTtBQUFBLGNBQ1Ysb0JBQW9CO0FBQUEsY0FDcEIsZUFBZTtBQUFBLGNBQ2YsVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsVUFFQSxhQUFhO0FBQUEsWUFDWixTQUFTLE9BQU8sMkNBQTJDLE9BQU8sUUFBUSxVQUFVLFdBQVk7QUFBRSxxQkFBTztBQUFBLFlBQWUsQ0FBQyxHQUFHLElBQUk7QUFBQSxZQUNoSSxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBRUEsaUJBQWlCO0FBQUEsVUFDakIsa0JBQWtCO0FBQUEsVUFDbEIsMEJBQTBCO0FBQUEsWUFDekIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsWUFBWTtBQUFBLGdCQUNYLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsaUJBQWlCO0FBQUEsY0FDakIsa0JBQWtCO0FBQUEsY0FDbEIsZ0JBQWdCO0FBQUEsZ0JBQ2YsU0FBUztBQUFBLGNBQ1Y7QUFBQSxjQUNBLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLHFCQUFxQjtBQUFBLFlBQ3BCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxZQUNaO0FBQUEsVUFDRDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLFlBQ1o7QUFBQSxVQUNEO0FBQUEsVUFFQSxTQUFTO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsU0FBUztBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsU0FBUztBQUFBLGdCQUNSLE9BQU87QUFBQSxnQkFDUCxTQUFTO0FBQUEsY0FDVjtBQUFBLGNBQ0EsV0FBVztBQUFBLGNBQ1gsVUFBVTtBQUFBLGNBQ1Ysb0JBQW9CO0FBQUEsWUFDckI7QUFBQSxVQUNEO0FBQUEsVUFDQSxnQkFBZ0I7QUFBQSxZQUNmLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxlQUFlO0FBQUEsVUFDZixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixVQUFVQTtBQUFBLFVBQ1YsYUFBYTtBQUFBLFVBQ2Isb0JBQW9CO0FBQUEsVUFDcEIsWUFBWTtBQUFBLFlBRVgsU0FBUyxPQUFPLGdCQUFnQixXQUFXO0FBQUEsWUFDM0MsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxVQUNSLFdBQVc7QUFBQSxVQUVYLG9CQUFvQjtBQUFBLFlBQ25CLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSxVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFBQSxNQUVELEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVVQsUUFBTztBQUNqQixRQUFBQSxPQUFNLFVBQVUsT0FBT0EsT0FBTSxVQUFVLE9BQU8sT0FBTztBQUFBLFVBRXBELFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsUUFBUSxVQUFVO0FBQUEsVUFFOUMsZUFBZTtBQUFBLFlBRWQsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBQ0QsZUFBT0EsT0FBTSxVQUFVLEtBQUs7QUFHNUIsWUFBSSxXQUFXO0FBQ2YsWUFBSSxXQUFXO0FBQUEsVUFDZDtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxhQUFhLFFBQVEsWUFBWTtBQUFBLFVBRWhELGlCQUFpQjtBQUFBLFlBQ2hCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxjQUNmLFlBQVk7QUFBQSxjQUNaLFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBRUEsaUJBQWlCO0FBQUEsWUFDaEIsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsWUFBWTtBQUFBLGdCQUNYO0FBQUEsZ0JBQ0E7QUFBQSxrQkFDQyxTQUFTO0FBQUEsa0JBQ1QsWUFBWTtBQUFBLGdCQUNiO0FBQUEsY0FDRDtBQUFBLGNBQ0EsZUFBZTtBQUFBLGNBQ2YsWUFBWTtBQUFBLGNBQ1osWUFBWTtBQUFBLGNBQ1osYUFBYUEsT0FBTSxVQUFVLEtBQUs7QUFBQSxZQUNuQztBQUFBLFVBQ0Q7QUFBQSxRQUNELENBQUM7QUFDRCxlQUFPQSxPQUFNLFVBQVUsS0FBSztBQUM1QixlQUFPQSxPQUFNLFVBQVUsS0FBSztBQUk1QixRQUFBQSxPQUFNLFVBQVUsYUFBYSxRQUFRLGVBQWU7QUFBQSxVQUNuRCxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFFBQ0QsQ0FBQztBQUFBLE1BRUYsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLE9BQU8sTUFBTSxVQUFVLE9BQU8sT0FBTztBQUFBLFFBQ3BELFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsWUFDUCxRQUFRO0FBQUEsVUFFVDtBQUFBLFFBQ0Q7QUFBQSxRQUVBLE9BQU87QUFBQSxRQVFQLFlBQVk7QUFBQSxVQUVYLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLFVBQVU7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxlQUFlO0FBQUEsWUFDZixZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLE1BQ0QsQ0FBQztBQUVELFlBQU0sVUFBVSxhQUFhLFFBQVEsVUFBVTtBQUFBLFFBQzlDLFdBQVc7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsUUFBUSxhQUFhO0FBQUEsUUFFakQsWUFBWTtBQUFBLE1BQ2IsQ0FBQztBQUVELFlBQU0sVUFBVSxhQUFhLFFBQVEsWUFBWTtBQUFBLFFBQ2hELG1CQUFtQjtBQUFBLFVBQ2xCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDZCxTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLE1BQ0QsQ0FBQztBQUVELFlBQU0sVUFBVSxLQUFLLFVBQVUsT0FBTyxPQUFPLE1BQU0sVUFBVTtBQUU3RCxZQUFNLFVBQVUsUUFBUSxNQUFNLFVBQVUsT0FBTyxRQUFRO0FBQUEsUUFDdEQsd0JBQXdCO0FBQUEsVUFDdkIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsTUFDWCxDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsU0FBUyx3QkFBd0I7QUFBQSxRQUM3RCx3QkFBd0I7QUFBQSxVQUN2QixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsWUFDUCxNQUFNO0FBQUEsY0FDTCxTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsY0FDUixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBQ1QsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGNBQ1IsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLGlCQUFpQjtBQUFBLGNBQ2hCLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsZ0JBQ2YsY0FBYztBQUFBLGtCQUNiLFNBQVM7QUFBQSxrQkFDVCxRQUFRLE1BQU0sVUFBVTtBQUFBLGdCQUN6QjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQSxVQUFVO0FBQUEsVUFDWDtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxhQUFPLE1BQU0sVUFBVSxNQUFNO0FBQzdCLGFBQU8sTUFBTSxVQUFVLE1BQU07QUFFN0IsT0FBQyxTQUFVQSxRQUFPO0FBS2pCLFlBQUksVUFBVTtBQUFBLFVBRWIsd0RBQXdEO0FBQUEsVUFDeEQsVUFBVTtBQUFBLFVBQ1YsMkJBQTJCO0FBQUEsVUFJM0IsMENBQTBDO0FBQUEsUUFDM0MsRUFBRSxLQUFLLEdBQUc7QUFFVixRQUFBQSxPQUFNLFVBQVUsbUJBQW1CO0FBQUEsVUFDbEMsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLGNBRVIsSUFBSSxTQUNKLFNBR0Msa0VBQWtFLFNBQ2xFLE1BSUEsK0JBQStCLFVBRWhDLE9BRUEsY0FBYyxTQUVkLHFGQUFxRixPQUFPLFFBQVEsWUFBWSxXQUFZO0FBQUUsdUJBQU87QUFBQSxjQUFTLENBQUM7QUFBQSxjQUMvSTtBQUFBLFlBQ0Q7QUFBQSxZQUNBLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLFFBQVE7QUFBQSxnQkFJUCxTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGdCQUNQLFFBQVE7QUFBQSxrQkFDUCxRQUFRO0FBQUEsa0JBQ1IsZUFBZTtBQUFBLGtCQUNmLFFBQVE7QUFBQSxnQkFDVDtBQUFBLGNBQ0Q7QUFBQSxjQUNBLFFBQVE7QUFBQSxnQkFDUCxTQUFTO0FBQUEsZ0JBQ1QsWUFBWTtBQUFBLGdCQUNaLE9BQU87QUFBQSxnQkFDUCxRQUFRQSxPQUFNLFVBQVU7QUFBQSxjQUN6QjtBQUFBLGNBQ0EsZ0JBQWdCO0FBQUEsZ0JBQ2YsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxjQUNSO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxRQUNYO0FBRUEsUUFBQUEsT0FBTSxVQUFVLGdCQUFnQkEsT0FBTSxVQUFVLGtCQUFrQkEsT0FBTSxVQUFVO0FBQUEsTUFFbkYsR0FBRSxLQUFLO0FBS1AsWUFBTSxVQUFVLFFBQVE7QUFBQSxRQUN2QixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsY0FBYztBQUFBLGNBQ2IsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBLGFBQWE7QUFBQSxjQUNaLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsWUFDQSxXQUFXO0FBQUEsVUFDWjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNWO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxZQUVDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1Y7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFFQSxTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBRUEsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxZQUFZO0FBQUEsUUFDM0IsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsbUJBQW1CO0FBQUEsVUFDbEIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDdEIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFFBQUFBLE9BQU0sVUFBVSxTQUFTO0FBQUEsVUFDeEIsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBQ2YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsVUFBVTtBQUFBLGdCQUNULFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsY0FDVDtBQUFBLGNBQ0EsT0FBTztBQUFBLGdCQUNOLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsZ0JBQ1AsUUFBUUEsT0FBTSxVQUFVO0FBQUEsY0FDekI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1Q7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxnQkFDUCxpQkFBaUI7QUFBQSxrQkFDaEIsU0FBUztBQUFBLGtCQUNULFFBQVE7QUFBQSxvQkFDUCw2QkFBNkI7QUFBQSxzQkFDNUIsU0FBUztBQUFBLHNCQUNULE9BQU87QUFBQSxvQkFDUjtBQUFBLG9CQUNBLGNBQWM7QUFBQSxzQkFDYixTQUFTO0FBQUEsc0JBQ1QsUUFBUTtBQUFBLG9CQUNUO0FBQUEsa0JBQ0Q7QUFBQSxnQkFDRDtBQUFBLGdCQUNBLFlBQVk7QUFBQSxjQUNiO0FBQUEsWUFDRDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsWUFDWDtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLGFBQWE7QUFBQSxVQUNiLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxVQUNmLFlBQVk7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxPQUFPLGdCQUFnQixPQUFPLE9BQU8sU0FBU0EsT0FBTSxVQUFVO0FBQzlFLFFBQUFBLE9BQU0sVUFBVSxPQUFPLE9BQU8sR0FBRyxPQUFPLGNBQWMsT0FBTyxXQUFXLFNBQVNBLE9BQU0sVUFBVTtBQUVqRyxZQUFJLFNBQVM7QUFDYixZQUFJLGdCQUFnQjtBQUFBLFVBRW5CLG1CQUFtQixTQUNuQixNQUVBLDJCQUEyQixTQUMzQixNQUVBLHVFQUF1RSxPQUNyRSxRQUFRLFVBQVUsV0FBWTtBQUFFLG1CQUFPLE9BQU87QUFBQSxVQUFRLENBQUM7QUFBQSxVQUN6RDtBQUFBLFFBQ0Q7QUFHQSxRQUFBQSxPQUFNLE1BQU0sSUFBSSxtQkFBbUIsU0FBVSxLQUFLO0FBQ2pELGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksb0JBQW9CO0FBRXhCLFVBQUFBLE9BQU0sVUFBVSxxQkFBcUIsa0JBQWtCLEtBQUssVUFBVSxlQUFlLFNBQVUsT0FBTztBQUVyRyxnQkFBSSxVQUFVLGtCQUFrQjtBQUMvQixrQ0FBb0I7QUFBQSxZQUNyQjtBQUVBLGdCQUFJLENBQUMsbUJBQW1CO0FBQ3ZCLGtCQUFJLFVBQVUsb0JBQW9CO0FBQ2pDLG9DQUFvQjtBQUFBLGNBQ3JCO0FBRUEscUJBQU87QUFBQSxZQUNSO0FBQ0EsbUJBQU87QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNGLENBQUM7QUFHRCxRQUFBQSxPQUFNLE1BQU0sSUFBSSxrQkFBa0IsU0FBVSxLQUFLO0FBQ2hELFVBQUFBLE9BQU0sVUFBVSxxQkFBcUIscUJBQXFCLEtBQUssUUFBUTtBQUFBLFFBQ3hFLENBQUM7QUFBQSxNQUVGLEdBQUUsS0FBSztBQUlQLE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFdBQVc7QUFFZixRQUFBQSxPQUFNLFVBQVUsTUFBTTtBQUFBLFVBRXJCLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFFQSxjQUFjO0FBQUEsWUFDYjtBQUFBLGNBT0MsU0FBUztBQUFBLGdCQUNSLDJIQUEySCxPQUN6SCxRQUFRLGVBQWUsV0FBWTtBQUFFLHlCQUFPLGlCQUFpQjtBQUFBLGdCQUFRLENBQUMsRUFDdEUsUUFBUSxlQUFlLFdBQVk7QUFDbkMseUJBQU8sNkZBQTZGO0FBQUEsZ0JBQ3JHLENBQUMsRUFDQSxRQUFRLGNBQWMsV0FBWTtBQUFFLHlCQUFPLCtCQUErQjtBQUFBLGdCQUFRLENBQUMsRUFDbkYsUUFBUSxjQUFjLFdBQVk7QUFBRSx5QkFBTyxTQUFTO0FBQUEsZ0JBQVEsQ0FBQztBQUFBLGdCQUMvRDtBQUFBLGNBQ0Q7QUFBQSxjQUNBLFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBRUEsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUVBLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxVQUNSO0FBQUEsVUFFQSxXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFFQSxRQUFBQSxPQUFNLFVBQVUsSUFBSSxjQUFjLEdBQUcsU0FBU0EsT0FBTSxVQUFVO0FBRTlELFFBQUFBLE9BQU0sVUFBVSxRQUFRQSxPQUFNLFVBQVU7QUFBQSxNQUV6QyxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsV0FBVyxNQUFNLFVBQVUsT0FBTyxTQUFTO0FBQUEsUUFDMUQsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxNQUNiLENBQUM7QUFFRCxZQUFNLFVBQVUsYUFBYSxZQUFZLFdBQVc7QUFBQSxRQUNuRCxXQUFXO0FBQUEsTUFDWixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsWUFBWSxVQUFVO0FBQUEsUUFDbEQsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxNQUNELENBQUM7QUFFRCxZQUFNLFVBQVUsTUFBTSxNQUFNLFVBQVU7QUFFdEMsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksT0FBTztBQUFBLFVBRVYsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxtQkFBbUI7QUFBQSxVQUNsQyxXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFNVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxRQUFRO0FBQUEsVUFDUixVQUFVO0FBQUEsVUFDVixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFFQSxRQUFBQSxPQUFNLFVBQVUsU0FBU0EsT0FBTSxVQUFVO0FBQUEsTUFFMUMsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBQ2pCLFlBQUksZ0JBQWdCO0FBQ3BCLFlBQUksZ0JBQWdCO0FBRXBCLFFBQUFBLE9BQU0sVUFBVSxNQUFNO0FBQUEsVUFDckIsV0FBVztBQUFBLFlBQ1Y7QUFBQSxZQUNBO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGVBQWU7QUFBQSxZQUNkLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFDVjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLFVBQVU7QUFBQSxnQkFDVCxTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGNBQ1Q7QUFBQSxjQUNBLFVBQVU7QUFBQSxjQUNWLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCO0FBR0EsUUFBQUEsT0FBTSxNQUFNLElBQUksbUJBQW1CLFNBQVUsS0FBSztBQUNqRCxjQUFJLGFBQWE7QUFDakIsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxrQkFBa0I7QUFFdEIsVUFBQUEsT0FBTSxVQUFVLHFCQUFxQixrQkFBa0IsS0FBSyxPQUFPLFlBQVksU0FBVSxPQUFPO0FBRS9GLGdCQUFJLFVBQVUsZ0JBQWdCO0FBQzdCLGdDQUFrQjtBQUFBLFlBQ25CO0FBRUEsZ0JBQUksQ0FBQyxpQkFBaUI7QUFDckIsa0JBQUksVUFBVSxrQkFBa0I7QUFDL0Isa0NBQWtCO0FBQUEsY0FDbkI7QUFFQSxxQkFBTztBQUFBLFlBQ1I7QUFDQSxtQkFBTztBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0YsQ0FBQztBQUdELFFBQUFBLE9BQU0sTUFBTSxJQUFJLGtCQUFrQixTQUFVLEtBQUs7QUFDaEQsVUFBQUEsT0FBTSxVQUFVLHFCQUFxQixxQkFBcUIsS0FBSyxLQUFLO0FBQUEsUUFDckUsQ0FBQztBQUFBLE1BRUYsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLFNBQVM7QUFBQSxRQUN4QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDbkIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsV0FBVztBQUFBLFVBQ1o7QUFBQSxRQUNEO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsT0FBTztBQUFBLFVBQ04sU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsY0FBYztBQUFBLGNBQ2IsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBLFVBQVU7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDUCxlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLGVBQWU7QUFBQSxRQUNmLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNOLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQ0EsWUFBTSxVQUFVLE9BQU8sTUFBTSxVQUFVO0FBRXZDLFlBQU0sVUFBVSxTQUFTLE1BQU0sVUFBVTtBQUFBLFFBQU87QUFBQSxRQUFVO0FBQUEsVUFDekQsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxRQUNEO0FBQUEsTUFDQTtBQUVBLFlBQU0sVUFBVSxhQUFhLFVBQVUsZUFBZTtBQUFBLFFBQ3JELFdBQVc7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBRUQsWUFBTSxVQUFVLEtBQUssTUFBTSxVQUFVO0FBRXJDLFlBQU0sVUFBVSxnQkFBZ0I7QUFBQSxRQUMvQixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBRUEsV0FBVztBQUFBLFFBQ1gsaUJBQWlCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLFlBQVk7QUFBQSxRQUNaLFFBQVE7QUFBQSxVQUVQLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsTUFBTSxNQUFNLFVBQVUsT0FBTyxTQUFTO0FBQUEsUUFDckQsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxRQUNaLGtCQUFrQjtBQUFBLFVBQ2pCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsTUFDYixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsT0FBTyxVQUFVO0FBQUEsUUFDN0MsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsYUFBYTtBQUFBLGNBQ1osU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLFdBQVcsTUFBTSxVQUFVLElBQUk7QUFBQSxVQUNoQztBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxhQUFPLE1BQU0sVUFBVSxJQUFJO0FBRTNCLFlBQU0sVUFBVSxXQUFXLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUMxRCxXQUFXO0FBQUEsVUFDVixNQUFNLFVBQVUsTUFBTSxXQUFXO0FBQUEsVUFDakM7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLGNBQWM7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUVYLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsWUFBWSxVQUFVO0FBQUEsUUFDbEQsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxNQUNELENBQUM7QUFFRCxZQUFNLFVBQVUsYUFBYSxZQUFZLFlBQVk7QUFBQSxRQUNwRCx5QkFBeUI7QUFBQSxVQUN4QixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxNQUNELENBQUM7QUFFRCxPQUFDLFNBQVVBLFFBQU87QUFJakIsWUFBSSx1QkFBdUI7QUFFM0IsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUN0QixXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsWUFHVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUVBLGdCQUFnQjtBQUFBLFlBQ2YsU0FBUztBQUFBLGNBQ1IsTUFDQSxxQkFBcUIsU0FDckIsV0FBVyxTQUNYLE1BQ0EsY0FBYztBQUFBLFlBQ2Y7QUFBQSxZQUNBLFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxjQUFjO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxjQUFjO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsY0FDVDtBQUFBLGNBQ0EsWUFBWTtBQUFBLGNBQ1osWUFBWTtBQUFBLGNBQ1osZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1Y7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFlBRUE7QUFBQSxVQUNEO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixXQUFXO0FBQUEsVUFFWCxZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFFQSxRQUFBQSxPQUFNLFVBQVUsS0FBSyxXQUFXLE9BQU8sV0FBVyxTQUFTQSxPQUFNLFVBQVU7QUFBQSxNQUU1RSxHQUFFLEtBQUs7QUFLUCxZQUFNLFVBQVUsUUFBUTtBQUFBLFFBQ3ZCLFdBQVc7QUFBQSxVQUNWO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsUUFDRDtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsVUFDakIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFlBQ1AsaUJBQWlCO0FBQUEsY0FDaEIsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLGVBQWU7QUFBQSxnQkFDZixjQUFjO0FBQUEsa0JBQ2IsU0FBUztBQUFBLGtCQUNULFFBQVE7QUFBQSxnQkFDVDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQSxVQUFVO0FBQUEsVUFDWDtBQUFBLFFBQ0Q7QUFBQSxRQUVBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLFFBQVEsTUFBTSxVQUFVO0FBQUEsUUFDekI7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLFFBQVEsTUFBTSxVQUFVO0FBQUEsUUFDekI7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLFFBQVEsTUFBTSxVQUFVO0FBQUEsUUFDekI7QUFBQSxRQUdBLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixXQUFXO0FBQUEsUUFHWCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFFWixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsTUFBTSxrQkFBa0IsT0FBTyxjQUFjLE9BQU8sV0FBVyxTQUFTLE1BQU0sVUFBVTtBQUV4RyxZQUFNLFVBQVUsUUFBUTtBQUFBLFFBQ3ZCLFdBQVc7QUFBQSxVQUNWO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsUUFDRDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFDakIsWUFBSSxPQUFPO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUVBLFlBQUksU0FBUztBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFFQSxZQUFJLFNBQVM7QUFBQSxVQUNaLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxPQUFPO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLGlCQUFpQjtBQUFBLFVBQ2pCLFFBQVE7QUFBQSxVQUNSLGFBQWE7QUFBQSxVQUNiLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWCxTQUFTO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDUCxRQUFRO0FBQUEsZ0JBQ1IsVUFBVTtBQUFBLGdCQUNWLFlBQVk7QUFBQSxnQkFDWixlQUFlO0FBQUEsY0FDaEI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFVBQ1IsV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFlBR1g7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixlQUFlO0FBQUEsUUFDaEI7QUFFQSxlQUFPLG1CQUFtQjtBQUFBLFVBQ3pCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxZQUNQLGFBQWE7QUFBQSxjQUNaLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxNQUFNO0FBQUEsVUFDUDtBQUFBLFFBQ0Q7QUFDQSxlQUFPLFVBQVU7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixNQUFNO0FBQUEsVUFDUDtBQUFBLFFBQ0Q7QUFFQSxRQUFBQSxPQUFNLFVBQVUsU0FBUztBQUFBLFVBQ3hCLHNCQUFzQjtBQUFBLFlBQ3JCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLFVBQVU7QUFBQSxjQUNWLE1BQU07QUFBQSxZQUNQO0FBQUEsVUFDRDtBQUFBLFVBQ0Esd0JBQXdCO0FBQUEsWUFDdkIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsWUFBWTtBQUFBLGNBQ1osTUFBTTtBQUFBLFlBQ1A7QUFBQSxVQUNEO0FBQUEsVUFFQSxhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsY0FDWCxNQUFNO0FBQUEsWUFDUDtBQUFBLFVBQ0Q7QUFBQSxVQUlBLHdCQUF3QjtBQUFBLFlBQ3ZCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLFlBQVk7QUFBQSxnQkFDWCxTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLGlCQUFpQixPQUFPO0FBQUEsZ0JBQ3pCO0FBQUEsY0FDRDtBQUFBLGNBQ0EsTUFBTTtBQUFBLFlBQ1A7QUFBQSxVQUNEO0FBQUEsVUFNQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxpQkFBaUIsT0FBTztBQUFBLGNBQ3hCLFdBQVcsT0FBTztBQUFBLGNBQ2xCLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUVBLFFBQVEsT0FBTztBQUFBLFVBQ2YsVUFBVSxPQUFPO0FBQUEsVUFDakIsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLGlCQUFpQixPQUFPO0FBQUEsVUFDeEIsZUFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFDRCxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsZ0JBQWdCO0FBQUEsUUFDL0IsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUVBLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUVYLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxVQUFVO0FBQUEsUUFDVixjQUFjO0FBQUEsUUFFZCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsU0FBUyxNQUFNLFVBQVU7QUFFekMsWUFBTSxVQUFVLFFBQVE7QUFBQSxRQUN2QixXQUFXO0FBQUEsVUFFVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsVUFFakI7QUFBQSxZQUNDLFNBQVM7QUFBQSxjQUNSLFlBQVksU0FDVixRQUVBLDhEQUE4RCxTQUM5RCxNQUVBLGlFQUFpRSxTQUNqRSxNQUNBLFdBQVc7QUFBQSxZQUNkO0FBQUEsWUFDQSxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxpQkFBaUI7QUFBQSxnQkFDaEIsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsY0FDVDtBQUFBLGNBQ0EsNkJBQTZCO0FBQUEsZ0JBQzVCLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsZUFBZTtBQUFBLGNBQ2YsVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLGNBQ1IsZ0JBQWdCLFNBQ2QsUUFFQSxnRUFBZ0UsU0FDaEUsTUFFQSwyREFBMkQsU0FDM0Q7QUFBQSxZQUVIO0FBQUEsWUFDQSxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxpQkFBaUI7QUFBQSxnQkFDaEIsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRO0FBQUEsY0FDVDtBQUFBLGNBQ0EsNkJBQTZCO0FBQUEsZ0JBQzVCLFNBQVM7QUFBQSxnQkFDVCxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsVUFBVTtBQUFBLFlBQ1g7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBRUEsYUFBYTtBQUFBLFVBRVosU0FBUztBQUFBLFlBQ1IsSUFBSSxTQUNGLFNBRUQsa0JBQWtCLFNBQ2hCLGFBSUEsOEdBQThHLFNBQzlHLFFBRUQsTUFDQSxtQkFBbUIsU0FDbkI7QUFBQSxVQUNIO0FBQUEsVUFDQSxPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsWUFDUCxrQkFBa0I7QUFBQSxZQUNsQixXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsVUFDaEI7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDbEIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSx1QkFBdUI7QUFBQSxVQUN0QixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBRVIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNYLE9BQU87QUFBQSxVQUNOLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxrQkFBa0I7QUFBQSxRQUNsQixRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBR1YsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFFBQ1osWUFBWTtBQUFBLFFBS1osWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLE1BQU0sa0JBQWtCLFFBQVEsU0FBVSxNQUFNO0FBQy9ELGFBQUssT0FBTyxpQkFBaUIsU0FBUyxNQUFNLFVBQVU7QUFBQSxNQUN2RCxDQUFDO0FBSUQsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksVUFBVTtBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFFQSxZQUFJLGVBQWUsNENBQTRDO0FBRS9ELFFBQUFBLE9BQU0sVUFBVSxVQUFVO0FBQUEsVUFDekIsV0FBVztBQUFBLFVBRVgsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLGNBQ2YsZ0JBQWdCO0FBQUEsZ0JBQ2YsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxjQUNSO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUVBLE9BQU87QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxTQUFTO0FBQUEsWUFNUixTQUFTO0FBQUEsY0FDUixrQkFBa0IsU0FFbEIsUUFBUSxlQUFlLHVCQUd0QixVQUFVLFNBRVYsd0JBQStCLGVBQWUsT0FFeEMsc0NBQXNDLFVBRTdDO0FBQUEsWUFDRDtBQUFBLFlBQ0EsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLGNBQ1gsVUFBVTtBQUFBLGdCQUNULFNBQVMsT0FBTyxTQUFTLFNBQVMsWUFBWTtBQUFBLGdCQUM5QyxZQUFZO0FBQUEsZ0JBQ1osUUFBUTtBQUFBLGNBQ1Q7QUFBQSxjQUNBLGVBQWU7QUFBQSxjQUVmLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGNBQ1Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFVBRUEsZUFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFFRCxHQUFFLEtBQUs7QUFFUCxPQUFDLFNBQVVBLFFBQU87QUFFakIsaUJBQVMsWUFBWSxRQUFRLFFBQVEsY0FBYztBQUNsRCxpQkFBTztBQUFBLFlBQ04sU0FBUyxPQUFPLE9BQU8sU0FBUyxjQUFjO0FBQUEsWUFDOUMsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ1AsYUFBYTtBQUFBLGdCQUNaLFNBQVMsT0FBTyxRQUFRLFNBQVMsTUFBTTtBQUFBLGdCQUN2QyxPQUFPO0FBQUEsY0FDUjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLFNBQVM7QUFBQSxnQkFDVDtBQUFBLGdCQUNBLE9BQU87QUFBQSxjQUNSO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsaUJBQVMsU0FBUyxZQUFZO0FBQzdCLGNBQUksVUFBVUEsT0FBTSxVQUFVO0FBQzlCLGNBQUksWUFBWSxjQUFjO0FBRTlCLGlCQUFPO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDUixTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsZ0JBQ1AsYUFBYSxZQUFZLEtBQUs7QUFBQSxrQkFDN0IsY0FBYztBQUFBLG9CQUNiLFNBQVM7QUFBQSxvQkFDVCxRQUFRO0FBQUEsc0JBQ1AsZUFBZTtBQUFBLG9CQUNoQjtBQUFBLGtCQUNEO0FBQUEsa0JBQ0EsV0FBVztBQUFBLGtCQUNYLGFBQWE7QUFBQSxnQkFDZCxDQUFDO0FBQUEsZ0JBQ0QsY0FBYyxZQUFZLEtBQUssU0FBUyxTQUFTO0FBQUEsZ0JBQ2pELGlCQUFpQixZQUFZLE9BQU8sU0FBUyxTQUFTO0FBQUEsZ0JBQ3RELFlBQVksWUFBWSxJQUFJLFNBQVMsU0FBUztBQUFBLGNBQy9DO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsUUFBQUEsT0FBTSxVQUFVLG1CQUFtQixPQUFPLGVBQWUsQ0FBQyxHQUFHLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUFBLE1BRTdGLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxLQUFLLE1BQU0sVUFBVSxXQUFXLE1BQU0sVUFBVSxpQkFBaUIsU0FBUyxRQUFRO0FBRWxHLFlBQU0sVUFBVSxRQUFRLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUN2RCxXQUFXO0FBQUEsVUFDVjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLFlBQ1o7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFVBQ1Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsZUFBZTtBQUFBLE1BQ2hCLENBQUM7QUFFRCxZQUFNLFVBQVUsV0FBVyxNQUFNLFVBQVUsaUJBQWlCLFNBQVMsT0FBTztBQUU1RSxPQUFDLFNBQVVBLFFBQU87QUFJakIsWUFBSSxnQkFBZ0I7QUFFcEIsWUFBSSxNQUFNO0FBRVYsWUFBSSxhQUFhLFFBQVEsSUFBSSxTQUFTLGFBQWMsY0FBYyxTQUFTLFFBQ3hFLGNBQWMsU0FBUyxhQUFjLElBQUksU0FBUztBQUlyRCxZQUFJLFdBQVcsa0pBQWtKLE9BQy9KLFFBQVEsWUFBWSxXQUFZO0FBQUUsaUJBQU8sMkVBQTJFO0FBQUEsUUFBUSxDQUFDO0FBQy9ILFlBQUksU0FBUyw4Q0FBOEM7QUFRM0QsaUJBQVMsbUJBQW1CLE9BQU8sT0FBTztBQUN6QyxtQkFBUyxTQUFTLElBQUksUUFBUSxNQUFNLEVBQUUsSUFBSTtBQUMxQyxjQUFJLFVBQVUseUZBQXlGLE9BQ3JHLFFBQVEsYUFBYSxXQUFZO0FBQUUsbUJBQU87QUFBQSxVQUFZLENBQUMsRUFBRSxRQUFRLGNBQWMsV0FBWTtBQUFFLG1CQUFPO0FBQUEsVUFBTyxDQUFDO0FBQzlHLGlCQUFPLE9BQU8sU0FBUyxLQUFLO0FBQUEsUUFDN0I7QUFFQSxRQUFBQSxPQUFNLFVBQVUsT0FBTztBQUFBLFVBQ3RCLFVBQVU7QUFBQSxZQUNULFNBQVMsT0FBTyw2RkFBNkYsT0FDM0csUUFBUSxhQUFhLFdBQVk7QUFBRSxxQkFBTztBQUFBLFlBQVksQ0FBQyxDQUFDO0FBQUEsWUFDMUQsWUFBWTtBQUFBLFlBQ1osT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLE9BQU87QUFBQSxZQUNOLFNBQVMsT0FBTyxrRUFBa0UsT0FDaEYsUUFBUSxhQUFhLFdBQVk7QUFBRSxxQkFBTztBQUFBLFlBQVksQ0FBQyxFQUN2RCxRQUFRLFlBQVksV0FBWTtBQUFFLHFCQUFPLFFBQVEsV0FBVyxNQUFNLFNBQVM7QUFBQSxZQUFLLENBQUMsQ0FBQztBQUFBLFlBQ3BGLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFlBQ1gsU0FBUyxtQkFBbUIsc0pBQXNKLE1BQU07QUFBQSxZQUN4TCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUyxtQkFBbUIsYUFBYSxRQUFRLEdBQUc7QUFBQSxZQUNwRCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1AsU0FBUyxtQkFBbUIsU0FBUyxRQUFRLEdBQUc7QUFBQSxZQUNoRCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUyxtQkFBbUIsTUFBTTtBQUFBLFlBQ2xDLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTLG1CQUFtQixpRkFBaUYsUUFBUSxHQUFHO0FBQUEsWUFDeEgsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLE9BQU87QUFBQSxVQUNQLGFBQWE7QUFBQSxVQUNiLGVBQWU7QUFBQSxRQUNoQjtBQUVBLFFBQUFBLE9BQU0sVUFBVSxNQUFNQSxPQUFNLFVBQVU7QUFBQSxNQUV2QyxHQUFFLEtBQUs7QUFJUCxZQUFNLFVBQVUsTUFBTTtBQUFBLFFBQ3JCLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWLFdBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxlQUFlO0FBQUEsUUFDZixhQUFhO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRLE1BQU0sVUFBVTtBQUFBLFVBQ3hCLE9BQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUVBLFlBQU0sVUFBVSxNQUFNO0FBQUEsUUFDckIsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWDtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsUUFDRDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNWO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLE9BQUMsU0FBVUEsUUFBTztBQUVqQixRQUFBQSxPQUFNLFVBQVUsTUFBTUEsT0FBTSxVQUFVLE9BQU8sU0FBUztBQUFBLFVBQ3JELFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxRQUNoQixDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsT0FBTyxVQUFVO0FBQUEsVUFDN0MsWUFBWTtBQUFBLFVBQ1osWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFVBQ1Y7QUFBQSxRQUNELENBQUM7QUFFRCxRQUFBQSxPQUFNLFVBQVUsYUFBYSxPQUFPLFdBQVc7QUFBQSxVQUM5QyxhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0QsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxhQUFhLE9BQU8sVUFBVTtBQUFBLFVBQzdDLHdCQUF3QjtBQUFBLFlBQ3ZCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSx3QkFBd0I7QUFBQSxZQUN2QixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDUCxZQUFZO0FBQUEsZ0JBQ1gsU0FBUztBQUFBLGNBQ1Y7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0QsQ0FBQztBQUdELGVBQU9BLE9BQU0sVUFBVSxJQUFJO0FBRTNCLFFBQUFBLE9BQU0sTUFBTSxJQUFJLG1CQUFtQixTQUFVLEtBQUs7QUFDakQsY0FBSSxhQUFhO0FBQ2pCLFVBQUFBLE9BQU0sVUFBVSxxQkFBcUIsa0JBQWtCLEtBQUssT0FBTyxVQUFVO0FBQUEsUUFDOUUsQ0FBQztBQUVELFFBQUFBLE9BQU0sTUFBTSxJQUFJLGtCQUFrQixTQUFVLEtBQUs7QUFDaEQsVUFBQUEsT0FBTSxVQUFVLHFCQUFxQixxQkFBcUIsS0FBSyxLQUFLO0FBQUEsUUFDckUsQ0FBQztBQUFBLE1BRUYsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBR2pCLFlBQUksZ0JBQWdCLHlDQUF5QztBQUc3RCxZQUFJLG1CQUFtQix1QkFBdUI7QUFLOUMsaUJBQVMsYUFBYSxRQUFRLE9BQU87QUFDcEMsaUJBQU87QUFBQSxZQUNOLE9BQ0UsUUFBUSxVQUFVLFdBQVk7QUFBRSxxQkFBTyxRQUFRLGdCQUFnQjtBQUFBLFlBQUssQ0FBQyxFQUNyRSxRQUFRLFVBQVUsV0FBWTtBQUFFLHFCQUFPLFFBQVEsbUJBQW1CO0FBQUEsWUFBSyxDQUFDO0FBQUEsWUFDMUUsU0FBUztBQUFBLFVBQUU7QUFBQSxRQUNiO0FBRUEsWUFBSSxpQkFBaUI7QUFBQSxVQUNwQixPQUFPO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxNQUFNQSxPQUFNLFVBQVU7QUFBQSxZQUN2QjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxRQUFRO0FBQUEsWUFDUCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBRUEsZUFBZTtBQUFBLFFBQ2hCO0FBR0EsWUFBSSxVQUFVQSxPQUFNLFVBQVUsVUFBVUEsT0FBTSxVQUFVLE9BQU8sVUFBVTtBQUFBLFVBQ3hFLFVBQVU7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUdQLGFBQWE7QUFBQSxnQkFDWixTQUFTLGFBQWEsb0NBQW9DLE1BQU07QUFBQSxnQkFDaEUsUUFBUTtBQUFBLGtCQUNQLFlBQVk7QUFBQSxvQkFDWCxTQUFTLGFBQWEsMENBQTBDLE1BQU07QUFBQSxvQkFDdEUsWUFBWTtBQUFBLG9CQUNaLFFBQVE7QUFBQSxrQkFDVDtBQUFBLGtCQUNBLE9BQU87QUFBQSxrQkFDUCxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLGNBSUEsUUFBUTtBQUFBLGdCQUNQLFNBQVMsYUFBYSxzQkFBc0IsUUFBUSxHQUFHO0FBQUEsZ0JBQ3ZELFFBQVE7QUFBQSxrQkFDUCxZQUFZO0FBQUEsb0JBQ1gsU0FBUyxhQUFhLGlCQUFpQixNQUFNO0FBQUEsb0JBQzdDLFlBQVk7QUFBQSxvQkFDWixRQUFRO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLGNBR0EsU0FBUztBQUFBLGdCQUdSLFNBQVMsYUFBYSxxSUFBcUksUUFBUSxHQUFHO0FBQUEsZ0JBQ3RLLFFBQVE7QUFBQSxrQkFDUCxZQUFZO0FBQUEsb0JBR1gsU0FBUyxhQUFhLDhEQUE4RCxNQUFNO0FBQUEsb0JBQzFGLFlBQVk7QUFBQSxvQkFDWixRQUFRO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLGNBRUEsVUFBVTtBQUFBLGdCQUVULFNBQVMsYUFBYSxxRUFBcUUsTUFBTTtBQUFBLGdCQUNqRyxZQUFZO0FBQUEsZ0JBQ1osUUFBUTtBQUFBLGtCQUlQLFFBQVE7QUFBQSxvQkFFUCxTQUFTLGFBQWEsNEJBQTRCLE1BQU07QUFBQSxvQkFDeEQsWUFBWTtBQUFBLGtCQUNiO0FBQUEsa0JBR0EsVUFBVTtBQUFBLG9CQUVULFNBQVMsYUFBYSwwQkFBMEIsTUFBTTtBQUFBLG9CQUN0RCxZQUFZO0FBQUEsa0JBQ2I7QUFBQSxrQkFHQSxRQUFRO0FBQUEsb0JBRVAsU0FBUyxhQUFhLDJCQUEyQixNQUFNO0FBQUEsb0JBQ3ZELFlBQVk7QUFBQSxvQkFDWixPQUFPO0FBQUEsa0JBQ1I7QUFBQSxrQkFHQSxRQUFRO0FBQUEsb0JBRVAsU0FBUyxhQUFhLHFCQUFxQixNQUFNO0FBQUEsb0JBQ2pELFlBQVk7QUFBQSxvQkFDWixPQUFPO0FBQUEsa0JBQ1I7QUFBQSxrQkFHQSxZQUFZO0FBQUEsb0JBRVgsU0FBUyxhQUFhLHVCQUF1QixNQUFNO0FBQUEsb0JBQ25ELFlBQVk7QUFBQSxrQkFDYjtBQUFBLGtCQUdBLFdBQVc7QUFBQSxvQkFFVixTQUFTLGFBQWEscUJBQXFCLE1BQU07QUFBQSxvQkFDakQsWUFBWTtBQUFBLGtCQUNiO0FBQUEsa0JBR0EsUUFBUTtBQUFBLG9CQUVQLFNBQVMsYUFBYSxxQkFBcUIsTUFBTTtBQUFBLG9CQUNqRCxZQUFZO0FBQUEsa0JBQ2I7QUFBQSxrQkFFQSxZQUFZO0FBQUEsb0JBQ1gsU0FBUyxhQUFhLG9DQUFvQyxNQUFNO0FBQUEsb0JBQ2hFLFlBQVk7QUFBQSxvQkFDWixRQUFRO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLGNBR0EsWUFBWTtBQUFBLGdCQUNYLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsa0JBQ1AsVUFBVTtBQUFBLG9CQUNULFNBQVM7QUFBQSxvQkFDVCxZQUFZO0FBQUEsa0JBQ2I7QUFBQSxrQkFDQSxPQUFPO0FBQUEsb0JBQ04sU0FBUztBQUFBLG9CQUNULFlBQVk7QUFBQSxrQkFDYjtBQUFBLGtCQUNBLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsY0FJQSxRQUFRO0FBQUEsZ0JBRVAsU0FBUyxhQUFhLHVDQUF1QyxNQUFNO0FBQUEsZ0JBQ25FLFFBQVE7QUFBQSxrQkFDUCxRQUFRO0FBQUEsb0JBRVAsU0FBUyxhQUFhLHVCQUF1QixNQUFNO0FBQUEsb0JBQ25ELFlBQVk7QUFBQSxrQkFDYjtBQUFBLGtCQUNBLFlBQVk7QUFBQSxvQkFDWCxTQUFTLGFBQWEsYUFBYSxNQUFNO0FBQUEsb0JBQ3pDLFlBQVk7QUFBQSxvQkFDWixRQUFRO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxPQUFPO0FBQUEsb0JBQ04sU0FBUztBQUFBLG9CQUNULFlBQVk7QUFBQSxrQkFDYjtBQUFBLGtCQUNBLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsY0FJQSxTQUFTO0FBQUEsZ0JBQ1IsU0FBUyxhQUFhLHVGQUF1RixNQUFNO0FBQUEsZ0JBQ25ILFFBQVE7QUFBQSxrQkFDUCxVQUFVO0FBQUEsb0JBQ1QsU0FBUyxhQUFhLGtFQUFrRSxNQUFNO0FBQUEsb0JBQzlGLFlBQVk7QUFBQSxvQkFDWixPQUFPO0FBQUEsa0JBQ1I7QUFBQSxrQkFDQSxZQUFZO0FBQUEsb0JBQ1gsU0FBUyxhQUFhLDZCQUE2QixNQUFNO0FBQUEsb0JBQ3pELFlBQVk7QUFBQSxvQkFDWixRQUFRO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxPQUFPO0FBQUEsb0JBQ04sU0FBUztBQUFBLG9CQUNULFlBQVk7QUFBQSxrQkFDYjtBQUFBLGtCQUNBLGVBQWU7QUFBQSxnQkFDaEI7QUFBQSxjQUNEO0FBQUEsY0FHQSxZQUFZO0FBQUEsZ0JBQ1gsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxnQkFDUCxRQUFRO0FBQUEsa0JBQ1AsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUdBLFdBQVc7QUFBQSxnQkFDVixTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLFdBQVc7QUFBQSxvQkFDVixTQUFTO0FBQUEsb0JBQ1QsWUFBWTtBQUFBLGtCQUNiO0FBQUEsa0JBQ0EsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUdBLFFBQVE7QUFBQSxnQkFDUCxTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGdCQUNQLFFBQVE7QUFBQSxrQkFDUCxlQUFlO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBRUQsWUFBSSxlQUFlLFFBQVEsVUFBVTtBQUNyQyxZQUFJLGlCQUFpQjtBQUFBLFVBQ3BCLFVBQVUsYUFBYTtBQUFBLFVBQ3ZCLFFBQVEsYUFBYTtBQUFBLFVBQ3JCLFNBQVMsYUFBYTtBQUFBLFVBQ3RCLFlBQVksYUFBYTtBQUFBLFVBQ3pCLFdBQVcsYUFBYTtBQUFBLFVBQ3hCLFFBQVEsYUFBYTtBQUFBLFFBQ3RCO0FBR0EsZ0JBQVEsSUFBSSxVQUFVO0FBR3RCLFlBQUkscUJBQXFCLGFBQWEsVUFBVTtBQUNoRCwyQkFBbUIsUUFBUSxTQUFTO0FBQ3BDLDJCQUFtQixVQUFVLFNBQVM7QUFDdEMsMkJBQW1CLFlBQVksU0FBUztBQUN4QywyQkFBbUIsV0FBVyxTQUFTO0FBQ3ZDLDJCQUFtQixRQUFRLFNBQVM7QUFHcEMsWUFBSSxvQkFBb0IsYUFBYSxTQUFTO0FBQzlDLDBCQUFrQixZQUFZLGVBQWU7QUFDN0MsMEJBQWtCLFVBQVUsZUFBZTtBQUMzQywwQkFBa0IsV0FBVyxlQUFlO0FBQzVDLDBCQUFrQixjQUFjLGVBQWU7QUFDL0MsMEJBQWtCLGFBQWEsZUFBZTtBQUM5QywwQkFBa0IsVUFBVSxlQUFlO0FBQUEsTUFFNUMsR0FBRSxLQUFLO0FBRVAsT0FBQyxTQUFVQSxRQUFPO0FBRWpCLFlBQUksTUFBTSwrQ0FBK0M7QUFLekQsaUJBQVMsVUFBVSxTQUFTO0FBQzNCLGlCQUFPLFFBQVEsUUFBUSxPQUFPLFdBQVk7QUFBRSxtQkFBTztBQUFBLFVBQUssQ0FBQztBQUFBLFFBQzFEO0FBRUEsUUFBQUEsT0FBTSxVQUFVLE9BQU87QUFBQSxVQUN0QixXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsU0FBUztBQUFBLFlBQ1IsU0FBUyxPQUFPLFVBQVUscURBQXFELE1BQU0sR0FBRyxHQUFHO0FBQUEsWUFDM0YsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLE9BQU87QUFBQSxZQUNOLFNBQVMsT0FBTyxVQUFVLDZDQUE2QyxNQUFNLEdBQUcsR0FBRztBQUFBLFlBQ25GLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ1A7QUFBQSxjQUVDLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixXQUFXO0FBQUEsVUFDWCxlQUFlO0FBQUEsUUFDaEI7QUFBQSxNQUNELEdBQUUsS0FBSztBQUVQLE9BQUMsU0FBVUEsUUFBTztBQUVqQixRQUFBQSxPQUFNLFVBQVUsU0FBUztBQUFBLFVBQ3hCLFdBQVc7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSx1QkFBdUI7QUFBQSxVQUN2QixhQUFhO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsY0FDUCxTQUFTO0FBQUEsZ0JBQ1IsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxZQUFZO0FBQUEsY0FDWixTQUFTO0FBQUEsWUFDVjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNUO0FBQUEsVUFFQSxZQUFZO0FBQUEsVUFFWixXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFFWCxVQUFVO0FBQUEsVUFFVix1QkFBdUI7QUFBQSxZQUN0QixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCO0FBRUEsWUFBSSx1QkFBdUIsa0VBQWtFO0FBRTdGLFFBQUFBLE9BQU0sVUFBVSxPQUFPLHlCQUF5QjtBQUFBLFVBQy9DLFNBQVM7QUFBQSxZQUNSLFlBQVksU0FDWixjQUNXLG1DQUFtQyxTQUFTLE1BQU0sdUJBQXVCLGVBRTNFLHdDQUF3QyxTQUFTLE1BQU0sdUJBQXVCO0FBQUEsVUFFeEY7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLGlCQUFpQjtBQUFBLGNBQ2hCLFNBQVMsT0FBTyxvQkFBb0I7QUFBQSxjQUNwQyxRQUFRO0FBQUEsZ0JBQ1AsZUFBZTtBQUFBLGdCQUNmLGNBQWM7QUFBQSxrQkFDYixTQUFTO0FBQUEsa0JBQ1QsUUFBUUEsT0FBTSxVQUFVO0FBQUEsZ0JBQ3pCO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxZQUNBLFVBQVU7QUFBQSxVQUNYO0FBQUEsUUFDRDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxPQUFPQSxPQUFNLFVBQVU7QUFDdkMsUUFBQUEsT0FBTSxVQUFVLFVBQVVBLE9BQU0sVUFBVTtBQUFBLE1BRTNDLEdBQUUsS0FBSztBQUVQLFlBQU0sVUFBVSxPQUFPO0FBQUEsUUFDdEIsV0FBVztBQUFBLFFBRVgsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsWUFDUCxlQUFlO0FBQUEsVUFDaEI7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsVUFDWDtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxNQUFNLElBQUksbUJBQW1CLFNBQVUsS0FBSztBQUNqRCxZQUFJLElBQUksYUFBYSxRQUFRO0FBQzVCO0FBQUEsUUFDRDtBQUVBLFlBQUksVUFBVTtBQUNkLGNBQU0sVUFBVSxxQkFBcUIsa0JBQWtCLEtBQUssUUFBUSxPQUFPO0FBQUEsTUFDNUUsQ0FBQztBQUVELFlBQU0sTUFBTSxJQUFJLGtCQUFrQixTQUFVLEtBQUs7QUFDaEQsY0FBTSxVQUFVLHFCQUFxQixxQkFBcUIsS0FBSyxNQUFNO0FBQUEsTUFDdEUsQ0FBQztBQUVELE9BQUMsU0FBVUEsUUFBTztBQUVqQixZQUFJLFdBQVc7QUFFZixRQUFBQSxPQUFNLFVBQVUsYUFBYTtBQUFBLFVBQzVCLFdBQVc7QUFBQSxZQUNWO0FBQUEsY0FFQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxjQUdDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWDtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLFVBQVU7QUFBQSxrQkFDVCxTQUFTO0FBQUEsa0JBQ1QsUUFBUTtBQUFBLG9CQUNQLFdBQVc7QUFBQSxrQkFDWjtBQUFBLGdCQUNEO0FBQUEsZ0JBQ0EsV0FBVztBQUFBLGtCQUNWLFNBQVM7QUFBQSxnQkFDVjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQTtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLFVBQVU7QUFBQSxjQUNYO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxjQUNQLFlBQVk7QUFBQSxjQUNaLFdBQVc7QUFBQSxjQUNYLFVBQVU7QUFBQSxjQUNWLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxZQUVULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLFlBQVk7QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFVBQ0EsT0FBTztBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsZUFBZTtBQUFBLFVBQ2YsWUFBWTtBQUFBLFFBQ2I7QUFFQSxRQUFBQSxPQUFNLFVBQVUsV0FBV0EsT0FBTSxVQUFVO0FBQUEsTUFFNUMsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLGVBQWU7QUFBQSxRQUM5QixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDYixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBRUEsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFFBRVosV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFFBRVYsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLEtBQUssTUFBTSxVQUFVLFVBQVUsTUFBTSxVQUFVO0FBRS9ELFlBQU0sVUFBVSxVQUFVO0FBQUEsUUFDekIsZ0JBQWdCO0FBQUEsVUFDZixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFVBQ0EsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNsQixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsVUFDWDtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsZUFBZTtBQUFBLE1BQ2hCO0FBSUEsWUFBTSxVQUFVLE1BQU07QUFBQSxRQUNyQixVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsWUFDUCxvQkFBb0I7QUFBQSxVQUNyQjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLHNCQUFzQjtBQUFBLFVBQ3ZCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsbUJBQW1CO0FBQUEsY0FDbEIsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLGtCQUFrQjtBQUFBLFlBQ2xCLFFBQVE7QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDUCxPQUFPO0FBQUEsZ0JBQ1AsU0FBUztBQUFBLGtCQUNSLFNBQVM7QUFBQSxrQkFDVCxZQUFZO0FBQUEsZ0JBQ2I7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsWUFDUixRQUFRLFNBRU4sK0JBQStCLFVBR2hDLFFBRUUsa0VBQWtFLFNBQ2xFLE1BRUEsd0JBQXdCLFNBQ3hCLE9BR0QsWUFBWTtBQUFBLFlBQ2Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxRQUFRO0FBQUEsWUFDUCx1QkFBdUI7QUFBQSxZQUN2QixxQkFBcUI7QUFBQSxjQUNwQixTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsZ0JBQ1AsdUJBQXVCO0FBQUEsZ0JBQ3ZCLGFBQWE7QUFBQSxjQUNkO0FBQUEsWUFDRDtBQUFBLFlBQ0EsZ0JBQWdCO0FBQUEsY0FDZixTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsZ0JBQ1Asa0JBQWtCO0FBQUEsZ0JBQ2xCLFFBQVE7QUFBQSxjQUNUO0FBQUEsWUFDRDtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNQLGNBQWM7QUFBQSxrQkFDYixTQUFTO0FBQUEsa0JBQ1QsUUFBUTtBQUFBLG9CQUNQLHdCQUF3QjtBQUFBLG9CQUN4QixjQUFjO0FBQUEsb0JBQ2QsZ0JBQWdCO0FBQUEsa0JBQ2pCO0FBQUEsZ0JBQ0Q7QUFBQSxnQkFDQSxnQkFBZ0I7QUFBQSxjQUNqQjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1Asa0JBQWtCO0FBQUEsVUFDbkI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLFlBQU0sVUFBVSxNQUFNLE1BQU0sVUFBVTtBQUV0QyxPQUFDLFNBQVVBLFFBQU87QUFDakIsWUFBSSxvQkFBb0I7QUFBQSxVQUN2QixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUVBLFFBQUFBLE9BQU0sVUFBVSxJQUFJQSxPQUFNLFVBQVUsT0FBTyxTQUFTO0FBQUEsVUFDbkQsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLGNBQ1AsaUJBQWlCO0FBQUEsZ0JBQ2hCLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osUUFBUTtBQUFBLGtCQUNQLDBCQUEwQjtBQUFBLG9CQUN6QixTQUFTO0FBQUEsb0JBQ1QsT0FBTztBQUFBLGtCQUNSO0FBQUEsa0JBQ0EsNkJBQTZCO0FBQUEsb0JBQzVCLFNBQVM7QUFBQSxvQkFDVCxPQUFPO0FBQUEsa0JBQ1I7QUFBQSxrQkFDQSw0QkFBNEI7QUFBQSxnQkFDN0I7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFDWixDQUFDO0FBRUQsMEJBQWtCLFNBQVNBLE9BQU0sVUFBVTtBQUUzQyxRQUFBQSxPQUFNLFVBQVUsYUFBYSxLQUFLLFVBQVU7QUFBQSxVQUMzQyxRQUFRO0FBQUEsWUFDUCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0QsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxhQUFhLEtBQUssWUFBWTtBQUFBLFVBQzdDLGFBQWE7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxZQUNaO0FBQUEsVUFDRDtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLGNBQ2YsY0FBYztBQUFBLFlBQ2Y7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBRUQsUUFBQUEsT0FBTSxVQUFVLGFBQWEsS0FBSyxZQUFZO0FBQUEsVUFDN0Msb0JBQW9CO0FBQUEsWUFFbkIsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsWUFBWTtBQUFBLGNBQ1osV0FBVztBQUFBLGdCQUNWLFNBQVM7QUFBQSxnQkFDVCxRQUFRQSxPQUFNLFVBQVUsRUFBRSxRQUFRO0FBQUEsY0FDbkM7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0QsQ0FBQztBQUFBLE1BQ0YsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLE9BQU8sTUFBTSxVQUFVLE9BQU8sU0FBUztBQUFBLFFBRXRELGNBQWM7QUFBQSxVQUNiO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxhQUFhO0FBQUEsWUFDZDtBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxhQUFhO0FBQUEsWUFDZDtBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxhQUFhO0FBQUEsWUFDZDtBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxhQUFhO0FBQUEsWUFDZDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsUUFDZixZQUFZO0FBQUEsTUFDYixDQUFDO0FBRUQsWUFBTSxVQUFVLGFBQWEsUUFBUSxVQUFVO0FBQUEsUUFDOUMsY0FBYztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2xCLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxZQUNQLGlCQUFpQjtBQUFBLGNBQ2hCLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDUCxhQUFhO0FBQUEsa0JBQ1osU0FBUztBQUFBLGtCQUNULE9BQU87QUFBQSxnQkFDUjtBQUFBLGdCQUNBLE1BQU0sTUFBTSxVQUFVO0FBQUEsY0FDdkI7QUFBQSxZQUNEO0FBQUEsWUFDQSxVQUFVO0FBQUEsVUFDWDtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxZQUFNLFVBQVUsYUFBYSxRQUFRLFdBQVc7QUFBQSxRQUMvQyxTQUFTO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsWUFDUCxnQkFBZ0I7QUFBQSxjQUNmLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLE9BQU87QUFBQSxjQUNQLFFBQVEsTUFBTSxVQUFVO0FBQUEsWUFDekI7QUFBQSxZQUNBLG1CQUFtQjtBQUFBLFlBQ25CLGVBQWU7QUFBQSxVQUNoQjtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxPQUFDLFNBQVVBLFFBQU87QUFDakIsUUFBQUEsT0FBTSxVQUFVLFdBQVdBLE9BQU0sVUFBVSxPQUFPLFVBQVUsQ0FBQyxDQUFDO0FBRTlELFlBQUksV0FBVztBQUFBLFVBQ2QsWUFBWTtBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUSxDQUFDO0FBQUEsVUFDVjtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLGVBQWU7QUFBQSxRQUNoQjtBQUVBLGlCQUFTLFNBQVMsU0FBUztBQUFBLFVBQzFCLFVBQVUsU0FBUztBQUFBLFVBQ25CLFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQSxVQUFVLFNBQVM7QUFBQSxVQUNuQixXQUFXLFNBQVM7QUFBQSxVQUNwQixlQUFlLFNBQVM7QUFBQSxRQUN6QjtBQUVBLFFBQUFBLE9BQU0sVUFBVSxhQUFhLFlBQVksV0FBVztBQUFBLFVBQ25ELFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxVQUNBLG9CQUFvQjtBQUFBLFlBQ25CO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsY0FDUixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxjQUNSLE9BQU87QUFBQSxZQUNSO0FBQUEsVUFDRDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLGdCQUNWLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsa0JBQ1AsZUFBZTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0Q7QUFBQSxjQUNBLE1BQU07QUFBQSxZQUNQO0FBQUEsVUFDRDtBQUFBLFVBQ0EsWUFBWSxTQUFTO0FBQUEsUUFDdEIsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxTQUFTLE9BQU8sT0FBTyxjQUFjLE9BQU8sT0FBT0EsT0FBTSxVQUFVO0FBQUEsTUFFcEYsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLFVBQVU7QUFBQSxRQUN6QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBRWxCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsUUFFWixXQUFXO0FBQUEsUUFFWCxhQUFhO0FBQUEsUUFFYixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsT0FBTztBQUFBLFFBQ3RCLFdBQVc7QUFBQSxRQUVYLGdCQUFnQjtBQUFBLFVBQ2YsV0FBVztBQUFBLFVBQ1gsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUVBLG1CQUFtQjtBQUFBLFVBQ2xCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLFFBRVosVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osZUFBZTtBQUFBLE1BQ2hCO0FBRUEsWUFBTSxVQUFVLE1BQU07QUFBQSxRQUNyQixVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsa0JBQWtCO0FBQUEsUUFDakMsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsV0FBVztBQUFBLFVBQ1o7QUFBQSxRQUNEO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsS0FBSyxNQUFNLFVBQVU7QUFDckMsWUFBTSxVQUFVLE1BQU0sTUFBTSxVQUFVO0FBRXRDLFlBQU0sVUFBVSxhQUFhO0FBQUEsUUFDNUIsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFHQSxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxlQUFlO0FBQUEsUUFHZixZQUFZO0FBQUEsTUFDYjtBQUVBLFlBQU0sVUFBVSxPQUFPO0FBQUEsUUFDdEIsV0FBVztBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVjtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsZUFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFFakIsWUFBSSxLQUFLLHdDQUF3QztBQUNqRCxZQUFJLE9BQ0gsUUFDQSx5Q0FBeUMsU0FDekMsTUFDQSxnREFBZ0QsU0FDaEQsTUFDQSxrQ0FBa0MsU0FBUyxLQUFLLGdDQUFnQyxTQUNoRixNQUFNLGFBQWE7QUFFcEIsWUFBSSxhQUFhLENBQUM7QUFFbEIsUUFBQUEsT0FBTSxVQUFVLGFBQWE7QUFBQSxVQUM1QixXQUFXO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1Q7QUFBQSxVQUVBLGFBQWE7QUFBQSxZQUNaLFNBQVMsT0FBTyxtQkFBbUIsU0FBUyxFQUFFO0FBQUEsWUFDOUMsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUNiO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUNDLFNBQVMsT0FBTyw0REFBNEQsU0FBUyxJQUFJO0FBQUEsY0FDekYsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsY0FFQyxTQUFTLE9BQU8sTUFBTSxnQkFBZ0IsU0FBUyxLQUFLLFVBQVUsU0FBUyxNQUFNLElBQUk7QUFBQSxjQUNqRixZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0E7QUFBQSxjQUVDLFNBQVMsT0FBTyxtQkFBbUIsU0FBUyxJQUFJO0FBQUEsY0FDaEQsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUVBO0FBQUEsY0FDQyxTQUFTLE9BQU8sc0ZBQXNGLFNBQVMsRUFBRTtBQUFBLGNBQ2pILFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLGNBRUMsU0FBUyxPQUFPLFNBQVMsU0FBUyxFQUFFO0FBQUEsY0FDcEMsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUdBLE9BQU8sS0FBSyxtQ0FBbUMsTUFBTTtBQUFBLFlBQ3JEO0FBQUEsY0FDQyxTQUFTLE9BQU8saUNBQWlDLFNBQVMsRUFBRTtBQUFBLGNBQzVELFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFFQTtBQUFBLGNBRUMsU0FBUyxPQUFPLE9BQU8sUUFBUSxtQkFBbUIsU0FBUyxLQUFLLGFBQWEsU0FBUyxHQUFHO0FBQUEsY0FDekYsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFFQSxXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsWUFDVjtBQUFBLFlBRUE7QUFBQSxVQUNEO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFFWCxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCO0FBRUEsaUJBQVMsT0FBT0EsT0FBTSxVQUFVLFlBQVk7QUFDM0MsY0FBSSxRQUFRLGNBQWM7QUFDekIsdUJBQVcsT0FBT0EsT0FBTSxVQUFVLFdBQVc7QUFBQSxVQUM5QztBQUFBLFFBQ0Q7QUFFQSxRQUFBQSxPQUFNLFVBQVUsWUFBWUEsT0FBTSxVQUFVO0FBQUEsTUFFN0MsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLE9BQU87QUFBQSxRQUN0QixXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDcEIsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQ1AsYUFBYTtBQUFBLGNBQ1osU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLGVBQWU7QUFBQSxZQUNmLG1CQUFtQjtBQUFBLGNBQ2xCLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNSO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsa0JBQWtCO0FBQUEsVUFDakIsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLGNBQWM7QUFBQSxRQUNkLGdCQUFnQjtBQUFBLFVBQ2YsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2xCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNwQixTQUFTO0FBQUEsVUFBZ0UsT0FBTztBQUFBLFFBQ2pGO0FBQUEsUUFDQSx5QkFBeUI7QUFBQSxVQUN4QixFQUFFLFNBQVMsc0NBQXNDLE9BQU8sU0FBUztBQUFBLFVBQ2pFLEVBQUUsU0FBUyxzQ0FBc0MsT0FBTyxTQUFTO0FBQUEsVUFDakUsRUFBRSxTQUFTLDRCQUE0QixPQUFPLFNBQVM7QUFBQSxVQUN2RCxFQUFFLFNBQVMsZUFBZSxPQUFPLFNBQVM7QUFBQSxRQUMzQztBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ2QsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLEVBQUUsU0FBUyx5Q0FBeUM7QUFBQSxVQUNwRCxFQUFFLFNBQVMsWUFBWTtBQUFBLFVBQ3ZCLEVBQUUsU0FBUywyQ0FBMkM7QUFBQSxVQUN0RCxFQUFFLFNBQVMsd0JBQXdCLFlBQVksS0FBSztBQUFBLFVBQ3BELEVBQUUsU0FBUyxtQ0FBbUMsWUFBWSxLQUFLO0FBQUEsVUFDL0QsRUFBRSxTQUFTLHlEQUF5RDtBQUFBLFVBQ3BFLEVBQUUsU0FBUyxLQUFLO0FBQUEsUUFDakI7QUFBQSxRQUNBLGVBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sVUFBVSxPQUFPLE1BQU0sVUFBVSxPQUFPLFVBQVU7QUFBQSxRQUN2RCxpQkFBaUI7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ1AsZUFBZTtBQUFBLFlBQ2YsYUFBYTtBQUFBLFVBQ2Q7QUFBQSxRQUNEO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFFWCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsWUFDUCxlQUFlO0FBQUEsY0FDZCxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsY0FDWixPQUFPLENBQUMsUUFBUSxRQUFRO0FBQUEsWUFDekI7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDVCxTQUFTO0FBQUEsY0FDVCxZQUFZO0FBQUEsWUFDYjtBQUFBLFlBQ0EsZUFBZTtBQUFBLFVBQ2hCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0wsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNOO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYO0FBQUEsVUFHQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsUUFLQSxhQUFhO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsWUFDUCxhQUFhO0FBQUEsY0FDWixTQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsTUFBTSxNQUFNLFVBQVUsT0FBTyxPQUFPO0FBQUEsVUFDckM7QUFBQSxRQUNEO0FBQUEsUUFDQSxlQUFlO0FBQUEsTUFDaEIsQ0FBQztBQUVELFlBQU0sVUFBVSxhQUFhLFFBQVEsT0FBTztBQUFBLFFBRTNDLFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxZQUNQLE9BQU87QUFBQSxjQUNOLFNBQVM7QUFBQSxjQUNULFFBQVEsTUFBTSxVQUFVLE9BQU8sT0FBTztBQUFBLFlBQ3ZDO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFFRCxZQUFNLFVBQVUsVUFBVTtBQUFBLFFBQ3pCLFdBQ0M7QUFBQSxRQUNELFVBQVU7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2xCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsY0FBYyxNQUFNLFVBQVU7QUFDOUMsWUFBTSxVQUFVLEtBQUssTUFBTSxVQUFVO0FBQ3JDLFlBQU0sVUFBVSxLQUFLLE1BQU0sVUFBVTtBQUlyQyxZQUFNLFVBQVUsT0FBTztBQUFBLFFBR3RCLFdBQVc7QUFBQSxVQUNWO0FBQUEsWUFHQyxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxVQUNUO0FBQUEsUUFDRDtBQUFBLFFBSUEsd0JBQXdCO0FBQUEsVUFDdkIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUdBLGtCQUFrQjtBQUFBLFFBR2xCLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFHQSxhQUFhO0FBQUEsVUFJWixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsUUFDUjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ2I7QUFBQSxZQUdDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFHQTtBQUFBLFFBQ0Q7QUFBQSxRQUdBLFlBQVk7QUFBQSxRQUVaLFFBQVE7QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFHVixZQUFZO0FBQUEsUUFFWixZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsS0FBSyxvQkFBb0I7QUFBQSxRQUV4QyxTQUFTO0FBQUEsUUFDVCxZQUFZO0FBQUEsUUFDWixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsVUFDUCxpQkFBaUI7QUFBQSxZQUVoQixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsY0FDUCxjQUFjO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGdCQUNULFlBQVk7QUFBQSxnQkFDWixRQUFRLE1BQU0sVUFBVTtBQUFBLGNBQ3pCO0FBQUEsY0FDQSw2QkFBNkI7QUFBQSxnQkFDNUIsU0FBUztBQUFBLGdCQUNULE9BQU87QUFBQSxjQUNSO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLFVBQVU7QUFBQSxRQUNYO0FBQUEsTUFDRDtBQUVBLE9BQUMsU0FBVUEsUUFBTztBQUNqQixRQUFBQSxPQUFNLFVBQVUsUUFBUUEsT0FBTSxVQUFVLE9BQU8sVUFBVTtBQUFBLFVBQ3hELFlBQVk7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxnQkFDZCxTQUFTO0FBQUEsY0FDVjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsZ0JBQ2QsU0FBUztBQUFBLGNBQ1Y7QUFBQSxjQUNBLFlBQVk7QUFBQSxnQkFDWCxTQUFTO0FBQUEsY0FDVjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxtQkFBbUI7QUFBQSxZQUNsQixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxZQUFZO0FBQUEsZ0JBQ1gsU0FBUztBQUFBLGdCQUNULFFBQVE7QUFBQSxrQkFDUCxlQUFlO0FBQUEsb0JBQ2QsU0FBUztBQUFBLGtCQUNWO0FBQUEsa0JBQ0EsWUFBWTtBQUFBLG9CQUNYLFNBQVM7QUFBQSxrQkFDVjtBQUFBLGdCQUNEO0FBQUEsY0FDRDtBQUFBLGNBQ0EsZUFBZTtBQUFBLGdCQUNkLFNBQVM7QUFBQSxjQUNWO0FBQUEsWUFDRDtBQUFBLFlBQ0EsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGtCQUFrQjtBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxnQkFDZCxTQUFTO0FBQUEsY0FDVjtBQUFBLFlBQ0Q7QUFBQSxZQUNBLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxvQkFBb0I7QUFBQSxZQUNuQixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsZ0JBQ2QsU0FBUztBQUFBLGdCQUNULFFBQVE7QUFBQSxrQkFDUCxPQUFPO0FBQUEsb0JBQ04sU0FBUztBQUFBLGtCQUNWO0FBQUEsZ0JBQ0Q7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFlBQ0EsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLHdCQUF3QjtBQUFBLFlBQ3ZCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxnQkFDZCxTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLE9BQU87QUFBQSxvQkFDTixTQUFTO0FBQUEsa0JBQ1Y7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxjQUNBLGFBQWE7QUFBQSxnQkFDWixTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNQLGVBQWU7QUFBQSxvQkFDZCxTQUFTO0FBQUEsa0JBQ1Y7QUFBQSxnQkFDRDtBQUFBLGdCQUNBLE9BQU87QUFBQSxjQUNSO0FBQUEsWUFDRDtBQUFBLFlBQ0EsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLDZCQUE2QjtBQUFBLFlBQzVCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLGVBQWU7QUFBQSxnQkFDZCxTQUFTO0FBQUEsY0FDVjtBQUFBLFlBQ0Q7QUFBQSxZQUNBLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSx5QkFBeUI7QUFBQSxZQUN4QixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDUCxlQUFlO0FBQUEsZ0JBQ2QsU0FBUztBQUFBLGNBQ1Y7QUFBQSxZQUNEO0FBQUEsWUFDQSxPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0QsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxhQUFhLFVBQVUsZUFBZTtBQUFBLFVBQ3JELFlBQVlBLE9BQU0sVUFBVSxNQUFNLG1CQUFtQixPQUFPO0FBQUEsUUFDN0QsR0FBR0EsT0FBTSxVQUFVLE1BQU0saUJBQWlCO0FBRTFDLFFBQUFBLE9BQU0sVUFBVSxZQUFZQSxPQUFNLFVBQVU7QUFBQSxNQUU3QyxHQUFFLEtBQUs7QUFFUCxPQUFDLFNBQVVBLFFBQU87QUFRakIsaUJBQVMsaUJBQWlCLE1BQU0sWUFBWTtBQUMzQyxjQUFJQSxPQUFNLFVBQVUsT0FBTztBQUMxQixZQUFBQSxPQUFNLFVBQVUsYUFBYSxNQUFNLFdBQVc7QUFBQSxjQUM3QyxlQUFlO0FBQUEsWUFDaEIsQ0FBQztBQUFBLFVBQ0Y7QUFBQSxRQUNEO0FBRUEsWUFBSSxNQUFNQSxPQUFNLFVBQVUsT0FBTztBQUVqQyxZQUFJLGtCQUFrQjtBQUFBLFVBQ3JCLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxZQUNQLE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRDtBQUNBLFlBQUksaUJBQWlCO0FBQUEsVUFDcEIsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFlBQ1AsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBRUEseUJBQWlCLFVBQVUsZUFBZTtBQUMxQyx5QkFBaUIsVUFBVSxlQUFlO0FBQzFDLHlCQUFpQixTQUFTLGNBQWM7QUFBQSxNQUV6QyxHQUFFLEtBQUs7QUFFUCxZQUFNLFVBQVUsT0FBTztBQUFBLFFBQ3RCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1osU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNoQjtBQUVBLE9BQUMsU0FBVUEsUUFBTztBQUVqQixRQUFBQSxPQUFNLFVBQVUsU0FBU0EsT0FBTSxVQUFVLE9BQU8sVUFBVTtBQUFBLFVBQ3pELGtCQUFrQjtBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxVQUFVO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxvQkFBb0I7QUFBQSxZQUNuQixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGtCQUFrQjtBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLE9BQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxvQkFBb0I7QUFBQSxZQUNuQixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFlBQVk7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsVUFDQSxlQUFlO0FBQUEsUUFDaEIsQ0FBQztBQUVELFFBQUFBLE9BQU0sVUFBVSxPQUFPLElBQUksVUFBVTtBQUNyQyxRQUFBQSxPQUFNLFVBQVUsT0FBTyxPQUFPLE9BQU8sY0FBYyxVQUFVO0FBQzdELFFBQUFBLE9BQU0sVUFBVSxPQUFPLE9BQU8sT0FBTyxjQUFjLE9BQU8saUJBQWlCO0FBQzNFLFFBQUFBLE9BQU0sVUFBVSxPQUFPLE9BQU8sT0FBTyxjQUFjLE9BQU8sZ0JBQWdCO0FBQUEsVUFFekUsU0FBUztBQUFBLFVBQ1QsUUFBUUEsT0FBTSxVQUFVO0FBQUEsVUFDeEIsT0FBTztBQUFBLFFBQ1I7QUFHQSxZQUFJLGlCQUFpQixTQUFVLE9BQU87QUFDckMsY0FBSSxPQUFPLFVBQVUsVUFBVTtBQUM5QixtQkFBTztBQUFBLFVBQ1I7QUFDQSxjQUFJLE9BQU8sTUFBTSxZQUFZLFVBQVU7QUFDdEMsbUJBQU8sTUFBTTtBQUFBLFVBQ2Q7QUFDQSxpQkFBTyxNQUFNLFFBQVEsSUFBSSxjQUFjLEVBQUUsS0FBSyxFQUFFO0FBQUEsUUFDakQ7QUFFQSxZQUFJLGFBQWEsU0FBVSxRQUFRO0FBQ2xDLGNBQUksYUFBYSxDQUFDO0FBQ2xCLG1CQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBQ3ZDLGdCQUFJLFFBQVEsT0FBTztBQUNuQixnQkFBSSxpQkFBaUI7QUFFckIsZ0JBQUksT0FBTyxVQUFVLFVBQVU7QUFDOUIsa0JBQUksTUFBTSxTQUFTLFNBQVMsTUFBTSxRQUFRLE1BQU0sTUFBTSxRQUFRLEdBQUcsU0FBUyxPQUFPO0FBR2hGLG9CQUFJLE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxZQUFZLE1BQU07QUFFakQsc0JBQUksV0FBVyxTQUFTLEtBQUssV0FBVyxXQUFXLFNBQVMsR0FBRyxZQUFZLGVBQWUsTUFBTSxRQUFRLEdBQUcsUUFBUSxFQUFFLEdBQUc7QUFFdkgsK0JBQVcsSUFBSTtBQUFBLGtCQUNoQjtBQUFBLGdCQUNELE9BQU87QUFDTixzQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLFNBQVMsR0FBRyxZQUFZLE1BQU07QUFBQSxrQkFFOUQsT0FBTztBQUVOLCtCQUFXLEtBQUs7QUFBQSxzQkFDZixTQUFTLGVBQWUsTUFBTSxRQUFRLEdBQUcsUUFBUSxFQUFFO0FBQUEsc0JBQ25ELGNBQWM7QUFBQSxvQkFDZixDQUFDO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRDtBQUFBLGNBQ0QsV0FDQyxXQUFXLFNBQVMsS0FBSyxNQUFNLFNBQVMsaUJBQWlCLE1BQU0sWUFBWSxRQUUxRSxDQUFDLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxHQUFHLFNBQVMsaUJBQWlCLE9BQU8sSUFBSSxHQUFHLFlBQVksU0FDcEYsQ0FBQyxPQUFPLElBQUksTUFBTSxPQUFPLElBQUksR0FBRyxTQUFTLGdCQUFnQixPQUFPLElBQUksR0FBRyxZQUFZLE1BQ25GO0FBRUQsMkJBQVcsV0FBVyxTQUFTLEdBQUc7QUFBQSxjQUVuQyxXQUFXLFdBQVcsU0FBUyxLQUFLLFdBQVcsV0FBVyxTQUFTLEdBQUcsZUFBZSxLQUFLLE1BQU0sU0FBUyxpQkFBaUIsTUFBTSxZQUFZLEtBQUs7QUFHaEosMkJBQVcsV0FBVyxTQUFTLEdBQUc7QUFBQSxjQUVuQyxXQUFXLE1BQU0sU0FBUyxXQUFXO0FBQ3BDLGlDQUFpQjtBQUFBLGNBQ2xCO0FBQUEsWUFDRDtBQUNBLGdCQUFJLGtCQUFrQixPQUFPLFVBQVUsVUFBVTtBQUNoRCxrQkFBSSxXQUFXLFNBQVMsS0FBSyxXQUFXLFdBQVcsU0FBUyxHQUFHLGlCQUFpQixHQUFHO0FBR2xGLG9CQUFJLFlBQVksZUFBZSxLQUFLO0FBR3BDLG9CQUFJLElBQUksT0FBTyxTQUFTLE1BQU0sT0FBTyxPQUFPLElBQUksT0FBTyxZQUFZLE9BQU8sSUFBSSxHQUFHLFNBQVMsZUFBZTtBQUN4RywrQkFBYSxlQUFlLE9BQU8sSUFBSSxFQUFFO0FBQ3pDLHlCQUFPLE9BQU8sSUFBSSxHQUFHLENBQUM7QUFBQSxnQkFDdkI7QUFDQSxvQkFBSSxJQUFJLE1BQU0sT0FBTyxPQUFPLElBQUksT0FBTyxZQUFZLE9BQU8sSUFBSSxHQUFHLFNBQVMsZUFBZTtBQUN4Riw4QkFBWSxlQUFlLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDNUMseUJBQU8sT0FBTyxJQUFJLEdBQUcsQ0FBQztBQUN0QjtBQUFBLGdCQUNEO0FBRUEsb0JBQUksUUFBUSxLQUFLLFNBQVMsR0FBRztBQUM1Qix5QkFBTyxLQUFLO0FBQUEsZ0JBQ2IsT0FBTztBQUNOLHlCQUFPLEtBQUssSUFBSUEsT0FBTSxNQUFNLGNBQWMsV0FBVyxNQUFNLFNBQVM7QUFBQSxnQkFDckU7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUVBLGdCQUFJLE1BQU0sV0FBVyxPQUFPLE1BQU0sWUFBWSxVQUFVO0FBQ3ZELHlCQUFXLE1BQU0sT0FBTztBQUFBLFlBQ3pCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFFQSxRQUFBQSxPQUFNLE1BQU0sSUFBSSxrQkFBa0IsU0FBVSxLQUFLO0FBQ2hELGNBQUksSUFBSSxhQUFhLFVBQVU7QUFDOUI7QUFBQSxVQUNEO0FBQ0EscUJBQVcsSUFBSSxNQUFNO0FBQUEsUUFDdEIsQ0FBQztBQUFBLE1BRUYsR0FBRSxLQUFLO0FBRVAsWUFBTSxVQUFVLE9BQU87QUFBQSxRQUd0QixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxRQUNiO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxPQUFDLFNBQVVBLFFBQU87QUFFakIsaUJBQVMsUUFBUSxLQUFLO0FBQ3JCLGlCQUFPLFdBQVk7QUFBRSxtQkFBTztBQUFBLFVBQUs7QUFBQSxRQUNsQztBQUVBLFlBQUksVUFBVTtBQUVkLFlBQUksYUFBYSxXQUFXLFFBQVEsU0FBUztBQUM3QyxZQUFJLFFBQVEsb0NBQW9DO0FBQ2hELFlBQUksaUJBQWlCLDBHQUEwRyxPQUFPLFFBQVEsWUFBWSxRQUFRLEtBQUssQ0FBQztBQUN4SyxZQUFJLGNBQWMsMkRBQTJELE9BQU8sUUFBUSxTQUFTLFFBQVEsVUFBVSxDQUFDO0FBQ3hILFlBQUksT0FBTyx3QkFBd0IsaUJBQWlCLFdBQVcsY0FBYztBQW1CN0UsUUFBQUEsT0FBTSxVQUFVLE1BQU07QUFBQSxVQUNyQixXQUFXO0FBQUEsWUFDVjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUFBLFVBQ0EsVUFBVTtBQUFBLFlBQ1Q7QUFBQSxjQUVDLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLGNBRUMsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsVUFDQSxRQUFRO0FBQUEsWUFFUCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsVUFDVDtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsU0FBUztBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxVQUNBLGNBQWM7QUFBQSxZQUViO0FBQUEsWUFDQTtBQUFBLGNBSUMsU0FBUyxPQUFPLDBFQUEwRSxPQUFPLFFBQVEsV0FBVyxRQUFRLElBQUksQ0FBQyxFQUFFLFFBQVEsWUFBWSxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQUEsY0FDdEssWUFBWTtBQUFBLGNBQ1osUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsY0FFQyxTQUFTLE9BQU8sdUNBQXVDLE9BQU8sUUFBUSxXQUFXLFFBQVEsSUFBSSxDQUFDLEVBQUUsUUFBUSxZQUFZLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFBQSxjQUNuSSxZQUFZO0FBQUEsY0FDWixRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBQ2YsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLGVBQWU7QUFBQSxRQUNoQjtBQUVBLFFBQUFBLE9BQU0sVUFBVSxJQUFJLGNBQWMsUUFBUSxTQUFVLEtBQUs7QUFDeEQsY0FBSSxJQUFJLFdBQVcsTUFBTTtBQUN4QixnQkFBSSxTQUFTQSxPQUFNLFVBQVU7QUFBQSxVQUM5QjtBQUFBLFFBQ0QsQ0FBQztBQUFBLE1BRUYsR0FBRSxLQUFLO0FBRVAsT0FBQyxXQUFZO0FBRVosWUFBSSxPQUFPLFVBQVUsZUFBZSxPQUFPLGFBQWEsYUFBYTtBQUNwRTtBQUFBLFFBQ0Q7QUFPQSxZQUFJLGNBQWM7QUFPbEIsWUFBSSxlQUFlO0FBTW5CLFlBQUksU0FBUyxNQUFNLFFBQVEsY0FBYztBQUFBLFVBUXhDLFNBQVMsU0FBVSxTQUFTLFFBQVE7QUFDbkMsZ0JBQUksUUFBUSxZQUFZLFNBQVMsQ0FBQyxRQUFRLFVBQVUsU0FBUyxXQUFXLEdBQUc7QUFDMUU7QUFBQSxZQUNEO0FBRUEsZ0JBQUksaUJBQWlCLFFBQVEsY0FBYyxvQkFBb0I7QUFDL0QsZ0JBQUksQ0FBQyxnQkFBZ0I7QUFDcEI7QUFBQSxZQUNEO0FBQ0EsZ0JBQUksa0JBQWtCLFNBQVMsUUFBUSxhQUFhLFlBQVksR0FBRyxFQUFFLEtBQUs7QUFDMUUsZ0JBQUksZ0JBQWdCLG1CQUFtQixlQUFlLFNBQVMsU0FBUztBQUV4RSxnQkFBSSxTQUFTLGlCQUFpQjtBQUM3Qix1QkFBUztBQUFBLFlBQ1Y7QUFDQSxnQkFBSSxTQUFTLGVBQWU7QUFDM0IsdUJBQVM7QUFBQSxZQUNWO0FBRUEsZ0JBQUksWUFBWSxTQUFTO0FBRXpCLG1CQUFPLGVBQWUsU0FBUztBQUFBLFVBQ2hDO0FBQUEsVUFVQSxRQUFRLFNBQVUsU0FBUztBQUMxQiwyQkFBZSxDQUFDLE9BQU8sQ0FBQztBQUFBLFVBQ3pCO0FBQUEsVUFZQSw0QkFBNEI7QUFBQSxRQUM3QjtBQU9BLGlCQUFTLGVBQWUsVUFBVTtBQUNqQyxxQkFBVyxTQUFTLE9BQU8sU0FBVSxHQUFHO0FBQ3ZDLGdCQUFJLGFBQWEsVUFBVSxDQUFDO0FBQzVCLGdCQUFJLGFBQWEsV0FBVztBQUM1QixtQkFBTyxlQUFlLGNBQWMsZUFBZTtBQUFBLFVBQ3BELENBQUM7QUFFRCxjQUFJLFNBQVMsVUFBVSxHQUFHO0FBQ3pCO0FBQUEsVUFDRDtBQUVBLGNBQUksUUFBUSxTQUFTLElBQUksU0FBVSxTQUFTO0FBQzNDLGdCQUFJLGNBQWMsUUFBUSxjQUFjLE1BQU07QUFDOUMsZ0JBQUkscUJBQXFCLFFBQVEsY0FBYyxvQkFBb0I7QUFDbkUsZ0JBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CO0FBQ3hDLHFCQUFPO0FBQUEsWUFDUjtBQUdBLGdCQUFJLGtCQUFrQixRQUFRLGNBQWMscUJBQXFCO0FBQ2pFLGdCQUFJLFlBQVksWUFBWSxZQUFZLE1BQU0sWUFBWTtBQUUxRCxnQkFBSSxDQUFDLGlCQUFpQjtBQUNyQixnQ0FBa0IsU0FBUyxjQUFjLE1BQU07QUFDL0MsOEJBQWdCLFlBQVk7QUFFNUIsMEJBQVksWUFBWSxlQUFlO0FBQUEsWUFDeEM7QUFFQSw0QkFBZ0IsWUFBWTtBQUM1Qiw0QkFBZ0IsTUFBTSxVQUFVO0FBRWhDLGdCQUFJLGlCQUFpQixnQkFBZ0Isc0JBQXNCLEVBQUU7QUFDN0QsNEJBQWdCLFlBQVk7QUFFNUIsbUJBQU87QUFBQSxjQUNOO0FBQUEsY0FDQSxPQUFPO0FBQUEsY0FDUCxhQUFhLENBQUM7QUFBQSxjQUNkO0FBQUEsY0FDQSxPQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0QsQ0FBQyxFQUFFLE9BQU8sT0FBTztBQUVqQixnQkFBTSxRQUFRLFNBQVUsTUFBTTtBQUM3QixnQkFBSSxrQkFBa0IsS0FBSztBQUMzQixnQkFBSSxRQUFRLEtBQUs7QUFDakIsZ0JBQUksY0FBYyxLQUFLO0FBQ3ZCLGdCQUFJLGlCQUFpQixLQUFLO0FBRTFCLHdCQUFZLE1BQU0sU0FBUyxLQUFLO0FBQ2hDLGtCQUFNLFFBQVEsU0FBVSxNQUFNLE9BQU87QUFDcEMsa0JBQUksUUFBUSxLQUFLLFNBQVMsR0FBRztBQUM1QixvQkFBSSxJQUFJLGdCQUFnQixZQUFZLFNBQVMsY0FBYyxNQUFNLENBQUM7QUFDbEUsa0JBQUUsTUFBTSxVQUFVO0FBQ2xCLGtCQUFFLGNBQWM7QUFBQSxjQUNqQixPQUFPO0FBQ04sNEJBQVksU0FBUztBQUFBLGNBQ3RCO0FBQUEsWUFDRCxDQUFDO0FBQUEsVUFDRixDQUFDO0FBRUQsZ0JBQU0sUUFBUSxTQUFVLE1BQU07QUFDN0IsZ0JBQUksa0JBQWtCLEtBQUs7QUFDM0IsZ0JBQUksY0FBYyxLQUFLO0FBRXZCLGdCQUFJLGFBQWE7QUFDakIscUJBQVMsSUFBSSxHQUFHLElBQUksWUFBWSxRQUFRLEtBQUs7QUFDNUMsa0JBQUksWUFBWSxPQUFPLFFBQVc7QUFDakMsNEJBQVksS0FBSyxnQkFBZ0IsU0FBUyxjQUFjLHNCQUFzQixFQUFFO0FBQUEsY0FDakY7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBRUQsZ0JBQU0sUUFBUSxTQUFVLE1BQU07QUFDN0IsZ0JBQUksa0JBQWtCLEtBQUs7QUFDM0IsZ0JBQUksVUFBVSxLQUFLLFFBQVEsY0FBYyxvQkFBb0I7QUFFN0QsNEJBQWdCLE1BQU0sVUFBVTtBQUNoQyw0QkFBZ0IsWUFBWTtBQUU1QixpQkFBSyxZQUFZLFFBQVEsU0FBVSxRQUFRLFlBQVk7QUFDdEQsc0JBQVEsU0FBUyxZQUFZLE1BQU0sU0FBUyxTQUFTO0FBQUEsWUFDdEQsQ0FBQztBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0Y7QUFPQSxpQkFBUyxVQUFVLFNBQVM7QUFDM0IsY0FBSSxDQUFDLFNBQVM7QUFDYixtQkFBTztBQUFBLFVBQ1I7QUFFQSxpQkFBTyxPQUFPLG1CQUFtQixpQkFBaUIsT0FBTyxJQUFLLFFBQVEsZ0JBQWdCO0FBQUEsUUFDdkY7QUFFQSxZQUFJLFlBQVk7QUFDaEIsZUFBTyxpQkFBaUIsVUFBVSxXQUFZO0FBQzdDLGNBQUksT0FBTyw4QkFBOEIsY0FBYyxPQUFPLFlBQVk7QUFDekU7QUFBQSxVQUNEO0FBQ0Esc0JBQVksT0FBTztBQUVuQix5QkFBZSxNQUFNLFVBQVUsTUFBTSxLQUFLLFNBQVMsaUJBQWlCLFNBQVMsV0FBVyxDQUFDLENBQUM7QUFBQSxRQUMzRixDQUFDO0FBRUQsY0FBTSxNQUFNLElBQUksWUFBWSxTQUFVLEtBQUs7QUFDMUMsY0FBSSxDQUFDLElBQUksTUFBTTtBQUNkO0FBQUEsVUFDRDtBQUVBLGNBQUksT0FBK0IsSUFBSTtBQUN2QyxjQUFJLE1BQWtDLEtBQUs7QUFHM0MsY0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxRQUFRLEdBQUc7QUFDdkM7QUFBQSxVQUNEO0FBR0EsY0FBSSxLQUFLLGNBQWMsb0JBQW9CLEdBQUc7QUFDN0M7QUFBQSxVQUNEO0FBR0EsY0FBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLE1BQU0sV0FBVyxHQUFHO0FBQzVDO0FBQUEsVUFDRDtBQUdBLGVBQUssVUFBVSxPQUFPLFdBQVc7QUFFakMsY0FBSSxVQUFVLElBQUksV0FBVztBQUU3QixjQUFJLFFBQVEsSUFBSSxLQUFLLE1BQU0sWUFBWTtBQUN2QyxjQUFJLFdBQVcsUUFBUSxNQUFNLFNBQVMsSUFBSTtBQUMxQyxjQUFJO0FBRUosY0FBSSxRQUFRLElBQUksTUFBTSxXQUFXLENBQUMsRUFBRSxLQUFLLGVBQWU7QUFFeEQsK0JBQXFCLFNBQVMsY0FBYyxNQUFNO0FBQ2xELDZCQUFtQixhQUFhLGVBQWUsTUFBTTtBQUNyRCw2QkFBbUIsWUFBWTtBQUMvQiw2QkFBbUIsWUFBWTtBQUUvQixjQUFJLElBQUksYUFBYSxZQUFZLEdBQUc7QUFDbkMsZ0JBQUksTUFBTSxlQUFlLGlCQUFpQixTQUFTLElBQUksYUFBYSxZQUFZLEdBQUcsRUFBRSxJQUFJO0FBQUEsVUFDMUY7QUFFQSxjQUFJLFFBQVEsWUFBWSxrQkFBa0I7QUFFMUMseUJBQWUsQ0FBQyxHQUFHLENBQUM7QUFFcEIsZ0JBQU0sTUFBTSxJQUFJLGdCQUFnQixHQUFHO0FBQUEsUUFDcEMsQ0FBQztBQUVELGNBQU0sTUFBTSxJQUFJLGdCQUFnQixTQUFVLEtBQUs7QUFDOUMsY0FBSSxVQUFVLElBQUksV0FBVyxDQUFDO0FBQzlCLGNBQUksUUFBUSxjQUFjO0FBQUEsUUFDM0IsQ0FBQztBQUFBLE1BRUYsR0FBRTtBQUVGLE9BQUMsV0FBWTtBQUVaLFlBQUksT0FBTyxVQUFVLGVBQWUsT0FBTyxhQUFhLGFBQWE7QUFDcEU7QUFBQSxRQUNEO0FBR0EsWUFBSSxDQUFDLFFBQVEsVUFBVSxTQUFTO0FBQy9CLGtCQUFRLFVBQVUsVUFBVSxRQUFRLFVBQVUscUJBQXFCLFFBQVEsVUFBVTtBQUFBLFFBQ3RGO0FBRUEsWUFBSSxrQkFBa0I7QUFDdEIsWUFBSSxrQkFBa0IsU0FBVSxRQUFRLFNBQVM7QUFDaEQsaUJBQU8sa0JBQWEsU0FBUywyQkFBMkI7QUFBQSxRQUN6RDtBQUNBLFlBQUksd0JBQXdCO0FBRTVCLFlBQUksYUFBYTtBQUFBLFVBQ2hCLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxVQUNSLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxVQUNQLEtBQUs7QUFBQSxVQUNMLE9BQU87QUFBQSxRQUNSO0FBRUEsWUFBSSxjQUFjO0FBQ2xCLFlBQUksaUJBQWlCO0FBQ3JCLFlBQUksZ0JBQWdCO0FBQ3BCLFlBQUksZ0JBQWdCO0FBRXBCLFlBQUksV0FBVyx3QkFBd0IsY0FBYyxPQUFPLGdCQUFnQixjQUM5RCxjQUFjLE9BQU8saUJBQWlCO0FBU3BELGlCQUFTLFNBQVMsS0FBSyxTQUFTLE9BQU87QUFDdEMsY0FBSSxNQUFNLElBQUksZUFBZTtBQUM3QixjQUFJLEtBQUssT0FBTyxLQUFLLElBQUk7QUFDekIsY0FBSSxxQkFBcUIsV0FBWTtBQUNwQyxnQkFBSSxJQUFJLGNBQWMsR0FBRztBQUN4QixrQkFBSSxJQUFJLFNBQVMsT0FBTyxJQUFJLGNBQWM7QUFDekMsd0JBQVEsSUFBSSxZQUFZO0FBQUEsY0FDekIsT0FBTztBQUNOLG9CQUFJLElBQUksVUFBVSxLQUFLO0FBQ3RCLHdCQUFNLGdCQUFnQixJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUM7QUFBQSxnQkFDbEQsT0FBTztBQUNOLHdCQUFNLHFCQUFxQjtBQUFBLGdCQUM1QjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUNBLGNBQUksS0FBSyxJQUFJO0FBQUEsUUFDZDtBQVVBLGlCQUFTLFdBQVdRLFFBQU87QUFDMUIsY0FBSSxJQUFJLHdDQUF3QyxLQUFLQSxVQUFTLEVBQUU7QUFDaEUsY0FBSSxHQUFHO0FBQ04sZ0JBQUlFLFNBQVEsT0FBTyxFQUFFLEVBQUU7QUFDdkIsZ0JBQUksUUFBUSxFQUFFO0FBQ2QsZ0JBQUlDLE9BQU0sRUFBRTtBQUVaLGdCQUFJLENBQUMsT0FBTztBQUNYLHFCQUFPLENBQUNELFFBQU9BLE1BQUs7QUFBQSxZQUNyQjtBQUNBLGdCQUFJLENBQUNDLE1BQUs7QUFDVCxxQkFBTyxDQUFDRCxRQUFPLE1BQVM7QUFBQSxZQUN6QjtBQUNBLG1CQUFPLENBQUNBLFFBQU8sT0FBT0MsSUFBRyxDQUFDO0FBQUEsVUFDM0I7QUFDQSxpQkFBTztBQUFBLFFBQ1I7QUFFQSxjQUFNLE1BQU0sSUFBSSx1QkFBdUIsU0FBVSxLQUFLO0FBQ3JELGNBQUksWUFBWSxPQUFPO0FBQUEsUUFDeEIsQ0FBQztBQUVELGNBQU0sTUFBTSxJQUFJLHVCQUF1QixTQUFVLEtBQUs7QUFDckQsY0FBSSxNQUFxQyxJQUFJO0FBQzdDLGNBQUksSUFBSSxRQUFRLFFBQVEsR0FBRztBQUMxQixnQkFBSSxPQUFPO0FBRVgsZ0JBQUksYUFBYSxhQUFhLGNBQWM7QUFHNUMsZ0JBQUksT0FBTyxJQUFJLFlBQVksU0FBUyxjQUFjLE1BQU0sQ0FBQztBQUN6RCxpQkFBSyxjQUFjO0FBRW5CLGdCQUFJLE1BQU0sSUFBSSxhQUFhLFVBQVU7QUFFckMsZ0JBQUksV0FBVyxJQUFJO0FBQ25CLGdCQUFJLGFBQWEsUUFBUTtBQUd4QixrQkFBSSxhQUFhLFdBQVcsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUNyRCx5QkFBVyxXQUFXLGNBQWM7QUFBQSxZQUNyQztBQUdBLGtCQUFNLEtBQUssWUFBWSxNQUFNLFFBQVE7QUFDckMsa0JBQU0sS0FBSyxZQUFZLEtBQUssUUFBUTtBQUdwQyxnQkFBSSxhQUFhLE1BQU0sUUFBUTtBQUMvQixnQkFBSSxZQUFZO0FBQ2YseUJBQVcsY0FBYyxRQUFRO0FBQUEsWUFDbEM7QUFHQTtBQUFBLGNBQ0M7QUFBQSxjQUNBLFNBQVUsTUFBTTtBQUVmLG9CQUFJLGFBQWEsYUFBYSxhQUFhO0FBRzNDLG9CQUFJSCxTQUFRLFdBQVcsSUFBSSxhQUFhLFlBQVksQ0FBQztBQUNyRCxvQkFBSUEsUUFBTztBQUNWLHNCQUFJLFFBQVEsS0FBSyxNQUFNLFdBQVc7QUFHbEMsc0JBQUlFLFNBQVFGLE9BQU07QUFDbEIsc0JBQUlHLE9BQU1ILE9BQU0sTUFBTSxPQUFPLE1BQU0sU0FBU0EsT0FBTTtBQUVsRCxzQkFBSUUsU0FBUSxHQUFHO0FBQUUsb0JBQUFBLFVBQVMsTUFBTTtBQUFBLGtCQUFRO0FBQ3hDLGtCQUFBQSxTQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSUEsU0FBUSxHQUFHLE1BQU0sTUFBTSxDQUFDO0FBQ3JELHNCQUFJQyxPQUFNLEdBQUc7QUFBRSxvQkFBQUEsUUFBTyxNQUFNO0FBQUEsa0JBQVE7QUFDcEMsa0JBQUFBLE9BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJQSxNQUFLLE1BQU0sTUFBTSxDQUFDO0FBRTdDLHlCQUFPLE1BQU0sTUFBTUQsUUFBT0MsSUFBRyxFQUFFLEtBQUssSUFBSTtBQUd4QyxzQkFBSSxDQUFDLElBQUksYUFBYSxZQUFZLEdBQUc7QUFDcEMsd0JBQUksYUFBYSxjQUFjLE9BQU9ELFNBQVEsQ0FBQyxDQUFDO0FBQUEsa0JBQ2pEO0FBQUEsZ0JBQ0Q7QUFHQSxxQkFBSyxjQUFjO0FBQ25CLHNCQUFNLGlCQUFpQixJQUFJO0FBQUEsY0FDNUI7QUFBQSxjQUNBLFNBQVUsT0FBTztBQUVoQixvQkFBSSxhQUFhLGFBQWEsYUFBYTtBQUUzQyxxQkFBSyxjQUFjO0FBQUEsY0FDcEI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0QsQ0FBQztBQUVELGNBQU0sUUFBUSxnQkFBZ0I7QUFBQSxVQVE3QixXQUFXLFNBQVMsVUFBVSxXQUFXO0FBQ3hDLGdCQUFJLFlBQVksYUFBYSxVQUFVLGlCQUFpQixRQUFRO0FBRWhFLHFCQUFTLElBQUksR0FBRyxTQUFVLFVBQVUsU0FBUyxRQUFRO0FBQ3BELG9CQUFNLGlCQUFpQixPQUFPO0FBQUEsWUFDL0I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUVBLFlBQUksU0FBUztBQUViLGNBQU0sZ0JBQWdCLFdBQVk7QUFDakMsY0FBSSxDQUFDLFFBQVE7QUFDWixvQkFBUSxLQUFLLHlGQUF5RjtBQUN0RyxxQkFBUztBQUFBLFVBQ1Y7QUFDQSxnQkFBTSxRQUFRLGNBQWMsVUFBVSxNQUFNLE1BQU0sU0FBUztBQUFBLFFBQzVEO0FBQUEsTUFFRCxHQUFFO0FBQUE7QUFBQTs7O0FDbndxQkY7QUFBQTtBQU1BLE9BQUMsU0FBVUUsU0FBUUMsV0FBVTtBQUMzQjtBQUdBLFNBQUMsV0FBWTtBQUNYLGNBQUksV0FBVztBQUNmLGNBQUksVUFBVSxDQUFDLE1BQU0sT0FBTyxVQUFVLEdBQUc7QUFDekMsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxVQUFVLENBQUNELFFBQU8sdUJBQXVCLEVBQUUsR0FBRztBQUN4RSxZQUFBQSxRQUFPLHdCQUNMQSxRQUFPLFFBQVEsS0FBSztBQUN0QixZQUFBQSxRQUFPLHVCQUNMQSxRQUFPLFFBQVEsS0FBSywyQkFDcEJBLFFBQU8sUUFBUSxLQUFLO0FBQUEsVUFDeEI7QUFDQSxjQUFJLENBQUNBLFFBQU87QUFDVixZQUFBQSxRQUFPLHdCQUF3QixTQUFVLFVBQVUsU0FBUztBQUMxRCxrQkFBSSxXQUFXLElBQUksS0FBSyxFQUFFLFFBQVE7QUFDbEMsa0JBQUksYUFBYSxLQUFLLElBQUksR0FBRyxNQUFNLFdBQVcsU0FBUztBQUN2RCxrQkFBSSxLQUFLQSxRQUFPLFdBQVcsV0FBWTtBQUNyQyx5QkFBUyxXQUFXLFVBQVU7QUFBQSxjQUNoQyxHQUFHLFVBQVU7QUFDYix5QkFBVyxXQUFXO0FBQ3RCLHFCQUFPO0FBQUEsWUFDVDtBQUNGLGNBQUksQ0FBQ0EsUUFBTztBQUNWLFlBQUFBLFFBQU8sdUJBQXVCLFNBQVUsSUFBSTtBQUMxQywyQkFBYSxFQUFFO0FBQUEsWUFDakI7QUFBQSxRQUNKLEdBQUc7QUFFSCxZQUFJLFFBQ0YsaUJBQ0EsYUFDQSxpQkFDQSxTQUNBLFdBQVcsU0FBVSxNQUFNLE1BQU0sU0FBUztBQUN4QyxjQUFJLEtBQUs7QUFBa0IsaUJBQUssaUJBQWlCLE1BQU0sU0FBUyxLQUFLO0FBQUEsbUJBQzVELEtBQUs7QUFBYSxpQkFBSyxZQUFZLE9BQU8sTUFBTSxPQUFPO0FBQUE7QUFDM0QsaUJBQUssT0FBTyxRQUFRO0FBQUEsUUFDM0IsR0FDQSxVQUFVO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxjQUFjO0FBQUEsVUFDZCxXQUFXO0FBQUEsWUFDVCxHQUFHO0FBQUEsWUFDSCxPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osYUFBYTtBQUFBLFVBQ2IsV0FBVztBQUFBLFFBQ2IsR0FDQSxVQUFVLFdBQVk7QUFDcEIsaUJBQU8sUUFBUUEsUUFBTztBQUN0QixpQkFBTyxTQUFTLFFBQVEsZUFBZTtBQUV2QyxjQUFJLE1BQU0sT0FBTyxXQUFXLElBQUk7QUFDaEMsY0FBSSxhQUFhLFFBQVE7QUFDekIsY0FBSSxjQUFjLFFBQVE7QUFFMUIsY0FBSSxlQUFlLElBQUkscUJBQXFCLEdBQUcsR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUNqRSxtQkFBUyxRQUFRLFFBQVE7QUFDdkIseUJBQWEsYUFBYSxNQUFNLFFBQVEsVUFBVSxLQUFLO0FBQ3pELGNBQUksWUFBWSxRQUFRO0FBQ3hCLGNBQUksVUFBVTtBQUNkLGNBQUksT0FBTyxHQUFHLFFBQVEsZUFBZSxDQUFDO0FBQ3RDLGNBQUk7QUFBQSxZQUNGLEtBQUssS0FBSyxrQkFBa0IsT0FBTyxLQUFLO0FBQUEsWUFDeEMsUUFBUSxlQUFlO0FBQUEsVUFDekI7QUFDQSxjQUFJLGNBQWM7QUFDbEIsY0FBSSxPQUFPO0FBQUEsUUFDYixHQUNBLGVBQWUsV0FBWTtBQUN6QixtQkFBU0MsVUFBUyxjQUFjLFFBQVE7QUFDeEMsY0FBSSxRQUFRLE9BQU87QUFDbkIsZ0JBQU0sV0FBVztBQUNqQixnQkFBTSxNQUFNLE1BQU0sT0FBTyxNQUFNLFFBQVEsTUFBTSxTQUFTLE1BQU0sVUFBVTtBQUN0RSxnQkFBTSxTQUFTO0FBQ2YsZ0JBQU0sVUFBVTtBQUNoQixjQUFJLFFBQVE7QUFBVyxtQkFBTyxVQUFVLElBQUksUUFBUSxTQUFTO0FBQzdELFVBQUFBLFVBQVMsS0FBSyxZQUFZLE1BQU07QUFDaEMsbUJBQVNELFNBQVEsVUFBVSxPQUFPO0FBQUEsUUFDcEMsR0FDQUUsVUFBUztBQUFBLFVBQ1AsUUFBUSxTQUFVLE1BQU07QUFDdEIscUJBQVMsT0FBTztBQUNkLGtCQUFJLFFBQVEsZUFBZSxHQUFHO0FBQUcsd0JBQVEsT0FBTyxLQUFLO0FBQUEsVUFDekQ7QUFBQSxVQUNBLE1BQU0sV0FBWTtBQUNoQixnQkFBSTtBQUFTO0FBQ2Isc0JBQVU7QUFDVixnQkFBSSxnQkFBZ0I7QUFBTSxjQUFBRixRQUFPLHFCQUFxQixXQUFXO0FBQ2pFLGdCQUFJLENBQUM7QUFBUSwyQkFBYTtBQUMxQixtQkFBTyxNQUFNLFVBQVU7QUFDdkIsbUJBQU8sTUFBTSxVQUFVO0FBQ3ZCLFlBQUFFLFFBQU8sU0FBUyxDQUFDO0FBQ2pCLGdCQUFJLFFBQVEsU0FBUztBQUNuQixlQUFDLFNBQVMsT0FBTztBQUNmLGtDQUFrQkYsUUFBTyxzQkFBc0IsSUFBSTtBQUNuRCxnQkFBQUUsUUFBTztBQUFBLGtCQUNMLE1BQU0sT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssZUFBZSxHQUFHLENBQUM7QUFBQSxnQkFDekQ7QUFBQSxjQUNGLEdBQUc7QUFBQSxZQUNMO0FBQUEsVUFDRjtBQUFBLFVBQ0EsVUFBVSxTQUFVLElBQUk7QUFDdEIsZ0JBQUksT0FBTyxPQUFPO0FBQWEscUJBQU87QUFDdEMsZ0JBQUksT0FBTyxPQUFPLFVBQVU7QUFDMUIsb0JBQ0csR0FBRyxRQUFRLEdBQUcsS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLEtBQUssSUFDeEMsa0JBQ0EsS0FBSyxXQUFXLEVBQUU7QUFBQSxZQUMxQjtBQUNBLDhCQUFrQixLQUFLLElBQUksSUFBSTtBQUMvQixvQkFBUTtBQUNSLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0EsTUFBTSxXQUFZO0FBQ2hCLGdCQUFJLENBQUM7QUFBUztBQUNkLHNCQUFVO0FBQ1YsZ0JBQUksbUJBQW1CLE1BQU07QUFDM0IsY0FBQUYsUUFBTyxxQkFBcUIsZUFBZTtBQUMzQyxnQ0FBa0I7QUFBQSxZQUNwQjtBQUNBLGFBQUMsU0FBUyxPQUFPO0FBQ2Ysa0JBQUlFLFFBQU8sU0FBUyxLQUFLLEtBQUssR0FBRztBQUMvQix1QkFBTyxNQUFNLFdBQVc7QUFDeEIsb0JBQUksT0FBTyxNQUFNLFdBQVcsTUFBTTtBQUNoQyx5QkFBTyxNQUFNLFVBQVU7QUFDdkIsZ0NBQWM7QUFDZDtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUNBLDRCQUFjRixRQUFPLHNCQUFzQixJQUFJO0FBQUEsWUFDakQsR0FBRztBQUFBLFVBQ0w7QUFBQSxRQUNGO0FBRUYsWUFBSSxPQUFPLFdBQVcsWUFBWSxPQUFPLE9BQU8sWUFBWSxVQUFVO0FBQ3BFLGlCQUFPLFVBQVVFO0FBQUEsUUFDbkIsV0FBVyxPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFDckQsaUJBQU8sV0FBWTtBQUNqQixtQkFBT0E7QUFBQSxVQUNULENBQUM7QUFBQSxRQUNILE9BQU87QUFDTCxlQUFLLFNBQVNBO0FBQUEsUUFDaEI7QUFBQSxNQUNGLEdBQUUsS0FBSyxTQUFNLFFBQVEsUUFBUTtBQUFBO0FBQUE7OztBQzVKN0IsTUFBQUMsaUJBQWM7OztBQ0FkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHdCQUFBQztBQUFBLElBQUE7QUFBQSw0QkFBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FPLE1BQUksTUFBTTtBQUNWLE1BQUksU0FBUztBQUNiLE1BQUksUUFBUTtBQUNaLE1BQUksT0FBTztBQUNYLE1BQUksT0FBTztBQUNYLE1BQUksaUJBQWlCLENBQUMsS0FBSyxRQUFRLE9BQU8sSUFBSTtBQUM5QyxNQUFJLFFBQVE7QUFDWixNQUFJLE1BQU07QUFDVixNQUFJLGtCQUFrQjtBQUN0QixNQUFJLFdBQVc7QUFDZixNQUFJLFNBQVM7QUFDYixNQUFJLFlBQVk7QUFDaEIsTUFBSSxzQkFBbUMsK0JBQWUsT0FBTyxTQUFVLEtBQUssV0FBVztBQUM1RixXQUFPLElBQUksT0FBTyxDQUFDLFlBQVksTUFBTSxPQUFPLFlBQVksTUFBTSxHQUFHLENBQUM7QUFBQSxFQUNwRSxHQUFHLENBQUMsQ0FBQztBQUNFLE1BQUksYUFBMEIsaUJBQUMsRUFBRSxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sU0FBVSxLQUFLLFdBQVc7QUFDdEcsV0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLFlBQVksTUFBTSxPQUFPLFlBQVksTUFBTSxHQUFHLENBQUM7QUFBQSxFQUMvRSxHQUFHLENBQUMsQ0FBQztBQUVFLE1BQUksYUFBYTtBQUNqQixNQUFJLE9BQU87QUFDWCxNQUFJLFlBQVk7QUFFaEIsTUFBSSxhQUFhO0FBQ2pCLE1BQUksT0FBTztBQUNYLE1BQUksWUFBWTtBQUVoQixNQUFJLGNBQWM7QUFDbEIsTUFBSSxRQUFRO0FBQ1osTUFBSSxhQUFhO0FBQ2pCLE1BQUksaUJBQWlCLENBQUMsWUFBWSxNQUFNLFdBQVcsWUFBWSxNQUFNLFdBQVcsYUFBYSxPQUFPLFVBQVU7OztBQzlCdEcsV0FBUixZQUE2QixTQUFTO0FBQzNDLFdBQU8sV0FBVyxRQUFRLFlBQVksSUFBSSxZQUFZLElBQUk7QUFBQSxFQUM1RDs7O0FDRmUsV0FBUixVQUEyQixNQUFNO0FBQ3RDLFFBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxLQUFLLFNBQVMsTUFBTSxtQkFBbUI7QUFDekMsVUFBSSxnQkFBZ0IsS0FBSztBQUN6QixhQUFPLGdCQUFnQixjQUFjLGVBQWUsU0FBUztBQUFBLElBQy9EO0FBRUEsV0FBTztBQUFBLEVBQ1Q7OztBQ1RBLFdBQVMsVUFBVSxNQUFNO0FBQ3ZCLFFBQUksYUFBYSxVQUFVLElBQUksRUFBRTtBQUNqQyxXQUFPLGdCQUFnQixjQUFjLGdCQUFnQjtBQUFBLEVBQ3ZEO0FBRUEsV0FBUyxjQUFjLE1BQU07QUFDM0IsUUFBSSxhQUFhLFVBQVUsSUFBSSxFQUFFO0FBQ2pDLFdBQU8sZ0JBQWdCLGNBQWMsZ0JBQWdCO0FBQUEsRUFDdkQ7QUFFQSxXQUFTLGFBQWEsTUFBTTtBQUUxQixRQUFJLE9BQU8sZUFBZSxhQUFhO0FBQ3JDLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxhQUFhLFVBQVUsSUFBSSxFQUFFO0FBQ2pDLFdBQU8sZ0JBQWdCLGNBQWMsZ0JBQWdCO0FBQUEsRUFDdkQ7OztBQ2hCQSxXQUFTLFlBQVksTUFBTTtBQUN6QixRQUFJLFFBQVEsS0FBSztBQUNqQixXQUFPLEtBQUssTUFBTSxRQUFRLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDbEQsVUFBSSxRQUFRLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDbkMsVUFBSSxhQUFhLE1BQU0sV0FBVyxTQUFTLENBQUM7QUFDNUMsVUFBSSxVQUFVLE1BQU0sU0FBUztBQUU3QixVQUFJLENBQUMsY0FBYyxPQUFPLEtBQUssQ0FBQyxZQUFZLE9BQU8sR0FBRztBQUNwRDtBQUFBLE1BQ0Y7QUFLQSxhQUFPLE9BQU8sUUFBUSxPQUFPLEtBQUs7QUFDbEMsYUFBTyxLQUFLLFVBQVUsRUFBRSxRQUFRLFNBQVVDLE9BQU07QUFDOUMsWUFBSSxRQUFRLFdBQVdBO0FBRXZCLFlBQUksVUFBVSxPQUFPO0FBQ25CLGtCQUFRLGdCQUFnQkEsS0FBSTtBQUFBLFFBQzlCLE9BQU87QUFDTCxrQkFBUSxhQUFhQSxPQUFNLFVBQVUsT0FBTyxLQUFLLEtBQUs7QUFBQSxRQUN4RDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTLE9BQU8sT0FBTztBQUNyQixRQUFJLFFBQVEsTUFBTTtBQUNsQixRQUFJLGdCQUFnQjtBQUFBLE1BQ2xCLFFBQVE7QUFBQSxRQUNOLFVBQVUsTUFBTSxRQUFRO0FBQUEsUUFDeEIsTUFBTTtBQUFBLFFBQ04sS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLE9BQU87QUFBQSxRQUNMLFVBQVU7QUFBQSxNQUNaO0FBQUEsTUFDQSxXQUFXLENBQUM7QUFBQSxJQUNkO0FBQ0EsV0FBTyxPQUFPLE1BQU0sU0FBUyxPQUFPLE9BQU8sY0FBYyxNQUFNO0FBQy9ELFVBQU0sU0FBUztBQUVmLFFBQUksTUFBTSxTQUFTLE9BQU87QUFDeEIsYUFBTyxPQUFPLE1BQU0sU0FBUyxNQUFNLE9BQU8sY0FBYyxLQUFLO0FBQUEsSUFDL0Q7QUFFQSxXQUFPLFdBQVk7QUFDakIsYUFBTyxLQUFLLE1BQU0sUUFBUSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ2xELFlBQUksVUFBVSxNQUFNLFNBQVM7QUFDN0IsWUFBSSxhQUFhLE1BQU0sV0FBVyxTQUFTLENBQUM7QUFDNUMsWUFBSSxrQkFBa0IsT0FBTyxLQUFLLE1BQU0sT0FBTyxlQUFlLElBQUksSUFBSSxNQUFNLE9BQU8sUUFBUSxjQUFjLEtBQUs7QUFFOUcsWUFBSSxRQUFRLGdCQUFnQixPQUFPLFNBQVVDLFFBQU8sVUFBVTtBQUM1RCxVQUFBQSxPQUFNLFlBQVk7QUFDbEIsaUJBQU9BO0FBQUEsUUFDVCxHQUFHLENBQUMsQ0FBQztBQUVMLFlBQUksQ0FBQyxjQUFjLE9BQU8sS0FBSyxDQUFDLFlBQVksT0FBTyxHQUFHO0FBQ3BEO0FBQUEsUUFDRjtBQUVBLGVBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSztBQUNsQyxlQUFPLEtBQUssVUFBVSxFQUFFLFFBQVEsU0FBVSxXQUFXO0FBQ25ELGtCQUFRLGdCQUFnQixTQUFTO0FBQUEsUUFDbkMsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBR0EsTUFBTyxzQkFBUTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsSUFBSTtBQUFBLElBQ0o7QUFBQSxJQUNBLFVBQVUsQ0FBQyxlQUFlO0FBQUEsRUFDNUI7OztBQ2xGZSxXQUFSLGlCQUFrQyxXQUFXO0FBQ2xELFdBQU8sVUFBVSxNQUFNLEdBQUcsRUFBRTtBQUFBLEVBQzlCOzs7QUNITyxNQUFJLE1BQU0sS0FBSztBQUNmLE1BQUksTUFBTSxLQUFLO0FBQ2YsTUFBSSxRQUFRLEtBQUs7OztBQ0ZULFdBQVIsY0FBK0I7QUFDcEMsUUFBSSxTQUFTLFVBQVU7QUFFdkIsUUFBSSxVQUFVLFFBQVEsT0FBTyxRQUFRO0FBQ25DLGFBQU8sT0FBTyxPQUFPLElBQUksU0FBVSxNQUFNO0FBQ3ZDLGVBQU8sS0FBSyxRQUFRLE1BQU0sS0FBSztBQUFBLE1BQ2pDLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFBQSxJQUNiO0FBRUEsV0FBTyxVQUFVO0FBQUEsRUFDbkI7OztBQ1RlLFdBQVIsbUJBQW9DO0FBQ3pDLFdBQU8sQ0FBQyxpQ0FBaUMsS0FBSyxZQUFZLENBQUM7QUFBQSxFQUM3RDs7O0FDQ2UsV0FBUixzQkFBdUMsU0FBUyxjQUFjLGlCQUFpQjtBQUNwRixRQUFJLGlCQUFpQixRQUFRO0FBQzNCLHFCQUFlO0FBQUEsSUFDakI7QUFFQSxRQUFJLG9CQUFvQixRQUFRO0FBQzlCLHdCQUFrQjtBQUFBLElBQ3BCO0FBRUEsUUFBSSxhQUFhLFFBQVEsc0JBQXNCO0FBQy9DLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUViLFFBQUksZ0JBQWdCLGNBQWMsT0FBTyxHQUFHO0FBQzFDLGVBQVMsUUFBUSxjQUFjLElBQUksTUFBTSxXQUFXLEtBQUssSUFBSSxRQUFRLGVBQWUsSUFBSTtBQUN4RixlQUFTLFFBQVEsZUFBZSxJQUFJLE1BQU0sV0FBVyxNQUFNLElBQUksUUFBUSxnQkFBZ0IsSUFBSTtBQUFBLElBQzdGO0FBRUEsUUFBSSxPQUFPLFVBQVUsT0FBTyxJQUFJLFVBQVUsT0FBTyxJQUFJLFFBQ2pELGlCQUFpQixLQUFLO0FBRTFCLFFBQUksbUJBQW1CLENBQUMsaUJBQWlCLEtBQUs7QUFDOUMsUUFBSSxLQUFLLFdBQVcsUUFBUSxvQkFBb0IsaUJBQWlCLGVBQWUsYUFBYSxNQUFNO0FBQ25HLFFBQUksS0FBSyxXQUFXLE9BQU8sb0JBQW9CLGlCQUFpQixlQUFlLFlBQVksTUFBTTtBQUNqRyxRQUFJLFFBQVEsV0FBVyxRQUFRO0FBQy9CLFFBQUksU0FBUyxXQUFXLFNBQVM7QUFDakMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQSxLQUFLO0FBQUEsTUFDTCxPQUFPLElBQUk7QUFBQSxNQUNYLFFBQVEsSUFBSTtBQUFBLE1BQ1osTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7OztBQ3JDZSxXQUFSLGNBQStCLFNBQVM7QUFDN0MsUUFBSSxhQUFhLHNCQUFzQixPQUFPO0FBRzlDLFFBQUksUUFBUSxRQUFRO0FBQ3BCLFFBQUksU0FBUyxRQUFRO0FBRXJCLFFBQUksS0FBSyxJQUFJLFdBQVcsUUFBUSxLQUFLLEtBQUssR0FBRztBQUMzQyxjQUFRLFdBQVc7QUFBQSxJQUNyQjtBQUVBLFFBQUksS0FBSyxJQUFJLFdBQVcsU0FBUyxNQUFNLEtBQUssR0FBRztBQUM3QyxlQUFTLFdBQVc7QUFBQSxJQUN0QjtBQUVBLFdBQU87QUFBQSxNQUNMLEdBQUcsUUFBUTtBQUFBLE1BQ1gsR0FBRyxRQUFRO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjs7O0FDdkJlLFdBQVIsU0FBMEIsUUFBUSxPQUFPO0FBQzlDLFFBQUksV0FBVyxNQUFNLGVBQWUsTUFBTSxZQUFZO0FBRXRELFFBQUksT0FBTyxTQUFTLEtBQUssR0FBRztBQUMxQixhQUFPO0FBQUEsSUFDVCxXQUNTLFlBQVksYUFBYSxRQUFRLEdBQUc7QUFDekMsVUFBSSxPQUFPO0FBRVgsU0FBRztBQUNELFlBQUksUUFBUSxPQUFPLFdBQVcsSUFBSSxHQUFHO0FBQ25DLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGVBQU8sS0FBSyxjQUFjLEtBQUs7QUFBQSxNQUNqQyxTQUFTO0FBQUEsSUFDWDtBQUdGLFdBQU87QUFBQSxFQUNUOzs7QUNyQmUsV0FBUkMsa0JBQWtDLFNBQVM7QUFDaEQsV0FBTyxVQUFVLE9BQU8sRUFBRSxpQkFBaUIsT0FBTztBQUFBLEVBQ3BEOzs7QUNGZSxXQUFSLGVBQWdDLFNBQVM7QUFDOUMsV0FBTyxDQUFDLFNBQVMsTUFBTSxJQUFJLEVBQUUsUUFBUSxZQUFZLE9BQU8sQ0FBQyxLQUFLO0FBQUEsRUFDaEU7OztBQ0ZlLFdBQVIsbUJBQW9DLFNBQVM7QUFFbEQsYUFBUyxVQUFVLE9BQU8sSUFBSSxRQUFRLGdCQUN0QyxRQUFRLGFBQWEsT0FBTyxVQUFVO0FBQUEsRUFDeEM7OztBQ0ZlLFdBQVIsY0FBK0IsU0FBUztBQUM3QyxRQUFJLFlBQVksT0FBTyxNQUFNLFFBQVE7QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUdFLFFBQVEsZ0JBQ1IsUUFBUSxlQUNSLGFBQWEsT0FBTyxJQUFJLFFBQVEsT0FBTyxTQUV2QyxtQkFBbUIsT0FBTztBQUFBLEVBRzlCOzs7QUNWQSxXQUFTLG9CQUFvQixTQUFTO0FBQ3BDLFFBQUksQ0FBQyxjQUFjLE9BQU8sS0FDMUJDLGtCQUFpQixPQUFPLEVBQUUsYUFBYSxTQUFTO0FBQzlDLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxRQUFRO0FBQUEsRUFDakI7QUFJQSxXQUFTLG1CQUFtQixTQUFTO0FBQ25DLFFBQUksWUFBWSxXQUFXLEtBQUssWUFBWSxDQUFDO0FBQzdDLFFBQUksT0FBTyxXQUFXLEtBQUssWUFBWSxDQUFDO0FBRXhDLFFBQUksUUFBUSxjQUFjLE9BQU8sR0FBRztBQUVsQyxVQUFJLGFBQWFBLGtCQUFpQixPQUFPO0FBRXpDLFVBQUksV0FBVyxhQUFhLFNBQVM7QUFDbkMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsUUFBSSxjQUFjLGNBQWMsT0FBTztBQUV2QyxRQUFJLGFBQWEsV0FBVyxHQUFHO0FBQzdCLG9CQUFjLFlBQVk7QUFBQSxJQUM1QjtBQUVBLFdBQU8sY0FBYyxXQUFXLEtBQUssQ0FBQyxRQUFRLE1BQU0sRUFBRSxRQUFRLFlBQVksV0FBVyxDQUFDLElBQUksR0FBRztBQUMzRixVQUFJLE1BQU1BLGtCQUFpQixXQUFXO0FBSXRDLFVBQUksSUFBSSxjQUFjLFVBQVUsSUFBSSxnQkFBZ0IsVUFBVSxJQUFJLFlBQVksV0FBVyxDQUFDLGFBQWEsYUFBYSxFQUFFLFFBQVEsSUFBSSxVQUFVLE1BQU0sTUFBTSxhQUFhLElBQUksZUFBZSxZQUFZLGFBQWEsSUFBSSxVQUFVLElBQUksV0FBVyxRQUFRO0FBQ3BQLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxzQkFBYyxZQUFZO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFJZSxXQUFSLGdCQUFpQyxTQUFTO0FBQy9DLFFBQUlDLFVBQVMsVUFBVSxPQUFPO0FBQzlCLFFBQUksZUFBZSxvQkFBb0IsT0FBTztBQUU5QyxXQUFPLGdCQUFnQixlQUFlLFlBQVksS0FBS0Qsa0JBQWlCLFlBQVksRUFBRSxhQUFhLFVBQVU7QUFDM0cscUJBQWUsb0JBQW9CLFlBQVk7QUFBQSxJQUNqRDtBQUVBLFFBQUksaUJBQWlCLFlBQVksWUFBWSxNQUFNLFVBQVUsWUFBWSxZQUFZLE1BQU0sVUFBVUEsa0JBQWlCLFlBQVksRUFBRSxhQUFhLFdBQVc7QUFDMUosYUFBT0M7QUFBQSxJQUNUO0FBRUEsV0FBTyxnQkFBZ0IsbUJBQW1CLE9BQU8sS0FBS0E7QUFBQSxFQUN4RDs7O0FDcEVlLFdBQVIseUJBQTBDLFdBQVc7QUFDMUQsV0FBTyxDQUFDLE9BQU8sUUFBUSxFQUFFLFFBQVEsU0FBUyxLQUFLLElBQUksTUFBTTtBQUFBLEVBQzNEOzs7QUNETyxXQUFTLE9BQU9DLE1BQUssT0FBT0MsTUFBSztBQUN0QyxXQUFPLElBQVFELE1BQUssSUFBUSxPQUFPQyxJQUFHLENBQUM7QUFBQSxFQUN6QztBQUNPLFdBQVMsZUFBZUQsTUFBSyxPQUFPQyxNQUFLO0FBQzlDLFFBQUksSUFBSSxPQUFPRCxNQUFLLE9BQU9DLElBQUc7QUFDOUIsV0FBTyxJQUFJQSxPQUFNQSxPQUFNO0FBQUEsRUFDekI7OztBQ1BlLFdBQVIscUJBQXNDO0FBQzNDLFdBQU87QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjs7O0FDTmUsV0FBUixtQkFBb0MsZUFBZTtBQUN4RCxXQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsYUFBYTtBQUFBLEVBQzlEOzs7QUNIZSxXQUFSLGdCQUFpQyxPQUFPLE1BQU07QUFDbkQsV0FBTyxLQUFLLE9BQU8sU0FBVSxTQUFTLEtBQUs7QUFDekMsY0FBUSxPQUFPO0FBQ2YsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNQOzs7QUNNQSxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0IsU0FBUyxPQUFPO0FBQzdELGNBQVUsT0FBTyxZQUFZLGFBQWEsUUFBUSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTztBQUFBLE1BQy9FLFdBQVcsTUFBTTtBQUFBLElBQ25CLENBQUMsQ0FBQyxJQUFJO0FBQ04sV0FBTyxtQkFBbUIsT0FBTyxZQUFZLFdBQVcsVUFBVSxnQkFBZ0IsU0FBUyxjQUFjLENBQUM7QUFBQSxFQUM1RztBQUVBLFdBQVMsTUFBTSxNQUFNO0FBQ25CLFFBQUk7QUFFSixRQUFJLFFBQVEsS0FBSyxPQUNiLE9BQU8sS0FBSyxNQUNaLFVBQVUsS0FBSztBQUNuQixRQUFJLGVBQWUsTUFBTSxTQUFTO0FBQ2xDLFFBQUlDLGlCQUFnQixNQUFNLGNBQWM7QUFDeEMsUUFBSSxnQkFBZ0IsaUJBQWlCLE1BQU0sU0FBUztBQUNwRCxRQUFJLE9BQU8seUJBQXlCLGFBQWE7QUFDakQsUUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLEVBQUUsUUFBUSxhQUFhLEtBQUs7QUFDekQsUUFBSSxNQUFNLGFBQWEsV0FBVztBQUVsQyxRQUFJLENBQUMsZ0JBQWdCLENBQUNBLGdCQUFlO0FBQ25DO0FBQUEsSUFDRjtBQUVBLFFBQUksZ0JBQWdCLGdCQUFnQixRQUFRLFNBQVMsS0FBSztBQUMxRCxRQUFJLFlBQVksY0FBYyxZQUFZO0FBQzFDLFFBQUksVUFBVSxTQUFTLE1BQU0sTUFBTTtBQUNuQyxRQUFJLFVBQVUsU0FBUyxNQUFNLFNBQVM7QUFDdEMsUUFBSSxVQUFVLE1BQU0sTUFBTSxVQUFVLE9BQU8sTUFBTSxNQUFNLFVBQVUsUUFBUUEsZUFBYyxRQUFRLE1BQU0sTUFBTSxPQUFPO0FBQ2xILFFBQUksWUFBWUEsZUFBYyxRQUFRLE1BQU0sTUFBTSxVQUFVO0FBQzVELFFBQUksb0JBQW9CLGdCQUFnQixZQUFZO0FBQ3BELFFBQUksYUFBYSxvQkFBb0IsU0FBUyxNQUFNLGtCQUFrQixnQkFBZ0IsSUFBSSxrQkFBa0IsZUFBZSxJQUFJO0FBQy9ILFFBQUksb0JBQW9CLFVBQVUsSUFBSSxZQUFZO0FBR2xELFFBQUlDLE9BQU0sY0FBYztBQUN4QixRQUFJQyxPQUFNLGFBQWEsVUFBVSxPQUFPLGNBQWM7QUFDdEQsUUFBSSxTQUFTLGFBQWEsSUFBSSxVQUFVLE9BQU8sSUFBSTtBQUNuRCxRQUFJQyxVQUFTLE9BQU9GLE1BQUssUUFBUUMsSUFBRztBQUVwQyxRQUFJLFdBQVc7QUFDZixVQUFNLGNBQWMsU0FBUyx3QkFBd0IsQ0FBQyxHQUFHLHNCQUFzQixZQUFZQyxTQUFRLHNCQUFzQixlQUFlQSxVQUFTLFFBQVE7QUFBQSxFQUMzSjtBQUVBLFdBQVNDLFFBQU8sT0FBTztBQUNyQixRQUFJLFFBQVEsTUFBTSxPQUNkLFVBQVUsTUFBTTtBQUNwQixRQUFJLG1CQUFtQixRQUFRLFNBQzNCLGVBQWUscUJBQXFCLFNBQVMsd0JBQXdCO0FBRXpFLFFBQUksZ0JBQWdCLE1BQU07QUFDeEI7QUFBQSxJQUNGO0FBR0EsUUFBSSxPQUFPLGlCQUFpQixVQUFVO0FBQ3BDLHFCQUFlLE1BQU0sU0FBUyxPQUFPLGNBQWMsWUFBWTtBQUUvRCxVQUFJLENBQUMsY0FBYztBQUNqQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxNQUF1QztBQUN6QyxVQUFJLENBQUMsY0FBYyxZQUFZLEdBQUc7QUFDaEMsZ0JBQVEsTUFBTSxDQUFDLHVFQUF1RSx1RUFBdUUsWUFBWSxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDdEw7QUFBQSxJQUNGO0FBRUEsUUFBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLFFBQVEsWUFBWSxHQUFHO0FBQ2xELFVBQUksTUFBdUM7QUFDekMsZ0JBQVEsTUFBTSxDQUFDLHVFQUF1RSxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUM3RztBQUVBO0FBQUEsSUFDRjtBQUVBLFVBQU0sU0FBUyxRQUFRO0FBQUEsRUFDekI7QUFHQSxNQUFPLGdCQUFRO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixRQUFRQTtBQUFBLElBQ1IsVUFBVSxDQUFDLGVBQWU7QUFBQSxJQUMxQixrQkFBa0IsQ0FBQyxpQkFBaUI7QUFBQSxFQUN0Qzs7O0FDcEdlLFdBQVIsYUFBOEIsV0FBVztBQUM5QyxXQUFPLFVBQVUsTUFBTSxHQUFHLEVBQUU7QUFBQSxFQUM5Qjs7O0FDT0EsTUFBSSxhQUFhO0FBQUEsSUFDZixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUjtBQUlBLFdBQVMsa0JBQWtCLE1BQU07QUFDL0IsUUFBSSxJQUFJLEtBQUssR0FDVCxJQUFJLEtBQUs7QUFDYixRQUFJLE1BQU07QUFDVixRQUFJLE1BQU0sSUFBSSxvQkFBb0I7QUFDbEMsV0FBTztBQUFBLE1BQ0wsR0FBRyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU87QUFBQSxNQUMzQixHQUFHLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTztBQUFBLElBQzdCO0FBQUEsRUFDRjtBQUVPLFdBQVMsWUFBWSxPQUFPO0FBQ2pDLFFBQUk7QUFFSixRQUFJQyxVQUFTLE1BQU0sUUFDZixhQUFhLE1BQU0sWUFDbkIsWUFBWSxNQUFNLFdBQ2xCLFlBQVksTUFBTSxXQUNsQixVQUFVLE1BQU0sU0FDaEIsV0FBVyxNQUFNLFVBQ2pCLGtCQUFrQixNQUFNLGlCQUN4QixXQUFXLE1BQU0sVUFDakIsZUFBZSxNQUFNLGNBQ3JCLFVBQVUsTUFBTTtBQUNwQixRQUFJLGFBQWEsUUFBUSxHQUNyQixJQUFJLGVBQWUsU0FBUyxJQUFJLFlBQ2hDLGFBQWEsUUFBUSxHQUNyQixJQUFJLGVBQWUsU0FBUyxJQUFJO0FBRXBDLFFBQUksUUFBUSxPQUFPLGlCQUFpQixhQUFhLGFBQWE7QUFBQSxNQUM1RDtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUMsSUFBSTtBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTTtBQUNWLFFBQUksTUFBTTtBQUNWLFFBQUksT0FBTyxRQUFRLGVBQWUsR0FBRztBQUNyQyxRQUFJLE9BQU8sUUFBUSxlQUFlLEdBQUc7QUFDckMsUUFBSSxRQUFRO0FBQ1osUUFBSSxRQUFRO0FBQ1osUUFBSSxNQUFNO0FBRVYsUUFBSSxVQUFVO0FBQ1osVUFBSSxlQUFlLGdCQUFnQkEsT0FBTTtBQUN6QyxVQUFJLGFBQWE7QUFDakIsVUFBSSxZQUFZO0FBRWhCLFVBQUksaUJBQWlCLFVBQVVBLE9BQU0sR0FBRztBQUN0Qyx1QkFBZSxtQkFBbUJBLE9BQU07QUFFeEMsWUFBSUMsa0JBQWlCLFlBQVksRUFBRSxhQUFhLFlBQVksYUFBYSxZQUFZO0FBQ25GLHVCQUFhO0FBQ2Isc0JBQVk7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUdBLHFCQUFlO0FBRWYsVUFBSSxjQUFjLFFBQVEsY0FBYyxRQUFRLGNBQWMsVUFBVSxjQUFjLEtBQUs7QUFDekYsZ0JBQVE7QUFDUixZQUFJLFVBQVUsV0FBVyxpQkFBaUIsT0FBTyxJQUFJLGlCQUFpQixJQUFJLGVBQWUsU0FDekYsYUFBYTtBQUNiLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssa0JBQWtCLElBQUk7QUFBQSxNQUM3QjtBQUVBLFVBQUksY0FBYyxTQUFTLGNBQWMsT0FBTyxjQUFjLFdBQVcsY0FBYyxLQUFLO0FBQzFGLGdCQUFRO0FBQ1IsWUFBSSxVQUFVLFdBQVcsaUJBQWlCLE9BQU8sSUFBSSxpQkFBaUIsSUFBSSxlQUFlLFFBQ3pGLGFBQWE7QUFDYixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLGtCQUFrQixJQUFJO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBRUEsUUFBSSxlQUFlLE9BQU8sT0FBTztBQUFBLE1BQy9CO0FBQUEsSUFDRixHQUFHLFlBQVksVUFBVTtBQUV6QixRQUFJLFFBQVEsaUJBQWlCLE9BQU8sa0JBQWtCO0FBQUEsTUFDcEQ7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLElBQUk7QUFBQSxNQUNIO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU07QUFDVixRQUFJLE1BQU07QUFFVixRQUFJLGlCQUFpQjtBQUNuQixVQUFJO0FBRUosYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGVBQWUsaUJBQWlCLENBQUMsR0FBRyxlQUFlLFNBQVMsT0FBTyxNQUFNLElBQUksZUFBZSxTQUFTLE9BQU8sTUFBTSxJQUFJLGVBQWUsYUFBYSxJQUFJLG9CQUFvQixNQUFNLElBQUksZUFBZSxJQUFJLFNBQVMsSUFBSSxRQUFRLGlCQUFpQixJQUFJLFNBQVMsSUFBSSxVQUFVLGVBQWU7QUFBQSxJQUNsVDtBQUVBLFdBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxlQUFlLGtCQUFrQixDQUFDLEdBQUcsZ0JBQWdCLFNBQVMsT0FBTyxJQUFJLE9BQU8sSUFBSSxnQkFBZ0IsU0FBUyxPQUFPLElBQUksT0FBTyxJQUFJLGdCQUFnQixZQUFZLElBQUksZ0JBQWdCO0FBQUEsRUFDOU07QUFFQSxXQUFTLGNBQWMsT0FBTztBQUM1QixRQUFJLFFBQVEsTUFBTSxPQUNkLFVBQVUsTUFBTTtBQUNwQixRQUFJLHdCQUF3QixRQUFRLGlCQUNoQyxrQkFBa0IsMEJBQTBCLFNBQVMsT0FBTyx1QkFDNUQsb0JBQW9CLFFBQVEsVUFDNUIsV0FBVyxzQkFBc0IsU0FBUyxPQUFPLG1CQUNqRCx3QkFBd0IsUUFBUSxjQUNoQyxlQUFlLDBCQUEwQixTQUFTLE9BQU87QUFFN0QsUUFBSSxNQUF1QztBQUN6QyxVQUFJLHFCQUFxQkEsa0JBQWlCLE1BQU0sU0FBUyxNQUFNLEVBQUUsc0JBQXNCO0FBRXZGLFVBQUksWUFBWSxDQUFDLGFBQWEsT0FBTyxTQUFTLFVBQVUsTUFBTSxFQUFFLEtBQUssU0FBVSxVQUFVO0FBQ3ZGLGVBQU8sbUJBQW1CLFFBQVEsUUFBUSxLQUFLO0FBQUEsTUFDakQsQ0FBQyxHQUFHO0FBQ0YsZ0JBQVEsS0FBSyxDQUFDLHFFQUFxRSxrRUFBa0UsUUFBUSxzRUFBc0UsbUVBQW1FLHNFQUFzRSw0Q0FBNEMsUUFBUSxzRUFBc0UscUVBQXFFLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUN4akI7QUFBQSxJQUNGO0FBRUEsUUFBSSxlQUFlO0FBQUEsTUFDakIsV0FBVyxpQkFBaUIsTUFBTSxTQUFTO0FBQUEsTUFDM0MsV0FBVyxhQUFhLE1BQU0sU0FBUztBQUFBLE1BQ3ZDLFFBQVEsTUFBTSxTQUFTO0FBQUEsTUFDdkIsWUFBWSxNQUFNLE1BQU07QUFBQSxNQUN4QjtBQUFBLE1BQ0EsU0FBUyxNQUFNLFFBQVEsYUFBYTtBQUFBLElBQ3RDO0FBRUEsUUFBSSxNQUFNLGNBQWMsaUJBQWlCLE1BQU07QUFDN0MsWUFBTSxPQUFPLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU8sUUFBUSxZQUFZLE9BQU8sT0FBTyxDQUFDLEdBQUcsY0FBYztBQUFBLFFBQ3ZHLFNBQVMsTUFBTSxjQUFjO0FBQUEsUUFDN0IsVUFBVSxNQUFNLFFBQVE7QUFBQSxRQUN4QjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDTDtBQUVBLFFBQUksTUFBTSxjQUFjLFNBQVMsTUFBTTtBQUNyQyxZQUFNLE9BQU8sUUFBUSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxPQUFPLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxjQUFjO0FBQUEsUUFDckcsU0FBUyxNQUFNLGNBQWM7QUFBQSxRQUM3QixVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsUUFDVjtBQUFBLE1BQ0YsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNMO0FBRUEsVUFBTSxXQUFXLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFdBQVcsUUFBUTtBQUFBLE1BQ25FLHlCQUF5QixNQUFNO0FBQUEsSUFDakMsQ0FBQztBQUFBLEVBQ0g7QUFHQSxNQUFPLHdCQUFRO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixNQUFNLENBQUM7QUFBQSxFQUNUOzs7QUNsTEEsTUFBSSxVQUFVO0FBQUEsSUFDWixTQUFTO0FBQUEsRUFDWDtBQUVBLFdBQVNDLFFBQU8sTUFBTTtBQUNwQixRQUFJLFFBQVEsS0FBSyxPQUNiLFdBQVcsS0FBSyxVQUNoQixVQUFVLEtBQUs7QUFDbkIsUUFBSSxrQkFBa0IsUUFBUSxRQUMxQixTQUFTLG9CQUFvQixTQUFTLE9BQU8saUJBQzdDLGtCQUFrQixRQUFRLFFBQzFCLFNBQVMsb0JBQW9CLFNBQVMsT0FBTztBQUNqRCxRQUFJQyxVQUFTLFVBQVUsTUFBTSxTQUFTLE1BQU07QUFDNUMsUUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sTUFBTSxjQUFjLFdBQVcsTUFBTSxjQUFjLE1BQU07QUFFdkYsUUFBSSxRQUFRO0FBQ1Ysb0JBQWMsUUFBUSxTQUFVLGNBQWM7QUFDNUMscUJBQWEsaUJBQWlCLFVBQVUsU0FBUyxRQUFRLE9BQU87QUFBQSxNQUNsRSxDQUFDO0FBQUEsSUFDSDtBQUVBLFFBQUksUUFBUTtBQUNWLE1BQUFBLFFBQU8saUJBQWlCLFVBQVUsU0FBUyxRQUFRLE9BQU87QUFBQSxJQUM1RDtBQUVBLFdBQU8sV0FBWTtBQUNqQixVQUFJLFFBQVE7QUFDVixzQkFBYyxRQUFRLFNBQVUsY0FBYztBQUM1Qyx1QkFBYSxvQkFBb0IsVUFBVSxTQUFTLFFBQVEsT0FBTztBQUFBLFFBQ3JFLENBQUM7QUFBQSxNQUNIO0FBRUEsVUFBSSxRQUFRO0FBQ1YsUUFBQUEsUUFBTyxvQkFBb0IsVUFBVSxTQUFTLFFBQVEsT0FBTztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFHQSxNQUFPLHlCQUFRO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxJQUFJLFNBQVMsS0FBSztBQUFBLElBQUM7QUFBQSxJQUNuQixRQUFRRDtBQUFBLElBQ1IsTUFBTSxDQUFDO0FBQUEsRUFDVDs7O0FDaERBLE1BQUksT0FBTztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLEVBQ1A7QUFDZSxXQUFSLHFCQUFzQyxXQUFXO0FBQ3RELFdBQU8sVUFBVSxRQUFRLDBCQUEwQixTQUFVLFNBQVM7QUFDcEUsYUFBTyxLQUFLO0FBQUEsSUFDZCxDQUFDO0FBQUEsRUFDSDs7O0FDVkEsTUFBSUUsUUFBTztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1A7QUFDZSxXQUFSLDhCQUErQyxXQUFXO0FBQy9ELFdBQU8sVUFBVSxRQUFRLGNBQWMsU0FBVSxTQUFTO0FBQ3hELGFBQU9BLE1BQUs7QUFBQSxJQUNkLENBQUM7QUFBQSxFQUNIOzs7QUNQZSxXQUFSLGdCQUFpQyxNQUFNO0FBQzVDLFFBQUksTUFBTSxVQUFVLElBQUk7QUFDeEIsUUFBSSxhQUFhLElBQUk7QUFDckIsUUFBSSxZQUFZLElBQUk7QUFDcEIsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7OztBQ05lLFdBQVIsb0JBQXFDLFNBQVM7QUFRbkQsV0FBTyxzQkFBc0IsbUJBQW1CLE9BQU8sQ0FBQyxFQUFFLE9BQU8sZ0JBQWdCLE9BQU8sRUFBRTtBQUFBLEVBQzVGOzs7QUNSZSxXQUFSLGdCQUFpQyxTQUFTLFVBQVU7QUFDekQsUUFBSSxNQUFNLFVBQVUsT0FBTztBQUMzQixRQUFJLE9BQU8sbUJBQW1CLE9BQU87QUFDckMsUUFBSSxpQkFBaUIsSUFBSTtBQUN6QixRQUFJLFFBQVEsS0FBSztBQUNqQixRQUFJLFNBQVMsS0FBSztBQUNsQixRQUFJLElBQUk7QUFDUixRQUFJLElBQUk7QUFFUixRQUFJLGdCQUFnQjtBQUNsQixjQUFRLGVBQWU7QUFDdkIsZUFBUyxlQUFlO0FBQ3hCLFVBQUksaUJBQWlCLGlCQUFpQjtBQUV0QyxVQUFJLGtCQUFrQixDQUFDLGtCQUFrQixhQUFhLFNBQVM7QUFDN0QsWUFBSSxlQUFlO0FBQ25CLFlBQUksZUFBZTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsR0FBRyxJQUFJLG9CQUFvQixPQUFPO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUEsRUFDRjs7O0FDdkJlLFdBQVIsZ0JBQWlDLFNBQVM7QUFDL0MsUUFBSTtBQUVKLFFBQUksT0FBTyxtQkFBbUIsT0FBTztBQUNyQyxRQUFJLFlBQVksZ0JBQWdCLE9BQU87QUFDdkMsUUFBSSxRQUFRLHdCQUF3QixRQUFRLGtCQUFrQixPQUFPLFNBQVMsc0JBQXNCO0FBQ3BHLFFBQUksUUFBUSxJQUFJLEtBQUssYUFBYSxLQUFLLGFBQWEsT0FBTyxLQUFLLGNBQWMsR0FBRyxPQUFPLEtBQUssY0FBYyxDQUFDO0FBQzVHLFFBQUksU0FBUyxJQUFJLEtBQUssY0FBYyxLQUFLLGNBQWMsT0FBTyxLQUFLLGVBQWUsR0FBRyxPQUFPLEtBQUssZUFBZSxDQUFDO0FBQ2pILFFBQUksSUFBSSxDQUFDLFVBQVUsYUFBYSxvQkFBb0IsT0FBTztBQUMzRCxRQUFJLElBQUksQ0FBQyxVQUFVO0FBRW5CLFFBQUlDLGtCQUFpQixRQUFRLElBQUksRUFBRSxjQUFjLE9BQU87QUFDdEQsV0FBSyxJQUFJLEtBQUssYUFBYSxPQUFPLEtBQUssY0FBYyxDQUFDLElBQUk7QUFBQSxJQUM1RDtBQUVBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7OztBQzNCZSxXQUFSLGVBQWdDLFNBQVM7QUFFOUMsUUFBSSxvQkFBb0JDLGtCQUFpQixPQUFPLEdBQzVDLFdBQVcsa0JBQWtCLFVBQzdCLFlBQVksa0JBQWtCLFdBQzlCLFlBQVksa0JBQWtCO0FBRWxDLFdBQU8sNkJBQTZCLEtBQUssV0FBVyxZQUFZLFNBQVM7QUFBQSxFQUMzRTs7O0FDTGUsV0FBUixnQkFBaUMsTUFBTTtBQUM1QyxRQUFJLENBQUMsUUFBUSxRQUFRLFdBQVcsRUFBRSxRQUFRLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRztBQUVqRSxhQUFPLEtBQUssY0FBYztBQUFBLElBQzVCO0FBRUEsUUFBSSxjQUFjLElBQUksS0FBSyxlQUFlLElBQUksR0FBRztBQUMvQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sZ0JBQWdCLGNBQWMsSUFBSSxDQUFDO0FBQUEsRUFDNUM7OztBQ0plLFdBQVIsa0JBQW1DLFNBQVMsTUFBTTtBQUN2RCxRQUFJO0FBRUosUUFBSSxTQUFTLFFBQVE7QUFDbkIsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFFBQUksZUFBZSxnQkFBZ0IsT0FBTztBQUMxQyxRQUFJLFNBQVMsbUJBQW1CLHdCQUF3QixRQUFRLGtCQUFrQixPQUFPLFNBQVMsc0JBQXNCO0FBQ3hILFFBQUksTUFBTSxVQUFVLFlBQVk7QUFDaEMsUUFBSSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsZUFBZSxZQUFZLElBQUksZUFBZSxDQUFDLENBQUMsSUFBSTtBQUNqSCxRQUFJLGNBQWMsS0FBSyxPQUFPLE1BQU07QUFDcEMsV0FBTyxTQUFTLGNBQ2hCLFlBQVksT0FBTyxrQkFBa0IsY0FBYyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQzdEOzs7QUN6QmUsV0FBUixpQkFBa0MsTUFBTTtBQUM3QyxXQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTTtBQUFBLE1BQzdCLE1BQU0sS0FBSztBQUFBLE1BQ1gsS0FBSyxLQUFLO0FBQUEsTUFDVixPQUFPLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDckIsUUFBUSxLQUFLLElBQUksS0FBSztBQUFBLElBQ3hCLENBQUM7QUFBQSxFQUNIOzs7QUNRQSxXQUFTLDJCQUEyQixTQUFTLFVBQVU7QUFDckQsUUFBSSxPQUFPLHNCQUFzQixTQUFTLE9BQU8sYUFBYSxPQUFPO0FBQ3JFLFNBQUssTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM5QixTQUFLLE9BQU8sS0FBSyxPQUFPLFFBQVE7QUFDaEMsU0FBSyxTQUFTLEtBQUssTUFBTSxRQUFRO0FBQ2pDLFNBQUssUUFBUSxLQUFLLE9BQU8sUUFBUTtBQUNqQyxTQUFLLFFBQVEsUUFBUTtBQUNyQixTQUFLLFNBQVMsUUFBUTtBQUN0QixTQUFLLElBQUksS0FBSztBQUNkLFNBQUssSUFBSSxLQUFLO0FBQ2QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLDJCQUEyQixTQUFTLGdCQUFnQixVQUFVO0FBQ3JFLFdBQU8sbUJBQW1CLFdBQVcsaUJBQWlCLGdCQUFnQixTQUFTLFFBQVEsQ0FBQyxJQUFJLFVBQVUsY0FBYyxJQUFJLDJCQUEyQixnQkFBZ0IsUUFBUSxJQUFJLGlCQUFpQixnQkFBZ0IsbUJBQW1CLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDOU87QUFLQSxXQUFTLG1CQUFtQixTQUFTO0FBQ25DLFFBQUlDLG1CQUFrQixrQkFBa0IsY0FBYyxPQUFPLENBQUM7QUFDOUQsUUFBSSxvQkFBb0IsQ0FBQyxZQUFZLE9BQU8sRUFBRSxRQUFRQyxrQkFBaUIsT0FBTyxFQUFFLFFBQVEsS0FBSztBQUM3RixRQUFJLGlCQUFpQixxQkFBcUIsY0FBYyxPQUFPLElBQUksZ0JBQWdCLE9BQU8sSUFBSTtBQUU5RixRQUFJLENBQUMsVUFBVSxjQUFjLEdBQUc7QUFDOUIsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUdBLFdBQU9ELGlCQUFnQixPQUFPLFNBQVUsZ0JBQWdCO0FBQ3RELGFBQU8sVUFBVSxjQUFjLEtBQUssU0FBUyxnQkFBZ0IsY0FBYyxLQUFLLFlBQVksY0FBYyxNQUFNO0FBQUEsSUFDbEgsQ0FBQztBQUFBLEVBQ0g7QUFJZSxXQUFSLGdCQUFpQyxTQUFTLFVBQVUsY0FBYyxVQUFVO0FBQ2pGLFFBQUksc0JBQXNCLGFBQWEsb0JBQW9CLG1CQUFtQixPQUFPLElBQUksQ0FBQyxFQUFFLE9BQU8sUUFBUTtBQUMzRyxRQUFJQSxtQkFBa0IsQ0FBQyxFQUFFLE9BQU8scUJBQXFCLENBQUMsWUFBWSxDQUFDO0FBQ25FLFFBQUksc0JBQXNCQSxpQkFBZ0I7QUFDMUMsUUFBSSxlQUFlQSxpQkFBZ0IsT0FBTyxTQUFVLFNBQVMsZ0JBQWdCO0FBQzNFLFVBQUksT0FBTywyQkFBMkIsU0FBUyxnQkFBZ0IsUUFBUTtBQUN2RSxjQUFRLE1BQU0sSUFBSSxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQ3ZDLGNBQVEsUUFBUSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUs7QUFDN0MsY0FBUSxTQUFTLElBQUksS0FBSyxRQUFRLFFBQVEsTUFBTTtBQUNoRCxjQUFRLE9BQU8sSUFBSSxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBQzFDLGFBQU87QUFBQSxJQUNULEdBQUcsMkJBQTJCLFNBQVMscUJBQXFCLFFBQVEsQ0FBQztBQUNyRSxpQkFBYSxRQUFRLGFBQWEsUUFBUSxhQUFhO0FBQ3ZELGlCQUFhLFNBQVMsYUFBYSxTQUFTLGFBQWE7QUFDekQsaUJBQWEsSUFBSSxhQUFhO0FBQzlCLGlCQUFhLElBQUksYUFBYTtBQUM5QixXQUFPO0FBQUEsRUFDVDs7O0FDakVlLFdBQVIsZUFBZ0MsTUFBTTtBQUMzQyxRQUFJRSxhQUFZLEtBQUssV0FDakIsVUFBVSxLQUFLLFNBQ2YsWUFBWSxLQUFLO0FBQ3JCLFFBQUksZ0JBQWdCLFlBQVksaUJBQWlCLFNBQVMsSUFBSTtBQUM5RCxRQUFJLFlBQVksWUFBWSxhQUFhLFNBQVMsSUFBSTtBQUN0RCxRQUFJLFVBQVVBLFdBQVUsSUFBSUEsV0FBVSxRQUFRLElBQUksUUFBUSxRQUFRO0FBQ2xFLFFBQUksVUFBVUEsV0FBVSxJQUFJQSxXQUFVLFNBQVMsSUFBSSxRQUFRLFNBQVM7QUFDcEUsUUFBSTtBQUVKLFlBQVEsZUFBZTtBQUFBLE1BQ3JCLEtBQUs7QUFDSCxrQkFBVTtBQUFBLFVBQ1IsR0FBRztBQUFBLFVBQ0gsR0FBR0EsV0FBVSxJQUFJLFFBQVE7QUFBQSxRQUMzQjtBQUNBO0FBQUEsTUFFRixLQUFLO0FBQ0gsa0JBQVU7QUFBQSxVQUNSLEdBQUc7QUFBQSxVQUNILEdBQUdBLFdBQVUsSUFBSUEsV0FBVTtBQUFBLFFBQzdCO0FBQ0E7QUFBQSxNQUVGLEtBQUs7QUFDSCxrQkFBVTtBQUFBLFVBQ1IsR0FBR0EsV0FBVSxJQUFJQSxXQUFVO0FBQUEsVUFDM0IsR0FBRztBQUFBLFFBQ0w7QUFDQTtBQUFBLE1BRUYsS0FBSztBQUNILGtCQUFVO0FBQUEsVUFDUixHQUFHQSxXQUFVLElBQUksUUFBUTtBQUFBLFVBQ3pCLEdBQUc7QUFBQSxRQUNMO0FBQ0E7QUFBQSxNQUVGO0FBQ0Usa0JBQVU7QUFBQSxVQUNSLEdBQUdBLFdBQVU7QUFBQSxVQUNiLEdBQUdBLFdBQVU7QUFBQSxRQUNmO0FBQUEsSUFDSjtBQUVBLFFBQUksV0FBVyxnQkFBZ0IseUJBQXlCLGFBQWEsSUFBSTtBQUV6RSxRQUFJLFlBQVksTUFBTTtBQUNwQixVQUFJLE1BQU0sYUFBYSxNQUFNLFdBQVc7QUFFeEMsY0FBUSxXQUFXO0FBQUEsUUFDakIsS0FBSztBQUNILGtCQUFRLFlBQVksUUFBUSxhQUFhQSxXQUFVLE9BQU8sSUFBSSxRQUFRLE9BQU87QUFDN0U7QUFBQSxRQUVGLEtBQUs7QUFDSCxrQkFBUSxZQUFZLFFBQVEsYUFBYUEsV0FBVSxPQUFPLElBQUksUUFBUSxPQUFPO0FBQzdFO0FBQUEsUUFFRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7OztBQzNEZSxXQUFSLGVBQWdDLE9BQU8sU0FBUztBQUNyRCxRQUFJLFlBQVksUUFBUTtBQUN0QixnQkFBVSxDQUFDO0FBQUEsSUFDYjtBQUVBLFFBQUksV0FBVyxTQUNYLHFCQUFxQixTQUFTLFdBQzlCLFlBQVksdUJBQXVCLFNBQVMsTUFBTSxZQUFZLG9CQUM5RCxvQkFBb0IsU0FBUyxVQUM3QixXQUFXLHNCQUFzQixTQUFTLE1BQU0sV0FBVyxtQkFDM0Qsb0JBQW9CLFNBQVMsVUFDN0IsV0FBVyxzQkFBc0IsU0FBUyxrQkFBa0IsbUJBQzVELHdCQUF3QixTQUFTLGNBQ2pDLGVBQWUsMEJBQTBCLFNBQVMsV0FBVyx1QkFDN0Qsd0JBQXdCLFNBQVMsZ0JBQ2pDLGlCQUFpQiwwQkFBMEIsU0FBUyxTQUFTLHVCQUM3RCx1QkFBdUIsU0FBUyxhQUNoQyxjQUFjLHlCQUF5QixTQUFTLFFBQVEsc0JBQ3hELG1CQUFtQixTQUFTLFNBQzVCLFVBQVUscUJBQXFCLFNBQVMsSUFBSTtBQUNoRCxRQUFJLGdCQUFnQixtQkFBbUIsT0FBTyxZQUFZLFdBQVcsVUFBVSxnQkFBZ0IsU0FBUyxjQUFjLENBQUM7QUFDdkgsUUFBSSxhQUFhLG1CQUFtQixTQUFTLFlBQVk7QUFDekQsUUFBSSxhQUFhLE1BQU0sTUFBTTtBQUM3QixRQUFJLFVBQVUsTUFBTSxTQUFTLGNBQWMsYUFBYTtBQUN4RCxRQUFJLHFCQUFxQixnQkFBZ0IsVUFBVSxPQUFPLElBQUksVUFBVSxRQUFRLGtCQUFrQixtQkFBbUIsTUFBTSxTQUFTLE1BQU0sR0FBRyxVQUFVLGNBQWMsUUFBUTtBQUM3SyxRQUFJLHNCQUFzQixzQkFBc0IsTUFBTSxTQUFTLFNBQVM7QUFDeEUsUUFBSUMsaUJBQWdCLGVBQWU7QUFBQSxNQUNqQyxXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVjtBQUFBLElBQ0YsQ0FBQztBQUNELFFBQUksbUJBQW1CLGlCQUFpQixPQUFPLE9BQU8sQ0FBQyxHQUFHLFlBQVlBLGNBQWEsQ0FBQztBQUNwRixRQUFJLG9CQUFvQixtQkFBbUIsU0FBUyxtQkFBbUI7QUFHdkUsUUFBSSxrQkFBa0I7QUFBQSxNQUNwQixLQUFLLG1CQUFtQixNQUFNLGtCQUFrQixNQUFNLGNBQWM7QUFBQSxNQUNwRSxRQUFRLGtCQUFrQixTQUFTLG1CQUFtQixTQUFTLGNBQWM7QUFBQSxNQUM3RSxNQUFNLG1CQUFtQixPQUFPLGtCQUFrQixPQUFPLGNBQWM7QUFBQSxNQUN2RSxPQUFPLGtCQUFrQixRQUFRLG1CQUFtQixRQUFRLGNBQWM7QUFBQSxJQUM1RTtBQUNBLFFBQUksYUFBYSxNQUFNLGNBQWM7QUFFckMsUUFBSSxtQkFBbUIsVUFBVSxZQUFZO0FBQzNDLFVBQUlDLFVBQVMsV0FBVztBQUN4QixhQUFPLEtBQUssZUFBZSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ2xELFlBQUksV0FBVyxDQUFDLE9BQU8sTUFBTSxFQUFFLFFBQVEsR0FBRyxLQUFLLElBQUksSUFBSTtBQUN2RCxZQUFJLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLEdBQUcsS0FBSyxJQUFJLE1BQU07QUFDbkQsd0JBQWdCLFFBQVFBLFFBQU8sUUFBUTtBQUFBLE1BQ3pDLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTztBQUFBLEVBQ1Q7OztBQzVEZSxXQUFSLHFCQUFzQyxPQUFPLFNBQVM7QUFDM0QsUUFBSSxZQUFZLFFBQVE7QUFDdEIsZ0JBQVUsQ0FBQztBQUFBLElBQ2I7QUFFQSxRQUFJLFdBQVcsU0FDWCxZQUFZLFNBQVMsV0FDckIsV0FBVyxTQUFTLFVBQ3BCLGVBQWUsU0FBUyxjQUN4QixVQUFVLFNBQVMsU0FDbkIsaUJBQWlCLFNBQVMsZ0JBQzFCLHdCQUF3QixTQUFTLHVCQUNqQyx3QkFBd0IsMEJBQTBCLFNBQVMsYUFBZ0I7QUFDL0UsUUFBSSxZQUFZLGFBQWEsU0FBUztBQUN0QyxRQUFJQyxjQUFhLFlBQVksaUJBQWlCLHNCQUFzQixvQkFBb0IsT0FBTyxTQUFVQyxZQUFXO0FBQ2xILGFBQU8sYUFBYUEsVUFBUyxNQUFNO0FBQUEsSUFDckMsQ0FBQyxJQUFJO0FBQ0wsUUFBSSxvQkFBb0JELFlBQVcsT0FBTyxTQUFVQyxZQUFXO0FBQzdELGFBQU8sc0JBQXNCLFFBQVFBLFVBQVMsS0FBSztBQUFBLElBQ3JELENBQUM7QUFFRCxRQUFJLGtCQUFrQixXQUFXLEdBQUc7QUFDbEMsMEJBQW9CRDtBQUVwQixVQUFJLE1BQXVDO0FBQ3pDLGdCQUFRLE1BQU0sQ0FBQyxnRUFBZ0UsbUVBQW1FLDhCQUE4QiwrREFBK0QsMkJBQTJCLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUN2UjtBQUFBLElBQ0Y7QUFHQSxRQUFJLFlBQVksa0JBQWtCLE9BQU8sU0FBVSxLQUFLQyxZQUFXO0FBQ2pFLFVBQUlBLGNBQWEsZUFBZSxPQUFPO0FBQUEsUUFDckMsV0FBV0E7QUFBQSxRQUNYO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsRUFBRSxpQkFBaUJBLFVBQVM7QUFDN0IsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFDTCxXQUFPLE9BQU8sS0FBSyxTQUFTLEVBQUUsS0FBSyxTQUFVLEdBQUcsR0FBRztBQUNqRCxhQUFPLFVBQVUsS0FBSyxVQUFVO0FBQUEsSUFDbEMsQ0FBQztBQUFBLEVBQ0g7OztBQ3RDQSxXQUFTLDhCQUE4QixXQUFXO0FBQ2hELFFBQUksaUJBQWlCLFNBQVMsTUFBTSxNQUFNO0FBQ3hDLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFFQSxRQUFJLG9CQUFvQixxQkFBcUIsU0FBUztBQUN0RCxXQUFPLENBQUMsOEJBQThCLFNBQVMsR0FBRyxtQkFBbUIsOEJBQThCLGlCQUFpQixDQUFDO0FBQUEsRUFDdkg7QUFFQSxXQUFTLEtBQUssTUFBTTtBQUNsQixRQUFJLFFBQVEsS0FBSyxPQUNiLFVBQVUsS0FBSyxTQUNmLE9BQU8sS0FBSztBQUVoQixRQUFJLE1BQU0sY0FBYyxNQUFNLE9BQU87QUFDbkM7QUFBQSxJQUNGO0FBRUEsUUFBSSxvQkFBb0IsUUFBUSxVQUM1QixnQkFBZ0Isc0JBQXNCLFNBQVMsT0FBTyxtQkFDdEQsbUJBQW1CLFFBQVEsU0FDM0IsZUFBZSxxQkFBcUIsU0FBUyxPQUFPLGtCQUNwRCw4QkFBOEIsUUFBUSxvQkFDdEMsVUFBVSxRQUFRLFNBQ2xCLFdBQVcsUUFBUSxVQUNuQixlQUFlLFFBQVEsY0FDdkIsY0FBYyxRQUFRLGFBQ3RCLHdCQUF3QixRQUFRLGdCQUNoQyxpQkFBaUIsMEJBQTBCLFNBQVMsT0FBTyx1QkFDM0Qsd0JBQXdCLFFBQVE7QUFDcEMsUUFBSSxxQkFBcUIsTUFBTSxRQUFRO0FBQ3ZDLFFBQUksZ0JBQWdCLGlCQUFpQixrQkFBa0I7QUFDdkQsUUFBSSxrQkFBa0Isa0JBQWtCO0FBQ3hDLFFBQUkscUJBQXFCLGdDQUFnQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsa0JBQWtCLENBQUMsSUFBSSw4QkFBOEIsa0JBQWtCO0FBQzNMLFFBQUlDLGNBQWEsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLGtCQUFrQixFQUFFLE9BQU8sU0FBVSxLQUFLQyxZQUFXO0FBQ2hHLGFBQU8sSUFBSSxPQUFPLGlCQUFpQkEsVUFBUyxNQUFNLE9BQU8scUJBQXFCLE9BQU87QUFBQSxRQUNuRixXQUFXQTtBQUFBLFFBQ1g7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDLElBQUlBLFVBQVM7QUFBQSxJQUNoQixHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUksZ0JBQWdCLE1BQU0sTUFBTTtBQUNoQyxRQUFJLGFBQWEsTUFBTSxNQUFNO0FBQzdCLFFBQUksWUFBWSxvQkFBSSxJQUFJO0FBQ3hCLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksd0JBQXdCRCxZQUFXO0FBRXZDLGFBQVMsSUFBSSxHQUFHLElBQUlBLFlBQVcsUUFBUSxLQUFLO0FBQzFDLFVBQUksWUFBWUEsWUFBVztBQUUzQixVQUFJLGlCQUFpQixpQkFBaUIsU0FBUztBQUUvQyxVQUFJLG1CQUFtQixhQUFhLFNBQVMsTUFBTTtBQUNuRCxVQUFJLGFBQWEsQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLGNBQWMsS0FBSztBQUMxRCxVQUFJLE1BQU0sYUFBYSxVQUFVO0FBQ2pDLFVBQUksV0FBVyxlQUFlLE9BQU87QUFBQSxRQUNuQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLG9CQUFvQixhQUFhLG1CQUFtQixRQUFRLE9BQU8sbUJBQW1CLFNBQVM7QUFFbkcsVUFBSSxjQUFjLE9BQU8sV0FBVyxNQUFNO0FBQ3hDLDRCQUFvQixxQkFBcUIsaUJBQWlCO0FBQUEsTUFDNUQ7QUFFQSxVQUFJLG1CQUFtQixxQkFBcUIsaUJBQWlCO0FBQzdELFVBQUksU0FBUyxDQUFDO0FBRWQsVUFBSSxlQUFlO0FBQ2pCLGVBQU8sS0FBSyxTQUFTLG1CQUFtQixDQUFDO0FBQUEsTUFDM0M7QUFFQSxVQUFJLGNBQWM7QUFDaEIsZUFBTyxLQUFLLFNBQVMsc0JBQXNCLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQztBQUFBLE1BQy9FO0FBRUEsVUFBSSxPQUFPLE1BQU0sU0FBVSxPQUFPO0FBQ2hDLGVBQU87QUFBQSxNQUNULENBQUMsR0FBRztBQUNGLGdDQUF3QjtBQUN4Qiw2QkFBcUI7QUFDckI7QUFBQSxNQUNGO0FBRUEsZ0JBQVUsSUFBSSxXQUFXLE1BQU07QUFBQSxJQUNqQztBQUVBLFFBQUksb0JBQW9CO0FBRXRCLFVBQUksaUJBQWlCLGlCQUFpQixJQUFJO0FBRTFDLFVBQUksUUFBUSxTQUFTRSxPQUFNQyxLQUFJO0FBQzdCLFlBQUksbUJBQW1CSCxZQUFXLEtBQUssU0FBVUMsWUFBVztBQUMxRCxjQUFJRyxVQUFTLFVBQVUsSUFBSUgsVUFBUztBQUVwQyxjQUFJRyxTQUFRO0FBQ1YsbUJBQU9BLFFBQU8sTUFBTSxHQUFHRCxHQUFFLEVBQUUsTUFBTSxTQUFVLE9BQU87QUFDaEQscUJBQU87QUFBQSxZQUNULENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRixDQUFDO0FBRUQsWUFBSSxrQkFBa0I7QUFDcEIsa0NBQXdCO0FBQ3hCLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxlQUFTLEtBQUssZ0JBQWdCLEtBQUssR0FBRyxNQUFNO0FBQzFDLFlBQUksT0FBTyxNQUFNLEVBQUU7QUFFbkIsWUFBSSxTQUFTO0FBQVM7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU0sY0FBYyx1QkFBdUI7QUFDN0MsWUFBTSxjQUFjLE1BQU0sUUFBUTtBQUNsQyxZQUFNLFlBQVk7QUFDbEIsWUFBTSxRQUFRO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBR0EsTUFBTyxlQUFRO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixrQkFBa0IsQ0FBQyxRQUFRO0FBQUEsSUFDM0IsTUFBTTtBQUFBLE1BQ0osT0FBTztBQUFBLElBQ1Q7QUFBQSxFQUNGOzs7QUMvSUEsV0FBUyxlQUFlLFVBQVUsTUFBTSxrQkFBa0I7QUFDeEQsUUFBSSxxQkFBcUIsUUFBUTtBQUMvQix5QkFBbUI7QUFBQSxRQUNqQixHQUFHO0FBQUEsUUFDSCxHQUFHO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxLQUFLLFNBQVMsTUFBTSxLQUFLLFNBQVMsaUJBQWlCO0FBQUEsTUFDbkQsT0FBTyxTQUFTLFFBQVEsS0FBSyxRQUFRLGlCQUFpQjtBQUFBLE1BQ3RELFFBQVEsU0FBUyxTQUFTLEtBQUssU0FBUyxpQkFBaUI7QUFBQSxNQUN6RCxNQUFNLFNBQVMsT0FBTyxLQUFLLFFBQVEsaUJBQWlCO0FBQUEsSUFDdEQ7QUFBQSxFQUNGO0FBRUEsV0FBUyxzQkFBc0IsVUFBVTtBQUN2QyxXQUFPLENBQUMsS0FBSyxPQUFPLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBVSxNQUFNO0FBQ3JELGFBQU8sU0FBUyxTQUFTO0FBQUEsSUFDM0IsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTLEtBQUssTUFBTTtBQUNsQixRQUFJLFFBQVEsS0FBSyxPQUNiLE9BQU8sS0FBSztBQUNoQixRQUFJLGdCQUFnQixNQUFNLE1BQU07QUFDaEMsUUFBSSxhQUFhLE1BQU0sTUFBTTtBQUM3QixRQUFJLG1CQUFtQixNQUFNLGNBQWM7QUFDM0MsUUFBSSxvQkFBb0IsZUFBZSxPQUFPO0FBQUEsTUFDNUMsZ0JBQWdCO0FBQUEsSUFDbEIsQ0FBQztBQUNELFFBQUksb0JBQW9CLGVBQWUsT0FBTztBQUFBLE1BQzVDLGFBQWE7QUFBQSxJQUNmLENBQUM7QUFDRCxRQUFJLDJCQUEyQixlQUFlLG1CQUFtQixhQUFhO0FBQzlFLFFBQUksc0JBQXNCLGVBQWUsbUJBQW1CLFlBQVksZ0JBQWdCO0FBQ3hGLFFBQUksb0JBQW9CLHNCQUFzQix3QkFBd0I7QUFDdEUsUUFBSSxtQkFBbUIsc0JBQXNCLG1CQUFtQjtBQUNoRSxVQUFNLGNBQWMsUUFBUTtBQUFBLE1BQzFCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxXQUFXLFFBQVE7QUFBQSxNQUNuRSxnQ0FBZ0M7QUFBQSxNQUNoQyx1QkFBdUI7QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDSDtBQUdBLE1BQU8sZUFBUTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1Asa0JBQWtCLENBQUMsaUJBQWlCO0FBQUEsSUFDcEMsSUFBSTtBQUFBLEVBQ047OztBQ3pETyxXQUFTLHdCQUF3QixXQUFXLE9BQU9FLFNBQVE7QUFDaEUsUUFBSSxnQkFBZ0IsaUJBQWlCLFNBQVM7QUFDOUMsUUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsRUFBRSxRQUFRLGFBQWEsS0FBSyxJQUFJLEtBQUs7QUFFcEUsUUFBSSxPQUFPLE9BQU9BLFlBQVcsYUFBYUEsUUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU87QUFBQSxNQUN4RTtBQUFBLElBQ0YsQ0FBQyxDQUFDLElBQUlBLFNBQ0YsV0FBVyxLQUFLLElBQ2hCLFdBQVcsS0FBSztBQUVwQixlQUFXLFlBQVk7QUFDdkIsZ0JBQVksWUFBWSxLQUFLO0FBQzdCLFdBQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxRQUFRLGFBQWEsS0FBSyxJQUFJO0FBQUEsTUFDakQsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0wsSUFBSTtBQUFBLE1BQ0YsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBRUEsV0FBUyxPQUFPLE9BQU87QUFDckIsUUFBSSxRQUFRLE1BQU0sT0FDZCxVQUFVLE1BQU0sU0FDaEIsT0FBTyxNQUFNO0FBQ2pCLFFBQUksa0JBQWtCLFFBQVEsUUFDMUJBLFVBQVMsb0JBQW9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUNuRCxRQUFJLE9BQU8sV0FBVyxPQUFPLFNBQVUsS0FBSyxXQUFXO0FBQ3JELFVBQUksYUFBYSx3QkFBd0IsV0FBVyxNQUFNLE9BQU9BLE9BQU07QUFDdkUsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFJLHdCQUF3QixLQUFLLE1BQU0sWUFDbkMsSUFBSSxzQkFBc0IsR0FDMUIsSUFBSSxzQkFBc0I7QUFFOUIsUUFBSSxNQUFNLGNBQWMsaUJBQWlCLE1BQU07QUFDN0MsWUFBTSxjQUFjLGNBQWMsS0FBSztBQUN2QyxZQUFNLGNBQWMsY0FBYyxLQUFLO0FBQUEsSUFDekM7QUFFQSxVQUFNLGNBQWMsUUFBUTtBQUFBLEVBQzlCO0FBR0EsTUFBTyxpQkFBUTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsVUFBVSxDQUFDLGVBQWU7QUFBQSxJQUMxQixJQUFJO0FBQUEsRUFDTjs7O0FDbkRBLFdBQVMsY0FBYyxNQUFNO0FBQzNCLFFBQUksUUFBUSxLQUFLLE9BQ2IsT0FBTyxLQUFLO0FBS2hCLFVBQU0sY0FBYyxRQUFRLGVBQWU7QUFBQSxNQUN6QyxXQUFXLE1BQU0sTUFBTTtBQUFBLE1BQ3ZCLFNBQVMsTUFBTSxNQUFNO0FBQUEsTUFDckIsVUFBVTtBQUFBLE1BQ1YsV0FBVyxNQUFNO0FBQUEsSUFDbkIsQ0FBQztBQUFBLEVBQ0g7QUFHQSxNQUFPLHdCQUFRO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixNQUFNLENBQUM7QUFBQSxFQUNUOzs7QUN4QmUsV0FBUixXQUE0QixNQUFNO0FBQ3ZDLFdBQU8sU0FBUyxNQUFNLE1BQU07QUFBQSxFQUM5Qjs7O0FDVUEsV0FBUyxnQkFBZ0IsTUFBTTtBQUM3QixRQUFJLFFBQVEsS0FBSyxPQUNiLFVBQVUsS0FBSyxTQUNmLE9BQU8sS0FBSztBQUNoQixRQUFJLG9CQUFvQixRQUFRLFVBQzVCLGdCQUFnQixzQkFBc0IsU0FBUyxPQUFPLG1CQUN0RCxtQkFBbUIsUUFBUSxTQUMzQixlQUFlLHFCQUFxQixTQUFTLFFBQVEsa0JBQ3JELFdBQVcsUUFBUSxVQUNuQixlQUFlLFFBQVEsY0FDdkIsY0FBYyxRQUFRLGFBQ3RCLFVBQVUsUUFBUSxTQUNsQixrQkFBa0IsUUFBUSxRQUMxQixTQUFTLG9CQUFvQixTQUFTLE9BQU8saUJBQzdDLHdCQUF3QixRQUFRLGNBQ2hDLGVBQWUsMEJBQTBCLFNBQVMsSUFBSTtBQUMxRCxRQUFJLFdBQVcsZUFBZSxPQUFPO0FBQUEsTUFDbkM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFDRCxRQUFJLGdCQUFnQixpQkFBaUIsTUFBTSxTQUFTO0FBQ3BELFFBQUksWUFBWSxhQUFhLE1BQU0sU0FBUztBQUM1QyxRQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLFFBQUksV0FBVyx5QkFBeUIsYUFBYTtBQUNyRCxRQUFJLFVBQVUsV0FBVyxRQUFRO0FBQ2pDLFFBQUlDLGlCQUFnQixNQUFNLGNBQWM7QUFDeEMsUUFBSSxnQkFBZ0IsTUFBTSxNQUFNO0FBQ2hDLFFBQUksYUFBYSxNQUFNLE1BQU07QUFDN0IsUUFBSSxvQkFBb0IsT0FBTyxpQkFBaUIsYUFBYSxhQUFhLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPO0FBQUEsTUFDdkcsV0FBVyxNQUFNO0FBQUEsSUFDbkIsQ0FBQyxDQUFDLElBQUk7QUFDTixRQUFJLDhCQUE4QixPQUFPLHNCQUFzQixXQUFXO0FBQUEsTUFDeEUsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLElBQ1gsSUFBSSxPQUFPLE9BQU87QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsSUFDWCxHQUFHLGlCQUFpQjtBQUNwQixRQUFJLHNCQUFzQixNQUFNLGNBQWMsU0FBUyxNQUFNLGNBQWMsT0FBTyxNQUFNLGFBQWE7QUFDckcsUUFBSSxPQUFPO0FBQUEsTUFDVCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsSUFDTDtBQUVBLFFBQUksQ0FBQ0EsZ0JBQWU7QUFDbEI7QUFBQSxJQUNGO0FBRUEsUUFBSSxlQUFlO0FBQ2pCLFVBQUk7QUFFSixVQUFJLFdBQVcsYUFBYSxNQUFNLE1BQU07QUFDeEMsVUFBSSxVQUFVLGFBQWEsTUFBTSxTQUFTO0FBQzFDLFVBQUksTUFBTSxhQUFhLE1BQU0sV0FBVztBQUN4QyxVQUFJQyxVQUFTRCxlQUFjO0FBQzNCLFVBQUlFLE9BQU1ELFVBQVMsU0FBUztBQUM1QixVQUFJRSxPQUFNRixVQUFTLFNBQVM7QUFDNUIsVUFBSSxXQUFXLFNBQVMsQ0FBQyxXQUFXLE9BQU8sSUFBSTtBQUMvQyxVQUFJLFNBQVMsY0FBYyxRQUFRLGNBQWMsT0FBTyxXQUFXO0FBQ25FLFVBQUksU0FBUyxjQUFjLFFBQVEsQ0FBQyxXQUFXLE9BQU8sQ0FBQyxjQUFjO0FBR3JFLFVBQUksZUFBZSxNQUFNLFNBQVM7QUFDbEMsVUFBSSxZQUFZLFVBQVUsZUFBZSxjQUFjLFlBQVksSUFBSTtBQUFBLFFBQ3JFLE9BQU87QUFBQSxRQUNQLFFBQVE7QUFBQSxNQUNWO0FBQ0EsVUFBSSxxQkFBcUIsTUFBTSxjQUFjLHNCQUFzQixNQUFNLGNBQWMsb0JBQW9CLFVBQVUsbUJBQW1CO0FBQ3hJLFVBQUksa0JBQWtCLG1CQUFtQjtBQUN6QyxVQUFJLGtCQUFrQixtQkFBbUI7QUFNekMsVUFBSSxXQUFXLE9BQU8sR0FBRyxjQUFjLE1BQU0sVUFBVSxJQUFJO0FBQzNELFVBQUksWUFBWSxrQkFBa0IsY0FBYyxPQUFPLElBQUksV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsV0FBVyxTQUFTLFdBQVcsa0JBQWtCLDRCQUE0QjtBQUM1TSxVQUFJLFlBQVksa0JBQWtCLENBQUMsY0FBYyxPQUFPLElBQUksV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsV0FBVyxTQUFTLFdBQVcsa0JBQWtCLDRCQUE0QjtBQUM3TSxVQUFJLG9CQUFvQixNQUFNLFNBQVMsU0FBUyxnQkFBZ0IsTUFBTSxTQUFTLEtBQUs7QUFDcEYsVUFBSSxlQUFlLG9CQUFvQixhQUFhLE1BQU0sa0JBQWtCLGFBQWEsSUFBSSxrQkFBa0IsY0FBYyxJQUFJO0FBQ2pJLFVBQUksdUJBQXVCLHdCQUF3Qix1QkFBdUIsT0FBTyxTQUFTLG9CQUFvQixjQUFjLE9BQU8sd0JBQXdCO0FBQzNKLFVBQUksWUFBWUEsVUFBUyxZQUFZLHNCQUFzQjtBQUMzRCxVQUFJLFlBQVlBLFVBQVMsWUFBWTtBQUNyQyxVQUFJLGtCQUFrQixPQUFPLFNBQVMsSUFBUUMsTUFBSyxTQUFTLElBQUlBLE1BQUtELFNBQVEsU0FBUyxJQUFRRSxNQUFLLFNBQVMsSUFBSUEsSUFBRztBQUNuSCxNQUFBSCxlQUFjLFlBQVk7QUFDMUIsV0FBSyxZQUFZLGtCQUFrQkM7QUFBQSxJQUNyQztBQUVBLFFBQUksY0FBYztBQUNoQixVQUFJO0FBRUosVUFBSSxZQUFZLGFBQWEsTUFBTSxNQUFNO0FBRXpDLFVBQUksV0FBVyxhQUFhLE1BQU0sU0FBUztBQUUzQyxVQUFJLFVBQVVELGVBQWM7QUFFNUIsVUFBSSxPQUFPLFlBQVksTUFBTSxXQUFXO0FBRXhDLFVBQUksT0FBTyxVQUFVLFNBQVM7QUFFOUIsVUFBSSxPQUFPLFVBQVUsU0FBUztBQUU5QixVQUFJLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRSxRQUFRLGFBQWEsTUFBTTtBQUUxRCxVQUFJLHdCQUF3Qix5QkFBeUIsdUJBQXVCLE9BQU8sU0FBUyxvQkFBb0IsYUFBYSxPQUFPLHlCQUF5QjtBQUU3SixVQUFJLGFBQWEsZUFBZSxPQUFPLFVBQVUsY0FBYyxRQUFRLFdBQVcsUUFBUSx1QkFBdUIsNEJBQTRCO0FBRTdJLFVBQUksYUFBYSxlQUFlLFVBQVUsY0FBYyxRQUFRLFdBQVcsUUFBUSx1QkFBdUIsNEJBQTRCLFVBQVU7QUFFaEosVUFBSSxtQkFBbUIsVUFBVSxlQUFlLGVBQWUsWUFBWSxTQUFTLFVBQVUsSUFBSSxPQUFPLFNBQVMsYUFBYSxNQUFNLFNBQVMsU0FBUyxhQUFhLElBQUk7QUFFeEssTUFBQUEsZUFBYyxXQUFXO0FBQ3pCLFdBQUssV0FBVyxtQkFBbUI7QUFBQSxJQUNyQztBQUVBLFVBQU0sY0FBYyxRQUFRO0FBQUEsRUFDOUI7QUFHQSxNQUFPLDBCQUFRO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixrQkFBa0IsQ0FBQyxRQUFRO0FBQUEsRUFDN0I7OztBQzdJZSxXQUFSLHFCQUFzQyxTQUFTO0FBQ3BELFdBQU87QUFBQSxNQUNMLFlBQVksUUFBUTtBQUFBLE1BQ3BCLFdBQVcsUUFBUTtBQUFBLElBQ3JCO0FBQUEsRUFDRjs7O0FDRGUsV0FBUixjQUErQixNQUFNO0FBQzFDLFFBQUksU0FBUyxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSxHQUFHO0FBQ3BELGFBQU8sZ0JBQWdCLElBQUk7QUFBQSxJQUM3QixPQUFPO0FBQ0wsYUFBTyxxQkFBcUIsSUFBSTtBQUFBLElBQ2xDO0FBQUEsRUFDRjs7O0FDREEsV0FBUyxnQkFBZ0IsU0FBUztBQUNoQyxRQUFJLE9BQU8sUUFBUSxzQkFBc0I7QUFDekMsUUFBSSxTQUFTLE1BQU0sS0FBSyxLQUFLLElBQUksUUFBUSxlQUFlO0FBQ3hELFFBQUksU0FBUyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsZ0JBQWdCO0FBQzFELFdBQU8sV0FBVyxLQUFLLFdBQVc7QUFBQSxFQUNwQztBQUllLFdBQVIsaUJBQWtDLHlCQUF5QixjQUFjLFNBQVM7QUFDdkYsUUFBSSxZQUFZLFFBQVE7QUFDdEIsZ0JBQVU7QUFBQSxJQUNaO0FBRUEsUUFBSSwwQkFBMEIsY0FBYyxZQUFZO0FBQ3hELFFBQUksdUJBQXVCLGNBQWMsWUFBWSxLQUFLLGdCQUFnQixZQUFZO0FBQ3RGLFFBQUksa0JBQWtCLG1CQUFtQixZQUFZO0FBQ3JELFFBQUksT0FBTyxzQkFBc0IseUJBQXlCLHNCQUFzQixPQUFPO0FBQ3ZGLFFBQUksU0FBUztBQUFBLE1BQ1gsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLElBQ2I7QUFDQSxRQUFJLFVBQVU7QUFBQSxNQUNaLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMO0FBRUEsUUFBSSwyQkFBMkIsQ0FBQywyQkFBMkIsQ0FBQyxTQUFTO0FBQ25FLFVBQUksWUFBWSxZQUFZLE1BQU0sVUFDbEMsZUFBZSxlQUFlLEdBQUc7QUFDL0IsaUJBQVMsY0FBYyxZQUFZO0FBQUEsTUFDckM7QUFFQSxVQUFJLGNBQWMsWUFBWSxHQUFHO0FBQy9CLGtCQUFVLHNCQUFzQixjQUFjLElBQUk7QUFDbEQsZ0JBQVEsS0FBSyxhQUFhO0FBQzFCLGdCQUFRLEtBQUssYUFBYTtBQUFBLE1BQzVCLFdBQVcsaUJBQWlCO0FBQzFCLGdCQUFRLElBQUksb0JBQW9CLGVBQWU7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxHQUFHLEtBQUssT0FBTyxPQUFPLGFBQWEsUUFBUTtBQUFBLE1BQzNDLEdBQUcsS0FBSyxNQUFNLE9BQU8sWUFBWSxRQUFRO0FBQUEsTUFDekMsT0FBTyxLQUFLO0FBQUEsTUFDWixRQUFRLEtBQUs7QUFBQSxJQUNmO0FBQUEsRUFDRjs7O0FDdkRBLFdBQVMsTUFBTSxXQUFXO0FBQ3hCLFFBQUksTUFBTSxvQkFBSSxJQUFJO0FBQ2xCLFFBQUksVUFBVSxvQkFBSSxJQUFJO0FBQ3RCLFFBQUksU0FBUyxDQUFDO0FBQ2QsY0FBVSxRQUFRLFNBQVUsVUFBVTtBQUNwQyxVQUFJLElBQUksU0FBUyxNQUFNLFFBQVE7QUFBQSxJQUNqQyxDQUFDO0FBRUQsYUFBUyxLQUFLLFVBQVU7QUFDdEIsY0FBUSxJQUFJLFNBQVMsSUFBSTtBQUN6QixVQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sU0FBUyxZQUFZLENBQUMsR0FBRyxTQUFTLG9CQUFvQixDQUFDLENBQUM7QUFDakYsZUFBUyxRQUFRLFNBQVUsS0FBSztBQUM5QixZQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsR0FBRztBQUNyQixjQUFJLGNBQWMsSUFBSSxJQUFJLEdBQUc7QUFFN0IsY0FBSSxhQUFhO0FBQ2YsaUJBQUssV0FBVztBQUFBLFVBQ2xCO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU8sS0FBSyxRQUFRO0FBQUEsSUFDdEI7QUFFQSxjQUFVLFFBQVEsU0FBVSxVQUFVO0FBQ3BDLFVBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLEdBQUc7QUFFL0IsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBRWUsV0FBUixlQUFnQyxXQUFXO0FBRWhELFFBQUksbUJBQW1CLE1BQU0sU0FBUztBQUV0QyxXQUFPLGVBQWUsT0FBTyxTQUFVLEtBQUssT0FBTztBQUNqRCxhQUFPLElBQUksT0FBTyxpQkFBaUIsT0FBTyxTQUFVLFVBQVU7QUFDNUQsZUFBTyxTQUFTLFVBQVU7QUFBQSxNQUM1QixDQUFDLENBQUM7QUFBQSxJQUNKLEdBQUcsQ0FBQyxDQUFDO0FBQUEsRUFDUDs7O0FDM0NlLFdBQVIsU0FBMEJJLEtBQUk7QUFDbkMsUUFBSTtBQUNKLFdBQU8sV0FBWTtBQUNqQixVQUFJLENBQUMsU0FBUztBQUNaLGtCQUFVLElBQUksUUFBUSxTQUFVLFNBQVM7QUFDdkMsa0JBQVEsUUFBUSxFQUFFLEtBQUssV0FBWTtBQUNqQyxzQkFBVTtBQUNWLG9CQUFRQSxJQUFHLENBQUM7QUFBQSxVQUNkLENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNIO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGOzs7QUNkZSxXQUFSLE9BQXdCLEtBQUs7QUFDbEMsYUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDMUcsV0FBSyxPQUFPLEtBQUssVUFBVTtBQUFBLElBQzdCO0FBRUEsV0FBTyxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUUsT0FBTyxTQUFVLEdBQUcsR0FBRztBQUM1QyxhQUFPLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUMxQixHQUFHLEdBQUc7QUFBQSxFQUNSOzs7QUNOQSxNQUFJLHlCQUF5QjtBQUM3QixNQUFJLDJCQUEyQjtBQUMvQixNQUFJLG1CQUFtQixDQUFDLFFBQVEsV0FBVyxTQUFTLE1BQU0sVUFBVSxZQUFZLFNBQVM7QUFDMUUsV0FBUixrQkFBbUMsV0FBVztBQUNuRCxjQUFVLFFBQVEsU0FBVSxVQUFVO0FBQ3BDLE9BQUMsRUFBRSxPQUFPLE9BQU8sS0FBSyxRQUFRLEdBQUcsZ0JBQWdCLEVBQ2hELE9BQU8sU0FBVSxPQUFPLE9BQU9DLE9BQU07QUFDcEMsZUFBT0EsTUFBSyxRQUFRLEtBQUssTUFBTTtBQUFBLE1BQ2pDLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN4QixnQkFBUSxLQUFLO0FBQUEsVUFDWCxLQUFLO0FBQ0gsZ0JBQUksT0FBTyxTQUFTLFNBQVMsVUFBVTtBQUNyQyxzQkFBUSxNQUFNLE9BQU8sd0JBQXdCLE9BQU8sU0FBUyxJQUFJLEdBQUcsVUFBVSxZQUFZLE1BQU8sT0FBTyxTQUFTLElBQUksSUFBSSxHQUFJLENBQUM7QUFBQSxZQUNoSTtBQUVBO0FBQUEsVUFFRixLQUFLO0FBQ0gsZ0JBQUksT0FBTyxTQUFTLFlBQVksV0FBVztBQUN6QyxzQkFBUSxNQUFNLE9BQU8sd0JBQXdCLFNBQVMsTUFBTSxhQUFhLGFBQWEsTUFBTyxPQUFPLFNBQVMsT0FBTyxJQUFJLEdBQUksQ0FBQztBQUFBLFlBQy9IO0FBRUE7QUFBQSxVQUVGLEtBQUs7QUFDSCxnQkFBSSxlQUFlLFFBQVEsU0FBUyxLQUFLLElBQUksR0FBRztBQUM5QyxzQkFBUSxNQUFNLE9BQU8sd0JBQXdCLFNBQVMsTUFBTSxXQUFXLFlBQVksZUFBZSxLQUFLLElBQUksR0FBRyxNQUFPLE9BQU8sU0FBUyxLQUFLLElBQUksR0FBSSxDQUFDO0FBQUEsWUFDcko7QUFFQTtBQUFBLFVBRUYsS0FBSztBQUNILGdCQUFJLE9BQU8sU0FBUyxPQUFPLFlBQVk7QUFDckMsc0JBQVEsTUFBTSxPQUFPLHdCQUF3QixTQUFTLE1BQU0sUUFBUSxjQUFjLE1BQU8sT0FBTyxTQUFTLEVBQUUsSUFBSSxHQUFJLENBQUM7QUFBQSxZQUN0SDtBQUVBO0FBQUEsVUFFRixLQUFLO0FBQ0gsZ0JBQUksU0FBUyxVQUFVLFFBQVEsT0FBTyxTQUFTLFdBQVcsWUFBWTtBQUNwRSxzQkFBUSxNQUFNLE9BQU8sd0JBQXdCLFNBQVMsTUFBTSxZQUFZLGNBQWMsTUFBTyxPQUFPLFNBQVMsRUFBRSxJQUFJLEdBQUksQ0FBQztBQUFBLFlBQzFIO0FBRUE7QUFBQSxVQUVGLEtBQUs7QUFDSCxnQkFBSSxTQUFTLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxTQUFTLFFBQVEsR0FBRztBQUNsRSxzQkFBUSxNQUFNLE9BQU8sd0JBQXdCLFNBQVMsTUFBTSxjQUFjLFdBQVcsTUFBTyxPQUFPLFNBQVMsUUFBUSxJQUFJLEdBQUksQ0FBQztBQUFBLFlBQy9IO0FBRUE7QUFBQSxVQUVGLEtBQUs7QUFDSCxnQkFBSSxDQUFDLE1BQU0sUUFBUSxTQUFTLGdCQUFnQixHQUFHO0FBQzdDLHNCQUFRLE1BQU0sT0FBTyx3QkFBd0IsU0FBUyxNQUFNLHNCQUFzQixXQUFXLE1BQU8sT0FBTyxTQUFTLGdCQUFnQixJQUFJLEdBQUksQ0FBQztBQUFBLFlBQy9JO0FBRUE7QUFBQSxVQUVGLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSDtBQUFBLFVBRUY7QUFDRSxvQkFBUSxNQUFNLDZEQUE4RCxTQUFTLE9BQU8sc0NBQXVDLGlCQUFpQixJQUFJLFNBQVUsR0FBRztBQUNuSyxxQkFBTyxNQUFPLElBQUk7QUFBQSxZQUNwQixDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksWUFBYSxNQUFNLGlCQUFrQjtBQUFBLFFBQ3pEO0FBRUEsaUJBQVMsWUFBWSxTQUFTLFNBQVMsUUFBUSxTQUFVLGFBQWE7QUFDcEUsY0FBSSxVQUFVLEtBQUssU0FBVSxLQUFLO0FBQ2hDLG1CQUFPLElBQUksU0FBUztBQUFBLFVBQ3RCLENBQUMsS0FBSyxNQUFNO0FBQ1Ysb0JBQVEsTUFBTSxPQUFPLDBCQUEwQixPQUFPLFNBQVMsSUFBSSxHQUFHLGFBQWEsV0FBVyxDQUFDO0FBQUEsVUFDakc7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNIOzs7QUNoRmUsV0FBUixTQUEwQixLQUFLQyxLQUFJO0FBQ3hDLFFBQUksY0FBYyxvQkFBSSxJQUFJO0FBQzFCLFdBQU8sSUFBSSxPQUFPLFNBQVUsTUFBTTtBQUNoQyxVQUFJLGFBQWFBLElBQUcsSUFBSTtBQUV4QixVQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsR0FBRztBQUNoQyxvQkFBWSxJQUFJLFVBQVU7QUFDMUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIOzs7QUNWZSxXQUFSLFlBQTZCLFdBQVc7QUFDN0MsUUFBSSxTQUFTLFVBQVUsT0FBTyxTQUFVQyxTQUFRLFNBQVM7QUFDdkQsVUFBSSxXQUFXQSxRQUFPLFFBQVE7QUFDOUIsTUFBQUEsUUFBTyxRQUFRLFFBQVEsV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFVBQVUsU0FBUztBQUFBLFFBQ3JFLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTLFNBQVMsUUFBUSxPQUFPO0FBQUEsUUFDNUQsTUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVMsTUFBTSxRQUFRLElBQUk7QUFBQSxNQUNyRCxDQUFDLElBQUk7QUFDTCxhQUFPQTtBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFFTCxXQUFPLE9BQU8sS0FBSyxNQUFNLEVBQUUsSUFBSSxTQUFVLEtBQUs7QUFDNUMsYUFBTyxPQUFPO0FBQUEsSUFDaEIsQ0FBQztBQUFBLEVBQ0g7OztBQ0NBLE1BQUksd0JBQXdCO0FBQzVCLE1BQUksc0JBQXNCO0FBQzFCLE1BQUksa0JBQWtCO0FBQUEsSUFDcEIsV0FBVztBQUFBLElBQ1gsV0FBVyxDQUFDO0FBQUEsSUFDWixVQUFVO0FBQUEsRUFDWjtBQUVBLFdBQVMsbUJBQW1CO0FBQzFCLGFBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixXQUFLLFFBQVEsVUFBVTtBQUFBLElBQ3pCO0FBRUEsV0FBTyxDQUFDLEtBQUssS0FBSyxTQUFVLFNBQVM7QUFDbkMsYUFBTyxFQUFFLFdBQVcsT0FBTyxRQUFRLDBCQUEwQjtBQUFBLElBQy9ELENBQUM7QUFBQSxFQUNIO0FBRU8sV0FBUyxnQkFBZ0Isa0JBQWtCO0FBQ2hELFFBQUkscUJBQXFCLFFBQVE7QUFDL0IseUJBQW1CLENBQUM7QUFBQSxJQUN0QjtBQUVBLFFBQUksb0JBQW9CLGtCQUNwQix3QkFBd0Isa0JBQWtCLGtCQUMxQ0Msb0JBQW1CLDBCQUEwQixTQUFTLENBQUMsSUFBSSx1QkFDM0QseUJBQXlCLGtCQUFrQixnQkFDM0MsaUJBQWlCLDJCQUEyQixTQUFTLGtCQUFrQjtBQUMzRSxXQUFPLFNBQVNDLGNBQWFDLFlBQVdDLFNBQVEsU0FBUztBQUN2RCxVQUFJLFlBQVksUUFBUTtBQUN0QixrQkFBVTtBQUFBLE1BQ1o7QUFFQSxVQUFJLFFBQVE7QUFBQSxRQUNWLFdBQVc7QUFBQSxRQUNYLGtCQUFrQixDQUFDO0FBQUEsUUFDbkIsU0FBUyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixjQUFjO0FBQUEsUUFDMUQsZUFBZSxDQUFDO0FBQUEsUUFDaEIsVUFBVTtBQUFBLFVBQ1IsV0FBV0Q7QUFBQSxVQUNYLFFBQVFDO0FBQUEsUUFDVjtBQUFBLFFBQ0EsWUFBWSxDQUFDO0FBQUEsUUFDYixRQUFRLENBQUM7QUFBQSxNQUNYO0FBQ0EsVUFBSSxtQkFBbUIsQ0FBQztBQUN4QixVQUFJLGNBQWM7QUFDbEIsVUFBSSxXQUFXO0FBQUEsUUFDYjtBQUFBLFFBQ0EsWUFBWSxTQUFTLFdBQVcsa0JBQWtCO0FBQ2hELGNBQUlDLFdBQVUsT0FBTyxxQkFBcUIsYUFBYSxpQkFBaUIsTUFBTSxPQUFPLElBQUk7QUFDekYsaUNBQXVCO0FBQ3ZCLGdCQUFNLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsTUFBTSxTQUFTQSxRQUFPO0FBQ3hFLGdCQUFNLGdCQUFnQjtBQUFBLFlBQ3BCLFdBQVcsVUFBVUYsVUFBUyxJQUFJLGtCQUFrQkEsVUFBUyxJQUFJQSxXQUFVLGlCQUFpQixrQkFBa0JBLFdBQVUsY0FBYyxJQUFJLENBQUM7QUFBQSxZQUMzSSxRQUFRLGtCQUFrQkMsT0FBTTtBQUFBLFVBQ2xDO0FBR0EsY0FBSSxtQkFBbUIsZUFBZSxZQUFZLENBQUMsRUFBRSxPQUFPSCxtQkFBa0IsTUFBTSxRQUFRLFNBQVMsQ0FBQyxDQUFDO0FBRXZHLGdCQUFNLG1CQUFtQixpQkFBaUIsT0FBTyxTQUFVLEdBQUc7QUFDNUQsbUJBQU8sRUFBRTtBQUFBLFVBQ1gsQ0FBQztBQUdELGNBQUksTUFBdUM7QUFDekMsZ0JBQUksWUFBWSxTQUFTLENBQUMsRUFBRSxPQUFPLGtCQUFrQixNQUFNLFFBQVEsU0FBUyxHQUFHLFNBQVUsTUFBTTtBQUM3RixrQkFBSSxPQUFPLEtBQUs7QUFDaEIscUJBQU87QUFBQSxZQUNULENBQUM7QUFDRCw4QkFBa0IsU0FBUztBQUUzQixnQkFBSSxpQkFBaUIsTUFBTSxRQUFRLFNBQVMsTUFBTSxNQUFNO0FBQ3RELGtCQUFJLGVBQWUsTUFBTSxpQkFBaUIsS0FBSyxTQUFVLE9BQU87QUFDOUQsb0JBQUksT0FBTyxNQUFNO0FBQ2pCLHVCQUFPLFNBQVM7QUFBQSxjQUNsQixDQUFDO0FBRUQsa0JBQUksQ0FBQyxjQUFjO0FBQ2pCLHdCQUFRLE1BQU0sQ0FBQyw0REFBNEQsOEJBQThCLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxjQUN0SDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxvQkFBb0JLLGtCQUFpQkYsT0FBTSxHQUMzQyxZQUFZLGtCQUFrQixXQUM5QixjQUFjLGtCQUFrQixhQUNoQyxlQUFlLGtCQUFrQixjQUNqQyxhQUFhLGtCQUFrQjtBQUluQyxnQkFBSSxDQUFDLFdBQVcsYUFBYSxjQUFjLFVBQVUsRUFBRSxLQUFLLFNBQVUsUUFBUTtBQUM1RSxxQkFBTyxXQUFXLE1BQU07QUFBQSxZQUMxQixDQUFDLEdBQUc7QUFDRixzQkFBUSxLQUFLLENBQUMsK0RBQStELDZEQUE2RCw4REFBOEQsNERBQTRELFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLFlBQzdSO0FBQUEsVUFDRjtBQUVBLDZCQUFtQjtBQUNuQixpQkFBTyxTQUFTLE9BQU87QUFBQSxRQUN6QjtBQUFBLFFBTUEsYUFBYSxTQUFTLGNBQWM7QUFDbEMsY0FBSSxhQUFhO0FBQ2Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxrQkFBa0IsTUFBTSxVQUN4QkQsYUFBWSxnQkFBZ0IsV0FDNUJDLFVBQVMsZ0JBQWdCO0FBRzdCLGNBQUksQ0FBQyxpQkFBaUJELFlBQVdDLE9BQU0sR0FBRztBQUN4QyxnQkFBSSxNQUF1QztBQUN6QyxzQkFBUSxNQUFNLHFCQUFxQjtBQUFBLFlBQ3JDO0FBRUE7QUFBQSxVQUNGO0FBR0EsZ0JBQU0sUUFBUTtBQUFBLFlBQ1osV0FBVyxpQkFBaUJELFlBQVcsZ0JBQWdCQyxPQUFNLEdBQUcsTUFBTSxRQUFRLGFBQWEsT0FBTztBQUFBLFlBQ2xHLFFBQVEsY0FBY0EsT0FBTTtBQUFBLFVBQzlCO0FBTUEsZ0JBQU0sUUFBUTtBQUNkLGdCQUFNLFlBQVksTUFBTSxRQUFRO0FBS2hDLGdCQUFNLGlCQUFpQixRQUFRLFNBQVUsVUFBVTtBQUNqRCxtQkFBTyxNQUFNLGNBQWMsU0FBUyxRQUFRLE9BQU8sT0FBTyxDQUFDLEdBQUcsU0FBUyxJQUFJO0FBQUEsVUFDN0UsQ0FBQztBQUNELGNBQUksa0JBQWtCO0FBRXRCLG1CQUFTLFFBQVEsR0FBRyxRQUFRLE1BQU0saUJBQWlCLFFBQVEsU0FBUztBQUNsRSxnQkFBSSxNQUF1QztBQUN6QyxpQ0FBbUI7QUFFbkIsa0JBQUksa0JBQWtCLEtBQUs7QUFDekIsd0JBQVEsTUFBTSxtQkFBbUI7QUFDakM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE1BQU0sVUFBVSxNQUFNO0FBQ3hCLG9CQUFNLFFBQVE7QUFDZCxzQkFBUTtBQUNSO0FBQUEsWUFDRjtBQUVBLGdCQUFJLHdCQUF3QixNQUFNLGlCQUFpQixRQUMvQ0csTUFBSyxzQkFBc0IsSUFDM0IseUJBQXlCLHNCQUFzQixTQUMvQyxXQUFXLDJCQUEyQixTQUFTLENBQUMsSUFBSSx3QkFDcEQsT0FBTyxzQkFBc0I7QUFFakMsZ0JBQUksT0FBT0EsUUFBTyxZQUFZO0FBQzVCLHNCQUFRQSxJQUFHO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxTQUFTO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQTtBQUFBLGNBQ0YsQ0FBQyxLQUFLO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsUUFHQSxRQUFRLFNBQVMsV0FBWTtBQUMzQixpQkFBTyxJQUFJLFFBQVEsU0FBVSxTQUFTO0FBQ3BDLHFCQUFTLFlBQVk7QUFDckIsb0JBQVEsS0FBSztBQUFBLFVBQ2YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLFFBQ0QsU0FBUyxTQUFTLFVBQVU7QUFDMUIsaUNBQXVCO0FBQ3ZCLHdCQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBRUEsVUFBSSxDQUFDLGlCQUFpQkosWUFBV0MsT0FBTSxHQUFHO0FBQ3hDLFlBQUksTUFBdUM7QUFDekMsa0JBQVEsTUFBTSxxQkFBcUI7QUFBQSxRQUNyQztBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxXQUFXLE9BQU8sRUFBRSxLQUFLLFNBQVVJLFFBQU87QUFDakQsWUFBSSxDQUFDLGVBQWUsUUFBUSxlQUFlO0FBQ3pDLGtCQUFRLGNBQWNBLE1BQUs7QUFBQSxRQUM3QjtBQUFBLE1BQ0YsQ0FBQztBQU1ELGVBQVMscUJBQXFCO0FBQzVCLGNBQU0saUJBQWlCLFFBQVEsU0FBVSxPQUFPO0FBQzlDLGNBQUksT0FBTyxNQUFNLE1BQ2IsZ0JBQWdCLE1BQU0sU0FDdEJILFdBQVUsa0JBQWtCLFNBQVMsQ0FBQyxJQUFJLGVBQzFDSSxVQUFTLE1BQU07QUFFbkIsY0FBSSxPQUFPQSxZQUFXLFlBQVk7QUFDaEMsZ0JBQUksWUFBWUEsUUFBTztBQUFBLGNBQ3JCO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFNBQVNKO0FBQUEsWUFDWCxDQUFDO0FBRUQsZ0JBQUksU0FBUyxTQUFTSyxVQUFTO0FBQUEsWUFBQztBQUVoQyw2QkFBaUIsS0FBSyxhQUFhLE1BQU07QUFBQSxVQUMzQztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxlQUFTLHlCQUF5QjtBQUNoQyx5QkFBaUIsUUFBUSxTQUFVSCxLQUFJO0FBQ3JDLGlCQUFPQSxJQUFHO0FBQUEsUUFDWixDQUFDO0FBQ0QsMkJBQW1CLENBQUM7QUFBQSxNQUN0QjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNPLE1BQUksZUFBNEIsZ0NBQWdCOzs7QUMzUHZELE1BQUksbUJBQW1CLENBQUMsd0JBQWdCLHVCQUFlLHVCQUFlLG1CQUFXO0FBQ2pGLE1BQUlJLGdCQUE0QixnQ0FBZ0I7QUFBQSxJQUM5QztBQUFBLEVBQ0YsQ0FBQzs7O0FDRUQsTUFBSUMsb0JBQW1CLENBQUMsd0JBQWdCLHVCQUFlLHVCQUFlLHFCQUFhLGdCQUFRLGNBQU0seUJBQWlCLGVBQU8sWUFBSTtBQUM3SCxNQUFJQyxnQkFBNEIsZ0NBQWdCO0FBQUEsSUFDOUMsa0JBQWtCRDtBQUFBLEVBQ3BCLENBQUM7OztBQ05ELE1BQU1FLFVBQVU7QUFDaEIsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1DLGlCQUFpQjtBQUd2QixNQUFNQyxTQUFTQyxZQUFVO0FBQ3ZCLFFBQUlBLFdBQVcsUUFBUUEsV0FBV0MsUUFBVztBQUMzQyxhQUFRLEdBQUVEO0lBQ1g7QUFFRCxXQUFPRSxPQUFPQyxVQUFVQyxTQUFTQyxLQUFLTCxNQUEvQixFQUF1Q00sTUFBTSxhQUE3QyxFQUE0RCxHQUFHQyxZQUEvRDtFQUNSO0FBTUQsTUFBTUMsU0FBU0MsWUFBVTtBQUN2QixPQUFHO0FBQ0RBLGdCQUFVQyxLQUFLQyxNQUFNRCxLQUFLRSxPQUFMLElBQWdCaEIsT0FBM0I7SUFDWCxTQUFRaUIsU0FBU0MsZUFBZUwsTUFBeEI7QUFFVCxXQUFPQTtFQUNSO0FBRUQsTUFBTU0sY0FBY0MsYUFBVztBQUM3QixRQUFJQyxXQUFXRCxRQUFRRSxhQUFhLGdCQUFyQjtBQUVmLFFBQUksQ0FBQ0QsWUFBWUEsYUFBYSxLQUFLO0FBQ2pDLFVBQUlFLGdCQUFnQkgsUUFBUUUsYUFBYSxNQUFyQjtBQU1wQixVQUFJLENBQUNDLGlCQUFrQixDQUFDQSxjQUFjQyxTQUFTLEdBQXZCLEtBQStCLENBQUNELGNBQWNFLFdBQVcsR0FBekIsR0FBZ0M7QUFDdEYsZUFBTztNQUNSO0FBR0QsVUFBSUYsY0FBY0MsU0FBUyxHQUF2QixLQUErQixDQUFDRCxjQUFjRSxXQUFXLEdBQXpCLEdBQStCO0FBQ2pFRix3QkFBaUIsSUFBR0EsY0FBY0csTUFBTSxHQUFwQixFQUF5QjtNQUM5QztBQUVETCxpQkFBV0UsaUJBQWlCQSxrQkFBa0IsTUFBTUEsY0FBY0ksS0FBZCxJQUF1QjtJQUM1RTtBQUVELFdBQU9OO0VBQ1I7QUFFRCxNQUFNTyx5QkFBeUJSLGFBQVc7QUFDeEMsVUFBTUMsV0FBV0YsWUFBWUMsT0FBRDtBQUU1QixRQUFJQyxVQUFVO0FBQ1osYUFBT0osU0FBU1ksY0FBY1IsUUFBdkIsSUFBbUNBLFdBQVc7SUFDdEQ7QUFFRCxXQUFPO0VBQ1I7QUFFRCxNQUFNUyx5QkFBeUJWLGFBQVc7QUFDeEMsVUFBTUMsV0FBV0YsWUFBWUMsT0FBRDtBQUU1QixXQUFPQyxXQUFXSixTQUFTWSxjQUFjUixRQUF2QixJQUFtQztFQUN0RDtBQUVELE1BQU1VLG1DQUFtQ1gsYUFBVztBQUNsRCxRQUFJLENBQUNBLFNBQVM7QUFDWixhQUFPO0lBQ1I7QUFHRCxRQUFJO01BQUVZO01BQW9CQztJQUF0QixJQUEwQ0MsT0FBT0MsaUJBQWlCZixPQUF4QjtBQUU5QyxVQUFNZ0IsMEJBQTBCQyxPQUFPQyxXQUFXTixrQkFBbEI7QUFDaEMsVUFBTU8sdUJBQXVCRixPQUFPQyxXQUFXTCxlQUFsQjtBQUc3QixRQUFJLENBQUNHLDJCQUEyQixDQUFDRyxzQkFBc0I7QUFDckQsYUFBTztJQUNSO0FBR0RQLHlCQUFxQkEsbUJBQW1CTixNQUFNLEdBQXpCLEVBQThCO0FBQ25ETyxzQkFBa0JBLGdCQUFnQlAsTUFBTSxHQUF0QixFQUEyQjtBQUU3QyxZQUFRVyxPQUFPQyxXQUFXTixrQkFBbEIsSUFBd0NLLE9BQU9DLFdBQVdMLGVBQWxCLEtBQXNDaEM7RUFDdkY7QUFFRCxNQUFNdUMsdUJBQXVCcEIsYUFBVztBQUN0Q0EsWUFBUXFCLGNBQWMsSUFBSUMsTUFBTXhDLGNBQVYsQ0FBdEI7RUFDRDtBQUVELE1BQU15QyxhQUFZdkMsWUFBVTtBQUMxQixRQUFJLENBQUNBLFVBQVUsT0FBT0EsV0FBVyxVQUFVO0FBQ3pDLGFBQU87SUFDUjtBQUVELFFBQUksT0FBT0EsT0FBT3dDLFdBQVcsYUFBYTtBQUN4Q3hDLGVBQVNBLE9BQU87SUFDakI7QUFFRCxXQUFPLE9BQU9BLE9BQU95QyxhQUFhO0VBQ25DO0FBRUQsTUFBTUMsYUFBYTFDLFlBQVU7QUFFM0IsUUFBSXVDLFdBQVV2QyxNQUFELEdBQVU7QUFDckIsYUFBT0EsT0FBT3dDLFNBQVN4QyxPQUFPLEtBQUtBO0lBQ3BDO0FBRUQsUUFBSSxPQUFPQSxXQUFXLFlBQVlBLE9BQU8yQyxTQUFTLEdBQUc7QUFDbkQsYUFBTzlCLFNBQVNZLGNBQWN6QixNQUF2QjtJQUNSO0FBRUQsV0FBTztFQUNSO0FBRUQsTUFBTTRDLFlBQVk1QixhQUFXO0FBQzNCLFFBQUksQ0FBQ3VCLFdBQVV2QixPQUFELEtBQWFBLFFBQVE2QixlQUFSLEVBQXlCRixXQUFXLEdBQUc7QUFDaEUsYUFBTztJQUNSO0FBRUQsVUFBTUcsbUJBQW1CZixpQkFBaUJmLE9BQUQsRUFBVStCLGlCQUFpQixZQUEzQyxNQUE2RDtBQUV0RixVQUFNQyxnQkFBZ0JoQyxRQUFRaUMsUUFBUSxxQkFBaEI7QUFFdEIsUUFBSSxDQUFDRCxlQUFlO0FBQ2xCLGFBQU9GO0lBQ1I7QUFFRCxRQUFJRSxrQkFBa0JoQyxTQUFTO0FBQzdCLFlBQU1rQyxVQUFVbEMsUUFBUWlDLFFBQVEsU0FBaEI7QUFDaEIsVUFBSUMsV0FBV0EsUUFBUUMsZUFBZUgsZUFBZTtBQUNuRCxlQUFPO01BQ1I7QUFFRCxVQUFJRSxZQUFZLE1BQU07QUFDcEIsZUFBTztNQUNSO0lBQ0Y7QUFFRCxXQUFPSjtFQUNSO0FBRUQsTUFBTU0sYUFBYXBDLGFBQVc7QUFDNUIsUUFBSSxDQUFDQSxXQUFXQSxRQUFReUIsYUFBYVksS0FBS0MsY0FBYztBQUN0RCxhQUFPO0lBQ1I7QUFFRCxRQUFJdEMsUUFBUXVDLFVBQVVDLFNBQVMsVUFBM0IsR0FBd0M7QUFDMUMsYUFBTztJQUNSO0FBRUQsUUFBSSxPQUFPeEMsUUFBUXlDLGFBQWEsYUFBYTtBQUMzQyxhQUFPekMsUUFBUXlDO0lBQ2hCO0FBRUQsV0FBT3pDLFFBQVEwQyxhQUFhLFVBQXJCLEtBQW9DMUMsUUFBUUUsYUFBYSxVQUFyQixNQUFxQztFQUNqRjtBQUVELE1BQU15QyxpQkFBaUIzQyxhQUFXO0FBQ2hDLFFBQUksQ0FBQ0gsU0FBUytDLGdCQUFnQkMsY0FBYztBQUMxQyxhQUFPO0lBQ1I7QUFHRCxRQUFJLE9BQU83QyxRQUFROEMsZ0JBQWdCLFlBQVk7QUFDN0MsWUFBTUMsT0FBTy9DLFFBQVE4QyxZQUFSO0FBQ2IsYUFBT0MsZ0JBQWdCQyxhQUFhRCxPQUFPO0lBQzVDO0FBRUQsUUFBSS9DLG1CQUFtQmdELFlBQVk7QUFDakMsYUFBT2hEO0lBQ1I7QUFHRCxRQUFJLENBQUNBLFFBQVFtQyxZQUFZO0FBQ3ZCLGFBQU87SUFDUjtBQUVELFdBQU9RLGVBQWUzQyxRQUFRbUMsVUFBVDtFQUN0QjtBQUVELE1BQU1jLE9BQU8sTUFBTTtFQUFBO0FBVW5CLE1BQU1DLFNBQVNsRCxhQUFXO0FBQ3hCQSxZQUFRbUQ7RUFDVDtBQUVELE1BQU1DLFlBQVksTUFBTTtBQUN0QixRQUFJdEMsT0FBT3VDLFVBQVUsQ0FBQ3hELFNBQVN5RCxLQUFLWixhQUFhLG1CQUEzQixHQUFpRDtBQUNyRSxhQUFPNUIsT0FBT3VDO0lBQ2Y7QUFFRCxXQUFPO0VBQ1I7QUFFRCxNQUFNRSw0QkFBNEIsQ0FBQTtBQUVsQyxNQUFNQyxxQkFBcUJDLGNBQVk7QUFDckMsUUFBSTVELFNBQVM2RCxlQUFlLFdBQVc7QUFFckMsVUFBSSxDQUFDSCwwQkFBMEI1QixRQUFRO0FBQ3JDOUIsaUJBQVM4RCxpQkFBaUIsb0JBQW9CLE1BQU07QUFDbEQscUJBQVdGLGFBQVlGLDJCQUEyQjtBQUNoREUsWUFBQUEsVUFBUTtVQUNUO1NBSEg7TUFLRDtBQUVERixnQ0FBMEJLLEtBQUtILFFBQS9CO0lBQ0QsT0FBTTtBQUNMQSxlQUFRO0lBQ1Q7RUFDRjtBQUVELE1BQU1JLFFBQVEsTUFBTWhFLFNBQVMrQyxnQkFBZ0JrQixRQUFRO0FBRXJELE1BQU1DLHFCQUFxQkMsWUFBVTtBQUNuQ1IsdUJBQW1CLE1BQU07QUFDdkIsWUFBTVMsS0FBSWIsVUFBUztBQUVuQixVQUFJYSxJQUFHO0FBQ0wsY0FBTUMsT0FBT0YsT0FBT0c7QUFDcEIsY0FBTUMscUJBQXFCSCxHQUFFSSxHQUFHSDtBQUNoQ0QsUUFBQUEsR0FBRUksR0FBR0gsUUFBUUYsT0FBT007QUFDcEJMLFFBQUFBLEdBQUVJLEdBQUdILE1BQU1LLGNBQWNQO0FBQ3pCQyxRQUFBQSxHQUFFSSxHQUFHSCxNQUFNTSxhQUFhLE1BQU07QUFDNUJQLFVBQUFBLEdBQUVJLEdBQUdILFFBQVFFO0FBQ2IsaUJBQU9KLE9BQU9NOztNQUVqQjtJQUNGLENBYmlCO0VBY25CO0FBRUQsTUFBTUcsVUFBVWhCLGNBQVk7QUFDMUIsUUFBSSxPQUFPQSxhQUFhLFlBQVk7QUFDbENBLGVBQVE7SUFDVDtFQUNGO0FBRUQsTUFBTWlCLHlCQUF5QixDQUFDakIsVUFBVWtCLG1CQUFtQkMsb0JBQW9CLFNBQVM7QUFDeEYsUUFBSSxDQUFDQSxtQkFBbUI7QUFDdEJILGNBQVFoQixRQUFEO0FBQ1A7SUFDRDtBQUVELFVBQU1vQixrQkFBa0I7QUFDeEIsVUFBTUMsbUJBQW1CbkUsaUNBQWlDZ0UsaUJBQUQsSUFBc0JFO0FBRS9FLFFBQUlFLFNBQVM7QUFFYixVQUFNQyxVQUFVLENBQUM7TUFBRUM7SUFBRixNQUFlO0FBQzlCLFVBQUlBLFdBQVdOLG1CQUFtQjtBQUNoQztNQUNEO0FBRURJLGVBQVM7QUFDVEosd0JBQWtCTyxvQkFBb0JwRyxnQkFBZ0JrRyxPQUF0RDtBQUNBUCxjQUFRaEIsUUFBRDs7QUFHVGtCLHNCQUFrQmhCLGlCQUFpQjdFLGdCQUFnQmtHLE9BQW5EO0FBQ0FHLGVBQVcsTUFBTTtBQUNmLFVBQUksQ0FBQ0osUUFBUTtBQUNYM0QsNkJBQXFCdUQsaUJBQUQ7TUFDckI7T0FDQUcsZ0JBSk87RUFLWDtBQVdELE1BQU1NLHVCQUF1QixDQUFDQyxNQUFNQyxlQUFlQyxlQUFlQyxtQkFBbUI7QUFDbkYsVUFBTUMsYUFBYUosS0FBSzFEO0FBQ3hCLFFBQUkrRCxRQUFRTCxLQUFLTSxRQUFRTCxhQUFiO0FBSVosUUFBSUksVUFBVSxJQUFJO0FBQ2hCLGFBQU8sQ0FBQ0gsaUJBQWlCQyxpQkFBaUJILEtBQUtJLGFBQWEsS0FBS0osS0FBSztJQUN2RTtBQUVESyxhQUFTSCxnQkFBZ0IsSUFBSTtBQUU3QixRQUFJQyxnQkFBZ0I7QUFDbEJFLGVBQVNBLFFBQVFELGNBQWNBO0lBQ2hDO0FBRUQsV0FBT0osS0FBSzNGLEtBQUtrRyxJQUFJLEdBQUdsRyxLQUFLbUcsSUFBSUgsT0FBT0QsYUFBYSxDQUE3QixDQUFaO0VBQ2I7QUMzU0QsTUFBTUssaUJBQWlCO0FBQ3ZCLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsZ0JBQWdCLENBQUE7QUFDdEIsTUFBSUMsV0FBVztBQUNmLE1BQU1DLGVBQWU7SUFDbkJDLFlBQVk7SUFDWkMsWUFBWTtFQUZPO0FBS3JCLE1BQU1DLGVBQWUsb0JBQUlDLElBQUksQ0FDM0IsU0FDQSxZQUNBLFdBQ0EsYUFDQSxlQUNBLGNBQ0Esa0JBQ0EsYUFDQSxZQUNBLGFBQ0EsZUFDQSxhQUNBLFdBQ0EsWUFDQSxTQUNBLHFCQUNBLGNBQ0EsYUFDQSxZQUNBLGVBQ0EsZUFDQSxlQUNBLGFBQ0EsZ0JBQ0EsaUJBQ0EsZ0JBQ0EsaUJBQ0EsY0FDQSxTQUNBLFFBQ0EsVUFDQSxTQUNBLFVBQ0EsVUFDQSxXQUNBLFlBQ0EsUUFDQSxVQUNBLGdCQUNBLFVBQ0EsUUFDQSxvQkFDQSxvQkFDQSxTQUNBLFNBQ0EsUUE5QzJCLENBQVI7QUFxRHJCLFdBQVNDLGFBQWF4RyxTQUFTeUcsS0FBSztBQUNsQyxXQUFRQSxPQUFRLEdBQUVBLFFBQVFQLGdCQUFpQmxHLFFBQVFrRyxZQUFZQTtFQUNoRTtBQUVELFdBQVNRLGlCQUFpQjFHLFNBQVM7QUFDakMsVUFBTXlHLE1BQU1ELGFBQWF4RyxPQUFEO0FBRXhCQSxZQUFRa0csV0FBV087QUFDbkJSLGtCQUFjUSxPQUFPUixjQUFjUSxRQUFRLENBQUE7QUFFM0MsV0FBT1IsY0FBY1E7RUFDdEI7QUFFRCxXQUFTRSxpQkFBaUIzRyxTQUFTcUUsS0FBSTtBQUNyQyxXQUFPLFNBQVNXLFFBQVE0QixPQUFPO0FBQzdCQyxpQkFBV0QsT0FBTztRQUFFRSxnQkFBZ0I5RztNQUFsQixDQUFSO0FBRVYsVUFBSWdGLFFBQVErQixRQUFRO0FBQ2xCQyxxQkFBYUMsSUFBSWpILFNBQVM0RyxNQUFNTSxNQUFNN0MsR0FBdEM7TUFDRDtBQUVELGFBQU9BLElBQUc4QyxNQUFNbkgsU0FBUyxDQUFDNEcsS0FBRCxDQUFsQjs7RUFFVjtBQUVELFdBQVNRLDJCQUEyQnBILFNBQVNDLFVBQVVvRSxLQUFJO0FBQ3pELFdBQU8sU0FBU1csUUFBUTRCLE9BQU87QUFDN0IsWUFBTVMsY0FBY3JILFFBQVFzSCxpQkFBaUJySCxRQUF6QjtBQUVwQixlQUFTO1FBQUVnRjtNQUFGLElBQWEyQixPQUFPM0IsVUFBVUEsV0FBVyxNQUFNQSxTQUFTQSxPQUFPOUMsWUFBWTtBQUNsRixtQkFBV29GLGNBQWNGLGFBQWE7QUFDcEMsY0FBSUUsZUFBZXRDLFFBQVE7QUFDekI7VUFDRDtBQUVENEIscUJBQVdELE9BQU87WUFBRUUsZ0JBQWdCN0I7VUFBbEIsQ0FBUjtBQUVWLGNBQUlELFFBQVErQixRQUFRO0FBQ2xCQyx5QkFBYUMsSUFBSWpILFNBQVM0RyxNQUFNTSxNQUFNakgsVUFBVW9FLEdBQWhEO1VBQ0Q7QUFFRCxpQkFBT0EsSUFBRzhDLE1BQU1sQyxRQUFRLENBQUMyQixLQUFELENBQWpCO1FBQ1I7TUFDRjs7RUFFSjtBQUVELFdBQVNZLFlBQVlDLFFBQVFDLFVBQVVDLHFCQUFxQixNQUFNO0FBQ2hFLFdBQU96SSxPQUFPMEksT0FBT0gsTUFBZCxFQUNKSSxLQUFLakIsV0FBU0EsTUFBTWMsYUFBYUEsWUFBWWQsTUFBTWUsdUJBQXVCQSxrQkFEdEU7RUFFUjtBQUVELFdBQVNHLG9CQUFvQkMsbUJBQW1CL0MsU0FBU2dELG9CQUFvQjtBQUMzRSxVQUFNQyxjQUFjLE9BQU9qRCxZQUFZO0FBRXZDLFVBQU0wQyxXQUFXTyxjQUFjRCxxQkFBc0JoRCxXQUFXZ0Q7QUFDaEUsUUFBSUUsWUFBWUMsYUFBYUosaUJBQUQ7QUFFNUIsUUFBSSxDQUFDekIsYUFBYThCLElBQUlGLFNBQWpCLEdBQTZCO0FBQ2hDQSxrQkFBWUg7SUFDYjtBQUVELFdBQU8sQ0FBQ0UsYUFBYVAsVUFBVVEsU0FBeEI7RUFDUjtBQUVELFdBQVNHLFdBQVdySSxTQUFTK0gsbUJBQW1CL0MsU0FBU2dELG9CQUFvQmpCLFFBQVE7QUFDbkYsUUFBSSxPQUFPZ0Isc0JBQXNCLFlBQVksQ0FBQy9ILFNBQVM7QUFDckQ7SUFDRDtBQUVELFFBQUksQ0FBQ2lJLGFBQWFQLFVBQVVRLFNBQXhCLElBQXFDSixvQkFBb0JDLG1CQUFtQi9DLFNBQVNnRCxrQkFBN0I7QUFJNUQsUUFBSUQscUJBQXFCNUIsY0FBYztBQUNyQyxZQUFNbUMsZUFBZWpFLENBQUFBLFFBQU07QUFDekIsZUFBTyxTQUFVdUMsT0FBTztBQUN0QixjQUFJLENBQUNBLE1BQU0yQixpQkFBa0IzQixNQUFNMkIsa0JBQWtCM0IsTUFBTUUsa0JBQWtCLENBQUNGLE1BQU1FLGVBQWV0RSxTQUFTb0UsTUFBTTJCLGFBQXBDLEdBQXFEO0FBQ2pJLG1CQUFPbEUsSUFBR2hGLEtBQUssTUFBTXVILEtBQWQ7VUFDUjs7O0FBSUxjLGlCQUFXWSxhQUFhWixRQUFEO0lBQ3hCO0FBRUQsVUFBTUQsU0FBU2YsaUJBQWlCMUcsT0FBRDtBQUMvQixVQUFNd0ksV0FBV2YsT0FBT1MsZUFBZVQsT0FBT1MsYUFBYSxDQUFBO0FBQzNELFVBQU1PLG1CQUFtQmpCLFlBQVlnQixVQUFVZCxVQUFVTyxjQUFjakQsVUFBVSxJQUE3QztBQUVwQyxRQUFJeUQsa0JBQWtCO0FBQ3BCQSx1QkFBaUIxQixTQUFTMEIsaUJBQWlCMUIsVUFBVUE7QUFFckQ7SUFDRDtBQUVELFVBQU1OLE1BQU1ELGFBQWFrQixVQUFVSyxrQkFBa0JXLFFBQVE1QyxnQkFBZ0IsRUFBMUMsQ0FBWDtBQUN4QixVQUFNekIsTUFBSzRELGNBQ1RiLDJCQUEyQnBILFNBQVNnRixTQUFTMEMsUUFBbkIsSUFDMUJmLGlCQUFpQjNHLFNBQVMwSCxRQUFWO0FBRWxCckQsSUFBQUEsSUFBR3NELHFCQUFxQk0sY0FBY2pELFVBQVU7QUFDaERYLElBQUFBLElBQUdxRCxXQUFXQTtBQUNkckQsSUFBQUEsSUFBRzBDLFNBQVNBO0FBQ1oxQyxJQUFBQSxJQUFHNkIsV0FBV087QUFDZCtCLGFBQVMvQixPQUFPcEM7QUFFaEJyRSxZQUFRMkQsaUJBQWlCdUUsV0FBVzdELEtBQUk0RCxXQUF4QztFQUNEO0FBRUQsV0FBU1UsY0FBYzNJLFNBQVN5SCxRQUFRUyxXQUFXbEQsU0FBUzJDLG9CQUFvQjtBQUM5RSxVQUFNdEQsTUFBS21ELFlBQVlDLE9BQU9TLFlBQVlsRCxTQUFTMkMsa0JBQTdCO0FBRXRCLFFBQUksQ0FBQ3RELEtBQUk7QUFDUDtJQUNEO0FBRURyRSxZQUFRa0Ysb0JBQW9CZ0QsV0FBVzdELEtBQUl1RSxRQUFRakIsa0JBQUQsQ0FBbEQ7QUFDQSxXQUFPRixPQUFPUyxXQUFXN0QsSUFBRzZCO0VBQzdCO0FBRUQsV0FBUzJDLHlCQUF5QjdJLFNBQVN5SCxRQUFRUyxXQUFXWSxXQUFXO0FBQ3ZFLFVBQU1DLG9CQUFvQnRCLE9BQU9TLGNBQWMsQ0FBQTtBQUUvQyxlQUFXYyxjQUFjOUosT0FBTytKLEtBQUtGLGlCQUFaLEdBQWdDO0FBQ3ZELFVBQUlDLFdBQVc1SSxTQUFTMEksU0FBcEIsR0FBZ0M7QUFDbEMsY0FBTWxDLFFBQVFtQyxrQkFBa0JDO0FBQ2hDTCxzQkFBYzNJLFNBQVN5SCxRQUFRUyxXQUFXdEIsTUFBTWMsVUFBVWQsTUFBTWUsa0JBQW5EO01BQ2Q7SUFDRjtFQUNGO0FBRUQsV0FBU1EsYUFBYXZCLE9BQU87QUFFM0JBLFlBQVFBLE1BQU04QixRQUFRM0MsZ0JBQWdCLEVBQTlCO0FBQ1IsV0FBT0ksYUFBYVMsVUFBVUE7RUFDL0I7QUFFRCxNQUFNSSxlQUFlO0lBQ25Ca0MsR0FBR2xKLFNBQVM0RyxPQUFPNUIsU0FBU2dELG9CQUFvQjtBQUM5Q0ssaUJBQVdySSxTQUFTNEcsT0FBTzVCLFNBQVNnRCxvQkFBb0IsS0FBOUM7O0lBR1ptQixJQUFJbkosU0FBUzRHLE9BQU81QixTQUFTZ0Qsb0JBQW9CO0FBQy9DSyxpQkFBV3JJLFNBQVM0RyxPQUFPNUIsU0FBU2dELG9CQUFvQixJQUE5Qzs7SUFHWmYsSUFBSWpILFNBQVMrSCxtQkFBbUIvQyxTQUFTZ0Qsb0JBQW9CO0FBQzNELFVBQUksT0FBT0Qsc0JBQXNCLFlBQVksQ0FBQy9ILFNBQVM7QUFDckQ7TUFDRDtBQUVELFlBQU0sQ0FBQ2lJLGFBQWFQLFVBQVVRLFNBQXhCLElBQXFDSixvQkFBb0JDLG1CQUFtQi9DLFNBQVNnRCxrQkFBN0I7QUFDOUQsWUFBTW9CLGNBQWNsQixjQUFjSDtBQUNsQyxZQUFNTixTQUFTZixpQkFBaUIxRyxPQUFEO0FBQy9CLFlBQU0rSSxvQkFBb0J0QixPQUFPUyxjQUFjLENBQUE7QUFDL0MsWUFBTW1CLGNBQWN0QixrQkFBa0IxSCxXQUFXLEdBQTdCO0FBRXBCLFVBQUksT0FBT3FILGFBQWEsYUFBYTtBQUVuQyxZQUFJLENBQUN4SSxPQUFPK0osS0FBS0YsaUJBQVosRUFBK0JwSCxRQUFRO0FBQzFDO1FBQ0Q7QUFFRGdILHNCQUFjM0ksU0FBU3lILFFBQVFTLFdBQVdSLFVBQVVPLGNBQWNqRCxVQUFVLElBQS9EO0FBQ2I7TUFDRDtBQUVELFVBQUlxRSxhQUFhO0FBQ2YsbUJBQVdDLGdCQUFnQnBLLE9BQU8rSixLQUFLeEIsTUFBWixHQUFxQjtBQUM5Q29CLG1DQUF5QjdJLFNBQVN5SCxRQUFRNkIsY0FBY3ZCLGtCQUFrQndCLE1BQU0sQ0FBeEIsQ0FBaEM7UUFDekI7TUFDRjtBQUVELGlCQUFXQyxlQUFldEssT0FBTytKLEtBQUtGLGlCQUFaLEdBQWdDO0FBQ3hELGNBQU1DLGFBQWFRLFlBQVlkLFFBQVExQyxlQUFlLEVBQW5DO0FBRW5CLFlBQUksQ0FBQ29ELGVBQWVyQixrQkFBa0IzSCxTQUFTNEksVUFBM0IsR0FBd0M7QUFDMUQsZ0JBQU1wQyxRQUFRbUMsa0JBQWtCUztBQUNoQ2Isd0JBQWMzSSxTQUFTeUgsUUFBUVMsV0FBV3RCLE1BQU1jLFVBQVVkLE1BQU1lLGtCQUFuRDtRQUNkO01BQ0Y7O0lBR0g4QixRQUFRekosU0FBUzRHLE9BQU84QyxNQUFNO0FBQzVCLFVBQUksT0FBTzlDLFVBQVUsWUFBWSxDQUFDNUcsU0FBUztBQUN6QyxlQUFPO01BQ1I7QUFFRCxZQUFNaUUsS0FBSWIsVUFBUztBQUNuQixZQUFNOEUsWUFBWUMsYUFBYXZCLEtBQUQ7QUFDOUIsWUFBTXdDLGNBQWN4QyxVQUFVc0I7QUFFOUIsVUFBSXlCLGNBQWM7QUFDbEIsVUFBSUMsVUFBVTtBQUNkLFVBQUlDLGlCQUFpQjtBQUNyQixVQUFJQyxtQkFBbUI7QUFFdkIsVUFBSVYsZUFBZW5GLElBQUc7QUFDcEIwRixzQkFBYzFGLEdBQUUzQyxNQUFNc0YsT0FBTzhDLElBQWY7QUFFZHpGLFFBQUFBLEdBQUVqRSxPQUFELEVBQVV5SixRQUFRRSxXQUFuQjtBQUNBQyxrQkFBVSxDQUFDRCxZQUFZSSxxQkFBWjtBQUNYRix5QkFBaUIsQ0FBQ0YsWUFBWUssOEJBQVo7QUFDbEJGLDJCQUFtQkgsWUFBWU0sbUJBQVo7TUFDcEI7QUFFRCxVQUFJQyxNQUFNLElBQUk1SSxNQUFNc0YsT0FBTztRQUFFZ0Q7UUFBU08sWUFBWTtNQUF2QixDQUFqQjtBQUNWRCxZQUFNckQsV0FBV3FELEtBQUtSLElBQU47QUFFaEIsVUFBSUksa0JBQWtCO0FBQ3BCSSxZQUFJRSxlQUFKO01BQ0Q7QUFFRCxVQUFJUCxnQkFBZ0I7QUFDbEI3SixnQkFBUXFCLGNBQWM2SSxHQUF0QjtNQUNEO0FBRUQsVUFBSUEsSUFBSUosb0JBQW9CSCxhQUFhO0FBQ3ZDQSxvQkFBWVMsZUFBWjtNQUNEO0FBRUQsYUFBT0Y7SUFDUjtFQXJGa0I7QUF3RnJCLFdBQVNyRCxXQUFXd0QsS0FBS0MsTUFBTTtBQUM3QixlQUFXLENBQUNDLEtBQUtDLEtBQU4sS0FBZ0J0TCxPQUFPdUwsUUFBUUgsUUFBUSxDQUFBLENBQXZCLEdBQTRCO0FBQ3JELFVBQUk7QUFDRkQsWUFBSUUsT0FBT0M7TUFDWixTQUFPLFNBQU47QUFDQXRMLGVBQU93TCxlQUFlTCxLQUFLRSxLQUFLO1VBQzlCSSxjQUFjO1VBQ2RDLE1BQU07QUFDSixtQkFBT0o7VUFDUjtTQUpIO01BTUQ7SUFDRjtBQUVELFdBQU9IO0VBQ1I7QUNsVEQsTUFBTVEsYUFBYSxvQkFBSUMsSUFBSjtBQUVuQixNQUFBLE9BQWU7SUFDYkMsSUFBSS9LLFNBQVN1SyxLQUFLUyxVQUFVO0FBQzFCLFVBQUksQ0FBQ0gsV0FBV3pDLElBQUlwSSxPQUFmLEdBQXlCO0FBQzVCNkssbUJBQVdFLElBQUkvSyxTQUFTLG9CQUFJOEssSUFBSixDQUF4QjtNQUNEO0FBRUQsWUFBTUcsY0FBY0osV0FBV0QsSUFBSTVLLE9BQWY7QUFJcEIsVUFBSSxDQUFDaUwsWUFBWTdDLElBQUltQyxHQUFoQixLQUF3QlUsWUFBWUMsU0FBUyxHQUFHO0FBRW5EQyxnQkFBUUMsTUFBTywrRUFBOEVDLE1BQU1DLEtBQUtMLFlBQVloQyxLQUFaLENBQVgsRUFBK0IsS0FBNUg7QUFDQTtNQUNEO0FBRURnQyxrQkFBWUYsSUFBSVIsS0FBS1MsUUFBckI7O0lBR0ZKLElBQUk1SyxTQUFTdUssS0FBSztBQUNoQixVQUFJTSxXQUFXekMsSUFBSXBJLE9BQWYsR0FBeUI7QUFDM0IsZUFBTzZLLFdBQVdELElBQUk1SyxPQUFmLEVBQXdCNEssSUFBSUwsR0FBNUIsS0FBb0M7TUFDNUM7QUFFRCxhQUFPOztJQUdUZ0IsT0FBT3ZMLFNBQVN1SyxLQUFLO0FBQ25CLFVBQUksQ0FBQ00sV0FBV3pDLElBQUlwSSxPQUFmLEdBQXlCO0FBQzVCO01BQ0Q7QUFFRCxZQUFNaUwsY0FBY0osV0FBV0QsSUFBSTVLLE9BQWY7QUFFcEJpTCxrQkFBWU8sT0FBT2pCLEdBQW5CO0FBR0EsVUFBSVUsWUFBWUMsU0FBUyxHQUFHO0FBQzFCTCxtQkFBV1csT0FBT3hMLE9BQWxCO01BQ0Q7SUFDRjtFQXhDWTtBQ05mLFdBQVN5TCxjQUFjakIsT0FBTztBQUM1QixRQUFJQSxVQUFVLFFBQVE7QUFDcEIsYUFBTztJQUNSO0FBRUQsUUFBSUEsVUFBVSxTQUFTO0FBQ3JCLGFBQU87SUFDUjtBQUVELFFBQUlBLFVBQVV2SixPQUFPdUosS0FBRCxFQUFRcEwsU0FBZCxHQUEwQjtBQUN0QyxhQUFPNkIsT0FBT3VKLEtBQUQ7SUFDZDtBQUVELFFBQUlBLFVBQVUsTUFBTUEsVUFBVSxRQUFRO0FBQ3BDLGFBQU87SUFDUjtBQUVELFFBQUksT0FBT0EsVUFBVSxVQUFVO0FBQzdCLGFBQU9BO0lBQ1I7QUFFRCxRQUFJO0FBQ0YsYUFBT2tCLEtBQUtDLE1BQU1DLG1CQUFtQnBCLEtBQUQsQ0FBN0I7SUFDUixTQUFPLFNBQU47QUFDQSxhQUFPQTtJQUNSO0VBQ0Y7QUFFRCxXQUFTcUIsaUJBQWlCdEIsS0FBSztBQUM3QixXQUFPQSxJQUFJN0IsUUFBUSxVQUFVb0QsU0FBUSxJQUFHQSxJQUFJdk0sWUFBSixHQUFqQztFQUNSO0FBRUQsTUFBTXdNLGNBQWM7SUFDbEJDLGlCQUFpQmhNLFNBQVN1SyxLQUFLQyxPQUFPO0FBQ3BDeEssY0FBUWlNLGFBQWMsV0FBVUosaUJBQWlCdEIsR0FBRCxLQUFTQyxLQUF6RDs7SUFHRjBCLG9CQUFvQmxNLFNBQVN1SyxLQUFLO0FBQ2hDdkssY0FBUW1NLGdCQUFpQixXQUFVTixpQkFBaUJ0QixHQUFELEdBQW5EOztJQUdGNkIsa0JBQWtCcE0sU0FBUztBQUN6QixVQUFJLENBQUNBLFNBQVM7QUFDWixlQUFPLENBQUE7TUFDUjtBQUVELFlBQU1xTSxhQUFhLENBQUE7QUFDbkIsWUFBTUMsU0FBU3BOLE9BQU8rSixLQUFLakosUUFBUXVNLE9BQXBCLEVBQTZCQyxPQUFPakMsU0FBT0EsSUFBSWxLLFdBQVcsSUFBZixLQUF3QixDQUFDa0ssSUFBSWxLLFdBQVcsVUFBZixDQUFwRTtBQUVmLGlCQUFXa0ssT0FBTytCLFFBQVE7QUFDeEIsWUFBSUcsVUFBVWxDLElBQUk3QixRQUFRLE9BQU8sRUFBbkI7QUFDZCtELGtCQUFVQSxRQUFRQyxPQUFPLENBQWYsRUFBa0JuTixZQUFsQixJQUFrQ2tOLFFBQVFsRCxNQUFNLEdBQUdrRCxRQUFROUssTUFBekI7QUFDNUMwSyxtQkFBV0ksV0FBV2hCLGNBQWN6TCxRQUFRdU0sUUFBUWhDLElBQWpCO01BQ3BDO0FBRUQsYUFBTzhCOztJQUdUTSxpQkFBaUIzTSxTQUFTdUssS0FBSztBQUM3QixhQUFPa0IsY0FBY3pMLFFBQVFFLGFBQWMsV0FBVTJMLGlCQUFpQnRCLEdBQUQsR0FBaEQsQ0FBRDtJQUNyQjtFQTVCaUI7QUN6QnBCLE1BQU1xQyxTQUFOLE1BQWE7SUFFTyxXQUFQQyxVQUFVO0FBQ25CLGFBQU8sQ0FBQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBTyxDQUFBO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixZQUFNLElBQUk0SSxNQUFNLHFFQUFWO0lBQ1A7SUFFREMsV0FBV0MsUUFBUTtBQUNqQkEsZUFBUyxLQUFLQyxnQkFBZ0JELE1BQXJCO0FBQ1RBLGVBQVMsS0FBS0Usa0JBQWtCRixNQUF2QjtBQUNULFdBQUtHLGlCQUFpQkgsTUFBdEI7QUFDQSxhQUFPQTtJQUNSO0lBRURFLGtCQUFrQkYsUUFBUTtBQUN4QixhQUFPQTtJQUNSO0lBRURDLGdCQUFnQkQsUUFBUWpOLFNBQVM7QUFDL0IsWUFBTXFOLGFBQWE5TCxXQUFVdkIsT0FBRCxJQUFZK0wsWUFBWVksaUJBQWlCM00sU0FBUyxRQUF0QyxJQUFrRCxDQUFBO0FBRTFGLGFBQU8sZ0VBQ0YsS0FBS3NOLFlBQVlULFVBQ2hCLE9BQU9RLGVBQWUsV0FBV0EsYUFBYSxDQUFBLElBQzlDOUwsV0FBVXZCLE9BQUQsSUFBWStMLFlBQVlLLGtCQUFrQnBNLE9BQTlCLElBQXlDLENBQUEsSUFDOUQsT0FBT2lOLFdBQVcsV0FBV0EsU0FBUyxDQUFBO0lBRTdDO0lBRURHLGlCQUFpQkgsUUFBUU0sY0FBYyxLQUFLRCxZQUFZUixhQUFhO0FBQ25FLGlCQUFXVSxZQUFZdE8sT0FBTytKLEtBQUtzRSxXQUFaLEdBQTBCO0FBQy9DLGNBQU1FLGdCQUFnQkYsWUFBWUM7QUFDbEMsY0FBTWhELFFBQVF5QyxPQUFPTztBQUNyQixjQUFNRSxZQUFZbk0sV0FBVWlKLEtBQUQsSUFBVSxZQUFZekwsT0FBT3lMLEtBQUQ7QUFFdkQsWUFBSSxDQUFDLElBQUltRCxPQUFPRixhQUFYLEVBQTBCRyxLQUFLRixTQUEvQixHQUEyQztBQUM5QyxnQkFBTSxJQUFJRyxVQUNQLEdBQUUsS0FBS1AsWUFBWW5KLEtBQUsySixZQUF0QixjQUFnRE4sNEJBQTRCRSxpQ0FBaUNELGlCQUQ1RztRQUdQO01BQ0Y7SUFDRjtFQWhEVTtBQ0ViLE1BQU1NLFVBQVU7QUFNaEIsTUFBTUMsZ0JBQU4sY0FBNEJwQixPQUFPO0lBQ2pDVSxZQUFZdE4sU0FBU2lOLFFBQVE7QUFDM0IsWUFBQTtBQUVBak4sZ0JBQVUwQixXQUFXMUIsT0FBRDtBQUNwQixVQUFJLENBQUNBLFNBQVM7QUFDWjtNQUNEO0FBRUQsV0FBS2lPLFdBQVdqTztBQUNoQixXQUFLa08sVUFBVSxLQUFLbEIsV0FBV0MsTUFBaEI7QUFFZmtCLFdBQUtwRCxJQUFJLEtBQUtrRCxVQUFVLEtBQUtYLFlBQVljLFVBQVUsSUFBbkQ7SUFDRDtJQUdEQyxVQUFVO0FBQ1JGLFdBQUs1QyxPQUFPLEtBQUswQyxVQUFVLEtBQUtYLFlBQVljLFFBQTVDO0FBQ0FwSCxtQkFBYUMsSUFBSSxLQUFLZ0gsVUFBVSxLQUFLWCxZQUFZZ0IsU0FBakQ7QUFFQSxpQkFBV0MsZ0JBQWdCclAsT0FBT3NQLG9CQUFvQixJQUEzQixHQUFrQztBQUMzRCxhQUFLRCxnQkFBZ0I7TUFDdEI7SUFDRjtJQUVERSxlQUFlaEwsVUFBVXpELFNBQVMwTyxhQUFhLE1BQU07QUFDbkRoSyw2QkFBdUJqQixVQUFVekQsU0FBUzBPLFVBQXBCO0lBQ3ZCO0lBRUQxQixXQUFXQyxRQUFRO0FBQ2pCQSxlQUFTLEtBQUtDLGdCQUFnQkQsUUFBUSxLQUFLZ0IsUUFBbEM7QUFDVGhCLGVBQVMsS0FBS0Usa0JBQWtCRixNQUF2QjtBQUNULFdBQUtHLGlCQUFpQkgsTUFBdEI7QUFDQSxhQUFPQTtJQUNSO0lBR2lCLE9BQVgwQixZQUFZM08sU0FBUztBQUMxQixhQUFPbU8sS0FBS3ZELElBQUlsSixXQUFXMUIsT0FBRCxHQUFXLEtBQUtvTyxRQUFuQztJQUNSO0lBRXlCLE9BQW5CUSxvQkFBb0I1TyxTQUFTaU4sU0FBUyxDQUFBLEdBQUk7QUFDL0MsYUFBTyxLQUFLMEIsWUFBWTNPLE9BQWpCLEtBQTZCLElBQUksS0FBS0EsU0FBUyxPQUFPaU4sV0FBVyxXQUFXQSxTQUFTLElBQXhEO0lBQ3JDO0lBRWlCLFdBQVBjLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVrQixXQUFSSyxXQUFXO0FBQ3BCLGFBQVEsTUFBSyxLQUFLaks7SUFDbkI7SUFFbUIsV0FBVG1LLFlBQVk7QUFDckIsYUFBUSxJQUFHLEtBQUtGO0lBQ2pCO0lBRWUsT0FBVFMsVUFBVTNLLE1BQU07QUFDckIsYUFBUSxHQUFFQSxPQUFPLEtBQUtvSztJQUN2QjtFQTNEZ0M7QUNabkMsTUFBTVEsdUJBQXVCLENBQUNDLFdBQVdDLFNBQVMsV0FBVztBQUMzRCxVQUFNQyxhQUFjLGdCQUFlRixVQUFVVDtBQUM3QyxVQUFNcEssT0FBTzZLLFVBQVU1SztBQUV2QjZDLGlCQUFha0MsR0FBR3JKLFVBQVVvUCxZQUFhLHFCQUFvQi9LLFVBQVUsU0FBVTBDLE9BQU87QUFDcEYsVUFBSSxDQUFDLEtBQUssTUFBTixFQUFjeEcsU0FBUyxLQUFLOE8sT0FBNUIsR0FBc0M7QUFDeEN0SSxjQUFNd0QsZUFBTjtNQUNEO0FBRUQsVUFBSWhJLFdBQVcsSUFBRCxHQUFRO0FBQ3BCO01BQ0Q7QUFFRCxZQUFNNkMsU0FBU3ZFLHVCQUF1QixJQUFELEtBQVUsS0FBS3VCLFFBQVMsSUFBR2lDLE1BQWpCO0FBQy9DLFlBQU04RyxXQUFXK0QsVUFBVUgsb0JBQW9CM0osTUFBOUI7QUFHakIrRixlQUFTZ0UsUUFBVDtLQWJGO0VBZUQ7QUNiRCxNQUFNN0ssU0FBTztBQUNiLE1BQU1pSyxhQUFXO0FBQ2pCLE1BQU1FLGNBQWEsSUFBR0Y7QUFFdEIsTUFBTWUsY0FBZSxRQUFPYjtBQUM1QixNQUFNYyxlQUFnQixTQUFRZDtBQUM5QixNQUFNZSxvQkFBa0I7QUFDeEIsTUFBTUMsb0JBQWtCO0FBTXhCLE1BQU1DLFFBQU4sY0FBb0J2QixjQUFjO0lBRWpCLFdBQUo3SixPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRHFMLFFBQVE7QUFDTixZQUFNQyxhQUFhekksYUFBYXlDLFFBQVEsS0FBS3dFLFVBQVVrQixXQUFwQztBQUVuQixVQUFJTSxXQUFXM0Ysa0JBQWtCO0FBQy9CO01BQ0Q7QUFFRCxXQUFLbUUsU0FBUzFMLFVBQVVnSixPQUFPK0QsaUJBQS9CO0FBRUEsWUFBTVosYUFBYSxLQUFLVCxTQUFTMUwsVUFBVUMsU0FBUzZNLGlCQUFqQztBQUNuQixXQUFLWixlQUFlLE1BQU0sS0FBS2lCLGdCQUFMLEdBQXdCLEtBQUt6QixVQUFVUyxVQUFqRTtJQUNEO0lBR0RnQixrQkFBa0I7QUFDaEIsV0FBS3pCLFNBQVMxQyxPQUFkO0FBQ0F2RSxtQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVVtQixZQUFwQztBQUNBLFdBQUtmLFFBQUw7SUFDRDtJQUdxQixPQUFmL0osZ0JBQWdCMkksUUFBUTtBQUM3QixhQUFPLEtBQUswQyxLQUFLLFdBQVk7QUFDM0IsY0FBTUMsT0FBT0wsTUFBTVgsb0JBQW9CLElBQTFCO0FBRWIsWUFBSSxPQUFPM0IsV0FBVyxVQUFVO0FBQzlCO1FBQ0Q7QUFFRCxZQUFJMkMsS0FBSzNDLFlBQVloTyxVQUFhZ08sT0FBTzVNLFdBQVcsR0FBbEIsS0FBMEI0TSxXQUFXLGVBQWU7QUFDcEYsZ0JBQU0sSUFBSVksVUFBVyxvQkFBbUJaLFNBQWxDO1FBQ1A7QUFFRDJDLGFBQUszQyxRQUFRLElBQWI7TUFDRCxDQVpNO0lBYVI7RUExQytCO0FBaURsQzZCLHVCQUFxQlMsT0FBTyxPQUFSO0FBTXBCeEwscUJBQW1Cd0wsS0FBRDtBQ3JFbEIsTUFBTXBMLFNBQU87QUFDYixNQUFNaUssYUFBVztBQUNqQixNQUFNRSxjQUFhLElBQUdGO0FBQ3RCLE1BQU15QixpQkFBZTtBQUVyQixNQUFNQyxzQkFBb0I7QUFDMUIsTUFBTUMseUJBQXVCO0FBQzdCLE1BQU1DLHlCQUF3QixRQUFPMUIsY0FBWXVCO0FBTWpELE1BQU1JLFNBQU4sY0FBcUJqQyxjQUFjO0lBRWxCLFdBQUo3SixPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRCtMLFNBQVM7QUFFUCxXQUFLakMsU0FBU2hDLGFBQWEsZ0JBQWdCLEtBQUtnQyxTQUFTMUwsVUFBVTJOLE9BQU9KLG1CQUEvQixDQUEzQztJQUNEO0lBR3FCLE9BQWZ4TCxnQkFBZ0IySSxRQUFRO0FBQzdCLGFBQU8sS0FBSzBDLEtBQUssV0FBWTtBQUMzQixjQUFNQyxPQUFPSyxPQUFPckIsb0JBQW9CLElBQTNCO0FBRWIsWUFBSTNCLFdBQVcsVUFBVTtBQUN2QjJDLGVBQUszQyxRQUFMO1FBQ0Q7TUFDRixDQU5NO0lBT1I7RUFyQmdDO0FBNEJuQ2pHLGVBQWFrQyxHQUFHckosVUFBVW1RLHdCQUFzQkQsd0JBQXNCbkosV0FBUztBQUM3RUEsVUFBTXdELGVBQU47QUFFQSxVQUFNK0YsU0FBU3ZKLE1BQU0zQixPQUFPaEQsUUFBUThOLHNCQUFyQjtBQUNmLFVBQU1ILE9BQU9LLE9BQU9yQixvQkFBb0J1QixNQUEzQjtBQUViUCxTQUFLTSxPQUFMO0VBQ0QsQ0FQRDtBQWFBbk0scUJBQW1Ca00sTUFBRDtBQ3hEbEIsTUFBTUcsaUJBQWlCO0lBQ3JCdkksS0FBSzVILFVBQVVELFVBQVVILFNBQVMrQyxpQkFBaUI7QUFDakQsYUFBTyxDQUFBLEVBQUd5TixPQUFPLEdBQUdDLFFBQVFuUixVQUFVbUksaUJBQWlCakksS0FBS1csU0FBU0MsUUFBakQsQ0FBYjs7SUFHVHNRLFFBQVF0USxVQUFVRCxVQUFVSCxTQUFTK0MsaUJBQWlCO0FBQ3BELGFBQU8wTixRQUFRblIsVUFBVXNCLGNBQWNwQixLQUFLVyxTQUFTQyxRQUE5Qzs7SUFHVHVRLFNBQVN4USxTQUFTQyxVQUFVO0FBQzFCLGFBQU8sQ0FBQSxFQUFHb1EsT0FBTyxHQUFHclEsUUFBUXdRLFFBQXJCLEVBQStCaEUsT0FBT2lFLFdBQVNBLE1BQU1DLFFBQVF6USxRQUFkLENBQS9DOztJQUdUMFEsUUFBUTNRLFNBQVNDLFVBQVU7QUFDekIsWUFBTTBRLFVBQVUsQ0FBQTtBQUNoQixVQUFJQyxXQUFXNVEsUUFBUW1DLFdBQVdGLFFBQVFoQyxRQUEzQjtBQUVmLGFBQU8yUSxVQUFVO0FBQ2ZELGdCQUFRL00sS0FBS2dOLFFBQWI7QUFDQUEsbUJBQVdBLFNBQVN6TyxXQUFXRixRQUFRaEMsUUFBNUI7TUFDWjtBQUVELGFBQU8wUTs7SUFHVEUsS0FBSzdRLFNBQVNDLFVBQVU7QUFDdEIsVUFBSTZRLFdBQVc5USxRQUFRK1E7QUFFdkIsYUFBT0QsVUFBVTtBQUNmLFlBQUlBLFNBQVNKLFFBQVF6USxRQUFqQixHQUE0QjtBQUM5QixpQkFBTyxDQUFDNlEsUUFBRDtRQUNSO0FBRURBLG1CQUFXQSxTQUFTQztNQUNyQjtBQUVELGFBQU8sQ0FBQTs7SUFHVEMsS0FBS2hSLFNBQVNDLFVBQVU7QUFDdEIsVUFBSStRLE9BQU9oUixRQUFRaVI7QUFFbkIsYUFBT0QsTUFBTTtBQUNYLFlBQUlBLEtBQUtOLFFBQVF6USxRQUFiLEdBQXdCO0FBQzFCLGlCQUFPLENBQUMrUSxJQUFEO1FBQ1I7QUFFREEsZUFBT0EsS0FBS0M7TUFDYjtBQUVELGFBQU8sQ0FBQTs7SUFHVEMsa0JBQWtCbFIsU0FBUztBQUN6QixZQUFNbVIsYUFBYSxDQUNqQixLQUNBLFVBQ0EsU0FDQSxZQUNBLFVBQ0EsV0FDQSxjQUNBLDBCQVJpQixFQVNqQkMsSUFBSW5SLGNBQWEsR0FBRUEsK0JBVEYsRUFTbUNvUixLQUFLLEdBVHhDO0FBV25CLGFBQU8sS0FBS3hKLEtBQUtzSixZQUFZblIsT0FBdEIsRUFBK0J3TSxPQUFPOEUsUUFBTSxDQUFDbFAsV0FBV2tQLEVBQUQsS0FBUTFQLFVBQVUwUCxFQUFELENBQXhFO0lBQ1I7RUFsRW9CO0FDRXZCLE1BQU1uTixTQUFPO0FBQ2IsTUFBTW1LLGNBQVk7QUFDbEIsTUFBTWlELG1CQUFvQixhQUFZakQ7QUFDdEMsTUFBTWtELGtCQUFtQixZQUFXbEQ7QUFDcEMsTUFBTW1ELGlCQUFrQixXQUFVbkQ7QUFDbEMsTUFBTW9ELG9CQUFxQixjQUFhcEQ7QUFDeEMsTUFBTXFELGtCQUFtQixZQUFXckQ7QUFDcEMsTUFBTXNELHFCQUFxQjtBQUMzQixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMsMkJBQTJCO0FBQ2pDLE1BQU1DLGtCQUFrQjtBQUV4QixNQUFNbEYsWUFBVTtJQUNkbUYsYUFBYTtJQUNiQyxjQUFjO0lBQ2RDLGVBQWU7RUFIRDtBQU1oQixNQUFNcEYsZ0JBQWM7SUFDbEJrRixhQUFhO0lBQ2JDLGNBQWM7SUFDZEMsZUFBZTtFQUhHO0FBVXBCLE1BQU1DLFFBQU4sY0FBb0J2RixPQUFPO0lBQ3pCVSxZQUFZdE4sU0FBU2lOLFFBQVE7QUFDM0IsWUFBQTtBQUNBLFdBQUtnQixXQUFXak87QUFFaEIsVUFBSSxDQUFDQSxXQUFXLENBQUNtUyxNQUFNQyxZQUFOLEdBQXFCO0FBQ3BDO01BQ0Q7QUFFRCxXQUFLbEUsVUFBVSxLQUFLbEIsV0FBV0MsTUFBaEI7QUFDZixXQUFLb0YsVUFBVTtBQUNmLFdBQUtDLHdCQUF3QjFKLFFBQVE5SCxPQUFPeVIsWUFBUjtBQUNwQyxXQUFLQyxZQUFMO0lBQ0Q7SUFHaUIsV0FBUDNGLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0RrSyxVQUFVO0FBQ1JySCxtQkFBYUMsSUFBSSxLQUFLZ0gsVUFBVUssV0FBaEM7SUFDRDtJQUdEbUUsT0FBTzdMLE9BQU87QUFDWixVQUFJLENBQUMsS0FBSzBMLHVCQUF1QjtBQUMvQixhQUFLRCxVQUFVekwsTUFBTThMLFFBQVEsR0FBR0M7QUFFaEM7TUFDRDtBQUVELFVBQUksS0FBS0Msd0JBQXdCaE0sS0FBN0IsR0FBcUM7QUFDdkMsYUFBS3lMLFVBQVV6TCxNQUFNK0w7TUFDdEI7SUFDRjtJQUVERSxLQUFLak0sT0FBTztBQUNWLFVBQUksS0FBS2dNLHdCQUF3QmhNLEtBQTdCLEdBQXFDO0FBQ3ZDLGFBQUt5TCxVQUFVekwsTUFBTStMLFVBQVUsS0FBS047TUFDckM7QUFFRCxXQUFLUyxhQUFMO0FBQ0FyTyxjQUFRLEtBQUt5SixRQUFROEQsV0FBZDtJQUNSO0lBRURlLE1BQU1uTSxPQUFPO0FBQ1gsV0FBS3lMLFVBQVV6TCxNQUFNOEwsV0FBVzlMLE1BQU04TCxRQUFRL1EsU0FBUyxJQUNyRCxJQUNBaUYsTUFBTThMLFFBQVEsR0FBR0MsVUFBVSxLQUFLTjtJQUNuQztJQUVEUyxlQUFlO0FBQ2IsWUFBTUUsWUFBWXRULEtBQUt1VCxJQUFJLEtBQUtaLE9BQWQ7QUFFbEIsVUFBSVcsYUFBYWpCLGlCQUFpQjtBQUNoQztNQUNEO0FBRUQsWUFBTW1CLFlBQVlGLFlBQVksS0FBS1g7QUFFbkMsV0FBS0EsVUFBVTtBQUVmLFVBQUksQ0FBQ2EsV0FBVztBQUNkO01BQ0Q7QUFFRHpPLGNBQVF5TyxZQUFZLElBQUksS0FBS2hGLFFBQVFnRSxnQkFBZ0IsS0FBS2hFLFFBQVErRCxZQUEzRDtJQUNSO0lBRURPLGNBQWM7QUFDWixVQUFJLEtBQUtGLHVCQUF1QjtBQUM5QnRMLHFCQUFha0MsR0FBRyxLQUFLK0UsVUFBVXlELG1CQUFtQjlLLFdBQVMsS0FBSzZMLE9BQU83TCxLQUFaLENBQTNEO0FBQ0FJLHFCQUFha0MsR0FBRyxLQUFLK0UsVUFBVTBELGlCQUFpQi9LLFdBQVMsS0FBS2lNLEtBQUtqTSxLQUFWLENBQXpEO0FBRUEsYUFBS3FILFNBQVMxTCxVQUFVNFEsSUFBSXJCLHdCQUE1QjtNQUNELE9BQU07QUFDTDlLLHFCQUFha0MsR0FBRyxLQUFLK0UsVUFBVXNELGtCQUFrQjNLLFdBQVMsS0FBSzZMLE9BQU83TCxLQUFaLENBQTFEO0FBQ0FJLHFCQUFha0MsR0FBRyxLQUFLK0UsVUFBVXVELGlCQUFpQjVLLFdBQVMsS0FBS21NLE1BQU1uTSxLQUFYLENBQXpEO0FBQ0FJLHFCQUFha0MsR0FBRyxLQUFLK0UsVUFBVXdELGdCQUFnQjdLLFdBQVMsS0FBS2lNLEtBQUtqTSxLQUFWLENBQXhEO01BQ0Q7SUFDRjtJQUVEZ00sd0JBQXdCaE0sT0FBTztBQUM3QixhQUFPLEtBQUswTCwwQkFBMEIxTCxNQUFNd00sZ0JBQWdCdkIsb0JBQW9CakwsTUFBTXdNLGdCQUFnQnhCO0lBQ3ZHO0lBR2lCLE9BQVhRLGNBQWM7QUFDbkIsYUFBTyxrQkFBa0J2UyxTQUFTK0MsbUJBQW1CeVEsVUFBVUMsaUJBQWlCO0lBQ2pGO0VBbkd3QjtBQ2pCM0IsTUFBTW5QLFNBQU87QUFDYixNQUFNaUssYUFBVztBQUNqQixNQUFNRSxjQUFhLElBQUdGO0FBQ3RCLE1BQU15QixpQkFBZTtBQUVyQixNQUFNMEQsbUJBQWlCO0FBQ3ZCLE1BQU1DLG9CQUFrQjtBQUN4QixNQUFNQyx5QkFBeUI7QUFFL0IsTUFBTUMsYUFBYTtBQUNuQixNQUFNQyxhQUFhO0FBQ25CLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxrQkFBa0I7QUFFeEIsTUFBTUMsY0FBZSxRQUFPeEY7QUFDNUIsTUFBTXlGLGFBQWMsT0FBTXpGO0FBQzFCLE1BQU0wRixrQkFBaUIsVUFBUzFGO0FBQ2hDLE1BQU0yRixxQkFBb0IsYUFBWTNGO0FBQ3RDLE1BQU00RixxQkFBb0IsYUFBWTVGO0FBQ3RDLE1BQU02RixtQkFBb0IsWUFBVzdGO0FBQ3JDLE1BQU04Rix3QkFBdUIsT0FBTTlGLGNBQVl1QjtBQUMvQyxNQUFNRyx5QkFBd0IsUUFBTzFCLGNBQVl1QjtBQUVqRCxNQUFNd0Usc0JBQXNCO0FBQzVCLE1BQU12RSxzQkFBb0I7QUFDMUIsTUFBTXdFLG1CQUFtQjtBQUN6QixNQUFNQyxpQkFBaUI7QUFDdkIsTUFBTUMsbUJBQW1CO0FBQ3pCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyxrQkFBa0I7QUFFeEIsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyx1QkFBdUJGLGtCQUFrQkM7QUFDL0MsTUFBTUUsb0JBQW9CO0FBQzFCLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMscUJBQXFCO0FBRTNCLE1BQU1DLG1CQUFtQjtJQUN2QixDQUFDM0IsbUJBQWlCTTtJQUNsQixDQUFDTCxvQkFBa0JJO0VBRkk7QUFLekIsTUFBTS9HLFlBQVU7SUFDZHNJLFVBQVU7SUFDVkMsVUFBVTtJQUNWQyxPQUFPO0lBQ1BDLE1BQU07SUFDTkMsT0FBTztJQUNQQyxNQUFNO0VBTlE7QUFTaEIsTUFBTTFJLGdCQUFjO0lBQ2xCcUksVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLE9BQU87SUFDUEMsTUFBTTtJQUNOQyxPQUFPO0lBQ1BDLE1BQU07RUFOWTtBQWFwQixNQUFNQyxXQUFOLGNBQXVCekgsY0FBYztJQUNuQ1YsWUFBWXROLFNBQVNpTixRQUFRO0FBQzNCLFlBQU1qTixTQUFTaU4sTUFBZjtBQUVBLFdBQUt5SSxZQUFZO0FBQ2pCLFdBQUtDLGlCQUFpQjtBQUN0QixXQUFLQyxhQUFhO0FBQ2xCLFdBQUtDLGVBQWU7QUFDcEIsV0FBS0MsZUFBZTtBQUVwQixXQUFLQyxxQkFBcUIzRixlQUFlRyxRQUFRd0UscUJBQXFCLEtBQUs5RyxRQUFqRDtBQUMxQixXQUFLK0gsbUJBQUw7QUFFQSxVQUFJLEtBQUs5SCxRQUFRb0gsU0FBU2pCLHFCQUFxQjtBQUM3QyxhQUFLNEIsTUFBTDtNQUNEO0lBQ0Y7SUFHaUIsV0FBUHBKLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0Q2TSxPQUFPO0FBQ0wsV0FBS2tGLE9BQU94QyxVQUFaO0lBQ0Q7SUFFRHlDLGtCQUFrQjtBQUloQixVQUFJLENBQUN0VyxTQUFTdVcsVUFBVXhVLFVBQVUsS0FBS3FNLFFBQU4sR0FBaUI7QUFDaEQsYUFBSytDLEtBQUw7TUFDRDtJQUNGO0lBRURILE9BQU87QUFDTCxXQUFLcUYsT0FBT3ZDLFVBQVo7SUFDRDtJQUVEMEIsUUFBUTtBQUNOLFVBQUksS0FBS08sWUFBWTtBQUNuQnhVLDZCQUFxQixLQUFLNk0sUUFBTjtNQUNyQjtBQUVELFdBQUtvSSxlQUFMO0lBQ0Q7SUFFREosUUFBUTtBQUNOLFdBQUtJLGVBQUw7QUFDQSxXQUFLQyxnQkFBTDtBQUVBLFdBQUtaLFlBQVlhLFlBQVksTUFBTSxLQUFLSixnQkFBTCxHQUF3QixLQUFLakksUUFBUWlILFFBQTVDO0lBQzdCO0lBRURxQixvQkFBb0I7QUFDbEIsVUFBSSxDQUFDLEtBQUt0SSxRQUFRb0gsTUFBTTtBQUN0QjtNQUNEO0FBRUQsVUFBSSxLQUFLTSxZQUFZO0FBQ25CNU8scUJBQWFtQyxJQUFJLEtBQUs4RSxVQUFVOEYsWUFBWSxNQUFNLEtBQUtrQyxNQUFMLENBQWxEO0FBQ0E7TUFDRDtBQUVELFdBQUtBLE1BQUw7SUFDRDtJQUVEUSxHQUFHL1EsT0FBTztBQUNSLFlBQU1nUixRQUFRLEtBQUtDLFVBQUw7QUFDZCxVQUFJalIsUUFBUWdSLE1BQU0vVSxTQUFTLEtBQUsrRCxRQUFRLEdBQUc7QUFDekM7TUFDRDtBQUVELFVBQUksS0FBS2tRLFlBQVk7QUFDbkI1TyxxQkFBYW1DLElBQUksS0FBSzhFLFVBQVU4RixZQUFZLE1BQU0sS0FBSzBDLEdBQUcvUSxLQUFSLENBQWxEO0FBQ0E7TUFDRDtBQUVELFlBQU1rUixjQUFjLEtBQUtDLGNBQWMsS0FBS0MsV0FBTCxDQUFuQjtBQUNwQixVQUFJRixnQkFBZ0JsUixPQUFPO0FBQ3pCO01BQ0Q7QUFFRCxZQUFNcVIsU0FBUXJSLFFBQVFrUixjQUFjbEQsYUFBYUM7QUFFakQsV0FBS3VDLE9BQU9hLFFBQU9MLE1BQU1oUixNQUF6QjtJQUNEO0lBRUQySSxVQUFVO0FBQ1IsVUFBSSxLQUFLeUgsY0FBYztBQUNyQixhQUFLQSxhQUFhekgsUUFBbEI7TUFDRDtBQUVELFlBQU1BLFFBQU47SUFDRDtJQUdEbEIsa0JBQWtCRixRQUFRO0FBQ3hCQSxhQUFPK0osa0JBQWtCL0osT0FBT2tJO0FBQ2hDLGFBQU9sSTtJQUNSO0lBRUQrSSxxQkFBcUI7QUFDbkIsVUFBSSxLQUFLOUgsUUFBUWtILFVBQVU7QUFDekJwTyxxQkFBYWtDLEdBQUcsS0FBSytFLFVBQVUrRixpQkFBZXBOLFdBQVMsS0FBS3FRLFNBQVNyUSxLQUFkLENBQXZEO01BQ0Q7QUFFRCxVQUFJLEtBQUtzSCxRQUFRbUgsVUFBVSxTQUFTO0FBQ2xDck8scUJBQWFrQyxHQUFHLEtBQUsrRSxVQUFVZ0csb0JBQWtCLE1BQU0sS0FBS29CLE1BQUwsQ0FBdkQ7QUFDQXJPLHFCQUFha0MsR0FBRyxLQUFLK0UsVUFBVWlHLG9CQUFrQixNQUFNLEtBQUtzQyxrQkFBTCxDQUF2RDtNQUNEO0FBRUQsVUFBSSxLQUFLdEksUUFBUXFILFNBQVNwRCxNQUFNQyxZQUFOLEdBQXFCO0FBQzdDLGFBQUs4RSx3QkFBTDtNQUNEO0lBQ0Y7SUFFREEsMEJBQTBCO0FBQ3hCLGlCQUFXQyxPQUFPL0csZUFBZXZJLEtBQUtpTixtQkFBbUIsS0FBSzdHLFFBQTVDLEdBQXVEO0FBQ3ZFakgscUJBQWFrQyxHQUFHaU8sS0FBS2hELGtCQUFrQnZOLFdBQVNBLE1BQU13RCxlQUFOLENBQWhEO01BQ0Q7QUFFRCxZQUFNZ04sY0FBYyxNQUFNO0FBQ3hCLFlBQUksS0FBS2xKLFFBQVFtSCxVQUFVLFNBQVM7QUFDbEM7UUFDRDtBQVVELGFBQUtBLE1BQUw7QUFDQSxZQUFJLEtBQUtRLGNBQWM7QUFDckJ3Qix1QkFBYSxLQUFLeEIsWUFBTjtRQUNiO0FBRUQsYUFBS0EsZUFBZTFRLFdBQVcsTUFBTSxLQUFLcVIsa0JBQUwsR0FBMEIvQyx5QkFBeUIsS0FBS3ZGLFFBQVFpSCxRQUF2RTs7QUFHaEMsWUFBTW1DLGNBQWM7UUFDbEJyRixjQUFjLE1BQU0sS0FBS2lFLE9BQU8sS0FBS3FCLGtCQUFrQjNELGNBQXZCLENBQVo7UUFDcEIxQixlQUFlLE1BQU0sS0FBS2dFLE9BQU8sS0FBS3FCLGtCQUFrQjFELGVBQXZCLENBQVo7UUFDckI3QixhQUFhb0Y7O0FBR2YsV0FBS3RCLGVBQWUsSUFBSTNELE1BQU0sS0FBS2xFLFVBQVVxSixXQUF6QjtJQUNyQjtJQUVETCxTQUFTclEsT0FBTztBQUNkLFVBQUksa0JBQWtCZ0gsS0FBS2hILE1BQU0zQixPQUFPaUssT0FBcEMsR0FBOEM7QUFDaEQ7TUFDRDtBQUVELFlBQU1nRSxZQUFZZ0MsaUJBQWlCdE8sTUFBTTJEO0FBQ3pDLFVBQUkySSxXQUFXO0FBQ2J0TSxjQUFNd0QsZUFBTjtBQUNBLGFBQUs4TCxPQUFPLEtBQUtxQixrQkFBa0JyRSxTQUF2QixDQUFaO01BQ0Q7SUFDRjtJQUVEMkQsY0FBYzdXLFNBQVM7QUFDckIsYUFBTyxLQUFLMlcsVUFBTCxFQUFpQmhSLFFBQVEzRixPQUF6QjtJQUNSO0lBRUR3WCwyQkFBMkI5UixPQUFPO0FBQ2hDLFVBQUksQ0FBQyxLQUFLcVEsb0JBQW9CO0FBQzVCO01BQ0Q7QUFFRCxZQUFNMEIsa0JBQWtCckgsZUFBZUcsUUFBUW9FLGlCQUFpQixLQUFLb0Isa0JBQTdDO0FBRXhCMEIsc0JBQWdCbFYsVUFBVWdKLE9BQU91RSxtQkFBakM7QUFDQTJILHNCQUFnQnRMLGdCQUFnQixjQUFoQztBQUVBLFlBQU11TCxxQkFBcUJ0SCxlQUFlRyxRQUFTLHNCQUFxQjdLLFdBQVcsS0FBS3FRLGtCQUE3RDtBQUUzQixVQUFJMkIsb0JBQW9CO0FBQ3RCQSwyQkFBbUJuVixVQUFVNFEsSUFBSXJELG1CQUFqQztBQUNBNEgsMkJBQW1CekwsYUFBYSxnQkFBZ0IsTUFBaEQ7TUFDRDtJQUNGO0lBRURxSyxrQkFBa0I7QUFDaEIsWUFBTXRXLFVBQVUsS0FBSzJWLGtCQUFrQixLQUFLbUIsV0FBTDtBQUV2QyxVQUFJLENBQUM5VyxTQUFTO0FBQ1o7TUFDRDtBQUVELFlBQU0yWCxrQkFBa0IxVyxPQUFPMlcsU0FBUzVYLFFBQVFFLGFBQWEsa0JBQXJCLEdBQTBDLEVBQTFEO0FBRXhCLFdBQUtnTyxRQUFRaUgsV0FBV3dDLG1CQUFtQixLQUFLekosUUFBUThJO0lBQ3pEO0lBRURkLE9BQU9hLFFBQU8vVyxVQUFVLE1BQU07QUFDNUIsVUFBSSxLQUFLNFYsWUFBWTtBQUNuQjtNQUNEO0FBRUQsWUFBTXRRLGdCQUFnQixLQUFLd1IsV0FBTDtBQUN0QixZQUFNZSxTQUFTZCxXQUFVckQ7QUFDekIsWUFBTW9FLGNBQWM5WCxXQUFXb0YscUJBQXFCLEtBQUt1UixVQUFMLEdBQWtCclIsZUFBZXVTLFFBQVEsS0FBSzNKLFFBQVFzSCxJQUF2RDtBQUVuRCxVQUFJc0MsZ0JBQWdCeFMsZUFBZTtBQUNqQztNQUNEO0FBRUQsWUFBTXlTLG1CQUFtQixLQUFLbEIsY0FBY2lCLFdBQW5CO0FBRXpCLFlBQU1FLGVBQWVuSixlQUFhO0FBQ2hDLGVBQU83SCxhQUFheUMsUUFBUSxLQUFLd0UsVUFBVVksV0FBVztVQUNwRHRHLGVBQWV1UDtVQUNmNUUsV0FBVyxLQUFLK0Usa0JBQWtCbEIsTUFBdkI7VUFDWHpMLE1BQU0sS0FBS3VMLGNBQWN2UixhQUFuQjtVQUNObVIsSUFBSXNCO1FBSmdELENBQS9DOztBQVFULFlBQU1HLGFBQWFGLGFBQWFsRSxXQUFEO0FBRS9CLFVBQUlvRSxXQUFXcE8sa0JBQWtCO0FBQy9CO01BQ0Q7QUFFRCxVQUFJLENBQUN4RSxpQkFBaUIsQ0FBQ3dTLGFBQWE7QUFHbEM7TUFDRDtBQUVELFlBQU1LLFlBQVl2UCxRQUFRLEtBQUs4TSxTQUFOO0FBQ3pCLFdBQUtMLE1BQUw7QUFFQSxXQUFLTyxhQUFhO0FBRWxCLFdBQUs0QiwyQkFBMkJPLGdCQUFoQztBQUNBLFdBQUtwQyxpQkFBaUJtQztBQUV0QixZQUFNTSx1QkFBdUJQLFNBQVNyRCxtQkFBbUJEO0FBQ3pELFlBQU04RCxpQkFBaUJSLFNBQVNwRCxrQkFBa0JDO0FBRWxEb0Qsa0JBQVl2VixVQUFVNFEsSUFBSWtGLGNBQTFCO0FBRUFuVixhQUFPNFUsV0FBRDtBQUVOeFMsb0JBQWMvQyxVQUFVNFEsSUFBSWlGLG9CQUE1QjtBQUNBTixrQkFBWXZWLFVBQVU0USxJQUFJaUYsb0JBQTFCO0FBRUEsWUFBTUUsbUJBQW1CLE1BQU07QUFDN0JSLG9CQUFZdlYsVUFBVWdKLE9BQU82TSxzQkFBc0JDLGNBQW5EO0FBQ0FQLG9CQUFZdlYsVUFBVTRRLElBQUlyRCxtQkFBMUI7QUFFQXhLLHNCQUFjL0MsVUFBVWdKLE9BQU91RSxxQkFBbUJ1SSxnQkFBZ0JELG9CQUFsRTtBQUVBLGFBQUt4QyxhQUFhO0FBRWxCb0MscUJBQWFqRSxVQUFEOztBQUdkLFdBQUt0RixlQUFlNkosa0JBQWtCaFQsZUFBZSxLQUFLaVQsWUFBTCxDQUFyRDtBQUVBLFVBQUlKLFdBQVc7QUFDYixhQUFLbEMsTUFBTDtNQUNEO0lBQ0Y7SUFFRHNDLGNBQWM7QUFDWixhQUFPLEtBQUt0SyxTQUFTMUwsVUFBVUMsU0FBUzhSLGdCQUFqQztJQUNSO0lBRUR3QyxhQUFhO0FBQ1gsYUFBTzFHLGVBQWVHLFFBQVFzRSxzQkFBc0IsS0FBSzVHLFFBQWxEO0lBQ1I7SUFFRDBJLFlBQVk7QUFDVixhQUFPdkcsZUFBZXZJLEtBQUsrTSxlQUFlLEtBQUszRyxRQUF4QztJQUNSO0lBRURvSSxpQkFBaUI7QUFDZixVQUFJLEtBQUtYLFdBQVc7QUFDbEI4QyxzQkFBYyxLQUFLOUMsU0FBTjtBQUNiLGFBQUtBLFlBQVk7TUFDbEI7SUFDRjtJQUVENkIsa0JBQWtCckUsV0FBVztBQUMzQixVQUFJclAsTUFBSyxHQUFJO0FBQ1gsZUFBT3FQLGNBQWNVLGlCQUFpQkQsYUFBYUQ7TUFDcEQ7QUFFRCxhQUFPUixjQUFjVSxpQkFBaUJGLGFBQWFDO0lBQ3BEO0lBRURzRSxrQkFBa0JsQixRQUFPO0FBQ3ZCLFVBQUlsVCxNQUFLLEdBQUk7QUFDWCxlQUFPa1QsV0FBVXBELGFBQWFDLGlCQUFpQkM7TUFDaEQ7QUFFRCxhQUFPa0QsV0FBVXBELGFBQWFFLGtCQUFrQkQ7SUFDakQ7SUFHcUIsT0FBZnRQLGdCQUFnQjJJLFFBQVE7QUFDN0IsYUFBTyxLQUFLMEMsS0FBSyxXQUFZO0FBQzNCLGNBQU1DLE9BQU82RixTQUFTN0csb0JBQW9CLE1BQU0zQixNQUFuQztBQUViLFlBQUksT0FBT0EsV0FBVyxVQUFVO0FBQzlCMkMsZUFBSzZHLEdBQUd4SixNQUFSO0FBQ0E7UUFDRDtBQUVELFlBQUksT0FBT0EsV0FBVyxVQUFVO0FBQzlCLGNBQUkyQyxLQUFLM0MsWUFBWWhPLFVBQWFnTyxPQUFPNU0sV0FBVyxHQUFsQixLQUEwQjRNLFdBQVcsZUFBZTtBQUNwRixrQkFBTSxJQUFJWSxVQUFXLG9CQUFtQlosU0FBbEM7VUFDUDtBQUVEMkMsZUFBSzNDLFFBQUw7UUFDRDtNQUNGLENBZk07SUFnQlI7RUE3VWtDO0FBb1ZyQ2pHLGVBQWFrQyxHQUFHckosVUFBVW1RLHdCQUFzQmdGLHFCQUFxQixTQUFVcE8sT0FBTztBQUNwRixVQUFNM0IsU0FBU3ZFLHVCQUF1QixJQUFEO0FBRXJDLFFBQUksQ0FBQ3VFLFVBQVUsQ0FBQ0EsT0FBTzFDLFVBQVVDLFNBQVM2UixtQkFBMUIsR0FBZ0Q7QUFDOUQ7SUFDRDtBQUVEek4sVUFBTXdELGVBQU47QUFFQSxVQUFNcU8sV0FBV2hELFNBQVM3RyxvQkFBb0IzSixNQUE3QjtBQUNqQixVQUFNeVQsYUFBYSxLQUFLeFksYUFBYSxrQkFBbEI7QUFFbkIsUUFBSXdZLFlBQVk7QUFDZEQsZUFBU2hDLEdBQUdpQyxVQUFaO0FBQ0FELGVBQVNqQyxrQkFBVDtBQUNBO0lBQ0Q7QUFFRCxRQUFJekssWUFBWVksaUJBQWlCLE1BQU0sT0FBbkMsTUFBZ0QsUUFBUTtBQUMxRDhMLGVBQVN6SCxLQUFUO0FBQ0F5SCxlQUFTakMsa0JBQVQ7QUFDQTtJQUNEO0FBRURpQyxhQUFTNUgsS0FBVDtBQUNBNEgsYUFBU2pDLGtCQUFUO0VBQ0QsQ0ExQkQ7QUE0QkF4UCxlQUFha0MsR0FBR3BJLFFBQVFzVCx1QkFBcUIsTUFBTTtBQUNqRCxVQUFNdUUsWUFBWXZJLGVBQWV2SSxLQUFLb04sa0JBQXBCO0FBRWxCLGVBQVd3RCxZQUFZRSxXQUFXO0FBQ2hDbEQsZUFBUzdHLG9CQUFvQjZKLFFBQTdCO0lBQ0Q7RUFDRixDQU5EO0FBWUExVSxxQkFBbUIwUixRQUFEO0FDbGNsQixNQUFNdFIsU0FBTztBQUNiLE1BQU1pSyxhQUFXO0FBQ2pCLE1BQU1FLGNBQWEsSUFBR0Y7QUFDdEIsTUFBTXlCLGlCQUFlO0FBRXJCLE1BQU0rSSxlQUFjLE9BQU10SztBQUMxQixNQUFNdUssZ0JBQWUsUUFBT3ZLO0FBQzVCLE1BQU13SyxlQUFjLE9BQU14SztBQUMxQixNQUFNeUssaUJBQWdCLFNBQVF6SztBQUM5QixNQUFNMEIseUJBQXdCLFFBQU8xQixjQUFZdUI7QUFFakQsTUFBTVAsb0JBQWtCO0FBQ3hCLE1BQU0wSixzQkFBc0I7QUFDNUIsTUFBTUMsd0JBQXdCO0FBQzlCLE1BQU1DLHVCQUF1QjtBQUM3QixNQUFNQyw2QkFBOEIsV0FBVUgsd0JBQXdCQTtBQUN0RSxNQUFNSSx3QkFBd0I7QUFFOUIsTUFBTUMsUUFBUTtBQUNkLE1BQU1DLFNBQVM7QUFFZixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTXhKLHlCQUF1QjtBQUU3QixNQUFNbEQsWUFBVTtJQUNkMk0sUUFBUTtJQUNSdEosUUFBUTtFQUZNO0FBS2hCLE1BQU1wRCxnQkFBYztJQUNsQjBNLFFBQVE7SUFDUnRKLFFBQVE7RUFGVTtBQVNwQixNQUFNdUosV0FBTixjQUF1QnpMLGNBQWM7SUFDbkNWLFlBQVl0TixTQUFTaU4sUUFBUTtBQUMzQixZQUFNak4sU0FBU2lOLE1BQWY7QUFFQSxXQUFLeU0sbUJBQW1CO0FBQ3hCLFdBQUtDLGdCQUFnQixDQUFBO0FBRXJCLFlBQU1DLGFBQWF4SixlQUFldkksS0FBS2tJLHNCQUFwQjtBQUVuQixpQkFBVzhKLFFBQVFELFlBQVk7QUFDN0IsY0FBTTNaLFdBQVdPLHVCQUF1QnFaLElBQUQ7QUFDdkMsY0FBTUMsZ0JBQWdCMUosZUFBZXZJLEtBQUs1SCxRQUFwQixFQUNuQnVNLE9BQU91TixrQkFBZ0JBLGlCQUFpQixLQUFLOUwsUUFEMUI7QUFHdEIsWUFBSWhPLGFBQWEsUUFBUTZaLGNBQWNuWSxRQUFRO0FBQzdDLGVBQUtnWSxjQUFjL1YsS0FBS2lXLElBQXhCO1FBQ0Q7TUFDRjtBQUVELFdBQUtHLG9CQUFMO0FBRUEsVUFBSSxDQUFDLEtBQUs5TCxRQUFRc0wsUUFBUTtBQUN4QixhQUFLUywwQkFBMEIsS0FBS04sZUFBZSxLQUFLTyxTQUFMLENBQW5EO01BQ0Q7QUFFRCxVQUFJLEtBQUtoTSxRQUFRZ0MsUUFBUTtBQUN2QixhQUFLQSxPQUFMO01BQ0Q7SUFDRjtJQUdpQixXQUFQckQsVUFBVTtBQUNuQixhQUFPQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBT0E7SUFDUjtJQUVjLFdBQUozSSxPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRCtMLFNBQVM7QUFDUCxVQUFJLEtBQUtnSyxTQUFMLEdBQWlCO0FBQ25CLGFBQUtDLEtBQUw7TUFDRCxPQUFNO0FBQ0wsYUFBS0MsS0FBTDtNQUNEO0lBQ0Y7SUFFREEsT0FBTztBQUNMLFVBQUksS0FBS1Ysb0JBQW9CLEtBQUtRLFNBQUwsR0FBaUI7QUFDNUM7TUFDRDtBQUVELFVBQUlHLGlCQUFpQixDQUFBO0FBR3JCLFVBQUksS0FBS25NLFFBQVFzTCxRQUFRO0FBQ3ZCYSx5QkFBaUIsS0FBS0MsdUJBQXVCZixnQkFBNUIsRUFDZC9NLE9BQU94TSxhQUFXQSxZQUFZLEtBQUtpTyxRQURyQixFQUVkbUQsSUFBSXBSLGFBQVd5WixTQUFTN0ssb0JBQW9CNU8sU0FBUztVQUFFa1EsUUFBUTtRQUFWLENBQXRDLENBRkQ7TUFHbEI7QUFFRCxVQUFJbUssZUFBZTFZLFVBQVUwWSxlQUFlLEdBQUdYLGtCQUFrQjtBQUMvRDtNQUNEO0FBRUQsWUFBTWEsYUFBYXZULGFBQWF5QyxRQUFRLEtBQUt3RSxVQUFVMkssWUFBcEM7QUFDbkIsVUFBSTJCLFdBQVd6USxrQkFBa0I7QUFDL0I7TUFDRDtBQUVELGlCQUFXMFEsa0JBQWtCSCxnQkFBZ0I7QUFDM0NHLHVCQUFlTCxLQUFmO01BQ0Q7QUFFRCxZQUFNTSxZQUFZLEtBQUtDLGNBQUw7QUFFbEIsV0FBS3pNLFNBQVMxTCxVQUFVZ0osT0FBT3lOLG1CQUEvQjtBQUNBLFdBQUsvSyxTQUFTMUwsVUFBVTRRLElBQUk4RixxQkFBNUI7QUFFQSxXQUFLaEwsU0FBUzBNLE1BQU1GLGFBQWE7QUFFakMsV0FBS1IsMEJBQTBCLEtBQUtOLGVBQWUsSUFBbkQ7QUFDQSxXQUFLRCxtQkFBbUI7QUFFeEIsWUFBTWtCLFdBQVcsTUFBTTtBQUNyQixhQUFLbEIsbUJBQW1CO0FBRXhCLGFBQUt6TCxTQUFTMUwsVUFBVWdKLE9BQU8wTixxQkFBL0I7QUFDQSxhQUFLaEwsU0FBUzFMLFVBQVU0USxJQUFJNkYscUJBQXFCMUosaUJBQWpEO0FBRUEsYUFBS3JCLFNBQVMwTSxNQUFNRixhQUFhO0FBRWpDelQscUJBQWF5QyxRQUFRLEtBQUt3RSxVQUFVNEssYUFBcEM7O0FBR0YsWUFBTWdDLHVCQUF1QkosVUFBVSxHQUFHM00sWUFBYixJQUE2QjJNLFVBQVVsUixNQUFNLENBQWhCO0FBQzFELFlBQU11UixhQUFjLFNBQVFEO0FBRTVCLFdBQUtwTSxlQUFlbU0sVUFBVSxLQUFLM00sVUFBVSxJQUE3QztBQUNBLFdBQUtBLFNBQVMwTSxNQUFNRixhQUFjLEdBQUUsS0FBS3hNLFNBQVM2TTtJQUNuRDtJQUVEWCxPQUFPO0FBQ0wsVUFBSSxLQUFLVCxvQkFBb0IsQ0FBQyxLQUFLUSxTQUFMLEdBQWlCO0FBQzdDO01BQ0Q7QUFFRCxZQUFNSyxhQUFhdlQsYUFBYXlDLFFBQVEsS0FBS3dFLFVBQVU2SyxZQUFwQztBQUNuQixVQUFJeUIsV0FBV3pRLGtCQUFrQjtBQUMvQjtNQUNEO0FBRUQsWUFBTTJRLFlBQVksS0FBS0MsY0FBTDtBQUVsQixXQUFLek0sU0FBUzBNLE1BQU1GLGFBQWMsR0FBRSxLQUFLeE0sU0FBUzhNLHNCQUFkLEVBQXNDTjtBQUUxRXZYLGFBQU8sS0FBSytLLFFBQU47QUFFTixXQUFLQSxTQUFTMUwsVUFBVTRRLElBQUk4RixxQkFBNUI7QUFDQSxXQUFLaEwsU0FBUzFMLFVBQVVnSixPQUFPeU4scUJBQXFCMUosaUJBQXBEO0FBRUEsaUJBQVc3RixXQUFXLEtBQUtrUSxlQUFlO0FBQ3hDLGNBQU0zWixVQUFVVSx1QkFBdUIrSSxPQUFEO0FBRXRDLFlBQUl6SixXQUFXLENBQUMsS0FBS2thLFNBQVNsYSxPQUFkLEdBQXdCO0FBQ3RDLGVBQUtpYSwwQkFBMEIsQ0FBQ3hRLE9BQUQsR0FBVyxLQUExQztRQUNEO01BQ0Y7QUFFRCxXQUFLaVEsbUJBQW1CO0FBRXhCLFlBQU1rQixXQUFXLE1BQU07QUFDckIsYUFBS2xCLG1CQUFtQjtBQUN4QixhQUFLekwsU0FBUzFMLFVBQVVnSixPQUFPME4scUJBQS9CO0FBQ0EsYUFBS2hMLFNBQVMxTCxVQUFVNFEsSUFBSTZGLG1CQUE1QjtBQUNBaFMscUJBQWF5QyxRQUFRLEtBQUt3RSxVQUFVOEssY0FBcEM7O0FBR0YsV0FBSzlLLFNBQVMwTSxNQUFNRixhQUFhO0FBRWpDLFdBQUtoTSxlQUFlbU0sVUFBVSxLQUFLM00sVUFBVSxJQUE3QztJQUNEO0lBRURpTSxTQUFTbGEsVUFBVSxLQUFLaU8sVUFBVTtBQUNoQyxhQUFPak8sUUFBUXVDLFVBQVVDLFNBQVM4TSxpQkFBM0I7SUFDUjtJQUdEbkMsa0JBQWtCRixRQUFRO0FBQ3hCQSxhQUFPaUQsU0FBU3RILFFBQVFxRSxPQUFPaUQsTUFBUjtBQUN2QmpELGFBQU91TSxTQUFTOVgsV0FBV3VMLE9BQU91TSxNQUFSO0FBQzFCLGFBQU92TTtJQUNSO0lBRUR5TixnQkFBZ0I7QUFDZCxhQUFPLEtBQUt6TSxTQUFTMUwsVUFBVUMsU0FBUzRXLHFCQUFqQyxJQUEwREMsUUFBUUM7SUFDMUU7SUFFRFUsc0JBQXNCO0FBQ3BCLFVBQUksQ0FBQyxLQUFLOUwsUUFBUXNMLFFBQVE7QUFDeEI7TUFDRDtBQUVELFlBQU1oSixXQUFXLEtBQUs4Six1QkFBdUJ2SyxzQkFBNUI7QUFFakIsaUJBQVcvUCxXQUFXd1EsVUFBVTtBQUM5QixjQUFNd0ssV0FBV3RhLHVCQUF1QlYsT0FBRDtBQUV2QyxZQUFJZ2IsVUFBVTtBQUNaLGVBQUtmLDBCQUEwQixDQUFDamEsT0FBRCxHQUFXLEtBQUtrYSxTQUFTYyxRQUFkLENBQTFDO1FBQ0Q7TUFDRjtJQUNGO0lBRURWLHVCQUF1QnJhLFVBQVU7QUFDL0IsWUFBTXVRLFdBQVdKLGVBQWV2SSxLQUFLc1IsNEJBQTRCLEtBQUtqTCxRQUFRc0wsTUFBN0Q7QUFFakIsYUFBT3BKLGVBQWV2SSxLQUFLNUgsVUFBVSxLQUFLaU8sUUFBUXNMLE1BQTNDLEVBQW1EaE4sT0FBT3hNLGFBQVcsQ0FBQ3dRLFNBQVNwUSxTQUFTSixPQUFsQixDQUF0RTtJQUNSO0lBRURpYSwwQkFBMEJnQixjQUFjQyxRQUFRO0FBQzlDLFVBQUksQ0FBQ0QsYUFBYXRaLFFBQVE7QUFDeEI7TUFDRDtBQUVELGlCQUFXM0IsV0FBV2liLGNBQWM7QUFDbENqYixnQkFBUXVDLFVBQVUyTixPQUFPZ0osc0JBQXNCLENBQUNnQyxNQUFoRDtBQUNBbGIsZ0JBQVFpTSxhQUFhLGlCQUFpQmlQLE1BQXRDO01BQ0Q7SUFDRjtJQUdxQixPQUFmNVcsZ0JBQWdCMkksUUFBUTtBQUM3QixZQUFNaUIsVUFBVSxDQUFBO0FBQ2hCLFVBQUksT0FBT2pCLFdBQVcsWUFBWSxZQUFZVyxLQUFLWCxNQUFqQixHQUEwQjtBQUMxRGlCLGdCQUFRZ0MsU0FBUztNQUNsQjtBQUVELGFBQU8sS0FBS1AsS0FBSyxXQUFZO0FBQzNCLGNBQU1DLE9BQU82SixTQUFTN0ssb0JBQW9CLE1BQU1WLE9BQW5DO0FBRWIsWUFBSSxPQUFPakIsV0FBVyxVQUFVO0FBQzlCLGNBQUksT0FBTzJDLEtBQUszQyxZQUFZLGFBQWE7QUFDdkMsa0JBQU0sSUFBSVksVUFBVyxvQkFBbUJaLFNBQWxDO1VBQ1A7QUFFRDJDLGVBQUszQyxRQUFMO1FBQ0Q7TUFDRixDQVZNO0lBV1I7RUF0TmtDO0FBNk5yQ2pHLGVBQWFrQyxHQUFHckosVUFBVW1RLHdCQUFzQkQsd0JBQXNCLFNBQVVuSixPQUFPO0FBRXJGLFFBQUlBLE1BQU0zQixPQUFPaUssWUFBWSxPQUFRdEksTUFBTUUsa0JBQWtCRixNQUFNRSxlQUFlb0ksWUFBWSxLQUFNO0FBQ2xHdEksWUFBTXdELGVBQU47SUFDRDtBQUVELFVBQU1uSyxXQUFXTyx1QkFBdUIsSUFBRDtBQUN2QyxVQUFNMmEsbUJBQW1CL0ssZUFBZXZJLEtBQUs1SCxRQUFwQjtBQUV6QixlQUFXRCxXQUFXbWIsa0JBQWtCO0FBQ3RDMUIsZUFBUzdLLG9CQUFvQjVPLFNBQVM7UUFBRWtRLFFBQVE7TUFBVixDQUF0QyxFQUF5REEsT0FBekQ7SUFDRDtFQUNGLENBWkQ7QUFrQkFuTSxxQkFBbUIwVixRQUFEO0FDaFJsQixNQUFNdFYsU0FBTztBQUNiLE1BQU1pSyxhQUFXO0FBQ2pCLE1BQU1FLGNBQWEsSUFBR0Y7QUFDdEIsTUFBTXlCLGlCQUFlO0FBRXJCLE1BQU11TCxlQUFhO0FBQ25CLE1BQU1DLFlBQVU7QUFDaEIsTUFBTUMsaUJBQWU7QUFDckIsTUFBTUMsbUJBQWlCO0FBQ3ZCLE1BQU1DLHFCQUFxQjtBQUUzQixNQUFNMUMsZUFBYyxPQUFNeEs7QUFDMUIsTUFBTXlLLGlCQUFnQixTQUFReks7QUFDOUIsTUFBTXNLLGVBQWMsT0FBTXRLO0FBQzFCLE1BQU11SyxnQkFBZSxRQUFPdks7QUFDNUIsTUFBTTBCLHlCQUF3QixRQUFPMUIsY0FBWXVCO0FBQ2pELE1BQU00TCx5QkFBMEIsVUFBU25OLGNBQVl1QjtBQUNyRCxNQUFNNkwsdUJBQXdCLFFBQU9wTixjQUFZdUI7QUFFakQsTUFBTVAsb0JBQWtCO0FBQ3hCLE1BQU1xTSxvQkFBb0I7QUFDMUIsTUFBTUMscUJBQXFCO0FBQzNCLE1BQU1DLHVCQUF1QjtBQUM3QixNQUFNQywyQkFBMkI7QUFDakMsTUFBTUMsNkJBQTZCO0FBRW5DLE1BQU1oTSx5QkFBdUI7QUFDN0IsTUFBTWlNLDZCQUE4QixHQUFFak0sMEJBQXdCVDtBQUM5RCxNQUFNMk0sZ0JBQWdCO0FBQ3RCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMseUJBQXlCO0FBRS9CLE1BQU1DLGdCQUFnQnhZLE1BQUssSUFBSyxZQUFZO0FBQzVDLE1BQU15WSxtQkFBbUJ6WSxNQUFLLElBQUssY0FBYztBQUNqRCxNQUFNMFksbUJBQW1CMVksTUFBSyxJQUFLLGVBQWU7QUFDbEQsTUFBTTJZLHNCQUFzQjNZLE1BQUssSUFBSyxpQkFBaUI7QUFDdkQsTUFBTTRZLGtCQUFrQjVZLE1BQUssSUFBSyxlQUFlO0FBQ2pELE1BQU02WSxpQkFBaUI3WSxNQUFLLElBQUssZ0JBQWdCO0FBQ2pELE1BQU04WSxzQkFBc0I7QUFDNUIsTUFBTUMseUJBQXlCO0FBRS9CLE1BQU0vUCxZQUFVO0lBQ2RnUSxXQUFXO0lBQ1hDLFVBQVU7SUFDVkMsU0FBUztJQUNUQyxRQUFRLENBQUMsR0FBRyxDQUFKO0lBQ1JDLGNBQWM7SUFDZEMsV0FBVztFQU5HO0FBU2hCLE1BQU1wUSxnQkFBYztJQUNsQitQLFdBQVc7SUFDWEMsVUFBVTtJQUNWQyxTQUFTO0lBQ1RDLFFBQVE7SUFDUkMsY0FBYztJQUNkQyxXQUFXO0VBTk87QUFhcEIsTUFBTUMsV0FBTixjQUF1Qm5QLGNBQWM7SUFDbkNWLFlBQVl0TixTQUFTaU4sUUFBUTtBQUMzQixZQUFNak4sU0FBU2lOLE1BQWY7QUFFQSxXQUFLbVEsVUFBVTtBQUNmLFdBQUtDLFVBQVUsS0FBS3BQLFNBQVM5TDtBQUU3QixXQUFLbWIsUUFBUWxOLGVBQWVZLEtBQUssS0FBSy9DLFVBQVVnTyxhQUFuQyxFQUFrRCxNQUM3RDdMLGVBQWVTLEtBQUssS0FBSzVDLFVBQVVnTyxhQUFuQyxFQUFrRCxNQUNsRDdMLGVBQWVHLFFBQVEwTCxlQUFlLEtBQUtvQixPQUEzQztBQUNGLFdBQUtFLFlBQVksS0FBS0MsY0FBTDtJQUNsQjtJQUdpQixXQUFQM1EsVUFBVTtBQUNuQixhQUFPQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBT0E7SUFDUjtJQUVjLFdBQUozSSxPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRCtMLFNBQVM7QUFDUCxhQUFPLEtBQUtnSyxTQUFMLElBQWtCLEtBQUtDLEtBQUwsSUFBYyxLQUFLQyxLQUFMO0lBQ3hDO0lBRURBLE9BQU87QUFDTCxVQUFJaFksV0FBVyxLQUFLNkwsUUFBTixLQUFtQixLQUFLaU0sU0FBTCxHQUFpQjtBQUNoRDtNQUNEO0FBRUQsWUFBTTNSLGdCQUFnQjtRQUNwQkEsZUFBZSxLQUFLMEY7O0FBR3RCLFlBQU13UCxZQUFZelcsYUFBYXlDLFFBQVEsS0FBS3dFLFVBQVUySyxjQUFZclEsYUFBaEQ7QUFFbEIsVUFBSWtWLFVBQVUzVCxrQkFBa0I7QUFDOUI7TUFDRDtBQUVELFdBQUs0VCxjQUFMO0FBTUEsVUFBSSxrQkFBa0I3ZCxTQUFTK0MsbUJBQW1CLENBQUMsS0FBS3lhLFFBQVFwYixRQUFRa2EsbUJBQXJCLEdBQTJDO0FBQzVGLG1CQUFXbmMsV0FBVyxDQUFBLEVBQUdxUSxPQUFPLEdBQUd4USxTQUFTeUQsS0FBS2tOLFFBQTNCLEdBQXNDO0FBQzFEeEosdUJBQWFrQyxHQUFHbEosU0FBUyxhQUFhaUQsSUFBdEM7UUFDRDtNQUNGO0FBRUQsV0FBS2dMLFNBQVMwUCxNQUFkO0FBQ0EsV0FBSzFQLFNBQVNoQyxhQUFhLGlCQUFpQixJQUE1QztBQUVBLFdBQUtxUixNQUFNL2EsVUFBVTRRLElBQUk3RCxpQkFBekI7QUFDQSxXQUFLckIsU0FBUzFMLFVBQVU0USxJQUFJN0QsaUJBQTVCO0FBQ0F0SSxtQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVU0SyxlQUFhdFEsYUFBakQ7SUFDRDtJQUVENFIsT0FBTztBQUNMLFVBQUkvWCxXQUFXLEtBQUs2TCxRQUFOLEtBQW1CLENBQUMsS0FBS2lNLFNBQUwsR0FBaUI7QUFDakQ7TUFDRDtBQUVELFlBQU0zUixnQkFBZ0I7UUFDcEJBLGVBQWUsS0FBSzBGOztBQUd0QixXQUFLMlAsY0FBY3JWLGFBQW5CO0lBQ0Q7SUFFRDhGLFVBQVU7QUFDUixVQUFJLEtBQUsrTyxTQUFTO0FBQ2hCLGFBQUtBLFFBQVFTLFFBQWI7TUFDRDtBQUVELFlBQU14UCxRQUFOO0lBQ0Q7SUFFRHlQLFNBQVM7QUFDUCxXQUFLUCxZQUFZLEtBQUtDLGNBQUw7QUFDakIsVUFBSSxLQUFLSixTQUFTO0FBQ2hCLGFBQUtBLFFBQVFVLE9BQWI7TUFDRDtJQUNGO0lBR0RGLGNBQWNyVixlQUFlO0FBQzNCLFlBQU13VixZQUFZL1csYUFBYXlDLFFBQVEsS0FBS3dFLFVBQVU2SyxjQUFZdlEsYUFBaEQ7QUFDbEIsVUFBSXdWLFVBQVVqVSxrQkFBa0I7QUFDOUI7TUFDRDtBQUlELFVBQUksa0JBQWtCakssU0FBUytDLGlCQUFpQjtBQUM5QyxtQkFBVzVDLFdBQVcsQ0FBQSxFQUFHcVEsT0FBTyxHQUFHeFEsU0FBU3lELEtBQUtrTixRQUEzQixHQUFzQztBQUMxRHhKLHVCQUFhQyxJQUFJakgsU0FBUyxhQUFhaUQsSUFBdkM7UUFDRDtNQUNGO0FBRUQsVUFBSSxLQUFLbWEsU0FBUztBQUNoQixhQUFLQSxRQUFRUyxRQUFiO01BQ0Q7QUFFRCxXQUFLUCxNQUFNL2EsVUFBVWdKLE9BQU8rRCxpQkFBNUI7QUFDQSxXQUFLckIsU0FBUzFMLFVBQVVnSixPQUFPK0QsaUJBQS9CO0FBQ0EsV0FBS3JCLFNBQVNoQyxhQUFhLGlCQUFpQixPQUE1QztBQUNBRixrQkFBWUcsb0JBQW9CLEtBQUtvUixPQUFPLFFBQTVDO0FBQ0F0VyxtQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVU4SyxnQkFBY3hRLGFBQWxEO0lBQ0Q7SUFFRHlFLFdBQVdDLFFBQVE7QUFDakJBLGVBQVMsTUFBTUQsV0FBV0MsTUFBakI7QUFFVCxVQUFJLE9BQU9BLE9BQU9pUSxjQUFjLFlBQVksQ0FBQzNiLFdBQVUwTCxPQUFPaVEsU0FBUixLQUNwRCxPQUFPalEsT0FBT2lRLFVBQVVuQywwQkFBMEIsWUFDbEQ7QUFFQSxjQUFNLElBQUlsTixVQUFXLEdBQUUxSixPQUFLMkosWUFBTCxpR0FBakI7TUFDUDtBQUVELGFBQU9iO0lBQ1I7SUFFRHlRLGdCQUFnQjtBQUNkLFVBQUksT0FBT00sZ0JBQVcsYUFBYTtBQUNqQyxjQUFNLElBQUluUSxVQUFVLDhEQUFkO01BQ1A7QUFFRCxVQUFJb1EsbUJBQW1CLEtBQUtoUTtBQUU1QixVQUFJLEtBQUtDLFFBQVFnUCxjQUFjLFVBQVU7QUFDdkNlLDJCQUFtQixLQUFLWjtpQkFDZjliLFdBQVUsS0FBSzJNLFFBQVFnUCxTQUFkLEdBQTBCO0FBQzVDZSwyQkFBbUJ2YyxXQUFXLEtBQUt3TSxRQUFRZ1AsU0FBZDtpQkFDcEIsT0FBTyxLQUFLaFAsUUFBUWdQLGNBQWMsVUFBVTtBQUNyRGUsMkJBQW1CLEtBQUsvUCxRQUFRZ1A7TUFDakM7QUFFRCxZQUFNRCxlQUFlLEtBQUtpQixpQkFBTDtBQUNyQixXQUFLZCxVQUFpQmUsY0FBYUYsa0JBQWtCLEtBQUtYLE9BQU9MLFlBQWxEO0lBQ2hCO0lBRUQvQyxXQUFXO0FBQ1QsYUFBTyxLQUFLb0QsTUFBTS9hLFVBQVVDLFNBQVM4TSxpQkFBOUI7SUFDUjtJQUVEOE8sZ0JBQWdCO0FBQ2QsWUFBTUMsaUJBQWlCLEtBQUtoQjtBQUU1QixVQUFJZ0IsZUFBZTliLFVBQVVDLFNBQVNvWixrQkFBbEMsR0FBdUQ7QUFDekQsZUFBT2E7TUFDUjtBQUVELFVBQUk0QixlQUFlOWIsVUFBVUMsU0FBU3FaLG9CQUFsQyxHQUF5RDtBQUMzRCxlQUFPYTtNQUNSO0FBRUQsVUFBSTJCLGVBQWU5YixVQUFVQyxTQUFTc1osd0JBQWxDLEdBQTZEO0FBQy9ELGVBQU9hO01BQ1I7QUFFRCxVQUFJMEIsZUFBZTliLFVBQVVDLFNBQVN1WiwwQkFBbEMsR0FBK0Q7QUFDakUsZUFBT2E7TUFDUjtBQUdELFlBQU0wQixRQUFRdmQsaUJBQWlCLEtBQUt1YyxLQUFOLEVBQWF2YixpQkFBaUIsZUFBOUMsRUFBK0R4QixLQUEvRCxNQUEwRTtBQUV4RixVQUFJOGQsZUFBZTliLFVBQVVDLFNBQVNtWixpQkFBbEMsR0FBc0Q7QUFDeEQsZUFBTzJDLFFBQVFoQyxtQkFBbUJEO01BQ25DO0FBRUQsYUFBT2lDLFFBQVE5QixzQkFBc0JEO0lBQ3RDO0lBRURpQixnQkFBZ0I7QUFDZCxhQUFPLEtBQUt2UCxTQUFTaE0sUUFBUWlhLGVBQXRCLE1BQTJDO0lBQ25EO0lBRURxQyxhQUFhO0FBQ1gsWUFBTTtRQUFFdkIsUUFBQUE7TUFBRixJQUFhLEtBQUs5TztBQUV4QixVQUFJLE9BQU84TyxZQUFXLFVBQVU7QUFDOUIsZUFBT0EsUUFBTzFjLE1BQU0sR0FBYixFQUFrQjhRLElBQUk1RyxXQUFTdkosT0FBTzJXLFNBQVNwTixPQUFPLEVBQXZCLENBQS9CO01BQ1I7QUFFRCxVQUFJLE9BQU93UyxZQUFXLFlBQVk7QUFDaEMsZUFBT3dCLGdCQUFjeEIsUUFBT3dCLFlBQVksS0FBS3ZRLFFBQWxCO01BQzVCO0FBRUQsYUFBTytPO0lBQ1I7SUFFRGtCLG1CQUFtQjtBQUNqQixZQUFNTyx3QkFBd0I7UUFDNUJDLFdBQVcsS0FBS04sY0FBTDtRQUNYTyxXQUFXLENBQUM7VUFDVnphLE1BQU07VUFDTjBhLFNBQVM7WUFDUDlCLFVBQVUsS0FBSzVPLFFBQVE0TztVQURoQjtRQUZDLEdBTVo7VUFDRTVZLE1BQU07VUFDTjBhLFNBQVM7WUFDUDVCLFFBQVEsS0FBS3VCLFdBQUw7VUFERDtTQVJBO01BRmlCO0FBaUI5QixVQUFJLEtBQUtoQixhQUFhLEtBQUtyUCxRQUFRNk8sWUFBWSxVQUFVO0FBQ3ZEaFIsb0JBQVlDLGlCQUFpQixLQUFLc1IsT0FBTyxVQUFVLFFBQW5EO0FBQ0FtQiw4QkFBc0JFLFlBQVksQ0FBQztVQUNqQ3phLE1BQU07VUFDTjJhLFNBQVM7UUFGd0IsQ0FBRDtNQUluQztBQUVELGFBQU8sa0NBQ0ZKLHdCQUNDLE9BQU8sS0FBS3ZRLFFBQVErTyxpQkFBaUIsYUFBYSxLQUFLL08sUUFBUStPLGFBQWF3QixxQkFBMUIsSUFBbUQsS0FBS3ZRLFFBQVErTztJQUV6SDtJQUVENkIsZ0JBQWdCO01BQUV2VTtNQUFLdEY7SUFBUCxHQUFpQjtBQUMvQixZQUFNeVIsUUFBUXRHLGVBQWV2SSxLQUFLdVUsd0JBQXdCLEtBQUtrQixLQUFqRCxFQUF3RDlRLE9BQU94TSxhQUFXNEIsVUFBVTVCLE9BQUQsQ0FBbkY7QUFFZCxVQUFJLENBQUMwVyxNQUFNL1UsUUFBUTtBQUNqQjtNQUNEO0FBSUR5RCwyQkFBcUJzUixPQUFPelIsUUFBUXNGLFFBQVFnUixrQkFBZ0IsQ0FBQzdFLE1BQU10VyxTQUFTNkUsTUFBZixDQUF6QyxFQUFpRTBZLE1BQXJGO0lBQ0Q7SUFHcUIsT0FBZnJaLGdCQUFnQjJJLFFBQVE7QUFDN0IsYUFBTyxLQUFLMEMsS0FBSyxXQUFZO0FBQzNCLGNBQU1DLE9BQU91TixTQUFTdk8sb0JBQW9CLE1BQU0zQixNQUFuQztBQUViLFlBQUksT0FBT0EsV0FBVyxVQUFVO0FBQzlCO1FBQ0Q7QUFFRCxZQUFJLE9BQU8yQyxLQUFLM0MsWUFBWSxhQUFhO0FBQ3ZDLGdCQUFNLElBQUlZLFVBQVcsb0JBQW1CWixTQUFsQztRQUNQO0FBRUQyQyxhQUFLM0MsUUFBTDtNQUNELENBWk07SUFhUjtJQUVnQixPQUFWOFIsV0FBV25ZLE9BQU87QUFDdkIsVUFBSUEsTUFBTXVKLFdBQVdxTCxzQkFBdUI1VSxNQUFNTSxTQUFTLFdBQVdOLE1BQU0yRCxRQUFROFEsV0FBVTtBQUM1RjtNQUNEO0FBRUQsWUFBTTJELGNBQWM1TyxlQUFldkksS0FBS21VLDBCQUFwQjtBQUVwQixpQkFBVzlMLFVBQVU4TyxhQUFhO0FBQ2hDLGNBQU1DLFVBQVU5QixTQUFTeE8sWUFBWXVCLE1BQXJCO0FBQ2hCLFlBQUksQ0FBQytPLFdBQVdBLFFBQVEvUSxRQUFRMk8sY0FBYyxPQUFPO0FBQ25EO1FBQ0Q7QUFFRCxjQUFNcUMsZUFBZXRZLE1BQU1zWSxhQUFOO0FBQ3JCLGNBQU1DLGVBQWVELGFBQWE5ZSxTQUFTNmUsUUFBUTNCLEtBQTlCO0FBQ3JCLFlBQ0U0QixhQUFhOWUsU0FBUzZlLFFBQVFoUixRQUE5QixLQUNDZ1IsUUFBUS9RLFFBQVEyTyxjQUFjLFlBQVksQ0FBQ3NDLGdCQUMzQ0YsUUFBUS9RLFFBQVEyTyxjQUFjLGFBQWFzQyxjQUM1QztBQUNBO1FBQ0Q7QUFHRCxZQUFJRixRQUFRM0IsTUFBTTlhLFNBQVNvRSxNQUFNM0IsTUFBN0IsTUFBMEMyQixNQUFNTSxTQUFTLFdBQVdOLE1BQU0yRCxRQUFROFEsYUFBWSxxQ0FBcUN6TixLQUFLaEgsTUFBTTNCLE9BQU9pSyxPQUF2RCxJQUFrRTtBQUNsSztRQUNEO0FBRUQsY0FBTTNHLGdCQUFnQjtVQUFFQSxlQUFlMFcsUUFBUWhSOztBQUUvQyxZQUFJckgsTUFBTU0sU0FBUyxTQUFTO0FBQzFCcUIsd0JBQWMwRyxhQUFhckk7UUFDNUI7QUFFRHFZLGdCQUFRckIsY0FBY3JWLGFBQXRCO01BQ0Q7SUFDRjtJQUUyQixPQUFyQjZXLHNCQUFzQnhZLE9BQU87QUFJbEMsWUFBTXlZLFVBQVUsa0JBQWtCelIsS0FBS2hILE1BQU0zQixPQUFPaUssT0FBcEM7QUFDaEIsWUFBTW9RLGdCQUFnQjFZLE1BQU0yRCxRQUFRNlE7QUFDcEMsWUFBTW1FLGtCQUFrQixDQUFDakUsZ0JBQWNDLGdCQUFmLEVBQStCbmIsU0FBU3dHLE1BQU0yRCxHQUE5QztBQUV4QixVQUFJLENBQUNnVixtQkFBbUIsQ0FBQ0QsZUFBZTtBQUN0QztNQUNEO0FBRUQsVUFBSUQsV0FBVyxDQUFDQyxlQUFlO0FBQzdCO01BQ0Q7QUFFRDFZLFlBQU13RCxlQUFOO0FBR0EsWUFBTW9WLGtCQUFrQixLQUFLOU8sUUFBUVgsc0JBQWIsSUFDdEIsT0FDQ0ssZUFBZVMsS0FBSyxNQUFNZCxzQkFBMUIsRUFBZ0QsTUFDL0NLLGVBQWVZLEtBQUssTUFBTWpCLHNCQUExQixFQUFnRCxNQUNoREssZUFBZUcsUUFBUVIsd0JBQXNCbkosTUFBTUUsZUFBZTNFLFVBQWxFO0FBRUosWUFBTTZJLFdBQVdtUyxTQUFTdk8sb0JBQW9CNFEsZUFBN0I7QUFFakIsVUFBSUQsaUJBQWlCO0FBQ25CM1ksY0FBTTZZLGdCQUFOO0FBQ0F6VSxpQkFBU29QLEtBQVQ7QUFDQXBQLGlCQUFTOFQsZ0JBQWdCbFksS0FBekI7QUFDQTtNQUNEO0FBRUQsVUFBSW9FLFNBQVNrUCxTQUFULEdBQXFCO0FBQ3ZCdFQsY0FBTTZZLGdCQUFOO0FBQ0F6VSxpQkFBU21QLEtBQVQ7QUFDQXFGLHdCQUFnQjdCLE1BQWhCO01BQ0Q7SUFDRjtFQXBWa0M7QUEyVnJDM1csZUFBYWtDLEdBQUdySixVQUFVNGIsd0JBQXdCMUwsd0JBQXNCb04sU0FBU2lDLHFCQUFqRjtBQUNBcFksZUFBYWtDLEdBQUdySixVQUFVNGIsd0JBQXdCUSxlQUFla0IsU0FBU2lDLHFCQUExRTtBQUNBcFksZUFBYWtDLEdBQUdySixVQUFVbVEsd0JBQXNCbU4sU0FBUzRCLFVBQXpEO0FBQ0EvWCxlQUFha0MsR0FBR3JKLFVBQVU2YixzQkFBc0J5QixTQUFTNEIsVUFBekQ7QUFDQS9YLGVBQWFrQyxHQUFHckosVUFBVW1RLHdCQUFzQkQsd0JBQXNCLFNBQVVuSixPQUFPO0FBQ3JGQSxVQUFNd0QsZUFBTjtBQUNBK1MsYUFBU3ZPLG9CQUFvQixJQUE3QixFQUFtQ3NCLE9BQW5DO0VBQ0QsQ0FIRDtBQVNBbk0scUJBQW1Cb1osUUFBRDtBQ3BibEIsTUFBTXVDLHlCQUF5QjtBQUMvQixNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMsbUJBQW1CO0FBQ3pCLE1BQU1DLGtCQUFrQjtBQU14QixNQUFNQyxrQkFBTixNQUFzQjtJQUNwQnhTLGNBQWM7QUFDWixXQUFLVyxXQUFXcE8sU0FBU3lEO0lBQzFCO0lBR0R5YyxXQUFXO0FBRVQsWUFBTUMsZ0JBQWdCbmdCLFNBQVMrQyxnQkFBZ0JxZDtBQUMvQyxhQUFPdmdCLEtBQUt1VCxJQUFJblMsT0FBT29mLGFBQWFGLGFBQTdCO0lBQ1I7SUFFRDdGLE9BQU87QUFDTCxZQUFNZ0csUUFBUSxLQUFLSixTQUFMO0FBQ2QsV0FBS0ssaUJBQUw7QUFFQSxXQUFLQyxzQkFBc0IsS0FBS3BTLFVBQVUyUixrQkFBa0JVLHFCQUFtQkEsa0JBQWtCSCxLQUFqRztBQUVBLFdBQUtFLHNCQUFzQlgsd0JBQXdCRSxrQkFBa0JVLHFCQUFtQkEsa0JBQWtCSCxLQUExRztBQUNBLFdBQUtFLHNCQUFzQlYseUJBQXlCRSxpQkFBaUJTLHFCQUFtQkEsa0JBQWtCSCxLQUExRztJQUNEO0lBRURJLFFBQVE7QUFDTixXQUFLQyx3QkFBd0IsS0FBS3ZTLFVBQVUsVUFBNUM7QUFDQSxXQUFLdVMsd0JBQXdCLEtBQUt2UyxVQUFVMlIsZ0JBQTVDO0FBQ0EsV0FBS1ksd0JBQXdCZCx3QkFBd0JFLGdCQUFyRDtBQUNBLFdBQUtZLHdCQUF3QmIseUJBQXlCRSxlQUF0RDtJQUNEO0lBRURZLGdCQUFnQjtBQUNkLGFBQU8sS0FBS1YsU0FBTCxJQUFrQjtJQUMxQjtJQUdESyxtQkFBbUI7QUFDakIsV0FBS00sc0JBQXNCLEtBQUt6UyxVQUFVLFVBQTFDO0FBQ0EsV0FBS0EsU0FBUzBNLE1BQU1nRyxXQUFXO0lBQ2hDO0lBRUROLHNCQUFzQnBnQixVQUFVMmdCLGVBQWVuZCxVQUFVO0FBQ3ZELFlBQU1vZCxpQkFBaUIsS0FBS2QsU0FBTDtBQUN2QixZQUFNZSx1QkFBdUI5Z0IsYUFBVztBQUN0QyxZQUFJQSxZQUFZLEtBQUtpTyxZQUFZbk4sT0FBT29mLGFBQWFsZ0IsUUFBUWlnQixjQUFjWSxnQkFBZ0I7QUFDekY7UUFDRDtBQUVELGFBQUtILHNCQUFzQjFnQixTQUFTNGdCLGFBQXBDO0FBQ0EsY0FBTU4sa0JBQWtCeGYsT0FBT0MsaUJBQWlCZixPQUF4QixFQUFpQytCLGlCQUFpQjZlLGFBQWxEO0FBQ3hCNWdCLGdCQUFRMmEsTUFBTW9HLFlBQVlILGVBQWdCLEdBQUVuZCxTQUFTeEMsT0FBT0MsV0FBV29mLGVBQWxCLENBQUQsS0FBcEQ7O0FBR0YsV0FBS1UsMkJBQTJCL2dCLFVBQVU2Z0Isb0JBQTFDO0lBQ0Q7SUFFREosc0JBQXNCMWdCLFNBQVM0Z0IsZUFBZTtBQUM1QyxZQUFNSyxjQUFjamhCLFFBQVEyYSxNQUFNNVksaUJBQWlCNmUsYUFBL0I7QUFDcEIsVUFBSUssYUFBYTtBQUNmbFYsb0JBQVlDLGlCQUFpQmhNLFNBQVM0Z0IsZUFBZUssV0FBckQ7TUFDRDtJQUNGO0lBRURULHdCQUF3QnZnQixVQUFVMmdCLGVBQWU7QUFDL0MsWUFBTUUsdUJBQXVCOWdCLGFBQVc7QUFDdEMsY0FBTXdLLFFBQVF1QixZQUFZWSxpQkFBaUIzTSxTQUFTNGdCLGFBQXRDO0FBRWQsWUFBSXBXLFVBQVUsTUFBTTtBQUNsQnhLLGtCQUFRMmEsTUFBTXVHLGVBQWVOLGFBQTdCO0FBQ0E7UUFDRDtBQUVEN1Usb0JBQVlHLG9CQUFvQmxNLFNBQVM0Z0IsYUFBekM7QUFDQTVnQixnQkFBUTJhLE1BQU1vRyxZQUFZSCxlQUFlcFcsS0FBekM7O0FBR0YsV0FBS3dXLDJCQUEyQi9nQixVQUFVNmdCLG9CQUExQztJQUNEO0lBRURFLDJCQUEyQi9nQixVQUFVa2hCLFVBQVU7QUFDN0MsVUFBSTVmLFdBQVV0QixRQUFELEdBQVk7QUFDdkJraEIsaUJBQVNsaEIsUUFBRDtBQUNSO01BQ0Q7QUFFRCxpQkFBV21oQixPQUFPaFIsZUFBZXZJLEtBQUs1SCxVQUFVLEtBQUtnTyxRQUFuQyxHQUE4QztBQUM5RGtULGlCQUFTQyxHQUFEO01BQ1Q7SUFDRjtFQXRGbUI7QUNUdEIsTUFBTWpkLFNBQU87QUFDYixNQUFNa0wsb0JBQWtCO0FBQ3hCLE1BQU1DLG9CQUFrQjtBQUN4QixNQUFNK1Isa0JBQW1CLGdCQUFlbGQ7QUFFeEMsTUFBTTBJLFlBQVU7SUFDZHlVLFdBQVc7SUFDWEMsZUFBZTtJQUNmN1MsWUFBWTtJQUNaOU0sV0FBVztJQUNYNGYsYUFBYTtFQUxDO0FBUWhCLE1BQU0xVSxnQkFBYztJQUNsQndVLFdBQVc7SUFDWEMsZUFBZTtJQUNmN1MsWUFBWTtJQUNaOU0sV0FBVztJQUNYNGYsYUFBYTtFQUxLO0FBWXBCLE1BQU1DLFdBQU4sY0FBdUI3VSxPQUFPO0lBQzVCVSxZQUFZTCxRQUFRO0FBQ2xCLFlBQUE7QUFDQSxXQUFLaUIsVUFBVSxLQUFLbEIsV0FBV0MsTUFBaEI7QUFDZixXQUFLeVUsY0FBYztBQUNuQixXQUFLelQsV0FBVztJQUNqQjtJQUdpQixXQUFQcEIsVUFBVTtBQUNuQixhQUFPQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBT0E7SUFDUjtJQUVjLFdBQUozSSxPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRGlXLEtBQUszVyxVQUFVO0FBQ2IsVUFBSSxDQUFDLEtBQUt5SyxRQUFRdE0sV0FBVztBQUMzQjZDLGdCQUFRaEIsUUFBRDtBQUNQO01BQ0Q7QUFFRCxXQUFLa2UsUUFBTDtBQUVBLFlBQU0zaEIsVUFBVSxLQUFLNGhCLFlBQUw7QUFDaEIsVUFBSSxLQUFLMVQsUUFBUVEsWUFBWTtBQUMzQnhMLGVBQU9sRCxPQUFEO01BQ1A7QUFFREEsY0FBUXVDLFVBQVU0USxJQUFJN0QsaUJBQXRCO0FBRUEsV0FBS3VTLGtCQUFrQixNQUFNO0FBQzNCcGQsZ0JBQVFoQixRQUFEO09BRFQ7SUFHRDtJQUVEMFcsS0FBSzFXLFVBQVU7QUFDYixVQUFJLENBQUMsS0FBS3lLLFFBQVF0TSxXQUFXO0FBQzNCNkMsZ0JBQVFoQixRQUFEO0FBQ1A7TUFDRDtBQUVELFdBQUttZSxZQUFMLEVBQW1CcmYsVUFBVWdKLE9BQU8rRCxpQkFBcEM7QUFFQSxXQUFLdVMsa0JBQWtCLE1BQU07QUFDM0IsYUFBS3hULFFBQUw7QUFDQTVKLGdCQUFRaEIsUUFBRDtPQUZUO0lBSUQ7SUFFRDRLLFVBQVU7QUFDUixVQUFJLENBQUMsS0FBS3FULGFBQWE7QUFDckI7TUFDRDtBQUVEMWEsbUJBQWFDLElBQUksS0FBS2dILFVBQVVvVCxlQUFoQztBQUVBLFdBQUtwVCxTQUFTMUMsT0FBZDtBQUNBLFdBQUttVyxjQUFjO0lBQ3BCO0lBR0RFLGNBQWM7QUFDWixVQUFJLENBQUMsS0FBSzNULFVBQVU7QUFDbEIsY0FBTTZULFdBQVdqaUIsU0FBU2tpQixjQUFjLEtBQXZCO0FBQ2pCRCxpQkFBU1IsWUFBWSxLQUFLcFQsUUFBUW9UO0FBQ2xDLFlBQUksS0FBS3BULFFBQVFRLFlBQVk7QUFDM0JvVCxtQkFBU3ZmLFVBQVU0USxJQUFJOUQsaUJBQXZCO1FBQ0Q7QUFFRCxhQUFLcEIsV0FBVzZUO01BQ2pCO0FBRUQsYUFBTyxLQUFLN1Q7SUFDYjtJQUVEZCxrQkFBa0JGLFFBQVE7QUFFeEJBLGFBQU91VSxjQUFjOWYsV0FBV3VMLE9BQU91VSxXQUFSO0FBQy9CLGFBQU92VTtJQUNSO0lBRUQwVSxVQUFVO0FBQ1IsVUFBSSxLQUFLRCxhQUFhO0FBQ3BCO01BQ0Q7QUFFRCxZQUFNMWhCLFVBQVUsS0FBSzRoQixZQUFMO0FBQ2hCLFdBQUsxVCxRQUFRc1QsWUFBWVEsT0FBT2hpQixPQUFoQztBQUVBZ0gsbUJBQWFrQyxHQUFHbEosU0FBU3FoQixpQkFBaUIsTUFBTTtBQUM5QzVjLGdCQUFRLEtBQUt5SixRQUFRcVQsYUFBZDtPQURUO0FBSUEsV0FBS0csY0FBYztJQUNwQjtJQUVERyxrQkFBa0JwZSxVQUFVO0FBQzFCaUIsNkJBQXVCakIsVUFBVSxLQUFLbWUsWUFBTCxHQUFvQixLQUFLMVQsUUFBUVEsVUFBNUM7SUFDdkI7RUF6RzJCO0FDekI5QixNQUFNdkssU0FBTztBQUNiLE1BQU1pSyxhQUFXO0FBQ2pCLE1BQU1FLGNBQWEsSUFBR0Y7QUFDdEIsTUFBTTZULGtCQUFpQixVQUFTM1Q7QUFDaEMsTUFBTTRULG9CQUFxQixjQUFhNVQ7QUFFeEMsTUFBTStNLFVBQVU7QUFDaEIsTUFBTThHLGtCQUFrQjtBQUN4QixNQUFNQyxtQkFBbUI7QUFFekIsTUFBTXZWLFlBQVU7SUFDZHdWLFdBQVc7SUFDWEMsYUFBYTtFQUZDO0FBS2hCLE1BQU14VixnQkFBYztJQUNsQnVWLFdBQVc7SUFDWEMsYUFBYTtFQUZLO0FBU3BCLE1BQU1DLFlBQU4sY0FBd0IzVixPQUFPO0lBQzdCVSxZQUFZTCxRQUFRO0FBQ2xCLFlBQUE7QUFDQSxXQUFLaUIsVUFBVSxLQUFLbEIsV0FBV0MsTUFBaEI7QUFDZixXQUFLdVYsWUFBWTtBQUNqQixXQUFLQyx1QkFBdUI7SUFDN0I7SUFHaUIsV0FBUDVWLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0R1ZSxXQUFXO0FBQ1QsVUFBSSxLQUFLRixXQUFXO0FBQ2xCO01BQ0Q7QUFFRCxVQUFJLEtBQUt0VSxRQUFRbVUsV0FBVztBQUMxQixhQUFLblUsUUFBUW9VLFlBQVkzRSxNQUF6QjtNQUNEO0FBRUQzVyxtQkFBYUMsSUFBSXBILFVBQVV5TyxXQUEzQjtBQUNBdEgsbUJBQWFrQyxHQUFHckosVUFBVW9pQixpQkFBZXJiLFdBQVMsS0FBSytiLGVBQWUvYixLQUFwQixDQUFsRDtBQUNBSSxtQkFBYWtDLEdBQUdySixVQUFVcWlCLG1CQUFtQnRiLFdBQVMsS0FBS2djLGVBQWVoYyxLQUFwQixDQUF0RDtBQUVBLFdBQUs0YixZQUFZO0lBQ2xCO0lBRURLLGFBQWE7QUFDWCxVQUFJLENBQUMsS0FBS0wsV0FBVztBQUNuQjtNQUNEO0FBRUQsV0FBS0EsWUFBWTtBQUNqQnhiLG1CQUFhQyxJQUFJcEgsVUFBVXlPLFdBQTNCO0lBQ0Q7SUFHRHFVLGVBQWUvYixPQUFPO0FBQ3BCLFlBQU07UUFBRTBiO01BQUYsSUFBa0IsS0FBS3BVO0FBRTdCLFVBQUl0SCxNQUFNM0IsV0FBV3BGLFlBQVkrRyxNQUFNM0IsV0FBV3FkLGVBQWVBLFlBQVk5ZixTQUFTb0UsTUFBTTNCLE1BQTNCLEdBQW9DO0FBQ25HO01BQ0Q7QUFFRCxZQUFNNmQsV0FBVzFTLGVBQWVjLGtCQUFrQm9SLFdBQWpDO0FBRWpCLFVBQUlRLFNBQVNuaEIsV0FBVyxHQUFHO0FBQ3pCMmdCLG9CQUFZM0UsTUFBWjtNQUNELFdBQVUsS0FBSzhFLHlCQUF5Qkwsa0JBQWtCO0FBQ3pEVSxpQkFBU0EsU0FBU25oQixTQUFTLEdBQUdnYyxNQUE5QjtNQUNELE9BQU07QUFDTG1GLGlCQUFTLEdBQUduRixNQUFaO01BQ0Q7SUFDRjtJQUVEaUYsZUFBZWhjLE9BQU87QUFDcEIsVUFBSUEsTUFBTTJELFFBQVE4USxTQUFTO0FBQ3pCO01BQ0Q7QUFFRCxXQUFLb0gsdUJBQXVCN2IsTUFBTW1jLFdBQVdYLG1CQUFtQkQ7SUFDakU7RUF4RTRCO0FDbkIvQixNQUFNaGUsU0FBTztBQUNiLE1BQU1pSyxhQUFXO0FBQ2pCLE1BQU1FLGNBQWEsSUFBR0Y7QUFDdEIsTUFBTXlCLGlCQUFlO0FBQ3JCLE1BQU11TCxlQUFhO0FBRW5CLE1BQU10QyxlQUFjLE9BQU14SztBQUMxQixNQUFNMFUseUJBQXdCLGdCQUFlMVU7QUFDN0MsTUFBTXlLLGlCQUFnQixTQUFReks7QUFDOUIsTUFBTXNLLGVBQWMsT0FBTXRLO0FBQzFCLE1BQU11SyxnQkFBZSxRQUFPdks7QUFDNUIsTUFBTTJVLGlCQUFnQixTQUFRM1U7QUFDOUIsTUFBTTRVLHNCQUF1QixnQkFBZTVVO0FBQzVDLE1BQU02VSwwQkFBMkIsb0JBQW1CN1U7QUFDcEQsTUFBTThVLDBCQUF5QixrQkFBaUI5VTtBQUNoRCxNQUFNMEIseUJBQXdCLFFBQU8xQixjQUFZdUI7QUFFakQsTUFBTXdULGtCQUFrQjtBQUN4QixNQUFNaFUsb0JBQWtCO0FBQ3hCLE1BQU1DLG9CQUFrQjtBQUN4QixNQUFNZ1Usb0JBQW9CO0FBRTFCLE1BQU1DLGtCQUFnQjtBQUN0QixNQUFNQyxrQkFBa0I7QUFDeEIsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU0xVCx5QkFBdUI7QUFFN0IsTUFBTWxELFlBQVU7SUFDZGlWLFVBQVU7SUFDVm5FLE9BQU87SUFDUHZJLFVBQVU7RUFISTtBQU1oQixNQUFNdEksZ0JBQWM7SUFDbEJnVixVQUFVO0lBQ1ZuRSxPQUFPO0lBQ1B2SSxVQUFVO0VBSFE7QUFVcEIsTUFBTXNPLFFBQU4sY0FBb0IxVixjQUFjO0lBQ2hDVixZQUFZdE4sU0FBU2lOLFFBQVE7QUFDM0IsWUFBTWpOLFNBQVNpTixNQUFmO0FBRUEsV0FBSzBXLFVBQVV2VCxlQUFlRyxRQUFRaVQsaUJBQWlCLEtBQUt2VixRQUE3QztBQUNmLFdBQUsyVixZQUFZLEtBQUtDLG9CQUFMO0FBQ2pCLFdBQUtDLGFBQWEsS0FBS0MscUJBQUw7QUFDbEIsV0FBSzdKLFdBQVc7QUFDaEIsV0FBS1IsbUJBQW1CO0FBQ3hCLFdBQUtzSyxhQUFhLElBQUlsRSxnQkFBSjtBQUVsQixXQUFLOUosbUJBQUw7SUFDRDtJQUdpQixXQUFQbkosVUFBVTtBQUNuQixhQUFPQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBT0E7SUFDUjtJQUVjLFdBQUozSSxPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRCtMLE9BQU8zSCxlQUFlO0FBQ3BCLGFBQU8sS0FBSzJSLFdBQVcsS0FBS0MsS0FBTCxJQUFjLEtBQUtDLEtBQUs3UixhQUFWO0lBQ3RDO0lBRUQ2UixLQUFLN1IsZUFBZTtBQUNsQixVQUFJLEtBQUsyUixZQUFZLEtBQUtSLGtCQUFrQjtBQUMxQztNQUNEO0FBRUQsWUFBTStELFlBQVl6VyxhQUFheUMsUUFBUSxLQUFLd0UsVUFBVTJLLGNBQVk7UUFDaEVyUTtNQURnRSxDQUFoRDtBQUlsQixVQUFJa1YsVUFBVTNULGtCQUFrQjtBQUM5QjtNQUNEO0FBRUQsV0FBS29RLFdBQVc7QUFDaEIsV0FBS1IsbUJBQW1CO0FBRXhCLFdBQUtzSyxXQUFXN0osS0FBaEI7QUFFQXRhLGVBQVN5RCxLQUFLZixVQUFVNFEsSUFBSWtRLGVBQTVCO0FBRUEsV0FBS1ksY0FBTDtBQUVBLFdBQUtMLFVBQVV4SixLQUFLLE1BQU0sS0FBSzhKLGFBQWEzYixhQUFsQixDQUExQjtJQUNEO0lBRUQ0UixPQUFPO0FBQ0wsVUFBSSxDQUFDLEtBQUtELFlBQVksS0FBS1Isa0JBQWtCO0FBQzNDO01BQ0Q7QUFFRCxZQUFNcUUsWUFBWS9XLGFBQWF5QyxRQUFRLEtBQUt3RSxVQUFVNkssWUFBcEM7QUFFbEIsVUFBSWlGLFVBQVVqVSxrQkFBa0I7QUFDOUI7TUFDRDtBQUVELFdBQUtvUSxXQUFXO0FBQ2hCLFdBQUtSLG1CQUFtQjtBQUN4QixXQUFLb0ssV0FBV2pCLFdBQWhCO0FBRUEsV0FBSzVVLFNBQVMxTCxVQUFVZ0osT0FBTytELGlCQUEvQjtBQUVBLFdBQUtiLGVBQWUsTUFBTSxLQUFLMFYsV0FBTCxHQUFtQixLQUFLbFcsVUFBVSxLQUFLc0ssWUFBTCxDQUE1RDtJQUNEO0lBRURsSyxVQUFVO0FBQ1IsaUJBQVcrVixlQUFlLENBQUN0akIsUUFBUSxLQUFLNmlCLE9BQWQsR0FBd0I7QUFDaEQzYyxxQkFBYUMsSUFBSW1kLGFBQWE5VixXQUE5QjtNQUNEO0FBRUQsV0FBS3NWLFVBQVV2VixRQUFmO0FBQ0EsV0FBS3lWLFdBQVdqQixXQUFoQjtBQUNBLFlBQU14VSxRQUFOO0lBQ0Q7SUFFRGdXLGVBQWU7QUFDYixXQUFLSixjQUFMO0lBQ0Q7SUFHREosc0JBQXNCO0FBQ3BCLGFBQU8sSUFBSXBDLFNBQVM7UUFDbEI3ZixXQUFXZ0gsUUFBUSxLQUFLc0YsUUFBUTRULFFBQWQ7UUFDbEJwVCxZQUFZLEtBQUs2SixZQUFMO01BRk0sQ0FBYjtJQUlSO0lBRUR3TCx1QkFBdUI7QUFDckIsYUFBTyxJQUFJeEIsVUFBVTtRQUNuQkQsYUFBYSxLQUFLclU7TUFEQyxDQUFkO0lBR1I7SUFFRGlXLGFBQWEzYixlQUFlO0FBRTFCLFVBQUksQ0FBQzFJLFNBQVN5RCxLQUFLZCxTQUFTLEtBQUt5TCxRQUE1QixHQUF1QztBQUMxQ3BPLGlCQUFTeUQsS0FBSzBlLE9BQU8sS0FBSy9ULFFBQTFCO01BQ0Q7QUFFRCxXQUFLQSxTQUFTME0sTUFBTW9DLFVBQVU7QUFDOUIsV0FBSzlPLFNBQVM5QixnQkFBZ0IsYUFBOUI7QUFDQSxXQUFLOEIsU0FBU2hDLGFBQWEsY0FBYyxJQUF6QztBQUNBLFdBQUtnQyxTQUFTaEMsYUFBYSxRQUFRLFFBQW5DO0FBQ0EsV0FBS2dDLFNBQVNxVyxZQUFZO0FBRTFCLFlBQU1DLFlBQVluVSxlQUFlRyxRQUFRa1QscUJBQXFCLEtBQUtFLE9BQWpEO0FBQ2xCLFVBQUlZLFdBQVc7QUFDYkEsa0JBQVVELFlBQVk7TUFDdkI7QUFFRHBoQixhQUFPLEtBQUsrSyxRQUFOO0FBRU4sV0FBS0EsU0FBUzFMLFVBQVU0USxJQUFJN0QsaUJBQTVCO0FBRUEsWUFBTWtWLHFCQUFxQixNQUFNO0FBQy9CLFlBQUksS0FBS3RXLFFBQVF5UCxPQUFPO0FBQ3RCLGVBQUttRyxXQUFXcEIsU0FBaEI7UUFDRDtBQUVELGFBQUtoSixtQkFBbUI7QUFDeEIxUyxxQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVU0SyxlQUFhO1VBQy9DdFE7U0FERjs7QUFLRixXQUFLa0csZUFBZStWLG9CQUFvQixLQUFLYixTQUFTLEtBQUtwTCxZQUFMLENBQXREO0lBQ0Q7SUFFRHZDLHFCQUFxQjtBQUNuQmhQLG1CQUFha0MsR0FBRyxLQUFLK0UsVUFBVW1WLHlCQUF1QnhjLFdBQVM7QUFDN0QsWUFBSUEsTUFBTTJELFFBQVE2USxjQUFZO0FBQzVCO1FBQ0Q7QUFFRCxZQUFJLEtBQUtsTixRQUFRa0gsVUFBVTtBQUN6QnhPLGdCQUFNd0QsZUFBTjtBQUNBLGVBQUsrUCxLQUFMO0FBQ0E7UUFDRDtBQUVELGFBQUtzSywyQkFBTDtPQVhGO0FBY0F6ZCxtQkFBYWtDLEdBQUdwSSxRQUFRbWlCLGdCQUFjLE1BQU07QUFDMUMsWUFBSSxLQUFLL0ksWUFBWSxDQUFDLEtBQUtSLGtCQUFrQjtBQUMzQyxlQUFLdUssY0FBTDtRQUNEO09BSEg7QUFNQWpkLG1CQUFha0MsR0FBRyxLQUFLK0UsVUFBVWtWLHlCQUF5QnZjLFdBQVM7QUFFL0RJLHFCQUFhbUMsSUFBSSxLQUFLOEUsVUFBVWlWLHFCQUFxQndCLFlBQVU7QUFDN0QsY0FBSSxLQUFLelcsYUFBYXJILE1BQU0zQixVQUFVLEtBQUtnSixhQUFheVcsT0FBT3pmLFFBQVE7QUFDckU7VUFDRDtBQUVELGNBQUksS0FBS2lKLFFBQVE0VCxhQUFhLFVBQVU7QUFDdEMsaUJBQUsyQywyQkFBTDtBQUNBO1VBQ0Q7QUFFRCxjQUFJLEtBQUt2VyxRQUFRNFQsVUFBVTtBQUN6QixpQkFBSzNILEtBQUw7VUFDRDtTQVpIO09BRkY7SUFpQkQ7SUFFRGdLLGFBQWE7QUFDWCxXQUFLbFcsU0FBUzBNLE1BQU1vQyxVQUFVO0FBQzlCLFdBQUs5TyxTQUFTaEMsYUFBYSxlQUFlLElBQTFDO0FBQ0EsV0FBS2dDLFNBQVM5QixnQkFBZ0IsWUFBOUI7QUFDQSxXQUFLOEIsU0FBUzlCLGdCQUFnQixNQUE5QjtBQUNBLFdBQUt1TixtQkFBbUI7QUFFeEIsV0FBS2tLLFVBQVV6SixLQUFLLE1BQU07QUFDeEJ0YSxpQkFBU3lELEtBQUtmLFVBQVVnSixPQUFPOFgsZUFBL0I7QUFDQSxhQUFLc0Isa0JBQUw7QUFDQSxhQUFLWCxXQUFXekQsTUFBaEI7QUFDQXZaLHFCQUFheUMsUUFBUSxLQUFLd0UsVUFBVThLLGNBQXBDO09BSkY7SUFNRDtJQUVEUixjQUFjO0FBQ1osYUFBTyxLQUFLdEssU0FBUzFMLFVBQVVDLFNBQVM2TSxpQkFBakM7SUFDUjtJQUVEb1YsNkJBQTZCO0FBQzNCLFlBQU0xRyxZQUFZL1csYUFBYXlDLFFBQVEsS0FBS3dFLFVBQVUrVSxzQkFBcEM7QUFDbEIsVUFBSWpGLFVBQVVqVSxrQkFBa0I7QUFDOUI7TUFDRDtBQUVELFlBQU04YSxxQkFBcUIsS0FBSzNXLFNBQVM0VyxlQUFlaGxCLFNBQVMrQyxnQkFBZ0JraUI7QUFDakYsWUFBTUMsbUJBQW1CLEtBQUs5VyxTQUFTME0sTUFBTXFLO0FBRTdDLFVBQUlELHFCQUFxQixZQUFZLEtBQUs5VyxTQUFTMUwsVUFBVUMsU0FBUzhnQixpQkFBakMsR0FBcUQ7QUFDeEY7TUFDRDtBQUVELFVBQUksQ0FBQ3NCLG9CQUFvQjtBQUN2QixhQUFLM1csU0FBUzBNLE1BQU1xSyxZQUFZO01BQ2pDO0FBRUQsV0FBSy9XLFNBQVMxTCxVQUFVNFEsSUFBSW1RLGlCQUE1QjtBQUNBLFdBQUs3VSxlQUFlLE1BQU07QUFDeEIsYUFBS1IsU0FBUzFMLFVBQVVnSixPQUFPK1gsaUJBQS9CO0FBQ0EsYUFBSzdVLGVBQWUsTUFBTTtBQUN4QixlQUFLUixTQUFTME0sTUFBTXFLLFlBQVlEO1dBQy9CLEtBQUtwQixPQUZSO1NBR0MsS0FBS0EsT0FMUjtBQU9BLFdBQUsxVixTQUFTMFAsTUFBZDtJQUNEO0lBTURzRyxnQkFBZ0I7QUFDZCxZQUFNVyxxQkFBcUIsS0FBSzNXLFNBQVM0VyxlQUFlaGxCLFNBQVMrQyxnQkFBZ0JraUI7QUFDakYsWUFBTWpFLGlCQUFpQixLQUFLbUQsV0FBV2pFLFNBQWhCO0FBQ3ZCLFlBQU1rRixvQkFBb0JwRSxpQkFBaUI7QUFFM0MsVUFBSW9FLHFCQUFxQixDQUFDTCxvQkFBb0I7QUFDNUMsY0FBTXBYLFdBQVczSixNQUFLLElBQUssZ0JBQWdCO0FBQzNDLGFBQUtvSyxTQUFTME0sTUFBTW5OLFlBQWEsR0FBRXFUO01BQ3BDO0FBRUQsVUFBSSxDQUFDb0UscUJBQXFCTCxvQkFBb0I7QUFDNUMsY0FBTXBYLFdBQVczSixNQUFLLElBQUssaUJBQWlCO0FBQzVDLGFBQUtvSyxTQUFTME0sTUFBTW5OLFlBQWEsR0FBRXFUO01BQ3BDO0lBQ0Y7SUFFRDhELG9CQUFvQjtBQUNsQixXQUFLMVcsU0FBUzBNLE1BQU11SyxjQUFjO0FBQ2xDLFdBQUtqWCxTQUFTME0sTUFBTXdLLGVBQWU7SUFDcEM7SUFHcUIsT0FBZjdnQixnQkFBZ0IySSxRQUFRMUUsZUFBZTtBQUM1QyxhQUFPLEtBQUtvSCxLQUFLLFdBQVk7QUFDM0IsY0FBTUMsT0FBTzhULE1BQU05VSxvQkFBb0IsTUFBTTNCLE1BQWhDO0FBRWIsWUFBSSxPQUFPQSxXQUFXLFVBQVU7QUFDOUI7UUFDRDtBQUVELFlBQUksT0FBTzJDLEtBQUszQyxZQUFZLGFBQWE7QUFDdkMsZ0JBQU0sSUFBSVksVUFBVyxvQkFBbUJaLFNBQWxDO1FBQ1A7QUFFRDJDLGFBQUszQyxRQUFRMUUsYUFBYjtNQUNELENBWk07SUFhUjtFQTNRK0I7QUFrUmxDdkIsZUFBYWtDLEdBQUdySixVQUFVbVEsd0JBQXNCRCx3QkFBc0IsU0FBVW5KLE9BQU87QUFDckYsVUFBTTNCLFNBQVN2RSx1QkFBdUIsSUFBRDtBQUVyQyxRQUFJLENBQUMsS0FBSyxNQUFOLEVBQWNOLFNBQVMsS0FBSzhPLE9BQTVCLEdBQXNDO0FBQ3hDdEksWUFBTXdELGVBQU47SUFDRDtBQUVEcEQsaUJBQWFtQyxJQUFJbEUsUUFBUTJULGNBQVk2RSxlQUFhO0FBQ2hELFVBQUlBLFVBQVUzVCxrQkFBa0I7QUFFOUI7TUFDRDtBQUVEOUMsbUJBQWFtQyxJQUFJbEUsUUFBUThULGdCQUFjLE1BQU07QUFDM0MsWUFBSW5YLFVBQVUsSUFBRCxHQUFRO0FBQ25CLGVBQUsrYixNQUFMO1FBQ0Q7T0FISDtJQUtELENBWEQ7QUFjQSxVQUFNeUgsY0FBY2hWLGVBQWVHLFFBQVFnVCxlQUF2QjtBQUNwQixRQUFJNkIsYUFBYTtBQUNmMUIsWUFBTS9VLFlBQVl5VyxXQUFsQixFQUErQmpMLEtBQS9CO0lBQ0Q7QUFFRCxVQUFNdkssT0FBTzhULE1BQU05VSxvQkFBb0IzSixNQUExQjtBQUViMkssU0FBS00sT0FBTyxJQUFaO0VBQ0QsQ0E3QkQ7QUErQkFwQix1QkFBcUI0VSxLQUFEO0FBTXBCM2YscUJBQW1CMmYsS0FBRDtBQzdWbEIsTUFBTXZmLFNBQU87QUFDYixNQUFNaUssYUFBVztBQUNqQixNQUFNRSxjQUFhLElBQUdGO0FBQ3RCLE1BQU15QixpQkFBZTtBQUNyQixNQUFNdUUsd0JBQXVCLE9BQU05RixjQUFZdUI7QUFDL0MsTUFBTXVMLGFBQWE7QUFFbkIsTUFBTTlMLG9CQUFrQjtBQUN4QixNQUFNK1YsdUJBQXFCO0FBQzNCLE1BQU1DLG9CQUFvQjtBQUMxQixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTWhDLGdCQUFnQjtBQUV0QixNQUFNM0ssZUFBYyxPQUFNdEs7QUFDMUIsTUFBTXVLLGdCQUFlLFFBQU92SztBQUM1QixNQUFNd0ssZUFBYyxPQUFNeEs7QUFDMUIsTUFBTTBVLHVCQUF3QixnQkFBZTFVO0FBQzdDLE1BQU15SyxpQkFBZ0IsU0FBUXpLO0FBQzlCLE1BQU0yVSxlQUFnQixTQUFRM1U7QUFDOUIsTUFBTTBCLHlCQUF3QixRQUFPMUIsY0FBWXVCO0FBQ2pELE1BQU11VCx3QkFBeUIsa0JBQWlCOVU7QUFFaEQsTUFBTXlCLHlCQUF1QjtBQUU3QixNQUFNbEQsWUFBVTtJQUNkaVYsVUFBVTtJQUNWMU0sVUFBVTtJQUNWb1EsUUFBUTtFQUhNO0FBTWhCLE1BQU0xWSxnQkFBYztJQUNsQmdWLFVBQVU7SUFDVjFNLFVBQVU7SUFDVm9RLFFBQVE7RUFIVTtBQVVwQixNQUFNQyxZQUFOLGNBQXdCelgsY0FBYztJQUNwQ1YsWUFBWXROLFNBQVNpTixRQUFRO0FBQzNCLFlBQU1qTixTQUFTaU4sTUFBZjtBQUVBLFdBQUtpTixXQUFXO0FBQ2hCLFdBQUswSixZQUFZLEtBQUtDLG9CQUFMO0FBQ2pCLFdBQUtDLGFBQWEsS0FBS0MscUJBQUw7QUFDbEIsV0FBSy9OLG1CQUFMO0lBQ0Q7SUFHaUIsV0FBUG5KLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0QrTCxPQUFPM0gsZUFBZTtBQUNwQixhQUFPLEtBQUsyUixXQUFXLEtBQUtDLEtBQUwsSUFBYyxLQUFLQyxLQUFLN1IsYUFBVjtJQUN0QztJQUVENlIsS0FBSzdSLGVBQWU7QUFDbEIsVUFBSSxLQUFLMlIsVUFBVTtBQUNqQjtNQUNEO0FBRUQsWUFBTXVELFlBQVl6VyxhQUFheUMsUUFBUSxLQUFLd0UsVUFBVTJLLGNBQVk7UUFBRXJRO01BQUYsQ0FBaEQ7QUFFbEIsVUFBSWtWLFVBQVUzVCxrQkFBa0I7QUFDOUI7TUFDRDtBQUVELFdBQUtvUSxXQUFXO0FBQ2hCLFdBQUswSixVQUFVeEosS0FBZjtBQUVBLFVBQUksQ0FBQyxLQUFLbE0sUUFBUXNYLFFBQVE7QUFDeEIsWUFBSTFGLGdCQUFKLEVBQXNCM0YsS0FBdEI7TUFDRDtBQUVELFdBQUtsTSxTQUFTaEMsYUFBYSxjQUFjLElBQXpDO0FBQ0EsV0FBS2dDLFNBQVNoQyxhQUFhLFFBQVEsUUFBbkM7QUFDQSxXQUFLZ0MsU0FBUzFMLFVBQVU0USxJQUFJa1Msb0JBQTVCO0FBRUEsWUFBTS9NLG1CQUFtQixNQUFNO0FBQzdCLFlBQUksQ0FBQyxLQUFLcEssUUFBUXNYLFVBQVUsS0FBS3RYLFFBQVE0VCxVQUFVO0FBQ2pELGVBQUtnQyxXQUFXcEIsU0FBaEI7UUFDRDtBQUVELGFBQUt6VSxTQUFTMUwsVUFBVTRRLElBQUk3RCxpQkFBNUI7QUFDQSxhQUFLckIsU0FBUzFMLFVBQVVnSixPQUFPOFosb0JBQS9CO0FBQ0FyZSxxQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVU0SyxlQUFhO1VBQUV0UTtTQUFuRDs7QUFHRixXQUFLa0csZUFBZTZKLGtCQUFrQixLQUFLckssVUFBVSxJQUFyRDtJQUNEO0lBRURrTSxPQUFPO0FBQ0wsVUFBSSxDQUFDLEtBQUtELFVBQVU7QUFDbEI7TUFDRDtBQUVELFlBQU02RCxZQUFZL1csYUFBYXlDLFFBQVEsS0FBS3dFLFVBQVU2SyxZQUFwQztBQUVsQixVQUFJaUYsVUFBVWpVLGtCQUFrQjtBQUM5QjtNQUNEO0FBRUQsV0FBS2dhLFdBQVdqQixXQUFoQjtBQUNBLFdBQUs1VSxTQUFTeVgsS0FBZDtBQUNBLFdBQUt4TCxXQUFXO0FBQ2hCLFdBQUtqTSxTQUFTMUwsVUFBVTRRLElBQUltUyxpQkFBNUI7QUFDQSxXQUFLMUIsVUFBVXpKLEtBQWY7QUFFQSxZQUFNd0wsbUJBQW1CLE1BQU07QUFDN0IsYUFBSzFYLFNBQVMxTCxVQUFVZ0osT0FBTytELG1CQUFpQmdXLGlCQUFoRDtBQUNBLGFBQUtyWCxTQUFTOUIsZ0JBQWdCLFlBQTlCO0FBQ0EsYUFBSzhCLFNBQVM5QixnQkFBZ0IsTUFBOUI7QUFFQSxZQUFJLENBQUMsS0FBSytCLFFBQVFzWCxRQUFRO0FBQ3hCLGNBQUkxRixnQkFBSixFQUFzQlMsTUFBdEI7UUFDRDtBQUVEdloscUJBQWF5QyxRQUFRLEtBQUt3RSxVQUFVOEssY0FBcEM7O0FBR0YsV0FBS3RLLGVBQWVrWCxrQkFBa0IsS0FBSzFYLFVBQVUsSUFBckQ7SUFDRDtJQUVESSxVQUFVO0FBQ1IsV0FBS3VWLFVBQVV2VixRQUFmO0FBQ0EsV0FBS3lWLFdBQVdqQixXQUFoQjtBQUNBLFlBQU14VSxRQUFOO0lBQ0Q7SUFHRHdWLHNCQUFzQjtBQUNwQixZQUFNdEMsZ0JBQWdCLE1BQU07QUFDMUIsWUFBSSxLQUFLclQsUUFBUTRULGFBQWEsVUFBVTtBQUN0QzlhLHVCQUFheUMsUUFBUSxLQUFLd0UsVUFBVStVLG9CQUFwQztBQUNBO1FBQ0Q7QUFFRCxhQUFLN0ksS0FBTDtNQUNEO0FBR0QsWUFBTXZZLGFBQVlnSCxRQUFRLEtBQUtzRixRQUFRNFQsUUFBZDtBQUV6QixhQUFPLElBQUlMLFNBQVM7UUFDbEJILFdBQVdpRTtRQUNYM2pCLFdBQUFBO1FBQ0E4TSxZQUFZO1FBQ1o4UyxhQUFhLEtBQUt2VCxTQUFTOUw7UUFDM0JvZixlQUFlM2YsYUFBWTJmLGdCQUFnQjtNQUx6QixDQUFiO0lBT1I7SUFFRHdDLHVCQUF1QjtBQUNyQixhQUFPLElBQUl4QixVQUFVO1FBQ25CRCxhQUFhLEtBQUtyVTtNQURDLENBQWQ7SUFHUjtJQUVEK0gscUJBQXFCO0FBQ25CaFAsbUJBQWFrQyxHQUFHLEtBQUsrRSxVQUFVbVYsdUJBQXVCeGMsV0FBUztBQUM3RCxZQUFJQSxNQUFNMkQsUUFBUTZRLFlBQVk7QUFDNUI7UUFDRDtBQUVELFlBQUksQ0FBQyxLQUFLbE4sUUFBUWtILFVBQVU7QUFDMUJwTyx1QkFBYXlDLFFBQVEsS0FBS3dFLFVBQVUrVSxvQkFBcEM7QUFDQTtRQUNEO0FBRUQsYUFBSzdJLEtBQUw7T0FWRjtJQVlEO0lBR3FCLE9BQWY3VixnQkFBZ0IySSxRQUFRO0FBQzdCLGFBQU8sS0FBSzBDLEtBQUssV0FBWTtBQUMzQixjQUFNQyxPQUFPNlYsVUFBVTdXLG9CQUFvQixNQUFNM0IsTUFBcEM7QUFFYixZQUFJLE9BQU9BLFdBQVcsVUFBVTtBQUM5QjtRQUNEO0FBRUQsWUFBSTJDLEtBQUszQyxZQUFZaE8sVUFBYWdPLE9BQU81TSxXQUFXLEdBQWxCLEtBQTBCNE0sV0FBVyxlQUFlO0FBQ3BGLGdCQUFNLElBQUlZLFVBQVcsb0JBQW1CWixTQUFsQztRQUNQO0FBRUQyQyxhQUFLM0MsUUFBUSxJQUFiO01BQ0QsQ0FaTTtJQWFSO0VBaEttQztBQXVLdENqRyxlQUFha0MsR0FBR3JKLFVBQVVtUSx3QkFBc0JELHdCQUFzQixTQUFVbkosT0FBTztBQUNyRixVQUFNM0IsU0FBU3ZFLHVCQUF1QixJQUFEO0FBRXJDLFFBQUksQ0FBQyxLQUFLLE1BQU4sRUFBY04sU0FBUyxLQUFLOE8sT0FBNUIsR0FBc0M7QUFDeEN0SSxZQUFNd0QsZUFBTjtJQUNEO0FBRUQsUUFBSWhJLFdBQVcsSUFBRCxHQUFRO0FBQ3BCO0lBQ0Q7QUFFRDRFLGlCQUFhbUMsSUFBSWxFLFFBQVE4VCxnQkFBYyxNQUFNO0FBRTNDLFVBQUluWCxVQUFVLElBQUQsR0FBUTtBQUNuQixhQUFLK2IsTUFBTDtNQUNEO0lBQ0YsQ0FMRDtBQVFBLFVBQU15SCxjQUFjaFYsZUFBZUcsUUFBUWdULGFBQXZCO0FBQ3BCLFFBQUk2QixlQUFlQSxnQkFBZ0JuZ0IsUUFBUTtBQUN6Q3dnQixnQkFBVTlXLFlBQVl5VyxXQUF0QixFQUFtQ2pMLEtBQW5DO0lBQ0Q7QUFFRCxVQUFNdkssT0FBTzZWLFVBQVU3VyxvQkFBb0IzSixNQUE5QjtBQUNiMkssU0FBS00sT0FBTyxJQUFaO0VBQ0QsQ0ExQkQ7QUE0QkFsSixlQUFha0MsR0FBR3BJLFFBQVFzVCx1QkFBcUIsTUFBTTtBQUNqRCxlQUFXblUsWUFBWW1RLGVBQWV2SSxLQUFLMGIsYUFBcEIsR0FBb0M7QUFDekRrQyxnQkFBVTdXLG9CQUFvQjNPLFFBQTlCLEVBQXdDbWEsS0FBeEM7SUFDRDtFQUNGLENBSkQ7QUFNQXBULGVBQWFrQyxHQUFHcEksUUFBUW1pQixjQUFjLE1BQU07QUFDMUMsZUFBV2pqQixXQUFXb1EsZUFBZXZJLEtBQUssOENBQXBCLEdBQXFFO0FBQ3pGLFVBQUk5RyxpQkFBaUJmLE9BQUQsRUFBVTRsQixhQUFhLFNBQVM7QUFDbERILGtCQUFVN1csb0JBQW9CNU8sT0FBOUIsRUFBdUNtYSxLQUF2QztNQUNEO0lBQ0Y7RUFDRixDQU5EO0FBUUFyTCx1QkFBcUIyVyxTQUFEO0FBTXBCMWhCLHFCQUFtQjBoQixTQUFEO0FDalJsQixNQUFNSSxnQkFBZ0Isb0JBQUl0ZixJQUFJLENBQzVCLGNBQ0EsUUFDQSxRQUNBLFlBQ0EsWUFDQSxVQUNBLE9BQ0EsWUFSNEIsQ0FBUjtBQVd0QixNQUFNdWYseUJBQXlCO0FBTy9CLE1BQU1DLG1CQUFtQjtBQU96QixNQUFNQyxtQkFBbUI7QUFFekIsTUFBTUMsbUJBQW1CLENBQUNDLFdBQVdDLHlCQUF5QjtBQUM1RCxVQUFNQyxnQkFBZ0JGLFVBQVVHLFNBQVM5bUIsWUFBbkI7QUFFdEIsUUFBSTRtQixxQkFBcUIvbEIsU0FBU2dtQixhQUE5QixHQUE4QztBQUNoRCxVQUFJUCxjQUFjemQsSUFBSWdlLGFBQWxCLEdBQWtDO0FBQ3BDLGVBQU94ZCxRQUFRbWQsaUJBQWlCblksS0FBS3NZLFVBQVVJLFNBQWhDLEtBQThDTixpQkFBaUJwWSxLQUFLc1ksVUFBVUksU0FBaEMsQ0FBL0M7TUFDZjtBQUVELGFBQU87SUFDUjtBQUdELFdBQU9ILHFCQUFxQjNaLE9BQU8rWixvQkFBa0JBLDBCQUEwQjVZLE1BQXhFLEVBQ0o2WSxLQUFLQyxXQUFTQSxNQUFNN1ksS0FBS3dZLGFBQVgsQ0FEVjtFQUVSO0FBRU0sTUFBTU0sbUJBQW1CO0lBRTlCLEtBQUssQ0FBQyxTQUFTLE9BQU8sTUFBTSxRQUFRLFFBQVFaLHNCQUF2QztJQUNMYSxHQUFHLENBQUMsVUFBVSxRQUFRLFNBQVMsS0FBNUI7SUFDSEMsTUFBTSxDQUFBO0lBQ05DLEdBQUcsQ0FBQTtJQUNIQyxJQUFJLENBQUE7SUFDSkMsS0FBSyxDQUFBO0lBQ0xDLE1BQU0sQ0FBQTtJQUNOQyxLQUFLLENBQUE7SUFDTEMsSUFBSSxDQUFBO0lBQ0pDLElBQUksQ0FBQTtJQUNKQyxJQUFJLENBQUE7SUFDSkMsSUFBSSxDQUFBO0lBQ0pDLElBQUksQ0FBQTtJQUNKQyxJQUFJLENBQUE7SUFDSkMsSUFBSSxDQUFBO0lBQ0pDLElBQUksQ0FBQTtJQUNKQyxHQUFHLENBQUE7SUFDSHZRLEtBQUssQ0FBQyxPQUFPLFVBQVUsT0FBTyxTQUFTLFNBQVMsUUFBM0M7SUFDTHdRLElBQUksQ0FBQTtJQUNKQyxJQUFJLENBQUE7SUFDSkMsR0FBRyxDQUFBO0lBQ0hDLEtBQUssQ0FBQTtJQUNMQyxHQUFHLENBQUE7SUFDSEMsT0FBTyxDQUFBO0lBQ1BDLE1BQU0sQ0FBQTtJQUNOQyxLQUFLLENBQUE7SUFDTEMsS0FBSyxDQUFBO0lBQ0xDLFFBQVEsQ0FBQTtJQUNSQyxHQUFHLENBQUE7SUFDSEMsSUFBSSxDQUFBO0VBL0IwQjtBQWtDekIsV0FBU0MsYUFBYUMsWUFBWUMsV0FBV0Msa0JBQWtCO0FBQ3BFLFFBQUksQ0FBQ0YsV0FBVzdtQixRQUFRO0FBQ3RCLGFBQU82bUI7SUFDUjtBQUVELFFBQUlFLG9CQUFvQixPQUFPQSxxQkFBcUIsWUFBWTtBQUM5RCxhQUFPQSxpQkFBaUJGLFVBQUQ7SUFDeEI7QUFFRCxVQUFNRyxZQUFZLElBQUk3bkIsT0FBTzhuQixVQUFYO0FBQ2xCLFVBQU1DLGtCQUFrQkYsVUFBVUcsZ0JBQWdCTixZQUFZLFdBQXRDO0FBQ3hCLFVBQU0xRixXQUFXLENBQUEsRUFBR3pTLE9BQU8sR0FBR3dZLGdCQUFnQnZsQixLQUFLZ0UsaUJBQWlCLEdBQXRDLENBQWI7QUFFakIsZUFBV3RILFdBQVc4aUIsVUFBVTtBQUM5QixZQUFNaUcsY0FBYy9vQixRQUFRcW1CLFNBQVM5bUIsWUFBakI7QUFFcEIsVUFBSSxDQUFDTCxPQUFPK0osS0FBS3dmLFNBQVosRUFBdUJyb0IsU0FBUzJvQixXQUFoQyxHQUE4QztBQUNqRC9vQixnQkFBUXVMLE9BQVI7QUFFQTtNQUNEO0FBRUQsWUFBTXlkLGdCQUFnQixDQUFBLEVBQUczWSxPQUFPLEdBQUdyUSxRQUFRcU0sVUFBckI7QUFDdEIsWUFBTTRjLG9CQUFvQixDQUFBLEVBQUc1WSxPQUFPb1ksVUFBVSxRQUFRLENBQUEsR0FBSUEsVUFBVU0sZ0JBQWdCLENBQUEsQ0FBMUQ7QUFFMUIsaUJBQVc3QyxhQUFhOEMsZUFBZTtBQUNyQyxZQUFJLENBQUMvQyxpQkFBaUJDLFdBQVcrQyxpQkFBWixHQUFnQztBQUNuRGpwQixrQkFBUW1NLGdCQUFnQitaLFVBQVVHLFFBQWxDO1FBQ0Q7TUFDRjtJQUNGO0FBRUQsV0FBT3dDLGdCQUFnQnZsQixLQUFLNGxCO0VBQzdCO0FDckdELE1BQU0va0IsU0FBTztBQUViLE1BQU0wSSxZQUFVO0lBQ2Q0YixXQUFXL0I7SUFDWHlDLFNBQVMsQ0FBQTtJQUNUQyxZQUFZO0lBQ1pDLE1BQU07SUFDTkMsVUFBVTtJQUNWQyxZQUFZO0lBQ1pDLFVBQVU7RUFQSTtBQVVoQixNQUFNMWMsZ0JBQWM7SUFDbEIyYixXQUFXO0lBQ1hVLFNBQVM7SUFDVEMsWUFBWTtJQUNaQyxNQUFNO0lBQ05DLFVBQVU7SUFDVkMsWUFBWTtJQUNaQyxVQUFVO0VBUFE7QUFVcEIsTUFBTUMscUJBQXFCO0lBQ3pCQyxPQUFPO0lBQ1B6cEIsVUFBVTtFQUZlO0FBUzNCLE1BQU0wcEIsa0JBQU4sY0FBOEIvYyxPQUFPO0lBQ25DVSxZQUFZTCxRQUFRO0FBQ2xCLFlBQUE7QUFDQSxXQUFLaUIsVUFBVSxLQUFLbEIsV0FBV0MsTUFBaEI7SUFDaEI7SUFHaUIsV0FBUEosVUFBVTtBQUNuQixhQUFPQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBT0E7SUFDUjtJQUVjLFdBQUozSSxPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRHlsQixhQUFhO0FBQ1gsYUFBTzFxQixPQUFPMEksT0FBTyxLQUFLc0csUUFBUWliLE9BQTNCLEVBQ0ovWCxJQUFJbkUsWUFBVSxLQUFLNGMseUJBQXlCNWMsTUFBOUIsQ0FEVixFQUVKVCxPQUFPNUQsT0FGSDtJQUdSO0lBRURraEIsYUFBYTtBQUNYLGFBQU8sS0FBS0YsV0FBTCxFQUFrQmpvQixTQUFTO0lBQ25DO0lBRURvb0IsY0FBY1osU0FBUztBQUNyQixXQUFLYSxjQUFjYixPQUFuQjtBQUNBLFdBQUtqYixRQUFRaWIsVUFBVSxrQ0FBSyxLQUFLamIsUUFBUWliLFVBQVlBO0FBQ3JELGFBQU87SUFDUjtJQUVEYyxTQUFTO0FBQ1AsWUFBTUMsa0JBQWtCcnFCLFNBQVNraUIsY0FBYyxLQUF2QjtBQUN4Qm1JLHNCQUFnQmhCLFlBQVksS0FBS2lCLGVBQWUsS0FBS2pjLFFBQVFzYixRQUFqQztBQUU1QixpQkFBVyxDQUFDdnBCLFVBQVVtcUIsSUFBWCxLQUFvQmxyQixPQUFPdUwsUUFBUSxLQUFLeUQsUUFBUWliLE9BQTVCLEdBQXNDO0FBQ25FLGFBQUtrQixZQUFZSCxpQkFBaUJFLE1BQU1ucUIsUUFBeEM7TUFDRDtBQUVELFlBQU11cEIsV0FBV1UsZ0JBQWdCMVosU0FBUztBQUMxQyxZQUFNNFksYUFBYSxLQUFLUyx5QkFBeUIsS0FBSzNiLFFBQVFrYixVQUEzQztBQUVuQixVQUFJQSxZQUFZO0FBQ2RJLGlCQUFTam5CLFVBQVU0USxJQUFJLEdBQUdpVyxXQUFXOW9CLE1BQU0sR0FBakIsQ0FBMUI7TUFDRDtBQUVELGFBQU9rcEI7SUFDUjtJQUdEcGMsaUJBQWlCSCxRQUFRO0FBQ3ZCLFlBQU1HLGlCQUFpQkgsTUFBdkI7QUFDQSxXQUFLK2MsY0FBYy9jLE9BQU9rYyxPQUExQjtJQUNEO0lBRURhLGNBQWNNLEtBQUs7QUFDakIsaUJBQVcsQ0FBQ3JxQixVQUFVa3BCLE9BQVgsS0FBdUJqcUIsT0FBT3VMLFFBQVE2ZixHQUFmLEdBQXFCO0FBQ3JELGNBQU1sZCxpQkFBaUI7VUFBRW5OO1VBQVV5cEIsT0FBT1A7UUFBbkIsR0FBOEJNLGtCQUFyRDtNQUNEO0lBQ0Y7SUFFRFksWUFBWWIsVUFBVUwsU0FBU2xwQixVQUFVO0FBQ3ZDLFlBQU1zcUIsa0JBQWtCbmEsZUFBZUcsUUFBUXRRLFVBQVV1cEIsUUFBakM7QUFFeEIsVUFBSSxDQUFDZSxpQkFBaUI7QUFDcEI7TUFDRDtBQUVEcEIsZ0JBQVUsS0FBS1UseUJBQXlCVixPQUE5QjtBQUVWLFVBQUksQ0FBQ0EsU0FBUztBQUNab0Isd0JBQWdCaGYsT0FBaEI7QUFDQTtNQUNEO0FBRUQsVUFBSWhLLFdBQVU0bkIsT0FBRCxHQUFXO0FBQ3RCLGFBQUtxQixzQkFBc0I5b0IsV0FBV3luQixPQUFELEdBQVdvQixlQUFoRDtBQUNBO01BQ0Q7QUFFRCxVQUFJLEtBQUtyYyxRQUFRbWIsTUFBTTtBQUNyQmtCLHdCQUFnQnJCLFlBQVksS0FBS2lCLGVBQWVoQixPQUFwQjtBQUM1QjtNQUNEO0FBRURvQixzQkFBZ0JFLGNBQWN0QjtJQUMvQjtJQUVEZ0IsZUFBZUcsS0FBSztBQUNsQixhQUFPLEtBQUtwYyxRQUFRb2IsV0FBV2YsYUFBYStCLEtBQUssS0FBS3BjLFFBQVF1YSxXQUFXLEtBQUt2YSxRQUFRcWIsVUFBM0MsSUFBeURlO0lBQ3JHO0lBRURULHlCQUF5QlMsS0FBSztBQUM1QixhQUFPLE9BQU9BLFFBQVEsYUFBYUEsSUFBSSxJQUFELElBQVNBO0lBQ2hEO0lBRURFLHNCQUFzQnhxQixTQUFTdXFCLGlCQUFpQjtBQUM5QyxVQUFJLEtBQUtyYyxRQUFRbWIsTUFBTTtBQUNyQmtCLHdCQUFnQnJCLFlBQVk7QUFDNUJxQix3QkFBZ0J2SSxPQUFPaGlCLE9BQXZCO0FBQ0E7TUFDRDtBQUVEdXFCLHNCQUFnQkUsY0FBY3pxQixRQUFReXFCO0lBQ3ZDO0VBN0drQztBQzVCckMsTUFBTXRtQixTQUFPO0FBQ2IsTUFBTXVtQix3QkFBd0Isb0JBQUlua0IsSUFBSSxDQUFDLFlBQVksYUFBYSxZQUExQixDQUFSO0FBRTlCLE1BQU04SSxvQkFBa0I7QUFDeEIsTUFBTXNiLG1CQUFtQjtBQUN6QixNQUFNcmIsb0JBQWtCO0FBRXhCLE1BQU1zYix5QkFBeUI7QUFDL0IsTUFBTUMsaUJBQWtCLElBQUdGO0FBRTNCLE1BQU1HLG1CQUFtQjtBQUV6QixNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxpQkFBaUI7QUFFdkIsTUFBTXBTLGVBQWE7QUFDbkIsTUFBTUMsaUJBQWU7QUFDckIsTUFBTUgsZUFBYTtBQUNuQixNQUFNQyxnQkFBYztBQUNwQixNQUFNc1MsaUJBQWlCO0FBQ3ZCLE1BQU1DLGdCQUFjO0FBQ3BCLE1BQU1uSixrQkFBZ0I7QUFDdEIsTUFBTW9KLG1CQUFpQjtBQUN2QixNQUFNcFgsbUJBQW1CO0FBQ3pCLE1BQU1DLG1CQUFtQjtBQUV6QixNQUFNb1gsZ0JBQWdCO0lBQ3BCQyxNQUFNO0lBQ05DLEtBQUs7SUFDTEMsT0FBTzVuQixNQUFLLElBQUssU0FBUztJQUMxQjZuQixRQUFRO0lBQ1JDLE1BQU05bkIsTUFBSyxJQUFLLFVBQVU7RUFMTjtBQVF0QixNQUFNZ0osWUFBVTtJQUNkNGIsV0FBVy9CO0lBQ1hrRixXQUFXO0lBQ1g5TyxVQUFVO0lBQ1YrTyxXQUFXO0lBQ1hDLGFBQWE7SUFDYkMsT0FBTztJQUNQQyxvQkFBb0IsQ0FBQyxPQUFPLFNBQVMsVUFBVSxNQUEzQjtJQUNwQjNDLE1BQU07SUFDTnJNLFFBQVEsQ0FBQyxHQUFHLENBQUo7SUFDUjBCLFdBQVc7SUFDWHpCLGNBQWM7SUFDZHFNLFVBQVU7SUFDVkMsWUFBWTtJQUNadHBCLFVBQVU7SUFDVnVwQixVQUFVO0lBSVZ5QyxPQUFPO0lBQ1B4aUIsU0FBUztFQXBCSztBQXVCaEIsTUFBTXFELGdCQUFjO0lBQ2xCMmIsV0FBVztJQUNYbUQsV0FBVztJQUNYOU8sVUFBVTtJQUNWK08sV0FBVztJQUNYQyxhQUFhO0lBQ2JDLE9BQU87SUFDUEMsb0JBQW9CO0lBQ3BCM0MsTUFBTTtJQUNOck0sUUFBUTtJQUNSMEIsV0FBVztJQUNYekIsY0FBYztJQUNkcU0sVUFBVTtJQUNWQyxZQUFZO0lBQ1p0cEIsVUFBVTtJQUNWdXBCLFVBQVU7SUFDVnlDLE9BQU87SUFDUHhpQixTQUFTO0VBakJTO0FBd0JwQixNQUFNeWlCLFVBQU4sY0FBc0JsZSxjQUFjO0lBQ2xDVixZQUFZdE4sU0FBU2lOLFFBQVE7QUFDM0IsVUFBSSxPQUFPK1EsZ0JBQVcsYUFBYTtBQUNqQyxjQUFNLElBQUluUSxVQUFVLDZEQUFkO01BQ1A7QUFFRCxZQUFNN04sU0FBU2lOLE1BQWY7QUFHQSxXQUFLa2YsYUFBYTtBQUNsQixXQUFLQyxXQUFXO0FBQ2hCLFdBQUtDLGFBQWE7QUFDbEIsV0FBS0MsaUJBQWlCLENBQUE7QUFDdEIsV0FBS2xQLFVBQVU7QUFDZixXQUFLbVAsbUJBQW1CO0FBQ3hCLFdBQUtDLGNBQWM7QUFHbkIsV0FBS0MsTUFBTTtBQUVYLFdBQUtDLGNBQUw7QUFFQSxVQUFJLENBQUMsS0FBS3hlLFFBQVFqTyxVQUFVO0FBQzFCLGFBQUswc0IsVUFBTDtNQUNEO0lBQ0Y7SUFHaUIsV0FBUDlmLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0R5b0IsU0FBUztBQUNQLFdBQUtULGFBQWE7SUFDbkI7SUFFRFUsVUFBVTtBQUNSLFdBQUtWLGFBQWE7SUFDbkI7SUFFRFcsZ0JBQWdCO0FBQ2QsV0FBS1gsYUFBYSxDQUFDLEtBQUtBO0lBQ3pCO0lBRURqYyxTQUFTO0FBQ1AsVUFBSSxDQUFDLEtBQUtpYyxZQUFZO0FBQ3BCO01BQ0Q7QUFFRCxXQUFLRyxlQUFlUyxRQUFRLENBQUMsS0FBS1QsZUFBZVM7QUFDakQsVUFBSSxLQUFLN1MsU0FBTCxHQUFpQjtBQUNuQixhQUFLOFMsT0FBTDtBQUNBO01BQ0Q7QUFFRCxXQUFLQyxPQUFMO0lBQ0Q7SUFFRDVlLFVBQVU7QUFDUmdKLG1CQUFhLEtBQUsrVSxRQUFOO0FBRVpwbEIsbUJBQWFDLElBQUksS0FBS2dILFNBQVNoTSxRQUFRNG9CLGNBQXRCLEdBQXVDQyxrQkFBa0IsS0FBS29DLGlCQUEvRTtBQUVBLFVBQUksS0FBS2pmLFNBQVMvTixhQUFhLHdCQUEzQixHQUFzRDtBQUN4RCxhQUFLK04sU0FBU2hDLGFBQWEsU0FBUyxLQUFLZ0MsU0FBUy9OLGFBQWEsd0JBQTNCLENBQXBDO01BQ0Q7QUFFRCxXQUFLaXRCLGVBQUw7QUFDQSxZQUFNOWUsUUFBTjtJQUNEO0lBRUQrTCxPQUFPO0FBQ0wsVUFBSSxLQUFLbk0sU0FBUzBNLE1BQU1vQyxZQUFZLFFBQVE7QUFDMUMsY0FBTSxJQUFJaFEsTUFBTSxxQ0FBVjtNQUNQO0FBRUQsVUFBSSxFQUFFLEtBQUtxZ0IsZUFBTCxLQUF5QixLQUFLakIsYUFBYTtBQUMvQztNQUNEO0FBRUQsWUFBTTFPLFlBQVl6VyxhQUFheUMsUUFBUSxLQUFLd0UsVUFBVSxLQUFLWCxZQUFZdUIsVUFBVStKLFlBQTNCLENBQXBDO0FBQ2xCLFlBQU15VSxhQUFhMXFCLGVBQWUsS0FBS3NMLFFBQU47QUFDakMsWUFBTXFmLGNBQWNELGNBQWMsS0FBS3BmLFNBQVNzZixjQUFjM3FCLGlCQUFpQkosU0FBUyxLQUFLeUwsUUFBMUU7QUFFbkIsVUFBSXdQLFVBQVUzVCxvQkFBb0IsQ0FBQ3dqQixZQUFZO0FBQzdDO01BQ0Q7QUFHRCxXQUFLSCxlQUFMO0FBRUEsWUFBTVYsTUFBTSxLQUFLZSxlQUFMO0FBRVosV0FBS3ZmLFNBQVNoQyxhQUFhLG9CQUFvQndnQixJQUFJdnNCLGFBQWEsSUFBakIsQ0FBL0M7QUFFQSxZQUFNO1FBQUUyckI7TUFBRixJQUFnQixLQUFLM2Q7QUFFM0IsVUFBSSxDQUFDLEtBQUtELFNBQVNzZixjQUFjM3FCLGdCQUFnQkosU0FBUyxLQUFLaXFCLEdBQTFELEdBQWdFO0FBQ25FWixrQkFBVTdKLE9BQU95SyxHQUFqQjtBQUNBemxCLHFCQUFheUMsUUFBUSxLQUFLd0UsVUFBVSxLQUFLWCxZQUFZdUIsVUFBVXNjLGNBQTNCLENBQXBDO01BQ0Q7QUFFRCxXQUFLL04sVUFBVSxLQUFLTSxjQUFjK08sR0FBbkI7QUFFZkEsVUFBSWxxQixVQUFVNFEsSUFBSTdELGlCQUFsQjtBQU1BLFVBQUksa0JBQWtCelAsU0FBUytDLGlCQUFpQjtBQUM5QyxtQkFBVzVDLFdBQVcsQ0FBQSxFQUFHcVEsT0FBTyxHQUFHeFEsU0FBU3lELEtBQUtrTixRQUEzQixHQUFzQztBQUMxRHhKLHVCQUFha0MsR0FBR2xKLFNBQVMsYUFBYWlELElBQXRDO1FBQ0Q7TUFDRjtBQUVELFlBQU0yWCxXQUFXLE1BQU07QUFDckI1VCxxQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVUsS0FBS1gsWUFBWXVCLFVBQVVnSyxhQUEzQixDQUFwQztBQUVBLFlBQUksS0FBS3dULGVBQWUsT0FBTztBQUM3QixlQUFLVyxPQUFMO1FBQ0Q7QUFFRCxhQUFLWCxhQUFhOztBQUdwQixXQUFLNWQsZUFBZW1NLFVBQVUsS0FBSzZSLEtBQUssS0FBS2xVLFlBQUwsQ0FBeEM7SUFDRDtJQUVENEIsT0FBTztBQUNMLFVBQUksQ0FBQyxLQUFLRCxTQUFMLEdBQWlCO0FBQ3BCO01BQ0Q7QUFFRCxZQUFNNkQsWUFBWS9XLGFBQWF5QyxRQUFRLEtBQUt3RSxVQUFVLEtBQUtYLFlBQVl1QixVQUFVaUssWUFBM0IsQ0FBcEM7QUFDbEIsVUFBSWlGLFVBQVVqVSxrQkFBa0I7QUFDOUI7TUFDRDtBQUVELFlBQU0yaUIsTUFBTSxLQUFLZSxlQUFMO0FBQ1pmLFVBQUlscUIsVUFBVWdKLE9BQU8rRCxpQkFBckI7QUFJQSxVQUFJLGtCQUFrQnpQLFNBQVMrQyxpQkFBaUI7QUFDOUMsbUJBQVc1QyxXQUFXLENBQUEsRUFBR3FRLE9BQU8sR0FBR3hRLFNBQVN5RCxLQUFLa04sUUFBM0IsR0FBc0M7QUFDMUR4Six1QkFBYUMsSUFBSWpILFNBQVMsYUFBYWlELElBQXZDO1FBQ0Q7TUFDRjtBQUVELFdBQUtxcEIsZUFBZXJCLGlCQUFpQjtBQUNyQyxXQUFLcUIsZUFBZXRCLGlCQUFpQjtBQUNyQyxXQUFLc0IsZUFBZXZCLGlCQUFpQjtBQUNyQyxXQUFLc0IsYUFBYTtBQUVsQixZQUFNelIsV0FBVyxNQUFNO0FBQ3JCLFlBQUksS0FBSzZTLHFCQUFMLEdBQTZCO0FBQy9CO1FBQ0Q7QUFFRCxZQUFJLENBQUMsS0FBS3BCLFlBQVk7QUFDcEIsZUFBS2MsZUFBTDtRQUNEO0FBRUQsYUFBS2xmLFNBQVM5QixnQkFBZ0Isa0JBQTlCO0FBQ0FuRixxQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVUsS0FBS1gsWUFBWXVCLFVBQVVrSyxjQUEzQixDQUFwQzs7QUFHRixXQUFLdEssZUFBZW1NLFVBQVUsS0FBSzZSLEtBQUssS0FBS2xVLFlBQUwsQ0FBeEM7SUFDRDtJQUVEdUYsU0FBUztBQUNQLFVBQUksS0FBS1YsU0FBUztBQUNoQixhQUFLQSxRQUFRVSxPQUFiO01BQ0Q7SUFDRjtJQUdEc1AsaUJBQWlCO0FBQ2YsYUFBT3hrQixRQUFRLEtBQUs4a0IsVUFBTCxDQUFEO0lBQ2Y7SUFFREYsaUJBQWlCO0FBQ2YsVUFBSSxDQUFDLEtBQUtmLEtBQUs7QUFDYixhQUFLQSxNQUFNLEtBQUtrQixrQkFBa0IsS0FBS25CLGVBQWUsS0FBS29CLHVCQUFMLENBQTNDO01BQ1o7QUFFRCxhQUFPLEtBQUtuQjtJQUNiO0lBRURrQixrQkFBa0J4RSxTQUFTO0FBQ3pCLFlBQU1zRCxNQUFNLEtBQUtvQixvQkFBb0IxRSxPQUF6QixFQUFrQ2MsT0FBbEM7QUFHWixVQUFJLENBQUN3QyxLQUFLO0FBQ1IsZUFBTztNQUNSO0FBRURBLFVBQUlscUIsVUFBVWdKLE9BQU84RCxtQkFBaUJDLGlCQUF0QztBQUVBbWQsVUFBSWxxQixVQUFVNFEsSUFBSyxNQUFLLEtBQUs3RixZQUFZbkosV0FBekM7QUFFQSxZQUFNMnBCLFFBQVF0dUIsT0FBTyxLQUFLOE4sWUFBWW5KLElBQWxCLEVBQXdCL0UsU0FBOUI7QUFFZHF0QixVQUFJeGdCLGFBQWEsTUFBTTZoQixLQUF2QjtBQUVBLFVBQUksS0FBS3ZWLFlBQUwsR0FBb0I7QUFDdEJrVSxZQUFJbHFCLFVBQVU0USxJQUFJOUQsaUJBQWxCO01BQ0Q7QUFFRCxhQUFPb2Q7SUFDUjtJQUVEc0IsV0FBVzVFLFNBQVM7QUFDbEIsV0FBS3FELGNBQWNyRDtBQUNuQixVQUFJLEtBQUtqUCxTQUFMLEdBQWlCO0FBQ25CLGFBQUtpVCxlQUFMO0FBQ0EsYUFBSy9TLEtBQUw7TUFDRDtJQUNGO0lBRUR5VCxvQkFBb0IxRSxTQUFTO0FBQzNCLFVBQUksS0FBS29ELGtCQUFrQjtBQUN6QixhQUFLQSxpQkFBaUJ4QyxjQUFjWixPQUFwQztNQUNELE9BQU07QUFDTCxhQUFLb0QsbUJBQW1CLElBQUk1QyxnQkFBZ0IsaUNBQ3ZDLEtBQUt6YixVQURrQztVQUkxQ2liO1VBQ0FDLFlBQVksS0FBS1MseUJBQXlCLEtBQUszYixRQUFRNGQsV0FBM0M7UUFMOEIsRUFBcEI7TUFPekI7QUFFRCxhQUFPLEtBQUtTO0lBQ2I7SUFFRHFCLHlCQUF5QjtBQUN2QixhQUFPO1FBQ0wsQ0FBQ2hELHlCQUF5QixLQUFLOEMsVUFBTDs7SUFFN0I7SUFFREEsWUFBWTtBQUNWLGFBQU8sS0FBSzdELHlCQUF5QixLQUFLM2IsUUFBUStkLEtBQTNDLEtBQXFELEtBQUtoZSxTQUFTL04sYUFBYSx3QkFBM0I7SUFDN0Q7SUFHRDh0Qiw2QkFBNkJwbkIsT0FBTztBQUNsQyxhQUFPLEtBQUswRyxZQUFZc0Isb0JBQW9CaEksTUFBTUUsZ0JBQWdCLEtBQUttbkIsbUJBQUwsQ0FBM0Q7SUFDUjtJQUVEMVYsY0FBYztBQUNaLGFBQU8sS0FBS3JLLFFBQVEwZCxhQUFjLEtBQUthLE9BQU8sS0FBS0EsSUFBSWxxQixVQUFVQyxTQUFTNk0saUJBQTVCO0lBQy9DO0lBRUQ2SyxXQUFXO0FBQ1QsYUFBTyxLQUFLdVMsT0FBTyxLQUFLQSxJQUFJbHFCLFVBQVVDLFNBQVM4TSxpQkFBNUI7SUFDcEI7SUFFRG9PLGNBQWMrTyxLQUFLO0FBQ2pCLFlBQU0vTixZQUFZLE9BQU8sS0FBS3hRLFFBQVF3USxjQUFjLGFBQ2xELEtBQUt4USxRQUFRd1EsVUFBVXJmLEtBQUssTUFBTW90QixLQUFLLEtBQUt4ZSxRQUE1QyxJQUNBLEtBQUtDLFFBQVF3UTtBQUNmLFlBQU13UCxhQUFhNUMsY0FBYzVNLFVBQVU1USxZQUFWO0FBQ2pDLGFBQWNxUSxjQUFhLEtBQUtsUSxVQUFVd2UsS0FBSyxLQUFLdk8saUJBQWlCZ1EsVUFBdEIsQ0FBeEM7SUFDUjtJQUVEM1AsYUFBYTtBQUNYLFlBQU07UUFBRXZCLFFBQUFBO01BQUYsSUFBYSxLQUFLOU87QUFFeEIsVUFBSSxPQUFPOE8sWUFBVyxVQUFVO0FBQzlCLGVBQU9BLFFBQU8xYyxNQUFNLEdBQWIsRUFBa0I4USxJQUFJNUcsV0FBU3ZKLE9BQU8yVyxTQUFTcE4sT0FBTyxFQUF2QixDQUEvQjtNQUNSO0FBRUQsVUFBSSxPQUFPd1MsWUFBVyxZQUFZO0FBQ2hDLGVBQU93QixnQkFBY3hCLFFBQU93QixZQUFZLEtBQUt2USxRQUFsQjtNQUM1QjtBQUVELGFBQU8rTztJQUNSO0lBRUQ2TSx5QkFBeUJTLEtBQUs7QUFDNUIsYUFBTyxPQUFPQSxRQUFRLGFBQWFBLElBQUlqckIsS0FBSyxLQUFLNE8sUUFBZCxJQUEwQnFjO0lBQzlEO0lBRURwTSxpQkFBaUJnUSxZQUFZO0FBQzNCLFlBQU16UCx3QkFBd0I7UUFDNUJDLFdBQVd3UDtRQUNYdlAsV0FBVyxDQUNUO1VBQ0V6YSxNQUFNO1VBQ04wYSxTQUFTO1lBQ1BvTixvQkFBb0IsS0FBSzlkLFFBQVE4ZDtVQUQxQjtRQUZYLEdBTUE7VUFDRTluQixNQUFNO1VBQ04wYSxTQUFTO1lBQ1A1QixRQUFRLEtBQUt1QixXQUFMO1VBREQ7UUFGWCxHQU1BO1VBQ0VyYSxNQUFNO1VBQ04wYSxTQUFTO1lBQ1A5QixVQUFVLEtBQUs1TyxRQUFRNE87VUFEaEI7UUFGWCxHQU1BO1VBQ0U1WSxNQUFNO1VBQ04wYSxTQUFTO1lBQ1A1ZSxTQUFVLElBQUcsS0FBS3NOLFlBQVluSjtVQUR2QjtRQUZYLEdBTUE7VUFDRUQsTUFBTTtVQUNOMmEsU0FBUztVQUNUc1AsT0FBTztVQUNQOXBCLElBQUl1TCxVQUFRO0FBR1YsaUJBQUs0ZCxlQUFMLEVBQXNCdmhCLGFBQWEseUJBQXlCMkQsS0FBS3dlLE1BQU0xUCxTQUF2RTtVQUNEO1NBakNNOztBQXNDYixhQUFPLGtDQUNGRCx3QkFDQyxPQUFPLEtBQUt2USxRQUFRK08saUJBQWlCLGFBQWEsS0FBSy9PLFFBQVErTyxhQUFhd0IscUJBQTFCLElBQW1ELEtBQUt2USxRQUFRK087SUFFekg7SUFFRHlQLGdCQUFnQjtBQUNkLFlBQU0yQixXQUFXLEtBQUtuZ0IsUUFBUXpFLFFBQVFuSixNQUFNLEdBQTNCO0FBRWpCLGlCQUFXbUosV0FBVzRrQixVQUFVO0FBQzlCLFlBQUk1a0IsWUFBWSxTQUFTO0FBQ3ZCekMsdUJBQWFrQyxHQUFHLEtBQUsrRSxVQUFVLEtBQUtYLFlBQVl1QixVQUFVdWMsYUFBM0IsR0FBeUMsS0FBS2xkLFFBQVFqTyxVQUFVMkcsV0FBUztBQUN0RyxrQkFBTXFZLFVBQVUsS0FBSytPLDZCQUE2QnBuQixLQUFsQztBQUNoQnFZLG9CQUFRL08sT0FBUjtXQUZGO1FBSUQsV0FBVXpHLFlBQVl5aEIsZ0JBQWdCO0FBQ3JDLGdCQUFNb0QsVUFBVTdrQixZQUFZc2hCLGdCQUMxQixLQUFLemQsWUFBWXVCLFVBQVVvRixnQkFBM0IsSUFDQSxLQUFLM0csWUFBWXVCLFVBQVVvVCxlQUEzQjtBQUNGLGdCQUFNc00sV0FBVzlrQixZQUFZc2hCLGdCQUMzQixLQUFLemQsWUFBWXVCLFVBQVVxRixnQkFBM0IsSUFDQSxLQUFLNUcsWUFBWXVCLFVBQVV3YyxnQkFBM0I7QUFFRnJrQix1QkFBYWtDLEdBQUcsS0FBSytFLFVBQVVxZ0IsU0FBUyxLQUFLcGdCLFFBQVFqTyxVQUFVMkcsV0FBUztBQUN0RSxrQkFBTXFZLFVBQVUsS0FBSytPLDZCQUE2QnBuQixLQUFsQztBQUNoQnFZLG9CQUFRcU4sZUFBZTFsQixNQUFNTSxTQUFTLFlBQVk4akIsZ0JBQWdCRCxpQkFBaUI7QUFDbkY5TCxvQkFBUWdPLE9BQVI7V0FIRjtBQUtBam1CLHVCQUFha0MsR0FBRyxLQUFLK0UsVUFBVXNnQixVQUFVLEtBQUtyZ0IsUUFBUWpPLFVBQVUyRyxXQUFTO0FBQ3ZFLGtCQUFNcVksVUFBVSxLQUFLK08sNkJBQTZCcG5CLEtBQWxDO0FBQ2hCcVksb0JBQVFxTixlQUFlMWxCLE1BQU1NLFNBQVMsYUFBYThqQixnQkFBZ0JELGlCQUNqRTlMLFFBQVFoUixTQUFTekwsU0FBU29FLE1BQU0yQixhQUFoQztBQUVGMFcsb0JBQVErTixPQUFSO1dBTEY7UUFPRDtNQUNGO0FBRUQsV0FBS0Usb0JBQW9CLE1BQU07QUFDN0IsWUFBSSxLQUFLamYsVUFBVTtBQUNqQixlQUFLa00sS0FBTDtRQUNEOztBQUdIblQsbUJBQWFrQyxHQUFHLEtBQUsrRSxTQUFTaE0sUUFBUTRvQixjQUF0QixHQUF1Q0Msa0JBQWtCLEtBQUtvQyxpQkFBOUU7SUFDRDtJQUVEUCxZQUFZO0FBQ1YsWUFBTVYsUUFBUSxLQUFLaGUsU0FBUy9OLGFBQWEsT0FBM0I7QUFFZCxVQUFJLENBQUMrckIsT0FBTztBQUNWO01BQ0Q7QUFFRCxVQUFJLENBQUMsS0FBS2hlLFNBQVMvTixhQUFhLFlBQTNCLEtBQTRDLENBQUMsS0FBSytOLFNBQVN3YyxZQUFZbHFCLEtBQTFCLEdBQWtDO0FBQ2xGLGFBQUswTixTQUFTaEMsYUFBYSxjQUFjZ2dCLEtBQXpDO01BQ0Q7QUFFRCxXQUFLaGUsU0FBU2hDLGFBQWEsMEJBQTBCZ2dCLEtBQXJEO0FBQ0EsV0FBS2hlLFNBQVM5QixnQkFBZ0IsT0FBOUI7SUFDRDtJQUVEOGdCLFNBQVM7QUFDUCxVQUFJLEtBQUsvUyxTQUFMLEtBQW1CLEtBQUttUyxZQUFZO0FBQ3RDLGFBQUtBLGFBQWE7QUFDbEI7TUFDRDtBQUVELFdBQUtBLGFBQWE7QUFFbEIsV0FBS21DLFlBQVksTUFBTTtBQUNyQixZQUFJLEtBQUtuQyxZQUFZO0FBQ25CLGVBQUtqUyxLQUFMO1FBQ0Q7TUFDRixHQUFFLEtBQUtsTSxRQUFRNmQsTUFBTTNSLElBSnRCO0lBS0Q7SUFFRDRTLFNBQVM7QUFDUCxVQUFJLEtBQUtTLHFCQUFMLEdBQTZCO0FBQy9CO01BQ0Q7QUFFRCxXQUFLcEIsYUFBYTtBQUVsQixXQUFLbUMsWUFBWSxNQUFNO0FBQ3JCLFlBQUksQ0FBQyxLQUFLbkMsWUFBWTtBQUNwQixlQUFLbFMsS0FBTDtRQUNEO01BQ0YsR0FBRSxLQUFLak0sUUFBUTZkLE1BQU01UixJQUp0QjtJQUtEO0lBRURxVSxZQUFZeHBCLFNBQVN5cEIsU0FBUztBQUM1QnBYLG1CQUFhLEtBQUsrVSxRQUFOO0FBQ1osV0FBS0EsV0FBV2puQixXQUFXSCxTQUFTeXBCLE9BQVY7SUFDM0I7SUFFRGhCLHVCQUF1QjtBQUNyQixhQUFPdnVCLE9BQU8wSSxPQUFPLEtBQUswa0IsY0FBbkIsRUFBbUNsc0IsU0FBUyxJQUE1QztJQUNSO0lBRUQ0TSxXQUFXQyxRQUFRO0FBQ2pCLFlBQU15aEIsaUJBQWlCM2lCLFlBQVlLLGtCQUFrQixLQUFLNkIsUUFBbkM7QUFFdkIsaUJBQVcwZ0IsaUJBQWlCenZCLE9BQU8rSixLQUFLeWxCLGNBQVosR0FBNkI7QUFDdkQsWUFBSWhFLHNCQUFzQnRpQixJQUFJdW1CLGFBQTFCLEdBQTBDO0FBQzVDLGlCQUFPRCxlQUFlQztRQUN2QjtNQUNGO0FBRUQxaEIsZUFBUyxrQ0FDSnloQixpQkFDQyxPQUFPemhCLFdBQVcsWUFBWUEsU0FBU0EsU0FBUyxDQUFBO0FBRXREQSxlQUFTLEtBQUtDLGdCQUFnQkQsTUFBckI7QUFDVEEsZUFBUyxLQUFLRSxrQkFBa0JGLE1BQXZCO0FBQ1QsV0FBS0csaUJBQWlCSCxNQUF0QjtBQUNBLGFBQU9BO0lBQ1I7SUFFREUsa0JBQWtCRixRQUFRO0FBQ3hCQSxhQUFPNGUsWUFBWTVlLE9BQU80ZSxjQUFjLFFBQVFoc0IsU0FBU3lELE9BQU81QixXQUFXdUwsT0FBTzRlLFNBQVI7QUFFMUUsVUFBSSxPQUFPNWUsT0FBTzhlLFVBQVUsVUFBVTtBQUNwQzllLGVBQU84ZSxRQUFRO1VBQ2IzUixNQUFNbk4sT0FBTzhlO1VBQ2I1UixNQUFNbE4sT0FBTzhlOztNQUVoQjtBQUVELFVBQUksT0FBTzllLE9BQU9nZixVQUFVLFVBQVU7QUFDcENoZixlQUFPZ2YsUUFBUWhmLE9BQU9nZixNQUFNN3NCLFNBQWI7TUFDaEI7QUFFRCxVQUFJLE9BQU82TixPQUFPa2MsWUFBWSxVQUFVO0FBQ3RDbGMsZUFBT2tjLFVBQVVsYyxPQUFPa2MsUUFBUS9wQixTQUFmO01BQ2xCO0FBRUQsYUFBTzZOO0lBQ1I7SUFFRGdoQixxQkFBcUI7QUFDbkIsWUFBTWhoQixTQUFTLENBQUE7QUFFZixpQkFBVzFDLE9BQU8sS0FBSzJELFNBQVM7QUFDOUIsWUFBSSxLQUFLWixZQUFZVCxRQUFRdEMsU0FBUyxLQUFLMkQsUUFBUTNELE1BQU07QUFDdkQwQyxpQkFBTzFDLE9BQU8sS0FBSzJELFFBQVEzRDtRQUM1QjtNQUNGO0FBRUQwQyxhQUFPaE4sV0FBVztBQUNsQmdOLGFBQU94RCxVQUFVO0FBS2pCLGFBQU93RDtJQUNSO0lBRURrZ0IsaUJBQWlCO0FBQ2YsVUFBSSxLQUFLL1AsU0FBUztBQUNoQixhQUFLQSxRQUFRUyxRQUFiO0FBQ0EsYUFBS1QsVUFBVTtNQUNoQjtBQUVELFVBQUksS0FBS3FQLEtBQUs7QUFDWixhQUFLQSxJQUFJbGhCLE9BQVQ7QUFDQSxhQUFLa2hCLE1BQU07TUFDWjtJQUNGO0lBR3FCLE9BQWZub0IsZ0JBQWdCMkksUUFBUTtBQUM3QixhQUFPLEtBQUswQyxLQUFLLFdBQVk7QUFDM0IsY0FBTUMsT0FBT3NjLFFBQVF0ZCxvQkFBb0IsTUFBTTNCLE1BQWxDO0FBRWIsWUFBSSxPQUFPQSxXQUFXLFVBQVU7QUFDOUI7UUFDRDtBQUVELFlBQUksT0FBTzJDLEtBQUszQyxZQUFZLGFBQWE7QUFDdkMsZ0JBQU0sSUFBSVksVUFBVyxvQkFBbUJaLFNBQWxDO1FBQ1A7QUFFRDJDLGFBQUszQyxRQUFMO01BQ0QsQ0FaTTtJQWFSO0VBemdCaUM7QUFnaEJwQ2xKLHFCQUFtQm1vQixPQUFEO0FDeG1CbEIsTUFBTS9uQixTQUFPO0FBRWIsTUFBTXlxQixpQkFBaUI7QUFDdkIsTUFBTUMsbUJBQW1CO0FBRXpCLE1BQU1oaUIsWUFBVSxpQ0FDWHFmLFFBQVFyZixVQURHO0lBRWRzYyxTQUFTO0lBQ1RuTSxRQUFRLENBQUMsR0FBRyxDQUFKO0lBQ1IwQixXQUFXO0lBQ1g4SyxVQUFVO0lBS1YvZixTQUFTO0VBVks7QUFhaEIsTUFBTXFELGdCQUFjLGlDQUNmb2YsUUFBUXBmLGNBRE87SUFFbEJxYyxTQUFTO0VBRlM7QUFTcEIsTUFBTTJGLFVBQU4sY0FBc0I1QyxRQUFRO0lBRVYsV0FBUHJmLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0RpcEIsaUJBQWlCO0FBQ2YsYUFBTyxLQUFLTSxVQUFMLEtBQW9CLEtBQUtxQixZQUFMO0lBQzVCO0lBR0RuQix5QkFBeUI7QUFDdkIsYUFBTztRQUNMLENBQUNnQixpQkFBaUIsS0FBS2xCLFVBQUw7UUFDbEIsQ0FBQ21CLG1CQUFtQixLQUFLRSxZQUFMOztJQUV2QjtJQUVEQSxjQUFjO0FBQ1osYUFBTyxLQUFLbEYseUJBQXlCLEtBQUszYixRQUFRaWIsT0FBM0M7SUFDUjtJQUdxQixPQUFmN2tCLGdCQUFnQjJJLFFBQVE7QUFDN0IsYUFBTyxLQUFLMEMsS0FBSyxXQUFZO0FBQzNCLGNBQU1DLE9BQU9rZixRQUFRbGdCLG9CQUFvQixNQUFNM0IsTUFBbEM7QUFFYixZQUFJLE9BQU9BLFdBQVcsVUFBVTtBQUM5QjtRQUNEO0FBRUQsWUFBSSxPQUFPMkMsS0FBSzNDLFlBQVksYUFBYTtBQUN2QyxnQkFBTSxJQUFJWSxVQUFXLG9CQUFtQlosU0FBbEM7UUFDUDtBQUVEMkMsYUFBSzNDLFFBQUw7TUFDRCxDQVpNO0lBYVI7RUE5QzJCO0FBcUQ5QmxKLHFCQUFtQitxQixPQUFEO0FDOUVsQixNQUFNM3FCLFNBQU87QUFDYixNQUFNaUssYUFBVztBQUNqQixNQUFNRSxjQUFhLElBQUdGO0FBQ3RCLE1BQU15QixlQUFlO0FBRXJCLE1BQU1tZixpQkFBa0IsV0FBVTFnQjtBQUNsQyxNQUFNOGMsY0FBZSxRQUFPOWM7QUFDNUIsTUFBTThGLHdCQUF1QixPQUFNOUYsY0FBWXVCO0FBRS9DLE1BQU1vZiwyQkFBMkI7QUFDakMsTUFBTW5mLHNCQUFvQjtBQUUxQixNQUFNb2Ysb0JBQW9CO0FBQzFCLE1BQU1DLHdCQUF3QjtBQUM5QixNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMscUJBQXFCO0FBQzNCLE1BQU1DLHFCQUFxQjtBQUMzQixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMsc0JBQXVCLEdBQUVILHVCQUF1QkMsd0JBQXdCRCx1QkFBdUJFO0FBQ3JHLE1BQU1FLG9CQUFvQjtBQUMxQixNQUFNQyw2QkFBMkI7QUFFakMsTUFBTTdpQixZQUFVO0lBQ2RtUSxRQUFRO0lBQ1IyUyxZQUFZO0lBQ1pDLGNBQWM7SUFDZDNxQixRQUFRO0lBQ1I0cUIsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUFYO0VBTEc7QUFRaEIsTUFBTS9pQixnQkFBYztJQUNsQmtRLFFBQVE7SUFDUjJTLFlBQVk7SUFDWkMsY0FBYztJQUNkM3FCLFFBQVE7SUFDUjRxQixXQUFXO0VBTE87QUFZcEIsTUFBTUMsWUFBTixjQUF3QjloQixjQUFjO0lBQ3BDVixZQUFZdE4sU0FBU2lOLFFBQVE7QUFDM0IsWUFBTWpOLFNBQVNpTixNQUFmO0FBR0EsV0FBSzhpQixlQUFlLG9CQUFJamxCLElBQUo7QUFDcEIsV0FBS2tsQixzQkFBc0Isb0JBQUlsbEIsSUFBSjtBQUMzQixXQUFLbWxCLGVBQWVsdkIsaUJBQWlCLEtBQUtrTixRQUFOLEVBQWdCK1csY0FBYyxZQUFZLE9BQU8sS0FBSy9XO0FBQzFGLFdBQUtpaUIsZ0JBQWdCO0FBQ3JCLFdBQUtDLFlBQVk7QUFDakIsV0FBS0Msc0JBQXNCO1FBQ3pCQyxpQkFBaUI7UUFDakJDLGlCQUFpQjs7QUFFbkIsV0FBS0MsUUFBTDtJQUNEO0lBR2lCLFdBQVAxakIsVUFBVTtBQUNuQixhQUFPQTtJQUNSO0lBRXFCLFdBQVhDLGNBQWM7QUFDdkIsYUFBT0E7SUFDUjtJQUVjLFdBQUozSSxPQUFPO0FBQ2hCLGFBQU9BO0lBQ1I7SUFHRG9zQixVQUFVO0FBQ1IsV0FBS0MsaUNBQUw7QUFDQSxXQUFLQyx5QkFBTDtBQUVBLFVBQUksS0FBS04sV0FBVztBQUNsQixhQUFLQSxVQUFVTyxXQUFmO01BQ0QsT0FBTTtBQUNMLGFBQUtQLFlBQVksS0FBS1EsZ0JBQUw7TUFDbEI7QUFFRCxpQkFBV0MsV0FBVyxLQUFLWixvQkFBb0Jwb0IsT0FBekIsR0FBbUM7QUFDdkQsYUFBS3VvQixVQUFVVSxRQUFRRCxPQUF2QjtNQUNEO0lBQ0Y7SUFFRHZpQixVQUFVO0FBQ1IsV0FBSzhoQixVQUFVTyxXQUFmO0FBQ0EsWUFBTXJpQixRQUFOO0lBQ0Q7SUFHRGxCLGtCQUFrQkYsUUFBUTtBQUV4QkEsYUFBT2hJLFNBQVN2RCxXQUFXdUwsT0FBT2hJLE1BQVIsS0FBbUJwRixTQUFTeUQ7QUFHdEQySixhQUFPMGlCLGFBQWExaUIsT0FBTytQLFNBQVUsR0FBRS9QLE9BQU8rUCxzQkFBc0IvUCxPQUFPMGlCO0FBRTNFLFVBQUksT0FBTzFpQixPQUFPNGlCLGNBQWMsVUFBVTtBQUN4QzVpQixlQUFPNGlCLFlBQVk1aUIsT0FBTzRpQixVQUFVdnZCLE1BQU0sR0FBdkIsRUFBNEI4USxJQUFJNUcsV0FBU3ZKLE9BQU9DLFdBQVdzSixLQUFsQixDQUF6QztNQUNwQjtBQUVELGFBQU95QztJQUNSO0lBRUR3akIsMkJBQTJCO0FBQ3pCLFVBQUksQ0FBQyxLQUFLdmlCLFFBQVEwaEIsY0FBYztBQUM5QjtNQUNEO0FBR0Q1b0IsbUJBQWFDLElBQUksS0FBS2lILFFBQVFqSixRQUFRbW1CLFdBQXRDO0FBRUFwa0IsbUJBQWFrQyxHQUFHLEtBQUtnRixRQUFRakosUUFBUW1tQixhQUFhK0QsdUJBQXVCdm9CLFdBQVM7QUFDaEYsY0FBTWtxQixvQkFBb0IsS0FBS2Qsb0JBQW9CcGxCLElBQUloRSxNQUFNM0IsT0FBTzhyQixJQUExQztBQUMxQixZQUFJRCxtQkFBbUI7QUFDckJscUIsZ0JBQU13RCxlQUFOO0FBQ0EsZ0JBQU1ySCxPQUFPLEtBQUtrdEIsZ0JBQWdCbnZCO0FBQ2xDLGdCQUFNa3dCLFNBQVNGLGtCQUFrQkcsWUFBWSxLQUFLaGpCLFNBQVNnakI7QUFDM0QsY0FBSWx1QixLQUFLbXVCLFVBQVU7QUFDakJudUIsaUJBQUttdUIsU0FBUztjQUFFQyxLQUFLSDtjQUFRSSxVQUFVO2FBQXZDO0FBQ0E7VUFDRDtBQUdEcnVCLGVBQUt1aEIsWUFBWTBNO1FBQ2xCO09BYkg7SUFlRDtJQUVETCxrQkFBa0I7QUFDaEIsWUFBTS9SLFVBQVU7UUFDZDdiLE1BQU0sS0FBS2t0QjtRQUNYSixXQUFXLEtBQUszaEIsUUFBUTJoQjtRQUN4QkYsWUFBWSxLQUFLemhCLFFBQVF5aEI7O0FBRzNCLGFBQU8sSUFBSTBCLHFCQUFxQjVtQixhQUFXLEtBQUs2bUIsa0JBQWtCN21CLE9BQXZCLEdBQWlDbVUsT0FBckU7SUFDUjtJQUdEMFMsa0JBQWtCN21CLFNBQVM7QUFDekIsWUFBTThtQixnQkFBZ0I3SCxXQUFTLEtBQUtxRyxhQUFhbmxCLElBQUssSUFBRzhlLE1BQU16a0IsT0FBT3VzQixJQUF2QztBQUMvQixZQUFNOU8sV0FBV2dILFdBQVM7QUFDeEIsYUFBSzBHLG9CQUFvQkMsa0JBQWtCM0csTUFBTXprQixPQUFPZ3NCO0FBQ3hELGFBQUtRLFNBQVNGLGNBQWM3SCxLQUFELENBQTNCOztBQUdGLFlBQU00RyxtQkFBbUIsS0FBS0wsZ0JBQWdCcHdCLFNBQVMrQyxpQkFBaUIwaEI7QUFDeEUsWUFBTW9OLGtCQUFrQnBCLG1CQUFtQixLQUFLRixvQkFBb0JFO0FBQ3BFLFdBQUtGLG9CQUFvQkUsa0JBQWtCQTtBQUUzQyxpQkFBVzVHLFNBQVNqZixTQUFTO0FBQzNCLFlBQUksQ0FBQ2lmLE1BQU1pSSxnQkFBZ0I7QUFDekIsZUFBS3pCLGdCQUFnQjtBQUNyQixlQUFLMEIsa0JBQWtCTCxjQUFjN0gsS0FBRCxDQUFwQztBQUVBO1FBQ0Q7QUFFRCxjQUFNbUksMkJBQTJCbkksTUFBTXprQixPQUFPZ3NCLGFBQWEsS0FBS2Isb0JBQW9CQztBQUVwRixZQUFJcUIsbUJBQW1CRywwQkFBMEI7QUFDL0NuUCxtQkFBU2dILEtBQUQ7QUFFUixjQUFJLENBQUM0RyxpQkFBaUI7QUFDcEI7VUFDRDtBQUVEO1FBQ0Q7QUFHRCxZQUFJLENBQUNvQixtQkFBbUIsQ0FBQ0csMEJBQTBCO0FBQ2pEblAsbUJBQVNnSCxLQUFEO1FBQ1Q7TUFDRjtJQUNGO0lBRUQ4RyxtQ0FBbUM7QUFDakMsV0FBS1QsZUFBZSxvQkFBSWpsQixJQUFKO0FBQ3BCLFdBQUtrbEIsc0JBQXNCLG9CQUFJbGxCLElBQUo7QUFFM0IsWUFBTWduQixjQUFjMWhCLGVBQWV2SSxLQUFLc25CLHVCQUF1QixLQUFLamhCLFFBQVFqSixNQUF4RDtBQUVwQixpQkFBVzhzQixVQUFVRCxhQUFhO0FBRWhDLFlBQUksQ0FBQ0MsT0FBT2hCLFFBQVEzdUIsV0FBVzJ2QixNQUFELEdBQVU7QUFDdEM7UUFDRDtBQUVELGNBQU1qQixvQkFBb0IxZ0IsZUFBZUcsUUFBUXdoQixPQUFPaEIsTUFBTSxLQUFLOWlCLFFBQXpDO0FBRzFCLFlBQUlyTSxVQUFVa3ZCLGlCQUFELEdBQXFCO0FBQ2hDLGVBQUtmLGFBQWFobEIsSUFBSWduQixPQUFPaEIsTUFBTWdCLE1BQW5DO0FBQ0EsZUFBSy9CLG9CQUFvQmpsQixJQUFJZ25CLE9BQU9oQixNQUFNRCxpQkFBMUM7UUFDRDtNQUNGO0lBQ0Y7SUFFRFcsU0FBU3hzQixRQUFRO0FBQ2YsVUFBSSxLQUFLaXJCLGtCQUFrQmpyQixRQUFRO0FBQ2pDO01BQ0Q7QUFFRCxXQUFLMnNCLGtCQUFrQixLQUFLMWpCLFFBQVFqSixNQUFwQztBQUNBLFdBQUtpckIsZ0JBQWdCanJCO0FBQ3JCQSxhQUFPMUMsVUFBVTRRLElBQUlyRCxtQkFBckI7QUFDQSxXQUFLa2lCLGlCQUFpQi9zQixNQUF0QjtBQUVBK0IsbUJBQWF5QyxRQUFRLEtBQUt3RSxVQUFVK2dCLGdCQUFnQjtRQUFFem1CLGVBQWV0RDtPQUFyRTtJQUNEO0lBRUQrc0IsaUJBQWlCL3NCLFFBQVE7QUFFdkIsVUFBSUEsT0FBTzFDLFVBQVVDLFNBQVN5c0Isd0JBQTFCLEdBQXFEO0FBQ3ZEN2UsdUJBQWVHLFFBQVFtZiw0QkFBMEJ6cUIsT0FBT2hELFFBQVF3dEIsaUJBQWYsQ0FBakQsRUFDR2x0QixVQUFVNFEsSUFBSXJELG1CQURqQjtBQUVBO01BQ0Q7QUFFRCxpQkFBV21pQixhQUFhN2hCLGVBQWVPLFFBQVExTCxRQUFRbXFCLHVCQUEvQixHQUF5RDtBQUcvRSxtQkFBVzhDLFFBQVE5aEIsZUFBZVMsS0FBS29oQixXQUFXekMsbUJBQS9CLEdBQXFEO0FBQ3RFMEMsZUFBSzN2QixVQUFVNFEsSUFBSXJELG1CQUFuQjtRQUNEO01BQ0Y7SUFDRjtJQUVEOGhCLGtCQUFrQnBZLFFBQVE7QUFDeEJBLGFBQU9qWCxVQUFVZ0osT0FBT3VFLG1CQUF4QjtBQUVBLFlBQU1xaUIsY0FBYy9oQixlQUFldkksS0FBTSxHQUFFc25CLHlCQUF5QnJmLHVCQUFxQjBKLE1BQXJFO0FBQ3BCLGlCQUFXNFksUUFBUUQsYUFBYTtBQUM5QkMsYUFBSzd2QixVQUFVZ0osT0FBT3VFLG1CQUF0QjtNQUNEO0lBQ0Y7SUFHcUIsT0FBZnhMLGdCQUFnQjJJLFFBQVE7QUFDN0IsYUFBTyxLQUFLMEMsS0FBSyxXQUFZO0FBQzNCLGNBQU1DLE9BQU9rZ0IsVUFBVWxoQixvQkFBb0IsTUFBTTNCLE1BQXBDO0FBRWIsWUFBSSxPQUFPQSxXQUFXLFVBQVU7QUFDOUI7UUFDRDtBQUVELFlBQUkyQyxLQUFLM0MsWUFBWWhPLFVBQWFnTyxPQUFPNU0sV0FBVyxHQUFsQixLQUEwQjRNLFdBQVcsZUFBZTtBQUNwRixnQkFBTSxJQUFJWSxVQUFXLG9CQUFtQlosU0FBbEM7UUFDUDtBQUVEMkMsYUFBSzNDLFFBQUw7TUFDRCxDQVpNO0lBYVI7RUF4Tm1DO0FBK050Q2pHLGVBQWFrQyxHQUFHcEksUUFBUXNULHVCQUFxQixNQUFNO0FBQ2pELGVBQVdpZSxPQUFPamlCLGVBQWV2SSxLQUFLcW5CLGlCQUFwQixHQUF3QztBQUN4RFksZ0JBQVVsaEIsb0JBQW9CeWpCLEdBQTlCO0lBQ0Q7RUFDRixDQUpEO0FBVUF0dUIscUJBQW1CK3JCLFNBQUQ7QUNuUmxCLE1BQU0zckIsU0FBTztBQUNiLE1BQU1pSyxhQUFXO0FBQ2pCLE1BQU1FLGNBQWEsSUFBR0Y7QUFFdEIsTUFBTTBLLGVBQWMsT0FBTXhLO0FBQzFCLE1BQU15SyxpQkFBZ0IsU0FBUXpLO0FBQzlCLE1BQU1zSyxlQUFjLE9BQU10SztBQUMxQixNQUFNdUssZ0JBQWUsUUFBT3ZLO0FBQzVCLE1BQU0wQix1QkFBd0IsUUFBTzFCO0FBQ3JDLE1BQU0wRixnQkFBaUIsVUFBUzFGO0FBQ2hDLE1BQU04RixzQkFBdUIsT0FBTTlGO0FBRW5DLE1BQU1pRixpQkFBaUI7QUFDdkIsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU04SCxlQUFlO0FBQ3JCLE1BQU1DLGlCQUFpQjtBQUV2QixNQUFNekwsb0JBQW9CO0FBQzFCLE1BQU1ULG9CQUFrQjtBQUN4QixNQUFNQyxvQkFBa0I7QUFDeEIsTUFBTWdqQixpQkFBaUI7QUFFdkIsTUFBTTVDLDJCQUEyQjtBQUNqQyxNQUFNNkMseUJBQXlCO0FBQy9CLE1BQU1DLCtCQUErQjtBQUVyQyxNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsaUJBQWlCO0FBQ3ZCLE1BQU1DLGlCQUFrQixZQUFXSCxpREFBaURBLDZDQUE2Q0E7QUFDakksTUFBTXppQix1QkFBdUI7QUFDN0IsTUFBTTZpQixzQkFBdUIsR0FBRUQsbUJBQW1CNWlCO0FBRWxELE1BQU04aUIsOEJBQStCLElBQUcvaUIsNkNBQTZDQSw4Q0FBOENBO0FBTW5JLE1BQU1nakIsTUFBTixjQUFrQjlrQixjQUFjO0lBQzlCVixZQUFZdE4sU0FBUztBQUNuQixZQUFNQSxPQUFOO0FBQ0EsV0FBS3FkLFVBQVUsS0FBS3BQLFNBQVNoTSxRQUFRd3dCLGtCQUF0QjtBQUVmLFVBQUksQ0FBQyxLQUFLcFYsU0FBUztBQUNqQjtNQUdEO0FBR0QsV0FBSzBWLHNCQUFzQixLQUFLMVYsU0FBUyxLQUFLMlYsYUFBTCxDQUF6QztBQUVBaHNCLG1CQUFha0MsR0FBRyxLQUFLK0UsVUFBVStGLGVBQWVwTixXQUFTLEtBQUtxUSxTQUFTclEsS0FBZCxDQUF2RDtJQUNEO0lBR2MsV0FBSnpDLE9BQU87QUFDaEIsYUFBT0E7SUFDUjtJQUdEaVcsT0FBTztBQUNMLFlBQU02WSxZQUFZLEtBQUtobEI7QUFDdkIsVUFBSSxLQUFLaWxCLGNBQWNELFNBQW5CLEdBQStCO0FBQ2pDO01BQ0Q7QUFHRCxZQUFNRSxTQUFTLEtBQUtDLGVBQUw7QUFFZixZQUFNclYsWUFBWW9WLFNBQ2hCbnNCLGFBQWF5QyxRQUFRMHBCLFFBQVFyYSxjQUFZO1FBQUV2USxlQUFlMHFCO09BQTFELElBQ0E7QUFFRixZQUFNeFYsWUFBWXpXLGFBQWF5QyxRQUFRd3BCLFdBQVdyYSxjQUFZO1FBQUVyUSxlQUFlNHFCO01BQWpCLENBQTVDO0FBRWxCLFVBQUkxVixVQUFVM1Qsb0JBQXFCaVUsYUFBYUEsVUFBVWpVLGtCQUFtQjtBQUMzRTtNQUNEO0FBRUQsV0FBS3VwQixZQUFZRixRQUFRRixTQUF6QjtBQUNBLFdBQUtLLFVBQVVMLFdBQVdFLE1BQTFCO0lBQ0Q7SUFHREcsVUFBVXR6QixTQUFTdXpCLGFBQWE7QUFDOUIsVUFBSSxDQUFDdnpCLFNBQVM7QUFDWjtNQUNEO0FBRURBLGNBQVF1QyxVQUFVNFEsSUFBSXJELGlCQUF0QjtBQUVBLFdBQUt3akIsVUFBVTV5Qix1QkFBdUJWLE9BQUQsQ0FBckM7QUFFQSxZQUFNNGEsV0FBVyxNQUFNO0FBQ3JCLFlBQUk1YSxRQUFRRSxhQUFhLE1BQXJCLE1BQWlDLE9BQU87QUFDMUNGLGtCQUFRdUMsVUFBVTRRLElBQUk3RCxpQkFBdEI7QUFDQTtRQUNEO0FBRUR0UCxnQkFBUW1NLGdCQUFnQixVQUF4QjtBQUNBbk0sZ0JBQVFpTSxhQUFhLGlCQUFpQixJQUF0QztBQUNBLGFBQUt1bkIsZ0JBQWdCeHpCLFNBQVMsSUFBOUI7QUFDQWdILHFCQUFheUMsUUFBUXpKLFNBQVM2WSxlQUFhO1VBQ3pDdFEsZUFBZWdyQjtTQURqQjs7QUFLRixXQUFLOWtCLGVBQWVtTSxVQUFVNWEsU0FBU0EsUUFBUXVDLFVBQVVDLFNBQVM2TSxpQkFBM0IsQ0FBdkM7SUFDRDtJQUVEZ2tCLFlBQVlyekIsU0FBU3V6QixhQUFhO0FBQ2hDLFVBQUksQ0FBQ3Z6QixTQUFTO0FBQ1o7TUFDRDtBQUVEQSxjQUFRdUMsVUFBVWdKLE9BQU91RSxpQkFBekI7QUFDQTlQLGNBQVEwbEIsS0FBUjtBQUVBLFdBQUsyTixZQUFZM3lCLHVCQUF1QlYsT0FBRCxDQUF2QztBQUVBLFlBQU00YSxXQUFXLE1BQU07QUFDckIsWUFBSTVhLFFBQVFFLGFBQWEsTUFBckIsTUFBaUMsT0FBTztBQUMxQ0Ysa0JBQVF1QyxVQUFVZ0osT0FBTytELGlCQUF6QjtBQUNBO1FBQ0Q7QUFFRHRQLGdCQUFRaU0sYUFBYSxpQkFBaUIsS0FBdEM7QUFDQWpNLGdCQUFRaU0sYUFBYSxZQUFZLElBQWpDO0FBQ0EsYUFBS3VuQixnQkFBZ0J4ekIsU0FBUyxLQUE5QjtBQUNBZ0gscUJBQWF5QyxRQUFRekosU0FBUytZLGdCQUFjO1VBQUV4USxlQUFlZ3JCO1NBQTdEOztBQUdGLFdBQUs5a0IsZUFBZW1NLFVBQVU1YSxTQUFTQSxRQUFRdUMsVUFBVUMsU0FBUzZNLGlCQUEzQixDQUF2QztJQUNEO0lBRUQ0SCxTQUFTclEsT0FBTztBQUNkLFVBQUksQ0FBRSxDQUFDMk0sZ0JBQWdCQyxpQkFBaUI4SCxjQUFjQyxjQUFoRCxFQUFnRW5iLFNBQVN3RyxNQUFNMkQsR0FBL0UsR0FBc0Y7QUFDMUY7TUFDRDtBQUVEM0QsWUFBTTZZLGdCQUFOO0FBQ0E3WSxZQUFNd0QsZUFBTjtBQUNBLFlBQU15TixTQUFTLENBQUNyRSxpQkFBaUIrSCxjQUFsQixFQUFrQ25iLFNBQVN3RyxNQUFNMkQsR0FBakQ7QUFDZixZQUFNa3BCLG9CQUFvQnJ1QixxQkFBcUIsS0FBSzR0QixhQUFMLEVBQW9CeG1CLE9BQU94TSxhQUFXLENBQUNvQyxXQUFXcEMsT0FBRCxDQUFqRCxHQUE2RDRHLE1BQU0zQixRQUFRNFMsUUFBUSxJQUFwRjtBQUU5QyxVQUFJNGIsbUJBQW1CO0FBQ3JCQSwwQkFBa0I5VixNQUFNO1VBQUUrVixlQUFlO1NBQXpDO0FBQ0FaLFlBQUlsa0Isb0JBQW9CNmtCLGlCQUF4QixFQUEyQ3JaLEtBQTNDO01BQ0Q7SUFDRjtJQUVENFksZUFBZTtBQUNiLGFBQU81aUIsZUFBZXZJLEtBQUsrcUIscUJBQXFCLEtBQUt2VixPQUE5QztJQUNSO0lBRUQrVixpQkFBaUI7QUFDZixhQUFPLEtBQUtKLGFBQUwsRUFBb0JuckIsS0FBSzRJLFdBQVMsS0FBS3lpQixjQUFjemlCLEtBQW5CLENBQWxDLEtBQWdFO0lBQ3hFO0lBRURzaUIsc0JBQXNCdlosUUFBUWhKLFVBQVU7QUFDdEMsV0FBS21qQix5QkFBeUJuYSxRQUFRLFFBQVEsU0FBOUM7QUFFQSxpQkFBVy9JLFNBQVNELFVBQVU7QUFDNUIsYUFBS29qQiw2QkFBNkJuakIsS0FBbEM7TUFDRDtJQUNGO0lBRURtakIsNkJBQTZCbmpCLE9BQU87QUFDbENBLGNBQVEsS0FBS29qQixpQkFBaUJwakIsS0FBdEI7QUFDUixZQUFNcWpCLFdBQVcsS0FBS1osY0FBY3ppQixLQUFuQjtBQUNqQixZQUFNc2pCLFlBQVksS0FBS0MsaUJBQWlCdmpCLEtBQXRCO0FBQ2xCQSxZQUFNeEUsYUFBYSxpQkFBaUI2bkIsUUFBcEM7QUFFQSxVQUFJQyxjQUFjdGpCLE9BQU87QUFDdkIsYUFBS2tqQix5QkFBeUJJLFdBQVcsUUFBUSxjQUFqRDtNQUNEO0FBRUQsVUFBSSxDQUFDRCxVQUFVO0FBQ2JyakIsY0FBTXhFLGFBQWEsWUFBWSxJQUEvQjtNQUNEO0FBRUQsV0FBSzBuQix5QkFBeUJsakIsT0FBTyxRQUFRLEtBQTdDO0FBR0EsV0FBS3dqQixtQ0FBbUN4akIsS0FBeEM7SUFDRDtJQUVEd2pCLG1DQUFtQ3hqQixPQUFPO0FBQ3hDLFlBQU14TCxTQUFTdkUsdUJBQXVCK1AsS0FBRDtBQUVyQyxVQUFJLENBQUN4TCxRQUFRO0FBQ1g7TUFDRDtBQUVELFdBQUswdUIseUJBQXlCMXVCLFFBQVEsUUFBUSxVQUE5QztBQUVBLFVBQUl3TCxNQUFNK2dCLElBQUk7QUFDWixhQUFLbUMseUJBQXlCMXVCLFFBQVEsbUJBQW9CLElBQUd3TCxNQUFNK2dCLElBQW5FO01BQ0Q7SUFDRjtJQUVEZ0MsZ0JBQWdCeHpCLFNBQVNrMEIsTUFBTTtBQUM3QixZQUFNSCxZQUFZLEtBQUtDLGlCQUFpQmgwQixPQUF0QjtBQUNsQixVQUFJLENBQUMrekIsVUFBVXh4QixVQUFVQyxTQUFTOHZCLGNBQTdCLEdBQThDO0FBQ2pEO01BQ0Q7QUFFRCxZQUFNcGlCLFNBQVMsQ0FBQ2pRLFVBQVVxaEIsY0FBYztBQUN0QyxjQUFNdGhCLFdBQVVvUSxlQUFlRyxRQUFRdFEsVUFBVTh6QixTQUFqQztBQUNoQixZQUFJL3pCLFVBQVM7QUFDWEEsVUFBQUEsU0FBUXVDLFVBQVUyTixPQUFPb1IsV0FBVzRTLElBQXBDO1FBQ0Q7O0FBR0hoa0IsYUFBT3dmLDBCQUEwQjVmLGlCQUEzQjtBQUNOSSxhQUFPcWlCLHdCQUF3QmpqQixpQkFBekI7QUFDTnlrQixnQkFBVTluQixhQUFhLGlCQUFpQmlvQixJQUF4QztJQUNEO0lBRURQLHlCQUF5QjN6QixTQUFTa21CLFdBQVcxYixPQUFPO0FBQ2xELFVBQUksQ0FBQ3hLLFFBQVEwQyxhQUFhd2pCLFNBQXJCLEdBQWlDO0FBQ3BDbG1CLGdCQUFRaU0sYUFBYWlhLFdBQVcxYixLQUFoQztNQUNEO0lBQ0Y7SUFFRDBvQixjQUFjclosTUFBTTtBQUNsQixhQUFPQSxLQUFLdFgsVUFBVUMsU0FBU3NOLGlCQUF4QjtJQUNSO0lBR0QrakIsaUJBQWlCaGEsTUFBTTtBQUNyQixhQUFPQSxLQUFLbkosUUFBUWtpQixtQkFBYixJQUFvQy9ZLE9BQU96SixlQUFlRyxRQUFRcWlCLHFCQUFxQi9ZLElBQTVDO0lBQ25EO0lBR0RtYSxpQkFBaUJuYSxNQUFNO0FBQ3JCLGFBQU9BLEtBQUs1WCxRQUFReXdCLGNBQWIsS0FBZ0M3WTtJQUN4QztJQUdxQixPQUFmdlYsZ0JBQWdCMkksUUFBUTtBQUM3QixhQUFPLEtBQUswQyxLQUFLLFdBQVk7QUFDM0IsY0FBTUMsT0FBT2tqQixJQUFJbGtCLG9CQUFvQixJQUF4QjtBQUViLFlBQUksT0FBTzNCLFdBQVcsVUFBVTtBQUM5QjtRQUNEO0FBRUQsWUFBSTJDLEtBQUszQyxZQUFZaE8sVUFBYWdPLE9BQU81TSxXQUFXLEdBQWxCLEtBQTBCNE0sV0FBVyxlQUFlO0FBQ3BGLGdCQUFNLElBQUlZLFVBQVcsb0JBQW1CWixTQUFsQztRQUNQO0FBRUQyQyxhQUFLM0MsUUFBTDtNQUNELENBWk07SUFhUjtFQXpONkI7QUFnT2hDakcsZUFBYWtDLEdBQUdySixVQUFVbVEsc0JBQXNCRCxzQkFBc0IsU0FBVW5KLE9BQU87QUFDckYsUUFBSSxDQUFDLEtBQUssTUFBTixFQUFjeEcsU0FBUyxLQUFLOE8sT0FBNUIsR0FBc0M7QUFDeEN0SSxZQUFNd0QsZUFBTjtJQUNEO0FBRUQsUUFBSWhJLFdBQVcsSUFBRCxHQUFRO0FBQ3BCO0lBQ0Q7QUFFRDB3QixRQUFJbGtCLG9CQUFvQixJQUF4QixFQUE4QndMLEtBQTlCO0VBQ0QsQ0FWRDtBQWVBcFQsZUFBYWtDLEdBQUdwSSxRQUFRc1QscUJBQXFCLE1BQU07QUFDakQsZUFBV3BVLFdBQVdvUSxlQUFldkksS0FBS2dyQiwyQkFBcEIsR0FBa0Q7QUFDdEVDLFVBQUlsa0Isb0JBQW9CNU8sT0FBeEI7SUFDRDtFQUNGLENBSkQ7QUFTQStELHFCQUFtQit1QixHQUFEO0FDOVJsQixNQUFNM3VCLE9BQU87QUFDYixNQUFNaUssV0FBVztBQUNqQixNQUFNRSxZQUFhLElBQUdGO0FBRXRCLE1BQU0rbEIsa0JBQW1CLFlBQVc3bEI7QUFDcEMsTUFBTThsQixpQkFBa0IsV0FBVTlsQjtBQUNsQyxNQUFNMlQsZ0JBQWlCLFVBQVMzVDtBQUNoQyxNQUFNK2MsaUJBQWtCLFdBQVUvYztBQUNsQyxNQUFNd0ssYUFBYyxPQUFNeEs7QUFDMUIsTUFBTXlLLGVBQWdCLFNBQVF6SztBQUM5QixNQUFNc0ssYUFBYyxPQUFNdEs7QUFDMUIsTUFBTXVLLGNBQWUsUUFBT3ZLO0FBRTVCLE1BQU1lLGtCQUFrQjtBQUN4QixNQUFNZ2xCLGtCQUFrQjtBQUN4QixNQUFNL2tCLGtCQUFrQjtBQUN4QixNQUFNK1YscUJBQXFCO0FBRTNCLE1BQU12WSxjQUFjO0lBQ2xCOGUsV0FBVztJQUNYMEksVUFBVTtJQUNWdkksT0FBTztFQUhXO0FBTXBCLE1BQU1sZixVQUFVO0lBQ2QrZSxXQUFXO0lBQ1gwSSxVQUFVO0lBQ1Z2SSxPQUFPO0VBSE87QUFVaEIsTUFBTXdJLFFBQU4sY0FBb0J2bUIsY0FBYztJQUNoQ1YsWUFBWXROLFNBQVNpTixRQUFRO0FBQzNCLFlBQU1qTixTQUFTaU4sTUFBZjtBQUVBLFdBQUttZixXQUFXO0FBQ2hCLFdBQUtvSSx1QkFBdUI7QUFDNUIsV0FBS0MsMEJBQTBCO0FBQy9CLFdBQUsvSCxjQUFMO0lBQ0Q7SUFHaUIsV0FBUDdmLFVBQVU7QUFDbkIsYUFBT0E7SUFDUjtJQUVxQixXQUFYQyxjQUFjO0FBQ3ZCLGFBQU9BO0lBQ1I7SUFFYyxXQUFKM0ksT0FBTztBQUNoQixhQUFPQTtJQUNSO0lBR0RpVyxPQUFPO0FBQ0wsWUFBTXFELFlBQVl6VyxhQUFheUMsUUFBUSxLQUFLd0UsVUFBVTJLLFVBQXBDO0FBRWxCLFVBQUk2RSxVQUFVM1Qsa0JBQWtCO0FBQzlCO01BQ0Q7QUFFRCxXQUFLNHFCLGNBQUw7QUFFQSxVQUFJLEtBQUt4bUIsUUFBUTBkLFdBQVc7QUFDMUIsYUFBSzNkLFNBQVMxTCxVQUFVNFEsSUFBSTlELGVBQTVCO01BQ0Q7QUFFRCxZQUFNdUwsV0FBVyxNQUFNO0FBQ3JCLGFBQUszTSxTQUFTMUwsVUFBVWdKLE9BQU84WixrQkFBL0I7QUFDQXJlLHFCQUFheUMsUUFBUSxLQUFLd0UsVUFBVTRLLFdBQXBDO0FBRUEsYUFBSzhiLG1CQUFMOztBQUdGLFdBQUsxbUIsU0FBUzFMLFVBQVVnSixPQUFPOG9CLGVBQS9CO0FBQ0FueEIsYUFBTyxLQUFLK0ssUUFBTjtBQUNOLFdBQUtBLFNBQVMxTCxVQUFVNFEsSUFBSTdELGlCQUFpQitWLGtCQUE3QztBQUVBLFdBQUs1VyxlQUFlbU0sVUFBVSxLQUFLM00sVUFBVSxLQUFLQyxRQUFRMGQsU0FBMUQ7SUFDRDtJQUVEelIsT0FBTztBQUNMLFVBQUksQ0FBQyxLQUFLeWEsUUFBTCxHQUFnQjtBQUNuQjtNQUNEO0FBRUQsWUFBTTdXLFlBQVkvVyxhQUFheUMsUUFBUSxLQUFLd0UsVUFBVTZLLFVBQXBDO0FBRWxCLFVBQUlpRixVQUFValUsa0JBQWtCO0FBQzlCO01BQ0Q7QUFFRCxZQUFNOFEsV0FBVyxNQUFNO0FBQ3JCLGFBQUszTSxTQUFTMUwsVUFBVTRRLElBQUlraEIsZUFBNUI7QUFDQSxhQUFLcG1CLFNBQVMxTCxVQUFVZ0osT0FBTzhaLG9CQUFvQi9WLGVBQW5EO0FBQ0F0SSxxQkFBYXlDLFFBQVEsS0FBS3dFLFVBQVU4SyxZQUFwQzs7QUFHRixXQUFLOUssU0FBUzFMLFVBQVU0USxJQUFJa1Msa0JBQTVCO0FBQ0EsV0FBSzVXLGVBQWVtTSxVQUFVLEtBQUszTSxVQUFVLEtBQUtDLFFBQVEwZCxTQUExRDtJQUNEO0lBRUR2ZCxVQUFVO0FBQ1IsV0FBS3FtQixjQUFMO0FBRUEsVUFBSSxLQUFLRSxRQUFMLEdBQWdCO0FBQ2xCLGFBQUszbUIsU0FBUzFMLFVBQVVnSixPQUFPK0QsZUFBL0I7TUFDRDtBQUVELFlBQU1qQixRQUFOO0lBQ0Q7SUFFRHVtQixVQUFVO0FBQ1IsYUFBTyxLQUFLM21CLFNBQVMxTCxVQUFVQyxTQUFTOE0sZUFBakM7SUFDUjtJQUlEcWxCLHFCQUFxQjtBQUNuQixVQUFJLENBQUMsS0FBS3ptQixRQUFRb21CLFVBQVU7QUFDMUI7TUFDRDtBQUVELFVBQUksS0FBS0Usd0JBQXdCLEtBQUtDLHlCQUF5QjtBQUM3RDtNQUNEO0FBRUQsV0FBS3JJLFdBQVdqbkIsV0FBVyxNQUFNO0FBQy9CLGFBQUtnVixLQUFMO01BQ0QsR0FBRSxLQUFLak0sUUFBUTZkLEtBRlU7SUFHM0I7SUFFRDhJLGVBQWVqdUIsT0FBT2t1QixlQUFlO0FBQ25DLGNBQVFsdUIsTUFBTU0sTUFBZDtRQUNFLEtBQUs7UUFDTCxLQUFLLFlBQVk7QUFDZixlQUFLc3RCLHVCQUF1Qk07QUFDNUI7UUFDRDtRQUVELEtBQUs7UUFDTCxLQUFLLFlBQVk7QUFDZixlQUFLTCwwQkFBMEJLO0FBQy9CO1FBQ0Q7TUFYSDtBQWtCQSxVQUFJQSxlQUFlO0FBQ2pCLGFBQUtKLGNBQUw7QUFDQTtNQUNEO0FBRUQsWUFBTTVjLGNBQWNsUixNQUFNMkI7QUFDMUIsVUFBSSxLQUFLMEYsYUFBYTZKLGVBQWUsS0FBSzdKLFNBQVN6TCxTQUFTc1YsV0FBdkIsR0FBcUM7QUFDeEU7TUFDRDtBQUVELFdBQUs2YyxtQkFBTDtJQUNEO0lBRURqSSxnQkFBZ0I7QUFDZDFsQixtQkFBYWtDLEdBQUcsS0FBSytFLFVBQVVrbUIsaUJBQWlCdnRCLFdBQVMsS0FBS2l1QixlQUFlanVCLE9BQU8sSUFBM0IsQ0FBekQ7QUFDQUksbUJBQWFrQyxHQUFHLEtBQUsrRSxVQUFVbW1CLGdCQUFnQnh0QixXQUFTLEtBQUtpdUIsZUFBZWp1QixPQUFPLEtBQTNCLENBQXhEO0FBQ0FJLG1CQUFha0MsR0FBRyxLQUFLK0UsVUFBVWdVLGVBQWVyYixXQUFTLEtBQUtpdUIsZUFBZWp1QixPQUFPLElBQTNCLENBQXZEO0FBQ0FJLG1CQUFha0MsR0FBRyxLQUFLK0UsVUFBVW9kLGdCQUFnQnprQixXQUFTLEtBQUtpdUIsZUFBZWp1QixPQUFPLEtBQTNCLENBQXhEO0lBQ0Q7SUFFRDh0QixnQkFBZ0I7QUFDZHJkLG1CQUFhLEtBQUsrVSxRQUFOO0FBQ1osV0FBS0EsV0FBVztJQUNqQjtJQUdxQixPQUFmOW5CLGdCQUFnQjJJLFFBQVE7QUFDN0IsYUFBTyxLQUFLMEMsS0FBSyxXQUFZO0FBQzNCLGNBQU1DLE9BQU8ya0IsTUFBTTNsQixvQkFBb0IsTUFBTTNCLE1BQWhDO0FBRWIsWUFBSSxPQUFPQSxXQUFXLFVBQVU7QUFDOUIsY0FBSSxPQUFPMkMsS0FBSzNDLFlBQVksYUFBYTtBQUN2QyxrQkFBTSxJQUFJWSxVQUFXLG9CQUFtQlosU0FBbEM7VUFDUDtBQUVEMkMsZUFBSzNDLFFBQVEsSUFBYjtRQUNEO01BQ0YsQ0FWTTtJQVdSO0VBL0orQjtBQXNLbEM2Qix1QkFBcUJ5bEIsS0FBRDtBQU1wQnh3QixxQkFBbUJ3d0IsS0FBRDs7O0FyRnpObEIscUJBQU87OztBc0ZMUCxzQkFBYztBQUVkLG9CQUFBUSxTQUFFLFdBQVk7QUFDWixzQkFBQUEsU0FBRSxhQUFhLEVBQUUsT0FBTyxXQUFZO0FBQ2xDLGVBQVMsV0FBVyxLQUFLO0FBQUEsSUFDM0IsQ0FBQztBQUFBLEVBQ0gsQ0FBQzs7O0FDTkQsTUFBQUMsaUJBQWM7OztBQ0FkLE1BQU0sYUFBYTtBQUFBLElBQ2pCLGFBQWU7QUFBQSxJQUNmLFlBQWU7QUFBQSxJQUNmLGFBQWU7QUFBQSxJQUNmLGFBQWU7QUFBQSxJQUNmLGFBQWU7QUFBQSxJQUNmLGFBQWU7QUFBQSxJQUNmLGFBQWU7QUFBQSxJQUNmLFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLElBQ0EsWUFBZTtBQUFBLElBQ2YsYUFBZTtBQUFBLElBQ2YsYUFBZTtBQUFBLElBQ2YsY0FBZTtBQUFBLElBQ2YsY0FBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsWUFBZTtBQUFBLElBQ2YsYUFBZTtBQUFBLElBQ2YsY0FBZTtBQUFBLElBQ2YsY0FBZTtBQUFBLElBQ2YsY0FBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsZUFBZ0I7QUFBQSxJQUNoQixlQUFlO0FBQUEsRUFDakI7QUFDQSxNQUFPLHFCQUFROzs7QUQ3Q2YsV0FBUyxhQUFhQyxNQUFLO0FBQ3pCLFdBQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJQSxJQUFHO0FBQUEsRUFDdkM7QUFFQSxxQkFBQUMsU0FBRSxXQUFXO0FBQ1gsZ0JBQVksV0FBVztBQUNyQixZQUFNLElBQUksYUFBYSxtQkFBVyxNQUFNLE1BQU07QUFDOUMsWUFBTSxPQUFPLG1CQUFXLE1BQU07QUFDOUIsWUFBTSxRQUFRLG1CQUFXO0FBQ3pCLFlBQU0sS0FBSyxhQUFhLEVBQUUsSUFBSSxNQUFNO0FBQ3BDLHlCQUFBQSxTQUFFLEdBQUcsRUFBRSxJQUFJLGVBQWUsT0FBTztBQUNqQyx5QkFBQUEsU0FBRSxTQUFTLEVBQUUsSUFBSSxlQUFlLElBQUksWUFBWSxLQUFLO0FBQUEsSUFDdkQsR0FBRyxHQUFHO0FBQUEsRUFDUixDQUFDOzs7QUVkRCxHQUFDLFdBQVc7QUFDVixRQUFJLGdCQUFnQixpQkFBaUI7QUFFckMsYUFBUyxtQkFBbUI7QUFDMUIsVUFBSSxPQUFPLE9BQU8sZ0JBQWdCO0FBQVksZUFBTyxPQUFPO0FBRTVELGVBQVNDLGFBQVksT0FBTyxRQUFRO0FBQ2xDLGlCQUFTLFVBQVUsRUFBQyxTQUFTLE9BQU8sWUFBWSxPQUFPLFFBQVEsT0FBUztBQUN4RSxZQUFJLE1BQU0sU0FBUyxZQUFZLGFBQWE7QUFDNUMsWUFBSSxnQkFBZ0IsT0FBTyxPQUFPLFNBQVMsT0FBTyxZQUFZLE9BQU8sTUFBTTtBQUMzRSxlQUFPO0FBQUEsTUFDVDtBQUNBLE1BQUFBLGFBQVksWUFBWSxPQUFPLE1BQU07QUFDckMsYUFBT0E7QUFBQSxJQUNUO0FBRUEsYUFBUyxpQkFBaUIsTUFBTSxPQUFPO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGNBQWMsT0FBTztBQUMxQyxZQUFNLE9BQU87QUFDYixZQUFNLE9BQU87QUFDYixZQUFNLFFBQVE7QUFDZCxhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsWUFBWSxTQUFTLG1CQUFtQjtBQUMvQyxVQUFJLEtBQUssUUFBUSxhQUFhLFNBQVMsR0FDbkMsU0FBUyxpQkFBaUIsV0FBVyxRQUFRLGFBQWEsYUFBYSxDQUFDLEdBQ3hFLE9BQU8saUJBQWlCLGVBQWUsUUFBUSxhQUFhLFdBQVcsQ0FBQyxHQUN4RSxPQUFPLFNBQVMsY0FBYyxNQUFNLEdBQ3BDLFNBQVMsUUFBUSxhQUFhLFFBQVE7QUFFMUMsV0FBSyxTQUFVLFFBQVEsYUFBYSxhQUFhLE1BQU0sUUFBUyxRQUFRO0FBQ3hFLFdBQUssU0FBUztBQUNkLFdBQUssTUFBTSxVQUFVO0FBRXJCLFVBQUk7QUFBUSxhQUFLLFNBQVM7QUFBQSxlQUNqQjtBQUFtQixhQUFLLFNBQVM7QUFFMUMsV0FBSyxZQUFZLElBQUk7QUFDckIsV0FBSyxZQUFZLE1BQU07QUFDdkIsZUFBUyxLQUFLLFlBQVksSUFBSTtBQUM5QixXQUFLLE9BQU87QUFBQSxJQUNkO0FBRUEsV0FBTyxpQkFBaUIsU0FBUyxTQUFTLEdBQUc7QUFDM0MsVUFBSSxVQUFVLEVBQUU7QUFDaEIsVUFBSSxFQUFFO0FBQWtCO0FBRXhCLGFBQU8sV0FBVyxRQUFRLGNBQWM7QUFDdEMsWUFBSSxtQkFBbUIsSUFBSSxjQUFjLHNCQUFzQjtBQUFBLFVBQzdELFdBQVc7QUFBQSxVQUFNLGNBQWM7QUFBQSxRQUNqQyxDQUFDO0FBRUQsWUFBSSxDQUFDLFFBQVEsY0FBYyxnQkFBZ0IsR0FBRztBQUM1QyxZQUFFLGVBQWU7QUFDakIsWUFBRSx5QkFBeUI7QUFDM0IsaUJBQU87QUFBQSxRQUNUO0FBRUEsWUFBSSxRQUFRLGFBQWEsYUFBYSxHQUFHO0FBQ3ZDLHNCQUFZLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUTtBQUM1QyxZQUFFLGVBQWU7QUFDakIsaUJBQU87QUFBQSxRQUNULE9BQU87QUFDTCxvQkFBVSxRQUFRO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHLEtBQUs7QUFFUixXQUFPLGlCQUFpQixzQkFBc0IsU0FBVSxHQUFHO0FBQ3pELFVBQUksVUFBVSxFQUFFLE9BQU8sYUFBYSxjQUFjO0FBQ2xELFVBQUcsV0FBVyxDQUFDLE9BQU8sUUFBUSxPQUFPLEdBQUc7QUFDdEMsVUFBRSxlQUFlO0FBQUEsTUFDbkI7QUFBQSxJQUNGLEdBQUcsS0FBSztBQUFBLEVBQ1YsR0FBRzs7O0FDNUVJLE1BQUksVUFBVSxDQUFDLFVBQVU7QUFDOUIsUUFBRyxPQUFPLFVBQVUsWUFBVztBQUM3QixhQUFPO0lBQ1QsT0FBTztBQUNMLFVBQUlDLFlBQVUsV0FBVztBQUFFLGVBQU87TUFBTTtBQUN4QyxhQUFPQTtJQUNUO0VBQ0Y7QUNSTyxNQUFNLGFBQWEsT0FBTyxTQUFTLGNBQWMsT0FBTztBQUN4RCxNQUFNLFlBQVksT0FBTyxXQUFXLGNBQWMsU0FBUztBQUMzRCxNQUFNQyxVQUFTLGNBQWMsYUFBYUE7QUFDMUMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZ0JBQWdCLEVBQUMsWUFBWSxHQUFHLE1BQU0sR0FBRyxTQUFTLEdBQUcsUUFBUSxFQUFDO0FBQ3BFLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0saUJBQWlCO0lBQzVCLFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0VBQ1g7QUFDTyxNQUFNLGlCQUFpQjtJQUM1QixPQUFPO0lBQ1AsT0FBTztJQUNQLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztFQUNUO0FBRU8sTUFBTSxhQUFhO0lBQ3hCLFVBQVU7SUFDVixXQUFXO0VBQ2I7QUFDTyxNQUFNLGFBQWE7SUFDeEIsVUFBVTtFQUNaO0FDckJBLE1BQUEsT0FBQSxNQUEwQjtJQUN4QixZQUFZLFNBQVMsT0FBTyxTQUFTLFNBQVE7QUFDM0MsV0FBSyxVQUFVO0FBQ2YsV0FBSyxRQUFRO0FBQ2IsV0FBSyxVQUFVLFdBQVcsV0FBVztBQUFFLGVBQU8sQ0FBQztNQUFFO0FBQ2pELFdBQUssZUFBZTtBQUNwQixXQUFLLFVBQVU7QUFDZixXQUFLLGVBQWU7QUFDcEIsV0FBSyxXQUFXLENBQUM7QUFDakIsV0FBSyxPQUFPO0lBQ2Q7SUFNQSxPQUFPLFNBQVE7QUFDYixXQUFLLFVBQVU7QUFDZixXQUFLLE1BQU07QUFDWCxXQUFLLEtBQUs7SUFDWjtJQUtBLE9BQU07QUFDSixVQUFHLEtBQUssWUFBWSxTQUFTLEdBQUU7QUFBRTtNQUFPO0FBQ3hDLFdBQUssYUFBYTtBQUNsQixXQUFLLE9BQU87QUFDWixXQUFLLFFBQVEsT0FBTyxLQUFLO1FBQ3ZCLE9BQU8sS0FBSyxRQUFRO1FBQ3BCLE9BQU8sS0FBSztRQUNaLFNBQVMsS0FBSyxRQUFRO1FBQ3RCLEtBQUssS0FBSztRQUNWLFVBQVUsS0FBSyxRQUFRLFFBQVE7TUFDakMsQ0FBQztJQUNIO0lBT0EsUUFBUSxRQUFRLFVBQVM7QUFDdkIsVUFBRyxLQUFLLFlBQVksTUFBTSxHQUFFO0FBQzFCLGlCQUFTLEtBQUssYUFBYSxRQUFRO01BQ3JDO0FBRUEsV0FBSyxTQUFTLEtBQUssRUFBQyxRQUFRLFNBQVEsQ0FBQztBQUNyQyxhQUFPO0lBQ1Q7SUFLQSxRQUFPO0FBQ0wsV0FBSyxlQUFlO0FBQ3BCLFdBQUssTUFBTTtBQUNYLFdBQUssV0FBVztBQUNoQixXQUFLLGVBQWU7QUFDcEIsV0FBSyxPQUFPO0lBQ2Q7SUFLQSxhQUFhLEVBQUMsUUFBUSxVQUFVLEtBQUEsR0FBTTtBQUNwQyxXQUFLLFNBQVMsT0FBTyxDQUFBLE1BQUssRUFBRSxXQUFXLE1BQU0sRUFDMUMsUUFBUSxDQUFBLE1BQUssRUFBRSxTQUFTLFFBQVEsQ0FBQztJQUN0QztJQUtBLGlCQUFnQjtBQUNkLFVBQUcsQ0FBQyxLQUFLLFVBQVM7QUFBRTtNQUFPO0FBQzNCLFdBQUssUUFBUSxJQUFJLEtBQUssUUFBUTtJQUNoQztJQUtBLGdCQUFlO0FBQ2IsbUJBQWEsS0FBSyxZQUFZO0FBQzlCLFdBQUssZUFBZTtJQUN0QjtJQUtBLGVBQWM7QUFDWixVQUFHLEtBQUssY0FBYTtBQUFFLGFBQUssY0FBYztNQUFFO0FBQzVDLFdBQUssTUFBTSxLQUFLLFFBQVEsT0FBTyxRQUFRO0FBQ3ZDLFdBQUssV0FBVyxLQUFLLFFBQVEsZUFBZSxLQUFLLEdBQUc7QUFFcEQsV0FBSyxRQUFRLEdBQUcsS0FBSyxVQUFVLENBQUEsWUFBVztBQUN4QyxhQUFLLGVBQWU7QUFDcEIsYUFBSyxjQUFjO0FBQ25CLGFBQUssZUFBZTtBQUNwQixhQUFLLGFBQWEsT0FBTztNQUMzQixDQUFDO0FBRUQsV0FBSyxlQUFlLFdBQVcsTUFBTTtBQUNuQyxhQUFLLFFBQVEsV0FBVyxDQUFDLENBQUM7TUFDNUIsR0FBRyxLQUFLLE9BQU87SUFDakI7SUFLQSxZQUFZLFFBQU87QUFDakIsYUFBTyxLQUFLLGdCQUFnQixLQUFLLGFBQWEsV0FBVztJQUMzRDtJQUtBLFFBQVEsUUFBUSxVQUFTO0FBQ3ZCLFdBQUssUUFBUSxRQUFRLEtBQUssVUFBVSxFQUFDLFFBQVEsU0FBUSxDQUFDO0lBQ3hEO0VBQ0Y7QUM5R0EsTUFBQSxRQUFBLE1BQTJCO0lBQ3pCLFlBQVksVUFBVSxXQUFVO0FBQzlCLFdBQUssV0FBVztBQUNoQixXQUFLLFlBQVk7QUFDakIsV0FBSyxRQUFRO0FBQ2IsV0FBSyxRQUFRO0lBQ2Y7SUFFQSxRQUFPO0FBQ0wsV0FBSyxRQUFRO0FBQ2IsbUJBQWEsS0FBSyxLQUFLO0lBQ3pCO0lBS0Esa0JBQWlCO0FBQ2YsbUJBQWEsS0FBSyxLQUFLO0FBRXZCLFdBQUssUUFBUSxXQUFXLE1BQU07QUFDNUIsYUFBSyxRQUFRLEtBQUssUUFBUTtBQUMxQixhQUFLLFNBQVM7TUFDaEIsR0FBRyxLQUFLLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUNuQztFQUNGO0FDMUJBLE1BQUEsVUFBQSxNQUE2QjtJQUMzQixZQUFZLE9BQU8sUUFBUSxRQUFPO0FBQ2hDLFdBQUssUUFBUSxlQUFlO0FBQzVCLFdBQUssUUFBUTtBQUNiLFdBQUssU0FBUyxRQUFRLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDLFdBQUssU0FBUztBQUNkLFdBQUssV0FBVyxDQUFDO0FBQ2pCLFdBQUssYUFBYTtBQUNsQixXQUFLLFVBQVUsS0FBSyxPQUFPO0FBQzNCLFdBQUssYUFBYTtBQUNsQixXQUFLLFdBQVcsSUFBSSxLQUFLLE1BQU0sZUFBZSxNQUFNLEtBQUssUUFBUSxLQUFLLE9BQU87QUFDN0UsV0FBSyxhQUFhLENBQUM7QUFDbkIsV0FBSyxrQkFBa0IsQ0FBQztBQUV4QixXQUFLLGNBQWMsSUFBSSxNQUFNLE1BQU07QUFDakMsWUFBRyxLQUFLLE9BQU8sWUFBWSxHQUFFO0FBQUUsZUFBSyxPQUFPO1FBQUU7TUFDL0MsR0FBRyxLQUFLLE9BQU8sYUFBYTtBQUM1QixXQUFLLGdCQUFnQixLQUFLLEtBQUssT0FBTyxRQUFRLE1BQU0sS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFdBQUssZ0JBQWdCLEtBQUssS0FBSyxPQUFPLE9BQU8sTUFBTTtBQUNqRCxhQUFLLFlBQVksTUFBTTtBQUN2QixZQUFHLEtBQUssVUFBVSxHQUFFO0FBQUUsZUFBSyxPQUFPO1FBQUU7TUFDdEMsQ0FBQyxDQUNEO0FBQ0EsV0FBSyxTQUFTLFFBQVEsTUFBTSxNQUFNO0FBQ2hDLGFBQUssUUFBUSxlQUFlO0FBQzVCLGFBQUssWUFBWSxNQUFNO0FBQ3ZCLGFBQUssV0FBVyxRQUFRLENBQUEsY0FBYSxVQUFVLEtBQUssQ0FBQztBQUNyRCxhQUFLLGFBQWEsQ0FBQztNQUNyQixDQUFDO0FBQ0QsV0FBSyxTQUFTLFFBQVEsU0FBUyxNQUFNO0FBQ25DLGFBQUssUUFBUSxlQUFlO0FBQzVCLFlBQUcsS0FBSyxPQUFPLFlBQVksR0FBRTtBQUFFLGVBQUssWUFBWSxnQkFBZ0I7UUFBRTtNQUNwRSxDQUFDO0FBQ0QsV0FBSyxRQUFRLE1BQU07QUFDakIsYUFBSyxZQUFZLE1BQU07QUFDdkIsWUFBRyxLQUFLLE9BQU8sVUFBVTtBQUFHLGVBQUssT0FBTyxJQUFJLFdBQVcsU0FBUyxLQUFLLFNBQVMsS0FBSyxRQUFRLEdBQUc7QUFDOUYsYUFBSyxRQUFRLGVBQWU7QUFDNUIsYUFBSyxPQUFPLE9BQU8sSUFBSTtNQUN6QixDQUFDO0FBQ0QsV0FBSyxRQUFRLENBQUEsV0FBVTtBQUNyQixZQUFHLEtBQUssT0FBTyxVQUFVO0FBQUcsZUFBSyxPQUFPLElBQUksV0FBVyxTQUFTLEtBQUssU0FBUyxNQUFNO0FBQ3BGLFlBQUcsS0FBSyxVQUFVLEdBQUU7QUFBRSxlQUFLLFNBQVMsTUFBTTtRQUFFO0FBQzVDLGFBQUssUUFBUSxlQUFlO0FBQzVCLFlBQUcsS0FBSyxPQUFPLFlBQVksR0FBRTtBQUFFLGVBQUssWUFBWSxnQkFBZ0I7UUFBRTtNQUNwRSxDQUFDO0FBQ0QsV0FBSyxTQUFTLFFBQVEsV0FBVyxNQUFNO0FBQ3JDLFlBQUcsS0FBSyxPQUFPLFVBQVU7QUFBRyxlQUFLLE9BQU8sSUFBSSxXQUFXLFdBQVcsS0FBSyxVQUFVLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxPQUFPO0FBQ3pILFlBQUksWUFBWSxJQUFJLEtBQUssTUFBTSxlQUFlLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU87QUFDOUUsa0JBQVUsS0FBSztBQUNmLGFBQUssUUFBUSxlQUFlO0FBQzVCLGFBQUssU0FBUyxNQUFNO0FBQ3BCLFlBQUcsS0FBSyxPQUFPLFlBQVksR0FBRTtBQUFFLGVBQUssWUFBWSxnQkFBZ0I7UUFBRTtNQUNwRSxDQUFDO0FBQ0QsV0FBSyxHQUFHLGVBQWUsT0FBTyxDQUFDLFNBQVMsUUFBUTtBQUM5QyxhQUFLLFFBQVEsS0FBSyxlQUFlLEdBQUcsR0FBRyxPQUFPO01BQ2hELENBQUM7SUFDSDtJQU9BLEtBQUssVUFBVSxLQUFLLFNBQVE7QUFDMUIsVUFBRyxLQUFLLFlBQVc7QUFDakIsY0FBTSxJQUFJLE1BQU0sNEZBQTRGO01BQzlHLE9BQU87QUFDTCxhQUFLLFVBQVU7QUFDZixhQUFLLGFBQWE7QUFDbEIsYUFBSyxPQUFPO0FBQ1osZUFBTyxLQUFLO01BQ2Q7SUFDRjtJQU1BLFFBQVEsVUFBUztBQUNmLFdBQUssR0FBRyxlQUFlLE9BQU8sUUFBUTtJQUN4QztJQU1BLFFBQVEsVUFBUztBQUNmLGFBQU8sS0FBSyxHQUFHLGVBQWUsT0FBTyxDQUFBLFdBQVUsU0FBUyxNQUFNLENBQUM7SUFDakU7SUFtQkEsR0FBRyxPQUFPLFVBQVM7QUFDakIsVUFBSSxNQUFNLEtBQUs7QUFDZixXQUFLLFNBQVMsS0FBSyxFQUFDLE9BQU8sS0FBSyxTQUFRLENBQUM7QUFDekMsYUFBTztJQUNUO0lBb0JBLElBQUksT0FBTyxLQUFJO0FBQ2IsV0FBSyxXQUFXLEtBQUssU0FBUyxPQUFPLENBQUMsU0FBUztBQUM3QyxlQUFPLEVBQUUsS0FBSyxVQUFVLFVBQVUsT0FBTyxRQUFRLGVBQWUsUUFBUSxLQUFLO01BQy9FLENBQUM7SUFDSDtJQUtBLFVBQVM7QUFBRSxhQUFPLEtBQUssT0FBTyxZQUFZLEtBQUssS0FBSyxTQUFTO0lBQUU7SUFrQi9ELEtBQUssT0FBTyxTQUFTLFVBQVUsS0FBSyxTQUFRO0FBQzFDLGdCQUFVLFdBQVcsQ0FBQztBQUN0QixVQUFHLENBQUMsS0FBSyxZQUFXO0FBQ2xCLGNBQU0sSUFBSSxNQUFNLGtCQUFrQixjQUFjLEtBQUssaUVBQWlFO01BQ3hIO0FBQ0EsVUFBSSxZQUFZLElBQUksS0FBSyxNQUFNLE9BQU8sV0FBVztBQUFFLGVBQU87TUFBUSxHQUFHLE9BQU87QUFDNUUsVUFBRyxLQUFLLFFBQVEsR0FBRTtBQUNoQixrQkFBVSxLQUFLO01BQ2pCLE9BQU87QUFDTCxrQkFBVSxhQUFhO0FBQ3ZCLGFBQUssV0FBVyxLQUFLLFNBQVM7TUFDaEM7QUFFQSxhQUFPO0lBQ1Q7SUFrQkEsTUFBTSxVQUFVLEtBQUssU0FBUTtBQUMzQixXQUFLLFlBQVksTUFBTTtBQUN2QixXQUFLLFNBQVMsY0FBYztBQUU1QixXQUFLLFFBQVEsZUFBZTtBQUM1QixVQUFJLFVBQVUsTUFBTTtBQUNsQixZQUFHLEtBQUssT0FBTyxVQUFVO0FBQUcsZUFBSyxPQUFPLElBQUksV0FBVyxTQUFTLEtBQUssT0FBTztBQUM1RSxhQUFLLFFBQVEsZUFBZSxPQUFPLE9BQU87TUFDNUM7QUFDQSxVQUFJLFlBQVksSUFBSSxLQUFLLE1BQU0sZUFBZSxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsT0FBTztBQUN6RSxnQkFBVSxRQUFRLE1BQU0sTUFBTSxRQUFRLENBQUMsRUFDcEMsUUFBUSxXQUFXLE1BQU0sUUFBUSxDQUFDO0FBQ3JDLGdCQUFVLEtBQUs7QUFDZixVQUFHLENBQUMsS0FBSyxRQUFRLEdBQUU7QUFBRSxrQkFBVSxRQUFRLE1BQU0sQ0FBQyxDQUFDO01BQUU7QUFFakQsYUFBTztJQUNUO0lBY0EsVUFBVSxRQUFRLFNBQVMsTUFBSztBQUFFLGFBQU87SUFBUTtJQUtqRCxTQUFTLE9BQU8sT0FBTyxTQUFTLFNBQVE7QUFDdEMsVUFBRyxLQUFLLFVBQVUsT0FBTTtBQUFFLGVBQU87TUFBTTtBQUV2QyxVQUFHLFdBQVcsWUFBWSxLQUFLLFFBQVEsR0FBRTtBQUN2QyxZQUFHLEtBQUssT0FBTyxVQUFVO0FBQUcsZUFBSyxPQUFPLElBQUksV0FBVyw2QkFBNkIsRUFBQyxPQUFPLE9BQU8sU0FBUyxRQUFPLENBQUM7QUFDcEgsZUFBTztNQUNULE9BQU87QUFDTCxlQUFPO01BQ1Q7SUFDRjtJQUtBLFVBQVM7QUFBRSxhQUFPLEtBQUssU0FBUztJQUFJO0lBS3BDLE9BQU8sVUFBVSxLQUFLLFNBQVE7QUFDNUIsVUFBRyxLQUFLLFVBQVUsR0FBRTtBQUFFO01BQU87QUFDN0IsV0FBSyxPQUFPLGVBQWUsS0FBSyxLQUFLO0FBQ3JDLFdBQUssUUFBUSxlQUFlO0FBQzVCLFdBQUssU0FBUyxPQUFPLE9BQU87SUFDOUI7SUFLQSxRQUFRLE9BQU8sU0FBUyxLQUFLLFNBQVE7QUFDbkMsVUFBSSxpQkFBaUIsS0FBSyxVQUFVLE9BQU8sU0FBUyxLQUFLLE9BQU87QUFDaEUsVUFBRyxXQUFXLENBQUMsZ0JBQWU7QUFBRSxjQUFNLElBQUksTUFBTSw2RUFBNkU7TUFBRTtBQUUvSCxVQUFJLGdCQUFnQixLQUFLLFNBQVMsT0FBTyxDQUFBLFNBQVEsS0FBSyxVQUFVLEtBQUs7QUFFckUsZUFBUSxJQUFJLEdBQUcsSUFBSSxjQUFjLFFBQVEsS0FBSTtBQUMzQyxZQUFJLE9BQU8sY0FBYztBQUN6QixhQUFLLFNBQVMsZ0JBQWdCLEtBQUssV0FBVyxLQUFLLFFBQVEsQ0FBQztNQUM5RDtJQUNGO0lBS0EsZUFBZSxLQUFJO0FBQUUsYUFBTyxjQUFjO0lBQU07SUFLaEQsV0FBVTtBQUFFLGFBQU8sS0FBSyxVQUFVLGVBQWU7SUFBTztJQUt4RCxZQUFXO0FBQUUsYUFBTyxLQUFLLFVBQVUsZUFBZTtJQUFRO0lBSzFELFdBQVU7QUFBRSxhQUFPLEtBQUssVUFBVSxlQUFlO0lBQU87SUFLeEQsWUFBVztBQUFFLGFBQU8sS0FBSyxVQUFVLGVBQWU7SUFBUTtJQUsxRCxZQUFXO0FBQUUsYUFBTyxLQUFLLFVBQVUsZUFBZTtJQUFRO0VBQzVEO0FDalRBLE1BQUEsT0FBQSxNQUEwQjtJQUFBLE9BRWpCLFFBQVEsUUFBUSxVQUFVLFFBQVEsTUFBTSxTQUFTLFdBQVcsVUFBUztBQUMxRSxVQUFHQSxRQUFPLGdCQUFlO0FBQ3ZCLFlBQUksTUFBTSxJQUFJQSxRQUFPLGVBQWU7QUFDcEMsZUFBTyxLQUFLLGVBQWUsS0FBSyxRQUFRLFVBQVUsTUFBTSxTQUFTLFdBQVcsUUFBUTtNQUN0RixPQUFPO0FBQ0wsWUFBSSxNQUFNLElBQUlBLFFBQU8sZUFBZTtBQUNwQyxlQUFPLEtBQUssV0FBVyxLQUFLLFFBQVEsVUFBVSxRQUFRLE1BQU0sU0FBUyxXQUFXLFFBQVE7TUFDMUY7SUFDRjtJQUFBLE9BRU8sZUFBZSxLQUFLLFFBQVEsVUFBVSxNQUFNLFNBQVMsV0FBVyxVQUFTO0FBQzlFLFVBQUksVUFBVTtBQUNkLFVBQUksS0FBSyxRQUFRLFFBQVE7QUFDekIsVUFBSSxTQUFTLE1BQU07QUFDakIsWUFBSSxXQUFXLEtBQUssVUFBVSxJQUFJLFlBQVk7QUFDOUMsb0JBQVksU0FBUyxRQUFRO01BQy9CO0FBQ0EsVUFBRyxXQUFVO0FBQUUsWUFBSSxZQUFZO01BQVU7QUFHekMsVUFBSSxhQUFhLE1BQU07TUFBRTtBQUV6QixVQUFJLEtBQUssSUFBSTtBQUNiLGFBQU87SUFDVDtJQUFBLE9BRU8sV0FBVyxLQUFLLFFBQVEsVUFBVSxRQUFRLE1BQU0sU0FBUyxXQUFXLFVBQVM7QUFDbEYsVUFBSSxLQUFLLFFBQVEsVUFBVSxJQUFJO0FBQy9CLFVBQUksVUFBVTtBQUNkLFVBQUksaUJBQWlCLGdCQUFnQixNQUFNO0FBQzNDLFVBQUksVUFBVSxNQUFNLFlBQVksU0FBUyxJQUFJO0FBQzdDLFVBQUkscUJBQXFCLE1BQU07QUFDN0IsWUFBRyxJQUFJLGVBQWUsV0FBVyxZQUFZLFVBQVM7QUFDcEQsY0FBSSxXQUFXLEtBQUssVUFBVSxJQUFJLFlBQVk7QUFDOUMsbUJBQVMsUUFBUTtRQUNuQjtNQUNGO0FBQ0EsVUFBRyxXQUFVO0FBQUUsWUFBSSxZQUFZO01BQVU7QUFFekMsVUFBSSxLQUFLLElBQUk7QUFDYixhQUFPO0lBQ1Q7SUFBQSxPQUVPLFVBQVUsTUFBSztBQUNwQixVQUFHLENBQUMsUUFBUSxTQUFTLElBQUc7QUFBRSxlQUFPO01BQUs7QUFFdEMsVUFBSTtBQUNGLGVBQU8sS0FBSyxNQUFNLElBQUk7TUFDeEIsU0FBUyxHQUFUO0FBQ0UsbUJBQVcsUUFBUSxJQUFJLGlDQUFpQyxJQUFJO0FBQzVELGVBQU87TUFDVDtJQUNGO0lBQUEsT0FFTyxVQUFVLEtBQUssV0FBVTtBQUM5QixVQUFJLFdBQVcsQ0FBQztBQUNoQixlQUFRLE9BQU8sS0FBSTtBQUNqQixZQUFHLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFFO1FBQVM7QUFDOUQsWUFBSSxXQUFXLFlBQVksR0FBRyxhQUFhLFNBQVM7QUFDcEQsWUFBSSxXQUFXLElBQUk7QUFDbkIsWUFBRyxPQUFPLGFBQWEsVUFBUztBQUM5QixtQkFBUyxLQUFLLEtBQUssVUFBVSxVQUFVLFFBQVEsQ0FBQztRQUNsRCxPQUFPO0FBQ0wsbUJBQVMsS0FBSyxtQkFBbUIsUUFBUSxJQUFJLE1BQU0sbUJBQW1CLFFBQVEsQ0FBQztRQUNqRjtNQUNGO0FBQ0EsYUFBTyxTQUFTLEtBQUssR0FBRztJQUMxQjtJQUFBLE9BRU8sYUFBYSxLQUFLLFFBQU87QUFDOUIsVUFBRyxPQUFPLEtBQUssTUFBTSxFQUFFLFdBQVcsR0FBRTtBQUFFLGVBQU87TUFBSTtBQUVqRCxVQUFJLFNBQVMsSUFBSSxNQUFNLElBQUksSUFBSSxNQUFNO0FBQ3JDLGFBQU8sR0FBRyxNQUFNLFNBQVMsS0FBSyxVQUFVLE1BQU07SUFDaEQ7RUFDRjtBQzNFQSxNQUFBLFdBQUEsTUFBOEI7SUFFNUIsWUFBWSxVQUFTO0FBQ25CLFdBQUssV0FBVztBQUNoQixXQUFLLFFBQVE7QUFDYixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLE9BQU8sb0JBQUksSUFBSTtBQUNwQixXQUFLLFNBQVMsV0FBVztNQUFFO0FBQzNCLFdBQUssVUFBVSxXQUFXO01BQUU7QUFDNUIsV0FBSyxZQUFZLFdBQVc7TUFBRTtBQUM5QixXQUFLLFVBQVUsV0FBVztNQUFFO0FBQzVCLFdBQUssZUFBZSxLQUFLLGtCQUFrQixRQUFRO0FBQ25ELFdBQUssYUFBYSxjQUFjO0FBQ2hDLFdBQUssS0FBSztJQUNaO0lBRUEsa0JBQWtCLFVBQVM7QUFDekIsYUFBUSxTQUNMLFFBQVEsU0FBUyxTQUFTLEVBQzFCLFFBQVEsVUFBVSxVQUFVLEVBQzVCLFFBQVEsSUFBSSxPQUFPLFVBQVcsV0FBVyxTQUFTLEdBQUcsUUFBUSxXQUFXLFFBQVE7SUFDckY7SUFFQSxjQUFhO0FBQ1gsYUFBTyxLQUFLLGFBQWEsS0FBSyxjQUFjLEVBQUMsT0FBTyxLQUFLLE1BQUssQ0FBQztJQUNqRTtJQUVBLGNBQWMsTUFBTSxRQUFRLFVBQVM7QUFDbkMsV0FBSyxNQUFNLE1BQU0sUUFBUSxRQUFRO0FBQ2pDLFdBQUssYUFBYSxjQUFjO0lBQ2xDO0lBRUEsWUFBVztBQUNULFdBQUssUUFBUSxTQUFTO0FBQ3RCLFdBQUssY0FBYyxNQUFNLFdBQVcsS0FBSztJQUMzQztJQUVBLFdBQVU7QUFBRSxhQUFPLEtBQUssZUFBZSxjQUFjLFFBQVEsS0FBSyxlQUFlLGNBQWM7SUFBVztJQUUxRyxPQUFNO0FBQ0osV0FBSyxLQUFLLE9BQU8sTUFBTSxNQUFNLEtBQUssVUFBVSxHQUFHLENBQUEsU0FBUTtBQUNyRCxZQUFHLE1BQUs7QUFDTixjQUFJLEVBQUMsUUFBUSxPQUFPLFNBQUEsSUFBWTtBQUNoQyxlQUFLLFFBQVE7UUFDZixPQUFPO0FBQ0wsbUJBQVM7UUFDWDtBQUVBLGdCQUFPLFFBQUE7VUFBQSxLQUNBO0FBQ0gscUJBQVMsUUFBUSxDQUFBLFFBQU87QUFtQnRCLHlCQUFXLE1BQU0sS0FBSyxVQUFVLEVBQUMsTUFBTSxJQUFHLENBQUMsR0FBRyxDQUFDO1lBQ2pELENBQUM7QUFDRCxpQkFBSyxLQUFLO0FBQ1Y7VUFBQSxLQUNHO0FBQ0gsaUJBQUssS0FBSztBQUNWO1VBQUEsS0FDRztBQUNILGlCQUFLLGFBQWEsY0FBYztBQUNoQyxpQkFBSyxPQUFPLENBQUMsQ0FBQztBQUNkLGlCQUFLLEtBQUs7QUFDVjtVQUFBLEtBQ0c7QUFDSCxpQkFBSyxRQUFRLEdBQUc7QUFDaEIsaUJBQUssTUFBTSxNQUFNLGFBQWEsS0FBSztBQUNuQztVQUFBLEtBQ0c7VUFBQSxLQUNBO0FBQ0gsaUJBQUssUUFBUSxHQUFHO0FBQ2hCLGlCQUFLLGNBQWMsTUFBTSx5QkFBeUIsR0FBRztBQUNyRDtVQUFBO0FBQ08sa0JBQU0sSUFBSSxNQUFNLHlCQUF5QixRQUFRO1FBQUE7TUFFOUQsQ0FBQztJQUNIO0lBRUEsS0FBSyxNQUFLO0FBQ1IsV0FBSyxLQUFLLFFBQVEsTUFBTSxNQUFNLEtBQUssUUFBUSxTQUFTLEdBQUcsQ0FBQSxTQUFRO0FBQzdELFlBQUcsQ0FBQyxRQUFRLEtBQUssV0FBVyxLQUFJO0FBQzlCLGVBQUssUUFBUSxRQUFRLEtBQUssTUFBTTtBQUNoQyxlQUFLLGNBQWMsTUFBTSx5QkFBeUIsS0FBSztRQUN6RDtNQUNGLENBQUM7SUFDSDtJQUVBLE1BQU0sTUFBTSxRQUFRLFVBQVM7QUFDM0IsZUFBUSxPQUFPLEtBQUssTUFBSztBQUFFLFlBQUksTUFBTTtNQUFFO0FBQ3ZDLFdBQUssYUFBYSxjQUFjO0FBQ2hDLFVBQUksT0FBTyxPQUFPLE9BQU8sRUFBQyxNQUFNLEtBQU0sUUFBUSxRQUFXLFVBQVUsS0FBSSxHQUFHLEVBQUMsTUFBTSxRQUFRLFNBQVEsQ0FBQztBQUNsRyxVQUFHLE9BQU8sZUFBZ0IsYUFBWTtBQUNwQyxhQUFLLFFBQVEsSUFBSSxXQUFXLFNBQVMsSUFBSSxDQUFDO01BQzVDLE9BQU87QUFDTCxhQUFLLFFBQVEsSUFBSTtNQUNuQjtJQUNGO0lBRUEsS0FBSyxRQUFRLE1BQU0saUJBQWlCLFVBQVM7QUFDM0MsVUFBSTtBQUNKLFVBQUksWUFBWSxNQUFNO0FBQ3BCLGFBQUssS0FBSyxPQUFPLEdBQUc7QUFDcEIsd0JBQWdCO01BQ2xCO0FBQ0EsWUFBTSxLQUFLLFFBQVEsUUFBUSxLQUFLLFlBQVksR0FBRyxvQkFBb0IsTUFBTSxLQUFLLFNBQVMsV0FBVyxDQUFBLFNBQVE7QUFDeEcsYUFBSyxLQUFLLE9BQU8sR0FBRztBQUNwQixZQUFHLEtBQUssU0FBUyxHQUFFO0FBQUUsbUJBQVMsSUFBSTtRQUFFO01BQ3RDLENBQUM7QUFDRCxXQUFLLEtBQUssSUFBSSxHQUFHO0lBQ25CO0VBQ0Y7QUVqSUEsTUFBTyxxQkFBUTtJQUNiLGVBQWU7SUFDZixhQUFhO0lBQ2IsT0FBTyxFQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsV0FBVyxFQUFDO0lBRXZDLE9BQU8sS0FBSyxVQUFTO0FBQ25CLFVBQUcsSUFBSSxRQUFRLGdCQUFnQixhQUFZO0FBQ3pDLGVBQU8sU0FBUyxLQUFLLGFBQWEsR0FBRyxDQUFDO01BQ3hDLE9BQU87QUFDTCxZQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPO0FBQ3ZFLGVBQU8sU0FBUyxLQUFLLFVBQVUsT0FBTyxDQUFDO01BQ3pDO0lBQ0Y7SUFFQSxPQUFPLFlBQVksVUFBUztBQUMxQixVQUFHLFdBQVcsZ0JBQWdCLGFBQVk7QUFDeEMsZUFBTyxTQUFTLEtBQUssYUFBYSxVQUFVLENBQUM7TUFDL0MsT0FBTztBQUNMLFlBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxPQUFPLE9BQUEsSUFBVyxLQUFLLE1BQU0sVUFBVTtBQUNsRSxlQUFPLFNBQVMsRUFBQyxVQUFVLEtBQUssT0FBTyxPQUFPLFFBQU8sQ0FBQztNQUN4RDtJQUNGO0lBSUEsYUFBYSxTQUFRO0FBQ25CLFVBQUksRUFBQyxVQUFVLEtBQUssT0FBTyxPQUFPLFFBQUEsSUFBVztBQUM3QyxVQUFJLGFBQWEsS0FBSyxjQUFjLFNBQVMsU0FBUyxJQUFJLFNBQVMsTUFBTSxTQUFTLE1BQU07QUFDeEYsVUFBSSxTQUFTLElBQUksWUFBWSxLQUFLLGdCQUFnQixVQUFVO0FBQzVELFVBQUksT0FBTyxJQUFJLFNBQVMsTUFBTTtBQUM5QixVQUFJQyxVQUFTO0FBRWIsV0FBSyxTQUFTQSxXQUFVLEtBQUssTUFBTSxJQUFJO0FBQ3ZDLFdBQUssU0FBU0EsV0FBVSxTQUFTLE1BQU07QUFDdkMsV0FBSyxTQUFTQSxXQUFVLElBQUksTUFBTTtBQUNsQyxXQUFLLFNBQVNBLFdBQVUsTUFBTSxNQUFNO0FBQ3BDLFdBQUssU0FBU0EsV0FBVSxNQUFNLE1BQU07QUFDcEMsWUFBTSxLQUFLLFVBQVUsQ0FBQSxTQUFRLEtBQUssU0FBU0EsV0FBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsWUFBTSxLQUFLLEtBQUssQ0FBQSxTQUFRLEtBQUssU0FBU0EsV0FBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsWUFBTSxLQUFLLE9BQU8sQ0FBQSxTQUFRLEtBQUssU0FBU0EsV0FBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDckUsWUFBTSxLQUFLLE9BQU8sQ0FBQSxTQUFRLEtBQUssU0FBU0EsV0FBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFckUsVUFBSSxXQUFXLElBQUksV0FBVyxPQUFPLGFBQWEsUUFBUSxVQUFVO0FBQ3BFLGVBQVMsSUFBSSxJQUFJLFdBQVcsTUFBTSxHQUFHLENBQUM7QUFDdEMsZUFBUyxJQUFJLElBQUksV0FBVyxPQUFPLEdBQUcsT0FBTyxVQUFVO0FBRXZELGFBQU8sU0FBUztJQUNsQjtJQUVBLGFBQWEsUUFBTztBQUNsQixVQUFJLE9BQU8sSUFBSSxTQUFTLE1BQU07QUFDOUIsVUFBSSxPQUFPLEtBQUssU0FBUyxDQUFDO0FBQzFCLFVBQUksVUFBVSxJQUFJLFlBQVk7QUFDOUIsY0FBTyxNQUFBO1FBQUEsS0FDQSxLQUFLLE1BQU07QUFBTSxpQkFBTyxLQUFLLFdBQVcsUUFBUSxNQUFNLE9BQU87UUFBQSxLQUM3RCxLQUFLLE1BQU07QUFBTyxpQkFBTyxLQUFLLFlBQVksUUFBUSxNQUFNLE9BQU87UUFBQSxLQUMvRCxLQUFLLE1BQU07QUFBVyxpQkFBTyxLQUFLLGdCQUFnQixRQUFRLE1BQU0sT0FBTztNQUFBO0lBRWhGO0lBRUEsV0FBVyxRQUFRLE1BQU0sU0FBUTtBQUMvQixVQUFJLGNBQWMsS0FBSyxTQUFTLENBQUM7QUFDakMsVUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDO0FBQy9CLFVBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztBQUMvQixVQUFJQSxVQUFTLEtBQUssZ0JBQWdCLEtBQUssY0FBYztBQUNyRCxVQUFJLFVBQVUsUUFBUSxPQUFPLE9BQU8sTUFBTUEsU0FBUUEsVUFBUyxXQUFXLENBQUM7QUFDdkUsTUFBQUEsVUFBU0EsVUFBUztBQUNsQixVQUFJLFFBQVEsUUFBUSxPQUFPLE9BQU8sTUFBTUEsU0FBUUEsVUFBUyxTQUFTLENBQUM7QUFDbkUsTUFBQUEsVUFBU0EsVUFBUztBQUNsQixVQUFJLFFBQVEsUUFBUSxPQUFPLE9BQU8sTUFBTUEsU0FBUUEsVUFBUyxTQUFTLENBQUM7QUFDbkUsTUFBQUEsVUFBU0EsVUFBUztBQUNsQixVQUFJLE9BQU8sT0FBTyxNQUFNQSxTQUFRLE9BQU8sVUFBVTtBQUNqRCxhQUFPLEVBQUMsVUFBVSxTQUFTLEtBQUssTUFBTSxPQUFjLE9BQWMsU0FBUyxLQUFJO0lBQ2pGO0lBRUEsWUFBWSxRQUFRLE1BQU0sU0FBUTtBQUNoQyxVQUFJLGNBQWMsS0FBSyxTQUFTLENBQUM7QUFDakMsVUFBSSxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQzdCLFVBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztBQUMvQixVQUFJLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDL0IsVUFBSUEsVUFBUyxLQUFLLGdCQUFnQixLQUFLO0FBQ3ZDLFVBQUksVUFBVSxRQUFRLE9BQU8sT0FBTyxNQUFNQSxTQUFRQSxVQUFTLFdBQVcsQ0FBQztBQUN2RSxNQUFBQSxVQUFTQSxVQUFTO0FBQ2xCLFVBQUksTUFBTSxRQUFRLE9BQU8sT0FBTyxNQUFNQSxTQUFRQSxVQUFTLE9BQU8sQ0FBQztBQUMvRCxNQUFBQSxVQUFTQSxVQUFTO0FBQ2xCLFVBQUksUUFBUSxRQUFRLE9BQU8sT0FBTyxNQUFNQSxTQUFRQSxVQUFTLFNBQVMsQ0FBQztBQUNuRSxNQUFBQSxVQUFTQSxVQUFTO0FBQ2xCLFVBQUksUUFBUSxRQUFRLE9BQU8sT0FBTyxNQUFNQSxTQUFRQSxVQUFTLFNBQVMsQ0FBQztBQUNuRSxNQUFBQSxVQUFTQSxVQUFTO0FBQ2xCLFVBQUksT0FBTyxPQUFPLE1BQU1BLFNBQVEsT0FBTyxVQUFVO0FBQ2pELFVBQUksVUFBVSxFQUFDLFFBQVEsT0FBTyxVQUFVLEtBQUk7QUFDNUMsYUFBTyxFQUFDLFVBQVUsU0FBUyxLQUFVLE9BQWMsT0FBTyxlQUFlLE9BQU8sUUFBZ0I7SUFDbEc7SUFFQSxnQkFBZ0IsUUFBUSxNQUFNLFNBQVE7QUFDcEMsVUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDO0FBQy9CLFVBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztBQUMvQixVQUFJQSxVQUFTLEtBQUssZ0JBQWdCO0FBQ2xDLFVBQUksUUFBUSxRQUFRLE9BQU8sT0FBTyxNQUFNQSxTQUFRQSxVQUFTLFNBQVMsQ0FBQztBQUNuRSxNQUFBQSxVQUFTQSxVQUFTO0FBQ2xCLFVBQUksUUFBUSxRQUFRLE9BQU8sT0FBTyxNQUFNQSxTQUFRQSxVQUFTLFNBQVMsQ0FBQztBQUNuRSxNQUFBQSxVQUFTQSxVQUFTO0FBQ2xCLFVBQUksT0FBTyxPQUFPLE1BQU1BLFNBQVEsT0FBTyxVQUFVO0FBRWpELGFBQU8sRUFBQyxVQUFVLE1BQU0sS0FBSyxNQUFNLE9BQWMsT0FBYyxTQUFTLEtBQUk7SUFDOUU7RUFDRjtBQ3RCQSxNQUFBLFNBQUEsTUFBNEI7SUFDMUIsWUFBWSxVQUFVLE9BQU8sQ0FBQyxHQUFFO0FBQzlCLFdBQUssdUJBQXVCLEVBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUM7QUFDeEUsV0FBSyxXQUFXLENBQUM7QUFDakIsV0FBSyxhQUFhLENBQUM7QUFDbkIsV0FBSyxNQUFNO0FBQ1gsV0FBSyxVQUFVLEtBQUssV0FBVztBQUMvQixXQUFLLFlBQVksS0FBSyxhQUFhQyxRQUFPLGFBQWE7QUFDdkQsV0FBSyx5QkFBeUI7QUFDOUIsV0FBSyxpQkFBaUIsbUJBQVcsT0FBTyxLQUFLLGtCQUFVO0FBQ3ZELFdBQUssaUJBQWlCLG1CQUFXLE9BQU8sS0FBSyxrQkFBVTtBQUN2RCxXQUFLLGdCQUFnQjtBQUNyQixXQUFLLGFBQWEsS0FBSyxjQUFjO0FBQ3JDLFdBQUssZUFBZTtBQUNwQixVQUFHLEtBQUssY0FBYyxVQUFTO0FBQzdCLGFBQUssU0FBUyxLQUFLLFVBQVUsS0FBSztBQUNsQyxhQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUs7TUFDcEMsT0FBTztBQUNMLGFBQUssU0FBUyxLQUFLO0FBQ25CLGFBQUssU0FBUyxLQUFLO01BQ3JCO0FBQ0EsVUFBSSwrQkFBK0I7QUFDbkMsVUFBRyxhQUFhLFVBQVUsa0JBQWlCO0FBQ3pDLGtCQUFVLGlCQUFpQixZQUFZLENBQUEsT0FBTTtBQUMzQyxjQUFHLEtBQUssTUFBSztBQUNYLGlCQUFLLFdBQVc7QUFDaEIsMkNBQStCLEtBQUs7VUFDdEM7UUFDRixDQUFDO0FBQ0Qsa0JBQVUsaUJBQWlCLFlBQVksQ0FBQSxPQUFNO0FBQzNDLGNBQUcsaUNBQWlDLEtBQUssY0FBYTtBQUNwRCwyQ0FBK0I7QUFDL0IsaUJBQUssUUFBUTtVQUNmO1FBQ0YsQ0FBQztNQUNIO0FBQ0EsV0FBSyxzQkFBc0IsS0FBSyx1QkFBdUI7QUFDdkQsV0FBSyxnQkFBZ0IsQ0FBQyxVQUFVO0FBQzlCLFlBQUcsS0FBSyxlQUFjO0FBQ3BCLGlCQUFPLEtBQUssY0FBYyxLQUFLO1FBQ2pDLE9BQU87QUFDTCxpQkFBTyxDQUFDLEtBQU0sS0FBTSxHQUFJLEVBQUUsUUFBUSxNQUFNO1FBQzFDO01BQ0Y7QUFDQSxXQUFLLG1CQUFtQixDQUFDLFVBQVU7QUFDakMsWUFBRyxLQUFLLGtCQUFpQjtBQUN2QixpQkFBTyxLQUFLLGlCQUFpQixLQUFLO1FBQ3BDLE9BQU87QUFDTCxpQkFBTyxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBTSxHQUFJLEVBQUUsUUFBUSxNQUFNO1FBQ3JFO01BQ0Y7QUFDQSxXQUFLLFNBQVMsS0FBSyxVQUFVO0FBQzdCLFdBQUssb0JBQW9CLEtBQUsscUJBQXFCO0FBQ25ELFdBQUssU0FBUyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDdkMsV0FBSyxXQUFXLEdBQUcsWUFBWSxXQUFXO0FBQzFDLFdBQUssTUFBTSxLQUFLLE9BQU87QUFDdkIsV0FBSyx3QkFBd0I7QUFDN0IsV0FBSyxpQkFBaUI7QUFDdEIsV0FBSyxzQkFBc0I7QUFDM0IsV0FBSyxpQkFBaUIsSUFBSSxNQUFNLE1BQU07QUFDcEMsYUFBSyxTQUFTLE1BQU0sS0FBSyxRQUFRLENBQUM7TUFDcEMsR0FBRyxLQUFLLGdCQUFnQjtJQUMxQjtJQUtBLHVCQUFzQjtBQUFFLGFBQU87SUFBUztJQVF4QyxpQkFBaUIsY0FBYTtBQUM1QixXQUFLO0FBQ0wsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxlQUFlLE1BQU07QUFDMUIsV0FBSyxhQUFhLENBQUM7QUFDbkIsVUFBRyxLQUFLLE1BQUs7QUFDWCxhQUFLLEtBQUssTUFBTTtBQUNoQixhQUFLLE9BQU87TUFDZDtBQUNBLFdBQUssWUFBWTtJQUNuQjtJQU9BLFdBQVU7QUFBRSxhQUFPLFNBQVMsU0FBUyxNQUFNLFFBQVEsSUFBSSxRQUFRO0lBQUs7SUFPcEUsY0FBYTtBQUNYLFVBQUksTUFBTSxLQUFLLGFBQ2IsS0FBSyxhQUFhLEtBQUssVUFBVSxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUMsS0FBSyxLQUFLLElBQUcsQ0FBQztBQUNsRSxVQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSTtBQUFFLGVBQU87TUFBSTtBQUN0QyxVQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSTtBQUFFLGVBQU8sR0FBRyxLQUFLLFNBQVMsS0FBSztNQUFNO0FBRTlELGFBQU8sR0FBRyxLQUFLLFNBQVMsT0FBTyxTQUFTLE9BQU87SUFDakQ7SUFXQSxXQUFXLFVBQVUsTUFBTSxRQUFPO0FBQ2hDLFdBQUs7QUFDTCxXQUFLLGdCQUFnQjtBQUNyQixXQUFLLGVBQWUsTUFBTTtBQUMxQixXQUFLLFNBQVMsVUFBVSxNQUFNLE1BQU07SUFDdEM7SUFTQSxRQUFRLFFBQU87QUFDYixVQUFHLFFBQU87QUFDUixtQkFBVyxRQUFRLElBQUkseUZBQXlGO0FBQ2hILGFBQUssU0FBUyxRQUFRLE1BQU07TUFDOUI7QUFDQSxVQUFHLEtBQUssTUFBSztBQUFFO01BQU87QUFFdEIsV0FBSztBQUNMLFdBQUssZ0JBQWdCO0FBQ3JCLFdBQUssT0FBTyxJQUFJLEtBQUssVUFBVSxLQUFLLFlBQVksQ0FBQztBQUNqRCxXQUFLLEtBQUssYUFBYSxLQUFLO0FBQzVCLFdBQUssS0FBSyxVQUFVLEtBQUs7QUFDekIsV0FBSyxLQUFLLFNBQVMsTUFBTSxLQUFLLFdBQVc7QUFDekMsV0FBSyxLQUFLLFVBQVUsQ0FBQSxVQUFTLEtBQUssWUFBWSxLQUFLO0FBQ25ELFdBQUssS0FBSyxZQUFZLENBQUEsVUFBUyxLQUFLLGNBQWMsS0FBSztBQUN2RCxXQUFLLEtBQUssVUFBVSxDQUFBLFVBQVMsS0FBSyxZQUFZLEtBQUs7SUFDckQ7SUFRQSxJQUFJLE1BQU0sS0FBSyxNQUFLO0FBQUUsV0FBSyxPQUFPLE1BQU0sS0FBSyxJQUFJO0lBQUU7SUFLbkQsWUFBVztBQUFFLGFBQU8sS0FBSyxXQUFXO0lBQUs7SUFTekMsT0FBTyxVQUFTO0FBQ2QsVUFBSSxNQUFNLEtBQUssUUFBUTtBQUN2QixXQUFLLHFCQUFxQixLQUFLLEtBQUssQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUNuRCxhQUFPO0lBQ1Q7SUFNQSxRQUFRLFVBQVM7QUFDZixVQUFJLE1BQU0sS0FBSyxRQUFRO0FBQ3ZCLFdBQUsscUJBQXFCLE1BQU0sS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQ3BELGFBQU87SUFDVDtJQVNBLFFBQVEsVUFBUztBQUNmLFVBQUksTUFBTSxLQUFLLFFBQVE7QUFDdkIsV0FBSyxxQkFBcUIsTUFBTSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDcEQsYUFBTztJQUNUO0lBTUEsVUFBVSxVQUFTO0FBQ2pCLFVBQUksTUFBTSxLQUFLLFFBQVE7QUFDdkIsV0FBSyxxQkFBcUIsUUFBUSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDdEQsYUFBTztJQUNUO0lBUUEsS0FBSyxVQUFTO0FBQ1osVUFBRyxDQUFDLEtBQUssWUFBWSxHQUFFO0FBQUUsZUFBTztNQUFNO0FBQ3RDLFVBQUksTUFBTSxLQUFLLFFBQVE7QUFDdkIsVUFBSSxZQUFZLEtBQUssSUFBSTtBQUN6QixXQUFLLEtBQUssRUFBQyxPQUFPLFdBQVcsT0FBTyxhQUFhLFNBQVMsQ0FBQyxHQUFHLElBQVEsQ0FBQztBQUN2RSxVQUFJLFdBQVcsS0FBSyxVQUFVLENBQUEsUUFBTztBQUNuQyxZQUFHLElBQUksUUFBUSxLQUFJO0FBQ2pCLGVBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNuQixtQkFBUyxLQUFLLElBQUksSUFBSSxTQUFTO1FBQ2pDO01BQ0YsQ0FBQztBQUNELGFBQU87SUFDVDtJQU1BLGtCQUFpQjtBQUNmLG1CQUFhLEtBQUssY0FBYztBQUNoQyxtQkFBYSxLQUFLLHFCQUFxQjtJQUN6QztJQUVBLGFBQVk7QUFDVixVQUFHLEtBQUssVUFBVTtBQUFHLGFBQUssSUFBSSxhQUFhLGdCQUFnQixLQUFLLFlBQVksR0FBRztBQUMvRSxXQUFLLGdCQUFnQjtBQUNyQixXQUFLO0FBQ0wsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxlQUFlLE1BQU07QUFDMUIsV0FBSyxlQUFlO0FBQ3BCLFdBQUsscUJBQXFCLEtBQUssUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFBLE1BQWMsU0FBUyxDQUFDO0lBQ3JFO0lBTUEsbUJBQWtCO0FBQ2hCLFVBQUcsS0FBSyxxQkFBb0I7QUFDMUIsYUFBSyxzQkFBc0I7QUFDM0IsWUFBRyxLQUFLLFVBQVUsR0FBRTtBQUFFLGVBQUssSUFBSSxhQUFhLDBEQUEwRDtRQUFFO0FBQ3hHLGFBQUssaUJBQWlCO0FBQ3RCLGFBQUssZ0JBQWdCO0FBQ3JCLGFBQUssU0FBUyxNQUFNLEtBQUssZUFBZSxnQkFBZ0IsR0FBRyxpQkFBaUIsbUJBQW1CO01BQ2pHO0lBQ0Y7SUFFQSxpQkFBZ0I7QUFDZCxVQUFHLEtBQUssUUFBUSxLQUFLLEtBQUssZUFBYztBQUFFO01BQU87QUFDakQsV0FBSyxzQkFBc0I7QUFDM0IsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxpQkFBaUIsV0FBVyxNQUFNLEtBQUssY0FBYyxHQUFHLEtBQUssbUJBQW1CO0lBQ3ZGO0lBRUEsU0FBUyxVQUFVLE1BQU0sUUFBTztBQUM5QixVQUFHLENBQUMsS0FBSyxNQUFLO0FBQ1osZUFBTyxZQUFZLFNBQVM7TUFDOUI7QUFFQSxXQUFLLGtCQUFrQixNQUFNO0FBQzNCLFlBQUcsS0FBSyxNQUFLO0FBQ1gsY0FBRyxNQUFLO0FBQUUsaUJBQUssS0FBSyxNQUFNLE1BQU0sVUFBVSxFQUFFO1VBQUUsT0FBTztBQUFFLGlCQUFLLEtBQUssTUFBTTtVQUFFO1FBQzNFO0FBRUEsYUFBSyxvQkFBb0IsTUFBTTtBQUM3QixjQUFHLEtBQUssTUFBSztBQUNYLGlCQUFLLEtBQUssU0FBUyxXQUFXO1lBQUU7QUFDaEMsaUJBQUssS0FBSyxVQUFVLFdBQVc7WUFBRTtBQUNqQyxpQkFBSyxLQUFLLFlBQVksV0FBVztZQUFFO0FBQ25DLGlCQUFLLEtBQUssVUFBVSxXQUFXO1lBQUU7QUFDakMsaUJBQUssT0FBTztVQUNkO0FBRUEsc0JBQVksU0FBUztRQUN2QixDQUFDO01BQ0gsQ0FBQztJQUNIO0lBRUEsa0JBQWtCLFVBQVUsUUFBUSxHQUFFO0FBQ3BDLFVBQUcsVUFBVSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsS0FBSyxLQUFLLGdCQUFlO0FBQ3hELGlCQUFTO0FBQ1Q7TUFDRjtBQUVBLGlCQUFXLE1BQU07QUFDZixhQUFLLGtCQUFrQixVQUFVLFFBQVEsQ0FBQztNQUM1QyxHQUFHLE1BQU0sS0FBSztJQUNoQjtJQUVBLG9CQUFvQixVQUFVLFFBQVEsR0FBRTtBQUN0QyxVQUFHLFVBQVUsS0FBSyxDQUFDLEtBQUssUUFBUSxLQUFLLEtBQUssZUFBZSxjQUFjLFFBQU87QUFDNUUsaUJBQVM7QUFDVDtNQUNGO0FBRUEsaUJBQVcsTUFBTTtBQUNmLGFBQUssb0JBQW9CLFVBQVUsUUFBUSxDQUFDO01BQzlDLEdBQUcsTUFBTSxLQUFLO0lBQ2hCO0lBRUEsWUFBWSxPQUFNO0FBQ2hCLFVBQUksWUFBWSxTQUFTLE1BQU07QUFDL0IsVUFBRyxLQUFLLFVBQVU7QUFBRyxhQUFLLElBQUksYUFBYSxTQUFTLEtBQUs7QUFDekQsV0FBSyxpQkFBaUI7QUFDdEIsV0FBSyxnQkFBZ0I7QUFDckIsVUFBRyxDQUFDLEtBQUssaUJBQWlCLGNBQWMsS0FBSztBQUMzQyxhQUFLLGVBQWUsZ0JBQWdCO01BQ3RDO0FBQ0EsV0FBSyxxQkFBcUIsTUFBTSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQUEsTUFBYyxTQUFTLEtBQUssQ0FBQztJQUMzRTtJQUtBLFlBQVksT0FBTTtBQUNoQixVQUFHLEtBQUssVUFBVTtBQUFHLGFBQUssSUFBSSxhQUFhLEtBQUs7QUFDaEQsVUFBSSxrQkFBa0IsS0FBSztBQUMzQixVQUFJLG9CQUFvQixLQUFLO0FBQzdCLFdBQUsscUJBQXFCLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFBLE1BQWM7QUFDeEQsaUJBQVMsT0FBTyxpQkFBaUIsaUJBQWlCO01BQ3BELENBQUM7QUFDRCxVQUFHLG9CQUFvQixLQUFLLGFBQWEsb0JBQW9CLEdBQUU7QUFDN0QsYUFBSyxpQkFBaUI7TUFDeEI7SUFDRjtJQUtBLG1CQUFrQjtBQUNoQixXQUFLLFNBQVMsUUFBUSxDQUFBLFlBQVc7QUFDL0IsWUFBRyxFQUFFLFFBQVEsVUFBVSxLQUFLLFFBQVEsVUFBVSxLQUFLLFFBQVEsU0FBUyxJQUFHO0FBQ3JFLGtCQUFRLFFBQVEsZUFBZSxLQUFLO1FBQ3RDO01BQ0YsQ0FBQztJQUNIO0lBS0Esa0JBQWlCO0FBQ2YsY0FBTyxLQUFLLFFBQVEsS0FBSyxLQUFLLFlBQUE7UUFBQSxLQUN2QixjQUFjO0FBQVksaUJBQU87UUFBQSxLQUNqQyxjQUFjO0FBQU0saUJBQU87UUFBQSxLQUMzQixjQUFjO0FBQVMsaUJBQU87UUFBQTtBQUMxQixpQkFBTztNQUFBO0lBRXBCO0lBS0EsY0FBYTtBQUFFLGFBQU8sS0FBSyxnQkFBZ0IsTUFBTTtJQUFPO0lBT3hELE9BQU8sU0FBUTtBQUNiLFdBQUssSUFBSSxRQUFRLGVBQWU7QUFDaEMsV0FBSyxXQUFXLEtBQUssU0FBUyxPQUFPLENBQUEsTUFBSyxFQUFFLFFBQVEsTUFBTSxRQUFRLFFBQVEsQ0FBQztJQUM3RTtJQVFBLElBQUksTUFBSztBQUNQLGVBQVEsT0FBTyxLQUFLLHNCQUFxQjtBQUN2QyxhQUFLLHFCQUFxQixPQUFPLEtBQUsscUJBQXFCLEtBQUssT0FBTyxDQUFDLENBQUMsR0FBQSxNQUFTO0FBQ2hGLGlCQUFPLEtBQUssUUFBUSxHQUFHLE1BQU07UUFDL0IsQ0FBQztNQUNIO0lBQ0Y7SUFTQSxRQUFRLE9BQU8sYUFBYSxDQUFDLEdBQUU7QUFDN0IsVUFBSSxPQUFPLElBQUksUUFBUSxPQUFPLFlBQVksSUFBSTtBQUM5QyxXQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ3ZCLGFBQU87SUFDVDtJQUtBLEtBQUssTUFBSztBQUNSLFVBQUcsS0FBSyxVQUFVLEdBQUU7QUFDbEIsWUFBSSxFQUFDLE9BQU8sT0FBTyxTQUFTLEtBQUssU0FBQSxJQUFZO0FBQzdDLGFBQUssSUFBSSxRQUFRLEdBQUcsU0FBUyxVQUFVLGFBQWEsUUFBUSxPQUFPO01BQ3JFO0FBRUEsVUFBRyxLQUFLLFlBQVksR0FBRTtBQUNwQixhQUFLLE9BQU8sTUFBTSxDQUFBLFdBQVUsS0FBSyxLQUFLLEtBQUssTUFBTSxDQUFDO01BQ3BELE9BQU87QUFDTCxhQUFLLFdBQVcsS0FBSyxNQUFNLEtBQUssT0FBTyxNQUFNLENBQUEsV0FBVSxLQUFLLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztNQUNoRjtJQUNGO0lBTUEsVUFBUztBQUNQLFVBQUksU0FBUyxLQUFLLE1BQU07QUFDeEIsVUFBRyxXQUFXLEtBQUssS0FBSTtBQUFFLGFBQUssTUFBTTtNQUFFLE9BQU87QUFBRSxhQUFLLE1BQU07TUFBTztBQUVqRSxhQUFPLEtBQUssSUFBSSxTQUFTO0lBQzNCO0lBRUEsZ0JBQWU7QUFDYixVQUFHLEtBQUssdUJBQXVCLENBQUMsS0FBSyxZQUFZLEdBQUU7QUFBRTtNQUFPO0FBQzVELFdBQUssc0JBQXNCLEtBQUssUUFBUTtBQUN4QyxXQUFLLEtBQUssRUFBQyxPQUFPLFdBQVcsT0FBTyxhQUFhLFNBQVMsQ0FBQyxHQUFHLEtBQUssS0FBSyxvQkFBbUIsQ0FBQztBQUM1RixXQUFLLHdCQUF3QixXQUFXLE1BQU0sS0FBSyxpQkFBaUIsR0FBRyxLQUFLLG1CQUFtQjtJQUNqRztJQUVBLGtCQUFpQjtBQUNmLFVBQUcsS0FBSyxZQUFZLEtBQUssS0FBSyxXQUFXLFNBQVMsR0FBRTtBQUNsRCxhQUFLLFdBQVcsUUFBUSxDQUFBLGFBQVksU0FBUyxDQUFDO0FBQzlDLGFBQUssYUFBYSxDQUFDO01BQ3JCO0lBQ0Y7SUFFQSxjQUFjLFlBQVc7QUFDdkIsV0FBSyxPQUFPLFdBQVcsTUFBTSxDQUFBLFFBQU87QUFDbEMsWUFBSSxFQUFDLE9BQU8sT0FBTyxTQUFTLEtBQUssU0FBQSxJQUFZO0FBQzdDLFlBQUcsT0FBTyxRQUFRLEtBQUsscUJBQW9CO0FBQ3pDLGVBQUssZ0JBQWdCO0FBQ3JCLGVBQUssc0JBQXNCO0FBQzNCLGVBQUssaUJBQWlCLFdBQVcsTUFBTSxLQUFLLGNBQWMsR0FBRyxLQUFLLG1CQUFtQjtRQUN2RjtBQUVBLFlBQUcsS0FBSyxVQUFVO0FBQUcsZUFBSyxJQUFJLFdBQVcsR0FBRyxRQUFRLFVBQVUsTUFBTSxTQUFTLFNBQVMsT0FBTyxNQUFNLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFFN0gsaUJBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxTQUFTLFFBQVEsS0FBSTtBQUMzQyxnQkFBTSxVQUFVLEtBQUssU0FBUztBQUM5QixjQUFHLENBQUMsUUFBUSxTQUFTLE9BQU8sT0FBTyxTQUFTLFFBQVEsR0FBRTtBQUFFO1VBQVM7QUFDakUsa0JBQVEsUUFBUSxPQUFPLFNBQVMsS0FBSyxRQUFRO1FBQy9DO0FBRUEsaUJBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxxQkFBcUIsUUFBUSxRQUFRLEtBQUk7QUFDL0QsY0FBSSxDQUFDLEVBQUUsUUFBQSxJQUFZLEtBQUsscUJBQXFCLFFBQVE7QUFDckQsbUJBQVMsR0FBRztRQUNkO01BQ0YsQ0FBQztJQUNIO0lBRUEsZUFBZSxPQUFNO0FBQ25CLFVBQUksYUFBYSxLQUFLLFNBQVMsS0FBSyxDQUFBLE1BQUssRUFBRSxVQUFVLFVBQVUsRUFBRSxTQUFTLEtBQUssRUFBRSxVQUFVLEVBQUU7QUFDN0YsVUFBRyxZQUFXO0FBQ1osWUFBRyxLQUFLLFVBQVU7QUFBRyxlQUFLLElBQUksYUFBYSw0QkFBNEIsUUFBUTtBQUMvRSxtQkFBVyxNQUFNO01BQ25CO0lBQ0Y7RUFDRjs7O0FDcmpCTyxNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxvQkFBb0I7SUFDL0I7SUFBcUI7SUFBc0I7SUFDM0M7SUFBdUI7SUFBcUI7SUFBb0I7RUFBQTtBQUUzRCxNQUFNLGdCQUFnQjtBQUN0QixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLG1CQUFtQjtBQUN6QixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLFVBQVU7QUFDaEIsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sV0FBVztBQUNqQixNQUFNLFlBQVk7QUFDbEIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sY0FBYztBQUNwQixNQUFNLHFCQUFxQjtBQUMzQixNQUFNLG1CQUFtQjtBQUN6QixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLG1CQUFtQixDQUFDLFFBQVEsWUFBWSxVQUFVLFNBQVMsWUFBWSxVQUFVLE9BQU8sT0FBTyxRQUFRLFFBQVEsa0JBQWtCLFNBQVMsT0FBQTtBQUNoSixNQUFNLG1CQUFtQixDQUFDLFlBQVksT0FBQTtBQUN0QyxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLGNBQWM7QUFDcEIsTUFBTSxvQkFBb0IsSUFBSTtBQUM5QixNQUFNLGFBQWE7QUFDbkIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sZUFBZTtBQUNyQixNQUFNLGVBQWU7QUFDckIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sZUFBZTtBQUNyQixNQUFNLGVBQWU7QUFDckIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sVUFBVTtBQUNoQixNQUFNLGNBQWM7QUFDcEIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxlQUFlO0FBQ3JCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sZUFBZTtBQUNyQixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLCtCQUErQjtBQUNyQyxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLGVBQWU7QUFHckIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0sV0FBVztJQUN0QixVQUFVO0lBQ1YsVUFBVTtFQUFBO0FBSUwsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sU0FBUztBQUNmLE1BQU0sYUFBYTtBQUNuQixNQUFNLFNBQVM7QUFDZixNQUFNLFFBQVE7QUFDZCxNQUFNLFFBQVE7QUFDZCxNQUFNLFlBQVk7QUMzRXpCLE1BQUEsZ0JBQUEsTUFBbUM7SUFDakMsWUFBWSxPQUFPLFdBQVdDLGFBQVc7QUFDdkMsV0FBSyxhQUFhQTtBQUNsQixXQUFLLFFBQVE7QUFDYixXQUFLLFNBQVM7QUFDZCxXQUFLLFlBQVk7QUFDakIsV0FBSyxhQUFhO0FBQ2xCLFdBQUssZ0JBQWdCQSxZQUFXLFFBQVEsT0FBTyxNQUFNLE9BQU8sRUFBQyxPQUFPLE1BQU0sU0FBQSxFQUFBLENBQUE7SUFBQTtJQUc1RSxNQUFNLFFBQU87QUFDWCxtQkFBYSxLQUFLLFVBQUE7QUFDbEIsV0FBSyxjQUFjLE1BQUE7QUFDbkIsV0FBSyxNQUFNLE1BQU0sTUFBQTtJQUFBO0lBR25CLFNBQVE7QUFDTixXQUFLLGNBQWMsUUFBUSxDQUFBLFdBQVUsS0FBSyxNQUFNLE1BQUEsQ0FBQTtBQUNoRCxXQUFLLGNBQWMsS0FBQSxFQUNoQixRQUFRLE1BQU0sQ0FBQSxVQUFTLEtBQUssY0FBQSxDQUFBLEVBQzVCLFFBQVEsU0FBUyxDQUFBLFdBQVUsS0FBSyxNQUFNLE1BQUEsQ0FBQTtJQUFBO0lBRzNDLFNBQVE7QUFBRSxhQUFPLEtBQUssVUFBVSxLQUFLLE1BQU0sS0FBSztJQUFBO0lBRWhELGdCQUFlO0FBQ2IsVUFBSSxTQUFTLElBQUksT0FBTyxXQUFBO0FBQ3hCLFVBQUksT0FBTyxLQUFLLE1BQU0sS0FBSyxNQUFNLEtBQUssUUFBUSxLQUFLLFlBQVksS0FBSyxNQUFBO0FBQ3BFLGFBQU8sU0FBUyxDQUFDLE1BQU07QUFDckIsWUFBRyxFQUFFLE9BQU8sVUFBVSxNQUFLO0FBQ3pCLGVBQUssVUFBVSxFQUFFLE9BQU8sT0FBTztBQUMvQixlQUFLLFVBQVUsRUFBRSxPQUFPLE1BQUE7UUFBQSxPQUNuQjtBQUNMLGlCQUFPLFNBQVMsaUJBQWlCLEVBQUUsT0FBTyxLQUFBO1FBQUE7TUFBQTtBQUc5QyxhQUFPLGtCQUFrQixJQUFBO0lBQUE7SUFHM0IsVUFBVSxPQUFNO0FBQ2QsVUFBRyxDQUFDLEtBQUssY0FBYyxTQUFBLEdBQVc7QUFBRTtNQUFBO0FBQ3BDLFdBQUssY0FBYyxLQUFLLFNBQVMsS0FBQSxFQUM5QixRQUFRLE1BQU0sTUFBTTtBQUNuQixhQUFLLE1BQU0sU0FBVSxLQUFLLFNBQVMsS0FBSyxNQUFNLEtBQUssT0FBUSxHQUFBO0FBQzNELFlBQUcsQ0FBQyxLQUFLLE9BQUEsR0FBUztBQUNoQixlQUFLLGFBQWEsV0FBVyxNQUFNLEtBQUssY0FBQSxHQUFpQixLQUFLLFdBQVcsY0FBQSxLQUFtQixDQUFBO1FBQUE7TUFBQSxDQUFBO0lBQUE7RUFBQTtBQzNDL0YsTUFBSSxXQUFXLENBQUMsS0FBSyxRQUFRLFFBQVEsU0FBUyxRQUFRLE1BQU0sS0FBSyxHQUFBO0FBRWpFLE1BQUksUUFBUSxDQUFDLFFBQVE7QUFDMUIsUUFBSSxPQUFPLE9BQU87QUFDbEIsV0FBTyxTQUFTLFlBQWEsU0FBUyxZQUFZLGlCQUFpQixLQUFLLEdBQUE7RUFBQTtBQUduRSxXQUFBLHFCQUE2QjtBQUNsQyxRQUFJLE1BQU0sb0JBQUksSUFBQTtBQUNkLFFBQUksUUFBUSxTQUFTLGlCQUFpQixPQUFBO0FBQ3RDLGFBQVEsSUFBSSxHQUFHLE1BQU0sTUFBTSxRQUFRLElBQUksS0FBSyxLQUFJO0FBQzlDLFVBQUcsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFBLEdBQUk7QUFDdEIsZ0JBQVEsTUFBTSwwQkFBMEIsTUFBTSxHQUFHLGdDQUFBO01BQUEsT0FDNUM7QUFDTCxZQUFJLElBQUksTUFBTSxHQUFHLEVBQUE7TUFBQTtJQUFBO0VBQUE7QUFLaEIsTUFBSSxRQUFRLENBQUMsTUFBTSxNQUFNLEtBQUssUUFBUTtBQUMzQyxRQUFHLEtBQUssV0FBVyxlQUFBLEdBQWlCO0FBQ2xDLGNBQVEsSUFBSSxHQUFHLEtBQUssTUFBTSxTQUFTLFVBQVUsR0FBQTtJQUFBO0VBQUE7QUFLMUMsTUFBSUMsV0FBVSxDQUFDLFFBQVEsT0FBTyxRQUFRLGFBQWEsTUFBTSxXQUFXO0FBQUUsV0FBTztFQUFBO0FBRTdFLE1BQUksUUFBUSxDQUFDLFFBQVE7QUFBRSxXQUFPLEtBQUssTUFBTSxLQUFLLFVBQVUsR0FBQSxDQUFBO0VBQUE7QUFFeEQsTUFBSSxvQkFBb0IsQ0FBQyxJQUFJLFNBQVMsYUFBYTtBQUN4RCxPQUFHO0FBQ0QsVUFBRyxHQUFHLFFBQVEsSUFBSSxVQUFBLEdBQVk7QUFBRSxlQUFPO01BQUE7QUFDdkMsV0FBSyxHQUFHLGlCQUFpQixHQUFHO0lBQUEsU0FDdEIsT0FBTyxRQUFRLEdBQUcsYUFBYSxLQUFLLEVBQUcsWUFBWSxTQUFTLFdBQVcsRUFBQSxLQUFRLEdBQUcsUUFBUSxpQkFBQTtBQUNsRyxXQUFPO0VBQUE7QUFHRixNQUFJLFdBQVcsQ0FBQyxRQUFRO0FBQzdCLFdBQU8sUUFBUSxRQUFRLE9BQU8sUUFBUSxZQUFZLEVBQUUsZUFBZTtFQUFBO0FBRzlELE1BQUksYUFBYSxDQUFDLE1BQU0sU0FBUyxLQUFLLFVBQVUsSUFBQSxNQUFVLEtBQUssVUFBVSxJQUFBO0FBRXpFLE1BQUksVUFBVSxDQUFDLFFBQVE7QUFDNUIsYUFBUSxLQUFLLEtBQUk7QUFBRSxhQUFPO0lBQUE7QUFDMUIsV0FBTztFQUFBO0FBR0YsTUFBSSxRQUFRLENBQUMsSUFBSSxhQUFhLE1BQU0sU0FBUyxFQUFBO0FBRTdDLE1BQUksa0JBQWtCLFNBQVUsU0FBUyxTQUFTLE1BQU1ELGFBQVc7QUFDeEUsWUFBUSxRQUFRLENBQUEsVUFBUztBQUN2QixVQUFJLGdCQUFnQixJQUFJLGNBQWMsT0FBTyxLQUFLLE9BQU8sWUFBWUEsV0FBQTtBQUNyRSxvQkFBYyxPQUFBO0lBQUEsQ0FBQTtFQUFBO0FDNURsQixNQUFJLFVBQVU7SUFDWixlQUFjO0FBQUUsYUFBUSxPQUFRLFFBQVEsY0FBZTtJQUFBO0lBRXZELFVBQVUsY0FBYyxXQUFXLFFBQU87QUFDeEMsYUFBTyxhQUFhLFdBQVcsS0FBSyxTQUFTLFdBQVcsTUFBQSxDQUFBO0lBQUE7SUFHMUQsWUFBWSxjQUFjLFdBQVcsUUFBUSxTQUFTLE1BQUs7QUFDekQsVUFBSSxVQUFVLEtBQUssU0FBUyxjQUFjLFdBQVcsTUFBQTtBQUNyRCxVQUFJLE1BQU0sS0FBSyxTQUFTLFdBQVcsTUFBQTtBQUNuQyxVQUFJLFNBQVMsWUFBWSxPQUFPLFVBQVUsS0FBSyxPQUFBO0FBQy9DLG1CQUFhLFFBQVEsS0FBSyxLQUFLLFVBQVUsTUFBQSxDQUFBO0FBQ3pDLGFBQU87SUFBQTtJQUdULFNBQVMsY0FBYyxXQUFXLFFBQU87QUFDdkMsYUFBTyxLQUFLLE1BQU0sYUFBYSxRQUFRLEtBQUssU0FBUyxXQUFXLE1BQUEsQ0FBQSxDQUFBO0lBQUE7SUFHbEUsbUJBQW1CLFVBQVM7QUFDMUIsVUFBRyxDQUFDLEtBQUssYUFBQSxHQUFlO0FBQUU7TUFBQTtBQUMxQixjQUFRLGFBQWEsU0FBUyxRQUFRLFNBQVMsQ0FBQSxDQUFBLEdBQUssSUFBSSxPQUFPLFNBQVMsSUFBQTtJQUFBO0lBRzFFLFVBQVUsTUFBTSxNQUFNLElBQUc7QUFDdkIsVUFBRyxLQUFLLGFBQUEsR0FBZTtBQUNyQixZQUFHLE9BQU8sT0FBTyxTQUFTLE1BQUs7QUFDN0IsY0FBRyxLQUFLLFFBQVEsY0FBYyxLQUFLLFFBQU87QUFFeEMsZ0JBQUksZUFBZSxRQUFRLFNBQVMsQ0FBQTtBQUNwQyx5QkFBYSxTQUFTLEtBQUs7QUFDM0Isb0JBQVEsYUFBYSxjQUFjLElBQUksT0FBTyxTQUFTLElBQUE7VUFBQTtBQUd6RCxpQkFBTyxLQUFLO0FBQ1osa0JBQVEsT0FBTyxTQUFTLE1BQU0sSUFBSSxNQUFNLElBQUE7QUFDeEMsY0FBSSxTQUFTLEtBQUssZ0JBQWdCLE9BQU8sU0FBUyxJQUFBO0FBRWxELGNBQUcsUUFBTztBQUNSLG1CQUFPLGVBQUE7VUFBQSxXQUNDLEtBQUssU0FBUyxZQUFXO0FBQ2pDLG1CQUFPLE9BQU8sR0FBRyxDQUFBO1VBQUE7UUFBQTtNQUFBLE9BR2hCO0FBQ0wsYUFBSyxTQUFTLEVBQUE7TUFBQTtJQUFBO0lBSWxCLFVBQVUsTUFBTSxPQUFNO0FBQ3BCLGVBQVMsU0FBUyxHQUFHLFFBQVE7SUFBQTtJQUcvQixVQUFVLE1BQUs7QUFDYixhQUFPLFNBQVMsT0FBTyxRQUFRLElBQUksT0FBTyxpQkFBa0IsMkJBQUEsR0FBaUMsSUFBQTtJQUFBO0lBRy9GLFNBQVMsT0FBTyxPQUFNO0FBQ3BCLFVBQUcsT0FBTTtBQUFFLGdCQUFRLFVBQVUscUJBQXFCLFFBQVEseUJBQUE7TUFBQTtBQUMxRCxhQUFPLFdBQVc7SUFBQTtJQUdwQixTQUFTLFdBQVcsUUFBTztBQUFFLGFBQU8sR0FBRyxhQUFhO0lBQUE7SUFFcEQsZ0JBQWdCLFdBQVU7QUFDeEIsVUFBSUUsUUFBTyxVQUFVLFNBQUEsRUFBVyxVQUFVLENBQUE7QUFDMUMsVUFBR0EsVUFBUyxJQUFHO0FBQUU7TUFBQTtBQUNqQixhQUFPLFNBQVMsZUFBZUEsS0FBQSxLQUFTLFNBQVMsY0FBYyxXQUFXQSxTQUFBO0lBQUE7RUFBQTtBQUk5RSxNQUFPLGtCQUFRO0FDM0NmLE1BQUksTUFBTTtJQUNSLEtBQUssSUFBRztBQUFFLGFBQU8sU0FBUyxlQUFlLEVBQUEsS0FBTyxTQUFTLG1CQUFtQixJQUFBO0lBQUE7SUFFNUUsWUFBWSxJQUFJLFdBQVU7QUFDeEIsU0FBRyxVQUFVLE9BQU8sU0FBQTtBQUNwQixVQUFHLEdBQUcsVUFBVSxXQUFXLEdBQUU7QUFBRSxXQUFHLGdCQUFnQixPQUFBO01BQUE7SUFBQTtJQUdwRCxJQUFJLE1BQU0sT0FBTyxVQUFTO0FBQ3hCLFVBQUcsQ0FBQyxNQUFLO0FBQUUsZUFBTyxDQUFBO01BQUE7QUFDbEIsVUFBSSxRQUFRLE1BQU0sS0FBSyxLQUFLLGlCQUFpQixLQUFBLENBQUE7QUFDN0MsYUFBTyxXQUFXLE1BQU0sUUFBUSxRQUFBLElBQVk7SUFBQTtJQUc5QyxnQkFBZ0IsTUFBSztBQUNuQixVQUFJLFdBQVcsU0FBUyxjQUFjLFVBQUE7QUFDdEMsZUFBUyxZQUFZO0FBQ3JCLGFBQU8sU0FBUyxRQUFRO0lBQUE7SUFHMUIsY0FBYyxJQUFHO0FBQUUsYUFBTyxHQUFHLFNBQVMsVUFBVSxHQUFHLGFBQWEsY0FBQSxNQUFvQjtJQUFBO0lBRXBGLGlCQUFpQixNQUFLO0FBQUUsYUFBTyxLQUFLLElBQUksTUFBTSxzQkFBc0IsaUJBQUE7SUFBQTtJQUVwRSxzQkFBc0IsTUFBTSxLQUFJO0FBQzlCLGFBQU8sS0FBSyx5QkFBeUIsS0FBSyxJQUFJLE1BQU0sSUFBSSxrQkFBa0IsT0FBQSxHQUFVLElBQUE7SUFBQTtJQUd0RixlQUFlLE1BQUs7QUFDbEIsYUFBTyxLQUFLLE1BQU0sSUFBSSxRQUFRLE1BQU0sV0FBQSxJQUFlLE9BQU87SUFBQTtJQUc1RCxzQkFBc0IsSUFBRztBQUN2QixVQUFHLEtBQUssV0FBVyxFQUFBLEdBQUk7QUFBRSxXQUFHLGFBQWEsYUFBYSxFQUFBO01BQUE7QUFDdEQsV0FBSyxXQUFXLElBQUksYUFBYSxJQUFBO0lBQUE7SUFHbkMsMEJBQTBCLE1BQU0sVUFBUztBQUN2QyxVQUFJLFdBQVcsU0FBUyxjQUFjLFVBQUE7QUFDdEMsZUFBUyxZQUFZO0FBQ3JCLGFBQU8sS0FBSyxnQkFBZ0IsU0FBUyxTQUFTLFFBQUE7SUFBQTtJQUdoRCxVQUFVLElBQUksV0FBVTtBQUN0QixjQUFRLEdBQUcsYUFBYSxTQUFBLEtBQWMsR0FBRyxhQUFhLGlCQUFBLE9BQXdCO0lBQUE7SUFHaEYsWUFBWSxJQUFJLFdBQVcsYUFBWTtBQUNyQyxhQUFPLEdBQUcsZ0JBQWdCLFlBQVksUUFBUSxHQUFHLGFBQWEsU0FBQSxDQUFBLEtBQWU7SUFBQTtJQUcvRSxjQUFjLElBQUc7QUFBRSxhQUFPLEtBQUssSUFBSSxJQUFJLElBQUksYUFBQTtJQUFBO0lBRTNDLGdCQUFnQixJQUFJLFVBQVM7QUFDM0IsYUFBTyxLQUFLLElBQUksSUFBSSxHQUFHLHFCQUFxQixrQkFBa0IsWUFBQTtJQUFBO0lBR2hFLGVBQWUsTUFBTSxNQUFLO0FBQ3hCLFVBQUksVUFBVSxJQUFJLElBQUksSUFBQTtBQUN0QixhQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssUUFBUTtBQUMvQixZQUFJLFdBQVcsSUFBSSxrQkFBa0IsVUFBVTtBQUUvQyxhQUFLLHlCQUF5QixLQUFLLElBQUksTUFBTSxRQUFBLEdBQVcsSUFBQSxFQUNyRCxJQUFJLENBQUEsT0FBTSxTQUFTLEdBQUcsYUFBYSxhQUFBLENBQUEsQ0FBQSxFQUNuQyxRQUFRLENBQUEsYUFBWSxJQUFJLE9BQU8sUUFBQSxDQUFBO0FBRWxDLGVBQU87TUFBQSxHQUNOLE9BQUE7SUFBQTtJQUdMLHlCQUF5QixPQUFPLFFBQU87QUFDckMsVUFBRyxPQUFPLGNBQWMsaUJBQUEsR0FBbUI7QUFDekMsZUFBTyxNQUFNLE9BQU8sQ0FBQSxPQUFNLEtBQUssbUJBQW1CLElBQUksTUFBQSxDQUFBO01BQUEsT0FDakQ7QUFDTCxlQUFPO01BQUE7SUFBQTtJQUlYLG1CQUFtQixNQUFNLFFBQU87QUFDOUIsYUFBTSxPQUFPLEtBQUssWUFBVztBQUMzQixZQUFHLEtBQUssV0FBVyxNQUFBLEdBQVE7QUFBRSxpQkFBTztRQUFBO0FBQ3BDLFlBQUcsS0FBSyxhQUFhLFdBQUEsTUFBaUIsTUFBSztBQUFFLGlCQUFPO1FBQUE7TUFBQTtJQUFBO0lBSXhELFFBQVEsSUFBSSxLQUFJO0FBQUUsYUFBTyxHQUFHLGdCQUFnQixHQUFHLGFBQWE7SUFBQTtJQUU1RCxjQUFjLElBQUksS0FBSTtBQUFFLFNBQUcsZ0JBQWdCLE9BQVEsR0FBRyxhQUFhO0lBQUE7SUFFbkUsV0FBVyxJQUFJLEtBQUssT0FBTTtBQUN4QixVQUFHLENBQUMsR0FBRyxjQUFhO0FBQUUsV0FBRyxlQUFlLENBQUE7TUFBQTtBQUN4QyxTQUFHLGFBQWEsT0FBTztJQUFBO0lBR3pCLGNBQWMsSUFBSSxLQUFLLFlBQVksWUFBVztBQUM1QyxVQUFJLFdBQVcsS0FBSyxRQUFRLElBQUksR0FBQTtBQUNoQyxVQUFHLGFBQWEsUUFBVTtBQUN4QixhQUFLLFdBQVcsSUFBSSxLQUFLLFdBQVcsVUFBQSxDQUFBO01BQUEsT0FDL0I7QUFDTCxhQUFLLFdBQVcsSUFBSSxLQUFLLFdBQVcsUUFBQSxDQUFBO01BQUE7SUFBQTtJQUl4QyxhQUFhLFFBQVEsUUFBTztBQUMxQixVQUFHLE9BQU8sY0FBYTtBQUNyQixlQUFPLGVBQWUsT0FBTztNQUFBO0lBQUE7SUFJakMsU0FBUyxLQUFJO0FBQ1gsVUFBSSxVQUFVLFNBQVMsY0FBYyxPQUFBO0FBQ3JDLFVBQUksRUFBQyxRQUFRLE9BQUEsSUFBVSxRQUFRO0FBQy9CLGVBQVMsUUFBUSxHQUFHLFVBQVUsS0FBSyxNQUFNLFVBQVU7SUFBQTtJQUdyRCxTQUFTLElBQUksT0FBTyxhQUFhLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLFVBQVM7QUFDcEcsVUFBSUMsWUFBVyxHQUFHLGFBQWEsV0FBQTtBQUMvQixVQUFJLFdBQVcsR0FBRyxhQUFhLFdBQUE7QUFDL0IsVUFBR0EsY0FBYSxJQUFHO0FBQUUsUUFBQUEsWUFBVztNQUFBO0FBQ2hDLFVBQUcsYUFBYSxJQUFHO0FBQUUsbUJBQVc7TUFBQTtBQUNoQyxVQUFJLFFBQVFBLGFBQVk7QUFDeEIsY0FBTyxPQUFBO1FBQUEsS0FDQTtBQUFNLGlCQUFPLFNBQUE7UUFBQSxLQUViO0FBQ0gsY0FBRyxLQUFLLEtBQUssSUFBSSxlQUFBLEdBQWlCO0FBQ2hDLGVBQUcsaUJBQWlCLFFBQVEsTUFBTSxTQUFBLENBQUE7VUFBQTtBQUVwQztRQUFBO0FBR0EsY0FBSSxVQUFVLFNBQVMsS0FBQTtBQUN2QixjQUFJLFVBQVUsTUFBTSxXQUFXLEtBQUssY0FBYyxJQUFJLFNBQUEsSUFBYSxTQUFBO0FBQ25FLGNBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxrQkFBa0IsT0FBQTtBQUN2RCxjQUFHLE1BQU0sT0FBQSxHQUFTO0FBQUUsbUJBQU8sU0FBUyxvQ0FBb0MsT0FBQTtVQUFBO0FBQ3hFLGNBQUcsVUFBUztBQUNWLGdCQUFJLGFBQWE7QUFDakIsZ0JBQUcsTUFBTSxTQUFTLFdBQVU7QUFDMUIsa0JBQUksVUFBVSxLQUFLLFFBQVEsSUFBSSxpQkFBQTtBQUMvQixtQkFBSyxXQUFXLElBQUksbUJBQW1CLE1BQU0sR0FBQTtBQUM3QywyQkFBYSxZQUFZLE1BQU07WUFBQTtBQUdqQyxnQkFBRyxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksU0FBQSxHQUFXO0FBQzVDLHFCQUFPO1lBQUEsT0FDRjtBQUNMLHVCQUFBO0FBQ0EsbUJBQUssV0FBVyxJQUFJLFdBQVcsSUFBQTtBQUMvQix5QkFBVyxNQUFNO0FBQ2Ysb0JBQUcsWUFBQSxHQUFjO0FBQUUsdUJBQUssYUFBYSxJQUFJLGdCQUFBO2dCQUFBO2NBQUEsR0FDeEMsT0FBQTtZQUFBO1VBQUEsT0FFQTtBQUNMLHVCQUFXLE1BQU07QUFDZixrQkFBRyxZQUFBLEdBQWM7QUFBRSxxQkFBSyxhQUFhLElBQUksa0JBQWtCLFlBQUE7Y0FBQTtZQUFBLEdBQzFELE9BQUE7VUFBQTtBQUdMLGNBQUksT0FBTyxHQUFHO0FBQ2QsY0FBRyxRQUFRLEtBQUssS0FBSyxNQUFNLGVBQUEsR0FBaUI7QUFDMUMsaUJBQUssaUJBQWlCLFVBQVUsTUFBTTtBQUNwQyxvQkFBTSxLQUFNLElBQUksU0FBUyxJQUFBLEVBQU8sUUFBQSxHQUFXLENBQUMsQ0FBQyxJQUFBLE1BQVU7QUFDckQsb0JBQUksUUFBUSxLQUFLLGNBQWMsVUFBVSxRQUFBO0FBQ3pDLHFCQUFLLFNBQVMsT0FBTyxnQkFBQTtBQUNyQixxQkFBSyxjQUFjLE9BQU8sU0FBQTtjQUFBLENBQUE7WUFBQSxDQUFBO1VBQUE7QUFJaEMsY0FBRyxLQUFLLEtBQUssSUFBSSxlQUFBLEdBQWlCO0FBQ2hDLGVBQUcsaUJBQWlCLFFBQVEsTUFBTSxLQUFLLGFBQWEsSUFBSSxnQkFBQSxDQUFBO1VBQUE7TUFBQTtJQUFBO0lBS2hFLGFBQWEsSUFBSSxLQUFLLGNBQWE7QUFDakMsVUFBSSxDQUFDLE9BQU8sT0FBQSxJQUFXLEtBQUssUUFBUSxJQUFJLEdBQUE7QUFDeEMsVUFBRyxDQUFDLGNBQWE7QUFBRSx1QkFBZTtNQUFBO0FBQ2xDLFVBQUcsaUJBQWlCLE9BQU07QUFDeEIsYUFBSyxTQUFTLElBQUksR0FBQTtBQUNsQixnQkFBQTtNQUFBO0lBQUE7SUFJSixLQUFLLElBQUksS0FBSTtBQUNYLFVBQUcsS0FBSyxRQUFRLElBQUksR0FBQSxNQUFTLE1BQUs7QUFBRSxlQUFPO01BQUE7QUFDM0MsV0FBSyxXQUFXLElBQUksS0FBSyxJQUFBO0FBQ3pCLGFBQU87SUFBQTtJQUdULFNBQVMsSUFBSSxLQUFLLFVBQVUsV0FBVztJQUFBLEdBQUk7QUFDekMsVUFBSSxDQUFDLFlBQUEsSUFBZ0IsS0FBSyxRQUFRLElBQUksR0FBQSxLQUFRLENBQUMsR0FBRyxPQUFBO0FBQ2xEO0FBQ0EsV0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLGNBQWMsT0FBQSxDQUFBO0FBQ3hDLGFBQU87SUFBQTtJQUdULGFBQWEsV0FBVyxJQUFJLGdCQUFlO0FBQ3pDLFVBQUksUUFBUSxHQUFHLGdCQUFnQixHQUFHLGFBQWEsY0FBQTtBQUUvQyxVQUFJLFFBQVEsU0FBUyxVQUFVLGNBQWMsUUFBUSxtQkFBbUIsU0FBQTtBQUN4RSxVQUFHLENBQUMsT0FBTTtBQUFFO01BQUE7QUFFWixVQUFHLEVBQUUsS0FBSyxRQUFRLE9BQU8sZUFBQSxLQUFvQixLQUFLLFFBQVEsTUFBTSxNQUFNLGlCQUFBLElBQW9CO0FBQ3hGLFdBQUcsVUFBVSxJQUFJLHFCQUFBO01BQUE7SUFBQTtJQUlyQixVQUFVLFNBQVMsZ0JBQWU7QUFDaEMsVUFBRyxRQUFRLE1BQU0sUUFBUSxNQUFLO0FBQzVCLGFBQUssSUFBSSxRQUFRLE1BQU0sSUFBSSxtQkFBbUIsUUFBUSxVQUFVLG1CQUFtQixRQUFRLFVBQVUsQ0FBQyxPQUFPO0FBQzNHLGVBQUssWUFBWSxJQUFJLHFCQUFBO1FBQUEsQ0FBQTtNQUFBO0lBQUE7SUFLM0IsV0FBVyxNQUFLO0FBQ2QsYUFBTyxLQUFLLGdCQUFnQixLQUFLLGFBQWEsYUFBQTtJQUFBO0lBR2hELFlBQVksTUFBSztBQUNmLGFBQU8sS0FBSyxnQkFBZ0IsS0FBSyxhQUFhLFVBQUEsTUFBZ0I7SUFBQTtJQUdoRSxjQUFjLElBQUc7QUFDZixhQUFPLEtBQUssV0FBVyxFQUFBLElBQU0sS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLGdCQUFBLEVBQWtCO0lBQUE7SUFHdkUsY0FBYyxRQUFRLE1BQU0sT0FBTyxDQUFBLEdBQUc7QUFDcEMsVUFBSSxVQUFVLEtBQUssWUFBWSxTQUFZLE9BQU8sQ0FBQyxDQUFDLEtBQUs7QUFDekQsVUFBSSxZQUFZLEVBQUMsU0FBa0IsWUFBWSxNQUFNLFFBQVEsS0FBSyxVQUFVLENBQUEsRUFBQTtBQUM1RSxVQUFJLFFBQVEsU0FBUyxVQUFVLElBQUksV0FBVyxTQUFTLFNBQUEsSUFBYSxJQUFJLFlBQVksTUFBTSxTQUFBO0FBQzFGLGFBQU8sY0FBYyxLQUFBO0lBQUE7SUFHdkIsVUFBVSxNQUFNLE1BQUs7QUFDbkIsVUFBRyxPQUFRLFNBQVUsYUFBWTtBQUMvQixlQUFPLEtBQUssVUFBVSxJQUFBO01BQUEsT0FDakI7QUFDTCxZQUFJLFNBQVMsS0FBSyxVQUFVLEtBQUE7QUFDNUIsZUFBTyxZQUFZO0FBQ25CLGVBQU87TUFBQTtJQUFBO0lBSVgsV0FBVyxRQUFRLFFBQVEsT0FBTyxDQUFBLEdBQUc7QUFDbkMsVUFBSSxVQUFVLEtBQUssV0FBVyxDQUFBO0FBQzlCLFVBQUksWUFBWSxLQUFLO0FBQ3JCLFVBQUksY0FBYyxPQUFPO0FBQ3pCLGVBQVEsSUFBSSxZQUFZLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSTtBQUM5QyxZQUFJLE9BQU8sWUFBWSxHQUFHO0FBQzFCLFlBQUcsUUFBUSxRQUFRLElBQUEsSUFBUSxHQUFFO0FBQUUsaUJBQU8sYUFBYSxNQUFNLE9BQU8sYUFBYSxJQUFBLENBQUE7UUFBQTtNQUFBO0FBRy9FLFVBQUksY0FBYyxPQUFPO0FBQ3pCLGVBQVEsSUFBSSxZQUFZLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSTtBQUM5QyxZQUFJLE9BQU8sWUFBWSxHQUFHO0FBQzFCLFlBQUcsV0FBVTtBQUNYLGNBQUcsS0FBSyxXQUFXLE9BQUEsS0FBWSxDQUFDLE9BQU8sYUFBYSxJQUFBLEdBQU07QUFBRSxtQkFBTyxnQkFBZ0IsSUFBQTtVQUFBO1FBQUEsT0FDOUU7QUFDTCxjQUFHLENBQUMsT0FBTyxhQUFhLElBQUEsR0FBTTtBQUFFLG1CQUFPLGdCQUFnQixJQUFBO1VBQUE7UUFBQTtNQUFBO0lBQUE7SUFLN0Qsa0JBQWtCLFFBQVEsUUFBTztBQUUvQixVQUFHLEVBQUUsa0JBQWtCLG9CQUFtQjtBQUFFLFlBQUksV0FBVyxRQUFRLFFBQVEsRUFBQyxTQUFTLENBQUMsT0FBQSxFQUFBLENBQUE7TUFBQTtBQUN0RixVQUFHLE9BQU8sVUFBUztBQUNqQixlQUFPLGFBQWEsWUFBWSxJQUFBO01BQUEsT0FDM0I7QUFDTCxlQUFPLGdCQUFnQixVQUFBO01BQUE7SUFBQTtJQUkzQixrQkFBa0IsSUFBRztBQUNuQixhQUFPLEdBQUcsc0JBQXNCLEdBQUcsU0FBUyxVQUFVLEdBQUcsU0FBUztJQUFBO0lBR3BFLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYTtBQUNqRCxVQUFHLENBQUMsSUFBSSxlQUFlLE9BQUEsR0FBUztBQUFFO01BQUE7QUFDbEMsVUFBSSxhQUFhLFFBQVEsUUFBUSxRQUFBO0FBQ2pDLFVBQUcsUUFBUSxVQUFTO0FBQUUsZ0JBQVEsS0FBQTtNQUFBO0FBQzlCLFVBQUcsQ0FBQyxZQUFXO0FBQUUsZ0JBQVEsTUFBQTtNQUFBO0FBQ3pCLFVBQUcsS0FBSyxrQkFBa0IsT0FBQSxHQUFTO0FBQ2pDLGdCQUFRLGtCQUFrQixnQkFBZ0IsWUFBQTtNQUFBO0lBQUE7SUFJOUMsWUFBWSxJQUFHO0FBQUUsYUFBTywrQkFBK0IsS0FBSyxHQUFHLE9BQUEsS0FBWSxHQUFHLFNBQVM7SUFBQTtJQUV2RixpQkFBaUIsSUFBRztBQUNsQixVQUFHLGNBQWMsb0JBQW9CLGlCQUFpQixRQUFRLEdBQUcsS0FBSyxrQkFBQSxDQUFBLEtBQXdCLEdBQUU7QUFDOUYsV0FBRyxVQUFVLEdBQUcsYUFBYSxTQUFBLE1BQWU7TUFBQTtJQUFBO0lBSWhELGVBQWUsSUFBRztBQUFFLGFBQU8saUJBQWlCLFFBQVEsR0FBRyxJQUFBLEtBQVM7SUFBQTtJQUVoRSx5QkFBeUIsSUFBSSxvQkFBbUI7QUFDOUMsYUFBTyxHQUFHLGdCQUFnQixHQUFHLGFBQWEsa0JBQUEsTUFBd0I7SUFBQTtJQUdwRSxlQUFlLFFBQVEsTUFBTSxhQUFZO0FBQ3ZDLFVBQUksTUFBTSxPQUFPLGFBQWEsT0FBQTtBQUM5QixVQUFHLFFBQVEsTUFBSztBQUFFLGVBQU87TUFBQTtBQUN6QixVQUFJLFNBQVMsT0FBTyxhQUFhLFdBQUE7QUFFakMsVUFBRyxJQUFJLFlBQVksTUFBQSxLQUFXLE9BQU8sYUFBYSxXQUFBLE1BQWlCLE1BQUs7QUFDdEUsWUFBRyxJQUFJLGNBQWMsTUFBQSxHQUFRO0FBQUUsY0FBSSxXQUFXLFFBQVEsTUFBTSxFQUFDLFdBQVcsS0FBQSxDQUFBO1FBQUE7QUFDeEUsWUFBSSxXQUFXLFFBQVEsU0FBUyxJQUFBO0FBQ2hDLGVBQU87TUFBQSxPQUNGO0FBQ0wsMEJBQWtCLFFBQVEsQ0FBQSxjQUFhO0FBQ3JDLGlCQUFPLFVBQVUsU0FBUyxTQUFBLEtBQWMsS0FBSyxVQUFVLElBQUksU0FBQTtRQUFBLENBQUE7QUFFN0QsYUFBSyxhQUFhLFNBQVMsR0FBQTtBQUMzQixhQUFLLGFBQWEsYUFBYSxNQUFBO0FBQy9CLGVBQU87TUFBQTtJQUFBO0lBSVgsZ0JBQWdCLFdBQVcsV0FBVTtBQUNuQyxVQUFHLElBQUksWUFBWSxXQUFXLFdBQVcsQ0FBQyxVQUFVLFNBQUEsQ0FBQSxHQUFZO0FBQzlELFlBQUksV0FBVyxDQUFBO0FBQ2Ysa0JBQVUsV0FBVyxRQUFRLENBQUEsY0FBYTtBQUN4QyxjQUFHLENBQUMsVUFBVSxJQUFHO0FBRWYsZ0JBQUksa0JBQWtCLFVBQVUsYUFBYSxLQUFLLGFBQWEsVUFBVSxVQUFVLEtBQUEsTUFBVztBQUM5RixnQkFBRyxDQUFDLGlCQUFnQjtBQUNsQix1QkFBUzs7MkJBQ3FCLFVBQVUsYUFBYSxVQUFVLFdBQVcsS0FBQTs7Q0FBQTtZQUFBO0FBRTVFLHFCQUFTLEtBQUssU0FBQTtVQUFBO1FBQUEsQ0FBQTtBQUdsQixpQkFBUyxRQUFRLENBQUEsY0FBYSxVQUFVLE9BQUEsQ0FBQTtNQUFBO0lBQUE7SUFJNUMscUJBQXFCLFdBQVcsU0FBUyxPQUFNO0FBQzdDLFVBQUksZ0JBQWdCLG9CQUFJLElBQUksQ0FBQyxNQUFNLGFBQWEsWUFBWSxVQUFVLFdBQUEsQ0FBQTtBQUN0RSxVQUFHLFVBQVUsUUFBUSxZQUFBLE1BQWtCLFFBQVEsWUFBQSxHQUFjO0FBQzNELGNBQU0sS0FBSyxVQUFVLFVBQUEsRUFDbEIsT0FBTyxDQUFBLFNBQVEsQ0FBQyxjQUFjLElBQUksS0FBSyxLQUFLLFlBQUEsQ0FBQSxDQUFBLEVBQzVDLFFBQVEsQ0FBQSxTQUFRLFVBQVUsZ0JBQWdCLEtBQUssSUFBQSxDQUFBO0FBRWxELGVBQU8sS0FBSyxLQUFBLEVBQ1QsT0FBTyxDQUFBLFNBQVEsQ0FBQyxjQUFjLElBQUksS0FBSyxZQUFBLENBQUEsQ0FBQSxFQUN2QyxRQUFRLENBQUEsU0FBUSxVQUFVLGFBQWEsTUFBTSxNQUFNLEtBQUEsQ0FBQTtBQUV0RCxlQUFPO01BQUEsT0FFRjtBQUNMLFlBQUksZUFBZSxTQUFTLGNBQWMsT0FBQTtBQUMxQyxlQUFPLEtBQUssS0FBQSxFQUFPLFFBQVEsQ0FBQSxTQUFRLGFBQWEsYUFBYSxNQUFNLE1BQU0sS0FBQSxDQUFBO0FBQ3pFLHNCQUFjLFFBQVEsQ0FBQSxTQUFRLGFBQWEsYUFBYSxNQUFNLFVBQVUsYUFBYSxJQUFBLENBQUEsQ0FBQTtBQUNyRixxQkFBYSxZQUFZLFVBQVU7QUFDbkMsa0JBQVUsWUFBWSxZQUFBO0FBQ3RCLGVBQU87TUFBQTtJQUFBO0lBSVgsVUFBVSxJQUFJLE1BQU0sWUFBVztBQUM3QixVQUFJLE1BQU0sSUFBSSxRQUFRLElBQUksUUFBQSxLQUFhLENBQUEsR0FBSSxLQUFLLENBQUMsQ0FBQyxZQUFBLE1BQW9CLFNBQVMsWUFBQTtBQUMvRSxVQUFHLElBQUc7QUFDSixZQUFJLENBQUMsT0FBTyxLQUFLLGFBQUEsSUFBaUI7QUFDbEMsZUFBTztNQUFBLE9BQ0Y7QUFDTCxlQUFPLE9BQU8sZUFBZ0IsYUFBYSxXQUFBLElBQWU7TUFBQTtJQUFBO0lBSTlELGFBQWEsSUFBSSxNQUFLO0FBQ3BCLFdBQUssY0FBYyxJQUFJLFVBQVUsQ0FBQSxHQUFJLENBQUEsUUFBTztBQUMxQyxlQUFPLElBQUksT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFBLE1BQU8saUJBQWlCLElBQUE7TUFBQSxDQUFBO0lBQUE7SUFJOUQsVUFBVSxJQUFJLE1BQU0sSUFBRztBQUNyQixVQUFJLGdCQUFnQixHQUFHLEVBQUE7QUFDdkIsV0FBSyxjQUFjLElBQUksVUFBVSxDQUFBLEdBQUksQ0FBQSxRQUFPO0FBQzFDLFlBQUksZ0JBQWdCLElBQUksVUFBVSxDQUFDLENBQUMsWUFBQSxNQUFvQixTQUFTLFlBQUE7QUFDakUsWUFBRyxpQkFBaUIsR0FBRTtBQUNwQixjQUFJLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxhQUFBO1FBQUEsT0FDM0I7QUFDTCxjQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksYUFBQSxDQUFBO1FBQUE7QUFFdEIsZUFBTztNQUFBLENBQUE7SUFBQTtJQUlYLHNCQUFzQixJQUFHO0FBQ3ZCLFVBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFBO0FBQzFCLFVBQUcsQ0FBQyxLQUFJO0FBQUU7TUFBQTtBQUVWLFVBQUksUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQUEsTUFBYyxLQUFLLFVBQVUsSUFBSSxNQUFNLEVBQUEsQ0FBQTtJQUFBO0VBQUE7QUFJbkUsTUFBTyxjQUFRO0FDOVpmLE1BQUEsY0FBQSxNQUFpQztJQUFBLE9BQ3hCLFNBQVMsUUFBUSxNQUFLO0FBQzNCLFVBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsVUFBSSxhQUFhLE9BQU8sYUFBYSxxQkFBQSxFQUF1QixNQUFNLEdBQUE7QUFDbEUsVUFBSSxXQUFXLFdBQVcsUUFBUSxhQUFhLFdBQVcsSUFBQSxDQUFBLEtBQVU7QUFDcEUsYUFBTyxLQUFLLE9BQU8sTUFBTSxTQUFTO0lBQUE7SUFBQSxPQUc3QixjQUFjLFFBQVEsTUFBSztBQUNoQyxVQUFJLGtCQUFrQixPQUFPLGFBQWEsb0JBQUEsRUFBc0IsTUFBTSxHQUFBO0FBQ3RFLFVBQUksZ0JBQWdCLGdCQUFnQixRQUFRLGFBQWEsV0FBVyxJQUFBLENBQUEsS0FBVTtBQUM5RSxhQUFPLGlCQUFpQixLQUFLLFNBQVMsUUFBUSxJQUFBO0lBQUE7SUFHaEQsWUFBWSxRQUFRLE1BQU0sTUFBSztBQUM3QixXQUFLLE1BQU0sYUFBYSxXQUFXLElBQUE7QUFDbkMsV0FBSyxTQUFTO0FBQ2QsV0FBSyxPQUFPO0FBQ1osV0FBSyxPQUFPO0FBQ1osV0FBSyxPQUFPO0FBQ1osV0FBSyxlQUFlO0FBQ3BCLFdBQUssVUFBVTtBQUNmLFdBQUssWUFBWTtBQUNqQixXQUFLLG9CQUFvQjtBQUN6QixXQUFLLFVBQVUsV0FBVztNQUFBO0FBQzFCLFdBQUssZUFBZSxLQUFLLFlBQVksS0FBSyxJQUFBO0FBQzFDLFdBQUssT0FBTyxpQkFBaUIsdUJBQXVCLEtBQUssWUFBQTtJQUFBO0lBRzNELFdBQVU7QUFBRSxhQUFPLEtBQUs7SUFBQTtJQUV4QixTQUFTLFVBQVM7QUFDaEIsV0FBSyxZQUFZLEtBQUssTUFBTSxRQUFBO0FBQzVCLFVBQUcsS0FBSyxZQUFZLEtBQUssbUJBQWtCO0FBQ3pDLFlBQUcsS0FBSyxhQUFhLEtBQUk7QUFDdkIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssb0JBQW9CO0FBQ3pCLGVBQUssVUFBVTtBQUNmLGVBQUssS0FBSyxpQkFBaUIsS0FBSyxRQUFRLEtBQUssS0FBSyxLQUFLLE1BQU07QUFDM0QseUJBQWEsWUFBWSxLQUFLLFFBQVEsS0FBSyxJQUFBO0FBQzNDLGlCQUFLLFFBQUE7VUFBQSxDQUFBO1FBQUEsT0FFRjtBQUNMLGVBQUssb0JBQW9CLEtBQUs7QUFDOUIsZUFBSyxLQUFLLGlCQUFpQixLQUFLLFFBQVEsS0FBSyxLQUFLLEtBQUssU0FBQTtRQUFBO01BQUE7SUFBQTtJQUs3RCxTQUFRO0FBQ04sV0FBSyxlQUFlO0FBQ3BCLFdBQUssVUFBVTtBQUNmLFdBQUssUUFBQTtJQUFBO0lBR1AsU0FBUTtBQUFFLGFBQU8sS0FBSztJQUFBO0lBRXRCLE1BQU0sU0FBUyxVQUFTO0FBQ3RCLFdBQUssS0FBSyxpQkFBaUIsS0FBSyxRQUFRLEtBQUssS0FBSyxFQUFDLE9BQU8sT0FBQSxDQUFBO0FBQzFELG1CQUFhLFdBQVcsS0FBSyxNQUFBO0lBQUE7SUFLL0IsT0FBTyxVQUFTO0FBQ2QsV0FBSyxVQUFVLE1BQU07QUFDbkIsYUFBSyxPQUFPLG9CQUFvQix1QkFBdUIsS0FBSyxZQUFBO0FBQzVELGlCQUFBO01BQUE7SUFBQTtJQUlKLGNBQWE7QUFDWCxVQUFJLGFBQWEsS0FBSyxPQUFPLGFBQWEscUJBQUEsRUFBdUIsTUFBTSxHQUFBO0FBQ3ZFLFVBQUcsV0FBVyxRQUFRLEtBQUssR0FBQSxNQUFTLElBQUc7QUFBRSxhQUFLLE9BQUE7TUFBQTtJQUFBO0lBR2hELHFCQUFvQjtBQUNsQixhQUFPO1FBQ0wsZUFBZSxLQUFLLEtBQUs7UUFDekIsTUFBTSxLQUFLLEtBQUs7UUFDaEIsTUFBTSxLQUFLLEtBQUs7UUFDaEIsTUFBTSxLQUFLLEtBQUs7UUFDaEIsS0FBSyxLQUFLO01BQUE7SUFBQTtJQUlkLFNBQVMsV0FBVTtBQUNqQixVQUFHLEtBQUssS0FBSyxVQUFTO0FBQ3BCLFlBQUksV0FBVyxVQUFVLEtBQUssS0FBSyxhQUFhLFNBQVMsOEJBQThCLEtBQUssS0FBSyxVQUFBO0FBQ2pHLGVBQU8sRUFBQyxNQUFNLEtBQUssS0FBSyxVQUFVLFNBQUE7TUFBQSxPQUM3QjtBQUNMLGVBQU8sRUFBQyxNQUFNLFdBQVcsVUFBVSxnQkFBQTtNQUFBO0lBQUE7SUFJdkMsY0FBYyxNQUFLO0FBQ2pCLFdBQUssT0FBTyxLQUFLLFFBQVEsS0FBSztBQUM5QixVQUFHLENBQUMsS0FBSyxNQUFLO0FBQUUsaUJBQVMsa0RBQWtELEtBQUssT0FBTyxFQUFDLE9BQU8sS0FBSyxRQUFRLFVBQVUsS0FBQSxDQUFBO01BQUE7SUFBQTtFQUFBO0FDbEcxSCxNQUFJLHNCQUFzQjtBQUUxQixNQUFBLGVBQUEsTUFBa0M7SUFBQSxPQUN6QixXQUFXLE1BQUs7QUFDckIsVUFBSSxNQUFNLEtBQUs7QUFDZixVQUFHLFFBQVEsUUFBVTtBQUNuQixlQUFPO01BQUEsT0FDRjtBQUNMLGFBQUssV0FBVyx1QkFBdUIsU0FBQTtBQUN2QyxlQUFPLEtBQUs7TUFBQTtJQUFBO0lBQUEsT0FJVCxnQkFBZ0IsU0FBUyxLQUFLLFVBQVM7QUFDNUMsVUFBSSxPQUFPLEtBQUssWUFBWSxPQUFBLEVBQVMsS0FBSyxDQUFBLFVBQVEsS0FBSyxXQUFXLEtBQUEsTUFBVSxHQUFBO0FBQzVFLGVBQVMsSUFBSSxnQkFBZ0IsSUFBQSxDQUFBO0lBQUE7SUFBQSxPQUd4QixxQkFBcUIsUUFBTztBQUNqQyxVQUFJLFNBQVM7QUFDYixrQkFBSSxpQkFBaUIsTUFBQSxFQUFRLFFBQVEsQ0FBQSxVQUFTO0FBQzVDLFlBQUcsTUFBTSxhQUFhLG9CQUFBLE1BQTBCLE1BQU0sYUFBYSxhQUFBLEdBQWU7QUFDaEY7UUFBQTtNQUFBLENBQUE7QUFHSixhQUFPLFNBQVM7SUFBQTtJQUFBLE9BR1gsaUJBQWlCLFNBQVE7QUFDOUIsVUFBSSxRQUFRLEtBQUssWUFBWSxPQUFBO0FBQzdCLFVBQUksV0FBVyxDQUFBO0FBQ2YsWUFBTSxRQUFRLENBQUEsU0FBUTtBQUNwQixZQUFJLFFBQVEsRUFBQyxNQUFNLFFBQVEsS0FBQTtBQUMzQixZQUFJLFlBQVksUUFBUSxhQUFhLGNBQUE7QUFDckMsaUJBQVMsYUFBYSxTQUFTLGNBQWMsQ0FBQTtBQUM3QyxjQUFNLE1BQU0sS0FBSyxXQUFXLElBQUE7QUFDNUIsY0FBTSxPQUFPLEtBQUssUUFBUSxNQUFNO0FBQ2hDLGNBQU0sT0FBTyxLQUFLO0FBQ2xCLGNBQU0sT0FBTyxLQUFLO0FBQ2xCLGlCQUFTLFdBQVcsS0FBSyxLQUFBO01BQUEsQ0FBQTtBQUUzQixhQUFPO0lBQUE7SUFBQSxPQUdGLFdBQVcsU0FBUTtBQUN4QixjQUFRLFFBQVE7QUFDaEIsY0FBUSxnQkFBZ0IsY0FBQTtBQUN4QixrQkFBSSxXQUFXLFNBQVMsU0FBUyxDQUFBLENBQUE7SUFBQTtJQUFBLE9BRzVCLFlBQVksU0FBUyxNQUFLO0FBQy9CLGtCQUFJLFdBQVcsU0FBUyxTQUFTLFlBQUksUUFBUSxTQUFTLE9BQUEsRUFBUyxPQUFPLENBQUEsTUFBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLElBQUEsQ0FBQSxDQUFBO0lBQUE7SUFBQSxPQUdwRixXQUFXLFNBQVMsT0FBTTtBQUMvQixVQUFHLFFBQVEsYUFBYSxVQUFBLE1BQWdCLE1BQUs7QUFDM0MsWUFBSSxXQUFXLE1BQU0sT0FBTyxDQUFBLFNBQVEsQ0FBQyxLQUFLLFlBQVksT0FBQSxFQUFTLEtBQUssQ0FBQSxNQUFLLE9BQU8sR0FBRyxHQUFHLElBQUEsQ0FBQSxDQUFBO0FBQ3RGLG9CQUFJLFdBQVcsU0FBUyxTQUFTLEtBQUssWUFBWSxPQUFBLEVBQVMsT0FBTyxRQUFBLENBQUE7QUFDbEUsZ0JBQVEsUUFBUTtNQUFBLE9BQ1g7QUFDTCxvQkFBSSxXQUFXLFNBQVMsU0FBUyxLQUFBO01BQUE7SUFBQTtJQUFBLE9BSTlCLGlCQUFpQixRQUFPO0FBQzdCLFVBQUksYUFBYSxZQUFJLGlCQUFpQixNQUFBO0FBQ3RDLGFBQU8sTUFBTSxLQUFLLFVBQUEsRUFBWSxPQUFPLENBQUEsT0FBTSxHQUFHLFNBQVMsS0FBSyxZQUFZLEVBQUEsRUFBSSxTQUFTLENBQUE7SUFBQTtJQUFBLE9BR2hGLFlBQVksT0FBTTtBQUN2QixjQUFRLFlBQUksUUFBUSxPQUFPLE9BQUEsS0FBWSxDQUFBLEdBQUksT0FBTyxDQUFBLE1BQUssWUFBWSxTQUFTLE9BQU8sQ0FBQSxDQUFBO0lBQUE7SUFBQSxPQUc5RSx3QkFBd0IsUUFBTztBQUNwQyxVQUFJLGFBQWEsWUFBSSxpQkFBaUIsTUFBQTtBQUN0QyxhQUFPLE1BQU0sS0FBSyxVQUFBLEVBQVksT0FBTyxDQUFBLFVBQVMsS0FBSyx1QkFBdUIsS0FBQSxFQUFPLFNBQVMsQ0FBQTtJQUFBO0lBQUEsT0FHckYsdUJBQXVCLE9BQU07QUFDbEMsYUFBTyxLQUFLLFlBQVksS0FBQSxFQUFPLE9BQU8sQ0FBQSxNQUFLLENBQUMsWUFBWSxjQUFjLE9BQU8sQ0FBQSxDQUFBO0lBQUE7SUFHL0UsWUFBWSxTQUFTLE1BQU0sWUFBVztBQUNwQyxXQUFLLE9BQU87QUFDWixXQUFLLGFBQWE7QUFDbEIsV0FBSyxXQUNILE1BQU0sS0FBSyxhQUFhLHVCQUF1QixPQUFBLEtBQVksQ0FBQSxDQUFBLEVBQ3hELElBQUksQ0FBQSxTQUFRLElBQUksWUFBWSxTQUFTLE1BQU0sSUFBQSxDQUFBO0FBRWhELFdBQUssdUJBQXVCLEtBQUssU0FBUztJQUFBO0lBRzVDLFVBQVM7QUFBRSxhQUFPLEtBQUs7SUFBQTtJQUV2QixrQkFBa0IsTUFBTSxTQUFTSCxhQUFXO0FBQzFDLFdBQUssV0FDSCxLQUFLLFNBQVMsSUFBSSxDQUFBLFVBQVM7QUFDekIsY0FBTSxjQUFjLElBQUE7QUFDcEIsY0FBTSxPQUFPLE1BQU07QUFDakIsZUFBSztBQUNMLGNBQUcsS0FBSyx5QkFBeUIsR0FBRTtBQUFFLGlCQUFLLFdBQUE7VUFBQTtRQUFBLENBQUE7QUFFNUMsZUFBTztNQUFBLENBQUE7QUFHWCxVQUFJLGlCQUFpQixLQUFLLFNBQVMsT0FBTyxDQUFDLEtBQUssVUFBVTtBQUN4RCxZQUFJLEVBQUMsTUFBTSxTQUFBLElBQVksTUFBTSxTQUFTQSxZQUFXLFNBQUE7QUFDakQsWUFBSSxRQUFRLElBQUksU0FBUyxFQUFDLFVBQW9CLFNBQVMsQ0FBQSxFQUFBO0FBQ3ZELFlBQUksTUFBTSxRQUFRLEtBQUssS0FBQTtBQUN2QixlQUFPO01BQUEsR0FDTixDQUFBLENBQUE7QUFFSCxlQUFRLFFBQVEsZ0JBQWU7QUFDN0IsWUFBSSxFQUFDLFVBQVUsUUFBQSxJQUFXLGVBQWU7QUFDekMsaUJBQVMsU0FBUyxTQUFTLE1BQU1BLFdBQUE7TUFBQTtJQUFBO0VBQUE7QUNySHZDLE1BQUksUUFBUTtJQUNWLGdCQUFnQjtNQUNkLGFBQVk7QUFBRSxlQUFPLEtBQUssR0FBRyxhQUFhLHFCQUFBO01BQUE7TUFFMUMsa0JBQWlCO0FBQUUsZUFBTyxLQUFLLEdBQUcsYUFBYSxvQkFBQTtNQUFBO01BRS9DLFVBQVM7QUFBRSxhQUFLLGlCQUFpQixLQUFLLGdCQUFBO01BQUE7TUFFdEMsVUFBUztBQUNQLFlBQUksZ0JBQWdCLEtBQUssZ0JBQUE7QUFDekIsWUFBRyxLQUFLLG1CQUFtQixlQUFjO0FBQ3ZDLGVBQUssaUJBQWlCO0FBQ3RCLGNBQUcsa0JBQWtCLElBQUc7QUFDdEIsaUJBQUssT0FBTyxhQUFhLEtBQUssR0FBRyxJQUFBO1VBQUE7UUFBQTtBQUlyQyxZQUFHLEtBQUssV0FBQSxNQUFpQixJQUFHO0FBQUUsZUFBSyxHQUFHLFFBQVE7UUFBQTtBQUM5QyxhQUFLLEdBQUcsY0FBYyxJQUFJLFlBQVkscUJBQUEsQ0FBQTtNQUFBO0lBQUE7SUFJMUMsZ0JBQWdCO01BQ2QsVUFBUztBQUNQLGFBQUssTUFBTSxLQUFLLEdBQUcsYUFBYSxvQkFBQTtBQUNoQyxhQUFLLFVBQVUsU0FBUyxlQUFlLEtBQUssR0FBRyxhQUFhLGNBQUEsQ0FBQTtBQUM1RCxxQkFBYSxnQkFBZ0IsS0FBSyxTQUFTLEtBQUssS0FBSyxDQUFBLFFBQU87QUFDMUQsZUFBSyxNQUFNO0FBQ1gsZUFBSyxHQUFHLE1BQU07UUFBQSxDQUFBO01BQUE7TUFHbEIsWUFBVztBQUNULFlBQUksZ0JBQWdCLEtBQUssR0FBQTtNQUFBO0lBQUE7RUFBQTtBQUsvQixNQUFPLGdCQUFRO0FDeENmLE1BQUEsdUJBQUEsTUFBMEM7SUFDeEMsWUFBWSxpQkFBaUIsZ0JBQWdCLFlBQVc7QUFDdEQsVUFBSSxZQUFZLG9CQUFJLElBQUE7QUFDcEIsVUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsZUFBZSxRQUFBLEVBQVUsSUFBSSxDQUFBLFVBQVMsTUFBTSxFQUFBLENBQUE7QUFFdkUsVUFBSSxtQkFBbUIsQ0FBQTtBQUV2QixZQUFNLEtBQUssZ0JBQWdCLFFBQUEsRUFBVSxRQUFRLENBQUEsVUFBUztBQUNwRCxZQUFHLE1BQU0sSUFBRztBQUNWLG9CQUFVLElBQUksTUFBTSxFQUFBO0FBQ3BCLGNBQUcsU0FBUyxJQUFJLE1BQU0sRUFBQSxHQUFJO0FBQ3hCLGdCQUFJLG9CQUFvQixNQUFNLDBCQUEwQixNQUFNLHVCQUF1QjtBQUNyRiw2QkFBaUIsS0FBSyxFQUFDLFdBQVcsTUFBTSxJQUFJLGtCQUFBLENBQUE7VUFBQTtRQUFBO01BQUEsQ0FBQTtBQUtsRCxXQUFLLGNBQWMsZUFBZTtBQUNsQyxXQUFLLGFBQWE7QUFDbEIsV0FBSyxtQkFBbUI7QUFDeEIsV0FBSyxrQkFBa0IsQ0FBQyxHQUFHLFFBQUEsRUFBVSxPQUFPLENBQUEsT0FBTSxDQUFDLFVBQVUsSUFBSSxFQUFBLENBQUE7SUFBQTtJQVNuRSxVQUFTO0FBQ1AsVUFBSSxZQUFZLFlBQUksS0FBSyxLQUFLLFdBQUE7QUFDOUIsV0FBSyxpQkFBaUIsUUFBUSxDQUFBLG9CQUFtQjtBQUMvQyxZQUFHLGdCQUFnQixtQkFBa0I7QUFDbkMsZ0JBQU0sU0FBUyxlQUFlLGdCQUFnQixpQkFBQSxHQUFvQixDQUFBLGlCQUFnQjtBQUNoRixrQkFBTSxTQUFTLGVBQWUsZ0JBQWdCLFNBQUEsR0FBWSxDQUFBLFNBQVE7QUFDaEUsa0JBQUksaUJBQWlCLEtBQUssMEJBQTBCLEtBQUssdUJBQXVCLE1BQU0sYUFBYTtBQUNuRyxrQkFBRyxDQUFDLGdCQUFlO0FBQ2pCLDZCQUFhLHNCQUFzQixZQUFZLElBQUE7Y0FBQTtZQUFBLENBQUE7VUFBQSxDQUFBO1FBQUEsT0FJaEQ7QUFFTCxnQkFBTSxTQUFTLGVBQWUsZ0JBQWdCLFNBQUEsR0FBWSxDQUFBLFNBQVE7QUFDaEUsZ0JBQUksaUJBQWlCLEtBQUssMEJBQTBCO0FBQ3BELGdCQUFHLENBQUMsZ0JBQWU7QUFDakIsd0JBQVUsc0JBQXNCLGNBQWMsSUFBQTtZQUFBO1VBQUEsQ0FBQTtRQUFBO01BQUEsQ0FBQTtBQU10RCxVQUFHLEtBQUssY0FBYyxXQUFVO0FBQzlCLGFBQUssZ0JBQWdCLFFBQUEsRUFBVSxRQUFRLENBQUEsV0FBVTtBQUMvQyxnQkFBTSxTQUFTLGVBQWUsTUFBQSxHQUFTLENBQUEsU0FBUSxVQUFVLHNCQUFzQixjQUFjLElBQUEsQ0FBQTtRQUFBLENBQUE7TUFBQTtJQUFBO0VBQUE7QUM1RHJHLE1BQUkseUJBQXlCO0FBRTdCLFdBQUEsV0FBb0IsVUFBVSxRQUFRO0FBQ2xDLFFBQUksY0FBYyxPQUFPO0FBQ3pCLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBR0osUUFBSSxPQUFPLGFBQWEsMEJBQTBCLFNBQVMsYUFBYSx3QkFBd0I7QUFDOUY7SUFBQTtBQUlGLGFBQVMsSUFBSSxZQUFZLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztBQUM5QyxhQUFPLFlBQVk7QUFDbkIsaUJBQVcsS0FBSztBQUNoQix5QkFBbUIsS0FBSztBQUN4QixrQkFBWSxLQUFLO0FBRWpCLFVBQUksa0JBQWtCO0FBQ2xCLG1CQUFXLEtBQUssYUFBYTtBQUM3QixvQkFBWSxTQUFTLGVBQWUsa0JBQWtCLFFBQUE7QUFFdEQsWUFBSSxjQUFjLFdBQVc7QUFDekIsY0FBSSxLQUFLLFdBQVcsU0FBUTtBQUN4Qix1QkFBVyxLQUFLO1VBQUE7QUFFcEIsbUJBQVMsZUFBZSxrQkFBa0IsVUFBVSxTQUFBO1FBQUE7TUFBQSxPQUVyRDtBQUNILG9CQUFZLFNBQVMsYUFBYSxRQUFBO0FBRWxDLFlBQUksY0FBYyxXQUFXO0FBQ3pCLG1CQUFTLGFBQWEsVUFBVSxTQUFBO1FBQUE7TUFBQTtJQUFBO0FBTzVDLFFBQUksZ0JBQWdCLFNBQVM7QUFFN0IsYUFBUyxJQUFJLGNBQWMsU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQ2hELGFBQU8sY0FBYztBQUNyQixpQkFBVyxLQUFLO0FBQ2hCLHlCQUFtQixLQUFLO0FBRXhCLFVBQUksa0JBQWtCO0FBQ2xCLG1CQUFXLEtBQUssYUFBYTtBQUU3QixZQUFJLENBQUMsT0FBTyxlQUFlLGtCQUFrQixRQUFBLEdBQVc7QUFDcEQsbUJBQVMsa0JBQWtCLGtCQUFrQixRQUFBO1FBQUE7TUFBQSxPQUU5QztBQUNILFlBQUksQ0FBQyxPQUFPLGFBQWEsUUFBQSxHQUFXO0FBQ2hDLG1CQUFTLGdCQUFnQixRQUFBO1FBQUE7TUFBQTtJQUFBO0VBQUE7QUFNekMsTUFBSTtBQUNKLE1BQUksV0FBVztBQUVmLE1BQUksTUFBTSxPQUFPLGFBQWEsY0FBYyxTQUFZO0FBQ3hELE1BQUksdUJBQXVCLENBQUMsQ0FBQyxPQUFPLGFBQWEsSUFBSSxjQUFjLFVBQUE7QUFDbkUsTUFBSSxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sSUFBSSxlQUFlLDhCQUE4QixJQUFJLFlBQUE7QUFFdEYsV0FBQSwyQkFBb0MsS0FBSztBQUNyQyxRQUFJLFdBQVcsSUFBSSxjQUFjLFVBQUE7QUFDakMsYUFBUyxZQUFZO0FBQ3JCLFdBQU8sU0FBUyxRQUFRLFdBQVc7RUFBQTtBQUd2QyxXQUFBLHdCQUFpQyxLQUFLO0FBQ2xDLFFBQUksQ0FBQyxPQUFPO0FBQ1IsY0FBUSxJQUFJLFlBQUE7QUFDWixZQUFNLFdBQVcsSUFBSSxJQUFBO0lBQUE7QUFHekIsUUFBSSxXQUFXLE1BQU0seUJBQXlCLEdBQUE7QUFDOUMsV0FBTyxTQUFTLFdBQVc7RUFBQTtBQUcvQixXQUFBLHVCQUFnQyxLQUFLO0FBQ2pDLFFBQUksV0FBVyxJQUFJLGNBQWMsTUFBQTtBQUNqQyxhQUFTLFlBQVk7QUFDckIsV0FBTyxTQUFTLFdBQVc7RUFBQTtBQVcvQixXQUFBLFVBQW1CLEtBQUs7QUFDcEIsVUFBTSxJQUFJLEtBQUE7QUFDVixRQUFJLHNCQUFzQjtBQUl4QixhQUFPLDJCQUEyQixHQUFBO0lBQUEsV0FDekIsbUJBQW1CO0FBQzVCLGFBQU8sd0JBQXdCLEdBQUE7SUFBQTtBQUdqQyxXQUFPLHVCQUF1QixHQUFBO0VBQUE7QUFhbEMsV0FBQSxpQkFBMEIsUUFBUSxNQUFNO0FBQ3BDLFFBQUksZUFBZSxPQUFPO0FBQzFCLFFBQUksYUFBYSxLQUFLO0FBQ3RCLFFBQUksZUFBZTtBQUVuQixRQUFJLGlCQUFpQixZQUFZO0FBQzdCLGFBQU87SUFBQTtBQUdYLG9CQUFnQixhQUFhLFdBQVcsQ0FBQTtBQUN4QyxrQkFBYyxXQUFXLFdBQVcsQ0FBQTtBQU1wQyxRQUFJLGlCQUFpQixNQUFNLGVBQWUsSUFBSTtBQUMxQyxhQUFPLGlCQUFpQixXQUFXLFlBQUE7SUFBQSxXQUM1QixlQUFlLE1BQU0saUJBQWlCLElBQUk7QUFDakQsYUFBTyxlQUFlLGFBQWEsWUFBQTtJQUFBLE9BQ2hDO0FBQ0gsYUFBTztJQUFBO0VBQUE7QUFhZixXQUFBLGdCQUF5QixNQUFNLGNBQWM7QUFDekMsV0FBTyxDQUFDLGdCQUFnQixpQkFBaUIsV0FDckMsSUFBSSxjQUFjLElBQUEsSUFDbEIsSUFBSSxnQkFBZ0IsY0FBYyxJQUFBO0VBQUE7QUFNMUMsV0FBQSxhQUFzQixRQUFRLE1BQU07QUFDaEMsUUFBSSxXQUFXLE9BQU87QUFDdEIsV0FBTyxVQUFVO0FBQ2IsVUFBSSxZQUFZLFNBQVM7QUFDekIsV0FBSyxZQUFZLFFBQUE7QUFDakIsaUJBQVc7SUFBQTtBQUVmLFdBQU87RUFBQTtBQUdYLFdBQUEsb0JBQTZCLFFBQVEsTUFBTSxNQUFNO0FBQzdDLFFBQUksT0FBTyxVQUFVLEtBQUssT0FBTztBQUM3QixhQUFPLFFBQVEsS0FBSztBQUNwQixVQUFJLE9BQU8sT0FBTztBQUNkLGVBQU8sYUFBYSxNQUFNLEVBQUE7TUFBQSxPQUN2QjtBQUNILGVBQU8sZ0JBQWdCLElBQUE7TUFBQTtJQUFBO0VBQUE7QUFLbkMsTUFBSSxvQkFBb0I7SUFDcEIsUUFBUSxTQUFTLFFBQVEsTUFBTTtBQUMzQixVQUFJLGFBQWEsT0FBTztBQUN4QixVQUFJLFlBQVk7QUFDWixZQUFJLGFBQWEsV0FBVyxTQUFTLFlBQUE7QUFDckMsWUFBSSxlQUFlLFlBQVk7QUFDM0IsdUJBQWEsV0FBVztBQUN4Qix1QkFBYSxjQUFjLFdBQVcsU0FBUyxZQUFBO1FBQUE7QUFFbkQsWUFBSSxlQUFlLFlBQVksQ0FBQyxXQUFXLGFBQWEsVUFBQSxHQUFhO0FBQ2pFLGNBQUksT0FBTyxhQUFhLFVBQUEsS0FBZSxDQUFDLEtBQUssVUFBVTtBQUluRCxtQkFBTyxhQUFhLFlBQVksVUFBQTtBQUNoQyxtQkFBTyxnQkFBZ0IsVUFBQTtVQUFBO0FBSzNCLHFCQUFXLGdCQUFnQjtRQUFBO01BQUE7QUFHbkMsMEJBQW9CLFFBQVEsTUFBTSxVQUFBO0lBQUE7SUFRdEMsT0FBTyxTQUFTLFFBQVEsTUFBTTtBQUMxQiwwQkFBb0IsUUFBUSxNQUFNLFNBQUE7QUFDbEMsMEJBQW9CLFFBQVEsTUFBTSxVQUFBO0FBRWxDLFVBQUksT0FBTyxVQUFVLEtBQUssT0FBTztBQUM3QixlQUFPLFFBQVEsS0FBSztNQUFBO0FBR3hCLFVBQUksQ0FBQyxLQUFLLGFBQWEsT0FBQSxHQUFVO0FBQzdCLGVBQU8sZ0JBQWdCLE9BQUE7TUFBQTtJQUFBO0lBSS9CLFVBQVUsU0FBUyxRQUFRLE1BQU07QUFDN0IsVUFBSSxXQUFXLEtBQUs7QUFDcEIsVUFBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixlQUFPLFFBQVE7TUFBQTtBQUduQixVQUFJLGFBQWEsT0FBTztBQUN4QixVQUFJLFlBQVk7QUFHWixZQUFJLFdBQVcsV0FBVztBQUUxQixZQUFJLFlBQVksWUFBYSxDQUFDLFlBQVksWUFBWSxPQUFPLGFBQWM7QUFDdkU7UUFBQTtBQUdKLG1CQUFXLFlBQVk7TUFBQTtJQUFBO0lBRy9CLFFBQVEsU0FBUyxRQUFRLE1BQU07QUFDM0IsVUFBSSxDQUFDLEtBQUssYUFBYSxVQUFBLEdBQWE7QUFDaEMsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxJQUFJO0FBS1IsWUFBSSxXQUFXLE9BQU87QUFDdEIsWUFBSTtBQUNKLFlBQUk7QUFDSixlQUFNLFVBQVU7QUFDWixxQkFBVyxTQUFTLFlBQVksU0FBUyxTQUFTLFlBQUE7QUFDbEQsY0FBSSxhQUFhLFlBQVk7QUFDekIsdUJBQVc7QUFDWCx1QkFBVyxTQUFTO1VBQUEsT0FDakI7QUFDSCxnQkFBSSxhQUFhLFVBQVU7QUFDdkIsa0JBQUksU0FBUyxhQUFhLFVBQUEsR0FBYTtBQUNuQyxnQ0FBZ0I7QUFDaEI7Y0FBQTtBQUVKO1lBQUE7QUFFSix1QkFBVyxTQUFTO0FBQ3BCLGdCQUFJLENBQUMsWUFBWSxVQUFVO0FBQ3ZCLHlCQUFXLFNBQVM7QUFDcEIseUJBQVc7WUFBQTtVQUFBO1FBQUE7QUFLdkIsZUFBTyxnQkFBZ0I7TUFBQTtJQUFBO0VBQUE7QUFLbkMsTUFBSSxlQUFlO0FBQ25CLE1BQUksMkJBQTJCO0FBQy9CLE1BQUksWUFBWTtBQUNoQixNQUFJLGVBQWU7QUFFbkIsV0FBQUksUUFBZ0I7RUFBQTtBQUVoQixXQUFBLGtCQUEyQixNQUFNO0FBQy9CLFFBQUksTUFBTTtBQUNOLGFBQVEsS0FBSyxnQkFBZ0IsS0FBSyxhQUFhLElBQUEsS0FBVSxLQUFLO0lBQUE7RUFBQTtBQUlwRSxXQUFBLGdCQUF5QixhQUFZO0FBRWpDLFdBQU8sU0FBQSxVQUFrQixVQUFVLFFBQVEsU0FBUztBQUNoRCxVQUFJLENBQUMsU0FBUztBQUNWLGtCQUFVLENBQUE7TUFBQTtBQUdkLFVBQUksT0FBTyxXQUFXLFVBQVU7QUFDNUIsWUFBSSxTQUFTLGFBQWEsZUFBZSxTQUFTLGFBQWEsVUFBVSxTQUFTLGFBQWEsUUFBUTtBQUNuRyxjQUFJLGFBQWE7QUFDakIsbUJBQVMsSUFBSSxjQUFjLE1BQUE7QUFDM0IsaUJBQU8sWUFBWTtRQUFBLE9BQ2hCO0FBQ0gsbUJBQVMsVUFBVSxNQUFBO1FBQUE7TUFBQTtBQUkzQixVQUFJLGFBQWEsUUFBUSxjQUFjO0FBQ3ZDLFVBQUksb0JBQW9CLFFBQVEscUJBQXFCQTtBQUNyRCxVQUFJLGNBQWMsUUFBUSxlQUFlQTtBQUN6QyxVQUFJLG9CQUFvQixRQUFRLHFCQUFxQkE7QUFDckQsVUFBSSxjQUFjLFFBQVEsZUFBZUE7QUFDekMsVUFBSSx3QkFBd0IsUUFBUSx5QkFBeUJBO0FBQzdELFVBQUksa0JBQWtCLFFBQVEsbUJBQW1CQTtBQUNqRCxVQUFJLDRCQUE0QixRQUFRLDZCQUE2QkE7QUFDckUsVUFBSSxlQUFlLFFBQVEsaUJBQWlCO0FBRzVDLFVBQUksa0JBQWtCLHVCQUFPLE9BQU8sSUFBQTtBQUNwQyxVQUFJLG1CQUFtQixDQUFBO0FBRXZCLGVBQUEsZ0JBQXlCLEtBQUs7QUFDMUIseUJBQWlCLEtBQUssR0FBQTtNQUFBO0FBRzFCLGVBQUEsd0JBQWlDLE1BQU0sZ0JBQWdCO0FBQ25ELFlBQUksS0FBSyxhQUFhLGNBQWM7QUFDaEMsY0FBSSxXQUFXLEtBQUs7QUFDcEIsaUJBQU8sVUFBVTtBQUViLGdCQUFJLE1BQU07QUFFVixnQkFBSSxtQkFBbUIsTUFBTSxXQUFXLFFBQUEsSUFBWTtBQUdoRCw4QkFBZ0IsR0FBQTtZQUFBLE9BQ2I7QUFJSCw4QkFBZ0IsUUFBQTtBQUNoQixrQkFBSSxTQUFTLFlBQVk7QUFDckIsd0NBQXdCLFVBQVUsY0FBQTtjQUFBO1lBQUE7QUFJMUMsdUJBQVcsU0FBUztVQUFBO1FBQUE7TUFBQTtBQWFoQyxlQUFBLFdBQW9CLE1BQU0sWUFBWSxnQkFBZ0I7QUFDbEQsWUFBSSxzQkFBc0IsSUFBQSxNQUFVLE9BQU87QUFDdkM7UUFBQTtBQUdKLFlBQUksWUFBWTtBQUNaLHFCQUFXLFlBQVksSUFBQTtRQUFBO0FBRzNCLHdCQUFnQixJQUFBO0FBQ2hCLGdDQUF3QixNQUFNLGNBQUE7TUFBQTtBQStCbEMsZUFBQSxVQUFtQixNQUFNO0FBQ3JCLFlBQUksS0FBSyxhQUFhLGdCQUFnQixLQUFLLGFBQWEsMEJBQTBCO0FBQzlFLGNBQUksV0FBVyxLQUFLO0FBQ3BCLGlCQUFPLFVBQVU7QUFDYixnQkFBSSxNQUFNLFdBQVcsUUFBQTtBQUNyQixnQkFBSSxLQUFLO0FBQ0wsOEJBQWdCLE9BQU87WUFBQTtBQUkzQixzQkFBVSxRQUFBO0FBRVYsdUJBQVcsU0FBUztVQUFBO1FBQUE7TUFBQTtBQUtoQyxnQkFBVSxRQUFBO0FBRVYsZUFBQSxnQkFBeUIsSUFBSTtBQUN6QixvQkFBWSxFQUFBO0FBRVosWUFBSSxXQUFXLEdBQUc7QUFDbEIsZUFBTyxVQUFVO0FBQ2IsY0FBSSxjQUFjLFNBQVM7QUFFM0IsY0FBSSxNQUFNLFdBQVcsUUFBQTtBQUNyQixjQUFJLEtBQUs7QUFDTCxnQkFBSSxrQkFBa0IsZ0JBQWdCO0FBR3RDLGdCQUFJLG1CQUFtQixpQkFBaUIsVUFBVSxlQUFBLEdBQWtCO0FBQ2hFLHVCQUFTLFdBQVcsYUFBYSxpQkFBaUIsUUFBQTtBQUNsRCxzQkFBUSxpQkFBaUIsUUFBQTtZQUFBLE9BQ3RCO0FBQ0wsOEJBQWdCLFFBQUE7WUFBQTtVQUFBLE9BRWY7QUFHTCw0QkFBZ0IsUUFBQTtVQUFBO0FBR2xCLHFCQUFXO1FBQUE7TUFBQTtBQUluQixlQUFBLGNBQXVCLFFBQVEsa0JBQWtCLGdCQUFnQjtBQUk3RCxlQUFPLGtCQUFrQjtBQUNyQixjQUFJLGtCQUFrQixpQkFBaUI7QUFDdkMsY0FBSyxpQkFBaUIsV0FBVyxnQkFBQSxHQUFvQjtBQUdqRCw0QkFBZ0IsY0FBQTtVQUFBLE9BQ2I7QUFHSCx1QkFBVyxrQkFBa0IsUUFBUSxJQUFBO1VBQUE7QUFFekMsNkJBQW1CO1FBQUE7TUFBQTtBQUkzQixlQUFBLFFBQWlCLFFBQVEsTUFBTSxlQUFjO0FBQ3pDLFlBQUksVUFBVSxXQUFXLElBQUE7QUFFekIsWUFBSSxTQUFTO0FBR1QsaUJBQU8sZ0JBQWdCO1FBQUE7QUFHM0IsWUFBSSxDQUFDLGVBQWM7QUFFZixjQUFJLGtCQUFrQixRQUFRLElBQUEsTUFBVSxPQUFPO0FBQzNDO1VBQUE7QUFJSixzQkFBVyxRQUFRLElBQUE7QUFFbkIsc0JBQVksTUFBQTtBQUVaLGNBQUksMEJBQTBCLFFBQVEsSUFBQSxNQUFVLE9BQU87QUFDbkQ7VUFBQTtRQUFBO0FBSVIsWUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyx3QkFBYyxRQUFRLElBQUE7UUFBQSxPQUNqQjtBQUNMLDRCQUFrQixTQUFTLFFBQVEsSUFBQTtRQUFBO01BQUE7QUFJekMsZUFBQSxjQUF1QixRQUFRLE1BQU07QUFDakMsWUFBSSxpQkFBaUIsS0FBSztBQUMxQixZQUFJLG1CQUFtQixPQUFPO0FBQzlCLFlBQUk7QUFDSixZQUFJO0FBRUosWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJO0FBR0o7QUFBTyxpQkFBTyxnQkFBZ0I7QUFDMUIsNEJBQWdCLGVBQWU7QUFDL0IsMkJBQWUsV0FBVyxjQUFBO0FBRzFCLG1CQUFPLGtCQUFrQjtBQUNyQixnQ0FBa0IsaUJBQWlCO0FBRW5DLGtCQUFJLGVBQWUsY0FBYyxlQUFlLFdBQVcsZ0JBQUEsR0FBbUI7QUFDMUUsaUNBQWlCO0FBQ2pCLG1DQUFtQjtBQUNuQix5QkFBQTtjQUFBO0FBR0osK0JBQWlCLFdBQVcsZ0JBQUE7QUFFNUIsa0JBQUksa0JBQWtCLGlCQUFpQjtBQUd2QyxrQkFBSSxlQUFlO0FBRW5CLGtCQUFJLG9CQUFvQixlQUFlLFVBQVU7QUFDN0Msb0JBQUksb0JBQW9CLGNBQWM7QUFHbEMsc0JBQUksY0FBYztBQUdkLHdCQUFJLGlCQUFpQixnQkFBZ0I7QUFJakMsMEJBQUssaUJBQWlCLGdCQUFnQixlQUFnQjtBQUNsRCw0QkFBSSxvQkFBb0IsZ0JBQWdCO0FBTXBDLHlDQUFlO3dCQUFBLE9BQ1o7QUFRSCxpQ0FBTyxhQUFhLGdCQUFnQixnQkFBQTtBQUlwQyw4QkFBSSxnQkFBZ0I7QUFHaEIsNENBQWdCLGNBQUE7MEJBQUEsT0FDYjtBQUdILHVDQUFXLGtCQUFrQixRQUFRLElBQUE7MEJBQUE7QUFHekMsNkNBQW1CO3dCQUFBO3NCQUFBLE9BRXBCO0FBR0gsdUNBQWU7c0JBQUE7b0JBQUE7a0JBQUEsV0FHaEIsZ0JBQWdCO0FBRXZCLG1DQUFlO2tCQUFBO0FBR25CLGlDQUFlLGlCQUFpQixTQUFTLGlCQUFpQixrQkFBa0IsY0FBQTtBQUM1RSxzQkFBSSxjQUFjO0FBS2QsNEJBQVEsa0JBQWtCLGNBQUE7a0JBQUE7Z0JBQUEsV0FHdkIsb0JBQW9CLGFBQWEsbUJBQW1CLGNBQWM7QUFFekUsaUNBQWU7QUFHZixzQkFBSSxpQkFBaUIsY0FBYyxlQUFlLFdBQVc7QUFDekQscUNBQWlCLFlBQVksZUFBZTtrQkFBQTtnQkFBQTtjQUFBO0FBTXhELGtCQUFJLGNBQWM7QUFHZCxpQ0FBaUI7QUFDakIsbUNBQW1CO0FBQ25CLHlCQUFBO2NBQUE7QUFTSixrQkFBSSxnQkFBZ0I7QUFHaEIsZ0NBQWdCLGNBQUE7Y0FBQSxPQUNiO0FBR0gsMkJBQVcsa0JBQWtCLFFBQVEsSUFBQTtjQUFBO0FBR3pDLGlDQUFtQjtZQUFBO0FBT3ZCLGdCQUFJLGlCQUFpQixpQkFBaUIsZ0JBQWdCLGtCQUFrQixpQkFBaUIsZ0JBQWdCLGNBQUEsR0FBaUI7QUFDdEgscUJBQU8sWUFBWSxjQUFBO0FBRW5CLHNCQUFRLGdCQUFnQixjQUFBO1lBQUEsT0FDckI7QUFDSCxrQkFBSSwwQkFBMEIsa0JBQWtCLGNBQUE7QUFDaEQsa0JBQUksNEJBQTRCLE9BQU87QUFDbkMsb0JBQUkseUJBQXlCO0FBQ3pCLG1DQUFpQjtnQkFBQTtBQUdyQixvQkFBSSxlQUFlLFdBQVc7QUFDMUIsbUNBQWlCLGVBQWUsVUFBVSxPQUFPLGlCQUFpQixHQUFBO2dCQUFBO0FBRXRFLHVCQUFPLFlBQVksY0FBQTtBQUNuQixnQ0FBZ0IsY0FBQTtjQUFBO1lBQUE7QUFJeEIsNkJBQWlCO0FBQ2pCLCtCQUFtQjtVQUFBO0FBR3ZCLHNCQUFjLFFBQVEsa0JBQWtCLGNBQUE7QUFFeEMsWUFBSSxtQkFBbUIsa0JBQWtCLE9BQU87QUFDaEQsWUFBSSxrQkFBa0I7QUFDbEIsMkJBQWlCLFFBQVEsSUFBQTtRQUFBO01BQUE7QUFJakMsVUFBSSxjQUFjO0FBQ2xCLFVBQUksa0JBQWtCLFlBQVk7QUFDbEMsVUFBSSxhQUFhLE9BQU87QUFFeEIsVUFBSSxDQUFDLGNBQWM7QUFHZixZQUFJLG9CQUFvQixjQUFjO0FBQ2xDLGNBQUksZUFBZSxjQUFjO0FBQzdCLGdCQUFJLENBQUMsaUJBQWlCLFVBQVUsTUFBQSxHQUFTO0FBQ3JDLDhCQUFnQixRQUFBO0FBQ2hCLDRCQUFjLGFBQWEsVUFBVSxnQkFBZ0IsT0FBTyxVQUFVLE9BQU8sWUFBQSxDQUFBO1lBQUE7VUFBQSxPQUU5RTtBQUVILDBCQUFjO1VBQUE7UUFBQSxXQUVYLG9CQUFvQixhQUFhLG9CQUFvQixjQUFjO0FBQzFFLGNBQUksZUFBZSxpQkFBaUI7QUFDaEMsZ0JBQUksWUFBWSxjQUFjLE9BQU8sV0FBVztBQUM1QywwQkFBWSxZQUFZLE9BQU87WUFBQTtBQUduQyxtQkFBTztVQUFBLE9BQ0o7QUFFSCwwQkFBYztVQUFBO1FBQUE7TUFBQTtBQUsxQixVQUFJLGdCQUFnQixRQUFRO0FBR3hCLHdCQUFnQixRQUFBO01BQUEsT0FDYjtBQUNILFlBQUksT0FBTyxjQUFjLE9BQU8sV0FBVyxXQUFBLEdBQWM7QUFDckQ7UUFBQTtBQUdKLGdCQUFRLGFBQWEsUUFBUSxZQUFBO0FBTzdCLFlBQUksa0JBQWtCO0FBQ2xCLG1CQUFTLElBQUUsR0FBRyxNQUFJLGlCQUFpQixRQUFRLElBQUUsS0FBSyxLQUFLO0FBQ25ELGdCQUFJLGFBQWEsZ0JBQWdCLGlCQUFpQjtBQUNsRCxnQkFBSSxZQUFZO0FBQ1oseUJBQVcsWUFBWSxXQUFXLFlBQVksS0FBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0FBTTlELFVBQUksQ0FBQyxnQkFBZ0IsZ0JBQWdCLFlBQVksU0FBUyxZQUFZO0FBQ2xFLFlBQUksWUFBWSxXQUFXO0FBQ3ZCLHdCQUFjLFlBQVksVUFBVSxTQUFTLGlCQUFpQixHQUFBO1FBQUE7QUFPbEUsaUJBQVMsV0FBVyxhQUFhLGFBQWEsUUFBQTtNQUFBO0FBR2xELGFBQU87SUFBQTtFQUFBO0FBSWYsTUFBSSxXQUFXLGdCQUFnQixVQUFBO0FBRS9CLE1BQU8sdUJBQVE7QUM1dEJmLE1BQUEsV0FBQSxNQUE4QjtJQUFBLE9BQ3JCLFFBQVEsUUFBUSxNQUFNLGVBQWM7QUFDekMsMkJBQVMsUUFBUSxNQUFNO1FBQ3JCLGNBQWM7UUFDZCxtQkFBbUIsQ0FBQyxTQUFRLFVBQVM7QUFDbkMsY0FBRyxpQkFBaUIsY0FBYyxXQUFXLE9BQUEsS0FBVyxZQUFJLFlBQVksT0FBQSxHQUFRO0FBQzlFLHdCQUFJLGtCQUFrQixTQUFRLEtBQUE7QUFDOUIsbUJBQU87VUFBQTtRQUFBO01BQUEsQ0FBQTtJQUFBO0lBTWYsWUFBWSxNQUFNLFdBQVcsSUFBSSxNQUFNLFdBQVU7QUFDL0MsV0FBSyxPQUFPO0FBQ1osV0FBSyxhQUFhLEtBQUs7QUFDdkIsV0FBSyxZQUFZO0FBQ2pCLFdBQUssS0FBSztBQUNWLFdBQUssU0FBUyxLQUFLLEtBQUs7QUFDeEIsV0FBSyxPQUFPO0FBQ1osV0FBSyxZQUFZO0FBQ2pCLFdBQUssV0FBVyxNQUFNLEtBQUssU0FBQTtBQUMzQixXQUFLLFlBQVk7UUFDZixhQUFhLENBQUE7UUFBSSxlQUFlLENBQUE7UUFBSSxxQkFBcUIsQ0FBQTtRQUN6RCxZQUFZLENBQUE7UUFBSSxjQUFjLENBQUE7UUFBSSxnQkFBZ0IsQ0FBQTtRQUFJLG9CQUFvQixDQUFBO1FBQzFFLDJCQUEyQixDQUFBO01BQUE7SUFBQTtJQUkvQixPQUFPLE1BQU0sVUFBUztBQUFFLFdBQUssVUFBVSxTQUFTLFFBQVEsS0FBSyxRQUFBO0lBQUE7SUFDN0QsTUFBTSxNQUFNLFVBQVM7QUFBRSxXQUFLLFVBQVUsUUFBUSxRQUFRLEtBQUssUUFBQTtJQUFBO0lBRTNELFlBQVksU0FBUyxNQUFLO0FBQ3hCLFdBQUssVUFBVSxTQUFTLFFBQVEsUUFBUSxDQUFBLGFBQVksU0FBUyxHQUFHLElBQUEsQ0FBQTtJQUFBO0lBR2xFLFdBQVcsU0FBUyxNQUFLO0FBQ3ZCLFdBQUssVUFBVSxRQUFRLFFBQVEsUUFBUSxDQUFBLGFBQVksU0FBUyxHQUFHLElBQUEsQ0FBQTtJQUFBO0lBR2pFLGdDQUErQjtBQUM3QixrQkFBSSxJQUFJLEtBQUssV0FBVyxxREFBcUQsQ0FBQSxPQUFNO0FBQ2pGLFdBQUcsYUFBYSxXQUFXLEVBQUE7TUFBQSxDQUFBO0lBQUE7SUFJL0IsVUFBUztBQUNQLFVBQUksRUFBQyxNQUFNLFlBQUFKLGFBQVksV0FBVyxLQUFBLElBQVE7QUFDMUMsVUFBSSxrQkFBa0IsS0FBSyxXQUFBLElBQWUsS0FBSyxtQkFBbUIsSUFBQSxJQUFRO0FBQzFFLFVBQUcsS0FBSyxXQUFBLEtBQWdCLENBQUMsaUJBQWdCO0FBQUU7TUFBQTtBQUUzQyxVQUFJLFVBQVVBLFlBQVcsaUJBQUE7QUFDekIsVUFBSSxFQUFDLGdCQUFnQixhQUFBLElBQWdCLFdBQVcsWUFBSSxrQkFBa0IsT0FBQSxJQUFXLFVBQVUsQ0FBQTtBQUMzRixVQUFJLFlBQVlBLFlBQVcsUUFBUSxVQUFBO0FBQ25DLFVBQUksaUJBQWlCQSxZQUFXLFFBQVEsZ0JBQUE7QUFDeEMsVUFBSSxjQUFjQSxZQUFXLFFBQVEsZ0JBQUE7QUFDckMsVUFBSSxxQkFBcUJBLFlBQVcsUUFBUSxrQkFBQTtBQUM1QyxVQUFJLFlBQVlBLFlBQVcsUUFBUSxRQUFBO0FBQ25DLFVBQUksUUFBUSxDQUFBO0FBQ1osVUFBSSxVQUFVLENBQUE7QUFDZCxVQUFJLHVCQUF1QixDQUFBO0FBQzNCLFVBQUksaUJBQWlCLENBQUE7QUFDckIsVUFBSSx3QkFBd0I7QUFFNUIsVUFBSSxXQUFXQSxZQUFXLEtBQUssMkJBQTJCLE1BQU07QUFDOUQsZUFBTyxLQUFLLGNBQWMsV0FBVyxNQUFNLFdBQVcsZUFBQTtNQUFBLENBQUE7QUFHeEQsV0FBSyxZQUFZLFNBQVMsU0FBQTtBQUMxQixXQUFLLFlBQVksV0FBVyxXQUFXLFNBQUE7QUFFdkMsTUFBQUEsWUFBVyxLQUFLLFlBQVksTUFBTTtBQUNoQyw2QkFBUyxpQkFBaUIsVUFBVTtVQUNsQyxjQUFjLGdCQUFnQixhQUFhLGFBQUEsTUFBbUI7VUFDOUQsWUFBWSxDQUFDLFNBQVM7QUFDcEIsbUJBQU8sWUFBSSxlQUFlLElBQUEsSUFBUSxPQUFPLEtBQUs7VUFBQTtVQUVoRCxtQkFBbUIsQ0FBQyxPQUFPO0FBQ3pCLGlCQUFLLFlBQVksU0FBUyxFQUFBO0FBQzFCLG1CQUFPO1VBQUE7VUFFVCxhQUFhLENBQUMsT0FBTztBQUVuQixnQkFBRyxjQUFjLG9CQUFvQixHQUFHLFFBQU87QUFDN0MsaUJBQUcsU0FBUyxHQUFHO1lBQUEsV0FDUCxjQUFjLG9CQUFvQixHQUFHLFVBQVM7QUFDdEQsaUJBQUcsS0FBQTtZQUFBO0FBRUwsZ0JBQUcsWUFBSSx5QkFBeUIsSUFBSSxrQkFBQSxHQUFvQjtBQUN0RCxzQ0FBd0I7WUFBQTtBQUcxQix3QkFBSSxhQUFhLGlCQUFpQixJQUFJLGNBQUE7QUFFdEMsZ0JBQUksWUFBSSxXQUFXLEVBQUEsS0FBTyxLQUFLLFlBQVksRUFBQSxLQUFRLFlBQUksWUFBWSxFQUFBLEtBQU8sS0FBSyxZQUFZLEdBQUcsVUFBQSxHQUFZO0FBQ3hHLG1CQUFLLFdBQVcsaUJBQWlCLEVBQUE7WUFBQTtBQUVuQyxrQkFBTSxLQUFLLEVBQUE7VUFBQTtVQUViLGlCQUFpQixDQUFDLE9BQU87QUFFdkIsZ0JBQUcsWUFBSSxXQUFXLEVBQUEsS0FBTyxZQUFJLFlBQVksRUFBQSxHQUFJO0FBQUUsY0FBQUEsWUFBVyxnQkFBZ0IsRUFBQTtZQUFBO0FBQzFFLGlCQUFLLFdBQVcsYUFBYSxFQUFBO1VBQUE7VUFFL0IsdUJBQXVCLENBQUMsT0FBTztBQUM3QixnQkFBRyxHQUFHLGdCQUFnQixHQUFHLGFBQWEsU0FBQSxNQUFlLE1BQUs7QUFBRSxxQkFBTztZQUFBO0FBQ25FLGdCQUFHLEdBQUcsZUFBZSxRQUFRLFlBQUksWUFBWSxHQUFHLFlBQVksV0FBVyxDQUFDLFVBQVUsU0FBQSxDQUFBLEtBQWUsR0FBRyxJQUFHO0FBQUUscUJBQU87WUFBQTtBQUNoSCxnQkFBRyxHQUFHLGdCQUFnQixHQUFHLGFBQWEsU0FBQSxHQUFXO0FBQy9DLDZCQUFlLEtBQUssRUFBQTtBQUNwQixxQkFBTztZQUFBO0FBRVQsZ0JBQUcsS0FBSyxlQUFlLEVBQUEsR0FBSTtBQUFFLHFCQUFPO1lBQUE7QUFDcEMsbUJBQU87VUFBQTtVQUVULGFBQWEsQ0FBQyxPQUFPO0FBQ25CLGdCQUFHLFlBQUkseUJBQXlCLElBQUksa0JBQUEsR0FBb0I7QUFDdEQsc0NBQXdCO1lBQUE7QUFFMUIsb0JBQVEsS0FBSyxFQUFBO1VBQUE7VUFFZixtQkFBbUIsQ0FBQyxRQUFRLFNBQVM7QUFDbkMsd0JBQUksZ0JBQWdCLE1BQU0sU0FBQTtBQUMxQixnQkFBRyxLQUFLLGVBQWUsSUFBQSxHQUFNO0FBQUUscUJBQU87WUFBQTtBQUN0QyxnQkFBRyxZQUFJLFlBQVksTUFBQSxHQUFRO0FBQUUscUJBQU87WUFBQTtBQUNwQyxnQkFBRyxZQUFJLFVBQVUsUUFBUSxTQUFBLEdBQVc7QUFDbEMsbUJBQUssWUFBWSxXQUFXLFFBQVEsSUFBQTtBQUNwQywwQkFBSSxXQUFXLFFBQVEsTUFBTSxFQUFDLFdBQVcsS0FBQSxDQUFBO0FBQ3pDLHNCQUFRLEtBQUssTUFBQTtBQUNiLDBCQUFJLHNCQUFzQixNQUFBO0FBQzFCLHFCQUFPO1lBQUE7QUFFVCxnQkFBRyxPQUFPLFNBQVMsYUFBYSxPQUFPLFlBQVksT0FBTyxTQUFTLFdBQVU7QUFBRSxxQkFBTztZQUFBO0FBQ3RGLGdCQUFHLENBQUMsWUFBSSxlQUFlLFFBQVEsTUFBTSxXQUFBLEdBQWE7QUFDaEQsa0JBQUcsWUFBSSxjQUFjLE1BQUEsR0FBUTtBQUMzQixxQkFBSyxZQUFZLFdBQVcsUUFBUSxJQUFBO0FBQ3BDLHdCQUFRLEtBQUssTUFBQTtjQUFBO0FBRWYsMEJBQUksc0JBQXNCLE1BQUE7QUFDMUIscUJBQU87WUFBQTtBQUlULGdCQUFHLFlBQUksV0FBVyxJQUFBLEdBQU07QUFDdEIsa0JBQUksY0FBYyxPQUFPLGFBQWEsV0FBQTtBQUN0QywwQkFBSSxXQUFXLFFBQVEsTUFBTSxFQUFDLFNBQVMsQ0FBQyxVQUFBLEVBQUEsQ0FBQTtBQUN4QyxrQkFBRyxnQkFBZ0IsSUFBRztBQUFFLHVCQUFPLGFBQWEsYUFBYSxXQUFBO2NBQUE7QUFDekQscUJBQU8sYUFBYSxhQUFhLEtBQUssTUFBQTtBQUN0QywwQkFBSSxzQkFBc0IsTUFBQTtBQUMxQixxQkFBTztZQUFBO0FBSVQsd0JBQUksYUFBYSxNQUFNLE1BQUE7QUFDdkIsd0JBQUksYUFBYSxpQkFBaUIsTUFBTSxjQUFBO0FBRXhDLGdCQUFJLGtCQUFrQixXQUFXLE9BQU8sV0FBVyxPQUFBLEtBQVksWUFBSSxZQUFZLE1BQUE7QUFDL0UsZ0JBQUcsaUJBQWdCO0FBQ2pCLG1CQUFLLFlBQVksV0FBVyxRQUFRLElBQUE7QUFDcEMsMEJBQUksa0JBQWtCLFFBQVEsSUFBQTtBQUM5QiwwQkFBSSxpQkFBaUIsTUFBQTtBQUNyQixzQkFBUSxLQUFLLE1BQUE7QUFDYiwwQkFBSSxzQkFBc0IsTUFBQTtBQUMxQixxQkFBTztZQUFBLE9BQ0Y7QUFDTCxrQkFBRyxZQUFJLFlBQVksTUFBTSxXQUFXLENBQUMsVUFBVSxTQUFBLENBQUEsR0FBWTtBQUN6RCxxQ0FBcUIsS0FBSyxJQUFJLHFCQUFxQixRQUFRLE1BQU0sS0FBSyxhQUFhLFNBQUEsQ0FBQSxDQUFBO2NBQUE7QUFFckYsMEJBQUksaUJBQWlCLElBQUE7QUFDckIsMEJBQUksc0JBQXNCLElBQUE7QUFDMUIsbUJBQUssWUFBWSxXQUFXLFFBQVEsSUFBQTtBQUNwQyxxQkFBTztZQUFBO1VBQUE7UUFBQSxDQUFBO01BQUEsQ0FBQTtBQU1mLFVBQUdBLFlBQVcsZUFBQSxHQUFpQjtBQUFFLDJCQUFBO01BQUE7QUFFakMsVUFBRyxxQkFBcUIsU0FBUyxHQUFFO0FBQ2pDLFFBQUFBLFlBQVcsS0FBSyx5Q0FBeUMsTUFBTTtBQUM3RCwrQkFBcUIsUUFBUSxDQUFBLFdBQVUsT0FBTyxRQUFBLENBQUE7UUFBQSxDQUFBO01BQUE7QUFJbEQsTUFBQUEsWUFBVyxjQUFjLE1BQU0sWUFBSSxhQUFhLFNBQVMsZ0JBQWdCLFlBQUEsQ0FBQTtBQUN6RSxrQkFBSSxjQUFjLFVBQVUsWUFBQTtBQUM1QixZQUFNLFFBQVEsQ0FBQSxPQUFNLEtBQUssV0FBVyxTQUFTLEVBQUEsQ0FBQTtBQUM3QyxjQUFRLFFBQVEsQ0FBQSxPQUFNLEtBQUssV0FBVyxXQUFXLEVBQUEsQ0FBQTtBQUVqRCxVQUFHLGVBQWUsU0FBUyxHQUFFO0FBQzNCLFFBQUFBLFlBQVcsa0JBQWtCLGNBQUE7QUFDN0IsUUFBQUEsWUFBVyxpQkFBaUIsTUFBTTtBQUNoQyx5QkFBZSxRQUFRLENBQUEsT0FBTTtBQUMzQixnQkFBSSxRQUFRLFlBQUksY0FBYyxFQUFBO0FBQzlCLGdCQUFHLE9BQU07QUFBRSxjQUFBQSxZQUFXLGdCQUFnQixLQUFBO1lBQUE7QUFDdEMsZUFBRyxPQUFBO1VBQUEsQ0FBQTtBQUVMLGVBQUssV0FBVyx3QkFBd0IsY0FBQTtRQUFBLENBQUE7TUFBQTtBQUk1QyxVQUFHLHVCQUFzQjtBQUN2QixRQUFBQSxZQUFXLFdBQUE7QUFDWCw4QkFBc0IsT0FBQTtNQUFBO0FBRXhCLGFBQU87SUFBQTtJQUdULGFBQVk7QUFBRSxhQUFPLEtBQUs7SUFBQTtJQUUxQixlQUFlLElBQUc7QUFDaEIsYUFBTyxHQUFHLGFBQWEsS0FBSyxnQkFBZ0IsR0FBRyxhQUFhLFFBQUEsTUFBYztJQUFBO0lBRzVFLG1CQUFtQixNQUFLO0FBQ3RCLFVBQUcsQ0FBQyxLQUFLLFdBQUEsR0FBYTtBQUFFO01BQUE7QUFDeEIsVUFBSSxDQUFDLFVBQVUsSUFBQSxJQUFRLFlBQUksc0JBQXNCLEtBQUssV0FBVyxLQUFLLFNBQUE7QUFDdEUsVUFBRyxLQUFLLFdBQVcsS0FBSyxZQUFJLGdCQUFnQixJQUFBLE1BQVUsR0FBRTtBQUN0RCxlQUFPO01BQUEsT0FDRjtBQUNMLGVBQU8sU0FBUyxNQUFNO01BQUE7SUFBQTtJQVUxQixjQUFjLFdBQVcsTUFBTSxXQUFXLGlCQUFnQjtBQUN4RCxVQUFJLGFBQWEsS0FBSyxXQUFBO0FBQ3RCLFVBQUksc0JBQXNCLGNBQWMsZ0JBQWdCLGFBQWEsYUFBQSxNQUFtQixLQUFLLFVBQVUsU0FBQTtBQUN2RyxVQUFHLENBQUMsY0FBYyxxQkFBb0I7QUFDcEMsZUFBTztNQUFBLE9BQ0Y7QUFFTCxZQUFJLGdCQUFnQjtBQUNwQixZQUFJLFdBQVcsU0FBUyxjQUFjLFVBQUE7QUFDdEMsd0JBQWdCLFlBQUksVUFBVSxlQUFBO0FBQzlCLFlBQUksQ0FBQyxtQkFBbUIsSUFBQSxJQUFRLFlBQUksc0JBQXNCLGVBQWUsS0FBSyxTQUFBO0FBQzlFLGlCQUFTLFlBQVk7QUFDckIsYUFBSyxRQUFRLENBQUEsT0FBTSxHQUFHLE9BQUEsQ0FBQTtBQUN0QixjQUFNLEtBQUssY0FBYyxVQUFBLEVBQVksUUFBUSxDQUFBLFVBQVM7QUFFcEQsY0FBRyxNQUFNLE1BQU0sTUFBTSxhQUFhLEtBQUssZ0JBQWdCLE1BQU0sYUFBYSxhQUFBLE1BQW1CLEtBQUssVUFBVSxTQUFBLEdBQVc7QUFDckgsa0JBQU0sYUFBYSxVQUFVLEVBQUE7QUFDN0Isa0JBQU0sWUFBWTtVQUFBO1FBQUEsQ0FBQTtBQUd0QixjQUFNLEtBQUssU0FBUyxRQUFRLFVBQUEsRUFBWSxRQUFRLENBQUEsT0FBTSxjQUFjLGFBQWEsSUFBSSxjQUFBLENBQUE7QUFDckYsdUJBQWUsT0FBQTtBQUNmLGVBQU8sY0FBYztNQUFBO0lBQUE7RUFBQTtBQ2hRM0IsTUFBQSxXQUFBLE1BQThCO0lBQUEsT0FDckIsUUFBUSxNQUFLO0FBQ2xCLFVBQUksR0FBRSxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsTUFBQSxJQUFTO0FBQ3pELGFBQU8sS0FBSztBQUNaLGFBQU8sS0FBSztBQUNaLGFBQU8sS0FBSztBQUNaLGFBQU8sRUFBQyxNQUFNLE9BQU8sT0FBTyxTQUFTLE1BQU0sUUFBUSxVQUFVLENBQUEsRUFBQTtJQUFBO0lBRy9ELFlBQVksUUFBUSxVQUFTO0FBQzNCLFdBQUssU0FBUztBQUNkLFdBQUssV0FBVyxDQUFBO0FBQ2hCLFdBQUssVUFBVSxRQUFBO0lBQUE7SUFHakIsZUFBYztBQUFFLGFBQU8sS0FBSztJQUFBO0lBRTVCLFNBQVMsVUFBUztBQUNoQixhQUFPLEtBQUssa0JBQWtCLEtBQUssVUFBVSxLQUFLLFNBQVMsYUFBYSxRQUFBO0lBQUE7SUFHMUUsa0JBQWtCLFVBQVUsYUFBYSxTQUFTLGFBQWEsVUFBUztBQUN0RSxpQkFBVyxXQUFXLElBQUksSUFBSSxRQUFBLElBQVk7QUFDMUMsVUFBSSxTQUFTLEVBQUMsUUFBUSxJQUFJLFlBQXdCLFNBQUE7QUFDbEQsV0FBSyxlQUFlLFVBQVUsTUFBTSxNQUFBO0FBQ3BDLGFBQU8sT0FBTztJQUFBO0lBR2hCLGNBQWMsTUFBSztBQUFFLGFBQU8sT0FBTyxLQUFLLEtBQUssZUFBZSxDQUFBLENBQUEsRUFBSSxJQUFJLENBQUEsTUFBSyxTQUFTLENBQUEsQ0FBQTtJQUFBO0lBRWxGLG9CQUFvQixNQUFLO0FBQ3ZCLFVBQUcsQ0FBQyxLQUFLLGFBQVk7QUFBRSxlQUFPO01BQUE7QUFDOUIsYUFBTyxPQUFPLEtBQUssSUFBQSxFQUFNLFdBQVc7SUFBQTtJQUd0QyxhQUFhLE1BQU0sS0FBSTtBQUFFLGFBQU8sS0FBSyxZQUFZO0lBQUE7SUFFakQsVUFBVSxNQUFLO0FBQ2IsVUFBSSxPQUFPLEtBQUs7QUFDaEIsVUFBSSxRQUFRLENBQUE7QUFDWixhQUFPLEtBQUs7QUFDWixXQUFLLFdBQVcsS0FBSyxhQUFhLEtBQUssVUFBVSxJQUFBO0FBQ2pELFdBQUssU0FBUyxjQUFjLEtBQUssU0FBUyxlQUFlLENBQUE7QUFFekQsVUFBRyxNQUFLO0FBQ04sWUFBSSxPQUFPLEtBQUssU0FBUztBQUV6QixpQkFBUSxPQUFPLE1BQUs7QUFDbEIsZUFBSyxPQUFPLEtBQUssb0JBQW9CLEtBQUssS0FBSyxNQUFNLE1BQU0sTUFBTSxLQUFBO1FBQUE7QUFHbkUsaUJBQVEsT0FBTyxNQUFLO0FBQUUsZUFBSyxPQUFPLEtBQUs7UUFBQTtBQUN2QyxhQUFLLGNBQWM7TUFBQTtJQUFBO0lBSXZCLG9CQUFvQixLQUFLLE9BQU8sTUFBTSxNQUFNLE9BQU07QUFDaEQsVUFBRyxNQUFNLE1BQUs7QUFDWixlQUFPLE1BQU07TUFBQSxPQUNSO0FBQ0wsWUFBSSxPQUFPLE1BQU0sT0FBTyxNQUFNO0FBRTlCLFlBQUcsTUFBTSxJQUFBLEdBQU07QUFDYixjQUFJO0FBRUosY0FBRyxPQUFPLEdBQUU7QUFDVixvQkFBUSxLQUFLLG9CQUFvQixNQUFNLEtBQUssT0FBTyxNQUFNLE1BQU0sS0FBQTtVQUFBLE9BQzFEO0FBQ0wsb0JBQVEsS0FBSyxDQUFDO1VBQUE7QUFHaEIsaUJBQU8sTUFBTTtBQUNiLGtCQUFRLEtBQUssV0FBVyxPQUFPLEtBQUE7QUFDL0IsZ0JBQU0sVUFBVTtRQUFBLE9BQ1g7QUFDTCxrQkFBUSxNQUFNLFlBQVksU0FBWSxRQUFRLEtBQUssV0FBVyxLQUFLLFFBQVEsQ0FBQSxHQUFJLEtBQUE7UUFBQTtBQUdqRixjQUFNLE9BQU87QUFDYixlQUFPO01BQUE7SUFBQTtJQUlYLGFBQWEsUUFBUSxRQUFPO0FBQzFCLFVBQUcsT0FBTyxZQUFZLFFBQVU7QUFDOUIsZUFBTztNQUFBLE9BQ0Y7QUFDTCxhQUFLLGVBQWUsUUFBUSxNQUFBO0FBQzVCLGVBQU87TUFBQTtJQUFBO0lBSVgsZUFBZSxRQUFRLFFBQU87QUFDNUIsZUFBUSxPQUFPLFFBQU87QUFDcEIsWUFBSSxNQUFNLE9BQU87QUFDakIsWUFBSSxZQUFZLE9BQU87QUFDdkIsWUFBRyxTQUFTLEdBQUEsS0FBUSxJQUFJLFlBQVksVUFBYSxTQUFTLFNBQUEsR0FBVztBQUNuRSxlQUFLLGVBQWUsV0FBVyxHQUFBO1FBQUEsT0FDMUI7QUFDTCxpQkFBTyxPQUFPO1FBQUE7TUFBQTtJQUFBO0lBS3BCLFdBQVcsUUFBUSxRQUFPO0FBQ3hCLFVBQUksU0FBUyxrQ0FBSSxTQUFXO0FBQzVCLGVBQVEsT0FBTyxRQUFPO0FBQ3BCLFlBQUksTUFBTSxPQUFPO0FBQ2pCLFlBQUksWUFBWSxPQUFPO0FBQ3ZCLFlBQUcsU0FBUyxHQUFBLEtBQVEsSUFBSSxZQUFZLFVBQWEsU0FBUyxTQUFBLEdBQVc7QUFDbkUsaUJBQU8sT0FBTyxLQUFLLFdBQVcsV0FBVyxHQUFBO1FBQUE7TUFBQTtBQUc3QyxhQUFPO0lBQUE7SUFHVCxrQkFBa0IsS0FBSTtBQUFFLGFBQU8sS0FBSyxxQkFBcUIsS0FBSyxTQUFTLGFBQWEsR0FBQTtJQUFBO0lBRXBGLFVBQVUsTUFBSztBQUNiLFdBQUssUUFBUSxDQUFBLFFBQU8sT0FBTyxLQUFLLFNBQVMsWUFBWSxJQUFBO0lBQUE7SUFLdkQsTUFBSztBQUFFLGFBQU8sS0FBSztJQUFBO0lBRW5CLGlCQUFpQixPQUFPLENBQUEsR0FBRztBQUFFLGFBQU8sQ0FBQyxDQUFDLEtBQUs7SUFBQTtJQUUzQyxlQUFlLE1BQU0sV0FBVTtBQUM3QixVQUFHLE9BQVEsU0FBVSxVQUFVO0FBQzdCLGVBQU8sVUFBVTtNQUFBLE9BQ1o7QUFDTCxlQUFPO01BQUE7SUFBQTtJQUlYLGVBQWUsVUFBVSxXQUFXLFFBQU87QUFDekMsVUFBRyxTQUFTLFdBQVU7QUFBRSxlQUFPLEtBQUssc0JBQXNCLFVBQVUsV0FBVyxNQUFBO01BQUE7QUFDL0UsVUFBSSxHQUFFLFNBQVMsUUFBQSxJQUFXO0FBQzFCLGdCQUFVLEtBQUssZUFBZSxTQUFTLFNBQUE7QUFFdkMsYUFBTyxVQUFVLFFBQVE7QUFDekIsZUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSTtBQUNyQyxhQUFLLGdCQUFnQixTQUFTLElBQUksSUFBSSxXQUFXLE1BQUE7QUFDakQsZUFBTyxVQUFVLFFBQVE7TUFBQTtJQUFBO0lBSTdCLHNCQUFzQixVQUFVLFdBQVcsUUFBTztBQUNoRCxVQUFJLEdBQUUsV0FBVyxXQUFXLFNBQVMsUUFBQSxJQUFXO0FBQ2hELGdCQUFVLEtBQUssZUFBZSxTQUFTLFNBQUE7QUFDdkMsVUFBSSxnQkFBZ0IsYUFBYSxTQUFTO0FBRTFDLGVBQVEsSUFBSSxHQUFHLElBQUksU0FBUyxRQUFRLEtBQUk7QUFDdEMsWUFBSSxVQUFVLFNBQVM7QUFDdkIsZUFBTyxVQUFVLFFBQVE7QUFDekIsaUJBQVEsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUk7QUFDckMsZUFBSyxnQkFBZ0IsUUFBUSxJQUFJLElBQUksZUFBZSxNQUFBO0FBQ3BELGlCQUFPLFVBQVUsUUFBUTtRQUFBO01BQUE7SUFBQTtJQUsvQixnQkFBZ0IsVUFBVSxXQUFXLFFBQU87QUFDMUMsVUFBRyxPQUFRLGFBQWMsVUFBUztBQUNoQyxlQUFPLFVBQVUsS0FBSyxxQkFBcUIsT0FBTyxZQUFZLFVBQVUsT0FBTyxRQUFBO01BQUEsV0FDdkUsU0FBUyxRQUFBLEdBQVU7QUFDM0IsYUFBSyxlQUFlLFVBQVUsV0FBVyxNQUFBO01BQUEsT0FDcEM7QUFDTCxlQUFPLFVBQVU7TUFBQTtJQUFBO0lBSXJCLHFCQUFxQixZQUFZLEtBQUssVUFBUztBQUM3QyxVQUFJLFlBQVksV0FBVyxRQUFRLFNBQVMsd0JBQXdCLE9BQU8sVUFBQTtBQUMzRSxVQUFJLFdBQVcsU0FBUyxjQUFjLFVBQUE7QUFDdEMsZUFBUyxZQUFZLEtBQUssa0JBQWtCLFdBQVcsWUFBWSxRQUFBO0FBQ25FLFVBQUksWUFBWSxTQUFTO0FBQ3pCLFVBQUksT0FBTyxZQUFZLENBQUMsU0FBUyxJQUFJLEdBQUE7QUFFckMsVUFBSSxDQUFDLGVBQWUsa0JBQUEsSUFDbEIsTUFBTSxLQUFLLFVBQVUsVUFBQSxFQUFZLE9BQU8sQ0FBQyxDQUFDLFVBQVUsYUFBQSxHQUFnQixPQUFPLE1BQU07QUFDL0UsWUFBRyxNQUFNLGFBQWEsS0FBSyxjQUFhO0FBQ3RDLGNBQUcsTUFBTSxhQUFhLGFBQUEsR0FBZTtBQUNuQyxtQkFBTyxDQUFDLFVBQVUsSUFBQTtVQUFBO0FBRXBCLGdCQUFNLGFBQWEsZUFBZSxHQUFBO0FBQ2xDLGNBQUcsQ0FBQyxNQUFNLElBQUc7QUFBRSxrQkFBTSxLQUFLLEdBQUcsS0FBSyxhQUFBLEtBQWtCLE9BQU87VUFBQTtBQUMzRCxjQUFHLE1BQUs7QUFDTixrQkFBTSxhQUFhLFVBQVUsRUFBQTtBQUM3QixrQkFBTSxZQUFZO1VBQUE7QUFFcEIsaUJBQU8sQ0FBQyxNQUFNLGFBQUE7UUFBQSxPQUNUO0FBQ0wsY0FBRyxNQUFNLFVBQVUsS0FBQSxNQUFXLElBQUc7QUFDL0IscUJBQVM7O1FBQ0UsTUFBTSxVQUFVLEtBQUE7OztHQUNaLFNBQVMsVUFBVSxLQUFBLENBQUE7QUFDbEMsa0JBQU0sWUFBWSxLQUFLLFdBQVcsTUFBTSxXQUFXLEdBQUEsQ0FBQTtBQUNuRCxtQkFBTyxDQUFDLE1BQU0sYUFBQTtVQUFBLE9BQ1Q7QUFDTCxrQkFBTSxPQUFBO0FBQ04sbUJBQU8sQ0FBQyxVQUFVLGFBQUE7VUFBQTtRQUFBO01BQUEsR0FHckIsQ0FBQyxPQUFPLEtBQUEsQ0FBQTtBQUViLFVBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBbUI7QUFDdkMsaUJBQVMsNEZBQ1AsU0FBUyxVQUFVLEtBQUEsQ0FBQTtBQUNyQixlQUFPLEtBQUssV0FBVyxJQUFJLEdBQUEsRUFBSztNQUFBLFdBQ3hCLENBQUMsaUJBQWlCLG9CQUFtQjtBQUM3QyxpQkFBUyxnTEFDUCxTQUFTLFVBQVUsS0FBQSxDQUFBO0FBQ3JCLGVBQU8sU0FBUztNQUFBLE9BQ1g7QUFDTCxlQUFPLFNBQVM7TUFBQTtJQUFBO0lBSXBCLFdBQVcsTUFBTSxLQUFJO0FBQ25CLFVBQUksT0FBTyxTQUFTLGNBQWMsTUFBQTtBQUNsQyxXQUFLLFlBQVk7QUFDakIsV0FBSyxhQUFhLGVBQWUsR0FBQTtBQUNqQyxhQUFPO0lBQUE7RUFBQTtBQ2xQWCxNQUFJLGFBQWE7QUFDakIsTUFBQSxXQUFBLE1BQThCO0lBQUEsT0FDckIsU0FBUTtBQUFFLGFBQU87SUFBQTtJQUFBLE9BQ2pCLFVBQVUsSUFBRztBQUFFLGFBQU8sR0FBRztJQUFBO0lBRWhDLFlBQVksTUFBTSxJQUFJLFdBQVU7QUFDOUIsV0FBSyxTQUFTO0FBQ2QsV0FBSyxhQUFhLEtBQUs7QUFDdkIsV0FBSyxjQUFjO0FBQ25CLFdBQUssY0FBYyxvQkFBSSxJQUFBO0FBQ3ZCLFdBQUssbUJBQW1CO0FBQ3hCLFdBQUssS0FBSztBQUNWLFdBQUssR0FBRyxZQUFZLEtBQUssWUFBWSxPQUFBO0FBQ3JDLGVBQVEsT0FBTyxLQUFLLGFBQVk7QUFBRSxhQUFLLE9BQU8sS0FBSyxZQUFZO01BQUE7SUFBQTtJQUdqRSxZQUFXO0FBQUUsV0FBSyxXQUFXLEtBQUssUUFBQTtJQUFBO0lBQ2xDLFlBQVc7QUFBRSxXQUFLLFdBQVcsS0FBSyxRQUFBO0lBQUE7SUFDbEMsaUJBQWdCO0FBQUUsV0FBSyxnQkFBZ0IsS0FBSyxhQUFBO0lBQUE7SUFDNUMsY0FBYTtBQUFFLFdBQUssYUFBYSxLQUFLLFVBQUE7SUFBQTtJQUN0QyxnQkFBZTtBQUNiLFVBQUcsS0FBSyxrQkFBaUI7QUFDdkIsYUFBSyxtQkFBbUI7QUFDeEIsYUFBSyxlQUFlLEtBQUssWUFBQTtNQUFBO0lBQUE7SUFHN0IsaUJBQWdCO0FBQ2QsV0FBSyxtQkFBbUI7QUFDeEIsV0FBSyxnQkFBZ0IsS0FBSyxhQUFBO0lBQUE7SUFHNUIsVUFBVSxPQUFPLFVBQVUsQ0FBQSxHQUFJLFVBQVUsV0FBVztJQUFBLEdBQUk7QUFDdEQsYUFBTyxLQUFLLE9BQU8sY0FBYyxNQUFNLE9BQU8sU0FBUyxPQUFBO0lBQUE7SUFHekQsWUFBWSxXQUFXLE9BQU8sVUFBVSxDQUFBLEdBQUksVUFBVSxXQUFXO0lBQUEsR0FBSTtBQUNuRSxhQUFPLEtBQUssT0FBTyxjQUFjLFdBQVcsQ0FBQyxNQUFNLGNBQWM7QUFDL0QsZUFBTyxLQUFLLGNBQWMsV0FBVyxPQUFPLFNBQVMsT0FBQTtNQUFBLENBQUE7SUFBQTtJQUl6RCxZQUFZLE9BQU8sVUFBUztBQUMxQixVQUFJLGNBQWMsQ0FBQyxhQUFhLFdBQVcsU0FBUyxRQUFRLFNBQVMsWUFBWSxNQUFBO0FBQ2pGLGFBQU8saUJBQWlCLE9BQU8sU0FBUyxXQUFBO0FBQ3hDLFdBQUssWUFBWSxJQUFJLFdBQUE7QUFDckIsYUFBTztJQUFBO0lBR1Qsa0JBQWtCLGFBQVk7QUFDNUIsVUFBSSxRQUFRLFlBQVksTUFBTSxJQUFBO0FBQzlCLGFBQU8sb0JBQW9CLE9BQU8sU0FBUyxXQUFBO0FBQzNDLFdBQUssWUFBWSxPQUFPLFdBQUE7SUFBQTtJQUcxQixPQUFPLE1BQU0sT0FBTTtBQUNqQixhQUFPLEtBQUssT0FBTyxnQkFBZ0IsTUFBTSxLQUFBO0lBQUE7SUFHM0MsU0FBUyxXQUFXLE1BQU0sT0FBTTtBQUM5QixhQUFPLEtBQUssT0FBTyxjQUFjLFdBQVcsQ0FBQSxTQUFRLEtBQUssZ0JBQWdCLE1BQU0sS0FBQSxDQUFBO0lBQUE7SUFHakYsY0FBYTtBQUNYLFdBQUssWUFBWSxRQUFRLENBQUEsZ0JBQWUsS0FBSyxrQkFBa0IsV0FBQSxDQUFBO0lBQUE7RUFBQTtBQzdEbkUsTUFBSSxLQUFLO0lBQ1AsS0FBSyxXQUFXLFVBQVUsTUFBTSxVQUFVLFVBQVM7QUFDakQsVUFBSSxDQUFDLGFBQWEsV0FBQSxJQUFlLFlBQVksQ0FBQyxNQUFNLENBQUEsQ0FBQTtBQUNwRCxVQUFJLFdBQVcsU0FBUyxPQUFPLENBQUEsTUFBTyxNQUNwQyxLQUFLLE1BQU0sUUFBQSxJQUFZLENBQUMsQ0FBQyxhQUFhLFdBQUEsQ0FBQTtBQUV4QyxlQUFTLFFBQVEsQ0FBQyxDQUFDLE1BQU0sSUFBQSxNQUFVO0FBQ2pDLFlBQUcsU0FBUyxlQUFlLFlBQVksTUFBSztBQUMxQyxlQUFLLE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFBLEdBQUksWUFBWSxJQUFBO1FBQUE7QUFFekQsYUFBSyxZQUFZLFVBQVUsSUFBQSxFQUFNLFFBQVEsQ0FBQSxPQUFNO0FBQzdDLGVBQUssUUFBUSxRQUFRLFdBQVcsVUFBVSxNQUFNLFVBQVUsSUFBSSxJQUFBO1FBQUEsQ0FBQTtNQUFBLENBQUE7SUFBQTtJQUtwRSxVQUFVLElBQUc7QUFDWCxhQUFPLENBQUMsRUFBRSxHQUFHLGVBQWUsR0FBRyxnQkFBZ0IsR0FBRyxlQUFBLEVBQWlCLFNBQVM7SUFBQTtJQU85RSxjQUFjLFdBQVcsVUFBVSxNQUFNLFVBQVUsSUFBSSxFQUFDLElBQUksT0FBTyxRQUFRLFFBQUEsR0FBUztBQUNsRixlQUFTLFVBQVUsQ0FBQTtBQUNuQixhQUFPLGFBQWE7QUFDcEIsa0JBQUksY0FBYyxJQUFJLE9BQU8sRUFBQyxRQUFRLFFBQUEsQ0FBQTtJQUFBO0lBR3hDLFVBQVUsV0FBVyxVQUFVLE1BQU0sVUFBVSxJQUFJLE1BQUs7QUFDdEQsVUFBRyxDQUFDLEtBQUssWUFBQSxHQUFjO0FBQUU7TUFBQTtBQUV6QixVQUFJLEVBQUMsT0FBTyxNQUFNLFFBQVEsY0FBYyxTQUFTLE9BQU8sV0FBQSxJQUFjO0FBQ3RFLFVBQUksV0FBVyxFQUFDLFNBQVMsT0FBTyxRQUFRLGNBQWMsQ0FBQyxDQUFDLGFBQUE7QUFDeEQsVUFBSSxZQUFZLGNBQWMsWUFBWSxhQUFhLGFBQWE7QUFDcEUsVUFBSSxZQUFZLFVBQVUsVUFBVSxhQUFhLEtBQUssUUFBUSxRQUFBLENBQUEsS0FBYztBQUM1RSxXQUFLLGNBQWMsV0FBVyxDQUFDLFlBQVksY0FBYztBQUN2RCxZQUFHLGNBQWMsVUFBUztBQUN4QixjQUFJLEVBQUMsUUFBUSxTQUFTLFNBQUEsSUFBWTtBQUNsQyxvQkFBVSxZQUFZLG9CQUFvQixtQkFBbUIsU0FBUyxPQUFPO0FBQzdFLGNBQUcsU0FBUTtBQUFFLHFCQUFTLFVBQVU7VUFBQTtBQUNoQyxxQkFBVyxVQUFVLFVBQVUsV0FBVyxRQUFRLFNBQVMsVUFBVSxVQUFVLFFBQUE7UUFBQSxXQUN2RSxjQUFjLFVBQVM7QUFDL0IscUJBQVcsV0FBVyxVQUFVLFdBQVcsU0FBUyxVQUFVLFFBQUE7UUFBQSxPQUN6RDtBQUNMLHFCQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsU0FBUyxVQUFVLE1BQU0sUUFBQTtRQUFBO01BQUEsQ0FBQTtJQUFBO0lBS3BGLGVBQWUsV0FBVyxVQUFVLE1BQU0sVUFBVSxJQUFJLEVBQUMsT0FBTyxZQUFZLEtBQUEsR0FBTTtBQUNoRixXQUFLLG1CQUFtQixJQUFJLE9BQU8sQ0FBQSxHQUFJLFlBQVksTUFBTSxJQUFBO0lBQUE7SUFHM0Qsa0JBQWtCLFdBQVcsVUFBVSxNQUFNLFVBQVUsSUFBSSxFQUFDLE9BQU8sWUFBWSxLQUFBLEdBQU07QUFDbkYsV0FBSyxtQkFBbUIsSUFBSSxDQUFBLEdBQUksT0FBTyxZQUFZLE1BQU0sSUFBQTtJQUFBO0lBRzNELGdCQUFnQixXQUFXLFVBQVUsTUFBTSxVQUFVLElBQUksRUFBQyxNQUFNLFdBQUEsR0FBWTtBQUMxRSxVQUFJLENBQUMsa0JBQWtCLFNBQVMsY0FBQSxJQUFrQjtBQUNsRCxVQUFJLFVBQVUsTUFBTSxLQUFLLG1CQUFtQixJQUFJLGlCQUFpQixPQUFPLE9BQUEsR0FBVSxDQUFBLENBQUE7QUFDbEYsVUFBSSxTQUFTLE1BQU0sS0FBSyxtQkFBbUIsSUFBSSxnQkFBZ0IsaUJBQWlCLE9BQU8sT0FBQSxDQUFBO0FBQ3ZGLFdBQUssV0FBVyxNQUFNLFNBQVMsTUFBQTtJQUFBO0lBR2pDLFlBQVksV0FBVyxVQUFVLE1BQU0sVUFBVSxJQUFJLEVBQUMsU0FBUyxLQUFLLE1BQU0sS0FBQSxHQUFNO0FBQzlFLFdBQUssT0FBTyxXQUFXLE1BQU0sSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFBO0lBQUE7SUFHdkQsVUFBVSxXQUFXLFVBQVUsTUFBTSxVQUFVLElBQUksRUFBQyxTQUFTLFlBQVksS0FBQSxHQUFNO0FBQzdFLFdBQUssS0FBSyxXQUFXLE1BQU0sSUFBSSxTQUFTLFlBQVksSUFBQTtJQUFBO0lBR3RELFVBQVUsV0FBVyxVQUFVLE1BQU0sVUFBVSxJQUFJLEVBQUMsU0FBUyxZQUFZLEtBQUEsR0FBTTtBQUM3RSxXQUFLLEtBQUssV0FBVyxNQUFNLElBQUksU0FBUyxZQUFZLElBQUE7SUFBQTtJQUd0RCxjQUFjLFdBQVcsVUFBVSxNQUFNLFVBQVUsSUFBSSxFQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUEsRUFBQSxHQUFNO0FBQ3pFLFdBQUssaUJBQWlCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBQSxDQUFBLEdBQU8sQ0FBQSxDQUFBO0lBQUE7SUFHM0MsaUJBQWlCLFdBQVcsVUFBVSxNQUFNLFVBQVUsSUFBSSxFQUFDLEtBQUEsR0FBTTtBQUMvRCxXQUFLLGlCQUFpQixJQUFJLENBQUEsR0FBSSxDQUFDLElBQUEsQ0FBQTtJQUFBO0lBS2pDLEtBQUssV0FBVyxNQUFNLElBQUksU0FBUyxZQUFZLE1BQUs7QUFDbEQsVUFBRyxDQUFDLEtBQUssVUFBVSxFQUFBLEdBQUk7QUFDckIsYUFBSyxPQUFPLFdBQVcsTUFBTSxJQUFJLFNBQVMsWUFBWSxNQUFNLElBQUE7TUFBQTtJQUFBO0lBSWhFLEtBQUssV0FBVyxNQUFNLElBQUksU0FBUyxZQUFZLE1BQUs7QUFDbEQsVUFBRyxLQUFLLFVBQVUsRUFBQSxHQUFJO0FBQ3BCLGFBQUssT0FBTyxXQUFXLE1BQU0sSUFBSSxTQUFTLE1BQU0sWUFBWSxJQUFBO01BQUE7SUFBQTtJQUloRSxPQUFPLFdBQVcsTUFBTSxJQUFJLFNBQVMsS0FBSyxNQUFNLE1BQUs7QUFDbkQsVUFBSSxDQUFDLFdBQVcsZ0JBQWdCLFlBQUEsSUFBZ0IsT0FBTyxDQUFDLENBQUEsR0FBSSxDQUFBLEdBQUksQ0FBQSxDQUFBO0FBQ2hFLFVBQUksQ0FBQyxZQUFZLGlCQUFpQixhQUFBLElBQWlCLFFBQVEsQ0FBQyxDQUFBLEdBQUksQ0FBQSxHQUFJLENBQUEsQ0FBQTtBQUNwRSxVQUFHLFVBQVUsU0FBUyxLQUFLLFdBQVcsU0FBUyxHQUFFO0FBQy9DLFlBQUcsS0FBSyxVQUFVLEVBQUEsR0FBSTtBQUNwQixjQUFJLFVBQVUsTUFBTTtBQUNsQixpQkFBSyxtQkFBbUIsSUFBSSxpQkFBaUIsVUFBVSxPQUFPLGNBQUEsRUFBZ0IsT0FBTyxZQUFBLENBQUE7QUFDckYsbUJBQU8sc0JBQXNCLE1BQU07QUFDakMsbUJBQUssbUJBQW1CLElBQUksWUFBWSxDQUFBLENBQUE7QUFDeEMscUJBQU8sc0JBQXNCLE1BQU0sS0FBSyxtQkFBbUIsSUFBSSxlQUFlLGVBQUEsQ0FBQTtZQUFBLENBQUE7VUFBQTtBQUdsRixhQUFHLGNBQWMsSUFBSSxNQUFNLGdCQUFBLENBQUE7QUFDM0IsZUFBSyxXQUFXLE1BQU0sU0FBUyxNQUFNO0FBQ25DLGlCQUFLLG1CQUFtQixJQUFJLENBQUEsR0FBSSxXQUFXLE9BQU8sYUFBQSxDQUFBO0FBQ2xELHdCQUFJLFVBQVUsSUFBSSxVQUFVLENBQUEsY0FBYSxVQUFVLE1BQU0sVUFBVSxNQUFBO0FBQ25FLGVBQUcsY0FBYyxJQUFJLE1BQU0sY0FBQSxDQUFBO1VBQUEsQ0FBQTtRQUFBLE9BRXhCO0FBQ0wsY0FBRyxjQUFjLFVBQVM7QUFBRTtVQUFBO0FBQzVCLGNBQUksVUFBVSxNQUFNO0FBQ2xCLGlCQUFLLG1CQUFtQixJQUFJLGdCQUFnQixXQUFXLE9BQU8sZUFBQSxFQUFpQixPQUFPLGFBQUEsQ0FBQTtBQUN0Rix3QkFBSSxVQUFVLElBQUksVUFBVSxDQUFBLGNBQWEsVUFBVSxNQUFNLFVBQVcsV0FBVyxPQUFBO0FBQy9FLG1CQUFPLHNCQUFzQixNQUFNO0FBQ2pDLG1CQUFLLG1CQUFtQixJQUFJLFdBQVcsQ0FBQSxDQUFBO0FBQ3ZDLHFCQUFPLHNCQUFzQixNQUFNLEtBQUssbUJBQW1CLElBQUksY0FBYyxjQUFBLENBQUE7WUFBQSxDQUFBO1VBQUE7QUFHakYsYUFBRyxjQUFjLElBQUksTUFBTSxnQkFBQSxDQUFBO0FBQzNCLGVBQUssV0FBVyxNQUFNLFNBQVMsTUFBTTtBQUNuQyxpQkFBSyxtQkFBbUIsSUFBSSxDQUFBLEdBQUksVUFBVSxPQUFPLFlBQUEsQ0FBQTtBQUNqRCxlQUFHLGNBQWMsSUFBSSxNQUFNLGNBQUEsQ0FBQTtVQUFBLENBQUE7UUFBQTtNQUFBLE9BRzFCO0FBQ0wsWUFBRyxLQUFLLFVBQVUsRUFBQSxHQUFJO0FBQ3BCLGlCQUFPLHNCQUFzQixNQUFNO0FBQ2pDLGVBQUcsY0FBYyxJQUFJLE1BQU0sZ0JBQUEsQ0FBQTtBQUMzQix3QkFBSSxVQUFVLElBQUksVUFBVSxDQUFBLGNBQWEsVUFBVSxNQUFNLFVBQVUsTUFBQTtBQUNuRSxlQUFHLGNBQWMsSUFBSSxNQUFNLGNBQUEsQ0FBQTtVQUFBLENBQUE7UUFBQSxPQUV4QjtBQUNMLGlCQUFPLHNCQUFzQixNQUFNO0FBQ2pDLGVBQUcsY0FBYyxJQUFJLE1BQU0sZ0JBQUEsQ0FBQTtBQUMzQix3QkFBSSxVQUFVLElBQUksVUFBVSxDQUFBLGNBQWEsVUFBVSxNQUFNLFVBQVUsV0FBVyxPQUFBO0FBQzlFLGVBQUcsY0FBYyxJQUFJLE1BQU0sY0FBQSxDQUFBO1VBQUEsQ0FBQTtRQUFBO01BQUE7SUFBQTtJQU1uQyxtQkFBbUIsSUFBSSxNQUFNLFNBQVMsWUFBWSxNQUFNLE1BQUs7QUFDM0QsVUFBSSxDQUFDLGdCQUFnQixrQkFBa0IsY0FBQSxJQUFrQixjQUFjLENBQUMsQ0FBQSxHQUFJLENBQUEsR0FBSSxDQUFBLENBQUE7QUFDaEYsVUFBRyxlQUFlLFNBQVMsR0FBRTtBQUMzQixZQUFJLFVBQVUsTUFBTSxLQUFLLG1CQUFtQixJQUFJLGlCQUFpQixPQUFPLGNBQUEsR0FBaUIsQ0FBQSxDQUFBO0FBQ3pGLFlBQUksU0FBUyxNQUFNLEtBQUssbUJBQW1CLElBQUksS0FBSyxPQUFPLGNBQUEsR0FBaUIsUUFBUSxPQUFPLGNBQUEsRUFBZ0IsT0FBTyxnQkFBQSxDQUFBO0FBQ2xILGVBQU8sS0FBSyxXQUFXLE1BQU0sU0FBUyxNQUFBO01BQUE7QUFFeEMsYUFBTyxzQkFBc0IsTUFBTTtBQUNqQyxZQUFJLENBQUMsVUFBVSxXQUFBLElBQWUsWUFBSSxVQUFVLElBQUksV0FBVyxDQUFDLENBQUEsR0FBSSxDQUFBLENBQUEsQ0FBQTtBQUNoRSxZQUFJLFdBQVcsS0FBSyxPQUFPLENBQUEsU0FBUSxTQUFTLFFBQVEsSUFBQSxJQUFRLEtBQUssQ0FBQyxHQUFHLFVBQVUsU0FBUyxJQUFBLENBQUE7QUFDeEYsWUFBSSxjQUFjLFFBQVEsT0FBTyxDQUFBLFNBQVEsWUFBWSxRQUFRLElBQUEsSUFBUSxLQUFLLEdBQUcsVUFBVSxTQUFTLElBQUEsQ0FBQTtBQUNoRyxZQUFJLFVBQVUsU0FBUyxPQUFPLENBQUEsU0FBUSxRQUFRLFFBQVEsSUFBQSxJQUFRLENBQUEsRUFBRyxPQUFPLFFBQUE7QUFDeEUsWUFBSSxhQUFhLFlBQVksT0FBTyxDQUFBLFNBQVEsS0FBSyxRQUFRLElBQUEsSUFBUSxDQUFBLEVBQUcsT0FBTyxXQUFBO0FBRTNFLG9CQUFJLFVBQVUsSUFBSSxXQUFXLENBQUEsY0FBYTtBQUN4QyxvQkFBVSxVQUFVLE9BQU8sR0FBRyxVQUFBO0FBQzlCLG9CQUFVLFVBQVUsSUFBSSxHQUFHLE9BQUE7QUFDM0IsaUJBQU8sQ0FBQyxTQUFTLFVBQUE7UUFBQSxDQUFBO01BQUEsQ0FBQTtJQUFBO0lBS3ZCLGlCQUFpQixJQUFJLE1BQU0sU0FBUTtBQUNqQyxVQUFJLENBQUMsVUFBVSxXQUFBLElBQWUsWUFBSSxVQUFVLElBQUksU0FBUyxDQUFDLENBQUEsR0FBSSxDQUFBLENBQUEsQ0FBQTtBQUU5RCxVQUFJLGVBQWUsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUEsTUFBVSxJQUFBLEVBQU0sT0FBTyxPQUFBO0FBQzNELFVBQUksVUFBVSxTQUFTLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBQSxNQUFVLENBQUMsYUFBYSxTQUFTLElBQUEsQ0FBQSxFQUFPLE9BQU8sSUFBQTtBQUNyRixVQUFJLGFBQWEsWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLGFBQWEsU0FBUyxJQUFBLENBQUEsRUFBTyxPQUFPLE9BQUE7QUFFbkYsa0JBQUksVUFBVSxJQUFJLFNBQVMsQ0FBQSxjQUFhO0FBQ3RDLG1CQUFXLFFBQVEsQ0FBQSxTQUFRLFVBQVUsZ0JBQWdCLElBQUEsQ0FBQTtBQUNyRCxnQkFBUSxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUEsTUFBUyxVQUFVLGFBQWEsTUFBTSxHQUFBLENBQUE7QUFDOUQsZUFBTyxDQUFDLFNBQVMsVUFBQTtNQUFBLENBQUE7SUFBQTtJQUlyQixjQUFjLElBQUksU0FBUTtBQUFFLGFBQU8sUUFBUSxNQUFNLENBQUEsU0FBUSxHQUFHLFVBQVUsU0FBUyxJQUFBLENBQUE7SUFBQTtJQUUvRSxhQUFhLElBQUksWUFBVztBQUMxQixhQUFPLENBQUMsS0FBSyxVQUFVLEVBQUEsS0FBTyxLQUFLLGNBQWMsSUFBSSxVQUFBO0lBQUE7SUFHdkQsWUFBWSxVQUFVLEVBQUMsR0FBQSxHQUFJO0FBQ3pCLGFBQU8sS0FBSyxZQUFJLElBQUksVUFBVSxFQUFBLElBQU0sQ0FBQyxRQUFBO0lBQUE7RUFBQTtBQUl6QyxNQUFPLGFBQVE7QUNwSmYsTUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sWUFBWSxDQUFBLE1BQU87QUFDbEQsUUFBSSxXQUFXLElBQUksU0FBUyxJQUFBO0FBQzVCLFFBQUksV0FBVyxDQUFBO0FBRWYsYUFBUyxRQUFRLENBQUMsS0FBSyxLQUFLLFdBQVc7QUFDckMsVUFBRyxlQUFlLE1BQUs7QUFBRSxpQkFBUyxLQUFLLEdBQUE7TUFBQTtJQUFBLENBQUE7QUFJekMsYUFBUyxRQUFRLENBQUEsUUFBTyxTQUFTLE9BQU8sR0FBQSxDQUFBO0FBRXhDLFFBQUksU0FBUyxJQUFJLGdCQUFBO0FBQ2pCLGFBQVEsQ0FBQyxLQUFLLEdBQUEsS0FBUSxTQUFTLFFBQUEsR0FBVTtBQUN2QyxVQUFHLFVBQVUsV0FBVyxLQUFLLFVBQVUsUUFBUSxHQUFBLEtBQVEsR0FBRTtBQUN2RCxlQUFPLE9BQU8sS0FBSyxHQUFBO01BQUE7SUFBQTtBQUd2QixhQUFRLFdBQVcsTUFBSztBQUFFLGFBQU8sT0FBTyxTQUFTLEtBQUssUUFBQTtJQUFBO0FBRXRELFdBQU8sT0FBTyxTQUFBO0VBQUE7QUFHaEIsTUFBQSxPQUFBLE1BQTBCO0lBQ3hCLFlBQVksSUFBSUEsYUFBWSxZQUFZLE9BQU07QUFDNUMsV0FBSyxhQUFhQTtBQUNsQixXQUFLLFFBQVE7QUFDYixXQUFLLFNBQVM7QUFDZCxXQUFLLE9BQU8sYUFBYSxXQUFXLE9BQU87QUFDM0MsV0FBSyxLQUFLO0FBQ1YsV0FBSyxLQUFLLEtBQUssR0FBRztBQUNsQixXQUFLLE1BQU07QUFDWCxXQUFLLGFBQWE7QUFDbEIsV0FBSyxjQUFjO0FBQ25CLFdBQUssZUFBZSxDQUFBO0FBQ3BCLFdBQUssY0FBYyxDQUFBO0FBQ25CLFdBQUssV0FBVztBQUNoQixXQUFLLE9BQU87QUFDWixXQUFLLFlBQVksS0FBSyxTQUFTLEtBQUssT0FBTyxZQUFZLElBQUk7QUFDM0QsV0FBSyxjQUFjO0FBQ25CLFdBQUssWUFBWTtBQUNqQixXQUFLLGVBQWUsU0FBUyxRQUFPO0FBQUUsa0JBQVUsT0FBQTtNQUFBO0FBQ2hELFdBQUssZUFBZSxXQUFVO01BQUE7QUFDOUIsV0FBSyxpQkFBaUIsS0FBSyxTQUFTLE9BQU8sQ0FBQTtBQUMzQyxXQUFLLFlBQVksQ0FBQTtBQUNqQixXQUFLLFlBQVksQ0FBQTtBQUNqQixXQUFLLGNBQWMsQ0FBQTtBQUNuQixXQUFLLFdBQVcsS0FBSyxTQUFTLE9BQU8sQ0FBQTtBQUNyQyxXQUFLLEtBQUssU0FBUyxLQUFLLE1BQU0sQ0FBQTtBQUM5QixXQUFLLFVBQVUsS0FBSyxXQUFXLFFBQVEsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUM1RCxlQUFPO1VBQ0wsVUFBVSxLQUFLLFdBQVcsS0FBSyxPQUFPO1VBQ3RDLEtBQUssS0FBSyxXQUFXLFNBQVksS0FBSyxRQUFRO1VBQzlDLFFBQVEsS0FBSyxjQUFBO1VBQ2IsU0FBUyxLQUFLLFdBQUE7VUFDZCxRQUFRLEtBQUssVUFBQTtVQUNiLE9BQU8sS0FBSztRQUFBO01BQUEsQ0FBQTtBQUdoQixXQUFLLFdBQVcsS0FBSyxXQUFXLGFBQUE7QUFDaEMsV0FBSyxZQUFBO0lBQUE7SUFHUCxRQUFRLE1BQUs7QUFBRSxXQUFLLE9BQU87SUFBQTtJQUUzQixZQUFZLE1BQUs7QUFDZixXQUFLLFdBQVc7QUFDaEIsV0FBSyxPQUFPO0lBQUE7SUFHZCxTQUFRO0FBQUUsYUFBTyxLQUFLLEdBQUcsYUFBYSxRQUFBLE1BQWM7SUFBQTtJQUVwRCxnQkFBZTtBQUNiLFVBQUksU0FBUyxLQUFLLFdBQVcsT0FBTyxLQUFLLEVBQUE7QUFDekMsVUFBSSxXQUNGLFlBQUksSUFBSSxVQUFVLElBQUksS0FBSyxRQUFRLGdCQUFBLElBQUEsRUFDaEMsSUFBSSxDQUFBLFNBQVEsS0FBSyxPQUFPLEtBQUssSUFBQSxFQUFNLE9BQU8sQ0FBQSxRQUFPLE9BQVEsUUFBUyxRQUFBO0FBRXZFLFVBQUcsU0FBUyxTQUFTLEdBQUU7QUFBRSxlQUFPLG1CQUFtQjtNQUFBO0FBQ25ELGFBQU8sYUFBYSxLQUFLO0FBRXpCLGFBQU87SUFBQTtJQUdULGNBQWE7QUFBRSxhQUFPLEtBQUssUUFBUSxRQUFBO0lBQUE7SUFFbkMsYUFBWTtBQUFFLGFBQU8sS0FBSyxHQUFHLGFBQWEsV0FBQTtJQUFBO0lBRTFDLFlBQVc7QUFDVCxVQUFJLE1BQU0sS0FBSyxHQUFHLGFBQWEsVUFBQTtBQUMvQixhQUFPLFFBQVEsS0FBSyxPQUFPO0lBQUE7SUFHN0IsUUFBUSxXQUFXLFdBQVc7SUFBQSxHQUFJO0FBQ2hDLFdBQUssbUJBQUE7QUFDTCxXQUFLLFlBQVk7QUFDakIsYUFBTyxLQUFLLEtBQUssU0FBUyxLQUFLO0FBQy9CLFVBQUcsS0FBSyxRQUFPO0FBQUUsZUFBTyxLQUFLLEtBQUssU0FBUyxLQUFLLE9BQU8sSUFBSSxLQUFLO01BQUE7QUFDaEUsbUJBQWEsS0FBSyxXQUFBO0FBQ2xCLFVBQUksYUFBYSxNQUFNO0FBQ3JCLGlCQUFBO0FBQ0EsaUJBQVEsTUFBTSxLQUFLLFdBQVU7QUFDM0IsZUFBSyxZQUFZLEtBQUssVUFBVSxHQUFBO1FBQUE7TUFBQTtBQUlwQyxrQkFBSSxzQkFBc0IsS0FBSyxFQUFBO0FBRS9CLFdBQUssSUFBSSxhQUFhLE1BQU0sQ0FBQyw0Q0FBQSxDQUFBO0FBQzdCLFdBQUssUUFBUSxNQUFBLEVBQ1YsUUFBUSxNQUFNLFVBQUEsRUFDZCxRQUFRLFNBQVMsVUFBQSxFQUNqQixRQUFRLFdBQVcsVUFBQTtJQUFBO0lBR3hCLHVCQUF1QixTQUFRO0FBQzdCLFdBQUssR0FBRyxVQUFVLE9BQ2hCLHFCQUNBLHdCQUNBLGVBQUE7QUFFRixXQUFLLEdBQUcsVUFBVSxJQUFJLEdBQUcsT0FBQTtJQUFBO0lBRzNCLFdBQVcsU0FBUTtBQUNqQixtQkFBYSxLQUFLLFdBQUE7QUFDbEIsVUFBRyxTQUFRO0FBQ1QsYUFBSyxjQUFjLFdBQVcsTUFBTSxLQUFLLFdBQUEsR0FBYyxPQUFBO01BQUEsT0FDbEQ7QUFDTCxpQkFBUSxNQUFNLEtBQUssV0FBVTtBQUFFLGVBQUssVUFBVSxJQUFJLGVBQUE7UUFBQTtBQUNsRCxhQUFLLG9CQUFvQixzQkFBQTtNQUFBO0lBQUE7SUFJN0IsYUFBWTtBQUNWLG1CQUFhLEtBQUssV0FBQTtBQUNsQixXQUFLLG9CQUFvQixtQkFBQTtJQUFBO0lBRzNCLHFCQUFvQjtBQUNsQixlQUFRLE1BQU0sS0FBSyxXQUFVO0FBQUUsYUFBSyxVQUFVLElBQUksY0FBQTtNQUFBO0lBQUE7SUFHcEQsSUFBSSxNQUFNLGFBQVk7QUFDcEIsV0FBSyxXQUFXLElBQUksTUFBTSxNQUFNLFdBQUE7SUFBQTtJQUdsQyxXQUFXLE1BQU0sU0FBUyxTQUFTLFdBQVU7SUFBQSxHQUFHO0FBQzlDLFdBQUssV0FBVyxXQUFXLE1BQU0sU0FBUyxNQUFBO0lBQUE7SUFHNUMsY0FBYyxXQUFXLFVBQVM7QUFDaEMsVUFBRyxxQkFBcUIsZUFBZSxxQkFBcUIsWUFBVztBQUNyRSxlQUFPLEtBQUssV0FBVyxNQUFNLFdBQVcsQ0FBQSxTQUFRLFNBQVMsTUFBTSxTQUFBLENBQUE7TUFBQTtBQUdqRSxVQUFHLE1BQU0sU0FBQSxHQUFXO0FBQ2xCLFlBQUksVUFBVSxZQUFJLHNCQUFzQixLQUFLLElBQUksU0FBQTtBQUNqRCxZQUFHLFFBQVEsV0FBVyxHQUFFO0FBQ3RCLG1CQUFTLDZDQUE2QyxXQUFBO1FBQUEsT0FDakQ7QUFDTCxtQkFBUyxNQUFNLFNBQVMsU0FBQSxDQUFBO1FBQUE7TUFBQSxPQUVyQjtBQUNMLFlBQUksVUFBVSxNQUFNLEtBQUssU0FBUyxpQkFBaUIsU0FBQSxDQUFBO0FBQ25ELFlBQUcsUUFBUSxXQUFXLEdBQUU7QUFBRSxtQkFBUyxtREFBbUQsWUFBQTtRQUFBO0FBQ3RGLGdCQUFRLFFBQVEsQ0FBQSxXQUFVLEtBQUssV0FBVyxNQUFNLFFBQVEsQ0FBQSxTQUFRLFNBQVMsTUFBTSxNQUFBLENBQUEsQ0FBQTtNQUFBO0lBQUE7SUFJbkYsVUFBVSxNQUFNLFNBQVMsVUFBUztBQUNoQyxXQUFLLElBQUksTUFBTSxNQUFNLENBQUMsSUFBSSxNQUFNLE9BQUEsQ0FBQSxDQUFBO0FBQ2hDLFVBQUksRUFBQyxNQUFNLE9BQU8sUUFBUSxNQUFBLElBQVMsU0FBUyxRQUFRLE9BQUE7QUFDcEQsVUFBRyxPQUFNO0FBQUUsb0JBQUksU0FBUyxLQUFBO01BQUE7QUFFeEIsZUFBUyxFQUFDLE1BQU0sT0FBTyxPQUFBLENBQUE7QUFDdkIsYUFBTztJQUFBO0lBR1QsT0FBTyxNQUFLO0FBQ1YsVUFBSSxFQUFDLFVBQVUsVUFBQSxJQUFhO0FBQzVCLFVBQUcsV0FBVTtBQUNYLFlBQUksQ0FBQyxLQUFLLEtBQUEsSUFBUztBQUNuQixhQUFLLEtBQUssWUFBSSxxQkFBcUIsS0FBSyxJQUFJLEtBQUssS0FBQTtNQUFBO0FBRW5ELFdBQUssYUFBYTtBQUNsQixXQUFLLGNBQWM7QUFDbkIsV0FBSyxRQUFRO0FBRWIsc0JBQVEsVUFBVSxLQUFLLFdBQVcsY0FBYyxPQUFPLFNBQVMsVUFBVSxtQkFBQTtBQUMxRSxXQUFLLFVBQVUsU0FBUyxVQUFVLENBQUMsRUFBQyxNQUFNLE9BQUEsTUFBWTtBQUNwRCxhQUFLLFdBQVcsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFBO0FBQ3RDLFlBQUksT0FBTyxLQUFLLGdCQUFnQixNQUFNLE1BQUE7QUFDdEMsYUFBSyxnQkFBQTtBQUNMLFlBQUksUUFBUSxLQUFLLGlCQUFpQixJQUFBO0FBQ2xDLGFBQUs7QUFFTCxZQUFHLE1BQU0sU0FBUyxHQUFFO0FBQ2xCLGdCQUFNLFFBQVEsQ0FBQyxDQUFDLE1BQU0sU0FBUyxNQUFBLEdBQVMsTUFBTTtBQUM1QyxpQkFBSyxpQkFBaUIsTUFBTSxRQUFRLENBQUEsVUFBUTtBQUMxQyxrQkFBRyxNQUFNLE1BQU0sU0FBUyxHQUFFO0FBQ3hCLHFCQUFLLGVBQWUsT0FBTSxNQUFNLE1BQUE7Y0FBQTtZQUFBLENBQUE7VUFBQSxDQUFBO1FBQUEsT0FJakM7QUFDTCxlQUFLLGVBQWUsTUFBTSxNQUFNLE1BQUE7UUFBQTtNQUFBLENBQUE7SUFBQTtJQUt0QyxrQkFBaUI7QUFDZixrQkFBSSxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLFlBQVksQ0FBQSxPQUFNO0FBQ25FLFdBQUcsZ0JBQWdCLE9BQUE7QUFDbkIsV0FBRyxnQkFBZ0IsV0FBQTtNQUFBLENBQUE7SUFBQTtJQUl2QixlQUFlLEVBQUMsV0FBQSxHQUFhLE1BQU0sUUFBTztBQUd4QyxVQUFHLEtBQUssWUFBWSxLQUFNLEtBQUssVUFBVSxDQUFDLEtBQUssT0FBTyxjQUFBLEdBQWlCO0FBQ3JFLGVBQU8sS0FBSyxlQUFlLFlBQVksTUFBTSxNQUFBO01BQUE7QUFPL0MsVUFBSSxjQUFjLFlBQUksMEJBQTBCLE1BQU0sS0FBSyxFQUFBLEVBQUksT0FBTyxDQUFBLFNBQVE7QUFDNUUsWUFBSSxTQUFTLEtBQUssTUFBTSxLQUFLLEdBQUcsY0FBYyxRQUFRLEtBQUssTUFBQTtBQUMzRCxZQUFJLFlBQVksVUFBVSxPQUFPLGFBQWEsVUFBQTtBQUM5QyxZQUFHLFdBQVU7QUFBRSxlQUFLLGFBQWEsWUFBWSxTQUFBO1FBQUE7QUFDN0MsZUFBTyxLQUFLLFVBQVUsSUFBQTtNQUFBLENBQUE7QUFHeEIsVUFBRyxZQUFZLFdBQVcsR0FBRTtBQUMxQixZQUFHLEtBQUssUUFBTztBQUNiLGVBQUssS0FBSyxlQUFlLEtBQUssQ0FBQyxNQUFNLE1BQU0sS0FBSyxlQUFlLFlBQVksTUFBTSxNQUFBLENBQUEsQ0FBQTtBQUNqRixlQUFLLE9BQU8sUUFBUSxJQUFBO1FBQUEsT0FDZjtBQUNMLGVBQUssd0JBQUE7QUFDTCxlQUFLLGVBQWUsWUFBWSxNQUFNLE1BQUE7UUFBQTtNQUFBLE9BRW5DO0FBQ0wsYUFBSyxLQUFLLGVBQWUsS0FBSyxDQUFDLE1BQU0sTUFBTSxLQUFLLGVBQWUsWUFBWSxNQUFNLE1BQUEsQ0FBQSxDQUFBO01BQUE7SUFBQTtJQUlyRixrQkFBaUI7QUFDZixXQUFLLEtBQUssWUFBSSxLQUFLLEtBQUssRUFBQTtBQUN4QixXQUFLLEdBQUcsYUFBYSxhQUFhLEtBQUssS0FBSyxFQUFBO0lBQUE7SUFHOUMsZUFBZSxZQUFZLE1BQU0sUUFBTztBQUN0QyxXQUFLLGdCQUFBO0FBQ0wsVUFBSSxRQUFRLElBQUksU0FBUyxNQUFNLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxJQUFBO0FBQ3ZELFlBQU0sOEJBQUE7QUFDTixXQUFLLGFBQWEsT0FBTyxLQUFBO0FBQ3pCLFdBQUssZ0JBQUE7QUFDTCxrQkFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssUUFBUSxRQUFBLGlCQUF5QixhQUFhLENBQUEsV0FBVTtBQUNoRixZQUFJLE9BQU8sS0FBSyxRQUFRLE1BQUE7QUFDeEIsWUFBRyxNQUFLO0FBQUUsZUFBSyxVQUFBO1FBQUE7TUFBQSxDQUFBO0FBR2pCLFdBQUssY0FBYztBQUNuQixXQUFLLFdBQVcsZUFBZSxNQUFBO0FBQy9CLFdBQUssb0JBQUE7QUFFTCxVQUFHLFlBQVc7QUFDWixZQUFJLEVBQUMsTUFBTSxHQUFBLElBQU07QUFDakIsYUFBSyxXQUFXLGFBQWEsSUFBSSxJQUFBO01BQUE7QUFFbkMsV0FBSyxXQUFBO0FBQ0wsVUFBRyxLQUFLLFlBQVksR0FBRTtBQUFFLGFBQUssbUJBQUE7TUFBQTtBQUM3QixXQUFLLGFBQUE7SUFBQTtJQUdQLHdCQUF3QixRQUFRLE1BQUs7QUFDbkMsV0FBSyxXQUFXLFdBQVcscUJBQXFCLENBQUMsUUFBUSxJQUFBLENBQUE7QUFDekQsVUFBSSxPQUFPLEtBQUssUUFBUSxNQUFBO0FBQ3hCLFVBQUksWUFBWSxRQUFRLFlBQUksVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFBLENBQUE7QUFDM0QsVUFBRyxRQUFRLENBQUMsT0FBTyxZQUFZLElBQUEsS0FBUyxFQUFFLGFBQWEsV0FBVyxPQUFPLFNBQVMsS0FBSyxPQUFBLElBQVU7QUFDL0YsYUFBSyxlQUFBO0FBQ0wsZUFBTztNQUFBO0lBQUE7SUFJWCxhQUFhLE9BQU8sV0FBVTtBQUM1QixVQUFJLGFBQWEsQ0FBQTtBQUNqQixVQUFJLG1CQUFtQjtBQUN2QixVQUFJLGlCQUFpQixvQkFBSSxJQUFBO0FBRXpCLFlBQU0sTUFBTSxTQUFTLENBQUEsT0FBTTtBQUN6QixhQUFLLFdBQVcsV0FBVyxlQUFlLENBQUMsRUFBQSxDQUFBO0FBRTNDLFlBQUksVUFBVSxLQUFLLFFBQVEsRUFBQTtBQUMzQixZQUFHLFNBQVE7QUFBRSxrQkFBUSxVQUFBO1FBQUE7TUFBQSxDQUFBO0FBR3ZCLFlBQU0sTUFBTSxpQkFBaUIsQ0FBQSxPQUFNO0FBQ2pDLFlBQUcsWUFBSSxZQUFZLEVBQUEsR0FBSTtBQUNyQixlQUFLLFdBQVcsY0FBQTtRQUFBLE9BQ1g7QUFDTCw2QkFBbUI7UUFBQTtNQUFBLENBQUE7QUFJdkIsWUFBTSxPQUFPLFdBQVcsQ0FBQyxRQUFRLFNBQVM7QUFDeEMsWUFBSSxPQUFPLEtBQUssd0JBQXdCLFFBQVEsSUFBQTtBQUNoRCxZQUFHLE1BQUs7QUFBRSx5QkFBZSxJQUFJLE9BQU8sRUFBQTtRQUFBO01BQUEsQ0FBQTtBQUd0QyxZQUFNLE1BQU0sV0FBVyxDQUFBLE9BQU07QUFDM0IsWUFBRyxlQUFlLElBQUksR0FBRyxFQUFBLEdBQUk7QUFBRSxlQUFLLFFBQVEsRUFBQSxFQUFJLFVBQUE7UUFBQTtNQUFBLENBQUE7QUFHbEQsWUFBTSxNQUFNLGFBQWEsQ0FBQyxPQUFPO0FBQy9CLFlBQUcsR0FBRyxhQUFhLEtBQUssY0FBYTtBQUFFLHFCQUFXLEtBQUssRUFBQTtRQUFBO01BQUEsQ0FBQTtBQUd6RCxZQUFNLE1BQU0sd0JBQXdCLENBQUEsUUFBTyxLQUFLLHFCQUFxQixLQUFLLFNBQUEsQ0FBQTtBQUMxRSxZQUFNLFFBQUE7QUFDTixXQUFLLHFCQUFxQixZQUFZLFNBQUE7QUFFdEMsYUFBTztJQUFBO0lBR1QscUJBQXFCLFVBQVUsV0FBVTtBQUN2QyxVQUFJLGdCQUFnQixDQUFBO0FBQ3BCLGVBQVMsUUFBUSxDQUFBLFdBQVU7QUFDekIsWUFBSSxhQUFhLFlBQUksSUFBSSxRQUFRLElBQUksZ0JBQUE7QUFDckMsWUFBSSxRQUFRLFlBQUksSUFBSSxRQUFRLElBQUksS0FBSyxRQUFRLFFBQUEsSUFBQTtBQUM3QyxtQkFBVyxPQUFPLE1BQUEsRUFBUSxRQUFRLENBQUEsT0FBTTtBQUN0QyxjQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUE7QUFDM0IsY0FBRyxNQUFNLEdBQUEsS0FBUSxjQUFjLFFBQVEsR0FBQSxNQUFTLElBQUc7QUFBRSwwQkFBYyxLQUFLLEdBQUE7VUFBQTtRQUFBLENBQUE7QUFFMUUsY0FBTSxPQUFPLE1BQUEsRUFBUSxRQUFRLENBQUEsV0FBVTtBQUNyQyxjQUFJLE9BQU8sS0FBSyxRQUFRLE1BQUE7QUFDeEIsa0JBQVEsS0FBSyxZQUFZLElBQUE7UUFBQSxDQUFBO01BQUEsQ0FBQTtBQU03QixVQUFHLFdBQVU7QUFDWCxhQUFLLDZCQUE2QixhQUFBO01BQUE7SUFBQTtJQUl0QyxrQkFBaUI7QUFDZixrQkFBSSxnQkFBZ0IsS0FBSyxJQUFJLEtBQUssRUFBQSxFQUFJLFFBQVEsQ0FBQSxPQUFNLEtBQUssVUFBVSxFQUFBLENBQUE7SUFBQTtJQUdyRSxhQUFhLElBQUc7QUFBRSxhQUFPLEtBQUssS0FBSyxTQUFTLEtBQUssSUFBSTtJQUFBO0lBRXJELGtCQUFrQixJQUFHO0FBQ25CLFVBQUcsR0FBRyxPQUFPLEtBQUssSUFBRztBQUNuQixlQUFPO01BQUEsT0FDRjtBQUNMLGVBQU8sS0FBSyxTQUFTLEdBQUcsYUFBYSxhQUFBLEdBQWdCLEdBQUc7TUFBQTtJQUFBO0lBSTVELGtCQUFrQixJQUFHO0FBQ25CLGVBQVEsWUFBWSxLQUFLLEtBQUssVUFBUztBQUNyQyxpQkFBUSxXQUFXLEtBQUssS0FBSyxTQUFTLFdBQVU7QUFDOUMsY0FBRyxZQUFZLElBQUc7QUFBRSxtQkFBTyxLQUFLLEtBQUssU0FBUyxVQUFVLFNBQVMsUUFBQTtVQUFBO1FBQUE7TUFBQTtJQUFBO0lBS3ZFLFVBQVUsSUFBRztBQUNYLFVBQUksUUFBUSxLQUFLLGFBQWEsR0FBRyxFQUFBO0FBQ2pDLFVBQUcsQ0FBQyxPQUFNO0FBQ1IsWUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssWUFBWSxJQUFBO0FBQ3pDLGFBQUssS0FBSyxTQUFTLEtBQUssSUFBSSxLQUFLLE1BQU07QUFDdkMsYUFBSyxLQUFBO0FBQ0wsYUFBSztBQUNMLGVBQU87TUFBQTtJQUFBO0lBSVgsZ0JBQWU7QUFBRSxhQUFPLEtBQUs7SUFBQTtJQUU3QixRQUFRLFFBQU87QUFDYixXQUFLO0FBRUwsVUFBRyxLQUFLLGVBQWUsR0FBRTtBQUN2QixZQUFHLEtBQUssUUFBTztBQUNiLGVBQUssT0FBTyxRQUFRLElBQUE7UUFBQSxPQUNmO0FBQ0wsZUFBSyx3QkFBQTtRQUFBO01BQUE7SUFBQTtJQUtYLDBCQUF5QjtBQUN2QixXQUFLLGFBQWEsTUFBTTtBQUN0QixhQUFLLGVBQWUsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFBLE1BQVE7QUFDMUMsY0FBRyxDQUFDLEtBQUssWUFBQSxHQUFjO0FBQUUsZUFBQTtVQUFBO1FBQUEsQ0FBQTtBQUUzQixhQUFLLGlCQUFpQixDQUFBO01BQUEsQ0FBQTtJQUFBO0lBSTFCLE9BQU8sTUFBTSxRQUFPO0FBQ2xCLFVBQUcsS0FBSyxjQUFBLEtBQW9CLEtBQUssV0FBVyxlQUFBLEtBQW9CLENBQUMsWUFBSSxZQUFZLEtBQUssRUFBQSxHQUFLO0FBQ3pGLGVBQU8sS0FBSyxhQUFhLEtBQUssRUFBQyxNQUFNLE9BQUEsQ0FBQTtNQUFBO0FBR3ZDLFdBQUssU0FBUyxVQUFVLElBQUE7QUFDeEIsVUFBSSxtQkFBbUI7QUFLdkIsVUFBRyxLQUFLLFNBQVMsb0JBQW9CLElBQUEsR0FBTTtBQUN6QyxhQUFLLFdBQVcsS0FBSyw0QkFBNEIsTUFBTTtBQUNyRCxjQUFJLGFBQWEsWUFBSSxlQUFlLEtBQUssSUFBSSxLQUFLLFNBQVMsY0FBYyxJQUFBLENBQUE7QUFDekUscUJBQVcsUUFBUSxDQUFBLGNBQWE7QUFDOUIsZ0JBQUcsS0FBSyxlQUFlLEtBQUssU0FBUyxhQUFhLE1BQU0sU0FBQSxHQUFZLFNBQUEsR0FBVztBQUFFLGlDQUFtQjtZQUFBO1VBQUEsQ0FBQTtRQUFBLENBQUE7TUFBQSxXQUdoRyxDQUFDLFFBQVEsSUFBQSxHQUFNO0FBQ3ZCLGFBQUssV0FBVyxLQUFLLHVCQUF1QixNQUFNO0FBQ2hELGNBQUksT0FBTyxLQUFLLGdCQUFnQixNQUFNLFFBQUE7QUFDdEMsY0FBSSxRQUFRLElBQUksU0FBUyxNQUFNLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxJQUFBO0FBQ3ZELDZCQUFtQixLQUFLLGFBQWEsT0FBTyxJQUFBO1FBQUEsQ0FBQTtNQUFBO0FBSWhELFdBQUssV0FBVyxlQUFlLE1BQUE7QUFDL0IsVUFBRyxrQkFBaUI7QUFBRSxhQUFLLGdCQUFBO01BQUE7SUFBQTtJQUc3QixnQkFBZ0IsTUFBTSxNQUFLO0FBQ3pCLGFBQU8sS0FBSyxXQUFXLEtBQUssa0JBQWtCLFNBQVMsTUFBTTtBQUMzRCxZQUFJLE1BQU0sS0FBSyxHQUFHO0FBR2xCLFlBQUksT0FBTyxPQUFPLEtBQUssU0FBUyxjQUFjLElBQUEsRUFBTSxPQUFPLEtBQUssV0FBQSxJQUFlO0FBQy9FLFlBQUksT0FBTyxLQUFLLFNBQVMsU0FBUyxJQUFBO0FBQ2xDLGVBQU8sSUFBSSxPQUFPLFNBQVM7TUFBQSxDQUFBO0lBQUE7SUFJL0IsZUFBZSxNQUFNLEtBQUk7QUFDdkIsVUFBRyxRQUFRLElBQUE7QUFBTyxlQUFPO0FBQ3pCLFVBQUksT0FBTyxLQUFLLFNBQVMsa0JBQWtCLEdBQUE7QUFDM0MsVUFBSSxRQUFRLElBQUksU0FBUyxNQUFNLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxHQUFBO0FBQ3ZELFVBQUksZ0JBQWdCLEtBQUssYUFBYSxPQUFPLElBQUE7QUFDN0MsYUFBTztJQUFBO0lBR1QsUUFBUSxJQUFHO0FBQUUsYUFBTyxLQUFLLFVBQVUsU0FBUyxVQUFVLEVBQUE7SUFBQTtJQUV0RCxRQUFRLElBQUc7QUFDVCxVQUFHLFNBQVMsVUFBVSxFQUFBLEtBQU8sQ0FBQyxHQUFHLGNBQWE7QUFBRTtNQUFBO0FBQ2hELFVBQUksV0FBVyxHQUFHLGFBQWEsWUFBWSxVQUFBLEtBQWUsR0FBRyxhQUFhLEtBQUssUUFBUSxRQUFBLENBQUE7QUFDdkYsVUFBRyxZQUFZLENBQUMsS0FBSyxZQUFZLEVBQUEsR0FBSTtBQUFFO01BQUE7QUFDdkMsVUFBSSxZQUFZLEtBQUssV0FBVyxpQkFBaUIsUUFBQTtBQUVqRCxVQUFHLFdBQVU7QUFDWCxZQUFHLENBQUMsR0FBRyxJQUFHO0FBQUUsbUJBQVMsdUJBQXVCLHlEQUF5RCxFQUFBO1FBQUE7QUFDckcsWUFBSSxPQUFPLElBQUksU0FBUyxNQUFNLElBQUksU0FBQTtBQUNsQyxhQUFLLFVBQVUsU0FBUyxVQUFVLEtBQUssRUFBQSxLQUFPO0FBQzlDLGVBQU87TUFBQSxXQUNDLGFBQWEsTUFBSztBQUMxQixpQkFBUywyQkFBMkIsYUFBYSxFQUFBO01BQUE7SUFBQTtJQUlyRCxZQUFZLE1BQUs7QUFDZixXQUFLLFlBQUE7QUFDTCxXQUFLLFlBQUE7QUFDTCxhQUFPLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSyxFQUFBO0lBQUE7SUFHaEQsc0JBQXFCO0FBQ25CLFdBQUssYUFBYSxRQUFRLENBQUMsRUFBQyxNQUFNLE9BQUEsTUFBWSxLQUFLLE9BQU8sTUFBTSxNQUFBLENBQUE7QUFDaEUsV0FBSyxlQUFlLENBQUE7SUFBQTtJQUd0QixVQUFVLE9BQU8sSUFBRztBQUNsQixXQUFLLFdBQVcsVUFBVSxLQUFLLFNBQVMsT0FBTyxDQUFBLFNBQVE7QUFDckQsWUFBRyxLQUFLLGNBQUEsR0FBZ0I7QUFDdEIsZUFBSyxLQUFLLGVBQWUsS0FBSyxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUEsQ0FBQSxDQUFBO1FBQUEsT0FDekM7QUFDTCxlQUFLLFdBQVcsaUJBQWlCLE1BQU0sR0FBRyxJQUFBLENBQUE7UUFBQTtNQUFBLENBQUE7SUFBQTtJQUtoRCxjQUFhO0FBR1gsV0FBSyxXQUFXLFVBQVUsS0FBSyxTQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzNELGFBQUssV0FBVyxpQkFBaUIsTUFBTTtBQUNyQyxlQUFLLFVBQVUsVUFBVSxTQUFTLENBQUMsRUFBQyxNQUFNLE9BQUEsTUFBWSxLQUFLLE9BQU8sTUFBTSxNQUFBLENBQUE7UUFBQSxDQUFBO01BQUEsQ0FBQTtBQUc1RSxXQUFLLFVBQVUsWUFBWSxDQUFDLEVBQUMsSUFBSSxNQUFBLE1BQVcsS0FBSyxXQUFXLEVBQUMsSUFBSSxNQUFBLENBQUEsQ0FBQTtBQUNqRSxXQUFLLFVBQVUsY0FBYyxDQUFDLFVBQVUsS0FBSyxZQUFZLEtBQUEsQ0FBQTtBQUN6RCxXQUFLLFVBQVUsaUJBQWlCLENBQUMsVUFBVSxLQUFLLGVBQWUsS0FBQSxDQUFBO0FBQy9ELFdBQUssUUFBUSxRQUFRLENBQUEsV0FBVSxLQUFLLFFBQVEsTUFBQSxDQUFBO0FBQzVDLFdBQUssUUFBUSxRQUFRLENBQUEsV0FBVSxLQUFLLFFBQVEsTUFBQSxDQUFBO0lBQUE7SUFHOUMscUJBQW9CO0FBQ2xCLGVBQVEsTUFBTSxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUk7QUFDeEMsYUFBSyxhQUFhLEVBQUEsRUFBSSxRQUFBO01BQUE7SUFBQTtJQUkxQixlQUFlLE9BQU07QUFDbkIsVUFBSSxFQUFDLElBQUksTUFBTSxNQUFBLElBQVM7QUFDeEIsVUFBSSxNQUFNLEtBQUssVUFBVSxFQUFBO0FBQ3pCLFdBQUssV0FBVyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUE7SUFBQTtJQUc3QyxZQUFZLE9BQU07QUFDaEIsVUFBSSxFQUFDLElBQUksS0FBQSxJQUFRO0FBQ2pCLFdBQUssT0FBTyxLQUFLLFVBQVUsRUFBQTtBQUMzQixXQUFLLFdBQVcsYUFBYSxJQUFJLElBQUE7SUFBQTtJQUduQyxVQUFVLElBQUc7QUFDWCxhQUFPLEdBQUcsV0FBVyxHQUFBLElBQU8sR0FBRyxPQUFPLFNBQVMsYUFBYSxPQUFPLFNBQVMsT0FBTyxPQUFPO0lBQUE7SUFHNUYsV0FBVyxFQUFDLElBQUksTUFBQSxHQUFPO0FBQUUsV0FBSyxXQUFXLFNBQVMsSUFBSSxLQUFBO0lBQUE7SUFFdEQsY0FBYTtBQUFFLGFBQU8sS0FBSztJQUFBO0lBRTNCLEtBQUssVUFBUztBQUNaLFVBQUcsS0FBSyxPQUFBLEdBQVM7QUFDZixhQUFLLGVBQWUsS0FBSyxXQUFXLGdCQUFnQixFQUFDLElBQUksS0FBSyxNQUFNLE1BQU0sVUFBQSxDQUFBO01BQUE7QUFFNUUsV0FBSyxlQUFlLENBQUMsV0FBVztBQUM5QixpQkFBUyxVQUFVLFdBQVU7UUFBQTtBQUM3QixtQkFBVyxTQUFTLEtBQUssV0FBVyxNQUFBLElBQVUsT0FBQTtNQUFBO0FBRWhELFdBQUssV0FBVyxTQUFTLE1BQU0sRUFBQyxTQUFTLE1BQUEsR0FBUSxNQUFNO0FBQ3JELGVBQU8sS0FBSyxRQUFRLEtBQUEsRUFDakIsUUFBUSxNQUFNLENBQUEsU0FBUTtBQUNyQixjQUFHLENBQUMsS0FBSyxZQUFBLEdBQWM7QUFDckIsaUJBQUssV0FBVyxpQkFBaUIsTUFBTSxLQUFLLE9BQU8sSUFBQSxDQUFBO1VBQUE7UUFBQSxDQUFBLEVBR3RELFFBQVEsU0FBUyxDQUFBLFNBQVEsQ0FBQyxLQUFLLFlBQUEsS0FBaUIsS0FBSyxZQUFZLElBQUEsQ0FBQSxFQUNqRSxRQUFRLFdBQVcsTUFBTSxDQUFDLEtBQUssWUFBQSxLQUFpQixLQUFLLFlBQVksRUFBQyxRQUFRLFVBQUEsQ0FBQSxDQUFBO01BQUEsQ0FBQTtJQUFBO0lBSWpGLFlBQVksTUFBSztBQUNmLFVBQUcsS0FBSyxXQUFXLGtCQUFrQixLQUFLLFdBQVcsU0FBUTtBQUMzRCxhQUFLLElBQUksU0FBUyxNQUFNLENBQUMsNERBQTRELElBQUEsQ0FBQTtBQUNyRixlQUFPLEtBQUssV0FBVyxFQUFDLElBQUksS0FBSyxLQUFBLENBQUE7TUFBQTtBQUVuQyxVQUFHLEtBQUssWUFBWSxLQUFLLGVBQWM7QUFDckMsYUFBSyxjQUFjO0FBQ25CLGFBQUssUUFBUSxNQUFBO01BQUE7QUFFZixVQUFHLEtBQUssVUFBUztBQUFFLGVBQU8sS0FBSyxXQUFXLEtBQUssUUFBQTtNQUFBO0FBQy9DLFVBQUcsS0FBSyxlQUFjO0FBQUUsZUFBTyxLQUFLLGVBQWUsS0FBSyxhQUFBO01BQUE7QUFDeEQsV0FBSyxJQUFJLFNBQVMsTUFBTSxDQUFDLGtCQUFrQixJQUFBLENBQUE7QUFDM0MsVUFBRyxLQUFLLFdBQVcsWUFBQSxHQUFjO0FBQUUsYUFBSyxXQUFXLGlCQUFpQixJQUFBO01BQUE7SUFBQTtJQUd0RSxRQUFRLFFBQU87QUFDYixVQUFHLEtBQUssWUFBQSxHQUFjO0FBQUU7TUFBQTtBQUN4QixVQUFHLEtBQUssV0FBVyxlQUFBLEtBQW9CLFdBQVcsU0FBUTtBQUN4RCxlQUFPLEtBQUssV0FBVyxpQkFBaUIsSUFBQTtNQUFBO0FBRTFDLFdBQUssbUJBQUE7QUFDTCxXQUFLLFdBQVcsa0JBQWtCLElBQUE7QUFFbEMsVUFBRyxTQUFTLGVBQWM7QUFBRSxpQkFBUyxjQUFjLEtBQUE7TUFBQTtBQUNuRCxVQUFHLEtBQUssV0FBVyxXQUFBLEdBQWE7QUFDOUIsYUFBSyxXQUFXLDRCQUFBO01BQUE7SUFBQTtJQUlwQixRQUFRLFFBQU87QUFDYixXQUFLLFFBQVEsTUFBQTtBQUNiLFVBQUcsS0FBSyxXQUFXLFlBQUEsR0FBYztBQUFFLGFBQUssSUFBSSxTQUFTLE1BQU0sQ0FBQyxnQkFBZ0IsTUFBQSxDQUFBO01BQUE7QUFDNUUsVUFBRyxDQUFDLEtBQUssV0FBVyxXQUFBLEdBQWE7QUFBRSxhQUFLLGFBQUE7TUFBQTtJQUFBO0lBRzFDLGVBQWM7QUFDWixVQUFHLEtBQUssT0FBQSxHQUFTO0FBQUUsb0JBQUksY0FBYyxRQUFRLDBCQUEwQixFQUFDLFFBQVEsRUFBQyxJQUFJLEtBQUssTUFBTSxNQUFNLFFBQUEsRUFBQSxDQUFBO01BQUE7QUFDdEcsV0FBSyxXQUFBO0FBQ0wsV0FBSyxvQkFBb0Isd0JBQXdCLGVBQUE7SUFBQTtJQUduRCxjQUFjLGNBQWMsT0FBTyxTQUFTLFVBQVUsV0FBVztJQUFBLEdBQUk7QUFDbkUsVUFBRyxDQUFDLEtBQUssWUFBQSxHQUFjO0FBQUU7TUFBQTtBQUV6QixVQUFJLENBQUMsS0FBSyxDQUFDLEVBQUEsR0FBSyxJQUFBLElBQVEsZUFBZSxhQUFBLElBQWlCLENBQUMsTUFBTSxDQUFBLEdBQUksQ0FBQSxDQUFBO0FBQ25FLFVBQUksZ0JBQWdCLFdBQVU7TUFBQTtBQUM5QixVQUFHLEtBQUssZ0JBQWlCLE1BQU8sR0FBRyxhQUFhLEtBQUssUUFBUSxnQkFBQSxDQUFBLE1BQXVCLE1BQU87QUFDekYsd0JBQWdCLEtBQUssV0FBVyxnQkFBZ0IsRUFBQyxNQUFNLFdBQVcsUUFBUSxHQUFBLENBQUE7TUFBQTtBQUc1RSxVQUFHLE9BQVEsUUFBUSxRQUFTLFVBQVM7QUFBRSxlQUFPLFFBQVE7TUFBQTtBQUN0RCxhQUNFLEtBQUssV0FBVyxTQUFTLE1BQU0sRUFBQyxTQUFTLEtBQUEsR0FBTyxNQUFNO0FBQ3BELGVBQU8sS0FBSyxRQUFRLEtBQUssT0FBTyxTQUFTLFlBQUEsRUFBYyxRQUFRLE1BQU0sQ0FBQSxTQUFRO0FBQzNFLGNBQUcsUUFBUSxNQUFLO0FBQUUsaUJBQUssU0FBUyxHQUFBO1VBQUE7QUFDaEMsY0FBSSxTQUFTLENBQUMsY0FBYztBQUMxQixnQkFBRyxLQUFLLFVBQVM7QUFBRSxtQkFBSyxXQUFXLEtBQUssUUFBQTtZQUFBO0FBQ3hDLGdCQUFHLEtBQUssWUFBVztBQUFFLG1CQUFLLFlBQVksS0FBSyxVQUFBO1lBQUE7QUFDM0MsZ0JBQUcsS0FBSyxlQUFjO0FBQUUsbUJBQUssZUFBZSxLQUFLLGFBQUE7WUFBQTtBQUNqRCwwQkFBQTtBQUNBLG9CQUFRLE1BQU0sU0FBQTtVQUFBO0FBRWhCLGNBQUcsS0FBSyxNQUFLO0FBQ1gsaUJBQUssV0FBVyxpQkFBaUIsTUFBTTtBQUNyQyxrQkFBSSxZQUFZLEtBQUssVUFBVSxVQUFVLEtBQUssTUFBTSxDQUFDLEVBQUMsTUFBTSxPQUFBLE1BQVk7QUFDdEUscUJBQUssT0FBTyxNQUFNLE1BQUE7Y0FBQSxDQUFBO0FBRXBCLHFCQUFPLFNBQUE7WUFBQSxDQUFBO1VBQUEsT0FFSjtBQUNMLG1CQUFPLElBQUE7VUFBQTtRQUFBLENBQUE7TUFBQSxDQUFBO0lBQUE7SUFPakIsU0FBUyxLQUFJO0FBQ1gsa0JBQUksSUFBSSxVQUFVLElBQUksZ0JBQWdCLEtBQUssUUFBUSxZQUFZLFNBQVMsQ0FBQSxPQUFNO0FBQzVFLFlBQUksY0FBYyxHQUFHLGFBQWEsWUFBQTtBQUVsQyxXQUFHLGdCQUFnQixPQUFBO0FBQ25CLFdBQUcsZ0JBQWdCLFdBQUE7QUFFbkIsWUFBRyxHQUFHLGFBQWEsWUFBQSxNQUFrQixNQUFLO0FBQ3hDLGFBQUcsV0FBVztBQUNkLGFBQUcsZ0JBQWdCLFlBQUE7UUFBQTtBQUVyQixZQUFHLGdCQUFnQixNQUFLO0FBQ3RCLGFBQUcsV0FBVyxnQkFBZ0IsU0FBUyxPQUFPO0FBQzlDLGFBQUcsZ0JBQWdCLFlBQUE7UUFBQTtBQUdyQiwwQkFBa0IsUUFBUSxDQUFBLGNBQWEsWUFBSSxZQUFZLElBQUksU0FBQSxDQUFBO0FBRTNELFlBQUksaUJBQWlCLEdBQUcsYUFBYSx3QkFBQTtBQUNyQyxZQUFHLG1CQUFtQixNQUFLO0FBQ3pCLGFBQUcsWUFBWTtBQUNmLGFBQUcsZ0JBQWdCLHdCQUFBO1FBQUE7QUFFckIsWUFBSSxPQUFPLFlBQUksUUFBUSxJQUFJLE9BQUE7QUFDM0IsWUFBRyxNQUFLO0FBQ04sY0FBSSxPQUFPLEtBQUssd0JBQXdCLElBQUksSUFBQTtBQUM1QyxtQkFBUyxRQUFRLElBQUksTUFBTSxLQUFLLFdBQVcsaUJBQUEsQ0FBQTtBQUMzQyxjQUFHLE1BQUs7QUFBRSxpQkFBSyxVQUFBO1VBQUE7QUFDZixzQkFBSSxjQUFjLElBQUksT0FBQTtRQUFBO01BQUEsQ0FBQTtJQUFBO0lBSzVCLE9BQU8sVUFBVSxPQUFPLE9BQU8sQ0FBQSxHQUFHO0FBQ2hDLFVBQUksU0FBUyxLQUFLO0FBQ2xCLFVBQUksY0FBYyxLQUFLLFFBQVEsZ0JBQUE7QUFDL0IsVUFBRyxLQUFLLFNBQVE7QUFBRSxtQkFBVyxTQUFTLE9BQU8sWUFBSSxJQUFJLFVBQVUsS0FBSyxPQUFBLENBQUE7TUFBQTtBQUVwRSxlQUFTLFFBQVEsQ0FBQSxPQUFNO0FBQ3JCLFdBQUcsVUFBVSxJQUFJLE9BQU8sZUFBQTtBQUN4QixXQUFHLGFBQWEsU0FBUyxNQUFBO0FBQ3pCLFdBQUcsYUFBYSxhQUFhLEtBQUssR0FBRyxFQUFBO0FBQ3JDLFlBQUksY0FBYyxHQUFHLGFBQWEsV0FBQTtBQUNsQyxZQUFHLGdCQUFnQixNQUFLO0FBQ3RCLGNBQUcsQ0FBQyxHQUFHLGFBQWEsd0JBQUEsR0FBMEI7QUFDNUMsZUFBRyxhQUFhLDBCQUEwQixHQUFHLFNBQUE7VUFBQTtBQUUvQyxjQUFHLGdCQUFnQixJQUFHO0FBQUUsZUFBRyxZQUFZO1VBQUE7QUFDdkMsYUFBRyxhQUFhLFlBQVksRUFBQTtRQUFBO01BQUEsQ0FBQTtBQUdoQyxhQUFPLENBQUMsUUFBUSxVQUFVLElBQUE7SUFBQTtJQUc1QixZQUFZLElBQUc7QUFDYixVQUFJLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxhQUFhLGFBQUE7QUFDN0MsYUFBTyxNQUFNLFNBQVMsR0FBQSxJQUFPO0lBQUE7SUFHL0Isa0JBQWtCLFFBQVEsV0FBVyxPQUFPLENBQUEsR0FBRztBQUM3QyxVQUFHLE1BQU0sU0FBQSxHQUFXO0FBQUUsZUFBTztNQUFBO0FBRTdCLFVBQUksZ0JBQWdCLE9BQU8sYUFBYSxLQUFLLFFBQVEsUUFBQSxDQUFBO0FBQ3JELFVBQUcsTUFBTSxhQUFBLEdBQWU7QUFDdEIsZUFBTyxTQUFTLGFBQUE7TUFBQSxXQUNSLGNBQWMsa0JBQWtCLFFBQVEsS0FBSyxTQUFRO0FBQzdELGVBQU8sS0FBSyxtQkFBbUIsU0FBQTtNQUFBLE9BQzFCO0FBQ0wsZUFBTztNQUFBO0lBQUE7SUFJWCxtQkFBbUIsV0FBVTtBQUMzQixVQUFHLE1BQU0sU0FBQSxHQUFXO0FBQ2xCLGVBQU87TUFBQSxXQUNDLFdBQVU7QUFDbEIsZUFBTyxNQUFNLFVBQVUsUUFBUSxJQUFJLGdCQUFBLEdBQW1CLENBQUEsT0FBTSxLQUFLLFlBQVksRUFBQSxLQUFPLEtBQUssWUFBWSxFQUFBLENBQUE7TUFBQSxPQUNoRztBQUNMLGVBQU87TUFBQTtJQUFBO0lBSVgsY0FBYyxXQUFXLE9BQU8sU0FBUyxTQUFRO0FBQy9DLFVBQUcsQ0FBQyxLQUFLLFlBQUEsR0FBYztBQUNyQixhQUFLLElBQUksUUFBUSxNQUFNLENBQUMscURBQXFELE9BQU8sT0FBQSxDQUFBO0FBQ3BGLGVBQU87TUFBQTtBQUVULFVBQUksQ0FBQyxLQUFLLEtBQUssSUFBQSxJQUFRLEtBQUssT0FBTyxDQUFBLEdBQUksTUFBQTtBQUN2QyxXQUFLLGNBQWMsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFBLEdBQU8sU0FBUztRQUNsRCxNQUFNO1FBQ047UUFDQSxPQUFPO1FBQ1AsS0FBSyxLQUFLLG1CQUFtQixTQUFBO01BQUEsR0FDNUIsQ0FBQyxNQUFNLFVBQVUsUUFBUSxPQUFPLEdBQUEsQ0FBQTtBQUVuQyxhQUFPO0lBQUE7SUFHVCxZQUFZLElBQUksTUFBTSxPQUFNO0FBQzFCLFVBQUksU0FBUyxLQUFLLFFBQVEsUUFBQTtBQUMxQixlQUFRLElBQUksR0FBRyxJQUFJLEdBQUcsV0FBVyxRQUFRLEtBQUk7QUFDM0MsWUFBRyxDQUFDLE1BQUs7QUFBRSxpQkFBTyxDQUFBO1FBQUE7QUFDbEIsWUFBSSxPQUFPLEdBQUcsV0FBVyxHQUFHO0FBQzVCLFlBQUcsS0FBSyxXQUFXLE1BQUEsR0FBUTtBQUFFLGVBQUssS0FBSyxRQUFRLFFBQVEsRUFBQSxLQUFPLEdBQUcsYUFBYSxJQUFBO1FBQUE7TUFBQTtBQUVoRixVQUFHLEdBQUcsVUFBVSxRQUFVO0FBQ3hCLFlBQUcsQ0FBQyxNQUFLO0FBQUUsaUJBQU8sQ0FBQTtRQUFBO0FBQ2xCLGFBQUssUUFBUSxHQUFHO0FBRWhCLFlBQUcsR0FBRyxZQUFZLFdBQVcsaUJBQWlCLFFBQVEsR0FBRyxJQUFBLEtBQVMsS0FBSyxDQUFDLEdBQUcsU0FBUTtBQUNqRixpQkFBTyxLQUFLO1FBQUE7TUFBQTtBQUdoQixVQUFHLE9BQU07QUFDUCxZQUFHLENBQUMsTUFBSztBQUFFLGlCQUFPLENBQUE7UUFBQTtBQUNsQixpQkFBUSxPQUFPLE9BQU07QUFBRSxlQUFLLE9BQU8sTUFBTTtRQUFBO01BQUE7QUFFM0MsYUFBTztJQUFBO0lBR1QsVUFBVSxNQUFNLElBQUksV0FBVyxVQUFVLE1BQU0sT0FBTyxDQUFBLEdBQUc7QUFDdkQsV0FBSyxjQUFjLE1BQU0sS0FBSyxPQUFPLENBQUMsRUFBQSxHQUFLLE1BQU0sSUFBQSxHQUFPLFNBQVM7UUFDL0Q7UUFDQSxPQUFPO1FBQ1AsT0FBTyxLQUFLLFlBQVksSUFBSSxNQUFNLEtBQUssS0FBQTtRQUN2QyxLQUFLLEtBQUssa0JBQWtCLElBQUksV0FBVyxJQUFBO01BQUEsQ0FBQTtJQUFBO0lBSS9DLGlCQUFpQixRQUFRLFVBQVUsVUFBVSxVQUFVLFdBQVc7SUFBQSxHQUFJO0FBQ3BFLFdBQUssV0FBVyxhQUFhLE9BQU8sTUFBTSxDQUFDLE1BQU0sY0FBYztBQUM3RCxhQUFLLGNBQWMsTUFBTSxZQUFZO1VBQ25DLE9BQU8sT0FBTyxhQUFhLEtBQUssUUFBUSxZQUFBLENBQUE7VUFDeEMsS0FBSyxPQUFPLGFBQWEsY0FBQTtVQUN6QixXQUFXO1VBQ1g7VUFDQSxLQUFLLEtBQUssa0JBQWtCLE9BQU8sTUFBTSxTQUFBO1FBQUEsR0FDeEMsT0FBQTtNQUFBLENBQUE7SUFBQTtJQUlQLFVBQVUsU0FBUyxXQUFXLFVBQVUsVUFBVSxNQUFNLFVBQVM7QUFDL0QsVUFBSTtBQUNKLFVBQUksTUFBTSxNQUFNLFFBQUEsSUFBWSxXQUFXLEtBQUssa0JBQWtCLFFBQVEsTUFBTSxTQUFBO0FBQzVFLFVBQUksZUFBZSxNQUFNLEtBQUssT0FBTyxDQUFDLFNBQVMsUUFBUSxJQUFBLEdBQU8sVUFBVSxJQUFBO0FBQ3hFLFVBQUk7QUFDSixVQUFHLFFBQVEsYUFBYSxLQUFLLFFBQVEsUUFBQSxDQUFBLEdBQVc7QUFDOUMsbUJBQVcsY0FBYyxRQUFRLE1BQU0sRUFBQyxTQUFTLEtBQUssUUFBQSxHQUFVLENBQUMsUUFBUSxJQUFBLENBQUE7TUFBQSxPQUNwRTtBQUNMLG1CQUFXLGNBQWMsUUFBUSxNQUFNLEVBQUMsU0FBUyxLQUFLLFFBQUEsQ0FBQTtNQUFBO0FBRXhELFVBQUcsWUFBSSxjQUFjLE9BQUEsS0FBWSxRQUFRLFNBQVMsUUFBUSxNQUFNLFNBQVMsR0FBRTtBQUN6RSxxQkFBYSxXQUFXLFNBQVMsTUFBTSxLQUFLLFFBQVEsS0FBQSxDQUFBO01BQUE7QUFFdEQsZ0JBQVUsYUFBYSxpQkFBaUIsT0FBQTtBQUN4QyxVQUFJLFFBQVE7UUFDVixNQUFNO1FBQ04sT0FBTztRQUNQLE9BQU87UUFDUDtRQUNBO01BQUE7QUFFRixXQUFLLGNBQWMsY0FBYyxTQUFTLE9BQU8sQ0FBQSxTQUFRO0FBQ3ZELG9CQUFJLFVBQVUsU0FBUyxLQUFLLFdBQVcsUUFBUSxnQkFBQSxDQUFBO0FBQy9DLFlBQUcsWUFBSSxjQUFjLE9BQUEsS0FBWSxRQUFRLGFBQWEsc0JBQUEsTUFBNEIsTUFBSztBQUNyRixjQUFHLGFBQWEsdUJBQXVCLE9BQUEsRUFBUyxTQUFTLEdBQUU7QUFDekQsZ0JBQUksQ0FBQyxLQUFLLElBQUEsSUFBUSxhQUFBO0FBQ2xCLGlCQUFLLFlBQVksUUFBUSxNQUFNLFdBQVcsS0FBSyxLQUFLLENBQUMsYUFBYTtBQUNoRSwwQkFBWSxTQUFTLElBQUE7QUFDckIsbUJBQUssc0JBQXNCLFFBQVEsSUFBQTtZQUFBLENBQUE7VUFBQTtRQUFBLE9BR2xDO0FBQ0wsc0JBQVksU0FBUyxJQUFBO1FBQUE7TUFBQSxDQUFBO0lBQUE7SUFLM0Isc0JBQXNCLFFBQU87QUFDM0IsVUFBSSxpQkFBaUIsS0FBSyxtQkFBbUIsTUFBQTtBQUM3QyxVQUFHLGdCQUFlO0FBQ2hCLFlBQUksQ0FBQyxLQUFLLE1BQU0sT0FBTyxRQUFBLElBQVk7QUFDbkMsYUFBSyxhQUFhLE1BQUE7QUFDbEIsaUJBQUE7TUFBQTtJQUFBO0lBSUosbUJBQW1CLFFBQU87QUFDeEIsYUFBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLE9BQU8sU0FBQSxNQUFlLEdBQUcsV0FBVyxNQUFBLENBQUE7SUFBQTtJQUcvRSxlQUFlLFFBQVEsS0FBSyxNQUFNLFVBQVM7QUFDekMsVUFBRyxLQUFLLG1CQUFtQixNQUFBLEdBQVE7QUFBRSxlQUFPO01BQUE7QUFDNUMsV0FBSyxZQUFZLEtBQUssQ0FBQyxRQUFRLEtBQUssTUFBTSxRQUFBLENBQUE7SUFBQTtJQUc1QyxhQUFhLFFBQU87QUFDbEIsV0FBSyxjQUFjLEtBQUssWUFBWSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBQSxNQUFlO0FBQ25FLFlBQUcsR0FBRyxXQUFXLE1BQUEsR0FBUTtBQUN2QixlQUFLLFNBQVMsR0FBQTtBQUNkLGlCQUFPO1FBQUEsT0FDRjtBQUNMLGlCQUFPO1FBQUE7TUFBQSxDQUFBO0lBQUE7SUFLYixlQUFlLFFBQVEsV0FBVyxVQUFVLE1BQU0sU0FBUTtBQUN4RCxVQUFJLGdCQUFnQixDQUFBLE9BQU07QUFDeEIsWUFBSSxjQUFjLGtCQUFrQixJQUFJLEdBQUcsS0FBSyxRQUFRLFVBQUEsWUFBc0IsR0FBRyxJQUFBO0FBQ2pGLGVBQU8sRUFBRSxlQUFlLGtCQUFrQixJQUFJLDBCQUEwQixHQUFHLElBQUE7TUFBQTtBQUU3RSxVQUFJLGlCQUFpQixDQUFBLE9BQU07QUFDekIsZUFBTyxHQUFHLGFBQWEsS0FBSyxRQUFRLGdCQUFBLENBQUE7TUFBQTtBQUV0QyxVQUFJLGVBQWUsQ0FBQSxPQUFNLEdBQUcsV0FBVztBQUV2QyxVQUFJLGNBQWMsQ0FBQSxPQUFNLENBQUMsU0FBUyxZQUFZLFFBQUEsRUFBVSxTQUFTLEdBQUcsT0FBQTtBQUVwRSxVQUFJLGVBQWUsTUFBTTtBQUN2QixZQUFJLGVBQWUsTUFBTSxLQUFLLE9BQU8sUUFBQTtBQUNyQyxZQUFJLFdBQVcsYUFBYSxPQUFPLGNBQUE7QUFDbkMsWUFBSSxVQUFVLGFBQWEsT0FBTyxZQUFBLEVBQWMsT0FBTyxhQUFBO0FBQ3ZELFlBQUksU0FBUyxhQUFhLE9BQU8sV0FBQSxFQUFhLE9BQU8sYUFBQTtBQUVyRCxnQkFBUSxRQUFRLENBQUEsV0FBVTtBQUN4QixpQkFBTyxhQUFhLGNBQWMsT0FBTyxRQUFBO0FBQ3pDLGlCQUFPLFdBQVc7UUFBQSxDQUFBO0FBRXBCLGVBQU8sUUFBUSxDQUFBLFVBQVM7QUFDdEIsZ0JBQU0sYUFBYSxjQUFjLE1BQU0sUUFBQTtBQUN2QyxnQkFBTSxXQUFXO0FBQ2pCLGNBQUcsTUFBTSxPQUFNO0FBQ2Isa0JBQU0sYUFBYSxjQUFjLE1BQU0sUUFBQTtBQUN2QyxrQkFBTSxXQUFXO1VBQUE7UUFBQSxDQUFBO0FBR3JCLGVBQU8sYUFBYSxLQUFLLFFBQVEsZ0JBQUEsR0FBbUIsRUFBQTtBQUNwRCxlQUFPLEtBQUssT0FBTyxDQUFDLE1BQUEsRUFBUSxPQUFPLFFBQUEsRUFBVSxPQUFPLE9BQUEsRUFBUyxPQUFPLE1BQUEsR0FBUyxVQUFVLElBQUE7TUFBQTtBQUd6RixVQUFJLE1BQU0sS0FBSyxrQkFBa0IsUUFBUSxTQUFBO0FBQ3pDLFVBQUcsYUFBYSxxQkFBcUIsTUFBQSxHQUFRO0FBQzNDLFlBQUksQ0FBQyxLQUFLLElBQUEsSUFBUSxhQUFBO0FBQ2xCLFlBQUksT0FBTyxNQUFNLEtBQUssZUFBZSxRQUFRLFdBQVcsVUFBVSxNQUFNLE9BQUE7QUFDeEUsZUFBTyxLQUFLLGVBQWUsUUFBUSxLQUFLLE1BQU0sSUFBQTtNQUFBLFdBQ3RDLGFBQWEsd0JBQXdCLE1BQUEsRUFBUSxTQUFTLEdBQUU7QUFDaEUsWUFBSSxDQUFDLEtBQUssR0FBQSxJQUFPLGFBQUE7QUFDakIsWUFBSSxjQUFjLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBQTtBQUNuQyxhQUFLLFlBQVksUUFBUSxXQUFXLEtBQUssS0FBSyxDQUFDLGFBQWE7QUFDMUQsY0FBSSxXQUFXLGNBQWMsUUFBUSxDQUFBLENBQUE7QUFDckMsZUFBSyxjQUFjLGFBQWEsU0FBUztZQUN2QyxNQUFNO1lBQ04sT0FBTztZQUNQLE9BQU87WUFDUDtVQUFBLEdBQ0MsT0FBQTtRQUFBLENBQUE7TUFBQSxPQUVBO0FBQ0wsWUFBSSxXQUFXLGNBQWMsUUFBUSxDQUFBLENBQUE7QUFDckMsYUFBSyxjQUFjLGNBQWMsU0FBUztVQUN4QyxNQUFNO1VBQ04sT0FBTztVQUNQLE9BQU87VUFDUDtRQUFBLEdBQ0MsT0FBQTtNQUFBO0lBQUE7SUFJUCxZQUFZLFFBQVEsV0FBVyxLQUFLLEtBQUssWUFBVztBQUNsRCxVQUFJLG9CQUFvQixLQUFLO0FBQzdCLFVBQUksV0FBVyxhQUFhLGlCQUFpQixNQUFBO0FBQzdDLFVBQUksMEJBQTBCLFNBQVM7QUFHdkMsZUFBUyxRQUFRLENBQUEsWUFBVztBQUMxQixZQUFJLFdBQVcsSUFBSSxhQUFhLFNBQVMsTUFBTSxNQUFNO0FBQ25EO0FBQ0EsY0FBRyw0QkFBNEIsR0FBRTtBQUFFLHVCQUFBO1VBQUE7UUFBQSxDQUFBO0FBR3JDLGFBQUssVUFBVSxXQUFXO0FBQzFCLFlBQUksVUFBVSxTQUFTLFFBQUEsRUFBVSxJQUFJLENBQUEsVUFBUyxNQUFNLG1CQUFBLENBQUE7QUFFcEQsWUFBSSxVQUFVO1VBQ1osS0FBSyxRQUFRLGFBQWEsY0FBQTtVQUMxQjtVQUNBLEtBQUssS0FBSyxrQkFBa0IsUUFBUSxNQUFNLFNBQUE7UUFBQTtBQUc1QyxhQUFLLElBQUksVUFBVSxNQUFNLENBQUMsNkJBQTZCLE9BQUEsQ0FBQTtBQUV2RCxhQUFLLGNBQWMsTUFBTSxnQkFBZ0IsU0FBUyxDQUFBLFNBQVE7QUFDeEQsZUFBSyxJQUFJLFVBQVUsTUFBTSxDQUFDLDBCQUEwQixJQUFBLENBQUE7QUFDcEQsY0FBRyxLQUFLLE9BQU07QUFDWixpQkFBSyxTQUFTLEdBQUE7QUFDZCxnQkFBSSxDQUFDLFdBQVcsTUFBQSxJQUFVLEtBQUs7QUFDL0IsaUJBQUssSUFBSSxVQUFVLE1BQU0sQ0FBQyxtQkFBbUIsYUFBYSxNQUFBLENBQUE7VUFBQSxPQUNyRDtBQUNMLGdCQUFJLFVBQVUsQ0FBQyxhQUFhO0FBQzFCLG1CQUFLLFFBQVEsUUFBUSxNQUFNO0FBQ3pCLG9CQUFHLEtBQUssY0FBYyxtQkFBa0I7QUFBRSwyQkFBQTtnQkFBQTtjQUFBLENBQUE7WUFBQTtBQUc5QyxxQkFBUyxrQkFBa0IsTUFBTSxTQUFTLEtBQUssVUFBQTtVQUFBO1FBQUEsQ0FBQTtNQUFBLENBQUE7SUFBQTtJQU12RCxnQkFBZ0IsTUFBTSxjQUFhO0FBQ2pDLFVBQUksU0FBUyxZQUFJLGlCQUFpQixLQUFLLEVBQUEsRUFBSSxPQUFPLENBQUEsT0FBTSxHQUFHLFNBQVMsSUFBQTtBQUNwRSxVQUFHLE9BQU8sV0FBVyxHQUFFO0FBQUUsaUJBQVMsZ0RBQWdELE9BQUE7TUFBQSxXQUMxRSxPQUFPLFNBQVMsR0FBRTtBQUFFLGlCQUFTLHVEQUF1RCxPQUFBO01BQUEsT0FDdkY7QUFBRSxvQkFBSSxjQUFjLE9BQU8sSUFBSSxtQkFBbUIsRUFBQyxRQUFRLEVBQUMsT0FBTyxhQUFBLEVBQUEsQ0FBQTtNQUFBO0lBQUE7SUFHMUUsaUJBQWlCLE1BQU0sUUFBUSxVQUFTO0FBQ3RDLFdBQUssV0FBVyxhQUFhLE1BQU0sQ0FBQyxNQUFNLGNBQWM7QUFDdEQsWUFBSSxRQUFRLEtBQUssU0FBUztBQUMxQixZQUFJLFdBQVcsS0FBSyxhQUFhLEtBQUssUUFBUSxnQkFBQSxDQUFBLEtBQXNCLEtBQUssYUFBYSxLQUFLLFFBQVEsUUFBQSxDQUFBO0FBRW5HLG1CQUFHLEtBQUssVUFBVSxVQUFVLE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBQyxTQUFTLE1BQU0sTUFBTSxRQUFnQixTQUFBLENBQUEsQ0FBQTtNQUFBLENBQUE7SUFBQTtJQUk1RixjQUFjLE1BQU0sVUFBVSxVQUFTO0FBQ3JDLFVBQUksVUFBVSxLQUFLLFdBQVcsZUFBZSxJQUFBO0FBQzdDLFVBQUksU0FBUyxXQUFXLE1BQU0sS0FBSyxPQUFPLENBQUMsUUFBQSxHQUFXLE9BQUEsSUFBVztBQUNqRSxVQUFJLFdBQVcsTUFBTSxLQUFLLFdBQVcsU0FBUyxPQUFPLFNBQVMsSUFBQTtBQUU5RCxVQUFJLE9BQU8sS0FBSyxjQUFjLFFBQVEsY0FBYyxFQUFDLEtBQUssS0FBQSxHQUFPLENBQUEsU0FBUTtBQUN2RSxhQUFLLFdBQVcsaUJBQWlCLE1BQU07QUFDckMsY0FBRyxLQUFLLGVBQWM7QUFDcEIsaUJBQUssV0FBVyxZQUFZLE1BQU0sTUFBTSxVQUFVLE9BQUE7VUFBQSxPQUM3QztBQUNMLGdCQUFHLEtBQUssV0FBVyxrQkFBa0IsT0FBQSxHQUFTO0FBQzVDLG1CQUFLLE9BQU87WUFBQTtBQUVkLGlCQUFLLG9CQUFBO0FBQ0wsd0JBQVksU0FBUyxPQUFBO1VBQUE7UUFBQSxDQUFBO01BQUEsQ0FBQTtBQUszQixVQUFHLE1BQUs7QUFDTixhQUFLLFFBQVEsV0FBVyxRQUFBO01BQUEsT0FDbkI7QUFDTCxpQkFBQTtNQUFBO0lBQUE7SUFJSixpQkFBaUIsTUFBSztBQUNwQixVQUFHLEtBQUssY0FBYyxHQUFFO0FBQUUsZUFBTyxDQUFBO01BQUE7QUFFakMsVUFBSSxZQUFZLEtBQUssUUFBUSxRQUFBO0FBQzdCLFVBQUksV0FBVyxTQUFTLGNBQWMsVUFBQTtBQUN0QyxlQUFTLFlBQVk7QUFFckIsYUFDRSxZQUFJLElBQUksS0FBSyxJQUFJLFFBQVEsWUFBQSxFQUN0QixPQUFPLENBQUEsU0FBUSxLQUFLLE1BQU0sS0FBSyxZQUFZLElBQUEsQ0FBQSxFQUMzQyxPQUFPLENBQUEsU0FBUSxLQUFLLFNBQVMsU0FBUyxDQUFBLEVBQ3RDLE9BQU8sQ0FBQSxTQUFRLEtBQUssYUFBYSxLQUFLLFFBQVEsZ0JBQUEsQ0FBQSxNQUF1QixRQUFBLEVBQ3JFLElBQUksQ0FBQSxTQUFRO0FBQ1gsWUFBSSxVQUFVLFNBQVMsUUFBUSxjQUFjLFlBQVksS0FBSyxRQUFRLGNBQWMsS0FBSyxhQUFhLFNBQUEsS0FBQTtBQUN0RyxZQUFHLFNBQVE7QUFDVCxpQkFBTyxDQUFDLE1BQU0sU0FBUyxLQUFLLGtCQUFrQixPQUFBLENBQUE7UUFBQSxPQUN6QztBQUNMLGlCQUFPLENBQUMsTUFBTSxNQUFNLElBQUE7UUFBQTtNQUFBLENBQUEsRUFHdkIsT0FBTyxDQUFDLENBQUMsTUFBTSxTQUFTLE1BQUEsTUFBWSxPQUFBO0lBQUE7SUFJM0MsNkJBQTZCLGVBQWM7QUFDekMsVUFBSSxrQkFBa0IsY0FBYyxPQUFPLENBQUEsUUFBTztBQUNoRCxlQUFPLFlBQUksc0JBQXNCLEtBQUssSUFBSSxHQUFBLEVBQUssV0FBVztNQUFBLENBQUE7QUFFNUQsVUFBRyxnQkFBZ0IsU0FBUyxHQUFFO0FBQzVCLGFBQUssWUFBWSxLQUFLLEdBQUcsZUFBQTtBQUV6QixhQUFLLGNBQWMsTUFBTSxxQkFBcUIsRUFBQyxNQUFNLGdCQUFBLEdBQWtCLE1BQU07QUFHM0UsZUFBSyxjQUFjLEtBQUssWUFBWSxPQUFPLENBQUEsUUFBTyxnQkFBZ0IsUUFBUSxHQUFBLE1BQVMsRUFBQTtBQUluRixjQUFJLHdCQUF3QixnQkFBZ0IsT0FBTyxDQUFBLFFBQU87QUFDeEQsbUJBQU8sWUFBSSxzQkFBc0IsS0FBSyxJQUFJLEdBQUEsRUFBSyxXQUFXO1VBQUEsQ0FBQTtBQUc1RCxjQUFHLHNCQUFzQixTQUFTLEdBQUU7QUFDbEMsaUJBQUssY0FBYyxNQUFNLGtCQUFrQixFQUFDLE1BQU0sc0JBQUEsR0FBd0IsQ0FBQyxTQUFTO0FBQ2xGLG1CQUFLLFNBQVMsVUFBVSxLQUFLLElBQUE7WUFBQSxDQUFBO1VBQUE7UUFBQSxDQUFBO01BQUE7SUFBQTtJQU92QyxZQUFZLElBQUc7QUFDYixhQUFPLEdBQUcsYUFBYSxhQUFBLE1BQW1CLEtBQUssTUFDN0MsTUFBTSxHQUFHLFFBQVEsaUJBQUEsR0FBb0IsQ0FBQSxTQUFRLEtBQUssRUFBQSxNQUFRLEtBQUs7SUFBQTtJQUduRSxXQUFXLE1BQU0sV0FBVyxVQUFVLE9BQU8sQ0FBQSxHQUFHO0FBQzlDLGtCQUFJLFdBQVcsTUFBTSxtQkFBbUIsSUFBQTtBQUN4QyxVQUFJLGNBQWMsS0FBSyxXQUFXLFFBQVEsZ0JBQUE7QUFDMUMsVUFBSSxTQUFTLE1BQU0sS0FBSyxLQUFLLFFBQUE7QUFDN0IsV0FBSyxXQUFXLGtCQUFrQixJQUFBO0FBQ2xDLFdBQUssZUFBZSxNQUFNLFdBQVcsVUFBVSxNQUFNLE1BQU07QUFDekQsZUFBTyxRQUFRLENBQUEsVUFBUyxZQUFJLFVBQVUsT0FBTyxXQUFBLENBQUE7QUFDN0MsYUFBSyxXQUFXLDZCQUFBO01BQUEsQ0FBQTtJQUFBO0lBSXBCLFFBQVEsTUFBSztBQUFFLGFBQU8sS0FBSyxXQUFXLFFBQVEsSUFBQTtJQUFBO0VBQUE7QUN6OUJoRCxNQUFBLGFBQUEsTUFBZ0M7SUFDOUIsWUFBWSxLQUFLLFdBQVcsT0FBTyxDQUFBLEdBQUc7QUFDcEMsV0FBSyxXQUFXO0FBQ2hCLFVBQUcsQ0FBQyxhQUFhLFVBQVUsWUFBWSxTQUFTLFVBQVM7QUFDdkQsY0FBTSxJQUFJLE1BQU07Ozs7OztPQUFBO01BQUE7QUFRbEIsV0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLElBQUE7QUFDakMsV0FBSyxnQkFBZ0IsS0FBSyxpQkFBaUI7QUFDM0MsV0FBSyxPQUFPO0FBQ1osV0FBSyxTQUFTQyxTQUFRLEtBQUssVUFBVSxDQUFBLENBQUE7QUFDckMsV0FBSyxhQUFhLEtBQUs7QUFDdkIsV0FBSyxvQkFBb0IsS0FBSyxZQUFZLENBQUE7QUFDMUMsV0FBSyxXQUFXLE9BQU8sT0FBTyxNQUFNLFFBQUEsR0FBVyxLQUFLLFlBQVksQ0FBQSxDQUFBO0FBQ2hFLFdBQUssZ0JBQWdCO0FBQ3JCLFdBQUssYUFBYTtBQUNsQixXQUFLLFdBQVc7QUFDaEIsV0FBSyxPQUFPO0FBQ1osV0FBSyxpQkFBaUI7QUFDdEIsV0FBSyx1QkFBdUI7QUFDNUIsV0FBSyxVQUFVO0FBQ2YsV0FBSyxRQUFRLENBQUE7QUFDYixXQUFLLE9BQU8sT0FBTyxTQUFTO0FBQzVCLFdBQUssY0FBYztBQUNuQixXQUFLLGtCQUFrQixNQUFNLE9BQU8sUUFBQTtBQUNwQyxXQUFLLFFBQVEsS0FBSyxTQUFTLENBQUE7QUFDM0IsV0FBSyxZQUFZLEtBQUssYUFBYSxDQUFBO0FBQ25DLFdBQUssZ0JBQWdCLEtBQUssaUJBQWlCO0FBQzNDLFdBQUssd0JBQXdCO0FBQzdCLFdBQUssYUFBYSxLQUFLLGNBQWM7QUFDckMsV0FBSyxrQkFBa0IsS0FBSyxtQkFBbUI7QUFDL0MsV0FBSyxrQkFBa0IsS0FBSyxtQkFBbUI7QUFDL0MsV0FBSyxpQkFBaUIsS0FBSyxrQkFBa0I7QUFDN0MsV0FBSyxlQUFlLEtBQUssZ0JBQWdCLE9BQU87QUFDaEQsV0FBSyxpQkFBaUIsS0FBSyxrQkFBa0IsT0FBTztBQUNwRCxXQUFLLHNCQUFzQjtBQUMzQixXQUFLLGVBQWUsT0FBTyxPQUFPLEVBQUMsYUFBYUEsU0FBQSxHQUFXLG1CQUFtQkEsU0FBQSxFQUFBLEdBQVksS0FBSyxPQUFPLENBQUEsQ0FBQTtBQUN0RyxXQUFLLGNBQWMsSUFBSSxjQUFBO0FBQ3ZCLGFBQU8saUJBQWlCLFlBQVksQ0FBQSxPQUFNO0FBQ3hDLGFBQUssV0FBVztNQUFBLENBQUE7QUFFbEIsV0FBSyxPQUFPLE9BQU8sTUFBTTtBQUN2QixZQUFHLEtBQUssV0FBQSxHQUFhO0FBRW5CLGlCQUFPLFNBQVMsT0FBQTtRQUFBO01BQUEsQ0FBQTtJQUFBO0lBT3RCLG1CQUFrQjtBQUFFLGFBQU8sS0FBSyxlQUFlLFFBQVEsY0FBQSxNQUFvQjtJQUFBO0lBRTNFLGlCQUFnQjtBQUFFLGFBQU8sS0FBSyxlQUFlLFFBQVEsWUFBQSxNQUFrQjtJQUFBO0lBRXZFLGtCQUFpQjtBQUFFLGFBQU8sS0FBSyxlQUFlLFFBQVEsWUFBQSxNQUFrQjtJQUFBO0lBRXhFLGNBQWE7QUFBRSxXQUFLLGVBQWUsUUFBUSxjQUFjLE1BQUE7SUFBQTtJQUV6RCxrQkFBaUI7QUFBRSxXQUFLLGVBQWUsUUFBUSxnQkFBZ0IsTUFBQTtJQUFBO0lBRS9ELGVBQWM7QUFBRSxXQUFLLGVBQWUsUUFBUSxjQUFjLE9BQUE7SUFBQTtJQUUxRCxtQkFBa0I7QUFBRSxXQUFLLGVBQWUsV0FBVyxjQUFBO0lBQUE7SUFFbkQsaUJBQWlCLGNBQWE7QUFDNUIsV0FBSyxZQUFBO0FBQ0wsY0FBUSxJQUFJLHlHQUFBO0FBQ1osV0FBSyxlQUFlLFFBQVEsb0JBQW9CLFlBQUE7SUFBQTtJQUdsRCxvQkFBbUI7QUFBRSxXQUFLLGVBQWUsV0FBVyxrQkFBQTtJQUFBO0lBRXBELGdCQUFlO0FBQ2IsVUFBSSxNQUFNLEtBQUssZUFBZSxRQUFRLGtCQUFBO0FBQ3RDLGFBQU8sTUFBTSxTQUFTLEdBQUEsSUFBTztJQUFBO0lBRy9CLFlBQVc7QUFBRSxhQUFPLEtBQUs7SUFBQTtJQUV6QixVQUFTO0FBRVAsVUFBRyxPQUFPLFNBQVMsYUFBYSxlQUFlLENBQUMsS0FBSyxnQkFBQSxHQUFrQjtBQUFFLGFBQUssWUFBQTtNQUFBO0FBQzlFLFVBQUksWUFBWSxNQUFNO0FBQ3BCLFlBQUcsS0FBSyxjQUFBLEdBQWdCO0FBQ3RCLGVBQUssbUJBQUE7QUFDTCxlQUFLLE9BQU8sUUFBQTtRQUFBLFdBQ0osS0FBSyxNQUFLO0FBQ2xCLGVBQUssT0FBTyxRQUFBO1FBQUE7TUFBQTtBQUdoQixVQUFHLENBQUMsWUFBWSxVQUFVLGFBQUEsRUFBZSxRQUFRLFNBQVMsVUFBQSxLQUFlLEdBQUU7QUFDekUsa0JBQUE7TUFBQSxPQUNLO0FBQ0wsaUJBQVMsaUJBQWlCLG9CQUFvQixNQUFNLFVBQUEsQ0FBQTtNQUFBO0lBQUE7SUFJeEQsV0FBVyxVQUFTO0FBQ2xCLG1CQUFhLEtBQUsscUJBQUE7QUFDbEIsV0FBSyxPQUFPLFdBQVcsUUFBQTtJQUFBO0lBR3pCLGlCQUFpQixXQUFVO0FBQ3pCLG1CQUFhLEtBQUsscUJBQUE7QUFDbEIsV0FBSyxPQUFPLGlCQUFpQixTQUFBO0FBQzdCLFdBQUssUUFBQTtJQUFBO0lBR1AsT0FBTyxJQUFJLFdBQVcsWUFBWSxNQUFLO0FBQ3JDLFdBQUssTUFBTSxJQUFJLENBQUEsU0FBUSxXQUFHLEtBQUssV0FBVyxXQUFXLE1BQU0sRUFBQSxDQUFBO0lBQUE7SUFLN0QsV0FBVyxNQUFNLE1BQUs7QUFBRSxXQUFLLGFBQWEsTUFBTSxHQUFHLElBQUE7SUFBQTtJQUVuRCxLQUFLLE1BQU0sTUFBSztBQUNkLFVBQUcsQ0FBQyxLQUFLLGlCQUFBLEtBQXNCLENBQUMsUUFBUSxNQUFLO0FBQUUsZUFBTyxLQUFBO01BQUE7QUFDdEQsY0FBUSxLQUFLLElBQUE7QUFDYixVQUFJLFNBQVMsS0FBQTtBQUNiLGNBQVEsUUFBUSxJQUFBO0FBQ2hCLGFBQU87SUFBQTtJQUdULElBQUksTUFBTSxNQUFNLGFBQVk7QUFDMUIsVUFBRyxLQUFLLFlBQVc7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBQSxJQUFPLFlBQUE7QUFDakIsYUFBSyxXQUFXLE1BQU0sTUFBTSxLQUFLLEdBQUE7TUFBQSxXQUN6QixLQUFLLGVBQUEsR0FBaUI7QUFDOUIsWUFBSSxDQUFDLEtBQUssR0FBQSxJQUFPLFlBQUE7QUFDakIsY0FBTSxNQUFNLE1BQU0sS0FBSyxHQUFBO01BQUE7SUFBQTtJQUkzQixpQkFBaUIsVUFBUztBQUN4QixXQUFLLFlBQVksTUFBTSxRQUFBO0lBQUE7SUFHekIsV0FBVyxNQUFNLFNBQVMsU0FBUyxXQUFVO0lBQUEsR0FBRztBQUM5QyxXQUFLLFlBQVksY0FBYyxNQUFNLFNBQVMsTUFBQTtJQUFBO0lBR2hELFVBQVUsU0FBUyxPQUFPLElBQUc7QUFDM0IsY0FBUSxHQUFHLE9BQU8sQ0FBQSxTQUFRO0FBQ3hCLFlBQUksVUFBVSxLQUFLLGNBQUE7QUFDbkIsWUFBRyxDQUFDLFNBQVE7QUFDVixhQUFHLElBQUE7UUFBQSxPQUNFO0FBQ0wsa0JBQVEsSUFBSSxjQUFjLDRDQUFBO0FBQzFCLHFCQUFXLE1BQU0sR0FBRyxJQUFBLEdBQU8sT0FBQTtRQUFBO01BQUEsQ0FBQTtJQUFBO0lBS2pDLFNBQVMsTUFBTSxNQUFNLE1BQUs7QUFDeEIsVUFBSSxVQUFVLEtBQUssY0FBQTtBQUNuQixVQUFJLGVBQWUsS0FBSztBQUN4QixVQUFHLENBQUMsU0FBUTtBQUNWLFlBQUcsS0FBSyxZQUFBLEtBQWlCLEtBQUssU0FBUTtBQUNwQyxpQkFBTyxLQUFBLEVBQU8sUUFBUSxXQUFXLE1BQU07QUFDckMsZ0JBQUcsS0FBSyxjQUFjLGdCQUFnQixDQUFDLEtBQUssWUFBQSxHQUFjO0FBQ3hELG1CQUFLLGlCQUFpQixNQUFNLE1BQU07QUFDaEMscUJBQUssSUFBSSxNQUFNLFdBQVcsTUFBTSxDQUFDLDZGQUFBLENBQUE7Y0FBQSxDQUFBO1lBQUE7VUFBQSxDQUFBO1FBQUEsT0FJbEM7QUFDTCxpQkFBTyxLQUFBO1FBQUE7TUFBQTtBQUlYLGNBQVEsSUFBSSxjQUFjLDRDQUFBO0FBQzFCLFVBQUksV0FBVztRQUNiLFVBQVUsQ0FBQTtRQUNWLFFBQVEsTUFBTSxJQUFHO0FBQUUsZUFBSyxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUEsQ0FBQTtRQUFBO01BQUE7QUFFL0MsaUJBQVcsTUFBTTtBQUNmLFlBQUcsS0FBSyxZQUFBLEdBQWM7QUFBRTtRQUFBO0FBQ3hCLGlCQUFTLFNBQVMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUEsTUFBUSxJQUFJLFFBQVEsTUFBTSxFQUFBLEdBQUssS0FBQSxDQUFBO01BQUEsR0FDcEUsT0FBQTtBQUNILGFBQU87SUFBQTtJQUdULGlCQUFpQixNQUFNLEtBQUk7QUFDekIsbUJBQWEsS0FBSyxxQkFBQTtBQUNsQixXQUFLLFdBQUE7QUFDTCxVQUFJLFFBQVEsS0FBSztBQUNqQixVQUFJLFFBQVEsS0FBSztBQUNqQixVQUFJLFVBQVUsS0FBSyxNQUFNLEtBQUssT0FBQSxLQUFZLFFBQVEsUUFBUSxFQUFBLElBQU07QUFDaEUsVUFBSSxRQUFRLGdCQUFRLFlBQVksS0FBSyxjQUFjLE9BQU8sU0FBUyxVQUFVLHFCQUFxQixHQUFHLENBQUEsVUFBUyxRQUFRLENBQUE7QUFDdEgsVUFBRyxRQUFRLEtBQUssWUFBVztBQUN6QixrQkFBVSxLQUFLO01BQUE7QUFFakIsV0FBSyx3QkFBd0IsV0FBVyxNQUFNO0FBRTVDLFlBQUcsS0FBSyxZQUFBLEtBQWlCLEtBQUssWUFBQSxHQUFjO0FBQUU7UUFBQTtBQUM5QyxhQUFLLFFBQUE7QUFDTCxjQUFNLElBQUEsSUFBUSxLQUFLLElBQUksTUFBTSxRQUFRLE1BQU0sQ0FBQyxlQUFlLDJCQUFBLENBQUE7QUFDM0QsWUFBRyxRQUFRLEtBQUssWUFBVztBQUN6QixlQUFLLElBQUksTUFBTSxRQUFRLE1BQU0sQ0FBQyxZQUFZLEtBQUssd0RBQUEsQ0FBQTtRQUFBO0FBRWpELFlBQUcsS0FBSyxlQUFBLEdBQWlCO0FBQ3ZCLGlCQUFPLFdBQVcsS0FBSztRQUFBLE9BQ2xCO0FBQ0wsaUJBQU8sU0FBUyxPQUFBO1FBQUE7TUFBQSxHQUVqQixPQUFBO0lBQUE7SUFHTCxpQkFBaUIsTUFBSztBQUNwQixhQUFPLFFBQVEsS0FBSyxXQUFXLFVBQUEsSUFBYyxjQUFNLEtBQUssTUFBTSxHQUFBLEVBQUssTUFBTSxLQUFLLE1BQU07SUFBQTtJQUd0RixhQUFZO0FBQUUsYUFBTyxLQUFLO0lBQUE7SUFFMUIsY0FBYTtBQUFFLGFBQU8sS0FBSyxPQUFPLFlBQUE7SUFBQTtJQUVsQyxtQkFBa0I7QUFBRSxhQUFPLEtBQUs7SUFBQTtJQUVoQyxRQUFRLE1BQUs7QUFBRSxhQUFPLEdBQUcsS0FBSyxpQkFBQSxJQUFxQjtJQUFBO0lBRW5ELFFBQVEsT0FBTyxRQUFPO0FBQUUsYUFBTyxLQUFLLE9BQU8sUUFBUSxPQUFPLE1BQUE7SUFBQTtJQUUxRCxnQkFBZTtBQUNiLFVBQUksYUFBYTtBQUNqQixrQkFBSSxJQUFJLFVBQVUsR0FBRywwQkFBMEIsbUJBQW1CLENBQUEsV0FBVTtBQUMxRSxZQUFHLENBQUMsS0FBSyxZQUFZLE9BQU8sRUFBQSxHQUFJO0FBQzlCLGNBQUksT0FBTyxLQUFLLFlBQVksTUFBQTtBQUM1QixlQUFLLFFBQVEsS0FBSyxRQUFBLENBQUE7QUFDbEIsZUFBSyxLQUFBO0FBQ0wsY0FBRyxPQUFPLGFBQWEsUUFBQSxHQUFVO0FBQUUsaUJBQUssT0FBTztVQUFBO1FBQUE7QUFFakQscUJBQWE7TUFBQSxDQUFBO0FBRWYsYUFBTztJQUFBO0lBR1QsU0FBUyxJQUFJLE9BQU07QUFDakIsV0FBSyxXQUFBO0FBQ0wsc0JBQVEsU0FBUyxJQUFJLEtBQUE7SUFBQTtJQUd2QixZQUFZLE1BQU0sT0FBTyxXQUFXLE1BQU0sVUFBVSxLQUFLLGVBQWUsSUFBQSxHQUFNO0FBQzVFLFdBQUssaUJBQWlCLEtBQUssa0JBQWtCLEtBQUssS0FBSztBQUN2RCxVQUFJLFlBQVksWUFBSSxVQUFVLEtBQUssZ0JBQWdCLEVBQUE7QUFDbkQsV0FBSyxLQUFLLFdBQVcsS0FBSyxhQUFBO0FBQzFCLFdBQUssS0FBSyxRQUFBO0FBRVYsV0FBSyxPQUFPLEtBQUssWUFBWSxXQUFXLEtBQUE7QUFDeEMsV0FBSyxLQUFLLFlBQVksSUFBQTtBQUN0QixXQUFLLGtCQUFBO0FBQ0wsV0FBSyxLQUFLLEtBQUssQ0FBQyxXQUFXLFdBQVc7QUFDcEMsWUFBRyxjQUFjLEtBQUssS0FBSyxrQkFBa0IsT0FBQSxHQUFTO0FBQ3BELGVBQUssaUJBQWlCLE1BQU07QUFDMUIsd0JBQUksY0FBYyxRQUFBLEVBQVUsUUFBUSxDQUFBLE9BQU0sVUFBVSxZQUFZLEVBQUEsQ0FBQTtBQUNoRSxpQkFBSyxlQUFlLFlBQVksU0FBQTtBQUNoQyxpQkFBSyxpQkFBaUI7QUFDdEIsd0JBQVksc0JBQXNCLFFBQUE7QUFDbEMsbUJBQUE7VUFBQSxDQUFBO1FBQUE7TUFBQSxDQUFBO0lBQUE7SUFNUixrQkFBa0IsVUFBUztBQUN6QixVQUFJLGFBQWEsS0FBSyxRQUFRLFFBQUE7QUFDOUIsaUJBQVcsWUFBWSxZQUFJLElBQUksVUFBVSxJQUFJLGFBQUE7QUFDN0MsZUFBUyxRQUFRLENBQUEsT0FBTTtBQUNyQixZQUFHLFNBQVMsS0FBSyxTQUFTLEVBQUEsR0FBSTtBQUM1QixlQUFLLE9BQU8sSUFBSSxHQUFHLGFBQWEsVUFBQSxHQUFhLFFBQUE7UUFBQTtNQUFBLENBQUE7SUFBQTtJQUtuRCxVQUFVLElBQUc7QUFBRSxhQUFPLEdBQUcsZ0JBQWdCLEdBQUcsYUFBYSxXQUFBLE1BQWlCO0lBQUE7SUFFMUUsWUFBWSxJQUFJLE9BQU07QUFDcEIsVUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU0sTUFBTSxLQUFBO0FBQ3BDLFdBQUssTUFBTSxLQUFLLE1BQU07QUFDdEIsYUFBTztJQUFBO0lBR1QsTUFBTSxTQUFTLFVBQVM7QUFDdEIsVUFBSSxPQUFPLE1BQU0sUUFBUSxRQUFRLGlCQUFBLEdBQW9CLENBQUEsT0FBTSxLQUFLLFlBQVksRUFBQSxDQUFBLEtBQVEsS0FBSztBQUN6RixVQUFHLE1BQUs7QUFBRSxpQkFBUyxJQUFBO01BQUE7SUFBQTtJQUdyQixhQUFhLFNBQVMsVUFBUztBQUM3QixXQUFLLE1BQU0sU0FBUyxDQUFBLFNBQVEsU0FBUyxNQUFNLE9BQUEsQ0FBQTtJQUFBO0lBRzdDLFlBQVksSUFBRztBQUNiLFVBQUksU0FBUyxHQUFHLGFBQWEsV0FBQTtBQUM3QixhQUFPLE1BQU0sS0FBSyxZQUFZLE1BQUEsR0FBUyxDQUFBLFNBQVEsS0FBSyxrQkFBa0IsRUFBQSxDQUFBO0lBQUE7SUFHeEUsWUFBWSxJQUFHO0FBQUUsYUFBTyxLQUFLLE1BQU07SUFBQTtJQUVuQyxrQkFBaUI7QUFDZixlQUFRLE1BQU0sS0FBSyxPQUFNO0FBQ3ZCLGFBQUssTUFBTSxJQUFJLFFBQUE7QUFDZixlQUFPLEtBQUssTUFBTTtNQUFBO0FBRXBCLFdBQUssT0FBTztJQUFBO0lBR2QsZ0JBQWdCLElBQUc7QUFDakIsVUFBSSxPQUFPLEtBQUssWUFBWSxHQUFHLGFBQWEsV0FBQSxDQUFBO0FBQzVDLFVBQUcsUUFBUSxLQUFLLE9BQU8sR0FBRyxJQUFHO0FBQzNCLGFBQUssUUFBQTtBQUNMLGVBQU8sS0FBSyxNQUFNLEtBQUs7TUFBQSxXQUNmLE1BQUs7QUFDYixhQUFLLGtCQUFrQixHQUFHLEVBQUE7TUFBQTtJQUFBO0lBSTlCLGlCQUFpQixRQUFPO0FBQ3RCLFVBQUcsS0FBSyxrQkFBa0IsUUFBTztBQUFFO01BQUE7QUFDbkMsV0FBSyxnQkFBZ0I7QUFDckIsVUFBSSxTQUFTLE1BQU07QUFDakIsWUFBRyxXQUFXLEtBQUssZUFBYztBQUFFLGVBQUssZ0JBQWdCO1FBQUE7QUFDeEQsZUFBTyxvQkFBb0IsV0FBVyxJQUFBO0FBQ3RDLGVBQU8sb0JBQW9CLFlBQVksSUFBQTtNQUFBO0FBRXpDLGFBQU8saUJBQWlCLFdBQVcsTUFBQTtBQUNuQyxhQUFPLGlCQUFpQixZQUFZLE1BQUE7SUFBQTtJQUd0QyxtQkFBa0I7QUFDaEIsVUFBRyxTQUFTLGtCQUFrQixTQUFTLE1BQUs7QUFDMUMsZUFBTyxLQUFLLGlCQUFpQixTQUFTO01BQUEsT0FDakM7QUFFTCxlQUFPLFNBQVMsaUJBQWlCLFNBQVM7TUFBQTtJQUFBO0lBSTlDLGtCQUFrQixNQUFLO0FBQ3JCLFVBQUcsS0FBSyxjQUFjLEtBQUssWUFBWSxLQUFLLFVBQUEsR0FBWTtBQUN0RCxhQUFLLGFBQWE7TUFBQTtJQUFBO0lBSXRCLCtCQUE4QjtBQUM1QixVQUFHLEtBQUssY0FBYyxLQUFLLGVBQWUsU0FBUyxNQUFLO0FBQ3RELGFBQUssV0FBVyxNQUFBO01BQUE7SUFBQTtJQUlwQixvQkFBbUI7QUFDakIsV0FBSyxhQUFhLEtBQUssaUJBQUE7QUFDdkIsVUFBRyxLQUFLLGVBQWUsU0FBUyxNQUFLO0FBQUUsYUFBSyxXQUFXLEtBQUE7TUFBQTtJQUFBO0lBR3pELHFCQUFvQjtBQUNsQixVQUFHLEtBQUsscUJBQW9CO0FBQUU7TUFBQTtBQUU5QixXQUFLLHNCQUFzQjtBQUUzQixXQUFLLE9BQU8sUUFBUSxDQUFBLFVBQVM7QUFDM0IsWUFBRyxTQUFTLE1BQU0sU0FBUyxPQUFRLEtBQUssTUFBSztBQUMzQyxlQUFLLGlCQUFpQixLQUFLLElBQUE7UUFBQTtNQUFBLENBQUE7QUFHL0IsZUFBUyxLQUFLLGlCQUFpQixTQUFTLFdBQVc7TUFBQSxDQUFBO0FBQ25ELGFBQU8saUJBQWlCLFlBQVksQ0FBQSxNQUFLO0FBQ3ZDLFlBQUcsRUFBRSxXQUFVO0FBQ2IsZUFBSyxVQUFBLEVBQVksV0FBQTtBQUNqQixlQUFLLGdCQUFnQixFQUFDLElBQUksT0FBTyxTQUFTLE1BQU0sTUFBTSxXQUFBLENBQUE7QUFDdEQsaUJBQU8sU0FBUyxPQUFBO1FBQUE7TUFBQSxHQUVqQixJQUFBO0FBQ0gsV0FBSyxRQUFBO0FBQ0wsV0FBSyxXQUFBO0FBQ0wsV0FBSyxVQUFBO0FBQ0wsV0FBSyxLQUFLLEVBQUMsT0FBTyxTQUFTLFNBQVMsVUFBQSxHQUFZLENBQUMsR0FBRyxNQUFNLE1BQU0sVUFBVSxVQUFVLGdCQUFnQjtBQUNsRyxZQUFJLFdBQVcsU0FBUyxhQUFhLEtBQUssUUFBUSxPQUFBLENBQUE7QUFDbEQsWUFBSSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksWUFBQTtBQUNoQyxZQUFHLFlBQVksU0FBUyxZQUFBLE1BQWtCLFlBQVc7QUFBRTtRQUFBO0FBRXZELFlBQUksT0FBTyxpQkFBQyxLQUFLLEVBQUUsT0FBUSxLQUFLLFVBQVUsTUFBTSxHQUFHLFFBQUE7QUFDbkQsbUJBQUcsS0FBSyxNQUFNLFVBQVUsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFDLEtBQUEsQ0FBQSxDQUFBO01BQUEsQ0FBQTtBQUVwRCxXQUFLLEtBQUssRUFBQyxNQUFNLFlBQVksT0FBTyxVQUFBLEdBQVksQ0FBQyxHQUFHLE1BQU0sTUFBTSxVQUFVLFVBQVUsZ0JBQWdCO0FBQ2xHLFlBQUcsQ0FBQyxhQUFZO0FBQ2QsY0FBSSxPQUFPLGlCQUFDLEtBQUssRUFBRSxPQUFRLEtBQUssVUFBVSxNQUFNLEdBQUcsUUFBQTtBQUNuRCxxQkFBRyxLQUFLLE1BQU0sVUFBVSxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUMsS0FBQSxDQUFBLENBQUE7UUFBQTtNQUFBLENBQUE7QUFHdEQsV0FBSyxLQUFLLEVBQUMsTUFBTSxRQUFRLE9BQU8sUUFBQSxHQUFVLENBQUMsR0FBRyxNQUFNLE1BQU0sVUFBVSxXQUFXLFVBQVUsY0FBYztBQUVyRyxZQUFHLGNBQWMsVUFBUztBQUN4QixjQUFJLE9BQU8sS0FBSyxVQUFVLE1BQU0sR0FBRyxRQUFBO0FBQ25DLHFCQUFHLEtBQUssTUFBTSxVQUFVLE1BQU0sVUFBVSxDQUFDLFFBQVEsRUFBQyxLQUFBLENBQUEsQ0FBQTtRQUFBO01BQUEsQ0FBQTtBQUd0RCxhQUFPLGlCQUFpQixZQUFZLENBQUEsTUFBSyxFQUFFLGVBQUEsQ0FBQTtBQUMzQyxhQUFPLGlCQUFpQixRQUFRLENBQUEsTUFBSztBQUNuQyxVQUFFLGVBQUE7QUFDRixZQUFJLGVBQWUsTUFBTSxrQkFBa0IsRUFBRSxRQUFRLEtBQUssUUFBUSxlQUFBLENBQUEsR0FBbUIsQ0FBQSxlQUFjO0FBQ2pHLGlCQUFPLFdBQVcsYUFBYSxLQUFLLFFBQVEsZUFBQSxDQUFBO1FBQUEsQ0FBQTtBQUU5QyxZQUFJLGFBQWEsZ0JBQWdCLFNBQVMsZUFBZSxZQUFBO0FBQ3pELFlBQUksUUFBUSxNQUFNLEtBQUssRUFBRSxhQUFhLFNBQVMsQ0FBQSxDQUFBO0FBQy9DLFlBQUcsQ0FBQyxjQUFjLFdBQVcsWUFBWSxNQUFNLFdBQVcsS0FBSyxFQUFFLFdBQVcsaUJBQWlCLFdBQVU7QUFBRTtRQUFBO0FBRXpHLHFCQUFhLFdBQVcsWUFBWSxLQUFBO0FBQ3BDLG1CQUFXLGNBQWMsSUFBSSxNQUFNLFNBQVMsRUFBQyxTQUFTLEtBQUEsQ0FBQSxDQUFBO01BQUEsQ0FBQTtBQUV4RCxXQUFLLEdBQUcsbUJBQW1CLENBQUEsTUFBSztBQUM5QixZQUFJLGVBQWUsRUFBRTtBQUNyQixZQUFHLENBQUMsWUFBSSxjQUFjLFlBQUEsR0FBYztBQUFFO1FBQUE7QUFDdEMsWUFBSSxRQUFRLE1BQU0sS0FBSyxFQUFFLE9BQU8sU0FBUyxDQUFBLENBQUEsRUFBSSxPQUFPLENBQUEsTUFBSyxhQUFhLFFBQVEsYUFBYSxJQUFBO0FBQzNGLHFCQUFhLFdBQVcsY0FBYyxLQUFBO0FBQ3RDLHFCQUFhLGNBQWMsSUFBSSxNQUFNLFNBQVMsRUFBQyxTQUFTLEtBQUEsQ0FBQSxDQUFBO01BQUEsQ0FBQTtJQUFBO0lBSTVELFVBQVUsV0FBVyxHQUFHLFVBQVM7QUFDL0IsVUFBSSxXQUFXLEtBQUssa0JBQWtCO0FBQ3RDLGFBQU8sV0FBVyxTQUFTLEdBQUcsUUFBQSxJQUFZLENBQUE7SUFBQTtJQUc1QyxlQUFlLE1BQUs7QUFDbEIsV0FBSztBQUNMLFdBQUssY0FBYztBQUNuQixhQUFPLEtBQUs7SUFBQTtJQUdkLGtCQUFrQixTQUFRO0FBQ3hCLFVBQUcsS0FBSyxZQUFZLFNBQVE7QUFDMUIsZUFBTztNQUFBLE9BQ0Y7QUFDTCxhQUFLLE9BQU8sS0FBSztBQUNqQixhQUFLLGNBQWM7QUFDbkIsZUFBTztNQUFBO0lBQUE7SUFJWCxVQUFTO0FBQUUsYUFBTyxLQUFLO0lBQUE7SUFFdkIsaUJBQWdCO0FBQUUsYUFBTyxDQUFDLENBQUMsS0FBSztJQUFBO0lBRWhDLEtBQUssUUFBUSxVQUFTO0FBQ3BCLGVBQVEsU0FBUyxRQUFPO0FBQ3RCLFlBQUksbUJBQW1CLE9BQU87QUFFOUIsYUFBSyxHQUFHLGtCQUFrQixDQUFBLE1BQUs7QUFDN0IsY0FBSSxVQUFVLEtBQUssUUFBUSxLQUFBO0FBQzNCLGNBQUksZ0JBQWdCLEtBQUssUUFBUSxVQUFVLE9BQUE7QUFDM0MsY0FBSSxpQkFBaUIsRUFBRSxPQUFPLGdCQUFnQixFQUFFLE9BQU8sYUFBYSxPQUFBO0FBQ3BFLGNBQUcsZ0JBQWU7QUFDaEIsaUJBQUssU0FBUyxFQUFFLFFBQVEsR0FBRyxrQkFBa0IsTUFBTTtBQUNqRCxtQkFBSyxhQUFhLEVBQUUsUUFBUSxDQUFBLFNBQVE7QUFDbEMseUJBQVMsR0FBRyxPQUFPLE1BQU0sRUFBRSxRQUFRLGdCQUFnQixJQUFBO2NBQUEsQ0FBQTtZQUFBLENBQUE7VUFBQSxPQUdsRDtBQUNMLHdCQUFJLElBQUksVUFBVSxJQUFJLGtCQUFrQixDQUFBLE9BQU07QUFDNUMsa0JBQUksV0FBVyxHQUFHLGFBQWEsYUFBQTtBQUMvQixtQkFBSyxTQUFTLElBQUksR0FBRyxrQkFBa0IsTUFBTTtBQUMzQyxxQkFBSyxhQUFhLElBQUksQ0FBQSxTQUFRO0FBQzVCLDJCQUFTLEdBQUcsT0FBTyxNQUFNLElBQUksVUFBVSxRQUFBO2dCQUFBLENBQUE7Y0FBQSxDQUFBO1lBQUEsQ0FBQTtVQUFBO1FBQUEsQ0FBQTtNQUFBO0lBQUE7SUFTckQsYUFBWTtBQUNWLGFBQU8saUJBQWlCLGFBQWEsQ0FBQSxNQUFLLEtBQUssdUJBQXVCLEVBQUUsTUFBQTtBQUN4RSxXQUFLLFVBQVUsU0FBUyxTQUFTLEtBQUE7QUFDakMsV0FBSyxVQUFVLGFBQWEsaUJBQWlCLElBQUE7SUFBQTtJQUcvQyxVQUFVLFdBQVcsYUFBYSxTQUFRO0FBQ3hDLFVBQUksUUFBUSxLQUFLLFFBQVEsV0FBQTtBQUN6QixhQUFPLGlCQUFpQixXQUFXLENBQUEsTUFBSztBQUN0QyxZQUFJLFNBQVM7QUFDYixZQUFHLFNBQVE7QUFDVCxtQkFBUyxFQUFFLE9BQU8sUUFBUSxJQUFJLFFBQUEsSUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLGNBQWMsSUFBSSxRQUFBO1FBQUEsT0FDM0U7QUFDTCxjQUFJLHVCQUF1QixLQUFLLHdCQUF3QixFQUFFO0FBQzFELG1CQUFTLGtCQUFrQixzQkFBc0IsS0FBQTtBQUNqRCxlQUFLLGtCQUFrQixHQUFHLG9CQUFBO0FBQzFCLGVBQUssdUJBQXVCO1FBQUE7QUFFOUIsWUFBSSxXQUFXLFVBQVUsT0FBTyxhQUFhLEtBQUE7QUFDN0MsWUFBRyxDQUFDLFVBQVM7QUFBRTtRQUFBO0FBQ2YsWUFBRyxPQUFPLGFBQWEsTUFBQSxNQUFZLEtBQUk7QUFBRSxZQUFFLGVBQUE7UUFBQTtBQUUzQyxhQUFLLFNBQVMsUUFBUSxHQUFHLFNBQVMsTUFBTTtBQUN0QyxlQUFLLGFBQWEsUUFBUSxDQUFBLFNBQVE7QUFDaEMsdUJBQUcsS0FBSyxTQUFTLFVBQVUsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFDLE1BQU0sS0FBSyxVQUFVLFNBQVMsR0FBRyxNQUFBLEVBQUEsQ0FBQSxDQUFBO1VBQUEsQ0FBQTtRQUFBLENBQUE7TUFBQSxHQUd2RixPQUFBO0lBQUE7SUFHTCxrQkFBa0IsR0FBRyxnQkFBZTtBQUNsQyxVQUFJLGVBQWUsS0FBSyxRQUFRLFlBQUE7QUFDaEMsa0JBQUksSUFBSSxVQUFVLElBQUksaUJBQWlCLENBQUEsT0FBTTtBQUMzQyxZQUFHLEVBQUUsR0FBRyxXQUFXLGNBQUEsS0FBbUIsR0FBRyxTQUFTLGNBQUEsSUFBaUI7QUFDakUsZUFBSyxhQUFhLEVBQUUsUUFBUSxDQUFBLFNBQVE7QUFDbEMsZ0JBQUksV0FBVyxHQUFHLGFBQWEsWUFBQTtBQUMvQixnQkFBRyxXQUFHLFVBQVUsRUFBQSxHQUFJO0FBQ2xCLHlCQUFHLEtBQUssU0FBUyxVQUFVLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBQyxNQUFNLEtBQUssVUFBVSxTQUFTLEdBQUcsRUFBRSxNQUFBLEVBQUEsQ0FBQSxDQUFBO1lBQUE7VUFBQSxDQUFBO1FBQUE7TUFBQSxDQUFBO0lBQUE7SUFPNUYsVUFBUztBQUNQLFVBQUcsQ0FBQyxnQkFBUSxhQUFBLEdBQWU7QUFBRTtNQUFBO0FBQzdCLFVBQUcsUUFBUSxtQkFBa0I7QUFBRSxnQkFBUSxvQkFBb0I7TUFBQTtBQUMzRCxVQUFJLGNBQWM7QUFDbEIsYUFBTyxpQkFBaUIsVUFBVSxDQUFBLE9BQU07QUFDdEMscUJBQWEsV0FBQTtBQUNiLHNCQUFjLFdBQVcsTUFBTTtBQUM3QiwwQkFBUSxtQkFBbUIsQ0FBQSxVQUFTLE9BQU8sT0FBTyxPQUFPLEVBQUMsUUFBUSxPQUFPLFFBQUEsQ0FBQSxDQUFBO1FBQUEsR0FDeEUsR0FBQTtNQUFBLENBQUE7QUFFTCxhQUFPLGlCQUFpQixZQUFZLENBQUEsVUFBUztBQUMzQyxZQUFHLENBQUMsS0FBSyxvQkFBb0IsT0FBTyxRQUFBLEdBQVU7QUFBRTtRQUFBO0FBQ2hELFlBQUksRUFBQyxNQUFNLElBQUksTUFBTSxPQUFBLElBQVUsTUFBTSxTQUFTLENBQUE7QUFDOUMsWUFBSSxPQUFPLE9BQU8sU0FBUztBQUUzQixhQUFLLGlCQUFpQixNQUFNO0FBQzFCLGNBQUcsS0FBSyxLQUFLLFlBQUEsTUFBa0IsU0FBUyxXQUFXLE9BQU8sS0FBSyxLQUFLLEtBQUk7QUFDdEUsaUJBQUssS0FBSyxjQUFjLE1BQU0sSUFBQTtVQUFBLE9BQ3pCO0FBQ0wsaUJBQUssWUFBWSxNQUFNLE1BQU0sTUFBTTtBQUNqQyxrQkFBRyxNQUFLO0FBQUUscUJBQUssbUJBQUE7Y0FBQTtBQUNmLGtCQUFHLE9BQU8sV0FBWSxVQUFTO0FBQzdCLDJCQUFXLE1BQU07QUFDZix5QkFBTyxTQUFTLEdBQUcsTUFBQTtnQkFBQSxHQUNsQixDQUFBO2NBQUE7WUFBQSxDQUFBO1VBQUE7UUFBQSxDQUFBO01BQUEsR0FLVixLQUFBO0FBQ0gsYUFBTyxpQkFBaUIsU0FBUyxDQUFBLE1BQUs7QUFDcEMsWUFBSSxTQUFTLGtCQUFrQixFQUFFLFFBQVEsYUFBQTtBQUN6QyxZQUFJLE9BQU8sVUFBVSxPQUFPLGFBQWEsYUFBQTtBQUN6QyxZQUFJLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVc7QUFDekQsWUFBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFlBQUEsS0FBaUIsQ0FBQyxLQUFLLFFBQVEsYUFBWTtBQUFFO1FBQUE7QUFFL0QsWUFBSSxPQUFPLE9BQU87QUFDbEIsWUFBSSxZQUFZLE9BQU8sYUFBYSxjQUFBO0FBQ3BDLFVBQUUsZUFBQTtBQUNGLFVBQUUseUJBQUE7QUFDRixZQUFHLEtBQUssZ0JBQWdCLE1BQUs7QUFBRTtRQUFBO0FBRS9CLGFBQUssaUJBQWlCLE1BQU07QUFDMUIsY0FBRyxTQUFTLFNBQVE7QUFDbEIsaUJBQUssaUJBQWlCLE1BQU0sV0FBVyxNQUFBO1VBQUEsV0FDL0IsU0FBUyxZQUFXO0FBQzVCLGlCQUFLLGdCQUFnQixNQUFNLFNBQUE7VUFBQSxPQUN0QjtBQUNMLGtCQUFNLElBQUksTUFBTSxZQUFZLG1EQUFtRCxNQUFBO1VBQUE7UUFBQSxDQUFBO01BQUEsR0FHbEYsS0FBQTtJQUFBO0lBR0wsY0FBYyxPQUFPLFVBQVUsQ0FBQSxHQUFHO0FBQ2hDLGtCQUFJLGNBQWMsUUFBUSxPQUFPLFNBQVMsRUFBQyxRQUFRLFFBQUEsQ0FBQTtJQUFBO0lBR3JELGVBQWUsUUFBTztBQUNwQixhQUFPLFFBQVEsQ0FBQyxDQUFDLE9BQU8sT0FBQSxNQUFhLEtBQUssY0FBYyxPQUFPLE9BQUEsQ0FBQTtJQUFBO0lBR2pFLGdCQUFnQixNQUFNLFVBQVM7QUFDN0Isa0JBQUksY0FBYyxRQUFRLDBCQUEwQixFQUFDLFFBQVEsS0FBQSxDQUFBO0FBQzdELFVBQUksT0FBTyxNQUFNLFlBQUksY0FBYyxRQUFRLHlCQUF5QixFQUFDLFFBQVEsS0FBQSxDQUFBO0FBQzdFLGFBQU8sV0FBVyxTQUFTLElBQUEsSUFBUTtJQUFBO0lBR3JDLGlCQUFpQixNQUFNLFdBQVcsVUFBUztBQUN6QyxXQUFLLGdCQUFnQixFQUFDLElBQUksTUFBTSxNQUFNLFFBQUEsR0FBVSxDQUFBLFNBQVE7QUFDdEQsYUFBSyxLQUFLLGNBQWMsTUFBTSxVQUFVLENBQUEsWUFBVztBQUNqRCxlQUFLLGFBQWEsTUFBTSxXQUFXLE9BQUE7QUFDbkMsZUFBQTtRQUFBLENBQUE7TUFBQSxDQUFBO0lBQUE7SUFLTixhQUFhLE1BQU0sV0FBVyxVQUFVLEtBQUssZUFBZSxJQUFBLEdBQU07QUFDaEUsVUFBRyxDQUFDLEtBQUssa0JBQWtCLE9BQUEsR0FBUztBQUFFO01BQUE7QUFFdEMsc0JBQVEsVUFBVSxXQUFXLEVBQUMsTUFBTSxTQUFTLElBQUksS0FBSyxLQUFLLEdBQUEsR0FBSyxJQUFBO0FBQ2hFLFdBQUssb0JBQW9CLE9BQU8sUUFBQTtJQUFBO0lBR2xDLGdCQUFnQixNQUFNLFdBQVcsT0FBTTtBQUNyQyxVQUFJLFNBQVMsT0FBTztBQUNwQixXQUFLLGdCQUFnQixFQUFDLElBQUksTUFBTSxNQUFNLFdBQUEsR0FBYSxDQUFBLFNBQVE7QUFDekQsYUFBSyxZQUFZLE1BQU0sT0FBTyxNQUFNO0FBQ2xDLDBCQUFRLFVBQVUsV0FBVyxFQUFDLE1BQU0sWUFBWSxJQUFJLEtBQUssS0FBSyxJQUFJLE9BQUEsR0FBaUIsSUFBQTtBQUNuRixlQUFLLG9CQUFvQixPQUFPLFFBQUE7QUFDaEMsZUFBQTtRQUFBLENBQUE7TUFBQSxDQUFBO0lBQUE7SUFLTixxQkFBb0I7QUFDbEIsc0JBQVEsVUFBVSxXQUFXLEVBQUMsTUFBTSxNQUFNLE1BQU0sU0FBUyxJQUFJLEtBQUssS0FBSyxHQUFBLENBQUE7SUFBQTtJQUd6RSxvQkFBb0IsYUFBWTtBQUM5QixVQUFJLEVBQUMsVUFBVSxPQUFBLElBQVUsS0FBSztBQUM5QixVQUFHLFdBQVcsV0FBVyxZQUFZLFdBQVcsWUFBWSxRQUFPO0FBQ2pFLGVBQU87TUFBQSxPQUNGO0FBQ0wsYUFBSyxrQkFBa0IsTUFBTSxXQUFBO0FBQzdCLGVBQU87TUFBQTtJQUFBO0lBSVgsWUFBVztBQUNULFVBQUksYUFBYTtBQUNqQixXQUFLLEdBQUcsVUFBVSxDQUFBLE1BQUs7QUFDckIsWUFBSSxXQUFXLEVBQUUsT0FBTyxhQUFhLEtBQUssUUFBUSxRQUFBLENBQUE7QUFDbEQsWUFBRyxDQUFDLFVBQVM7QUFBRTtRQUFBO0FBQ2YsVUFBRSxlQUFBO0FBQ0YsVUFBRSxPQUFPLFdBQVc7QUFDcEIsYUFBSyxhQUFhLEVBQUUsUUFBUSxDQUFBLFNBQVE7QUFDbEMscUJBQUcsS0FBSyxVQUFVLFVBQVUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUEsQ0FBQSxDQUFBO1FBQUEsQ0FBQTtNQUFBLEdBRXRELEtBQUE7QUFFSCxlQUFRLFFBQVEsQ0FBQyxVQUFVLE9BQUEsR0FBUztBQUNsQyxhQUFLLEdBQUcsTUFBTSxDQUFBLE1BQUs7QUFDakIsY0FBSSxZQUFZLEtBQUssUUFBUSxRQUFBO0FBQzdCLGNBQUksUUFBUSxFQUFFO0FBQ2QsY0FBSSxhQUFhLE1BQU0sYUFBYSxTQUFBO0FBQ3BDLGNBQUksWUFBWSxNQUFNLFFBQVEsTUFBTSxLQUFLLGFBQWEsU0FBQTtBQUN0RCxjQUFJLFdBQVcsY0FBYztBQUM3QixjQUFHLENBQUMsVUFBUztBQUFFO1VBQUE7QUFDZixjQUFHLE1BQU0sU0FBUyxZQUFZLE1BQU0sWUFBWSxNQUFNLFNBQVMsVUFBUztBQUFFO1VBQUE7QUFFMUUsY0FBSSxhQUFhLGFBQWEsUUFBUSxNQUFNO0FBQzVDLGNBQUksb0JBQW9CO0FBQ3hCO0FBQ0EsY0FBSSxFQUFDLElBQVEsTUFBTSxTQUFBLElBQVksWUFBSSxRQUFRLE9BQU8sZ0JBQUEsS0FBcUIsQ0FBQTtBQUV2RSxjQUFHLE9BQU8sb0JBQW9CLEtBQUssU0FBUyxVQUFTO0FBQUU7VUFBQTtBQUV2RCxzQkFBSSxXQUFXLE9BQU8sa0JBQWtCLEVBQUMsSUFBSSxtQkFBbUIsS0FBQSxDQUFBO0FBRWhFLGVBQUssU0FBUyxPQUFPLEdBQUcsTUFBTSxNQUFNO0FBQ2xDLGlCQUFLLGFBQWEsWUFBWSxDQUFBLFNBQVE7QUFDcEMsMEJBQUksV0FBVyxPQUFPLGlCQUFpQixJQUFBO0FBQ3ZDLGtCQUFHLENBQUMsWUFBSSxlQUFlLEtBQUEsR0FBTztBQUM1QixxQkFBSyxpQkFBaUIsS0FBQTtjQUFBO0FBRXhCLHlCQUFHLEtBQUssVUFBVSxVQUFVLE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUUsT0FBTyxNQUFNLFdBQUEsQ0FBQSxDQUFBO1lBQUEsQ0FBQTtVQUFBLENBQUE7UUFBQSxHQUc5RSxLQUFBO01BQUE7SUFBQTtJQUlQLFNBQVMsSUFBSSxPQUFPLFdBQVcsVUFBUztBQUN0QyxVQUFHLGNBQWMsVUFBVSxjQUFjLFlBQVc7QUFBRSxlQUFPLFNBQUE7TUFBQTtBQUU3RCxVQUFJLGNBQWMsS0FBSyxRQUFRLFlBQUE7QUFDL0IsVUFBSSxjQUFjLEtBQUssUUFBUSxZQUFBO0FBQy9CLFVBQUksa0JBQWtCLEtBQUssU0FBUyxTQUFTLFNBQUE7QUFDN0MsVUFBSSxrQkFBa0IsS0FBSyxTQUFTLFNBQVMsU0FBQTtBQUU3QyxXQUFLLGFBQWEsSUFBSSxDQUFBLFNBQVE7QUFDNUIsWUFBSSxjQUFjLE1BQU0sQ0FBQyxLQUFLLFlBQUEsS0FBaUIsU0FBUyxLQUFLLFNBQVMsRUFBQTtBQUN0RSxvQkFBSSxTQUFTLElBQUksT0FBTyxhQUFhLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLE1BQU07QUFDckcsbUJBQUE7UUFBQSxDQUFBO01BQUEsQ0FBQTtJQUFBO0lBS04sY0FBYyxVQUFTO0FBQ3JCLFdBQUssV0FBVztBQUNoQixlQUFBO0FBQ0EsV0FBSyxXQUFXO0lBQUE7SUFHbEIsR0FBRyxPQUFPLFVBQVM7QUFDakIsYUFBTyxpQkFBaUIsT0FBTyxDQUFBLE1BQUs7QUFDbEMsWUFBRyxDQUFDLEtBQUssVUFBUztBQUFFLG1CQUFTLENBQUE7UUFBQTtNQUFBLENBQUE7SUFBQTtFQUFBO0FBS25DLE1BQUEsZ0JBQUEsTUFBb0I7SUFDbEIsY0FBYTtBQUNYLFdBQUssY0FBYyxvQkFBSSxJQUFBO0FBQ3ZCLFdBQUssYUFBYSxDQUFBO0FBQ2xCLFdBQUssTUFBQTtJQUFBO0lBR1AsUUFBTztBQUNMLFdBQUssWUFBWSxRQUFRLENBQUEsVUFBUztBQUNoQyxzQkFBYyxLQUFBO0FBQ2QsYUFBSyxZQUFZLE9BQU8sS0FBQTtNQUFBLENBQUE7QUFFMUIsV0FBSyxnQkFBQTtJQUFBO0lBR1AsTUFBTSxVQUFTO0FBQ2IsVUFBRyxLQUFLLEtBQUEsTUFBVyxHQUFFO0FBQ25CLGlCQUFBO01BQUEsT0FDSztBQUNMLGFBQUssY0FBYyxRQUFBO01BQUE7SUFBQTtJQUl2QixjQUFjLE1BQU0sU0FBUyxRQUFPO0FBQ2xDLGNBQUE7QUFDQSxVQUFJLFFBQVEsV0FBVyxNQUFNO0FBQzNCLGFBQUssWUFBWSxPQUFPLEtBQUE7QUFDeEIsZUFBQTtBQUNBLFlBQUcsS0FBSyxLQUFBLE1BQVcsR0FBRTtBQUFFLGVBQUssZ0JBQUE7UUFBQTtNQUFBLEdBQzNCLElBQUE7QUFDSCxXQUFLLFlBQVksSUFBSSxLQUFBO0lBQUE7SUFHdkIsY0FBYyxJQUFHO0FBQUUsV0FBSyxXQUFXLEtBQUssRUFBQTtJQUFBO0lBRXhDLE9BQU07QUFBRSxhQUFPLEtBQUssWUFBWTtJQUFBO0lBRWhDLGtCQUFpQjtBQUNmLFdBQUssV0FBVyxRQUFRLENBQUEsT0FBTSxHQUFBLENBQUE7QUFDOUIsV0FBSyxhQUFhLENBQUE7SUFBQTtFQUFBOzs7QW5IeDBCdEIsc0JBQW1CO0FBbEJuQixTQUFPLElBQUksZUFBQUk7QUFDWCxTQUFPLFNBQVMsZUFBQUE7QUFtQmhCLE1BQUksWUFBWSxTQUFTLGNBQWMseUJBQXlCLEVBQUUsYUFBYSxTQUFTO0FBQ3hGLE1BQUksYUFBYSxJQUFJLFdBQVcsU0FBUyxRQUFRLEVBQUMsUUFBUSxFQUFDLGFBQWEsVUFBUyxFQUFDLENBQUM7QUFHbkYsZ0JBQUFDLFFBQU8sT0FBTyxFQUFDLFdBQVcsRUFBQyxHQUFHLE9BQU0sR0FBRyxhQUFhLG9CQUFtQixDQUFDO0FBQ3hFLFNBQU8saUJBQWlCLDBCQUEwQixVQUFRLGNBQUFBLFFBQU8sS0FBSyxDQUFDO0FBQ3ZFLFNBQU8saUJBQWlCLHlCQUF5QixVQUFRLGNBQUFBLFFBQU8sS0FBSyxDQUFDO0FBR3RFLGFBQVcsUUFBUTtBQU1uQixTQUFPLGFBQWE7IiwKICAibmFtZXMiOiBbImdsb2JhbCIsICJ3aW5kb3ciLCAiaXNGdW5jdGlvbiIsICJpc1dpbmRvdyIsICJkb2N1bWVudCIsICJkb2MiLCAidG9UeXBlIiwgImNsb25lIiwgImFyciIsICJzdXBwb3J0IiwgImNvbnRhaW5zIiwgImhhc093biIsICJwdXNoIiwgInNsaWNlIiwgImluZGV4T2YiLCAiaSIsICJydHJpbSIsICJyaHRtbCIsICJycXVpY2tFeHByIiwgIlNpenpsZSIsICJmbiIsICJtYXRjaGVzIiwgImRvY0VsZW0iLCAibm9kZSIsICJub2RlTmFtZSIsICJzdGFydCIsICJkaXIiLCAiaGFzaCIsICJpc1hNTCIsICJlbGVtIiwgInNlbGYiLCAidmFsdWUiLCAiZGVmZXJyZWQiLCAicHJvY2VzcyIsICJEYXRhIiwgImRhdGEiLCAiZXhwZWN0U3luYyIsICJuYW1lIiwgImVuZCIsICJpbmRleCIsICJsZW5ndGgiLCAiaiIsICJtYXgiLCAibG9jYXRpb24iLCAidmFsIiwgImNvbXBsZXRlZCIsICJvZmZzZXQiLCAidG9wIiwgIm1ldGhvZCIsICJ0eXBlIiwgIl9zZWxmIiwgImNsb25lIiwgImxhbmciLCAiUHJpc20iLCAib2Zmc2V0IiwgImkiLCAiY29udGVudFR5cGUiLCAicmVmZXJlbmNlIiwgImtleSIsICJhcnJvdyIsICJyb3VuZCIsICJyYW5nZSIsICJmb3JtYXQiLCAic3RhcnQiLCAiZW5kIiwgIndpbmRvdyIsICJkb2N1bWVudCIsICJ0b3BiYXIiLCAiaW1wb3J0X2pxdWVyeSIsICJjcmVhdGVQb3BwZXIiLCAibmFtZSIsICJzdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAid2luZG93IiwgIm1pbiIsICJtYXgiLCAidG9QYWRkaW5nT2JqZWN0IiwgInBvcHBlck9mZnNldHMiLCAibWluIiwgIm1heCIsICJvZmZzZXQiLCAiZWZmZWN0IiwgInBvcHBlciIsICJnZXRDb21wdXRlZFN0eWxlIiwgImVmZmVjdCIsICJ3aW5kb3ciLCAiaGFzaCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiY2xpcHBpbmdQYXJlbnRzIiwgImdldENvbXB1dGVkU3R5bGUiLCAicmVmZXJlbmNlIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgInBsYWNlbWVudHMiLCAicGxhY2VtZW50IiwgInBsYWNlbWVudHMiLCAicGxhY2VtZW50IiwgIl9sb29wIiwgIl9pIiwgImNoZWNrcyIsICJvZmZzZXQiLCAicG9wcGVyT2Zmc2V0cyIsICJvZmZzZXQiLCAibWluIiwgIm1heCIsICJmbiIsICJzZWxmIiwgImZuIiwgIm1lcmdlZCIsICJkZWZhdWx0TW9kaWZpZXJzIiwgImNyZWF0ZVBvcHBlciIsICJyZWZlcmVuY2UiLCAicG9wcGVyIiwgIm9wdGlvbnMiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJmbiIsICJzdGF0ZSIsICJlZmZlY3QiLCAibm9vcEZuIiwgImNyZWF0ZVBvcHBlciIsICJkZWZhdWx0TW9kaWZpZXJzIiwgImNyZWF0ZVBvcHBlciIsICJNQVhfVUlEIiwgIk1JTExJU0VDT05EU19NVUxUSVBMSUVSIiwgIlRSQU5TSVRJT05fRU5EIiwgInRvVHlwZSIsICJvYmplY3QiLCAidW5kZWZpbmVkIiwgIk9iamVjdCIsICJwcm90b3R5cGUiLCAidG9TdHJpbmciLCAiY2FsbCIsICJtYXRjaCIsICJ0b0xvd2VyQ2FzZSIsICJnZXRVSUQiLCAicHJlZml4IiwgIk1hdGgiLCAiZmxvb3IiLCAicmFuZG9tIiwgImRvY3VtZW50IiwgImdldEVsZW1lbnRCeUlkIiwgImdldFNlbGVjdG9yIiwgImVsZW1lbnQiLCAic2VsZWN0b3IiLCAiZ2V0QXR0cmlidXRlIiwgImhyZWZBdHRyaWJ1dGUiLCAiaW5jbHVkZXMiLCAic3RhcnRzV2l0aCIsICJzcGxpdCIsICJ0cmltIiwgImdldFNlbGVjdG9yRnJvbUVsZW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJnZXRFbGVtZW50RnJvbVNlbGVjdG9yIiwgImdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50IiwgInRyYW5zaXRpb25EdXJhdGlvbiIsICJ0cmFuc2l0aW9uRGVsYXkiLCAid2luZG93IiwgImdldENvbXB1dGVkU3R5bGUiLCAiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCAiTnVtYmVyIiwgInBhcnNlRmxvYXQiLCAiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCAidHJpZ2dlclRyYW5zaXRpb25FbmQiLCAiZGlzcGF0Y2hFdmVudCIsICJFdmVudCIsICJpc0VsZW1lbnQiLCAianF1ZXJ5IiwgIm5vZGVUeXBlIiwgImdldEVsZW1lbnQiLCAibGVuZ3RoIiwgImlzVmlzaWJsZSIsICJnZXRDbGllbnRSZWN0cyIsICJlbGVtZW50SXNWaXNpYmxlIiwgImdldFByb3BlcnR5VmFsdWUiLCAiY2xvc2VkRGV0YWlscyIsICJjbG9zZXN0IiwgInN1bW1hcnkiLCAicGFyZW50Tm9kZSIsICJpc0Rpc2FibGVkIiwgIk5vZGUiLCAiRUxFTUVOVF9OT0RFIiwgImNsYXNzTGlzdCIsICJjb250YWlucyIsICJkaXNhYmxlZCIsICJoYXNBdHRyaWJ1dGUiLCAiZmluZFNoYWRvd1Jvb3QiLCAiZG9jdW1lbnRFbGVtZW50IiwgImF0dGFjaFNoYWRvdyIsICJnZXRSb290Tm9kZSIsICJyb290IiwgIlNoYWRvd1Jvb3QiLCAibm9vcCIsICJyZWZsb3ciLCAib2Zmc2V0SGVpZ2h0IiwgImdldGpRdWVyeSIsICJqUXVlcnkiLCAiYm9keSIsICJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwgIm9uRE9NQ29udGVudExvYWRlZCIsICJjYWxsYmFjayIsICJyZWFkeVN0YXRlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicHVzaCIsICJpc1JUTCIsICJkaXIiLCAiZGVmaW5lSlF1ZXJ5UGx1Z2luIiwgInBsdWdpbiIsICIkIiwgIm5hbWUiLCAiTkFNRSIsICJKUVVFUllfTk9fQ09ORkxJQ1QiLCAiZm4iLCAialF1ZXJ5SW50ZXJmYWNlIiwgIkNvbnN0cnVjdG9yIiwgIm5vQ29uZmxpY3QiLCAiZXhlY3V0ZSIsICJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwgInRyYW5zaXRpb25FbGVtZW50IiwgIndhaXRGb3JUcmFuc2l0aW9uIiwgImR1cmF0aW9uUGFkZGluZyIsICJlbXVsYXRlZER1cmF0aW9uIiwgImNhbGxlZCIsICJoYW5kbGVyIiwgInRhcmdldCIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgInNldFRpbWVvdXQiLCAiZ2V0TmV4dEFjdGl2ZUVsZW1lbnQiLCAibGlzdCIsICJhY3RpdmVFbGVtZW50IiwgInNob3VsZEdldE5leHQiLCAiaXNDeWNsZUFsbG93ZWQiLCAibGlzdExlbmd0aCIsICJpbmRleCIsICJpbmRleE9mIiwgIm1heCIsICJtaW4iLCAibmFtZXNwYWNlUmVnZXgiLCAic3RyaXBOYW1lUmVnZXgiLCAic3RyaXBVaWRSZWdleCIsICJldmVudFJlZ2lzdHJ5IiwgInVpZEV2ZW50IiwgImN1c3RvbUV2ZW50cyIsICJtb3VzZWVudGVyIiwgIm1vdXNlbGVhdmUiLCAibmF0aXZlRXZlbnRzIiwgIlNldCIsICJtYWtlRXZlbnRVaWQiLCAidWlkIiwgImdldEVsZW1lbnRFdmVudHMiLCAiYm9vdHN0cmFwSGFuZGxlciIsICJldmVudCIsICJoeWRyYXRlT2JqIiwgImRlbGVnYXRlVGFyZ2V0IiwgIm9uZU9mZiIsICJFdmVudEhhbmRsZXIiLCAib2ZmIiwgInR5cGUiLCAiYXBwbHkiLCAiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCAiZG9tRWxlbWVudHMiLCAicXVlcnlTZWxlY3RvckFsbCIsICJkb21FbGVtZW50IiwgImZpbmRIYW5kbGVyIiwgImV2ZW50cyIsICJjYWxsYWJsZSIsICJkZWxlZ2F0aW9uU2VsZWN0b3IiLCAidmFsdWVzIiwgImZpbmQiLCAibm9ybWFsaXplUGFyYW1ldGVycyIsICJvcmlnaW5hbFR5cGVFdmVudCIsICJkZWxlZ2F0aW9uRnVuY3Rpb24iLCAiaXNEZWxlZ2F0ZWQiLCAidHlwZUV2ZW50IiwgImdldFR5cGVFdmVudCIsICJoYXMiLCAiYWRkSGFuZGxlciIsICJ3cmFwRnVuY3Rpb24iLCAicmVsYXRlZFRhcmdldCIsICJoYW5kbGVycyIsICJwcmV2aW91c0Z1bmN0aW9uIiwgInJlcGxhY2UiLCAicmVtb3ZlSGFuZGxlciIsICJCb29sZWFuIiwgInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsICJuYW1lc3BhY2UiLCAic3RvcmVFbGVtZW50RXZlbnQiLCAiaGFuZGxlcktleSIsICJrZXlzIiwgIm9uIiwgIm9uZSIsICJpbk5hbWVzcGFjZSIsICJpc05hbWVzcGFjZSIsICJlbGVtZW50RXZlbnQiLCAic2xpY2UiLCAia2V5SGFuZGxlcnMiLCAidHJpZ2dlciIsICJhcmdzIiwgImpRdWVyeUV2ZW50IiwgImJ1YmJsZXMiLCAibmF0aXZlRGlzcGF0Y2giLCAiZGVmYXVsdFByZXZlbnRlZCIsICJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsICJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsICJpc0RlZmF1bHRQcmV2ZW50ZWQiLCAiZXZ0IiwgImNhbmNlbGFibGUiLCAicHJldmVudERlZmF1bHQiLCAib2JqIiwgIm1ldGEiLCAia2V5IiwgInZhbHVlIiwgImVudHJpZXMiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgImdldCIsICJlbGVtZW50TWFwIiwgIk1hcCIsICJzZXQiLCAiaW5zdGFuY2UiLCAiaW5zdGFuY2VNYXAiLCAic2l6ZSIsICJjb25zb2xlIiwgImVycm9yIiwgIkFycmF5IiwgImZyb20iLCAicmVtb3ZlIiwgImRlbGV0ZSIsICJub3JtYWxpemVEYXRhIiwgIkpTT04iLCAicGFyc2UiLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgIm5vcm1hbGl6ZURhdGFLZXkiLCAiY2hyIiwgIk1hbmlwdWxhdG9yIiwgInNldERhdGFBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgInJlbW92ZURhdGFBdHRyaWJ1dGUiLCAicmVtb3ZlQXR0cmlidXRlIiwgImdldERhdGFBdHRyaWJ1dGVzIiwgImF0dHJpYnV0ZXMiLCAiYnNLZXlzIiwgImRhdGFzZXQiLCAiZmlsdGVyIiwgInB1cmVLZXkiLCAiY2hhckF0IiwgImdldERhdGFBdHRyaWJ1dGUiLCAiQ29uZmlnIiwgIkRlZmF1bHQiLCAiRGVmYXVsdFR5cGUiLCAiRXJyb3IiLCAiX2dldENvbmZpZyIsICJjb25maWciLCAiX21lcmdlQ29uZmlnT2JqIiwgIl9jb25maWdBZnRlck1lcmdlIiwgIl90eXBlQ2hlY2tDb25maWciLCAianNvbkNvbmZpZyIsICJjb25zdHJ1Y3RvciIsICJjb25maWdUeXBlcyIsICJwcm9wZXJ0eSIsICJleHBlY3RlZFR5cGVzIiwgInZhbHVlVHlwZSIsICJSZWdFeHAiLCAidGVzdCIsICJUeXBlRXJyb3IiLCAidG9VcHBlckNhc2UiLCAiVkVSU0lPTiIsICJCYXNlQ29tcG9uZW50IiwgIl9lbGVtZW50IiwgIl9jb25maWciLCAiRGF0YSIsICJEQVRBX0tFWSIsICJkaXNwb3NlIiwgIkVWRU5UX0tFWSIsICJwcm9wZXJ0eU5hbWUiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJfcXVldWVDYWxsYmFjayIsICJpc0FuaW1hdGVkIiwgImdldEluc3RhbmNlIiwgImdldE9yQ3JlYXRlSW5zdGFuY2UiLCAiZXZlbnROYW1lIiwgImVuYWJsZURpc21pc3NUcmlnZ2VyIiwgImNvbXBvbmVudCIsICJtZXRob2QiLCAiY2xpY2tFdmVudCIsICJ0YWdOYW1lIiwgIkVWRU5UX0NMT1NFIiwgIkVWRU5UX0NMT1NFRCIsICJDTEFTU19OQU1FX0ZBREUiLCAiQ0xBU1NfTkFNRV9TSE9XIiwgIkFsZXJ0IiwgImNsb3NlIiwgImNsb3NlRXZlbnQiLCAiX2Rlc3Ryb3lFbGVtZW50IiwgImVhY2giLCAiZGF0YSIsICJEQVRBX0FQSV9LRVkiLCAiQ0xBU1NfTkFNRV9BQ1RJVkUiLCAiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCAiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCAiQnV0dG9uIiwgInRvZ2dsZSIsICJidXR0b24iLCAiU2VsZWN0b3JFbmdpbmUiLCAiY29uY2F0IiwgIkVsZW1lbnQiLCAiZmluZE9uZSIsICJjaGlsZHJlbiIsICJjaGlsZCIsICJtYXRjaGVzIiwgInBhcmVudHMiLCAiYW5jZXN0b3IiLCAicHJldiIsICJwcmV2aW91cyIsICJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwgIm5leHQiLCAibmV4dEVsZW1lbnRTaWJsaW5nIiwgImZvY3VzYWJsZUNoaWxkcmVuIiwgImZvY3VzYWJsZXMiLCAibWFwIiwgImpvaW4iLCAiZWwiLCAiRVZFTlRfVE9VQ0hTVEFSVCIsICJFVkVOVF9UT1VDSE1PVkUiLCAiRVZFTlRfVE9VQ0hFTkQiLCAiRVZFTlRfUE9JTlRFUkRPV04iLCAiRVZFTlRfUE9JTlRFUlVQIiwgIlBPSU5URVJfVFlQRV9UT1VDSCIsICJQT0lOVEVSX1RZUEVfUEVOIiwgIkNMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCIsICJTV0lQRV9USFJFU0hPTEQiLCAiZW5kQ2FsbGJhY2siLCAibGVmdENhbGxiYWNrIiwgInJpZ2h0Q2FsbGJhY2siLCAiU3dpcGUiLCAiaXNTdXBwb3J0ZWQiLCAiX2RlbHRhWCIsICJfc3VwcG9ydFBvaW50ZXJFdmVudHMiLCAiUG9pbnRlckV2ZW50IiwgIl9pbml0RXZlbnRzIiwgIl9zdGFydCIsICJ0b3VjaGVzIiwgImNsaWVudFgiLCAiX2V2ZW50SXNQb2ludGVyUGVuVG91Y2giLCAiX2VuZCIsICJfaGFuZGxlU3dpcGUiLCAiX21vdmUiLCAiYWJzRGVsdGFYIiwgImFicyIsICJkaXJlY3Rpb24iLCAiYWRkIiwgInBvaW50ZXJUeXBlIiwgIm5hdmlnYXRvciIsICJtYXhUb3VjaFBvaW50cyIsICJBUlJPV19MRUZUX0tFWSIsICJBUlJPV19SSUdIVF9LRVkiLCAiVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCIsICJPUkRFUl9ORVhUIiwgIk9SREVSX1BSRVYiLCAiRElSRUNUSU9OX0xFRlQiLCAiRElSRUNUSU9OX1JJR0hUIiwgIkVWRU5UX1NMSURFIiwgIkVWRU5UX1NMSUQiLCAiRVZFTlRfS0VZRE9XTiIsICJFVkVOVF9NT1VTRUVOVEVSIiwgIkVWRU5UX01PVVNFTEVBVkUiLCAiRVZFTlRfRFJBR19TVEFSVCIsICJFVkVOVF9MT0FEX0RBVEFfQVBJIiwgIkNMQVNTX05BTUVfQ0FST1VTRUwiLCAiQ0xBU1NfTkFNRV9TTElERSIsICJDTEFTU19OQU1FX0VORCIsICJDTEFTU19OQU1FX1NUQVJUIiwgIkNMQVNTX05BTUVfTkVYVCIsICJDTEFTU19OQU1FX1BSRVYiLCAiU0VMRUNUT1JfQUNUSVZFIiwgIlNFTEVDVE9SX0lURU0iLCAiU0VMRUNUT1JfQUNUSVZFX0lURU0iLCAiU0VMRUNUT1JfSVRFTV9JTUciLCAiU0VMRUNUT1JfSU5ESUNBVE9SUyIsICJTRUxFQ1RPUl9EQVRBX1NMSURFIiwgIlNFTEVDVE9SX0RBVEFfUklERSIsICJLRVlfVE9fRElSRUNUSU9OIiwgImludGVydmFsIiwgImtleWJvYXJkIiwgInBhdXNlIiwgInJpZGUiLCAidG91Y2giLCAid3JhcCIsICJDYXJvdXNlbCIsICJfaW50ZXJ2YWwiLCAiX2FjdGl2ZUVsZW1lbnQiLCAiX2lzU2xpZGluZyIsICJ0b3VjaFRpbWVvdXQiLCAiX3N3aXBlSGVscGVyIiwgIl9pbmRpY2F0b3JzRWxlbWVudCIsICJfYWRkRXZlbnRMaXN0ZW5lcnMiLCAiY3ljbGUiLCAiX3NsaWRlIiwgIm5leHRXaGVuVmlzaWJsZSIsICJoaWRkZW4iLCAiX2NsZWFySW50ZXJ2YWwiLCAiX3VwZGF0ZUludGVydmFsIiwgInNldEludGVydmFsIiwgIl9tYXliZUVuYWJsZUN5Y2xlIiwgInRvIiwgIml0ZW1zIiwgIl9nZXRJdGVtcyIsICJhY3RpdmVJbmRleCIsICJfZ2V0SXRlbUluZGV4IiwgIl9nZXRBY3RpdmUiLCAib3JkZXIiLCAiZGVmYXVsdEludGVydmFsIiwgIl9rZXlkb3duIiwgIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwgImltZyIsICJlbmRDYWxsQmFjayIsICJjbGVhclRpbWVvdXQiLCAic3dpcGVDb25maWciLCAiX2RpcmVjdGlvblRvT3JkZXIiLCAiX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQiLCAiYWN0aXZlSW5kaWNhdG9yIiwgIm5ld0FjdGl2ZUluZGljYXRvciIsICJlbGVtZW50SW50ZXJ2YWwiLCAicGFyc2VJbnQiLCAiaXNOZXh0IiwgIm5leHRFbGVtZW50IiwgIm5leHRFbGVtZW50SW5kZXgiLCAidHJpZ2dlckV2ZW50IiwgIl9vcmRlclRvRGlyZWN0aW9uIiwgInNsaWRlRXZlbnQiLCAiaXNDeWNsaW5nIiwgImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwgIm9yZGVyQ2xhc3NOYW1lIiwgImNvbXBsZXRlQ2FsbEJhY2siLCAiX2lzQW5pbWF0ZWQiLCAiY2xlYXJJbnRlcnZhbCIsICJjYXJvdXNlbCIsICJzbGlkZUluZGV4IiwgImNhcm91c2VscyIsICJFVkVOVF9TSE9XIiwgIkVWRU5UX1NIT1dOIiwgIkVWRU5UX0hJREUiLCAiRVZFTlRfSElEREVOIiwgIkNMQVNTX05BTUVfQ09MTEFQU0UiLCAiQ0xBU1NfTkFNRV9DT0xMQVBTSU5HIiwgIkNMQVNTX05BTUVfQ09MTEFQU0VEIiwgIkNMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOIiwgIkNMQVNTX05BTUVfSE9SSVpPTlRBTCIsICJXSURUSCIsICJIRUlHSFQiLCAiU0VMRUNUT1JfQUNUSVZFUyIsICJwYXJlbnQiLCAiQ29sbGFwc2UiLCAiX2lzVHJhbnNpdGlvbmluZyIsICJfdHJpZ2dlckFycmF5IiwgInRvZ2dsZUxpc3QiLCAiZWxlbSIsICJmaWx0ZXJFbGVtZW50IiwgImZvdW5kRWxlbWVudCIsICJfaW5pdGlhbGl6ZUNoaWxkcmVuIiwgIl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MiLCAiX2lzU2hvd24iLCAiaGlkZSIsICJzaG93IiwgImFjdGl2ZUNoaWxkcmVuIiwgIl9nZXRGaXJzdExldmVsQ2hpbGRyZW4iLCAic3RhcnRFdmVudCIsICJhY3RpdmVJbnN0YW5jZSIsICJkaW1lbnNpb24iLCAiX2dldERpbWVuc2lvbiIsICJzdHlsZSIsICJjb21wbGV0ZSIsICJjYXBpdGFsaXplZERpbWVuc2lvbiIsICJzY3JvbGxTaXplIiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJzZWxlY3RlZCIsICJ0cmlnZ2VyQXJyYXkiLCAiaXNPcGVuIiwgInNlbGVjdG9yRWxlbWVudHMiLCAiRVNDQVBFX0tFWSIsICJUQUJfS0VZIiwgIkFSUk9XX1VQX0tFWSIsICJBUlJPV19ET1dOX0tFWSIsICJSSUdIVF9NT1VTRV9CVVRUT04iLCAiRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSIsICJFVkVOVF9LRVlVUF9EQVRBX0FQSSIsICJDTEFTU19OQU1FX0RST1BVUCIsICJDTEFTU19OQU1FX0RST1BFTkQiLCAiQ0xBU1NfTkFNRV9EUk9QU1RBUlQiLCAiQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSIiwgIkNMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSIiwgIlNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOIiwgIlNFTEVDVE9SX01FTlUiLCAiU0VMRUNUT1JfTkFWQkFSIiwgIlNFTEVDVE9SX05BVkJBUl9OQVYiLCAiU0VMRUNUT1JfVklTSUJMRV9JVEVNUyIsICJQTEFDRU1FTlRfVE9QIiwgIlBMQUNFTUVOVF9UT1BFTkQiLCAiUExBQ0VNRU5UX0JPVFRPTSIsICJQTEFDRU1FTlRfQk9UVE9NRU5EIiwgIlBMQUNFTUVOVF9SSUdIVCIsICJQTEFDRU1FTlRfTEVGVCIsICJQTEFDRU1FTlRfVE9QQ0VOVEVSIiwgIlBMQUNFTUVOVF9CT1RUT01DRU5URVIiLCAiYXV0b0Nsb3NlIiwgImJvdW5kYXJ5IiwgImRpc3BsYXkiLCAib2Zmc2V0IiwgInBvcHBlckNvbmZpZyIsICJyZWZlcmVuY2UiLCAiRHJvcGRvd24iLCAiX3BvcHBlciIsICJfcGFyZW50IiwgIl9tZW51IiwgIl9pbk5hdmJhciIsICJfZGV0ZWN0TmF2YmFyIiwgInNob3dFdmVudCIsICJfY3JlYXRlUG9wcGVyIiwgImZvY3VzIiwgIl9jb21wbGV0ZUhpZGUiLCAiZGVzdHJveSIsICJ1cGRhdGUiLCAiaGlkZUV2ZW50IiwgIlBvcHBlciIsICJyZWZlcmVuY2VFbGVtZW50IiwgIl9nZXRQb3BwZXJDb25maWciLCAiY3JlYXRlUG9wcGVyIiwgIl9nZXRQbGFjZW1lbnQiLCAicGFyZW50RHJvcGRvd24iLCAiaXNFbmQiLCAiX2dldE9mZnNldCIsICJwb3BwZXJEYXRhIiwgImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsICJwbGFjZW1lbnQiLCAibW9kaWZpZXJzIiwgIm9wdGlvbnMiLCAiZW5hYmxlZCIsICJfc2VsZWN0TWVudUl0ZW0iLCAiY2xlYXJNZW51cyIsICJvcGVuVG9nZ2xlcyIsICJjb250ZXh0IiwgImNvbXBvc2VkUGF0aCIsICJpc01lbnVUYXJnZXQiLCAiZGF0YUFwaUtleWRvd25IYW5kbGVyIiwgImlzSW5wdXQiLCAiaXNFc2NhcGVFdmVudCIsICJpc1VwT3JEb3duRXZlbnQiLCAiZ2V0VG9nZ2xlQnV0dG9uIiwgInN0b3BQcm9wYWdhdGlvbiIsICJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwgIlNFTEVDVE9SX1NUSUNLWV9DT05URU5UIiwgIlBST1BFUlRZX1BBRERJTkciLCAiUFJPUEVSVFlfTUFSR0lOIiwgIlNjcm9sbEJhckhlbHBlciIsICJnZXRXaWR0aCIsICJkb2N1bWVudFdpZHRoIiwgImNsaWVudFdpZHRoIiwgImlubmVyV2lkdGgiLCAid2lkdGgiLCAiX2Rpc2FibGVPdmVyRmxvdyIsICJfc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCAiY2FsY3VsYXRlZFZhbHVlIiwgInJlc2V0IiwgIl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzIiwgImlzT3ZlcmZsb3dpbmciLCAiX3NhdmVJbml0aWFsQXR0cmlidXRlIiwgIm92ZXJmbG93IiwgInN0eWxlUHJvcGVydHkiLCAic2Nyb2xsYmFyV2lkdGgiLCAibWFuaXB1bGF0aW9uQ2FsbEJhY2siLCAic2V0UHJvcGVydHkiLCAiX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2siLCAiYWN0dWFsVmFsdWUiLCAicmVtb3ZlUHJvcGVydHkiLCAiY2FsbEJhY2siLCAic2VsIiwgIkVWRU5UX01PVVNFRE9XTiIsICJjbGFzc05hbWUiLCAiY2xpY2tDYWxsYmFjayIsICJyb290RWxlbWVudCIsICJCYWNrZHJvcCIsICJfaXNBcHBlbmRlZCIsICJfYXBwZW5kIiwgIl9nZXRFbGVtZW50IiwgIl9lbXVsYXRlQW5pbWF0aW9uIiwgImJhY2tkcm9wIiwgImNyZWF0ZUVsZW1lbnQiLCAiYXBwZW5kIiwgIkVWRU5UX0ZPQ1VTSU4iLCAiRVZFTlRfS0VZRE9XTl9UQUIiLCAiVEFCX05BVl9GT1JXQVJEIiwgIlRBQl9OQVZfQkFDS1dBUkQiLCAiYXV0b2ZvY3VzIiwgInRyYXBFbGVtZW50IiwgIkZvY3VzVHJhcCIsICJfaXNBY3RpdmUiLCAiX2xhc3RUYWJOYXZEaXJlY3Rpb24iLCAiYWN0aXZhdGUiLCAiX2hhbmRsZUZvY3VzaW4iLCAiX2hhbmRsZUtleWRvd24iLCAiZGVhY3RpdmF0ZSIsICJlbGVtZW50cyIsICJzaGlmdEtleSIsICJFVkVOVF9ISURFX1BSRVZFTlRFRCIsICJFVkVOVF9SRVNJWkUiLCAiRVZFTlRfQ0xJQ0tfRElTTUlTUyIsICJFVkVOVF9NT1VTRURPV05fRElTTUlTUyIsICJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCAiQ0xBU1NfTkFNRV9PUEVOIiwgIkNMQVNTX05BTUVfU1RBVElDIiwgIk9QRU5fU0VMRUNUT1IiLCAiU0VMRUNUT1JfRElBTE9HIiwgIlNFTEVDVE9SX01PREFMX0JPRFkiLCAiTW9kYWwiLCAiX2RpYWxvZyIsICJfYmFja2Ryb3AiLCAiX2luaXRpYWxpemVCYWNrRHJvcCIsICJfZm9jdXN0cmFwIiwgIl9pbml0aWFsaXplRm9jdXNUcmFwIiwgIl9zY3JvbGxCYXIiLCAiX2FkanVzdERpYWxvZyIsICJfc2hvd0VsZW1lbnQiLCAiX2hpZGVNb2RhbCIsICJodG1sRWxlbWVudCIsICJoYW5kbGVVcGRhdGUiLCAic2Nyb2xsVG9wIiwgIm1vZGFsQm9keSIsICJ0cmFuc2l0aW9uQ29tcGxldGUiLCAiX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24iLCAiZXZlbnQyIiwgIl9yZXNldEFkanVzdG1lbnRzIiwgImlzTW9kYWxPdmVyZmxvd2luZyIsICJzY3JvbGxIZWlnaHQiLCAiY2xpZW50SGVpZ2h0IiwgImluaXRpYWxPdmVyZmxvd1kiLCAib3ZlcmZsb3dZIiwgImlzQm9keU92ZXJmbG93aW5nIiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIsICJhbHJlYWR5T3BlbiIsICJDTEFTU19OQU1FX1NIT1dJTkciLCAiQ0xBU1NfTkFNRV9ISURJTkciLCAiQ0xBU1NfTkFNRV9CQUNLRFJPUCIsICJzY3JvbGwiLCAiT2ZmY2FudmFzIiwgImJsdXIiLCAiY29tcGxldGVDYWxsYmFjayIsICJwb3NpdGlvbiIsICJ1cmlBdHRyaWJ1dGVzIiwgIkFSSUFfQVRUUklCVVRFX1BBVFRFUk4iLCAiU0FGRV9VUkxfUEFUVEVSTiIsICJEQVRBX1VSTF9QQVRURVJOIiwgImFsbG93ZWRBdHRyaWJ1dGUiLCAiYXR0cmlidXRlIiwgImFsbG93ZWRBdHRyaWJ1dGVMaXN0IiwgImF0dHJpYnV0ZU5hbWUiLCAibm9kZU5hbWUiLCAibm9kZVZhbHVlIiwgImF0dHJpYnV0ZVJlZ2V4IiwgInNvbWUiLCAicmVnZXgiLCAiRGVmYXVsdEFsbG93bGlzdCIsICJhIiwgImFyZWEiLCAiYiIsICJiciIsICJjb2wiLCAiY29kZSIsICJkaXYiLCAiZW0iLCAiaHIiLCAiaDEiLCAiaDIiLCAiaDMiLCAiaDQiLCAiaDUiLCAiaDYiLCAiaSIsICJsaSIsICJvbCIsICJwIiwgInByZSIsICJzIiwgInNtYWxsIiwgInNwYW4iLCAic3ViIiwgInN1cCIsICJzdHJvbmciLCAidSIsICJ1bCIsICJzYW5pdGl6ZUh0bWwiLCAidW5zYWZlSHRtbCIsICJhbGxvd0xpc3QiLCAic2FuaXRpemVGdW5jdGlvbiIsICJkb21QYXJzZXIiLCAiRE9NUGFyc2VyIiwgImNyZWF0ZWREb2N1bWVudCIsICJwYXJzZUZyb21TdHJpbmciLCAiZWxlbWVudE5hbWUiLCAiYXR0cmlidXRlTGlzdCIsICJhbGxvd2VkQXR0cmlidXRlcyIsICJpbm5lckhUTUwiLCAiY29udGVudCIsICJleHRyYUNsYXNzIiwgImh0bWwiLCAic2FuaXRpemUiLCAic2FuaXRpemVGbiIsICJ0ZW1wbGF0ZSIsICJEZWZhdWx0Q29udGVudFR5cGUiLCAiZW50cnkiLCAiVGVtcGxhdGVGYWN0b3J5IiwgImdldENvbnRlbnQiLCAiX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uIiwgImhhc0NvbnRlbnQiLCAiY2hhbmdlQ29udGVudCIsICJfY2hlY2tDb250ZW50IiwgInRvSHRtbCIsICJ0ZW1wbGF0ZVdyYXBwZXIiLCAiX21heWJlU2FuaXRpemUiLCAidGV4dCIsICJfc2V0Q29udGVudCIsICJhcmciLCAidGVtcGxhdGVFbGVtZW50IiwgIl9wdXRFbGVtZW50SW5UZW1wbGF0ZSIsICJ0ZXh0Q29udGVudCIsICJESVNBTExPV0VEX0FUVFJJQlVURVMiLCAiQ0xBU1NfTkFNRV9NT0RBTCIsICJTRUxFQ1RPUl9UT09MVElQX0lOTkVSIiwgIlNFTEVDVE9SX01PREFMIiwgIkVWRU5UX01PREFMX0hJREUiLCAiVFJJR0dFUl9IT1ZFUiIsICJUUklHR0VSX0ZPQ1VTIiwgIlRSSUdHRVJfQ0xJQ0siLCAiVFJJR0dFUl9NQU5VQUwiLCAiRVZFTlRfSU5TRVJURUQiLCAiRVZFTlRfQ0xJQ0siLCAiRVZFTlRfRk9DVVNPVVQiLCAiQXR0YWNobWVudE1hcCIsICJBVVRPIiwgIlRPUCIsICJSSUdIVCIsICJCT1RUT00iLCAiTEVGVCIsICJhbmltYXRpb24iLCAiY29udGFpbmVyIiwgImN1c3RvbUNsYXNzIiwgImRlbGF5IiwgImZhbGxiYWNrUGxhY2VtZW50cyIsICJ0aXRsZSIsICJUb29sdGlwIiwgIl9pc0VuYWJsZWQiLCAiX3RpbWVvdXQiLCAiX2lzSG92ZXJlZCIsICJfYWN0aXZlVHJpZ2dlciIsICJfdGVtcGxhdGVGYWN0b3J5IiwgIl9uZXdDb250ZW50IiwgInRpcCIsICJfc2V0TGlzdGVuZXJzIiwgIl9maXhUaXRsZSIsICJlbmFibGUiLCAiZGlzYWJsZSIsICJ0b2dnbGVFbmFibGVkIiwgImNsaWNrIiwgIl9sZWF2ZSIsICJfZW50ZXIiLCAiX2hpZGVNb2RhbEhhbmRsZXIiLCAiX2Rpc3Bvc2VQb3BwZXIiLCAiX2lzV2l0aENvbnRlbnQiLCAic2hhZG93Um9vdCIsICJpc0luVGhlRG9tIiwgIm93bmVyRG9jdW1lbnQiLCAiX2dldFRpcEVsZW1lbnQiLCAiX2lzV2l0aEFjdGl2ZVRyaWdnZXIiLCAiX2dldFRpdGxlIiwgIl9jcmVhdGVUaXBFbGVtZW50IiwgIl9nZXRDb250ZW50Rm9yVGVtcGxhdGUiLCAiX2dldFRlbXBsYXRlRmFjdG9yeSIsICJ0aXBJZCIsICJzZXRDb250ZW50IiwgIl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQiLCAiX2dldERlbGVnYXRlQ29uZmlnIiwgImF0dGFjaG1lbnQiLCAicGhhc2UiLCAic3RhdGUiLCAidHJpZ2dlcnMiLCAiZXZlbnRJbiIsICJldmVudE91dCIsICJfc2V0VGltZW91dCIsICJ0aW1lb3V0IiwgImRhdGFBdHRyaWJ1dGVzIiwgImRhdGFBdHRyaWJ1dGUiLCAiU0VMRUNUT1JfVElUTEUiLCAiU0VMRUNUT1JfQ09OVEVOVCIsICJQb3BvdmVyIiwgIl9nZXRDb250ZW50IiwgIkVWRU5UX0FDVElWQVRFIiwgIkNMQVNTX05BTUVfRFJPUERPV05fSVRFTSIsICJTRUxFQ1RPUl9EQVRBX1NQWSIsICJTRUxFQ1RPUl9UQVJHRVRfTElOS1MiLCAiU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAiLCAiU0VMRUNUT1JfTkFWX0xJTktTIiwgIlNFTEVDVE9SX05BVl9JVEVNUyIsICJTRUxFQ1RPUl9MSVNUX0lURU1TIiwgIlNFTEVDVE9SX0xJTktfSVRFTVMiLCAiU0VMRUNUT1JfRFJPUERPV04iLCAiU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFIiwgInJvb3RNYXJnaW4iLCAic21vb3RoU2Nyb2xsIiwgInRocmVzaG9sZCIsICJTY3JvbGxTcHkiLCAiX3RhcmdldExpbmtzIiwgIl9vYnNlcnZhYmxlU2VjdGlvbnMiLCAiX3Jvb3RFbGVtZW50IiwgIl9hY3RpdmVUYXJnZXQiLCAiX29ic2VydmVyIiwgIl9wcmV2aW91c1Njcm9sbERhdGEiLCAidmlzaWJsZUVudHJ5VG9wIiwgInBhcmVudFNjcm9sbFRvcCIsICJyZWZyZXNoIiwgIl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzIiwgIl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCIsICJkaXNjb25uZWN0IiwgIl9nZXROZXdPYnNlcnZlciIsICJzZWN0aW9uIiwgIm9ic2VydmUiLCAib2JzZXJ2YWJsZVNlY3Rpb24iLCAiaGFzaCIsICJoZWlnaHQiLCAib2Zmc2V0VG9wIiwgInNjcm9sbFRvIiwgInRvcCIsICJiZWhhdmlvciIsICJJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJfb2JzZXJ2ZXJDYWxsYmFjayIsICJ0YXJnZXRFbGVtZW50IiwgImlkIiwgIl9wcm9jZXNzIiwgInVzZXJTY3JvbGxzRG93biIsICJpc0ludGVyc2VjdGluZyIsICJfY2xlYXJBY3RpdmVDbGFzcyIsICJlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMiLCAidGFyZ2V0TGlua3MiLCAiYW5jaG9yIiwgIl9hY3RpdmF0ZVBhcmVudHMiLCAibGlzdEdyb3VwIiwgIml0ZW0iLCAiYWN0aXZlTm9kZXMiLCAibm9kZSIsICJzcHkiLCAiQ0xBU1NfRFJPUERPV04iLCAiU0VMRUNUT1JfRFJPUERPV05fTUVOVSIsICJOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFIiwgIlNFTEVDVE9SX1RBQl9QQU5FTCIsICJTRUxFQ1RPUl9PVVRFUiIsICJTRUxFQ1RPUl9JTk5FUiIsICJTRUxFQ1RPUl9JTk5FUl9FTEVNIiwgIlNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSIsICJUYWIiLCAiX3NldEluaXRpYWxBdHRyaWJ1dGVzIiwgIl9nZXRDaGlsZHJlbiIsICJpbm5lckVsZW0iLCAiX2VsZW1Jc0FjdGl2ZSIsICJhY3RpdmUiLCAiX2dldEFjdGl2ZUVsZW0iLCAiX2RlYWN0aXZhdGUiLCAiX2FjdGl2YXRlIiwgInJlbGF0ZWRFbGVtIiwgIl90b2dnbGVEcm9wRG93biIsICJuZXh0QWN0aXZlRWxlbWVudCIsICJwcmV2ZW50U2Nyb2xsIiwgIl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyIsICJfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkIiwgIl9nZXRJbm5lckVsZW1lbnQiLCAiaXNBY3RpdmUiLCAib3V0ZXJFbGVtIiwgIl9nZXRPdXRlckVsZW1lbnQiLCAiX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbCIsICJvcGVuIiwgIkVWRU5UX01PVVNFT1ZFUiIsICJFVkVOVF9NT1VTRU9VVCIsICJDTEFTU19OQU1FX0hJREUiLCAiYXV0b2hpZGUiLCAiVG9hc3QiLCAiX2hhc01vdXNlSW50ZXJhY3Rpb24iLCAiX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24iLCAiX2NsZWFyVGltZW91dCIsICJfbWF5YmVTY2hlZHVsZUhpZGUiLCAiaXNTaG93biIsICJfb25JbnRlcmFjdGlvbiIsICJpc0ludGVyYWN0aW5nIiwgIiQiLCAiaW1wb3J0X2pxdWVyeSIsICJtYXgiLCAiJCIsICJDdXN0b21FdmVudCIsICJjbG9zdXJlMiIsICJnbG9iYWwiLCAib2Zmc2V0IiwgImdsb2JhbCIsICJsaXZlU29ja2V0IiwgImNsb3N1cmUiLCAiaGFzaCIsICJkZWJvdW5jZSIsICJub29wIiwgIiQiLCAidG9wYmFyIl0KfQo=