From b484a4fba0f8f72b6ffea6105db777c278b9e9a6 Mon Sep 17 00:00:00 2001 From: Travis Cline Date: Thu, 7 Apr 2022 00:31:43 -0700 Subject: [PATCH] playground: Change to use stdlib embed instead of packr (#360) --- go.mod | 5 ----- go.sum | 5 ----- pkg/playground/a_playground-packr.go | 15 --------------- pkg/playground/playground.go | 17 ++++++++--------- 4 files changed, 8 insertions(+), 34 deletions(-) delete mode 100644 pkg/playground/a_playground-packr.go diff --git a/go.mod b/go.mod index be677b0295..6671964284 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/eclipse/paho.mqtt.golang v1.2.0 github.com/evanphx/json-patch/v5 v5.1.0 github.com/go-test/deep v1.0.4 - github.com/gobuffalo/packr v1.30.1 github.com/gobwas/ws v1.0.4 github.com/golang/mock v1.4.1 github.com/google/go-cmp v0.5.6 @@ -47,8 +46,6 @@ require ( github.com/Masterminds/sprig v2.22.0+incompatible // indirect github.com/agnivade/levenshtein v1.1.1 // indirect github.com/fsnotify/fsnotify v1.4.9 // indirect - github.com/gobuffalo/envy v1.7.0 // indirect - github.com/gobuffalo/packd v0.3.0 // indirect github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee // indirect github.com/gobwas/pool v0.2.0 // indirect github.com/google/uuid v1.1.1 // indirect @@ -56,7 +53,6 @@ require ( github.com/huandu/xstrings v1.2.1 // indirect github.com/imdario/mergo v0.3.8 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/joho/godotenv v1.3.0 // indirect github.com/klauspost/compress v1.13.1 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381 // indirect @@ -72,7 +68,6 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/qri-io/jsonpointer v0.1.1 // indirect - github.com/rogpeppe/go-internal v1.3.0 // indirect github.com/sirupsen/logrus v1.4.2 // indirect github.com/spf13/afero v1.6.0 // indirect github.com/spf13/cast v1.3.0 // indirect diff --git a/go.sum b/go.sum index ccf7c79d1c..4ea709cbed 100644 --- a/go.sum +++ b/go.sum @@ -62,12 +62,9 @@ github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1 github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho= github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= -github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg= github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk= github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -129,7 +126,6 @@ github.com/jensneuse/graphql-go-tools v1.20.2/go.mod h1:9e2CqUwCY2lvC7PWnvvOjH2X github.com/jensneuse/pipeline v0.0.0-20200117120358-9fb4de085cd6 h1:y8hvuqbuVGFNpEos+vB5I5X+QxWm0uyTk+5oeOinMjY= github.com/jensneuse/pipeline v0.0.0-20200117120358-9fb4de085cd6/go.mod h1:UsfzaMt+keVOxa007GcCJMFeTHr6voRfBGMQEW7DkdM= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -214,7 +210,6 @@ github.com/qri-io/jsonpointer v0.1.1/go.mod h1:DnJPaYgiKu56EuDp8TU5wFLdZIcAnb/uH github.com/qri-io/jsonschema v0.2.1 h1:NNFoKms+kut6ABPf6xiKNM5214jzxAhDBrPHCJ97Wg0= github.com/qri-io/jsonschema v0.2.1/go.mod h1:g7DPkiOsK1xv6T/Ao5scXRkd+yTFygcANPBaaqW+VrI= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= diff --git a/pkg/playground/a_playground-packr.go b/pkg/playground/a_playground-packr.go deleted file mode 100644 index c4b7607fe7..0000000000 --- a/pkg/playground/a_playground-packr.go +++ /dev/null @@ -1,15 +0,0 @@ -// Code generated by github.com/gobuffalo/packr. DO NOT EDIT. - -package playground - -import "github.com/gobuffalo/packr" - -// You can use the "packr clean" command to clean up this, -// and any other packr generated files. -func init() { - _ = packr.PackJSONBytes("./files", "favicon.png", "\"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAATiElEQVR42t2be4xc1X3Hz6x3jTEhEMIfKYQmRDTiGapAVNQqStOojcCoiioaJVVCqpSoQlFCotixsb3embvrdQwBY5MSMBCcQIDgACmPAqEmQPEj8TN+rPcxc8+d9/u9855Z9/s799x7Z3x35l6opUas/NWZe+d1P9/f75zzO+eOWZr9iJ1iB9nj7BuenezfhursPhxvZ1ewj7D3y9/lYCGmBtiIkVjBLNjZ59hl7Gw24jmXLRvC42Evu+nicXbzx8bYTaa8UmNG+551o/M5HEO24/eiDV1S2Ao6dzExnsvOGiJmYmdPwA2YNPQ99vkPz7ANL6jMWwwwbxrKSGX/BJQ7A8qCrUSMxErMgv137LvDp5Agf2CrVgWZckpjvsPQMY0px0lc1wmpqS6d7NK0pmvGkm9Was4QZz6/VECXoqI1xEl4r4bXkoK6FGpDUmFdSpijhSK6lKguHylGwmvieC0poUshxYgRrCvBLNjZs+y2EWnANjxZxJvfhvaTVF0HpA5KHerSYa7riNQfcSEQtd6jUsc4DMVrjyMCpBN4bGgKxySY6CNN4/VSvhmpWRyT5rg0URXyUhuQUnV5uSqMVCCfhveQgngMKSGO94BxAaxbwSzY2S/YrUvpYC/7ARlQwYt3Q4e4hOVCdlAVohbuHiXhC45pEAcoB6gGcUAKSVBuglqwOG+Cajpod9b46aJxXmYMpIMaGWOCqiQClRmDc1BPxkRwjlMGgPU+MAt2toN93TDg/m4D7PCWARa8IuGpVUSkBbiENyTgITu8z4x0L7wioq0BnpPs8JAiDDDguR3e6jI6PHUPGDBOBlAGELvNgCouao+Et0VfJVGKQxpkRP7Mwkvp4D3wXEae4NXF4dF6CRxSwpABH0ErDVAGGTAuDNCBFUi0JIInGfAAl5EHuHt4r4SX4IvDG1F3EXmfLfImvBwkNRNeidLrYYBjBuwl8NMjT+CnwR/rB0+DG3eGn9WGFJIA5xLeHnmv2effCzyX8GhjlC1uMmCv0dcteGvAQyv6u2PkAW2JwC14Hdw3q7L1MyTNA/ghxRZ5Ad4Lr3XDQ93wYQteRP10eMgXdDKghhft6xnsrAGvB57ET4cHuISH+sB7FB18aHQ2euUDWvTaB4N8qXdOZWvn8FygG149Q/Ac8GjjugHjzgYQsD3teyNvwdv7+2D4dTORa37C6wei1YXOgvhrzmQa8c8/FsFzc3xo3ADvA6+8a3gV8DgmA0JuMuD3EIGTFkv741pfeHvkuQlPBc3YbPC8SX9TzTVO4Y8MINHjdqHWDv/F1qDKRgN8yJzjbfCagPda8NZID9nTnlqCR5vAsaMBdTKAgBeBh7xGn+/p7/36PO8e8IaVuQBbM525/aWEgG+0F8w/PKZzhc3v5PxstZ8Pj/fCnzbN4XyfyAtwC15GXm+9ZEDYjQF/IHBb5K3qzk3a98zxZEBw2aTfz1ZN57yvp4QBrY7JT4/pXGnHgeIcW+nXlk1SP+9X3dki7wYebVLF+5zGgDqHAQRsVXcS3l2BY4dfosxBFP0ZPuKbKz95rCgMaHco/XW1dQOqb6gV7bxNGrJA5UOI/pLxQZEH+CLwkIC20j6htwoZEHHMAFoEua3uVAPeI6o6c7AjYZoD/DiN7jTVzaa//ny8FSs1RX/P17ryXx8DOkWcgxE0FmTueCWjDo9pAbaW4zNCmCJNeLQ6vAcC9AB4yILHuRSOXRlwgLuFH1Km+RIF4GMi8ogYwBUCn+We0ZkAWz0du+HRUH1fuCogy41O5tsvJ6uv++fpuMnzzSbPNcUwcCxRT33zN6lWvNyi5xonUo3EF59IInM01bM+pC2ZCGMWieCzKe2FtKHxKGYNSnlb5HvhfSQyIOpkQIMMgI47wnvGpwOe9VN+tmZKWz45y5eOA3jNSR38h9Ohi34cKP/yaAHhFVEu/+KPRe2c8UDsC4+ECXD+uakyjFMDbFQt3LM7T+dStz2bCrB1vLhlX3Gh3hKZUXlpphL55P0xmBning1hfEeYD/uiwXM2xfDaCBTlHkxxdvhkNzyyJU2Z4rQYggHegwNKWwuerZsKX7ktUPmv2VIrUW62wsVmcdu+bOjCuwK5dbtSiHabAGq7g5XY9dtDAJhVl476GyfTDTIkfMU2nFuvwgSuXTAZbCfKrQ7SP/hnm0J+tpITdOXFmYoxYxTu2VMMXrA5hs8uYBpt4fXt6pu8Hr1hexrXEsM1Idr2yGuAJ3HdgBgYnQ2ATtjW8mZ/p5QfPRm65J45o08bczmBoS8L8Fao0Ex95ddxqvDU4Q3+ALvTn131apqey29+m6a7AB+e0DDliUEv/e//KZ4r/sfviyq7M8hHxkIBtIm/fzzVOJFsyFqhYwyY5tgx3+hEPv1gGmbG0SVF5O3wShrKOBmwTRpwaFBpiwue9rMfThXu3p2hC0CqduRobs7npUcPFfjwGKDXYP6foLI2ELzoLq1TrLdhWks7f6NGkcfgaU5zMDVY3x+p0/uj1z0Qx3FIG5mIwIwQBtFw3vemPns02wvmDCK7SfmpY1U/uzOOMWhReA3CuQx44i4M8B0i4H5zPAa9GXzZFPpmSU5ntvk8/Z0XEgG2ahbzuQrDVBg2V9y+v6D38+dTFH1crFnX00gPUC3+hccSot+/NldF5tDoH9HOmogiE8LxG3ekbd8nM69+MNqEoQnAyv7uBbgJDwFeV8LJgCbt8w0qbQFEo/vJ0kMHcrJ/milJ0RGQX94ZD9DiZumEitYf/asHI2I82BuqUb9H5G3VHUygAS5YfvqomCGStzyVpgFPG9kYRQZEop95OLWAbzEMMLJBGPbyTB3jQAIzQl94tFmXBngP095dv+oOUw8taKaj1z2odWrNjoS3onEkXuPDCq3jA+iTZECguisgBrPY3z4awzHHhdoLHA/t220IhS/bEqNMas6km/wsmt+hISVGo33lpena6VlAx/EVv8zjcxMouAbAK5Av6caAI46l7ZAiCpzEiici3Qub2pu8EvrEvRoi5ucjExxTZCD51WdEWpefOFKiwQ6pbyttzQJneDyCKTSUV34nukt2zW8LeE8EnxVHise0D00m5neeqC609MijZminbn2uoBK8R8Ab4BDAe+Fz4HA2QG6ATPcrbTlJ7OaMi/I2eMFkgLpBbXeo6ke/V5dsCGCm0Je0yxXeDOSaNFjBmDAGNg3T1YDSVtb2H5iItoL5Fo3wwUvuxpS2IYasiasjvvgc+360/PMjorAKX35/Bt9JkU9T5A14K/KKCU8CWwp1wEADWrQUdrFra+7dBT8wqVJXqL3FK0hDRH6cI8qcBrrchl1ZutDc2K4cRR8zQsgOT7KWs6j4ojA2kvzazqw+oxycRybF8JkJfHYCj+Olhw9UhAGf2ArQDSlkpBl5AQ7xXnhSngwwtsUHGOCFAd4Zx11bDxkwBgM2wYBWp/a2VsVoLZayiJgauvTe0ALOo4s0+fJxcxNj8K6t3MTw6H2++hbXp8W/3p6BuXG+dGNSGPDIQZEBkUu3ZpFVMGDcgl888nkckwFpNwYcdbNrCwMCZIB2ziQXBrwlDAjgIjVcpFp+/HBJjOb/8kwK52lR47hry0XrRborcaruAC6mPjICswcyQBiQKD2sGxC+dBsZkEYGANq7aORViODxuAA2dwZQH18Mnnft2tL+HQamQK8B61Sa5mKfeyQml7dVzBgaXtsPfrHtKxKKmokEpX7pET3dk1/7dYGmOtQLyS4DcroBos8D2h55Ca8bAIOcDGirtArsc5tKwkOKGOjsBqzFuVFe2xOqidS94aEYGWAsZ512ba3VHORRADuaCF7y4xQNhi0t3w6evzGFWSKJLiAN2ArI9ZQBNnjIhFcBj7boygC6mWmO9ARuu0Uld249PjJAhQGaMOCdUG2W3eFPfet5kbal7ftLKJg4FThO8Lx3787cyEAWiJTPrn5NdKf8xJvzc+y7ifLPDtcsA0YzGAOsqU5IMeALhnCODMi6MeA4J2h72kOKeYsKBnAVrfbBHwVpPUDpjvTXaD3fKdU7oYvvEoUN0t/lrq0FL5XkxnL2LG+qOZ1uUeGjnT+ZwYJJHwQvux+QGzL4Dhl1yA5fJHicK/F3bQDAoZ7IEzQJKUoGcHX5GF9oYsp+8eR8du3rYurCqi+LVNUw7QHa7a6tBa92r+hQ3VG/T/7TU6I4Kv5kX7Ww5R0xLoQ+fjdlQBbrE7R2eJKEh3wlKOdogNz09NvSXkZeFS3gkQHU55O3PJNc6KB01fJNijx2dhp8qdyy9ujwUlFkghV52w6OFMCtRY1QmqY5jCVpqvmpDG5MpcSuUeb2l+cxBmRVj1fAq4tFHtIAD5VdGDDekctgK/JS3TcnIQ3pzks79KluoWOtBAv3vlOQ0Y90w/P3Co8CB5+VwXiSSn/7hbLcUTbXHpVX5pp8qZjj+8NDeEwG5J0yoEObIX1+kECiKk/M86lvPNe7vS0vqFNtdsKf3Baj5SwfGougj0JjERRHUamYrrE4WkMJXWNJtEmq7nSNpbhnLC1G+g9uzLbChba1GLL2H3Kjb1RxTXlcmwWPthfevQFTA29LL1GEAfM7j88bBlDbvTqj7Sra7KStq2agn7L95TfVxrFQK1psi8/HP2oNI+Qyu4WxoIBxqQeeS3hNh5+HCi4M8E0J8D4/SIABQRjAsSrrMaD7Vhf2B1uNw/FGK1hokWCEG7V7FIB4vo2ttXbjWLKFvcS2kfrSb8uAPaFWQBpAo30vPAR4lwaML9Cm58AfJGA5i9JWS9/6XNrcomoSNSQvCJFrJlY8maFFDUmO+Gbay3Q3lORm2o+R0rq8GdUzSqu9dPjj9+Wrr841zPRvQc221QXW76phl6qAmsOAL3fDk3BcocxwygAY4KU9AO70gwT0y2B5x+Fydyp2Ko0O9ucq7Wy1LUvhWuSan6aQMVHVM0Z7dtaA51GSOE5pJI+SNgY8HGdQ2pJ5ae3cyWzxvn1V0a0ylU5hy94atd3fiV1pDIK9aa/ZIk/w7g2YdronT+IeL5kQStz8ZLq4dV8pv+l/itFPP5TE/l849OdbEuWnj1WMCy3+dP988MLNeG41dm5R2AxvTOoD3ppkAKLI00hP8Bg801TdZb71YrmdqwpY1P714Ic35/HZufBl24q59W/UClv31ZP/vLOCO0iAH+sLr1nwVXCUnA0Qy2BFG/CDBKuuH1LEri2mPWh1GIbQej6G1I1S1GN/87NMfX9U39LOVjqZ77xSVIe9ZFIidOHmdOqWZ4qprz5bDH/03iyMSEHp+GcfK1Cfp/dgid2MXP1AEcZlkUF5lMYFGuxoxIcKqEOK3EPQdnhNwmsS3q0Bp2gp7OYHCVy0XgArUUSPRMtY6uvU0mpOLGlx9yie+tffFLAdLrpF/VCsmV35Wsk4Nvb2s99/dR53kurynkI7+aWnywDMod7IETi6DOC9+kA3PEEqdfd5Cd7b5yW8VA08ZRcGeGcAGvy//iBBX9IqCaS82MTQzt2Ywv3/+YVGy5o22x1dC2YNsZBb90ZFXerNYVDLYhssD8kix17aaqeN9La0tyJfw7FrA2adfpCgub8nD9FgN5HC/bzkHLsjnlv732U5exjg5nZ64b69VawoM3xEoXSXuzgDqzt75O1pXyV4qK7ieTddYO4M/SBB3pOXpe3IOO0MJXNrd/XUD8A3H2OdX6e0xy6wU11vjzzJFnmAm/K5M0CuBENn4gcJ3Xdq5IImFf+7nxcMA6TM+RxjxTxSPydLWpKttHWf9ha4VAPXWnEqhMgAf99dW3c/SEj2wEPmfr1HydCqDpE2b3BAclEz28Cq7rTI20pbGzxUcYSHcM40YM+gDJBL4PDAXVvnHyTY4EWr36DM4D5/Jn3bC/PV1/yN6i61mf3Bbyt8mQ/wXgGvkiz4vqUtwXOX8Byi5wcZsFUaEOAOu7Z94JP94Akcn2PerEAmZDEe0FY32nU5SnvsL/SB71/aau8CHu9pujTAFyDwQbu2OO4bec0OT3W9bdcW/TxnTHO4l1DoA+9U2lYH93kLXhpQczBAjAGqq11bQEv1uydvpjxayHHX1j7HI/IDStsBkVcM+KYFr7TIADddQKWUd9i1dQUP2SKvkhz27tyXtha8aoeXaS/hIXrejQHc7a6tak1zTrelIaddWwnvvrSFeiOvSniC7obXdPh2lwFbbAbskQbIlWDMnvaAllLt8Om+8BJcddiyHlDaVvqUtk7wLQkPAV5Xw2bA4/I/Te1jK41KUIWigIfQwgy0kJ4JUtIMrznqW/KmhSHSCLwvi9cbyknlpXoKHqmSVFlqvksVVVdVqiZVJxFgl5pSLcjKAKsQEuzsV+ybI3TwNvvenSF9EEzIzYmMJV9Wl0LKkYIAQJsP6irgmFTEOVJJSPZjqXnI7MtSVVIQkdQs1fEaSGl0qdmlllSbxPW2Q6LlvGbplNlaj1vECNY1YBbs7Hb2WQ9jbOkX2RUfO8rWvuJn3vIcG8tBeQcVjPb/WUWXKoBtnhiJlZgF+xLmYUPMM4z27PPY2R+6iV31l//Irrl+BbvqMyvY1Q66ypDzsaXrz5RuMltn3cyuvv5GduW1xEiskpmxf2CXM/q7hl00fC27+Gw8XIbTy9Ge836SZFr2KTASK2OSHU6wj7LzhQlXso94vsKuW/Il9qklyIL3lYiJ2IgRqMQs2P8Xy1UFKvk8fQAAAAAASUVORK5CYII=\"") - _ = packr.PackJSONBytes("./files", "logo.png", "\"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAB88klEQVR42uycXYhd13XHz4ykWDOSrI/KdkOp8xAnENIvpym4UKgbCoE+lD60JQ30paFQCEnTPiQxsax9tk0DhfShD8VN++SWQKCkgUBf0vYhLwVblq0PW5qvc86MNNFXIkuRHdfSzKhrnbPX/M9d65yz770j3euoZ8iftfc+utcT2b/1sfc+K+l/+p/+p//Zyc9Mr169pqNpAj/boF29evW637LsgcsJQK9g313Tnl69et1vgTlwaJ3BvYYf0AP2DwQ9VNNepblevXqNKcsTWAN/e5QzuDdOIAL+Q7PJzN79yUPzR5J9+36OdCSZ3086cLjU3IFDlR5m26tXr1EEdpglZupIpf0layRmjxlkFiOOYAfwW/D3ziQzcx9LHjvw8eSDB2l+gDRP2he0v6YDvXr12rHAFDhj5koGmUVmktm0jgBOYHz4kebPHU327f/F5NDBsJ58Mnn80F8kv/WhLye/+8RfJ5964q+S3/nIX5Z6+iNfJH0hefqjX0h+u1evXiOK2WGGmCVmitlixpg1Zo7ZC7zuZiaZTWYUGYFyAjuFn1OSJ5JHDvCz/06++PT55Ng/rSTuddIV0o+Drvfq1es+CZxdYfaYQWaRmWQ2mdGdOoGZBvjnqe7gL9739eT3D59Lnv1mnqSbRZLeJbvFtlevXpMU2GMWmUlmkxkNrM43OIGZUaL/HoF/X/IBjvoPP5N8+shScvz74R96h3Q7T/wG2a1KvlT4xWBlLMKfV5/x4Xl9zX6HlYfMP9fXxy2/i/19CvxZJVmPyUOR5xHZvyfzu1rl9b/H5ufqu2S9Jvz70M8if1d+TMX/rooxvgf/H6Bc2Tblzf8dq8+l+rut4v+9KBv9e94M7N1mFplJZpMZZVZLZuEE9gyXBdjUf25XMrP/g8nDR/hLFpJjL+YV/O8Vid+UXwbOYHQVyt5D3Xl/yo/1uUJZ/p5iGr/T9LXRIfx98bxD+K6faYmj32QmmU1mlFllZpldZliXAsNG/72kfY8nhw/x+AfJlz4V/oEb4R94l/QOabFI0tdJr1Vypc0H9XqeeFLaIX8qq8ZkK9GaGnuxSqnoNM1P5yS2PJc10hkak3yHUtFZEX1XqWJ7nIa5fwNKS6vX8kpv0jworcmVyiudYxXKKp2n7yL5oLQUr9PvSXKiBRY9W8C4slC6SN9BShczsjQPcnUtVUqDtaLPL2cktkXig2TuSGLdSpPkGf15Fs3TjL5jBUqD+M+4TERrwfI8ra/n+ba8qLbmcvp9CxaNyTqyKVuldFVEny+VBeGZWyOr5GDx/AKLvqNUAYV5SnIXyTbIbYt+z3UWfU7E82sCPjMpToFZZWYDu/t4HM0C4AAQ/WfJg3w4OXqUP/xm8uw/h9T/tsBfJP5VWvsfGr9MeqWugtYKzE90y5/IkvTVnJQlnqyM2bK8jE9mJJqT0po8VP4ZcTw+CHOMG53QtrLKnmKHVAQHxLYINodKh8NWJGtFJXl+ppIrJfNiUGfpGSltkWe9kVWOJViHMfRmRo6FbTlmiznJ89q5LPHnaB7kgoXEwZCFzJpnu1CQ2FZjx1Zr0cqVtkg8ied+qVJakyttAS3n4lxImLP1pG27UskH60qbsSVl1fMsEyfCCmPI0/M0Z4kjgRwsKzgTa32RkXhclA4FwtzVtTaotFSReJbML7BovsqOQphky4wyq8wsszursoBOB6Br/73JnofJHqGzxkeXk+OnggPYyMnyv/AAPzuBE1q5WABtBOgBs5WHBcgWcFgFtLKsALSRZBskCzFUDOpMkwTqvBqfhRxbCIC/0SwXrC9VwQwx2HYNEFt5sRZoqwUryS48WZbAyyC7oNRIAIZcsL5UXlmAzVBr0NkiWxCwa3MP4APEGeDGHDJAQ15sUSkVAW5oFXIylqwhwM6W4WWQ0yCHMXRBCRmDjAl6sgz+xeBEruWBTWaUWWVmmd3AsN4LmGmt/+WyD2k/3TQ6TPbwZ5JPfJSPHfjLUQaUkL0cgH8l6ITMOaoXAXCJ8mwxZwH+zDqIk2wD+AL/QKQP0GMM8HkMhwAHAfhVxOc1thlbwH2KlQcrawr+BoeQhnEK+CnqV0K0h61gh0NQmUCAn+FW0R9rBn44CMy9jAXwWuR3WKvDDyfBCuu+tBK9eVyUcmJpPawB/kXIyRrJy3hZOwi1DvgR+SXi09pA1M/qkZ+VMfzyHPCryO/zYDMFfy4C/DwG/Dbq85qX5yXcXEqEqC1akzHgdyw4BCkTyjHg5zW2efXsh2Q35WSOWWVmmd3A8H65JIQyIJL+kw7Qh4+wF/mz5KmPryTHr4sDCKnGa4Ae8IeUP8AP6EWZmgd4Swt5rAFmZAACtAJdrMoC6msAX2UBkvIj0sMRQAp+sRgL3DIG5CbyW/h15Af8Aj2tqdRewy8WcgI/C5F/YF/BAXyrhYwkNqPPV3Nfh78z8sM6Vhh7loyXSQI+MgAFf1AA3SHqG/hTAR6RH+ADfhP5fQ3+VIHeOl9l8ElksW8g8CN1J/AR+U30B+ROR/81BX+1jn2CC3nlADbCqc1dZpWZZXYDwwciZYBxAPPhKIHr/6N/mvzGLy1vOwC/7QByG/VpLvCTtbCfgANA1G+HP1XwA3i1BtBtXY/ID8hRw4fID+BHhh9i8AV+RH0Nv9T/DfA7AR/wA+43UNdjTUd9BX4dfgFcR3wb+bGGlB+RX8Fv0v6FNvhV1Bf4FeiuE/5Cpf0CP+AV0F2pbBD+vBl+RP4wLoLNVdqPNQYdzwR8seE5g89KFfwS+ePwBwvgZYzNQZq7AQfArDKzzG5gWMqAuAOQ+p90kD78CNlHPpt88lfaHEAu8JMAPK95Az/qfn8SY1P31+D3Bn41BvyI7GpsI38pnCAY+Nkq2TVb78sa4Af0gL818gN8thL5BXTU+jH4XUvND8gV/Oe64GdJ5C+BN/CncfihetRnIe034Fv4JZ0H+D44ArKA30T+OPwQ4Af4LIBv4c8N/B5pP0BXGhV+jzFODVodADPL7AaGD2IfoMUB6OM//tB89eFHP5P8+q8uN5QAsgfA8AvgqP2NEPmDtfIx+PUagC/lRSgLTJTnuYBv4UcUB/wKeAO/qvej8AvoGEP0XVLzC/gjRH7HUmtewU9S9b6t+W3kx05+FP6lzsgvYAP+OvhYU/DbqM/iOep9bPBFIr9K+zG28GOs4LcbfmGdLMMbj/wXLPxewd+a9gv8wVoHwMwyu4Hhg/Y4MO4ADtGHHyX72B8nn/g1mwFgD4ChV5CbsdrYYwF8rKua39T59ZMAm/bbDKAEX8PPc7lzUCj4AT6escaHH6qgR5QvVOQH/Cng5/HokV/qfR35Dfxdab865pPjOg3/QmPNb3f7O1L+tC3ysw2gO5XyC9w+HOkR9CTU/k3wOx35s9oY8ENI+zsjP+CXo7piqLTfqcjvm+APSqHwmS4HwMwyu4HhQ6M6gP2VA9jzGH/JHyVPsgN4q54B5CgBGoD3WKvBj+gP+HmM536YyA/QzfGe3elnK5K1jMVjBj6sA3Raw3k/wB8Kfh7bzT4NP9sgVe+j5h8NfkjV+6T2er+z5pc5jvp0zd++0w/w4/DDWvgBPs70FfzmuK8T/tTCD7hzG/Vd+4YfIn8B+OWYj8YCfjTyA35s9nlV7yv4MV/PORsIm4DhVuBdZpWZZXYDw4eY6VEdwOG56sM/T1/2pHYAAbQTRTf8MlY1v0fUj0R+RP3m3X4Lv2+HH9lCSPvFQrxGkvFO4Mc6oG+M/Krel2dj1Pxe1fxx+CGHMW4cCtzlenyzj+VaIz9L1ftKgB/pvivX5JKPPuZDyu/a4bfn+yrya/idhl+Al7FE/jAH/CryYw6ZtB/w280+lfYPwk/i9XzAAaTiAJ5kdgPDh8dyAPPBAfzhgAPgNEMcAOp+gB/mcAaI8JBaA+wY2zN+rCv4eR1pPuBXO/046jPwWwF+thDO+fUZv4x15EfN37bTz8JOP2kAfjgHAR9jaMSdfhbGUIadfpLAD/Cban5YIxP5Ffim5s/FIvJr+EkAXdJ+nlv4nY38eF40RP6uM34Zy4afgp+tj9X8ax2RHyk/sgBIwR9S/2D9JZ0BMLPM7vwYDmCu3QF4bAISZPVd/3rkz8gGnYRFyq8jP9Y1/ABe1f4461ebfRjDAcg7BIC/9ZiPZdJ+JQV/2gY/on0YY461Sh6XdjT8GCv4nan3WaPD7xT8foElKT+Aj6X9zuz2k7DhF4E/jxzztR31sc1a4GcLod63kZ/lWuFni3N+gR/A58HqyG/hd5HI7xXorjHyh2dkOQvwoziAuZEcwJxyAKYEAPhwBAH47sjv61d7AT7JjgG5VYq0v+GcHxd8UgO/cgDDbPid7oz8kIW/PfKXsOv7+/W1WNo/fuR3Bn62Fn7HEuDFmt1+yEdr/rbbfaWt4BcJ/ABf3d/ntcze7muJ/AA/Cj9bG/mx06/gj13tDc9iaX8X/OuVXB1+sp7m7Q5gbhwH0F0CpLYEQBYA+O3tPu0QVJQX6+W5QC/PI2m/b9vwK8fRM/74UV8pDXrHHPDbc34Fv4vAH7vg4wVy1phpvw/zUS74sFwX/PLMgG/TfoBfsMI5P4D2gL9uze0+13TMZy744Hw/HvkzFflxzj9c5Nc1v6xHjvks/DIG/GQjJcA9dgA4BkQGoM74fYDfN53xm8jfmvYj+mv462VBI/wS+UmI9nAC8TN+W++r+/vtkV8gj8AvsHPNj5S/E36nI79I7fa7kdL++jGfSvst/FZ6p78Fftd6zFev+aXGL1DvRyI/4IfV8vUz/pFr/kxHfoa7G36s2cgv4LPUOb+u9wE/nAKBL/DDEfBazQGkE3AAKgMQ4FmZgA7Zl3pgG3f7bYqfKvgBvIE/gJ9hjsg/OvyI/p3HfIBfZQBjXe2NR/5URX432tVe3O1HzR+P/Et1mcgPAfbOCz5sEfkhL/Ar0F2WdcFvj/n0Sz1su+HHM3PBR73NR2OAb+AHwF3w67S/ud7HszrwEvmn4QBQAqh7/axXx7ndhw1A+yYflGr45VnzSz2AfFz4TwN+W+9DiPbtab8fiPzVukR+NyT8qPchc9RnSgFd8wv4SPsjkd/U+67tjJ/n8ZofN/tQ76uXeooa/LmCP2uN/C6MPda0bL1vr/cCfJKseUT9QdC7zvhb4UeU95G0H5GfhcjvBf4f8nyCJYCvO4BTiOzmWE/UWPMrnex4kQcWY+z068hPUvU+rY8Lvx8q8uNiD9n4Sz1hTep9N+pLParGt5E/frVX5oj6O7va62WMqF9pqRV+jA38uYIfDgBrsciPcWvan+u0X0V+3OknyVt9YRy54APw1fVefa8fu/5N8GNNoF/PFfx8/l8MZAD+fmcAOAZkwAR6k/bT3N7u8+3wA3hzzKeen1I3/RD5WWqnfzz4vYLfibX1PqBXR30Mvzz35ZqO/FnsjN+m/ffgdp9H2h8gN5E/Dr9IR/5gHcaq5rcbfvaCjznjZw19wcdjbcSrvTbye9zuG4j8LhL5AT4rXu+7hprfkVDzwxr42U5tD4CAa3QAGKO2j6X9CnS10w/og4UDkMiv6/3xI7+93WfhB/jNd/vRvque9sc2+yJpfwf8kN3pdxjX3uhjC9Dd6PCj5gfwkZofqT+O+dpf500V+ENH/qIOv97th7DZVwnv8SP6V/BHX+qJH/N1wO+w1hL5sV9gIn9wAO7yVDIABj8T6G3aD/iRBZh7/UEYqzWT9mOMDj5BbTv9Efjbmni0vNEH2LGu4G9J+60DiMNvI38aj/y2fdf5EPkF/kUNP8/j8HvAr0CPw+/0vX7Aj2M+7PY3R/6s63YfWne1bvbZO/12ww83+lqbeLjV2GbfOPDblF8u+vAc8OcCPylL3HQygEz2AJp3+xtv97GwFoefZNJ+ffSX6UYeo8IP8FldNT/qfRv1Te8+QO7Yjg1//JgvDj+DH6Rq/hHgB/hDRn5EeXT21XU/W0Au8EfadzVHftT7UfjFyjhDBx8V+VXUHz7y162GX6Qjv476Aj+Jxkj3ZVwqo3mWuMnsAeAmIEoAW/OnAN2CH6v5WbFjPkR+AB+N/FiPRX7XCX/eccEHjTvtMV828uu8gH+kq732dd5y3Ni+K/5GX8cZfxx+jNG+K6T9qnefatoZad8FIe2PXO21kd/e6y90vz7IdfXuG+pqL+S6LvgAfqT8SPUBPskR/CRVAkw8A7BdezEG/FjToNvuPUj7Y8d8kZo/2r5Lw9++22/hh1wj/Kpr7ygv9bTCDwsNE/nVq7wG/vh7/L6pg08U/sGuvd507VVNPFaUA7in8EOAP2NJ7z51zm/q/fiG3xrGsLHbffqCD6sw8Ps6/ABf5sEBFJNwAKQWB4Bd/dgbfSoL0GtS43dFfkT5jnv9I97uizbu7Lzgg669wTq83DP8Sz3yvBX+WPuujq69gJ9sHH7bxQd2+MjP8/auvbZ3Xzf8tmvvaC/1YLOvo2uvQN8MP/YChrja6xX8XTv9PohTfraAny3kSGXaj/VpZgB9196+a2/ftXdn9/oR7RH5STbyh1JAxqRLnA1M/CZgnnjZAzjZd+3tu/b2XXsbu/ZCJvLb231qs09AV2m/WxfwQ+Qn63geSoDJvQwUHADq/r5rb9+1t+/aC/jJttf8+nIPj1XNj4hPGqz5L5VC5Kdn/srE3gbEHgBDifP+vmtv37W379qrdvot/IAd8JOQ8stYoj5qfoHfAf5Snh3A5Qm+DoxNQAa/79rbd+392e/am96Hrr32pZ68GmOzT0oAgZ/niPqq5leRH9p2AMVkMgCvHMCD0bW36Lv2/n/p2rs6ua69gL92u09v+OGMn4Wdfon8HfB7OICJvQ2oSgCG+kHq2ls84F17cwI/qJwL/EjbH+iuvauT7Nqr3+PH7T4W4McY8Ge8Hoe/lNoDmOC7AIj6D0TX3vwB7dqbM/hyvDfrl4rdz5NeoDGLxrteWC52k3Y9v1zMEMTsIB68rr1rE+7aa+EfHOOlHnW7rx1+PxD52bL4FGBCx4Aem4AEGTKAB6drb/6Ade1l8AnqJYK7dARZ8rWFleQr51eSL5P9KukZnpN4/gx953PsFMgZ+OXw+b5r78669rLkgg8JO/0tl3wAP68BfhHmBD4cwATfBYADwI2+vmvv+6trby6de0rwjy8S4Ofz3W5x/alvrv7oS/9x+eY/vHL91rfP3Hz7387evPXS6zfe+psf/OjKn3x7fe0XvpGzI8hIlC0sk7bT/L5r7xhdewV+OAKBXsO/Xj/qywC/jvoS+S/XHMCVSd8EvCMOgKHuu/ZOu2uvhb+K+n6Jo/3q0a8vX3/2P6++d/bKu1sbm5t36Wer/Lm7hTH90HDjrXc33v7uuZ9c+vRLFytHcGyZMoLSCfRde8fq2ov2XQK7SvtZAnzG8Ju0Hym/wC8ZQFZZ7AFMqB/AnYwglAjPtu/a+/7o2lul/H4pn3WLnN5f+9x3L925ePN2HXRyAltbd4Lq401xC9XPO987f2vtw3+XU6mwSJlEGfH7rr2jdO0F/EFNb/St1+Ena+DnsYr8JfxhLBnA5sRKAGQAcAB9197pd+2tIr8vU/587vjirX89dSOAHwDfFLjZ0oO7NeFHHAN/duPaO3cu/8G31peTr5ATeEGcQN+1d+iuvWnb1d7KYu2SWIEfawp+jIMDcNMrAfquvdPv2ovNvsrmB9LFn/5X9nYJ/52NKrLTMP6DUkAcgdirn/vOZSonloITWOm79g7Ztdem/GqzT6B3bfAr4KvUX1Q2A5m8A8AmYN+19/3RtVeO+HiX/+3vvPmTEv7bGyXBPAbbkR/1ZzkT4B/6rq1Lv/fSOpUV7AT6rr1DdO1lhec62q8z8Gq3X8HvW+GHnGQAV6eaAfRde6fbtZc+zzV6ueF3/dj3rw7ATxiXdtQf/iicQDm4s3bj9urjf5tnyXMr+Yznmn+l79rb2bWX180FH5Le7GuH39b8LKyRpAQoJuwAztC479o75a69OY9nOPIfW7z4y3+fb954d6NkvmR2HPhtNiClBNtbL712kzYFl/PZ59kB9F174117Ab/MEfE74QfoXkV9hzlposeAJOUA0lN9197pde2tR/9b//LaDcC6M/jhAdTP7c2t9adevEClBjkB33ftjXTtBfw448e6hd+m/N6k/Jgz+C44AL9B88lmAAB9nK69UN+1d7yuvTnZauPvucW1D30j4zP8rfqxvsJ/51nAZmlvvvjyjWXaEMx3lVlA37U33rVXxgK+gp9l4VfgwwJ+UpkBXJ1kRyDjANiO07WXbd+1d6yuvTj2283R/6vnr33+e5elXo/V/ePuB0hZcXvlx+8V888TtK7v2hvt2utU5Jex74A/jUR+dyWsBQfg2QFsTuZdAFwEOlvf9e+79k6+ay99hs/m2QEs3PrW6ZD+33MHgCyA/ydlwG/+I90U/NpKPlul+H3XXtO1V93rdwr+rrQ/7YQfGQDLwwFMIwMQB9B37Z1a196lbPa5xf89cfGnJaibOMK7Dw5g+4LQtT//9ytUBiznu6pMoO/a+3/sfQl0ZFd5Zpe626zDlkzChEwSEhICISEkmeRkmMkwk5WTjezbmRwmJCfrDGZgemi71Xr1pG7cNt43jAk2ENsYG4MbTOMF8MQGvLDYbtytpeq9V/u+qFSSqrT1/N999+ov3VuvnqoklRojHf/nvnpVqpbK+v7v3+53ddVeBrxDtgnw60Bn8DPbd4DfLnSPAOzhjAK7BFAId+yp9u6qaq+fBrzgWGzJq7WH4ADW6wDVI1+sCAdwYHxPtTdctdec6w9nfv2xBv7dcABmF+CpPdXe3VHtRfQgx35nEi+5JL6cnVveOQdgFgLrxx+pxvYdUg5gT7W3u2qvCf7w6T7F+uIes74Jfnw/runfG14NwNVqAAj591R7d0+1V0UAy4khRwCjX5IRwMSeam8P1d4Q5s+FMD+KfT3BD9utGsC3ZBdgT7V391R7YQTCsZnWU9nFoTgAVQP4+5PF2L73xuEA9lR7A1R7w8GPVTPLrPQHgx/AX3cALAo6PAcAwO+p9u6Saq+LxwcnYtiuO3fb07ND7QK8+YNpmj50UASkz3hPtTdEuw+rDn51zcwP43wfFgL+ouOnAKXhTwICbJL991R7h6vaKweAhIafM3JkOrbvPVOzNz1Z4zmAtR1wALxTcLXZXk3/5PWp2L7/ExNtwP0THnr1e6q9BvjNnJ9XrvDLjUAhBb+8CX6x4rnS8CYBuQsAIK4P+uyp9m6Hai/MCmR+V6w+8N3I0Rlo+ZHEV3LhS04TwNTC/x0pAionAJ2AyuGHyu4Lo5AQc2hvgEfOwHMY9HuqvTr4GeTBo71mn59Xjfmx4jnPjwBWhzoK7DMxa/fvqfYOrtrLq2Hrkt3rwB+JxgD85Ksucxof+lptrbXsS3zx9O+2RwD8fhwJqMftM8VW/g8+nocToMEgpASeG4nCEeyp9hpsHz7Xr4Mez2ngLyjww7zdcgAe1wD2VHsHVe01mV8L+23k+dDkEwaJL/f51kzl0APFlWJzWYX8MIlQU9tjG76M91TFxmXecTx//8x8+mduhHJQ3IkcdckRyBDf+s5V7YWFgx9gDi74meAvqiiAIwCrNExJMD0C2FPtHUC1V2d5NhsmN/rYMWj2O/uOCH2//NvuyLRPF7jaz8AXi2J/3MfzXLzbOvi19+R/boXlw1YXllZnr3u8nvjeS5LkCCgtIODvl4D/DlTtxRo02suA74f5GfieWC1hmgMYfgSwp9rbj2pvMPNLxhfMD+C7kbEZ6PWn33i9N/+56TmArhvAmZUZjGt6TjDAl/pWhXblCPR6AC46HcFybm65/M7PlZ0LjnrkuFyqDyRg33mqvZ3Mb4WDn80EvwC8LUN+SzgBXnchAgBApQPYU+3dtGovm878cBxycw+0+EWen/i3l8Rnr3msujq/tKqF+wxwFv1cf7zwQKzZejqvIgWuCQSkB9ptfr3wHz64SSp8bqWgpx14nt9LjxRa38i2cm/9WB5OgFqGHv1uCYpqku53iGpvn2G/WrsyP4NfMD9WdY37paEPAkkpraf3VHs3r9q70Zj5AXxxRNcIevoXTTsHj06X/+m+wnKmsdTJ7MzEWLCy2i9eR/sBlopvvyfvvigab0+WWroDWNMUgTfc02J7ffCnfOhU2XvFca/5yWfn1DSgD3Yt4uD0RF2T8zjTTL3+2jQ5NdeNWAlyBDzl99xX7YX1AL8dAH7B+Ax+DvkF8KWVpAMoswMYbgTwzJ5q7+ZUe2Ec8sNYzgtbep3I6DS29dKBHKnW1zMLzKjM7AxgLfdutFZqJx6pJF7xPmd63/+crF/xaEXXBuAQns8DkGxtng2gOwL8G/XWavL1lydp5iCe+5WP5BYfTy329TPOtVfrlz5a915+PAlHQFFOEiaKg89d1V6tx2+0+cIGfHDdGe5vAL8M/dkBDGs3IEcAPOizp9q7udFemCtXAJ8YcRrhfvq1V7vErg0FGAnOnuyKFd+T+vGrE+Q8ZqhYGEu/6fokwCY4nwuARsrQs8+/KrBv6AHSMWJzFKE48cgR1zkw6pb+9mSJhEI5SlnmKIVXLUpJ1JZKf31vydl/hGoCF3kU+ZAjiMIRJJ9rqr0m+GHmgA9fc29fOQLPBD+AD8O1dAC27gCGHwHsqfaGg5/eh8N9MgDfe+lErH7ikTJYPDjPN5kWUQJFCxkB/MhozDt43IFkd/PeMw3etWdO8JUvvK9YO/FotXny7NziI97C4leTCwsPxebnbj/dKP3dyeLcJ06L79eLiXAKuJF766056ve77sHxBCr9lBYk6pd/uY73xuuZ9Xv//PTvLubecgvOGvDo50/SjEOKphtTcATPFdVeWPCmHhb0MHr8Wtivg5+v7fPBAUSf66q9UwOp9prgJ+D74T60+zHCW/qrT+eW3FpbZ9BzGoN25tqoC6A+QHUC1AtQN4h7B48B/LH873wssybfC186g8/e+Hh9et+FM/GR92KmII5ZfpL4JruYWP1wfGbfe2KJH7o0sZJvLuuThcohLH4lsUjfR7k8WnxU2Y+MebQt2Em/4drM/MnJZj+dCvy+c7c/PZf64Ssz1O3wKBpK0ueTkvsBsG6jaq+9W6q9BXnfCPkN8JNxyK9Wi8EvjMF/XkQAzzXVXoecA4f5XOyT9wZR7eXjuSNHEe5PZn/pw8nFryTnNx7b1TuHRicAHQHqDDj0HtM0dhv3T+mxYY6zfyzeejK9oLO3OhWIHMdy4vtP0ITemOMenHB9KS9pkXEM7rje848nsMOvcvj+Mm8sWuuyE/DeEtgfDsB3BBOUghwRLb/8b96Wbz2Va3G6YqQFxu8GMdNq9Es178XjKYpoEhQdpWDSCfSl2itzd76WwGfAD0+1d5BKP4Nf9PcDmV+LAHavBgBQf7ur9jq4FyGw77enSOBiyo3YnaxPj8envAMTkN8WYBdRgcn65mEd6njuEUscz538oSscnNeHU3bCq+gMPswApH/6hmQMwI+MxRj40Tj9XA4Uesvvuq/IhT8TtOX//bmSkvByxBFerNqL1ZHyXeL+86PuOohXVEFA/lyIQqjb4H3v+5LkTIi1/UEf9Pk9MopKPPd5Y4nKu05VVvJzRtuwe31AjhXPlJeKf3Z3iSISeu8jiAbSVCQFkENVe11V7IvYGfpMMvS9CvQwXGfp58vSc1mXVnYAO6TaazJ/Xq4B23l7Mb8FM8APc/3rYXYBbCMF+HZV7QXwiQmnCBTE8mOTxH5nKJw9QznuWWLUSfcgsf/I2CT9UZ+Ni/uHzwL8whFEfEfQbbRXhfswVPbdF9sz1bEvllaqCyuB47t4Quuj03HerQJN/yG3J0D45/JFBPDJbHk6z1icmN3FCcD4pm5hO+kFLtLvY5zHxwo+DH7M8mOuP/8Ht+c7jwbTFYGo01D3o4CJDtXeqGjx0WeaQKU/8coTqdkbn5hdXVzm+gDsXMBYsXxMm5sWaJMT6gNJcngpOAKf0a2UPt0nC3YEeFuAn9ITtBsRSaRw7R6wMjBKdXDcOZ5L02eZJoefpd+VC347pNrLZob9Dg/4dIK/sAnmhxXZAexOBACQfVuq9jpy9YE/epb+kM8kvvuS6cKf35Wevf6JyvwDM43WN7ML7WcLi1Rsm58/Nd2oX/XVcuH3b095LzkGNqf3POo7Ao4GZjrDfeT55Dimin96V6Y9VeaQ2JikWzMm6TDnXzl0f4nm/sVef5zPD+OTeWFRgE+w/+wNj9Vkrq8V7nxPQrWBLHJ+xf69VHsdrCO2cALzp6aanaDnqUB66+bSavpnryPnNOqzP8DPCj4o6hF4j8IReJmfvTFLw0kLGuvrkQ9/BnjQWllr3Py1Bm16yghHMBJN03sKJ0DGrB8hdh8B8C9K0eedTv34tXmaQqw1PvpUc+Fhd7H9dK7dfibfXnjUW5y74/R85fCD9czPfaDgjIyigJqm96WIwFbafbltV+0Nnu5TqzB9wEcC3wC/Ar60snQClV1yAJznf7uo9jp4fQTgt6cA/NSPXhkjlqosF5pLQYdodtLVUrLeRtU+8e9OxJDPE/PIfH9jnp/5+ZsSC1+IN9fMCTl+P+OPfnkVO/wSr7rMJSdDeX40Ls/lj8vtwIr9sf0Wu+9imV+8MUVgWd3IqQza5skzc/IoL9fZrGS3cABH3PTP35AGe3fUJTa+92fONpH3o5UnQM+qvaK/70V8R0DO0CNwJgp/eGexfbbYDnSGWExnuELOsOa+wCKAH8bsQJoM4PfXiGD2VO7XPloiR72A/QidKsZBuoZUg2kV/+LuqrN/NEsRAdICMd/fN/jDVXthHPLro73BzC/u66wPY/Cj/y+uK7uRApzRcv7zXrXXBz+p8kYorI9cfJbYIK/ab5IxwU4KrNJ4UKYzvF7Ozy2V3vHpLIGLnABO5o3OiDz/+y6NNz74tepqSw97z4WFvU3s7Y+LPP9oDMD3AHawvg5+rBE4gIti8w9MB7I05gFSb7o2RWCGw9i0aq/Ywbffb/PVr/1qPSi6wOP87/5LgQDoidBf1+tXjmDETsFQ4KMpxWT14odqKxVOh8wpR1wY6VC78LbbSwA7OZQU8nysiVdekm1+4lvzGxSLls3/jzzstDGlWXwk0Ur95LVF+tkyFFHlHIB+G1V7zQEfxfww3tDDgOeQn4EPixrMzw4gWtmNvQBgaAl8rOe3aq8CP+WCk+5L7cn5z0zN+kA0wL1mfPF9A7iNm79ecyIXTVHha5qYqmDOy/MQfrdoYGm63Cr++d1ZAjPShhkB/IgPfOEAFPgZvAjlRduv8Ed35Hrm6Zc/WvULfxOu06dqL6r7KPIlvu+S5HKqvt4WPGfUFzIt0iRMMPhN1V6Zu4teP0U1cHJe8gcuzzRu/eYcF0SZ9QMcJfCNguhC+k035GP73p3M/MJNBWqj8uetdS3MPQ4btQ3V57Q621ot/Omd1ZhwAiIS2DbVXgZ/+GivHvIbToCZX60wTgGGuRsQTK2Ke1jPZ9VeFfaj0AfwLz6aaK4fob3aHfUbd8UF74fH9fxnpxo02DLfc5suVrP1VfZebMs8347D6Gdn4KtKv1g7D+K04u4Log7ltrK2wJX6dcfiVpe87znut/0i/av2dkQBbvl/fbZsdhhYIbjynlMVFP0I4AC7saFHra7cwYdeP0U5SUQE2Td/KE8DSYvcEg3fdoyhI3K8c8up2WUVnXQXLFnTRE2MMWeOCGgpvuOeGkcCEvhbV+1l8GMlMwd8mPk11jfCfqymA7B2JwJg5j//VXtR7Uc1v3nPs/V18PMfzeZ3zAZPt/Uz/DKbevUVMs+3ZLhv6eCPSfA7yhHQ5wT2F4W/ypEHe/fq//beIr1OqPY6A6r2KqOTh7yWmP1n5j+nzxj8+0sJ4EdF3h+m2iscQQRpwQTC+SQNRSWLf3lPeSleXTKGogK0DtjZap93/ypHHEG1V9ayv3xLmf5O0CHIIxLYsmpvOPhhPcBvsj+Ar8wVj63dSwHOd9VeAg2q/aLgV37PqZxkDI4psW5BKaPn+O6qMf66kH3Lh1PI8zG+q8J9BfzOkF+aAL8jri1i8igm9+LJH36/t1LoMa335cSCUOxlvf6BVHsdrPtFb9/N/dZH8z2nDD/w+CxCexkF9FTtxerC0MobGRdGzJv0XjKRrk38vzpCcvNzVX4gOFIYRPBA/+yWYpVl73veR+Afy7mRbVPtZfALszbJ/Ax8PfRnB2DRau1eCgDgD6La6wxLtTcSRatvMvnqy2dWigyaLZ+fzyxipgfmBpg2bYDJ0waYGUeM7453hPsWgM+9fQ38WGGC/UcE+8cat359lsFnzutnf+MW1BRU249FOgdS7cWQz0QC1f7mp55tdvt3FXtm/uMHcsToougnnEC4aq+c9pMtvggq/YeSqR+9Kjd35+kmQBk0MGVG+lsXPFX1iPo1X21SPUBGAYLlB1XtxX1tUw9X+jcB/rI0yfoMfnyvy05g+A7AAyOzA+hPtZfBv5OqvWB/MeSD4Z76lV8pKfYPAf9gwYC2m05ugV2pX/ZoxXvZsThYvzPPl0U+LeyPdhb82BGA/UdsUfXP/Neb0wh75ZfBxHMff6ZBbBon0LJevwF+C7Zp1V4vAjWf0UTqp67JrDbaQKLeFpRCJDML5OASCO/7UO3lIZ+I7wgoOkJEkMr98q3FxSfSLQ34Wtq2zZqHCHLqi6vJ11xJAB7NEYHkt6Lay+AX31vsg/kV4DXws7litbAOvw0IYA6s2qsBXwf/dqn2gv1R+PNednwa/fsNk3LbKpq7ZjBx81NnGqnXXYONMlOQ9pJtPQa8Yn4d/Mz6ccn8ZFE59XdxnNqF89q8P0t1VxdXkq+7KokNPtQm9AKYn+/1odqLNh8KfbVL/7XOoDdPDCr88Z1FihYSqPgj1+9XtVf19ylKEsM9tO04TbsUqyj4GdHbNn7pjpQmNxsUbWXdAyIKGFC11xzt5bHewcAvv19dV1z/ujrkQSB2AFtV7YXtlGovhn0wvpv/vduSPvh34tAMBoEKwUv/eDKPwzpo2gzAj+EQDwV4BX5Xy/m1Vh8zP157YNzBME/xL+/Om9V4BmN1QpzXF5cHdbibPpY7XLVXSnmNJbzvOpakPFkW6/x/H6ZCdBItbbsvsjvAb/et2uuuO4JxMeWHaMD7rons4mPJliZ0su3S58qRUaeoTRHANqn2mgM+EtzB4OdrBXYYXrsOflpheM3uOQAG+9ZUe7Fuu2rvARn+X/poSWetnTw7v/jXn8yJ1t4FE51gj4lVPpamwC+Bz6yPtTP/91427ixNlToOAJXkr4A3WWq7L1XAtwXYQ8DvmcxvqvbyaoHV0brzSu/4VKlXW7B69KEaRQvYF6B29A2m2ov7EUQDExmkBYuPJ1s7ff7hejRFhcjk919eFE4gEi0MqNorBDzNnN/uAf4o5/wMdqw6+EXoj+9xNQcwxBoAO4DzTbXX3+gzLiIACsdndebYyaOzG9c/WUWLzzswzvl+B/A9mOzzM9BtBr9cue13KFY79nCF235m6F3873cXsJVXsT/398OZ32HmD1HtFe077NRLLP6ruxi09XilOL+S/JHLCcBHKa/3T9oZWLVXbPAZSydf+f4ccnN9onInIjn1u2T/24crVHfJ0d8RV/fDVXvJLJ35+wn7+doEfwXg52tbXu+6A7CwnoeqvbboANCgSZP7vZz/74wDQCHu9CwiANXf7wz7AXSP8/0A5seq8v7RePL1VyWQ3xvjxACfGCOOz9O+AM77+8j5HY35eaLPUO1VY71JFPqyv/rPeW5DmsXIxke/Mefv7Z/Adt6BVXupAIkdfpn0G64rrLbEL7wjaVy3MWeaDqwRgeTICQvQ96naW+w114/HQdV+jf07wS/vAfjsAHY1AjhPVXvZAUSOTi4+lprf+aOzGZDNT55pyOk+LeTXRntlsc+RoMfK9ywxv4/cf+4TzzSC2m/oCGTecnOGHABeL9g/EPzsGIxjuT2s6oguPCeBr6v2urgeEcId3txtT80FtCPxiRCDfihPhUu8XjiBflV7sZIDyGL7Lo3/FlbbK3jbHXYAHFVRzaUeEw5gYlDVXoCfQc9WDGZ+s9gH05kf5oprdgCeMHt4XQAw//mq2gvnQYxI10cmsdGmM2eF7YAD4AjgtmcwFIMIYAPz83Qfg9/VwO8o8O+3XfTyc79xawbvGci0t3x91i/8GeB3pZkTfhzyK+Zn1u99LLef00ewjlK//orMSnk+ODJ52FkUwh4RkQIMoNobzcIBIAJIve5aigCWZQqwsw5AdRryf3hHDSmAHwFEB1HtlWt086O9bL2Zn/P/iiu7ALBhHg02ySH/+afaC6MiFKS2z9I+8LqeP++kA6hf9uVqTNYAdPC7GvjZAfA9aS7Cf0z1BeXamAZMvPr9aPu5lC5wb1+b7oMp5mezO/N9eS4/rsOO5UYq4Gv3odBXtb5Q61mbePsny5jyk3v5+1ftjWAdyyRefiJHv+/Kzkdy+DX8Qa7ML95UoZ2Ueb8GEO1ftdfM99l6hPxB4NdM3NsFB2BvcAAeg//8U+09MCHEO6qjXyjuqAMw/+jRBUALUIKfc36jxw/beM+l7oWLib/S391b7LkJ56IHysz+geD3ujO/rZ3Jb27lNcHfeS1bff9mPNV+Vu3xV5/vuc7djkvey4+Jtt7gqr22iAKoNdfa4UhO/txwrnMr3itOENOPURcAbN+Ham/YaG/wdB9fM/h11lfMj8dVzQGsDdUBnCeqvZOBqr0j9jTloJPZ//IhD6DR5v93pH2E6b/Ua67yiJVjbkRjfhizvMn6sAiYf8yheXSXtrpu6LfjP+Vk6OivFrT7eNRXNy72wSTrwzyYYnuxMtB7Mb8OfrGrD0M/hT/7RKnXfELt+MN1ihYQBbB2n6HaGw1U7SWHmIWUF0VWRi1kp+o485+dXKS6CoF/vOgMrtobDn5m+xIX/KwO8NsB4LcBfuUAakPfDASwMciHp9qrVo35JyXzG6q9MHe/NdV6KrtwbgeGgfS8l1RpmkKuOzLeOeRjjvaaYb/r5/5g/0Mx0tzj0Fo7pVfmp+JM/g72d3vN9MMcDve1Sr8e9luJTR/RFRlPo9BHZwssmD8vj9amfuLqHLG46Ou7EuxKtVeusO6qvSN2lsCYyfznm0udnRysO5XGlf7m3llqq+apALgV1V4N/Ax4fcAHxo/NYp8L4Ovg5wig5u1GBKCAj3XnVHvDwQ/gC9NO6lECnsQeZyvvPpU3ts9u8atbzksiHdDfQ/ivAK+xvsWV/g7wy3l/F+o9qZ+5LrXaxMx9dymu+fun53FCD/J+p8tefr3l56wzf1Rjfo31w5lfGkcBqPCj0Jf5Tzfl8fMF7lG46/Q8pUV4vXIACvwc9nMbUFPtVWnAkQzJrC3qjmY7JznxcMmpLtP4ODG/JcL9wVR7TfDzarb5GPQwLvipYR9pneCv8Bqt7UoK4GgOYLtVexnwgYd1SPBz2G8e1CHVe19kT7fPFFt6QW0b+/+oes/jeC6wvTSHjFl/Q6Wfi33+PeUADsdJa29O+yNnRqVKePoXbkhDs49eDwcQwvw2q/bKXH9zx3Jb4Wfy+wBOocCHEL/xwSfneoiTrtGpQgSmi/B6dgLM9ubJvL5lZBSQI6eXyf76LeWOmY4t1XT0z1b93OV33rfO/gj7B1ftNaf7TOY3B3wY/FiZ+TtCfjJ2BPQZ1Ya+G1Aq6z67zaq9ITm/1Y35AfrAk3llFDBDwJrK//a/pDYIQOB6q/vI8Vb0CLvk0v/hhiQcALGc1uOHWXEz72fwI/QH+EljL4e3Ddx3f91jdaPwx6Zv5eUdfYr5OfTX8/2QsN9O8jWvZFK7/2gq+YOXZZdzcyssH0ZXHQ4XQpyQ5wbwYYr5eWWdfkdeq/P5cA/CnVDsmb3h8Tm1fXfwdIDBL99LaTO2MP4L0LP1r9obzvxc6ddzfpfBL0wDvwr95Wrh3u45gG1U7e1nwEc9P20wP69TMBkBqLP4JqvHvqS2Bat2Wl/TgUGyYKV/uLfgV/4neLRXy/fB/Dr4sSpzDow5pLEXNGJ7jrT/lxOvOiHbfr129HVW+nmox2XVXjaT+budzKszv3qOt/LKKKBy6PO1nkpF/3CyilSAPifF+gLkbJZyAup+jg/olOsLrRyJq4hobpWA2/cWYWZ9XCnnigNPVpKvubxEn2+BnI0Y9Nmiaq/W4w9lfrPYZ4Df7gS/nwJwBLA6dAcA9t8u1d6gqr9DJlYu+MEJBIDfsBlXrtQVEJHA7LWPVQKUfLo6g27Pdwp+VEcfLDH47XXmh6nQ39F6/HrhD22/8rs/V+p5us+F96kjucD+WtivjfYy8ydhbkDBT5ku38VmJ3XwB831i3z+Aivd+ka2vf75ys9POVsC2TKUfF0APLIh19dZn5mfHYGU7z6aTbzqknyLNP8Ve6v8HV9BjqDbgauK+UnWbCX9xhvKVGwE+AXgt0G1t0fObwWG/a7G/P41s75DBuArJ+DskgOY2j7V3nDmd5j5GfwBYT9fa4dzdjiB6uhDxbWl1U7pKQ3hHO5vgP/yRnHK0t+fzAP82LQjJ/wCmJ/Znq8tDPCIth9p6iWgrRck89V6Ir1IpxRxyG/Kd5nMD+DDerX5wsGf6i7kYbEB/LQit4dsd/5tt0lH1j2NqV/55QbaepRjM+Blvq+A3+1Mfhg7gdEciZ7m50/NLHI0tuEIso1OgO/J18JpyM/2m7ml1GuvghbgetV/u1R7g+f6YXzN4T/n+zAvMOy3OqOAGj033EEgANPZJtXe3uC3JPNzj39jzh8NBb8ymTKgQi+O7Mr+0j8nW09mFs4FqALzaopQQZgj/dPXJ2Ma85Mx84eAH6+DZDdyepzc20N/fy332x/L+W0/gNwS4A8M+7nCz+DXrG/wY2Xwdx3tBauTgxVOYP6+yYXA8wrmxalChThV9dHi0w7nDAQ/DwXRvQgJdUTGcvGRI7nyhadm1ZSgIRa2JgcotKeUA6+deKRJZxXQzzK6zvzbrNrLYb+5j1+b6+ewX+7w08N+eY+BL6OBOtluOoDBVXtDR3u1nJ+uw8A/A+NrC9fS8L1iBWhj1L+epmO2Z6DLT33sJoZ4ejkAOttvuXlyspH/rduyTuTiGAp+AL9Z8AtnfgfryLho+5GWXhqaekEttOann8XOOmz28cHPob+xqYfz/BDmD1TtNcHP94PP5IcpNR+xeefnrs/jlJ7AVuZnzy7grD7hACTzS+D3BL/S6/edgJ2n789Dv4/OISxUj3yhQWnBkn74h75RCW0+kohrpl57TUlU+0co3I8w+LdRtVc+NnN+zve52s/5PqzzOrqB+R0wPux8cgCDqvYGMT/fU8wv2FsC3Qz5g5nfWge/XGNyOy4Kg1DrEbr89Mc4nfqxqz06BGOpY96cR1qTtaXkD17hItyP+8KeDoz7+TzWC3O7gt9yYX7ub2P7rtjwM//gTNNkS+4upN54DXrtSBe6Mb8BfjeI+flesGqvCX5h2tHcvbbzpnEyLw7orF+lTe5pw0zU8SjDCVD6hPBfY37jaG5lefmYZbuFeOdYLjbyXkRJucrhBxqcgoD7uY5CGo1NYvt8fORw3hGsT62+iM3g32bVXrB/IPMD/Ar4bMzyyrjaj3xfAV86AptWmx3AcGsA7AAGUe0NyflVvg/Twv7AM/mnTeY3wS/vQ6ZLrLRpR9xHNNCeKrW6OYD2VLHlHhyj143jSG5DuJPZPxj86rEK/dH2K/zxx1nmq8vpPrXLHqnRZCC9XrD/xtFebvNpc/3c5gth/lDVXqwG+LGa4OfjuCNYx9Io9i0n6stBbUE6eLXtHuQiH8Bvgh7PMfh5hYnvgWafEO/0nncMnZhc4e131XQHgM+Te/yH6LXHi4r1d0i111Dw0cEv1t49fpjq9Vc3sr7N1xscgD1kBzC4ai+H/Qx8jfltBW5xP7zYB7MCmR8mn4v5Fl03F4+fPx7DUV1dI4DpUoueD9Lu4wm/gLCfzRbm4PqFtts+nW/xiLJ2ug8dlOF99/GEfw5/sGqvvqnHHPAxc/5+VXuD9/LzPn413cdRwHvTpX/8TLXXhiY6qwFzDepILs0B6OCP9j6Zd78NVaRc8R2fqgc5gMq77veHfA74xb4dU+1lq/AqWZ7zfbpvgt/rwfyuBD8bnhuiA/A0B7Bl7T6+VgM+zPw8zIM1MOfn1TCT+Rn4ejQQc59nBzsAigzcCyTjM/i13Xw6+C1mfmG2Yn8Phb/K6IOVnj3zv/k02n7M/j1Ue2kFgMNy/qTO/P2o9oaDX13zdl4SZMmgZ8/Mr7UFs42VxA9cmkdrz410Zf68tJ5n8mNijz4n3wH81T314Ajg8w3fAYwPQ7VXAz9WdgQBo70w1d5TqUDNMcAfNRyANyQ9AMMBDKzay8wfON3HgA8L+znkZ+a3cQ3m7wn+DgcQD3EADHK90m+CX2d+8Rh5PwZ5SDMviaOvdTENVqX1FjryflgP1d7w0V6+bzB/mGpvKPhhuOezP4/2epTb48z+3Fs/UsLvGXyq0BNNPwqY4CO6N8/8rNorHMDh3g7gws9DrSlPad8QVHuxcqFPrIHMbw74yGsZ5pvg5zTA3r0iIEA/oGpvAPijGvgt2JQe9mssrwPfZH6xWt3AH4f14wD0fN8xp/t05oc5fuXfZ//GR77R63SfteyvfRiz7667n9k+ULWXgR/U5gub6x9MtRfAV+BnR8Cz/X7PPotUoHn36flAWTNqFmTefFMpLs/pB7iZ9TdzJr8lI4CJPh2AVdxJ1V4ys83XreBn5vs85NOd+asw9XiXUgCAdHDVXjZtR19fAz4wy2B9HfxBrN+nA2i7F+i9fl61Sr/O/BL84x60+0grL4P3Ddw5d8fTjRi3/Tw3RLU3nPlhVsho74CqvQz+LN03t/NGbF/S6w1XF1brLT5VSCt2UicE+++zor8vwa8cgeYAdOZnsc5NOICKcAD/VziAIaj2BoG/ugnwS3Cb4OfHAL6N18wOPQKAA9i6ai+M23wa85vgN00DP+f8WEOZn+8B1OEO4HnsALDq4MdqWOfhnBHfAWDXIIf7mh59ZWEl+dorUwQaej2DPki1N7zgZwXv5WcHMKBqL4Nf39SjDNN9aPNR1JOuve/hRs9Thf7kzip1RrIEZDB6UM4feFjHphzAO9kBMOh3VLV3w3SfB9MLftzj57CfR371sL/K4N99ByAAPqhqL70H5/zhzM9gN9t8yjTwa8DvCn4r3o8DgFa/zvxBIb/K+wFiFP6g209yYYWep/vYX6xy4S/q9avauwkhj8BWX7+qvdpGHmNTD1aHHUHWe8Wx3NJMeZk/X+1UoW8VltwXBzB/IPhtYR0pQL74PzblAMD6HPbvlGqvBn5xz2zzoeDnr5zzM+N3Az+vSAFmh98G9NmaHUCfqr0c9mvMHzrdZwX1+LXQ3lKrHvbHZdHPOKUnPAVgB2AyvyWvbbFqzkBs3fVePuHR+6vTfVTbjwFwpth2X+IDXxvtDVXtNYEfzPzM8hr4+1XtRdhvKvjAtE09FpR1xVbe4tvvqfZygJWjD0HlmKMAOSAUcjgnTKQAcd8BzIY4gAIcwLBUe82Qnzf1ODzdJ8N+7vGbOT8zv3QQWEUEMPQuAIDrMPOf7V+1l1l/4NFeM+fH8wbodeZ3/VU7lhsOYHwzDoDBHcT8ncDHtWD/Q3HSxqv2UtAt/MVdGGTB68HwA6v2ajP9atXn+rnq3w38fI9DfQ38MPk8s71vGY4AeCsv2nwo9FEK1ApUOi7N05bcK/hkXoP5zWO55YoIoBgPjwDm2AEMQbU3eLQXoDfAD0CH5Py4r67ZAezCbkCOAAZV7ZXgp7Vf8MOY+c1KP98zwc/Mr0l2bzIC0JjfBD9MMrfry3aNusmfuCq1Uus83efcRg39L4rTfdAmTHRIeG1JtRcWnu/zXH+Aam/alU4gQLVXD/kzvJVXG+2lCj8Kff+fvWsBkuwqy9uzeUBAKwUpU4gKhYJapQXGACUiRKBKq6SU0pIClAJLQSw0QZRk85jZ23dmE2DJgxiyeW1IEJQ8CEkIWUjCO7zCI2iAkOzuvbd7+v1+zfRMzyP+3+lz9u8+p2/fvj3dt3cxvflybt+e3sdMf//7fCfzuoOl7e1hpwo9uiLO558zTuZl8nMEoAxAQRmA4mgGIALVXib/gLFeP88fRH5FfIFul8CKzgB4pgEYX7WXC37hyc85f0Cbj8lvHssNg2AD4jly/JENgL/n9yRcVflHRZ808Zq+bTBo0L/mBghf4uvh5cOp9ga3+fzIz6O9/nr9gDACgeTvrwGw5yfwVt6lLH0/0nR02MqwU4VgJLrn8iG/B/ktRXgmvgAf0TXIADzlawCWolHtpfsD832+ZvIzfMmvGQCQv8YpwAwjgPFVe3nAJ5j8NpOfyT0a+UF840x+luzuMQDroxgABuf80msz+XfbHsQ7SQsvO/QcvZu+j7wXof/EVHvHIr95UMdg4U4fz8+El/fNDT1oC0LQI0vKO3mE+376B0gTKF1A2pDX8n2/8/mkAdgzQgSwhw3AdFV7jbBftfnguZn8QZX+uOb5mfy4jrYGwAbg8A5Ve8ORn4kvEEx+9vIeh/163o/VCWEAhIKPT9gP4usKvSL8Jy08XeaLR2FzzY3EC/cvd+f97cTEVHt51cmvMMDzM/mHqPZm5DWH/MoIMPE18gtkZBSQQ4EPhb7y/EP14acK3VXFaC8m/Jz+3D+nkV+sNHmoIoD6iAZguqq9Zr7PEQDAnt+X/Joh6IF1bI20Dej1GIDJqPYG7+gze/z24UDyG2E/F/vkqqv2jmgARKXfDPuZ/LLwt+ihnUcaeMWhp/vs+WIZ3p82z4DYk1bt1YnuM91nhPwhVXvZ8/O13Qttrl9u5X2WnV1/LN/pPVWIwPLcT5Y2qHUoUwBbD/v5fD4p3AkDAHKHMABRqPbyXD/3+EOQP64Tv9pD/no3ArAbEbYB42wAJqDaCwTs49fz/ZHJj9VVnl8QXcEc5nFCGQB/8gvEYAT2ut6ZlyVIA6+z7Xe6z4+ya+6plgr7gUmr9ga1+bjYp831h1XtVZ5fE/HQyB/PySgAXj2HoZ/8m28z24L04FOFvtYkA4kTekH2vrCfwOQHdtthDUBUqr1l7u3DGHDBL5j8tkZ+Wpn8BPs4MQDmdB9Wn+k+axTyswEwQ/5A8htn8vMpPYZe/zgRgA/50e+X3v98h7TvakNP9/nL/0LfGt4/6U5Htdcgv+/5fNpcf0+RL4RqbzD5sSpA0YcKn9mVBw63+wVReDIS48M0RlyEVLfcvw8oz993OGeICKBABiAK1V7c6x3w0av9AeQ3c34mvnjdJwKIOAVweNVVe3XPb0DL9wEV6gNG2M/EN8nfM+Sjhf0a+TXV3jFTAO38fYk528OhHaR5l9paGSKJdegJnO7jkqqQJPlUVXsDw353QNjPa7Bqry7fFUR+MRw01zUAqVddV9ruDD1VCPJhJN3FB3UIsHyXSgGKYQxAZKq90vOPSX4z7GfyzyAFMAyAJSIAH9XeEMKdhtcPvaNPvs5hP0E/nNPvfD4U90YzANzj7ye/Jbw/DADEO1v3PW7KfKnfcpVO93nFtdDO82AAIlDt1Ty/Od2nFfs0zz+6aq8p4mGSX73HkVt4EeKTKGpr+KlCt1a6qr2LpmrveAYgKtXeKlYnmPxVJj9X/znsNzw/wZ69AZiQaq9Ofp+5fmvwXL+W8zPxbc7/A1R7pQFwRzcATHxAhf4gf+5Nn8x1fw8fWeyrv1072i38RaraS9DIH+cev+752eOHVu3VtPsIxm4+HuqJIZxfyJEsegHa/NwWNE4VWidxkbzPsdx4XuwagAtDGIAoVHsBs81nkN+s9vcWAOscATD5j4sUYNKqvVhD9PiZ/Oz1ecAHz2W+H6TaG8oAMPnlynBOtjzSutMUcHjUdSNZ20g874PLpJmX8GJ2MjrVXsBisjP5CVzsk5Ck57n+sKq9+oYehqXWPK57o4DS++9vDFVIeu+9dfT5ieiGXj8MQjgDsBiFai9d+xX7mPy+YT97fp38CrIFOIsIACTjNt+EVXuZ6IE7+ni8Vwv5xesgf6Bq7ygGYL1rALwB5/G70vsn0PYr//uh0rAPcenc+0qa949KtVeN9HKxT6UAkvx9Yb9Z6Q+t2quulecHmPxxY7SXjGeejkbr+M5MJGqbJDRaJOOZ92Ks3ccpwFJIA2BFodobPNrL0ML++FDyq3sz6AKwAZimai8QQH59ug+rAlf6A1R7Q0QA2oGclsttvwWPtO2SpHHHKrj66T7fXW5TGMuV/tmo9uoFP+7xA/3DPJzz70C1V9vRJw0Ak9+RO/kw+pv9809WBO/9TxVawSgvvD3Cfo4A7BENwCGMArMBmLJqL6+Bo706FOF9yU9oSAPQjNwAEI5EqdprbudlJZ8ezw9wmy+Eai8bgOKoBgArnnvK+9evf6Q+tJD1Z5/I0Yfc83bLwt/MVHttY7RXJ7/j4/nHVu31386rjIA4mQeFvta9j/u0BUUBdTv1+x8jwl1S8ObsYncGgFaCNACFEAYgAtVe/7l+M+cHLPb8weRvSC2Aphf1bkCQjfN+64lpq/Zyb1+b7jPJj3uhVXvF15y6OJoBYPInqOqfwCae1B9el97uDDnd566ftLDVl6v+s1btjQ/c1OMAvuQfX7XXEPHgNSdXaQDm86mzrilRCxW0HSwfdt/P1shQ5L053tLrYpUGgLYDN0YwAOUIVHvD9fh5xLcuX2fy8/vV84ZDEK9zBBC9AWCyT1m1l8N+nzaf1uoLp9rLBuCJkSMAcUwX5vfRz1998PDKwLYffqv62lbqd68mUs3Lwp+VmL1qr+17NHffPn4mv8K4qr2G11fXPNqrdvRdkKtd/nBryKlC27m/+FTNoXCfSA/yA4UQBqAIAzBN1d7g0V7bKPaNHvbbyvPjuk5/76hTAFsYABH6R6Da6/rt5Zf3CI6m1R9atdfBOpoBEORXoT+8OmnZ5YeOs37o67LtB+9vJY4n1V6G6PHzdB+TX/f6QEjVXn/Pb2zqiRGoyJc487ICzusX3B80Rv2DTIeOIi/IFKAgU4BSCAMAApemrdrLxA8z3QfEdeKz55erJxBnAxBlCgCyIvSPQrXXFSsT3wNkn58JbTP5eR1JtReQBsAb1QAA4vpZtkdaduvGhhb1viPlTuK5+5Ldtl/8OFPtZQkvSXhdyMN/wCe8am8vNPLzpp6ekd5c8T331IdupPpAt6Ivo4DSSAbg3EOtrgFYgsePQLXXn/xy9SO/jgZWufOv4cnVFQbAitIAcBEQpJ+2aq87aK4/wPOHVe3lCMD2NQDrmgFQhb/K3oeGynwV//6zmE7z2PvvVLXXmqBqL0/3iWvu8wfN9QuSh1btNffy63P9eYJccW8+3/5mYl2RGUv/qULNzeSv7S+RcS1SahXCAOyBAYhAtTfA82vk13N+3esTGhz2Y2UDMJsIgIk/TdVeDvl9RnsdHu5h8odQ7aXVYwMQHAGg8Ie2H4laLA8TtWh/3W1TtRp5/3Gv2ivJq4f8fgM+oVV7TfLHpee3Jfl5tJeAnX1Fhwp92T+5pTrsVCHqvKyKKGBuqURGNowBiEC1N3DAB1BFP1/y8yrDfkV8rITZpQCRqvbagJru45aeRn4H5A+n2hvGACS47bfHbfzno42hp/u84WDWQdtvzob3P25Ve0O0+Yy5/hFVe3URD97LD+gn86rR3rnuZF/ztv9tD5FTw6lCVTK0Re+UfSEjgHgEqr0Mvhec85vFPhDd7vX6DcAVazz6OQBBzuhUe9nza+RnA6DdG0W1l1V8RjYAEO1E2y/z+oPZYcKWzU8+imKT3OxjnQCqvZY+2ReC/MGqvQxBeGUI+rfz8ik93dHeGKKA+cLyb19V3qq25alC5hHq1IFZd3ZdXPROhgHYE8YARKHaq2/qGT3n5/UY+T1Ffvb8eK0VkQGwDQMQgWqvNuCj9fhN8ruhVHt5H3+wATi1K9lF23291a+5q76n+5RWNpdffEWq2/Y7gVR7TfL75/w8Dhyo2mto92lhv05+dc2tvT356tJXWkNqLdv5t9xWJyOAtKE4zACU+g3AdFV7mfy6iIdf2M/FPh720ciP1WqC/GwAIp0EtH0MwDRVe80eP6ARf1TP7/WT3xrZAHin7RNtPzp6qjD0dB/rS9Wju85Xhb/IVHu9Han2muRnomvFPkV29vwjqfY6BFqNY7mZ/ACfz6cg0oHTl4qdnxU3um1BkWPhl7jGPerEbHin7yuhwk8/n2aAASiRAQDZI1Dt1Tb1MNG1nj+DyW8PI3/jODIAFtapqfYS9NFewPT8/FqAai+Tf/QIoLTunhxP0Acx0Tlc7vie7vOTwrr3bM75o1Dt9Sap2steP3C6L1SlHyvAOb5Gfksjv1j7B3zefmd9mOGt2l9eObzr3ELxXXf7G4DzvsAGYNqqvSb568MGfBzD88d9yG835Dp7AzBl1V5A8/pW4IBPgGqv6fljXSUf95lLvgYApIf3J4266tDTfd56W0G2/ZZhBE4c1V6T/Brxgzx/gGrvMM9vATr5+yW7Y4slzP/TASrrfqcKoU7gnbGvnH/bHY3hBuCiMhUMK5NQ7cV9uWrwV/AZRH6xmgU/kN4gPwHrzFOAI5gCjFC1lzBSpZ/hL9zJI70k4uHELKHge/SUi911vzmAx7Jry2ddncLpPr7FqIeOrFIOirYfyHuCqvbGgQDPb7HnZwSr9soCYIDn18lfEkM+c4sl5PiZc26s4mcCDGwLXvPt1dxbPlX3TwE+33py17lF56SFMu09qJDhFzm/M/Zorx2o2tur3qOI71ft9/Sw3yS/uhZwu9EAFwGjGgQShJVef+eqvVzp91PtlV/HYf9OyQ+PPxcXxHd/cSlBGvSF1t0/bW2tiU+Ksalns9beXKetwrInbbajOtSOevX1WfqQJqjtB+9/oqr2BuzoM9p8mtf3Ve1VbT5A7ePXyc/EZ5TUZh/0+lHlb3z8B4PbgrDbrfWt9ccLG+o2yN8rNU4/w43qZd9YTZ99XQ2RAEUVMARc7JuYam/waK8kPnv+/jYfMIz8yvPjujWDCIANwDiqvW4o1V5W8PEnP+f7weRfFAd2OCfPu6Xz7i91EtWOTmjxnFdW9FPXmshn/YZHcOosh/4npmpv8Fy/WekHOOQHTNVeJj97fvGa7vUB7ZQejgJiWBeKyRddXt4stLYM3QX50CO0QT9b7Nxcufdn66mXXVsjJ1B2dxOhY3bVmbxq79ABH/b84jn3+LWCn0n+2RsAx41KtZfJHxD2y04BE36gZDeO60q++MplGjMVnkTtMhNklnUlrHioldMBcd0/kpptbCRfuJ+IuZCktt+JrtpraveZIh5+Az6+qr2eAof8THwCGwP/Y7ml7p+o9FcufrDFBUE21ubPiQ2ASu0QOaiv2VrtbJX3PICDWSsUEVbYCOxUtTd4Nx/BGPDRcv6Gn+eXaLlYZ5ICgLgRqfZqxb4Azy+uddXePtHO9KtuSONILhVG4sNgegl+6K5f35RSveyrdITVv3neyUvL0Pf/+VDt5U09WIPJ7z/ay+Q3Q35AD/k14vcbALHuLbmn26WN5braLTjw8VT/D1GPEMTPTxUTG7f+aM3ZvYDcXxmBCan2hid/n9dn8utoSTTdWdUAuN03XdXeYPIzmPymXLcQ7jj72jTm92X47hMyGg8jGsDKQp/1jdRLr8l08/9FYQR+XlR76XkI8mOND1TtNYt9nPMD/p4fsLAWXaxzdpmMeLH24W+syHqMMMack0mYD9OgK+PRkdObn/jRWjcSsKuTU+01yc9tPm71aWE/e31ca2E/iK/WKFMAswjIXv/wtFV7h4X9fG2QXzuq69KE1PwzTut5aoxHb/sPW4K95yx18/+YIvuJr9oLEu+Q/MAQ8pveX/P8ajQYm33KmOIrvvuzzZ5OTZf2IX+EetqgjADt7lylfR5kBJYQBYRQ7Q3j+W3N80sDYOb7Bvn7DUCcU4BoNwOxAeDR3ump9hp7+c3pPm20l8Hef4/TuOUHhmbfU2Nyn70OrR3Zgrr2uw36cygKgCEQ3v9EUO0F/FR7g3N+g/yANaLnZ+L7h/6WLACiTbdQSv76FZXNPBcAlXLwWA9+L2/iWt+kbs4NDRr3rlKxmD39uKq95qYe5f21gp9BfgGD+Ex+eR2PMgVgAyAJfDgK1d6AAR9AH/CRUOS/yE2fc1NG/ZDxYAKP/eBJNPXAh+eVB7LUWkpSKgDPDUMApBgWP0elHsQHpDFwGSlNvYcr/5pqL5PXT7uP5/bVfUB5fGU8aKVrC8jjWiIPaANAivy4BrTtvOK6KKGihCKtCgW5lgC+b/M9eq9cgbI31/X+jYPfb8sqPpN/Zw9DwYnOKuw4MAC7FkHinaj2mj1+k/y9o71Dyc9rvBezigBEjn44ItVev9FeQCe/Wl21d59COqd5+2NNLfTHuuOHPojS+PgPm5SjJhOnXpoi2Sk/pE0sDUKmH4sZV8fuxayJJR05E4s68iaWdBR0eAKLOor9WBqE0mAs9qIMUHG1DEOw/BtXVbYaazynETaCC64LYKRbOInMHx9sUD0AUcDYqr1YNfJrIb9/wU/L9w3yq2v6+7Q8QpSKQNwG5Nx/yqq9JvkJno/nB5Ref0Lo9T//I8nNyqoxwTeZT07/OOpmrrXpPWcxdWTXBxJHYxcmyWtJXADgehmga6zDkPLDEb5OByAzCEcAvs4CR7EORw446o/8CCiMgKIO56SLizS9VyAJsJaRwk3iwZEETxQeeGQNtQAyhDX6jIZX7TX38vtV+nEdSH4mPcChvyT/CshPa8QRQHSqvVq+z57fKPjxvYQS7sj/7R3m7r0JPnpTCiy1Kx+uF/7uM6XiP32uXHzPvYNQGQ33VI9d/6NAtR/3jIKaWv1Q0K411AvvvqdeDEYj8HXgXVjvZqj7/HqzF/Q1Tfp7NQvvvLNBR651+rUX8b+JGnIe/f5pfpP0H6rO+Kq97PmZ/HqxDwhBfs77BfEJMvxfmUENwHIE8aNR7WU1H0nyQPJDsvskGACc0//t2oTDf7M9KP4bMEn49GNS3hmrUfafiiGHjWlvbC//5tUoBtYokhxftVdGAIE9/mDyK8h7gvwr8utWop4E3NQMgKHa605UtTduDviA9AIm+QE+tONCt3XXT82psUk/2ABguORpTANIs6bCfTzMCc/sn97SpAJyjeoAY6r2Mvl1zz86+QHbj/wERADCAGxHZgBo3eymABz6T1W1138770Dyq9dxaIcD9Z4vHT2m3jNtr9xbnDresC1h3A+DaP5eJjjFwi/9MfFCIJ7SeQ8tciA1SiWFpw9W7Y3rqr1Ymfw+m3qGe34mvyK+8vzurAyAywZAeH6s01btlfeCyI/X1PXTBuDnDLM3AOFVe7WwPyT52ev7hP2zNgDWsRRgWqq9/n1+i19jA8ApAK7nFiNLAYzDQDemEAJv/H+GlgJsR5ICtKgVqFKA4NHe4Ok+f/JzTUAv9rHn59dwTQDx8TxSAxCXBiAuagARqPYGkT8BKM/PsD3qnSdwJFf9qu/Up1kE9NtySv97ugg4KWL2RVfTKgLyb49TiJdf8lEi+DwVAdkA+Hl+LvaZ1X5J+iDyM/EBLd/n15j8szEA3AVw2fNPVbVXH+/Vye/1e36b0L1PgyWIADzSkouuDUhPa1c/3Mi/7fZy+V+/UC2dd6ha+pfP9+B+rIPxz4GoDUIRK6NeJJSGoDgEJUbDwHvHQrP03vsC8PmWH+jPbZXf94VW/u13NtsPJzq6HNiEOzncBvxxfpM0IGvYDzC2am948pvVfiY/VglbAa9jBmA1cj0AAhuAKav2MuIMzvkTgPT6gIoaxIk8ND+eSP7K5anNCkt5TccA8O7A9rcSa5k/uDF/eNf7Ekdi70+STBgP9wzFBYAx0HPERCYYFwDZIyMO+PgP+lwATGrIByiOgBLgkGLP0dgFJRL6LHpnXFppf3N6BsCUFvsuBoGqNO2I4t64qr1B23mZ/HwNDAv7mfwcBazOYi+AG6Vqr5nvW54ivoIj3++RIVBn7+NgDoh0tm5/rDXdNIDbgMoerBx6cpUUZ/IUhSx7u+00jQeLkV4X4NFeHdl+LA1CzsSijnw/lgahoIP+ToNQZCz5oWRicRDKjKXBOHVfhQ75qMAAeM+9rFL78MOrkPpSBrwn6pqwEedR4PRrbmxiBgD5//iqvf5CHrzqlX6A23wB5AfxxRrpdmC0ASVhp6HaG0h+veWHsL/HeOBeUq7Q5yMPfLGXOeemLG8GYhWAnYaNgJH7b7LQBD64tcu/2aAPcgZenmYTMvShUht8WLWXwfp9g8/tywEOriXo/UBOQ56v4wQba14ixxr9eM7yXr07+giDNvUQjE09QImv+Z58b0mizJt9bKxAuUfyq0w7KYn4F5edufly4R13NTtOZVNN/wG6FCM9m7j3X7n/iQ6Kf8j9x1btDSb/8B4/v9ZL/lYf+Qm4xhp1BLDpCVKykMdkVXsBa0TPL3L+Ps/vyrUL61gUQGKSDd5JNpntwMor8TWviDaUgCip12xgpNc5aT5NwyUpGAEYA6Xd50xOtReIVLUX23ZxjZWfW4C8B5JbZb62y2pVxKd6DSnxLJQR+mdefbDe/oandBpVBwBPWYhlk7d1TmI7sHIMJBG2nXrFAfL+86r6vyPVXi3fDyK/IjtHALS6kvxYCUx+rJwCbEenCKQiACb6UV21d9LkZzD5HUDl+9Lzy2tFfjyHTp84nz9x5qXLJAjSCRAECacFwPLh0utzRND7AVbP248sr2Vfd0sR0YATm0+7u8kQxODFT2jVXjYEDI38Vh/5XQFxpHeZ/v2C+MkXXFFt3vpoGwZai6QU0XtVnJQR4M4uEGr2n/2A+jPLFz3QFr3/OZH771i1lxGC/BzqS8IzmPTCOMzCANicAkjPD/JPRrUXsIZN97HX767q9aT0/Ex+BqIGIdUNzf70yw9kcXafDPlCSYLx17CHx32cFbC10tmSH1pdY1B6LU4LsDZve2xl+cVX5WmvAhkCC9t61Z78E1K1l9aRPD8gdf7LAJGt5D7LLpcveWiFdmxu9RGfyd2XVnXc6ibNdqwrI4DvrblFOLwkWOPmH67Lvn9jQqq9THwmP0Mjv9njZ89/LNTn3J8g1h4DYEeXAuA0XRB+gqq95nMz7FfEBzz29rYe9kuwIYAQByS76QOXyLz6xtxmrslGYEt688AHex68T4X2qd87kM+89ubC2qOZdS1E7f+8aR/kzfraVnXpq3XvF5eyqO7TBy8LOCeoai/A5LcM8vfk+dDjLxHZSvm/vr2xjjP/+PvGXl2vp6xtbNev+1478cv7q5Dyru1/uM1Kv/z9DngYoqCK/M7ueZBdFvziE1Ht1a4DPL/e41cTf0x+rB6Tv88AeFEYAI83A8kUYHzV3mDPz2G/M9Dzg/hAXCM/Vr6ndPmh1wcjgEhg+SVXpgfJgquQXh9BVR+y3nHi1S877eQLPoLDQJbpA51yTllIoV+/kWlsKE+mPphcwTbrA52j5Y3C2z9TcWKXZIgUVBugSn/MhiEAeU8U1V7N8xPktYsV3l+E+3tFiy999vW11QePrPP341jkJMCk7t5bfehoJ/3y6+tkKMtObC/26VfJmFeK/3B3iyIwETnoPyOVFvSueE2TBd8un//FNjy/M0fkj4H8tE5AtZfXQZ7f0shven6+Vp4/rvL+gQbAjdgAeMoA7FS1F/Af8DHDfgKH/f1E9yW/0uHD+6DZRxNeSeeU+SQdDFLpeNWOvh2UOwYq2cd/fE5g8d1U0NtNpN+1kKJQNg2gqEeeKZX4pQ9m6x/9TnNrldMCoz7AH1g2KF9z1zKvuqmIaMCJLQglH5AYacHxr9rLnl+R3z0W7hPx57p5fuJ5+yv1A99rw5vz90Yxnz2zIihFB5v5N9/ehFovteWEWKcbk6q90ggkX3RlvUGKvvL7zdTXH2yERdjfuvvxTuql1zbp+y3Cfib/ZFR7R9zU03s9qODHnp9JD6xQ3YhWIN7mGkB0KQAENyeh2qsjwavV2+MX9znPD/T8yxr5CTYbAZLvRl0Aaj3eLyyliu+4q9S688etjlvpbLXpE7gpzQGteN45Uu40P/1YK//WO0ruaTYGdPD+tBdbTPceykleLkMeKo2hntTLPpZfuf/JVRVE9H6w/dqG+GCSrNhK8lcvz2OYh7wSZL6EESCA6Mehaq+Z86PIx3n+RSX3GVa5/P5DrY18i40ih/tGeoR6QOWSL626z+6SnAhaBXpO7sE1inU1Mpb4mirt369X9n55lQxph+o8W1udLTbidI3fs/2tJI4Ga1PaJrb6UrW/Tr+H2so7cdXeHjQDyK+H/asC3OYz8n7iX1vea89CD8BzJqDay+/3I79tkN8d2fNbgvzmGX02q/buXoIopzAE0PLznrmUSv3Wf2Qz5xzM02aQQua1N+WXX3J11nvGUhoDPQS8F+/rle/O9B3SGbMzqO5TWoCWXzr3pv8u02hpxy9fHVToQqGyfOGDdfe0eI7+TLQMc4DDpD9uVHt7PT+39ZDnz5dA/twbP1Vf+5+s8e+nX0aBFOE59PmTL7yiRkaUwv04eXpIdAvSa2fyywM8Yovw4DX681AbqNBaS5zx4XrqrGsbmdff3My84eZW6uwDzcSZ+xtkLGrw+GrIh6DyfXj+aaj2MjTy+072YVU9fiY9oJOfYM/WAOxYtdds8+meX97nHj9P+lkjen6AT+ZVMt1sCEDoxRR5dBgD5PMEGt8l0IrnuE+vL6Xp6/RjuvhkXgKr9logrQAROO0+08qUz3+gJg8lUWQ3QlNVj2BpqkIn/1efrtDfJUthcFaIdcZQxTfInxtEfqxc5DNVe3GPFXnNHj9g9vg531fkd7uGQOb5lji+K/U711RbdP6e+LdpEdCgPB+z/pk/ghgn8vwFQXzzlB6Aj+gC8NzBGrOxdVfco9SMcAkR/WKJS+j5XjHPj/Fe7vHHI1Dt9RvwsQ0DwMM9AOf6HqDID+ITHCK+wxHA9kwNQEjVXp38CXPCz1bkT/SRXwv7+bmZ8/sfyw3wNYwACC7fkyIPRjk9QzzvP6JLJz/A5JcTfvKI7q5S75yF+kA68fz9ucaN329trxu97mH1ge2VLx5up846UMJ8P5EjB5VeGdpjZfiQXxgL1dqbI0Lvtnm8Fyq9c7TGBOmVQWCvz+Q3gFCf23q2kO5OnHFZuXb5t1Z7WqNGz76vCOpWNgvv/GyLqvAVIivCfe2gTj/y28Bg1d6YTYCHZ+Ce/HpTu0/AnrRqL8GSMNp85nSfTv6B1X72/FiFQYjaAHjKALDnd8Kq9hrEN6f7dPKDwEE5f3KY55fEBzgKYLBBkESHUdAID7A+PwHXxpn82mEduIcVEt1UH8igyJd+5Q3F1a84a9q0m9437DMQ0KmjTSqtxJkfKsAQUHQh5LsdrgMIomvkB/JETiHZDSNAXYsCRSV9m3ko0qHXFgowApDnprUkIwLD8xMk+S1BepCf3l90Tl4oFd/zuSbO7OMuiH+ev9WkNuilX1/1Tt9Xhdenfw/n+eOczGuq9irU5Rqpai8hgPxmpR+rp5HfAfllsQ9wFPlnGQE4XUI7O1HtHZTzO4r8tOqjvbrnN8lvBXh+u5foxuGc2kk9WJn00hD0nc8HmEdza6O9fFiHg+cxG4aAwvluy6/w1jsqdGa9lh9zWjCIOBvZ5iZ1L+rOqXtzlBrkiDQFwAH5e3v8kvgAEVQQ3TttXzH98usq+b+5XWz5LZ93qAk13uwbP1FdfsGVFHrPY0qR3ru3awh2KUPA030i3I8h3F+Uef6Fxezrb621H0mZeb7W1lOvt+78yRoV7XA0t2rrScIHk7/PABy/qr0m+c1JvxaTvrv6eX5Fftx3uisQfQTgaQZgfNVerKbn5w09TH6N+DqWAflacNhvkt88nJPJz8d0sSHwO5c/7fA9kJ3JD/D5fMI4EGFzALT5/4+9a4uR7Kqu3TNmbGOCjXkkliOSfEQIhAElUpRfJJCIiIT4sAhC+eIryR8CBQszc++1GbAtS4FgCfMBREmQeQgsDB/+MgQh8mESGUsWUaS61T2vflRVT7+mu7qrR5x16pxZ5b3r1Lm3u/re6p5rzdI+dfox8+G19z5777OOqXQv9ZKXNtDPDkzCmZVuke3+z9X+tb/5D1TAl0w1e/hwx3w2JD5gncKjyybiY1Cpt/Gt32ybdHvfkZOtTT/NvNk/MOfwfvezL5qC2ZM4xxvn4d7lR83ARX4Q35/zL/35V9fMVOMOi3js54/9N798Ze/ah/9tw/yb4TxA/HHv8vfk45yRN/lnWbVXkx+W5NeVfrc3Gvk92V0GMNYBtCutASBak/SlVXv9mkM+jPzs8xeN/LrVd9Q3+Znq83HOtie7SPsBT/iWu52HdeRZbmvR6zejwNfQ8jP97JXN/3xlG4ThWHG4PuDlq7Z+/NrOpff8K+oDS2bQZnn4Ok+2goh/+aGvd8215F1LQHL9dRJjVNzl3zFY2RqYd/O3WneeXzVERY3Avszrz/lmerG79vgvtg/Wd7XTIvGZtVzZGHT+8adbrXMXcM23N0z3SXxBftg4+Znez6pqbzDt55k/dN7Xkd+THoTnZ+cQqpUEowM4rGovU34R+UHuieTnnor8jPqAfJ03/DIv90FsH+kNSH7Ar8WZ/wrJ7yb04pd6sMchn/nUPs9l0m/7Qo+J1t2dXy/2xWUi4QhuqmvH5t78Vvv+iyD+Es74Rm1nwxTi2GpzkdhTXV5n5qQcI7bpm/cX/+xpXNHtmEnFTuvMo52Vv//RppleHIz83mA7E5N21//l1zsLb/+KO+enIL5L9RX5gaKRX5F/dlR7w+TPi4z2+iEfpvwAiM7oTwewa/Z2qzsCOAcA4h5JtVcP+MAGBnwE+UlgSX5YD5n2B8/7+syfAjzv65Sf1f7xd/ZJ/MCb/PJpbmQNhhw4Fiyj5WemDJdWP/38dTOluC+IFr12vPKpH15fu/iLLf4cpdBi/zHL4CUZFPUuP/TM2pW//MYajghjCpeAqmFs/+z/+pff/4zr51/oIt13Azw9A0b8MuTXZ36q9c6Yaq8mP8/5XKei4Afik/wgvFuT+MwGdl0hcLfCSUA6ABK+jGqv1u7jOZ8ZABHs8Uvyi6hv9yNpPyM/wMifibRfpfws9hmIZ7l11I9f6vF7VsQD1X0Akl3tt1xcWXvil5s4n08YKyYhSWOm9vhyQS1E5SjgPPDXrm4dDES6z+8W47uvLu8vfey7G8aR4dIPiN/L50H6hJEeNnzmZ4pPcE+f+WdVtVeTX0d+Od2H9a0JPxb8FHYBfG+FGUBGBzAka34E1d7R876b8IsP+JD4IvKrlD9j1X8c+bnHVF+QH3Bfl9He9vhFtf/I5AewdpeA7Iu8pj6whJbfpXd/rWOuwO74m4uBsWLsOeKPnsexOJzCsdY8CF/THaxsH3Q/9+J2fnfaQ5HPOLGeAYjfc5Gb0T5w5ue+7PEnMfLPomovya8EPPSFHh/5W0zv7ToU+WfAAbDqX061lw5AD/gkkcgvK/3h8374zJ8AlznY47MBkl/3+DngY+CKfcUiP0nOtJ8/E77UYx3BvC0UmvUXl1Htv/aRf+/t/ubqhLFi/4frQ//HrEHpJYwSH0NN6998eWfhQXtNt2OGnnqmaAjSI9Un+UluRf6CPX5PdpH2z6Zqr478erS37Sr9gIv2zgkAOu23IPl5BKjoOrDKADjVV1a1l9p90Us98TZfiPwA91TkBzLAOYEI+f1nRvwI+UPyXUBKwvM+v5zpB+ygj+/1o+9vKunLRkZ8w1w7HgSmCUXUn47uIXuSzDjMlei+GWpatyq+8+eR7nvSG9i0n8U+IjLaG4z84glu9vxnVLWXt/jcmp8Z+QFGe33m12k/1qlyAHl1DiBzNYAkP5Jqb1DEI4lEfnwuT35BfF/xxx4jP/YCkZ+EFz3+sIJPOe0+faEHcLf5sLa9ffTmVyDVba4dr65/7b+3UWkHGSXrj1P63Awv7a/83Q82W/Nf6JqBpq6N+PM23e/mrsjXEmk/rT7vC+Jr8odT/uszrdoLwgdv9CHqJz7aY0+RXxGfkR8WkBlAZYNAiyD9kVR7RdQvEflHrSS/h4z8Mupb8ueC/Kzaw1K1165JfEF+QJNfED8W+d0e9fs42muthZftsmO98+eHvf73PdPd+dWiVyM6tsdPfM3BdCYG7bde7CHqm3+HO+en3ddFfUb+KPmdFUi8FW0+rEn+E6Ta6z6z2MfID5sVIj+JT9TVBaADKKjaW260NyH5i432AoHpPpXy8zYfo73u8Q/hvj5N1d7kaKq9/mLPfLq6cO5LRkDkM0vXn/rltpvEY4XumJ7NwszBpXd91UT4Cyj0gew+8mONNl8h8ru1JL488/O8T/LD+vUsq/Zu66gPJCS+Qasc+b3dGXEA/TruAixOQbWXUT9e8FvkmjY23ScGfADsk/x6wOeKu9Aj5vpnTbWXcl35mfMrO//V7vP5M8vYY3k409calj/5vU0r6HnWOoCuI/0aC3+O+EHyh3v8QMHR3llX7Q1X+t3XWqXSfk1+NwjUr+MuwOIUVHs1+VkLKDDamwnyByr9+Czm+rGeMOAj5/r1dF/9qr3WWudw52OrRu6cwpqM/lN3AH5MufuZF7dxBMjv8NV+G/lVtb/8jb6k0HTfCVLtdSD5BfELn/lJ/sTv9Wt1ANNT7dX3+Ils8Yhz/Y7sOu2ntRBRHwjo9c+Mam+2iq8vvOnLnf3L64MqHcBa8vMbmPAzDsAV+5JeefKT+Crtj9/mOzGqvQDJ7yN/Vo78sCR/HxAOoMrLQNoBHE61N05+OdHHdUKoyK+n+0SxT0V+f973xFfTfeFLPXWp9tIB3HNxdX+xWgfQO//StncAtvAnyB8f7QV0pb8w+WdftZdpv2j1qZQ/nvYL8mf1ZQDaASQLsCVVe8uTHxZg1J945gc42Ye1iPyM+KLNFyO/nusHuetQ7QXsz74hXe2/urRXpQPAzT5c7oEDEOQPX+cl8QFx3k+Kkv+EqvZmTP0j5Aep9Wem/QbO1u4Akva0VXvD5E+L3Ogj2bEn2nywDj7q88zPmf4y5IcVSKpR7QWwN//YqunDr2z/5He7LALePLYioJ8DMIKpmPWHfJfo9Re8zqsj/3oB8p9A1V7KdkXID0vywwIs+PX5NazrcgC8DnwJ7b2pq/Zq8luIVl+Q/Gz1pd4ZULV3NO2XlX4R+YmMVpDfrxn5E7+uRLU3NxbPcEPBxwiKbPGF22NrA1ryQ3LbKOyiDdi7pdEfFe7UAz4GhdP+E6zaG73UQ0tgT6f9JH/9GYAhIId8jk+1F1aSH1aS3xOfpI+p9qaAOvML0uszPy0jPogvW31HUO31hI9Jdjsxzo65cbd65a+f7Umln2mSf/RBVSNA0rfRfx7pf5nRXqKEfNdJVu3FWkV+rgPFPoKEV+Tnnvl79lgErNIBVKDaS8S1+xzhi6v2hgt+sIr8bi8y2qv7/LRh8vvhnhJ6/Z1RQLXnxs9bnAUgcac9A3Bz6eHnNuEA3P3+Q6n2Yi9GftiTr9qbRckPEKmM/LAB8lu7Z/4f3qtoEjCjIIghqIv8i1Wp9sbJn5ZX7Y1H/iUgPNdPsmNPkZ49/oBqr7M+8jut/mLkT4dZwFlkAY+sLH/8u+sgKN/Gs8SdYvSHQtDCHkQ8p6Laq3v8p0u1N07+0HmfBT9YTXySnxlA9TWAU6ba68GoT9KXID+QBSK/Uu21eyR/KsgPhMg/uh4Kd0Kae+v513b9E2OwR3ECnvteQxC/6eqHvr3htPtB9Ea1N6LaW260N9ll5I+SH6Tfw/kftl1RBkAHANK6Xj9spaq9bPMdi2qvOO9jfzqRH1ZU+9uAOvNnE8if8qUeA8p0w57vLPzJk919c1mHUZtOoJwOAH/UO5O1x1+6MRT6wFNdaaPaW0C1V1b6I3P9fQB70chvLFJ/fG7DVn0ZCMQcifwL9aj2pseo2gvLyE8kIfIT+jqvHO2Vkb9M2s813+ZbzWHPZHigo3Plr55dG3RvHLhXcMe9ljuJ+Pz+EV3Aje/8764pNtqqf6PaW0a1l6QvQX7YEPa8BdrVO4CMRwDO+S+cUtXeSOSP3OXXc/2W8LmzBMivIv/K+LQ//Ca/dQJnh6/xmq7AdYwHu9YgpbzwJywH6q77vV5ybP0bL++0znzRjvo6Df9GtbeQai+JH5vuAyYW+xj5SX6VAWTVOQD3zPZCfaq9WZWqvZG0X5O/wGivTvuJlXDk1090AXyWG0XBx20msPjOp3rmTQB0Bqjp55wB1p71WANOx59vA/R2Dlb/4YWt4cBP6h/waFR7S6r2Rm70ifN+GiR/rslfnwMwACkXbjfVXt3miw/4AO3x5NfFPk1+7JP8xK3IT0eQmTUf60RNwBTsOsuf+P4mXuRxtQAKiDr4s77fxwtF68++7J7o/rwr+JH8J0W1F7ZW1V6d8hcl/2408sO6zMF9rvYIAGJy2u+2Uu3VAz5+zfaedwTizM+obzDuvE9MSPmD5CfcO/2PWaku3Ntv3XGhe/WD316//tSvbkDHDy/yIsLjZZ/B8taBeb9/f/O5V3c7//TC1uIfPw3imyzivCH/rbf5T5xqL1C/aq++0WcQSvuJOPl95Md6v4YjAEiZ3MaqvVTxUT1+lfanhaf7gAlv8nNN8hsLZLR40BN2WKnvtc96vT7o9/1zB1r97bu/1Ft8x1Nriw8+vbZw3xNr+R1WytuAxGfKf6JUe5n216/aC4RGe/uxAZ9R8rcV+T3xs/22QZWjwMwAGtVeQf40OODDVJ/kh42Tny/zsuCXjJA/G09+3shDNmCQDaW64QzmvIzXeQcM9qTDVP/sLeKfGtVe2FpUe+kEIuQn8T1asOHID2uJj71aHUCj2qsHfNjjD8/108YifwKMkh/7JD8J3skl+bHPtQW1+1DUAzKAZ/whTotqr7U1q/YWutSje/yM/Ejz3ZrkZ+Sv2wEklvCNau+kyJ8AYfITJL9u8wFdQBT8uuwUKPKT+FTtlY91AKdVtXe7dtVegiQXkV+SH2tG/bGRH8C6ZgfAtH+xUe2lam+ZyE+yB8jP837Xr0l+WEZ+mfIPkd72qr0i6lep2hsmv8YeIMhvrCY/13VkAJwEtBlAo9obUu1NAmd+FfU7tIE2nzjz5yS/hSB/z4Lkx16j2kuA+FWq9k7q8eu0n+f9UOSfrSNAo9obUO3V0326x499PeATifyi2KfIn0nyY33bq/ay1Vexai9tuODHyO+jPmx/lPzWkvwEnEUtDgAEdKRvVHtDqr0A5btgowM+LPYF0/5cRP7hmlHfRfsu0/+0Ue0F+atX7eU6PNo7mvYbcLovQv49WLtXmwNoVHsjqr10AoQa6w2c+QGumf7zvD9KfgdGfq4b1V72+OtQ7Y30+Bn5c0l+ElxHfrb/BsYOanMAjWpvXMEnPtqbiMjPSr+Hr/bn3GOUxxoQkR8Ebjk0qr2w1av2hsnPtS72ASS+jPye/I741lZfBAQhG9VeRv4g+XX018U+febneZ/Vfp73Lbhm9O/6lH8IRv1Gtbcy1d7y030gvE77BfkVBjU4AAqCDAt27PM3qr2R0d5g6p90gpEfhPbEJ0D0YNrvnuSWUt1rjWpvTaq98dFeTX5G+GDkD2cAaXUOICfxLzWqvWERj9iAD6M+IEZ7Iz1+h27LpfyALvaljWovyF+9aq8mP4t9kvzR874GiA+bDqpXBAJ5SfxLjWpvUMFHkF+h6y0jfaoGfNj/xzoY+Ul+olHtFaq9rYpVe2E1+VPZ44+Rf6AB4tuvVe8AcncEaFR7y5KfQh6yzQeCc81inyM9R3vVdF8qevxA2qj21q/aC+wVIP9eQfJzzer/SAaQVeUA8A+whL3UqPYWUu31CJAf5OaZH2hPHu2FLTLa26j21qjaS/LrHr9o9ZUlv7fCAVQrCHLVHwEa1d7xc/1EMiHy6zafA1t9+rwvhnwU+fG5Ue2tU7VXj/bqyE/HECU/ic89fK5vDgDkbFR7C6v2kvCFyN/L4+S3ZG+NIX+j2jtbqr280Xd48hMpsO8s9g5yoB4HQMI3qr0x1V6t3Uc7UuwLFfxAfHGjD8jHD/mcQNXexJP/dKn2AmZPFvxKkp8g+UF2A6xrcAAgrI/4jWpvXLU3GvlDIh68zDO0PPMz4gvyn0zV3uQUqvayzTedyE+A9G6/xgyAxL/cqPYWV+11Nkr+FjCM/BTxCPf4gUa1d7ZUeyPTfbrHHyj4AYz83D+o1wE0qr2HU+0tNtoL0mvyh6f7GtXemVPtLT/dJ8nviU+Q/HQANRUBvWJvo9p7WNVekn/MWG/RyN+o9s6waq9o85Uhvz7zcw9Et8iPswZw9wQHAPKB9I1q71FVe0F0fd7nmuQXaFR7Z1+1F1DkD6X8XGvy8+t2XdgB3H2Mz4Nf8y2+RrV3+qq96O+T/KrSf5pVe7fKqvay4Ddzqr2ByB8lPyzAVJ9r4piKgHcVugsAIrrI36j2Tlu1F5YKPo1q70TVXhb86lXtPSL5U33mJ8kHkviAI7wlfsFR4LtKOAAeAR4OOACX+jeqvY1q77RUe0l+2Ihqbz511d50eqq95Ud7ZcEvTH6ub4KP444AD/MIcGgHcJ/zHn9oftkHzC/tjV4HdhG6Ue1tVHuPR7UXtjLV3myaqr3lI78+7wNcEwMLkt9b6QB64Cy46zh8X1kHcM/QAZx7B37JJ+b+QjmAtiUqo3+j2nuSVXuzE6naC8y4au9embl+Ej6Nkt9acBFrOgCsrQMAZ8Fdx+H7wOmyDuBekz68Hb/kb+fe+17zS1fcEeAAAFkPodprbFS191qj2gtbpWpvun77qvZmx6raK9t8IuoDEfIr3PTWkn+8A1j5qOEsuOs4fG8RB3DG4A6DOw3eiB86N3f2bcY+8Kdz97/z/+cu/NY5gIEBbMfgMsmfWAgFH2tV5NcDPmHtPn3OD4p4wMrRXoCEJzzBPXJHfhI9rtoL5LRU7XXk5iy/REKLtF0LdxIc6iHpuZbEd9Dkd59vpfktMeBD4U6h3MM1oSb6dOTPqdrryS7WxEifP6zay7v8Mb1+Ej6s2ttXFmAdYKxwp18r1V5a7QDC531L/nxC2p+PO/PDkvg32QHgdWBwFZwFdx2H73WcvtNx/MwkB3DOffObzeZbH5h784NYvzL3yHfcEWDPwFuQ/HKLV3nhBES1H8gsmBmwADhcp4SW74JVjoKRn2g5J+HUe9yajoB3/OkkmPZbJ2DRhgWcc5BtPuf8/L19Anu6/eeQEq7Szws9QCYsvkYnwDWQEpb8zABadBLWyjpAi2taF/mHjiAxYD1AtAQt+WFzWK7tvmjzbeUWGaxyEm6oxxf6BOweVXuZEWg4h0BRT1UT8HuvywZaugsg0n5dDPRpf87qv7MaXrLbAJYY7vs2H9t4rqoPcOiH476W7Aq8CeiwD46Cq+AsuAsOY+04fa6oA0C/8A9QPXzb3D1/ZOz9P5z79EdHOgAHI06g64n6+3bOpqepIArDB/pFIbQUW0CohC8F3LtQMS5ETVy59ZcYE2No/4ULN/pH/ANujImJJlS3rFwbRee1Z3jJmcAN7S0Scm7yZGbuvbkzNHnOnJl7w36A9U6KSgsx9ZzWI3vHOcA55d/MzhLwnJIIC3rc7OMuPjEy4zpnddDTVL8Hjl8LooLeUdnRkgKrrAZd63Pm/9Gnq6jEgNdU3uPsEbTjrK7ENkCd1yGsikphMWPHtkntVfp0g491lR3i9/ryR7kjFBuwzXQfGMn3WYfIKrkF8jPV3z+iY8FaXomSE9L5CZLZHlBu801/isqbwn/kEUub9jMgqNwx7Y8k4pNfKOEqnFV3G+py9bQAIHqy0L+JbwLGZaw5I9U2HvhRXrz5HiIMfkwM3HRs6KI8C79ZnnzPSdj7LgrfWDd0c+6re5Gfc2gxvw3XsCgt5r4Rw3GMlC4YeixxLwBOwk04ClfhLNw1bwDKcFxd55FsBHIfoIaHlaWASLK0K5urn+Xle3TElEaFO8cfJKWb0R7qWWDgvwUlye7vDIKBHOTsgssXhMhlHBNRD+Ek3ISjcFWdnWX6D6fTDcDTlwGaBQSak1LGXsDiY9le+yDP3yJtQaeanvxxHOfcOYSDcBFOwk04qq5y9jfpf1YAsK8DaxpJ5iak2A6pxbVQb72WZ09Dp+++yKtPYdfxAF8ffXUcZ+SoawdwDw7CRTgJN+EoXOXsb1//pQEg3QdIs4B64Eo/CJSWajKBNGMB7TmZvnFfNm49kZu3H8n2nYeydXdXtnb6bO48kM17juMMBhyKPsEtOAbX4BzcU9kX4CTcRFtdrdvZ367/M7IA7gXYIBC42pDJ5aZMIeVYDaxouR7YEHLdcZyh2SBwjM7BQbgIJ638XPtnz/42CDALSIPAbKAVmA8sFmW8XZbickWKK4HVshTWAuuO4+TOGhyDa3AO7sFBdbGlblr5Oftny88s4JQgUAvMaGfNmIIgAulglpS24zg5Qa8W4VpcgquDs+pk7WT5OfsPEwSqgSkTCBqadjSVFgZmmHcc58xYj1rRM3WuYcSHm9Us+QcNAiV+JBQ6YUYwrQOoKzNKw3GcnKBXdaWm7sUZvyr82Kc0rPxpEEgDQcUEAzAVMwTHcXKGfk0a6StW/BzkZxDICASgImTCUHUcZzCsT8a1cob4lD+3IEAYDEjJcZyRUySUnmTIn3swIAXHcUbOOLHSn/8x5jjOf8IPP/zwY9DjL7+Syzb5TVU1AAAAAElFTkSuQmCC\"") - _ = packr.PackJSONBytes("./files", "playground.css", "\"Ym9keXttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtvdmVyZmxvdzpoaWRkZW59I3Jvb3R7aGVpZ2h0OjEwMCV9Ym9keXtmb250LWZhbWlseTpPcGVuIFNhbnMsc2Fucy1zZXJpZjstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTtjb2xvcjpyZ2JhKDAsMCwwLC44KTtsaW5lLWhlaWdodDoxLjU7aGVpZ2h0OjEwMHZoO2xldHRlci1zcGFjaW5nOi41M3B4O21hcmdpbi1yaWdodDotMXB4IWltcG9ydGFudH1hLGJvZHksY29kZSxoMSxoMixoMyxoNCxodG1sLHAscHJlLHVse21hcmdpbjowO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0fWE6YWN0aXZlLGE6Zm9jdXMsYnV0dG9uOmZvY3VzLGlucHV0OmZvY3Vze291dGxpbmU6bm9uZX1idXR0b24saW5wdXQsc3VibWl0e2JvcmRlcjpub25lfWJ1dHRvbixpbnB1dCxwcmV7Zm9udC1mYW1pbHk6T3BlbiBTYW5zLHNhbnMtc2VyaWZ9Y29kZXtmb250LWZhbWlseTpDb25zb2xhcyxtb25vc3BhY2V9\"") - _ = packr.PackJSONBytes("./files", "playground.html", "\"PCFET0NUWVBFIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04Lz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ1c2VyLXNjYWxhYmxlPW5vLCBpbml0aWFsLXNjYWxlPTEuMCwgbWluaW11bS1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCBtaW5pbWFsLXVpIj4KICAgIDx0aXRsZT5HcmFwaFFMIFBsYXlncm91bmQ8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7eyAuQ3NzVVJMIH19IiAvPgogICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJ7eyAuRmF2SWNvblVSTCB9fSIgLz4KICAgIDxzY3JpcHQgc3JjPSJ7eyAuSnNVUkwgfX0iPjwvc2NyaXB0Pgo8L2hlYWQ+Cgo8Ym9keT4KPGRpdiBpZD0icm9vdCI+CiAgICA8c3R5bGU+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMywgNDIsIDU4KTsKICAgICAgICAgICAgZm9udC1mYW1pbHk6IE9wZW4gU2Fucywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgaGVpZ2h0OiA5MHZoOwogICAgICAgIH0KICAgICAgICAjcm9vdCB7CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIH0KICAgICAgICAubG9hZGluZyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOwogICAgICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgICB9CiAgICAgICAgaW1nIHsKICAgICAgICAgICAgd2lkdGg6IDc4cHg7CiAgICAgICAgICAgIGhlaWdodDogNzhweDsKICAgICAgICB9CiAgICAgICAgLnRpdGxlIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPGltZyBzcmM9J3t7IC5Mb2dvVVJMIH19JyBhbHQ9Jyc+CiAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nIj4gTG9hZGluZwogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSI+R3JhcGhRTCBQbGF5Z3JvdW5kPC9zcGFuPgogICAgPC9kaXY+CjwvZGl2Pgo8c2NyaXB0PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgR3JhcGhRTFBsYXlncm91bmQuaW5pdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpLCB7CiAgICAgICAgICAgIGVuZHBvaW50OiAie3sgLkVuZHBvaW50VVJMIH19IiwKICAgICAgICAgICAgc3Vic2NyaXB0aW9uRW5kcG9pbnQ6ICJ7eyAuU3Vic2NyaXB0aW9uRW5kcG9pbnRVUkwgfX0iCiAgICAgICAgfSkKICAgIH0pPC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4=\"") - _ = packr.PackJSONBytes("./files", "playground.js", "\"IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciBpPW5bcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHQpLGkubD0hMCxpLmV4cG9ydHN9dmFyIG49e307dC5tPWUsdC5jPW4sdC5kPWZ1bmN0aW9uKGUsbixyKXt0Lm8oZSxuKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnJ9KX0sdC5uPWZ1bmN0aW9uKGUpe3ZhciBuPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiB0LmQobiwiYSIsbiksbn0sdC5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSx0LnA9Ii8iLHQodC5zPTc5NCl9KFtmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDMxMyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe2Zvcih2YXIgbiBpbiBlKXQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPWVbbl0pfShuKDg3KSk7dmFyIHI9big4Nyk7dC5zdHlsZWQ9ci5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQsbil7ZS5leHBvcnRzPW4oKX0oMCxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgUmVnRXhwKCIoXnxcXHMpIitlKyIoPzokfFxccylcXHMqIil9ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQ9ZS5jaGlsZE5vZGVzLmxlbmd0aDt0PjA7LS10KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtyZXR1cm4gZX1mdW5jdGlvbiBuKGUsbil7cmV0dXJuIHQoZSkuYXBwZW5kQ2hpbGQobil9ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO2lmKG4mJihpLmNsYXNzTmFtZT1uKSxyJiYoaS5zdHlsZS5jc3NUZXh0PXIpLCJzdHJpbmciPT10eXBlb2YgdClpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKTtlbHNlIGlmKHQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28paS5hcHBlbmRDaGlsZCh0W29dKTtyZXR1cm4gaX1mdW5jdGlvbiBpKGUsdCxuLGkpe3ZhciBvPXIoZSx0LG4saSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksb31mdW5jdGlvbiBvKGUsdCl7aWYoMz09dC5ub2RlVHlwZSYmKHQ9dC5wYXJlbnROb2RlKSxlLmNvbnRhaW5zKXJldHVybiBlLmNvbnRhaW5zKHQpO2Rve2lmKDExPT10Lm5vZGVUeXBlJiYodD10Lmhvc3QpLHQ9PWUpcmV0dXJuITB9d2hpbGUodD10LnBhcmVudE5vZGUpfWZ1bmN0aW9uIGEoKXt2YXIgZTt0cnl7ZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKHQpe2U9ZG9jdW1lbnQuYm9keXx8bnVsbH1mb3IoO2UmJmUuc2hhZG93Um9vdCYmZS5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7KWU9ZS5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIGV9ZnVuY3Rpb24gcyh0LG4pe3ZhciByPXQuY2xhc3NOYW1lO2UobikudGVzdChyKXx8KHQuY2xhc3NOYW1lKz0ocj8iICI6IiIpK24pfWZ1bmN0aW9uIHUodCxuKXtmb3IodmFyIHI9dC5zcGxpdCgiICIpLGk9MDtpPHIubGVuZ3RoO2krKylyW2ldJiYhZShyW2ldKS50ZXN0KG4pJiYobis9IiAiK3JbaV0pO3JldHVybiBufWZ1bmN0aW9uIGMoZSl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIGwoZSx0LG4pe3R8fCh0PXt9KTtmb3IodmFyIHIgaW4gZSkhZS5oYXNPd25Qcm9wZXJ0eShyKXx8ITE9PT1uJiZ0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKTtyZXR1cm4gdH1mdW5jdGlvbiBwKGUsdCxuLHIsaSl7bnVsbD09dCYmLTE9PSh0PWUuc2VhcmNoKC9bXlxzXHUwMGEwXS8pKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbz1yfHwwLGE9aXx8MDs7KXt2YXIgcz1lLmluZGV4T2YoIlx0IixvKTtpZihzPDB8fHM+PXQpcmV0dXJuIGErKHQtbyk7YSs9cy1vLGErPW4tYSVuLG89cysxfX1mdW5jdGlvbiBmKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoZVtuXT09dClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBkKGUsdCxuKXtmb3IodmFyIHI9MCxpPTA7Oyl7dmFyIG89ZS5pbmRleE9mKCJcdCIscik7LTE9PW8mJihvPWUubGVuZ3RoKTt2YXIgYT1vLXI7aWYobz09ZS5sZW5ndGh8fGkrYT49dClyZXR1cm4gcitNYXRoLm1pbihhLHQtaSk7aWYoaSs9by1yLGkrPW4taSVuLHI9bysxLGk+PXQpcmV0dXJuIHJ9fWZ1bmN0aW9uIGgoZSl7Zm9yKDtRYS5sZW5ndGg8PWU7KVFhLnB1c2gobShRYSkrIiAiKTtyZXR1cm4gUWFbZV19ZnVuY3Rpb24gbShlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBnKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPXQoZVtyXSxyKTtyZXR1cm4gbn1mdW5jdGlvbiB5KGUsdCxuKXtmb3IodmFyIHI9MCxpPW4odCk7cjxlLmxlbmd0aCYmbihlW3JdKTw9aTspcisrO2Uuc3BsaWNlKHIsMCx0KX1mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIGIoZSx0KXt2YXIgbjtyZXR1cm4gT2JqZWN0LmNyZWF0ZT9uPU9iamVjdC5jcmVhdGUoZSk6KHYucHJvdG90eXBlPWUsbj1uZXcgdiksdCYmbCh0LG4pLG59ZnVuY3Rpb24geChlKXtyZXR1cm4vXHcvLnRlc3QoZSl8fGU+Ilx4ODAiJiYoZS50b1VwcGVyQ2FzZSgpIT1lLnRvTG93ZXJDYXNlKCl8fEthLnRlc3QoZSkpfWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gdD8hISh0LnNvdXJjZS5pbmRleE9mKCJcXHciKT4tMSYmeChlKSl8fHQudGVzdChlKTp4KGUpfWZ1bmN0aW9uIEUoZSl7Zm9yKHZhciB0IGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSYmZVt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBEKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk+PTc2OCYmSmEudGVzdChlKX1mdW5jdGlvbiB3KGUsdCxuKXtmb3IoOyhuPDA/dD4wOnQ8ZS5sZW5ndGgpJiZEKGUuY2hhckF0KHQpKTspdCs9bjtyZXR1cm4gdH1mdW5jdGlvbiBTKGUsdCxuKXtmb3IodmFyIHI9dD5uPy0xOjE7Oyl7aWYodD09bilyZXR1cm4gdDt2YXIgaT0odCtuKS8yLG89cjwwP01hdGguY2VpbChpKTpNYXRoLmZsb29yKGkpO2lmKG89PXQpcmV0dXJuIGUobyk/dDpuO2Uobyk/bj1vOnQ9bytyfX1mdW5jdGlvbiBrKGUsdCxuKXt2YXIgbz10aGlzO3RoaXMuaW5wdXQ9bixvLnNjcm9sbGJhckZpbGxlcj1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLG8uc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCJ0cnVlIiksby5ndXR0ZXJGaWxsZXI9cigiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXIiKSxvLmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IiwidHJ1ZSIpLG8ubGluZURpdj1pKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLG8uc2VsZWN0aW9uRGl2PXIoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKSxvLmN1cnNvckRpdj1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY3Vyc29ycyIpLG8ubWVhc3VyZT1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLG8ubGluZU1lYXN1cmU9cigiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxvLmxpbmVTcGFjZT1pKCJkaXYiLFtvLm1lYXN1cmUsby5saW5lTWVhc3VyZSxvLnNlbGVjdGlvbkRpdixvLmN1cnNvckRpdixvLmxpbmVEaXZdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpO3ZhciBhPWkoImRpdiIsW28ubGluZVNwYWNlXSwiQ29kZU1pcnJvci1saW5lcyIpO28ubW92ZXI9cigiZGl2IixbYV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksby5zaXplcj1yKCJkaXYiLFtvLm1vdmVyXSwiQ29kZU1pcnJvci1zaXplciIpLG8uc2l6ZXJXaWR0aD1udWxsLG8uaGVpZ2h0Rm9yY2VyPXIoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitHYSsicHg7IHdpZHRoOiAxcHg7Iiksby5ndXR0ZXJzPXIoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksby5saW5lR3V0dGVyPW51bGwsby5zY3JvbGxlcj1yKCJkaXYiLFtvLnNpemVyLG8uaGVpZ2h0Rm9yY2VyLG8uZ3V0dGVyc10sIkNvZGVNaXJyb3Itc2Nyb2xsIiksby5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwiLTEiKSxvLndyYXBwZXI9cigiZGl2Iixbby5zY3JvbGxiYXJGaWxsZXIsby5ndXR0ZXJGaWxsZXIsby5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxiYSYmeGE8OCYmKG8uZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsby5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksQ2F8fG1hJiZPYXx8KG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxlJiYoZS5hcHBlbmRDaGlsZD9lLmFwcGVuZENoaWxkKG8ud3JhcHBlcik6ZShvLndyYXBwZXIpKSxvLnZpZXdGcm9tPW8udmlld1RvPXQuZmlyc3Qsby5yZXBvcnRlZFZpZXdGcm9tPW8ucmVwb3J0ZWRWaWV3VG89dC5maXJzdCxvLnZpZXc9W10sby5yZW5kZXJlZFZpZXc9bnVsbCxvLmV4dGVybmFsTWVhc3VyZWQ9bnVsbCxvLnZpZXdPZmZzZXQ9MCxvLmxhc3RXcmFwSGVpZ2h0PW8ubGFzdFdyYXBXaWR0aD0wLG8udXBkYXRlTGluZU51bWJlcnM9bnVsbCxvLm5hdGl2ZUJhcldpZHRoPW8uYmFySGVpZ2h0PW8uYmFyV2lkdGg9MCxvLnNjcm9sbGJhcnNDbGlwcGVkPSExLG8ubGluZU51bVdpZHRoPW8ubGluZU51bUlubmVyV2lkdGg9by5saW5lTnVtQ2hhcnM9bnVsbCxvLmFsaWduV2lkZ2V0cz0hMSxvLmNhY2hlZENoYXJXaWR0aD1vLmNhY2hlZFRleHRIZWlnaHQ9by5jYWNoZWRQYWRkaW5nSD1udWxsLG8ubWF4TGluZT1udWxsLG8ubWF4TGluZUxlbmd0aD0wLG8ubWF4TGluZUNoYW5nZWQ9ITEsby53aGVlbERYPW8ud2hlZWxEWT1vLndoZWVsU3RhcnRYPW8ud2hlZWxTdGFydFk9bnVsbCxvLnNoaWZ0PSExLG8uc2VsRm9yQ29udGV4dE1lbnU9bnVsbCxvLmFjdGl2ZVRvdWNoPW51bGwsbi5pbml0KG8pfWZ1bmN0aW9uIEEoZSx0KXtpZigodC09ZS5maXJzdCk8MHx8dD49ZS5zaXplKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gbGluZSAiKyh0K2UuZmlyc3QpKyIgaW4gdGhlIGRvY3VtZW50LiIpO2Zvcih2YXIgbj1lOyFuLmxpbmVzOylmb3IodmFyIHI9MDs7KytyKXt2YXIgaT1uLmNoaWxkcmVuW3JdLG89aS5jaHVua1NpemUoKTtpZih0PG8pe249aTticmVha310LT1vfXJldHVybiBuLmxpbmVzW3RdfWZ1bmN0aW9uIF8oZSx0LG4pe3ZhciByPVtdLGk9dC5saW5lO3JldHVybiBlLml0ZXIodC5saW5lLG4ubGluZSsxLGZ1bmN0aW9uKGUpe3ZhciBvPWUudGV4dDtpPT1uLmxpbmUmJihvPW8uc2xpY2UoMCxuLmNoKSksaT09dC5saW5lJiYobz1vLnNsaWNlKHQuY2gpKSxyLnB1c2gobyksKytpfSkscn1mdW5jdGlvbiBUKGUsdCxuKXt2YXIgcj1bXTtyZXR1cm4gZS5pdGVyKHQsbixmdW5jdGlvbihlKXtyLnB1c2goZS50ZXh0KX0pLHJ9ZnVuY3Rpb24gTyhlLHQpe3ZhciBuPXQtZS5oZWlnaHQ7aWYobilmb3IodmFyIHI9ZTtyO3I9ci5wYXJlbnQpci5oZWlnaHQrPW59ZnVuY3Rpb24gRihlKXtpZihudWxsPT1lLnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5wYXJlbnQsbj1mKHQubGluZXMsZSkscj10LnBhcmVudDtyO3Q9cixyPXIucGFyZW50KWZvcih2YXIgaT0wO3IuY2hpbGRyZW5baV0hPXQ7KytpKW4rPXIuY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIG4rdC5maXJzdH1mdW5jdGlvbiBOKGUsdCl7dmFyIG49ZS5maXJzdDtlOmRve2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgaT1lLmNoaWxkcmVuW3JdLG89aS5oZWlnaHQ7aWYodDxvKXtlPWk7Y29udGludWUgZX10LT1vLG4rPWkuY2h1bmtTaXplKCl9cmV0dXJuIG59d2hpbGUoIWUubGluZXMpO2Zvcih2YXIgYT0wO2E8ZS5saW5lcy5sZW5ndGg7KythKXt2YXIgcz1lLmxpbmVzW2FdLHU9cy5oZWlnaHQ7aWYodDx1KWJyZWFrO3QtPXV9cmV0dXJuIG4rYX1mdW5jdGlvbiBJKGUsdCl7cmV0dXJuIHQ+PWUuZmlyc3QmJnQ8ZS5maXJzdCtlLnNpemV9ZnVuY3Rpb24gTChlLHQpe3JldHVybiBTdHJpbmcoZS5saW5lTnVtYmVyRm9ybWF0dGVyKHQrZS5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiBQKGUsdCxuKXtpZih2b2lkIDA9PT1uJiYobj1udWxsKSwhKHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IFAoZSx0LG4pO3RoaXMubGluZT1lLHRoaXMuY2g9dCx0aGlzLnN0aWNreT1ufWZ1bmN0aW9uIE0oZSx0KXtyZXR1cm4gZS5saW5lLXQubGluZXx8ZS5jaC10LmNofWZ1bmN0aW9uIGooZSx0KXtyZXR1cm4gZS5zdGlja3k9PXQuc3RpY2t5JiYwPT1NKGUsdCl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gUChlLmxpbmUsZS5jaCl9ZnVuY3Rpb24gQihlLHQpe3JldHVybiBNKGUsdCk8MD90OmV9ZnVuY3Rpb24gJChlLHQpe3JldHVybiBNKGUsdCk8MD9lOnR9ZnVuY3Rpb24gVShlLHQpe3JldHVybiBNYXRoLm1heChlLmZpcnN0LE1hdGgubWluKHQsZS5maXJzdCtlLnNpemUtMSkpfWZ1bmN0aW9uIHooZSx0KXtpZih0LmxpbmU8ZS5maXJzdClyZXR1cm4gUChlLmZpcnN0LDApO3ZhciBuPWUuZmlyc3QrZS5zaXplLTE7cmV0dXJuIHQubGluZT5uP1AobixBKGUsbikudGV4dC5sZW5ndGgpOkcodCxBKGUsdC5saW5lKS50ZXh0Lmxlbmd0aCl9ZnVuY3Rpb24gRyhlLHQpe3ZhciBuPWUuY2g7cmV0dXJuIG51bGw9PW58fG4+dD9QKGUubGluZSx0KTpuPDA/UChlLmxpbmUsMCk6ZX1mdW5jdGlvbiBWKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyluW3JdPXooZSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBxKCl7WWE9ITB9ZnVuY3Rpb24gSCgpe1hhPSEwfWZ1bmN0aW9uIFcoZSx0LG4pe3RoaXMubWFya2VyPWUsdGhpcy5mcm9tPXQsdGhpcy50bz1ufWZ1bmN0aW9uIFEoZSx0KXtpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lW25dO2lmKHIubWFya2VyPT10KXJldHVybiByfX1mdW5jdGlvbiBLKGUsdCl7Zm9yKHZhciBuLHI9MDtyPGUubGVuZ3RoOysrcillW3JdIT10JiYobnx8KG49W10pKS5wdXNoKGVbcl0pO3JldHVybiBufWZ1bmN0aW9uIEooZSx0KXtlLm1hcmtlZFNwYW5zPWUubWFya2VkU3BhbnM/ZS5tYXJrZWRTcGFucy5jb25jYXQoW3RdKTpbdF0sdC5tYXJrZXIuYXR0YWNoTGluZShlKX1mdW5jdGlvbiBZKGUsdCxuKXt2YXIgcjtpZihlKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1lW2ldLGE9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChhLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD10Om8uZnJvbTx0KTtpZihzfHxvLmZyb209PXQmJiJib29rbWFyayI9PWEudHlwZSYmKCFufHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciB1PW51bGw9PW8udG98fChhLmluY2x1c2l2ZVJpZ2h0P28udG8+PXQ6by50bz50KTsocnx8KHI9W10pKS5wdXNoKG5ldyBXKGEsby5mcm9tLHU/bnVsbDpvLnRvKSl9fXJldHVybiByfWZ1bmN0aW9uIFgoZSx0LG4pe3ZhciByO2lmKGUpZm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPWVbaV0sYT1vLm1hcmtlcixzPW51bGw9PW8udG98fChhLmluY2x1c2l2ZVJpZ2h0P28udG8+PXQ6by50bz50KTtpZihzfHxvLmZyb209PXQmJiJib29rbWFyayI9PWEudHlwZSYmKCFufHxvLm1hcmtlci5pbnNlcnRMZWZ0KSl7dmFyIHU9bnVsbD09by5mcm9tfHwoYS5pbmNsdXNpdmVMZWZ0P28uZnJvbTw9dDpvLmZyb208dCk7KHJ8fChyPVtdKSkucHVzaChuZXcgVyhhLHU/bnVsbDpvLmZyb20tdCxudWxsPT1vLnRvP251bGw6by50by10KSl9fXJldHVybiByfWZ1bmN0aW9uIFooZSx0KXtpZih0LmZ1bGwpcmV0dXJuIG51bGw7dmFyIG49SShlLHQuZnJvbS5saW5lKSYmQShlLHQuZnJvbS5saW5lKS5tYXJrZWRTcGFucyxyPUkoZSx0LnRvLmxpbmUpJiZBKGUsdC50by5saW5lKS5tYXJrZWRTcGFucztpZighbiYmIXIpcmV0dXJuIG51bGw7dmFyIGk9dC5mcm9tLmNoLG89dC50by5jaCxhPTA9PU0odC5mcm9tLHQudG8pLHM9WShuLGksYSksdT1YKHIsbyxhKSxjPTE9PXQudGV4dC5sZW5ndGgsbD1tKHQudGV4dCkubGVuZ3RoKyhjP2k6MCk7aWYocylmb3IodmFyIHA9MDtwPHMubGVuZ3RoOysrcCl7dmFyIGY9c1twXTtpZihudWxsPT1mLnRvKXt2YXIgZD1RKHUsZi5tYXJrZXIpO2Q/YyYmKGYudG89bnVsbD09ZC50bz9udWxsOmQudG8rbCk6Zi50bz1pfX1pZih1KWZvcih2YXIgaD0wO2g8dS5sZW5ndGg7KytoKXt2YXIgZz11W2hdO2lmKG51bGwhPWcudG8mJihnLnRvKz1sKSxudWxsPT1nLmZyb20pe3ZhciB5PVEocyxnLm1hcmtlcik7eXx8KGcuZnJvbT1sLGMmJihzfHwocz1bXSkpLnB1c2goZykpfWVsc2UgZy5mcm9tKz1sLGMmJihzfHwocz1bXSkpLnB1c2goZyl9cyYmKHM9ZWUocykpLHUmJnUhPXMmJih1PWVlKHUpKTt2YXIgdj1bc107aWYoIWMpe3ZhciBiLHg9dC50ZXh0Lmxlbmd0aC0yO2lmKHg+MCYmcylmb3IodmFyIEM9MDtDPHMubGVuZ3RoOysrQyludWxsPT1zW0NdLnRvJiYoYnx8KGI9W10pKS5wdXNoKG5ldyBXKHNbQ10ubWFya2VyLG51bGwsbnVsbCkpO2Zvcih2YXIgRT0wO0U8eDsrK0Updi5wdXNoKGIpO3YucHVzaCh1KX1yZXR1cm4gdn1mdW5jdGlvbiBlZShlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZVt0XTtudWxsIT1uLmZyb20mJm4uZnJvbT09bi50byYmITEhPT1uLm1hcmtlci5jbGVhcldoZW5FbXB0eSYmZS5zcGxpY2UodC0tLDEpfXJldHVybiBlLmxlbmd0aD9lOm51bGx9ZnVuY3Rpb24gdGUoZSx0LG4pe3ZhciByPW51bGw7aWYoZS5pdGVyKHQubGluZSxuLmxpbmUrMSxmdW5jdGlvbihlKXtpZihlLm1hcmtlZFNwYW5zKWZvcih2YXIgdD0wO3Q8ZS5tYXJrZWRTcGFucy5sZW5ndGg7Kyt0KXt2YXIgbj1lLm1hcmtlZFNwYW5zW3RdLm1hcmtlcjshbi5yZWFkT25seXx8ciYmLTEhPWYocixuKXx8KHJ8fChyPVtdKSkucHVzaChuKX19KSwhcilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOnQsdG86bn1dLG89MDtvPHIubGVuZ3RoOysrbylmb3IodmFyIGE9cltvXSxzPWEuZmluZCgwKSx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBjPWlbdV07aWYoIShNKGMudG8scy5mcm9tKTwwfHxNKGMuZnJvbSxzLnRvKT4wKSl7dmFyIGw9W3UsMV0scD1NKGMuZnJvbSxzLmZyb20pLGQ9TShjLnRvLHMudG8pOyhwPDB8fCFhLmluY2x1c2l2ZUxlZnQmJiFwKSYmbC5wdXNoKHtmcm9tOmMuZnJvbSx0bzpzLmZyb219KSwoZD4wfHwhYS5pbmNsdXNpdmVSaWdodCYmIWQpJiZsLnB1c2goe2Zyb206cy50byx0bzpjLnRvfSksaS5zcGxpY2UuYXBwbHkoaSxsKSx1Kz1sLmxlbmd0aC0zfX1yZXR1cm4gaX1mdW5jdGlvbiBuZShlKXt2YXIgdD1lLm1hcmtlZFNwYW5zO2lmKHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKXRbbl0ubWFya2VyLmRldGFjaExpbmUoZSk7ZS5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiByZShlLHQpe2lmKHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKXRbbl0ubWFya2VyLmF0dGFjaExpbmUoZSk7ZS5tYXJrZWRTcGFucz10fX1mdW5jdGlvbiBpZShlKXtyZXR1cm4gZS5pbmNsdXNpdmVMZWZ0Py0xOjB9ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIGUuaW5jbHVzaXZlUmlnaHQ/MTowfWZ1bmN0aW9uIGFlKGUsdCl7dmFyIG49ZS5saW5lcy5sZW5ndGgtdC5saW5lcy5sZW5ndGg7aWYoMCE9bilyZXR1cm4gbjt2YXIgcj1lLmZpbmQoKSxpPXQuZmluZCgpLG89TShyLmZyb20saS5mcm9tKXx8aWUoZSktaWUodCk7aWYobylyZXR1cm4tbzt2YXIgYT1NKHIudG8saS50byl8fG9lKGUpLW9lKHQpO3JldHVybiBhfHx0LmlkLWUuaWR9ZnVuY3Rpb24gc2UoZSx0KXt2YXIgbixyPVhhJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBpPXZvaWQgMCxvPTA7bzxyLmxlbmd0aDsrK28paT1yW29dLGkubWFya2VyLmNvbGxhcHNlZCYmbnVsbD09KHQ/aS5mcm9tOmkudG8pJiYoIW58fGFlKG4saS5tYXJrZXIpPDApJiYobj1pLm1hcmtlcik7cmV0dXJuIG59ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIHNlKGUsITApfWZ1bmN0aW9uIGNlKGUpe3JldHVybiBzZShlLCExKX1mdW5jdGlvbiBsZShlLHQpe3ZhciBuLHI9WGEmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIG89cltpXTtvLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1vLmZyb218fG8uZnJvbTx0KSYmKG51bGw9PW8udG98fG8udG8+dCkmJighbnx8YWUobixvLm1hcmtlcik8MCkmJihuPW8ubWFya2VyKX1yZXR1cm4gbn1mdW5jdGlvbiBwZShlLHQsbixyLGkpe3ZhciBvPUEoZSx0KSxhPVhhJiZvLm1hcmtlZFNwYW5zO2lmKGEpZm9yKHZhciBzPTA7czxhLmxlbmd0aDsrK3Mpe3ZhciB1PWFbc107aWYodS5tYXJrZXIuY29sbGFwc2VkKXt2YXIgYz11Lm1hcmtlci5maW5kKDApLGw9TShjLmZyb20sbil8fGllKHUubWFya2VyKS1pZShpKSxwPU0oYy50byxyKXx8b2UodS5tYXJrZXIpLW9lKGkpO2lmKCEobD49MCYmcDw9MHx8bDw9MCYmcD49MCkmJihsPD0wJiYodS5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJmkuaW5jbHVzaXZlTGVmdD9NKGMudG8sbik+PTA6TShjLnRvLG4pPjApfHxsPj0wJiYodS5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJmkuaW5jbHVzaXZlTGVmdD9NKGMuZnJvbSxyKTw9MDpNKGMuZnJvbSxyKTwwKSkpcmV0dXJuITB9fX1mdW5jdGlvbiBmZShlKXtmb3IodmFyIHQ7dD11ZShlKTspZT10LmZpbmQoLTEsITApLmxpbmU7cmV0dXJuIGV9ZnVuY3Rpb24gZGUoZSl7Zm9yKHZhciB0O3Q9Y2UoZSk7KWU9dC5maW5kKDEsITApLmxpbmU7cmV0dXJuIGV9ZnVuY3Rpb24gaGUoZSl7Zm9yKHZhciB0LG47dD1jZShlKTspZT10LmZpbmQoMSwhMCkubGluZSwobnx8KG49W10pKS5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIG1lKGUsdCl7dmFyIG49QShlLHQpLHI9ZmUobik7cmV0dXJuIG49PXI/dDpGKHIpfWZ1bmN0aW9uIGdlKGUsdCl7aWYodD5lLmxhc3RMaW5lKCkpcmV0dXJuIHQ7dmFyIG4scj1BKGUsdCk7aWYoIXllKGUscikpcmV0dXJuIHQ7Zm9yKDtuPWNlKHIpOylyPW4uZmluZCgxLCEwKS5saW5lO3JldHVybiBGKHIpKzF9ZnVuY3Rpb24geWUoZSx0KXt2YXIgbj1YYSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgcj12b2lkIDAsaT0wO2k8bi5sZW5ndGg7KytpKWlmKHI9bltpXSxyLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PXIuZnJvbSlyZXR1cm4hMDtpZighci5tYXJrZXIud2lkZ2V0Tm9kZSYmMD09ci5mcm9tJiZyLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZ2ZShlLHQscikpcmV0dXJuITB9fWZ1bmN0aW9uIHZlKGUsdCxuKXtpZihudWxsPT1uLnRvKXt2YXIgcj1uLm1hcmtlci5maW5kKDEsITApO3JldHVybiB2ZShlLHIubGluZSxRKHIubGluZS5tYXJrZWRTcGFucyxuLm1hcmtlcikpfWlmKG4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0JiZuLnRvPT10LnRleHQubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgaT12b2lkIDAsbz0wO288dC5tYXJrZWRTcGFucy5sZW5ndGg7KytvKWlmKGk9dC5tYXJrZWRTcGFuc1tvXSxpLm1hcmtlci5jb2xsYXBzZWQmJiFpLm1hcmtlci53aWRnZXROb2RlJiZpLmZyb209PW4udG8mJihudWxsPT1pLnRvfHxpLnRvIT1uLmZyb20pJiYoaS5tYXJrZXIuaW5jbHVzaXZlTGVmdHx8bi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpJiZ2ZShlLHQsaSkpcmV0dXJuITB9ZnVuY3Rpb24gYmUoZSl7ZT1mZShlKTtmb3IodmFyIHQ9MCxuPWUucGFyZW50LHI9MDtyPG4ubGluZXMubGVuZ3RoOysrcil7dmFyIGk9bi5saW5lc1tyXTtpZihpPT1lKWJyZWFrO3QrPWkuaGVpZ2h0fWZvcih2YXIgbz1uLnBhcmVudDtvO249byxvPW4ucGFyZW50KWZvcih2YXIgYT0wO2E8by5jaGlsZHJlbi5sZW5ndGg7KythKXt2YXIgcz1vLmNoaWxkcmVuW2FdO2lmKHM9PW4pYnJlYWs7dCs9cy5oZWlnaHR9cmV0dXJuIHR9ZnVuY3Rpb24geGUoZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciB0LG49ZS50ZXh0Lmxlbmd0aCxyPWU7dD11ZShyKTspe3ZhciBpPXQuZmluZCgwLCEwKTtyPWkuZnJvbS5saW5lLG4rPWkuZnJvbS5jaC1pLnRvLmNofWZvcihyPWU7dD1jZShyKTspe3ZhciBvPXQuZmluZCgwLCEwKTtuLT1yLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxyPW8udG8ubGluZSxuKz1yLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gQ2UoZSl7dmFyIHQ9ZS5kaXNwbGF5LG49ZS5kb2M7dC5tYXhMaW5lPUEobixuLmZpcnN0KSx0Lm1heExpbmVMZW5ndGg9eGUodC5tYXhMaW5lKSx0Lm1heExpbmVDaGFuZ2VkPSEwLG4uaXRlcihmdW5jdGlvbihlKXt2YXIgbj14ZShlKTtuPnQubWF4TGluZUxlbmd0aCYmKHQubWF4TGluZUxlbmd0aD1uLHQubWF4TGluZT1lKX0pfWZ1bmN0aW9uIEVlKGUsdCxuLHIpe2lmKCFlKXJldHVybiByKHQsbiwibHRyIiwwKTtmb3IodmFyIGk9ITEsbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgYT1lW29dOyhhLmZyb208biYmYS50bz50fHx0PT1uJiZhLnRvPT10KSYmKHIoTWF0aC5tYXgoYS5mcm9tLHQpLE1hdGgubWluKGEudG8sbiksMT09YS5sZXZlbD8icnRsIjoibHRyIixvKSxpPSEwKX1pfHxyKHQsbiwibHRyIil9ZnVuY3Rpb24gRGUoZSx0LG4pe3ZhciByO1phPW51bGw7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPWVbaV07aWYoby5mcm9tPHQmJm8udG8+dClyZXR1cm4gaTtvLnRvPT10JiYoby5mcm9tIT1vLnRvJiYiYmVmb3JlIj09bj9yPWk6WmE9aSksby5mcm9tPT10JiYoby5mcm9tIT1vLnRvJiYiYmVmb3JlIiE9bj9yPWk6WmE9aSl9cmV0dXJuIG51bGwhPXI/cjpaYX1mdW5jdGlvbiB3ZShlLHQpe3ZhciBuPWUub3JkZXI7cmV0dXJuIG51bGw9PW4mJihuPWUub3JkZXI9ZXMoZS50ZXh0LHQpKSxufWZ1bmN0aW9uIFNlKGUsdCl7cmV0dXJuIGUuX2hhbmRsZXJzJiZlLl9oYW5kbGVyc1t0XXx8dHN9ZnVuY3Rpb24ga2UoZSx0LG4pe2lmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcillLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKTtlbHNlIGlmKGUuZGV0YWNoRXZlbnQpZS5kZXRhY2hFdmVudCgib24iK3Qsbik7ZWxzZXt2YXIgcj1lLl9oYW5kbGVycyxpPXImJnJbdF07aWYoaSl7dmFyIG89ZihpLG4pO28+LTEmJihyW3RdPWkuc2xpY2UoMCxvKS5jb25jYXQoaS5zbGljZShvKzEpKSl9fX1mdW5jdGlvbiBBZShlLHQpe3ZhciBuPVNlKGUsdCk7aWYobi5sZW5ndGgpZm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxpPTA7aTxuLmxlbmd0aDsrK2kpbltpXS5hcHBseShudWxsLHIpfWZ1bmN0aW9uIF9lKGUsdCxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXt0eXBlOnQscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9fSksQWUoZSxufHx0LnR5cGUsZSx0KSxMZSh0KXx8dC5jb2RlbWlycm9ySWdub3JlfWZ1bmN0aW9uIFRlKGUpe3ZhciB0PWUuX2hhbmRsZXJzJiZlLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTtpZih0KWZvcih2YXIgbj1lLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnN8fChlLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnM9W10pLHI9MDtyPHQubGVuZ3RoOysrciktMT09ZihuLHRbcl0pJiZuLnB1c2godFtyXSl9ZnVuY3Rpb24gT2UoZSx0KXtyZXR1cm4gU2UoZSx0KS5sZW5ndGg+MH1mdW5jdGlvbiBGZShlKXtlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe25zKHRoaXMsZSx0KX0sZS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKGUsdCl7a2UodGhpcyxlLHQpfX1mdW5jdGlvbiBOZShlKXtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEllKGUpe2Uuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6ZS5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIG51bGwhPWUuZGVmYXVsdFByZXZlbnRlZD9lLmRlZmF1bHRQcmV2ZW50ZWQ6MD09ZS5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQZShlKXtOZShlKSxJZShlKX1mdW5jdGlvbiBNZShlKXtyZXR1cm4gZS50YXJnZXR8fGUuc3JjRWxlbWVudH1mdW5jdGlvbiBqZShlKXt2YXIgdD1lLndoaWNoO3JldHVybiBudWxsPT10JiYoMSZlLmJ1dHRvbj90PTE6MiZlLmJ1dHRvbj90PTM6NCZlLmJ1dHRvbiYmKHQ9MikpLEZhJiZlLmN0cmxLZXkmJjE9PXQmJih0PTMpLHR9ZnVuY3Rpb24gUmUoZSl7aWYobnVsbD09VWEpe3ZhciB0PXIoInNwYW4iLCJcdTIwMGIiKTtuKGUscigic3BhbiIsW3QsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT1lLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoVWE9dC5vZmZzZXRXaWR0aDw9MSYmdC5vZmZzZXRIZWlnaHQ+MiYmIShiYSYmeGE8OCkpfXZhciBpPVVhP3IoInNwYW4iLCJcdTIwMGIiKTpyKCJzcGFuIiwiXHhhMCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLCIiKSxpfWZ1bmN0aW9uIEJlKGUpe2lmKG51bGwhPXphKXJldHVybiB6YTt2YXIgcj1uKGUsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFcdTA2MmVBIikpLGk9UGEociwwLDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89UGEociwxLDIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0KGUpLCEoIWl8fGkubGVmdD09aS5yaWdodCkmJih6YT1vLnJpZ2h0LWkucmlnaHQ8Myl9ZnVuY3Rpb24gJGUoZSl7aWYobnVsbCE9c3MpcmV0dXJuIHNzO3ZhciB0PW4oZSxyKCJzcGFuIiwieCIpKSxpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1QYSh0LDAsMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHNzPU1hdGguYWJzKGkubGVmdC1vLmxlZnQpPjF9ZnVuY3Rpb24gVWUoZSx0KXthcmd1bWVudHMubGVuZ3RoPjImJih0LmRlcGVuZGVuY2llcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLHVzW2VdPXR9ZnVuY3Rpb24gemUoZSx0KXtjc1tlXT10fWZ1bmN0aW9uIEdlKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmY3MuaGFzT3duUHJvcGVydHkoZSkpZT1jc1tlXTtlbHNlIGlmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5uYW1lJiZjcy5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpKXt2YXIgdD1jc1tlLm5hbWVdOyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9e25hbWU6dH0pLGU9Yih0LGUpLGUubmFtZT10Lm5hbWV9ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gR2UoImFwcGxpY2F0aW9uL3htbCIpO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCtqc29uJC8udGVzdChlKSlyZXR1cm4gR2UoImFwcGxpY2F0aW9uL2pzb24iKX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX1mdW5jdGlvbiBWZShlLHQpe3Q9R2UodCk7dmFyIG49dXNbdC5uYW1lXTtpZighbilyZXR1cm4gVmUoZSwidGV4dC9wbGFpbiIpO3ZhciByPW4oZSx0KTtpZihscy5oYXNPd25Qcm9wZXJ0eSh0Lm5hbWUpKXt2YXIgaT1sc1t0Lm5hbWVdO2Zvcih2YXIgbyBpbiBpKWkuaGFzT3duUHJvcGVydHkobykmJihyLmhhc093blByb3BlcnR5KG8pJiYoclsiXyIrb109cltvXSkscltvXT1pW29dKX1pZihyLm5hbWU9dC5uYW1lLHQuaGVscGVyVHlwZSYmKHIuaGVscGVyVHlwZT10LmhlbHBlclR5cGUpLHQubW9kZVByb3BzKWZvcih2YXIgYSBpbiB0Lm1vZGVQcm9wcylyW2FdPXQubW9kZVByb3BzW2FdO3JldHVybiByfWZ1bmN0aW9uIHFlKGUsdCl7bCh0LGxzLmhhc093blByb3BlcnR5KGUpP2xzW2VdOmxzW2VdPXt9KX1mdW5jdGlvbiBIZShlLHQpe2lmKCEwPT09dClyZXR1cm4gdDtpZihlLmNvcHlTdGF0ZSlyZXR1cm4gZS5jb3B5U3RhdGUodCk7dmFyIG49e307Zm9yKHZhciByIGluIHQpe3ZhciBpPXRbcl07aSBpbnN0YW5jZW9mIEFycmF5JiYoaT1pLmNvbmNhdChbXSkpLG5bcl09aX1yZXR1cm4gbn1mdW5jdGlvbiBXZShlLHQpe2Zvcih2YXIgbjtlLmlubmVyTW9kZSYmKG49ZS5pbm5lck1vZGUodCkpJiZuLm1vZGUhPWU7KXQ9bi5zdGF0ZSxlPW4ubW9kZTtyZXR1cm4gbnx8e21vZGU6ZSxzdGF0ZTp0fX1mdW5jdGlvbiBRZShlLHQsbil7cmV0dXJuIWUuc3RhcnRTdGF0ZXx8ZS5zdGFydFN0YXRlKHQsbil9ZnVuY3Rpb24gS2UoZSx0LG4scil7dmFyIGk9W2Uuc3RhdGUubW9kZUdlbl0sbz17fTtydChlLHQudGV4dCxlLmRvYy5tb2RlLG4sZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5wdXNoKGUsdCl9LG8scik7Zm9yKHZhciBhPW4uc3RhdGUscz0wO3M8ZS5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytzKSFmdW5jdGlvbihyKXtuLmJhc2VUb2tlbnM9aTt2YXIgcz1lLnN0YXRlLm92ZXJsYXlzW3JdLHU9MSxjPTA7bi5zdGF0ZT0hMCxydChlLHQudGV4dCxzLm1vZGUsbixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj11O2M8ZTspe3ZhciByPWlbdV07cj5lJiZpLnNwbGljZSh1LDEsZSxpW3UrMV0sciksdSs9MixjPU1hdGgubWluKGUscil9aWYodClpZihzLm9wYXF1ZSlpLnNwbGljZShuLHUtbixlLCJvdmVybGF5ICIrdCksdT1uKzI7ZWxzZSBmb3IoO248dTtuKz0yKXt2YXIgbz1pW24rMV07aVtuKzFdPShvP28rIiAiOiIiKSsib3ZlcmxheSAiK3R9fSxvKSxuLnN0YXRlPWEsbi5iYXNlVG9rZW5zPW51bGwsbi5iYXNlVG9rZW5Qb3M9MX0ocyk7cmV0dXJue3N0eWxlczppLGNsYXNzZXM6by5iZ0NsYXNzfHxvLnRleHRDbGFzcz9vOm51bGx9fWZ1bmN0aW9uIEplKGUsdCxuKXtpZighdC5zdHlsZXN8fHQuc3R5bGVzWzBdIT1lLnN0YXRlLm1vZGVHZW4pe3ZhciByPVllKGUsRih0KSksaT10LnRleHQubGVuZ3RoPmUub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgmJkhlKGUuZG9jLm1vZGUsci5zdGF0ZSksbz1LZShlLHQscik7aSYmKHIuc3RhdGU9aSksdC5zdGF0ZUFmdGVyPXIuc2F2ZSghaSksdC5zdHlsZXM9by5zdHlsZXMsby5jbGFzc2VzP3Quc3R5bGVDbGFzc2VzPW8uY2xhc3Nlczp0LnN0eWxlQ2xhc3NlcyYmKHQuc3R5bGVDbGFzc2VzPW51bGwpLG49PT1lLmRvYy5oaWdobGlnaHRGcm9udGllciYmKGUuZG9jLm1vZGVGcm9udGllcj1NYXRoLm1heChlLmRvYy5tb2RlRnJvbnRpZXIsKytlLmRvYy5oaWdobGlnaHRGcm9udGllcikpfXJldHVybiB0LnN0eWxlc31mdW5jdGlvbiBZZShlLHQsbil7dmFyIHI9ZS5kb2MsaT1lLmRpc3BsYXk7aWYoIXIubW9kZS5zdGFydFN0YXRlKXJldHVybiBuZXcgZHMociwhMCx0KTt2YXIgbz1pdChlLHQsbiksYT1vPnIuZmlyc3QmJkEocixvLTEpLnN0YXRlQWZ0ZXIscz1hP2RzLmZyb21TYXZlZChyLGEsbyk6bmV3IGRzKHIsUWUoci5tb2RlKSxvKTtyZXR1cm4gci5pdGVyKG8sdCxmdW5jdGlvbihuKXtYZShlLG4udGV4dCxzKTt2YXIgcj1zLmxpbmU7bi5zdGF0ZUFmdGVyPXI9PXQtMXx8ciU1PT0wfHxyPj1pLnZpZXdGcm9tJiZyPGkudmlld1RvP3Muc2F2ZSgpOm51bGwscy5uZXh0TGluZSgpfSksbiYmKHIubW9kZUZyb250aWVyPXMubGluZSksc31mdW5jdGlvbiBYZShlLHQsbixyKXt2YXIgaT1lLmRvYy5tb2RlLG89bmV3IHBzKHQsZS5vcHRpb25zLnRhYlNpemUsbik7Zm9yKG8uc3RhcnQ9by5wb3M9cnx8MCwiIj09dCYmWmUoaSxuLnN0YXRlKTshby5lb2woKTspZXQoaSxvLG4uc3RhdGUpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gWmUoZSx0KXtpZihlLmJsYW5rTGluZSlyZXR1cm4gZS5ibGFua0xpbmUodCk7aWYoZS5pbm5lck1vZGUpe3ZhciBuPVdlKGUsdCk7cmV0dXJuIG4ubW9kZS5ibGFua0xpbmU/bi5tb2RlLmJsYW5rTGluZShuLnN0YXRlKTp2b2lkIDB9fWZ1bmN0aW9uIGV0KGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8MTA7aSsrKXtyJiYoclswXT1XZShlLG4pLm1vZGUpO3ZhciBvPWUudG9rZW4odCxuKTtpZih0LnBvcz50LnN0YXJ0KXJldHVybiBvfXRocm93IG5ldyBFcnJvcigiTW9kZSAiK2UubmFtZSsiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKX1mdW5jdGlvbiB0dChlLHQsbixyKXt2YXIgaSxvPWUuZG9jLGE9by5tb2RlO3Q9eihvLHQpO3ZhciBzLHU9QShvLHQubGluZSksYz1ZZShlLHQubGluZSxuKSxsPW5ldyBwcyh1LnRleHQsZS5vcHRpb25zLnRhYlNpemUsYyk7Zm9yKHImJihzPVtdKTsocnx8bC5wb3M8dC5jaCkmJiFsLmVvbCgpOylsLnN0YXJ0PWwucG9zLGk9ZXQoYSxsLGMuc3RhdGUpLHImJnMucHVzaChuZXcgaHMobCxpLEhlKG8ubW9kZSxjLnN0YXRlKSkpO3JldHVybiByP3M6bmV3IGhzKGwsaSxjLnN0YXRlKX1mdW5jdGlvbiBudChlLHQpe2lmKGUpZm9yKDs7KXt2YXIgbj1lLm1hdGNoKC8oPzpefFxzKylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighbilicmVhaztlPWUuc2xpY2UoMCxuLmluZGV4KStlLnNsaWNlKG4uaW5kZXgrblswXS5sZW5ndGgpO3ZhciByPW5bMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PXRbcl0/dFtyXT1uWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK25bMl0rIig/OiR8cykiKS50ZXN0KHRbcl0pfHwodFtyXSs9IiAiK25bMl0pfXJldHVybiBlfWZ1bmN0aW9uIHJ0KGUsdCxuLHIsaSxvLGEpe3ZhciBzPW4uZmxhdHRlblNwYW5zO251bGw9PXMmJihzPWUub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciB1LGM9MCxsPW51bGwscD1uZXcgcHModCxlLm9wdGlvbnMudGFiU2l6ZSxyKSxmPWUub3B0aW9ucy5hZGRNb2RlQ2xhc3MmJltudWxsXTtmb3IoIiI9PXQmJm50KFplKG4sci5zdGF0ZSksbyk7IXAuZW9sKCk7KXtpZihwLnBvcz5lLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoPyhzPSExLGEmJlhlKGUsdCxyLHAucG9zKSxwLnBvcz10Lmxlbmd0aCx1PW51bGwpOnU9bnQoZXQobixwLHIuc3RhdGUsZiksbyksZil7dmFyIGQ9ZlswXS5uYW1lO2QmJih1PSJtLSIrKHU/ZCsiICIrdTpkKSl9aWYoIXN8fGwhPXUpe2Zvcig7YzxwLnN0YXJ0OyljPU1hdGgubWluKHAuc3RhcnQsYys1ZTMpLGkoYyxsKTtsPXV9cC5zdGFydD1wLnBvc31mb3IoO2M8cC5wb3M7KXt2YXIgaD1NYXRoLm1pbihwLnBvcyxjKzVlMyk7aShoLGwpLGM9aH19ZnVuY3Rpb24gaXQoZSx0LG4pe2Zvcih2YXIgcixpLG89ZS5kb2MsYT1uPy0xOnQtKGUuZG9jLm1vZGUuaW5uZXJNb2RlPzFlMzoxMDApLHM9dDtzPmE7LS1zKXtpZihzPD1vLmZpcnN0KXJldHVybiBvLmZpcnN0O3ZhciB1PUEobyxzLTEpLGM9dS5zdGF0ZUFmdGVyO2lmKGMmJighbnx8cysoYyBpbnN0YW5jZW9mIGZzP2MubG9va0FoZWFkOjApPD1vLm1vZGVGcm9udGllcikpcmV0dXJuIHM7dmFyIGw9cCh1LnRleHQsbnVsbCxlLm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fHI+bCkmJihpPXMtMSxyPWwpfXJldHVybiBpfWZ1bmN0aW9uIG90KGUsdCl7aWYoZS5tb2RlRnJvbnRpZXI9TWF0aC5taW4oZS5tb2RlRnJvbnRpZXIsdCksIShlLmhpZ2hsaWdodEZyb250aWVyPHQtMTApKXtmb3IodmFyIG49ZS5maXJzdCxyPXQtMTtyPm47ci0tKXt2YXIgaT1BKGUscikuc3RhdGVBZnRlcjtpZihpJiYoIShpIGluc3RhbmNlb2YgZnMpfHxyK2kubG9va0FoZWFkPHQpKXtuPXIrMTticmVha319ZS5oaWdobGlnaHRGcm9udGllcj1NYXRoLm1pbihlLmhpZ2hsaWdodEZyb250aWVyLG4pfX1mdW5jdGlvbiBhdChlLHQsbixyKXtlLnRleHQ9dCxlLnN0YXRlQWZ0ZXImJihlLnN0YXRlQWZ0ZXI9bnVsbCksZS5zdHlsZXMmJihlLnN0eWxlcz1udWxsKSxudWxsIT1lLm9yZGVyJiYoZS5vcmRlcj1udWxsKSxuZShlKSxyZShlLG4pO3ZhciBpPXI/cihlKToxO2khPWUuaGVpZ2h0JiZPKGUsaSl9ZnVuY3Rpb24gc3QoZSl7ZS5wYXJlbnQ9bnVsbCxuZShlKX1mdW5jdGlvbiB1dChlLHQpe2lmKCFlfHwvXlxzKiQvLnRlc3QoZSkpcmV0dXJuIG51bGw7dmFyIG49dC5hZGRNb2RlQ2xhc3M/dnM6eXM7cmV0dXJuIG5bZV18fChuW2VdPWUucmVwbGFjZSgvXFMrL2csImNtLSQmIikpfWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49aSgic3BhbiIsbnVsbCxudWxsLENhPyJwYWRkaW5nLXJpZ2h0OiAuMXB4IjpudWxsKSxyPXtwcmU6aSgicHJlIixbbl0sIkNvZGVNaXJyb3ItbGluZSIpLGNvbnRlbnQ6bixjb2w6MCxwb3M6MCxjbTplLHRyYWlsaW5nU3BhY2U6ITEsc3BsaXRTcGFjZXM6KGJhfHxDYSkmJmUuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKX07dC5tZWFzdXJlPXt9O2Zvcih2YXIgbz0wO288PSh0LnJlc3Q/dC5yZXN0Lmxlbmd0aDowKTtvKyspe3ZhciBhPW8/dC5yZXN0W28tMV06dC5saW5lLHM9dm9pZCAwO3IucG9zPTAsci5hZGRUb2tlbj1wdCxCZShlLmRpc3BsYXkubWVhc3VyZSkmJihzPXdlKGEsZS5kb2MuZGlyZWN0aW9uKSkmJihyLmFkZFRva2VuPWR0KHIuYWRkVG9rZW4scykpLHIubWFwPVtdO210KGEscixKZShlLGEsdCE9ZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQmJkYoYSkpKSxhLnN0eWxlQ2xhc3NlcyYmKGEuc3R5bGVDbGFzc2VzLmJnQ2xhc3MmJihyLmJnQ2xhc3M9dShhLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzLHIuYmdDbGFzc3x8IiIpKSxhLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz11KGEuc3R5bGVDbGFzc2VzLnRleHRDbGFzcyxyLnRleHRDbGFzc3x8IiIpKSksMD09ci5tYXAubGVuZ3RoJiZyLm1hcC5wdXNoKDAsMCxyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoUmUoZS5kaXNwbGF5Lm1lYXN1cmUpKSksMD09bz8odC5tZWFzdXJlLm1hcD1yLm1hcCx0Lm1lYXN1cmUuY2FjaGU9e30pOigodC5tZWFzdXJlLm1hcHN8fCh0Lm1lYXN1cmUubWFwcz1bXSkpLnB1c2goci5tYXApLCh0Lm1lYXN1cmUuY2FjaGVzfHwodC5tZWFzdXJlLmNhY2hlcz1bXSkpLnB1c2goe30pKX1pZihDYSl7dmFyIGM9ci5jb250ZW50Lmxhc3RDaGlsZDsoL1xiY20tdGFiXGIvLnRlc3QoYy5jbGFzc05hbWUpfHxjLnF1ZXJ5U2VsZWN0b3ImJmMucXVlcnlTZWxlY3RvcigiLmNtLXRhYiIpKSYmKHIuY29udGVudC5jbGFzc05hbWU9ImNtLXRhYi13cmFwLWhhY2siKX1yZXR1cm4gQWUoZSwicmVuZGVyTGluZSIsZSx0LmxpbmUsci5wcmUpLHIucHJlLmNsYXNzTmFtZSYmKHIudGV4dENsYXNzPXUoci5wcmUuY2xhc3NOYW1lLHIudGV4dENsYXNzfHwiIikpLHJ9ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9cigic3BhbiIsIlx1MjAyMiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIHQudGl0bGU9IlxcdSIrZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdC50aXRsZSksdH1mdW5jdGlvbiBwdChlLHQsbixpLG8sYSxzKXtpZih0KXt2YXIgdSxjPWUuc3BsaXRTcGFjZXM/ZnQodCxlLnRyYWlsaW5nU3BhY2UpOnQsbD1lLmNtLnN0YXRlLnNwZWNpYWxDaGFycyxwPSExO2lmKGwudGVzdCh0KSl7dT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKHZhciBmPTA7Oyl7bC5sYXN0SW5kZXg9Zjt2YXIgZD1sLmV4ZWModCksbT1kP2QuaW5kZXgtZjp0Lmxlbmd0aC1mO2lmKG0pe3ZhciBnPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGMuc2xpY2UoZixmK20pKTtiYSYmeGE8OT91LmFwcGVuZENoaWxkKHIoInNwYW4iLFtnXSkpOnUuYXBwZW5kQ2hpbGQoZyksZS5tYXAucHVzaChlLnBvcyxlLnBvcyttLGcpLGUuY29sKz1tLGUucG9zKz1tfWlmKCFkKWJyZWFrO2YrPW0rMTt2YXIgeT12b2lkIDA7aWYoIlx0Ij09ZFswXSl7dmFyIHY9ZS5jbS5vcHRpb25zLnRhYlNpemUsYj12LWUuY29sJXY7eT11LmFwcGVuZENoaWxkKHIoInNwYW4iLGgoYiksImNtLXRhYiIpKSx5LnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLHkuc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwiXHQiKSxlLmNvbCs9Yn1lbHNlIlxyIj09ZFswXXx8IlxuIj09ZFswXT8oeT11LmFwcGVuZENoaWxkKHIoInNwYW4iLCJcciI9PWRbMF0/Ilx1MjQwZCI6Ilx1MjQyNCIsImNtLWludmFsaWRjaGFyIikpLHkuc2V0QXR0cmlidXRlKCJjbS10ZXh0IixkWzBdKSxlLmNvbCs9MSk6KHk9ZS5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIoZFswXSkseS5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLGRbMF0pLGJhJiZ4YTw5P3UuYXBwZW5kQ2hpbGQocigic3BhbiIsW3ldKSk6dS5hcHBlbmRDaGlsZCh5KSxlLmNvbCs9MSk7ZS5tYXAucHVzaChlLnBvcyxlLnBvcysxLHkpLGUucG9zKyt9fWVsc2UgZS5jb2wrPXQubGVuZ3RoLHU9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYyksZS5tYXAucHVzaChlLnBvcyxlLnBvcyt0Lmxlbmd0aCx1KSxiYSYmeGE8OSYmKHA9ITApLGUucG9zKz10Lmxlbmd0aDtpZihlLnRyYWlsaW5nU3BhY2U9MzI9PWMuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSxufHxpfHxvfHxwfHxzKXt2YXIgeD1ufHwiIjtpJiYoeCs9aSksbyYmKHgrPW8pO3ZhciBDPXIoInNwYW4iLFt1XSx4LHMpO3JldHVybiBhJiYoQy50aXRsZT1hKSxlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoQyl9ZS5jb250ZW50LmFwcGVuZENoaWxkKHUpfX1mdW5jdGlvbiBmdChlLHQpe2lmKGUubGVuZ3RoPjEmJiEvICAvLnRlc3QoZSkpcmV0dXJuIGU7Zm9yKHZhciBuPXQscj0iIixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWUuY2hhckF0KGkpOyIgIiE9b3x8IW58fGkhPWUubGVuZ3RoLTEmJjMyIT1lLmNoYXJDb2RlQXQoaSsxKXx8KG89Ilx4YTAiKSxyKz1vLG49IiAiPT1vfXJldHVybiByfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixpLG8sYSxzLHUpe2k9aT9pKyIgY20tZm9yY2UtYm9yZGVyIjoiY20tZm9yY2UtYm9yZGVyIjtmb3IodmFyIGM9bi5wb3MsbD1jK3IubGVuZ3RoOzspe2Zvcih2YXIgcD12b2lkIDAsZj0wO2Y8dC5sZW5ndGgmJihwPXRbZl0sIShwLnRvPmMmJnAuZnJvbTw9YykpO2YrKyk7aWYocC50bz49bClyZXR1cm4gZShuLHIsaSxvLGEscyx1KTtlKG4sci5zbGljZSgwLHAudG8tYyksaSxvLG51bGwscyx1KSxvPW51bGwscj1yLnNsaWNlKHAudG8tYyksYz1wLnRvfX19ZnVuY3Rpb24gaHQoZSx0LG4scil7dmFyIGk9IXImJm4ud2lkZ2V0Tm9kZTtpJiZlLm1hcC5wdXNoKGUucG9zLGUucG9zK3QsaSksIXImJmUuY20uZGlzcGxheS5pbnB1dC5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUmJihpfHwoaT1lLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKSksaS5zZXRBdHRyaWJ1dGUoImNtLW1hcmtlciIsbi5pZCkpLGkmJihlLmNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShpKSxlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSkpLGUucG9zKz10LGUudHJhaWxpbmdTcGFjZT0hMX1mdW5jdGlvbiBtdChlLHQsbil7dmFyIHI9ZS5tYXJrZWRTcGFucyxpPWUudGV4dCxvPTA7aWYocilmb3IodmFyIGEscyx1LGMsbCxwLGYsZD1pLmxlbmd0aCxoPTAsbT0xLGc9IiIseT0wOzspe2lmKHk9PWgpe3U9Yz1sPXA9cz0iIixmPW51bGwseT0xLzA7Zm9yKHZhciB2PVtdLGI9dm9pZCAwLHg9MDt4PHIubGVuZ3RoOysreCl7dmFyIEM9clt4XSxFPUMubWFya2VyOyJib29rbWFyayI9PUUudHlwZSYmQy5mcm9tPT1oJiZFLndpZGdldE5vZGU/di5wdXNoKEUpOkMuZnJvbTw9aCYmKG51bGw9PUMudG98fEMudG8+aHx8RS5jb2xsYXBzZWQmJkMudG89PWgmJkMuZnJvbT09aCk/KG51bGwhPUMudG8mJkMudG8hPWgmJnk+Qy50byYmKHk9Qy50byxjPSIiKSxFLmNsYXNzTmFtZSYmKHUrPSIgIitFLmNsYXNzTmFtZSksRS5jc3MmJihzPShzP3MrIjsiOiIiKStFLmNzcyksRS5zdGFydFN0eWxlJiZDLmZyb209PWgmJihsKz0iICIrRS5zdGFydFN0eWxlKSxFLmVuZFN0eWxlJiZDLnRvPT15JiYoYnx8KGI9W10pKS5wdXNoKEUuZW5kU3R5bGUsQy50byksRS50aXRsZSYmIXAmJihwPUUudGl0bGUpLEUuY29sbGFwc2VkJiYoIWZ8fGFlKGYubWFya2VyLEUpPDApJiYoZj1DKSk6Qy5mcm9tPmgmJnk+Qy5mcm9tJiYoeT1DLmZyb20pfWlmKGIpZm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKz0yKWJbRCsxXT09eSYmKGMrPSIgIitiW0RdKTtpZighZnx8Zi5mcm9tPT1oKWZvcih2YXIgdz0wO3c8di5sZW5ndGg7Kyt3KWh0KHQsMCx2W3ddKTtpZihmJiYoZi5mcm9tfHwwKT09aCl7aWYoaHQodCwobnVsbD09Zi50bz9kKzE6Zi50byktaCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pcmV0dXJuO2YudG89PWgmJihmPSExKX19aWYoaD49ZClicmVhaztmb3IodmFyIFM9TWF0aC5taW4oZCx5KTs7KXtpZihnKXt2YXIgaz1oK2cubGVuZ3RoO2lmKCFmKXt2YXIgQT1rPlM/Zy5zbGljZSgwLFMtaCk6Zzt0LmFkZFRva2VuKHQsQSxhP2ErdTp1LGwsaCtBLmxlbmd0aD09eT9jOiIiLHAscyl9aWYoaz49Uyl7Zz1nLnNsaWNlKFMtaCksaD1TO2JyZWFrfWg9ayxsPSIifWc9aS5zbGljZShvLG89blttKytdKSxhPXV0KG5bbSsrXSx0LmNtLm9wdGlvbnMpfX1lbHNlIGZvcih2YXIgXz0xO188bi5sZW5ndGg7Xys9Mil0LmFkZFRva2VuKHQsaS5zbGljZShvLG89bltfXSksdXQobltfKzFdLHQuY20ub3B0aW9ucykpfWZ1bmN0aW9uIGd0KGUsdCxuKXt0aGlzLmxpbmU9dCx0aGlzLnJlc3Q9aGUodCksdGhpcy5zaXplPXRoaXMucmVzdD9GKG0odGhpcy5yZXN0KSktbisxOjEsdGhpcy5ub2RlPXRoaXMudGV4dD1udWxsLHRoaXMuaGlkZGVuPXllKGUsdCl9ZnVuY3Rpb24geXQoZSx0LG4pe2Zvcih2YXIgcixpPVtdLG89dDtvPG47bz1yKXt2YXIgYT1uZXcgZ3QoZS5kb2MsQShlLmRvYyxvKSxvKTtyPW8rYS5zaXplLGkucHVzaChhKX1yZXR1cm4gaX1mdW5jdGlvbiB2dChlKXticz9icy5vcHMucHVzaChlKTplLm93bnNHcm91cD1icz17b3BzOltlXSxkZWxheWVkQ2FsbGJhY2tzOltdfX1mdW5jdGlvbiBidChlKXt2YXIgdD1lLmRlbGF5ZWRDYWxsYmFja3Msbj0wO2Rve2Zvcig7bjx0Lmxlbmd0aDtuKyspdFtuXS5jYWxsKG51bGwpO2Zvcih2YXIgcj0wO3I8ZS5vcHMubGVuZ3RoO3IrKyl7dmFyIGk9ZS5vcHNbcl07aWYoaS5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKWZvcig7aS5jdXJzb3JBY3Rpdml0eUNhbGxlZDxpLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoOylpLmN1cnNvckFjdGl2aXR5SGFuZGxlcnNbaS5jdXJzb3JBY3Rpdml0eUNhbGxlZCsrXS5jYWxsKG51bGwsaS5jbSl9fXdoaWxlKG48dC5sZW5ndGgpfWZ1bmN0aW9uIHh0KGUsdCl7dmFyIG49ZS5vd25zR3JvdXA7aWYobil0cnl7YnQobil9ZmluYWxseXticz1udWxsLHQobil9fWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49U2UoZSx0KTtpZihuLmxlbmd0aCl7dmFyIHIsaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7YnM/cj1icy5kZWxheWVkQ2FsbGJhY2tzOnhzP3I9eHM6KHI9eHM9W10sc2V0VGltZW91dChFdCwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pIWZ1bmN0aW9uKGUpe3IucHVzaChmdW5jdGlvbigpe3JldHVybiBuW2VdLmFwcGx5KG51bGwsaSl9KX0obyl9fWZ1bmN0aW9uIEV0KCl7dmFyIGU9eHM7eHM9bnVsbDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCllW3RdKCl9ZnVuY3Rpb24gRHQoZSx0LG4scil7Zm9yKHZhciBpPTA7aTx0LmNoYW5nZXMubGVuZ3RoO2krKyl7dmFyIG89dC5jaGFuZ2VzW2ldOyJ0ZXh0Ij09bz9BdChlLHQpOiJndXR0ZXIiPT1vP1R0KGUsdCxuLHIpOiJjbGFzcyI9PW8/X3QoZSx0KToid2lkZ2V0Ij09byYmT3QoZSx0LHIpfXQuY2hhbmdlcz1udWxsfWZ1bmN0aW9uIHd0KGUpe3JldHVybiBlLm5vZGU9PWUudGV4dCYmKGUubm9kZT1yKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksZS50ZXh0LnBhcmVudE5vZGUmJmUudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLm5vZGUsZS50ZXh0KSxlLm5vZGUuYXBwZW5kQ2hpbGQoZS50ZXh0KSxiYSYmeGE8OCYmKGUubm9kZS5zdHlsZS56SW5kZXg9MikpLGUubm9kZX1mdW5jdGlvbiBTdChlLHQpe3ZhciBuPXQuYmdDbGFzcz90LmJnQ2xhc3MrIiAiKyh0LmxpbmUuYmdDbGFzc3x8IiIpOnQubGluZS5iZ0NsYXNzO2lmKG4mJihuKz0iIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSx0LmJhY2tncm91bmQpbj90LmJhY2tncm91bmQuY2xhc3NOYW1lPW46KHQuYmFja2dyb3VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuYmFja2dyb3VuZCksdC5iYWNrZ3JvdW5kPW51bGwpO2Vsc2UgaWYobil7dmFyIGk9d3QodCk7dC5iYWNrZ3JvdW5kPWkuaW5zZXJ0QmVmb3JlKHIoImRpdiIsbnVsbCxuKSxpLmZpcnN0Q2hpbGQpLGUuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHQuYmFja2dyb3VuZCl9fWZ1bmN0aW9uIGt0KGUsdCl7dmFyIG49ZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7cmV0dXJuIG4mJm4ubGluZT09dC5saW5lPyhlLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZD1udWxsLHQubWVhc3VyZT1uLm1lYXN1cmUsbi5idWlsdCk6Y3QoZSx0KX1mdW5jdGlvbiBBdChlLHQpe3ZhciBuPXQudGV4dC5jbGFzc05hbWUscj1rdChlLHQpO3QudGV4dD09dC5ub2RlJiYodC5ub2RlPXIucHJlKSx0LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoci5wcmUsdC50ZXh0KSx0LnRleHQ9ci5wcmUsci5iZ0NsYXNzIT10LmJnQ2xhc3N8fHIudGV4dENsYXNzIT10LnRleHRDbGFzcz8odC5iZ0NsYXNzPXIuYmdDbGFzcyx0LnRleHRDbGFzcz1yLnRleHRDbGFzcyxfdChlLHQpKTpuJiYodC50ZXh0LmNsYXNzTmFtZT1uKX1mdW5jdGlvbiBfdChlLHQpe1N0KGUsdCksdC5saW5lLndyYXBDbGFzcz93dCh0KS5jbGFzc05hbWU9dC5saW5lLndyYXBDbGFzczp0Lm5vZGUhPXQudGV4dCYmKHQubm9kZS5jbGFzc05hbWU9IiIpO3ZhciBuPXQudGV4dENsYXNzP3QudGV4dENsYXNzKyIgIisodC5saW5lLnRleHRDbGFzc3x8IiIpOnQubGluZS50ZXh0Q2xhc3M7dC50ZXh0LmNsYXNzTmFtZT1ufHwiIn1mdW5jdGlvbiBUdChlLHQsbixpKXtpZih0Lmd1dHRlciYmKHQubm9kZS5yZW1vdmVDaGlsZCh0Lmd1dHRlciksdC5ndXR0ZXI9bnVsbCksdC5ndXR0ZXJCYWNrZ3JvdW5kJiYodC5ub2RlLnJlbW92ZUNoaWxkKHQuZ3V0dGVyQmFja2dyb3VuZCksdC5ndXR0ZXJCYWNrZ3JvdW5kPW51bGwpLHQubGluZS5ndXR0ZXJDbGFzcyl7dmFyIG89d3QodCk7dC5ndXR0ZXJCYWNrZ3JvdW5kPXIoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCAiK3QubGluZS5ndXR0ZXJDbGFzcywibGVmdDogIisoZS5vcHRpb25zLmZpeGVkR3V0dGVyP2kuZml4ZWRQb3M6LWkuZ3V0dGVyVG90YWxXaWR0aCkrInB4OyB3aWR0aDogIitpLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUodC5ndXR0ZXJCYWNrZ3JvdW5kKSxvLmluc2VydEJlZm9yZSh0Lmd1dHRlckJhY2tncm91bmQsdC50ZXh0KX12YXIgYT10LmxpbmUuZ3V0dGVyTWFya2VycztpZihlLm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBzPXd0KHQpLHU9dC5ndXR0ZXI9cigiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyIiwibGVmdDogIisoZS5vcHRpb25zLmZpeGVkR3V0dGVyP2kuZml4ZWRQb3M6LWkuZ3V0dGVyVG90YWxXaWR0aCkrInB4Iik7aWYoZS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUodSkscy5pbnNlcnRCZWZvcmUodSx0LnRleHQpLHQubGluZS5ndXR0ZXJDbGFzcyYmKHUuY2xhc3NOYW1lKz0iICIrdC5saW5lLmd1dHRlckNsYXNzKSwhZS5vcHRpb25zLmxpbmVOdW1iZXJzfHxhJiZhWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl18fCh0LmxpbmVOdW1iZXI9dS5hcHBlbmRDaGlsZChyKCJkaXYiLEwoZS5vcHRpb25zLG4pLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIitpLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK2UuZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciBjPTA7YzxlLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7KytjKXt2YXIgbD1lLm9wdGlvbnMuZ3V0dGVyc1tjXSxwPWEuaGFzT3duUHJvcGVydHkobCkmJmFbbF07cCYmdS5hcHBlbmRDaGlsZChyKCJkaXYiLFtwXSwiQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIitpLmd1dHRlckxlZnRbbF0rInB4OyB3aWR0aDogIitpLmd1dHRlcldpZHRoW2xdKyJweCIpKX19fWZ1bmN0aW9uIE90KGUsdCxuKXt0LmFsaWduYWJsZSYmKHQuYWxpZ25hYmxlPW51bGwpO2Zvcih2YXIgcj10Lm5vZGUuZmlyc3RDaGlsZCxpPXZvaWQgMDtyO3I9aSlpPXIubmV4dFNpYmxpbmcsIkNvZGVNaXJyb3ItbGluZXdpZGdldCI9PXIuY2xhc3NOYW1lJiZ0Lm5vZGUucmVtb3ZlQ2hpbGQocik7TnQoZSx0LG4pfWZ1bmN0aW9uIEZ0KGUsdCxuLHIpe3ZhciBpPWt0KGUsdCk7cmV0dXJuIHQudGV4dD10Lm5vZGU9aS5wcmUsaS5iZ0NsYXNzJiYodC5iZ0NsYXNzPWkuYmdDbGFzcyksaS50ZXh0Q2xhc3MmJih0LnRleHRDbGFzcz1pLnRleHRDbGFzcyksX3QoZSx0KSxUdChlLHQsbixyKSxOdChlLHQsciksdC5ub2RlfWZ1bmN0aW9uIE50KGUsdCxuKXtpZihJdChlLHQubGluZSx0LG4sITApLHQucmVzdClmb3IodmFyIHI9MDtyPHQucmVzdC5sZW5ndGg7cisrKUl0KGUsdC5yZXN0W3JdLHQsbiwhMSl9ZnVuY3Rpb24gSXQoZSx0LG4saSxvKXtpZih0LndpZGdldHMpZm9yKHZhciBhPXd0KG4pLHM9MCx1PXQud2lkZ2V0cztzPHUubGVuZ3RoOysrcyl7dmFyIGM9dVtzXSxsPXIoImRpdiIsW2Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO2MuaGFuZGxlTW91c2VFdmVudHN8fGwuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwidHJ1ZSIpLEx0KGMsbCxuLGkpLGUuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGwpLG8mJmMuYWJvdmU/YS5pbnNlcnRCZWZvcmUobCxuLmd1dHRlcnx8bi50ZXh0KTphLmFwcGVuZENoaWxkKGwpLEN0KGMsInJlZHJhdyIpfX1mdW5jdGlvbiBMdChlLHQsbixyKXtpZihlLm5vSFNjcm9sbCl7KG4uYWxpZ25hYmxlfHwobi5hbGlnbmFibGU9W10pKS5wdXNoKHQpO3ZhciBpPXIud3JhcHBlcldpZHRoO3Quc3R5bGUubGVmdD1yLmZpeGVkUG9zKyJweCIsZS5jb3Zlckd1dHRlcnx8KGktPXIuZ3V0dGVyVG90YWxXaWR0aCx0LnN0eWxlLnBhZGRpbmdMZWZ0PXIuZ3V0dGVyVG90YWxXaWR0aCsicHgiKSx0LnN0eWxlLndpZHRoPWkrInB4In1lLmNvdmVyR3V0dGVyJiYodC5zdHlsZS56SW5kZXg9NSx0LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZS5ub0hTY3JvbGx8fCh0LnN0eWxlLm1hcmdpbkxlZnQ9LXIuZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gUHQoZSl7aWYobnVsbCE9ZS5oZWlnaHQpcmV0dXJuIGUuaGVpZ2h0O3ZhciB0PWUuZG9jLmNtO2lmKCF0KXJldHVybiAwO2lmKCFvKGRvY3VtZW50LmJvZHksZS5ub2RlKSl7dmFyIGk9InBvc2l0aW9uOiByZWxhdGl2ZTsiO2UuY292ZXJHdXR0ZXImJihpKz0ibWFyZ2luLWxlZnQ6IC0iK3QuZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweDsiKSxlLm5vSFNjcm9sbCYmKGkrPSJ3aWR0aDogIit0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCsicHg7Iiksbih0LmRpc3BsYXkubWVhc3VyZSxyKCJkaXYiLFtlLm5vZGVdLG51bGwsaSkpfXJldHVybiBlLmhlaWdodD1lLm5vZGUucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gTXQoZSx0KXtmb3IodmFyIG49TWUodCk7biE9ZS53cmFwcGVyO249bi5wYXJlbnROb2RlKWlmKCFufHwxPT1uLm5vZGVUeXBlJiYidHJ1ZSI9PW4uZ2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIil8fG4ucGFyZW50Tm9kZT09ZS5zaXplciYmbiE9ZS5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiBqdChlKXtyZXR1cm4gZS5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBlLm1vdmVyLm9mZnNldEhlaWdodC1lLmxpbmVTcGFjZS5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gQnQoZSl7aWYoZS5jYWNoZWRQYWRkaW5nSClyZXR1cm4gZS5jYWNoZWRQYWRkaW5nSDt2YXIgdD1uKGUubWVhc3VyZSxyKCJwcmUiLCJ4IikpLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGU/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6dC5jdXJyZW50U3R5bGUsbz17bGVmdDpwYXJzZUludChpLnBhZGRpbmdMZWZ0KSxyaWdodDpwYXJzZUludChpLnBhZGRpbmdSaWdodCl9O3JldHVybiBpc05hTihvLmxlZnQpfHxpc05hTihvLnJpZ2h0KXx8KGUuY2FjaGVkUGFkZGluZ0g9byksb31mdW5jdGlvbiAkdChlKXtyZXR1cm4gR2EtZS5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRofWZ1bmN0aW9uIFV0KGUpe3JldHVybiBlLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgtJHQoZSktZS5kaXNwbGF5LmJhcldpZHRofWZ1bmN0aW9uIHp0KGUpe3JldHVybiBlLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LSR0KGUpLWUuZGlzcGxheS5iYXJIZWlnaHR9ZnVuY3Rpb24gR3QoZSx0LG4pe3ZhciByPWUub3B0aW9ucy5saW5lV3JhcHBpbmcsaT1yJiZVdChlKTtpZighdC5tZWFzdXJlLmhlaWdodHN8fHImJnQubWVhc3VyZS53aWR0aCE9aSl7dmFyIG89dC5tZWFzdXJlLmhlaWdodHM9W107aWYocil7dC5tZWFzdXJlLndpZHRoPWk7Zm9yKHZhciBhPXQudGV4dC5maXJzdENoaWxkLmdldENsaWVudFJlY3RzKCkscz0wO3M8YS5sZW5ndGgtMTtzKyspe3ZhciB1PWFbc10sYz1hW3MrMV07TWF0aC5hYnModS5ib3R0b20tYy5ib3R0b20pPjImJm8ucHVzaCgodS5ib3R0b20rYy50b3ApLzItbi50b3ApfX1vLnB1c2gobi5ib3R0b20tbi50b3ApfX1mdW5jdGlvbiBWdChlLHQsbil7aWYoZS5saW5lPT10KXJldHVybnttYXA6ZS5tZWFzdXJlLm1hcCxjYWNoZTplLm1lYXN1cmUuY2FjaGV9O2Zvcih2YXIgcj0wO3I8ZS5yZXN0Lmxlbmd0aDtyKyspaWYoZS5yZXN0W3JdPT10KXJldHVybnttYXA6ZS5tZWFzdXJlLm1hcHNbcl0sY2FjaGU6ZS5tZWFzdXJlLmNhY2hlc1tyXX07Zm9yKHZhciBpPTA7aTxlLnJlc3QubGVuZ3RoO2krKylpZihGKGUucmVzdFtpXSk+bilyZXR1cm57bWFwOmUubWVhc3VyZS5tYXBzW2ldLGNhY2hlOmUubWVhc3VyZS5jYWNoZXNbaV0sYmVmb3JlOiEwfX1mdW5jdGlvbiBxdChlLHQpe3Q9ZmUodCk7dmFyIHI9Rih0KSxpPWUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkPW5ldyBndChlLmRvYyx0LHIpO2kubGluZU49cjt2YXIgbz1pLmJ1aWx0PWN0KGUsaSk7cmV0dXJuIGkudGV4dD1vLnByZSxuKGUuZGlzcGxheS5saW5lTWVhc3VyZSxvLnByZSksaX1mdW5jdGlvbiBIdChlLHQsbixyKXtyZXR1cm4gS3QoZSxRdChlLHQpLG4scil9ZnVuY3Rpb24gV3QoZSx0KXtpZih0Pj1lLmRpc3BsYXkudmlld0Zyb20mJnQ8ZS5kaXNwbGF5LnZpZXdUbylyZXR1cm4gZS5kaXNwbGF5LnZpZXdbQW4oZSx0KV07dmFyIG49ZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7cmV0dXJuIG4mJnQ+PW4ubGluZU4mJnQ8bi5saW5lTituLnNpemU/bjp2b2lkIDB9ZnVuY3Rpb24gUXQoZSx0KXt2YXIgbj1GKHQpLHI9V3QoZSxuKTtyJiYhci50ZXh0P3I9bnVsbDpyJiZyLmNoYW5nZXMmJihEdChlLHIsbixFbihlKSksZS5jdXJPcC5mb3JjZVVwZGF0ZT0hMCkscnx8KHI9cXQoZSx0KSk7dmFyIGk9VnQocix0LG4pO3JldHVybntsaW5lOnQsdmlldzpyLHJlY3Q6bnVsbCxtYXA6aS5tYXAsY2FjaGU6aS5jYWNoZSxiZWZvcmU6aS5iZWZvcmUsaGFzSGVpZ2h0czohMX19ZnVuY3Rpb24gS3QoZSx0LG4scixpKXt0LmJlZm9yZSYmKG49LTEpO3ZhciBvLGE9bisocnx8IiIpO3JldHVybiB0LmNhY2hlLmhhc093blByb3BlcnR5KGEpP289dC5jYWNoZVthXToodC5yZWN0fHwodC5yZWN0PXQudmlldy50ZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSx0Lmhhc0hlaWdodHN8fChHdChlLHQudmlldyx0LnJlY3QpLHQuaGFzSGVpZ2h0cz0hMCksbz1YdChlLHQsbixyKSxvLmJvZ3VzfHwodC5jYWNoZVthXT1vKSkse2xlZnQ6by5sZWZ0LHJpZ2h0Om8ucmlnaHQsdG9wOmk/by5ydG9wOm8udG9wLGJvdHRvbTppP28ucmJvdHRvbTpvLmJvdHRvbX19ZnVuY3Rpb24gSnQoZSx0LG4pe2Zvcih2YXIgcixpLG8sYSxzLHUsYz0wO2M8ZS5sZW5ndGg7Yys9MylpZihzPWVbY10sdT1lW2MrMV0sdDxzPyhpPTAsbz0xLGE9ImxlZnQiKTp0PHU/KGk9dC1zLG89aSsxKTooYz09ZS5sZW5ndGgtM3x8dD09dSYmZVtjKzNdPnQpJiYobz11LXMsaT1vLTEsdD49dSYmKGE9InJpZ2h0IikpLG51bGwhPWkpe2lmKHI9ZVtjKzJdLHM9PXUmJm49PShyLmluc2VydExlZnQ/ImxlZnQiOiJyaWdodCIpJiYoYT1uKSwibGVmdCI9PW4mJjA9PWkpZm9yKDtjJiZlW2MtMl09PWVbYy0zXSYmZVtjLTFdLmluc2VydExlZnQ7KXI9ZVsyKyhjLT0zKV0sYT0ibGVmdCI7aWYoInJpZ2h0Ij09biYmaT09dS1zKWZvcig7YzxlLmxlbmd0aC0zJiZlW2MrM109PWVbYys0XSYmIWVbYys1XS5pbnNlcnRMZWZ0OylyPWVbKGMrPTMpKzJdLGE9InJpZ2h0IjticmVha31yZXR1cm57bm9kZTpyLHN0YXJ0OmksZW5kOm8sY29sbGFwc2U6YSxjb3ZlclN0YXJ0OnMsY292ZXJFbmQ6dX19ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbj1DcztpZigibGVmdCI9PXQpZm9yKHZhciByPTA7cjxlLmxlbmd0aCYmKG49ZVtyXSkubGVmdD09bi5yaWdodDtyKyspO2Vsc2UgZm9yKHZhciBpPWUubGVuZ3RoLTE7aT49MCYmKG49ZVtpXSkubGVmdD09bi5yaWdodDtpLS0pO3JldHVybiBufWZ1bmN0aW9uIFh0KGUsdCxuLHIpe3ZhciBpLG89SnQodC5tYXAsbixyKSxhPW8ubm9kZSxzPW8uc3RhcnQsdT1vLmVuZCxjPW8uY29sbGFwc2U7aWYoMz09YS5ub2RlVHlwZSl7Zm9yKHZhciBsPTA7bDw0O2wrKyl7Zm9yKDtzJiZEKHQubGluZS50ZXh0LmNoYXJBdChvLmNvdmVyU3RhcnQrcykpOyktLXM7Zm9yKDtvLmNvdmVyU3RhcnQrdTxvLmNvdmVyRW5kJiZEKHQubGluZS50ZXh0LmNoYXJBdChvLmNvdmVyU3RhcnQrdSkpOykrK3U7aWYoaT1iYSYmeGE8OSYmMD09cyYmdT09by5jb3ZlckVuZC1vLmNvdmVyU3RhcnQ/YS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOll0KFBhKGEscyx1KS5nZXRDbGllbnRSZWN0cygpLHIpLGkubGVmdHx8aS5yaWdodHx8MD09cylicmVhazt1PXMscy09MSxjPSJyaWdodCJ9YmEmJnhhPDExJiYoaT1adChlLmRpc3BsYXkubWVhc3VyZSxpKSl9ZWxzZXtzPjAmJihjPXI9InJpZ2h0Iik7dmFyIHA7aT1lLm9wdGlvbnMubGluZVdyYXBwaW5nJiYocD1hLmdldENsaWVudFJlY3RzKCkpLmxlbmd0aD4xP3BbInJpZ2h0Ij09cj9wLmxlbmd0aC0xOjBdOmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9aWYoYmEmJnhhPDkmJiFzJiYoIWl8fCFpLmxlZnQmJiFpLnJpZ2h0KSl7dmFyIGY9YS5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07aT1mP3tsZWZ0OmYubGVmdCxyaWdodDpmLmxlZnQrQ24oZS5kaXNwbGF5KSx0b3A6Zi50b3AsYm90dG9tOmYuYm90dG9tfTpDc31mb3IodmFyIGQ9aS50b3AtdC5yZWN0LnRvcCxoPWkuYm90dG9tLXQucmVjdC50b3AsbT0oZCtoKS8yLGc9dC52aWV3Lm1lYXN1cmUuaGVpZ2h0cyx5PTA7eTxnLmxlbmd0aC0xJiYhKG08Z1t5XSk7eSsrKTt2YXIgdj15P2dbeS0xXTowLGI9Z1t5XSx4PXtsZWZ0OigicmlnaHQiPT1jP2kucmlnaHQ6aS5sZWZ0KS10LnJlY3QubGVmdCxyaWdodDooImxlZnQiPT1jP2kubGVmdDppLnJpZ2h0KS10LnJlY3QubGVmdCx0b3A6dixib3R0b206Yn07cmV0dXJuIGkubGVmdHx8aS5yaWdodHx8KHguYm9ndXM9ITApLGUub3B0aW9ucy5zaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lfHwoeC5ydG9wPWQseC5yYm90dG9tPWgpLHh9ZnVuY3Rpb24gWnQoZSx0KXtpZighd2luZG93LnNjcmVlbnx8bnVsbD09c2NyZWVuLmxvZ2ljYWxYRFBJfHxzY3JlZW4ubG9naWNhbFhEUEk9PXNjcmVlbi5kZXZpY2VYRFBJfHwhJGUoZSkpcmV0dXJuIHQ7dmFyIG49c2NyZWVuLmxvZ2ljYWxYRFBJL3NjcmVlbi5kZXZpY2VYRFBJLHI9c2NyZWVuLmxvZ2ljYWxZRFBJL3NjcmVlbi5kZXZpY2VZRFBJO3JldHVybntsZWZ0OnQubGVmdCpuLHJpZ2h0OnQucmlnaHQqbix0b3A6dC50b3Aqcixib3R0b206dC5ib3R0b20qcn19ZnVuY3Rpb24gZW4oZSl7aWYoZS5tZWFzdXJlJiYoZS5tZWFzdXJlLmNhY2hlPXt9LGUubWVhc3VyZS5oZWlnaHRzPW51bGwsZS5yZXN0KSlmb3IodmFyIHQ9MDt0PGUucmVzdC5sZW5ndGg7dCsrKWUubWVhc3VyZS5jYWNoZXNbdF09e319ZnVuY3Rpb24gdG4oZSl7ZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZT1udWxsLHQoZS5kaXNwbGF5LmxpbmVNZWFzdXJlKTtmb3IodmFyIG49MDtuPGUuZGlzcGxheS52aWV3Lmxlbmd0aDtuKyspZW4oZS5kaXNwbGF5LnZpZXdbbl0pfWZ1bmN0aW9uIG5uKGUpe3RuKGUpLGUuZGlzcGxheS5jYWNoZWRDaGFyV2lkdGg9ZS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ9ZS5kaXNwbGF5LmNhY2hlZFBhZGRpbmdIPW51bGwsZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGUuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksZS5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIHJuKCl7cmV0dXJuIERhJiZUYT8tKGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1wYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpbkxlZnQpKTp3aW5kb3cucGFnZVhPZmZzZXR8fChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnR9ZnVuY3Rpb24gb24oKXtyZXR1cm4gRGEmJlRhPy0oZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5Ub3ApKTp3aW5kb3cucGFnZVlPZmZzZXR8fChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcH1mdW5jdGlvbiBhbihlKXt2YXIgdD0wO2lmKGUud2lkZ2V0cylmb3IodmFyIG49MDtuPGUud2lkZ2V0cy5sZW5ndGg7KytuKWUud2lkZ2V0c1tuXS5hYm92ZSYmKHQrPVB0KGUud2lkZ2V0c1tuXSkpO3JldHVybiB0fWZ1bmN0aW9uIHNuKGUsdCxuLHIsaSl7aWYoIWkpe3ZhciBvPWFuKHQpO24udG9wKz1vLG4uYm90dG9tKz1vfWlmKCJsaW5lIj09cilyZXR1cm4gbjtyfHwocj0ibG9jYWwiKTt2YXIgYT1iZSh0KTtpZigibG9jYWwiPT1yP2ErPWp0KGUuZGlzcGxheSk6YS09ZS5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1yfHwid2luZG93Ij09cil7dmFyIHM9ZS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthKz1zLnRvcCsoIndpbmRvdyI9PXI/MDpvbigpKTt2YXIgdT1zLmxlZnQrKCJ3aW5kb3ciPT1yPzA6cm4oKSk7bi5sZWZ0Kz11LG4ucmlnaHQrPXV9cmV0dXJuIG4udG9wKz1hLG4uYm90dG9tKz1hLG59ZnVuY3Rpb24gdW4oZSx0LG4pe2lmKCJkaXYiPT1uKXJldHVybiB0O3ZhciByPXQubGVmdCxpPXQudG9wO2lmKCJwYWdlIj09bilyLT1ybigpLGktPW9uKCk7ZWxzZSBpZigibG9jYWwiPT1ufHwhbil7dmFyIG89ZS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IrPW8ubGVmdCxpKz1vLnRvcH12YXIgYT1lLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntsZWZ0OnItYS5sZWZ0LHRvcDppLWEudG9wfX1mdW5jdGlvbiBjbihlLHQsbixyLGkpe3JldHVybiByfHwocj1BKGUuZG9jLHQubGluZSkpLHNuKGUscixIdChlLHIsdC5jaCxpKSxuKX1mdW5jdGlvbiBsbihlLHQsbixyLGksbyl7ZnVuY3Rpb24gYSh0LGEpe3ZhciBzPUt0KGUsaSx0LGE/InJpZ2h0IjoibGVmdCIsbyk7cmV0dXJuIGE/cy5sZWZ0PXMucmlnaHQ6cy5yaWdodD1zLmxlZnQsc24oZSxyLHMsbil9ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHI9dVt0XSxpPTE9PXIubGV2ZWw7cmV0dXJuIGEobj9lLTE6ZSxpIT1uKX1yPXJ8fEEoZS5kb2MsdC5saW5lKSxpfHwoaT1RdChlLHIpKTt2YXIgdT13ZShyLGUuZG9jLmRpcmVjdGlvbiksYz10LmNoLGw9dC5zdGlja3k7aWYoYz49ci50ZXh0Lmxlbmd0aD8oYz1yLnRleHQubGVuZ3RoLGw9ImJlZm9yZSIpOmM8PTAmJihjPTAsbD0iYWZ0ZXIiKSwhdSlyZXR1cm4gYSgiYmVmb3JlIj09bD9jLTE6YywiYmVmb3JlIj09bCk7dmFyIHA9RGUodSxjLGwpLGY9WmEsZD1zKGMscCwiYmVmb3JlIj09bCk7cmV0dXJuIG51bGwhPWYmJihkLm90aGVyPXMoYyxmLCJiZWZvcmUiIT1sKSksZH1mdW5jdGlvbiBwbihlLHQpe3ZhciBuPTA7dD16KGUuZG9jLHQpLGUub3B0aW9ucy5saW5lV3JhcHBpbmd8fChuPUNuKGUuZGlzcGxheSkqdC5jaCk7dmFyIHI9QShlLmRvYyx0LmxpbmUpLGk9YmUocikranQoZS5kaXNwbGF5KTtyZXR1cm57bGVmdDpuLHJpZ2h0Om4sdG9wOmksYm90dG9tOmkrci5oZWlnaHR9fWZ1bmN0aW9uIGZuKGUsdCxuLHIsaSl7dmFyIG89UChlLHQsbik7cmV0dXJuIG8ueFJlbD1pLHImJihvLm91dHNpZGU9ITApLG99ZnVuY3Rpb24gZG4oZSx0LG4pe3ZhciByPWUuZG9jO2lmKChuKz1lLmRpc3BsYXkudmlld09mZnNldCk8MClyZXR1cm4gZm4oci5maXJzdCwwLG51bGwsITAsLTEpO3ZhciBpPU4ocixuKSxvPXIuZmlyc3Qrci5zaXplLTE7aWYoaT5vKXJldHVybiBmbihyLmZpcnN0K3Iuc2l6ZS0xLEEocixvKS50ZXh0Lmxlbmd0aCxudWxsLCEwLDEpO3Q8MCYmKHQ9MCk7Zm9yKHZhciBhPUEocixpKTs7KXt2YXIgcz15bihlLGEsaSx0LG4pLHU9bGUoYSxzLmNoKyhzLnhSZWw+MD8xOjApKTtpZighdSlyZXR1cm4gczt2YXIgYz11LmZpbmQoMSk7aWYoYy5saW5lPT1pKXJldHVybiBjO2E9QShyLGk9Yy5saW5lKX19ZnVuY3Rpb24gaG4oZSx0LG4scil7ci09YW4odCk7dmFyIGk9dC50ZXh0Lmxlbmd0aCxvPVMoZnVuY3Rpb24odCl7cmV0dXJuIEt0KGUsbix0LTEpLmJvdHRvbTw9cn0saSwwKTtyZXR1cm4gaT1TKGZ1bmN0aW9uKHQpe3JldHVybiBLdChlLG4sdCkudG9wPnJ9LG8saSkse2JlZ2luOm8sZW5kOml9fWZ1bmN0aW9uIG1uKGUsdCxuLHIpe3JldHVybiBufHwobj1RdChlLHQpKSxobihlLHQsbixzbihlLHQsS3QoZSxuLHIpLCJsaW5lIikudG9wKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4hKGUuYm90dG9tPD1uKSYmKGUudG9wPm58fChyP2UubGVmdDplLnJpZ2h0KT50KX1mdW5jdGlvbiB5bihlLHQsbixyLGkpe2ktPWJlKHQpO3ZhciBvPVF0KGUsdCksYT1hbih0KSxzPTAsdT10LnRleHQubGVuZ3RoLGM9ITAsbD13ZSh0LGUuZG9jLmRpcmVjdGlvbik7aWYobCl7dmFyIHA9KGUub3B0aW9ucy5saW5lV3JhcHBpbmc/Ym46dm4pKGUsdCxuLG8sbCxyLGkpO2M9MSE9cC5sZXZlbCxzPWM/cC5mcm9tOnAudG8tMSx1PWM/cC50bzpwLmZyb20tMX12YXIgZixkLGg9bnVsbCxtPW51bGwsZz1TKGZ1bmN0aW9uKHQpe3ZhciBuPUt0KGUsbyx0KTtyZXR1cm4gbi50b3ArPWEsbi5ib3R0b20rPWEsISFnbihuLHIsaSwhMSkmJihuLnRvcDw9aSYmbi5sZWZ0PD1yJiYoaD10LG09biksITApfSxzLHUpLHk9ITE7aWYobSl7dmFyIHY9ci1tLmxlZnQ8bS5yaWdodC1yLGI9dj09YztnPWgrKGI/MDoxKSxkPWI/ImFmdGVyIjoiYmVmb3JlIixmPXY/bS5sZWZ0Om0ucmlnaHR9ZWxzZXtjfHxnIT11JiZnIT1zfHxnKyssZD0wPT1nPyJhZnRlciI6Zz09dC50ZXh0Lmxlbmd0aD8iYmVmb3JlIjpLdChlLG8sZy0oYz8xOjApKS5ib3R0b20rYTw9aT09Yz8iYWZ0ZXIiOiJiZWZvcmUiO3ZhciB4PWxuKGUsUChuLGcsZCksImxpbmUiLHQsbyk7Zj14LmxlZnQseT1pPHgudG9wfHxpPj14LmJvdHRvbX1yZXR1cm4gZz13KHQudGV4dCxnLDEpLGZuKG4sZyxkLHksci1mKX1mdW5jdGlvbiB2bihlLHQsbixyLGksbyxhKXt2YXIgcz1TKGZ1bmN0aW9uKHMpe3ZhciB1PWlbc10sYz0xIT11LmxldmVsO3JldHVybiBnbihsbihlLFAobixjP3UudG86dS5mcm9tLGM/ImJlZm9yZSI6ImFmdGVyIiksImxpbmUiLHQsciksbyxhLCEwKX0sMCxpLmxlbmd0aC0xKSx1PWlbc107aWYocz4wKXt2YXIgYz0xIT11LmxldmVsLGw9bG4oZSxQKG4sYz91LmZyb206dS50byxjPyJhZnRlciI6ImJlZm9yZSIpLCJsaW5lIix0LHIpO2duKGwsbyxhLCEwKSYmbC50b3A+YSYmKHU9aVtzLTFdKX1yZXR1cm4gdX1mdW5jdGlvbiBibihlLHQsbixyLGksbyxhKXt2YXIgcz1obihlLHQscixhKSx1PXMuYmVnaW4sYz1zLmVuZDsvXHMvLnRlc3QodC50ZXh0LmNoYXJBdChjLTEpKSYmYy0tO2Zvcih2YXIgbD1udWxsLHA9bnVsbCxmPTA7ZjxpLmxlbmd0aDtmKyspe3ZhciBkPWlbZl07aWYoIShkLmZyb20+PWN8fGQudG88PXUpKXt2YXIgaD0xIT1kLmxldmVsLG09S3QoZSxyLGg/TWF0aC5taW4oYyxkLnRvKS0xOk1hdGgubWF4KHUsZC5mcm9tKSkucmlnaHQsZz1tPG8/by1tKzFlOTptLW87KCFsfHxwPmcpJiYobD1kLHA9Zyl9fXJldHVybiBsfHwobD1pW2kubGVuZ3RoLTFdKSxsLmZyb208dSYmKGw9e2Zyb206dSx0bzpsLnRvLGxldmVsOmwubGV2ZWx9KSxsLnRvPmMmJihsPXtmcm9tOmwuZnJvbSx0bzpjLGxldmVsOmwubGV2ZWx9KSxsfWZ1bmN0aW9uIHhuKGUpe2lmKG51bGwhPWUuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gZS5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PWdzKXtncz1yKCJwcmUiKTtmb3IodmFyIGk9MDtpPDQ5OysraSlncy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxncy5hcHBlbmRDaGlsZChyKCJiciIpKTtncy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKX1uKGUubWVhc3VyZSxncyk7dmFyIG89Z3Mub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiBvPjMmJihlLmNhY2hlZFRleHRIZWlnaHQ9byksdChlLm1lYXN1cmUpLG98fDF9ZnVuY3Rpb24gQ24oZSl7aWYobnVsbCE9ZS5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIGUuY2FjaGVkQ2hhcldpZHRoO3ZhciB0PXIoInNwYW4iLCJ4eHh4eHh4eHh4IiksaT1yKCJwcmUiLFt0XSk7bihlLm1lYXN1cmUsaSk7dmFyIG89dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPShvLnJpZ2h0LW8ubGVmdCkvMTA7cmV0dXJuIGE+MiYmKGUuY2FjaGVkQ2hhcldpZHRoPWEpLGF8fDEwfWZ1bmN0aW9uIEVuKGUpe2Zvcih2YXIgdD1lLmRpc3BsYXksbj17fSxyPXt9LGk9dC5ndXR0ZXJzLmNsaWVudExlZnQsbz10Lmd1dHRlcnMuZmlyc3RDaGlsZCxhPTA7bztvPW8ubmV4dFNpYmxpbmcsKythKW5bZS5vcHRpb25zLmd1dHRlcnNbYV1dPW8ub2Zmc2V0TGVmdCtvLmNsaWVudExlZnQraSxyW2Uub3B0aW9ucy5ndXR0ZXJzW2FdXT1vLmNsaWVudFdpZHRoO3JldHVybntmaXhlZFBvczpEbih0KSxndXR0ZXJUb3RhbFdpZHRoOnQuZ3V0dGVycy5vZmZzZXRXaWR0aCxndXR0ZXJMZWZ0Om4sZ3V0dGVyV2lkdGg6cix3cmFwcGVyV2lkdGg6dC53cmFwcGVyLmNsaWVudFdpZHRofX1mdW5jdGlvbiBEbihlKXtyZXR1cm4gZS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LWUuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1mdW5jdGlvbiB3bihlKXt2YXIgdD14bihlLmRpc3BsYXkpLG49ZS5vcHRpb25zLmxpbmVXcmFwcGluZyxyPW4mJk1hdGgubWF4KDUsZS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL0NuKGUuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHllKGUuZG9jLGkpKXJldHVybiAwO3ZhciBvPTA7aWYoaS53aWRnZXRzKWZvcih2YXIgYT0wO2E8aS53aWRnZXRzLmxlbmd0aDthKyspaS53aWRnZXRzW2FdLmhlaWdodCYmKG8rPWkud2lkZ2V0c1thXS5oZWlnaHQpO3JldHVybiBuP28rKE1hdGguY2VpbChpLnRleHQubGVuZ3RoL3IpfHwxKSp0Om8rdH19ZnVuY3Rpb24gU24oZSl7dmFyIHQ9ZS5kb2Msbj13bihlKTt0Lml0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ9bihlKTt0IT1lLmhlaWdodCYmTyhlLHQpfSl9ZnVuY3Rpb24ga24oZSx0LG4scil7dmFyIGk9ZS5kaXNwbGF5O2lmKCFuJiYidHJ1ZSI9PU1lKHQpLmdldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiKSlyZXR1cm4gbnVsbDt2YXIgbyxhLHM9aS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dHJ5e289dC5jbGllbnRYLXMubGVmdCxhPXQuY2xpZW50WS1zLnRvcH1jYXRjaCh0KXtyZXR1cm4gbnVsbH12YXIgdSxjPWRuKGUsbyxhKTtpZihyJiYxPT1jLnhSZWwmJih1PUEoZS5kb2MsYy5saW5lKS50ZXh0KS5sZW5ndGg9PWMuY2gpe3ZhciBsPXAodSx1Lmxlbmd0aCxlLm9wdGlvbnMudGFiU2l6ZSktdS5sZW5ndGg7Yz1QKGMubGluZSxNYXRoLm1heCgwLE1hdGgucm91bmQoKG8tQnQoZS5kaXNwbGF5KS5sZWZ0KS9DbihlLmRpc3BsYXkpKS1sKSl9cmV0dXJuIGN9ZnVuY3Rpb24gQW4oZSx0KXtpZih0Pj1lLmRpc3BsYXkudmlld1RvKXJldHVybiBudWxsO2lmKCh0LT1lLmRpc3BsYXkudmlld0Zyb20pPDApcmV0dXJuIG51bGw7Zm9yKHZhciBuPWUuZGlzcGxheS52aWV3LHI9MDtyPG4ubGVuZ3RoO3IrKylpZigodC09bltyXS5zaXplKTwwKXJldHVybiByfWZ1bmN0aW9uIF9uKGUpe2UuZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGUuZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCkpfWZ1bmN0aW9uIFRuKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApO2Zvcih2YXIgbj1lLmRvYyxyPXt9LGk9ci5jdXJzb3JzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxvPXIuc2VsZWN0aW9uPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7YTxuLnNlbC5yYW5nZXMubGVuZ3RoO2ErKylpZih0fHxhIT1uLnNlbC5wcmltSW5kZXgpe3ZhciBzPW4uc2VsLnJhbmdlc1thXTtpZighKHMuZnJvbSgpLmxpbmU+PWUuZGlzcGxheS52aWV3VG98fHMudG8oKS5saW5lPGUuZGlzcGxheS52aWV3RnJvbSkpe3ZhciB1PXMuZW1wdHkoKTsodXx8ZS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKSYmT24oZSxzLmhlYWQsaSksdXx8Tm4oZSxzLG8pfX1yZXR1cm4gcn1mdW5jdGlvbiBPbihlLHQsbil7dmFyIGk9bG4oZSx0LCJkaXYiLG51bGwsbnVsbCwhZS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpLG89bi5hcHBlbmRDaGlsZChyKCJkaXYiLCJceGEwIiwiQ29kZU1pcnJvci1jdXJzb3IiKSk7aWYoby5zdHlsZS5sZWZ0PWkubGVmdCsicHgiLG8uc3R5bGUudG9wPWkudG9wKyJweCIsby5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxpLmJvdHRvbS1pLnRvcCkqZS5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGkub3RoZXIpe3ZhciBhPW4uYXBwZW5kQ2hpbGQocigiZGl2IiwiXHhhMCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIikpO2Euc3R5bGUuZGlzcGxheT0iIixhLnN0eWxlLmxlZnQ9aS5vdGhlci5sZWZ0KyJweCIsYS5zdHlsZS50b3A9aS5vdGhlci50b3ArInB4IixhLnN0eWxlLmhlaWdodD0uODUqKGkub3RoZXIuYm90dG9tLWkub3RoZXIudG9wKSsicHgifX1mdW5jdGlvbiBGbihlLHQpe3JldHVybiBlLnRvcC10LnRvcHx8ZS5sZWZ0LXQubGVmdH1mdW5jdGlvbiBObihlLHQsbil7ZnVuY3Rpb24gaShlLHQsbixpKXt0PDAmJih0PTApLHQ9TWF0aC5yb3VuZCh0KSxpPU1hdGgucm91bmQoaSksdS5hcHBlbmRDaGlsZChyKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrZSsicHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogIit0KyJweDsgd2lkdGg6ICIrKG51bGw9PW4/cC1lOm4pKyJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiKyhpLXQpKyJweCIpKX1mdW5jdGlvbiBvKHQsbixyKXtmdW5jdGlvbiBvKG4scil7cmV0dXJuIGNuKGUsUCh0LG4pLCJkaXYiLGQscil9ZnVuY3Rpb24gYSh0LG4scil7dmFyIGk9bW4oZSxkLG51bGwsdCksYT0ibHRyIj09bj09KCJhZnRlciI9PXIpPyJsZWZ0IjoicmlnaHQiO3JldHVybiBvKCJhZnRlciI9PXI/aS5iZWdpbjppLmVuZC0oL1xzLy50ZXN0KGQudGV4dC5jaGFyQXQoaS5lbmQtMSkpPzI6MSksYSlbYV19dmFyIHUsYyxkPUEocyx0KSxoPWQudGV4dC5sZW5ndGgsbT13ZShkLHMuZGlyZWN0aW9uKTtyZXR1cm4gRWUobSxufHwwLG51bGw9PXI/aDpyLGZ1bmN0aW9uKGUsdCxzLGQpe3ZhciBnPSJsdHIiPT1zLHk9byhlLGc/ImxlZnQiOiJyaWdodCIpLHY9byh0LTEsZz8icmlnaHQiOiJsZWZ0IiksYj1udWxsPT1uJiYwPT1lLHg9bnVsbD09ciYmdD09aCxDPTA9PWQsRT0hbXx8ZD09bS5sZW5ndGgtMTtpZih2LnRvcC15LnRvcDw9Myl7dmFyIEQ9KGY/Yjp4KSYmQyx3PShmP3g6YikmJkUsUz1EP2w6KGc/eTp2KS5sZWZ0LGs9dz9wOihnP3Y6eSkucmlnaHQ7aShTLHkudG9wLGstUyx5LmJvdHRvbSl9ZWxzZXt2YXIgQSxfLFQsTztnPyhBPWYmJmImJkM/bDp5LmxlZnQsXz1mP3A6YShlLHMsImJlZm9yZSIpLFQ9Zj9sOmEodCxzLCJhZnRlciIpLE89ZiYmeCYmRT9wOnYucmlnaHQpOihBPWY/YShlLHMsImJlZm9yZSIpOmwsXz0hZiYmYiYmQz9wOnkucmlnaHQsVD0hZiYmeCYmRT9sOnYubGVmdCxPPWY/YSh0LHMsImFmdGVyIik6cCksaShBLHkudG9wLF8tQSx5LmJvdHRvbSkseS5ib3R0b208di50b3AmJmkobCx5LmJvdHRvbSxudWxsLHYudG9wKSxpKFQsdi50b3AsTy1ULHYuYm90dG9tKX0oIXV8fEZuKHksdSk8MCkmJih1PXkpLEZuKHYsdSk8MCYmKHU9diksKCFjfHxGbih5LGMpPDApJiYoYz15KSxGbih2LGMpPDAmJihjPXYpfSkse3N0YXJ0OnUsZW5kOmN9fXZhciBhPWUuZGlzcGxheSxzPWUuZG9jLHU9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGM9QnQoZS5kaXNwbGF5KSxsPWMubGVmdCxwPU1hdGgubWF4KGEuc2l6ZXJXaWR0aCxVdChlKS1hLnNpemVyLm9mZnNldExlZnQpLWMucmlnaHQsZj0ibHRyIj09cy5kaXJlY3Rpb24sZD10LmZyb20oKSxoPXQudG8oKTtpZihkLmxpbmU9PWgubGluZSlvKGQubGluZSxkLmNoLGguY2gpO2Vsc2V7dmFyIG09QShzLGQubGluZSksZz1BKHMsaC5saW5lKSx5PWZlKG0pPT1mZShnKSx2PW8oZC5saW5lLGQuY2gseT9tLnRleHQubGVuZ3RoKzE6bnVsbCkuZW5kLGI9byhoLmxpbmUseT8wOm51bGwsaC5jaCkuc3RhcnQ7eSYmKHYudG9wPGIudG9wLTI/KGkodi5yaWdodCx2LnRvcCxudWxsLHYuYm90dG9tKSxpKGwsYi50b3AsYi5sZWZ0LGIuYm90dG9tKSk6aSh2LnJpZ2h0LHYudG9wLGIubGVmdC12LnJpZ2h0LHYuYm90dG9tKSksdi5ib3R0b208Yi50b3AmJmkobCx2LmJvdHRvbSxudWxsLGIudG9wKX1uLmFwcGVuZENoaWxkKHUpfWZ1bmN0aW9uIEluKGUpe2lmKGUuc3RhdGUuZm9jdXNlZCl7dmFyIHQ9ZS5kaXNwbGF5O2NsZWFySW50ZXJ2YWwodC5ibGlua2VyKTt2YXIgbj0hMDt0LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5PSIiLGUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MD90LmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtyZXR1cm4gdC5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eT0obj0hbik/IiI6ImhpZGRlbiJ9LGUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOmUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU8MCYmKHQuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpfX1mdW5jdGlvbiBMbihlKXtlLnN0YXRlLmZvY3VzZWR8fChlLmRpc3BsYXkuaW5wdXQuZm9jdXMoKSxNbihlKSl9ZnVuY3Rpb24gUG4oZSl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmKGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITEsam4oZSkpfSwxMDApfWZ1bmN0aW9uIE1uKGUsdCl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmKGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITEpLCJub2N1cnNvciIhPWUub3B0aW9ucy5yZWFkT25seSYmKGUuc3RhdGUuZm9jdXNlZHx8KEFlKGUsImZvY3VzIixlLHQpLGUuc3RhdGUuZm9jdXNlZD0hMCxzKGUuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLWZvY3VzZWQiKSxlLmN1ck9wfHxlLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnU9PWUuZG9jLnNlbHx8KGUuZGlzcGxheS5pbnB1dC5yZXNldCgpLENhJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGlzcGxheS5pbnB1dC5yZXNldCghMCl9LDIwKSksZS5kaXNwbGF5LmlucHV0LnJlY2VpdmVkRm9jdXMoKSksSW4oZSkpfWZ1bmN0aW9uIGpuKGUsdCl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudHx8KGUuc3RhdGUuZm9jdXNlZCYmKEFlKGUsImJsdXIiLGUsdCksZS5zdGF0ZS5mb2N1c2VkPSExLFJhKGUuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLWZvY3VzZWQiKSksY2xlYXJJbnRlcnZhbChlLmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc3RhdGUuZm9jdXNlZHx8KGUuZGlzcGxheS5zaGlmdD0hMSl9LDE1MCkpfWZ1bmN0aW9uIFJuKGUpe2Zvcih2YXIgdD1lLmRpc3BsYXksbj10LmxpbmVEaXYub2Zmc2V0VG9wLHI9MDtyPHQudmlldy5sZW5ndGg7cisrKXt2YXIgaT10LnZpZXdbcl0sbz12b2lkIDA7aWYoIWkuaGlkZGVuKXtpZihiYSYmeGE8OCl7dmFyIGE9aS5ub2RlLm9mZnNldFRvcCtpLm5vZGUub2Zmc2V0SGVpZ2h0O289YS1uLG49YX1lbHNle3ZhciBzPWkubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtvPXMuYm90dG9tLXMudG9wfXZhciB1PWkubGluZS5oZWlnaHQtbztpZihvPDImJihvPXhuKHQpKSwodT4uMDA1fHx1PC0uMDA1KSYmKE8oaS5saW5lLG8pLEJuKGkubGluZSksaS5yZXN0KSlmb3IodmFyIGM9MDtjPGkucmVzdC5sZW5ndGg7YysrKUJuKGkucmVzdFtjXSl9fX1mdW5jdGlvbiBCbihlKXtpZihlLndpZGdldHMpZm9yKHZhciB0PTA7dDxlLndpZGdldHMubGVuZ3RoOysrdCl7dmFyIG49ZS53aWRnZXRzW3RdLHI9bi5ub2RlLnBhcmVudE5vZGU7ciYmKG4uaGVpZ2h0PXIub2Zmc2V0SGVpZ2h0KX19ZnVuY3Rpb24gJG4oZSx0LG4pe3ZhciByPW4mJm51bGwhPW4udG9wP01hdGgubWF4KDAsbi50b3ApOmUuc2Nyb2xsZXIuc2Nyb2xsVG9wO3I9TWF0aC5mbG9vcihyLWp0KGUpKTt2YXIgaT1uJiZudWxsIT1uLmJvdHRvbT9uLmJvdHRvbTpyK2Uud3JhcHBlci5jbGllbnRIZWlnaHQsbz1OKHQsciksYT1OKHQsaSk7aWYobiYmbi5lbnN1cmUpe3ZhciBzPW4uZW5zdXJlLmZyb20ubGluZSx1PW4uZW5zdXJlLnRvLmxpbmU7czxvPyhvPXMsYT1OKHQsYmUoQSh0LHMpKStlLndyYXBwZXIuY2xpZW50SGVpZ2h0KSk6TWF0aC5taW4odSx0Lmxhc3RMaW5lKCkpPj1hJiYobz1OKHQsYmUoQSh0LHUpKS1lLndyYXBwZXIuY2xpZW50SGVpZ2h0KSxhPXUpfXJldHVybntmcm9tOm8sdG86TWF0aC5tYXgoYSxvKzEpfX1mdW5jdGlvbiBVbihlKXt2YXIgdD1lLmRpc3BsYXksbj10LnZpZXc7aWYodC5hbGlnbldpZGdldHN8fHQuZ3V0dGVycy5maXJzdENoaWxkJiZlLm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj1Ebih0KS10LnNjcm9sbGVyLnNjcm9sbExlZnQrZS5kb2Muc2Nyb2xsTGVmdCxpPXQuZ3V0dGVycy5vZmZzZXRXaWR0aCxvPXIrInB4IixhPTA7YTxuLmxlbmd0aDthKyspaWYoIW5bYV0uaGlkZGVuKXtlLm9wdGlvbnMuZml4ZWRHdXR0ZXImJihuW2FdLmd1dHRlciYmKG5bYV0uZ3V0dGVyLnN0eWxlLmxlZnQ9byksblthXS5ndXR0ZXJCYWNrZ3JvdW5kJiYoblthXS5ndXR0ZXJCYWNrZ3JvdW5kLnN0eWxlLmxlZnQ9bykpO3ZhciBzPW5bYV0uYWxpZ25hYmxlO2lmKHMpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS5zdHlsZS5sZWZ0PW99ZS5vcHRpb25zLmZpeGVkR3V0dGVyJiYodC5ndXR0ZXJzLnN0eWxlLmxlZnQ9citpKyJweCIpfX1mdW5jdGlvbiB6bihlKXtpZighZS5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciB0PWUuZG9jLG49TChlLm9wdGlvbnMsdC5maXJzdCt0LnNpemUtMSksaT1lLmRpc3BsYXk7aWYobi5sZW5ndGghPWkubGluZU51bUNoYXJzKXt2YXIgbz1pLm1lYXN1cmUuYXBwZW5kQ2hpbGQocigiZGl2IixbcigiZGl2IixuKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksYT1vLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgscz1vLm9mZnNldFdpZHRoLWE7cmV0dXJuIGkubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixpLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KGEsaS5saW5lR3V0dGVyLm9mZnNldFdpZHRoLXMpKzEsaS5saW5lTnVtV2lkdGg9aS5saW5lTnVtSW5uZXJXaWR0aCtzLGkubGluZU51bUNoYXJzPWkubGluZU51bUlubmVyV2lkdGg/bi5sZW5ndGg6LTEsaS5saW5lR3V0dGVyLnN0eWxlLndpZHRoPWkubGluZU51bVdpZHRoKyJweCIsSXIoZSksITB9cmV0dXJuITF9ZnVuY3Rpb24gR24oZSx0KXtpZighX2UoZSwic2Nyb2xsQ3Vyc29ySW50b1ZpZXciKSl7dmFyIG49ZS5kaXNwbGF5LGk9bi5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPW51bGw7aWYodC50b3AraS50b3A8MD9vPSEwOnQuYm90dG9tK2kudG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYobz0hMSksbnVsbCE9byYmIUFhKXt2YXIgYT1yKCJkaXYiLCJcdTIwMGIiLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICIrKHQudG9wLW4udmlld09mZnNldC1qdChlLmRpc3BsYXkpKSsicHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiKyh0LmJvdHRvbS10LnRvcCskdChlKStuLmJhckhlaWdodCkrInB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICIrdC5sZWZ0KyJweDsgd2lkdGg6ICIrTWF0aC5tYXgoMix0LnJpZ2h0LXQubGVmdCkrInB4OyIpO2UuZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoYSksYS5zY3JvbGxJbnRvVmlldyhvKSxlLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGEpfX19ZnVuY3Rpb24gVm4oZSx0LG4scil7bnVsbD09ciYmKHI9MCk7dmFyIGk7ZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8dCE9bnx8KHQ9dC5jaD9QKHQubGluZSwiYmVmb3JlIj09dC5zdGlja3k/dC5jaC0xOnQuY2gsImFmdGVyIik6dCxuPSJiZWZvcmUiPT10LnN0aWNreT9QKHQubGluZSx0LmNoKzEsImJlZm9yZSIpOnQpO2Zvcih2YXIgbz0wO288NTtvKyspe3ZhciBhPSExLHM9bG4oZSx0KSx1PW4mJm4hPXQ/bG4oZSxuKTpzO2k9e2xlZnQ6TWF0aC5taW4ocy5sZWZ0LHUubGVmdCksdG9wOk1hdGgubWluKHMudG9wLHUudG9wKS1yLHJpZ2h0Ok1hdGgubWF4KHMubGVmdCx1LmxlZnQpLGJvdHRvbTpNYXRoLm1heChzLmJvdHRvbSx1LmJvdHRvbSkrcn07dmFyIGM9SG4oZSxpKSxsPWUuZG9jLnNjcm9sbFRvcCxwPWUuZG9jLnNjcm9sbExlZnQ7aWYobnVsbCE9Yy5zY3JvbGxUb3AmJihabihlLGMuc2Nyb2xsVG9wKSxNYXRoLmFicyhlLmRvYy5zY3JvbGxUb3AtbCk+MSYmKGE9ITApKSxudWxsIT1jLnNjcm9sbExlZnQmJih0cihlLGMuc2Nyb2xsTGVmdCksTWF0aC5hYnMoZS5kb2Muc2Nyb2xsTGVmdC1wKT4xJiYoYT0hMCkpLCFhKWJyZWFrfXJldHVybiBpfWZ1bmN0aW9uIHFuKGUsdCl7dmFyIG49SG4oZSx0KTtudWxsIT1uLnNjcm9sbFRvcCYmWm4oZSxuLnNjcm9sbFRvcCksbnVsbCE9bi5zY3JvbGxMZWZ0JiZ0cihlLG4uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gSG4oZSx0KXt2YXIgbj1lLmRpc3BsYXkscj14bihlLmRpc3BsYXkpO3QudG9wPDAmJih0LnRvcD0wKTt2YXIgaT1lLmN1ck9wJiZudWxsIT1lLmN1ck9wLnNjcm9sbFRvcD9lLmN1ck9wLnNjcm9sbFRvcDpuLnNjcm9sbGVyLnNjcm9sbFRvcCxvPXp0KGUpLGE9e307dC5ib3R0b20tdC50b3A+byYmKHQuYm90dG9tPXQudG9wK28pO3ZhciBzPWUuZG9jLmhlaWdodCtSdChuKSx1PXQudG9wPHIsYz10LmJvdHRvbT5zLXI7aWYodC50b3A8aSlhLnNjcm9sbFRvcD11PzA6dC50b3A7ZWxzZSBpZih0LmJvdHRvbT5pK28pe3ZhciBsPU1hdGgubWluKHQudG9wLChjP3M6dC5ib3R0b20pLW8pO2whPWkmJihhLnNjcm9sbFRvcD1sKX12YXIgcD1lLmN1ck9wJiZudWxsIT1lLmN1ck9wLnNjcm9sbExlZnQ/ZS5jdXJPcC5zY3JvbGxMZWZ0Om4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxmPVV0KGUpLShlLm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5ndXR0ZXJzLm9mZnNldFdpZHRoOjApLGQ9dC5yaWdodC10LmxlZnQ+ZjtyZXR1cm4gZCYmKHQucmlnaHQ9dC5sZWZ0K2YpLHQubGVmdDwxMD9hLnNjcm9sbExlZnQ9MDp0LmxlZnQ8cD9hLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCx0LmxlZnQtKGQ/MDoxMCkpOnQucmlnaHQ+ZitwLTMmJihhLnNjcm9sbExlZnQ9dC5yaWdodCsoZD8wOjEwKS1mKSxhfWZ1bmN0aW9uIFduKGUsdCl7bnVsbCE9dCYmKFluKGUpLGUuY3VyT3Auc2Nyb2xsVG9wPShudWxsPT1lLmN1ck9wLnNjcm9sbFRvcD9lLmRvYy5zY3JvbGxUb3A6ZS5jdXJPcC5zY3JvbGxUb3ApK3QpfWZ1bmN0aW9uIFFuKGUpe1luKGUpO3ZhciB0PWUuZ2V0Q3Vyc29yKCk7ZS5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LHRvOnQsbWFyZ2luOmUub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW59fWZ1bmN0aW9uIEtuKGUsdCxuKXtudWxsPT10JiZudWxsPT1ufHxZbihlKSxudWxsIT10JiYoZS5jdXJPcC5zY3JvbGxMZWZ0PXQpLG51bGwhPW4mJihlLmN1ck9wLnNjcm9sbFRvcD1uKX1mdW5jdGlvbiBKbihlLHQpe1luKGUpLGUuY3VyT3Auc2Nyb2xsVG9Qb3M9dH1mdW5jdGlvbiBZbihlKXt2YXIgdD1lLmN1ck9wLnNjcm9sbFRvUG9zO2lmKHQpe2UuY3VyT3Auc2Nyb2xsVG9Qb3M9bnVsbDtYbihlLHBuKGUsdC5mcm9tKSxwbihlLHQudG8pLHQubWFyZ2luKX19ZnVuY3Rpb24gWG4oZSx0LG4scil7dmFyIGk9SG4oZSx7bGVmdDpNYXRoLm1pbih0LmxlZnQsbi5sZWZ0KSx0b3A6TWF0aC5taW4odC50b3Asbi50b3ApLXIscmlnaHQ6TWF0aC5tYXgodC5yaWdodCxuLnJpZ2h0KSxib3R0b206TWF0aC5tYXgodC5ib3R0b20sbi5ib3R0b20pK3J9KTtLbihlLGkuc2Nyb2xsTGVmdCxpLnNjcm9sbFRvcCl9ZnVuY3Rpb24gWm4oZSx0KXtNYXRoLmFicyhlLmRvYy5zY3JvbGxUb3AtdCk8Mnx8KG1hfHxGcihlLHt0b3A6dH0pLGVyKGUsdCwhMCksbWEmJkZyKGUpLHdyKGUsMTAwKSl9ZnVuY3Rpb24gZXIoZSx0LG4pe3Q9TWF0aC5taW4oZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodC1lLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LHQpLChlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT10fHxuKSYmKGUuZG9jLnNjcm9sbFRvcD10LGUuZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcCh0KSxlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT10JiYoZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD10KSl9ZnVuY3Rpb24gdHIoZSx0LG4scil7dD1NYXRoLm1pbih0LGUuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpLChuP3Q9PWUuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnMoZS5kb2Muc2Nyb2xsTGVmdC10KTwyKSYmIXJ8fChlLmRvYy5zY3JvbGxMZWZ0PXQsVW4oZSksZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPXQmJihlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD10KSxlLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KHQpKX1mdW5jdGlvbiBucihlKXt2YXIgdD1lLmRpc3BsYXksbj10Lmd1dHRlcnMub2Zmc2V0V2lkdGgscj1NYXRoLnJvdW5kKGUuZG9jLmhlaWdodCtSdChlLmRpc3BsYXkpKTtyZXR1cm57Y2xpZW50SGVpZ2h0OnQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LHZpZXdIZWlnaHQ6dC53cmFwcGVyLmNsaWVudEhlaWdodCxzY3JvbGxXaWR0aDp0LnNjcm9sbGVyLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOnQuc2Nyb2xsZXIuY2xpZW50V2lkdGgsdmlld1dpZHRoOnQud3JhcHBlci5jbGllbnRXaWR0aCxiYXJMZWZ0OmUub3B0aW9ucy5maXhlZEd1dHRlcj9uOjAsZG9jSGVpZ2h0OnIsc2Nyb2xsSGVpZ2h0OnIrJHQoZSkrdC5iYXJIZWlnaHQsbmF0aXZlQmFyV2lkdGg6dC5uYXRpdmVCYXJXaWR0aCxndXR0ZXJXaWR0aDpufX1mdW5jdGlvbiBycihlLHQpe3R8fCh0PW5yKGUpKTt2YXIgbj1lLmRpc3BsYXkuYmFyV2lkdGgscj1lLmRpc3BsYXkuYmFySGVpZ2h0O2lyKGUsdCk7Zm9yKHZhciBpPTA7aTw0JiZuIT1lLmRpc3BsYXkuYmFyV2lkdGh8fHIhPWUuZGlzcGxheS5iYXJIZWlnaHQ7aSsrKW4hPWUuZGlzcGxheS5iYXJXaWR0aCYmZS5vcHRpb25zLmxpbmVXcmFwcGluZyYmUm4oZSksaXIoZSxucihlKSksbj1lLmRpc3BsYXkuYmFyV2lkdGgscj1lLmRpc3BsYXkuYmFySGVpZ2h0fWZ1bmN0aW9uIGlyKGUsdCl7dmFyIG49ZS5kaXNwbGF5LHI9bi5zY3JvbGxiYXJzLnVwZGF0ZSh0KTtuLnNpemVyLnN0eWxlLnBhZGRpbmdSaWdodD0obi5iYXJXaWR0aD1yLnJpZ2h0KSsicHgiLG4uc2l6ZXIuc3R5bGUucGFkZGluZ0JvdHRvbT0obi5iYXJIZWlnaHQ9ci5ib3R0b20pKyJweCIsbi5oZWlnaHRGb3JjZXIuc3R5bGUuYm9yZGVyQm90dG9tPXIuYm90dG9tKyJweCBzb2xpZCB0cmFuc3BhcmVudCIsci5yaWdodCYmci5ib3R0b20/KG4uc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixuLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ci5ib3R0b20rInB4IixuLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aD1yLnJpZ2h0KyJweCIpOm4uc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsci5ib3R0b20mJmUub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmZS5vcHRpb25zLmZpeGVkR3V0dGVyPyhuLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsbi5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PXIuYm90dG9tKyJweCIsbi5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9dC5ndXR0ZXJXaWR0aCsicHgiKTpuLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIG9yKGUpe2UuZGlzcGxheS5zY3JvbGxiYXJzJiYoZS5kaXNwbGF5LnNjcm9sbGJhcnMuY2xlYXIoKSxlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmUmEoZS5kaXNwbGF5LndyYXBwZXIsZS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpKSxlLmRpc3BsYXkuc2Nyb2xsYmFycz1uZXcgd3NbZS5vcHRpb25zLnNjcm9sbGJhclN0eWxlXShmdW5jdGlvbih0KXtlLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUodCxlLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKSxucyh0LCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7ZS5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGlzcGxheS5pbnB1dC5mb2N1cygpfSwwKX0pLHQuc2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIsInRydWUiKX0sZnVuY3Rpb24odCxuKXsiaG9yaXpvbnRhbCI9PW4/dHIoZSx0KTpabihlLHQpfSxlKSxlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmcyhlLmRpc3BsYXkud3JhcHBlcixlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyl9ZnVuY3Rpb24gYXIoZSl7ZS5jdXJPcD17Y206ZSx2aWV3Q2hhbmdlZDohMSxzdGFydEhlaWdodDplLmRvYy5oZWlnaHQsZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx0eXBpbmc6ITEsY2hhbmdlT2JqczpudWxsLGN1cnNvckFjdGl2aXR5SGFuZGxlcnM6bnVsbCxjdXJzb3JBY3Rpdml0eUNhbGxlZDowLHNlbGVjdGlvbkNoYW5nZWQ6ITEsdXBkYXRlTWF4TGluZTohMSxzY3JvbGxMZWZ0Om51bGwsc2Nyb2xsVG9wOm51bGwsc2Nyb2xsVG9Qb3M6bnVsbCxmb2N1czohMSxpZDorK1NzfSx2dChlLmN1ck9wKX1mdW5jdGlvbiBzcihlKXt4dChlLmN1ck9wLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5vcHMubGVuZ3RoO3QrKyllLm9wc1t0XS5jbS5jdXJPcD1udWxsO3VyKGUpfSl9ZnVuY3Rpb24gdXIoZSl7Zm9yKHZhciB0PWUub3BzLG49MDtuPHQubGVuZ3RoO24rKyljcih0W25dKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylscih0W3JdKTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylwcih0W2ldKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKylmcih0W29dKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylkcih0W2FdKX1mdW5jdGlvbiBjcihlKXt2YXIgdD1lLmNtLG49dC5kaXNwbGF5O2tyKHQpLGUudXBkYXRlTWF4TGluZSYmQ2UodCksZS5tdXN0VXBkYXRlPWUudmlld0NoYW5nZWR8fGUuZm9yY2VVcGRhdGV8fG51bGwhPWUuc2Nyb2xsVG9wfHxlLnNjcm9sbFRvUG9zJiYoZS5zY3JvbGxUb1Bvcy5mcm9tLmxpbmU8bi52aWV3RnJvbXx8ZS5zY3JvbGxUb1Bvcy50by5saW5lPj1uLnZpZXdUbyl8fG4ubWF4TGluZUNoYW5nZWQmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcsZS51cGRhdGU9ZS5tdXN0VXBkYXRlJiZuZXcga3ModCxlLm11c3RVcGRhdGUmJnt0b3A6ZS5zY3JvbGxUb3AsZW5zdXJlOmUuc2Nyb2xsVG9Qb3N9LGUuZm9yY2VVcGRhdGUpfWZ1bmN0aW9uIGxyKGUpe2UudXBkYXRlZERpc3BsYXk9ZS5tdXN0VXBkYXRlJiZUcihlLmNtLGUudXBkYXRlKX1mdW5jdGlvbiBwcihlKXt2YXIgdD1lLmNtLG49dC5kaXNwbGF5O2UudXBkYXRlZERpc3BsYXkmJlJuKHQpLGUuYmFyTWVhc3VyZT1ucih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmKGUuYWRqdXN0V2lkdGhUbz1IdCh0LG4ubWF4TGluZSxuLm1heExpbmUudGV4dC5sZW5ndGgpLmxlZnQrMyx0LmRpc3BsYXkuc2l6ZXJXaWR0aD1lLmFkanVzdFdpZHRoVG8sZS5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoPU1hdGgubWF4KG4uc2Nyb2xsZXIuY2xpZW50V2lkdGgsbi5zaXplci5vZmZzZXRMZWZ0K2UuYWRqdXN0V2lkdGhUbyskdCh0KSt0LmRpc3BsYXkuYmFyV2lkdGgpLGUubWF4U2Nyb2xsTGVmdD1NYXRoLm1heCgwLG4uc2l6ZXIub2Zmc2V0TGVmdCtlLmFkanVzdFdpZHRoVG8tVXQodCkpKSwoZS51cGRhdGVkRGlzcGxheXx8ZS5zZWxlY3Rpb25DaGFuZ2VkKSYmKGUucHJlcGFyZWRTZWxlY3Rpb249bi5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCkpfWZ1bmN0aW9uIGZyKGUpe3ZhciB0PWUuY207bnVsbCE9ZS5hZGp1c3RXaWR0aFRvJiYodC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPWUuYWRqdXN0V2lkdGhUbysicHgiLGUubWF4U2Nyb2xsTGVmdDx0LmRvYy5zY3JvbGxMZWZ0JiZ0cih0LE1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0LGUubWF4U2Nyb2xsTGVmdCksITApLHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMSk7dmFyIG49ZS5mb2N1cyYmZS5mb2N1cz09YSgpO2UucHJlcGFyZWRTZWxlY3Rpb24mJnQuZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGUucHJlcGFyZWRTZWxlY3Rpb24sbiksKGUudXBkYXRlZERpc3BsYXl8fGUuc3RhcnRIZWlnaHQhPXQuZG9jLmhlaWdodCkmJnJyKHQsZS5iYXJNZWFzdXJlKSxlLnVwZGF0ZWREaXNwbGF5JiZMcih0LGUuYmFyTWVhc3VyZSksZS5zZWxlY3Rpb25DaGFuZ2VkJiZJbih0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJnQuZGlzcGxheS5pbnB1dC5yZXNldChlLnR5cGluZyksbiYmTG4oZS5jbSl9ZnVuY3Rpb24gZHIoZSl7dmFyIHQ9ZS5jbSxuPXQuZGlzcGxheSxyPXQuZG9jO2lmKGUudXBkYXRlZERpc3BsYXkmJk9yKHQsZS51cGRhdGUpLG51bGw9PW4ud2hlZWxTdGFydFh8fG51bGw9PWUuc2Nyb2xsVG9wJiZudWxsPT1lLnNjcm9sbExlZnQmJiFlLnNjcm9sbFRvUG9zfHwobi53aGVlbFN0YXJ0WD1uLndoZWVsU3RhcnRZPW51bGwpLG51bGwhPWUuc2Nyb2xsVG9wJiZlcih0LGUuc2Nyb2xsVG9wLGUuZm9yY2VTY3JvbGwpLG51bGwhPWUuc2Nyb2xsTGVmdCYmdHIodCxlLnNjcm9sbExlZnQsITAsITApLGUuc2Nyb2xsVG9Qb3Mpe0duKHQsVm4odCx6KHIsZS5zY3JvbGxUb1Bvcy5mcm9tKSx6KHIsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pKX12YXIgaT1lLm1heWJlSGlkZGVuTWFya2VycyxvPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaSlmb3IodmFyIGE9MDthPGkubGVuZ3RoOysrYSlpW2FdLmxpbmVzLmxlbmd0aHx8QWUoaVthXSwiaGlkZSIpO2lmKG8pZm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpb1tzXS5saW5lcy5sZW5ndGgmJkFlKG9bc10sInVuaGlkZSIpO24ud3JhcHBlci5vZmZzZXRIZWlnaHQmJihyLnNjcm9sbFRvcD10LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxlLmNoYW5nZU9ianMmJkFlKHQsImNoYW5nZXMiLHQsZS5jaGFuZ2VPYmpzKSxlLnVwZGF0ZSYmZS51cGRhdGUuZmluaXNoKCl9ZnVuY3Rpb24gaHIoZSx0KXtpZihlLmN1ck9wKXJldHVybiB0KCk7YXIoZSk7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtzcihlKX19ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlLmN1ck9wKXJldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKTthcihlKTt0cnl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfWZpbmFsbHl7c3IoZSl9fX1mdW5jdGlvbiBncihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih0aGlzLmN1ck9wKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthcih0aGlzKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7c3IodGhpcyl9fX1mdW5jdGlvbiB5cihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNtO2lmKCF0fHx0LmN1ck9wKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthcih0KTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7c3IodCl9fX1mdW5jdGlvbiB2cihlLHQsbixyKXtudWxsPT10JiYodD1lLmRvYy5maXJzdCksbnVsbD09biYmKG49ZS5kb2MuZmlyc3QrZS5kb2Muc2l6ZSkscnx8KHI9MCk7dmFyIGk9ZS5kaXNwbGF5O2lmKHImJm48aS52aWV3VG8mJihudWxsPT1pLnVwZGF0ZUxpbmVOdW1iZXJzfHxpLnVwZGF0ZUxpbmVOdW1iZXJzPnQpJiYoaS51cGRhdGVMaW5lTnVtYmVycz10KSxlLmN1ck9wLnZpZXdDaGFuZ2VkPSEwLHQ+PWkudmlld1RvKVhhJiZtZShlLmRvYyx0KTxpLnZpZXdUbyYmeHIoZSk7ZWxzZSBpZihuPD1pLnZpZXdGcm9tKVhhJiZnZShlLmRvYyxuK3IpPmkudmlld0Zyb20/eHIoZSk6KGkudmlld0Zyb20rPXIsaS52aWV3VG8rPXIpO2Vsc2UgaWYodDw9aS52aWV3RnJvbSYmbj49aS52aWV3VG8peHIoZSk7ZWxzZSBpZih0PD1pLnZpZXdGcm9tKXt2YXIgbz1DcihlLG4sbityLDEpO28/KGkudmlldz1pLnZpZXcuc2xpY2Uoby5pbmRleCksaS52aWV3RnJvbT1vLmxpbmVOLGkudmlld1RvKz1yKTp4cihlKX1lbHNlIGlmKG4+PWkudmlld1RvKXt2YXIgYT1DcihlLHQsdCwtMSk7YT8oaS52aWV3PWkudmlldy5zbGljZSgwLGEuaW5kZXgpLGkudmlld1RvPWEubGluZU4pOnhyKGUpfWVsc2V7dmFyIHM9Q3IoZSx0LHQsLTEpLHU9Q3IoZSxuLG4rciwxKTtzJiZ1PyhpLnZpZXc9aS52aWV3LnNsaWNlKDAscy5pbmRleCkuY29uY2F0KHl0KGUscy5saW5lTix1LmxpbmVOKSkuY29uY2F0KGkudmlldy5zbGljZSh1LmluZGV4KSksaS52aWV3VG8rPXIpOnhyKGUpfXZhciBjPWkuZXh0ZXJuYWxNZWFzdXJlZDtjJiYobjxjLmxpbmVOP2MubGluZU4rPXI6dDxjLmxpbmVOK2Muc2l6ZSYmKGkuZXh0ZXJuYWxNZWFzdXJlZD1udWxsKSl9ZnVuY3Rpb24gYnIoZSx0LG4pe2UuY3VyT3Audmlld0NoYW5nZWQ9ITA7dmFyIHI9ZS5kaXNwbGF5LGk9ZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7aWYoaSYmdD49aS5saW5lTiYmdDxpLmxpbmVOK2kuc2l6ZSYmKHIuZXh0ZXJuYWxNZWFzdXJlZD1udWxsKSwhKHQ8ci52aWV3RnJvbXx8dD49ci52aWV3VG8pKXt2YXIgbz1yLnZpZXdbQW4oZSx0KV07aWYobnVsbCE9by5ub2RlKXt2YXIgYT1vLmNoYW5nZXN8fChvLmNoYW5nZXM9W10pOy0xPT1mKGEsbikmJmEucHVzaChuKX19fWZ1bmN0aW9uIHhyKGUpe2UuZGlzcGxheS52aWV3RnJvbT1lLmRpc3BsYXkudmlld1RvPWUuZG9jLmZpcnN0LGUuZGlzcGxheS52aWV3PVtdLGUuZGlzcGxheS52aWV3T2Zmc2V0PTB9ZnVuY3Rpb24gQ3IoZSx0LG4scil7dmFyIGksbz1BbihlLHQpLGE9ZS5kaXNwbGF5LnZpZXc7aWYoIVhhfHxuPT1lLmRvYy5maXJzdCtlLmRvYy5zaXplKXJldHVybntpbmRleDpvLGxpbmVOOm59O2Zvcih2YXIgcz1lLmRpc3BsYXkudmlld0Zyb20sdT0wO3U8bzt1Kyspcys9YVt1XS5zaXplO2lmKHMhPXQpe2lmKHI+MCl7aWYobz09YS5sZW5ndGgtMSlyZXR1cm4gbnVsbDtpPXMrYVtvXS5zaXplLXQsbysrfWVsc2UgaT1zLXQ7dCs9aSxuKz1pfWZvcig7bWUoZS5kb2MsbikhPW47KXtpZihvPT0ocjwwPzA6YS5sZW5ndGgtMSkpcmV0dXJuIG51bGw7bis9ciphW28tKHI8MD8xOjApXS5zaXplLG8rPXJ9cmV0dXJue2luZGV4Om8sbGluZU46bn19ZnVuY3Rpb24gRXIoZSx0LG4pe3ZhciByPWUuZGlzcGxheTswPT1yLnZpZXcubGVuZ3RofHx0Pj1yLnZpZXdUb3x8bjw9ci52aWV3RnJvbT8oci52aWV3PXl0KGUsdCxuKSxyLnZpZXdGcm9tPXQpOihyLnZpZXdGcm9tPnQ/ci52aWV3PXl0KGUsdCxyLnZpZXdGcm9tKS5jb25jYXQoci52aWV3KTpyLnZpZXdGcm9tPHQmJihyLnZpZXc9ci52aWV3LnNsaWNlKEFuKGUsdCkpKSxyLnZpZXdGcm9tPXQsci52aWV3VG88bj9yLnZpZXc9ci52aWV3LmNvbmNhdCh5dChlLHIudmlld1RvLG4pKTpyLnZpZXdUbz5uJiYoci52aWV3PXIudmlldy5zbGljZSgwLEFuKGUsbikpKSksci52aWV3VG89bn1mdW5jdGlvbiBEcihlKXtmb3IodmFyIHQ9ZS5kaXNwbGF5LnZpZXcsbj0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtpLmhpZGRlbnx8aS5ub2RlJiYhaS5jaGFuZ2VzfHwrK259cmV0dXJuIG59ZnVuY3Rpb24gd3IoZSx0KXtlLmRvYy5oaWdobGlnaHRGcm9udGllcjxlLmRpc3BsYXkudmlld1RvJiZlLnN0YXRlLmhpZ2hsaWdodC5zZXQodCxjKFNyLGUpKX1mdW5jdGlvbiBTcihlKXt2YXIgdD1lLmRvYztpZighKHQuaGlnaGxpZ2h0RnJvbnRpZXI+PWUuZGlzcGxheS52aWV3VG8pKXt2YXIgbj0rbmV3IERhdGUrZS5vcHRpb25zLndvcmtUaW1lLHI9WWUoZSx0LmhpZ2hsaWdodEZyb250aWVyKSxpPVtdO3QuaXRlcihyLmxpbmUsTWF0aC5taW4odC5maXJzdCt0LnNpemUsZS5kaXNwbGF5LnZpZXdUbys1MDApLGZ1bmN0aW9uKG8pe2lmKHIubGluZT49ZS5kaXNwbGF5LnZpZXdGcm9tKXt2YXIgYT1vLnN0eWxlcyxzPW8udGV4dC5sZW5ndGg+ZS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD9IZSh0Lm1vZGUsci5zdGF0ZSk6bnVsbCx1PUtlKGUsbyxyLCEwKTtzJiYoci5zdGF0ZT1zKSxvLnN0eWxlcz11LnN0eWxlczt2YXIgYz1vLnN0eWxlQ2xhc3NlcyxsPXUuY2xhc3NlcztsP28uc3R5bGVDbGFzc2VzPWw6YyYmKG8uc3R5bGVDbGFzc2VzPW51bGwpO2Zvcih2YXIgcD0hYXx8YS5sZW5ndGghPW8uc3R5bGVzLmxlbmd0aHx8YyE9bCYmKCFjfHwhbHx8Yy5iZ0NsYXNzIT1sLmJnQ2xhc3N8fGMudGV4dENsYXNzIT1sLnRleHRDbGFzcyksZj0wOyFwJiZmPGEubGVuZ3RoOysrZilwPWFbZl0hPW8uc3R5bGVzW2ZdO3AmJmkucHVzaChyLmxpbmUpLG8uc3RhdGVBZnRlcj1yLnNhdmUoKSxyLm5leHRMaW5lKCl9ZWxzZSBvLnRleHQubGVuZ3RoPD1lLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoJiZYZShlLG8udGV4dCxyKSxvLnN0YXRlQWZ0ZXI9ci5saW5lJTU9PTA/ci5zYXZlKCk6bnVsbCxyLm5leHRMaW5lKCk7aWYoK25ldyBEYXRlPm4pcmV0dXJuIHdyKGUsZS5vcHRpb25zLndvcmtEZWxheSksITB9KSx0LmhpZ2hsaWdodEZyb250aWVyPXIubGluZSx0Lm1vZGVGcm9udGllcj1NYXRoLm1heCh0Lm1vZGVGcm9udGllcixyLmxpbmUpLGkubGVuZ3RoJiZocihlLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspYnIoZSxpW3RdLCJ0ZXh0Iil9KX19ZnVuY3Rpb24ga3IoZSl7dmFyIHQ9ZS5kaXNwbGF5OyF0LnNjcm9sbGJhcnNDbGlwcGVkJiZ0LnNjcm9sbGVyLm9mZnNldFdpZHRoJiYodC5uYXRpdmVCYXJXaWR0aD10LnNjcm9sbGVyLm9mZnNldFdpZHRoLXQuc2Nyb2xsZXIuY2xpZW50V2lkdGgsdC5oZWlnaHRGb3JjZXIuc3R5bGUuaGVpZ2h0PSR0KGUpKyJweCIsdC5zaXplci5zdHlsZS5tYXJnaW5Cb3R0b209LXQubmF0aXZlQmFyV2lkdGgrInB4Iix0LnNpemVyLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9JHQoZSkrInB4Iix0LnNjcm9sbGJhcnNDbGlwcGVkPSEwKX1mdW5jdGlvbiBBcihlKXtpZihlLmhhc0ZvY3VzKCkpcmV0dXJuIG51bGw7dmFyIHQ9YSgpO2lmKCF0fHwhbyhlLmRpc3BsYXkubGluZURpdix0KSlyZXR1cm4gbnVsbDt2YXIgbj17YWN0aXZlRWx0OnR9O2lmKHdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciByPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyLmFuY2hvck5vZGUmJnIuZXh0ZW5kJiZvKGUuZGlzcGxheS5saW5lRGl2LHIuYW5jaG9yTm9kZSkmJihuLmFuY2hvck5vZGU9ci5hbmNob3JOb2RlLG4uYW5jaG9yT2Zmc2V0PXIuYW5jaG9yT2Zmc2V0LG4uZm9jdXNOb2RlPXIuZm9jdXNOb2RlLG4uZm9jdXNPZmZzZXQ9ci5mb2N1c09mZnNldCl9cmV0dXJuIG59ZnVuY3Rpb24gX3IoZSl7aWYoZSYmZS5hY3RpdmVFbHQmJmUuYWN0aXZlRWx0IT1hKCkmJihlLmFjdGl2ZUVsdC5mb2N1cygpLGUuYW5jaG9yTm9kZSYmbyhkb2N1bWVudC5ib2R5LGUuYW5jaG9yTm9kZSkmJm8oZG9jdW1lbnQuYm9keSxlLmZvY3VzTm9kZSkpKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCksbj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO24uc2V0RW5kKGUuYW5jaG9yTm9kZSxlLmFuY2hvck9mZnNldCksbi5jb2xsYXBzZSghMSksdC5yZW1vdmVBbGxSYW5nZXMoKSx0LmFkZFJhbmdlKG4pLHQuZXh0ZW5kKGUuZm9jdXNOb2RlLGUuZm9jdXNPZmZzZXQpfX1mdW5jdGlvbiBUcihlLG4pe3ZhciByPWUuZGlzcGxheSxpPWUuZG9jO2lmKG4uZWRpdG9ySXNIaWRkZW4pcmV0dXJuIHhyKGUpLCExO2lmKCFuLmZvcmNlJiZuLnZpc2libGUuZnJvbT49ci52aWV3RnJvbSYmbi52aXNpYmxlLnRvPD1yLnZpZXdUbyYmKG51bGw9PXIudXBkYXRlTGluZU51bWJlcnN8fHIudXBkYXRlTGluZU51bWJlcnM+PXIudmlld1RvKSYmci5yZW5kZXJlZFZpZXc9PXIudmlldyYmMD09RHIoZSkpcmV0dXJuITE7em4oZSkmJih4cihlKSxuLmRpbXM9RW4oZSkpO3ZhciBvPWkuZmlyc3QraS5zaXplLGE9TWF0aC5tYXgobi52aXNpYmxlLmZyb20tZS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLGkuZmlyc3QpLHM9TWF0aC5taW4obyxuLnZpc2libGUudG8rZS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtyLnZpZXdGcm9tPGEmJmEtci52aWV3RnJvbTwyMCYmKGE9TWF0aC5tYXgoaS5maXJzdCxyLnZpZXdGcm9tKSksci52aWV3VG8+cyYmci52aWV3VG8tczwyMCYmKHM9TWF0aC5taW4obyxyLnZpZXdUbykpLFhhJiYoYT1tZShlLmRvYyxhKSxzPWdlKGUuZG9jLHMpKTt2YXIgdT1hIT1yLnZpZXdGcm9tfHxzIT1yLnZpZXdUb3x8ci5sYXN0V3JhcEhlaWdodCE9bi53cmFwcGVySGVpZ2h0fHxyLmxhc3RXcmFwV2lkdGghPW4ud3JhcHBlcldpZHRoO0VyKGUsYSxzKSxyLnZpZXdPZmZzZXQ9YmUoQShlLmRvYyxyLnZpZXdGcm9tKSksZS5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1yLnZpZXdPZmZzZXQrInB4Ijt2YXIgYz1EcihlKTtpZighdSYmMD09YyYmIW4uZm9yY2UmJnIucmVuZGVyZWRWaWV3PT1yLnZpZXcmJihudWxsPT1yLnVwZGF0ZUxpbmVOdW1iZXJzfHxyLnVwZGF0ZUxpbmVOdW1iZXJzPj1yLnZpZXdUbykpcmV0dXJuITE7dmFyIGw9QXIoZSk7cmV0dXJuIGM+NCYmKHIubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksTnIoZSxyLnVwZGF0ZUxpbmVOdW1iZXJzLG4uZGltcyksYz40JiYoci5saW5lRGl2LnN0eWxlLmRpc3BsYXk9IiIpLHIucmVuZGVyZWRWaWV3PXIudmlldyxfcihsKSx0KHIuY3Vyc29yRGl2KSx0KHIuc2VsZWN0aW9uRGl2KSxyLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PXIuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PTAsdSYmKHIubGFzdFdyYXBIZWlnaHQ9bi53cmFwcGVySGVpZ2h0LHIubGFzdFdyYXBXaWR0aD1uLndyYXBwZXJXaWR0aCx3cihlLDQwMCkpLHIudXBkYXRlTGluZU51bWJlcnM9bnVsbCwhMH1mdW5jdGlvbiBPcihlLHQpe2Zvcih2YXIgbj10LnZpZXdwb3J0LHI9ITA7KHImJmUub3B0aW9ucy5saW5lV3JhcHBpbmcmJnQub2xkRGlzcGxheVdpZHRoIT1VdChlKXx8KG4mJm51bGwhPW4udG9wJiYobj17dG9wOk1hdGgubWluKGUuZG9jLmhlaWdodCtSdChlLmRpc3BsYXkpLXp0KGUpLG4udG9wKX0pLHQudmlzaWJsZT0kbihlLmRpc3BsYXksZS5kb2MsbiksISh0LnZpc2libGUuZnJvbT49ZS5kaXNwbGF5LnZpZXdGcm9tJiZ0LnZpc2libGUudG88PWUuZGlzcGxheS52aWV3VG8pKSkmJlRyKGUsdCk7cj0hMSl7Um4oZSk7dmFyIGk9bnIoZSk7X24oZSkscnIoZSxpKSxMcihlLGkpLHQuZm9yY2U9ITF9dC5zaWduYWwoZSwidXBkYXRlIixlKSxlLmRpc3BsYXkudmlld0Zyb209PWUuZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tJiZlLmRpc3BsYXkudmlld1RvPT1lLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG98fCh0LnNpZ25hbChlLCJ2aWV3cG9ydENoYW5nZSIsZSxlLmRpc3BsYXkudmlld0Zyb20sZS5kaXNwbGF5LnZpZXdUbyksZS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb209ZS5kaXNwbGF5LnZpZXdGcm9tLGUuZGlzcGxheS5yZXBvcnRlZFZpZXdUbz1lLmRpc3BsYXkudmlld1RvKX1mdW5jdGlvbiBGcihlLHQpe3ZhciBuPW5ldyBrcyhlLHQpO2lmKFRyKGUsbikpe1JuKGUpLE9yKGUsbik7dmFyIHI9bnIoZSk7X24oZSkscnIoZSxyKSxMcihlLHIpLG4uZmluaXNoKCl9fWZ1bmN0aW9uIE5yKGUsbixyKXtmdW5jdGlvbiBpKHQpe3ZhciBuPXQubmV4dFNpYmxpbmc7cmV0dXJuIENhJiZGYSYmZS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09dD90LnN0eWxlLmRpc3BsYXk9Im5vbmUiOnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSxufWZvcih2YXIgbz1lLmRpc3BsYXksYT1lLm9wdGlvbnMubGluZU51bWJlcnMscz1vLmxpbmVEaXYsdT1zLmZpcnN0Q2hpbGQsYz1vLnZpZXcsbD1vLnZpZXdGcm9tLHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIGQ9Y1twXTtpZihkLmhpZGRlbik7ZWxzZSBpZihkLm5vZGUmJmQubm9kZS5wYXJlbnROb2RlPT1zKXtmb3IoO3UhPWQubm9kZTspdT1pKHUpO3ZhciBoPWEmJm51bGwhPW4mJm48PWwmJmQubGluZU51bWJlcjtkLmNoYW5nZXMmJihmKGQuY2hhbmdlcywiZ3V0dGVyIik+LTEmJihoPSExKSxEdChlLGQsbCxyKSksaCYmKHQoZC5saW5lTnVtYmVyKSxkLmxpbmVOdW1iZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoTChlLm9wdGlvbnMsbCkpKSksdT1kLm5vZGUubmV4dFNpYmxpbmd9ZWxzZXt2YXIgbT1GdChlLGQsbCxyKTtzLmluc2VydEJlZm9yZShtLHUpfWwrPWQuc2l6ZX1mb3IoO3U7KXU9aSh1KX1mdW5jdGlvbiBJcihlKXt2YXIgdD1lLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDtlLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD10KyJweCJ9ZnVuY3Rpb24gTHIoZSx0KXtlLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PXQuZG9jSGVpZ2h0KyJweCIsZS5kaXNwbGF5LmhlaWdodEZvcmNlci5zdHlsZS50b3A9dC5kb2NIZWlnaHQrInB4IixlLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQ9dC5kb2NIZWlnaHQrZS5kaXNwbGF5LmJhckhlaWdodCskdChlKSsicHgifWZ1bmN0aW9uIFByKGUpe3ZhciBuPWUuZGlzcGxheS5ndXR0ZXJzLGk9ZS5vcHRpb25zLmd1dHRlcnM7dChuKTtmb3IodmFyIG89MDtvPGkubGVuZ3RoOysrbyl7dmFyIGE9aVtvXSxzPW4uYXBwZW5kQ2hpbGQocigiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2EpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWEmJihlLmRpc3BsYXkubGluZUd1dHRlcj1zLHMuc3R5bGUud2lkdGg9KGUuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfW4uc3R5bGUuZGlzcGxheT1vPyIiOiJub25lIixJcihlKX1mdW5jdGlvbiBNcihlKXt2YXIgdD1mKGUuZ3V0dGVycywiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpOy0xPT10JiZlLmxpbmVOdW1iZXJzP2UuZ3V0dGVycz1lLmd1dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKTp0Pi0xJiYhZS5saW5lTnVtYmVycyYmKGUuZ3V0dGVycz1lLmd1dHRlcnMuc2xpY2UoMCksZS5ndXR0ZXJzLnNwbGljZSh0LDEpKX1mdW5jdGlvbiBqcihlKXt2YXIgdD1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtyZXR1cm4gbnVsbD09dCYmZS5kZXRhaWwmJmUuYXhpcz09ZS5IT1JJWk9OVEFMX0FYSVMmJih0PWUuZGV0YWlsKSxudWxsPT1uJiZlLmRldGFpbCYmZS5heGlzPT1lLlZFUlRJQ0FMX0FYSVM/bj1lLmRldGFpbDpudWxsPT1uJiYobj1lLndoZWVsRGVsdGEpLHt4OnQseTpufX1mdW5jdGlvbiBScihlKXt2YXIgdD1qcihlKTtyZXR1cm4gdC54Kj1fcyx0LnkqPV9zLHR9ZnVuY3Rpb24gQnIoZSx0KXt2YXIgbj1qcih0KSxyPW4ueCxpPW4ueSxvPWUuZGlzcGxheSxhPW8uc2Nyb2xsZXIscz1hLnNjcm9sbFdpZHRoPmEuY2xpZW50V2lkdGgsdT1hLnNjcm9sbEhlaWdodD5hLmNsaWVudEhlaWdodDtpZihyJiZzfHxpJiZ1KXtpZihpJiZGYSYmQ2EpZTpmb3IodmFyIGM9dC50YXJnZXQsbD1vLnZpZXc7YyE9YTtjPWMucGFyZW50Tm9kZSlmb3IodmFyIHA9MDtwPGwubGVuZ3RoO3ArKylpZihsW3BdLm5vZGU9PWMpe2UuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9YzticmVhayBlfWlmKHImJiFtYSYmIXdhJiZudWxsIT1fcylyZXR1cm4gaSYmdSYmWm4oZSxNYXRoLm1heCgwLGEuc2Nyb2xsVG9wK2kqX3MpKSx0cihlLE1hdGgubWF4KDAsYS5zY3JvbGxMZWZ0K3IqX3MpKSwoIWl8fGkmJnUpJiZOZSh0KSx2b2lkKG8ud2hlZWxTdGFydFg9bnVsbCk7aWYoaSYmbnVsbCE9X3Mpe3ZhciBmPWkqX3MsZD1lLmRvYy5zY3JvbGxUb3AsaD1kK28ud3JhcHBlci5jbGllbnRIZWlnaHQ7ZjwwP2Q9TWF0aC5tYXgoMCxkK2YtNTApOmg9TWF0aC5taW4oZS5kb2MuaGVpZ2h0LGgrZis1MCksRnIoZSx7dG9wOmQsYm90dG9tOmh9KX1BczwyMCYmKG51bGw9PW8ud2hlZWxTdGFydFg/KG8ud2hlZWxTdGFydFg9YS5zY3JvbGxMZWZ0LG8ud2hlZWxTdGFydFk9YS5zY3JvbGxUb3Asby53aGVlbERYPXIsby53aGVlbERZPWksc2V0VGltZW91dChmdW5jdGlvbigpe2lmKG51bGwhPW8ud2hlZWxTdGFydFgpe3ZhciBlPWEuc2Nyb2xsTGVmdC1vLndoZWVsU3RhcnRYLHQ9YS5zY3JvbGxUb3Atby53aGVlbFN0YXJ0WSxuPXQmJm8ud2hlZWxEWSYmdC9vLndoZWVsRFl8fGUmJm8ud2hlZWxEWCYmZS9vLndoZWVsRFg7by53aGVlbFN0YXJ0WD1vLndoZWVsU3RhcnRZPW51bGwsbiYmKF9zPShfcypBcytuKS8oQXMrMSksKytBcyl9fSwyMDApKTooby53aGVlbERYKz1yLG8ud2hlZWxEWSs9aSkpfX1mdW5jdGlvbiAkcihlLHQpe3ZhciBuPWVbdF07ZS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE0oZS5mcm9tKCksdC5mcm9tKCkpfSksdD1mKGUsbik7Zm9yKHZhciByPTE7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0sbz1lW3ItMV07aWYoTShvLnRvKCksaS5mcm9tKCkpPj0wKXt2YXIgYT0kKG8uZnJvbSgpLGkuZnJvbSgpKSxzPUIoby50bygpLGkudG8oKSksdT1vLmVtcHR5KCk/aS5mcm9tKCk9PWkuaGVhZDpvLmZyb20oKT09by5oZWFkO3I8PXQmJi0tdCxlLnNwbGljZSgtLXIsMixuZXcgT3ModT9zOmEsdT9hOnMpKX19cmV0dXJuIG5ldyBUcyhlLHQpfWZ1bmN0aW9uIFVyKGUsdCl7cmV0dXJuIG5ldyBUcyhbbmV3IE9zKGUsdHx8ZSldLDApfWZ1bmN0aW9uIHpyKGUpe3JldHVybiBlLnRleHQ/UChlLmZyb20ubGluZStlLnRleHQubGVuZ3RoLTEsbShlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkpOmUudG99ZnVuY3Rpb24gR3IoZSx0KXtpZihNKGUsdC5mcm9tKTwwKXJldHVybiBlO2lmKE0oZSx0LnRvKTw9MClyZXR1cm4genIodCk7dmFyIG49ZS5saW5lK3QudGV4dC5sZW5ndGgtKHQudG8ubGluZS10LmZyb20ubGluZSktMSxyPWUuY2g7cmV0dXJuIGUubGluZT09dC50by5saW5lJiYocis9enIodCkuY2gtdC50by5jaCksUChuLHIpfWZ1bmN0aW9uIFZyKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPGUuc2VsLnJhbmdlcy5sZW5ndGg7cisrKXt2YXIgaT1lLnNlbC5yYW5nZXNbcl07bi5wdXNoKG5ldyBPcyhHcihpLmFuY2hvcix0KSxHcihpLmhlYWQsdCkpKX1yZXR1cm4gJHIobixlLnNlbC5wcmltSW5kZXgpfWZ1bmN0aW9uIHFyKGUsdCxuKXtyZXR1cm4gZS5saW5lPT10LmxpbmU/UChuLmxpbmUsZS5jaC10LmNoK24uY2gpOlAobi5saW5lKyhlLmxpbmUtdC5saW5lKSxlLmNoKX1mdW5jdGlvbiBIcihlLHQsbil7Zm9yKHZhciByPVtdLGk9UChlLmZpcnN0LDApLG89aSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sdT1xcihzLmZyb20saSxvKSxjPXFyKHpyKHMpLGksbyk7aWYoaT1zLnRvLG89YywiYXJvdW5kIj09bil7dmFyIGw9ZS5zZWwucmFuZ2VzW2FdLHA9TShsLmhlYWQsbC5hbmNob3IpPDA7clthXT1uZXcgT3MocD9jOnUscD91OmMpfWVsc2UgclthXT1uZXcgT3ModSx1KX1yZXR1cm4gbmV3IFRzKHIsZS5zZWwucHJpbUluZGV4KX1mdW5jdGlvbiBXcihlKXtlLmRvYy5tb2RlPVZlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxRcihlKX1mdW5jdGlvbiBRcihlKXtlLmRvYy5pdGVyKGZ1bmN0aW9uKGUpe2Uuc3RhdGVBZnRlciYmKGUuc3RhdGVBZnRlcj1udWxsKSxlLnN0eWxlcyYmKGUuc3R5bGVzPW51bGwpfSksZS5kb2MubW9kZUZyb250aWVyPWUuZG9jLmhpZ2hsaWdodEZyb250aWVyPWUuZG9jLmZpcnN0LHdyKGUsMTAwKSxlLnN0YXRlLm1vZGVHZW4rKyxlLmN1ck9wJiZ2cihlKX1mdW5jdGlvbiBLcihlLHQpe3JldHVybiAwPT10LmZyb20uY2gmJjA9PXQudG8uY2gmJiIiPT1tKHQudGV4dCkmJighZS5jbXx8ZS5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSl9ZnVuY3Rpb24gSnIoZSx0LG4scil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gbj9uW2VdOm51bGx9ZnVuY3Rpb24gbyhlLG4saSl7YXQoZSxuLGksciksQ3QoZSwiY2hhbmdlIixlLHQpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIG49W10sbz1lO288dDsrK28pbi5wdXNoKG5ldyBtcyhjW29dLGkobykscikpO3JldHVybiBufXZhciBzPXQuZnJvbSx1PXQudG8sYz10LnRleHQsbD1BKGUscy5saW5lKSxwPUEoZSx1LmxpbmUpLGY9bShjKSxkPWkoYy5sZW5ndGgtMSksaD11LmxpbmUtcy5saW5lO2lmKHQuZnVsbCllLmluc2VydCgwLGEoMCxjLmxlbmd0aCkpLGUucmVtb3ZlKGMubGVuZ3RoLGUuc2l6ZS1jLmxlbmd0aCk7ZWxzZSBpZihLcihlLHQpKXt2YXIgZz1hKDAsYy5sZW5ndGgtMSk7byhwLHAudGV4dCxkKSxoJiZlLnJlbW92ZShzLmxpbmUsaCksZy5sZW5ndGgmJmUuaW5zZXJ0KHMubGluZSxnKX1lbHNlIGlmKGw9PXApaWYoMT09Yy5sZW5ndGgpbyhsLGwudGV4dC5zbGljZSgwLHMuY2gpK2YrbC50ZXh0LnNsaWNlKHUuY2gpLGQpO2Vsc2V7dmFyIHk9YSgxLGMubGVuZ3RoLTEpO3kucHVzaChuZXcgbXMoZitsLnRleHQuc2xpY2UodS5jaCksZCxyKSksbyhsLGwudGV4dC5zbGljZSgwLHMuY2gpK2NbMF0saSgwKSksZS5pbnNlcnQocy5saW5lKzEseSl9ZWxzZSBpZigxPT1jLmxlbmd0aClvKGwsbC50ZXh0LnNsaWNlKDAscy5jaCkrY1swXStwLnRleHQuc2xpY2UodS5jaCksaSgwKSksZS5yZW1vdmUocy5saW5lKzEsaCk7ZWxzZXtvKGwsbC50ZXh0LnNsaWNlKDAscy5jaCkrY1swXSxpKDApKSxvKHAsZitwLnRleHQuc2xpY2UodS5jaCksZCk7dmFyIHY9YSgxLGMubGVuZ3RoLTEpO2g+MSYmZS5yZW1vdmUocy5saW5lKzEsaC0xKSxlLmluc2VydChzLmxpbmUrMSx2KX1DdChlLCJjaGFuZ2UiLGUsdCl9ZnVuY3Rpb24gWXIoZSx0LG4pe2Z1bmN0aW9uIHIoZSxpLG8pe2lmKGUubGlua2VkKWZvcih2YXIgYT0wO2E8ZS5saW5rZWQubGVuZ3RoOysrYSl7dmFyIHM9ZS5saW5rZWRbYV07aWYocy5kb2MhPWkpe3ZhciB1PW8mJnMuc2hhcmVkSGlzdDtuJiYhdXx8KHQocy5kb2MsdSkscihzLmRvYyxlLHUpKX19fXIoZSxudWxsLCEwKX1mdW5jdGlvbiBYcihlLHQpe2lmKHQuY20pdGhyb3cgbmV3IEVycm9yKCJUaGlzIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gdXNlLiIpO2UuZG9jPXQsdC5jbT1lLFNuKGUpLFdyKGUpLFpyKGUpLGUub3B0aW9ucy5saW5lV3JhcHBpbmd8fENlKGUpLGUub3B0aW9ucy5tb2RlPXQubW9kZU9wdGlvbix2cihlKX1mdW5jdGlvbiBacihlKXsoInJ0bCI9PWUuZG9jLmRpcmVjdGlvbj9zOlJhKShlLmRpc3BsYXkubGluZURpdiwiQ29kZU1pcnJvci1ydGwiKX1mdW5jdGlvbiBlaShlKXtocihlLGZ1bmN0aW9uKCl7WnIoZSksdnIoZSl9KX1mdW5jdGlvbiB0aShlKXt0aGlzLmRvbmU9W10sdGhpcy51bmRvbmU9W10sdGhpcy51bmRvRGVwdGg9MS8wLHRoaXMubGFzdE1vZFRpbWU9dGhpcy5sYXN0U2VsVGltZT0wLHRoaXMubGFzdE9wPXRoaXMubGFzdFNlbE9wPW51bGwsdGhpcy5sYXN0T3JpZ2luPXRoaXMubGFzdFNlbE9yaWdpbj1udWxsLHRoaXMuZ2VuZXJhdGlvbj10aGlzLm1heEdlbmVyYXRpb249ZXx8MX1mdW5jdGlvbiBuaShlLHQpe3ZhciBuPXtmcm9tOlIodC5mcm9tKSx0bzp6cih0KSx0ZXh0Ol8oZSx0LmZyb20sdC50byl9O3JldHVybiBjaShlLG4sdC5mcm9tLmxpbmUsdC50by5saW5lKzEpLFlyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGNpKGUsbix0LmZyb20ubGluZSx0LnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIHJpKGUpe2Zvcig7ZS5sZW5ndGg7KXtpZighbShlKS5yYW5nZXMpYnJlYWs7ZS5wb3AoKX19ZnVuY3Rpb24gaWkoZSx0KXtyZXR1cm4gdD8ocmkoZS5kb25lKSxtKGUuZG9uZSkpOmUuZG9uZS5sZW5ndGgmJiFtKGUuZG9uZSkucmFuZ2VzP20oZS5kb25lKTplLmRvbmUubGVuZ3RoPjEmJiFlLmRvbmVbZS5kb25lLmxlbmd0aC0yXS5yYW5nZXM/KGUuZG9uZS5wb3AoKSxtKGUuZG9uZSkpOnZvaWQgMH1mdW5jdGlvbiBvaShlLHQsbixyKXt2YXIgaT1lLmhpc3Rvcnk7aS51bmRvbmUubGVuZ3RoPTA7dmFyIG8sYSxzPStuZXcgRGF0ZTtpZigoaS5sYXN0T3A9PXJ8fGkubGFzdE9yaWdpbj09dC5vcmlnaW4mJnQub3JpZ2luJiYoIisiPT10Lm9yaWdpbi5jaGFyQXQoMCkmJmkubGFzdE1vZFRpbWU+cy0oZS5jbT9lLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXk6NTAwKXx8IioiPT10Lm9yaWdpbi5jaGFyQXQoMCkpKSYmKG89aWkoaSxpLmxhc3RPcD09cikpKWE9bShvLmNoYW5nZXMpLDA9PU0odC5mcm9tLHQudG8pJiYwPT1NKHQuZnJvbSxhLnRvKT9hLnRvPXpyKHQpOm8uY2hhbmdlcy5wdXNoKG5pKGUsdCkpO2Vsc2V7dmFyIHU9bShpLmRvbmUpO2Zvcih1JiZ1LnJhbmdlc3x8dWkoZS5zZWwsaS5kb25lKSxvPXtjaGFuZ2VzOltuaShlLHQpXSxnZW5lcmF0aW9uOmkuZ2VuZXJhdGlvbn0saS5kb25lLnB1c2gobyk7aS5kb25lLmxlbmd0aD5pLnVuZG9EZXB0aDspaS5kb25lLnNoaWZ0KCksaS5kb25lWzBdLnJhbmdlc3x8aS5kb25lLnNoaWZ0KCl9aS5kb25lLnB1c2gobiksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uLGkubGFzdE1vZFRpbWU9aS5sYXN0U2VsVGltZT1zLGkubGFzdE9wPWkubGFzdFNlbE9wPXIsaS5sYXN0T3JpZ2luPWkubGFzdFNlbE9yaWdpbj10Lm9yaWdpbixhfHxBZShlLCJoaXN0b3J5QWRkZWQiKX1mdW5jdGlvbiBhaShlLHQsbixyKXt2YXIgaT10LmNoYXJBdCgwKTtyZXR1cm4iKiI9PWl8fCIrIj09aSYmbi5yYW5nZXMubGVuZ3RoPT1yLnJhbmdlcy5sZW5ndGgmJm4uc29tZXRoaW5nU2VsZWN0ZWQoKT09ci5zb21ldGhpbmdTZWxlY3RlZCgpJiZuZXcgRGF0ZS1lLmhpc3RvcnkubGFzdFNlbFRpbWU8PShlLmNtP2UuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheTo1MDApfWZ1bmN0aW9uIHNpKGUsdCxuLHIpe3ZhciBpPWUuaGlzdG9yeSxvPXImJnIub3JpZ2luO249PWkubGFzdFNlbE9wfHxvJiZpLmxhc3RTZWxPcmlnaW49PW8mJihpLmxhc3RNb2RUaW1lPT1pLmxhc3RTZWxUaW1lJiZpLmxhc3RPcmlnaW49PW98fGFpKGUsbyxtKGkuZG9uZSksdCkpP2kuZG9uZVtpLmRvbmUubGVuZ3RoLTFdPXQ6dWkodCxpLmRvbmUpLGkubGFzdFNlbFRpbWU9K25ldyBEYXRlLGkubGFzdFNlbE9yaWdpbj1vLGkubGFzdFNlbE9wPW4sciYmITEhPT1yLmNsZWFyUmVkbyYmcmkoaS51bmRvbmUpfWZ1bmN0aW9uIHVpKGUsdCl7dmFyIG49bSh0KTtuJiZuLnJhbmdlcyYmbi5lcXVhbHMoZSl8fHQucHVzaChlKX1mdW5jdGlvbiBjaShlLHQsbixyKXt2YXIgaT10WyJzcGFuc18iK2UuaWRdLG89MDtlLml0ZXIoTWF0aC5tYXgoZS5maXJzdCxuKSxNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSxyKSxmdW5jdGlvbihuKXtuLm1hcmtlZFNwYW5zJiYoKGl8fChpPXRbInNwYW5zXyIrZS5pZF09e30pKVtvXT1uLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBsaShlKXtpZighZSlyZXR1cm4gbnVsbDtmb3IodmFyIHQsbj0wO248ZS5sZW5ndGg7KytuKWVbbl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP3R8fCh0PWUuc2xpY2UoMCxuKSk6dCYmdC5wdXNoKGVbbl0pO3JldHVybiB0P3QubGVuZ3RoP3Q6bnVsbDplfWZ1bmN0aW9uIHBpKGUsdCl7dmFyIG49dFsic3BhbnNfIitlLmlkXTtpZighbilyZXR1cm4gbnVsbDtmb3IodmFyIHI9W10saT0wO2k8dC50ZXh0Lmxlbmd0aDsrK2kpci5wdXNoKGxpKG5baV0pKTtyZXR1cm4gcn1mdW5jdGlvbiBmaShlLHQpe3ZhciBuPXBpKGUsdCkscj1aKGUsdCk7aWYoIW4pcmV0dXJuIHI7aWYoIXIpcmV0dXJuIG47Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDsrK2kpe3ZhciBvPW5baV0sYT1yW2ldO2lmKG8mJmEpZTpmb3IodmFyIHM9MDtzPGEubGVuZ3RoOysrcyl7Zm9yKHZhciB1PWFbc10sYz0wO2M8by5sZW5ndGg7KytjKWlmKG9bY10ubWFya2VyPT11Lm1hcmtlciljb250aW51ZSBlO28ucHVzaCh1KX1lbHNlIGEmJihuW2ldPWEpfXJldHVybiBufWZ1bmN0aW9uIGRpKGUsdCxuKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1lW2ldO2lmKG8ucmFuZ2VzKXIucHVzaChuP1RzLnByb3RvdHlwZS5kZWVwQ29weS5jYWxsKG8pOm8pO2Vsc2V7dmFyIGE9by5jaGFuZ2VzLHM9W107ci5wdXNoKHtjaGFuZ2VzOnN9KTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSl7dmFyIGM9YVt1XSxsPXZvaWQgMDtpZihzLnB1c2goe2Zyb206Yy5mcm9tLHRvOmMudG8sdGV4dDpjLnRleHR9KSx0KWZvcih2YXIgcCBpbiBjKShsPXAubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJmYodCxOdW1iZXIobFsxXSkpPi0xJiYobShzKVtwXT1jW3BdLGRlbGV0ZSBjW3BdKX19fXJldHVybiByfWZ1bmN0aW9uIGhpKGUsdCxuLHIpe2lmKHIpe3ZhciBpPWUuYW5jaG9yO2lmKG4pe3ZhciBvPU0odCxpKTwwO28hPU0obixpKTwwPyhpPXQsdD1uKTpvIT1NKHQsbik8MCYmKHQ9bil9cmV0dXJuIG5ldyBPcyhpLHQpfXJldHVybiBuZXcgT3Mobnx8dCx0KX1mdW5jdGlvbiBtaShlLHQsbixyLGkpe251bGw9PWkmJihpPWUuY20mJihlLmNtLmRpc3BsYXkuc2hpZnR8fGUuZXh0ZW5kKSksQ2koZSxuZXcgVHMoW2hpKGUuc2VsLnByaW1hcnkoKSx0LG4saSldLDApLHIpfWZ1bmN0aW9uIGdpKGUsdCxuKXtmb3IodmFyIHI9W10saT1lLmNtJiYoZS5jbS5kaXNwbGF5LnNoaWZ0fHxlLmV4dGVuZCksbz0wO288ZS5zZWwucmFuZ2VzLmxlbmd0aDtvKyspcltvXT1oaShlLnNlbC5yYW5nZXNbb10sdFtvXSxudWxsLGkpO0NpKGUsJHIocixlLnNlbC5wcmltSW5kZXgpLG4pfWZ1bmN0aW9uIHlpKGUsdCxuLHIpe3ZhciBpPWUuc2VsLnJhbmdlcy5zbGljZSgwKTtpW3RdPW4sQ2koZSwkcihpLGUuc2VsLnByaW1JbmRleCkscil9ZnVuY3Rpb24gdmkoZSx0LG4scil7Q2koZSxVcih0LG4pLHIpfWZ1bmN0aW9uIGJpKGUsdCxuKXt2YXIgcj17cmFuZ2VzOnQucmFuZ2VzLHVwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMucmFuZ2VzPVtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKW4ucmFuZ2VzW3JdPW5ldyBPcyh6KGUsdFtyXS5hbmNob3IpLHooZSx0W3JdLmhlYWQpKX0sb3JpZ2luOm4mJm4ub3JpZ2lufTtyZXR1cm4gQWUoZSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIixlLHIpLGUuY20mJkFlKGUuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsZS5jbSxyKSxyLnJhbmdlcyE9dC5yYW5nZXM/JHIoci5yYW5nZXMsci5yYW5nZXMubGVuZ3RoLTEpOnR9ZnVuY3Rpb24geGkoZSx0LG4pe3ZhciByPWUuaGlzdG9yeS5kb25lLGk9bShyKTtpJiZpLnJhbmdlcz8ocltyLmxlbmd0aC0xXT10LEVpKGUsdCxuKSk6Q2koZSx0LG4pfWZ1bmN0aW9uIENpKGUsdCxuKXtFaShlLHQsbiksc2koZSxlLnNlbCxlLmNtP2UuY20uY3VyT3AuaWQ6TmFOLG4pfWZ1bmN0aW9uIEVpKGUsdCxuKXsoT2UoZSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fGUuY20mJk9lKGUuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKSYmKHQ9YmkoZSx0LG4pKSxEaShlLFNpKGUsdCxuJiZuLmJpYXN8fChNKHQucHJpbWFyeSgpLmhlYWQsZS5zZWwucHJpbWFyeSgpLmhlYWQpPDA/LTE6MSksITApKSxuJiYhMT09PW4uc2Nyb2xsfHwhZS5jbXx8UW4oZS5jbSl9ZnVuY3Rpb24gRGkoZSx0KXt0LmVxdWFscyhlLnNlbCl8fChlLnNlbD10LGUuY20mJihlLmNtLmN1ck9wLnVwZGF0ZUlucHV0PWUuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD0hMCxUZShlLmNtKSksQ3QoZSwiY3Vyc29yQWN0aXZpdHkiLGUpKX1mdW5jdGlvbiB3aShlKXtEaShlLFNpKGUsZS5zZWwsbnVsbCwhMSkpfWZ1bmN0aW9uIFNpKGUsdCxuLHIpe2Zvcih2YXIgaSxvPTA7bzx0LnJhbmdlcy5sZW5ndGg7bysrKXt2YXIgYT10LnJhbmdlc1tvXSxzPXQucmFuZ2VzLmxlbmd0aD09ZS5zZWwucmFuZ2VzLmxlbmd0aCYmZS5zZWwucmFuZ2VzW29dLHU9QWkoZSxhLmFuY2hvcixzJiZzLmFuY2hvcixuLHIpLGM9QWkoZSxhLmhlYWQscyYmcy5oZWFkLG4scik7KGl8fHUhPWEuYW5jaG9yfHxjIT1hLmhlYWQpJiYoaXx8KGk9dC5yYW5nZXMuc2xpY2UoMCxvKSksaVtvXT1uZXcgT3ModSxjKSl9cmV0dXJuIGk/JHIoaSx0LnByaW1JbmRleCk6dH1mdW5jdGlvbiBraShlLHQsbixyLGkpe3ZhciBvPUEoZSx0LmxpbmUpO2lmKG8ubWFya2VkU3BhbnMpZm9yKHZhciBhPTA7YTxvLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Epe3ZhciBzPW8ubWFya2VkU3BhbnNbYV0sdT1zLm1hcmtlcjtpZigobnVsbD09cy5mcm9tfHwodS5pbmNsdXNpdmVMZWZ0P3MuZnJvbTw9dC5jaDpzLmZyb208dC5jaCkpJiYobnVsbD09cy50b3x8KHUuaW5jbHVzaXZlUmlnaHQ/cy50bz49dC5jaDpzLnRvPnQuY2gpKSl7aWYoaSYmKEFlKHUsImJlZm9yZUN1cnNvckVudGVyIiksdS5leHBsaWNpdGx5Q2xlYXJlZCkpe2lmKG8ubWFya2VkU3BhbnMpey0tYTtjb250aW51ZX1icmVha31pZighdS5hdG9taWMpY29udGludWU7aWYobil7dmFyIGM9dS5maW5kKHI8MD8xOi0xKSxsPXZvaWQgMDtpZigocjwwP3UuaW5jbHVzaXZlUmlnaHQ6dS5pbmNsdXNpdmVMZWZ0KSYmKGM9X2koZSxjLC1yLGMmJmMubGluZT09dC5saW5lP286bnVsbCkpLGMmJmMubGluZT09dC5saW5lJiYobD1NKGMsbikpJiYocjwwP2w8MDpsPjApKXJldHVybiBraShlLGMsdCxyLGkpfXZhciBwPXUuZmluZChyPDA/LTE6MSk7cmV0dXJuKHI8MD91LmluY2x1c2l2ZUxlZnQ6dS5pbmNsdXNpdmVSaWdodCkmJihwPV9pKGUscCxyLHAubGluZT09dC5saW5lP286bnVsbCkpLHA/a2koZSxwLHQscixpKTpudWxsfX1yZXR1cm4gdH1mdW5jdGlvbiBBaShlLHQsbixyLGkpe3ZhciBvPXJ8fDEsYT1raShlLHQsbixvLGkpfHwhaSYma2koZSx0LG4sbywhMCl8fGtpKGUsdCxuLC1vLGkpfHwhaSYma2koZSx0LG4sLW8sITApO3JldHVybiBhfHwoZS5jYW50RWRpdD0hMCxQKGUuZmlyc3QsMCkpfWZ1bmN0aW9uIF9pKGUsdCxuLHIpe3JldHVybiBuPDAmJjA9PXQuY2g/dC5saW5lPmUuZmlyc3Q/eihlLFAodC5saW5lLTEpKTpudWxsOm4+MCYmdC5jaD09KHJ8fEEoZSx0LmxpbmUpKS50ZXh0Lmxlbmd0aD90LmxpbmU8ZS5maXJzdCtlLnNpemUtMT9QKHQubGluZSsxLDApOm51bGw6bmV3IFAodC5saW5lLHQuY2grbil9ZnVuY3Rpb24gVGkoZSl7ZS5zZXRTZWxlY3Rpb24oUChlLmZpcnN0TGluZSgpLDApLFAoZS5sYXN0TGluZSgpKSxxYSl9ZnVuY3Rpb24gT2koZSx0LG4pe3ZhciByPXtjYW5jZWxlZDohMSxmcm9tOnQuZnJvbSx0bzp0LnRvLHRleHQ6dC50ZXh0LG9yaWdpbjp0Lm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5jZWxlZD0hMH19O3JldHVybiBuJiYoci51cGRhdGU9ZnVuY3Rpb24odCxuLGksbyl7dCYmKHIuZnJvbT16KGUsdCkpLG4mJihyLnRvPXooZSxuKSksaSYmKHIudGV4dD1pKSx2b2lkIDAhPT1vJiYoci5vcmlnaW49byl9KSxBZShlLCJiZWZvcmVDaGFuZ2UiLGUsciksZS5jbSYmQWUoZS5jbSwiYmVmb3JlQ2hhbmdlIixlLmNtLHIpLHIuY2FuY2VsZWQ/bnVsbDp7ZnJvbTpyLmZyb20sdG86ci50byx0ZXh0OnIudGV4dCxvcmlnaW46ci5vcmlnaW59fWZ1bmN0aW9uIEZpKGUsdCxuKXtpZihlLmNtKXtpZighZS5jbS5jdXJPcClyZXR1cm4gbXIoZS5jbSxGaSkoZSx0LG4pO2lmKGUuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShPZShlLCJiZWZvcmVDaGFuZ2UiKXx8ZS5jbSYmT2UoZS5jbSwiYmVmb3JlQ2hhbmdlIikpfHwodD1PaShlLHQsITApKSl7dmFyIHI9WWEmJiFuJiZ0ZShlLHQuZnJvbSx0LnRvKTtpZihyKWZvcih2YXIgaT1yLmxlbmd0aC0xO2k+PTA7LS1pKU5pKGUse2Zyb206cltpXS5mcm9tLHRvOnJbaV0udG8sdGV4dDppP1siIl06dC50ZXh0LG9yaWdpbjp0Lm9yaWdpbn0pO2Vsc2UgTmkoZSx0KX19ZnVuY3Rpb24gTmkoZSx0KXtpZigxIT10LnRleHQubGVuZ3RofHwiIiE9dC50ZXh0WzBdfHwwIT1NKHQuZnJvbSx0LnRvKSl7dmFyIG49VnIoZSx0KTtvaShlLHQsbixlLmNtP2UuY20uY3VyT3AuaWQ6TmFOKSxQaShlLHQsbixaKGUsdCkpO3ZhciByPVtdO1lyKGUsZnVuY3Rpb24oZSxuKXtufHwtMSE9ZihyLGUuaGlzdG9yeSl8fCgkaShlLmhpc3RvcnksdCksci5wdXNoKGUuaGlzdG9yeSkpLFBpKGUsdCxudWxsLFooZSx0KSl9KX19ZnVuY3Rpb24gSWkoZSx0LG4pe3ZhciByPWUuY20mJmUuY20uc3RhdGUuc3VwcHJlc3NFZGl0cztpZighcnx8bil7Zm9yKHZhciBpLG89ZS5oaXN0b3J5LGE9ZS5zZWwscz0idW5kbyI9PXQ/by5kb25lOm8udW5kb25lLHU9InVuZG8iPT10P28udW5kb25lOm8uZG9uZSxjPTA7YzxzLmxlbmd0aCYmKGk9c1tjXSxuPyFpLnJhbmdlc3x8aS5lcXVhbHMoZS5zZWwpOmkucmFuZ2VzKTtjKyspO2lmKGMhPXMubGVuZ3RoKXtmb3Ioby5sYXN0T3JpZ2luPW8ubGFzdFNlbE9yaWdpbj1udWxsOzspe2lmKGk9cy5wb3AoKSwhaS5yYW5nZXMpe2lmKHIpcmV0dXJuIHZvaWQgcy5wdXNoKGkpO2JyZWFrfWlmKHVpKGksdSksbiYmIWkuZXF1YWxzKGUuc2VsKSlyZXR1cm4gdm9pZCBDaShlLGkse2NsZWFyUmVkbzohMX0pO2E9aX12YXIgbD1bXTt1aShhLHUpLHUucHVzaCh7Y2hhbmdlczpsLGdlbmVyYXRpb246by5nZW5lcmF0aW9ufSksby5nZW5lcmF0aW9uPWkuZ2VuZXJhdGlvbnx8KytvLm1heEdlbmVyYXRpb247Zm9yKHZhciBwPU9lKGUsImJlZm9yZUNoYW5nZSIpfHxlLmNtJiZPZShlLmNtLCJiZWZvcmVDaGFuZ2UiKSxkPWkuY2hhbmdlcy5sZW5ndGgtMTtkPj0wOy0tZCl7dmFyIGg9ZnVuY3Rpb24obil7dmFyIHI9aS5jaGFuZ2VzW25dO2lmKHIub3JpZ2luPXQscCYmIU9pKGUsciwhMSkpcmV0dXJuIHMubGVuZ3RoPTAse307bC5wdXNoKG5pKGUscikpO3ZhciBvPW4/VnIoZSxyKTptKHMpO1BpKGUscixvLGZpKGUscikpLCFuJiZlLmNtJiZlLmNtLnNjcm9sbEludG9WaWV3KHtmcm9tOnIuZnJvbSx0bzp6cihyKX0pO3ZhciBhPVtdO1lyKGUsZnVuY3Rpb24oZSx0KXt0fHwtMSE9ZihhLGUuaGlzdG9yeSl8fCgkaShlLmhpc3RvcnksciksYS5wdXNoKGUuaGlzdG9yeSkpLFBpKGUscixudWxsLGZpKGUscikpfSl9KGQpO2lmKGgpcmV0dXJuIGgudn19fX1mdW5jdGlvbiBMaShlLHQpe2lmKDAhPXQmJihlLmZpcnN0Kz10LGUuc2VsPW5ldyBUcyhnKGUuc2VsLnJhbmdlcyxmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9zKFAoZS5hbmNob3IubGluZSt0LGUuYW5jaG9yLmNoKSxQKGUuaGVhZC5saW5lK3QsZS5oZWFkLmNoKSl9KSxlLnNlbC5wcmltSW5kZXgpLGUuY20pKXt2cihlLmNtLGUuZmlyc3QsZS5maXJzdC10LHQpO2Zvcih2YXIgbj1lLmNtLmRpc3BsYXkscj1uLnZpZXdGcm9tO3I8bi52aWV3VG87cisrKWJyKGUuY20sciwiZ3V0dGVyIil9fWZ1bmN0aW9uIFBpKGUsdCxuLHIpe2lmKGUuY20mJiFlLmNtLmN1ck9wKXJldHVybiBtcihlLmNtLFBpKShlLHQsbixyKTtpZih0LnRvLmxpbmU8ZS5maXJzdClyZXR1cm4gdm9pZCBMaShlLHQudGV4dC5sZW5ndGgtMS0odC50by5saW5lLXQuZnJvbS5saW5lKSk7aWYoISh0LmZyb20ubGluZT5lLmxhc3RMaW5lKCkpKXtpZih0LmZyb20ubGluZTxlLmZpcnN0KXt2YXIgaT10LnRleHQubGVuZ3RoLTEtKGUuZmlyc3QtdC5mcm9tLmxpbmUpO0xpKGUsaSksdD17ZnJvbTpQKGUuZmlyc3QsMCksdG86UCh0LnRvLmxpbmUraSx0LnRvLmNoKSx0ZXh0OlttKHQudGV4dCldLG9yaWdpbjp0Lm9yaWdpbn19dmFyIG89ZS5sYXN0TGluZSgpO3QudG8ubGluZT5vJiYodD17ZnJvbTp0LmZyb20sdG86UChvLEEoZSxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbdC50ZXh0WzBdXSxvcmlnaW46dC5vcmlnaW59KSx0LnJlbW92ZWQ9XyhlLHQuZnJvbSx0LnRvKSxufHwobj1WcihlLHQpKSxlLmNtP01pKGUuY20sdCxyKTpKcihlLHQsciksRWkoZSxuLHFhKX19ZnVuY3Rpb24gTWkoZSx0LG4pe3ZhciByPWUuZG9jLGk9ZS5kaXNwbGF5LG89dC5mcm9tLGE9dC50byxzPSExLHU9by5saW5lO2Uub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh1PUYoZmUoQShyLG8ubGluZSkpKSxyLml0ZXIodSxhLmxpbmUrMSxmdW5jdGlvbihlKXtpZihlPT1pLm1heExpbmUpcmV0dXJuIHM9ITAsITB9KSksci5zZWwuY29udGFpbnModC5mcm9tLHQudG8pPi0xJiZUZShlKSxKcihyLHQsbix3bihlKSksZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHIuaXRlcih1LG8ubGluZSt0LnRleHQubGVuZ3RoLGZ1bmN0aW9uKGUpe3ZhciB0PXhlKGUpO3Q+aS5tYXhMaW5lTGVuZ3RoJiYoaS5tYXhMaW5lPWUsaS5tYXhMaW5lTGVuZ3RoPXQsaS5tYXhMaW5lQ2hhbmdlZD0hMCxzPSExKX0pLHMmJihlLmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvdChyLG8ubGluZSksd3IoZSw0MDApO3ZhciBjPXQudGV4dC5sZW5ndGgtKGEubGluZS1vLmxpbmUpLTE7dC5mdWxsP3ZyKGUpOm8ubGluZSE9YS5saW5lfHwxIT10LnRleHQubGVuZ3RofHxLcihlLmRvYyx0KT92cihlLG8ubGluZSxhLmxpbmUrMSxjKTpicihlLG8ubGluZSwidGV4dCIpO3ZhciBsPU9lKGUsImNoYW5nZXMiKSxwPU9lKGUsImNoYW5nZSIpO2lmKHB8fGwpe3ZhciBmPXtmcm9tOm8sdG86YSx0ZXh0OnQudGV4dCxyZW1vdmVkOnQucmVtb3ZlZCxvcmlnaW46dC5vcmlnaW59O3AmJkN0KGUsImNoYW5nZSIsZSxmKSxsJiYoZS5jdXJPcC5jaGFuZ2VPYmpzfHwoZS5jdXJPcC5jaGFuZ2VPYmpzPVtdKSkucHVzaChmKX1lLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnU9bnVsbH1mdW5jdGlvbiBqaShlLHQsbixyLGkpe2lmKHJ8fChyPW4pLE0ocixuKTwwKXt2YXIgbztvPVtyLG5dLG49b1swXSxyPW9bMV19InN0cmluZyI9PXR5cGVvZiB0JiYodD1lLnNwbGl0TGluZXModCkpLEZpKGUse2Zyb206bix0bzpyLHRleHQ6dCxvcmlnaW46aX0pfWZ1bmN0aW9uIFJpKGUsdCxuLHIpe248ZS5saW5lP2UubGluZSs9cjp0PGUubGluZSYmKGUubGluZT10LGUuY2g9MCl9ZnVuY3Rpb24gQmkoZSx0LG4scil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPWVbaV0sYT0hMDtpZihvLnJhbmdlcyl7by5jb3BpZWR8fChvPWVbaV09by5kZWVwQ29weSgpLG8uY29waWVkPSEwKTtmb3IodmFyIHM9MDtzPG8ucmFuZ2VzLmxlbmd0aDtzKyspUmkoby5yYW5nZXNbc10uYW5jaG9yLHQsbixyKSxSaShvLnJhbmdlc1tzXS5oZWFkLHQsbixyKX1lbHNle2Zvcih2YXIgdT0wO3U8by5jaGFuZ2VzLmxlbmd0aDsrK3Upe3ZhciBjPW8uY2hhbmdlc1t1XTtpZihuPGMuZnJvbS5saW5lKWMuZnJvbT1QKGMuZnJvbS5saW5lK3IsYy5mcm9tLmNoKSxjLnRvPVAoYy50by5saW5lK3IsYy50by5jaCk7ZWxzZSBpZih0PD1jLnRvLmxpbmUpe2E9ITE7YnJlYWt9fWF8fChlLnNwbGljZSgwLGkrMSksaT0wKX19fWZ1bmN0aW9uICRpKGUsdCl7dmFyIG49dC5mcm9tLmxpbmUscj10LnRvLmxpbmUsaT10LnRleHQubGVuZ3RoLShyLW4pLTE7QmkoZS5kb25lLG4scixpKSxCaShlLnVuZG9uZSxuLHIsaSl9ZnVuY3Rpb24gVWkoZSx0LG4scil7dmFyIGk9dCxvPXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P289QShlLFUoZSx0KSk6aT1GKHQpLG51bGw9PWk/bnVsbDoocihvLGkpJiZlLmNtJiZicihlLmNtLGksbiksbyl9ZnVuY3Rpb24gemkoZSl7dmFyIHQ9dGhpczt0aGlzLmxpbmVzPWUsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIG49MCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5wYXJlbnQ9dCxuKz1lW3JdLmhlaWdodDt0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIEdpKGUpe3ZhciB0PXRoaXM7dGhpcy5jaGlsZHJlbj1lO2Zvcih2YXIgbj0wLHI9MCxpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPWVbaV07bis9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10fXRoaXMuc2l6ZT1uLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBWaShlLHQsbil7YmUodCk8KGUuY3VyT3AmJmUuY3VyT3Auc2Nyb2xsVG9wfHxlLmRvYy5zY3JvbGxUb3ApJiZXbihlLG4pfWZ1bmN0aW9uIHFpKGUsdCxuLHIpe3ZhciBpPW5ldyBGcyhlLG4sciksbz1lLmNtO3JldHVybiBvJiZpLm5vSFNjcm9sbCYmKG8uZGlzcGxheS5hbGlnbldpZGdldHM9ITApLFVpKGUsdCwid2lkZ2V0IixmdW5jdGlvbih0KXt2YXIgbj10LndpZGdldHN8fCh0LndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/bi5wdXNoKGkpOm4uc3BsaWNlKE1hdGgubWluKG4ubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9dCxvJiYheWUoZSx0KSl7dmFyIHI9YmUodCk8ZS5zY3JvbGxUb3A7Tyh0LHQuaGVpZ2h0K1B0KGkpKSxyJiZXbihvLGkuaGVpZ2h0KSxvLmN1ck9wLmZvcmNlVXBkYXRlPSEwfXJldHVybiEwfSksbyYmQ3QobywibGluZVdpZGdldEFkZGVkIixvLGksIm51bWJlciI9PXR5cGVvZiB0P3Q6Rih0KSksaX1mdW5jdGlvbiBIaShlLHQsbixyLG8pe2lmKHImJnIuc2hhcmVkKXJldHVybiBXaShlLHQsbixyLG8pO2lmKGUuY20mJiFlLmNtLmN1ck9wKXJldHVybiBtcihlLmNtLEhpKShlLHQsbixyLG8pO3ZhciBhPW5ldyBJcyhlLG8pLHM9TSh0LG4pO2lmKHImJmwocixhLCExKSxzPjB8fDA9PXMmJiExIT09YS5jbGVhcldoZW5FbXB0eSlyZXR1cm4gYTtpZihhLnJlcGxhY2VkV2l0aCYmKGEuY29sbGFwc2VkPSEwLGEud2lkZ2V0Tm9kZT1pKCJzcGFuIixbYS5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLHIuaGFuZGxlTW91c2VFdmVudHN8fGEud2lkZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCJ0cnVlIiksci5pbnNlcnRMZWZ0JiYoYS53aWRnZXROb2RlLmluc2VydExlZnQ9ITApKSxhLmNvbGxhcHNlZCl7aWYocGUoZSx0LmxpbmUsdCxuLGEpfHx0LmxpbmUhPW4ubGluZSYmcGUoZSxuLmxpbmUsdCxuLGEpKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgcGFydGlhbGx5IG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO0goKX1hLmFkZFRvSGlzdG9yeSYmb2koZSx7ZnJvbTp0LHRvOm4sb3JpZ2luOiJtYXJrVGV4dCJ9LGUuc2VsLE5hTik7dmFyIHUsYz10LmxpbmUscD1lLmNtO2lmKGUuaXRlcihjLG4ubGluZSsxLGZ1bmN0aW9uKGUpe3AmJmEuY29sbGFwc2VkJiYhcC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZmUoZSk9PXAuZGlzcGxheS5tYXhMaW5lJiYodT0hMCksYS5jb2xsYXBzZWQmJmMhPXQubGluZSYmTyhlLDApLEooZSxuZXcgVyhhLGM9PXQubGluZT90LmNoOm51bGwsYz09bi5saW5lP24uY2g6bnVsbCkpLCsrY30pLGEuY29sbGFwc2VkJiZlLml0ZXIodC5saW5lLG4ubGluZSsxLGZ1bmN0aW9uKHQpe3llKGUsdCkmJk8odCwwKX0pLGEuY2xlYXJPbkVudGVyJiZucyhhLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gYS5jbGVhcigpfSksYS5yZWFkT25seSYmKHEoKSwoZS5oaXN0b3J5LmRvbmUubGVuZ3RofHxlLmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJmUuY2xlYXJIaXN0b3J5KCkpLGEuY29sbGFwc2VkJiYoYS5pZD0rK05zLGEuYXRvbWljPSEwKSxwKXtpZih1JiYocC5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSxhLmNvbGxhcHNlZCl2cihwLHQubGluZSxuLmxpbmUrMSk7ZWxzZSBpZihhLmNsYXNzTmFtZXx8YS50aXRsZXx8YS5zdGFydFN0eWxlfHxhLmVuZFN0eWxlfHxhLmNzcylmb3IodmFyIGY9dC5saW5lO2Y8PW4ubGluZTtmKyspYnIocCxmLCJ0ZXh0Iik7YS5hdG9taWMmJndpKHAuZG9jKSxDdChwLCJtYXJrZXJBZGRlZCIscCxhKX1yZXR1cm4gYX1mdW5jdGlvbiBXaShlLHQsbixyLGkpe3I9bChyKSxyLnNoYXJlZD0hMTt2YXIgbz1bSGkoZSx0LG4scixpKV0sYT1vWzBdLHM9ci53aWRnZXROb2RlO3JldHVybiBZcihlLGZ1bmN0aW9uKGUpe3MmJihyLndpZGdldE5vZGU9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goSGkoZSx6KGUsdCkseihlLG4pLHIsaSkpO2Zvcih2YXIgdT0wO3U8ZS5saW5rZWQubGVuZ3RoOysrdSlpZihlLmxpbmtlZFt1XS5pc1BhcmVudClyZXR1cm47YT1tKG8pfSksbmV3IExzKG8sYSl9ZnVuY3Rpb24gUWkoZSl7cmV0dXJuIGUuZmluZE1hcmtzKFAoZS5maXJzdCwwKSxlLmNsaXBQb3MoUChlLmxhc3RMaW5lKCkpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnR9KX1mdW5jdGlvbiBLaShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dLGk9ci5maW5kKCksbz1lLmNsaXBQb3MoaS5mcm9tKSxhPWUuY2xpcFBvcyhpLnRvKTtpZihNKG8sYSkpe3ZhciBzPUhpKGUsbyxhLHIucHJpbWFyeSxyLnByaW1hcnkudHlwZSk7ci5tYXJrZXJzLnB1c2gocykscy5wYXJlbnQ9cn19fWZ1bmN0aW9uIEppKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKSFmdW5jdGlvbih0KXt2YXIgbj1lW3RdLHI9W24ucHJpbWFyeS5kb2NdO1lyKG4ucHJpbWFyeS5kb2MsZnVuY3Rpb24oZSl7cmV0dXJuIHIucHVzaChlKX0pO2Zvcih2YXIgaT0wO2k8bi5tYXJrZXJzLmxlbmd0aDtpKyspe3ZhciBvPW4ubWFya2Vyc1tpXTstMT09ZihyLG8uZG9jKSYmKG8ucGFyZW50PW51bGwsbi5tYXJrZXJzLnNwbGljZShpLS0sMSkpfX0odCl9ZnVuY3Rpb24gWWkoZSl7dmFyIHQ9dGhpcztpZihlbyh0KSwhX2UodCxlKSYmIU10KHQuZGlzcGxheSxlKSl7TmUoZSksYmEmJihqcz0rbmV3IERhdGUpO3ZhciBuPWtuKHQsZSwhMCkscj1lLmRhdGFUcmFuc2Zlci5maWxlcztpZihuJiYhdC5pc1JlYWRPbmx5KCkpaWYociYmci5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9ci5sZW5ndGgsbz1BcnJheShpKSxhPTAscz0wO3M8aTsrK3MpIWZ1bmN0aW9uKGUscil7aWYoIXQub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXN8fC0xIT1mKHQub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMsZS50eXBlKSl7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9bXIodCxmdW5jdGlvbigpe3ZhciBlPXMucmVzdWx0O2lmKC9bXHgwMC1ceDA4XHgwZS1ceDFmXXsyfS8udGVzdChlKSYmKGU9IiIpLG9bcl09ZSwrK2E9PWkpe249eih0LmRvYyxuKTt2YXIgdT17ZnJvbTpuLHRvOm4sdGV4dDp0LmRvYy5zcGxpdExpbmVzKG8uam9pbih0LmRvYy5saW5lU2VwYXJhdG9yKCkpKSxvcmlnaW46InBhc3RlIn07RmkodC5kb2MsdSkseGkodC5kb2MsVXIobix6cih1KSkpfX0pLHMucmVhZEFzVGV4dChlKX19KHJbc10scyk7ZWxzZXtpZih0LnN0YXRlLmRyYWdnaW5nVGV4dCYmdC5kb2Muc2VsLmNvbnRhaW5zKG4pPi0xKXJldHVybiB0LnN0YXRlLmRyYWdnaW5nVGV4dChlKSx2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNwbGF5LmlucHV0LmZvY3VzKCl9LDIwKTt0cnl7dmFyIHU9ZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpO2lmKHUpe3ZhciBjO2lmKHQuc3RhdGUuZHJhZ2dpbmdUZXh0JiYhdC5zdGF0ZS5kcmFnZ2luZ1RleHQuY29weSYmKGM9dC5saXN0U2VsZWN0aW9ucygpKSxFaSh0LmRvYyxVcihuLG4pKSxjKWZvcih2YXIgbD0wO2w8Yy5sZW5ndGg7KytsKWppKHQuZG9jLCIiLGNbbF0uYW5jaG9yLGNbbF0uaGVhZCwiZHJhZyIpO3QucmVwbGFjZVNlbGVjdGlvbih1LCJhcm91bmQiLCJwYXN0ZSIpLHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfX1jYXRjaChlKXt9fX19ZnVuY3Rpb24gWGkoZSx0KXtpZihiYSYmKCFlLnN0YXRlLmRyYWdnaW5nVGV4dHx8K25ldyBEYXRlLWpzPDEwMCkpcmV0dXJuIHZvaWQgUGUodCk7aWYoIV9lKGUsdCkmJiFNdChlLmRpc3BsYXksdCkmJih0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IixlLmdldFNlbGVjdGlvbigpKSx0LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5TW92ZSIsdC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhU2EpKXt2YXIgbj1yKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix3YSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSxlLmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLHQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksd2EmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gWmkoZSx0KXt2YXIgaT1rbihlLHQpO2lmKGkpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtPbihlLGksbyksZS5kaXNwbGF5LmRyYWdDdXJzb3J8fChlLmRpc3BsYXkuZHJhZ0N1cnNvcj1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY3Vyc29ycyBDb2RlTWlycm9yLWRyYWdjdXJzb3JzIiksZS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoZS5kaXNwbGF5LmRyYWdDdXJzb3IsZS5kaXNwbGF5LmN1cnNvckRpdikpLG4oZS5kaXNwbGF5LmRyYWdDdXJzb3Isbyl9fWZ1bmN0aW9uIGVvKGUpe2UuZGlzcGxheS5kcmFnQ3Vyc29yJiYoZS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChlLmRpc3BsYXkuZHJhZ0N1cnNvciksZS5kaXNwbGF5LmRyYWdDdXJzb3I9bnVsbCl9ZnVuY3Rpb24gdG8oZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlmb3IodmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiQ29kZU1pcnJvciIpLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXS5Db2RlTWlycm9yO3ImJmUocil9fWZ1bmN0aW9uIG5vKCl7UnN8fChybygpLFJzPSEwKX1mdW5jdGlvbiBybygpe3ZhciBlO25zKHdpbmRvdywicmVzaXplIixmdW5jdGlvbigpe251bGw9PWUmJihlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPW51bGwsdG8oaW8pfSwxMDApKX0pLG5zKHdpbmRvdywiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gdG8oam4pfSl9ZnVuY3Rpb24gaW8oZSl7dmFyIHQ9ZS5kaXNwbGF5O3QubGFzdFdyYXBIZWlnaHQ9PXQud3JhcHBlci5jbGllbnRIZWlnaHQmJnQubGFzdFdyYXBXaWR0aD09dC53cmFwcGVyLmNsaWVudFdpZHRofHwodC5jYWNoZWRDaGFyV2lkdGg9dC5jYWNoZWRUZXh0SGVpZ2h0PXQuY2FjaGVkUGFkZGluZ0g9bnVsbCx0LnNjcm9sbGJhcnNDbGlwcGVkPSExLGUuc2V0U2l6ZSgpKX1mdW5jdGlvbiBvbyhlKXt2YXIgdD1lLnNwbGl0KC8tKD8hJCkvKTtlPXRbdC5sZW5ndGgtMV07Zm9yKHZhciBuLHIsaSxvLGE9MDthPHQubGVuZ3RoLTE7YSsrKXt2YXIgcz10W2FdO2lmKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3Qocykpbz0hMDtlbHNlIGlmKC9eYShsdCk/JC9pLnRlc3Qocykpbj0hMDtlbHNlIGlmKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KHMpKXI9ITA7ZWxzZXtpZighL15zKGhpZnQpPyQvaS50ZXN0KHMpKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6ICIrcyk7aT0hMH19cmV0dXJuIG4mJihlPSJBbHQtIitlKSxyJiYoZT0iQ3RybC0iK2UpLG8mJihlPSJDbWQtIitlKSxpJiYoZT0iU2hpZnQtIitlKSxlfWZ1bmN0aW9uIGFvKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciByPWVbbl07aWYoL14obmFtZXxmYWxsdGhyb3VnaHwoZGV8YXQpdGFjaCkkLy50ZXN0KG4pKWNvbnRpbnVlO2lmKCIuLi4iPT1yKXtkZWxldGUgZVtuXTtjb250aW51ZX1mb3IodmFyIGk9ZyhuLnNwbGl0KCIgIiksb28pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9dm9pZCAwLHM9dm9pZCAwO289PWkubGVuZ3RoLTE/KHM9aS5qb2luKCIgIiksYT1yKToocz1pLnNsaWNlKDAsbysxKS5qb2luKCIgIiksYT0iLi4uIik7dmFyIHU9dFtzXTtpZih1KXtpZih1IT1hKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IGJpbmRpbmdzIGZvciAiK3MpfWVsc2UgdFtzXT1hfWRlbGV0ZSBlW25dfWZvcih2YXIgYyBpbiB0KWVbY109dFtjXTtyZXR1cm4gZX1mdW5jdGlvbiBzbyhlLHQsbixyKXt0PXBvKHQpO3ZhciBpPXQuY2FsbD90LmNhbGwoZSxyKTp0W2VdO2lmKCExPT09aSlyZXR1cm4ibm90aGluZyI7aWYoIi4uLiI9PT1pKXJldHVybiJtdWx0aSI7aWYobnVsbCE9aSYmbihpKSlyZXR1cm4iaGFuZGxlZCI7aWYodC5mYWxsdGhyb3VnaCl7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuZmFsbHRocm91Z2gpKXJldHVybiBzbyhlLHQuZmFsbHRocm91Z2gsbixyKTtmb3IodmFyIG89MDtvPHQuZmFsbHRocm91Z2gubGVuZ3RoO28rKyl7dmFyIGE9c28oZSx0LmZhbGx0aHJvdWdoW29dLG4scik7aWYoYSlyZXR1cm4gYX19fWZ1bmN0aW9uIHVvKGUpe3ZhciB0PSJzdHJpbmciPT10eXBlb2YgZT9lOkJzW2Uua2V5Q29kZV07cmV0dXJuIkN0cmwiPT10fHwiQWx0Ij09dHx8IlNoaWZ0Ij09dHx8Ik1vZCI9PXR9ZnVuY3Rpb24gY28oZSx0LG4pe3ZhciByPWU7cmV0dXJuIHQuYWx0S2V5JiYiQWx0IiE9ciYmKGU9IkFsdC0iK2UpLChNYT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmIkN0cmwiIT1yJiYoZT0iQ3RybC0iK2UpLChNYT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmIkNtZCIhPXImJihlPSJDbWQtIitlKSwhbiYmdC5zaGlmdEtleSYmIlNoaWZ0IiE9ciYmKGU9IlNoaWZ0LSIrZSksZX1mdW5jdGlvbiBsbyhlLHQpe2lmKHdhJiYzND09ZS5rZXlDb2RlJiZlLmNoYXIpcmV0dXJuITE7dmFyIG49QnNbZS5rZXlDb2RlXTtyZXR1cm4gbnVsbCE9biYmIWUuYWx0R3JhcGhLZXkmJigzPT1lLmtleUNvZGUmJmUuY29kZSYmKG49ZS5jb2RlKSxjbyhuLGUsdCkpfWZ1bmN0aW9uIHBvKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9Hc1tlXTplfWZ1bmN0aW9uIGZvKGUsdCl7Zm9yKHZhciBuPWUuZG9jLnNlbC5yYW5nZXMscj1bXSxpPTA7aTxuLmxlbmd0aDtpKyspe2Zvcih2YXIgbz10KG5baV0pO3IubGVuZ3RoJiZNKG8uZnJvbSxtKHIpLnRvKTw9MDspe3ZhciBhPXIucG9wKCk7aWYoTShhLmZyb20sby5mcm9tKTwwKXtvLmZyb209YS5mcm9tO2JyZWFrfX1yLnB1c2gobyl9aHIoZSxmdW5jdGlvbigpe2Zvcih2YXIgdD1yLmxlbmd0aC0xO3Q+PTA7dC0tKWppKGUuZG9jLCIiLHJbdF0uZnJvbSxyW3RdLnRvLCIrZGVsZXRlIik7UW4oZSl9KX1mdW5jdGlvbiBobyhlLHQsbil7dmFyIHI9dyhlLnRleHQsdCtuLG4pO3JldHVybiByPDB8fHI+ZS50ZXh0Lmxlbmd0aD9udWxsOnJ9ZnVuY3Rpb24gbW8oZSx0LG4pe3ZhciByPWhvKGUsdC5jaCxuKTtyZXR1cm4gbnVsbD09cj9udWxsOm5ldyBQKHQubGluZSxyLG48MD8iYWZ0ZXIiOiJiZWZvcmUiKX1mdW5jdGlvbiBnbyhlLHQsbixyLGkpe2lmKGUpe3ZhciBvPXdlKG4sdC5kb2MuZGlyZWN0aW9uKTtpZihvKXt2YXIgYSxzPWk8MD9tKG8pOm9bMF0sdT1pPDA9PSgxPT1zLmxldmVsKSxjPXU/ImFmdGVyIjoiYmVmb3JlIjtpZihzLmxldmVsPjB8fCJydGwiPT10LmRvYy5kaXJlY3Rpb24pe3ZhciBsPVF0KHQsbik7YT1pPDA/bi50ZXh0Lmxlbmd0aC0xOjA7dmFyIHA9S3QodCxsLGEpLnRvcDthPVMoZnVuY3Rpb24oZSl7cmV0dXJuIEt0KHQsbCxlKS50b3A9PXB9LGk8MD09KDE9PXMubGV2ZWwpP3MuZnJvbTpzLnRvLTEsYSksImJlZm9yZSI9PWMmJihhPWhvKG4sYSwxKSl9ZWxzZSBhPWk8MD9zLnRvOnMuZnJvbTtyZXR1cm4gbmV3IFAocixhLGMpfX1yZXR1cm4gbmV3IFAocixpPDA/bi50ZXh0Lmxlbmd0aDowLGk8MD8iYmVmb3JlIjoiYWZ0ZXIiKX1mdW5jdGlvbiB5byhlLHQsbixyKXt2YXIgaT13ZSh0LGUuZG9jLmRpcmVjdGlvbik7aWYoIWkpcmV0dXJuIG1vKHQsbixyKTtuLmNoPj10LnRleHQubGVuZ3RoPyhuLmNoPXQudGV4dC5sZW5ndGgsbi5zdGlja3k9ImJlZm9yZSIpOm4uY2g8PTAmJihuLmNoPTAsbi5zdGlja3k9ImFmdGVyIik7dmFyIG89RGUoaSxuLmNoLG4uc3RpY2t5KSxhPWlbb107aWYoImx0ciI9PWUuZG9jLmRpcmVjdGlvbiYmYS5sZXZlbCUyPT0wJiYocj4wP2EudG8+bi5jaDphLmZyb208bi5jaCkpcmV0dXJuIG1vKHQsbixyKTt2YXIgcyx1PWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhvKHQsZSBpbnN0YW5jZW9mIFA/ZS5jaDplLG4pfSxjPWZ1bmN0aW9uKG4pe3JldHVybiBlLm9wdGlvbnMubGluZVdyYXBwaW5nPyhzPXN8fFF0KGUsdCksbW4oZSx0LHMsbikpOntiZWdpbjowLGVuZDp0LnRleHQubGVuZ3RofX0sbD1jKCJiZWZvcmUiPT1uLnN0aWNreT91KG4sLTEpOm4uY2gpO2lmKCJydGwiPT1lLmRvYy5kaXJlY3Rpb258fDE9PWEubGV2ZWwpe3ZhciBwPTE9PWEubGV2ZWw9PXI8MCxmPXUobixwPzE6LTEpO2lmKG51bGwhPWYmJihwP2Y8PWEudG8mJmY8PWwuZW5kOmY+PWEuZnJvbSYmZj49bC5iZWdpbikpe3ZhciBkPXA/ImJlZm9yZSI6ImFmdGVyIjtyZXR1cm4gbmV3IFAobi5saW5lLGYsZCl9fXZhciBoPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9uZXcgUChuLmxpbmUsdShlLDEpLCJiZWZvcmUiKTpuZXcgUChuLmxpbmUsZSwiYWZ0ZXIiKX07ZT49MCYmZTxpLmxlbmd0aDtlKz10KXt2YXIgYT1pW2VdLHM9dD4wPT0oMSE9YS5sZXZlbCksYz1zP3IuYmVnaW46dShyLmVuZCwtMSk7aWYoYS5mcm9tPD1jJiZjPGEudG8pcmV0dXJuIG8oYyxzKTtpZihjPXM/YS5mcm9tOnUoYS50bywtMSksci5iZWdpbjw9YyYmYzxyLmVuZClyZXR1cm4gbyhjLHMpfX0sbT1oKG8rcixyLGwpO2lmKG0pcmV0dXJuIG07dmFyIGc9cj4wP2wuZW5kOnUobC5iZWdpbiwtMSk7cmV0dXJuIG51bGw9PWd8fHI+MCYmZz09dC50ZXh0Lmxlbmd0aHx8IShtPWgocj4wPzA6aS5sZW5ndGgtMSxyLGMoZykpKT9udWxsOm19ZnVuY3Rpb24gdm8oZSx0KXt2YXIgbj1BKGUuZG9jLHQpLHI9ZmUobik7cmV0dXJuIHIhPW4mJih0PUYocikpLGdvKCEwLGUscix0LDEpfWZ1bmN0aW9uIGJvKGUsdCl7dmFyIG49QShlLmRvYyx0KSxyPWRlKG4pO3JldHVybiByIT1uJiYodD1GKHIpKSxnbyghMCxlLG4sdCwtMSl9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj12byhlLHQubGluZSkscj1BKGUuZG9jLG4ubGluZSksaT13ZShyLGUuZG9jLmRpcmVjdGlvbik7aWYoIWl8fDA9PWlbMF0ubGV2ZWwpe3ZhciBvPU1hdGgubWF4KDAsci50ZXh0LnNlYXJjaCgvXFMvKSksYT10LmxpbmU9PW4ubGluZSYmdC5jaDw9byYmdC5jaDtyZXR1cm4gUChuLmxpbmUsYT8wOm8sbi5zdGlja3kpfXJldHVybiBufWZ1bmN0aW9uIENvKGUsdCxuKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJiEodD1Wc1t0XSkpcmV0dXJuITE7ZS5kaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO3ZhciByPWUuZGlzcGxheS5zaGlmdCxpPSExO3RyeXtlLmlzUmVhZE9ubHkoKSYmKGUuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCksbiYmKGUuZGlzcGxheS5zaGlmdD0hMSksaT10KGUpIT1WYX1maW5hbGx5e2UuZGlzcGxheS5zaGlmdD1yLGUuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gaX1mdW5jdGlvbiBFbyhlLHQsbil7Zm9yKHZhciByPTA7cjxlLnN0YXRlLmtleU1hcHMubGVuZ3RoO3IrKyl7dmFyIGk9c28odCxlLnN0YXRlLmtleU1hcHNbcl0sbixlKTtpZihpKXJldHVybiBpfXJldHVybiBlLm9wdGlvbnMuZXh0cmFLZXlzJiZzbyh0LGUub3B0aW9ucy5leHRyYUtleXMsbixlKXx8c28odCxlLm9wdGlvbnMua2V5TWFwLG4sZSl9ZnVuY3Rpb24gRG8oZSx0LG4scil7dmFyIGk9ZS5zdGF0ZS5rZXlTZXE7aWYoaSl7aWYodW8odCkpcmV0dXJuImhhbmRsZWQiO2lmKC9cJyQvLnRlc3QodCk/ZS5zdGF0ZS5rZXlTZXE9bnVsbDpxcy5zZXQoNTAsZnVuY3Rpb24oKXtlLnN0YXRlLmtleVNlcT09aSYmKGUuc3RhdGUua2V5U2VxPW51bGwsZS5kaXNwbGF5LmlucHV0LnJlc2V0KCkpfSksd28oZSxpKyIgIit0LG4scikpcmV0dXJuITB9cmV0dXJuIHdvKGUsdCxuLHIpfWZ1bmN0aW9uIHdvKGUsdCxuLHIpe3ZhciBpPUVvKGUsdCxyKTtyZXR1cm4ibXVsdGkiPT1pJiYoZS5zdGF0ZS5rZXlTZXE9dCksImhhbmRsZWQiPT1pJiZDdChlLCJrZXlIYW5kbGVkIixlLHQsbiksImhhbmRsZWQiIT1pJiYibXVsdGkiIT1pfHwoTmUobiksSW4oZSkpLCEhaX1mdW5jdGlvbiBTbyhlLHQpe3ZhciBuPWxvKHQsITApO3JldHVybiEhbiYmKHQuc2hpZnRLZXkmJiFlLnN0YXRlLmtleVNlcT9EbyhlLCJTaGlmdC0iK24sdCxmdW5jdGlvbih0KXtyZXR1cm4gQ28oZSx0LCEwKX0pfHxEbyhlLG4sdCxmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQ/L15nb1tBLVpdLy50ZXN0KHQpOnQubW90aW9uKXJldHVybiBDbyhlLHQpfSk6RG8oZSxuLHQsZnVuY3Rpb24odCl7cmV0dXJuIENvKGUsdCl9KSl9ZnVuY3Rpb24ga28oZSx0LG4pe3JldHVybiBEbyhlLCInIituKyInIix0LGZ1bmN0aW9uKHQpe3JldHVybiBDbyhlLHQsITApfSl9ZnVuY3Rpb24gQW8oZSl7dmFyIHQ9dGhpcztpZih0LmN1ck9wLmZvY3VzPWEoKSwhX2UodCxlKSl7YmEmJnhhPDExJiYyNz09ZS5rZXlDb2RlJiYoZS5yZXR1cm5WYWx1ZT0hMSk7dmFyIG49ZS5rZXlDb2RlO3QuZGlzcGxheS5zaGlmdD0xNj09bnx8ZS5zaGlmdEtleTt2YXIgcj1Tbyh0LGUpO3dhJiYoSHM9cj9uOm51bGwsIXImJjg4PT1uJiYhYXMmJihGYT9lLm1ldGFLZXk6ZS5jdHJsS2V5KSYmdC5yZXBsYWNlU2VsZWN0aW9uKCIiLG51bGwsImN1dCIpKSwxOCE9bnx8L1xiQ29kZU1pcnJvci1jcm9zc2hhaXJcYi8udGVzdCh0LmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUpfHxfbyh0KX19ZnVuY3Rpb24gX28oZSl7ZnVuY3Rpb24gdChlKXsxOCE9ZS5rZXlDb2RlJiZlLmFsdEtleXx8KFJhKG4sIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIiksa2UoZG9jdW1lbnQsImtleXVwIix0KSxrZShkb2N1bWVudCwibW91c2VvdmVyIix0KSl9dmFyIG49ZS5kaXNwbGF5LmxpbmVEaXY7cyhuLCJDb2RlTWlycm9yLWNyb3NzaGFpciIpLG5zKGRvY3VtZW50LCJrZXl1cCIsdCksbnMoZG9jdW1lbnQsIm1vdXNlb3ZlciIsdCl9ZnVuY3Rpb24gVG8oZSl7MTY9PWUua2V5Q29kZSYmKHRoaXMuZG9jLnNlbC5zaGlmdD0hMSksX2UodGhpcyxlKX1mdW5jdGlvbiBPbyhlKXt2YXIgdD10aGlzO2lmKCEoTXQodC5kaXNwbGF5LGUpfHxfZSh0LGUpfHxlLmN0cmxLZXkmJiFlLmFsdEtleXx8RmEmJmUubWV0YUtleSkpe3ZhciBuPWUua2V5Q29kZSxyPWUuY2hhckNvZGU7aWYod2EmJm49PUhzKXJldHVybiBIcz1udWxsLHZvaWQgTmUoZSk7aWYoIXdhfHxlLndoaWNoJiYhKGUud2hpY2g8MTApfHwhU28odCxlKSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1yP246cik7IlxiIiE9aSYmKGtvKHQsZSxpKXx8dC5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoZSkpfX19ZnVuY3Rpb24gRm8oZSx0KXt2YXIgbj0rbmV3IERhdGU7cmV0dXJuIEtzJiZLcy5jb21wYXJlKG4sZSx0KT8oUXM9S3M9bnVsbCwidHJpcGxlIik6UXMmJlFzLmNvbXBhcmUobixlLHQpPyhLcz1uZXcgV3MobixlLHQpLFFzPW51bGwsImRvdWJsZSIpOihRcz1uZXcgV3MobixlLHQpLEtzPW51bGwsInNpbmdsZSIpfWZ1bmN0aW9uIE5vKGUpe3ZhciB0PXRoaXMsbj10LmRpc3BsYXk7aWYoIShfZSh0LGUpfHxuLmFjdGl2ZVRvdWNoJiZuLmlucHV0LnN1cHBvcnRzVG91Y2goKSkpe2lmKG4uaW5wdXQuZW5zdXJlUG9sbGVkKCksbi5zaGlmdD1lLnNoaWZ0S2V5LE10KG4sZSkpcmV0dXJuIHZvaWQoQ2F8fChuLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSk7aWYoIVVvKHQsZSkpe3ZhciByPWtuKHQsZSksaT1qZShlKSxvPXI/Rm8ocixpKToic2luZ2xlIjt3aW5kb3cuZm9jdXMoKSwxPT1pJiZ0LnN0YXRlLnNlbGVjdGluZ1RleHQmJnQuc3RhdGUuc2VsZWN0aW5nVGV4dChlKSxyJiZJbyh0LGkscixvLGUpfHwoMT09aT9yP1BvKHQscixvLGUpOk1lKGUpPT1uLnNjcm9sbGVyJiZOZShlKToyPT1pPyhyJiZtaSh0LmRvYyxyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uaW5wdXQuZm9jdXMoKX0sMjApKTozPT1pJiYoamE/em8odCxlKTpQbih0KSkpfX19ZnVuY3Rpb24gSW8oZSx0LG4scixpKXt2YXIgbz0iQ2xpY2siO3JldHVybiJkb3VibGUiPT1yP289IkRvdWJsZSIrbzoidHJpcGxlIj09ciYmKG89IlRyaXBsZSIrbyksbz0oMT09dD8iTGVmdCI6Mj09dD8iTWlkZGxlIjoiUmlnaHQiKStvLERvKGUsY28obyxpKSxpLGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9VnNbdF0pLCF0KXJldHVybiExO3ZhciByPSExO3RyeXtlLmlzUmVhZE9ubHkoKSYmKGUuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCkscj10KGUsbikhPVZhfWZpbmFsbHl7ZS5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiByfSl9ZnVuY3Rpb24gTG8oZSx0LG4pe3ZhciByPWUuZ2V0T3B0aW9uKCJjb25maWd1cmVNb3VzZSIpLGk9cj9yKGUsdCxuKTp7fTtpZihudWxsPT1pLnVuaXQpe3ZhciBvPU5hP24uc2hpZnRLZXkmJm4ubWV0YUtleTpuLmFsdEtleTtpLnVuaXQ9bz8icmVjdGFuZ2xlIjoic2luZ2xlIj09dD8iY2hhciI6ImRvdWJsZSI9PXQ/IndvcmQiOiJsaW5lIn1yZXR1cm4obnVsbD09aS5leHRlbmR8fGUuZG9jLmV4dGVuZCkmJihpLmV4dGVuZD1lLmRvYy5leHRlbmR8fG4uc2hpZnRLZXkpLG51bGw9PWkuYWRkTmV3JiYoaS5hZGROZXc9RmE/bi5tZXRhS2V5Om4uY3RybEtleSksbnVsbD09aS5tb3ZlT25EcmFnJiYoaS5tb3ZlT25EcmFnPSEoRmE/bi5hbHRLZXk6bi5jdHJsS2V5KSksaX1mdW5jdGlvbiBQbyhlLHQsbixyKXtiYT9zZXRUaW1lb3V0KGMoTG4sZSksMCk6ZS5jdXJPcC5mb2N1cz1hKCk7dmFyIGksbz1MbyhlLG4scikscz1lLmRvYy5zZWw7ZS5vcHRpb25zLmRyYWdEcm9wJiZycyYmIWUuaXNSZWFkT25seSgpJiYic2luZ2xlIj09biYmKGk9cy5jb250YWlucyh0KSk+LTEmJihNKChpPXMucmFuZ2VzW2ldKS5mcm9tKCksdCk8MHx8dC54UmVsPjApJiYoTShpLnRvKCksdCk+MHx8dC54UmVsPDApP01vKGUscix0LG8pOlJvKGUscix0LG8pfWZ1bmN0aW9uIE1vKGUsdCxuLHIpe3ZhciBpPWUuZGlzcGxheSxvPSExLGE9bXIoZSxmdW5jdGlvbih0KXtDYSYmKGkuc2Nyb2xsZXIuZHJhZ2dhYmxlPSExKSxlLnN0YXRlLmRyYWdnaW5nVGV4dD0hMSxrZShpLndyYXBwZXIub3duZXJEb2N1bWVudCwibW91c2V1cCIsYSksa2UoaS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNlbW92ZSIscyksa2UoaS5zY3JvbGxlciwiZHJhZ3N0YXJ0Iix1KSxrZShpLnNjcm9sbGVyLCJkcm9wIixhKSxvfHwoTmUodCksci5hZGROZXd8fG1pKGUuZG9jLG4sbnVsbCxudWxsLHIuZXh0ZW5kKSxDYXx8YmEmJjk9PXhhP3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLndyYXBwZXIub3duZXJEb2N1bWVudC5ib2R5LmZvY3VzKCksaS5pbnB1dC5mb2N1cygpfSwyMCk6aS5pbnB1dC5mb2N1cygpKX0pLHM9ZnVuY3Rpb24oZSl7bz1vfHxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKT49MTB9LHU9ZnVuY3Rpb24oKXtyZXR1cm4gbz0hMH07Q2EmJihpLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksZS5zdGF0ZS5kcmFnZ2luZ1RleHQ9YSxhLmNvcHk9IXIubW92ZU9uRHJhZyxpLnNjcm9sbGVyLmRyYWdEcm9wJiZpLnNjcm9sbGVyLmRyYWdEcm9wKCksbnMoaS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNldXAiLGEpLG5zKGkud3JhcHBlci5vd25lckRvY3VtZW50LCJtb3VzZW1vdmUiLHMpLG5zKGkuc2Nyb2xsZXIsImRyYWdzdGFydCIsdSksbnMoaS5zY3JvbGxlciwiZHJvcCIsYSksUG4oZSksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBpLmlucHV0LmZvY3VzKCl9LDIwKX1mdW5jdGlvbiBqbyhlLHQsbil7aWYoImNoYXIiPT1uKXJldHVybiBuZXcgT3ModCx0KTtpZigid29yZCI9PW4pcmV0dXJuIGUuZmluZFdvcmRBdCh0KTtpZigibGluZSI9PW4pcmV0dXJuIG5ldyBPcyhQKHQubGluZSwwKSx6KGUuZG9jLFAodC5saW5lKzEsMCkpKTt2YXIgcj1uKGUsdCk7cmV0dXJuIG5ldyBPcyhyLmZyb20sci50byl9ZnVuY3Rpb24gUm8oZSx0LG4scil7ZnVuY3Rpb24gaSh0KXtpZigwIT1NKHksdCkpaWYoeT10LCJyZWN0YW5nbGUiPT1yLnVuaXQpe2Zvcih2YXIgaT1bXSxvPWUub3B0aW9ucy50YWJTaXplLGE9cChBKGMsbi5saW5lKS50ZXh0LG4uY2gsbykscz1wKEEoYyx0LmxpbmUpLnRleHQsdC5jaCxvKSx1PU1hdGgubWluKGEscyksbT1NYXRoLm1heChhLHMpLGc9TWF0aC5taW4obi5saW5lLHQubGluZSksdj1NYXRoLm1pbihlLmxhc3RMaW5lKCksTWF0aC5tYXgobi5saW5lLHQubGluZSkpO2c8PXY7ZysrKXt2YXIgYj1BKGMsZykudGV4dCx4PWQoYix1LG8pO3U9PW0/aS5wdXNoKG5ldyBPcyhQKGcseCksUChnLHgpKSk6Yi5sZW5ndGg+eCYmaS5wdXNoKG5ldyBPcyhQKGcseCksUChnLGQoYixtLG8pKSkpfWkubGVuZ3RofHxpLnB1c2gobmV3IE9zKG4sbikpLENpKGMsJHIoaC5yYW5nZXMuc2xpY2UoMCxmKS5jb25jYXQoaSksZikse29yaWdpbjoiKm1vdXNlIixzY3JvbGw6ITF9KSxlLnNjcm9sbEludG9WaWV3KHQpfWVsc2V7dmFyIEMsRT1sLEQ9am8oZSx0LHIudW5pdCksdz1FLmFuY2hvcjtNKEQuYW5jaG9yLHcpPjA/KEM9RC5oZWFkLHc9JChFLmZyb20oKSxELmFuY2hvcikpOihDPUQuYW5jaG9yLHc9QihFLnRvKCksRC5oZWFkKSk7dmFyIFM9aC5yYW5nZXMuc2xpY2UoMCk7U1tmXT1CbyhlLG5ldyBPcyh6KGMsdyksQykpLENpKGMsJHIoUyxmKSxIYSl9fWZ1bmN0aW9uIG8odCl7dmFyIG49KytiLHM9a24oZSx0LCEwLCJyZWN0YW5nbGUiPT1yLnVuaXQpO2lmKHMpaWYoMCE9TShzLHkpKXtlLmN1ck9wLmZvY3VzPWEoKSxpKHMpO3ZhciBsPSRuKHUsYyk7KHMubGluZT49bC50b3x8cy5saW5lPGwuZnJvbSkmJnNldFRpbWVvdXQobXIoZSxmdW5jdGlvbigpe2I9PW4mJm8odCl9KSwxNTApfWVsc2V7dmFyIHA9dC5jbGllbnRZPHYudG9wPy0yMDp0LmNsaWVudFk+di5ib3R0b20/MjA6MDtwJiZzZXRUaW1lb3V0KG1yKGUsZnVuY3Rpb24oKXtiPT1uJiYodS5zY3JvbGxlci5zY3JvbGxUb3ArPXAsbyh0KSl9KSw1MCl9fWZ1bmN0aW9uIHModCl7ZS5zdGF0ZS5zZWxlY3RpbmdUZXh0PSExLGI9MS8wLE5lKHQpLHUuaW5wdXQuZm9jdXMoKSxrZSh1LndyYXBwZXIub3duZXJEb2N1bWVudCwibW91c2Vtb3ZlIix4KSxrZSh1LndyYXBwZXIub3duZXJEb2N1bWVudCwibW91c2V1cCIsQyksYy5oaXN0b3J5Lmxhc3RTZWxPcmlnaW49bnVsbH12YXIgdT1lLmRpc3BsYXksYz1lLmRvYztOZSh0KTt2YXIgbCxmLGg9Yy5zZWwsbT1oLnJhbmdlcztpZihyLmFkZE5ldyYmIXIuZXh0ZW5kPyhmPWMuc2VsLmNvbnRhaW5zKG4pLGw9Zj4tMT9tW2ZdOm5ldyBPcyhuLG4pKToobD1jLnNlbC5wcmltYXJ5KCksZj1jLnNlbC5wcmltSW5kZXgpLCJyZWN0YW5nbGUiPT1yLnVuaXQpci5hZGROZXd8fChsPW5ldyBPcyhuLG4pKSxuPWtuKGUsdCwhMCwhMCksZj0tMTtlbHNle3ZhciBnPWpvKGUsbixyLnVuaXQpO2w9ci5leHRlbmQ/aGkobCxnLmFuY2hvcixnLmhlYWQsci5leHRlbmQpOmd9ci5hZGROZXc/LTE9PWY/KGY9bS5sZW5ndGgsQ2koYywkcihtLmNvbmNhdChbbF0pLGYpLHtzY3JvbGw6ITEsb3JpZ2luOiIqbW91c2UifSkpOm0ubGVuZ3RoPjEmJm1bZl0uZW1wdHkoKSYmImNoYXIiPT1yLnVuaXQmJiFyLmV4dGVuZD8oQ2koYywkcihtLnNsaWNlKDAsZikuY29uY2F0KG0uc2xpY2UoZisxKSksMCkse3Njcm9sbDohMSxvcmlnaW46Iiptb3VzZSJ9KSxoPWMuc2VsKTp5aShjLGYsbCxIYSk6KGY9MCxDaShjLG5ldyBUcyhbbF0sMCksSGEpLGg9Yy5zZWwpO3ZhciB5PW4sdj11LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYj0wLHg9bXIoZSxmdW5jdGlvbihlKXswIT09ZS5idXR0b25zJiZqZShlKT9vKGUpOnMoZSl9KSxDPW1yKGUscyk7ZS5zdGF0ZS5zZWxlY3RpbmdUZXh0PUMsbnModS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNlbW92ZSIseCksbnModS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNldXAiLEMpfWZ1bmN0aW9uIEJvKGUsdCl7dmFyIG49dC5hbmNob3Iscj10LmhlYWQsaT1BKGUuZG9jLG4ubGluZSk7aWYoMD09TShuLHIpJiZuLnN0aWNreT09ci5zdGlja3kpcmV0dXJuIHQ7dmFyIG89d2UoaSk7aWYoIW8pcmV0dXJuIHQ7dmFyIGE9RGUobyxuLmNoLG4uc3RpY2t5KSxzPW9bYV07aWYocy5mcm9tIT1uLmNoJiZzLnRvIT1uLmNoKXJldHVybiB0O3ZhciB1PWErKHMuZnJvbT09bi5jaD09KDEhPXMubGV2ZWwpPzA6MSk7aWYoMD09dXx8dT09by5sZW5ndGgpcmV0dXJuIHQ7dmFyIGM7aWYoci5saW5lIT1uLmxpbmUpYz0oci5saW5lLW4ubGluZSkqKCJsdHIiPT1lLmRvYy5kaXJlY3Rpb24/MTotMSk+MDtlbHNle3ZhciBsPURlKG8sci5jaCxyLnN0aWNreSkscD1sLWF8fChyLmNoLW4uY2gpKigxPT1zLmxldmVsPy0xOjEpO2M9bD09dS0xfHxsPT11P3A8MDpwPjB9dmFyIGY9b1t1KyhjPy0xOjApXSxkPWM9PSgxPT1mLmxldmVsKSxoPWQ/Zi5mcm9tOmYudG8sbT1kPyJhZnRlciI6ImJlZm9yZSI7cmV0dXJuIG4uY2g9PWgmJm4uc3RpY2t5PT1tP3Q6bmV3IE9zKG5ldyBQKG4ubGluZSxoLG0pLHIpfWZ1bmN0aW9uICRvKGUsdCxuLHIpe3ZhciBpLG87aWYodC50b3VjaGVzKWk9dC50b3VjaGVzWzBdLmNsaWVudFgsbz10LnRvdWNoZXNbMF0uY2xpZW50WTtlbHNlIHRyeXtpPXQuY2xpZW50WCxvPXQuY2xpZW50WX1jYXRjaCh0KXtyZXR1cm4hMX1pZihpPj1NYXRoLmZsb29yKGUuZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSlyZXR1cm4hMTtyJiZOZSh0KTt2YXIgYT1lLmRpc3BsYXkscz1hLmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYobz5zLmJvdHRvbXx8IU9lKGUsbikpcmV0dXJuIExlKHQpO28tPXMudG9wLWEudmlld09mZnNldDtmb3IodmFyIHU9MDt1PGUub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsrK3Upe3ZhciBjPWEuZ3V0dGVycy5jaGlsZE5vZGVzW3VdO2lmKGMmJmMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ+PWkpe3JldHVybiBBZShlLG4sZSxOKGUuZG9jLG8pLGUub3B0aW9ucy5ndXR0ZXJzW3VdLHQpLExlKHQpfX19ZnVuY3Rpb24gVW8oZSx0KXtyZXR1cm4gJG8oZSx0LCJndXR0ZXJDbGljayIsITApfWZ1bmN0aW9uIHpvKGUsdCl7TXQoZS5kaXNwbGF5LHQpfHxHbyhlLHQpfHxfZShlLHQsImNvbnRleHRtZW51Iil8fGUuZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KHQpfWZ1bmN0aW9uIEdvKGUsdCl7cmV0dXJuISFPZShlLCJndXR0ZXJDb250ZXh0TWVudSIpJiYkbyhlLHQsImd1dHRlckNvbnRleHRNZW51IiwhMSl9ZnVuY3Rpb24gVm8oZSl7ZS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPWUuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKStlLm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLG5uKGUpfWZ1bmN0aW9uIHFvKGUpe1ByKGUpLHZyKGUpLFVuKGUpfWZ1bmN0aW9uIEhvKGUsdCxuKXtpZighdCE9IShuJiZuIT1Kcykpe3ZhciByPWUuZGlzcGxheS5kcmFnRnVuY3Rpb25zLGk9dD9uczprZTtpKGUuZGlzcGxheS5zY3JvbGxlciwiZHJhZ3N0YXJ0IixyLnN0YXJ0KSxpKGUuZGlzcGxheS5zY3JvbGxlciwiZHJhZ2VudGVyIixyLmVudGVyKSxpKGUuZGlzcGxheS5zY3JvbGxlciwiZHJhZ292ZXIiLHIub3ZlciksaShlLmRpc3BsYXkuc2Nyb2xsZXIsImRyYWdsZWF2ZSIsci5sZWF2ZSksaShlLmRpc3BsYXkuc2Nyb2xsZXIsImRyb3AiLHIuZHJvcCl9fWZ1bmN0aW9uIFdvKGUpe2Uub3B0aW9ucy5saW5lV3JhcHBpbmc/KHMoZS5kaXNwbGF5LndyYXBwZXIsIkNvZGVNaXJyb3Itd3JhcCIpLGUuZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aD0iIixlLmRpc3BsYXkuc2l6ZXJXaWR0aD1udWxsKTooUmEoZS5kaXNwbGF5LndyYXBwZXIsIkNvZGVNaXJyb3Itd3JhcCIpLENlKGUpKSxTbihlKSx2cihlKSxubihlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHJyKGUpfSwxMDApfWZ1bmN0aW9uIFFvKGUsdCl7dmFyIG49dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiBRbykpcmV0dXJuIG5ldyBRbyhlLHQpO3RoaXMub3B0aW9ucz10PXQ/bCh0KTp7fSxsKFlzLHQsITEpLE1yKHQpO3ZhciByPXQudmFsdWU7InN0cmluZyI9PXR5cGVvZiByJiYocj1uZXcgTXMocix0Lm1vZGUsbnVsbCx0LmxpbmVTZXBhcmF0b3IsdC5kaXJlY3Rpb24pKSx0aGlzLmRvYz1yO3ZhciBpPW5ldyBRby5pbnB1dFN0eWxlc1t0LmlucHV0U3R5bGVdKHRoaXMpLG89dGhpcy5kaXNwbGF5PW5ldyBrKGUscixpKTtvLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLFByKHRoaXMpLFZvKHRoaXMpLHQubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpLG9yKHRoaXMpLHRoaXMuc3RhdGU9e2tleU1hcHM6W10sb3ZlcmxheXM6W10sbW9kZUdlbjowLG92ZXJ3cml0ZTohMSxkZWxheWluZ0JsdXJFdmVudDohMSxmb2N1c2VkOiExLHN1cHByZXNzRWRpdHM6ITEscGFzdGVJbmNvbWluZzohMSxjdXRJbmNvbWluZzohMSxzZWxlY3RpbmdUZXh0OiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRhLGtleVNlcTpudWxsLHNwZWNpYWxDaGFyczpudWxsfSx0LmF1dG9mb2N1cyYmIU9hJiZvLmlucHV0LmZvY3VzKCksYmEmJnhhPDExJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGlzcGxheS5pbnB1dC5yZXNldCghMCl9LDIwKSxLbyh0aGlzKSxubygpLGFyKHRoaXMpLHRoaXMuY3VyT3AuZm9yY2VVcGRhdGU9ITAsWHIodGhpcyxyKSx0LmF1dG9mb2N1cyYmIU9hfHx0aGlzLmhhc0ZvY3VzKCk/c2V0VGltZW91dChjKE1uLHRoaXMpLDIwKTpqbih0aGlzKTtmb3IodmFyIGEgaW4gWHMpWHMuaGFzT3duUHJvcGVydHkoYSkmJlhzW2FdKG4sdFthXSxKcyk7em4odGhpcyksdC5maW5pc2hJbml0JiZ0LmZpbmlzaEluaXQodGhpcyk7Zm9yKHZhciBzPTA7czxacy5sZW5ndGg7KytzKVpzW3NdKG4pO3NyKHRoaXMpLENhJiZ0LmxpbmVXcmFwcGluZyYmIm9wdGltaXplbGVnaWJpbGl0eSI9PWdldENvbXB1dGVkU3R5bGUoby5saW5lRGl2KS50ZXh0UmVuZGVyaW5nJiYoby5saW5lRGl2LnN0eWxlLnRleHRSZW5kZXJpbmc9ImF1dG8iKX1mdW5jdGlvbiBLbyhlKXtmdW5jdGlvbiB0KCl7aS5hY3RpdmVUb3VjaCYmKG89c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBpLmFjdGl2ZVRvdWNoPW51bGx9LDFlMyksYT1pLmFjdGl2ZVRvdWNoLGEuZW5kPStuZXcgRGF0ZSl9ZnVuY3Rpb24gbihlKXtpZigxIT1lLnRvdWNoZXMubGVuZ3RoKXJldHVybiExO3ZhciB0PWUudG91Y2hlc1swXTtyZXR1cm4gdC5yYWRpdXNYPD0xJiZ0LnJhZGl1c1k8PTF9ZnVuY3Rpb24gcihlLHQpe2lmKG51bGw9PXQubGVmdClyZXR1cm4hMDt2YXIgbj10LmxlZnQtZS5sZWZ0LHI9dC50b3AtZS50b3A7cmV0dXJuIG4qbityKnI+NDAwfXZhciBpPWUuZGlzcGxheTtucyhpLnNjcm9sbGVyLCJtb3VzZWRvd24iLG1yKGUsTm8pKSxiYSYmeGE8MTE/bnMoaS5zY3JvbGxlciwiZGJsY2xpY2siLG1yKGUsZnVuY3Rpb24odCl7aWYoIV9lKGUsdCkpe3ZhciBuPWtuKGUsdCk7aWYobiYmIVVvKGUsdCkmJiFNdChlLmRpc3BsYXksdCkpe05lKHQpO3ZhciByPWUuZmluZFdvcmRBdChuKTttaShlLmRvYyxyLmFuY2hvcixyLmhlYWQpfX19KSk6bnMoaS5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKHQpe3JldHVybiBfZShlLHQpfHxOZSh0KX0pLGphfHxucyhpLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHpvKGUsdCl9KTt2YXIgbyxhPXtlbmQ6MH07bnMoaS5zY3JvbGxlciwidG91Y2hzdGFydCIsZnVuY3Rpb24odCl7aWYoIV9lKGUsdCkmJiFuKHQpJiYhVW8oZSx0KSl7aS5pbnB1dC5lbnN1cmVQb2xsZWQoKSxjbGVhclRpbWVvdXQobyk7dmFyIHI9K25ldyBEYXRlO2kuYWN0aXZlVG91Y2g9e3N0YXJ0OnIsbW92ZWQ6ITEscHJldjpyLWEuZW5kPD0zMDA/YTpudWxsfSwxPT10LnRvdWNoZXMubGVuZ3RoJiYoaS5hY3RpdmVUb3VjaC5sZWZ0PXQudG91Y2hlc1swXS5wYWdlWCxpLmFjdGl2ZVRvdWNoLnRvcD10LnRvdWNoZXNbMF0ucGFnZVkpfX0pLG5zKGkuc2Nyb2xsZXIsInRvdWNobW92ZSIsZnVuY3Rpb24oKXtpLmFjdGl2ZVRvdWNoJiYoaS5hY3RpdmVUb3VjaC5tb3ZlZD0hMCl9KSxucyhpLnNjcm9sbGVyLCJ0b3VjaGVuZCIsZnVuY3Rpb24obil7dmFyIG89aS5hY3RpdmVUb3VjaDtpZihvJiYhTXQoaSxuKSYmbnVsbCE9by5sZWZ0JiYhby5tb3ZlZCYmbmV3IERhdGUtby5zdGFydDwzMDApe3ZhciBhLHM9ZS5jb29yZHNDaGFyKGkuYWN0aXZlVG91Y2gsInBhZ2UiKTthPSFvLnByZXZ8fHIobyxvLnByZXYpP25ldyBPcyhzLHMpOiFvLnByZXYucHJldnx8cihvLG8ucHJldi5wcmV2KT9lLmZpbmRXb3JkQXQocyk6bmV3IE9zKFAocy5saW5lLDApLHooZS5kb2MsUChzLmxpbmUrMSwwKSkpLGUuc2V0U2VsZWN0aW9uKGEuYW5jaG9yLGEuaGVhZCksZS5mb2N1cygpLE5lKG4pfXQoKX0pLG5zKGkuc2Nyb2xsZXIsInRvdWNoY2FuY2VsIix0KSxucyhpLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7aS5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihabihlLGkuc2Nyb2xsZXIuc2Nyb2xsVG9wKSx0cihlLGkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksQWUoZSwic2Nyb2xsIixlKSl9KSxucyhpLnNjcm9sbGVyLCJtb3VzZXdoZWVsIixmdW5jdGlvbih0KXtyZXR1cm4gQnIoZSx0KX0pLG5zKGkuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbih0KXtyZXR1cm4gQnIoZSx0KX0pLG5zKGkud3JhcHBlciwic2Nyb2xsIixmdW5jdGlvbigpe3JldHVybiBpLndyYXBwZXIuc2Nyb2xsVG9wPWkud3JhcHBlci5zY3JvbGxMZWZ0PTB9KSxpLmRyYWdGdW5jdGlvbnM9e2VudGVyOmZ1bmN0aW9uKHQpe19lKGUsdCl8fFBlKHQpfSxvdmVyOmZ1bmN0aW9uKHQpe19lKGUsdCl8fChaaShlLHQpLFBlKHQpKX0sc3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIFhpKGUsdCl9LGRyb3A6bXIoZSxZaSksbGVhdmU6ZnVuY3Rpb24odCl7X2UoZSx0KXx8ZW8oZSl9fTt2YXIgcz1pLmlucHV0LmdldEZpZWxkKCk7bnMocywia2V5dXAiLGZ1bmN0aW9uKHQpe3JldHVybiBUby5jYWxsKGUsdCl9KSxucyhzLCJrZXlkb3duIixtcihlLEFvKSksbnMocywia2V5cHJlc3MiLG1yKGUsT28pKSxucyhzLCJmb2N1cyIsZnVuY3Rpb24odCl7cmV0dXJuIE1uKGUsdCl9KSxucyhzLCJibHVyIixmdW5jdGlvbih0KXtyZXR1cm4gam4oZSx0KX0pfWZ1bmN0aW9uIEpvKGUsdCxuLHIpe3ZhciBpLG89ZS5kb2M7bnVsbD09biYmKG49ImFkZCIpLCJzbWFydCI9PW4mJihvLm1vZGUuaW5kZW50P2k9WWUoZSx0KS5zdGF0ZTpuPSJwcmV2Iik7dmFyIGE9ZS5vcHRpb25zLnRhYlNpemUscz1BKG8sdCksdT1wKHMudGV4dCxudWxsLGEpO3Muc3RhdGVBZnRlciYmKHMuc3RhdGVBZnRlcj1udWxsKTt2YXIgYyxsPXMudGV4dC5tYXRjaCgvXlxzKi8pWzBdO2lmKHJ8fC9cUy8udGVzdChzLnRleHQpKXtpZigic21hcnQiPT1uJiYoKGM9by5tb2RlLmluZGVudChpLHMudGV4dC5zbGljZShsLmxlbmd0aCkscy50ZXh0KSk9PVZhfHxjPjE1MCkpe2lmKCFyKXJldHVybjtuPSJwcmV2In19ZWxzZSBjPTAsbj0ibm90IjsicHJldiI9PW4/Yz10Pm8uZmlyc3Q/cChBKG8sdC0xKS50ZXh0LG51bGwsYSk6MDoiYWRkIj09bj9jPXUrZS5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09bj9jPXUtZS5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiBuJiYoYz11K24pLGM9TWF0aC5tYXgoMCxjKTt2YXIgZj0iIixkPTA7aWYoZS5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgbT1NYXRoLmZsb29yKGMvYSk7bTstLW0pZCs9YSxmKz0iXHQiO2lmKGQ8YyYmKGYrPWgoYy1kKSksZiE9bClyZXR1cm4gamkobyxmLFAodCwwKSxQKHQsbC5sZW5ndGgpLCIraW5wdXQiKSxzLnN0YXRlQWZ0ZXI9bnVsbCwhMDtmb3IodmFyIGc9MDtnPG8uc2VsLnJhbmdlcy5sZW5ndGg7ZysrKXt2YXIgeT1vLnNlbC5yYW5nZXNbZ107aWYoeS5oZWFkLmxpbmU9PXQmJnkuaGVhZC5jaDxsLmxlbmd0aCl7dmFyIHY9UCh0LGwubGVuZ3RoKTt5aShvLGcsbmV3IE9zKHYsdikpO2JyZWFrfX19ZnVuY3Rpb24gWW8oZSl7ZXU9ZX1mdW5jdGlvbiBYbyhlLHQsbixyLGkpe3ZhciBvPWUuZG9jO2UuZGlzcGxheS5zaGlmdD0hMSxyfHwocj1vLnNlbCk7dmFyIGE9ZS5zdGF0ZS5wYXN0ZUluY29taW5nfHwicGFzdGUiPT1pLHM9aXModCksdT1udWxsO2lmKGEmJnIucmFuZ2VzLmxlbmd0aD4xKWlmKGV1JiZldS50ZXh0LmpvaW4oIlxuIik9PXQpe2lmKHIucmFuZ2VzLmxlbmd0aCVldS50ZXh0Lmxlbmd0aD09MCl7dT1bXTtmb3IodmFyIGM9MDtjPGV1LnRleHQubGVuZ3RoO2MrKyl1LnB1c2goby5zcGxpdExpbmVzKGV1LnRleHRbY10pKX19ZWxzZSBzLmxlbmd0aD09ci5yYW5nZXMubGVuZ3RoJiZlLm9wdGlvbnMucGFzdGVMaW5lc1BlclNlbGVjdGlvbiYmKHU9ZyhzLGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKTtmb3IodmFyIGwscD1yLnJhbmdlcy5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIGY9ci5yYW5nZXNbcF0sZD1mLmZyb20oKSxoPWYudG8oKTtmLmVtcHR5KCkmJihuJiZuPjA/ZD1QKGQubGluZSxkLmNoLW4pOmUuc3RhdGUub3ZlcndyaXRlJiYhYT9oPVAoaC5saW5lLE1hdGgubWluKEEobyxoLmxpbmUpLnRleHQubGVuZ3RoLGguY2grbShzKS5sZW5ndGgpKTpldSYmZXUubGluZVdpc2UmJmV1LnRleHQuam9pbigiXG4iKT09dCYmKGQ9aD1QKGQubGluZSwwKSkpLGw9ZS5jdXJPcC51cGRhdGVJbnB1dDt2YXIgeT17ZnJvbTpkLHRvOmgsdGV4dDp1P3VbcCV1Lmxlbmd0aF06cyxvcmlnaW46aXx8KGE/InBhc3RlIjplLnN0YXRlLmN1dEluY29taW5nPyJjdXQiOiIraW5wdXQiKX07RmkoZS5kb2MseSksQ3QoZSwiaW5wdXRSZWFkIixlLHkpfXQmJiFhJiZlYShlLHQpLFFuKGUpLGUuY3VyT3AudXBkYXRlSW5wdXQ9bCxlLmN1ck9wLnR5cGluZz0hMCxlLnN0YXRlLnBhc3RlSW5jb21pbmc9ZS5zdGF0ZS5jdXRJbmNvbWluZz0hMX1mdW5jdGlvbiBabyhlLHQpe3ZhciBuPWUuY2xpcGJvYXJkRGF0YSYmZS5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKTtpZihuKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdC5pc1JlYWRPbmx5KCl8fHQub3B0aW9ucy5kaXNhYmxlSW5wdXR8fGhyKHQsZnVuY3Rpb24oKXtyZXR1cm4gWG8odCxuLDAsbnVsbCwicGFzdGUiKX0pLCEwfWZ1bmN0aW9uIGVhKGUsdCl7aWYoZS5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJmUub3B0aW9ucy5zbWFydEluZGVudClmb3IodmFyIG49ZS5kb2Muc2VsLHI9bi5yYW5nZXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPW4ucmFuZ2VzW3JdO2lmKCEoaS5oZWFkLmNoPjEwMHx8ciYmbi5yYW5nZXNbci0xXS5oZWFkLmxpbmU9PWkuaGVhZC5saW5lKSl7dmFyIG89ZS5nZXRNb2RlQXQoaS5oZWFkKSxhPSExO2lmKG8uZWxlY3RyaWNDaGFycyl7Zm9yKHZhciBzPTA7czxvLmVsZWN0cmljQ2hhcnMubGVuZ3RoO3MrKylpZih0LmluZGV4T2Yoby5lbGVjdHJpY0NoYXJzLmNoYXJBdChzKSk+LTEpe2E9Sm8oZSxpLmhlYWQubGluZSwic21hcnQiKTticmVha319ZWxzZSBvLmVsZWN0cmljSW5wdXQmJm8uZWxlY3RyaWNJbnB1dC50ZXN0KEEoZS5kb2MsaS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCxpLmhlYWQuY2gpKSYmKGE9Sm8oZSxpLmhlYWQubGluZSwic21hcnQiKSk7YSYmQ3QoZSwiZWxlY3RyaWNJbnB1dCIsZSxpLmhlYWQubGluZSl9fX1mdW5jdGlvbiB0YShlKXtmb3IodmFyIHQ9W10sbj1bXSxyPTA7cjxlLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDtyKyspe3ZhciBpPWUuZG9jLnNlbC5yYW5nZXNbcl0uaGVhZC5saW5lLG89e2FuY2hvcjpQKGksMCksaGVhZDpQKGkrMSwwKX07bi5wdXNoKG8pLHQucHVzaChlLmdldFJhbmdlKG8uYW5jaG9yLG8uaGVhZCkpfXJldHVybnt0ZXh0OnQscmFuZ2VzOm59fWZ1bmN0aW9uIG5hKGUsdCl7ZS5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksZS5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksZS5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCEhdCl9ZnVuY3Rpb24gcmEoKXt2YXIgZT1yKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogLTFlbTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmUiKSx0PXIoImRpdiIsW2VdLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7cmV0dXJuIENhP2Uuc3R5bGUud2lkdGg9IjEwMDBweCI6ZS5zZXRBdHRyaWJ1dGUoIndyYXAiLCJvZmYiKSxfYSYmKGUuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgYmxhY2siKSxuYShlKSx0fWZ1bmN0aW9uIGlhKGUsdCxuLHIsaSl7ZnVuY3Rpb24gbygpe3ZhciByPXQubGluZStuO3JldHVybiEocjxlLmZpcnN0fHxyPj1lLmZpcnN0K2Uuc2l6ZSkmJih0PW5ldyBQKHIsdC5jaCx0LnN0aWNreSksYz1BKGUscikpfWZ1bmN0aW9uIGEocil7dmFyIGE7aWYobnVsbD09KGE9aT95byhlLmNtLGMsdCxuKTptbyhjLHQsbikpKXtpZihyfHwhbygpKXJldHVybiExO3Q9Z28oaSxlLmNtLGMsdC5saW5lLG4pfWVsc2UgdD1hO3JldHVybiEwfXZhciBzPXQsdT1uLGM9QShlLHQubGluZSk7aWYoImNoYXIiPT1yKWEoKTtlbHNlIGlmKCJjb2x1bW4iPT1yKWEoITApO2Vsc2UgaWYoIndvcmQiPT1yfHwiZ3JvdXAiPT1yKWZvcih2YXIgbD1udWxsLHA9Imdyb3VwIj09cixmPWUuY20mJmUuY20uZ2V0SGVscGVyKHQsIndvcmRDaGFycyIpLGQ9ITA7IShuPDApfHxhKCFkKTtkPSExKXt2YXIgaD1jLnRleHQuY2hhckF0KHQuY2gpfHwiXG4iLG09QyhoLGYpPyJ3IjpwJiYiXG4iPT1oPyJuIjohcHx8L1xzLy50ZXN0KGgpP251bGw6InAiO2lmKCFwfHxkfHxtfHwobT0icyIpLGwmJmwhPW0pe248MCYmKG49MSxhKCksdC5zdGlja3k9ImFmdGVyIik7YnJlYWt9aWYobSYmKGw9bSksbj4wJiYhYSghZCkpYnJlYWt9dmFyIGc9QWkoZSx0LHMsdSwhMCk7cmV0dXJuIGoocyxnKSYmKGcuaGl0U2lkZT0hMCksZ31mdW5jdGlvbiBvYShlLHQsbixyKXt2YXIgaSxvPWUuZG9jLGE9dC5sZWZ0O2lmKCJwYWdlIj09cil7dmFyIHM9TWF0aC5taW4oZS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCksdT1NYXRoLm1heChzLS41KnhuKGUuZGlzcGxheSksMyk7aT0obj4wP3QuYm90dG9tOnQudG9wKStuKnV9ZWxzZSJsaW5lIj09ciYmKGk9bj4wP3QuYm90dG9tKzM6dC50b3AtMyk7Zm9yKHZhciBjO2M9ZG4oZSxhLGkpLGMub3V0c2lkZTspe2lmKG48MD9pPD0wOmk+PW8uaGVpZ2h0KXtjLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpufXJldHVybiBjfWZ1bmN0aW9uIGFhKGUsdCl7dmFyIG49V3QoZSx0LmxpbmUpO2lmKCFufHxuLmhpZGRlbilyZXR1cm4gbnVsbDt2YXIgcj1BKGUuZG9jLHQubGluZSksaT1WdChuLHIsdC5saW5lKSxvPXdlKHIsZS5kb2MuZGlyZWN0aW9uKSxhPSJsZWZ0IjtpZihvKXthPURlKG8sdC5jaCklMj8icmlnaHQiOiJsZWZ0In12YXIgcz1KdChpLm1hcCx0LmNoLGEpO3JldHVybiBzLm9mZnNldD0icmlnaHQiPT1zLmNvbGxhcHNlP3MuZW5kOnMuc3RhcnQsc31mdW5jdGlvbiBzYShlKXtmb3IodmFyIHQ9ZTt0O3Q9dC5wYXJlbnROb2RlKWlmKC9Db2RlTWlycm9yLWd1dHRlci13cmFwcGVyLy50ZXN0KHQuY2xhc3NOYW1lKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1YShlLHQpe3JldHVybiB0JiYoZS5iYWQ9ITApLGV9ZnVuY3Rpb24gY2EoZSx0LG4scixpKXtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09ZX19ZnVuY3Rpb24gYSgpe2wmJihjKz1wLGYmJihjKz1wKSxsPWY9ITEpfWZ1bmN0aW9uIHMoZSl7ZSYmKGEoKSxjKz1lKX1mdW5jdGlvbiB1KHQpe2lmKDE9PXQubm9kZVR5cGUpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJjbS10ZXh0Iik7aWYobilyZXR1cm4gdm9pZCBzKG4pO3ZhciBjLGQ9dC5nZXRBdHRyaWJ1dGUoImNtLW1hcmtlciIpO2lmKGQpe3ZhciBoPWUuZmluZE1hcmtzKFAociwwKSxQKGkrMSwwKSxvKCtkKSk7cmV0dXJuIHZvaWQoaC5sZW5ndGgmJihjPWhbMF0uZmluZCgwKSkmJnMoXyhlLmRvYyxjLmZyb20sYy50bykuam9pbihwKSkpfWlmKCJmYWxzZSI9PXQuZ2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSlyZXR1cm47dmFyIG09L14ocHJlfGRpdnxwfGxpfHRhYmxlfGJyKSQvaS50ZXN0KHQubm9kZU5hbWUpO2lmKCEvXmJyJC9pLnRlc3QodC5ub2RlTmFtZSkmJjA9PXQudGV4dENvbnRlbnQubGVuZ3RoKXJldHVybjttJiZhKCk7Zm9yKHZhciBnPTA7Zzx0LmNoaWxkTm9kZXMubGVuZ3RoO2crKyl1KHQuY2hpbGROb2Rlc1tnXSk7L14ocHJlfHApJC9pLnRlc3QodC5ub2RlTmFtZSkmJihmPSEwKSxtJiYobD0hMCl9ZWxzZSAzPT10Lm5vZGVUeXBlJiZzKHQubm9kZVZhbHVlLnJlcGxhY2UoL1x1MjAwYi9nLCIiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpKX1mb3IodmFyIGM9IiIsbD0hMSxwPWUuZG9jLmxpbmVTZXBhcmF0b3IoKSxmPSExO3UodCksdCE9bjspdD10Lm5leHRTaWJsaW5nLGY9ITE7cmV0dXJuIGN9ZnVuY3Rpb24gbGEoZSx0LG4pe3ZhciByO2lmKHQ9PWUuZGlzcGxheS5saW5lRGl2KXtpZighKHI9ZS5kaXNwbGF5LmxpbmVEaXYuY2hpbGROb2Rlc1tuXSkpcmV0dXJuIHVhKGUuY2xpcFBvcyhQKGUuZGlzcGxheS52aWV3VG8tMSkpLCEwKTt0PW51bGwsbj0wfWVsc2UgZm9yKHI9dDs7cj1yLnBhcmVudE5vZGUpe2lmKCFyfHxyPT1lLmRpc3BsYXkubGluZURpdilyZXR1cm4gbnVsbDtpZihyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZT09ZS5kaXNwbGF5LmxpbmVEaXYpYnJlYWt9Zm9yKHZhciBpPTA7aTxlLmRpc3BsYXkudmlldy5sZW5ndGg7aSsrKXt2YXIgbz1lLmRpc3BsYXkudmlld1tpXTtpZihvLm5vZGU9PXIpcmV0dXJuIHBhKG8sdCxuKX19ZnVuY3Rpb24gcGEoZSx0LG4pe2Z1bmN0aW9uIHIodCxuLHIpe2Zvcih2YXIgaT0tMTtpPChwP3AubGVuZ3RoOjApO2krKylmb3IodmFyIG89aTwwP2wubWFwOnBbaV0sYT0wO2E8by5sZW5ndGg7YSs9Myl7dmFyIHM9b1thKzJdO2lmKHM9PXR8fHM9PW4pe3ZhciB1PUYoaTwwP2UubGluZTplLnJlc3RbaV0pLGM9b1thXStyO3JldHVybihyPDB8fHMhPXQpJiYoYz1vW2ErKHI/MTowKV0pLFAodSxjKX19fXZhciBpPWUudGV4dC5maXJzdENoaWxkLGE9ITE7aWYoIXR8fCFvKGksdCkpcmV0dXJuIHVhKFAoRihlLmxpbmUpLDApLCEwKTtpZih0PT1pJiYoYT0hMCx0PWkuY2hpbGROb2Rlc1tuXSxuPTAsIXQpKXt2YXIgcz1lLnJlc3Q/bShlLnJlc3QpOmUubGluZTtyZXR1cm4gdWEoUChGKHMpLHMudGV4dC5sZW5ndGgpLGEpfXZhciB1PTM9PXQubm9kZVR5cGU/dDpudWxsLGM9dDtmb3IodXx8MSE9dC5jaGlsZE5vZGVzLmxlbmd0aHx8MyE9dC5maXJzdENoaWxkLm5vZGVUeXBlfHwodT10LmZpcnN0Q2hpbGQsbiYmKG49dS5ub2RlVmFsdWUubGVuZ3RoKSk7Yy5wYXJlbnROb2RlIT1pOyljPWMucGFyZW50Tm9kZTt2YXIgbD1lLm1lYXN1cmUscD1sLm1hcHMsZj1yKHUsYyxuKTtpZihmKXJldHVybiB1YShmLGEpO2Zvcih2YXIgZD1jLm5leHRTaWJsaW5nLGg9dT91Lm5vZGVWYWx1ZS5sZW5ndGgtbjowO2Q7ZD1kLm5leHRTaWJsaW5nKXtpZihmPXIoZCxkLmZpcnN0Q2hpbGQsMCkpcmV0dXJuIHVhKFAoZi5saW5lLGYuY2gtaCksYSk7aCs9ZC50ZXh0Q29udGVudC5sZW5ndGh9Zm9yKHZhciBnPWMucHJldmlvdXNTaWJsaW5nLHk9bjtnO2c9Zy5wcmV2aW91c1NpYmxpbmcpe2lmKGY9cihnLGcuZmlyc3RDaGlsZCwtMSkpcmV0dXJuIHVhKFAoZi5saW5lLGYuY2greSksYSk7eSs9Zy50ZXh0Q29udGVudC5sZW5ndGh9fWZ1bmN0aW9uIGZhKGUsdCl7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHQ9dD9sKHQpOnt9LHQudmFsdWU9ZS52YWx1ZSwhdC50YWJpbmRleCYmZS50YWJJbmRleCYmKHQudGFiaW5kZXg9ZS50YWJJbmRleCksIXQucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJih0LnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXQuYXV0b2ZvY3VzKXt2YXIgcj1hKCk7dC5hdXRvZm9jdXM9cj09ZXx8bnVsbCE9ZS5nZXRBdHRyaWJ1dGUoImF1dG9mb2N1cyIpJiZyPT1kb2N1bWVudC5ib2R5fXZhciBpO2lmKGUuZm9ybSYmKG5zKGUuZm9ybSwic3VibWl0IixuKSwhdC5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lKSl7dmFyIG89ZS5mb3JtO2k9by5zdWJtaXQ7dHJ5e3ZhciBzPW8uc3VibWl0PWZ1bmN0aW9uKCl7bigpLG8uc3VibWl0PWksby5zdWJtaXQoKSxvLnN1Ym1pdD1zfX1jYXRjaChlKXt9fXQuZmluaXNoSW5pdD1mdW5jdGlvbih0KXt0LnNhdmU9bix0LmdldFRleHRBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHQudG9UZXh0QXJlYT1mdW5jdGlvbigpe3QudG9UZXh0QXJlYT1pc05hTixuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKGtlKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9aSkpfX0sZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT1RbyhmdW5jdGlvbih0KXtyZXR1cm4gZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSx0KTtyZXR1cm4gdX12YXIgZGE9bmF2aWdhdG9yLnVzZXJBZ2VudCxoYT1uYXZpZ2F0b3IucGxhdGZvcm0sbWE9L2dlY2tvXC9cZC9pLnRlc3QoZGEpLGdhPS9NU0lFIFxkLy50ZXN0KGRhKSx5YT0vVHJpZGVudFwvKD86WzctOV18XGR7Mix9KVwuLipydjooXGQrKS8uZXhlYyhkYSksdmE9L0VkZ2VcLyhcZCspLy5leGVjKGRhKSxiYT1nYXx8eWF8fHZhLHhhPWJhJiYoZ2E/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw2OisodmF8fHlhKVsxXSksQ2E9IXZhJiYvV2ViS2l0XC8vLnRlc3QoZGEpLEVhPUNhJiYvUXRcL1xkK1wuXGQrLy50ZXN0KGRhKSxEYT0hdmEmJi9DaHJvbWVcLy8udGVzdChkYSksd2E9L09wZXJhXC8vLnRlc3QoZGEpLFNhPS9BcHBsZSBDb21wdXRlci8udGVzdChuYXZpZ2F0b3IudmVuZG9yKSxrYT0vTWFjIE9TIFggMVxkXEQoWzgtOV18XGRcZClcRC8udGVzdChkYSksQWE9L1BoYW50b21KUy8udGVzdChkYSksX2E9IXZhJiYvQXBwbGVXZWJLaXQvLnRlc3QoZGEpJiYvTW9iaWxlXC9cdysvLnRlc3QoZGEpLFRhPS9BbmRyb2lkLy50ZXN0KGRhKSxPYT1fYXx8VGF8fC93ZWJPU3xCbGFja0JlcnJ5fE9wZXJhIE1pbml8T3BlcmEgTW9iaXxJRU1vYmlsZS9pLnRlc3QoZGEpLEZhPV9hfHwvTWFjLy50ZXN0KGhhKSxOYT0vXGJDck9TXGIvLnRlc3QoZGEpLElhPS93aW4vaS50ZXN0KGhhKSxMYT13YSYmZGEubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtMYSYmKExhPU51bWJlcihMYVsxXSkpLExhJiZMYT49MTUmJih3YT0hMSxDYT0hMCk7dmFyIFBhLE1hPUZhJiYoRWF8fHdhJiYobnVsbD09TGF8fExhPDEyLjExKSksamE9bWF8fGJhJiZ4YT49OSxSYT1mdW5jdGlvbih0LG4pe3ZhciByPXQuY2xhc3NOYW1lLGk9ZShuKS5leGVjKHIpO2lmKGkpe3ZhciBvPXIuc2xpY2UoaS5pbmRleCtpWzBdLmxlbmd0aCk7dC5jbGFzc05hbWU9ci5zbGljZSgwLGkuaW5kZXgpKyhvP2lbMV0rbzoiIil9fTtQYT1kb2N1bWVudC5jcmVhdGVSYW5nZT9mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3JldHVybiBpLnNldEVuZChyfHxlLG4pLGkuc2V0U3RhcnQoZSx0KSxpfTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTt0cnl7ci5tb3ZlVG9FbGVtZW50VGV4dChlLnBhcmVudE5vZGUpfWNhdGNoKGUpe3JldHVybiByfXJldHVybiByLmNvbGxhcHNlKCEwKSxyLm1vdmVFbmQoImNoYXJhY3RlciIsbiksci5tb3ZlU3RhcnQoImNoYXJhY3RlciIsdCkscn07dmFyIEJhPWZ1bmN0aW9uKGUpe2Uuc2VsZWN0KCl9O19hP0JhPWZ1bmN0aW9uKGUpe2Uuc2VsZWN0aW9uU3RhcnQ9MCxlLnNlbGVjdGlvbkVuZD1lLnZhbHVlLmxlbmd0aH06YmEmJihCYT1mdW5jdGlvbihlKXt0cnl7ZS5zZWxlY3QoKX1jYXRjaChlKXt9fSk7dmFyICRhPWZ1bmN0aW9uKCl7dGhpcy5pZD1udWxsfTskYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KHRoaXMuaWQpLHRoaXMuaWQ9c2V0VGltZW91dCh0LGUpfTt2YXIgVWEsemEsR2E9MzAsVmE9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fSxxYT17c2Nyb2xsOiExfSxIYT17b3JpZ2luOiIqbW91c2UifSxXYT17b3JpZ2luOiIrbW92ZSJ9LFFhPVsiIl0sS2E9L1tcdTAwZGZcdTA1ODdcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZmXHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS8sSmE9L1tcdTAzMDAtXHUwMzZmXHUwNDgzLVx1MDQ4OVx1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzVcdTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY1ZVx1MDY3MFx1MDZkNi1cdTA2ZGNcdTA2ZGUtXHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVhLVx1MDZlZFx1MDcxMVx1MDczMC1cdTA3NGFcdTA3YTYtXHUwN2IwXHUwN2ViLVx1MDdmM1x1MDgxNi1cdTA4MTlcdTA4MWItXHUwODIzXHUwODI1LVx1MDgyN1x1MDgyOS1cdTA4MmRcdTA5MDAtXHUwOTAyXHUwOTNjXHUwOTQxLVx1MDk0OFx1MDk0ZFx1MDk1MS1cdTA5NTVcdTA5NjJcdTA5NjNcdTA5ODFcdTA5YmNcdTA5YmVcdTA5YzEtXHUwOWM0XHUwOWNkXHUwOWQ3XHUwOWUyXHUwOWUzXHUwYTAxXHUwYTAyXHUwYTNjXHUwYTQxXHUwYTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE3MFx1MGE3MVx1MGE3NVx1MGE4MVx1MGE4Mlx1MGFiY1x1MGFjMS1cdTBhYzVcdTBhYzdcdTBhYzhcdTBhY2RcdTBhZTJcdTBhZTNcdTBiMDFcdTBiM2NcdTBiM2VcdTBiM2ZcdTBiNDEtXHUwYjQ0XHUwYjRkXHUwYjU2XHUwYjU3XHUwYjYyXHUwYjYzXHUwYjgyXHUwYmJlXHUwYmMwXHUwYmNkXHUwYmQ3XHUwYzNlLVx1MGM0MFx1MGM0Ni1cdTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzYyXHUwYzYzXHUwY2JjXHUwY2JmXHUwY2MyXHUwY2M2XHUwY2NjXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2UyXHUwY2UzXHUwZDNlXHUwZDQxLVx1MGQ0NFx1MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1MGRjYVx1MGRjZlx1MGRkMi1cdTBkZDRcdTBkZDZcdTBkZGZcdTBlMzFcdTBlMzQtXHUwZTNhXHUwZTQ3LVx1MGU0ZVx1MGViMVx1MGViNC1cdTBlYjlcdTBlYmJcdTBlYmNcdTBlYzgtXHUwZWNkXHUwZjE4XHUwZjE5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjcxLVx1MGY3ZVx1MGY4MC1cdTBmODRcdTBmODZcdTBmODdcdTBmOTAtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAyZC1cdTEwMzBcdTEwMzItXHUxMDM3XHUxMDM5XHUxMDNhXHUxMDNkXHUxMDNlXHUxMDU4XHUxMDU5XHUxMDVlLVx1MTA2MFx1MTA3MS1cdTEwNzRcdTEwODJcdTEwODVcdTEwODZcdTEwOGRcdTEwOWRcdTEzNWZcdTE3MTItXHUxNzE0XHUxNzMyLVx1MTczNFx1MTc1Mlx1MTc1M1x1MTc3Mlx1MTc3M1x1MTdiNy1cdTE3YmRcdTE3YzZcdTE3YzktXHUxN2QzXHUxN2RkXHUxODBiLVx1MTgwZFx1MThhOVx1MTkyMC1cdTE5MjJcdTE5MjdcdTE5MjhcdTE5MzJcdTE5MzktXHUxOTNiXHUxYTE3XHUxYTE4XHUxYTU2XHUxYTU4LVx1MWE1ZVx1MWE2MFx1MWE2Mlx1MWE2NS1cdTFhNmNcdTFhNzMtXHUxYTdjXHUxYTdmXHUxYjAwLVx1MWIwM1x1MWIzNFx1MWIzNi1cdTFiM2FcdTFiM2NcdTFiNDJcdTFiNmItXHUxYjczXHUxYjgwXHUxYjgxXHUxYmEyLVx1MWJhNVx1MWJhOFx1MWJhOVx1MWMyYy1cdTFjMzNcdTFjMzZcdTFjMzdcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNlMFx1MWNlMi1cdTFjZThcdTFjZWRcdTFkYzAtXHUxZGU2XHUxZGZkLVx1MWRmZlx1MjAwY1x1MjAwZFx1MjBkMC1cdTIwZjBcdTJjZWYtXHUyY2YxXHUyZGUwLVx1MmRmZlx1MzAyYS1cdTMwMmZcdTMwOTlcdTMwOWFcdWE2NmYtXHVhNjcyXHVhNjdjXHVhNjdkXHVhNmYwXHVhNmYxXHVhODAyXHVhODA2XHVhODBiXHVhODI1XHVhODI2XHVhOGM0XHVhOGUwLVx1YThmMVx1YTkyNi1cdWE5MmRcdWE5NDctXHVhOTUxXHVhOTgwLVx1YTk4Mlx1YTliM1x1YTliNi1cdWE5YjlcdWE5YmNcdWFhMjktXHVhYTJlXHVhYTMxXHVhYTMyXHVhYTM1XHVhYTM2XHVhYTQzXHVhYTRjXHVhYWIwXHVhYWIyLVx1YWFiNFx1YWFiN1x1YWFiOFx1YWFiZVx1YWFiZlx1YWFjMVx1YWJlNVx1YWJlOFx1YWJlZFx1ZGMwMC1cdWRmZmZcdWZiMWVcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1ZmY5ZVx1ZmY5Zl0vLFlhPSExLFhhPSExLFphPW51bGwsZXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPD0yNDc/bi5jaGFyQXQoZSk6MTQyNDw9ZSYmZTw9MTUyND8iUiI6MTUzNjw9ZSYmZTw9MTc4NT9yLmNoYXJBdChlLTE1MzYpOjE3NzQ8PWUmJmU8PTIyMjA/InIiOjgxOTI8PWUmJmU8PTgyMDM/InciOjgyMDQ9PWU/ImIiOiJMIn1mdW5jdGlvbiB0KGUsdCxuKXt0aGlzLmxldmVsPWUsdGhpcy5mcm9tPXQsdGhpcy50bz1ufXZhciBuPSJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTiIscj0ibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMSIsaT0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLG89L1tzdHdOXS8sYT0vW0xScl0vLHM9L1tMYjFuXS8sdT0vWzFuXS87cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGM9Imx0ciI9PXI/IkwiOiJSIjtpZigwPT1uLmxlbmd0aHx8Imx0ciI9PXImJiFpLnRlc3QobikpcmV0dXJuITE7Zm9yKHZhciBsPW4ubGVuZ3RoLHA9W10sZj0wO2Y8bDsrK2YpcC5wdXNoKGUobi5jaGFyQ29kZUF0KGYpKSk7Zm9yKHZhciBkPTAsaD1jO2Q8bDsrK2Qpe3ZhciBnPXBbZF07Im0iPT1nP3BbZF09aDpoPWd9Zm9yKHZhciB5PTAsdj1jO3k8bDsrK3kpe3ZhciBiPXBbeV07IjEiPT1iJiYiciI9PXY/cFt5XT0ibiI6YS50ZXN0KGIpJiYodj1iLCJyIj09YiYmKHBbeV09IlIiKSl9Zm9yKHZhciB4PTEsQz1wWzBdO3g8bC0xOysreCl7dmFyIEU9cFt4XTsiKyI9PUUmJiIxIj09QyYmIjEiPT1wW3grMV0/cFt4XT0iMSI6IiwiIT1FfHxDIT1wW3grMV18fCIxIiE9QyYmIm4iIT1DfHwocFt4XT1DKSxDPUV9Zm9yKHZhciBEPTA7RDxsOysrRCl7dmFyIHc9cFtEXTtpZigiLCI9PXcpcFtEXT0iTiI7ZWxzZSBpZigiJSI9PXcpe3ZhciBTPXZvaWQgMDtmb3IoUz1EKzE7UzxsJiYiJSI9PXBbU107KytTKTtmb3IodmFyIGs9RCYmIiEiPT1wW0QtMV18fFM8bCYmIjEiPT1wW1NdPyIxIjoiTiIsQT1EO0E8UzsrK0EpcFtBXT1rO0Q9Uy0xfX1mb3IodmFyIF89MCxUPWM7XzxsOysrXyl7dmFyIE89cFtfXTsiTCI9PVQmJiIxIj09Tz9wW19dPSJMIjphLnRlc3QoTykmJihUPU8pfWZvcih2YXIgRj0wO0Y8bDsrK0YpaWYoby50ZXN0KHBbRl0pKXt2YXIgTj12b2lkIDA7Zm9yKE49RisxO048bCYmby50ZXN0KHBbTl0pOysrTik7Zm9yKHZhciBJPSJMIj09KEY/cFtGLTFdOmMpLEw9IkwiPT0oTjxsP3BbTl06YyksUD1JPT1MP0k/IkwiOiJSIjpjLE09RjtNPE47KytNKXBbTV09UDtGPU4tMX1mb3IodmFyIGosUj1bXSxCPTA7QjxsOylpZihzLnRlc3QocFtCXSkpe3ZhciAkPUI7Zm9yKCsrQjtCPGwmJnMudGVzdChwW0JdKTsrK0IpO1IucHVzaChuZXcgdCgwLCQsQikpfWVsc2V7dmFyIFU9Qix6PVIubGVuZ3RoO2ZvcigrK0I7QjxsJiYiTCIhPXBbQl07KytCKTtmb3IodmFyIEc9VTtHPEI7KWlmKHUudGVzdChwW0ddKSl7VTxHJiZSLnNwbGljZSh6LDAsbmV3IHQoMSxVLEcpKTt2YXIgVj1HO2ZvcigrK0c7RzxCJiZ1LnRlc3QocFtHXSk7KytHKTtSLnNwbGljZSh6LDAsbmV3IHQoMixWLEcpKSxVPUd9ZWxzZSsrRztVPEImJlIuc3BsaWNlKHosMCxuZXcgdCgxLFUsQikpfXJldHVybiJsdHIiPT1yJiYoMT09UlswXS5sZXZlbCYmKGo9bi5tYXRjaCgvXlxzKy8pKSYmKFJbMF0uZnJvbT1qWzBdLmxlbmd0aCxSLnVuc2hpZnQobmV3IHQoMCwwLGpbMF0ubGVuZ3RoKSkpLDE9PW0oUikubGV2ZWwmJihqPW4ubWF0Y2goL1xzKyQvKSkmJihtKFIpLnRvLT1qWzBdLmxlbmd0aCxSLnB1c2gobmV3IHQoMCxsLWpbMF0ubGVuZ3RoLGwpKSkpLCJydGwiPT1yP1IucmV2ZXJzZSgpOlJ9fSgpLHRzPVtdLG5zPWZ1bmN0aW9uKGUsdCxuKXtpZihlLmFkZEV2ZW50TGlzdGVuZXIpZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSk7ZWxzZSBpZihlLmF0dGFjaEV2ZW50KWUuYXR0YWNoRXZlbnQoIm9uIit0LG4pO2Vsc2V7dmFyIHI9ZS5faGFuZGxlcnN8fChlLl9oYW5kbGVycz17fSk7clt0XT0oclt0XXx8dHMpLmNvbmNhdChuKX19LHJzPWZ1bmN0aW9uKCl7aWYoYmEmJnhhPDkpcmV0dXJuITE7dmFyIGU9cigiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiBlfHwiZHJhZ0Ryb3AiaW4gZX0oKSxpcz0zIT0iXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aD9mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPVtdLHI9ZS5sZW5ndGg7dDw9cjspe3ZhciBpPWUuaW5kZXhPZigiXG4iLHQpOy0xPT1pJiYoaT1lLmxlbmd0aCk7dmFyIG89ZS5zbGljZSh0LCJcciI9PWUuY2hhckF0KGktMSk/aS0xOmkpLGE9by5pbmRleE9mKCJcciIpOy0xIT1hPyhuLnB1c2goby5zbGljZSgwLGEpKSx0Kz1hKzEpOihuLnB1c2gobyksdD1pKzEpfXJldHVybiBufTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHJcbj98XG4vKX0sb3M9d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnQhPWUuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24oZSl7dmFyIHQ7dHJ5e3Q9ZS5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfWNhdGNoKGUpe31yZXR1cm4hKCF0fHx0LnBhcmVudEVsZW1lbnQoKSE9ZSkmJjAhPXQuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsdCl9LGFzPWZ1bmN0aW9uKCl7dmFyIGU9cigiZGl2Iik7cmV0dXJuIm9uY29weSJpbiBlfHwoZS5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbmNvcHkpfSgpLHNzPW51bGwsdXM9e30sY3M9e30sbHM9e30scHM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz1lLHRoaXMudGFiU2l6ZT10fHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lT3JhY2xlPW59O3BzLnByb3RvdHlwZS5lb2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0scHMucHJvdG90eXBlLnNvbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz09dGhpcy5saW5lU3RhcnR9LHBzLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0scHMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGgpcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKX0scHMucHJvdG90eXBlLmVhdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO2lmKCJzdHJpbmciPT10eXBlb2YgZT90PT1lOnQmJihlLnRlc3Q/ZS50ZXN0KHQpOmUodCkpKXJldHVybisrdGhpcy5wb3MsdH0scHMucHJvdG90eXBlLmVhdFdoaWxlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnBvczt0aGlzLmVhdChlKTspO3JldHVybiB0aGlzLnBvcz50fSxwcy5wcm90b3R5cGUuZWF0U3BhY2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK2UucG9zO3JldHVybiB0aGlzLnBvcz50fSxwcy5wcm90b3R5cGUuc2tpcFRvRW5kPWZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxwcy5wcm90b3R5cGUuc2tpcFRvPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RyaW5nLmluZGV4T2YoZSx0aGlzLnBvcyk7aWYodD4tMSlyZXR1cm4gdGhpcy5wb3M9dCwhMH0scHMucHJvdG90eXBlLmJhY2tVcD1mdW5jdGlvbihlKXt0aGlzLnBvcy09ZX0scHMucHJvdG90eXBlLmNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPXAodGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWUtKHRoaXMubGluZVN0YXJ0P3AodGhpcy5zdHJpbmcsdGhpcy5saW5lU3RhcnQsdGhpcy50YWJTaXplKTowKX0scHMucHJvdG90eXBlLmluZGVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5zdHJpbmcsbnVsbCx0aGlzLnRhYlNpemUpLSh0aGlzLmxpbmVTdGFydD9wKHRoaXMuc3RyaW5nLHRoaXMubGluZVN0YXJ0LHRoaXMudGFiU2l6ZSk6MCl9LHBzLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyIhPXR5cGVvZiBlKXt2YXIgcj10aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2goZSk7cmV0dXJuIHImJnIuaW5kZXg+MD9udWxsOihyJiYhMSE9PXQmJih0aGlzLnBvcys9clswXS5sZW5ndGgpLHIpfXZhciBpPWZ1bmN0aW9uKGUpe3JldHVybiBuP2UudG9Mb3dlckNhc2UoKTplfTtpZihpKHRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcyxlLmxlbmd0aCkpPT1pKGUpKXJldHVybiExIT09dCYmKHRoaXMucG9zKz1lLmxlbmd0aCksITB9LHBzLnByb3RvdHlwZS5jdXJyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfSxwcy5wcm90b3R5cGUuaGlkZUZpcnN0Q2hhcnM9ZnVuY3Rpb24oZSx0KXt0aGlzLmxpbmVTdGFydCs9ZTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e3RoaXMubGluZVN0YXJ0LT1lfX0scHMucHJvdG90eXBlLmxvb2tBaGVhZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmxpbmVPcmFjbGU7cmV0dXJuIHQmJnQubG9va0FoZWFkKGUpfSxwcy5wcm90b3R5cGUuYmFzZVRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5saW5lT3JhY2xlO3JldHVybiBlJiZlLmJhc2VUb2tlbih0aGlzLnBvcyl9O3ZhciBmcz1mdW5jdGlvbihlLHQpe3RoaXMuc3RhdGU9ZSx0aGlzLmxvb2tBaGVhZD10fSxkcz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLnN0YXRlPXQsdGhpcy5kb2M9ZSx0aGlzLmxpbmU9bix0aGlzLm1heExvb2tBaGVhZD1yfHwwLHRoaXMuYmFzZVRva2Vucz1udWxsLHRoaXMuYmFzZVRva2VuUG9zPTF9O2RzLnByb3RvdHlwZS5sb29rQWhlYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kb2MuZ2V0TGluZSh0aGlzLmxpbmUrZSk7cmV0dXJuIG51bGwhPXQmJmU+dGhpcy5tYXhMb29rQWhlYWQmJih0aGlzLm1heExvb2tBaGVhZD1lKSx0fSxkcy5wcm90b3R5cGUuYmFzZVRva2VuPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoIXRoaXMuYmFzZVRva2VucylyZXR1cm4gbnVsbDtmb3IoO3RoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc108PWU7KXQuYmFzZVRva2VuUG9zKz0yO3ZhciBuPXRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvcysxXTtyZXR1cm57dHlwZTpuJiZuLnJlcGxhY2UoLyggfF4pb3ZlcmxheSAuKi8sIiIpLHNpemU6dGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zXS1lfX0sZHMucHJvdG90eXBlLm5leHRMaW5lPWZ1bmN0aW9uKCl7dGhpcy5saW5lKyssdGhpcy5tYXhMb29rQWhlYWQ+MCYmdGhpcy5tYXhMb29rQWhlYWQtLX0sZHMuZnJvbVNhdmVkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGZzP25ldyBkcyhlLEhlKGUubW9kZSx0LnN0YXRlKSxuLHQubG9va0FoZWFkKTpuZXcgZHMoZSxIZShlLm1vZGUsdCksbil9LGRzLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGUpe3ZhciB0PSExIT09ZT9IZSh0aGlzLmRvYy5tb2RlLHRoaXMuc3RhdGUpOnRoaXMuc3RhdGU7cmV0dXJuIHRoaXMubWF4TG9va0FoZWFkPjA/bmV3IGZzKHQsdGhpcy5tYXhMb29rQWhlYWQpOnR9O3ZhciBocz1mdW5jdGlvbihlLHQsbil7dGhpcy5zdGFydD1lLnN0YXJ0LHRoaXMuZW5kPWUucG9zLHRoaXMuc3RyaW5nPWUuY3VycmVudCgpLHRoaXMudHlwZT10fHxudWxsLHRoaXMuc3RhdGU9bn0sbXM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMudGV4dD1lLHJlKHRoaXMsdCksdGhpcy5oZWlnaHQ9bj9uKHRoaXMpOjF9O21zLnByb3RvdHlwZS5saW5lTm89ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzKX0sRmUobXMpO3ZhciBncyx5cz17fSx2cz17fSxicz1udWxsLHhzPW51bGwsQ3M9e2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSxFcz1mdW5jdGlvbihlLHQsbil7dGhpcy5jbT1uO3ZhciBpPXRoaXMudmVydD1yKCJkaXYiLFtyKCJkaXYiLG51bGwsbnVsbCwibWluLXdpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLG89dGhpcy5ob3Jpej1yKCJkaXYiLFtyKCJkaXYiLG51bGwsbnVsbCwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHgiKV0sIkNvZGVNaXJyb3ItaHNjcm9sbGJhciIpO2kudGFiSW5kZXg9by50YWJJbmRleD0tMSxlKGkpLGUobyksbnMoaSwic2Nyb2xsIixmdW5jdGlvbigpe2kuY2xpZW50SGVpZ2h0JiZ0KGkuc2Nyb2xsVG9wLCJ2ZXJ0aWNhbCIpfSksbnMobywic2Nyb2xsIixmdW5jdGlvbigpe28uY2xpZW50V2lkdGgmJnQoby5zY3JvbGxMZWZ0LCJob3Jpem9udGFsIil9KSx0aGlzLmNoZWNrZWRaZXJvV2lkdGg9ITEsYmEmJnhhPDgmJih0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodD10aGlzLnZlcnQuc3R5bGUubWluV2lkdGg9IjE4cHgiKX07RXMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFdpZHRoPmUuY2xpZW50V2lkdGgrMSxuPWUuc2Nyb2xsSGVpZ2h0PmUuY2xpZW50SGVpZ2h0KzEscj1lLm5hdGl2ZUJhcldpZHRoO2lmKG4pe3RoaXMudmVydC5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbT10P3IrInB4IjoiMCI7dmFyIGk9ZS52aWV3SGVpZ2h0LSh0P3I6MCk7dGhpcy52ZXJ0LmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsZS5zY3JvbGxIZWlnaHQtZS5jbGllbnRIZWlnaHQraSkrInB4In1lbHNlIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCI7aWYodCl7dGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5ob3Jpei5zdHlsZS5yaWdodD1uP3IrInB4IjoiMCIsdGhpcy5ob3Jpei5zdHlsZS5sZWZ0PWUuYmFyTGVmdCsicHgiO3ZhciBvPWUudmlld1dpZHRoLWUuYmFyTGVmdC0obj9yOjApO3RoaXMuaG9yaXouZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1NYXRoLm1heCgwLGUuc2Nyb2xsV2lkdGgtZS5jbGllbnRXaWR0aCtvKSsicHgifWVsc2UgdGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuaG9yaXouZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCI7cmV0dXJuIXRoaXMuY2hlY2tlZFplcm9XaWR0aCYmZS5jbGllbnRIZWlnaHQ+MCYmKDA9PXImJnRoaXMuemVyb1dpZHRoSGFjaygpLHRoaXMuY2hlY2tlZFplcm9XaWR0aD0hMCkse3JpZ2h0Om4/cjowLGJvdHRvbTp0P3I6MH19LEVzLnByb3RvdHlwZS5zZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKGUpe3RoaXMuaG9yaXouc2Nyb2xsTGVmdCE9ZSYmKHRoaXMuaG9yaXouc2Nyb2xsTGVmdD1lKSx0aGlzLmRpc2FibGVIb3JpeiYmdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy5ob3Jpeix0aGlzLmRpc2FibGVIb3JpeiwiaG9yaXoiKX0sRXMucHJvdG90eXBlLnNldFNjcm9sbFRvcD1mdW5jdGlvbihlKXt0aGlzLnZlcnQuc2Nyb2xsVG9wIT1lJiYodGhpcy52ZXJ0LnNjcm9sbFRvcD1lKSx0aGlzLmRpc2FibGVWZXJ0JiZ0aGlzLmVuYWJsZVplcm9XaWR0aEJhcih0aGlzLnZlcnQsdGhpcy5kaXNhYmxlVmVydCwidmVydCIpfSxFcy5wcm90b3R5cGUuemVyb1dpZHRoSGFjaz1mdW5jdGlvbigpe3ZhciBlPUZhJiYha2E/IjEycHgiOiIxOHB4Ijt0aGlzLmhvcml6LnN0eWxlLmhlaWdodD10aGlzLnZlcnQuc3R5bGUud2lkdGg9ZSx0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHM9dGhpcy52ZXJ0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuZGlzYWJsZUhvcml6PW5ldyAkYSx0aGlzLmRpc2FibGVWZXJ0PW5ldyAkYX0sRXMucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhcj1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe3ZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KCJ2ZXJ0Ij09bj9kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGkucmlnaHQtMSwoaS50b3AraS5ib3R0b20pLzIpOmRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoKGkucmlnaHQraS5sZWZ0KS8yLGkuYm90dG9tLTEpKSE9ZT9lLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiOnQuc2V0KDFlMyxyKX1lLnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iLHQuc2V0KDFlMyxyKX0sRXMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ob3Jpei5wYXJlbnROb2RlO2UucmVtb3ZlQ2hpbGQodGhpcy5ob3JpeiksZS5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpfTt2YXIgRHM9ZnVuY3Rpb24oKXt9O0RzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm57Ym90dG9tOjAscmlnaHQ6MH19LERzLnByb3RvdHlwZS5zZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKCl7fSxEcy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7fSxEcy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt9O3ZhciB3cz17bmF0aXZlOkVzLG51bGw6RHN9LFNzPTAsa3M9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZGlzcGxheTt0aGlzLnZpZXdwb3J0PXQsdGhpcy52aXNpYmxlPSRuKHIsZS5kb2MsdCksdGhpcy5lZGl0b3JJc0hpZGRlbj0hci53cmFwcGVyLm9mZnNldFdpZHRoLHRoaXMud3JhcHBlckhlaWdodD1yLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMud3JhcHBlcldpZHRoPXIud3JhcHBlci5jbGllbnRXaWR0aCx0aGlzLm9sZERpc3BsYXlXaWR0aD1VdChlKSx0aGlzLmZvcmNlPW4sdGhpcy5kaW1zPUVuKGUpLHRoaXMuZXZlbnRzPVtdfTtrcy5wcm90b3R5cGUuc2lnbmFsPWZ1bmN0aW9uKGUsdCl7T2UoZSx0KSYmdGhpcy5ldmVudHMucHVzaChhcmd1bWVudHMpfSxrcy5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD0wO3Q8dGhpcy5ldmVudHMubGVuZ3RoO3QrKylBZS5hcHBseShudWxsLGUuZXZlbnRzW3RdKX07dmFyIEFzPTAsX3M9bnVsbDtiYT9fcz0tLjUzOm1hP19zPTE1OkRhP19zPS0uNzpTYSYmKF9zPS0xLzMpO3ZhciBUcz1mdW5jdGlvbihlLHQpe3RoaXMucmFuZ2VzPWUsdGhpcy5wcmltSW5kZXg9dH07VHMucHJvdG90eXBlLnByaW1hcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdfSxUcy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZT09dGhpcylyZXR1cm4hMDtpZihlLnByaW1JbmRleCE9dGhpcy5wcmltSW5kZXh8fGUucmFuZ2VzLmxlbmd0aCE9dGhpcy5yYW5nZXMubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dGhpcy5yYW5nZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5yYW5nZXNbbl0saT1lLnJhbmdlc1tuXTtpZighaihyLmFuY2hvcixpLmFuY2hvcil8fCFqKHIuaGVhZCxpLmhlYWQpKXJldHVybiExfXJldHVybiEwfSxUcy5wcm90b3R5cGUuZGVlcENvcHk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PVtdLG49MDtuPHRoaXMucmFuZ2VzLmxlbmd0aDtuKyspdFtuXT1uZXcgT3MoUihlLnJhbmdlc1tuXS5hbmNob3IpLFIoZS5yYW5nZXNbbl0uaGVhZCkpO3JldHVybiBuZXcgVHModCx0aGlzLnByaW1JbmRleCl9LFRzLnByb3RvdHlwZS5zb21ldGhpbmdTZWxlY3RlZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9MDt0PHRoaXMucmFuZ2VzLmxlbmd0aDt0KyspaWYoIWUucmFuZ2VzW3RdLmVtcHR5KCkpcmV0dXJuITA7cmV0dXJuITF9LFRzLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9ZSk7Zm9yKHZhciByPTA7cjx0aGlzLnJhbmdlcy5sZW5ndGg7cisrKXt2YXIgaT1uLnJhbmdlc1tyXTtpZihNKHQsaS5mcm9tKCkpPj0wJiZNKGUsaS50bygpKTw9MClyZXR1cm4gcn1yZXR1cm4tMX07dmFyIE9zPWZ1bmN0aW9uKGUsdCl7dGhpcy5hbmNob3I9ZSx0aGlzLmhlYWQ9dH07T3MucHJvdG90eXBlLmZyb209ZnVuY3Rpb24oKXtyZXR1cm4gJCh0aGlzLmFuY2hvcix0aGlzLmhlYWQpfSxPcy5wcm90b3R5cGUudG89ZnVuY3Rpb24oKXtyZXR1cm4gQih0aGlzLmFuY2hvcix0aGlzLmhlYWQpfSxPcy5wcm90b3R5cGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmxpbmU9PXRoaXMuYW5jaG9yLmxpbmUmJnRoaXMuaGVhZC5jaD09dGhpcy5hbmNob3IuY2h9LHppLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLHI9ZSxpPWUrdDtyPGk7KytyKXt2YXIgbz1uLmxpbmVzW3JdO24uaGVpZ2h0LT1vLmhlaWdodCxzdChvKSxDdChvLCJkZWxldGUiKX10aGlzLmxpbmVzLnNwbGljZShlLHQpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXtlLnB1c2guYXBwbHkoZSx0aGlzLmxpbmVzKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dGhpcy5oZWlnaHQrPW4sdGhpcy5saW5lcz10aGlzLmxpbmVzLnNsaWNlKDAsZSkuY29uY2F0KHQpLmNvbmNhdCh0aGlzLmxpbmVzLnNsaWNlKGUpKTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoOysraSl0W2ldLnBhcmVudD1yfSxpdGVyTjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMsaT1lK3Q7ZTxpOysrZSlpZihuKHIubGluZXNbZV0pKXJldHVybiEwfX0sR2kucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfSxyZW1vdmVJbm5lcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5zaXplLT10O2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgaT1uLmNoaWxkcmVuW3JdLG89aS5jaHVua1NpemUoKTtpZihlPG8pe3ZhciBhPU1hdGgubWluKHQsby1lKSxzPWkuaGVpZ2h0O2lmKGkucmVtb3ZlSW5uZXIoZSxhKSxuLmhlaWdodC09cy1pLmhlaWdodCxvPT1hJiYobi5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLGkucGFyZW50PW51bGwpLDA9PSh0LT1hKSlicmVhaztlPTB9ZWxzZSBlLT1vfWlmKHRoaXMuc2l6ZS10PDI1JiYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MXx8ISh0aGlzLmNoaWxkcmVuWzBdaW5zdGFuY2VvZiB6aSkpKXt2YXIgdT1bXTt0aGlzLmNvbGxhcHNlKHUpLHRoaXMuY2hpbGRyZW49W25ldyB6aSh1KV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrbil0LmNoaWxkcmVuW25dLmNvbGxhcHNlKGUpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt0aGlzLnNpemUrPXQubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1uO2Zvcih2YXIgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytpKXt2YXIgbz1yLmNoaWxkcmVuW2ldLGE9by5jaHVua1NpemUoKTtpZihlPD1hKXtpZihvLmluc2VydElubmVyKGUsdCxuKSxvLmxpbmVzJiZvLmxpbmVzLmxlbmd0aD41MCl7Zm9yKHZhciBzPW8ubGluZXMubGVuZ3RoJTI1KzI1LHU9czt1PG8ubGluZXMubGVuZ3RoOyl7dmFyIGM9bmV3IHppKG8ubGluZXMuc2xpY2UodSx1Kz0yNSkpO28uaGVpZ2h0LT1jLmhlaWdodCxyLmNoaWxkcmVuLnNwbGljZSgrK2ksMCxjKSxjLnBhcmVudD1yfW8ubGluZXM9by5saW5lcy5zbGljZSgwLHMpLHIubWF5YmVTcGlsbCgpfWJyZWFrfWUtPWF9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgZT10aGlzO2Rve3ZhciB0PWUuY2hpbGRyZW4uc3BsaWNlKGUuY2hpbGRyZW4ubGVuZ3RoLTUsNSksbj1uZXcgR2kodCk7aWYoZS5wYXJlbnQpe2Uuc2l6ZS09bi5zaXplLGUuaGVpZ2h0LT1uLmhlaWdodDt2YXIgcj1mKGUucGFyZW50LmNoaWxkcmVuLGUpO2UucGFyZW50LmNoaWxkcmVuLnNwbGljZShyKzEsMCxuKX1lbHNle3ZhciBpPW5ldyBHaShlLmNoaWxkcmVuKTtpLnBhcmVudD1lLGUuY2hpbGRyZW49W2ksbl0sZT1pfW4ucGFyZW50PWUucGFyZW50fXdoaWxlKGUuY2hpbGRyZW4ubGVuZ3RoPjEwKTtlLnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMsaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytpKXt2YXIgbz1yLmNoaWxkcmVuW2ldLGE9by5jaHVua1NpemUoKTtpZihlPGEpe3ZhciBzPU1hdGgubWluKHQsYS1lKTtpZihvLml0ZXJOKGUscyxuKSlyZXR1cm4hMDtpZigwPT0odC09cykpYnJlYWs7ZT0wfWVsc2UgZS09YX19fTt2YXIgRnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYobilmb3IodmFyIGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYocltpXT1uW2ldKTt0aGlzLmRvYz1lLHRoaXMubm9kZT10fTtGcy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5kb2MuY20sbj10aGlzLmxpbmUud2lkZ2V0cyxyPXRoaXMubGluZSxpPUYocik7aWYobnVsbCE9aSYmbil7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pbltvXT09ZSYmbi5zcGxpY2Uoby0tLDEpO24ubGVuZ3RofHwoci53aWRnZXRzPW51bGwpO3ZhciBhPVB0KHRoaXMpO08ocixNYXRoLm1heCgwLHIuaGVpZ2h0LWEpKSx0JiYoaHIodCxmdW5jdGlvbigpe1ZpKHQsciwtYSksYnIodCxpLCJ3aWRnZXQiKX0pLEN0KHQsImxpbmVXaWRnZXRDbGVhcmVkIix0LHRoaXMsaSkpfX0sRnMucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5oZWlnaHQsbj10aGlzLmRvYy5jbSxyPXRoaXMubGluZTt0aGlzLmhlaWdodD1udWxsO3ZhciBpPVB0KHRoaXMpLXQ7aSYmKE8ocixyLmhlaWdodCtpKSxuJiZocihuLGZ1bmN0aW9uKCl7bi5jdXJPcC5mb3JjZVVwZGF0ZT0hMCxWaShuLHIsaSksQ3QobiwibGluZVdpZGdldENoYW5nZWQiLG4sZSxGKHIpKX0pKX0sRmUoRnMpO3ZhciBOcz0wLElzPWZ1bmN0aW9uKGUsdCl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9dCx0aGlzLmRvYz1lLHRoaXMuaWQ9KytOc307SXMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sbj10JiYhdC5jdXJPcDtpZihuJiZhcih0KSxPZSh0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZDdCh0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgaT1udWxsLG89bnVsbCxhPTA7YTx0aGlzLmxpbmVzLmxlbmd0aDsrK2Epe3ZhciBzPWUubGluZXNbYV0sdT1RKHMubWFya2VkU3BhbnMsZSk7dCYmIWUuY29sbGFwc2VkP2JyKHQsRihzKSwidGV4dCIpOnQmJihudWxsIT11LnRvJiYobz1GKHMpKSxudWxsIT11LmZyb20mJihpPUYocykpKSxzLm1hcmtlZFNwYW5zPUsocy5tYXJrZWRTcGFucyx1KSxudWxsPT11LmZyb20mJmUuY29sbGFwc2VkJiYheWUoZS5kb2MscykmJnQmJk8ocyx4bih0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBjPTA7Yzx0aGlzLmxpbmVzLmxlbmd0aDsrK2Mpe3ZhciBsPWZlKGUubGluZXNbY10pLHA9eGUobCk7cD50LmRpc3BsYXkubWF4TGluZUxlbmd0aCYmKHQuZGlzcGxheS5tYXhMaW5lPWwsdC5kaXNwbGF5Lm1heExpbmVMZW5ndGg9cCx0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApfW51bGwhPWkmJnQmJnRoaXMuY29sbGFwc2VkJiZ2cih0LGksbysxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmd2kodC5kb2MpKSx0JiZDdCh0LCJtYXJrZXJDbGVhcmVkIix0LHRoaXMsaSxvKSxuJiZzcih0KSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuY2xlYXIoKX19LElzLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztudWxsPT1lJiYiYm9va21hcmsiPT10aGlzLnR5cGUmJihlPTEpO2Zvcih2YXIgcixpLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9bi5saW5lc1tvXSxzPVEoYS5tYXJrZWRTcGFucyxuKTtpZihudWxsIT1zLmZyb20mJihyPVAodD9hOkYoYSkscy5mcm9tKSwtMT09ZSkpcmV0dXJuIHI7aWYobnVsbCE9cy50byYmKGk9UCh0P2E6RihhKSxzLnRvKSwxPT1lKSlyZXR1cm4gaX1yZXR1cm4gciYme2Zyb206cix0bzppfX0sSXMucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5maW5kKC0xLCEwKSxuPXRoaXMscj10aGlzLmRvYy5jbTt0JiZyJiZocihyLGZ1bmN0aW9uKCl7dmFyIGk9dC5saW5lLG89Rih0LmxpbmUpLGE9V3QocixvKTtpZihhJiYoZW4oYSksci5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXIuY3VyT3AuZm9yY2VVcGRhdGU9ITApLHIuY3VyT3AudXBkYXRlTWF4TGluZT0hMCwheWUobi5kb2MsaSkmJm51bGwhPW4uaGVpZ2h0KXt2YXIgcz1uLmhlaWdodDtuLmhlaWdodD1udWxsO3ZhciB1PVB0KG4pLXM7dSYmTyhpLGkuaGVpZ2h0K3UpfUN0KHIsIm1hcmtlckNoYW5nZWQiLHIsZSl9KX0sSXMucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIHQ9dGhpcy5kb2MuY20uY3VyT3A7dC5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT1mKHQubWF5YmVIaWRkZW5NYXJrZXJzLHRoaXMpfHwodC5tYXliZVVuaGlkZGVuTWFya2Vyc3x8KHQubWF5YmVVbmhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfXRoaXMubGluZXMucHVzaChlKX0sSXMucHJvdG90eXBlLmRldGFjaExpbmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lcy5zcGxpY2UoZih0aGlzLmxpbmVzLGUpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciB0PXRoaXMuZG9jLmNtLmN1ck9wOyh0Lm1heWJlSGlkZGVuTWFya2Vyc3x8KHQubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LEZlKElzKTt2YXIgTHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMubWFya2Vycz1lLHRoaXMucHJpbWFyeT10O2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ucGFyZW50PW59O0xzLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCllLm1hcmtlcnNbdF0uY2xlYXIoKTtDdCh0aGlzLCJjbGVhciIpfX0sTHMucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoZSx0KX0sRmUoTHMpO3ZhciBQcz0wLE1zPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoISh0aGlzIGluc3RhbmNlb2YgTXMpKXJldHVybiBuZXcgTXMoZSx0LG4scixpKTtudWxsPT1uJiYobj0wKSxHaS5jYWxsKHRoaXMsW25ldyB6aShbbmV3IG1zKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PW4sdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMubW9kZUZyb250aWVyPXRoaXMuaGlnaGxpZ2h0RnJvbnRpZXI9bjt2YXIgbz1QKG4sMCk7dGhpcy5zZWw9VXIobyksdGhpcy5oaXN0b3J5PW5ldyB0aShudWxsKSx0aGlzLmlkPSsrUHMsdGhpcy5tb2RlT3B0aW9uPXQsdGhpcy5saW5lU2VwPXIsdGhpcy5kaXJlY3Rpb249InJ0bCI9PWk/InJ0bCI6Imx0ciIsdGhpcy5leHRlbmQ9ITEsInN0cmluZyI9PXR5cGVvZiBlJiYoZT10aGlzLnNwbGl0TGluZXMoZSkpLEpyKHRoaXMse2Zyb206byx0bzpvLHRleHQ6ZX0pLENpKHRoaXMsVXIobykscWEpfTtNcy5wcm90b3R5cGU9YihHaS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOk1zLGl0ZXI6ZnVuY3Rpb24oZSx0LG4pe24/dGhpcy5pdGVyTihlLXRoaXMuZmlyc3QsdC1lLG4pOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSxlKX0saW5zZXJ0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8dC5sZW5ndGg7KytyKW4rPXRbcl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIoZS10aGlzLmZpcnN0LHQsbil9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3RoaXMucmVtb3ZlSW5uZXIoZS10aGlzLmZpcnN0LHQpfSxnZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1UKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSk7cmV0dXJuITE9PT1lP3Q6dC5qb2luKGV8fHRoaXMubGluZVNlcGFyYXRvcigpKX0sc2V0VmFsdWU6eXIoZnVuY3Rpb24oZSl7dmFyIHQ9UCh0aGlzLmZpcnN0LDApLG49dGhpcy5maXJzdCt0aGlzLnNpemUtMTtGaSh0aGlzLHtmcm9tOnQsdG86UChuLEEodGhpcyxuKS50ZXh0Lmxlbmd0aCksdGV4dDp0aGlzLnNwbGl0TGluZXMoZSksb3JpZ2luOiJzZXRWYWx1ZSIsZnVsbDohMH0sITApLHRoaXMuY20mJktuKHRoaXMuY20sMCwwKSxDaSh0aGlzLFVyKHQpLHFhKX0pLHJlcGxhY2VSYW5nZTpmdW5jdGlvbihlLHQsbixyKXt0PXoodGhpcyx0KSxuPW4/eih0aGlzLG4pOnQsamkodGhpcyxlLHQsbixyKX0sZ2V0UmFuZ2U6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPV8odGhpcyx6KHRoaXMsZSkseih0aGlzLHQpKTtyZXR1cm4hMT09PW4/cjpyLmpvaW4obnx8dGhpcy5saW5lU2VwYXJhdG9yKCkpfSxnZXRMaW5lOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZUhhbmRsZShlKTtyZXR1cm4gdCYmdC50ZXh0fSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKGUpe2lmKEkodGhpcyxlKSlyZXR1cm4gQSh0aGlzLGUpfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBGKGUpfSxnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYoZT1BKHRoaXMsZSkpLGZlKGUpfSxsaW5lQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfSxmaXJzdExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdH0sbGFzdExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdCt0aGlzLnNpemUtMX0sY2xpcFBvczpmdW5jdGlvbihlKXtyZXR1cm4geih0aGlzLGUpfSxnZXRDdXJzb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZWwucHJpbWFyeSgpO3JldHVybiBudWxsPT1lfHwiaGVhZCI9PWU/dC5oZWFkOiJhbmNob3IiPT1lP3QuYW5jaG9yOiJlbmQiPT1lfHwidG8iPT1lfHwhMT09PWU/dC50bygpOnQuZnJvbSgpfSxsaXN0U2VsZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbC5yYW5nZXN9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCl9LHNldEN1cnNvcjp5cihmdW5jdGlvbihlLHQsbil7dmkodGhpcyx6KHRoaXMsIm51bWJlciI9PXR5cGVvZiBlP1AoZSx0fHwwKTplKSxudWxsLG4pfSksc2V0U2VsZWN0aW9uOnlyKGZ1bmN0aW9uKGUsdCxuKXt2aSh0aGlzLHoodGhpcyxlKSx6KHRoaXMsdHx8ZSksbil9KSxleHRlbmRTZWxlY3Rpb246eXIoZnVuY3Rpb24oZSx0LG4pe21pKHRoaXMseih0aGlzLGUpLHQmJnoodGhpcyx0KSxuKX0pLGV4dGVuZFNlbGVjdGlvbnM6eXIoZnVuY3Rpb24oZSx0KXtnaSh0aGlzLFYodGhpcyxlKSx0KX0pLGV4dGVuZFNlbGVjdGlvbnNCeTp5cihmdW5jdGlvbihlLHQpe2dpKHRoaXMsVih0aGlzLGcodGhpcy5zZWwucmFuZ2VzLGUpKSx0KX0pLHNldFNlbGVjdGlvbnM6eXIoZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYoZS5sZW5ndGgpe2Zvcih2YXIgaT1bXSxvPTA7bzxlLmxlbmd0aDtvKyspaVtvXT1uZXcgT3MoeihyLGVbb10uYW5jaG9yKSx6KHIsZVtvXS5oZWFkKSk7bnVsbD09dCYmKHQ9TWF0aC5taW4oZS5sZW5ndGgtMSx0aGlzLnNlbC5wcmltSW5kZXgpKSxDaSh0aGlzLCRyKGksdCksbil9fSksYWRkU2VsZWN0aW9uOnlyKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnNlbC5yYW5nZXMuc2xpY2UoMCk7ci5wdXNoKG5ldyBPcyh6KHRoaXMsZSkseih0aGlzLHR8fGUpKSksQ2kodGhpcywkcihyLHIubGVuZ3RoLTEpLG4pfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXMscj10aGlzLnNlbC5yYW5nZXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1fKG4scltpXS5mcm9tKCkscltpXS50bygpKTt0PXQ/dC5jb25jYXQobyk6b31yZXR1cm4hMT09PWU/dDp0LmpvaW4oZXx8dGhpcy5saW5lU2VwYXJhdG9yKCkpfSxnZXRTZWxlY3Rpb25zOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLG49W10scj10aGlzLnNlbC5yYW5nZXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1fKHQscltpXS5mcm9tKCkscltpXS50bygpKTshMSE9PWUmJihvPW8uam9pbihlfHx0LmxpbmVTZXBhcmF0b3IoKSkpLG5baV09b31yZXR1cm4gbn0scmVwbGFjZVNlbGVjdGlvbjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLGk9MDtpPHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7aSsrKXJbaV09ZTt0aGlzLnJlcGxhY2VTZWxlY3Rpb25zKHIsdCxufHwiK2lucHV0Iil9LHJlcGxhY2VTZWxlY3Rpb25zOnlyKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGhpcyxpPVtdLG89dGhpcy5zZWwsYT0wO2E8by5yYW5nZXMubGVuZ3RoO2ErKyl7dmFyIHM9by5yYW5nZXNbYV07aVthXT17ZnJvbTpzLmZyb20oKSx0bzpzLnRvKCksdGV4dDpyLnNwbGl0TGluZXMoZVthXSksb3JpZ2luOm59fWZvcih2YXIgdT10JiYiZW5kIiE9dCYmSHIodGhpcyxpLHQpLGM9aS5sZW5ndGgtMTtjPj0wO2MtLSlGaShyLGlbY10pO3U/eGkodGhpcyx1KTp0aGlzLmNtJiZRbih0aGlzLmNtKX0pLHVuZG86eXIoZnVuY3Rpb24oKXtJaSh0aGlzLCJ1bmRvIil9KSxyZWRvOnlyKGZ1bmN0aW9uKCl7SWkodGhpcywicmVkbyIpfSksdW5kb1NlbGVjdGlvbjp5cihmdW5jdGlvbigpe0lpKHRoaXMsInVuZG8iLCEwKX0pLHJlZG9TZWxlY3Rpb246eXIoZnVuY3Rpb24oKXtJaSh0aGlzLCJyZWRvIiwhMCl9KSxzZXRFeHRlbmRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5leHRlbmQ9ZX0sZ2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXh0ZW5kfSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmhpc3RvcnksdD0wLG49MCxyPTA7cjxlLmRvbmUubGVuZ3RoO3IrKyllLmRvbmVbcl0ucmFuZ2VzfHwrK3Q7Zm9yKHZhciBpPTA7aTxlLnVuZG9uZS5sZW5ndGg7aSsrKWUudW5kb25lW2ldLnJhbmdlc3x8KytuO3JldHVybnt1bmRvOnQscmVkbzpufX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PW5ldyB0aSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbighMCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih0aGlzLmhpc3RvcnkubGFzdE9wPXRoaXMuaGlzdG9yeS5sYXN0U2VsT3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCksdGhpcy5oaXN0b3J5LmdlbmVyYXRpb259LGlzQ2xlYW46ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uPT0oZXx8dGhpcy5jbGVhbkdlbmVyYXRpb24pfSxnZXRIaXN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ZGkodGhpcy5oaXN0b3J5LmRvbmUpLHVuZG9uZTpkaSh0aGlzLmhpc3RvcnkudW5kb25lKX19LHNldEhpc3Rvcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oaXN0b3J5PW5ldyB0aSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7dC5kb25lPWRpKGUuZG9uZS5zbGljZSgwKSxudWxsLCEwKSx0LnVuZG9uZT1kaShlLnVuZG9uZS5zbGljZSgwKSxudWxsLCEwKX0sc2V0R3V0dGVyTWFya2VyOnlyKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVWkodGhpcyxlLCJndXR0ZXIiLGZ1bmN0aW9uKGUpe3ZhciByPWUuZ3V0dGVyTWFya2Vyc3x8KGUuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIHJbdF09biwhbiYmRShyKSYmKGUuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6eXIoZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLml0ZXIoZnVuY3Rpb24obil7bi5ndXR0ZXJNYXJrZXJzJiZuLmd1dHRlck1hcmtlcnNbZV0mJlVpKHQsbiwiZ3V0dGVyIixmdW5jdGlvbigpe3JldHVybiBuLmd1dHRlck1hcmtlcnNbZV09bnVsbCxFKG4uZ3V0dGVyTWFya2VycykmJihuLmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pfSksbGluZUluZm86ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZighSSh0aGlzLGUpKXJldHVybiBudWxsO2lmKHQ9ZSwhKGU9QSh0aGlzLGUpKSlyZXR1cm4gbnVsbH1lbHNlIGlmKG51bGw9PSh0PUYoZSkpKXJldHVybiBudWxsO3JldHVybntsaW5lOnQsaGFuZGxlOmUsdGV4dDplLnRleHQsZ3V0dGVyTWFya2VyczplLmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOmUudGV4dENsYXNzLGJnQ2xhc3M6ZS5iZ0NsYXNzLHdyYXBDbGFzczplLndyYXBDbGFzcyx3aWRnZXRzOmUud2lkZ2V0c319LGFkZExpbmVDbGFzczp5cihmdW5jdGlvbih0LG4scil7cmV0dXJuIFVpKHRoaXMsdCwiZ3V0dGVyIj09bj8iZ3V0dGVyIjoiY2xhc3MiLGZ1bmN0aW9uKHQpe3ZhciBpPSJ0ZXh0Ij09bj8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PW4/ImJnQ2xhc3MiOiJndXR0ZXIiPT1uPyJndXR0ZXJDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtpXSl7aWYoZShyKS50ZXN0KHRbaV0pKXJldHVybiExO3RbaV0rPSIgIityfWVsc2UgdFtpXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6eXIoZnVuY3Rpb24odCxuLHIpe3JldHVybiBVaSh0aGlzLHQsImd1dHRlciI9PW4/Imd1dHRlciI6ImNsYXNzIixmdW5jdGlvbih0KXt2YXIgaT0idGV4dCI9PW4/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1uPyJiZ0NsYXNzIjoiZ3V0dGVyIj09bj8iZ3V0dGVyQ2xhc3MiOiJ3cmFwQ2xhc3MiLG89dFtpXTtpZighbylyZXR1cm4hMTtpZihudWxsPT1yKXRbaV09bnVsbDtlbHNle3ZhciBhPW8ubWF0Y2goZShyKSk7aWYoIWEpcmV0dXJuITE7dmFyIHM9YS5pbmRleCthWzBdLmxlbmd0aDt0W2ldPW8uc2xpY2UoMCxhLmluZGV4KSsoYS5pbmRleCYmcyE9by5sZW5ndGg/IiAiOiIiKStvLnNsaWNlKHMpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OnlyKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcWkodGhpcyxlLHQsbil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKGUpe2UuY2xlYXIoKX0sbWFya1RleHQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBIaSh0aGlzLHoodGhpcyxlKSx6KHRoaXMsdCksbixuJiZuLnR5cGV8fCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbihlLHQpe3ZhciBuPXtyZXBsYWNlZFdpdGg6dCYmKG51bGw9PXQubm9kZVR5cGU/dC53aWRnZXQ6dCksaW5zZXJ0TGVmdDp0JiZ0Lmluc2VydExlZnQsY2xlYXJXaGVuRW1wdHk6ITEsc2hhcmVkOnQmJnQuc2hhcmVkLGhhbmRsZU1vdXNlRXZlbnRzOnQmJnQuaGFuZGxlTW91c2VFdmVudHN9O3JldHVybiBlPXoodGhpcyxlKSxIaSh0aGlzLGUsZSxuLCJib29rbWFyayIpfSxmaW5kTWFya3NBdDpmdW5jdGlvbihlKXtlPXoodGhpcyxlKTt2YXIgdD1bXSxuPUEodGhpcyxlLmxpbmUpLm1hcmtlZFNwYW5zO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDsrK3Ipe3ZhciBpPW5bcl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD1lLmNoKSYmKG51bGw9PWkudG98fGkudG8+PWUuY2gpJiZ0LnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIHR9LGZpbmRNYXJrczpmdW5jdGlvbihlLHQsbil7ZT16KHRoaXMsZSksdD16KHRoaXMsdCk7dmFyIHI9W10saT1lLmxpbmU7cmV0dXJuIHRoaXMuaXRlcihlLmxpbmUsdC5saW5lKzEsZnVuY3Rpb24obyl7dmFyIGE9by5tYXJrZWRTcGFucztpZihhKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgdT1hW3NdO251bGwhPXUudG8mJmk9PWUubGluZSYmZS5jaD49dS50b3x8bnVsbD09dS5mcm9tJiZpIT1lLmxpbmV8fG51bGwhPXUuZnJvbSYmaT09dC5saW5lJiZ1LmZyb20+PXQuY2h8fG4mJiFuKHUubWFya2VyKXx8ci5wdXNoKHUubWFya2VyLnBhcmVudHx8dS5tYXJrZXIpfSsraX0pLHJ9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbih0KXt2YXIgbj10Lm1hcmtlZFNwYW5zO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDsrK3IpbnVsbCE9bltyXS5mcm9tJiZlLnB1c2gobltyXS5tYXJrZXIpfSksZX0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5maXJzdCxyPXRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkudGV4dC5sZW5ndGgrcjtpZihvPmUpcmV0dXJuIHQ9ZSwhMDtlLT1vLCsrbn0pLHoodGhpcyxQKG4sdCkpfSxpbmRleEZyb21Qb3M6ZnVuY3Rpb24oZSl7ZT16KHRoaXMsZSk7dmFyIHQ9ZS5jaDtpZihlLmxpbmU8dGhpcy5maXJzdHx8ZS5jaDwwKXJldHVybiAwO3ZhciBuPXRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtyZXR1cm4gdGhpcy5pdGVyKHRoaXMuZmlyc3QsZS5saW5lLGZ1bmN0aW9uKGUpe3QrPWUudGV4dC5sZW5ndGgrbn0pLHR9LGNvcHk6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE1zKFQodGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCx0aGlzLmxpbmVTZXAsdGhpcy5kaXJlY3Rpb24pO3JldHVybiB0LnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0LnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LHQuc2VsPXRoaXMuc2VsLHQuZXh0ZW5kPSExLGUmJih0Lmhpc3RvcnkudW5kb0RlcHRoPXRoaXMuaGlzdG9yeS51bmRvRGVwdGgsdC5zZXRIaXN0b3J5KHRoaXMuZ2V0SGlzdG9yeSgpKSksdH0sbGlua2VkRG9jOmZ1bmN0aW9uKGUpe2V8fChlPXt9KTt2YXIgdD10aGlzLmZpcnN0LG49dGhpcy5maXJzdCt0aGlzLnNpemU7bnVsbCE9ZS5mcm9tJiZlLmZyb20+dCYmKHQ9ZS5mcm9tKSxudWxsIT1lLnRvJiZlLnRvPG4mJihuPWUudG8pO3ZhciByPW5ldyBNcyhUKHRoaXMsdCxuKSxlLm1vZGV8fHRoaXMubW9kZU9wdGlvbix0LHRoaXMubGluZVNlcCx0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGUuc2hhcmVkSGlzdCYmKHIuaGlzdG9yeT10aGlzLmhpc3RvcnkpLCh0aGlzLmxpbmtlZHx8KHRoaXMubGlua2VkPVtdKSkucHVzaCh7ZG9jOnIsc2hhcmVkSGlzdDplLnNoYXJlZEhpc3R9KSxyLmxpbmtlZD1be2RvYzp0aGlzLGlzUGFyZW50OiEwLHNoYXJlZEhpc3Q6ZS5zaGFyZWRIaXN0fV0sS2kocixRaSh0aGlzKSkscn0sdW5saW5rRG9jOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZSBpbnN0YW5jZW9mIFFvJiYoZT1lLmRvYyksdGhpcy5saW5rZWQpZm9yKHZhciBuPTA7bjx0aGlzLmxpbmtlZC5sZW5ndGg7KytuKXt2YXIgcj10LmxpbmtlZFtuXTtpZihyLmRvYz09ZSl7dC5saW5rZWQuc3BsaWNlKG4sMSksZS51bmxpbmtEb2ModCksSmkoUWkodCkpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO1lyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGkucHVzaChlLmlkKX0sITApLGUuaGlzdG9yeT1uZXcgdGkobnVsbCksZS5oaXN0b3J5LmRvbmU9ZGkodGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1kaSh0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24oZSl7WXIodGhpcyxlKX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfSxzcGxpdExpbmVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpbmVTZXA/ZS5zcGxpdCh0aGlzLmxpbmVTZXApOmlzKGUpfSxsaW5lU2VwYXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZVNlcHx8IlxuIn0sc2V0RGlyZWN0aW9uOnlyKGZ1bmN0aW9uKGUpeyJydGwiIT1lJiYoZT0ibHRyIiksZSE9dGhpcy5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj1lLHRoaXMuaXRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmRlcj1udWxsfSksdGhpcy5jbSYmZWkodGhpcy5jbSkpfSl9KSxNcy5wcm90b3R5cGUuZWFjaExpbmU9TXMucHJvdG90eXBlLml0ZXI7Zm9yKHZhciBqcz0wLFJzPSExLEJzPXszOiJQYXVzZSIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDYxOiI9Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDY6IioiLDEwNzoiPSIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTI3OiJEZWxldGUiLDE0NToiU2Nyb2xsTG9jayIsMTczOiItIiwxODY6IjsiLDE4NzoiPSIsMTg4OiIsIiwxODk6Ii0iLDE5MDoiLiIsMTkxOiIvIiwxOTI6ImAiLDIxOToiWyIsMjIwOiJcXCIsMjIxOiJdIiwyMjI6IiciLDYzMjMyOiJVcCIsNjMyMzM6IkRvd24iLDYzMjM0OiJMZWZ0Iiw2MzIzNToiUmlnaHQiLDYzMjcyOiJEZWxldGUiLDYzMjczOiJIb21lIiw2MzI3NToiRW5kIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMzAyOiJJbnNlcnQifSwkcz0wOyRzPDEwOyRzKyspQnNbJHMrNDhdPUJzWyRzKzk2XT1TdHJpbmcoJHMpO2Zvcih2YXIgVXM9NjU7VXM8PTkwO1VzKyspQnNbVXNdPVN0cmluZy5mcm9tQ2hhckNvZGUoVXMpO2Zvcih2YXIgenM9MTt6czw9MTI7enMrKylCc1t6cysxMTFdPUJzW3pzKzYzMjM1XT0iRiIrenM7dmFyIEdzPXt9O0dzLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIixFc2M6InNpbmdsZVNlbGVjdGlvbiJ9LEdzLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtVXAiOiJnb0xpbmVVcCIsIkN0cmwtRG93biI6ImdvTGluZURvd24iLCJDdHJsLUxlZnQiOiJnb0dyb3VwTGVmdCIsIkN0cmwtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJBbHQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQWx0LVJpZ2h0IjoiZ29MaW5lRW5kIiwiQ3RybC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkN0cmwtUyI6InNhdmUiLCJDdHJsLUYiOiJmaW5kIiwiQ3RybC1HIjoiZmluZE5leHQiLCJTaGlmdC1DdHJsLUciOiJmaW5kUHJldiIsIlNoaWZ0LUN0cmwtRiI6InJlcGxhY2UiLCJTaGlmdC1DdHJsLVIiOiJyZXBsYWNlQWxsIiwiQ3RybC1bIjoiaW5kZW50TGVzcyIsIkN0cmwtXSI6ImluZGVudE1vcmUiLCJDdHJsLVUiOiJ1bmRvU2VsZWN0aW9uIiwiU2hpZnQtQ3RybC1VIjoicmVkb1NlbGVjdGlvbiIsIkFsdC1VIjoicmVkb1NlbGVjdGlvbiIsZmFsbHRocm91Z2g6ImJhc2ljIn0sR3MuZW1hY3N5PXsiQ3RybC1GIjoiZ29DaGFyUmlnaHQiLCJDdHJsLUIiOiJnb0NoYXJMZWZ0IiwiQ3RybC1QIjoiZ29MaW5lVXAiLCJDdHJsLU4iOiJnb0xpbmVEb3duIiwiQWx0LUYiOiJnb1dvcmRSaWdodCIsIkFsdC1CIjoiZ29Xb3JkTGVmdCIsIkN0cmwtQSI6ImdvTGluZVN0YXJ0IiwiQ3RybC1FIjoiZ29MaW5lRW5kIiwiQ3RybC1WIjoiZ29QYWdlRG93biIsIlNoaWZ0LUN0cmwtViI6ImdvUGFnZVVwIiwiQ3RybC1EIjoiZGVsQ2hhckFmdGVyIiwiQ3RybC1IIjoiZGVsQ2hhckJlZm9yZSIsIkFsdC1EIjoiZGVsV29yZEFmdGVyIiwiQWx0LUJhY2tzcGFjZSI6ImRlbFdvcmRCZWZvcmUiLCJDdHJsLUsiOiJraWxsTGluZSIsIkN0cmwtVCI6InRyYW5zcG9zZUNoYXJzIiwiQ3RybC1PIjoib3BlbkxpbmUifSxHcy5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtSG9tZSI6ImdvRG9jU3RhcnQiLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZUxlZnQiLCJDbWQtUmlnaHQiOiJnb0xpbmVSaWdodCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsV3JhcHBlZExpbmVMZWZ0IiwiQ21kLURlbGV0ZSI6ImRlbFdyYXBwZWRMaW5lUmlnaHQiLCJDbWQtVSI6InVuZG9TZWxlY3Rpb24iLCJTaGlmdC1DbWQtVSI6InJlZG9TZWxlY3Rpb24iLCJDdHJsLVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIixmYWxsdGhyb3VnaDpbImJhc2ljIiwiZW1hY3N5Il19LEdzLmRlZmF1bHQ9RmE/R3MubWFjRGVmYXVsdDpHcy5wY0RlZmF1bHQ7dmFyIFZzPXtzZWxlY3RBbGw6VGksc2luZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNldFNlbGVjdGlvbihlLmdldEN1cnNvcigiYW5jaG9yIiksZS5nZXRDdXJzb3IoImhlYWQiKSxxYSl9LGtpbGxMaW5lOmZ1bmN0aW9uKGUpe3JldHVybiBmbyhlLGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkoKSl7dmFyIG49QShlLmRvYyx0LmhlYWQubGluZSkudGV4dC5sZW5ndGg7cmV0dXJuIHQuaGVhZC5jaD09biYmdC5oZWFkLmxpbmU8ZS5sYXN0TGluZSgpP3tmcm9tOnQuaGVhZCx0bzpQKHQuaGVhZC5saW5lKzEsMCl9Ontmcm9tOnQuaGVhZCx0bzpQKHQuaGVhZC5saW5lLG4pfX1yZXR1cm57ZnJvbTp0LmZyb20oKSx0bzp0LnRvKCl9fSl9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGUsZnVuY3Rpb24odCl7cmV0dXJue2Zyb206UCh0LmZyb20oKS5saW5lLDApLHRvOnooZS5kb2MsUCh0LnRvKCkubGluZSsxLDApKX19KX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGUsZnVuY3Rpb24oZSl7cmV0dXJue2Zyb206UChlLmZyb20oKS5saW5lLDApLHRvOmUuZnJvbSgpfX0pfSxkZWxXcmFwcGVkTGluZUxlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGUsZnVuY3Rpb24odCl7dmFyIG49ZS5jaGFyQ29vcmRzKHQuaGVhZCwiZGl2IikudG9wKzU7cmV0dXJue2Zyb206ZS5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOm59LCJkaXYiKSx0bzp0LmZyb20oKX19KX0sZGVsV3JhcHBlZExpbmVSaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gZm8oZSxmdW5jdGlvbih0KXt2YXIgbj1lLmNoYXJDb29yZHModC5oZWFkLCJkaXYiKS50b3ArNSxyPWUuY29vcmRzQ2hhcih7bGVmdDplLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOm59LCJkaXYiKTtyZXR1cm57ZnJvbTp0LmZyb20oKSx0bzpyfX0pfSx1bmRvOmZ1bmN0aW9uKGUpe3JldHVybiBlLnVuZG8oKX0scmVkbzpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWRvKCl9LHVuZG9TZWxlY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUudW5kb1NlbGVjdGlvbigpfSxyZWRvU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZG9TZWxlY3Rpb24oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHRlbmRTZWxlY3Rpb24oUChlLmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uKFAoZS5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbih0KXtyZXR1cm4gdm8oZSx0LmhlYWQubGluZSl9LHtvcmlnaW46Iittb3ZlIixiaWFzOjF9KX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24odCl7cmV0dXJuIHhvKGUsdC5oZWFkKX0se29yaWdpbjoiK21vdmUiLGJpYXM6MX0pfSxnb0xpbmVFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHQpe3JldHVybiBibyhlLHQuaGVhZC5saW5lKX0se29yaWdpbjoiK21vdmUiLGJpYXM6LTF9KX0sZ29MaW5lUmlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHQpe3ZhciBuPWUuY3Vyc29yQ29vcmRzKHQuaGVhZCwiZGl2IikudG9wKzU7cmV0dXJuIGUuY29vcmRzQ2hhcih7bGVmdDplLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOm59LCJkaXYiKX0sV2EpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbih0KXt2YXIgbj1lLmN1cnNvckNvb3Jkcyh0LmhlYWQsImRpdiIpLnRvcCs1O3JldHVybiBlLmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6bn0sImRpdiIpfSxXYSl9LGdvTGluZUxlZnRTbWFydDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24odCl7dmFyIG49ZS5jdXJzb3JDb29yZHModC5oZWFkLCJkaXYiKS50b3ArNSxyPWUuY29vcmRzQ2hhcih7bGVmdDowLHRvcDpufSwiZGl2Iik7cmV0dXJuIHIuY2g8ZS5nZXRMaW5lKHIubGluZSkuc2VhcmNoKC9cUy8pP3hvKGUsdC5oZWFkKTpyfSxXYSl9LGdvTGluZVVwOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVWKC0xLCJsaW5lIil9LGdvTGluZURvd246ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVWKDEsInBhZ2UiKX0sZ29DaGFyTGVmdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgtMSwiY29sdW1uIil9LGdvQ29sdW1uUmlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVIKDEsImdyb3VwIil9LGdvR3JvdXBMZWZ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgtMSwiY2hhciIpfSxkZWxDaGFyQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgxLCJ3b3JkIil9LGRlbEdyb3VwQmVmb3JlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGVudFNlbGVjdGlvbigic21hcnQiKX0saW5kZW50TW9yZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2VTZWxlY3Rpb24oIlx0Iil9LGluc2VydFNvZnRUYWI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49ZS5saXN0U2VsZWN0aW9ucygpLHI9ZS5vcHRpb25zLnRhYlNpemUsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLmZyb20oKSxhPXAoZS5nZXRMaW5lKG8ubGluZSksby5jaCxyKTt0LnB1c2goaChyLWElcikpfWUucmVwbGFjZVNlbGVjdGlvbnModCl9LGRlZmF1bHRUYWI6ZnVuY3Rpb24oZSl7ZS5zb21ldGhpbmdTZWxlY3RlZCgpP2UuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTplLmV4ZWNDb21tYW5kKCJpbnNlcnRUYWIiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGhyKGUsZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49W10scj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uZW1wdHkoKSl7dmFyIGk9dFtyXS5oZWFkLG89QShlLmRvYyxpLmxpbmUpLnRleHQ7aWYobylpZihpLmNoPT1vLmxlbmd0aCYmKGk9bmV3IFAoaS5saW5lLGkuY2gtMSkpLGkuY2g+MClpPW5ldyBQKGkubGluZSxpLmNoKzEpLGUucmVwbGFjZVJhbmdlKG8uY2hhckF0KGkuY2gtMSkrby5jaGFyQXQoaS5jaC0yKSxQKGkubGluZSxpLmNoLTIpLGksIit0cmFuc3Bvc2UiKTtlbHNlIGlmKGkubGluZT5lLmRvYy5maXJzdCl7dmFyIGE9QShlLmRvYyxpLmxpbmUtMSkudGV4dDthJiYoaT1uZXcgUChpLmxpbmUsMSksZS5yZXBsYWNlUmFuZ2Uoby5jaGFyQXQoMCkrZS5kb2MubGluZVNlcGFyYXRvcigpK2EuY2hhckF0KGEubGVuZ3RoLTEpLFAoaS5saW5lLTEsYS5sZW5ndGgtMSksaSwiK3RyYW5zcG9zZSIpKX1uLnB1c2gobmV3IE9zKGksaSkpfWUuc2V0U2VsZWN0aW9ucyhuKX0pfSxuZXdsaW5lQW5kSW5kZW50OmZ1bmN0aW9uKGUpe3JldHVybiBocihlLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWUubGlzdFNlbGVjdGlvbnMoKSxuPXQubGVuZ3RoLTE7bj49MDtuLS0pZS5yZXBsYWNlUmFuZ2UoZS5kb2MubGluZVNlcGFyYXRvcigpLHRbbl0uYW5jaG9yLHRbbl0uaGVhZCwiK2lucHV0Iik7dD1lLmxpc3RTZWxlY3Rpb25zKCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS5pbmRlbnRMaW5lKHRbcl0uZnJvbSgpLmxpbmUsbnVsbCwhMCk7UW4oZSl9KX0sb3BlbkxpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJzdGFydCIpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9nZ2xlT3ZlcndyaXRlKCl9fSxxcz1uZXcgJGEsSHM9bnVsbCxXcz1mdW5jdGlvbihlLHQsbil7dGhpcy50aW1lPWUsdGhpcy5wb3M9dCx0aGlzLmJ1dHRvbj1ufTtXcy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMudGltZSs0MDA+ZSYmMD09TSh0LHRoaXMucG9zKSYmbj09dGhpcy5idXR0b259O3ZhciBRcyxLcyxKcz17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19LFlzPXt9LFhzPXt9O1FvLmRlZmF1bHRzPVlzLFFvLm9wdGlvbkhhbmRsZXJzPVhzO3ZhciBacz1bXTtRby5kZWZpbmVJbml0SG9vaz1mdW5jdGlvbihlKXtyZXR1cm4gWnMucHVzaChlKX07dmFyIGV1PW51bGwsdHU9ZnVuY3Rpb24oZSl7dGhpcy5jbT1lLHRoaXMubGFzdEFuY2hvck5vZGU9dGhpcy5sYXN0QW5jaG9yT2Zmc2V0PXRoaXMubGFzdEZvY3VzTm9kZT10aGlzLmxhc3RGb2N1c09mZnNldD1udWxsLHRoaXMucG9sbGluZz1uZXcgJGEsdGhpcy5jb21wb3Npbmc9bnVsbCx0aGlzLmdyYWNlUGVyaW9kPSExLHRoaXMucmVhZERPTVRpbWVvdXQ9bnVsbH07dHUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtpZighX2UoaSxlKSl7aWYoaS5zb21ldGhpbmdTZWxlY3RlZCgpKVlvKHtsaW5lV2lzZTohMSx0ZXh0OmkuZ2V0U2VsZWN0aW9ucygpfSksImN1dCI9PWUudHlwZSYmaS5yZXBsYWNlU2VsZWN0aW9uKCIiLG51bGwsImN1dCIpO2Vsc2V7aWYoIWkub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpcmV0dXJuO3ZhciB0PXRhKGkpO1lvKHtsaW5lV2lzZTohMCx0ZXh0OnQudGV4dH0pLCJjdXQiPT1lLnR5cGUmJmkub3BlcmF0aW9uKGZ1bmN0aW9uKCl7aS5zZXRTZWxlY3Rpb25zKHQucmFuZ2VzLDAscWEpLGkucmVwbGFjZVNlbGVjdGlvbigiIixudWxsLCJjdXQiKX0pfWlmKGUuY2xpcGJvYXJkRGF0YSl7ZS5jbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpO3ZhciBuPWV1LnRleHQuam9pbigiXG4iKTtpZihlLmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsbiksZS5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKT09bilyZXR1cm4gdm9pZCBlLnByZXZlbnREZWZhdWx0KCl9dmFyIGE9cmEoKSxzPWEuZmlyc3RDaGlsZDtpLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShhLGkuZGlzcGxheS5saW5lU3BhY2UuZmlyc3RDaGlsZCkscy52YWx1ZT1ldS50ZXh0LmpvaW4oIlxuIik7dmFyIHU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtCYShzKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChhKSx1LmZvY3VzKCksdT09byYmci5zaG93UHJpbWFyeVNlbGVjdGlvbigpfSw1MCl9fXZhciBuPXRoaXMscj10aGlzLGk9ci5jbSxvPXIuZGl2PWUubGluZURpdjtuYShvLGkub3B0aW9ucy5zcGVsbGNoZWNrKSxucyhvLCJwYXN0ZSIsZnVuY3Rpb24oZSl7X2UoaSxlKXx8Wm8oZSxpKXx8eGE8PTExJiZzZXRUaW1lb3V0KG1yKGksZnVuY3Rpb24oKXtyZXR1cm4gbi51cGRhdGVGcm9tRE9NKCl9KSwyMCl9KSxucyhvLCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbihlKXtuLmNvbXBvc2luZz17ZGF0YTplLmRhdGEsZG9uZTohMX19KSxucyhvLCJjb21wb3NpdGlvbnVwZGF0ZSIsZnVuY3Rpb24oZSl7bi5jb21wb3Npbmd8fChuLmNvbXBvc2luZz17ZGF0YTplLmRhdGEsZG9uZTohMX0pfSksbnMobywiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKGUpe24uY29tcG9zaW5nJiYoZS5kYXRhIT1uLmNvbXBvc2luZy5kYXRhJiZuLnJlYWRGcm9tRE9NU29vbigpLG4uY29tcG9zaW5nLmRvbmU9ITApfSksbnMobywidG91Y2hzdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gci5mb3JjZUNvbXBvc2l0aW9uRW5kKCl9KSxucyhvLCJpbnB1dCIsZnVuY3Rpb24oKXtuLmNvbXBvc2luZ3x8bi5yZWFkRnJvbURPTVNvb24oKX0pLG5zKG8sImNvcHkiLHQpLG5zKG8sImN1dCIsdCl9LHR1LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9VG4odGhpcy5jbSwhMSk7cmV0dXJuIGUuZm9jdXM9dGhpcy5jbS5zdGF0ZS5mb2N1c2VkLGV9LHR1LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCl7ZSYmdGhpcy5jbS5kaXNwbGF5LnZpZXcubGVuZ3RoJiYoKGUuZm9jdXN8fHQpJiZ0aGlzLnNob3dQcmltYXJ5U2VsZWN0aW9uKCksdGhpcy5zaG93TXVsdGlwbGVTZWxlY3Rpb25zKGUpKX0sdHUucHJvdG90eXBlLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNtLmRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmdldFNlbGVjdGlvbigpfSx0dS5wcm90b3R5cGUuc2hvd1ByaW1hcnlTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvbigpLHQ9dGhpcy5jbSxuPXQuZG9jLnNlbC5wcmltYXJ5KCkscj1uLmZyb20oKSxpPW4udG8oKTtpZih0LmRpc3BsYXkudmlld1RvPT10LmRpc3BsYXkudmlld0Zyb218fHIubGluZT49dC5kaXNwbGF5LnZpZXdUb3x8aS5saW5lPHQuZGlzcGxheS52aWV3RnJvbSlyZXR1cm4gdm9pZCBlLnJlbW92ZUFsbFJhbmdlcygpO3ZhciBvPWxhKHQsZS5hbmNob3JOb2RlLGUuYW5jaG9yT2Zmc2V0KSxhPWxhKHQsZS5mb2N1c05vZGUsZS5mb2N1c09mZnNldCk7aWYoIW98fG8uYmFkfHwhYXx8YS5iYWR8fDAhPU0oJChvLGEpLHIpfHwwIT1NKEIobyxhKSxpKSl7dmFyIHM9dC5kaXNwbGF5LnZpZXcsdT1yLmxpbmU+PXQuZGlzcGxheS52aWV3RnJvbSYmYWEodCxyKXx8e25vZGU6c1swXS5tZWFzdXJlLm1hcFsyXSxvZmZzZXQ6MH0sYz1pLmxpbmU8dC5kaXNwbGF5LnZpZXdUbyYmYWEodCxpKTtpZighYyl7dmFyIGw9c1tzLmxlbmd0aC0xXS5tZWFzdXJlLHA9bC5tYXBzP2wubWFwc1tsLm1hcHMubGVuZ3RoLTFdOmwubWFwO2M9e25vZGU6cFtwLmxlbmd0aC0xXSxvZmZzZXQ6cFtwLmxlbmd0aC0yXS1wW3AubGVuZ3RoLTNdfX1pZighdXx8IWMpcmV0dXJuIHZvaWQgZS5yZW1vdmVBbGxSYW5nZXMoKTt2YXIgZixkPWUucmFuZ2VDb3VudCYmZS5nZXRSYW5nZUF0KDApO3RyeXtmPVBhKHUubm9kZSx1Lm9mZnNldCxjLm9mZnNldCxjLm5vZGUpfWNhdGNoKGUpe31mJiYoIW1hJiZ0LnN0YXRlLmZvY3VzZWQ/KGUuY29sbGFwc2UodS5ub2RlLHUub2Zmc2V0KSxmLmNvbGxhcHNlZHx8KGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZShmKSkpOihlLnJlbW92ZUFsbFJhbmdlcygpLGUuYWRkUmFuZ2UoZikpLGQmJm51bGw9PWUuYW5jaG9yTm9kZT9lLmFkZFJhbmdlKGQpOm1hJiZ0aGlzLnN0YXJ0R3JhY2VQZXJpb2QoKSksdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpfX0sdHUucHJvdG90eXBlLnN0YXJ0R3JhY2VQZXJpb2Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2NsZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKSx0aGlzLmdyYWNlUGVyaW9kPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmdyYWNlUGVyaW9kPSExLGUuc2VsZWN0aW9uQ2hhbmdlZCgpJiZlLmNtLm9wZXJhdGlvbihmdW5jdGlvbigpe3JldHVybiBlLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ITB9KX0sMjApfSx0dS5wcm90b3R5cGUuc2hvd011bHRpcGxlU2VsZWN0aW9ucz1mdW5jdGlvbihlKXtuKHRoaXMuY20uZGlzcGxheS5jdXJzb3JEaXYsZS5jdXJzb3JzKSxuKHRoaXMuY20uZGlzcGxheS5zZWxlY3Rpb25EaXYsZS5zZWxlY3Rpb24pfSx0dS5wcm90b3R5cGUucmVtZW1iZXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvbigpO3RoaXMubGFzdEFuY2hvck5vZGU9ZS5hbmNob3JOb2RlLHRoaXMubGFzdEFuY2hvck9mZnNldD1lLmFuY2hvck9mZnNldCx0aGlzLmxhc3RGb2N1c05vZGU9ZS5mb2N1c05vZGUsdGhpcy5sYXN0Rm9jdXNPZmZzZXQ9ZS5mb2N1c09mZnNldH0sdHUucHJvdG90eXBlLnNlbGVjdGlvbkluRWRpdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb24oKTtpZighZS5yYW5nZUNvdW50KXJldHVybiExO3ZhciB0PWUuZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtyZXR1cm4gbyh0aGlzLmRpdix0KX0sdHUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7Im5vY3Vyc29yIiE9dGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5JiYodGhpcy5zZWxlY3Rpb25JbkVkaXRvcigpfHx0aGlzLnNob3dTZWxlY3Rpb24odGhpcy5wcmVwYXJlU2VsZWN0aW9uKCksITApLHRoaXMuZGl2LmZvY3VzKCkpfSx0dS5wcm90b3R5cGUuYmx1cj1mdW5jdGlvbigpe3RoaXMuZGl2LmJsdXIoKX0sdHUucHJvdG90eXBlLmdldEZpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2fSx0dS5wcm90b3R5cGUuc3VwcG9ydHNUb3VjaD1mdW5jdGlvbigpe3JldHVybiEwfSx0dS5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0LmNtLnN0YXRlLmZvY3VzZWQmJih0LnBvbGxTZWxlY3Rpb24oKSx0LnBvbGxpbmcuc2V0KHQuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsZSkpfXZhciB0PXRoaXM7dGhpcy5zZWxlY3Rpb25JbkVkaXRvcigpP3RoaXMucG9sbFNlbGVjdGlvbigpOmhyKHRoaXMuY20sZnVuY3Rpb24oKXtyZXR1cm4gdC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwfSksdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLGUpfSx0dS5wcm90b3R5cGUuc2VsZWN0aW9uQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIGUuYW5jaG9yTm9kZSE9dGhpcy5sYXN0QW5jaG9yTm9kZXx8ZS5hbmNob3JPZmZzZXQhPXRoaXMubGFzdEFuY2hvck9mZnNldHx8ZS5mb2N1c05vZGUhPXRoaXMubGFzdEZvY3VzTm9kZXx8ZS5mb2N1c09mZnNldCE9dGhpcy5sYXN0Rm9jdXNPZmZzZXR9LHR1LnByb3RvdHlwZS5wb2xsU2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5yZWFkRE9NVGltZW91dCYmIXRoaXMuZ3JhY2VQZXJpb2QmJnRoaXMuc2VsZWN0aW9uQ2hhbmdlZCgpKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvbigpLHQ9dGhpcy5jbTtpZihUYSYmRGEmJnRoaXMuY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aCYmc2EoZS5hbmNob3JOb2RlKSlyZXR1cm4gdGhpcy5jbS50cmlnZ2VyT25LZXlEb3duKHt0eXBlOiJrZXlkb3duIixrZXlDb2RlOjgscHJldmVudERlZmF1bHQ6TWF0aC5hYnN9KSx0aGlzLmJsdXIoKSx2b2lkIHRoaXMuZm9jdXMoKTtpZighdGhpcy5jb21wb3Npbmcpe3RoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTt2YXIgbj1sYSh0LGUuYW5jaG9yTm9kZSxlLmFuY2hvck9mZnNldCkscj1sYSh0LGUuZm9jdXNOb2RlLGUuZm9jdXNPZmZzZXQpO24mJnImJmhyKHQsZnVuY3Rpb24oKXtDaSh0LmRvYyxVcihuLHIpLHFhKSwobi5iYWR8fHIuYmFkKSYmKHQuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD0hMCl9KX19fSx0dS5wcm90b3R5cGUucG9sbENvbnRlbnQ9ZnVuY3Rpb24oKXtudWxsIT10aGlzLnJlYWRET01UaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpLHRoaXMucmVhZERPTVRpbWVvdXQ9bnVsbCk7dmFyIGU9dGhpcy5jbSx0PWUuZGlzcGxheSxuPWUuZG9jLnNlbC5wcmltYXJ5KCkscj1uLmZyb20oKSxpPW4udG8oKTtpZigwPT1yLmNoJiZyLmxpbmU+ZS5maXJzdExpbmUoKSYmKHI9UChyLmxpbmUtMSxBKGUuZG9jLHIubGluZS0xKS5sZW5ndGgpKSxpLmNoPT1BKGUuZG9jLGkubGluZSkudGV4dC5sZW5ndGgmJmkubGluZTxlLmxhc3RMaW5lKCkmJihpPVAoaS5saW5lKzEsMCkpLHIubGluZTx0LnZpZXdGcm9tfHxpLmxpbmU+dC52aWV3VG8tMSlyZXR1cm4hMTt2YXIgbyxhLHM7ci5saW5lPT10LnZpZXdGcm9tfHwwPT0obz1BbihlLHIubGluZSkpPyhhPUYodC52aWV3WzBdLmxpbmUpLHM9dC52aWV3WzBdLm5vZGUpOihhPUYodC52aWV3W29dLmxpbmUpLHM9dC52aWV3W28tMV0ubm9kZS5uZXh0U2libGluZyk7dmFyIHUsYyxsPUFuKGUsaS5saW5lKTtpZihsPT10LnZpZXcubGVuZ3RoLTE/KHU9dC52aWV3VG8tMSxjPXQubGluZURpdi5sYXN0Q2hpbGQpOih1PUYodC52aWV3W2wrMV0ubGluZSktMSxjPXQudmlld1tsKzFdLm5vZGUucHJldmlvdXNTaWJsaW5nKSwhcylyZXR1cm4hMTtmb3IodmFyIHA9ZS5kb2Muc3BsaXRMaW5lcyhjYShlLHMsYyxhLHUpKSxmPV8oZS5kb2MsUChhLDApLFAodSxBKGUuZG9jLHUpLnRleHQubGVuZ3RoKSk7cC5sZW5ndGg+MSYmZi5sZW5ndGg+MTspaWYobShwKT09bShmKSlwLnBvcCgpLGYucG9wKCksdS0tO2Vsc2V7aWYocFswXSE9ZlswXSlicmVhaztwLnNoaWZ0KCksZi5zaGlmdCgpLGErK31mb3IodmFyIGQ9MCxoPTAsZz1wWzBdLHk9ZlswXSx2PU1hdGgubWluKGcubGVuZ3RoLHkubGVuZ3RoKTtkPHYmJmcuY2hhckNvZGVBdChkKT09eS5jaGFyQ29kZUF0KGQpOykrK2Q7Zm9yKHZhciBiPW0ocCkseD1tKGYpLEM9TWF0aC5taW4oYi5sZW5ndGgtKDE9PXAubGVuZ3RoP2Q6MCkseC5sZW5ndGgtKDE9PWYubGVuZ3RoP2Q6MCkpO2g8QyYmYi5jaGFyQ29kZUF0KGIubGVuZ3RoLWgtMSk9PXguY2hhckNvZGVBdCh4Lmxlbmd0aC1oLTEpOykrK2g7aWYoMT09cC5sZW5ndGgmJjE9PWYubGVuZ3RoJiZhPT1yLmxpbmUpZm9yKDtkJiZkPnIuY2gmJmIuY2hhckNvZGVBdChiLmxlbmd0aC1oLTEpPT14LmNoYXJDb2RlQXQoeC5sZW5ndGgtaC0xKTspZC0tLGgrKztwW3AubGVuZ3RoLTFdPWIuc2xpY2UoMCxiLmxlbmd0aC1oKS5yZXBsYWNlKC9eXHUyMDBiKy8sIiIpLHBbMF09cFswXS5zbGljZShkKS5yZXBsYWNlKC9cdTIwMGIrJC8sIiIpO3ZhciBFPVAoYSxkKSxEPVAodSxmLmxlbmd0aD9tKGYpLmxlbmd0aC1oOjApO3JldHVybiBwLmxlbmd0aD4xfHxwWzBdfHxNKEUsRCk/KGppKGUuZG9jLHAsRSxELCIraW5wdXQiKSwhMCk6dm9pZCAwfSx0dS5wcm90b3R5cGUuZW5zdXJlUG9sbGVkPWZ1bmN0aW9uKCl7dGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCl9LHR1LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpfSx0dS5wcm90b3R5cGUuZm9yY2VDb21wb3NpdGlvbkVuZD1mdW5jdGlvbigpe3RoaXMuY29tcG9zaW5nJiYoY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpLHRoaXMuY29tcG9zaW5nPW51bGwsdGhpcy51cGRhdGVGcm9tRE9NKCksdGhpcy5kaXYuYmx1cigpLHRoaXMuZGl2LmZvY3VzKCkpfSx0dS5wcm90b3R5cGUucmVhZEZyb21ET01Tb29uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztudWxsPT10aGlzLnJlYWRET01UaW1lb3V0JiYodGhpcy5yZWFkRE9NVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZS5yZWFkRE9NVGltZW91dD1udWxsLGUuY29tcG9zaW5nKXtpZighZS5jb21wb3NpbmcuZG9uZSlyZXR1cm47ZS5jb21wb3Npbmc9bnVsbH1lLnVwZGF0ZUZyb21ET00oKX0sODApKX0sdHUucHJvdG90eXBlLnVwZGF0ZUZyb21ET009ZnVuY3Rpb24oKXt2YXIgZT10aGlzOyF0aGlzLmNtLmlzUmVhZE9ubHkoKSYmdGhpcy5wb2xsQ29udGVudCgpfHxocih0aGlzLmNtLGZ1bmN0aW9uKCl7cmV0dXJuIHZyKGUuY20pfSl9LHR1LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlPWZ1bmN0aW9uKGUpe2UuY29udGVudEVkaXRhYmxlPSJmYWxzZSJ9LHR1LnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKGUpezA9PWUuY2hhckNvZGV8fHRoaXMuY29tcG9zaW5nfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY20uaXNSZWFkT25seSgpfHxtcih0aGlzLmNtLFhvKSh0aGlzLmNtLFN0cmluZy5mcm9tQ2hhckNvZGUobnVsbD09ZS5jaGFyQ29kZT9lLmtleUNvZGU6ZS5jaGFyQ29kZSksMCkpfSx0dS5wcm90b3R5cGUucmVhZE9ubHlDaGFuZ2VkPWZ1bmN0aW9uKGUpe3RoaXMuZGl2LmNvbnRlbnRFZGl0YWJsZT1TdHJpbmcoIm5vY3Vyc29yIiE9ZSl9LHR1LnByb3RvdHlwZS5vbkNvbnRleHRNZW51PWZ1bmN0aW9uKCl7fSx0dS5wcm90b3R5cGUucmVzZXRQb3NpdGlvbj1mdW5jdGlvbigpe30sdHUucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZT0hMDt2YXIgbnU9ZnVuY3Rpb24oZSl7dGhpcy5jbT1lLHRoaXMucHJldklucHV0PSIiLHRoaXMucG9sbGluZ0Zhc3Q9ITEsdGhpcy5wb2xsaW5nPW5ldyAkYSx0aGlzLmhhc1NlbGVjdGlvbj0hMSx0aGlzLmNvbXBvc2luZz1udWxsfTtudS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2lmKCFfZShpLGUpKXtpZihpLnNvbWV0aGluZ1NlbGVjdGVkKCkpWW8oe2xpbmVXaXNlOiExLHRleHQ6aS5nZXRTZWxlY3Rpb25zKCl9KTtlbHNle2lmKCFpLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KXJldHVybjt2YXIgdD10YShpKTtZbyh7bGluZVdpc2U6ITAsdGV4dDp0LnRleHR9KSwiY3V0Ij09ZS50eXBlP2kuc2V0U2VsZWN0aW9ucyh0LnJhbmdlcyxudWxsLHFhKTooci5wcmV2SW5wdXQ9IiIsby52YWx1ZT10LnRleHQuam9pbigiXG4iKSxCYShvKSl9ImN1dCI9PWUudHlwZSYmKGkuc3RhdGUuY3V0SW5jb21pbmc9ITApfX12YXIgbj10aGlzLHI9dGhpcyxpPXRoaXMuY207dGhpcy5jcmVhdGVGaWVsZChlKTt2YXIgbz10aGlzLnRleHRhcmVhO2Uud3JhcHBlci5pbnNlcnRCZWZvcmUodGhpcy53cmFwcGVyLGUud3JhcHBlci5maXJzdENoaWxkKSxfYSYmKG8uc3R5bGUud2lkdGg9IjBweCIpLG5zKG8sImlucHV0IixmdW5jdGlvbigpe2JhJiZ4YT49OSYmbi5oYXNTZWxlY3Rpb24mJihuLmhhc1NlbGVjdGlvbj1udWxsKSxyLnBvbGwoKX0pLG5zKG8sInBhc3RlIixmdW5jdGlvbihlKXtfZShpLGUpfHxabyhlLGkpfHwoaS5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLHIuZmFzdFBvbGwoKSl9KSxucyhvLCJjdXQiLHQpLG5zKG8sImNvcHkiLHQpLG5zKGUuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbih0KXtNdChlLHQpfHxfZShpLHQpfHwoaS5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLHIuZm9jdXMoKSl9KSxucyhlLmxpbmVTcGFjZSwic2VsZWN0c3RhcnQiLGZ1bmN0aW9uKHQpe010KGUsdCl8fE5lKHQpfSksbnMobywiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXt2YXIgZT1pLmdldEN1cnNvcigiZnJvbSIpO3IuY29tcG9zaW5nJiZyLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpLHIuY29tcG9zaW5nPXtzdGFydDplLHJhbmdlOmkubWFya1RleHQoZSxpLmdldEN1cnNvcigidG8iKSx7Y2xhc3NOYW1lOiJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KX19KSxucyhvLCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24oKXtyLmNvbXBvc2luZyYmKHIucG9sbCgpLHIuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksci5jb21wb3Npbmc9bnVsbCl9KX0sbnUucHJvdG90eXBlLmNyZWF0ZUZpZWxkPWZ1bmN0aW9uKGUpe3RoaXMud3JhcHBlcj1yYSgpLHRoaXMudGV4dGFyZWE9dGhpcy53cmFwcGVyLmZpcnN0Q2hpbGR9LG51LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jbSx0PWUuZGlzcGxheSxuPWUuZG9jLHI9VG4oZSk7aWYoZS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBpPWxuKGUsbi5zZWwucHJpbWFyeSgpLmhlYWQsImRpdiIpLG89dC53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IudGVUb3A9TWF0aC5tYXgoMCxNYXRoLm1pbih0LndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLGkudG9wK2EudG9wLW8udG9wKSksci50ZUxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbih0LndyYXBwZXIuY2xpZW50V2lkdGgtMTAsaS5sZWZ0K2EubGVmdC1vLmxlZnQpKX1yZXR1cm4gcn0sbnUucHJvdG90eXBlLnNob3dTZWxlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbSxyPXQuZGlzcGxheTtuKHIuY3Vyc29yRGl2LGUuY3Vyc29ycyksbihyLnNlbGVjdGlvbkRpdixlLnNlbGVjdGlvbiksbnVsbCE9ZS50ZVRvcCYmKHRoaXMud3JhcHBlci5zdHlsZS50b3A9ZS50ZVRvcCsicHgiLHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0PWUudGVMZWZ0KyJweCIpfSxudS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuY29udGV4dE1lbnVQZW5kaW5nJiYhdGhpcy5jb21wb3Npbmcpe3ZhciB0PXRoaXMuY207aWYodC5zb21ldGhpbmdTZWxlY3RlZCgpKXt0aGlzLnByZXZJbnB1dD0iIjt2YXIgbj10LmdldFNlbGVjdGlvbigpO3RoaXMudGV4dGFyZWEudmFsdWU9bix0LnN0YXRlLmZvY3VzZWQmJkJhKHRoaXMudGV4dGFyZWEpLGJhJiZ4YT49OSYmKHRoaXMuaGFzU2VsZWN0aW9uPW4pfWVsc2UgZXx8KHRoaXMucHJldklucHV0PXRoaXMudGV4dGFyZWEudmFsdWU9IiIsYmEmJnhhPj05JiYodGhpcy5oYXNTZWxlY3Rpb249bnVsbCkpfX0sbnUucHJvdG90eXBlLmdldEZpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dGFyZWF9LG51LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG51LnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe2lmKCJub2N1cnNvciIhPXRoaXMuY20ub3B0aW9ucy5yZWFkT25seSYmKCFPYXx8YSgpIT10aGlzLnRleHRhcmVhKSl0cnl7dGhpcy50ZXh0YXJlYS5mb2N1cygpfWNhdGNoKGUpe319LG51LnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dGhpcy50ZXh0YXJlYS5ibHVyKCl9LG51LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy53cmFwcGVyLnN0eWxlLnRvcD10aGlzLndyYXBwZXIuc3R5bGUubGVmdD0wfSxudS5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cz1mdW5jdGlvbigpe3RoaXMuc2xvd1BvbGwoKX0sbnUucHJvdG90eXBlLnNsb3dQb2xsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnBvbGxpbmdGYXN0fHx0aGlzLnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsZnVuY3Rpb24oKXtlLnBvbGwoKSxlLmNtLnN0YXRlLmZvY3VzZWQmJmUuc2xvd1BvbGwoKX0pfSxudS5wcm90b3R5cGUuZmFzdFBvbGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bi5wb2xsKCl8fHQ/KG4ucG9sbGluZ0Zhc3Q9ITEsbi5zbG93UG9sbCgpKToodD0hMCxuLnBvbGxpbmcuc2V0KDYwLGUpKX12YXIgdD0hMSxuPXRoaXM7bi5wb2xsaW5nRmFzdD0hMCxuLnBvbGxpbmcuc2V0KDIwLGUpfSxudS5wcm90b3R5cGUucG9sbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmNtLG49dGhpcy50ZXh0YXJlYSxyPXRoaXMucHJldklucHV0O2lmKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nfHwhdC5zdGF0ZS5mb2N1c2VkfHxvcyhuKSYmIXImJiF0aGlzLmNvbXBvc2luZ3x8dC5pc1JlYWRPbmx5KCl8fHQub3B0aW9ucy5kaXNhYmxlSW5wdXR8fHQuc3RhdGUua2V5U2VxKXJldHVybiExO3ZhciBpPW4udmFsdWU7aWYoaT09ciYmIXQuc29tZXRoaW5nU2VsZWN0ZWQoKSlyZXR1cm4hMTtpZihiYSYmeGE+PTkmJnRoaXMuaGFzU2VsZWN0aW9uPT09aXx8RmEmJi9bXHVmNzAwLVx1ZjdmZl0vLnRlc3QoaSkpcmV0dXJuIHQuZGlzcGxheS5pbnB1dC5yZXNldCgpLCExO2lmKHQuZG9jLnNlbD09dC5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KXt2YXIgbz1pLmNoYXJDb2RlQXQoMCk7aWYoODIwMyE9b3x8cnx8KHI9Ilx1MjAwYiIpLDg2NjY9PW8pcmV0dXJuIHRoaXMucmVzZXQoKSx0aGlzLmNtLmV4ZWNDb21tYW5kKCJ1bmRvIil9Zm9yKHZhciBhPTAscz1NYXRoLm1pbihyLmxlbmd0aCxpLmxlbmd0aCk7YTxzJiZyLmNoYXJDb2RlQXQoYSk9PWkuY2hhckNvZGVBdChhKTspKythO3JldHVybiBocih0LGZ1bmN0aW9uKCl7WG8odCxpLnNsaWNlKGEpLHIubGVuZ3RoLWEsbnVsbCxlLmNvbXBvc2luZz8iKmNvbXBvc2UiOm51bGwpLGkubGVuZ3RoPjFlM3x8aS5pbmRleE9mKCJcbiIpPi0xP24udmFsdWU9ZS5wcmV2SW5wdXQ9IiI6ZS5wcmV2SW5wdXQ9aSxlLmNvbXBvc2luZyYmKGUuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksZS5jb21wb3NpbmcucmFuZ2U9dC5tYXJrVGV4dChlLmNvbXBvc2luZy5zdGFydCx0LmdldEN1cnNvcigidG8iKSx7Y2xhc3NOYW1lOiJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KSl9KSwhMH0sbnUucHJvdG90eXBlLmVuc3VyZVBvbGxlZD1mdW5jdGlvbigpe3RoaXMucG9sbGluZ0Zhc3QmJnRoaXMucG9sbCgpJiYodGhpcy5wb2xsaW5nRmFzdD0hMSl9LG51LnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKCl7YmEmJnhhPj05JiYodGhpcy5oYXNTZWxlY3Rpb249bnVsbCksdGhpcy5mYXN0UG9sbCgpfSxudS5wcm90b3R5cGUub25Db250ZXh0TWVudT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7aWYobnVsbCE9YS5zZWxlY3Rpb25TdGFydCl7dmFyIGU9aS5zb21ldGhpbmdTZWxlY3RlZCgpLHQ9Ilx1MjAwYiIrKGU/YS52YWx1ZToiIik7YS52YWx1ZT0iXHUyMWRhIixhLnZhbHVlPXQsci5wcmV2SW5wdXQ9ZT8iIjoiXHUyMDBiIixhLnNlbGVjdGlvblN0YXJ0PTEsYS5zZWxlY3Rpb25FbmQ9dC5sZW5ndGgsby5zZWxGb3JDb250ZXh0TWVudT1pLmRvYy5zZWx9fWZ1bmN0aW9uIG4oKXtpZihyLmNvbnRleHRNZW51UGVuZGluZz0hMSxyLndyYXBwZXIuc3R5bGUuY3NzVGV4dD1sLGEuc3R5bGUuY3NzVGV4dD1jLGJhJiZ4YTw5JiZvLnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wPXUpLG51bGwhPWEuc2VsZWN0aW9uU3RhcnQpeyghYmF8fGJhJiZ4YTw5KSYmdCgpO3ZhciBlPTAsbj1mdW5jdGlvbigpe28uc2VsRm9yQ29udGV4dE1lbnU9PWkuZG9jLnNlbCYmMD09YS5zZWxlY3Rpb25TdGFydCYmYS5zZWxlY3Rpb25FbmQ+MCYmIlx1MjAwYiI9PXIucHJldklucHV0P21yKGksVGkpKGkpOmUrKzwxMD9vLmRldGVjdGluZ1NlbGVjdEFsbD1zZXRUaW1lb3V0KG4sNTAwKTooby5zZWxGb3JDb250ZXh0TWVudT1udWxsLG8uaW5wdXQucmVzZXQoKSl9O28uZGV0ZWN0aW5nU2VsZWN0QWxsPXNldFRpbWVvdXQobiwyMDApfX12YXIgcj10aGlzLGk9ci5jbSxvPWkuZGlzcGxheSxhPXIudGV4dGFyZWEscz1rbihpLGUpLHU9by5zY3JvbGxlci5zY3JvbGxUb3A7aWYocyYmIXdhKXtpLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51JiYtMT09aS5kb2Muc2VsLmNvbnRhaW5zKHMpJiZtcihpLENpKShpLmRvYyxVcihzKSxxYSk7dmFyIGM9YS5zdHlsZS5jc3NUZXh0LGw9ci53cmFwcGVyLnN0eWxlLmNzc1RleHQ7ci53cmFwcGVyLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBhYnNvbHV0ZSI7dmFyIHA9ci53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Euc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4O1xuICAgICAgdG9wOiAiKyhlLmNsaWVudFktcC50b3AtNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtcC5sZWZ0LTUpKyJweDtcbiAgICAgIHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6ICIrKGJhPyJyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkiOiJ0cmFuc3BhcmVudCIpKyI7XG4gICAgICBvdXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7dmFyIGY7aWYoQ2EmJihmPXdpbmRvdy5zY3JvbGxZKSxvLmlucHV0LmZvY3VzKCksQ2EmJndpbmRvdy5zY3JvbGxUbyhudWxsLGYpLG8uaW5wdXQucmVzZXQoKSxpLnNvbWV0aGluZ1NlbGVjdGVkKCl8fChhLnZhbHVlPXIucHJldklucHV0PSIgIiksci5jb250ZXh0TWVudVBlbmRpbmc9ITAsby5zZWxGb3JDb250ZXh0TWVudT1pLmRvYy5zZWwsY2xlYXJUaW1lb3V0KG8uZGV0ZWN0aW5nU2VsZWN0QWxsKSxiYSYmeGE+PTkmJnQoKSxqYSl7UGUoZSk7dmFyIGQ9ZnVuY3Rpb24oKXtrZSh3aW5kb3csIm1vdXNldXAiLGQpLHNldFRpbWVvdXQobiwyMCl9O25zKHdpbmRvdywibW91c2V1cCIsZCl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX0sbnUucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZD1mdW5jdGlvbihlKXtlfHx0aGlzLnJlc2V0KCksdGhpcy50ZXh0YXJlYS5kaXNhYmxlZD0ibm9jdXJzb3IiPT1lfSxudS5wcm90b3R5cGUuc2V0VW5lZGl0YWJsZT1mdW5jdGlvbigpe30sbnUucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZT0hMSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscixpLG8pe2UuZGVmYXVsdHNbdF09cixpJiYoblt0XT1vP2Z1bmN0aW9uKGUsdCxuKXtuIT1KcyYmaShlLHQsbil9OmkpfXZhciBuPWUub3B0aW9uSGFuZGxlcnM7ZS5kZWZpbmVPcHRpb249dCxlLkluaXQ9SnMsdCgidmFsdWUiLCIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0VmFsdWUodCl9LCEwKSx0KCJtb2RlIixudWxsLGZ1bmN0aW9uKGUsdCl7ZS5kb2MubW9kZU9wdGlvbj10LFdyKGUpfSwhMCksdCgiaW5kZW50VW5pdCIsMixXciwhMCksdCgiaW5kZW50V2l0aFRhYnMiLCExKSx0KCJzbWFydEluZGVudCIsITApLHQoInRhYlNpemUiLDQsZnVuY3Rpb24oZSl7UXIoZSksbm4oZSksdnIoZSl9LCEwKSx0KCJsaW5lU2VwYXJhdG9yIixudWxsLGZ1bmN0aW9uKGUsdCl7aWYoZS5kb2MubGluZVNlcD10LHQpe3ZhciBuPVtdLHI9ZS5kb2MuZmlyc3Q7ZS5kb2MuaXRlcihmdW5jdGlvbihlKXtmb3IodmFyIGk9MDs7KXt2YXIgbz1lLnRleHQuaW5kZXhPZih0LGkpO2lmKC0xPT1vKWJyZWFrO2k9byt0Lmxlbmd0aCxuLnB1c2goUChyLG8pKX1yKyt9KTtmb3IodmFyIGk9bi5sZW5ndGgtMTtpPj0wO2ktLSlqaShlLmRvYyx0LG5baV0sUChuW2ldLmxpbmUsbltpXS5jaCt0Lmxlbmd0aCkpfX0pLHQoInNwZWNpYWxDaGFycyIsL1tcdTAwMDAtXHUwMDFmXHUwMDdmLVx1MDA5Zlx1MDBhZFx1MDYxY1x1MjAwYi1cdTIwMGZcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24oZSx0LG4pe2Uuc3RhdGUuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAodC5zb3VyY2UrKHQudGVzdCgiXHQiKT8iIjoifFx0IiksImciKSxuIT1KcyYmZS5yZWZyZXNoKCl9KSx0KCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyIixsdCxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWZyZXNoKCl9LCEwKSx0KCJlbGVjdHJpY0NoYXJzIiwhMCksdCgiaW5wdXRTdHlsZSIsT2E/ImNvbnRlbnRlZGl0YWJsZSI6InRleHRhcmVhIixmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiaW5wdXRTdHlsZSBjYW4gbm90ICh5ZXQpIGJlIGNoYW5nZWQgaW4gYSBydW5uaW5nIGVkaXRvciIpfSwhMCksdCgic3BlbGxjaGVjayIsITEsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5nZXRJbnB1dEZpZWxkKCkuc3BlbGxjaGVjaz10fSwhMCksdCgicnRsTW92ZVZpc3VhbGx5IiwhSWEpLHQoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHQoInRoZW1lIiwiZGVmYXVsdCIsZnVuY3Rpb24oZSl7Vm8oZSkscW8oZSl9LCEwKSx0KCJrZXlNYXAiLCJkZWZhdWx0IixmdW5jdGlvbihlLHQsbil7dmFyIHI9cG8odCksaT1uIT1KcyYmcG8obik7aSYmaS5kZXRhY2gmJmkuZGV0YWNoKGUsciksci5hdHRhY2gmJnIuYXR0YWNoKGUsaXx8bnVsbCl9KSx0KCJleHRyYUtleXMiLG51bGwpLHQoImNvbmZpZ3VyZU1vdXNlIixudWxsKSx0KCJsaW5lV3JhcHBpbmciLCExLFdvLCEwKSx0KCJndXR0ZXJzIixbXSxmdW5jdGlvbihlKXtNcihlLm9wdGlvbnMpLHFvKGUpfSwhMCksdCgiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKGUsdCl7ZS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD10P0RuKGUuZGlzcGxheSkrInB4IjoiMCIsZS5yZWZyZXNoKCl9LCEwKSx0KCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZnVuY3Rpb24oZSl7cmV0dXJuIHJyKGUpfSwhMCksdCgic2Nyb2xsYmFyU3R5bGUiLCJuYXRpdmUiLGZ1bmN0aW9uKGUpe29yKGUpLHJyKGUpLGUuZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChlLmRvYy5zY3JvbGxUb3ApLGUuZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbExlZnQoZS5kb2Muc2Nyb2xsTGVmdCl9LCEwKSx0KCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24oZSl7TXIoZS5vcHRpb25zKSxxbyhlKX0sITApLHQoImZpcnN0TGluZU51bWJlciIsMSxxbywhMCksdCgibGluZU51bWJlckZvcm1hdHRlciIsZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHFvLCEwKSx0KCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsITEsX24sITApLHQoInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSIsITApLHQoImxpbmVXaXNlQ29weUN1dCIsITApLHQoInBhc3RlTGluZXNQZXJTZWxlY3Rpb24iLCEwKSx0KCJyZWFkT25seSIsITEsZnVuY3Rpb24oZSx0KXsibm9jdXJzb3IiPT10JiYoam4oZSksZS5kaXNwbGF5LmlucHV0LmJsdXIoKSksZS5kaXNwbGF5LmlucHV0LnJlYWRPbmx5Q2hhbmdlZCh0KX0pLHQoImRpc2FibGVJbnB1dCIsITEsZnVuY3Rpb24oZSx0KXt0fHxlLmRpc3BsYXkuaW5wdXQucmVzZXQoKX0sITApLHQoImRyYWdEcm9wIiwhMCxIbyksdCgiYWxsb3dEcm9wRmlsZVR5cGVzIixudWxsKSx0KCJjdXJzb3JCbGlua1JhdGUiLDUzMCksdCgiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx0KCJjdXJzb3JIZWlnaHQiLDEsX24sITApLHQoInNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUiLCEwLF9uLCEwKSx0KCJ3b3JrVGltZSIsMTAwKSx0KCJ3b3JrRGVsYXkiLDEwMCksdCgiZmxhdHRlblNwYW5zIiwhMCxRciwhMCksdCgiYWRkTW9kZUNsYXNzIiwhMSxRciwhMCksdCgicG9sbEludGVydmFsIiwxMDApLHQoInVuZG9EZXB0aCIsMjAwLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZG9jLmhpc3RvcnkudW5kb0RlcHRoPXR9KSx0KCJoaXN0b3J5RXZlbnREZWxheSIsMTI1MCksdCgidmlld3BvcnRNYXJnaW4iLDEwLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZnJlc2goKX0sITApLHQoIm1heEhpZ2hsaWdodExlbmd0aCIsMWU0LFFyLCEwKSx0KCJtb3ZlSW5wdXRXaXRoQ3Vyc29yIiwhMCxmdW5jdGlvbihlLHQpe3R8fGUuZGlzcGxheS5pbnB1dC5yZXNldFBvc2l0aW9uKCl9KSx0KCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbihlLHQpe3JldHVybiBlLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKS50YWJJbmRleD10fHwiIn0pLHQoImF1dG9mb2N1cyIsbnVsbCksdCgiZGlyZWN0aW9uIiwibHRyIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmRvYy5zZXREaXJlY3Rpb24odCl9LCEwKX0oUW8pLGZ1bmN0aW9uKGUpe3ZhciB0PWUub3B0aW9uSGFuZGxlcnMsbj1lLmhlbHBlcnM9e307ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSx0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKGUsbil7dmFyIHI9dGhpcy5vcHRpb25zLGk9cltlXTtyW2VdPT1uJiYibW9kZSIhPWV8fChyW2VdPW4sdC5oYXNPd25Qcm9wZXJ0eShlKSYmbXIodGhpcyx0W2VdKSh0aGlzLG4saSksQWUodGhpcywib3B0aW9uQ2hhbmdlIix0aGlzLGUpKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnNbZV19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKGUsdCl7dGhpcy5zdGF0ZS5rZXlNYXBzW3Q/InB1c2giOiJ1bnNoaWZ0Il0ocG8oZSkpfSxyZW1vdmVLZXlNYXA6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuc3RhdGUua2V5TWFwcyxuPTA7bjx0Lmxlbmd0aDsrK24paWYodFtuXT09ZXx8dFtuXS5uYW1lPT1lKXJldHVybiB0LnNwbGljZShuLDEpLCEwfSxhZGRPdmVybGF5OmdyKGZ1bmN0aW9uKHQsbil7dmFyIHI9dC50b2tlbj90OmUuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsdCk7aWYoci5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt5KHRoaXMuc3RhdGUub3ZlcmxheXMse21vZGU6cixtb2RlU3BlYzp0LG9wYXF1ZTpuJiZuLm9wYXF1ZSxwcmlvcml0eTpuJiZuLnByaW9yaXR5fHwwfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmlvcml0eX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHZyKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpncihmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8bi5sZW5ndGg7KytyKXt2YXIgaT1uW3JdLm1vZGVTcGVjO2lmKGk9PWV8fCJzdHJpbmciPT10eXBlb2YgZSYmaS5uYW1lPT1lKXJldHVybiBuLnNwbGljZShyLDEpLHQuc3RhdGUubW9kZUdlbisrLHZvaWQgdnIodCl9fSksaW5kZW50TGluZTpncihmdW5jdGlvbihlLHQsbil7InN0cmluZyIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHQmJih0PW51bGw9PXQ/dGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50PyJzbWFydCI6InByZXYiOnQ/ImFkZCI6InN1YnRyYWN0IiksSSh0aGlzLmRvYyxlKSYmSm8odGhpcyxlLHQsbil9KSxpbmRlbnRTZWxlY3Rpb246Z3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMsbj10aGlzLmRvYy5zZWwucmFuZ2VzLHI9LTEsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG8uZW1wdHkoKSlvLmhlYWQubGluZT5yJiYoSm8odCxvLmhlYWQubGluZSxlLCEwKSxyPW8uaGVhZC5saW5lLGk9PXQuZG9jLnNlbC5wcmltSW5kZXgmJlFuKHQpKTtlbHNle3ZhciBhPW8uZnJvbSgpLHM9by50bygpLHU9TWF0aC5tYXgocixhLmxpbmUpO3I9TWF0aC5taW4odC5sYXN0TGluZSgpLHMubGluZS0ocy5jaD8wOjEpKSsxO2Zvcih2YXIgYz11O2M8cjsrK2MpSm8odCxjLGUpO3ZhciBsPXQuZG9jLnNlbC5yYW5nZXM7MD09YS5jaCYmbi5sZW5ndGg9PWwubGVuZ3RoJiZsW2ldLmZyb20oKS5jaD4wJiZ5aSh0LmRvYyxpLG5ldyBPcyhhLGxbaV0udG8oKSkscWEpfX19KSxnZXRUb2tlbkF0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR0KHRoaXMsZSx0KX0sZ2V0TGluZVRva2VuczpmdW5jdGlvbihlLHQpe3JldHVybiB0dCh0aGlzLFAoZSksdCwhMCl9LGdldFRva2VuVHlwZUF0OmZ1bmN0aW9uKGUpe2U9eih0aGlzLmRvYyxlKTt2YXIgdCxuPUplKHRoaXMsQSh0aGlzLmRvYyxlLmxpbmUpKSxyPTAsaT0obi5sZW5ndGgtMSkvMixvPWUuY2g7aWYoMD09byl0PW5bMl07ZWxzZSBmb3IoOzspe3ZhciBhPXIraT4+MTtpZigoYT9uWzIqYS0xXTowKT49bylpPWE7ZWxzZXtpZighKG5bMiphKzFdPG8pKXt0PW5bMiphKzJdO2JyZWFrfXI9YSsxfX12YXIgcz10P3QuaW5kZXhPZigib3ZlcmxheSAiKTotMTtyZXR1cm4gczwwP3Q6MD09cz9udWxsOnQuc2xpY2UoMCxzLTEpfSxnZXRNb2RlQXQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5kb2MubW9kZTtyZXR1cm4gbi5pbm5lck1vZGU/ZS5pbm5lck1vZGUobix0aGlzLmdldFRva2VuQXQodCkuc3RhdGUpLm1vZGU6bn0sZ2V0SGVscGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0SGVscGVycyhlLHQpWzBdfSxnZXRIZWxwZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxpPVtdO2lmKCFuLmhhc093blByb3BlcnR5KHQpKXJldHVybiBpO3ZhciBvPW5bdF0sYT10aGlzLmdldE1vZGVBdChlKTtpZigic3RyaW5nIj09dHlwZW9mIGFbdF0pb1thW3RdXSYmaS5wdXNoKG9bYVt0XV0pO2Vsc2UgaWYoYVt0XSlmb3IodmFyIHM9MDtzPGFbdF0ubGVuZ3RoO3MrKyl7dmFyIHU9b1thW3RdW3NdXTt1JiZpLnB1c2godSl9ZWxzZSBhLmhlbHBlclR5cGUmJm9bYS5oZWxwZXJUeXBlXT9pLnB1c2gob1thLmhlbHBlclR5cGVdKTpvW2EubmFtZV0mJmkucHVzaChvW2EubmFtZV0pO2Zvcih2YXIgYz0wO2M8by5fZ2xvYmFsLmxlbmd0aDtjKyspe3ZhciBsPW8uX2dsb2JhbFtjXTtsLnByZWQoYSxyKSYmLTE9PWYoaSxsLnZhbCkmJmkucHVzaChsLnZhbCl9cmV0dXJuIGl9LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmRvYztyZXR1cm4gZT1VKG4sbnVsbD09ZT9uLmZpcnN0K24uc2l6ZS0xOmUpLFllKHRoaXMsZSsxLHQpLnN0YXRlfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuZG9jLnNlbC5wcmltYXJ5KCk7cmV0dXJuIG49bnVsbD09ZT9yLmhlYWQ6Im9iamVjdCI9PXR5cGVvZiBlP3oodGhpcy5kb2MsZSk6ZT9yLmZyb20oKTpyLnRvKCksbG4odGhpcyxuLHR8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY24odGhpcyx6KHRoaXMuZG9jLGUpLHR8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT11bih0aGlzLGUsdHx8InBhZ2UiKSxkbih0aGlzLGUubGVmdCxlLnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbihlLHQpe3JldHVybiBlPXVuKHRoaXMse3RvcDplLGxlZnQ6MH0sdHx8InBhZ2UiKS50b3AsTih0aGlzLmRvYyxlK3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPSExO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIG89dGhpcy5kb2MuZmlyc3QrdGhpcy5kb2Muc2l6ZS0xO2U8dGhpcy5kb2MuZmlyc3Q/ZT10aGlzLmRvYy5maXJzdDplPm8mJihlPW8saT0hMCkscj1BKHRoaXMuZG9jLGUpfWVsc2Ugcj1lO3JldHVybiBzbih0aGlzLHIse3RvcDowLGxlZnQ6MH0sdHx8InBhZ2UiLG58fGkpLnRvcCsoaT90aGlzLmRvYy5oZWlnaHQtYmUocik6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHhuKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gQ24odGhpcy5kaXNwbGF5KX0sZ2V0Vmlld3BvcnQ6ZnVuY3Rpb24oKXtyZXR1cm57ZnJvbTp0aGlzLmRpc3BsYXkudmlld0Zyb20sdG86dGhpcy5kaXNwbGF5LnZpZXdUb319LGFkZFdpZGdldDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMuZGlzcGxheTtlPWxuKHRoaXMseih0aGlzLmRvYyxlKSk7dmFyIGE9ZS5ib3R0b20scz1lLmxlZnQ7aWYodC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwidHJ1ZSIpLHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHQpLG8uc2l6ZXIuYXBwZW5kQ2hpbGQodCksIm92ZXIiPT1yKWE9ZS50b3A7ZWxzZSBpZigiYWJvdmUiPT1yfHwibmVhciI9PXIpe3ZhciB1PU1hdGgubWF4KG8ud3JhcHBlci5jbGllbnRIZWlnaHQsdGhpcy5kb2MuaGVpZ2h0KSxjPU1hdGgubWF4KG8uc2l6ZXIuY2xpZW50V2lkdGgsby5saW5lU3BhY2UuY2xpZW50V2lkdGgpOygiYWJvdmUiPT1yfHxlLmJvdHRvbSt0Lm9mZnNldEhlaWdodD51KSYmZS50b3A+dC5vZmZzZXRIZWlnaHQ/YT1lLnRvcC10Lm9mZnNldEhlaWdodDplLmJvdHRvbSt0Lm9mZnNldEhlaWdodDw9dSYmKGE9ZS5ib3R0b20pLHMrdC5vZmZzZXRXaWR0aD5jJiYocz1jLXQub2Zmc2V0V2lkdGgpfXQuc3R5bGUudG9wPWErInB4Iix0LnN0eWxlLmxlZnQ9dC5zdHlsZS5yaWdodD0iIiwicmlnaHQiPT1pPyhzPW8uc2l6ZXIuY2xpZW50V2lkdGgtdC5vZmZzZXRXaWR0aCx0LnN0eWxlLnJpZ2h0PSIwcHgiKTooImxlZnQiPT1pP3M9MDoibWlkZGxlIj09aSYmKHM9KG8uc2l6ZXIuY2xpZW50V2lkdGgtdC5vZmZzZXRXaWR0aCkvMiksdC5zdHlsZS5sZWZ0PXMrInB4IiksbiYmcW4odGhpcyx7bGVmdDpzLHRvcDphLHJpZ2h0OnMrdC5vZmZzZXRXaWR0aCxib3R0b206YSt0Lm9mZnNldEhlaWdodH0pfSx0cmlnZ2VyT25LZXlEb3duOmdyKEFvKSx0cmlnZ2VyT25LZXlQcmVzczpncihPbyksdHJpZ2dlck9uS2V5VXA6VG8sdHJpZ2dlck9uTW91c2VEb3duOmdyKE5vKSxleGVjQ29tbWFuZDpmdW5jdGlvbihlKXtpZihWcy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gVnNbZV0uY2FsbChudWxsLHRoaXMpfSx0cmlnZ2VyRWxlY3RyaWM6Z3IoZnVuY3Rpb24oZSl7ZWEodGhpcyxlKX0pLGZpbmRQb3NIOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsbz0xO3Q8MCYmKG89LTEsdD0tdCk7Zm9yKHZhciBhPXoodGhpcy5kb2MsZSkscz0wO3M8dCYmKGE9aWEoaS5kb2MsYSxvLG4sciksIWEuaGl0U2lkZSk7KytzKTtyZXR1cm4gYX0sbW92ZUg6Z3IoZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHIpe3JldHVybiBuLmRpc3BsYXkuc2hpZnR8fG4uZG9jLmV4dGVuZHx8ci5lbXB0eSgpP2lhKG4uZG9jLHIuaGVhZCxlLHQsbi5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSk6ZTwwP3IuZnJvbSgpOnIudG8oKX0sV2EpfSksZGVsZXRlSDpncihmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZG9jLnNlbCxyPXRoaXMuZG9jO24uc29tZXRoaW5nU2VsZWN0ZWQoKT9yLnJlcGxhY2VTZWxlY3Rpb24oIiIsbnVsbCwiK2RlbGV0ZSIpOmZvKHRoaXMsZnVuY3Rpb24obil7dmFyIGk9aWEocixuLmhlYWQsZSx0LCExKTtyZXR1cm4gZTwwP3tmcm9tOmksdG86bi5oZWFkfTp7ZnJvbTpuLmhlYWQsdG86aX19KX0pLGZpbmRQb3NWOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsbz0xLGE9cjt0PDAmJihvPS0xLHQ9LXQpO2Zvcih2YXIgcz16KHRoaXMuZG9jLGUpLHU9MDt1PHQ7Kyt1KXt2YXIgYz1sbihpLHMsImRpdiIpO2lmKG51bGw9PWE/YT1jLmxlZnQ6Yy5sZWZ0PWEscz1vYShpLGMsbyxuKSxzLmhpdFNpZGUpYnJlYWt9cmV0dXJuIHN9LG1vdmVWOmdyKGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuZG9jLGk9W10sbz0hdGhpcy5kaXNwbGF5LnNoaWZ0JiYhci5leHRlbmQmJnIuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk7aWYoci5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYSl7aWYobylyZXR1cm4gZTwwP2EuZnJvbSgpOmEudG8oKTt2YXIgcz1sbihuLGEuaGVhZCwiZGl2Iik7bnVsbCE9YS5nb2FsQ29sdW1uJiYocy5sZWZ0PWEuZ29hbENvbHVtbiksaS5wdXNoKHMubGVmdCk7dmFyIHU9b2EobixzLGUsdCk7cmV0dXJuInBhZ2UiPT10JiZhPT1yLnNlbC5wcmltYXJ5KCkmJlduKG4sY24obix1LCJkaXYiKS50b3Atcy50b3ApLHV9LFdhKSxpLmxlbmd0aClmb3IodmFyIGE9MDthPHIuc2VsLnJhbmdlcy5sZW5ndGg7YSsrKXIuc2VsLnJhbmdlc1thXS5nb2FsQ29sdW1uPWlbYV19KSxmaW5kV29yZEF0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZG9jLG49QSh0LGUubGluZSkudGV4dCxyPWUuY2gsaT1lLmNoO2lmKG4pe3ZhciBvPXRoaXMuZ2V0SGVscGVyKGUsIndvcmRDaGFycyIpOyJiZWZvcmUiIT1lLnN0aWNreSYmaSE9bi5sZW5ndGh8fCFyPysraTotLXI7Zm9yKHZhciBhPW4uY2hhckF0KHIpLHM9QyhhLG8pP2Z1bmN0aW9uKGUpe3JldHVybiBDKGUsbyl9Oi9ccy8udGVzdChhKT9mdW5jdGlvbihlKXtyZXR1cm4vXHMvLnRlc3QoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiEvXHMvLnRlc3QoZSkmJiFDKGUpfTtyPjAmJnMobi5jaGFyQXQoci0xKSk7KS0tcjtmb3IoO2k8bi5sZW5ndGgmJnMobi5jaGFyQXQoaSkpOykrK2l9cmV0dXJuIG5ldyBPcyhQKGUubGluZSxyKSxQKGUubGluZSxpKSl9LHRvZ2dsZU92ZXJ3cml0ZTpmdW5jdGlvbihlKXtudWxsIT1lJiZlPT10aGlzLnN0YXRlLm92ZXJ3cml0ZXx8KCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwiQ29kZU1pcnJvci1vdmVyd3JpdGUiKTpSYSh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpLEFlKHRoaXMsIm92ZXJ3cml0ZVRvZ2dsZSIsdGhpcyx0aGlzLnN0YXRlLm92ZXJ3cml0ZSkpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKT09YSgpfSxpc1JlYWRPbmx5OmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5vcHRpb25zLnJlYWRPbmx5JiYhdGhpcy5kb2MuY2FudEVkaXQpfSxzY3JvbGxUbzpncihmdW5jdGlvbihlLHQpe0tuKHRoaXMsZSx0KX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpc3BsYXkuc2Nyb2xsZXI7cmV0dXJue2xlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcCxoZWlnaHQ6ZS5zY3JvbGxIZWlnaHQtJHQodGhpcyktdGhpcy5kaXNwbGF5LmJhckhlaWdodCx3aWR0aDplLnNjcm9sbFdpZHRoLSR0KHRoaXMpLXRoaXMuZGlzcGxheS5iYXJXaWR0aCxjbGllbnRIZWlnaHQ6enQodGhpcyksY2xpZW50V2lkdGg6VXQodGhpcyl9fSxzY3JvbGxJbnRvVmlldzpncihmdW5jdGlvbihlLHQpe251bGw9PWU/KGU9e2Zyb206dGhpcy5kb2Muc2VsLnByaW1hcnkoKS5oZWFkLHRvOm51bGx9LG51bGw9PXQmJih0PXRoaXMub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pKToibnVtYmVyIj09dHlwZW9mIGU/ZT17ZnJvbTpQKGUsMCksdG86bnVsbH06bnVsbD09ZS5mcm9tJiYoZT17ZnJvbTplLHRvOm51bGx9KSxlLnRvfHwoZS50bz1lLmZyb20pLGUubWFyZ2luPXR8fDAsbnVsbCE9ZS5mcm9tLmxpbmU/Sm4odGhpcyxlKTpYbih0aGlzLGUuZnJvbSxlLnRvLGUubWFyZ2luKX0pLHNldFNpemU6Z3IoZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfHwvXlxkKyQvLnRlc3QoU3RyaW5nKGUpKT9lKyJweCI6ZX07bnVsbCE9ZSYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIoZSkpLG51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cih0KSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmdG4odGhpcyk7dmFyIGk9dGhpcy5kaXNwbGF5LnZpZXdGcm9tO3RoaXMuZG9jLml0ZXIoaSx0aGlzLmRpc3BsYXkudmlld1RvLGZ1bmN0aW9uKGUpe2lmKGUud2lkZ2V0cylmb3IodmFyIHQ9MDt0PGUud2lkZ2V0cy5sZW5ndGg7dCsrKWlmKGUud2lkZ2V0c1t0XS5ub0hTY3JvbGwpe2JyKG4saSwid2lkZ2V0Iik7YnJlYWt9KytpfSksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMCxBZSh0aGlzLCJyZWZyZXNoIix0aGlzKX0pLG9wZXJhdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gaHIodGhpcyxlKX0sc3RhcnRPcGVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gYXIodGhpcyl9LGVuZE9wZXJhdGlvbjpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzKX0scmVmcmVzaDpncihmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0O3ZyKHRoaXMpLHRoaXMuY3VyT3AuZm9yY2VVcGRhdGU9ITAsbm4odGhpcyksS24odGhpcyx0aGlzLmRvYy5zY3JvbGxMZWZ0LHRoaXMuZG9jLnNjcm9sbFRvcCksSXIodGhpcyksKG51bGw9PWV8fE1hdGguYWJzKGUteG4odGhpcy5kaXNwbGF5KSk+LjUpJiZTbih0aGlzKSxBZSh0aGlzLCJyZWZyZXNoIix0aGlzKX0pLHN3YXBEb2M6Z3IoZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kb2M7cmV0dXJuIHQuY209bnVsbCxYcih0aGlzLGUpLG5uKHRoaXMpLHRoaXMuZGlzcGxheS5pbnB1dC5yZXNldCgpLEtuKHRoaXMsZS5zY3JvbGxMZWZ0LGUuc2Nyb2xsVG9wKSx0aGlzLmN1ck9wLmZvcmNlU2Nyb2xsPSEwLEN0KHRoaXMsInN3YXBEb2MiLHRoaXMsdCksdH0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCl9LGdldFdyYXBwZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyfSxnZXRTY3JvbGxlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyfSxnZXRHdXR0ZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzfX0sRmUoZSksZS5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbih0LHIsaSl7bi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09ZVt0XT17X2dsb2JhbDpbXX0pLG5bdF1bcl09aX0sZS5yZWdpc3Rlckdsb2JhbEhlbHBlcj1mdW5jdGlvbih0LHIsaSxvKXtlLnJlZ2lzdGVySGVscGVyKHQscixvKSxuW3RdLl9nbG9iYWwucHVzaCh7cHJlZDppLHZhbDpvfSl9fShRbyk7dmFyIHJ1PSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IgY29uc3RydWN0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBpdSBpbiBNcy5wcm90b3R5cGUpTXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KGl1KSYmZihydSxpdSk8MCYmKFFvLnByb3RvdHlwZVtpdV09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KE1zLnByb3RvdHlwZVtpdV0pKTtyZXR1cm4gRmUoTXMpLFFvLmlucHV0U3R5bGVzPXt0ZXh0YXJlYTpudSxjb250ZW50ZWRpdGFibGU6dHV9LFFvLmRlZmluZU1vZGU9ZnVuY3Rpb24oZSl7UW8uZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwoUW8uZGVmYXVsdHMubW9kZT1lKSxVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFFvLmRlZmluZU1JTUU9emUsUW8uZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2tpcFRvRW5kKCl9fX0pLFFvLmRlZmluZU1JTUUoInRleHQvcGxhaW4iLCJudWxsIiksUW8uZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCl7UW8ucHJvdG90eXBlW2VdPXR9LFFvLmRlZmluZURvY0V4dGVuc2lvbj1mdW5jdGlvbihlLHQpe01zLnByb3RvdHlwZVtlXT10fSxRby5mcm9tVGV4dEFyZWE9ZmEsZnVuY3Rpb24oZSl7ZS5vZmY9a2UsZS5vbj1ucyxlLndoZWVsRXZlbnRQaXhlbHM9UnIsZS5Eb2M9TXMsZS5zcGxpdExpbmVzPWlzLGUuY291bnRDb2x1bW49cCxlLmZpbmRDb2x1bW49ZCxlLmlzV29yZENoYXI9eCxlLlBhc3M9VmEsZS5zaWduYWw9QWUsZS5MaW5lPW1zLGUuY2hhbmdlRW5kPXpyLGUuc2Nyb2xsYmFyTW9kZWw9d3MsZS5Qb3M9UCxlLmNtcFBvcz1NLGUubW9kZXM9dXMsZS5taW1lTW9kZXM9Y3MsZS5yZXNvbHZlTW9kZT1HZSxlLmdldE1vZGU9VmUsZS5tb2RlRXh0ZW5zaW9ucz1scyxlLmV4dGVuZE1vZGU9cWUsZS5jb3B5U3RhdGU9SGUsZS5zdGFydFN0YXRlPVFlLGUuaW5uZXJNb2RlPVdlLGUuY29tbWFuZHM9VnMsZS5rZXlNYXA9R3MsZS5rZXlOYW1lPWxvLGUuaXNNb2RpZmllcktleT11byxlLmxvb2t1cEtleT1zbyxlLm5vcm1hbGl6ZUtleU1hcD1hbyxlLlN0cmluZ1N0cmVhbT1wcyxlLlNoYXJlZFRleHRNYXJrZXI9THMsZS5UZXh0TWFya2VyPUlzLGUuTGluZVdpZGdldD1GcyxlLmVfcHJldmVudERlZmF1bHQ9TmUsZS5lX3N0b3BQcm9wYWdhdGlvbj1JZSxlLmVfc3RvcD1QZSxlLmFkZENsYXNzPXMsZS5jb250YWlucz1vLGUucm1DbGFzcz1SYSxlLmtleU5hbWVzPUJzfShRbyksUW8udmVyc2lvbj0iNS4zOC4wIixRb30pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDQzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5HcmFwaFFMRXJyb3J9fSk7dmFyIGk9bigzOTEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzeW50YXhFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuc3ludGF4RXJyb3J9fSk7dmFyIG89bigxODApO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2NhdGVkRXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmxvY2F0ZWRFcnJvcn19KTt2YXIgYT1uKDM5Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZvcm1hdEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5mb3JtYXRFcnJvcn19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PXIoZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBDLmNhbGwoZSx0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZih0KXtpZigib2JqZWN0IiE9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCsibXVzdCBiZSBvYmplY3QiKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pfX0pLGV9ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuW10uY29uY2F0KGUuc2xpY2UoMCx0KSxuLGUuc2xpY2UodCsxKSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4hKGU+PTU1Mjk2JiZlPD01NzM0MykmJighKGU+PTY0OTc2JiZlPD02NTAwNykmJig2NTUzNSE9PSg2NTUzNSZlKSYmNjU1MzQhPT0oNjU1MzUmZSkmJighKGU+PTAmJmU8PTgpJiYoMTEhPT1lJiYoIShlPj0xNCYmZTw9MzEpJiYoIShlPj0xMjcmJmU8PTE1OSkmJiEoZT4xMTE0MTExKSkpKSkpKX1mdW5jdGlvbiBjKGUpe2lmKGU+NjU1MzUpe2UtPTY1NTM2O3ZhciB0PTU1Mjk2KyhlPj4xMCksbj01NjMyMCsoMTAyMyZlKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0LG4pfXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj0wO3JldHVybiBvKGssdCk/a1t0XTozNT09PXQuY2hhckNvZGVBdCgwKSYmUy50ZXN0KHQpJiYobj0ieCI9PT10WzFdLnRvTG93ZXJDYXNlKCk/cGFyc2VJbnQodC5zbGljZSgyKSwxNik6cGFyc2VJbnQodC5zbGljZSgxKSwxMCksdShuKSk/YyhuKTplfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUuaW5kZXhPZigiXFwiKTwwP2U6ZS5yZXBsYWNlKEUsIiQxIil9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS5pbmRleE9mKCJcXCIpPDAmJmUuaW5kZXhPZigiJiIpPDA/ZTplLnJlcGxhY2UodyxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHR8fGwoZSxuKX0pfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIFRbZV19ZnVuY3Rpb24gaChlKXtyZXR1cm4gQS50ZXN0KGUpP2UucmVwbGFjZShfLGQpOmV9ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS5yZXBsYWNlKE8sIlxcJCYiKX1mdW5jdGlvbiBnKGUpe3N3aXRjaChlKXtjYXNlIDk6Y2FzZSAzMjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB5KGUpe2lmKGU+PTgxOTImJmU8PTgyMDIpcmV0dXJuITA7c3dpdGNoKGUpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAxNjA6Y2FzZSA1NzYwOmNhc2UgODIzOTpjYXNlIDgyODc6Y2FzZSAxMjI4ODpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB2KGUpe3JldHVybiBGLnRlc3QoZSl9ZnVuY3Rpb24gYihlKXtzd2l0Y2goZSl7Y2FzZSAzMzpjYXNlIDM0OmNhc2UgMzU6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NTpjYXNlIDQ2OmNhc2UgNDc6Y2FzZSA1ODpjYXNlIDU5OmNhc2UgNjA6Y2FzZSA2MTpjYXNlIDYyOmNhc2UgNjM6Y2FzZSA2NDpjYXNlIDkxOmNhc2UgOTI6Y2FzZSA5MzpjYXNlIDk0OmNhc2UgOTU6Y2FzZSA5NjpjYXNlIDEyMzpjYXNlIDEyNDpjYXNlIDEyNTpjYXNlIDEyNjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB4KGUpe3JldHVybiBlLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpLnRvVXBwZXJDYXNlKCl9dmFyIEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPS9cXChbISIjJCUmJygpKissXC0uXC86Ozw9Pj9AW1xcXF1eX2B7fH1+XSkvZyxEPS8mKFthLXojXVthLXowLTldezEsMzF9KTsvZ2ksdz1uZXcgUmVnRXhwKEUuc291cmNlKyJ8IitELnNvdXJjZSwiZ2kiKSxTPS9eIygoPzp4W2EtZjAtOV17MSw4fXxbMC05XXsxLDh9KSkvaSxrPW4oMjYxKSxBPS9bJjw+Il0vLF89L1smPD4iXS9nLFQ9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyJ9LE89L1suPyorXiRbXF1cXCgpe318LV0vZyxGPW4oMjYzKTt0LmxpYj17fSx0LmxpYi5tZHVybD1uKDg4KSx0LmxpYi51Y21pY3JvPW4oNTQzKSx0LmFzc2lnbj1hLHQuaXNTdHJpbmc9aSx0Lmhhcz1vLHQudW5lc2NhcGVNZD1wLHQudW5lc2NhcGVBbGw9Zix0LmlzVmFsaWRFbnRpdHlDb2RlPXUsdC5mcm9tQ29kZVBvaW50PWMsdC5lc2NhcGVIdG1sPWgsdC5hcnJheVJlcGxhY2VBdD1zLHQuaXNTcGFjZT1nLHQuaXNXaGl0ZVNwYWNlPXksdC5pc01kQXNjaWlQdW5jdD1iLHQuaXNQdW5jdENoYXI9dix0LmVzY2FwZVJFPW0sdC5ub3JtYWxpemVSZWZlcmVuY2U9eH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PXIoZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBDLmNhbGwoZSx0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZih0KXtpZigib2JqZWN0IiE9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCsibXVzdCBiZSBvYmplY3QiKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pfX0pLGV9ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuW10uY29uY2F0KGUuc2xpY2UoMCx0KSxuLGUuc2xpY2UodCsxKSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4hKGU+PTU1Mjk2JiZlPD01NzM0MykmJighKGU+PTY0OTc2JiZlPD02NTAwNykmJig2NTUzNSE9PSg2NTUzNSZlKSYmNjU1MzQhPT0oNjU1MzUmZSkmJighKGU+PTAmJmU8PTgpJiYoMTEhPT1lJiYoIShlPj0xNCYmZTw9MzEpJiYoIShlPj0xMjcmJmU8PTE1OSkmJiEoZT4xMTE0MTExKSkpKSkpKX1mdW5jdGlvbiBjKGUpe2lmKGU+NjU1MzUpe2UtPTY1NTM2O3ZhciB0PTU1Mjk2KyhlPj4xMCksbj01NjMyMCsoMTAyMyZlKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0LG4pfXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj0wO3JldHVybiBvKGssdCk/a1t0XTozNT09PXQuY2hhckNvZGVBdCgwKSYmUy50ZXN0KHQpJiYobj0ieCI9PT10WzFdLnRvTG93ZXJDYXNlKCk/cGFyc2VJbnQodC5zbGljZSgyKSwxNik6cGFyc2VJbnQodC5zbGljZSgxKSwxMCksdShuKSk/YyhuKTplfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUuaW5kZXhPZigiXFwiKTwwP2U6ZS5yZXBsYWNlKEUsIiQxIil9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS5pbmRleE9mKCJcXCIpPDAmJmUuaW5kZXhPZigiJiIpPDA/ZTplLnJlcGxhY2UodyxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHR8fGwoZSxuKX0pfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIFRbZV19ZnVuY3Rpb24gaChlKXtyZXR1cm4gQS50ZXN0KGUpP2UucmVwbGFjZShfLGQpOmV9ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS5yZXBsYWNlKE8sIlxcJCYiKX1mdW5jdGlvbiBnKGUpe3N3aXRjaChlKXtjYXNlIDk6Y2FzZSAzMjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB5KGUpe2lmKGU+PTgxOTImJmU8PTgyMDIpcmV0dXJuITA7c3dpdGNoKGUpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAxNjA6Y2FzZSA1NzYwOmNhc2UgODIzOTpjYXNlIDgyODc6Y2FzZSAxMjI4ODpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB2KGUpe3JldHVybiBGLnRlc3QoZSl9ZnVuY3Rpb24gYihlKXtzd2l0Y2goZSl7Y2FzZSAzMzpjYXNlIDM0OmNhc2UgMzU6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NTpjYXNlIDQ2OmNhc2UgNDc6Y2FzZSA1ODpjYXNlIDU5OmNhc2UgNjA6Y2FzZSA2MTpjYXNlIDYyOmNhc2UgNjM6Y2FzZSA2NDpjYXNlIDkxOmNhc2UgOTI6Y2FzZSA5MzpjYXNlIDk0OmNhc2UgOTU6Y2FzZSA5NjpjYXNlIDEyMzpjYXNlIDEyNDpjYXNlIDEyNTpjYXNlIDEyNjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB4KGUpe3JldHVybiBlLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpLnRvVXBwZXJDYXNlKCl9dmFyIEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPS9cXChbISIjJCUmJygpKissXC0uXC86Ozw9Pj9AW1xcXF1eX2B7fH1+XSkvZyxEPS8mKFthLXojXVthLXowLTldezEsMzF9KTsvZ2ksdz1uZXcgUmVnRXhwKEUuc291cmNlKyJ8IitELnNvdXJjZSwiZ2kiKSxTPS9eIygoPzp4W2EtZjAtOV17MSw4fXxbMC05XXsxLDh9KSkvaSxrPW4oMjk0KSxBPS9bJjw+Il0vLF89L1smPD4iXS9nLFQ9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyJ9LE89L1suPyorXiRbXF1cXCgpe318LV0vZyxGPW4oMTM2KTt0LmxpYj17fSx0LmxpYi5tZHVybD1uKDg4KSx0LmxpYi51Y21pY3JvPW4oNjQ3KSx0LmFzc2lnbj1hLHQuaXNTdHJpbmc9aSx0Lmhhcz1vLHQudW5lc2NhcGVNZD1wLHQudW5lc2NhcGVBbGw9Zix0LmlzVmFsaWRFbnRpdHlDb2RlPXUsdC5mcm9tQ29kZVBvaW50PWMsdC5lc2NhcGVIdG1sPWgsdC5hcnJheVJlcGxhY2VBdD1zLHQuaXNTcGFjZT1nLHQuaXNXaGl0ZVNwYWNlPXksdC5pc01kQXNjaWlQdW5jdD1iLHQuaXNQdW5jdENoYXI9dix0LmVzY2FwZVJFPW0sdC5ub3JtYWxpemVSZWZlcmVuY2U9eH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGp8fGUgaW5zdGFuY2VvZiBSfHxlIGluc3RhbmNlb2YgQnx8ZSBpbnN0YW5jZW9mICR8fGUgaW5zdGFuY2VvZiBVfHxlIGluc3RhbmNlb2Ygenx8ZSBpbnN0YW5jZW9mIEd8fGUgaW5zdGFuY2VvZiBWfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG8oZSl8fCgwLEYuZGVmYXVsdCkoMCwiRXhwZWN0ZWQgIitTdHJpbmcoZSkrIiB0byBiZSBhIEdyYXBoUUwgdHlwZS4iKSxlfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqfHxlIGluc3RhbmNlb2YgVXx8ZSBpbnN0YW5jZW9mIHp8fGUgaW5zdGFuY2VvZiBWJiZzKGUub2ZUeXBlKXx8ZSBpbnN0YW5jZW9mIEcmJnMoZS5vZlR5cGUpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHMoZSl8fCgwLEYuZGVmYXVsdCkoMCwiRXhwZWN0ZWQgIitTdHJpbmcoZSkrIiB0byBiZSBhIEdyYXBoUUwgaW5wdXQgdHlwZS4iKSxlfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqfHxlIGluc3RhbmNlb2YgUnx8ZSBpbnN0YW5jZW9mIEJ8fGUgaW5zdGFuY2VvZiAkfHxlIGluc3RhbmNlb2YgVXx8ZSBpbnN0YW5jZW9mIFYmJmMoZS5vZlR5cGUpfHxlIGluc3RhbmNlb2YgRyYmYyhlLm9mVHlwZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gYyhlKXx8KDAsRi5kZWZhdWx0KSgwLCJFeHBlY3RlZCAiK1N0cmluZyhlKSsiIHRvIGJlIGEgR3JhcGhRTCBvdXRwdXQgdHlwZS4iKSxlfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqfHxlIGluc3RhbmNlb2YgVX1mdW5jdGlvbiBmKGUpe3JldHVybiBwKGUpfHwoMCxGLmRlZmF1bHQpKDAsIkV4cGVjdGVkICIrU3RyaW5nKGUpKyIgdG8gYmUgYSBHcmFwaFFMIGxlYWYgdHlwZS4iKSxlfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSfHxlIGluc3RhbmNlb2YgQnx8ZSBpbnN0YW5jZW9mICR9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZChlKXx8KDAsRi5kZWZhdWx0KSgwLCJFeHBlY3RlZCAiK1N0cmluZyhlKSsiIHRvIGJlIGEgR3JhcGhRTCBjb21wb3NpdGUgdHlwZS4iKSxlfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBCfHxlIGluc3RhbmNlb2YgJH1mdW5jdGlvbiBnKGUpe3JldHVybiBtKGUpfHwoMCxGLmRlZmF1bHQpKDAsIkV4cGVjdGVkICIrU3RyaW5nKGUpKyIgdG8gYmUgYSBHcmFwaFFMIGFic3RyYWN0IHR5cGUuIiksZX1mdW5jdGlvbiB5KGUpe3JldHVybiBlIGluc3RhbmNlb2YgVj9lLm9mVHlwZTplfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqfHxlIGluc3RhbmNlb2YgUnx8ZSBpbnN0YW5jZW9mIEJ8fGUgaW5zdGFuY2VvZiAkfHxlIGluc3RhbmNlb2YgVXx8ZSBpbnN0YW5jZW9mIHp9ZnVuY3Rpb24gYihlKXtyZXR1cm4gdihlKXx8KDAsRi5kZWZhdWx0KSgwLCJFeHBlY3RlZCAiK1N0cmluZyhlKSsiIHRvIGJlIGEgR3JhcGhRTCBuYW1lZCB0eXBlLiIpLGV9ZnVuY3Rpb24geChlKXtpZihlKXtmb3IodmFyIHQ9ZTt0IGluc3RhbmNlb2YgR3x8dCBpbnN0YW5jZW9mIFY7KXQ9dC5vZlR5cGU7cmV0dXJuIHR9fWZ1bmN0aW9uIEMoZSl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBlP2UoKTplfWZ1bmN0aW9uIEUoZSx0KXt2YXIgbj1DKHQpO2lmKCFuKXJldHVybltdO0FycmF5LmlzQXJyYXkobil8fCgwLEYuZGVmYXVsdCkoMCxlLm5hbWUrIiBpbnRlcmZhY2VzIG11c3QgYmUgYW4gQXJyYXkgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIEFycmF5LiIpO3ZhciByPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgQnx8KDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiIG1heSBvbmx5IGltcGxlbWVudCBJbnRlcmZhY2UgdHlwZXMsIGl0IGNhbm5vdCBpbXBsZW1lbnQ6ICIrU3RyaW5nKHQpKyIuIiksclt0Lm5hbWVdJiYoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIgbWF5IGRlY2xhcmUgaXQgaW1wbGVtZW50cyAiK3QubmFtZSsiIG9ubHkgb25jZS4iKSxyW3QubmFtZV09ITAsImZ1bmN0aW9uIiE9PXR5cGVvZiB0LnJlc29sdmVUeXBlJiYiZnVuY3Rpb24iIT09dHlwZW9mIGUuaXNUeXBlT2YmJigwLEYuZGVmYXVsdCkoMCwiSW50ZXJmYWNlIFR5cGUgIit0Lm5hbWUrJyBkb2VzIG5vdCBwcm92aWRlIGEgInJlc29sdmVUeXBlIiBmdW5jdGlvbiBhbmQgaW1wbGVtZW50aW5nIFR5cGUgJytlLm5hbWUrJyBkb2VzIG5vdCBwcm92aWRlIGEgImlzVHlwZU9mIiBmdW5jdGlvbi4gVGhlcmUgaXMgbm8gd2F5IHRvIHJlc29sdmUgdGhpcyBpbXBsZW1lbnRpbmcgdHlwZSBkdXJpbmcgZXhlY3V0aW9uLicpfSksbn1mdW5jdGlvbiBEKGUsdCl7dmFyIG49Qyh0KTt3KG4pfHwoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIgZmllbGRzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggZmllbGQgbmFtZXMgYXMga2V5cyBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgc3VjaCBhbiBvYmplY3QuIik7dmFyIHI9T2JqZWN0LmtleXMobik7ci5sZW5ndGg+MHx8KDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiIGZpZWxkcyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGZpZWxkIG5hbWVzIGFzIGtleXMgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHN1Y2ggYW4gb2JqZWN0LiIpO3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbih0KXsoMCxNLmFzc2VydFZhbGlkTmFtZSkodCk7dmFyIHI9blt0XTt3KHIpfHwoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIuIit0KyIgZmllbGQgY29uZmlnIG11c3QgYmUgYW4gb2JqZWN0Iiksci5oYXNPd25Qcm9wZXJ0eSgiaXNEZXByZWNhdGVkIikmJigwLEYuZGVmYXVsdCkoMCxlLm5hbWUrIi4iK3QrJyBzaG91bGQgcHJvdmlkZSAiZGVwcmVjYXRpb25SZWFzb24iIGluc3RlYWQgb2YgImlzRGVwcmVjYXRlZCIuJyk7dmFyIG89VCh7fSxyLHtpc0RlcHJlY2F0ZWQ6Qm9vbGVhbihyLmRlcHJlY2F0aW9uUmVhc29uKSxuYW1lOnR9KTtjKG8udHlwZSl8fCgwLEYuZGVmYXVsdCkoMCxlLm5hbWUrIi4iK3QrIiBmaWVsZCB0eXBlIG11c3QgYmUgT3V0cHV0IFR5cGUgYnV0IGdvdDogIitTdHJpbmcoby50eXBlKSsiLiIpLFMoby5yZXNvbHZlKXx8KDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiLiIrdCsiIGZpZWxkIHJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiBpZiBwcm92aWRlZCwgYnV0IGdvdDogIitTdHJpbmcoby5yZXNvbHZlKSsiLiIpO3ZhciBhPXIuYXJnczthPyh3KGEpfHwoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIuIit0KyIgYXJncyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleXMuIiksby5hcmdzPU9iamVjdC5rZXlzKGEpLm1hcChmdW5jdGlvbihuKXsoMCxNLmFzc2VydFZhbGlkTmFtZSkobik7dmFyIHI9YVtuXTtyZXR1cm4gcyhyLnR5cGUpfHwoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIuIit0KyIoIituKyI6KSBhcmd1bWVudCB0eXBlIG11c3QgYmUgSW5wdXQgVHlwZSBidXQgZ290OiAiK1N0cmluZyhyLnR5cGUpKyIuIikse25hbWU6bixkZXNjcmlwdGlvbjp2b2lkIDA9PT1yLmRlc2NyaXB0aW9uP251bGw6ci5kZXNjcmlwdGlvbix0eXBlOnIudHlwZSxkZWZhdWx0VmFsdWU6ci5kZWZhdWx0VmFsdWUsYXN0Tm9kZTpyLmFzdE5vZGV9fSkpOm8uYXJncz1bXSxpW3RdPW99KSxpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT09dHlwZW9mIGU/InVuZGVmaW5lZCI6XyhlKSkmJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIG51bGw9PWV8fCJmdW5jdGlvbiI9PT10eXBlb2YgZX1mdW5jdGlvbiBrKGUsdCl7dmFyIG49Qyh0KTtBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wfHwoMCxGLmRlZmF1bHQpKDAsIk11c3QgcHJvdmlkZSBBcnJheSBvZiB0eXBlcyBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgc3VjaCBhbiBhcnJheSBmb3IgVW5pb24gIitlLm5hbWUrIi4iKTt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIFJ8fCgwLEYuZGVmYXVsdCkoMCxlLm5hbWUrIiBtYXkgb25seSBjb250YWluIE9iamVjdCB0eXBlcywgaXQgY2Fubm90IGNvbnRhaW46ICIrU3RyaW5nKHQpKyIuIiksclt0Lm5hbWVdJiYoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIgY2FuIGluY2x1ZGUgIit0Lm5hbWUrIiB0eXBlIG9ubHkgb25jZS4iKSxyW3QubmFtZV09ITAsImZ1bmN0aW9uIiE9PXR5cGVvZiBlLnJlc29sdmVUeXBlJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQuaXNUeXBlT2YmJigwLEYuZGVmYXVsdCkoMCwnVW5pb24gdHlwZSAiJytlLm5hbWUrJyIgZG9lcyBub3QgcHJvdmlkZSBhICJyZXNvbHZlVHlwZSIgZnVuY3Rpb24gYW5kIHBvc3NpYmxlIHR5cGUgIicrdC5uYW1lKyciIGRvZXMgbm90IHByb3ZpZGUgYW4gImlzVHlwZU9mIiBmdW5jdGlvbi4gVGhlcmUgaXMgbm8gd2F5IHRvIHJlc29sdmUgdGhpcyBwb3NzaWJsZSB0eXBlIGR1cmluZyBleGVjdXRpb24uJyl9KSxufWZ1bmN0aW9uIEEoZSx0KXt3KHQpfHwoMCxGLmRlZmF1bHQpKDAsZS5uYW1lKyIgdmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdmFsdWUgbmFtZXMgYXMga2V5cy4iKTt2YXIgbj1PYmplY3Qua2V5cyh0KTtyZXR1cm4gbi5sZW5ndGg+MHx8KDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiIHZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHZhbHVlIG5hbWVzIGFzIGtleXMuIiksbi5tYXAoZnVuY3Rpb24obil7KDAsTS5hc3NlcnRWYWxpZE5hbWUpKG4pLC0xIT09WyJ0cnVlIiwiZmFsc2UiLCJudWxsIl0uaW5kZXhPZihuKSYmKDAsRi5kZWZhdWx0KSgwLCdOYW1lICInK24rJyIgY2FuIG5vdCBiZSB1c2VkIGFzIGFuIEVudW0gdmFsdWUuJyk7dmFyIHI9dFtuXTtyZXR1cm4gdyhyKXx8KDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiLiIrbisnIG11c3QgcmVmZXIgdG8gYW4gb2JqZWN0IHdpdGggYSAidmFsdWUiIGtleSByZXByZXNlbnRpbmcgYW4gaW50ZXJuYWwgdmFsdWUgYnV0IGdvdDogJytTdHJpbmcocikrIi4iKSxyLmhhc093blByb3BlcnR5KCJpc0RlcHJlY2F0ZWQiKSYmKDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiLiIrbisnIHNob3VsZCBwcm92aWRlICJkZXByZWNhdGlvblJlYXNvbiIgaW5zdGVhZCBvZiAiaXNEZXByZWNhdGVkIi4nKSx7bmFtZTpuLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saXNEZXByZWNhdGVkOkJvb2xlYW4oci5kZXByZWNhdGlvblJlYXNvbiksZGVwcmVjYXRpb25SZWFzb246ci5kZXByZWNhdGlvblJlYXNvbixhc3ROb2RlOnIuYXN0Tm9kZSx2YWx1ZTpyLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP3IudmFsdWU6bn19KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HcmFwaFFMTm9uTnVsbD10LkdyYXBoUUxMaXN0PXQuR3JhcGhRTElucHV0T2JqZWN0VHlwZT10LkdyYXBoUUxFbnVtVHlwZT10LkdyYXBoUUxVbmlvblR5cGU9dC5HcmFwaFFMSW50ZXJmYWNlVHlwZT10LkdyYXBoUUxPYmplY3RUeXBlPXQuR3JhcGhRTFNjYWxhclR5cGU9dm9pZCAwO3ZhciBfPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxUPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuaXNUeXBlPW8sdC5hc3NlcnRUeXBlPWEsdC5pc0lucHV0VHlwZT1zLHQuYXNzZXJ0SW5wdXRUeXBlPXUsdC5pc091dHB1dFR5cGU9Yyx0LmFzc2VydE91dHB1dFR5cGU9bCx0LmlzTGVhZlR5cGU9cCx0LmFzc2VydExlYWZUeXBlPWYsdC5pc0NvbXBvc2l0ZVR5cGU9ZCx0LmFzc2VydENvbXBvc2l0ZVR5cGU9aCx0LmlzQWJzdHJhY3RUeXBlPW0sdC5hc3NlcnRBYnN0cmFjdFR5cGU9Zyx0LmdldE51bGxhYmxlVHlwZT15LHQuaXNOYW1lZFR5cGU9dix0LmFzc2VydE5hbWVkVHlwZT1iLHQuZ2V0TmFtZWRUeXBlPXg7dmFyIE89bigxMyksRj1yKE8pLE49bigzNSksST1yKE4pLEw9bigxMCksUD1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KEwpLE09bigxMTEpLGo9dC5HcmFwaFFMU2NhbGFyVHlwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aSh0aGlzLGUpLCgwLE0uYXNzZXJ0VmFsaWROYW1lKSh0Lm5hbWUpLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5kZXNjcmlwdGlvbj10LmRlc2NyaXB0aW9uLHRoaXMuYXN0Tm9kZT10LmFzdE5vZGUsImZ1bmN0aW9uIiE9PXR5cGVvZiB0LnNlcmlhbGl6ZSYmKDAsRi5kZWZhdWx0KSgwLHRoaXMubmFtZSsnIG11c3QgcHJvdmlkZSAic2VyaWFsaXplIiBmdW5jdGlvbi4gSWYgdGhpcyBjdXN0b20gU2NhbGFyIGlzIGFsc28gdXNlZCBhcyBhbiBpbnB1dCB0eXBlLCBlbnN1cmUgInBhcnNlVmFsdWUiIGFuZCAicGFyc2VMaXRlcmFsIiBmdW5jdGlvbnMgYXJlIGFsc28gcHJvdmlkZWQuJyksKHQucGFyc2VWYWx1ZXx8dC5wYXJzZUxpdGVyYWwpJiYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0LnBhcnNlVmFsdWV8fCJmdW5jdGlvbiIhPT10eXBlb2YgdC5wYXJzZUxpdGVyYWwpJiYoMCxGLmRlZmF1bHQpKDAsdGhpcy5uYW1lKycgbXVzdCBwcm92aWRlIGJvdGggInBhcnNlVmFsdWUiIGFuZCAicGFyc2VMaXRlcmFsIiBmdW5jdGlvbnMuJyksdGhpcy5fc2NhbGFyQ29uZmlnPXR9cmV0dXJuIGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4oMCx0aGlzLl9zY2FsYXJDb25maWcuc2VyaWFsaXplKShlKX0sZS5wcm90b3R5cGUuaXNWYWxpZFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiEoMCxJLmRlZmF1bHQpKHRoaXMucGFyc2VWYWx1ZShlKSl9LGUucHJvdG90eXBlLnBhcnNlVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2NhbGFyQ29uZmlnLnBhcnNlVmFsdWU7cmV0dXJuIHQmJiEoMCxJLmRlZmF1bHQpKGUpP3QoZSk6dm9pZCAwfSxlLnByb3RvdHlwZS5pc1ZhbGlkTGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4hKDAsSS5kZWZhdWx0KSh0aGlzLnBhcnNlTGl0ZXJhbChlKSl9LGUucHJvdG90eXBlLnBhcnNlTGl0ZXJhbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zY2FsYXJDb25maWcucGFyc2VMaXRlcmFsO3JldHVybiB0P3QoZSk6dm9pZCAwfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCk7ai5wcm90b3R5cGUudG9KU09OPWoucHJvdG90eXBlLmluc3BlY3Q9ai5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFI9dC5HcmFwaFFMT2JqZWN0VHlwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aSh0aGlzLGUpLCgwLE0uYXNzZXJ0VmFsaWROYW1lKSh0Lm5hbWUsdC5pc0ludHJvc3BlY3Rpb24pLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5kZXNjcmlwdGlvbj10LmRlc2NyaXB0aW9uLHRoaXMuYXN0Tm9kZT10LmFzdE5vZGUsdGhpcy5leHRlbnNpb25BU1ROb2Rlcz10LmV4dGVuc2lvbkFTVE5vZGVzfHxbXSx0LmlzVHlwZU9mJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQuaXNUeXBlT2YmJigwLEYuZGVmYXVsdCkoMCx0aGlzLm5hbWUrJyBtdXN0IHByb3ZpZGUgImlzVHlwZU9mIiBhcyBhIGZ1bmN0aW9uLicpLHRoaXMuaXNUeXBlT2Y9dC5pc1R5cGVPZix0aGlzLl90eXBlQ29uZmlnPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldEZpZWxkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWVsZHN8fCh0aGlzLl9maWVsZHM9RCh0aGlzLHRoaXMuX3R5cGVDb25maWcuZmllbGRzKSl9LGUucHJvdG90eXBlLmdldEludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW50ZXJmYWNlc3x8KHRoaXMuX2ludGVyZmFjZXM9RSh0aGlzLHRoaXMuX3R5cGVDb25maWcuaW50ZXJmYWNlcykpfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCk7Ui5wcm90b3R5cGUudG9KU09OPVIucHJvdG90eXBlLmluc3BlY3Q9Ui5wcm90b3R5cGUudG9TdHJpbmc7dmFyIEI9dC5HcmFwaFFMSW50ZXJmYWNlVHlwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aSh0aGlzLGUpLCgwLE0uYXNzZXJ0VmFsaWROYW1lKSh0Lm5hbWUpLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5kZXNjcmlwdGlvbj10LmRlc2NyaXB0aW9uLHRoaXMuYXN0Tm9kZT10LmFzdE5vZGUsdC5yZXNvbHZlVHlwZSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0LnJlc29sdmVUeXBlJiYoMCxGLmRlZmF1bHQpKDAsdGhpcy5uYW1lKycgbXVzdCBwcm92aWRlICJyZXNvbHZlVHlwZSIgYXMgYSBmdW5jdGlvbi4nKSx0aGlzLnJlc29sdmVUeXBlPXQucmVzb2x2ZVR5cGUsdGhpcy5fdHlwZUNvbmZpZz10fXJldHVybiBlLnByb3RvdHlwZS5nZXRGaWVsZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmllbGRzfHwodGhpcy5fZmllbGRzPUQodGhpcyx0aGlzLl90eXBlQ29uZmlnLmZpZWxkcykpfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCk7Qi5wcm90b3R5cGUudG9KU09OPUIucHJvdG90eXBlLmluc3BlY3Q9Qi5wcm90b3R5cGUudG9TdHJpbmc7dmFyICQ9dC5HcmFwaFFMVW5pb25UeXBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpKHRoaXMsZSksKDAsTS5hc3NlcnRWYWxpZE5hbWUpKHQubmFtZSksdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRlc2NyaXB0aW9uPXQuZGVzY3JpcHRpb24sdGhpcy5hc3ROb2RlPXQuYXN0Tm9kZSx0LnJlc29sdmVUeXBlJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQucmVzb2x2ZVR5cGUmJigwLEYuZGVmYXVsdCkoMCx0aGlzLm5hbWUrJyBtdXN0IHByb3ZpZGUgInJlc29sdmVUeXBlIiBhcyBhIGZ1bmN0aW9uLicpLHRoaXMucmVzb2x2ZVR5cGU9dC5yZXNvbHZlVHlwZSx0aGlzLl90eXBlQ29uZmlnPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFR5cGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGVzfHwodGhpcy5fdHlwZXM9ayh0aGlzLHRoaXMuX3R5cGVDb25maWcudHlwZXMpKX0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxlfSgpOyQucHJvdG90eXBlLnRvSlNPTj0kLnByb3RvdHlwZS5pbnNwZWN0PSQucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBVPXQuR3JhcGhRTEVudW1UeXBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpKHRoaXMsZSksdGhpcy5uYW1lPXQubmFtZSwoMCxNLmFzc2VydFZhbGlkTmFtZSkodC5uYW1lLHQuaXNJbnRyb3NwZWN0aW9uKSx0aGlzLmRlc2NyaXB0aW9uPXQuZGVzY3JpcHRpb24sdGhpcy5hc3ROb2RlPXQuYXN0Tm9kZSx0aGlzLl92YWx1ZXM9QSh0aGlzLHQudmFsdWVzKSx0aGlzLl9lbnVtQ29uZmlnPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZXN9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9nZXROYW1lTG9va3VwKClbZV19LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRWYWx1ZUxvb2t1cCgpLmdldChlKTtyZXR1cm4gdD90Lm5hbWU6bnVsbH0sZS5wcm90b3R5cGUuaXNWYWxpZFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGUmJnZvaWQgMCE9PXRoaXMuX2dldE5hbWVMb29rdXAoKVtlXX0sZS5wcm90b3R5cGUucGFyc2VWYWx1ZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09PXR5cGVvZiBlKXt2YXIgdD10aGlzLl9nZXROYW1lTG9va3VwKClbZV07aWYodClyZXR1cm4gdC52YWx1ZX19LGUucHJvdG90eXBlLmlzVmFsaWRMaXRlcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT1QLkVOVU0mJnZvaWQgMCE9PXRoaXMuX2dldE5hbWVMb29rdXAoKVtlLnZhbHVlXX0sZS5wcm90b3R5cGUucGFyc2VMaXRlcmFsPWZ1bmN0aW9uKGUpe2lmKGUua2luZD09PVAuRU5VTSl7dmFyIHQ9dGhpcy5fZ2V0TmFtZUxvb2t1cCgpW2UudmFsdWVdO2lmKHQpcmV0dXJuIHQudmFsdWV9fSxlLnByb3RvdHlwZS5fZ2V0VmFsdWVMb29rdXA9ZnVuY3Rpb24oKXtpZighdGhpcy5fdmFsdWVMb29rdXApe3ZhciBlPW5ldyBNYXA7dGhpcy5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uuc2V0KHQudmFsdWUsdCl9KSx0aGlzLl92YWx1ZUxvb2t1cD1lfXJldHVybiB0aGlzLl92YWx1ZUxvb2t1cH0sZS5wcm90b3R5cGUuX2dldE5hbWVMb29rdXA9ZnVuY3Rpb24oKXtpZighdGhpcy5fbmFtZUxvb2t1cCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0Lm5hbWVdPXR9KSx0aGlzLl9uYW1lTG9va3VwPWV9cmV0dXJuIHRoaXMuX25hbWVMb29rdXB9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZX0oKTtVLnByb3RvdHlwZS50b0pTT049VS5wcm90b3R5cGUuaW5zcGVjdD1VLnByb3RvdHlwZS50b1N0cmluZzt2YXIgej10LkdyYXBoUUxJbnB1dE9iamVjdFR5cGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2kodGhpcyxlKSwoMCxNLmFzc2VydFZhbGlkTmFtZSkodC5uYW1lKSx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZGVzY3JpcHRpb249dC5kZXNjcmlwdGlvbix0aGlzLmFzdE5vZGU9dC5hc3ROb2RlLHRoaXMuX3R5cGVDb25maWc9dH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RmllbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpZWxkc3x8KHRoaXMuX2ZpZWxkcz10aGlzLl9kZWZpbmVGaWVsZE1hcCgpKX0sZS5wcm90b3R5cGUuX2RlZmluZUZpZWxkTWFwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PUModGhpcy5fdHlwZUNvbmZpZy5maWVsZHMpO3codCl8fCgwLEYuZGVmYXVsdCkoMCx0aGlzLm5hbWUrIiBmaWVsZHMgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBmaWVsZCBuYW1lcyBhcyBrZXlzIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBzdWNoIGFuIG9iamVjdC4iKTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmxlbmd0aD4wfHwoMCxGLmRlZmF1bHQpKDAsdGhpcy5uYW1lKyIgZmllbGRzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggZmllbGQgbmFtZXMgYXMga2V5cyBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgc3VjaCBhbiBvYmplY3QuIik7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4peygwLE0uYXNzZXJ0VmFsaWROYW1lKShuKTt2YXIgaT1UKHt9LHRbbl0se25hbWU6bn0pO3MoaS50eXBlKXx8KDAsRi5kZWZhdWx0KSgwLGUubmFtZSsiLiIrbisiIGZpZWxkIHR5cGUgbXVzdCBiZSBJbnB1dCBUeXBlIGJ1dCBnb3Q6ICIrU3RyaW5nKGkudHlwZSkrIi4iKSxudWxsIT1pLnJlc29sdmUmJigwLEYuZGVmYXVsdCkoMCxlLm5hbWUrIi4iK24rIiBmaWVsZCB0eXBlIGhhcyBhIHJlc29sdmUgcHJvcGVydHksIGJ1dCBJbnB1dCBUeXBlcyBjYW5ub3QgZGVmaW5lIHJlc29sdmVycy4iKSxyW25dPWl9KSxyfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCk7ei5wcm90b3R5cGUudG9KU09OPXoucHJvdG90eXBlLmluc3BlY3Q9ei5wcm90b3R5cGUudG9TdHJpbmc7dmFyIEc9dC5HcmFwaFFMTGlzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aSh0aGlzLGUpLG8odCl8fCgwLEYuZGVmYXVsdCkoMCwiQ2FuIG9ubHkgY3JlYXRlIExpc3Qgb2YgYSBHcmFwaFFMVHlwZSBidXQgZ290OiAiK1N0cmluZyh0KSsiLiIpLHRoaXMub2ZUeXBlPXR9cmV0dXJuIGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlsiK1N0cmluZyh0aGlzLm9mVHlwZSkrIl0ifSxlfSgpO0cucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS5pbnNwZWN0PUcucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBWPXQuR3JhcGhRTE5vbk51bGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2kodGhpcyxlKSwoIW8odCl8fHQgaW5zdGFuY2VvZiBlKSYmKDAsRi5kZWZhdWx0KSgwLCJDYW4gb25seSBjcmVhdGUgTm9uTnVsbCBvZiBhIE51bGxhYmxlIEdyYXBoUUxUeXBlIGJ1dCBnb3Q6ICIrU3RyaW5nKHQpKyIuIiksdGhpcy5vZlR5cGU9dH1yZXR1cm4gZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZlR5cGUudG9TdHJpbmcoKSsiISJ9LGV9KCk7Vi5wcm90b3R5cGUudG9KU09OPVYucHJvdG90eXBlLmluc3BlY3Q9Vi5wcm90b3R5cGUudG9TdHJpbmd9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzkwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ3JhcGhxbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ3JhcGhxbH19KTt2YXIgaT1uKDM5Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxTY2hlbWEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxTY2hlbWF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxTY2FsYXJUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMU2NhbGFyVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTE9iamVjdFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxPYmplY3RUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMSW50ZXJmYWNlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEludGVyZmFjZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxVbmlvblR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxVbmlvblR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxFbnVtVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEVudW1UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMSW5wdXRPYmplY3RUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMSW5wdXRPYmplY3RUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMTGlzdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTExpc3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxOb25OdWxsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMTm9uTnVsbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTERpcmVjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTERpcmVjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHlwZUtpbmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLlR5cGVLaW5kfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEaXJlY3RpdmVMb2NhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuRGlyZWN0aXZlTG9jYXRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxJbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxJbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxGbG9hdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEZsb2F0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMU3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMQm9vbGVhbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEJvb2xlYW59fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxJRCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTElEfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzcGVjaWZpZWREaXJlY3RpdmVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zcGVjaWZpZWREaXJlY3RpdmVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMSW5jbHVkZURpcmVjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEluY2x1ZGVEaXJlY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxTa2lwRGlyZWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMU2tpcERpcmVjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTERlcHJlY2F0ZWREaXJlY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxEZXByZWNhdGVkRGlyZWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJERUZBVUxUX0RFUFJFQ0FUSU9OX1JFQVNPTiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuREVGQVVMVF9ERVBSRUNBVElPTl9SRUFTT059fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNjaGVtYU1ldGFGaWVsZERlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuU2NoZW1hTWV0YUZpZWxkRGVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUeXBlTWV0YUZpZWxkRGVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5UeXBlTWV0YUZpZWxkRGVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUeXBlTmFtZU1ldGFGaWVsZERlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuVHlwZU5hbWVNZXRhRmllbGREZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fU2NoZW1hIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5fX1NjaGVtYX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19EaXJlY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLl9fRGlyZWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX0RpcmVjdGl2ZUxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5fX0RpcmVjdGl2ZUxvY2F0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX1R5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLl9fVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19GaWVsZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuX19GaWVsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19JbnB1dFZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5fX0lucHV0VmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fRW51bVZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5fX0VudW1WYWx1ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19UeXBlS2luZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuX19UeXBlS2luZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc1R5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzSW5wdXRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc0lucHV0VHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNPdXRwdXRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc091dHB1dFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTGVhZlR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmlzTGVhZlR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzQ29tcG9zaXRlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNDb21wb3NpdGVUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0Fic3RyYWN0VHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNBYnN0cmFjdFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTmFtZWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc05hbWVkVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0VHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXNzZXJ0VHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0SW5wdXRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hc3NlcnRJbnB1dFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydE91dHB1dFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFzc2VydE91dHB1dFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydExlYWZUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hc3NlcnRMZWFmVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0Q29tcG9zaXRlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXNzZXJ0Q29tcG9zaXRlVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0QWJzdHJhY3RUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hc3NlcnRBYnN0cmFjdFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydE5hbWVkVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXNzZXJ0TmFtZWRUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXROdWxsYWJsZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmdldE51bGxhYmxlVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0TmFtZWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXROYW1lZFR5cGV9fSk7dmFyIG89bigzOTQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTb3VyY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLlNvdXJjZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0TG9jYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmdldExvY2F0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJzZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFyc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhcnNlVmFsdWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnBhcnNlVmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhcnNlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFyc2VUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmludCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucHJpbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZpc2l0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby52aXNpdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmlzaXRJblBhcmFsbGVsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby52aXNpdEluUGFyYWxsZWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZpc2l0V2l0aFR5cGVJbmZvIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby52aXNpdFdpdGhUeXBlSW5mb319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0VmlzaXRGbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZ2V0VmlzaXRGbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiS2luZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uS2luZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVG9rZW5LaW5kIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Ub2tlbktpbmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkJSRUFLIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5CUkVBS319KTt2YXIgYT1uKDM5NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4ZWN1dGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmV4ZWN1dGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlZmF1bHRGaWVsZFJlc29sdmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5kZWZhdWx0RmllbGRSZXNvbHZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVzcG9uc2VQYXRoQXNBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucmVzcG9uc2VQYXRoQXNBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0RGlyZWN0aXZlVmFsdWVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXREaXJlY3RpdmVWYWx1ZXN9fSk7dmFyIHM9bigzOTYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdWJzY3JpYmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnN1YnNjcmliZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlU291cmNlRXZlbnRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmNyZWF0ZVNvdXJjZUV2ZW50U3RyZWFtfX0pO3ZhciB1PW4oMzk5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsaWRhdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LnZhbGlkYXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJWYWxpZGF0aW9uQ29udGV4dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuVmFsaWRhdGlvbkNvbnRleHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNwZWNpZmllZFJ1bGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5zcGVjaWZpZWRSdWxlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXJndW1lbnRzT2ZDb3JyZWN0VHlwZVJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LkFyZ3VtZW50c09mQ29ycmVjdFR5cGVSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWZhdWx0VmFsdWVzT2ZDb3JyZWN0VHlwZVJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LkRlZmF1bHRWYWx1ZXNPZkNvcnJlY3RUeXBlUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRmllbGRzT25Db3JyZWN0VHlwZVJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LkZpZWxkc09uQ29ycmVjdFR5cGVSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJGcmFnbWVudHNPbkNvbXBvc2l0ZVR5cGVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuRnJhZ21lbnRzT25Db21wb3NpdGVUeXBlc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIktub3duQXJndW1lbnROYW1lc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1Lktub3duQXJndW1lbnROYW1lc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIktub3duRGlyZWN0aXZlc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1Lktub3duRGlyZWN0aXZlc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIktub3duRnJhZ21lbnROYW1lc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1Lktub3duRnJhZ21lbnROYW1lc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIktub3duVHlwZU5hbWVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuS25vd25UeXBlTmFtZXNSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMb25lQW5vbnltb3VzT3BlcmF0aW9uUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuTG9uZUFub255bW91c09wZXJhdGlvblJ1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vRnJhZ21lbnRDeWNsZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5Ob0ZyYWdtZW50Q3ljbGVzUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm9VbmRlZmluZWRWYXJpYWJsZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5Ob1VuZGVmaW5lZFZhcmlhYmxlc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vVW51c2VkRnJhZ21lbnRzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuTm9VbnVzZWRGcmFnbWVudHNSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb1VudXNlZFZhcmlhYmxlc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1Lk5vVW51c2VkVmFyaWFibGVzUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiT3ZlcmxhcHBpbmdGaWVsZHNDYW5CZU1lcmdlZFJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1Lk92ZXJsYXBwaW5nRmllbGRzQ2FuQmVNZXJnZWRSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQb3NzaWJsZUZyYWdtZW50U3ByZWFkc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LlBvc3NpYmxlRnJhZ21lbnRTcHJlYWRzUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUHJvdmlkZWROb25OdWxsQXJndW1lbnRzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuUHJvdmlkZWROb25OdWxsQXJndW1lbnRzUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2NhbGFyTGVhZnNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5TY2FsYXJMZWFmc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNpbmdsZUZpZWxkU3Vic2NyaXB0aW9uc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LlNpbmdsZUZpZWxkU3Vic2NyaXB0aW9uc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVuaXF1ZUFyZ3VtZW50TmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5VbmlxdWVBcmd1bWVudE5hbWVzUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVW5pcXVlRGlyZWN0aXZlc1BlckxvY2F0aW9uUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuVW5pcXVlRGlyZWN0aXZlc1BlckxvY2F0aW9uUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVW5pcXVlRnJhZ21lbnROYW1lc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LlVuaXF1ZUZyYWdtZW50TmFtZXNSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmlxdWVJbnB1dEZpZWxkTmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5VbmlxdWVJbnB1dEZpZWxkTmFtZXNSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmlxdWVPcGVyYXRpb25OYW1lc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LlVuaXF1ZU9wZXJhdGlvbk5hbWVzUnVsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVW5pcXVlVmFyaWFibGVOYW1lc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LlVuaXF1ZVZhcmlhYmxlTmFtZXNSdWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJWYXJpYWJsZXNBcmVJbnB1dFR5cGVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuVmFyaWFibGVzQXJlSW5wdXRUeXBlc1J1bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlZhcmlhYmxlc0luQWxsb3dlZFBvc2l0aW9uUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuVmFyaWFibGVzSW5BbGxvd2VkUG9zaXRpb25SdWxlfX0pO3ZhciBjPW4oMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuR3JhcGhRTEVycm9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmb3JtYXRFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZm9ybWF0RXJyb3J9fSk7dmFyIGw9big0MDApO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpbnRyb3NwZWN0aW9uUXVlcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmludHJvc3BlY3Rpb25RdWVyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0T3BlcmF0aW9uQVNUIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5nZXRPcGVyYXRpb25BU1R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkQ2xpZW50U2NoZW1hIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5idWlsZENsaWVudFNjaGVtYX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYnVpbGRBU1RTY2hlbWEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmJ1aWxkQVNUU2NoZW1hfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJidWlsZFNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYnVpbGRTY2hlbWF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4dGVuZFNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZXh0ZW5kU2NoZW1hfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmludFNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucHJpbnRTY2hlbWF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByaW50SW50cm9zcGVjdGlvblNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucHJpbnRJbnRyb3NwZWN0aW9uU2NoZW1hfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmludFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLnByaW50VHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZUZyb21BU1QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLnR5cGVGcm9tQVNUfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWx1ZUZyb21BU1QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLnZhbHVlRnJvbUFTVH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXN0RnJvbVZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5hc3RGcm9tVmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlR5cGVJbmZvIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5UeXBlSW5mb319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNWYWxpZEpTVmFsdWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmlzVmFsaWRKU1ZhbHVlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1ZhbGlkTGl0ZXJhbFZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5pc1ZhbGlkTGl0ZXJhbFZhbHVlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjb25jYXRBU1QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmNvbmNhdEFTVH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VwYXJhdGVPcGVyYXRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5zZXBhcmF0ZU9wZXJhdGlvbnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRXF1YWxUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5pc0VxdWFsVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNUeXBlU3ViVHlwZU9mIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5pc1R5cGVTdWJUeXBlT2Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRvVHlwZXNPdmVybGFwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kb1R5cGVzT3ZlcmxhcH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0VmFsaWROYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5hc3NlcnRWYWxpZE5hbWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmRCcmVha2luZ0NoYW5nZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmZpbmRCcmVha2luZ0NoYW5nZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmREYW5nZXJvdXNDaGFuZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5maW5kRGFuZ2Vyb3VzQ2hhbmdlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQnJlYWtpbmdDaGFuZ2VUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5CcmVha2luZ0NoYW5nZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRhbmdlcm91c0NoYW5nZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLkRhbmdlcm91c0NoYW5nZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmREZXByZWNhdGVkVXNhZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5maW5kRGVwcmVjYXRlZFVzYWdlc319KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10fWZ1bmN0aW9uIGkoZSx0LG4pe2lmKG51bGw9PT10fHxudWxsPT09bnx8dC5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9dC5sZW5ndGgsaT0wO2k8cjtpKyspaWYoIWUodFtpXSxuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpyLG49bnVsbCxvPW51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkodCxuLGFyZ3VtZW50cyl8fChvPWUuYXBwbHkobnVsbCxhcmd1bWVudHMpKSxuPWFyZ3VtZW50cyxvfX1mdW5jdGlvbiBhKGUpe3ZhciB0PUFycmF5LmlzQXJyYXkoZVswXSk/ZVswXTplO2lmKCF0LmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgZX0pKXt2YXIgbj10Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9KS5qb2luKCIsICIpO3Rocm93IG5ldyBFcnJvcigiU2VsZWN0b3IgY3JlYXRvcnMgZXhwZWN0IGFsbCBpbnB1dC1zZWxlY3RvcnMgdG8gYmUgZnVuY3Rpb25zLCBpbnN0ZWFkIHJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdHlwZXM6IFsiK24rIl0iKX1yZXR1cm4gdH1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkodCksaT0wO2k8dDtpKyspcltpXT1hcmd1bWVudHNbaV07dmFyIHM9MCx1PXIucG9wKCksYz1hKHIpLGw9ZS5hcHBseSh2b2lkIDAsW2Z1bmN0aW9uKCl7cmV0dXJuIHMrKyx1LmFwcGx5KG51bGwsYXJndW1lbnRzKX1dLmNvbmNhdChuKSkscD1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9Yy5sZW5ndGgsbj0wO248dDtuKyspZS5wdXNoKGNbbl0uYXBwbHkobnVsbCxhcmd1bWVudHMpKTtyZXR1cm4gbC5hcHBseShudWxsLGUpfSk7cmV0dXJuIHAucmVzdWx0RnVuYz11LHAucmVjb21wdXRhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gc30scC5yZXNldFJlY29tcHV0YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHM9MH0scH19ZnVuY3Rpb24gdShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YztpZigib2JqZWN0IiE9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yIGV4cGVjdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdoZXJlIGVhY2ggcHJvcGVydHkgaXMgYSBzZWxlY3RvciwgaW5zdGVhZCByZWNlaXZlZCBhICIrdHlwZW9mIGUpO3ZhciBuPU9iamVjdC5rZXlzKGUpO3JldHVybiB0KG4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiB0LnJlZHVjZShmdW5jdGlvbihlLHQscil7cmV0dXJuIGVbbltyXV09dCxlfSx7fSl9KX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0TWVtb2l6ZT1vLHQuY3JlYXRlU2VsZWN0b3JDcmVhdG9yPXMsdC5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3I9dTt2YXIgYz10LmNyZWF0ZVNlbGVjdG9yPXMobyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzI5KSxpPW4oMTU2KSxvPW4oMzMyKTtuLmQodCwiUHJvdmlkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJjcmVhdGVQcm92aWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSksbi5kKHQsImNvbm5lY3RBZHZhbmNlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSksbi5kKHQsImNvbm5lY3QiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk5BTUU9Ik5hbWUiLHQuRE9DVU1FTlQ9IkRvY3VtZW50Iix0Lk9QRVJBVElPTl9ERUZJTklUSU9OPSJPcGVyYXRpb25EZWZpbml0aW9uIix0LlZBUklBQkxFX0RFRklOSVRJT049IlZhcmlhYmxlRGVmaW5pdGlvbiIsdC5WQVJJQUJMRT0iVmFyaWFibGUiLHQuU0VMRUNUSU9OX1NFVD0iU2VsZWN0aW9uU2V0Iix0LkZJRUxEPSJGaWVsZCIsdC5BUkdVTUVOVD0iQXJndW1lbnQiLHQuRlJBR01FTlRfU1BSRUFEPSJGcmFnbWVudFNwcmVhZCIsdC5JTkxJTkVfRlJBR01FTlQ9IklubGluZUZyYWdtZW50Iix0LkZSQUdNRU5UX0RFRklOSVRJT049IkZyYWdtZW50RGVmaW5pdGlvbiIsdC5JTlQ9IkludFZhbHVlIix0LkZMT0FUPSJGbG9hdFZhbHVlIix0LlNUUklORz0iU3RyaW5nVmFsdWUiLHQuQk9PTEVBTj0iQm9vbGVhblZhbHVlIix0Lk5VTEw9Ik51bGxWYWx1ZSIsdC5FTlVNPSJFbnVtVmFsdWUiLHQuTElTVD0iTGlzdFZhbHVlIix0Lk9CSkVDVD0iT2JqZWN0VmFsdWUiLHQuT0JKRUNUX0ZJRUxEPSJPYmplY3RGaWVsZCIsdC5ESVJFQ1RJVkU9IkRpcmVjdGl2ZSIsdC5OQU1FRF9UWVBFPSJOYW1lZFR5cGUiLHQuTElTVF9UWVBFPSJMaXN0VHlwZSIsdC5OT05fTlVMTF9UWVBFPSJOb25OdWxsVHlwZSIsdC5TQ0hFTUFfREVGSU5JVElPTj0iU2NoZW1hRGVmaW5pdGlvbiIsdC5PUEVSQVRJT05fVFlQRV9ERUZJTklUSU9OPSJPcGVyYXRpb25UeXBlRGVmaW5pdGlvbiIsdC5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OPSJTY2FsYXJUeXBlRGVmaW5pdGlvbiIsdC5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OPSJPYmplY3RUeXBlRGVmaW5pdGlvbiIsdC5GSUVMRF9ERUZJTklUSU9OPSJGaWVsZERlZmluaXRpb24iLHQuSU5QVVRfVkFMVUVfREVGSU5JVElPTj0iSW5wdXRWYWx1ZURlZmluaXRpb24iLHQuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTj0iSW50ZXJmYWNlVHlwZURlZmluaXRpb24iLHQuVU5JT05fVFlQRV9ERUZJTklUSU9OPSJVbmlvblR5cGVEZWZpbml0aW9uIix0LkVOVU1fVFlQRV9ERUZJTklUSU9OPSJFbnVtVHlwZURlZmluaXRpb24iLHQuRU5VTV9WQUxVRV9ERUZJTklUSU9OPSJFbnVtVmFsdWVEZWZpbml0aW9uIix0LklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT049IklucHV0T2JqZWN0VHlwZURlZmluaXRpb24iLHQuVFlQRV9FWFRFTlNJT05fREVGSU5JVElPTj0iVHlwZUV4dGVuc2lvbkRlZmluaXRpb24iLHQuRElSRUNUSVZFX0RFRklOSVRJT049IkRpcmVjdGl2ZURlZmluaXRpb24ifSxmdW5jdGlvbihlLHQpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfHwoMCxldmFsKSgidGhpcyIpfWNhdGNoKGUpeyJvYmplY3QiPT09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLmdldCgic2VsZWN0ZWRXb3Jrc3BhY2UiKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLmdldEluKFsid29ya3NwYWNlcyIscihlKV0pfHxjLm1ha2VXb3Jrc3BhY2UoIiIpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUuZ2V0SW4oWyJzZXR0aW5nc1N0cmluZyJdKX1mdW5jdGlvbiBhKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXt9cmV0dXJue319ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnZhcmlhYmxlczt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7fXJldHVybnt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT1uKDgpLGM9bigxNyk7dC5nZXRTZXNzaW9uc1N0YXRlPXUuY3JlYXRlU2VsZWN0b3IoW2ldLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgic2Vzc2lvbnMiKX0pLHQuZ2V0U2VsZWN0ZWRTZXNzaW9uPXUuY3JlYXRlU2VsZWN0b3IoW3QuZ2V0U2Vzc2lvbnNTdGF0ZV0sZnVuY3Rpb24oZSl7dmFyIG49dC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKTtyZXR1cm4gZS5nZXRJbihbInNlc3Npb25zIixuXSl9KSx0LmdldFNlbGVjdGVkU2Vzc2lvbklkPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNlbGVjdGVkU2Vzc2lvbklkJiYiIiE9PWUuc2VsZWN0ZWRTZXNzaW9uSWQ/ZS5zZWxlY3RlZFNlc3Npb25JZDplLnNlc3Npb25zLmZpcnN0KCkuaWR9LHQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWRGcm9tUm9vdD11LmNyZWF0ZVNlbGVjdG9yKFt0LmdldFNlbGVjdGVkU2Vzc2lvbl0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJpZCIpfSk7dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlU2VsZWN0b3IoW3QuZ2V0U2VsZWN0ZWRTZXNzaW9uXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXQoZSl9KX07dC5nZXRTY3JvbGxUb3A9bCgic2Nyb2xsVG9wIiksdC5nZXRFbmRwb2ludD1sKCJlbmRwb2ludCIpLHQuZ2V0UXVlcnk9bCgicXVlcnkiKSx0LmdldEZpbGU9bCgiZmlsZSIpLHQuZ2V0VmFyaWFibGVzPWwoInZhcmlhYmxlcyIpLHQuZ2V0UmVzcG9uc2VzPWwoInJlc3BvbnNlcyIpLHQuZ2V0T3BlcmF0aW9uTmFtZT1sKCJvcGVyYXRpb25OYW1lIiksdC5nZXRRdWVyeVJ1bm5pbmc9bCgicXVlcnlSdW5uaW5nIiksdC5nZXRTdWJzY3JpcHRpb25BY3RpdmU9bCgic3Vic2NyaXB0aW9uQWN0aXZlIiksdC5nZXRPcGVyYXRpb25zPWwoIm9wZXJhdGlvbnMiKSx0LmdldFZhcmlhYmxlVG9UeXBlPWwoInZhcmlhYmxlVG9UeXBlIiksdC5nZXRRdWVyeVR5cGVzPWwoInF1ZXJ5VHlwZXMiKSx0LmdldERhdGU9bCgiZGF0ZSIpLHQuZ2V0SGFzTXV0YXRpb249bCgiaGFzTXV0YXRpb24iKSx0LmdldEhhc1N1YnNjcmlwdGlvbj1sKCJoYXNTdWJzY3JpcHRpb24iKSx0LmdldEhhc1F1ZXJ5PWwoImhhc1F1ZXJ5IiksdC5nZXRJc0ZpbGU9bCgiaXNGaWxlIiksdC5nZXRTdGFycmVkPWwoInN0YXJyZWQiKSx0LmdldE5hbWU9bCgibmFtZSIpLHQuZ2V0RmlsZVBhdGg9bCgiZmlsZVBhdGgiKSx0LmdldFNlbGVjdGVkVXNlclRva2VuPWwoInNlbGVjdGVkVXNlclRva2VuIiksdC5nZXRIZWFkZXJzPWwoImhlYWRlcnMiKSx0LmdldEhhc0NoYW5nZWQ9bCgiaGFzQ2hhbmdlZCIpLHQuZ2V0QWJzb2x1dGVQYXRoPWwoImFic29sdXRlUGF0aCIpLHQuZ2V0SXNTZXR0aW5nc1RhYj1sKCJpc1NldHRpbmdzVGFiIiksdC5nZXRJc0NvbmZpZ1RhYj1sKCJpc0NvbmZpZ1RhYiIpLHQuZ2V0Q3VycmVudFF1ZXJ5U3RhcnRUaW1lPWwoImN1cnJlbnRRdWVyeVN0YXJ0VGltZSIpLHQuZ2V0Q3VycmVudFF1ZXJ5RW5kVGltZT1sKCJjdXJyZW50UXVlcnlFbmRUaW1lIiksdC5nZXRJc1JlbG9hZGluZ1NjaGVtYT1sKCJpc1JlbG9hZGluZ1NjaGVtYSIpLHQuZ2V0SXNQb2xsaW5nU2NoZW1hPXUuY3JlYXRlU2VsZWN0b3IoW3QuZ2V0RW5kcG9pbnQsb10sZnVuY3Rpb24oZSx0KXt2YXIgbj1KU09OLnBhcnNlKHQpO3RyeXtyZXR1cm4gblsic2NoZW1hLnBvbGxpbmcuZW5hYmxlIl0mJmUubWF0Y2goIi8iK25bInNjaGVtYS5wb2xsaW5nLmVuZHBvaW50RmlsdGVyIl0pJiYhMH1jYXRjaChlKXtyZXR1cm4hMX19KSx0LmdldFJlc3BvbnNlRXh0ZW5zaW9ucz1sKCJyZXNwb25zZUV4dGVuc2lvbnMiKSx0LmdldFF1ZXJ5VmFyaWFibGVzQWN0aXZlPWwoInF1ZXJ5VmFyaWFibGVzQWN0aXZlIiksdC5nZXRFbmRwb2ludFVucmVhY2hhYmxlPWwoImVuZHBvaW50VW5yZWFjaGFibGUiKSx0LmdldEVkaXRvckZsZXg9bCgiZWRpdG9yRmxleCIpLHQuZ2V0VmFyaWFibGVFZGl0b3JPcGVuPWwoInZhcmlhYmxlRWRpdG9yT3BlbiIpLHQuZ2V0VmFyaWFibGVFZGl0b3JIZWlnaHQ9bCgidmFyaWFibGVFZGl0b3JIZWlnaHQiKSx0LmdldFJlc3BvbnNlVHJhY2luZ09wZW49bCgicmVzcG9uc2VUcmFjaW5nT3BlbiIpLHQuZ2V0UmVzcG9uc2VUcmFjaW5nSGVpZ2h0PWwoInJlc3BvbnNlVHJhY2luZ0hlaWdodCIpLHQuZ2V0RG9jRXhwbG9yZXJXaWR0aD1sKCJkb2NFeHBsb3JlcldpZHRoIiksdC5nZXROZXh0UXVlcnlTdGFydFRpbWU9bCgibmV4dFF1ZXJ5U3RhcnRUaW1lIiksdC5nZXRUcmFjaW5nU3VwcG9ydGVkPWwoInRyYWNpbmdTdXBwb3J0ZWQiKSx0LmdldFRhYldpZHRoPXUuY3JlYXRlU2VsZWN0b3IoW29dLGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKVsicHJldHRpZXIudGFiV2lkdGgiXXx8Mn1jYXRjaChlKXt9cmV0dXJuIDJ9KSx0LmdldFVzZVRhYnM9dS5jcmVhdGVTZWxlY3Rvcihbb10sZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpWyJwcmV0dGllci51c2VUYWJzIl18fCExfWNhdGNoKGUpe31yZXR1cm4hMX0pLHQuZ2V0SGVhZGVyc0NvdW50PXUuY3JlYXRlU2VsZWN0b3IoW3QuZ2V0SGVhZGVyc10sZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PUpTT04ucGFyc2UoZSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aH1jYXRjaChlKXt9cmV0dXJuIDB9KSx0LmdldFBhcnNlZEhlYWRlcnM9dS5jcmVhdGVTZWxlY3RvcihbdC5nZXRTZWxlY3RlZFNlc3Npb25dLGEpLHQuZ2V0UGFyc2VkSGVhZGVyc0Zyb21TZXNzaW9uPWEsdC5nZXRQYXJzZWRWYXJpYWJsZXM9dS5jcmVhdGVTZWxlY3RvcihbdC5nZXRTZWxlY3RlZFNlc3Npb25dLHMpLHQuZ2V0UGFyc2VkVmFyaWFibGVzRnJvbVNlc3Npb249cyx0LmdldFRyYWNpbmc9dS5jcmVhdGVTZWxlY3RvcihbdC5nZXRSZXNwb25zZUV4dGVuc2lvbnNdLGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLnRyYWNpbmd9KSx0LmdldFNlc3Npb25zQXJyYXk9dS5jcmVhdGVTZWxlY3RvcihbdC5nZXRTZXNzaW9uc1N0YXRlXSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoInNlc3Npb25zIikudG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS52YWx1ZT0hMSxlfWZ1bmN0aW9uIGkoZSl7ZSYmKGUudmFsdWU9ITApfWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYShlKXtyZXR1cm4gdm9pZCAwPT09ZS5zaXplJiYoZS5zaXplPWUuX19pdGVyYXRlKHUpKSxlLnNpemV9ZnVuY3Rpb24gcyhlLHQpe2lmKCJudW1iZXIiIT09dHlwZW9mIHQpe3ZhciBuPXQ+Pj4wO2lmKCIiK24hPT10fHw0Mjk0OTY3Mjk1PT09bilyZXR1cm4gTmFOO3Q9bn1yZXR1cm4gdDwwP2EoZSkrdDp0fWZ1bmN0aW9uIHUoKXtyZXR1cm4hMH1mdW5jdGlvbiBjKGUsdCxuKXtyZXR1cm4oMD09PWUmJiFkKGUpfHx2b2lkIDAhPT1uJiZlPD0tbikmJih2b2lkIDA9PT10fHx2b2lkIDAhPT1uJiZ0Pj1uKX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGYoZSx0LDApfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZihlLHQsdCl9ZnVuY3Rpb24gZihlLHQsbil7cmV0dXJuIHZvaWQgMD09PWU/bjpkKGUpP3Q9PT0xLzA/dDowfE1hdGgubWF4KDAsdCtlKTp2b2lkIDA9PT10fHx0PT09ZT9lOjB8TWF0aC5taW4odCxlKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlPDB8fDA9PT1lJiYxL2U9PT0tMS8wfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIG0oZSl8fHgoZSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4hKCFlfHwhZVtobl0pfWZ1bmN0aW9uIGcoZSl7cmV0dXJuISghZXx8IWVbbW5dKX1mdW5jdGlvbiB5KGUpe3JldHVybiEoIWV8fCFlW2duXSl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZyhlKXx8eShlKX1mdW5jdGlvbiBiKGUpe3JldHVybiEoIWV8fCFlW3luXSl9ZnVuY3Rpb24geChlKXtyZXR1cm4hKCFlfHwhZVt2bl0pfWZ1bmN0aW9uIEMoZSl7cmV0dXJuISghZXx8ImZ1bmN0aW9uIiE9PXR5cGVvZiBlLmVxdWFsc3x8ImZ1bmN0aW9uIiE9PXR5cGVvZiBlLmhhc2hDb2RlKX1mdW5jdGlvbiBFKGUsdCxuLHIpe3ZhciBpPTA9PT1lP3Q6MT09PWU/bjpbdCxuXTtyZXR1cm4gcj9yLnZhbHVlPWk6cj17dmFsdWU6aSxkb25lOiExfSxyfWZ1bmN0aW9uIEQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZ1bmN0aW9uIHcoZSl7cmV0dXJuISFBKGUpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgZS5uZXh0fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9QShlKTtyZXR1cm4gdCYmdC5jYWxsKGUpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9ZSYmKGtuJiZlW2tuXXx8ZVtBbl0pO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdClyZXR1cm4gdH1mdW5jdGlvbiBfKGUpe3JldHVybiBlJiYibnVtYmVyIj09PXR5cGVvZiBlLmxlbmd0aH1mdW5jdGlvbiBUKGUpe3JldHVybiEoIWV8fCFlW1BuXSl9ZnVuY3Rpb24gTygpe3JldHVybiBSbnx8KFJuPW5ldyBNbihbXSkpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9QXJyYXkuaXNBcnJheShlKT9uZXcgTW4oZSk6UyhlKT9uZXcgVW4oZSk6dyhlKT9uZXcgJG4oZSk6dm9pZCAwO2lmKHQpcmV0dXJuIHQuZnJvbUVudHJ5U2VxKCk7aWYoIm9iamVjdCI9PT10eXBlb2YgZSlyZXR1cm4gbmV3IGpuKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIEFycmF5IG9yIGNvbGxlY3Rpb24gb2JqZWN0IG9mIFtrLCB2XSBlbnRyaWVzLCBvciBrZXllZCBvYmplY3Q6ICIrZSl9ZnVuY3Rpb24gTihlKXt2YXIgdD1MKGUpO2lmKHQpcmV0dXJuIHQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgQXJyYXkgb3IgY29sbGVjdGlvbiBvYmplY3Qgb2YgdmFsdWVzOiAiK2UpfWZ1bmN0aW9uIEkoZSl7dmFyIHQ9TChlKTtpZih0KXJldHVybiB0O2lmKCJvYmplY3QiPT09dHlwZW9mIGUpcmV0dXJuIG5ldyBqbihlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBBcnJheSBvciBjb2xsZWN0aW9uIG9iamVjdCBvZiB2YWx1ZXMsIG9yIGtleWVkIG9iamVjdDogIitlKX1mdW5jdGlvbiBMKGUpe3JldHVybiBfKGUpP25ldyBNbihlKTpTKGUpP25ldyBVbihlKTp3KGUpP25ldyAkbihlKTp2b2lkIDB9ZnVuY3Rpb24gUChlLHQpe2lmKGU9PT10fHxlIT09ZSYmdCE9PXQpcmV0dXJuITA7aWYoIWV8fCF0KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iPT09dHlwZW9mIHQudmFsdWVPZil7aWYoZT1lLnZhbHVlT2YoKSx0PXQudmFsdWVPZigpLGU9PT10fHxlIT09ZSYmdCE9PXQpcmV0dXJuITA7aWYoIWV8fCF0KXJldHVybiExfXJldHVybiEhKEMoZSkmJkModCkmJmUuZXF1YWxzKHQpKX1mdW5jdGlvbiBNKGUpe3JldHVybiBlPj4+MSYxMDczNzQxODI0fDMyMjEyMjU0NzEmZX1mdW5jdGlvbiBqKGUpe2lmKCExPT09ZXx8bnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuIDA7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBlLnZhbHVlT2YmJighMT09PShlPWUudmFsdWVPZigpKXx8bnVsbD09PWV8fHZvaWQgMD09PWUpKXJldHVybiAwO2lmKCEwPT09ZSlyZXR1cm4gMTt2YXIgdD10eXBlb2YgZTtpZigibnVtYmVyIj09PXQpe2lmKGUhPT1lfHxlPT09MS8wKXJldHVybiAwO3ZhciBuPTB8ZTtmb3IobiE9PWUmJihuXj00Mjk0OTY3Mjk1KmUpO2U+NDI5NDk2NzI5NTspZS89NDI5NDk2NzI5NSxuXj1lO3JldHVybiBNKG4pfWlmKCJzdHJpbmciPT09dClyZXR1cm4gZS5sZW5ndGg+UW4/UihlKTpCKGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZS5oYXNoQ29kZSlyZXR1cm4gTShlLmhhc2hDb2RlKCkpO2lmKCJvYmplY3QiPT09dClyZXR1cm4gJChlKTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGUudG9TdHJpbmcpcmV0dXJuIEIoZS50b1N0cmluZygpKTt0aHJvdyBuZXcgRXJyb3IoIlZhbHVlIHR5cGUgIit0KyIgY2Fubm90IGJlIGhhc2hlZC4iKX1mdW5jdGlvbiBSKGUpe3ZhciB0PVluW2VdO3JldHVybiB2b2lkIDA9PT10JiYodD1CKGUpLEpuPT09S24mJihKbj0wLFluPXt9KSxKbisrLFluW2VdPXQpLHR9ZnVuY3Rpb24gQihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspdD0zMSp0K2UuY2hhckNvZGVBdChuKXwwO3JldHVybiBNKHQpfWZ1bmN0aW9uICQoZSl7dmFyIHQ7aWYocW4mJnZvaWQgMCE9PSh0PUJuLmdldChlKSkpcmV0dXJuIHQ7aWYodm9pZCAwIT09KHQ9ZVtXbl0pKXJldHVybiB0O2lmKCFWbil7aWYodm9pZCAwIT09KHQ9ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmZS5wcm9wZXJ0eUlzRW51bWVyYWJsZVtXbl0pKXJldHVybiB0O2lmKHZvaWQgMCE9PSh0PVUoZSkpKXJldHVybiB0fWlmKHQ9KytIbiwxMDczNzQxODI0JkhuJiYoSG49MCkscW4pQm4uc2V0KGUsdCk7ZWxzZXtpZih2b2lkIDAhPT1HbiYmITE9PT1HbihlKSl0aHJvdyBuZXcgRXJyb3IoIk5vbi1leHRlbnNpYmxlIG9iamVjdHMgYXJlIG5vdCBhbGxvd2VkIGFzIGtleXMuIik7aWYoVm4pT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsV24se2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOnR9KTtlbHNlIGlmKHZvaWQgMCE9PWUucHJvcGVydHlJc0VudW1lcmFibGUmJmUucHJvcGVydHlJc0VudW1lcmFibGU9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSllLnByb3BlcnR5SXNFbnVtZXJhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5wcm9wZXJ0eUlzRW51bWVyYWJsZVtXbl09dDtlbHNle2lmKHZvaWQgMD09PWUubm9kZVR5cGUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc2V0IGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gb2JqZWN0LiIpO2VbV25dPXR9fXJldHVybiB0fWZ1bmN0aW9uIFUoZSl7aWYoZSYmZS5ub2RlVHlwZT4wKXN3aXRjaChlLm5vZGVUeXBlKXtjYXNlIDE6cmV0dXJuIGUudW5pcXVlSUQ7Y2FzZSA5OnJldHVybiBlLmRvY3VtZW50RWxlbWVudCYmZS5kb2N1bWVudEVsZW1lbnQudW5pcXVlSUR9fWZ1bmN0aW9uIHooZSl7dmFyIHQ9dWUoZSk7cmV0dXJuIHQuX2l0ZXI9ZSx0LnNpemU9ZS5zaXplLHQuZmxpcD1mdW5jdGlvbigpe3JldHVybiBlfSx0LnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgdD1lLnJldmVyc2UuYXBwbHkodGhpcyk7cmV0dXJuIHQuZmxpcD1mdW5jdGlvbigpe3JldHVybiBlLnJldmVyc2UoKX0sdH0sdC5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9LHQuaW5jbHVkZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFzKHQpfSx0LmNhY2hlUmVzdWx0PWNlLHQuX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzO3JldHVybiBlLl9faXRlcmF0ZShmdW5jdGlvbihlLG4pe3JldHVybiExIT09dChuLGUscil9LG4pfSx0Ll9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbih0LG4pe2lmKHQ9PT1Tbil7dmFyIHI9ZS5fX2l0ZXJhdG9yKHQsbik7cmV0dXJuIG5ldyBUbihmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO2lmKCFlLmRvbmUpe3ZhciB0PWUudmFsdWVbMF07ZS52YWx1ZVswXT1lLnZhbHVlWzFdLGUudmFsdWVbMV09dH1yZXR1cm4gZX0pfXJldHVybiBlLl9faXRlcmF0b3IodD09PXduP0RuOnduLG4pfSx0fWZ1bmN0aW9uIEcoZSx0LG4pe3ZhciByPXVlKGUpO3JldHVybiByLnNpemU9ZS5zaXplLHIuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmhhcyh0KX0sci5nZXQ9ZnVuY3Rpb24ocixpKXt2YXIgbz1lLmdldChyLHBuKTtyZXR1cm4gbz09PXBuP2k6dC5jYWxsKG4sbyxyLGUpfSxyLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7dmFyIG89dGhpcztyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxpLGEpe3JldHVybiExIT09cih0LmNhbGwobixlLGksYSksaSxvKX0saSl9LHIuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7dmFyIG89ZS5fX2l0ZXJhdG9yKFNuLGkpO3JldHVybiBuZXcgVG4oZnVuY3Rpb24oKXt2YXIgaT1vLm5leHQoKTtpZihpLmRvbmUpcmV0dXJuIGk7dmFyIGE9aS52YWx1ZSxzPWFbMF07cmV0dXJuIEUocixzLHQuY2FsbChuLGFbMV0scyxlKSxpKX0pfSxyfWZ1bmN0aW9uIFYoZSx0KXt2YXIgbj10aGlzLHI9dWUoZSk7cmV0dXJuIHIuX2l0ZXI9ZSxyLnNpemU9ZS5zaXplLHIucmV2ZXJzZT1mdW5jdGlvbigpe3JldHVybiBlfSxlLmZsaXAmJihyLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD16KGUpO3JldHVybiB0LnJldmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbGlwKCl9LHR9KSxyLmdldD1mdW5jdGlvbihuLHIpe3JldHVybiBlLmdldCh0P246LTEtbixyKX0sci5oYXM9ZnVuY3Rpb24obil7cmV0dXJuIGUuaGFzKHQ/bjotMS1uKX0sci5pbmNsdWRlcz1mdW5jdGlvbih0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KX0sci5jYWNoZVJlc3VsdD1jZSxyLl9faXRlcmF0ZT1mdW5jdGlvbihuLHIpe3ZhciBpPXRoaXMsbz0wO3JldHVybiByJiZhKGUpLGUuX19pdGVyYXRlKGZ1bmN0aW9uKGUsYSl7cmV0dXJuIG4oZSx0P2E6cj9pLnNpemUtKytvOm8rKyxpKX0sIXIpfSxyLl9faXRlcmF0b3I9ZnVuY3Rpb24ocixpKXt2YXIgbz0wO2kmJmEoZSk7dmFyIHM9ZS5fX2l0ZXJhdG9yKFNuLCFpKTtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7dmFyIGU9cy5uZXh0KCk7aWYoZS5kb25lKXJldHVybiBlO3ZhciBhPWUudmFsdWU7cmV0dXJuIEUocix0P2FbMF06aT9uLnNpemUtKytvOm8rKyxhWzFdLGUpfSl9LHJ9ZnVuY3Rpb24gcShlLHQsbixyKXt2YXIgaT11ZShlKTtyZXR1cm4gciYmKGkuaGFzPWZ1bmN0aW9uKHIpe3ZhciBpPWUuZ2V0KHIscG4pO3JldHVybiBpIT09cG4mJiEhdC5jYWxsKG4saSxyLGUpfSxpLmdldD1mdW5jdGlvbihyLGkpe3ZhciBvPWUuZ2V0KHIscG4pO3JldHVybiBvIT09cG4mJnQuY2FsbChuLG8scixlKT9vOml9KSxpLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKGksbyl7dmFyIGE9dGhpcyxzPTA7cmV0dXJuIGUuX19pdGVyYXRlKGZ1bmN0aW9uKGUsbyx1KXtpZih0LmNhbGwobixlLG8sdSkpcmV0dXJuIHMrKyxpKGUscj9vOnMtMSxhKX0sbyksc30saS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oaSxvKXt2YXIgYT1lLl9faXRlcmF0b3IoU24sbykscz0wO3JldHVybiBuZXcgVG4oZnVuY3Rpb24oKXtmb3IoOzspe3ZhciBvPWEubmV4dCgpO2lmKG8uZG9uZSlyZXR1cm4gbzt2YXIgdT1vLnZhbHVlLGM9dVswXSxsPXVbMV07aWYodC5jYWxsKG4sbCxjLGUpKXJldHVybiBFKGkscj9jOnMrKyxsLG8pfX0pfSxpfWZ1bmN0aW9uIEgoZSx0LG4pe3ZhciByPW5yKCkuYXNNdXRhYmxlKCk7cmV0dXJuIGUuX19pdGVyYXRlKGZ1bmN0aW9uKGksbyl7ci51cGRhdGUodC5jYWxsKG4saSxvLGUpLDAsZnVuY3Rpb24oZSl7cmV0dXJuIGUrMX0pfSksci5hc0ltbXV0YWJsZSgpfWZ1bmN0aW9uIFcoZSx0LG4pe3ZhciByPWcoZSksaT0oYihlKT9DcigpOm5yKCkpLmFzTXV0YWJsZSgpO2UuX19pdGVyYXRlKGZ1bmN0aW9uKG8sYSl7aS51cGRhdGUodC5jYWxsKG4sbyxhLGUpLGZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fFtdLGUucHVzaChyP1thLG9dOm8pLGV9KX0pO3ZhciBvPXNlKGUpO3JldHVybiBpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb2UoZSxvKHQpKX0pfWZ1bmN0aW9uIFEoZSx0LG4scil7dmFyIGk9ZS5zaXplO2lmKGModCxuLGkpKXJldHVybiBlO3ZhciBvPWwodCxpKSxhPXAobixpKTtpZihvIT09b3x8YSE9PWEpcmV0dXJuIFEoZS50b1NlcSgpLmNhY2hlUmVzdWx0KCksdCxuLHIpO3ZhciB1LGY9YS1vO2Y9PT1mJiYodT1mPDA/MDpmKTt2YXIgZD11ZShlKTtyZXR1cm4gZC5zaXplPTA9PT11P3U6ZS5zaXplJiZ1fHx2b2lkIDAsIXImJlQoZSkmJnU+PTAmJihkLmdldD1mdW5jdGlvbih0LG4pe3JldHVybiB0PXModGhpcyx0KSx0Pj0wJiZ0PHU/ZS5nZXQodCtvLG4pOm59KSxkLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcztpZigwPT09dSlyZXR1cm4gMDtpZihuKXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKHQsbik7dmFyIGE9MCxzPSEwLGM9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxuKXtpZighc3x8IShzPWErKzxvKSlyZXR1cm4gYysrLCExIT09dChlLHI/bjpjLTEsaSkmJmMhPT11fSksY30sZC5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24odCxuKXtpZigwIT09dSYmbilyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IodCxuKTtpZigwPT09dSlyZXR1cm4gbmV3IFRuKEQpO3ZhciBpPWUuX19pdGVyYXRvcih0LG4pLGE9MCxzPTA7cmV0dXJuIG5ldyBUbihmdW5jdGlvbigpe2Zvcig7YSsrPG87KWkubmV4dCgpO2lmKCsrcz51KXJldHVybiBEKCk7dmFyIGU9aS5uZXh0KCk7cmV0dXJuIHJ8fHQ9PT13bnx8ZS5kb25lP2U6dD09PURuP0UodCxzLTEsdm9pZCAwLGUpOkUodCxzLTEsZS52YWx1ZVsxXSxlKX0pfSxkfWZ1bmN0aW9uIEsoZSx0LG4pe3ZhciByPXVlKGUpO3JldHVybiByLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7dmFyIG89dGhpcztpZihpKXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKHIsaSk7dmFyIGE9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LmNhbGwobixlLGkscykmJisrYSYmcihlLGksbyl9KSxhfSxyLl9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbihyLGkpe3ZhciBvPXRoaXM7aWYoaSlyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IocixpKTt2YXIgYT1lLl9faXRlcmF0b3IoU24saSkscz0hMDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7aWYoIXMpcmV0dXJuIEQoKTt2YXIgZT1hLm5leHQoKTtpZihlLmRvbmUpcmV0dXJuIGU7dmFyIGk9ZS52YWx1ZSx1PWlbMF0sYz1pWzFdO3JldHVybiB0LmNhbGwobixjLHUsbyk/cj09PVNuP2U6RShyLHUsYyxlKToocz0hMSxEKCkpfSl9LHJ9ZnVuY3Rpb24gSihlLHQsbixyKXt2YXIgaT11ZShlKTtyZXR1cm4gaS5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihpLG8pe3ZhciBhPXRoaXM7aWYobylyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShpLG8pO3ZhciBzPSEwLHU9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxvLGMpe2lmKCFzfHwhKHM9dC5jYWxsKG4sZSxvLGMpKSlyZXR1cm4gdSsrLGkoZSxyP286dS0xLGEpfSksdX0saS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oaSxvKXt2YXIgYT10aGlzO2lmKG8pcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKGksbyk7dmFyIHM9ZS5fX2l0ZXJhdG9yKFNuLG8pLHU9ITAsYz0wO3JldHVybiBuZXcgVG4oZnVuY3Rpb24oKXt2YXIgZSxvLGw7ZG97aWYoZT1zLm5leHQoKSxlLmRvbmUpcmV0dXJuIHJ8fGk9PT13bj9lOmk9PT1Ebj9FKGksYysrLHZvaWQgMCxlKTpFKGksYysrLGUudmFsdWVbMV0sZSk7dmFyIHA9ZS52YWx1ZTtvPXBbMF0sbD1wWzFdLHUmJih1PXQuY2FsbChuLGwsbyxhKSl9d2hpbGUodSk7cmV0dXJuIGk9PT1Tbj9lOkUoaSxvLGwsZSl9KX0saX1mdW5jdGlvbiBZKGUsdCl7dmFyIG49ZyhlKSxyPVtlXS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBtKGUpP24mJihlPXhuKGUpKTplPW4/RihlKTpOKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLGV9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1lLnNpemV9KTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGU7aWYoMT09PXIubGVuZ3RoKXt2YXIgaT1yWzBdO2lmKGk9PT1lfHxuJiZnKGkpfHx5KGUpJiZ5KGkpKXJldHVybiBpfXZhciBvPW5ldyBNbihyKTtyZXR1cm4gbj9vPW8udG9LZXllZFNlcSgpOnkoZSl8fChvPW8udG9TZXRTZXEoKSksbz1vLmZsYXR0ZW4oITApLG8uc2l6ZT1yLnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PWUpe3ZhciBuPXQuc2l6ZTtpZih2b2lkIDAhPT1uKXJldHVybiBlK259fSwwKSxvfWZ1bmN0aW9uIFgoZSx0LG4pe3ZhciByPXVlKGUpO3JldHVybiByLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlLGMpe2UuX19pdGVyYXRlKGZ1bmN0aW9uKGUsbyl7cmV0dXJuKCF0fHxjPHQpJiZtKGUpP2EoZSxjKzEpOihzKyssITE9PT1pKGUsbj9vOnMtMSxyKSYmKHU9ITApKSwhdX0sbyl9aWYobylyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShpLG8pO3ZhciBzPTAsdT0hMTtyZXR1cm4gYShlLDApLHN9LHIuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7aWYoaSlyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IocixpKTt2YXIgbz1lLl9faXRlcmF0b3IocixpKSxhPVtdLHM9MDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7Zm9yKDtvOyl7dmFyIGU9by5uZXh0KCk7aWYoITE9PT1lLmRvbmUpe3ZhciB1PWUudmFsdWU7aWYocj09PVNuJiYodT11WzFdKSx0JiYhKGEubGVuZ3RoPHQpfHwhbSh1KSlyZXR1cm4gbj9lOkUocixzKyssdSxlKTthLnB1c2gobyksbz11Ll9faXRlcmF0b3IocixpKX1lbHNlIG89YS5wb3AoKX1yZXR1cm4gRCgpfSl9LHJ9ZnVuY3Rpb24gWihlLHQsbil7dmFyIHI9c2UoZSk7cmV0dXJuIGUudG9TZXEoKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm4gcih0LmNhbGwobixpLG8sZSkpfSkuZmxhdHRlbighMCl9ZnVuY3Rpb24gZWUoZSx0KXt2YXIgbj11ZShlKTtyZXR1cm4gbi5zaXplPWUuc2l6ZSYmMiplLnNpemUtMSxuLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKG4scil7dmFyIGk9dGhpcyxvPTA7cmV0dXJuIGUuX19pdGVyYXRlKGZ1bmN0aW9uKGUpe3JldHVybighb3x8ITEhPT1uKHQsbysrLGkpKSYmITEhPT1uKGUsbysrLGkpfSxyKSxvfSxuLl9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbihuLHIpe3ZhciBpLG89ZS5fX2l0ZXJhdG9yKHduLHIpLGE9MDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7cmV0dXJuKCFpfHxhJTIpJiYoaT1vLm5leHQoKSxpLmRvbmUpP2k6YSUyP0UobixhKyssdCk6RShuLGErKyxpLnZhbHVlLGkpfSl9LG59ZnVuY3Rpb24gdGUoZSx0LG4pe3R8fCh0PWxlKTt2YXIgcj1nKGUpLGk9MCxvPWUudG9TZXEoKS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm5bcix0LGkrKyxuP24odCxyLGUpOnRdfSkudmFsdWVTZXEoKS50b0FycmF5KCk7cmV0dXJuIG8uc29ydChmdW5jdGlvbihlLG4pe3JldHVybiB0KGVbM10sblszXSl8fGVbMl0tblsyXX0pLmZvckVhY2gocj9mdW5jdGlvbihlLHQpe29bdF0ubGVuZ3RoPTJ9OmZ1bmN0aW9uKGUsdCl7b1t0XT1lWzFdfSkscj9ObihvKTp5KGUpP0luKG8pOkxuKG8pfWZ1bmN0aW9uIG5lKGUsdCxuKXtpZih0fHwodD1sZSksbil7dmFyIHI9ZS50b1NlcSgpLm1hcChmdW5jdGlvbih0LHIpe3JldHVyblt0LG4odCxyLGUpXX0pLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiByZSh0LGVbMV0sblsxXSk/bjplfSk7cmV0dXJuIHImJnJbMF19cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHJlKHQsZSxuKT9uOmV9KX1mdW5jdGlvbiByZShlLHQsbil7dmFyIHI9ZShuLHQpO3JldHVybiAwPT09ciYmbiE9PXQmJih2b2lkIDA9PT1ufHxudWxsPT09bnx8biE9PW4pfHxyPjB9ZnVuY3Rpb24gaWUoZSx0LG4scil7dmFyIGk9dWUoZSksbz1uZXcgTW4obikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNpemV9KTtyZXR1cm4gaS5zaXplPXI/by5tYXgoKTpvLm1pbigpLGkuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9dGhpcyxpPXRoaXMuX19pdGVyYXRvcih3bix0KSxvPTA7IShuPWkubmV4dCgpKS5kb25lJiYhMSE9PWUobi52YWx1ZSxvKysscik7KTtyZXR1cm4gb30saS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oZSxpKXt2YXIgbz1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT1ibihlKSxrKGk/ZS5yZXZlcnNlKCk6ZSl9KSxhPTAscz0hMTtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7dmFyIG47cmV0dXJuIHN8fChuPW8ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5leHQoKX0pLHM9cj9uLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmV9KTpuLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZX0pKSxzP0QoKTpFKGUsYSsrLHQuYXBwbHkobnVsbCxuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pKSl9KX0saX1mdW5jdGlvbiBvZShlLHQpe3JldHVybiBlPT09dD9lOlQoZSk/dDplLmNvbnN0cnVjdG9yKHQpfWZ1bmN0aW9uIGFlKGUpe2lmKGUhPT1PYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgW0ssIFZdIHR1cGxlOiAiK2UpfWZ1bmN0aW9uIHNlKGUpe3JldHVybiBnKGUpP3huOnkoZSk/Q246RW59ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIE9iamVjdC5jcmVhdGUoKGcoZSk/Tm46eShlKT9JbjpMbikucHJvdG90eXBlKX1mdW5jdGlvbiBjZSgpe3JldHVybiB0aGlzLl9pdGVyLmNhY2hlUmVzdWx0Pyh0aGlzLl9pdGVyLmNhY2hlUmVzdWx0KCksdGhpcy5zaXplPXRoaXMuX2l0ZXIuc2l6ZSx0aGlzKTpGbi5wcm90b3R5cGUuY2FjaGVSZXN1bHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiB2b2lkIDA9PT1lJiZ2b2lkIDA9PT10PzA6dm9pZCAwPT09ZT8xOnZvaWQgMD09PXQ/LTE6ZT50PzE6ZTx0Py0xOjB9ZnVuY3Rpb24gcGUoZSx0KXt0PXR8fDA7Zm9yKHZhciBuPU1hdGgubWF4KDAsZS5sZW5ndGgtdCkscj1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspcltpXT1lW2krdF07cmV0dXJuIHJ9ZnVuY3Rpb24gZmUoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gZGUoZSl7ZmUoZSE9PTEvMCwiQ2Fubm90IHBlcmZvcm0gdGhpcyBhY3Rpb24gd2l0aCBhbiBpbmZpbml0ZSBzaXplLiIpfWZ1bmN0aW9uIGhlKGUpe2lmKF8oZSkmJiJzdHJpbmciIT09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYihlKSlyZXR1cm4gZS50b0FycmF5KCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBrZXlQYXRoOiBleHBlY3RlZCBPcmRlcmVkIENvbGxlY3Rpb24gb3IgQXJyYXk6ICIrZSl9ZnVuY3Rpb24gbWUoZSl7cmV0dXJuIGUmJihlLmNvbnN0cnVjdG9yPT09T2JqZWN0fHx2b2lkIDA9PT1lLmNvbnN0cnVjdG9yKX1mdW5jdGlvbiBnZShlKXtyZXR1cm4gaChlKXx8QXJyYXkuaXNBcnJheShlKXx8bWUoZSl9ZnVuY3Rpb24geWUoZSl7dHJ5e3JldHVybiJzdHJpbmciPT09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6U3RyaW5nKGUpfWNhdGNoKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX19ZnVuY3Rpb24gdmUoZSx0KXtyZXR1cm4gaChlKT9lLmhhcyh0KTpnZShlKSYmT24uY2FsbChlLHQpfWZ1bmN0aW9uIGJlKGUsdCxuKXtyZXR1cm4gaChlKT9lLmdldCh0LG4pOnZlKGUsdCk/ImZ1bmN0aW9uIj09PXR5cGVvZiBlLmdldD9lLmdldCh0KTplW3RdOm59ZnVuY3Rpb24geGUoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gcGUoZSk7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpT24uY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBDZShlLHQpe2lmKCFnZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXBkYXRlIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZTogIitlKTtpZihoKGUpKXtpZighZS5yZW1vdmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVwZGF0ZSBpbW11dGFibGUgdmFsdWUgd2l0aG91dCAucmVtb3ZlKCkgbWV0aG9kOiAiK2UpO3JldHVybiBlLnJlbW92ZSh0KX1pZighT24uY2FsbChlLHQpKXJldHVybiBlO3ZhciBuPXhlKGUpO3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uc3BsaWNlKHQsMSk6ZGVsZXRlIG5bdF0sbn1mdW5jdGlvbiBFZShlLHQsbil7aWYoIWdlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1cGRhdGUgbm9uLWRhdGEtc3RydWN0dXJlIHZhbHVlOiAiK2UpO2lmKGgoZSkpe2lmKCFlLnNldCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXBkYXRlIGltbXV0YWJsZSB2YWx1ZSB3aXRob3V0IC5zZXQoKSBtZXRob2Q6ICIrZSk7cmV0dXJuIGUuc2V0KHQsbil9aWYoT24uY2FsbChlLHQpJiZuPT09ZVt0XSlyZXR1cm4gZTt2YXIgcj14ZShlKTtyZXR1cm4gclt0XT1uLHJ9ZnVuY3Rpb24gRGUoZSx0LG4scil7cnx8KHI9bixuPXZvaWQgMCk7dmFyIGk9d2UoaChlKSxlLGhlKHQpLDAsbixyKTtyZXR1cm4gaT09PXBuP246aX1mdW5jdGlvbiB3ZShlLHQsbixyLGksbyl7dmFyIGE9dD09PXBuO2lmKHI9PT1uLmxlbmd0aCl7dmFyIHM9YT9pOnQsdT1vKHMpO3JldHVybiB1PT09cz90OnV9aWYoIWEmJiFnZSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXBkYXRlIHdpdGhpbiBub24tZGF0YS1zdHJ1Y3R1cmUgdmFsdWUgaW4gcGF0aCBbIituLnNsaWNlKDAscikubWFwKHllKSsiXTogIit0KTt2YXIgYz1uW3JdLGw9YT9wbjpiZSh0LGMscG4pLHA9d2UobD09PXBuP2U6aChsKSxsLG4scisxLGksbyk7cmV0dXJuIHA9PT1sP3Q6cD09PXBuP0NlKHQsYyk6RWUoYT9lP2V0KCk6e306dCxjLHApfWZ1bmN0aW9uIFNlKGUsdCxuKXtyZXR1cm4gRGUoZSx0LHBuLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX1mdW5jdGlvbiBrZShlLHQpe3JldHVybiBTZSh0aGlzLGUsdCl9ZnVuY3Rpb24gQWUoZSx0KXtyZXR1cm4gRGUoZSx0LGZ1bmN0aW9uKCl7cmV0dXJuIHBufSl9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIEFlKHRoaXMsZSl9ZnVuY3Rpb24gVGUoZSx0LG4scil7cmV0dXJuIERlKGUsW3RdLG4scil9ZnVuY3Rpb24gT2UoZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9lKHRoaXMpOlRlKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEZlKGUsdCxuKXtyZXR1cm4gRGUodGhpcyxlLHQsbil9ZnVuY3Rpb24gTmUoKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoO3QtLTspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIExlKHRoaXMsZSl9ZnVuY3Rpb24gSWUoZSl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aC0xO24tLSA+MDspdFtuXT1hcmd1bWVudHNbbisxXTtyZXR1cm4gTGUodGhpcyx0LGUpfWZ1bmN0aW9uIExlKGUsdCxuKXtmb3IodmFyIHI9W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz14bih0W2ldKTswIT09by5zaXplJiZyLnB1c2gobyl9cmV0dXJuIDA9PT1yLmxlbmd0aD9lOjAhPT1lLnNpemV8fGUuX19vd25lcklEfHwxIT09ci5sZW5ndGg/ZS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uP2Z1bmN0aW9uKHQscil7VGUoZSxyLHBuLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09cG4/dDpuKGUsdCxyKX0pfTpmdW5jdGlvbih0LG4pe2Uuc2V0KG4sdCl9LGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmZvckVhY2godCl9KTplLmNvbnN0cnVjdG9yKHJbMF0pfWZ1bmN0aW9uIFBlKGUpe2Zvcih2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGgtMTtuLS0gPjA7KXRbbl09YXJndW1lbnRzW24rMV07cmV0dXJuICRlKGUsdCl9ZnVuY3Rpb24gTWUoZSx0KXtmb3IodmFyIG49W10scj1hcmd1bWVudHMubGVuZ3RoLTI7ci0tID4wOyluW3JdPWFyZ3VtZW50c1tyKzJdO3JldHVybiAkZSh0LG4sZSl9ZnVuY3Rpb24gamUoZSl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aC0xO24tLSA+MDspdFtuXT1hcmd1bWVudHNbbisxXTtyZXR1cm4gQmUoZSx0KX1mdW5jdGlvbiBSZShlLHQpe2Zvcih2YXIgbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMjtyLS0gPjA7KW5bcl09YXJndW1lbnRzW3IrMl07cmV0dXJuIEJlKHQsbixlKX1mdW5jdGlvbiBCZShlLHQsbil7cmV0dXJuICRlKGUsdCxVZShuKSl9ZnVuY3Rpb24gJGUoZSx0LG4pe2lmKCFnZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgbWVyZ2UgaW50byBub24tZGF0YS1zdHJ1Y3R1cmUgdmFsdWU6ICIrZSk7aWYoaChlKSlyZXR1cm4gZS5tZXJnZVdpdGg/ZS5tZXJnZVdpdGguYXBwbHkoZSxbbl0uY29uY2F0KHQpKTplLmNvbmNhdC5hcHBseShlLHQpO2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUpLGk9ZSxvPXI/Q246eG4sYT1yP2Z1bmN0aW9uKHQpe2k9PT1lJiYoaT14ZShpKSksaS5wdXNoKHQpfTpmdW5jdGlvbih0LHIpe3ZhciBvPU9uLmNhbGwoaSxyKSxhPW8mJm4/bihpW3JdLHQscik6dDtvJiZhPT09aVtyXXx8KGk9PT1lJiYoaT14ZShpKSksaVtyXT1hKX0scz0wO3M8dC5sZW5ndGg7cysrKW8odFtzXSkuZm9yRWFjaChhKTtyZXR1cm4gaX1mdW5jdGlvbiBVZShlKXtmdW5jdGlvbiB0KG4scixpKXtyZXR1cm4gZ2UobikmJmdlKHIpPyRlKG4sW3JdLHQpOmU/ZShuLHIsaSk6cn1yZXR1cm4gdH1mdW5jdGlvbiB6ZSgpe2Zvcih2YXIgZT1bXSx0PWFyZ3VtZW50cy5sZW5ndGg7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gQmUodGhpcyxlKX1mdW5jdGlvbiBHZShlKXtmb3IodmFyIHQ9W10sbj1hcmd1bWVudHMubGVuZ3RoLTE7bi0tID4wOyl0W25dPWFyZ3VtZW50c1tuKzFdO3JldHVybiBCZSh0aGlzLHQsZSl9ZnVuY3Rpb24gVmUoZSl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aC0xO24tLSA+MDspdFtuXT1hcmd1bWVudHNbbisxXTtyZXR1cm4gRGUodGhpcyxlLGV0KCksZnVuY3Rpb24oZSl7cmV0dXJuICRlKGUsdCl9KX1mdW5jdGlvbiBxZShlKXtmb3IodmFyIHQ9W10sbj1hcmd1bWVudHMubGVuZ3RoLTE7bi0tID4wOyl0W25dPWFyZ3VtZW50c1tuKzFdO3JldHVybiBEZSh0aGlzLGUsZXQoKSxmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSx0KX0pfWZ1bmN0aW9uIEhlKGUpe3ZhciB0PXRoaXMuYXNNdXRhYmxlKCk7cmV0dXJuIGUodCksdC53YXNBbHRlcmVkKCk/dC5fX2Vuc3VyZU93bmVyKHRoaXMuX19vd25lcklEKTp0aGlzfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMuX19vd25lcklEP3RoaXM6dGhpcy5fX2Vuc3VyZU93bmVyKG5ldyBvKX1mdW5jdGlvbiBRZSgpe3JldHVybiB0aGlzLl9fZW5zdXJlT3duZXIoKX1mdW5jdGlvbiBLZSgpe3JldHVybiB0aGlzLl9fYWx0ZXJlZH1mdW5jdGlvbiBKZShlKXtyZXR1cm4hKCFlfHwhZVtycl0pfWZ1bmN0aW9uIFllKGUsdCl7cmV0dXJuIEUoZSx0WzBdLHRbMV0pfWZ1bmN0aW9uIFhlKGUsdCl7cmV0dXJue25vZGU6ZSxpbmRleDowLF9fcHJldjp0fX1mdW5jdGlvbiBaZShlLHQsbixyKXt2YXIgaT1PYmplY3QuY3JlYXRlKGlyKTtyZXR1cm4gaS5zaXplPWUsaS5fcm9vdD10LGkuX19vd25lcklEPW4saS5fX2hhc2g9cixpLl9fYWx0ZXJlZD0hMSxpfWZ1bmN0aW9uIGV0KCl7cmV0dXJuIGxyfHwobHI9WmUoMCkpfWZ1bmN0aW9uIHR0KGUsdCxuKXt2YXIgaSxvO2lmKGUuX3Jvb3Qpe3ZhciBhPXIoZm4pLHM9cihkbik7aWYoaT1udChlLl9yb290LGUuX19vd25lcklELDAsdm9pZCAwLHQsbixhLHMpLCFzLnZhbHVlKXJldHVybiBlO289ZS5zaXplKyhhLnZhbHVlP249PT1wbj8tMToxOjApfWVsc2V7aWYobj09PXBuKXJldHVybiBlO289MSxpPW5ldyBvcihlLl9fb3duZXJJRCxbW3Qsbl1dKX1yZXR1cm4gZS5fX293bmVySUQ/KGUuc2l6ZT1vLGUuX3Jvb3Q9aSxlLl9faGFzaD12b2lkIDAsZS5fX2FsdGVyZWQ9ITAsZSk6aT9aZShvLGkpOmV0KCl9ZnVuY3Rpb24gbnQoZSx0LG4scixvLGEscyx1KXtyZXR1cm4gZT9lLnVwZGF0ZSh0LG4scixvLGEscyx1KTphPT09cG4/ZTooaSh1KSxpKHMpLG5ldyBjcih0LHIsW28sYV0pKX1mdW5jdGlvbiBydChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvcj09PWNyfHxlLmNvbnN0cnVjdG9yPT09dXJ9ZnVuY3Rpb24gaXQoZSx0LG4scixpKXtpZihlLmtleUhhc2g9PT1yKXJldHVybiBuZXcgdXIodCxyLFtlLmVudHJ5LGldKTt2YXIgbyxhPSgwPT09bj9lLmtleUhhc2g6ZS5rZXlIYXNoPj4+bikmbG4scz0oMD09PW4/cjpyPj4+bikmbG4sdT1hPT09cz9baXQoZSx0LG4rdW4scixpKV06KG89bmV3IGNyKHQscixpKSxhPHM/W2Usb106W28sZV0pO3JldHVybiBuZXcgYXIodCwxPDxhfDE8PHMsdSl9ZnVuY3Rpb24gb3QoZSx0LG4scil7ZXx8KGU9bmV3IG8pO2Zvcih2YXIgaT1uZXcgY3IoZSxqKG4pLFtuLHJdKSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV07aT1pLnVwZGF0ZShlLDAsdm9pZCAwLHNbMF0sc1sxXSl9cmV0dXJuIGl9ZnVuY3Rpb24gYXQoZSx0LG4scil7Zm9yKHZhciBpPTAsbz0wLGE9bmV3IEFycmF5KG4pLHM9MCx1PTEsYz10Lmxlbmd0aDtzPGM7cysrLHU8PD0xKXt2YXIgbD10W3NdO3ZvaWQgMCE9PWwmJnMhPT1yJiYoaXw9dSxhW28rK109bCl9cmV0dXJuIG5ldyBhcihlLGksYSl9ZnVuY3Rpb24gc3QoZSx0LG4scixpKXtmb3IodmFyIG89MCxhPW5ldyBBcnJheShjbikscz0wOzAhPT1uO3MrKyxuPj4+PTEpYVtzXT0xJm4/dFtvKytdOnZvaWQgMDtyZXR1cm4gYVtyXT1pLG5ldyBzcihlLG8rMSxhKX1mdW5jdGlvbiB1dChlKXtyZXR1cm4gZS09ZT4+MSYxNDMxNjU1NzY1LGU9KDg1ODk5MzQ1OSZlKSsoZT4+MiY4NTg5OTM0NTkpLGU9ZSsoZT4+NCkmMjUyNjQ1MTM1LGUrPWU+PjgsMTI3JihlKz1lPj4xNil9ZnVuY3Rpb24gY3QoZSx0LG4scil7dmFyIGk9cj9lOnBlKGUpO3JldHVybiBpW3RdPW4saX1mdW5jdGlvbiBsdChlLHQsbixyKXt2YXIgaT1lLmxlbmd0aCsxO2lmKHImJnQrMT09PWkpcmV0dXJuIGVbdF09bixlO2Zvcih2YXIgbz1uZXcgQXJyYXkoaSksYT0wLHM9MDtzPGk7cysrKXM9PT10PyhvW3NdPW4sYT0tMSk6b1tzXT1lW3MrYV07cmV0dXJuIG99ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByPWUubGVuZ3RoLTE7aWYobiYmdD09PXIpcmV0dXJuIGUucG9wKCksZTtmb3IodmFyIGk9bmV3IEFycmF5KHIpLG89MCxhPTA7YTxyO2ErKylhPT09dCYmKG89MSksaVthXT1lW2Erb107cmV0dXJuIGl9ZnVuY3Rpb24gZnQoZSl7cmV0dXJuISghZXx8IWVbZ3JdKX1mdW5jdGlvbiBkdChlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3JldHVybiAwPT09dD9yKGUsbik6aShlLHQsbil9ZnVuY3Rpb24gcihlLG4pe3ZhciByPW49PT1zP3UmJnUuYXJyYXk6ZSYmZS5hcnJheSxpPW4+bz8wOm8tbixjPWEtbjtyZXR1cm4gYz5jbiYmKGM9Y24pLGZ1bmN0aW9uKCl7aWYoaT09PWMpcmV0dXJuIHhyO3ZhciBlPXQ/LS1jOmkrKztyZXR1cm4gciYmcltlXX19ZnVuY3Rpb24gaShlLHIsaSl7dmFyIHMsdT1lJiZlLmFycmF5LGM9aT5vPzA6by1pPj5yLGw9MSsoYS1pPj5yKTtyZXR1cm4gbD5jbiYmKGw9Y24pLGZ1bmN0aW9uKCl7Zm9yKDs7KXtpZihzKXt2YXIgZT1zKCk7aWYoZSE9PXhyKXJldHVybiBlO3M9bnVsbH1pZihjPT09bClyZXR1cm4geHI7dmFyIG89dD8tLWw6YysrO3M9bih1JiZ1W29dLHItdW4saSsobzw8cikpfX19dmFyIG89ZS5fb3JpZ2luLGE9ZS5fY2FwYWNpdHkscz1DdChhKSx1PWUuX3RhaWw7cmV0dXJuIG4oZS5fcm9vdCxlLl9sZXZlbCwwKX1mdW5jdGlvbiBodChlLHQsbixyLGksbyxhKXt2YXIgcz1PYmplY3QuY3JlYXRlKHlyKTtyZXR1cm4gcy5zaXplPXQtZSxzLl9vcmlnaW49ZSxzLl9jYXBhY2l0eT10LHMuX2xldmVsPW4scy5fcm9vdD1yLHMuX3RhaWw9aSxzLl9fb3duZXJJRD1vLHMuX19oYXNoPWEscy5fX2FsdGVyZWQ9ITEsc31mdW5jdGlvbiBtdCgpe3JldHVybiBicnx8KGJyPWh0KDAsMCx1bikpfWZ1bmN0aW9uIGd0KGUsdCxuKXtpZigodD1zKGUsdCkpIT09dClyZXR1cm4gZTtpZih0Pj1lLnNpemV8fHQ8MClyZXR1cm4gZS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKGUpe3Q8MD94dChlLHQpLnNldCgwLG4pOnh0KGUsMCx0KzEpLnNldCh0LG4pfSk7dCs9ZS5fb3JpZ2luO3ZhciBpPWUuX3RhaWwsbz1lLl9yb290LGE9cihkbik7cmV0dXJuIHQ+PUN0KGUuX2NhcGFjaXR5KT9pPXl0KGksZS5fX293bmVySUQsMCx0LG4sYSk6bz15dChvLGUuX19vd25lcklELGUuX2xldmVsLHQsbixhKSxhLnZhbHVlP2UuX19vd25lcklEPyhlLl9yb290PW8sZS5fdGFpbD1pLGUuX19oYXNoPXZvaWQgMCxlLl9fYWx0ZXJlZD0hMCxlKTpodChlLl9vcmlnaW4sZS5fY2FwYWNpdHksZS5fbGV2ZWwsbyxpKTplfWZ1bmN0aW9uIHl0KGUsdCxuLHIsbyxhKXt2YXIgcz1yPj4+biZsbix1PWUmJnM8ZS5hcnJheS5sZW5ndGg7aWYoIXUmJnZvaWQgMD09PW8pcmV0dXJuIGU7dmFyIGM7aWYobj4wKXt2YXIgbD1lJiZlLmFycmF5W3NdLHA9eXQobCx0LG4tdW4scixvLGEpO3JldHVybiBwPT09bD9lOihjPXZ0KGUsdCksYy5hcnJheVtzXT1wLGMpfXJldHVybiB1JiZlLmFycmF5W3NdPT09bz9lOihpKGEpLGM9dnQoZSx0KSx2b2lkIDA9PT1vJiZzPT09Yy5hcnJheS5sZW5ndGgtMT9jLmFycmF5LnBvcCgpOmMuYXJyYXlbc109byxjKX1mdW5jdGlvbiB2dChlLHQpe3JldHVybiB0JiZlJiZ0PT09ZS5vd25lcklEP2U6bmV3IHZyKGU/ZS5hcnJheS5zbGljZSgpOltdLHQpfWZ1bmN0aW9uIGJ0KGUsdCl7aWYodD49Q3QoZS5fY2FwYWNpdHkpKXJldHVybiBlLl90YWlsO2lmKHQ8MTw8ZS5fbGV2ZWwrdW4pe2Zvcih2YXIgbj1lLl9yb290LHI9ZS5fbGV2ZWw7biYmcj4wOyluPW4uYXJyYXlbdD4+PnImbG5dLHItPXVuO3JldHVybiBufX1mdW5jdGlvbiB4dChlLHQsbil7dm9pZCAwIT09dCYmKHR8PTApLHZvaWQgMCE9PW4mJihufD0wKTt2YXIgcj1lLl9fb3duZXJJRHx8bmV3IG8saT1lLl9vcmlnaW4sYT1lLl9jYXBhY2l0eSxzPWkrdCx1PXZvaWQgMD09PW4/YTpuPDA/YStuOmkrbjtpZihzPT09aSYmdT09PWEpcmV0dXJuIGU7aWYocz49dSlyZXR1cm4gZS5jbGVhcigpO2Zvcih2YXIgYz1lLl9sZXZlbCxsPWUuX3Jvb3QscD0wO3MrcDwwOylsPW5ldyB2cihsJiZsLmFycmF5Lmxlbmd0aD9bdm9pZCAwLGxdOltdLHIpLGMrPXVuLHArPTE8PGM7cCYmKHMrPXAsaSs9cCx1Kz1wLGErPXApO2Zvcih2YXIgZj1DdChhKSxkPUN0KHUpO2Q+PTE8PGMrdW47KWw9bmV3IHZyKGwmJmwuYXJyYXkubGVuZ3RoP1tsXTpbXSxyKSxjKz11bjt2YXIgaD1lLl90YWlsLG09ZDxmP2J0KGUsdS0xKTpkPmY/bmV3IHZyKFtdLHIpOmg7aWYoaCYmZD5mJiZzPGEmJmguYXJyYXkubGVuZ3RoKXtsPXZ0KGwscik7Zm9yKHZhciBnPWwseT1jO3k+dW47eS09dW4pe3ZhciB2PWY+Pj55JmxuO2c9Zy5hcnJheVt2XT12dChnLmFycmF5W3ZdLHIpfWcuYXJyYXlbZj4+PnVuJmxuXT1ofWlmKHU8YSYmKG09bSYmbS5yZW1vdmVBZnRlcihyLDAsdSkpLHM+PWQpcy09ZCx1LT1kLGM9dW4sbD1udWxsLG09bSYmbS5yZW1vdmVCZWZvcmUociwwLHMpO2Vsc2UgaWYocz5pfHxkPGYpe2ZvcihwPTA7bDspe3ZhciBiPXM+Pj5jJmxuO2lmKGIhPT1kPj4+YyZsbilicmVhaztiJiYocCs9KDE8PGMpKmIpLGMtPXVuLGw9bC5hcnJheVtiXX1sJiZzPmkmJihsPWwucmVtb3ZlQmVmb3JlKHIsYyxzLXApKSxsJiZkPGYmJihsPWwucmVtb3ZlQWZ0ZXIocixjLGQtcCkpLHAmJihzLT1wLHUtPXApfXJldHVybiBlLl9fb3duZXJJRD8oZS5zaXplPXUtcyxlLl9vcmlnaW49cyxlLl9jYXBhY2l0eT11LGUuX2xldmVsPWMsZS5fcm9vdD1sLGUuX3RhaWw9bSxlLl9faGFzaD12b2lkIDAsZS5fX2FsdGVyZWQ9ITAsZSk6aHQocyx1LGMsbCxtKX1mdW5jdGlvbiBDdChlKXtyZXR1cm4gZTxjbj8wOmUtMT4+PnVuPDx1bn1mdW5jdGlvbiBFdChlKXtyZXR1cm4gSmUoZSkmJmIoZSl9ZnVuY3Rpb24gRHQoZSx0LG4scil7dmFyIGk9T2JqZWN0LmNyZWF0ZShDci5wcm90b3R5cGUpO3JldHVybiBpLnNpemU9ZT9lLnNpemU6MCxpLl9tYXA9ZSxpLl9saXN0PXQsaS5fX293bmVySUQ9bixpLl9faGFzaD1yLGl9ZnVuY3Rpb24gd3QoKXtyZXR1cm4gRXJ8fChFcj1EdChldCgpLG10KCkpKX1mdW5jdGlvbiBTdChlLHQsbil7dmFyIHIsaSxvPWUuX21hcCxhPWUuX2xpc3Qscz1vLmdldCh0KSx1PXZvaWQgMCE9PXM7aWYobj09PXBuKXtpZighdSlyZXR1cm4gZTthLnNpemU+PWNuJiZhLnNpemU+PTIqby5zaXplPyhpPWEuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJnMhPT10fSkscj1pLnRvS2V5ZWRTZXEoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KS5mbGlwKCkudG9NYXAoKSxlLl9fb3duZXJJRCYmKHIuX19vd25lcklEPWkuX19vd25lcklEPWUuX19vd25lcklEKSk6KHI9by5yZW1vdmUodCksaT1zPT09YS5zaXplLTE/YS5wb3AoKTphLnNldChzLHZvaWQgMCkpfWVsc2UgaWYodSl7aWYobj09PWEuZ2V0KHMpWzFdKXJldHVybiBlO3I9byxpPWEuc2V0KHMsW3Qsbl0pfWVsc2Ugcj1vLnNldCh0LGEuc2l6ZSksaT1hLnNldChhLnNpemUsW3Qsbl0pO3JldHVybiBlLl9fb3duZXJJRD8oZS5zaXplPXIuc2l6ZSxlLl9tYXA9cixlLl9saXN0PWksZS5fX2hhc2g9dm9pZCAwLGUpOkR0KHIsaSl9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuISghZXx8IWVbd3JdKX1mdW5jdGlvbiBBdChlLHQsbixyKXt2YXIgaT1PYmplY3QuY3JlYXRlKFNyKTtyZXR1cm4gaS5zaXplPWUsaS5faGVhZD10LGkuX19vd25lcklEPW4saS5fX2hhc2g9cixpLl9fYWx0ZXJlZD0hMSxpfWZ1bmN0aW9uIF90KCl7cmV0dXJuIGtyfHwoa3I9QXQoMCkpfWZ1bmN0aW9uIFR0KGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYoIW0odCl8fHZvaWQgMCE9PWUuc2l6ZSYmdm9pZCAwIT09dC5zaXplJiZlLnNpemUhPT10LnNpemV8fHZvaWQgMCE9PWUuX19oYXNoJiZ2b2lkIDAhPT10Ll9faGFzaCYmZS5fX2hhc2ghPT10Ll9faGFzaHx8ZyhlKSE9PWcodCl8fHkoZSkhPT15KHQpfHxiKGUpIT09Yih0KSlyZXR1cm4hMTtpZigwPT09ZS5zaXplJiYwPT09dC5zaXplKXJldHVybiEwO3ZhciBuPSF2KGUpO2lmKGIoZSkpe3ZhciByPWUuZW50cmllcygpO3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKGUsdCl7dmFyIGk9ci5uZXh0KCkudmFsdWU7cmV0dXJuIGkmJlAoaVsxXSxlKSYmKG58fFAoaVswXSx0KSl9KSYmci5uZXh0KCkuZG9uZX12YXIgaT0hMTtpZih2b2lkIDA9PT1lLnNpemUpaWYodm9pZCAwPT09dC5zaXplKSJmdW5jdGlvbiI9PT10eXBlb2YgZS5jYWNoZVJlc3VsdCYmZS5jYWNoZVJlc3VsdCgpO2Vsc2V7aT0hMDt2YXIgbz1lO2U9dCx0PW99dmFyIGE9ITAscz10Ll9faXRlcmF0ZShmdW5jdGlvbih0LHIpe2lmKG4/IWUuaGFzKHQpOmk/IVAodCxlLmdldChyLHBuKSk6IVAoZS5nZXQocixwbiksdCkpcmV0dXJuIGE9ITEsITF9KTtyZXR1cm4gYSYmZS5zaXplPT09c31mdW5jdGlvbiBPdChlLHQpe3ZhciBuPWZ1bmN0aW9uKG4pe2UucHJvdG90eXBlW25dPXRbbl19O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG4pLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZm9yRWFjaChuKSxlfWZ1bmN0aW9uIEZ0KGUpe3JldHVybiBnZShlKT9GbihlKS5tYXAoRnQpLnRvSlNPTigpOmV9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuISghZXx8IWVbX3JdKX1mdW5jdGlvbiBJdChlLHQpe3JldHVybiBlLl9fb3duZXJJRD8oZS5zaXplPXQuc2l6ZSxlLl9tYXA9dCxlKTp0PT09ZS5fbWFwP2U6MD09PXQuc2l6ZT9lLl9fZW1wdHkoKTplLl9fbWFrZSh0KX1mdW5jdGlvbiBMdChlLHQpe3ZhciBuPU9iamVjdC5jcmVhdGUoVHIpO3JldHVybiBuLnNpemU9ZT9lLnNpemU6MCxuLl9tYXA9ZSxuLl9fb3duZXJJRD10LG59ZnVuY3Rpb24gUHQoKXtyZXR1cm4gT3J8fChPcj1MdChldCgpKSl9ZnVuY3Rpb24gTXQoZSx0LG4pe2Zvcih2YXIgcj1oZSh0KSxpPTA7aSE9PXIubGVuZ3RoOylpZigoZT1iZShlLHJbaSsrXSxwbikpPT09cG4pcmV0dXJuIG47cmV0dXJuIGV9ZnVuY3Rpb24ganQoZSx0KXtyZXR1cm4gTXQodGhpcyxlLHQpfWZ1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIE10KGUsdCxwbikhPT1wbn1mdW5jdGlvbiBCdChlKXtyZXR1cm4gUnQodGhpcyxlKX1mdW5jdGlvbiAkdCgpe2RlKHRoaXMuc2l6ZSk7dmFyIGU9e307cmV0dXJuIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKHQsbil7ZVtuXT10fSksZX1mdW5jdGlvbiBVdChlLHQsbixyLGksbyl7cmV0dXJuIGRlKGUuc2l6ZSksZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxvLGEpe2k/KGk9ITEsbj1lKTpuPXQuY2FsbChyLG4sZSxvLGEpfSxvKSxufWZ1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIHR9ZnVuY3Rpb24gR3QoZSx0KXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBWdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHQoKXtyZXR1cm4gcGUoYXJndW1lbnRzKX1mdW5jdGlvbiBXdChlLHQpe3JldHVybiBlPHQ/MTplPnQ/LTE6MH1mdW5jdGlvbiBRdChlKXtpZihlLnNpemU9PT0xLzApcmV0dXJuIDA7dmFyIHQ9YihlKSxuPWcoZSkscj10PzE6MDtyZXR1cm4gS3QoZS5fX2l0ZXJhdGUobj90P2Z1bmN0aW9uKGUsdCl7cj0zMSpyK0p0KGooZSksaih0KSl8MH06ZnVuY3Rpb24oZSx0KXtyPXIrSnQoaihlKSxqKHQpKXwwfTp0P2Z1bmN0aW9uKGUpe3I9MzEqcitqKGUpfDB9OmZ1bmN0aW9uKGUpe3I9citqKGUpfDB9KSxyKX1mdW5jdGlvbiBLdChlLHQpe3JldHVybiB0PXpuKHQsMzQzMjkxODM1MyksdD16bih0PDwxNXx0Pj4+LTE1LDQ2MTg0NTkwNyksdD16bih0PDwxM3x0Pj4+LTEzLDUpLHQ9KHQrMzg2NDI5MjE5NnwwKV5lLHQ9em4odF50Pj4+MTYsMjI0NjgyMjUwNyksdD16bih0XnQ+Pj4xMywzMjY2NDg5OTA5KSx0PU0odF50Pj4+MTYpfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIGVedCsyNjU0NDM1NzY5KyhlPDw2KSsoZT4+Mil8MH1mdW5jdGlvbiBZdChlKXtyZXR1cm4gTnQoZSkmJmIoZSl9ZnVuY3Rpb24gWHQoZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKGpyKTtyZXR1cm4gbi5zaXplPWU/ZS5zaXplOjAsbi5fbWFwPWUsbi5fX293bmVySUQ9dCxufWZ1bmN0aW9uIFp0KCl7cmV0dXJuIFJyfHwoUnI9WHQod3QoKSkpfWZ1bmN0aW9uIGVuKGUsdCxuKXt2YXIgcj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSk7cmV0dXJuIHIuX3ZhbHVlcz10LHIuX19vd25lcklEPW4scn1mdW5jdGlvbiB0bihlKXtyZXR1cm4gZS5fbmFtZXx8ZS5jb25zdHJ1Y3Rvci5uYW1lfHwiUmVjb3JkIn1mdW5jdGlvbiBubihlKXtyZXR1cm4gRihlLl9rZXlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdCxlLmdldCh0KV19KSl9ZnVuY3Rpb24gcm4oZSx0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KHQpfSxzZXQ6ZnVuY3Rpb24oZSl7ZmUodGhpcy5fX293bmVySUQsIkNhbm5vdCBzZXQgb24gYW4gaW1tdXRhYmxlIHJlY29yZC4iKSx0aGlzLnNldCh0LGUpfX0pfWNhdGNoKGUpe319ZnVuY3Rpb24gb24oZSx0KXtyZXR1cm4gYW4oW10sdHx8c24sZSwiIix0JiZ0Lmxlbmd0aD4yP1tdOnZvaWQgMCx7IiI6ZX0pfWZ1bmN0aW9uIGFuKGUsdCxuLHIsaSxvKXt2YXIgYT1BcnJheS5pc0FycmF5KG4pP0luOm1lKG4pP05uOm51bGw7aWYoYSl7aWYofmUuaW5kZXhPZihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSW1tdXRhYmxlIik7ZS5wdXNoKG4pLGkmJiIiIT09ciYmaS5wdXNoKHIpO3ZhciBzPXQuY2FsbChvLHIsYShuKS5tYXAoZnVuY3Rpb24ocixvKXtyZXR1cm4gYW4oZSx0LHIsbyxpLG4pfSksaSYmaS5zbGljZSgpKTtyZXR1cm4gZS5wb3AoKSxpJiZpLnBvcCgpLHN9cmV0dXJuIG59ZnVuY3Rpb24gc24oZSx0KXtyZXR1cm4gZyh0KT90LnRvTWFwKCk6dC50b0xpc3QoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5kKHQsInZlcnNpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIEdyfSksbi5kKHQsIkNvbGxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGJufSksbi5kKHQsIkl0ZXJhYmxlIixmdW5jdGlvbigpe3JldHVybiBxcn0pLG4uZCh0LCJTZXEiLGZ1bmN0aW9uKCl7cmV0dXJuIEZufSksbi5kKHQsIk1hcCIsZnVuY3Rpb24oKXtyZXR1cm4gbnJ9KSxuLmQodCwiT3JkZXJlZE1hcCIsZnVuY3Rpb24oKXtyZXR1cm4gQ3J9KSxuLmQodCwiTGlzdCIsZnVuY3Rpb24oKXtyZXR1cm4gbXJ9KSxuLmQodCwiU3RhY2siLGZ1bmN0aW9uKCl7cmV0dXJuIERyfSksbi5kKHQsIlNldCIsZnVuY3Rpb24oKXtyZXR1cm4gQXJ9KSxuLmQodCwiT3JkZXJlZFNldCIsZnVuY3Rpb24oKXtyZXR1cm4gTXJ9KSxuLmQodCwiUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiBCcn0pLG4uZCh0LCJSYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gTnJ9KSxuLmQodCwiUmVwZWF0IixmdW5jdGlvbigpe3JldHVybiB6cn0pLG4uZCh0LCJpcyIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZCh0LCJmcm9tSlMiLGZ1bmN0aW9uKCl7cmV0dXJuIG9ufSksbi5kKHQsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxuLmQodCwiaXNJbW11dGFibGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQodCwiaXNDb2xsZWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKHQsImlzS2V5ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQodCwiaXNJbmRleGVkIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKHQsImlzQXNzb2NpYXRpdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQodCwiaXNPcmRlcmVkIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKHQsImlzVmFsdWVPYmplY3QiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQodCwiZ2V0IixmdW5jdGlvbigpe3JldHVybiBiZX0pLG4uZCh0LCJnZXRJbiIsZnVuY3Rpb24oKXtyZXR1cm4gTXR9KSxuLmQodCwiaGFzIixmdW5jdGlvbigpe3JldHVybiB2ZX0pLG4uZCh0LCJoYXNJbiIsZnVuY3Rpb24oKXtyZXR1cm4gUnR9KSxuLmQodCwibWVyZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFBlfSksbi5kKHQsIm1lcmdlRGVlcCIsZnVuY3Rpb24oKXtyZXR1cm4gamV9KSxuLmQodCwibWVyZ2VXaXRoIixmdW5jdGlvbigpe3JldHVybiBNZX0pLG4uZCh0LCJtZXJnZURlZXBXaXRoIixmdW5jdGlvbigpe3JldHVybiBSZX0pLG4uZCh0LCJyZW1vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIENlfSksbi5kKHQsInJlbW92ZUluIixmdW5jdGlvbigpe3JldHVybiBBZX0pLG4uZCh0LCJzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEVlfSksbi5kKHQsInNldEluIixmdW5jdGlvbigpe3JldHVybiBTZX0pLG4uZCh0LCJ1cGRhdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIFRlfSksbi5kKHQsInVwZGF0ZUluIixmdW5jdGlvbigpe3JldHVybiBEZX0pO3ZhciB1bj01LGNuPTE8PHVuLGxuPWNuLTEscG49e30sZm49e3ZhbHVlOiExfSxkbj17dmFsdWU6ITF9LGhuPSJAQF9fSU1NVVRBQkxFX0lURVJBQkxFX19AQCIsbW49IkBAX19JTU1VVEFCTEVfS0VZRURfX0BAIixnbj0iQEBfX0lNTVVUQUJMRV9JTkRFWEVEX19AQCIseW49IkBAX19JTU1VVEFCTEVfT1JERVJFRF9fQEAiLHZuPSJAQF9fSU1NVVRBQkxFX1JFQ09SRF9fQEAiLGJuPWZ1bmN0aW9uKGUpe3JldHVybiBtKGUpP2U6Rm4oZSl9LHhuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGcoZSk/ZTpObihlKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdH0oYm4pLENuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIHkoZSk/ZTpJbihlKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdH0oYm4pLEVuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG0oZSkmJiF2KGUpP2U6TG4oZSl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHR9KGJuKTtibi5LZXllZD14bixibi5JbmRleGVkPUNuLGJuLlNldD1Fbjt2YXIgRG49MCx3bj0xLFNuPTIsa249ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixBbj0iQEBpdGVyYXRvciIsX249a258fEFuLFRuPWZ1bmN0aW9uKGUpe3RoaXMubmV4dD1lfTtUbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW0l0ZXJhdG9yXSJ9LFRuLktFWVM9RG4sVG4uVkFMVUVTPXduLFRuLkVOVFJJRVM9U24sVG4ucHJvdG90eXBlLmluc3BlY3Q9VG4ucHJvdG90eXBlLnRvU291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX0sVG4ucHJvdG90eXBlW19uXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgT249T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxGbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9PKCk6aChlKT9lLnRvU2VxKCk6SShlKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUudG9TZXE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJTZXEgeyIsIn0iKX0sdC5wcm90b3R5cGUuY2FjaGVSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fY2FjaGUmJnRoaXMuX19pdGVyYXRlVW5jYWNoZWQmJih0aGlzLl9jYWNoZT10aGlzLmVudHJ5U2VxKCkudG9BcnJheSgpLHRoaXMuc2l6ZT10aGlzLl9jYWNoZS5sZW5ndGgpLHRoaXN9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLl9jYWNoZTtpZihyKXtmb3IodmFyIGk9ci5sZW5ndGgsbz0wO28hPT1pOyl7dmFyIGE9clt0P2ktKytvOm8rK107aWYoITE9PT1lKGFbMV0sYVswXSxuKSlicmVha31yZXR1cm4gb31yZXR1cm4gdGhpcy5fX2l0ZXJhdGVVbmNhY2hlZChlLHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fY2FjaGU7aWYobil7dmFyIHI9bi5sZW5ndGgsaT0wO3JldHVybiBuZXcgVG4oZnVuY3Rpb24oKXtpZihpPT09cilyZXR1cm4gRCgpO3ZhciBvPW5bdD9yLSsraTppKytdO3JldHVybiBFKGUsb1swXSxvWzFdKX0pfXJldHVybiB0aGlzLl9faXRlcmF0b3JVbmNhY2hlZChlLHQpfSx0fShibiksTm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWU/TygpLnRvS2V5ZWRTZXEoKTptKGUpP2coZSk/ZS50b1NlcSgpOmUuZnJvbUVudHJ5U2VxKCk6eChlKT9lLnRvU2VxKCk6RihlKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUudG9LZXllZFNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0fShGbiksSW49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWU/TygpOm0oZSk/ZyhlKT9lLmVudHJ5U2VxKCk6ZS50b0luZGV4ZWRTZXEoKTp4KGUpP2UudG9TZXEoKS5lbnRyeVNlcSgpOk4oZSl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdChhcmd1bWVudHMpfSx0LnByb3RvdHlwZS50b0luZGV4ZWRTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJTZXEgWyIsIl0iKX0sdH0oRm4pLExuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKG0oZSkmJiF2KGUpP2U6SW4oZSkpLnRvU2V0U2VxKCl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdChhcmd1bWVudHMpfSx0LnByb3RvdHlwZS50b1NldFNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0fShGbik7Rm4uaXNTZXE9VCxGbi5LZXllZD1ObixGbi5TZXQ9TG4sRm4uSW5kZXhlZD1Jbjt2YXIgUG49IkBAX19JTU1VVEFCTEVfU0VRX19AQCI7Rm4ucHJvdG90eXBlW1BuXT0hMDt2YXIgTW49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt0aGlzLl9hcnJheT1lLHRoaXMuc2l6ZT1lLmxlbmd0aH1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpP3RoaXMuX2FycmF5W3ModGhpcyxlKV06dH0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMscj10aGlzLl9hcnJheSxpPXIubGVuZ3RoLG89MDtvIT09aTspe3ZhciBhPXQ/aS0rK286bysrO2lmKCExPT09ZShyW2FdLGEsbikpYnJlYWt9cmV0dXJuIG99LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9hcnJheSxyPW4ubGVuZ3RoLGk9MDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7aWYoaT09PXIpcmV0dXJuIEQoKTt2YXIgbz10P3ItKytpOmkrKztyZXR1cm4gRShlLG8sbltvXSl9KX0sdH0oSW4pLGpuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHQ9T2JqZWN0LmtleXMoZSk7dGhpcy5fb2JqZWN0PWUsdGhpcy5fa2V5cz10LHRoaXMuc2l6ZT10Lmxlbmd0aH1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXR8fHRoaXMuaGFzKGUpP3RoaXMuX29iamVjdFtlXTp0fSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9uLmNhbGwodGhpcy5fb2JqZWN0LGUpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcyxyPXRoaXMuX29iamVjdCxpPXRoaXMuX2tleXMsbz1pLmxlbmd0aCxhPTA7YSE9PW87KXt2YXIgcz1pW3Q/by0rK2E6YSsrXTtpZighMT09PWUocltzXSxzLG4pKWJyZWFrfXJldHVybiBhfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fb2JqZWN0LHI9dGhpcy5fa2V5cyxpPXIubGVuZ3RoLG89MDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7aWYobz09PWkpcmV0dXJuIEQoKTt2YXIgYT1yW3Q/aS0rK286bysrXTtyZXR1cm4gRShlLGEsblthXSl9KX0sdH0oTm4pO2puLnByb3RvdHlwZVt5bl09ITA7dmFyIFJuLEJuLCRuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5fY29sbGVjdGlvbj1lLHRoaXMuc2l6ZT1lLmxlbmd0aHx8ZS5zaXplfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodClyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShlLHQpO3ZhciByPXRoaXMuX2NvbGxlY3Rpb24saT1rKHIpLG89MDtpZihTKGkpKWZvcih2YXIgYTshKGE9aS5uZXh0KCkpLmRvbmUmJiExIT09ZShhLnZhbHVlLG8rKyxuKTspO3JldHVybiBvfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRvcihlLHQpO3ZhciBuPXRoaXMuX2NvbGxlY3Rpb24scj1rKG4pO2lmKCFTKHIpKXJldHVybiBuZXcgVG4oRCk7dmFyIGk9MDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIHQuZG9uZT90OkUoZSxpKyssdC52YWx1ZSl9KX0sdH0oSW4pLFVuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5faXRlcmF0b3I9ZSx0aGlzLl9pdGVyYXRvckNhY2hlPVtdfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodClyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShlLHQpO2Zvcih2YXIgcj10aGlzLl9pdGVyYXRvcixpPXRoaXMuX2l0ZXJhdG9yQ2FjaGUsbz0wO288aS5sZW5ndGg7KWlmKCExPT09ZShpW29dLG8rKyxuKSlyZXR1cm4gbztmb3IodmFyIGE7IShhPXIubmV4dCgpKS5kb25lOyl7dmFyIHM9YS52YWx1ZTtpZihpW29dPXMsITE9PT1lKHMsbysrLG4pKWJyZWFrfXJldHVybiBvfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRvcihlLHQpO3ZhciBuPXRoaXMuX2l0ZXJhdG9yLHI9dGhpcy5faXRlcmF0b3JDYWNoZSxpPTA7cmV0dXJuIG5ldyBUbihmdW5jdGlvbigpe2lmKGk+PXIubGVuZ3RoKXt2YXIgdD1uLm5leHQoKTtpZih0LmRvbmUpcmV0dXJuIHQ7cltpXT10LnZhbHVlfXJldHVybiBFKGUsaSxyW2krK10pfSl9LHR9KEluKSx6bj0iZnVuY3Rpb24iPT09dHlwZW9mIE1hdGguaW11bCYmLTI9PT1NYXRoLmltdWwoNDI5NDk2NzI5NSwyKT9NYXRoLmltdWw6ZnVuY3Rpb24oZSx0KXtlfD0wLHR8PTA7dmFyIG49NjU1MzUmZSxyPTY1NTM1JnQ7cmV0dXJuIG4qcisoKGU+Pj4xNikqcituKih0Pj4+MTYpPDwxNj4+PjApfDB9LEduPU9iamVjdC5pc0V4dGVuc2libGUsVm49ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiQCIse30pLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxxbj0iZnVuY3Rpb24iPT09dHlwZW9mIFdlYWtNYXA7cW4mJihCbj1uZXcgV2Vha01hcCk7dmFyIEhuPTAsV249Il9faW1tdXRhYmxlaGFzaF9fIjsiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmKFduPVN5bWJvbChXbikpO3ZhciBRbj0xNixLbj0yNTUsSm49MCxZbj17fSxYbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5faXRlcj1lLHRoaXMuX3VzZUtleXM9dCx0aGlzLnNpemU9ZS5zaXplfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faXRlci5nZXQoZSx0KX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pdGVyLmhhcyhlKX0sdC5wcm90b3R5cGUudmFsdWVTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXRlci52YWx1ZVNlcSgpfSx0LnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PVYodGhpcywhMCk7cmV0dXJuIHRoaXMuX3VzZUtleXN8fCh0LnZhbHVlU2VxPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2l0ZXIudG9TZXEoKS5yZXZlcnNlKCl9KSx0fSx0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9Ryh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX3VzZUtleXN8fChyLnZhbHVlU2VxPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2l0ZXIudG9TZXEoKS5tYXAoZSx0KX0pLHJ9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2l0ZXIuX19pdGVyYXRlKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxyLG4pfSx0KX0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9pdGVyLl9faXRlcmF0b3IoZSx0KX0sdH0oTm4pO1huLnByb3RvdHlwZVt5bl09ITA7dmFyIFpuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pdGVyLmluY2x1ZGVzKGUpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9MDtyZXR1cm4gdCYmYSh0aGlzKSx0aGlzLl9pdGVyLl9faXRlcmF0ZShmdW5jdGlvbihpKXtyZXR1cm4gZShpLHQ/bi5zaXplLSsrcjpyKyssbil9LHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuX2l0ZXIuX19pdGVyYXRvcih3bix0KSxpPTA7cmV0dXJuIHQmJmEodGhpcyksbmV3IFRuKGZ1bmN0aW9uKCl7dmFyIG89ci5uZXh0KCk7cmV0dXJuIG8uZG9uZT9vOkUoZSx0P24uc2l6ZS0rK2k6aSsrLG8udmFsdWUsbyl9KX0sdH0oSW4pLGVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlci5pbmNsdWRlcyhlKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24odCl7cmV0dXJuIGUodCx0LG4pfSx0KX0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2l0ZXIuX19pdGVyYXRvcih3bix0KTtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIHQuZG9uZT90OkUoZSx0LnZhbHVlLHQudmFsdWUsdCl9KX0sdH0oTG4pLHRyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLmVudHJ5U2VxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2l0ZXIudG9TZXEoKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24odCl7aWYodCl7YWUodCk7dmFyIHI9bSh0KTtyZXR1cm4gZShyP3QuZ2V0KDEpOnRbMV0scj90LmdldCgwKTp0WzBdLG4pfX0sdCl9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pdGVyLl9faXRlcmF0b3Iod24sdCk7cmV0dXJuIG5ldyBUbihmdW5jdGlvbigpe2Zvcig7Oyl7dmFyIHQ9bi5uZXh0KCk7aWYodC5kb25lKXJldHVybiB0O3ZhciByPXQudmFsdWU7aWYocil7YWUocik7dmFyIGk9bShyKTtyZXR1cm4gRShlLGk/ci5nZXQoMCk6clswXSxpP3IuZ2V0KDEpOnJbMV0sdCl9fX0pfSx0fShObik7Wm4ucHJvdG90eXBlLmNhY2hlUmVzdWx0PVhuLnByb3RvdHlwZS5jYWNoZVJlc3VsdD1lci5wcm90b3R5cGUuY2FjaGVSZXN1bHQ9dHIucHJvdG90eXBlLmNhY2hlUmVzdWx0PWNlO3ZhciBucj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09dD9ldCgpOkplKHQpJiYhYih0KT90OmV0KCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbihuKXt2YXIgcj1lKHQpO2RlKHIuc2l6ZSksci5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uc2V0KHQsZSl9KX0pfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0Lm9mPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9YXJndW1lbnRzLmxlbmd0aDt0LS07KWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBldCgpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0yKXtpZihuKzE+PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyB2YWx1ZSBmb3Iga2V5OiAiK2Vbbl0pO3Quc2V0KGVbbl0sZVtuKzFdKX19KX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJNYXAgeyIsIn0iKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3Jvb3Q/dGhpcy5fcm9vdC5nZXQoMCx2b2lkIDAsZSx0KTp0fSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHQodGhpcyxlLHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR0KHRoaXMsZSxwbil9LHQucHJvdG90eXBlLmRlbGV0ZUFsbD1mdW5jdGlvbihlKXt2YXIgdD1ibihlKTtyZXR1cm4gMD09PXQuc2l6ZT90aGlzOnRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUucmVtb3ZlKHQpfSl9KX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT90aGlzOnRoaXMuX19vd25lcklEPyh0aGlzLnNpemU9MCx0aGlzLl9yb290PW51bGwsdGhpcy5fX2hhc2g9dm9pZCAwLHRoaXMuX19hbHRlcmVkPSEwLHRoaXMpOmV0KCl9LHQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIENyKHRlKHRoaXMsZSkpfSx0LnByb3RvdHlwZS5zb3J0Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQ3IodGUodGhpcyx0LGUpKX0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgcHIodGhpcyxlLHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9MDtyZXR1cm4gdGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5pdGVyYXRlKGZ1bmN0aW9uKHQpe3JldHVybiByKyssZSh0WzFdLHRbMF0sbil9LHQpLHJ9LHQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl9fb3duZXJJRD90aGlzOmU/WmUodGhpcy5zaXplLHRoaXMuX3Jvb3QsZSx0aGlzLl9faGFzaCk6MD09PXRoaXMuc2l6ZT9ldCgpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX19hbHRlcmVkPSExLHRoaXMpfSx0fSh4bik7bnIuaXNNYXA9SmU7dmFyIHJyPSJAQF9fSU1NVVRBQkxFX01BUF9fQEAiLGlyPW5yLnByb3RvdHlwZTtpcltycl09ITAsaXIuZGVsZXRlPWlyLnJlbW92ZSxpci5yZW1vdmVBbGw9aXIuZGVsZXRlQWxsLGlyLmNvbmNhdD1pci5tZXJnZSxpci5zZXRJbj1rZSxpci5yZW1vdmVJbj1pci5kZWxldGVJbj1fZSxpci51cGRhdGU9T2UsaXIudXBkYXRlSW49RmUsaXIubWVyZ2U9TmUsaXIubWVyZ2VXaXRoPUllLGlyLm1lcmdlRGVlcD16ZSxpci5tZXJnZURlZXBXaXRoPUdlLGlyLm1lcmdlSW49VmUsaXIubWVyZ2VEZWVwSW49cWUsaXIud2l0aE11dGF0aW9ucz1IZSxpci53YXNBbHRlcmVkPUtlLGlyLmFzSW1tdXRhYmxlPVFlLGlyWyJAQHRyYW5zZHVjZXIvaW5pdCJdPWlyLmFzTXV0YWJsZT1XZSxpclsiQEB0cmFuc2R1Y2VyL3N0ZXAiXT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnNldCh0WzBdLHRbMV0pfSxpclsiQEB0cmFuc2R1Y2VyL3Jlc3VsdCJdPWZ1bmN0aW9uKGUpe3JldHVybiBlLmFzSW1tdXRhYmxlKCl9O3ZhciBvcj1mdW5jdGlvbihlLHQpe3RoaXMub3duZXJJRD1lLHRoaXMuZW50cmllcz10fTtvci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT10aGlzLmVudHJpZXMsbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihQKG4saVtvXVswXSkpcmV0dXJuIGlbb11bMV07cmV0dXJuIHJ9LG9yLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0LG4scixvLGEscyl7Zm9yKHZhciB1PW89PT1wbixjPXRoaXMuZW50cmllcyxsPTAscD1jLmxlbmd0aDtsPHAmJiFQKHIsY1tsXVswXSk7bCsrKTt2YXIgZj1sPHA7aWYoZj9jW2xdWzFdPT09bzp1KXJldHVybiB0aGlzO2lmKGkocyksKHV8fCFmKSYmaShhKSwhdXx8MSE9PWMubGVuZ3RoKXtpZighZiYmIXUmJmMubGVuZ3RoPj1mcilyZXR1cm4gb3QoZSxjLHIsbyk7dmFyIGQ9ZSYmZT09PXRoaXMub3duZXJJRCxoPWQ/YzpwZShjKTtyZXR1cm4gZj91P2w9PT1wLTE/aC5wb3AoKTpoW2xdPWgucG9wKCk6aFtsXT1bcixvXTpoLnB1c2goW3Isb10pLGQ/KHRoaXMuZW50cmllcz1oLHRoaXMpOm5ldyBvcihlLGgpfX07dmFyIGFyPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLm93bmVySUQ9ZSx0aGlzLmJpdG1hcD10LHRoaXMubm9kZXM9bn07YXIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1qKG4pKTt2YXIgaT0xPDwoKDA9PT1lP3Q6dD4+PmUpJmxuKSxvPXRoaXMuYml0bWFwO3JldHVybiAwPT09KG8maSk/cjp0aGlzLm5vZGVzW3V0KG8maS0xKV0uZ2V0KGUrdW4sdCxuLHIpfSxhci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZvaWQgMD09PW4mJihuPWoocikpO3ZhciBzPSgwPT09dD9uOm4+Pj50KSZsbix1PTE8PHMsYz10aGlzLmJpdG1hcCxsPTAhPT0oYyZ1KTtpZighbCYmaT09PXBuKXJldHVybiB0aGlzO3ZhciBwPXV0KGMmdS0xKSxmPXRoaXMubm9kZXMsZD1sP2ZbcF06dm9pZCAwLGg9bnQoZCxlLHQrdW4sbixyLGksbyxhKTtpZihoPT09ZClyZXR1cm4gdGhpcztpZighbCYmaCYmZi5sZW5ndGg+PWRyKXJldHVybiBzdChlLGYsYyxzLGgpO2lmKGwmJiFoJiYyPT09Zi5sZW5ndGgmJnJ0KGZbMV5wXSkpcmV0dXJuIGZbMV5wXTtpZihsJiZoJiYxPT09Zi5sZW5ndGgmJnJ0KGgpKXJldHVybiBoO3ZhciBtPWUmJmU9PT10aGlzLm93bmVySUQsZz1sP2g/YzpjXnU6Y3x1LHk9bD9oP2N0KGYscCxoLG0pOnB0KGYscCxtKTpsdChmLHAsaCxtKTtyZXR1cm4gbT8odGhpcy5iaXRtYXA9Zyx0aGlzLm5vZGVzPXksdGhpcyk6bmV3IGFyKGUsZyx5KX07dmFyIHNyPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLm93bmVySUQ9ZSx0aGlzLmNvdW50PXQsdGhpcy5ub2Rlcz1ufTtzci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PWoobikpO3ZhciBpPSgwPT09ZT90OnQ+Pj5lKSZsbixvPXRoaXMubm9kZXNbaV07cmV0dXJuIG8/by5nZXQoZSt1bix0LG4scik6cn0sc3IucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyxhKXt2b2lkIDA9PT1uJiYobj1qKHIpKTt2YXIgcz0oMD09PXQ/bjpuPj4+dCkmbG4sdT1pPT09cG4sYz10aGlzLm5vZGVzLGw9Y1tzXTtpZih1JiYhbClyZXR1cm4gdGhpczt2YXIgcD1udChsLGUsdCt1bixuLHIsaSxvLGEpO2lmKHA9PT1sKXJldHVybiB0aGlzO3ZhciBmPXRoaXMuY291bnQ7aWYobCl7aWYoIXAmJi0tZjxocilyZXR1cm4gYXQoZSxjLGYscyl9ZWxzZSBmKys7dmFyIGQ9ZSYmZT09PXRoaXMub3duZXJJRCxoPWN0KGMscyxwLGQpO3JldHVybiBkPyh0aGlzLmNvdW50PWYsdGhpcy5ub2Rlcz1oLHRoaXMpOm5ldyBzcihlLGYsaCl9O3ZhciB1cj1mdW5jdGlvbihlLHQsbil7dGhpcy5vd25lcklEPWUsdGhpcy5rZXlIYXNoPXQsdGhpcy5lbnRyaWVzPW59O3VyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPXRoaXMuZW50cmllcyxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKFAobixpW29dWzBdKSlyZXR1cm4gaVtvXVsxXTtyZXR1cm4gcn0sdXIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsbixyLG8sYSxzKXt2b2lkIDA9PT1uJiYobj1qKHIpKTt2YXIgdT1vPT09cG47aWYobiE9PXRoaXMua2V5SGFzaClyZXR1cm4gdT90aGlzOihpKHMpLGkoYSksaXQodGhpcyxlLHQsbixbcixvXSkpO2Zvcih2YXIgYz10aGlzLmVudHJpZXMsbD0wLHA9Yy5sZW5ndGg7bDxwJiYhUChyLGNbbF1bMF0pO2wrKyk7dmFyIGY9bDxwO2lmKGY/Y1tsXVsxXT09PW86dSlyZXR1cm4gdGhpcztpZihpKHMpLCh1fHwhZikmJmkoYSksdSYmMj09PXApcmV0dXJuIG5ldyBjcihlLHRoaXMua2V5SGFzaCxjWzFebF0pO3ZhciBkPWUmJmU9PT10aGlzLm93bmVySUQsaD1kP2M6cGUoYyk7cmV0dXJuIGY/dT9sPT09cC0xP2gucG9wKCk6aFtsXT1oLnBvcCgpOmhbbF09W3Isb106aC5wdXNoKFtyLG9dKSxkPyh0aGlzLmVudHJpZXM9aCx0aGlzKTpuZXcgdXIoZSx0aGlzLmtleUhhc2gsaCl9O3ZhciBjcj1mdW5jdGlvbihlLHQsbil7dGhpcy5vd25lcklEPWUsdGhpcy5rZXlIYXNoPXQsdGhpcy5lbnRyeT1ufTtjci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBQKG4sdGhpcy5lbnRyeVswXSk/dGhpcy5lbnRyeVsxXTpyfSxjci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxhLHMpe3ZhciB1PW89PT1wbixjPVAocix0aGlzLmVudHJ5WzBdKTtyZXR1cm4oYz9vPT09dGhpcy5lbnRyeVsxXTp1KT90aGlzOihpKHMpLHU/dm9pZCBpKGEpOmM/ZSYmZT09PXRoaXMub3duZXJJRD8odGhpcy5lbnRyeVsxXT1vLHRoaXMpOm5ldyBjcihlLHRoaXMua2V5SGFzaCxbcixvXSk6KGkoYSksaXQodGhpcyxlLHQsaihyKSxbcixvXSkpKX0sb3IucHJvdG90eXBlLml0ZXJhdGU9dXIucHJvdG90eXBlLml0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5lbnRyaWVzLHI9MCxpPW4ubGVuZ3RoLTE7cjw9aTtyKyspaWYoITE9PT1lKG5bdD9pLXI6cl0pKXJldHVybiExfSxhci5wcm90b3R5cGUuaXRlcmF0ZT1zci5wcm90b3R5cGUuaXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLm5vZGVzLHI9MCxpPW4ubGVuZ3RoLTE7cjw9aTtyKyspe3ZhciBvPW5bdD9pLXI6cl07aWYobyYmITE9PT1vLml0ZXJhdGUoZSx0KSlyZXR1cm4hMX19LGNyLnByb3RvdHlwZS5pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUodGhpcy5lbnRyeSl9O3ZhciBscixwcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuKXt0aGlzLl90eXBlPXQsdGhpcy5fcmV2ZXJzZT1uLHRoaXMuX3N0YWNrPWUuX3Jvb3QmJlhlKGUuX3Jvb3QpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD10aGlzLl90eXBlLG49dGhpcy5fc3RhY2s7bjspe3ZhciByPW4ubm9kZSxpPW4uaW5kZXgrKyxvPXZvaWQgMDtpZihyLmVudHJ5KXtpZigwPT09aSlyZXR1cm4gWWUodCxyLmVudHJ5KX1lbHNlIGlmKHIuZW50cmllcyl7aWYobz1yLmVudHJpZXMubGVuZ3RoLTEsaTw9bylyZXR1cm4gWWUodCxyLmVudHJpZXNbZS5fcmV2ZXJzZT9vLWk6aV0pfWVsc2UgaWYobz1yLm5vZGVzLmxlbmd0aC0xLGk8PW8pe3ZhciBhPXIubm9kZXNbZS5fcmV2ZXJzZT9vLWk6aV07aWYoYSl7aWYoYS5lbnRyeSlyZXR1cm4gWWUodCxhLmVudHJ5KTtuPWUuX3N0YWNrPVhlKGEsbil9Y29udGludWV9bj1lLl9zdGFjaz1lLl9zdGFjay5fX3ByZXZ9cmV0dXJuIEQoKX0sdH0oVG4pLGZyPWNuLzQsZHI9Y24vMixocj1jbi80LG1yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49bXQoKTtpZihudWxsPT09dHx8dm9pZCAwPT09dClyZXR1cm4gbjtpZihmdCh0KSlyZXR1cm4gdDt2YXIgcj1lKHQpLGk9ci5zaXplO3JldHVybiAwPT09aT9uOihkZShpKSxpPjAmJmk8Y24/aHQoMCxpLHVuLG51bGwsbmV3IHZyKHIudG9BcnJheSgpKSk6bi53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKGUpe2Uuc2V0U2l6ZShpKSxyLmZvckVhY2goZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5zZXQobix0KX0pfSkpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0Lm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoYXJndW1lbnRzKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJMaXN0IFsiLCJdIil9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe2lmKChlPXModGhpcyxlKSk+PTAmJmU8dGhpcy5zaXplKXtlKz10aGlzLl9vcmlnaW47dmFyIG49YnQodGhpcyxlKTtyZXR1cm4gbiYmbi5hcnJheVtlJmxuXX1yZXR1cm4gdH0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGd0KHRoaXMsZSx0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKT8wPT09ZT90aGlzLnNoaWZ0KCk6ZT09PXRoaXMuc2l6ZS0xP3RoaXMucG9wKCk6dGhpcy5zcGxpY2UoZSwxKTp0aGlzfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zcGxpY2UoZSwwLHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT10aGlzLl9vcmlnaW49dGhpcy5fY2FwYWNpdHk9MCx0aGlzLl9sZXZlbD11bix0aGlzLl9yb290PXRoaXMuX3RhaWw9bnVsbCx0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6bXQoKX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx0PXRoaXMuc2l6ZTtyZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKG4pe3h0KG4sMCx0K2UubGVuZ3RoKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyluLnNldCh0K3IsZVtyXSl9KX0sdC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHh0KHRoaXMsMCwtMSl9LHQucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbih0KXt4dCh0LC1lLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5zZXQobixlW25dKX0pfSx0LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe3JldHVybiB4dCh0aGlzLDEpfSx0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLG49W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3ZhciBpPXRbcl0sbz1lKCJzdHJpbmciIT09dHlwZW9mIGkmJncoaSk/aTpbaV0pOzAhPT1vLnNpemUmJm4ucHVzaChvKX1yZXR1cm4gMD09PW4ubGVuZ3RoP3RoaXM6MCE9PXRoaXMuc2l6ZXx8dGhpcy5fX293bmVySUR8fDEhPT1uLmxlbmd0aD90aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24oZSl7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0KX0pfSl9KTp0aGlzLmNvbnN0cnVjdG9yKG5bMF0pfSx0LnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKGUpe3JldHVybiB4dCh0aGlzLDAsZSl9LHQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zaXplO3JldHVybiBjKGUsdCxuKT90aGlzOnh0KHRoaXMsbChlLG4pLHAodCxuKSl9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10P3RoaXMuc2l6ZTowLHI9ZHQodGhpcyx0KTtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7dmFyIGk9cigpO3JldHVybiBpPT09eHI/RCgpOkUoZSx0Py0tbjpuKyssaSl9KX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9dGhpcyxpPXQ/dGhpcy5zaXplOjAsbz1kdCh0aGlzLHQpOyhuPW8oKSkhPT14ciYmITEhPT1lKG4sdD8tLWk6aSsrLHIpOyk7cmV0dXJuIGl9LHQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl9fb3duZXJJRD90aGlzOmU/aHQodGhpcy5fb3JpZ2luLHRoaXMuX2NhcGFjaXR5LHRoaXMuX2xldmVsLHRoaXMuX3Jvb3QsdGhpcy5fdGFpbCxlLHRoaXMuX19oYXNoKTowPT09dGhpcy5zaXplP210KCk6KHRoaXMuX19vd25lcklEPWUsdGhpcy5fX2FsdGVyZWQ9ITEsdGhpcyl9LHR9KENuKTttci5pc0xpc3Q9ZnQ7dmFyIGdyPSJAQF9fSU1NVVRBQkxFX0xJU1RfX0BAIix5cj1tci5wcm90b3R5cGU7eXJbZ3JdPSEwLHlyLmRlbGV0ZT15ci5yZW1vdmUseXIubWVyZ2U9eXIuY29uY2F0LHlyLnNldEluPWtlLHlyLmRlbGV0ZUluPXlyLnJlbW92ZUluPV9lLHlyLnVwZGF0ZT1PZSx5ci51cGRhdGVJbj1GZSx5ci5tZXJnZUluPVZlLHlyLm1lcmdlRGVlcEluPXFlLHlyLndpdGhNdXRhdGlvbnM9SGUseXIud2FzQWx0ZXJlZD1LZSx5ci5hc0ltbXV0YWJsZT1RZSx5clsiQEB0cmFuc2R1Y2VyL2luaXQiXT15ci5hc011dGFibGU9V2UseXJbIkBAdHJhbnNkdWNlci9zdGVwIl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHQpfSx5clsiQEB0cmFuc2R1Y2VyL3Jlc3VsdCJdPWZ1bmN0aW9uKGUpe3JldHVybiBlLmFzSW1tdXRhYmxlKCl9O3ZhciB2cj1mdW5jdGlvbihlLHQpe3RoaXMuYXJyYXk9ZSx0aGlzLm93bmVySUQ9dH07dnIucHJvdG90eXBlLnJlbW92ZUJlZm9yZT1mdW5jdGlvbihlLHQsbil7aWYobj09PXQ/MTw8dDowPT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIHI9bj4+PnQmbG47aWYocj49dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIG5ldyB2cihbXSxlKTt2YXIgaSxvPTA9PT1yO2lmKHQ+MCl7dmFyIGE9dGhpcy5hcnJheVtyXTtpZigoaT1hJiZhLnJlbW92ZUJlZm9yZShlLHQtdW4sbikpPT09YSYmbylyZXR1cm4gdGhpc31pZihvJiYhaSlyZXR1cm4gdGhpczt2YXIgcz12dCh0aGlzLGUpO2lmKCFvKWZvcih2YXIgdT0wO3U8cjt1Kyspcy5hcnJheVt1XT12b2lkIDA7cmV0dXJuIGkmJihzLmFycmF5W3JdPWkpLHN9LHZyLnByb3RvdHlwZS5yZW1vdmVBZnRlcj1mdW5jdGlvbihlLHQsbil7aWYobj09PSh0PzE8PHQ6MCl8fDA9PT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4gdGhpczt2YXIgcj1uLTE+Pj50JmxuO2lmKHI+PXRoaXMuYXJyYXkubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBpO2lmKHQ+MCl7dmFyIG89dGhpcy5hcnJheVtyXTtpZigoaT1vJiZvLnJlbW92ZUFmdGVyKGUsdC11bixuKSk9PT1vJiZyPT09dGhpcy5hcnJheS5sZW5ndGgtMSlyZXR1cm4gdGhpc312YXIgYT12dCh0aGlzLGUpO3JldHVybiBhLmFycmF5LnNwbGljZShyKzEpLGkmJihhLmFycmF5W3JdPWkpLGF9O3ZhciBicix4cj17fSxDcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT93dCgpOkV0KGUpP2U6d3QoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKHQpe3ZhciBuPXhuKGUpO2RlKG4uc2l6ZSksbi5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc2V0KG4sZSl9KX0pfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0Lm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoYXJndW1lbnRzKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJPcmRlcmVkTWFwIHsiLCJ9Iil9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX21hcC5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PW4/dGhpcy5fbGlzdC5nZXQobilbMV06dH0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT90aGlzOnRoaXMuX19vd25lcklEPyh0aGlzLnNpemU9MCx0aGlzLl9tYXAuY2xlYXIoKSx0aGlzLl9saXN0LmNsZWFyKCksdGhpcyk6d3QoKX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFN0KHRoaXMsZSx0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiBTdCh0aGlzLGUscG4pfSx0LnByb3RvdHlwZS53YXNBbHRlcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcC53YXNBbHRlcmVkKCl8fHRoaXMuX2xpc3Qud2FzQWx0ZXJlZCgpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9saXN0Ll9faXRlcmF0ZShmdW5jdGlvbih0KXtyZXR1cm4gdCYmZSh0WzFdLHRbMF0sbil9LHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xpc3QuZnJvbUVudHJ5U2VxKCkuX19pdGVyYXRvcihlLHQpfSx0LnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyPWZ1bmN0aW9uKGUpe2lmKGU9PT10aGlzLl9fb3duZXJJRClyZXR1cm4gdGhpczt2YXIgdD10aGlzLl9tYXAuX19lbnN1cmVPd25lcihlKSxuPXRoaXMuX2xpc3QuX19lbnN1cmVPd25lcihlKTtyZXR1cm4gZT9EdCh0LG4sZSx0aGlzLl9faGFzaCk6MD09PXRoaXMuc2l6ZT93dCgpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX21hcD10LHRoaXMuX2xpc3Q9bix0aGlzKX0sdH0obnIpO0NyLmlzT3JkZXJlZE1hcD1FdCxDci5wcm90b3R5cGVbeW5dPSEwLENyLnByb3RvdHlwZS5kZWxldGU9Q3IucHJvdG90eXBlLnJlbW92ZTt2YXIgRXIsRHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWU/X3QoKTprdChlKT9lOl90KCkucHVzaEFsbChlKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5vZj1mdW5jdGlvbigpe3JldHVybiB0aGlzKGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZygiU3RhY2sgWyIsIl0iKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faGVhZDtmb3IoZT1zKHRoaXMsZSk7biYmZS0tOyluPW4ubmV4dDtyZXR1cm4gbj9uLnZhbHVlOnR9LHQucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZCYmdGhpcy5faGVhZC52YWx1ZX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcztmb3IodmFyIHQ9dGhpcy5zaXplK2FyZ3VtZW50cy5sZW5ndGgsbj10aGlzLl9oZWFkLHI9YXJndW1lbnRzLmxlbmd0aC0xO3I+PTA7ci0tKW49e3ZhbHVlOmVbcl0sbmV4dDpufTtyZXR1cm4gdGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT10LHRoaXMuX2hlYWQ9bix0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6QXQodCxuKX0sdC5wcm90b3R5cGUucHVzaEFsbD1mdW5jdGlvbih0KXtpZih0PWUodCksMD09PXQuc2l6ZSlyZXR1cm4gdGhpcztpZigwPT09dGhpcy5zaXplJiZrdCh0KSlyZXR1cm4gdDtkZSh0LnNpemUpO3ZhciBuPXRoaXMuc2l6ZSxyPXRoaXMuX2hlYWQ7cmV0dXJuIHQuX19pdGVyYXRlKGZ1bmN0aW9uKGUpe24rKyxyPXt2YWx1ZTplLG5leHQ6cn19LCEwKSx0aGlzLl9fb3duZXJJRD8odGhpcy5zaXplPW4sdGhpcy5faGVhZD1yLHRoaXMuX19oYXNoPXZvaWQgMCx0aGlzLl9fYWx0ZXJlZD0hMCx0aGlzKTpBdChuLHIpfSx0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGljZSgxKX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT90aGlzOnRoaXMuX19vd25lcklEPyh0aGlzLnNpemU9MCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6X3QoKX0sdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxuKXtpZihjKHQsbix0aGlzLnNpemUpKXJldHVybiB0aGlzO3ZhciByPWwodCx0aGlzLnNpemUpO2lmKHAobix0aGlzLnNpemUpIT09dGhpcy5zaXplKXJldHVybiBlLnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMsdCxuKTtmb3IodmFyIGk9dGhpcy5zaXplLXIsbz10aGlzLl9oZWFkO3ItLTspbz1vLm5leHQ7cmV0dXJuIHRoaXMuX19vd25lcklEPyh0aGlzLnNpemU9aSx0aGlzLl9oZWFkPW8sdGhpcy5fX2hhc2g9dm9pZCAwLHRoaXMuX19hbHRlcmVkPSEwLHRoaXMpOkF0KGksbyl9LHQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl9fb3duZXJJRD90aGlzOmU/QXQodGhpcy5zaXplLHRoaXMuX2hlYWQsZSx0aGlzLl9faGFzaCk6MD09PXRoaXMuc2l6ZT9fdCgpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX19hbHRlcmVkPSExLHRoaXMpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKHQpcmV0dXJuIG5ldyBNbih0aGlzLnRvQXJyYXkoKSkuX19pdGVyYXRlKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxyLG4pfSx0KTtmb3IodmFyIHI9MCxpPXRoaXMuX2hlYWQ7aSYmITEhPT1lKGkudmFsdWUscisrLG4pOylpPWkubmV4dDtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIG5ldyBNbih0aGlzLnRvQXJyYXkoKSkuX19pdGVyYXRvcihlLHQpO3ZhciBuPTAscj10aGlzLl9oZWFkO3JldHVybiBuZXcgVG4oZnVuY3Rpb24oKXtpZihyKXt2YXIgdD1yLnZhbHVlO3JldHVybiByPXIubmV4dCxFKGUsbisrLHQpfXJldHVybiBEKCl9KX0sdH0oQ24pO0RyLmlzU3RhY2s9a3Q7dmFyIHdyPSJAQF9fSU1NVVRBQkxFX1NUQUNLX19AQCIsU3I9RHIucHJvdG90eXBlO1NyW3dyXT0hMCxTci5zaGlmdD1Tci5wb3AsU3IudW5zaGlmdD1Tci5wdXNoLFNyLnVuc2hpZnRBbGw9U3IucHVzaEFsbCxTci53aXRoTXV0YXRpb25zPUhlLFNyLndhc0FsdGVyZWQ9S2UsU3IuYXNJbW11dGFibGU9UWUsU3JbIkBAdHJhbnNkdWNlci9pbml0Il09U3IuYXNNdXRhYmxlPVdlLFNyWyJAQHRyYW5zZHVjZXIvc3RlcCJdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudW5zaGlmdCh0KX0sU3JbIkBAdHJhbnNkdWNlci9yZXN1bHQiXT1mdW5jdGlvbihlKXtyZXR1cm4gZS5hc0ltbXV0YWJsZSgpfTt2YXIga3IsQXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PXQ/UHQoKTpOdCh0KSYmIWIodCk/dDpQdCgpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24obil7dmFyIHI9ZSh0KTtkZShyLnNpemUpLHIuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoZSl9KX0pfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0Lm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoYXJndW1lbnRzKX0sdC5mcm9tS2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcyh4bihlKS5rZXlTZXEoKSl9LHQuaW50ZXJzZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBlPWJuKGUpLnRvQXJyYXkoKSxlLmxlbmd0aD9Uci5pbnRlcnNlY3QuYXBwbHkodChlLnBvcCgpKSxlKTpQdCgpfSx0LnVuaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBlPWJuKGUpLnRvQXJyYXkoKSxlLmxlbmd0aD9Uci51bmlvbi5hcHBseSh0KGUucG9wKCkpLGUpOlB0KCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZygiU2V0IHsiLCJ9Iil9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlKX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3JldHVybiBJdCh0aGlzLHRoaXMuX21hcC5zZXQoZSxlKSl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gSXQodGhpcyx0aGlzLl9tYXAucmVtb3ZlKGUpKX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gSXQodGhpcyx0aGlzLl9tYXAuY2xlYXIoKSl9LHQucHJvdG90eXBlLnVuaW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aDtuLS07KXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0PXQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwIT09ZS5zaXplfSksMD09PXQubGVuZ3RoP3RoaXM6MCE9PXRoaXMuc2l6ZXx8dGhpcy5fX293bmVySUR8fDEhPT10Lmxlbmd0aD90aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24obil7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZSh0W3JdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZChlKX0pfSk6dGhpcy5jb25zdHJ1Y3Rvcih0WzBdKX0sdC5wcm90b3R5cGUuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aDtuLS07KXRbbl09YXJndW1lbnRzW25dO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpczt0PXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSk7dmFyIHI9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlKXt0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0LmluY2x1ZGVzKGUpfSl8fHIucHVzaChlKX0pLHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtyLmZvckVhY2goZnVuY3Rpb24odCl7ZS5yZW1vdmUodCl9KX0pfSx0LnByb3RvdHlwZS5zdWJ0cmFjdD1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7bi0tOyl0W25dPWFyZ3VtZW50c1tuXTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXM7dD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX0pO3ZhciByPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSl7dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluY2x1ZGVzKGUpfSkmJnIucHVzaChlKX0pLHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtyLmZvckVhY2goZnVuY3Rpb24odCl7ZS5yZW1vdmUodCl9KX0pfSx0LnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBNcih0ZSh0aGlzLGUpKX0sdC5wcm90b3R5cGUuc29ydEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1yKHRlKHRoaXMsdCxlKSl9LHQucHJvdG90eXBlLndhc0FsdGVyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLndhc0FsdGVyZWQoKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbWFwLl9faXRlcmF0ZShmdW5jdGlvbih0KXtyZXR1cm4gZSh0LHQsbil9LHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX21hcC5fX2l0ZXJhdG9yKGUsdCl9LHQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7aWYoZT09PXRoaXMuX19vd25lcklEKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuX21hcC5fX2Vuc3VyZU93bmVyKGUpO3JldHVybiBlP3RoaXMuX19tYWtlKHQsZSk6MD09PXRoaXMuc2l6ZT90aGlzLl9fZW1wdHkoKToodGhpcy5fX293bmVySUQ9ZSx0aGlzLl9tYXA9dCx0aGlzKX0sdH0oRW4pO0FyLmlzU2V0PU50O3ZhciBfcj0iQEBfX0lNTVVUQUJMRV9TRVRfX0BAIixUcj1Bci5wcm90b3R5cGU7VHJbX3JdPSEwLFRyLmRlbGV0ZT1Uci5yZW1vdmUsVHIubWVyZ2U9VHIuY29uY2F0PVRyLnVuaW9uLFRyLndpdGhNdXRhdGlvbnM9SGUsVHIuYXNJbW11dGFibGU9UWUsVHJbIkBAdHJhbnNkdWNlci9pbml0Il09VHIuYXNNdXRhYmxlPVdlLFRyWyJAQHRyYW5zZHVjZXIvc3RlcCJdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYWRkKHQpfSxUclsiQEB0cmFuc2R1Y2VyL3Jlc3VsdCJdPWZ1bmN0aW9uKGUpe3JldHVybiBlLmFzSW1tdXRhYmxlKCl9LFRyLl9fZW1wdHk9UHQsVHIuX19tYWtlPUx0O3ZhciBPcixGcixOcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbixyKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSxuLHIpO2lmKGZlKDAhPT1yLCJDYW5ub3Qgc3RlcCBhIFJhbmdlIGJ5IDAiKSxlPWV8fDAsdm9pZCAwPT09biYmKG49MS8wKSxyPXZvaWQgMD09PXI/MTpNYXRoLmFicyhyKSxuPGUmJihyPS1yKSx0aGlzLl9zdGFydD1lLHRoaXMuX2VuZD1uLHRoaXMuX3N0ZXA9cix0aGlzLnNpemU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tZSkvci0xKSsxKSwwPT09dGhpcy5zaXplKXtpZihGcilyZXR1cm4gRnI7RnI9dGhpc319cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNpemU/IlJhbmdlIFtdIjoiUmFuZ2UgWyAiK3RoaXMuX3N0YXJ0KyIuLi4iK3RoaXMuX2VuZCsoMSE9PXRoaXMuX3N0ZXA/IiBieSAiK3RoaXMuX3N0ZXA6IiIpKyIgXSJ9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLl9zdGFydCtzKHRoaXMsZSkqdGhpcy5fc3RlcDp0fSx0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlKXt2YXIgdD0oZS10aGlzLl9zdGFydCkvdGhpcy5fc3RlcDtyZXR1cm4gdD49MCYmdDx0aGlzLnNpemUmJnQ9PT1NYXRoLmZsb29yKHQpfSx0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLG4pe3JldHVybiBjKGUsbix0aGlzLnNpemUpP3RoaXM6KGU9bChlLHRoaXMuc2l6ZSksbj1wKG4sdGhpcy5zaXplKSxuPD1lP25ldyB0KDAsMCk6bmV3IHQodGhpcy5nZXQoZSx0aGlzLl9lbmQpLHRoaXMuZ2V0KG4sdGhpcy5fZW5kKSx0aGlzLl9zdGVwKSl9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS10aGlzLl9zdGFydDtpZih0JXRoaXMuX3N0ZXA9PT0wKXt2YXIgbj10L3RoaXMuX3N0ZXA7aWYobj49MCYmbjx0aGlzLnNpemUpcmV0dXJuIG59cmV0dXJuLTF9LHQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmluZGV4T2YoZSl9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLHI9dGhpcy5zaXplLGk9dGhpcy5fc3RlcCxvPXQ/dGhpcy5fc3RhcnQrKHItMSkqaTp0aGlzLl9zdGFydCxhPTA7YSE9PXImJiExIT09ZShvLHQ/ci0rK2E6YSsrLG4pOylvKz10Py1pOmk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNpemUscj10aGlzLl9zdGVwLGk9dD90aGlzLl9zdGFydCsobi0xKSpyOnRoaXMuX3N0YXJ0LG89MDtyZXR1cm4gbmV3IFRuKGZ1bmN0aW9uKCl7aWYobz09PW4pcmV0dXJuIEQoKTt2YXIgYT1pO3JldHVybiBpKz10Py1yOnIsRShlLHQ/bi0rK286bysrLGEpfSl9LHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHQ/dGhpcy5fc3RhcnQ9PT1lLl9zdGFydCYmdGhpcy5fZW5kPT09ZS5fZW5kJiZ0aGlzLl9zdGVwPT09ZS5fc3RlcDpUdCh0aGlzLGUpfSx0fShJbik7Ym4uaXNJdGVyYWJsZT1tLGJuLmlzS2V5ZWQ9Zyxibi5pc0luZGV4ZWQ9eSxibi5pc0Fzc29jaWF0aXZlPXYsYm4uaXNPcmRlcmVkPWIsYm4uSXRlcmF0b3I9VG4sT3QoYm4se3RvQXJyYXk6ZnVuY3Rpb24oKXtkZSh0aGlzLnNpemUpO3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemV8fDApLHQ9Zyh0aGlzKSxuPTA7cmV0dXJuIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKHIsaSl7ZVtuKytdPXQ/W2kscl06cn0pLGV9LHRvSW5kZXhlZFNlcTpmdW5jdGlvbigpe3JldHVybiBuZXcgWm4odGhpcyl9LHRvSlM6ZnVuY3Rpb24oKXtyZXR1cm4gRnQodGhpcyl9LHRvS2V5ZWRTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhuKHRoaXMsITApfSx0b01hcDpmdW5jdGlvbigpe3JldHVybiBucih0aGlzLnRvS2V5ZWRTZXEoKSl9LHRvT2JqZWN0OiR0LHRvT3JkZXJlZE1hcDpmdW5jdGlvbigpe3JldHVybiBDcih0aGlzLnRvS2V5ZWRTZXEoKSl9LHRvT3JkZXJlZFNldDpmdW5jdGlvbigpe3JldHVybiBNcihnKHRoaXMpP3RoaXMudmFsdWVTZXEoKTp0aGlzKX0sdG9TZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXIoZyh0aGlzKT90aGlzLnZhbHVlU2VxKCk6dGhpcyl9LHRvU2V0U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlcih0aGlzKX0sdG9TZXE6ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzKT90aGlzLnRvSW5kZXhlZFNlcSgpOmcodGhpcyk/dGhpcy50b0tleWVkU2VxKCk6dGhpcy50b1NldFNlcSgpfSx0b1N0YWNrOmZ1bmN0aW9uKCl7cmV0dXJuIERyKGcodGhpcyk/dGhpcy52YWx1ZVNlcSgpOnRoaXMpfSx0b0xpc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbXIoZyh0aGlzKT90aGlzLnZhbHVlU2VxKCk6dGhpcyl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIltDb2xsZWN0aW9uXSJ9LF9fdG9TdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuc2l6ZT9lK3Q6ZSsiICIrdGhpcy50b1NlcSgpLm1hcCh0aGlzLl9fdG9TdHJpbmdNYXBwZXIpLmpvaW4oIiwgIikrIiAiK3R9LGNvbmNhdDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PWFyZ3VtZW50cy5sZW5ndGg7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gb2UodGhpcyxZKHRoaXMsZSkpfSxpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBQKHQsZSl9KX0sZW50cmllczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlcmF0b3IoU24pfSxldmVyeTpmdW5jdGlvbihlLHQpe2RlKHRoaXMuc2l6ZSk7dmFyIG49ITA7cmV0dXJuIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKHIsaSxvKXtpZighZS5jYWxsKHQscixpLG8pKXJldHVybiBuPSExLCExfSksbn0sZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKHRoaXMscSh0aGlzLGUsdCwhMCkpfSxmaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmZpbmRFbnRyeShlLHQpO3JldHVybiByP3JbMV06bn0sZm9yRWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiBkZSh0aGlzLnNpemUpLHRoaXMuX19pdGVyYXRlKHQ/ZS5iaW5kKHQpOmUpfSxqb2luOmZ1bmN0aW9uKGUpe2RlKHRoaXMuc2l6ZSksZT12b2lkIDAhPT1lPyIiK2U6IiwiO3ZhciB0PSIiLG49ITA7cmV0dXJuIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKHIpe24/bj0hMTp0Kz1lLHQrPW51bGwhPT1yJiZ2b2lkIDAhPT1yP3IudG9TdHJpbmcoKToiIn0pLHR9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZXJhdG9yKERuKX0sbWFwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKHRoaXMsRyh0aGlzLGUsdCkpfSxyZWR1Y2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBVdCh0aGlzLGUsdCxuLGFyZ3VtZW50cy5sZW5ndGg8MiwhMSl9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVXQodGhpcyxlLHQsbixhcmd1bWVudHMubGVuZ3RoPDIsITApfSxyZXZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIG9lKHRoaXMsVih0aGlzLCEwKSl9LHNsaWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKHRoaXMsUSh0aGlzLGUsdCwhMCkpfSxzb21lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIXRoaXMuZXZlcnkoVnQoZSksdCl9LHNvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKHRoaXMsdGUodGhpcyxlKSl9LHZhbHVlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlcmF0b3Iod24pfSxidXRMYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpY2UoMCwtMSl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zaXplPzA9PT10aGlzLnNpemU6IXRoaXMuc29tZShmdW5jdGlvbigpe3JldHVybiEwfSl9LGNvdW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZT90aGlzLnRvU2VxKCkuZmlsdGVyKGUsdCk6dGhpcyl9LGNvdW50Qnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSCh0aGlzLGUsdCl9LGVxdWFsczpmdW5jdGlvbihlKXtyZXR1cm4gVHQodGhpcyxlKX0sZW50cnlTZXE6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUuX2NhY2hlKXJldHVybiBuZXcgTW4oZS5fY2FjaGUpO3ZhciB0PWUudG9TZXEoKS5tYXAoR3QpLnRvSW5kZXhlZFNlcSgpO3JldHVybiB0LmZyb21FbnRyeVNlcT1mdW5jdGlvbigpe3JldHVybiBlLnRvU2VxKCl9LHR9LGZpbHRlck5vdDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmZpbHRlcihWdChlKSx0KX0sZmluZEVudHJ5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uO3JldHVybiB0aGlzLl9faXRlcmF0ZShmdW5jdGlvbihuLGksbyl7aWYoZS5jYWxsKHQsbixpLG8pKXJldHVybiByPVtpLG5dLCExfSkscn0sZmluZEtleTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZmluZEVudHJ5KGUsdCk7cmV0dXJuIG4mJm5bMF19LGZpbmRMYXN0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50b0tleWVkU2VxKCkucmV2ZXJzZSgpLmZpbmQoZSx0LG4pfSxmaW5kTGFzdEVudHJ5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50b0tleWVkU2VxKCkucmV2ZXJzZSgpLmZpbmRFbnRyeShlLHQsbil9LGZpbmRMYXN0S2V5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudG9LZXllZFNlcSgpLnJldmVyc2UoKS5maW5kS2V5KGUsdCl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZCh1KX0sZmxhdE1hcDpmdW5jdGlvbihlLHQpe3JldHVybiBvZSh0aGlzLFoodGhpcyxlLHQpKX0sZmxhdHRlbjpmdW5jdGlvbihlKXtyZXR1cm4gb2UodGhpcyxYKHRoaXMsZSwhMCkpfSxmcm9tRW50cnlTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRyKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5maW5kKGZ1bmN0aW9uKHQsbil7cmV0dXJuIFAobixlKX0sdm9pZCAwLHQpfSxnZXRJbjpqdCxncm91cEJ5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFcodGhpcyxlLHQpfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0KGUscG4pIT09cG59LGhhc0luOkJ0LGlzU3Vic2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlPSJmdW5jdGlvbiI9PT10eXBlb2YgZS5pbmNsdWRlcz9lOmJuKGUpLHRoaXMuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KX0saXNTdXBlcnNldDpmdW5jdGlvbihlKXtyZXR1cm4gZT0iZnVuY3Rpb24iPT09dHlwZW9mIGUuaXNTdWJzZXQ/ZTpibihlKSxlLmlzU3Vic2V0KHRoaXMpfSxrZXlPZjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maW5kS2V5KGZ1bmN0aW9uKHQpe3JldHVybiBQKHQsZSl9KX0sa2V5U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TZXEoKS5tYXAoenQpLnRvSW5kZXhlZFNlcSgpfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TZXEoKS5yZXZlcnNlKCkuZmlyc3QoKX0sbGFzdEtleU9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvS2V5ZWRTZXEoKS5yZXZlcnNlKCkua2V5T2YoZSl9LG1heDpmdW5jdGlvbihlKXtyZXR1cm4gbmUodGhpcyxlKX0sbWF4Qnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmUodGhpcyx0LGUpfSxtaW46ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKHRoaXMsZT9xdChlKTpXdCl9LG1pbkJ5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5lKHRoaXMsdD9xdCh0KTpXdCxlKX0scmVzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWNlKDEpfSxza2lwOmZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZT90aGlzOnRoaXMuc2xpY2UoTWF0aC5tYXgoMCxlKSl9LHNraXBMYXN0OmZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZT90aGlzOnRoaXMuc2xpY2UoMCwtTWF0aC5tYXgoMCxlKSl9LHNraXBXaGlsZTpmdW5jdGlvbihlLHQpe3JldHVybiBvZSh0aGlzLEoodGhpcyxlLHQsITApKX0sc2tpcFVudGlsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2tpcFdoaWxlKFZ0KGUpLHQpfSxzb3J0Qnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb2UodGhpcyx0ZSh0aGlzLHQsZSkpfSx0YWtlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNsaWNlKDAsTWF0aC5tYXgoMCxlKSl9LHRha2VMYXN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNsaWNlKC1NYXRoLm1heCgwLGUpKX0sdGFrZVdoaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKHRoaXMsSyh0aGlzLGUsdCkpfSx0YWtlVW50aWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50YWtlV2hpbGUoVnQoZSksdCl9LHVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSh0aGlzKX0sdmFsdWVTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0luZGV4ZWRTZXEoKX0saGFzaENvZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhc2h8fCh0aGlzLl9faGFzaD1RdCh0aGlzKSl9fSk7dmFyIElyPWJuLnByb3RvdHlwZTtJcltobl09ITAsSXJbX25dPUlyLnZhbHVlcyxJci50b0pTT049SXIudG9BcnJheSxJci5fX3RvU3RyaW5nTWFwcGVyPXllLElyLmluc3BlY3Q9SXIudG9Tb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSxJci5jaGFpbj1Jci5mbGF0TWFwLElyLmNvbnRhaW5zPUlyLmluY2x1ZGVzLE90KHhuLHtmbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIG9lKHRoaXMseih0aGlzKSl9LG1hcEVudHJpZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9MDtyZXR1cm4gb2UodGhpcyx0aGlzLnRvU2VxKCkubWFwKGZ1bmN0aW9uKGksbyl7cmV0dXJuIGUuY2FsbCh0LFtvLGldLHIrKyxuKX0pLmZyb21FbnRyeVNlcSgpKX0sbWFwS2V5czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG9lKHRoaXMsdGhpcy50b1NlcSgpLmZsaXAoKS5tYXAoZnVuY3Rpb24ocixpKXtyZXR1cm4gZS5jYWxsKHQscixpLG4pfSkuZmxpcCgpKX19KTt2YXIgTHI9eG4ucHJvdG90eXBlO0xyW21uXT0hMCxMcltfbl09SXIuZW50cmllcyxMci50b0pTT049JHQsTHIuX190b1N0cmluZ01hcHBlcj1mdW5jdGlvbihlLHQpe3JldHVybiB5ZSh0KSsiOiAiK3llKGUpfSxPdChDbix7dG9LZXllZFNlcTpmdW5jdGlvbigpe3JldHVybiBuZXcgWG4odGhpcywhMSl9LGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBvZSh0aGlzLHEodGhpcyxlLHQsITEpKX0sZmluZEluZGV4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5maW5kRW50cnkoZSx0KTtyZXR1cm4gbj9uWzBdOi0xfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMua2V5T2YoZSk7cmV0dXJuIHZvaWQgMD09PXQ/LTE6dH0sbGFzdEluZGV4T2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sYXN0S2V5T2YoZSk7cmV0dXJuIHZvaWQgMD09PXQ/LTE6dH0scmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBvZSh0aGlzLFYodGhpcywhMSkpfSxzbGljZTpmdW5jdGlvbihlLHQpe3JldHVybiBvZSh0aGlzLFEodGhpcyxlLHQsITEpKX0sc3BsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZih0PU1hdGgubWF4KHR8fDAsMCksMD09PW58fDI9PT1uJiYhdClyZXR1cm4gdGhpcztlPWwoZSxlPDA/dGhpcy5jb3VudCgpOnRoaXMuc2l6ZSk7dmFyIHI9dGhpcy5zbGljZSgwLGUpO3JldHVybiBvZSh0aGlzLDE9PT1uP3I6ci5jb25jYXQocGUoYXJndW1lbnRzLDIpLHRoaXMuc2xpY2UoZSt0KSkpfSxmaW5kTGFzdEluZGV4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5maW5kTGFzdEVudHJ5KGUsdCk7cmV0dXJuIG4/blswXTotMX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoMCl9LGZsYXR0ZW46ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKHRoaXMsWCh0aGlzLGUsITEpKX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9cyh0aGlzLGUpLGU8MHx8dGhpcy5zaXplPT09MS8wfHx2b2lkIDAhPT10aGlzLnNpemUmJmU+dGhpcy5zaXplP3Q6dGhpcy5maW5kKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49PT1lfSx2b2lkIDAsdCl9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4oZT1zKHRoaXMsZSkpPj0wJiYodm9pZCAwIT09dGhpcy5zaXplP3RoaXMuc2l6ZT09PTEvMHx8ZTx0aGlzLnNpemU6LTEhPT10aGlzLmluZGV4T2YoZSkpfSxpbnRlcnBvc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKHRoaXMsZWUodGhpcyxlKSl9LGludGVybGVhdmU6ZnVuY3Rpb24oKXt2YXIgZT1bdGhpc10uY29uY2F0KHBlKGFyZ3VtZW50cykpLHQ9aWUodGhpcy50b1NlcSgpLEluLm9mLGUpLG49dC5mbGF0dGVuKCEwKTtyZXR1cm4gdC5zaXplJiYobi5zaXplPXQuc2l6ZSplLmxlbmd0aCksb2UodGhpcyxuKX0sa2V5U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIE5yKDAsdGhpcy5zaXplKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgtMSl9LHNraXBXaGlsZTpmdW5jdGlvbihlLHQpe3JldHVybiBvZSh0aGlzLEoodGhpcyxlLHQsITEpKX0semlwOmZ1bmN0aW9uKCl7cmV0dXJuIG9lKHRoaXMsaWUodGhpcyxIdCxbdGhpc10uY29uY2F0KHBlKGFyZ3VtZW50cykpKSl9LHppcEFsbDpmdW5jdGlvbigpe3JldHVybiBvZSh0aGlzLGllKHRoaXMsSHQsW3RoaXNdLmNvbmNhdChwZShhcmd1bWVudHMpKSwhMCkpfSx6aXBXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PXBlKGFyZ3VtZW50cyk7cmV0dXJuIHRbMF09dGhpcyxvZSh0aGlzLGllKHRoaXMsZSx0KSl9fSk7dmFyIFByPUNuLnByb3RvdHlwZTtQcltnbl09ITAsUHJbeW5dPSEwLE90KEVuLHtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5oYXMoZSk/ZTp0fSxpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSl9LGtleVNlcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlU2VxKCl9fSksRW4ucHJvdG90eXBlLmhhcz1Jci5pbmNsdWRlcyxFbi5wcm90b3R5cGUuY29udGFpbnM9RW4ucHJvdG90eXBlLmluY2x1ZGVzLE90KE5uLHhuLnByb3RvdHlwZSksT3QoSW4sQ24ucHJvdG90eXBlKSxPdChMbixFbi5wcm90b3R5cGUpO3ZhciBNcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9adCgpOll0KGUpP2U6WnQoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKHQpe3ZhciBuPUVuKGUpO2RlKG4uc2l6ZSksbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZChlKX0pfSl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyhhcmd1bWVudHMpfSx0LmZyb21LZXlzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzKHhuKGUpLmtleVNlcSgpKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJPcmRlcmVkU2V0IHsiLCJ9Iil9LHR9KEFyKTtNci5pc09yZGVyZWRTZXQ9WXQ7dmFyIGpyPU1yLnByb3RvdHlwZTtqclt5bl09ITAsanIuemlwPVByLnppcCxqci56aXBXaXRoPVByLnppcFdpdGgsanIuX19lbXB0eT1adCxqci5fX21ha2U9WHQ7dmFyIFJyLEJyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1mdW5jdGlvbihvKXt2YXIgYT10aGlzO2lmKG8gaW5zdGFuY2VvZiByKXJldHVybiBvO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihvKTtpZighbil7bj0hMDt2YXIgcz1PYmplY3Qua2V5cyhlKSx1PWkuX2luZGljZXM9e307aS5fbmFtZT10LGkuX2tleXM9cyxpLl9kZWZhdWx0VmFsdWVzPWU7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBsPXNbY107dVtsXT1jLGlbbF0/Im9iamVjdCI9PT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkNhbm5vdCBkZWZpbmUgIit0bihhKSsnIHdpdGggcHJvcGVydHkgIicrbCsnIiBzaW5jZSB0aGF0IHByb3BlcnR5IG5hbWUgaXMgcGFydCBvZiB0aGUgUmVjb3JkIEFQSS4nKTpybihpLGwpfX10aGlzLl9fb3duZXJJRD12b2lkIDAsdGhpcy5fdmFsdWVzPW1yKCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtlLnNldFNpemUoYS5fa2V5cy5sZW5ndGgpLHhuKG8pLmZvckVhY2goZnVuY3Rpb24odCxuKXtlLnNldChhLl9pbmRpY2VzW25dLHQ9PT1hLl9kZWZhdWx0VmFsdWVzW25dP3ZvaWQgMDp0KX0pfSl9LGk9ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSgkcik7cmV0dXJuIGkuY29uc3RydWN0b3I9cixyfTtCci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD10aGlzLG49dG4odGhpcykrIiB7ICIscj10aGlzLl9rZXlzLGk9MCxvPXIubGVuZ3RoO2khPT1vO2krKyllPXJbaV0sbis9KGk/IiwgIjoiIikrZSsiOiAiK3llKHQuZ2V0KGUpKTtyZXR1cm4gbisiIH0ifSxCci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8ZSYmdGhpcy5fa2V5cz09PWUuX2tleXMmJm5uKHRoaXMpLmVxdWFscyhubihlKSl9LEJyLnByb3RvdHlwZS5oYXNoQ29kZT1mdW5jdGlvbigpe3JldHVybiBubih0aGlzKS5oYXNoQ29kZSgpfSxCci5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbmRpY2VzLmhhc093blByb3BlcnR5KGUpfSxCci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGFzKGUpKXJldHVybiB0O3ZhciBuPXRoaXMuX2luZGljZXNbZV0scj10aGlzLl92YWx1ZXMuZ2V0KG4pO3JldHVybiB2b2lkIDA9PT1yP3RoaXMuX2RlZmF1bHRWYWx1ZXNbZV06cn0sQnIucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe2lmKHRoaXMuaGFzKGUpKXt2YXIgbj10aGlzLl92YWx1ZXMuc2V0KHRoaXMuX2luZGljZXNbZV0sdD09PXRoaXMuX2RlZmF1bHRWYWx1ZXNbZV0/dm9pZCAwOnQpO2lmKG4hPT10aGlzLl92YWx1ZXMmJiF0aGlzLl9fb3duZXJJRClyZXR1cm4gZW4odGhpcyxuKX1yZXR1cm4gdGhpc30sQnIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXQoZSl9LEJyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZhbHVlcy5jbGVhcigpLnNldFNpemUodGhpcy5fa2V5cy5sZW5ndGgpO3JldHVybiB0aGlzLl9fb3duZXJJRD90aGlzOmVuKHRoaXMsZSl9LEJyLnByb3RvdHlwZS53YXNBbHRlcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlcy53YXNBbHRlcmVkKCl9LEJyLnByb3RvdHlwZS50b1NlcT1mdW5jdGlvbigpe3JldHVybiBubih0aGlzKX0sQnIucHJvdG90eXBlLnRvSlM9ZnVuY3Rpb24oKXtyZXR1cm4gRnQodGhpcyl9LEJyLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pdGVyYXRvcihTbil9LEJyLnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5uKHRoaXMpLl9faXRlcmF0b3IoZSx0KX0sQnIucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBubih0aGlzKS5fX2l0ZXJhdGUoZSx0KX0sQnIucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7aWYoZT09PXRoaXMuX19vd25lcklEKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuX3ZhbHVlcy5fX2Vuc3VyZU93bmVyKGUpO3JldHVybiBlP2VuKHRoaXMsdCxlKToodGhpcy5fX293bmVySUQ9ZSx0aGlzLl92YWx1ZXM9dCx0aGlzKX0sQnIuaXNSZWNvcmQ9eCxCci5nZXREZXNjcmlwdGl2ZU5hbWU9dG47dmFyICRyPUJyLnByb3RvdHlwZTskclt2bl09ITAsJHIuZGVsZXRlPSRyLnJlbW92ZSwkci5kZWxldGVJbj0kci5yZW1vdmVJbj1fZSwkci5nZXRJbj1qdCwkci5oYXNJbj1Jci5oYXNJbiwkci5tZXJnZT1OZSwkci5tZXJnZVdpdGg9SWUsJHIubWVyZ2VJbj1WZSwkci5tZXJnZURlZXA9emUsJHIubWVyZ2VEZWVwV2l0aD1HZSwkci5tZXJnZURlZXBJbj1xZSwkci5zZXRJbj1rZSwkci51cGRhdGU9T2UsJHIudXBkYXRlSW49RmUsJHIud2l0aE11dGF0aW9ucz1IZSwkci5hc011dGFibGU9V2UsJHIuYXNJbW11dGFibGU9UWUsJHJbX25dPSRyLmVudHJpZXMsJHIudG9KU09OPSRyLnRvT2JqZWN0PUlyLnRvT2JqZWN0LCRyLmluc3BlY3Q9JHIudG9Tb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfTt2YXIgVXIsenI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChlLG4pO2lmKHRoaXMuX3ZhbHVlPWUsdGhpcy5zaXplPXZvaWQgMD09PW4/MS8wOk1hdGgubWF4KDAsbiksMD09PXRoaXMuc2l6ZSl7aWYoVXIpcmV0dXJuIFVyO1VyPXRoaXN9fXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplPyJSZXBlYXQgW10iOiJSZXBlYXQgWyAiK3RoaXMuX3ZhbHVlKyIgIit0aGlzLnNpemUrIiB0aW1lcyBdIn0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpP3RoaXMuX3ZhbHVlOnR9LHQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBQKHRoaXMuX3ZhbHVlLGUpfSx0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLG4pe3ZhciByPXRoaXMuc2l6ZTtyZXR1cm4gYyhlLG4scik/dGhpczpuZXcgdCh0aGlzLl92YWx1ZSxwKG4sciktbChlLHIpKX0sdC5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUpe3JldHVybiBQKHRoaXMuX3ZhbHVlLGUpPzA6LTF9LHQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUpe3JldHVybiBQKHRoaXMuX3ZhbHVlLGUpP3RoaXMuc2l6ZTotMX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMscj10aGlzLnNpemUsaT0wO2khPT1yJiYhMSE9PWUobi5fdmFsdWUsdD9yLSsraTppKyssbik7KTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLnNpemUsaT0wO3JldHVybiBuZXcgVG4oZnVuY3Rpb24oKXtyZXR1cm4gaT09PXI/RCgpOkUoZSx0P3ItKytpOmkrKyxuLl92YWx1ZSl9KX0sdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdD9QKHRoaXMuX3ZhbHVlLGUuX3ZhbHVlKTpUdChlKX0sdH0oSW4pLEdyPSI0LjAuMC1yYy45IixWcj17dmVyc2lvbjpHcixDb2xsZWN0aW9uOmJuLEl0ZXJhYmxlOmJuLFNlcTpGbixNYXA6bnIsT3JkZXJlZE1hcDpDcixMaXN0Om1yLFN0YWNrOkRyLFNldDpBcixPcmRlcmVkU2V0Ok1yLFJlY29yZDpCcixSYW5nZTpOcixSZXBlYXQ6enIsaXM6UCxmcm9tSlM6b24saGFzaDpqLGlzSW1tdXRhYmxlOmgsaXNDb2xsZWN0aW9uOm0saXNLZXllZDpnLGlzSW5kZXhlZDp5LGlzQXNzb2NpYXRpdmU6dixpc09yZGVyZWQ6Yixpc1ZhbHVlT2JqZWN0OkMsZ2V0OmJlLGdldEluOk10LGhhczp2ZSxoYXNJbjpSdCxtZXJnZTpQZSxtZXJnZURlZXA6amUsbWVyZ2VXaXRoOk1lLG1lcmdlRGVlcFdpdGg6UmUscmVtb3ZlOkNlLHJlbW92ZUluOkFlLHNldDpFZSxzZXRJbjpTZSx1cGRhdGU6VGUsdXBkYXRlSW46RGV9LHFyPWJuO3QuZGVmYXVsdD1Wcn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O3JldHVybiBudWxsIT09ZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtlW25dLmZvckVhY2goZnVuY3Rpb24oZSl7dFtTdHJpbmcoZSldPW59KX0pLHR9ZnVuY3Rpb24gaShlLHQpe2lmKHQ9dHx8e30sT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZigtMT09PWEuaW5kZXhPZih0KSl0aHJvdyBuZXcgbygnVW5rbm93biBvcHRpb24gIicrdCsnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJytlKyciIFlBTUwgdHlwZS4nKX0pLHRoaXMudGFnPWUsdGhpcy5raW5kPXQua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9dC5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD10LmNvbnN0cnVjdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRoaXMuaW5zdGFuY2VPZj10Lmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9dC5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9dC5yZXByZXNlbnR8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9dC5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5zdHlsZUFsaWFzZXM9cih0LnN0eWxlQWxpYXNlc3x8bnVsbCksLTE9PT1zLmluZGV4T2YodGhpcy5raW5kKSl0aHJvdyBuZXcgbygnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK2UrJyIgWUFNTCB0eXBlLicpfXZhciBvPW4oNzIpLGE9WyJraW5kIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJkZWZhdWx0U3R5bGUiLCJzdHlsZUFsaWFzZXMiXSxzPVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcjtyZXR1cm4gcj17fSxyW2VdPW58fHQscn19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpLG89bigyMyk7dC5lZGl0UXVlcnk9KGk9by5jcmVhdGVBY3Rpb25zKHtFRElUX1FVRVJZOmZ1bmN0aW9uKGUpe3JldHVybntxdWVyeTplfX0sRURJVF9IRUFERVJTOnIoImhlYWRlcnMiKSxFRElUX0VORFBPSU5UOnIoImVuZHBvaW50IiksRURJVF9WQVJJQUJMRVM6cigidmFyaWFibGVzIiksU0VUX09QRVJBVElPTl9OQU1FOnIoIm9wZXJhdGlvbk5hbWUiKSxTRVRfVkFSSUFCTEVfVE9fVFlQRTpyKCJ2YXJpYWJsZVRvVHlwZSIpLFNFVF9PUEVSQVRJT05TOnIoIm9wZXJhdGlvbnMiKSxTRVRfRURJVE9SX0ZMRVg6cigiZWRpdG9yRmxleCIpLEVESVRfTkFNRTpyKCJuYW1lIiksT1BFTl9RVUVSWV9WQVJJQUJMRVM6ZnVuY3Rpb24oKXtyZXR1cm57cXVlcnlWYXJpYWJsZXNBY3RpdmU6ITB9fSxDTE9TRV9RVUVSWV9WQVJJQUJMRVM6ZnVuY3Rpb24oKXtyZXR1cm57cXVlcnlWYXJpYWJsZXNBY3RpdmU6ITF9fSxTRVRfVkFSSUFCTEVfRURJVE9SX0hFSUdIVDpyKCJ2YXJpYWJsZUVkaXRvckhlaWdodCIpLFNFVF9SRVNQT05TRV9UUkFDSU5HX0hFSUdIVDpyKCJyZXNwb25jZVRyYWNpbmdIZWlnaHQiKSxTRVRfVFJBQ0lOR19TVVBQT1JURUQ6cigidHJhY2luZ1N1cHBvcnRlZCIpLFNFVF9TVUJTQ1JJUFRJT05fQUNUSVZFOnIoInN1YnNjcmlwdGlvbkFjdGl2ZSIpLFNFVF9RVUVSWV9UWVBFUzpyKCJxdWVyeVR5cGVzIiksU0VUX1JFU1BPTlNFX0VYVEVOU0lPTlM6cigicmVzcG9uc2VFeHRlbnNpb25zIiksU0VUX0NVUlJFTlRfUVVFUllfU1RBUlRfVElNRTpyKCJjdXJyZW50UXVlcnlTdGFydFRpbWUiKSxTRVRfQ1VSUkVOVF9RVUVSWV9FTkRfVElNRTpyKCJjdXJyZW50UXVlcnlFbmRUaW1lIiksVVBEQVRFX1FVRVJZX0ZBQ1RTOnIoKSxQUkVUVElGWV9RVUVSWTpyKCksSU5KRUNUX0hFQURFUlM6ZnVuY3Rpb24oZSx0KXtyZXR1cm57aGVhZGVyczplLGVuZHBvaW50OnR9fSxDTE9TRV9UUkFDSU5HOnIoInJlc3BvbnNlVHJhY2luZ0hlaWdodCIpLE9QRU5fVFJBQ0lORzpyKCJyZXNwb25zZVRyYWNpbmdIZWlnaHQiKSxUT0dHTEVfVFJBQ0lORzpyKCksQ0xPU0VfVkFSSUFCTEVTOnIoInZhcmlhYmxlRWRpdG9ySGVpZ2h0IiksT1BFTl9WQVJJQUJMRVM6cigidmFyaWFibGVFZGl0b3JIZWlnaHQiKSxUT0dHTEVfVkFSSUFCTEVTOnIoKSxBRERfUkVTUE9OU0U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt3b3Jrc3BhY2VJZDplLHNlc3Npb25JZDp0LHJlc3BvbnNlOm59fSxTRVRfUkVTUE9OU0U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt3b3Jrc3BhY2VJZDplLHNlc3Npb25JZDp0LHJlc3BvbnNlOm59fSxDTEVBUl9SRVNQT05TRVM6cigpLEZFVENIX1NDSEVNQTpyKCksUkVGRVRDSF9TQ0hFTUE6cigpLFNFVF9FTkRQT0lOVF9VTlJFQUNIQUJMRTpyKCJlbmRwb2ludCIpLFNFVF9TQ1JPTExfVE9QOmZ1bmN0aW9uKGUsdCl7cmV0dXJue3Nlc3Npb25JZDplLHNjcm9sbFRvcDp0fX0sU0NIRU1BX0ZFVENISU5HX1NVQ0NFU1M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybntlbmRwb2ludDplLHRyYWNpbmdTdXBwb3J0ZWQ6dCxpc1BvbGxpbmdTY2hlbWE6bn19LFNDSEVNQV9GRVRDSElOR19FUlJPUjpmdW5jdGlvbihlLHQpe3JldHVybntlbmRwb2ludDplLGVycm9yOnR9fSxSRU5FV19TVEFDS1M6cigpLFJVTl9RVUVSWTpmdW5jdGlvbihlKXtyZXR1cm57b3BlcmF0aW9uTmFtZTplfX0sUVVFUllfU1VDQ0VTUzpyKCksUVVFUllfRVJST1I6cigpLFJVTl9RVUVSWV9BVF9QT1NJVElPTjpmdW5jdGlvbihlKXtyZXR1cm57cG9zaXRpb246ZX19LFNUQVJUX1FVRVJZOnIoInF1ZXJ5UnVubmluZyIsITApLFNUT1BfUVVFUlk6ZnVuY3Rpb24oZSx0KXtyZXR1cm57d29ya3NwYWNlSWQ6dCxzZXNzaW9uSWQ6ZX19LE9QRU5fU0VUVElOR1NfVEFCOmZ1bmN0aW9uKCl7cmV0dXJue319LE9QRU5fQ09ORklHX1RBQjpmdW5jdGlvbigpe3JldHVybnt9fSxORVdfU0VTU0lPTjpmdW5jdGlvbihlLHQpe3JldHVybntlbmRwb2ludDplLHJldXNlSGVhZGVyczp0fX0sTkVXX1NFU1NJT05fRlJPTV9RVUVSWTpmdW5jdGlvbihlKXtyZXR1cm57cXVlcnk6ZX19LE5FV19GSUxFX1RBQjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2ZpbGVOYW1lOmUsZmlsZVBhdGg6dCxmaWxlOm59fSxEVVBMSUNBVEVfU0VTU0lPTjpyKCJzZXNzaW9uIiksQ0xPU0VfU0VMRUNURURfVEFCOmZ1bmN0aW9uKCl7cmV0dXJue319LFNFTEVDVF9ORVhUX1RBQjpmdW5jdGlvbigpe3JldHVybnt9fSxTRUxFQ1RfUFJFVl9UQUI6ZnVuY3Rpb24oKXtyZXR1cm57fX0sU0VMRUNUX1RBQjpyKCJzZXNzaW9uSWQiKSxTRUxFQ1RfVEFCX0lOREVYOnIoImluZGV4IiksQ0xPU0VfVEFCOnIoInNlc3Npb25JZCIpLFJFT1JERVJfVEFCUzpmdW5jdGlvbihlLHQpe3JldHVybntzcmM6ZSxkZXN0OnR9fSxFRElUX1NFVFRJTkdTOnIoKSxTQVZFX1NFVFRJTkdTOnIoKSxFRElUX0NPTkZJRzpyKCksU0FWRV9DT05GSUc6cigpLEVESVRfRklMRTpyKCksU0FWRV9GSUxFOnIoKX0pLGkuZWRpdFF1ZXJ5KSx0LmVkaXRWYXJpYWJsZXM9aS5lZGl0VmFyaWFibGVzLHQuc2V0T3BlcmF0aW9uTmFtZT1pLnNldE9wZXJhdGlvbk5hbWUsdC5lZGl0SGVhZGVycz1pLmVkaXRIZWFkZXJzLHQuZWRpdEVuZHBvaW50PWkuZWRpdEVuZHBvaW50LHQuc2V0VmFyaWFibGVUb1R5cGU9aS5zZXRWYXJpYWJsZVRvVHlwZSx0LnNldE9wZXJhdGlvbnM9aS5zZXRPcGVyYXRpb25zLHQuc3RhcnRRdWVyeT1pLnN0YXJ0UXVlcnksdC5zdG9wUXVlcnk9aS5zdG9wUXVlcnksdC5zZXRFZGl0b3JGbGV4PWkuc2V0RWRpdG9yRmxleCx0Lm9wZW5RdWVyeVZhcmlhYmxlcz1pLm9wZW5RdWVyeVZhcmlhYmxlcyx0LmNsb3NlUXVlcnlWYXJpYWJsZXM9aS5jbG9zZVF1ZXJ5VmFyaWFibGVzLHQuc2V0VmFyaWFibGVFZGl0b3JIZWlnaHQ9aS5zZXRWYXJpYWJsZUVkaXRvckhlaWdodCx0LnNldFJlc3BvbnNlVHJhY2luZ0hlaWdodD1pLnNldFJlc3BvbnNlVHJhY2luZ0hlaWdodCx0LnNldFRyYWNpbmdTdXBwb3J0ZWQ9aS5zZXRUcmFjaW5nU3VwcG9ydGVkLHQuY2xvc2VUcmFjaW5nPWkuY2xvc2VUcmFjaW5nLHQub3BlblRyYWNpbmc9aS5vcGVuVHJhY2luZyx0LmNsb3NlVmFyaWFibGVzPWkuY2xvc2VWYXJpYWJsZXMsdC5vcGVuVmFyaWFibGVzPWkub3BlblZhcmlhYmxlcyx0LmFkZFJlc3BvbnNlPWkuYWRkUmVzcG9uc2UsdC5zZXRSZXNwb25zZT1pLnNldFJlc3BvbnNlLHQuY2xlYXJSZXNwb25zZXM9aS5jbGVhclJlc3BvbnNlcyx0Lm9wZW5TZXR0aW5nc1RhYj1pLm9wZW5TZXR0aW5nc1RhYix0LnNjaGVtYUZldGNoaW5nU3VjY2Vzcz1pLnNjaGVtYUZldGNoaW5nU3VjY2Vzcyx0LnNjaGVtYUZldGNoaW5nRXJyb3I9aS5zY2hlbWFGZXRjaGluZ0Vycm9yLHQuc2V0RW5kcG9pbnRVbnJlYWNoYWJsZT1pLnNldEVuZHBvaW50VW5yZWFjaGFibGUsdC5yZW5ld1N0YWNrcz1pLnJlbmV3U3RhY2tzLHQucnVuUXVlcnk9aS5ydW5RdWVyeSx0LnByZXR0aWZ5UXVlcnk9aS5wcmV0dGlmeVF1ZXJ5LHQuZmV0Y2hTY2hlbWE9aS5mZXRjaFNjaGVtYSx0LnVwZGF0ZVF1ZXJ5RmFjdHM9aS51cGRhdGVRdWVyeUZhY3RzLHQucnVuUXVlcnlBdFBvc2l0aW9uPWkucnVuUXVlcnlBdFBvc2l0aW9uLHQudG9nZ2xlVHJhY2luZz1pLnRvZ2dsZVRyYWNpbmcsdC50b2dnbGVWYXJpYWJsZXM9aS50b2dnbGVWYXJpYWJsZXMsdC5uZXdTZXNzaW9uPWkubmV3U2Vzc2lvbix0Lm5ld1Nlc3Npb25Gcm9tUXVlcnk9aS5uZXdTZXNzaW9uRnJvbVF1ZXJ5LHQubmV3RmlsZVRhYj1pLm5ld0ZpbGVUYWIsdC5jbG9zZVRhYj1pLmNsb3NlVGFiLHQuY2xvc2VTZWxlY3RlZFRhYj1pLmNsb3NlU2VsZWN0ZWRUYWIsdC5lZGl0U2V0dGluZ3M9aS5lZGl0U2V0dGluZ3MsdC5zYXZlU2V0dGluZ3M9aS5zYXZlU2V0dGluZ3MsdC5lZGl0Q29uZmlnPWkuZWRpdENvbmZpZyx0LnNhdmVDb25maWc9aS5zYXZlQ29uZmlnLHQuZWRpdEZpbGU9aS5lZGl0RmlsZSx0LnNhdmVGaWxlPWkuc2F2ZUZpbGUsdC5zZWxlY3RUYWI9aS5zZWxlY3RUYWIsdC5zZWxlY3RUYWJJbmRleD1pLnNlbGVjdFRhYkluZGV4LHQuc2VsZWN0TmV4dFRhYj1pLnNlbGVjdE5leHRUYWIsdC5zZWxlY3RQcmV2VGFiPWkuc2VsZWN0UHJldlRhYix0LmR1cGxpY2F0ZVNlc3Npb249aS5kdXBsaWNhdGVTZXNzaW9uLHQucXVlcnlTdWNjZXNzPWkucXVlcnlTdWNjZXNzLHQucXVlcnlFcnJvcj1pLnF1ZXJ5RXJyb3IsdC5zZXRTdWJzY3JpcHRpb25BY3RpdmU9aS5zZXRTdWJzY3JpcHRpb25BY3RpdmUsdC5zZXRRdWVyeVR5cGVzPWkuc2V0UXVlcnlUeXBlcyx0LmluamVjdEhlYWRlcnM9aS5pbmplY3RIZWFkZXJzLHQub3BlbkNvbmZpZ1RhYj1pLm9wZW5Db25maWdUYWIsdC5lZGl0TmFtZT1pLmVkaXROYW1lLHQuc2V0UmVzcG9uc2VFeHRlbnNpb25zPWkuc2V0UmVzcG9uc2VFeHRlbnNpb25zLHQuc2V0Q3VycmVudFF1ZXJ5U3RhcnRUaW1lPWkuc2V0Q3VycmVudFF1ZXJ5U3RhcnRUaW1lLHQuc2V0Q3VycmVudFF1ZXJ5RW5kVGltZT1pLnNldEN1cnJlbnRRdWVyeUVuZFRpbWUsdC5yZWZldGNoU2NoZW1hPWkucmVmZXRjaFNjaGVtYSx0LnNldFNjcm9sbFRvcD1pLnNldFNjcm9sbFRvcCx0LnJlb3JkZXJUYWJzPWkucmVvcmRlclRhYnN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5nZXQoInNlbGVjdGVkV29ya3NwYWNlIil9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5nZXRJbihbIndvcmtzcGFjZXMiLHIoZSldKX1mdW5jdGlvbiBvKGUpe3ZhciB0PWVbMF0uZW5kcG9pbnQsbj15Lk9yZGVyZWRNYXAoZS5tYXAoaC5zZXNzaW9uRnJvbVRhYikucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIHAoe30sZSwobj17fSxuW3QuaWRdPXQsbikpfSx7fSkpLHI9bi5maXJzdCgpLmlkLGk9YSh0KS5zZXRJbihbInNlc3Npb25zIiwic2Vzc2lvbnMiXSxuKS5zZXRJbihbInNlc3Npb25zIiwic2VsZWN0ZWRTZXNzaW9uSWQiXSxyKTtyZXR1cm4obmV3IHcpLnNldEluKFsid29ya3NwYWNlcyIsdF0saSkuc2V0KCJzZWxlY3RlZFdvcmtzcGFjZSIsdCl9ZnVuY3Rpb24gYShlKXt2YXIgdCxuPWgubWFrZVNlc3Npb25TdGF0ZShlKTtyZXR1cm4gbmV3IEQoe2RvY3M6eS5NYXAoKHQ9e30sdFtuLnNlbGVjdGVkU2Vzc2lvbklkXT1uZXcgZC5Eb2NzU2Vzc2lvbix0KSksc2Vzc2lvbnM6bixzaGFyaW5nOm5ldyBtLlNoYXJpbmdTdGF0ZSxoaXN0b3J5OnkuT3JkZXJlZE1hcCgpfSl9ZnVuY3Rpb24gcyhlKXt2YXIgbj1lWyJlZGl0b3IudGhlbWUiXTtyZXR1cm4iZGFyayIhPT1uJiYibGlnaHQiIT09biYmKGVbImVkaXRvci50aGVtZSJdPSJkYXJrIikscCh7fSx0LmRlZmF1bHRTZXR0aW5ncyxlKX1mdW5jdGlvbiB1KGUpe3RyeXtyZXR1cm4gcyhKU09OLnBhcnNlKGUpKX1jYXRjaChlKXtyZXR1cm4gdC5kZWZhdWx0U2V0dGluZ3N9fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHUoZSksbnVsbCwyKX12YXIgbD1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLHA9ZnVuY3Rpb24oKXtyZXR1cm4gcD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKXt0PWFyZ3VtZW50c1tuXTtmb3IodmFyIGkgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSl9cmV0dXJuIGV9LHAuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGY9big0ODgpLGQ9bigxMzApLGg9big4NSksbT1uKDI0OCksZz1uKDQ5OSkseT1uKDE0KSx2PW4oMjQ5KSxiPW4oNTAwKSx4PW4oOCksQz1uKDI1MCksRT1uKDI1MSk7dC5nZXRTZWxlY3RlZFdvcmtzcGFjZUlkPXIsdC5nZXRTZWxlY3RlZFdvcmtzcGFjZT1pO3ZhciBEPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBsKHQsZSksdH0oeS5SZWNvcmQoe2RvY3M6eS5NYXAoe30pLHNlc3Npb25zOmgubWFrZVNlc3Npb25TdGF0ZSgiIiksc2hhcmluZzpuZXcgbS5TaGFyaW5nU3RhdGUsaGlzdG9yeTp5Lk9yZGVyZWRNYXAoKX0pKTt0LldvcmtzcGFjZT1ELHQuZGVmYXVsdFNldHRpbmdzPXsiZWRpdG9yLmN1cnNvclNoYXBlIjoibGluZSIsImVkaXRvci5mb250RmFtaWx5IjoiJ1NvdXJjZSBDb2RlIFBybycsICdDb25zb2xhcycsICdJbmNvbnNvbGF0YScsICdEcm9pZCBTYW5zIE1vbm8nLCAnTW9uYWNvJywgbW9ub3NwYWNlIiwiZWRpdG9yLmZvbnRTaXplIjoxNCwiZWRpdG9yLnJldXNlSGVhZGVycyI6ITAsImVkaXRvci50aGVtZSI6ImRhcmsiLCJnZW5lcmFsLmJldGFVcGRhdGVzIjohMSwicHJldHRpZXIucHJpbnRXaWR0aCI6ODAsInByZXR0aWVyLnRhYldpZHRoIjoyLCJwcmV0dGllci51c2VUYWJzIjohMSwicmVxdWVzdC5jcmVkZW50aWFscyI6Im9taXQiLCJzY2hlbWEuZGlzYWJsZUNvbW1lbnRzIjohMCwic2NoZW1hLnBvbGxpbmcuZW5hYmxlIjohMCwic2NoZW1hLnBvbGxpbmcuZW5kcG9pbnRGaWx0ZXIiOiIqbG9jYWxob3N0KiIsInNjaGVtYS5wb2xsaW5nLmludGVydmFsIjoyZTMsInRyYWNpbmcuaGlkZVRyYWNpbmdSZXNwb25zZSI6ITB9O3ZhciB3PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBsKHQsZSksdH0oeS5SZWNvcmQoe3dvcmtzcGFjZXM6eS5NYXAoeyIiOmEoIiIpfSksc2VsZWN0ZWRXb3Jrc3BhY2U6IiIsc2V0dGluZ3NTdHJpbmc6SlNPTi5zdHJpbmdpZnkodC5kZWZhdWx0U2V0dGluZ3MsbnVsbCwyKSxzdGF0ZUluamVjdGVkOiExLGFwcEhpc3Rvcnk6bmV3IEUuQXBwSGlzdG9yeSxnZW5lcmFsOm5ldyB2LkdlbmVyYWxTdGF0ZX0pKTt0LlJvb3RTdGF0ZT13O3ZhciBTPWYuY29tYmluZVJlZHVjZXJzKHtkb2NzOmQuZGVmYXVsdCxzZXNzaW9uczpoLmRlZmF1bHQsc2hhcmluZzptLmRlZmF1bHQsaGlzdG9yeTpnLmRlZmF1bHQsZ2VuZXJhbDp2LmRlZmF1bHQsYXBwSGlzdG9yeTpFLmRlZmF1bHR9KTt0LnJvb3RSZWR1Y2VyPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09ZSYmKGU9bmV3IHcpLCJTRUxFQ1RfV09SS1NQQUNFIj09PXQudHlwZSlyZXR1cm4gZS5zZXQoInNlbGVjdGVkV29ya3NwYWNlIix0LnBheWxvYWQud29ya3NwYWNlKTtpZigiU0VUX1NFVFRJTkdTX1NUUklORyI9PT10LnR5cGUpcmV0dXJuIGUuc2V0KCJzZXR0aW5nc1N0cmluZyIsdC5wYXlsb2FkLnNldHRpbmdzU3RyaW5nKTtpZigiSU5JVF9TVEFURSI9PT10LnR5cGUmJiFlLnN0YXRlSW5qZWN0ZWQpe3ZhciBuPXQucGF5bG9hZCxpPW4ud29ya3NwYWNlSWQscz1uLmVuZHBvaW50O2lmKCFlLndvcmtzcGFjZXMuZ2V0KGkpKXtyZXR1cm4gZS5zZXRJbihbIndvcmtzcGFjZXMiLGldLGEocykpLnNldCgic2VsZWN0ZWRXb3Jrc3BhY2UiLGkpfXJldHVybiBlLnNldCgic2VsZWN0ZWRXb3Jrc3BhY2UiLGkpfWlmKCJJTkpFQ1RfU1RBVEUiPT09dC50eXBlKXJldHVybiBDLmRlc2VyaWFsaXplUGVyc2lzdGVkU3RhdGUodC5wYXlsb2FkLnN0YXRlKS5zZXQoInN0YXRlSW5qZWN0ZWQiLCEwKTtpZigiSU5KRUNUX1RBQlMiPT09dC50eXBlKXJldHVybiBvKHQucGF5bG9hZC50YWJzKTtpZigiU0VMRUNUX0FQUF9ISVNUT1JZX0lURU0iPT09dC50eXBlKXJldHVybiBlLnNldCgiYXBwSGlzdG9yeSIsRS5kZWZhdWx0KGUuYXBwSGlzdG9yeSx0KSk7aWYoe09QRU5fSElTVE9SWTohMCxDTE9TRV9ISVNUT1JZOiEwLFNFVF9FTkRQT0lOVF9ESVNBQkxFRDohMCxTRVRfQ09ORklHX1NUUklORzohMH1bdC50eXBlXSlyZXR1cm4gZS5zZXQoImdlbmVyYWwiLHYuZGVmYXVsdChlLmdlbmVyYWwsdCkpO3ZhciB1PXQucGF5bG9hZCYmdC5wYXlsb2FkLndvcmtzcGFjZUlkP3QucGF5bG9hZC53b3Jrc3BhY2VJZDpyKGUpLGM9WyJ3b3Jrc3BhY2VzIix1XTtyZXR1cm4gZS5zZXRJbihjLFMoZS5nZXRJbihjKSx0KSl9LHQubWFrZVdvcmtzcGFjZT1hLHQuZGVmYXVsdD10LnJvb3RSZWR1Y2VyLHQuZ2V0U2Vzc2lvbkNvdW50cz1iLmltbXV0YWJsZU1lbW9pemUoZnVuY3Rpb24oZSl7cmV0dXJuIGUud29ya3NwYWNlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2Vzc2lvbnMuc2Vzc2lvbkNvdW50fSl9KSx0LmdldFNldHRpbmdzU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNldHRpbmdzU3RyaW5nfSx0LmdldFNldHRpbmdzPXguY3JlYXRlU2VsZWN0b3IoW3QuZ2V0U2V0dGluZ3NTdHJpbmddLHUpLHQubm9ybWFsaXplU2V0dGluZ3NTdHJpbmc9Yyx0LmdldFRoZW1lPWZ1bmN0aW9uKGUsbil7cmV0dXJuKG58fHQuZ2V0U2V0dGluZ3MoZSkpWyJlZGl0b3IudGhlbWUiXXx8ImRhcmsifX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDMyMSkoKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybigwLHUudmlzaXQpKGUse2xlYXZlOmN9KX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGU/ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5qb2luKHR8fCIiKToiIn1mdW5jdGlvbiBvKGUpe3JldHVybiBlJiYwIT09ZS5sZW5ndGg/cygie1xuIitpKGUsIlxuIikpKyJcbn0iOiJ7fSJ9ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIHQ/ZSt0KyhufHwiIik6IiJ9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5yZXBsYWNlKC9cbi9nLCJcbiAgIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucHJpbnQ9cjt2YXIgdT1uKDU3KSxjPXtOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxWYXJpYWJsZTpmdW5jdGlvbihlKXtyZXR1cm4iJCIrZS5uYW1lfSxEb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gaShlLmRlZmluaXRpb25zLCJcblxuIikrIlxuIn0sT3BlcmF0aW9uRGVmaW5pdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm9wZXJhdGlvbixuPWUubmFtZSxyPWEoIigiLGkoZS52YXJpYWJsZURlZmluaXRpb25zLCIsICIpLCIpIiksbz1pKGUuZGlyZWN0aXZlcywiICIpLHM9ZS5zZWxlY3Rpb25TZXQ7cmV0dXJuIG58fG98fHJ8fCJxdWVyeSIhPT10P2koW3QsaShbbixyXSksbyxzXSwiICIpOnN9LFZhcmlhYmxlRGVmaW5pdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS52YXJpYWJsZSsiOiAiK2UudHlwZSthKCIgPSAiLGUuZGVmYXVsdFZhbHVlKX0sU2VsZWN0aW9uU2V0OmZ1bmN0aW9uKGUpe3JldHVybiBvKGUuc2VsZWN0aW9ucyl9LEZpZWxkOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYWxpYXMsbj1lLm5hbWUscj1lLmFyZ3VtZW50cyxvPWUuZGlyZWN0aXZlcyxzPWUuc2VsZWN0aW9uU2V0O3JldHVybiBpKFthKCIiLHQsIjogIikrbithKCIoIixpKHIsIiwgIiksIikiKSxpKG8sIiAiKSxzXSwiICIpfSxBcmd1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lKyI6ICIrZS52YWx1ZX0sRnJhZ21lbnRTcHJlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIi4uLiIrZS5uYW1lK2EoIiAiLGkoZS5kaXJlY3RpdmVzLCIgIikpfSxJbmxpbmVGcmFnbWVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVDb25kaXRpb24sbj1lLmRpcmVjdGl2ZXMscj1lLnNlbGVjdGlvblNldDtyZXR1cm4gaShbIi4uLiIsYSgib24gIix0KSxpKG4sIiAiKSxyXSwiICIpfSxGcmFnbWVudERlZmluaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS50eXBlQ29uZGl0aW9uLHI9ZS5kaXJlY3RpdmVzLG89ZS5zZWxlY3Rpb25TZXQ7cmV0dXJuImZyYWdtZW50ICIrdCsiIG9uICIrbisiICIrYSgiIixpKHIsIiAiKSwiICIpK299LEludFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxGbG9hdFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxTdHJpbmdWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0sQm9vbGVhblZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSxOdWxsVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LEVudW1WYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sTGlzdFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiJbIitpKGUudmFsdWVzLCIsICIpKyJdIn0sT2JqZWN0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuInsiK2koZS5maWVsZHMsIiwgIikrIn0ifSxPYmplY3RGaWVsZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lKyI6ICIrZS52YWx1ZX0sRGlyZWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVybiJAIitlLm5hbWUrYSgiKCIsaShlLmFyZ3VtZW50cywiLCAiKSwiKSIpfSxOYW1lZFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0sTGlzdFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIlsiK2UudHlwZSsiXSJ9LE5vbk51bGxUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGUrIiEifSxTY2hlbWFEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGlyZWN0aXZlcyxuPWUub3BlcmF0aW9uVHlwZXM7cmV0dXJuIGkoWyJzY2hlbWEiLGkodCwiICIpLG8obildLCIgIil9LE9wZXJhdGlvblR5cGVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLm9wZXJhdGlvbisiOiAiK2UudHlwZX0sU2NhbGFyVHlwZURlZmluaXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGkoWyJzY2FsYXIiLGUubmFtZSxpKGUuZGlyZWN0aXZlcywiICIpXSwiICIpfSxPYmplY3RUeXBlRGVmaW5pdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmludGVyZmFjZXMscj1lLmRpcmVjdGl2ZXMscz1lLmZpZWxkcztyZXR1cm4gaShbInR5cGUiLHQsYSgiaW1wbGVtZW50cyAiLGkobiwiLCAiKSksaShyLCIgIiksbyhzKV0sIiAiKX0sRmllbGREZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuYXJndW1lbnRzLHI9ZS50eXBlLG89ZS5kaXJlY3RpdmVzO3JldHVybiB0K2EoIigiLGkobiwiLCAiKSwiKSIpKyI6ICIrcithKCIgIixpKG8sIiAiKSl9LElucHV0VmFsdWVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUudHlwZSxyPWUuZGVmYXVsdFZhbHVlLG89ZS5kaXJlY3RpdmVzO3JldHVybiBpKFt0KyI6ICIrbixhKCI9ICIsciksaShvLCIgIildLCIgIil9LEludGVyZmFjZVR5cGVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxyPWUuZmllbGRzO3JldHVybiBpKFsiaW50ZXJmYWNlIix0LGkobiwiICIpLG8ocildLCIgIil9LFVuaW9uVHlwZURlZmluaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLHI9ZS50eXBlcztyZXR1cm4gaShbInVuaW9uIix0LGkobiwiICIpLCI9ICIraShyLCIgfCAiKV0sIiAiKX0sRW51bVR5cGVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxyPWUudmFsdWVzO3JldHVybiBpKFsiZW51bSIsdCxpKG4sIiAiKSxvKHIpXSwiICIpfSxFbnVtVmFsdWVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBpKFtlLm5hbWUsaShlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmRpcmVjdGl2ZXMscj1lLmZpZWxkcztyZXR1cm4gaShbImlucHV0Iix0LGkobiwiICIpLG8ocildLCIgIil9LFR5cGVFeHRlbnNpb25EZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJleHRlbmQgIitlLmRlZmluaXRpb259LERpcmVjdGl2ZURlZmluaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5hcmd1bWVudHMscj1lLmxvY2F0aW9ucztyZXR1cm4iZGlyZWN0aXZlIEAiK3QrYSgiKCIsaShuLCIsICIpLCIpIikrIiBvbiAiK2kociwiIHwgIil9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe2lmKCFlKXt2YXIgdTtpZih2b2lkIDA9PT10KXU9bmV3IEVycm9yKCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vsc2V7dmFyIGM9W24scixpLG8sYSxzXSxsPTA7dT1uZXcgRXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGNbbCsrXX0pKSx1Lm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRocm93IHUuZnJhbWVzVG9Qb3A9MSx1fX07ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNjQpLGk9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixvPXIuYXx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtpZighdChlKSl0aHJvdyBwKCJlcnJvciIsInVuY2F1Z2h0IGF0IGNoZWNrIixuKSxuZXcgRXJyb3Iobil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBBLm5vdFVuZGVmKGUpJiZrLmNhbGwoZSx0KX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49ZS5pbmRleE9mKHQpO24+PTAmJmUuc3BsaWNlKG4sMSl9ZnVuY3Rpb24gYSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWQoe30sZSksbj1uZXcgUHJvbWlzZShmdW5jdGlvbihlLG4pe3QucmVzb2x2ZT1lLHQucmVqZWN0PW59KTtyZXR1cm4gdC5wcm9taXNlPW4sdH1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlO24rKyl0LnB1c2goYSgpKTtyZXR1cm4gdH1mdW5jdGlvbiB1KGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sbj12b2lkIDAscj1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gcih0KX0sZSl9KTtyZXR1cm4gcltiXT1mdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQobil9LHJ9ZnVuY3Rpb24gYygpe3ZhciBlLHQ9ITAsbj12b2lkIDAscj12b2lkIDA7cmV0dXJuIGU9e30sZVtnXT0hMCxlLmlzUnVubmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlLnJlc3VsdD1mdW5jdGlvbigpe3JldHVybiBufSxlLmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGUuc2V0UnVubmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdD1lfSxlLnNldFJlc3VsdD1mdW5jdGlvbihlKXtyZXR1cm4gbj1lfSxlLnNldEVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiByPWV9LGV9ZnVuY3Rpb24gbChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06RixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIixyPWFyZ3VtZW50c1szXSxpPXtuYW1lOm4sbmV4dDplLHRocm93OnQscmV0dXJuOk59O3JldHVybiByJiYoaVt5XT0hMCksInVuZGVmaW5lZCIhPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiI7InVuZGVmaW5lZCI9PT10eXBlb2Ygd2luZG93P2NvbnNvbGUubG9nKCJyZWR1eC1zYWdhICIrZSsiOiAiK3QrIlxuIisobiYmbi5zdGFja3x8bikpOmNvbnNvbGVbZV0odCxuKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fW4uZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZCh0LCJyIixmdW5jdGlvbigpe3JldHVybiBEfSksbi5kKHQsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLHQuaD1yLG4uZCh0LCJxIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSx0Lnc9byxuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLHQubD1hLHQuZz1zLHQubT11LHQuaj1jLG4uZCh0LCJ5IixmdW5jdGlvbigpe3JldHVybiBPfSksdC50PWwsdC5zPXAsdC5uPWYsbi5kKHQsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQodCwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKHQsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gan0pO3ZhciBkPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGg9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG09ZnVuY3Rpb24oZSl7cmV0dXJuIkBAcmVkdXgtc2FnYS8iK2V9LGc9bSgiVEFTSyIpLHk9bSgiSEVMUEVSIiksdj1tKCJNQVRDSCIpLGI9bSgiQ0FOQ0VMX1BST01JU0UiKSx4PW0oIlNBR0FfQUNUSU9OIiksQz1tKCJTRUxGX0NBTkNFTExBVElPTiIpLEU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fSxEPUUoITApLHc9ZnVuY3Rpb24oKXt9LFM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGs9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxBPXt1bmRlZjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWV9LG5vdFVuZGVmOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmdm9pZCAwIT09ZX0sZnVuYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGV9LG51bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBlfSxzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZX0sYXJyYXk6QXJyYXkuaXNBcnJheSxvYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiFBLmFycmF5KGUpJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOmgoZSkpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZBLmZ1bmMoZS50aGVuKX0saXRlcmF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJkEuZnVuYyhlLm5leHQpJiZBLmZ1bmMoZS50aHJvdyl9LGl0ZXJhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZBLmZ1bmMoU3ltYm9sKT9BLmZ1bmMoZVtTeW1ib2wuaXRlcmF0b3JdKTpBLmFycmF5KGUpfSx0YXNrOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlW2ddfSxvYnNlcnZhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZBLmZ1bmMoZS5zdWJzY3JpYmUpfSxidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJkEuZnVuYyhlLmlzRW1wdHkpJiZBLmZ1bmMoZS50YWtlKSYmQS5mdW5jKGUucHV0KX0scGF0dGVybjpmdW5jdGlvbihlKXtyZXR1cm4gZSYmKEEuc3RyaW5nKGUpfHwic3ltYm9sIj09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOmgoZSkpfHxBLmZ1bmMoZSl8fEEuYXJyYXkoZSkpfSxjaGFubmVsOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZBLmZ1bmMoZS50YWtlKSYmQS5mdW5jKGUuY2xvc2UpfSxoZWxwZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmVbeV19LHN0cmluZ2FibGVGdW5jOmZ1bmN0aW9uKGUpe3JldHVybiBBLmZ1bmMoZSkmJmkoZSwidG9TdHJpbmciKX19LF89e2Fzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWkodCxuKSYmKGVbbl09dFtuXSl9fSxUPXtmcm9tOmZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5KGUubGVuZ3RoKTtmb3IodmFyIG4gaW4gZSlpKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0fX0sTz1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiBmdW5jdGlvbigpe3JldHVybisrZX19KCksRj1mdW5jdGlvbihlKXt0aHJvdyBlfSxOPWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fSxJPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrIiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mICIrdCsiLCBwbGVhc2UgdXBkYXRlIHlvdXIgY29kZSJ9LEw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFcnJvcigiXG4gIHJlZHV4LXNhZ2E6IEVycm9yIGNoZWNraW5nIGhvb2tzIGRldGVjdGVkIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWdcbiAgaW4gcmVkdXgtc2FnYSBjb2RlIGFuZCBub3QgeW91cnMuIFRoYW5rcyBmb3IgcmVwb3J0aW5nIHRoaXMgaW4gdGhlIHByb2plY3QncyBnaXRodWIgcmVwby5cbiAgRXJyb3I6ICIrZSsiXG4iKX0sUD1mdW5jdGlvbihlLHQpe3JldHVybihlP2UrIi4iOiIiKSsic2V0Q29udGV4dChwcm9wcyk6IGFyZ3VtZW50ICIrdCsiIGlzIG5vdCBhIHBsYWluIG9iamVjdCJ9LE09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHgse3ZhbHVlOiEwfSkpfX0saj1mdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobiksaT0wO2k8bjtpKyspcltpXT1hcmd1bWVudHNbaV07dmFyIG89W10sYT10LmFwcGx5KHZvaWQgMCxyKTtyZXR1cm57bmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gby5wdXNoKGUpLGEubmV4dChlKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgbj1lKHQpLmFwcGx5KHZvaWQgMCxyKTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm5leHQoZSl9KSxufSxyZXR1cm46ZnVuY3Rpb24oZSl7cmV0dXJuIGEucmV0dXJuKGUpfSx0aHJvdzpmdW5jdGlvbihlKXtyZXR1cm4gYS50aHJvdyhlKX19fX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNDA5KSxpPW4oMTI0KSxvPW4oNDI0KSxhPW4oNDQ4KSxzPW4oMjQzKSx1PW4oNDg0KTtuLmQodCwiY29tYmluZUFjdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJjcmVhdGVBY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pLG4uZCh0LCJjcmVhdGVBY3Rpb25zIixmdW5jdGlvbigpe3JldHVybiBvLmF9KSxuLmQodCwiY3JlYXRlQ3VycmllZEFjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSksbi5kKHQsImhhbmRsZUFjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSksbi5kKHQsImhhbmRsZUFjdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylmb3IodmFyIGk9MCxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxyLmxlbmd0aDtpKyspdC5pbmRleE9mKHJbaV0pPDAmJihuW3JbaV1dPWVbcltpXV0pO3JldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGl0bGUsbj1lLmNoaWxkcmVuLHI9aShlLFsidGl0bGUiLCJjaGlsZHJlbiJdKTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KCJzdmciLHIsdD9vLmNyZWF0ZUVsZW1lbnQoInRpdGxlIixudWxsLHQpOnZvaWQgMCxuKX07dC5BZGRJY29uPWZ1bmN0aW9uKGUpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYSxyKHt9LGUse3ZpZXdCb3g6IjAgMCA1MCA1MCJ9KSxvLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMjUiLHkxOiIxMy4xIix4MjoiMjUiLHkyOiIzNi45In0pLG8uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIzNi45Iix5MToiMjUiLHgyOiIxMy4xIix5MjoiMjUifSkpfSx0LkFkZEZ1bGxJY29uPWZ1bmN0aW9uKGUpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYSxyKHt4OiIwcHgiLHk6IjBweCIsdmlld0JveDoiLTEgMyA1MCA1MCJ9LGUpLG8uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIyNCIseTE6IjcuMjciLHgyOiIyNCIseTI6IjQ4LjczIn0pLG8uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI0NC43MyIseTE6IjI4Iix4MjoiMy4yNyIseTI6IjI4In0pKX0sdC5GdWxsQXJyb3dSaWdodEljb249ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChhLHIoe30sZSx7dmlld0JveDoiMCAwIDE0IDExIn0pLG8uY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik0xMy4zMiw0Ljk3TDguOTksMC42NGMtMC4yOS0wLjI5LTAuNzctMC4yOS0xLjA2LDBzLTAuMjksMC43NywwLDEuMDZsMi45NywyLjk3SDEuMjEgQzAuOCw0LjY3LDAuNDYsNSwwLjQ2LDUuNDJTMC44LDYuMTcsMS4yMSw2LjE3aDkuODVMNy45Myw5LjNjLTAuMjksMC4yOS0wLjI5LDAuNzcsMCwxLjA2YzAuMTUsMC4xNSwwLjM0LDAuMjIsMC41MywwLjIyIHMwLjM4LTAuMDcsMC41My0wLjIybDQuMzMtNC4zM0MxMy42MSw1Ljc0LDEzLjYxLDUuMjYsMTMuMzIsNC45N3oifSkpfSx0LlNldHRpbmdzSWNvbj1mdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEscih7fSxlLHt2aWV3Qm94OiIwIDAgNTAgNTAifSksby5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZDoiTTQ4LDIxaC01LjcxYy0wLjQtMS41OC0wLjkxLTMuMzMtMS41Ni00LjY2bDQuMDYtNC4wNmMwLjE5LTAuMTksMC4yOS0wLjQ0LDAuMjktMC43MSBjMC0wLjI3LTAuMTEtMC41Mi0wLjI5LTAuNzFMMzkuMTQsNS4yYy0wLjM5LTAuMzktMS4wMi0wLjM5LTEuNDEsMGwtNC4wNiw0LjA2QzMyLjMzLDguNjIsMzAuNTgsOC4xMSwyOSw3LjcxVjJjMC0wLjU1LTAuNDUtMS0xLTEgaC02Yy0wLjU1LDAtMSwwLjQ1LTEsMXY1LjcxYy0xLjU4LDAuNC0zLjMzLDAuOTEtNC42NiwxLjU1TDEyLjI3LDUuMmMtMC4zOS0wLjM5LTEuMDItMC4zOS0xLjQxLDBMNS4yLDEwLjg2IGMtMC4zOSwwLjM5LTAuMzksMS4wMiwwLDEuNDFsNC4wNyw0LjA3QzguNjIsMTcuNjYsOC4xMSwxOS40Miw3LjcxLDIxSDJjLTAuNTUsMC0xLDAuNDUtMSwxdjZjMCwwLjU1LDAuNDUsMSwxLDFoNS43MSBjMC40LDEuNTgsMC45MSwzLjM0LDEuNTYsNC42Nkw1LjIsMzcuNzNjLTAuMTksMC4xOS0wLjI5LDAuNDQtMC4yOSwwLjcxczAuMTEsMC41MiwwLjI5LDAuNzFsNS42Niw1LjY2YzAuMzgsMC4zOCwxLjA0LDAuMzgsMS40MSwwIGw0LjA3LTQuMDZjMS4zMiwwLjY1LDMuMDgsMS4xNSw0LjY2LDEuNTZWNDhjMCwwLjU1LDAuNDUsMSwxLDFoNmMwLjU1LDAsMS0wLjQ1LDEtMXYtNS43MWMxLjU4LTAuNCwzLjM0LTAuOTEsNC42Ni0xLjU2bDQuMDcsNC4wNiBjMC4zOSwwLjM5LDEuMDIsMC4zOSwxLjQxLDBsNS42Ni01LjY2YzAuMzktMC4zOSwwLjM5LTEuMDIsMC0xLjQxbC00LjA2LTQuMDdjMC42NS0xLjMzLDEuMTYtMy4wOCwxLjU2LTQuNjZINDhjMC41NSwwLDEtMC40NSwxLTEgdi02QzQ5LDIxLjQ1LDQ4LjU1LDIxLDQ4LDIxIE0yNSwzM2MtNC40MSwwLTgtMy41OS04LThzMy41OS04LDgtOHM4LDMuNTksOCw4UzI5LjQxLDMzLDI1LDMzIn0pKX0sdC5Dcm9zc0ljb249ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChhLHIoe30sZSx7dmlld0JveDoiMCAwIDUwIDUwIn0pLG8uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI0Iix5MToiNCIseDI6IjQ2Iix5MjoiNDYifSksby5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjQ2Iix5MToiNCIseDI6IjQiLHkyOiI0NiJ9KSl9LHQuQXJyb3dSaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEscih7d2lkdGg6MTQsaGVpZ2h0OjExfSxlLHt2aWV3Qm94OiItMSAtMSAxNCAxMSJ9KSxvLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtkOiJNNSw4Ljc5ODI1NTc5IEw1LC0xLjc5NDAyMDg5IixpZDoiU3Ryb2tlLTMiLHN0cm9rZToiI0ZGRkZGRiIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsZmlsbDoibm9uZSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoNS43NTAwMDAsIDMuNTAyMTE3KSByb3RhdGUoLTkwLjAwMDAwMCkgdHJhbnNsYXRlKC01Ljc1MDAwMCwgLTMuNTAyMTE3KSAifSksby5jcmVhdGVFbGVtZW50KCJwb2x5bGluZSIse2lkOiJTdHJva2UtNSIsc3Ryb2tlOiIjRkZGRkZGIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixmaWxsOiJub25lIix0cmFuc2Zvcm06InRyYW5zbGF0ZSg5Ljg2ODI5NSwgNC4zMzM5OTIpIHJvdGF0ZSgtOTAuMDAwMDAwKSB0cmFuc2xhdGUoLTkuODY4Mjk1LCAtNC4zMzM5OTIpICIscG9pbnRzOiIxNC4yMDIyODY4IDIuMTY2OTk2MDUgOS44NjgyOTQ3NSA2LjUwMDk4ODE0IDUuNTM0MzAyNjUgMi4xNjY5OTYwNSJ9KSl9LHQuSGlzdG9yeT1mdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEscih7fSxlLHt2aWV3Qm94OiIwIDAgNTAgNTAiLGZpbGw6Im5vbmUifSksby5jcmVhdGVFbGVtZW50KCJwb2x5bGluZSIse3BvaW50czoiNC4zMywxOS42NCA5LjcsMjcuNjkgMTUuOTUsMjAuNTQgIn0pLG8uY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik05LjcxLDI3LjY5QzguMzYsMTYuODEsMTYuNjgsOC4zOCwyNi4wNiw4LjAzYzkuMzctMC4zNSwxNy4yNSw2Ljk3LDE3LjYsMTYuMzUgYzAuMzUsOS4zOC02Ljk3LDE3LjI2LTE2LjM1LDE3LjYifSksby5jcmVhdGVFbGVtZW50KCJwb2x5bGluZSIse3BvaW50czoiMjYuNjgsMTYuMDYgMjYuNjgsMjUuODkgMzUuNjIsMjUuODkgIn0pKX0sdC5TdGFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaGVpZ2h0LG49ZS53aWR0aCxzPWUuc3Ryb2tlLHU9ZS5maWxsLGM9ZS5zdHJva2VXaWR0aCxsPWUub25DbGljayxwPWkoZSxbImhlaWdodCIsIndpZHRoIiwic3Ryb2tlIiwiZmlsbCIsInN0cm9rZVdpZHRoIiwib25DbGljayJdKTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEscih7d2lkdGg6bixoZWlnaHQ6dCxmaWxsOnV8fCJub25lIixzdHJva2U6c3x8Im5vbmUiLHN0cm9rZVdpZHRoOmMsdmlld0JveDoiMTE4IDEyIDE2IDE2IixvbkNsaWNrOmx9LHApLG8uY3JlYXRlRWxlbWVudCgicG9seWdvbiIse3BvaW50czoiMTI2IDI0IDEyMS4yOTc3MTggMjYuNDcyMTM2IDEyMi4xOTU3NzQgMjEuMjM2MDY4IDExOC4zOTE1NDggMTcuNTI3ODY0IDEyMy42NDg4NTkgMTYuNzYzOTMyIDEyNiAxMiAxMjguMzUxMTQxIDE2Ljc2MzkzMiAxMzMuNjA4NDUyIDE3LjUyNzg2NCAxMjkuODA0MjI2IDIxLjIzNjA2OCAxMzAuNzAyMjgyIDI2LjQ3MjEzNiJ9KSl9LHQuU2VhcmNoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaGVpZ2h0LG49ZS53aWR0aCxzPWUuc3Ryb2tlV2lkdGgsdT1lLmNvbG9yLGM9aShlLFsiaGVpZ2h0Iiwid2lkdGgiLCJzdHJva2VXaWR0aCIsImNvbG9yIl0pO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYSxyKHt3aWR0aDpuLGhlaWdodDp0LHZpZXdCb3g6IjAgMCA1MCA1MCIsc3Ryb2tlV2lkdGg6cyxzdHJva2U6dSxmaWxsOiJub25lIn0sYyksby5jcmVhdGVFbGVtZW50KCJjaXJjbGUiLHtjeDoiMTcuODIiLGN5OiIxOC4xMSIscjoiMTYuMjEifSksby5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjI5LjI4Iix5MToiMjkuNTciLHgyOiI0OC4yMSIseTI6IjQ4LjUifSkpfSx0LlNoYXJlSWNvbj1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLG49ZS5oZWlnaHQscz1lLmNvbG9yLHU9aShlLFsid2lkdGgiLCJoZWlnaHQiLCJjb2xvciJdKTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEscih7d2lkdGg6dCxoZWlnaHQ6bix2aWV3Qm94OiIwIDAgNTAgNTAiLHN0cm9rZTpzfSx1KSxvLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtkOiJNMTYuNDcgMTUuNTZjLS4zNiAwLS42NS4zLS42NS42N3YyMC4yMmMwIC4zNy4yOS42Ny42NS42N2g5LjA2Yy4zNiAwIC42NS0uMy42NS0uNjdzLS4yOS0uNjctLjY1LS42N2gtOC40MVYxNi45MWgxLjI5di42N2MwIC4zNy4yOS42Ny42NS42N2gxMC4zNWMuMzYgMCAuNjUtLjMuNjUtLjY3di0uNjdoMS4yOXY2LjA3YzAgLjM3LjI5LjY3LjY1LjY3LjM2IDAgLjY1LS4zLjY1LS42N3YtNi43NGEuNjYuNjYgMCAwIDAtLjY1LS42N2gtMS45NHYtMS4zNWgzLjg4djguNzZjMCAuMzcuMjkuNjcuNjUuNjcuMzYgMCAuNjUtLjMuNjUtLjY3di05LjQ0YS42Ni42NiAwIDAgMC0uNjUtLjY3aC00LjUzdi0uNjdhLjY2LjY2IDAgMCAwLS42NS0uNjdIMjcuNGMtLjMtMS41NC0xLjYxLTIuNy0zLjE3LTIuNy0xLjU2IDAtMi44NyAxLjE2LTMuMTcgMi43aC0yLjAxYy0uMzYgMC0uNjUuMy0uNjUuNjd2LjY3aC00LjUzYy0uMzYgMC0uNjUuMy0uNjUuNjdWNDAuNWMwIC4zNy4yOS42Ny42NS42N2gxMS42NWMuMzYgMCAuNjUtLjMuNjUtLjY3cy0uMjktLjY3LS42NS0uNjdoLTExVjE0LjIyaDMuODh2MS4zNWgtMS45M3ptMy4yNC0yLjY5aDEuOTRjLjM2IDAgLjY1LS4zLjY1LS42NyAwLTEuMTEuODctMi4wMiAxLjk0LTIuMDIgMS4wNyAwIDEuOTQuOTEgMS45NCAyLjAyIDAgLjM3LjI5LjY3LjY1LjY3aDEuOTR2NC4wNGgtOS4wNnYtNC4wNHoifSksby5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZDoiTTI4LjcxIDIwLjk2aC05LjA2Yy0uMzYgMC0uNjUuMy0uNjUuNjcgMCAuMzcuMjkuNjcuNjUuNjdoOS4wNmMuMzYgMCAuNjUtLjMuNjUtLjY3YS42Ni42NiAwIDAgMC0uNjUtLjY3TTI4LjcxIDIzLjY1aC05LjA2Yy0uMzYgMC0uNjUuMy0uNjUuNjdzLjMuNjguNjYuNjhoOS4wNmMuMzYgMCAuNjUtLjMuNjUtLjY3cy0uMy0uNjgtLjY2LS42OE0yOC43MSAyNi4zNWgtOS4wNmMtLjM2IDAtLjY1LjMtLjY1LjY3cy4yOS42Ny42NS42N2g5LjA2Yy4zNiAwIC42NS0uMy42NS0uNjdzLS4yOS0uNjctLjY1LS42N00yNi4xMyAyOS4wNGgtNi40N2MtLjM2IDAtLjY1LjMtLjY1LjY3IDAgLjM3LjI5LjY3LjY1LjY3aDYuNDdjLjM2IDAgLjY1LS4zLjY1LS42Ny0uMDEtLjM2LS4zLS42Ny0uNjUtLjY3TTM3Ljc3IDMzLjIxaC02LjEzbDEuNDMtMS4zOGMuMjYtLjI1LjI4LS42OC4wMy0uOTVhLjYyLjYyIDAgMCAwLS45MS0uMDRsLTIuNjMgMi41NGMtLjEzLjEzLS4yMS4zLS4yMS40OXYuMDJjMCAuMi4wOS4zOC4yMy41bDIuNiAyLjU2Yy4xMi4xMi4yOC4xOC40NC4xOC4xNyAwIC4zNC0uMDcuNDctLjIxLjI1LS4yNy4yMy0uNy0uMDMtLjk1bC0xLjQzLTEuNDFoNi4xM2MuMzYgMCAuNjUtLjMuNjUtLjY3cy0uMjgtLjY4LS42NC0uNjgifSkpfSx0LlRyaWFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYSxyKHt3aWR0aDo2LGhlaWdodDo3LHZpZXdCb3g6IjQwIDAgNiA3In0sZSksby5jcmVhdGVFbGVtZW50KCJwb2x5Z29uIix7c3Ryb2tlOiJub25lIixmaWxsOiJyZ2JhKDAsIDAsIDAsIC4yKSIsZmlsbFJ1bGU6ImV2ZW5vZGQiLHBvaW50czoiNDAgNyA0MCAwIDQ2IDMuNSJ9KSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCF0KXJldHVybiBlO2lmKHQgaW5zdGFuY2VvZiB1LkdyYXBoUUxMaXN0fHx0IGluc3RhbmNlb2YgdS5HcmFwaFFMTm9uTnVsbClyZXR1cm4gbyhlLHQub2ZUeXBlKTtpZihlW3QubmFtZV0pcmV0dXJuIGVbdC5uYW1lXSE9PXQmJigwLGguZGVmYXVsdCkoMCwnU2NoZW1hIG11c3QgY29udGFpbiB1bmlxdWUgbmFtZWQgdHlwZXMgYnV0IGNvbnRhaW5zIG11bHRpcGxlIHR5cGVzIG5hbWVkICInK3QubmFtZSsnIi4nKSxlO2VbdC5uYW1lXT10O3ZhciBuPWU7aWYodCBpbnN0YW5jZW9mIHUuR3JhcGhRTFVuaW9uVHlwZSYmKG49dC5nZXRUeXBlcygpLnJlZHVjZShvLG4pKSx0IGluc3RhbmNlb2YgdS5HcmFwaFFMT2JqZWN0VHlwZSYmKG49dC5nZXRJbnRlcmZhY2VzKCkucmVkdWNlKG8sbikpLHQgaW5zdGFuY2VvZiB1LkdyYXBoUUxPYmplY3RUeXBlfHx0IGluc3RhbmNlb2YgdS5HcmFwaFFMSW50ZXJmYWNlVHlwZSl7dmFyIHI9dC5nZXRGaWVsZHMoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07aWYodC5hcmdzKXt2YXIgaT10LmFyZ3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGV9KTtuPWkucmVkdWNlKG8sbil9bj1vKG4sdC50eXBlKX0pfWlmKHQgaW5zdGFuY2VvZiB1LkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpe3ZhciBpPXQuZ2V0RmllbGRzKCk7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1pW2VdO249byhuLHQudHlwZSl9KX1yZXR1cm4gbn1mdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj10LmdldEZpZWxkcygpLGk9bi5nZXRGaWVsZHMoKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPXJbb10scz1pW29dO2F8fCgwLGguZGVmYXVsdCkoMCwnIicrbi5uYW1lKyciIGV4cGVjdHMgZmllbGQgIicrbysnIiBidXQgIicrdC5uYW1lKyciIGRvZXMgbm90IHByb3ZpZGUgaXQuJyksKDAsbS5pc1R5cGVTdWJUeXBlT2YpKGUsYS50eXBlLHMudHlwZSl8fCgwLGguZGVmYXVsdCkoMCxuLm5hbWUrIi4iK28rJyBleHBlY3RzIHR5cGUgIicrU3RyaW5nKHMudHlwZSkrJyIgYnV0ICcrdC5uYW1lKyIuIitvKycgcHJvdmlkZXMgdHlwZSAiJytTdHJpbmcoYS50eXBlKSsnIi4nKSxzLmFyZ3MuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lLm5hbWUsaT0oMCxmLmRlZmF1bHQpKGEuYXJncyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09cn0pO2l8fCgwLGguZGVmYXVsdCkoMCxuLm5hbWUrIi4iK28rJyBleHBlY3RzIGFyZ3VtZW50ICInK3IrJyIgYnV0ICcrdC5uYW1lKyIuIitvKyIgZG9lcyBub3QgcHJvdmlkZSBpdC4iKSwoMCxtLmlzRXF1YWxUeXBlKShlLnR5cGUsaS50eXBlKXx8KDAsaC5kZWZhdWx0KSgwLG4ubmFtZSsiLiIrbysiKCIrcisnOikgZXhwZWN0cyB0eXBlICInK1N0cmluZyhlLnR5cGUpKyciIGJ1dCAnK3QubmFtZSsiLiIrbysiKCIrcisnOikgcHJvdmlkZXMgdHlwZSAiJytTdHJpbmcoaS50eXBlKSsnIi4nKX0pLGEuYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUubmFtZTsoMCxmLmRlZmF1bHQpKHMuYXJncyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09cn0pfHxlLnR5cGUgaW5zdGFuY2VvZiB1LkdyYXBoUUxOb25OdWxsJiYoMCxoLmRlZmF1bHQpKDAsdC5uYW1lKyIuIitvKyIoIityKyc6KSBpcyBvZiByZXF1aXJlZCB0eXBlICInK1N0cmluZyhlLnR5cGUpKyciIGJ1dCBpcyBub3QgYWxzbyBwcm92aWRlZCBieSB0aGUgaW50ZXJmYWNlICcrbi5uYW1lKyIuIitvKyIuIil9KX0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdyYXBoUUxTY2hlbWE9dm9pZCAwO3ZhciBzPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1PW4oNiksYz1uKDI3KSxsPW4oMjgpLHA9big0NSksZj1yKHApLGQ9bigxMyksaD1yKGQpLG09big4MSk7dC5HcmFwaFFMU2NoZW1hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10aGlzO2kodGhpcyxlKSwib2JqZWN0IiE9PSgidW5kZWZpbmVkIj09PXR5cGVvZiB0PyJ1bmRlZmluZWQiOnModCkpJiYoMCxoLmRlZmF1bHQpKDAsIk11c3QgcHJvdmlkZSBjb25maWd1cmF0aW9uIG9iamVjdC4iKSx0LnF1ZXJ5IGluc3RhbmNlb2YgdS5HcmFwaFFMT2JqZWN0VHlwZXx8KDAsaC5kZWZhdWx0KSgwLCJTY2hlbWEgcXVlcnkgbXVzdCBiZSBPYmplY3QgVHlwZSBidXQgZ290OiAiK1N0cmluZyh0LnF1ZXJ5KSsiLiIpLHRoaXMuX3F1ZXJ5VHlwZT10LnF1ZXJ5LCF0Lm11dGF0aW9ufHx0Lm11dGF0aW9uIGluc3RhbmNlb2YgdS5HcmFwaFFMT2JqZWN0VHlwZXx8KDAsaC5kZWZhdWx0KSgwLCJTY2hlbWEgbXV0YXRpb24gbXVzdCBiZSBPYmplY3QgVHlwZSBpZiBwcm92aWRlZCBidXQgZ290OiAiK1N0cmluZyh0Lm11dGF0aW9uKSsiLiIpLHRoaXMuX211dGF0aW9uVHlwZT10Lm11dGF0aW9uLCF0LnN1YnNjcmlwdGlvbnx8dC5zdWJzY3JpcHRpb24gaW5zdGFuY2VvZiB1LkdyYXBoUUxPYmplY3RUeXBlfHwoMCxoLmRlZmF1bHQpKDAsIlNjaGVtYSBzdWJzY3JpcHRpb24gbXVzdCBiZSBPYmplY3QgVHlwZSBpZiBwcm92aWRlZCBidXQgZ290OiAiK1N0cmluZyh0LnN1YnNjcmlwdGlvbikrIi4iKSx0aGlzLl9zdWJzY3JpcHRpb25UeXBlPXQuc3Vic2NyaXB0aW9uLHQudHlwZXMmJiFBcnJheS5pc0FycmF5KHQudHlwZXMpJiYoMCxoLmRlZmF1bHQpKDAsIlNjaGVtYSB0eXBlcyBtdXN0IGJlIEFycmF5IGlmIHByb3ZpZGVkIGJ1dCBnb3Q6ICIrU3RyaW5nKHQudHlwZXMpKyIuIiksIXQuZGlyZWN0aXZlc3x8QXJyYXkuaXNBcnJheSh0LmRpcmVjdGl2ZXMpJiZ0LmRpcmVjdGl2ZXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBjLkdyYXBoUUxEaXJlY3RpdmV9KXx8KDAsaC5kZWZhdWx0KSgwLCJTY2hlbWEgZGlyZWN0aXZlcyBtdXN0IGJlIEFycmF5PEdyYXBoUUxEaXJlY3RpdmU+IGlmIHByb3ZpZGVkIGJ1dCBnb3Q6ICIrU3RyaW5nKHQuZGlyZWN0aXZlcykrIi4iKSx0aGlzLl9kaXJlY3RpdmVzPXQuZGlyZWN0aXZlc3x8Yy5zcGVjaWZpZWREaXJlY3RpdmVzLHRoaXMuYXN0Tm9kZT10LmFzdE5vZGV8fG51bGw7dmFyIHI9W3RoaXMuZ2V0UXVlcnlUeXBlKCksdGhpcy5nZXRNdXRhdGlvblR5cGUoKSx0aGlzLmdldFN1YnNjcmlwdGlvblR5cGUoKSxsLl9fU2NoZW1hXSxwPXQudHlwZXM7cCYmKHI9ci5jb25jYXQocCkpLHRoaXMuX3R5cGVNYXA9ci5yZWR1Y2UobyxPYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLl9pbXBsZW1lbnRhdGlvbnM9T2JqZWN0LmNyZWF0ZShudWxsKSxPYmplY3Qua2V5cyh0aGlzLl90eXBlTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uX3R5cGVNYXBbZV07dCBpbnN0YW5jZW9mIHUuR3JhcGhRTE9iamVjdFR5cGUmJnQuZ2V0SW50ZXJmYWNlcygpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5faW1wbGVtZW50YXRpb25zW2UubmFtZV07cj9yLnB1c2godCk6bi5faW1wbGVtZW50YXRpb25zW2UubmFtZV09W3RdfSl9KSxPYmplY3Qua2V5cyh0aGlzLl90eXBlTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uX3R5cGVNYXBbZV07dCBpbnN0YW5jZW9mIHUuR3JhcGhRTE9iamVjdFR5cGUmJnQuZ2V0SW50ZXJmYWNlcygpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGEobix0LGUpfSl9KX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UXVlcnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5VHlwZX0sZS5wcm90b3R5cGUuZ2V0TXV0YXRpb25UeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX211dGF0aW9uVHlwZX0sZS5wcm90b3R5cGUuZ2V0U3Vic2NyaXB0aW9uVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdWJzY3JpcHRpb25UeXBlfSxlLnByb3RvdHlwZS5nZXRUeXBlTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGVNYXB9LGUucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0VHlwZU1hcCgpW2VdfSxlLnByb3RvdHlwZS5nZXRQb3NzaWJsZVR5cGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdS5HcmFwaFFMVW5pb25UeXBlP2UuZ2V0VHlwZXMoKTooZSBpbnN0YW5jZW9mIHUuR3JhcGhRTEludGVyZmFjZVR5cGV8fCgwLGguZGVmYXVsdCkoMCksdGhpcy5faW1wbGVtZW50YXRpb25zW2UubmFtZV0pfSxlLnByb3RvdHlwZS5pc1Bvc3NpYmxlVHlwZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3Bvc3NpYmxlVHlwZU1hcDtpZihufHwodGhpcy5fcG9zc2libGVUeXBlTWFwPW49T2JqZWN0LmNyZWF0ZShudWxsKSksIW5bZS5uYW1lXSl7dmFyIHI9dGhpcy5nZXRQb3NzaWJsZVR5cGVzKGUpO0FycmF5LmlzQXJyYXkocil8fCgwLGguZGVmYXVsdCkoMCwiQ291bGQgbm90IGZpbmQgcG9zc2libGUgaW1wbGVtZW50aW5nIHR5cGVzIGZvciAiK2UubmFtZSsiIGluIHNjaGVtYS4gQ2hlY2sgdGhhdCBzY2hlbWEudHlwZXMgaXMgZGVmaW5lZCBhbmQgaXMgYW4gYXJyYXkgb2YgYWxsIHBvc3NpYmxlIHR5cGVzIGluIHRoZSBzY2hlbWEuIiksbltlLm5hbWVdPXIucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdC5uYW1lXT0hMCxlfSxPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gQm9vbGVhbihuW2UubmFtZV1bdC5uYW1lXSl9LGUucHJvdG90eXBlLmdldERpcmVjdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyZWN0aXZlc30sZS5wcm90b3R5cGUuZ2V0RGlyZWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybigwLGYuZGVmYXVsdCkodGhpcy5nZXREaXJlY3RpdmVzKCksZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWV9KX0sZX0oKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc3BlY2lmaWVkRGlyZWN0aXZlcz10LkdyYXBoUUxEZXByZWNhdGVkRGlyZWN0aXZlPXQuREVGQVVMVF9ERVBSRUNBVElPTl9SRUFTT049dC5HcmFwaFFMU2tpcERpcmVjdGl2ZT10LkdyYXBoUUxJbmNsdWRlRGlyZWN0aXZlPXQuR3JhcGhRTERpcmVjdGl2ZT10LkRpcmVjdGl2ZUxvY2F0aW9uPXZvaWQgMDt2YXIgaT1uKDYpLG89bigzMiksYT1uKDEzKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oYSksdT1uKDExMSksYz10LkRpcmVjdGl2ZUxvY2F0aW9uPXtRVUVSWToiUVVFUlkiLE1VVEFUSU9OOiJNVVRBVElPTiIsU1VCU0NSSVBUSU9OOiJTVUJTQ1JJUFRJT04iLEZJRUxEOiJGSUVMRCIsRlJBR01FTlRfREVGSU5JVElPTjoiRlJBR01FTlRfREVGSU5JVElPTiIsRlJBR01FTlRfU1BSRUFEOiJGUkFHTUVOVF9TUFJFQUQiLElOTElORV9GUkFHTUVOVDoiSU5MSU5FX0ZSQUdNRU5UIixTQ0hFTUE6IlNDSEVNQSIsU0NBTEFSOiJTQ0FMQVIiLE9CSkVDVDoiT0JKRUNUIixGSUVMRF9ERUZJTklUSU9OOiJGSUVMRF9ERUZJTklUSU9OIixBUkdVTUVOVF9ERUZJTklUSU9OOiJBUkdVTUVOVF9ERUZJTklUSU9OIixJTlRFUkZBQ0U6IklOVEVSRkFDRSIsVU5JT046IlVOSU9OIixFTlVNOiJFTlVNIixFTlVNX1ZBTFVFOiJFTlVNX1ZBTFVFIixJTlBVVF9PQkpFQ1Q6IklOUFVUX09CSkVDVCIsSU5QVVRfRklFTERfREVGSU5JVElPTjoiSU5QVVRfRklFTERfREVGSU5JVElPTiJ9LGw9dC5HcmFwaFFMRGlyZWN0aXZlPWZ1bmN0aW9uIGUodCl7cih0aGlzLGUpLHQubmFtZXx8KDAscy5kZWZhdWx0KSgwLCJEaXJlY3RpdmUgbXVzdCBiZSBuYW1lZC4iKSwoMCx1LmFzc2VydFZhbGlkTmFtZSkodC5uYW1lKSxBcnJheS5pc0FycmF5KHQubG9jYXRpb25zKXx8KDAscy5kZWZhdWx0KSgwLCJNdXN0IHByb3ZpZGUgbG9jYXRpb25zIGZvciBkaXJlY3RpdmUuIiksdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRlc2NyaXB0aW9uPXQuZGVzY3JpcHRpb24sdGhpcy5sb2NhdGlvbnM9dC5sb2NhdGlvbnMsdGhpcy5hc3ROb2RlPXQuYXN0Tm9kZTt2YXIgbj10LmFyZ3M7bj8oQXJyYXkuaXNBcnJheShuKSYmKDAscy5kZWZhdWx0KSgwLCJAIit0Lm5hbWUrIiBhcmdzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5cy4iKSx0aGlzLmFyZ3M9T2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpeygwLHUuYXNzZXJ0VmFsaWROYW1lKShlKTt2YXIgcj1uW2VdO3JldHVybigwLGkuaXNJbnB1dFR5cGUpKHIudHlwZSl8fCgwLHMuZGVmYXVsdCkoMCwiQCIrdC5uYW1lKyIoIitlKyI6KSBhcmd1bWVudCB0eXBlIG11c3QgYmUgSW5wdXQgVHlwZSBidXQgZ290OiAiK1N0cmluZyhyLnR5cGUpKyIuIikse25hbWU6ZSxkZXNjcmlwdGlvbjp2b2lkIDA9PT1yLmRlc2NyaXB0aW9uP251bGw6ci5kZXNjcmlwdGlvbix0eXBlOnIudHlwZSxkZWZhdWx0VmFsdWU6ci5kZWZhdWx0VmFsdWUsYXN0Tm9kZTpyLmFzdE5vZGV9fSkpOnRoaXMuYXJncz1bXX0scD10LkdyYXBoUUxJbmNsdWRlRGlyZWN0aXZlPW5ldyBsKHtuYW1lOiJpbmNsdWRlIixkZXNjcmlwdGlvbjoiRGlyZWN0cyB0aGUgZXhlY3V0b3IgdG8gaW5jbHVkZSB0aGlzIGZpZWxkIG9yIGZyYWdtZW50IG9ubHkgd2hlbiB0aGUgYGlmYCBhcmd1bWVudCBpcyB0cnVlLiIsbG9jYXRpb25zOltjLkZJRUxELGMuRlJBR01FTlRfU1BSRUFELGMuSU5MSU5FX0ZSQUdNRU5UXSxhcmdzOntpZjp7dHlwZTpuZXcgaS5HcmFwaFFMTm9uTnVsbChvLkdyYXBoUUxCb29sZWFuKSxkZXNjcmlwdGlvbjoiSW5jbHVkZWQgd2hlbiB0cnVlLiJ9fX0pLGY9dC5HcmFwaFFMU2tpcERpcmVjdGl2ZT1uZXcgbCh7bmFtZToic2tpcCIsZGVzY3JpcHRpb246IkRpcmVjdHMgdGhlIGV4ZWN1dG9yIHRvIHNraXAgdGhpcyBmaWVsZCBvciBmcmFnbWVudCB3aGVuIHRoZSBgaWZgIGFyZ3VtZW50IGlzIHRydWUuIixsb2NhdGlvbnM6W2MuRklFTEQsYy5GUkFHTUVOVF9TUFJFQUQsYy5JTkxJTkVfRlJBR01FTlRdLGFyZ3M6e2lmOnt0eXBlOm5ldyBpLkdyYXBoUUxOb25OdWxsKG8uR3JhcGhRTEJvb2xlYW4pLGRlc2NyaXB0aW9uOiJTa2lwcGVkIHdoZW4gdHJ1ZS4ifX19KSxkPXQuREVGQVVMVF9ERVBSRUNBVElPTl9SRUFTT049Ik5vIGxvbmdlciBzdXBwb3J0ZWQiLGg9dC5HcmFwaFFMRGVwcmVjYXRlZERpcmVjdGl2ZT1uZXcgbCh7bmFtZToiZGVwcmVjYXRlZCIsZGVzY3JpcHRpb246Ik1hcmtzIGFuIGVsZW1lbnQgb2YgYSBHcmFwaFFMIHNjaGVtYSBhcyBubyBsb25nZXIgc3VwcG9ydGVkLiIsbG9jYXRpb25zOltjLkZJRUxEX0RFRklOSVRJT04sYy5FTlVNX1ZBTFVFXSxhcmdzOntyZWFzb246e3R5cGU6by5HcmFwaFFMU3RyaW5nLGRlc2NyaXB0aW9uOiJFeHBsYWlucyB3aHkgdGhpcyBlbGVtZW50IHdhcyBkZXByZWNhdGVkLCB1c3VhbGx5IGFsc28gaW5jbHVkaW5nIGEgc3VnZ2VzdGlvbiBmb3IgaG93IHRvIGFjY2VzcyBzdXBwb3J0ZWQgc2ltaWxhciBkYXRhLiBGb3JtYXR0ZWQgaW4gW01hcmtkb3duXShodHRwczovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi8pLiIsZGVmYXVsdFZhbHVlOmR9fX0pO3Quc3BlY2lmaWVkRGlyZWN0aXZlcz1bcCxmLGhdfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGVOYW1lTWV0YUZpZWxkRGVmPXQuVHlwZU1ldGFGaWVsZERlZj10LlNjaGVtYU1ldGFGaWVsZERlZj10Ll9fVHlwZUtpbmQ9dC5UeXBlS2luZD10Ll9fRW51bVZhbHVlPXQuX19JbnB1dFZhbHVlPXQuX19GaWVsZD10Ll9fVHlwZT10Ll9fRGlyZWN0aXZlTG9jYXRpb249dC5fX0RpcmVjdGl2ZT10Ll9fU2NoZW1hPXZvaWQgMDt2YXIgcj1uKDU4KSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ociksbz1uKDExMiksYT1uKDE5KSxzPW4oNiksdT1uKDMyKSxjPW4oMjcpLGw9dC5fX1NjaGVtYT1uZXcgcy5HcmFwaFFMT2JqZWN0VHlwZSh7bmFtZToiX19TY2hlbWEiLGlzSW50cm9zcGVjdGlvbjohMCxkZXNjcmlwdGlvbjoiQSBHcmFwaFFMIFNjaGVtYSBkZWZpbmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBHcmFwaFFMIHNlcnZlci4gSXQgZXhwb3NlcyBhbGwgYXZhaWxhYmxlIHR5cGVzIGFuZCBkaXJlY3RpdmVzIG9uIHRoZSBzZXJ2ZXIsIGFzIHdlbGwgYXMgdGhlIGVudHJ5IHBvaW50cyBmb3IgcXVlcnksIG11dGF0aW9uLCBhbmQgc3Vic2NyaXB0aW9uIG9wZXJhdGlvbnMuIixmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZXM6e2Rlc2NyaXB0aW9uOiJBIGxpc3Qgb2YgYWxsIHR5cGVzIHN1cHBvcnRlZCBieSB0aGlzIHNlcnZlci4iLHR5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwobmV3IHMuR3JhcGhRTExpc3QobmV3IHMuR3JhcGhRTE5vbk51bGwoZCkpKSxyZXNvbHZlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VHlwZU1hcCgpO3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX19LHF1ZXJ5VHlwZTp7ZGVzY3JpcHRpb246IlRoZSB0eXBlIHRoYXQgcXVlcnkgb3BlcmF0aW9ucyB3aWxsIGJlIHJvb3RlZCBhdC4iLHR5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwoZCkscmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRRdWVyeVR5cGUoKX19LG11dGF0aW9uVHlwZTp7ZGVzY3JpcHRpb246IklmIHRoaXMgc2VydmVyIHN1cHBvcnRzIG11dGF0aW9uLCB0aGUgdHlwZSB0aGF0IG11dGF0aW9uIG9wZXJhdGlvbnMgd2lsbCBiZSByb290ZWQgYXQuIix0eXBlOmQscmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNdXRhdGlvblR5cGUoKX19LHN1YnNjcmlwdGlvblR5cGU6e2Rlc2NyaXB0aW9uOiJJZiB0aGlzIHNlcnZlciBzdXBwb3J0IHN1YnNjcmlwdGlvbiwgdGhlIHR5cGUgdGhhdCBzdWJzY3JpcHRpb24gb3BlcmF0aW9ucyB3aWxsIGJlIHJvb3RlZCBhdC4iLHR5cGU6ZCxyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFN1YnNjcmlwdGlvblR5cGUoKX19LGRpcmVjdGl2ZXM6e2Rlc2NyaXB0aW9uOiJBIGxpc3Qgb2YgYWxsIGRpcmVjdGl2ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2VydmVyLiIsdHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbChuZXcgcy5HcmFwaFFMTGlzdChuZXcgcy5HcmFwaFFMTm9uTnVsbChwKSkpLHJlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGlyZWN0aXZlcygpfX19fX0pLHA9dC5fX0RpcmVjdGl2ZT1uZXcgcy5HcmFwaFFMT2JqZWN0VHlwZSh7bmFtZToiX19EaXJlY3RpdmUiLGlzSW50cm9zcGVjdGlvbjohMCxkZXNjcmlwdGlvbjoiQSBEaXJlY3RpdmUgcHJvdmlkZXMgYSB3YXkgdG8gZGVzY3JpYmUgYWx0ZXJuYXRlIHJ1bnRpbWUgZXhlY3V0aW9uIGFuZCB0eXBlIHZhbGlkYXRpb24gYmVoYXZpb3IgaW4gYSBHcmFwaFFMIGRvY3VtZW50LlxuXG5JbiBzb21lIGNhc2VzLCB5b3UgbmVlZCB0byBwcm92aWRlIG9wdGlvbnMgdG8gYWx0ZXIgR3JhcGhRTCdzIGV4ZWN1dGlvbiBiZWhhdmlvciBpbiB3YXlzIGZpZWxkIGFyZ3VtZW50cyB3aWxsIG5vdCBzdWZmaWNlLCBzdWNoIGFzIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIG9yIHNraXBwaW5nIGEgZmllbGQuIERpcmVjdGl2ZXMgcHJvdmlkZSB0aGlzIGJ5IGRlc2NyaWJpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byB0aGUgZXhlY3V0b3IuIixmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm57bmFtZTp7dHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbCh1LkdyYXBoUUxTdHJpbmcpfSxkZXNjcmlwdGlvbjp7dHlwZTp1LkdyYXBoUUxTdHJpbmd9LGxvY2F0aW9uczp7dHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbChuZXcgcy5HcmFwaFFMTGlzdChuZXcgcy5HcmFwaFFMTm9uTnVsbChmKSkpfSxhcmdzOnt0eXBlOm5ldyBzLkdyYXBoUUxOb25OdWxsKG5ldyBzLkdyYXBoUUxMaXN0KG5ldyBzLkdyYXBoUUxOb25OdWxsKG0pKSkscmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmdzfHxbXX19LG9uT3BlcmF0aW9uOntkZXByZWNhdGlvblJlYXNvbjoiVXNlIGBsb2NhdGlvbnNgLiIsdHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbCh1LkdyYXBoUUxCb29sZWFuKSxyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5sb2NhdGlvbnMuaW5kZXhPZihjLkRpcmVjdGl2ZUxvY2F0aW9uLlFVRVJZKXx8LTEhPT1lLmxvY2F0aW9ucy5pbmRleE9mKGMuRGlyZWN0aXZlTG9jYXRpb24uTVVUQVRJT04pfHwtMSE9PWUubG9jYXRpb25zLmluZGV4T2YoYy5EaXJlY3RpdmVMb2NhdGlvbi5TVUJTQ1JJUFRJT04pfX0sb25GcmFnbWVudDp7ZGVwcmVjYXRpb25SZWFzb246IlVzZSBgbG9jYXRpb25zYC4iLHR5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwodS5HcmFwaFFMQm9vbGVhbikscmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubG9jYXRpb25zLmluZGV4T2YoYy5EaXJlY3RpdmVMb2NhdGlvbi5GUkFHTUVOVF9TUFJFQUQpfHwtMSE9PWUubG9jYXRpb25zLmluZGV4T2YoYy5EaXJlY3RpdmVMb2NhdGlvbi5JTkxJTkVfRlJBR01FTlQpfHwtMSE9PWUubG9jYXRpb25zLmluZGV4T2YoYy5EaXJlY3RpdmVMb2NhdGlvbi5GUkFHTUVOVF9ERUZJTklUSU9OKX19LG9uRmllbGQ6e2RlcHJlY2F0aW9uUmVhc29uOiJVc2UgYGxvY2F0aW9uc2AuIix0eXBlOm5ldyBzLkdyYXBoUUxOb25OdWxsKHUuR3JhcGhRTEJvb2xlYW4pLHJlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLmxvY2F0aW9ucy5pbmRleE9mKGMuRGlyZWN0aXZlTG9jYXRpb24uRklFTEQpfX19fX0pLGY9dC5fX0RpcmVjdGl2ZUxvY2F0aW9uPW5ldyBzLkdyYXBoUUxFbnVtVHlwZSh7bmFtZToiX19EaXJlY3RpdmVMb2NhdGlvbiIsaXNJbnRyb3NwZWN0aW9uOiEwLGRlc2NyaXB0aW9uOiJBIERpcmVjdGl2ZSBjYW4gYmUgYWRqYWNlbnQgdG8gbWFueSBwYXJ0cyBvZiB0aGUgR3JhcGhRTCBsYW5ndWFnZSwgYSBfX0RpcmVjdGl2ZUxvY2F0aW9uIGRlc2NyaWJlcyBvbmUgc3VjaCBwb3NzaWJsZSBhZGphY2VuY2llcy4iLHZhbHVlczp7UVVFUlk6e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uUVVFUlksZGVzY3JpcHRpb246IkxvY2F0aW9uIGFkamFjZW50IHRvIGEgcXVlcnkgb3BlcmF0aW9uLiJ9LE1VVEFUSU9OOnt2YWx1ZTpjLkRpcmVjdGl2ZUxvY2F0aW9uLk1VVEFUSU9OLGRlc2NyaXB0aW9uOiJMb2NhdGlvbiBhZGphY2VudCB0byBhIG11dGF0aW9uIG9wZXJhdGlvbi4ifSxTVUJTQ1JJUFRJT046e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uU1VCU0NSSVBUSU9OLGRlc2NyaXB0aW9uOiJMb2NhdGlvbiBhZGphY2VudCB0byBhIHN1YnNjcmlwdGlvbiBvcGVyYXRpb24uIn0sRklFTEQ6e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uRklFTEQsZGVzY3JpcHRpb246IkxvY2F0aW9uIGFkamFjZW50IHRvIGEgZmllbGQuIn0sRlJBR01FTlRfREVGSU5JVElPTjp7dmFsdWU6Yy5EaXJlY3RpdmVMb2NhdGlvbi5GUkFHTUVOVF9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOiJMb2NhdGlvbiBhZGphY2VudCB0byBhIGZyYWdtZW50IGRlZmluaXRpb24uIn0sRlJBR01FTlRfU1BSRUFEOnt2YWx1ZTpjLkRpcmVjdGl2ZUxvY2F0aW9uLkZSQUdNRU5UX1NQUkVBRCxkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYSBmcmFnbWVudCBzcHJlYWQuIn0sSU5MSU5FX0ZSQUdNRU5UOnt2YWx1ZTpjLkRpcmVjdGl2ZUxvY2F0aW9uLklOTElORV9GUkFHTUVOVCxkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYW4gaW5saW5lIGZyYWdtZW50LiJ9LFNDSEVNQTp7dmFsdWU6Yy5EaXJlY3RpdmVMb2NhdGlvbi5TQ0hFTUEsZGVzY3JpcHRpb246IkxvY2F0aW9uIGFkamFjZW50IHRvIGEgc2NoZW1hIGRlZmluaXRpb24uIn0sU0NBTEFSOnt2YWx1ZTpjLkRpcmVjdGl2ZUxvY2F0aW9uLlNDQUxBUixkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYSBzY2FsYXIgZGVmaW5pdGlvbi4ifSxPQkpFQ1Q6e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uT0JKRUNULGRlc2NyaXB0aW9uOiJMb2NhdGlvbiBhZGphY2VudCB0byBhbiBvYmplY3QgdHlwZSBkZWZpbml0aW9uLiJ9LEZJRUxEX0RFRklOSVRJT046e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uRklFTERfREVGSU5JVElPTixkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYSBmaWVsZCBkZWZpbml0aW9uLiJ9LEFSR1VNRU5UX0RFRklOSVRJT046e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uQVJHVU1FTlRfREVGSU5JVElPTixkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYW4gYXJndW1lbnQgZGVmaW5pdGlvbi4ifSxJTlRFUkZBQ0U6e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uSU5URVJGQUNFLGRlc2NyaXB0aW9uOiJMb2NhdGlvbiBhZGphY2VudCB0byBhbiBpbnRlcmZhY2UgZGVmaW5pdGlvbi4ifSxVTklPTjp7dmFsdWU6Yy5EaXJlY3RpdmVMb2NhdGlvbi5VTklPTixkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYSB1bmlvbiBkZWZpbml0aW9uLiJ9LEVOVU06e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uRU5VTSxkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYW4gZW51bSBkZWZpbml0aW9uLiJ9LEVOVU1fVkFMVUU6e3ZhbHVlOmMuRGlyZWN0aXZlTG9jYXRpb24uRU5VTV9WQUxVRSxkZXNjcmlwdGlvbjoiTG9jYXRpb24gYWRqYWNlbnQgdG8gYW4gZW51bSB2YWx1ZSBkZWZpbml0aW9uLiJ9LElOUFVUX09CSkVDVDp7dmFsdWU6Yy5EaXJlY3RpdmVMb2NhdGlvbi5JTlBVVF9PQkpFQ1QsZGVzY3JpcHRpb246IkxvY2F0aW9uIGFkamFjZW50IHRvIGFuIGlucHV0IG9iamVjdCB0eXBlIGRlZmluaXRpb24uIn0sSU5QVVRfRklFTERfREVGSU5JVElPTjp7dmFsdWU6Yy5EaXJlY3RpdmVMb2NhdGlvbi5JTlBVVF9GSUVMRF9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOiJMb2NhdGlvbiBhZGphY2VudCB0byBhbiBpbnB1dCBvYmplY3QgZmllbGQgZGVmaW5pdGlvbi4ifX19KSxkPXQuX19UeXBlPW5ldyBzLkdyYXBoUUxPYmplY3RUeXBlKHtuYW1lOiJfX1R5cGUiLGlzSW50cm9zcGVjdGlvbjohMCxkZXNjcmlwdGlvbjoiVGhlIGZ1bmRhbWVudGFsIHVuaXQgb2YgYW55IEdyYXBoUUwgU2NoZW1hIGlzIHRoZSB0eXBlLiBUaGVyZSBhcmUgbWFueSBraW5kcyBvZiB0eXBlcyBpbiBHcmFwaFFMIGFzIHJlcHJlc2VudGVkIGJ5IHRoZSBgX19UeXBlS2luZGAgZW51bS5cblxuRGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIGEgdHlwZSwgY2VydGFpbiBmaWVsZHMgZGVzY3JpYmUgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCB0eXBlLiBTY2FsYXIgdHlwZXMgcHJvdmlkZSBubyBpbmZvcm1hdGlvbiBiZXlvbmQgYSBuYW1lIGFuZCBkZXNjcmlwdGlvbiwgd2hpbGUgRW51bSB0eXBlcyBwcm92aWRlIHRoZWlyIHZhbHVlcy4gT2JqZWN0IGFuZCBJbnRlcmZhY2UgdHlwZXMgcHJvdmlkZSB0aGUgZmllbGRzIHRoZXkgZGVzY3JpYmUuIEFic3RyYWN0IHR5cGVzLCBVbmlvbiBhbmQgSW50ZXJmYWNlLCBwcm92aWRlIHRoZSBPYmplY3QgdHlwZXMgcG9zc2libGUgYXQgcnVudGltZS4gTGlzdCBhbmQgTm9uTnVsbCB0eXBlcyBjb21wb3NlIG90aGVyIHR5cGVzLiIsZmllbGRzOmZ1bmN0aW9uKCl7cmV0dXJue2tpbmQ6e3R5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwodikscmVzb2x2ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygcy5HcmFwaFFMU2NhbGFyVHlwZSlyZXR1cm4geS5TQ0FMQVI7aWYoZSBpbnN0YW5jZW9mIHMuR3JhcGhRTE9iamVjdFR5cGUpcmV0dXJuIHkuT0JKRUNUO2lmKGUgaW5zdGFuY2VvZiBzLkdyYXBoUUxJbnRlcmZhY2VUeXBlKXJldHVybiB5LklOVEVSRkFDRTtpZihlIGluc3RhbmNlb2Ygcy5HcmFwaFFMVW5pb25UeXBlKXJldHVybiB5LlVOSU9OO2lmKGUgaW5zdGFuY2VvZiBzLkdyYXBoUUxFbnVtVHlwZSlyZXR1cm4geS5FTlVNO2lmKGUgaW5zdGFuY2VvZiBzLkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpcmV0dXJuIHkuSU5QVVRfT0JKRUNUO2lmKGUgaW5zdGFuY2VvZiBzLkdyYXBoUUxMaXN0KXJldHVybiB5LkxJU1Q7aWYoZSBpbnN0YW5jZW9mIHMuR3JhcGhRTE5vbk51bGwpcmV0dXJuIHkuTk9OX05VTEw7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGtpbmQgb2YgdHlwZTogIitlKX19LG5hbWU6e3R5cGU6dS5HcmFwaFFMU3RyaW5nfSxkZXNjcmlwdGlvbjp7dHlwZTp1LkdyYXBoUUxTdHJpbmd9LGZpZWxkczp7dHlwZTpuZXcgcy5HcmFwaFFMTGlzdChuZXcgcy5HcmFwaFFMTm9uTnVsbChoKSksYXJnczp7aW5jbHVkZURlcHJlY2F0ZWQ6e3R5cGU6dS5HcmFwaFFMQm9vbGVhbixkZWZhdWx0VmFsdWU6ITF9fSxyZXNvbHZlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5pbmNsdWRlRGVwcmVjYXRlZDtpZihlIGluc3RhbmNlb2Ygcy5HcmFwaFFMT2JqZWN0VHlwZXx8ZSBpbnN0YW5jZW9mIHMuR3JhcGhRTEludGVyZmFjZVR5cGUpe3ZhciByPWUuZ2V0RmllbGRzKCksaT1PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV19KTtyZXR1cm4gbnx8KGk9aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGVwcmVjYXRpb25SZWFzb259KSksaX1yZXR1cm4gbnVsbH19LGludGVyZmFjZXM6e3R5cGU6bmV3IHMuR3JhcGhRTExpc3QobmV3IHMuR3JhcGhRTE5vbk51bGwoZCkpLHJlc29sdmU6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHMuR3JhcGhRTE9iamVjdFR5cGUpcmV0dXJuIGUuZ2V0SW50ZXJmYWNlcygpfX0scG9zc2libGVUeXBlczp7dHlwZTpuZXcgcy5HcmFwaFFMTGlzdChuZXcgcy5HcmFwaFFMTm9uTnVsbChkKSkscmVzb2x2ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1yLnNjaGVtYTtpZigoMCxzLmlzQWJzdHJhY3RUeXBlKShlKSlyZXR1cm4gaS5nZXRQb3NzaWJsZVR5cGVzKGUpfX0sZW51bVZhbHVlczp7dHlwZTpuZXcgcy5HcmFwaFFMTGlzdChuZXcgcy5HcmFwaFFMTm9uTnVsbChnKSksYXJnczp7aW5jbHVkZURlcHJlY2F0ZWQ6e3R5cGU6dS5HcmFwaFFMQm9vbGVhbixkZWZhdWx0VmFsdWU6ITF9fSxyZXNvbHZlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5pbmNsdWRlRGVwcmVjYXRlZDtpZihlIGluc3RhbmNlb2Ygcy5HcmFwaFFMRW51bVR5cGUpe3ZhciByPWUuZ2V0VmFsdWVzKCk7cmV0dXJuIG58fChyPXIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRlcHJlY2F0aW9uUmVhc29ufSkpLHJ9fX0saW5wdXRGaWVsZHM6e3R5cGU6bmV3IHMuR3JhcGhRTExpc3QobmV3IHMuR3JhcGhRTE5vbk51bGwobSkpLHJlc29sdmU6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHMuR3JhcGhRTElucHV0T2JqZWN0VHlwZSl7dmFyIHQ9ZS5nZXRGaWVsZHMoKTtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fX0sb2ZUeXBlOnt0eXBlOmR9fX19KSxoPXQuX19GaWVsZD1uZXcgcy5HcmFwaFFMT2JqZWN0VHlwZSh7bmFtZToiX19GaWVsZCIsaXNJbnRyb3NwZWN0aW9uOiEwLGRlc2NyaXB0aW9uOiJPYmplY3QgYW5kIEludGVyZmFjZSB0eXBlcyBhcmUgZGVzY3JpYmVkIGJ5IGEgbGlzdCBvZiBGaWVsZHMsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgbmFtZSwgcG90ZW50aWFsbHkgYSBsaXN0IG9mIGFyZ3VtZW50cywgYW5kIGEgcmV0dXJuIHR5cGUuIixmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm57bmFtZTp7dHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbCh1LkdyYXBoUUxTdHJpbmcpfSxkZXNjcmlwdGlvbjp7dHlwZTp1LkdyYXBoUUxTdHJpbmd9LGFyZ3M6e3R5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwobmV3IHMuR3JhcGhRTExpc3QobmV3IHMuR3JhcGhRTE5vbk51bGwobSkpKSxyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFyZ3N8fFtdfX0sdHlwZTp7dHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbChkKX0saXNEZXByZWNhdGVkOnt0eXBlOm5ldyBzLkdyYXBoUUxOb25OdWxsKHUuR3JhcGhRTEJvb2xlYW4pfSxkZXByZWNhdGlvblJlYXNvbjp7dHlwZTp1LkdyYXBoUUxTdHJpbmd9fX19KSxtPXQuX19JbnB1dFZhbHVlPW5ldyBzLkdyYXBoUUxPYmplY3RUeXBlKHtuYW1lOiJfX0lucHV0VmFsdWUiLGlzSW50cm9zcGVjdGlvbjohMCxkZXNjcmlwdGlvbjoiQXJndW1lbnRzIHByb3ZpZGVkIHRvIEZpZWxkcyBvciBEaXJlY3RpdmVzIGFuZCB0aGUgaW5wdXQgZmllbGRzIG9mIGFuIElucHV0T2JqZWN0IGFyZSByZXByZXNlbnRlZCBhcyBJbnB1dCBWYWx1ZXMgd2hpY2ggZGVzY3JpYmUgdGhlaXIgdHlwZSBhbmQgb3B0aW9uYWxseSBhIGRlZmF1bHQgdmFsdWUuIixmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm57bmFtZTp7dHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbCh1LkdyYXBoUUxTdHJpbmcpfSxkZXNjcmlwdGlvbjp7dHlwZTp1LkdyYXBoUUxTdHJpbmd9LHR5cGU6e3R5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwoZCl9LGRlZmF1bHRWYWx1ZTp7dHlwZTp1LkdyYXBoUUxTdHJpbmcsZGVzY3JpcHRpb246IkEgR3JhcGhRTC1mb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpbnB1dCB2YWx1ZS4iLHJlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsaS5kZWZhdWx0KShlLmRlZmF1bHRWYWx1ZSk/bnVsbDooMCxhLnByaW50KSgoMCxvLmFzdEZyb21WYWx1ZSkoZS5kZWZhdWx0VmFsdWUsZS50eXBlKSl9fX19fSksZz10Ll9fRW51bVZhbHVlPW5ldyBzLkdyYXBoUUxPYmplY3RUeXBlKHtuYW1lOiJfX0VudW1WYWx1ZSIsaXNJbnRyb3NwZWN0aW9uOiEwLGRlc2NyaXB0aW9uOiJPbmUgcG9zc2libGUgdmFsdWUgZm9yIGEgZ2l2ZW4gRW51bS4gRW51bSB2YWx1ZXMgYXJlIHVuaXF1ZSB2YWx1ZXMsIG5vdCBhIHBsYWNlaG9sZGVyIGZvciBhIHN0cmluZyBvciBudW1lcmljIHZhbHVlLiBIb3dldmVyIGFuIEVudW0gdmFsdWUgaXMgcmV0dXJuZWQgaW4gYSBKU09OIHJlc3BvbnNlIGFzIGEgc3RyaW5nLiIsZmllbGRzOmZ1bmN0aW9uKCl7cmV0dXJue25hbWU6e3R5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwodS5HcmFwaFFMU3RyaW5nKX0sZGVzY3JpcHRpb246e3R5cGU6dS5HcmFwaFFMU3RyaW5nfSxpc0RlcHJlY2F0ZWQ6e3R5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwodS5HcmFwaFFMQm9vbGVhbil9LGRlcHJlY2F0aW9uUmVhc29uOnt0eXBlOnUuR3JhcGhRTFN0cmluZ319fX0pLHk9dC5UeXBlS2luZD17U0NBTEFSOiJTQ0FMQVIiLE9CSkVDVDoiT0JKRUNUIixJTlRFUkZBQ0U6IklOVEVSRkFDRSIsVU5JT046IlVOSU9OIixFTlVNOiJFTlVNIixJTlBVVF9PQkpFQ1Q6IklOUFVUX09CSkVDVCIsTElTVDoiTElTVCIsTk9OX05VTEw6Ik5PTl9OVUxMIn0sdj10Ll9fVHlwZUtpbmQ9bmV3IHMuR3JhcGhRTEVudW1UeXBlKHtuYW1lOiJfX1R5cGVLaW5kIixpc0ludHJvc3BlY3Rpb246ITAsZGVzY3JpcHRpb246IkFuIGVudW0gZGVzY3JpYmluZyB3aGF0IGtpbmQgb2YgdHlwZSBhIGdpdmVuIGBfX1R5cGVgIGlzLiIsdmFsdWVzOntTQ0FMQVI6e3ZhbHVlOnkuU0NBTEFSLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhpcyB0eXBlIGlzIGEgc2NhbGFyLiJ9LE9CSkVDVDp7dmFsdWU6eS5PQkpFQ1QsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGlzIHR5cGUgaXMgYW4gb2JqZWN0LiBgZmllbGRzYCBhbmQgYGludGVyZmFjZXNgIGFyZSB2YWxpZCBmaWVsZHMuIn0sSU5URVJGQUNFOnt2YWx1ZTp5LklOVEVSRkFDRSxkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHRoaXMgdHlwZSBpcyBhbiBpbnRlcmZhY2UuIGBmaWVsZHNgIGFuZCBgcG9zc2libGVUeXBlc2AgYXJlIHZhbGlkIGZpZWxkcy4ifSxVTklPTjp7dmFsdWU6eS5VTklPTixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHRoaXMgdHlwZSBpcyBhIHVuaW9uLiBgcG9zc2libGVUeXBlc2AgaXMgYSB2YWxpZCBmaWVsZC4ifSxFTlVNOnt2YWx1ZTp5LkVOVU0sZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGlzIHR5cGUgaXMgYW4gZW51bS4gYGVudW1WYWx1ZXNgIGlzIGEgdmFsaWQgZmllbGQuIn0sSU5QVVRfT0JKRUNUOnt2YWx1ZTp5LklOUFVUX09CSkVDVCxkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHRoaXMgdHlwZSBpcyBhbiBpbnB1dCBvYmplY3QuIGBpbnB1dEZpZWxkc2AgaXMgYSB2YWxpZCBmaWVsZC4ifSxMSVNUOnt2YWx1ZTp5LkxJU1QsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGlzIHR5cGUgaXMgYSBsaXN0LiBgb2ZUeXBlYCBpcyBhIHZhbGlkIGZpZWxkLiJ9LE5PTl9OVUxMOnt2YWx1ZTp5Lk5PTl9OVUxMLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhpcyB0eXBlIGlzIGEgbm9uLW51bGwuIGBvZlR5cGVgIGlzIGEgdmFsaWQgZmllbGQuIn19fSk7dC5TY2hlbWFNZXRhRmllbGREZWY9e25hbWU6Il9fc2NoZW1hIix0eXBlOm5ldyBzLkdyYXBoUUxOb25OdWxsKGwpLGRlc2NyaXB0aW9uOiJBY2Nlc3MgdGhlIGN1cnJlbnQgdHlwZSBzY2hlbWEgb2YgdGhpcyBzZXJ2ZXIuIixhcmdzOltdLHJlc29sdmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHIuc2NoZW1hfX0sdC5UeXBlTWV0YUZpZWxkRGVmPXtuYW1lOiJfX3R5cGUiLHR5cGU6ZCxkZXNjcmlwdGlvbjoiUmVxdWVzdCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIHNpbmdsZSB0eXBlLiIsYXJnczpbe25hbWU6Im5hbWUiLHR5cGU6bmV3IHMuR3JhcGhRTE5vbk51bGwodS5HcmFwaFFMU3RyaW5nKX1dLHJlc29sdmU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC5uYW1lO3JldHVybiByLnNjaGVtYS5nZXRUeXBlKGkpfX0sdC5UeXBlTmFtZU1ldGFGaWVsZERlZj17bmFtZToiX190eXBlbmFtZSIsdHlwZTpuZXcgcy5HcmFwaFFMTm9uTnVsbCh1LkdyYXBoUUxTdHJpbmcpLGRlc2NyaXB0aW9uOiJUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBPYmplY3QgdHlwZSBhdCBydW50aW1lLiIsYXJnczpbXSxyZXNvbHZlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByLnBhcmVudFR5cGUubmFtZX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj12b2lkIDA7cmV0dXJuIHQua2luZD09PXMuTElTVF9UWVBFPyhuPWMoZSx0LnR5cGUpKSYmbmV3IHUuR3JhcGhRTExpc3Qobik6dC5raW5kPT09cy5OT05fTlVMTF9UWVBFPyhuPWMoZSx0LnR5cGUpKSYmbmV3IHUuR3JhcGhRTE5vbk51bGwobik6KHQua2luZCE9PXMuTkFNRURfVFlQRSYmKDAsby5kZWZhdWx0KSgwLCJNdXN0IGJlIGEgbmFtZWQgdHlwZS4iKSxlLmdldFR5cGUodC5uYW1lLnZhbHVlKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudHlwZUZyb21BU1Q9dm9pZCAwO3ZhciBpPW4oMTMpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShpKSxhPW4oMTApLHM9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShhKSx1PW4oNiksYz10LnR5cGVGcm9tQVNUPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShyKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX1yKCksZS5leHBvcnRzPW4oMzE0KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigiIj09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW50IGNhbm5vdCByZXByZXNlbnQgbm9uIDMyLWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZTogKGVtcHR5IHN0cmluZykiKTt2YXIgdD1OdW1iZXIoZSk7aWYodCE9PXR8fHQ+Y3x8dDxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkludCBjYW5ub3QgcmVwcmVzZW50IG5vbiAzMi1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWU6ICIrU3RyaW5nKGUpKTt2YXIgbj1NYXRoLmZsb29yKHQpO2lmKG4hPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkludCBjYW5ub3QgcmVwcmVzZW50IG5vbi1pbnRlZ2VyIHZhbHVlOiAiK1N0cmluZyhlKSk7cmV0dXJuIG59ZnVuY3Rpb24gaShlKXtpZigiIj09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmxvYXQgY2Fubm90IHJlcHJlc2VudCBub24gbnVtZXJpYyB2YWx1ZTogKGVtcHR5IHN0cmluZykiKTt2YXIgdD1OdW1iZXIoZSk7aWYodD09PXQpcmV0dXJuIHQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmxvYXQgY2Fubm90IHJlcHJlc2VudCBub24gbnVtZXJpYyB2YWx1ZTogIitTdHJpbmcoZSkpfWZ1bmN0aW9uIG8oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdHJpbmcgY2Fubm90IHJlcHJlc2VudCBhbiBhcnJheSB2YWx1ZTogWyIrU3RyaW5nKGUpKyJdIik7cmV0dXJuIFN0cmluZyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HcmFwaFFMSUQ9dC5HcmFwaFFMQm9vbGVhbj10LkdyYXBoUUxTdHJpbmc9dC5HcmFwaFFMRmxvYXQ9dC5HcmFwaFFMSW50PXZvaWQgMDt2YXIgYT1uKDYpLHM9bigxMCksdT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHMpLGM9MjE0NzQ4MzY0NyxsPS0yMTQ3NDgzNjQ4O3QuR3JhcGhRTEludD1uZXcgYS5HcmFwaFFMU2NhbGFyVHlwZSh7bmFtZToiSW50IixkZXNjcmlwdGlvbjoiVGhlIGBJbnRgIHNjYWxhciB0eXBlIHJlcHJlc2VudHMgbm9uLWZyYWN0aW9uYWwgc2lnbmVkIHdob2xlIG51bWVyaWMgdmFsdWVzLiBJbnQgY2FuIHJlcHJlc2VudCB2YWx1ZXMgYmV0d2VlbiAtKDJeMzEpIGFuZCAyXjMxIC0gMS4gIixzZXJpYWxpemU6cixwYXJzZVZhbHVlOnIscGFyc2VMaXRlcmFsOmZ1bmN0aW9uKGUpe2lmKGUua2luZD09PXUuSU5UKXt2YXIgdD1wYXJzZUludChlLnZhbHVlLDEwKTtpZih0PD1jJiZ0Pj1sKXJldHVybiB0fXJldHVybiBudWxsfX0pLHQuR3JhcGhRTEZsb2F0PW5ldyBhLkdyYXBoUUxTY2FsYXJUeXBlKHtuYW1lOiJGbG9hdCIsZGVzY3JpcHRpb246IlRoZSBgRmxvYXRgIHNjYWxhciB0eXBlIHJlcHJlc2VudHMgc2lnbmVkIGRvdWJsZS1wcmVjaXNpb24gZnJhY3Rpb25hbCB2YWx1ZXMgYXMgc3BlY2lmaWVkIGJ5IFtJRUVFIDc1NF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JRUVFX2Zsb2F0aW5nX3BvaW50KS4gIixzZXJpYWxpemU6aSxwYXJzZVZhbHVlOmkscGFyc2VMaXRlcmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT11LkZMT0FUfHxlLmtpbmQ9PT11LklOVD9wYXJzZUZsb2F0KGUudmFsdWUpOm51bGx9fSksdC5HcmFwaFFMU3RyaW5nPW5ldyBhLkdyYXBoUUxTY2FsYXJUeXBlKHtuYW1lOiJTdHJpbmciLGRlc2NyaXB0aW9uOiJUaGUgYFN0cmluZ2Agc2NhbGFyIHR5cGUgcmVwcmVzZW50cyB0ZXh0dWFsIGRhdGEsIHJlcHJlc2VudGVkIGFzIFVURi04IGNoYXJhY3RlciBzZXF1ZW5jZXMuIFRoZSBTdHJpbmcgdHlwZSBpcyBtb3N0IG9mdGVuIHVzZWQgYnkgR3JhcGhRTCB0byByZXByZXNlbnQgZnJlZS1mb3JtIGh1bWFuLXJlYWRhYmxlIHRleHQuIixzZXJpYWxpemU6byxwYXJzZVZhbHVlOm8scGFyc2VMaXRlcmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT11LlNUUklORz9lLnZhbHVlOm51bGx9fSksdC5HcmFwaFFMQm9vbGVhbj1uZXcgYS5HcmFwaFFMU2NhbGFyVHlwZSh7bmFtZToiQm9vbGVhbiIsZGVzY3JpcHRpb246IlRoZSBgQm9vbGVhbmAgc2NhbGFyIHR5cGUgcmVwcmVzZW50cyBgdHJ1ZWAgb3IgYGZhbHNlYC4iLHNlcmlhbGl6ZTpCb29sZWFuLHBhcnNlVmFsdWU6Qm9vbGVhbixwYXJzZUxpdGVyYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2luZD09PXUuQk9PTEVBTj9lLnZhbHVlOm51bGx9fSksdC5HcmFwaFFMSUQ9bmV3IGEuR3JhcGhRTFNjYWxhclR5cGUoe25hbWU6IklEIixkZXNjcmlwdGlvbjonVGhlIGBJRGAgc2NhbGFyIHR5cGUgcmVwcmVzZW50cyBhIHVuaXF1ZSBpZGVudGlmaWVyLCBvZnRlbiB1c2VkIHRvIHJlZmV0Y2ggYW4gb2JqZWN0IG9yIGFzIGtleSBmb3IgYSBjYWNoZS4gVGhlIElEIHR5cGUgYXBwZWFycyBpbiBhIEpTT04gcmVzcG9uc2UgYXMgYSBTdHJpbmc7IGhvd2V2ZXIsIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBodW1hbi1yZWFkYWJsZS4gV2hlbiBleHBlY3RlZCBhcyBhbiBpbnB1dCB0eXBlLCBhbnkgc3RyaW5nIChzdWNoIGFzIGAiNCJgKSBvciBpbnRlZ2VyIChzdWNoIGFzIGA0YCkgaW5wdXQgdmFsdWUgd2lsbCBiZSBhY2NlcHRlZCBhcyBhbiBJRC4nLHNlcmlhbGl6ZTpTdHJpbmcscGFyc2VWYWx1ZTpTdHJpbmcscGFyc2VMaXRlcmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT11LlNUUklOR3x8ZS5raW5kPT09dS5JTlQ/ZS52YWx1ZTpudWxsfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwPT09ZT91OnM6YyYmYyBpbiBPYmplY3QoZSk/T2JqZWN0KG8uYSkoZSk6T2JqZWN0KGEuYSkoZSl9dmFyIGk9bigxMDMpLG89bigzNDkpLGE9bigzNTApLHM9IltvYmplY3QgTnVsbF0iLHU9IltvYmplY3QgVW5kZWZpbmVkXSIsYz1pLmE/aS5hLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIqIjtpZihhcmd1bWVudHMubGVuZ3RoJiZPYmplY3Qody5oKShhcmd1bWVudHNbMF0sdy5xLm5vdFVuZGVmLCJ0YWtlKHBhdHRlcm5PckNoYW5uZWwpOiBwYXR0ZXJuT3JDaGFubmVsIGlzIHVuZGVmaW5lZCIpLHcucS5wYXR0ZXJuKGUpKXJldHVybiBHKEEse3BhdHRlcm46ZX0pO2lmKHcucS5jaGFubmVsKGUpKXJldHVybiBHKEEse2NoYW5uZWw6ZX0pO3Rocm93IG5ldyBFcnJvcigidGFrZShwYXR0ZXJuT3JDaGFubmVsKTogYXJndW1lbnQgIitTdHJpbmcoZSkrIiBpcyBub3QgdmFsaWQgY2hhbm5lbCBvciBhIHZhbGlkIHBhdHRlcm4iKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oT2JqZWN0KHcuaCkoZSx3LnEubm90VW5kZWYsInB1dChjaGFubmVsLCBhY3Rpb24pOiBhcmd1bWVudCBjaGFubmVsIGlzIHVuZGVmaW5lZCIpLE9iamVjdCh3LmgpKGUsdy5xLmNoYW5uZWwsInB1dChjaGFubmVsLCBhY3Rpb24pOiBhcmd1bWVudCAiK2UrIiBpcyBub3QgYSB2YWxpZCBjaGFubmVsIiksT2JqZWN0KHcuaCkodCx3LnEubm90VW5kZWYsInB1dChjaGFubmVsLCBhY3Rpb24pOiBhcmd1bWVudCBhY3Rpb24gaXMgdW5kZWZpbmVkIikpOihPYmplY3Qody5oKShlLHcucS5ub3RVbmRlZiwicHV0KGFjdGlvbik6IGFyZ3VtZW50IGFjdGlvbiBpcyB1bmRlZmluZWQiKSx0PWUsZT1udWxsKSxHKF8se2NoYW5uZWw6ZSxhY3Rpb246dH0pfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIEcoVCxlKX1mdW5jdGlvbiBhKGUpe3JldHVybiBHKE8sZSl9ZnVuY3Rpb24gcyhlLHQsbil7T2JqZWN0KHcuaCkodCx3LnEubm90VW5kZWYsZSsiOiBhcmd1bWVudCBmbiBpcyB1bmRlZmluZWQiKTt2YXIgcj1udWxsO2lmKHcucS5hcnJheSh0KSl7dmFyIGk9dDtyPWlbMF0sdD1pWzFdfWVsc2UgaWYodC5mbil7dmFyIG89dDtyPW8uY29udGV4dCx0PW8uZm59cmV0dXJuIHImJncucS5zdHJpbmcodCkmJncucS5mdW5jKHJbdF0pJiYodD1yW3RdKSxPYmplY3Qody5oKSh0LHcucS5mdW5jLGUrIjogYXJndW1lbnQgIit0KyIgaXMgbm90IGEgZnVuY3Rpb24iKSx7Y29udGV4dDpyLGZuOnQsYXJnczpufX1mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBHKEYscygiY2FsbCIsZSxuKSl9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtyZXR1cm4gRyhGLHMoImFwcGx5Iix7Y29udGV4dDplLGZuOnR9LG4pKX1mdW5jdGlvbiBsKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBHKE4scygiY3BzIixlLG4pKX1mdW5jdGlvbiBwKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBHKEkscygiZm9yayIsZSxuKSl9ZnVuY3Rpb24gZihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gVihwLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSl9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07aWYodC5sZW5ndGg+MSlyZXR1cm4gbyh0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZChlKX0pKTt2YXIgcj10WzBdO3JldHVybiBPYmplY3Qody5oKShyLHcucS5ub3RVbmRlZiwiam9pbih0YXNrKTogYXJndW1lbnQgdGFzayBpcyB1bmRlZmluZWQiKSxPYmplY3Qody5oKShyLHcucS50YXNrLCJqb2luKHRhc2spOiBhcmd1bWVudCAiK3IrIiBpcyBub3QgYSB2YWxpZCBUYXNrIG9iamVjdCAiK3opLEcoTCxyKX1mdW5jdGlvbiBoKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtpZih0Lmxlbmd0aD4xKXJldHVybiBvKHQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBoKGUpfSkpO3ZhciByPXRbMF07cmV0dXJuIDE9PT10Lmxlbmd0aCYmKE9iamVjdCh3LmgpKHIsdy5xLm5vdFVuZGVmLCJjYW5jZWwodGFzayk6IGFyZ3VtZW50IHRhc2sgaXMgdW5kZWZpbmVkIiksT2JqZWN0KHcuaCkocix3LnEudGFzaywiY2FuY2VsKHRhc2spOiBhcmd1bWVudCAiK3IrIiBpcyBub3QgYSB2YWxpZCBUYXNrIG9iamVjdCAiK3opKSxHKFAscnx8dy5kKX1mdW5jdGlvbiBtKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD9lPXcubzooT2JqZWN0KHcuaCkoZSx3LnEubm90VW5kZWYsInNlbGVjdChzZWxlY3RvcixbLi4uXSk6IGFyZ3VtZW50IHNlbGVjdG9yIGlzIHVuZGVmaW5lZCIpLE9iamVjdCh3LmgpKGUsdy5xLmZ1bmMsInNlbGVjdChzZWxlY3RvcixbLi4uXSk6IGFyZ3VtZW50ICIrZSsiIGlzIG5vdCBhIGZ1bmN0aW9uIikpLEcoTSx7c2VsZWN0b3I6ZSxhcmdzOm59KX1mdW5jdGlvbiBnKGUsdCl7cmV0dXJuIE9iamVjdCh3LmgpKGUsdy5xLm5vdFVuZGVmLCJhY3Rpb25DaGFubmVsKHBhdHRlcm4sLi4uKTogYXJndW1lbnQgcGF0dGVybiBpcyB1bmRlZmluZWQiKSxhcmd1bWVudHMubGVuZ3RoPjEmJihPYmplY3Qody5oKSh0LHcucS5ub3RVbmRlZiwiYWN0aW9uQ2hhbm5lbChwYXR0ZXJuLCBidWZmZXIpOiBhcmd1bWVudCBidWZmZXIgaXMgdW5kZWZpbmVkIiksT2JqZWN0KHcuaCkodCx3LnEuYnVmZmVyLCJhY3Rpb25DaGFubmVsKHBhdHRlcm4sIGJ1ZmZlcik6IGFyZ3VtZW50ICIrdCsiIGlzIG5vdCBhIHZhbGlkIGJ1ZmZlciIpKSxHKGose3BhdHRlcm46ZSxidWZmZXI6dH0pfWZ1bmN0aW9uIHkoKXtyZXR1cm4gRyhSLHt9KX1mdW5jdGlvbiB2KGUpe3JldHVybiBPYmplY3Qody5oKShlLHcucS5jaGFubmVsLCJmbHVzaChjaGFubmVsKTogYXJndW1lbnQgIitlKyIgaXMgbm90IHZhbGlkIGNoYW5uZWwiKSxHKEIsZSl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gT2JqZWN0KHcuaCkoZSx3LnEuc3RyaW5nLCJnZXRDb250ZXh0KHByb3ApOiBhcmd1bWVudCAiK2UrIiBpcyBub3QgYSBzdHJpbmciKSxHKCQsZSl9ZnVuY3Rpb24geChlKXtyZXR1cm4gT2JqZWN0KHcuaCkoZSx3LnEub2JqZWN0LE9iamVjdCh3LmspKG51bGwsZSkpLEcoVSxlKX1mdW5jdGlvbiBDKGUsdCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjI/bi0yOjApLGk9MjtpPG47aSsrKXJbaS0yXT1hcmd1bWVudHNbaV07cmV0dXJuIHAuYXBwbHkodm9pZCAwLFtTLmIsZSx0XS5jb25jYXQocikpfWZ1bmN0aW9uIEUoZSx0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTtyZXR1cm4gcC5hcHBseSh2b2lkIDAsW1MuZCxlLHRdLmNvbmNhdChyKSl9ZnVuY3Rpb24gRChlLHQsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShyPjM/ci0zOjApLG89MztvPHI7bysrKWlbby0zXT1hcmd1bWVudHNbb107cmV0dXJuIHAuYXBwbHkodm9pZCAwLFtTLmYsZSx0LG5dLmNvbmNhdChpKSl9bi5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSx0LnM9cixuLmQodCwidiIsZnVuY3Rpb24oKXtyZXR1cm4gcX0pLHQubj1pLHQuYj1vLHQubz1hLHQuZT11LHQuYz1jLHQuaD1sLHQuaz1wLHQucj1mLHQubT1kLHQuZj1oLHQucD1tLHQuYT1nLHQuZz15LHQuaj12LHQubD1iLHQucT14LHQudD1DLHQudT1FLHQudz1ELG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBXfSk7dmFyIHc9bigyMiksUz1uKDE2OSksaz1PYmplY3Qody54KSgiSU8iKSxBPSJUQUtFIixfPSJQVVQiLFQ9IkFMTCIsTz0iUkFDRSIsRj0iQ0FMTCIsTj0iQ1BTIixJPSJGT1JLIixMPSJKT0lOIixQPSJDQU5DRUwiLE09IlNFTEVDVCIsaj0iQUNUSU9OX0NIQU5ORUwiLFI9IkNBTkNFTExFRCIsQj0iRkxVU0giLCQ9IkdFVF9DT05URVhUIixVPSJTRVRfQ09OVEVYVCIsej0iXG4oSElOVDogaWYgeW91IGFyZSBnZXR0aW5nIHRoaXMgZXJyb3JzIGluIHRlc3RzLCBjb25zaWRlciB1c2luZyBjcmVhdGVNb2NrVGFzayBmcm9tIHJlZHV4LXNhZ2EvdXRpbHMpIixHPWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49e30sbltrXT0hMCxuW2VdPXQsbn0sVj1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHcuaCkoVy5mb3JrKGUpLHcucS5vYmplY3QsImRldGFjaChlZmYpOiBhcmd1bWVudCBtdXN0IGJlIGEgZm9yayBlZmZlY3QiKSxlW0ldLmRldGFjaGVkPSEwLGV9O3IubWF5YmU9ZnVuY3Rpb24oKXt2YXIgZT1yLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpO3JldHVybiBlW0FdLm1heWJlPSEwLGV9O3ZhciBxPU9iamVjdCh3Lm4pKHIubWF5YmUsT2JqZWN0KHcueikoInRha2VtIiwidGFrZS5tYXliZSIpKTtpLnJlc29sdmU9ZnVuY3Rpb24oKXt2YXIgZT1pLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpO3JldHVybiBlW19dLnJlc29sdmU9ITAsZX0saS5zeW5jPU9iamVjdCh3Lm4pKGkucmVzb2x2ZSxPYmplY3Qody56KSgicHV0LnN5bmMiLCJwdXQucmVzb2x2ZSIpKTt2YXIgSD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRba10mJnRbZV19fSxXPXt0YWtlOkgoQSkscHV0OkgoXyksYWxsOkgoVCkscmFjZTpIKE8pLGNhbGw6SChGKSxjcHM6SChOKSxmb3JrOkgoSSksam9pbjpIKEwpLGNhbmNlbDpIKFApLHNlbGVjdDpIKE0pLGFjdGlvbkNoYW5uZWw6SChqKSxjYW5jZWxsZWQ6SChSKSxmbHVzaDpIKEIpLGdldENvbnRleHQ6SCgkKSxzZXRDb250ZXh0OkgoVSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lfHxlIT09ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57aWQ6aSgpLHF1ZXJ5OnQuZGVmYXVsdFF1ZXJ5LHZhcmlhYmxlczoiIixyZXNwb25zZXM6YS5MaXN0KFtdKSxlbmRwb2ludDplLG9wZXJhdGlvbk5hbWU6dm9pZCAwLGhhc011dGF0aW9uOiExLGhhc1N1YnNjcmlwdGlvbjohMSxoYXNRdWVyeTohMSxxdWVyeVR5cGVzOm8uZ2V0UXVlcnlUeXBlcyh0LmRlZmF1bHRRdWVyeSksc3Vic2NyaXB0aW9uQWN0aXZlOiExLGRhdGU6bmV3IERhdGUsc3RhcnJlZDohMSxxdWVyeVJ1bm5pbmc6ITEsb3BlcmF0aW9uczphLkxpc3QoW10pLGlzUmVsb2FkaW5nU2NoZW1hOiExLGlzU2NoZW1hUGVuZGluZ1VwZGF0ZTohMSxyZXNwb25zZUV4dGVuc2lvbnM6e30scXVlcnlWYXJpYWJsZXNBY3RpdmU6ITEsZW5kcG9pbnRVbnJlYWNoYWJsZTohMSxlZGl0b3JGbGV4OjEsdmFyaWFibGVFZGl0b3JPcGVuOiExLHZhcmlhYmxlRWRpdG9ySGVpZ2h0OjIwMCxyZXNwb25zZVRyYWNpbmdPcGVuOiExLHJlc3BvbnNlVHJhY2luZ0hlaWdodDozMDAsZG9jRXhwbG9yZXJXaWR0aDozNTAsdmFyaWFibGVUb1R5cGU6YS5NYXAoe30pLGhlYWRlcnM6IiIsZmlsZTp2b2lkIDAsaXNGaWxlOiExLG5hbWU6dm9pZCAwLGZpbGVQYXRoOnZvaWQgMCxzZWxlY3RlZFVzZXJUb2tlbjp2b2lkIDAsaGFzQ2hhbmdlZDp2b2lkIDAsYWJzb2x1dGVQYXRoOnZvaWQgMCxpc1NldHRpbmdzVGFiOnZvaWQgMCxpc0NvbmZpZ1RhYjp2b2lkIDAsY3VycmVudFF1ZXJ5U3RhcnRUaW1lOnZvaWQgMCxjdXJyZW50UXVlcnlFbmRUaW1lOnZvaWQgMCxuZXh0UXVlcnlTdGFydFRpbWU6dm9pZCAwLHRyYWNpbmdTdXBwb3J0ZWQ6dm9pZCAwLGNoYW5nZWQ6dm9pZCAwLHNjcm9sbFRvcDp2b2lkIDB9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDY0KSxvPW4oMjQ1KSxhPW4oMTQpO3QuY29sdW1uV2lkdGg9MzAwLHQuaW50cm9zcGVjdGlvblF1ZXJ5PSJcbiAgcXVlcnkgSW50cm9zcGVjdGlvblF1ZXJ5IHtcbiAgICBfX3NjaGVtYSB7XG4gICAgICBxdWVyeVR5cGUgeyBuYW1lIH1cbiAgICAgIG11dGF0aW9uVHlwZSB7IG5hbWUgfVxuICAgICAgc3Vic2NyaXB0aW9uVHlwZSB7IG5hbWUgfVxuICAgICAgdHlwZXMge1xuICAgICAgICAuLi5GdWxsVHlwZVxuICAgICAgfVxuICAgICAgZGlyZWN0aXZlcyB7XG4gICAgICAgIG5hbWVcbiAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgbG9jYXRpb25zXG4gICAgICAgIGFyZ3Mge1xuICAgICAgICAgIC4uLklucHV0VmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZyYWdtZW50IEZ1bGxUeXBlIG9uIF9fVHlwZSB7XG4gICAga2luZFxuICAgIG5hbWVcbiAgICBkZXNjcmlwdGlvblxuICAgIGZpZWxkcyhpbmNsdWRlRGVwcmVjYXRlZDogdHJ1ZSkge1xuICAgICAgbmFtZVxuICAgICAgZGVzY3JpcHRpb25cbiAgICAgIGFyZ3Mge1xuICAgICAgICAuLi5JbnB1dFZhbHVlXG4gICAgICB9XG4gICAgICB0eXBlIHtcbiAgICAgICAgLi4uVHlwZVJlZlxuICAgICAgfVxuICAgICAgaXNEZXByZWNhdGVkXG4gICAgICBkZXByZWNhdGlvblJlYXNvblxuICAgIH1cbiAgICBpbnB1dEZpZWxkcyB7XG4gICAgICAuLi5JbnB1dFZhbHVlXG4gICAgfVxuICAgIGludGVyZmFjZXMge1xuICAgICAgLi4uVHlwZVJlZlxuICAgIH1cbiAgICBlbnVtVmFsdWVzKGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlKSB7XG4gICAgICBuYW1lXG4gICAgICBkZXNjcmlwdGlvblxuICAgICAgaXNEZXByZWNhdGVkXG4gICAgICBkZXByZWNhdGlvblJlYXNvblxuICAgIH1cbiAgICBwb3NzaWJsZVR5cGVzIHtcbiAgICAgIC4uLlR5cGVSZWZcbiAgICB9XG4gIH1cblxuICBmcmFnbWVudCBJbnB1dFZhbHVlIG9uIF9fSW5wdXRWYWx1ZSB7XG4gICAgbmFtZVxuICAgIGRlc2NyaXB0aW9uXG4gICAgdHlwZSB7IC4uLlR5cGVSZWYgfVxuICAgIGRlZmF1bHRWYWx1ZVxuICB9XG5cbiAgZnJhZ21lbnQgVHlwZVJlZiBvbiBfX1R5cGUge1xuICAgIGtpbmRcbiAgICBuYW1lXG4gICAgb2ZUeXBlIHtcbiAgICAgIGtpbmRcbiAgICAgIG5hbWVcbiAgICAgIG9mVHlwZSB7XG4gICAgICAgIGtpbmRcbiAgICAgICAgbmFtZVxuICAgICAgICBvZlR5cGUge1xuICAgICAgICAgIGtpbmRcbiAgICAgICAgICBuYW1lXG4gICAgICAgICAgb2ZUeXBlIHtcbiAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIG9mVHlwZSB7XG4gICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICBvZlR5cGUge1xuICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgb2ZUeXBlIHtcbiAgICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiIsdC5kZWZhdWx0UXVlcnk9IiMgV3JpdGUgeW91ciBxdWVyeSBvciBtdXRhdGlvbiBoZXJlXG4iLHQubW9kYWxTdHlsZT17b3ZlcmxheTp7ekluZGV4Ojk5OTk5LGJhY2tncm91bmRDb2xvcjoicmdiYSgxNSwzMiw0NiwuOSkiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciJ9LGNvbnRlbnQ6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6OTc2LGhlaWdodDoiYXV0byIsdG9wOiJpbml0aWFsIixsZWZ0OiJpbml0aWFsIixyaWdodDoiaW5pdGlhbCIsYm90dG9tOiJpbml0aWFsIixib3JkZXJSYWRpdXM6MixwYWRkaW5nOjAsYm9yZGVyOiJub25lIixiYWNrZ3JvdW5kOiJub25lIixib3hTaGFkb3c6IjAgMXB4IDdweCByZ2JhKDAsMCwwLC4yKSJ9fSx0LmdldERlZmF1bHRTZXNzaW9uPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oMSksYT1vLnN0eWxlZC5kaXYobHx8KGw9cihbIlxuICAvKiBDb21tZW50ICovXG4gIC5jbS1jb21tZW50IHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogUHVuY3R1YXRpb24gKi9cbiAgLmNtLXB1bmN0dWF0aW9uIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogUHJvcHBlcnkgKi9cbiAgLmNtLXByb3BlcnR5IHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogS2V5d29yZCAqL1xuICAuY20ta2V5d29yZCB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIE9wZXJhdGlvbk5hbWUsIEZyYWdtZW50TmFtZSAqL1xuICAuY20tZGVmIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogRmllbGRBbGlhcyAqL1xuICAuY20tcXVhbGlmaWVyIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogQXJndW1lbnROYW1lIGFuZCBPYmplY3RGaWVsZE5hbWUgKi9cbiAgLmNtLWF0dHJpYnV0ZSB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIE51bWJlciAqL1xuICAuY20tbnVtYmVyIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogU3RyaW5nICovXG4gIC5jbS1zdHJpbmcge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBCb29sZWFuICovXG4gIC5jbS1idWlsdGluIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogRW51bVZhbHVlICovXG4gIC5jbS1zdHJpbmctMiB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIFZhcmlhYmxlICovXG4gIC5jbS12YXJpYWJsZSB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIERpcmVjdGl2ZSAqL1xuICAuY20tbWV0YSB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIFR5cGUgKi9cbiAgLmNtLWF0b20ge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBDb21tYSAqL1xuICAuY20td3Mge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxIDEgMCU7XG4gIGZsZXgtZmxvdzogY29sdW1uO1xuXG4gIC5Db2RlTWlycm9yIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgIGZvbnQtZmFtaWx5OiAiLCI7XG4gICAgZm9udC1zaXplOiAiLCI7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbmVzIHtcbiAgICBwYWRkaW5nOiAyMHB4IDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1ndXR0ZXJzIHtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gIH1cblxuICAuQ29kZU1pcnJvciBzcGFuW3JvbGU9J3ByZXNlbnRhdGlvbiddIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogQ1VSU09SICovXG5cbiAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gICAgYm9yZGVyLWxlZnQ6ICIsIjtcbiAgICBib3JkZXItYm90dG9tOiAiLCI7XG4gIH1cbiAgLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqL1xuICAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3Ige1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgc2lsdmVyO1xuICB9XG4gIC5Db2RlTWlycm9yLmNtLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlcjogMDtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAuQ29kZU1pcnJvci5jbS1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xuICAgIHotaW5kZXg6IDE7XG4gIH1cblxuICAuY20tYW5pbWF0ZS1mYXQtY3Vyc29yIHtcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcbiAgICBib3JkZXI6IDA7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgQC13ZWJraXQta2V5ZnJhbWVzIGJsaW5rIHtcbiAgICAwJSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN2U3O1xuICAgIH1cbiAgICA1MCUge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN2U3O1xuICAgIH1cbiAgfVxuICBAa2V5ZnJhbWVzIGJsaW5rIHtcbiAgICAwJSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN2U3O1xuICAgIH1cbiAgICA1MCUge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN2U3O1xuICAgIH1cbiAgfVxuXG4gIC5Db2RlTWlycm9yLWZvbGRtYXJrZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiAjMDhmO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjNDNhOGZmLCAjMGY4M2U4KTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpLCBpbnNldCAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LWZhbWlseTogYXJpYWw7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIG1hcmdpbjogMCAzcHg7XG4gICAgcGFkZGluZzogMHB4IDRweCAxcHg7XG4gICAgdGV4dC1zaGFkb3c6IDAgLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIH1cblxuICBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtcbiAgICAvKiBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpOyAqL1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7XG4gICAgY29sb3I6IHJnYigyNDIsIDkyLCA4NCk7XG4gIH1cblxuICAudG9vbGJhci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6ICNmZGZkZmQ7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNmYmZiZmIsICNmOGY4ZjgpO1xuICAgIGJvcmRlci1jb2xvcjogI2QzZDNkMyAjZDBkMGQwICNiYWJhYmE7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiAwLjVweDtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTMpLCBpbnNldCAwIDFweCAjZmZmO1xuICAgIGNvbG9yOiAjNDQ0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiAwIDVweCAwO1xuICAgIHBhZGRpbmc6IDJweCA4cHggNHB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuICAudG9vbGJhci1idXR0b246YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2VjZWNlYywgI2Q4ZDhkOCk7XG4gICAgYm9yZGVyLWNvbG9yOiAjY2FjYWNhICNjOWM5YzkgI2IwYjBiMDtcbiAgICBib3gtc2hhZG93OiAwIDFweCAwICNmZmYsIGluc2V0IDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSxcbiAgICAgIGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICB9XG4gIC50b29sYmFyLWJ1dHRvbi5lcnJvciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNmZGYzZjMsICNlNmQ2ZDcpO1xuICAgIGNvbG9yOiAjYjAwO1xuICB9XG5cbiAgLmF1dG9JbnNlcnRlZExlYWYuY20tcHJvcGVydHkge1xuICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiA2cztcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDZzO1xuICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGluc2VydGlvbkZhZGU7XG4gICAgYW5pbWF0aW9uLW5hbWU6IGluc2VydGlvbkZhZGU7XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIG1hcmdpbjogLTJweCAtNHB4IC0xcHg7XG4gICAgcGFkZGluZzogMnB4IDRweCAxcHg7XG4gIH1cblxuICBALXdlYmtpdC1rZXlmcmFtZXMgaW5zZXJ0aW9uRmFkZSB7XG4gICAgZnJvbSxcbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICAgIH1cblxuICAgIDE1JSxcbiAgICA4NSUge1xuICAgICAgYmFja2dyb3VuZDogI2ZiZmZjOTtcbiAgICAgIGJvcmRlci1jb2xvcjogI2YwZjNjMDtcbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIGluc2VydGlvbkZhZGUge1xuICAgIGZyb20sXG4gICAgdG8ge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgICB9XG5cbiAgICAxNSUsXG4gICAgODUlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmYmZmYzk7XG4gICAgICBib3JkZXItY29sb3I6ICNmMGYzYzA7XG4gICAgfVxuICB9XG5cbiAgLkNvZGVNaXJyb3IgcHJlIHtcbiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi9cbiAgfVxuXG4gIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsXG4gIC5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqL1xuICB9XG5cbiAgLyogR1VUVEVSICovXG5cbiAgLkNvZGVNaXJyb3ItZ3V0dGVycyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbiAgLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuICAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHtcbiAgICBmb250LWZhbWlseTogT3BlbiBTYW5zLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAiLCI7XG4gICAgY29sb3I6ICIsIjtcbiAgICBtaW4td2lkdGg6IDIwcHg7XG4gICAgcGFkZGluZzogMCAzcHggMCA1cHg7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWd1dHRlcm1hcmtlciB7XG4gICAgY29sb3I6IGJsYWNrO1xuICB9XG4gIC5Db2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUge1xuICAgIGNvbG9yOiAjOTk5O1xuICB9XG5cbiAgLmNtLXRhYiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLXJ1bGVyIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG4gIC5jbS1uZWdhdGl2ZSB7XG4gICAgY29sb3I6ICNkNDQ7XG4gIH1cbiAgLmNtLXBvc2l0aXZlIHtcbiAgICBjb2xvcjogIzI5MjtcbiAgfVxuICAuY20taGVhZGVyLFxuICAuY20tc3Ryb25nIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuICAuY20tZW0ge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAuY20tbGluayB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbiAgLmNtLXN0cmlrZXRocm91Z2gge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICB9XG5cbiAgLmNtLXMtZGVmYXVsdCAuY20tZXJyb3Ige1xuICAgIGNvbG9yOiAjZjAwO1xuICB9XG4gIC5jbS1pbnZhbGlkY2hhciB7XG4gICAgY29sb3I6ICNmMDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1jb21wb3Npbmcge1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZDtcbiAgfVxuICAuQ29kZU1pcnJvci1tYXRjaGluZ3RhZyB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE1MCwgMCwgMC4zKTtcbiAgfVxuICAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQge1xuICAgIGJhY2tncm91bmQ6ICNlOGYyZmY7XG4gIH1cblxuICAvKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZlxuICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqL1xuXG4gIC5Db2RlTWlycm9yIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIH1cblxuICAuQ29kZU1pcnJvci1zY3JvbGwge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovXG4gICAgLyogU2VlIG92ZXJmbG93OiBoaWRkZW4gaW4gLkNvZGVNaXJyb3IgKi9cbiAgICAvKiBtYXJnaW4tYm90dG9tOiAtMzBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OyAqL1xuICAgIG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcgZnJvbSBoaWdobGlnaHRpbmcgdGhlIGVsZW1lbnQgKi9cbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC8qIHBhZGRpbmctYm90dG9tOiAzMHB4OyAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAmOmhvdmVyIHtcbiAgICAgIG92ZXJmbG93OiBzY3JvbGwgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbiAgLkNvZGVNaXJyb3Itc2l6ZXIge1xuICAgIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAvKiBUaGUgZmFrZSwgdmlzaWJsZSBzY3JvbGxiYXJzLiBVc2VkIHRvIGZvcmNlIHJlZHJhdyBkdXJpbmcgc2Nyb2xsaW5nXG4gICBiZWZvcmUgYWN0dWFsIHNjcm9sbGluZyBoYXBwZW5zLCB0aHVzIHByZXZlbnRpbmcgc2hha2luZyBhbmRcbiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqL1xuICAuQ29kZU1pcnJvci12c2Nyb2xsYmFyLFxuICAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLFxuICAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLFxuICAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDY7XG4gIH1cbiAgLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gIH1cbiAgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgb3ZlcmZsb3cteDogc2Nyb2xsO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgfVxuICAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1ndXR0ZXJzIHtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB6LWluZGV4OiAzO1xuICAgIG1hcmdpbi1sZWZ0OiAzcHg7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZ3V0dGVyIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IC0zMHB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqL1xuICAgICp6b29tOiAxO1xuICAgICpkaXNwbGF5OiBpbmxpbmU7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIge1xuICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogNDtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgei1pbmRleDogNDtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXItZWx0IHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDQ7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIge1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW5lcyB7XG4gICAgY3Vyc29yOiB0ZXh0O1xuICAgIG1pbi1oZWlnaHQ6IDFweDsgLyogcHJldmVudHMgY29sbGFwc2luZyBiZWZvcmUgZmlyc3QgZHJhdyAqL1xuICB9XG4gIC5Db2RlTWlycm9yIHByZSB7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3JkZXItd2lkdGg6IDA7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIC13ZWJraXQtZm9udC12YXJpYW50LWxpZ2F0dXJlczogbm9uZTtcbiAgICBmb250LXZhcmlhbnQtbGlnYXR1cmVzOiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICB6LWluZGV4OiAyO1xuICB9XG4gIC5Db2RlTWlycm9yLXdyYXAgcHJlIHtcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHotaW5kZXg6IDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW5ld2lkZ2V0IHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLXdpZGdldCB7XG4gIH1cblxuICAuQ29kZU1pcnJvci1jb2RlIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLyogRm9yY2UgY29udGVudC1ib3ggc2l6aW5nIGZvciB0aGUgZWxlbWVudHMgd2hlcmUgd2UgZXhwZWN0IGl0ICovXG4gIC5Db2RlTWlycm9yLXNjcm9sbCxcbiAgLkNvZGVNaXJyb3Itc2l6ZXIsXG4gIC5Db2RlTWlycm9yLWd1dHRlcixcbiAgLkNvZGVNaXJyb3ItZ3V0dGVycyxcbiAgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIH1cblxuICAuQ29kZU1pcnJvci1tZWFzdXJlIHtcbiAgICBoZWlnaHQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItY3Vyc29yIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbiAgLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gIH1cblxuICBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHotaW5kZXg6IDM7XG4gIH1cbiAgZGl2LkNvZGVNaXJyb3ItZHJhZ2N1cnNvcnMge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4gIC5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuICAuQ29kZU1pcnJvci1jcm9zc2hhaXIge1xuICAgIGN1cnNvcjogY3Jvc3NoYWlyO1xuICB9XG4gIC5Db2RlTWlycm9yLWxpbmU6Oi1tb3otc2VsZWN0aW9uLFxuICAuQ29kZU1pcnJvci1saW5lID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24sXG4gIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuICAuQ29kZU1pcnJvci1saW5lOjpzZWxlY3Rpb24sXG4gIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuOjpzZWxlY3Rpb24sXG4gIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gIH1cbiAgLkNvZGVNaXJyb3ItbGluZTo6LW1vei1zZWxlY3Rpb24sXG4gIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuOjotbW96LXNlbGVjdGlvbixcbiAgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW4gPiBzcGFuOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG5cbiAgLmNtLXNlYXJjaGluZyB7XG4gICAgYmFja2dyb3VuZDogI2ZmYTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAwLjQpO1xuICB9XG5cbiAgLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqL1xuICAuQ29kZU1pcnJvciBzcGFuIHtcbiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xuICB9XG5cbiAgLyogVXNlZCB0byBmb3JjZSBhIGJvcmRlciBtb2RlbCBmb3IgYSBub2RlICovXG4gIC5jbS1mb3JjZS1ib3JkZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuMXB4O1xuICB9XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqL1xuICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIH1cbiAgfVxuXG4gIC8qIFNlZSBpc3N1ZSAjMjkwMSAqL1xuICAuY20tdGFiLXdyYXAtaGFjazphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gIH1cblxuICAvKiBIZWxwIHVzZXJzIHVzZSBtYXJrc2VsZWN0aW9uIHRvIHNhZmVseSBzdHlsZSB0ZXh0IGJhY2tncm91bmQgKi9cbiAgc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkdGV4dCB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWRpYWxvZyB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMC4xZW0gMC44ZW07XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDE1O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZGlhbG9nLXRvcCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgdG9wOiAwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZGlhbG9nLWJvdHRvbSB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWU7XG4gICAgYm90dG9tOiAwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZGlhbG9nIGlucHV0IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZDNkNmRiO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICB3aWR0aDogMjBlbTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWRpYWxvZyBidXR0b24ge1xuICAgIGZvbnQtc2l6ZTogNzAlO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZm9sZGd1dHRlciB7XG4gICAgd2lkdGg6IDAuN2VtO1xuICB9XG4gIC5Db2RlTWlycm9yLWZvbGRndXR0ZXItb3BlbixcbiAgLkNvZGVNaXJyb3ItZm9sZGd1dHRlci1mb2xkZWQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuICAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLW9wZW46YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdcdTI1YmUnO1xuICB9XG4gIC5Db2RlTWlycm9yLWZvbGRndXR0ZXItZm9sZGVkOmFmdGVyIHtcbiAgICBjb250ZW50OiAnXHUyNWI4JztcbiAgfVxuICAvKiBUaGUgbGludCBtYXJrZXIgZ3V0dGVyICovXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFya2VycyB7XG4gICAgd2lkdGg6IDE2cHg7XG4gIH1cblxuICAuQ29kZU1pcnJvci1qdW1wLXRva2VuIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbiJdLFsiXG4gIC8qIENvbW1lbnQgKi9cbiAgLmNtLWNvbW1lbnQge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBQdW5jdHVhdGlvbiAqL1xuICAuY20tcHVuY3R1YXRpb24ge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBQcm9wcGVyeSAqL1xuICAuY20tcHJvcGVydHkge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBLZXl3b3JkICovXG4gIC5jbS1rZXl3b3JkIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogT3BlcmF0aW9uTmFtZSwgRnJhZ21lbnROYW1lICovXG4gIC5jbS1kZWYge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBGaWVsZEFsaWFzICovXG4gIC5jbS1xdWFsaWZpZXIge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBBcmd1bWVudE5hbWUgYW5kIE9iamVjdEZpZWxkTmFtZSAqL1xuICAuY20tYXR0cmlidXRlIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogTnVtYmVyICovXG4gIC5jbS1udW1iZXIge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBTdHJpbmcgKi9cbiAgLmNtLXN0cmluZyB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIEJvb2xlYW4gKi9cbiAgLmNtLWJ1aWx0aW4ge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBFbnVtVmFsdWUgKi9cbiAgLmNtLXN0cmluZy0yIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogVmFyaWFibGUgKi9cbiAgLmNtLXZhcmlhYmxlIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogRGlyZWN0aXZlICovXG4gIC5jbS1tZXRhIHtcbiAgICBjb2xvcjogIiwiO1xuICB9XG5cbiAgLyogVHlwZSAqL1xuICAuY20tYXRvbSB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuXG4gIC8qIENvbW1hICovXG4gIC5jbS13cyB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDEgMSAwJTtcbiAgZmxleC1mbG93OiBjb2x1bW47XG5cbiAgLkNvZGVNaXJyb3Ige1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gICAgZm9udC1mYW1pbHk6ICIsIjtcbiAgICBmb250LXNpemU6ICIsIjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGluZXMge1xuICAgIHBhZGRpbmc6IDIwcHggMDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWd1dHRlcnMge1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yIHNwYW5bcm9sZT0ncHJlc2VudGF0aW9uJ10ge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cblxuICAvKiBDVVJTT1IgKi9cblxuICAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3Ige1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgICBib3JkZXItbGVmdDogIiwiO1xuICAgIGJvcmRlci1ib3R0b206ICIsIjtcbiAgfVxuICAvKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovXG4gIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7XG4gIH1cbiAgLkNvZGVNaXJyb3IuY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3Ige1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyOiAwO1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5Db2RlTWlycm9yLmNtLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7XG4gICAgei1pbmRleDogMTtcbiAgfVxuXG4gIC5jbS1hbmltYXRlLWZhdC1jdXJzb3Ige1xuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcbiAgICBhbmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlO1xuICAgIGJvcmRlcjogMDtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICBALXdlYmtpdC1rZXlmcmFtZXMgYmxpbmsge1xuICAgIDAlIHtcbiAgICAgIGJhY2tncm91bmQ6ICM3ZTc7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIGJhY2tncm91bmQ6ICM3ZTc7XG4gICAgfVxuICB9XG4gIEBrZXlmcmFtZXMgYmxpbmsge1xuICAgIDAlIHtcbiAgICAgIGJhY2tncm91bmQ6ICM3ZTc7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIGJhY2tncm91bmQ6ICM3ZTc7XG4gICAgfVxuICB9XG5cbiAgLkNvZGVNaXJyb3ItZm9sZG1hcmtlciB7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJhY2tncm91bmQ6ICMwOGY7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCM0M2E4ZmYsICMwZjgzZTgpO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksIGluc2V0IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtZmFtaWx5OiBhcmlhbDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgbWFyZ2luOiAwIDNweDtcbiAgICBwYWRkaW5nOiAwcHggNHB4IDFweDtcbiAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgfVxuXG4gIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQge1xuICAgIC8qIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7ICovXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtcbiAgICBjb2xvcjogcmdiKDI0MiwgOTIsIDg0KTtcbiAgfVxuXG4gIC50b29sYmFyLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZDogI2ZkZmRmZDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2ZiZmJmYiwgI2Y4ZjhmOCk7XG4gICAgYm9yZGVyLWNvbG9yOiAjZDNkM2QzICNkMGQwZDAgI2JhYmFiYTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItd2lkdGg6IDAuNXB4O1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMyksIGluc2V0IDAgMXB4ICNmZmY7XG4gICAgY29sb3I6ICM0NDQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW46IDAgNXB4IDA7XG4gICAgcGFkZGluZzogMnB4IDhweCA0cHg7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG4gIC50b29sYmFyLWJ1dHRvbjphY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjZWNlY2VjLCAjZDhkOGQ4KTtcbiAgICBib3JkZXItY29sb3I6ICNjYWNhY2EgI2M5YzljOSAjYjBiMGIwO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwgaW5zZXQgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLFxuICAgICAgaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gIH1cbiAgLnRvb2xiYXItYnV0dG9uLmVycm9yIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2ZkZjNmMywgI2U2ZDZkNyk7XG4gICAgY29sb3I6ICNiMDA7XG4gIH1cblxuICAuYXV0b0luc2VydGVkTGVhZi5jbS1wcm9wZXJ0eSB7XG4gICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDZzO1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogNnM7XG4gICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogaW5zZXJ0aW9uRmFkZTtcbiAgICBhbmltYXRpb24tbmFtZTogaW5zZXJ0aW9uRmFkZTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgbWFyZ2luOiAtMnB4IC00cHggLTFweDtcbiAgICBwYWRkaW5nOiAycHggNHB4IDFweDtcbiAgfVxuXG4gIEAtd2Via2l0LWtleWZyYW1lcyBpbnNlcnRpb25GYWRlIHtcbiAgICBmcm9tLFxuICAgIHRvIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gICAgfVxuXG4gICAgMTUlLFxuICAgIDg1JSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmJmZmM5O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjZjBmM2MwO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgaW5zZXJ0aW9uRmFkZSB7XG4gICAgZnJvbSxcbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICAgIH1cblxuICAgIDE1JSxcbiAgICA4NSUge1xuICAgICAgYmFja2dyb3VuZDogI2ZiZmZjOTtcbiAgICAgIGJvcmRlci1jb2xvcjogI2YwZjNjMDtcbiAgICB9XG4gIH1cblxuICAuQ29kZU1pcnJvciBwcmUge1xuICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqL1xuICB9XG5cbiAgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlcixcbiAgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IC8qIFRoZSBsaXR0bGUgc3F1YXJlIGJldHdlZW4gSCBhbmQgViBzY3JvbGxiYXJzICovXG4gIH1cblxuICAvKiBHVVRURVIgKi9cblxuICAuQ29kZU1pcnJvci1ndXR0ZXJzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuICAuQ29kZU1pcnJvci1saW5lbnVtYmVycyB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4gIC5Db2RlTWlycm9yLWxpbmVudW1iZXIge1xuICAgIGZvbnQtZmFtaWx5OiBPcGVuIFNhbnMsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6ICIsIjtcbiAgICBjb2xvcjogIiwiO1xuICAgIG1pbi13aWR0aDogMjBweDtcbiAgICBwYWRkaW5nOiAwIDNweCAwIDVweDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyIHtcbiAgICBjb2xvcjogYmxhY2s7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyLXN1YnRsZSB7XG4gICAgY29sb3I6ICM5OTk7XG4gIH1cblxuICAuY20tdGFiIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItcnVsZXIge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbiAgLmNtLW5lZ2F0aXZlIHtcbiAgICBjb2xvcjogI2Q0NDtcbiAgfVxuICAuY20tcG9zaXRpdmUge1xuICAgIGNvbG9yOiAjMjkyO1xuICB9XG4gIC5jbS1oZWFkZXIsXG4gIC5jbS1zdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG4gIC5jbS1lbSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gIC5jbS1saW5rIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuICAuY20tc3RyaWtldGhyb3VnaCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gIH1cblxuICAuY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7XG4gICAgY29sb3I6ICNmMDA7XG4gIH1cbiAgLmNtLWludmFsaWRjaGFyIHtcbiAgICBjb2xvcjogI2YwMDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWNvbXBvc2luZyB7XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkO1xuICB9XG4gIC5Db2RlTWlycm9yLW1hdGNoaW5ndGFnIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTUwLCAwLCAwLjMpO1xuICB9XG4gIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7XG4gICAgYmFja2dyb3VuZDogI2U4ZjJmZjtcbiAgfVxuXG4gIC8qIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBjb250YWlucyBzdHlsZXMgcmVsYXRlZCB0byB0aGUgbWVjaGFuaWNzIG9mXG4gICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovXG5cbiAgLkNvZGVNaXJyb3Ige1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi9cbiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqL1xuICAgIC8qIG1hcmdpbi1ib3R0b206IC0zMHB4O1xuICAgIG1hcmdpbi1yaWdodDogLTMwcHg7ICovXG4gICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqL1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLyogcGFkZGluZy1ib3R0b206IDMwcHg7ICovXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6aG92ZXIge1xuICAgICAgb3ZlcmZsb3c6IHNjcm9sbCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICAuQ29kZU1pcnJvci1zaXplciB7XG4gICAgYm9yZGVyLXJpZ2h0OiAzMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmdcbiAgIGJlZm9yZSBhY3R1YWwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZFxuICAgZmxpY2tlcmluZyBhcnRpZmFjdHMuICovXG4gIC5Db2RlTWlycm9yLXZzY3JvbGxiYXIsXG4gIC5Db2RlTWlycm9yLWhzY3JvbGxiYXIsXG4gIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsXG4gIC5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogNjtcbiAgfVxuICAuQ29kZU1pcnJvci12c2Nyb2xsYmFyIHtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgfVxuICAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICB9XG4gIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIge1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWd1dHRlcnMge1xuICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHotaW5kZXg6IDM7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIC8qIEhhY2sgdG8gbWFrZSBJRTcgYmVoYXZlICovXG4gICAgKnpvb206IDE7XG4gICAgKmRpc3BsYXk6IGlubGluZTtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA0O1xuICB9XG4gIC5Db2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5kIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB6LWluZGV4OiA0O1xuICB9XG4gIC5Db2RlTWlycm9yLWd1dHRlci1lbHQge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogNDtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciB7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbmVzIHtcbiAgICBjdXJzb3I6IHRleHQ7XG4gICAgbWluLWhlaWdodDogMXB4OyAvKiBwcmV2ZW50cyBjb2xsYXBzaW5nIGJlZm9yZSBmaXJzdCBkcmF3ICovXG4gIH1cbiAgLkNvZGVNaXJyb3IgcHJlIHtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi9cbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGJvcmRlci13aWR0aDogMDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgLXdlYmtpdC1mb250LXZhcmlhbnQtbGlnYXR1cmVzOiBub25lO1xuICAgIGZvbnQtdmFyaWFudC1saWdhdHVyZXM6IG5vbmU7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIHdvcmQtd3JhcDogbm9ybWFsO1xuICAgIHotaW5kZXg6IDI7XG4gIH1cbiAgLkNvZGVNaXJyb3Itd3JhcCBwcmUge1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgd29yZC1icmVhazogbm9ybWFsO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgei1pbmRleDogMDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbmV3aWRnZXQge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICB9XG5cbiAgLkNvZGVNaXJyb3Itd2lkZ2V0IHtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWNvZGUge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAvKiBGb3JjZSBjb250ZW50LWJveCBzaXppbmcgZm9yIHRoZSBlbGVtZW50cyB3aGVyZSB3ZSBleHBlY3QgaXQgKi9cbiAgLkNvZGVNaXJyb3Itc2Nyb2xsLFxuICAuQ29kZU1pcnJvci1zaXplcixcbiAgLkNvZGVNaXJyb3ItZ3V0dGVyLFxuICAuQ29kZU1pcnJvci1ndXR0ZXJzLFxuICAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLW1lYXN1cmUge1xuICAgIGhlaWdodDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1jdXJzb3Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuICAuQ29kZU1pcnJvci1tZWFzdXJlIHByZSB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgfVxuXG4gIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgei1pbmRleDogMztcbiAgfVxuICBkaXYuQ29kZU1pcnJvci1kcmFnY3Vyc29ycyB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLXNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4gIC5Db2RlTWlycm9yLWNyb3NzaGFpciB7XG4gICAgY3Vyc29yOiBjcm9zc2hhaXI7XG4gIH1cbiAgLkNvZGVNaXJyb3ItbGluZTo6LW1vei1zZWxlY3Rpb24sXG4gIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuOjotbW96LXNlbGVjdGlvbixcbiAgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW4gPiBzcGFuOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4gIC5Db2RlTWlycm9yLWxpbmU6OnNlbGVjdGlvbixcbiAgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW46OnNlbGVjdGlvbixcbiAgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW4gPiBzcGFuOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuICAuQ29kZU1pcnJvci1saW5lOjotbW96LXNlbGVjdGlvbixcbiAgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW46Oi1tb3otc2VsZWN0aW9uLFxuICAuQ29kZU1pcnJvci1saW5lID4gc3BhbiA+IHNwYW46Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gIH1cblxuICAuY20tc2VhcmNoaW5nIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZhO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIDAuNCk7XG4gIH1cblxuICAvKiBJRTcgaGFjayB0byBwcmV2ZW50IGl0IGZyb20gcmV0dXJuaW5nIGZ1bm55IG9mZnNldFRvcHMgb24gdGhlIHNwYW5zICovXG4gIC5Db2RlTWlycm9yIHNwYW4ge1xuICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207XG4gIH1cblxuICAvKiBVc2VkIHRvIGZvcmNlIGEgYm9yZGVyIG1vZGVsIGZvciBhIG5vZGUgKi9cbiAgLmNtLWZvcmNlLWJvcmRlciB7XG4gICAgcGFkZGluZy1yaWdodDogMC4xcHg7XG4gIH1cblxuICBAbWVkaWEgcHJpbnQge1xuICAgIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovXG4gICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLyogU2VlIGlzc3VlICMyOTAxICovXG4gIC5jbS10YWItd3JhcC1oYWNrOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgfVxuXG4gIC8qIEhlbHAgdXNlcnMgdXNlIG1hcmtzZWxlY3Rpb24gdG8gc2FmZWx5IHN0eWxlIHRleHQgYmFja2dyb3VuZCAqL1xuICBzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0IHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZGlhbG9nIHtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwLjFlbSAwLjhlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1kaWFsb2ctdG9wIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcbiAgICB0b3A6IDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1kaWFsb2ctYm90dG9tIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTtcbiAgICBib3R0b206IDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1kaWFsb2cgaW5wdXQge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkM2Q2ZGI7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIHdpZHRoOiAyMGVtO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItZGlhbG9nIGJ1dHRvbiB7XG4gICAgZm9udC1zaXplOiA3MCU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyIHtcbiAgICB3aWR0aDogMC43ZW07XG4gIH1cbiAgLkNvZGVNaXJyb3ItZm9sZGd1dHRlci1vcGVuLFxuICAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLWZvbGRlZCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC5Db2RlTWlycm9yLWZvbGRndXR0ZXItb3BlbjphZnRlciB7XG4gICAgY29udGVudDogJ1x1MjViZSc7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZm9sZGd1dHRlci1mb2xkZWQ6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdcdTI1YjgnO1xuICB9XG4gIC8qIFRoZSBsaW50IG1hcmtlciBndXR0ZXIgKi9cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrZXJzIHtcbiAgICB3aWR0aDogMTZweDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWp1bXAtdG9rZW4ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmNvbW1lbnR9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucHVuY3R1YXRpb259LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucHJvcGVydHl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMua2V5d29yZH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5kZWZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuZGVmfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmF0dHJpYnV0ZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5udW1iZXJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc3RyaW5nfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmJ1aWx0aW59LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc3RyaW5nMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy52YXJpYWJsZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5tZXRhfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmF0b219LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMud3N9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNldHRpbmdzWyJlZGl0b3IuZm9udEZhbWlseSJdfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zZXR0aW5nc1siZWRpdG9yLmZvbnRTaXplIl0rInB4In0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy50ZXh0fSxmdW5jdGlvbihlKXtyZXR1cm4iYmxvY2siPT09ZS50aGVtZS5zZXR0aW5nc1siZWRpdG9yLmN1cnNvclNoYXBlIl0/ZS50aGVtZS5lZGl0b3JDb2xvdXJzLmN1cnNvckNvbG9yOiJ0cmFuc3BhcmVudCJ9LGZ1bmN0aW9uKGUpe3JldHVybiJsaW5lIj09PWUudGhlbWUuc2V0dGluZ3NbImVkaXRvci5jdXJzb3JTaGFwZSJdPyIxcHggc29saWQgIitlLnRoZW1lLmVkaXRvckNvbG91cnMuY3Vyc29yQ29sb3I6MH0sZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVybGluZSI9PT1lLnRoZW1lLnNldHRpbmdzWyJlZGl0b3IuY3Vyc29yU2hhcGUiXT8iMXB4IHNvbGlkICIrZS50aGVtZS5lZGl0b3JDb2xvdXJzLmN1cnNvckNvbG9yOjB9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuZWRpdG9yQmFja2dyb3VuZH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2V0dGluZ3NbImVkaXRvci5mb250U2l6ZSJdLTIrInB4In0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy50ZXh0SW5hY3RpdmV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc2VsZWN0aW9ufSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnNlbGVjdGlvbn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5zZWxlY3Rpb259LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc2VsZWN0aW9ufSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnNlbGVjdGlvbn0pLHM9by5jcmVhdGVHbG9iYWxTdHlsZShwfHwocD1yKFsnXG4gICo6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDdweDtcbiAgICBoZWlnaHQ6IDdweDtcbiAgfVxuICAqOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgfVxuICAqOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgfVxuICAqOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgbWF4LWhlaWdodDogMTAwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMSwgMSwgMSwgMC4yMyk7XG4gIH1cbiAgKjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMSwgMSwgMSwgMC4zNSk7XG4gIH1cbiAgKjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEsIDEsIDEsIDAuNDgpO1xuICB9XG4gICo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwKTtcbiAgfVxuXG5cbiAgLkNvZGVNaXJyb3ItbGludC10b29sdGlwLCAuQ29kZU1pcnJvci1pbmZvIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDRweCA0cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG4gICAgY29sb3I6ICMwOTE0MUM7XG4gICAgZm9udC1mYW1pbHk6IE9wZW4gU2FucywgbW9ub3NwYWNlO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAxMnB4IDE0cHg7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cztcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1lc3NhZ2UtZXJyb3IsXG4gIC5Db2RlTWlycm9yLWxpbnQtbWVzc2FnZS13YXJuaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1hcmstZXJyb3IsXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFyay13YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGJvdHRvbTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1hcmstZXJyb3Ige1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgd2lkdGg9IjUiIGhlaWdodD0iNCIgdmlld0JveD0iMCAwIDUgNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj5cbiAgICA8cGF0aCBkPSJNNSAxLjAwOTU0QzQuODcxOTEgMS4wMzQ3NCA0Ljc1MjE5IDEuMTA5ODkgNC42NzQgMS4yMzVMMy44NyAyLjUyMTQxQzMuMjgyNDkgMy40NjE0MSAxLjkxMzUgMy40NjE0MSAxLjMyNiAyLjUyMTQxTDAuNTIxOTk4IDEuMjM1QzAuNDA0MzU2IDEuMDQ2NzcgMC4xOTI3MSAwLjk3MTYxOSAwIDEuMDA5NTRWMC4wMDMxNDgyMUMwLjAzMjU4NTUgMC4wMDEwNTIwOSAwLjA2NTIyOTEgMi42ODUwM2UtMDYgMC4wOTc4NzI4IDUuMTQ1OTJlLTA5QzAuMDk3Nzg5MiAtMS43MTUzMWUtMDkgMC4wOTc5NTY0IC0xLjcxNTMxZS0wOSAwLjA5Nzg3MjggNS4xNDU5MmUtMDlDMC41ODY5NTQgNC4wMTU2M2UtMDUgMS4wNzYyNyAwLjIzNTA0MSAxLjM3IDAuNzA1MDAyTDIuMTc0IDEuOTkxNDFDMi4zNjk4MyAyLjMwNDc0IDIuODI2MTYgMi4zMDQ3NCAzLjAyMiAxLjk5MTQxTDMuODI2IDAuNzA1MDAyQzQuMTAwMTIgMC4yNjY0MDggNC41NDQzOCAwLjAzMjQ1NjkgNSAwLjAwMzE0ODE4VjEuMDA5NTRaIiBmaWxsPSIjRkY0RjU2Ii8+XG4gICAgPC9zdmc+XG4gICAgXCcpO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrLXdhcm5pbmcge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBRENBWUFBQUMwOUs3R0FBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUFBZDBTVTFGQjlzSkZoUVhFYmhUZzdZQUFBQVpkRVZZZEVOdmJXMWxiblFBUTNKbFlYUmxaQ0IzYVhSb0lFZEpUVkJYZ1E0WEFBQUFNa2xFUVZRSTEyTmtnSUl2SjNRWE1qQXdkRE4rT2FFYnlzREE0TVBBd05ETndNQ3dpT0hMQ2QxelgwN282a0JWR1FFQUtCQU50b2Jza05NQUFBQUFTVVZPUks1Q1lJST1cJyk7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1hcmtlci1lcnJvcixcbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrZXItd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIHdpZHRoOiAxNnB4O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tZXNzYWdlLWVycm9yLFxuICAuQ29kZU1pcnJvci1saW50LW1lc3NhZ2Utd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGxlZnQ7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIycHg7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1hcmtlci1lcnJvcixcbiAgLkNvZGVNaXJyb3ItbGludC1tZXNzYWdlLWVycm9yIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPlxuICAgIDxjaXJjbGUgY3g9IjgiIGN5PSI4IiByPSI4IiBmaWxsPSIjRkY0RjU2Ii8+XG4gICAgPHBhdGggZD0iTTQuMjkyOSAxMC4yOTI4QzMuOTAyMzcgMTAuNjgzMyAzLjkwMjM3IDExLjMxNjQgNC4yOTI4OSAxMS43MDdDNC42ODM0MSAxMi4wOTc1IDUuMzE2NTcgMTIuMDk3NSA1LjcwNzEgMTEuNzA3TDQuMjkyOSAxMC4yOTI4Wk0xMS43MDcxIDUuNzA3MTFDMTIuMDk3NiA1LjMxNjU5IDEyLjA5NzYgNC42ODM0MyAxMS43MDcxIDQuMjkyOUMxMS4zMTY2IDMuOTAyMzcgMTAuNjgzNCAzLjkwMjM3IDEwLjI5MjkgNC4yOTI4OUwxMS43MDcxIDUuNzA3MTFaTTUuNzA3MSA0LjI5MzAxQzUuMzE2NTcgMy45MDI0OSA0LjY4MzQxIDMuOTAyNSA0LjI5Mjg5IDQuMjkzMDJDMy45MDIzNyA0LjY4MzU1IDMuOTAyMzcgNS4zMTY3MiA0LjI5MjkgNS43MDcyNEw1LjcwNzEgNC4yOTMwMVpNMTAuMjkyOSAxMS43MDcxQzEwLjY4MzQgMTIuMDk3NiAxMS4zMTY2IDEyLjA5NzYgMTEuNzA3MSAxMS43MDcxQzEyLjA5NzYgMTEuMzE2NiAxMi4wOTc2IDEwLjY4MzQgMTEuNzA3MSAxMC4yOTI5TDEwLjI5MjkgMTEuNzA3MVpNNS43MDcxIDExLjcwN0wxMS43MDcxIDUuNzA3MTFMMTAuMjkyOSA0LjI5Mjg5TDQuMjkyOSAxMC4yOTI4TDUuNzA3MSAxMS43MDdaTTQuMjkyOSA1LjcwNzI0TDEwLjI5MjkgMTEuNzA3MUwxMS43MDcxIDEwLjI5MjlMNS43MDcxIDQuMjkzMDFMNC4yOTI5IDUuNzA3MjRaIiBmaWxsPSJ3aGl0ZSIvPlxuICAgIDwvc3ZnPlxuICAgIFwnKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDUwJTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFya2VyLXdhcm5pbmcsXG4gIC5Db2RlTWlycm9yLWxpbnQtbWVzc2FnZS13YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQU1BQUFBb0xROVRBQUFBTmxCTVZFWC91d0R2cndEL3V3RC91d0QvdXdEL3V3RC91d0QvdXdEL3V3RDZ0d0QvdXdBQUFBRHVyd0QydFFEN3VBRCt1Z0FBQUFEL3V3RGhtZVRSQUFBQURIUlNUbE1KOG1OMUVZY2JtaWl4Z0FDbTdXYnVBQUFBVmtsRVFWUjQybjNQVVFxQUlCQkZVVTFMTGMzdS9qZGJPSm9XMVAwOERBOUdiYTgrWVdKNmdOSm9OWUlCekFBMmNoQnRoNWtMbUc5WVVvRzBOSEFVd0ZYd085THVCUUwxZ2lDUWI4Z0M5T3JvMnZwNXJuY0NJWThMOHVFeDVaa0FBQUFBU1VWT1JLNUNZSUk9XCcpO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrZXItbXVsdGlwbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWNBQUFBSENBTUFBQUR6aktmaEFBQUFDVkJNVkVVQUFBQUFBQUMvdjc5MTRreUhBQUFBQVhSU1RsTUFRT2JZWmdBQUFDTkpSRUZVZU5vMWlvRUpBQUFJd216L0g5MGlGRlNHSmdGTWUzZ2FMWjBvZCs5L0FRWjBBRG9zYllyYUFBQUFBRWxGVGtTdVFtQ0NcJyk7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgYm90dG9tO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrLWVycm9yIHtcbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcJ1wnO1xuICAgICAgd2lkdGg6IDUwcHg7XG4gICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBiYWNrZ3JvdW5kOiAjRkY0RjU2O1xuICAgICAgbGVmdDogLTgwcHg7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIHotaW5kZXg6IDEwO1xuICAgIH1cbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbnQtbWVzc2FnZS1lcnJvciBzcGFuIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgYmFja2dyb3VuZDogI0ZGNEY1NjtcbiAgICBmb250LWZhbWlseTogXCdTb3VyY2UgQ29kZSBQcm9cJywgbW9ub3NwYWNlO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHBhZGRpbmc6IDAgNHB4O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludHMge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiAtNnB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtaGVpZ2h0OiAyMGVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTA7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgICY6aG92ZXIge1xuICAgICAgb3ZlcmZsb3cteTogb3ZlcmxheTtcbiAgICB9XG4gIH1cblxuICAuQ29kZU1pcnJvci1oaW50cy13cmFwcGVyIHtcbiAgICBmb250LWZhbWlseTogXCdPcGVuIFNhbnNcJywgc2Fucy1zZXJpZjtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjQ1KTtcbiAgICBtYXJnaW4tbGVmdDogLTZweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1oaW50cy13cmFwcGVyIC5Db2RlTWlycm9yLWhpbnRzIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludCB7XG4gICAgY29sb3I6IHJnYmEoMTUsIDMyLCA0NSwgMC42KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWFyZ2luOiAwO1xuICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICB9XG5cbiAgbGkuQ29kZU1pcnJvci1oaW50LWFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzJhN2VkMztcbiAgICBib3JkZXItdG9wLWNvbG9yOiB3aGl0ZTtcbiAgICBjb2xvcjogd2hpdGU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1oaW50LWluZm9ybWF0aW9uIHtcbiAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTUsIDMyLCA0NSwgMC4wMyk7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludC1pbmZvcm1hdGlvbjpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNjMGMwYzA7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludC1pbmZvcm1hdGlvbiAuY29udGVudCB7XG4gICAgY29sb3I6IHJnYmEoMTUsIDMyLCA0NSwgMC42KTtcbiAgICBib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGxpbmUtY2xhbXA6IDM7XG4gICAgbGluZS1oZWlnaHQ6IDEuMzY7XG4gICAgbWF4LWhlaWdodDogNTlweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IC1vLWVsbGlwc2lzLWxhc3RsaW5lO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludC1pbmZvcm1hdGlvbiAuY29udGVudCBwOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludC1pbmZvcm1hdGlvbiAuY29udGVudCBwOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICAuQ29kZU1pcnJvci1oaW50LWluZm9ybWF0aW9uIC5pbmZvVHlwZSB7XG4gICAgY29sb3I6IHJnYigyNDEsIDE0MywgMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICB9XG4nXSxbJ1xuICAqOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiA3cHg7XG4gICAgaGVpZ2h0OiA3cHg7XG4gIH1cbiAgKjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2Uge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIH1cbiAgKjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gIH1cbiAgKjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIG1heC1oZWlnaHQ6IDEwMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEsIDEsIDEsIDAuMjMpO1xuICB9XG4gICo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEsIDEsIDEsIDAuMzUpO1xuICB9XG4gICo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxLCAxLCAxLCAwLjQ4KTtcbiAgfVxuICAqOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMCk7XG4gIH1cblxuXG4gIC5Db2RlTWlycm9yLWxpbnQtdG9vbHRpcCwgLkNvZGVNaXJyb3ItaW5mbyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCA0cHggNHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xuICAgIGNvbG9yOiAjMDkxNDFDO1xuICAgIGZvbnQtZmFtaWx5OiBPcGVuIFNhbnMsIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMTJweCAxNHB4O1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC40cztcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHM7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tZXNzYWdlLWVycm9yLFxuICAuQ29kZU1pcnJvci1saW50LW1lc3NhZ2Utd2FybmluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrLWVycm9yLFxuICAuQ29kZU1pcnJvci1saW50LW1hcmstd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBib3R0b207XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrLWVycm9yIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHdpZHRoPSI1IiBoZWlnaHQ9IjQiIHZpZXdCb3g9IjAgMCA1IDQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+XG4gICAgPHBhdGggZD0iTTUgMS4wMDk1NEM0Ljg3MTkxIDEuMDM0NzQgNC43NTIxOSAxLjEwOTg5IDQuNjc0IDEuMjM1TDMuODcgMi41MjE0MUMzLjI4MjQ5IDMuNDYxNDEgMS45MTM1IDMuNDYxNDEgMS4zMjYgMi41MjE0MUwwLjUyMTk5OCAxLjIzNUMwLjQwNDM1NiAxLjA0Njc3IDAuMTkyNzEgMC45NzE2MTkgMCAxLjAwOTU0VjAuMDAzMTQ4MjFDMC4wMzI1ODU1IDAuMDAxMDUyMDkgMC4wNjUyMjkxIDIuNjg1MDNlLTA2IDAuMDk3ODcyOCA1LjE0NTkyZS0wOUMwLjA5Nzc4OTIgLTEuNzE1MzFlLTA5IDAuMDk3OTU2NCAtMS43MTUzMWUtMDkgMC4wOTc4NzI4IDUuMTQ1OTJlLTA5QzAuNTg2OTU0IDQuMDE1NjNlLTA1IDEuMDc2MjcgMC4yMzUwNDEgMS4zNyAwLjcwNTAwMkwyLjE3NCAxLjk5MTQxQzIuMzY5ODMgMi4zMDQ3NCAyLjgyNjE2IDIuMzA0NzQgMy4wMjIgMS45OTE0MUwzLjgyNiAwLjcwNTAwMkM0LjEwMDEyIDAuMjY2NDA4IDQuNTQ0MzggMC4wMzI0NTY5IDUgMC4wMDMxNDgxOFYxLjAwOTU0WiIgZmlsbD0iI0ZGNEY1NiIvPlxuICAgIDwvc3ZnPlxuICAgIFwnKTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFyay13YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQURDQVlBQUFDMDlLN0dBQUFBQVhOU1IwSUFyczRjNlFBQUFBWmlTMGRFQVA4QS93RC9vTDJua3dBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5c0pGaFFYRWJoVGc3WUFBQUFaZEVWWWRFTnZiVzFsYm5RQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCWGdRNFhBQUFBTWtsRVFWUUkxMk5rZ0lJdkozUVhNakF3ZEROK09hRWJ5c0RBNE1QQXdORE53TUN3aU9ITENkMXpYMDdvNmtCVkdRRUFLQkFOdG9ic2tOTUFBQUFBU1VWT1JLNUNZSUk9XCcpO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrZXItZXJyb3IsXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFya2VyLXdhcm5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGhlaWdodDogMTZweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aWR0aDogMTZweDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbnQtbWVzc2FnZS1lcnJvcixcbiAgLkNvZGVNaXJyb3ItbGludC1tZXNzYWdlLXdhcm5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBsZWZ0O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgcGFkZGluZy1sZWZ0OiAyMnB4O1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItbGludC1tYXJrZXItZXJyb3IsXG4gIC5Db2RlTWlycm9yLWxpbnQtbWVzc2FnZS1lcnJvciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj5cbiAgICA8Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iOCIgZmlsbD0iI0ZGNEY1NiIvPlxuICAgIDxwYXRoIGQ9Ik00LjI5MjkgMTAuMjkyOEMzLjkwMjM3IDEwLjY4MzMgMy45MDIzNyAxMS4zMTY0IDQuMjkyODkgMTEuNzA3QzQuNjgzNDEgMTIuMDk3NSA1LjMxNjU3IDEyLjA5NzUgNS43MDcxIDExLjcwN0w0LjI5MjkgMTAuMjkyOFpNMTEuNzA3MSA1LjcwNzExQzEyLjA5NzYgNS4zMTY1OSAxMi4wOTc2IDQuNjgzNDMgMTEuNzA3MSA0LjI5MjlDMTEuMzE2NiAzLjkwMjM3IDEwLjY4MzQgMy45MDIzNyAxMC4yOTI5IDQuMjkyODlMMTEuNzA3MSA1LjcwNzExWk01LjcwNzEgNC4yOTMwMUM1LjMxNjU3IDMuOTAyNDkgNC42ODM0MSAzLjkwMjUgNC4yOTI4OSA0LjI5MzAyQzMuOTAyMzcgNC42ODM1NSAzLjkwMjM3IDUuMzE2NzIgNC4yOTI5IDUuNzA3MjRMNS43MDcxIDQuMjkzMDFaTTEwLjI5MjkgMTEuNzA3MUMxMC42ODM0IDEyLjA5NzYgMTEuMzE2NiAxMi4wOTc2IDExLjcwNzEgMTEuNzA3MUMxMi4wOTc2IDExLjMxNjYgMTIuMDk3NiAxMC42ODM0IDExLjcwNzEgMTAuMjkyOUwxMC4yOTI5IDExLjcwNzFaTTUuNzA3MSAxMS43MDdMMTEuNzA3MSA1LjcwNzExTDEwLjI5MjkgNC4yOTI4OUw0LjI5MjkgMTAuMjkyOEw1LjcwNzEgMTEuNzA3Wk00LjI5MjkgNS43MDcyNEwxMC4yOTI5IDExLjcwNzFMMTEuNzA3MSAxMC4yOTI5TDUuNzA3MSA0LjI5MzAxTDQuMjkyOSA1LjcwNzI0WiIgZmlsbD0id2hpdGUiLz5cbiAgICA8L3N2Zz5cbiAgICBcJyk7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCA1MCU7XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1hcmtlci13YXJuaW5nLFxuICAuQ29kZU1pcnJvci1saW50LW1lc3NhZ2Utd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQU5sQk1WRVgvdXdEdnJ3RC91d0QvdXdEL3V3RC91d0QvdXdEL3V3RC91d0Q2dHdEL3V3QUFBQUR1cndEMnRRRDd1QUQrdWdBQUFBRC91d0RobWVUUkFBQUFESFJTVGxNSjhtTjFFWWNibWlpeGdBQ203V2J1QUFBQVZrbEVRVlI0Mm4zUFVRcUFJQkJGVVUxTExjM3UvamRiT0pvVzFQMDhEQTlHYmE4K1lXSjZnTkpvTllJQnpBQTJjaEJ0aDVrTG1HOVlVb0cwTkhBVXdGWHdPOUx1QlFMMWdpQ1FiOGdDOU9ybzJ2cDVybmNDSVk4TDh1RXg1WmtBQUFBQVNVVk9SSzVDWUlJPVwnKTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFya2VyLW11bHRpcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFjQUFBQUhDQU1BQUFEempLZmhBQUFBQ1ZCTVZFVUFBQUFBQUFDL3Y3OTE0a3lIQUFBQUFYUlNUbE1BUU9iWVpnQUFBQ05KUkVGVWVObzFpb0VKQUFBSXdtei9IOTBpRkZTR0pnRk1lM2dhTFowb2QrOS9BUVowQURvc2JZcmFBQUFBQUVsRlRrU3VRbUNDXCcpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IGJvdHRvbTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWxpbnQtbWFyay1lcnJvciB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCdcJztcbiAgICAgIHdpZHRoOiA1MHB4O1xuICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYmFja2dyb3VuZDogI0ZGNEY1NjtcbiAgICAgIGxlZnQ6IC04MHB4O1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICB6LWluZGV4OiAxMDtcbiAgICB9XG4gIH1cblxuICAuQ29kZU1pcnJvci1saW50LW1lc3NhZ2UtZXJyb3Igc3BhbiB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJhY2tncm91bmQ6ICNGRjRGNTY7XG4gICAgZm9udC1mYW1pbHk6IFwnU291cmNlIENvZGUgUHJvXCcsIG1vbm9zcGFjZTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwYWRkaW5nOiAwIDRweDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWhpbnRzIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW4tbGVmdDogLTZweDtcbiAgICBtYXJnaW46IDA7XG4gICAgbWF4LWhlaWdodDogMjBlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICAmOmhvdmVyIHtcbiAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7XG4gICAgfVxuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludHMtd3JhcHBlciB7XG4gICAgZm9udC1mYW1pbHk6IFwnT3BlbiBTYW5zXCcsIHNhbnMtc2VyaWY7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC40NSk7XG4gICAgbWFyZ2luLWxlZnQ6IC02cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDEwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludHMtd3JhcHBlciAuQ29kZU1pcnJvci1oaW50cyB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWhpbnQge1xuICAgIGNvbG9yOiByZ2JhKDE1LCAzMiwgNDUsIDAuNik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtd2lkdGg6IDMwMHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgfVxuXG4gIGxpLkNvZGVNaXJyb3ItaGludC1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyYTdlZDM7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludC1pbmZvcm1hdGlvbiB7XG4gICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBtYXgtd2lkdGg6IDMwMHB4O1xuICAgIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1LCAzMiwgNDUsIDAuMDMpO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWhpbnQtaW5mb3JtYXRpb246Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjYzBjMGMwO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogLTFweDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWhpbnQtaW5mb3JtYXRpb24gLmNvbnRlbnQge1xuICAgIGNvbG9yOiByZ2JhKDE1LCAzMiwgNDUsIDAuNik7XG4gICAgYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBsaW5lLWNsYW1wOiAzO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM2O1xuICAgIG1heC1oZWlnaHQ6IDU5cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiAtby1lbGxpcHNpcy1sYXN0bGluZTtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWhpbnQtaW5mb3JtYXRpb24gLmNvbnRlbnQgcDpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG4gIC5Db2RlTWlycm9yLWhpbnQtaW5mb3JtYXRpb24gLmNvbnRlbnQgcDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgLkNvZGVNaXJyb3ItaGludC1pbmZvcm1hdGlvbiAuaW5mb1R5cGUge1xuICAgIGNvbG9yOiByZ2IoMjQxLCAxNDMsIDEpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTtcbiAgfVxuJ10pKSksdT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2lmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiQ29kZU1pcnJvci1saW50LW1hcmstZXJyb3IiKSlmb3IodmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiQ29kZU1pcnJvci1saW50LW1lc3NhZ2UtZXJyb3IiKSxuPTAscj1BcnJheS5mcm9tKHQpO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuaW5uZXJIVE1MPWkuaW5uZXJIVE1MLnJlcGxhY2UoLyIoLio/KSIvZywiPHNwYW4+JDE8L3NwYW4+Iil9fXZhciBuPWUuY2hpbGRyZW47cmV0dXJuIGkuY3JlYXRlRWxlbWVudChhLHtvbk1vdXNlTW92ZTp0fSxuLGkuY3JlYXRlRWxlbWVudChzLG51bGwpKX0sYz1vLnN0eWxlZC5kaXYoZnx8KGY9cihbIlxuICBjb2xvcjogIzE0MTgyMztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZm9udC1mYW1pbHk6IHN5c3RlbSwgLWFwcGxlLXN5c3RlbSwgJ1NhbiBGcmFuY2lzY28nLCAnLlNGTlNEaXNwbGF5LVJlZ3VsYXInLFxuICAgICdTZWdvZSBVSScsIFNlZ29lLCAnU2Vnb2UgV1AnLCAnSGVsdmV0aWNhIE5ldWUnLCBoZWx2ZXRpY2EsICdMdWNpZGEgR3JhbmRlJyxcbiAgICBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG4iXSxbIlxuICBjb2xvcjogIzE0MTgyMztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZm9udC1mYW1pbHk6IHN5c3RlbSwgLWFwcGxlLXN5c3RlbSwgJ1NhbiBGcmFuY2lzY28nLCAnLlNGTlNEaXNwbGF5LVJlZ3VsYXInLFxuICAgICdTZWdvZSBVSScsIFNlZ29lLCAnU2Vnb2UgV1AnLCAnSGVsdmV0aWNhIE5ldWUnLCBoZWx2ZXRpY2EsICdMdWNpZGEgR3JhbmRlJyxcbiAgICBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG4iXSkpKTt0LkNvbnRhaW5lcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5zZXRSZWY7cmV0dXJuIGkuY3JlYXRlRWxlbWVudChjLHtyZWY6bn0sdCl9LHQuZGVmYXVsdD11O3ZhciBsLHAsZn0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMikpfShmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXt2YXIgdD1lLmZsYWdzO3JldHVybiBudWxsIT10P3Q6KGUuaWdub3JlQ2FzZT8iaSI6IiIpKyhlLmdsb2JhbD8iZyI6IiIpKyhlLm11bHRpbGluZT8ibSI6IiIpfWZ1bmN0aW9uIG4oZSxuKXtmb3IodmFyIHI9dChlKSxpPXIsbz0wO288bi5sZW5ndGg7bysrKS0xPT1pLmluZGV4T2Yobi5jaGFyQXQobykpJiYoaSs9bi5jaGFyQXQobykpO3JldHVybiByPT1pP2U6bmV3IFJlZ0V4cChlLnNvdXJjZSxpKX1mdW5jdGlvbiByKGUpe3JldHVybi9cXHN8XFxufFxufFxcV3xcXER8XFtcXi8udGVzdChlLnNvdXJjZSl9ZnVuY3Rpb24gaShlLHQscil7dD1uKHQsImciKTtmb3IodmFyIGk9ci5saW5lLG89ci5jaCxhPWUubGFzdExpbmUoKTtpPD1hO2krKyxvPTApe3QubGFzdEluZGV4PW87dmFyIHM9ZS5nZXRMaW5lKGkpLHU9dC5leGVjKHMpO2lmKHUpcmV0dXJue2Zyb206bShpLHUuaW5kZXgpLHRvOm0oaSx1LmluZGV4K3VbMF0ubGVuZ3RoKSxtYXRjaDp1fX19ZnVuY3Rpb24gbyhlLHQsbyl7aWYoIXIodCkpcmV0dXJuIGkoZSx0LG8pO3Q9bih0LCJnbSIpO2Zvcih2YXIgYSxzPTEsdT1vLmxpbmUsYz1lLmxhc3RMaW5lKCk7dTw9Yzspe2Zvcih2YXIgbD0wO2w8cyYmISh1PmMpO2wrKyl7dmFyIHA9ZS5nZXRMaW5lKHUrKyk7YT1udWxsPT1hP3A6YSsiXG4iK3B9cyo9Mix0Lmxhc3RJbmRleD1vLmNoO3ZhciBmPXQuZXhlYyhhKTtpZihmKXt2YXIgZD1hLnNsaWNlKDAsZi5pbmRleCkuc3BsaXQoIlxuIiksaD1mWzBdLnNwbGl0KCJcbiIpLGc9by5saW5lK2QubGVuZ3RoLTEseT1kW2QubGVuZ3RoLTFdLmxlbmd0aDtyZXR1cm57ZnJvbTptKGcseSksdG86bShnK2gubGVuZ3RoLTEsMT09aC5sZW5ndGg/eStoWzBdLmxlbmd0aDpoW2gubGVuZ3RoLTFdLmxlbmd0aCksbWF0Y2g6Zn19fX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciBuLHI9MDs7KXt0Lmxhc3RJbmRleD1yO3ZhciBpPXQuZXhlYyhlKTtpZighaSlyZXR1cm4gbjtpZihuPWksKHI9bi5pbmRleCsoblswXS5sZW5ndGh8fDEpKT09ZS5sZW5ndGgpcmV0dXJuIG59fWZ1bmN0aW9uIHMoZSx0LHIpe3Q9bih0LCJnIik7Zm9yKHZhciBpPXIubGluZSxvPXIuY2gscz1lLmZpcnN0TGluZSgpO2k+PXM7aS0tLG89LTEpe3ZhciB1PWUuZ2V0TGluZShpKTtvPi0xJiYodT11LnNsaWNlKDAsbykpO3ZhciBjPWEodSx0KTtpZihjKXJldHVybntmcm9tOm0oaSxjLmluZGV4KSx0bzptKGksYy5pbmRleCtjWzBdLmxlbmd0aCksbWF0Y2g6Y319fWZ1bmN0aW9uIHUoZSx0LHIpe3Q9bih0LCJnbSIpO2Zvcih2YXIgaSxvPTEscz1yLmxpbmUsdT1lLmZpcnN0TGluZSgpO3M+PXU7KXtmb3IodmFyIGM9MDtjPG87YysrKXt2YXIgbD1lLmdldExpbmUocy0tKTtpPW51bGw9PWk/bC5zbGljZSgwLHIuY2gpOmwrIlxuIitpfW8qPTI7dmFyIHA9YShpLHQpO2lmKHApe3ZhciBmPWkuc2xpY2UoMCxwLmluZGV4KS5zcGxpdCgiXG4iKSxkPXBbMF0uc3BsaXQoIlxuIiksaD1zK2YubGVuZ3RoLGc9ZltmLmxlbmd0aC0xXS5sZW5ndGg7cmV0dXJue2Zyb206bShoLGcpLHRvOm0oaCtkLmxlbmd0aC0xLDE9PWQubGVuZ3RoP2crZFswXS5sZW5ndGg6ZFtkLmxlbmd0aC0xXS5sZW5ndGgpLG1hdGNoOnB9fX19ZnVuY3Rpb24gYyhlLHQsbixyKXtpZihlLmxlbmd0aD09dC5sZW5ndGgpcmV0dXJuIG47Zm9yKHZhciBpPTAsbz1uK01hdGgubWF4KDAsZS5sZW5ndGgtdC5sZW5ndGgpOzspe2lmKGk9PW8pcmV0dXJuIGk7dmFyIGE9aStvPj4xLHM9cihlLnNsaWNlKDAsYSkpLmxlbmd0aDtpZihzPT1uKXJldHVybiBhO3M+bj9vPWE6aT1hKzF9fWZ1bmN0aW9uIGwoZSx0LG4scil7aWYoIXQubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpPXI/ZDpoLG89aSh0KS5zcGxpdCgvXHJ8XG5ccj8vKTtlOmZvcih2YXIgYT1uLmxpbmUscz1uLmNoLHU9ZS5sYXN0TGluZSgpKzEtby5sZW5ndGg7YTw9dTthKysscz0wKXt2YXIgbD1lLmdldExpbmUoYSkuc2xpY2UocykscD1pKGwpO2lmKDE9PW8ubGVuZ3RoKXt2YXIgZj1wLmluZGV4T2Yob1swXSk7aWYoLTE9PWYpY29udGludWUgZTt2YXIgbj1jKGwscCxmLGkpK3M7cmV0dXJue2Zyb206bShhLGMobCxwLGYsaSkrcyksdG86bShhLGMobCxwLGYrb1swXS5sZW5ndGgsaSkrcyl9fXZhciBnPXAubGVuZ3RoLW9bMF0ubGVuZ3RoO2lmKHAuc2xpY2UoZyk9PW9bMF0pe2Zvcih2YXIgeT0xO3k8by5sZW5ndGgtMTt5KyspaWYoaShlLmdldExpbmUoYSt5KSkhPW9beV0pY29udGludWUgZTt2YXIgdj1lLmdldExpbmUoYStvLmxlbmd0aC0xKSxiPWkodikseD1vW28ubGVuZ3RoLTFdO2lmKGIuc2xpY2UoMCx4Lmxlbmd0aCk9PXgpcmV0dXJue2Zyb206bShhLGMobCxwLGcsaSkrcyksdG86bShhK28ubGVuZ3RoLTEsYyh2LGIseC5sZW5ndGgsaSkpfX19fWZ1bmN0aW9uIHAoZSx0LG4scil7aWYoIXQubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpPXI/ZDpoLG89aSh0KS5zcGxpdCgvXHJ8XG5ccj8vKTtlOmZvcih2YXIgYT1uLmxpbmUscz1uLmNoLHU9ZS5maXJzdExpbmUoKS0xK28ubGVuZ3RoO2E+PXU7YS0tLHM9LTEpe3ZhciBsPWUuZ2V0TGluZShhKTtzPi0xJiYobD1sLnNsaWNlKDAscykpO3ZhciBwPWkobCk7aWYoMT09by5sZW5ndGgpe3ZhciBmPXAubGFzdEluZGV4T2Yob1swXSk7aWYoLTE9PWYpY29udGludWUgZTtyZXR1cm57ZnJvbTptKGEsYyhsLHAsZixpKSksdG86bShhLGMobCxwLGYrb1swXS5sZW5ndGgsaSkpfX12YXIgZz1vW28ubGVuZ3RoLTFdO2lmKHAuc2xpY2UoMCxnLmxlbmd0aCk9PWcpe2Zvcih2YXIgeT0xLG49YS1vLmxlbmd0aCsxO3k8by5sZW5ndGgtMTt5KyspaWYoaShlLmdldExpbmUobit5KSkhPW9beV0pY29udGludWUgZTt2YXIgdj1lLmdldExpbmUoYSsxLW8ubGVuZ3RoKSxiPWkodik7aWYoYi5zbGljZShiLmxlbmd0aC1vWzBdLmxlbmd0aCk9PW9bMF0pcmV0dXJue2Zyb206bShhKzEtby5sZW5ndGgsYyh2LGIsdi5sZW5ndGgtb1swXS5sZW5ndGgsaSkpLHRvOm0oYSxjKGwscCxnLmxlbmd0aCxpKSl9fX19ZnVuY3Rpb24gZihlLHQscixhKXt0aGlzLmF0T2NjdXJyZW5jZT0hMSx0aGlzLmRvYz1lLHI9cj9lLmNsaXBQb3Mocik6bSgwLDApLHRoaXMucG9zPXtmcm9tOnIsdG86cn07dmFyIGM7Im9iamVjdCI9PXR5cGVvZiBhP2M9YS5jYXNlRm9sZDooYz1hLGE9bnVsbCksInN0cmluZyI9PXR5cGVvZiB0PyhudWxsPT1jJiYoYz0hMSksdGhpcy5tYXRjaGVzPWZ1bmN0aW9uKG4scil7cmV0dXJuKG4/cDpsKShlLHQscixjKX0pOih0PW4odCwiZ20iKSxhJiYhMT09PWEubXVsdGlsaW5lP3RoaXMubWF0Y2hlcz1mdW5jdGlvbihuLHIpe3JldHVybihuP3M6aSkoZSx0LHIpfTp0aGlzLm1hdGNoZXM9ZnVuY3Rpb24obixyKXtyZXR1cm4obj91Om8pKGUsdCxyKX0pfXZhciBkLGgsbT1lLlBvcztTdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZT8oZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoIk5GRCIpLnRvTG93ZXJDYXNlKCl9LGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9ybWFsaXplKCJORkQiKX0pOihkPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxmLnByb3RvdHlwZT17ZmluZE5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kKCExKX0sZmluZFByZXZpb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZCghMCl9LGZpbmQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMubWF0Y2hlcyh0LHRoaXMuZG9jLmNsaXBQb3ModD90aGlzLnBvcy5mcm9tOnRoaXMucG9zLnRvKSk7biYmMD09ZS5jbXBQb3Mobi5mcm9tLG4udG8pOyl0P24uZnJvbS5jaD9uLmZyb209bShuLmZyb20ubGluZSxuLmZyb20uY2gtMSk6bj1uLmZyb20ubGluZT09dGhpcy5kb2MuZmlyc3RMaW5lKCk/bnVsbDp0aGlzLm1hdGNoZXModCx0aGlzLmRvYy5jbGlwUG9zKG0obi5mcm9tLmxpbmUtMSkpKTpuLnRvLmNoPHRoaXMuZG9jLmdldExpbmUobi50by5saW5lKS5sZW5ndGg/bi50bz1tKG4udG8ubGluZSxuLnRvLmNoKzEpOm49bi50by5saW5lPT10aGlzLmRvYy5sYXN0TGluZSgpP251bGw6dGhpcy5tYXRjaGVzKHQsbShuLnRvLmxpbmUrMSwwKSk7aWYobilyZXR1cm4gdGhpcy5wb3M9bix0aGlzLmF0T2NjdXJyZW5jZT0hMCx0aGlzLnBvcy5tYXRjaHx8ITA7dmFyIHI9bSh0P3RoaXMuZG9jLmZpcnN0TGluZSgpOnRoaXMuZG9jLmxhc3RMaW5lKCkrMSwwKTtyZXR1cm4gdGhpcy5wb3M9e2Zyb206cix0bzpyfSx0aGlzLmF0T2NjdXJyZW5jZT0hMX0sZnJvbTpmdW5jdGlvbigpe2lmKHRoaXMuYXRPY2N1cnJlbmNlKXJldHVybiB0aGlzLnBvcy5mcm9tfSx0bzpmdW5jdGlvbigpe2lmKHRoaXMuYXRPY2N1cnJlbmNlKXJldHVybiB0aGlzLnBvcy50b30scmVwbGFjZTpmdW5jdGlvbih0LG4pe2lmKHRoaXMuYXRPY2N1cnJlbmNlKXt2YXIgcj1lLnNwbGl0TGluZXModCk7dGhpcy5kb2MucmVwbGFjZVJhbmdlKHIsdGhpcy5wb3MuZnJvbSx0aGlzLnBvcy50byxuKSx0aGlzLnBvcy50bz1tKHRoaXMucG9zLmZyb20ubGluZStyLmxlbmd0aC0xLHJbci5sZW5ndGgtMV0ubGVuZ3RoKygxPT1yLmxlbmd0aD90aGlzLnBvcy5mcm9tLmNoOjApKX19fSxlLmRlZmluZUV4dGVuc2lvbigiZ2V0U2VhcmNoQ3Vyc29yIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG5ldyBmKHRoaXMuZG9jLGUsdCxuKX0pLGUuZGVmaW5lRG9jRXh0ZW5zaW9uKCJnZXRTZWFyY2hDdXJzb3IiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IGYodGhpcyxlLHQsbil9KSxlLmRlZmluZUV4dGVuc2lvbigic2VsZWN0TWF0Y2hlcyIsZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT10aGlzLmdldFNlYXJjaEN1cnNvcih0LHRoaXMuZ2V0Q3Vyc29yKCJmcm9tIiksbik7aS5maW5kTmV4dCgpJiYhKGUuY21wUG9zKGkudG8oKSx0aGlzLmdldEN1cnNvcigidG8iKSk+MCk7KXIucHVzaCh7YW5jaG9yOmkuZnJvbSgpLGhlYWQ6aS50bygpfSk7ci5sZW5ndGgmJnRoaXMuc2V0U2VsZWN0aW9ucyhyLDApfSl9KX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMikpfShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaSxvPXQuZ2V0V3JhcHBlckVsZW1lbnQoKTtyZXR1cm4gaT1vLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxpLmNsYXNzTmFtZT1yPyJDb2RlTWlycm9yLWRpYWxvZyBDb2RlTWlycm9yLWRpYWxvZy1ib3R0b20iOiJDb2RlTWlycm9yLWRpYWxvZyBDb2RlTWlycm9yLWRpYWxvZy10b3AiLCJzdHJpbmciPT10eXBlb2Ygbj9pLmlubmVySFRNTD1uOmkuYXBwZW5kQ2hpbGQobiksZS5hZGRDbGFzcyhvLCJkaWFsb2ctb3BlbmVkIiksaX1mdW5jdGlvbiBuKGUsdCl7ZS5zdGF0ZS5jdXJyZW50Tm90aWZpY2F0aW9uQ2xvc2UmJmUuc3RhdGUuY3VycmVudE5vdGlmaWNhdGlvbkNsb3NlKCksZS5zdGF0ZS5jdXJyZW50Tm90aWZpY2F0aW9uQ2xvc2U9dH1lLmRlZmluZUV4dGVuc2lvbigib3BlbkRpYWxvZyIsZnVuY3Rpb24ocixpLG8pe2Z1bmN0aW9uIGEodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXAudmFsdWU9dDtlbHNle2lmKGMpcmV0dXJuO2M9ITAsZS5ybUNsYXNzKHUucGFyZW50Tm9kZSwiZGlhbG9nLW9wZW5lZCIpLHUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1KSxsLmZvY3VzKCksby5vbkNsb3NlJiZvLm9uQ2xvc2UodSl9fW98fChvPXt9KSxuKHRoaXMsbnVsbCk7dmFyIHMsdT10KHRoaXMscixvLmJvdHRvbSksYz0hMSxsPXRoaXMscD11LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdO3JldHVybiBwPyhwLmZvY3VzKCksby52YWx1ZSYmKHAudmFsdWU9by52YWx1ZSwhMSE9PW8uc2VsZWN0VmFsdWVPbk9wZW4mJnAuc2VsZWN0KCkpLG8ub25JbnB1dCYmZS5vbihwLCJpbnB1dCIsZnVuY3Rpb24oZSl7by5vbklucHV0KGUscC52YWx1ZSxhKX0pLG8ub25LZXlVcCYmZS5vbihwLCJrZXl1cCIsZnVuY3Rpb24oZSl7by5vbktleVVwKGUscC52YWx1ZSxhKX0pLGUub24ocCwia2V5ZG93biIsZnVuY3Rpb24odCl7byYmby5vbktleURvd24mJm8ub25LZXlEb3duKHQscC52YWx1ZSxhKXx8KCgyNz09dC5rZXlDb2RlfHwhMSE9PW8uY2xvc2VPbkVudGVyJiYxMz09dC5rZXlDb2RlKSYmKHAuYmx1cigpLGUuZV9zdG9wKHQpLGEoKSksMTM9PXQua2V5Q29kZSYmaShwLnZhbHVlLHQpKX0pLCExIT09by5jbG9zZU9uQmx1ciYmZS5vbihwLCJibHVyIixhKSk6KHM9dS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIilbMF0pJiYoZS5vbihzLCJjbGljayIsZnVuY3Rpb24oKXthKCksbC5mb2N1cygpfSksITEhPT1vLmNsb3NlT25CbHVyJiZlLm9uKHMsImJsdXIiLGEpLHMuZm9jdXMoKSksYX0pLGUuZGVmaW5lRXh0ZW5zaW9uKCJvcGVuQ29uZmlybSIsZnVuY3Rpb24ocixpLG8pe2Z1bmN0aW9uIGEoKXtjfHwoYz0hMCxlLnJtQ2xhc3Mocy5wYXJlbnROb2RlLCJkaWFsb2ctb3BlbmVkIikscy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHMpLGwuZm9jdXMoKSl9bih0aGlzLG51bGwpO3ZhciBzPXQodGhpcyxyLG8mJm8uYm90dG9tKSx1PXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJ1dHRvbiIpLGM9ITEsbD10aGlzLHA9MTt1WzBdLmZvY3VzKCk7Zm9yKHZhciBmPTA7Zjx1Lmxlbmd0aDsrK2Ype3ZhciBkPXVbZl07IWZ1bmN0aW9uKHQpe2Uub24oZCwiY2xpY2siLGZ1bmN0aW9uKG4pe2UuZV9wcmV2ZW50RGVmYXVsdChuKSxhKCksdCYmdChsKX0pfShpW2ZdKSxlLm9uKGQsImJsdXIiLGZ1bmN0aW9uKCl7LS1wLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtwPD0wJiZhKCl9LDIwMCl9KSxlLm9uKGQsImZvY3VzIixmdW5jdGlvbigpeysrcH0pfX0pLGUuZGVmaW5lRXh0ZW5zaW9uKCJvcGVuTm90aWZpY2F0aW9uIixmdW5jdGlvbihyLGkpe2Z1bmN0aW9uIG8oKXt1fHwodT0hMCxjbGVhclRpbWVvdXQoYSksZS5ybUNsYXNzKHMucGFyZW50Tm9kZSwiZGlhbG9nLW9wZW5lZCIpLHMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKSl9bih0aGlzLG8pO3ZhciBhLHM9dCh0aGlzLHIsaSYmaS5ib3R0b20pLHU9ITEsYz1pJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBpLmR1cmF0aW9uP2kuZHVyYXRpb246NWUzO3JldHVybiBlLm9uKHMsImNsaWNrIixmdW5jdGlvbih0KXtlLmVfcHJldmVudERlZmF1bHQodCksbygpfSksYyYmKGE9c2V0VGltZW91dChvLGMpKSxvfSl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNTcpLGk9bigzNDYpLG89bigzNDcpLGE9bigzNDgpLHM9bigxNjEpO24oMTYwKTtuLmQodCwiY3JlYXRlU3RvcmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJjb21iaW5lUmVkdWNlcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pLG4uZCh0LCJiaW5kQWN0aW9uQ3JlYXRvcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pLG4uZCh0LCJhcHBseU1pZGRsZXdhcmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pLG4uZCh0LCJjb21wb3NlIixmdW5jdGlvbigpe3JldHVybiBzLmF9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCFPYmplY3QoYS5hKShlKXx8T2JqZWN0KGkuYSkoZSkhPXMpcmV0dXJuITE7dmFyIHQ9T2JqZWN0KG8uYSkoZSk7aWYobnVsbD09PXQpcmV0dXJuITA7dmFyIG49cC5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3I7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBuJiZsLmNhbGwobik9PWZ9dmFyIGk9bigzMyksbz1uKDM1MSksYT1uKDMxKSxzPSJbb2JqZWN0IE9iamVjdF0iLHU9RnVuY3Rpb24ucHJvdG90eXBlLGM9T2JqZWN0LnByb3RvdHlwZSxsPXUudG9TdHJpbmcscD1jLmhhc093blByb3BlcnR5LGY9bC5jYWxsKE9iamVjdCk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG4ucHVzaChlKSxmdW5jdGlvbigpe3JldHVybiBPYmplY3Qocy53KShuLGUpfX1mdW5jdGlvbiB0KGUpe2Zvcih2YXIgdD1uLnNsaWNlKCkscj0wLGk9dC5sZW5ndGg7cjxpO3IrKyl0W3JdKGUpfXZhciBuPVtdO3JldHVybntzdWJzY3JpYmU6ZSxlbWl0OnR9fWZ1bmN0aW9uIGkoKXtmdW5jdGlvbiBlKCl7aWYoYSYmYy5sZW5ndGgpdGhyb3cgT2JqZWN0KHMucCkoIkNhbm5vdCBoYXZlIGEgY2xvc2VkIGNoYW5uZWwgd2l0aCBwZW5kaW5nIHRha2VycyIpO2lmKGMubGVuZ3RoJiYhby5pc0VtcHR5KCkpdGhyb3cgT2JqZWN0KHMucCkoIkNhbm5vdCBoYXZlIHBlbmRpbmcgdGFrZXJzIHdpdGggbm9uIGVtcHR5IGJ1ZmZlciIpfWZ1bmN0aW9uIHQodCl7aWYoZSgpLE9iamVjdChzLmgpKHQscy5xLm5vdFVuZGVmLGgpLCFhKXtpZighYy5sZW5ndGgpcmV0dXJuIG8ucHV0KHQpO2Zvcih2YXIgbj0wO248Yy5sZW5ndGg7bisrKXt2YXIgcj1jW25dO2lmKCFyW3MuYl18fHJbcy5iXSh0KSlyZXR1cm4gYy5zcGxpY2UobiwxKSxyKHQpfX19ZnVuY3Rpb24gbih0KXtlKCksT2JqZWN0KHMuaCkodCxzLnEuZnVuYywiY2hhbm5lbC50YWtlJ3MgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIiksYSYmby5pc0VtcHR5KCk/dChwKTpvLmlzRW1wdHkoKT8oYy5wdXNoKHQpLHQuY2FuY2VsPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChzLncpKGMsdCl9KTp0KG8udGFrZSgpKX1mdW5jdGlvbiByKHQpe2lmKGUoKSxPYmplY3Qocy5oKSh0LHMucS5mdW5jLCJjaGFubmVsLmZsdXNoJyBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKSxhJiZvLmlzRW1wdHkoKSlyZXR1cm4gdm9pZCB0KHApO3Qoby5mbHVzaCgpKX1mdW5jdGlvbiBpKCl7aWYoZSgpLCFhJiYoYT0hMCxjLmxlbmd0aCkpe3ZhciB0PWM7Yz1bXTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspdFtuXShwKX19dmFyIG89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnUuYS5maXhlZCgpLGE9ITEsYz1bXTtyZXR1cm4gT2JqZWN0KHMuaCkobyxzLnEuYnVmZmVyLGQpLHt0YWtlOm4scHV0OnQsZmx1c2g6cixjbG9zZTppLGdldCBfX3Rha2Vyc19fKCl7cmV0dXJuIGN9LGdldCBfX2Nsb3NlZF9fKCl7cmV0dXJuIGF9fX1mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmEubm9uZSgpLG49YXJndW1lbnRzWzJdO2FyZ3VtZW50cy5sZW5ndGg+MiYmT2JqZWN0KHMuaCkobixzLnEuZnVuYywiSW52YWxpZCBtYXRjaCBmdW5jdGlvbiBwYXNzZWQgdG8gZXZlbnRDaGFubmVsIik7dmFyIHI9aSh0KSxvPWZ1bmN0aW9uKCl7ci5fX2Nsb3NlZF9ffHwoYSYmYSgpLHIuY2xvc2UoKSl9LGE9ZShmdW5jdGlvbihlKXtpZihmKGUpKXJldHVybiB2b2lkIG8oKTtuJiYhbihlKXx8ci5wdXQoZSl9KTtpZihyLl9fY2xvc2VkX18mJmEoKSwhcy5xLmZ1bmMoYSkpdGhyb3cgbmV3IEVycm9yKCJpbiBldmVudENoYW5uZWw6IHN1YnNjcmliZSBzaG91bGQgcmV0dXJuIGEgZnVuY3Rpb24gdG8gdW5zdWJzY3JpYmUiKTtyZXR1cm57dGFrZTpyLnRha2UsZmx1c2g6ci5mbHVzaCxjbG9zZTpvfX1mdW5jdGlvbiBhKGUpe3ZhciB0PW8oZnVuY3Rpb24odCl7cmV0dXJuIGUoZnVuY3Rpb24oZSl7aWYoZVtzLmNdKXJldHVybiB2b2lkIHQoZSk7T2JqZWN0KGMuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdChlKX0pfSl9KTtyZXR1cm4gbCh7fSx0LHt0YWtlOmZ1bmN0aW9uKGUsbil7YXJndW1lbnRzLmxlbmd0aD4xJiYoT2JqZWN0KHMuaCkobixzLnEuZnVuYywiY2hhbm5lbC50YWtlJ3MgbWF0Y2hlciBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24iKSxlW3MuYl09biksdC50YWtlKGUpfX0pfW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSx0LmM9cix0LmI9aSx0LmQ9byx0LmY9YTt2YXIgcz1uKDIyKSx1PW4oNzYpLGM9bigxNjYpLGw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scD17dHlwZToiQEByZWR1eC1zYWdhL0NIQU5ORUxfRU5EIn0sZj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIkBAcmVkdXgtc2FnYS9DSEFOTkVMX0VORCI9PT1lLnR5cGV9LGQ9ImludmFsaWQgYnVmZmVyIHBhc3NlZCB0byBjaGFubmVsIGZhY3RvcnkgZnVuY3Rpb24iLGg9IlNhZ2Egd2FzIHByb3ZpZGVkIHdpdGggYW4gdW5kZWZpbmVkIGFjdGlvbiJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixvLGEscyl7dmFyIHU9bjtpZighdSYmdCYmdC5sZW5ndGg+MCl7dmFyIGM9dFswXTt1PWMmJmMubG9jJiZjLmxvYy5zb3VyY2V9dmFyIGw9bzshbCYmdCYmKGw9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIEJvb2xlYW4oZS5sb2MpfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxvYy5zdGFydH0pKSxsJiYwPT09bC5sZW5ndGgmJihsPXZvaWQgMCk7dmFyIHA9dm9pZCAwLGY9dTtmJiZsJiYocD1sLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCxpLmdldExvY2F0aW9uKShmLGUpfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse21lc3NhZ2U6e3ZhbHVlOmUsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMH0sbG9jYXRpb25zOnt2YWx1ZTpwfHx2b2lkIDAsZW51bWVyYWJsZTohMH0scGF0aDp7dmFsdWU6YXx8dm9pZCAwLGVudW1lcmFibGU6ITB9LG5vZGVzOnt2YWx1ZTp0fHx2b2lkIDB9LHNvdXJjZTp7dmFsdWU6dXx8dm9pZCAwfSxwb3NpdGlvbnM6e3ZhbHVlOmx8fHZvaWQgMH0sb3JpZ2luYWxFcnJvcjp7dmFsdWU6c319KSxzJiZzLnN0YWNrP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGFjayIse3ZhbHVlOnMuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxyKTpPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTpFcnJvcigpLnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdyYXBoUUxFcnJvcj1yO3ZhciBpPW4oMTA5KTtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnJ9LG5hbWU6e3ZhbHVlOiJHcmFwaFFMRXJyb3IifX0pfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuISFhKGUpfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9bnVsbCE9ZSYmZS5sZW5ndGg7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgdCYmdD49MCYmdCUxPT09MH1mdW5jdGlvbiBpKGUpe3JldHVybiBPYmplY3QoZSk9PT1lJiYocihlKXx8bihlKSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD1hKGUpO2lmKHQpcmV0dXJuIHQuY2FsbChlKX1mdW5jdGlvbiBhKGUpe2lmKG51bGwhPWUpe3ZhciB0PWcmJmVbZ118fGVbIkBAaXRlcmF0b3IiXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQpcmV0dXJuIHR9fWZ1bmN0aW9uIHMoZSl7aWYobnVsbCE9ZSl7dmFyIHQ9byhlKTtpZih0KXJldHVybiB0O2lmKHIoZSkpcmV0dXJuIG5ldyB1KGUpfX1mdW5jdGlvbiB1KGUpe3RoaXMuX289ZSx0aGlzLl9pPTB9ZnVuY3Rpb24gYyhlLHQsbil7aWYobnVsbCE9ZSl7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBlLmZvckVhY2gpcmV0dXJuIGUuZm9yRWFjaCh0LG4pO3ZhciBpPTAsYT1vKGUpO2lmKGEpe2Zvcih2YXIgczshKHM9YS5uZXh0KCkpLmRvbmU7KWlmKHQuY2FsbChuLHMudmFsdWUsaSsrLGUpLGk+OTk5OTk5OSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOZWFyLWluZmluaXRlIGl0ZXJhdGlvbi4iKX1lbHNlIGlmKHIoZSkpZm9yKDtpPGUubGVuZ3RoO2krKyllLmhhc093blByb3BlcnR5KGkpJiZ0LmNhbGwobixlW2ldLGksZSl9fWZ1bmN0aW9uIGwoZSl7cmV0dXJuISFmKGUpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZihlKTtpZih0KXJldHVybiB0LmNhbGwoZSl9ZnVuY3Rpb24gZihlKXtpZihudWxsIT1lKXt2YXIgdD12JiZlW3ZdfHxlWyJAQGFzeW5jSXRlcmF0b3IiXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQpcmV0dXJuIHR9fWZ1bmN0aW9uIGQoZSl7aWYobnVsbCE9ZSl7dmFyIHQ9cChlKTtpZih0KXJldHVybiB0O3ZhciBuPXMoZSk7aWYobilyZXR1cm4gbmV3IGgobil9fWZ1bmN0aW9uIGgoZSl7dGhpcy5faT1lfWZ1bmN0aW9uIG0oZSx0LG4pe3ZhciByPWQoZSk7aWYocil7dmFyIGk9MDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXtmdW5jdGlvbiBzKCl7cmV0dXJuIHIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocil7ci5kb25lP28oKTpQcm9taXNlLnJlc29sdmUodC5jYWxsKG4sci52YWx1ZSxpKyssZSkpLnRoZW4ocykuY2F0Y2goYSl9KS5jYXRjaChhKX1zKCl9KX19dmFyIGc9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcix5PWd8fCJAQGl0ZXJhdG9yIjt0LiQkaXRlcmF0b3I9eSx0LmlzSXRlcmFibGU9bix0LmlzQXJyYXlMaWtlPXIsdC5pc0NvbGxlY3Rpb249aSx0LmdldEl0ZXJhdG9yPW8sdC5nZXRJdGVyYXRvck1ldGhvZD1hLHQuY3JlYXRlSXRlcmF0b3I9cyx1LnByb3RvdHlwZVt5XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX298fHRoaXMuX2k+PXRoaXMuX28ubGVuZ3RoPyh0aGlzLl9vPXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTp7dmFsdWU6dGhpcy5fb1t0aGlzLl9pKytdLGRvbmU6ITF9fSx0LmZvckVhY2g9Yzt2YXIgdj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3IsYj12fHwiQEBhc3luY0l0ZXJhdG9yIjt0LiQkYXN5bmNJdGVyYXRvcj1iLHQuaXNBc3luY0l0ZXJhYmxlPWwsdC5nZXRBc3luY0l0ZXJhdG9yPXAsdC5nZXRBc3luY0l0ZXJhdG9yTWV0aG9kPWYsdC5jcmVhdGVBc3luY0l0ZXJhdG9yPWQsaC5wcm90b3R5cGVbYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2kubmV4dCgpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZS52YWx1ZSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm57dmFsdWU6dCxkb25lOmUuZG9uZX19KX0sdC5mb3JBd2FpdEVhY2g9bX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYodChlW25dKSlyZXR1cm4gZVtuXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlW3QobildPW4sZX0sT2JqZWN0LmNyZWF0ZShudWxsKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPUFycmF5LmlzQXJyYXk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZighT2JqZWN0KG8uYSkoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0KGkuYSkoZSk7cmV0dXJuIHQ9PXN8fHQ9PXV8fHQ9PWF8fHQ9PWN9dmFyIGk9bigzMyksbz1uKDYwKSxhPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixzPSJbb2JqZWN0IEZ1bmN0aW9uXSIsdT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGM9IltvYmplY3QgUHJveHldIjt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49T2JqZWN0KG8uYSkoZSx0KTtyZXR1cm4gT2JqZWN0KGkuYSkobik/bjp2b2lkIDB9dmFyIGk9big0MTIpLG89big0MTUpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0RGVmaW5pdGlvblN0YXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZXREZWZpbml0aW9uU3RhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEZpZWxkRGVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRGaWVsZERlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZm9yRWFjaFN0YXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mb3JFYWNoU3RhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm9iamVjdFZhbHVlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIub2JqZWN0VmFsdWVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJoaW50TGlzdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaGludExpc3R9fSk7dmFyIGk9big5Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRBdXRvY29tcGxldGVTdWdnZXN0aW9uc319KTt2YXIgbz1uKDk0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTEFOR1VBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkxBTkdVQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREZWZpbml0aW9uUXVlcnlSZXN1bHRGb3JGcmFnbWVudFNwcmVhZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZ2V0RGVmaW5pdGlvblF1ZXJ5UmVzdWx0Rm9yRnJhZ21lbnRTcHJlYWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldERlZmluaXRpb25RdWVyeVJlc3VsdEZvckRlZmluaXRpb25Ob2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5nZXREZWZpbml0aW9uUXVlcnlSZXN1bHRGb3JEZWZpbml0aW9uTm9kZX19KTt2YXIgYT1uKDk2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0RGlhZ25vc3RpY3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmdldERpYWdub3N0aWNzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWxpZGF0ZVF1ZXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS52YWxpZGF0ZVF1ZXJ5fX0pO3ZhciBzPW4oMTQwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0T3V0bGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2V0T3V0bGluZX19KTt2YXIgdT1uKDE0MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxMYW5ndWFnZVNlcnZpY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LkdyYXBoUUxMYW5ndWFnZVNlcnZpY2V9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGMuR3JhcGhRTE5vbk51bGw/YS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHIoZS5vZlR5cGUpLCIhIik6ZSBpbnN0YW5jZW9mIGMuR3JhcGhRTExpc3Q/YS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJbIixyKGUub2ZUeXBlKSwiXSIpOmEuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxlLm5hbWUpfXZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksbz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1uKDApLHM9big0MCksdT1uKDkpLGM9big3KSxsPW4oNjQzKSxwPW4oMjQpLGY9bigyNjApLGQ9big2NyksaD1uKDY4KSxtPW4oMTIpLGc9big4KSx5PW4oMSksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLm9uQ2xpY2s9ZnVuY3Rpb24oKXtuLnByb3BzLmNsaWNrYWJsZSYmbi5wcm9wcy5hZGRTdGFjayhuLnByb3BzLnNlc3Npb25JZCxuLnByb3BzLnR5cGUsbi5wcm9wcy54LG4ucHJvcHMueSl9LG4uc2V0UmVmPWZ1bmN0aW9uKGUpe24ucmVmPWV9LG4uc3RhdGU9e2NvbGxhcHNlZDohMX0sbn1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByb3BzLnR5cGUhPT1lLnR5cGV8fHRoaXMucHJvcHMua2V5TW92ZSE9PWUua2V5TW92ZXx8dGhpcy5wcm9wcy5pc0FjdGl2ZSE9PWUuaXNBY3RpdmV8fHRoaXMuc3RhdGUuY29sbGFwc2VkIT09dC5jb2xsYXBzZWR9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVTaXplKCl9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMudXBkYXRlU2l6ZSgpfSx0LnByb3RvdHlwZS51cGRhdGVTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWYpeyJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5wcm9wcy5vblNldFdpZHRoJiZ0aGlzLnByb3BzLm9uU2V0V2lkdGgodGhpcy5yZWYuc2Nyb2xsV2lkdGgpO3RoaXMucmVmLnNjcm9sbEhlaWdodD4zMSYmIXRoaXMuc3RhdGUuY29sbGFwc2VkJiZ0aGlzLnByb3BzLmNvbGxhcHNhYmxlJiZ0aGlzLnNldFN0YXRlKHtjb2xsYXBzZWQ6ITB9KX19LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnR5cGUsbj1lLmNsaWNrYWJsZSxpPWUuY2xhc3NOYW1lLG89ZS5iZWZvcmVOb2RlLHM9ZS5hZnRlck5vZGUsdT1lLnNob3dQYXJlbnROYW1lLGY9ZS5pc0FjdGl2ZSxkPWMuaXNUeXBlKHQpLGg9dSYmdC5wYXJlbnQ/YS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHQucGFyZW50Lm5hbWUsIi4iLGEuY3JlYXRlRWxlbWVudCgiYiIsbnVsbCx0Lm5hbWUpKTp0Lm5hbWU7cmV0dXJuIGEuY3JlYXRlRWxlbWVudChrLHthY3RpdmU6ZixjbGlja2FibGU6bixjbGFzc05hbWU6ImRvYy1jYXRlZ29yeS1pdGVtIisoaXx8IiIpLG9uQ2xpY2s6dGhpcy5vbkNsaWNrLHJlZjp0aGlzLnNldFJlZn0sbyxvJiYiICIsIWQmJmEuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImZpZWxkLW5hbWUifSxoKSx0LmFyZ3MmJnQuYXJncy5sZW5ndGg+MCYmWyIoIixhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtrZXk6ImFyZ3MifSx0aGlzLnN0YXRlLmNvbGxhcHNlZD9hLmNyZWF0ZUVsZW1lbnQoQSxudWxsLCIuLi4iKTp0LmFyZ3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQobC5kZWZhdWx0LHtrZXk6ZS5uYW1lLGFyZzplfSl9KSksIikiXSwiOiAiKSxhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InR5cGUtbmFtZSJ9LHIodC50eXBlfHx0KSksdm9pZCAwIT09dC5kZWZhdWx0VmFsdWU/YS5jcmVhdGVFbGVtZW50KFQsbnVsbCwiICIsIj0gIixhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIiIrSlNPTi5zdHJpbmdpZnkodC5kZWZhdWx0VmFsdWUsbnVsbCwyKSkpOnZvaWQgMCxuJiZhLmNyZWF0ZUVsZW1lbnQoXyxudWxsLGEuY3JlYXRlRWxlbWVudChwLlRyaWFuZ2xlLG51bGwpKSxzJiYiICIscyl9LHQuZGVmYXVsdFByb3BzPXtjbGlja2FibGU6ITAsY29sbGFwc2FibGU6ITF9LHR9KGEuQ29tcG9uZW50KSxiPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC54LHI9dC55LGk9aC5nZXRTZXNzaW9uRG9jc1N0YXRlKGUpLG89bS5nZXRTZWxlY3RlZFNlc3Npb25JZEZyb21Sb290KGUpO2lmKGkpe3ZhciBhPWkubmF2U3RhY2suZ2V0KG4pO2lmKGEpe3ZhciBzPWEuZ2V0KCJ4Iik9PT1uJiZhLmdldCgieSIpPT09cjtyZXR1cm57aXNBY3RpdmU6cyxrZXlNb3ZlOmkua2V5TW92ZSxsYXN0QWN0aXZlOnMmJm49PT1pLm5hdlN0YWNrLmxlbmd0aC0xLHNlc3Npb25JZDpvfX19cmV0dXJue2lzQWN0aXZlOiExLGtleU1vdmU6ITEsbGFzdEFjdGl2ZTohMSxzZXNzaW9uSWQ6b319LHg9Zy5jcmVhdGVTZWxlY3RvcihbYl0sZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxDPWZ1bmN0aW9uKGUpe3JldHVybiBzLmJpbmRBY3Rpb25DcmVhdG9ycyh7YWRkU3RhY2s6ZC5hZGRTdGFja30sZSl9O3QuZGVmYXVsdD11LmNvbm5lY3QoeCxDKShmLnRvSlModikpO3ZhciBFLEQsdyxTLGs9eS5zdHlsZWQoImRpdiIpKEV8fChFPW8oWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiA2cHggMTZweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdHJhbnNpdGlvbjogMC4xcyBiYWNrZ3JvdW5kLWNvbG9yO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG5cbiAgY3Vyc29yOiAiLCI7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICIsIjtcbiAgICBiYWNrZ3JvdW5kOiAjMmE3ZWQzO1xuICAgIC5maWVsZC1uYW1lLFxuICAgIC50eXBlLW5hbWUsXG4gICAgLmFyZy1uYW1lLFxuICAgIHNwYW4ge1xuICAgICAgY29sb3I6ICIsIiAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICBiIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDZweCAxNnB4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0cmFuc2l0aW9uOiAwLjFzIGJhY2tncm91bmQtY29sb3I7XG4gIGJhY2tncm91bmQ6ICIsIjtcblxuICBjdXJzb3I6ICIsIjtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogIiwiO1xuICAgIGJhY2tncm91bmQ6ICMyYTdlZDM7XG4gICAgLmZpZWxkLW5hbWUsXG4gICAgLnR5cGUtbmFtZSxcbiAgICAuYXJnLW5hbWUsXG4gICAgc3BhbiB7XG4gICAgICBjb2xvcjogIiwiICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIGIge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlP2UudGhlbWUuY29sb3Vycy5ibGFjazA3OmUudGhlbWUuY29sb3Vycy53aGl0ZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xpY2thYmxlPyJwb2ludGVyIjoic2VsZWN0In0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy53aGl0ZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy53aGl0ZX0pLEE9eS5zdHlsZWQuc3BhbihEfHwoRD1vKFsiXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4iXSxbIlxuICBmb250LXdlaWdodDogNjAwO1xuIl0pKSksXz15LnN0eWxlZC5kaXYod3x8KHc9byhbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAxMHB4O1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuIl0sWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTBweDtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiJdKSkpLFQ9eS5zdHlsZWQuc3BhbihTfHwoUz1vKFsiXG4gIGNvbG9yOiAiLCI7XG4gIHNwYW4ge1xuICAgIGNvbG9yOiAjMWY2MWE5O1xuICB9XG4iXSxbIlxuICBjb2xvcjogIiwiO1xuICBzcGFuIHtcbiAgICBjb2xvcjogIzFmNjFhOTtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLmJsYWNrMzB9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGV8fG51bGw9PT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOnIoZSk/W106W2VdfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbixyLGksbztpZih0KWZvcihvPU9iamVjdC5rZXlzKHQpLG49MCxyPW8ubGVuZ3RoO248cjtuKz0xKWk9b1tuXSxlW2ldPXRbaV07cmV0dXJuIGV9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuLHI9IiI7Zm9yKG49MDtuPHQ7bis9MSlyKz1lO3JldHVybiByfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDA9PT1lJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL2V9ZS5leHBvcnRzLmlzTm90aGluZz1yLGUuZXhwb3J0cy5pc09iamVjdD1pLGUuZXhwb3J0cy50b0FycmF5PW8sZS5leHBvcnRzLnJlcGVhdD1zLGUuZXhwb3J0cy5pc05lZ2F0aXZlWmVybz11LGUuZXhwb3J0cy5leHRlbmQ9YX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgaT1bXTtyZXR1cm4gZS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oZSl7bj1yKGUsdCxuKX0pLGVbdF0uZm9yRWFjaChmdW5jdGlvbihlKXtuLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LnRhZz09PWUudGFnJiZ0LmtpbmQ9PT1lLmtpbmQmJmkucHVzaChuKX0pLG4ucHVzaChlKX0pLG4uZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT1pLmluZGV4T2YodCl9KX1mdW5jdGlvbiBpKCl7ZnVuY3Rpb24gZShlKXtyW2Uua2luZF1bZS50YWddPXIuZmFsbGJhY2tbZS50YWddPWV9dmFyIHQsbixyPXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fX07Zm9yKHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrPTEpYXJndW1lbnRzW3RdLmZvckVhY2goZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlKXt0aGlzLmluY2x1ZGU9ZS5pbmNsdWRlfHxbXSx0aGlzLmltcGxpY2l0PWUuaW1wbGljaXR8fFtdLHRoaXMuZXhwbGljaXQ9ZS5leHBsaWNpdHx8W10sdGhpcy5pbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubG9hZEtpbmQmJiJzY2FsYXIiIT09ZS5sb2FkS2luZCl0aHJvdyBuZXcgcygiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIil9KSx0aGlzLmNvbXBpbGVkSW1wbGljaXQ9cih0aGlzLCJpbXBsaWNpdCIsW10pLHRoaXMuY29tcGlsZWRFeHBsaWNpdD1yKHRoaXMsImV4cGxpY2l0IixbXSksdGhpcy5jb21waWxlZFR5cGVNYXA9aSh0aGlzLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5jb21waWxlZEV4cGxpY2l0KX12YXIgYT1uKDUyKSxzPW4oNzIpLHU9bigxNSk7by5ERUZBVUxUPW51bGwsby5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgZSx0O3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6ZT1vLkRFRkFVTFQsdD1hcmd1bWVudHNbMF07YnJlYWs7Y2FzZSAyOmU9YXJndW1lbnRzWzBdLHQ9YXJndW1lbnRzWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHMoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24iKX1pZihlPWEudG9BcnJheShlKSx0PWEudG9BcnJheSh0KSwhZS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG99KSl0aHJvdyBuZXcgcygiU3BlY2lmaWVkIGxpc3Qgb2Ygc3VwZXIgc2NoZW1hcyAob3IgYSBzaW5nbGUgU2NoZW1hIG9iamVjdCkgY29udGFpbnMgYSBub24tU2NoZW1hIG9iamVjdC4iKTtpZighdC5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHV9KSl0aHJvdyBuZXcgcygiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO3JldHVybiBuZXcgbyh7aW5jbHVkZTplLGV4cGxpY2l0OnR9KX0sZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QoZSl9dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKCJhYmMiKTtpZihlWzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0WyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pXT1uO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLmpvaW4oIiIpKXJldHVybiExO3ZhciByPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7cltlXT1lfSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oIiIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHMsdT1yKGUpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtuPU9iamVjdChhcmd1bWVudHNbY10pO2Zvcih2YXIgbCBpbiBuKW8uY2FsbChuLGwpJiYodVtsXT1uW2xdKTtpZihpKXtzPWkobik7Zm9yKHZhciBwPTA7cDxzLmxlbmd0aDtwKyspYS5jYWxsKG4sc1twXSkmJih1W3NbcF1dPW5bc1twXV0pfX1yZXR1cm4gdX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzQpO24uZCh0LCJ0YWtlIixmdW5jdGlvbigpe3JldHVybiByLnN9KSxuLmQodCwidGFrZW0iLGZ1bmN0aW9uKCl7cmV0dXJuIHIudn0pLG4uZCh0LCJwdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIubn0pLG4uZCh0LCJhbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJyYWNlIixmdW5jdGlvbigpe3JldHVybiByLm99KSxuLmQodCwiY2FsbCIsZnVuY3Rpb24oKXtyZXR1cm4gci5lfSksbi5kKHQsImFwcGx5IixmdW5jdGlvbigpe3JldHVybiByLmN9KSxuLmQodCwiY3BzIixmdW5jdGlvbigpe3JldHVybiByLmh9KSxuLmQodCwiZm9yayIsZnVuY3Rpb24oKXtyZXR1cm4gci5rfSksbi5kKHQsInNwYXduIixmdW5jdGlvbigpe3JldHVybiByLnJ9KSxuLmQodCwiam9pbiIsZnVuY3Rpb24oKXtyZXR1cm4gci5tfSksbi5kKHQsImNhbmNlbCIsZnVuY3Rpb24oKXtyZXR1cm4gci5mfSksbi5kKHQsInNlbGVjdCIsZnVuY3Rpb24oKXtyZXR1cm4gci5wfSksbi5kKHQsImFjdGlvbkNoYW5uZWwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJjYW5jZWxsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZ30pLG4uZCh0LCJmbHVzaCIsZnVuY3Rpb24oKXtyZXR1cm4gci5qfSksbi5kKHQsImdldENvbnRleHQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIubH0pLG4uZCh0LCJzZXRDb250ZXh0IixmdW5jdGlvbigpe3JldHVybiByLnF9KSxuLmQodCwidGFrZUV2ZXJ5IixmdW5jdGlvbigpe3JldHVybiByLnR9KSxuLmQodCwidGFrZUxhdGVzdCIsZnVuY3Rpb24oKXtyZXR1cm4gci51fSksbi5kKHQsInRocm90dGxlIixmdW5jdGlvbigpe3JldHVybiByLnd9KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gaShlKXtpZihsPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChsPT09bnx8IWwpJiZzZXRUaW1lb3V0KXJldHVybiBsPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gbChlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gbC5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gbC5jYWxsKHRoaXMsZSwwKX19fWZ1bmN0aW9uIG8oZSl7aWYocD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChwPT09cnx8IXApJiZjbGVhclRpbWVvdXQpcmV0dXJuIHA9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7cmV0dXJuIHAoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBwLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gcC5jYWxsKHRoaXMsZSl9fX1mdW5jdGlvbiBhKCl7bSYmZCYmKG09ITEsZC5sZW5ndGg/aD1kLmNvbmNhdChoKTpnPS0xLGgubGVuZ3RoJiZzKCkpfWZ1bmN0aW9uIHMoKXtpZighbSl7dmFyIGU9aShhKTttPSEwO2Zvcih2YXIgdD1oLmxlbmd0aDt0Oyl7Zm9yKGQ9aCxoPVtdOysrZzx0OylkJiZkW2ddLnJ1bigpO2c9LTEsdD1oLmxlbmd0aH1kPW51bGwsbT0hMSxvKGUpfX1mdW5jdGlvbiB1KGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gYygpe312YXIgbCxwLGY9ZS5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtsPSJmdW5jdGlvbiI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om59Y2F0Y2goZSl7bD1ufXRyeXtwPSJmdW5jdGlvbiI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpyfWNhdGNoKGUpe3A9cn19KCk7dmFyIGQsaD1bXSxtPSExLGc9LTE7Zi5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO2gucHVzaChuZXcgdShlLHQpKSwxIT09aC5sZW5ndGh8fG18fGkocyl9LHUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGYudGl0bGU9ImJyb3dzZXIiLGYuYnJvd3Nlcj0hMCxmLmVudj17fSxmLmFyZ3Y9W10sZi52ZXJzaW9uPSIiLGYudmVyc2lvbnM9e30sZi5vbj1jLGYuYWRkTGlzdGVuZXI9YyxmLm9uY2U9YyxmLm9mZj1jLGYucmVtb3ZlTGlzdGVuZXI9YyxmLnJlbW92ZUFsbExpc3RlbmVycz1jLGYuZW1pdD1jLGYucHJlcGVuZExpc3RlbmVyPWMsZi5wcmVwZW5kT25jZUxpc3RlbmVyPWMsZi5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LGYuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGYuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxmLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGYudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9bnx8dSxvPXZvaWQgMCxhPUFycmF5LmlzQXJyYXkoZSksbD1bZV0scD0tMSxmPVtdLGQ9dm9pZCAwLGg9W10sbT1bXSxnPWU7ZG97cCsrO3ZhciB5PXA9PT1sLmxlbmd0aCx2PXZvaWQgMCxiPXZvaWQgMCx4PXkmJjAhPT1mLmxlbmd0aDtpZih5KXtpZih2PTA9PT1tLmxlbmd0aD92b2lkIDA6aC5wb3AoKSxiPWQsZD1tLnBvcCgpLHgpe2lmKGEpYj1iLnNsaWNlKCk7ZWxzZXt2YXIgQz17fTtmb3IodmFyIEUgaW4gYiliLmhhc093blByb3BlcnR5KEUpJiYoQ1tFXT1iW0VdKTtiPUN9Zm9yKHZhciBEPTAsdz0wO3c8Zi5sZW5ndGg7dysrKXt2YXIgUz1mW3ddWzBdLGs9Zlt3XVsxXTthJiYoUy09RCksYSYmbnVsbD09PWs/KGIuc3BsaWNlKFMsMSksRCsrKTpiW1NdPWt9fXA9by5pbmRleCxsPW8ua2V5cyxmPW8uZWRpdHMsYT1vLmluQXJyYXksbz1vLnByZXZ9ZWxzZXtpZih2PWQ/YT9wOmxbcF06dm9pZCAwLG51bGw9PT0oYj1kP2Rbdl06Zyl8fHZvaWQgMD09PWIpY29udGludWU7ZCYmaC5wdXNoKHYpfXZhciBBPXZvaWQgMDtpZighQXJyYXkuaXNBcnJheShiKSl7aWYoIWkoYikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEFTVCBOb2RlOiAiK0pTT04uc3RyaW5naWZ5KGIpKTt2YXIgXz1zKHQsYi5raW5kLHkpO2lmKF8pe2lmKChBPV8uY2FsbCh0LGIsdixkLGgsbSkpPT09YylicmVhaztpZighMT09PUEpe2lmKCF5KXtoLnBvcCgpO2NvbnRpbnVlfX1lbHNlIGlmKHZvaWQgMCE9PUEmJihmLnB1c2goW3YsQV0pLCF5KSl7aWYoIWkoQSkpe2gucG9wKCk7Y29udGludWV9Yj1BfX19dm9pZCAwPT09QSYmeCYmZi5wdXNoKFt2LGJdKSx5fHwobz17aW5BcnJheTphLGluZGV4OnAsa2V5czpsLGVkaXRzOmYscHJldjpvfSxhPUFycmF5LmlzQXJyYXkoYiksbD1hP2I6cltiLmtpbmRdfHxbXSxwPS0xLGY9W10sZCYmbS5wdXNoKGQpLGQ9Yil9d2hpbGUodm9pZCAwIT09byk7cmV0dXJuIDAhPT1mLmxlbmd0aCYmKGc9ZltmLmxlbmd0aC0xXVsxXSksZ31mdW5jdGlvbiBpKGUpe3JldHVybiBlJiYic3RyaW5nIj09PXR5cGVvZiBlLmtpbmR9ZnVuY3Rpb24gbyhlKXt2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpO3JldHVybntlbnRlcjpmdW5jdGlvbihuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZighdFtyXSl7dmFyIGk9cyhlW3JdLG4ua2luZCwhMSk7aWYoaSl7dmFyIG89aS5hcHBseShlW3JdLGFyZ3VtZW50cyk7aWYoITE9PT1vKXRbcl09bjtlbHNlIGlmKG89PT1jKXRbcl09YztlbHNlIGlmKHZvaWQgMCE9PW8pcmV0dXJuIG99fX0sbGVhdmU6ZnVuY3Rpb24obil7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYodFtyXSl0W3JdPT09biYmKHRbcl09bnVsbCk7ZWxzZXt2YXIgaT1zKGVbcl0sbi5raW5kLCEwKTtpZihpKXt2YXIgbz1pLmFwcGx5KGVbcl0sYXJndW1lbnRzKTtpZihvPT09Yyl0W3JdPWM7ZWxzZSBpZih2b2lkIDAhPT1vJiYhMSE9PW8pcmV0dXJuIG99fX19fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm57ZW50ZXI6ZnVuY3Rpb24obil7ZS5lbnRlcihuKTt2YXIgcj1zKHQsbi5raW5kLCExKTtpZihyKXt2YXIgbz1yLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gdm9pZCAwIT09byYmKGUubGVhdmUobiksaShvKSYmZS5lbnRlcihvKSksb319LGxlYXZlOmZ1bmN0aW9uKG4pe3ZhciByPXModCxuLmtpbmQsITApLGk9dm9pZCAwO3JldHVybiByJiYoaT1yLmFwcGx5KHQsYXJndW1lbnRzKSksZS5sZWF2ZShuKSxpfX19ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHI9ZVt0XTtpZihyKXtpZighbiYmImZ1bmN0aW9uIj09PXR5cGVvZiByKXJldHVybiByO3ZhciBpPW4/ci5sZWF2ZTpyLmVudGVyO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgaSlyZXR1cm4gaX1lbHNle3ZhciBvPW4/ZS5sZWF2ZTplLmVudGVyO2lmKG8pe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgbylyZXR1cm4gbzt2YXIgYT1vW3RdO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gYX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnZpc2l0PXIsdC52aXNpdEluUGFyYWxsZWw9byx0LnZpc2l0V2l0aFR5cGVJbmZvPWEsdC5nZXRWaXNpdEZuPXM7dmFyIHU9dC5RdWVyeURvY3VtZW50S2V5cz17TmFtZTpbXSxEb2N1bWVudDpbImRlZmluaXRpb25zIl0sT3BlcmF0aW9uRGVmaW5pdGlvbjpbIm5hbWUiLCJ2YXJpYWJsZURlZmluaXRpb25zIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLFZhcmlhYmxlRGVmaW5pdGlvbjpbInZhcmlhYmxlIiwidHlwZSIsImRlZmF1bHRWYWx1ZSJdLFZhcmlhYmxlOlsibmFtZSJdLFNlbGVjdGlvblNldDpbInNlbGVjdGlvbnMiXSxGaWVsZDpbImFsaWFzIiwibmFtZSIsImFyZ3VtZW50cyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxBcmd1bWVudDpbIm5hbWUiLCJ2YWx1ZSJdLEZyYWdtZW50U3ByZWFkOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxJbmxpbmVGcmFnbWVudDpbInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sRnJhZ21lbnREZWZpbml0aW9uOlsibmFtZSIsInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sSW50VmFsdWU6W10sRmxvYXRWYWx1ZTpbXSxTdHJpbmdWYWx1ZTpbXSxCb29sZWFuVmFsdWU6W10sTnVsbFZhbHVlOltdLEVudW1WYWx1ZTpbXSxMaXN0VmFsdWU6WyJ2YWx1ZXMiXSxPYmplY3RWYWx1ZTpbImZpZWxkcyJdLE9iamVjdEZpZWxkOlsibmFtZSIsInZhbHVlIl0sRGlyZWN0aXZlOlsibmFtZSIsImFyZ3VtZW50cyJdLE5hbWVkVHlwZTpbIm5hbWUiXSxMaXN0VHlwZTpbInR5cGUiXSxOb25OdWxsVHlwZTpbInR5cGUiXSxTY2hlbWFEZWZpbml0aW9uOlsiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246WyJ0eXBlIl0sU2NhbGFyVHlwZURlZmluaXRpb246WyJuYW1lIiwiZGlyZWN0aXZlcyJdLE9iamVjdFR5cGVEZWZpbml0aW9uOlsibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRmllbGREZWZpbml0aW9uOlsibmFtZSIsImFyZ3VtZW50cyIsInR5cGUiLCJkaXJlY3RpdmVzIl0sSW5wdXRWYWx1ZURlZmluaXRpb246WyJuYW1lIiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImRpcmVjdGl2ZXMiXSxJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sVW5pb25UeXBlRGVmaW5pdGlvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZURlZmluaXRpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLEVudW1WYWx1ZURlZmluaXRpb246WyJuYW1lIiwiZGlyZWN0aXZlcyJdLElucHV0T2JqZWN0VHlwZURlZmluaXRpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFR5cGVFeHRlbnNpb25EZWZpbml0aW9uOlsiZGVmaW5pdGlvbiJdLERpcmVjdGl2ZURlZmluaXRpb246WyJuYW1lIiwiYXJndW1lbnRzIiwibG9jYXRpb25zIl19LGM9dC5CUkVBSz17fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiB2b2lkIDA9PT1lfHxlIT09ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQsbil7aWYoZSl7aWYodCBpbnN0YW5jZW9mIGcuR3JhcGhRTE5vbk51bGwpe2lmKGUua2luZD09PW0uTlVMTClyZXR1cm47cmV0dXJuIGkoZSx0Lm9mVHlwZSxuKX1pZihlLmtpbmQ9PT1tLk5VTEwpcmV0dXJuIG51bGw7aWYoZS5raW5kPT09bS5WQVJJQUJMRSl7dmFyIHI9ZS5uYW1lLnZhbHVlO2lmKCFufHwoMCxkLmRlZmF1bHQpKG5bcl0pKXJldHVybjtyZXR1cm4gbltyXX1pZih0IGluc3RhbmNlb2YgZy5HcmFwaFFMTGlzdCl7dmFyIGE9dC5vZlR5cGU7aWYoZS5raW5kPT09bS5MSVNUKXtmb3IodmFyIHU9W10sbD1lLnZhbHVlcyxmPTA7ZjxsLmxlbmd0aDtmKyspaWYobyhsW2ZdLG4pKXtpZihhIGluc3RhbmNlb2YgZy5HcmFwaFFMTm9uTnVsbClyZXR1cm47dS5wdXNoKG51bGwpfWVsc2V7dmFyIGg9aShsW2ZdLGEsbik7aWYoKDAsZC5kZWZhdWx0KShoKSlyZXR1cm47dS5wdXNoKGgpfXJldHVybiB1fXZhciB5PWkoZSxhLG4pO2lmKCgwLGQuZGVmYXVsdCkoeSkpcmV0dXJuO3JldHVyblt5XX1pZih0IGluc3RhbmNlb2YgZy5HcmFwaFFMSW5wdXRPYmplY3RUeXBlKXtpZihlLmtpbmQhPT1tLk9CSkVDVClyZXR1cm47Zm9yKHZhciB2PU9iamVjdC5jcmVhdGUobnVsbCksYj10LmdldEZpZWxkcygpLHg9KDAscy5kZWZhdWx0KShlLmZpZWxkcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSksQz1PYmplY3Qua2V5cyhiKSxFPTA7RTxDLmxlbmd0aDtFKyspe3ZhciBEPUNbRV0sdz1iW0RdLFM9eFtEXTtpZihTJiYhbyhTLnZhbHVlLG4pKXt2YXIgaz1pKFMudmFsdWUsdy50eXBlLG4pO2lmKCgwLGQuZGVmYXVsdCkoaykpcmV0dXJuO3ZbRF09a31lbHNlIGlmKCgwLGQuZGVmYXVsdCkody5kZWZhdWx0VmFsdWUpKXtpZih3LnR5cGUgaW5zdGFuY2VvZiBnLkdyYXBoUUxOb25OdWxsKXJldHVybn1lbHNlIHZbRF09dy5kZWZhdWx0VmFsdWV9cmV0dXJuIHZ9dCBpbnN0YW5jZW9mIGcuR3JhcGhRTFNjYWxhclR5cGV8fHQgaW5zdGFuY2VvZiBnLkdyYXBoUUxFbnVtVHlwZXx8KDAsYy5kZWZhdWx0KSgwLCJNdXN0IGJlIGlucHV0IHR5cGUiKTt2YXIgQT10LnBhcnNlTGl0ZXJhbChlKTtpZighKDAscC5kZWZhdWx0KShBKXx8dC5pc1ZhbGlkTGl0ZXJhbChlKSlyZXR1cm4gQX19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlLmtpbmQ9PT1tLlZBUklBQkxFJiYoIXR8fCgwLGQuZGVmYXVsdCkodFtlLm5hbWUudmFsdWVdKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudmFsdWVGcm9tQVNUPWk7dmFyIGE9big0Nikscz1yKGEpLHU9bigxMyksYz1yKHUpLGw9bigzNSkscD1yKGwpLGY9big1OCksZD1yKGYpLGg9bigxMCksbT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KGgpLGc9big2KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PWU/IiI6T2JqZWN0KGkuYSkoZSl9dmFyIGk9big0MjIpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0iLyIsaT0ifHwifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGV9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBuPTAscj1NYXRoLnBvdygzNiw0KSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjAwMDAwMDAwMCIrZTtyZXR1cm4gbi5zdWJzdHIobi5sZW5ndGgtdCl9LG89ZnVuY3Rpb24oKXtyZXR1cm4gaSgoTWF0aC5yYW5kb20oKSpyPDwwKS50b1N0cmluZygzNiksNCl9LGE9ZnVuY3Rpb24oKXtyZXR1cm4gbj1uPHI/bjowLCsrbi0xfSxzPWZ1bmN0aW9uKCl7dmFyIGUsdD0obmV3IERhdGUpLmdldFRpbWUoKS50b1N0cmluZygzNiksbj1zLmZpbmdlcnByaW50KCkscj1vKCkrbygpO3JldHVybiBlPWkoYSgpLnRvU3RyaW5nKDM2KSw0KSwiYyIrdCtlK24rcn07cy5zbHVnPWZ1bmN0aW9uKCl7dmFyIGUsdD0obmV3IERhdGUpLmdldFRpbWUoKS50b1N0cmluZygzNiksbj1zLmZpbmdlcnByaW50KCkuc2xpY2UoMCwxKStzLmZpbmdlcnByaW50KCkuc2xpY2UoLTEpLHI9bygpLnNsaWNlKC0yKTtyZXR1cm4gZT1hKCkudG9TdHJpbmcoMzYpLnNsaWNlKC00KSx0LnNsaWNlKC0yKStlK24rcn0scy5nbG9iYWxDb3VudD1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7dmFyIGUsdD0wO2ZvcihlIGluIHdpbmRvdyl0Kys7cmV0dXJuIHR9KCk7cmV0dXJuIHMuZ2xvYmFsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZX0scy5maW5nZXJwcmludD1mdW5jdGlvbigpe3JldHVybiBpKChuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCtuYXZpZ2F0b3IudXNlckFnZW50Lmxlbmd0aCkudG9TdHJpbmcoMzYpK3MuZ2xvYmFsQ291bnQoKS50b1N0cmluZygzNiksNCl9LHQucmVnaXN0ZXI/dC5yZWdpc3RlcigiY3VpZCIscyk6ZS5leHBvcnRzPXN9KHRoaXMuYXBwbGl0dWRlfHx0aGlzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0LG4scj1bXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspclt0XT1hcmd1bWVudHNbdF07cmV0dXJuIHModGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0LnRyeXMucHVzaChbMCwyLCwzXSksWzQsZS5hcHBseSh2b2lkIDAscildO2Nhc2UgMTpyZXR1cm4gdC5zZW50KCksWzMsM107Y2FzZSAyOnJldHVybiBuPXQuc2VudCgpLGNvbnNvbGUuZXJyb3IobiksWzMsM107Y2FzZSAzOnJldHVyblsyXX19KX19ZnVuY3Rpb24gaShlLHQpe3JldHVybiB1LmZvcm1hdChlLGEoe30sdCx7cGFyc2VyOiJncmFwaHFsIixwbHVnaW5zOltjXX0pKX1mdW5jdGlvbiBvKCl7dHJ5e3JldHVybiB3aW5kb3cuc2VsZiE9PXdpbmRvdy50b3B9Y2F0Y2goZSl7cmV0dXJuITB9fXZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pfXJldHVybiBlfSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByKFtlLHRdKX19ZnVuY3Rpb24gcihuKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3U7KXRyeXtpZihpPTEsbyYmKGE9MiZuWzBdP28ucmV0dXJuOm5bMF0/by50aHJvd3x8KChhPW8ucmV0dXJuKSYmYS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoYT1hLmNhbGwobyxuWzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gobz0wLGEmJihuPVsyJm5bMF0sYS52YWx1ZV0pLG5bMF0pe2Nhc2UgMDpjYXNlIDE6YT1uO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdS5sYWJlbCsrLHt2YWx1ZTpuWzFdLGRvbmU6ITF9O2Nhc2UgNTp1LmxhYmVsKyssbz1uWzFdLG49WzBdO2NvbnRpbnVlO2Nhc2UgNzpuPXUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9dS50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKDY9PT1uWzBdfHwyPT09blswXSkpe3U9MDtjb250aW51ZX1pZigzPT09blswXSYmKCFhfHxuWzFdPmFbMF0mJm5bMV08YVszXSkpe3UubGFiZWw9blsxXTticmVha31pZig2PT09blswXSYmdS5sYWJlbDxhWzFdKXt1LmxhYmVsPWFbMV0sYT1uO2JyZWFrfWlmKGEmJnUubGFiZWw8YVsyXSl7dS5sYWJlbD1hWzJdLHUub3BzLnB1c2gobik7YnJlYWt9YVsyXSYmdS5vcHMucG9wKCksdS50cnlzLnBvcCgpO2NvbnRpbnVlfW49dC5jYWxsKGUsdSl9Y2F0Y2goZSl7bj1bNixlXSxvPTB9ZmluYWxseXtpPWE9MH1pZig1Jm5bMF0pdGhyb3cgblsxXTtyZXR1cm57dmFsdWU6blswXT9uWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgaSxvLGEscyx1PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmFbMF0pdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzPXtuZXh0Om4oMCksdGhyb3c6bigxKSxyZXR1cm46bigyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihzW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHN9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT1uKDUwOCksYz1uKDUwOSk7dC5zYWZlbHk9cix0LnByZXR0aWZ5PWksdC5pc0lmcmFtZT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2Zvcih2YXIgcj1uLmdldEluKFsiZmllbGQiLCJwYXRoIl0pLG89ci5zcGxpdCgiLyIpLGE9bnVsbCxzPTAsdT1udWxsLGM9LTE7by5sZW5ndGg+MDspIWZ1bmN0aW9uKCl7dmFyIG49by5zaGlmdCgpO2lmKDA9PT1zKWE9ZVtuXSxjPU9iamVjdC5rZXlzKGUpLmluZGV4T2Yobik7ZWxzZXt2YXIgcj1hLmFyZ3MuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09bn0pO3U9YSxyP2E9cjooYS50eXBlLm9mVHlwZSYmKGE9aShhLnR5cGUub2ZUeXBlKSksYS50eXBlJiYoYT1hLnR5cGUpLGE9YS5nZXRGaWVsZHMoKVtuXXx8YS5nZXRJbnRlcmZhY2VzKCkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09bn0pKX11JiYoYz1sKHQsdSxhKSkscysrfSgpO3JldHVybiBhPyhhLnBhdGg9cixhLnBhcmVudD11LG4ubWVyZ2Uoe3k6YyxmaWVsZDphfSkpOm51bGx9ZnVuY3Rpb24gaShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSxlLm9mVHlwZSYmdDw1P2koZS5vZlR5cGUsdCsxKTplfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHAoe30sZS5nZXRRdWVyeVR5cGUoKS5nZXRGaWVsZHMoKSxlLmdldE11dGF0aW9uVHlwZSYmZS5nZXRNdXRhdGlvblR5cGUoKSYmZS5nZXRNdXRhdGlvblR5cGUoKS5nZXRGaWVsZHMoKSxlLmdldFN1YnNjcmlwdGlvblR5cGUmJmUuZ2V0U3Vic2NyaXB0aW9uVHlwZSgpJiZlLmdldFN1YnNjcmlwdGlvblR5cGUoKS5nZXRGaWVsZHMoKSl9ZnVuY3Rpb24gYShlKXt2YXIgdD17cXVlcmllczpbXSxtdXRhdGlvbnM6W10sc3Vic2NyaXB0aW9uczpbXX0sbj1lLmdldFF1ZXJ5VHlwZSgpLHI9bi5nZXRGaWVsZHMoKTt0LnF1ZXJpZXM9T2JqZWN0LmtleXMocikubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07cmV0dXJuIHQucGF0aD1lLHQucGFyZW50PW51bGwsdH0pO3ZhciBpPWUuZ2V0TXV0YXRpb25UeXBlJiZlLmdldE11dGF0aW9uVHlwZSgpO2lmKGkpe3ZhciBvPWkuZ2V0RmllbGRzKCk7dC5tdXRhdGlvbnM9T2JqZWN0LmtleXMobykubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PW9bZV07cmV0dXJuIHQucGF0aD1lLHQucGFyZW50PW51bGwsdH0pfXdpbmRvdy5zcz1lO3ZhciBhPWUuZ2V0U3Vic2NyaXB0aW9uVHlwZSYmZS5nZXRTdWJzY3JpcHRpb25UeXBlKCk7aWYoYSl7dmFyIHM9YS5nZXRGaWVsZHMoKTt0LnN1YnNjcmlwdGlvbnM9T2JqZWN0LmtleXMocykubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PXNbZV07cmV0dXJuIHQucGF0aD1lLHQucGFyZW50PW51bGwsdH0pfXJldHVybiB0fWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj0wO3JldHVybiBlLnF1ZXJpZXNbdCtuXT9lLnF1ZXJpZXNbdCtuXToobis9ZS5xdWVyaWVzLmxlbmd0aCxlLm11dGF0aW9uc1t0LW5dP2UubXV0YXRpb25zW3Qtbl06KG4rPWUubXV0YXRpb25zLmxlbmd0aCxlLnN1YnNjcmlwdGlvbnNbdC1uXT9lLnN1YnNjcmlwdGlvbnNbdC1uXTp2b2lkIDApKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49e2ZpZWxkczpbXSxpbnRlcmZhY2VzOltdLGFyZ3M6W10saW1wbGVtZW50YXRpb25zOltdfSxyPXQudHlwZXx8dCxvPWYuaXNUeXBlKHIpO2lmKHIub2ZUeXBlJiYocj1pKHIub2ZUeXBlKSksci5nZXRGaWVsZHMpe3ZhciBhPXIuZ2V0RmllbGRzKCk7bi5maWVsZHM9T2JqZWN0LmtleXMoYSkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPWFbZV07cmV0dXJuIG4ucGFyZW50PXQsbi5wYXRoPXQucGF0aCsiLyIrZSxufSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBmLkdyYXBoUUxPYmplY3RUeXBlJiYobi5pbnRlcmZhY2VzPXIuZ2V0SW50ZXJmYWNlcygpKSxuLmFyZ3M9dC5hcmdzP3QuYXJnczpbXSxvJiZyIGluc3RhbmNlb2YgZi5HcmFwaFFMSW50ZXJmYWNlVHlwZSYmKG4uaW1wbGVtZW50YXRpb25zPWUuZ2V0UG9zc2libGVUeXBlcyhyKSksbn1mdW5jdGlvbiBjKGUsdCl7dmFyIG49MDtyZXR1cm4gZS5pbnRlcmZhY2VzW3Qrbl0/ZS5pbnRlcmZhY2VzW3Qrbl06KG4rPWUuaW50ZXJmYWNlcy5sZW5ndGgsZS5maWVsZHNbdC1uXT9lLmZpZWxkc1t0LW5dOihuKz1lLmZpZWxkcy5sZW5ndGgsZS5hcmdzW3Qtbl0/ZS5hcmdzW3Qtbl06KG4rPWUuYXJncy5sZW5ndGgsZS5pbXBsZW1lbnRhdGlvbnNbdC1uXT9lLmltcGxlbWVudGF0aW9uc1t0LW5dOnZvaWQgMCkpKX1mdW5jdGlvbiBsKGUsdCxuKXt2YXIgcj11KGUsdCksaT1yLmludGVyZmFjZXMuaW5kZXhPZihuKTtpZihpPi0xKXJldHVybiBpO3ZhciBvPXIuZmllbGRzLmluZGV4T2Yobik7aWYobz4tMSlyZXR1cm4gci5pbnRlcmZhY2VzLmxlbmd0aCtvO3ZhciBhPXIuYXJncy5pbmRleE9mKG4pO2lmKGE+LTEpcmV0dXJuIHIuaW50ZXJmYWNlcy5sZW5ndGgrci5maWVsZHMubGVuZ3RoK2E7dmFyIHM9ci5pbXBsZW1lbnRhdGlvbnMuaW5kZXhPZihuKTtyZXR1cm4gcz4tMT9yLmludGVyZmFjZXMubGVuZ3RoK3IuZmllbGRzLmxlbmd0aCtyLmFyZ3MubGVuZ3RoK3M6MH12YXIgcD1mdW5jdGlvbigpe3JldHVybiBwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0scC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj1uKDcpO3QuZ2V0TmV3U3RhY2s9cix0LmdldERlZXBlclR5cGU9aSx0LmdldFJvb3RNYXA9byx0LnNlcmlhbGl6ZVJvb3Q9YSx0LmdldEVsZW1lbnRSb290PXMsdC5zZXJpYWxpemU9dSx0LmdldEVsZW1lbnQ9Yyx0LmdldEVsZW1lbnRJbmRleD1sfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcixpPW4oMjMpO3Quc2V0U3RhY2tzPShyPWkuY3JlYXRlQWN0aW9ucyh7U0VUX1NUQUNLUzpmdW5jdGlvbihlLHQpe3JldHVybntzZXNzaW9uSWQ6ZSxzdGFja3M6dH19LEFERF9TVEFDSzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm57c2Vzc2lvbklkOmUsZmllbGQ6dCx4Om4seTpyfX0sVE9HR0xFX0RPQ1M6ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2Vzc2lvbklkOmUsYWN0aXZlVGFiSWR4OnR9fSxTRVRfRE9DU19WSVNJQkxFOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57c2Vzc2lvbklkOmUsb3Blbjp0LGFjdGl2ZVRhYklkeDpufX0sQ0hBTkdFX1dJRFRIX0RPQ1M6ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2Vzc2lvbklkOmUsd2lkdGg6dH19LENIQU5HRV9LRVlfTU9WRTpmdW5jdGlvbihlLHQpe3JldHVybntzZXNzaW9uSWQ6ZSxtb3ZlOnR9fSxTSE9XX0RPQ19GT1JfUkVGRVJFTkNFOmZ1bmN0aW9uKGUpe3JldHVybntyZWZlcmVuY2U6ZX19fSksci5zZXRTdGFja3MpLHQuYWRkU3RhY2s9ci5hZGRTdGFjayx0LnRvZ2dsZURvY3M9ci50b2dnbGVEb2NzLHQuc2V0RG9jc1Zpc2libGU9ci5zZXREb2NzVmlzaWJsZSx0LmNoYW5nZVdpZHRoRG9jcz1yLmNoYW5nZVdpZHRoRG9jcyx0LmNoYW5nZUtleU1vdmU9ci5jaGFuZ2VLZXlNb3ZlLHQuc2hvd0RvY0ZvclJlZmVyZW5jZT1yLnNob3dEb2NGb3JSZWZlcmVuY2V9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOCksaT1uKDEzMCksbz1uKDE3KTt0LmdldFNlc3Npb25Eb2NzU3RhdGU9ci5jcmVhdGVTZWxlY3Rvcihbby5nZXRTZWxlY3RlZFdvcmtzcGFjZV0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZXNzaW9ucy5zZWxlY3RlZFNlc3Npb25JZDtyZXR1cm4gZS5kb2NzLmdldCh0KXx8bmV3IGkuRG9jc1Nlc3Npb259KSx0LmdldFNlc3Npb25Eb2NzPXIuY3JlYXRlU2VsZWN0b3IoW3QuZ2V0U2Vzc2lvbkRvY3NTdGF0ZV0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9KUygpfSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7ZShuKDIpKX0oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQscil7dmFyIGk9ZS5nZXRMaW5lSGFuZGxlKHQubGluZSksbz10LmNoLTEsdT1yJiZyLmFmdGVyQ3Vyc29yO251bGw9PXUmJih1PS8oXnwgKWNtLWZhdC1jdXJzb3IoJHwgKS8udGVzdChlLmdldFdyYXBwZXJFbGVtZW50KCkuY2xhc3NOYW1lKSk7dmFyIGM9IXUmJm8+PTAmJnNbaS50ZXh0LmNoYXJBdChvKV18fHNbaS50ZXh0LmNoYXJBdCgrK28pXTtpZighYylyZXR1cm4gbnVsbDt2YXIgbD0iPiI9PWMuY2hhckF0KDEpPzE6LTE7aWYociYmci5zdHJpY3QmJmw+MCE9KG89PXQuY2gpKXJldHVybiBudWxsO3ZhciBwPWUuZ2V0VG9rZW5UeXBlQXQoYSh0LmxpbmUsbysxKSksZj1uKGUsYSh0LmxpbmUsbysobD4wPzE6MCkpLGwscHx8bnVsbCxyKTtyZXR1cm4gbnVsbD09Zj9udWxsOntmcm9tOmEodC5saW5lLG8pLHRvOmYmJmYucG9zLG1hdGNoOmYmJmYuY2g9PWMuY2hhckF0KDApLGZvcndhcmQ6bD4wfX1mdW5jdGlvbiBuKGUsdCxuLHIsaSl7Zm9yKHZhciBvPWkmJmkubWF4U2NhbkxpbmVMZW5ndGh8fDFlNCx1PWkmJmkubWF4U2NhbkxpbmVzfHwxZTMsYz1bXSxsPWkmJmkuYnJhY2tldFJlZ2V4P2kuYnJhY2tldFJlZ2V4Oi9bKCl7fVtcXV0vLHA9bj4wP01hdGgubWluKHQubGluZSt1LGUubGFzdExpbmUoKSsxKTpNYXRoLm1heChlLmZpcnN0TGluZSgpLTEsdC5saW5lLXUpLGY9dC5saW5lO2YhPXA7Zis9bil7dmFyIGQ9ZS5nZXRMaW5lKGYpO2lmKGQpe3ZhciBoPW4+MD8wOmQubGVuZ3RoLTEsbT1uPjA/ZC5sZW5ndGg6LTE7aWYoIShkLmxlbmd0aD5vKSlmb3IoZj09dC5saW5lJiYoaD10LmNoLShuPDA/MTowKSk7aCE9bTtoKz1uKXt2YXIgZz1kLmNoYXJBdChoKTtpZihsLnRlc3QoZykmJih2b2lkIDA9PT1yfHxlLmdldFRva2VuVHlwZUF0KGEoZixoKzEpKT09cikpe3ZhciB5PXNbZ107aWYoIj4iPT15LmNoYXJBdCgxKT09bj4wKWMucHVzaChnKTtlbHNle2lmKCFjLmxlbmd0aClyZXR1cm57cG9zOmEoZixoKSxjaDpnfTtjLnBvcCgpfX19fX1yZXR1cm4gZi1uIT0obj4wP2UubGFzdExpbmUoKTplLmZpcnN0TGluZSgpKSYmbnVsbH1mdW5jdGlvbiByKGUsbixyKXtmb3IodmFyIGk9ZS5zdGF0ZS5tYXRjaEJyYWNrZXRzLm1heEhpZ2hsaWdodExpbmVMZW5ndGh8fDFlMyxzPVtdLHU9ZS5saXN0U2VsZWN0aW9ucygpLGM9MDtjPHUubGVuZ3RoO2MrKyl7dmFyIGw9dVtjXS5lbXB0eSgpJiZ0KGUsdVtjXS5oZWFkLHIpO2lmKGwmJmUuZ2V0TGluZShsLmZyb20ubGluZSkubGVuZ3RoPD1pKXt2YXIgcD1sLm1hdGNoPyJDb2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCI6IkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IjtzLnB1c2goZS5tYXJrVGV4dChsLmZyb20sYShsLmZyb20ubGluZSxsLmZyb20uY2grMSkse2NsYXNzTmFtZTpwfSkpLGwudG8mJmUuZ2V0TGluZShsLnRvLmxpbmUpLmxlbmd0aDw9aSYmcy5wdXNoKGUubWFya1RleHQobC50byxhKGwudG8ubGluZSxsLnRvLmNoKzEpLHtjbGFzc05hbWU6cH0pKX19aWYocy5sZW5ndGgpe28mJmUuc3RhdGUuZm9jdXNlZCYmZS5mb2N1cygpO3ZhciBmPWZ1bmN0aW9uKCl7ZS5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoO2UrKylzW2VdLmNsZWFyKCl9KX07aWYoIW4pcmV0dXJuIGY7c2V0VGltZW91dChmLDgwMCl9fWZ1bmN0aW9uIGkoZSl7ZS5vcGVyYXRpb24oZnVuY3Rpb24oKXtlLnN0YXRlLm1hdGNoQnJhY2tldHMuY3VycmVudGx5SGlnaGxpZ2h0ZWQmJihlLnN0YXRlLm1hdGNoQnJhY2tldHMuY3VycmVudGx5SGlnaGxpZ2h0ZWQoKSxlLnN0YXRlLm1hdGNoQnJhY2tldHMuY3VycmVudGx5SGlnaGxpZ2h0ZWQ9bnVsbCksZS5zdGF0ZS5tYXRjaEJyYWNrZXRzLmN1cnJlbnRseUhpZ2hsaWdodGVkPXIoZSwhMSxlLnN0YXRlLm1hdGNoQnJhY2tldHMpfSl9dmFyIG89L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxhPWUuUG9zLHM9eyIoIjoiKT4iLCIpIjoiKDwiLCJbIjoiXT4iLCJdIjoiWzwiLCJ7IjoifT4iLCJ9IjoiezwifTtlLmRlZmluZU9wdGlvbigibWF0Y2hCcmFja2V0cyIsITEsZnVuY3Rpb24odCxuLHIpe3ImJnIhPWUuSW5pdCYmKHQub2ZmKCJjdXJzb3JBY3Rpdml0eSIsaSksdC5zdGF0ZS5tYXRjaEJyYWNrZXRzJiZ0LnN0YXRlLm1hdGNoQnJhY2tldHMuY3VycmVudGx5SGlnaGxpZ2h0ZWQmJih0LnN0YXRlLm1hdGNoQnJhY2tldHMuY3VycmVudGx5SGlnaGxpZ2h0ZWQoKSx0LnN0YXRlLm1hdGNoQnJhY2tldHMuY3VycmVudGx5SGlnaGxpZ2h0ZWQ9bnVsbCkpLG4mJih0LnN0YXRlLm1hdGNoQnJhY2tldHM9Im9iamVjdCI9PXR5cGVvZiBuP246e30sdC5vbigiY3Vyc29yQWN0aXZpdHkiLGkpKX0pLGUuZGVmaW5lRXh0ZW5zaW9uKCJtYXRjaEJyYWNrZXRzIixmdW5jdGlvbigpe3IodGhpcywhMCl9KSxlLmRlZmluZUV4dGVuc2lvbigiZmluZE1hdGNoaW5nQnJhY2tldCIsZnVuY3Rpb24oZSxuLHIpe3JldHVybihyfHwiYm9vbGVhbiI9PXR5cGVvZiBuKSYmKHI/KHIuc3RyaWN0PW4sbj1yKTpuPW4/e3N0cmljdDohMH06bnVsbCksdCh0aGlzLGUsbil9KSxlLmRlZmluZUV4dGVuc2lvbigic2NhbkZvckJyYWNrZXQiLGZ1bmN0aW9uKGUsdCxyLGkpe3JldHVybiBuKHRoaXMsZSx0LHIsaSl9KX0pfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpe2UobigyKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtlLnJlZ2lzdGVySGVscGVyKCJmb2xkIiwiYnJhY2UiLGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcihyKXtmb3IodmFyIHM9bi5jaCx1PTA7Oyl7dmFyIGM9czw9MD8tMTphLmxhc3RJbmRleE9mKHIscy0xKTtpZigtMSE9Yyl7aWYoMT09dSYmYzxuLmNoKWJyZWFrO2lmKGk9dC5nZXRUb2tlblR5cGVBdChlLlBvcyhvLGMrMSkpLCEvXihjb21tZW50fHN0cmluZykvLnRlc3QoaSkpcmV0dXJuIGMrMTtzPWMtMX1lbHNle2lmKDE9PXUpYnJlYWs7dT0xLHM9YS5sZW5ndGh9fX12YXIgaSxvPW4ubGluZSxhPXQuZ2V0TGluZShvKSxzPSJ7Iix1PSJ9IixjPXIoInsiKTtpZihudWxsPT1jJiYocz0iWyIsdT0iXSIsYz1yKCJbIikpLG51bGwhPWMpe3ZhciBsLHAsZj0xLGQ9dC5sYXN0TGluZSgpO2U6Zm9yKHZhciBoPW87aDw9ZDsrK2gpZm9yKHZhciBtPXQuZ2V0TGluZShoKSxnPWg9PW8/YzowOzspe3ZhciB5PW0uaW5kZXhPZihzLGcpLHY9bS5pbmRleE9mKHUsZyk7aWYoeTwwJiYoeT1tLmxlbmd0aCksdjwwJiYodj1tLmxlbmd0aCksKGc9TWF0aC5taW4oeSx2KSk9PW0ubGVuZ3RoKWJyZWFrO2lmKHQuZ2V0VG9rZW5UeXBlQXQoZS5Qb3MoaCxnKzEpKT09aSlpZihnPT15KSsrZjtlbHNlIGlmKCEtLWYpe2w9aCxwPWc7YnJlYWsgZX0rK2d9aWYobnVsbCE9bCYmKG8hPWx8fHAhPWMpKXJldHVybntmcm9tOmUuUG9zKG8sYyksdG86ZS5Qb3MobCxwKX19fSksZS5yZWdpc3RlckhlbHBlcigiZm9sZCIsImltcG9ydCIsZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKG4pe2lmKG48dC5maXJzdExpbmUoKXx8bj50Lmxhc3RMaW5lKCkpcmV0dXJuIG51bGw7dmFyIHI9dC5nZXRUb2tlbkF0KGUuUG9zKG4sMSkpO2lmKC9cUy8udGVzdChyLnN0cmluZyl8fChyPXQuZ2V0VG9rZW5BdChlLlBvcyhuLHIuZW5kKzEpKSksImtleXdvcmQiIT1yLnR5cGV8fCJpbXBvcnQiIT1yLnN0cmluZylyZXR1cm4gbnVsbDtmb3IodmFyIGk9bixvPU1hdGgubWluKHQubGFzdExpbmUoKSxuKzEwKTtpPD1vOysraSl7dmFyIGE9dC5nZXRMaW5lKGkpLHM9YS5pbmRleE9mKCI7Iik7aWYoLTEhPXMpcmV0dXJue3N0YXJ0Q2g6ci5lbmQsZW5kOmUuUG9zKGkscyl9fX12YXIgaSxvPW4ubGluZSxhPXIobyk7aWYoIWF8fHIoby0xKXx8KGk9cihvLTIpKSYmaS5lbmQubGluZT09by0xKXJldHVybiBudWxsO2Zvcih2YXIgcz1hLmVuZDs7KXt2YXIgdT1yKHMubGluZSsxKTtpZihudWxsPT11KWJyZWFrO3M9dS5lbmR9cmV0dXJue2Zyb206dC5jbGlwUG9zKGUuUG9zKG8sYS5zdGFydENoKzEpKSx0bzpzfX0pLGUucmVnaXN0ZXJIZWxwZXIoImZvbGQiLCJpbmNsdWRlIixmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIobil7aWYobjx0LmZpcnN0TGluZSgpfHxuPnQubGFzdExpbmUoKSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRva2VuQXQoZS5Qb3MobiwxKSk7cmV0dXJuL1xTLy50ZXN0KHIuc3RyaW5nKXx8KHI9dC5nZXRUb2tlbkF0KGUuUG9zKG4sci5lbmQrMSkpKSwibWV0YSI9PXIudHlwZSYmIiNpbmNsdWRlIj09ci5zdHJpbmcuc2xpY2UoMCw4KT9yLnN0YXJ0Kzg6dm9pZCAwfXZhciBpPW4ubGluZSxvPXIoaSk7aWYobnVsbD09b3x8bnVsbCE9cihpLTEpKXJldHVybiBudWxsO2Zvcih2YXIgYT1pOzspe2lmKG51bGw9PXIoYSsxKSlicmVhazsrK2F9cmV0dXJue2Zyb206ZS5Qb3MoaSxvKzEpLHRvOnQuY2xpcFBvcyhlLlBvcyhhKSl9fSl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9big1OTYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDaGFyYWN0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKGkpLmRlZmF1bHR9fSk7dmFyIG89bigyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMZXhSdWxlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uTGV4UnVsZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhcnNlUnVsZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLlBhcnNlUnVsZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzSWdub3JlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uaXNJZ25vcmVkfX0pO3ZhciBhPW4oMjc2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYnV0Tm90Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5idXROb3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxpc3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmxpc3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm9wdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEub3B0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS50fX0pO3ZhciBzPW4oNTk3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwib25saW5lUGFyc2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcihzKS5kZWZhdWx0fX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubmFtZT0iWUFNTEV4Y2VwdGlvbiIsdGhpcy5yZWFzb249ZSx0aGlzLm1hcms9dCx0aGlzLm1lc3NhZ2U9KHRoaXMucmVhc29ufHwiKHVua25vd24gcmVhc29uKSIpKyh0aGlzLm1hcms/IiAiK3RoaXMubWFyay50b1N0cmluZygpOiIiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t8fCIifXIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubmFtZSsiOiAiO3JldHVybiB0Kz10aGlzLnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiLCFlJiZ0aGlzLm1hcmsmJih0Kz0iICIrdGhpcy5tYXJrLnRvU3RyaW5nKCkpLHR9LGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTMpO2UuZXhwb3J0cz1uZXcgcih7aW5jbHVkZTpbbigzMDMpXSxpbXBsaWNpdDpbbig3MzMpLG4oNzM0KV0sZXhwbGljaXQ6W24oNzM1KSxuKDc0MCksbig3NDEpLG4oNzQyKV19KX0sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLHIpe3ZhciBpOyhmdW5jdGlvbigpe2Z1bmN0aW9uIG8oZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBhKGUsdCxuLHIpe2Zvcih2YXIgaT0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK2k8bzspe3ZhciBhPWVbaV07dChyLGEsbihhKSxlKX1yZXR1cm4gcn1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYoIXQoZVtuXSxuLGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGwoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsaT0wLG89W107KytuPHI7KXt2YXIgYT1lW25dO3QoYSxuLGUpJiYob1tpKytdPWEpfXJldHVybiBvfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4hIShudWxsPT1lPzA6ZS5sZW5ndGgpJiZFKGUsdCwwKT4tMX1mdW5jdGlvbiBmKGUsdCxuKXtmb3IodmFyIHI9LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytyPGk7KWlmKG4odCxlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLGk9QXJyYXkocik7KytuPHI7KWlbbl09dChlW25dLG4sZSk7cmV0dXJuIGl9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLGk9ZS5sZW5ndGg7KytuPHI7KWVbaStuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIG0oZSx0LG4scil7dmFyIGk9LTEsbz1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHImJm8mJihuPWVbKytpXSk7KytpPG87KW49dChuLGVbaV0saSxlKTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUsdCxuLHIpe3ZhciBpPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmaSYmKG49ZVstLWldKTtpLS07KW49dChuLGVbaV0saSxlKTtyZXR1cm4gbn1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2KGUpe3JldHVybiBlLnNwbGl0KCIiKX1mdW5jdGlvbiBiKGUpe3JldHVybiBlLm1hdGNoKGp0KXx8W119ZnVuY3Rpb24geChlLHQsbil7dmFyIHI7cmV0dXJuIG4oZSxmdW5jdGlvbihlLG4saSl7aWYodChlLG4saSkpcmV0dXJuIHI9biwhMX0pLHJ9ZnVuY3Rpb24gQyhlLHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1uKyhyPzE6LTEpO3I/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiBFKGUsdCxuKXtyZXR1cm4gdD09PXQ/SyhlLHQsbik6QyhlLHcsbil9ZnVuY3Rpb24gRChlLHQsbixyKXtmb3IodmFyIGk9bi0xLG89ZS5sZW5ndGg7KytpPG87KWlmKHIoZVtpXSx0KSlyZXR1cm4gaTtyZXR1cm4tMX1mdW5jdGlvbiB3KGUpe3JldHVybiBlIT09ZX1mdW5jdGlvbiBTKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBuP08oZSx0KS9uOkllfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P25lOnRbZV19fWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP25lOmVbdF19fWZ1bmN0aW9uIF8oZSx0LG4scixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKGUsaSxvKXtuPXI/KHI9ITEsZSk6dChuLGUsaSxvKX0pLG59ZnVuY3Rpb24gVChlLHQpe3ZhciBuPWUubGVuZ3RoO2ZvcihlLnNvcnQodCk7bi0tOyllW25dPWVbbl0udmFsdWU7cmV0dXJuIGV9ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgbixyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgbz10KGVbcl0pO28hPT1uZSYmKG49bj09PW5lP286bitvKX1yZXR1cm4gbn1mdW5jdGlvbiBGKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuIGQodCxmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1mdW5jdGlvbiBMKGUsdCl7cmV0dXJuIGQodCxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWZ1bmN0aW9uIFAoZSx0KXtyZXR1cm4gZS5oYXModCl9ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoOysrbjxyJiZFKHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIGooZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tJiZFKHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFIoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO24tLTspZVtuXT09PXQmJisrcjtyZXR1cm4gcn1mdW5jdGlvbiBCKGUpe3JldHVybiJcXCIrU25bZV19ZnVuY3Rpb24gJChlLHQpe3JldHVybiBudWxsPT1lP25lOmVbdF19ZnVuY3Rpb24gVShlKXtyZXR1cm4gZ24udGVzdChlKX1mdW5jdGlvbiB6KGUpe3JldHVybiB5bi50ZXN0KGUpfWZ1bmN0aW9uIEcoZSl7Zm9yKHZhciB0LG49W107ISh0PWUubmV4dCgpKS5kb25lOyluLnB1c2godC52YWx1ZSk7cmV0dXJuIG59ZnVuY3Rpb24gVihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe25bKyt0XT1bcixlXX0pLG59ZnVuY3Rpb24gcShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gSChlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGk9MCxvPVtdOysrbjxyOyl7dmFyIGE9ZVtuXTthIT09dCYmYSE9PXVlfHwoZVtuXT11ZSxvW2krK109bil9cmV0dXJuIG99ZnVuY3Rpb24gVyhlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtuWysrdF09ZX0pLG59ZnVuY3Rpb24gUShlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtuWysrdF09W2UsZV19KSxufWZ1bmN0aW9uIEsoZSx0LG4pe2Zvcih2YXIgcj1uLTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSihlLHQsbil7Zm9yKHZhciByPW4rMTtyLS07KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybiByfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIFUoZSk/WihlKTp6bihlKX1mdW5jdGlvbiBYKGUpe3JldHVybiBVKGUpP2VlKGUpOnYoZSl9ZnVuY3Rpb24gWihlKXtmb3IodmFyIHQ9aG4ubGFzdEluZGV4PTA7aG4udGVzdChlKTspKyt0O3JldHVybiB0fWZ1bmN0aW9uIGVlKGUpe3JldHVybiBlLm1hdGNoKGhuKXx8W119ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIGUubWF0Y2gobW4pfHxbXX12YXIgbmUscmU9MjAwLGllPSJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4iLG9lPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixhZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsc2U9NTAwLHVlPSJfX2xvZGFzaF9wbGFjZWhvbGRlcl9fIixjZT0xLGxlPTIscGU9NCxmZT0xLGRlPTIsaGU9MSxtZT0yLGdlPTQseWU9OCx2ZT0xNixiZT0zMix4ZT02NCxDZT0xMjgsRWU9MjU2LERlPTUxMix3ZT0zMCxTZT0iLi4uIixrZT04MDAsQWU9MTYsX2U9MSxUZT0yLE9lPTEvMCxGZT05MDA3MTk5MjU0NzQwOTkxLE5lPTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsSWU9TmFOLExlPTQyOTQ5NjcyOTUsUGU9TGUtMSxNZT1MZT4+PjEsamU9W1siYXJ5IixDZV0sWyJiaW5kIixoZV0sWyJiaW5kS2V5IixtZV0sWyJjdXJyeSIseWVdLFsiY3VycnlSaWdodCIsdmVdLFsiZmxpcCIsRGVdLFsicGFydGlhbCIsYmVdLFsicGFydGlhbFJpZ2h0Iix4ZV0sWyJyZWFyZyIsRWVdXSxSZT0iW29iamVjdCBBcmd1bWVudHNdIixCZT0iW29iamVjdCBBcnJheV0iLCRlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixVZT0iW29iamVjdCBCb29sZWFuXSIsemU9IltvYmplY3QgRGF0ZV0iLEdlPSJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iLFZlPSJbb2JqZWN0IEVycm9yXSIscWU9IltvYmplY3QgRnVuY3Rpb25dIixIZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFdlPSJbb2JqZWN0IE1hcF0iLFFlPSJbb2JqZWN0IE51bWJlcl0iLEtlPSJbb2JqZWN0IE51bGxdIixKZT0iW29iamVjdCBPYmplY3RdIixZZT0iW29iamVjdCBQcm94eV0iLFhlPSJbb2JqZWN0IFJlZ0V4cF0iLFplPSJbb2JqZWN0IFNldF0iLGV0PSJbb2JqZWN0IFN0cmluZ10iLHR0PSJbb2JqZWN0IFN5bWJvbF0iLG50PSJbb2JqZWN0IFVuZGVmaW5lZF0iLHJ0PSJbb2JqZWN0IFdlYWtNYXBdIixpdD0iW29iamVjdCBXZWFrU2V0XSIsb3Q9IltvYmplY3QgQXJyYXlCdWZmZXJdIixhdD0iW29iamVjdCBEYXRhVmlld10iLHN0PSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLHV0PSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLGN0PSJbb2JqZWN0IEludDhBcnJheV0iLGx0PSJbb2JqZWN0IEludDE2QXJyYXldIixwdD0iW29iamVjdCBJbnQzMkFycmF5XSIsZnQ9IltvYmplY3QgVWludDhBcnJheV0iLGR0PSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsaHQ9IltvYmplY3QgVWludDE2QXJyYXldIixtdD0iW29iamVjdCBVaW50MzJBcnJheV0iLGd0PS9cYl9fcCBcKz0gJyc7L2cseXQ9L1xiKF9fcCBcKz0pICcnIFwrL2csdnQ9LyhfX2VcKC4qP1wpfFxiX190XCkpIFwrXG4nJzsvZyxidD0vJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2cseHQ9L1smPD4iJ10vZyxDdD1SZWdFeHAoYnQuc291cmNlKSxFdD1SZWdFeHAoeHQuc291cmNlKSxEdD0vPCUtKFtcc1xTXSs/KSU+L2csd3Q9LzwlKFtcc1xTXSs/KSU+L2csU3Q9LzwlPShbXHNcU10rPyklPi9nLGt0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEF0PS9eXHcqJC8sX3Q9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csVHQ9L1tcXF4kLiorPygpW1xde318XS9nLE90PVJlZ0V4cChUdC5zb3VyY2UpLEZ0PS9eXHMrfFxzKyQvZyxOdD0vXlxzKy8sSXQ9L1xzKyQvLEx0PS9ceyg/OlxuXC9cKiBcW3dyYXBwZWQgd2l0aCAuK1xdIFwqXC8pP1xuPy8sUHQ9L1x7XG5cL1wqIFxbd3JhcHBlZCB3aXRoICguKylcXSBcKi8sTXQ9Lyw/ICYgLyxqdD0vW15ceDAwLVx4MmZceDNhLVx4NDBceDViLVx4NjBceDdiLVx4N2ZdKy9nLFJ0PS9cXChcXCk/L2csQnQ9L1wkXHsoW15cXH1dKig/OlxcLlteXFx9XSopKilcfS9nLCR0PS9cdyokLyxVdD0vXlstK10weFswLTlhLWZdKyQvaSx6dD0vXjBiWzAxXSskL2ksR3Q9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sVnQ9L14wb1swLTddKyQvaSxxdD0vXig/OjB8WzEtOV1cZCopJC8sSHQ9L1tceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZcdTAxMDAtXHUwMTdmXS9nLFd0PS8oJF4pLyxRdD0vWydcblxyXHUyMDI4XHUyMDI5XFxdL2csS3Q9IlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZiIsSnQ9IlxceGFjXFx4YjFcXHhkN1xceGY3XFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmZcXHUyMDAwLVxcdTIwNmYgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLFl0PSJbIitKdCsiXSIsWHQ9IlsiK0t0KyJdIixadD0iW2EtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmZdIixlbj0iW15cXHVkODAwLVxcdWRmZmYiK0p0KyJcXGQrXFx1MjcwMC1cXHUyN2JmYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdIix0bj0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixubj0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscm49IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLG9uPSJbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0iLGFuPSIoPzoiK1p0KyJ8IitlbisiKSIsc249Iig/OltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdfFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSk/Iix1bj0iKD86XFx1MjAwZCg/OiIrWyJbXlxcdWQ4MDAtXFx1ZGZmZl0iLG5uLHJuXS5qb2luKCJ8IikrIilbXFx1ZmUwZVxcdWZlMGZdPyIrc24rIikqIixjbj0iW1xcdWZlMGVcXHVmZTBmXT8iK3NuK3VuLGxuPSIoPzoiK1siW1xcdTI3MDAtXFx1MjdiZl0iLG5uLHJuXS5qb2luKCJ8IikrIikiK2NuLHBuPSIoPzoiK1siW15cXHVkODAwLVxcdWRmZmZdIitYdCsiPyIsWHQsbm4scm4sIltcXHVkODAwLVxcdWRmZmZdIl0uam9pbigifCIpKyIpIixmbj1SZWdFeHAoIlsnXHUyMDE5XSIsImciKSxkbj1SZWdFeHAoWHQsImciKSxobj1SZWdFeHAodG4rIig/PSIrdG4rIil8IitwbitjbiwiZyIpLG1uPVJlZ0V4cChbb24rIj8iK1p0KyIrKD86WydcdTIwMTldKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPyg/PSIrW1l0LG9uLCIkIl0uam9pbigifCIpKyIpIiwiKD86W0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdfFteXFx1ZDgwMC1cXHVkZmZmXFx4YWNcXHhiMVxceGQ3XFx4ZjdcXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHhiZlxcdTIwMDAtXFx1MjA2ZiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcZCtcXHUyNzAwLVxcdTI3YmZhLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0pKyg/OlsnXHUyMDE5XSg/OkR8TEx8TXxSRXxTfFR8VkUpKT8oPz0iK1tZdCxvbithbiwiJCJdLmpvaW4oInwiKSsiKSIsb24rIj8iK2FuKyIrKD86WydcdTIwMTldKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPyIsb24rIisoPzpbJ1x1MjAxOV0oPzpEfExMfE18UkV8U3xUfFZFKSk/IiwiXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcZFRIKSg/PVxcYnxbYS16X10pIiwiXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcZHRoKSg/PVxcYnxbQS1aX10pIiwiXFxkKyIsbG5dLmpvaW4oInwiKSwiZyIpLGduPVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmYiK0t0KyJcXHVmZTBlXFx1ZmUwZl0iKSx5bj0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyx2bj1bIkFycmF5IiwiQnVmZmVyIiwiRGF0YVZpZXciLCJEYXRlIiwiRXJyb3IiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJGdW5jdGlvbiIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiTWFwIiwiTWF0aCIsIk9iamVjdCIsIlByb21pc2UiLCJSZWdFeHAiLCJTZXQiLCJTdHJpbmciLCJTeW1ib2wiLCJUeXBlRXJyb3IiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiV2Vha01hcCIsIl8iLCJjbGVhclRpbWVvdXQiLCJpc0Zpbml0ZSIsInBhcnNlSW50Iiwic2V0VGltZW91dCJdLGJuPS0xLHhuPXt9O3huW3N0XT14blt1dF09eG5bY3RdPXhuW2x0XT14bltwdF09eG5bZnRdPXhuW2R0XT14bltodF09eG5bbXRdPSEwLHhuW1JlXT14bltCZV09eG5bb3RdPXhuW1VlXT14blthdF09eG5bemVdPXhuW1ZlXT14bltxZV09eG5bV2VdPXhuW1FlXT14bltKZV09eG5bWGVdPXhuW1plXT14bltldF09eG5bcnRdPSExO3ZhciBDbj17fTtDbltSZV09Q25bQmVdPUNuW290XT1DblthdF09Q25bVWVdPUNuW3plXT1DbltzdF09Q25bdXRdPUNuW2N0XT1DbltsdF09Q25bcHRdPUNuW1dlXT1DbltRZV09Q25bSmVdPUNuW1hlXT1DbltaZV09Q25bZXRdPUNuW3R0XT1DbltmdF09Q25bZHRdPUNuW2h0XT1DblttdF09ITAsQ25bVmVdPUNuW3FlXT1DbltydF09ITE7dmFyIEVuPXsiXHhjMCI6IkEiLCJceGMxIjoiQSIsIlx4YzIiOiJBIiwiXHhjMyI6IkEiLCJceGM0IjoiQSIsIlx4YzUiOiJBIiwiXHhlMCI6ImEiLCJceGUxIjoiYSIsIlx4ZTIiOiJhIiwiXHhlMyI6ImEiLCJceGU0IjoiYSIsIlx4ZTUiOiJhIiwiXHhjNyI6IkMiLCJceGU3IjoiYyIsIlx4ZDAiOiJEIiwiXHhmMCI6ImQiLCJceGM4IjoiRSIsIlx4YzkiOiJFIiwiXHhjYSI6IkUiLCJceGNiIjoiRSIsIlx4ZTgiOiJlIiwiXHhlOSI6ImUiLCJceGVhIjoiZSIsIlx4ZWIiOiJlIiwiXHhjYyI6IkkiLCJceGNkIjoiSSIsIlx4Y2UiOiJJIiwiXHhjZiI6IkkiLCJceGVjIjoiaSIsIlx4ZWQiOiJpIiwiXHhlZSI6ImkiLCJceGVmIjoiaSIsIlx4ZDEiOiJOIiwiXHhmMSI6Im4iLCJceGQyIjoiTyIsIlx4ZDMiOiJPIiwiXHhkNCI6Ik8iLCJceGQ1IjoiTyIsIlx4ZDYiOiJPIiwiXHhkOCI6Ik8iLCJceGYyIjoibyIsIlx4ZjMiOiJvIiwiXHhmNCI6Im8iLCJceGY1IjoibyIsIlx4ZjYiOiJvIiwiXHhmOCI6Im8iLCJceGQ5IjoiVSIsIlx4ZGEiOiJVIiwiXHhkYiI6IlUiLCJceGRjIjoiVSIsIlx4ZjkiOiJ1IiwiXHhmYSI6InUiLCJceGZiIjoidSIsIlx4ZmMiOiJ1IiwiXHhkZCI6IlkiLCJceGZkIjoieSIsIlx4ZmYiOiJ5IiwiXHhjNiI6IkFlIiwiXHhlNiI6ImFlIiwiXHhkZSI6IlRoIiwiXHhmZSI6InRoIiwiXHhkZiI6InNzIiwiXHUwMTAwIjoiQSIsIlx1MDEwMiI6IkEiLCJcdTAxMDQiOiJBIiwiXHUwMTAxIjoiYSIsIlx1MDEwMyI6ImEiLCJcdTAxMDUiOiJhIiwiXHUwMTA2IjoiQyIsIlx1MDEwOCI6IkMiLCJcdTAxMGEiOiJDIiwiXHUwMTBjIjoiQyIsIlx1MDEwNyI6ImMiLCJcdTAxMDkiOiJjIiwiXHUwMTBiIjoiYyIsIlx1MDEwZCI6ImMiLCJcdTAxMGUiOiJEIiwiXHUwMTEwIjoiRCIsIlx1MDEwZiI6ImQiLCJcdTAxMTEiOiJkIiwiXHUwMTEyIjoiRSIsIlx1MDExNCI6IkUiLCJcdTAxMTYiOiJFIiwiXHUwMTE4IjoiRSIsIlx1MDExYSI6IkUiLCJcdTAxMTMiOiJlIiwiXHUwMTE1IjoiZSIsIlx1MDExNyI6ImUiLCJcdTAxMTkiOiJlIiwiXHUwMTFiIjoiZSIsIlx1MDExYyI6IkciLCJcdTAxMWUiOiJHIiwiXHUwMTIwIjoiRyIsIlx1MDEyMiI6IkciLCJcdTAxMWQiOiJnIiwiXHUwMTFmIjoiZyIsIlx1MDEyMSI6ImciLCJcdTAxMjMiOiJnIiwiXHUwMTI0IjoiSCIsIlx1MDEyNiI6IkgiLCJcdTAxMjUiOiJoIiwiXHUwMTI3IjoiaCIsIlx1MDEyOCI6IkkiLCJcdTAxMmEiOiJJIiwiXHUwMTJjIjoiSSIsIlx1MDEyZSI6IkkiLCJcdTAxMzAiOiJJIiwiXHUwMTI5IjoiaSIsIlx1MDEyYiI6ImkiLCJcdTAxMmQiOiJpIiwiXHUwMTJmIjoiaSIsIlx1MDEzMSI6ImkiLCJcdTAxMzQiOiJKIiwiXHUwMTM1IjoiaiIsIlx1MDEzNiI6IksiLCJcdTAxMzciOiJrIiwiXHUwMTM4IjoiayIsIlx1MDEzOSI6IkwiLCJcdTAxM2IiOiJMIiwiXHUwMTNkIjoiTCIsIlx1MDEzZiI6IkwiLCJcdTAxNDEiOiJMIiwiXHUwMTNhIjoibCIsIlx1MDEzYyI6ImwiLCJcdTAxM2UiOiJsIiwiXHUwMTQwIjoibCIsIlx1MDE0MiI6ImwiLCJcdTAxNDMiOiJOIiwiXHUwMTQ1IjoiTiIsIlx1MDE0NyI6Ik4iLCJcdTAxNGEiOiJOIiwiXHUwMTQ0IjoibiIsIlx1MDE0NiI6Im4iLCJcdTAxNDgiOiJuIiwiXHUwMTRiIjoibiIsIlx1MDE0YyI6Ik8iLCJcdTAxNGUiOiJPIiwiXHUwMTUwIjoiTyIsIlx1MDE0ZCI6Im8iLCJcdTAxNGYiOiJvIiwiXHUwMTUxIjoibyIsIlx1MDE1NCI6IlIiLCJcdTAxNTYiOiJSIiwiXHUwMTU4IjoiUiIsIlx1MDE1NSI6InIiLCJcdTAxNTciOiJyIiwiXHUwMTU5IjoiciIsIlx1MDE1YSI6IlMiLCJcdTAxNWMiOiJTIiwiXHUwMTVlIjoiUyIsIlx1MDE2MCI6IlMiLCJcdTAxNWIiOiJzIiwiXHUwMTVkIjoicyIsIlx1MDE1ZiI6InMiLCJcdTAxNjEiOiJzIiwiXHUwMTYyIjoiVCIsIlx1MDE2NCI6IlQiLCJcdTAxNjYiOiJUIiwiXHUwMTYzIjoidCIsIlx1MDE2NSI6InQiLCJcdTAxNjciOiJ0IiwiXHUwMTY4IjoiVSIsIlx1MDE2YSI6IlUiLCJcdTAxNmMiOiJVIiwiXHUwMTZlIjoiVSIsIlx1MDE3MCI6IlUiLCJcdTAxNzIiOiJVIiwiXHUwMTY5IjoidSIsIlx1MDE2YiI6InUiLCJcdTAxNmQiOiJ1IiwiXHUwMTZmIjoidSIsIlx1MDE3MSI6InUiLCJcdTAxNzMiOiJ1IiwiXHUwMTc0IjoiVyIsIlx1MDE3NSI6InciLCJcdTAxNzYiOiJZIiwiXHUwMTc3IjoieSIsIlx1MDE3OCI6IlkiLCJcdTAxNzkiOiJaIiwiXHUwMTdiIjoiWiIsIlx1MDE3ZCI6IloiLCJcdTAxN2EiOiJ6IiwiXHUwMTdjIjoieiIsIlx1MDE3ZSI6InoiLCJcdTAxMzIiOiJJSiIsIlx1MDEzMyI6ImlqIiwiXHUwMTUyIjoiT2UiLCJcdTAxNTMiOiJvZSIsIlx1MDE0OSI6IiduIiwiXHUwMTdmIjoicyJ9LERuPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSx3bj17IiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4iLCImcXVvdDsiOiciJywiJiMzOTsiOiInIn0sU249eyJcXCI6IlxcIiwiJyI6IiciLCJcbiI6Im4iLCJcciI6InIiLCJcdTIwMjgiOiJ1MjAyOCIsIlx1MjAyOSI6InUyMDI5In0sa249cGFyc2VGbG9hdCxBbj1wYXJzZUludCxfbj0ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlLFRuPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsT249X258fFRufHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLEZuPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsTm49Rm4mJiJvYmplY3QiPT10eXBlb2YgciYmciYmIXIubm9kZVR5cGUmJnIsSW49Tm4mJk5uLmV4cG9ydHM9PT1GbixMbj1JbiYmX24ucHJvY2VzcyxQbj1mdW5jdGlvbigpe3RyeXt2YXIgZT1ObiYmTm4ucmVxdWlyZSYmTm4ucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiBlfHxMbiYmTG4uYmluZGluZyYmTG4uYmluZGluZygidXRpbCIpfWNhdGNoKGUpe319KCksTW49UG4mJlBuLmlzQXJyYXlCdWZmZXIsam49UG4mJlBuLmlzRGF0ZSxSbj1QbiYmUG4uaXNNYXAsQm49UG4mJlBuLmlzUmVnRXhwLCRuPVBuJiZQbi5pc1NldCxVbj1QbiYmUG4uaXNUeXBlZEFycmF5LHpuPWsoImxlbmd0aCIpLEduPUEoRW4pLFZuPUEoRG4pLHFuPUEod24pLEhuPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtpZih0dShlKSYmIWRmKGUpJiYhKGUgaW5zdGFuY2VvZiB2KSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuIGU7aWYoZmwuY2FsbChlLCJfX3dyYXBwZWRfXyIpKXJldHVybiBYbyhlKX1yZXR1cm4gbmV3IGkoZSl9ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBpKGUsdCl7dGhpcy5fX3dyYXBwZWRfXz1lLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2NoYWluX189ISF0LHRoaXMuX19pbmRleF9fPTAsdGhpcy5fX3ZhbHVlc19fPW5lfWZ1bmN0aW9uIHYoZSl7dGhpcy5fX3dyYXBwZWRfXz1lLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1MZSx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBBKCl7dmFyIGU9bmV3IHYodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIGUuX19hY3Rpb25zX189TmkodGhpcy5fX2FjdGlvbnNfXyksZS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxlLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxlLl9faXRlcmF0ZWVzX189TmkodGhpcy5fX2l0ZXJhdGVlc19fKSxlLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLGUuX192aWV3c19fPU5pKHRoaXMuX192aWV3c19fKSxlfWZ1bmN0aW9uIEsoKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIGU9bmV3IHYodGhpcyk7ZS5fX2Rpcl9fPS0xLGUuX19maWx0ZXJlZF9fPSEwfWVsc2UgZT10aGlzLmNsb25lKCksZS5fX2Rpcl9fKj0tMTtyZXR1cm4gZX1mdW5jdGlvbiBaKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHQ9dGhpcy5fX2Rpcl9fLG49ZGYoZSkscj10PDAsaT1uP2UubGVuZ3RoOjAsbz1FbygwLGksdGhpcy5fX3ZpZXdzX18pLGE9by5zdGFydCxzPW8uZW5kLHU9cy1hLGM9cj9zOmEtMSxsPXRoaXMuX19pdGVyYXRlZXNfXyxwPWwubGVuZ3RoLGY9MCxkPXpsKHUsdGhpcy5fX3Rha2VDb3VudF9fKTtpZighbnx8IXImJmk9PXUmJmQ9PXUpcmV0dXJuIG1pKGUsdGhpcy5fX2FjdGlvbnNfXyk7dmFyIGg9W107ZTpmb3IoO3UtLSYmZjxkOyl7Yys9dDtmb3IodmFyIG09LTEsZz1lW2NdOysrbTxwOyl7dmFyIHk9bFttXSx2PXkuaXRlcmF0ZWUsYj15LnR5cGUseD12KGcpO2lmKGI9PVRlKWc9eDtlbHNlIGlmKCF4KXtpZihiPT1fZSljb250aW51ZSBlO2JyZWFrIGV9fWhbZisrXT1nfXJldHVybiBofWZ1bmN0aW9uIGVlKGUpe3ZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIGp0KCl7dGhpcy5fX2RhdGFfXz1YbD9YbChudWxsKTp7fSx0aGlzLnNpemU9MH1mdW5jdGlvbiBLdChlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1mdW5jdGlvbiBKdChlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKFhsKXt2YXIgbj10W2VdO3JldHVybiBuPT09YWU/bmU6bn1yZXR1cm4gZmwuY2FsbCh0LGUpP3RbZV06bmV9ZnVuY3Rpb24gWXQoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gWGw/dFtlXSE9PW5lOmZsLmNhbGwodCxlKX1mdW5jdGlvbiBYdChlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLG5bZV09WGwmJnQ9PT1uZT9hZTp0LHRoaXN9ZnVuY3Rpb24gWnQoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gZW4oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHRuKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1Xbih0LGUpO3JldHVybiEobjwwKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTprbC5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwhMCl9ZnVuY3Rpb24gbm4oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVduKHQsZSk7cmV0dXJuIG48MD9uZTp0W25dWzFdfWZ1bmN0aW9uIHJuKGUpe3JldHVybiBXbih0aGlzLl9fZGF0YV9fLGUpPi0xfWZ1bmN0aW9uIG9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPVduKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9ZnVuY3Rpb24gYW4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gc24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlZSxtYXA6bmV3KFFsfHxadCksc3RyaW5nOm5ldyBlZX19ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9dm8odGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1mdW5jdGlvbiBjbihlKXtyZXR1cm4gdm8odGhpcyxlKS5nZXQoZSl9ZnVuY3Rpb24gbG4oZSl7cmV0dXJuIHZvKHRoaXMsZSkuaGFzKGUpfWZ1bmN0aW9uIHBuKGUsdCl7dmFyIG49dm8odGhpcyxlKSxyPW4uc2l6ZTtyZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemUrPW4uc2l6ZT09cj8wOjEsdGhpc31mdW5jdGlvbiBobihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgYW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIG1uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGFlKSx0aGlzfWZ1bmN0aW9uIGduKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1mdW5jdGlvbiB5bihlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBadChlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIEVuKCl7dGhpcy5fX2RhdGFfXz1uZXcgWnQsdGhpcy5zaXplPTB9ZnVuY3Rpb24gRG4oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPXQuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemU9dC5zaXplLG59ZnVuY3Rpb24gd24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGUpfWZ1bmN0aW9uIFNuKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1mdW5jdGlvbiBfbihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIFp0KXt2YXIgcj1uLl9fZGF0YV9fO2lmKCFRbHx8ci5sZW5ndGg8cmUtMSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IGFuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc31mdW5jdGlvbiBUbihlLHQpe3ZhciBuPWRmKGUpLHI9IW4mJmZmKGUpLGk9IW4mJiFyJiZtZihlKSxvPSFuJiYhciYmIWkmJnhmKGUpLGE9bnx8cnx8aXx8byxzPWE/RihlLmxlbmd0aCxvbCk6W10sdT1zLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIWZsLmNhbGwoZSxjKXx8YSYmKCJsZW5ndGgiPT1jfHxpJiYoIm9mZnNldCI9PWN8fCJwYXJlbnQiPT1jKXx8byYmKCJidWZmZXIiPT1jfHwiYnl0ZUxlbmd0aCI9PWN8fCJieXRlT2Zmc2V0Ij09Yyl8fE9vKGMsdSkpfHxzLnB1c2goYyk7cmV0dXJuIHN9ZnVuY3Rpb24gRm4oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIHQ/ZVtKcigwLHQtMSldOm5lfWZ1bmN0aW9uIE5uKGUsdCl7cmV0dXJuIFFvKE5pKGUpLFpuKHQsMCxlLmxlbmd0aCkpfWZ1bmN0aW9uIExuKGUpe3JldHVybiBRbyhOaShlKSl9ZnVuY3Rpb24gUG4oZSx0LG4peyhuPT09bmV8fFVzKGVbdF0sbikpJiYobiE9PW5lfHx0IGluIGUpfHxZbihlLHQsbil9ZnVuY3Rpb24gem4oZSx0LG4pe3ZhciByPWVbdF07ZmwuY2FsbChlLHQpJiZVcyhyLG4pJiYobiE9PW5lfHx0IGluIGUpfHxZbihlLHQsbil9ZnVuY3Rpb24gV24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihVcyhlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIFFuKGUsdCxuLHIpe3JldHVybiBscChlLGZ1bmN0aW9uKGUsaSxvKXt0KHIsZSxuKGUpLG8pfSkscn1mdW5jdGlvbiBLbihlLHQpe3JldHVybiBlJiZJaSh0LE11KHQpLGUpfWZ1bmN0aW9uIEpuKGUsdCl7cmV0dXJuIGUmJklpKHQsanUodCksZSl9ZnVuY3Rpb24gWW4oZSx0LG4peyJfX3Byb3RvX18iPT10JiZPbD9PbChlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59ZnVuY3Rpb24gWG4oZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxpPVhjKHIpLG89bnVsbD09ZTsrK248cjspaVtuXT1vP25lOkl1KGUsdFtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gWm4oZSx0LG4pe3JldHVybiBlPT09ZSYmKG4hPT1uZSYmKGU9ZTw9bj9lOm4pLHQhPT1uZSYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGVyKGUsdCxuLHIsaSxvKXt2YXIgYSx1PXQmY2UsYz10JmxlLGw9dCZwZTtpZihuJiYoYT1pP24oZSxyLGksbyk6bihlKSksYSE9PW5lKXJldHVybiBhO2lmKCFldShlKSlyZXR1cm4gZTt2YXIgcD1kZihlKTtpZihwKXtpZihhPVNvKGUpLCF1KXJldHVybiBOaShlLGEpfWVsc2V7dmFyIGY9RXAoZSksZD1mPT1xZXx8Zj09SGU7aWYobWYoZSkpcmV0dXJuIEVpKGUsdSk7aWYoZj09SmV8fGY9PVJlfHxkJiYhaSl7aWYoYT1jfHxkP3t9OmtvKGUpLCF1KXJldHVybiBjP1BpKGUsSm4oYSxlKSk6TGkoZSxLbihhLGUpKX1lbHNle2lmKCFDbltmXSlyZXR1cm4gaT9lOnt9O2E9QW8oZSxmLHUpfX1vfHwobz1uZXcgeW4pO3ZhciBoPW8uZ2V0KGUpO2lmKGgpcmV0dXJuIGg7aWYoby5zZXQoZSxhKSxiZihlKSlyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2EuYWRkKGVyKHIsdCxuLHIsZSxvKSl9KSxhO2lmKHlmKGUpKXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocixpKXthLnNldChpLGVyKHIsdCxuLGksZSxvKSl9KSxhO3ZhciBtPWw/Yz9obzpmbzpjP2p1Ok11LGc9cD9uZTptKGUpO3JldHVybiBzKGd8fGUsZnVuY3Rpb24ocixpKXtnJiYoaT1yLHI9ZVtpXSksem4oYSxpLGVyKHIsdCxuLGksZSxvKSl9KSxhfWZ1bmN0aW9uIHRyKGUpe3ZhciB0PU11KGUpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnIobixlLHQpfX1mdW5jdGlvbiBucihlLHQsbil7dmFyIHI9bi5sZW5ndGg7aWYobnVsbD09ZSlyZXR1cm4hcjtmb3IoZT1ybChlKTtyLS07KXt2YXIgaT1uW3JdLG89dFtpXSxhPWVbaV07aWYoYT09PW5lJiYhKGkgaW4gZSl8fCFvKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHJyKGUsdCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgYWwob2UpO3JldHVybiBTcChmdW5jdGlvbigpe2UuYXBwbHkobmUsbil9LHQpfWZ1bmN0aW9uIGlyKGUsdCxuLHIpe3ZhciBpPS0xLG89cCxhPSEwLHM9ZS5sZW5ndGgsdT1bXSxjPXQubGVuZ3RoO2lmKCFzKXJldHVybiB1O24mJih0PWQodCxJKG4pKSkscj8obz1mLGE9ITEpOnQubGVuZ3RoPj1yZSYmKG89UCxhPSExLHQ9bmV3IGhuKHQpKTtlOmZvcig7KytpPHM7KXt2YXIgbD1lW2ldLGg9bnVsbD09bj9sOm4obCk7aWYobD1yfHwwIT09bD9sOjAsYSYmaD09PWgpe2Zvcih2YXIgbT1jO20tLTspaWYodFttXT09PWgpY29udGludWUgZTt1LnB1c2gobCl9ZWxzZSBvKHQsaCxyKXx8dS5wdXNoKGwpfXJldHVybiB1fWZ1bmN0aW9uIG9yKGUsdCl7dmFyIG49ITA7cmV0dXJuIGxwKGUsZnVuY3Rpb24oZSxyLGkpe3JldHVybiBuPSEhdChlLHIsaSl9KSxufWZ1bmN0aW9uIGFyKGUsdCxuKXtmb3IodmFyIHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBvPWVbcl0sYT10KG8pO2lmKG51bGwhPWEmJihzPT09bmU/YT09PWEmJiFmdShhKTpuKGEscykpKXZhciBzPWEsdT1vfXJldHVybiB1fWZ1bmN0aW9uIHNyKGUsdCxuLHIpe3ZhciBpPWUubGVuZ3RoO2ZvcihuPXZ1KG4pLG48MCYmKG49LW4+aT8wOmkrbikscj1yPT09bmV8fHI+aT9pOnZ1KHIpLHI8MCYmKHIrPWkpLHI9bj5yPzA6YnUocik7bjxyOyllW24rK109dDtyZXR1cm4gZX1mdW5jdGlvbiB1cihlLHQpe3ZhciBuPVtdO3JldHVybiBscChlLGZ1bmN0aW9uKGUscixpKXt0KGUscixpKSYmbi5wdXNoKGUpfSksbn1mdW5jdGlvbiBjcihlLHQsbixyLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPVRvKSxpfHwoaT1bXSk7KytvPGE7KXt2YXIgcz1lW29dO3Q+MCYmbihzKT90PjE/Y3Iocyx0LTEsbixyLGkpOmgoaSxzKTpyfHwoaVtpLmxlbmd0aF09cyl9cmV0dXJuIGl9ZnVuY3Rpb24gbHIoZSx0KXtyZXR1cm4gZSYmZnAoZSx0LE11KX1mdW5jdGlvbiBwcihlLHQpe3JldHVybiBlJiZkcChlLHQsTXUpfWZ1bmN0aW9uIGZyKGUsdCl7cmV0dXJuIGwodCxmdW5jdGlvbih0KXtyZXR1cm4gWXMoZVt0XSl9KX1mdW5jdGlvbiBkcihlLHQpe3Q9eGkodCxlKTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW0tvKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6bmV9ZnVuY3Rpb24gaHIoZSx0LG4pe3ZhciByPXQoZSk7cmV0dXJuIGRmKGUpP3I6aChyLG4oZSkpfWZ1bmN0aW9uIG1yKGUpe3JldHVybiBudWxsPT1lP2U9PT1uZT9udDpLZTpUbCYmVGwgaW4gcmwoZSk/Q28oZSk6VW8oZSl9ZnVuY3Rpb24gZ3IoZSx0KXtyZXR1cm4gZT50fWZ1bmN0aW9uIHlyKGUsdCl7cmV0dXJuIG51bGwhPWUmJmZsLmNhbGwoZSx0KX1mdW5jdGlvbiB2cihlLHQpe3JldHVybiBudWxsIT1lJiZ0IGluIHJsKGUpfWZ1bmN0aW9uIGJyKGUsdCxuKXtyZXR1cm4gZT49emwodCxuKSYmZTxVbCh0LG4pfWZ1bmN0aW9uIHhyKGUsdCxuKXtmb3IodmFyIHI9bj9mOnAsaT1lWzBdLmxlbmd0aCxvPWUubGVuZ3RoLGE9byxzPVhjKG8pLHU9MS8wLGM9W107YS0tOyl7dmFyIGw9ZVthXTthJiZ0JiYobD1kKGwsSSh0KSkpLHU9emwobC5sZW5ndGgsdSksc1thXT0hbiYmKHR8fGk+PTEyMCYmbC5sZW5ndGg+PTEyMCk/bmV3IGhuKGEmJmwpOm5lfWw9ZVswXTt2YXIgaD0tMSxtPXNbMF07ZTpmb3IoOysraDxpJiZjLmxlbmd0aDx1Oyl7dmFyIGc9bFtoXSx5PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEobT9QKG0seSk6cihjLHksbikpKXtmb3IoYT1vOy0tYTspe3ZhciB2PXNbYV07aWYoISh2P1Aodix5KTpyKGVbYV0seSxuKSkpY29udGludWUgZX1tJiZtLnB1c2goeSksYy5wdXNoKGcpfX1yZXR1cm4gY31mdW5jdGlvbiBDcihlLHQsbixyKXtyZXR1cm4gbHIoZSxmdW5jdGlvbihlLGksbyl7dChyLG4oZSksaSxvKX0pLHJ9ZnVuY3Rpb24gRXIoZSx0LG4pe3Q9eGkodCxlKSxlPUdvKGUsdCk7dmFyIHI9bnVsbD09ZT9lOmVbS28oeWEodCkpXTtyZXR1cm4gbnVsbD09cj9uZTpvKHIsZSxuKX1mdW5jdGlvbiBEcihlKXtyZXR1cm4gdHUoZSkmJm1yKGUpPT1SZX1mdW5jdGlvbiB3cihlKXtyZXR1cm4gdHUoZSkmJm1yKGUpPT1vdH1mdW5jdGlvbiBTcihlKXtyZXR1cm4gdHUoZSkmJm1yKGUpPT16ZX1mdW5jdGlvbiBrcihlLHQsbixyLGkpe3JldHVybiBlPT09dHx8KG51bGw9PWV8fG51bGw9PXR8fCF0dShlKSYmIXR1KHQpP2UhPT1lJiZ0IT09dDpBcihlLHQsbixyLGtyLGkpKX1mdW5jdGlvbiBBcihlLHQsbixyLGksbyl7dmFyIGE9ZGYoZSkscz1kZih0KSx1PWE/QmU6RXAoZSksYz1zP0JlOkVwKHQpO3U9dT09UmU/SmU6dSxjPWM9PVJlP0plOmM7dmFyIGw9dT09SmUscD1jPT1KZSxmPXU9PWM7aWYoZiYmbWYoZSkpe2lmKCFtZih0KSlyZXR1cm4hMTthPSEwLGw9ITF9aWYoZiYmIWwpcmV0dXJuIG98fChvPW5ldyB5biksYXx8eGYoZSk/dW8oZSx0LG4scixpLG8pOmNvKGUsdCx1LG4scixpLG8pO2lmKCEobiZmZSkpe3ZhciBkPWwmJmZsLmNhbGwoZSwiX193cmFwcGVkX18iKSxoPXAmJmZsLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihkfHxoKXt2YXIgbT1kP2UudmFsdWUoKTplLGc9aD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IHluKSxpKG0sZyxuLHIsbyl9fXJldHVybiEhZiYmKG98fChvPW5ldyB5biksbG8oZSx0LG4scixpLG8pKX1mdW5jdGlvbiBfcihlKXtyZXR1cm4gdHUoZSkmJkVwKGUpPT1XZX1mdW5jdGlvbiBUcihlLHQsbixyKXt2YXIgaT1uLmxlbmd0aCxvPWksYT0hcjtpZihudWxsPT1lKXJldHVybiFvO2ZvcihlPXJsKGUpO2ktLTspe3ZhciBzPW5baV07aWYoYSYmc1syXT9zWzFdIT09ZVtzWzBdXTohKHNbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysraTxvOyl7cz1uW2ldO3ZhciB1PXNbMF0sYz1lW3VdLGw9c1sxXTtpZihhJiZzWzJdKXtpZihjPT09bmUmJiEodSBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBwPW5ldyB5bjtpZihyKXZhciBmPXIoYyxsLHUsZSx0LHApO2lmKCEoZj09PW5lP2tyKGwsYyxmZXxkZSxyLHApOmYpKXJldHVybiExfX1yZXR1cm4hMH1mdW5jdGlvbiBPcihlKXtyZXR1cm4hKCFldShlKXx8UG8oZSkpJiYoWXMoZSk/dmw6R3QpLnRlc3QoSm8oZSkpfWZ1bmN0aW9uIEZyKGUpe3JldHVybiB0dShlKSYmbXIoZSk9PVhlfWZ1bmN0aW9uIE5yKGUpe3JldHVybiB0dShlKSYmRXAoZSk9PVplfWZ1bmN0aW9uIElyKGUpe3JldHVybiB0dShlKSYmWnMoZS5sZW5ndGgpJiYhIXhuW21yKGUpXX1mdW5jdGlvbiBMcihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGw9PWU/a2M6Im9iamVjdCI9PXR5cGVvZiBlP2RmKGUpPyRyKGVbMF0sZVsxXSk6QnIoZSk6TGMoZSl9ZnVuY3Rpb24gUHIoZSl7aWYoIU1vKGUpKXJldHVybiAkbChlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gcmwoZSkpZmwuY2FsbChlLG4pJiYiY29uc3RydWN0b3IiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gTXIoZSl7aWYoIWV1KGUpKXJldHVybiAkbyhlKTt2YXIgdD1NbyhlKSxuPVtdO2Zvcih2YXIgciBpbiBlKSgiY29uc3RydWN0b3IiIT1yfHwhdCYmZmwuY2FsbChlLHIpKSYmbi5wdXNoKHIpO3JldHVybiBufWZ1bmN0aW9uIGpyKGUsdCl7cmV0dXJuIGU8dH1mdW5jdGlvbiBScihlLHQpe3ZhciBuPS0xLHI9enMoZSk/WGMoZS5sZW5ndGgpOltdO3JldHVybiBscChlLGZ1bmN0aW9uKGUsaSxvKXtyWysrbl09dChlLGksbyl9KSxyfWZ1bmN0aW9uIEJyKGUpe3ZhciB0PWJvKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT9Sbyh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8VHIobixlLHQpfX1mdW5jdGlvbiAkcihlLHQpe3JldHVybiBObyhlKSYmam8odCk/Um8oS28oZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9SXUobixlKTtyZXR1cm4gcj09PW5lJiZyPT09dD9QdShuLGUpOmtyKHQscixmZXxkZSl9fWZ1bmN0aW9uIFVyKGUsdCxuLHIsaSl7ZSE9PXQmJmZwKHQsZnVuY3Rpb24obyxhKXtpZihldShvKSlpfHwoaT1uZXcgeW4pLHpyKGUsdCxhLG4sVXIscixpKTtlbHNle3ZhciBzPXI/cihxbyhlLGEpLG8sYSsiIixlLHQsaSk6bmU7cz09PW5lJiYocz1vKSxQbihlLGEscyl9fSxqdSl9ZnVuY3Rpb24genIoZSx0LG4scixpLG8sYSl7dmFyIHM9cW8oZSxuKSx1PXFvKHQsbiksYz1hLmdldCh1KTtpZihjKXJldHVybiB2b2lkIFBuKGUsbixjKTt2YXIgbD1vP28ocyx1LG4rIiIsZSx0LGEpOm5lLHA9bD09PW5lO2lmKHApe3ZhciBmPWRmKHUpLGQ9IWYmJm1mKHUpLGg9IWYmJiFkJiZ4Zih1KTtsPXUsZnx8ZHx8aD9kZihzKT9sPXM6R3Mocyk/bD1OaShzKTpkPyhwPSExLGw9RWkodSwhMCkpOmg/KHA9ITEsbD1BaSh1LCEwKSk6bD1bXTpjdSh1KXx8ZmYodSk/KGw9cyxmZihzKT9sPUN1KHMpOmV1KHMpJiYhWXMocyl8fChsPWtvKHUpKSk6cD0hMX1wJiYoYS5zZXQodSxsKSxpKGwsdSxyLG8sYSksYS5kZWxldGUodSkpLFBuKGUsbixsKX1mdW5jdGlvbiBHcihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pcmV0dXJuIHQrPXQ8MD9uOjAsT28odCxuKT9lW3RdOm5lfWZ1bmN0aW9uIFZyKGUsdCxuKXt2YXIgcj0tMTtyZXR1cm4gdD1kKHQubGVuZ3RoP3Q6W2tjXSxJKHlvKCkpKSxUKFJyKGUsZnVuY3Rpb24oZSxuLGkpe3JldHVybntjcml0ZXJpYTpkKHQsZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSxpbmRleDorK3IsdmFsdWU6ZX19KSxmdW5jdGlvbihlLHQpe3JldHVybiBUaShlLHQsbil9KX1mdW5jdGlvbiBxcihlLHQpe3JldHVybiBIcihlLHQsZnVuY3Rpb24odCxuKXtyZXR1cm4gUHUoZSxuKX0pfWZ1bmN0aW9uIEhyKGUsdCxuKXtmb3IodmFyIHI9LTEsaT10Lmxlbmd0aCxvPXt9OysrcjxpOyl7dmFyIGE9dFtyXSxzPWRyKGUsYSk7bihzLGEpJiZuaShvLHhpKGEsZSkscyl9cmV0dXJuIG99ZnVuY3Rpb24gV3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkcih0LGUpfX1mdW5jdGlvbiBRcihlLHQsbixyKXt2YXIgaT1yP0Q6RSxvPS0xLGE9dC5sZW5ndGgscz1lO2ZvcihlPT09dCYmKHQ9TmkodCkpLG4mJihzPWQoZSxJKG4pKSk7KytvPGE7KWZvcih2YXIgdT0wLGM9dFtvXSxsPW4/bihjKTpjOyh1PWkocyxsLHUscikpPi0xOylzIT09ZSYma2wuY2FsbChzLHUsMSksa2wuY2FsbChlLHUsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gS3IoZSx0KXtmb3IodmFyIG49ZT90Lmxlbmd0aDowLHI9bi0xO24tLTspe3ZhciBpPXRbbl07aWYobj09cnx8aSE9PW8pe3ZhciBvPWk7T28oaSk/a2wuY2FsbChlLGksMSk6ZmkoZSxpKX19cmV0dXJuIGV9ZnVuY3Rpb24gSnIoZSx0KXtyZXR1cm4gZStQbChxbCgpKih0LWUrMSkpfWZ1bmN0aW9uIFlyKGUsdCxuLHIpe2Zvcih2YXIgaT0tMSxvPVVsKExsKCh0LWUpLyhufHwxKSksMCksYT1YYyhvKTtvLS07KWFbcj9vOisraV09ZSxlKz1uO3JldHVybiBhfWZ1bmN0aW9uIFhyKGUsdCl7dmFyIG49IiI7aWYoIWV8fHQ8MXx8dD5GZSlyZXR1cm4gbjtkb3t0JTImJihuKz1lKSwodD1QbCh0LzIpKSYmKGUrPWUpfXdoaWxlKHQpO3JldHVybiBufWZ1bmN0aW9uIFpyKGUsdCl7cmV0dXJuIGtwKHpvKGUsdCxrYyksZSsiIil9ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIEZuKEt1KGUpKX1mdW5jdGlvbiB0aShlLHQpe3ZhciBuPUt1KGUpO3JldHVybiBRbyhuLFpuKHQsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIG5pKGUsdCxuLHIpe2lmKCFldShlKSlyZXR1cm4gZTt0PXhpKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO251bGwhPXMmJisraTxvOyl7dmFyIHU9S28odFtpXSksYz1uO2lmKGkhPWEpe3ZhciBsPXNbdV07Yz1yP3IobCx1LHMpOm5lLGM9PT1uZSYmKGM9ZXUobCk/bDpPbyh0W2krMV0pP1tdOnt9KX16bihzLHUsYykscz1zW3VdfXJldHVybiBlfWZ1bmN0aW9uIHJpKGUpe3JldHVybiBRbyhLdShlKSl9ZnVuY3Rpb24gaWkoZSx0LG4pe3ZhciByPS0xLGk9ZS5sZW5ndGg7dDwwJiYodD0tdD5pPzA6aSt0KSxuPW4+aT9pOm4sbjwwJiYobis9aSksaT10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIG89WGMoaSk7KytyPGk7KW9bcl09ZVtyK3RdO3JldHVybiBvfWZ1bmN0aW9uIG9pKGUsdCl7dmFyIG47cmV0dXJuIGxwKGUsZnVuY3Rpb24oZSxyLGkpe3JldHVybiEobj10KGUscixpKSl9KSwhIW59ZnVuY3Rpb24gYWkoZSx0LG4pe3ZhciByPTAsaT1udWxsPT1lP3I6ZS5sZW5ndGg7aWYoIm51bWJlciI9PXR5cGVvZiB0JiZ0PT09dCYmaTw9TWUpe2Zvcig7cjxpOyl7dmFyIG89citpPj4+MSxhPWVbb107bnVsbCE9PWEmJiFmdShhKSYmKG4/YTw9dDphPHQpP3I9bysxOmk9b31yZXR1cm4gaX1yZXR1cm4gc2koZSx0LGtjLG4pfWZ1bmN0aW9uIHNpKGUsdCxuLHIpe3Q9bih0KTtmb3IodmFyIGk9MCxvPW51bGw9PWU/MDplLmxlbmd0aCxhPXQhPT10LHM9bnVsbD09PXQsdT1mdSh0KSxjPXQ9PT1uZTtpPG87KXt2YXIgbD1QbCgoaStvKS8yKSxwPW4oZVtsXSksZj1wIT09bmUsZD1udWxsPT09cCxoPXA9PT1wLG09ZnUocCk7aWYoYSl2YXIgZz1yfHxoO2Vsc2UgZz1jP2gmJihyfHxmKTpzP2gmJmYmJihyfHwhZCk6dT9oJiZmJiYhZCYmKHJ8fCFtKTohZCYmIW0mJihyP3A8PXQ6cDx0KTtnP2k9bCsxOm89bH1yZXR1cm4gemwobyxQZSl9ZnVuY3Rpb24gdWkoZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxpPTAsbz1bXTsrK248cjspe3ZhciBhPWVbbl0scz10P3QoYSk6YTtpZighbnx8IVVzKHMsdSkpe3ZhciB1PXM7b1tpKytdPTA9PT1hPzA6YX19cmV0dXJuIG99ZnVuY3Rpb24gY2koZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP2U6ZnUoZSk/SWU6K2V9ZnVuY3Rpb24gbGkoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGRmKGUpKXJldHVybiBkKGUsbGkpKyIiO2lmKGZ1KGUpKXJldHVybiB1cD91cC5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1PZT8iLTAiOnR9ZnVuY3Rpb24gcGkoZSx0LG4pe3ZhciByPS0xLGk9cCxvPWUubGVuZ3RoLGE9ITAscz1bXSx1PXM7aWYobilhPSExLGk9ZjtlbHNlIGlmKG8+PXJlKXt2YXIgYz10P251bGw6dnAoZSk7aWYoYylyZXR1cm4gVyhjKTthPSExLGk9UCx1PW5ldyBobn1lbHNlIHU9dD9bXTpzO2U6Zm9yKDsrK3I8bzspe3ZhciBsPWVbcl0sZD10P3QobCk6bDtpZihsPW58fDAhPT1sP2w6MCxhJiZkPT09ZCl7Zm9yKHZhciBoPXUubGVuZ3RoO2gtLTspaWYodVtoXT09PWQpY29udGludWUgZTt0JiZ1LnB1c2goZCkscy5wdXNoKGwpfWVsc2UgaSh1LGQsbil8fCh1IT09cyYmdS5wdXNoKGQpLHMucHVzaChsKSl9cmV0dXJuIHN9ZnVuY3Rpb24gZmkoZSx0KXtyZXR1cm4gdD14aSh0LGUpLG51bGw9PShlPUdvKGUsdCkpfHxkZWxldGUgZVtLbyh5YSh0KSldfWZ1bmN0aW9uIGRpKGUsdCxuLHIpe3JldHVybiBuaShlLHQsbihkcihlLHQpKSxyKX1mdW5jdGlvbiBoaShlLHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yP2k6LTE7KHI/by0tOisrbzxpKSYmdChlW29dLG8sZSk7KTtyZXR1cm4gbj9paShlLHI/MDpvLHI/bysxOmkpOmlpKGUscj9vKzE6MCxyP2k6byl9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgbj1lO3JldHVybiBuIGluc3RhbmNlb2YgdiYmKG49bi52YWx1ZSgpKSxtKHQsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mdW5jLmFwcGx5KHQudGhpc0FyZyxoKFtlXSx0LmFyZ3MpKX0sbil9ZnVuY3Rpb24gZ2koZSx0LG4pe3ZhciByPWUubGVuZ3RoO2lmKHI8MilyZXR1cm4gcj9waShlWzBdKTpbXTtmb3IodmFyIGk9LTEsbz1YYyhyKTsrK2k8cjspZm9yKHZhciBhPWVbaV0scz0tMTsrK3M8cjspcyE9aSYmKG9baV09aXIob1tpXXx8YSxlW3NdLHQsbikpO3JldHVybiBwaShjcihvLDEpLHQsbil9ZnVuY3Rpb24geWkoZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoLG89dC5sZW5ndGgsYT17fTsrK3I8aTspe3ZhciBzPXI8bz90W3JdOm5lO24oYSxlW3JdLHMpfXJldHVybiBhfWZ1bmN0aW9uIHZpKGUpe3JldHVybiBHcyhlKT9lOltdfWZ1bmN0aW9uIGJpKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6a2N9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gZGYoZSk/ZTpObyhlLHQpP1tlXTpBcChEdShlKSl9ZnVuY3Rpb24gQ2koZSx0LG4pe3ZhciByPWUubGVuZ3RoO3JldHVybiBuPW49PT1uZT9yOm4sIXQmJm4+PXI/ZTppaShlLHQsbil9ZnVuY3Rpb24gRWkoZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1FbD9FbChuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24gRGkoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IENsKHQpLnNldChuZXcgQ2woZSkpLHR9ZnVuY3Rpb24gd2koZSx0KXt2YXIgbj10P0RpKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBTaShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLnNvdXJjZSwkdC5leGVjKGUpKTtyZXR1cm4gdC5sYXN0SW5kZXg9ZS5sYXN0SW5kZXgsdH1mdW5jdGlvbiBraShlKXtyZXR1cm4gc3A/cmwoc3AuY2FsbChlKSk6e319ZnVuY3Rpb24gQWkoZSx0KXt2YXIgbj10P0RpKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIF9pKGUsdCl7aWYoZSE9PXQpe3ZhciBuPWUhPT1uZSxyPW51bGw9PT1lLGk9ZT09PWUsbz1mdShlKSxhPXQhPT1uZSxzPW51bGw9PT10LHU9dD09PXQsYz1mdSh0KTtpZighcyYmIWMmJiFvJiZlPnR8fG8mJmEmJnUmJiFzJiYhY3x8ciYmYSYmdXx8IW4mJnV8fCFpKXJldHVybiAxO2lmKCFyJiYhbyYmIWMmJmU8dHx8YyYmbiYmaSYmIXImJiFvfHxzJiZuJiZpfHwhYSYmaXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gVGkoZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1uLmxlbmd0aDsrK3I8YTspe3ZhciB1PV9pKGlbcl0sb1tyXSk7aWYodSl7aWYocj49cylyZXR1cm4gdTtyZXR1cm4gdSooImRlc2MiPT1uW3JdPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fWZ1bmN0aW9uIE9pKGUsdCxuLHIpe2Zvcih2YXIgaT0tMSxvPWUubGVuZ3RoLGE9bi5sZW5ndGgscz0tMSx1PXQubGVuZ3RoLGM9VWwoby1hLDApLGw9WGModStjKSxwPSFyOysrczx1OylsW3NdPXRbc107Zm9yKDsrK2k8YTspKHB8fGk8bykmJihsW25baV1dPWVbaV0pO2Zvcig7Yy0tOylsW3MrK109ZVtpKytdO3JldHVybiBsfWZ1bmN0aW9uIEZpKGUsdCxuLHIpe2Zvcih2YXIgaT0tMSxvPWUubGVuZ3RoLGE9LTEscz1uLmxlbmd0aCx1PS0xLGM9dC5sZW5ndGgsbD1VbChvLXMsMCkscD1YYyhsK2MpLGY9IXI7KytpPGw7KXBbaV09ZVtpXTtmb3IodmFyIGQ9aTsrK3U8YzspcFtkK3VdPXRbdV07Zm9yKDsrK2E8czspKGZ8fGk8bykmJihwW2QrblthXV09ZVtpKytdKTtyZXR1cm4gcH1mdW5jdGlvbiBOaShlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGg7Zm9yKHR8fCh0PVhjKHIpKTsrK248cjspdFtuXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIElpKGUsdCxuLHIpe3ZhciBpPSFuO258fChuPXt9KTtmb3IodmFyIG89LTEsYT10Lmxlbmd0aDsrK288YTspe3ZhciBzPXRbb10sdT1yP3IobltzXSxlW3NdLHMsbixlKTpuZTt1PT09bmUmJih1PWVbc10pLGk/WW4obixzLHUpOnpuKG4scyx1KX1yZXR1cm4gbn1mdW5jdGlvbiBMaShlLHQpe3JldHVybiBJaShlLHhwKGUpLHQpfWZ1bmN0aW9uIFBpKGUsdCl7cmV0dXJuIElpKGUsQ3AoZSksdCl9ZnVuY3Rpb24gTWkoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaT1kZihuKT9hOlFuLG89dD90KCk6e307cmV0dXJuIGkobixlLHlvKHIsMiksbyl9fWZ1bmN0aW9uIGppKGUpe3JldHVybiBacihmdW5jdGlvbih0LG4pe3ZhciByPS0xLGk9bi5sZW5ndGgsbz1pPjE/bltpLTFdOm5lLGE9aT4yP25bMl06bmU7Zm9yKG89ZS5sZW5ndGg+MyYmImZ1bmN0aW9uIj09dHlwZW9mIG8/KGktLSxvKTpuZSxhJiZGbyhuWzBdLG5bMV0sYSkmJihvPWk8Mz9uZTpvLGk9MSksdD1ybCh0KTsrK3I8aTspe3ZhciBzPW5bcl07cyYmZSh0LHMscixvKX1yZXR1cm4gdH0pfWZ1bmN0aW9uIFJpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighenMobikpcmV0dXJuIGUobixyKTtmb3IodmFyIGk9bi5sZW5ndGgsbz10P2k6LTEsYT1ybChuKTsodD9vLS06KytvPGkpJiYhMSE9PXIoYVtvXSxvLGEpOyk7cmV0dXJuIG59fWZ1bmN0aW9uIEJpKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBpPS0xLG89cmwodCksYT1yKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIHU9YVtlP3M6KytpXTtpZighMT09PW4ob1t1XSx1LG8pKWJyZWFrfXJldHVybiB0fX1mdW5jdGlvbiAkaShlLHQsbil7ZnVuY3Rpb24gcigpe3JldHVybih0aGlzJiZ0aGlzIT09T24mJnRoaXMgaW5zdGFuY2VvZiByP286ZSkuYXBwbHkoaT9uOnRoaXMsYXJndW1lbnRzKX12YXIgaT10JmhlLG89R2koZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3Q9RHUodCk7dmFyIG49VSh0KT9YKHQpOm5lLHI9bj9uWzBdOnQuY2hhckF0KDApLGk9bj9DaShuLDEpLmpvaW4oIiIpOnQuc2xpY2UoMSk7cmV0dXJuIHJbZV0oKStpfX1mdW5jdGlvbiB6aShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG0oQ2ModGModCkucmVwbGFjZShmbiwiIikpLGUsIiIpfX1mdW5jdGlvbiBHaShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUodFswXSk7Y2FzZSAyOnJldHVybiBuZXcgZSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSk7Y2FzZSA1OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSl9dmFyIG49Y3AoZS5wcm90b3R5cGUpLHI9ZS5hcHBseShuLHQpO3JldHVybiBldShyKT9yOm59fWZ1bmN0aW9uIFZpKGUsdCxuKXtmdW5jdGlvbiByKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgscz1YYyhhKSx1PWEsYz1nbyhyKTt1LS07KXNbdV09YXJndW1lbnRzW3VdO3ZhciBsPWE8MyYmc1swXSE9PWMmJnNbYS0xXSE9PWM/W106SChzLGMpO3JldHVybihhLT1sLmxlbmd0aCk8bj90byhlLHQsV2ksci5wbGFjZWhvbGRlcixuZSxzLGwsbmUsbmUsbi1hKTpvKHRoaXMmJnRoaXMhPT1PbiYmdGhpcyBpbnN0YW5jZW9mIHI/aTplLHRoaXMscyl9dmFyIGk9R2koZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcWkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgaT1ybCh0KTtpZighenModCkpe3ZhciBvPXlvKG4sMyk7dD1NdSh0KSxuPWZ1bmN0aW9uKGUpe3JldHVybiBvKGlbZV0sZSxpKX19dmFyIGE9ZSh0LG4scik7cmV0dXJuIGE+LTE/aVtvP3RbYV06YV06bmV9fWZ1bmN0aW9uIEhpKGUpe3JldHVybiBwbyhmdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW4sbz1pLnByb3RvdHlwZS50aHJ1O2ZvcihlJiZ0LnJldmVyc2UoKTtyLS07KXt2YXIgYT10W3JdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBhbChvZSk7aWYobyYmIXMmJiJ3cmFwcGVyIj09bW8oYSkpdmFyIHM9bmV3IGkoW10sITApfWZvcihyPXM/cjpuOysrcjxuOyl7YT10W3JdO3ZhciB1PW1vKGEpLGM9IndyYXBwZXIiPT11P2JwKGEpOm5lO3M9YyYmTG8oY1swXSkmJmNbMV09PShDZXx5ZXxiZXxFZSkmJiFjWzRdLmxlbmd0aCYmMT09Y1s5XT9zW21vKGNbMF0pXS5hcHBseShzLGNbM10pOjE9PWEubGVuZ3RoJiZMbyhhKT9zW3VdKCk6cy50aHJ1KGEpfXJldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPWVbMF07aWYocyYmMT09ZS5sZW5ndGgmJmRmKHIpKXJldHVybiBzLnBsYW50KHIpLnZhbHVlKCk7Zm9yKHZhciBpPTAsbz1uP3RbaV0uYXBwbHkodGhpcyxlKTpyOysraTxuOylvPXRbaV0uY2FsbCh0aGlzLG8pO3JldHVybiBvfX0pfWZ1bmN0aW9uIFdpKGUsdCxuLHIsaSxvLGEscyx1LGMpe2Z1bmN0aW9uIGwoKXtmb3IodmFyIHk9YXJndW1lbnRzLmxlbmd0aCx2PVhjKHkpLGI9eTtiLS07KXZbYl09YXJndW1lbnRzW2JdO2lmKGgpdmFyIHg9Z28obCksQz1SKHYseCk7aWYociYmKHY9T2kodixyLGksaCkpLG8mJih2PUZpKHYsbyxhLGgpKSx5LT1DLGgmJnk8Yyl7dmFyIEU9SCh2LHgpO3JldHVybiB0byhlLHQsV2ksbC5wbGFjZWhvbGRlcixuLHYsRSxzLHUsYy15KX12YXIgRD1mP246dGhpcyx3PWQ/RFtlXTplO3JldHVybiB5PXYubGVuZ3RoLHM/dj1Wbyh2LHMpOm0mJnk+MSYmdi5yZXZlcnNlKCkscCYmdTx5JiYodi5sZW5ndGg9dSksdGhpcyYmdGhpcyE9PU9uJiZ0aGlzIGluc3RhbmNlb2YgbCYmKHc9Z3x8R2kodykpLHcuYXBwbHkoRCx2KX12YXIgcD10JkNlLGY9dCZoZSxkPXQmbWUsaD10Jih5ZXx2ZSksbT10JkRlLGc9ZD9uZTpHaShlKTtyZXR1cm4gbH1mdW5jdGlvbiBRaShlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBDcihuLGUsdChyKSx7fSl9fWZ1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGk7aWYobj09PW5lJiZyPT09bmUpcmV0dXJuIHQ7aWYobiE9PW5lJiYoaT1uKSxyIT09bmUpe2lmKGk9PT1uZSlyZXR1cm4gcjsic3RyaW5nIj09dHlwZW9mIG58fCJzdHJpbmciPT10eXBlb2Ygcj8obj1saShuKSxyPWxpKHIpKToobj1jaShuKSxyPWNpKHIpKSxpPWUobixyKX1yZXR1cm4gaX19ZnVuY3Rpb24gSmkoZSl7cmV0dXJuIHBvKGZ1bmN0aW9uKHQpe3JldHVybiB0PWQodCxJKHlvKCkpKSxacihmdW5jdGlvbihuKXt2YXIgcj10aGlzO3JldHVybiBlKHQsZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSxyLG4pfSl9KX0pfWZ1bmN0aW9uIFlpKGUsdCl7dD10PT09bmU/IiAiOmxpKHQpO3ZhciBuPXQubGVuZ3RoO2lmKG48MilyZXR1cm4gbj9Ycih0LGUpOnQ7dmFyIHI9WHIodCxMbChlL1kodCkpKTtyZXR1cm4gVSh0KT9DaShYKHIpLDAsZSkuam9pbigiIik6ci5zbGljZSgwLGUpfWZ1bmN0aW9uIFhpKGUsdCxuLHIpe2Z1bmN0aW9uIGkoKXtmb3IodmFyIHQ9LTEsdT1hcmd1bWVudHMubGVuZ3RoLGM9LTEsbD1yLmxlbmd0aCxwPVhjKGwrdSksZj10aGlzJiZ0aGlzIT09T24mJnRoaXMgaW5zdGFuY2VvZiBpP3M6ZTsrK2M8bDspcFtjXT1yW2NdO2Zvcig7dS0tOylwW2MrK109YXJndW1lbnRzWysrdF07cmV0dXJuIG8oZixhP246dGhpcyxwKX12YXIgYT10JmhlLHM9R2koZSk7cmV0dXJuIGl9ZnVuY3Rpb24gWmkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gciYmIm51bWJlciIhPXR5cGVvZiByJiZGbyh0LG4scikmJihuPXI9bmUpLHQ9eXUodCksbj09PW5lPyhuPXQsdD0wKTpuPXl1KG4pLHI9cj09PW5lP3Q8bj8xOi0xOnl1KHIpLFlyKHQsbixyLGUpfX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiJzdHJpbmciPT10eXBlb2Ygbnx8KHQ9eHUodCksbj14dShuKSksZSh0LG4pfX1mdW5jdGlvbiB0byhlLHQsbixyLGksbyxhLHMsdSxjKXt2YXIgbD10JnllLHA9bD9hOm5lLGY9bD9uZTphLGQ9bD9vOm5lLGg9bD9uZTpvO3R8PWw/YmU6eGUsKHQmPX4obD94ZTpiZSkpJmdlfHwodCY9fihoZXxtZSkpO3ZhciBtPVtlLHQsaSxkLHAsaCxmLHMsdSxjXSxnPW4uYXBwbHkobmUsbSk7cmV0dXJuIExvKGUpJiZ3cChnLG0pLGcucGxhY2Vob2xkZXI9cixIbyhnLGUsdCl9ZnVuY3Rpb24gbm8oZSl7dmFyIHQ9bmxbZV07cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoZT14dShlKSxuPW51bGw9PW4/MDp6bCh2dShuKSwyOTIpKXt2YXIgcj0oRHUoZSkrImUiKS5zcGxpdCgiZSIpO3JldHVybiByPShEdSh0KHJbMF0rImUiKygrclsxXStuKSkpKyJlIikuc3BsaXQoImUiKSwrKHJbMF0rImUiKygrclsxXS1uKSl9cmV0dXJuIHQoZSl9fWZ1bmN0aW9uIHJvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1FcCh0KTtyZXR1cm4gbj09V2U/Vih0KTpuPT1aZT9RKHQpOk4odCxlKHQpKX19ZnVuY3Rpb24gaW8oZSx0LG4scixpLG8sYSxzKXt2YXIgdT10Jm1lO2lmKCF1JiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgYWwob2UpO3ZhciBjPXI/ci5sZW5ndGg6MDtpZihjfHwodCY9fihiZXx4ZSkscj1pPW5lKSxhPWE9PT1uZT9hOlVsKHZ1KGEpLDApLHM9cz09PW5lP3M6dnUocyksYy09aT9pLmxlbmd0aDowLHQmeGUpe3ZhciBsPXIscD1pO3I9aT1uZX12YXIgZj11P25lOmJwKGUpLGQ9W2UsdCxuLHIsaSxsLHAsbyxhLHNdO2lmKGYmJkJvKGQsZiksZT1kWzBdLHQ9ZFsxXSxuPWRbMl0scj1kWzNdLGk9ZFs0XSxzPWRbOV09ZFs5XT09PW5lP3U/MDplLmxlbmd0aDpVbChkWzldLWMsMCksIXMmJnQmKHllfHZlKSYmKHQmPX4oeWV8dmUpKSx0JiZ0IT1oZSloPXQ9PXllfHx0PT12ZT9WaShlLHQscyk6dCE9YmUmJnQhPShoZXxiZSl8fGkubGVuZ3RoP1dpLmFwcGx5KG5lLGQpOlhpKGUsdCxuLHIpO2Vsc2UgdmFyIGg9JGkoZSx0LG4pO3JldHVybiBIbygoZj9ocDp3cCkoaCxkKSxlLHQpfWZ1bmN0aW9uIG9vKGUsdCxuLHIpe3JldHVybiBlPT09bmV8fFVzKGUsY2xbbl0pJiYhZmwuY2FsbChyLG4pP3Q6ZX1mdW5jdGlvbiBhbyhlLHQsbixyLGksbyl7cmV0dXJuIGV1KGUpJiZldSh0KSYmKG8uc2V0KHQsZSksVXIoZSx0LG5lLGFvLG8pLG8uZGVsZXRlKHQpKSxlfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBjdShlKT9uZTplfWZ1bmN0aW9uIHVvKGUsdCxuLHIsaSxvKXt2YXIgYT1uJmZlLHM9ZS5sZW5ndGgsdT10Lmxlbmd0aDtpZihzIT11JiYhKGEmJnU+cykpcmV0dXJuITE7dmFyIGM9by5nZXQoZSk7aWYoYyYmby5nZXQodCkpcmV0dXJuIGM9PXQ7dmFyIGw9LTEscD0hMCxmPW4mZGU/bmV3IGhuOm5lO2ZvcihvLnNldChlLHQpLG8uc2V0KHQsZSk7KytsPHM7KXt2YXIgZD1lW2xdLGg9dFtsXTtpZihyKXZhciBtPWE/cihoLGQsbCx0LGUsbyk6cihkLGgsbCxlLHQsbyk7aWYobSE9PW5lKXtpZihtKWNvbnRpbnVlO3A9ITE7YnJlYWt9aWYoZil7aWYoIXkodCxmdW5jdGlvbihlLHQpe2lmKCFQKGYsdCkmJihkPT09ZXx8aShkLGUsbixyLG8pKSlyZXR1cm4gZi5wdXNoKHQpfSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoZCE9PWgmJiFpKGQsaCxuLHIsbykpe3A9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxwfWZ1bmN0aW9uIGNvKGUsdCxuLHIsaSxvLGEpe3N3aXRjaChuKXtjYXNlIGF0OmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBvdDpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhbyhuZXcgQ2woZSksbmV3IENsKHQpKSk7Y2FzZSBVZTpjYXNlIHplOmNhc2UgUWU6cmV0dXJuIFVzKCtlLCt0KTtjYXNlIFZlOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBYZTpjYXNlIGV0OnJldHVybiBlPT10KyIiO2Nhc2UgV2U6dmFyIHM9VjtjYXNlIFplOnZhciB1PXImZmU7aWYoc3x8KHM9VyksZS5zaXplIT10LnNpemUmJiF1KXJldHVybiExO3ZhciBjPWEuZ2V0KGUpO2lmKGMpcmV0dXJuIGM9PXQ7cnw9ZGUsYS5zZXQoZSx0KTt2YXIgbD11byhzKGUpLHModCkscixpLG8sYSk7cmV0dXJuIGEuZGVsZXRlKGUpLGw7Y2FzZSB0dDppZihzcClyZXR1cm4gc3AuY2FsbChlKT09c3AuY2FsbCh0KX1yZXR1cm4hMX1mdW5jdGlvbiBsbyhlLHQsbixyLGksbyl7dmFyIGE9biZmZSxzPWZvKGUpLHU9cy5sZW5ndGg7aWYodSE9Zm8odCkubGVuZ3RoJiYhYSlyZXR1cm4hMTtmb3IodmFyIGM9dTtjLS07KXt2YXIgbD1zW2NdO2lmKCEoYT9sIGluIHQ6ZmwuY2FsbCh0LGwpKSlyZXR1cm4hMX12YXIgcD1vLmdldChlKTtpZihwJiZvLmdldCh0KSlyZXR1cm4gcD09dDt2YXIgZj0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBkPWE7KytjPHU7KXtsPXNbY107dmFyIGg9ZVtsXSxtPXRbbF07aWYocil2YXIgZz1hP3IobSxoLGwsdCxlLG8pOnIoaCxtLGwsZSx0LG8pO2lmKCEoZz09PW5lP2g9PT1tfHxpKGgsbSxuLHIsbyk6Zykpe2Y9ITE7YnJlYWt9ZHx8KGQ9ImNvbnN0cnVjdG9yIj09bCl9aWYoZiYmIWQpe3ZhciB5PWUuY29uc3RydWN0b3Isdj10LmNvbnN0cnVjdG9yO3khPXYmJiJjb25zdHJ1Y3RvciJpbiBlJiYiY29uc3RydWN0b3IiaW4gdCYmISgiZnVuY3Rpb24iPT10eXBlb2YgeSYmeSBpbnN0YW5jZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB2JiZ2IGluc3RhbmNlb2YgdikmJihmPSExKX1yZXR1cm4gby5kZWxldGUoZSksby5kZWxldGUodCksZn1mdW5jdGlvbiBwbyhlKXtyZXR1cm4ga3Aoem8oZSxuZSxjYSksZSsiIil9ZnVuY3Rpb24gZm8oZSl7cmV0dXJuIGhyKGUsTXUseHApfWZ1bmN0aW9uIGhvKGUpe3JldHVybiBocihlLGp1LENwKX1mdW5jdGlvbiBtbyhlKXtmb3IodmFyIHQ9ZS5uYW1lKyIiLG49ZXBbdF0scj1mbC5jYWxsKGVwLHQpP24ubGVuZ3RoOjA7ci0tOyl7dmFyIGk9bltyXSxvPWkuZnVuYztpZihudWxsPT1vfHxvPT1lKXJldHVybiBpLm5hbWV9cmV0dXJuIHR9ZnVuY3Rpb24gZ28oZSl7cmV0dXJuKGZsLmNhbGwobiwicGxhY2Vob2xkZXIiKT9uOmUpLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIHlvKCl7dmFyIGU9bi5pdGVyYXRlZXx8QWM7cmV0dXJuIGU9ZT09PUFjP0xyOmUsYXJndW1lbnRzLmxlbmd0aD9lKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOmV9ZnVuY3Rpb24gdm8oZSx0KXt2YXIgbj1lLl9fZGF0YV9fO3JldHVybiBJbyh0KT9uWyJzdHJpbmciPT10eXBlb2YgdD8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfWZ1bmN0aW9uIGJvKGUpe2Zvcih2YXIgdD1NdShlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0saT1lW3JdO3Rbbl09W3IsaSxqbyhpKV19cmV0dXJuIHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj0kKGUsdCk7cmV0dXJuIE9yKG4pP246bmV9ZnVuY3Rpb24gQ28oZSl7dmFyIHQ9ZmwuY2FsbChlLFRsKSxuPWVbVGxdO3RyeXtlW1RsXT1uZTt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGk9bWwuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtUbF09bjpkZWxldGUgZVtUbF0pLGl9ZnVuY3Rpb24gRW8oZSx0LG4pe2Zvcih2YXIgcj0tMSxpPW4ubGVuZ3RoOysrcjxpOyl7dmFyIG89bltyXSxhPW8uc2l6ZTtzd2l0Y2goby50eXBlKXtjYXNlImRyb3AiOmUrPWE7YnJlYWs7Y2FzZSJkcm9wUmlnaHQiOnQtPWE7YnJlYWs7Y2FzZSJ0YWtlIjp0PXpsKHQsZSthKTticmVhaztjYXNlInRha2VSaWdodCI6ZT1VbChlLHQtYSl9fXJldHVybntzdGFydDplLGVuZDp0fX1mdW5jdGlvbiBEbyhlKXt2YXIgdD1lLm1hdGNoKFB0KTtyZXR1cm4gdD90WzFdLnNwbGl0KE10KTpbXX1mdW5jdGlvbiB3byhlLHQsbil7dD14aSh0LGUpO2Zvcih2YXIgcj0tMSxpPXQubGVuZ3RoLG89ITE7KytyPGk7KXt2YXIgYT1Lbyh0W3JdKTtpZighKG89bnVsbCE9ZSYmbihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrciE9aT9vOiEhKGk9bnVsbD09ZT8wOmUubGVuZ3RoKSYmWnMoaSkmJk9vKGEsaSkmJihkZihlKXx8ZmYoZSkpfWZ1bmN0aW9uIFNvKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgZVswXSYmZmwuY2FsbChlLCJpbmRleCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn1mdW5jdGlvbiBrbyhlKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZS5jb25zdHJ1Y3Rvcnx8TW8oZSk/e306Y3AoRGwoZSkpfWZ1bmN0aW9uIEFvKGUsdCxuKXt2YXIgcj1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIG90OnJldHVybiBEaShlKTtjYXNlIFVlOmNhc2UgemU6cmV0dXJuIG5ldyByKCtlKTtjYXNlIGF0OnJldHVybiB3aShlLG4pO2Nhc2Ugc3Q6Y2FzZSB1dDpjYXNlIGN0OmNhc2UgbHQ6Y2FzZSBwdDpjYXNlIGZ0OmNhc2UgZHQ6Y2FzZSBodDpjYXNlIG10OnJldHVybiBBaShlLG4pO2Nhc2UgV2U6cmV0dXJuIG5ldyByO2Nhc2UgUWU6Y2FzZSBldDpyZXR1cm4gbmV3IHIoZSk7Y2FzZSBYZTpyZXR1cm4gU2koZSk7Y2FzZSBaZTpyZXR1cm4gbmV3IHI7Y2FzZSB0dDpyZXR1cm4ga2koZSl9fWZ1bmN0aW9uIF9vKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYoIW4pcmV0dXJuIGU7dmFyIHI9bi0xO3JldHVybiB0W3JdPShuPjE/IiYgIjoiIikrdFtyXSx0PXQuam9pbihuPjI/IiwgIjoiICIpLGUucmVwbGFjZShMdCwie1xuLyogW3dyYXBwZWQgd2l0aCAiK3QrIl0gKi9cbiIpfWZ1bmN0aW9uIFRvKGUpe3JldHVybiBkZihlKXx8ZmYoZSl8fCEhKEFsJiZlJiZlW0FsXSl9ZnVuY3Rpb24gT28oZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4hISh0PW51bGw9PXQ/RmU6dCkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJnF0LnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBGbyhlLHQsbil7aWYoIWV1KG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKCJudW1iZXIiPT1yP3pzKG4pJiZPbyh0LG4ubGVuZ3RoKToic3RyaW5nIj09ciYmdCBpbiBuKSYmVXMoblt0XSxlKX1mdW5jdGlvbiBObyhlLHQpe2lmKGRmKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPWUmJiFmdShlKSl8fChBdC50ZXN0KGUpfHwha3QudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBybCh0KSl9ZnVuY3Rpb24gSW8oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuInN0cmluZyI9PXR8fCJudW1iZXIiPT10fHwic3ltYm9sIj09dHx8ImJvb2xlYW4iPT10PyJfX3Byb3RvX18iIT09ZTpudWxsPT09ZX1mdW5jdGlvbiBMbyhlKXt2YXIgdD1tbyhlKSxyPW5bdF07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHJ8fCEodCBpbiB2LnByb3RvdHlwZSkpcmV0dXJuITE7aWYoZT09PXIpcmV0dXJuITA7dmFyIGk9YnAocik7cmV0dXJuISFpJiZlPT09aVswXX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4hIWhsJiZobCBpbiBlfWZ1bmN0aW9uIE1vKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxjbCl9ZnVuY3Rpb24gam8oZSl7cmV0dXJuIGU9PT1lJiYhZXUoZSl9ZnVuY3Rpb24gUm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJihuW2VdPT09dCYmKHQhPT1uZXx8ZSBpbiBybChuKSkpfX1mdW5jdGlvbiBCbyhlLHQpe3ZhciBuPWVbMV0scj10WzFdLGk9bnxyLG89aTwoaGV8bWV8Q2UpLGE9cj09Q2UmJm49PXllfHxyPT1DZSYmbj09RWUmJmVbN10ubGVuZ3RoPD10WzhdfHxyPT0oQ2V8RWUpJiZ0WzddLmxlbmd0aDw9dFs4XSYmbj09eWU7aWYoIW8mJiFhKXJldHVybiBlO3ImaGUmJihlWzJdPXRbMl0saXw9biZoZT8wOmdlKTt2YXIgcz10WzNdO2lmKHMpe3ZhciB1PWVbM107ZVszXT11P09pKHUscyx0WzRdKTpzLGVbNF09dT9IKGVbM10sdWUpOnRbNF19cmV0dXJuIHM9dFs1XSxzJiYodT1lWzVdLGVbNV09dT9GaSh1LHMsdFs2XSk6cyxlWzZdPXU/SChlWzVdLHVlKTp0WzZdKSxzPXRbN10scyYmKGVbN109cyksciZDZSYmKGVbOF09bnVsbD09ZVs4XT90WzhdOnpsKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPWksZX1mdW5jdGlvbiAkbyhlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBybChlKSl0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIG1sLmNhbGwoZSl9ZnVuY3Rpb24gem8oZSx0LG4pe3JldHVybiB0PVVsKHQ9PT1uZT9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLGk9LTEsYT1VbChyLmxlbmd0aC10LDApLHM9WGMoYSk7KytpPGE7KXNbaV09clt0K2ldO2k9LTE7Zm9yKHZhciB1PVhjKHQrMSk7KytpPHQ7KXVbaV09cltpXTtyZXR1cm4gdVt0XT1uKHMpLG8oZSx0aGlzLHUpfX1mdW5jdGlvbiBHbyhlLHQpe3JldHVybiB0Lmxlbmd0aDwyP2U6ZHIoZSxpaSh0LDAsLTEpKX1mdW5jdGlvbiBWbyhlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPXpsKHQubGVuZ3RoLG4pLGk9TmkoZSk7ci0tOyl7dmFyIG89dFtyXTtlW3JdPU9vKG8sbik/aVtvXTpuZX1yZXR1cm4gZX1mdW5jdGlvbiBxbyhlLHQpe2lmKCJfX3Byb3RvX18iIT10KXJldHVybiBlW3RdfWZ1bmN0aW9uIEhvKGUsdCxuKXt2YXIgcj10KyIiO3JldHVybiBrcChlLF9vKHIsWW8oRG8ociksbikpKX1mdW5jdGlvbiBXbyhlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1HbCgpLGk9QWUtKHItbik7aWYobj1yLGk+MCl7aWYoKyt0Pj1rZSlyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KG5lLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFFvKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aCxpPXItMTtmb3IodD10PT09bmU/cjp0Oysrbjx0Oyl7dmFyIG89SnIobixpKSxhPWVbb107ZVtvXT1lW25dLGVbbl09YX1yZXR1cm4gZS5sZW5ndGg9dCxlfWZ1bmN0aW9uIEtvKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZXx8ZnUoZSkpcmV0dXJuIGU7dmFyIHQ9ZSsiIjtyZXR1cm4iMCI9PXQmJjEvZT09LU9lPyItMCI6dH1mdW5jdGlvbiBKbyhlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIHBsLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaChlKXt9fXJldHVybiIifWZ1bmN0aW9uIFlvKGUsdCl7cmV0dXJuIHMoamUsZnVuY3Rpb24obil7dmFyIHI9Il8uIituWzBdO3QmblsxXSYmIXAoZSxyKSYmZS5wdXNoKHIpfSksZS5zb3J0KCl9ZnVuY3Rpb24gWG8oZSl7aWYoZSBpbnN0YW5jZW9mIHYpcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgaShlLl9fd3JhcHBlZF9fLGUuX19jaGFpbl9fKTtyZXR1cm4gdC5fX2FjdGlvbnNfXz1OaShlLl9fYWN0aW9uc19fKSx0Ll9faW5kZXhfXz1lLl9faW5kZXhfXyx0Ll9fdmFsdWVzX189ZS5fX3ZhbHVlc19fLHR9ZnVuY3Rpb24gWm8oZSx0LG4pe3Q9KG4/Rm8oZSx0LG4pOnQ9PT1uZSk/MTpVbCh2dSh0KSwwKTt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXJ8fHQ8MSlyZXR1cm5bXTtmb3IodmFyIGk9MCxvPTAsYT1YYyhMbChyL3QpKTtpPHI7KWFbbysrXT1paShlLGksaSs9dCk7cmV0dXJuIGF9ZnVuY3Rpb24gZWEoZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9MCxpPVtdOysrdDxuOyl7dmFyIG89ZVt0XTtvJiYoaVtyKytdPW8pfXJldHVybiBpfWZ1bmN0aW9uIHRhKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtpZighZSlyZXR1cm5bXTtmb3IodmFyIHQ9WGMoZS0xKSxuPWFyZ3VtZW50c1swXSxyPWU7ci0tOyl0W3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBoKGRmKG4pP05pKG4pOltuXSxjcih0LDEpKX1mdW5jdGlvbiBuYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByPyh0PW58fHQ9PT1uZT8xOnZ1KHQpLGlpKGUsdDwwPzA6dCxyKSk6W119ZnVuY3Rpb24gcmEoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj8odD1ufHx0PT09bmU/MTp2dSh0KSx0PXItdCxpaShlLDAsdDwwPzA6dCkpOltdfWZ1bmN0aW9uIGlhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2hpKGUseW8odCwzKSwhMCwhMCk6W119ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/aGkoZSx5byh0LDMpLCEwKTpbXX1mdW5jdGlvbiBhYShlLHQsbixyKXt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIGk/KG4mJiJudW1iZXIiIT10eXBlb2YgbiYmRm8oZSx0LG4pJiYobj0wLHI9aSksc3IoZSx0LG4scikpOltdfWZ1bmN0aW9uIHNhKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9bnVsbD09bj8wOnZ1KG4pO3JldHVybiBpPDAmJihpPVVsKHIraSwwKSksQyhlLHlvKHQsMyksaSl9ZnVuY3Rpb24gdWEoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yLTE7cmV0dXJuIG4hPT1uZSYmKGk9dnUobiksaT1uPDA/VWwocitpLDApOnpsKGksci0xKSksQyhlLHlvKHQsMyksaSwhMCl9ZnVuY3Rpb24gY2EoZSl7cmV0dXJuKG51bGw9PWU/MDplLmxlbmd0aCk/Y3IoZSwxKTpbXX1mdW5jdGlvbiBsYShlKXtyZXR1cm4obnVsbD09ZT8wOmUubGVuZ3RoKT9jcihlLE9lKTpbXX1mdW5jdGlvbiBwYShlLHQpe3JldHVybihudWxsPT1lPzA6ZS5sZW5ndGgpPyh0PXQ9PT1uZT8xOnZ1KHQpLGNyKGUsdCkpOltdfWZ1bmN0aW9uIGZhKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPXt9OysrdDxuOyl7dmFyIGk9ZVt0XTtyW2lbMF1dPWlbMV19cmV0dXJuIHJ9ZnVuY3Rpb24gZGEoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2VbMF06bmV9ZnVuY3Rpb24gaGEoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1udWxsPT1uPzA6dnUobik7cmV0dXJuIGk8MCYmKGk9VWwocitpLDApKSxFKGUsdCxpKX1mdW5jdGlvbiBtYShlKXtyZXR1cm4obnVsbD09ZT8wOmUubGVuZ3RoKT9paShlLDAsLTEpOltdfWZ1bmN0aW9uIGdhKGUsdCl7cmV0dXJuIG51bGw9PWU/IiI6QmwuY2FsbChlLHQpfWZ1bmN0aW9uIHlhKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06bmV9ZnVuY3Rpb24gdmEoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yO3JldHVybiBuIT09bmUmJihpPXZ1KG4pLGk9aTwwP1VsKHIraSwwKTp6bChpLHItMSkpLHQ9PT10P0ooZSx0LGkpOkMoZSx3LGksITApfWZ1bmN0aW9uIGJhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP0dyKGUsdnUodCkpOm5lfWZ1bmN0aW9uIHhhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9RcihlLHQpOmV9ZnVuY3Rpb24gQ2EoZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/UXIoZSx0LHlvKG4sMikpOmV9ZnVuY3Rpb24gRWEoZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/UXIoZSx0LG5lLG4pOmV9ZnVuY3Rpb24gRGEoZSx0KXt2YXIgbj1bXTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBuO3ZhciByPS0xLGk9W10sbz1lLmxlbmd0aDtmb3IodD15byh0LDMpOysrcjxvOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG4ucHVzaChhKSxpLnB1c2gocikpfXJldHVybiBLcihlLGkpLG59ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIG51bGw9PWU/ZTpIbC5jYWxsKGUpfWZ1bmN0aW9uIFNhKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KG4mJiJudW1iZXIiIT10eXBlb2YgbiYmRm8oZSx0LG4pPyh0PTAsbj1yKToodD1udWxsPT10PzA6dnUodCksbj1uPT09bmU/cjp2dShuKSksaWkoZSx0LG4pKTpbXX1mdW5jdGlvbiBrYShlLHQpe3JldHVybiBhaShlLHQpfWZ1bmN0aW9uIEFhKGUsdCxuKXtyZXR1cm4gc2koZSx0LHlvKG4sMikpfWZ1bmN0aW9uIF9hKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO2lmKG4pe3ZhciByPWFpKGUsdCk7aWYocjxuJiZVcyhlW3JdLHQpKXJldHVybiByfXJldHVybi0xfWZ1bmN0aW9uIFRhKGUsdCl7cmV0dXJuIGFpKGUsdCwhMCl9ZnVuY3Rpb24gT2EoZSx0LG4pe3JldHVybiBzaShlLHQseW8obiwyKSwhMCl9ZnVuY3Rpb24gRmEoZSx0KXtpZihudWxsPT1lPzA6ZS5sZW5ndGgpe3ZhciBuPWFpKGUsdCwhMCktMTtpZihVcyhlW25dLHQpKXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIE5hKGUpe3JldHVybiBlJiZlLmxlbmd0aD91aShlKTpbXX1mdW5jdGlvbiBJYShlLHQpe3JldHVybiBlJiZlLmxlbmd0aD91aShlLHlvKHQsMikpOltdfWZ1bmN0aW9uIExhKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9paShlLDEsdCk6W119ZnVuY3Rpb24gUGEoZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aD8odD1ufHx0PT09bmU/MTp2dSh0KSxpaShlLDAsdDwwPzA6dCkpOltdfWZ1bmN0aW9uIE1hKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KHQ9bnx8dD09PW5lPzE6dnUodCksdD1yLXQsaWkoZSx0PDA/MDp0LHIpKTpbXX1mdW5jdGlvbiBqYShlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9oaShlLHlvKHQsMyksITEsITApOltdfWZ1bmN0aW9uIFJhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2hpKGUseW8odCwzKSk6W119ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3BpKGUpOltdfWZ1bmN0aW9uICRhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3BpKGUseW8odCwyKSk6W119ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gdD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5lLGUmJmUubGVuZ3RoP3BpKGUsbmUsdCk6W119ZnVuY3Rpb24gemEoZSl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBlPWwoZSxmdW5jdGlvbihlKXtpZihHcyhlKSlyZXR1cm4gdD1VbChlLmxlbmd0aCx0KSwhMH0pLEYodCxmdW5jdGlvbih0KXtyZXR1cm4gZChlLGsodCkpfSl9ZnVuY3Rpb24gR2EoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBuPXphKGUpO3JldHVybiBudWxsPT10P246ZChuLGZ1bmN0aW9uKGUpe3JldHVybiBvKHQsbmUsZSl9KX1mdW5jdGlvbiBWYShlLHQpe3JldHVybiB5aShlfHxbXSx0fHxbXSx6bil9ZnVuY3Rpb24gcWEoZSx0KXtyZXR1cm4geWkoZXx8W10sdHx8W10sbmkpfWZ1bmN0aW9uIEhhKGUpe3ZhciB0PW4oZSk7cmV0dXJuIHQuX19jaGFpbl9fPSEwLHR9ZnVuY3Rpb24gV2EoZSx0KXtyZXR1cm4gdChlKSxlfWZ1bmN0aW9uIFFhKGUsdCl7cmV0dXJuIHQoZSl9ZnVuY3Rpb24gS2EoKXtyZXR1cm4gSGEodGhpcyl9ZnVuY3Rpb24gSmEoKXtyZXR1cm4gbmV3IGkodGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX1mdW5jdGlvbiBZYSgpe3RoaXMuX192YWx1ZXNfXz09PW5lJiYodGhpcy5fX3ZhbHVlc19fPWd1KHRoaXMudmFsdWUoKSkpO3ZhciBlPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOmUsdmFsdWU6ZT9uZTp0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK119fWZ1bmN0aW9uIFhhKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWmEoZSl7Zm9yKHZhciB0LG49dGhpcztuIGluc3RhbmNlb2Ygcjspe3ZhciBpPVhvKG4pO2kuX19pbmRleF9fPTAsaS5fX3ZhbHVlc19fPW5lLHQ/by5fX3dyYXBwZWRfXz1pOnQ9aTt2YXIgbz1pO249bi5fX3dyYXBwZWRfX31yZXR1cm4gby5fX3dyYXBwZWRfXz1lLHR9ZnVuY3Rpb24gZXMoKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fO2lmKGUgaW5zdGFuY2VvZiB2KXt2YXIgdD1lO3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKHQ9bmV3IHYodGhpcykpLHQ9dC5yZXZlcnNlKCksdC5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOlFhLGFyZ3M6W3dhXSx0aGlzQXJnOm5lfSksbmV3IGkodCx0aGlzLl9fY2hhaW5fXyl9cmV0dXJuIHRoaXMudGhydSh3YSl9ZnVuY3Rpb24gdHMoKXtyZXR1cm4gbWkodGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKX1mdW5jdGlvbiBucyhlLHQsbil7dmFyIHI9ZGYoZSk/YzpvcjtyZXR1cm4gbiYmRm8oZSx0LG4pJiYodD1uZSkscihlLHlvKHQsMykpfWZ1bmN0aW9uIHJzKGUsdCl7cmV0dXJuKGRmKGUpP2w6dXIpKGUseW8odCwzKSl9ZnVuY3Rpb24gaXMoZSx0KXtyZXR1cm4gY3IobHMoZSx0KSwxKX1mdW5jdGlvbiBvcyhlLHQpe3JldHVybiBjcihscyhlLHQpLE9lKX1mdW5jdGlvbiBhcyhlLHQsbil7cmV0dXJuIG49bj09PW5lPzE6dnUobiksY3IobHMoZSx0KSxuKX1mdW5jdGlvbiBzcyhlLHQpe3JldHVybihkZihlKT9zOmxwKShlLHlvKHQsMykpfWZ1bmN0aW9uIHVzKGUsdCl7cmV0dXJuKGRmKGUpP3U6cHApKGUseW8odCwzKSl9ZnVuY3Rpb24gY3MoZSx0LG4scil7ZT16cyhlKT9lOkt1KGUpLG49biYmIXI/dnUobik6MDt2YXIgaT1lLmxlbmd0aDtyZXR1cm4gbjwwJiYobj1VbChpK24sMCkpLHB1KGUpP248PWkmJmUuaW5kZXhPZih0LG4pPi0xOiEhaSYmRShlLHQsbik+LTF9ZnVuY3Rpb24gbHMoZSx0KXtyZXR1cm4oZGYoZSk/ZDpScikoZSx5byh0LDMpKX1mdW5jdGlvbiBwcyhlLHQsbixyKXtyZXR1cm4gbnVsbD09ZT9bXTooZGYodCl8fCh0PW51bGw9PXQ/W106W3RdKSxuPXI/bmU6bixkZihuKXx8KG49bnVsbD09bj9bXTpbbl0pLFZyKGUsdCxuKSl9ZnVuY3Rpb24gZnMoZSx0LG4pe3ZhciByPWRmKGUpP206XyxpPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLHlvKHQsNCksbixpLGxwKX1mdW5jdGlvbiBkcyhlLHQsbil7dmFyIHI9ZGYoZSk/ZzpfLGk9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUseW8odCw0KSxuLGkscHApfWZ1bmN0aW9uIGhzKGUsdCl7cmV0dXJuKGRmKGUpP2w6dXIpKGUsX3MoeW8odCwzKSkpfWZ1bmN0aW9uIG1zKGUpe3JldHVybihkZihlKT9GbjplaSkoZSl9ZnVuY3Rpb24gZ3MoZSx0LG4pe3JldHVybiB0PShuP0ZvKGUsdCxuKTp0PT09bmUpPzE6dnUodCksKGRmKGUpP05uOnRpKShlLHQpfWZ1bmN0aW9uIHlzKGUpe3JldHVybihkZihlKT9MbjpyaSkoZSl9ZnVuY3Rpb24gdnMoZSl7aWYobnVsbD09ZSlyZXR1cm4gMDtpZih6cyhlKSlyZXR1cm4gcHUoZSk/WShlKTplLmxlbmd0aDt2YXIgdD1FcChlKTtyZXR1cm4gdD09V2V8fHQ9PVplP2Uuc2l6ZTpQcihlKS5sZW5ndGh9ZnVuY3Rpb24gYnMoZSx0LG4pe3ZhciByPWRmKGUpP3k6b2k7cmV0dXJuIG4mJkZvKGUsdCxuKSYmKHQ9bmUpLHIoZSx5byh0LDMpKX1mdW5jdGlvbiB4cyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBhbChvZSk7cmV0dXJuIGU9dnUoZSksZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIENzKGUsdCxuKXtyZXR1cm4gdD1uP25lOnQsdD1lJiZudWxsPT10P2UubGVuZ3RoOnQsaW8oZSxDZSxuZSxuZSxuZSxuZSx0KX1mdW5jdGlvbiBFcyhlLHQpe3ZhciBuO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBhbChvZSk7cmV0dXJuIGU9dnUoZSksZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW5lKSxufX1mdW5jdGlvbiBEcyhlLHQsbil7dD1uP25lOnQ7dmFyIHI9aW8oZSx5ZSxuZSxuZSxuZSxuZSxuZSx0KTtyZXR1cm4gci5wbGFjZWhvbGRlcj1Ecy5wbGFjZWhvbGRlcixyfWZ1bmN0aW9uIHdzKGUsdCxuKXt0PW4/bmU6dDt2YXIgcj1pbyhlLHZlLG5lLG5lLG5lLG5lLG5lLHQpO3JldHVybiByLnBsYWNlaG9sZGVyPXdzLnBsYWNlaG9sZGVyLHJ9ZnVuY3Rpb24gU3MoZSx0LG4pe2Z1bmN0aW9uIHIodCl7dmFyIG49ZixyPWQ7cmV0dXJuIGY9ZD1uZSx2PXQsbT1lLmFwcGx5KHIsbil9ZnVuY3Rpb24gaShlKXtyZXR1cm4gdj1lLGc9U3Aocyx0KSxiP3IoZSk6bX1mdW5jdGlvbiBvKGUpe3ZhciBuPWUteSxyPWUtdixpPXQtbjtyZXR1cm4geD96bChpLGgtcik6aX1mdW5jdGlvbiBhKGUpe3ZhciBuPWUteSxyPWUtdjtyZXR1cm4geT09PW5lfHxuPj10fHxuPDB8fHgmJnI+PWh9ZnVuY3Rpb24gcygpe3ZhciBlPWVmKCk7aWYoYShlKSlyZXR1cm4gdShlKTtnPVNwKHMsbyhlKSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZz1uZSxDJiZmP3IoZSk6KGY9ZD1uZSxtKX1mdW5jdGlvbiBjKCl7ZyE9PW5lJiZ5cChnKSx2PTAsZj15PWQ9Zz1uZX1mdW5jdGlvbiBsKCl7cmV0dXJuIGc9PT1uZT9tOnUoZWYoKSl9ZnVuY3Rpb24gcCgpe3ZhciBlPWVmKCksbj1hKGUpO2lmKGY9YXJndW1lbnRzLGQ9dGhpcyx5PWUsbil7aWYoZz09PW5lKXJldHVybiBpKHkpO2lmKHgpcmV0dXJuIGc9U3Aocyx0KSxyKHkpfXJldHVybiBnPT09bmUmJihnPVNwKHMsdCkpLG19dmFyIGYsZCxoLG0sZyx5LHY9MCxiPSExLHg9ITEsQz0hMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgYWwob2UpO3JldHVybiB0PXh1KHQpfHwwLGV1KG4pJiYoYj0hIW4ubGVhZGluZyx4PSJtYXhXYWl0ImluIG4saD14P1VsKHh1KG4ubWF4V2FpdCl8fDAsdCk6aCxDPSJ0cmFpbGluZyJpbiBuPyEhbi50cmFpbGluZzpDKSxwLmNhbmNlbD1jLHAuZmx1c2g9bCxwfWZ1bmN0aW9uIGtzKGUpe3JldHVybiBpbyhlLERlKX1mdW5jdGlvbiBBcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHxudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgYWwob2UpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMscik6clswXSxvPW4uY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiBuLmNhY2hlPW5ldyhBcy5DYWNoZXx8YW4pLG59ZnVuY3Rpb24gX3MoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IGFsKG9lKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIWUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0pO2Nhc2UgMjpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSx0WzJdKX1yZXR1cm4hZS5hcHBseSh0aGlzLHQpfX1mdW5jdGlvbiBUcyhlKXtyZXR1cm4gRXMoMixlKX1mdW5jdGlvbiBPcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBhbChvZSk7cmV0dXJuIHQ9dD09PW5lP3Q6dnUodCksWnIoZSx0KX1mdW5jdGlvbiBGcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBhbChvZSk7cmV0dXJuIHQ9bnVsbD09dD8wOlVsKHZ1KHQpLDApLFpyKGZ1bmN0aW9uKG4pe3ZhciByPW5bdF0saT1DaShuLDAsdCk7cmV0dXJuIHImJmgoaSxyKSxvKGUsdGhpcyxpKX0pfWZ1bmN0aW9uIE5zKGUsdCxuKXt2YXIgcj0hMCxpPSEwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBhbChvZSk7cmV0dXJuIGV1KG4pJiYocj0ibGVhZGluZyJpbiBuPyEhbi5sZWFkaW5nOnIsaT0idHJhaWxpbmciaW4gbj8hIW4udHJhaWxpbmc6aSksU3MoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOml9KX1mdW5jdGlvbiBJcyhlKXtyZXR1cm4gQ3MoZSwxKX1mdW5jdGlvbiBMcyhlLHQpe3JldHVybiBzZihiaSh0KSxlKX1mdW5jdGlvbiBQcygpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gZGYoZSk/ZTpbZV19ZnVuY3Rpb24gTXMoZSl7cmV0dXJuIGVyKGUscGUpfWZ1bmN0aW9uIGpzKGUsdCl7cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuZSxlcihlLHBlLHQpfWZ1bmN0aW9uIFJzKGUpe3JldHVybiBlcihlLGNlfHBlKX1mdW5jdGlvbiBCcyhlLHQpe3JldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmUsZXIoZSxjZXxwZSx0KX1mdW5jdGlvbiAkcyhlLHQpe3JldHVybiBudWxsPT10fHxucihlLHQsTXUodCkpfWZ1bmN0aW9uIFVzKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9ZnVuY3Rpb24genMoZSl7cmV0dXJuIG51bGwhPWUmJlpzKGUubGVuZ3RoKSYmIVlzKGUpfWZ1bmN0aW9uIEdzKGUpe3JldHVybiB0dShlKSYmenMoZSl9ZnVuY3Rpb24gVnMoZSl7cmV0dXJuITA9PT1lfHwhMT09PWV8fHR1KGUpJiZtcihlKT09VWV9ZnVuY3Rpb24gcXMoZSl7cmV0dXJuIHR1KGUpJiYxPT09ZS5ub2RlVHlwZSYmIWN1KGUpfWZ1bmN0aW9uIEhzKGUpe2lmKG51bGw9PWUpcmV0dXJuITA7aWYoenMoZSkmJihkZihlKXx8InN0cmluZyI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZS5zcGxpY2V8fG1mKGUpfHx4ZihlKXx8ZmYoZSkpKXJldHVybiFlLmxlbmd0aDt2YXIgdD1FcChlKTtpZih0PT1XZXx8dD09WmUpcmV0dXJuIWUuc2l6ZTtpZihNbyhlKSlyZXR1cm4hUHIoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKGZsLmNhbGwoZSxuKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBXcyhlLHQpe3JldHVybiBrcihlLHQpfWZ1bmN0aW9uIFFzKGUsdCxuKXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246bmU7dmFyIHI9bj9uKGUsdCk6bmU7cmV0dXJuIHI9PT1uZT9rcihlLHQsbmUsbik6ISFyfWZ1bmN0aW9uIEtzKGUpe2lmKCF0dShlKSlyZXR1cm4hMTt2YXIgdD1tcihlKTtyZXR1cm4gdD09VmV8fHQ9PUdlfHwic3RyaW5nIj09dHlwZW9mIGUubWVzc2FnZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJiFjdShlKX1mdW5jdGlvbiBKcyhlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJlJsKGUpfWZ1bmN0aW9uIFlzKGUpe2lmKCFldShlKSlyZXR1cm4hMTt2YXIgdD1tcihlKTtyZXR1cm4gdD09cWV8fHQ9PUhlfHx0PT0kZXx8dD09WWV9ZnVuY3Rpb24gWHMoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPT12dShlKX1mdW5jdGlvbiBacyhlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9RmV9ZnVuY3Rpb24gZXUoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9ZnVuY3Rpb24gdHUoZSl7cmV0dXJuIG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBudShlLHQpe3JldHVybiBlPT09dHx8VHIoZSx0LGJvKHQpKX1mdW5jdGlvbiBydShlLHQsbil7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpuZSxUcihlLHQsYm8odCksbil9ZnVuY3Rpb24gaXUoZSl7cmV0dXJuIHV1KGUpJiZlIT0rZX1mdW5jdGlvbiBvdShlKXtpZihEcChlKSl0aHJvdyBuZXcgZWwoaWUpO3JldHVybiBPcihlKX1mdW5jdGlvbiBhdShlKXtyZXR1cm4gbnVsbD09PWV9ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gdXUoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfHx0dShlKSYmbXIoZSk9PVFlfWZ1bmN0aW9uIGN1KGUpe2lmKCF0dShlKXx8bXIoZSkhPUplKXJldHVybiExO3ZhciB0PURsKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBuPWZsLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJnBsLmNhbGwobik9PWdsfWZ1bmN0aW9uIGx1KGUpe3JldHVybiBYcyhlKSYmZT49LUZlJiZlPD1GZX1mdW5jdGlvbiBwdShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fCFkZihlKSYmdHUoZSkmJm1yKGUpPT1ldH1mdW5jdGlvbiBmdShlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGV8fHR1KGUpJiZtcihlKT09dHR9ZnVuY3Rpb24gZHUoZSl7cmV0dXJuIGU9PT1uZX1mdW5jdGlvbiBodShlKXtyZXR1cm4gdHUoZSkmJkVwKGUpPT1ydH1mdW5jdGlvbiBtdShlKXtyZXR1cm4gdHUoZSkmJm1yKGUpPT1pdH1mdW5jdGlvbiBndShlKXtpZighZSlyZXR1cm5bXTtpZih6cyhlKSlyZXR1cm4gcHUoZSk/WChlKTpOaShlKTtpZihfbCYmZVtfbF0pcmV0dXJuIEcoZVtfbF0oKSk7dmFyIHQ9RXAoZSk7cmV0dXJuKHQ9PVdlP1Y6dD09WmU/VzpLdSkoZSl9ZnVuY3Rpb24geXUoZSl7aWYoIWUpcmV0dXJuIDA9PT1lP2U6MDtpZigoZT14dShlKSk9PT1PZXx8ZT09PS1PZSl7cmV0dXJuKGU8MD8tMToxKSpOZX1yZXR1cm4gZT09PWU/ZTowfWZ1bmN0aW9uIHZ1KGUpe3ZhciB0PXl1KGUpLG49dCUxO3JldHVybiB0PT09dD9uP3Qtbjp0OjB9ZnVuY3Rpb24gYnUoZSl7cmV0dXJuIGU/Wm4odnUoZSksMCxMZSk6MH1mdW5jdGlvbiB4dShlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnUoZSkpcmV0dXJuIEllO2lmKGV1KGUpKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1ldSh0KT90KyIiOnR9aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKEZ0LCIiKTt2YXIgbj16dC50ZXN0KGUpO3JldHVybiBufHxWdC50ZXN0KGUpP0FuKGUuc2xpY2UoMiksbj8yOjgpOlV0LnRlc3QoZSk/SWU6K2V9ZnVuY3Rpb24gQ3UoZSl7cmV0dXJuIElpKGUsanUoZSkpfWZ1bmN0aW9uIEV1KGUpe3JldHVybiBlP1puKHZ1KGUpLC1GZSxGZSk6MD09PWU/ZTowfWZ1bmN0aW9uIER1KGUpe3JldHVybiBudWxsPT1lPyIiOmxpKGUpfWZ1bmN0aW9uIHd1KGUsdCl7dmFyIG49Y3AoZSk7cmV0dXJuIG51bGw9PXQ/bjpLbihuLHQpfWZ1bmN0aW9uIFN1KGUsdCl7cmV0dXJuIHgoZSx5byh0LDMpLGxyKX1mdW5jdGlvbiBrdShlLHQpe3JldHVybiB4KGUseW8odCwzKSxwcil9ZnVuY3Rpb24gQXUoZSx0KXtyZXR1cm4gbnVsbD09ZT9lOmZwKGUseW8odCwzKSxqdSl9ZnVuY3Rpb24gX3UoZSx0KXtyZXR1cm4gbnVsbD09ZT9lOmRwKGUseW8odCwzKSxqdSl9ZnVuY3Rpb24gVHUoZSx0KXtyZXR1cm4gZSYmbHIoZSx5byh0LDMpKX1mdW5jdGlvbiBPdShlLHQpe3JldHVybiBlJiZwcihlLHlvKHQsMykpfWZ1bmN0aW9uIEZ1KGUpe3JldHVybiBudWxsPT1lP1tdOmZyKGUsTXUoZSkpfWZ1bmN0aW9uIE51KGUpe3JldHVybiBudWxsPT1lP1tdOmZyKGUsanUoZSkpfWZ1bmN0aW9uIEl1KGUsdCxuKXt2YXIgcj1udWxsPT1lP25lOmRyKGUsdCk7cmV0dXJuIHI9PT1uZT9uOnJ9ZnVuY3Rpb24gTHUoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmd28oZSx0LHlyKX1mdW5jdGlvbiBQdShlLHQpe3JldHVybiBudWxsIT1lJiZ3byhlLHQsdnIpfWZ1bmN0aW9uIE11KGUpe3JldHVybiB6cyhlKT9UbihlKTpQcihlKX1mdW5jdGlvbiBqdShlKXtyZXR1cm4genMoZSk/VG4oZSwhMCk6TXIoZSl9ZnVuY3Rpb24gUnUoZSx0KXt2YXIgbj17fTtyZXR1cm4gdD15byh0LDMpLGxyKGUsZnVuY3Rpb24oZSxyLGkpe1luKG4sdChlLHIsaSksZSl9KSxufWZ1bmN0aW9uIEJ1KGUsdCl7dmFyIG49e307cmV0dXJuIHQ9eW8odCwzKSxscihlLGZ1bmN0aW9uKGUscixpKXtZbihuLHIsdChlLHIsaSkpfSksbn1mdW5jdGlvbiAkdShlLHQpe3JldHVybiBVdShlLF9zKHlvKHQpKSl9ZnVuY3Rpb24gVXUoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuPWQoaG8oZSksZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSk7cmV0dXJuIHQ9eW8odCksSHIoZSxuLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuWzBdKX0pfWZ1bmN0aW9uIHp1KGUsdCxuKXt0PXhpKHQsZSk7dmFyIHI9LTEsaT10Lmxlbmd0aDtmb3IoaXx8KGk9MSxlPW5lKTsrK3I8aTspe3ZhciBvPW51bGw9PWU/bmU6ZVtLbyh0W3JdKV07bz09PW5lJiYocj1pLG89biksZT1ZcyhvKT9vLmNhbGwoZSk6b31yZXR1cm4gZX1mdW5jdGlvbiBHdShlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpuaShlLHQsbil9ZnVuY3Rpb24gVnUoZSx0LG4scil7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpuZSxudWxsPT1lP2U6bmkoZSx0LG4scil9ZnVuY3Rpb24gcXUoZSx0LG4pe3ZhciByPWRmKGUpLGk9cnx8bWYoZSl8fHhmKGUpO2lmKHQ9eW8odCw0KSxudWxsPT1uKXt2YXIgbz1lJiZlLmNvbnN0cnVjdG9yO249aT9yP25ldyBvOltdOmV1KGUpJiZZcyhvKT9jcChEbChlKSk6e319cmV0dXJuKGk/czpscikoZSxmdW5jdGlvbihlLHIsaSl7cmV0dXJuIHQobixlLHIsaSl9KSxufWZ1bmN0aW9uIEh1KGUsdCl7cmV0dXJuIG51bGw9PWV8fGZpKGUsdCl9ZnVuY3Rpb24gV3UoZSx0LG4pe3JldHVybiBudWxsPT1lP2U6ZGkoZSx0LGJpKG4pKX1mdW5jdGlvbiBRdShlLHQsbixyKXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOm5lLG51bGw9PWU/ZTpkaShlLHQsYmkobikscil9ZnVuY3Rpb24gS3UoZSl7cmV0dXJuIG51bGw9PWU/W106TChlLE11KGUpKX1mdW5jdGlvbiBKdShlKXtyZXR1cm4gbnVsbD09ZT9bXTpMKGUsanUoZSkpfWZ1bmN0aW9uIFl1KGUsdCxuKXtyZXR1cm4gbj09PW5lJiYobj10LHQ9bmUpLG4hPT1uZSYmKG49eHUobiksbj1uPT09bj9uOjApLHQhPT1uZSYmKHQ9eHUodCksdD10PT09dD90OjApLFpuKHh1KGUpLHQsbil9ZnVuY3Rpb24gWHUoZSx0LG4pe3JldHVybiB0PXl1KHQpLG49PT1uZT8obj10LHQ9MCk6bj15dShuKSxlPXh1KGUpLGJyKGUsdCxuKX1mdW5jdGlvbiBadShlLHQsbil7aWYobiYmImJvb2xlYW4iIT10eXBlb2YgbiYmRm8oZSx0LG4pJiYodD1uPW5lKSxuPT09bmUmJigiYm9vbGVhbiI9PXR5cGVvZiB0PyhuPXQsdD1uZSk6ImJvb2xlYW4iPT10eXBlb2YgZSYmKG49ZSxlPW5lKSksZT09PW5lJiZ0PT09bmU/KGU9MCx0PTEpOihlPXl1KGUpLHQ9PT1uZT8odD1lLGU9MCk6dD15dSh0KSksZT50KXt2YXIgcj1lO2U9dCx0PXJ9aWYobnx8ZSUxfHx0JTEpe3ZhciBpPXFsKCk7cmV0dXJuIHpsKGUraSoodC1lK2tuKCIxZS0iKygoaSsiIikubGVuZ3RoLTEpKSksdCl9cmV0dXJuIEpyKGUsdCl9ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIEhmKER1KGUpLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHRjKGUpe3JldHVybihlPUR1KGUpKSYmZS5yZXBsYWNlKEh0LEduKS5yZXBsYWNlKGRuLCIiKX1mdW5jdGlvbiBuYyhlLHQsbil7ZT1EdShlKSx0PWxpKHQpO3ZhciByPWUubGVuZ3RoO249bj09PW5lP3I6Wm4odnUobiksMCxyKTt2YXIgaT1uO3JldHVybihuLT10Lmxlbmd0aCk+PTAmJmUuc2xpY2UobixpKT09dH1mdW5jdGlvbiByYyhlKXtyZXR1cm4gZT1EdShlKSxlJiZFdC50ZXN0KGUpP2UucmVwbGFjZSh4dCxWbik6ZX1mdW5jdGlvbiBpYyhlKXtyZXR1cm4gZT1EdShlKSxlJiZPdC50ZXN0KGUpP2UucmVwbGFjZShUdCwiXFwkJiIpOmV9ZnVuY3Rpb24gb2MoZSx0LG4pe2U9RHUoZSksdD12dSh0KTt2YXIgcj10P1koZSk6MDtpZighdHx8cj49dClyZXR1cm4gZTt2YXIgaT0odC1yKS8yO3JldHVybiBZaShQbChpKSxuKStlK1lpKExsKGkpLG4pfWZ1bmN0aW9uIGFjKGUsdCxuKXtlPUR1KGUpLHQ9dnUodCk7dmFyIHI9dD9ZKGUpOjA7cmV0dXJuIHQmJnI8dD9lK1lpKHQtcixuKTplfWZ1bmN0aW9uIHNjKGUsdCxuKXtlPUR1KGUpLHQ9dnUodCk7dmFyIHI9dD9ZKGUpOjA7cmV0dXJuIHQmJnI8dD9ZaSh0LXIsbikrZTplfWZ1bmN0aW9uIHVjKGUsdCxuKXtyZXR1cm4gbnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLFZsKER1KGUpLnJlcGxhY2UoTnQsIiIpLHR8fDApfWZ1bmN0aW9uIGNjKGUsdCxuKXtyZXR1cm4gdD0obj9GbyhlLHQsbik6dD09PW5lKT8xOnZ1KHQpLFhyKER1KGUpLHQpfWZ1bmN0aW9uIGxjKCl7dmFyIGU9YXJndW1lbnRzLHQ9RHUoZVswXSk7cmV0dXJuIGUubGVuZ3RoPDM/dDp0LnJlcGxhY2UoZVsxXSxlWzJdKX1mdW5jdGlvbiBwYyhlLHQsbil7cmV0dXJuIG4mJiJudW1iZXIiIT10eXBlb2YgbiYmRm8oZSx0LG4pJiYodD1uPW5lKSwobj1uPT09bmU/TGU6bj4+PjApPyhlPUR1KGUpLGUmJigic3RyaW5nIj09dHlwZW9mIHR8fG51bGwhPXQmJiF2Zih0KSkmJiEodD1saSh0KSkmJlUoZSk/Q2koWChlKSwwLG4pOmUuc3BsaXQodCxuKSk6W119ZnVuY3Rpb24gZmMoZSx0LG4pe3JldHVybiBlPUR1KGUpLG49bnVsbD09bj8wOlpuKHZ1KG4pLDAsZS5sZW5ndGgpLHQ9bGkodCksZS5zbGljZShuLG4rdC5sZW5ndGgpPT10fWZ1bmN0aW9uIGRjKGUsdCxyKXt2YXIgaT1uLnRlbXBsYXRlU2V0dGluZ3M7ciYmRm8oZSx0LHIpJiYodD1uZSksZT1EdShlKSx0PVNmKHt9LHQsaSxvbyk7dmFyIG8sYSxzPVNmKHt9LHQuaW1wb3J0cyxpLmltcG9ydHMsb28pLHU9TXUocyksYz1MKHMsdSksbD0wLHA9dC5pbnRlcnBvbGF0ZXx8V3QsZj0iX19wICs9ICciLGQ9aWwoKHQuZXNjYXBlfHxXdCkuc291cmNlKyJ8IitwLnNvdXJjZSsifCIrKHA9PT1TdD9CdDpXdCkuc291cmNlKyJ8IisodC5ldmFsdWF0ZXx8V3QpLnNvdXJjZSsifCQiLCJnIiksaD0iLy8jIHNvdXJjZVVSTD0iKygic291cmNlVVJMImluIHQ/dC5zb3VyY2VVUkw6ImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbIisgKytibisiXSIpKyJcbiI7ZS5yZXBsYWNlKGQsZnVuY3Rpb24odCxuLHIsaSxzLHUpe3JldHVybiByfHwocj1pKSxmKz1lLnNsaWNlKGwsdSkucmVwbGFjZShRdCxCKSxuJiYobz0hMCxmKz0iJyArXG5fX2UoIituKyIpICtcbiciKSxzJiYoYT0hMCxmKz0iJztcbiIrcysiO1xuX19wICs9ICciKSxyJiYoZis9IicgK1xuKChfX3QgPSAoIityKyIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcbiciKSxsPXUrdC5sZW5ndGgsdH0pLGYrPSInO1xuIjt2YXIgbT10LnZhcmlhYmxlO218fChmPSJ3aXRoIChvYmopIHtcbiIrZisiXG59XG4iKSxmPShhP2YucmVwbGFjZShndCwiIik6ZikucmVwbGFjZSh5dCwiJDEiKS5yZXBsYWNlKHZ0LCIkMTsiKSxmPSJmdW5jdGlvbigiKyhtfHwib2JqIikrIikge1xuIisobT8iIjoib2JqIHx8IChvYmogPSB7fSk7XG4iKSsidmFyIF9fdCwgX19wID0gJyciKyhvPyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGE/IiwgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XG5mdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cbiI6IjtcbiIpK2YrInJldHVybiBfX3Bcbn0iO3ZhciBnPVdmKGZ1bmN0aW9uKCl7cmV0dXJuIHRsKHUsaCsicmV0dXJuICIrZikuYXBwbHkobmUsYyl9KTtpZihnLnNvdXJjZT1mLEtzKGcpKXRocm93IGc7cmV0dXJuIGd9ZnVuY3Rpb24gaGMoZSl7cmV0dXJuIER1KGUpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbWMoZSl7cmV0dXJuIER1KGUpLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gZ2MoZSx0LG4pe2lmKChlPUR1KGUpKSYmKG58fHQ9PT1uZSkpcmV0dXJuIGUucmVwbGFjZShGdCwiIik7aWYoIWV8fCEodD1saSh0KSkpcmV0dXJuIGU7dmFyIHI9WChlKSxpPVgodCk7cmV0dXJuIENpKHIsTShyLGkpLGoocixpKSsxKS5qb2luKCIiKX1mdW5jdGlvbiB5YyhlLHQsbil7aWYoKGU9RHUoZSkpJiYobnx8dD09PW5lKSlyZXR1cm4gZS5yZXBsYWNlKEl0LCIiKTtpZighZXx8ISh0PWxpKHQpKSlyZXR1cm4gZTt2YXIgcj1YKGUpO3JldHVybiBDaShyLDAsaihyLFgodCkpKzEpLmpvaW4oIiIpfWZ1bmN0aW9uIHZjKGUsdCxuKXtpZigoZT1EdShlKSkmJihufHx0PT09bmUpKXJldHVybiBlLnJlcGxhY2UoTnQsIiIpO2lmKCFlfHwhKHQ9bGkodCkpKXJldHVybiBlO3ZhciByPVgoZSk7cmV0dXJuIENpKHIsTShyLFgodCkpKS5qb2luKCIiKX1mdW5jdGlvbiBiYyhlLHQpe3ZhciBuPXdlLHI9U2U7aWYoZXUodCkpe3ZhciBpPSJzZXBhcmF0b3IiaW4gdD90LnNlcGFyYXRvcjppO249Imxlbmd0aCJpbiB0P3Z1KHQubGVuZ3RoKTpuLHI9Im9taXNzaW9uImluIHQ/bGkodC5vbWlzc2lvbik6cn1lPUR1KGUpO3ZhciBvPWUubGVuZ3RoO2lmKFUoZSkpe3ZhciBhPVgoZSk7bz1hLmxlbmd0aH1pZihuPj1vKXJldHVybiBlO3ZhciBzPW4tWShyKTtpZihzPDEpcmV0dXJuIHI7dmFyIHU9YT9DaShhLDAscykuam9pbigiIik6ZS5zbGljZSgwLHMpO2lmKGk9PT1uZSlyZXR1cm4gdStyO2lmKGEmJihzKz11Lmxlbmd0aC1zKSx2ZihpKSl7aWYoZS5zbGljZShzKS5zZWFyY2goaSkpe3ZhciBjLGw9dTtmb3IoaS5nbG9iYWx8fChpPWlsKGkuc291cmNlLER1KCR0LmV4ZWMoaSkpKyJnIikpLGkubGFzdEluZGV4PTA7Yz1pLmV4ZWMobCk7KXZhciBwPWMuaW5kZXg7dT11LnNsaWNlKDAscD09PW5lP3M6cCl9fWVsc2UgaWYoZS5pbmRleE9mKGxpKGkpLHMpIT1zKXt2YXIgZj11Lmxhc3RJbmRleE9mKGkpO2Y+LTEmJih1PXUuc2xpY2UoMCxmKSl9cmV0dXJuIHUrcn1mdW5jdGlvbiB4YyhlKXtyZXR1cm4gZT1EdShlKSxlJiZDdC50ZXN0KGUpP2UucmVwbGFjZShidCxxbik6ZX1mdW5jdGlvbiBDYyhlLHQsbil7cmV0dXJuIGU9RHUoZSksdD1uP25lOnQsdD09PW5lP3ooZSk/dGUoZSk6YihlKTplLm1hdGNoKHQpfHxbXX1mdW5jdGlvbiBFYyhlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGgsbj15bygpO3JldHVybiBlPXQ/ZChlLGZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlWzFdKXRocm93IG5ldyBhbChvZSk7cmV0dXJuW24oZVswXSksZVsxXV19KTpbXSxacihmdW5jdGlvbihuKXtmb3IodmFyIHI9LTE7KytyPHQ7KXt2YXIgaT1lW3JdO2lmKG8oaVswXSx0aGlzLG4pKXJldHVybiBvKGlbMV0sdGhpcyxuKX19KX1mdW5jdGlvbiBEYyhlKXtyZXR1cm4gdHIoZXIoZSxjZSkpfWZ1bmN0aW9uIHdjKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBTYyhlLHQpe3JldHVybiBudWxsPT1lfHxlIT09ZT90OmV9ZnVuY3Rpb24ga2MoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gQWMoZSl7cmV0dXJuIExyKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZXIoZSxjZSkpfWZ1bmN0aW9uIF9jKGUpe3JldHVybiBCcihlcihlLGNlKSl9ZnVuY3Rpb24gVGMoZSx0KXtyZXR1cm4gJHIoZSxlcih0LGNlKSl9ZnVuY3Rpb24gT2MoZSx0LG4pe3ZhciByPU11KHQpLGk9ZnIodCxyKTtudWxsIT1ufHxldSh0KSYmKGkubGVuZ3RofHwhci5sZW5ndGgpfHwobj10LHQ9ZSxlPXRoaXMsaT1mcih0LE11KHQpKSk7dmFyIG89IShldShuKSYmImNoYWluImluIG4pfHwhIW4uY2hhaW4sYT1ZcyhlKTtyZXR1cm4gcyhpLGZ1bmN0aW9uKG4pe3ZhciByPXRbbl07ZVtuXT1yLGEmJihlLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX19jaGFpbl9fO2lmKG98fHQpe3ZhciBuPWUodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuKG4uX19hY3Rpb25zX189TmkodGhpcy5fX2FjdGlvbnNfXykpLnB1c2goe2Z1bmM6cixhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOmV9KSxuLl9fY2hhaW5fXz10LG59cmV0dXJuIHIuYXBwbHkoZSxoKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxlfWZ1bmN0aW9uIEZjKCl7cmV0dXJuIE9uLl89PT10aGlzJiYoT24uXz15bCksdGhpc31mdW5jdGlvbiBOYygpe31mdW5jdGlvbiBJYyhlKXtyZXR1cm4gZT12dShlKSxacihmdW5jdGlvbih0KXtyZXR1cm4gR3IodCxlKX0pfWZ1bmN0aW9uIExjKGUpe3JldHVybiBObyhlKT9rKEtvKGUpKTpXcihlKX1mdW5jdGlvbiBQYyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bmU6ZHIoZSx0KX19ZnVuY3Rpb24gTWMoKXtyZXR1cm5bXX1mdW5jdGlvbiBqYygpe3JldHVybiExfWZ1bmN0aW9uIFJjKCl7cmV0dXJue319ZnVuY3Rpb24gQmMoKXtyZXR1cm4iIn1mdW5jdGlvbiAkYygpe3JldHVybiEwfWZ1bmN0aW9uIFVjKGUsdCl7aWYoKGU9dnUoZSkpPDF8fGU+RmUpcmV0dXJuW107dmFyIG49TGUscj16bChlLExlKTt0PXlvKHQpLGUtPUxlO2Zvcih2YXIgaT1GKHIsdCk7KytuPGU7KXQobik7cmV0dXJuIGl9ZnVuY3Rpb24gemMoZSl7cmV0dXJuIGRmKGUpP2QoZSxLbyk6ZnUoZSk/W2VdOk5pKEFwKER1KGUpKSl9ZnVuY3Rpb24gR2MoZSl7dmFyIHQ9KytkbDtyZXR1cm4gRHUoZSkrdH1mdW5jdGlvbiBWYyhlKXtyZXR1cm4gZSYmZS5sZW5ndGg/YXIoZSxrYyxncik6bmV9ZnVuY3Rpb24gcWMoZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/YXIoZSx5byh0LDIpLGdyKTpuZX1mdW5jdGlvbiBIYyhlKXtyZXR1cm4gUyhlLGtjKX1mdW5jdGlvbiBXYyhlLHQpe3JldHVybiBTKGUseW8odCwyKSl9ZnVuY3Rpb24gUWMoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2FyKGUsa2MsanIpOm5lfWZ1bmN0aW9uIEtjKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2FyKGUseW8odCwyKSxqcik6bmV9ZnVuY3Rpb24gSmMoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP08oZSxrYyk6MH1mdW5jdGlvbiBZYyhlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9PKGUseW8odCwyKSk6MH10PW51bGw9PXQ/T246SG4uZGVmYXVsdHMoT24uT2JqZWN0KCksdCxIbi5waWNrKE9uLHZuKSk7dmFyIFhjPXQuQXJyYXksWmM9dC5EYXRlLGVsPXQuRXJyb3IsdGw9dC5GdW5jdGlvbixubD10Lk1hdGgscmw9dC5PYmplY3QsaWw9dC5SZWdFeHAsb2w9dC5TdHJpbmcsYWw9dC5UeXBlRXJyb3Isc2w9WGMucHJvdG90eXBlLHVsPXRsLnByb3RvdHlwZSxjbD1ybC5wcm90b3R5cGUsbGw9dFsiX19jb3JlLWpzX3NoYXJlZF9fIl0scGw9dWwudG9TdHJpbmcsZmw9Y2wuaGFzT3duUHJvcGVydHksZGw9MCxobD1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMobGwmJmxsLmtleXMmJmxsLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCksbWw9Y2wudG9TdHJpbmcsZ2w9cGwuY2FsbChybCkseWw9T24uXyx2bD1pbCgiXiIrcGwuY2FsbChmbCkucmVwbGFjZShUdCwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxibD1Jbj90LkJ1ZmZlcjpuZSx4bD10LlN5bWJvbCxDbD10LlVpbnQ4QXJyYXksRWw9Ymw/YmwuYWxsb2NVbnNhZmU6bmUsRGw9cShybC5nZXRQcm90b3R5cGVPZixybCksd2w9cmwuY3JlYXRlLFNsPWNsLnByb3BlcnR5SXNFbnVtZXJhYmxlLGtsPXNsLnNwbGljZSxBbD14bD94bC5pc0NvbmNhdFNwcmVhZGFibGU6bmUsX2w9eGw/eGwuaXRlcmF0b3I6bmUsVGw9eGw/eGwudG9TdHJpbmdUYWc6bmUsT2w9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9eG8ocmwsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2goZSl7fX0oKSxGbD10LmNsZWFyVGltZW91dCE9PU9uLmNsZWFyVGltZW91dCYmdC5jbGVhclRpbWVvdXQsTmw9WmMmJlpjLm5vdyE9PU9uLkRhdGUubm93JiZaYy5ub3csSWw9dC5zZXRUaW1lb3V0IT09T24uc2V0VGltZW91dCYmdC5zZXRUaW1lb3V0LExsPW5sLmNlaWwsUGw9bmwuZmxvb3IsTWw9cmwuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGpsPWJsP2JsLmlzQnVmZmVyOm5lLFJsPXQuaXNGaW5pdGUsQmw9c2wuam9pbiwkbD1xKHJsLmtleXMscmwpLFVsPW5sLm1heCx6bD1ubC5taW4sR2w9WmMubm93LFZsPXQucGFyc2VJbnQscWw9bmwucmFuZG9tLEhsPXNsLnJldmVyc2UsV2w9eG8odCwiRGF0YVZpZXciKSxRbD14byh0LCJNYXAiKSxLbD14byh0LCJQcm9taXNlIiksSmw9eG8odCwiU2V0IiksWWw9eG8odCwiV2Vha01hcCIpLFhsPXhvKHJsLCJjcmVhdGUiKSxabD1ZbCYmbmV3IFlsLGVwPXt9LHRwPUpvKFdsKSxucD1KbyhRbCkscnA9Sm8oS2wpLGlwPUpvKEpsKSxvcD1KbyhZbCksYXA9eGw/eGwucHJvdG90eXBlOm5lLHNwPWFwP2FwLnZhbHVlT2Y6bmUsdXA9YXA/YXAudG9TdHJpbmc6bmUsY3A9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighZXUodCkpcmV0dXJue307aWYod2wpcmV0dXJuIHdsKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPW5lLG59fSgpO24udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOkR0LGV2YWx1YXRlOnd0LGludGVycG9sYXRlOlN0LHZhcmlhYmxlOiIiLGltcG9ydHM6e186bn19LG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4saS5wcm90b3R5cGU9Y3Aoci5wcm90b3R5cGUpLGkucHJvdG90eXBlLmNvbnN0cnVjdG9yPWksdi5wcm90b3R5cGU9Y3Aoci5wcm90b3R5cGUpLHYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXYsZWUucHJvdG90eXBlLmNsZWFyPWp0LGVlLnByb3RvdHlwZS5kZWxldGU9S3QsZWUucHJvdG90eXBlLmdldD1KdCxlZS5wcm90b3R5cGUuaGFzPVl0LGVlLnByb3RvdHlwZS5zZXQ9WHQsWnQucHJvdG90eXBlLmNsZWFyPWVuLFp0LnByb3RvdHlwZS5kZWxldGU9dG4sWnQucHJvdG90eXBlLmdldD1ubixadC5wcm90b3R5cGUuaGFzPXJuLFp0LnByb3RvdHlwZS5zZXQ9b24sYW4ucHJvdG90eXBlLmNsZWFyPXNuLGFuLnByb3RvdHlwZS5kZWxldGU9dW4sYW4ucHJvdG90eXBlLmdldD1jbixhbi5wcm90b3R5cGUuaGFzPWxuLGFuLnByb3RvdHlwZS5zZXQ9cG4saG4ucHJvdG90eXBlLmFkZD1obi5wcm90b3R5cGUucHVzaD1tbixobi5wcm90b3R5cGUuaGFzPWduLHluLnByb3RvdHlwZS5jbGVhcj1Fbix5bi5wcm90b3R5cGUuZGVsZXRlPURuLHluLnByb3RvdHlwZS5nZXQ9d24seW4ucHJvdG90eXBlLmhhcz1Tbix5bi5wcm90b3R5cGUuc2V0PV9uO3ZhciBscD1SaShscikscHA9UmkocHIsITApLGZwPUJpKCksZHA9QmkoITApLGhwPVpsP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIFpsLnNldChlLHQpLGV9OmtjLG1wPU9sP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIE9sKGUsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6d2ModCksd3JpdGFibGU6ITB9KX06a2MsZ3A9WnIseXA9Rmx8fGZ1bmN0aW9uKGUpe3JldHVybiBPbi5jbGVhclRpbWVvdXQoZSl9LHZwPUpsJiYxL1cobmV3IEpsKFssLTBdKSlbMV09PU9lP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgSmwoZSl9Ok5jLGJwPVpsP2Z1bmN0aW9uKGUpe3JldHVybiBabC5nZXQoZSl9Ok5jLHhwPU1sP2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPXJsKGUpLGwoTWwoZSksZnVuY3Rpb24odCl7cmV0dXJuIFNsLmNhbGwoZSx0KX0pKX06TWMsQ3A9TWw/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KWgodCx4cChlKSksZT1EbChlKTtyZXR1cm4gdH06TWMsRXA9bXI7KFdsJiZFcChuZXcgV2wobmV3IEFycmF5QnVmZmVyKDEpKSkhPWF0fHxRbCYmRXAobmV3IFFsKSE9V2V8fEtsJiYiW29iamVjdCBQcm9taXNlXSIhPUVwKEtsLnJlc29sdmUoKSl8fEpsJiZFcChuZXcgSmwpIT1aZXx8WWwmJkVwKG5ldyBZbCkhPXJ0KSYmKEVwPWZ1bmN0aW9uKGUpe3ZhciB0PW1yKGUpLG49dD09SmU/ZS5jb25zdHJ1Y3RvcjpuZSxyPW4/Sm8obik6IiI7aWYocilzd2l0Y2gocil7Y2FzZSB0cDpyZXR1cm4gYXQ7Y2FzZSBucDpyZXR1cm4gV2U7Y2FzZSBycDpyZXR1cm4iW29iamVjdCBQcm9taXNlXSI7Y2FzZSBpcDpyZXR1cm4gWmU7Y2FzZSBvcDpyZXR1cm4gcnR9cmV0dXJuIHR9KTt2YXIgRHA9bGw/WXM6amMsd3A9V28oaHApLFNwPUlsfHxmdW5jdGlvbihlLHQpe3JldHVybiBPbi5zZXRUaW1lb3V0KGUsdCl9LGtwPVdvKG1wKSxBcD1mdW5jdGlvbihlKXt2YXIgdD1BcyhlLGZ1bmN0aW9uKGUpe3JldHVybiBuLnNpemU9PT1zZSYmbi5jbGVhcigpLGV9KSxuPXQuY2FjaGU7cmV0dXJuIHR9KGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoX3QsZnVuY3Rpb24oZSxuLHIsaSl7dC5wdXNoKHI/aS5yZXBsYWNlKFJ0LCIkMSIpOm58fGUpfSksdH0pLF9wPVpyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEdzKGUpP2lyKGUsY3IodCwxLEdzLCEwKSk6W119KSxUcD1acihmdW5jdGlvbihlLHQpe3ZhciBuPXlhKHQpO3JldHVybiBHcyhuKSYmKG49bmUpLEdzKGUpP2lyKGUsY3IodCwxLEdzLCEwKSx5byhuLDIpKTpbXX0pLE9wPVpyKGZ1bmN0aW9uKGUsdCl7dmFyIG49eWEodCk7cmV0dXJuIEdzKG4pJiYobj1uZSksR3MoZSk/aXIoZSxjcih0LDEsR3MsITApLG5lLG4pOltdfSksRnA9WnIoZnVuY3Rpb24oZSl7dmFyIHQ9ZChlLHZpKTtyZXR1cm4gdC5sZW5ndGgmJnRbMF09PT1lWzBdP3hyKHQpOltdfSksTnA9WnIoZnVuY3Rpb24oZSl7dmFyIHQ9eWEoZSksbj1kKGUsdmkpO3JldHVybiB0PT09eWEobik/dD1uZTpuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT94cihuLHlvKHQsMikpOltdfSksSXA9WnIoZnVuY3Rpb24oZSl7dmFyIHQ9eWEoZSksbj1kKGUsdmkpO3JldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmUsdCYmbi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/eHIobixuZSx0KTpbXX0pLExwPVpyKHhhKSxQcD1wbyhmdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aCxyPVhuKGUsdCk7cmV0dXJuIEtyKGUsZCh0LGZ1bmN0aW9uKGUpe3JldHVybiBPbyhlLG4pPytlOmV9KS5zb3J0KF9pKSkscn0pLE1wPVpyKGZ1bmN0aW9uKGUpe3JldHVybiBwaShjcihlLDEsR3MsITApKX0pLGpwPVpyKGZ1bmN0aW9uKGUpe3ZhciB0PXlhKGUpO3JldHVybiBHcyh0KSYmKHQ9bmUpLHBpKGNyKGUsMSxHcywhMCkseW8odCwyKSl9KSxScD1acihmdW5jdGlvbihlKXt2YXIgdD15YShlKTtyZXR1cm4gdD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5lLHBpKGNyKGUsMSxHcywhMCksbmUsdCl9KSxCcD1acihmdW5jdGlvbihlLHQpe3JldHVybiBHcyhlKT9pcihlLHQpOltdfSksJHA9WnIoZnVuY3Rpb24oZSl7cmV0dXJuIGdpKGwoZSxHcykpfSksVXA9WnIoZnVuY3Rpb24oZSl7dmFyIHQ9eWEoZSk7cmV0dXJuIEdzKHQpJiYodD1uZSksZ2kobChlLEdzKSx5byh0LDIpKX0pLHpwPVpyKGZ1bmN0aW9uKGUpe3ZhciB0PXlhKGUpO3JldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmUsZ2kobChlLEdzKSxuZSx0KX0pLEdwPVpyKHphKSxWcD1acihmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ+MT9lW3QtMV06bmU7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIG4/KGUucG9wKCksbik6bmUsR2EoZSxuKX0pLHFwPXBvKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD9lWzBdOjAscj10aGlzLl9fd3JhcHBlZF9fLG89ZnVuY3Rpb24odCl7cmV0dXJuIFhuKHQsZSl9O3JldHVybiEodD4xfHx0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkmJnIgaW5zdGFuY2VvZiB2JiZPbyhuKT8ocj1yLnNsaWNlKG4sK24rKHQ/MTowKSksci5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOlFhLGFyZ3M6W29dLHRoaXNBcmc6bmV9KSxuZXcgaShyLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKGUpe3JldHVybiB0JiYhZS5sZW5ndGgmJmUucHVzaChuZSksZX0pKTp0aGlzLnRocnUobyl9KSxIcD1NaShmdW5jdGlvbihlLHQsbil7ZmwuY2FsbChlLG4pPysrZVtuXTpZbihlLG4sMSl9KSxXcD1xaShzYSksUXA9cWkodWEpLEtwPU1pKGZ1bmN0aW9uKGUsdCxuKXtmbC5jYWxsKGUsbik/ZVtuXS5wdXNoKHQpOlluKGUsbixbdF0pfSksSnA9WnIoZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQsYT16cyhlKT9YYyhlLmxlbmd0aCk6W107cmV0dXJuIGxwKGUsZnVuY3Rpb24oZSl7YVsrK3JdPWk/byh0LGUsbik6RXIoZSx0LG4pfSksYX0pLFlwPU1pKGZ1bmN0aW9uKGUsdCxuKXtZbihlLG4sdCl9KSxYcD1NaShmdW5jdGlvbihlLHQsbil7ZVtuPzA6MV0ucHVzaCh0KX0sZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSksWnA9WnIoZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybltdO3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjEmJkZvKGUsdFswXSx0WzFdKT90PVtdOm4+MiYmRm8odFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLFZyKGUsY3IodCwxKSxbXSl9KSxlZj1ObHx8ZnVuY3Rpb24oKXtyZXR1cm4gT24uRGF0ZS5ub3coKX0sdGY9WnIoZnVuY3Rpb24oZSx0LG4pe3ZhciByPWhlO2lmKG4ubGVuZ3RoKXt2YXIgaT1IKG4sZ28odGYpKTtyfD1iZX1yZXR1cm4gaW8oZSxyLHQsbixpKX0pLG5mPVpyKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1oZXxtZTtpZihuLmxlbmd0aCl7dmFyIGk9SChuLGdvKG5mKSk7cnw9YmV9cmV0dXJuIGlvKHQscixlLG4saSl9KSxyZj1acihmdW5jdGlvbihlLHQpe3JldHVybiBycihlLDEsdCl9KSxvZj1acihmdW5jdGlvbihlLHQsbil7cmV0dXJuIHJyKGUseHUodCl8fDAsbil9KTtBcy5DYWNoZT1hbjt2YXIgYWY9Z3AoZnVuY3Rpb24oZSx0KXt0PTE9PXQubGVuZ3RoJiZkZih0WzBdKT9kKHRbMF0sSSh5bygpKSk6ZChjcih0LDEpLEkoeW8oKSkpO3ZhciBuPXQubGVuZ3RoO3JldHVybiBacihmdW5jdGlvbihyKXtmb3IodmFyIGk9LTEsYT16bChyLmxlbmd0aCxuKTsrK2k8YTspcltpXT10W2ldLmNhbGwodGhpcyxyW2ldKTtyZXR1cm4gbyhlLHRoaXMscil9KX0pLHNmPVpyKGZ1bmN0aW9uKGUsdCl7dmFyIG49SCh0LGdvKHNmKSk7cmV0dXJuIGlvKGUsYmUsbmUsdCxuKX0pLHVmPVpyKGZ1bmN0aW9uKGUsdCl7dmFyIG49SCh0LGdvKHVmKSk7cmV0dXJuIGlvKGUseGUsbmUsdCxuKX0pLGNmPXBvKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlvKGUsRWUsbmUsbmUsbmUsdCl9KSxsZj1lbyhncikscGY9ZW8oZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT49dH0pLGZmPURyKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/RHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHR1KGUpJiZmbC5jYWxsKGUsImNhbGxlZSIpJiYhU2wuY2FsbChlLCJjYWxsZWUiKX0sZGY9WGMuaXNBcnJheSxoZj1Nbj9JKE1uKTp3cixtZj1qbHx8amMsZ2Y9am4/SShqbik6U3IseWY9Um4/SShSbik6X3IsdmY9Qm4/SShCbik6RnIsYmY9JG4/SSgkbik6TnIseGY9VW4/SShVbik6SXIsQ2Y9ZW8oanIpLEVmPWVvKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXR9KSxEZj1qaShmdW5jdGlvbihlLHQpe2lmKE1vKHQpfHx6cyh0KSlyZXR1cm4gdm9pZCBJaSh0LE11KHQpLGUpO2Zvcih2YXIgbiBpbiB0KWZsLmNhbGwodCxuKSYmem4oZSxuLHRbbl0pfSksd2Y9amkoZnVuY3Rpb24oZSx0KXtJaSh0LGp1KHQpLGUpfSksU2Y9amkoZnVuY3Rpb24oZSx0LG4scil7SWkodCxqdSh0KSxlLHIpfSksa2Y9amkoZnVuY3Rpb24oZSx0LG4scil7SWkodCxNdSh0KSxlLHIpfSksQWY9cG8oWG4pLF9mPVpyKGZ1bmN0aW9uKGUsdCl7ZT1ybChlKTt2YXIgbj0tMSxyPXQubGVuZ3RoLGk9cj4yP3RbMl06bmU7Zm9yKGkmJkZvKHRbMF0sdFsxXSxpKSYmKHI9MSk7KytuPHI7KWZvcih2YXIgbz10W25dLGE9anUobykscz0tMSx1PWEubGVuZ3RoOysrczx1Oyl7dmFyIGM9YVtzXSxsPWVbY107KGw9PT1uZXx8VXMobCxjbFtjXSkmJiFmbC5jYWxsKGUsYykpJiYoZVtjXT1vW2NdKX1yZXR1cm4gZX0pLFRmPVpyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2gobmUsYW8pLG8oTGYsbmUsZSl9KSxPZj1RaShmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PW1sLmNhbGwodCkpLGVbdF09bn0sd2Moa2MpKSxGZj1RaShmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PW1sLmNhbGwodCkpLGZsLmNhbGwoZSx0KT9lW3RdLnB1c2gobik6ZVt0XT1bbl19LHlvKSxOZj1acihFciksSWY9amkoZnVuY3Rpb24oZSx0LG4pe1VyKGUsdCxuKX0pLExmPWppKGZ1bmN0aW9uKGUsdCxuLHIpe1VyKGUsdCxuLHIpfSksUGY9cG8oZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtpZihudWxsPT1lKXJldHVybiBuO3ZhciByPSExO3Q9ZCh0LGZ1bmN0aW9uKHQpe3JldHVybiB0PXhpKHQsZSkscnx8KHI9dC5sZW5ndGg+MSksdH0pLElpKGUsaG8oZSksbiksciYmKG49ZXIobixjZXxsZXxwZSxzbykpO2Zvcih2YXIgaT10Lmxlbmd0aDtpLS07KWZpKG4sdFtpXSk7cmV0dXJuIG59KSxNZj1wbyhmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3t9OnFyKGUsdCl9KSxqZj1ybyhNdSksUmY9cm8oanUpLEJmPXppKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj9lYyh0KTp0KX0pLCRmPXppKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj8iLSI6IiIpK3QudG9Mb3dlckNhc2UoKX0pLFVmPXppKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj8iICI6IiIpK3QudG9Mb3dlckNhc2UoKX0pLHpmPVVpKCJ0b0xvd2VyQ2FzZSIpLEdmPXppKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj8iXyI6IiIpK3QudG9Mb3dlckNhc2UoKX0pLFZmPXppKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj8iICI6IiIpK0hmKHQpfSkscWY9emkoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuPyIgIjoiIikrdC50b1VwcGVyQ2FzZSgpfSksSGY9VWkoInRvVXBwZXJDYXNlIiksV2Y9WnIoZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIG8oZSxuZSx0KX1jYXRjaChlKXtyZXR1cm4gS3MoZSk/ZTpuZXcgZWwoZSl9fSksUWY9cG8oZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh0LGZ1bmN0aW9uKHQpe3Q9S28odCksWW4oZSx0LHRmKGVbdF0sZSkpfSksZX0pLEtmPUhpKCksSmY9SGkoITApLFlmPVpyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBFcihuLGUsdCl9fSksWGY9WnIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEVyKGUsbix0KX19KSxaZj1KaShkKSxlZD1KaShjKSx0ZD1KaSh5KSxuZD1aaSgpLHJkPVppKCEwKSxpZD1LaShmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9LDApLG9kPW5vKCJjZWlsIiksYWQ9S2koZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS90fSwxKSxzZD1ubygiZmxvb3IiKSx1ZD1LaShmdW5jdGlvbihlLHQpe3JldHVybiBlKnR9LDEpLGNkPW5vKCJyb3VuZCIpLGxkPUtpKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0sMCk7cmV0dXJuIG4uYWZ0ZXI9eHMsbi5hcnk9Q3Msbi5hc3NpZ249RGYsbi5hc3NpZ25Jbj13ZixuLmFzc2lnbkluV2l0aD1TZixuLmFzc2lnbldpdGg9a2Ysbi5hdD1BZixuLmJlZm9yZT1FcyxuLmJpbmQ9dGYsbi5iaW5kQWxsPVFmLG4uYmluZEtleT1uZixuLmNhc3RBcnJheT1QcyxuLmNoYWluPUhhLG4uY2h1bms9Wm8sbi5jb21wYWN0PWVhLG4uY29uY2F0PXRhLG4uY29uZD1FYyxuLmNvbmZvcm1zPURjLG4uY29uc3RhbnQ9d2Msbi5jb3VudEJ5PUhwLG4uY3JlYXRlPXd1LG4uY3Vycnk9RHMsbi5jdXJyeVJpZ2h0PXdzLG4uZGVib3VuY2U9U3Msbi5kZWZhdWx0cz1fZixuLmRlZmF1bHRzRGVlcD1UZixuLmRlZmVyPXJmLG4uZGVsYXk9b2Ysbi5kaWZmZXJlbmNlPV9wLG4uZGlmZmVyZW5jZUJ5PVRwLG4uZGlmZmVyZW5jZVdpdGg9T3Asbi5kcm9wPW5hLG4uZHJvcFJpZ2h0PXJhLG4uZHJvcFJpZ2h0V2hpbGU9aWEsbi5kcm9wV2hpbGU9b2Esbi5maWxsPWFhLG4uZmlsdGVyPXJzLG4uZmxhdE1hcD1pcyxuLmZsYXRNYXBEZWVwPW9zLG4uZmxhdE1hcERlcHRoPWFzLG4uZmxhdHRlbj1jYSxuLmZsYXR0ZW5EZWVwPWxhLG4uZmxhdHRlbkRlcHRoPXBhLG4uZmxpcD1rcyxuLmZsb3c9S2Ysbi5mbG93UmlnaHQ9SmYsbi5mcm9tUGFpcnM9ZmEsbi5mdW5jdGlvbnM9RnUsbi5mdW5jdGlvbnNJbj1OdSxuLmdyb3VwQnk9S3Asbi5pbml0aWFsPW1hLG4uaW50ZXJzZWN0aW9uPUZwLG4uaW50ZXJzZWN0aW9uQnk9TnAsbi5pbnRlcnNlY3Rpb25XaXRoPUlwLG4uaW52ZXJ0PU9mLG4uaW52ZXJ0Qnk9RmYsbi5pbnZva2VNYXA9SnAsbi5pdGVyYXRlZT1BYyxuLmtleUJ5PVlwLG4ua2V5cz1NdSxuLmtleXNJbj1qdSxuLm1hcD1scyxuLm1hcEtleXM9UnUsbi5tYXBWYWx1ZXM9QnUsbi5tYXRjaGVzPV9jLG4ubWF0Y2hlc1Byb3BlcnR5PVRjLG4ubWVtb2l6ZT1BcyxuLm1lcmdlPUlmLG4ubWVyZ2VXaXRoPUxmLG4ubWV0aG9kPVlmLG4ubWV0aG9kT2Y9WGYsbi5taXhpbj1PYyxuLm5lZ2F0ZT1fcyxuLm50aEFyZz1JYyxuLm9taXQ9UGYsbi5vbWl0Qnk9JHUsbi5vbmNlPVRzLG4ub3JkZXJCeT1wcyxuLm92ZXI9WmYsbi5vdmVyQXJncz1hZixuLm92ZXJFdmVyeT1lZCxuLm92ZXJTb21lPXRkLG4ucGFydGlhbD1zZixuLnBhcnRpYWxSaWdodD11ZixuLnBhcnRpdGlvbj1YcCxuLnBpY2s9TWYsbi5waWNrQnk9VXUsbi5wcm9wZXJ0eT1MYyxuLnByb3BlcnR5T2Y9UGMsbi5wdWxsPUxwLG4ucHVsbEFsbD14YSxuLnB1bGxBbGxCeT1DYSxuLnB1bGxBbGxXaXRoPUVhLG4ucHVsbEF0PVBwLG4ucmFuZ2U9bmQsbi5yYW5nZVJpZ2h0PXJkLG4ucmVhcmc9Y2Ysbi5yZWplY3Q9aHMsbi5yZW1vdmU9RGEsbi5yZXN0PU9zLG4ucmV2ZXJzZT13YSxuLnNhbXBsZVNpemU9Z3Msbi5zZXQ9R3Usbi5zZXRXaXRoPVZ1LG4uc2h1ZmZsZT15cyxuLnNsaWNlPVNhLG4uc29ydEJ5PVpwLG4uc29ydGVkVW5pcT1OYSxuLnNvcnRlZFVuaXFCeT1JYSxuLnNwbGl0PXBjLG4uc3ByZWFkPUZzLG4udGFpbD1MYSxuLnRha2U9UGEsbi50YWtlUmlnaHQ9TWEsbi50YWtlUmlnaHRXaGlsZT1qYSxuLnRha2VXaGlsZT1SYSxuLnRhcD1XYSxuLnRocm90dGxlPU5zLG4udGhydT1RYSxuLnRvQXJyYXk9Z3Usbi50b1BhaXJzPWpmLG4udG9QYWlyc0luPVJmLG4udG9QYXRoPXpjLG4udG9QbGFpbk9iamVjdD1DdSxuLnRyYW5zZm9ybT1xdSxuLnVuYXJ5PUlzLG4udW5pb249TXAsbi51bmlvbkJ5PWpwLG4udW5pb25XaXRoPVJwLG4udW5pcT1CYSxuLnVuaXFCeT0kYSxuLnVuaXFXaXRoPVVhLG4udW5zZXQ9SHUsbi51bnppcD16YSxuLnVuemlwV2l0aD1HYSxuLnVwZGF0ZT1XdSxuLnVwZGF0ZVdpdGg9UXUsbi52YWx1ZXM9S3Usbi52YWx1ZXNJbj1KdSxuLndpdGhvdXQ9QnAsbi53b3Jkcz1DYyxuLndyYXA9THMsbi54b3I9JHAsbi54b3JCeT1VcCxuLnhvcldpdGg9enAsbi56aXA9R3Asbi56aXBPYmplY3Q9VmEsbi56aXBPYmplY3REZWVwPXFhLG4uemlwV2l0aD1WcCxuLmVudHJpZXM9amYsbi5lbnRyaWVzSW49UmYsbi5leHRlbmQ9d2Ysbi5leHRlbmRXaXRoPVNmLE9jKG4sbiksbi5hZGQ9aWQsbi5hdHRlbXB0PVdmLG4uY2FtZWxDYXNlPUJmLG4uY2FwaXRhbGl6ZT1lYyxuLmNlaWw9b2Qsbi5jbGFtcD1ZdSxuLmNsb25lPU1zLG4uY2xvbmVEZWVwPVJzLG4uY2xvbmVEZWVwV2l0aD1CcyxuLmNsb25lV2l0aD1qcyxuLmNvbmZvcm1zVG89JHMsbi5kZWJ1cnI9dGMsbi5kZWZhdWx0VG89U2Msbi5kaXZpZGU9YWQsbi5lbmRzV2l0aD1uYyxuLmVxPVVzLG4uZXNjYXBlPXJjLG4uZXNjYXBlUmVnRXhwPWljLG4uZXZlcnk9bnMsbi5maW5kPVdwLG4uZmluZEluZGV4PXNhLG4uZmluZEtleT1TdSxuLmZpbmRMYXN0PVFwLG4uZmluZExhc3RJbmRleD11YSxuLmZpbmRMYXN0S2V5PWt1LG4uZmxvb3I9c2Qsbi5mb3JFYWNoPXNzLG4uZm9yRWFjaFJpZ2h0PXVzLG4uZm9ySW49QXUsbi5mb3JJblJpZ2h0PV91LG4uZm9yT3duPVR1LG4uZm9yT3duUmlnaHQ9T3Usbi5nZXQ9SXUsbi5ndD1sZixuLmd0ZT1wZixuLmhhcz1MdSxuLmhhc0luPVB1LG4uaGVhZD1kYSxuLmlkZW50aXR5PWtjLG4uaW5jbHVkZXM9Y3Msbi5pbmRleE9mPWhhLG4uaW5SYW5nZT1YdSxuLmludm9rZT1OZixuLmlzQXJndW1lbnRzPWZmLG4uaXNBcnJheT1kZixuLmlzQXJyYXlCdWZmZXI9aGYsbi5pc0FycmF5TGlrZT16cyxuLmlzQXJyYXlMaWtlT2JqZWN0PUdzLG4uaXNCb29sZWFuPVZzLG4uaXNCdWZmZXI9bWYsbi5pc0RhdGU9Z2Ysbi5pc0VsZW1lbnQ9cXMsbi5pc0VtcHR5PUhzLG4uaXNFcXVhbD1XcyxuLmlzRXF1YWxXaXRoPVFzLG4uaXNFcnJvcj1LcyxuLmlzRmluaXRlPUpzLG4uaXNGdW5jdGlvbj1ZcyxuLmlzSW50ZWdlcj1YcyxuLmlzTGVuZ3RoPVpzLG4uaXNNYXA9eWYsbi5pc01hdGNoPW51LG4uaXNNYXRjaFdpdGg9cnUsbi5pc05hTj1pdSxuLmlzTmF0aXZlPW91LG4uaXNOaWw9c3Usbi5pc051bGw9YXUsbi5pc051bWJlcj11dSxuLmlzT2JqZWN0PWV1LG4uaXNPYmplY3RMaWtlPXR1LG4uaXNQbGFpbk9iamVjdD1jdSxuLmlzUmVnRXhwPXZmLG4uaXNTYWZlSW50ZWdlcj1sdSxuLmlzU2V0PWJmLG4uaXNTdHJpbmc9cHUsbi5pc1N5bWJvbD1mdSxuLmlzVHlwZWRBcnJheT14ZixuLmlzVW5kZWZpbmVkPWR1LG4uaXNXZWFrTWFwPWh1LG4uaXNXZWFrU2V0PW11LG4uam9pbj1nYSxuLmtlYmFiQ2FzZT0kZixuLmxhc3Q9eWEsbi5sYXN0SW5kZXhPZj12YSxuLmxvd2VyQ2FzZT1VZixuLmxvd2VyRmlyc3Q9emYsbi5sdD1DZixuLmx0ZT1FZixuLm1heD1WYyxuLm1heEJ5PXFjLG4ubWVhbj1IYyxuLm1lYW5CeT1XYyxuLm1pbj1RYyxuLm1pbkJ5PUtjLG4uc3R1YkFycmF5PU1jLG4uc3R1YkZhbHNlPWpjLG4uc3R1Yk9iamVjdD1SYyxuLnN0dWJTdHJpbmc9QmMsbi5zdHViVHJ1ZT0kYyxuLm11bHRpcGx5PXVkLG4ubnRoPWJhLG4ubm9Db25mbGljdD1GYyxuLm5vb3A9TmMsbi5ub3c9ZWYsbi5wYWQ9b2Msbi5wYWRFbmQ9YWMsbi5wYWRTdGFydD1zYyxuLnBhcnNlSW50PXVjLG4ucmFuZG9tPVp1LG4ucmVkdWNlPWZzLG4ucmVkdWNlUmlnaHQ9ZHMsbi5yZXBlYXQ9Y2Msbi5yZXBsYWNlPWxjLG4ucmVzdWx0PXp1LG4ucm91bmQ9Y2Qsbi5ydW5JbkNvbnRleHQ9ZSxuLnNhbXBsZT1tcyxuLnNpemU9dnMsbi5zbmFrZUNhc2U9R2Ysbi5zb21lPWJzLG4uc29ydGVkSW5kZXg9a2Esbi5zb3J0ZWRJbmRleEJ5PUFhLG4uc29ydGVkSW5kZXhPZj1fYSxuLnNvcnRlZExhc3RJbmRleD1UYSxuLnNvcnRlZExhc3RJbmRleEJ5PU9hLG4uc29ydGVkTGFzdEluZGV4T2Y9RmEsbi5zdGFydENhc2U9VmYsbi5zdGFydHNXaXRoPWZjLG4uc3VidHJhY3Q9bGQsbi5zdW09SmMsbi5zdW1CeT1ZYyxuLnRlbXBsYXRlPWRjLG4udGltZXM9VWMsbi50b0Zpbml0ZT15dSxuLnRvSW50ZWdlcj12dSxuLnRvTGVuZ3RoPWJ1LG4udG9Mb3dlcj1oYyxuLnRvTnVtYmVyPXh1LG4udG9TYWZlSW50ZWdlcj1FdSxuLnRvU3RyaW5nPUR1LG4udG9VcHBlcj1tYyxuLnRyaW09Z2Msbi50cmltRW5kPXljLG4udHJpbVN0YXJ0PXZjLG4udHJ1bmNhdGU9YmMsbi51bmVzY2FwZT14YyxuLnVuaXF1ZUlkPUdjLG4udXBwZXJDYXNlPXFmLG4udXBwZXJGaXJzdD1IZixuLmVhY2g9c3Msbi5lYWNoUmlnaHQ9dXMsbi5maXJzdD1kYSxPYyhuLGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGxyKG4sZnVuY3Rpb24odCxyKXtmbC5jYWxsKG4ucHJvdG90eXBlLHIpfHwoZVtyXT10KX0pLGV9KCkse2NoYWluOiExfSksbi5WRVJTSU9OPSI0LjE3LjExIixzKFsiYmluZCIsImJpbmRLZXkiLCJjdXJyeSIsImN1cnJ5UmlnaHQiLCJwYXJ0aWFsIiwicGFydGlhbFJpZ2h0Il0sZnVuY3Rpb24oZSl7bltlXS5wbGFjZWhvbGRlcj1ufSkscyhbImRyb3AiLCJ0YWtlIl0sZnVuY3Rpb24oZSx0KXt2LnByb3RvdHlwZVtlXT1mdW5jdGlvbihuKXtuPW49PT1uZT8xOlVsKHZ1KG4pLDApO3ZhciByPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgdih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIHIuX19maWx0ZXJlZF9fP3IuX190YWtlQ291bnRfXz16bChuLHIuX190YWtlQ291bnRfXyk6ci5fX3ZpZXdzX18ucHVzaCh7c2l6ZTp6bChuLExlKSx0eXBlOmUrKHIuX19kaXJfXzwwPyJSaWdodCI6IiIpfSkscn0sdi5wcm90b3R5cGVbZSsiUmlnaHQiXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbZV0odCkucmV2ZXJzZSgpfX0pLHMoWyJmaWx0ZXIiLCJtYXAiLCJ0YWtlV2hpbGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQrMSxyPW49PV9lfHwzPT1uO3YucHJvdG90eXBlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5fX2l0ZXJhdGVlc19fLnB1c2goe2l0ZXJhdGVlOnlvKGUsMyksdHlwZTpufSksdC5fX2ZpbHRlcmVkX189dC5fX2ZpbHRlcmVkX198fHIsdH19KSxzKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihlLHQpe3ZhciBuPSJ0YWtlIisodD8iUmlnaHQiOiIiKTt2LnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkscyhbImluaXRpYWwiLCJ0YWlsIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj0iZHJvcCIrKHQ/IiI6IlJpZ2h0Iik7di5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IHYodGhpcyk6dGhpc1tuXSgxKX19KSx2LnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGtjKX0sdi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSkuaGVhZCgpfSx2LnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChlKX0sdi5wcm90b3R5cGUuaW52b2tlTWFwPVpyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/bmV3IHYodGhpcyk6dGhpcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEVyKG4sZSx0KX0pfSksdi5wcm90b3R5cGUucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihfcyh5byhlKSkpfSx2LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2U9dnUoZSk7dmFyIG49dGhpcztyZXR1cm4gbi5fX2ZpbHRlcmVkX18mJihlPjB8fHQ8MCk/bmV3IHYobik6KGU8MD9uPW4udGFrZVJpZ2h0KC1lKTplJiYobj1uLmRyb3AoZSkpLHQhPT1uZSYmKHQ9dnUodCksbj10PDA/bi5kcm9wUmlnaHQoLXQpOm4udGFrZSh0LWUpKSxuKX0sdi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShlKS5yZXZlcnNlKCl9LHYucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWtlKExlKX0sbHIodi5wcm90b3R5cGUsZnVuY3Rpb24oZSx0KXt2YXIgcj0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh0KSxvPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodCksYT1uW28/InRha2UiKygibGFzdCI9PXQ/IlJpZ2h0IjoiIik6dF0scz1vfHwvXmZpbmQvLnRlc3QodCk7YSYmKG4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXyx1PW8/WzFdOmFyZ3VtZW50cyxjPXQgaW5zdGFuY2VvZiB2LGw9dVswXSxwPWN8fGRmKHQpLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5hcHBseShuLGgoW2VdLHUpKTtyZXR1cm4gbyYmZD90WzBdOnR9O3AmJnImJiJmdW5jdGlvbiI9PXR5cGVvZiBsJiYxIT1sLmxlbmd0aCYmKGM9cD0hMSk7dmFyIGQ9dGhpcy5fX2NoYWluX18sbT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLGc9cyYmIWQseT1jJiYhbTtpZighcyYmcCl7dD15P3Q6bmV3IHYodGhpcyk7dmFyIGI9ZS5hcHBseSh0LHUpO3JldHVybiBiLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6UWEsYXJnczpbZl0sdGhpc0FyZzpuZX0pLG5ldyBpKGIsZCl9cmV0dXJuIGcmJnk/ZS5hcHBseSh0aGlzLHUpOihiPXRoaXMudGhydShmKSxnP28/Yi52YWx1ZSgpWzBdOmIudmFsdWUoKTpiKX0pfSkscyhbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9c2xbZV0scj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QoZSk/InRhcCI6InRocnUiLGk9L14oPzpwb3B8c2hpZnQpJC8udGVzdChlKTtuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZihpJiYhdGhpcy5fX2NoYWluX18pe3ZhciBuPXRoaXMudmFsdWUoKTtyZXR1cm4gdC5hcHBseShkZihuKT9uOltdLGUpfXJldHVybiB0aGlzW3JdKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KGRmKG4pP246W10sZSl9KX19KSxscih2LnByb3RvdHlwZSxmdW5jdGlvbihlLHQpe3ZhciByPW5bdF07aWYocil7dmFyIGk9ci5uYW1lKyIiOyhlcFtpXXx8KGVwW2ldPVtdKSkucHVzaCh7bmFtZTp0LGZ1bmM6cn0pfX0pLGVwW1dpKG5lLG1lKS5uYW1lXT1be25hbWU6IndyYXBwZXIiLGZ1bmM6bmV9XSx2LnByb3RvdHlwZS5jbG9uZT1BLHYucHJvdG90eXBlLnJldmVyc2U9Syx2LnByb3RvdHlwZS52YWx1ZT1aLG4ucHJvdG90eXBlLmF0PXFwLG4ucHJvdG90eXBlLmNoYWluPUthLG4ucHJvdG90eXBlLmNvbW1pdD1KYSxuLnByb3RvdHlwZS5uZXh0PVlhLG4ucHJvdG90eXBlLnBsYW50PVphLG4ucHJvdG90eXBlLnJldmVyc2U9ZXMsbi5wcm90b3R5cGUudG9KU09OPW4ucHJvdG90eXBlLnZhbHVlT2Y9bi5wcm90b3R5cGUudmFsdWU9dHMsbi5wcm90b3R5cGUuZmlyc3Q9bi5wcm90b3R5cGUuaGVhZCxfbCYmKG4ucHJvdG90eXBlW19sXT1YYSksbn0oKTtPbi5fPUhuLChpPWZ1bmN0aW9uKCl7cmV0dXJuIEhufS5jYWxsKHQsbix0LHIpKSE9PW5lJiYoci5leHBvcnRzPWkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodCxuKDExKSxuKDEwMikoZSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcixpPW4oMjMpO3Quc2V0U2V0dGluZ3NTdHJpbmc9KHI9aS5jcmVhdGVBY3Rpb25zKHtTRVRfU0VUVElOR1NfU1RSSU5HOmZ1bmN0aW9uKGUpe3JldHVybntzZXR0aW5nc1N0cmluZzplfX0sU0VUX0NPTkZJR19TVFJJTkc6ZnVuY3Rpb24oZSl7cmV0dXJue2NvbmZpZ1N0cmluZzplfX0sT1BFTl9ISVNUT1JZOmZ1bmN0aW9uKCl7cmV0dXJue319LENMT1NFX0hJU1RPUlk6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSxyLnNldFNldHRpbmdzU3RyaW5nKSx0LnNldENvbmZpZ1N0cmluZz1yLnNldENvbmZpZ1N0cmluZyx0Lm9wZW5IaXN0b3J5PXIub3Blbkhpc3RvcnksdC5jbG9zZUhpc3Rvcnk9ci5jbG9zZUhpc3Rvcnl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMCx0PWFyZ3VtZW50c1sxXSxuPW5ldyBBcnJheShlKSxyPTAsaT0wLGM9MCxsPWZ1bmN0aW9uKHQpe25baV09dCxpPShpKzEpJWUscisrfSxwPWZ1bmN0aW9uKCl7aWYoMCE9cil7dmFyIHQ9bltjXTtyZXR1cm4gbltjXT1udWxsLHItLSxjPShjKzEpJWUsdH19LGY9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W107cjspZS5wdXNoKHAoKSk7cmV0dXJuIGV9O3JldHVybntpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXJ9LHB1dDpmdW5jdGlvbihwKXtpZihyPGUpbChwKTtlbHNle3ZhciBkPXZvaWQgMDtzd2l0Y2godCl7Y2FzZSBhOnRocm93IG5ldyBFcnJvcihvKTtjYXNlIHM6bltpXT1wLGk9KGkrMSklZSxjPWk7YnJlYWs7Y2FzZSB1OmQ9MiplLG49ZigpLHI9bi5sZW5ndGgsaT1uLmxlbmd0aCxjPTAsbi5sZW5ndGg9ZCxlPWQsbChwKX19fSx0YWtlOnAsZmx1c2g6Zn19bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgaT1uKDIyKSxvPSJDaGFubmVsJ3MgQnVmZmVyIG92ZXJmbG93ISIsYT0xLHM9Myx1PTQsYz17aXNFbXB0eTppLnIscHV0OmkudSx0YWtlOmkudX0sbD17bm9uZTpmdW5jdGlvbigpe3JldHVybiBjfSxmaXhlZDpmdW5jdGlvbihlKXtyZXR1cm4gcihlLGEpfSxkcm9wcGluZzpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDIpfSxzbGlkaW5nOmZ1bmN0aW9uKGUpe3JldHVybiByKGUscyl9LGV4cGFuZGluZzpmdW5jdGlvbihlKXtyZXR1cm4gcihlLHUpfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmPWV9ZnVuY3Rpb24gaShlKXtlJiYoRj1lLHQuc2NoZW1hRmV0Y2hlcj1uZXcgdy5TY2hlbWFGZXRjaGVyKGUpKX1mdW5jdGlvbiBvKGUpe3ZhciB0LG4scixpLG8sdSxjLGwsbSxnLHksdyxULEksTCxQLE0saixSLEIsJDtyZXR1cm4gcCh0aGlzLGZ1bmN0aW9uKHApe3N3aXRjaChwLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ9ZS5wYXlsb2FkLm9wZXJhdGlvbk5hbWUsWzQsYi5zZWxlY3QoUy5nZXRTZWxlY3RlZFdvcmtzcGFjZUlkKV07Y2FzZSAxOnJldHVybiBuPXAuc2VudCgpLFs0LGIuc2VsZWN0KEQuZ2V0U2VsZWN0ZWRTZXNzaW9uKV07Y2FzZSAyOnJldHVybiByPXAuc2VudCgpLGk9e3F1ZXJ5OnIucXVlcnksb3BlcmF0aW9uTmFtZTp0LHZhcmlhYmxlczpELmdldFBhcnNlZFZhcmlhYmxlc0Zyb21TZXNzaW9uKHIpfSxvPUMubWFrZU9wZXJhdGlvbihpKSx1PXYuaXNTdWJzY3JpcHRpb24obyksWzQsYi5zZWxlY3QoUy5nZXRTZWxlY3RlZFdvcmtzcGFjZUlkKV07Y2FzZSAzOnJldHVybiBjPXAuc2VudCgpLFs0LGIuc2VsZWN0KFMuZ2V0U2V0dGluZ3MpXTtjYXNlIDQ6cmV0dXJuIGw9cC5zZW50KCksWzQsYi5wdXQoRS5zZXRTdWJzY3JpcHRpb25BY3RpdmUodi5pc1N1YnNjcmlwdGlvbihvKSkpXTtjYXNlIDU6cmV0dXJuIHAuc2VudCgpLFs0LGIucHV0KEUuc3RhcnRRdWVyeSgpKV07Y2FzZSA2OnJldHVybiBwLnNlbnQoKSxtPWgucGFyc2VIZWFkZXJzKHIuaGVhZGVycyksci50cmFjaW5nU3VwcG9ydGVkJiZyLnJlc3BvbnNlVHJhY2luZ09wZW4mJihtPU8uc2V0KG0sIlgtQXBvbGxvLVRyYWNpbmciLCIxIikpLGc9e2VuZHBvaW50OnIuZW5kcG9pbnQsaGVhZGVyczptLGNyZWRlbnRpYWxzOmxbInJlcXVlc3QuY3JlZGVudGlhbHMiXX0seT1GKGcsZiksdz15LmxpbmssVD15LnN1YnNjcmlwdGlvbkNsaWVudCxbNCxiLnB1dChFLnNldEN1cnJlbnRRdWVyeVN0YXJ0VGltZShuZXcgRGF0ZSkpXTtjYXNlIDc6cC5zZW50KCksST0hMSxMPXguZXZlbnRDaGFubmVsKGZ1bmN0aW9uKGUpe3ZhciB0PSExO1QmJnUmJlQub25EaXNjb25uZWN0ZWQoZnVuY3Rpb24oKXt0PSEwLGUoe2Vycm9yOm5ldyBFcnJvcigiQ291bGQgbm90IGNvbm5lY3QgdG8gd2Vic29ja2V0IGVuZHBvaW50ICIrZisiLiBQbGVhc2UgY2hlY2sgaWYgdGhlIGVuZHBvaW50IHVybCBpcyBjb3JyZWN0LiIpfSksZSh4LkVORCl9KTt2YXIgbj1kLmV4ZWN1dGUodyxvKS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7ZSh7dmFsdWU6dH0pfSxlcnJvcjpmdW5jdGlvbih0KXtlKHtlcnJvcjp0fSksZSh4LkVORCl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7ZSh4LkVORCl9fSksaT1mdW5jdGlvbigpe2lmKCF0KXRyeXtuLnVuc3Vic2NyaWJlKCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19LGE9YysifiIrci5pZDtyZXR1cm4gTlthXT17dW5zdWJzY3JpYmU6aX0saX0pLHAubGFiZWw9ODtjYXNlIDg6cC50cnlzLnB1c2goWzgsLDIzLDI2XSkscC5sYWJlbD05O2Nhc2UgOTpyZXR1cm5bNCxiLnRha2UoTCldO2Nhc2UgMTA6cmV0dXJuIFA9cC5zZW50KCksKE09UC52YWx1ZSxqPVAuZXJyb3IsTSYmTS5leHRlbnNpb25zKT8oUj1NLmV4dGVuc2lvbnMsWzQsYi5wdXQoRS5zZXRSZXNwb25zZUV4dGVuc2lvbnMoUikpXSk6WzMsMTJdO2Nhc2UgMTE6cC5zZW50KCksTS5leHRlbnNpb25zLnRyYWNpbmcmJmxbInRyYWNpbmcuaGlkZVRyYWNpbmdSZXNwb25zZSJdJiZkZWxldGUgTS5leHRlbnNpb25zLnRyYWNpbmcscC5sYWJlbD0xMjtjYXNlIDEyOnJldHVybiBCPW5ldyBBLlJlc3BvbnNlUmVjb3JkKHtkYXRlOkpTT04uc3RyaW5naWZ5KE18fGEoaiksbnVsbCwyKSx0aW1lOm5ldyBEYXRlLHJlc3VsdElEOmsoKX0pLCQ9cyhqKSwiRmFpbGVkIHRvIGZldGNoIiE9PSQ/WzMsMTRdOls0LGIucHV0KEUuc2V0RW5kcG9pbnRVbnJlYWNoYWJsZShyLmVuZHBvaW50KSldO2Nhc2UgMTM6cC5zZW50KCkscC5sYWJlbD0xNDtjYXNlIDE0OnJldHVybiB1P0k/WzQsYi5wdXQoRS5jbGVhclJlc3BvbnNlcygpKV06WzMsMTZdOlszLDE4XTtjYXNlIDE1OnAuc2VudCgpLEk9ITEscC5sYWJlbD0xNjtjYXNlIDE2OnJldHVybls0LGIucHV0KEUuYWRkUmVzcG9uc2UobixyLmlkLEIpKV07Y2FzZSAxNzpyZXR1cm4gcC5zZW50KCksWzMsMjBdO2Nhc2UgMTg6cmV0dXJuWzQsYi5wdXQoRS5zZXRSZXNwb25zZShuLHIuaWQsQikpXTtjYXNlIDE5OnAuc2VudCgpLHAubGFiZWw9MjA7Y2FzZSAyMDpyZXR1cm5bNCxiLnB1dChfLmFkZEhpc3RvcnlJdGVtKHIpKV07Y2FzZSAyMTpyZXR1cm4gcC5zZW50KCksWzMsOV07Y2FzZSAyMjpyZXR1cm5bMywyNl07Y2FzZSAyMzpyZXR1cm5bNCxiLnB1dChFLnNldEN1cnJlbnRRdWVyeUVuZFRpbWUobmV3IERhdGUpKV07Y2FzZSAyNDpyZXR1cm4gcC5zZW50KCksWzQsYi5wdXQoRS5zdG9wUXVlcnkoci5pZCxuKSldO2Nhc2UgMjU6cmV0dXJuIHAuc2VudCgpLFs3XTtjYXNlIDI2OnJldHVyblsyXX19KX1mdW5jdGlvbiBhKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPXMoZSk7aWYoIkZhaWxlZCB0byBmZXRjaCI9PT1uKXtyZXR1cm57ZXJyb3I6IiIrbisodD8iIHNjaGVtYSI6IiIpKyIuIFBsZWFzZSBjaGVjayB5b3VyIGNvbm5lY3Rpb24ifX10cnl7cmV0dXJuIEpTT04ucGFyc2Uobil9Y2F0Y2goZSl7fXJldHVybntlcnJvcjpufX1mdW5jdGlvbiBzKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3I/ZS5yZXN1bHQmJiJvYmplY3QiPT09YyhlLnJlc3VsdCk/ZS5yZXN1bHQ6ZS5tZXNzYWdlOmV9ZnVuY3Rpb24gdShlKXt2YXIgdCxuLHIsaSxvLGEscyx1O3JldHVybiBwKHRoaXMsZnVuY3Rpb24oYyl7c3dpdGNoKGMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdD1lLnBheWxvYWQsbj10LnNlc3Npb25JZCxyPXQud29ya3NwYWNlSWQsWzQsYi5zZWxlY3QoRC5nZXRTZXNzaW9uc1N0YXRlKV07Y2FzZSAxOnJldHVybiBpPWMuc2VudCgpLnNlc3Npb25zLG89aS5nZXQobiksWzQscnx8Yi5zZWxlY3QoUy5nZXRTZWxlY3RlZFdvcmtzcGFjZUlkKV07Y2FzZSAyOnJldHVybiBhPWMuc2VudCgpLHM9YSsifiIrby5pZCx1PU5bc10sdSYmdS51bnN1YnNjcmliZSYmdS51bnN1YnNjcmliZSgpLGRlbGV0ZSBOW3NdLFsyXX19KX12YXIgYz0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbD1mdW5jdGlvbigpe3JldHVybiBsPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0sbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHA9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcihbZSx0XSl9fWZ1bmN0aW9uIHIobil7aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt1Oyl0cnl7aWYoaT0xLG8mJihhPTImblswXT9vLnJldHVybjpuWzBdP28udGhyb3d8fCgoYT1vLnJldHVybikmJmEuY2FsbChvKSwwKTpvLm5leHQpJiYhKGE9YS5jYWxsKG8sblsxXSkpLmRvbmUpcmV0dXJuIGE7c3dpdGNoKG89MCxhJiYobj1bMiZuWzBdLGEudmFsdWVdKSxuWzBdKXtjYXNlIDA6Y2FzZSAxOmE9bjticmVhaztjYXNlIDQ6cmV0dXJuIHUubGFiZWwrKyx7dmFsdWU6blsxXSxkb25lOiExfTtjYXNlIDU6dS5sYWJlbCsrLG89blsxXSxuPVswXTtjb250aW51ZTtjYXNlIDc6bj11Lm9wcy5wb3AoKSx1LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihhPXUudHJ5cywhKGE9YS5sZW5ndGg+MCYmYVthLmxlbmd0aC0xXSkmJig2PT09blswXXx8Mj09PW5bMF0pKXt1PTA7Y29udGludWV9aWYoMz09PW5bMF0mJighYXx8blsxXT5hWzBdJiZuWzFdPGFbM10pKXt1LmxhYmVsPW5bMV07YnJlYWt9aWYoNj09PW5bMF0mJnUubGFiZWw8YVsxXSl7dS5sYWJlbD1hWzFdLGE9bjticmVha31pZihhJiZ1LmxhYmVsPGFbMl0pe3UubGFiZWw9YVsyXSx1Lm9wcy5wdXNoKG4pO2JyZWFrfWFbMl0mJnUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZX1uPXQuY2FsbChlLHUpfWNhdGNoKGUpe249WzYsZV0sbz0wfWZpbmFsbHl7aT1hPTB9aWYoNSZuWzBdKXRocm93IG5bMV07cmV0dXJue3ZhbHVlOm5bMF0/blsxXTp2b2lkIDAsZG9uZTohMH19dmFyIGksbyxhLHMsdT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZhWzBdKXRocm93IGFbMV07cmV0dXJuIGFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcz17bmV4dDpuKDApLHRocm93Om4oMSkscmV0dXJuOm4oMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGYsZD1uKDc4KSxoPW4oMTc1KSxtPW4oMTc2KSxnPW4oMzg0KSx5PW4oMzg3KSx2PW4oMzg5KSxiPW4oNTUpLHg9bigxMDQpLEM9bigxNzgpLEU9bigxNiksRD1uKDEyKSx3PW4oNTAxKSxTPW4oMTcpLGs9big2NCksQT1uKDg1KSxfPW4oMTMxKSxUPW4oNjUpLE89bigxNCk7dC5zZXRTdWJzY3JpcHRpb25FbmRwb2ludD1yLHQuZGVmYXVsdExpbmtDcmVhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49e30scj1lLmhlYWRlcnMsaT1lLmNyZWRlbnRpYWxzO3ImJihuPWwoe30scikpO3ZhciBvPW5ldyBnLkh0dHBMaW5rKHt1cmk6ZS5lbmRwb2ludCxoZWFkZXJzOnIsY3JlZGVudGlhbHM6aX0pO2lmKCF0KXJldHVybntsaW5rOm99O3ZhciBhPW5ldyBtLlN1YnNjcmlwdGlvbkNsaWVudCh0LHt0aW1lb3V0OjJlNCxsYXp5OiEwLGNvbm5lY3Rpb25QYXJhbXM6bn0pLHM9bmV3IHkuV2ViU29ja2V0TGluayhhKTtyZXR1cm57bGluazpkLkFwb2xsb0xpbmsuc3BsaXQoZnVuY3Rpb24oZSl7cmV0dXJuIHYuaXNTdWJzY3JpcHRpb24oZSl9LHMsbyksc3Vic2NyaXB0aW9uQ2xpZW50OmF9fTt2YXIgRj10LmRlZmF1bHRMaW5rQ3JlYXRvcjt0LnNjaGVtYUZldGNoZXI9bmV3IHcuU2NoZW1hRmV0Y2hlcihGKSx3aW5kb3cuc2NoZW1hRmV0Y2hlcj10LnNjaGVtYUZldGNoZXIsdC5zZXRMaW5rQ3JlYXRvcj1pO3ZhciBOPXt9O3QuZm9ybWF0RXJyb3I9YSx0LmZlY3RoaW5nU2FnYXM9W2IudGFrZUV2ZXJ5KCJSVU5fUVVFUlkiLFQuc2FmZWx5KG8pKSxiLnRha2VMYXRlc3QoIlNUT1BfUVVFUlkiLFQuc2FmZWx5KHUpKV19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzYzKTtuLmQodCwiZW1wdHkiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY30pLG4uZCh0LCJmcm9tIixmdW5jdGlvbigpe3JldHVybiByLmV9KSxuLmQodCwic3BsaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZn0pLG4uZCh0LCJjb25jYXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJBcG9sbG9MaW5rIixmdW5jdGlvbigpe3JldHVybiByLmF9KSxuLmQodCwiZXhlY3V0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5kfSk7dmFyIGk9bigxNzEpO24uZCh0LCJjcmVhdGVPcGVyYXRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYn0pLG4uZCh0LCJtYWtlUHJvbWlzZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5mfSksbi5kKHQsInRvUHJvbWlzZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5nfSksbi5kKHQsImZyb21Qcm9taXNlIixmdW5jdGlvbigpe3JldHVybiBpLmR9KSxuLmQodCwiZnJvbUVycm9yIixmdW5jdGlvbigpe3JldHVybiBpLmN9KTt2YXIgbz1uKDEwNik7bi5kKHQsIk9ic2VydmFibGUiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighZS53ZWJwYWNrUG9seWZpbGwpe3ZhciB0PU9iamVjdC5jcmVhdGUoZSk7dC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJleHBvcnRzIix7ZW51bWVyYWJsZTohMH0pLHQud2VicGFja1BvbHlmaWxsPTF9cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj0ic3RyaW5nIj09PXR5cGVvZiBlP25ldyBvZS5Tb3VyY2UoZSk6ZTtpZighKG4gaW5zdGFuY2VvZiBvZS5Tb3VyY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIk11c3QgcHJvdmlkZSBTb3VyY2UuIFJlY2VpdmVkOiAiK1N0cmluZyhuKSk7cmV0dXJuIHMoKDAsc2UuY3JlYXRlTGV4ZXIpKG4sdHx8e30pKX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49InN0cmluZyI9PT10eXBlb2YgZT9uZXcgb2UuU291cmNlKGUpOmUscj0oMCxzZS5jcmVhdGVMZXhlcikobix0fHx7fSk7ZWUocixzZS5Ub2tlbktpbmQuU09GKTt2YXIgaT1FKHIsITEpO3JldHVybiBlZShyLHNlLlRva2VuS2luZC5FT0YpLGl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPSJzdHJpbmciPT09dHlwZW9mIGU/bmV3IG9lLlNvdXJjZShlKTplLHI9KDAsc2UuY3JlYXRlTGV4ZXIpKG4sdHx8e30pO2VlKHIsc2UuVG9rZW5LaW5kLlNPRik7dmFyIGk9TyhyKTtyZXR1cm4gZWUocixzZS5Ub2tlbktpbmQuRU9GKSxpfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZWUoZSxzZS5Ub2tlbktpbmQuTkFNRSk7cmV0dXJue2tpbmQ6dWUuTkFNRSx2YWx1ZTp0LnZhbHVlLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS50b2tlbjtlZShlLHNlLlRva2VuS2luZC5TT0YpO3ZhciBuPVtdO2Rve24ucHVzaCh1KGUpKX13aGlsZSghWihlLHNlLlRva2VuS2luZC5FT0YpKTtyZXR1cm57a2luZDp1ZS5ET0NVTUVOVCxkZWZpbml0aW9uczpuLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIHUoZSl7aWYoWChlLHNlLlRva2VuS2luZC5CUkFDRV9MKSlyZXR1cm4gYyhlKTtpZihYKGUsc2UuVG9rZW5LaW5kLk5BTUUpKXN3aXRjaChlLnRva2VuLnZhbHVlKXtjYXNlInF1ZXJ5IjpjYXNlIm11dGF0aW9uIjpjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIGMoZSk7Y2FzZSJmcmFnbWVudCI6cmV0dXJuIHgoZSk7Y2FzZSJzY2hlbWEiOmNhc2Uic2NhbGFyIjpjYXNlInR5cGUiOmNhc2UiaW50ZXJmYWNlIjpjYXNlInVuaW9uIjpjYXNlImVudW0iOmNhc2UiaW5wdXQiOmNhc2UiZXh0ZW5kIjpjYXNlImRpcmVjdGl2ZSI6cmV0dXJuIE4oZSl9dGhyb3cgbmUoZSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLnRva2VuO2lmKFgoZSxzZS5Ub2tlbktpbmQuQlJBQ0VfTCkpcmV0dXJue2tpbmQ6dWUuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOiJxdWVyeSIsbmFtZTpudWxsLHZhcmlhYmxlRGVmaW5pdGlvbnM6bnVsbCxkaXJlY3RpdmVzOltdLHNlbGVjdGlvblNldDpoKGUpLGxvYzpKKGUsdCl9O3ZhciBuPWwoZSkscj12b2lkIDA7cmV0dXJuIFgoZSxzZS5Ub2tlbktpbmQuTkFNRSkmJihyPWEoZSkpLHtraW5kOnVlLk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLG5hbWU6cix2YXJpYWJsZURlZmluaXRpb25zOnAoZSksZGlyZWN0aXZlczpfKGUpLHNlbGVjdGlvblNldDpoKGUpLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZWUoZSxzZS5Ub2tlbktpbmQuTkFNRSk7c3dpdGNoKHQudmFsdWUpe2Nhc2UicXVlcnkiOnJldHVybiJxdWVyeSI7Y2FzZSJtdXRhdGlvbiI6cmV0dXJuIm11dGF0aW9uIjtjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuInN1YnNjcmlwdGlvbiJ9dGhyb3cgbmUoZSx0KX1mdW5jdGlvbiBwKGUpe3JldHVybiBYKGUsc2UuVG9rZW5LaW5kLlBBUkVOX0wpP2llKGUsc2UuVG9rZW5LaW5kLlBBUkVOX0wsZixzZS5Ub2tlbktpbmQuUEFSRU5fUik6W119ZnVuY3Rpb24gZihlKXt2YXIgdD1lLnRva2VuO3JldHVybntraW5kOnVlLlZBUklBQkxFX0RFRklOSVRJT04sdmFyaWFibGU6ZChlKSx0eXBlOihlZShlLHNlLlRva2VuS2luZC5DT0xPTiksTyhlKSksZGVmYXVsdFZhbHVlOlooZSxzZS5Ub2tlbktpbmQuRVFVQUxTKT9FKGUsITApOm51bGwsbG9jOkooZSx0KX19ZnVuY3Rpb24gZChlKXt2YXIgdD1lLnRva2VuO3JldHVybiBlZShlLHNlLlRva2VuS2luZC5ET0xMQVIpLHtraW5kOnVlLlZBUklBQkxFLG5hbWU6YShlKSxsb2M6SihlLHQpfX1mdW5jdGlvbiBoKGUpe3ZhciB0PWUudG9rZW47cmV0dXJue2tpbmQ6dWUuU0VMRUNUSU9OX1NFVCxzZWxlY3Rpb25zOmllKGUsc2UuVG9rZW5LaW5kLkJSQUNFX0wsbSxzZS5Ub2tlbktpbmQuQlJBQ0VfUiksbG9jOkooZSx0KX19ZnVuY3Rpb24gbShlKXtyZXR1cm4gWChlLHNlLlRva2VuS2luZC5TUFJFQUQpP2IoZSk6ZyhlKX1mdW5jdGlvbiBnKGUpe3ZhciB0PWUudG9rZW4sbj1hKGUpLHI9dm9pZCAwLGk9dm9pZCAwO3JldHVybiBaKGUsc2UuVG9rZW5LaW5kLkNPTE9OKT8ocj1uLGk9YShlKSk6KHI9bnVsbCxpPW4pLHtraW5kOnVlLkZJRUxELGFsaWFzOnIsbmFtZTppLGFyZ3VtZW50czp5KGUpLGRpcmVjdGl2ZXM6XyhlKSxzZWxlY3Rpb25TZXQ6WChlLHNlLlRva2VuS2luZC5CUkFDRV9MKT9oKGUpOm51bGwsbG9jOkooZSx0KX19ZnVuY3Rpb24geShlKXtyZXR1cm4gWChlLHNlLlRva2VuS2luZC5QQVJFTl9MKT9pZShlLHNlLlRva2VuS2luZC5QQVJFTl9MLHYsc2UuVG9rZW5LaW5kLlBBUkVOX1IpOltdfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9ZS50b2tlbjtyZXR1cm57a2luZDp1ZS5BUkdVTUVOVCxuYW1lOmEoZSksdmFsdWU6KGVlKGUsc2UuVG9rZW5LaW5kLkNPTE9OKSxFKGUsITEpKSxsb2M6SihlLHQpfX1mdW5jdGlvbiBiKGUpe3ZhciB0PWUudG9rZW47aWYoZWUoZSxzZS5Ub2tlbktpbmQuU1BSRUFEKSxYKGUsc2UuVG9rZW5LaW5kLk5BTUUpJiYib24iIT09ZS50b2tlbi52YWx1ZSlyZXR1cm57a2luZDp1ZS5GUkFHTUVOVF9TUFJFQUQsbmFtZTpDKGUpLGRpcmVjdGl2ZXM6XyhlKSxsb2M6SihlLHQpfTt2YXIgbj1udWxsO3JldHVybiJvbiI9PT1lLnRva2VuLnZhbHVlJiYoZS5hZHZhbmNlKCksbj1GKGUpKSx7a2luZDp1ZS5JTkxJTkVfRlJBR01FTlQsdHlwZUNvbmRpdGlvbjpuLGRpcmVjdGl2ZXM6XyhlKSxzZWxlY3Rpb25TZXQ6aChlKSxsb2M6SihlLHQpfX1mdW5jdGlvbiB4KGUpe3ZhciB0PWUudG9rZW47cmV0dXJuIHRlKGUsImZyYWdtZW50Iikse2tpbmQ6dWUuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOkMoZSksdHlwZUNvbmRpdGlvbjoodGUoZSwib24iKSxGKGUpKSxkaXJlY3RpdmVzOl8oZSksc2VsZWN0aW9uU2V0OmgoZSksbG9jOkooZSx0KX19ZnVuY3Rpb24gQyhlKXtpZigib24iPT09ZS50b2tlbi52YWx1ZSl0aHJvdyBuZShlKTtyZXR1cm4gYShlKX1mdW5jdGlvbiBFKGUsdCl7dmFyIG49ZS50b2tlbjtzd2l0Y2gobi5raW5kKXtjYXNlIHNlLlRva2VuS2luZC5CUkFDS0VUX0w6cmV0dXJuIFMoZSx0KTtjYXNlIHNlLlRva2VuS2luZC5CUkFDRV9MOnJldHVybiBrKGUsdCk7Y2FzZSBzZS5Ub2tlbktpbmQuSU5UOnJldHVybiBlLmFkdmFuY2UoKSx7a2luZDp1ZS5JTlQsdmFsdWU6bi52YWx1ZSxsb2M6SihlLG4pfTtjYXNlIHNlLlRva2VuS2luZC5GTE9BVDpyZXR1cm4gZS5hZHZhbmNlKCkse2tpbmQ6dWUuRkxPQVQsdmFsdWU6bi52YWx1ZSxsb2M6SihlLG4pfTtjYXNlIHNlLlRva2VuS2luZC5TVFJJTkc6cmV0dXJuIGUuYWR2YW5jZSgpLHtraW5kOnVlLlNUUklORyx2YWx1ZTpuLnZhbHVlLGxvYzpKKGUsbil9O2Nhc2Ugc2UuVG9rZW5LaW5kLk5BTUU6cmV0dXJuInRydWUiPT09bi52YWx1ZXx8ImZhbHNlIj09PW4udmFsdWU/KGUuYWR2YW5jZSgpLHtraW5kOnVlLkJPT0xFQU4sdmFsdWU6InRydWUiPT09bi52YWx1ZSxsb2M6SihlLG4pfSk6Im51bGwiPT09bi52YWx1ZT8oZS5hZHZhbmNlKCkse2tpbmQ6dWUuTlVMTCxsb2M6SihlLG4pfSk6KGUuYWR2YW5jZSgpLHtraW5kOnVlLkVOVU0sdmFsdWU6bi52YWx1ZSxsb2M6SihlLG4pfSk7Y2FzZSBzZS5Ub2tlbktpbmQuRE9MTEFSOmlmKCF0KXJldHVybiBkKGUpfXRocm93IG5lKGUpfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIEUoZSwhMCl9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gRShlLCExKX1mdW5jdGlvbiBTKGUsdCl7dmFyIG49ZS50b2tlbixyPXQ/RDp3O3JldHVybntraW5kOnVlLkxJU1QsdmFsdWVzOnJlKGUsc2UuVG9rZW5LaW5kLkJSQUNLRVRfTCxyLHNlLlRva2VuS2luZC5CUkFDS0VUX1IpLGxvYzpKKGUsbil9fWZ1bmN0aW9uIGsoZSx0KXt2YXIgbj1lLnRva2VuO2VlKGUsc2UuVG9rZW5LaW5kLkJSQUNFX0wpO2Zvcih2YXIgcj1bXTshWihlLHNlLlRva2VuS2luZC5CUkFDRV9SKTspci5wdXNoKEEoZSx0KSk7cmV0dXJue2tpbmQ6dWUuT0JKRUNULGZpZWxkczpyLGxvYzpKKGUsbil9fWZ1bmN0aW9uIEEoZSx0KXt2YXIgbj1lLnRva2VuO3JldHVybntraW5kOnVlLk9CSkVDVF9GSUVMRCxuYW1lOmEoZSksdmFsdWU6KGVlKGUsc2UuVG9rZW5LaW5kLkNPTE9OKSxFKGUsdCkpLGxvYzpKKGUsbil9fWZ1bmN0aW9uIF8oZSl7Zm9yKHZhciB0PVtdO1goZSxzZS5Ub2tlbktpbmQuQVQpOyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVChlKXt2YXIgdD1lLnRva2VuO3JldHVybiBlZShlLHNlLlRva2VuS2luZC5BVCkse2tpbmQ6dWUuRElSRUNUSVZFLG5hbWU6YShlKSxhcmd1bWVudHM6eShlKSxsb2M6SihlLHQpfX1mdW5jdGlvbiBPKGUpe3ZhciB0PWUudG9rZW4sbj12b2lkIDA7cmV0dXJuIFooZSxzZS5Ub2tlbktpbmQuQlJBQ0tFVF9MKT8obj1PKGUpLGVlKGUsc2UuVG9rZW5LaW5kLkJSQUNLRVRfUiksbj17a2luZDp1ZS5MSVNUX1RZUEUsdHlwZTpuLGxvYzpKKGUsdCl9KTpuPUYoZSksWihlLHNlLlRva2VuS2luZC5CQU5HKT97a2luZDp1ZS5OT05fTlVMTF9UWVBFLHR5cGU6bixsb2M6SihlLHQpfTpufWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS50b2tlbjtyZXR1cm57a2luZDp1ZS5OQU1FRF9UWVBFLG5hbWU6YShlKSxsb2M6SihlLHQpfX1mdW5jdGlvbiBOKGUpe2lmKFgoZSxzZS5Ub2tlbktpbmQuTkFNRSkpc3dpdGNoKGUudG9rZW4udmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gSShlKTtjYXNlInNjYWxhciI6cmV0dXJuIFAoZSk7Y2FzZSJ0eXBlIjpyZXR1cm4gTShlKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIFUoZSk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHooZSk7Y2FzZSJlbnVtIjpyZXR1cm4gVihlKTtjYXNlImlucHV0IjpyZXR1cm4gSChlKTtjYXNlImV4dGVuZCI6cmV0dXJuIFcoZSk7Y2FzZSJkaXJlY3RpdmUiOnJldHVybiBRKGUpfXRocm93IG5lKGUpfWZ1bmN0aW9uIEkoZSl7dmFyIHQ9ZS50b2tlbjt0ZShlLCJzY2hlbWEiKTt2YXIgbj1fKGUpLHI9aWUoZSxzZS5Ub2tlbktpbmQuQlJBQ0VfTCxMLHNlLlRva2VuS2luZC5CUkFDRV9SKTtyZXR1cm57a2luZDp1ZS5TQ0hFTUFfREVGSU5JVElPTixkaXJlY3RpdmVzOm4sb3BlcmF0aW9uVHlwZXM6cixsb2M6SihlLHQpfX1mdW5jdGlvbiBMKGUpe3ZhciB0PWUudG9rZW4sbj1sKGUpO2VlKGUsc2UuVG9rZW5LaW5kLkNPTE9OKTt2YXIgcj1GKGUpO3JldHVybntraW5kOnVlLk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sdHlwZTpyLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ZS50b2tlbjt0ZShlLCJzY2FsYXIiKTt2YXIgbj1hKGUpLHI9XyhlKTtyZXR1cm57a2luZDp1ZS5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OLG5hbWU6bixkaXJlY3RpdmVzOnIsbG9jOkooZSx0KX19ZnVuY3Rpb24gTShlKXt2YXIgdD1lLnRva2VuO3RlKGUsInR5cGUiKTt2YXIgbj1hKGUpLHI9aihlKSxpPV8oZSksbz1yZShlLHNlLlRva2VuS2luZC5CUkFDRV9MLFIsc2UuVG9rZW5LaW5kLkJSQUNFX1IpO3JldHVybntraW5kOnVlLk9CSkVDVF9UWVBFX0RFRklOSVRJT04sbmFtZTpuLGludGVyZmFjZXM6cixkaXJlY3RpdmVzOmksZmllbGRzOm8sbG9jOkooZSx0KX19ZnVuY3Rpb24gaihlKXt2YXIgdD1bXTtpZigiaW1wbGVtZW50cyI9PT1lLnRva2VuLnZhbHVlKXtlLmFkdmFuY2UoKTtkb3t0LnB1c2goRihlKSl9d2hpbGUoWChlLHNlLlRva2VuS2luZC5OQU1FKSl9cmV0dXJuIHR9ZnVuY3Rpb24gUihlKXt2YXIgdD1lLnRva2VuLG49YShlKSxyPUIoZSk7ZWUoZSxzZS5Ub2tlbktpbmQuQ09MT04pO3ZhciBpPU8oZSksbz1fKGUpO3JldHVybntraW5kOnVlLkZJRUxEX0RFRklOSVRJT04sbmFtZTpuLGFyZ3VtZW50czpyLHR5cGU6aSxkaXJlY3RpdmVzOm8sbG9jOkooZSx0KX19ZnVuY3Rpb24gQihlKXtyZXR1cm4gWChlLHNlLlRva2VuS2luZC5QQVJFTl9MKT9pZShlLHNlLlRva2VuS2luZC5QQVJFTl9MLCQsc2UuVG9rZW5LaW5kLlBBUkVOX1IpOltdfWZ1bmN0aW9uICQoZSl7dmFyIHQ9ZS50b2tlbixuPWEoZSk7ZWUoZSxzZS5Ub2tlbktpbmQuQ09MT04pO3ZhciByPU8oZSksaT1udWxsO1ooZSxzZS5Ub2tlbktpbmQuRVFVQUxTKSYmKGk9RChlKSk7dmFyIG89XyhlKTtyZXR1cm57a2luZDp1ZS5JTlBVVF9WQUxVRV9ERUZJTklUSU9OLG5hbWU6bix0eXBlOnIsZGVmYXVsdFZhbHVlOmksZGlyZWN0aXZlczpvLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIFUoZSl7dmFyIHQ9ZS50b2tlbjt0ZShlLCJpbnRlcmZhY2UiKTt2YXIgbj1hKGUpLHI9XyhlKSxpPXJlKGUsc2UuVG9rZW5LaW5kLkJSQUNFX0wsUixzZS5Ub2tlbktpbmQuQlJBQ0VfUik7cmV0dXJue2tpbmQ6dWUuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTixuYW1lOm4sZGlyZWN0aXZlczpyLGZpZWxkczppLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIHooZSl7dmFyIHQ9ZS50b2tlbjt0ZShlLCJ1bmlvbiIpO3ZhciBuPWEoZSkscj1fKGUpO2VlKGUsc2UuVG9rZW5LaW5kLkVRVUFMUyk7dmFyIGk9RyhlKTtyZXR1cm57a2luZDp1ZS5VTklPTl9UWVBFX0RFRklOSVRJT04sbmFtZTpuLGRpcmVjdGl2ZXM6cix0eXBlczppLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIEcoZSl7WihlLHNlLlRva2VuS2luZC5QSVBFKTt2YXIgdD1bXTtkb3t0LnB1c2goRihlKSl9d2hpbGUoWihlLHNlLlRva2VuS2luZC5QSVBFKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVihlKXt2YXIgdD1lLnRva2VuO3RlKGUsImVudW0iKTt2YXIgbj1hKGUpLHI9XyhlKSxpPWllKGUsc2UuVG9rZW5LaW5kLkJSQUNFX0wscSxzZS5Ub2tlbktpbmQuQlJBQ0VfUik7cmV0dXJue2tpbmQ6dWUuRU5VTV9UWVBFX0RFRklOSVRJT04sbmFtZTpuLGRpcmVjdGl2ZXM6cix2YWx1ZXM6aSxsb2M6SihlLHQpfX1mdW5jdGlvbiBxKGUpe3ZhciB0PWUudG9rZW4sbj1hKGUpLHI9XyhlKTtyZXR1cm57a2luZDp1ZS5FTlVNX1ZBTFVFX0RFRklOSVRJT04sbmFtZTpuLGRpcmVjdGl2ZXM6cixsb2M6SihlLHQpfX1mdW5jdGlvbiBIKGUpe3ZhciB0PWUudG9rZW47dGUoZSwiaW5wdXQiKTt2YXIgbj1hKGUpLHI9XyhlKSxpPXJlKGUsc2UuVG9rZW5LaW5kLkJSQUNFX0wsJCxzZS5Ub2tlbktpbmQuQlJBQ0VfUik7cmV0dXJue2tpbmQ6dWUuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTixuYW1lOm4sZGlyZWN0aXZlczpyLGZpZWxkczppLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIFcoZSl7dmFyIHQ9ZS50b2tlbjt0ZShlLCJleHRlbmQiKTt2YXIgbj1NKGUpO3JldHVybntraW5kOnVlLlRZUEVfRVhURU5TSU9OX0RFRklOSVRJT04sZGVmaW5pdGlvbjpuLGxvYzpKKGUsdCl9fWZ1bmN0aW9uIFEoZSl7dmFyIHQ9ZS50b2tlbjt0ZShlLCJkaXJlY3RpdmUiKSxlZShlLHNlLlRva2VuS2luZC5BVCk7dmFyIG49YShlKSxyPUIoZSk7dGUoZSwib24iKTt2YXIgaT1LKGUpO3JldHVybntraW5kOnVlLkRJUkVDVElWRV9ERUZJTklUSU9OLG5hbWU6bixhcmd1bWVudHM6cixsb2NhdGlvbnM6aSxsb2M6SihlLHQpfX1mdW5jdGlvbiBLKGUpe1ooZSxzZS5Ub2tlbktpbmQuUElQRSk7dmFyIHQ9W107ZG97dC5wdXNoKGEoZSkpfXdoaWxlKFooZSxzZS5Ub2tlbktpbmQuUElQRSkpO3JldHVybiB0fWZ1bmN0aW9uIEooZSx0KXtpZighZS5vcHRpb25zLm5vTG9jYXRpb24pcmV0dXJuIG5ldyBZKHQsZS5sYXN0VG9rZW4sZS5zb3VyY2UpfWZ1bmN0aW9uIFkoZSx0LG4pe3RoaXMuc3RhcnQ9ZS5zdGFydCx0aGlzLmVuZD10LmVuZCx0aGlzLnN0YXJ0VG9rZW49ZSx0aGlzLmVuZFRva2VuPXQsdGhpcy5zb3VyY2U9bn1mdW5jdGlvbiBYKGUsdCl7cmV0dXJuIGUudG9rZW4ua2luZD09PXR9ZnVuY3Rpb24gWihlLHQpe3ZhciBuPWUudG9rZW4ua2luZD09PXQ7cmV0dXJuIG4mJmUuYWR2YW5jZSgpLG59ZnVuY3Rpb24gZWUoZSx0KXt2YXIgbj1lLnRva2VuO2lmKG4ua2luZD09PXQpcmV0dXJuIGUuYWR2YW5jZSgpLG47dGhyb3coMCxhZS5zeW50YXhFcnJvcikoZS5zb3VyY2Usbi5zdGFydCwiRXhwZWN0ZWQgIit0KyIsIGZvdW5kICIrKDAsc2UuZ2V0VG9rZW5EZXNjKShuKSl9ZnVuY3Rpb24gdGUoZSx0KXt2YXIgbj1lLnRva2VuO2lmKG4ua2luZD09PXNlLlRva2VuS2luZC5OQU1FJiZuLnZhbHVlPT09dClyZXR1cm4gZS5hZHZhbmNlKCksbjt0aHJvdygwLGFlLnN5bnRheEVycm9yKShlLnNvdXJjZSxuLnN0YXJ0LCdFeHBlY3RlZCAiJyt0KyciLCBmb3VuZCAnKygwLHNlLmdldFRva2VuRGVzYykobikpfWZ1bmN0aW9uIG5lKGUsdCl7dmFyIG49dHx8ZS50b2tlbjtyZXR1cm4oMCxhZS5zeW50YXhFcnJvcikoZS5zb3VyY2Usbi5zdGFydCwiVW5leHBlY3RlZCAiKygwLHNlLmdldFRva2VuRGVzYykobikpfWZ1bmN0aW9uIHJlKGUsdCxuLHIpe2VlKGUsdCk7Zm9yKHZhciBpPVtdOyFaKGUscik7KWkucHVzaChuKGUpKTtyZXR1cm4gaX1mdW5jdGlvbiBpZShlLHQsbixyKXtlZShlLHQpO2Zvcih2YXIgaT1bbihlKV07IVooZSxyKTspaS5wdXNoKG4oZSkpO3JldHVybiBpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnBhcnNlPXIsdC5wYXJzZVZhbHVlPWksdC5wYXJzZVR5cGU9byx0LnBhcnNlQ29uc3RWYWx1ZT1ELHQucGFyc2VUeXBlUmVmZXJlbmNlPU8sdC5wYXJzZU5hbWVkVHlwZT1GO3ZhciBvZT1uKDE3OSksYWU9bigzKSxzZT1uKDExMCksdWU9bigxMCk7WS5wcm90b3R5cGUudG9KU09OPVkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm57c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10fHwoZSBpbnN0YW5jZW9mIGEuR3JhcGhRTE5vbk51bGwmJnQgaW5zdGFuY2VvZiBhLkdyYXBoUUxOb25OdWxsP3IoZS5vZlR5cGUsdC5vZlR5cGUpOmUgaW5zdGFuY2VvZiBhLkdyYXBoUUxMaXN0JiZ0IGluc3RhbmNlb2YgYS5HcmFwaFFMTGlzdCYmcihlLm9mVHlwZSx0Lm9mVHlwZSkpfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiB0PT09bnx8KG4gaW5zdGFuY2VvZiBhLkdyYXBoUUxOb25OdWxsP3QgaW5zdGFuY2VvZiBhLkdyYXBoUUxOb25OdWxsJiZpKGUsdC5vZlR5cGUsbi5vZlR5cGUpOnQgaW5zdGFuY2VvZiBhLkdyYXBoUUxOb25OdWxsP2koZSx0Lm9mVHlwZSxuKTpuIGluc3RhbmNlb2YgYS5HcmFwaFFMTGlzdD90IGluc3RhbmNlb2YgYS5HcmFwaFFMTGlzdCYmaShlLHQub2ZUeXBlLG4ub2ZUeXBlKTohKHQgaW5zdGFuY2VvZiBhLkdyYXBoUUxMaXN0KSYmISEoKDAsYS5pc0Fic3RyYWN0VHlwZSkobikmJnQgaW5zdGFuY2VvZiBhLkdyYXBoUUxPYmplY3RUeXBlJiZlLmlzUG9zc2libGVUeXBlKG4sdCkpKX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcj1uO3JldHVybiB0PT09cnx8KCgwLGEuaXNBYnN0cmFjdFR5cGUpKHQpPygwLGEuaXNBYnN0cmFjdFR5cGUpKHIpP2UuZ2V0UG9zc2libGVUeXBlcyh0KS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBlLmlzUG9zc2libGVUeXBlKHIsdCl9KTplLmlzUG9zc2libGVUeXBlKHQscik6ISEoMCxhLmlzQWJzdHJhY3RUeXBlKShyKSYmZS5pc1Bvc3NpYmxlVHlwZShyLHQpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0VxdWFsVHlwZT1yLHQuaXNUeXBlU3ViVHlwZU9mPWksdC5kb1R5cGVzT3ZlcmxhcD1vO3ZhciBhPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQpe2lmKGUgaW5zdGFuY2VvZiB1LkdyYXBoUUxOb25OdWxsKXJldHVybiB0JiZ0LmtpbmQhPT1zLk5VTEw/aShlLm9mVHlwZSx0KTpbJ0V4cGVjdGVkICInK1N0cmluZyhlKSsnIiwgZm91bmQgbnVsbC4nXTtpZighdHx8dC5raW5kPT09cy5OVUxMKXJldHVybltdO2lmKHQua2luZD09PXMuVkFSSUFCTEUpcmV0dXJuW107aWYoZSBpbnN0YW5jZW9mIHUuR3JhcGhRTExpc3Qpe3ZhciBuPWUub2ZUeXBlO3JldHVybiB0LmtpbmQ9PT1zLkxJU1Q/dC52YWx1ZXMucmVkdWNlKGZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1pKG4sdCk7cmV0dXJuIGUuY29uY2F0KG8ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJJbiBlbGVtZW50ICMiK3IrIjogIitlfSkpfSxbXSk6aShuLHQpfWlmKGUgaW5zdGFuY2VvZiB1LkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpe2lmKHQua2luZCE9PXMuT0JKRUNUKXJldHVyblsnRXhwZWN0ZWQgIicrZS5uYW1lKyciLCBmb3VuZCBub3QgYW4gb2JqZWN0LiddO3ZhciByPWUuZ2V0RmllbGRzKCksYT1bXSxjPXQuZmllbGRzO2MuZm9yRWFjaChmdW5jdGlvbihlKXtyW2UubmFtZS52YWx1ZV18fGEucHVzaCgnSW4gZmllbGQgIicrZS5uYW1lLnZhbHVlKyciOiBVbmtub3duIGZpZWxkLicpfSk7dmFyIHA9KDAsZi5kZWZhdWx0KShjLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudmFsdWV9KTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1pKHJbZV0udHlwZSxwW2VdJiZwW2VdLnZhbHVlKTthLnB1c2guYXBwbHkoYSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4nSW4gZmllbGQgIicrZSsnIjogJyt0fSkpfSksYX1yZXR1cm4gZSBpbnN0YW5jZW9mIHUuR3JhcGhRTFNjYWxhclR5cGV8fGUgaW5zdGFuY2VvZiB1LkdyYXBoUUxFbnVtVHlwZXx8KDAsbC5kZWZhdWx0KSgwLCJNdXN0IGJlIGlucHV0IHR5cGUiKSxlLmlzVmFsaWRMaXRlcmFsKHQpP1tdOlsnRXhwZWN0ZWQgdHlwZSAiJytlLm5hbWUrJyIsIGZvdW5kICcrKDAsby5wcmludCkodCkrIi4iXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1ZhbGlkTGl0ZXJhbFZhbHVlPWk7dmFyIG89bigxOSksYT1uKDEwKSxzPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oYSksdT1uKDYpLGM9bigxMyksbD1yKGMpLHA9big0NiksZj1yKHApfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDQ2KSxpPW4oMjE5KSxvPW4oMjIwKSxhPW8uYSYmby5hLmlzTWFwLHM9YT9PYmplY3QoaS5hKShhKTpyLmE7dC5hPXN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUodFswXSk7Y2FzZSAyOnJldHVybiBuZXcgZSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSk7Y2FzZSA1OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSl9dmFyIG49T2JqZWN0KGkuYSkoZS5wcm90b3R5cGUpLHI9ZS5hcHBseShuLHQpO3JldHVybiBPYmplY3Qoby5hKShyKT9yOm59fXZhciBpPW4oMTI2KSxvPW4oNjApO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSIiKSxuZXcgdih7ZW5kcG9pbnQ6ZX0pLnNldCgiaWQiLG0oKSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbmV3IHYodSh7fSxlLHtoZWFkZXJzOmUuaGVhZGVycz9KU09OLnN0cmluZ2lmeShlLmhlYWRlcnMsbnVsbCwyKToiIixyZXNwb25zZXM6ZS5yZXNwb25zZXMmJmUucmVzcG9uc2VzLmxlbmd0aD4wP2wuTGlzdChlLnJlc3BvbnNlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKHtkYXRlOmV9KX0pKTpsLkxpc3QoKX0pKS5zZXQoImlkIixtKCkpfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbj1uZXcgdih7ZW5kcG9pbnQ6ZXx8IiJ9KTtyZXR1cm4gbmV3IHgoe3Nlc3Npb25zOmwuT3JkZXJlZE1hcCgodD17fSx0W24uaWRdPW4sdCkpLHNlbGVjdGVkU2Vzc2lvbklkOm4uaWQsc2Vzc2lvbkNvdW50OjF9KX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49ZS5zZXNzaW9ucy5zaXplLGk9ZS5zZXNzaW9ucy5rZXlTZXEoKSxvPWUucmVtb3ZlSW4oWyJzZXNzaW9ucyIsdF0pLGE9ZS5zZXNzaW9ucy5nZXQodCk7aWYoMT09PW4pe3ZhciBzPXtxdWVyeToiIixoZWFkZXJzOmEuaGVhZGVycyxpc1JlbG9hZGluZ1NjaGVtYTphLmlzUmVsb2FkaW5nU2NoZW1hLGVuZHBvaW50VW5yZWFjaGFibGU6YS5lbmRwb2ludFVucmVhY2hhYmxlfTthLmVuZHBvaW50VW5yZWFjaGFibGUmJihzLnJlc3BvbnNlcz1hLnJlc3BvbnNlcyk7dmFyIHU9cihhLmVuZHBvaW50KS5tZXJnZShzKTtyZXR1cm4gbz1vLnNldCgic2VsZWN0ZWRTZXNzaW9uSWQiLHUuaWQpLG8uc2V0SW4oWyJzZXNzaW9ucyIsdS5pZF0sdSl9dmFyIGM9ZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSxsPWkuaW5kZXhPZih0KTtpZihjPT09dCl7dmFyIHA9bC0xO3JldHVybiBwPDA/by5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixpLmdldCgxKSk6by5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixpLmdldChwKSl9cmV0dXJuIG99dmFyIHM9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSx1PWZ1bmN0aW9uKCl7cmV0dXJuIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pfXJldHVybiBlfSx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjLGw9bigxNCkscD1uKDIzKSxmPW4oMTYpLGQ9bigxMiksaD1uKDM2KSxtPW4oNjQpLGc9big3NykseT1uKDI0Niksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gcyh0LGUpLHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXRoaXMudG9PYmplY3QoKSx0PXtxdWVyeVJ1bm5pbmc6ITEsc3Vic2NyaXB0aW9uQWN0aXZlOiExLHJlc3BvbnNlRXh0ZW5zaW9uczp7fX07cmV0dXJuIGUucmVzcG9uc2VzJiZlLnJlc3BvbnNlcy5zaXplPjAmJihlLnJlc3BvbnNlcy5zaXplPjIwfHxlLnJlc3BvbnNlcy5nZXQoMCkuZGF0ZS5sZW5ndGg+MmUzKSYmKHQucmVzcG9uc2VzPWwuTGlzdCgpKSxsLm1lcmdlKGUsdCl9LHR9KGwuUmVjb3JkKGguZ2V0RGVmYXVsdFNlc3Npb24oIiIpKSk7dC5TZXNzaW9uPXY7dmFyIGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHModCxlKSx0fShsLlJlY29yZCh7cmVzdWx0SUQ6IiIsZGF0ZToiIix0aW1lOm5ldyBEYXRlLGlzU2NoZW1hRXJyb3I6ITF9KSk7dC5SZXNwb25zZVJlY29yZD1iLHQuc2Vzc2lvbkZyb21UYWI9aTt2YXIgeD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gcyh0LGUpLHR9KGwuUmVjb3JkKHtzZXNzaW9uczpsLk9yZGVyZWRNYXAoe30pLHNlbGVjdGVkU2Vzc2lvbklkOiIiLHNlc3Npb25Db3VudDowLGhlYWRlcnM6IiJ9KSk7dC5TZXNzaW9uU3RhdGU9eCx0Lm1ha2VTZXNzaW9uU3RhdGU9bzt2YXIgQz1wLmhhbmRsZUFjdGlvbnMoKGM9e30sY1twLmNvbWJpbmVBY3Rpb25zKGYuZWRpdFF1ZXJ5LGYuZWRpdFZhcmlhYmxlcyxmLmVkaXRIZWFkZXJzLGYuZWRpdEVuZHBvaW50LGYuc2V0RWRpdG9yRmxleCxmLm9wZW5RdWVyeVZhcmlhYmxlcyxmLmNsb3NlUXVlcnlWYXJpYWJsZXMsZi5zZXRWYXJpYWJsZUVkaXRvckhlaWdodCxmLnNldFJlc3BvbnNlVHJhY2luZ0hlaWdodCxmLnNldFRyYWNpbmdTdXBwb3J0ZWQsZi5zZXRWYXJpYWJsZVRvVHlwZSxmLnNldE9wZXJhdGlvbnMsZi5zZXRPcGVyYXRpb25OYW1lLGYuc2V0U3Vic2NyaXB0aW9uQWN0aXZlLGYuc3RhcnRRdWVyeSxmLnNldFF1ZXJ5VHlwZXMsZi5lZGl0TmFtZSxmLnNldFJlc3BvbnNlRXh0ZW5zaW9ucyxmLnNldEN1cnJlbnRRdWVyeVN0YXJ0VGltZSxmLnNldEN1cnJlbnRRdWVyeUVuZFRpbWUpXT1mdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPU9iamVjdC5rZXlzKG4pLGk9MT09PXIubGVuZ3RoP3JbMF06clsxXSxvPVsic2Vzc2lvbnMiLGQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWQoZSksaV07cmV0dXJuIGUuc2V0SW4obyxuW2ldKX0sYy5TVEFSVF9RVUVSWT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJxdWVyeVJ1bm5pbmciXSwhMCkuc2V0SW4oWyJzZXNzaW9ucyIsZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSwicmVzcG9uc2VFeHRlbnNpb25zIl0sdm9pZCAwKX0sYy5DTE9TRV9UUkFDSU5HPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnJlc3BvbnNlVHJhY2luZ0hlaWdodDtyZXR1cm4gZS5tZXJnZURlZXBJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpXSxsLk1hcCh7cmVzcG9uc2VUcmFjaW5nSGVpZ2h0Om4scmVzcG9uc2VUcmFjaW5nT3BlbjohMX0pKX0sYy5UT0dHTEVfVFJBQ0lORz1mdW5jdGlvbihlKXt2YXIgdD1bInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJyZXNwb25zZVRyYWNpbmdPcGVuIl07cmV0dXJuIGUuc2V0SW4odCwhZS5nZXRJbih0KSl9LGMuT1BFTl9UUkFDSU5HPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnJlc3BvbnNlVHJhY2luZ0hlaWdodDtyZXR1cm4gZS5tZXJnZURlZXBJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpXSxsLk1hcCh7cmVzcG9uc2VUcmFjaW5nSGVpZ2h0Om4scmVzcG9uc2VUcmFjaW5nT3BlbjohMH0pKX0sYy5DTE9TRV9WQVJJQUJMRVM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQudmFyaWFibGVFZGl0b3JIZWlnaHQ7cmV0dXJuIGUubWVyZ2VEZWVwSW4oWyJzZXNzaW9ucyIsZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKV0sbC5NYXAoe3ZhcmlhYmxlRWRpdG9ySGVpZ2h0Om4sdmFyaWFibGVFZGl0b3JPcGVuOiExfSkpfSxjLk9QRU5fVkFSSUFCTEVTPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnZhcmlhYmxlRWRpdG9ySGVpZ2h0O3JldHVybiBlLm1lcmdlRGVlcEluKFsic2Vzc2lvbnMiLGQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWQoZSldLGwuTWFwKHt2YXJpYWJsZUVkaXRvckhlaWdodDpuLHZhcmlhYmxlRWRpdG9yT3BlbjohMH0pKX0sYy5UT0dHTEVfVkFSSUFCTEVTPWZ1bmN0aW9uKGUpe3ZhciB0PVsic2Vzc2lvbnMiLGQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWQoZSksInZhcmlhYmxlRWRpdG9yT3BlbiJdO3JldHVybiBlLnNldEluKHQsIWUuZ2V0SW4odCkpfSxjLkFERF9SRVNQT05TRT1mdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4ucmVzcG9uc2UsaT1uLnNlc3Npb25JZDtyZXR1cm4gZS51cGRhdGVJbihbInNlc3Npb25zIixpLCJyZXNwb25zZXMiXSxmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKHIpfSl9LGMuU0VUX1JFU1BPTlNFPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9bi5yZXNwb25zZSxpPW4uc2Vzc2lvbklkO3JldHVybiBlLnNldEluKFsic2Vzc2lvbnMiLGksInJlc3BvbnNlcyJdLGwuTGlzdChbcl0pKX0sYy5DTEVBUl9SRVNQT05TRVM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0SW4oWyJzZXNzaW9ucyIsZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSwicmVzcG9uc2VzIl0sbC5MaXN0KCkpfSxjLkZFVENIX1NDSEVNQT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJpc1JlbG9hZGluZ1NjaGVtYSJdLCEwKX0sYy5SRUZFVENIX1NDSEVNQT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJpc1JlbG9hZGluZ1NjaGVtYSJdLCEwKX0sYy5TVE9QX1FVRVJZPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnNlc3Npb25JZDtyZXR1cm4gZS5tZXJnZUluKFsic2Vzc2lvbnMiLG5dLHtxdWVyeVJ1bm5pbmc6ITEsc3Vic2NyaXB0aW9uQWN0aXZlOiExfSl9LGMuU0VUX1NDUk9MTF9UT1A9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1uLnNlc3Npb25JZCxpPW4uc2Nyb2xsVG9wO3JldHVybiBlLnNlc3Npb25zLmdldChyKT9lLnNldEluKFsic2Vzc2lvbnMiLHIsInNjcm9sbFRvcCJdLGkpOmV9LGMuU0NIRU1BX0ZFVENISU5HX1NVQ0NFU1M9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1lLmdldCgic2Vzc2lvbnMiKS5tYXAoZnVuY3Rpb24oZSl7aWYoZS5lbmRwb2ludD09PW4uZW5kcG9pbnQpe3ZhciB0PXt0cmFjaW5nU3VwcG9ydGVkOm4udHJhY2luZ1N1cHBvcnRlZCxpc1JlbG9hZGluZ1NjaGVtYTohMSxlbmRwb2ludFVucmVhY2hhYmxlOiExfSxyPWUucmVzcG9uc2VzP2UucmVzcG9uc2VzLmZpcnN0KCk6bnVsbDtyZXR1cm4gciYmMT09PWUucmVzcG9uc2VzLnNpemUmJnIuaXNTY2hlbWFFcnJvciYmKHQucmVzcG9uc2VzPWwuTGlzdChbXSkpLGUubWVyZ2UobC5NYXAodCkpfXJldHVybiBlfSk7cmV0dXJuIGUuc2V0KCJzZXNzaW9ucyIscil9LGMuU0VUX0VORFBPSU5UX1VOUkVBQ0hBQkxFPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9ZS5nZXQoInNlc3Npb25zIikubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0KCJlbmRwb2ludCIpPT09bi5lbmRwb2ludD9lLm1lcmdlKGwuTWFwKHtlbmRwb2ludFVucmVhY2hhYmxlOiEwfSkpOmV9KTtyZXR1cm4gZS5zZXQoInNlc3Npb25zIixyKX0sYy5TQ0hFTUFfRkVUQ0hJTkdfRVJST1I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1lLmdldCgic2Vzc2lvbnMiKS5tYXAoZnVuY3Rpb24oZSx0KXtpZihlLmdldCgiZW5kcG9pbnQiKT09PW4uZW5kcG9pbnQpe3ZhciByPWUucmVzcG9uc2VzO2lmKHIuc2l6ZTw9MSl7dmFyIGk9ZS5yZXNwb25zZXM/ZS5yZXNwb25zZXMuZmlyc3QoKTpudWxsO2kmJiFpLmlzU2NoZW1hRXJyb3J8fChpPW5ldyBiKHtyZXN1bHRJRDptKCksaXNTY2hlbWFFcnJvcjohMCxkYXRlOkpTT04uc3RyaW5naWZ5KGcuZm9ybWF0RXJyb3Iobi5lcnJvciwhMCksbnVsbCwyKSx0aW1lOm5ldyBEYXRlfSkpLHI9bC5MaXN0KFtpXSl9cmV0dXJuIGUubWVyZ2UobC5NYXAoe2lzUmVsb2FkaW5nU2NoZW1hOiExLGVuZHBvaW50VW5yZWFjaGFibGU6ITAscmVzcG9uc2VzOnJ9KSl9cmV0dXJuIGV9KTtyZXR1cm4gZS5zZXQoInNlc3Npb25zIixyKX0sYy5TRVRfU0VMRUNURURfU0VTU0lPTl9JRD1mdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZC5zZXNzaW9uSWQ7cmV0dXJuIGUuc2V0KCJzZWxlY3RlZFNlc3Npb25JZCIsbil9LGMuT1BFTl9TRVRUSU5HU19UQUI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxuPWUuc2Vzc2lvbnMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoImlzU2V0dGluZ3NUYWIiLCExKX0pO3JldHVybiBufHwobj1yKCkubWVyZ2Uoe2lzU2V0dGluZ3NUYWI6ITAsaXNGaWxlOiEwLG5hbWU6IlNldHRpbmdzIixjaGFuZ2VkOiExfSksdD10LnNldEluKFsic2Vzc2lvbnMiLG4uaWRdLG4pKSx0LnNldCgic2VsZWN0ZWRTZXNzaW9uSWQiLG4uaWQpfSxjLk9QRU5fQ09ORklHX1RBQj1mdW5jdGlvbihlKXt2YXIgdD1lLG49ZS5zZXNzaW9ucy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiaXNDb25maWdUYWIiLCExKX0pO3JldHVybiBufHwobj1yKCkubWVyZ2Uoe2lzQ29uZmlnVGFiOiEwLGlzRmlsZTohMCxuYW1lOiJHcmFwaFFMIENvbmZpZyIsY2hhbmdlZDohMX0pLHQ9dC5zZXRJbihbInNlc3Npb25zIixuLmlkXSxuKSksdC5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixuLmlkKX0sYy5ORVdfRklMRV9UQUI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQsaT1uLmZpbGVOYW1lLG89bi5maWxlUGF0aCxhPW4uZmlsZSxzPWUsdT1lLnNlc3Npb25zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJuYW1lIiwiIik9PT1pfSk7cmV0dXJuIHV8fCh1PXIoKS5tZXJnZSh7aXNGaWxlOiEwLG5hbWU6aSxjaGFuZ2VkOiExLGZpbGU6YSxmaWxlUGF0aDpvfSkscz1zLnNldEluKFsic2Vzc2lvbnMiLHUuaWRdLHUpKSxzLnNldCgic2VsZWN0ZWRTZXNzaW9uSWQiLHUuaWQpLnNldCgic2Vzc2lvbkNvdW50IixzLnNlc3Npb25zLnNpemUpfSxjLk5FV19TRVNTSU9OPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLGk9bi5yZXVzZUhlYWRlcnMsbz1uLmVuZHBvaW50LGE9ZS5zZXNzaW9ucy5maXJzdCgpLHM9e3F1ZXJ5OiIiLGlzUmVsb2FkaW5nU2NoZW1hOmEuaXNSZWxvYWRpbmdTY2hlbWEsZW5kcG9pbnRVbnJlYWNoYWJsZTphLmVuZHBvaW50VW5yZWFjaGFibGV9O2EuZW5kcG9pbnRVbnJlYWNoYWJsZSYmKHMucmVzcG9uc2VzPWEucmVzcG9uc2VzKTt2YXIgdT1yKG98fGEuZW5kcG9pbnQpLm1lcmdlKHMpO2lmKGkpe3ZhciBjPWQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWQoZSksbD1lLnNlc3Npb25zLmdldChjKTt1PXUuc2V0KCJoZWFkZXJzIixsLmhlYWRlcnMpfWVsc2UgdT11LnNldCgiaGVhZGVycyIsZS5oZWFkZXJzKTtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIix1LmlkXSx1KS5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIix1LmlkKS5zZXQoInNlc3Npb25Db3VudCIsZS5zZXNzaW9ucy5zaXplKzEpfSxjLklOSkVDVF9IRUFERVJTPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLGk9bi5oZWFkZXJzLG89bi5lbmRwb2ludDtpZighaXx8IiI9PT1pfHwwPT09T2JqZWN0LmtleXMoaSkubGVuZ3RoKXJldHVybiBlO3ZhciBhPSJzdHJpbmciPT09dHlwZW9mIGk/aTpKU09OLnN0cmluZ2lmeShpLG51bGwsMikscz1kLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLHU9ZS5zZXQoImhlYWRlcnMiLGEpLGM9ZS5zZXNzaW9ucy5nZXQocyk7aWYoYy5oZWFkZXJzPT09YSlyZXR1cm4gdTtpZihjLnF1ZXJ5PT09aC5kZWZhdWx0UXVlcnkpcmV0dXJuIHUuc2V0SW4oWyJzZXNzaW9ucyIscywiaGVhZGVycyJdLGEpO3ZhciBsPXIobykuc2V0KCJoZWFkZXJzIixhKTtyZXR1cm4gdS5zZXRJbihbInNlc3Npb25zIixsLmlkXSxsKS5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixsLmlkKS5zZXQoInNlc3Npb25Db3VudCIsZS5zZXNzaW9ucy5zaXplKzEpfSxjLkRVUExJQ0FURV9TRVNTSU9OPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnNlc3Npb24scj1uLnNldCgiaWQiLG0oKSk7cmV0dXJuIGUuc2V0SW4oWyJzZXNzaW9ucyIsci5pZF0scikuc2V0KCJzZWxlY3RlZFNlc3Npb25JZCIsci5pZCkuc2V0KCJzZXNzaW9uQ291bnQiLGUuc2Vzc2lvbnMuc2l6ZSsxKX0sYy5ORVdfU0VTU0lPTl9GUk9NX1FVRVJZPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnF1ZXJ5LGk9cigpLnNldCgicXVlcnkiLG4pO3JldHVybiBlLnNldEluKFsic2Vzc2lvbnMiLGkuaWRdLGkpLnNldCgic2Vzc2lvbkNvdW50IixlLnNlc3Npb25zLnNpemUrMSl9LGMuQ0xPU0VfU0VMRUNURURfVEFCPWZ1bmN0aW9uKGUpe3JldHVybiBhKGUsZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSkuc2V0KCJzZXNzaW9uQ291bnQiLGUuc2Vzc2lvbnMuc2l6ZS0xKX0sYy5TRUxFQ1RfTkVYVF9UQUI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSxuPWUuc2Vzc2lvbnMuc2l6ZSxyPWUuc2Vzc2lvbnMua2V5U2VxKCksaT1yLmluZGV4T2YodCk7cmV0dXJuIGkrMTxuP2Uuc2V0KCJzZWxlY3RlZFNlc3Npb25JZCIsci5nZXQoaSsxKSk6ZS5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixyLmdldCgwKSl9LGMuU0VMRUNUX1BSRVZfVEFCPWZ1bmN0aW9uKGUpe3ZhciB0PWQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWQoZSksbj1lLnNlc3Npb25zLnNpemUscj1lLnNlc3Npb25zLmtleVNlcSgpLGk9ci5pbmRleE9mKHQpO3JldHVybiBpLTE+PTA/ZS5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixyLmdldChpLTEpKTplLnNldCgic2VsZWN0ZWRTZXNzaW9uSWQiLHIuZ2V0KG4tMSkpfSxjLlNFTEVDVF9UQUJfSU5ERVg9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQuaW5kZXgscj1lLnNlc3Npb25zLmtleVNlcSgpO3JldHVybiBlLnNldCgic2VsZWN0ZWRTZXNzaW9uSWQiLHIuZ2V0KG4pKX0sYy5TRUxFQ1RfVEFCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnNlc3Npb25JZDtyZXR1cm4gZS5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixuKX0sYy5DTE9TRV9UQUI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQucGF5bG9hZC5zZXNzaW9uSWQpLnNldCgic2Vzc2lvbkNvdW50IixlLnNlc3Npb25zLnNpemUtMSl9LGMuUkVPUkRFUl9UQUJTPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQucGF5bG9hZCxyPW4uc3JjLGk9bi5kZXN0LG89ZS5zZXNzaW9ucy50b0luZGV4ZWRTZXEoKSxhPVtdLHM9MDtzPG8uc2l6ZTtzKyspYS5wdXNoKHMpO2Zvcih2YXIgdT15LmFycmF5TW92ZShhLHIsaSksYz1sLk9yZGVyZWRNYXAoKSxzPTA7czxvLnNpemU7cysrKXt2YXIgcD11W3NdLGY9by5nZXQocCk7Yz1jLnNldChmLmlkLGYpfXJldHVybiBlLnNldCgic2Vzc2lvbnMiLGMpfSxjLkVESVRfU0VUVElOR1M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0SW4oWyJzZXNzaW9ucyIsZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSwiY2hhbmdlZCJdLCEwKX0sYy5TQVZFX1NFVFRJTkdTPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNldEluKFsic2Vzc2lvbnMiLGQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWQoZSksImNoYW5nZWQiXSwhMSl9LGMuRURJVF9DT05GSUc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0SW4oWyJzZXNzaW9ucyIsZC5nZXRTZWxlY3RlZFNlc3Npb25JZChlKSwiY2hhbmdlZCJdLCEwKX0sYy5TQVZFX0NPTkZJRz1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJjaGFuZ2VkIl0sITEpfSxjLkVESVRfRklMRT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJjaGFuZ2VkIl0sITApfSxjLlNBVkVfRklMRT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRJbihbInNlc3Npb25zIixkLmdldFNlbGVjdGVkU2Vzc2lvbklkKGUpLCJjaGFuZ2VkIl0sITEpfSxjKSxvKCIiKSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49QyhlLHQpO3JldHVybiIiPT09bi5zZWxlY3RlZFNlc3Npb25JZCYmZS5zZXNzaW9ucy5zaXplPjA/bi5zZXQoInNlbGVjdGVkU2Vzc2lvbklkIixlLnNlc3Npb25zLmZpcnN0KCkuaWQpOm59fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPWUuc2xpY2UoMCk7aWYobj49ci5sZW5ndGgpZm9yKHZhciBpPW4tci5sZW5ndGg7MStpLS07KXIucHVzaCh2b2lkIDApO3JldHVybiByLnNwbGljZShuLDAsci5zcGxpY2UodCwxKVswXSkscn1mdW5jdGlvbiBpKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4tMT09PW4uaW5kZXhPZihyKSYmKHRbcl09ZVtyXSksdH0se30pfWZ1bmN0aW9uIG8oZSx0KXtmb3IoO2U7KXtpZih0KGUpKXJldHVybiBlO2U9ZS5wYXJlbnROb2RlfX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gbjxlP2U6bj50P3Q6bn1mdW5jdGlvbiBzKGUpe3JldHVybiJweCI9PT1lLnN1YnN0cigtMik/cGFyc2VGbG9hdChlKTowfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJue3RvcDpzKHQubWFyZ2luVG9wKSxyaWdodDpzKHQubWFyZ2luUmlnaHQpLGJvdHRvbTpzKHQubWFyZ2luQm90dG9tKSxsZWZ0OnModC5tYXJnaW5MZWZ0KX19ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXQuZGlzcGxheU5hbWV8fHQubmFtZTtyZXR1cm4gbj9lKyIoIituKyIpIjplfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUudG91Y2hlcyYmZS50b3VjaGVzLmxlbmd0aD97eDplLnRvdWNoZXNbMF0ucGFnZVgseTplLnRvdWNoZXNbMF0ucGFnZVl9OmUuY2hhbmdlZFRvdWNoZXMmJmUuY2hhbmdlZFRvdWNoZXMubGVuZ3RoP3t4OmUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgseTplLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZfTp7eDplLnBhZ2VYLHk6ZS5wYWdlWX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS50b3VjaGVzJiZlLnRvdWNoZXMubGVuZ3RofHxlLmNoYW5nZWRUb3VjaGVzJiZlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aH1mdW5jdGlvbiBmKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0b3A6MCxsZWZ0OjB9O2lmKGUpe3ZhciByPXt0b3A6bi50b3ArZS5vZmZzZXRUb3AsbGVmdDpuLmxlZnQrZS5vZmZzZXRMZWZ0fTtyZXR1cm4gZS5wYXJlbnROb2RlIT09dD9mKGUucGFyZW50Tm9kZSx0LHIpOnJ9fWZ1bmN0aW9uIGQoZSl7dmFyIHQ9ZS5sb2NrT2Zmc2V0LG49ZS53aWR0aCxyPWUuaGVpZ2h0LGk9dCxvPXQsYT0icHgiO2lmKCJzdHJpbmciPT09dHlwZW9mIHQpe3ZhciBzPS9eWystXT9cZCooPzpcLlxkKik/KHB4fCUpJC8uZXhlYyh0KTsoMCxtLmRlZmF1bHQpKG51bGwhPT1zLCdsb2NrT2Zmc2V0IHZhbHVlIHNob3VsZCBiZSBhIG51bWJlciBvciBhIHN0cmluZyBvZiBhIG51bWJlciBmb2xsb3dlZCBieSAicHgiIG9yICIlIi4gR2l2ZW4gJXMnLHQpLGk9bz1wYXJzZUZsb2F0KHQpLGE9c1sxXX1yZXR1cm4oMCxtLmRlZmF1bHQpKGlzRmluaXRlKGkpJiZpc0Zpbml0ZShvKSwibG9ja09mZnNldCB2YWx1ZSBzaG91bGQgYmUgYSBmaW5pdGUuIEdpdmVuICVzIix0KSwiJSI9PT1hJiYoaT1pKm4vMTAwLG89bypyLzEwMCkse3g6aSx5Om99fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnZlbmRvclByZWZpeD10LmV2ZW50cz12b2lkIDAsdC5hcnJheU1vdmU9cix0Lm9taXQ9aSx0LmNsb3Nlc3Q9byx0LmxpbWl0PWEsdC5nZXRFbGVtZW50TWFyZ2luPXUsdC5wcm92aWRlRGlzcGxheU5hbWU9Yyx0LmdldFBvc2l0aW9uPWwsdC5pc1RvdWNoRXZlbnQ9cCx0LmdldEVkZ2VPZmZzZXQ9Zix0LmdldExvY2tQaXhlbE9mZnNldD1kO3ZhciBoPW4oMjApLG09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShoKTt0LmV2ZW50cz17c3RhcnQ6WyJ0b3VjaHN0YXJ0IiwibW91c2Vkb3duIl0sbW92ZTpbInRvdWNobW92ZSIsIm1vdXNlbW92ZSJdLGVuZDpbInRvdWNoZW5kIiwidG91Y2hjYW5jZWwiLCJtb3VzZXVwIl19LHQudmVuZG9yUHJlZml4PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PT10eXBlb2Ygd2luZG93fHwidW5kZWZpbmVkIj09PXR5cGVvZiBkb2N1bWVudClyZXR1cm4iIjt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIiIpfHxbIi1tb3otaGlkZGVuLWlmcmFtZSJdLHQ9KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLmpvaW4oIiIpLm1hdGNoKC8tKG1venx3ZWJraXR8bXMpLS8pfHwiIj09PWUuT0xpbmsmJlsiIiwibyJdKVsxXTtzd2l0Y2godCl7Y2FzZSJtcyI6cmV0dXJuIm1zIjtkZWZhdWx0OnJldHVybiB0JiZ0Lmxlbmd0aD90WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSk6IiJ9fSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDUyNCksaT1uKDI1OSk7dC50aGVtZT1pLnRoZW1lO3ZhciBvPXIsYT1vLmRlZmF1bHQscz1vLmNzcyx1PW8uaW5qZWN0R2xvYmFsLGM9by5rZXlmcmFtZXMsbD1vLlRoZW1lUHJvdmlkZXIscD1vLndpdGhUaGVtZSxmPW8uY3JlYXRlR2xvYmFsU3R5bGU7dC5jc3M9cyx0LmluamVjdEdsb2JhbD11LHQua2V5ZnJhbWVzPWMsdC5UaGVtZVByb3ZpZGVyPWwsdC53aXRoVGhlbWU9cCx0LmNyZWF0ZUdsb2JhbFN0eWxlPWYsdC5kZWZhdWx0PWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzLmVuY29kZT1uKDUzOSksZS5leHBvcnRzLmRlY29kZT1uKDU0MCksZS5leHBvcnRzLmZvcm1hdD1uKDU0MSksZS5leHBvcnRzLnBhcnNlPW4oNTQyKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMiksbig1OTMpKX0oZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5mcm9tPXRoaXMudG89MH1mdW5jdGlvbiBuKGUpe3JldHVybiEwPT09ZSYmKGU9e30pLG51bGw9PWUuZ3V0dGVyJiYoZS5ndXR0ZXI9IkNvZGVNaXJyb3ItZm9sZGd1dHRlciIpLG51bGw9PWUuaW5kaWNhdG9yT3BlbiYmKGUuaW5kaWNhdG9yT3Blbj0iQ29kZU1pcnJvci1mb2xkZ3V0dGVyLW9wZW4iKSxudWxsPT1lLmluZGljYXRvckZvbGRlZCYmKGUuaW5kaWNhdG9yRm9sZGVkPSJDb2RlTWlycm9yLWZvbGRndXR0ZXItZm9sZGVkIiksZX1mdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWUuZmluZE1hcmtzKHAodCwwKSxwKHQrMSwwKSkscj0wO3I8bi5sZW5ndGg7KytyKWlmKG5bcl0uX19pc0ZvbGQmJm5bcl0uZmluZCgpLmZyb20ubGluZT09dClyZXR1cm4gbltyXX1mdW5jdGlvbiBpKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuY2xhc3NOYW1lPWUrIiBDb2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUiLHR9cmV0dXJuIGUuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgbz1lLnN0YXRlLmZvbGRHdXR0ZXIub3B0aW9ucyxhPXQscz1lLmZvbGRPcHRpb24obywibWluRm9sZFNpemUiKSx1PWUuZm9sZE9wdGlvbihvLCJyYW5nZUZpbmRlciIpO2UuZWFjaExpbmUodCxuLGZ1bmN0aW9uKHQpe3ZhciBuPW51bGw7aWYocihlLGEpKW49aShvLmluZGljYXRvckZvbGRlZCk7ZWxzZXt2YXIgYz1wKGEsMCksbD11JiZ1KGUsYyk7bCYmbC50by5saW5lLWwuZnJvbS5saW5lPj1zJiYobj1pKG8uaW5kaWNhdG9yT3BlbikpfWUuc2V0R3V0dGVyTWFya2VyKHQsby5ndXR0ZXIsbiksKythfSl9ZnVuY3Rpb24gYShlKXt2YXIgdD1lLmdldFZpZXdwb3J0KCksbj1lLnN0YXRlLmZvbGRHdXR0ZXI7biYmKGUub3BlcmF0aW9uKGZ1bmN0aW9uKCl7byhlLHQuZnJvbSx0LnRvKX0pLG4uZnJvbT10LmZyb20sbi50bz10LnRvKX1mdW5jdGlvbiBzKGUsdCxuKXt2YXIgaT1lLnN0YXRlLmZvbGRHdXR0ZXI7aWYoaSl7dmFyIG89aS5vcHRpb25zO2lmKG49PW8uZ3V0dGVyKXt2YXIgYT1yKGUsdCk7YT9hLmNsZWFyKCk6ZS5mb2xkQ29kZShwKHQsMCksby5yYW5nZUZpbmRlcil9fX1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuc3RhdGUuZm9sZEd1dHRlcjtpZih0KXt2YXIgbj10Lm9wdGlvbnM7dC5mcm9tPXQudG89MCxjbGVhclRpbWVvdXQodC5jaGFuZ2VVcGRhdGUpLHQuY2hhbmdlVXBkYXRlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthKGUpfSxuLmZvbGRPbkNoYW5nZVRpbWVTcGFufHw2MDApfX1mdW5jdGlvbiBjKGUpe3ZhciB0PWUuc3RhdGUuZm9sZEd1dHRlcjtpZih0KXt2YXIgbj10Lm9wdGlvbnM7Y2xlYXJUaW1lb3V0KHQuY2hhbmdlVXBkYXRlKSx0LmNoYW5nZVVwZGF0ZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIG49ZS5nZXRWaWV3cG9ydCgpO3QuZnJvbT09dC50b3x8bi5mcm9tLXQudG8+MjB8fHQuZnJvbS1uLnRvPjIwP2EoZSk6ZS5vcGVyYXRpb24oZnVuY3Rpb24oKXtuLmZyb208dC5mcm9tJiYobyhlLG4uZnJvbSx0LmZyb20pLHQuZnJvbT1uLmZyb20pLG4udG8+dC50byYmKG8oZSx0LnRvLG4udG8pLHQudG89bi50byl9KX0sbi51cGRhdGVWaWV3cG9ydFRpbWVTcGFufHw0MDApfX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49ZS5zdGF0ZS5mb2xkR3V0dGVyO2lmKG4pe3ZhciByPXQubGluZTtyPj1uLmZyb20mJnI8bi50byYmbyhlLHIscisxKX19ZS5kZWZpbmVPcHRpb24oImZvbGRHdXR0ZXIiLCExLGZ1bmN0aW9uKHIsaSxvKXtvJiZvIT1lLkluaXQmJihyLmNsZWFyR3V0dGVyKHIuc3RhdGUuZm9sZEd1dHRlci5vcHRpb25zLmd1dHRlciksci5zdGF0ZS5mb2xkR3V0dGVyPW51bGwsci5vZmYoImd1dHRlckNsaWNrIixzKSxyLm9mZigiY2hhbmdlIix1KSxyLm9mZigidmlld3BvcnRDaGFuZ2UiLGMpLHIub2ZmKCJmb2xkIixsKSxyLm9mZigidW5mb2xkIixsKSxyLm9mZigic3dhcERvYyIsdSkpLGkmJihyLnN0YXRlLmZvbGRHdXR0ZXI9bmV3IHQobihpKSksYShyKSxyLm9uKCJndXR0ZXJDbGljayIscyksci5vbigiY2hhbmdlIix1KSxyLm9uKCJ2aWV3cG9ydENoYW5nZSIsYyksci5vbigiZm9sZCIsbCksci5vbigidW5mb2xkIixsKSxyLm9uKCJzd2FwRG9jIix1KSl9KTt2YXIgcD1lLlBvc30pfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpe2UobigyKSxuKDM5KSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuLHIsaSl7ZS5vcGVuRGlhbG9nP2Uub3BlbkRpYWxvZyh0LGkse3ZhbHVlOnIsc2VsZWN0VmFsdWVPbk9wZW46ITB9KTppKHByb21wdChuLHIpKX1mdW5jdGlvbiBuKGUsdCl7dmFyIG49TnVtYmVyKHQpO3JldHVybi9eWy0rXS8udGVzdCh0KT9lLmdldEN1cnNvcigpLmxpbmUrbjpuLTF9ZS5jb21tYW5kcy5qdW1wVG9MaW5lPWZ1bmN0aW9uKGUpe3ZhciByPWUuZ2V0Q3Vyc29yKCk7dChlLCdKdW1wIHRvIGxpbmU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iIGNsYXNzPSJDb2RlTWlycm9yLXNlYXJjaC1maWVsZCIvPiA8c3BhbiBzdHlsZT0iY29sb3I6ICM4ODgiIGNsYXNzPSJDb2RlTWlycm9yLXNlYXJjaC1oaW50Ij4oVXNlIGxpbmU6Y29sdW1uIG9yIHNjcm9sbCUgc3ludGF4KTwvc3Bhbj4nLCJKdW1wIHRvIGxpbmU6IixyLmxpbmUrMSsiOiIrci5jaCxmdW5jdGlvbih0KXtpZih0KXt2YXIgaTtpZihpPS9eXHMqKFtcK1wtXT9cZCspXHMqXDpccyooXGQrKVxzKiQvLmV4ZWModCkpZS5zZXRDdXJzb3IobihlLGlbMV0pLE51bWJlcihpWzJdKSk7ZWxzZSBpZihpPS9eXHMqKFtcK1wtXT9cZCsoXC5cZCspPylcJVxzKi8uZXhlYyh0KSl7dmFyIG89TWF0aC5yb3VuZChlLmxpbmVDb3VudCgpKk51bWJlcihpWzFdKS8xMDApOy9eWy0rXS8udGVzdChpWzFdKSYmKG89ci5saW5lK28rMSksZS5zZXRDdXJzb3Ioby0xLHIuY2gpfWVsc2UoaT0vXlxzKlw6P1xzKihbXCtcLV0/XGQrKVxzKi8uZXhlYyh0KSkmJmUuc2V0Q3Vyc29yKG4oZSxpWzFdKSxyLmNoKX19KX0sZS5rZXlNYXAuZGVmYXVsdFsiQWx0LUciXT0ianVtcFRvTGluZSJ9KX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMiksbigzOCksbig2OSkpfShmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0LG4scil7aWYocjwwJiYwPT1uLmNoKXJldHVybiB0LmNsaXBQb3MoZChuLmxpbmUtMSkpO3ZhciBpPXQuZ2V0TGluZShuLmxpbmUpO2lmKHI+MCYmbi5jaD49aS5sZW5ndGgpcmV0dXJuIHQuY2xpcFBvcyhkKG4ubGluZSsxLDApKTtmb3IodmFyIG8sYT0ic3RhcnQiLHM9bi5jaCx1PXI8MD8wOmkubGVuZ3RoLGM9MDtzIT11O3MrPXIsYysrKXt2YXIgbD1pLmNoYXJBdChyPDA/cy0xOnMpLHA9Il8iIT1sJiZlLmlzV29yZENoYXIobCk/InciOiJvIjtpZigidyI9PXAmJmwudG9VcHBlckNhc2UoKT09bCYmKHA9IlciKSwic3RhcnQiPT1hKSJvIiE9cCYmKGE9ImluIixvPXApO2Vsc2UgaWYoImluIj09YSYmbyE9cCl7aWYoInciPT1vJiYiVyI9PXAmJnI8MCYmcy0tLCJXIj09byYmInciPT1wJiZyPjApe289InciO2NvbnRpbnVlfWJyZWFrfX1yZXR1cm4gZChuLmxpbmUscyl9ZnVuY3Rpb24gbihlLG4pe2UuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHIpe3JldHVybiBlLmRpc3BsYXkuc2hpZnR8fGUuZG9jLmV4dGVuZHx8ci5lbXB0eSgpP3QoZS5kb2Msci5oZWFkLG4pOm48MD9yLmZyb20oKTpyLnRvKCl9KX1mdW5jdGlvbiByKHQsbil7aWYodC5pc1JlYWRPbmx5KCkpcmV0dXJuIGUuUGFzczt0Lm9wZXJhdGlvbihmdW5jdGlvbigpe2Zvcih2YXIgZT10Lmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoLHI9W10saT0tMSxvPTA7bzxlO28rKyl7dmFyIGE9dC5saXN0U2VsZWN0aW9ucygpW29dLmhlYWQ7aWYoIShhLmxpbmU8PWkpKXt2YXIgcz1kKGEubGluZSsobj8wOjEpLDApO3QucmVwbGFjZVJhbmdlKCJcbiIscyxudWxsLCIraW5zZXJ0TGluZSIpLHQuaW5kZW50TGluZShzLmxpbmUsbnVsbCwhMCksci5wdXNoKHtoZWFkOnMsYW5jaG9yOnN9KSxpPWEubGluZSsxfX10LnNldFNlbGVjdGlvbnMocil9KSx0LmV4ZWNDb21tYW5kKCJpbmRlbnRBdXRvIil9ZnVuY3Rpb24gaSh0LG4pe2Zvcih2YXIgcj1uLmNoLGk9cixvPXQuZ2V0TGluZShuLmxpbmUpO3ImJmUuaXNXb3JkQ2hhcihvLmNoYXJBdChyLTEpKTspLS1yO2Zvcig7aTxvLmxlbmd0aCYmZS5pc1dvcmRDaGFyKG8uY2hhckF0KGkpKTspKytpO3JldHVybntmcm9tOmQobi5saW5lLHIpLHRvOmQobi5saW5lLGkpLHdvcmQ6by5zbGljZShyLGkpfX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPWUubGlzdFNlbGVjdGlvbnMoKSxyPVtdLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxhPWUuZmluZFBvc1Yoby5hbmNob3IsdCwibGluZSIsby5hbmNob3IuZ29hbENvbHVtbikscz1lLmZpbmRQb3NWKG8uaGVhZCx0LCJsaW5lIixvLmhlYWQuZ29hbENvbHVtbik7YS5nb2FsQ29sdW1uPW51bGwhPW8uYW5jaG9yLmdvYWxDb2x1bW4/by5hbmNob3IuZ29hbENvbHVtbjplLmN1cnNvckNvb3JkcyhvLmFuY2hvciwiZGl2IikubGVmdCxzLmdvYWxDb2x1bW49bnVsbCE9by5oZWFkLmdvYWxDb2x1bW4/by5oZWFkLmdvYWxDb2x1bW46ZS5jdXJzb3JDb29yZHMoby5oZWFkLCJkaXYiKS5sZWZ0O3ZhciB1PXthbmNob3I6YSxoZWFkOnN9O3IucHVzaChvKSxyLnB1c2godSl9ZS5zZXRTZWxlY3Rpb25zKHIpfWZ1bmN0aW9uIGEoZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uZnJvbSgpPT10JiZlW3JdLnRvKCk9PW4pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG49dC5saXN0U2VsZWN0aW9ucygpLHI9W10saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLGE9by5oZWFkLHM9dC5zY2FuRm9yQnJhY2tldChhLC0xKTtpZighcylyZXR1cm4hMTtmb3IoOzspe3ZhciB1PXQuc2NhbkZvckJyYWNrZXQoYSwxKTtpZighdSlyZXR1cm4hMTtpZih1LmNoPT1oLmNoYXJBdChoLmluZGV4T2Yocy5jaCkrMSkpe3ZhciBjPWQocy5wb3MubGluZSxzLnBvcy5jaCsxKTtpZigwIT1lLmNtcFBvcyhjLG8uZnJvbSgpKXx8MCE9ZS5jbXBQb3ModS5wb3Msby50bygpKSl7ci5wdXNoKHthbmNob3I6YyxoZWFkOnUucG9zfSk7YnJlYWt9aWYoIShzPXQuc2NhbkZvckJyYWNrZXQocy5wb3MsLTEpKSlyZXR1cm4hMX1hPWQodS5wb3MubGluZSx1LnBvcy5jaCsxKX19cmV0dXJuIHQuc2V0U2VsZWN0aW9ucyhyKSwhMH1mdW5jdGlvbiB1KHQsbil7aWYodC5pc1JlYWRPbmx5KCkpcmV0dXJuIGUuUGFzcztmb3IodmFyIHIsaT10Lmxpc3RTZWxlY3Rpb25zKCksbz1bXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYoIXMuZW1wdHkoKSl7Zm9yKHZhciB1PXMuZnJvbSgpLmxpbmUsYz1zLnRvKCkubGluZTthPGkubGVuZ3RoLTEmJmlbYSsxXS5mcm9tKCkubGluZT09YzspYz1pWysrYV0udG8oKS5saW5lO2lbYV0udG8oKS5jaHx8Yy0tLG8ucHVzaCh1LGMpfX1vLmxlbmd0aD9yPSEwOm8ucHVzaCh0LmZpcnN0TGluZSgpLHQubGFzdExpbmUoKSksdC5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIGU9W10saT0wO2k8by5sZW5ndGg7aSs9Mil7dmFyIGE9b1tpXSxzPW9baSsxXSx1PWQoYSwwKSxjPWQocyksbD10LmdldFJhbmdlKHUsYywhMSk7bj9sLnNvcnQoKTpsLnNvcnQoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvVXBwZXJDYXNlKCkscj10LnRvVXBwZXJDYXNlKCk7cmV0dXJuIG4hPXImJihlPW4sdD1yKSxlPHQ/LTE6ZT09dD8wOjF9KSx0LnJlcGxhY2VSYW5nZShsLHUsYyksciYmZS5wdXNoKHthbmNob3I6dSxoZWFkOmQocysxLDApfSl9ciYmdC5zZXRTZWxlY3Rpb25zKGUsMCl9KX1mdW5jdGlvbiBjKHQsbil7dC5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIHI9dC5saXN0U2VsZWN0aW9ucygpLG89W10sYT1bXSxzPTA7czxyLmxlbmd0aDtzKyspe3ZhciB1PXJbc107dS5lbXB0eSgpPyhvLnB1c2gocyksYS5wdXNoKCIiKSk6YS5wdXNoKG4odC5nZXRSYW5nZSh1LmZyb20oKSx1LnRvKCkpKSl9dC5yZXBsYWNlU2VsZWN0aW9ucyhhLCJhcm91bmQiLCJjYXNlIik7Zm9yKHZhciBjLHM9by5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIHU9cltvW3NdXTtpZighKGMmJmUuY21wUG9zKHUuaGVhZCxjKT4wKSl7dmFyIGw9aSh0LHUuaGVhZCk7Yz1sLmZyb20sdC5yZXBsYWNlUmFuZ2UobihsLndvcmQpLGwuZnJvbSxsLnRvKX19fSl9ZnVuY3Rpb24gbCh0KXt2YXIgbj10LmdldEN1cnNvcigiZnJvbSIpLHI9dC5nZXRDdXJzb3IoInRvIik7aWYoMD09ZS5jbXBQb3MobixyKSl7dmFyIG89aSh0LG4pO2lmKCFvLndvcmQpcmV0dXJuO249by5mcm9tLHI9by50b31yZXR1cm57ZnJvbTpuLHRvOnIscXVlcnk6dC5nZXRSYW5nZShuLHIpLHdvcmQ6b319ZnVuY3Rpb24gcChlLHQpe3ZhciBuPWwoZSk7aWYobil7dmFyIHI9bi5xdWVyeSxpPWUuZ2V0U2VhcmNoQ3Vyc29yKHIsdD9uLnRvOm4uZnJvbSk7KHQ/aS5maW5kTmV4dCgpOmkuZmluZFByZXZpb3VzKCkpP2Uuc2V0U2VsZWN0aW9uKGkuZnJvbSgpLGkudG8oKSk6KGk9ZS5nZXRTZWFyY2hDdXJzb3Iocix0P2QoZS5maXJzdExpbmUoKSwwKTplLmNsaXBQb3MoZChlLmxhc3RMaW5lKCkpKSksKHQ/aS5maW5kTmV4dCgpOmkuZmluZFByZXZpb3VzKCkpP2Uuc2V0U2VsZWN0aW9uKGkuZnJvbSgpLGkudG8oKSk6bi53b3JkJiZlLnNldFNlbGVjdGlvbihuLmZyb20sbi50bykpfX12YXIgZj1lLmNvbW1hbmRzLGQ9ZS5Qb3M7Zi5nb1N1YndvcmRMZWZ0PWZ1bmN0aW9uKGUpe24oZSwtMSl9LGYuZ29TdWJ3b3JkUmlnaHQ9ZnVuY3Rpb24oZSl7bihlLDEpfSxmLnNjcm9sbExpbmVVcD1mdW5jdGlvbihlKXt2YXIgdD1lLmdldFNjcm9sbEluZm8oKTtpZighZS5zb21ldGhpbmdTZWxlY3RlZCgpKXt2YXIgbj1lLmxpbmVBdEhlaWdodCh0LnRvcCt0LmNsaWVudEhlaWdodCwibG9jYWwiKTtlLmdldEN1cnNvcigpLmxpbmU+PW4mJmUuZXhlY0NvbW1hbmQoImdvTGluZVVwIil9ZS5zY3JvbGxUbyhudWxsLHQudG9wLWUuZGVmYXVsdFRleHRIZWlnaHQoKSl9LGYuc2Nyb2xsTGluZURvd249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRTY3JvbGxJbmZvKCk7aWYoIWUuc29tZXRoaW5nU2VsZWN0ZWQoKSl7dmFyIG49ZS5saW5lQXRIZWlnaHQodC50b3AsImxvY2FsIikrMTtlLmdldEN1cnNvcigpLmxpbmU8PW4mJmUuZXhlY0NvbW1hbmQoImdvTGluZURvd24iKX1lLnNjcm9sbFRvKG51bGwsdC50b3ArZS5kZWZhdWx0VGV4dEhlaWdodCgpKX0sZi5zcGxpdFNlbGVjdGlvbkJ5TGluZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49W10scj0wO3I8dC5sZW5ndGg7cisrKWZvcih2YXIgaT10W3JdLmZyb20oKSxvPXRbcl0udG8oKSxhPWkubGluZTthPD1vLmxpbmU7KythKW8ubGluZT5pLmxpbmUmJmE9PW8ubGluZSYmMD09by5jaHx8bi5wdXNoKHthbmNob3I6YT09aS5saW5lP2k6ZChhLDApLGhlYWQ6YT09by5saW5lP286ZChhKX0pO2Uuc2V0U2VsZWN0aW9ucyhuLDApfSxmLnNpbmdsZVNlbGVjdGlvblRvcD1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RTZWxlY3Rpb25zKClbMF07ZS5zZXRTZWxlY3Rpb24odC5hbmNob3IsdC5oZWFkLHtzY3JvbGw6ITF9KX0sZi5zZWxlY3RMaW5lPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxpc3RTZWxlY3Rpb25zKCksbj1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07bi5wdXNoKHthbmNob3I6ZChpLmZyb20oKS5saW5lLDApLGhlYWQ6ZChpLnRvKCkubGluZSsxLDApfSl9ZS5zZXRTZWxlY3Rpb25zKG4pfSxmLmluc2VydExpbmVBZnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlLCExKX0sZi5pbnNlcnRMaW5lQmVmb3JlPWZ1bmN0aW9uKGUpe3JldHVybiByKGUsITApfSxmLnNlbGVjdE5leHRPY2N1cnJlbmNlPWZ1bmN0aW9uKHQpe3ZhciBuPXQuZ2V0Q3Vyc29yKCJmcm9tIikscj10LmdldEN1cnNvcigidG8iKSxvPXQuc3RhdGUuc3VibGltZUZpbmRGdWxsV29yZD09dC5kb2Muc2VsO2lmKDA9PWUuY21wUG9zKG4scikpe3ZhciBzPWkodCxuKTtpZighcy53b3JkKXJldHVybjt0LnNldFNlbGVjdGlvbihzLmZyb20scy50byksbz0hMH1lbHNle3ZhciB1PXQuZ2V0UmFuZ2UobixyKSxjPW8/bmV3IFJlZ0V4cCgiXFxiIit1KyJcXGIiKTp1LGw9dC5nZXRTZWFyY2hDdXJzb3IoYyxyKSxwPWwuZmluZE5leHQoKTtpZihwfHwobD10LmdldFNlYXJjaEN1cnNvcihjLGQodC5maXJzdExpbmUoKSwwKSkscD1sLmZpbmROZXh0KCkpLCFwfHxhKHQubGlzdFNlbGVjdGlvbnMoKSxsLmZyb20oKSxsLnRvKCkpKXJldHVybiBlLlBhc3M7dC5hZGRTZWxlY3Rpb24obC5mcm9tKCksbC50bygpKX1vJiYodC5zdGF0ZS5zdWJsaW1lRmluZEZ1bGxXb3JkPXQuZG9jLnNlbCl9LGYuYWRkQ3Vyc29yVG9QcmV2TGluZT1mdW5jdGlvbihlKXtvKGUsLTEpfSxmLmFkZEN1cnNvclRvTmV4dExpbmU9ZnVuY3Rpb24oZSl7byhlLDEpfTt2YXIgaD0iKCl7fVtdIjtmLnNlbGVjdFNjb3BlPWZ1bmN0aW9uKGUpe3MoZSl8fGUuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIpfSxmLnNlbGVjdEJldHdlZW5CcmFja2V0cz1mdW5jdGlvbih0KXtpZighcyh0KSlyZXR1cm4gZS5QYXNzfSxmLmdvVG9CcmFja2V0PWZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKG4pe3ZhciByPXQuc2NhbkZvckJyYWNrZXQobi5oZWFkLDEpO2lmKHImJjAhPWUuY21wUG9zKHIucG9zLG4uaGVhZCkpcmV0dXJuIHIucG9zO3ZhciBpPXQuc2NhbkZvckJyYWNrZXQobi5oZWFkLC0xKTtyZXR1cm4gaSYmZChpLnBvcy5saW5lLGkucG9zLmNoKzEpfHxuLmhlYWR9KX0sZi5zd2FwTGluZVVwPWZ1bmN0aW9uKHQpe2lmKHQuaXNSZWFkT25seSgpKXJldHVybiBlLlBhc3M7Zm9yKHZhciBuPXQubGlzdFNlbGVjdGlvbnMoKSxyPVtdLGk9dC5maXJzdExpbmUoKS0xLG89W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdLHU9cy5mcm9tKCkubGluZS0xLGM9cy50bygpLmxpbmU7by5wdXNoKHthbmNob3I6ZChzLmFuY2hvci5saW5lLTEscy5hbmNob3IuY2gpLGhlYWQ6ZChzLmhlYWQubGluZS0xLHMuaGVhZC5jaCl9KSwwIT1zLnRvKCkuY2h8fHMuZW1wdHkoKXx8LS1jLHU+aT9yLnB1c2godSxjKTpyLmxlbmd0aCYmKHJbci5sZW5ndGgtMV09YyksaT1jfXQub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKz0yKXt2YXIgbj1yW2VdLGk9cltlKzFdLGE9dC5nZXRMaW5lKG4pO3QucmVwbGFjZVJhbmdlKCIiLGQobiwwKSxkKG4rMSwwKSwiK3N3YXBMaW5lIiksaT50Lmxhc3RMaW5lKCk/dC5yZXBsYWNlUmFuZ2UoIlxuIithLGQodC5sYXN0TGluZSgpKSxudWxsLCIrc3dhcExpbmUiKTp0LnJlcGxhY2VSYW5nZShhKyJcbiIsZChpLDApLG51bGwsIitzd2FwTGluZSIpfXQuc2V0U2VsZWN0aW9ucyhvKSx0LnNjcm9sbEludG9WaWV3KCl9KX0sZi5zd2FwTGluZURvd249ZnVuY3Rpb24odCl7aWYodC5pc1JlYWRPbmx5KCkpcmV0dXJuIGUuUGFzcztmb3IodmFyIG49dC5saXN0U2VsZWN0aW9ucygpLHI9W10saT10Lmxhc3RMaW5lKCkrMSxvPW4ubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBhPW5bb10scz1hLnRvKCkubGluZSsxLHU9YS5mcm9tKCkubGluZTswIT1hLnRvKCkuY2h8fGEuZW1wdHkoKXx8cy0tLHM8aT9yLnB1c2gocyx1KTpyLmxlbmd0aCYmKHJbci5sZW5ndGgtMV09dSksaT11fXQub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXIubGVuZ3RoLTI7ZT49MDtlLT0yKXt2YXIgbj1yW2VdLGk9cltlKzFdLG89dC5nZXRMaW5lKG4pO249PXQubGFzdExpbmUoKT90LnJlcGxhY2VSYW5nZSgiIixkKG4tMSksZChuKSwiK3N3YXBMaW5lIik6dC5yZXBsYWNlUmFuZ2UoIiIsZChuLDApLGQobisxLDApLCIrc3dhcExpbmUiKSx0LnJlcGxhY2VSYW5nZShvKyJcbiIsZChpLDApLG51bGwsIitzd2FwTGluZSIpfXQuc2Nyb2xsSW50b1ZpZXcoKX0pfSxmLnRvZ2dsZUNvbW1lbnRJbmRlbnRlZD1mdW5jdGlvbihlKXtlLnRvZ2dsZUNvbW1lbnQoe2luZGVudDohMH0pfSxmLmpvaW5MaW5lcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49W10scj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIGk9dFtyXSxvPWkuZnJvbSgpLGE9by5saW5lLHM9aS50bygpLmxpbmU7cjx0Lmxlbmd0aC0xJiZ0W3IrMV0uZnJvbSgpLmxpbmU9PXM7KXM9dFsrK3JdLnRvKCkubGluZTtuLnB1c2goe3N0YXJ0OmEsZW5kOnMsYW5jaG9yOiFpLmVtcHR5KCkmJm99KX1lLm9wZXJhdGlvbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9W10saT0wO2k8bi5sZW5ndGg7aSsrKXtmb3IodmFyIG8sYT1uW2ldLHM9YS5hbmNob3ImJmQoYS5hbmNob3IubGluZS10LGEuYW5jaG9yLmNoKSx1PWEuc3RhcnQ7dTw9YS5lbmQ7dSsrKXt2YXIgYz11LXQ7dT09YS5lbmQmJihvPWQoYyxlLmdldExpbmUoYykubGVuZ3RoKzEpKSxjPGUubGFzdExpbmUoKSYmKGUucmVwbGFjZVJhbmdlKCIgIixkKGMpLGQoYysxLC9eXHMqLy5leGVjKGUuZ2V0TGluZShjKzEpKVswXS5sZW5ndGgpKSwrK3QpfXIucHVzaCh7YW5jaG9yOnN8fG8saGVhZDpvfSl9ZS5zZXRTZWxlY3Rpb25zKHIsMCl9KX0sZi5kdXBsaWNhdGVMaW5lPWZ1bmN0aW9uKGUpe2Uub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWUubGlzdFNlbGVjdGlvbnMoKS5sZW5ndGgsbj0wO248dDtuKyspe3ZhciByPWUubGlzdFNlbGVjdGlvbnMoKVtuXTtyLmVtcHR5KCk/ZS5yZXBsYWNlUmFuZ2UoZS5nZXRMaW5lKHIuaGVhZC5saW5lKSsiXG4iLGQoci5oZWFkLmxpbmUsMCkpOmUucmVwbGFjZVJhbmdlKGUuZ2V0UmFuZ2Uoci5mcm9tKCksci50bygpKSxyLmZyb20oKSl9ZS5zY3JvbGxJbnRvVmlldygpfSl9LGYuc29ydExpbmVzPWZ1bmN0aW9uKGUpe3UoZSwhMCl9LGYuc29ydExpbmVzSW5zZW5zaXRpdmU9ZnVuY3Rpb24oZSl7dShlLCExKX0sZi5uZXh0Qm9va21hcms9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0ZS5zdWJsaW1lQm9va21hcmtzO2lmKHQpZm9yKDt0Lmxlbmd0aDspe3ZhciBuPXQuc2hpZnQoKSxyPW4uZmluZCgpO2lmKHIpcmV0dXJuIHQucHVzaChuKSxlLnNldFNlbGVjdGlvbihyLmZyb20sci50byl9fSxmLnByZXZCb29rbWFyaz1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXRlLnN1YmxpbWVCb29rbWFya3M7aWYodClmb3IoO3QubGVuZ3RoOyl7dC51bnNoaWZ0KHQucG9wKCkpO3ZhciBuPXRbdC5sZW5ndGgtMV0uZmluZCgpO2lmKG4pcmV0dXJuIGUuc2V0U2VsZWN0aW9uKG4uZnJvbSxuLnRvKTt0LnBvcCgpfX0sZi50b2dnbGVCb29rbWFyaz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49ZS5zdGF0ZS5zdWJsaW1lQm9va21hcmtzfHwoZS5zdGF0ZS5zdWJsaW1lQm9va21hcmtzPVtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgaT10W3JdLmZyb20oKSxvPXRbcl0udG8oKSxhPXRbcl0uZW1wdHkoKT9lLmZpbmRNYXJrc0F0KGkpOmUuZmluZE1hcmtzKGksbykscz0wO3M8YS5sZW5ndGg7cysrKWlmKGFbc10uc3VibGltZUJvb2ttYXJrKXthW3NdLmNsZWFyKCk7Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspblt1XT09YVtzXSYmbi5zcGxpY2UodS0tLDEpO2JyZWFrfXM9PWEubGVuZ3RoJiZuLnB1c2goZS5tYXJrVGV4dChpLG8se3N1YmxpbWVCb29rbWFyazohMCxjbGVhcldoZW5FbXB0eTohMX0pKX19LGYuY2xlYXJCb29rbWFya3M9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0ZS5zdWJsaW1lQm9va21hcmtzO2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5jbGVhcigpO3QubGVuZ3RoPTB9LGYuc2VsZWN0Qm9va21hcmtzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhdGUuc3VibGltZUJvb2ttYXJrcyxuPVtdO2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl0uZmluZCgpO2k/bi5wdXNoKHthbmNob3I6aS5mcm9tLGhlYWQ6aS50b30pOnQuc3BsaWNlKHItLSwwKX1uLmxlbmd0aCYmZS5zZXRTZWxlY3Rpb25zKG4sMCl9LGYuc21hcnRCYWNrc3BhY2U9ZnVuY3Rpb24odCl7aWYodC5zb21ldGhpbmdTZWxlY3RlZCgpKXJldHVybiBlLlBhc3M7dC5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIG49dC5saXN0U2VsZWN0aW9ucygpLHI9dC5nZXRPcHRpb24oImluZGVudFVuaXQiKSxpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBvPW5baV0uaGVhZCxhPXQuZ2V0UmFuZ2Uoe2xpbmU6by5saW5lLGNoOjB9LG8pLHM9ZS5jb3VudENvbHVtbihhLG51bGwsdC5nZXRPcHRpb24oInRhYlNpemUiKSksdT10LmZpbmRQb3NIKG8sLTEsImNoYXIiLCExKTtpZihhJiYhL1xTLy50ZXN0KGEpJiZzJXI9PTApe3ZhciBjPW5ldyBkKG8ubGluZSxlLmZpbmRDb2x1bW4oYSxzLXIscikpO2MuY2ghPW8uY2gmJih1PWMpfXQucmVwbGFjZVJhbmdlKCIiLHUsbywiK2RlbGV0ZSIpfX0pfSxmLmRlbExpbmVSaWdodD1mdW5jdGlvbihlKXtlLm9wZXJhdGlvbihmdW5jdGlvbigpe2Zvcih2YXIgdD1lLmxpc3RTZWxlY3Rpb25zKCksbj10Lmxlbmd0aC0xO24+PTA7bi0tKWUucmVwbGFjZVJhbmdlKCIiLHRbbl0uYW5jaG9yLGQodFtuXS50bygpLmxpbmUpLCIrZGVsZXRlIik7ZS5zY3JvbGxJbnRvVmlldygpfSl9LGYudXBjYXNlQXRDdXJzb3I9ZnVuY3Rpb24oZSl7YyhlLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KX0sZi5kb3duY2FzZUF0Q3Vyc29yPWZ1bmN0aW9uKGUpe2MoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfSl9LGYuc2V0U3VibGltZU1hcms9ZnVuY3Rpb24oZSl7ZS5zdGF0ZS5zdWJsaW1lTWFyayYmZS5zdGF0ZS5zdWJsaW1lTWFyay5jbGVhcigpLGUuc3RhdGUuc3VibGltZU1hcms9ZS5zZXRCb29rbWFyayhlLmdldEN1cnNvcigpKX0sZi5zZWxlY3RUb1N1YmxpbWVNYXJrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhdGUuc3VibGltZU1hcmsmJmUuc3RhdGUuc3VibGltZU1hcmsuZmluZCgpO3QmJmUuc2V0U2VsZWN0aW9uKGUuZ2V0Q3Vyc29yKCksdCl9LGYuZGVsZXRlVG9TdWJsaW1lTWFyaz1mdW5jdGlvbih0KXt2YXIgbj10LnN0YXRlLnN1YmxpbWVNYXJrJiZ0LnN0YXRlLnN1YmxpbWVNYXJrLmZpbmQoKTtpZihuKXt2YXIgcj10LmdldEN1cnNvcigpLGk9bjtpZihlLmNtcFBvcyhyLGkpPjApe3ZhciBvPWk7aT1yLHI9b310LnN0YXRlLnN1YmxpbWVLaWxsZWQ9dC5nZXRSYW5nZShyLGkpLHQucmVwbGFjZVJhbmdlKCIiLHIsaSl9fSxmLnN3YXBXaXRoU3VibGltZU1hcms9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0ZS5zdWJsaW1lTWFyayYmZS5zdGF0ZS5zdWJsaW1lTWFyay5maW5kKCk7dCYmKGUuc3RhdGUuc3VibGltZU1hcmsuY2xlYXIoKSxlLnN0YXRlLnN1YmxpbWVNYXJrPWUuc2V0Qm9va21hcmsoZS5nZXRDdXJzb3IoKSksZS5zZXRDdXJzb3IodCkpfSxmLnN1YmxpbWVZYW5rPWZ1bmN0aW9uKGUpe251bGwhPWUuc3RhdGUuc3VibGltZUtpbGxlZCYmZS5yZXBsYWNlU2VsZWN0aW9uKGUuc3RhdGUuc3VibGltZUtpbGxlZCxudWxsLCJwYXN0ZSIpfSxmLnNob3dJbkNlbnRlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmN1cnNvckNvb3JkcyhudWxsLCJsb2NhbCIpO2Uuc2Nyb2xsVG8obnVsbCwodC50b3ArdC5ib3R0b20pLzItZS5nZXRTY3JvbGxJbmZvKCkuY2xpZW50SGVpZ2h0LzIpfSxmLmZpbmRVbmRlcj1mdW5jdGlvbihlKXtwKGUsITApfSxmLmZpbmRVbmRlclByZXZpb3VzPWZ1bmN0aW9uKGUpe3AoZSwhMSl9LGYuZmluZEFsbFVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWwoZSk7aWYodCl7Zm9yKHZhciBuPWUuZ2V0U2VhcmNoQ3Vyc29yKHQucXVlcnkpLHI9W10saT0tMTtuLmZpbmROZXh0KCk7KXIucHVzaCh7YW5jaG9yOm4uZnJvbSgpLGhlYWQ6bi50bygpfSksbi5mcm9tKCkubGluZTw9dC5mcm9tLmxpbmUmJm4uZnJvbSgpLmNoPD10LmZyb20uY2gmJmkrKztlLnNldFNlbGVjdGlvbnMocixpKX19O3ZhciBtPWUua2V5TWFwO20ubWFjU3VibGltZT17IkNtZC1MZWZ0IjoiZ29MaW5lU3RhcnRTbWFydCIsIlNoaWZ0LVRhYiI6ImluZGVudExlc3MiLCJTaGlmdC1DdHJsLUsiOiJkZWxldGVMaW5lIiwiQWx0LVEiOiJ3cmFwTGluZXMiLCJDdHJsLUxlZnQiOiJnb1N1YndvcmRMZWZ0IiwiQ3RybC1SaWdodCI6ImdvU3Vid29yZFJpZ2h0IiwiQ3RybC1BbHQtVXAiOiJzY3JvbGxMaW5lVXAiLCJDdHJsLUFsdC1Eb3duIjoic2Nyb2xsTGluZURvd24iLCJDbWQtTCI6InNlbGVjdExpbmUiLCJTaGlmdC1DbWQtTCI6InNwbGl0U2VsZWN0aW9uQnlMaW5lIixFc2M6InNpbmdsZVNlbGVjdGlvblRvcCIsIkNtZC1FbnRlciI6Imluc2VydExpbmVBZnRlciIsIlNoaWZ0LUNtZC1FbnRlciI6Imluc2VydExpbmVCZWZvcmUiLCJDbWQtRCI6InNlbGVjdE5leHRPY2N1cnJlbmNlIiwiU2hpZnQtQ21kLVNwYWNlIjoic2VsZWN0U2NvcGUiLCJTaGlmdC1DbWQtTSI6InNlbGVjdEJldHdlZW5CcmFja2V0cyIsIkNtZC1NIjoiZ29Ub0JyYWNrZXQiLCJDbWQtQ3RybC1VcCI6InN3YXBMaW5lVXAiLCJDbWQtQ3RybC1Eb3duIjoic3dhcExpbmVEb3duIiwiQ21kLS8iOiJ0b2dnbGVDb21tZW50SW5kZW50ZWQiLCJDbWQtSiI6ImpvaW5MaW5lcyIsIlNoaWZ0LUNtZC1EIjoiZHVwbGljYXRlTGluZSIsRjk6InNvcnRMaW5lcyIsIkNtZC1GOSI6InNvcnRMaW5lc0luc2Vuc2l0aXZlIixGMjoibmV4dEJvb2ttYXJrIiwiU2hpZnQtRjIiOiJwcmV2Qm9va21hcmsiLCJDbWQtRjIiOiJ0b2dnbGVCb29rbWFyayIsIlNoaWZ0LUNtZC1GMiI6ImNsZWFyQm9va21hcmtzIiwiQWx0LUYyIjoic2VsZWN0Qm9va21hcmtzIixCYWNrc3BhY2U6InNtYXJ0QmFja3NwYWNlIiwiQ21kLUsgQ21kLUsiOiJkZWxMaW5lUmlnaHQiLCJDbWQtSyBDbWQtVSI6InVwY2FzZUF0Q3Vyc29yIiwiQ21kLUsgQ21kLUwiOiJkb3duY2FzZUF0Q3Vyc29yIiwiQ21kLUsgQ21kLVNwYWNlIjoic2V0U3VibGltZU1hcmsiLCJDbWQtSyBDbWQtQSI6InNlbGVjdFRvU3VibGltZU1hcmsiLCJDbWQtSyBDbWQtVyI6ImRlbGV0ZVRvU3VibGltZU1hcmsiLCJDbWQtSyBDbWQtWCI6InN3YXBXaXRoU3VibGltZU1hcmsiLCJDbWQtSyBDbWQtWSI6InN1YmxpbWVZYW5rIiwiQ21kLUsgQ21kLUMiOiJzaG93SW5DZW50ZXIiLCJDbWQtSyBDbWQtRyI6ImNsZWFyQm9va21hcmtzIiwiQ21kLUsgQ21kLUJhY2tzcGFjZSI6ImRlbExpbmVMZWZ0IiwiQ21kLUsgQ21kLTAiOiJ1bmZvbGRBbGwiLCJDbWQtSyBDbWQtSiI6InVuZm9sZEFsbCIsIkN0cmwtU2hpZnQtVXAiOiJhZGRDdXJzb3JUb1ByZXZMaW5lIiwiQ3RybC1TaGlmdC1Eb3duIjoiYWRkQ3Vyc29yVG9OZXh0TGluZSIsIkNtZC1GMyI6ImZpbmRVbmRlciIsIlNoaWZ0LUNtZC1GMyI6ImZpbmRVbmRlclByZXZpb3VzIiwiQWx0LUYzIjoiZmluZEFsbFVuZGVyIiwiU2hpZnQtQ21kLVsiOiJmb2xkIiwiU2hpZnQtQ21kLV0iOiJ1bmZvbGQiLCJDbWQtSSI6ImZpbmRJbmNyZW1lbnRhbCIsIlNoaWZ0LUNtZC1JIjoiZmluZEluY3JlbWVudGFsUmV2ZXJzZSIsIkNtZC1IIjoicmVwbGFjZSIsRjM6ImZpbmROZXh0IiwiU2hpZnQtRjMiOiJmaW5kUHJldiIsZmFsbHRocm91Z2g6Im1hY0RlZmF1bHQifSxlLm5vcm1hbGl6ZUtleU1hcChtLm1hY1N1YmxpbWUpLG0ucGNTdWJsaW1lPXsiU2hpZnQtVGFiIjoiaW5kZW50TGVzcyIsIlNoaWZ0LUN0cmwtSyI6ImRlbGV0ZUxpbmUiLCJBbHQtUSI6IndyYXBMaW5lcyIsIkN0cmwtVCI6InRyYW5zcG9zZUNoYXJzIiwiQWx0LUxlZnQiOiJnb1N1YndvcmRMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29TdWJ3b3JkUmlnaHQiLCJDdHJsLVVwIjoic2Nyb2xsTGluZVVwIiwiQ3RybC1Eb3duIjoic2Nyb2xsTGluZURvd24iLCJDdHJsLUwiOiJzZWxlY3RMaW5lIiwiU2hpZnQtQ3RybC1MIjoic3BsaXRTZWxlY3Rpb25CeUxpbmUiLEVzYzoic2luZ2xlU2VsZWN0aW9uVG9wIiwiQ3RybC1FbnRlciI6Imluc2VydExpbmVBZnRlciIsIlNoaWZ0LUN0cmwtRW50ZXIiOiJpbnNlcnRMaW5lQmVmb3JlIiwiQ3RybC1EIjoic2VsZWN0TmV4dE9jY3VycmVuY2UiLCJTaGlmdC1DdHJsLVNwYWNlIjoic2VsZWN0U2NvcGUiLCJTaGlmdC1DdHJsLU0iOiJzZWxlY3RCZXR3ZWVuQnJhY2tldHMiLCJDdHJsLU0iOiJnb1RvQnJhY2tldCIsIlNoaWZ0LUN0cmwtVXAiOiJzd2FwTGluZVVwIiwiU2hpZnQtQ3RybC1Eb3duIjoic3dhcExpbmVEb3duIiwiQ3RybC0vIjoidG9nZ2xlQ29tbWVudEluZGVudGVkIiwiQ3RybC1KIjoiam9pbkxpbmVzIiwiU2hpZnQtQ3RybC1EIjoiZHVwbGljYXRlTGluZSIsRjk6InNvcnRMaW5lcyIsIkN0cmwtRjkiOiJzb3J0TGluZXNJbnNlbnNpdGl2ZSIsRjI6Im5leHRCb29rbWFyayIsIlNoaWZ0LUYyIjoicHJldkJvb2ttYXJrIiwiQ3RybC1GMiI6InRvZ2dsZUJvb2ttYXJrIiwiU2hpZnQtQ3RybC1GMiI6ImNsZWFyQm9va21hcmtzIiwiQWx0LUYyIjoic2VsZWN0Qm9va21hcmtzIixCYWNrc3BhY2U6InNtYXJ0QmFja3NwYWNlIiwiQ3RybC1LIEN0cmwtSyI6ImRlbExpbmVSaWdodCIsIkN0cmwtSyBDdHJsLVUiOiJ1cGNhc2VBdEN1cnNvciIsIkN0cmwtSyBDdHJsLUwiOiJkb3duY2FzZUF0Q3Vyc29yIiwiQ3RybC1LIEN0cmwtU3BhY2UiOiJzZXRTdWJsaW1lTWFyayIsIkN0cmwtSyBDdHJsLUEiOiJzZWxlY3RUb1N1YmxpbWVNYXJrIiwiQ3RybC1LIEN0cmwtVyI6ImRlbGV0ZVRvU3VibGltZU1hcmsiLCJDdHJsLUsgQ3RybC1YIjoic3dhcFdpdGhTdWJsaW1lTWFyayIsIkN0cmwtSyBDdHJsLVkiOiJzdWJsaW1lWWFuayIsIkN0cmwtSyBDdHJsLUMiOiJzaG93SW5DZW50ZXIiLCJDdHJsLUsgQ3RybC1HIjoiY2xlYXJCb29rbWFya3MiLCJDdHJsLUsgQ3RybC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsIkN0cmwtSyBDdHJsLTAiOiJ1bmZvbGRBbGwiLCJDdHJsLUsgQ3RybC1KIjoidW5mb2xkQWxsIiwiQ3RybC1BbHQtVXAiOiJhZGRDdXJzb3JUb1ByZXZMaW5lIiwiQ3RybC1BbHQtRG93biI6ImFkZEN1cnNvclRvTmV4dExpbmUiLCJDdHJsLUYzIjoiZmluZFVuZGVyIiwiU2hpZnQtQ3RybC1GMyI6ImZpbmRVbmRlclByZXZpb3VzIiwiQWx0LUYzIjoiZmluZEFsbFVuZGVyIiwiU2hpZnQtQ3RybC1bIjoiZm9sZCIsIlNoaWZ0LUN0cmwtXSI6InVuZm9sZCIsIkN0cmwtSSI6ImZpbmRJbmNyZW1lbnRhbCIsIlNoaWZ0LUN0cmwtSSI6ImZpbmRJbmNyZW1lbnRhbFJldmVyc2UiLCJDdHJsLUgiOiJyZXBsYWNlIixGMzoiZmluZE5leHQiLCJTaGlmdC1GMyI6ImZpbmRQcmV2IixmYWxsdGhyb3VnaDoicGNEZWZhdWx0In0sZS5ub3JtYWxpemVLZXlNYXAobS5wY1N1YmxpbWUpO3ZhciBnPW0uZGVmYXVsdD09bS5tYWNEZWZhdWx0O20uc3VibGltZT1nP20ubWFjU3VibGltZTptLnBjU3VibGltZX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dm9pZCAwO3JldHVybiBvKGUsZnVuY3Rpb24oZSl7c3dpdGNoKGUua2luZCl7Y2FzZSJRdWVyeSI6Y2FzZSJTaG9ydFF1ZXJ5IjpjYXNlIk11dGF0aW9uIjpjYXNlIlN1YnNjcmlwdGlvbiI6Y2FzZSJGcmFnbWVudERlZmluaXRpb24iOnQ9ZX19KSx0fWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBuPT09aC5TY2hlbWFNZXRhRmllbGREZWYubmFtZSYmZS5nZXRRdWVyeVR5cGUoKT09PXQ/aC5TY2hlbWFNZXRhRmllbGREZWY6bj09PWguVHlwZU1ldGFGaWVsZERlZi5uYW1lJiZlLmdldFF1ZXJ5VHlwZSgpPT09dD9oLlR5cGVNZXRhRmllbGREZWY6bj09PWguVHlwZU5hbWVNZXRhRmllbGREZWYubmFtZSYmKDAsZC5pc0NvbXBvc2l0ZVR5cGUpKHQpP2guVHlwZU5hbWVNZXRhRmllbGREZWY6dC5nZXRGaWVsZHMmJiJmdW5jdGlvbiI9PT10eXBlb2YgdC5nZXRGaWVsZHM/dC5nZXRGaWVsZHMoKVtuXTpudWxsfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49W10scj1lO3ImJnIua2luZDspbi5wdXNoKHIpLHI9ci5wcmV2U3RhdGU7Zm9yKHZhciBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pdChuW2ldKX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPXQubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKXJbaV09ZVt0W2ldXTtyZXR1cm4gcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHUodCxsKGUuc3RyaW5nKSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB0P2MoYyhlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57cHJveGltaXR5OnAobChlLmxhYmVsKSx0KSxlbnRyeTplfX0pLGZ1bmN0aW9uKGUpe3JldHVybiBlLnByb3hpbWl0eTw9Mn0pLGZ1bmN0aW9uKGUpe3JldHVybiFlLmVudHJ5LmlzRGVwcmVjYXRlZH0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5lbnRyeS5pc0RlcHJlY2F0ZWQ/MTowKS0odC5lbnRyeS5pc0RlcHJlY2F0ZWQ/MTowKXx8ZS5wcm94aW1pdHktdC5wcm94aW1pdHl8fGUuZW50cnkubGFiZWwubGVuZ3RoLXQuZW50cnkubGFiZWwubGVuZ3RofSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVudHJ5fSk6YyhlLGZ1bmN0aW9uKGUpe3JldHVybiFlLmlzRGVwcmVjYXRlZH0pfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1lLmZpbHRlcih0KTtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bn1mdW5jdGlvbiBsKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFcvZywiIil9ZnVuY3Rpb24gcChlLHQpe3ZhciBuPWYodCxlKTtyZXR1cm4gZS5sZW5ndGg+dC5sZW5ndGgmJihuLT1lLmxlbmd0aC10Lmxlbmd0aC0xLG4rPTA9PT1lLmluZGV4T2YodCk/MDouNSksbn1mdW5jdGlvbiBmKGUsdCl7dmFyIG49dm9pZCAwLHI9dm9pZCAwLGk9W10sbz1lLmxlbmd0aCxhPXQubGVuZ3RoO2ZvcihuPTA7bjw9bztuKyspaVtuXT1bbl07Zm9yKHI9MTtyPD1hO3IrKylpWzBdW3JdPXI7Zm9yKG49MTtuPD1vO24rKylmb3Iocj0xO3I8PWE7cisrKXt2YXIgcz1lW24tMV09PT10W3ItMV0/MDoxO2lbbl1bcl09TWF0aC5taW4oaVtuLTFdW3JdKzEsaVtuXVtyLTFdKzEsaVtuLTFdW3ItMV0rcyksbj4xJiZyPjEmJmVbbi0xXT09PXRbci0yXSYmZVtuLTJdPT09dFtyLTFdJiYoaVtuXVtyXT1NYXRoLm1pbihpW25dW3JdLGlbbi0yXVtyLTJdK3MpKX1yZXR1cm4gaVtvXVthXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXREZWZpbml0aW9uU3RhdGU9cix0LmdldEZpZWxkRGVmPWksdC5mb3JFYWNoU3RhdGU9byx0Lm9iamVjdFZhbHVlcz1hLHQuaGludExpc3Q9czt2YXIgZD1uKDcpLGg9bigyOCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgdT1yfHxwKHQsbiksZj0iSW52YWxpZCI9PT11LnN0YXRlLmtpbmQ/dS5zdGF0ZS5wcmV2U3RhdGU6dS5zdGF0ZTtpZighZilyZXR1cm5bXTt2YXIgZD1mLmtpbmQsbT1mLnN0ZXAsZz1oKGUsdS5zdGF0ZSk7aWYoIkRvY3VtZW50Ij09PWQpcmV0dXJuKDAsYi5oaW50TGlzdCkodSxbe2xhYmVsOiJxdWVyeSJ9LHtsYWJlbDoibXV0YXRpb24ifSx7bGFiZWw6InN1YnNjcmlwdGlvbiJ9LHtsYWJlbDoiZnJhZ21lbnQifSx7bGFiZWw6InsifV0pO2lmKCJTZWxlY3Rpb25TZXQiPT09ZHx8IkZpZWxkIj09PWR8fCJBbGlhc2VkRmllbGQiPT09ZClyZXR1cm4gaSh1LGcsZSk7aWYoIkFyZ3VtZW50cyI9PT1kfHwiQXJndW1lbnQiPT09ZCYmMD09PW0pe3ZhciB5PWcuYXJnRGVmcztpZih5KXJldHVybigwLGIuaGludExpc3QpKHUseS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmUubmFtZSxkZXRhaWw6U3RyaW5nKGUudHlwZSksZG9jdW1lbnRhdGlvbjplLmRlc2NyaXB0aW9ufX0pKX1pZigoIk9iamVjdFZhbHVlIj09PWR8fCJPYmplY3RGaWVsZCI9PT1kJiYwPT09bSkmJmcub2JqZWN0RmllbGREZWZzKXt2YXIgdj0oMCxiLm9iamVjdFZhbHVlcykoZy5vYmplY3RGaWVsZERlZnMpO3JldHVybigwLGIuaGludExpc3QpKHUsdi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmUubmFtZSxkZXRhaWw6U3RyaW5nKGUudHlwZSksZG9jdW1lbnRhdGlvbjplLmRlc2NyaXB0aW9ufX0pKX1yZXR1cm4iRW51bVZhbHVlIj09PWR8fCJMaXN0VmFsdWUiPT09ZCYmMT09PW18fCJPYmplY3RGaWVsZCI9PT1kJiYyPT09bXx8IkFyZ3VtZW50Ij09PWQmJjI9PT1tP28odSxnKToiVHlwZUNvbmRpdGlvbiI9PT1kJiYxPT09bXx8Ik5hbWVkVHlwZSI9PT1kJiZudWxsIT1mLnByZXZTdGF0ZSYmIlR5cGVDb25kaXRpb24iPT09Zi5wcmV2U3RhdGUua2luZD9hKHUsZyxlKToiRnJhZ21lbnRTcHJlYWQiPT09ZCYmMT09PW0/cyh1LGcsZSx0KToiVmFyaWFibGVEZWZpbml0aW9uIj09PWQmJjI9PT1tfHwiTGlzdFR5cGUiPT09ZCYmMT09PW18fCJOYW1lZFR5cGUiPT09ZCYmZi5wcmV2U3RhdGUmJigiVmFyaWFibGVEZWZpbml0aW9uIj09PWYucHJldlN0YXRlLmtpbmR8fCJMaXN0VHlwZSI9PT1mLnByZXZTdGF0ZS5raW5kKT9jKHUsZSk6IkRpcmVjdGl2ZSI9PT1kP2wodSxmLGUpOltdfWZ1bmN0aW9uIGkoZSx0LG4pe2lmKHQucGFyZW50VHlwZSl7dmFyIHI9dC5wYXJlbnRUeXBlLGk9ci5nZXRGaWVsZHMgaW5zdGFuY2VvZiBGdW5jdGlvbj8oMCxiLm9iamVjdFZhbHVlcykoci5nZXRGaWVsZHMoKSk6W107cmV0dXJuKDAseS5pc0Fic3RyYWN0VHlwZSkocikmJmkucHVzaCh5LlR5cGVOYW1lTWV0YUZpZWxkRGVmKSxyPT09bi5nZXRRdWVyeVR5cGUoKSYmaS5wdXNoKHkuU2NoZW1hTWV0YUZpZWxkRGVmLHkuVHlwZU1ldGFGaWVsZERlZiksKDAsYi5oaW50TGlzdCkoZSxpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZS5uYW1lLGRldGFpbDpTdHJpbmcoZS50eXBlKSxkb2N1bWVudGF0aW9uOmUuZGVzY3JpcHRpb24saXNEZXByZWNhdGVkOmUuaXNEZXByZWNhdGVkLGRlcHJlY2F0aW9uUmVhc29uOmUuZGVwcmVjYXRpb25SZWFzb259fSkpfXJldHVybltdfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj0oMCx5LmdldE5hbWVkVHlwZSkodC5pbnB1dFR5cGUpO2lmKG4gaW5zdGFuY2VvZiB5LkdyYXBoUUxFbnVtVHlwZSl7dmFyIHI9bi5nZXRWYWx1ZXMoKTtyZXR1cm4oMCxiLmhpbnRMaXN0KShlLHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDplLm5hbWUsZGV0YWlsOlN0cmluZyhuKSxkb2N1bWVudGF0aW9uOmUuZGVzY3JpcHRpb24saXNEZXByZWNhdGVkOmUuaXNEZXByZWNhdGVkLGRlcHJlY2F0aW9uUmVhc29uOmUuZGVwcmVjYXRpb25SZWFzb259fSkpfXJldHVybiBuPT09eS5HcmFwaFFMQm9vbGVhbj8oMCxiLmhpbnRMaXN0KShlLFt7bGFiZWw6InRydWUiLGRldGFpbDpTdHJpbmcoeS5HcmFwaFFMQm9vbGVhbiksZG9jdW1lbnRhdGlvbjoiTm90IGZhbHNlLiJ9LHtsYWJlbDoiZmFsc2UiLGRldGFpbDpTdHJpbmcoeS5HcmFwaFFMQm9vbGVhbiksZG9jdW1lbnRhdGlvbjoiTm90IHRydWUuIn1dKTpbXX1mdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj12b2lkIDA7aWYodC5wYXJlbnRUeXBlKWlmKCgwLHkuaXNBYnN0cmFjdFR5cGUpKHQucGFyZW50VHlwZSkpe3ZhciBpPSgwLHkuYXNzZXJ0QWJzdHJhY3RUeXBlKSh0LnBhcmVudFR5cGUpLG89bi5nZXRQb3NzaWJsZVR5cGVzKGkpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtvLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5nZXRJbnRlcmZhY2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKXthW2UubmFtZV09ZX0pfSkscj1vLmNvbmNhdCgoMCxiLm9iamVjdFZhbHVlcykoYSkpfWVsc2Ugcj1bdC5wYXJlbnRUeXBlXTtlbHNle3ZhciBzPW4uZ2V0VHlwZU1hcCgpO3I9KDAsYi5vYmplY3RWYWx1ZXMpKHMpLmZpbHRlcih5LmlzQ29tcG9zaXRlVHlwZSl9cmV0dXJuKDAsYi5oaW50TGlzdCkoZSxyLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oMCx5LmdldE5hbWVkVHlwZSkoZSk7cmV0dXJue2xhYmVsOlN0cmluZyhlKSxkb2N1bWVudGF0aW9uOnQmJnQuZGVzY3JpcHRpb258fCIifX0pKX1mdW5jdGlvbiBzKGUsdCxuLHIpe3ZhciBpPW4uZ2V0VHlwZU1hcCgpLG89KDAsYi5nZXREZWZpbml0aW9uU3RhdGUpKGUuc3RhdGUpLGE9dShyKSxzPWEuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBpW2UudHlwZUNvbmRpdGlvbi5uYW1lLnZhbHVlXSYmIShvJiYiRnJhZ21lbnREZWZpbml0aW9uIj09PW8ua2luZCYmby5uYW1lPT09ZS5uYW1lLnZhbHVlKSYmKDAseS5pc0NvbXBvc2l0ZVR5cGUpKHQucGFyZW50VHlwZSkmJigwLHkuaXNDb21wb3NpdGVUeXBlKShpW2UudHlwZUNvbmRpdGlvbi5uYW1lLnZhbHVlXSkmJigwLHkuZG9UeXBlc092ZXJsYXApKG4sdC5wYXJlbnRUeXBlLGlbZS50eXBlQ29uZGl0aW9uLm5hbWUudmFsdWVdKX0pO3JldHVybigwLGIuaGludExpc3QpKGUscy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmUubmFtZS52YWx1ZSxkZXRhaWw6U3RyaW5nKGlbZS50eXBlQ29uZGl0aW9uLm5hbWUudmFsdWVdKSxkb2N1bWVudGF0aW9uOiJmcmFnbWVudCAiK2UubmFtZS52YWx1ZSsiIG9uICIrZS50eXBlQ29uZGl0aW9uLm5hbWUudmFsdWV9fSkpfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9W107cmV0dXJuIGYoZSxmdW5jdGlvbihlLG4peyJGcmFnbWVudERlZmluaXRpb24iPT09bi5raW5kJiZuLm5hbWUmJm4udHlwZSYmdC5wdXNoKHtraW5kOiJGcmFnbWVudERlZmluaXRpb24iLG5hbWU6e2tpbmQ6Ik5hbWUiLHZhbHVlOm4ubmFtZX0sc2VsZWN0aW9uU2V0OntraW5kOiJTZWxlY3Rpb25TZXQiLHNlbGVjdGlvbnM6W119LHR5cGVDb25kaXRpb246e2tpbmQ6Ik5hbWVkVHlwZSIsbmFtZTp7a2luZDoiTmFtZSIsdmFsdWU6bi50eXBlfX19KX0pLHR9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXQuZ2V0VHlwZU1hcCgpLHI9KDAsYi5vYmplY3RWYWx1ZXMpKG4pLmZpbHRlcih5LmlzSW5wdXRUeXBlKTtyZXR1cm4oMCxiLmhpbnRMaXN0KShlLHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDplLm5hbWUsZG9jdW1lbnRhdGlvbjplLmRlc2NyaXB0aW9ufX0pKX1mdW5jdGlvbiBsKGUsdCxuKXtpZih0LnByZXZTdGF0ZSYmdC5wcmV2U3RhdGUua2luZCl7dmFyIHI9bi5nZXREaXJlY3RpdmVzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBkKHQucHJldlN0YXRlLGUpfSk7cmV0dXJuKDAsYi5oaW50TGlzdCkoZSxyLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZS5uYW1lLGRvY3VtZW50YXRpb246ZS5kZXNjcmlwdGlvbnx8IiJ9fSkpfXJldHVybltdfWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj1udWxsLHI9bnVsbCxpPW51bGwsbz1mKGUsZnVuY3Rpb24oZSxvLGEscyl7aWYocz09PXQubGluZSYmZS5nZXRDdXJyZW50UG9zaXRpb24oKT49dC5jaGFyYWN0ZXIpcmV0dXJuIG49YSxyPWcoe30sbyksaT1lLmN1cnJlbnQoKSwiQlJFQUsifSk7cmV0dXJue3N0YXJ0Om8uc3RhcnQsZW5kOm8uZW5kLHN0cmluZzppfHxvLnN0cmluZyxzdGF0ZTpyfHxvLnN0YXRlLHN0eWxlOm58fG8uc3R5bGV9fWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIG49ZS5zcGxpdCgiXG4iKSxyPSgwLHYub25saW5lUGFyc2VyKSgpLGk9ci5zdGFydFN0YXRlKCksbz0iIixhPW5ldyB2LkNoYXJhY3RlclN0cmVhbSgiIikscz0wO3M8bi5sZW5ndGg7cysrKXtmb3IoYT1uZXcgdi5DaGFyYWN0ZXJTdHJlYW0obltzXSk7IWEuZW9sKCk7KXtvPXIudG9rZW4oYSxpKTtpZigiQlJFQUsiPT09dChhLGksbyxzKSlicmVha310KGEsaSxvLHMpLGkua2luZHx8KGk9ci5zdGFydFN0YXRlKCkpfXJldHVybntzdGFydDphLmdldFN0YXJ0T2ZUb2tlbigpLGVuZDphLmdldEN1cnJlbnRQb3NpdGlvbigpLHN0cmluZzphLmN1cnJlbnQoKSxzdGF0ZTppLHN0eWxlOm99fWZ1bmN0aW9uIGQoZSx0KXtpZighZXx8IWUua2luZClyZXR1cm4hMTt2YXIgbj1lLmtpbmQscj10LmxvY2F0aW9ucztzd2l0Y2gobil7Y2FzZSJRdWVyeSI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIlFVRVJZIik7Y2FzZSJNdXRhdGlvbiI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIk1VVEFUSU9OIik7Y2FzZSJTdWJzY3JpcHRpb24iOnJldHVybi0xIT09ci5pbmRleE9mKCJTVUJTQ1JJUFRJT04iKTtjYXNlIkZpZWxkIjpjYXNlIkFsaWFzZWRGaWVsZCI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIkZJRUxEIik7Y2FzZSJGcmFnbWVudERlZmluaXRpb24iOnJldHVybi0xIT09ci5pbmRleE9mKCJGUkFHTUVOVF9ERUZJTklUSU9OIik7Y2FzZSJGcmFnbWVudFNwcmVhZCI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIkZSQUdNRU5UX1NQUkVBRCIpO2Nhc2UiSW5saW5lRnJhZ21lbnQiOnJldHVybi0xIT09ci5pbmRleE9mKCJJTkxJTkVfRlJBR01FTlQiKTtjYXNlIlNjaGVtYURlZiI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIlNDSEVNQSIpO2Nhc2UiU2NhbGFyRGVmIjpyZXR1cm4tMSE9PXIuaW5kZXhPZigiU0NBTEFSIik7Y2FzZSJPYmplY3RUeXBlRGVmIjpyZXR1cm4tMSE9PXIuaW5kZXhPZigiT0JKRUNUIik7Y2FzZSJGaWVsZERlZiI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIkZJRUxEX0RFRklOSVRJT04iKTtjYXNlIkludGVyZmFjZURlZiI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIklOVEVSRkFDRSIpO2Nhc2UiVW5pb25EZWYiOnJldHVybi0xIT09ci5pbmRleE9mKCJVTklPTiIpO2Nhc2UiRW51bURlZiI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIkVOVU0iKTtjYXNlIkVudW1WYWx1ZSI6cmV0dXJuLTEhPT1yLmluZGV4T2YoIkVOVU1fVkFMVUUiKTtjYXNlIklucHV0RGVmIjpyZXR1cm4tMSE9PXIuaW5kZXhPZigiSU5QVVRfT0JKRUNUIik7Y2FzZSJJbnB1dFZhbHVlRGVmIjpzd2l0Y2goZS5wcmV2U3RhdGUmJmUucHJldlN0YXRlLmtpbmQpe2Nhc2UiQXJndW1lbnRzRGVmIjpyZXR1cm4tMSE9PXIuaW5kZXhPZigiQVJHVU1FTlRfREVGSU5JVElPTiIpO2Nhc2UiSW5wdXREZWYiOnJldHVybi0xIT09ci5pbmRleE9mKCJJTlBVVF9GSUVMRF9ERUZJTklUSU9OIil9fXJldHVybiExfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj12b2lkIDAscj12b2lkIDAsaT12b2lkIDAsbz12b2lkIDAsYT12b2lkIDAscz12b2lkIDAsdT12b2lkIDAsYz12b2lkIDAsbD12b2lkIDA7cmV0dXJuKDAsYi5mb3JFYWNoU3RhdGUpKHQsZnVuY3Rpb24odCl7c3dpdGNoKHQua2luZCl7Y2FzZSJRdWVyeSI6Y2FzZSJTaG9ydFF1ZXJ5IjpsPWUuZ2V0UXVlcnlUeXBlKCk7YnJlYWs7Y2FzZSJNdXRhdGlvbiI6bD1lLmdldE11dGF0aW9uVHlwZSgpO2JyZWFrO2Nhc2UiU3Vic2NyaXB0aW9uIjpsPWUuZ2V0U3Vic2NyaXB0aW9uVHlwZSgpO2JyZWFrO2Nhc2UiSW5saW5lRnJhZ21lbnQiOmNhc2UiRnJhZ21lbnREZWZpbml0aW9uIjp0LnR5cGUmJihsPWUuZ2V0VHlwZSh0LnR5cGUpKTticmVhaztjYXNlIkZpZWxkIjpjYXNlIkFsaWFzZWRGaWVsZCI6bCYmdC5uYW1lPyhhPWM/KDAsYi5nZXRGaWVsZERlZikoZSxjLHQubmFtZSk6bnVsbCxsPWE/YS50eXBlOm51bGwpOmE9bnVsbDticmVhaztjYXNlIlNlbGVjdGlvblNldCI6Yz0oMCx5LmdldE5hbWVkVHlwZSkobCk7YnJlYWs7Y2FzZSJEaXJlY3RpdmUiOmk9dC5uYW1lP2UuZ2V0RGlyZWN0aXZlKHQubmFtZSk6bnVsbDticmVhaztjYXNlIkFyZ3VtZW50cyI6aWYodC5wcmV2U3RhdGUpc3dpdGNoKHQucHJldlN0YXRlLmtpbmQpe2Nhc2UiRmllbGQiOnI9YSYmYS5hcmdzO2JyZWFrO2Nhc2UiRGlyZWN0aXZlIjpyPWkmJmkuYXJnczticmVhaztjYXNlIkFsaWFzZWRGaWVsZCI6dmFyIHA9dC5wcmV2U3RhdGUmJnQucHJldlN0YXRlLm5hbWU7aWYoIXApe3I9bnVsbDticmVha312YXIgZj1jPygwLGIuZ2V0RmllbGREZWYpKGUsYyxwKTpudWxsO2lmKCFmKXtyPW51bGw7YnJlYWt9cj1mLmFyZ3M7YnJlYWs7ZGVmYXVsdDpyPW51bGx9ZWxzZSByPW51bGw7YnJlYWs7Y2FzZSJBcmd1bWVudCI6aWYocilmb3IodmFyIGQ9MDtkPHIubGVuZ3RoO2QrKylpZihyW2RdLm5hbWU9PT10Lm5hbWUpe249cltkXTticmVha31zPW4mJm4udHlwZTticmVhaztjYXNlIkVudW1WYWx1ZSI6dmFyIGg9KDAseS5nZXROYW1lZFR5cGUpKHMpO289aCBpbnN0YW5jZW9mIHkuR3JhcGhRTEVudW1UeXBlP20oaC5nZXRWYWx1ZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQubmFtZX0pOm51bGw7YnJlYWs7Y2FzZSJMaXN0VmFsdWUiOnZhciBnPSgwLHkuZ2V0TnVsbGFibGVUeXBlKShzKTtzPWcgaW5zdGFuY2VvZiB5LkdyYXBoUUxMaXN0P2cub2ZUeXBlOm51bGw7YnJlYWs7Y2FzZSJPYmplY3RWYWx1ZSI6dmFyIHY9KDAseS5nZXROYW1lZFR5cGUpKHMpO3U9diBpbnN0YW5jZW9mIHkuR3JhcGhRTElucHV0T2JqZWN0VHlwZT92LmdldEZpZWxkcygpOm51bGw7YnJlYWs7Y2FzZSJPYmplY3RGaWVsZCI6dmFyIHg9dC5uYW1lJiZ1P3VbdC5uYW1lXTpudWxsO3M9eCYmeC50eXBlO2JyZWFrO2Nhc2UiTmFtZWRUeXBlIjp0Lm5hbWUmJihsPWUuZ2V0VHlwZSh0Lm5hbWUpKX19KSx7YXJnRGVmOm4sYXJnRGVmczpyLGRpcmVjdGl2ZURlZjppLGVudW1WYWx1ZTpvLGZpZWxkRGVmOmEsaW5wdXRUeXBlOnMsb2JqZWN0RmllbGREZWZzOnUscGFyZW50VHlwZTpjLHR5cGU6bH19ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKHQoZVtuXSkpcmV0dXJuIGVbbl07cmV0dXJuIG51bGx9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuZ2V0QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnM9cjt2YXIgeT1uKDcpLHY9big3MSksYj1uKDkyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQubG9jO3JldHVybigwLGwuZGVmYXVsdCkobiwiRXhwZWN0ZWQgQVNUTm9kZSB0byBoYXZlIGEgbG9jYXRpb24uIiksKDAsdS5sb2NUb1JhbmdlKShlLG4pfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj10LmxvYztyZXR1cm4oMCxsLmRlZmF1bHQpKG4sIkV4cGVjdGVkIEFTVE5vZGUgdG8gaGF2ZSBhIGxvY2F0aW9uLiIpLCgwLHUub2Zmc2V0VG9Qb3NpdGlvbikoZSxuLnN0YXJ0KX1mdW5jdGlvbiBvKHQsbixpKXt2YXIgbyxhLHU7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS5hc3luYyhmdW5jdGlvbihjKXtmb3IoOzspc3dpdGNoKGMucHJldj1jLm5leHQpe2Nhc2UgMDppZihvPW4ubmFtZS52YWx1ZSxhPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZmluaXRpb24ubmFtZS52YWx1ZT09PW99KSwwIT09YS5sZW5ndGgpe2MubmV4dD01O2JyZWFrfXJldHVybiBlLnN0ZGVyci53cml0ZSgiRGVmaW5pdGlvbiBub3QgZm91bmQgZm9yIEdyYXBoUUwgZnJhZ21lbnQgIitvKSxjLmFicnVwdCgicmV0dXJuIix7cXVlcnlSYW5nZTpbXSxkZWZpbml0aW9uczpbXX0pO2Nhc2UgNTpyZXR1cm4gdT1hLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLmZpbGVQYXRoLG49ZS5jb250ZW50LHI9ZS5kZWZpbml0aW9uO3JldHVybiBzKHR8fCIiLG4scil9KSxjLmFicnVwdCgicmV0dXJuIix7ZGVmaW5pdGlvbnM6dSxxdWVyeVJhbmdlOnUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiByKHQsbil9KX0pO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIGMuc3RvcCgpfX0sbnVsbCx0aGlzKX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm57ZGVmaW5pdGlvbnM6W3MoZSx0LG4pXSxxdWVyeVJhbmdlOm4ubmFtZT9bcih0LG4ubmFtZSldOltdfX1mdW5jdGlvbiBzKGUsdCxuKXt2YXIgbz1uLm5hbWU7cmV0dXJuKDAsbC5kZWZhdWx0KShvLCJFeHBlY3RlZCBBU1ROb2RlIHRvIGhhdmUgYSBOYW1lLiIpLHtwYXRoOmUscG9zaXRpb246aSh0LG8pLHJhbmdlOnIodCxuKSxuYW1lOm8udmFsdWV8fCIiLGxhbmd1YWdlOnAscHJvamVjdFJvb3Q6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTEFOR1VBR0U9dm9pZCAwLHQuZ2V0RGVmaW5pdGlvblF1ZXJ5UmVzdWx0Rm9yRnJhZ21lbnRTcHJlYWQ9byx0LmdldERlZmluaXRpb25RdWVyeVJlc3VsdEZvckRlZmluaXRpb25Ob2RlPWE7dmFyIHU9big5NSksYz1uKDI3OCksbD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGMpLHA9dC5MQU5HVUFHRT0iR3JhcGhRTCJ9KS5jYWxsKHQsbig1NikpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDU5OCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEFTVE5vZGVBdFBvc2l0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRBU1ROb2RlQXRQb3NpdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicG9pbnRUb09mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucG9pbnRUb09mZnNldH19KTt2YXIgaT1uKDI3Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBvc2l0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5Qb3NpdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmFuZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLlJhbmdlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2NUb1JhbmdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sb2NUb1JhbmdlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJvZmZzZXRUb1Bvc2l0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5vZmZzZXRUb1Bvc2l0aW9ufX0pO3ZhciBvPW4oNTk5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsaWRhdGVXaXRoQ3VzdG9tUnVsZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnZhbGlkYXRlV2l0aEN1c3RvbVJ1bGVzfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1hcmd1bWVudHNbMl0scj1hcmd1bWVudHNbM10sbz1udWxsO3RyeXtvPSgwLHAucGFyc2UpKGUpfWNhdGNoKHQpe3ZhciBhPXModC5sb2NhdGlvbnNbMF0sZSk7cmV0dXJuW3tzZXZlcml0eTpoLkVSUk9SLG1lc3NhZ2U6dC5tZXNzYWdlLHNvdXJjZToiR3JhcGhRTDogU3ludGF4IixyYW5nZTphfV19cmV0dXJuIGkobyx0LG4scil9ZnVuY3Rpb24gaShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxuPWFyZ3VtZW50c1syXSxyPWFyZ3VtZW50c1szXTtpZighdClyZXR1cm5bXTt2YXIgaT1vKCgwLGQudmFsaWRhdGVXaXRoQ3VzdG9tUnVsZXMpKHQsZSxuLHIpLGZ1bmN0aW9uKGUpe3JldHVybiBhKGUsaC5FUlJPUiwiVmFsaWRhdGlvbiIpfSkscz1wLmZpbmREZXByZWNhdGVkVXNhZ2VzP28oKDAscC5maW5kRGVwcmVjYXRlZFVzYWdlcykodCxlKSxmdW5jdGlvbihlKXtyZXR1cm4gYShlLGguV0FSTklORywiRGVwcmVjYXRpb24iKX0pOltdO3JldHVybiBpLmNvbmNhdChzKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZS5tYXAodCkpfWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybiBlLm5vZGVzP2Uubm9kZXMubWFwKGZ1bmN0aW9uKHIpe3ZhciBpPSJWYXJpYWJsZSIhPT1yLmtpbmQmJnIubmFtZT9yLm5hbWU6ci52YXJpYWJsZT9yLnZhcmlhYmxlOnI7KDAsbC5kZWZhdWx0KShlLmxvY2F0aW9ucywiR3JhcGhRTCB2YWxpZGF0aW9uIGVycm9yIHJlcXVpcmVzIGxvY2F0aW9ucy4iKTt2YXIgbz1lLmxvY2F0aW9uc1swXSxhPXUoaSkscz1vLmNvbHVtbisoYS5lbmQtYS5zdGFydCk7cmV0dXJue3NvdXJjZToiR3JhcGhRTDogIituLG1lc3NhZ2U6ZS5tZXNzYWdlLHNldmVyaXR5OnQscmFuZ2U6bmV3IGQuUmFuZ2UobmV3IGQuUG9zaXRpb24oby5saW5lLTEsby5jb2x1bW4tMSksbmV3IGQuUG9zaXRpb24oby5saW5lLTEscykpfX0pOltdfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj0oMCxmLm9ubGluZVBhcnNlcikoKSxyPW4uc3RhcnRTdGF0ZSgpLGk9dC5zcGxpdCgiXG4iKTsoMCxsLmRlZmF1bHQpKGkubGVuZ3RoPj1lLmxpbmUsIlF1ZXJ5IHRleHQgbXVzdCBoYXZlIG1vcmUgbGluZXMgdGhhbiB3aGVyZSB0aGUgZXJyb3IgaGFwcGVuZWQiKTtmb3IodmFyIG89bnVsbCxhPTA7YTxlLmxpbmU7YSsrKWZvcihvPW5ldyBmLkNoYXJhY3RlclN0cmVhbShpW2FdKTshby5lb2woKTspe3ZhciBzPW4udG9rZW4obyxyKTtpZigiaW52YWxpZGNoYXIiPT09cylicmVha30oMCxsLmRlZmF1bHQpKG8sIkV4cGVjdGVkIFBhcnNlciBzdHJlYW0gdG8gYmUgYXZhaWxhYmxlLiIpO3ZhciB1PWUubGluZS0xLGM9by5nZXRTdGFydE9mVG9rZW4oKSxwPW8uZ2V0Q3VycmVudFBvc2l0aW9uKCk7cmV0dXJuIG5ldyBkLlJhbmdlKG5ldyBkLlBvc2l0aW9uKHUsYyksbmV3IGQuUG9zaXRpb24odSxwKSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLG49dC5sb2M7cmV0dXJuKDAsbC5kZWZhdWx0KShuLCJFeHBlY3RlZCBBU1ROb2RlIHRvIGhhdmUgYSBsb2NhdGlvbi4iKSxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNFVkVSSVRZPXZvaWQgMCx0LmdldERpYWdub3N0aWNzPXIsdC52YWxpZGF0ZVF1ZXJ5PWksdC5nZXRSYW5nZT1zO3ZhciBjPW4oMjc4KSxsPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oYykscD1uKDcpLGY9big3MSksZD1uKDk1KSxoPXQuU0VWRVJJVFk9e0VSUk9SOjEsV0FSTklORzoyLElORk9STUFUSU9OOjMsSElOVDo0fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmdlbmVyYWwuZ2V0KGUpfX07dC5nZXRGaXhlZEVuZHBvaW50PXIoImZpeGVkRW5kcG9pbnQiKSx0LmdldEhpc3RvcnlPcGVuPXIoImhpc3RvcnlPcGVuIiksdC5nZXRDb25maWdTdHJpbmc9cigiY29uZmlnU3RyaW5nIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1Myk7ZS5leHBvcnRzPXIuREVGQVVMVD1uZXcgcih7aW5jbHVkZTpbbig3MyldLGV4cGxpY2l0OltuKDc0Myksbig3NDQpLG4oNzQ1KV19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyxhLHMsdSl7aWYoaSh0KSwhZSl7dmFyIGM7aWYodm9pZCAwPT09dCljPW5ldyBFcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBsPVtuLHIsbyxhLHMsdV0scD0wO2M9bmV3IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBsW3ArK119KSksYy5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyBjLmZyYW1lc1RvUG9wPTEsY319dmFyIGk9ZnVuY3Rpb24oZSl7fTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgaT1mdW5jdGlvbigpe307aS50aGF0UmV0dXJucz1yLGkudGhhdFJldHVybnNGYWxzZT1yKCExKSxpLnRoYXRSZXR1cm5zVHJ1ZT1yKCEwKSxpLnRoYXRSZXR1cm5zTnVsbD1yKG51bGwpLGkudGhhdFJldHVybnNUaGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGkudGhhdFJldHVybnNBcmd1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXsidW5kZWZpbmVkIiE9PXR5cGVvZiBjb25zb2xlJiYiZnVuY3Rpb24iPT09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoZSk7dHJ5e3Rocm93IG5ldyBFcnJvcihlKX1jYXRjaChlKXt9fXQuYT1yfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMSksaT1yLmEuU3ltYm9sO3QuYT1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDM1NyksaT1uKDE2Nyk7bi5kKHQsInJ1blNhZ2EiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pO3ZhciBvPW4oNDIpO24uZCh0LCJFTkQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pLG4uZCh0LCJldmVudENoYW5uZWwiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uZH0pLG4uZCh0LCJjaGFubmVsIixmdW5jdGlvbigpe3JldHVybiBvLmJ9KTt2YXIgYT1uKDc2KTtuLmQodCwiYnVmZmVycyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSk7dmFyIHM9bigxNjkpO24uZCh0LCJ0YWtlRXZlcnkiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pLG4uZCh0LCJ0YWtlTGF0ZXN0IixmdW5jdGlvbigpe3JldHVybiBzLmN9KSxuLmQodCwidGhyb3R0bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZX0pO3ZhciB1PW4oMjIpO24uZCh0LCJkZWxheSIsZnVuY3Rpb24oKXtyZXR1cm4gdS5tfSksbi5kKHQsIkNBTkNFTCIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSk7dmFyIGM9bigzNCk7bi5kKHQsImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gYy5pfSk7dmFyIGw9big1NSkscD1uKDM2MSk7bi5kKHQsImVmZmVjdHMiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQodCwidXRpbHMiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSx0LmRlZmF1bHQ9ci5hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8ucS5jaGFubmVsKGUpPyJjaGFubmVsIjpBcnJheS5pc0FycmF5KGUpP1N0cmluZyhlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSkpOlN0cmluZyhlKX1mdW5jdGlvbiBpKGUsdCl7ZnVuY3Rpb24gbih0LG4pe2lmKHU9PT1zKXJldHVybiBhO2lmKG4pdGhyb3cgdT1zLG47aSYmaSh0KTt2YXIgcj1lW3VdKCksbz1yWzBdLGM9clsxXSxsPXJbMl07cmV0dXJuIHU9byxpPWwsdT09PXM/YTpjfXZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXRlcmF0b3IiLGk9dm9pZCAwLHU9dDtyZXR1cm4gT2JqZWN0KG8udCkobixmdW5jdGlvbihlKXtyZXR1cm4gbihudWxsLGUpfSxyLCEwKX1uLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLHQuYz1yLHQuYT1pO3ZhciBvPW4oMjIpLGE9e2RvbmU6ITAsdmFsdWU6dm9pZCAwfSxzPXt9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTcwKTt0LmE9ci5hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIlN0cmluZ1ZhbHVlIj09PWUua2luZH1mdW5jdGlvbiBpKGUpe3JldHVybiJCb29sZWFuVmFsdWUiPT09ZS5raW5kfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIkludFZhbHVlIj09PWUua2luZH1mdW5jdGlvbiBhKGUpe3JldHVybiJGbG9hdFZhbHVlIj09PWUua2luZH1mdW5jdGlvbiBzKGUpe3JldHVybiJWYXJpYWJsZSI9PT1lLmtpbmR9ZnVuY3Rpb24gdShlKXtyZXR1cm4iT2JqZWN0VmFsdWUiPT09ZS5raW5kfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIkxpc3RWYWx1ZSI9PT1lLmtpbmR9ZnVuY3Rpb24gbChlKXtyZXR1cm4iRW51bVZhbHVlIj09PWUua2luZH1mdW5jdGlvbiBwKGUpe3JldHVybiJOdWxsVmFsdWUiPT09ZS5raW5kfWZ1bmN0aW9uIGYoZSx0LG4sZCl7aWYobyhuKXx8YShuKSllW3QudmFsdWVdPU51bWJlcihuLnZhbHVlKTtlbHNlIGlmKGkobil8fHIobikpZVt0LnZhbHVlXT1uLnZhbHVlO2Vsc2UgaWYodShuKSl7dmFyIGg9e307bi5maWVsZHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBmKGgsZS5uYW1lLGUudmFsdWUsZCl9KSxlW3QudmFsdWVdPWh9ZWxzZSBpZihzKG4pKXt2YXIgbT0oZHx8e30pW24ubmFtZS52YWx1ZV07ZVt0LnZhbHVlXT1tfWVsc2UgaWYoYyhuKSllW3QudmFsdWVdPW4udmFsdWVzLm1hcChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gZihuLHQsZSxkKSxuW3QudmFsdWVdfSk7ZWxzZSBpZihsKG4pKWVbdC52YWx1ZV09bi52YWx1ZTtlbHNle2lmKCFwKG4pKXRocm93IG5ldyBFcnJvcignVGhlIGlubGluZSBhcmd1bWVudCAiJyt0LnZhbHVlKyciIG9mIGtpbmQgIicrbi5raW5kKyciIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgICAgICAgICAgICAgICAgIFVzZSB2YXJpYWJsZXMgaW5zdGVhZCBvZiBpbmxpbmUgYXJndW1lbnRzIHRvIG92ZXJjb21lIHRoaXMgbGltaXRhdGlvbi4nKTtlW3QudmFsdWVdPW51bGx9fWZ1bmN0aW9uIGQoZSx0KXtpZihlLmFyZ3VtZW50cyYmZS5hcmd1bWVudHMubGVuZ3RoKXt2YXIgbj17fTtyZXR1cm4gZS5hcmd1bWVudHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lLm5hbWUsaT1lLnZhbHVlO3JldHVybiBmKG4scixpLHQpfSksbn1yZXR1cm4gbnVsbH10LmI9Zix0LmE9ZDt0aGlzJiZ0aGlzLl9fYXNzaWdufHxPYmplY3QuYXNzaWdufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuInVuZGVmaW5lZCIhPT10eXBlb2YgZT8icHJvZHVjdGlvbiI6ImRldmVsb3BtZW50In1mdW5jdGlvbiByKGUpe3JldHVybiBuKCk9PT1lfWZ1bmN0aW9uIGkoKXtyZXR1cm4hMD09PXIoInByb2R1Y3Rpb24iKX1mdW5jdGlvbiBvKCl7cmV0dXJuITA9PT1yKCJkZXZlbG9wbWVudCIpfWZ1bmN0aW9uIGEoKXtyZXR1cm4hMD09PXIoInRlc3QiKX10LmI9aSx0LmE9byx0LmM9YX0pLmNhbGwodCxuKDU2KSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0vXHJcbnxbXG5ccl0vZyxyPTEsaT10KzEsbz12b2lkIDA7KG89bi5leGVjKGUuYm9keSkpJiZvLmluZGV4PHQ7KXIrPTEsaT10KzEtKG8uaW5kZXgrb1swXS5sZW5ndGgpO3JldHVybntsaW5lOnIsY29sdW1uOml9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldExvY2F0aW9uPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPW5ldyBhKGIsMCwwLDAsMCxudWxsKTtyZXR1cm57c291cmNlOmUsb3B0aW9uczp0LGxhc3RUb2tlbjpuLHRva2VuOm4sbGluZToxLGxpbmVTdGFydDowLGFkdmFuY2U6aX19ZnVuY3Rpb24gaSgpe3ZhciBlPXRoaXMubGFzdFRva2VuPXRoaXMudG9rZW47aWYoZS5raW5kIT09eCl7ZG97ZT1lLm5leHQ9dSh0aGlzLGUpfXdoaWxlKGUua2luZD09PVIpO3RoaXMudG9rZW49ZX1yZXR1cm4gZX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIHQ/ZS5raW5kKycgIicrdCsnIic6ZS5raW5kfWZ1bmN0aW9uIGEoZSx0LG4scixpLG8sYSl7dGhpcy5raW5kPWUsdGhpcy5zdGFydD10LHRoaXMuZW5kPW4sdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49aSx0aGlzLnZhbHVlPWEsdGhpcy5wcmV2PW8sdGhpcy5uZXh0PW51bGx9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gaXNOYU4oZSk/eDplPDEyNz9KU09OLnN0cmluZ2lmeShTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTonIlxcdScrKCIwMCIrZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSkuc2xpY2UoLTQpKyciJ31mdW5jdGlvbiB1KGUsdCl7dmFyIG49ZS5zb3VyY2Uscj1uLmJvZHksaT1yLmxlbmd0aCxvPWwocix0LmVuZCxlKSx1PWUubGluZSxkPTErby1lLmxpbmVTdGFydDtpZihvPj1pKXJldHVybiBuZXcgYSh4LGksaSx1LGQsdCk7dmFyIG09Qi5jYWxsKHIsbyk7aWYobTwzMiYmOSE9PW0mJjEwIT09bSYmMTMhPT1tKXRocm93KDAsdi5zeW50YXhFcnJvcikobixvLCJDYW5ub3QgY29udGFpbiB0aGUgaW52YWxpZCBjaGFyYWN0ZXIgIitzKG0pKyIuIik7c3dpdGNoKG0pe2Nhc2UgMzM6cmV0dXJuIG5ldyBhKEMsbyxvKzEsdSxkLHQpO2Nhc2UgMzU6cmV0dXJuIHAobixvLHUsZCx0KTtjYXNlIDM2OnJldHVybiBuZXcgYShFLG8sbysxLHUsZCx0KTtjYXNlIDQwOnJldHVybiBuZXcgYShELG8sbysxLHUsZCx0KTtjYXNlIDQxOnJldHVybiBuZXcgYSh3LG8sbysxLHUsZCx0KTtjYXNlIDQ2OmlmKDQ2PT09Qi5jYWxsKHIsbysxKSYmNDY9PT1CLmNhbGwocixvKzIpKXJldHVybiBuZXcgYShTLG8sbyszLHUsZCx0KTticmVhaztjYXNlIDU4OnJldHVybiBuZXcgYShrLG8sbysxLHUsZCx0KTtjYXNlIDYxOnJldHVybiBuZXcgYShBLG8sbysxLHUsZCx0KTtjYXNlIDY0OnJldHVybiBuZXcgYShfLG8sbysxLHUsZCx0KTtjYXNlIDkxOnJldHVybiBuZXcgYShULG8sbysxLHUsZCx0KTtjYXNlIDkzOnJldHVybiBuZXcgYShPLG8sbysxLHUsZCx0KTtjYXNlIDEyMzpyZXR1cm4gbmV3IGEoRixvLG8rMSx1LGQsdCk7Y2FzZSAxMjQ6cmV0dXJuIG5ldyBhKE4sbyxvKzEsdSxkLHQpO2Nhc2UgMTI1OnJldHVybiBuZXcgYShJLG8sbysxLHUsZCx0KTtjYXNlIDY1OmNhc2UgNjY6Y2FzZSA2NzpjYXNlIDY4OmNhc2UgNjk6Y2FzZSA3MDpjYXNlIDcxOmNhc2UgNzI6Y2FzZSA3MzpjYXNlIDc0OmNhc2UgNzU6Y2FzZSA3NjpjYXNlIDc3OmNhc2UgNzg6Y2FzZSA3OTpjYXNlIDgwOmNhc2UgODE6Y2FzZSA4MjpjYXNlIDgzOmNhc2UgODQ6Y2FzZSA4NTpjYXNlIDg2OmNhc2UgODc6Y2FzZSA4ODpjYXNlIDg5OmNhc2UgOTA6Y2FzZSA5NTpjYXNlIDk3OmNhc2UgOTg6Y2FzZSA5OTpjYXNlIDEwMDpjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDEwMzpjYXNlIDEwNDpjYXNlIDEwNTpjYXNlIDEwNjpjYXNlIDEwNzpjYXNlIDEwODpjYXNlIDEwOTpjYXNlIDExMDpjYXNlIDExMTpjYXNlIDExMjpjYXNlIDExMzpjYXNlIDExNDpjYXNlIDExNTpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDExOTpjYXNlIDEyMDpjYXNlIDEyMTpjYXNlIDEyMjpyZXR1cm4geShuLG8sdSxkLHQpO2Nhc2UgNDU6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gZihuLG8sbSx1LGQsdCk7Y2FzZSAzNDpyZXR1cm4gaChuLG8sdSxkLHQpfXRocm93KDAsdi5zeW50YXhFcnJvcikobixvLGMobSkpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIDM5PT09ZT8iVW5leHBlY3RlZCBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyICgnKSwgZGlkIHlvdSBtZWFuIHRvIHVzZSBhIGRvdWJsZSBxdW90ZSAoXCIpPyI6IkNhbm5vdCBwYXJzZSB0aGUgdW5leHBlY3RlZCBjaGFyYWN0ZXIgIitzKGUpKyIuIn1mdW5jdGlvbiBsKGUsdCxuKXtmb3IodmFyIHI9ZS5sZW5ndGgsaT10O2k8cjspe3ZhciBvPUIuY2FsbChlLGkpO2lmKDk9PT1vfHwzMj09PW98fDQ0PT09b3x8NjUyNzk9PT1vKSsraTtlbHNlIGlmKDEwPT09bykrK2ksKytuLmxpbmUsbi5saW5lU3RhcnQ9aTtlbHNle2lmKDEzIT09bylicmVhazsxMD09PUIuY2FsbChlLGkrMSk/aSs9MjorK2ksKytuLmxpbmUsbi5saW5lU3RhcnQ9aX19cmV0dXJuIGl9ZnVuY3Rpb24gcChlLHQsbixyLGkpe3ZhciBvPWUuYm9keSxzPXZvaWQgMCx1PXQ7ZG97cz1CLmNhbGwobywrK3UpfXdoaWxlKG51bGwhPT1zJiYocz4zMXx8OT09PXMpKTtyZXR1cm4gbmV3IGEoUix0LHUsbixyLGksJC5jYWxsKG8sdCsxLHUpKX1mdW5jdGlvbiBmKGUsdCxuLHIsaSxvKXt2YXIgdT1lLmJvZHksYz1uLGw9dCxwPSExO2lmKDQ1PT09YyYmKGM9Qi5jYWxsKHUsKytsKSksNDg9PT1jKXtpZigoYz1CLmNhbGwodSwrK2wpKT49NDgmJmM8PTU3KXRocm93KDAsdi5zeW50YXhFcnJvcikoZSxsLCJJbnZhbGlkIG51bWJlciwgdW5leHBlY3RlZCBkaWdpdCBhZnRlciAwOiAiK3MoYykrIi4iKX1lbHNlIGw9ZChlLGwsYyksYz1CLmNhbGwodSxsKTtyZXR1cm4gNDY9PT1jJiYocD0hMCxjPUIuY2FsbCh1LCsrbCksbD1kKGUsbCxjKSxjPUIuY2FsbCh1LGwpKSw2OSE9PWMmJjEwMSE9PWN8fChwPSEwLGM9Qi5jYWxsKHUsKytsKSw0MyE9PWMmJjQ1IT09Y3x8KGM9Qi5jYWxsKHUsKytsKSksbD1kKGUsbCxjKSksbmV3IGEocD9NOlAsdCxsLHIsaSxvLCQuY2FsbCh1LHQsbCkpfWZ1bmN0aW9uIGQoZSx0LG4pe3ZhciByPWUuYm9keSxpPXQsbz1uO2lmKG8+PTQ4JiZvPD01Nyl7ZG97bz1CLmNhbGwociwrK2kpfXdoaWxlKG8+PTQ4JiZvPD01Nyk7cmV0dXJuIGl9dGhyb3coMCx2LnN5bnRheEVycm9yKShlLGksIkludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAiK3MobykrIi4iKX1mdW5jdGlvbiBoKGUsdCxuLHIsaSl7Zm9yKHZhciBvPWUuYm9keSx1PXQrMSxjPXUsbD0wLHA9IiI7dTxvLmxlbmd0aCYmbnVsbCE9PShsPUIuY2FsbChvLHUpKSYmMTAhPT1sJiYxMyE9PWwmJjM0IT09bDspe2lmKGw8MzImJjkhPT1sKXRocm93KDAsdi5zeW50YXhFcnJvcikoZSx1LCJJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAiK3MobCkrIi4iKTtpZigrK3UsOTI9PT1sKXtzd2l0Y2gocCs9JC5jYWxsKG8sYyx1LTEpLGw9Qi5jYWxsKG8sdSkpe2Nhc2UgMzQ6cCs9JyInO2JyZWFrO2Nhc2UgNDc6cCs9Ii8iO2JyZWFrO2Nhc2UgOTI6cCs9IlxcIjticmVhaztjYXNlIDk4OnArPSJcYiI7YnJlYWs7Y2FzZSAxMDI6cCs9IlxmIjticmVhaztjYXNlIDExMDpwKz0iXG4iO2JyZWFrO2Nhc2UgMTE0OnArPSJcciI7YnJlYWs7Y2FzZSAxMTY6cCs9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgZj1tKEIuY2FsbChvLHUrMSksQi5jYWxsKG8sdSsyKSxCLmNhbGwobyx1KzMpLEIuY2FsbChvLHUrNCkpO2lmKGY8MCl0aHJvdygwLHYuc3ludGF4RXJyb3IpKGUsdSwiSW52YWxpZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlOiBcXHUiK28uc2xpY2UodSsxLHUrNSkrIi4iKTtwKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGYpLHUrPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdygwLHYuc3ludGF4RXJyb3IpKGUsdSwiSW52YWxpZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlOiBcXCIrU3RyaW5nLmZyb21DaGFyQ29kZShsKSsiLiIpfSsrdSxjPXV9fWlmKDM0IT09bCl0aHJvdygwLHYuc3ludGF4RXJyb3IpKGUsdSwiVW50ZXJtaW5hdGVkIHN0cmluZy4iKTtyZXR1cm4gcCs9JC5jYWxsKG8sYyx1KSxuZXcgYShqLHQsdSsxLG4scixpLHApfWZ1bmN0aW9uIG0oZSx0LG4scil7cmV0dXJuIGcoZSk8PDEyfGcodCk8PDh8ZyhuKTw8NHxnKHIpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz9lLTQ4OmU+PTY1JiZlPD03MD9lLTU1OmU+PTk3JiZlPD0xMDI/ZS04NzotMX1mdW5jdGlvbiB5KGUsdCxuLHIsaSl7Zm9yKHZhciBvPWUuYm9keSxzPW8ubGVuZ3RoLHU9dCsxLGM9MDt1IT09cyYmbnVsbCE9PShjPUIuY2FsbChvLHUpKSYmKDk1PT09Y3x8Yz49NDgmJmM8PTU3fHxjPj02NSYmYzw9OTB8fGM+PTk3JiZjPD0xMjIpOykrK3U7cmV0dXJuIG5ldyBhKEwsdCx1LG4scixpLCQuY2FsbChvLHQsdSkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlRva2VuS2luZD12b2lkIDAsdC5jcmVhdGVMZXhlcj1yLHQuZ2V0VG9rZW5EZXNjPW87dmFyIHY9bigzKSxiPSI8U09GPiIseD0iPEVPRj4iLEM9IiEiLEU9IiQiLEQ9IigiLHc9IikiLFM9Ii4uLiIsaz0iOiIsQT0iPSIsXz0iQCIsVD0iWyIsTz0iXSIsRj0ieyIsTj0ifCIsST0ifSIsTD0iTmFtZSIsUD0iSW50IixNPSJGbG9hdCIsaj0iU3RyaW5nIixSPSJDb21tZW50IixCPSh0LlRva2VuS2luZD17U09GOmIsRU9GOngsQkFORzpDLERPTExBUjpFLFBBUkVOX0w6RCxQQVJFTl9SOncsU1BSRUFEOlMsQ09MT046ayxFUVVBTFM6QSxBVDpfLEJSQUNLRVRfTDpULEJSQUNLRVRfUjpPLEJSQUNFX0w6RixQSVBFOk4sQlJBQ0VfUjpJLE5BTUU6TCxJTlQ6UCxGTE9BVDpNLFNUUklORzpqLENPTU1FTlQ6Un0sU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0KSwkPVN0cmluZy5wcm90b3R5cGUuc2xpY2U7YS5wcm90b3R5cGUudG9KU09OPWEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm57a2luZDp0aGlzLmtpbmQsdmFsdWU6dGhpcy52YWx1ZSxsaW5lOnRoaXMubGluZSxjb2x1bW46dGhpcy5jb2x1bW59fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQpe2lmKCFlfHwic3RyaW5nIiE9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBuYW1lZC4gVW5leHBlY3RlZCBuYW1lOiAiK2UrIi4iKTtpZighdCYmIXMmJiFhJiYiX18iPT09ZS5zbGljZSgwLDIpJiYocz0hMCxjb25zb2xlJiZjb25zb2xlLndhcm4pKXt2YXIgbj1uZXcgRXJyb3IoJ05hbWUgIicrZSsnIiBtdXN0IG5vdCBiZWdpbiB3aXRoICJfXyIsIHdoaWNoIGlzIHJlc2VydmVkIGJ5IEdyYXBoUUwgaW50cm9zcGVjdGlvbi4gSW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBncmFwaHFsIHRoaXMgd2lsbCBiZWNvbWUgYSBoYXJkIGVycm9yLicpO2NvbnNvbGUud2FybihyKG4pKX1pZighaS50ZXN0KGUpKXRocm93IG5ldyBFcnJvcignTmFtZXMgbXVzdCBtYXRjaCAvXltfYS16QS1aXVtfYS16QS1aMC05XSokLyBidXQgIicrZSsnIiBkb2VzIG5vdC4nKX1mdW5jdGlvbiByKGUpe3ZhciB0PSIiLG49U3RyaW5nKGUpLnJlcGxhY2UobywiIikscj1lLnN0YWNrO3JldHVybiByJiYodD1yLnJlcGxhY2UobywiIikpLC0xPT09dC5pbmRleE9mKG4pJiYodD1uKyJcbiIrdCksdC50cmltKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYXNzZXJ0VmFsaWROYW1lPW4sdC5mb3JtYXRXYXJuaW5nPXI7dmFyIGk9L15bX2EtekEtWl1bX2EtekEtWjAtOV0qJC8sbz0vXkVycm9yOiAvLGE9Qm9vbGVhbihlJiZPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixQVUJMSUNfVVJMOiIifSkmJk9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLFBVQkxJQ19VUkw6IiJ9KS5HUkFQSFFMX05PX05BTUVfV0FSTklORykscz0hMX0pLmNhbGwodCxuKDU2KSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQpe3ZhciBuPWU7aWYodCBpbnN0YW5jZW9mIG0uR3JhcGhRTE5vbk51bGwpe3ZhciByPWkobix0Lm9mVHlwZSk7cmV0dXJuIHImJnIua2luZD09PWguTlVMTD9udWxsOnJ9aWYobnVsbD09PW4pcmV0dXJue2tpbmQ6aC5OVUxMfTtpZigoMCxmLmRlZmF1bHQpKG4pKXJldHVybiBudWxsO2lmKHQgaW5zdGFuY2VvZiBtLkdyYXBoUUxMaXN0KXt2YXIgcz10Lm9mVHlwZTtpZigoMCxhLmlzQ29sbGVjdGlvbikobikpe3ZhciBjPVtdO3JldHVybigwLGEuZm9yRWFjaCkobixmdW5jdGlvbihlKXt2YXIgdD1pKGUscyk7dCYmYy5wdXNoKHQpfSkse2tpbmQ6aC5MSVNULHZhbHVlczpjfX1yZXR1cm4gaShuLHMpfWlmKHQgaW5zdGFuY2VvZiBtLkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpe2lmKG51bGw9PT1ufHwib2JqZWN0IiE9PSgidW5kZWZpbmVkIj09PXR5cGVvZiBuPyJ1bmRlZmluZWQiOm8obikpKXJldHVybiBudWxsO3ZhciBwPXQuZ2V0RmllbGRzKCksZD1bXTtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1wW2VdLnR5cGUscj1pKG5bZV0sdCk7ciYmZC5wdXNoKHtraW5kOmguT0JKRUNUX0ZJRUxELG5hbWU6e2tpbmQ6aC5OQU1FLHZhbHVlOmV9LHZhbHVlOnJ9KX0pLHtraW5kOmguT0JKRUNULGZpZWxkczpkfX10IGluc3RhbmNlb2YgbS5HcmFwaFFMU2NhbGFyVHlwZXx8dCBpbnN0YW5jZW9mIG0uR3JhcGhRTEVudW1UeXBlfHwoMCx1LmRlZmF1bHQpKDAsIk11c3QgcHJvdmlkZSBJbnB1dCBUeXBlLCBjYW5ub3QgdXNlOiAiK1N0cmluZyh0KSk7dmFyIHk9dC5zZXJpYWxpemUobik7aWYoKDAsbC5kZWZhdWx0KSh5KSlyZXR1cm4gbnVsbDtpZigiYm9vbGVhbiI9PT10eXBlb2YgeSlyZXR1cm57a2luZDpoLkJPT0xFQU4sdmFsdWU6eX07aWYoIm51bWJlciI9PT10eXBlb2YgeSl7dmFyIHY9U3RyaW5nKHkpO3JldHVybi9eWzAtOV0rJC8udGVzdCh2KT97a2luZDpoLklOVCx2YWx1ZTp2fTp7a2luZDpoLkZMT0FULHZhbHVlOnZ9fWlmKCJzdHJpbmciPT09dHlwZW9mIHkpcmV0dXJuIHQgaW5zdGFuY2VvZiBtLkdyYXBoUUxFbnVtVHlwZT97a2luZDpoLkVOVU0sdmFsdWU6eX06dD09PWcuR3JhcGhRTElEJiYvXlswLTldKyQvLnRlc3QoeSk/e2tpbmQ6aC5JTlQsdmFsdWU6eX06e2tpbmQ6aC5TVFJJTkcsdmFsdWU6SlNPTi5zdHJpbmdpZnkoeSkuc2xpY2UoMSwtMSl9O3Rocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHZhbHVlIHRvIEFTVDogIitTdHJpbmcoeSkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX07dC5hc3RGcm9tVmFsdWU9aTt2YXIgYT1uKDQ0KSxzPW4oMTMpLHU9cihzKSxjPW4oMzUpLGw9cihjKSxwPW4oNTgpLGY9cihwKSxkPW4oMTApLGg9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShkKSxtPW4oNiksZz1uKDMyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9bi5uYW1lLnZhbHVlO3JldHVybiByPT09dS5TY2hlbWFNZXRhRmllbGREZWYubmFtZSYmZS5nZXRRdWVyeVR5cGUoKT09PXQ/dS5TY2hlbWFNZXRhRmllbGREZWY6cj09PXUuVHlwZU1ldGFGaWVsZERlZi5uYW1lJiZlLmdldFF1ZXJ5VHlwZSgpPT09dD91LlR5cGVNZXRhRmllbGREZWY6cj09PXUuVHlwZU5hbWVNZXRhRmllbGREZWYubmFtZSYmKDAscy5pc0NvbXBvc2l0ZVR5cGUpKHQpP3UuVHlwZU5hbWVNZXRhRmllbGREZWY6dCBpbnN0YW5jZW9mIHMuR3JhcGhRTE9iamVjdFR5cGV8fHQgaW5zdGFuY2VvZiBzLkdyYXBoUUxJbnRlcmZhY2VUeXBlP3QuZ2V0RmllbGRzKClbcl06dm9pZCAwfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGVJbmZvPXZvaWQgMDt2YXIgbz1uKDEwKSxhPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0obykscz1uKDYpLHU9bigyOCksYz1uKDI5KSxsPW4oNDUpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShsKTt0LlR5cGVJbmZvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3IodGhpcyxlKSx0aGlzLl9zY2hlbWE9dCx0aGlzLl90eXBlU3RhY2s9W10sdGhpcy5fcGFyZW50VHlwZVN0YWNrPVtdLHRoaXMuX2lucHV0VHlwZVN0YWNrPVtdLHRoaXMuX2ZpZWxkRGVmU3RhY2s9W10sdGhpcy5fZGlyZWN0aXZlPW51bGwsdGhpcy5fYXJndW1lbnQ9bnVsbCx0aGlzLl9lbnVtVmFsdWU9bnVsbCx0aGlzLl9nZXRGaWVsZERlZj1ufHxpfXJldHVybiBlLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7aWYodGhpcy5fdHlwZVN0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl90eXBlU3RhY2tbdGhpcy5fdHlwZVN0YWNrLmxlbmd0aC0xXX0sZS5wcm90b3R5cGUuZ2V0UGFyZW50VHlwZT1mdW5jdGlvbigpe2lmKHRoaXMuX3BhcmVudFR5cGVTdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fcGFyZW50VHlwZVN0YWNrW3RoaXMuX3BhcmVudFR5cGVTdGFjay5sZW5ndGgtMV19LGUucHJvdG90eXBlLmdldElucHV0VHlwZT1mdW5jdGlvbigpe2lmKHRoaXMuX2lucHV0VHlwZVN0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9pbnB1dFR5cGVTdGFja1t0aGlzLl9pbnB1dFR5cGVTdGFjay5sZW5ndGgtMV19LGUucHJvdG90eXBlLmdldEZpZWxkRGVmPWZ1bmN0aW9uKCl7aWYodGhpcy5fZmllbGREZWZTdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fZmllbGREZWZTdGFja1t0aGlzLl9maWVsZERlZlN0YWNrLmxlbmd0aC0xXX0sZS5wcm90b3R5cGUuZ2V0RGlyZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGl2ZX0sZS5wcm90b3R5cGUuZ2V0QXJndW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJndW1lbnR9LGUucHJvdG90eXBlLmdldEVudW1WYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnVtVmFsdWV9LGUucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NjaGVtYTtzd2l0Y2goZS5raW5kKXtjYXNlIGEuU0VMRUNUSU9OX1NFVDp2YXIgbj0oMCxzLmdldE5hbWVkVHlwZSkodGhpcy5nZXRUeXBlKCkpO3RoaXMuX3BhcmVudFR5cGVTdGFjay5wdXNoKCgwLHMuaXNDb21wb3NpdGVUeXBlKShuKT9uOnZvaWQgMCk7YnJlYWs7Y2FzZSBhLkZJRUxEOnZhciByPXRoaXMuZ2V0UGFyZW50VHlwZSgpLGk9dm9pZCAwO3ImJihpPXRoaXMuX2dldEZpZWxkRGVmKHQscixlKSksdGhpcy5fZmllbGREZWZTdGFjay5wdXNoKGkpLHRoaXMuX3R5cGVTdGFjay5wdXNoKGkmJmkudHlwZSk7YnJlYWs7Y2FzZSBhLkRJUkVDVElWRTp0aGlzLl9kaXJlY3RpdmU9dC5nZXREaXJlY3RpdmUoZS5uYW1lLnZhbHVlKTticmVhaztjYXNlIGEuT1BFUkFUSU9OX0RFRklOSVRJT046dmFyIG89dm9pZCAwOyJxdWVyeSI9PT1lLm9wZXJhdGlvbj9vPXQuZ2V0UXVlcnlUeXBlKCk6Im11dGF0aW9uIj09PWUub3BlcmF0aW9uP289dC5nZXRNdXRhdGlvblR5cGUoKToic3Vic2NyaXB0aW9uIj09PWUub3BlcmF0aW9uJiYobz10LmdldFN1YnNjcmlwdGlvblR5cGUoKSksdGhpcy5fdHlwZVN0YWNrLnB1c2gobyk7YnJlYWs7Y2FzZSBhLklOTElORV9GUkFHTUVOVDpjYXNlIGEuRlJBR01FTlRfREVGSU5JVElPTjp2YXIgdT1lLnR5cGVDb25kaXRpb24sbD11PygwLGMudHlwZUZyb21BU1QpKHQsdSk6dGhpcy5nZXRUeXBlKCk7dGhpcy5fdHlwZVN0YWNrLnB1c2goKDAscy5pc091dHB1dFR5cGUpKGwpP2w6dm9pZCAwKTticmVhaztjYXNlIGEuVkFSSUFCTEVfREVGSU5JVElPTjp2YXIgZj0oMCxjLnR5cGVGcm9tQVNUKSh0LGUudHlwZSk7dGhpcy5faW5wdXRUeXBlU3RhY2sucHVzaCgoMCxzLmlzSW5wdXRUeXBlKShmKT9mOnZvaWQgMCk7YnJlYWs7Y2FzZSBhLkFSR1VNRU5UOnZhciBkPXZvaWQgMCxoPXZvaWQgMCxtPXRoaXMuZ2V0RGlyZWN0aXZlKCl8fHRoaXMuZ2V0RmllbGREZWYoKTttJiYoZD0oMCxwLmRlZmF1bHQpKG0uYXJncyxmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZS5uYW1lLnZhbHVlfSkpJiYoaD1kLnR5cGUpLHRoaXMuX2FyZ3VtZW50PWQsdGhpcy5faW5wdXRUeXBlU3RhY2sucHVzaChoKTticmVhaztjYXNlIGEuTElTVDp2YXIgZz0oMCxzLmdldE51bGxhYmxlVHlwZSkodGhpcy5nZXRJbnB1dFR5cGUoKSk7dGhpcy5faW5wdXRUeXBlU3RhY2sucHVzaChnIGluc3RhbmNlb2Ygcy5HcmFwaFFMTGlzdD9nLm9mVHlwZTp2b2lkIDApO2JyZWFrO2Nhc2UgYS5PQkpFQ1RfRklFTEQ6dmFyIHk9KDAscy5nZXROYW1lZFR5cGUpKHRoaXMuZ2V0SW5wdXRUeXBlKCkpLHY9dm9pZCAwO2lmKHkgaW5zdGFuY2VvZiBzLkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpe3ZhciBiPXkuZ2V0RmllbGRzKClbZS5uYW1lLnZhbHVlXTt2PWI/Yi50eXBlOnZvaWQgMH10aGlzLl9pbnB1dFR5cGVTdGFjay5wdXNoKHYpO2JyZWFrO2Nhc2UgYS5FTlVNOnZhciB4PSgwLHMuZ2V0TmFtZWRUeXBlKSh0aGlzLmdldElucHV0VHlwZSgpKSxDPXZvaWQgMDt4IGluc3RhbmNlb2Ygcy5HcmFwaFFMRW51bVR5cGUmJihDPXguZ2V0VmFsdWUoZS52YWx1ZSkpLHRoaXMuX2VudW1WYWx1ZT1DfX0sZS5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2luZCl7Y2FzZSBhLlNFTEVDVElPTl9TRVQ6dGhpcy5fcGFyZW50VHlwZVN0YWNrLnBvcCgpO2JyZWFrO2Nhc2UgYS5GSUVMRDp0aGlzLl9maWVsZERlZlN0YWNrLnBvcCgpLHRoaXMuX3R5cGVTdGFjay5wb3AoKTticmVhaztjYXNlIGEuRElSRUNUSVZFOnRoaXMuX2RpcmVjdGl2ZT1udWxsO2JyZWFrO2Nhc2UgYS5PUEVSQVRJT05fREVGSU5JVElPTjpjYXNlIGEuSU5MSU5FX0ZSQUdNRU5UOmNhc2UgYS5GUkFHTUVOVF9ERUZJTklUSU9OOnRoaXMuX3R5cGVTdGFjay5wb3AoKTticmVhaztjYXNlIGEuVkFSSUFCTEVfREVGSU5JVElPTjp0aGlzLl9pbnB1dFR5cGVTdGFjay5wb3AoKTticmVhaztjYXNlIGEuQVJHVU1FTlQ6dGhpcy5fYXJndW1lbnQ9bnVsbCx0aGlzLl9pbnB1dFR5cGVTdGFjay5wb3AoKTticmVhaztjYXNlIGEuTElTVDpjYXNlIGEuT0JKRUNUX0ZJRUxEOnRoaXMuX2lucHV0VHlwZVN0YWNrLnBvcCgpO2JyZWFrO2Nhc2UgYS5FTlVNOnRoaXMuX2VudW1WYWx1ZT1udWxsfX0sZX0oKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj10Lmxlbmd0aCxvPWUubGVuZ3RoLzIsYT0wO2E8cjthKyspe3ZhciBzPWkoZSx0W2FdKTtzPD1NYXRoLm1heChvLHRbYV0ubGVuZ3RoLzIsMSkmJihuW3RbYV1dPXMpfXJldHVybiBPYmplY3Qua2V5cyhuKS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5bZV0tblt0XX0pfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj12b2lkIDAscj12b2lkIDAsaT1bXSxvPWUubGVuZ3RoLGE9dC5sZW5ndGg7Zm9yKG49MDtuPD1vO24rKylpW25dPVtuXTtmb3Iocj0xO3I8PWE7cisrKWlbMF1bcl09cjtmb3Iobj0xO248PW87bisrKWZvcihyPTE7cjw9YTtyKyspe3ZhciBzPWVbbi0xXT09PXRbci0xXT8wOjE7aVtuXVtyXT1NYXRoLm1pbihpW24tMV1bcl0rMSxpW25dW3ItMV0rMSxpW24tMV1bci0xXStzKSxuPjEmJnI+MSYmZVtuLTFdPT09dFtyLTJdJiZlW24tMl09PT10W3ItMV0mJihpW25dW3JdPU1hdGgubWluKGlbbl1bcl0saVtuLTJdW3ItMl0rcykpfXJldHVybiBpW29dW2FdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuc2xpY2UoMCxpKTtyZXR1cm4gdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuJyInK2UrJyInfSkucmVkdWNlKGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZSsodC5sZW5ndGg+Mj8iLCAiOiIgIikrKHI9PT10Lmxlbmd0aC0xPyJvciAiOiIiKStufSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBpPTV9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nVW5rbm93biBmcmFnbWVudCAiJytlKyciLid9ZnVuY3Rpb24gaShlKXtyZXR1cm57RnJhZ21lbnRTcHJlYWQ6ZnVuY3Rpb24odCl7dmFyIG49dC5uYW1lLnZhbHVlO2UuZ2V0RnJhZ21lbnQobil8fGUucmVwb3J0RXJyb3IobmV3IG8uR3JhcGhRTEVycm9yKHIobiksW3QubmFtZV0pKX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnVua25vd25GcmFnbWVudE1lc3NhZ2U9cix0Lktub3duRnJhZ21lbnROYW1lcz1pO3ZhciBvPW4oMyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nRnJhZ21lbnQgIicrZSsnIiBpcyBuZXZlciB1c2VkLid9ZnVuY3Rpb24gaShlKXt2YXIgdD1bXSxuPVtdO3JldHVybntPcGVyYXRpb25EZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2goZSksITF9LEZyYWdtZW50RGVmaW5pdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbi5wdXNoKGUpLCExfSxEb2N1bWVudDp7bGVhdmU6ZnVuY3Rpb24oKXt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLmdldFJlY3Vyc2l2ZWx5UmVmZXJlbmNlZEZyYWdtZW50cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lbZS5uYW1lLnZhbHVlXT0hMH0pfSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZS52YWx1ZTshMCE9PWlbbl0mJmUucmVwb3J0RXJyb3IobmV3IG8uR3JhcGhRTEVycm9yKHIobiksW3RdKSl9KX19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC51bnVzZWRGcmFnTWVzc2FnZT1yLHQuTm9VbnVzZWRGcmFnbWVudHM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0LG4scixpLGEscyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP28oZS5zY2hlbWEsZS5kb2N1bWVudCxlLnJvb3RWYWx1ZSxlLmNvbnRleHRWYWx1ZSxlLnZhcmlhYmxlVmFsdWVzLGUub3BlcmF0aW9uTmFtZSxlLmZpZWxkUmVzb2x2ZXIpOm8oZSx0LG4scixpLGEscyl9ZnVuY3Rpb24gbyhlLHQsbixyLGksbyxhKXt1KGUsdCxpKTt2YXIgcz12b2lkIDA7dHJ5e3M9YyhlLHQsbixyLGksbyxhKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtlcnJvcnM6W2VdfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShsKHMscy5vcGVyYXRpb24sbikpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1zLmVycm9ycy5sZW5ndGg/e2RhdGE6ZX06e2Vycm9yczpzLmVycm9ycyxkYXRhOmV9fSl9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9W10sbj1lO247KXQucHVzaChuLmtleSksbj1uLnByZXY7cmV0dXJuIHQucmV2ZXJzZSgpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm57cHJldjplLGtleTp0fX1mdW5jdGlvbiB1KGUsdCxuKXtlfHwoMCxCLmRlZmF1bHQpKDAsIk11c3QgcHJvdmlkZSBzY2hlbWEiKSx0fHwoMCxCLmRlZmF1bHQpKDAsIk11c3QgcHJvdmlkZSBkb2N1bWVudCIpLGUgaW5zdGFuY2VvZiBXLkdyYXBoUUxTY2hlbWF8fCgwLEIuZGVmYXVsdCkoMCwiU2NoZW1hIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgR3JhcGhRTFNjaGVtYS4gQWxzbyBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm90IG11bHRpcGxlIHZlcnNpb25zIG9mIEdyYXBoUUwgaW5zdGFsbGVkIGluIHlvdXIgbm9kZV9tb2R1bGVzIGRpcmVjdG9yeS4iKSxuJiYib2JqZWN0IiE9PSgidW5kZWZpbmVkIj09PXR5cGVvZiBuPyJ1bmRlZmluZWQiOlAobikpJiYoMCxCLmRlZmF1bHQpKDAsIlZhcmlhYmxlcyBtdXN0IGJlIHByb3ZpZGVkIGFzIGFuIE9iamVjdCB3aGVyZSBlYWNoIHByb3BlcnR5IGlzIGEgdmFyaWFibGUgdmFsdWUuIFBlcmhhcHMgbG9vayB0byBzZWUgaWYgYW4gdW5wYXJzZWQgSlNPTiBzdHJpbmcgd2FzIHByb3ZpZGVkLiIpfWZ1bmN0aW9uIGMoZSx0LG4scixpLG8sYSl7dmFyIHM9W10sdT12b2lkIDAsYz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHQuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtzd2l0Y2goZS5raW5kKXtjYXNlIFYuT1BFUkFUSU9OX0RFRklOSVRJT046aWYoIW8mJnUpdGhyb3cgbmV3IGouR3JhcGhRTEVycm9yKCJNdXN0IHByb3ZpZGUgb3BlcmF0aW9uIG5hbWUgaWYgcXVlcnkgY29udGFpbnMgbXVsdGlwbGUgb3BlcmF0aW9ucy4iKTsoIW98fGUubmFtZSYmZS5uYW1lLnZhbHVlPT09bykmJih1PWUpO2JyZWFrO2Nhc2UgVi5GUkFHTUVOVF9ERUZJTklUSU9OOmNbZS5uYW1lLnZhbHVlXT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGouR3JhcGhRTEVycm9yKCJHcmFwaFFMIGNhbm5vdCBleGVjdXRlIGEgcmVxdWVzdCBjb250YWluaW5nIGEgIitlLmtpbmQrIi4iLFtlXSl9fSksIXUpdGhyb3cgbz9uZXcgai5HcmFwaFFMRXJyb3IoJ1Vua25vd24gb3BlcmF0aW9uIG5hbWVkICInK28rJyIuJyk6bmV3IGouR3JhcGhRTEVycm9yKCJNdXN0IHByb3ZpZGUgYW4gb3BlcmF0aW9uLiIpO3ZhciBsPSgwLHEuZ2V0VmFyaWFibGVWYWx1ZXMpKGUsdS52YXJpYWJsZURlZmluaXRpb25zfHxbXSxpfHx7fSk7cmV0dXJue3NjaGVtYTplLGZyYWdtZW50czpjLHJvb3RWYWx1ZTpuLGNvbnRleHRWYWx1ZTpyLG9wZXJhdGlvbjp1LHZhcmlhYmxlVmFsdWVzOmwsZmllbGRSZXNvbHZlcjphfHxKLGVycm9yczpzfX1mdW5jdGlvbiBsKGUsdCxuKXt2YXIgcj1wKGUuc2NoZW1hLHQpLGk9aChlLHIsdC5zZWxlY3Rpb25TZXQsT2JqZWN0LmNyZWF0ZShudWxsKSxPYmplY3QuY3JlYXRlKG51bGwpKTt0cnl7dmFyIG89Im11dGF0aW9uIj09PXQub3BlcmF0aW9uP2YoZSxyLG4sdm9pZCAwLGkpOmQoZSxyLG4sdm9pZCAwLGkpLGE9SShvKTtyZXR1cm4gYT9hLnRoZW4odm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiBlLmVycm9ycy5wdXNoKHQpLFByb21pc2UucmVzb2x2ZShudWxsKX0pOm99Y2F0Y2godCl7cmV0dXJuIGUuZXJyb3JzLnB1c2godCksbnVsbH19ZnVuY3Rpb24gcChlLHQpe3N3aXRjaCh0Lm9wZXJhdGlvbil7Y2FzZSJxdWVyeSI6cmV0dXJuIGUuZ2V0UXVlcnlUeXBlKCk7Y2FzZSJtdXRhdGlvbiI6dmFyIG49ZS5nZXRNdXRhdGlvblR5cGUoKTtpZighbil0aHJvdyBuZXcgai5HcmFwaFFMRXJyb3IoIlNjaGVtYSBpcyBub3QgY29uZmlndXJlZCBmb3IgbXV0YXRpb25zIixbdF0pO3JldHVybiBuO2Nhc2Uic3Vic2NyaXB0aW9uIjp2YXIgcj1lLmdldFN1YnNjcmlwdGlvblR5cGUoKTtpZighcil0aHJvdyBuZXcgai5HcmFwaFFMRXJyb3IoIlNjaGVtYSBpcyBub3QgY29uZmlndXJlZCBmb3Igc3Vic2NyaXB0aW9ucyIsW3RdKTtyZXR1cm4gcjtkZWZhdWx0OnRocm93IG5ldyBqLkdyYXBoUUxFcnJvcigiQ2FuIG9ubHkgZXhlY3V0ZSBxdWVyaWVzLCBtdXRhdGlvbnMgYW5kIHN1YnNjcmlwdGlvbnMiLFt0XSl9fWZ1bmN0aW9uIGYoZSx0LG4scixpKXtyZXR1cm4gT2JqZWN0LmtleXMoaSkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8udGhlbihmdW5jdGlvbihvKXt2YXIgdT1pW2FdLGM9cyhyLGEpLGw9YihlLHQsbix1LGMpO2lmKHZvaWQgMD09PWwpcmV0dXJuIG87dmFyIHA9SShsKTtyZXR1cm4gcD9wLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIG9bYV09ZSxvfSk6KG9bYV09bCxvKX0pfSxQcm9taXNlLnJlc29sdmUoe30pKX1mdW5jdGlvbiBkKGUsdCxuLHIsaSl7dmFyIG89ITEsYT1PYmplY3Qua2V5cyhpKS5yZWR1Y2UoZnVuY3Rpb24oYSx1KXt2YXIgYz1pW3VdLGw9cyhyLHUpLHA9YihlLHQsbixjLGwpO3JldHVybiB2b2lkIDA9PT1wP2E6KGFbdV09cCxJKHApJiYobz0hMCksYSl9LE9iamVjdC5jcmVhdGUobnVsbCkpO3JldHVybiBvP3koYSk6YX1mdW5jdGlvbiBoKGUsdCxuLHIsaSl7Zm9yKHZhciBvPTA7bzxuLnNlbGVjdGlvbnMubGVuZ3RoO28rKyl7dmFyIGE9bi5zZWxlY3Rpb25zW29dO3N3aXRjaChhLmtpbmQpe2Nhc2UgVi5GSUVMRDppZighbShlLGEpKWNvbnRpbnVlO3ZhciBzPXYoYSk7cltzXXx8KHJbc109W10pLHJbc10ucHVzaChhKTticmVhaztjYXNlIFYuSU5MSU5FX0ZSQUdNRU5UOmlmKCFtKGUsYSl8fCFnKGUsYSx0KSljb250aW51ZTtoKGUsdCxhLnNlbGVjdGlvblNldCxyLGkpO2JyZWFrO2Nhc2UgVi5GUkFHTUVOVF9TUFJFQUQ6dmFyIHU9YS5uYW1lLnZhbHVlO2lmKGlbdV18fCFtKGUsYSkpY29udGludWU7aVt1XT0hMDt2YXIgYz1lLmZyYWdtZW50c1t1XTtpZighY3x8IWcoZSxjLHQpKWNvbnRpbnVlO2goZSx0LGMuc2VsZWN0aW9uU2V0LHIsaSl9fXJldHVybiByfWZ1bmN0aW9uIG0oZSx0KXt2YXIgbj0oMCxxLmdldERpcmVjdGl2ZVZhbHVlcykoSy5HcmFwaFFMU2tpcERpcmVjdGl2ZSx0LGUudmFyaWFibGVWYWx1ZXMpO2lmKG4mJiEwPT09bi5pZilyZXR1cm4hMTt2YXIgcj0oMCxxLmdldERpcmVjdGl2ZVZhbHVlcykoSy5HcmFwaFFMSW5jbHVkZURpcmVjdGl2ZSx0LGUudmFyaWFibGVWYWx1ZXMpO3JldHVybiFyfHwhMSE9PXIuaWZ9ZnVuY3Rpb24gZyhlLHQsbil7dmFyIHI9dC50eXBlQ29uZGl0aW9uO2lmKCFyKXJldHVybiEwO3ZhciBpPSgwLHoudHlwZUZyb21BU1QpKGUuc2NoZW1hLHIpO3JldHVybiBpPT09bnx8ISEoMCxILmlzQWJzdHJhY3RUeXBlKShpKSYmZS5zY2hlbWEuaXNQb3NzaWJsZVR5cGUoaSxuKX1mdW5jdGlvbiB5KGUpe3ZhciB0PU9iamVjdC5rZXlzKGUpLG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KTtyZXR1cm4gUHJvbWlzZS5hbGwobikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSxuLHIpe3JldHVybiBlW3Rbcl1dPW4sZX0sT2JqZWN0LmNyZWF0ZShudWxsKSl9KX1mdW5jdGlvbiB2KGUpe3JldHVybiBlLmFsaWFzP2UuYWxpYXMudmFsdWU6ZS5uYW1lLnZhbHVlfWZ1bmN0aW9uIGIoZSx0LG4scixpKXt2YXIgbz1yWzBdLGE9by5uYW1lLnZhbHVlLHM9TChlLnNjaGVtYSx0LGEpO2lmKHMpe3ZhciB1PXMucmVzb2x2ZXx8ZS5maWVsZFJlc29sdmVyLGM9eChlLHMscix0LGkpLGw9QyhlLHMscix1LG4sYyk7cmV0dXJuIEUoZSxzLnR5cGUscixjLGksbCl9fWZ1bmN0aW9uIHgoZSx0LG4scixpKXtyZXR1cm57ZmllbGROYW1lOm5bMF0ubmFtZS52YWx1ZSxmaWVsZE5vZGVzOm4scmV0dXJuVHlwZTp0LnR5cGUscGFyZW50VHlwZTpyLHBhdGg6aSxzY2hlbWE6ZS5zY2hlbWEsZnJhZ21lbnRzOmUuZnJhZ21lbnRzLHJvb3RWYWx1ZTplLnJvb3RWYWx1ZSxvcGVyYXRpb246ZS5vcGVyYXRpb24sdmFyaWFibGVWYWx1ZXM6ZS52YXJpYWJsZVZhbHVlc319ZnVuY3Rpb24gQyhlLHQsbixyLGksbyl7dHJ5e3JldHVybiByKGksKDAscS5nZXRBcmd1bWVudFZhbHVlcykodCxuWzBdLGUudmFyaWFibGVWYWx1ZXMpLGUuY29udGV4dFZhbHVlLG8pfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3I/ZTpuZXcgRXJyb3IoZSl9fWZ1bmN0aW9uIEUoZSx0LG4scixpLG8pe2lmKHQgaW5zdGFuY2VvZiBILkdyYXBoUUxOb25OdWxsKXJldHVybiBEKGUsdCxuLHIsaSxvKTt0cnl7dmFyIGE9RChlLHQsbixyLGksbykscz1JKGEpO3JldHVybiBzP3MudGhlbih2b2lkIDAsZnVuY3Rpb24odCl7cmV0dXJuIGUuZXJyb3JzLnB1c2godCksUHJvbWlzZS5yZXNvbHZlKG51bGwpfSk6YX1jYXRjaCh0KXtyZXR1cm4gZS5lcnJvcnMucHVzaCh0KSxudWxsfX1mdW5jdGlvbiBEKGUsdCxuLHIsaSxvKXt0cnl7dmFyIHM9dyhlLHQsbixyLGksbyksdT1JKHMpO3JldHVybiB1P3UudGhlbih2b2lkIDAsZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KCgwLGoubG9jYXRlZEVycm9yKShlLG4sYShpKSkpfSk6c31jYXRjaChlKXt0aHJvdygwLGoubG9jYXRlZEVycm9yKShlLG4sYShpKSl9fWZ1bmN0aW9uIHcoZSx0LG4scixpLG8pe3ZhciBhPUkobyk7aWYoYSlyZXR1cm4gYS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiB3KGUsdCxuLHIsaSxvKX0pO2lmKG8gaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBvO2lmKHQgaW5zdGFuY2VvZiBILkdyYXBoUUxOb25OdWxsKXt2YXIgcz13KGUsdC5vZlR5cGUsbixyLGksbyk7aWYobnVsbD09PXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmV0dXJuIG51bGwgZm9yIG5vbi1udWxsYWJsZSBmaWVsZCAiK3IucGFyZW50VHlwZS5uYW1lKyIuIityLmZpZWxkTmFtZSsiLiIpO3JldHVybiBzfWlmKCgwLFUuZGVmYXVsdCkobykpcmV0dXJuIG51bGw7aWYodCBpbnN0YW5jZW9mIEguR3JhcGhRTExpc3QpcmV0dXJuIFMoZSx0LG4scixpLG8pO2lmKCgwLEguaXNMZWFmVHlwZSkodCkpcmV0dXJuIGsodCxvKTtpZigoMCxILmlzQWJzdHJhY3RUeXBlKSh0KSlyZXR1cm4gQShlLHQsbixyLGksbyk7aWYodCBpbnN0YW5jZW9mIEguR3JhcGhRTE9iamVjdFR5cGUpcmV0dXJuIFQoZSx0LG4scixpLG8pO3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBsZXRlIHZhbHVlIG9mIHVuZXhwZWN0ZWQgdHlwZSAiJytTdHJpbmcodCkrJyIuJyl9ZnVuY3Rpb24gUyhlLHQsbixyLGksbyl7KDAsTS5pc0NvbGxlY3Rpb24pKG8pfHwoMCxCLmRlZmF1bHQpKDAsIkV4cGVjdGVkIEl0ZXJhYmxlLCBidXQgZGlkIG5vdCBmaW5kIG9uZSBmb3IgZmllbGQgIityLnBhcmVudFR5cGUubmFtZSsiLiIrci5maWVsZE5hbWUrIi4iKTt2YXIgYT10Lm9mVHlwZSx1PSExLGM9W107cmV0dXJuKDAsTS5mb3JFYWNoKShvLGZ1bmN0aW9uKHQsbyl7dmFyIGw9cyhpLG8pLHA9RShlLGEsbixyLGwsdCk7IXUmJkkocCkmJih1PSEwKSxjLnB1c2gocCl9KSx1P1Byb21pc2UuYWxsKGMpOmN9ZnVuY3Rpb24gayhlLHQpe2Uuc2VyaWFsaXplfHwoMCxCLmRlZmF1bHQpKDAsIk1pc3Npbmcgc2VyaWFsaXplIG1ldGhvZCBvbiB0eXBlIik7dmFyIG49ZS5zZXJpYWxpemUodCk7aWYoKDAsVS5kZWZhdWx0KShuKSl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgdmFsdWUgb2YgdHlwZSAiJytTdHJpbmcoZSkrJyIgYnV0IHJlY2VpdmVkOiAnK1N0cmluZyh0KSk7cmV0dXJuIG59ZnVuY3Rpb24gQShlLHQsbixyLGksbyl7dmFyIGE9dC5yZXNvbHZlVHlwZT90LnJlc29sdmVUeXBlKG8sZS5jb250ZXh0VmFsdWUscik6TihvLGUuY29udGV4dFZhbHVlLHIsdCkscz1JKGEpO3JldHVybiBzP3MudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gVChlLF8oYSxlLHQsbixyLG8pLG4scixpLG8pfSk6VChlLF8oYSxlLHQsbixyLG8pLG4scixpLG8pfWZ1bmN0aW9uIF8oZSx0LG4scixpLG8pe3ZhciBhPSJzdHJpbmciPT09dHlwZW9mIGU/dC5zY2hlbWEuZ2V0VHlwZShlKTplO2lmKCEoYSBpbnN0YW5jZW9mIEguR3JhcGhRTE9iamVjdFR5cGUpKXRocm93IG5ldyBqLkdyYXBoUUxFcnJvcigiQWJzdHJhY3QgdHlwZSAiK24ubmFtZSsiIG11c3QgcmVzb2x2ZSB0byBhbiBPYmplY3QgdHlwZSBhdCBydW50aW1lIGZvciBmaWVsZCAiK2kucGFyZW50VHlwZS5uYW1lKyIuIitpLmZpZWxkTmFtZSsnIHdpdGggdmFsdWUgIicrU3RyaW5nKG8pKyciLCByZWNlaXZlZCAiJytTdHJpbmcoYSkrJyIuJyxyKTtpZighdC5zY2hlbWEuaXNQb3NzaWJsZVR5cGUobixhKSl0aHJvdyBuZXcgai5HcmFwaFFMRXJyb3IoJ1J1bnRpbWUgT2JqZWN0IHR5cGUgIicrYS5uYW1lKyciIGlzIG5vdCBhIHBvc3NpYmxlIHR5cGUgZm9yICInK24ubmFtZSsnIi4nLHIpO3JldHVybiBhfWZ1bmN0aW9uIFQoZSx0LG4scixpLG8pe2lmKHQuaXNUeXBlT2Ype3ZhciBhPXQuaXNUeXBlT2YobyxlLmNvbnRleHRWYWx1ZSxyKSxzPUkoYSk7aWYocylyZXR1cm4gcy50aGVuKGZ1bmN0aW9uKGEpe2lmKCFhKXRocm93IE8odCxvLG4pO3JldHVybiBGKGUsdCxuLHIsaSxvKX0pO2lmKCFhKXRocm93IE8odCxvLG4pfXJldHVybiBGKGUsdCxuLHIsaSxvKX1mdW5jdGlvbiBPKGUsdCxuKXtyZXR1cm4gbmV3IGouR3JhcGhRTEVycm9yKCdFeHBlY3RlZCB2YWx1ZSBvZiB0eXBlICInK2UubmFtZSsnIiBidXQgZ290OiAnK1N0cmluZyh0KSsiLiIsbil9ZnVuY3Rpb24gRihlLHQsbixyLGksbyl7Zm9yKHZhciBhPU9iamVjdC5jcmVhdGUobnVsbCkscz1PYmplY3QuY3JlYXRlKG51bGwpLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGM9blt1XS5zZWxlY3Rpb25TZXQ7YyYmKGE9aChlLHQsYyxhLHMpKX1yZXR1cm4gZChlLHQsbyxpLGEpfWZ1bmN0aW9uIE4oZSx0LG4scil7Zm9yKHZhciBpPW4uc2NoZW1hLmdldFBvc3NpYmxlVHlwZXMociksbz1bXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYocy5pc1R5cGVPZil7dmFyIHU9cy5pc1R5cGVPZihlLHQsbiksYz1JKHUpO2lmKGMpb1thXT1jO2Vsc2UgaWYodSlyZXR1cm4gc319aWYoby5sZW5ndGgpcmV0dXJuIFByb21pc2UuYWxsKG8pLnRoZW4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XSlyZXR1cm4gaVt0XX0pfWZ1bmN0aW9uIEkoZSl7aWYoIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpQKGUpKSYmbnVsbCE9PWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgZS50aGVuKXJldHVybiBlfWZ1bmN0aW9uIEwoZSx0LG4pe3JldHVybiBuPT09US5TY2hlbWFNZXRhRmllbGREZWYubmFtZSYmZS5nZXRRdWVyeVR5cGUoKT09PXQ/US5TY2hlbWFNZXRhRmllbGREZWY6bj09PVEuVHlwZU1ldGFGaWVsZERlZi5uYW1lJiZlLmdldFF1ZXJ5VHlwZSgpPT09dD9RLlR5cGVNZXRhRmllbGREZWY6bj09PVEuVHlwZU5hbWVNZXRhRmllbGREZWYubmFtZT9RLlR5cGVOYW1lTWV0YUZpZWxkRGVmOnQuZ2V0RmllbGRzKClbbl19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdEZpZWxkUmVzb2x2ZXI9dm9pZCAwO3ZhciBQPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmV4ZWN1dGU9aSx0LnJlc3BvbnNlUGF0aEFzQXJyYXk9YSx0LmFkZFBhdGg9cyx0LmFzc2VydFZhbGlkRXhlY3V0aW9uQXJndW1lbnRzPXUsdC5idWlsZEV4ZWN1dGlvbkNvbnRleHQ9Yyx0LmdldE9wZXJhdGlvblJvb3RUeXBlPXAsdC5jb2xsZWN0RmllbGRzPWgsdC5idWlsZFJlc29sdmVJbmZvPXgsdC5yZXNvbHZlRmllbGRWYWx1ZU9yRXJyb3I9Qyx0LmdldEZpZWxkRGVmPUw7dmFyIE09big0NCksaj1uKDMpLFI9bigxMyksQj1yKFIpLCQ9bigzNSksVT1yKCQpLHo9bigyOSksRz1uKDEwKSxWPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oRykscT1uKDExOSksSD1uKDYpLFc9bigyNiksUT1uKDI4KSxLPW4oMjcpLEo9dC5kZWZhdWx0RmllbGRSZXNvbHZlcj1mdW5jdGlvbihlLHQsbixyKXtpZigib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOlAoZSkpfHwiZnVuY3Rpb24iPT09dHlwZW9mIGUpe3ZhciBpPWVbci5maWVsZE5hbWVdO3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgaT9lW3IuZmllbGROYW1lXSh0LG4scik6aX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0LG4pe2Zvcih2YXIgcj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV0sYT1vLnZhcmlhYmxlLm5hbWUudmFsdWUsdT0oMCxDLnR5cGVGcm9tQVNUKShlLG8udHlwZSk7aWYoISgwLF8uaXNJbnB1dFR5cGUpKHUpKXRocm93IG5ldyBsLkdyYXBoUUxFcnJvcignVmFyaWFibGUgIiQnK2ErJyIgZXhwZWN0ZWQgdmFsdWUgb2YgdHlwZSAiJysoMCxBLnByaW50KShvLnR5cGUpKyciIHdoaWNoIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGlucHV0IHR5cGUuJyxbby50eXBlXSk7dmFyIGM9blthXTtpZigoMCx2LmRlZmF1bHQpKGMpKXt2YXIgcD1vLmRlZmF1bHRWYWx1ZTtpZihwJiYoclthXT0oMCxFLnZhbHVlRnJvbUFTVCkocCx1KSksdSBpbnN0YW5jZW9mIF8uR3JhcGhRTE5vbk51bGwpdGhyb3cgbmV3IGwuR3JhcGhRTEVycm9yKCdWYXJpYWJsZSAiJCcrYSsnIiBvZiByZXF1aXJlZCB0eXBlICInK1N0cmluZyh1KSsnIiB3YXMgbm90IHByb3ZpZGVkLicsW29dKX1lbHNle3ZhciBmPSgwLEQuaXNWYWxpZEpTVmFsdWUpKGMsdSk7aWYoZi5sZW5ndGgpe3ZhciBkPWY/IlxuIitmLmpvaW4oIlxuIik6IiI7dGhyb3cgbmV3IGwuR3JhcGhRTEVycm9yKCdWYXJpYWJsZSAiJCcrYSsnIiBnb3QgaW52YWxpZCB2YWx1ZSAnK0pTT04uc3RyaW5naWZ5KGMpKyIuIitkLFtvXSl9dmFyIG09cyh1LGMpOygwLHYuZGVmYXVsdCkobSkmJigwLGguZGVmYXVsdCkoMCwiU2hvdWxkIGhhdmUgcmVwb3J0ZWQgZXJyb3IuIiksclthXT1tfX1yZXR1cm4gcn1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcj17fSxpPWUuYXJncyxvPXQuYXJndW1lbnRzO2lmKCFpfHwhbylyZXR1cm4gcjtmb3IodmFyIGE9KDAseC5kZWZhdWx0KShvLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudmFsdWV9KSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc10sYz11Lm5hbWUscD11LnR5cGUsZj1hW2NdLGQ9dS5kZWZhdWx0VmFsdWU7aWYoZilpZihmLnZhbHVlLmtpbmQ9PT1rLlZBUklBQkxFKXt2YXIgaD1mLnZhbHVlLm5hbWUudmFsdWU7aWYobiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saCkmJiEoMCx2LmRlZmF1bHQpKG5baF0pKXJbY109bltoXTtlbHNlIGlmKCgwLHYuZGVmYXVsdCkoZCkpe2lmKHAgaW5zdGFuY2VvZiBfLkdyYXBoUUxOb25OdWxsKXRocm93IG5ldyBsLkdyYXBoUUxFcnJvcignQXJndW1lbnQgIicrYysnIiBvZiByZXF1aXJlZCB0eXBlICInK1N0cmluZyhwKSsnIiB3YXMgcHJvdmlkZWQgdGhlIHZhcmlhYmxlICIkJytoKyciIHdoaWNoIHdhcyBub3QgcHJvdmlkZWQgYSBydW50aW1lIHZhbHVlLicsW2YudmFsdWVdKX1lbHNlIHJbY109ZH1lbHNle3ZhciBtPWYudmFsdWUsZz0oMCxFLnZhbHVlRnJvbUFTVCkobSxwLG4pO2lmKCgwLHYuZGVmYXVsdCkoZykpe3ZhciB5PSgwLHcuaXNWYWxpZExpdGVyYWxWYWx1ZSkocCxtKSxiPXk/IlxuIit5LmpvaW4oIlxuIik6IiI7dGhyb3cgbmV3IGwuR3JhcGhRTEVycm9yKCdBcmd1bWVudCAiJytjKyciIGdvdCBpbnZhbGlkIHZhbHVlICcrKDAsQS5wcmludCkobSkrIi4iK2IsW2YudmFsdWVdKX1yW2NdPWd9ZWxzZSBpZigoMCx2LmRlZmF1bHQpKGQpKXtpZihwIGluc3RhbmNlb2YgXy5HcmFwaFFMTm9uTnVsbCl0aHJvdyBuZXcgbC5HcmFwaFFMRXJyb3IoJ0FyZ3VtZW50ICInK2MrJyIgb2YgcmVxdWlyZWQgdHlwZSAiJytTdHJpbmcocCkrJyIgd2FzIG5vdCBwcm92aWRlZC4nLFt0XSl9ZWxzZSByW2NdPWR9cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLHQsbil7dmFyIHI9dC5kaXJlY3RpdmVzJiYoMCxmLmRlZmF1bHQpKHQuZGlyZWN0aXZlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lLnZhbHVlPT09ZS5uYW1lfSk7aWYocilyZXR1cm4gbyhlLHIsbil9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXQ7aWYoISgwLHYuZGVmYXVsdCkobikpe2lmKGUgaW5zdGFuY2VvZiBfLkdyYXBoUUxOb25OdWxsKXtpZihudWxsPT09bilyZXR1cm47cmV0dXJuIHMoZS5vZlR5cGUsbil9aWYobnVsbD09PW4pcmV0dXJuIG51bGw7aWYoZSBpbnN0YW5jZW9mIF8uR3JhcGhRTExpc3Qpe3ZhciByPWUub2ZUeXBlO2lmKCgwLGMuaXNDb2xsZWN0aW9uKShuKSl7dmFyIGk9W10sbz0oMCxjLmNyZWF0ZUl0ZXJhdG9yKShuKTtpZighbylyZXR1cm47Zm9yKHZhciBhPXZvaWQgMDshKGE9by5uZXh0KCkpLmRvbmU7KXt2YXIgbD1zKHIsYS52YWx1ZSk7aWYoKDAsdi5kZWZhdWx0KShsKSlyZXR1cm47aS5wdXNoKGwpfXJldHVybiBpfXZhciBwPXMocixuKTtpZigoMCx2LmRlZmF1bHQpKHApKXJldHVybjtyZXR1cm5bcyhyLG4pXX1pZihlIGluc3RhbmNlb2YgXy5HcmFwaFFMSW5wdXRPYmplY3RUeXBlKXtpZigib2JqZWN0IiE9PSgidW5kZWZpbmVkIj09PXR5cGVvZiBuPyJ1bmRlZmluZWQiOnUobikpKXJldHVybjtmb3IodmFyIGY9T2JqZWN0LmNyZWF0ZShudWxsKSxkPWUuZ2V0RmllbGRzKCksbT1PYmplY3Qua2V5cyhkKSx5PTA7eTxtLmxlbmd0aDt5Kyspe3ZhciBiPW1beV0seD1kW2JdO2lmKCgwLHYuZGVmYXVsdCkobltiXSkpaWYoKDAsdi5kZWZhdWx0KSh4LmRlZmF1bHRWYWx1ZSkpe2lmKHgudHlwZSBpbnN0YW5jZW9mIF8uR3JhcGhRTE5vbk51bGwpcmV0dXJufWVsc2UgZltiXT14LmRlZmF1bHRWYWx1ZTtlbHNle3ZhciBDPXMoeC50eXBlLG5bYl0pO2lmKCgwLHYuZGVmYXVsdCkoQykpcmV0dXJuO2ZbYl09Q319cmV0dXJuIGZ9ZSBpbnN0YW5jZW9mIF8uR3JhcGhRTFNjYWxhclR5cGV8fGUgaW5zdGFuY2VvZiBfLkdyYXBoUUxFbnVtVHlwZXx8KDAsaC5kZWZhdWx0KSgwLCJNdXN0IGJlIGlucHV0IHR5cGUiKTt2YXIgRT1lLnBhcnNlVmFsdWUobik7aWYoISgwLGcuZGVmYXVsdCkoRSkpcmV0dXJuIEV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX07dC5nZXRWYXJpYWJsZVZhbHVlcz1pLHQuZ2V0QXJndW1lbnRWYWx1ZXM9byx0LmdldERpcmVjdGl2ZVZhbHVlcz1hLHQuY29lcmNlVmFsdWU9czt2YXIgYz1uKDQ0KSxsPW4oMykscD1uKDQ1KSxmPXIocCksZD1uKDEzKSxoPXIoZCksbT1uKDM1KSxnPXIobSkseT1uKDU4KSx2PXIoeSksYj1uKDQ2KSx4PXIoYiksQz1uKDI5KSxFPW4oNTkpLEQ9bigyMDcpLHc9big4MiksUz1uKDEwKSxrPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oUyksQT1uKDE5KSxfPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUscil7cmV0dXJuIGVbdChyKV09bihyKSxlfSxPYmplY3QuY3JlYXRlKG51bGwpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fCFPYmplY3Qoby5hKShlKSYmT2JqZWN0KGEuYSkoZSkmJk9iamVjdChpLmEpKGUpPT1zfXZhciBpPW4oMzMpLG89big0NyksYT1uKDMxKSxzPSJbb2JqZWN0IFN0cmluZ10iO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGwhPWUmJk9iamVjdChvLmEpKGUubGVuZ3RoKSYmIU9iamVjdChpLmEpKGUpfXZhciBpPW4oNDgpLG89bigyMTYpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxPYmplY3Qoby5hKShlKSYmT2JqZWN0KGkuYSkoZSk9PWF9dmFyIGk9bigzMyksbz1uKDMxKSxhPSJbb2JqZWN0IFN5bWJvbF0iO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuYSxuPWFyZ3VtZW50c1syXTt1KCkoT2JqZWN0KG8uYSkodCl8fE9iamVjdChhLmEpKHQpLCJFeHBlY3RlZCBwYXlsb2FkQ3JlYXRvciB0byBiZSBhIGZ1bmN0aW9uLCB1bmRlZmluZWQgb3IgbnVsbCIpO3ZhciByPU9iamVjdChhLmEpKHQpfHx0PT09aS5hP2kuYTpmdW5jdGlvbihlKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yP2U6dC5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChyKSl9LHM9T2JqZWN0KG8uYSkobiksYz1lLnRvU3RyaW5nKCksbD1mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyksaT17dHlwZTplfTtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yJiYoaS5lcnJvcj0hMCksdm9pZCAwIT09dCYmKGkucGF5bG9hZD10KSxzJiYoaS5tZXRhPW4uYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpLGl9O3JldHVybiBsLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGx9dC5hPXI7dmFyIGk9big2Myksbz1uKDQ4KSxhPW4oNDIzKSxzPW4oMjApLHU9bi5uKHMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoT2JqZWN0KGkuYSkoZSkpcmV0dXJuIEFycmF5LmZyb20oZS5rZXlzKCkpO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PT10eXBlb2YgUmVmbGVjdC5vd25LZXlzKXJldHVybiBSZWZsZWN0Lm93bktleXMoZSk7dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpKSksdH10LmE9cjt2YXIgaT1uKDgzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwKSxpPU9iamVjdC5jcmVhdGUsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFPYmplY3Qoci5hKSh0KSlyZXR1cm57fTtpZihpKXJldHVybiBpKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxufX0oKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189YSx0aGlzLl9fdmlld3NfXz1bXX12YXIgaT1uKDEyNiksbz1uKDEyOCksYT00Mjk0OTY3Mjk1O3IucHJvdG90eXBlPU9iamVjdChpLmEpKG8uYS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsdC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe310LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgcz1lW25dO3MhPT10JiZzIT09aXx8KGVbbl09aSxhW28rK109bil9cmV0dXJuIGF9dmFyIGk9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoInNlc3Npb25JZCBjYW50IGJlIG51bGwiKTtyZXR1cm4gZS5nZXQodCl8fG5ldyB1fXZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMTQpLGE9bigyMykscz1uKDM2KSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b09iamVjdCgpO3JldHVybiBvLnNldChlLCJuYXZTdGFjayIsby5MaXN0KFtdKSl9LHR9KG8uUmVjb3JkKHtuYXZTdGFjazpvLkxpc3QoW10pLGRvY3NPcGVuOiExLGRvY3NXaWR0aDpzLmNvbHVtbldpZHRoLGFjdGl2ZVRhYklkeDpudWxsLGtleU1vdmU6ITF9KSk7dC5Eb2NzU2Vzc2lvbj11O3ZhciBjPW8uTWFwKHsiIjpuZXcgdX0pO3QuZGVmYXVsdD1hLmhhbmRsZUFjdGlvbnMoe1NFVF9TVEFDS1M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQsaT1uLnNlc3Npb25JZCxvPW4uc3RhY2tzLGE9cihlLGkpO3JldHVybiBhPWEuc2V0KCJuYXZTdGFjayIsbyksZS5zZXQoaSxhKX0sQUREX1NUQUNLOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLGk9bi5zZXNzaW9uSWQsYT1uLmZpZWxkLHM9bi54LHU9bi55O2EucGF0aHx8KGEucGF0aD1hLm5hbWUpO3ZhciBjPXIoZSxpKTtyZXR1cm4gYz1jLnVwZGF0ZSgibmF2U3RhY2siLGZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHM8dC5jb3VudCgpJiYodD10LnNsaWNlKDAscykpLHQucHVzaChvLk1hcCh7eDpzLHk6dSxmaWVsZDphfSkpfSksZS5zZXQoaSxjKX0sVE9HR0xFX0RPQ1M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQsaT1uLnNlc3Npb25JZCxvPW4uYWN0aXZlVGFiSWR4LGE9cihlLGkpO3JldHVybiBhPWEuc2V0KCJkb2NzT3BlbiIsIWEuZG9jc09wZW4pLCJudW1iZXIiPT09dHlwZW9mIG8mJihhPWEuc2V0KCJhY3RpdmVUYWJJZHgiLGEuZG9jc09wZW4/bzpudWxsKSksZS5zZXQoaSxhKX0sU0VUX0RPQ1NfVklTSUJMRTpmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxpPW4uc2Vzc2lvbklkLG89bi5vcGVuLGE9bi5hY3RpdmVUYWJJZHgscz1yKGUsaSk7cmV0dXJuIHM9cy5zZXQoImRvY3NPcGVuIiwhIW8pLHMuZG9jc09wZW4/Im51bWJlciI9PT10eXBlb2YgYSYmKHM9cy5zZXQoImFjdGl2ZVRhYklkeCIsYSkpOnM9cy5zZXQoImFjdGl2ZVRhYklkeCIsbnVsbCksZS5zZXQoaSxzKX0sQ0hBTkdFX1dJRFRIX0RPQ1M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQsaT1uLnNlc3Npb25JZCxvPW4ud2lkdGgsYT1yKGUsaSk7cmV0dXJuIGE9YS5zZXQoImRvY3NXaWR0aCIsbyksZS5zZXQoaSxhKX0sQ0hBTkdFX0tFWV9NT1ZFOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLGk9bi5zZXNzaW9uSWQsbz1uLmtleU1vdmUsYT1yKGUsaSk7cmV0dXJuIGE9YS5zZXQoImtleU1vdmUiLG8pLGUuc2V0KGksYSl9fSxjKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHIsaT1uKDIzKTt0LnRvZ2dsZUhpc3RvcnlJdGVtU3RhcnJpbmc9KHI9aS5jcmVhdGVBY3Rpb25zKHtUT0dHTEVfSElTVE9SWV9JVEVNX1NUQVJSSU5HOmZ1bmN0aW9uKGUpe3JldHVybntzZXNzaW9uSWQ6ZX19LEFERF9ISVNUT1JZX0lURU06ZnVuY3Rpb24oZSl7cmV0dXJue3Nlc3Npb246ZX19fSksci50b2dnbGVIaXN0b3J5SXRlbVN0YXJyaW5nKSx0LmFkZEhpc3RvcnlJdGVtPXIuYWRkSGlzdG9yeUl0ZW19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByLGk9bigyMyk7dC5zaGFyZT0ocj1pLmNyZWF0ZUFjdGlvbnMoe1RPR0dMRV9TSEFSRV9ISVNUT1JZOmZ1bmN0aW9uKCl7cmV0dXJue319LFRPR0dMRV9TSEFSRV9IRUFERVJTOmZ1bmN0aW9uKCl7cmV0dXJue319LFRPR0dMRV9TSEFSRV9BTExfVEFCUzpmdW5jdGlvbigpe3JldHVybnt9fSxTSEFSRTpmdW5jdGlvbigpe3JldHVybnt9fSxTRVRfU0hBUkVfVVJMOmZ1bmN0aW9uKGUpe3JldHVybntzaGFyZVVybDplfX19KSxyLnNoYXJlKSx0LnRvZ2dsZVNoYXJlSGlzdG9yeT1yLnRvZ2dsZVNoYXJlSGlzdG9yeSx0LnRvZ2dsZVNoYXJlSGVhZGVycz1yLnRvZ2dsZVNoYXJlSGVhZGVycyx0LnRvZ2dsZVNoYXJlQWxsVGFicz1yLnRvZ2dsZVNoYXJlQWxsVGFicyx0LnNldFNoYXJlVXJsPXIuc2V0U2hhcmVVcmx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9big1MzcpLHM9big5KSx1PW4oMjcyKSxjPW4oMTYpLGw9big4KSxwPW4oMTIpLGY9bigzNyksZD1uKDEpLGg9big2NSksbT1uZXcgYSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uc2V0UmVmPWZ1bmN0aW9uKGUpe24ubm9kZT1lfSxuLm9uS2V5VXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmtleUNvZGU7ODYhPT1yJiYocj49NjUmJnI8PTkwfHwhdC5zaGlmdEtleSYmcj49NDgmJnI8PTU3fHx0LnNoaWZ0S2V5JiYxODk9PT1yfHx0LnNoaWZ0S2V5JiY1MD09PXJ8fHQuc2hpZnRLZXkmJjU3PT09cikmJm4uZWRpdG9yLmV4ZWNDb21tYW5kKCJhdXRvY29tcGxldGUiKX0sbi5vbkVkaXQ9ZnVuY3Rpb24oKXshbi5pZ25vcmVDaGFuZ2VFdmVudCYmbi5wcm9wcy5vbkNoYW5nZSYmKG4uY2FjaGVkVmFsdWU9bi5lZGl0b3IuZ2V0VmFsdWUoKSxuLnByb3BzLm9uQ2hhbmdlKG4uY2FjaGVkVmFsdWUpKX0sbi5vbkhhc0NvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt1LmRlZmF1bHQoZSx0LG4ucHJvcHMub25IaW50SW5mb3JtYXRpb25SZW5kZXIpfSxuLmNsb3NlQ29tcGxldGlvbj1mdW5jdGlvbigpe24uZWRpdG9yLnN0YXRlLmNvbXBsZXRpb25BY3RpdmUmJiJmdW5jdGlvbiI9PT10eXBlb2Ygbi5lZGl0b3Iuc3RhdGUuY29tcGxldGlvbkFjdGl2ZS5jbG9zZSYmbi5lZGl0b3Iuc3RhdGUuY29tcGxldGlvbkFjdGl2ZS5jbG9zZSgpfSxuLmNhY2hlZFZhbHVlPWUudmFsdWV8fCIiLG4ucHJvcHMuZ2V0UmVmJiZuLnByb3BzLmdldFJlZihuKSxufXJldHVybiByKGksdCksaS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9bigyKTtuKDEzNyksbigyNzMpLG4oNjkpLG4oMTM4KSxuKDg5KSxuKDcwKSxuKDI3NCksbigzOCksbig5MCksbigzOSksbigxMzkpLG4oOTEpLG4oNTk0KSxuKDU5NSksbig2MDcpLG4oNjA4KSxuKDYxMCksbigyODMpO3ZhciBpPVtdO2kucHVzaCgiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpLGkucHVzaCgiQ29kZU1pcnJvci1mb2xkZ3V0dGVyIiksdGhpcy5lZGl0b3I9cih0aGlzLm5vZGUse2F1dG9mb2N1czohaC5pc0lmcmFtZSgpLHZhbHVlOnRoaXMucHJvcHMudmFsdWV8fCIiLGxpbmVOdW1iZXJzOiEwLHRhYlNpemU6dGhpcy5wcm9wcy50YWJXaWR0aHx8MixpbmRlbnRXaXRoVGFiczp0aGlzLnByb3BzLnVzZVRhYnN8fCExLG1vZGU6ImdyYXBocWwiLHRoZW1lOiJncmFwaGlxbCIsa2V5TWFwOiJzdWJsaW1lIixhdXRvQ2xvc2VCcmFja2V0czohMCxtYXRjaEJyYWNrZXRzOiEwLHNob3dDdXJzb3JXaGVuU2VsZWN0aW5nOiEwLHJlYWRPbmx5OiExLGZvbGRHdXR0ZXI6e21pbkZvbGRTaXplOjR9LGxpbnQ6e3NjaGVtYTp0aGlzLnByb3BzLnNjaGVtYX0saGludE9wdGlvbnM6e3NjaGVtYTp0aGlzLnByb3BzLnNjaGVtYSxjbG9zZU9uVW5mb2N1czohMCxjb21wbGV0ZVNpbmdsZTohMX0saW5mbzp7c2NoZW1hOnRoaXMucHJvcHMuc2NoZW1hLHJlbmRlckRlc2NyaXB0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBtLnJlbmRlcihlKX0sb25DbGljazp0aGlzLnByb3BzLm9uQ2xpY2tSZWZlcmVuY2V9LGp1bXA6e3NjaGVtYTp0aGlzLnByb3BzLnNjaGVtYSxvbkNsaWNrOnRoaXMucHJvcHMub25DbGlja1JlZmVyZW5jZX0sZ3V0dGVyczppLGV4dHJhS2V5czp7IkNtZC1TcGFjZSI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0b3Iuc2hvd0hpbnQoe2NvbXBsZXRlU2luZ2xlOiEwfSl9LCJDdHJsLVNwYWNlIjpmdW5jdGlvbigpe3JldHVybiB0LmVkaXRvci5zaG93SGludCh7Y29tcGxldGVTaW5nbGU6ITB9KX0sIkFsdC1TcGFjZSI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0b3Iuc2hvd0hpbnQoe2NvbXBsZXRlU2luZ2xlOiEwfSl9LCJTaGlmdC1TcGFjZSI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0b3Iuc2hvd0hpbnQoe2NvbXBsZXRlU2luZ2xlOiEwfSl9LCJDbWQtRW50ZXIiOmZ1bmN0aW9uKCl7dC5wcm9wcy5vblJ1blF1ZXJ5JiZ0LnByb3BzLm9uUnVuUXVlcnkoKX0sIkN0cmwtRW50ZXIiOmZ1bmN0aW9uKCl7dC5wcm9wcy5vblJ1blF1ZXJ5JiZ0LnByb3BzLm9uUnVuUXVlcnkoKX0sIkN0cmwtTGVmdCI6ImdvU3Vid29yZExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29TdWJ3b3JkUmlnaHQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUYiOiJmaW5kUGVyc2lzdGVudCIsIkN0cmwtRiI6ImZpbmRQZXJzaXN0ZW50In19KSx0aGlzLmVkaXRvci5vbigiY2hhbmdlIix0aGlzLm9uRWRpdCksdGhpcy5lZGl0b3Iub24oImtleXVwIix0aGlzLm9uS2V5VXApLHRoaXMuZWRpdG9yLm9uKCJoYXNDb21wbGV0aW9uIix0aGlzLm9uSGFzQ29tcGxldGlvbiksZS5lZGl0b3I9dGhpcy5lZGl0b3IsdGhpcy5wcm9wcy5zY3JvbGxUb3AmJnRoaXMuc2Nyb2xsVG8odGhpcy5wcm9wcy5zY3JvbGxUb3ApfSxpLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPW4oMik7dGhpcy5pZ25vcmVDaGFuZ2VFdmVudD0hMCx0aGlzLnByb3BzLnNjaGVtYSE9PWUuc2NoZW1hJiYodGhpcy5lZGl0b3Iub3B0aW9ucy5saW50LnNjaGVtYT10aGlzLnByb3BzLnNjaGVtYSx0aGlzLmVkaXRvci5vcHRpb25zLmhpbnRPcHRpb25zLnNjaGVtYT10aGlzLnByb3BzLnNjaGVtYSx0aGlzLmVkaXRvci5vcHRpb25zLmluZm8uc2NoZW1hPXRoaXMucHJvcHMuc2NoZW1hLHRoaXMuZWRpdG9yLm9wdGlvbnMuanVtcC5zY2hlbWE9dGhpcy5wcm9wcy5zY2hlbWEsci5zaWduYWwodGhpcy5lZGl0b3IsImNoYW5nZSIsdGhpcy5lZGl0b3IpKSx0aGlzLnByb3BzLnZhbHVlIT09ZS52YWx1ZSYmdGhpcy5wcm9wcy52YWx1ZSE9PXRoaXMuY2FjaGVkVmFsdWUmJih0aGlzLmNhY2hlZFZhbHVlPXRoaXMucHJvcHMudmFsdWUsdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5wcm9wcy52YWx1ZSkpLHRoaXMuaWdub3JlQ2hhbmdlRXZlbnQ9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe3QucHJvcHMuc2Vzc2lvbklkIT09ZS5zZXNzaW9uSWQmJnQucHJvcHMuc2Nyb2xsVG9wJiZ0LnNjcm9sbFRvKHQucHJvcHMuc2Nyb2xsVG9wKX0pfSxpLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuc2Vzc2lvbklkIT09ZS5zZXNzaW9uSWQmJih0aGlzLmNsb3NlQ29tcGxldGlvbigpLHRoaXMudXBkYXRlU2Vzc2lvblNjcm9sbFRvcCgpLGguaXNJZnJhbWUoKXx8dGhpcy5lZGl0b3IuZm9jdXMoKSl9LGkucHJvdG90eXBlLnNjcm9sbFRvPWZ1bmN0aW9uKGUpe3RoaXMubm9kZS5xdWVyeVNlbGVjdG9yKCIuQ29kZU1pcnJvci1zY3JvbGwiKS5zY3JvbGxUb3A9ZX0saS5wcm90b3R5cGUudXBkYXRlU2Vzc2lvblNjcm9sbFRvcD1mdW5jdGlvbigpe3RoaXMucHJvcHMuc2V0U2Nyb2xsVG9wJiZ0aGlzLnByb3BzLnNlc3Npb25JZCYmdGhpcy5wcm9wcy5zZXRTY3JvbGxUb3AodGhpcy5wcm9wcy5zZXNzaW9uSWQsdGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3IoIi5Db2RlTWlycm9yLXNjcm9sbCIpLnNjcm9sbFRvcCl9LGkucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVTZXNzaW9uU2Nyb2xsVG9wKCksdGhpcy5lZGl0b3Iub2ZmKCJjaGFuZ2UiLHRoaXMub25FZGl0KSx0aGlzLmVkaXRvci5vZmYoImtleXVwIix0aGlzLm9uS2V5VXApLHRoaXMuZWRpdG9yLm9mZigiaGFzQ29tcGxldGlvbiIsdGhpcy5vbkhhc0NvbXBsZXRpb24pLHRoaXMuZWRpdG9yPW51bGx9LGkucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoZi5kZWZhdWx0LG51bGwsby5jcmVhdGVFbGVtZW50KGIse3JlZjp0aGlzLnNldFJlZn0pKX0saS5wcm90b3R5cGUuZ2V0Q29kZU1pcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saS5wcm90b3R5cGUuZ2V0Q2xpZW50SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZSYmdGhpcy5ub2RlLmNsaWVudEhlaWdodH0saX0oby5QdXJlQ29tcG9uZW50KTt0LlF1ZXJ5RWRpdG9yPWc7dmFyIHk9bC5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioe3ZhbHVlOnAuZ2V0UXVlcnksc2Vzc2lvbklkOnAuZ2V0U2VsZWN0ZWRTZXNzaW9uSWRGcm9tUm9vdCxzY3JvbGxUb3A6cC5nZXRTY3JvbGxUb3AsdGFiV2lkdGg6cC5nZXRUYWJXaWR0aCx1c2VUYWJzOnAuZ2V0VXNlVGFic30pO3QuZGVmYXVsdD1zLmNvbm5lY3QoeSx7b25DaGFuZ2U6Yy5lZGl0UXVlcnksc2V0U2Nyb2xsVG9wOmMuc2V0U2Nyb2xsVG9wfSkoZyk7dmFyIHYsYj1kLnN0eWxlZC5kaXYodnx8KHY9aShbIlxuICBmbGV4OiAxIDEgMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuQ29kZU1pcnJvciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4iXSxbIlxuICBmbGV4OiAxIDEgMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuQ29kZU1pcnJvciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuZWRpdG9yQmFja2dyb3VuZH0pfSkuY2FsbCh0LG4oMTEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fX3J1bGVzX189W10sdGhpcy5fX2NhY2hlX189bnVsbH1yLnByb3RvdHlwZS5fX2ZpbmRfXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuX19ydWxlc19fLmxlbmd0aDt0KyspaWYodGhpcy5fX3J1bGVzX19bdF0ubmFtZT09PWUpcmV0dXJuIHQ7cmV0dXJuLTF9LHIucHJvdG90eXBlLl9fY29tcGlsZV9fPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PVsiIl07ZS5fX3J1bGVzX18uZm9yRWFjaChmdW5jdGlvbihlKXtlLmVuYWJsZWQmJmUuYWx0LmZvckVhY2goZnVuY3Rpb24oZSl7dC5pbmRleE9mKGUpPDAmJnQucHVzaChlKX0pfSksZS5fX2NhY2hlX189e30sdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX19jYWNoZV9fW3RdPVtdLGUuX19ydWxlc19fLmZvckVhY2goZnVuY3Rpb24obil7bi5lbmFibGVkJiYodCYmbi5hbHQuaW5kZXhPZih0KTwwfHxlLl9fY2FjaGVfX1t0XS5wdXNoKG4uZm4pKX0pfSl9LHIucHJvdG90eXBlLmF0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9fZmluZF9fKGUpLGk9bnx8e307aWYoLTE9PT1yKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHJ1bGUgbm90IGZvdW5kOiAiK2UpO3RoaXMuX19ydWxlc19fW3JdLmZuPXQsdGhpcy5fX3J1bGVzX19bcl0uYWx0PWkuYWx0fHxbXSx0aGlzLl9fY2FjaGVfXz1udWxsfSxyLnByb3RvdHlwZS5iZWZvcmU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5fX2ZpbmRfXyhlKSxvPXJ8fHt9O2lmKC0xPT09aSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlciBydWxlIG5vdCBmb3VuZDogIitlKTt0aGlzLl9fcnVsZXNfXy5zcGxpY2UoaSwwLHtuYW1lOnQsZW5hYmxlZDohMCxmbjpuLGFsdDpvLmFsdHx8W119KSx0aGlzLl9fY2FjaGVfXz1udWxsfSxyLnByb3RvdHlwZS5hZnRlcj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLl9fZmluZF9fKGUpLG89cnx8e307aWYoLTE9PT1pKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHJ1bGUgbm90IGZvdW5kOiAiK2UpO3RoaXMuX19ydWxlc19fLnNwbGljZShpKzEsMCx7bmFtZTp0LGVuYWJsZWQ6ITAsZm46bixhbHQ6by5hbHR8fFtdfSksdGhpcy5fX2NhY2hlX189bnVsbH0sci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnx8e307dGhpcy5fX3J1bGVzX18ucHVzaCh7bmFtZTplLGVuYWJsZWQ6ITAsZm46dCxhbHQ6ci5hbHR8fFtdfSksdGhpcy5fX2NhY2hlX189bnVsbH0sci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKGUsdCl7QXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKTt2YXIgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX19maW5kX18oZSk7aWYocjwwKXtpZih0KXJldHVybjt0aHJvdyBuZXcgRXJyb3IoIlJ1bGVzIG1hbmFnZXI6IGludmFsaWQgcnVsZSBuYW1lICIrZSl9dGhpcy5fX3J1bGVzX19bcl0uZW5hYmxlZD0hMCxuLnB1c2goZSl9LHRoaXMpLHRoaXMuX19jYWNoZV9fPW51bGwsbn0sci5wcm90b3R5cGUuZW5hYmxlT25seT1mdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksdGhpcy5fX3J1bGVzX18uZm9yRWFjaChmdW5jdGlvbihlKXtlLmVuYWJsZWQ9ITF9KSx0aGlzLmVuYWJsZShlLHQpfSxyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKGUsdCl7QXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKTt2YXIgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX19maW5kX18oZSk7aWYocjwwKXtpZih0KXJldHVybjt0aHJvdyBuZXcgRXJyb3IoIlJ1bGVzIG1hbmFnZXI6IGludmFsaWQgcnVsZSBuYW1lICIrZSl9dGhpcy5fX3J1bGVzX19bcl0uZW5hYmxlZD0hMSxuLnB1c2goZSl9LHRoaXMpLHRoaXMuX19jYWNoZV9fPW51bGwsbn0sci5wcm90b3R5cGUuZ2V0UnVsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT10aGlzLl9fY2FjaGVfXyYmdGhpcy5fX2NvbXBpbGVfXygpLHRoaXMuX19jYWNoZV9fW2VdfHxbXX0sZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dGhpcy50eXBlPWUsdGhpcy50YWc9dCx0aGlzLmF0dHJzPW51bGwsdGhpcy5tYXA9bnVsbCx0aGlzLm5lc3Rpbmc9bix0aGlzLmxldmVsPTAsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuY29udGVudD0iIix0aGlzLm1hcmt1cD0iIix0aGlzLmluZm89IiIsdGhpcy5tZXRhPW51bGwsdGhpcy5ibG9jaz0hMSx0aGlzLmhpZGRlbj0hMX1yLnByb3RvdHlwZS5hdHRySW5kZXg9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKCF0aGlzLmF0dHJzKXJldHVybi0xO2Zvcih0PXRoaXMuYXR0cnMsbj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZih0W25dWzBdPT09ZSlyZXR1cm4gbjtyZXR1cm4tMX0sci5wcm90b3R5cGUuYXR0clB1c2g9ZnVuY3Rpb24oZSl7dGhpcy5hdHRycz90aGlzLmF0dHJzLnB1c2goZSk6dGhpcy5hdHRycz1bZV19LHIucHJvdG90eXBlLmF0dHJTZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmF0dHJJbmRleChlKSxyPVtlLHRdO248MD90aGlzLmF0dHJQdXNoKHIpOnRoaXMuYXR0cnNbbl09cn0sci5wcm90b3R5cGUuYXR0ckdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmF0dHJJbmRleChlKSxuPW51bGw7cmV0dXJuIHQ+PTAmJihuPXRoaXMuYXR0cnNbdF1bMV0pLG59LHIucHJvdG90eXBlLmF0dHJKb2luPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5hdHRySW5kZXgoZSk7bjwwP3RoaXMuYXR0clB1c2goW2UsdF0pOnRoaXMuYXR0cnNbbl1bMV09dGhpcy5hdHRyc1tuXVsxXSsiICIrdH0sZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPS9bIS0jJS1cKiwtXC86O1w/QFxbLVxdX1x7XH1ceEExXHhBN1x4QUJceEI2XHhCN1x4QkJceEJGXHUwMzdFXHUwMzg3XHUwNTVBLVx1MDU1Rlx1MDU4OVx1MDU4QVx1MDVCRVx1MDVDMFx1MDVDM1x1MDVDNlx1MDVGM1x1MDVGNFx1MDYwOVx1MDYwQVx1MDYwQ1x1MDYwRFx1MDYxQlx1MDYxRVx1MDYxRlx1MDY2QS1cdTA2NkRcdTA2RDRcdTA3MDAtXHUwNzBEXHUwN0Y3LVx1MDdGOVx1MDgzMC1cdTA4M0VcdTA4NUVcdTA5NjRcdTA5NjVcdTA5NzBcdTBBRjBcdTBERjRcdTBFNEZcdTBFNUFcdTBFNUJcdTBGMDQtXHUwRjEyXHUwRjE0XHUwRjNBLVx1MEYzRFx1MEY4NVx1MEZEMC1cdTBGRDRcdTBGRDlcdTBGREFcdTEwNEEtXHUxMDRGXHUxMEZCXHUxMzYwLVx1MTM2OFx1MTQwMFx1MTY2RFx1MTY2RVx1MTY5Qlx1MTY5Q1x1MTZFQi1cdTE2RURcdTE3MzVcdTE3MzZcdTE3RDQtXHUxN0Q2XHUxN0Q4LVx1MTdEQVx1MTgwMC1cdTE4MEFcdTE5NDRcdTE5NDVcdTFBMUVcdTFBMUZcdTFBQTAtXHUxQUE2XHUxQUE4LVx1MUFBRFx1MUI1QS1cdTFCNjBcdTFCRkMtXHUxQkZGXHUxQzNCLVx1MUMzRlx1MUM3RVx1MUM3Rlx1MUNDMC1cdTFDQzdcdTFDRDNcdTIwMTAtXHUyMDI3XHUyMDMwLVx1MjA0M1x1MjA0NS1cdTIwNTFcdTIwNTMtXHUyMDVFXHUyMDdEXHUyMDdFXHUyMDhEXHUyMDhFXHUyMzA4LVx1MjMwQlx1MjMyOVx1MjMyQVx1Mjc2OC1cdTI3NzVcdTI3QzVcdTI3QzZcdTI3RTYtXHUyN0VGXHUyOTgzLVx1Mjk5OFx1MjlEOC1cdTI5REJcdTI5RkNcdTI5RkRcdTJDRjktXHUyQ0ZDXHUyQ0ZFXHUyQ0ZGXHUyRDcwXHUyRTAwLVx1MkUyRVx1MkUzMC1cdTJFNDRcdTMwMDEtXHUzMDAzXHUzMDA4LVx1MzAxMVx1MzAxNC1cdTMwMUZcdTMwMzBcdTMwM0RcdTMwQTBcdTMwRkJcdUE0RkVcdUE0RkZcdUE2MEQtXHVBNjBGXHVBNjczXHVBNjdFXHVBNkYyLVx1QTZGN1x1QTg3NC1cdUE4NzdcdUE4Q0VcdUE4Q0ZcdUE4RjgtXHVBOEZBXHVBOEZDXHVBOTJFXHVBOTJGXHVBOTVGXHVBOUMxLVx1QTlDRFx1QTlERVx1QTlERlx1QUE1Qy1cdUFBNUZcdUFBREVcdUFBREZcdUFBRjBcdUFBRjFcdUFCRUJcdUZEM0VcdUZEM0ZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjFcdUZFNjNcdUZFNjhcdUZFNkFcdUZFNkJcdUZGMDEtXHVGRjAzXHVGRjA1LVx1RkYwQVx1RkYwQy1cdUZGMEZcdUZGMUFcdUZGMUJcdUZGMUZcdUZGMjBcdUZGM0ItXHVGRjNEXHVGRjNGXHVGRjVCXHVGRjVEXHVGRjVGLVx1RkY2NV18XHVEODAwW1x1REQwMC1cdUREMDJcdURGOUZcdURGRDBdfFx1RDgwMVx1REQ2RnxcdUQ4MDJbXHVEQzU3XHVERDFGXHVERDNGXHVERTUwLVx1REU1OFx1REU3Rlx1REVGMC1cdURFRjZcdURGMzktXHVERjNGXHVERjk5LVx1REY5Q118XHVEODA0W1x1REM0Ny1cdURDNERcdURDQkJcdURDQkNcdURDQkUtXHVEQ0MxXHVERDQwLVx1REQ0M1x1REQ3NFx1REQ3NVx1RERDNS1cdUREQzlcdUREQ0RcdUREREJcdUREREQtXHVERERGXHVERTM4LVx1REUzRFx1REVBOV18XHVEODA1W1x1REM0Qi1cdURDNEZcdURDNUJcdURDNURcdURDQzZcdUREQzEtXHVEREQ3XHVERTQxLVx1REU0M1x1REU2MC1cdURFNkNcdURGM0MtXHVERjNFXXxcdUQ4MDdbXHVEQzQxLVx1REM0NVx1REM3MFx1REM3MV18XHVEODA5W1x1REM3MC1cdURDNzRdfFx1RDgxQVtcdURFNkVcdURFNkZcdURFRjVcdURGMzctXHVERjNCXHVERjQ0XXxcdUQ4MkZcdURDOUZ8XHVEODM2W1x1REU4Ny1cdURFOEJdfFx1RDgzQVtcdURENUVcdURENUZdL30sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMikpfShmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQpe3RoaXMuY209ZSx0aGlzLm9wdGlvbnM9dCx0aGlzLndpZGdldD1udWxsLHRoaXMuZGVib3VuY2U9MCx0aGlzLnRpY2s9MCx0aGlzLnN0YXJ0UG9zPXRoaXMuY20uZ2V0Q3Vyc29yKCJzdGFydCIpLHRoaXMuc3RhcnRMZW49dGhpcy5jbS5nZXRMaW5lKHRoaXMuc3RhcnRQb3MubGluZSkubGVuZ3RoLXRoaXMuY20uZ2V0U2VsZWN0aW9uKCkubGVuZ3RoO3ZhciBuPXRoaXM7ZS5vbigiY3Vyc29yQWN0aXZpdHkiLHRoaXMuYWN0aXZpdHlGdW5jPWZ1bmN0aW9uKCl7bi5jdXJzb3JBY3Rpdml0eSgpfSl9ZnVuY3Rpb24gbihlLHQsbil7dmFyIHI9ZS5vcHRpb25zLmhpbnRPcHRpb25zLGk9e307Zm9yKHZhciBvIGluIGgpaVtvXT1oW29dO2lmKHIpZm9yKHZhciBvIGluIHIpdm9pZCAwIT09cltvXSYmKGlbb109cltvXSk7aWYobilmb3IodmFyIG8gaW4gbil2b2lkIDAhPT1uW29dJiYoaVtvXT1uW29dKTtyZXR1cm4gaS5oaW50LnJlc29sdmUmJihpLmhpbnQ9aS5oaW50LnJlc29sdmUoZSx0KSksaX1mdW5jdGlvbiByKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lOmUudGV4dH1mdW5jdGlvbiBpKGUsdCl7ZnVuY3Rpb24gbihlLG4pe3ZhciBpO2k9InN0cmluZyIhPXR5cGVvZiBuP2Z1bmN0aW9uKGUpe3JldHVybiBuKGUsdCl9OnIuaGFzT3duUHJvcGVydHkobik/cltuXTpuLG9bZV09aX12YXIgcj17VXA6ZnVuY3Rpb24oKXt0Lm1vdmVGb2N1cygtMSl9LERvd246ZnVuY3Rpb24oKXt0Lm1vdmVGb2N1cygxKX0sUGFnZVVwOmZ1bmN0aW9uKCl7dC5tb3ZlRm9jdXMoMS10Lm1lbnVTaXplKCksITApfSxQYWdlRG93bjpmdW5jdGlvbigpe3QubW92ZUZvY3VzKHQubWVudVNpemUoKS0xLCEwKX0sSG9tZTpmdW5jdGlvbigpe3Quc2V0Rm9jdXMoMCl9LEVuZDpmdW5jdGlvbigpe3Quc2V0Rm9jdXModC5sZW5ndGgtMSl9LEVudGVyOnQucGljayxUYWI6dC5waWNrLEVzYzp0LmNsb3NlfSxpPWUub3B0aW9ucy5jdXN0b21LZXlzLG89aT97fTpyO2lmKGkpZm9yKHZhciBhIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShhKSYmbihhLGlbYV0pO3ZhciBzPWUub3B0aW9ucy5leHRyYUtleXM7aWYocylmb3IodmFyIGEgaW4gcylzLmhhc093blByb3BlcnR5KGEpJiZuKGEsc1thXSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlLHQpe2Zvcig7dCYmdCE9ZTspe2lmKCJMSSI9PT10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkmJnQucGFyZW50Tm9kZT09ZSlyZXR1cm4gdDt0PXQucGFyZW50Tm9kZX19ZnVuY3Rpb24gYSh0LG4pe3RoaXMuY29tcGxldGlvbj10LHRoaXMuZGF0YT1uLHRoaXMucGlja2VkPSExO3ZhciBhPXRoaXMscz10LmNtLHU9dGhpcy5oaW50cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIpO3UuY2xhc3NOYW1lPSJDb2RlTWlycm9yLWhpbnRzIix0aGlzLnNlbGVjdGVkSGludD1uLnNlbGVjdGVkSGludHx8MDtmb3IodmFyIGM9bi5saXN0LGY9MDtmPGMubGVuZ3RoOysrZil7dmFyIGQ9dS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpKSxoPWNbZl0sbT1sKyhmIT10aGlzLnNlbGVjdGVkSGludD8iIjoiICIrcCk7bnVsbCE9aC5jbGFzc05hbWUmJihtPWguY2xhc3NOYW1lKyIgIittKSxkLmNsYXNzTmFtZT1tLGgucmVuZGVyP2gucmVuZGVyKGQsbixoKTpkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGguZGlzcGxheVRleHR8fHIoaCkpKSxkLmhpbnRJZD1mfXZhciBnPXMuY3Vyc29yQ29vcmRzKHQub3B0aW9ucy5hbGlnbldpdGhXb3JkP24uZnJvbTpudWxsKSx5PWcubGVmdCx2PWcuYm90dG9tLGI9ITA7dS5zdHlsZS5sZWZ0PXkrInB4Iix1LnN0eWxlLnRvcD12KyJweCI7dmFyIHg9d2luZG93LmlubmVyV2lkdGh8fE1hdGgubWF4KGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKSxDPXdpbmRvdy5pbm5lckhlaWdodHx8TWF0aC5tYXgoZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCk7KHQub3B0aW9ucy5jb250YWluZXJ8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHUpO3ZhciBFPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1FLmJvdHRvbS1DLHc9dS5zY3JvbGxIZWlnaHQ+dS5jbGllbnRIZWlnaHQrMSxTPXMuZ2V0U2Nyb2xsSW5mbygpO2lmKEQ+MCl7dmFyIGs9RS5ib3R0b20tRS50b3A7aWYoZy50b3AtKGcuYm90dG9tLUUudG9wKS1rPjApdS5zdHlsZS50b3A9KHY9Zy50b3AtaykrInB4IixiPSExO2Vsc2UgaWYoaz5DKXt1LnN0eWxlLmhlaWdodD1DLTUrInB4Iix1LnN0eWxlLnRvcD0odj1nLmJvdHRvbS1FLnRvcCkrInB4Ijt2YXIgQT1zLmdldEN1cnNvcigpO24uZnJvbS5jaCE9QS5jaCYmKGc9cy5jdXJzb3JDb29yZHMoQSksdS5zdHlsZS5sZWZ0PSh5PWcubGVmdCkrInB4IixFPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfX12YXIgXz1FLnJpZ2h0LXg7aWYoXz4wJiYoRS5yaWdodC1FLmxlZnQ+eCYmKHUuc3R5bGUud2lkdGg9eC01KyJweCIsXy09RS5yaWdodC1FLmxlZnQteCksdS5zdHlsZS5sZWZ0PSh5PWcubGVmdC1fKSsicHgiKSx3KWZvcih2YXIgVD11LmZpcnN0Q2hpbGQ7VDtUPVQubmV4dFNpYmxpbmcpVC5zdHlsZS5wYWRkaW5nUmlnaHQ9cy5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoKyJweCI7aWYocy5hZGRLZXlNYXAodGhpcy5rZXlNYXA9aSh0LHttb3ZlRm9jdXM6ZnVuY3Rpb24oZSx0KXthLmNoYW5nZUFjdGl2ZShhLnNlbGVjdGVkSGludCtlLHQpfSxzZXRGb2N1czpmdW5jdGlvbihlKXthLmNoYW5nZUFjdGl2ZShlKX0sbWVudVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zY3JlZW5BbW91bnQoKX0sbGVuZ3RoOmMubGVuZ3RoLGNsb3NlOmZ1bmN0aW9uKCl7dC5jbG9zZSgpfSxwaWNrOmZ1bmN0aW9uKCl7YS5waWNrKCl9LGRhdGE6bn0pKSx0Lm9wdGlvbnMuY2xvc2VPblVuZm9jdXMpe3ZhciBPO3Mub24oImJsdXIiLHRoaXMub25CbHVyPWZ1bmN0aW9uKCl7Tz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5jbG9zZSgpfSwxMDApfSkscy5vbigiZm9jdXMiLHRoaXMub25Gb2N1cz1mdW5jdGlvbigpe2NsZWFyVGltZW91dChPKX0pfXJldHVybiBzLm9uKCJzY3JvbGwiLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXt2YXIgZT1zLmdldFNjcm9sbEluZm8oKSxuPXMuZ2V0V3JhcHBlckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXYrUy50b3AtZS50b3AsaT1yLSh3aW5kb3cucGFnZVlPZmZzZXR8fChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcCk7aWYoYnx8KGkrPXUub2Zmc2V0SGVpZ2h0KSxpPD1uLnRvcHx8aT49bi5ib3R0b20pcmV0dXJuIHQuY2xvc2UoKTt1LnN0eWxlLnRvcD1yKyJweCIsdS5zdHlsZS5sZWZ0PXkrUy5sZWZ0LWUubGVmdCsicHgifSksZS5vbih1LCJkYmxjbGljayIsZnVuY3Rpb24oZSl7dmFyIHQ9byh1LGUudGFyZ2V0fHxlLnNyY0VsZW1lbnQpO3QmJm51bGwhPXQuaGludElkJiYoYS5jaGFuZ2VBY3RpdmUodC5oaW50SWQpLGEucGljaygpKX0pLGUub24odSwiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciBuPW8odSxlLnRhcmdldHx8ZS5zcmNFbGVtZW50KTtuJiZudWxsIT1uLmhpbnRJZCYmKGEuY2hhbmdlQWN0aXZlKG4uaGludElkKSx0Lm9wdGlvbnMuY29tcGxldGVPblNpbmdsZUNsaWNrJiZhLnBpY2soKSl9KSxlLm9uKHUsIm1vdXNlZG93biIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cy5mb2N1cygpfSwyMCl9KSxlLnNpZ25hbChuLCJzZWxlY3QiLGNbdGhpcy5zZWxlY3RlZEhpbnRdLHUuY2hpbGROb2Rlc1t0aGlzLnNlbGVjdGVkSGludF0pLCEwfWZ1bmN0aW9uIHMoZSx0KXtpZighZS5zb21ldGhpbmdTZWxlY3RlZCgpKXJldHVybiB0O2Zvcih2YXIgbj1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5zdXBwb3J0c1NlbGVjdGlvbiYmbi5wdXNoKHRbcl0pO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0LG4scil7aWYoZS5hc3luYyllKHQscixuKTtlbHNle3ZhciBpPWUodCxuKTtpJiZpLnRoZW4/aS50aGVuKHIpOnIoaSl9fWZ1bmN0aW9uIGModCxuKXt2YXIgcixpPXQuZ2V0SGVscGVycyhuLCJoaW50Iik7aWYoaS5sZW5ndGgpe3ZhciBvPWZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGkpe2lmKGk9PW8ubGVuZ3RoKXJldHVybiB0KG51bGwpO3Uob1tpXSxlLG4sZnVuY3Rpb24oZSl7ZSYmZS5saXN0Lmxlbmd0aD4wP3QoZSk6cihpKzEpfSl9dmFyIG89cyhlLGkpO3IoMCl9O3JldHVybiBvLmFzeW5jPSEwLG8uc3VwcG9ydHNTZWxlY3Rpb249ITAsb31yZXR1cm4ocj10LmdldEhlbHBlcih0LmdldEN1cnNvcigpLCJoaW50V29yZHMiKSk/ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGludC5mcm9tTGlzdCh0LHt3b3JkczpyfSl9OmUuaGludC5hbnl3b3JkP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGUuaGludC5hbnl3b3JkKHQsbil9OmZ1bmN0aW9uKCl7fX12YXIgbD0iQ29kZU1pcnJvci1oaW50IixwPSJDb2RlTWlycm9yLWhpbnQtYWN0aXZlIjtlLnNob3dIaW50PWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZS5zaG93SGludChuKTtuJiZuLmFzeW5jJiYodC5hc3luYz0hMCk7dmFyIHI9e2hpbnQ6dH07aWYobilmb3IodmFyIGkgaW4gbilyW2ldPW5baV07cmV0dXJuIGUuc2hvd0hpbnQocil9LGUuZGVmaW5lRXh0ZW5zaW9uKCJzaG93SGludCIsZnVuY3Rpb24ocil7cj1uKHRoaXMsdGhpcy5nZXRDdXJzb3IoInN0YXJ0Iikscik7dmFyIGk9dGhpcy5saXN0U2VsZWN0aW9ucygpO2lmKCEoaS5sZW5ndGg+MSkpe2lmKHRoaXMuc29tZXRoaW5nU2VsZWN0ZWQoKSl7aWYoIXIuaGludC5zdXBwb3J0c1NlbGVjdGlvbilyZXR1cm47Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoaVtvXS5oZWFkLmxpbmUhPWlbb10uYW5jaG9yLmxpbmUpcmV0dXJufXRoaXMuc3RhdGUuY29tcGxldGlvbkFjdGl2ZSYmdGhpcy5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlLmNsb3NlKCk7dmFyIGE9dGhpcy5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlPW5ldyB0KHRoaXMscik7YS5vcHRpb25zLmhpbnQmJihlLnNpZ25hbCh0aGlzLCJzdGFydENvbXBsZXRpb24iLHRoaXMpLGEudXBkYXRlKCEwKSl9fSk7dmFyIGY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwxZTMvNjApfSxkPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2xlYXJUaW1lb3V0O3QucHJvdG90eXBlPXtjbG9zZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlKCkmJih0aGlzLmNtLnN0YXRlLmNvbXBsZXRpb25BY3RpdmU9bnVsbCx0aGlzLnRpY2s9bnVsbCx0aGlzLmNtLm9mZigiY3Vyc29yQWN0aXZpdHkiLHRoaXMuYWN0aXZpdHlGdW5jKSx0aGlzLndpZGdldCYmdGhpcy5kYXRhJiZlLnNpZ25hbCh0aGlzLmRhdGEsImNsb3NlIiksdGhpcy53aWRnZXQmJnRoaXMud2lkZ2V0LmNsb3NlKCksZS5zaWduYWwodGhpcy5jbSwiZW5kQ29tcGxldGlvbiIsdGhpcy5jbSkpfSxhY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbS5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlPT10aGlzfSxwaWNrOmZ1bmN0aW9uKHQsbil7dmFyIGk9dC5saXN0W25dO2kuaGludD9pLmhpbnQodGhpcy5jbSx0LGkpOnRoaXMuY20ucmVwbGFjZVJhbmdlKHIoaSksaS5mcm9tfHx0LmZyb20saS50b3x8dC50bywiY29tcGxldGUiKSxlLnNpZ25hbCh0LCJwaWNrIixpKSx0aGlzLmNsb3NlKCl9LGN1cnNvckFjdGl2aXR5OmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSYmKGQodGhpcy5kZWJvdW5jZSksdGhpcy5kZWJvdW5jZT0wKTt2YXIgZT10aGlzLmNtLmdldEN1cnNvcigpLHQ9dGhpcy5jbS5nZXRMaW5lKGUubGluZSk7aWYoZS5saW5lIT10aGlzLnN0YXJ0UG9zLmxpbmV8fHQubGVuZ3RoLWUuY2ghPXRoaXMuc3RhcnRMZW4tdGhpcy5zdGFydFBvcy5jaHx8ZS5jaDx0aGlzLnN0YXJ0UG9zLmNofHx0aGlzLmNtLnNvbWV0aGluZ1NlbGVjdGVkKCl8fGUuY2gmJnRoaXMub3B0aW9ucy5jbG9zZUNoYXJhY3RlcnMudGVzdCh0LmNoYXJBdChlLmNoLTEpKSl0aGlzLmNsb3NlKCk7ZWxzZXt2YXIgbj10aGlzO3RoaXMuZGVib3VuY2U9ZihmdW5jdGlvbigpe24udXBkYXRlKCl9KSx0aGlzLndpZGdldCYmdGhpcy53aWRnZXQuZGlzYWJsZSgpfX0sdXBkYXRlOmZ1bmN0aW9uKGUpe2lmKG51bGwhPXRoaXMudGljayl7dmFyIHQ9dGhpcyxuPSsrdGhpcy50aWNrO3UodGhpcy5vcHRpb25zLmhpbnQsdGhpcy5jbSx0aGlzLm9wdGlvbnMsZnVuY3Rpb24ocil7dC50aWNrPT1uJiZ0LmZpbmlzaFVwZGF0ZShyLGUpfSl9fSxmaW5pc2hVcGRhdGU6ZnVuY3Rpb24odCxuKXt0aGlzLmRhdGEmJmUuc2lnbmFsKHRoaXMuZGF0YSwidXBkYXRlIik7dmFyIHI9dGhpcy53aWRnZXQmJnRoaXMud2lkZ2V0LnBpY2tlZHx8biYmdGhpcy5vcHRpb25zLmNvbXBsZXRlU2luZ2xlO3RoaXMud2lkZ2V0JiZ0aGlzLndpZGdldC5jbG9zZSgpLHRoaXMuZGF0YT10LHQmJnQubGlzdC5sZW5ndGgmJihyJiYxPT10Lmxpc3QubGVuZ3RoP3RoaXMucGljayh0LDApOih0aGlzLndpZGdldD1uZXcgYSh0aGlzLHQpLGUuc2lnbmFsKHQsInNob3duIikpKX19LGEucHJvdG90eXBlPXtjbG9zZTpmdW5jdGlvbigpe2lmKHRoaXMuY29tcGxldGlvbi53aWRnZXQ9PXRoaXMpe3RoaXMuY29tcGxldGlvbi53aWRnZXQ9bnVsbCx0aGlzLmhpbnRzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5oaW50cyksdGhpcy5jb21wbGV0aW9uLmNtLnJlbW92ZUtleU1hcCh0aGlzLmtleU1hcCk7dmFyIGU9dGhpcy5jb21wbGV0aW9uLmNtO3RoaXMuY29tcGxldGlvbi5vcHRpb25zLmNsb3NlT25VbmZvY3VzJiYoZS5vZmYoImJsdXIiLHRoaXMub25CbHVyKSxlLm9mZigiZm9jdXMiLHRoaXMub25Gb2N1cykpLGUub2ZmKCJzY3JvbGwiLHRoaXMub25TY3JvbGwpfX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuY29tcGxldGlvbi5jbS5yZW1vdmVLZXlNYXAodGhpcy5rZXlNYXApO3ZhciBlPXRoaXM7dGhpcy5rZXlNYXA9e0VudGVyOmZ1bmN0aW9uKCl7ZS5waWNrZWQ9ITB9fSx0aGlzLmNvbXBsZXRpb24uY20uYWRkS2V5TWFwKHRoaXMua2V5TWFwKX0scGljazpmdW5jdGlvbigpe3RoaXMuY29tcGxldGlvbi5waWNrKHRoaXMuZGF0YSx0aGlzLnNlbGVjdGVkSGludCl9LGNoYW5nZUFjdGl2ZTpmdW5jdGlvbih0LG4pe2lmKHQ+PXRoaXMuZGF0YS5saXN0Lmxlbmd0aD90PW4/dGhpcy5kYXRhLmxpc3QubGVuZ3RoLTE6MDp0PDAmJih0PW4/MDp0aGlzLmRhdGEubGlzdC5sZW5ndGgtMSksdGhpcy5zZWxlY3RlZEhpbnQhPXQpe3ZhciByPXRoaXMuaGludHMuY2hpbGROb2Rlc1t0aGlzLnNlbGVjdGVkSGludF07ciYmKHIuY2xhc3NOYW1lPXIuY2xhc3NOYW1lLnJlcGxhY2UoIiAiK3AsIiIpKSxyPXRoaXMuaGludHMuY2hpbGROb2Rlc1t0aGlzLnNlbGVjdGVkSGludD10XSxyLmNsYXNzTmFtZSs9IiAiK3Asci5vZmZzZXRUb3A8dGhpcy5oaW50cy5zY3JvbGxUb3A/dGhpcy5oaW50cy5zY3JvbGxUb3A9ci5vZmZzZXRUb3AtMzpyLm9mZnNldFRvcCtyLm9mZnNldEhlaWdodD50aGlzLmhpbnRzLnNjcm9sbFRvcCt0aGlzLmhpbnRzLmNsaWVudEhlaWdodCYmKHRoaXMuaGludHMuc2Nyb2xsVG9wPXIub2Zmc2V0VG9wK3Iub2Zmc2V0SGVpZ2h0LXRoaXMuaGludHMuY2xpZW50SGVpZ2h0KzMpLGUuc2lnbmFsKHRoaXMuZGF0YSwic2VsZWN0Iix0aGlzLmRhdGEubGlzdFt0aGlzLnNlbGVjdGVkSGludF0scil9fSxzY3JlZW5BbW91bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLmhpbnRzLmNsaWVudEhlaWdodC90aGlzLmhpbnRzLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0KXx8MX19LGUucmVnaXN0ZXJIZWxwZXIoImhpbnQiLCJhdXRvIix7cmVzb2x2ZTpjfSksZS5yZWdpc3RlckhlbHBlcigiaGludCIsImZyb21MaXN0IixmdW5jdGlvbih0LG4pe3ZhciByLGk9dC5nZXRDdXJzb3IoKSxvPXQuZ2V0VG9rZW5BdChpKSxhPWUuUG9zKGkubGluZSxvLnN0YXJ0KSxzPWk7by5zdGFydDxpLmNoJiYvXHcvLnRlc3Qoby5zdHJpbmcuY2hhckF0KGkuY2gtby5zdGFydC0xKSk/cj1vLnN0cmluZy5zdWJzdHIoMCxpLmNoLW8uc3RhcnQpOihyPSIiLGE9aSk7Zm9yKHZhciB1PVtdLGM9MDtjPG4ud29yZHMubGVuZ3RoO2MrKyl7dmFyIGw9bi53b3Jkc1tjXTtsLnNsaWNlKDAsci5sZW5ndGgpPT1yJiZ1LnB1c2gobCl9aWYodS5sZW5ndGgpcmV0dXJue2xpc3Q6dSxmcm9tOmEsdG86c319KSxlLmNvbW1hbmRzLmF1dG9jb21wbGV0ZT1lLnNob3dIaW50O3ZhciBoPXtoaW50OmUuaGludC5hdXRvLGNvbXBsZXRlU2luZ2xlOiEwLGFsaWduV2l0aFdvcmQ6ITAsY2xvc2VDaGFyYWN0ZXJzOi9bXHMoKVxbXF17fTs6PixdLyxjbG9zZU9uVW5mb2N1czohMCxjb21wbGV0ZU9uU2luZ2xlQ2xpY2s6ITAsY29udGFpbmVyOm51bGwsY3VzdG9tS2V5czpudWxsLGV4dHJhS2V5czpudWxsfTtlLmRlZmluZU9wdGlvbigiaGludE9wdGlvbnMiLG51bGwpfSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7ZShuKDIpKX0oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3JldHVybiJwYWlycyI9PXQmJiJzdHJpbmciPT10eXBlb2YgZT9lOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZVt0XT9lW3RdOmZbdF19ZnVuY3Rpb24gbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZS5jaGFyQXQodCksaT0iJyIrbisiJyI7aFtpXXx8KGhbaV09cihuKSl9fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB1KHQsZSl9fWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5zdGF0ZS5jbG9zZUJyYWNrZXRzO3JldHVybiF0fHx0Lm92ZXJyaWRlP3Q6ZS5nZXRNb2RlQXQoZS5nZXRDdXJzb3IoKSkuY2xvc2VCcmFja2V0c3x8dH1mdW5jdGlvbiBvKG4pe3ZhciByPWkobik7aWYoIXJ8fG4uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSlyZXR1cm4gZS5QYXNzO2Zvcih2YXIgbz10KHIsInBhaXJzIiksYT1uLmxpc3RTZWxlY3Rpb25zKCkscz0wO3M8YS5sZW5ndGg7cysrKXtpZighYVtzXS5lbXB0eSgpKXJldHVybiBlLlBhc3M7dmFyIHU9bChuLGFbc10uaGVhZCk7aWYoIXV8fG8uaW5kZXhPZih1KSUyIT0wKXJldHVybiBlLlBhc3N9Zm9yKHZhciBzPWEubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBjPWFbc10uaGVhZDtuLnJlcGxhY2VSYW5nZSgiIixkKGMubGluZSxjLmNoLTEpLGQoYy5saW5lLGMuY2grMSksIitkZWxldGUiKX19ZnVuY3Rpb24gYShuKXt2YXIgcj1pKG4pLG89ciYmdChyLCJleHBsb2RlIik7aWYoIW98fG4uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSlyZXR1cm4gZS5QYXNzO2Zvcih2YXIgYT1uLmxpc3RTZWxlY3Rpb25zKCkscz0wO3M8YS5sZW5ndGg7cysrKXtpZighYVtzXS5lbXB0eSgpKXJldHVybiBlLlBhc3M7dmFyIHU9bChuLGFbc10uaGVhZCk7aWYoIXV8fG8uaW5kZXhPZih1KSUyIT0wKXJldHVybiBlLlBhc3N9bi5vcGVyYXRpb24oZnVuY3Rpb24oKXt2YXIgZT1uLmxpbmVTZXBhcmF0b3IoKXx8IlxuIjtuLnJlcGxhY2VTZWxlY3Rpb24oZStlLG51bGwpLG4uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKSxhPW4ubGlzdFNlbGVjdGlvbnMoKTtmb3IodmFyIHQ9MDt0PGEubGVuZ3RoO3QrKyl7dmFyIHI9YVt0XS5oZWFkLmxpbmU7bi5pbmRlbnRMaW5lKHIsbnVsbCwhMCksbi5pbmRlbnRMaW5lKHIrMSxudWxsLCEwKX19KX1mdW5jdGlvbiBzKHQpe3ZhciBuPWUuY21wUG9zKHQuYW5jaG9yLHQuaGVhZCk+MDtyZXR1cm57YW5jaG9yOm5ldyBkKHQuYW5jaG9yLmxpbmUsdC5hbmNob3IuY2grKG4/LTE6MSkpLGhlYWQ6bmV3IGQodC5oZWFkLmxpbmUsdC5oZWFkLmNoKyhuPzE6LTEpKX19ZnVuY3Rpb24gdShuLHIpe3ZhciBvPWkobik7aWYoIW98fG4uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSlyZXR1cm4gZS5QYXNzO3ZhciBhPXQobywicGFpcnMiKSx1PWEuaW5kZXhPZihyKTtpZigtMT09dSlyZXR1cm4gZS5QYXNzO2Zvcih2YXIgbCxmPXQobywidHJpcGxlcyIpLGg9YS5jaGFyQXQodSsxKT09cixtPW4ubGlzdFNlbGVjdGlvbnMoKSxnPXUlMj09MCx5PTA7eTxtLmxlbmd0aDt5Kyspe3ZhciB2LGI9bVt5XSx4PWIuaGVhZCxDPW4uZ2V0UmFuZ2UoeCxkKHgubGluZSx4LmNoKzEpKTtpZihnJiYhYi5lbXB0eSgpKXY9InN1cnJvdW5kIjtlbHNlIGlmKCFoJiZnfHxDIT1yKWlmKGgmJnguY2g+MSYmZi5pbmRleE9mKHIpPj0wJiZuLmdldFJhbmdlKGQoeC5saW5lLHguY2gtMikseCk9PXIrcil7aWYoeC5jaD4yJiYvXGJzdHJpbmcvLnRlc3Qobi5nZXRUb2tlblR5cGVBdChkKHgubGluZSx4LmNoLTIpKSkpcmV0dXJuIGUuUGFzczt2PSJhZGRGb3VyIn1lbHNlIGlmKGgpe3ZhciBFPTA9PXguY2g/IiAiOm4uZ2V0UmFuZ2UoZCh4LmxpbmUseC5jaC0xKSx4KTtpZihlLmlzV29yZENoYXIoQyl8fEU9PXJ8fGUuaXNXb3JkQ2hhcihFKSlyZXR1cm4gZS5QYXNzO3Y9ImJvdGgifWVsc2V7aWYoIWd8fG4uZ2V0TGluZSh4LmxpbmUpLmxlbmd0aCE9eC5jaCYmIWMoQyxhKSYmIS9ccy8udGVzdChDKSlyZXR1cm4gZS5QYXNzO3Y9ImJvdGgifWVsc2Ugdj1oJiZwKG4seCk/ImJvdGgiOmYuaW5kZXhPZihyKT49MCYmbi5nZXRSYW5nZSh4LGQoeC5saW5lLHguY2grMykpPT1yK3Ircj8ic2tpcFRocmVlIjoic2tpcCI7aWYobCl7aWYobCE9dilyZXR1cm4gZS5QYXNzfWVsc2UgbD12fXZhciBEPXUlMj9hLmNoYXJBdCh1LTEpOnIsdz11JTI/cjphLmNoYXJBdCh1KzEpO24ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7aWYoInNraXAiPT1sKW4uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7ZWxzZSBpZigic2tpcFRocmVlIj09bClmb3IodmFyIGU9MDtlPDM7ZSsrKW4uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7ZWxzZSBpZigic3Vycm91bmQiPT1sKXtmb3IodmFyIHQ9bi5nZXRTZWxlY3Rpb25zKCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09RCt0W2VdK3c7bi5yZXBsYWNlU2VsZWN0aW9ucyh0LCJhcm91bmQiKSx0PW4ubGlzdFNlbGVjdGlvbnMoKS5zbGljZSgpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09cyh0W2VdKTtuLnNldFNlbGVjdGlvbnModCl9ZWxzZSJib3RoIj09bD8obi5yZXBsYWNlU2VsZWN0aW9uKEQrdyxudWxsKSxuLnRyaWdnZXJFbGVjdHJpYyhEK3cpLG4uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKSk6ImFkZEZvdXIiPT1sJiYobi5yZXBsYWNlU2VsZWN0aW9uKEQrRCtEK0QsImJlZm9yZSIpLG4uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0IikpfSl9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXQubGFzdEluZGV4T2YoZSk7cmV0dXJuIG4+LTEmJm4lMj09MX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49ZS5nZXRSYW5nZShkKHQubGluZSx0LmNoLTEpLGQodC5saW5lLHQuY2grMSkpO3JldHVybiAyPT1uLmxlbmd0aD9uOm51bGx9ZnVuY3Rpb24gcChlLHQpe3ZhciBuPWUuZ2V0VG9rZW5BdChkKHQubGluZSx0LmNoKzEpKTtyZXR1cm4vXGJzdHJpbmcvLnRlc3Qobi50eXBlKSYmbi5zdGFydD09dC5jaCYmKDA9PXQuY2h8fCEvXGJzdHJpbmcvLnRlc3QoZS5nZXRUb2tlblR5cGVBdCh0KSkpfXZhciBmPXtwYWlyczoiKClbXXt9JydcIlwiIix0cmlwbGVzOiIiLGV4cGxvZGU6Iltde30ifSxkPWUuUG9zO2UuZGVmaW5lT3B0aW9uKCJhdXRvQ2xvc2VCcmFja2V0cyIsITEsZnVuY3Rpb24ocixpLG8pe28mJm8hPWUuSW5pdCYmKHIucmVtb3ZlS2V5TWFwKGgpLHIuc3RhdGUuY2xvc2VCcmFja2V0cz1udWxsKSxpJiYobih0KGksInBhaXJzIikpLHIuc3RhdGUuY2xvc2VCcmFja2V0cz1pLHIuYWRkS2V5TWFwKGgpKX0pO3ZhciBoPXtCYWNrc3BhY2U6byxFbnRlcjphfTtuKGYucGFpcnMrImAiKX0pfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpe2UobigyKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQsbil7ZnVuY3Rpb24gcih0KXtpZighaS5wYXJlbnROb2RlKXJldHVybiBlLm9mZihkb2N1bWVudCwibW91c2Vtb3ZlIixyKTtpLnN0eWxlLnRvcD1NYXRoLm1heCgwLHQuY2xpZW50WS1pLm9mZnNldEhlaWdodC01KSsicHgiLGkuc3R5bGUubGVmdD10LmNsaWVudFgrNSsicHgifXZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBpLmNsYXNzTmFtZT0iQ29kZU1pcnJvci1saW50LXRvb2x0aXAiLGkuYXBwZW5kQ2hpbGQobi5jbG9uZU5vZGUoITApKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGUub24oZG9jdW1lbnQsIm1vdXNlbW92ZSIscikscih0KSxudWxsIT1pLnN0eWxlLm9wYWNpdHkmJihpLnN0eWxlLm9wYWNpdHk9MSksaX1mdW5jdGlvbiBuKGUpe2UucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfWZ1bmN0aW9uIHIoZSl7ZS5wYXJlbnROb2RlJiYobnVsbD09ZS5zdHlsZS5vcGFjaXR5JiZuKGUpLGUuc3R5bGUub3BhY2l0eT0wLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuKGUpfSw2MDApKX1mdW5jdGlvbiBpKG4saSxvKXtmdW5jdGlvbiBhKCl7ZS5vZmYobywibW91c2VvdXQiLGEpLHMmJihyKHMpLHM9bnVsbCl9dmFyIHM9dChuLGkpLHU9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZihzKWZvcih2YXIgZT1vOztlPWUucGFyZW50Tm9kZSl7aWYoZSYmMTE9PWUubm9kZVR5cGUmJihlPWUuaG9zdCksZT09ZG9jdW1lbnQuYm9keSlyZXR1cm47aWYoIWUpe2EoKTticmVha319aWYoIXMpcmV0dXJuIGNsZWFySW50ZXJ2YWwodSl9LDQwMCk7ZS5vbihvLCJtb3VzZW91dCIsYSl9ZnVuY3Rpb24gbyhlLHQsbil7dGhpcy5tYXJrZWQ9W10sdGhpcy5vcHRpb25zPXQsdGhpcy50aW1lb3V0PW51bGwsdGhpcy5oYXNHdXR0ZXI9bix0aGlzLm9uTW91c2VPdmVyPWZ1bmN0aW9uKHQpe3koZSx0KX0sdGhpcy53YWl0aW5nRm9yPTB9ZnVuY3Rpb24gYShlLHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb24/e2dldEFubm90YXRpb25zOnR9Oih0JiYhMCE9PXR8fCh0PXt9KSx0KX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUuc3RhdGUubGludDt0Lmhhc0d1dHRlciYmZS5jbGVhckd1dHRlcih2KTtmb3IodmFyIG49MDtuPHQubWFya2VkLmxlbmd0aDsrK24pdC5tYXJrZWRbbl0uY2xlYXIoKTt0Lm1hcmtlZC5sZW5ndGg9MH1mdW5jdGlvbiB1KHQsbixyLG8pe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9YTtyZXR1cm4gYS5jbGFzc05hbWU9IkNvZGVNaXJyb3ItbGludC1tYXJrZXItIituLHImJihzPWEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHMuY2xhc3NOYW1lPSJDb2RlTWlycm9yLWxpbnQtbWFya2VyLW11bHRpcGxlIiksMCE9byYmZS5vbihzLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe2koZSx0LHMpfSksYX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuImVycm9yIj09ZT9lOnR9ZnVuY3Rpb24gbChlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lW25dLGk9ci5mcm9tLmxpbmU7KHRbaV18fCh0W2ldPVtdKSkucHVzaChyKX1yZXR1cm4gdH1mdW5jdGlvbiBwKGUpe3ZhciB0PWUuc2V2ZXJpdHk7dHx8KHQ9ImVycm9yIik7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIG4uY2xhc3NOYW1lPSJDb2RlTWlycm9yLWxpbnQtbWVzc2FnZS0iK3QsInVuZGVmaW5lZCIhPXR5cGVvZiBlLm1lc3NhZ2VIVE1MP24uaW5uZXJIVE1MPWUubWVzc2FnZUhUTUw6bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlLm1lc3NhZ2UpKSxufWZ1bmN0aW9uIGYodCxuLHIpe2Z1bmN0aW9uIGkoKXthPS0xLHQub2ZmKCJjaGFuZ2UiLGkpfXZhciBvPXQuc3RhdGUubGludCxhPSsrby53YWl0aW5nRm9yO3Qub24oImNoYW5nZSIsaSksbih0LmdldFZhbHVlKCksZnVuY3Rpb24obixyKXt0Lm9mZigiY2hhbmdlIixpKSxvLndhaXRpbmdGb3I9PWEmJihyJiZuIGluc3RhbmNlb2YgZSYmKG49ciksdC5vcGVyYXRpb24oZnVuY3Rpb24oKXtoKHQsbil9KSl9LHIsdCl9ZnVuY3Rpb24gZCh0KXt2YXIgbj10LnN0YXRlLmxpbnQscj1uLm9wdGlvbnMsaT1yLm9wdGlvbnN8fHIsbz1yLmdldEFubm90YXRpb25zfHx0LmdldEhlbHBlcihlLlBvcygwLDApLCJsaW50Iik7aWYobylpZihyLmFzeW5jfHxvLmFzeW5jKWYodCxvLGkpO2Vsc2V7dmFyIGE9byh0LmdldFZhbHVlKCksaSx0KTtpZighYSlyZXR1cm47YS50aGVuP2EudGhlbihmdW5jdGlvbihlKXt0Lm9wZXJhdGlvbihmdW5jdGlvbigpe2godCxlKX0pfSk6dC5vcGVyYXRpb24oZnVuY3Rpb24oKXtoKHQsYSl9KX19ZnVuY3Rpb24gaChlLHQpe3MoZSk7Zm9yKHZhciBuPWUuc3RhdGUubGludCxyPW4ub3B0aW9ucyxpPWwodCksbz0wO288aS5sZW5ndGg7KytvKXt2YXIgYT1pW29dO2lmKGEpe2Zvcih2YXIgZj1udWxsLGQ9bi5oYXNHdXR0ZXImJmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPTA7aDxhLmxlbmd0aDsrK2gpe3ZhciBtPWFbaF0sZz1tLnNldmVyaXR5O2d8fChnPSJlcnJvciIpLGY9YyhmLGcpLHIuZm9ybWF0QW5ub3RhdGlvbiYmKG09ci5mb3JtYXRBbm5vdGF0aW9uKG0pKSxuLmhhc0d1dHRlciYmZC5hcHBlbmRDaGlsZChwKG0pKSxtLnRvJiZuLm1hcmtlZC5wdXNoKGUubWFya1RleHQobS5mcm9tLG0udG8se2NsYXNzTmFtZToiQ29kZU1pcnJvci1saW50LW1hcmstIitnLF9fYW5ub3RhdGlvbjptfSkpfW4uaGFzR3V0dGVyJiZlLnNldEd1dHRlck1hcmtlcihvLHYsdShkLGYsYS5sZW5ndGg+MSxuLm9wdGlvbnMudG9vbHRpcHMpKX19ci5vblVwZGF0ZUxpbnRpbmcmJnIub25VcGRhdGVMaW50aW5nKHQsaSxlKX1mdW5jdGlvbiBtKGUpe3ZhciB0PWUuc3RhdGUubGludDt0JiYoY2xlYXJUaW1lb3V0KHQudGltZW91dCksdC50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKGUpfSx0Lm9wdGlvbnMuZGVsYXl8fDUwMCkpfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIG49dC50YXJnZXR8fHQuc3JjRWxlbWVudCxyPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBhPWVbb107ci5hcHBlbmRDaGlsZChwKGEpKX1pKHQscixuKX1mdW5jdGlvbiB5KGUsdCl7dmFyIG49dC50YXJnZXR8fHQuc3JjRWxlbWVudDtpZigvXGJDb2RlTWlycm9yLWxpbnQtbWFyay0vLnRlc3Qobi5jbGFzc05hbWUpKXtmb3IodmFyIHI9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPShyLmxlZnQrci5yaWdodCkvMixvPShyLnRvcCtyLmJvdHRvbSkvMixhPWUuZmluZE1hcmtzQXQoZS5jb29yZHNDaGFyKHtsZWZ0OmksdG9wOm99LCJjbGllbnQiKSkscz1bXSx1PTA7dTxhLmxlbmd0aDsrK3Upe3ZhciBjPWFbdV0uX19hbm5vdGF0aW9uO2MmJnMucHVzaChjKX1zLmxlbmd0aCYmZyhzLHQpfX12YXIgdj0iQ29kZU1pcnJvci1saW50LW1hcmtlcnMiO2UuZGVmaW5lT3B0aW9uKCJsaW50IiwhMSxmdW5jdGlvbih0LG4scil7aWYociYmciE9ZS5Jbml0JiYocyh0KSwhMSE9PXQuc3RhdGUubGludC5vcHRpb25zLmxpbnRPbkNoYW5nZSYmdC5vZmYoImNoYW5nZSIsbSksZS5vZmYodC5nZXRXcmFwcGVyRWxlbWVudCgpLCJtb3VzZW92ZXIiLHQuc3RhdGUubGludC5vbk1vdXNlT3ZlciksY2xlYXJUaW1lb3V0KHQuc3RhdGUubGludC50aW1lb3V0KSxkZWxldGUgdC5zdGF0ZS5saW50KSxuKXtmb3IodmFyIGk9dC5nZXRPcHRpb24oImd1dHRlcnMiKSx1PSExLGM9MDtjPGkubGVuZ3RoOysrYylpW2NdPT12JiYodT0hMCk7dmFyIGw9dC5zdGF0ZS5saW50PW5ldyBvKHQsYSh0LG4pLHUpOyExIT09bC5vcHRpb25zLmxpbnRPbkNoYW5nZSYmdC5vbigiY2hhbmdlIixtKSwwIT1sLm9wdGlvbnMudG9vbHRpcHMmJiJndXR0ZXIiIT1sLm9wdGlvbnMudG9vbHRpcHMmJmUub24odC5nZXRXcmFwcGVyRWxlbWVudCgpLCJtb3VzZW92ZXIiLGwub25Nb3VzZU92ZXIpLGQodCl9fSksZS5kZWZpbmVFeHRlbnNpb24oInBlcmZvcm1MaW50IixmdW5jdGlvbigpe3RoaXMuc3RhdGUubGludCYmZCh0aGlzKX0pfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD12b2lkIDA7dHJ5e3Q9KDAsdS5wYXJzZSkoZSl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9dmFyIG49aShlKTtyZXR1cm57b3V0bGluZVRyZWVzOigwLHUudmlzaXQpKHQse2xlYXZlOmZ1bmN0aW9uKGUpe3JldHVybiBwLmhhc093blByb3BlcnR5KGUua2luZCkmJm5bZS5raW5kXT9uW2Uua2luZF0oZSk6bnVsbH19KX19ZnVuY3Rpb24gaShlKXt2YXIgdD1mdW5jdGlvbih0KXtyZXR1cm57cmVwcmVzZW50YXRpdmVOYW1lOnQubmFtZSxzdGFydFBvc2l0aW9uOigwLGwub2Zmc2V0VG9Qb3NpdGlvbikoZSx0LmxvYy5zdGFydCksZW5kUG9zaXRpb246KDAsbC5vZmZzZXRUb1Bvc2l0aW9uKShlLHQubG9jLmVuZCksY2hpbGRyZW46dC5zZWxlY3Rpb25TZXR8fFtdfX07cmV0dXJue0ZpZWxkOmZ1bmN0aW9uKGUpe3ZhciBuPWUuYWxpYXM/W28oInBsYWluIixlLmFsaWFzKSxvKCJwbGFpbiIsIjogIildOltdO3JldHVybiBuLnB1c2gobygicGxhaW4iLGUubmFtZSkpLHMoe3Rva2VuaXplZFRleHQ6bn0sdChlKSl9LE9wZXJhdGlvbkRlZmluaXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHMoe3Rva2VuaXplZFRleHQ6W28oImtleXdvcmQiLGUub3BlcmF0aW9uKSxvKCJ3aGl0ZXNwYWNlIiwiICIpLG8oImNsYXNzLW5hbWUiLGUubmFtZSldfSx0KGUpKX0sRG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVmaW5pdGlvbnN9LFNlbGVjdGlvblNldDpmdW5jdGlvbihlKXtyZXR1cm4gYShlLnNlbGVjdGlvbnMsZnVuY3Rpb24oZSl7cmV0dXJuIGUua2luZD09PWMuSU5MSU5FX0ZSQUdNRU5UP2Uuc2VsZWN0aW9uU2V0OmV9KX0sTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sRnJhZ21lbnREZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBzKHt0b2tlbml6ZWRUZXh0OltvKCJrZXl3b3JkIiwiZnJhZ21lbnQiKSxvKCJ3aGl0ZXNwYWNlIiwiICIpLG8oImNsYXNzLW5hbWUiLGUubmFtZSldfSx0KGUpKX0sRnJhZ21lbnRTcHJlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHMoe3Rva2VuaXplZFRleHQ6W28oInBsYWluIiwiLi4uIiksbygiY2xhc3MtbmFtZSIsZS5uYW1lKV19LHQoZSkpfSxJbmxpbmVGcmFnbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3Rpb25TZXR9fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJue2tpbmQ6ZSx2YWx1ZTp0fX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9dChlW3JdLHIpO0FycmF5LmlzQXJyYXkoaSk/bi5wdXNoLmFwcGx5KG4saSk6bi5wdXNoKGkpfXJldHVybiBufU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt0LmdldE91dGxpbmU9cjt2YXIgdT1uKDcpLGM9bigxMCksbD1uKDk1KSxwPXtGaWVsZDohMCxPcGVyYXRpb25EZWZpbml0aW9uOiEwLERvY3VtZW50OiEwLFNlbGVjdGlvblNldDohMCxOYW1lOiEwLEZyYWdtZW50RGVmaW5pdGlvbjohMCxGcmFnbWVudFNwcmVhZDohMCxJbmxpbmVGcmFnbWVudDohMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdyYXBoUUxMYW5ndWFnZVNlcnZpY2U9dm9pZCAwO3ZhciBpPW4oMTApLG89big3KSxhPW4oOTMpLHM9big5NiksdT1uKDk0KSxjPW4oOTUpO3QuR3JhcGhRTExhbmd1YWdlU2VydmljZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpLHRoaXMuX2dyYXBoUUxDYWNoZT10LHRoaXMuX2dyYXBoUUxDb25maWc9dC5nZXRHcmFwaFFMQ29uZmlnKCl9cmV0dXJuIGUucHJvdG90eXBlLmdldERpYWdub3N0aWNzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYSx1LGMsbCxwLGYsZCxoLG0sZyx5LHYsYix4O3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUuYXN5bmMoZnVuY3Rpb24oQyl7Zm9yKDs7KXN3aXRjaChDLnByZXY9Qy5uZXh0KXtjYXNlIDA6YT0hMSx1PXRoaXMuX2dyYXBoUUxDb25maWcuZ2V0Q29uZmlnRm9yRmlsZSh0KSxjPXUuc2NoZW1hUGF0aCxDLnByZXY9MyxsPSgwLG8ucGFyc2UpKGUpLGMmJnQ9PT1jfHwoYT1sLmRlZmluaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7c3dpdGNoKGUua2luZCl7Y2FzZSBpLk9CSkVDVF9UWVBFX0RFRklOSVRJT046Y2FzZSBpLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT046Y2FzZSBpLkVOVU1fVFlQRV9ERUZJTklUSU9OOmNhc2UgaS5VTklPTl9UWVBFX0RFRklOSVRJT046Y2FzZSBpLlNDQUxBUl9UWVBFX0RFRklOSVRJT046Y2FzZSBpLklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT046Y2FzZSBpLlNDQUxBUl9UWVBFX0VYVEVOU0lPTjpjYXNlIGkuT0JKRUNUX1RZUEVfRVhURU5TSU9OOmNhc2UgaS5JTlRFUkZBQ0VfVFlQRV9FWFRFTlNJT046Y2FzZSBpLlVOSU9OX1RZUEVfRVhURU5TSU9OOmNhc2UgaS5FTlVNX1RZUEVfRVhURU5TSU9OOmNhc2UgaS5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT046Y2FzZSBpLkRJUkVDVElWRV9ERUZJTklUSU9OOnJldHVybiEwfXJldHVybiExfSkpLEMubmV4dD0xMjticmVhaztjYXNlIDg6cmV0dXJuIEMucHJldj04LEMudDA9Qy5jYXRjaCgzKSxwPSgwLHMuZ2V0UmFuZ2UpKEMudDAubG9jYXRpb25zWzBdLGUpLEMuYWJydXB0KCJyZXR1cm4iLFt7c2V2ZXJpdHk6cy5TRVZFUklUWS5FUlJPUixtZXNzYWdlOkMudDAubWVzc2FnZSxzb3VyY2U6IkdyYXBoUUw6IFN5bnRheCIscmFuZ2U6cH1dKTtjYXNlIDEyOmlmKGMpe0MubmV4dD0xNDticmVha31yZXR1cm4gQy5hYnJ1cHQoInJldHVybiIsW10pO2Nhc2UgMTQ6cmV0dXJuIGY9ZSxDLm5leHQ9MTcscmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHRoaXMuX2dyYXBoUUxDYWNoZS5nZXRGcmFnbWVudERlZmluaXRpb25zKHUpKTtjYXNlIDE3OnJldHVybiBkPUMuc2VudCxDLm5leHQ9MjAscmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHRoaXMuX2dyYXBoUUxDYWNoZS5nZXRGcmFnbWVudERlcGVuZGVuY2llcyhlLGQpKTtjYXNlIDIwOmg9Qy5zZW50LG09aC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsiICIrKDAsby5wcmludCkodC5kZWZpbml0aW9uKX0sIiIpLGY9ZisiICIrbSxnPW51bGwsQy5wcmV2PTI0LGc9KDAsby5wYXJzZSkoZiksQy5uZXh0PTMxO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIEMucHJldj0yOCxDLnQxPUMuY2F0Y2goMjQpLEMuYWJydXB0KCJyZXR1cm4iLFtdKTtjYXNlIDMxOnJldHVybiBDLm5leHQ9MzMscmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHRoaXMuX2dyYXBoUUxDYWNoZS5nZXRTY2hlbWEodS5wcm9qZWN0TmFtZSxhKSk7Y2FzZSAzMzpyZXR1cm4geT1DLnNlbnQsdj12b2lkIDAsYj11LmV4dGVuc2lvbnMuY3VzdG9tVmFsaWRhdGlvblJ1bGVzLGImJih4PW4oMjc5KS5yZXNvbHZlKCIiK2IpKSYmKHY9bigyNzkpKCIiK3gpKHRoaXMuX2dyYXBoUUxDb25maWcpKSxDLmFicnVwdCgicmV0dXJuIiwoMCxzLnZhbGlkYXRlUXVlcnkpKGcseSx2LHIpKTtjYXNlIDM4OmNhc2UiZW5kIjpyZXR1cm4gQy5zdG9wKCl9fSxudWxsLHRoaXMsW1szLDhdLFsyNCwyOF1dKX0sZS5wcm90b3R5cGUuZ2V0QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS5hc3luYyhmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZihyPXRoaXMuX2dyYXBoUUxDb25maWcuZ2V0Q29uZmlnRm9yRmlsZShuKSwhci5zY2hlbWFQYXRoKXtvLm5leHQ9NzticmVha31yZXR1cm4gby5uZXh0PTQscmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHRoaXMuX2dyYXBoUUxDYWNoZS5nZXRTY2hlbWEoci5wcm9qZWN0TmFtZSkpO2Nhc2UgNDppZighKGk9by5zZW50KSl7by5uZXh0PTc7YnJlYWt9cmV0dXJuIG8uYWJydXB0KCJyZXR1cm4iLCgwLGEuZ2V0QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMpKGksZSx0KSk7Y2FzZSA3OnJldHVybiBvLmFicnVwdCgicmV0dXJuIixbXSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gby5zdG9wKCl9fSxudWxsLHRoaXMpfSxlLnByb3RvdHlwZS5nZXREZWZpbml0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixhLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS5hc3luYyhmdW5jdGlvbihsKXtmb3IoOzspc3dpdGNoKGwucHJldj1sLm5leHQpe2Nhc2UgMDpyPXRoaXMuX2dyYXBoUUxDb25maWcuZ2V0Q29uZmlnRm9yRmlsZShuKSxhPXZvaWQgMCxsLnByZXY9MixhPSgwLG8ucGFyc2UpKGUpLGwubmV4dD05O2JyZWFrO2Nhc2UgNjpyZXR1cm4gbC5wcmV2PTYsbC50MD1sLmNhdGNoKDIpLGwuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgOTppZighKHM9KDAsYy5nZXRBU1ROb2RlQXRQb3NpdGlvbikoZSxhLHQpKSl7bC5uZXh0PTE2O2JyZWFrfWwudDE9cy5raW5kLGwubmV4dD1sLnQxPT09aS5GUkFHTUVOVF9TUFJFQUQ/MTQ6bC50MT09PWkuRlJBR01FTlRfREVGSU5JVElPTj8xNTpsLnQxPT09aS5PUEVSQVRJT05fREVGSU5JVElPTj8xNToxNjticmVhaztjYXNlIDE0OnJldHVybiBsLmFicnVwdCgicmV0dXJuIix0aGlzLl9nZXREZWZpbml0aW9uRm9yRnJhZ21lbnRTcHJlYWQoZSxhLHMsbixyKSk7Y2FzZSAxNTpyZXR1cm4gbC5hYnJ1cHQoInJldHVybiIsKDAsdS5nZXREZWZpbml0aW9uUXVlcnlSZXN1bHRGb3JEZWZpbml0aW9uTm9kZSkobixlLHMpKTtjYXNlIDE2OnJldHVybiBsLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gbC5zdG9wKCl9fSxudWxsLHRoaXMsW1syLDZdXSl9LGUucHJvdG90eXBlLl9nZXREZWZpbml0aW9uRm9yRnJhZ21lbnRTcHJlYWQ9ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYSxzLGMsbCxwLGY7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS5hc3luYyhmdW5jdGlvbihkKXtmb3IoOzspc3dpdGNoKGQucHJldj1kLm5leHQpe2Nhc2UgMDpyZXR1cm4gZC5uZXh0PTIscmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHRoaXMuX2dyYXBoUUxDYWNoZS5nZXRGcmFnbWVudERlZmluaXRpb25zKG8pKTtjYXNlIDI6cmV0dXJuIGE9ZC5zZW50LGQubmV4dD01LHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh0aGlzLl9ncmFwaFFMQ2FjaGUuZ2V0RnJhZ21lbnREZXBlbmRlbmNpZXNGb3JBU1QodCxhKSk7Y2FzZSA1OnJldHVybiBzPWQuc2VudCxjPXQuZGVmaW5pdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT1pLkZSQUdNRU5UX0RFRklOSVRJT059KSxsPWMscD1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm57ZmlsZVBhdGg6cixjb250ZW50OmUsZGVmaW5pdGlvbjp0fX0pLGQubmV4dD0xMSxyZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoKDAsdS5nZXREZWZpbml0aW9uUXVlcnlSZXN1bHRGb3JGcmFnbWVudFNwcmVhZCkoZSxuLHMuY29uY2F0KHApKSk7Y2FzZSAxMTpyZXR1cm4gZj1kLnNlbnQsZC5hYnJ1cHQoInJldHVybiIsZik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGQuc3RvcCgpfX0sbnVsbCx0aGlzKX0sZX0oKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfSxvPWZ1bmN0aW9uKCl7cmV0dXJuIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pfXJldHVybiBlfSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPW4oMCkscz1uKDEpLHU9bigyODQpLGM9big2MTQpLGw9big2MjApLHA9big4KSxmPW4oMTIpLGQ9big5KSxoPW4oOTcpLG09bigxOCksZz1uKDE2KSx5PW4oMTMyKSx2PW4oNzUpLGI9bigxNykseD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmNvcHlDdXJsVG9DbGlwYm9hcmQ9ZnVuY3Rpb24oKXt2YXIgZT10LmdldEN1cmwoKTt1KGUpfSx0Lm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3QucHJvcHMuZWRpdEVuZHBvaW50KGUudGFyZ2V0LnZhbHVlKX0sdC5vbktleURvd249ZnVuY3Rpb24oZSl7MTM9PT1lLmtleUNvZGUmJnQucHJvcHMucmVmZXRjaFNjaGVtYSgpfSx0Lm9wZW5IaXN0b3J5PWZ1bmN0aW9uKCl7dC5wcm9wcy5vcGVuSGlzdG9yeSgpfSx0LmdldEN1cmw9ZnVuY3Rpb24oKXt2YXIgZSxuPWYuZ2V0U2VsZWN0ZWRTZXNzaW9uKHQuY29udGV4dC5zdG9yZS5nZXRTdGF0ZSgpKTt0cnl7ZT1KU09OLnBhcnNlKG4udmFyaWFibGVzKX1jYXRjaChlKXt9dmFyIHIsaT1KU09OLnN0cmluZ2lmeSh7cXVlcnk6bi5xdWVyeSx2YXJpYWJsZXM6ZSxvcGVyYXRpb25OYW1lOm4ub3BlcmF0aW9uTmFtZX0pO3RyeXtyPUpTT04ucGFyc2Uobi5oZWFkZXJzKX1jYXRjaChlKXt9dmFyIGE9byh7IkFjY2VwdC1FbmNvZGluZyI6Imd6aXAsIGRlZmxhdGUsIGJyIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIixDb25uZWN0aW9uOiJrZWVwLWFsaXZlIixETlQ6IjEiLE9yaWdpbjpsb2NhdGlvbi5vcmlnaW58fG4uZW5kcG9pbnR9LHIpLHM9T2JqZWN0LmtleXMoYSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiItSCAnIitlKyI6ICIrYVtlXSsiJyJ9KS5qb2luKCIgIik7cmV0dXJuImN1cmwgJyIrbi5lbmRwb2ludCsiJyAiK3MrIiAtLWRhdGEtYmluYXJ5ICciK2krIicgLS1jb21wcmVzc2VkIn0sdH1yZXR1cm4gcihuLGUpLG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsbj1lLmVuZHBvaW50VW5yZWFjaGFibGUscj1lLnNldHRpbmdzO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoVCxudWxsLGEuY3JlYXRlRWxlbWVudCh0LkJ1dHRvbix7b25DbGljazp0aGlzLnByb3BzLnByZXR0aWZ5UXVlcnl9LCJQcmV0dGlmeSIpLGEuY3JlYXRlRWxlbWVudCh0LkJ1dHRvbix7b25DbGljazp0aGlzLm9wZW5IaXN0b3J5fSwiSGlzdG9yeSIpLGEuY3JlYXRlRWxlbWVudChGLG51bGwsYS5jcmVhdGVFbGVtZW50KE8se3ZhbHVlOnRoaXMucHJvcHMuZW5kcG9pbnQsb25DaGFuZ2U6dGhpcy5vbkNoYW5nZSxvbktleURvd246dGhpcy5vbktleURvd24sb25CbHVyOnRoaXMucHJvcHMucmVmZXRjaFNjaGVtYSxkaXNhYmxlZDp0aGlzLnByb3BzLmZpeGVkRW5kcG9pbnQsYWN0aXZlOiF0aGlzLnByb3BzLmZpeGVkRW5kcG9pbnR9KSxuP2EuY3JlYXRlRWxlbWVudChOLG51bGwsYS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJTZXJ2ZXIgY2Fubm90IGJlIHJlYWNoZWQiKSxhLmNyZWF0ZUVsZW1lbnQoUCxudWxsKSk6YS5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNnB4In19LGEuY3JlYXRlRWxlbWVudChsLmRlZmF1bHQse3NldHRpbmdzOnIsaXNQb2xsaW5nU2NoZW1hOnRoaXMucHJvcHMuaXNQb2xsaW5nU2NoZW1hLG9uUmVsb2FkU2NoZW1hOnRoaXMucHJvcHMucmVmZXRjaFNjaGVtYX0pKSksYS5jcmVhdGVFbGVtZW50KHQuQnV0dG9uLHtvbkNsaWNrOnRoaXMuY29weUN1cmxUb0NsaXBib2FyZH0sIkNvcHkgQ1VSTCIpLHRoaXMucHJvcHMuc2hhcmVFbmFibGVkJiZhLmNyZWF0ZUVsZW1lbnQoYy5kZWZhdWx0LG51bGwsYS5jcmVhdGVFbGVtZW50KHQuQnV0dG9uLG51bGwsIlNoYXJlIFBsYXlncm91bmQiKSkpfSxuLmNvbnRleHRUeXBlcz17c3RvcmU6bS5zaGFwZSh7c3Vic2NyaWJlOm0uZnVuYy5pc1JlcXVpcmVkLGRpc3BhdGNoOm0uZnVuYy5pc1JlcXVpcmVkLGdldFN0YXRlOm0uZnVuYy5pc1JlcXVpcmVkfSl9LG59KGEuQ29tcG9uZW50KSxDPXAuY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHtlbmRwb2ludDpmLmdldEVuZHBvaW50LGZpeGVkRW5kcG9pbnQ6aC5nZXRGaXhlZEVuZHBvaW50LGlzUG9sbGluZ1NjaGVtYTpmLmdldElzUG9sbGluZ1NjaGVtYSxlbmRwb2ludFVucmVhY2hhYmxlOmYuZ2V0RW5kcG9pbnRVbnJlYWNoYWJsZSxzZXR0aW5nczpiLmdldFNldHRpbmdzfSk7dC5kZWZhdWx0PWQuY29ubmVjdChDLHtlZGl0RW5kcG9pbnQ6Zy5lZGl0RW5kcG9pbnQscHJldHRpZnlRdWVyeTpnLnByZXR0aWZ5UXVlcnksb3Blbkhpc3Rvcnk6di5vcGVuSGlzdG9yeSxzaGFyZTp5LnNoYXJlLHJlZmV0Y2hTY2hlbWE6Zy5yZWZldGNoU2NoZW1hfSkoeCksdC5CdXR0b249cy5zdHlsZWQuYnV0dG9uKEV8fChFPWkoWyJcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICIsIjtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBsZXR0ZXItc3BhY2luZzogMC41M3B4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDZweCA5cHggN3B4IDEwcHg7XG4gIG1hcmdpbi1sZWZ0OiA2cHg7XG5cbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBiYWNrZ3JvdW5kLWNvbG9yO1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIH1cbiJdLFsiXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBmbGV4OiAwIDAgYXV0bztcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiA2cHggOXB4IDdweCAxMHB4O1xuICBtYXJnaW4tbGVmdDogNnB4O1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgYmFja2dyb3VuZC1jb2xvcjtcbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYnV0dG9uVGV4dH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5idXR0b259LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYnV0dG9uSG92ZXJ9KTt2YXIgRSxELHcsUyxrLEEsXyxUPXMuc3R5bGVkLmRpdihEfHwoRD1pKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgcGFkZGluZzogMTBweCAxMHB4IDRweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgcGFkZGluZzogMTBweCAxMHB4IDRweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5uYXZpZ2F0aW9uQmFyfSksTz1zLnN0eWxlZCgiaW5wdXQiKSh3fHwodz1pKFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogIiwiO1xuICBib3JkZXI6IDFweCBzb2xpZCAiLCI7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZmxleDogMTtcbiJdLFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogIiwiO1xuICBib3JkZXI6IDFweCBzb2xpZCAiLCI7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZmxleDogMTtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5idXR0b259LGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZT9lLnRoZW1lLmVkaXRvckNvbG91cnMubmF2aWdhdGlvbkJhclRleHQ6ZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRleHRJbmFjdGl2ZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5iYWNrZ3JvdW5kfSksRj1zLnN0eWxlZC5kaXYoU3x8KFM9aShbIlxuICBmbGV4OiAxO1xuICBtYXJnaW4tbGVmdDogNnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4iXSxbIlxuICBmbGV4OiAxO1xuICBtYXJnaW4tbGVmdDogNnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4iXSkpKSxOPXMuc3R5bGVkLmRpdihrfHwoaz1pKFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICNmMjVjNTQ7XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA1cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjZjI1YzU0O1xuIl0pKSksST1zLnN0eWxlZC5kaXYoQXx8KEE9aShbIlxuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4iXSxbIlxuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuaWNvbn0pLEw9cy5zdHlsZWQuZGl2KF98fChfPWkoWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IDZweDtcbiJdLFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiA2cHg7XG4iXSkpKSxQPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudChMLG51bGwsYS5jcmVhdGVFbGVtZW50KEksbnVsbCkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89bigxKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIGkuY3JlYXRlRWxlbWVudCh1LG51bGwsaS5jcmVhdGVFbGVtZW50KGMsbnVsbCkpfSxzPW8ua2V5ZnJhbWVzKGx8fChsPXIoWyJcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gIH1cbiJdLFsiXG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG4iXSkpKSx1PW8uc3R5bGVkLmRpdihwfHwocD1yKFsiXG4gIGhlaWdodDogMzZweDtcbiAgbGVmdDogNTAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgd2lkdGg6IDM2cHg7XG4gIHotaW5kZXg6IDEwO1xuIl0sWyJcbiAgaGVpZ2h0OiAzNnB4O1xuICBsZWZ0OiA1MCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogMzZweDtcbiAgei1pbmRleDogMTA7XG4iXSkpKSxjPW8uc3R5bGVkLmRpdihmfHwoZj1yKFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDI0cHg7XG4gIHdpZHRoOiAyNHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gIGFuaW1hdGlvbjogIiwiIDAuNnMgaW5maW5pdGUgbGluZWFyO1xuXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIGJvcmRlci1ib3R0b206IDZweCBzb2xpZCByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHJnYmEoMTUwLCAxNTAsIDE1MCwgMC4xNSk7XG4gIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHJnYmEoMTUwLCAxNTAsIDE1MCwgMC4xNSk7XG4gIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuOCk7XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNHB4O1xuICB3aWR0aDogMjRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICBhbmltYXRpb246ICIsIiAwLjZzIGluZmluaXRlIGxpbmVhcjtcblxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSgxNTAsIDE1MCwgMTUwLCAwLjE1KTtcbiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICBib3JkZXItdG9wOiA2cHggc29saWQgcmdiYSgxNTAsIDE1MCwgMTUwLCAwLjgpO1xuIl0pKSxzKTt0LmRlZmF1bHQ9YTt2YXIgbCxwLGZ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX19ydWxlc19fPVtdLHRoaXMuX19jYWNoZV9fPW51bGx9ci5wcm90b3R5cGUuX19maW5kX189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLl9fcnVsZXNfXy5sZW5ndGg7dCsrKWlmKHRoaXMuX19ydWxlc19fW3RdLm5hbWU9PT1lKXJldHVybiB0O3JldHVybi0xfSxyLnByb3RvdHlwZS5fX2NvbXBpbGVfXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1bIiJdO2UuX19ydWxlc19fLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5lbmFibGVkJiZlLmFsdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuaW5kZXhPZihlKTwwJiZ0LnB1c2goZSl9KX0pLGUuX19jYWNoZV9fPXt9LHQuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9fY2FjaGVfX1t0XT1bXSxlLl9fcnVsZXNfXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uZW5hYmxlZCYmKHQmJm4uYWx0LmluZGV4T2YodCk8MHx8ZS5fX2NhY2hlX19bdF0ucHVzaChuLmZuKSl9KX0pfSxyLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fX2ZpbmRfXyhlKSxpPW58fHt9O2lmKC0xPT09cil0aHJvdyBuZXcgRXJyb3IoIlBhcnNlciBydWxlIG5vdCBmb3VuZDogIitlKTt0aGlzLl9fcnVsZXNfX1tyXS5mbj10LHRoaXMuX19ydWxlc19fW3JdLmFsdD1pLmFsdHx8W10sdGhpcy5fX2NhY2hlX189bnVsbH0sci5wcm90b3R5cGUuYmVmb3JlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuX19maW5kX18oZSksbz1yfHx7fTtpZigtMT09PWkpdGhyb3cgbmV3IEVycm9yKCJQYXJzZXIgcnVsZSBub3QgZm91bmQ6ICIrZSk7dGhpcy5fX3J1bGVzX18uc3BsaWNlKGksMCx7bmFtZTp0LGVuYWJsZWQ6ITAsZm46bixhbHQ6by5hbHR8fFtdfSksdGhpcy5fX2NhY2hlX189bnVsbH0sci5wcm90b3R5cGUuYWZ0ZXI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5fX2ZpbmRfXyhlKSxvPXJ8fHt9O2lmKC0xPT09aSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlciBydWxlIG5vdCBmb3VuZDogIitlKTt0aGlzLl9fcnVsZXNfXy5zcGxpY2UoaSsxLDAse25hbWU6dCxlbmFibGVkOiEwLGZuOm4sYWx0Om8uYWx0fHxbXX0pLHRoaXMuX19jYWNoZV9fPW51bGx9LHIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW58fHt9O3RoaXMuX19ydWxlc19fLnB1c2goe25hbWU6ZSxlbmFibGVkOiEwLGZuOnQsYWx0OnIuYWx0fHxbXX0pLHRoaXMuX19jYWNoZV9fPW51bGx9LHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIG49W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9fZmluZF9fKGUpO2lmKHI8MCl7aWYodClyZXR1cm47dGhyb3cgbmV3IEVycm9yKCJSdWxlcyBtYW5hZ2VyOiBpbnZhbGlkIHJ1bGUgbmFtZSAiK2UpfXRoaXMuX19ydWxlc19fW3JdLmVuYWJsZWQ9ITAsbi5wdXNoKGUpfSx0aGlzKSx0aGlzLl9fY2FjaGVfXz1udWxsLG59LHIucHJvdG90eXBlLmVuYWJsZU9ubHk9ZnVuY3Rpb24oZSx0KXtBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLHRoaXMuX19ydWxlc19fLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5lbmFibGVkPSExfSksdGhpcy5lbmFibGUoZSx0KX0sci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIG49W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9fZmluZF9fKGUpO2lmKHI8MCl7aWYodClyZXR1cm47dGhyb3cgbmV3IEVycm9yKCJSdWxlcyBtYW5hZ2VyOiBpbnZhbGlkIHJ1bGUgbmFtZSAiK2UpfXRoaXMuX19ydWxlc19fW3JdLmVuYWJsZWQ9ITEsbi5wdXNoKGUpfSx0aGlzKSx0aGlzLl9fY2FjaGVfXz1udWxsLG59LHIucHJvdG90eXBlLmdldFJ1bGVzPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09dGhpcy5fX2NhY2hlX18mJnRoaXMuX19jb21waWxlX18oKSx0aGlzLl9fY2FjaGVfX1tlXXx8W119LGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMudHlwZT1lLHRoaXMudGFnPXQsdGhpcy5hdHRycz1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5uZXN0aW5nPW4sdGhpcy5sZXZlbD0wLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLmNvbnRlbnQ9IiIsdGhpcy5tYXJrdXA9IiIsdGhpcy5pbmZvPSIiLHRoaXMubWV0YT1udWxsLHRoaXMuYmxvY2s9ITEsdGhpcy5oaWRkZW49ITF9ci5wcm90b3R5cGUuYXR0ckluZGV4PWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZighdGhpcy5hdHRycylyZXR1cm4tMTtmb3IodD10aGlzLmF0dHJzLG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYodFtuXVswXT09PWUpcmV0dXJuIG47cmV0dXJuLTF9LHIucHJvdG90eXBlLmF0dHJQdXNoPWZ1bmN0aW9uKGUpe3RoaXMuYXR0cnM/dGhpcy5hdHRycy5wdXNoKGUpOnRoaXMuYXR0cnM9W2VdfSxyLnByb3RvdHlwZS5hdHRyU2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5hdHRySW5kZXgoZSkscj1bZSx0XTtuPDA/dGhpcy5hdHRyUHVzaChyKTp0aGlzLmF0dHJzW25dPXJ9LHIucHJvdG90eXBlLmF0dHJHZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hdHRySW5kZXgoZSksbj1udWxsO3JldHVybiB0Pj0wJiYobj10aGlzLmF0dHJzW3RdWzFdKSxufSxyLnByb3RvdHlwZS5hdHRySm9pbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYXR0ckluZGV4KGUpO248MD90aGlzLmF0dHJQdXNoKFtlLHRdKTp0aGlzLmF0dHJzW25dWzFdPXRoaXMuYXR0cnNbbl1bMV0rIiAiK3R9LGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMSk7dC5Eb2NUeXBlPWkuc3R5bGVkLmRpdihvfHwobz1yKFsiXG4gIHBhZGRpbmc6IDIwcHggMTZweCAwIDE2cHg7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBmb250LXNpemU6IDE0cHg7XG4iXSxbIlxuICBwYWRkaW5nOiAyMHB4IDE2cHggMCAxNnB4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgZm9udC1zaXplOiAxNHB4O1xuIl0pKSk7dmFyIG99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7aWYobil7dmFyIHI9ZS5wcm9qZWN0c1tuXS5leHRlbnNpb25zLmVuZHBvaW50c1t0XTtyZXR1cm4gaShyKX12YXIgcj1lLmV4dGVuc2lvbnMuZW5kcG9pbnRzW3RdO3JldHVybiBpKHIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZT97ZW5kcG9pbnQ6ZSxzdWJzY3JpcHRpb25FbmRwb2ludDp2b2lkIDB9OntlbmRwb2ludDplLnVybCxzdWJzY3JpcHRpb25FbmRwb2ludDplLnN1YnNjcmlwdGlvbj9lLnN1YnNjcmlwdGlvbi51cmw6dm9pZCAwLGhlYWRlcnM6ZS5oZWFkZXJzfX1mdW5jdGlvbiBvKGUpe3ZhciB0PXUuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7dmFyIG49YS5wcmludFNjaGVtYShlKTtyZXR1cm4gdS5zZXQoZSxuKSxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1uKDcpLHM9bigyNTIpO3QuZ2V0QWN0aXZlRW5kcG9pbnRzPXIsdC5nZXRFbmRwb2ludEZyb21FbmRwb2ludENvbmZpZz1pO3ZhciB1PW5ldyBzKHttYXg6MTB9KTt0LmNhY2hlZFByaW50U2NoZW1hPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1Myk7ZS5leHBvcnRzPW5ldyByKHtleHBsaWNpdDpbbig3MjYpLG4oNzI3KSxuKDcyOCldfSl9LCxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcixpPW4oMjMpO3Quc2VsZWN0V29ya3NwYWNlPShyPWkuY3JlYXRlQWN0aW9ucyh7U0VMRUNUX1dPUktTUEFDRTpmdW5jdGlvbihlKXtyZXR1cm57d29ya3NwYWNlOmV9fSxJTklUX1NUQVRFOmZ1bmN0aW9uKGUsdCl7cmV0dXJue3dvcmtzcGFjZUlkOmUsZW5kcG9pbnQ6dH19LElOSkVDVF9TVEFURTpmdW5jdGlvbihlKXtyZXR1cm57c3RhdGU6ZX19LElOSkVDVF9UQUJTOmZ1bmN0aW9uKGUpe3JldHVybnt0YWJzOmV9fX0pLHIuc2VsZWN0V29ya3NwYWNlKSx0LmluaXRTdGF0ZT1yLmluaXRTdGF0ZSx0LmluamVjdFN0YXRlPXIuaW5qZWN0U3RhdGUsdC5pbmplY3RUYWJzPXIuaW5qZWN0VGFic30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIGkoZSl7dHJ5e3JldHVybiBlLnRoZW59Y2F0Y2goZSl7cmV0dXJuIHk9ZSx2fX1mdW5jdGlvbiBvKGUsdCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKGUpe3JldHVybiB5PWUsdn19ZnVuY3Rpb24gYShlLHQsbil7dHJ5e2UodCxuKX1jYXRjaChlKXtyZXR1cm4geT1lLHZ9fWZ1bmN0aW9uIHMoZSl7aWYoIm9iamVjdCIhPT10eXBlb2YgdGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXciKTtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZSBjb25zdHJ1Y3RvcidzIGFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uIik7dGhpcy5fNzU9MCx0aGlzLl84Mz0wLHRoaXMuXzE4PW51bGwsdGhpcy5fMzg9bnVsbCxlIT09ciYmbShlLHRoaXMpfWZ1bmN0aW9uIHUoZSx0LG4pe3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihmdW5jdGlvbihpLG8pe3ZhciBhPW5ldyBzKHIpO2EudGhlbihpLG8pLGMoZSxuZXcgaCh0LG4sYSkpfSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcig7Mz09PWUuXzgzOyllPWUuXzE4O2lmKHMuXzQ3JiZzLl80NyhlKSwwPT09ZS5fODMpcmV0dXJuIDA9PT1lLl83NT8oZS5fNzU9MSx2b2lkKGUuXzM4PXQpKToxPT09ZS5fNzU/KGUuXzc1PTIsdm9pZChlLl8zOD1bZS5fMzgsdF0pKTp2b2lkIGUuXzM4LnB1c2godCk7bChlLHQpfWZ1bmN0aW9uIGwoZSx0KXtnKGZ1bmN0aW9uKCl7dmFyIG49MT09PWUuXzgzP3Qub25GdWxmaWxsZWQ6dC5vblJlamVjdGVkO2lmKG51bGw9PT1uKXJldHVybiB2b2lkKDE9PT1lLl84Mz9wKHQucHJvbWlzZSxlLl8xOCk6Zih0LnByb21pc2UsZS5fMTgpKTt2YXIgcj1vKG4sZS5fMTgpO3I9PT12P2YodC5wcm9taXNlLHkpOnAodC5wcm9taXNlLHIpfSl9ZnVuY3Rpb24gcChlLHQpe2lmKHQ9PT1lKXJldHVybiBmKGUsbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4iKSk7aWYodCYmKCJvYmplY3QiPT09dHlwZW9mIHR8fCJmdW5jdGlvbiI9PT10eXBlb2YgdCkpe3ZhciBuPWkodCk7aWYobj09PXYpcmV0dXJuIGYoZSx5KTtpZihuPT09ZS50aGVuJiZ0IGluc3RhbmNlb2YgcylyZXR1cm4gZS5fODM9MyxlLl8xOD10LHZvaWQgZChlKTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIG4pcmV0dXJuIHZvaWQgbShuLmJpbmQodCksZSl9ZS5fODM9MSxlLl8xOD10LGQoZSl9ZnVuY3Rpb24gZihlLHQpe2UuXzgzPTIsZS5fMTg9dCxzLl83MSYmcy5fNzEoZSx0KSxkKGUpfWZ1bmN0aW9uIGQoZSl7aWYoMT09PWUuXzc1JiYoYyhlLGUuXzM4KSxlLl8zOD1udWxsKSwyPT09ZS5fNzUpe2Zvcih2YXIgdD0wO3Q8ZS5fMzgubGVuZ3RoO3QrKyljKGUsZS5fMzhbdF0pO2UuXzM4PW51bGx9fWZ1bmN0aW9uIGgoZSx0LG4pe3RoaXMub25GdWxmaWxsZWQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6bnVsbCx0aGlzLm9uUmVqZWN0ZWQ9ImZ1bmN0aW9uIj09PXR5cGVvZiB0P3Q6bnVsbCx0aGlzLnByb21pc2U9bn1mdW5jdGlvbiBtKGUsdCl7dmFyIG49ITEscj1hKGUsZnVuY3Rpb24oZSl7bnx8KG49ITAscCh0LGUpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsZih0LGUpKX0pO258fHIhPT12fHwobj0hMCxmKHQseSkpfXZhciBnPW4oMzExKSx5PW51bGwsdj17fTtlLmV4cG9ydHM9cyxzLl80Nz1udWxsLHMuXzcxPW51bGwscy5fNDQ9cixzLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5jb25zdHJ1Y3RvciE9PXMpcmV0dXJuIHUodGhpcyxlLHQpO3ZhciBuPW5ldyBzKHIpO3JldHVybiBjKHRoaXMsbmV3IGgoZSx0LG4pKSxufX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTtlLmV4cG9ydHM9cn0sLCxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKDE4KSxpPW4ubihyKSxvPWkuYS5zaGFwZSh7dHJ5U3Vic2NyaWJlOmkuYS5mdW5jLmlzUmVxdWlyZWQsdHJ5VW5zdWJzY3JpYmU6aS5hLmZ1bmMuaXNSZXF1aXJlZCxub3RpZnlOZXN0ZWRTdWJzOmkuYS5mdW5jLmlzUmVxdWlyZWQsaXNTdWJzY3JpYmVkOmkuYS5mdW5jLmlzUmVxdWlyZWR9KSxhPWkuYS5zaGFwZSh7c3Vic2NyaWJlOmkuYS5mdW5jLmlzUmVxdWlyZWQsZGlzcGF0Y2g6aS5hLmZ1bmMuaXNSZXF1aXJlZCxnZXRTdGF0ZTppLmEuZnVuYy5pc1JlcXVpcmVkfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIG8oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcygpe31mdW5jdGlvbiB1KGUsdCl7dmFyIG49e3J1bjpmdW5jdGlvbihyKXt0cnl7dmFyIGk9ZSh0LmdldFN0YXRlKCkscik7KGkhPT1uLnByb3BzfHxuLmVycm9yKSYmKG4uc2hvdWxkQ29tcG9uZW50VXBkYXRlPSEwLG4ucHJvcHM9aSxuLmVycm9yPW51bGwpfWNhdGNoKGUpe24uc2hvdWxkQ29tcG9uZW50VXBkYXRlPSEwLG4uZXJyb3I9ZX19fTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3ZhciB0LG4sYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbD1jLmdldERpc3BsYXlOYW1lLGY9dm9pZCAwPT09bD9mdW5jdGlvbihlKXtyZXR1cm4iQ29ubmVjdEFkdmFuY2VkKCIrZSsiKSJ9OmwseD1jLm1ldGhvZE5hbWUsQz12b2lkIDA9PT14PyJjb25uZWN0QWR2YW5jZWQiOngsRT1jLnJlbmRlckNvdW50UHJvcCxEPXZvaWQgMD09PUU/dm9pZCAwOkUsdz1jLnNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxTPXZvaWQgMD09PXd8fHcsaz1jLnN0b3JlS2V5LEE9dm9pZCAwPT09az8ic3RvcmUiOmssXz1jLndpdGhSZWYsVD12b2lkIDAhPT1fJiZfLE89YShjLFsiZ2V0RGlzcGxheU5hbWUiLCJtZXRob2ROYW1lIiwicmVuZGVyQ291bnRQcm9wIiwic2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzIiwic3RvcmVLZXkiLCJ3aXRoUmVmIl0pLEY9QSsiU3Vic2NyaXB0aW9uIixOPXYrKyxJPSh0PXt9LHRbQV09Zy5hLHRbRl09Zy5iLHQpLEw9KG49e30sbltGXT1nLmIsbik7cmV0dXJuIGZ1bmN0aW9uKHQpe2QoKSgiZnVuY3Rpb24iPT10eXBlb2YgdCwiWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgIitDKyIuIEluc3RlYWQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSk7dmFyIG49dC5kaXNwbGF5TmFtZXx8dC5uYW1lfHwiQ29tcG9uZW50IixhPWYobiksYz15KHt9LE8se2dldERpc3BsYXlOYW1lOmYsbWV0aG9kTmFtZTpDLHJlbmRlckNvdW50UHJvcDpELHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczpTLHN0b3JlS2V5OkEsd2l0aFJlZjpULGRpc3BsYXlOYW1lOmEsd3JhcHBlZENvbXBvbmVudE5hbWU6bixXcmFwcGVkQ29tcG9uZW50OnR9KSxsPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGwoZSx0KXtyKHRoaXMsbCk7dmFyIG89aSh0aGlzLG4uY2FsbCh0aGlzLGUsdCkpO3JldHVybiBvLnZlcnNpb249TixvLnN0YXRlPXt9LG8ucmVuZGVyQ291bnQ9MCxvLnN0b3JlPWVbQV18fHRbQV0sby5wcm9wc01vZGU9Qm9vbGVhbihlW0FdKSxvLnNldFdyYXBwZWRJbnN0YW5jZT1vLnNldFdyYXBwZWRJbnN0YW5jZS5iaW5kKG8pLGQoKShvLnN0b3JlLCdDb3VsZCBub3QgZmluZCAiJytBKyciIGluIGVpdGhlciB0aGUgY29udGV4dCBvciBwcm9wcyBvZiAiJythKyciLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCBvciBleHBsaWNpdGx5IHBhc3MgIicrQSsnIiBhcyBhIHByb3AgdG8gIicrYSsnIi4nKSxvLmluaXRTZWxlY3RvcigpLG8uaW5pdFN1YnNjcmlwdGlvbigpLG99cmV0dXJuIG8obCxuKSxsLnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMucHJvcHNNb2RlP251bGw6dGhpcy5zdWJzY3JpcHRpb247cmV0dXJuIGU9e30sZVtGXT10fHx0aGlzLmNvbnRleHRbRl0sZX0sbC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXtTJiYodGhpcy5zdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCksdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyksdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUmJnRoaXMuZm9yY2VVcGRhdGUoKSl9LGwucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3Rvci5ydW4oZSl9LGwucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZX0sbC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKSx0aGlzLnN1YnNjcmlwdGlvbj1udWxsLHRoaXMubm90aWZ5TmVzdGVkU3Vicz1zLHRoaXMuc3RvcmU9bnVsbCx0aGlzLnNlbGVjdG9yLnJ1bj1zLHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlPSExfSxsLnByb3RvdHlwZS5nZXRXcmFwcGVkSW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZCgpKFQsIlRvIGFjY2VzcyB0aGUgd3JhcHBlZCBpbnN0YW5jZSwgeW91IG5lZWQgdG8gc3BlY2lmeSB7IHdpdGhSZWY6IHRydWUgfSBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudCBvZiB0aGUgIitDKyIoKSBjYWxsLiIpLHRoaXMud3JhcHBlZEluc3RhbmNlfSxsLnByb3RvdHlwZS5zZXRXcmFwcGVkSW5zdGFuY2U9ZnVuY3Rpb24oZSl7dGhpcy53cmFwcGVkSW5zdGFuY2U9ZX0sbC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzLnN0b3JlLmRpc3BhdGNoLGMpO3RoaXMuc2VsZWN0b3I9dSh0LHRoaXMuc3RvcmUpLHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpfSxsLnByb3RvdHlwZS5pbml0U3Vic2NyaXB0aW9uPWZ1bmN0aW9uKCl7aWYoUyl7dmFyIGU9KHRoaXMucHJvcHNNb2RlP3RoaXMucHJvcHM6dGhpcy5jb250ZXh0KVtGXTt0aGlzLnN1YnNjcmlwdGlvbj1uZXcgbS5hKHRoaXMuc3RvcmUsZSx0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSksdGhpcy5ub3RpZnlOZXN0ZWRTdWJzPXRoaXMuc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZCh0aGlzLnN1YnNjcmlwdGlvbil9fSxsLnByb3RvdHlwZS5vblN0YXRlQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyksdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU/KHRoaXMuY29tcG9uZW50RGlkVXBkYXRlPXRoaXMubm90aWZ5TmVzdGVkU3Vic09uQ29tcG9uZW50RGlkVXBkYXRlLHRoaXMuc2V0U3RhdGUoYikpOnRoaXMubm90aWZ5TmVzdGVkU3VicygpfSxsLnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvbmVudERpZFVwZGF0ZT12b2lkIDAsdGhpcy5ub3RpZnlOZXN0ZWRTdWJzKCl9LGwucHJvdG90eXBlLmlzU3Vic2NyaWJlZD1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuc3Vic2NyaXB0aW9uKSYmdGhpcy5zdWJzY3JpcHRpb24uaXNTdWJzY3JpYmVkKCl9LGwucHJvdG90eXBlLmFkZEV4dHJhUHJvcHM9ZnVuY3Rpb24oZSl7aWYoIVQmJiFEJiYoIXRoaXMucHJvcHNNb2RlfHwhdGhpcy5zdWJzY3JpcHRpb24pKXJldHVybiBlO3ZhciB0PXkoe30sZSk7cmV0dXJuIFQmJih0LnJlZj10aGlzLnNldFdyYXBwZWRJbnN0YW5jZSksRCYmKHRbRF09dGhpcy5yZW5kZXJDb3VudCsrKSx0aGlzLnByb3BzTW9kZSYmdGhpcy5zdWJzY3JpcHRpb24mJih0W0ZdPXRoaXMuc3Vic2NyaXB0aW9uKSx0fSxsLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlbGVjdG9yO2lmKGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPSExLGUuZXJyb3IpdGhyb3cgZS5lcnJvcjtyZXR1cm4gT2JqZWN0KGguY3JlYXRlRWxlbWVudCkodCx0aGlzLmFkZEV4dHJhUHJvcHMoZS5wcm9wcykpfSxsfShoLkNvbXBvbmVudCk7cmV0dXJuIGwuV3JhcHBlZENvbXBvbmVudD10LGwuZGlzcGxheU5hbWU9YSxsLmNoaWxkQ29udGV4dFR5cGVzPUwsbC5jb250ZXh0VHlwZXM9SSxsLnByb3BUeXBlcz1JLHAoKShsLHQpfX10LmE9Yzt2YXIgbD1uKDMzMCkscD1uLm4obCksZj1uKDIwKSxkPW4ubihmKSxoPW4oMCksbT0obi5uKGgpLG4oMzMxKSksZz1uKDE1NSkseT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx2PTAsYj17fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtmdW5jdGlvbiBvKCl7eT09PWcmJih5PWcuc2xpY2UoKSl9ZnVuY3Rpb24gdSgpe3JldHVybiBtfWZ1bmN0aW9uIGMoZSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4iKTt2YXIgdD0hMDtyZXR1cm4gbygpLHkucHVzaChlKSxmdW5jdGlvbigpe2lmKHQpe3Q9ITEsbygpO3ZhciBuPXkuaW5kZXhPZihlKTt5LnNwbGljZShuLDEpfX19ZnVuY3Rpb24gbChlKXtpZighT2JqZWN0KGkuYSkoZSkpdGhyb3cgbmV3IEVycm9yKCJBY3Rpb25zIG11c3QgYmUgcGxhaW4gb2JqZWN0cy4gVXNlIGN1c3RvbSBtaWRkbGV3YXJlIGZvciBhc3luYyBhY3Rpb25zLiIpO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGUudHlwZSl0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCAidHlwZSIgcHJvcGVydHkuIEhhdmUgeW91IG1pc3NwZWxsZWQgYSBjb25zdGFudD8nKTtpZih2KXRocm93IG5ldyBFcnJvcigiUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLiIpO3RyeXt2PSEwLG09aChtLGUpfWZpbmFsbHl7dj0hMX1mb3IodmFyIHQ9Zz15LG49MDtuPHQubGVuZ3RoO24rKyl7KDAsdFtuXSkoKX1yZXR1cm4gZX1mdW5jdGlvbiBwKGUpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiIpO2g9ZSxsKHt0eXBlOnMuSU5JVH0pfWZ1bmN0aW9uIGYoKXt2YXIgZSx0PWM7cmV0dXJuIGU9e3N1YnNjcmliZTpmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7ZS5uZXh0JiZlLm5leHQodSgpKX1pZigib2JqZWN0IiE9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuIik7cmV0dXJuIG4oKSx7dW5zdWJzY3JpYmU6dChuKX19fSxlW2EuYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZX12YXIgZDtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQmJiJ1bmRlZmluZWQiPT09dHlwZW9mIG4mJihuPXQsdD12b2lkIDApLCJ1bmRlZmluZWQiIT09dHlwZW9mIG4pe2lmKCJmdW5jdGlvbiIhPT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRoZSBlbmhhbmNlciB0byBiZSBhIGZ1bmN0aW9uLiIpO3JldHVybiBuKHIpKGUsdCl9aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGhlIHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4iKTt2YXIgaD1lLG09dCxnPVtdLHk9Zyx2PSExO3JldHVybiBsKHt0eXBlOnMuSU5JVH0pLGQ9e2Rpc3BhdGNoOmwsc3Vic2NyaWJlOmMsZ2V0U3RhdGU6dSxyZXBsYWNlUmVkdWNlcjpwfSxkW2EuYV09ZixkfW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksdC5iPXI7dmFyIGk9bigxNTgpLG89bigzNDMpLGE9bi5uKG8pLHM9e0lOSVQ6IkBAcmVkdXgvSU5JVCJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIU9iamVjdChhLmEpKGUpfHxPYmplY3QoaS5hKShlKSE9cylyZXR1cm4hMTt2YXIgdD1PYmplY3Qoby5hKShlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1wLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmwuY2FsbChuKT09Zn12YXIgaT1uKDMzNSksbz1uKDM0MCksYT1uKDM0Mikscz0iW29iamVjdCBPYmplY3RdIix1PUZ1bmN0aW9uLnByb3RvdHlwZSxjPU9iamVjdC5wcm90b3R5cGUsbD11LnRvU3RyaW5nLHA9Yy5oYXNPd25Qcm9wZXJ0eSxmPWwuY2FsbChPYmplY3QpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzM2KSxpPXIuYS5TeW1ib2w7dC5hPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIDA9PT10Lmxlbmd0aD9mdW5jdGlvbihlKXtyZXR1cm4gZX06MT09PXQubGVuZ3RoP3RbMF06dC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KX10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXtyZXR1cm4gaX12YXIgaT1lKHQsbik7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM9ITEscn19ZnVuY3Rpb24gaShlKXtyZXR1cm4gbnVsbCE9PWUuZGVwZW5kc09uT3duUHJvcHMmJnZvaWQgMCE9PWUuZGVwZW5kc09uT3duUHJvcHM/Qm9vbGVhbihlLmRlcGVuZHNPbk93blByb3BzKToxIT09ZS5sZW5ndGh9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPShuLmRpc3BsYXlOYW1lLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM/ci5tYXBUb1Byb3BzKGUsdCk6ci5tYXBUb1Byb3BzKGUpfSk7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM9ITAsci5tYXBUb1Byb3BzPWZ1bmN0aW9uKHQsbil7ci5tYXBUb1Byb3BzPWUsci5kZXBlbmRzT25Pd25Qcm9wcz1pKGUpO3ZhciBvPXIodCxuKTtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIG8mJihyLm1hcFRvUHJvcHM9byxyLmRlcGVuZHNPbk93blByb3BzPWkobyksbz1yKHQsbikpLG99LHJ9fXQuYT1yLHQuYj1vO24oMTYzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDQxKSxuKDEwMSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmU7dC5hPW59KS5jYWxsKHQsbigxMSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dHJ5e28oKSxlKCl9ZmluYWxseXthKCl9fWZ1bmN0aW9uIGkoZSl7dS5wdXNoKGUpLGN8fChvKCkscygpKX1mdW5jdGlvbiBvKCl7YysrfWZ1bmN0aW9uIGEoKXtjLS19ZnVuY3Rpb24gcygpe2EoKTtmb3IodmFyIGU9dm9pZCAwOyFjJiZ2b2lkIDAhPT0oZT11LnNoaWZ0KCkpOylyKGUpfXQuYT1pLHQuYz1vLHQuYj1zO3ZhciB1PVtdLGM9MH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjI/bi0yOjApLGE9MjthPG47YSsrKXJbYS0yXT1hcmd1bWVudHNbYV07dmFyIHU9dm9pZCAwO2kucS5pdGVyYXRvcihlKT8odT1lLGU9dCk6KE9iamVjdChpLmgpKHQsaS5xLmZ1bmMscyksdT10LmFwcGx5KHZvaWQgMCxyKSxPYmplY3QoaS5oKSh1LGkucS5pdGVyYXRvcixzKSk7dmFyIGM9ZSxsPWMuc3Vic2NyaWJlLHA9Yy5kaXNwYXRjaCxmPWMuZ2V0U3RhdGUsZD1jLmNvbnRleHQsaD1jLnNhZ2FNb25pdG9yLG09Yy5sb2dnZXIsZz1jLm9uRXJyb3IseT1PYmplY3QoaS55KSgpO2gmJihoLmVmZmVjdFRyaWdnZXJlZD1oLmVmZmVjdFRyaWdnZXJlZHx8aS51LGguZWZmZWN0UmVzb2x2ZWQ9aC5lZmZlY3RSZXNvbHZlZHx8aS51LGguZWZmZWN0UmVqZWN0ZWQ9aC5lZmZlY3RSZWplY3RlZHx8aS51LGguZWZmZWN0Q2FuY2VsbGVkPWguZWZmZWN0Q2FuY2VsbGVkfHxpLnUsaC5hY3Rpb25EaXNwYXRjaGVkPWguYWN0aW9uRGlzcGF0Y2hlZHx8aS51LGguZWZmZWN0VHJpZ2dlcmVkKHtlZmZlY3RJZDp5LHJvb3Q6ITAscGFyZW50RWZmZWN0SWQ6MCxlZmZlY3Q6e3Jvb3Q6ITAsc2FnYTp0LGFyZ3M6cn19KSk7dmFyIHY9T2JqZWN0KG8uYikodSxsLE9iamVjdChpLkEpKHApLGYsZCx7c2FnYU1vbml0b3I6aCxsb2dnZXI6bSxvbkVycm9yOmd9LHksdC5uYW1lKTtyZXR1cm4gaCYmaC5lZmZlY3RSZXNvbHZlZCh5LHYpLHZ9dC5hPXI7dmFyIGk9bigyMiksbz1uKDE2OCksYT0icnVuU2FnYShzdG9yZUludGVyZmFjZSwgc2FnYSwgLi4uYXJncykiLHM9YSsiOiBzYWdhIGFyZ3VtZW50IG11c3QgYmUgYSBHZW5lcmF0b3IgZnVuY3Rpb24hIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuIGluIHQpe3ZhciByPXRbbl07ci5jb25maWd1cmFibGU9ci5lbnVtZXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixyKX1yZXR1cm4gZX1mdW5jdGlvbiBpKGUpe3JldHVybigiKiI9PT1lP3Yud2lsZGNhcmQ6dS5xLmFycmF5KGUpP3YuYXJyYXk6dS5xLnN0cmluZ2FibGVGdW5jKGUpP3YuZGVmYXVsdDp1LnEuZnVuYyhlKT92LnByZWRpY2F0ZTp2LmRlZmF1bHQpKGUpfWZ1bmN0aW9uIG8oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7bygpLG4oZSwhMCl9ZnVuY3Rpb24gaShlKXthLnB1c2goZSksZS5jb250PWZ1bmN0aW9uKGksbyl7Y3x8KE9iamVjdCh1LncpKGEsZSksZS5jb250PXUudSxvP3IoaSk6KGU9PT10JiYocz1pKSxhLmxlbmd0aHx8KGM9ITAsbihzKSkpKX19ZnVuY3Rpb24gbygpe2N8fChjPSEwLGEuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNvbnQ9dS51LGUuY2FuY2VsKCl9KSxhPVtdKX12YXIgYT1bXSxzPXZvaWQgMCxjPSExO3JldHVybiBpKHQpLHthZGRUYXNrOmksY2FuY2VsQWxsOm8sYWJvcnQ6cixnZXRUYXNrczpmdW5jdGlvbigpe3JldHVybiBhfSx0YXNrTmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pfX19ZnVuY3Rpb24gYShlKXt2YXIgdD1lLmNvbnRleHQsbj1lLmZuLHI9ZS5hcmdzO2lmKHUucS5pdGVyYXRvcihuKSlyZXR1cm4gbjt2YXIgaT12b2lkIDAsbz12b2lkIDA7dHJ5e2k9bi5hcHBseSh0LHIpfWNhdGNoKGUpe289ZX1yZXR1cm4gdS5xLml0ZXJhdG9yKGkpP2k6bz9PYmplY3QodS50KShmdW5jdGlvbigpe3Rocm93IG99KTpPYmplY3QodS50KShmdW5jdGlvbigpe3ZhciBlPXZvaWQgMCx0PXtkb25lOiExLHZhbHVlOml9LG49ZnVuY3Rpb24oZSl7cmV0dXJue2RvbmU6ITAsdmFsdWU6ZX19O3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZT9uKHIpOihlPSEwLHQpfX0oKSl9ZnVuY3Rpb24gcyhlKXtmdW5jdGlvbiB0KCl7dGUuaXNSdW5uaW5nJiYhdGUuaXNDYW5jZWxsZWQmJih0ZS5pc0NhbmNlbGxlZD0hMCxoKHkpKX1mdW5jdGlvbiBuKCl7ZS5faXNSdW5uaW5nJiYhZS5faXNDYW5jZWxsZWQmJihlLl9pc0NhbmNlbGxlZD0hMCxuZS5jYW5jZWxBbGwoKSx2KHkpKX1mdW5jdGlvbiBoKHQsbil7aWYoIXRlLmlzUnVubmluZyl0aHJvdyBuZXcgRXJyb3IoIlRyeWluZyB0byByZXN1bWUgYW4gYWxyZWFkeSBmaW5pc2hlZCBnZW5lcmF0b3IiKTt0cnl7dmFyIHI9dm9pZCAwO24/cj1lLnRocm93KHQpOnQ9PT15Pyh0ZS5pc0NhbmNlbGxlZD0hMCxoLmNhbmNlbCgpLHI9dS5xLmZ1bmMoZS5yZXR1cm4pP2UucmV0dXJuKHkpOntkb25lOiEwLHZhbHVlOnl9KTpyPXQ9PT1nP3UucS5mdW5jKGUucmV0dXJuKT9lLnJldHVybigpOntkb25lOiEwfTplLm5leHQodCksci5kb25lPyh0ZS5pc01haW5SdW5uaW5nPSExLHRlLmNvbnQmJnRlLmNvbnQoci52YWx1ZSkpOngoci52YWx1ZSxHLCIiLGgpfWNhdGNoKGUpe3RlLmlzQ2FuY2VsbGVkJiZZKGUpLHRlLmlzTWFpblJ1bm5pbmc9ITEsdGUuY29udChlLCEwKX19ZnVuY3Rpb24gdih0LG4pe2UuX2lzUnVubmluZz0hMSxYLmNsb3NlKCksbj8odCBpbnN0YW5jZW9mIEVycm9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2FnYVN0YWNrIix7dmFsdWU6ImF0ICIrVisiIFxuICIrKHQuc2FnYVN0YWNrfHx0LnN0YWNrKSxjb25maWd1cmFibGU6ITB9KSxlZS5jb250fHwodCBpbnN0YW5jZW9mIEVycm9yJiZLP0sodCk6WSh0KSksZS5fZXJyb3I9dCxlLl9pc0Fib3J0ZWQ9ITAsZS5fZGVmZXJyZWRFbmQmJmUuX2RlZmVycmVkRW5kLnJlamVjdCh0KSk6KGUuX3Jlc3VsdD10LGUuX2RlZmVycmVkRW5kJiZlLl9kZWZlcnJlZEVuZC5yZXNvbHZlKHQpKSxlZS5jb250JiZlZS5jb250KHQsbiksZWUuam9pbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNiKHQsbil9KSxlZS5qb2luZXJzPW51bGx9ZnVuY3Rpb24geChlLHQpe2Z1bmN0aW9uIG4oZSx0KXthfHwoYT0hMCxpLmNhbmNlbD11LnUsVyYmKHQ/Vy5lZmZlY3RSZWplY3RlZChvLGUpOlcuZWZmZWN0UmVzb2x2ZWQobyxlKSksaShlLHQpKX12YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiIsaT1hcmd1bWVudHNbM10sbz1PYmplY3QodS55KSgpO1cmJlcuZWZmZWN0VHJpZ2dlcmVkKHtlZmZlY3RJZDpvLHBhcmVudEVmZmVjdElkOnQsbGFiZWw6cixlZmZlY3Q6ZX0pO3ZhciBhPXZvaWQgMDtuLmNhbmNlbD11LnUsaS5jYW5jZWw9ZnVuY3Rpb24oKXtpZighYSl7YT0hMDt0cnl7bi5jYW5jZWwoKX1jYXRjaChlKXtZKGUpfW4uY2FuY2VsPXUudSxXJiZXLmVmZmVjdENhbmNlbGxlZChvKX19O3ZhciBzPXZvaWQgMDtyZXR1cm4gdS5xLnByb21pc2UoZSk/QyhlLG4pOnUucS5oZWxwZXIoZSk/QShiKGUpLG8sbik6dS5xLml0ZXJhdG9yKGUpP0UoZSxvLFYsbik6dS5xLmFycmF5KGUpP0goZSxvLG4pOihzPWwuZC50YWtlKGUpKT9EKHMsbik6KHM9bC5kLnB1dChlKSk/dyhzLG4pOihzPWwuZC5hbGwoZSkpP08ocyxvLG4pOihzPWwuZC5yYWNlKGUpKT9GKHMsbyxuKToocz1sLmQuY2FsbChlKSk/UyhzLG8sbik6KHM9bC5kLmNwcyhlKSk/ayhzLG4pOihzPWwuZC5mb3JrKGUpKT9BKHMsbyxuKToocz1sLmQuam9pbihlKSk/XyhzLG4pOihzPWwuZC5jYW5jZWwoZSkpP1QocyxuKToocz1sLmQuc2VsZWN0KGUpKT9OKHMsbik6KHM9bC5kLmFjdGlvbkNoYW5uZWwoZSkpP0kocyxuKToocz1sLmQuZmx1c2goZSkpP1AocyxuKToocz1sLmQuY2FuY2VsbGVkKGUpKT9MKHMsbik6KHM9bC5kLmdldENvbnRleHQoZSkpP00ocyxuKToocz1sLmQuc2V0Q29udGV4dChlKSk/aihzLG4pOm4oZSl9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPWVbdS5hXTt1LnEuZnVuYyhuKT90LmNhbmNlbD1uOnUucS5mdW5jKGUuYWJvcnQpJiYodC5jYW5jZWw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hYm9ydCgpfSksZS50aGVuKHQsZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwhMCl9KX1mdW5jdGlvbiBFKGUsdCxuLHIpe3MoZSxSLEIsJCxaLHosdCxuLHIpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgbj1lLmNoYW5uZWwscj1lLnBhdHRlcm4sbz1lLm1heWJlO249bnx8WDt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yP3QoZSwhMCk6dChPYmplY3QocC5lKShlKSYmIW8/ZzplKX07dHJ5e24udGFrZShhLGkocikpfWNhdGNoKGUpe3JldHVybiB0KGUsITApfXQuY2FuY2VsPWEuY2FuY2VsfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbj1lLmNoYW5uZWwscj1lLmFjdGlvbixpPWUucmVzb2x2ZTtPYmplY3QoYy5hKShmdW5jdGlvbigpe3ZhciBlPXZvaWQgMDt0cnl7ZT0obj9uLnB1dDpCKShyKX1jYXRjaChlKXtpZihufHxpKXJldHVybiB0KGUsITApO1koZSl9aWYoIWl8fCF1LnEucHJvbWlzZShlKSlyZXR1cm4gdChlKTtDKGUsdCl9KX1mdW5jdGlvbiBTKGUsdCxuKXt2YXIgcj1lLmNvbnRleHQsaT1lLmZuLG89ZS5hcmdzLGE9dm9pZCAwO3RyeXthPWkuYXBwbHkocixvKX1jYXRjaChlKXtyZXR1cm4gbihlLCEwKX1yZXR1cm4gdS5xLnByb21pc2UoYSk/QyhhLG4pOnUucS5pdGVyYXRvcihhKT9FKGEsdCxpLm5hbWUsbik6bihhKX1mdW5jdGlvbiBrKGUsdCl7dmFyIG49ZS5jb250ZXh0LHI9ZS5mbixpPWUuYXJnczt0cnl7dmFyIG89ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdS5xLnVuZGVmKGUpP3Qobik6dChlLCEwKX07ci5hcHBseShuLGkuY29uY2F0KG8pKSxvLmNhbmNlbCYmKHQuY2FuY2VsPWZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FuY2VsKCl9KX1jYXRjaChlKXtyZXR1cm4gdChlLCEwKX19ZnVuY3Rpb24gQShlLHQsbil7dmFyIHI9ZS5jb250ZXh0LGk9ZS5mbixvPWUuYXJncyxsPWUuZGV0YWNoZWQscD1hKHtjb250ZXh0OnIsZm46aSxhcmdzOm99KTt0cnl7T2JqZWN0KGMuYykoKTt2YXIgZj1zKHAsUixCLCQsWix6LHQsaS5uYW1lLGw/bnVsbDp1LnUpO2w/bihmKTpwLl9pc1J1bm5pbmc/KG5lLmFkZFRhc2soZiksbihmKSk6cC5fZXJyb3I/bmUuYWJvcnQocC5fZXJyb3IpOm4oZil9ZmluYWxseXtPYmplY3QoYy5iKSgpfX1mdW5jdGlvbiBfKGUsdCl7aWYoZS5pc1J1bm5pbmcoKSl7dmFyIG49e3Rhc2s6ZWUsY2I6dH07dC5jYW5jZWw9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHUudykoZS5qb2luZXJzLG4pfSxlLmpvaW5lcnMucHVzaChuKX1lbHNlIGUuaXNBYm9ydGVkKCk/dChlLmVycm9yKCksITApOnQoZS5yZXN1bHQoKSl9ZnVuY3Rpb24gVChlLHQpe2U9PT11LmQmJihlPWVlKSxlLmlzUnVubmluZygpJiZlLmNhbmNlbCgpLHQoKX1mdW5jdGlvbiBPKGUsdCxuKXtmdW5jdGlvbiByKCl7bz09PWkubGVuZ3RoJiYoYT0hMCxuKHUucS5hcnJheShlKT91LmYuZnJvbShkKHt9LHMse2xlbmd0aDppLmxlbmd0aH0pKTpzKSl9dmFyIGk9T2JqZWN0LmtleXMoZSk7aWYoIWkubGVuZ3RoKXJldHVybiBuKHUucS5hcnJheShlKT9bXTp7fSk7dmFyIG89MCxhPXZvaWQgMCxzPXt9LGM9e307aS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKHQsaSl7YXx8KGl8fE9iamVjdChwLmUpKHQpfHx0PT09Z3x8dD09PXk/KG4uY2FuY2VsKCksbih0LGkpKTooc1tlXT10LG8rKyxyKCkpKX07dC5jYW5jZWw9dS51LGNbZV09dH0pLG4uY2FuY2VsPWZ1bmN0aW9uKCl7YXx8KGE9ITAsaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBjW2VdLmNhbmNlbCgpfSkpfSxpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHgoZVtuXSx0LG4sY1tuXSl9KX1mdW5jdGlvbiBGKGUsdCxuKXt2YXIgcj12b2lkIDAsaT1PYmplY3Qua2V5cyhlKSxvPXt9O2kuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT1mdW5jdGlvbihvLGEpe2lmKCFyKWlmKGEpbi5jYW5jZWwoKSxuKG8sITApO2Vsc2UgaWYoIU9iamVjdChwLmUpKG8pJiZvIT09ZyYmbyE9PXkpe3ZhciBzO24uY2FuY2VsKCkscj0hMDt2YXIgYz0ocz17fSxzW3RdPW8scyk7bih1LnEuYXJyYXkoZSk/W10uc2xpY2UuY2FsbChkKHt9LGMse2xlbmd0aDppLmxlbmd0aH0pKTpjKX19O2EuY2FuY2VsPXUudSxvW3RdPWF9KSxuLmNhbmNlbD1mdW5jdGlvbigpe3J8fChyPSEwLGkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gb1tlXS5jYW5jZWwoKX0pKX0saS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3J8fHgoZVtuXSx0LG4sb1tuXSl9KX1mdW5jdGlvbiBOKGUsdCl7dmFyIG49ZS5zZWxlY3RvcixyPWUuYXJnczt0cnl7dmFyIGk9bi5hcHBseSh2b2lkIDAsWyQoKV0uY29uY2F0KHIpKTt0KGkpfWNhdGNoKGUpe3QoZSwhMCl9fWZ1bmN0aW9uIEkoZSx0KXt2YXIgbj1lLnBhdHRlcm4scj1lLmJ1ZmZlcixvPWkobik7by5wYXR0ZXJuPW4sdChPYmplY3QocC5kKShSLHJ8fGYuYS5maXhlZCgpLG8pKX1mdW5jdGlvbiBMKGUsdCl7dCghIXRlLmlzQ2FuY2VsbGVkKX1mdW5jdGlvbiBQKGUsdCl7ZS5mbHVzaCh0KX1mdW5jdGlvbiBNKGUsdCl7dChaW2VdKX1mdW5jdGlvbiBqKGUsdCl7dS52LmFzc2lnbihaLGUpLHQoKX12YXIgUj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZnVuY3Rpb24oKXtyZXR1cm4gdS51fSxCPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp1LnUsJD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106dS51LFU9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOnt9LHo9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOnt9LEc9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOjAsVj1hcmd1bWVudHMubGVuZ3RoPjcmJnZvaWQgMCE9PWFyZ3VtZW50c1s3XT9hcmd1bWVudHNbN106ImFub255bW91cyIscT1hcmd1bWVudHNbOF07T2JqZWN0KHUuaCkoZSx1LnEuaXRlcmF0b3IsbSk7dmFyIEg9T2JqZWN0KHUubikoTyxPYmplY3QodS56KSgiWy4uLmVmZmVjdHNdIiwiYWxsKFsuLi5lZmZlY3RzXSkiKSksVz16LnNhZ2FNb25pdG9yLFE9ei5sb2dnZXIsSz16Lm9uRXJyb3IsSj1RfHx1LnMsWT1mdW5jdGlvbihlKXt2YXIgdD1lLnNhZ2FTdGFjazshdCYmZS5zdGFjayYmKHQ9LTEhPT1lLnN0YWNrLnNwbGl0KCJcbiIpWzBdLmluZGV4T2YoZS5tZXNzYWdlKT9lLnN0YWNrOiJFcnJvcjogIitlLm1lc3NhZ2UrIlxuIitlLnN0YWNrKSxKKCJlcnJvciIsInVuY2F1Z2h0IGF0ICIrVix0fHxlLm1lc3NhZ2V8fGUpfSxYPU9iamVjdChwLmYpKFIpLFo9T2JqZWN0LmNyZWF0ZShVKTtoLmNhbmNlbD11LnU7dmFyIGVlPWZ1bmN0aW9uKGUsdCxpLG8pe3ZhciBhLHMsYztyZXR1cm4gaS5fZGVmZXJyZWRFbmQ9bnVsbCxzPXt9LHNbdS5lXT0hMCxzLmlkPWUscy5uYW1lPXQsYT0iZG9uZSIsYz17fSxjW2FdPWNbYV18fHt9LGNbYV0uZ2V0PWZ1bmN0aW9uKCl7aWYoaS5fZGVmZXJyZWRFbmQpcmV0dXJuIGkuX2RlZmVycmVkRW5kLnByb21pc2U7dmFyIGU9T2JqZWN0KHUubCkoKTtyZXR1cm4gaS5fZGVmZXJyZWRFbmQ9ZSxpLl9pc1J1bm5pbmd8fChpLl9lcnJvcj9lLnJlamVjdChpLl9lcnJvcik6ZS5yZXNvbHZlKGkuX3Jlc3VsdCkpLGUucHJvbWlzZX0scy5jb250PW8scy5qb2luZXJzPVtdLHMuY2FuY2VsPW4scy5pc1J1bm5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaS5faXNSdW5uaW5nfSxzLmlzQ2FuY2VsbGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGkuX2lzQ2FuY2VsbGVkfSxzLmlzQWJvcnRlZD1mdW5jdGlvbigpe3JldHVybiBpLl9pc0Fib3J0ZWR9LHMucmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIGkuX3Jlc3VsdH0scy5lcnJvcj1mdW5jdGlvbigpe3JldHVybiBpLl9lcnJvcn0scy5zZXRDb250ZXh0PWZ1bmN0aW9uKGUpe09iamVjdCh1LmgpKGUsdS5xLm9iamVjdCxPYmplY3QodS5rKSgidGFzayIsZSkpLHUudi5hc3NpZ24oWixlKX0scihzLGMpLHN9KEcsVixlLHEpLHRlPXtuYW1lOlYsY2FuY2VsOnQsaXNSdW5uaW5nOiEwfSxuZT1vKFYsdGUsdik7cmV0dXJuIHEmJihxLmNhbmNlbD1uKSxlLl9pc1J1bm5pbmc9ITAsaCgpLGVlfW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBnfSksdC5iPXM7dmFyIHU9bigyMiksYz1uKDE2NiksbD1uKDM0KSxwPW4oNDIpLGY9big3NiksZD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxtPSJwcm9jIGZpcnN0IGFyZ3VtZW50IChTYWdhIGZ1bmN0aW9uIHJlc3VsdCkgbXVzdCBiZSBhbiBpdGVyYXRvciIsZz17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQEByZWR1eC1zYWdhL0NIQU5ORUxfRU5EIn19LHk9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkBAcmVkdXgtc2FnYS9UQVNLX0NBTkNFTCJ9fSx2PXt3aWxkY2FyZDpmdW5jdGlvbigpe3JldHVybiB1LnJ9LGRlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpoKGUpKT9mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09ZX06ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PVN0cmluZyhlKX19LGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBpKGUpKHQpfSl9fSxwcmVkaWNhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX19LGI9ZnVuY3Rpb24oZSl7cmV0dXJue2ZuOmV9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgcj1uKDM1OCksaT1uKDM1OSksbz1uKDM2MCksYT1uKDIyKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4iaW1wb3J0IHsgIitlKyIgfSBmcm9tICdyZWR1eC1zYWdhJyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGltcG9ydCB7ICIrZSsiIH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJy5cblRoZSBsYXR0ZXIgd2lsbCBub3Qgd29yayB3aXRoIHlpZWxkKiwgYXMgaGVscGVyIGVmZmVjdHMgYXJlIHdyYXBwZWQgYXV0b21hdGljYWxseSBmb3IgeW91IGluIGZvcmsgZWZmZWN0LlxuVGhlcmVmb3JlIHlpZWxkICIrZSsiIHdpbGwgcmV0dXJuIHRhc2sgZGVzY3JpcHRvciB0byB5b3VyIHNhZ2EgYW5kIGV4ZWN1dGUgbmV4dCBsaW5lcyBvZiBjb2RlLiJ9LHU9T2JqZWN0KGEubikoci5hLHMoInRha2VFdmVyeSIpKSxjPU9iamVjdChhLm4pKGkuYSxzKCJ0YWtlTGF0ZXN0IikpLGw9T2JqZWN0KGEubikoby5hLHMoInRocm90dGxlIikpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigzNjQpLGk9bi5uKHIpLG89aS5hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PVsicXVlcnkiLCJvcGVyYXRpb25OYW1lIiwidmFyaWFibGVzIiwiZXh0ZW5zaW9ucyIsImNvbnRleHQiXSxuPTAscj1PYmplY3Qua2V5cyhlKTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZih0LmluZGV4T2YoaSk8MCl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgYXJndW1lbnQ6ICIraSl9cmV0dXJuIGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5yZXF1ZXN0Lmxlbmd0aDw9MX1mdW5jdGlvbiBvKGUpe3ZhciB0PSExO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpe2Uuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKGUpe3Q/Y29uc29sZS53YXJuKCJQcm9taXNlIFdyYXBwZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSByZXN1bHRzIGZyb20gT2JzZXJ2YWJsZSIpOih0PSEwLG4oZSkpfSxlcnJvcjpyfSl9KX1mdW5jdGlvbiBhKGUpe3JldHVybiBuZXcgZi5hKGZ1bmN0aW9uKHQpe2UudGhlbihmdW5jdGlvbihlKXt0Lm5leHQoZSksdC5jb21wbGV0ZSgpfSkuY2F0Y2godC5lcnJvci5iaW5kKHQpKX0pfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG5ldyBmLmEoZnVuY3Rpb24odCl7dC5lcnJvcihlKX0pfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9e3ZhcmlhYmxlczplLnZhcmlhYmxlc3x8e30sZXh0ZW5zaW9uczplLmV4dGVuc2lvbnN8fHt9LG9wZXJhdGlvbk5hbWU6ZS5vcGVyYXRpb25OYW1lLHF1ZXJ5OmUucXVlcnl9O3JldHVybiB0Lm9wZXJhdGlvbk5hbWV8fCh0Lm9wZXJhdGlvbk5hbWU9InN0cmluZyIhPT10eXBlb2YgdC5xdWVyeT9PYmplY3QocC5hKSh0LnF1ZXJ5KToiIiksdH1mdW5jdGlvbiBjKGUsdCl7dmFyIG49bSh7fSxlKSxyPWZ1bmN0aW9uKGUpe249ImZ1bmN0aW9uIj09PXR5cGVvZiBlP20oe30sbixlKG4pKTptKHt9LG4sZSl9LGk9ZnVuY3Rpb24oKXtyZXR1cm4gbSh7fSxuKX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZXRDb250ZXh0Iix7ZW51bWVyYWJsZTohMSx2YWx1ZTpyfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldENvbnRleHQiLHtlbnVtZXJhYmxlOiExLHZhbHVlOml9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidG9LZXkiLHtlbnVtZXJhYmxlOiExLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGwodCl9fSksdH1mdW5jdGlvbiBsKGUpe3JldHVybiBPYmplY3QoZC5wcmludCkoZS5xdWVyeSkrInwiK0pTT04uc3RyaW5naWZ5KGUudmFyaWFibGVzKSsifCIrZS5vcGVyYXRpb25OYW1lfXQuaT1yLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBnfSksdC5lPWksdC5nPW8sbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSx0LmQ9YSx0LmM9cyx0Lmg9dSx0LmI9Yzt2YXIgcD1uKDM2NiksZj1uKDEwNiksZD1uKDE5KSxoPShuLm4oZCksdGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLG09dGhpcyYmdGhpcy5fX2Fzc2lnbnx8T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pfXJldHVybiBlfSxnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gci5saW5rPW4scn1yZXR1cm4gaCh0LGUpLHR9KEVycm9yKSx5PW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigiRG9jdW1lbnQiIT09ZS5raW5kKXRocm93IG5ldyBFcnJvcignRXhwZWN0aW5nIGEgcGFyc2VkIEdyYXBoUUwgZG9jdW1lbnQuIFBlcmhhcHMgeW91IG5lZWQgdG8gd3JhcCB0aGUgcXVlcnkgc3RyaW5nIGluIGEgImdxbCIgdGFnPyBodHRwOi8vZG9jcy5hcG9sbG9zdGFjay5jb20vYXBvbGxvLWNsaWVudC9jb3JlLmh0bWwjZ3FsJyk7dmFyIHQ9ZS5kZWZpbml0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIkZyYWdtZW50RGVmaW5pdGlvbiIhPT1lLmtpbmR9KS5tYXAoZnVuY3Rpb24oZSl7aWYoIk9wZXJhdGlvbkRlZmluaXRpb24iIT09ZS5raW5kKXRocm93IG5ldyBFcnJvcignU2NoZW1hIHR5cGUgZGVmaW5pdGlvbnMgbm90IGFsbG93ZWQgaW4gcXVlcmllcy4gRm91bmQ6ICInK2Uua2luZCsnIicpO3JldHVybiBlfSk7aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIkFtYmlndW91cyBHcmFwaFFMIGRvY3VtZW50OiBjb250YWlucyAiK3QubGVuZ3RoKyIgb3BlcmF0aW9ucyIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHIoZSksZS5kZWZpbml0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIk9wZXJhdGlvbkRlZmluaXRpb24iPT09ZS5raW5kfSlbMF19ZnVuY3Rpb24gbyhlKXt2YXIgdD1pKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiR3JhcGhRTCBkb2N1bWVudCBpcyBtaXNzaW5nIGFuIG9wZXJhdGlvbiIpO3JldHVybiB0fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUuZGVmaW5pdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJPcGVyYXRpb25EZWZpbml0aW9uIj09PWUua2luZCYmZS5uYW1lfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudmFsdWV9KVswXXx8bnVsbH1mdW5jdGlvbiBzKGUpe3JldHVybiBlLmRlZmluaXRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iRnJhZ21lbnREZWZpbml0aW9uIj09PWUua2luZH0pfWZ1bmN0aW9uIHUoZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlLm5hbWUudmFsdWVdPWV9KSx0fXQuYT1yLHQuZD1vLHQuZT1hLHQuYz1zLHQuYj11O24oMTczKSxuKDEwNyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT09dHlwZW9mIHQmJm51bGwhPT10JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pfSksZX10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiByKGUpfSk7aWYobnVsbCE9PWUmJiJvYmplY3QiPT09dHlwZW9mIGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPXIoZVtuXSkpO3JldHVybiB0fXJldHVybiBlfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIWUpcmV0dXJue307dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe3JldHVybnt9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wYXJzZUhlYWRlcnM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pfXJldHVybiBlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9InVuZGVmaW5lZCIhPT10eXBlb2YgZT9lOiJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sbz1pLldlYlNvY2tldHx8aS5Nb3pXZWJTb2NrZXQsYT1uKDM3NSkscz1uKDM3NiksdT1uKDM3NyksYz1uKDM3OCksbD1uKDE5KSxwPW4oMTc3KSxmPW4oMzc5KSxkPW4oMzgxKSxoPW4oMzgyKSxtPW4oMzgzKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dmFyIHI9dHx8e30saT1yLmNvbm5lY3Rpb25DYWxsYmFjayx1PXZvaWQgMD09PWk/dm9pZCAwOmksYz1yLmNvbm5lY3Rpb25QYXJhbXMsbD12b2lkIDA9PT1jP3t9OmMscD1yLnRpbWVvdXQsZj12b2lkIDA9PT1wP2guV1NfVElNRU9VVDpwLGQ9ci5yZWNvbm5lY3QsbT12b2lkIDAhPT1kJiZkLGc9ci5yZWNvbm5lY3Rpb25BdHRlbXB0cyx5PXZvaWQgMD09PWc/MS8wOmcsdj1yLmxhenksYj12b2lkIDAhPT12JiZ2LHg9ci5pbmFjdGl2aXR5VGltZW91dCxDPXZvaWQgMD09PXg/MDp4O2lmKHRoaXMud3NJbXBsPW58fG8sIXRoaXMud3NJbXBsKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViU29ja2V0ISIpO3RoaXMuY29ubmVjdGlvblBhcmFtcz1sLHRoaXMuY29ubmVjdGlvbkNhbGxiYWNrPXUsdGhpcy51cmw9ZSx0aGlzLm9wZXJhdGlvbnM9e30sdGhpcy5uZXh0T3BlcmF0aW9uSWQ9MCx0aGlzLndzVGltZW91dD1mLHRoaXMudW5zZW50TWVzc2FnZXNRdWV1ZT1bXSx0aGlzLnJlY29ubmVjdD1tLHRoaXMucmVjb25uZWN0aW5nPSExLHRoaXMucmVjb25uZWN0aW9uQXR0ZW1wdHM9eSx0aGlzLmxhenk9ISFiLHRoaXMuaW5hY3Rpdml0eVRpbWVvdXQ9Qyx0aGlzLmNsb3NlZEJ5VXNlcj0hMSx0aGlzLmJhY2tvZmY9bmV3IGEoe2ppdHRlcjouNX0pLHRoaXMuZXZlbnRFbWl0dGVyPW5ldyBzLkV2ZW50RW1pdHRlcix0aGlzLm1pZGRsZXdhcmVzPVtdLHRoaXMuY2xpZW50PW51bGwsdGhpcy5tYXhDb25uZWN0VGltZUdlbmVyYXRvcj10aGlzLmNyZWF0ZU1heENvbm5lY3RUaW1lR2VuZXJhdG9yKCksdGhpcy5sYXp5fHx0aGlzLmNvbm5lY3QoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzdGF0dXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuY2xpZW50P3RoaXMud3NJbXBsLkNMT1NFRDp0aGlzLmNsaWVudC5yZWFkeVN0YXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09ZSYmKGU9ITApLHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLmNsZWFySW5hY3Rpdml0eVRpbWVvdXQoKSxudWxsIT09dGhpcy5jbGllbnQmJih0aGlzLmNsb3NlZEJ5VXNlcj10LGUmJih0aGlzLmNsZWFyQ2hlY2tDb25uZWN0aW9uSW50ZXJ2YWwoKSx0aGlzLmNsZWFyTWF4Q29ubmVjdFRpbWVvdXQoKSx0aGlzLmNsZWFyVHJ5UmVjb25uZWN0VGltZW91dCgpLHRoaXMudW5zdWJzY3JpYmVBbGwoKSx0aGlzLnNlbmRNZXNzYWdlKHZvaWQgMCxtLmRlZmF1bHQuR1FMX0NPTk5FQ1RJT05fVEVSTUlOQVRFLG51bGwpKSx0aGlzLmNsaWVudC5jbG9zZSgpLHRoaXMuY2xpZW50PW51bGwsdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCgiZGlzY29ubmVjdGVkIiksZXx8dGhpcy50cnlSZWNvbm5lY3QoKSl9LGUucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLmdldE9ic2VydmVyLmJpbmQodGhpcykscj10aGlzLmV4ZWN1dGVPcGVyYXRpb24uYmluZCh0aGlzKSxpPXRoaXMudW5zdWJzY3JpYmUuYmluZCh0aGlzKTtyZXR1cm4gdGhpcy5jbGVhckluYWN0aXZpdHlUaW1lb3V0KCksbz17fSxvW2YuZGVmYXVsdF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby5zdWJzY3JpYmU9ZnVuY3Rpb24obyxhLHMpe3ZhciB1PW4obyxhLHMpO3JldHVybiB0PXIoZSxmdW5jdGlvbihlLHQpe251bGw9PT1lJiZudWxsPT09dD91LmNvbXBsZXRlJiZ1LmNvbXBsZXRlKCk6ZT91LmVycm9yJiZ1LmVycm9yKGVbMF0pOnUubmV4dCYmdS5uZXh0KHQpfSkse3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7dCYmKGkodCksdD1udWxsKX19fSxvO3ZhciBvfSxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5ldmVudEVtaXR0ZXIub24oZSx0LG4pO3JldHVybiBmdW5jdGlvbigpe3Iub2ZmKGUsdCxuKX19LGUucHJvdG90eXBlLm9uQ29ubmVjdGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub24oImNvbm5lY3RlZCIsZSx0KX0sZS5wcm90b3R5cGUub25Db25uZWN0aW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub24oImNvbm5lY3RpbmciLGUsdCl9LGUucHJvdG90eXBlLm9uRGlzY29ubmVjdGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub24oImRpc2Nvbm5lY3RlZCIsZSx0KX0sZS5wcm90b3R5cGUub25SZWNvbm5lY3RlZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9uKCJyZWNvbm5lY3RlZCIsZSx0KX0sZS5wcm90b3R5cGUub25SZWNvbm5lY3Rpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vbigicmVjb25uZWN0aW5nIixlLHQpfSxlLnByb3RvdHlwZS5vbkVycm9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub24oImVycm9yIixlLHQpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZUFsbD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModGhpcy5vcGVyYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UudW5zdWJzY3JpYmUodCl9KX0sZS5wcm90b3R5cGUuYXBwbHlNaWRkbGV3YXJlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpeyFmdW5jdGlvbih0LGkpe3ZhciBvPWZ1bmN0aW9uKGEpe2lmKGEpcihhKTtlbHNlIGlmKHQubGVuZ3RoPjApe3ZhciBzPXQuc2hpZnQoKTtzJiZzLmFwcGx5TWlkZGxld2FyZS5hcHBseShpLFtlLG9dKX1lbHNlIG4oZSl9O28oKX0odC5taWRkbGV3YXJlcy5zbGljZSgpLHQpfSl9LGUucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGUuYXBwbHlNaWRkbGV3YXJlKXRocm93IG5ldyBFcnJvcigiTWlkZGxld2FyZSBtdXN0IGltcGxlbWVudCB0aGUgYXBwbHlNaWRkbGV3YXJlIGZ1bmN0aW9uLiIpO3QubWlkZGxld2FyZXMucHVzaChlKX0pLHRoaXN9LGUucHJvdG90eXBlLmV4ZWN1dGVPcGVyYXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO251bGw9PT10aGlzLmNsaWVudCYmdGhpcy5jb25uZWN0KCk7dmFyIHI9dGhpcy5nZW5lcmF0ZU9wZXJhdGlvbklkKCk7cmV0dXJuIHRoaXMub3BlcmF0aW9uc1tyXT17b3B0aW9uczplLGhhbmRsZXI6dH0sdGhpcy5hcHBseU1pZGRsZXdhcmVzKGUpLnRoZW4oZnVuY3Rpb24oZSl7bi5jaGVja09wZXJhdGlvbk9wdGlvbnMoZSx0KSxuLm9wZXJhdGlvbnNbcl0mJihuLm9wZXJhdGlvbnNbcl09e29wdGlvbnM6ZSxoYW5kbGVyOnR9LG4uc2VuZE1lc3NhZ2UocixtLmRlZmF1bHQuR1FMX1NUQVJULGUpKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe24udW5zdWJzY3JpYmUociksdChuLmZvcm1hdEVycm9ycyhlKSl9KSxyfSxlLnByb3RvdHlwZS5nZXRPYnNlcnZlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBlP3tuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSxlcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4gdCYmdChlKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gbiYmbigpfX06ZX0sZS5wcm90b3R5cGUuY3JlYXRlTWF4Q29ubmVjdFRpbWVHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndzVGltZW91dDtyZXR1cm4gbmV3IGEoe21pbjoxZTMsbWF4OmUsZmFjdG9yOjEuMn0pfSxlLnByb3RvdHlwZS5jbGVhckNoZWNrQ29ubmVjdGlvbkludGVydmFsPWZ1bmN0aW9uKCl7dGhpcy5jaGVja0Nvbm5lY3Rpb25JbnRlcnZhbElkJiYoY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQ29ubmVjdGlvbkludGVydmFsSWQpLHRoaXMuY2hlY2tDb25uZWN0aW9uSW50ZXJ2YWxJZD1udWxsKX0sZS5wcm90b3R5cGUuY2xlYXJNYXhDb25uZWN0VGltZW91dD1mdW5jdGlvbigpe3RoaXMubWF4Q29ubmVjdFRpbWVvdXRJZCYmKGNsZWFyVGltZW91dCh0aGlzLm1heENvbm5lY3RUaW1lb3V0SWQpLHRoaXMubWF4Q29ubmVjdFRpbWVvdXRJZD1udWxsKX0sZS5wcm90b3R5cGUuY2xlYXJUcnlSZWNvbm5lY3RUaW1lb3V0PWZ1bmN0aW9uKCl7dGhpcy50cnlSZWNvbm5lY3RUaW1lb3V0SWQmJihjbGVhclRpbWVvdXQodGhpcy50cnlSZWNvbm5lY3RUaW1lb3V0SWQpLHRoaXMudHJ5UmVjb25uZWN0VGltZW91dElkPW51bGwpfSxlLnByb3RvdHlwZS5jbGVhckluYWN0aXZpdHlUaW1lb3V0PWZ1bmN0aW9uKCl7dGhpcy5pbmFjdGl2aXR5VGltZW91dElkJiYoY2xlYXJUaW1lb3V0KHRoaXMuaW5hY3Rpdml0eVRpbWVvdXRJZCksdGhpcy5pbmFjdGl2aXR5VGltZW91dElkPW51bGwpfSxlLnByb3RvdHlwZS5zZXRJbmFjdGl2aXR5VGltZW91dD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5pbmFjdGl2aXR5VGltZW91dD4wJiYwPT09T2JqZWN0LmtleXModGhpcy5vcGVyYXRpb25zKS5sZW5ndGgmJih0aGlzLmluYWN0aXZpdHlUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpezA9PT1PYmplY3Qua2V5cyhlLm9wZXJhdGlvbnMpLmxlbmd0aCYmZS5jbG9zZSgpfSx0aGlzLmluYWN0aXZpdHlUaW1lb3V0KSl9LGUucHJvdG90eXBlLmNoZWNrT3BlcmF0aW9uT3B0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPWUucXVlcnkscj1lLnZhcmlhYmxlcyxpPWUub3BlcmF0aW9uTmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIk11c3QgcHJvdmlkZSBhIHF1ZXJ5LiIpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiTXVzdCBwcm92aWRlIGFuIGhhbmRsZXIuIik7aWYoIXUobikmJiFwLmdldE9wZXJhdGlvbkFTVChuLGkpfHxpJiYhdShpKXx8ciYmIWMocikpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qgb3B0aW9uIHR5cGVzLiBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgZG9jdW1lbnQsYG9wZXJhdGlvbk5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIGFuZCBgdmFyaWFibGVzYCBtdXN0IGJlIGFuIG9iamVjdC4iKX0sZS5wcm90b3R5cGUuYnVpbGRNZXNzYWdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57aWQ6ZSx0eXBlOnQscGF5bG9hZDpuJiZuLnF1ZXJ5P3Ioe30sbix7cXVlcnk6InN0cmluZyI9PT10eXBlb2Ygbi5xdWVyeT9uLnF1ZXJ5OmwucHJpbnQobi5xdWVyeSl9KTpufX0sZS5wcm90b3R5cGUuZm9ybWF0RXJyb3JzPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6ZSYmZS5lcnJvcnM/dGhpcy5mb3JtYXRFcnJvcnMoZS5lcnJvcnMpOmUmJmUubWVzc2FnZT9bZV06W3tuYW1lOiJGb3JtYXRlZEVycm9yIixtZXNzYWdlOiJVbmtub3duIGVycm9yIixvcmlnaW5hbEVycm9yOmV9XX0sZS5wcm90b3R5cGUuc2VuZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2VuZE1lc3NhZ2VSYXcodGhpcy5idWlsZE1lc3NhZ2UoZSx0LG4pKX0sZS5wcm90b3R5cGUuc2VuZE1lc3NhZ2VSYXc9ZnVuY3Rpb24oZSl7c3dpdGNoKHRoaXMuc3RhdHVzKXtjYXNlIHRoaXMud3NJbXBsLk9QRU46dmFyIHQ9SlNPTi5zdHJpbmdpZnkoZSk7dHJ5e0pTT04ucGFyc2UodCl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJNZXNzYWdlIG11c3QgYmUgSlNPTi1zZXJpYWxpemFibGUuIEdvdDogIitlKX10aGlzLmNsaWVudC5zZW5kKHQpO2JyZWFrO2Nhc2UgdGhpcy53c0ltcGwuQ09OTkVDVElORzp0aGlzLnVuc2VudE1lc3NhZ2VzUXVldWUucHVzaChlKTticmVhaztkZWZhdWx0OmlmKCF0aGlzLnJlY29ubmVjdGluZyl0aHJvdyBuZXcgRXJyb3IoIkEgbWVzc2FnZSB3YXMgbm90IHNlbnQgYmVjYXVzZSBzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCwgaXMgY2xvc2luZyBvciBpcyBhbHJlYWR5IGNsb3NlZC4gTWVzc2FnZSB3YXM6ICIrSlNPTi5zdHJpbmdpZnkoZSkpfX0sZS5wcm90b3R5cGUuZ2VuZXJhdGVPcGVyYXRpb25JZD1mdW5jdGlvbigpe3JldHVybiBTdHJpbmcoKyt0aGlzLm5leHRPcGVyYXRpb25JZCl9LGUucHJvdG90eXBlLnRyeVJlY29ubmVjdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5yZWNvbm5lY3QmJiEodGhpcy5iYWNrb2ZmLmF0dGVtcHRzPj10aGlzLnJlY29ubmVjdGlvbkF0dGVtcHRzKSl7dGhpcy5yZWNvbm5lY3Rpbmd8fChPYmplY3Qua2V5cyh0aGlzLm9wZXJhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS51bnNlbnRNZXNzYWdlc1F1ZXVlLnB1c2goZS5idWlsZE1lc3NhZ2UodCxtLmRlZmF1bHQuR1FMX1NUQVJULGUub3BlcmF0aW9uc1t0XS5vcHRpb25zKSl9KSx0aGlzLnJlY29ubmVjdGluZz0hMCksdGhpcy5jbGVhclRyeVJlY29ubmVjdFRpbWVvdXQoKTt2YXIgdD10aGlzLmJhY2tvZmYuZHVyYXRpb24oKTt0aGlzLnRyeVJlY29ubmVjdFRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5jb25uZWN0KCl9LHQpfX0sZS5wcm90b3R5cGUuZmx1c2hVbnNlbnRNZXNzYWdlc1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnVuc2VudE1lc3NhZ2VzUXVldWUuZm9yRWFjaChmdW5jdGlvbih0KXtlLnNlbmRNZXNzYWdlUmF3KHQpfSksdGhpcy51bnNlbnRNZXNzYWdlc1F1ZXVlPVtdfSxlLnByb3RvdHlwZS5jaGVja0Nvbm5lY3Rpb249ZnVuY3Rpb24oKXtpZih0aGlzLndhc0tlZXBBbGl2ZVJlY2VpdmVkKXJldHVybiB2b2lkKHRoaXMud2FzS2VlcEFsaXZlUmVjZWl2ZWQ9ITEpO3RoaXMucmVjb25uZWN0aW5nfHx0aGlzLmNsb3NlKCExLCEwKX0sZS5wcm90b3R5cGUuY2hlY2tNYXhDb25uZWN0VGltZW91dD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jbGVhck1heENvbm5lY3RUaW1lb3V0KCksdGhpcy5tYXhDb25uZWN0VGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnN0YXR1cyE9PWUud3NJbXBsLk9QRU4mJmUuY2xvc2UoITEsITApfSx0aGlzLm1heENvbm5lY3RUaW1lR2VuZXJhdG9yLmR1cmF0aW9uKCkpfSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNsaWVudD1uZXcgdGhpcy53c0ltcGwodGhpcy51cmwsZC5HUkFQSFFMX1dTKSx0aGlzLmNoZWNrTWF4Q29ubmVjdFRpbWVvdXQoKSx0aGlzLmNsaWVudC5vbm9wZW49ZnVuY3Rpb24oKXtlLmNsZWFyTWF4Q29ubmVjdFRpbWVvdXQoKSxlLmNsb3NlZEJ5VXNlcj0hMSxlLmV2ZW50RW1pdHRlci5lbWl0KGUucmVjb25uZWN0aW5nPyJyZWNvbm5lY3RpbmciOiJjb25uZWN0aW5nIik7dmFyIHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBlLmNvbm5lY3Rpb25QYXJhbXM/ZS5jb25uZWN0aW9uUGFyYW1zKCk6ZS5jb25uZWN0aW9uUGFyYW1zO2Uuc2VuZE1lc3NhZ2Uodm9pZCAwLG0uZGVmYXVsdC5HUUxfQ09OTkVDVElPTl9JTklULHQpLGUuZmx1c2hVbnNlbnRNZXNzYWdlc1F1ZXVlKCl9LHRoaXMuY2xpZW50Lm9uY2xvc2U9ZnVuY3Rpb24oKXtlLmNsb3NlZEJ5VXNlcnx8ZS5jbG9zZSghMSwhMSl9LHRoaXMuY2xpZW50Lm9uZXJyb3I9ZnVuY3Rpb24odCl7ZS5ldmVudEVtaXR0ZXIuZW1pdCgiZXJyb3IiLHQpfSx0aGlzLmNsaWVudC5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIG49dC5kYXRhO2UucHJvY2Vzc1JlY2VpdmVkRGF0YShuKX19LGUucHJvdG90eXBlLnByb2Nlc3NSZWNlaXZlZERhdGE9ZnVuY3Rpb24oZSl7dmFyIHQsbjt0cnl7dD1KU09OLnBhcnNlKGUpLG49dC5pZH1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoIk1lc3NhZ2UgbXVzdCBiZSBKU09OLXBhcnNlYWJsZS4gR290OiAiK2UpfWlmKC0xIT09W20uZGVmYXVsdC5HUUxfREFUQSxtLmRlZmF1bHQuR1FMX0NPTVBMRVRFLG0uZGVmYXVsdC5HUUxfRVJST1JdLmluZGV4T2YodC50eXBlKSYmIXRoaXMub3BlcmF0aW9uc1tuXSlyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlKG4pO3N3aXRjaCh0LnR5cGUpe2Nhc2UgbS5kZWZhdWx0LkdRTF9DT05ORUNUSU9OX0VSUk9SOnRoaXMuY29ubmVjdGlvbkNhbGxiYWNrJiZ0aGlzLmNvbm5lY3Rpb25DYWxsYmFjayh0LnBheWxvYWQpO2JyZWFrO2Nhc2UgbS5kZWZhdWx0LkdRTF9DT05ORUNUSU9OX0FDSzp0aGlzLmV2ZW50RW1pdHRlci5lbWl0KHRoaXMucmVjb25uZWN0aW5nPyJyZWNvbm5lY3RlZCI6ImNvbm5lY3RlZCIpLHRoaXMucmVjb25uZWN0aW5nPSExLHRoaXMuYmFja29mZi5yZXNldCgpLHRoaXMubWF4Q29ubmVjdFRpbWVHZW5lcmF0b3IucmVzZXQoKSx0aGlzLmNvbm5lY3Rpb25DYWxsYmFjayYmdGhpcy5jb25uZWN0aW9uQ2FsbGJhY2soKTticmVhaztjYXNlIG0uZGVmYXVsdC5HUUxfQ09NUExFVEU6dGhpcy5vcGVyYXRpb25zW25dLmhhbmRsZXIobnVsbCxudWxsKSxkZWxldGUgdGhpcy5vcGVyYXRpb25zW25dO2JyZWFrO2Nhc2UgbS5kZWZhdWx0LkdRTF9FUlJPUjp0aGlzLm9wZXJhdGlvbnNbbl0uaGFuZGxlcih0aGlzLmZvcm1hdEVycm9ycyh0LnBheWxvYWQpLG51bGwpLGRlbGV0ZSB0aGlzLm9wZXJhdGlvbnNbbl07YnJlYWs7Y2FzZSBtLmRlZmF1bHQuR1FMX0RBVEE6dmFyIGk9dC5wYXlsb2FkLmVycm9ycz9yKHt9LHQucGF5bG9hZCx7ZXJyb3JzOnRoaXMuZm9ybWF0RXJyb3JzKHQucGF5bG9hZC5lcnJvcnMpfSk6dC5wYXlsb2FkO3RoaXMub3BlcmF0aW9uc1tuXS5oYW5kbGVyKG51bGwsaSk7YnJlYWs7Y2FzZSBtLmRlZmF1bHQuR1FMX0NPTk5FQ1RJT05fS0VFUF9BTElWRTp2YXIgbz0idW5kZWZpbmVkIj09PXR5cGVvZiB0aGlzLndhc0tlZXBBbGl2ZVJlY2VpdmVkO3RoaXMud2FzS2VlcEFsaXZlUmVjZWl2ZWQ9ITAsbyYmdGhpcy5jaGVja0Nvbm5lY3Rpb24oKSx0aGlzLmNoZWNrQ29ubmVjdGlvbkludGVydmFsSWQmJihjbGVhckludGVydmFsKHRoaXMuY2hlY2tDb25uZWN0aW9uSW50ZXJ2YWxJZCksdGhpcy5jaGVja0Nvbm5lY3Rpb24oKSksdGhpcy5jaGVja0Nvbm5lY3Rpb25JbnRlcnZhbElkPXNldEludGVydmFsKHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyksdGhpcy53c1RpbWVvdXQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZSEiKX19LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMub3BlcmF0aW9uc1tlXSYmKGRlbGV0ZSB0aGlzLm9wZXJhdGlvbnNbZV0sdGhpcy5zZXRJbmFjdGl2aXR5VGltZW91dCgpLHRoaXMuc2VuZE1lc3NhZ2UoZSxtLmRlZmF1bHQuR1FMX1NUT1Asdm9pZCAwKSl9LGV9KCk7dC5TdWJzY3JpcHRpb25DbGllbnQ9Z30pLmNhbGwodCxuKDExKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1udWxsLHI9MDtyPGUuZGVmaW5pdGlvbnMubGVuZ3RoO3IrKyl7dmFyIG89ZS5kZWZpbml0aW9uc1tyXTtpZihvLmtpbmQ9PT1pLk9QRVJBVElPTl9ERUZJTklUSU9OKWlmKHQpe2lmKG8ubmFtZSYmby5uYW1lLnZhbHVlPT09dClyZXR1cm4gb31lbHNle2lmKG4pcmV0dXJuIG51bGw7bj1vfX1yZXR1cm4gbn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRPcGVyYXRpb25BU1Q9cjt2YXIgaT1uKDEwKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpLnNldEluKGUsWyJxdWVyeSJdLG8ucGFyc2UoZS5xdWVyeSkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDE0KSxvPW4oNyk7dC5tYWtlT3BlcmF0aW9uPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNvdXJjZT12b2lkIDA7dmFyIGk9bigxMyksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGkpO3QuU291cmNlPWZ1bmN0aW9uIGUodCxuLGkpe3IodGhpcyxlKSx0aGlzLmJvZHk9dCx0aGlzLm5hbWU9bnx8IkdyYXBoUUwgcmVxdWVzdCIsdGhpcy5sb2NhdGlvbk9mZnNldD1pfHx7bGluZToxLGNvbHVtbjoxfSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmxpbmU+MHx8KDAsby5kZWZhdWx0KSgwLCJsaW5lIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZSIpLHRoaXMubG9jYXRpb25PZmZzZXQuY29sdW1uPjB8fCgwLG8uZGVmYXVsdCkoMCwiY29sdW1uIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZSIpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtpZihlJiZlLnBhdGgpcmV0dXJuIGU7dmFyIHI9ZT9lLm1lc3NhZ2V8fFN0cmluZyhlKToiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iO3JldHVybiBuZXcgaS5HcmFwaFFMRXJyb3IocixlJiZlLm5vZGVzfHx0LGUmJmUuc291cmNlLGUmJmUucG9zaXRpb25zLG4sZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubG9jYXRlZEVycm9yPXI7dmFyIGk9big0Myl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0LG4scil7cmV0dXJuIGV8fCgwLHMuZGVmYXVsdCkoMCwiTXVzdCBwcm92aWRlIHNjaGVtYSIpLHR8fCgwLHMuZGVmYXVsdCkoMCwiTXVzdCBwcm92aWRlIGRvY3VtZW50IiksZSBpbnN0YW5jZW9mIHAuR3JhcGhRTFNjaGVtYXx8KDAscy5kZWZhdWx0KSgwLCJTY2hlbWEgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBHcmFwaFFMU2NoZW1hLiBBbHNvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBub3QgbXVsdGlwbGUgdmVyc2lvbnMgb2YgR3JhcGhRTCBpbnN0YWxsZWQgaW4geW91ciBub2RlX21vZHVsZXMgZGlyZWN0b3J5LiIpLG8oZSxyfHxuZXcgZi5UeXBlSW5mbyhlKSx0LG58fGQuc3BlY2lmaWVkUnVsZXMpfWZ1bmN0aW9uIG8oZSx0LG4scil7dmFyIGk9bmV3IGgoZSxuLHQpLG89ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUoaSl9KTtyZXR1cm4oMCx1LnZpc2l0KShuLCgwLHUudmlzaXRXaXRoVHlwZUluZm8pKHQsKDAsdS52aXNpdEluUGFyYWxsZWwpKG8pKSksaS5nZXRFcnJvcnMoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5WYWxpZGF0aW9uQ29udGV4dD12b2lkIDAsdC52YWxpZGF0ZT1pO3ZhciBhPW4oMTMpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShhKSx1PShuKDMpLG4oNTcpKSxjPW4oMTApLGw9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShjKSxwPW4oMjYpLGY9bigxMTMpLGQ9bigxODIpLGg9dC5WYWxpZGF0aW9uQ29udGV4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLGkpe3IodGhpcyxlKSx0aGlzLl9zY2hlbWE9dCx0aGlzLl9hc3Q9bix0aGlzLl90eXBlSW5mbz1pLHRoaXMuX2Vycm9ycz1bXSx0aGlzLl9mcmFnbWVudFNwcmVhZHM9bmV3IE1hcCx0aGlzLl9yZWN1cnNpdmVseVJlZmVyZW5jZWRGcmFnbWVudHM9bmV3IE1hcCx0aGlzLl92YXJpYWJsZVVzYWdlcz1uZXcgTWFwLHRoaXMuX3JlY3Vyc2l2ZVZhcmlhYmxlVXNhZ2VzPW5ldyBNYXB9cmV0dXJuIGUucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKGUpe3RoaXMuX2Vycm9ycy5wdXNoKGUpfSxlLnByb3RvdHlwZS5nZXRFcnJvcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3JzfSxlLnByb3RvdHlwZS5nZXRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2NoZW1hfSxlLnByb3RvdHlwZS5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3R9LGUucHJvdG90eXBlLmdldEZyYWdtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ZyYWdtZW50cztyZXR1cm4gdHx8KHRoaXMuX2ZyYWdtZW50cz10PXRoaXMuZ2V0RG9jdW1lbnQoKS5kZWZpbml0aW9ucy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5raW5kPT09bC5GUkFHTUVOVF9ERUZJTklUSU9OJiYoZVt0Lm5hbWUudmFsdWVdPXQpLGV9LE9iamVjdC5jcmVhdGUobnVsbCkpKSx0W2VdfSxlLnByb3RvdHlwZS5nZXRGcmFnbWVudFNwcmVhZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZnJhZ21lbnRTcHJlYWRzLmdldChlKTtpZighdCl7dD1bXTtmb3IodmFyIG49W2VdOzAhPT1uLmxlbmd0aDspZm9yKHZhciByPW4ucG9wKCksaT0wO2k8ci5zZWxlY3Rpb25zLmxlbmd0aDtpKyspe3ZhciBvPXIuc2VsZWN0aW9uc1tpXTtvLmtpbmQ9PT1sLkZSQUdNRU5UX1NQUkVBRD90LnB1c2gobyk6by5zZWxlY3Rpb25TZXQmJm4ucHVzaChvLnNlbGVjdGlvblNldCl9dGhpcy5fZnJhZ21lbnRTcHJlYWRzLnNldChlLHQpfXJldHVybiB0fSxlLnByb3RvdHlwZS5nZXRSZWN1cnNpdmVseVJlZmVyZW5jZWRGcmFnbWVudHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVjdXJzaXZlbHlSZWZlcmVuY2VkRnJhZ21lbnRzLmdldChlKTtpZighdCl7dD1bXTtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPVtlLnNlbGVjdGlvblNldF07MCE9PXIubGVuZ3RoOylmb3IodmFyIGk9ci5wb3AoKSxvPXRoaXMuZ2V0RnJhZ21lbnRTcHJlYWRzKGkpLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXS5uYW1lLnZhbHVlO2lmKCEwIT09bltzXSl7bltzXT0hMDt2YXIgdT10aGlzLmdldEZyYWdtZW50KHMpO3UmJih0LnB1c2godSksci5wdXNoKHUuc2VsZWN0aW9uU2V0KSl9fXRoaXMuX3JlY3Vyc2l2ZWx5UmVmZXJlbmNlZEZyYWdtZW50cy5zZXQoZSx0KX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VmFyaWFibGVVc2FnZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmFyaWFibGVVc2FnZXMuZ2V0KGUpO2lmKCF0KXt2YXIgbj1bXSxyPW5ldyBmLlR5cGVJbmZvKHRoaXMuX3NjaGVtYSk7KDAsdS52aXNpdCkoZSwoMCx1LnZpc2l0V2l0aFR5cGVJbmZvKShyLHtWYXJpYWJsZURlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVmFyaWFibGU6ZnVuY3Rpb24oZSl7bi5wdXNoKHtub2RlOmUsdHlwZTpyLmdldElucHV0VHlwZSgpfSl9fSkpLHQ9bix0aGlzLl92YXJpYWJsZVVzYWdlcy5zZXQoZSx0KX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0UmVjdXJzaXZlVmFyaWFibGVVc2FnZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVjdXJzaXZlVmFyaWFibGVVc2FnZXMuZ2V0KGUpO2lmKCF0KXt0PXRoaXMuZ2V0VmFyaWFibGVVc2FnZXMoZSk7Zm9yKHZhciBuPXRoaXMuZ2V0UmVjdXJzaXZlbHlSZWZlcmVuY2VkRnJhZ21lbnRzKGUpLHI9MDtyPG4ubGVuZ3RoO3IrKylBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0LHRoaXMuZ2V0VmFyaWFibGVVc2FnZXMobltyXSkpO3RoaXMuX3JlY3Vyc2l2ZVZhcmlhYmxlVXNhZ2VzLnNldChlLHQpfXJldHVybiB0fSxlLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGVJbmZvLmdldFR5cGUoKX0sZS5wcm90b3R5cGUuZ2V0UGFyZW50VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90eXBlSW5mby5nZXRQYXJlbnRUeXBlKCl9LGUucHJvdG90eXBlLmdldElucHV0VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90eXBlSW5mby5nZXRJbnB1dFR5cGUoKX0sZS5wcm90b3R5cGUuZ2V0RmllbGREZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZUluZm8uZ2V0RmllbGREZWYoKX0sZS5wcm90b3R5cGUuZ2V0RGlyZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGVJbmZvLmdldERpcmVjdGl2ZSgpfSxlLnByb3RvdHlwZS5nZXRBcmd1bWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90eXBlSW5mby5nZXRBcmd1bWVudCgpfSxlfSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNwZWNpZmllZFJ1bGVzPXZvaWQgMDt2YXIgcj1uKDE4MyksaT1uKDE4NCksbz1uKDE4NSksYT1uKDE4Nikscz1uKDE4NyksdT1uKDE4OCksYz1uKDE4OSksbD1uKDE5MCkscD1uKDE5MSksZj1uKDExNiksZD1uKDExNyksaD1uKDE5MiksbT1uKDE5MyksZz1uKDE5NCkseT1uKDE5NSksdj1uKDE5NiksYj1uKDE5NykseD1uKDE5OCksQz1uKDE5OSksRT1uKDIwMCksRD1uKDIwMSksdz1uKDIwMiksUz1uKDIwMyksaz1uKDIwNCksQT1uKDIwNSksXz1uKDIwNik7dC5zcGVjaWZpZWRSdWxlcz1bci5VbmlxdWVPcGVyYXRpb25OYW1lcyxpLkxvbmVBbm9ueW1vdXNPcGVyYXRpb24sby5TaW5nbGVGaWVsZFN1YnNjcmlwdGlvbnMsYS5Lbm93blR5cGVOYW1lcyxzLkZyYWdtZW50c09uQ29tcG9zaXRlVHlwZXMsdS5WYXJpYWJsZXNBcmVJbnB1dFR5cGVzLGMuU2NhbGFyTGVhZnMsbC5GaWVsZHNPbkNvcnJlY3RUeXBlLHAuVW5pcXVlRnJhZ21lbnROYW1lcyxmLktub3duRnJhZ21lbnROYW1lcyxkLk5vVW51c2VkRnJhZ21lbnRzLGguUG9zc2libGVGcmFnbWVudFNwcmVhZHMsbS5Ob0ZyYWdtZW50Q3ljbGVzLGcuVW5pcXVlVmFyaWFibGVOYW1lcyx5Lk5vVW5kZWZpbmVkVmFyaWFibGVzLHYuTm9VbnVzZWRWYXJpYWJsZXMsYi5Lbm93bkRpcmVjdGl2ZXMseC5VbmlxdWVEaXJlY3RpdmVzUGVyTG9jYXRpb24sQy5Lbm93bkFyZ3VtZW50TmFtZXMsRS5VbmlxdWVBcmd1bWVudE5hbWVzLEQuQXJndW1lbnRzT2ZDb3JyZWN0VHlwZSx3LlByb3ZpZGVkTm9uTnVsbEFyZ3VtZW50cyxTLkRlZmF1bHRWYWx1ZXNPZkNvcnJlY3RUeXBlLGsuVmFyaWFibGVzSW5BbGxvd2VkUG9zaXRpb24sQS5PdmVybGFwcGluZ0ZpZWxkc0NhbkJlTWVyZ2VkLF8uVW5pcXVlSW5wdXRGaWVsZE5hbWVzXX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybidUaGVyZSBjYW4gYmUgb25seSBvbmUgb3BlcmF0aW9uIG5hbWVkICInK2UrJyIuJ31mdW5jdGlvbiBpKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJue09wZXJhdGlvbkRlZmluaXRpb246ZnVuY3Rpb24obil7dmFyIGk9bi5uYW1lO3JldHVybiBpJiYodFtpLnZhbHVlXT9lLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKGkudmFsdWUpLFt0W2kudmFsdWVdLGldKSk6dFtpLnZhbHVlXT1pKSwhMX0sRnJhZ21lbnREZWZpbml0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuITF9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kdXBsaWNhdGVPcGVyYXRpb25OYW1lTWVzc2FnZT1yLHQuVW5pcXVlT3BlcmF0aW9uTmFtZXM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4iVGhpcyBhbm9ueW1vdXMgb3BlcmF0aW9uIG11c3QgYmUgdGhlIG9ubHkgZGVmaW5lZCBvcGVyYXRpb24uIn1mdW5jdGlvbiBpKGUpe3ZhciB0PTA7cmV0dXJue0RvY3VtZW50OmZ1bmN0aW9uKGUpe3Q9ZS5kZWZpbml0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2luZD09PWEuT1BFUkFUSU9OX0RFRklOSVRJT059KS5sZW5ndGh9LE9wZXJhdGlvbkRlZmluaXRpb246ZnVuY3Rpb24obil7IW4ubmFtZSYmdD4xJiZlLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKCksW25dKSl9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hbm9uT3BlcmF0aW9uTm90QWxvbmVNZXNzYWdlPXIsdC5Mb25lQW5vbnltb3VzT3BlcmF0aW9uPWk7dmFyIG89bigzKSxhPW4oMTApfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuKGU/J1N1YnNjcmlwdGlvbiAiJytlKyciICc6IkFub255bW91cyBTdWJzY3JpcHRpb24gIikrIm11c3Qgc2VsZWN0IG9ubHkgb25lIHRvcCBsZXZlbCBmaWVsZC4ifWZ1bmN0aW9uIGkoZSl7cmV0dXJue09wZXJhdGlvbkRlZmluaXRpb246ZnVuY3Rpb24odCl7InN1YnNjcmlwdGlvbiI9PT10Lm9wZXJhdGlvbiYmMSE9PXQuc2VsZWN0aW9uU2V0LnNlbGVjdGlvbnMubGVuZ3RoJiZlLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKHQubmFtZSYmdC5uYW1lLnZhbHVlKSx0LnNlbGVjdGlvblNldC5zZWxlY3Rpb25zLnNsaWNlKDEpKSl9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zaW5nbGVGaWVsZE9ubHlNZXNzYWdlPXIsdC5TaW5nbGVGaWVsZFN1YnNjcmlwdGlvbnM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj0nVW5rbm93biB0eXBlICInK1N0cmluZyhlKSsnIi4nO3JldHVybiB0Lmxlbmd0aCYmKG4rPSIgRGlkIHlvdSBtZWFuICIrKDAsbC5kZWZhdWx0KSh0KSsiPyIpLG59ZnVuY3Rpb24gbyhlKXtyZXR1cm57T2JqZWN0VHlwZURlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSW50ZXJmYWNlVHlwZURlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVW5pb25UeXBlRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiExfSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuITF9LE5hbWVkVHlwZTpmdW5jdGlvbih0KXt2YXIgbj1lLmdldFNjaGVtYSgpLHI9dC5uYW1lLnZhbHVlO24uZ2V0VHlwZShyKXx8ZS5yZXBvcnRFcnJvcihuZXcgYS5HcmFwaFFMRXJyb3IoaShyLCgwLHUuZGVmYXVsdCkocixPYmplY3Qua2V5cyhuLmdldFR5cGVNYXAoKSkpKSxbdF0pKX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnVua25vd25UeXBlTWVzc2FnZT1pLHQuS25vd25UeXBlTmFtZXM9bzt2YXIgYT1uKDMpLHM9bigxMTQpLHU9cihzKSxjPW4oMTE1KSxsPXIoYyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nRnJhZ21lbnQgY2Fubm90IGNvbmRpdGlvbiBvbiBub24gY29tcG9zaXRlIHR5cGUgIicrU3RyaW5nKGUpKyciLid9ZnVuY3Rpb24gaShlLHQpe3JldHVybidGcmFnbWVudCAiJytlKyciIGNhbm5vdCBjb25kaXRpb24gb24gbm9uIGNvbXBvc2l0ZSB0eXBlICInK1N0cmluZyh0KSsnIi4nfWZ1bmN0aW9uIG8oZSl7cmV0dXJue0lubGluZUZyYWdtZW50OmZ1bmN0aW9uKHQpe2lmKHQudHlwZUNvbmRpdGlvbil7dmFyIG49KDAsYy50eXBlRnJvbUFTVCkoZS5nZXRTY2hlbWEoKSx0LnR5cGVDb25kaXRpb24pO24mJiEoMCx1LmlzQ29tcG9zaXRlVHlwZSkobikmJmUucmVwb3J0RXJyb3IobmV3IGEuR3JhcGhRTEVycm9yKHIoKDAscy5wcmludCkodC50eXBlQ29uZGl0aW9uKSksW3QudHlwZUNvbmRpdGlvbl0pKX19LEZyYWdtZW50RGVmaW5pdGlvbjpmdW5jdGlvbih0KXt2YXIgbj0oMCxjLnR5cGVGcm9tQVNUKShlLmdldFNjaGVtYSgpLHQudHlwZUNvbmRpdGlvbik7biYmISgwLHUuaXNDb21wb3NpdGVUeXBlKShuKSYmZS5yZXBvcnRFcnJvcihuZXcgYS5HcmFwaFFMRXJyb3IoaSh0Lm5hbWUudmFsdWUsKDAscy5wcmludCkodC50eXBlQ29uZGl0aW9uKSksW3QudHlwZUNvbmRpdGlvbl0pKX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlubGluZUZyYWdtZW50T25Ob25Db21wb3NpdGVFcnJvck1lc3NhZ2U9cix0LmZyYWdtZW50T25Ob25Db21wb3NpdGVFcnJvck1lc3NhZ2U9aSx0LkZyYWdtZW50c09uQ29tcG9zaXRlVHlwZXM9bzt2YXIgYT1uKDMpLHM9bigxOSksdT1uKDYpLGM9bigyOSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybidWYXJpYWJsZSAiJCcrZSsnIiBjYW5ub3QgYmUgbm9uLWlucHV0IHR5cGUgIicrdCsnIi4nfWZ1bmN0aW9uIGkoZSl7cmV0dXJue1ZhcmlhYmxlRGVmaW5pdGlvbjpmdW5jdGlvbih0KXt2YXIgbj0oMCx1LnR5cGVGcm9tQVNUKShlLmdldFNjaGVtYSgpLHQudHlwZSk7aWYobiYmISgwLHMuaXNJbnB1dFR5cGUpKG4pKXt2YXIgaT10LnZhcmlhYmxlLm5hbWUudmFsdWU7ZS5yZXBvcnRFcnJvcihuZXcgby5HcmFwaFFMRXJyb3IocihpLCgwLGEucHJpbnQpKHQudHlwZSkpLFt0LnR5cGVdKSl9fX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubm9uSW5wdXRUeXBlT25WYXJNZXNzYWdlPXIsdC5WYXJpYWJsZXNBcmVJbnB1dFR5cGVzPWk7dmFyIG89bigzKSxhPW4oMTkpLHM9big2KSx1PW4oMjkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4nRmllbGQgIicrZSsnIiBtdXN0IG5vdCBoYXZlIGEgc2VsZWN0aW9uIHNpbmNlIHR5cGUgIicrU3RyaW5nKHQpKyciIGhhcyBubyBzdWJmaWVsZHMuJ31mdW5jdGlvbiBpKGUsdCl7cmV0dXJuJ0ZpZWxkICInK2UrJyIgb2YgdHlwZSAiJytTdHJpbmcodCkrJyIgbXVzdCBoYXZlIGEgc2VsZWN0aW9uIG9mIHN1YmZpZWxkcy4gRGlkIHlvdSBtZWFuICInK2UrJyB7IC4uLiB9Ij8nfWZ1bmN0aW9uIG8oZSl7cmV0dXJue0ZpZWxkOmZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0VHlwZSgpO24mJigoMCxzLmlzTGVhZlR5cGUpKCgwLHMuZ2V0TmFtZWRUeXBlKShuKSk/dC5zZWxlY3Rpb25TZXQmJmUucmVwb3J0RXJyb3IobmV3IGEuR3JhcGhRTEVycm9yKHIodC5uYW1lLnZhbHVlLG4pLFt0LnNlbGVjdGlvblNldF0pKTp0LnNlbGVjdGlvblNldHx8ZS5yZXBvcnRFcnJvcihuZXcgYS5HcmFwaFFMRXJyb3IoaSh0Lm5hbWUudmFsdWUsbiksW3RdKSkpfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubm9TdWJzZWxlY3Rpb25BbGxvd2VkTWVzc2FnZT1yLHQucmVxdWlyZWRTdWJzZWxlY3Rpb25NZXNzYWdlPWksdC5TY2FsYXJMZWFmcz1vO3ZhciBhPW4oMykscz1uKDYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0LG4scil7dmFyIGk9J0Nhbm5vdCBxdWVyeSBmaWVsZCAiJytlKyciIG9uIHR5cGUgIicrdCsnIi4nO2lmKDAhPT1uLmxlbmd0aCl7aSs9IiBEaWQgeW91IG1lYW4gdG8gdXNlIGFuIGlubGluZSBmcmFnbWVudCBvbiAiKygwLGYuZGVmYXVsdCkobikrIj8ifWVsc2UgMCE9PXIubGVuZ3RoJiYoaSs9IiBEaWQgeW91IG1lYW4gIisoMCxmLmRlZmF1bHQpKHIpKyI/Iik7cmV0dXJuIGl9ZnVuY3Rpb24gbyhlKXtyZXR1cm57RmllbGQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5nZXRQYXJlbnRUeXBlKCk7aWYobil7aWYoIWUuZ2V0RmllbGREZWYoKSl7dmFyIHI9ZS5nZXRTY2hlbWEoKSxvPXQubmFtZS52YWx1ZSxjPWEocixuLG8pLGw9MCE9PWMubGVuZ3RoP1tdOnMocixuLG8pO2UucmVwb3J0RXJyb3IobmV3IHUuR3JhcGhRTEVycm9yKGkobyxuLm5hbWUsYyxsKSxbdF0pKX19fX19ZnVuY3Rpb24gYShlLHQsbil7aWYoKDAsZC5pc0Fic3RyYWN0VHlwZSkodCkpe3ZhciByPVtdLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmdldFBvc3NpYmxlVHlwZXModCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmdldEZpZWxkcygpW25dJiYoci5wdXNoKGUubmFtZSksZS5nZXRJbnRlcmZhY2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmdldEZpZWxkcygpW25dJiYoaVtlLm5hbWVdPShpW2UubmFtZV18fDApKzEpfSkpfSk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVt0XS1pW2VdfSkuY29uY2F0KHIpfXJldHVybltdfWZ1bmN0aW9uIHMoZSx0LG4pe2lmKHQgaW5zdGFuY2VvZiBkLkdyYXBoUUxPYmplY3RUeXBlfHx0IGluc3RhbmNlb2YgZC5HcmFwaFFMSW50ZXJmYWNlVHlwZSl7dmFyIHI9T2JqZWN0LmtleXModC5nZXRGaWVsZHMoKSk7cmV0dXJuKDAsbC5kZWZhdWx0KShuLHIpfXJldHVybltdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnVuZGVmaW5lZEZpZWxkTWVzc2FnZT1pLHQuRmllbGRzT25Db3JyZWN0VHlwZT1vO3ZhciB1PW4oMyksYz1uKDExNCksbD1yKGMpLHA9bigxMTUpLGY9cihwKSxkPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nVGhlcmUgY2FuIGJlIG9ubHkgb25lIGZyYWdtZW50IG5hbWVkICInK2UrJyIuJ31mdW5jdGlvbiBpKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJue09wZXJhdGlvbkRlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRnJhZ21lbnREZWZpbml0aW9uOmZ1bmN0aW9uKG4pe3ZhciBpPW4ubmFtZS52YWx1ZTtyZXR1cm4gdFtpXT9lLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKGkpLFt0W2ldLG4ubmFtZV0pKTp0W2ldPW4ubmFtZSwhMX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmR1cGxpY2F0ZUZyYWdtZW50TmFtZU1lc3NhZ2U9cix0LlVuaXF1ZUZyYWdtZW50TmFtZXM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybidGcmFnbWVudCAiJytlKyciIGNhbm5vdCBiZSBzcHJlYWQgaGVyZSBhcyBvYmplY3RzIG9mIHR5cGUgIicrU3RyaW5nKHQpKyciIGNhbiBuZXZlciBiZSBvZiB0eXBlICInK1N0cmluZyhuKSsnIi4nfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4nRnJhZ21lbnQgY2Fubm90IGJlIHNwcmVhZCBoZXJlIGFzIG9iamVjdHMgb2YgdHlwZSAiJytTdHJpbmcoZSkrJyIgY2FuIG5ldmVyIGJlIG9mIHR5cGUgIicrU3RyaW5nKHQpKyciLid9ZnVuY3Rpb24gbyhlKXtyZXR1cm57SW5saW5lRnJhZ21lbnQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5nZXRUeXBlKCkscj1lLmdldFBhcmVudFR5cGUoKTsoMCxsLmlzQ29tcG9zaXRlVHlwZSkobikmJigwLGwuaXNDb21wb3NpdGVUeXBlKShyKSYmISgwLHUuZG9UeXBlc092ZXJsYXApKGUuZ2V0U2NoZW1hKCksbixyKSYmZS5yZXBvcnRFcnJvcihuZXcgcy5HcmFwaFFMRXJyb3IoaShyLG4pLFt0XSkpfSxGcmFnbWVudFNwcmVhZDpmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWUudmFsdWUsaT1hKGUsbiksbz1lLmdldFBhcmVudFR5cGUoKTtpJiZvJiYhKDAsdS5kb1R5cGVzT3ZlcmxhcCkoZS5nZXRTY2hlbWEoKSxpLG8pJiZlLnJlcG9ydEVycm9yKG5ldyBzLkdyYXBoUUxFcnJvcihyKG4sbyxpKSxbdF0pKX19fWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1lLmdldEZyYWdtZW50KHQpO3JldHVybiBuJiYoMCxjLnR5cGVGcm9tQVNUKShlLmdldFNjaGVtYSgpLG4udHlwZUNvbmRpdGlvbil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudHlwZUluY29tcGF0aWJsZVNwcmVhZE1lc3NhZ2U9cix0LnR5cGVJbmNvbXBhdGlibGVBbm9uU3ByZWFkTWVzc2FnZT1pLHQuUG9zc2libGVGcmFnbWVudFNwcmVhZHM9bzt2YXIgcz1uKDMpLHU9big4MSksYz1uKDI5KSxsPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybidDYW5ub3Qgc3ByZWFkIGZyYWdtZW50ICInK2UrJyIgd2l0aGluIGl0c2VsZicrKHQubGVuZ3RoPyIgdmlhICIrdC5qb2luKCIsICIpOiIiKSsiLiJ9ZnVuY3Rpb24gaShlKXtmdW5jdGlvbiB0KHMpe3ZhciB1PXMubmFtZS52YWx1ZTtuW3VdPSEwO3ZhciBjPWUuZ2V0RnJhZ21lbnRTcHJlYWRzKHMuc2VsZWN0aW9uU2V0KTtpZigwIT09Yy5sZW5ndGgpe2FbdV09aS5sZW5ndGg7Zm9yKHZhciBsPTA7bDxjLmxlbmd0aDtsKyspe3ZhciBwPWNbbF0sZj1wLm5hbWUudmFsdWUsZD1hW2ZdO2lmKHZvaWQgMD09PWQpe2lmKGkucHVzaChwKSwhbltmXSl7dmFyIGg9ZS5nZXRGcmFnbWVudChmKTtoJiZ0KGgpfWkucG9wKCl9ZWxzZXt2YXIgbT1pLnNsaWNlKGQpO2UucmVwb3J0RXJyb3IobmV3IG8uR3JhcGhRTEVycm9yKHIoZixtLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSkpLG0uY29uY2F0KHApKSl9fWFbdV09dm9pZCAwfX12YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9W10sYT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybntPcGVyYXRpb25EZWZpbml0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuITF9LEZyYWdtZW50RGVmaW5pdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbltlLm5hbWUudmFsdWVdfHx0KGUpLCExfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY3ljbGVFcnJvck1lc3NhZ2U9cix0Lk5vRnJhZ21lbnRDeWNsZXM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSB2YXJpYWJsZSBuYW1lZCAiJytlKyciLid9ZnVuY3Rpb24gaShlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybntPcGVyYXRpb25EZWZpbml0aW9uOmZ1bmN0aW9uKCl7dD1PYmplY3QuY3JlYXRlKG51bGwpfSxWYXJpYWJsZURlZmluaXRpb246ZnVuY3Rpb24obil7dmFyIGk9bi52YXJpYWJsZS5uYW1lLnZhbHVlO3RbaV0/ZS5yZXBvcnRFcnJvcihuZXcgby5HcmFwaFFMRXJyb3IocihpKSxbdFtpXSxuLnZhcmlhYmxlLm5hbWVdKSk6dFtpXT1uLnZhcmlhYmxlLm5hbWV9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kdXBsaWNhdGVWYXJpYWJsZU1lc3NhZ2U9cix0LlVuaXF1ZVZhcmlhYmxlTmFtZXM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdD8nVmFyaWFibGUgIiQnK2UrJyIgaXMgbm90IGRlZmluZWQgYnkgb3BlcmF0aW9uICInK3QrJyIuJzonVmFyaWFibGUgIiQnK2UrJyIgaXMgbm90IGRlZmluZWQuJ31mdW5jdGlvbiBpKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJue09wZXJhdGlvbkRlZmluaXRpb246e2VudGVyOmZ1bmN0aW9uKCl7dD1PYmplY3QuY3JlYXRlKG51bGwpfSxsZWF2ZTpmdW5jdGlvbihuKXtlLmdldFJlY3Vyc2l2ZVZhcmlhYmxlVXNhZ2VzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aS5ub2RlLHM9YS5uYW1lLnZhbHVlOyEwIT09dFtzXSYmZS5yZXBvcnRFcnJvcihuZXcgby5HcmFwaFFMRXJyb3IocihzLG4ubmFtZSYmbi5uYW1lLnZhbHVlKSxbYSxuXSkpfSl9fSxWYXJpYWJsZURlZmluaXRpb246ZnVuY3Rpb24oZSl7dFtlLnZhcmlhYmxlLm5hbWUudmFsdWVdPSEwfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudW5kZWZpbmVkVmFyTWVzc2FnZT1yLHQuTm9VbmRlZmluZWRWYXJpYWJsZXM9aTt2YXIgbz1uKDMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdD8nVmFyaWFibGUgIiQnK2UrJyIgaXMgbmV2ZXIgdXNlZCBpbiBvcGVyYXRpb24gIicrdCsnIi4nOidWYXJpYWJsZSAiJCcrZSsnIiBpcyBuZXZlciB1c2VkLid9ZnVuY3Rpb24gaShlKXt2YXIgdD1bXTtyZXR1cm57T3BlcmF0aW9uRGVmaW5pdGlvbjp7ZW50ZXI6ZnVuY3Rpb24oKXt0PVtdfSxsZWF2ZTpmdW5jdGlvbihuKXt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpLGE9ZS5nZXRSZWN1cnNpdmVWYXJpYWJsZVVzYWdlcyhuKSxzPW4ubmFtZT9uLm5hbWUudmFsdWU6bnVsbDthLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO2lbdC5uYW1lLnZhbHVlXT0hMH0pLHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnZhcmlhYmxlLm5hbWUudmFsdWU7ITAhPT1pW25dJiZlLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKG4scyksW3RdKSl9KX19LFZhcmlhYmxlRGVmaW5pdGlvbjpmdW5jdGlvbihlKXt0LnB1c2goZSl9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC51bnVzZWRWYXJpYWJsZU1lc3NhZ2U9cix0Lk5vVW51c2VkVmFyaWFibGVzPWk7dmFyIG89bigzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybidVbmtub3duIGRpcmVjdGl2ZSAiJytlKyciLid9ZnVuY3Rpb24gaShlLHQpe3JldHVybidEaXJlY3RpdmUgIicrZSsnIiBtYXkgbm90IGJlIHVzZWQgb24gJyt0KyIuIn1mdW5jdGlvbiBvKGUpe3JldHVybntEaXJlY3RpdmU6ZnVuY3Rpb24odCxuLG8sdSxsKXt2YXIgcD0oMCxjLmRlZmF1bHQpKGUuZ2V0U2NoZW1hKCkuZ2V0RGlyZWN0aXZlcygpLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10Lm5hbWUudmFsdWV9KTtpZighcClyZXR1cm4gdm9pZCBlLnJlcG9ydEVycm9yKG5ldyBzLkdyYXBoUUxFcnJvcihyKHQubmFtZS52YWx1ZSksW3RdKSk7dmFyIGY9YShsKTtmPy0xPT09cC5sb2NhdGlvbnMuaW5kZXhPZihmKSYmZS5yZXBvcnRFcnJvcihuZXcgcy5HcmFwaFFMRXJyb3IoaSh0Lm5hbWUudmFsdWUsZiksW3RdKSk6ZS5yZXBvcnRFcnJvcihuZXcgcy5HcmFwaFFMRXJyb3IoaSh0Lm5hbWUudmFsdWUsdC50eXBlKSxbdF0pKX19fWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZVtlLmxlbmd0aC0xXTtzd2l0Y2godC5raW5kKXtjYXNlIHAuT1BFUkFUSU9OX0RFRklOSVRJT046c3dpdGNoKHQub3BlcmF0aW9uKXtjYXNlInF1ZXJ5IjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5RVUVSWTtjYXNlIm11dGF0aW9uIjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5NVVRBVElPTjtjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIGYuRGlyZWN0aXZlTG9jYXRpb24uU1VCU0NSSVBUSU9OfWJyZWFrO2Nhc2UgcC5GSUVMRDpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5GSUVMRDtjYXNlIHAuRlJBR01FTlRfU1BSRUFEOnJldHVybiBmLkRpcmVjdGl2ZUxvY2F0aW9uLkZSQUdNRU5UX1NQUkVBRDtjYXNlIHAuSU5MSU5FX0ZSQUdNRU5UOnJldHVybiBmLkRpcmVjdGl2ZUxvY2F0aW9uLklOTElORV9GUkFHTUVOVDtjYXNlIHAuRlJBR01FTlRfREVGSU5JVElPTjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5GUkFHTUVOVF9ERUZJTklUSU9OO2Nhc2UgcC5TQ0hFTUFfREVGSU5JVElPTjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5TQ0hFTUE7Y2FzZSBwLlNDQUxBUl9UWVBFX0RFRklOSVRJT046cmV0dXJuIGYuRGlyZWN0aXZlTG9jYXRpb24uU0NBTEFSO2Nhc2UgcC5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OOnJldHVybiBmLkRpcmVjdGl2ZUxvY2F0aW9uLk9CSkVDVDtjYXNlIHAuRklFTERfREVGSU5JVElPTjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5GSUVMRF9ERUZJTklUSU9OO2Nhc2UgcC5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OOnJldHVybiBmLkRpcmVjdGl2ZUxvY2F0aW9uLklOVEVSRkFDRTtjYXNlIHAuVU5JT05fVFlQRV9ERUZJTklUSU9OOnJldHVybiBmLkRpcmVjdGl2ZUxvY2F0aW9uLlVOSU9OO2Nhc2UgcC5FTlVNX1RZUEVfREVGSU5JVElPTjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5FTlVNO2Nhc2UgcC5FTlVNX1ZBTFVFX0RFRklOSVRJT046cmV0dXJuIGYuRGlyZWN0aXZlTG9jYXRpb24uRU5VTV9WQUxVRTtjYXNlIHAuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTjpyZXR1cm4gZi5EaXJlY3RpdmVMb2NhdGlvbi5JTlBVVF9PQkpFQ1Q7Y2FzZSBwLklOUFVUX1ZBTFVFX0RFRklOSVRJT046cmV0dXJuIGVbZS5sZW5ndGgtM10ua2luZD09PXAuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTj9mLkRpcmVjdGl2ZUxvY2F0aW9uLklOUFVUX0ZJRUxEX0RFRklOSVRJT046Zi5EaXJlY3RpdmVMb2NhdGlvbi5BUkdVTUVOVF9ERUZJTklUSU9OfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC51bmtub3duRGlyZWN0aXZlTWVzc2FnZT1yLHQubWlzcGxhY2VkRGlyZWN0aXZlTWVzc2FnZT1pLHQuS25vd25EaXJlY3RpdmVzPW87dmFyIHM9bigzKSx1PW4oNDUpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSh1KSxsPW4oMTApLHA9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShsKSxmPW4oMjcpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJ1RoZSBkaXJlY3RpdmUgIicrZSsnIiBjYW4gb25seSBiZSB1c2VkIG9uY2UgYXQgdGhpcyBsb2NhdGlvbi4nfWZ1bmN0aW9uIGkoZSl7cmV0dXJue2VudGVyOmZ1bmN0aW9uKHQpe2lmKHQuZGlyZWN0aXZlcyl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTt0LmRpcmVjdGl2ZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT10Lm5hbWUudmFsdWU7bltpXT9lLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKGkpLFtuW2ldLHRdKSk6bltpXT10fSl9fX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZHVwbGljYXRlRGlyZWN0aXZlTWVzc2FnZT1yLHQuVW5pcXVlRGlyZWN0aXZlc1BlckxvY2F0aW9uPWk7dmFyIG89bigzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCxuLHIpe3ZhciBpPSdVbmtub3duIGFyZ3VtZW50ICInK2UrJyIgb24gZmllbGQgIicrdCsnIiBvZiB0eXBlICInK24rJyIuJztyZXR1cm4gci5sZW5ndGgmJihpKz0iIERpZCB5b3UgbWVhbiAiKygwLG0uZGVmYXVsdCkocikrIj8iKSxpfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByPSdVbmtub3duIGFyZ3VtZW50ICInK2UrJyIgb24gZGlyZWN0aXZlICJAJyt0KyciLic7cmV0dXJuIG4ubGVuZ3RoJiYocis9IiBEaWQgeW91IG1lYW4gIisoMCxtLmRlZmF1bHQpKG4pKyI/Iikscn1mdW5jdGlvbiBhKGUpe3JldHVybntBcmd1bWVudDpmdW5jdGlvbih0LG4scixhLHUpe3ZhciBsPXVbdS5sZW5ndGgtMV07aWYobC5raW5kPT09eS5GSUVMRCl7dmFyIGY9ZS5nZXRGaWVsZERlZigpO2lmKGYpe2lmKCEoMCxjLmRlZmF1bHQpKGYuYXJncyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC5uYW1lLnZhbHVlfSkpe3ZhciBoPWUuZ2V0UGFyZW50VHlwZSgpO2h8fCgwLHAuZGVmYXVsdCkoMCksZS5yZXBvcnRFcnJvcihuZXcgcy5HcmFwaFFMRXJyb3IoaSh0Lm5hbWUudmFsdWUsZi5uYW1lLGgubmFtZSwoMCxkLmRlZmF1bHQpKHQubmFtZS52YWx1ZSxmLmFyZ3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWV9KSkpLFt0XSkpfX19ZWxzZSBpZihsLmtpbmQ9PT15LkRJUkVDVElWRSl7dmFyIG09ZS5nZXREaXJlY3RpdmUoKTtpZihtKXt2YXIgZz0oMCxjLmRlZmF1bHQpKG0uYXJncyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC5uYW1lLnZhbHVlfSk7Z3x8ZS5yZXBvcnRFcnJvcihuZXcgcy5HcmFwaFFMRXJyb3Iobyh0Lm5hbWUudmFsdWUsbS5uYW1lLCgwLGQuZGVmYXVsdCkodC5uYW1lLnZhbHVlLG0uYXJncy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pKSksW3RdKSl9fX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnVua25vd25BcmdNZXNzYWdlPWksdC51bmtub3duRGlyZWN0aXZlQXJnTWVzc2FnZT1vLHQuS25vd25Bcmd1bWVudE5hbWVzPWE7dmFyIHM9bigzKSx1PW4oNDUpLGM9cih1KSxsPW4oMTMpLHA9cihsKSxmPW4oMTE0KSxkPXIoZiksaD1uKDExNSksbT1yKGgpLGc9bigxMCkseT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KGcpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSBhcmd1bWVudCBuYW1lZCAiJytlKyciLid9ZnVuY3Rpb24gaShlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybntGaWVsZDpmdW5jdGlvbigpe3Q9T2JqZWN0LmNyZWF0ZShudWxsKX0sRGlyZWN0aXZlOmZ1bmN0aW9uKCl7dD1PYmplY3QuY3JlYXRlKG51bGwpfSxBcmd1bWVudDpmdW5jdGlvbihuKXt2YXIgaT1uLm5hbWUudmFsdWU7cmV0dXJuIHRbaV0/ZS5yZXBvcnRFcnJvcihuZXcgby5HcmFwaFFMRXJyb3IocihpKSxbdFtpXSxuLm5hbWVdKSk6dFtpXT1uLm5hbWUsITF9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kdXBsaWNhdGVBcmdNZXNzYWdlPXIsdC5VbmlxdWVBcmd1bWVudE5hbWVzPWk7dmFyIG89bigzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybidBcmd1bWVudCAiJytlKyciIGhhcyBpbnZhbGlkIHZhbHVlICcrbisiLiIrKHI/IlxuIityLmpvaW4oIlxuIik6IiIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJue0FyZ3VtZW50OmZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0QXJndW1lbnQoKTtpZihuKXt2YXIgaT0oMCxzLmlzVmFsaWRMaXRlcmFsVmFsdWUpKG4udHlwZSx0LnZhbHVlKTtpJiZpLmxlbmd0aD4wJiZlLnJlcG9ydEVycm9yKG5ldyBvLkdyYXBoUUxFcnJvcihyKHQubmFtZS52YWx1ZSxuLnR5cGUsKDAsYS5wcmludCkodC52YWx1ZSksaSksW3QudmFsdWVdKSl9cmV0dXJuITF9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYWRWYWx1ZU1lc3NhZ2U9cix0LkFyZ3VtZW50c09mQ29ycmVjdFR5cGU9aTt2YXIgbz1uKDMpLGE9bigxOSkscz1uKDgyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4nRmllbGQgIicrZSsnIiBhcmd1bWVudCAiJyt0KyciIG9mIHR5cGUgIicrU3RyaW5nKG4pKyciIGlzIHJlcXVpcmVkIGJ1dCBub3QgcHJvdmlkZWQuJ31mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4nRGlyZWN0aXZlICJAJytlKyciIGFyZ3VtZW50ICInK3QrJyIgb2YgdHlwZSAiJytTdHJpbmcobikrJyIgaXMgcmVxdWlyZWQgYnV0IG5vdCBwcm92aWRlZC4nfWZ1bmN0aW9uIG8oZSl7cmV0dXJue0ZpZWxkOntsZWF2ZTpmdW5jdGlvbih0KXt2YXIgbj1lLmdldEZpZWxkRGVmKCk7aWYoIW4pcmV0dXJuITE7dmFyIGk9dC5hcmd1bWVudHN8fFtdLG89KDAsdS5kZWZhdWx0KShpLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudmFsdWV9KTtuLmFyZ3MuZm9yRWFjaChmdW5jdGlvbihuKXshb1tuLm5hbWVdJiZuLnR5cGUgaW5zdGFuY2VvZiBjLkdyYXBoUUxOb25OdWxsJiZlLnJlcG9ydEVycm9yKG5ldyBhLkdyYXBoUUxFcnJvcihyKHQubmFtZS52YWx1ZSxuLm5hbWUsbi50eXBlKSxbdF0pKX0pfX0sRGlyZWN0aXZlOntsZWF2ZTpmdW5jdGlvbih0KXt2YXIgbj1lLmdldERpcmVjdGl2ZSgpO2lmKCFuKXJldHVybiExO3ZhciByPXQuYXJndW1lbnRzfHxbXSxvPSgwLHUuZGVmYXVsdCkocixmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSk7bi5hcmdzLmZvckVhY2goZnVuY3Rpb24obil7IW9bbi5uYW1lXSYmbi50eXBlIGluc3RhbmNlb2YgYy5HcmFwaFFMTm9uTnVsbCYmZS5yZXBvcnRFcnJvcihuZXcgYS5HcmFwaFFMRXJyb3IoaSh0Lm5hbWUudmFsdWUsbi5uYW1lLG4udHlwZSksW3RdKSl9KX19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5taXNzaW5nRmllbGRBcmdNZXNzYWdlPXIsdC5taXNzaW5nRGlyZWN0aXZlQXJnTWVzc2FnZT1pLHQuUHJvdmlkZWROb25OdWxsQXJndW1lbnRzPW87dmFyIGE9bigzKSxzPW4oNDYpLHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShzKSxjPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuJ1ZhcmlhYmxlICIkJytlKyciIG9mIHR5cGUgIicrU3RyaW5nKHQpKyciIGlzIHJlcXVpcmVkIGFuZCB3aWxsIG5vdCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUuIFBlcmhhcHMgeW91IG1lYW50IHRvIHVzZSB0eXBlICInK1N0cmluZyhuKSsnIi4nfWZ1bmN0aW9uIGkoZSx0LG4scil7dmFyIGk9cj8iXG4iK3Iuam9pbigiXG4iKToiIjtyZXR1cm4nVmFyaWFibGUgIiQnK2UrJyIgb2YgdHlwZSAiJytTdHJpbmcodCkrJyIgaGFzIGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnK24rIi4iK2l9ZnVuY3Rpb24gbyhlKXtyZXR1cm57VmFyaWFibGVEZWZpbml0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPXQudmFyaWFibGUubmFtZS52YWx1ZSxvPXQuZGVmYXVsdFZhbHVlLGw9ZS5nZXRJbnB1dFR5cGUoKTtpZihsIGluc3RhbmNlb2YgdS5HcmFwaFFMTm9uTnVsbCYmbyYmZS5yZXBvcnRFcnJvcihuZXcgYS5HcmFwaFFMRXJyb3IocihuLGwsbC5vZlR5cGUpLFtvXSkpLGwmJm8pe3ZhciBwPSgwLGMuaXNWYWxpZExpdGVyYWxWYWx1ZSkobCxvKTtwJiZwLmxlbmd0aD4wJiZlLnJlcG9ydEVycm9yKG5ldyBhLkdyYXBoUUxFcnJvcihpKG4sbCwoMCxzLnByaW50KShvKSxwKSxbb10pKX1yZXR1cm4hMX0sU2VsZWN0aW9uU2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9LEZyYWdtZW50RGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiExfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdEZvck5vbk51bGxBcmdNZXNzYWdlPXIsdC5iYWRWYWx1ZUZvckRlZmF1bHRBcmdNZXNzYWdlPWksdC5EZWZhdWx0VmFsdWVzT2ZDb3JyZWN0VHlwZT1vO3ZhciBhPW4oMykscz1uKDE5KSx1PW4oNiksYz1uKDgyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4nVmFyaWFibGUgIiQnK2UrJyIgb2YgdHlwZSAiJytTdHJpbmcodCkrJyIgdXNlZCBpbiBwb3NpdGlvbiBleHBlY3RpbmcgdHlwZSAiJytTdHJpbmcobikrJyIuJ31mdW5jdGlvbiBpKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJue09wZXJhdGlvbkRlZmluaXRpb246e2VudGVyOmZ1bmN0aW9uKCl7dD1PYmplY3QuY3JlYXRlKG51bGwpfSxsZWF2ZTpmdW5jdGlvbihuKXtlLmdldFJlY3Vyc2l2ZVZhcmlhYmxlVXNhZ2VzKG4pLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9bi5ub2RlLHM9bi50eXBlLGw9aS5uYW1lLnZhbHVlLHA9dFtsXTtpZihwJiZzKXt2YXIgZj1lLmdldFNjaGVtYSgpLGQ9KDAsYy50eXBlRnJvbUFTVCkoZixwLnR5cGUpO2QmJiEoMCx1LmlzVHlwZVN1YlR5cGVPZikoZixvKGQscCkscykmJmUucmVwb3J0RXJyb3IobmV3IGEuR3JhcGhRTEVycm9yKHIobCxkLHMpLFtwLGldKSl9fSl9fSxWYXJpYWJsZURlZmluaXRpb246ZnVuY3Rpb24oZSl7dFtlLnZhcmlhYmxlLm5hbWUudmFsdWVdPWV9fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIXQuZGVmYXVsdFZhbHVlfHxlIGluc3RhbmNlb2Ygcy5HcmFwaFFMTm9uTnVsbD9lOm5ldyBzLkdyYXBoUUxOb25OdWxsKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmJhZFZhclBvc01lc3NhZ2U9cix0LlZhcmlhYmxlc0luQWxsb3dlZFBvc2l0aW9uPWk7dmFyIGE9bigzKSxzPW4oNiksdT1uKDgxKSxjPW4oMjkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuJ0ZpZWxkcyAiJytlKyciIGNvbmZsaWN0IGJlY2F1c2UgJytvKHQpKyIuIFVzZSBkaWZmZXJlbnQgYWxpYXNlcyBvbiB0aGUgZmllbGRzIHRvIGZldGNoIGJvdGggaWYgdGhpcyB3YXMgaW50ZW50aW9uYWwuIn1mdW5jdGlvbiBvKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybidzdWJmaWVsZHMgIicrZVswXSsnIiBjb25mbGljdCBiZWNhdXNlICcrbyhlWzFdKX0pLmpvaW4oIiBhbmQgIik6ZX1mdW5jdGlvbiBhKGUpe3ZhciB0PW5ldyBPLG49bmV3IE1hcDtyZXR1cm57U2VsZWN0aW9uU2V0OmZ1bmN0aW9uKHIpe3MoZSxuLHQsZS5nZXRQYXJlbnRUeXBlKCkscikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9blswXSxvPW5bMV0sYT10WzFdLHM9dFsyXTtyZXR1cm4gZS5yZXBvcnRFcnJvcihuZXcgRS5HcmFwaFFMRXJyb3IoaShyLG8pLGEuY29uY2F0KHMpKSl9KX19fWZ1bmN0aW9uIHMoZSx0LG4scixpKXt2YXIgbz1bXSxhPXkoZSx0LHIsaSkscz1hWzBdLGw9YVsxXTtwKGUsbyx0LG4scyk7Zm9yKHZhciBmPTA7ZjxsLmxlbmd0aDtmKyspe3UoZSxvLHQsbiwhMSxzLGxbZl0pO2Zvcih2YXIgZD1mKzE7ZDxsLmxlbmd0aDtkKyspYyhlLG8sdCxuLCExLGxbZl0sbFtkXSl9cmV0dXJuIG99ZnVuY3Rpb24gdShlLHQsbixyLGksbyxhKXt2YXIgcz1lLmdldEZyYWdtZW50KGEpO2lmKHMpe3ZhciBjPXYoZSxuLHMpLGw9Y1swXSxwPWNbMV07ZihlLHQsbixyLGksbyxsKTtmb3IodmFyIGQ9MDtkPHAubGVuZ3RoO2QrKyl1KGUsdCxuLHIsaSxvLHBbZF0pfX1mdW5jdGlvbiBjKGUsdCxuLHIsaSxvLGEpe3ZhciBzPWUuZ2V0RnJhZ21lbnQobyksdT1lLmdldEZyYWdtZW50KGEpO2lmKHMmJnUmJnMhPT11JiYhci5oYXMobyxhLGkpKXtyLmFkZChvLGEsaSk7dmFyIGw9dihlLG4scykscD1sWzBdLGQ9bFsxXSxoPXYoZSxuLHUpLG09aFswXSxnPWhbMV07ZihlLHQsbixyLGkscCxtKTtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyljKGUsdCxuLHIsaSxvLGdbeV0pO2Zvcih2YXIgYj0wO2I8ZC5sZW5ndGg7YisrKWMoZSx0LG4scixpLGRbYl0sYSl9fWZ1bmN0aW9uIGwoZSx0LG4scixpLG8sYSxzKXt2YXIgbD1bXSxwPXkoZSx0LGksbyksZD1wWzBdLGg9cFsxXSxtPXkoZSx0LGEscyksZz1tWzBdLHY9bVsxXTtmKGUsbCx0LG4scixkLGcpO2Zvcih2YXIgYj0wO2I8di5sZW5ndGg7YisrKXUoZSxsLHQsbixyLGQsdltiXSk7Zm9yKHZhciB4PTA7eDxoLmxlbmd0aDt4KyspdShlLGwsdCxuLHIsZyxoW3hdKTtmb3IodmFyIEM9MDtDPGgubGVuZ3RoO0MrKylmb3IodmFyIEU9MDtFPHYubGVuZ3RoO0UrKyljKGUsbCx0LG4scixoW0NdLHZbRV0pO3JldHVybiBsfWZ1bmN0aW9uIHAoZSx0LG4scixpKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPWlbb107aWYoYS5sZW5ndGg+MSlmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylmb3IodmFyIHU9cysxO3U8YS5sZW5ndGg7dSsrKXt2YXIgYz1kKGUsbixyLCExLG8sYVtzXSxhW3VdKTtjJiZ0LnB1c2goYyl9fSl9ZnVuY3Rpb24gZihlLHQsbixyLGksbyxhKXtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciB1PWFbc107aWYodSlmb3IodmFyIGM9b1tzXSxsPTA7bDxjLmxlbmd0aDtsKyspZm9yKHZhciBwPTA7cDx1Lmxlbmd0aDtwKyspe3ZhciBmPWQoZSxuLHIsaSxzLGNbbF0sdVtwXSk7ZiYmdC5wdXNoKGYpfX0pfWZ1bmN0aW9uIGQoZSx0LG4scixpLG8sYSl7dmFyIHM9b1swXSx1PW9bMV0sYz1vWzJdLHA9YVswXSxmPWFbMV0sZD1hWzJdLG09cnx8cyE9PXAmJnMgaW5zdGFuY2VvZiBfLkdyYXBoUUxPYmplY3RUeXBlJiZwIGluc3RhbmNlb2YgXy5HcmFwaFFMT2JqZWN0VHlwZSx5PWMmJmMudHlwZSx2PWQmJmQudHlwZTtpZighbSl7dmFyIGI9dS5uYW1lLnZhbHVlLEM9Zi5uYW1lLnZhbHVlO2lmKGIhPT1DKXJldHVybltbaSxiKyIgYW5kICIrQysiIGFyZSBkaWZmZXJlbnQgZmllbGRzIl0sW3VdLFtmXV07aWYoIWgodS5hcmd1bWVudHN8fFtdLGYuYXJndW1lbnRzfHxbXSkpcmV0dXJuW1tpLCJ0aGV5IGhhdmUgZGlmZmVyaW5nIGFyZ3VtZW50cyJdLFt1XSxbZl1dfWlmKHkmJnYmJmcoeSx2KSlyZXR1cm5bW2ksInRoZXkgcmV0dXJuIGNvbmZsaWN0aW5nIHR5cGVzICIrU3RyaW5nKHkpKyIgYW5kICIrU3RyaW5nKHYpXSxbdV0sW2ZdXTt2YXIgRT11LnNlbGVjdGlvblNldCxEPWYuc2VsZWN0aW9uU2V0O2lmKEUmJkQpe3JldHVybiB4KGwoZSx0LG4sbSwoMCxfLmdldE5hbWVkVHlwZSkoeSksRSwoMCxfLmdldE5hbWVkVHlwZSkodiksRCksaSx1LGYpfX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGgmJmUuZXZlcnkoZnVuY3Rpb24oZSl7dmFyIG49KDAsdy5kZWZhdWx0KSh0LGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWUudmFsdWU9PT1lLm5hbWUudmFsdWV9KTtyZXR1cm4hIW4mJm0oZS52YWx1ZSxuLnZhbHVlKX0pfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4hZSYmIXR8fCgwLEEucHJpbnQpKGUpPT09KDAsQS5wcmludCkodCl9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgXy5HcmFwaFFMTGlzdD8hKHQgaW5zdGFuY2VvZiBfLkdyYXBoUUxMaXN0KXx8ZyhlLm9mVHlwZSx0Lm9mVHlwZSk6dCBpbnN0YW5jZW9mIF8uR3JhcGhRTExpc3Q/IShlIGluc3RhbmNlb2YgXy5HcmFwaFFMTGlzdCl8fGcoZS5vZlR5cGUsdC5vZlR5cGUpOmUgaW5zdGFuY2VvZiBfLkdyYXBoUUxOb25OdWxsPyEodCBpbnN0YW5jZW9mIF8uR3JhcGhRTE5vbk51bGwpfHxnKGUub2ZUeXBlLHQub2ZUeXBlKTp0IGluc3RhbmNlb2YgXy5HcmFwaFFMTm9uTnVsbD8hKGUgaW5zdGFuY2VvZiBfLkdyYXBoUUxOb25OdWxsKXx8ZyhlLm9mVHlwZSx0Lm9mVHlwZSk6ISghKDAsXy5pc0xlYWZUeXBlKShlKSYmISgwLF8uaXNMZWFmVHlwZSkodCkpJiZlIT09dH1mdW5jdGlvbiB5KGUsdCxuLHIpe3ZhciBpPXQuZ2V0KHIpO2lmKCFpKXt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtiKGUsbixyLG8sYSksaT1bbyxPYmplY3Qua2V5cyhhKV0sdC5zZXQocixpKX1yZXR1cm4gaX1mdW5jdGlvbiB2KGUsdCxuKXt2YXIgcj10LmdldChuLnNlbGVjdGlvblNldCk7cmV0dXJuIHJ8fHkoZSx0LCgwLFQudHlwZUZyb21BU1QpKGUuZ2V0U2NoZW1hKCksbi50eXBlQ29uZGl0aW9uKSxuLnNlbGVjdGlvblNldCl9ZnVuY3Rpb24gYihlLHQsbixyLGkpe2Zvcih2YXIgbz0wO288bi5zZWxlY3Rpb25zLmxlbmd0aDtvKyspe3ZhciBhPW4uc2VsZWN0aW9uc1tvXTtzd2l0Y2goYS5raW5kKXtjYXNlIGsuRklFTEQ6dmFyIHM9YS5uYW1lLnZhbHVlLHU9dm9pZCAwOyh0IGluc3RhbmNlb2YgXy5HcmFwaFFMT2JqZWN0VHlwZXx8dCBpbnN0YW5jZW9mIF8uR3JhcGhRTEludGVyZmFjZVR5cGUpJiYodT10LmdldEZpZWxkcygpW3NdKTt2YXIgYz1hLmFsaWFzP2EuYWxpYXMudmFsdWU6cztyW2NdfHwocltjXT1bXSkscltjXS5wdXNoKFt0LGEsdV0pO2JyZWFrO2Nhc2Ugay5GUkFHTUVOVF9TUFJFQUQ6aVthLm5hbWUudmFsdWVdPSEwO2JyZWFrO2Nhc2Ugay5JTkxJTkVfRlJBR01FTlQ6dmFyIGw9YS50eXBlQ29uZGl0aW9uO2IoZSxsPygwLFQudHlwZUZyb21BU1QpKGUuZ2V0U2NoZW1hKCksbCk6dCxhLnNlbGVjdGlvblNldCxyLGkpfX19ZnVuY3Rpb24geChlLHQsbixyKXtpZihlLmxlbmd0aD4wKXJldHVybltbdCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pXSxlLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXRbMV07cmV0dXJuIGUuY29uY2F0KG4pfSxbbl0pLGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dFsyXTtyZXR1cm4gZS5jb25jYXQobil9LFtyXSldfWZ1bmN0aW9uIEMoZSx0LG4scil7dmFyIGk9ZVt0XTtpfHwoaT1PYmplY3QuY3JlYXRlKG51bGwpLGVbdF09aSksaVtuXT1yfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZpZWxkc0NvbmZsaWN0TWVzc2FnZT1pLHQuT3ZlcmxhcHBpbmdGaWVsZHNDYW5CZU1lcmdlZD1hO3ZhciBFPW4oMyksRD1uKDQ1KSx3PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oRCksUz1uKDEwKSxrPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oUyksQT1uKDE5KSxfPW4oNiksVD1uKDI5KSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSx0aGlzLl9kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fZGF0YVtlXSxpPXImJnJbdF07cmV0dXJuIHZvaWQgMCE9PWkmJighMSE9PW58fCExPT09aSl9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQsbil7Qyh0aGlzLl9kYXRhLGUsdCxuKSxDKHRoaXMuX2RhdGEsdCxlLG4pfSxlfSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSBpbnB1dCBmaWVsZCBuYW1lZCAiJytlKyciLid9ZnVuY3Rpb24gaShlKXt2YXIgdD1bXSxuPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJue09iamVjdFZhbHVlOntlbnRlcjpmdW5jdGlvbigpe3QucHVzaChuKSxuPU9iamVjdC5jcmVhdGUobnVsbCl9LGxlYXZlOmZ1bmN0aW9uKCl7bj10LnBvcCgpfX0sT2JqZWN0RmllbGQ6ZnVuY3Rpb24odCl7dmFyIGk9dC5uYW1lLnZhbHVlO3JldHVybiBuW2ldP2UucmVwb3J0RXJyb3IobmV3IG8uR3JhcGhRTEVycm9yKHIoaSksW25baV0sdC5uYW1lXSkpOm5baV09dC5uYW1lLCExfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZHVwbGljYXRlSW5wdXRGaWVsZE1lc3NhZ2U9cix0LlVuaXF1ZUlucHV0RmllbGROYW1lcz1pO3ZhciBvPW4oMyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQpe2lmKHQgaW5zdGFuY2VvZiBwLkdyYXBoUUxOb25OdWxsKXJldHVybigwLGwuZGVmYXVsdCkoZSk/WydFeHBlY3RlZCAiJytTdHJpbmcodCkrJyIsIGZvdW5kIG51bGwuJ106aShlLHQub2ZUeXBlKTtpZigoMCxsLmRlZmF1bHQpKGUpKXJldHVybltdO2lmKHQgaW5zdGFuY2VvZiBwLkdyYXBoUUxMaXN0KXt2YXIgbj10Lm9mVHlwZTtpZigoMCxhLmlzQ29sbGVjdGlvbikoZSkpe3ZhciByPVtdO3JldHVybigwLGEuZm9yRWFjaCkoZSxmdW5jdGlvbihlLHQpe3IucHVzaC5hcHBseShyLGkoZSxuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIkluIGVsZW1lbnQgIyIrdCsiOiAiK2V9KSl9KSxyfXJldHVybiBpKGUsbil9aWYodCBpbnN0YW5jZW9mIHAuR3JhcGhRTElucHV0T2JqZWN0VHlwZSl7aWYoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpvKGUpKXx8bnVsbD09PWUpcmV0dXJuWydFeHBlY3RlZCAiJyt0Lm5hbWUrJyIsIGZvdW5kIG5vdCBhbiBvYmplY3QuJ107dmFyIHM9dC5nZXRGaWVsZHMoKSxjPVtdO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3NbZV18fGMucHVzaCgnSW4gZmllbGQgIicrZSsnIjogVW5rbm93biBmaWVsZC4nKX0pLE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49aShlW3RdLHNbdF0udHlwZSk7Yy5wdXNoLmFwcGx5KGMsbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuJ0luIGZpZWxkICInK3QrJyI6ICcrZX0pKX0pLGN9dCBpbnN0YW5jZW9mIHAuR3JhcGhRTFNjYWxhclR5cGV8fHQgaW5zdGFuY2VvZiBwLkdyYXBoUUxFbnVtVHlwZXx8KDAsdS5kZWZhdWx0KSgwLCJNdXN0IGJlIGlucHV0IHR5cGUiKTt0cnl7dmFyIGY9dC5wYXJzZVZhbHVlKGUpO2lmKCgwLGwuZGVmYXVsdCkoZikmJiF0LmlzVmFsaWRWYWx1ZShlKSlyZXR1cm5bJ0V4cGVjdGVkIHR5cGUgIicrdC5uYW1lKyciLCBmb3VuZCAnK0pTT04uc3RyaW5naWZ5KGUpKyIuIl19Y2F0Y2gobil7cmV0dXJuWydFeHBlY3RlZCB0eXBlICInK3QubmFtZSsnIiwgZm91bmQgJytKU09OLnN0cmluZ2lmeShlKSsiOiAiK24ubWVzc2FnZV19cmV0dXJuW119T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmlzVmFsaWRKU1ZhbHVlPWk7dmFyIGE9big0NCkscz1uKDEzKSx1PXIocyksYz1uKDM1KSxsPXIoYykscD1uKDYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0KXtpZih0LmtpbmQ9PT1DLkxJU1RfVFlQRSlyZXR1cm4gbmV3IHcuR3JhcGhRTExpc3QoaShlLHQudHlwZSkpO2lmKHQua2luZD09PUMuTk9OX05VTExfVFlQRSl7dmFyIG49aShlLHQudHlwZSk7cmV0dXJuIG4gaW5zdGFuY2VvZiB3LkdyYXBoUUxOb25OdWxsJiYoMCxkLmRlZmF1bHQpKDAsIk5vIG5lc3Rpbmcgbm9ubnVsbC4iKSxuZXcgdy5HcmFwaFFMTm9uTnVsbChuKX1yZXR1cm4gZX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1lO3Qua2luZD09PUMuTElTVF9UWVBFfHx0LmtpbmQ9PT1DLk5PTl9OVUxMX1RZUEU7KXQ9dC50eXBlO3JldHVybiB0fWZ1bmN0aW9uIGEoZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3IFMuR3JhcGhRTERpcmVjdGl2ZSh7bmFtZTplLm5hbWUudmFsdWUsZGVzY3JpcHRpb246dShlKSxsb2NhdGlvbnM6ZS5sb2NhdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSksYXJnczplLmFyZ3VtZW50cyYmQShlLmFyZ3VtZW50cyksYXN0Tm9kZTplfSl9ZnVuY3Rpb24gbihlKXt2YXIgdD1oKGUubmFtZS52YWx1ZSk7cmV0dXJuIHQgaW5zdGFuY2VvZiB3LkdyYXBoUUxPYmplY3RUeXBlfHwoMCxkLmRlZmF1bHQpKDAsIkFTVCBtdXN0IHByb3ZpZGUgb2JqZWN0IHR5cGUuIiksdH1mdW5jdGlvbiByKGUpe3JldHVybiBpKGgobyhlKS5uYW1lLnZhbHVlKSxlKX1mdW5jdGlvbiBhKGUpe3JldHVybigwLHcuYXNzZXJ0SW5wdXRUeXBlKShyKGUpKX1mdW5jdGlvbiBjKGUpe3JldHVybigwLHcuYXNzZXJ0T3V0cHV0VHlwZSkocihlKSl9ZnVuY3Rpb24gbChlKXt2YXIgdD1yKGUpO3JldHVybiB0IGluc3RhbmNlb2Ygdy5HcmFwaFFMT2JqZWN0VHlwZXx8KDAsZC5kZWZhdWx0KSgwLCJFeHBlY3RlZCBPYmplY3QgdHlwZS4iKSx0fWZ1bmN0aW9uIGYoZSl7dmFyIHQ9cihlKTtyZXR1cm4gdCBpbnN0YW5jZW9mIHcuR3JhcGhRTEludGVyZmFjZVR5cGV8fCgwLGQuZGVmYXVsdCkoMCwiRXhwZWN0ZWQgSW50ZXJmYWNlIHR5cGUuIiksdH1mdW5jdGlvbiBoKGUpe2lmKCFHW2VdKXtpZighUFtlXSl0aHJvdyBuZXcgRXJyb3IoJ1R5cGUgIicrZSsnIiBub3QgZm91bmQgaW4gZG9jdW1lbnQuJyk7R1tlXT15KFBbZV0pfXJldHVybiBHW2VdfWZ1bmN0aW9uIHkoZSl7c3dpdGNoKGUua2luZCl7Y2FzZSBDLk9CSkVDVF9UWVBFX0RFRklOSVRJT046cmV0dXJuIHYoZSk7Y2FzZSBDLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT046cmV0dXJuIF8oZSk7Y2FzZSBDLkVOVU1fVFlQRV9ERUZJTklUSU9OOnJldHVybiBUKGUpO2Nhc2UgQy5VTklPTl9UWVBFX0RFRklOSVRJT046cmV0dXJuIE8oZSk7Y2FzZSBDLlNDQUxBUl9UWVBFX0RFRklOSVRJT046cmV0dXJuIEYoZSk7Y2FzZSBDLklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT046cmV0dXJuIE4oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1R5cGUga2luZCAiJytlLmtpbmQrJyIgbm90IHN1cHBvcnRlZC4nKX19ZnVuY3Rpb24gdihlKXt2YXIgdD1lLm5hbWUudmFsdWU7cmV0dXJuIG5ldyB3LkdyYXBoUUxPYmplY3RUeXBlKHtuYW1lOnQsZGVzY3JpcHRpb246dShlKSxmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm4gYihlKX0saW50ZXJmYWNlczpmdW5jdGlvbigpe3JldHVybiB4KGUpfSxhc3ROb2RlOmV9KX1mdW5jdGlvbiBiKGUpe3JldHVybigwLG0uZGVmYXVsdCkoZS5maWVsZHMsZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZS52YWx1ZX0sZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6YyhlLnR5cGUpLGRlc2NyaXB0aW9uOnUoZSksYXJnczpBKGUuYXJndW1lbnRzKSxkZXByZWNhdGlvblJlYXNvbjpzKGUpLGFzdE5vZGU6ZX19KX1mdW5jdGlvbiB4KGUpe3JldHVybiBlLmludGVyZmFjZXMmJmUuaW50ZXJmYWNlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSl9KX1mdW5jdGlvbiBBKGUpe3JldHVybigwLG0uZGVmYXVsdCkoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSxmdW5jdGlvbihlKXt2YXIgdD1hKGUudHlwZSk7cmV0dXJue3R5cGU6dCxkZXNjcmlwdGlvbjp1KGUpLGRlZmF1bHRWYWx1ZTooMCxnLnZhbHVlRnJvbUFTVCkoZS5kZWZhdWx0VmFsdWUsdCksYXN0Tm9kZTplfX0pfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIG5ldyB3LkdyYXBoUUxJbnRlcmZhY2VUeXBlKHtuYW1lOmUubmFtZS52YWx1ZSxkZXNjcmlwdGlvbjp1KGUpLGZpZWxkczpmdW5jdGlvbigpe3JldHVybiBiKGUpfSxhc3ROb2RlOmUscmVzb2x2ZVR5cGU6cH0pfWZ1bmN0aW9uIFQoZSl7cmV0dXJuIG5ldyB3LkdyYXBoUUxFbnVtVHlwZSh7bmFtZTplLm5hbWUudmFsdWUsZGVzY3JpcHRpb246dShlKSx2YWx1ZXM6KDAsbS5kZWZhdWx0KShlLnZhbHVlcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSxmdW5jdGlvbihlKXtyZXR1cm57ZGVzY3JpcHRpb246dShlKSxkZXByZWNhdGlvblJlYXNvbjpzKGUpLGFzdE5vZGU6ZX19KSxhc3ROb2RlOmV9KX1mdW5jdGlvbiBPKGUpe3JldHVybiBuZXcgdy5HcmFwaFFMVW5pb25UeXBlKHtuYW1lOmUubmFtZS52YWx1ZSxkZXNjcmlwdGlvbjp1KGUpLHR5cGVzOmUudHlwZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSkscmVzb2x2ZVR5cGU6cCxhc3ROb2RlOmV9KX1mdW5jdGlvbiBGKGUpe3JldHVybiBuZXcgdy5HcmFwaFFMU2NhbGFyVHlwZSh7bmFtZTplLm5hbWUudmFsdWUsZGVzY3JpcHRpb246dShlKSxhc3ROb2RlOmUsc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHBhcnNlVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyc2VMaXRlcmFsOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSl9ZnVuY3Rpb24gTihlKXtyZXR1cm4gbmV3IHcuR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7bmFtZTplLm5hbWUudmFsdWUsZGVzY3JpcHRpb246dShlKSxmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm4gQShlLmZpZWxkcyl9LGFzdE5vZGU6ZX0pfWlmKCFlfHxlLmtpbmQhPT1DLkRPQ1VNRU5UKXRocm93IG5ldyBFcnJvcigiTXVzdCBwcm92aWRlIGEgZG9jdW1lbnQgYXN0LiIpO2Zvcih2YXIgST12b2lkIDAsTD1bXSxQPU9iamVjdC5jcmVhdGUobnVsbCksTT1bXSxqPTA7ajxlLmRlZmluaXRpb25zLmxlbmd0aDtqKyspe3ZhciBSPWUuZGVmaW5pdGlvbnNbal07c3dpdGNoKFIua2luZCl7Y2FzZSBDLlNDSEVNQV9ERUZJTklUSU9OOmlmKEkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHByb3ZpZGUgb25seSBvbmUgc2NoZW1hIGRlZmluaXRpb24uIik7ST1SO2JyZWFrO2Nhc2UgQy5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OOmNhc2UgQy5PQkpFQ1RfVFlQRV9ERUZJTklUSU9OOmNhc2UgQy5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OOmNhc2UgQy5FTlVNX1RZUEVfREVGSU5JVElPTjpjYXNlIEMuVU5JT05fVFlQRV9ERUZJTklUSU9OOmNhc2UgQy5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OOnZhciBCPVIubmFtZS52YWx1ZTtpZihQW0JdKXRocm93IG5ldyBFcnJvcignVHlwZSAiJytCKyciIHdhcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLicpO0wucHVzaChSKSxQW0JdPVI7YnJlYWs7Y2FzZSBDLkRJUkVDVElWRV9ERUZJTklUSU9OOk0ucHVzaChSKX19dmFyICQ9dm9pZCAwLFU9dm9pZCAwLHo9dm9pZCAwO2lmKEk/SS5vcGVyYXRpb25UeXBlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZS5uYW1lLnZhbHVlO2lmKCJxdWVyeSI9PT1lLm9wZXJhdGlvbil7aWYoJCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgcHJvdmlkZSBvbmx5IG9uZSBxdWVyeSB0eXBlIGluIHNjaGVtYS4iKTtpZighUFt0XSl0aHJvdyBuZXcgRXJyb3IoJ1NwZWNpZmllZCBxdWVyeSB0eXBlICInK3QrJyIgbm90IGZvdW5kIGluIGRvY3VtZW50LicpOyQ9dH1lbHNlIGlmKCJtdXRhdGlvbiI9PT1lLm9wZXJhdGlvbil7aWYoVSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgcHJvdmlkZSBvbmx5IG9uZSBtdXRhdGlvbiB0eXBlIGluIHNjaGVtYS4iKTtpZighUFt0XSl0aHJvdyBuZXcgRXJyb3IoJ1NwZWNpZmllZCBtdXRhdGlvbiB0eXBlICInK3QrJyIgbm90IGZvdW5kIGluIGRvY3VtZW50LicpO1U9dH1lbHNlIGlmKCJzdWJzY3JpcHRpb24iPT09ZS5vcGVyYXRpb24pe2lmKHopdGhyb3cgbmV3IEVycm9yKCJNdXN0IHByb3ZpZGUgb25seSBvbmUgc3Vic2NyaXB0aW9uIHR5cGUgaW4gc2NoZW1hLiIpO2lmKCFQW3RdKXRocm93IG5ldyBFcnJvcignU3BlY2lmaWVkIHN1YnNjcmlwdGlvbiB0eXBlICInK3QrJyIgbm90IGZvdW5kIGluIGRvY3VtZW50LicpO3o9dH19KTooUC5RdWVyeSYmKCQ9IlF1ZXJ5IiksUC5NdXRhdGlvbiYmKFU9Ik11dGF0aW9uIiksUC5TdWJzY3JpcHRpb24mJih6PSJTdWJzY3JpcHRpb24iKSksISQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHByb3ZpZGUgc2NoZW1hIGRlZmluaXRpb24gd2l0aCBxdWVyeSB0eXBlIG9yIGEgdHlwZSBuYW1lZCBRdWVyeS4iKTt2YXIgRz17U3RyaW5nOkQuR3JhcGhRTFN0cmluZyxJbnQ6RC5HcmFwaFFMSW50LEZsb2F0OkQuR3JhcGhRTEZsb2F0LEJvb2xlYW46RC5HcmFwaFFMQm9vbGVhbixJRDpELkdyYXBoUUxJRCxfX1NjaGVtYTprLl9fU2NoZW1hLF9fRGlyZWN0aXZlOmsuX19EaXJlY3RpdmUsX19EaXJlY3RpdmVMb2NhdGlvbjprLl9fRGlyZWN0aXZlTG9jYXRpb24sX19UeXBlOmsuX19UeXBlLF9fRmllbGQ6ay5fX0ZpZWxkLF9fSW5wdXRWYWx1ZTprLl9fSW5wdXRWYWx1ZSxfX0VudW1WYWx1ZTprLl9fRW51bVZhbHVlLF9fVHlwZUtpbmQ6ay5fX1R5cGVLaW5kfSxWPUwubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBoKGUubmFtZS52YWx1ZSl9KSxxPU0ubWFwKHQpO3JldHVybiBxLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInNraXAiPT09ZS5uYW1lfSl8fHEucHVzaChTLkdyYXBoUUxTa2lwRGlyZWN0aXZlKSxxLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuImluY2x1ZGUiPT09ZS5uYW1lfSl8fHEucHVzaChTLkdyYXBoUUxJbmNsdWRlRGlyZWN0aXZlKSxxLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuImRlcHJlY2F0ZWQiPT09ZS5uYW1lfSl8fHEucHVzaChTLkdyYXBoUUxEZXByZWNhdGVkRGlyZWN0aXZlKSxuZXcgRS5HcmFwaFFMU2NoZW1hKHtxdWVyeTpuKFBbJF0pLG11dGF0aW9uOlU/bihQW1VdKTpudWxsLHN1YnNjcmlwdGlvbjp6P24oUFt6XSk6bnVsbCx0eXBlczpWLGRpcmVjdGl2ZXM6cSxhc3ROb2RlOkl9KX1mdW5jdGlvbiBzKGUpe3ZhciB0PSgwLGIuZ2V0RGlyZWN0aXZlVmFsdWVzKShTLkdyYXBoUUxEZXByZWNhdGVkRGlyZWN0aXZlLGUpO3JldHVybiB0JiZ0LnJlYXNvbn1mdW5jdGlvbiB1KGUpe3ZhciB0PWUubG9jO2lmKHQpe2Zvcih2YXIgbj1bXSxyPXZvaWQgMCxpPXQuc3RhcnRUb2tlbi5wcmV2O2kmJmkua2luZD09PXkuVG9rZW5LaW5kLkNPTU1FTlQmJmkubmV4dCYmaS5wcmV2JiZpLmxpbmUrMT09PWkubmV4dC5saW5lJiZpLmxpbmUhPT1pLnByZXYubGluZTspe3ZhciBvPVN0cmluZyhpLnZhbHVlKSxhPWwobyk7KHZvaWQgMD09PXJ8fGE8cikmJihyPWEpLG4ucHVzaChvKSxpPWkucHJldn1yZXR1cm4gbi5yZXZlcnNlKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKHIpfSkuam9pbigiXG4iKX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYSgoMCx2LnBhcnNlKShlKSl9ZnVuY3Rpb24gbChlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoJiYiICI9PT1lW3RdO3QrKyk7cmV0dXJuIHR9ZnVuY3Rpb24gcCgpe3Rocm93IG5ldyBFcnJvcigiR2VuZXJhdGVkIFNjaGVtYSBjYW5ub3QgdXNlIEludGVyZmFjZSBvciBVbmlvbiB0eXBlcyBmb3IgZXhlY3V0aW9uLiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmJ1aWxkQVNUU2NoZW1hPWEsdC5nZXREZXByZWNhdGlvblJlYXNvbj1zLHQuZ2V0RGVzY3JpcHRpb249dSx0LmJ1aWxkU2NoZW1hPWM7dmFyIGY9bigxMyksZD1yKGYpLGg9bigxMjApLG09cihoKSxnPW4oNTkpLHk9bigxMTApLHY9big4MCksYj1uKDExOSkseD1uKDEwKSxDPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oeCksRT1uKDI2KSxEPW4oMzIpLHc9big2KSxTPW4oMjcpLGs9bigyOCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT1lKXJldHVybiEwO2lmKE9iamVjdCh1LmEpKGUpJiYoT2JqZWN0KHMuYSkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUuc3BsaWNlfHxPYmplY3QoYy5hKShlKXx8T2JqZWN0KHAuYSkoZSl8fE9iamVjdChhLmEpKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9T2JqZWN0KG8uYSkoZSk7aWYodD09Znx8dD09ZClyZXR1cm4hZS5zaXplO2lmKE9iamVjdChsLmEpKGUpKXJldHVybiFPYmplY3QoaS5hKShlKS5sZW5ndGg7Zm9yKHZhciBuIGluIGUpaWYobS5jYWxsKGUsbikpcmV0dXJuITE7cmV0dXJuITB9dmFyIGk9bigyMTApLG89bigyMTIpLGE9bigyMTUpLHM9big0NyksdT1uKDEyMiksYz1uKDIxNyksbD1uKDIxMSkscD1uKDIxOCksZj0iW29iamVjdCBNYXBdIixkPSJbb2JqZWN0IFNldF0iLGg9T2JqZWN0LnByb3RvdHlwZSxtPWguaGFzT3duUHJvcGVydHk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZighT2JqZWN0KGkuYSkoZSkpcmV0dXJuIE9iamVjdChvLmEpKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBPYmplY3QoZSkpcy5jYWxsKGUsbikmJiJjb25zdHJ1Y3RvciIhPW4mJnQucHVzaChuKTtyZXR1cm4gdH12YXIgaT1uKDIxMSksbz1uKDQxMCksYT1PYmplY3QucHJvdG90eXBlLHM9YS5oYXNPd25Qcm9wZXJ0eTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxpKX12YXIgaT1PYmplY3QucHJvdG90eXBlO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDExKSxpPW4oNDE2KSxvPW4oNDE3KSxhPW4oNDE4KSxzPW4oMjE0KSx1PW4oMzMpLGM9bigyMTMpLGw9T2JqZWN0KGMuYSkoci5hKSxwPU9iamVjdChjLmEpKGkuYSksZj1PYmplY3QoYy5hKShvLmEpLGQ9T2JqZWN0KGMuYSkoYS5hKSxoPU9iamVjdChjLmEpKHMuYSksbT11LmE7KHIuYSYmIltvYmplY3QgRGF0YVZpZXddIiE9bShuZXcgci5hKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxpLmEmJiJbb2JqZWN0IE1hcF0iIT1tKG5ldyBpLmEpfHxvLmEmJiJbb2JqZWN0IFByb21pc2VdIiE9bShvLmEucmVzb2x2ZSgpKXx8YS5hJiYiW29iamVjdCBTZXRdIiE9bShuZXcgYS5hKXx8cy5hJiYiW29iamVjdCBXZWFrTWFwXSIhPW0obmV3IHMuYSkpJiYobT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QodS5hKShlKSxuPSJbb2JqZWN0IE9iamVjdF0iPT10P2UuY29uc3RydWN0b3I6dm9pZCAwLHI9bj9PYmplY3QoYy5hKShuKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIGw6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgTWFwXSI7Y2FzZSBmOnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIGQ6cmV0dXJuIltvYmplY3QgU2V0XSI7Y2FzZSBoOnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gdH0pLHQuYT1tfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBvLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaChlKXt9fXJldHVybiIifXZhciBpPUZ1bmN0aW9uLnByb3RvdHlwZSxvPWkudG9TdHJpbmc7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0OSksaT1uKDIxKSxvPU9iamVjdChyLmEpKGkuYSwiV2Vha01hcCIpO3QuYT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDE5KSxpPW4oMzEpLG89T2JqZWN0LnByb3RvdHlwZSxhPW8uaGFzT3duUHJvcGVydHkscz1vLnByb3BlcnR5SXNFbnVtZXJhYmxlLHU9T2JqZWN0KHIuYSkoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9yLmE6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpLmEpKGUpJiZhLmNhbGwoZSwiY2FsbGVlIikmJiFzLmNhbGwoZSwiY2FsbGVlIil9O3QuYT11fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PWl9dmFyIGk9OTAwNzE5OTI1NDc0MDk5MTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIHI9bigyMSksaT1uKDQyMCksbz0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGE9byYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxzPWEmJmEuZXhwb3J0cz09PW8sdT1zP3IuYS5CdWZmZXI6dm9pZCAwLGM9dT91LmlzQnVmZmVyOnZvaWQgMCxsPWN8fGkuYTt0LmE9bH0pLmNhbGwodCxuKDc5KShlKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MjEpLGk9bigyMTkpLG89bigyMjApLGE9by5hJiZvLmEuaXNUeXBlZEFycmF5LHM9YT9PYmplY3QoaS5hKShhKTpyLmE7dC5hPXN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXt2YXIgcj1uKDE2NCksaT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLG89aSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxhPW8mJm8uZXhwb3J0cz09PWkscz1hJiZyLmEucHJvY2Vzcyx1PWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW8mJm8ucmVxdWlyZSYmby5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHMmJnMuYmluZGluZyYmcy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goZSl7fX0oKTt0LmE9dX0pLmNhbGwodCxuKDc5KShlKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxpPUFycmF5KHIpOysrbjxyOylpW25dPXQoZVtuXSxuLGUpO3JldHVybiBpfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PWV9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MjYpO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4tMT09PWUuaW5kZXhPZigiLyIpP09iamVjdChyLmEpKGUpOmUuc3BsaXQoIi8iKS5tYXAoci5hKS5qb2luKCIvIil9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkudGVzdChlKX12YXIgaT1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIik7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBPYmplY3Qoby5hKSh0KT90LmdldChlKTp0W2VdfXZhciBvPW4oODMpLGE9big2Mikscz1uKDEyNSk7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIG8oZSl7dmFyIHQ7aWYoIWgpcmV0dXJuIGU7dmFyIG49ZS50b1N0cmluZygpLnNwbGl0KGEuYSksaT1oLnNwbGl0KGEuYSk7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHIoaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIiK2UrcCt0fSl9KSkpLmpvaW4oYS5hKX1mdW5jdGlvbiB1KGUpe3JldHVybiBofHwhZj9lOiIiK2YrcCtlfXZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxsPWMubmFtZXNwYWNlLHA9dm9pZCAwPT09bD9hLmI6bCxmPWMucHJlZml4LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOiIiO3JldHVybiBPYmplY3Qocy5hKShuKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBhPXUobyhyKSkscz1pKHIsbik7ZShzKT90KHMse25hbWVzcGFjZTpwLHByZWZpeDpmfSxkLGEpOmRbYV09c30pLGR9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYzKSxpPW4oMjI3KSxvPWkuYT9mdW5jdGlvbihlLHQpe3JldHVybiBpLmEuc2V0KGUsdCksZX06ci5hO3QuYT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjE0KSxpPXIuYSYmbmV3IHIuYTt0LmE9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixiLHgsQyxFLEQsdyxTKXtmdW5jdGlvbiBrKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1BcnJheShkKSxtPWQ7bS0tOyloW21dPWFyZ3VtZW50c1ttXTtpZihPKXZhciBnPU9iamVjdChjLmEpKGspLHk9T2JqZWN0KGEuYSkoaCxnKTtpZihiJiYoaD1PYmplY3QoaS5hKShoLGIseCxPKSksQyYmKGg9T2JqZWN0KG8uYSkoaCxDLEUsTykpLGQtPXksTyYmZDxTKXt2YXIgdj1PYmplY3QocC5hKShoLGcpO3JldHVybiBPYmplY3QodS5hKShlLHQscixrLnBsYWNlaG9sZGVyLG4saCx2LEQsdyxTLWQpfXZhciBJPV8/bjp0aGlzLEw9VD9JW2VdOmU7cmV0dXJuIGQ9aC5sZW5ndGgsRD9oPU9iamVjdChsLmEpKGgsRCk6RiYmZD4xJiZoLnJldmVyc2UoKSxBJiZ3PGQmJihoLmxlbmd0aD13KSx0aGlzJiZ0aGlzIT09Zi5hJiZ0aGlzIGluc3RhbmNlb2YgayYmKEw9Tnx8T2JqZWN0KHMuYSkoTCkpLEwuYXBwbHkoSSxoKX12YXIgQT10JnksXz10JmQsVD10JmgsTz10JihtfGcpLEY9dCZ2LE49VD92b2lkIDA6T2JqZWN0KHMuYSkoZSk7cmV0dXJuIGt9dmFyIGk9bigyMzApLG89bigyMzEpLGE9big0NTMpLHM9big4NCksdT1uKDIzMiksYz1uKDI0MCksbD1uKDQ3MikscD1uKDEyOSksZj1uKDIxKSxkPTEsaD0yLG09OCxnPTE2LHk9MTI4LHY9NTEyO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7Zm9yKHZhciBvPS0xLGE9ZS5sZW5ndGgscz1uLmxlbmd0aCx1PS0xLGM9dC5sZW5ndGgsbD1pKGEtcywwKSxwPUFycmF5KGMrbCksZj0hcjsrK3U8YzspcFt1XT10W3VdO2Zvcig7KytvPHM7KShmfHxvPGEpJiYocFtuW29dXT1lW29dKTtmb3IoO2wtLTspcFt1KytdPWVbbysrXTtyZXR1cm4gcH12YXIgaT1NYXRoLm1heDt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe2Zvcih2YXIgbz0tMSxhPWUubGVuZ3RoLHM9LTEsdT1uLmxlbmd0aCxjPS0xLGw9dC5sZW5ndGgscD1pKGEtdSwwKSxmPUFycmF5KHArbCksZD0hcjsrK288cDspZltvXT1lW29dO2Zvcih2YXIgaD1vOysrYzxsOylmW2grY109dFtjXTtmb3IoOysrczx1OykoZHx8bzxhKSYmKGZbaCtuW3NdXT1lW28rK10pO3JldHVybiBmfXZhciBpPU1hdGgubWF4O3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixkLGgsbSxnLHksdil7dmFyIGI9dCZsLHg9Yj9tOnZvaWQgMCxDPWI/dm9pZCAwOm0sRT1iP2g6dm9pZCAwLEQ9Yj92b2lkIDA6aDt0fD1iP3A6ZiwodCY9fihiP2Y6cCkpJmN8fCh0Jj1+KHN8dSkpO3ZhciB3PVtlLHQsZCxFLHgsRCxDLGcseSx2XSxTPW4uYXBwbHkodm9pZCAwLHcpO3JldHVybiBPYmplY3QoaS5hKShlKSYmT2JqZWN0KG8uYSkoUyx3KSxTLnBsYWNlaG9sZGVyPXIsT2JqZWN0KGEuYSkoUyxlLHQpfXZhciBpPW4oNDU0KSxvPW4oMjM2KSxhPW4oMjM4KSxzPTEsdT0yLGM9NCxsPTgscD0zMixmPTY0O3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjI3KSxpPW4oNDU1KSxvPXIuYT9mdW5jdGlvbihlKXtyZXR1cm4gci5hLmdldChlKX06aS5hO3QuYT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189dm9pZCAwfXZhciBpPW4oMTI2KSxvPW4oMTI4KTtyLnByb3RvdHlwZT1PYmplY3QoaS5hKShvLmEucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj0tMSxyPWUubGVuZ3RoO2Zvcih0fHwodD1BcnJheShyKSk7KytuPHI7KXRbbl09ZVtuXTtyZXR1cm4gdH10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIyNiksaT1uKDIzNyksbz1PYmplY3QoaS5hKShyLmEpO3QuYT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9YSgpLHM9by0oci1uKTtpZihuPXIscz4wKXtpZigrK3Q+PWkpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19dmFyIGk9ODAwLG89MTYsYT1EYXRlLm5vdzt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj10KyIiO3JldHVybiBPYmplY3QoYS5hKShlLE9iamVjdChvLmEpKHIsT2JqZWN0KHMuYSkoT2JqZWN0KGkuYSkociksbikpKX12YXIgaT1uKDQ2MCksbz1uKDQ2MSksYT1uKDQ2Mikscz1uKDQ2Nik7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHQ9PT10P09iamVjdChhLmEpKGUsdCxuKTpPYmplY3QoaS5hKShlLG8uYSxuKX12YXIgaT1uKDQ2OSksbz1uKDQ3MCksYT1uKDQ3MSk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5wbGFjZWhvbGRlcn10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P2k6dCkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJm8udGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXZhciBpPTkwMDcxOTkyNTQ3NDA5OTEsbz0vXig/OjB8WzEtOV1cZCopJC87dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1PYmplY3QoaS5hKShlKSxuPXQlMTtyZXR1cm4gdD09PXQ/bj90LW46dDowfXZhciBpPW4oNDc1KTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmEsbj1hcmd1bWVudHNbMl0scj1lLnRvU3RyaW5nKCkuc3BsaXQoZi5hKTtwKCkoIU9iamVjdCh1LmEpKG4pLCJkZWZhdWx0U3RhdGUgZm9yIHJlZHVjZXIgaGFuZGxpbmcgIityLmpvaW4oIiwgIikrIiBzaG91bGQgYmUgZGVmaW5lZCIpLHAoKShPYmplY3QoaS5hKSh0KXx8T2JqZWN0KG8uYSkodCksIkV4cGVjdGVkIHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbiBvciBvYmplY3Qgd2l0aCBuZXh0IGFuZCB0aHJvdyByZWR1Y2VycyIpO3ZhciBsPU9iamVjdChpLmEpKHQpP1t0LHRdOlt0Lm5leHQsdC50aHJvd10ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qocy5hKShlKT9hLmE6ZX0pLGg9ZChsLDIpLG09aFswXSxnPWhbMV07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm4sdD1hcmd1bWVudHNbMV0saT10LnR5cGU7cmV0dXJuIGkmJk9iamVjdChjLmEpKHIsaS50b1N0cmluZygpKT8oITA9PT10LmVycm9yP2c6bSkoZSx0KTplfX10LmE9cjt2YXIgaT1uKDQ4KSxvPW4oNDEpLGE9big2Mykscz1uKDIyMiksdT1uKDQ3NyksYz1uKDQ3OCksbD1uKDIwKSxwPW4ubihsKSxmPW4oNjIpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49W10scj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGE9cy5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKGEudmFsdWUpLCF0fHxuLmxlbmd0aCE9PXQpO3I9ITApO31jYXRjaChlKXtpPSEwLG89ZX1maW5hbGx5e3RyeXshciYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiBufXJldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZSh0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIkBAcmVkdXgvSU5JVCI9PT1lLnR5cGU/ImluaXRpYWxTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUiOiJwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlciJ9LGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0UXVlcnlUeXBlcz1mdW5jdGlvbihlKXt2YXIgdD0hMSxuPSExLHI9ITEsaT1udWxsO3JldHVybiBlJiZlLmRlZmluaXRpb25zJiZlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7aXx8KGk9ZS5uYW1lJiZlLm5hbWUudmFsdWUpLGl8fChpPWUuc2VsZWN0aW9uU2V0JiZlLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zJiZlLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zLmxlbmd0aD4wJiZlLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zWzBdLm5hbWUudmFsdWUpLCJzdWJzY3JpcHRpb24iPT09ZS5vcGVyYXRpb24mJih0PSEwKSwicXVlcnkiPT09ZS5vcGVyYXRpb24mJihuPSEwKSwibXV0YXRpb24iPT09ZS5vcGVyYXRpb24mJihyPSEwKX0pLHtmaXJzdE9wZXJhdGlvbk5hbWU6aSxzdWJzY3JpcHRpb246dCxxdWVyeTpuLG11dGF0aW9uOnJ9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hcnJheU1vdmU9dC5zb3J0YWJsZUhhbmRsZT10LnNvcnRhYmxlRWxlbWVudD10LnNvcnRhYmxlQ29udGFpbmVyPXQuU29ydGFibGVIYW5kbGU9dC5Tb3J0YWJsZUVsZW1lbnQ9dC5Tb3J0YWJsZUNvbnRhaW5lcj12b2lkIDA7dmFyIGk9big4Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFycmF5TW92ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXJyYXlNb3ZlfX0pO3ZhciBvPW4oNDkzKSxhPXIobykscz1uKDQ5NyksdT1yKHMpLGM9big0OTgpLGw9cihjKTt0LlNvcnRhYmxlQ29udGFpbmVyPWEuZGVmYXVsdCx0LlNvcnRhYmxlRWxlbWVudD11LmRlZmF1bHQsdC5Tb3J0YWJsZUhhbmRsZT1sLmRlZmF1bHQsdC5zb3J0YWJsZUNvbnRhaW5lcj1hLmRlZmF1bHQsdC5zb3J0YWJsZUVsZW1lbnQ9dS5kZWZhdWx0LHQuc29ydGFibGVIYW5kbGU9bC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oNDk0KSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMTQpLG89bigyMyksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gcih0LGUpLHR9KGkuUmVjb3JkKHtoaXN0b3J5OiExLGhlYWRlcnM6ITAsYWxsVGFiczohMCxzaGFyZVVybDpudWxsfSkpO3QuU2hhcmluZ1N0YXRlPWEsdC5kZWZhdWx0PW8uaGFuZGxlQWN0aW9ucyh7VE9HR0xFX1NIQVJFX0hJU1RPUlk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0KCJoaXN0b3J5IiwhZS5oaXN0b3J5KX0sVE9HR0xFX1NIQVJFX0hFQURFUlM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0KCJoZWFkZXJzIiwhZS5oZWFkZXJzKX0sVE9HR0xFX1NIQVJFX0FMTF9UQUJTOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNldCgiYWxsVGFicyIsIWUuYWxsVGFicyl9LFNFVF9TSEFSRV9VUkw6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQuc2hhcmVVcmw7cmV0dXJuIGUuc2V0KCJzaGFyZVVybCIsbil9fSxuZXcgYSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigxNCksbz1uKDIzKSxhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByKHQsZSksdH0oaS5SZWNvcmQoe2hpc3RvcnlPcGVuOiExLGZpeGVkRW5kcG9pbnQ6ITEsZW5kcG9pbnQ6IiIsY29uZmlnU3RyaW5nOiIiLGVudlZhcnM6e319KSk7dC5HZW5lcmFsU3RhdGU9YSx0LmRlZmF1bHQ9by5oYW5kbGVBY3Rpb25zKHtPUEVOX0hJU1RPUlk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0KCJoaXN0b3J5T3BlbiIsITApfSxDTE9TRV9ISVNUT1JZOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNldCgiaGlzdG9yeU9wZW4iLCExKX0sU0VUX0VORFBPSU5UX0RJU0FCTEVEOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnZhbHVlO3JldHVybiBlLnNldCgiZW5kcG9pbnREaXNhYmxlZCIsbil9LFNFVF9DT05GSUdfU1RSSU5HOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLmNvbmZpZ1N0cmluZztyZXR1cm4gZS5zZXQoImNvbmZpZ1N0cmluZyIsbil9fSxuZXcgYSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbmV3IHcuUm9vdFN0YXRlKHt3b3Jrc3BhY2VzOmkoZS53b3Jrc3BhY2VzKSxzZWxlY3RlZFdvcmtzcGFjZTplLnNlbGVjdGVkV29ya3NwYWNlLHNldHRpbmdzU3RyaW5nOncubm9ybWFsaXplU2V0dGluZ3NTdHJpbmcoZS5zZXR0aW5nc1N0cmluZyksYXBwSGlzdG9yeTpvKGUuYXBwSGlzdG9yeSksZ2VuZXJhbDptKGUuZ2VuZXJhbCl9KX1mdW5jdGlvbiBpKGUpe3JldHVybiBDLk1hcChELm1hcFZhbHVlcyhlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB3LldvcmtzcGFjZSh7ZG9jczphKGUuZG9jcyksc2Vzc2lvbnM6dShlLnNlc3Npb25zKSxzaGFyaW5nOmQoZS5zaGFyaW5nKSxoaXN0b3J5OmgoZS5oaXN0b3J5KX0pfSkpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG5ldyBTLkFwcEhpc3Rvcnkoe2l0ZW1zOkMuT3JkZXJlZE1hcChELm1hcFZhbHVlcyhlLml0ZW1zLGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUy5BcHBIaXN0b3J5SXRlbShlKX0pKX0pfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIEMuTWFwKEQubWFwVmFsdWVzKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2LkRvY3NTZXNzaW9uKHtkb2NzT3BlbjplLmRvY3NPcGVuLGtleU1vdmU6ZS5rZXlNb3ZlLGRvY3NXaWR0aDplLmRvY3NXaWR0aCxuYXZTdGFjazpzKGUubmF2U3RhY2spfSl9KSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gQy5MaXN0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBDLk1hcChlKX0pKX1mdW5jdGlvbiB1KGUpe3ZhciB0PWMoZS5zZXNzaW9ucyksbj1lLnNlbGVjdGVkU2Vzc2lvbklkJiYiIiE9PWUuc2VsZWN0ZWRTZXNzaW9uSWQ/ZS5zZWxlY3RlZFNlc3Npb25JZDp0LmZpcnN0KCkuaWQ7cmV0dXJuIG5ldyBiLlNlc3Npb25TdGF0ZSh7c2VsZWN0ZWRTZXNzaW9uSWQ6bixzZXNzaW9uczp0LHNlc3Npb25Db3VudDp0LnNpemUsaGVhZGVyczplLmhlYWRlcnN9KX1mdW5jdGlvbiBjKGUpe3JldHVybiBDLk9yZGVyZWRNYXAoRC5tYXBWYWx1ZXMoZSxmdW5jdGlvbihlKXtyZXR1cm4gbChlKX0pKX1mdW5jdGlvbiBsKGUpe3JldHVybiBuZXcgYi5TZXNzaW9uKGcoe30sZSx7cmVzcG9uc2VzOnAoZS5yZXNwb25zZXMpLG9wZXJhdGlvbnM6Qy5mcm9tSlMoZS5vcGVyYXRpb25zKSx2YXJpYWJsZVRvVHlwZTpDLk1hcChlLnZhcmlhYmxlVG9UeXBlKSxkYXRlOmUuZGF0ZT9uZXcgRGF0ZShlLmRhdGUpOnZvaWQgMCxjdXJyZW50UXVlcnlTdGFydFRpbWU6ZS5jdXJyZW50UXVlcnlTdGFydFRpbWU/bmV3IERhdGUoZS5jdXJyZW50UXVlcnlTdGFydFRpbWUpOnZvaWQgMCxjdXJyZW50UXVlcnlFbmRUaW1lOmUuY3VycmVudFF1ZXJ5RW5kVGltZT9uZXcgRGF0ZShlLmN1cnJlbnRRdWVyeUVuZFRpbWUpOnZvaWQgMCxuZXh0UXVlcnlTdGFydFRpbWU6ZS5uZXh0UXVlcnlTdGFydFRpbWU/bmV3IERhdGUoZS5uZXh0UXVlcnlTdGFydFRpbWUpOnZvaWQgMH0pKX1mdW5jdGlvbiBwKGUpe3JldHVybiBDLkxpc3QoZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNTY2hlbWFFcnJvcn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZihlKX0pKX1mdW5jdGlvbiBmKGUpe3JldHVybiBuZXcgYi5SZXNwb25zZVJlY29yZCh7cmVzdWx0SUQ6ZS5yZXN1bHRJRCxkYXRlOmUuZGF0ZSx0aW1lOm5ldyBEYXRlKGUudGltZSksaXNTY2hlbWFFcnJvcjplLmlzU2NoZW1hRXJyb3J8fCExfSl9ZnVuY3Rpb24gZChlKXt2YXIgdD0oZS5zaGFyZVVybCx5KGUsWyJzaGFyZVVybCJdKSk7cmV0dXJuIG5ldyB4LlNoYXJpbmdTdGF0ZSh0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBjKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIG5ldyBFLkdlbmVyYWxTdGF0ZShlKX12YXIgZz1mdW5jdGlvbigpe3JldHVybiBnPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0sZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHk9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylmb3IodmFyIGk9MCxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxyLmxlbmd0aDtpKyspdC5pbmRleE9mKHJbaV0pPDAmJihuW3JbaV1dPWVbcltpXV0pO3JldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHY9bigxMzApLGI9big4NSkseD1uKDI0OCksQz1uKDE0KSxFPW4oMjQ5KSxEPW4oNzQpLHc9bigxNyksUz1uKDI1MSk7dC5kZXNlcmlhbGl6ZVBlcnNpc3RlZFN0YXRlPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigxNCksbz1uKDIzKSxhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByKHQsZSksdH0oaS5SZWNvcmQoe2l0ZW1zOmkuT3JkZXJlZE1hcCgpfSkpO3QuQXBwSGlzdG9yeT1hO3ZhciBzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByKHQsZSksdH0oaS5SZWNvcmQoe3R5cGU6ImxvY2FsIixjb25maWdTdHJpbmc6dm9pZCAwLGNvbmZpZ1BhdGg6dm9pZCAwLGVuZHBvaW50OnZvaWQgMCxmb2xkZXJOYW1lOnZvaWQgMCxlbnY6dm9pZCAwLHBsYXRmb3JtVG9rZW46dm9pZCAwLGxhc3RPcGVuZWQ6bmV3IERhdGUsY29uZmlnOnZvaWQgMH0pKTt0LkFwcEhpc3RvcnlJdGVtPXMsdC5kZWZhdWx0PW8uaGFuZGxlQWN0aW9ucyh7U0VMRUNUX0FQUF9ISVNUT1JZX0lURU06ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQ7cmV0dXJuIGUuc2V0SW4oWyJpdGVtcyIsbi5pdGVtLnBhdGhdLG4uaXRlbSl9fSxuZXcgYSksdC5nZXRBcHBIaXN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcEhpc3Rvcnl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gMX1mdW5jdGlvbiBpKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaShlKTsibnVtYmVyIj09PXR5cGVvZiBlJiYoZT17bWF4OmV9KSxlfHwoZT17fSk7dmFyIHQ9dGhpc1tnXT1lLm1heDsoIXR8fCJudW1iZXIiIT09dHlwZW9mIHR8fHQ8PTApJiYodGhpc1tnXT0xLzApO3ZhciBuPWUubGVuZ3RofHxyOyJmdW5jdGlvbiIhPT10eXBlb2YgbiYmKG49ciksdGhpc1t2XT1uLHRoaXNbYl09ZS5zdGFsZXx8ITEsdGhpc1t4XT1lLm1heEFnZXx8MCx0aGlzW0NdPWUuZGlzcG9zZSx0aGlzW0VdPWUubm9EaXNwb3NlT25TZXR8fCExLHRoaXMucmVzZXQoKX1mdW5jdGlvbiBvKGUsdCxuLHIpe3ZhciBpPW4udmFsdWU7cyhlLGkpJiYoYyhlLG4pLGVbYl18fChpPXZvaWQgMCkpLGkmJnQuY2FsbChyLGkudmFsdWUsaS5rZXksZSl9ZnVuY3Rpb24gYShlLHQsbil7dmFyIHI9ZVt3XS5nZXQodCk7aWYocil7dmFyIGk9ci52YWx1ZTtzKGUsaSk/KGMoZSxyKSxlW2JdfHwoaT12b2lkIDApKTpuJiZlW0RdLnVuc2hpZnROb2RlKHIpLGkmJihpPWkudmFsdWUpfXJldHVybiBpfWZ1bmN0aW9uIHMoZSx0KXtpZighdHx8IXQubWF4QWdlJiYhZVt4XSlyZXR1cm4hMTt2YXIgbj1EYXRlLm5vdygpLXQubm93O3JldHVybiB0Lm1heEFnZT9uPnQubWF4QWdlOmVbeF0mJm4+ZVt4XX1mdW5jdGlvbiB1KGUpe2lmKGVbeV0+ZVtnXSlmb3IodmFyIHQ9ZVtEXS50YWlsO2VbeV0+ZVtnXSYmbnVsbCE9PXQ7KXt2YXIgbj10LnByZXY7YyhlLHQpLHQ9bn19ZnVuY3Rpb24gYyhlLHQpe2lmKHQpe3ZhciBuPXQudmFsdWU7ZVtDXSYmZVtDXShuLmtleSxuLnZhbHVlKSxlW3ldLT1uLmxlbmd0aCxlW3ddLmRlbGV0ZShuLmtleSksZVtEXS5yZW1vdmVOb2RlKHQpfX1mdW5jdGlvbiBsKGUsdCxuLHIsaSl7dGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9bix0aGlzLm5vdz1yLHRoaXMubWF4QWdlPWl8fDB9ZS5leHBvcnRzPWk7dmFyIHAsZj1uKDUwMyksZD1uKDI1MyksaD1uKDUwNyksbT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbDtwPW0/ZnVuY3Rpb24oZSl7cmV0dXJuIFN5bWJvbC5mb3IoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiJfIitlfTt2YXIgZz1wKCJtYXgiKSx5PXAoImxlbmd0aCIpLHY9cCgibGVuZ3RoQ2FsY3VsYXRvciIpLGI9cCgiYWxsb3dTdGFsZSIpLHg9cCgibWF4QWdlIiksQz1wKCJkaXNwb3NlIiksRT1wKCJub0Rpc3Bvc2VPblNldCIpLEQ9cCgibHJ1TGlzdCIpLHc9cCgiY2FjaGUiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIm1heCIse3NldDpmdW5jdGlvbihlKXsoIWV8fCJudW1iZXIiIT09dHlwZW9mIGV8fGU8PTApJiYoZT0xLzApLHRoaXNbZ109ZSx1KHRoaXMpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tnXX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwiYWxsb3dTdGFsZSIse3NldDpmdW5jdGlvbihlKXt0aGlzW2JdPSEhZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYl19LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIm1heEFnZSIse3NldDpmdW5jdGlvbihlKXsoIWV8fCJudW1iZXIiIT09dHlwZW9mIGV8fGU8MCkmJihlPTApLHRoaXNbeF09ZSx1KHRoaXMpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t4XX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwibGVuZ3RoQ2FsY3VsYXRvciIse3NldDpmdW5jdGlvbihlKXsiZnVuY3Rpb24iIT09dHlwZW9mIGUmJihlPXIpLGUhPT10aGlzW3ZdJiYodGhpc1t2XT1lLHRoaXNbeV09MCx0aGlzW0RdLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5sZW5ndGg9dGhpc1t2XShlLnZhbHVlLGUua2V5KSx0aGlzW3ldKz1lLmxlbmd0aH0sdGhpcykpLHUodGhpcyl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3ZdfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t5XX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwiaXRlbUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbRF0ubGVuZ3RofSxlbnVtZXJhYmxlOiEwfSksaS5wcm90b3R5cGUucmZvckVhY2g9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXM7Zm9yKHZhciBuPXRoaXNbRF0udGFpbDtudWxsIT09bjspe3ZhciByPW4ucHJldjtvKHRoaXMsZSxuLHQpLG49cn19LGkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXM7Zm9yKHZhciBuPXRoaXNbRF0uaGVhZDtudWxsIT09bjspe3ZhciByPW4ubmV4dDtvKHRoaXMsZSxuLHQpLG49cn19LGkucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tEXS50b0FycmF5KCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0sdGhpcyl9LGkucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzW0RdLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LHRoaXMpfSxpLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXNbQ10mJnRoaXNbRF0mJnRoaXNbRF0ubGVuZ3RoJiZ0aGlzW0RdLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpc1tDXShlLmtleSxlLnZhbHVlKX0sdGhpcyksdGhpc1t3XT1uZXcgZix0aGlzW0RdPW5ldyBoLHRoaXNbeV09MH0saS5wcm90b3R5cGUuZHVtcD1mdW5jdGlvbigpe3JldHVybiB0aGlzW0RdLm1hcChmdW5jdGlvbihlKXtpZighcyh0aGlzLGUpKXJldHVybntrOmUua2V5LHY6ZS52YWx1ZSxlOmUubm93KyhlLm1heEFnZXx8MCl9fSx0aGlzKS50b0FycmF5KCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9LGkucHJvdG90eXBlLmR1bXBMcnU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tEXX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbihlLHQpe3ZhciBuPSJMUlVDYWNoZSB7IixpPSExO3RoaXNbYl0mJihuKz0iXG4gIGFsbG93U3RhbGU6IHRydWUiLGk9ITApO3ZhciBvPXRoaXNbZ107byYmbyE9PTEvMCYmKGkmJihuKz0iLCIpLG4rPSJcbiAgbWF4OiAiK2QuaW5zcGVjdChvLHQpLGk9ITApO3ZhciBhPXRoaXNbeF07YSYmKGkmJihuKz0iLCIpLG4rPSJcbiAgbWF4QWdlOiAiK2QuaW5zcGVjdChhLHQpLGk9ITApO3ZhciB1PXRoaXNbdl07dSYmdSE9PXImJihpJiYobis9IiwiKSxuKz0iXG4gIGxlbmd0aDogIitkLmluc3BlY3QodGhpc1t5XSx0KSxpPSEwKTt2YXIgYz0hMTtyZXR1cm4gdGhpc1tEXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2M/bis9IixcbiAgIjooaSYmKG4rPSIsXG4iKSxjPSEwLG4rPSJcbiAgIik7dmFyIG89ZC5pbnNwZWN0KGUua2V5KS5zcGxpdCgiXG4iKS5qb2luKCJcbiAgIiksbD17dmFsdWU6ZS52YWx1ZX07ZS5tYXhBZ2UhPT1hJiYobC5tYXhBZ2U9ZS5tYXhBZ2UpLHUhPT1yJiYobC5sZW5ndGg9ZS5sZW5ndGgpLHModGhpcyxlKSYmKGwuc3RhbGU9ITApLGw9ZC5pbnNwZWN0KGwsdCkuc3BsaXQoIlxuIikuam9pbigiXG4gICIpLG4rPW8rIiA9PiAiK2x9KSwoY3x8aSkmJihuKz0iXG4iKSxuKz0ifSJ9LGkucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQsbil7bj1ufHx0aGlzW3hdO3ZhciByPW4/RGF0ZS5ub3coKTowLGk9dGhpc1t2XSh0LGUpO2lmKHRoaXNbd10uaGFzKGUpKXtpZihpPnRoaXNbZ10pcmV0dXJuIGModGhpcyx0aGlzW3ddLmdldChlKSksITE7dmFyIG89dGhpc1t3XS5nZXQoZSksYT1vLnZhbHVlO3JldHVybiB0aGlzW0NdJiYodGhpc1tFXXx8dGhpc1tDXShlLGEudmFsdWUpKSxhLm5vdz1yLGEubWF4QWdlPW4sYS52YWx1ZT10LHRoaXNbeV0rPWktYS5sZW5ndGgsYS5sZW5ndGg9aSx0aGlzLmdldChlKSx1KHRoaXMpLCEwfXZhciBzPW5ldyBsKGUsdCxpLHIsbik7cmV0dXJuIHMubGVuZ3RoPnRoaXNbZ10/KHRoaXNbQ10mJnRoaXNbQ10oZSx0KSwhMSk6KHRoaXNbeV0rPXMubGVuZ3RoLHRoaXNbRF0udW5zaGlmdChzKSx0aGlzW3ddLnNldChlLHRoaXNbRF0uaGVhZCksdSh0aGlzKSwhMCl9LGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXNbd10uaGFzKGUpJiYhcyh0aGlzLHRoaXNbd10uZ2V0KGUpLnZhbHVlKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMsZSwhMCl9LGkucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcyxlLCExKX0saS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tEXS50YWlsO3JldHVybiBlPyhjKHRoaXMsZSksZS52YWx1ZSk6bnVsbH0saS5wcm90b3R5cGUuZGVsPWZ1bmN0aW9uKGUpe2ModGhpcyx0aGlzW3ddLmdldChlKSl9LGkucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7dGhpcy5yZXNldCgpO2Zvcih2YXIgdD1EYXRlLm5vdygpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXSxpPXIuZXx8MDtpZigwPT09aSl0aGlzLnNldChyLmssci52KTtlbHNle3ZhciBvPWktdDtvPjAmJnRoaXMuc2V0KHIuayxyLnYsbyl9fX0saS5wcm90b3R5cGUucHJ1bmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXNbd10uZm9yRWFjaChmdW5jdGlvbih0LG4pe2EoZSxuLCExKX0pfX0sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIGkoZSxuKXt2YXIgcj17c2VlbjpbXSxzdHlsaXplOmF9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoci5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihyLmNvbG9ycz1hcmd1bWVudHNbM10pLG0obik/ci5zaG93SGlkZGVuPW46biYmdC5fZXh0ZW5kKHIsbiksQyhyLnNob3dIaWRkZW4pJiYoci5zaG93SGlkZGVuPSExKSxDKHIuZGVwdGgpJiYoci5kZXB0aD0yKSxDKHIuY29sb3JzKSYmKHIuY29sb3JzPSExKSxDKHIuY3VzdG9tSW5zcGVjdCkmJihyLmN1c3RvbUluc3BlY3Q9ITApLHIuY29sb3JzJiYoci5zdHlsaXplPW8pLHUocixlLHIuZGVwdGgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1pLnN0eWxlc1t0XTtyZXR1cm4gbj8iXHgxYlsiK2kuY29sb3JzW25dWzBdKyJtIitlKyJceDFiWyIraS5jb2xvcnNbbl1bMV0rIm0iOmV9ZnVuY3Rpb24gYShlLHQpe3JldHVybiBlfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe3RbZV09ITB9KSx0fWZ1bmN0aW9uIHUoZSxuLHIpe2lmKGUuY3VzdG9tSW5zcGVjdCYmbiYmayhuLmluc3BlY3QpJiZuLmluc3BlY3QhPT10Lmluc3BlY3QmJighbi5jb25zdHJ1Y3Rvcnx8bi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1uKSl7dmFyIGk9bi5pbnNwZWN0KHIsZSk7cmV0dXJuIGIoaSl8fChpPXUoZSxpLHIpKSxpfXZhciBvPWMoZSxuKTtpZihvKXJldHVybiBvO3ZhciBhPU9iamVjdC5rZXlzKG4pLG09cyhhKTtpZihlLnNob3dIaWRkZW4mJihhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pKSxTKG4pJiYoYS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fGEuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGwobik7aWYoMD09PWEubGVuZ3RoKXtpZihrKG4pKXt2YXIgZz1uLm5hbWU/IjogIituLm5hbWU6IiI7cmV0dXJuIGUuc3R5bGl6ZSgiW0Z1bmN0aW9uIitnKyJdIiwic3BlY2lhbCIpfWlmKEUobikpcmV0dXJuIGUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobiksInJlZ2V4cCIpO2lmKHcobikpcmV0dXJuIGUuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLCJkYXRlIik7aWYoUyhuKSlyZXR1cm4gbChuKX12YXIgeT0iIix2PSExLHg9WyJ7IiwifSJdO2lmKGgobikmJih2PSEwLHg9WyJbIiwiXSJdKSxrKG4pKXt5PSIgW0Z1bmN0aW9uIisobi5uYW1lPyI6ICIrbi5uYW1lOiIiKSsiXSJ9aWYoRShuKSYmKHk9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSksdyhuKSYmKHk9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwobikpLFMobikmJih5PSIgIitsKG4pKSwwPT09YS5sZW5ndGgmJighdnx8MD09bi5sZW5ndGgpKXJldHVybiB4WzBdK3kreFsxXTtpZihyPDApcmV0dXJuIEUobik/ZS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSwicmVnZXhwIik6ZS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTtlLnNlZW4ucHVzaChuKTt2YXIgQztyZXR1cm4gQz12P3AoZSxuLHIsbSxhKTphLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZihlLG4scixtLHQsdil9KSxlLnNlZW4ucG9wKCksZChDLHkseCl9ZnVuY3Rpb24gYyhlLHQpe2lmKEModCkpcmV0dXJuIGUuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoYih0KSl7dmFyIG49IiciK0pTT04uc3RyaW5naWZ5KHQpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIGUuc3R5bGl6ZShuLCJzdHJpbmciKX1yZXR1cm4gdih0KT9lLnN0eWxpemUoIiIrdCwibnVtYmVyIik6bSh0KT9lLnN0eWxpemUoIiIrdCwiYm9vbGVhbiIpOmcodCk/ZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH1mdW5jdGlvbiBsKGUpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSsiXSJ9ZnVuY3Rpb24gcChlLHQsbixyLGkpe2Zvcih2YXIgbz1bXSxhPTAscz10Lmxlbmd0aDthPHM7KythKUYodCxTdHJpbmcoYSkpP28ucHVzaChmKGUsdCxuLHIsU3RyaW5nKGEpLCEwKSk6by5wdXNoKCIiKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cZCskLyl8fG8ucHVzaChmKGUsdCxuLHIsaSwhMCkpfSksb31mdW5jdGlvbiBmKGUsdCxuLHIsaSxvKXt2YXIgYSxzLGM7aWYoYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSl8fHt2YWx1ZTp0W2ldfSxjLmdldD9zPWMuc2V0P2Uuc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOmUuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6Yy5zZXQmJihzPWUuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLEYocixpKXx8KGE9IlsiK2krIl0iKSxzfHwoZS5zZWVuLmluZGV4T2YoYy52YWx1ZSk8MD8ocz1nKG4pP3UoZSxjLnZhbHVlLG51bGwpOnUoZSxjLnZhbHVlLG4tMSkscy5pbmRleE9mKCJcbiIpPi0xJiYocz1vP3Muc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiIgICIrZX0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIiAgICIrZX0pLmpvaW4oIlxuIikpKTpzPWUuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksQyhhKSl7aWYobyYmaS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gczthPUpTT04uc3RyaW5naWZ5KCIiK2kpLGEubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oYT1hLnN1YnN0cigxLGEubGVuZ3RoLTIpLGE9ZS5zdHlsaXplKGEsIm5hbWUiKSk6KGE9YS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksYT1lLnN0eWxpemUoYSwic3RyaW5nIikpfXJldHVybiBhKyI6ICIrc31mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj0wO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiByKyssdC5pbmRleE9mKCJcbiIpPj0wJiZyKyssZSt0LnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9uWzBdKygiIj09PXQ/IiI6dCsiXG4gIikrIiAiK2Uuam9pbigiLFxuICAiKSsiICIrblsxXTpuWzBdK3QrIiAiK2Uuam9pbigiLCAiKSsiICIrblsxXX1mdW5jdGlvbiBoKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuImJvb2xlYW4iPT09dHlwZW9mIGV9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbnVsbD09PWV9ZnVuY3Rpb24geShlKXtyZXR1cm4gbnVsbD09ZX1mdW5jdGlvbiB2KGUpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIGV9ZnVuY3Rpb24gYihlKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlfWZ1bmN0aW9uIHgoZSl7cmV0dXJuInN5bWJvbCI9PT10eXBlb2YgZX1mdW5jdGlvbiBDKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIEUoZSl7cmV0dXJuIEQoZSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09XyhlKX1mdW5jdGlvbiBEKGUpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwhPT1lfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIEQoZSkmJiJbb2JqZWN0IERhdGVdIj09PV8oZSl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gRChlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1fKGUpfHxlIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBlfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIG51bGw9PT1lfHwiYm9vbGVhbiI9PT10eXBlb2YgZXx8Im51bWJlciI9PT10eXBlb2YgZXx8InN0cmluZyI9PT10eXBlb2YgZXx8InN5bWJvbCI9PT10eXBlb2YgZXx8InVuZGVmaW5lZCI9PT10eXBlb2YgZX1mdW5jdGlvbiBfKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZTwxMD8iMCIrZS50b1N0cmluZygxMCk6ZS50b1N0cmluZygxMCl9ZnVuY3Rpb24gTygpe3ZhciBlPW5ldyBEYXRlLHQ9W1QoZS5nZXRIb3VycygpKSxUKGUuZ2V0TWludXRlcygpKSxUKGUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltlLmdldERhdGUoKSxQW2UuZ2V0TW9udGgoKV0sdF0uam9pbigiICIpfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9dmFyIE49LyVbc2RqJV0vZzt0LmZvcm1hdD1mdW5jdGlvbihlKXtpZighYihlKSl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQucHVzaChpKGFyZ3VtZW50c1tuXSkpO3JldHVybiB0LmpvaW4oIiAiKX1mb3IodmFyIG49MSxyPWFyZ3VtZW50cyxvPXIubGVuZ3RoLGE9U3RyaW5nKGUpLnJlcGxhY2UoTixmdW5jdGlvbihlKXtpZigiJSUiPT09ZSlyZXR1cm4iJSI7aWYobj49bylyZXR1cm4gZTtzd2l0Y2goZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhyW24rK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIocltuKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHJbbisrXSl9Y2F0Y2goZSl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIGV9fSkscz1yW25dO248bztzPXJbKytuXSlnKHMpfHwhRChzKT9hKz0iICIrczphKz0iICIraShzKTtyZXR1cm4gYX0sdC5kZXByZWNhdGU9ZnVuY3Rpb24obixpKXtmdW5jdGlvbiBvKCl7aWYoIWEpe2lmKHIudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7ci50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxhPSEwfXJldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihDKGUucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVwcmVjYXRlKG4saSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PXIubm9EZXByZWNhdGlvbilyZXR1cm4gbjt2YXIgYT0hMTtyZXR1cm4gb307dmFyIEksTD17fTt0LmRlYnVnbG9nPWZ1bmN0aW9uKGUpe2lmKEMoSSkmJihJPU9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLFBVQkxJQ19VUkw6IiJ9KS5OT0RFX0RFQlVHfHwiIiksZT1lLnRvVXBwZXJDYXNlKCksIUxbZV0paWYobmV3IFJlZ0V4cCgiXFxiIitlKyJcXGIiLCJpIikudGVzdChJKSl7dmFyIG49ci5waWQ7TFtlXT1mdW5jdGlvbigpe3ZhciByPXQuZm9ybWF0LmFwcGx5KHQsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKCIlcyAlZDogJXMiLGUsbixyKX19ZWxzZSBMW2VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gTFtlXX0sdC5pbnNwZWN0PWksaS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGkuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sdC5pc0FycmF5PWgsdC5pc0Jvb2xlYW49bSx0LmlzTnVsbD1nLHQuaXNOdWxsT3JVbmRlZmluZWQ9eSx0LmlzTnVtYmVyPXYsdC5pc1N0cmluZz1iLHQuaXNTeW1ib2w9eCx0LmlzVW5kZWZpbmVkPUMsdC5pc1JlZ0V4cD1FLHQuaXNPYmplY3Q9RCx0LmlzRGF0ZT13LHQuaXNFcnJvcj1TLHQuaXNGdW5jdGlvbj1rLHQuaXNQcmltaXRpdmU9QSx0LmlzQnVmZmVyPW4oNTA1KTt2YXIgUD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3QubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLE8oKSx0LmZvcm1hdC5hcHBseSh0LGFyZ3VtZW50cykpfSx0LmluaGVyaXRzPW4oNTA2KSx0Ll9leHRlbmQ9ZnVuY3Rpb24oZSx0KXtpZighdHx8IUQodCkpcmV0dXJuIGU7Zm9yKHZhciBuPU9iamVjdC5rZXlzKHQpLHI9bi5sZW5ndGg7ci0tOyllW25bcl1dPXRbbltyXV07cmV0dXJuIGV9fSkuY2FsbCh0LG4oMTEpLG4oNTYpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big4KSxpPW4oMTcpO3QuZ2V0U2hhcmluZ1N0YXRlPXIuY3JlYXRlU2VsZWN0b3IoW2kuZ2V0U2VsZWN0ZWRXb3Jrc3BhY2VdLGZ1bmN0aW9uKGUpe3JldHVybiBlLnNoYXJpbmd9KTt2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4gci5jcmVhdGVTZWxlY3RvcihbdC5nZXRTaGFyaW5nU3RhdGVdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldChlKX0pfTt0LmdldFNoYXJpbmdIaXN0b3J5PW8oImhpc3RvcnkiKSx0LmdldFNoYXJpbmdIZWFkZXJzPW8oImhlYWRlcnMiKSx0LmdldFNoYXJpbmdBbGxUYWJzPW8oImFsbFRhYnMiKSx0LmdldFNoYXJlVXJsPW8oInNoYXJlVXJsIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLm9mZnNldFdpZHRoPD0wJiZlLm9mZnNldEhlaWdodDw9MDtpZih0JiYhZS5pbm5lckhUTUwpcmV0dXJuITA7dmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIHQ/InZpc2libGUiIT09bi5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpOiJub25lIj09bi5nZXRQcm9wZXJ0eVZhbHVlKCJkaXNwbGF5Iil9ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9ZTt0JiZ0IT09ZG9jdW1lbnQuYm9keTspe2lmKHIodCkpcmV0dXJuITE7dD10LnBhcmVudE5vZGV9cmV0dXJuITB9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4odS50ZXN0KG4pJiYhZS5kaXNhYmxlZHx8KCJhIj09PW4/ZS5ocmVmfHx0OnQpKSYmaShlKX1mdW5jdGlvbiBhKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO251bGw9PT10JiYodD12b2lkIDApO3ZhciBuPWlzTmFOKHQpO3JldHVybihufHx0Pj0wKSYmbyhlLCFuKX1mdW5jdGlvbiBzKGUpe3JldHVybltdLnNsaWNlLmNhbGwoZS5xdWVyeVNlbGVjdG9yQWxsKCIqIiksMCkuZmlsdGVyKGEpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9czt2YXIgdT0vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvO2UuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCFlfHwhZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJyZWFjdC1tb2RhbDogTm8gZWxlbWVudHMgd2VyZSBmb3VuZCBmb3Igc2VsZWN0b3IgIit0KyIuIil9ZnVuY3Rpb24gaShlKXt2YXIgdD1lO2lmKCJzdHJpbmciPT09dHlwZW9mIHQpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCk7cihuLHQpLHQ9Imxlbmd0aCJpbiBuP25bMF06bn1yZXR1cm4gZj10fHxmfWZ1bmN0aW9uIG8oZSl7cmV0dXJuISghZSYmIWYpfHwoKDAscC5kZWZhdWx0KSghMSxbInJlYWN0LW1vZGFsOiBBcHAgZWxlbWVudCBpcyBub3QgZGVmaW5lZC4iLCJQbGVhc2UgdXNlIGBNb2RhbC5zZXRBcHBFbGVtZW50KGVsKWAgb3Igc2V0IGBhcHBFbGVtZW50PXtlbH1gLiIsIlRoaXMgaXMgbmVlZGVkIHNvIHNjcmVlbiByZWFkZXJzIGRvbid0IHNlZSBtYWluIGNvbnRlbnQiLCJ3aGVuIG1vZGFsIGlzIG9wZW5lZC4gSXQgaXMgbm90IHJlY29tbWVuZGVkLCBidXQgeW91IGNhbiBvcHQtb3V0IiwiYnkgc2V0dGluZyBgYXJpYUhpZGVBcHA9e2ZhbHNlfWAuIl0uam9pbigiICIpKSwhMSl9ZnVuY3Rpb24gYShlKXtvKGUpJiYoZXx8Zikuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKX1mdW5jdGlvbiBzKGUpe28oZSkmJihlfHxmKS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9ZnVuY3Rpb24gdSgpe2Y9bnVsbH1mdW5jdGlvbiBjKCl7Zj1udWxsfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFzc2VydE5vZGVMaXN0PXIsdC5zZXRFbGVtZW50PWksdC52YWxpZGF0ZUVsZW1lbnQ9byx0LmhpZGU9YSx0LnNob3c9cyx0LmRvY3VtZW50Tm90UmVhZHlPclNTUlRlc3Rpbmc9dSx0LnJlc2V0Rm9yVGVzdGluZz1jO3ZhciBsPW4oMjUpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShsKSxmPW51bGx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2FuVXNlRE9NPXZvaWQgMDt2YXIgcj1uKDI1OCksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLG89aS5kZWZhdWx0LGE9by5jYW5Vc2VET00/d2luZG93LkhUTUxFbGVtZW50Ont9O3QuY2FuVXNlRE9NPW8uY2FuVXNlRE9NO3QuZGVmYXVsdD1hfSxmdW5jdGlvbihlLHQsbil7dmFyIHI7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBpPSEoInVuZGVmaW5lZCI9PT10eXBlb2Ygd2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLG89e2NhblVzZURPTTppLGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPT10eXBlb2YgV29ya2VyLGNhblVzZUV2ZW50TGlzdGVuZXJzOmkmJiEoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiYhd2luZG93LmF0dGFjaEV2ZW50KSxjYW5Vc2VWaWV3cG9ydDppJiYhIXdpbmRvdy5zY3JlZW59O3ZvaWQgMCE9PShyPWZ1bmN0aW9uKCl7cmV0dXJuIG99LmNhbGwodCxuLHQsZSkpJiYoZS5leHBvcnRzPXIpfSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE3KTt0LmRhcmtDb2xvdXJzPXtncmVlbjoiIzI3YWU2MCIsZGFya0JsdWU6InJnYigyMywgNDIsIDU4KSIsZGFya0JsdWU1MDoicmdiYSgyMywgNDIsIDU4LCAwLjUpIixkYXJrQmx1ZTgwOiJyZ2JhKDIzLCA0MiwgNTgsIDAuOCkiLGRhcmtCbHVlNjA6InJnYmEoMjMsIDQyLCA1OCwgMC42KSIsZGFya0JsdWUzMDoicmdiYSgyMywgNDIsIDU4LCAwLjMpIixkYXJrQmx1ZTIwOiJyZ2JhKDIzLCA0MiwgNTgsIDAuMikiLGRhcmtCbHVlMTA6InJnYmEoMjMsIDQyLCA1OCwgMC4xKSIsZGFya2VyQmx1ZToiIzBGMjAyRCIsZGFya2VzdEJsdWU6InJnYigxMSwyMCwyOCkiLHdoaXRlMTA6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIsd2hpdGUyMDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIix3aGl0ZTMwOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMykiLHdoaXRlNjA6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSIsd2hpdGU3MDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIix3aGl0ZTgwOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCkiLHdoaXRlOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDEpIixibGFjazAyOiJyZ2JhKDAsIDAsIDAsIDAuMDIpIixibGFjazA3OiJyZ2JhKDAsIDAsIDAsIDAuMDcpIixibGFjazA0OiJyZ2JhKDAsIDAsIDAsIDAuMDQpIixibGFjazEwOiJyZ2JhKDAsIDAsIDAsIDAuMSkiLGJsYWNrMzA6InJnYmEoMCwgMCwgMCwgMC4zKSIsYmxhY2s0MDoicmdiYSgwLCAwLCAwLCAwLjQpIixibGFjazUwOiJyZ2JhKDAsIDAsIDAsIDAuNSkiLHJlZDoiI2YyNWM1NCIsb3JhbmdlOiJyZ2JhKDI0MSwgMTQzLCAxLCAxKSIsYmx1ZToicmdiYSg0MiwgMTI2LCAyMTAsIDEpIixwdXJwbGU6InJnYigxNjQsIDMsIDExMSkiLHBhbGVUZXh0OiJyZ2JhKDAsIDAsIDAsIDAuNSkiLHBhbGVHcmV5OiIjZjNmNGY0IixsaWdodEdyZXk6IiNlZWVmZjAiLGxpZ2h0ZXJHcmV5OiIjZjZmN2Y3Iix0ZXh0OiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLHRleHRJbmFjdGl2ZToiIzU1NWU2NiJ9LHQubGlnaHRDb2xvdXJzPXtncmVlbjoiIzI3YWU2MCIsZGFya0JsdWU6InJnYigyMywgNDIsIDU4KSIsZGFya0JsdWU1MDoicmdiYSgyMywgNDIsIDU4LCAwLjUpIixkYXJrQmx1ZTgwOiJyZ2JhKDIzLCA0MiwgNTgsIDAuOCkiLGRhcmtCbHVlNjA6InJnYmEoMjMsIDQyLCA1OCwgMC42KSIsZGFya0JsdWUzMDoicmdiYSgyMywgNDIsIDU4LCAwLjMpIixkYXJrQmx1ZTIwOiJyZ2JhKDIzLCA0MiwgNTgsIDAuMikiLGRhcmtCbHVlMTA6InJnYmEoMjMsIDQyLCA1OCwgMC4xKSIsZGFya2VyQmx1ZToiIzBGMjAyRCIsZGFya2VzdEJsdWU6InJnYigxMSwyMCwyOCkiLHdoaXRlMTA6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIsd2hpdGUyMDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIix3aGl0ZTMwOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMykiLHdoaXRlNjA6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSIsd2hpdGU3MDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIix3aGl0ZTgwOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCkiLHdoaXRlOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDEpIixibGFjazAyOiJyZ2JhKDAsIDAsIDAsIDAuMDIpIixibGFjazA0OiJyZ2JhKDAsIDAsIDAsIDAuMDQpIixibGFjazEwOiJyZ2JhKDAsIDAsIDAsIDAuMSkiLGJsYWNrMDc6InJnYmEoMCwgMCwgMCwgMC4wNykiLGJsYWNrMzA6InJnYmEoMCwgMCwgMCwgMC4zKSIsYmxhY2s0MDoicmdiYSgwLCAwLCAwLCAwLjQpIixibGFjazUwOiJyZ2JhKDAsIDAsIDAsIDAuNSkiLHJlZDoiI2YyNWM1NCIsb3JhbmdlOiJyZ2JhKDI0MSwgMTQzLCAxLCAxKSIsYmx1ZToicmdiYSg0MiwgMTI2LCAyMTAsIDEpIixwdXJwbGU6InJnYigxNjQsIDMsIDExMSkiLHBhbGVUZXh0OiJyZ2JhKDAsIDAsIDAsIDAuNSkiLHBhbGVHcmV5OiIjZjNmNGY0IixsaWdodEdyZXk6IiNlZWVmZjAiLGxpZ2h0ZXJHcmV5OiIjZjZmN2Y3Iix0ZXh0OiJyZ2JhKDAsMCwwLC43KSIsdGV4dEluYWN0aXZlOiJyZ2JhKDAsMCwwLC4zKSJ9LHQuZGFya0VkaXRvckNvbG91cnM9e3Byb3BlcnR5OiJyZ2IoNDEsIDE4NSwgMTE1KSIsY29tbWVudDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIixwdW5jdHVhdGlvbjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpIixrZXl3b3JkOiJyZ2IoNDIsIDEyNiwgMjExKSIsZGVmOiJyZ2IoNTYsIDE4OSwgMTkzKSIscXVhbGlmaWVyOiIjMWM5MmE5IixhdHRyaWJ1dGU6InJnYigyNDcsIDExNiwgMTAyKSIsbnVtYmVyOiIjMjg4MmY5IixzdHJpbmc6IiNkNjQyOTIiLGJ1aWx0aW46IiNkNDc1MDkiLHN0cmluZzI6IiMwYjdmYzciLHZhcmlhYmxlOiJyZ2IoMTgxLCAzNCwgMTMwKSIsbWV0YToiI2IzMzA4NiIsYXRvbToicmdiKDI0OSwgMjMzLCAzNCkiLHdzOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCkiLHNlbGVjdGlvbjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIixjdXJzb3JDb2xvcjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpIix0ZXh0OiIjZmZmIix0ZXh0SW5hY3RpdmU6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSIsYmFja2dyb3VuZDoiIzA5MTQxYyIsc2lkZWJhclRvcDoiIzBmMjAyZCIsc2lkZWJhcjoiIzE3MmIzYSIsc2lkZWJhckJvdHRvbToiIzE3MmIzYSIsc2lkZWJhckl0ZW1BY3RpdmU6InJnYigyMywgNDIsIDU4KSIsc2lkZWJhckl0ZW1TaWRlOiIjMjdhZTYwIixzaWRlYmFySXRlbVNlc3Npb25zOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIix0YWI6IiMxNzJiM2EiLHRhYkluYWN0aXZlOiIjMGYyMDJkIix0YWJUZXh0OiIjZmZmIixuYXZpZ2F0aW9uQmFyOiIjMTcyYjNhIixuYXZpZ2F0aW9uQmFyVGV4dDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIixlZGl0b3JCYWNrZ3JvdW5kOiIjMGYyMDJkIixyZXN1bHRCYWNrZ3JvdW5kOiIjMTcyYjNhIixsZWZ0RHJhd2VyQmFja2dyb3VuZDoiIzBiMTkyNCIscmlnaHREcmF3ZXJCYWNrZ3JvdW5kOiIjMGIxOTI0IixkcmF3ZXJUZXh0OiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGRyYXdlclRleHRJbmFjdGl2ZToiIzU1NWU2NiIsZXhlY3V0ZUJ1dHRvbjoicmdiKDE4NSwgMTkxLCAxOTYpIixleGVjdXRlQnV0dG9uQm9yZGVyOiJyZ2IoMTEsIDIwLCAyOCkiLGV4ZWN1dGVCdXR0b25Ib3ZlcjoicmdiKDE5NSwgMjAxLCAyMDYpIixleGVjdXRlQnV0dG9uU3Vic2NyaXB0aW9uOiIjZjI1YzU0IixleGVjdXRlQnV0dG9uU3Vic2NyaXB0aW9uSG92ZXI6IiNmMzZjNjUiLGljb246InJnYig3NCwgODUsIDk1KSIsaWNvbkhvdmVyOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikiLHBvbGxpbmdJY29uOiJyZ2JhKDEzOSwgMTQ5LCAxNTYsIDEpIixwb2xsaW5nSWNvblNoYWRvdzoicmdiYSgxMzksIDE0OSwgMTU2LCAwLjQpIixidXR0b246IiMwRjIwMkQiLGJ1dHRvbkhvdmVyOiIjMTIyNTM1IixidXR0b25UZXh0OiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJ1dHRvbldvcmtzcGFjZToiI2I5YmZjNCIsYnV0dG9uV29ya3NwYWNlSG92ZXI6IiNhNGFjYjIiLGJ1dHRvbldvcmtzcGFjZVRleHQ6InJnYigyMywgNDIsIDU4KSIsY2lyY2xlOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCkiLHN1YnNjcmlwdGlvblRpbWVCb2FkZXJUb3A6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSIsc3Vic2NyaXB0aW9uVGltZVRleHQ6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSJ9LHQubGlnaHRFZGl0b3JDb2xvdXJzPXtwcm9wZXJ0eToiIzMyOGM4YyIsY29tbWVudDoicmdiYSgwLCAwLCAwLCAwLjMpIixwdW5jdHVhdGlvbjoicmdiYSgyMyw0Miw1OCwuOCkiLGtleXdvcmQ6IiMzNjZiNmIiLGRlZjoicmdiKDU2LCAxODksIDE5MykiLHF1YWxpZmllcjoiIzFjOTJhOSIsYXR0cmlidXRlOiIjYjU2NTMxIixudW1iZXI6IiMxZjZlZDY7IixzdHJpbmc6IiNkNjQyOTIiLGJ1aWx0aW46IiNkNDc1MDkiLHN0cmluZzI6IiMwYjdmYzciLHZhcmlhYmxlOiJyZ2IoMjM2LCA5NSwgMTAzKSIsbWV0YToiI2IzMzA4NiIsYXRvbToicmdiKDI0NSwgMTYwLCAwKSIsd3M6InJnYmEoMjMsIDQyLCA1OCwgMC44KSIsc2VsZWN0aW9uOiIjZDFlOWZkIixjdXJzb3JDb2xvcjoicmdiYSgwLCAwLCAwLCAwLjQpIix0ZXh0OiJyZ2JhKDAsIDAsIDAsIDAuNykiLHRleHRJbmFjdGl2ZToicmdiYSgwLCAwLCAwLCAwLjMpIixiYWNrZ3JvdW5kOiIjZGJkZWUwIixzaWRlYmFyVG9wOiIjZWVlZmYwIixzaWRlYmFyOiIjZWVlZmYwIixzaWRlYmFyQm90dG9tOiIjZjZmN2Y3IixzaWRlYmFySXRlbUFjdGl2ZToiI2Y2ZjdmNyIsc2lkZWJhckl0ZW1TaWRlOiIjMjdhZTYwIixzaWRlYmFySXRlbVNlc3Npb25zOiIjZGJkZWUwIix0YWI6IiNlZWVmZjAiLHRhYkluYWN0aXZlOiIjZTdlYWVjIix0YWJUZXh0OiJyZ2JhKDIzLCA0MiwgNTgsIC44KSIsbmF2aWdhdGlvbkJhcjoiI2VlZWZmMCIsbmF2aWdhdGlvbkJhclRleHQ6InJnYmEoMjMsIDQyLCA1OCwgMC44KSIsZWRpdG9yQmFja2dyb3VuZDoiI2Y2ZjdmNyIscmVzdWx0QmFja2dyb3VuZDoiI2VlZWZmMCIsbGVmdERyYXdlckJhY2tncm91bmQ6IiNlOWVhZWEiLHJpZ2h0RHJhd2VyQmFja2dyb3VuZDoiI2U1ZTdlNyIsZHJhd2VyVGV4dDoicmdiYSgwLCAwLCAwLCAwLjcpIixkcmF3ZXJUZXh0SW5hY3RpdmU6InJnYmEoMCwgMCwgMCwgMC4zKSIsZXhlY3V0ZUJ1dHRvbjoicmdiKDExNSwgMTI3LCAxMzYpIixleGVjdXRlQnV0dG9uQm9yZGVyOiIjZWVlZmYwIixleGVjdXRlQnV0dG9uSG92ZXI6IiIsZXhlY3V0ZUJ1dHRvblN1YnNjcmlwdGlvbjoiI2YyNWM1NCIsZXhlY3V0ZUJ1dHRvblN1YnNjcmlwdGlvbkhvdmVyOiIjZjM2YzY1IixpY29uOiJyZ2IoMTk0LCAyMDAsIDIwMykiLGljb25Ib3ZlcjoicmdiYSgyMywgNDIsIDU4LCAwLjYpIixwb2xsaW5nSWNvbjoicmdiYSgxMzksIDE0OSwgMTU2LCAxKSIscG9sbGluZ0ljb25TaGFkb3c6InJnYmEoMTM5LCAxNDksIDE1NiwgMC40KSIsYnV0dG9uOiIjZDhkYmRlIixidXR0b25Ib3ZlcjoicmdiYSgyMCwgMzcsIDUxLCAwLjIpIixidXR0b25UZXh0OiJyZ2JhKDIzLCA0MiwgNTgsIDAuOCkiLGJ1dHRvbldvcmtzcGFjZToicmdiKDE4NSwgMTkxLCAxOTYpIixidXR0b25Xb3Jrc3BhY2VIb3ZlcjoicmdiKDE1NywgMTY2LCAxNzMpIixidXR0b25Xb3Jrc3BhY2VUZXh0OiJyZ2IoMjM4LCAyMzksIDI0MCkiLGNpcmNsZToicmdiYSgyMyw0Miw1OCwuNCkiLHN1YnNjcmlwdGlvblRpbWVCb2FkZXJUb3A6InJnYmEoMjMsIDQyLCA1OCwgMC4yKSIsc3Vic2NyaXB0aW9uVGltZVRleHQ6InJnYmEoMjMsIDQyLCA1OCwgMC41KSJ9LHQuc2l6ZXM9e3NtYWxsNjoiNnB4IixzbWFsbDEwOiIxMHB4IixzbWFsbDEyOiIxMnB4IixzbWFsbDE2OiIxNnB4IixtZWRpdW0yNToiMjVweCIsZm9udExpZ2h0OiIzMDAiLGZvbnRTZW1pQm9sZDoiNjAwIixmb250VGlueToiMTJweCIsZm9udFNtYWxsOiIxNHB4Iixmb250TWVkaXVtOiIyMHB4IixzbWFsbFJhZGl1czoiMnB4In0sdC5zaG9ydGhhbmRzPXt9LHQudGhlbWU9e21vZGU6ImRhcmsiLGNvbG91cnM6dC5kYXJrQ29sb3VycyxzaXplczp0LnNpemVzLHNob3J0aGFuZHM6dC5zaG9ydGhhbmRzLGVkaXRvckNvbG91cnM6dC5kYXJrRWRpdG9yQ29sb3VycyxzZXR0aW5nczpyLmRlZmF1bHRTZXR0aW5nc319LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMCksaT1uKDE0KTt0LnRvSlM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5lbnRyaWVzKHQpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlW3RbMF1dPWkuaXNJbW11dGFibGUodFsxXSk/dFsxXS50b0pTKCk6dFsxXSxlfSx7fSk7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChlLG4pfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oMjYyKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e0FhY3V0ZToiXHhjMSIsYWFjdXRlOiJceGUxIixBYnJldmU6Ilx1MDEwMiIsYWJyZXZlOiJcdTAxMDMiLGFjOiJcdTIyM2UiLGFjZDoiXHUyMjNmIixhY0U6Ilx1MjIzZVx1MDMzMyIsQWNpcmM6Ilx4YzIiLGFjaXJjOiJceGUyIixhY3V0ZToiXHhiNCIsQWN5OiJcdTA0MTAiLGFjeToiXHUwNDMwIixBRWxpZzoiXHhjNiIsYWVsaWc6Ilx4ZTYiLGFmOiJcdTIwNjEiLEFmcjoiXHVkODM1XHVkZDA0IixhZnI6Ilx1ZDgzNVx1ZGQxZSIsQWdyYXZlOiJceGMwIixhZ3JhdmU6Ilx4ZTAiLGFsZWZzeW06Ilx1MjEzNSIsYWxlcGg6Ilx1MjEzNSIsQWxwaGE6Ilx1MDM5MSIsYWxwaGE6Ilx1MDNiMSIsQW1hY3I6Ilx1MDEwMCIsYW1hY3I6Ilx1MDEwMSIsYW1hbGc6Ilx1MmEzZiIsYW1wOiImIixBTVA6IiYiLGFuZGFuZDoiXHUyYTU1IixBbmQ6Ilx1MmE1MyIsYW5kOiJcdTIyMjciLGFuZGQ6Ilx1MmE1YyIsYW5kc2xvcGU6Ilx1MmE1OCIsYW5kdjoiXHUyYTVhIixhbmc6Ilx1MjIyMCIsYW5nZToiXHUyOWE0IixhbmdsZToiXHUyMjIwIixhbmdtc2RhYToiXHUyOWE4Iixhbmdtc2RhYjoiXHUyOWE5Iixhbmdtc2RhYzoiXHUyOWFhIixhbmdtc2RhZDoiXHUyOWFiIixhbmdtc2RhZToiXHUyOWFjIixhbmdtc2RhZjoiXHUyOWFkIixhbmdtc2RhZzoiXHUyOWFlIixhbmdtc2RhaDoiXHUyOWFmIixhbmdtc2Q6Ilx1MjIyMSIsYW5ncnQ6Ilx1MjIxZiIsYW5ncnR2YjoiXHUyMmJlIixhbmdydHZiZDoiXHUyOTlkIixhbmdzcGg6Ilx1MjIyMiIsYW5nc3Q6Ilx4YzUiLGFuZ3phcnI6Ilx1MjM3YyIsQW9nb246Ilx1MDEwNCIsYW9nb246Ilx1MDEwNSIsQW9wZjoiXHVkODM1XHVkZDM4Iixhb3BmOiJcdWQ4MzVcdWRkNTIiLGFwYWNpcjoiXHUyYTZmIixhcDoiXHUyMjQ4IixhcEU6Ilx1MmE3MCIsYXBlOiJcdTIyNGEiLGFwaWQ6Ilx1MjI0YiIsYXBvczoiJyIsQXBwbHlGdW5jdGlvbjoiXHUyMDYxIixhcHByb3g6Ilx1MjI0OCIsYXBwcm94ZXE6Ilx1MjI0YSIsQXJpbmc6Ilx4YzUiLGFyaW5nOiJceGU1IixBc2NyOiJcdWQ4MzVcdWRjOWMiLGFzY3I6Ilx1ZDgzNVx1ZGNiNiIsQXNzaWduOiJcdTIyNTQiLGFzdDoiKiIsYXN5bXA6Ilx1MjI0OCIsYXN5bXBlcToiXHUyMjRkIixBdGlsZGU6Ilx4YzMiLGF0aWxkZToiXHhlMyIsQXVtbDoiXHhjNCIsYXVtbDoiXHhlNCIsYXdjb25pbnQ6Ilx1MjIzMyIsYXdpbnQ6Ilx1MmExMSIsYmFja2Nvbmc6Ilx1MjI0YyIsYmFja2Vwc2lsb246Ilx1MDNmNiIsYmFja3ByaW1lOiJcdTIwMzUiLGJhY2tzaW06Ilx1MjIzZCIsYmFja3NpbWVxOiJcdTIyY2QiLEJhY2tzbGFzaDoiXHUyMjE2IixCYXJ2OiJcdTJhZTciLGJhcnZlZToiXHUyMmJkIixiYXJ3ZWQ6Ilx1MjMwNSIsQmFyd2VkOiJcdTIzMDYiLGJhcndlZGdlOiJcdTIzMDUiLGJicms6Ilx1MjNiNSIsYmJya3Ricms6Ilx1MjNiNiIsYmNvbmc6Ilx1MjI0YyIsQmN5OiJcdTA0MTEiLGJjeToiXHUwNDMxIixiZHF1bzoiXHUyMDFlIixiZWNhdXM6Ilx1MjIzNSIsYmVjYXVzZToiXHUyMjM1IixCZWNhdXNlOiJcdTIyMzUiLGJlbXB0eXY6Ilx1MjliMCIsYmVwc2k6Ilx1MDNmNiIsYmVybm91OiJcdTIxMmMiLEJlcm5vdWxsaXM6Ilx1MjEyYyIsQmV0YToiXHUwMzkyIixiZXRhOiJcdTAzYjIiLGJldGg6Ilx1MjEzNiIsYmV0d2VlbjoiXHUyMjZjIixCZnI6Ilx1ZDgzNVx1ZGQwNSIsYmZyOiJcdWQ4MzVcdWRkMWYiLGJpZ2NhcDoiXHUyMmMyIixiaWdjaXJjOiJcdTI1ZWYiLGJpZ2N1cDoiXHUyMmMzIixiaWdvZG90OiJcdTJhMDAiLGJpZ29wbHVzOiJcdTJhMDEiLGJpZ290aW1lczoiXHUyYTAyIixiaWdzcWN1cDoiXHUyYTA2IixiaWdzdGFyOiJcdTI2MDUiLGJpZ3RyaWFuZ2xlZG93bjoiXHUyNWJkIixiaWd0cmlhbmdsZXVwOiJcdTI1YjMiLGJpZ3VwbHVzOiJcdTJhMDQiLGJpZ3ZlZToiXHUyMmMxIixiaWd3ZWRnZToiXHUyMmMwIixia2Fyb3c6Ilx1MjkwZCIsYmxhY2tsb3plbmdlOiJcdTI5ZWIiLGJsYWNrc3F1YXJlOiJcdTI1YWEiLGJsYWNrdHJpYW5nbGU6Ilx1MjViNCIsYmxhY2t0cmlhbmdsZWRvd246Ilx1MjViZSIsYmxhY2t0cmlhbmdsZWxlZnQ6Ilx1MjVjMiIsYmxhY2t0cmlhbmdsZXJpZ2h0OiJcdTI1YjgiLGJsYW5rOiJcdTI0MjMiLGJsazEyOiJcdTI1OTIiLGJsazE0OiJcdTI1OTEiLGJsazM0OiJcdTI1OTMiLGJsb2NrOiJcdTI1ODgiLGJuZToiPVx1MjBlNSIsYm5lcXVpdjoiXHUyMjYxXHUyMGU1IixiTm90OiJcdTJhZWQiLGJub3Q6Ilx1MjMxMCIsQm9wZjoiXHVkODM1XHVkZDM5Iixib3BmOiJcdWQ4MzVcdWRkNTMiLGJvdDoiXHUyMmE1Iixib3R0b206Ilx1MjJhNSIsYm93dGllOiJcdTIyYzgiLGJveGJveDoiXHUyOWM5Iixib3hkbDoiXHUyNTEwIixib3hkTDoiXHUyNTU1Iixib3hEbDoiXHUyNTU2Iixib3hETDoiXHUyNTU3Iixib3hkcjoiXHUyNTBjIixib3hkUjoiXHUyNTUyIixib3hEcjoiXHUyNTUzIixib3hEUjoiXHUyNTU0Iixib3hoOiJcdTI1MDAiLGJveEg6Ilx1MjU1MCIsYm94aGQ6Ilx1MjUyYyIsYm94SGQ6Ilx1MjU2NCIsYm94aEQ6Ilx1MjU2NSIsYm94SEQ6Ilx1MjU2NiIsYm94aHU6Ilx1MjUzNCIsYm94SHU6Ilx1MjU2NyIsYm94aFU6Ilx1MjU2OCIsYm94SFU6Ilx1MjU2OSIsYm94bWludXM6Ilx1MjI5ZiIsYm94cGx1czoiXHUyMjllIixib3h0aW1lczoiXHUyMmEwIixib3h1bDoiXHUyNTE4Iixib3h1TDoiXHUyNTViIixib3hVbDoiXHUyNTVjIixib3hVTDoiXHUyNTVkIixib3h1cjoiXHUyNTE0Iixib3h1UjoiXHUyNTU4Iixib3hVcjoiXHUyNTU5Iixib3hVUjoiXHUyNTVhIixib3h2OiJcdTI1MDIiLGJveFY6Ilx1MjU1MSIsYm94dmg6Ilx1MjUzYyIsYm94dkg6Ilx1MjU2YSIsYm94Vmg6Ilx1MjU2YiIsYm94Vkg6Ilx1MjU2YyIsYm94dmw6Ilx1MjUyNCIsYm94dkw6Ilx1MjU2MSIsYm94Vmw6Ilx1MjU2MiIsYm94Vkw6Ilx1MjU2MyIsYm94dnI6Ilx1MjUxYyIsYm94dlI6Ilx1MjU1ZSIsYm94VnI6Ilx1MjU1ZiIsYm94VlI6Ilx1MjU2MCIsYnByaW1lOiJcdTIwMzUiLGJyZXZlOiJcdTAyZDgiLEJyZXZlOiJcdTAyZDgiLGJydmJhcjoiXHhhNiIsYnNjcjoiXHVkODM1XHVkY2I3IixCc2NyOiJcdTIxMmMiLGJzZW1pOiJcdTIwNGYiLGJzaW06Ilx1MjIzZCIsYnNpbWU6Ilx1MjJjZCIsYnNvbGI6Ilx1MjljNSIsYnNvbDoiXFwiLGJzb2xoc3ViOiJcdTI3YzgiLGJ1bGw6Ilx1MjAyMiIsYnVsbGV0OiJcdTIwMjIiLGJ1bXA6Ilx1MjI0ZSIsYnVtcEU6Ilx1MmFhZSIsYnVtcGU6Ilx1MjI0ZiIsQnVtcGVxOiJcdTIyNGUiLGJ1bXBlcToiXHUyMjRmIixDYWN1dGU6Ilx1MDEwNiIsY2FjdXRlOiJcdTAxMDciLGNhcGFuZDoiXHUyYTQ0IixjYXBicmN1cDoiXHUyYTQ5IixjYXBjYXA6Ilx1MmE0YiIsY2FwOiJcdTIyMjkiLENhcDoiXHUyMmQyIixjYXBjdXA6Ilx1MmE0NyIsY2FwZG90OiJcdTJhNDAiLENhcGl0YWxEaWZmZXJlbnRpYWxEOiJcdTIxNDUiLGNhcHM6Ilx1MjIyOVx1ZmUwMCIsY2FyZXQ6Ilx1MjA0MSIsY2Fyb246Ilx1MDJjNyIsQ2F5bGV5czoiXHUyMTJkIixjY2FwczoiXHUyYTRkIixDY2Fyb246Ilx1MDEwYyIsY2Nhcm9uOiJcdTAxMGQiLENjZWRpbDoiXHhjNyIsY2NlZGlsOiJceGU3IixDY2lyYzoiXHUwMTA4IixjY2lyYzoiXHUwMTA5IixDY29uaW50OiJcdTIyMzAiLGNjdXBzOiJcdTJhNGMiLGNjdXBzc206Ilx1MmE1MCIsQ2RvdDoiXHUwMTBhIixjZG90OiJcdTAxMGIiLGNlZGlsOiJceGI4IixDZWRpbGxhOiJceGI4IixjZW1wdHl2OiJcdTI5YjIiLGNlbnQ6Ilx4YTIiLGNlbnRlcmRvdDoiXHhiNyIsQ2VudGVyRG90OiJceGI3IixjZnI6Ilx1ZDgzNVx1ZGQyMCIsQ2ZyOiJcdTIxMmQiLENIY3k6Ilx1MDQyNyIsY2hjeToiXHUwNDQ3IixjaGVjazoiXHUyNzEzIixjaGVja21hcms6Ilx1MjcxMyIsQ2hpOiJcdTAzYTciLGNoaToiXHUwM2M3IixjaXJjOiJcdTAyYzYiLGNpcmNlcToiXHUyMjU3IixjaXJjbGVhcnJvd2xlZnQ6Ilx1MjFiYSIsY2lyY2xlYXJyb3dyaWdodDoiXHUyMWJiIixjaXJjbGVkYXN0OiJcdTIyOWIiLGNpcmNsZWRjaXJjOiJcdTIyOWEiLGNpcmNsZWRkYXNoOiJcdTIyOWQiLENpcmNsZURvdDoiXHUyMjk5IixjaXJjbGVkUjoiXHhhZSIsY2lyY2xlZFM6Ilx1MjRjOCIsQ2lyY2xlTWludXM6Ilx1MjI5NiIsQ2lyY2xlUGx1czoiXHUyMjk1IixDaXJjbGVUaW1lczoiXHUyMjk3IixjaXI6Ilx1MjVjYiIsY2lyRToiXHUyOWMzIixjaXJlOiJcdTIyNTciLGNpcmZuaW50OiJcdTJhMTAiLGNpcm1pZDoiXHUyYWVmIixjaXJzY2lyOiJcdTI5YzIiLENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjMyIixDbG9zZUN1cmx5RG91YmxlUXVvdGU6Ilx1MjAxZCIsQ2xvc2VDdXJseVF1b3RlOiJcdTIwMTkiLGNsdWJzOiJcdTI2NjMiLGNsdWJzdWl0OiJcdTI2NjMiLGNvbG9uOiI6IixDb2xvbjoiXHUyMjM3IixDb2xvbmU6Ilx1MmE3NCIsY29sb25lOiJcdTIyNTQiLGNvbG9uZXE6Ilx1MjI1NCIsY29tbWE6IiwiLGNvbW1hdDoiQCIsY29tcDoiXHUyMjAxIixjb21wZm46Ilx1MjIxOCIsY29tcGxlbWVudDoiXHUyMjAxIixjb21wbGV4ZXM6Ilx1MjEwMiIsY29uZzoiXHUyMjQ1Iixjb25nZG90OiJcdTJhNmQiLENvbmdydWVudDoiXHUyMjYxIixjb25pbnQ6Ilx1MjIyZSIsQ29uaW50OiJcdTIyMmYiLENvbnRvdXJJbnRlZ3JhbDoiXHUyMjJlIixjb3BmOiJcdWQ4MzVcdWRkNTQiLENvcGY6Ilx1MjEwMiIsY29wcm9kOiJcdTIyMTAiLENvcHJvZHVjdDoiXHUyMjEwIixjb3B5OiJceGE5IixDT1BZOiJceGE5Iixjb3B5c3I6Ilx1MjExNyIsQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjMzIixjcmFycjoiXHUyMWI1Iixjcm9zczoiXHUyNzE3IixDcm9zczoiXHUyYTJmIixDc2NyOiJcdWQ4MzVcdWRjOWUiLGNzY3I6Ilx1ZDgzNVx1ZGNiOCIsY3N1YjoiXHUyYWNmIixjc3ViZToiXHUyYWQxIixjc3VwOiJcdTJhZDAiLGNzdXBlOiJcdTJhZDIiLGN0ZG90OiJcdTIyZWYiLGN1ZGFycmw6Ilx1MjkzOCIsY3VkYXJycjoiXHUyOTM1IixjdWVwcjoiXHUyMmRlIixjdWVzYzoiXHUyMmRmIixjdWxhcnI6Ilx1MjFiNiIsY3VsYXJycDoiXHUyOTNkIixjdXBicmNhcDoiXHUyYTQ4IixjdXBjYXA6Ilx1MmE0NiIsQ3VwQ2FwOiJcdTIyNGQiLGN1cDoiXHUyMjJhIixDdXA6Ilx1MjJkMyIsY3VwY3VwOiJcdTJhNGEiLGN1cGRvdDoiXHUyMjhkIixjdXBvcjoiXHUyYTQ1IixjdXBzOiJcdTIyMmFcdWZlMDAiLGN1cmFycjoiXHUyMWI3IixjdXJhcnJtOiJcdTI5M2MiLGN1cmx5ZXFwcmVjOiJcdTIyZGUiLGN1cmx5ZXFzdWNjOiJcdTIyZGYiLGN1cmx5dmVlOiJcdTIyY2UiLGN1cmx5d2VkZ2U6Ilx1MjJjZiIsY3VycmVuOiJceGE0IixjdXJ2ZWFycm93bGVmdDoiXHUyMWI2IixjdXJ2ZWFycm93cmlnaHQ6Ilx1MjFiNyIsY3V2ZWU6Ilx1MjJjZSIsY3V3ZWQ6Ilx1MjJjZiIsY3djb25pbnQ6Ilx1MjIzMiIsY3dpbnQ6Ilx1MjIzMSIsY3lsY3R5OiJcdTIzMmQiLGRhZ2dlcjoiXHUyMDIwIixEYWdnZXI6Ilx1MjAyMSIsZGFsZXRoOiJcdTIxMzgiLGRhcnI6Ilx1MjE5MyIsRGFycjoiXHUyMWExIixkQXJyOiJcdTIxZDMiLGRhc2g6Ilx1MjAxMCIsRGFzaHY6Ilx1MmFlNCIsZGFzaHY6Ilx1MjJhMyIsZGJrYXJvdzoiXHUyOTBmIixkYmxhYzoiXHUwMmRkIixEY2Fyb246Ilx1MDEwZSIsZGNhcm9uOiJcdTAxMGYiLERjeToiXHUwNDE0IixkY3k6Ilx1MDQzNCIsZGRhZ2dlcjoiXHUyMDIxIixkZGFycjoiXHUyMWNhIixERDoiXHUyMTQ1IixkZDoiXHUyMTQ2IixERG90cmFoZDoiXHUyOTExIixkZG90c2VxOiJcdTJhNzciLGRlZzoiXHhiMCIsRGVsOiJcdTIyMDciLERlbHRhOiJcdTAzOTQiLGRlbHRhOiJcdTAzYjQiLGRlbXB0eXY6Ilx1MjliMSIsZGZpc2h0OiJcdTI5N2YiLERmcjoiXHVkODM1XHVkZDA3IixkZnI6Ilx1ZDgzNVx1ZGQyMSIsZEhhcjoiXHUyOTY1IixkaGFybDoiXHUyMWMzIixkaGFycjoiXHUyMWMyIixEaWFjcml0aWNhbEFjdXRlOiJceGI0IixEaWFjcml0aWNhbERvdDoiXHUwMmQ5IixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiJcdTAyZGQiLERpYWNyaXRpY2FsR3JhdmU6ImAiLERpYWNyaXRpY2FsVGlsZGU6Ilx1MDJkYyIsZGlhbToiXHUyMmM0IixkaWFtb25kOiJcdTIyYzQiLERpYW1vbmQ6Ilx1MjJjNCIsZGlhbW9uZHN1aXQ6Ilx1MjY2NiIsZGlhbXM6Ilx1MjY2NiIsZGllOiJceGE4IixEaWZmZXJlbnRpYWxEOiJcdTIxNDYiLGRpZ2FtbWE6Ilx1MDNkZCIsZGlzaW46Ilx1MjJmMiIsZGl2OiJceGY3IixkaXZpZGU6Ilx4ZjciLGRpdmlkZW9udGltZXM6Ilx1MjJjNyIsZGl2b254OiJcdTIyYzciLERKY3k6Ilx1MDQwMiIsZGpjeToiXHUwNDUyIixkbGNvcm46Ilx1MjMxZSIsZGxjcm9wOiJcdTIzMGQiLGRvbGxhcjoiJCIsRG9wZjoiXHVkODM1XHVkZDNiIixkb3BmOiJcdWQ4MzVcdWRkNTUiLERvdDoiXHhhOCIsZG90OiJcdTAyZDkiLERvdERvdDoiXHUyMGRjIixkb3RlcToiXHUyMjUwIixkb3RlcWRvdDoiXHUyMjUxIixEb3RFcXVhbDoiXHUyMjUwIixkb3RtaW51czoiXHUyMjM4Iixkb3RwbHVzOiJcdTIyMTQiLGRvdHNxdWFyZToiXHUyMmExIixkb3VibGViYXJ3ZWRnZToiXHUyMzA2IixEb3VibGVDb250b3VySW50ZWdyYWw6Ilx1MjIyZiIsRG91YmxlRG90OiJceGE4IixEb3VibGVEb3duQXJyb3c6Ilx1MjFkMyIsRG91YmxlTGVmdEFycm93OiJcdTIxZDAiLERvdWJsZUxlZnRSaWdodEFycm93OiJcdTIxZDQiLERvdWJsZUxlZnRUZWU6Ilx1MmFlNCIsRG91YmxlTG9uZ0xlZnRBcnJvdzoiXHUyN2Y4IixEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmYSIsRG91YmxlTG9uZ1JpZ2h0QXJyb3c6Ilx1MjdmOSIsRG91YmxlUmlnaHRBcnJvdzoiXHUyMWQyIixEb3VibGVSaWdodFRlZToiXHUyMmE4IixEb3VibGVVcEFycm93OiJcdTIxZDEiLERvdWJsZVVwRG93bkFycm93OiJcdTIxZDUiLERvdWJsZVZlcnRpY2FsQmFyOiJcdTIyMjUiLERvd25BcnJvd0JhcjoiXHUyOTEzIixkb3duYXJyb3c6Ilx1MjE5MyIsRG93bkFycm93OiJcdTIxOTMiLERvd25hcnJvdzoiXHUyMWQzIixEb3duQXJyb3dVcEFycm93OiJcdTIxZjUiLERvd25CcmV2ZToiXHUwMzExIixkb3duZG93bmFycm93czoiXHUyMWNhIixkb3duaGFycG9vbmxlZnQ6Ilx1MjFjMyIsZG93bmhhcnBvb25yaWdodDoiXHUyMWMyIixEb3duTGVmdFJpZ2h0VmVjdG9yOiJcdTI5NTAiLERvd25MZWZ0VGVlVmVjdG9yOiJcdTI5NWUiLERvd25MZWZ0VmVjdG9yQmFyOiJcdTI5NTYiLERvd25MZWZ0VmVjdG9yOiJcdTIxYmQiLERvd25SaWdodFRlZVZlY3RvcjoiXHUyOTVmIixEb3duUmlnaHRWZWN0b3JCYXI6Ilx1Mjk1NyIsRG93blJpZ2h0VmVjdG9yOiJcdTIxYzEiLERvd25UZWVBcnJvdzoiXHUyMWE3IixEb3duVGVlOiJcdTIyYTQiLGRyYmthcm93OiJcdTI5MTAiLGRyY29ybjoiXHUyMzFmIixkcmNyb3A6Ilx1MjMwYyIsRHNjcjoiXHVkODM1XHVkYzlmIixkc2NyOiJcdWQ4MzVcdWRjYjkiLERTY3k6Ilx1MDQwNSIsZHNjeToiXHUwNDU1Iixkc29sOiJcdTI5ZjYiLERzdHJvazoiXHUwMTEwIixkc3Ryb2s6Ilx1MDExMSIsZHRkb3Q6Ilx1MjJmMSIsZHRyaToiXHUyNWJmIixkdHJpZjoiXHUyNWJlIixkdWFycjoiXHUyMWY1IixkdWhhcjoiXHUyOTZmIixkd2FuZ2xlOiJcdTI5YTYiLERaY3k6Ilx1MDQwZiIsZHpjeToiXHUwNDVmIixkemlncmFycjoiXHUyN2ZmIixFYWN1dGU6Ilx4YzkiLGVhY3V0ZToiXHhlOSIsZWFzdGVyOiJcdTJhNmUiLEVjYXJvbjoiXHUwMTFhIixlY2Fyb246Ilx1MDExYiIsRWNpcmM6Ilx4Y2EiLGVjaXJjOiJceGVhIixlY2lyOiJcdTIyNTYiLGVjb2xvbjoiXHUyMjU1IixFY3k6Ilx1MDQyZCIsZWN5OiJcdTA0NGQiLGVERG90OiJcdTJhNzciLEVkb3Q6Ilx1MDExNiIsZWRvdDoiXHUwMTE3IixlRG90OiJcdTIyNTEiLGVlOiJcdTIxNDciLGVmRG90OiJcdTIyNTIiLEVmcjoiXHVkODM1XHVkZDA4IixlZnI6Ilx1ZDgzNVx1ZGQyMiIsZWc6Ilx1MmE5YSIsRWdyYXZlOiJceGM4IixlZ3JhdmU6Ilx4ZTgiLGVnczoiXHUyYTk2IixlZ3Nkb3Q6Ilx1MmE5OCIsZWw6Ilx1MmE5OSIsRWxlbWVudDoiXHUyMjA4IixlbGludGVyczoiXHUyM2U3IixlbGw6Ilx1MjExMyIsZWxzOiJcdTJhOTUiLGVsc2RvdDoiXHUyYTk3IixFbWFjcjoiXHUwMTEyIixlbWFjcjoiXHUwMTEzIixlbXB0eToiXHUyMjA1IixlbXB0eXNldDoiXHUyMjA1IixFbXB0eVNtYWxsU3F1YXJlOiJcdTI1ZmIiLGVtcHR5djoiXHUyMjA1IixFbXB0eVZlcnlTbWFsbFNxdWFyZToiXHUyNWFiIixlbXNwMTM6Ilx1MjAwNCIsZW1zcDE0OiJcdTIwMDUiLGVtc3A6Ilx1MjAwMyIsRU5HOiJcdTAxNGEiLGVuZzoiXHUwMTRiIixlbnNwOiJcdTIwMDIiLEVvZ29uOiJcdTAxMTgiLGVvZ29uOiJcdTAxMTkiLEVvcGY6Ilx1ZDgzNVx1ZGQzYyIsZW9wZjoiXHVkODM1XHVkZDU2IixlcGFyOiJcdTIyZDUiLGVwYXJzbDoiXHUyOWUzIixlcGx1czoiXHUyYTcxIixlcHNpOiJcdTAzYjUiLEVwc2lsb246Ilx1MDM5NSIsZXBzaWxvbjoiXHUwM2I1IixlcHNpdjoiXHUwM2Y1IixlcWNpcmM6Ilx1MjI1NiIsZXFjb2xvbjoiXHUyMjU1IixlcXNpbToiXHUyMjQyIixlcXNsYW50Z3RyOiJcdTJhOTYiLGVxc2xhbnRsZXNzOiJcdTJhOTUiLEVxdWFsOiJcdTJhNzUiLGVxdWFsczoiPSIsRXF1YWxUaWxkZToiXHUyMjQyIixlcXVlc3Q6Ilx1MjI1ZiIsRXF1aWxpYnJpdW06Ilx1MjFjYyIsZXF1aXY6Ilx1MjI2MSIsZXF1aXZERDoiXHUyYTc4IixlcXZwYXJzbDoiXHUyOWU1IixlcmFycjoiXHUyOTcxIixlckRvdDoiXHUyMjUzIixlc2NyOiJcdTIxMmYiLEVzY3I6Ilx1MjEzMCIsZXNkb3Q6Ilx1MjI1MCIsRXNpbToiXHUyYTczIixlc2ltOiJcdTIyNDIiLEV0YToiXHUwMzk3IixldGE6Ilx1MDNiNyIsRVRIOiJceGQwIixldGg6Ilx4ZjAiLEV1bWw6Ilx4Y2IiLGV1bWw6Ilx4ZWIiLGV1cm86Ilx1MjBhYyIsZXhjbDoiISIsZXhpc3Q6Ilx1MjIwMyIsRXhpc3RzOiJcdTIyMDMiLGV4cGVjdGF0aW9uOiJcdTIxMzAiLGV4cG9uZW50aWFsZToiXHUyMTQ3IixFeHBvbmVudGlhbEU6Ilx1MjE0NyIsZmFsbGluZ2RvdHNlcToiXHUyMjUyIixGY3k6Ilx1MDQyNCIsZmN5OiJcdTA0NDQiLGZlbWFsZToiXHUyNjQwIixmZmlsaWc6Ilx1ZmIwMyIsZmZsaWc6Ilx1ZmIwMCIsZmZsbGlnOiJcdWZiMDQiLEZmcjoiXHVkODM1XHVkZDA5IixmZnI6Ilx1ZDgzNVx1ZGQyMyIsZmlsaWc6Ilx1ZmIwMSIsRmlsbGVkU21hbGxTcXVhcmU6Ilx1MjVmYyIsRmlsbGVkVmVyeVNtYWxsU3F1YXJlOiJcdTI1YWEiLGZqbGlnOiJmaiIsZmxhdDoiXHUyNjZkIixmbGxpZzoiXHVmYjAyIixmbHRuczoiXHUyNWIxIixmbm9mOiJcdTAxOTIiLEZvcGY6Ilx1ZDgzNVx1ZGQzZCIsZm9wZjoiXHVkODM1XHVkZDU3Iixmb3JhbGw6Ilx1MjIwMCIsRm9yQWxsOiJcdTIyMDAiLGZvcms6Ilx1MjJkNCIsZm9ya3Y6Ilx1MmFkOSIsRm91cmllcnRyZjoiXHUyMTMxIixmcGFydGludDoiXHUyYTBkIixmcmFjMTI6Ilx4YmQiLGZyYWMxMzoiXHUyMTUzIixmcmFjMTQ6Ilx4YmMiLGZyYWMxNToiXHUyMTU1IixmcmFjMTY6Ilx1MjE1OSIsZnJhYzE4OiJcdTIxNWIiLGZyYWMyMzoiXHUyMTU0IixmcmFjMjU6Ilx1MjE1NiIsZnJhYzM0OiJceGJlIixmcmFjMzU6Ilx1MjE1NyIsZnJhYzM4OiJcdTIxNWMiLGZyYWM0NToiXHUyMTU4IixmcmFjNTY6Ilx1MjE1YSIsZnJhYzU4OiJcdTIxNWQiLGZyYWM3ODoiXHUyMTVlIixmcmFzbDoiXHUyMDQ0Iixmcm93bjoiXHUyMzIyIixmc2NyOiJcdWQ4MzVcdWRjYmIiLEZzY3I6Ilx1MjEzMSIsZ2FjdXRlOiJcdTAxZjUiLEdhbW1hOiJcdTAzOTMiLGdhbW1hOiJcdTAzYjMiLEdhbW1hZDoiXHUwM2RjIixnYW1tYWQ6Ilx1MDNkZCIsZ2FwOiJcdTJhODYiLEdicmV2ZToiXHUwMTFlIixnYnJldmU6Ilx1MDExZiIsR2NlZGlsOiJcdTAxMjIiLEdjaXJjOiJcdTAxMWMiLGdjaXJjOiJcdTAxMWQiLEdjeToiXHUwNDEzIixnY3k6Ilx1MDQzMyIsR2RvdDoiXHUwMTIwIixnZG90OiJcdTAxMjEiLGdlOiJcdTIyNjUiLGdFOiJcdTIyNjciLGdFbDoiXHUyYThjIixnZWw6Ilx1MjJkYiIsZ2VxOiJcdTIyNjUiLGdlcXE6Ilx1MjI2NyIsZ2Vxc2xhbnQ6Ilx1MmE3ZSIsZ2VzY2M6Ilx1MmFhOSIsZ2VzOiJcdTJhN2UiLGdlc2RvdDoiXHUyYTgwIixnZXNkb3RvOiJcdTJhODIiLGdlc2RvdG9sOiJcdTJhODQiLGdlc2w6Ilx1MjJkYlx1ZmUwMCIsZ2VzbGVzOiJcdTJhOTQiLEdmcjoiXHVkODM1XHVkZDBhIixnZnI6Ilx1ZDgzNVx1ZGQyNCIsZ2c6Ilx1MjI2YiIsR2c6Ilx1MjJkOSIsZ2dnOiJcdTIyZDkiLGdpbWVsOiJcdTIxMzciLEdKY3k6Ilx1MDQwMyIsZ2pjeToiXHUwNDUzIixnbGE6Ilx1MmFhNSIsZ2w6Ilx1MjI3NyIsZ2xFOiJcdTJhOTIiLGdsajoiXHUyYWE0IixnbmFwOiJcdTJhOGEiLGduYXBwcm94OiJcdTJhOGEiLGduZToiXHUyYTg4IixnbkU6Ilx1MjI2OSIsZ25lcToiXHUyYTg4IixnbmVxcToiXHUyMjY5IixnbnNpbToiXHUyMmU3IixHb3BmOiJcdWQ4MzVcdWRkM2UiLGdvcGY6Ilx1ZDgzNVx1ZGQ1OCIsZ3JhdmU6ImAiLEdyZWF0ZXJFcXVhbDoiXHUyMjY1IixHcmVhdGVyRXF1YWxMZXNzOiJcdTIyZGIiLEdyZWF0ZXJGdWxsRXF1YWw6Ilx1MjI2NyIsR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMiIsR3JlYXRlckxlc3M6Ilx1MjI3NyIsR3JlYXRlclNsYW50RXF1YWw6Ilx1MmE3ZSIsR3JlYXRlclRpbGRlOiJcdTIyNzMiLEdzY3I6Ilx1ZDgzNVx1ZGNhMiIsZ3NjcjoiXHUyMTBhIixnc2ltOiJcdTIyNzMiLGdzaW1lOiJcdTJhOGUiLGdzaW1sOiJcdTJhOTAiLGd0Y2M6Ilx1MmFhNyIsZ3RjaXI6Ilx1MmE3YSIsZ3Q6Ij4iLEdUOiI+IixHdDoiXHUyMjZiIixndGRvdDoiXHUyMmQ3IixndGxQYXI6Ilx1Mjk5NSIsZ3RxdWVzdDoiXHUyYTdjIixndHJhcHByb3g6Ilx1MmE4NiIsZ3RyYXJyOiJcdTI5NzgiLGd0cmRvdDoiXHUyMmQ3IixndHJlcWxlc3M6Ilx1MjJkYiIsZ3RyZXFxbGVzczoiXHUyYThjIixndHJsZXNzOiJcdTIyNzciLGd0cnNpbToiXHUyMjczIixndmVydG5lcXE6Ilx1MjI2OVx1ZmUwMCIsZ3ZuRToiXHUyMjY5XHVmZTAwIixIYWNlazoiXHUwMmM3IixoYWlyc3A6Ilx1MjAwYSIsaGFsZjoiXHhiZCIsaGFtaWx0OiJcdTIxMGIiLEhBUkRjeToiXHUwNDJhIixoYXJkY3k6Ilx1MDQ0YSIsaGFycmNpcjoiXHUyOTQ4IixoYXJyOiJcdTIxOTQiLGhBcnI6Ilx1MjFkNCIsaGFycnc6Ilx1MjFhZCIsSGF0OiJeIixoYmFyOiJcdTIxMGYiLEhjaXJjOiJcdTAxMjQiLGhjaXJjOiJcdTAxMjUiLGhlYXJ0czoiXHUyNjY1IixoZWFydHN1aXQ6Ilx1MjY2NSIsaGVsbGlwOiJcdTIwMjYiLGhlcmNvbjoiXHUyMmI5IixoZnI6Ilx1ZDgzNVx1ZGQyNSIsSGZyOiJcdTIxMGMiLEhpbGJlcnRTcGFjZToiXHUyMTBiIixoa3NlYXJvdzoiXHUyOTI1Iixoa3N3YXJvdzoiXHUyOTI2Iixob2FycjoiXHUyMWZmIixob210aHQ6Ilx1MjIzYiIsaG9va2xlZnRhcnJvdzoiXHUyMWE5Iixob29rcmlnaHRhcnJvdzoiXHUyMWFhIixob3BmOiJcdWQ4MzVcdWRkNTkiLEhvcGY6Ilx1MjEwZCIsaG9yYmFyOiJcdTIwMTUiLEhvcml6b250YWxMaW5lOiJcdTI1MDAiLGhzY3I6Ilx1ZDgzNVx1ZGNiZCIsSHNjcjoiXHUyMTBiIixoc2xhc2g6Ilx1MjEwZiIsSHN0cm9rOiJcdTAxMjYiLGhzdHJvazoiXHUwMTI3IixIdW1wRG93bkh1bXA6Ilx1MjI0ZSIsSHVtcEVxdWFsOiJcdTIyNGYiLGh5YnVsbDoiXHUyMDQzIixoeXBoZW46Ilx1MjAxMCIsSWFjdXRlOiJceGNkIixpYWN1dGU6Ilx4ZWQiLGljOiJcdTIwNjMiLEljaXJjOiJceGNlIixpY2lyYzoiXHhlZSIsSWN5OiJcdTA0MTgiLGljeToiXHUwNDM4IixJZG90OiJcdTAxMzAiLElFY3k6Ilx1MDQxNSIsaWVjeToiXHUwNDM1IixpZXhjbDoiXHhhMSIsaWZmOiJcdTIxZDQiLGlmcjoiXHVkODM1XHVkZDI2IixJZnI6Ilx1MjExMSIsSWdyYXZlOiJceGNjIixpZ3JhdmU6Ilx4ZWMiLGlpOiJcdTIxNDgiLGlpaWludDoiXHUyYTBjIixpaWludDoiXHUyMjJkIixpaW5maW46Ilx1MjlkYyIsaWlvdGE6Ilx1MjEyOSIsSUpsaWc6Ilx1MDEzMiIsaWpsaWc6Ilx1MDEzMyIsSW1hY3I6Ilx1MDEyYSIsaW1hY3I6Ilx1MDEyYiIsaW1hZ2U6Ilx1MjExMSIsSW1hZ2luYXJ5SToiXHUyMTQ4IixpbWFnbGluZToiXHUyMTEwIixpbWFncGFydDoiXHUyMTExIixpbWF0aDoiXHUwMTMxIixJbToiXHUyMTExIixpbW9mOiJcdTIyYjciLGltcGVkOiJcdTAxYjUiLEltcGxpZXM6Ilx1MjFkMiIsaW5jYXJlOiJcdTIxMDUiLGluOiJcdTIyMDgiLGluZmluOiJcdTIyMWUiLGluZmludGllOiJcdTI5ZGQiLGlub2RvdDoiXHUwMTMxIixpbnRjYWw6Ilx1MjJiYSIsaW50OiJcdTIyMmIiLEludDoiXHUyMjJjIixpbnRlZ2VyczoiXHUyMTI0IixJbnRlZ3JhbDoiXHUyMjJiIixpbnRlcmNhbDoiXHUyMmJhIixJbnRlcnNlY3Rpb246Ilx1MjJjMiIsaW50bGFyaGs6Ilx1MmExNyIsaW50cHJvZDoiXHUyYTNjIixJbnZpc2libGVDb21tYToiXHUyMDYzIixJbnZpc2libGVUaW1lczoiXHUyMDYyIixJT2N5OiJcdTA0MDEiLGlvY3k6Ilx1MDQ1MSIsSW9nb246Ilx1MDEyZSIsaW9nb246Ilx1MDEyZiIsSW9wZjoiXHVkODM1XHVkZDQwIixpb3BmOiJcdWQ4MzVcdWRkNWEiLElvdGE6Ilx1MDM5OSIsaW90YToiXHUwM2I5IixpcHJvZDoiXHUyYTNjIixpcXVlc3Q6Ilx4YmYiLGlzY3I6Ilx1ZDgzNVx1ZGNiZSIsSXNjcjoiXHUyMTEwIixpc2luOiJcdTIyMDgiLGlzaW5kb3Q6Ilx1MjJmNSIsaXNpbkU6Ilx1MjJmOSIsaXNpbnM6Ilx1MjJmNCIsaXNpbnN2OiJcdTIyZjMiLGlzaW52OiJcdTIyMDgiLGl0OiJcdTIwNjIiLEl0aWxkZToiXHUwMTI4IixpdGlsZGU6Ilx1MDEyOSIsSXVrY3k6Ilx1MDQwNiIsaXVrY3k6Ilx1MDQ1NiIsSXVtbDoiXHhjZiIsaXVtbDoiXHhlZiIsSmNpcmM6Ilx1MDEzNCIsamNpcmM6Ilx1MDEzNSIsSmN5OiJcdTA0MTkiLGpjeToiXHUwNDM5IixKZnI6Ilx1ZDgzNVx1ZGQwZCIsamZyOiJcdWQ4MzVcdWRkMjciLGptYXRoOiJcdTAyMzciLEpvcGY6Ilx1ZDgzNVx1ZGQ0MSIsam9wZjoiXHVkODM1XHVkZDViIixKc2NyOiJcdWQ4MzVcdWRjYTUiLGpzY3I6Ilx1ZDgzNVx1ZGNiZiIsSnNlcmN5OiJcdTA0MDgiLGpzZXJjeToiXHUwNDU4IixKdWtjeToiXHUwNDA0IixqdWtjeToiXHUwNDU0IixLYXBwYToiXHUwMzlhIixrYXBwYToiXHUwM2JhIixrYXBwYXY6Ilx1MDNmMCIsS2NlZGlsOiJcdTAxMzYiLGtjZWRpbDoiXHUwMTM3IixLY3k6Ilx1MDQxYSIsa2N5OiJcdTA0M2EiLEtmcjoiXHVkODM1XHVkZDBlIixrZnI6Ilx1ZDgzNVx1ZGQyOCIsa2dyZWVuOiJcdTAxMzgiLEtIY3k6Ilx1MDQyNSIsa2hjeToiXHUwNDQ1IixLSmN5OiJcdTA0MGMiLGtqY3k6Ilx1MDQ1YyIsS29wZjoiXHVkODM1XHVkZDQyIixrb3BmOiJcdWQ4MzVcdWRkNWMiLEtzY3I6Ilx1ZDgzNVx1ZGNhNiIsa3NjcjoiXHVkODM1XHVkY2MwIixsQWFycjoiXHUyMWRhIixMYWN1dGU6Ilx1MDEzOSIsbGFjdXRlOiJcdTAxM2EiLGxhZW1wdHl2OiJcdTI5YjQiLGxhZ3JhbjoiXHUyMTEyIixMYW1iZGE6Ilx1MDM5YiIsbGFtYmRhOiJcdTAzYmIiLGxhbmc6Ilx1MjdlOCIsTGFuZzoiXHUyN2VhIixsYW5nZDoiXHUyOTkxIixsYW5nbGU6Ilx1MjdlOCIsbGFwOiJcdTJhODUiLExhcGxhY2V0cmY6Ilx1MjExMiIsbGFxdW86Ilx4YWIiLGxhcnJiOiJcdTIxZTQiLGxhcnJiZnM6Ilx1MjkxZiIsbGFycjoiXHUyMTkwIixMYXJyOiJcdTIxOWUiLGxBcnI6Ilx1MjFkMCIsbGFycmZzOiJcdTI5MWQiLGxhcnJoazoiXHUyMWE5IixsYXJybHA6Ilx1MjFhYiIsbGFycnBsOiJcdTI5MzkiLGxhcnJzaW06Ilx1Mjk3MyIsbGFycnRsOiJcdTIxYTIiLGxhdGFpbDoiXHUyOTE5IixsQXRhaWw6Ilx1MjkxYiIsbGF0OiJcdTJhYWIiLGxhdGU6Ilx1MmFhZCIsbGF0ZXM6Ilx1MmFhZFx1ZmUwMCIsbGJhcnI6Ilx1MjkwYyIsbEJhcnI6Ilx1MjkwZSIsbGJicms6Ilx1Mjc3MiIsbGJyYWNlOiJ7IixsYnJhY2s6IlsiLGxicmtlOiJcdTI5OGIiLGxicmtzbGQ6Ilx1Mjk4ZiIsbGJya3NsdToiXHUyOThkIixMY2Fyb246Ilx1MDEzZCIsbGNhcm9uOiJcdTAxM2UiLExjZWRpbDoiXHUwMTNiIixsY2VkaWw6Ilx1MDEzYyIsbGNlaWw6Ilx1MjMwOCIsbGN1YjoieyIsTGN5OiJcdTA0MWIiLGxjeToiXHUwNDNiIixsZGNhOiJcdTI5MzYiLGxkcXVvOiJcdTIwMWMiLGxkcXVvcjoiXHUyMDFlIixsZHJkaGFyOiJcdTI5NjciLGxkcnVzaGFyOiJcdTI5NGIiLGxkc2g6Ilx1MjFiMiIsbGU6Ilx1MjI2NCIsbEU6Ilx1MjI2NiIsTGVmdEFuZ2xlQnJhY2tldDoiXHUyN2U4IixMZWZ0QXJyb3dCYXI6Ilx1MjFlNCIsbGVmdGFycm93OiJcdTIxOTAiLExlZnRBcnJvdzoiXHUyMTkwIixMZWZ0YXJyb3c6Ilx1MjFkMCIsTGVmdEFycm93UmlnaHRBcnJvdzoiXHUyMWM2IixsZWZ0YXJyb3d0YWlsOiJcdTIxYTIiLExlZnRDZWlsaW5nOiJcdTIzMDgiLExlZnREb3VibGVCcmFja2V0OiJcdTI3ZTYiLExlZnREb3duVGVlVmVjdG9yOiJcdTI5NjEiLExlZnREb3duVmVjdG9yQmFyOiJcdTI5NTkiLExlZnREb3duVmVjdG9yOiJcdTIxYzMiLExlZnRGbG9vcjoiXHUyMzBhIixsZWZ0aGFycG9vbmRvd246Ilx1MjFiZCIsbGVmdGhhcnBvb251cDoiXHUyMWJjIixsZWZ0bGVmdGFycm93czoiXHUyMWM3IixsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0IixMZWZ0UmlnaHRBcnJvdzoiXHUyMTk0IixMZWZ0cmlnaHRhcnJvdzoiXHUyMWQ0IixsZWZ0cmlnaHRhcnJvd3M6Ilx1MjFjNiIsbGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFjYiIsbGVmdHJpZ2h0c3F1aWdhcnJvdzoiXHUyMWFkIixMZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk0ZSIsTGVmdFRlZUFycm93OiJcdTIxYTQiLExlZnRUZWU6Ilx1MjJhMyIsTGVmdFRlZVZlY3RvcjoiXHUyOTVhIixsZWZ0dGhyZWV0aW1lczoiXHUyMmNiIixMZWZ0VHJpYW5nbGVCYXI6Ilx1MjljZiIsTGVmdFRyaWFuZ2xlOiJcdTIyYjIiLExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyYjQiLExlZnRVcERvd25WZWN0b3I6Ilx1Mjk1MSIsTGVmdFVwVGVlVmVjdG9yOiJcdTI5NjAiLExlZnRVcFZlY3RvckJhcjoiXHUyOTU4IixMZWZ0VXBWZWN0b3I6Ilx1MjFiZiIsTGVmdFZlY3RvckJhcjoiXHUyOTUyIixMZWZ0VmVjdG9yOiJcdTIxYmMiLGxFZzoiXHUyYThiIixsZWc6Ilx1MjJkYSIsbGVxOiJcdTIyNjQiLGxlcXE6Ilx1MjI2NiIsbGVxc2xhbnQ6Ilx1MmE3ZCIsbGVzY2M6Ilx1MmFhOCIsbGVzOiJcdTJhN2QiLGxlc2RvdDoiXHUyYTdmIixsZXNkb3RvOiJcdTJhODEiLGxlc2RvdG9yOiJcdTJhODMiLGxlc2c6Ilx1MjJkYVx1ZmUwMCIsbGVzZ2VzOiJcdTJhOTMiLGxlc3NhcHByb3g6Ilx1MmE4NSIsbGVzc2RvdDoiXHUyMmQ2IixsZXNzZXFndHI6Ilx1MjJkYSIsbGVzc2VxcWd0cjoiXHUyYThiIixMZXNzRXF1YWxHcmVhdGVyOiJcdTIyZGEiLExlc3NGdWxsRXF1YWw6Ilx1MjI2NiIsTGVzc0dyZWF0ZXI6Ilx1MjI3NiIsbGVzc2d0cjoiXHUyMjc2IixMZXNzTGVzczoiXHUyYWExIixsZXNzc2ltOiJcdTIyNzIiLExlc3NTbGFudEVxdWFsOiJcdTJhN2QiLExlc3NUaWxkZToiXHUyMjcyIixsZmlzaHQ6Ilx1Mjk3YyIsbGZsb29yOiJcdTIzMGEiLExmcjoiXHVkODM1XHVkZDBmIixsZnI6Ilx1ZDgzNVx1ZGQyOSIsbGc6Ilx1MjI3NiIsbGdFOiJcdTJhOTEiLGxIYXI6Ilx1Mjk2MiIsbGhhcmQ6Ilx1MjFiZCIsbGhhcnU6Ilx1MjFiYyIsbGhhcnVsOiJcdTI5NmEiLGxoYmxrOiJcdTI1ODQiLExKY3k6Ilx1MDQwOSIsbGpjeToiXHUwNDU5IixsbGFycjoiXHUyMWM3IixsbDoiXHUyMjZhIixMbDoiXHUyMmQ4IixsbGNvcm5lcjoiXHUyMzFlIixMbGVmdGFycm93OiJcdTIxZGEiLGxsaGFyZDoiXHUyOTZiIixsbHRyaToiXHUyNWZhIixMbWlkb3Q6Ilx1MDEzZiIsbG1pZG90OiJcdTAxNDAiLGxtb3VzdGFjaGU6Ilx1MjNiMCIsbG1vdXN0OiJcdTIzYjAiLGxuYXA6Ilx1MmE4OSIsbG5hcHByb3g6Ilx1MmE4OSIsbG5lOiJcdTJhODciLGxuRToiXHUyMjY4IixsbmVxOiJcdTJhODciLGxuZXFxOiJcdTIyNjgiLGxuc2ltOiJcdTIyZTYiLGxvYW5nOiJcdTI3ZWMiLGxvYXJyOiJcdTIxZmQiLGxvYnJrOiJcdTI3ZTYiLGxvbmdsZWZ0YXJyb3c6Ilx1MjdmNSIsTG9uZ0xlZnRBcnJvdzoiXHUyN2Y1IixMb25nbGVmdGFycm93OiJcdTI3ZjgiLGxvbmdsZWZ0cmlnaHRhcnJvdzoiXHUyN2Y3IixMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmNyIsTG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZmEiLGxvbmdtYXBzdG86Ilx1MjdmYyIsbG9uZ3JpZ2h0YXJyb3c6Ilx1MjdmNiIsTG9uZ1JpZ2h0QXJyb3c6Ilx1MjdmNiIsTG9uZ3JpZ2h0YXJyb3c6Ilx1MjdmOSIsbG9vcGFycm93bGVmdDoiXHUyMWFiIixsb29wYXJyb3dyaWdodDoiXHUyMWFjIixsb3BhcjoiXHUyOTg1IixMb3BmOiJcdWQ4MzVcdWRkNDMiLGxvcGY6Ilx1ZDgzNVx1ZGQ1ZCIsbG9wbHVzOiJcdTJhMmQiLGxvdGltZXM6Ilx1MmEzNCIsbG93YXN0OiJcdTIyMTciLGxvd2JhcjoiXyIsTG93ZXJMZWZ0QXJyb3c6Ilx1MjE5OSIsTG93ZXJSaWdodEFycm93OiJcdTIxOTgiLGxvejoiXHUyNWNhIixsb3plbmdlOiJcdTI1Y2EiLGxvemY6Ilx1MjllYiIsbHBhcjoiKCIsbHBhcmx0OiJcdTI5OTMiLGxyYXJyOiJcdTIxYzYiLGxyY29ybmVyOiJcdTIzMWYiLGxyaGFyOiJcdTIxY2IiLGxyaGFyZDoiXHUyOTZkIixscm06Ilx1MjAwZSIsbHJ0cmk6Ilx1MjJiZiIsbHNhcXVvOiJcdTIwMzkiLGxzY3I6Ilx1ZDgzNVx1ZGNjMSIsTHNjcjoiXHUyMTEyIixsc2g6Ilx1MjFiMCIsTHNoOiJcdTIxYjAiLGxzaW06Ilx1MjI3MiIsbHNpbWU6Ilx1MmE4ZCIsbHNpbWc6Ilx1MmE4ZiIsbHNxYjoiWyIsbHNxdW86Ilx1MjAxOCIsbHNxdW9yOiJcdTIwMWEiLExzdHJvazoiXHUwMTQxIixsc3Ryb2s6Ilx1MDE0MiIsbHRjYzoiXHUyYWE2IixsdGNpcjoiXHUyYTc5IixsdDoiPCIsTFQ6IjwiLEx0OiJcdTIyNmEiLGx0ZG90OiJcdTIyZDYiLGx0aHJlZToiXHUyMmNiIixsdGltZXM6Ilx1MjJjOSIsbHRsYXJyOiJcdTI5NzYiLGx0cXVlc3Q6Ilx1MmE3YiIsbHRyaToiXHUyNWMzIixsdHJpZToiXHUyMmI0IixsdHJpZjoiXHUyNWMyIixsdHJQYXI6Ilx1Mjk5NiIsbHVyZHNoYXI6Ilx1Mjk0YSIsbHVydWhhcjoiXHUyOTY2IixsdmVydG5lcXE6Ilx1MjI2OFx1ZmUwMCIsbHZuRToiXHUyMjY4XHVmZTAwIixtYWNyOiJceGFmIixtYWxlOiJcdTI2NDIiLG1hbHQ6Ilx1MjcyMCIsbWFsdGVzZToiXHUyNzIwIixNYXA6Ilx1MjkwNSIsbWFwOiJcdTIxYTYiLG1hcHN0bzoiXHUyMWE2IixtYXBzdG9kb3duOiJcdTIxYTciLG1hcHN0b2xlZnQ6Ilx1MjFhNCIsbWFwc3RvdXA6Ilx1MjFhNSIsbWFya2VyOiJcdTI1YWUiLG1jb21tYToiXHUyYTI5IixNY3k6Ilx1MDQxYyIsbWN5OiJcdTA0M2MiLG1kYXNoOiJcdTIwMTQiLG1ERG90OiJcdTIyM2EiLG1lYXN1cmVkYW5nbGU6Ilx1MjIyMSIsTWVkaXVtU3BhY2U6Ilx1MjA1ZiIsTWVsbGludHJmOiJcdTIxMzMiLE1mcjoiXHVkODM1XHVkZDEwIixtZnI6Ilx1ZDgzNVx1ZGQyYSIsbWhvOiJcdTIxMjciLG1pY3JvOiJceGI1IixtaWRhc3Q6IioiLG1pZGNpcjoiXHUyYWYwIixtaWQ6Ilx1MjIyMyIsbWlkZG90OiJceGI3IixtaW51c2I6Ilx1MjI5ZiIsbWludXM6Ilx1MjIxMiIsbWludXNkOiJcdTIyMzgiLG1pbnVzZHU6Ilx1MmEyYSIsTWludXNQbHVzOiJcdTIyMTMiLG1sY3A6Ilx1MmFkYiIsbWxkcjoiXHUyMDI2IixtbnBsdXM6Ilx1MjIxMyIsbW9kZWxzOiJcdTIyYTciLE1vcGY6Ilx1ZDgzNVx1ZGQ0NCIsbW9wZjoiXHVkODM1XHVkZDVlIixtcDoiXHUyMjEzIixtc2NyOiJcdWQ4MzVcdWRjYzIiLE1zY3I6Ilx1MjEzMyIsbXN0cG9zOiJcdTIyM2UiLE11OiJcdTAzOWMiLG11OiJcdTAzYmMiLG11bHRpbWFwOiJcdTIyYjgiLG11bWFwOiJcdTIyYjgiLG5hYmxhOiJcdTIyMDciLE5hY3V0ZToiXHUwMTQzIixuYWN1dGU6Ilx1MDE0NCIsbmFuZzoiXHUyMjIwXHUyMGQyIixuYXA6Ilx1MjI0OSIsbmFwRToiXHUyYTcwXHUwMzM4IixuYXBpZDoiXHUyMjRiXHUwMzM4IixuYXBvczoiXHUwMTQ5IixuYXBwcm94OiJcdTIyNDkiLG5hdHVyYWw6Ilx1MjY2ZSIsbmF0dXJhbHM6Ilx1MjExNSIsbmF0dXI6Ilx1MjY2ZSIsbmJzcDoiXHhhMCIsbmJ1bXA6Ilx1MjI0ZVx1MDMzOCIsbmJ1bXBlOiJcdTIyNGZcdTAzMzgiLG5jYXA6Ilx1MmE0MyIsTmNhcm9uOiJcdTAxNDciLG5jYXJvbjoiXHUwMTQ4IixOY2VkaWw6Ilx1MDE0NSIsbmNlZGlsOiJcdTAxNDYiLG5jb25nOiJcdTIyNDciLG5jb25nZG90OiJcdTJhNmRcdTAzMzgiLG5jdXA6Ilx1MmE0MiIsTmN5OiJcdTA0MWQiLG5jeToiXHUwNDNkIixuZGFzaDoiXHUyMDEzIixuZWFyaGs6Ilx1MjkyNCIsbmVhcnI6Ilx1MjE5NyIsbmVBcnI6Ilx1MjFkNyIsbmVhcnJvdzoiXHUyMTk3IixuZToiXHUyMjYwIixuZWRvdDoiXHUyMjUwXHUwMzM4IixOZWdhdGl2ZU1lZGl1bVNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpY2tTcGFjZToiXHUyMDBiIixOZWdhdGl2ZVRoaW5TcGFjZToiXHUyMDBiIixOZWdhdGl2ZVZlcnlUaGluU3BhY2U6Ilx1MjAwYiIsbmVxdWl2OiJcdTIyNjIiLG5lc2VhcjoiXHUyOTI4IixuZXNpbToiXHUyMjQyXHUwMzM4IixOZXN0ZWRHcmVhdGVyR3JlYXRlcjoiXHUyMjZiIixOZXN0ZWRMZXNzTGVzczoiXHUyMjZhIixOZXdMaW5lOiJcbiIsbmV4aXN0OiJcdTIyMDQiLG5leGlzdHM6Ilx1MjIwNCIsTmZyOiJcdWQ4MzVcdWRkMTEiLG5mcjoiXHVkODM1XHVkZDJiIixuZ0U6Ilx1MjI2N1x1MDMzOCIsbmdlOiJcdTIyNzEiLG5nZXE6Ilx1MjI3MSIsbmdlcXE6Ilx1MjI2N1x1MDMzOCIsbmdlcXNsYW50OiJcdTJhN2VcdTAzMzgiLG5nZXM6Ilx1MmE3ZVx1MDMzOCIsbkdnOiJcdTIyZDlcdTAzMzgiLG5nc2ltOiJcdTIyNzUiLG5HdDoiXHUyMjZiXHUyMGQyIixuZ3Q6Ilx1MjI2ZiIsbmd0cjoiXHUyMjZmIixuR3R2OiJcdTIyNmJcdTAzMzgiLG5oYXJyOiJcdTIxYWUiLG5oQXJyOiJcdTIxY2UiLG5ocGFyOiJcdTJhZjIiLG5pOiJcdTIyMGIiLG5pczoiXHUyMmZjIixuaXNkOiJcdTIyZmEiLG5pdjoiXHUyMjBiIixOSmN5OiJcdTA0MGEiLG5qY3k6Ilx1MDQ1YSIsbmxhcnI6Ilx1MjE5YSIsbmxBcnI6Ilx1MjFjZCIsbmxkcjoiXHUyMDI1IixubEU6Ilx1MjI2Nlx1MDMzOCIsbmxlOiJcdTIyNzAiLG5sZWZ0YXJyb3c6Ilx1MjE5YSIsbkxlZnRhcnJvdzoiXHUyMWNkIixubGVmdHJpZ2h0YXJyb3c6Ilx1MjFhZSIsbkxlZnRyaWdodGFycm93OiJcdTIxY2UiLG5sZXE6Ilx1MjI3MCIsbmxlcXE6Ilx1MjI2Nlx1MDMzOCIsbmxlcXNsYW50OiJcdTJhN2RcdTAzMzgiLG5sZXM6Ilx1MmE3ZFx1MDMzOCIsbmxlc3M6Ilx1MjI2ZSIsbkxsOiJcdTIyZDhcdTAzMzgiLG5sc2ltOiJcdTIyNzQiLG5MdDoiXHUyMjZhXHUyMGQyIixubHQ6Ilx1MjI2ZSIsbmx0cmk6Ilx1MjJlYSIsbmx0cmllOiJcdTIyZWMiLG5MdHY6Ilx1MjI2YVx1MDMzOCIsbm1pZDoiXHUyMjI0IixOb0JyZWFrOiJcdTIwNjAiLE5vbkJyZWFraW5nU3BhY2U6Ilx4YTAiLG5vcGY6Ilx1ZDgzNVx1ZGQ1ZiIsTm9wZjoiXHUyMTE1IixOb3Q6Ilx1MmFlYyIsbm90OiJceGFjIixOb3RDb25ncnVlbnQ6Ilx1MjI2MiIsTm90Q3VwQ2FwOiJcdTIyNmQiLE5vdERvdWJsZVZlcnRpY2FsQmFyOiJcdTIyMjYiLE5vdEVsZW1lbnQ6Ilx1MjIwOSIsTm90RXF1YWw6Ilx1MjI2MCIsTm90RXF1YWxUaWxkZToiXHUyMjQyXHUwMzM4IixOb3RFeGlzdHM6Ilx1MjIwNCIsTm90R3JlYXRlcjoiXHUyMjZmIixOb3RHcmVhdGVyRXF1YWw6Ilx1MjI3MSIsTm90R3JlYXRlckZ1bGxFcXVhbDoiXHUyMjY3XHUwMzM4IixOb3RHcmVhdGVyR3JlYXRlcjoiXHUyMjZiXHUwMzM4IixOb3RHcmVhdGVyTGVzczoiXHUyMjc5IixOb3RHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlXHUwMzM4IixOb3RHcmVhdGVyVGlsZGU6Ilx1MjI3NSIsTm90SHVtcERvd25IdW1wOiJcdTIyNGVcdTAzMzgiLE5vdEh1bXBFcXVhbDoiXHUyMjRmXHUwMzM4Iixub3RpbjoiXHUyMjA5Iixub3RpbmRvdDoiXHUyMmY1XHUwMzM4Iixub3RpbkU6Ilx1MjJmOVx1MDMzOCIsbm90aW52YToiXHUyMjA5Iixub3RpbnZiOiJcdTIyZjciLG5vdGludmM6Ilx1MjJmNiIsTm90TGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2ZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZToiXHUyMmVhIixOb3RMZWZ0VHJpYW5nbGVFcXVhbDoiXHUyMmVjIixOb3RMZXNzOiJcdTIyNmUiLE5vdExlc3NFcXVhbDoiXHUyMjcwIixOb3RMZXNzR3JlYXRlcjoiXHUyMjc4IixOb3RMZXNzTGVzczoiXHUyMjZhXHUwMzM4IixOb3RMZXNzU2xhbnRFcXVhbDoiXHUyYTdkXHUwMzM4IixOb3RMZXNzVGlsZGU6Ilx1MjI3NCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMlx1MDMzOCIsTm90TmVzdGVkTGVzc0xlc3M6Ilx1MmFhMVx1MDMzOCIsbm90bmk6Ilx1MjIwYyIsbm90bml2YToiXHUyMjBjIixub3RuaXZiOiJcdTIyZmUiLG5vdG5pdmM6Ilx1MjJmZCIsTm90UHJlY2VkZXM6Ilx1MjI4MCIsTm90UHJlY2VkZXNFcXVhbDoiXHUyYWFmXHUwMzM4IixOb3RQcmVjZWRlc1NsYW50RXF1YWw6Ilx1MjJlMCIsTm90UmV2ZXJzZUVsZW1lbnQ6Ilx1MjIwYyIsTm90UmlnaHRUcmlhbmdsZUJhcjoiXHUyOWQwXHUwMzM4IixOb3RSaWdodFRyaWFuZ2xlOiJcdTIyZWIiLE5vdFJpZ2h0VHJpYW5nbGVFcXVhbDoiXHUyMmVkIixOb3RTcXVhcmVTdWJzZXQ6Ilx1MjI4Zlx1MDMzOCIsTm90U3F1YXJlU3Vic2V0RXF1YWw6Ilx1MjJlMiIsTm90U3F1YXJlU3VwZXJzZXQ6Ilx1MjI5MFx1MDMzOCIsTm90U3F1YXJlU3VwZXJzZXRFcXVhbDoiXHUyMmUzIixOb3RTdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsTm90U3Vic2V0RXF1YWw6Ilx1MjI4OCIsTm90U3VjY2VlZHM6Ilx1MjI4MSIsTm90U3VjY2VlZHNFcXVhbDoiXHUyYWIwXHUwMzM4IixOb3RTdWNjZWVkc1NsYW50RXF1YWw6Ilx1MjJlMSIsTm90U3VjY2VlZHNUaWxkZToiXHUyMjdmXHUwMzM4IixOb3RTdXBlcnNldDoiXHUyMjgzXHUyMGQyIixOb3RTdXBlcnNldEVxdWFsOiJcdTIyODkiLE5vdFRpbGRlOiJcdTIyNDEiLE5vdFRpbGRlRXF1YWw6Ilx1MjI0NCIsTm90VGlsZGVGdWxsRXF1YWw6Ilx1MjI0NyIsTm90VGlsZGVUaWxkZToiXHUyMjQ5IixOb3RWZXJ0aWNhbEJhcjoiXHUyMjI0IixucGFyYWxsZWw6Ilx1MjIyNiIsbnBhcjoiXHUyMjI2IixucGFyc2w6Ilx1MmFmZFx1MjBlNSIsbnBhcnQ6Ilx1MjIwMlx1MDMzOCIsbnBvbGludDoiXHUyYTE0IixucHI6Ilx1MjI4MCIsbnByY3VlOiJcdTIyZTAiLG5wcmVjOiJcdTIyODAiLG5wcmVjZXE6Ilx1MmFhZlx1MDMzOCIsbnByZToiXHUyYWFmXHUwMzM4IixucmFycmM6Ilx1MjkzM1x1MDMzOCIsbnJhcnI6Ilx1MjE5YiIsbnJBcnI6Ilx1MjFjZiIsbnJhcnJ3OiJcdTIxOWRcdTAzMzgiLG5yaWdodGFycm93OiJcdTIxOWIiLG5SaWdodGFycm93OiJcdTIxY2YiLG5ydHJpOiJcdTIyZWIiLG5ydHJpZToiXHUyMmVkIixuc2M6Ilx1MjI4MSIsbnNjY3VlOiJcdTIyZTEiLG5zY2U6Ilx1MmFiMFx1MDMzOCIsTnNjcjoiXHVkODM1XHVkY2E5Iixuc2NyOiJcdWQ4MzVcdWRjYzMiLG5zaG9ydG1pZDoiXHUyMjI0Iixuc2hvcnRwYXJhbGxlbDoiXHUyMjI2Iixuc2ltOiJcdTIyNDEiLG5zaW1lOiJcdTIyNDQiLG5zaW1lcToiXHUyMjQ0Iixuc21pZDoiXHUyMjI0Iixuc3BhcjoiXHUyMjI2Iixuc3FzdWJlOiJcdTIyZTIiLG5zcXN1cGU6Ilx1MjJlMyIsbnN1YjoiXHUyMjg0Iixuc3ViRToiXHUyYWM1XHUwMzM4Iixuc3ViZToiXHUyMjg4Iixuc3Vic2V0OiJcdTIyODJcdTIwZDIiLG5zdWJzZXRlcToiXHUyMjg4Iixuc3Vic2V0ZXFxOiJcdTJhYzVcdTAzMzgiLG5zdWNjOiJcdTIyODEiLG5zdWNjZXE6Ilx1MmFiMFx1MDMzOCIsbnN1cDoiXHUyMjg1Iixuc3VwRToiXHUyYWM2XHUwMzM4Iixuc3VwZToiXHUyMjg5Iixuc3Vwc2V0OiJcdTIyODNcdTIwZDIiLG5zdXBzZXRlcToiXHUyMjg5Iixuc3Vwc2V0ZXFxOiJcdTJhYzZcdTAzMzgiLG50Z2w6Ilx1MjI3OSIsTnRpbGRlOiJceGQxIixudGlsZGU6Ilx4ZjEiLG50bGc6Ilx1MjI3OCIsbnRyaWFuZ2xlbGVmdDoiXHUyMmVhIixudHJpYW5nbGVsZWZ0ZXE6Ilx1MjJlYyIsbnRyaWFuZ2xlcmlnaHQ6Ilx1MjJlYiIsbnRyaWFuZ2xlcmlnaHRlcToiXHUyMmVkIixOdToiXHUwMzlkIixudToiXHUwM2JkIixudW06IiMiLG51bWVybzoiXHUyMTE2IixudW1zcDoiXHUyMDA3IixudmFwOiJcdTIyNGRcdTIwZDIiLG52ZGFzaDoiXHUyMmFjIixudkRhc2g6Ilx1MjJhZCIsblZkYXNoOiJcdTIyYWUiLG5WRGFzaDoiXHUyMmFmIixudmdlOiJcdTIyNjVcdTIwZDIiLG52Z3Q6Ij5cdTIwZDIiLG52SGFycjoiXHUyOTA0IixudmluZmluOiJcdTI5ZGUiLG52bEFycjoiXHUyOTAyIixudmxlOiJcdTIyNjRcdTIwZDIiLG52bHQ6IjxcdTIwZDIiLG52bHRyaWU6Ilx1MjJiNFx1MjBkMiIsbnZyQXJyOiJcdTI5MDMiLG52cnRyaWU6Ilx1MjJiNVx1MjBkMiIsbnZzaW06Ilx1MjIzY1x1MjBkMiIsbndhcmhrOiJcdTI5MjMiLG53YXJyOiJcdTIxOTYiLG53QXJyOiJcdTIxZDYiLG53YXJyb3c6Ilx1MjE5NiIsbnduZWFyOiJcdTI5MjciLE9hY3V0ZToiXHhkMyIsb2FjdXRlOiJceGYzIixvYXN0OiJcdTIyOWIiLE9jaXJjOiJceGQ0IixvY2lyYzoiXHhmNCIsb2NpcjoiXHUyMjlhIixPY3k6Ilx1MDQxZSIsb2N5OiJcdTA0M2UiLG9kYXNoOiJcdTIyOWQiLE9kYmxhYzoiXHUwMTUwIixvZGJsYWM6Ilx1MDE1MSIsb2RpdjoiXHUyYTM4IixvZG90OiJcdTIyOTkiLG9kc29sZDoiXHUyOWJjIixPRWxpZzoiXHUwMTUyIixvZWxpZzoiXHUwMTUzIixvZmNpcjoiXHUyOWJmIixPZnI6Ilx1ZDgzNVx1ZGQxMiIsb2ZyOiJcdWQ4MzVcdWRkMmMiLG9nb246Ilx1MDJkYiIsT2dyYXZlOiJceGQyIixvZ3JhdmU6Ilx4ZjIiLG9ndDoiXHUyOWMxIixvaGJhcjoiXHUyOWI1IixvaG06Ilx1MDNhOSIsb2ludDoiXHUyMjJlIixvbGFycjoiXHUyMWJhIixvbGNpcjoiXHUyOWJlIixvbGNyb3NzOiJcdTI5YmIiLG9saW5lOiJcdTIwM2UiLG9sdDoiXHUyOWMwIixPbWFjcjoiXHUwMTRjIixvbWFjcjoiXHUwMTRkIixPbWVnYToiXHUwM2E5IixvbWVnYToiXHUwM2M5IixPbWljcm9uOiJcdTAzOWYiLG9taWNyb246Ilx1MDNiZiIsb21pZDoiXHUyOWI2IixvbWludXM6Ilx1MjI5NiIsT29wZjoiXHVkODM1XHVkZDQ2Iixvb3BmOiJcdWQ4MzVcdWRkNjAiLG9wYXI6Ilx1MjliNyIsT3BlbkN1cmx5RG91YmxlUXVvdGU6Ilx1MjAxYyIsT3BlbkN1cmx5UXVvdGU6Ilx1MjAxOCIsb3BlcnA6Ilx1MjliOSIsb3BsdXM6Ilx1MjI5NSIsb3JhcnI6Ilx1MjFiYiIsT3I6Ilx1MmE1NCIsb3I6Ilx1MjIyOCIsb3JkOiJcdTJhNWQiLG9yZGVyOiJcdTIxMzQiLG9yZGVyb2Y6Ilx1MjEzNCIsb3JkZjoiXHhhYSIsb3JkbToiXHhiYSIsb3JpZ29mOiJcdTIyYjYiLG9yb3I6Ilx1MmE1NiIsb3JzbG9wZToiXHUyYTU3IixvcnY6Ilx1MmE1YiIsb1M6Ilx1MjRjOCIsT3NjcjoiXHVkODM1XHVkY2FhIixvc2NyOiJcdTIxMzQiLE9zbGFzaDoiXHhkOCIsb3NsYXNoOiJceGY4Iixvc29sOiJcdTIyOTgiLE90aWxkZToiXHhkNSIsb3RpbGRlOiJceGY1IixvdGltZXNhczoiXHUyYTM2IixPdGltZXM6Ilx1MmEzNyIsb3RpbWVzOiJcdTIyOTciLE91bWw6Ilx4ZDYiLG91bWw6Ilx4ZjYiLG92YmFyOiJcdTIzM2QiLE92ZXJCYXI6Ilx1MjAzZSIsT3ZlckJyYWNlOiJcdTIzZGUiLE92ZXJCcmFja2V0OiJcdTIzYjQiLE92ZXJQYXJlbnRoZXNpczoiXHUyM2RjIixwYXJhOiJceGI2IixwYXJhbGxlbDoiXHUyMjI1IixwYXI6Ilx1MjIyNSIscGFyc2ltOiJcdTJhZjMiLHBhcnNsOiJcdTJhZmQiLHBhcnQ6Ilx1MjIwMiIsUGFydGlhbEQ6Ilx1MjIwMiIsUGN5OiJcdTA0MWYiLHBjeToiXHUwNDNmIixwZXJjbnQ6IiUiLHBlcmlvZDoiLiIscGVybWlsOiJcdTIwMzAiLHBlcnA6Ilx1MjJhNSIscGVydGVuazoiXHUyMDMxIixQZnI6Ilx1ZDgzNVx1ZGQxMyIscGZyOiJcdWQ4MzVcdWRkMmQiLFBoaToiXHUwM2E2IixwaGk6Ilx1MDNjNiIscGhpdjoiXHUwM2Q1IixwaG1tYXQ6Ilx1MjEzMyIscGhvbmU6Ilx1MjYwZSIsUGk6Ilx1MDNhMCIscGk6Ilx1MDNjMCIscGl0Y2hmb3JrOiJcdTIyZDQiLHBpdjoiXHUwM2Q2IixwbGFuY2s6Ilx1MjEwZiIscGxhbmNraDoiXHUyMTBlIixwbGFua3Y6Ilx1MjEwZiIscGx1c2FjaXI6Ilx1MmEyMyIscGx1c2I6Ilx1MjI5ZSIscGx1c2NpcjoiXHUyYTIyIixwbHVzOiIrIixwbHVzZG86Ilx1MjIxNCIscGx1c2R1OiJcdTJhMjUiLHBsdXNlOiJcdTJhNzIiLFBsdXNNaW51czoiXHhiMSIscGx1c21uOiJceGIxIixwbHVzc2ltOiJcdTJhMjYiLHBsdXN0d286Ilx1MmEyNyIscG06Ilx4YjEiLFBvaW5jYXJlcGxhbmU6Ilx1MjEwYyIscG9pbnRpbnQ6Ilx1MmExNSIscG9wZjoiXHVkODM1XHVkZDYxIixQb3BmOiJcdTIxMTkiLHBvdW5kOiJceGEzIixwcmFwOiJcdTJhYjciLFByOiJcdTJhYmIiLHByOiJcdTIyN2EiLHByY3VlOiJcdTIyN2MiLHByZWNhcHByb3g6Ilx1MmFiNyIscHJlYzoiXHUyMjdhIixwcmVjY3VybHllcToiXHUyMjdjIixQcmVjZWRlczoiXHUyMjdhIixQcmVjZWRlc0VxdWFsOiJcdTJhYWYiLFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMjdjIixQcmVjZWRlc1RpbGRlOiJcdTIyN2UiLHByZWNlcToiXHUyYWFmIixwcmVjbmFwcHJveDoiXHUyYWI5IixwcmVjbmVxcToiXHUyYWI1IixwcmVjbnNpbToiXHUyMmU4IixwcmU6Ilx1MmFhZiIscHJFOiJcdTJhYjMiLHByZWNzaW06Ilx1MjI3ZSIscHJpbWU6Ilx1MjAzMiIsUHJpbWU6Ilx1MjAzMyIscHJpbWVzOiJcdTIxMTkiLHBybmFwOiJcdTJhYjkiLHBybkU6Ilx1MmFiNSIscHJuc2ltOiJcdTIyZTgiLHByb2Q6Ilx1MjIwZiIsUHJvZHVjdDoiXHUyMjBmIixwcm9mYWxhcjoiXHUyMzJlIixwcm9mbGluZToiXHUyMzEyIixwcm9mc3VyZjoiXHUyMzEzIixwcm9wOiJcdTIyMWQiLFByb3BvcnRpb25hbDoiXHUyMjFkIixQcm9wb3J0aW9uOiJcdTIyMzciLHByb3B0bzoiXHUyMjFkIixwcnNpbToiXHUyMjdlIixwcnVyZWw6Ilx1MjJiMCIsUHNjcjoiXHVkODM1XHVkY2FiIixwc2NyOiJcdWQ4MzVcdWRjYzUiLFBzaToiXHUwM2E4Iixwc2k6Ilx1MDNjOCIscHVuY3NwOiJcdTIwMDgiLFFmcjoiXHVkODM1XHVkZDE0IixxZnI6Ilx1ZDgzNVx1ZGQyZSIscWludDoiXHUyYTBjIixxb3BmOiJcdWQ4MzVcdWRkNjIiLFFvcGY6Ilx1MjExYSIscXByaW1lOiJcdTIwNTciLFFzY3I6Ilx1ZDgzNVx1ZGNhYyIscXNjcjoiXHVkODM1XHVkY2M2IixxdWF0ZXJuaW9uczoiXHUyMTBkIixxdWF0aW50OiJcdTJhMTYiLHF1ZXN0OiI/IixxdWVzdGVxOiJcdTIyNWYiLHF1b3Q6JyInLFFVT1Q6JyInLHJBYXJyOiJcdTIxZGIiLHJhY2U6Ilx1MjIzZFx1MDMzMSIsUmFjdXRlOiJcdTAxNTQiLHJhY3V0ZToiXHUwMTU1IixyYWRpYzoiXHUyMjFhIixyYWVtcHR5djoiXHUyOWIzIixyYW5nOiJcdTI3ZTkiLFJhbmc6Ilx1MjdlYiIscmFuZ2Q6Ilx1Mjk5MiIscmFuZ2U6Ilx1MjlhNSIscmFuZ2xlOiJcdTI3ZTkiLHJhcXVvOiJceGJiIixyYXJyYXA6Ilx1Mjk3NSIscmFycmI6Ilx1MjFlNSIscmFycmJmczoiXHUyOTIwIixyYXJyYzoiXHUyOTMzIixyYXJyOiJcdTIxOTIiLFJhcnI6Ilx1MjFhMCIsckFycjoiXHUyMWQyIixyYXJyZnM6Ilx1MjkxZSIscmFycmhrOiJcdTIxYWEiLHJhcnJscDoiXHUyMWFjIixyYXJycGw6Ilx1Mjk0NSIscmFycnNpbToiXHUyOTc0IixSYXJydGw6Ilx1MjkxNiIscmFycnRsOiJcdTIxYTMiLHJhcnJ3OiJcdTIxOWQiLHJhdGFpbDoiXHUyOTFhIixyQXRhaWw6Ilx1MjkxYyIscmF0aW86Ilx1MjIzNiIscmF0aW9uYWxzOiJcdTIxMWEiLHJiYXJyOiJcdTI5MGQiLHJCYXJyOiJcdTI5MGYiLFJCYXJyOiJcdTI5MTAiLHJiYnJrOiJcdTI3NzMiLHJicmFjZToifSIscmJyYWNrOiJdIixyYnJrZToiXHUyOThjIixyYnJrc2xkOiJcdTI5OGUiLHJicmtzbHU6Ilx1Mjk5MCIsUmNhcm9uOiJcdTAxNTgiLHJjYXJvbjoiXHUwMTU5IixSY2VkaWw6Ilx1MDE1NiIscmNlZGlsOiJcdTAxNTciLHJjZWlsOiJcdTIzMDkiLHJjdWI6In0iLFJjeToiXHUwNDIwIixyY3k6Ilx1MDQ0MCIscmRjYToiXHUyOTM3IixyZGxkaGFyOiJcdTI5NjkiLHJkcXVvOiJcdTIwMWQiLHJkcXVvcjoiXHUyMDFkIixyZHNoOiJcdTIxYjMiLHJlYWw6Ilx1MjExYyIscmVhbGluZToiXHUyMTFiIixyZWFscGFydDoiXHUyMTFjIixyZWFsczoiXHUyMTFkIixSZToiXHUyMTFjIixyZWN0OiJcdTI1YWQiLHJlZzoiXHhhZSIsUkVHOiJceGFlIixSZXZlcnNlRWxlbWVudDoiXHUyMjBiIixSZXZlcnNlRXF1aWxpYnJpdW06Ilx1MjFjYiIsUmV2ZXJzZVVwRXF1aWxpYnJpdW06Ilx1Mjk2ZiIscmZpc2h0OiJcdTI5N2QiLHJmbG9vcjoiXHUyMzBiIixyZnI6Ilx1ZDgzNVx1ZGQyZiIsUmZyOiJcdTIxMWMiLHJIYXI6Ilx1Mjk2NCIscmhhcmQ6Ilx1MjFjMSIscmhhcnU6Ilx1MjFjMCIscmhhcnVsOiJcdTI5NmMiLFJobzoiXHUwM2ExIixyaG86Ilx1MDNjMSIscmhvdjoiXHUwM2YxIixSaWdodEFuZ2xlQnJhY2tldDoiXHUyN2U5IixSaWdodEFycm93QmFyOiJcdTIxZTUiLHJpZ2h0YXJyb3c6Ilx1MjE5MiIsUmlnaHRBcnJvdzoiXHUyMTkyIixSaWdodGFycm93OiJcdTIxZDIiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6Ilx1MjFjNCIscmlnaHRhcnJvd3RhaWw6Ilx1MjFhMyIsUmlnaHRDZWlsaW5nOiJcdTIzMDkiLFJpZ2h0RG91YmxlQnJhY2tldDoiXHUyN2U3IixSaWdodERvd25UZWVWZWN0b3I6Ilx1Mjk1ZCIsUmlnaHREb3duVmVjdG9yQmFyOiJcdTI5NTUiLFJpZ2h0RG93blZlY3RvcjoiXHUyMWMyIixSaWdodEZsb29yOiJcdTIzMGIiLHJpZ2h0aGFycG9vbmRvd246Ilx1MjFjMSIscmlnaHRoYXJwb29udXA6Ilx1MjFjMCIscmlnaHRsZWZ0YXJyb3dzOiJcdTIxYzQiLHJpZ2h0bGVmdGhhcnBvb25zOiJcdTIxY2MiLHJpZ2h0cmlnaHRhcnJvd3M6Ilx1MjFjOSIscmlnaHRzcXVpZ2Fycm93OiJcdTIxOWQiLFJpZ2h0VGVlQXJyb3c6Ilx1MjFhNiIsUmlnaHRUZWU6Ilx1MjJhMiIsUmlnaHRUZWVWZWN0b3I6Ilx1Mjk1YiIscmlnaHR0aHJlZXRpbWVzOiJcdTIyY2MiLFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMCIsUmlnaHRUcmlhbmdsZToiXHUyMmIzIixSaWdodFRyaWFuZ2xlRXF1YWw6Ilx1MjJiNSIsUmlnaHRVcERvd25WZWN0b3I6Ilx1Mjk0ZiIsUmlnaHRVcFRlZVZlY3RvcjoiXHUyOTVjIixSaWdodFVwVmVjdG9yQmFyOiJcdTI5NTQiLFJpZ2h0VXBWZWN0b3I6Ilx1MjFiZSIsUmlnaHRWZWN0b3JCYXI6Ilx1Mjk1MyIsUmlnaHRWZWN0b3I6Ilx1MjFjMCIscmluZzoiXHUwMmRhIixyaXNpbmdkb3RzZXE6Ilx1MjI1MyIscmxhcnI6Ilx1MjFjNCIscmxoYXI6Ilx1MjFjYyIscmxtOiJcdTIwMGYiLHJtb3VzdGFjaGU6Ilx1MjNiMSIscm1vdXN0OiJcdTIzYjEiLHJubWlkOiJcdTJhZWUiLHJvYW5nOiJcdTI3ZWQiLHJvYXJyOiJcdTIxZmUiLHJvYnJrOiJcdTI3ZTciLHJvcGFyOiJcdTI5ODYiLHJvcGY6Ilx1ZDgzNVx1ZGQ2MyIsUm9wZjoiXHUyMTFkIixyb3BsdXM6Ilx1MmEyZSIscm90aW1lczoiXHUyYTM1IixSb3VuZEltcGxpZXM6Ilx1Mjk3MCIscnBhcjoiKSIscnBhcmd0OiJcdTI5OTQiLHJwcG9saW50OiJcdTJhMTIiLHJyYXJyOiJcdTIxYzkiLFJyaWdodGFycm93OiJcdTIxZGIiLHJzYXF1bzoiXHUyMDNhIixyc2NyOiJcdWQ4MzVcdWRjYzciLFJzY3I6Ilx1MjExYiIscnNoOiJcdTIxYjEiLFJzaDoiXHUyMWIxIixyc3FiOiJdIixyc3F1bzoiXHUyMDE5Iixyc3F1b3I6Ilx1MjAxOSIscnRocmVlOiJcdTIyY2MiLHJ0aW1lczoiXHUyMmNhIixydHJpOiJcdTI1YjkiLHJ0cmllOiJcdTIyYjUiLHJ0cmlmOiJcdTI1YjgiLHJ0cmlsdHJpOiJcdTI5Y2UiLFJ1bGVEZWxheWVkOiJcdTI5ZjQiLHJ1bHVoYXI6Ilx1Mjk2OCIscng6Ilx1MjExZSIsU2FjdXRlOiJcdTAxNWEiLHNhY3V0ZToiXHUwMTViIixzYnF1bzoiXHUyMDFhIixzY2FwOiJcdTJhYjgiLFNjYXJvbjoiXHUwMTYwIixzY2Fyb246Ilx1MDE2MSIsU2M6Ilx1MmFiYyIsc2M6Ilx1MjI3YiIsc2NjdWU6Ilx1MjI3ZCIsc2NlOiJcdTJhYjAiLHNjRToiXHUyYWI0IixTY2VkaWw6Ilx1MDE1ZSIsc2NlZGlsOiJcdTAxNWYiLFNjaXJjOiJcdTAxNWMiLHNjaXJjOiJcdTAxNWQiLHNjbmFwOiJcdTJhYmEiLHNjbkU6Ilx1MmFiNiIsc2Nuc2ltOiJcdTIyZTkiLHNjcG9saW50OiJcdTJhMTMiLHNjc2ltOiJcdTIyN2YiLFNjeToiXHUwNDIxIixzY3k6Ilx1MDQ0MSIsc2RvdGI6Ilx1MjJhMSIsc2RvdDoiXHUyMmM1IixzZG90ZToiXHUyYTY2IixzZWFyaGs6Ilx1MjkyNSIsc2VhcnI6Ilx1MjE5OCIsc2VBcnI6Ilx1MjFkOCIsc2VhcnJvdzoiXHUyMTk4IixzZWN0OiJceGE3IixzZW1pOiI7IixzZXN3YXI6Ilx1MjkyOSIsc2V0bWludXM6Ilx1MjIxNiIsc2V0bW46Ilx1MjIxNiIsc2V4dDoiXHUyNzM2IixTZnI6Ilx1ZDgzNVx1ZGQxNiIsc2ZyOiJcdWQ4MzVcdWRkMzAiLHNmcm93bjoiXHUyMzIyIixzaGFycDoiXHUyNjZmIixTSENIY3k6Ilx1MDQyOSIsc2hjaGN5OiJcdTA0NDkiLFNIY3k6Ilx1MDQyOCIsc2hjeToiXHUwNDQ4IixTaG9ydERvd25BcnJvdzoiXHUyMTkzIixTaG9ydExlZnRBcnJvdzoiXHUyMTkwIixzaG9ydG1pZDoiXHUyMjIzIixzaG9ydHBhcmFsbGVsOiJcdTIyMjUiLFNob3J0UmlnaHRBcnJvdzoiXHUyMTkyIixTaG9ydFVwQXJyb3c6Ilx1MjE5MSIsc2h5OiJceGFkIixTaWdtYToiXHUwM2EzIixzaWdtYToiXHUwM2MzIixzaWdtYWY6Ilx1MDNjMiIsc2lnbWF2OiJcdTAzYzIiLHNpbToiXHUyMjNjIixzaW1kb3Q6Ilx1MmE2YSIsc2ltZToiXHUyMjQzIixzaW1lcToiXHUyMjQzIixzaW1nOiJcdTJhOWUiLHNpbWdFOiJcdTJhYTAiLHNpbWw6Ilx1MmE5ZCIsc2ltbEU6Ilx1MmE5ZiIsc2ltbmU6Ilx1MjI0NiIsc2ltcGx1czoiXHUyYTI0IixzaW1yYXJyOiJcdTI5NzIiLHNsYXJyOiJcdTIxOTAiLFNtYWxsQ2lyY2xlOiJcdTIyMTgiLHNtYWxsc2V0bWludXM6Ilx1MjIxNiIsc21hc2hwOiJcdTJhMzMiLHNtZXBhcnNsOiJcdTI5ZTQiLHNtaWQ6Ilx1MjIyMyIsc21pbGU6Ilx1MjMyMyIsc210OiJcdTJhYWEiLHNtdGU6Ilx1MmFhYyIsc210ZXM6Ilx1MmFhY1x1ZmUwMCIsU09GVGN5OiJcdTA0MmMiLHNvZnRjeToiXHUwNDRjIixzb2xiYXI6Ilx1MjMzZiIsc29sYjoiXHUyOWM0Iixzb2w6Ii8iLFNvcGY6Ilx1ZDgzNVx1ZGQ0YSIsc29wZjoiXHVkODM1XHVkZDY0IixzcGFkZXM6Ilx1MjY2MCIsc3BhZGVzdWl0OiJcdTI2NjAiLHNwYXI6Ilx1MjIyNSIsc3FjYXA6Ilx1MjI5MyIsc3FjYXBzOiJcdTIyOTNcdWZlMDAiLHNxY3VwOiJcdTIyOTQiLHNxY3VwczoiXHUyMjk0XHVmZTAwIixTcXJ0OiJcdTIyMWEiLHNxc3ViOiJcdTIyOGYiLHNxc3ViZToiXHUyMjkxIixzcXN1YnNldDoiXHUyMjhmIixzcXN1YnNldGVxOiJcdTIyOTEiLHNxc3VwOiJcdTIyOTAiLHNxc3VwZToiXHUyMjkyIixzcXN1cHNldDoiXHUyMjkwIixzcXN1cHNldGVxOiJcdTIyOTIiLHNxdWFyZToiXHUyNWExIixTcXVhcmU6Ilx1MjVhMSIsU3F1YXJlSW50ZXJzZWN0aW9uOiJcdTIyOTMiLFNxdWFyZVN1YnNldDoiXHUyMjhmIixTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMjkxIixTcXVhcmVTdXBlcnNldDoiXHUyMjkwIixTcXVhcmVTdXBlcnNldEVxdWFsOiJcdTIyOTIiLFNxdWFyZVVuaW9uOiJcdTIyOTQiLHNxdWFyZjoiXHUyNWFhIixzcXU6Ilx1MjVhMSIsc3F1ZjoiXHUyNWFhIixzcmFycjoiXHUyMTkyIixTc2NyOiJcdWQ4MzVcdWRjYWUiLHNzY3I6Ilx1ZDgzNVx1ZGNjOCIsc3NldG1uOiJcdTIyMTYiLHNzbWlsZToiXHUyMzIzIixzc3RhcmY6Ilx1MjJjNiIsU3RhcjoiXHUyMmM2IixzdGFyOiJcdTI2MDYiLHN0YXJmOiJcdTI2MDUiLHN0cmFpZ2h0ZXBzaWxvbjoiXHUwM2Y1IixzdHJhaWdodHBoaToiXHUwM2Q1IixzdHJuczoiXHhhZiIsc3ViOiJcdTIyODIiLFN1YjoiXHUyMmQwIixzdWJkb3Q6Ilx1MmFiZCIsc3ViRToiXHUyYWM1IixzdWJlOiJcdTIyODYiLHN1YmVkb3Q6Ilx1MmFjMyIsc3VibXVsdDoiXHUyYWMxIixzdWJuRToiXHUyYWNiIixzdWJuZToiXHUyMjhhIixzdWJwbHVzOiJcdTJhYmYiLHN1YnJhcnI6Ilx1Mjk3OSIsc3Vic2V0OiJcdTIyODIiLFN1YnNldDoiXHUyMmQwIixzdWJzZXRlcToiXHUyMjg2IixzdWJzZXRlcXE6Ilx1MmFjNSIsU3Vic2V0RXF1YWw6Ilx1MjI4NiIsc3Vic2V0bmVxOiJcdTIyOGEiLHN1YnNldG5lcXE6Ilx1MmFjYiIsc3Vic2ltOiJcdTJhYzciLHN1YnN1YjoiXHUyYWQ1IixzdWJzdXA6Ilx1MmFkMyIsc3VjY2FwcHJveDoiXHUyYWI4IixzdWNjOiJcdTIyN2IiLHN1Y2NjdXJseWVxOiJcdTIyN2QiLFN1Y2NlZWRzOiJcdTIyN2IiLFN1Y2NlZWRzRXF1YWw6Ilx1MmFiMCIsU3VjY2VlZHNTbGFudEVxdWFsOiJcdTIyN2QiLFN1Y2NlZWRzVGlsZGU6Ilx1MjI3ZiIsc3VjY2VxOiJcdTJhYjAiLHN1Y2NuYXBwcm94OiJcdTJhYmEiLHN1Y2NuZXFxOiJcdTJhYjYiLHN1Y2Nuc2ltOiJcdTIyZTkiLHN1Y2NzaW06Ilx1MjI3ZiIsU3VjaFRoYXQ6Ilx1MjIwYiIsc3VtOiJcdTIyMTEiLFN1bToiXHUyMjExIixzdW5nOiJcdTI2NmEiLHN1cDE6Ilx4YjkiLHN1cDI6Ilx4YjIiLHN1cDM6Ilx4YjMiLHN1cDoiXHUyMjgzIixTdXA6Ilx1MjJkMSIsc3VwZG90OiJcdTJhYmUiLHN1cGRzdWI6Ilx1MmFkOCIsc3VwRToiXHUyYWM2IixzdXBlOiJcdTIyODciLHN1cGVkb3Q6Ilx1MmFjNCIsU3VwZXJzZXQ6Ilx1MjI4MyIsU3VwZXJzZXRFcXVhbDoiXHUyMjg3IixzdXBoc29sOiJcdTI3YzkiLHN1cGhzdWI6Ilx1MmFkNyIsc3VwbGFycjoiXHUyOTdiIixzdXBtdWx0OiJcdTJhYzIiLHN1cG5FOiJcdTJhY2MiLHN1cG5lOiJcdTIyOGIiLHN1cHBsdXM6Ilx1MmFjMCIsc3Vwc2V0OiJcdTIyODMiLFN1cHNldDoiXHUyMmQxIixzdXBzZXRlcToiXHUyMjg3IixzdXBzZXRlcXE6Ilx1MmFjNiIsc3Vwc2V0bmVxOiJcdTIyOGIiLHN1cHNldG5lcXE6Ilx1MmFjYyIsc3Vwc2ltOiJcdTJhYzgiLHN1cHN1YjoiXHUyYWQ0IixzdXBzdXA6Ilx1MmFkNiIsc3dhcmhrOiJcdTI5MjYiLHN3YXJyOiJcdTIxOTkiLHN3QXJyOiJcdTIxZDkiLHN3YXJyb3c6Ilx1MjE5OSIsc3dud2FyOiJcdTI5MmEiLHN6bGlnOiJceGRmIixUYWI6Ilx0Iix0YXJnZXQ6Ilx1MjMxNiIsVGF1OiJcdTAzYTQiLHRhdToiXHUwM2M0Iix0YnJrOiJcdTIzYjQiLFRjYXJvbjoiXHUwMTY0Iix0Y2Fyb246Ilx1MDE2NSIsVGNlZGlsOiJcdTAxNjIiLHRjZWRpbDoiXHUwMTYzIixUY3k6Ilx1MDQyMiIsdGN5OiJcdTA0NDIiLHRkb3Q6Ilx1MjBkYiIsdGVscmVjOiJcdTIzMTUiLFRmcjoiXHVkODM1XHVkZDE3Iix0ZnI6Ilx1ZDgzNVx1ZGQzMSIsdGhlcmU0OiJcdTIyMzQiLHRoZXJlZm9yZToiXHUyMjM0IixUaGVyZWZvcmU6Ilx1MjIzNCIsVGhldGE6Ilx1MDM5OCIsdGhldGE6Ilx1MDNiOCIsdGhldGFzeW06Ilx1MDNkMSIsdGhldGF2OiJcdTAzZDEiLHRoaWNrYXBwcm94OiJcdTIyNDgiLHRoaWNrc2ltOiJcdTIyM2MiLFRoaWNrU3BhY2U6Ilx1MjA1Zlx1MjAwYSIsVGhpblNwYWNlOiJcdTIwMDkiLHRoaW5zcDoiXHUyMDA5Iix0aGthcDoiXHUyMjQ4Iix0aGtzaW06Ilx1MjIzYyIsVEhPUk46Ilx4ZGUiLHRob3JuOiJceGZlIix0aWxkZToiXHUwMmRjIixUaWxkZToiXHUyMjNjIixUaWxkZUVxdWFsOiJcdTIyNDMiLFRpbGRlRnVsbEVxdWFsOiJcdTIyNDUiLFRpbGRlVGlsZGU6Ilx1MjI0OCIsdGltZXNiYXI6Ilx1MmEzMSIsdGltZXNiOiJcdTIyYTAiLHRpbWVzOiJceGQ3Iix0aW1lc2Q6Ilx1MmEzMCIsdGludDoiXHUyMjJkIix0b2VhOiJcdTI5MjgiLHRvcGJvdDoiXHUyMzM2Iix0b3BjaXI6Ilx1MmFmMSIsdG9wOiJcdTIyYTQiLFRvcGY6Ilx1ZDgzNVx1ZGQ0YiIsdG9wZjoiXHVkODM1XHVkZDY1Iix0b3Bmb3JrOiJcdTJhZGEiLHRvc2E6Ilx1MjkyOSIsdHByaW1lOiJcdTIwMzQiLHRyYWRlOiJcdTIxMjIiLFRSQURFOiJcdTIxMjIiLHRyaWFuZ2xlOiJcdTI1YjUiLHRyaWFuZ2xlZG93bjoiXHUyNWJmIix0cmlhbmdsZWxlZnQ6Ilx1MjVjMyIsdHJpYW5nbGVsZWZ0ZXE6Ilx1MjJiNCIsdHJpYW5nbGVxOiJcdTIyNWMiLHRyaWFuZ2xlcmlnaHQ6Ilx1MjViOSIsdHJpYW5nbGVyaWdodGVxOiJcdTIyYjUiLHRyaWRvdDoiXHUyNWVjIix0cmllOiJcdTIyNWMiLHRyaW1pbnVzOiJcdTJhM2EiLFRyaXBsZURvdDoiXHUyMGRiIix0cmlwbHVzOiJcdTJhMzkiLHRyaXNiOiJcdTI5Y2QiLHRyaXRpbWU6Ilx1MmEzYiIsdHJwZXppdW06Ilx1MjNlMiIsVHNjcjoiXHVkODM1XHVkY2FmIix0c2NyOiJcdWQ4MzVcdWRjYzkiLFRTY3k6Ilx1MDQyNiIsdHNjeToiXHUwNDQ2IixUU0hjeToiXHUwNDBiIix0c2hjeToiXHUwNDViIixUc3Ryb2s6Ilx1MDE2NiIsdHN0cm9rOiJcdTAxNjciLHR3aXh0OiJcdTIyNmMiLHR3b2hlYWRsZWZ0YXJyb3c6Ilx1MjE5ZSIsdHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFhMCIsVWFjdXRlOiJceGRhIix1YWN1dGU6Ilx4ZmEiLHVhcnI6Ilx1MjE5MSIsVWFycjoiXHUyMTlmIix1QXJyOiJcdTIxZDEiLFVhcnJvY2lyOiJcdTI5NDkiLFVicmN5OiJcdTA0MGUiLHVicmN5OiJcdTA0NWUiLFVicmV2ZToiXHUwMTZjIix1YnJldmU6Ilx1MDE2ZCIsVWNpcmM6Ilx4ZGIiLHVjaXJjOiJceGZiIixVY3k6Ilx1MDQyMyIsdWN5OiJcdTA0NDMiLHVkYXJyOiJcdTIxYzUiLFVkYmxhYzoiXHUwMTcwIix1ZGJsYWM6Ilx1MDE3MSIsdWRoYXI6Ilx1Mjk2ZSIsdWZpc2h0OiJcdTI5N2UiLFVmcjoiXHVkODM1XHVkZDE4Iix1ZnI6Ilx1ZDgzNVx1ZGQzMiIsVWdyYXZlOiJceGQ5Iix1Z3JhdmU6Ilx4ZjkiLHVIYXI6Ilx1Mjk2MyIsdWhhcmw6Ilx1MjFiZiIsdWhhcnI6Ilx1MjFiZSIsdWhibGs6Ilx1MjU4MCIsdWxjb3JuOiJcdTIzMWMiLHVsY29ybmVyOiJcdTIzMWMiLHVsY3JvcDoiXHUyMzBmIix1bHRyaToiXHUyNWY4IixVbWFjcjoiXHUwMTZhIix1bWFjcjoiXHUwMTZiIix1bWw6Ilx4YTgiLFVuZGVyQmFyOiJfIixVbmRlckJyYWNlOiJcdTIzZGYiLFVuZGVyQnJhY2tldDoiXHUyM2I1IixVbmRlclBhcmVudGhlc2lzOiJcdTIzZGQiLFVuaW9uOiJcdTIyYzMiLFVuaW9uUGx1czoiXHUyMjhlIixVb2dvbjoiXHUwMTcyIix1b2dvbjoiXHUwMTczIixVb3BmOiJcdWQ4MzVcdWRkNGMiLHVvcGY6Ilx1ZDgzNVx1ZGQ2NiIsVXBBcnJvd0JhcjoiXHUyOTEyIix1cGFycm93OiJcdTIxOTEiLFVwQXJyb3c6Ilx1MjE5MSIsVXBhcnJvdzoiXHUyMWQxIixVcEFycm93RG93bkFycm93OiJcdTIxYzUiLHVwZG93bmFycm93OiJcdTIxOTUiLFVwRG93bkFycm93OiJcdTIxOTUiLFVwZG93bmFycm93OiJcdTIxZDUiLFVwRXF1aWxpYnJpdW06Ilx1Mjk2ZSIsdXBoYXJwb29ubGVmdDoiXHUyMWJmIix1cGhhcnBvb25yaWdodDoiXHUyMWJlIix1cGx1czoiXHUyMjhlIixVcHBlckxlZnRBcnJvdzoiXHUyMTk2IixVcHBlclJpZ2h0QXJyb3c6Ilx1MjE5NyIsdXBzaToiXHUwM2M1IixVcHNpOiJcdTAzZDIiLHVwc2loOiJcdTAzZDIiLFVwc2lsb246Ilx1MDNhNSIsdXBzaWxvbjoiXHUwM2M1IixVcFRlZUFycm93OiJcdTIxYTUiLFVwVGVlOiJcdTIyYTUiLHVwdXBhcnJvd3M6Ilx1MjFjOCIsdXJjb3JuOiJcdTIzMWQiLHVyY29ybmVyOiJcdTIzMWQiLHVyY3JvcDoiXHUyMzBlIixVcmluZzoiXHUwMTZlIix1cmluZzoiXHUwMTZmIix1cnRyaToiXHUyNWY5IixVc2NyOiJcdWQ4MzVcdWRjYjAiLHVzY3I6Ilx1ZDgzNVx1ZGNjYSIsdXRkb3Q6Ilx1MjJmMCIsVXRpbGRlOiJcdTAxNjgiLHV0aWxkZToiXHUwMTY5Iix1dHJpOiJcdTI1YjUiLHV0cmlmOiJcdTI1YjQiLHV1YXJyOiJcdTIxYzgiLFV1bWw6Ilx4ZGMiLHV1bWw6Ilx4ZmMiLHV3YW5nbGU6Ilx1MjlhNyIsdmFuZ3J0OiJcdTI5OWMiLHZhcmVwc2lsb246Ilx1MDNmNSIsdmFya2FwcGE6Ilx1MDNmMCIsdmFybm90aGluZzoiXHUyMjA1Iix2YXJwaGk6Ilx1MDNkNSIsdmFycGk6Ilx1MDNkNiIsdmFycHJvcHRvOiJcdTIyMWQiLHZhcnI6Ilx1MjE5NSIsdkFycjoiXHUyMWQ1Iix2YXJyaG86Ilx1MDNmMSIsdmFyc2lnbWE6Ilx1MDNjMiIsdmFyc3Vic2V0bmVxOiJcdTIyOGFcdWZlMDAiLHZhcnN1YnNldG5lcXE6Ilx1MmFjYlx1ZmUwMCIsdmFyc3Vwc2V0bmVxOiJcdTIyOGJcdWZlMDAiLHZhcnN1cHNldG5lcXE6Ilx1MmFjY1x1ZmUwMCIsdmFydGhldGE6Ilx1MDNkMSIsdmFydHJpYW5nbGVsZWZ0OiJcdTIyYjIiLHZhcnRyaWFuZ2xlcmlnaHQ6Ilx1MjJiMyIsdkJhcjoiXHUyYWU4IixWYmFyOiJcdTJhZWIiLHZCYXJ2OiJcdTJhZTkiLFZjeToiXHUwNDEyIix2Y3k6Ilx1MDQzMiIsdmRhc2g6Ilx1MjJhMiIsdkRhc2g6Ilx1MjJhOCIsVmRhc2g6Ilx1MjJhOSIsVkRhc2g6Ilx1MjJhYiIsVmRhc2hsOiJcdTJhZTYiLHZlZWJhcjoiXHUyMmJiIix2ZWU6Ilx1MjIyOCIsVmVlOiJcdTIyYzEiLHZlZWVxOiJcdTIyNWEiLHZlbGxpcDoiXHUyMmVlIix2ZXJiYXI6InwiLFZlcmJhcjoiXHUyMDE2Iix2ZXJ0OiJ8IixWZXJ0OiJcdTIwMTYiLFZlcnRpY2FsQmFyOiJcdTIyMjMiLFZlcnRpY2FsTGluZToifCIsVmVydGljYWxTZXBhcmF0b3I6Ilx1Mjc1OCIsVmVydGljYWxUaWxkZToiXHUyMjQwIixWZXJ5VGhpblNwYWNlOiJcdTIwMGEiLFZmcjoiXHVkODM1XHVkZDE5Iix2ZnI6Ilx1ZDgzNVx1ZGQzMyIsdmx0cmk6Ilx1MjJiMiIsdm5zdWI6Ilx1MjI4Mlx1MjBkMiIsdm5zdXA6Ilx1MjI4M1x1MjBkMiIsVm9wZjoiXHVkODM1XHVkZDRkIix2b3BmOiJcdWQ4MzVcdWRkNjciLHZwcm9wOiJcdTIyMWQiLHZydHJpOiJcdTIyYjMiLFZzY3I6Ilx1ZDgzNVx1ZGNiMSIsdnNjcjoiXHVkODM1XHVkY2NiIix2c3VibkU6Ilx1MmFjYlx1ZmUwMCIsdnN1Ym5lOiJcdTIyOGFcdWZlMDAiLHZzdXBuRToiXHUyYWNjXHVmZTAwIix2c3VwbmU6Ilx1MjI4Ylx1ZmUwMCIsVnZkYXNoOiJcdTIyYWEiLHZ6aWd6YWc6Ilx1Mjk5YSIsV2NpcmM6Ilx1MDE3NCIsd2NpcmM6Ilx1MDE3NSIsd2VkYmFyOiJcdTJhNWYiLHdlZGdlOiJcdTIyMjciLFdlZGdlOiJcdTIyYzAiLHdlZGdlcToiXHUyMjU5Iix3ZWllcnA6Ilx1MjExOCIsV2ZyOiJcdWQ4MzVcdWRkMWEiLHdmcjoiXHVkODM1XHVkZDM0IixXb3BmOiJcdWQ4MzVcdWRkNGUiLHdvcGY6Ilx1ZDgzNVx1ZGQ2OCIsd3A6Ilx1MjExOCIsd3I6Ilx1MjI0MCIsd3JlYXRoOiJcdTIyNDAiLFdzY3I6Ilx1ZDgzNVx1ZGNiMiIsd3NjcjoiXHVkODM1XHVkY2NjIix4Y2FwOiJcdTIyYzIiLHhjaXJjOiJcdTI1ZWYiLHhjdXA6Ilx1MjJjMyIseGR0cmk6Ilx1MjViZCIsWGZyOiJcdWQ4MzVcdWRkMWIiLHhmcjoiXHVkODM1XHVkZDM1Iix4aGFycjoiXHUyN2Y3Iix4aEFycjoiXHUyN2ZhIixYaToiXHUwMzllIix4aToiXHUwM2JlIix4bGFycjoiXHUyN2Y1Iix4bEFycjoiXHUyN2Y4Iix4bWFwOiJcdTI3ZmMiLHhuaXM6Ilx1MjJmYiIseG9kb3Q6Ilx1MmEwMCIsWG9wZjoiXHVkODM1XHVkZDRmIix4b3BmOiJcdWQ4MzVcdWRkNjkiLHhvcGx1czoiXHUyYTAxIix4b3RpbWU6Ilx1MmEwMiIseHJhcnI6Ilx1MjdmNiIseHJBcnI6Ilx1MjdmOSIsWHNjcjoiXHVkODM1XHVkY2IzIix4c2NyOiJcdWQ4MzVcdWRjY2QiLHhzcWN1cDoiXHUyYTA2Iix4dXBsdXM6Ilx1MmEwNCIseHV0cmk6Ilx1MjViMyIseHZlZToiXHUyMmMxIix4d2VkZ2U6Ilx1MjJjMCIsWWFjdXRlOiJceGRkIix5YWN1dGU6Ilx4ZmQiLFlBY3k6Ilx1MDQyZiIseWFjeToiXHUwNDRmIixZY2lyYzoiXHUwMTc2Iix5Y2lyYzoiXHUwMTc3IixZY3k6Ilx1MDQyYiIseWN5OiJcdTA0NGIiLHllbjoiXHhhNSIsWWZyOiJcdWQ4MzVcdWRkMWMiLHlmcjoiXHVkODM1XHVkZDM2IixZSWN5OiJcdTA0MDciLHlpY3k6Ilx1MDQ1NyIsWW9wZjoiXHVkODM1XHVkZDUwIix5b3BmOiJcdWQ4MzVcdWRkNmEiLFlzY3I6Ilx1ZDgzNVx1ZGNiNCIseXNjcjoiXHVkODM1XHVkY2NlIixZVWN5OiJcdTA0MmUiLHl1Y3k6Ilx1MDQ0ZSIseXVtbDoiXHhmZiIsWXVtbDoiXHUwMTc4IixaYWN1dGU6Ilx1MDE3OSIsemFjdXRlOiJcdTAxN2EiLFpjYXJvbjoiXHUwMTdkIix6Y2Fyb246Ilx1MDE3ZSIsWmN5OiJcdTA0MTciLHpjeToiXHUwNDM3IixaZG90OiJcdTAxN2IiLHpkb3Q6Ilx1MDE3YyIsemVldHJmOiJcdTIxMjgiLFplcm9XaWR0aFNwYWNlOiJcdTIwMGIiLFpldGE6Ilx1MDM5NiIsemV0YToiXHUwM2I2Iix6ZnI6Ilx1ZDgzNVx1ZGQzNyIsWmZyOiJcdTIxMjgiLFpIY3k6Ilx1MDQxNiIsemhjeToiXHUwNDM2Iix6aWdyYXJyOiJcdTIxZGQiLHpvcGY6Ilx1ZDgzNVx1ZGQ2YiIsWm9wZjoiXHUyMTI0Iixac2NyOiJcdWQ4MzVcdWRjYjUiLHpzY3I6Ilx1ZDgzNVx1ZGNjZiIsendqOiJcdTIwMGQiLHp3bmo6Ilx1MjAwYyJ9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0vWyEtIyUtXCosLVwvOjtcP0BcWy1cXV9ce1x9XHhBMVx4QTdceEFCXHhCNlx4QjdceEJCXHhCRlx1MDM3RVx1MDM4N1x1MDU1QS1cdTA1NUZcdTA1ODlcdTA1OEFcdTA1QkVcdTA1QzBcdTA1QzNcdTA1QzZcdTA1RjNcdTA1RjRcdTA2MDlcdTA2MEFcdTA2MENcdTA2MERcdTA2MUJcdTA2MUVcdTA2MUZcdTA2NkEtXHUwNjZEXHUwNkQ0XHUwNzAwLVx1MDcwRFx1MDdGNy1cdTA3RjlcdTA4MzAtXHUwODNFXHUwODVFXHUwOTY0XHUwOTY1XHUwOTcwXHUwOUZEXHUwQUYwXHUwREY0XHUwRTRGXHUwRTVBXHUwRTVCXHUwRjA0LVx1MEYxMlx1MEYxNFx1MEYzQS1cdTBGM0RcdTBGODVcdTBGRDAtXHUwRkQ0XHUwRkQ5XHUwRkRBXHUxMDRBLVx1MTA0Rlx1MTBGQlx1MTM2MC1cdTEzNjhcdTE0MDBcdTE2NkRcdTE2NkVcdTE2OUJcdTE2OUNcdTE2RUItXHUxNkVEXHUxNzM1XHUxNzM2XHUxN0Q0LVx1MTdENlx1MTdEOC1cdTE3REFcdTE4MDAtXHUxODBBXHUxOTQ0XHUxOTQ1XHUxQTFFXHUxQTFGXHUxQUEwLVx1MUFBNlx1MUFBOC1cdTFBQURcdTFCNUEtXHUxQjYwXHUxQkZDLVx1MUJGRlx1MUMzQi1cdTFDM0ZcdTFDN0VcdTFDN0ZcdTFDQzAtXHUxQ0M3XHUxQ0QzXHUyMDEwLVx1MjAyN1x1MjAzMC1cdTIwNDNcdTIwNDUtXHUyMDUxXHUyMDUzLVx1MjA1RVx1MjA3RFx1MjA3RVx1MjA4RFx1MjA4RVx1MjMwOC1cdTIzMEJcdTIzMjlcdTIzMkFcdTI3NjgtXHUyNzc1XHUyN0M1XHUyN0M2XHUyN0U2LVx1MjdFRlx1Mjk4My1cdTI5OThcdTI5RDgtXHUyOURCXHUyOUZDXHUyOUZEXHUyQ0Y5LVx1MkNGQ1x1MkNGRVx1MkNGRlx1MkQ3MFx1MkUwMC1cdTJFMkVcdTJFMzAtXHUyRTQ5XHUzMDAxLVx1MzAwM1x1MzAwOC1cdTMwMTFcdTMwMTQtXHUzMDFGXHUzMDMwXHUzMDNEXHUzMEEwXHUzMEZCXHVBNEZFXHVBNEZGXHVBNjBELVx1QTYwRlx1QTY3M1x1QTY3RVx1QTZGMi1cdUE2RjdcdUE4NzQtXHVBODc3XHVBOENFXHVBOENGXHVBOEY4LVx1QThGQVx1QThGQ1x1QTkyRVx1QTkyRlx1QTk1Rlx1QTlDMS1cdUE5Q0RcdUE5REVcdUE5REZcdUFBNUMtXHVBQTVGXHVBQURFXHVBQURGXHVBQUYwXHVBQUYxXHVBQkVCXHVGRDNFXHVGRDNGXHVGRTEwLVx1RkUxOVx1RkUzMC1cdUZFNTJcdUZFNTQtXHVGRTYxXHVGRTYzXHVGRTY4XHVGRTZBXHVGRTZCXHVGRjAxLVx1RkYwM1x1RkYwNS1cdUZGMEFcdUZGMEMtXHVGRjBGXHVGRjFBXHVGRjFCXHVGRjFGXHVGRjIwXHVGRjNCLVx1RkYzRFx1RkYzRlx1RkY1Qlx1RkY1RFx1RkY1Ri1cdUZGNjVdfFx1RDgwMFtcdUREMDAtXHVERDAyXHVERjlGXHVERkQwXXxcdUQ4MDFcdURENkZ8XHVEODAyW1x1REM1N1x1REQxRlx1REQzRlx1REU1MC1cdURFNThcdURFN0ZcdURFRjAtXHVERUY2XHVERjM5LVx1REYzRlx1REY5OS1cdURGOUNdfFx1RDgwNFtcdURDNDctXHVEQzREXHVEQ0JCXHVEQ0JDXHVEQ0JFLVx1RENDMVx1REQ0MC1cdURENDNcdURENzRcdURENzVcdUREQzUtXHVEREM5XHVERENEXHVERERCXHVERERELVx1RERERlx1REUzOC1cdURFM0RcdURFQTldfFx1RDgwNVtcdURDNEItXHVEQzRGXHVEQzVCXHVEQzVEXHVEQ0M2XHVEREMxLVx1REREN1x1REU0MS1cdURFNDNcdURFNjAtXHVERTZDXHVERjNDLVx1REYzRV18XHVEODA2W1x1REUzRi1cdURFNDZcdURFOUEtXHVERTlDXHVERTlFLVx1REVBMl18XHVEODA3W1x1REM0MS1cdURDNDVcdURDNzBcdURDNzFdfFx1RDgwOVtcdURDNzAtXHVEQzc0XXxcdUQ4MUFbXHVERTZFXHVERTZGXHVERUY1XHVERjM3LVx1REYzQlx1REY0NF18XHVEODJGXHVEQzlGfFx1RDgzNltcdURFODctXHVERThCXXxcdUQ4M0FbXHVERDVFXHVERDVGXS99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9IjxbQS1aYS16XVtBLVphLXowLTlcXC1dKig/OlxccytbYS16QS1aXzpdW2EtekEtWjAtOTouXy1dKig/Olxccyo9XFxzKig/OlteXCInPTw+YFxceDAwLVxceDIwXSt8J1teJ10qJ3xcIlteXCJdKlwiKSk/KSpcXHMqXFwvPz4iLGk9IjxcXC9bQS1aYS16XVtBLVphLXowLTlcXC1dKlxccyo+IixvPW5ldyBSZWdFeHAoIl4oPzoiK3IrInwiK2krInxceDNjIS0tLS1ceDNlfFx4M2MhLS0oPzotP1tePi1dKSg/Oi0/W14tXSkqLS1ceDNlfDxbP10uKj9bP10+fDwhW0EtWl0rXFxzK1tePl0qPnw8IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4pIiksYT1uZXcgUmVnRXhwKCJeKD86IityKyJ8IitpKyIpIik7ZS5leHBvcnRzLkhUTUxfVEFHX1JFPW8sZS5leHBvcnRzLkhUTUxfT1BFTl9DTE9TRV9UQUdfUkU9YX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHMudG9rZW5pemU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9ZS5wb3MsdT1lLnNyYy5jaGFyQ29kZUF0KHMpO2lmKHQpcmV0dXJuITE7aWYoMTI2IT09dSlyZXR1cm4hMTtpZihyPWUuc2NhbkRlbGltcyhlLnBvcywhMCksbz1yLmxlbmd0aCxhPVN0cmluZy5mcm9tQ2hhckNvZGUodSksbzwyKXJldHVybiExO2ZvcihvJTImJihpPWUucHVzaCgidGV4dCIsIiIsMCksaS5jb250ZW50PWEsby0tKSxuPTA7bjxvO24rPTIpaT1lLnB1c2goInRleHQiLCIiLDApLGkuY29udGVudD1hK2EsZS5kZWxpbWl0ZXJzLnB1c2goe21hcmtlcjp1LGp1bXA6bix0b2tlbjplLnRva2Vucy5sZW5ndGgtMSxsZXZlbDplLmxldmVsLGVuZDotMSxvcGVuOnIuY2FuX29wZW4sY2xvc2U6ci5jYW5fY2xvc2V9KTtyZXR1cm4gZS5wb3MrPXIubGVuZ3RoLCEwfSxlLmV4cG9ydHMucG9zdFByb2Nlc3M9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhPVtdLHM9ZS5kZWxpbWl0ZXJzLHU9ZS5kZWxpbWl0ZXJzLmxlbmd0aDtmb3IodD0wO3Q8dTt0Kyspcj1zW3RdLDEyNj09PXIubWFya2VyJiYtMSE9PXIuZW5kJiYoaT1zW3IuZW5kXSxvPWUudG9rZW5zW3IudG9rZW5dLG8udHlwZT0ic19vcGVuIixvLnRhZz0icyIsby5uZXN0aW5nPTEsby5tYXJrdXA9In5+IixvLmNvbnRlbnQ9IiIsbz1lLnRva2Vuc1tpLnRva2VuXSxvLnR5cGU9InNfY2xvc2UiLG8udGFnPSJzIixvLm5lc3Rpbmc9LTEsby5tYXJrdXA9In5+IixvLmNvbnRlbnQ9IiIsInRleHQiPT09ZS50b2tlbnNbaS50b2tlbi0xXS50eXBlJiYifiI9PT1lLnRva2Vuc1tpLnRva2VuLTFdLmNvbnRlbnQmJmEucHVzaChpLnRva2VuLTEpKTtmb3IoO2EubGVuZ3RoOyl7Zm9yKHQ9YS5wb3AoKSxuPXQrMTtuPGUudG9rZW5zLmxlbmd0aCYmInNfY2xvc2UiPT09ZS50b2tlbnNbbl0udHlwZTspbisrO24tLSx0IT09biYmKG89ZS50b2tlbnNbbl0sZS50b2tlbnNbbl09ZS50b2tlbnNbdF0sZS50b2tlbnNbdF09byl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHMudG9rZW5pemU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz1lLnBvcyxhPWUuc3JjLmNoYXJDb2RlQXQobyk7aWYodClyZXR1cm4hMTtpZig5NSE9PWEmJjQyIT09YSlyZXR1cm4hMTtmb3Iocj1lLnNjYW5EZWxpbXMoZS5wb3MsNDI9PT1hKSxuPTA7bjxyLmxlbmd0aDtuKyspaT1lLnB1c2goInRleHQiLCIiLDApLGkuY29udGVudD1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpLGUuZGVsaW1pdGVycy5wdXNoKHttYXJrZXI6YSxsZW5ndGg6ci5sZW5ndGgsanVtcDpuLHRva2VuOmUudG9rZW5zLmxlbmd0aC0xLGxldmVsOmUubGV2ZWwsZW5kOi0xLG9wZW46ci5jYW5fb3BlbixjbG9zZTpyLmNhbl9jbG9zZX0pO3JldHVybiBlLnBvcys9ci5sZW5ndGgsITB9LGUuZXhwb3J0cy5wb3N0UHJvY2Vzcz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1lLmRlbGltaXRlcnMsdT1lLmRlbGltaXRlcnMubGVuZ3RoO2Zvcih0PXUtMTt0Pj0wO3QtLSluPXNbdF0sOTUhPT1uLm1hcmtlciYmNDIhPT1uLm1hcmtlcnx8LTEhPT1uLmVuZCYmKHI9c1tuLmVuZF0sYT10PjAmJnNbdC0xXS5lbmQ9PT1uLmVuZCsxJiZzW3QtMV0udG9rZW49PT1uLnRva2VuLTEmJnNbbi5lbmQrMV0udG9rZW49PT1yLnRva2VuKzEmJnNbdC0xXS5tYXJrZXI9PT1uLm1hcmtlcixvPVN0cmluZy5mcm9tQ2hhckNvZGUobi5tYXJrZXIpLGk9ZS50b2tlbnNbbi50b2tlbl0saS50eXBlPWE/InN0cm9uZ19vcGVuIjoiZW1fb3BlbiIsaS50YWc9YT8ic3Ryb25nIjoiZW0iLGkubmVzdGluZz0xLGkubWFya3VwPWE/bytvOm8saS5jb250ZW50PSIiLGk9ZS50b2tlbnNbci50b2tlbl0saS50eXBlPWE/InN0cm9uZ19jbG9zZSI6ImVtX2Nsb3NlIixpLnRhZz1hPyJzdHJvbmciOiJlbSIsaS5uZXN0aW5nPS0xLGkubWFya3VwPWE/bytvOm8saS5jb250ZW50PSIiLGEmJihlLnRva2Vuc1tzW3QtMV0udG9rZW5dLmNvbnRlbnQ9IiIsZS50b2tlbnNbc1tuLmVuZCsxXS50b2tlbl0uY29udGVudD0iIix0LS0pKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLmZvckVhY2goZnVuY3Rpb24odCl7dCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlW25dPXRbbl19KX0pLGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1pKGUpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1pKGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1pKGUpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PWkoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLj8qK14kW1xdXFwoKXt9fC1dL2csIlxcJCYiKX1mdW5jdGlvbiBsKGUpe3JldHVybiBPYmplY3Qua2V5cyhlfHx7fSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHYuaGFzT3duUHJvcGVydHkodCl9LCExKX1mdW5jdGlvbiBwKGUpe2UuX19pbmRleF9fPS0xLGUuX190ZXh0X2NhY2hlX189IiJ9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj10LnNsaWNlKG4pO3JldHVybiBlLnRlc3Qocik/ci5tYXRjaChlKVswXS5sZW5ndGg6MH19ZnVuY3Rpb24gZCgpe3JldHVybiBmdW5jdGlvbihlLHQpe3Qubm9ybWFsaXplKGUpfX1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUucmVwbGFjZSgiJVRMRFMlIixpLnNyY190bGRzKX1mdW5jdGlvbiByKGUsdCl7dGhyb3cgbmV3IEVycm9yKCcoTGlua2lmeUl0KSBJbnZhbGlkIHNjaGVtYSAiJytlKyciOiAnK3QpfXZhciBpPWUucmU9big1ODgpKGUuX19vcHRzX18pLGw9ZS5fX3RsZHNfXy5zbGljZSgpO2Uub25Db21waWxlKCksZS5fX3RsZHNfcmVwbGFjZWRfX3x8bC5wdXNoKHgpLGwucHVzaChpLnNyY194biksaS5zcmNfdGxkcz1sLmpvaW4oInwiKSxpLmVtYWlsX2Z1enp5PVJlZ0V4cCh0KGkudHBsX2VtYWlsX2Z1enp5KSwiaSIpLGkubGlua19mdXp6eT1SZWdFeHAodChpLnRwbF9saW5rX2Z1enp5KSwiaSIpLGkubGlua19ub19pcF9mdXp6eT1SZWdFeHAodChpLnRwbF9saW5rX25vX2lwX2Z1enp5KSwiaSIpLGkuaG9zdF9mdXp6eV90ZXN0PVJlZ0V4cCh0KGkudHBsX2hvc3RfZnV6enlfdGVzdCksImkiKTt2YXIgaD1bXTtlLl9fY29tcGlsZWRfXz17fSxPYmplY3Qua2V5cyhlLl9fc2NoZW1hc19fKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX19zY2hlbWFzX19bdF07aWYobnVsbCE9PW4pe3ZhciBpPXt2YWxpZGF0ZTpudWxsLGxpbms6bnVsbH07cmV0dXJuIGUuX19jb21waWxlZF9fW3RdPWksYShuKT8ocyhuLnZhbGlkYXRlKT9pLnZhbGlkYXRlPWYobi52YWxpZGF0ZSk6dShuLnZhbGlkYXRlKT9pLnZhbGlkYXRlPW4udmFsaWRhdGU6cih0LG4pLHZvaWQodShuLm5vcm1hbGl6ZSk/aS5ub3JtYWxpemU9bi5ub3JtYWxpemU6bi5ub3JtYWxpemU/cih0LG4pOmkubm9ybWFsaXplPWQoKSkpOm8obik/dm9pZCBoLnB1c2godCk6dm9pZCByKHQsbil9fSksaC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX19jb21waWxlZF9fW2UuX19zY2hlbWFzX19bdF1dJiYoZS5fX2NvbXBpbGVkX19bdF0udmFsaWRhdGU9ZS5fX2NvbXBpbGVkX19bZS5fX3NjaGVtYXNfX1t0XV0udmFsaWRhdGUsZS5fX2NvbXBpbGVkX19bdF0ubm9ybWFsaXplPWUuX19jb21waWxlZF9fW2UuX19zY2hlbWFzX19bdF1dLm5vcm1hbGl6ZSl9KSxlLl9fY29tcGlsZWRfX1siIl09e3ZhbGlkYXRlOm51bGwsbm9ybWFsaXplOmQoKX07dmFyIG09T2JqZWN0LmtleXMoZS5fX2NvbXBpbGVkX18pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MCYmZS5fX2NvbXBpbGVkX19bdF19KS5tYXAoYykuam9pbigifCIpO2UucmUuc2NoZW1hX3Rlc3Q9UmVnRXhwKCIoXnwoPyFfKSg/Ols+PFx1ZmY1Y118IitpLnNyY19aUENjKyIpKSgiK20rIikiLCJpIiksZS5yZS5zY2hlbWFfc2VhcmNoPVJlZ0V4cCgiKF58KD8hXykoPzpbPjxcdWZmNWNdfCIraS5zcmNfWlBDYysiKSkoIittKyIpIiwiaWciKSxlLnJlLnByZXRlc3Q9UmVnRXhwKCIoIitlLnJlLnNjaGVtYV90ZXN0LnNvdXJjZSsiKXwoIitlLnJlLmhvc3RfZnV6enlfdGVzdC5zb3VyY2UrIil8QCIsImkiKSxwKGUpfWZ1bmN0aW9uIG0oZSx0KXt2YXIgbj1lLl9faW5kZXhfXyxyPWUuX19sYXN0X2luZGV4X18saT1lLl9fdGV4dF9jYWNoZV9fLnNsaWNlKG4scik7dGhpcy5zY2hlbWE9ZS5fX3NjaGVtYV9fLnRvTG93ZXJDYXNlKCksdGhpcy5pbmRleD1uK3QsdGhpcy5sYXN0SW5kZXg9cit0LHRoaXMucmF3PWksdGhpcy50ZXh0PWksdGhpcy51cmw9aX1mdW5jdGlvbiBnKGUsdCl7dmFyIG49bmV3IG0oZSx0KTtyZXR1cm4gZS5fX2NvbXBpbGVkX19bbi5zY2hlbWFdLm5vcm1hbGl6ZShuLGUpLG59ZnVuY3Rpb24geShlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeShlLHQpO3R8fGwoZSkmJih0PWUsZT17fSksdGhpcy5fX29wdHNfXz1yKHt9LHYsdCksdGhpcy5fX2luZGV4X189LTEsdGhpcy5fX2xhc3RfaW5kZXhfXz0tMSx0aGlzLl9fc2NoZW1hX189IiIsdGhpcy5fX3RleHRfY2FjaGVfXz0iIix0aGlzLl9fc2NoZW1hc19fPXIoe30sYixlKSx0aGlzLl9fY29tcGlsZWRfXz17fSx0aGlzLl9fdGxkc19fPUMsdGhpcy5fX3RsZHNfcmVwbGFjZWRfXz0hMSx0aGlzLnJlPXt9LGgodGhpcyl9dmFyIHY9e2Z1enp5TGluazohMCxmdXp6eUVtYWlsOiEwLGZ1enp5SVA6ITF9LGI9eyJodHRwOiI6e3ZhbGlkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnNsaWNlKHQpO3JldHVybiBuLnJlLmh0dHB8fChuLnJlLmh0dHA9bmV3IFJlZ0V4cCgiXlxcL1xcLyIrbi5yZS5zcmNfYXV0aCtuLnJlLnNyY19ob3N0X3BvcnRfc3RyaWN0K24ucmUuc3JjX3BhdGgsImkiKSksbi5yZS5odHRwLnRlc3Qocik/ci5tYXRjaChuLnJlLmh0dHApWzBdLmxlbmd0aDowfX0sImh0dHBzOiI6Imh0dHA6IiwiZnRwOiI6Imh0dHA6IiwiLy8iOnt2YWxpZGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5zbGljZSh0KTtyZXR1cm4gbi5yZS5ub19odHRwfHwobi5yZS5ub19odHRwPW5ldyBSZWdFeHAoIl4iK24ucmUuc3JjX2F1dGgrIig/OmxvY2FsaG9zdHwoPzooPzoiK24ucmUuc3JjX2RvbWFpbisiKVxcLikrIituLnJlLnNyY19kb21haW5fcm9vdCsiKSIrbi5yZS5zcmNfcG9ydCtuLnJlLnNyY19ob3N0X3Rlcm1pbmF0b3Irbi5yZS5zcmNfcGF0aCwiaSIpKSxuLnJlLm5vX2h0dHAudGVzdChyKT90Pj0zJiYiOiI9PT1lW3QtM10/MDp0Pj0zJiYiLyI9PT1lW3QtM10/MDpyLm1hdGNoKG4ucmUubm9faHR0cClbMF0ubGVuZ3RoOjB9fSwibWFpbHRvOiI6e3ZhbGlkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnNsaWNlKHQpO3JldHVybiBuLnJlLm1haWx0b3x8KG4ucmUubWFpbHRvPW5ldyBSZWdFeHAoIl4iK24ucmUuc3JjX2VtYWlsX25hbWUrIkAiK24ucmUuc3JjX2hvc3Rfc3RyaWN0LCJpIikpLG4ucmUubWFpbHRvLnRlc3Qocik/ci5tYXRjaChuLnJlLm1haWx0bylbMF0ubGVuZ3RoOjB9fX0seD0iYVtjZGVmZ2lsbW5vcXJzdHV3eHpdfGJbYWJkZWZnaGlqbW5vcnN0dnd5el18Y1thY2RmZ2hpa2xtbm9ydXZ3eHl6XXxkW2Vqa21vel18ZVtjZWdyc3R1XXxmW2lqa21vcl18Z1thYmRlZmdoaWxtbnBxcnN0dXd5XXxoW2ttbnJ0dV18aVtkZWxtbm9xcnN0XXxqW2Vtb3BdfGtbZWdoaW1ucHJ3eXpdfGxbYWJjaWtyc3R1dnldfG1bYWNkZWdoa2xtbm9wcXJzdHV2d3h5el18blthY2VmZ2lsb3BydXpdfG9tfHBbYWVmZ2hrbG1ucnN0d3ldfHFhfHJbZW9zdXddfHNbYWJjZGVnaGlqa2xtbm9ydHV2eHl6XXx0W2NkZmdoamtsbW5vcnR2d3pdfHVbYWdrc3l6XXx2W2FjZWdpbnVdfHdbZnNdfHlbZXRdfHpbYW13XSIsQz0iYml6fGNvbXxlZHV8Z292fG5ldHxvcmd8cHJvfHdlYnx4eHh8YWVyb3xhc2lhfGNvb3B8aW5mb3xtdXNldW18bmFtZXxzaG9wfFx1MDQ0MFx1MDQ0NCIuc3BsaXQoInwiKTt5LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fX3NjaGVtYXNfX1tlXT10LGgodGhpcyksdGhpc30seS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fb3B0c19fPXIodGhpcy5fX29wdHNfXyxlKSx0aGlzfSx5LnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX190ZXh0X2NhY2hlX189ZSx0aGlzLl9faW5kZXhfXz0tMSwhZS5sZW5ndGgpcmV0dXJuITE7dmFyIHQsbixyLGksbyxhLHMsdTtpZih0aGlzLnJlLnNjaGVtYV90ZXN0LnRlc3QoZSkpZm9yKHM9dGhpcy5yZS5zY2hlbWFfc2VhcmNoLHMubGFzdEluZGV4PTA7bnVsbCE9PSh0PXMuZXhlYyhlKSk7KWlmKGk9dGhpcy50ZXN0U2NoZW1hQXQoZSx0WzJdLHMubGFzdEluZGV4KSl7dGhpcy5fX3NjaGVtYV9fPXRbMl0sdGhpcy5fX2luZGV4X189dC5pbmRleCt0WzFdLmxlbmd0aCx0aGlzLl9fbGFzdF9pbmRleF9fPXQuaW5kZXgrdFswXS5sZW5ndGgraTticmVha31yZXR1cm4gdGhpcy5fX29wdHNfXy5mdXp6eUxpbmsmJnRoaXMuX19jb21waWxlZF9fWyJodHRwOiJdJiYodT1lLnNlYXJjaCh0aGlzLnJlLmhvc3RfZnV6enlfdGVzdCkpPj0wJiYodGhpcy5fX2luZGV4X188MHx8dTx0aGlzLl9faW5kZXhfXykmJm51bGwhPT0obj1lLm1hdGNoKHRoaXMuX19vcHRzX18uZnV6enlJUD90aGlzLnJlLmxpbmtfZnV6enk6dGhpcy5yZS5saW5rX25vX2lwX2Z1enp5KSkmJihvPW4uaW5kZXgrblsxXS5sZW5ndGgsKHRoaXMuX19pbmRleF9fPDB8fG88dGhpcy5fX2luZGV4X18pJiYodGhpcy5fX3NjaGVtYV9fPSIiLHRoaXMuX19pbmRleF9fPW8sdGhpcy5fX2xhc3RfaW5kZXhfXz1uLmluZGV4K25bMF0ubGVuZ3RoKSksdGhpcy5fX29wdHNfXy5mdXp6eUVtYWlsJiZ0aGlzLl9fY29tcGlsZWRfX1sibWFpbHRvOiJdJiZlLmluZGV4T2YoIkAiKT49MCYmbnVsbCE9PShyPWUubWF0Y2godGhpcy5yZS5lbWFpbF9mdXp6eSkpJiYobz1yLmluZGV4K3JbMV0ubGVuZ3RoLGE9ci5pbmRleCtyWzBdLmxlbmd0aCwodGhpcy5fX2luZGV4X188MHx8bzx0aGlzLl9faW5kZXhfX3x8bz09PXRoaXMuX19pbmRleF9fJiZhPnRoaXMuX19sYXN0X2luZGV4X18pJiYodGhpcy5fX3NjaGVtYV9fPSJtYWlsdG86Iix0aGlzLl9faW5kZXhfXz1vLHRoaXMuX19sYXN0X2luZGV4X189YSkpLHRoaXMuX19pbmRleF9fPj0wfSx5LnByb3RvdHlwZS5wcmV0ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlLnByZXRlc3QudGVzdChlKX0seS5wcm90b3R5cGUudGVzdFNjaGVtYUF0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5fX2NvbXBpbGVkX19bdC50b0xvd2VyQ2FzZSgpXT90aGlzLl9fY29tcGlsZWRfX1t0LnRvTG93ZXJDYXNlKCldLnZhbGlkYXRlKGUsbix0aGlzKTowfSx5LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlKXt2YXIgdD0wLG49W107dGhpcy5fX2luZGV4X18+PTAmJnRoaXMuX190ZXh0X2NhY2hlX189PT1lJiYobi5wdXNoKGcodGhpcyx0KSksdD10aGlzLl9fbGFzdF9pbmRleF9fKTtmb3IodmFyIHI9dD9lLnNsaWNlKHQpOmU7dGhpcy50ZXN0KHIpOyluLnB1c2goZyh0aGlzLHQpKSxyPXIuc2xpY2UodGhpcy5fX2xhc3RfaW5kZXhfXyksdCs9dGhpcy5fX2xhc3RfaW5kZXhfXztyZXR1cm4gbi5sZW5ndGg/bjpudWxsfSx5LnByb3RvdHlwZS50bGRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9QXJyYXkuaXNBcnJheShlKT9lOltlXSx0Pyh0aGlzLl9fdGxkc19fPXRoaXMuX190bGRzX18uY29uY2F0KGUpLnNvcnQoKS5maWx0ZXIoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlIT09blt0LTFdfSkucmV2ZXJzZSgpLGgodGhpcyksdGhpcyk6KHRoaXMuX190bGRzX189ZS5zbGljZSgpLHRoaXMuX190bGRzX3JlcGxhY2VkX189ITAsaCh0aGlzKSx0aGlzKX0seS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGUpe2Uuc2NoZW1hfHwoZS51cmw9Imh0dHA6Ly8iK2UudXJsKSwibWFpbHRvOiIhPT1lLnNjaGVtYXx8L15tYWlsdG86L2kudGVzdChlLnVybCl8fChlLnVybD0ibWFpbHRvOiIrZS51cmwpfSx5LnByb3RvdHlwZS5vbkNvbXBpbGU9ZnVuY3Rpb24oKXt9LGUuZXhwb3J0cz15fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0vW1wwLVx1RDdGRlx1RTAwMC1cdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0vW1wwLVx4MUZceDdGLVx4OUZdL30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9L1sgXHhBMFx1MTY4MFx1MjAwMC1cdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBdL30sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLHIpe3ZhciBpOyFmdW5jdGlvbihvKXtmdW5jdGlvbiBhKGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKE5bZV0pfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj1bXTtuLS07KXJbbl09dChlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiB1KGUsdCl7dmFyIG49ZS5zcGxpdCgiQCIpLHI9IiI7cmV0dXJuIG4ubGVuZ3RoPjEmJihyPW5bMF0rIkAiLGU9blsxXSksZT1lLnJlcGxhY2UoRiwiLiIpLHIrcyhlLnNwbGl0KCIuIiksdCkuam9pbigiLiIpfWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciB0LG4scj1bXSxpPTAsbz1lLmxlbmd0aDtpPG87KXQ9ZS5jaGFyQ29kZUF0KGkrKyksdD49NTUyOTYmJnQ8PTU2MzE5JiZpPG8/KG49ZS5jaGFyQ29kZUF0KGkrKyksNTYzMjA9PSg2NDUxMiZuKT9yLnB1c2goKCgxMDIzJnQpPDwxMCkrKDEwMjMmbikrNjU1MzYpOihyLnB1c2godCksaS0tKSk6ci5wdXNoKHQpO3JldHVybiByfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIHMoZSxmdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gZT42NTUzNSYmKGUtPTY1NTM2LHQrPVAoZT4+PjEwJjEwMjN8NTUyOTYpLGU9NTYzMjB8MTAyMyZlKSx0Kz1QKGUpfSkuam9pbigiIil9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS00ODwxMD9lLTIyOmUtNjU8MjY/ZS02NTplLTk3PDI2P2UtOTc6Q31mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGUrMjIrNzUqKGU8MjYpLSgoMCE9dCk8PDUpfWZ1bmN0aW9uIGQoZSx0LG4pe3ZhciByPTA7Zm9yKGU9bj9MKGUvUyk6ZT4+MSxlKz1MKGUvdCk7ZT5JKkQ+PjE7cis9QyllPUwoZS9JKTtyZXR1cm4gTChyKyhJKzEpKmUvKGUrdykpfWZ1bmN0aW9uIGgoZSl7dmFyIHQsbixyLGksbyxzLHUsYyxmLGgsbT1bXSxnPWUubGVuZ3RoLHk9MCx2PUEsYj1rO2ZvcihuPWUubGFzdEluZGV4T2YoXyksbjwwJiYobj0wKSxyPTA7cjxuOysrcillLmNoYXJDb2RlQXQocik+PTEyOCYmYSgibm90LWJhc2ljIiksbS5wdXNoKGUuY2hhckNvZGVBdChyKSk7Zm9yKGk9bj4wP24rMTowO2k8Zzspe2ZvcihvPXkscz0xLHU9QztpPj1nJiZhKCJpbnZhbGlkLWlucHV0IiksYz1wKGUuY2hhckNvZGVBdChpKyspKSwoYz49Q3x8Yz5MKCh4LXkpL3MpKSYmYSgib3ZlcmZsb3ciKSx5Kz1jKnMsZj11PD1iP0U6dT49YitEP0Q6dS1iLCEoYzxmKTt1Kz1DKWg9Qy1mLHM+TCh4L2gpJiZhKCJvdmVyZmxvdyIpLHMqPWg7dD1tLmxlbmd0aCsxLGI9ZCh5LW8sdCwwPT1vKSxMKHkvdCk+eC12JiZhKCJvdmVyZmxvdyIpLHYrPUwoeS90KSx5JT10LG0uc3BsaWNlKHkrKywwLHYpfXJldHVybiBsKG0pfWZ1bmN0aW9uIG0oZSl7dmFyIHQsbixyLGksbyxzLHUsbCxwLGgsbSxnLHksdixiLHc9W107Zm9yKGU9YyhlKSxnPWUubGVuZ3RoLHQ9QSxuPTAsbz1rLHM9MDtzPGc7KytzKShtPWVbc10pPDEyOCYmdy5wdXNoKFAobSkpO2ZvcihyPWk9dy5sZW5ndGgsaSYmdy5wdXNoKF8pO3I8Zzspe2Zvcih1PXgscz0wO3M8ZzsrK3MpKG09ZVtzXSk+PXQmJm08dSYmKHU9bSk7Zm9yKHk9cisxLHUtdD5MKCh4LW4pL3kpJiZhKCJvdmVyZmxvdyIpLG4rPSh1LXQpKnksdD11LHM9MDtzPGc7KytzKWlmKG09ZVtzXSxtPHQmJisrbj54JiZhKCJvdmVyZmxvdyIpLG09PXQpe2ZvcihsPW4scD1DO2g9cDw9bz9FOnA+PW8rRD9EOnAtbywhKGw8aCk7cCs9QyliPWwtaCx2PUMtaCx3LnB1c2goUChmKGgrYiV2LDApKSksbD1MKGIvdik7dy5wdXNoKFAoZihsLDApKSksbz1kKG4seSxyPT1pKSxuPTAsKytyfSsrbiwrK3R9cmV0dXJuIHcuam9pbigiIil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gdShlLGZ1bmN0aW9uKGUpe3JldHVybiBULnRlc3QoZSk/aChlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOmV9KX1mdW5jdGlvbiB5KGUpe3JldHVybiB1KGUsZnVuY3Rpb24oZSl7cmV0dXJuIE8udGVzdChlKT8ieG4tLSIrbShlKTplfSl9dmFyIHY9KCJvYmplY3QiPT10eXBlb2YgdCYmdCYmdC5ub2RlVHlwZSwib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUubm9kZVR5cGUsIm9iamVjdCI9PXR5cGVvZiByJiZyKTt2YXIgYix4PTIxNDc0ODM2NDcsQz0zNixFPTEsRD0yNix3PTM4LFM9NzAwLGs9NzIsQT0xMjgsXz0iLSIsVD0vXnhuLS0vLE89L1teXHgyMC1ceDdFXS8sRj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csTj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sST1DLUUsTD1NYXRoLmZsb29yLFA9U3RyaW5nLmZyb21DaGFyQ29kZTtiPXt2ZXJzaW9uOiIxLjQuMSIsdWNzMjp7ZGVjb2RlOmMsZW5jb2RlOmx9LGRlY29kZTpoLGVuY29kZTptLHRvQVNDSUk6eSx0b1VuaWNvZGU6Z30sdm9pZCAwIT09KGk9ZnVuY3Rpb24oKXtyZXR1cm4gYn0uY2FsbCh0LG4sdCxlKSkmJihlLmV4cG9ydHM9aSl9KCl9KS5jYWxsKHQsbigxMDIpKGUpLG4oMTEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsYSl7dmFyIHMsdSxjLGw9bigyKTtsLm9uKHIsInNlbGVjdCIsZnVuY3Rpb24obixyKXtpZighcyl7dmFyIGw9ci5wYXJlbnROb2RlLHA9bC5wYXJlbnROb2RlO3M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikscC5hcHBlbmRDaGlsZChzKTt2YXIgZj1sLnN0eWxlLnRvcCxkPSIiLGg9dC5jdXJzb3JDb29yZHMoKS50b3A7cGFyc2VJbnQoZiwxMCk8aCYmKGY9IiIsZD13aW5kb3cuaW5uZXJIZWlnaHQtaCszKyJweCIpLHMuY2xhc3NOYW1lPSJDb2RlTWlycm9yLWhpbnRzLXdyYXBwZXIiLHMuc3R5bGUubGVmdD1sLnN0eWxlLmxlZnQscy5zdHlsZS50b3A9ZixzLnN0eWxlLmJvdHRvbT1kLGwuc3R5bGUubGVmdD0iIixsLnN0eWxlLnRvcD0iIix1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHUuY2xhc3NOYW1lPSJDb2RlTWlycm9yLWhpbnQtaW5mb3JtYXRpb24iLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5jbGFzc05hbWU9IkNvZGVNaXJyb3ItaGludC1kZXByZWNhdGlvbiIsZD8ocy5hcHBlbmRDaGlsZChjKSxzLmFwcGVuZENoaWxkKHUpLHMuYXBwZW5kQ2hpbGQobCkpOihzLmFwcGVuZENoaWxkKGwpLHMuYXBwZW5kQ2hpbGQodSkscy5hcHBlbmRDaGlsZChjKSk7dmFyIG09cy5jbGllbnRIZWlnaHQsZz1wYXJzZUZsb2F0KFN0cmluZyhmKS5yZXBsYWNlKCJweCIsIiIpKSx5PWc7bStnPndpbmRvdy5pbm5lckhlaWdodCYmKHk9d2luZG93LmlubmVySGVpZ2h0LTQwLW0pLHMuc3R5bGUudG9wPXkrInB4IixlLndyYXBwZXI9czt2YXIgdjtzLmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIix2PWZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09bCYmKHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLHYpLHMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKSxzPW51bGwsdT1udWxsLHY9bnVsbCl9KX12YXIgYj1uLmRlc2NyaXB0aW9uP28obi5kZXNjcmlwdGlvbix7c2FuaXRpemU6ITB9KToiIix4PW4udHlwZSYmInVuZGVmaW5lZCIhPT1uLnR5cGU/JzxzcGFuIGNsYXNzPSJpbmZvVHlwZSI+JytpKG4udHlwZSkrIjwvc3Bhbj4iOiIiO2lmKHUuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nKygiPHA+Ij09PWIuc2xpY2UoMCwzKT8iPHA+Iit4K2Iuc2xpY2UoMyk6eCtiKSsiPC9kaXY+IixuLmlzRGVwcmVjYXRlZCl7dmFyIEM9bi5kZXByZWNhdGlvblJlYXNvbj9vKG4uZGVwcmVjYXRpb25SZWFzb24se3Nhbml0aXplOiEwfSk6IiI7Yy5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJkZXByZWNhdGlvbi1sYWJlbCI+RGVwcmVjYXRlZDwvc3Bhbj4nK0MsYy5zdHlsZS5kaXNwbGF5PSJibG9jayJ9ZWxzZSBjLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2EmJmEodSl9KX1mdW5jdGlvbiBpKGUpe3JldHVybic8YSBjbGFzcz0idHlwZU5hbWUiPicrZSsiPC9hPiJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNTkyKTt0LmRlZmF1bHQ9cn0pLmNhbGwodCxuKDExKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7ZShuKDIpKX0oZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZS5zZWFyY2gobyk7cmV0dXJuLTE9PXQ/MDp0fWZ1bmN0aW9uIG4oZSx0LG4pe3JldHVybi9cYnN0cmluZ1xiLy50ZXN0KGUuZ2V0VG9rZW5UeXBlQXQoYSh0LmxpbmUsMCkpKSYmIS9eW1wnXCJcYF0vLnRlc3Qobil9ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuZ2V0TW9kZSgpO3JldHVybiExIT09bi51c2VJbm5lckNvbW1lbnRzJiZuLmlubmVyTW9kZT9lLmdldE1vZGVBdCh0KTpufXZhciBpPXt9LG89L1teXHNcdTAwYTBdLyxhPWUuUG9zO2UuY29tbWFuZHMudG9nZ2xlQ29tbWVudD1mdW5jdGlvbihlKXtlLnRvZ2dsZUNvbW1lbnQoKX0sZS5kZWZpbmVFeHRlbnNpb24oInRvZ2dsZUNvbW1lbnQiLGZ1bmN0aW9uKGUpe2V8fChlPWkpO2Zvcih2YXIgdD10aGlzLG49MS8wLHI9dGhpcy5saXN0U2VsZWN0aW9ucygpLG89bnVsbCxzPXIubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciB1PXJbc10uZnJvbSgpLGM9cltzXS50bygpO3UubGluZT49bnx8KGMubGluZT49biYmKGM9YShuLDApKSxuPXUubGluZSxudWxsPT1vP3QudW5jb21tZW50KHUsYyxlKT9vPSJ1biI6KHQubGluZUNvbW1lbnQodSxjLGUpLG89ImxpbmUiKToidW4iPT1vP3QudW5jb21tZW50KHUsYyxlKTp0LmxpbmVDb21tZW50KHUsYyxlKSl9fSksZS5kZWZpbmVFeHRlbnNpb24oImxpbmVDb21tZW50IixmdW5jdGlvbihlLHMsdSl7dXx8KHU9aSk7dmFyIGM9dGhpcyxsPXIoYyxlKSxwPWMuZ2V0TGluZShlLmxpbmUpO2lmKG51bGwhPXAmJiFuKGMsZSxwKSl7dmFyIGY9dS5saW5lQ29tbWVudHx8bC5saW5lQ29tbWVudDtpZighZilyZXR1cm4gdm9pZCgodS5ibG9ja0NvbW1lbnRTdGFydHx8bC5ibG9ja0NvbW1lbnRTdGFydCkmJih1LmZ1bGxMaW5lcz0hMCxjLmJsb2NrQ29tbWVudChlLHMsdSkpKTt2YXIgZD1NYXRoLm1pbigwIT1zLmNofHxzLmxpbmU9PWUubGluZT9zLmxpbmUrMTpzLmxpbmUsYy5sYXN0TGluZSgpKzEpLGg9bnVsbD09dS5wYWRkaW5nPyIgIjp1LnBhZGRpbmcsbT11LmNvbW1lbnRCbGFua0xpbmVzfHxlLmxpbmU9PXMubGluZTtjLm9wZXJhdGlvbihmdW5jdGlvbigpe2lmKHUuaW5kZW50KXtmb3IodmFyIG49bnVsbCxyPWUubGluZTtyPGQ7KytyKXt2YXIgaT1jLmdldExpbmUocikscz1pLnNsaWNlKDAsdChpKSk7KG51bGw9PW58fG4ubGVuZ3RoPnMubGVuZ3RoKSYmKG49cyl9Zm9yKHZhciByPWUubGluZTtyPGQ7KytyKXt2YXIgaT1jLmdldExpbmUociksbD1uLmxlbmd0aDsobXx8by50ZXN0KGkpKSYmKGkuc2xpY2UoMCxsKSE9biYmKGw9dChpKSksYy5yZXBsYWNlUmFuZ2UobitmK2gsYShyLDApLGEocixsKSkpfX1lbHNlIGZvcih2YXIgcj1lLmxpbmU7cjxkOysrcikobXx8by50ZXN0KGMuZ2V0TGluZShyKSkpJiZjLnJlcGxhY2VSYW5nZShmK2gsYShyLDApKX0pfX0pLGUuZGVmaW5lRXh0ZW5zaW9uKCJibG9ja0NvbW1lbnQiLGZ1bmN0aW9uKGUsdCxuKXtufHwobj1pKTt2YXIgcz10aGlzLHU9cihzLGUpLGM9bi5ibG9ja0NvbW1lbnRTdGFydHx8dS5ibG9ja0NvbW1lbnRTdGFydCxsPW4uYmxvY2tDb21tZW50RW5kfHx1LmJsb2NrQ29tbWVudEVuZDtpZighY3x8IWwpcmV0dXJuIHZvaWQoKG4ubGluZUNvbW1lbnR8fHUubGluZUNvbW1lbnQpJiYwIT1uLmZ1bGxMaW5lcyYmcy5saW5lQ29tbWVudChlLHQsbikpO2lmKCEvXGJjb21tZW50XGIvLnRlc3Qocy5nZXRUb2tlblR5cGVBdChhKGUubGluZSwwKSkpKXt2YXIgcD1NYXRoLm1pbih0LmxpbmUscy5sYXN0TGluZSgpKTtwIT1lLmxpbmUmJjA9PXQuY2gmJm8udGVzdChzLmdldExpbmUocCkpJiYtLXA7dmFyIGY9bnVsbD09bi5wYWRkaW5nPyIgIjpuLnBhZGRpbmc7ZS5saW5lPnB8fHMub3BlcmF0aW9uKGZ1bmN0aW9uKCl7aWYoMCE9bi5mdWxsTGluZXMpe3ZhciByPW8udGVzdChzLmdldExpbmUocCkpO3MucmVwbGFjZVJhbmdlKGYrbCxhKHApKSxzLnJlcGxhY2VSYW5nZShjK2YsYShlLmxpbmUsMCkpO3ZhciBpPW4uYmxvY2tDb21tZW50TGVhZHx8dS5ibG9ja0NvbW1lbnRMZWFkO2lmKG51bGwhPWkpZm9yKHZhciBkPWUubGluZSsxO2Q8PXA7KytkKShkIT1wfHxyKSYmcy5yZXBsYWNlUmFuZ2UoaStmLGEoZCwwKSl9ZWxzZSBzLnJlcGxhY2VSYW5nZShsLHQpLHMucmVwbGFjZVJhbmdlKGMsZSl9KX19KSxlLmRlZmluZUV4dGVuc2lvbigidW5jb21tZW50IixmdW5jdGlvbihlLHQsbil7bnx8KG49aSk7dmFyIHMsdT10aGlzLGM9cih1LGUpLGw9TWF0aC5taW4oMCE9dC5jaHx8dC5saW5lPT1lLmxpbmU/dC5saW5lOnQubGluZS0xLHUubGFzdExpbmUoKSkscD1NYXRoLm1pbihlLmxpbmUsbCksZj1uLmxpbmVDb21tZW50fHxjLmxpbmVDb21tZW50LGQ9W10saD1udWxsPT1uLnBhZGRpbmc/IiAiOm4ucGFkZGluZztlOmlmKGYpe2Zvcih2YXIgbT1wO208PWw7KyttKXt2YXIgZz11LmdldExpbmUobSkseT1nLmluZGV4T2YoZik7aWYoeT4tMSYmIS9jb21tZW50Ly50ZXN0KHUuZ2V0VG9rZW5UeXBlQXQoYShtLHkrMSkpKSYmKHk9LTEpLC0xPT15JiZvLnRlc3QoZykpYnJlYWsgZTtpZih5Pi0xJiZvLnRlc3QoZy5zbGljZSgwLHkpKSlicmVhayBlO2QucHVzaChnKX1pZih1Lm9wZXJhdGlvbihmdW5jdGlvbigpe2Zvcih2YXIgZT1wO2U8PWw7KytlKXt2YXIgdD1kW2UtcF0sbj10LmluZGV4T2YoZikscj1uK2YubGVuZ3RoO248MHx8KHQuc2xpY2UocixyK2gubGVuZ3RoKT09aCYmKHIrPWgubGVuZ3RoKSxzPSEwLHUucmVwbGFjZVJhbmdlKCIiLGEoZSxuKSxhKGUscikpKX19KSxzKXJldHVybiEwfXZhciB2PW4uYmxvY2tDb21tZW50U3RhcnR8fGMuYmxvY2tDb21tZW50U3RhcnQsYj1uLmJsb2NrQ29tbWVudEVuZHx8Yy5ibG9ja0NvbW1lbnRFbmQ7aWYoIXZ8fCFiKXJldHVybiExO3ZhciB4PW4uYmxvY2tDb21tZW50TGVhZHx8Yy5ibG9ja0NvbW1lbnRMZWFkLEM9dS5nZXRMaW5lKHApLEU9Qy5pbmRleE9mKHYpO2lmKC0xPT1FKXJldHVybiExO3ZhciBEPWw9PXA/Qzp1LmdldExpbmUobCksdz1ELmluZGV4T2YoYixsPT1wP0Urdi5sZW5ndGg6MCksUz1hKHAsRSsxKSxrPWEobCx3KzEpO2lmKC0xPT13fHwhL2NvbW1lbnQvLnRlc3QodS5nZXRUb2tlblR5cGVBdChTKSl8fCEvY29tbWVudC8udGVzdCh1LmdldFRva2VuVHlwZUF0KGspKXx8dS5nZXRSYW5nZShTLGssIlxuIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMTt2YXIgQT1DLmxhc3RJbmRleE9mKHYsZS5jaCksXz0tMT09QT8tMTpDLnNsaWNlKDAsZS5jaCkuaW5kZXhPZihiLEErdi5sZW5ndGgpO2lmKC0xIT1BJiYtMSE9XyYmXytiLmxlbmd0aCE9ZS5jaClyZXR1cm4hMTtfPUQuaW5kZXhPZihiLHQuY2gpO3ZhciBUPUQuc2xpY2UodC5jaCkubGFzdEluZGV4T2YodixfLXQuY2gpO3JldHVybiBBPS0xPT1ffHwtMT09VD8tMTp0LmNoK1QsKC0xPT1ffHwtMT09QXx8QT09dC5jaCkmJih1Lm9wZXJhdGlvbihmdW5jdGlvbigpe3UucmVwbGFjZVJhbmdlKCIiLGEobCx3LShoJiZELnNsaWNlKHctaC5sZW5ndGgsdyk9PWg/aC5sZW5ndGg6MCkpLGEobCx3K2IubGVuZ3RoKSk7dmFyIGU9RSt2Lmxlbmd0aDtpZihoJiZDLnNsaWNlKGUsZStoLmxlbmd0aCk9PWgmJihlKz1oLmxlbmd0aCksdS5yZXBsYWNlUmFuZ2UoIiIsYShwLEUpLGEocCxlKSkseClmb3IodmFyIHQ9cCsxO3Q8PWw7Kyt0KXt2YXIgbj11LmdldExpbmUodCkscj1uLmluZGV4T2YoeCk7aWYoLTEhPXImJiFvLnRlc3Qobi5zbGljZSgwLHIpKSl7dmFyIGk9cit4Lmxlbmd0aDtoJiZuLnNsaWNlKGksaStoLmxlbmd0aCk9PWgmJihpKz1oLmxlbmd0aCksdS5yZXBsYWNlUmFuZ2UoIiIsYSh0LHIpLGEodCxpKSl9fX0pLCEwKX0pfSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7ZShuKDIpLG4oMzgpLG4oMzkpKX0oZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZT1uZXcgUmVnRXhwKGUucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCJcXCQmIiksdD8iZ2kiOiJnIik6ZS5nbG9iYWx8fChlPW5ldyBSZWdFeHAoZS5zb3VyY2UsZS5pZ25vcmVDYXNlPyJnaSI6ImciKSkse3Rva2VuOmZ1bmN0aW9uKHQpe2UubGFzdEluZGV4PXQucG9zO3ZhciBuPWUuZXhlYyh0LnN0cmluZyk7aWYobiYmbi5pbmRleD09dC5wb3MpcmV0dXJuIHQucG9zKz1uWzBdLmxlbmd0aHx8MSwic2VhcmNoaW5nIjtuP3QucG9zPW4uaW5kZXg6dC5za2lwVG9FbmQoKX19fWZ1bmN0aW9uIG4oKXt0aGlzLnBvc0Zyb209dGhpcy5wb3NUbz10aGlzLmxhc3RRdWVyeT10aGlzLnF1ZXJ5PW51bGwsdGhpcy5vdmVybGF5PW51bGx9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5zdGF0ZS5zZWFyY2h8fChlLnN0YXRlLnNlYXJjaD1uZXcgbil9ZnVuY3Rpb24gaShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJmU9PWUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gZS5nZXRTZWFyY2hDdXJzb3IodCxuLHtjYXNlRm9sZDppKHQpLG11bHRpbGluZTohMH0pfWZ1bmN0aW9uIGEoZSx0LG4scixpKXtlLm9wZW5EaWFsb2codCxyLHt2YWx1ZTpuLHNlbGVjdFZhbHVlT25PcGVuOiEwLGNsb3NlT25FbnRlcjohMSxvbkNsb3NlOmZ1bmN0aW9uKCl7aChlKX0sb25LZXlEb3duOml9KX1mdW5jdGlvbiBzKGUsdCxuLHIsaSl7ZS5vcGVuRGlhbG9nP2Uub3BlbkRpYWxvZyh0LGkse3ZhbHVlOnIsc2VsZWN0VmFsdWVPbk9wZW46ITB9KTppKHByb21wdChuLHIpKX1mdW5jdGlvbiB1KGUsdCxuLHIpe2Uub3BlbkNvbmZpcm0/ZS5vcGVuQ29uZmlybSh0LHIpOmNvbmZpcm0obikmJnJbMF0oKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcKC4pL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4ibiI9PXQ/IlxuIjoiciI9PXQ/IlxyIjp0fSl9ZnVuY3Rpb24gbChlKXt2YXIgdD1lLm1hdGNoKC9eXC8oLiopXC8oW2Etel0qKSQvKTtpZih0KXRyeXtlPW5ldyBSZWdFeHAodFsxXSwtMT09dFsyXS5pbmRleE9mKCJpIik/IiI6ImkiKX1jYXRjaChlKXt9ZWxzZSBlPWMoZSk7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT8iIj09ZTplLnRlc3QoIiIpKSYmKGU9L3heLyksZX1mdW5jdGlvbiBwKGUsbixyKXtuLnF1ZXJ5VGV4dD1yLG4ucXVlcnk9bChyKSxlLnJlbW92ZU92ZXJsYXkobi5vdmVybGF5LGkobi5xdWVyeSkpLG4ub3ZlcmxheT10KG4ucXVlcnksaShuLnF1ZXJ5KSksZS5hZGRPdmVybGF5KG4ub3ZlcmxheSksZS5zaG93TWF0Y2hlc09uU2Nyb2xsYmFyJiYobi5hbm5vdGF0ZSYmKG4uYW5ub3RhdGUuY2xlYXIoKSxuLmFubm90YXRlPW51bGwpLG4uYW5ub3RhdGU9ZS5zaG93TWF0Y2hlc09uU2Nyb2xsYmFyKG4ucXVlcnksaShuLnF1ZXJ5KSkpfWZ1bmN0aW9uIGYodCxuLGksbyl7dmFyIHU9cih0KTtpZih1LnF1ZXJ5KXJldHVybiBkKHQsbik7dmFyIGM9dC5nZXRTZWxlY3Rpb24oKXx8dS5sYXN0UXVlcnk7aWYoYyBpbnN0YW5jZW9mIFJlZ0V4cCYmInheIj09Yy5zb3VyY2UmJihjPW51bGwpLGkmJnQub3BlbkRpYWxvZyl7dmFyIGw9bnVsbCxmPWZ1bmN0aW9uKG4scil7ZS5lX3N0b3AociksbiYmKG4hPXUucXVlcnlUZXh0JiYocCh0LHUsbiksdS5wb3NGcm9tPXUucG9zVG89dC5nZXRDdXJzb3IoKSksbCYmKGwuc3R5bGUub3BhY2l0eT0xKSxkKHQsci5zaGlmdEtleSxmdW5jdGlvbihlLG4pe3ZhciByO24ubGluZTwzJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yJiYocj10LmRpc3BsYXkud3JhcHBlci5xdWVyeVNlbGVjdG9yKCIuQ29kZU1pcnJvci1kaWFsb2ciKSkmJnIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLTQ+dC5jdXJzb3JDb29yZHMobiwid2luZG93IikudG9wJiYoKGw9cikuc3R5bGUub3BhY2l0eT0uNCl9KSl9O2EodCx5LGMsZixmdW5jdGlvbihuLGkpe3ZhciBvPWUua2V5TmFtZShuKSxhPXQuZ2V0T3B0aW9uKCJleHRyYUtleXMiKSxzPWEmJmFbb118fGUua2V5TWFwW3QuZ2V0T3B0aW9uKCJrZXlNYXAiKV1bb107ImZpbmROZXh0Ij09c3x8ImZpbmRQcmV2Ij09c3x8ImZpbmRQZXJzaXN0ZW50TmV4dCI9PXN8fCJmaW5kUGVyc2lzdGVudFByZXYiPT1zPyhlLmVfc3RvcChuKSxwKHQscih0KSxpKSx0LmV4ZWNDb21tYW5kKHMpKToiZmluZCIhPXMmJiJmaW5kUGVyc2lzdGVudCIhPXN8fChlLmVfc3RvcChuKSxmKGksbikpfSksbyYmYyYmKHAodCx1LGMpLGQodCxuKSl9ZWxzZSBzKHQseSwiU2VhcmNoIGZvcjoiLGMsZnVuY3Rpb24oZSl7ZSYmIXUucXVlcnkmJnQub3BlcmF0aW9uKGZ1bmN0aW9uKCl7cCh0LHUsZSksdS5wb3NGcm9tPXUucG9zVG89dC5nZXRDdXJzb3IoKSxkKHQsbil9KX0pfWZ1bmN0aW9uIGQodCxuLGkpe3Qub3BlcmF0aW9uKGZ1bmN0aW9uKCl7dmFyIGE9cih0KSxzPW8odCxhLnF1ZXJ5LG4/YS5wb3NGcm9tOmEucG9zVG8pOyhzLmZpbmQobil8fChzPW8odCxhLnF1ZXJ5LG4/ZS5Qb3ModC5sYXN0TGluZSgpKTplLlBvcyh0LmZpcnN0TGluZSgpLDApKSxzLmZpbmQobikpKSYmKHQuc2V0U2VsZWN0aW9uKHMuZnJvbSgpLHMudG8oKSksdC5zY3JvbGxJbnRvVmlldyh7ZnJvbTpzLmZyb20oKSx0bzpzLnRvKCl9LDIwKSxhLnBvc0Zyb209cy5mcm9tKCksYS5wb3NUbz1zLnRvKCksaSYmaShzLmZyb20oKSxzLnRvKCkpKX0pfWZ1bmN0aW9uIGgoZSl7ZS5vcGVyYXRpb24oZnVuY3Rpb24oKXt2YXIgdD1yKGUpO3QubGFzdFF1ZXJ5PXQucXVlcnksdC5xdWVyeSYmKHQucXVlcnk9dC5xdWVyeVRleHQ9bnVsbCxlLnJlbW92ZU92ZXJsYXkodC5vdmVybGF5KSx0LmFubm90YXRlJiYodC5hbm5vdGF0ZS5jbGVhcigpLHQuYW5ub3RhdGU9bnVsbCkpfSl9ZnVuY3Rpb24gbShlLHQsbil7ZS5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIHI9byhlLHQpO3IuZmluZE5leHQoKTspaWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgaT1lLmdldFJhbmdlKHIuZnJvbSgpLHIudG8oKSkubWF0Y2godCk7ci5yZXBsYWNlKG4ucmVwbGFjZSgvXCQoXGQpL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVt0XX0pKX1lbHNlIHIucmVwbGFjZShuKX0pfWZ1bmN0aW9uIGcoZSx0KXtpZighZS5nZXRPcHRpb24oInJlYWRPbmx5Iikpe3ZhciBuPWUuZ2V0U2VsZWN0aW9uKCl8fHIoZSkubGFzdFF1ZXJ5LGk9JzxzcGFuIGNsYXNzPSJDb2RlTWlycm9yLXNlYXJjaC1sYWJlbCI+JysodD8iUmVwbGFjZSBhbGw6IjoiUmVwbGFjZToiKSsiPC9zcGFuPiI7cyhlLGkrdixpLG4sZnVuY3Rpb24obil7biYmKG49bChuKSxzKGUsYiwiUmVwbGFjZSB3aXRoOiIsIiIsZnVuY3Rpb24ocil7aWYocj1jKHIpLHQpbShlLG4scik7ZWxzZXtoKGUpO3ZhciBpPW8oZSxuLGUuZ2V0Q3Vyc29yKCJmcm9tIikpLGE9ZnVuY3Rpb24oKXt2YXIgdCxjPWkuZnJvbSgpOyEodD1pLmZpbmROZXh0KCkpJiYoaT1vKGUsbiksISh0PWkuZmluZE5leHQoKSl8fGMmJmkuZnJvbSgpLmxpbmU9PWMubGluZSYmaS5mcm9tKCkuY2g9PWMuY2gpfHwoZS5zZXRTZWxlY3Rpb24oaS5mcm9tKCksaS50bygpKSxlLnNjcm9sbEludG9WaWV3KHtmcm9tOmkuZnJvbSgpLHRvOmkudG8oKX0pLHUoZSx4LCJSZXBsYWNlPyIsW2Z1bmN0aW9uKCl7cyh0KX0sYSxmdW5jdGlvbigpe20oZSxuLHIpfV0pKX0scz1mdW5jdGlvbihlKXtpLnJlcGxhY2UoInN0cmluZyI9PXR5cGVvZiBuP3I6ci5yZXBsYWNlKC9cJChcZCkvZyxmdW5jdGlvbih0LG4pe3JldHVybiBlW25dfSkpLGEoKX07YSgpfX0pKX0pfX12YXIgeT0nPHNwYW4gY2xhc3M9IkNvZGVNaXJyb3Itc2VhcmNoLWxhYmVsIj5TZWFyY2g6PC9zcGFuPiA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAxMGVtIiBjbGFzcz0iQ29kZU1pcnJvci1zZWFyY2gtZmllbGQiLz4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4IiBjbGFzcz0iQ29kZU1pcnJvci1zZWFyY2gtaGludCI+KFVzZSAvcmUvIHN5bnRheCBmb3IgcmVnZXhwIHNlYXJjaCk8L3NwYW4+Jyx2PScgPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTBlbSIgY2xhc3M9IkNvZGVNaXJyb3Itc2VhcmNoLWZpZWxkIi8+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzg4OCIgY2xhc3M9IkNvZGVNaXJyb3Itc2VhcmNoLWhpbnQiPihVc2UgL3JlLyBzeW50YXggZm9yIHJlZ2V4cCBzZWFyY2gpPC9zcGFuPicsYj0nPHNwYW4gY2xhc3M9IkNvZGVNaXJyb3Itc2VhcmNoLWxhYmVsIj5XaXRoOjwvc3Bhbj4gPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTBlbSIgY2xhc3M9IkNvZGVNaXJyb3Itc2VhcmNoLWZpZWxkIi8+Jyx4PSc8c3BhbiBjbGFzcz0iQ29kZU1pcnJvci1zZWFyY2gtbGFiZWwiPlJlcGxhY2U/PC9zcGFuPiA8YnV0dG9uPlllczwvYnV0dG9uPiA8YnV0dG9uPk5vPC9idXR0b24+IDxidXR0b24+QWxsPC9idXR0b24+IDxidXR0b24+U3RvcDwvYnV0dG9uPic7ZS5jb21tYW5kcy5maW5kPWZ1bmN0aW9uKGUpe2goZSksZihlKX0sZS5jb21tYW5kcy5maW5kUGVyc2lzdGVudD1mdW5jdGlvbihlKXtoKGUpLGYoZSwhMSwhMCl9LGUuY29tbWFuZHMuZmluZFBlcnNpc3RlbnROZXh0PWZ1bmN0aW9uKGUpe2YoZSwhMSwhMCwhMCl9LGUuY29tbWFuZHMuZmluZFBlcnNpc3RlbnRQcmV2PWZ1bmN0aW9uKGUpe2YoZSwhMCwhMCwhMCl9LGUuY29tbWFuZHMuZmluZE5leHQ9ZixlLmNvbW1hbmRzLmZpbmRQcmV2PWZ1bmN0aW9uKGUpe2YoZSwhMCl9LGUuY29tbWFuZHMuY2xlYXJTZWFyY2g9aCxlLmNvbW1hbmRzLnJlcGxhY2U9ZyxlLmNvbW1hbmRzLnJlcGxhY2VBbGw9ZnVuY3Rpb24oZSl7ZyhlLCEwKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybntzdHlsZToia2V5d29yZCIsbWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIk5hbWUiPT09dC5raW5kJiZ0LnZhbHVlPT09ZX19fWZ1bmN0aW9uIGkoZSl7cmV0dXJue3N0eWxlOmUsbWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIk5hbWUiPT09ZS5raW5kfSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXtlLm5hbWU9dC52YWx1ZX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhcnNlUnVsZXM9dC5MZXhSdWxlcz10LmlzSWdub3JlZD12b2lkIDA7dmFyIG89bigyNzYpO3QuaXNJZ25vcmVkPWZ1bmN0aW9uKGUpe3JldHVybiIgIj09PWV8fCJcdCI9PT1lfHwiLCI9PT1lfHwiXG4iPT09ZXx8IlxyIj09PWV8fCJcdWZlZmYiPT09ZX0sdC5MZXhSdWxlcz17TmFtZTovXltfQS1aYS16XVtfMC05QS1aYS16XSovLFB1bmN0dWF0aW9uOi9eKD86IXxcJHxcKHxcKXxcLlwuXC58Onw9fEB8XFt8XXxce3xcfHxcfSkvLE51bWJlcjovXi0/KD86MHwoPzpbMS05XVswLTldKikpKD86XC5bMC05XSopPyg/OltlRV1bKy1dP1swLTldKyk/LyxTdHJpbmc6L14oPzoiIiIoPzpcXCIiInxbXiJdfCJbXiJdfCIiW14iXSkqKD86IiIiKT98Iig/OlteIlxcXXxcXCg/OiJ8XC98XFx8YnxmfG58cnx0fHVbMC05YS1mQS1GXXs0fSkpKiI/KS8sQ29tbWVudDovXiMuKi99LHQuUGFyc2VSdWxlcz17RG9jdW1lbnQ6WygwLG8ubGlzdCkoIkRlZmluaXRpb24iKV0sRGVmaW5pdGlvbjpmdW5jdGlvbihlKXtzd2l0Y2goZS52YWx1ZSl7Y2FzZSJ7IjpyZXR1cm4iU2hvcnRRdWVyeSI7Y2FzZSJxdWVyeSI6cmV0dXJuIlF1ZXJ5IjtjYXNlIm11dGF0aW9uIjpyZXR1cm4iTXV0YXRpb24iO2Nhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4iU3Vic2NyaXB0aW9uIjtjYXNlImZyYWdtZW50IjpyZXR1cm4iRnJhZ21lbnREZWZpbml0aW9uIjtjYXNlInNjaGVtYSI6cmV0dXJuIlNjaGVtYURlZiI7Y2FzZSJzY2FsYXIiOnJldHVybiJTY2FsYXJEZWYiO2Nhc2UidHlwZSI6cmV0dXJuIk9iamVjdFR5cGVEZWYiO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4iSW50ZXJmYWNlRGVmIjtjYXNlInVuaW9uIjpyZXR1cm4iVW5pb25EZWYiO2Nhc2UiZW51bSI6cmV0dXJuIkVudW1EZWYiO2Nhc2UiaW5wdXQiOnJldHVybiJJbnB1dERlZiI7Y2FzZSJleHRlbmQiOnJldHVybiJFeHRlbmREZWYiO2Nhc2UiZGlyZWN0aXZlIjpyZXR1cm4iRGlyZWN0aXZlRGVmIn19LFNob3J0UXVlcnk6WyJTZWxlY3Rpb25TZXQiXSxRdWVyeTpbcigicXVlcnkiKSwoMCxvLm9wdCkoaSgiZGVmIikpLCgwLG8ub3B0KSgiVmFyaWFibGVEZWZpbml0aW9ucyIpLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCJTZWxlY3Rpb25TZXQiXSxNdXRhdGlvbjpbcigibXV0YXRpb24iKSwoMCxvLm9wdCkoaSgiZGVmIikpLCgwLG8ub3B0KSgiVmFyaWFibGVEZWZpbml0aW9ucyIpLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCJTZWxlY3Rpb25TZXQiXSxTdWJzY3JpcHRpb246W3IoInN1YnNjcmlwdGlvbiIpLCgwLG8ub3B0KShpKCJkZWYiKSksKDAsby5vcHQpKCJWYXJpYWJsZURlZmluaXRpb25zIiksKDAsby5saXN0KSgiRGlyZWN0aXZlIiksIlNlbGVjdGlvblNldCJdLFZhcmlhYmxlRGVmaW5pdGlvbnM6WygwLG8ucCkoIigiKSwoMCxvLmxpc3QpKCJWYXJpYWJsZURlZmluaXRpb24iKSwoMCxvLnApKCIpIildLFZhcmlhYmxlRGVmaW5pdGlvbjpbIlZhcmlhYmxlIiwoMCxvLnApKCI6IiksIlR5cGUiLCgwLG8ub3B0KSgiRGVmYXVsdFZhbHVlIildLFZhcmlhYmxlOlsoMCxvLnApKCIkIiwidmFyaWFibGUiKSxpKCJ2YXJpYWJsZSIpXSxEZWZhdWx0VmFsdWU6WygwLG8ucCkoIj0iKSwiVmFsdWUiXSxTZWxlY3Rpb25TZXQ6WygwLG8ucCkoInsiKSwoMCxvLmxpc3QpKCJTZWxlY3Rpb24iKSwoMCxvLnApKCJ9IildLFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiIuLi4iPT09ZS52YWx1ZT90Lm1hdGNoKC9bXHNcdTAwYTAsXSoob25cYnxAfHspLywhMSk/IklubGluZUZyYWdtZW50IjoiRnJhZ21lbnRTcHJlYWQiOnQubWF0Y2goL1tcc1x1MDBhMCxdKjovLCExKT8iQWxpYXNlZEZpZWxkIjoiRmllbGQifSxBbGlhc2VkRmllbGQ6W2koInByb3BlcnR5IiksKDAsby5wKSgiOiIpLGkoInF1YWxpZmllciIpLCgwLG8ub3B0KSgiQXJndW1lbnRzIiksKDAsby5saXN0KSgiRGlyZWN0aXZlIiksKDAsby5vcHQpKCJTZWxlY3Rpb25TZXQiKV0sRmllbGQ6W2koInByb3BlcnR5IiksKDAsby5vcHQpKCJBcmd1bWVudHMiKSwoMCxvLmxpc3QpKCJEaXJlY3RpdmUiKSwoMCxvLm9wdCkoIlNlbGVjdGlvblNldCIpXSxBcmd1bWVudHM6WygwLG8ucCkoIigiKSwoMCxvLmxpc3QpKCJBcmd1bWVudCIpLCgwLG8ucCkoIikiKV0sQXJndW1lbnQ6W2koImF0dHJpYnV0ZSIpLCgwLG8ucCkoIjoiKSwiVmFsdWUiXSxGcmFnbWVudFNwcmVhZDpbKDAsby5wKSgiLi4uIiksaSgiZGVmIiksKDAsby5saXN0KSgiRGlyZWN0aXZlIildLElubGluZUZyYWdtZW50OlsoMCxvLnApKCIuLi4iKSwoMCxvLm9wdCkoIlR5cGVDb25kaXRpb24iKSwoMCxvLmxpc3QpKCJEaXJlY3RpdmUiKSwiU2VsZWN0aW9uU2V0Il0sRnJhZ21lbnREZWZpbml0aW9uOltyKCJmcmFnbWVudCIpLCgwLG8ub3B0KSgoMCxvLmJ1dE5vdCkoaSgiZGVmIiksW3IoIm9uIildKSksIlR5cGVDb25kaXRpb24iLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCJTZWxlY3Rpb25TZXQiXSxUeXBlQ29uZGl0aW9uOltyKCJvbiIpLCJOYW1lZFR5cGUiXSxWYWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZS5raW5kKXtjYXNlIk51bWJlciI6cmV0dXJuIk51bWJlclZhbHVlIjtjYXNlIlN0cmluZyI6cmV0dXJuIlN0cmluZ1ZhbHVlIjtjYXNlIlB1bmN0dWF0aW9uIjpzd2l0Y2goZS52YWx1ZSl7Y2FzZSJbIjpyZXR1cm4iTGlzdFZhbHVlIjtjYXNlInsiOnJldHVybiJPYmplY3RWYWx1ZSI7Y2FzZSIkIjpyZXR1cm4iVmFyaWFibGUifXJldHVybiBudWxsO2Nhc2UiTmFtZSI6c3dpdGNoKGUudmFsdWUpe2Nhc2UidHJ1ZSI6Y2FzZSJmYWxzZSI6cmV0dXJuIkJvb2xlYW5WYWx1ZSJ9cmV0dXJuIm51bGwiPT09ZS52YWx1ZT8iTnVsbFZhbHVlIjoiRW51bVZhbHVlIn19LE51bWJlclZhbHVlOlsoMCxvLnQpKCJOdW1iZXIiLCJudW1iZXIiKV0sU3RyaW5nVmFsdWU6WygwLG8udCkoIlN0cmluZyIsInN0cmluZyIpXSxCb29sZWFuVmFsdWU6WygwLG8udCkoIk5hbWUiLCJidWlsdGluIildLE51bGxWYWx1ZTpbKDAsby50KSgiTmFtZSIsImtleXdvcmQiKV0sRW51bVZhbHVlOltpKCJzdHJpbmctMiIpXSxMaXN0VmFsdWU6WygwLG8ucCkoIlsiKSwoMCxvLmxpc3QpKCJWYWx1ZSIpLCgwLG8ucCkoIl0iKV0sT2JqZWN0VmFsdWU6WygwLG8ucCkoInsiKSwoMCxvLmxpc3QpKCJPYmplY3RGaWVsZCIpLCgwLG8ucCkoIn0iKV0sT2JqZWN0RmllbGQ6W2koImF0dHJpYnV0ZSIpLCgwLG8ucCkoIjoiKSwiVmFsdWUiXSxUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiJbIj09PWUudmFsdWU/Ikxpc3RUeXBlIjoiTm9uTnVsbFR5cGUifSxMaXN0VHlwZTpbKDAsby5wKSgiWyIpLCJUeXBlIiwoMCxvLnApKCJdIiksKDAsby5vcHQpKCgwLG8ucCkoIiEiKSldLE5vbk51bGxUeXBlOlsiTmFtZWRUeXBlIiwoMCxvLm9wdCkoKDAsby5wKSgiISIpKV0sTmFtZWRUeXBlOltmdW5jdGlvbihlKXtyZXR1cm57c3R5bGU6ZSxtYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4iTmFtZSI9PT1lLmtpbmR9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe2UucHJldlN0YXRlJiZlLnByZXZTdGF0ZS5wcmV2U3RhdGUmJihlLm5hbWU9dC52YWx1ZSxlLnByZXZTdGF0ZS5wcmV2U3RhdGUudHlwZT10LnZhbHVlKX19fSgiYXRvbSIpXSxEaXJlY3RpdmU6WygwLG8ucCkoIkAiLCJtZXRhIiksaSgibWV0YSIpLCgwLG8ub3B0KSgiQXJndW1lbnRzIildLFNjaGVtYURlZjpbcigic2NoZW1hIiksKDAsby5saXN0KSgiRGlyZWN0aXZlIiksKDAsby5wKSgieyIpLCgwLG8ubGlzdCkoIk9wZXJhdGlvblR5cGVEZWYiKSwoMCxvLnApKCJ9IildLE9wZXJhdGlvblR5cGVEZWY6W2koImtleXdvcmQiKSwoMCxvLnApKCI6IiksaSgiYXRvbSIpXSxTY2FsYXJEZWY6W3IoInNjYWxhciIpLGkoImF0b20iKSwoMCxvLmxpc3QpKCJEaXJlY3RpdmUiKV0sT2JqZWN0VHlwZURlZjpbcigidHlwZSIpLGkoImF0b20iKSwoMCxvLm9wdCkoIkltcGxlbWVudHMiKSwoMCxvLmxpc3QpKCJEaXJlY3RpdmUiKSwoMCxvLnApKCJ7IiksKDAsby5saXN0KSgiRmllbGREZWYiKSwoMCxvLnApKCJ9IildLEltcGxlbWVudHM6W3IoImltcGxlbWVudHMiKSwoMCxvLmxpc3QpKCJOYW1lZFR5cGUiKV0sRmllbGREZWY6W2koInByb3BlcnR5IiksKDAsby5vcHQpKCJBcmd1bWVudHNEZWYiKSwoMCxvLnApKCI6IiksIlR5cGUiLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpXSxBcmd1bWVudHNEZWY6WygwLG8ucCkoIigiKSwoMCxvLmxpc3QpKCJJbnB1dFZhbHVlRGVmIiksKDAsby5wKSgiKSIpXSxJbnB1dFZhbHVlRGVmOltpKCJhdHRyaWJ1dGUiKSwoMCxvLnApKCI6IiksIlR5cGUiLCgwLG8ub3B0KSgiRGVmYXVsdFZhbHVlIiksKDAsby5saXN0KSgiRGlyZWN0aXZlIildLEludGVyZmFjZURlZjpbcigiaW50ZXJmYWNlIiksaSgiYXRvbSIpLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCgwLG8ucCkoInsiKSwoMCxvLmxpc3QpKCJGaWVsZERlZiIpLCgwLG8ucCkoIn0iKV0sVW5pb25EZWY6W3IoInVuaW9uIiksaSgiYXRvbSIpLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCgwLG8ucCkoIj0iKSwoMCxvLmxpc3QpKCJVbmlvbk1lbWJlciIsKDAsby5wKSgifCIpKV0sVW5pb25NZW1iZXI6WyJOYW1lZFR5cGUiXSxFbnVtRGVmOltyKCJlbnVtIiksaSgiYXRvbSIpLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCgwLG8ucCkoInsiKSwoMCxvLmxpc3QpKCJFbnVtVmFsdWVEZWYiKSwoMCxvLnApKCJ9IildLEVudW1WYWx1ZURlZjpbaSgic3RyaW5nLTIiKSwoMCxvLmxpc3QpKCJEaXJlY3RpdmUiKV0sSW5wdXREZWY6W3IoImlucHV0IiksaSgiYXRvbSIpLCgwLG8ubGlzdCkoIkRpcmVjdGl2ZSIpLCgwLG8ucCkoInsiKSwoMCxvLmxpc3QpKCJJbnB1dFZhbHVlRGVmIiksKDAsby5wKSgifSIpXSxFeHRlbmREZWY6W3IoImV4dGVuZCIpLCJPYmplY3RUeXBlRGVmIl0sRGlyZWN0aXZlRGVmOltyKCJkaXJlY3RpdmUiKSwoMCxvLnApKCJAIiwibWV0YSIpLGkoIm1ldGEiKSwoMCxvLm9wdCkoIkFyZ3VtZW50c0RlZiIpLHIoIm9uIiksKDAsby5saXN0KSgiRGlyZWN0aXZlTG9jYXRpb24iLCgwLG8ucCkoInwiKSldLERpcmVjdGl2ZUxvY2F0aW9uOltpKCJzdHJpbmctMiIpXX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57b2ZSdWxlOmV9fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm57b2ZSdWxlOmUsaXNMaXN0OiEwLHNlcGFyYXRvcjp0fX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49ZS5tYXRjaDtyZXR1cm4gZS5tYXRjaD1mdW5jdGlvbihlKXt2YXIgcj0hMTtyZXR1cm4gbiYmKHI9bihlKSksciYmdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaCYmIXQubWF0Y2goZSl9KX0sZX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJue3N0eWxlOnQsbWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHQua2luZD09PWV9fX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJue3N0eWxlOnR8fCJwdW5jdHVhdGlvbiIsbWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIlB1bmN0dWF0aW9uIj09PXQua2luZCYmdC52YWx1ZT09PWV9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5vcHQ9cix0Lmxpc3Q9aSx0LmJ1dE5vdD1vLHQudD1hLHQucD1zfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49ZS5zbGljZSgwLHQpLHI9bi5zcGxpdCgiXG4iKS5sZW5ndGgtMSxpPW4ubGFzdEluZGV4T2YoIlxuIik7cmV0dXJuIG5ldyBzKHIsdC1pLTEpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1pKGUsdC5zdGFydCkscj1pKGUsdC5lbmQpO3JldHVybiBuZXcgYShuLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm9mZnNldFRvUG9zaXRpb249aSx0LmxvY1RvUmFuZ2U9bzt2YXIgYT10LlJhbmdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3ZhciBpPXRoaXM7cih0aGlzLGUpLHRoaXMuY29udGFpbnNQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gaS5zdGFydC5saW5lPT09ZS5saW5lP2kuc3RhcnQuY2hhcmFjdGVyPD1lLmNoYXJhY3RlcjppLmVuZC5saW5lPT09ZS5saW5lP2kuZW5kLmNoYXJhY3Rlcj49ZS5jaGFyYWN0ZXI6aS5zdGFydC5saW5lPD1lLmxpbmUmJmkuZW5kLmxpbmU+PWUubGluZX0sdGhpcy5zdGFydD10LHRoaXMuZW5kPW59cmV0dXJuIGUucHJvdG90eXBlLnNldFN0YXJ0PWZ1bmN0aW9uKGUsdCl7dGhpcy5zdGFydD1uZXcgcyhlLHQpfSxlLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmVuZD1uZXcgcyhlLHQpfSxlfSgpLHM9dC5Qb3NpdGlvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgaT10aGlzO3IodGhpcyxlKSx0aGlzLmxlc3NUaGFuT3JFcXVhbFRvPWZ1bmN0aW9uKGUpe3JldHVybiBpLmxpbmU8ZS5saW5lfHxpLmxpbmU9PT1lLmxpbmUmJmkuY2hhcmFjdGVyPD1lLmNoYXJhY3Rlcn0sdGhpcy5saW5lPXQsdGhpcy5jaGFyYWN0ZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUuc2V0TGluZT1mdW5jdGlvbihlKXt0aGlzLmxpbmU9ZX0sZS5wcm90b3R5cGUuc2V0Q2hhcmFjdGVyPWZ1bmN0aW9uKGUpe3RoaXMuY2hhcmFjdGVyPWV9LGV9KCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSx0KXtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgscj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihuLHIpO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe249ZVtpXSxyPXRbaV07YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHQuQnVmZmVyJiYiZnVuY3Rpb24iPT09dHlwZW9mIHQuQnVmZmVyLmlzQnVmZmVyP3QuQnVmZmVyLmlzQnVmZmVyKGUpOiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBvKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4haShlKSYmKCJmdW5jdGlvbiI9PT10eXBlb2YgdC5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTohIWUmJihlIGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKGUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX1mdW5jdGlvbiBzKGUpe2lmKHguaXNGdW5jdGlvbihlKSl7aWYoRClyZXR1cm4gZS5uYW1lO3ZhciB0PWUudG9TdHJpbmcoKSxuPXQubWF0Y2goUyk7cmV0dXJuIG4mJm5bMV19fWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlP2UubGVuZ3RoPHQ/ZTplLnNsaWNlKDAsdCk6ZX1mdW5jdGlvbiBjKGUpe2lmKER8fCF4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHguaW5zcGVjdChlKTt2YXIgdD1zKGUpO3JldHVybiJbRnVuY3Rpb24iKyh0PyI6ICIrdDoiIikrIl0ifWZ1bmN0aW9uIGwoZSl7cmV0dXJuIHUoYyhlLmFjdHVhbCksMTI4KSsiICIrZS5vcGVyYXRvcisiICIrdShjKGUuZXhwZWN0ZWQpLDEyOCl9ZnVuY3Rpb24gcChlLHQsbixyLGkpe3Rocm93IG5ldyB3LkFzc2VydGlvbkVycm9yKHttZXNzYWdlOm4sYWN0dWFsOmUsZXhwZWN0ZWQ6dCxvcGVyYXRvcjpyLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24gZihlLHQpe2V8fHAoZSwhMCx0LCI9PSIsdy5vayl9ZnVuY3Rpb24gZChlLHQsbixzKXtpZihlPT09dClyZXR1cm4hMDtpZihpKGUpJiZpKHQpKXJldHVybiAwPT09cihlLHQpO2lmKHguaXNEYXRlKGUpJiZ4LmlzRGF0ZSh0KSlyZXR1cm4gZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTtpZih4LmlzUmVnRXhwKGUpJiZ4LmlzUmVnRXhwKHQpKXJldHVybiBlLnNvdXJjZT09PXQuc291cmNlJiZlLmdsb2JhbD09PXQuZ2xvYmFsJiZlLm11bHRpbGluZT09PXQubXVsdGlsaW5lJiZlLmxhc3RJbmRleD09PXQubGFzdEluZGV4JiZlLmlnbm9yZUNhc2U9PT10Lmlnbm9yZUNhc2U7aWYobnVsbCE9PWUmJiJvYmplY3QiPT09dHlwZW9mIGV8fG51bGwhPT10JiYib2JqZWN0Ij09PXR5cGVvZiB0KXtpZihhKGUpJiZhKHQpJiZvKGUpPT09byh0KSYmIShlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHxlIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PXIobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7aWYoaShlKSE9PWkodCkpcmV0dXJuITE7cz1zfHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfTt2YXIgdT1zLmFjdHVhbC5pbmRleE9mKGUpO3JldHVybi0xIT09dSYmdT09PXMuZXhwZWN0ZWQuaW5kZXhPZih0KXx8KHMuYWN0dWFsLnB1c2goZSkscy5leHBlY3RlZC5wdXNoKHQpLG0oZSx0LG4scykpfXJldHVybiBuP2U9PT10OmU9PXR9ZnVuY3Rpb24gaChlKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIG0oZSx0LG4scil7aWYobnVsbD09PWV8fHZvaWQgMD09PWV8fG51bGw9PT10fHx2b2lkIDA9PT10KXJldHVybiExO2lmKHguaXNQcmltaXRpdmUoZSl8fHguaXNQcmltaXRpdmUodCkpcmV0dXJuIGU9PT10O2lmKG4mJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KSlyZXR1cm4hMTt2YXIgaT1oKGUpLG89aCh0KTtpZihpJiYhb3x8IWkmJm8pcmV0dXJuITE7aWYoaSlyZXR1cm4gZT1FLmNhbGwoZSksdD1FLmNhbGwodCksZChlLHQsbik7dmFyIGEscyx1PWsoZSksYz1rKHQpO2lmKHUubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGMuc29ydCgpLHM9dS5sZW5ndGgtMTtzPj0wO3MtLSlpZih1W3NdIT09Y1tzXSlyZXR1cm4hMTtmb3Iocz11Lmxlbmd0aC0xO3M+PTA7cy0tKWlmKGE9dVtzXSwhZChlW2FdLHRbYV0sbixyKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBnKGUsdCxuKXtkKGUsdCwhMCkmJnAoZSx0LG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsZyl9ZnVuY3Rpb24geShlLHQpe2lmKCFlfHwhdClyZXR1cm4hMTtpZigiW29iamVjdCBSZWdFeHBdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiB0LnRlc3QoZSk7dHJ5e2lmKGUgaW5zdGFuY2VvZiB0KXJldHVybiEwfWNhdGNoKGUpe31yZXR1cm4hRXJyb3IuaXNQcm90b3R5cGVPZih0KSYmITA9PT10LmNhbGwoe30sZSl9ZnVuY3Rpb24gdihlKXt2YXIgdDt0cnl7ZSgpfWNhdGNoKGUpe3Q9ZX1yZXR1cm4gdH1mdW5jdGlvbiBiKGUsdCxuLHIpe3ZhciBpO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYmxvY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpOyJzdHJpbmciPT09dHlwZW9mIG4mJihyPW4sbj1udWxsKSxpPXYodCkscj0obiYmbi5uYW1lPyIgKCIrbi5uYW1lKyIpLiI6Ii4iKSsocj8iICIrcjoiLiIpLGUmJiFpJiZwKGksbiwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK3IpO3ZhciBvPSJzdHJpbmciPT09dHlwZW9mIHIsYT0hZSYmeC5pc0Vycm9yKGkpLHM9IWUmJmkmJiFuO2lmKChhJiZvJiZ5KGksbil8fHMpJiZwKGksbiwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrciksZSYmaSYmbiYmIXkoaSxuKXx8IWUmJmkpdGhyb3cgaX12YXIgeD1uKDI1MyksQz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLEQ9ZnVuY3Rpb24oKXtyZXR1cm4iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lfSgpLHc9ZS5leHBvcnRzPWYsUz0vXHMqZnVuY3Rpb25ccysoW15cKFxzXSopXHMqLzt3LkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKGUpe3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLHRoaXMuYWN0dWFsPWUuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9ZS5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPWUub3BlcmF0b3IsZS5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9ZS5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1sKHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIHQ9ZS5zdGFja1N0YXJ0RnVuY3Rpb258fHA7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0KTtlbHNle3ZhciBuPW5ldyBFcnJvcjtpZihuLnN0YWNrKXt2YXIgcj1uLnN0YWNrLGk9cyh0KSxvPXIuaW5kZXhPZigiXG4iK2kpO2lmKG8+PTApe3ZhciBhPXIuaW5kZXhPZigiXG4iLG8rMSk7cj1yLnN1YnN0cmluZyhhKzEpfXRoaXMuc3RhY2s9cn19fSx4LmluaGVyaXRzKHcuQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLHcuZmFpbD1wLHcub2s9Zix3LmVxdWFsPWZ1bmN0aW9uKGUsdCxuKXtlIT10JiZwKGUsdCxuLCI9PSIsdy5lcXVhbCl9LHcubm90RXF1YWw9ZnVuY3Rpb24oZSx0LG4pe2U9PXQmJnAoZSx0LG4sIiE9Iix3Lm5vdEVxdWFsKX0sdy5kZWVwRXF1YWw9ZnVuY3Rpb24oZSx0LG4pe2QoZSx0LCExKXx8cChlLHQsbiwiZGVlcEVxdWFsIix3LmRlZXBFcXVhbCl9LHcuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKGUsdCxuKXtkKGUsdCwhMCl8fHAoZSx0LG4sImRlZXBTdHJpY3RFcXVhbCIsdy5kZWVwU3RyaWN0RXF1YWwpfSx3Lm5vdERlZXBFcXVhbD1mdW5jdGlvbihlLHQsbil7ZChlLHQsITEpJiZwKGUsdCxuLCJub3REZWVwRXF1YWwiLHcubm90RGVlcEVxdWFsKX0sdy5ub3REZWVwU3RyaWN0RXF1YWw9Zyx3LnN0cmljdEVxdWFsPWZ1bmN0aW9uKGUsdCxuKXtlIT09dCYmcChlLHQsbiwiPT09Iix3LnN0cmljdEVxdWFsKX0sdy5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbihlLHQsbil7ZT09PXQmJnAoZSx0LG4sIiE9PSIsdy5ub3RTdHJpY3RFcXVhbCl9LHcudGhyb3dzPWZ1bmN0aW9uKGUsdCxuKXtiKCEwLGUsdCxuKX0sdy5kb2VzTm90VGhyb3c9ZnVuY3Rpb24oZSx0LG4pe2IoITEsZSx0LG4pfSx3LmlmRXJyb3I9ZnVuY3Rpb24oZSl7aWYoZSl0aHJvdyBlfTt2YXIgaz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpQy5jYWxsKGUsbikmJnQucHVzaChuKTtyZXR1cm4gdH19KS5jYWxsKHQsbigxMSkpfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbihpKGUpKX1mdW5jdGlvbiBpKGUpe3ZhciB0PW9bZV07aWYoISh0KzEpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2UrIicuIik7cmV0dXJuIHR9dmFyIG89eyIuIjo1MCwiLi8iOjUwLCIuL0dyYXBoUUxMYW5ndWFnZVNlcnZpY2UiOjE0MSwiLi9HcmFwaFFMTGFuZ3VhZ2VTZXJ2aWNlLmpzIjoxNDEsIi4vR3JhcGhRTExhbmd1YWdlU2VydmljZS5qcy5mbG93Ijo2MDAsIi4vYXV0b2NvbXBsZXRlVXRpbHMiOjkyLCIuL2F1dG9jb21wbGV0ZVV0aWxzLmpzIjo5MiwiLi9hdXRvY29tcGxldGVVdGlscy5qcy5mbG93Ijo2MDEsIi4vZ2V0QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMiOjkzLCIuL2dldEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zLmpzIjo5MywiLi9nZXRBdXRvY29tcGxldGVTdWdnZXN0aW9ucy5qcy5mbG93Ijo2MDIsIi4vZ2V0RGVmaW5pdGlvbiI6OTQsIi4vZ2V0RGVmaW5pdGlvbi5qcyI6OTQsIi4vZ2V0RGVmaW5pdGlvbi5qcy5mbG93Ijo2MDMsIi4vZ2V0RGlhZ25vc3RpY3MiOjk2LCIuL2dldERpYWdub3N0aWNzLmpzIjo5NiwiLi9nZXREaWFnbm9zdGljcy5qcy5mbG93Ijo2MDQsIi4vZ2V0T3V0bGluZSI6MTQwLCIuL2dldE91dGxpbmUuanMiOjE0MCwiLi9nZXRPdXRsaW5lLmpzLmZsb3ciOjYwNSwiLi9pbmRleCI6NTAsIi4vaW5kZXguanMiOjUwLCIuL2luZGV4LmpzLmZsb3ciOjYwNn07ci5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKG8pfSxyLnJlc29sdmU9aSxlLmV4cG9ydHM9cixyLmlkPTI3OX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e3NjaGVtYTplLHR5cGU6bnVsbCxwYXJlbnRUeXBlOm51bGwsaW5wdXRUeXBlOm51bGwsZGlyZWN0aXZlRGVmOm51bGwsZmllbGREZWY6bnVsbCxhcmdEZWY6bnVsbCxhcmdEZWZzOm51bGwsb2JqZWN0RmllbGREZWZzOm51bGx9O3JldHVybigwLGMuZGVmYXVsdCkodCxmdW5jdGlvbih0KXtzd2l0Y2godC5raW5kKXtjYXNlIlF1ZXJ5IjpjYXNlIlNob3J0UXVlcnkiOm4udHlwZT1lLmdldFF1ZXJ5VHlwZSgpO2JyZWFrO2Nhc2UiTXV0YXRpb24iOm4udHlwZT1lLmdldE11dGF0aW9uVHlwZSgpO2JyZWFrO2Nhc2UiU3Vic2NyaXB0aW9uIjpuLnR5cGU9ZS5nZXRTdWJzY3JpcHRpb25UeXBlKCk7YnJlYWs7Y2FzZSJJbmxpbmVGcmFnbWVudCI6Y2FzZSJGcmFnbWVudERlZmluaXRpb24iOnQudHlwZSYmKG4udHlwZT1lLmdldFR5cGUodC50eXBlKSk7YnJlYWs7Y2FzZSJGaWVsZCI6Y2FzZSJBbGlhc2VkRmllbGQiOm4uZmllbGREZWY9bi50eXBlJiZ0Lm5hbWU/aShlLG4ucGFyZW50VHlwZSx0Lm5hbWUpOm51bGwsbi50eXBlPW4uZmllbGREZWYmJm4uZmllbGREZWYudHlwZTticmVhaztjYXNlIlNlbGVjdGlvblNldCI6bi5wYXJlbnRUeXBlPSgwLGEuZ2V0TmFtZWRUeXBlKShuLnR5cGUpO2JyZWFrO2Nhc2UiRGlyZWN0aXZlIjpuLmRpcmVjdGl2ZURlZj10Lm5hbWUmJmUuZ2V0RGlyZWN0aXZlKHQubmFtZSk7YnJlYWs7Y2FzZSJBcmd1bWVudHMiOnZhciByPSJGaWVsZCI9PT10LnByZXZTdGF0ZS5raW5kP24uZmllbGREZWY6IkRpcmVjdGl2ZSI9PT10LnByZXZTdGF0ZS5raW5kP24uZGlyZWN0aXZlRGVmOiJBbGlhc2VkRmllbGQiPT09dC5wcmV2U3RhdGUua2luZD90LnByZXZTdGF0ZS5uYW1lJiZpKGUsbi5wYXJlbnRUeXBlLHQucHJldlN0YXRlLm5hbWUpOm51bGw7bi5hcmdEZWZzPXImJnIuYXJnczticmVhaztjYXNlIkFyZ3VtZW50IjppZihuLmFyZ0RlZj1udWxsLG4uYXJnRGVmcylmb3IodmFyIHM9MDtzPG4uYXJnRGVmcy5sZW5ndGg7cysrKWlmKG4uYXJnRGVmc1tzXS5uYW1lPT09dC5uYW1lKXtuLmFyZ0RlZj1uLmFyZ0RlZnNbc107YnJlYWt9bi5pbnB1dFR5cGU9bi5hcmdEZWYmJm4uYXJnRGVmLnR5cGU7YnJlYWs7Y2FzZSJFbnVtVmFsdWUiOnZhciB1PSgwLGEuZ2V0TmFtZWRUeXBlKShuLmlucHV0VHlwZSk7bi5lbnVtVmFsdWU9dSBpbnN0YW5jZW9mIGEuR3JhcGhRTEVudW1UeXBlP28odS5nZXRWYWx1ZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQubmFtZX0pOm51bGw7YnJlYWs7Y2FzZSJMaXN0VmFsdWUiOnZhciBjPSgwLGEuZ2V0TnVsbGFibGVUeXBlKShuLmlucHV0VHlwZSk7bi5pbnB1dFR5cGU9YyBpbnN0YW5jZW9mIGEuR3JhcGhRTExpc3Q/Yy5vZlR5cGU6bnVsbDticmVhaztjYXNlIk9iamVjdFZhbHVlIjp2YXIgbD0oMCxhLmdldE5hbWVkVHlwZSkobi5pbnB1dFR5cGUpO24ub2JqZWN0RmllbGREZWZzPWwgaW5zdGFuY2VvZiBhLkdyYXBoUUxJbnB1dE9iamVjdFR5cGU/bC5nZXRGaWVsZHMoKTpudWxsO2JyZWFrO2Nhc2UiT2JqZWN0RmllbGQiOnZhciBwPXQubmFtZSYmbi5vYmplY3RGaWVsZERlZnM/bi5vYmplY3RGaWVsZERlZnNbdC5uYW1lXTpudWxsO24uaW5wdXRUeXBlPXAmJnAudHlwZTticmVhaztjYXNlIk5hbWVkVHlwZSI6bi50eXBlPWUuZ2V0VHlwZSh0Lm5hbWUpfX0pLG59ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIG49PT1zLlNjaGVtYU1ldGFGaWVsZERlZi5uYW1lJiZlLmdldFF1ZXJ5VHlwZSgpPT09dD9zLlNjaGVtYU1ldGFGaWVsZERlZjpuPT09cy5UeXBlTWV0YUZpZWxkRGVmLm5hbWUmJmUuZ2V0UXVlcnlUeXBlKCk9PT10P3MuVHlwZU1ldGFGaWVsZERlZjpuPT09cy5UeXBlTmFtZU1ldGFGaWVsZERlZi5uYW1lJiYoMCxhLmlzQ29tcG9zaXRlVHlwZSkodCk/cy5UeXBlTmFtZU1ldGFGaWVsZERlZjp0LmdldEZpZWxkcz90LmdldEZpZWxkcygpW25dOnZvaWQgMH1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYodChlW25dKSlyZXR1cm4gZVtuXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIGE9big3KSxzPW4oMjgpLHU9bigyODEpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSh1KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPVtdLHI9ZTtyJiZyLmtpbmQ7KW4ucHVzaChyKSxyPXIucHJldlN0YXRlO2Zvcih2YXIgaT1uLmxlbmd0aC0xO2k+PTA7aS0tKXQobltpXSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJue2tpbmQ6IkZpZWxkIixzY2hlbWE6ZS5zY2hlbWEsZmllbGQ6ZS5maWVsZERlZix0eXBlOnUoZS5maWVsZERlZik/bnVsbDplLnBhcmVudFR5cGV9fWZ1bmN0aW9uIGkoZSl7cmV0dXJue2tpbmQ6IkRpcmVjdGl2ZSIsc2NoZW1hOmUuc2NoZW1hLGRpcmVjdGl2ZTplLmRpcmVjdGl2ZURlZn19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5kaXJlY3RpdmVEZWY/e2tpbmQ6IkFyZ3VtZW50IixzY2hlbWE6ZS5zY2hlbWEsYXJndW1lbnQ6ZS5hcmdEZWYsZGlyZWN0aXZlOmUuZGlyZWN0aXZlRGVmfTp7a2luZDoiQXJndW1lbnQiLHNjaGVtYTplLnNjaGVtYSxhcmd1bWVudDplLmFyZ0RlZixmaWVsZDplLmZpZWxkRGVmLHR5cGU6dShlLmZpZWxkRGVmKT9udWxsOmUucGFyZW50VHlwZX19ZnVuY3Rpb24gYShlKXtyZXR1cm57a2luZDoiRW51bVZhbHVlIix2YWx1ZTplLmVudW1WYWx1ZSx0eXBlOigwLGMuZ2V0TmFtZWRUeXBlKShlLmlucHV0VHlwZSl9fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm57a2luZDoiVHlwZSIsc2NoZW1hOmUuc2NoZW1hLHR5cGU6dHx8ZS50eXBlfX1mdW5jdGlvbiB1KGUpe3JldHVybiJfXyI9PT1lLm5hbWUuc2xpY2UoMCwyKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRGaWVsZFJlZmVyZW5jZT1yLHQuZ2V0RGlyZWN0aXZlUmVmZXJlbmNlPWksdC5nZXRBcmd1bWVudFJlZmVyZW5jZT1vLHQuZ2V0RW51bVZhbHVlUmVmZXJlbmNlPWEsdC5nZXRUeXBlUmVmZXJlbmNlPXM7dmFyIGM9big3KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZS5sZXZlbHM7cmV0dXJuKG4mJjAhPT1uLmxlbmd0aD9uW24ubGVuZ3RoLTFdLSh0aGlzLmVsZWN0cmljSW5wdXQudGVzdCh0KT8xOjApOmUuaW5kZW50TGV2ZWwpKnRoaXMuY29uZmlnLmluZGVudFVuaXR9dmFyIGk9bigyKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oaSksYT1uKDcxKTtvLmRlZmF1bHQuZGVmaW5lTW9kZSgiZ3JhcGhxbCIsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsYS5vbmxpbmVQYXJzZXIpKHtlYXRXaGl0ZXNwYWNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmVhdFdoaWxlKGEuaXNJZ25vcmVkKX0sbGV4UnVsZXM6YS5MZXhSdWxlcyxwYXJzZVJ1bGVzOmEuUGFyc2VSdWxlcyxlZGl0b3JDb25maWc6e3RhYlNpemU6ZS50YWJTaXplfX0pO3JldHVybntjb25maWc6ZSxzdGFydFN0YXRlOnQuc3RhcnRTdGF0ZSx0b2tlbjp0LnRva2VuLGluZGVudDpyLGVsZWN0cmljSW5wdXQ6L15ccypbfSlcXV0vLGZvbGQ6ImJyYWNlIixsaW5lQ29tbWVudDoiIyIsY2xvc2VCcmFja2V0czp7cGFpcnM6JygpW117fSIiJyxleHBsb2RlOiIoKVtde30ifX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PSgvbWFjIG9zIHgvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPyJcdTIzMTgiOiJDdHJsIikrIitDIjtyZXR1cm4gZS5yZXBsYWNlKC8je1xzKmtleVxzKn0vZyx0KX1mdW5jdGlvbiBpKGUsdCl7dmFyIG4saSxzLHUsYyxsLHA9ITE7dHx8KHQ9e30pLG49dC5kZWJ1Z3x8ITE7dHJ5e3M9bygpLHU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxjPWRvY3VtZW50LmdldFNlbGVjdGlvbigpLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLGwudGV4dENvbnRlbnQ9ZSxsLnN0eWxlLmFsbD0idW5zZXQiLGwuc3R5bGUucG9zaXRpb249ImZpeGVkIixsLnN0eWxlLnRvcD0wLGwuc3R5bGUuY2xpcD0icmVjdCgwLCAwLCAwLCAwKSIsbC5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGwuc3R5bGUud2Via2l0VXNlclNlbGVjdD0idGV4dCIsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJ0ZXh0IixsLnN0eWxlLm1zVXNlclNlbGVjdD0idGV4dCIsbC5zdHlsZS51c2VyU2VsZWN0PSJ0ZXh0Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGwpLHUuc2VsZWN0Tm9kZShsKSxjLmFkZFJhbmdlKHUpO2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXRocm93IG5ldyBFcnJvcigiY29weSBjb21tYW5kIHdhcyB1bnN1Y2Nlc3NmdWwiKTtwPSEwfWNhdGNoKG8pe24mJmNvbnNvbGUuZXJyb3IoInVuYWJsZSB0byBjb3B5IHVzaW5nIGV4ZWNDb21tYW5kOiAiLG8pLG4mJmNvbnNvbGUud2FybigidHJ5aW5nIElFIHNwZWNpZmljIHN0dWZmIik7dHJ5e3dpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQiLGUpLHA9ITB9Y2F0Y2gobyl7biYmY29uc29sZS5lcnJvcigidW5hYmxlIHRvIGNvcHkgdXNpbmcgY2xpcGJvYXJkRGF0YTogIixvKSxuJiZjb25zb2xlLmVycm9yKCJmYWxsaW5nIGJhY2sgdG8gcHJvbXB0IiksaT1yKCJtZXNzYWdlImluIHQ/dC5tZXNzYWdlOmEpLHdpbmRvdy5wcm9tcHQoaSxlKX19ZmluYWxseXtjJiYoImZ1bmN0aW9uIj09dHlwZW9mIGMucmVtb3ZlUmFuZ2U/Yy5yZW1vdmVSYW5nZSh1KTpjLnJlbW92ZUFsbFJhbmdlcygpKSxsJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGwpLHMoKX1yZXR1cm4gcH12YXIgbz1uKDYxMyksYT0iQ29weSB0byBjbGlwYm9hcmQ6ICN7a2V5fSwgRW50ZXIiO2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMSk7dC5kZWZhdWx0PWkuc3R5bGVkLmRpdihvfHwobz1yKFsiXG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4iXSxbIlxuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuIl0pKSk7dmFyIG99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9IkludmFsaWQiPT09dC5zdGF0ZS5raW5kP3Quc3RhdGUucHJldlN0YXRlOnQuc3RhdGUsaT1yLmtpbmQsYT1yLnN0ZXA7aWYoIkRvY3VtZW50Ij09PWkmJjA9PT1hKXJldHVybigwLGYuZGVmYXVsdCkoZSx0LFt7dGV4dDoieyJ9XSk7dmFyIHM9bi52YXJpYWJsZVRvVHlwZTtpZihzKXt2YXIgYz1vKHMsdC5zdGF0ZSk7aWYoIkRvY3VtZW50Ij09PWl8fCJWYXJpYWJsZSI9PT1pJiYwPT09YSl7dmFyIGw9T2JqZWN0LmtleXMocyk7cmV0dXJuKDAsZi5kZWZhdWx0KShlLHQsbC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3RleHQ6JyInK2UrJyI6ICcsdHlwZTpzW2VdfX0pKX1pZigoIk9iamVjdFZhbHVlIj09PWl8fCJPYmplY3RGaWVsZCI9PT1pJiYwPT09YSkmJmMuZmllbGRzKXt2YXIgcD1PYmplY3Qua2V5cyhjLmZpZWxkcykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjLmZpZWxkc1tlXX0pO3JldHVybigwLGYuZGVmYXVsdCkoZSx0LHAubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt0ZXh0OiciJytlLm5hbWUrJyI6ICcsdHlwZTplLnR5cGUsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbn19KSl9aWYoIlN0cmluZ1ZhbHVlIj09PWl8fCJOdW1iZXJWYWx1ZSI9PT1pfHwiQm9vbGVhblZhbHVlIj09PWl8fCJOdWxsVmFsdWUiPT09aXx8Ikxpc3RWYWx1ZSI9PT1pJiYxPT09YXx8Ik9iamVjdEZpZWxkIj09PWkmJjI9PT1hfHwiVmFyaWFibGUiPT09aSYmMj09PWEpe3ZhciBkPSgwLHUuZ2V0TmFtZWRUeXBlKShjLnR5cGUpO2lmKGQgaW5zdGFuY2VvZiB1LkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpcmV0dXJuKDAsZi5kZWZhdWx0KShlLHQsW3t0ZXh0OiJ7In1dKTtpZihkIGluc3RhbmNlb2YgdS5HcmFwaFFMRW51bVR5cGUpe3ZhciBoPWQuZ2V0VmFsdWVzKCksbT1PYmplY3Qua2V5cyhoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGhbZV19KTtyZXR1cm4oMCxmLmRlZmF1bHQpKGUsdCxtLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dGV4dDonIicrZS5uYW1lKyciJyx0eXBlOmQsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbn19KSl9aWYoZD09PXUuR3JhcGhRTEJvb2xlYW4pcmV0dXJuKDAsZi5kZWZhdWx0KShlLHQsW3t0ZXh0OiJ0cnVlIix0eXBlOnUuR3JhcGhRTEJvb2xlYW4sZGVzY3JpcHRpb246Ik5vdCBmYWxzZS4ifSx7dGV4dDoiZmFsc2UiLHR5cGU6dS5HcmFwaFFMQm9vbGVhbixkZXNjcmlwdGlvbjoiTm90IHRydWUuIn1dKX19fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17dHlwZTpudWxsLGZpZWxkczpudWxsfTtyZXR1cm4oMCxsLmRlZmF1bHQpKHQsZnVuY3Rpb24odCl7aWYoIlZhcmlhYmxlIj09PXQua2luZCluLnR5cGU9ZVt0Lm5hbWVdO2Vsc2UgaWYoIkxpc3RWYWx1ZSI9PT10LmtpbmQpe3ZhciByPSgwLHUuZ2V0TnVsbGFibGVUeXBlKShuLnR5cGUpO24udHlwZT1yIGluc3RhbmNlb2YgdS5HcmFwaFFMTGlzdD9yLm9mVHlwZTpudWxsfWVsc2UgaWYoIk9iamVjdFZhbHVlIj09PXQua2luZCl7dmFyIGk9KDAsdS5nZXROYW1lZFR5cGUpKG4udHlwZSk7bi5maWVsZHM9aSBpbnN0YW5jZW9mIHUuR3JhcGhRTElucHV0T2JqZWN0VHlwZT9pLmdldEZpZWxkcygpOm51bGx9ZWxzZSBpZigiT2JqZWN0RmllbGQiPT09dC5raW5kKXt2YXIgbz10Lm5hbWUmJm4uZmllbGRzP24uZmllbGRzW3QubmFtZV06bnVsbDtuLnR5cGU9byYmby50eXBlfX0pLG59dmFyIGE9bigyKSxzPXIoYSksdT1uKDcpLGM9bigyODEpLGw9cihjKSxwPW4oNjI2KSxmPXIocCk7cy5kZWZhdWx0LnJlZ2lzdGVySGVscGVyKCJoaW50IiwiZ3JhcGhxbC12YXJpYWJsZXMiLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRDdXJzb3IoKSxyPWUuZ2V0VG9rZW5BdChuKSxvPWkobixyLHQpO3JldHVybiBvJiZvLmxpc3QmJm8ubGlzdC5sZW5ndGg+MCYmKG8uZnJvbT1zLmRlZmF1bHQuUG9zKG8uZnJvbS5saW5lLG8uZnJvbS5jb2x1bW4pLG8udG89cy5kZWZhdWx0LlBvcyhvLnRvLmxpbmUsby50by5jb2x1bW4pLHMuZGVmYXVsdC5zaWduYWwoZSwiaGFzQ29tcGxldGlvbiIsZSxvLHIpKSxvfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9W107cmV0dXJuIG4ubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ua2V5LnZhbHVlLHM9dFtpXTtzP28ocyxuLnZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0saT10WzFdO3IucHVzaChhKGUsbixpKSl9KTpyLnB1c2goYShlLG4ua2V5LCdWYXJpYWJsZSAiJCcraSsnIiBkb2VzIG5vdCBhcHBlYXIgaW4gYW55IEdyYXBoUUwgcXVlcnkuJykpfSkscn1mdW5jdGlvbiBvKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHAuR3JhcGhRTE5vbk51bGwpcmV0dXJuIk51bGwiPT09dC5raW5kP1tbdCwnVHlwZSAiJytlKyciIGlzIG5vbi1udWxsYWJsZSBhbmQgY2Fubm90IGJlIG51bGwuJ11dOm8oZS5vZlR5cGUsdCk7aWYoIk51bGwiPT09dC5raW5kKXJldHVybltdO2lmKGUgaW5zdGFuY2VvZiBwLkdyYXBoUUxMaXN0KXt2YXIgbj1lLm9mVHlwZTtyZXR1cm4iQXJyYXkiPT09dC5raW5kP3UodC52YWx1ZXMsZnVuY3Rpb24oZSl7cmV0dXJuIG8obixlKX0pOm8obix0KX1pZihlIGluc3RhbmNlb2YgcC5HcmFwaFFMSW5wdXRPYmplY3RUeXBlKXtpZigiT2JqZWN0IiE9PXQua2luZClyZXR1cm5bW3QsJ1R5cGUgIicrZSsnIiBtdXN0IGJlIGFuIE9iamVjdC4nXV07dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxpPXUodC5tZW1iZXJzLGZ1bmN0aW9uKHQpe3ZhciBuPXQua2V5LnZhbHVlO3Jbbl09ITA7dmFyIGk9ZS5nZXRGaWVsZHMoKVtuXTtyZXR1cm4gaT9vKGk/aS50eXBlOnZvaWQgMCx0LnZhbHVlKTpbW3Qua2V5LCdUeXBlICInK2UrJyIgZG9lcyBub3QgaGF2ZSBhIGZpZWxkICInK24rJyIuJ11dfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUuZ2V0RmllbGRzKCkpLmZvckVhY2goZnVuY3Rpb24obil7aWYoIXJbbl0pe2UuZ2V0RmllbGRzKClbbl0udHlwZSBpbnN0YW5jZW9mIHAuR3JhcGhRTE5vbk51bGwmJmkucHVzaChbdCwnT2JqZWN0IG9mIHR5cGUgIicrZSsnIiBpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkICInK24rJyIuJ10pfX0pLGl9cmV0dXJuIkJvb2xlYW4iPT09ZS5uYW1lJiYiQm9vbGVhbiIhPT10LmtpbmR8fCJTdHJpbmciPT09ZS5uYW1lJiYiU3RyaW5nIiE9PXQua2luZHx8IklEIj09PWUubmFtZSYmIk51bWJlciIhPT10LmtpbmQmJiJTdHJpbmciIT09dC5raW5kfHwiRmxvYXQiPT09ZS5uYW1lJiYiTnVtYmVyIiE9PXQua2luZHx8IkludCI9PT1lLm5hbWUmJigiTnVtYmVyIiE9PXQua2luZHx8KDB8dC52YWx1ZSkhPT10LnZhbHVlKT9bW3QsJ0V4cGVjdGVkIHZhbHVlIG9mIHR5cGUgIicrZSsnIi4nXV06KGUgaW5zdGFuY2VvZiBwLkdyYXBoUUxFbnVtVHlwZXx8ZSBpbnN0YW5jZW9mIHAuR3JhcGhRTFNjYWxhclR5cGUpJiYoIlN0cmluZyIhPT10LmtpbmQmJiJOdW1iZXIiIT09dC5raW5kJiYiQm9vbGVhbiIhPT10LmtpbmQmJiJOdWxsIiE9PXQua2luZHx8cyhlLnBhcnNlVmFsdWUodC52YWx1ZSkpKT9bW3QsJ0V4cGVjdGVkIHZhbHVlIG9mIHR5cGUgIicrZSsnIi4nXV06W119ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJue21lc3NhZ2U6bixzZXZlcml0eToiZXJyb3IiLHR5cGU6InZhbGlkYXRpb24iLGZyb206ZS5wb3NGcm9tSW5kZXgodC5zdGFydCksdG86ZS5wb3NGcm9tSW5kZXgodC5lbmQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZXx8ZSE9PWV9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUubWFwKHQpKX12YXIgYz1uKDIpLGw9cihjKSxwPW4oNyksZj1uKDYyNyksZD1yKGYpO2wuZGVmYXVsdC5yZWdpc3RlckhlbHBlcigibGludCIsImdyYXBocWwtdmFyaWFibGVzIixmdW5jdGlvbihlLHQsbil7aWYoIWUpcmV0dXJuW107dmFyIHI9dm9pZCAwO3RyeXtyPSgwLGQuZGVmYXVsdCkoZSl9Y2F0Y2goZSl7aWYoZS5zdGFjayl0aHJvdyBlO3JldHVyblthKG4sZSxlLm1lc3NhZ2UpXX12YXIgbz10LnZhcmlhYmxlVG9UeXBlO3JldHVybiBvP2kobixvLHIpOltdfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUubGV2ZWxzO3JldHVybihuJiYwIT09bi5sZW5ndGg/bltuLmxlbmd0aC0xXS0odGhpcy5lbGVjdHJpY0lucHV0LnRlc3QodCk/MTowKTplLmluZGVudExldmVsKSp0aGlzLmNvbmZpZy5pbmRlbnRVbml0fWZ1bmN0aW9uIGkoZSl7cmV0dXJue3N0eWxlOmUsbWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PT1lLmtpbmR9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe2UubmFtZT10LnZhbHVlLnNsaWNlKDEsLTEpfX19dmFyIG89bigyKSxhPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obykscz1uKDcxKTthLmRlZmF1bHQuZGVmaW5lTW9kZSgiZ3JhcGhxbC12YXJpYWJsZXMiLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLHMub25saW5lUGFyc2VyKSh7ZWF0V2hpdGVzcGFjZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5lYXRTcGFjZSgpfSxsZXhSdWxlczp1LHBhcnNlUnVsZXM6YyxlZGl0b3JDb25maWc6e3RhYlNpemU6ZS50YWJTaXplfX0pO3JldHVybntjb25maWc6ZSxzdGFydFN0YXRlOnQuc3RhcnRTdGF0ZSx0b2tlbjp0LnRva2VuLGluZGVudDpyLGVsZWN0cmljSW5wdXQ6L15ccypbfVxdXS8sZm9sZDoiYnJhY2UiLGNsb3NlQnJhY2tldHM6e3BhaXJzOidbXXt9IiInLGV4cGxvZGU6Iltde30ifX19KTt2YXIgdT17UHVuY3R1YXRpb246L15cW3xdfFx7fFx9fDp8LC8sTnVtYmVyOi9eLT8oPzowfCg/OlsxLTldWzAtOV0qKSkoPzpcLlswLTldKik/KD86W2VFXVsrLV0/WzAtOV0rKT8vLFN0cmluZzovXiIoPzpbXiJcXF18XFwoPzoifFwvfFxcfGJ8ZnxufHJ8dHx1WzAtOWEtZkEtRl17NH0pKSoiPy8sS2V5d29yZDovXnRydWV8ZmFsc2V8bnVsbC99LGM9e0RvY3VtZW50OlsoMCxzLnApKCJ7IiksKDAscy5saXN0KSgiVmFyaWFibGUiLCgwLHMub3B0KSgoMCxzLnApKCIsIikpKSwoMCxzLnApKCJ9IildLFZhcmlhYmxlOltpKCJ2YXJpYWJsZSIpLCgwLHMucCkoIjoiKSwiVmFsdWUiXSxWYWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZS5raW5kKXtjYXNlIk51bWJlciI6cmV0dXJuIk51bWJlclZhbHVlIjtjYXNlIlN0cmluZyI6cmV0dXJuIlN0cmluZ1ZhbHVlIjtjYXNlIlB1bmN0dWF0aW9uIjpzd2l0Y2goZS52YWx1ZSl7Y2FzZSJbIjpyZXR1cm4iTGlzdFZhbHVlIjtjYXNlInsiOnJldHVybiJPYmplY3RWYWx1ZSJ9cmV0dXJuIG51bGw7Y2FzZSJLZXl3b3JkIjpzd2l0Y2goZS52YWx1ZSl7Y2FzZSJ0cnVlIjpjYXNlImZhbHNlIjpyZXR1cm4iQm9vbGVhblZhbHVlIjtjYXNlIm51bGwiOnJldHVybiJOdWxsVmFsdWUifXJldHVybiBudWxsfX0sTnVtYmVyVmFsdWU6WygwLHMudCkoIk51bWJlciIsIm51bWJlciIpXSxTdHJpbmdWYWx1ZTpbKDAscy50KSgiU3RyaW5nIiwic3RyaW5nIildLEJvb2xlYW5WYWx1ZTpbKDAscy50KSgiS2V5d29yZCIsImJ1aWx0aW4iKV0sTnVsbFZhbHVlOlsoMCxzLnQpKCJLZXl3b3JkIiwia2V5d29yZCIpXSxMaXN0VmFsdWU6WygwLHMucCkoIlsiKSwoMCxzLmxpc3QpKCJWYWx1ZSIsKDAscy5vcHQpKCgwLHMucCkoIiwiKSkpLCgwLHMucCkoIl0iKV0sT2JqZWN0VmFsdWU6WygwLHMucCkoInsiKSwoMCxzLmxpc3QpKCJPYmplY3RGaWVsZCIsKDAscy5vcHQpKCgwLHMucCkoIiwiKSkpLCgwLHMucCkoIn0iKV0sT2JqZWN0RmllbGQ6W2koImF0dHJpYnV0ZSIpLCgwLHMucCkoIjoiKSwiVmFsdWUiXX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9MCxuPWU7bi5vZmZzZXRQYXJlbnQ7KXQrPW4ub2Zmc2V0TGVmdCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybiB0fWZ1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTAsbj1lO24ub2Zmc2V0UGFyZW50Oyl0Kz1uLm9mZnNldFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybiB0fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldExlZnQ9cix0LmdldFRvcD1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigxKSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubGFiZWwsbj1lLmFjdGl2ZUNvbG9yLHI9ZS5hY3RpdmUsaT1lLm9uQ2xpY2ssYT1lLnRhYldpZHRoO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYyx7b25DbGljazppLGFjdGl2ZUNvbG9yOm4sYWN0aXZlOnIsdGFiV2lkdGg6YX0sdCl9LHR9KG8uUHVyZUNvbXBvbmVudCk7dC5kZWZhdWx0PXM7dmFyIHUsYz1hLnN0eWxlZCgiZGl2IikodXx8KHU9aShbIlxuICB6LWluZGV4OiAiLCI7XG4gIHBhZGRpbmc6IDhweCA4cHggOHB4IDhweDtcbiAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwcHggMHB4O1xuICBjb2xvcjogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGJveC1zaGFkb3c6IC0xcHggMXB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICBsZXR0ZXItc3BhY2luZzogMC40NXB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0O1xuICBtYXJnaW4tdG9wOiA2NXB4O1xuICB3aWR0aDogIiwiO1xuIl0sWyJcbiAgei1pbmRleDogIiwiO1xuICBwYWRkaW5nOiA4cHggOHB4IDhweCA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweCAycHggMHB4IDBweDtcbiAgY29sb3I6ICIsIjtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBib3gtc2hhZG93OiAtMXB4IDFweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMTJweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNDVweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDtcbiAgbWFyZ2luLXRvcDogNjVweDtcbiAgd2lkdGg6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlPzEwOjJ9LGZ1bmN0aW9uKGUpe3JldHVybiJkYXJrIj09PWUudGhlbWUubW9kZT9lLnRoZW1lLmNvbG91cnMud2hpdGU6ZS50aGVtZS5jb2xvdXJzW2UuYWN0aXZlPyJ3aGl0ZSI6ImRhcmtCbHVlIl19LGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZSYmZS5hY3RpdmVDb2xvcj9lLnRoZW1lLmNvbG91cnNbZS5hY3RpdmVDb2xvcl06ImRhcmsiPT09ZS50aGVtZS5tb2RlPyIjM0Q1ODY2IjoiI0RCREVFMCJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhYldpZHRofHwiMTAwJSJ9KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe2lmKGUmJiJvYmplY3QiPT09dHlwZW9mIGUpe3ZhciB0PWUud2hpY2h8fGUua2V5Q29kZXx8ZS5jaGFyQ29kZTt0JiYoZT10KX1pZigibnVtYmVyIj09PXR5cGVvZiBlKXJldHVybiBhW2VdO3ZhciBuPVN0cmluZyhlKSxvPXJbbi50b0xvd2VyQ2FzZSgpXTtpZihvKXJldHVybiBvO3ZhciBvPWlbbi50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gb3x8KDE9PT1uLmxlbmd0aD9uLmNoYXJDb2RlQXQoMCk6dm9pZCAwKX1uLmlzRXZlbnRLZXk9ZnVuY3Rpb24oZSx0KXtpZihlJiYib2JqZWN0Ij09PXR5cGVvZiBlKXt2YXIgbj1lLndoaWNofHxlLmtleUNvZGV8fGUuY2hhckNvZGU7aWYobnVsbD09PW58fHZvaWQgMD09PW4pcmV0dXJuITE7aWYoInN0cmluZyI9PT10eXBlb2YgdCl7dmFyIG89clt0LnRvTG93ZXJDYXNlKCldO2lmKG8pcmV0dXJuIG89PT1uO3ZhciBvPWlbdC50b0xvd2VyQ2FzZSgpXTtpZihvKXJldHVybiBvPT09bn1lbHNlIGlmKCJudW1iZXIiPT09dHlwZW9mIHQpcmV0dXJuIHQ9PT1uO3JldHVybiExfX0sdD1lLmV4cG9ydHM9bjt2YXIgcj10LmNvZGU9dC5jb2Rlcz17YmFja3NwYWNlOjgsdGFiOjksZW50ZXI6MTMsc2hpZnQ6MTYsY3RybDoxNyxhbHQ6MTgsInBhdXNlL2JyZWFrIjoxOSwiY2FwcyBsb2NrIjoyMCxlc2M6Mjcsc3BhY2U6MzIsInBhZ2UgdXAiOjMzLCJwYWdlIGRvd24iOjM0LGVuZDozNSxob21lOjM2LGxlZnQ6MzcsdXA6MzgscmlnaHQ6MzksZG93bjo0MCxpbnNlcnQ6NDUsZGVsZXRlOjQ2LGNvbW1hbmQ6OTEsImxlZnQgY29tbWFuZCI6OTEsInJpZ2h0IGNvbW1hbmQiOjkzLCJudW1wYWQgKiI6MTA2LCJudW1wYWQgKyI6MTA3LCJudW1wYWQgLSI6MTA5LCJudW1wYWQgLiI6MTEwLCJudW1wYWQgLyI6MTExLCJudW0gbG9jayI6MTQ0LCJzY3JvbGwgbG9jayI6MTQ1LCJteSBjb21wdXRlciI6MTgyLCJteSBjYWxjdWxhdG9yIjoxODMsIjsiOjE4NiwiPSI6MTg3LCIsIjoxODgsIi0iOjE4OSwiLiI6MTkwLCIvIjoxOTEsImAiOjE5MiwiWyI6MjE5LCJcXCI6MjIwLCJdIjoyMjEsIiciOjIyMn0saT10LmFsaWFzZXM9e3dpbmRvd3M6OTEsIlx1MjFlNyI6MTYsIlx1MjMyNSI6MTgsIlx1MjMwMyI6MTcsIlx1MjMxOCI6OTEsY3RsOjE3LGNvbnRyb2w6MTcsb3B0aW9uOjE4LHBhdXNlOjE5LGJyZWFrOjE5LGNhcHM6MjAscmV0dXJuOjEzLGVzY2FwZToyNyxzcGM6MzIsc3BhY2ViYXI6MzIscGd1cDozMyxwZ2RuOjM0LGluczo0NSxkZWw6NDYsY21kOjkxfTtmb3Iobz05NztvPDEyMztvKyspcltTdHJpbmcuZnJvbUNoYXJDb2RlKG8pXT1vLTMyO2Zvcih2YXIgbz00ODtvPDU4O28rKylyW28tNDhdPW87Zm9yKG89MTtvPDEzO28rKylyWyJmIitvXT1vKzExMTtmb3Iobz0wO288MTA7bysrKXJbIm51bXBhZCAiK29dPW8rOTY7dmFyIGE9dC5uYW1lcz10LnRpdGxlPXt9O2ZvcihvIGluIHIpYVtyW29dXT1vO2Zvcih2YXIgcyBpbiBpKXJbc109aVtzXX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDEpO3QuRXJyb3JDb250YWluZXI9aS5zdHlsZWQuZGl2KG98fChvPXIoWyJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxlZnQ6IDA7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIG9wYWNpdHk6IDAuNTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSk7XG4iXSxbIlxuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGVmdDogMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgb3BhY2l0eTogMC41O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTtcbiJdKSkpO3ZhciBvfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4oT2JqZWN0LnZhbHVlc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfSkoZS5nZXRUeXBlTWFwKCkpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5uYW1lLmxvY2FsZUNvbXBhcmUodC5uYW1lKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZC5pbmNsdWRlcyhlLm5hbWUpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBjKHt9LHQscC5zZXJpYWxpemUoZSx0KSx7aW5zdGFuY2VPZjppKHQpfSl9KX1mdW5jdGlvbiBpKGUpe3JldHVybiBlIGluc3RhbmNlb2YgbC5HcmFwaFFMSW50ZXJmYWNlVHlwZT8iaW50ZXJmYWNlIjplIGluc3RhbmNlb2YgbC5HcmFwaFFMVW5pb25UeXBlPyJ1bmlvbiI6ZSBpbnN0YW5jZW9mIGwuR3JhcGhRTEVudW1UeXBlPyJlbnVtIjplIGluc3RhbmNlb2YgbC5HcmFwaFFMSW5wdXRPYmplY3RUeXBlPyJpbnB1dCI6InR5cGUifWZ1bmN0aW9uIG8oZSx0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIG49ZS5yZXBsYWNlKC9eXHMqJCg/OlxyXG4/fFxuKS9nbSwiIikscj1uLnJlcGxhY2UoL1t9XS9nbSwiJCZcclxuIiksaT1yLnJlcGxhY2UoLyg/OnNjYWxhciApXHcrL2csIiQmXHJcbiIpO3JldHVybiB0P2k6aS5yZXBsYWNlKC8oPzpcI1tcd1wnXHNcclxuXCpdKC4qKSQpL2dtLCIkJlxyIil9ZnVuY3Rpb24gYShlLHQpe2lmKHZvaWQgMD09PXQmJih0PSEwKSxlIGluc3RhbmNlb2YgbC5HcmFwaFFMU2NoZW1hKXt2YXIgbj1sLnByaW50U2NoZW1hKGUse2NvbW1lbnREZXNjcmlwdGlvbnM6ITB9KTtpZih0KXt2YXIgcj1uLnJlcGxhY2UoLyhcI1tcd1wnXHNcclxuXCpdKC4qKSQpL2dtLCIiKTtyZXR1cm4gbyhmLnByZXR0aWZ5KHIse3ByaW50V2lkdGg6ODAsdGFiV2lkdGg6Mix1c2VUYWJzOiExfSksdCl9cmV0dXJuIG8oZi5wcmV0dGlmeShuLHtwcmludFdpZHRoOjgwLHRhYldpZHRoOjIsdXNlVGFiczohMX0pKX1yZXR1cm4iIn1mdW5jdGlvbiBzKGUsdCl7aWYoInNkbCI9PT10KXt2YXIgbj1hKGUsITEpLHI9InNjaGVtYS5ncmFwaHFsIjtyZXR1cm4gdShuLHIpfXZhciBuPUpTT04uc3RyaW5naWZ5KGUpLHI9Imluc3Ryb3NwZWN0aW9uU2NoZW1hLmpzb24iO3JldHVybiB1KG4scil9ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI9bmV3IEJsb2IoW2VdLHt0eXBlOm58fCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSk7aWYoInVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihyLHQpO2Vsc2V7dmFyIGk9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwociksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7by5zdHlsZS5kaXNwbGF5PSJub25lIixvLmhyZWY9aSxvLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLHQpLCJ1bmRlZmluZWQiPT09dHlwZW9mIG8uZG93bmxvYWQmJm8uc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfYmxhbmsiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pLG8uY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG8pLHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGkpfX12YXIgYz1mdW5jdGlvbigpe3JldHVybiBjPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0sYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbD1uKDcpLHA9big2NiksZj1uKDY1KSxkPVsiX19TY2hlbWEiLCJfX0RpcmVjdGl2ZSIsIl9fRGlyZWN0aXZlTG9jYXRpb24iLCJfX1R5cGUiLCJfX0ZpZWxkIiwiX19JbnB1dFZhbHVlIiwiX19FbnVtVmFsdWUiLCJfX1R5cGVLaW5kIiwiU3RyaW5nIiwiSUQiLCJCb29sZWFuIiwiSW50IiwiRmxvYXQiXTt0LnNkbEFycmF5PXIsdC5nZXRTREw9YSx0LmRvd25sb2FkU2NoZW1hPXN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oMjYyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0iPFtBLVphLXpdW0EtWmEtejAtOVxcLV0qKD86XFxzK1thLXpBLVpfOl1bYS16QS1aMC05Oi5fLV0qKD86XFxzKj1cXHMqKD86W15cIic9PD5gXFx4MDAtXFx4MjBdK3wnW14nXSonfFwiW15cIl0qXCIpKT8pKlxccypcXC8/PiIsaT0iPFxcL1tBLVphLXpdW0EtWmEtejAtOVxcLV0qXFxzKj4iLG89bmV3IFJlZ0V4cCgiXig/OiIrcisifCIraSsifFx4M2MhLS0tLVx4M2V8XHgzYyEtLSg/Oi0/W14+LV0pKD86LT9bXi1dKSotLVx4M2V8PFs/XS4qP1s/XT58PCFbQS1aXStcXHMrW14+XSo+fDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPikiKSxhPW5ldyBSZWdFeHAoIl4oPzoiK3IrInwiK2krIikiKTtlLmV4cG9ydHMuSFRNTF9UQUdfUkU9byxlLmV4cG9ydHMuSFRNTF9PUEVOX0NMT1NFX1RBR19SRT1hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cy50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscz1lLnBvcyx1PWUuc3JjLmNoYXJDb2RlQXQocyk7aWYodClyZXR1cm4hMTtpZigxMjYhPT11KXJldHVybiExO2lmKHI9ZS5zY2FuRGVsaW1zKGUucG9zLCEwKSxvPXIubGVuZ3RoLGE9U3RyaW5nLmZyb21DaGFyQ29kZSh1KSxvPDIpcmV0dXJuITE7Zm9yKG8lMiYmKGk9ZS5wdXNoKCJ0ZXh0IiwiIiwwKSxpLmNvbnRlbnQ9YSxvLS0pLG49MDtuPG87bis9MilpPWUucHVzaCgidGV4dCIsIiIsMCksaS5jb250ZW50PWErYSxlLmRlbGltaXRlcnMucHVzaCh7bWFya2VyOnUsanVtcDpuLHRva2VuOmUudG9rZW5zLmxlbmd0aC0xLGxldmVsOmUubGV2ZWwsZW5kOi0xLG9wZW46ci5jYW5fb3BlbixjbG9zZTpyLmNhbl9jbG9zZX0pO3JldHVybiBlLnBvcys9ci5sZW5ndGgsITB9LGUuZXhwb3J0cy5wb3N0UHJvY2Vzcz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9W10scz1lLmRlbGltaXRlcnMsdT1lLmRlbGltaXRlcnMubGVuZ3RoO2Zvcih0PTA7dDx1O3QrKylyPXNbdF0sMTI2PT09ci5tYXJrZXImJi0xIT09ci5lbmQmJihpPXNbci5lbmRdLG89ZS50b2tlbnNbci50b2tlbl0sby50eXBlPSJzX29wZW4iLG8udGFnPSJzIixvLm5lc3Rpbmc9MSxvLm1hcmt1cD0ifn4iLG8uY29udGVudD0iIixvPWUudG9rZW5zW2kudG9rZW5dLG8udHlwZT0ic19jbG9zZSIsby50YWc9InMiLG8ubmVzdGluZz0tMSxvLm1hcmt1cD0ifn4iLG8uY29udGVudD0iIiwidGV4dCI9PT1lLnRva2Vuc1tpLnRva2VuLTFdLnR5cGUmJiJ+Ij09PWUudG9rZW5zW2kudG9rZW4tMV0uY29udGVudCYmYS5wdXNoKGkudG9rZW4tMSkpO2Zvcig7YS5sZW5ndGg7KXtmb3IodD1hLnBvcCgpLG49dCsxO248ZS50b2tlbnMubGVuZ3RoJiYic19jbG9zZSI9PT1lLnRva2Vuc1tuXS50eXBlOyluKys7bi0tLHQhPT1uJiYobz1lLnRva2Vuc1tuXSxlLnRva2Vuc1tuXT1lLnRva2Vuc1t0XSxlLnRva2Vuc1t0XT1vKX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cy50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPWUucG9zLGE9ZS5zcmMuY2hhckNvZGVBdChvKTtpZih0KXJldHVybiExO2lmKDk1IT09YSYmNDIhPT1hKXJldHVybiExO2ZvcihyPWUuc2NhbkRlbGltcyhlLnBvcyw0Mj09PWEpLG49MDtuPHIubGVuZ3RoO24rKylpPWUucHVzaCgidGV4dCIsIiIsMCksaS5jb250ZW50PVN0cmluZy5mcm9tQ2hhckNvZGUoYSksZS5kZWxpbWl0ZXJzLnB1c2goe21hcmtlcjphLGxlbmd0aDpyLmxlbmd0aCxqdW1wOm4sdG9rZW46ZS50b2tlbnMubGVuZ3RoLTEsbGV2ZWw6ZS5sZXZlbCxlbmQ6LTEsb3BlbjpyLmNhbl9vcGVuLGNsb3NlOnIuY2FuX2Nsb3NlfSk7cmV0dXJuIGUucG9zKz1yLmxlbmd0aCwhMH0sZS5leHBvcnRzLnBvc3RQcm9jZXNzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzPWUuZGVsaW1pdGVycyx1PWUuZGVsaW1pdGVycy5sZW5ndGg7Zm9yKHQ9dS0xO3Q+PTA7dC0tKW49c1t0XSw5NSE9PW4ubWFya2VyJiY0MiE9PW4ubWFya2VyfHwtMSE9PW4uZW5kJiYocj1zW24uZW5kXSxhPXQ+MCYmc1t0LTFdLmVuZD09PW4uZW5kKzEmJnNbdC0xXS50b2tlbj09PW4udG9rZW4tMSYmc1tuLmVuZCsxXS50b2tlbj09PXIudG9rZW4rMSYmc1t0LTFdLm1hcmtlcj09PW4ubWFya2VyLG89U3RyaW5nLmZyb21DaGFyQ29kZShuLm1hcmtlciksaT1lLnRva2Vuc1tuLnRva2VuXSxpLnR5cGU9YT8ic3Ryb25nX29wZW4iOiJlbV9vcGVuIixpLnRhZz1hPyJzdHJvbmciOiJlbSIsaS5uZXN0aW5nPTEsaS5tYXJrdXA9YT9vK286byxpLmNvbnRlbnQ9IiIsaT1lLnRva2Vuc1tyLnRva2VuXSxpLnR5cGU9YT8ic3Ryb25nX2Nsb3NlIjoiZW1fY2xvc2UiLGkudGFnPWE/InN0cm9uZyI6ImVtIixpLm5lc3Rpbmc9LTEsaS5tYXJrdXA9YT9vK286byxpLmNvbnRlbnQ9IiIsYSYmKGUudG9rZW5zW3NbdC0xXS50b2tlbl0uY29udGVudD0iIixlLnRva2Vuc1tzW24uZW5kKzFdLnRva2VuXS5jb250ZW50PSIiLHQtLSkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89bigxKSxhPW8uc3R5bGVkLmRpdihzfHwocz1yKFsiXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuIl0sWyJcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgcGFkZGluZzogMTZweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4iXSkpKTt0LkNhdGVnb3J5VGl0bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KGEsbnVsbCx0KX07dmFyIHN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oMzYpLGE9bigxKSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLm92ZXJmbG93LHI9dm9pZCAwPT09bnx8bixhPWUud2lkdGgscz12b2lkIDA9PT1hP28uY29sdW1uV2lkdGg6YTtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KGMse3N0eWxlOnt3aWR0aDpzfSx2ZXJ0aWNhbFNjcm9sbDpyfSx0KX07dC5kZWZhdWx0PXM7dmFyIHUsYz1hLnN0eWxlZCgiZGl2IikodXx8KHU9cihbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAwIDAgYXV0bztcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAiLCI7XG4gIG92ZXJmbG93LXg6ICIsIlxuICBvdmVyZmxvdy15OiAiLCJcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICIsIjtcbiAgb3ZlcmZsb3cteDogIiwiXG4gIG92ZXJmbG93LXk6ICIsIlxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLmJsYWNrMTB9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnZlcnRpY2FsU2Nyb2xsPyJoaWRkZW4iOiJhdXRvIn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudmVydGljYWxTY3JvbGw/InNjcm9sbCI6ImF1dG8ifSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCksYT1uKDY5OSkscz1uKDI0KSx1PW4oMSksYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLmhhbmRsZUNoYW5nZT1mdW5jdGlvbihlKXtuLnNldFN0YXRlKHt2YWx1ZTplLnRhcmdldC52YWx1ZX0pLG4uZGVib3VuY2VkT25TZWFyY2goKX0sbi5zdGF0ZT17dmFsdWU6IiJ9LG4uZGVib3VuY2VkT25TZWFyY2g9YS5kZWZhdWx0KDIwMCxmdW5jdGlvbigpe24ucHJvcHMub25TZWFyY2gobi5zdGF0ZS52YWx1ZSl9KSxufXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudmFsdWUhPT10aGlzLnN0YXRlLnZhbHVlfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1vLmNyZWF0ZUVsZW1lbnQoaCxudWxsLG8uY3JlYXRlRWxlbWVudChzLlNlYXJjaCx7aGVpZ2h0OjE2LHdpZHRoOjE2LHN0cm9rZVdpZHRoOjMsY29sb3I6InJnYmEoMCwgMCwgMCwgMC4zKSJ9KSxvLmNyZWF0ZUVsZW1lbnQobSx7b25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2UsdHlwZToidGV4dCIsdmFsdWU6dGhpcy5zdGF0ZS52YWx1ZSxwbGFjZWhvbGRlcjp0aGlzLnByb3BzLnBsYWNlaG9sZGVyfHwiU2VhcmNoIHRoZSBkb2NzIC4uLiJ9KSk7cmV0dXJuIHRoaXMucHJvcHMuY2xlYW4/ZTpvLmNyZWF0ZUVsZW1lbnQoZCxudWxsLGUpfSx0fShvLkNvbXBvbmVudCk7dC5kZWZhdWx0PWM7dmFyIGwscCxmLGQ9dS5zdHlsZWQuZGl2KGx8fChsPWkoWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4OiAwIDAgYXV0bztcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgcGFkZGluZzogMjVweDtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIiwiO1xuICBkaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tbGVmdDogNnB4O1xuICBwYWRkaW5nOiAyNXB4O1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAiLCI7XG4gIGRpdiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5ibGFjazAyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLmJsYWNrMTB9KSxoPXUuc3R5bGVkLmRpdihwfHwocD1pKFsiXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEycHggMTRweCAxM3B4IDE1cHg7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEycHggMTRweCAxM3B4IDE1cHg7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy53aGl0ZX0pLG09dS5zdHlsZWQuaW5wdXQoZnx8KGY9aShbIlxuICBmb250LXNpemU6IDE2cHg7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICIsIjtcbiAgfVxuIl0sWyJcbiAgZm9udC1zaXplOiAxNnB4O1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAiLCI7XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5ibGFjazMwfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4oZS5jb25maWdQYXRoP2UuY29uZmlnUGF0aCsifiI6IiIpKyhlLndvcmtzcGFjZU5hbWU/ZS53b3Jrc3BhY2VOYW1lKyJ+IjoiIikrZS5lbmRwb2ludH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRXb3Jrc3BhY2VJZD1yfSxmdW5jdGlvbihlLHQpe3QuX19lc01vZHVsZT0hMDt2YXIgbj0odC5BVFRSSUJVVEVfTkFNRVM9e0JPRFk6ImJvZHlBdHRyaWJ1dGVzIixIVE1MOiJodG1sQXR0cmlidXRlcyIsVElUTEU6InRpdGxlQXR0cmlidXRlcyJ9LHQuVEFHX05BTUVTPXtCQVNFOiJiYXNlIixCT0RZOiJib2R5IixIRUFEOiJoZWFkIixIVE1MOiJodG1sIixMSU5LOiJsaW5rIixNRVRBOiJtZXRhIixOT1NDUklQVDoibm9zY3JpcHQiLFNDUklQVDoic2NyaXB0IixTVFlMRToic3R5bGUiLFRJVExFOiJ0aXRsZSJ9KSxyPSh0LlZBTElEX1RBR19OQU1FUz1PYmplY3Qua2V5cyhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KSx0LlRBR19QUk9QRVJUSUVTPXtDSEFSU0VUOiJjaGFyc2V0IixDU1NfVEVYVDoiY3NzVGV4dCIsSFJFRjoiaHJlZiIsSFRUUEVRVUlWOiJodHRwLWVxdWl2IixJTk5FUl9IVE1MOiJpbm5lckhUTUwiLElURU1fUFJPUDoiaXRlbXByb3AiLE5BTUU6Im5hbWUiLFBST1BFUlRZOiJwcm9wZXJ0eSIsUkVMOiJyZWwiLFNSQzoic3JjIn0sdC5SRUFDVF9UQUdfTUFQPXthY2Nlc3NrZXk6ImFjY2Vzc0tleSIsY2hhcnNldDoiY2hhclNldCIsY2xhc3M6ImNsYXNzTmFtZSIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUiLGNvbnRleHRtZW51OiJjb250ZXh0TWVudSIsImh0dHAtZXF1aXYiOiJodHRwRXF1aXYiLGl0ZW1wcm9wOiJpdGVtUHJvcCIsdGFiaW5kZXg6InRhYkluZGV4In0pO3QuSEVMTUVUX1BST1BTPXtERUZBVUxUX1RJVExFOiJkZWZhdWx0VGl0bGUiLERFRkVSOiJkZWZlciIsRU5DT0RFX1NQRUNJQUxfQ0hBUkFDVEVSUzoiZW5jb2RlU3BlY2lhbENoYXJhY3RlcnMiLE9OX0NIQU5HRV9DTElFTlRfU1RBVEU6Im9uQ2hhbmdlQ2xpZW50U3RhdGUiLFRJVExFX1RFTVBMQVRFOiJ0aXRsZVRlbXBsYXRlIn0sdC5IVE1MX1RBR19NQVA9T2JqZWN0LmtleXMocikucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbclt0XV09dCxlfSx7fSksdC5TRUxGX0NMT1NJTkdfVEFHUz1bbi5OT1NDUklQVCxuLlNDUklQVCxuLlNUWUxFXSx0LkhFTE1FVF9BVFRSSUJVVEU9ImRhdGEtcmVhY3QtaGVsbWV0In0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUzKTtlLmV4cG9ydHM9bmV3IHIoe2luY2x1ZGU6W24oMzA0KV19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUzKTtlLmV4cG9ydHM9bmV3IHIoe2luY2x1ZGU6W24oMTQ4KV0saW1wbGljaXQ6W24oNzI5KSxuKDczMCksbig3MzEpLG4oNzMyKV19KX0sZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSwvW15hLXowLTlcLSMkJSYnKisuXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSxlfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9e25leHQ6ZnVuY3Rpb24oKXt2YXIgdD1lLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09dCx2YWx1ZTp0fX19O3JldHVybiB5Lml0ZXJhYmxlJiYodFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHR9KSx0fWZ1bmN0aW9uIGkoZSl7dGhpcy5tYXA9e30sZSBpbnN0YW5jZW9mIGk/ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dGhpcy5hcHBlbmQodCxlKX0sdGhpcyk6QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5hcHBlbmQoZVswXSxlWzFdKX0sdGhpcyk6ZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0LGVbdF0pfSx0aGlzKX1mdW5jdGlvbiBvKGUpe2lmKGUuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTtlLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5vbmxvYWQ9ZnVuY3Rpb24oKXt0KGUucmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7bihlLmVycm9yKX19KX1mdW5jdGlvbiBzKGUpe3ZhciB0PW5ldyBGaWxlUmVhZGVyLG49YSh0KTtyZXR1cm4gdC5yZWFkQXNBcnJheUJ1ZmZlcihlKSxufWZ1bmN0aW9uIHUoZSl7dmFyIHQ9bmV3IEZpbGVSZWFkZXIsbj1hKHQpO3JldHVybiB0LnJlYWRBc1RleHQoZSksbn1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlKSxuPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZSh0W3JdKTtyZXR1cm4gbi5qb2luKCIiKX1mdW5jdGlvbiBsKGUpe2lmKGUuc2xpY2UpcmV0dXJuIGUuc2xpY2UoMCk7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gdC5zZXQobmV3IFVpbnQ4QXJyYXkoZSkpLHQuYnVmZmVyfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihlKXtpZih0aGlzLl9ib2R5SW5pdD1lLGUpaWYoInN0cmluZyI9PT10eXBlb2YgZSl0aGlzLl9ib2R5VGV4dD1lO2Vsc2UgaWYoeS5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKXRoaXMuX2JvZHlCbG9iPWU7ZWxzZSBpZih5LmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSl0aGlzLl9ib2R5Rm9ybURhdGE9ZTtlbHNlIGlmKHkuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpdGhpcy5fYm9keVRleHQ9ZS50b1N0cmluZygpO2Vsc2UgaWYoeS5hcnJheUJ1ZmZlciYmeS5ibG9iJiZiKGUpKXRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1sKGUuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7ZWxzZXtpZigheS5hcnJheUJ1ZmZlcnx8IUFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpJiYheChlKSl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGUiKTt0aGlzLl9ib2R5QXJyYXlCdWZmZXI9bChlKX1lbHNlIHRoaXMuX2JvZHlUZXh0PSIiO3RoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwoInN0cmluZyI9PT10eXBlb2YgZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnkuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSx5LmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgZT1vKHRoaXMpO2lmKGUpcmV0dXJuIGU7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/byh0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihzKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBlPW8odGhpcyk7aWYoZSlyZXR1cm4gZTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gdSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoYyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0seS5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihoKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS50b1VwcGVyQ2FzZSgpO3JldHVybiBDLmluZGV4T2YodCk+LTE/dDplfWZ1bmN0aW9uIGQoZSx0KXt0PXR8fHt9O3ZhciBuPXQuYm9keTtpZihlIGluc3RhbmNlb2YgZCl7aWYoZS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD1lLnVybCx0aGlzLmNyZWRlbnRpYWxzPWUuY3JlZGVudGlhbHMsdC5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBpKGUuaGVhZGVycykpLHRoaXMubWV0aG9kPWUubWV0aG9kLHRoaXMubW9kZT1lLm1vZGUsbnx8bnVsbD09ZS5fYm9keUluaXR8fChuPWUuX2JvZHlJbml0LGUuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGUpO2lmKHRoaXMuY3JlZGVudGlhbHM9dC5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8Im9taXQiLCF0LmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaSh0LmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1mKHQubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIpLHRoaXMubW9kZT10Lm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKCJHRVQiPT09dGhpcy5tZXRob2R8fCJIRUFEIj09PXRoaXMubWV0aG9kKSYmbil0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KG4pfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9bmV3IEZvcm1EYXRhO3JldHVybiBlLnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIG49ZS5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxpPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTt0LmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KGkpKX19KSx0fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9bmV3IGk7cmV0dXJuIGUucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdCgiOiIpLHI9bi5zaGlmdCgpLnRyaW0oKTtpZihyKXt2YXIgaT1uLmpvaW4oIjoiKS50cmltKCk7dC5hcHBlbmQocixpKX19KSx0fWZ1bmN0aW9uIGcoZSx0KXt0fHwodD17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz12b2lkIDA9PT10LnN0YXR1cz8yMDA6dC5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIHQ/dC5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBpKHQuaGVhZGVycyksdGhpcy51cmw9dC51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGUpfWlmKCFlLmZldGNoKXt2YXIgeT17c2VhcmNoUGFyYW1zOiJVUkxTZWFyY2hQYXJhbXMiaW4gZSxpdGVyYWJsZToiU3ltYm9sImluIGUmJiJpdGVyYXRvciJpbiBTeW1ib2wsYmxvYjoiRmlsZVJlYWRlciJpbiBlJiYiQmxvYiJpbiBlJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOiJGb3JtRGF0YSJpbiBlLGFycmF5QnVmZmVyOiJBcnJheUJ1ZmZlciJpbiBlfTtpZih5LmFycmF5QnVmZmVyKXZhciB2PVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sYj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSl9LHg9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmdi5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSk+LTF9O2kucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHIpe2U9dChlKSxyPW4ocik7dmFyIGk9dGhpcy5tYXBbZV07dGhpcy5tYXBbZV09aT9pKyIsIityOnJ9LGkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5tYXBbdChlKV19LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gZT10KGUpLHRoaXMuaGFzKGUpP3RoaXMubWFwW2VdOm51bGx9LGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkodChlKSl9LGkucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHIpe3RoaXMubWFwW3QoZSldPW4ocil9LGkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobikmJmUuY2FsbCh0LHRoaXMubWFwW25dLG4sdGhpcyl9LGkucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7ZS5wdXNoKG4pfSkscihlKX0saS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxyKGUpfSxpLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LG4pe2UucHVzaChbbix0XSl9KSxyKGUpfSx5Lml0ZXJhYmxlJiYoaS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1pLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgQz1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0scC5jYWxsKGQucHJvdG90eXBlKSxwLmNhbGwoZy5wcm90b3R5cGUpLGcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgaSh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxnLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGcobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDoiIn0pO3JldHVybiBlLnR5cGU9ImVycm9yIixlfTt2YXIgRT1bMzAxLDMwMiwzMDMsMzA3LDMwOF07Zy5yZWRpcmVjdD1mdW5jdGlvbihlLHQpe2lmKC0xPT09RS5pbmRleE9mKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBnKG51bGwse3N0YXR1czp0LGhlYWRlcnM6e2xvY2F0aW9uOmV9fSl9LGUuSGVhZGVycz1pLGUuUmVxdWVzdD1kLGUuUmVzcG9uc2U9ZyxlLmZldGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IGQoZSx0KSxvPW5ldyBYTUxIdHRwUmVxdWVzdDtvLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPXtzdGF0dXM6by5zdGF0dXMsc3RhdHVzVGV4dDpvLnN0YXR1c1RleHQsaGVhZGVyczptKG8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07ZS51cmw9InJlc3BvbnNlVVJMImluIG8/by5yZXNwb25zZVVSTDplLmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIHQ9InJlc3BvbnNlImluIG8/by5yZXNwb25zZTpvLnJlc3BvbnNlVGV4dDtuKG5ldyBnKHQsZSkpfSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LG8ub250aW1lb3V0PWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxvLm9wZW4oaS5tZXRob2QsaS51cmwsITApLCJpbmNsdWRlIj09PWkuY3JlZGVudGlhbHM/by53aXRoQ3JlZGVudGlhbHM9ITA6Im9taXQiPT09aS5jcmVkZW50aWFscyYmKG8ud2l0aENyZWRlbnRpYWxzPSExKSwicmVzcG9uc2VUeXBlImluIG8mJnkuYmxvYiYmKG8ucmVzcG9uc2VUeXBlPSJibG9iIiksaS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oZSx0KXtvLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pLG8uc2VuZCgidW5kZWZpbmVkIj09PXR5cGVvZiBpLl9ib2R5SW5pdD9udWxsOmkuX2JvZHlJbml0KX0pfSxlLmZldGNoLnBvbHlmaWxsPSEwfX0oInVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSwsZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1MTgpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9aS5kZWZhdWx0LGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oMSksYT1uKDI0KTt0LkJ1dHRvbj1mdW5jdGlvbihlKXt2YXIgbj1lLnB1cnBsZSxyPWUuaGlkZUFycm93LG89ZS5jaGlsZHJlbixzPWUub25DbGljaztyZXR1cm4gaS5jcmVhdGVFbGVtZW50KHQuQnV0dG9uQm94LHtwdXJwbGU6bixvbkNsaWNrOnN9LG98fCJMZWFybiBtb3JlIiwhciYmaS5jcmVhdGVFbGVtZW50KGEuRnVsbEFycm93UmlnaHRJY29uLHtjb2xvcjoicmVkIix3aWR0aDoxNCxoZWlnaHQ6MTF9KSl9LHQuQnV0dG9uQm94PW8uc3R5bGVkKCJkaXYiKShzfHwocz1yKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgcGFkZGluZzogNnB4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBjb2xvcjogIiwiO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMjVzIGVhc2UsIGJveC1zaGFkb3cgMC4yNXMgZWFzZSwgdHJhbnNmb3JtIDAuMjVzIGVhc2U7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICAgIHRyYW5zZm9ybTogIiwiO1xuICAgIHN2ZyB7XG4gICAgICBhbmltYXRpb246IG1vdmUgMXMgZWFzZSBpbmZpbml0ZTtcbiAgICB9XG4gIH1cblxuICBzdmcge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgIGZpbGw6ICIsIjtcbiAgfVxuXG4gIEBrZXlmcmFtZXMgbW92ZSB7XG4gICAgMCUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzRCgwLCAwLCAwKTtcbiAgICB9XG5cbiAgICA1MCUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzRCgzcHgsIDAsIDApO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzRCgwLCAwLCAwKTtcbiAgICB9XG4gIH1cbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgcGFkZGluZzogNnB4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBjb2xvcjogIiwiO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMjVzIGVhc2UsIGJveC1zaGFkb3cgMC4yNXMgZWFzZSwgdHJhbnNmb3JtIDAuMjVzIGVhc2U7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICAgIHRyYW5zZm9ybTogIiwiO1xuICAgIHN2ZyB7XG4gICAgICBhbmltYXRpb246IG1vdmUgMXMgZWFzZSBpbmZpbml0ZTtcbiAgICB9XG4gIH1cblxuICBzdmcge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgIGZpbGw6ICIsIjtcbiAgfVxuXG4gIEBrZXlmcmFtZXMgbW92ZSB7XG4gICAgMCUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzRCgwLCAwLCAwKTtcbiAgICB9XG5cbiAgICA1MCUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzRCgzcHgsIDAsIDApO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzRCgwLCAwLCAwKTtcbiAgICB9XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUucHVycGxlPyJyZ2IoMjE4LCAyNywgMTI3KSI6IiMyYTdlZDIifSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLndoaXRlfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXJwbGU/InJnYigxNjQsIDMsIDExMSkiOiIjM2Y4YWQ3In0sZnVuY3Rpb24oZSl7cmV0dXJuIGUucHVycGxlPyJ0cmFuc2xhdGUzRCgwLCAwLCAwKSI6InRyYW5zbGF0ZTNEKDAsIC0xcHgsIDApIn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy53aGl0ZX0pO3ZhciBzfSxmdW5jdGlvbihlLHQsbil7InVuZGVmaW5lZCI9PT10eXBlb2YgUHJvbWlzZSYmKG4oMzEwKS5lbmFibGUoKSx3aW5kb3cuUHJvbWlzZT1uKDMxMikpLG4oMzA1KSxPYmplY3QuYXNzaWduPW4oNTQpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtjPSExLHMuXzQ3PW51bGwscy5fNzE9bnVsbH1mdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIHQodCl7KGUuYWxsUmVqZWN0aW9uc3x8YShwW3RdLmVycm9yLGUud2hpdGVsaXN0fHx1KSkmJihwW3RdLmRpc3BsYXlJZD1sKyssZS5vblVuaGFuZGxlZD8ocFt0XS5sb2dnZWQ9ITAsZS5vblVuaGFuZGxlZChwW3RdLmRpc3BsYXlJZCxwW3RdLmVycm9yKSk6KHBbdF0ubG9nZ2VkPSEwLG8ocFt0XS5kaXNwbGF5SWQscFt0XS5lcnJvcikpKX1mdW5jdGlvbiBuKHQpe3BbdF0ubG9nZ2VkJiYoZS5vbkhhbmRsZWQ/ZS5vbkhhbmRsZWQocFt0XS5kaXNwbGF5SWQscFt0XS5lcnJvcik6cFt0XS5vblVuaGFuZGxlZHx8KGNvbnNvbGUud2FybigiUHJvbWlzZSBSZWplY3Rpb24gSGFuZGxlZCAoaWQ6ICIrcFt0XS5kaXNwbGF5SWQrIik6IiksY29uc29sZS53YXJuKCcgIFRoaXMgbWVhbnMgeW91IGNhbiBpZ25vcmUgYW55IHByZXZpb3VzIG1lc3NhZ2VzIG9mIHRoZSBmb3JtICJQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb24iIHdpdGggaWQgJytwW3RdLmRpc3BsYXlJZCsiLiIpKSl9ZT1lfHx7fSxjJiZyKCksYz0hMDt2YXIgaT0wLGw9MCxwPXt9O3MuXzQ3PWZ1bmN0aW9uKGUpezI9PT1lLl84MyYmcFtlLl81Nl0mJihwW2UuXzU2XS5sb2dnZWQ/bihlLl81Nik6Y2xlYXJUaW1lb3V0KHBbZS5fNTZdLnRpbWVvdXQpLGRlbGV0ZSBwW2UuXzU2XSl9LHMuXzcxPWZ1bmN0aW9uKGUsbil7MD09PWUuXzc1JiYoZS5fNTY9aSsrLHBbZS5fNTZdPXtkaXNwbGF5SWQ6bnVsbCxlcnJvcjpuLHRpbWVvdXQ6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLl81NiksYShuLHUpPzEwMDoyZTMpLGxvZ2dlZDohMX0pfX1mdW5jdGlvbiBvKGUsdCl7Y29uc29sZS53YXJuKCJQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb24gKGlkOiAiK2UrIik6IiksKCh0JiYodC5zdGFja3x8dCkpKyIiKS5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiICAiK2UpfSl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fSl9dmFyIHM9bigxNTEpLHU9W1JlZmVyZW5jZUVycm9yLFR5cGVFcnJvcixSYW5nZUVycm9yXSxjPSExO3QuZGlzYWJsZT1yLHQuZW5hYmxlPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7YS5sZW5ndGh8fChvKCkscz0hMCksYVthLmxlbmd0aF09ZX1mdW5jdGlvbiByKCl7Zm9yKDt1PGEubGVuZ3RoOyl7dmFyIGU9dTtpZih1Kz0xLGFbZV0uY2FsbCgpLHU+Yyl7Zm9yKHZhciB0PTAsbj1hLmxlbmd0aC11O3Q8bjt0KyspYVt0XT1hW3QrdV07YS5sZW5ndGgtPXUsdT0wfX1hLmxlbmd0aD0wLHU9MCxzPSExfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2NsZWFyVGltZW91dChuKSxjbGVhckludGVydmFsKHIpLGUoKX12YXIgbj1zZXRUaW1lb3V0KHQsMCkscj1zZXRJbnRlcnZhbCh0LDUwKX19ZS5leHBvcnRzPW47dmFyIG8sYT1bXSxzPSExLHU9MCxjPTEwMjQsbD0idW5kZWZpbmVkIiE9PXR5cGVvZiB0P3Q6c2VsZixwPWwuTXV0YXRpb25PYnNlcnZlcnx8bC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO289ImZ1bmN0aW9uIj09PXR5cGVvZiBwP2Z1bmN0aW9uKGUpe3ZhciB0PTEsbj1uZXcgcChlKSxyPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtyZXR1cm4gbi5vYnNlcnZlKHIse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe3Q9LXQsci5kYXRhPXR9fShyKTppKHIpLG4ucmVxdWVzdEZsdXNoPW8sbi5tYWtlUmVxdWVzdENhbGxGcm9tVGltZXI9aX0pLmNhbGwodCxuKDExKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1uZXcgaShpLl80NCk7cmV0dXJuIHQuXzgzPTEsdC5fMTg9ZSx0fXZhciBpPW4oMTUxKTtlLmV4cG9ydHM9aTt2YXIgbz1yKCEwKSxhPXIoITEpLHM9cihudWxsKSx1PXIodm9pZCAwKSxjPXIoMCksbD1yKCIiKTtpLnJlc29sdmU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuIGU7aWYobnVsbD09PWUpcmV0dXJuIHM7aWYodm9pZCAwPT09ZSlyZXR1cm4gdTtpZighMD09PWUpcmV0dXJuIG87aWYoITE9PT1lKXJldHVybiBhO2lmKDA9PT1lKXJldHVybiBjO2lmKCIiPT09ZSlyZXR1cm4gbDtpZigib2JqZWN0Ij09PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT09dHlwZW9mIGUpdHJ5e3ZhciB0PWUudGhlbjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQpcmV0dXJuIG5ldyBpKHQuYmluZChlKSl9Y2F0Y2goZSl7cmV0dXJuIG5ldyBpKGZ1bmN0aW9uKHQsbil7bihlKX0pfXJldHVybiByKGUpfSxpLmFsbD1mdW5jdGlvbihlKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKTtyZXR1cm4gbmV3IGkoZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiByKGEscyl7aWYocyYmKCJvYmplY3QiPT09dHlwZW9mIHN8fCJmdW5jdGlvbiI9PT10eXBlb2Ygcykpe2lmKHMgaW5zdGFuY2VvZiBpJiZzLnRoZW49PT1pLnByb3RvdHlwZS50aGVuKXtmb3IoOzM9PT1zLl84Mzspcz1zLl8xODtyZXR1cm4gMT09PXMuXzgzP3IoYSxzLl8xOCk6KDI9PT1zLl84MyYmbihzLl8xOCksdm9pZCBzLnRoZW4oZnVuY3Rpb24oZSl7cihhLGUpfSxuKSl9dmFyIHU9cy50aGVuO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdSl7cmV0dXJuIHZvaWQgbmV3IGkodS5iaW5kKHMpKS50aGVuKGZ1bmN0aW9uKGUpe3IoYSxlKX0sbil9fXRbYV09cywwPT09LS1vJiZlKHQpfWlmKDA9PT10Lmxlbmd0aClyZXR1cm4gZShbXSk7Zm9yKHZhciBvPXQubGVuZ3RoLGE9MDthPHQubGVuZ3RoO2ErKylyKGEsdFthXSl9KX0saS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGZ1bmN0aW9uKHQsbil7bihlKX0pfSxpLnJhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGZ1bmN0aW9uKHQsbil7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2kucmVzb2x2ZShlKS50aGVuKHQsbil9KX0pfSxpLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0wO3I8dDtyKyspbis9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO3YoITEsIk1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgJXMgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiAiLG4pfWZ1bmN0aW9uIGkoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Yix0aGlzLnVwZGF0ZXI9bnx8Tn1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Yix0aGlzLnVwZGF0ZXI9bnx8Tn1mdW5jdGlvbiBzKGUsdCxuKXt2YXIgcj12b2lkIDAsaT17fSxvPW51bGwsYT1udWxsO2lmKG51bGwhPXQpZm9yKHIgaW4gdm9pZCAwIT09dC5yZWYmJihhPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKG89IiIrdC5rZXkpLHQpUC5jYWxsKHQscikmJiFNLmhhc093blByb3BlcnR5KHIpJiYoaVtyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXMpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIHU9QXJyYXkocyksYz0wO2M8cztjKyspdVtjXT1hcmd1bWVudHNbYysyXTtpLmNoaWxkcmVuPXV9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1pW3JdJiYoaVtyXT1zW3JdKTtyZXR1cm57JCR0eXBlb2Y6RSx0eXBlOmUsa2V5Om8scmVmOmEscHJvcHM6aSxfb3duZXI6TC5jdXJyZW50fX1mdW5jdGlvbiB1KGUpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09RX1mdW5jdGlvbiBjKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiKygiIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiBsKGUsdCxuLHIpe2lmKFIubGVuZ3RoKXt2YXIgaT1SLnBvcCgpO3JldHVybiBpLnJlc3VsdD1lLGkua2V5UHJlZml4PXQsaS5mdW5jPW4saS5jb250ZXh0PXIsaS5jb3VudD0wLGl9cmV0dXJue3Jlc3VsdDplLGtleVByZWZpeDp0LGZ1bmM6bixjb250ZXh0OnIsY291bnQ6MH19ZnVuY3Rpb24gcChlKXtlLnJlc3VsdD1udWxsLGUua2V5UHJlZml4PW51bGwsZS5mdW5jPW51bGwsZS5jb250ZXh0PW51bGwsZS5jb3VudD0wLDEwPlIubGVuZ3RoJiZSLnB1c2goZSl9ZnVuY3Rpb24gZihlLHQsbixpKXt2YXIgbz10eXBlb2YgZTsidW5kZWZpbmVkIiE9PW8mJiJib29sZWFuIiE9PW98fChlPW51bGwpO3ZhciBhPSExO2lmKG51bGw9PT1lKWE9ITA7ZWxzZSBzd2l0Y2gobyl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjphPSEwO2JyZWFrO2Nhc2Uib2JqZWN0Ijpzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBFOmNhc2UgRDphPSEwfX1pZihhKXJldHVybiBuKGksZSwiIj09PXQ/Ii4iK2QoZSwwKTp0KSwxO2lmKGE9MCx0PSIiPT09dD8iLiI6dCsiOiIsQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7bz1lW3NdO3ZhciB1PXQrZChvLHMpO2ErPWYobyx1LG4saSl9ZWxzZSBpZihudWxsPT09ZXx8InVuZGVmaW5lZCI9PT10eXBlb2YgZT91PW51bGw6KHU9RiYmZVtGXXx8ZVsiQEBpdGVyYXRvciJdLHU9ImZ1bmN0aW9uIj09PXR5cGVvZiB1P3U6bnVsbCksImZ1bmN0aW9uIj09PXR5cGVvZiB1KWZvcihlPXUuY2FsbChlKSxzPTA7IShvPWUubmV4dCgpKS5kb25lOylvPW8udmFsdWUsdT10K2QobyxzKyspLGErPWYobyx1LG4saSk7ZWxzZSJvYmplY3QiPT09byYmKG49IiIrZSxyKCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PT1uPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOm4sIiIpKTtyZXR1cm4gYX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPWUua2V5P2MoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIGgoZSx0KXtlLmZ1bmMuY2FsbChlLmNvbnRleHQsdCxlLmNvdW50KyspfWZ1bmN0aW9uIG0oZSx0LG4pe3ZhciByPWUucmVzdWx0LGk9ZS5rZXlQcmVmaXg7ZT1lLmZ1bmMuY2FsbChlLmNvbnRleHQsdCxlLmNvdW50KyspLEFycmF5LmlzQXJyYXkoZSk/ZyhlLHIsbix4LnRoYXRSZXR1cm5zQXJndW1lbnQpOm51bGwhPWUmJih1KGUpJiYodD1pKyghZS5rZXl8fHQmJnQua2V5PT09ZS5rZXk/IiI6KCIiK2Uua2V5KS5yZXBsYWNlKGosIiQmLyIpKyIvIikrbixlPXskJHR5cGVvZjpFLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn0pLHIucHVzaChlKSl9ZnVuY3Rpb24gZyhlLHQsbixyLGkpe3ZhciBvPSIiO251bGwhPW4mJihvPSgiIituKS5yZXBsYWNlKGosIiQmLyIpKyIvIiksdD1sKHQsbyxyLGkpLG51bGw9PWV8fGYoZSwiIixtLHQpLHAodCl9dmFyIHk9big1NCksdj1uKDk5KSxiPW4oMTUyKSx4PW4oMTAwKSxDPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLEU9Qz9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsRD1DP1N5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpOjYwMTA2LHc9Qz9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LFM9Qz9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LGs9Qz9TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpOjYwMTE0LEE9Qz9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LF89Qz9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAsVD1DP1N5bWJvbC5mb3IoInJlYWN0LmFzeW5jX21vZGUiKTo2MDExMSxPPUM/U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKTo2MDExMjtDJiZTeW1ib2wuZm9yKCJyZWFjdC50aW1lb3V0Iik7dmFyIEY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixOPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fTtpLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LGkucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7Im9iamVjdCIhPT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9PXR5cGVvZiBlJiZudWxsIT1lJiZyKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9LGkucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfSxvLnByb3RvdHlwZT1pLnByb3RvdHlwZTt2YXIgST1hLnByb3RvdHlwZT1uZXcgbztJLmNvbnN0cnVjdG9yPWEseShJLGkucHJvdG90eXBlKSxJLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBMPXtjdXJyZW50Om51bGx9LFA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxNPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH0saj0vXC8rL2csUj1bXSxCPXtDaGlsZHJlbjp7bWFwOmZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPVtdO3JldHVybiBnKGUscixudWxsLHQsbikscn0sZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt0PWwobnVsbCxudWxsLHQsbiksbnVsbD09ZXx8ZihlLCIiLGgsdCkscCh0KX0sY291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/MDpmKGUsIiIseC50aGF0UmV0dXJuc051bGwsbnVsbCl9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGcoZSx0LG51bGwseC50aGF0UmV0dXJuc0FyZ3VtZW50KSx0fSxvbmx5OmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpfHxyKCIxNDMiKSxlfX0sY3JlYXRlUmVmOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LENvbXBvbmVudDppLFB1cmVDb21wb25lbnQ6YSxjcmVhdGVDb250ZXh0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLGU9eyQkdHlwZW9mOl8sX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2RlZmF1bHRWYWx1ZTplLF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF9jaGFuZ2VkQml0czowLF9jaGFuZ2VkQml0czI6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOkEsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpPLHJlbmRlcjplfX0sRnJhZ21lbnQ6dyxTdHJpY3RNb2RlOlMsdW5zdGFibGVfQXN5bmNNb2RlOlQsdW5zdGFibGVfUHJvZmlsZXI6ayxjcmVhdGVFbGVtZW50OnMsY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGUsdCxuKXsobnVsbD09PWV8fHZvaWQgMD09PWUpJiZyKCIyNjciLGUpO3ZhciBpPXZvaWQgMCxvPXkoe30sZS5wcm9wcyksYT1lLmtleSxzPWUucmVmLHU9ZS5fb3duZXI7aWYobnVsbCE9dCl7dm9pZCAwIT09dC5yZWYmJihzPXQucmVmLHU9TC5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKGE9IiIrdC5rZXkpO3ZhciBjPXZvaWQgMDtlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJihjPWUudHlwZS5kZWZhdWx0UHJvcHMpO2ZvcihpIGluIHQpUC5jYWxsKHQsaSkmJiFNLmhhc093blByb3BlcnR5KGkpJiYob1tpXT12b2lkIDA9PT10W2ldJiZ2b2lkIDAhPT1jP2NbaV06dFtpXSl9aWYoMT09PShpPWFyZ3VtZW50cy5sZW5ndGgtMikpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxpKXtjPUFycmF5KGkpO2Zvcih2YXIgbD0wO2w8aTtsKyspY1tsXT1hcmd1bWVudHNbbCsyXTtvLmNoaWxkcmVuPWN9cmV0dXJueyQkdHlwZW9mOkUsdHlwZTplLnR5cGUsa2V5OmEscmVmOnMscHJvcHM6byxfb3duZXI6dX19LGNyZWF0ZUZhY3Rvcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9cy5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LGlzVmFsaWRFbGVtZW50OnUsdmVyc2lvbjoiMTYuNC4wIixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6TCxhc3NpZ246eX19LCQ9e2RlZmF1bHQ6Qn0sVT0kJiZCfHwkO2UuZXhwb3J0cz1VLmRlZmF1bHQ/VS5kZWZhdWx0OlV9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xLG49Imh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7SXIoITEsIk1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgJXMgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiAiLG4pfWZ1bmN0aW9uIGkoZSx0LG4scixpLG8sYSxzLHUpe3RoaXMuX2hhc0NhdWdodEVycm9yPSExLHRoaXMuX2NhdWdodEVycm9yPW51bGw7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXt0LmFwcGx5KG4sYyl9Y2F0Y2goZSl7dGhpcy5fY2F1Z2h0RXJyb3I9ZSx0aGlzLl9oYXNDYXVnaHRFcnJvcj0hMH19ZnVuY3Rpb24gbygpe2lmKHpyLl9oYXNSZXRocm93RXJyb3Ipe3ZhciBlPXpyLl9yZXRocm93RXJyb3I7dGhyb3cgenIuX3JldGhyb3dFcnJvcj1udWxsLHpyLl9oYXNSZXRocm93RXJyb3I9ITEsZX19ZnVuY3Rpb24gYSgpe2lmKEdyKWZvcih2YXIgZSBpbiBWcil7dmFyIHQ9VnJbZV0sbj1Hci5pbmRleE9mKGUpO2lmKC0xPG58fHIoIjk2IixlKSwhcXJbbl0pe3QuZXh0cmFjdEV2ZW50c3x8cigiOTciLGUpLHFyW25dPXQsbj10LmV2ZW50VHlwZXM7Zm9yKHZhciBpIGluIG4pe3ZhciBvPXZvaWQgMCxhPW5baV0sdT10LGM9aTtIci5oYXNPd25Qcm9wZXJ0eShjKSYmcigiOTkiLGMpLEhyW2NdPWE7dmFyIGw9YS5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztpZihsKXtmb3IobyBpbiBsKWwuaGFzT3duUHJvcGVydHkobykmJnMobFtvXSx1LGMpO289ITB9ZWxzZSBhLnJlZ2lzdHJhdGlvbk5hbWU/KHMoYS5yZWdpc3RyYXRpb25OYW1lLHUsYyksbz0hMCk6bz0hMTtvfHxyKCI5OCIsaSxlKX19fX1mdW5jdGlvbiBzKGUsdCxuKXtXcltlXSYmcigiMTAwIixlKSxXcltlXT10LFFyW2VdPXQuZXZlbnRUeXBlc1tuXS5kZXBlbmRlbmNpZXN9ZnVuY3Rpb24gdShlKXtHciYmcigiMTAxIiksR3I9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSksYSgpfWZ1bmN0aW9uIGMoZSl7dmFyIHQsbj0hMTtmb3IodCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpe3ZhciBpPWVbdF07VnIuaGFzT3duUHJvcGVydHkodCkmJlZyW3RdPT09aXx8KFZyW3RdJiZyKCIxMDIiLHQpLFZyW3RdPWksbj0hMCl9biYmYSgpfWZ1bmN0aW9uIGwoZSx0LG4scil7dD1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IixlLmN1cnJlbnRUYXJnZXQ9WHIociksenIuaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHQsbix2b2lkIDAsZSksZS5jdXJyZW50VGFyZ2V0PW51bGx9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBudWxsPT10JiZyKCIzMCIpLG51bGw9PWU/dDpBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCk/KGUucHVzaC5hcHBseShlLHQpLGUpOihlLnB1c2godCksZSk6QXJyYXkuaXNBcnJheSh0KT9bZV0uY29uY2F0KHQpOltlLHRdfWZ1bmN0aW9uIGYoZSx0LG4pe0FycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKHQsbik6ZSYmdC5jYWxsKG4sZSl9ZnVuY3Rpb24gZChlLHQpe2lmKGUpe3ZhciBuPWUuX2Rpc3BhdGNoTGlzdGVuZXJzLHI9ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2krKylsKGUsdCxuW2ldLHJbaV0pO2Vsc2UgbiYmbChlLHQsbixyKTtlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGwsZS5pc1BlcnNpc3RlbnQoKXx8ZS5jb25zdHJ1Y3Rvci5yZWxlYXNlKGUpfX1mdW5jdGlvbiBoKGUpe3JldHVybiBkKGUsITApfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGQoZSwhMSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPUpyKG4pO2lmKCFpKXJldHVybiBudWxsO249aVt0XTtlOnN3aXRjaCh0KXtjYXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjooaT0haS5kaXNhYmxlZCl8fChlPWUudHlwZSxpPSEoImJ1dHRvbiI9PT1lfHwiaW5wdXQiPT09ZXx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZSkpLGU9IWk7YnJlYWsgZTtkZWZhdWx0OmU9ITF9cmV0dXJuIGU/bnVsbDoobiYmImZ1bmN0aW9uIiE9PXR5cGVvZiBuJiZyKCIyMzEiLHQsdHlwZW9mIG4pLG4pfWZ1bmN0aW9uIHkoZSx0KXtudWxsIT09ZSYmKFpyPXAoWnIsZSkpLGU9WnIsWnI9bnVsbCxlJiYodD9mKGUsaCk6ZihlLG0pLFpyJiZyKCI5NSIpLHpyLnJldGhyb3dDYXVnaHRFcnJvcigpKX1mdW5jdGlvbiB2KGUsdCxuLHIpe2Zvcih2YXIgaT1udWxsLG89MDtvPHFyLmxlbmd0aDtvKyspe3ZhciBhPXFyW29dO2EmJihhPWEuZXh0cmFjdEV2ZW50cyhlLHQsbixyKSkmJihpPXAoaSxhKSl9eShpLCExKX1mdW5jdGlvbiBiKGUpe2lmKGVbcmldKXJldHVybiBlW3JpXTtmb3IoOyFlW3JpXTspe2lmKCFlLnBhcmVudE5vZGUpcmV0dXJuIG51bGw7ZT1lLnBhcmVudE5vZGV9cmV0dXJuIGU9ZVtyaV0sNT09PWUudGFnfHw2PT09ZS50YWc/ZTpudWxsfWZ1bmN0aW9uIHgoZSl7aWYoNT09PWUudGFnfHw2PT09ZS50YWcpcmV0dXJuIGUuc3RhdGVOb2RlO3IoIjMzIil9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZVtpaV18fG51bGx9ZnVuY3Rpb24gRShlKXtkb3tlPWUucmV0dXJufXdoaWxlKGUmJjUhPT1lLnRhZyk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gRChlLHQsbil7Zm9yKHZhciByPVtdO2U7KXIucHVzaChlKSxlPUUoZSk7Zm9yKGU9ci5sZW5ndGg7MDxlLS07KXQocltlXSwiY2FwdHVyZWQiLG4pO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspdChyW2VdLCJidWJibGVkIixuKX1mdW5jdGlvbiB3KGUsdCxuKXsodD1nKGUsbi5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1t0XSkpJiYobi5fZGlzcGF0Y2hMaXN0ZW5lcnM9cChuLl9kaXNwYXRjaExpc3RlbmVycyx0KSxuLl9kaXNwYXRjaEluc3RhbmNlcz1wKG4uX2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX1mdW5jdGlvbiBTKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMmJkQoZS5fdGFyZ2V0SW5zdCx3LGUpfWZ1bmN0aW9uIGsoZSl7aWYoZSYmZS5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyl7dmFyIHQ9ZS5fdGFyZ2V0SW5zdDt0PXQ/RSh0KTpudWxsLEQodCx3LGUpfX1mdW5jdGlvbiBBKGUsdCxuKXtlJiZuJiZuLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUmJih0PWcoZSxuLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpKSYmKG4uX2Rpc3BhdGNoTGlzdGVuZXJzPXAobi5fZGlzcGF0Y2hMaXN0ZW5lcnMsdCksbi5fZGlzcGF0Y2hJbnN0YW5jZXM9cChuLl9kaXNwYXRjaEluc3RhbmNlcyxlKSl9ZnVuY3Rpb24gXyhlKXtlJiZlLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUmJkEoZS5fdGFyZ2V0SW5zdCxudWxsLGUpfWZ1bmN0aW9uIFQoZSl7ZihlLFMpfWZ1bmN0aW9uIE8oZSx0LG4scil7aWYobiYmcillOntmb3IodmFyIGk9bixvPXIsYT0wLHM9aTtzO3M9RShzKSlhKys7cz0wO2Zvcih2YXIgdT1vO3U7dT1FKHUpKXMrKztmb3IoOzA8YS1zOylpPUUoaSksYS0tO2Zvcig7MDxzLWE7KW89RShvKSxzLS07Zm9yKDthLS07KXtpZihpPT09b3x8aT09PW8uYWx0ZXJuYXRlKWJyZWFrIGU7aT1FKGkpLG89RShvKX1pPW51bGx9ZWxzZSBpPW51bGw7Zm9yKG89aSxpPVtdO24mJm4hPT1vJiYobnVsbD09PShhPW4uYWx0ZXJuYXRlKXx8YSE9PW8pOylpLnB1c2gobiksbj1FKG4pO2ZvcihuPVtdO3ImJnIhPT1vJiYobnVsbD09PShhPXIuYWx0ZXJuYXRlKXx8YSE9PW8pOyluLnB1c2gocikscj1FKHIpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspQShpW3JdLCJidWJibGVkIixlKTtmb3IoZT1uLmxlbmd0aDswPGUtLTspQShuW2VdLCJjYXB0dXJlZCIsdCl9ZnVuY3Rpb24gRihlLHQpe3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5bIldlYmtpdCIrZV09IndlYmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3QsblsibXMiK2VdPSJNUyIrdCxuWyJPIitlXT0ibyIrdC50b0xvd2VyQ2FzZSgpLG59ZnVuY3Rpb24gTihlKXtpZih1aVtlXSlyZXR1cm4gdWlbZV07aWYoIXNpW2VdKXJldHVybiBlO3ZhciB0LG49c2lbZV07Zm9yKHQgaW4gbilpZihuLmhhc093blByb3BlcnR5KHQpJiZ0IGluIGNpKXJldHVybiB1aVtlXT1uW3RdO3JldHVybiBlfWZ1bmN0aW9uIEkoKXtyZXR1cm4hbWkmJlByLmNhblVzZURPTSYmKG1pPSJ0ZXh0Q29udGVudCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/InRleHRDb250ZW50IjoiaW5uZXJUZXh0IiksbWl9ZnVuY3Rpb24gTCgpe2lmKGdpLl9mYWxsYmFja1RleHQpcmV0dXJuIGdpLl9mYWxsYmFja1RleHQ7dmFyIGUsdCxuPWdpLl9zdGFydFRleHQscj1uLmxlbmd0aCxpPVAoKSxvPWkubGVuZ3RoO2ZvcihlPTA7ZTxyJiZuW2VdPT09aVtlXTtlKyspO3ZhciBhPXItZTtmb3IodD0xO3Q8PWEmJm5bci10XT09PWlbby10XTt0KyspO3JldHVybiBnaS5fZmFsbGJhY2tUZXh0PWkuc2xpY2UoZSwxPHQ/MS10OnZvaWQgMCksZ2kuX2ZhbGxiYWNrVGV4dH1mdW5jdGlvbiBQKCl7cmV0dXJuInZhbHVlImluIGdpLl9yb290P2dpLl9yb290LnZhbHVlOmdpLl9yb290W0koKV19ZnVuY3Rpb24gTShlLHQsbixyKXt0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMubmF0aXZlRXZlbnQ9bixlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgaSBpbiBlKWUuaGFzT3duUHJvcGVydHkoaSkmJigodD1lW2ldKT90aGlzW2ldPXQobik6InRhcmdldCI9PT1pP3RoaXMudGFyZ2V0PXI6dGhpc1tpXT1uW2ldKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPW4uZGVmYXVsdFByZXZlbnRlZD9uLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1uLnJldHVyblZhbHVlKT9qci50aGF0UmV0dXJuc1RydWU6anIudGhhdFJldHVybnNGYWxzZSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWpyLnRoYXRSZXR1cm5zRmFsc2UsdGhpc31mdW5jdGlvbiBqKGUsdCxuLHIpe2lmKHRoaXMuZXZlbnRQb29sLmxlbmd0aCl7dmFyIGk9dGhpcy5ldmVudFBvb2wucG9wKCk7cmV0dXJuIHRoaXMuY2FsbChpLGUsdCxuLHIpLGl9cmV0dXJuIG5ldyB0aGlzKGUsdCxuLHIpfWZ1bmN0aW9uIFIoZSl7ZSBpbnN0YW5jZW9mIHRoaXN8fHIoIjIyMyIpLGUuZGVzdHJ1Y3RvcigpLDEwPnRoaXMuZXZlbnRQb29sLmxlbmd0aCYmdGhpcy5ldmVudFBvb2wucHVzaChlKX1mdW5jdGlvbiBCKGUpe2UuZXZlbnRQb29sPVtdLGUuZ2V0UG9vbGVkPWosZS5yZWxlYXNlPVJ9ZnVuY3Rpb24gJChlLHQpe3N3aXRjaChlKXtjYXNlImtleXVwIjpyZXR1cm4tMSE9PUNpLmluZGV4T2YodC5rZXlDb2RlKTtjYXNlImtleWRvd24iOnJldHVybiAyMjkhPT10LmtleUNvZGU7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiYmx1ciI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gVShlKXtyZXR1cm4gZT1lLmRldGFpbCwib2JqZWN0Ij09PXR5cGVvZiBlJiYiZGF0YSJpbiBlP2UuZGF0YTpudWxsfWZ1bmN0aW9uIHooZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFUodCk7Y2FzZSJrZXlwcmVzcyI6cmV0dXJuIDMyIT09dC53aGljaD9udWxsOihfaT0hMCxraSk7Y2FzZSJ0ZXh0SW5wdXQiOnJldHVybiBlPXQuZGF0YSxlPT09a2kmJl9pP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBHKGUsdCl7aWYoVGkpcmV0dXJuImNvbXBvc2l0aW9uZW5kIj09PWV8fCFFaSYmJChlLHQpPyhlPUwoKSxnaS5fcm9vdD1udWxsLGdpLl9zdGFydFRleHQ9bnVsbCxnaS5fZmFsbGJhY2tUZXh0PW51bGwsVGk9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFNpP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFYoZSl7aWYoZT1ZcihlKSl7RmkmJiJmdW5jdGlvbiI9PT10eXBlb2YgRmkucmVzdG9yZUNvbnRyb2xsZWRTdGF0ZXx8cigiMTk0Iik7dmFyIHQ9SnIoZS5zdGF0ZU5vZGUpO0ZpLnJlc3RvcmVDb250cm9sbGVkU3RhdGUoZS5zdGF0ZU5vZGUsZS50eXBlLHQpfX1mdW5jdGlvbiBxKGUpe0lpP0xpP0xpLnB1c2goZSk6TGk9W2VdOklpPWV9ZnVuY3Rpb24gSCgpe3JldHVybiBudWxsIT09SWl8fG51bGwhPT1MaX1mdW5jdGlvbiBXKCl7aWYoSWkpe3ZhciBlPUlpLHQ9TGk7aWYoTGk9SWk9bnVsbCxWKGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylWKHRbZV0pfX1mdW5jdGlvbiBRKGUsdCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gSyhlLHQsbil7cmV0dXJuIGUodCxuKX1mdW5jdGlvbiBKKCl7fWZ1bmN0aW9uIFkoZSx0KXtpZihNaSlyZXR1cm4gZSh0KTtNaT0hMDt0cnl7cmV0dXJuIFEoZSx0KX1maW5hbGx5e01pPSExLEgoKSYmKEooKSxXKCkpfX1mdW5jdGlvbiBYKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dD8hIWppW2UudHlwZV06InRleHRhcmVhIj09PXR9ZnVuY3Rpb24gWihlKXtyZXR1cm4gZT1lLnRhcmdldHx8d2luZG93LGUuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJihlPWUuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLDM9PT1lLm5vZGVUeXBlP2UucGFyZW50Tm9kZTplfWZ1bmN0aW9uIGVlKGUsdCl7cmV0dXJuISghUHIuY2FuVXNlRE9NfHx0JiYhKCJhZGRFdmVudExpc3RlbmVyImluIGRvY3VtZW50KSkmJihlPSJvbiIrZSx0PWUgaW4gZG9jdW1lbnQsdHx8KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5zZXRBdHRyaWJ1dGUoZSwicmV0dXJuOyIpLHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiB0W2VdKSx0KX1mdW5jdGlvbiB0ZShlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJiJpbnB1dCI9PT1lLnRvTG93ZXJDYXNlKCkmJigiY2hlY2tib3giPT09dHx8InJhZGlvIj09PXQpfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PXRlKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJiJ1bmRlZmluZWQiIT09dHlwZW9mIG4mJiJmdW5jdGlvbiI9PT10eXBlb2Ygbi5nZXQmJiJmdW5jdGlvbiI9PT10eXBlb2Ygbi5zZXQpe3ZhciBpPW4uZ2V0LG89bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oZSl7cj0iIitlLG8uY2FsbCh0aGlzLGUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe3I9IiIrZX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gcmUoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPW5lKGUpKX1mdW5jdGlvbiBpZShlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPXRlKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSwoZT1yKSE9PW4mJih0LnNldFZhbHVlKGUpLCEwKX1mdW5jdGlvbiBvZShlKXtyZXR1cm4gbnVsbD09PWV8fCJ1bmRlZmluZWQiPT09dHlwZW9mIGU/bnVsbDooZT1KaSYmZVtKaV18fGVbIkBAaXRlcmF0b3IiXSwiZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpudWxsKX1mdW5jdGlvbiBhZShlKXt2YXIgdD1lLnR5cGU7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB0KXJldHVybiB0LmRpc3BsYXlOYW1lfHx0Lm5hbWU7aWYoInN0cmluZyI9PT10eXBlb2YgdClyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSBXaTpyZXR1cm4iQXN5bmNNb2RlIjtjYXNlIEhpOnJldHVybiJDb250ZXh0LkNvbnN1bWVyIjtjYXNlIHppOnJldHVybiJSZWFjdEZyYWdtZW50IjtjYXNlIFVpOnJldHVybiJSZWFjdFBvcnRhbCI7Y2FzZSBWaTpyZXR1cm4iUHJvZmlsZXIoIitlLnBlbmRpbmdQcm9wcy5pZCsiKSI7Y2FzZSBxaTpyZXR1cm4iQ29udGV4dC5Qcm92aWRlciI7Y2FzZSBHaTpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBLaTpyZXR1cm4iVGltZW91dCJ9aWYoIm9iamVjdCI9PT10eXBlb2YgdCYmbnVsbCE9PXQpc3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgUWk6cmV0dXJuIGU9dC5yZW5kZXIuZGlzcGxheU5hbWV8fHQucmVuZGVyLm5hbWV8fCIiLCIiIT09ZT8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBzZShlKXt2YXIgdD0iIjtkb3tlOnN3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Y2FzZSA1OnZhciBuPWUuX2RlYnVnT3duZXIscj1lLl9kZWJ1Z1NvdXJjZSxpPWFlKGUpLG89bnVsbDtuJiYobz1hZShuKSksbj1yLGk9IlxuICAgIGluICIrKGl8fCJVbmtub3duIikrKG4/IiAoYXQgIituLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFwvXS8sIiIpKyI6IituLmxpbmVOdW1iZXIrIikiOm8/IiAoY3JlYXRlZCBieSAiK28rIikiOiIiKTticmVhayBlO2RlZmF1bHQ6aT0iIn10Kz1pLGU9ZS5yZXR1cm59d2hpbGUoZSk7cmV0dXJuIHR9ZnVuY3Rpb24gdWUoZSl7cmV0dXJuISFaaS5oYXNPd25Qcm9wZXJ0eShlKXx8IVhpLmhhc093blByb3BlcnR5KGUpJiYoWWkudGVzdChlKT9aaVtlXT0hMDooWGlbZV09ITAsITEpKX1mdW5jdGlvbiBjZShlLHQsbixyKXtpZihudWxsIT09biYmMD09PW4udHlwZSlyZXR1cm4hMTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiFyJiYobnVsbCE9PW4/IW4uYWNjZXB0c0Jvb2xlYW5zOiJkYXRhLSIhPT0oZT1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KSkmJiJhcmlhLSIhPT1lKTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBsZShlLHQsbixyKXtpZihudWxsPT09dHx8InVuZGVmaW5lZCI9PT10eXBlb2YgdHx8Y2UoZSx0LG4scikpcmV0dXJuITA7aWYocilyZXR1cm4hMTtpZihudWxsIT09bilzd2l0Y2gobi50eXBlKXtjYXNlIDM6cmV0dXJuIXQ7Y2FzZSA0OnJldHVybiExPT09dDtjYXNlIDU6cmV0dXJuIGlzTmFOKHQpO2Nhc2UgNjpyZXR1cm4gaXNOYU4odCl8fDE+dH1yZXR1cm4hMX1mdW5jdGlvbiBwZShlLHQsbixyLGkpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT10fHwzPT09dHx8ND09PXQsdGhpcy5hdHRyaWJ1dGVOYW1lPXIsdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9aSx0aGlzLm11c3RVc2VQcm9wZXJ0eT1uLHRoaXMucHJvcGVydHlOYW1lPWUsdGhpcy50eXBlPXR9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX1mdW5jdGlvbiBkZShlLHQsbixyKXt2YXIgaT1lby5oYXNPd25Qcm9wZXJ0eSh0KT9lb1t0XTpudWxsOyhudWxsIT09aT8wPT09aS50eXBlOiFyJiYoMjx0Lmxlbmd0aCYmKCJvIj09PXRbMF18fCJPIj09PXRbMF0pJiYoIm4iPT09dFsxXXx8Ik4iPT09dFsxXSkpKXx8KGxlKHQsbixpLHIpJiYobj1udWxsKSxyfHxudWxsPT09aT91ZSh0KSYmKG51bGw9PT1uP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsIiIrbikpOmkubXVzdFVzZVByb3BlcnR5P2VbaS5wcm9wZXJ0eU5hbWVdPW51bGw9PT1uPzMhPT1pLnR5cGUmJiIiOm46KHQ9aS5hdHRyaWJ1dGVOYW1lLHI9aS5hdHRyaWJ1dGVOYW1lc3BhY2UsbnVsbD09PW4/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KGk9aS50eXBlLG49Mz09PWl8fDQ9PT1pJiYhMD09PW4/IiI6IiIrbixyP2Uuc2V0QXR0cmlidXRlTlMocix0LG4pOmUuc2V0QXR0cmlidXRlKHQsbikpKSl9ZnVuY3Rpb24gaGUoZSx0KXt2YXIgbj10LmNoZWNrZWQ7cmV0dXJuIE1yKHt9LHQse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPW4/bjplLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiBtZShlLHQpe3ZhciBuPW51bGw9PXQuZGVmYXVsdFZhbHVlPyIiOnQuZGVmYXVsdFZhbHVlLHI9bnVsbCE9dC5jaGVja2VkP3QuY2hlY2tlZDp0LmRlZmF1bHRDaGVja2VkO249eGUobnVsbCE9dC52YWx1ZT90LnZhbHVlOm4pLGUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6cixpbml0aWFsVmFsdWU6bixjb250cm9sbGVkOiJjaGVja2JveCI9PT10LnR5cGV8fCJyYWRpbyI9PT10LnR5cGU/bnVsbCE9dC5jaGVja2VkOm51bGwhPXQudmFsdWV9fWZ1bmN0aW9uIGdlKGUsdCl7bnVsbCE9KHQ9dC5jaGVja2VkKSYmZGUoZSwiY2hlY2tlZCIsdCwhMSl9ZnVuY3Rpb24geWUoZSx0KXtnZShlLHQpO3ZhciBuPXhlKHQudmFsdWUpO251bGwhPW4mJigibnVtYmVyIj09PXQudHlwZT8oMD09PW4mJiIiPT09ZS52YWx1ZXx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKSksdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9iZShlLHQudHlwZSxuKTp0Lmhhc093blByb3BlcnR5KCJkZWZhdWx0VmFsdWUiKSYmYmUoZSx0LnR5cGUseGUodC5kZWZhdWx0VmFsdWUpKSxudWxsPT10LmNoZWNrZWQmJm51bGwhPXQuZGVmYXVsdENoZWNrZWQmJihlLmRlZmF1bHRDaGVja2VkPSEhdC5kZWZhdWx0Q2hlY2tlZCl9ZnVuY3Rpb24gdmUoZSx0KXsodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpJiYoIiI9PT1lLnZhbHVlJiYoZS52YWx1ZT0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSxlLmRlZmF1bHRWYWx1ZT0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSx0PWUubmFtZSwiIiE9PXQmJihlLm5hbWU9IiIpLGUuZGVmYXVsdENoZWNrZWQ9IWUuZGVmYXVsdENoZWNrZWQsZS5kZWZhdWx0Q2hlY2tlZD0hZS5kZWZhdWx0Q2hlY2tlZCwiIiE9PXQmJihlLm5hbWU9dCl9ZnVuY3Rpb24gYmUoZSx0LG4peyJudW1iZXIiPT09dCYmZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lfHwobnVsbD09bj9lLmRlZmF1bHRWYWx1ZT0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmUuZGVmYXVsdFZhbHVlIT09IiIrbiYmKGUuZGVmYXVsdFZhbHVlPSIiK24pKX1mdW5jdGlvbiB4ZShlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOmNhc2Uib2JqZWN0IjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIiJ9fWZ1bmN0aW9uIENlKGUsdCxuKXtyZXR1cm4gZT1NLmdldFBvb2xlZChuby5jaGFuZ2UsZSx0LG4pLGUudHlwZT0iY2hhbmdlIixxKG4pLFQoZSksZX1mdW5jdGlvbiBFZShlKXt5KGUsITEpfWZ1bmN0aW9uIERlKGUpe2lmKGllKHgoZSkpKXJldHVybiBlfWZ1bmN0aW9uIHdlKGUsdCl7aWYoImNoYW5nZSI9PT1lKXJldHVybiB0fWZ1bmN0aW9uIFNlKCl7cm8mJihyby5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsa2UpLGlvPXJvPW51bGwpfWZ1bmN0aW9uIGtlKGUpeyJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSYmRGUoaW8pJiYoZT1DZShpbyxlLFooZSkpLFkoRWUsZSkpfWZ1bmN0aW9uIEFlKGUsdCxuKXsiZm9jdXMiPT09ZT8oU2UoKSxybz10LGlvPW4scm8uYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGtlKSk6ImJsdXIiPT09ZSYmU2UoKX1mdW5jdGlvbiBfZShlKXtpZigic2VsZWN0aW9uY2hhbmdlIj09PWV8fCJrZXl1cCI9PT1lfHwia2V5ZG93biI9PT1lKXJldHVybiBEZShpbyl9ZnVuY3Rpb24gVGUoZSx0KXtpZigiY2xpY2siPT09ZSlyZXR1cm4gRGUodCl9ZnVuY3Rpb24gT2UoZSx0KXtpZigiaW5wdXQiPT09ZXx8ImNoYW5nZSI9PT1lKXJldHVybiBEZSh0KX1mdW5jdGlvbiBGZShlKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9dW9bZV0pJiYhIXRbZV19ZnVuY3Rpb24gTmUoKXtyZXR1cm4gRmV9ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZTtpZihlLmFsdGVybmF0ZSlmb3IoO3QucmV0dXJuOyl0PXQucmV0dXJuO2Vsc2V7aWYoMCE9PSgyJnQuZWZmZWN0VGFnKSlyZXR1cm4gMTtmb3IoO3QucmV0dXJuOylpZih0PXQucmV0dXJuLDAhPT0oMiZ0LmVmZmVjdFRhZykpcmV0dXJuIDF9cmV0dXJuIDM9PT10LnRhZz8yOjN9ZnVuY3Rpb24gTGUoZSl7MiE9PUllKGUpJiZyKCIxODgiKX1mdW5jdGlvbiBQZShlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZighdClyZXR1cm4gdD1JZShlKSwzPT09dCYmcigiMTg4IiksMT09PXQ/bnVsbDplO2Zvcih2YXIgbj1lLGk9dDs7KXt2YXIgbz1uLnJldHVybixhPW8/by5hbHRlcm5hdGU6bnVsbDtpZighb3x8IWEpYnJlYWs7aWYoby5jaGlsZD09PWEuY2hpbGQpe2Zvcih2YXIgcz1vLmNoaWxkO3M7KXtpZihzPT09bilyZXR1cm4gTGUobyksZTtpZihzPT09aSlyZXR1cm4gTGUobyksdDtzPXMuc2libGluZ31yKCIxODgiKX1pZihuLnJldHVybiE9PWkucmV0dXJuKW49byxpPWE7ZWxzZXtzPSExO2Zvcih2YXIgdT1vLmNoaWxkO3U7KXtpZih1PT09bil7cz0hMCxuPW8saT1hO2JyZWFrfWlmKHU9PT1pKXtzPSEwLGk9byxuPWE7YnJlYWt9dT11LnNpYmxpbmd9aWYoIXMpe2Zvcih1PWEuY2hpbGQ7dTspe2lmKHU9PT1uKXtzPSEwLG49YSxpPW87YnJlYWt9aWYodT09PWkpe3M9ITAsaT1hLG49bzticmVha311PXUuc2libGluZ31zfHxyKCIxODkiKX19bi5hbHRlcm5hdGUhPT1pJiZyKCIxOTAiKX1yZXR1cm4gMyE9PW4udGFnJiZyKCIxODgiKSxuLnN0YXRlTm9kZS5jdXJyZW50PT09bj9lOnR9ZnVuY3Rpb24gTWUoZSl7aWYoIShlPVBlKGUpKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZTs7KXtpZig1PT09dC50YWd8fDY9PT10LnRhZylyZXR1cm4gdDtpZih0LmNoaWxkKXQuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2Vsc2V7aWYodD09PWUpYnJlYWs7Zm9yKDshdC5zaWJsaW5nOyl7aWYoIXQucmV0dXJufHx0LnJldHVybj09PWUpcmV0dXJuIG51bGw7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqZShlKXtpZighKGU9UGUoZSkpKXJldHVybiBudWxsO2Zvcih2YXIgdD1lOzspe2lmKDU9PT10LnRhZ3x8Nj09PXQudGFnKXJldHVybiB0O2lmKHQuY2hpbGQmJjQhPT10LnRhZyl0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7IXQuc2libGluZzspe2lmKCF0LnJldHVybnx8dC5yZXR1cm49PT1lKXJldHVybiBudWxsO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuIG51bGx9ZnVuY3Rpb24gUmUoZSl7dmFyIHQ9ZS5rZXlDb2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0oZT1lLmNoYXJDb2RlKSYmMTM9PT10JiYoZT0xMyk6ZT10LDEwPT09ZSYmKGU9MTMpLDMyPD1lfHwxMz09PWU/ZTowfWZ1bmN0aW9uIEJlKGUsdCl7dmFyIG49ZVswXTtlPWVbMV07dmFyIHI9Im9uIisoZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSkpO3Q9e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOnIsY2FwdHVyZWQ6cisiQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbbl0saXNJbnRlcmFjdGl2ZTp0fSxTb1tlXT10LGtvW25dPXR9ZnVuY3Rpb24gJGUoZSl7dmFyIHQ9ZS50YXJnZXRJbnN0O2Rve2lmKCF0KXtlLmFuY2VzdG9ycy5wdXNoKHQpO2JyZWFrfXZhciBuO2ZvcihuPXQ7bi5yZXR1cm47KW49bi5yZXR1cm47aWYoIShuPTMhPT1uLnRhZz9udWxsOm4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pKWJyZWFrO2UuYW5jZXN0b3JzLnB1c2godCksdD1iKG4pfXdoaWxlKHQpO2ZvcihuPTA7bjxlLmFuY2VzdG9ycy5sZW5ndGg7bisrKXQ9ZS5hbmNlc3RvcnNbbl0sdihlLnRvcExldmVsVHlwZSx0LGUubmF0aXZlRXZlbnQsWihlLm5hdGl2ZUV2ZW50KSl9ZnVuY3Rpb24gVWUoZSl7T289ISFlfWZ1bmN0aW9uIHplKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIG49KF9vKGUpP1ZlOnFlKS5iaW5kKG51bGwsZSk7dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9ZnVuY3Rpb24gR2UoZSx0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgbj0oX28oZSk/VmU6cWUpLmJpbmQobnVsbCxlKTt0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCEwKX1mdW5jdGlvbiBWZShlLHQpe0socWUsZSx0KX1mdW5jdGlvbiBxZShlLHQpe2lmKE9vKXt2YXIgbj1aKHQpO2lmKG49YihuKSxudWxsPT09bnx8Im51bWJlciIhPT10eXBlb2Ygbi50YWd8fDI9PT1JZShuKXx8KG49bnVsbCksVG8ubGVuZ3RoKXt2YXIgcj1Uby5wb3AoKTtyLnRvcExldmVsVHlwZT1lLHIubmF0aXZlRXZlbnQ9dCxyLnRhcmdldEluc3Q9bixlPXJ9ZWxzZSBlPXt0b3BMZXZlbFR5cGU6ZSxuYXRpdmVFdmVudDp0LHRhcmdldEluc3Q6bixhbmNlc3RvcnM6W119O3RyeXtZKCRlLGUpfWZpbmFsbHl7ZS50b3BMZXZlbFR5cGU9bnVsbCxlLm5hdGl2ZUV2ZW50PW51bGwsZS50YXJnZXRJbnN0PW51bGwsZS5hbmNlc3RvcnMubGVuZ3RoPTAsMTA+VG8ubGVuZ3RoJiZUby5wdXNoKGUpfX19ZnVuY3Rpb24gSGUoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLExvKXx8KGVbTG9dPUlvKyssTm9bZVtMb11dPXt9KSxOb1tlW0xvXV19ZnVuY3Rpb24gV2UoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFFlKGUsdCl7dmFyIG49V2UoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYoMz09PW4ubm9kZVR5cGUpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49V2Uobil9fWZ1bmN0aW9uIEtlKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYidGV4dCI9PT1lLnR5cGV8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gSmUoZSx0KXtpZigkb3x8bnVsbD09am98fGpvIT09UnIoKSlyZXR1cm4gbnVsbDt2YXIgbj1qbztyZXR1cm4ic2VsZWN0aW9uU3RhcnQiaW4gbiYmS2Uobik/bj17c3RhcnQ6bi5zZWxlY3Rpb25TdGFydCxlbmQ6bi5zZWxlY3Rpb25FbmR9OndpbmRvdy5nZXRTZWxlY3Rpb24/KG49d2luZG93LmdldFNlbGVjdGlvbigpLG49e2FuY2hvck5vZGU6bi5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpuLmFuY2hvck9mZnNldCxmb2N1c05vZGU6bi5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6bi5mb2N1c09mZnNldH0pOm49dm9pZCAwLEJvJiZCcihCbyxuKT9udWxsOihCbz1uLGU9TS5nZXRQb29sZWQoTW8uc2VsZWN0LFJvLGUsdCksZS50eXBlPSJzZWxlY3QiLGUudGFyZ2V0PWpvLFQoZSksZSl9ZnVuY3Rpb24gWWUoZSl7dmFyIHQ9IiI7cmV0dXJuIExyLkNoaWxkcmVuLmZvckVhY2goZSxmdW5jdGlvbihlKXtudWxsPT1lfHwic3RyaW5nIiE9PXR5cGVvZiBlJiYibnVtYmVyIiE9PXR5cGVvZiBlfHwodCs9ZSl9KSx0fWZ1bmN0aW9uIFhlKGUsdCl7cmV0dXJuIGU9TXIoe2NoaWxkcmVuOnZvaWQgMH0sdCksKHQ9WWUodC5jaGlsZHJlbikpJiYoZS5jaGlsZHJlbj10KSxlfWZ1bmN0aW9uIFplKGUsdCxuLHIpe2lmKGU9ZS5vcHRpb25zLHQpe3Q9e307Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspdFsiJCIrbltpXV09ITA7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpPXQuaGFzT3duUHJvcGVydHkoIiQiK2Vbbl0udmFsdWUpLGVbbl0uc2VsZWN0ZWQhPT1pJiYoZVtuXS5zZWxlY3RlZD1pKSxpJiZyJiYoZVtuXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Zm9yKG49IiIrbix0PW51bGwsaT0wO2k8ZS5sZW5ndGg7aSsrKXtpZihlW2ldLnZhbHVlPT09bilyZXR1cm4gZVtpXS5zZWxlY3RlZD0hMCx2b2lkKHImJihlW2ldLmRlZmF1bHRTZWxlY3RlZD0hMCkpO251bGwhPT10fHxlW2ldLmRpc2FibGVkfHwodD1lW2ldKX1udWxsIT09dCYmKHQuc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBldChlLHQpe3ZhciBuPXQudmFsdWU7ZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6bnVsbCE9bj9uOnQuZGVmYXVsdFZhbHVlLHdhc011bHRpcGxlOiEhdC5tdWx0aXBsZX19ZnVuY3Rpb24gdHQoZSx0KXtyZXR1cm4gbnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmcigiOTEiKSxNcih7fSx0LHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjoiIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlfSl9ZnVuY3Rpb24gbnQoZSx0KXt2YXIgbj10LnZhbHVlO251bGw9PW4mJihuPXQuZGVmYXVsdFZhbHVlLHQ9dC5jaGlsZHJlbixudWxsIT10JiYobnVsbCE9biYmcigiOTIiKSxBcnJheS5pc0FycmF5KHQpJiYoMT49dC5sZW5ndGh8fHIoIjkzIiksdD10WzBdKSxuPSIiK3QpLG51bGw9PW4mJihuPSIiKSksZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6IiIrbn19ZnVuY3Rpb24gcnQoZSx0KXt2YXIgbj10LnZhbHVlO251bGwhPW4mJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLG51bGw9PXQuZGVmYXVsdFZhbHVlJiYoZS5kZWZhdWx0VmFsdWU9bikpLG51bGwhPXQuZGVmYXVsdFZhbHVlJiYoZS5kZWZhdWx0VmFsdWU9dC5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIGl0KGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIG90KGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gYXQoZSx0KXtyZXR1cm4gbnVsbD09ZXx8Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09ZT9vdCh0KToiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPT09ZSYmImZvcmVpZ25PYmplY3QiPT09dD8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX1mdW5jdGlvbiBzdChlLHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJjM9PT1uLm5vZGVUeXBlKXJldHVybiB2b2lkKG4ubm9kZVZhbHVlPXQpfWUudGV4dENvbnRlbnQ9dH1mdW5jdGlvbiB1dChlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj0wPT09bi5pbmRleE9mKCItLSIpLGk9bixvPXRbbl07aT1udWxsPT1vfHwiYm9vbGVhbiI9PT10eXBlb2Ygb3x8IiI9PT1vPyIiOnJ8fCJudW1iZXIiIT09dHlwZW9mIG98fDA9PT1vfHxjYS5oYXNPd25Qcm9wZXJ0eShpKSYmY2FbaV0/KCIiK28pLnRyaW0oKTpvKyJweCIsImZsb2F0Ij09PW4mJihuPSJjc3NGbG9hdCIpLHI/ZS5zZXRQcm9wZXJ0eShuLGkpOmVbbl09aX19ZnVuY3Rpb24gY3QoZSx0LG4pe3QmJihwYVtlXSYmKG51bGwhPXQuY2hpbGRyZW58fG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpJiZyKCIxMzciLGUsbigpKSxudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYobnVsbCE9dC5jaGlsZHJlbiYmcigiNjAiKSwib2JqZWN0Ij09PXR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8fHIoIjYxIikpLG51bGwhPXQuc3R5bGUmJiJvYmplY3QiIT09dHlwZW9mIHQuc3R5bGUmJnIoIjYyIixuKCkpKX1mdW5jdGlvbiBsdChlLHQpe2lmKC0xPT09ZS5pbmRleE9mKCItIikpcmV0dXJuInN0cmluZyI9PT10eXBlb2YgdC5pcztzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBwdChlLHQpe2U9OT09PWUubm9kZVR5cGV8fDExPT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDt2YXIgbj1IZShlKTt0PVFyW3RdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKCFuLmhhc093blByb3BlcnR5KGkpfHwhbltpXSl7c3dpdGNoKGkpe2Nhc2Uic2Nyb2xsIjpHZSgic2Nyb2xsIixlKTticmVhaztjYXNlImZvY3VzIjpjYXNlImJsdXIiOkdlKCJmb2N1cyIsZSksR2UoImJsdXIiLGUpLG4uYmx1cj0hMCxuLmZvY3VzPSEwO2JyZWFrO2Nhc2UiY2FuY2VsIjpjYXNlImNsb3NlIjplZShpLCEwKSYmR2UoaSxlKTticmVhaztjYXNlImludmFsaWQiOmNhc2Uic3VibWl0IjpjYXNlInJlc2V0IjpicmVhaztkZWZhdWx0Oi0xPT09aGkuaW5kZXhPZihpKSYmemUoaSxlKX1uW2ldPSEwfX19ZnVuY3Rpb24gZnQoZSx0LG4scil7cmV0dXJuIG49OT09PW4ubm9kZVR5cGU/bjpuLm93bmVyRG9jdW1lbnQscj09PWFhLmh0bWwmJihyPW90KGUpKSxyPT09YWEuaHRtbD8ic2NyaXB0Ij09PWU/KGU9bi5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLmlubmVySFRNTD0iPHNjcmlwdD48XC9zY3JpcHQ+IixlPWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSk6ZT0ic3RyaW5nIj09PXR5cGVvZiB0LmlzP24uY3JlYXRlRWxlbWVudChlLHtpczp0LmlzfSk6bi5jcmVhdGVFbGVtZW50KGUpOmU9bi5jcmVhdGVFbGVtZW50TlMocixlKSxlfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuKDk9PT10Lm5vZGVUeXBlP3Q6dC5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShlKX1mdW5jdGlvbiBodChlLHQsbixyKXt2YXIgaT1sdCh0LG4pO3N3aXRjaCh0KXtjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOnplKCJsb2FkIixlKTt2YXIgbz1uO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihvPTA7bzxoaS5sZW5ndGg7bysrKXplKGhpW29dLGUpO289bjticmVhaztjYXNlInNvdXJjZSI6emUoImVycm9yIixlKSxvPW47YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6emUoImVycm9yIixlKSx6ZSgibG9hZCIsZSksbz1uO2JyZWFrO2Nhc2UiZm9ybSI6emUoInJlc2V0IixlKSx6ZSgic3VibWl0IixlKSxvPW47YnJlYWs7Y2FzZSJkZXRhaWxzIjp6ZSgidG9nZ2xlIixlKSxvPW47YnJlYWs7Y2FzZSJpbnB1dCI6bWUoZSxuKSxvPWhlKGUsbiksemUoImludmFsaWQiLGUpLHB0KHIsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJvcHRpb24iOm89WGUoZSxuKTticmVhaztjYXNlInNlbGVjdCI6ZXQoZSxuKSxvPU1yKHt9LG4se3ZhbHVlOnZvaWQgMH0pLHplKCJpbnZhbGlkIixlKSxwdChyLCJvbkNoYW5nZSIpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOm50KGUsbiksbz10dChlLG4pLHplKCJpbnZhbGlkIixlKSxwdChyLCJvbkNoYW5nZSIpO2JyZWFrO2RlZmF1bHQ6bz1ufWN0KHQsbyxmYSk7dmFyIGEscz1vO2ZvcihhIGluIHMpaWYocy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHU9c1thXTsic3R5bGUiPT09YT91dChlLHUsZmEpOiJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT1hP251bGwhPSh1PXU/dS5fX2h0bWw6dm9pZCAwKSYmdWEoZSx1KToiY2hpbGRyZW4iPT09YT8ic3RyaW5nIj09PXR5cGVvZiB1PygidGV4dGFyZWEiIT09dHx8IiIhPT11KSYmc3QoZSx1KToibnVtYmVyIj09PXR5cGVvZiB1JiZzdChlLCIiK3UpOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09YSYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1hJiYiYXV0b0ZvY3VzIiE9PWEmJihXci5oYXNPd25Qcm9wZXJ0eShhKT9udWxsIT11JiZwdChyLGEpOm51bGwhPXUmJmRlKGUsYSx1LGkpKX1zd2l0Y2godCl7Y2FzZSJpbnB1dCI6cmUoZSksdmUoZSxuKTticmVhaztjYXNlInRleHRhcmVhIjpyZShlKSxpdChlLG4pO2JyZWFrO2Nhc2Uib3B0aW9uIjpudWxsIT1uLnZhbHVlJiZlLnNldEF0dHJpYnV0ZSgidmFsdWUiLG4udmFsdWUpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLm11bHRpcGxlPSEhbi5tdWx0aXBsZSx0PW4udmFsdWUsbnVsbCE9dD9aZShlLCEhbi5tdWx0aXBsZSx0LCExKTpudWxsIT1uLmRlZmF1bHRWYWx1ZSYmWmUoZSwhIW4ubXVsdGlwbGUsbi5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6ImZ1bmN0aW9uIj09PXR5cGVvZiBvLm9uQ2xpY2smJihlLm9uY2xpY2s9anIpfX1mdW5jdGlvbiBtdChlLHQsbixyLGkpe3ZhciBvPW51bGw7c3dpdGNoKHQpe2Nhc2UiaW5wdXQiOm49aGUoZSxuKSxyPWhlKGUsciksbz1bXTticmVhaztjYXNlIm9wdGlvbiI6bj1YZShlLG4pLHI9WGUoZSxyKSxvPVtdO2JyZWFrO2Nhc2Uic2VsZWN0IjpuPU1yKHt9LG4se3ZhbHVlOnZvaWQgMH0pLHI9TXIoe30scix7dmFsdWU6dm9pZCAwfSksbz1bXTticmVhaztjYXNlInRleHRhcmVhIjpuPXR0KGUsbikscj10dChlLHIpLG89W107YnJlYWs7ZGVmYXVsdDoiZnVuY3Rpb24iIT09dHlwZW9mIG4ub25DbGljayYmImZ1bmN0aW9uIj09PXR5cGVvZiByLm9uQ2xpY2smJihlLm9uY2xpY2s9anIpfWN0KHQscixmYSksdD1lPXZvaWQgMDt2YXIgYT1udWxsO2ZvcihlIGluIG4paWYoIXIuaGFzT3duUHJvcGVydHkoZSkmJm4uaGFzT3duUHJvcGVydHkoZSkmJm51bGwhPW5bZV0paWYoInN0eWxlIj09PWUpe3ZhciBzPW5bZV07Zm9yKHQgaW4gcylzLmhhc093blByb3BlcnR5KHQpJiYoYXx8KGE9e30pLGFbdF09IiIpfWVsc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiIT09ZSYmImNoaWxkcmVuIiE9PWUmJiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09ZSYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1lJiYiYXV0b0ZvY3VzIiE9PWUmJihXci5oYXNPd25Qcm9wZXJ0eShlKT9vfHwobz1bXSk6KG89b3x8W10pLnB1c2goZSxudWxsKSk7Zm9yKGUgaW4gcil7dmFyIHU9cltlXTtpZihzPW51bGwhPW4/bltlXTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eShlKSYmdSE9PXMmJihudWxsIT11fHxudWxsIT1zKSlpZigic3R5bGUiPT09ZSlpZihzKXtmb3IodCBpbiBzKSFzLmhhc093blByb3BlcnR5KHQpfHx1JiZ1Lmhhc093blByb3BlcnR5KHQpfHwoYXx8KGE9e30pLGFbdF09IiIpO2Zvcih0IGluIHUpdS5oYXNPd25Qcm9wZXJ0eSh0KSYmc1t0XSE9PXVbdF0mJihhfHwoYT17fSksYVt0XT11W3RdKX1lbHNlIGF8fChvfHwobz1bXSksby5wdXNoKGUsYSkpLGE9dTtlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PWU/KHU9dT91Ll9faHRtbDp2b2lkIDAscz1zP3MuX19odG1sOnZvaWQgMCxudWxsIT11JiZzIT09dSYmKG89b3x8W10pLnB1c2goZSwiIit1KSk6ImNoaWxkcmVuIj09PWU/cz09PXV8fCJzdHJpbmciIT09dHlwZW9mIHUmJiJudW1iZXIiIT09dHlwZW9mIHV8fChvPW98fFtdKS5wdXNoKGUsIiIrdSk6InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyIhPT1lJiYic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiE9PWUmJihXci5oYXNPd25Qcm9wZXJ0eShlKT8obnVsbCE9dSYmcHQoaSxlKSxvfHxzPT09dXx8KG89W10pKToobz1vfHxbXSkucHVzaChlLHUpKX1yZXR1cm4gYSYmKG89b3x8W10pLnB1c2goInN0eWxlIixhKSxvfWZ1bmN0aW9uIGd0KGUsdCxuLHIsaSl7ImlucHV0Ij09PW4mJiJyYWRpbyI9PT1pLnR5cGUmJm51bGwhPWkubmFtZSYmZ2UoZSxpKSxsdChuLHIpLHI9bHQobixpKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rPTIpe3ZhciBhPXRbb10scz10W28rMV07InN0eWxlIj09PWE/dXQoZSxzLGZhKToiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPT09YT91YShlLHMpOiJjaGlsZHJlbiI9PT1hP3N0KGUscyk6ZGUoZSxhLHMscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnllKGUsaSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cnQoZSxpKTticmVhaztjYXNlInNlbGVjdCI6ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZT12b2lkIDAsdD1lLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhaS5tdWx0aXBsZSxuPWkudmFsdWUsbnVsbCE9bj9aZShlLCEhaS5tdWx0aXBsZSxuLCExKTp0IT09ISFpLm11bHRpcGxlJiYobnVsbCE9aS5kZWZhdWx0VmFsdWU/WmUoZSwhIWkubXVsdGlwbGUsaS5kZWZhdWx0VmFsdWUsITApOlplKGUsISFpLm11bHRpcGxlLGkubXVsdGlwbGU/W106IiIsITEpKX19ZnVuY3Rpb24geXQoZSx0LG4scixpKXtzd2l0Y2godCl7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0Ijp6ZSgibG9hZCIsZSk7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKHI9MDtyPGhpLmxlbmd0aDtyKyspemUoaGlbcl0sZSk7YnJlYWs7Y2FzZSJzb3VyY2UiOnplKCJlcnJvciIsZSk7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6emUoImVycm9yIixlKSx6ZSgibG9hZCIsZSk7YnJlYWs7Y2FzZSJmb3JtIjp6ZSgicmVzZXQiLGUpLHplKCJzdWJtaXQiLGUpO2JyZWFrO2Nhc2UiZGV0YWlscyI6emUoInRvZ2dsZSIsZSk7YnJlYWs7Y2FzZSJpbnB1dCI6bWUoZSxuKSx6ZSgiaW52YWxpZCIsZSkscHQoaSwib25DaGFuZ2UiKTticmVhaztjYXNlInNlbGVjdCI6ZXQoZSxuKSx6ZSgiaW52YWxpZCIsZSkscHQoaSwib25DaGFuZ2UiKTticmVhaztjYXNlInRleHRhcmVhIjpudChlLG4pLHplKCJpbnZhbGlkIixlKSxwdChpLCJvbkNoYW5nZSIpfWN0KHQsbixmYSkscj1udWxsO2Zvcih2YXIgbyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkobykpe3ZhciBhPW5bb107ImNoaWxkcmVuIj09PW8/InN0cmluZyI9PT10eXBlb2YgYT9lLnRleHRDb250ZW50IT09YSYmKHI9WyJjaGlsZHJlbiIsYV0pOiJudW1iZXIiPT09dHlwZW9mIGEmJmUudGV4dENvbnRlbnQhPT0iIithJiYocj1bImNoaWxkcmVuIiwiIithXSk6V3IuaGFzT3duUHJvcGVydHkobykmJm51bGwhPWEmJnB0KGksbyl9c3dpdGNoKHQpe2Nhc2UiaW5wdXQiOnJlKGUpLHZlKGUsbik7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cmUoZSksaXQoZSxuKTticmVhaztjYXNlInNlbGVjdCI6Y2FzZSJvcHRpb24iOmJyZWFrO2RlZmF1bHQ6ImZ1bmN0aW9uIj09PXR5cGVvZiBuLm9uQ2xpY2smJihlLm9uY2xpY2s9anIpfXJldHVybiByfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGUubm9kZVZhbHVlIT09dH1mdW5jdGlvbiBidChlLHQpe3N3aXRjaChlKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOnJldHVybiEhdC5hdXRvRm9jdXN9cmV0dXJuITF9ZnVuY3Rpb24geHQoZSx0KXtyZXR1cm4idGV4dGFyZWEiPT09ZXx8InN0cmluZyI9PT10eXBlb2YgdC5jaGlsZHJlbnx8Im51bWJlciI9PT10eXBlb2YgdC5jaGlsZHJlbnx8Im9iamVjdCI9PT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJiJzdHJpbmciPT09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfWZ1bmN0aW9uIEN0KGUpe2ZvcihlPWUubmV4dFNpYmxpbmc7ZSYmMSE9PWUubm9kZVR5cGUmJjMhPT1lLm5vZGVUeXBlOyllPWUubmV4dFNpYmxpbmc7cmV0dXJuIGV9ZnVuY3Rpb24gRXQoZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2UmJjEhPT1lLm5vZGVUeXBlJiYzIT09ZS5ub2RlVHlwZTspZT1lLm5leHRTaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIER0KGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIHd0KGUpezA+eGF8fChlLmN1cnJlbnQ9YmFbeGFdLGJhW3hhXT1udWxsLHhhLS0pfWZ1bmN0aW9uIFN0KGUsdCl7eGErKyxiYVt4YV09ZS5jdXJyZW50LGUuY3VycmVudD10fWZ1bmN0aW9uIGt0KGUpe3JldHVybiBfdChlKT9EYTpDYS5jdXJyZW50fWZ1bmN0aW9uIEF0KGUsdCl7dmFyIG49ZS50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gVXI7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgaSxvPXt9O2ZvcihpIGluIG4pb1tpXT10W2ldO3JldHVybiByJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PW8pLG99ZnVuY3Rpb24gX3QoZSl7cmV0dXJuIDI9PT1lLnRhZyYmbnVsbCE9ZS50eXBlLmNoaWxkQ29udGV4dFR5cGVzfWZ1bmN0aW9uIFR0KGUpe190KGUpJiYod3QoRWEsZSksd3QoQ2EsZSkpfWZ1bmN0aW9uIE90KGUpe3d0KEVhLGUpLHd0KENhLGUpfWZ1bmN0aW9uIEZ0KGUsdCxuKXtDYS5jdXJyZW50IT09VXImJnIoIjE2OCIpLFN0KENhLHQsZSksU3QoRWEsbixlKX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPWUuc3RhdGVOb2RlLGk9ZS50eXBlLmNoaWxkQ29udGV4dFR5cGVzO2lmKCJmdW5jdGlvbiIhPT10eXBlb2Ygbi5nZXRDaGlsZENvbnRleHQpcmV0dXJuIHQ7bj1uLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgbyBpbiBuKW8gaW4gaXx8cigiMTA4IixhZShlKXx8IlVua25vd24iLG8pO3JldHVybiBNcih7fSx0LG4pfWZ1bmN0aW9uIEl0KGUpe2lmKCFfdChlKSlyZXR1cm4hMTt2YXIgdD1lLnN0YXRlTm9kZTtyZXR1cm4gdD10JiZ0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxVcixEYT1DYS5jdXJyZW50LFN0KENhLHQsZSksU3QoRWEsRWEuY3VycmVudCxlKSwhMH1mdW5jdGlvbiBMdChlLHQpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKG58fHIoIjE2OSIpLHQpe3ZhciBpPU50KGUsRGEpO24uX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9aSx3dChFYSxlKSx3dChDYSxlKSxTdChDYSxpLGUpfWVsc2Ugd3QoRWEsZSk7U3QoRWEsdCxlKX1mdW5jdGlvbiBQdChlLHQsbixyKXt0aGlzLnRhZz1lLHRoaXMua2V5PW4sdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9cix0aGlzLmVmZmVjdFRhZz0wLHRoaXMubGFzdEVmZmVjdD10aGlzLmZpcnN0RWZmZWN0PXRoaXMubmV4dEVmZmVjdD1udWxsLHRoaXMuZXhwaXJhdGlvblRpbWU9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIE10KGUsdCxuKXt2YXIgcj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbD09PXI/KHI9bmV3IFB0KGUudGFnLHQsZS5rZXksZS5tb2RlKSxyLnR5cGU9ZS50eXBlLHIuc3RhdGVOb2RlPWUuc3RhdGVOb2RlLHIuYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9cik6KHIucGVuZGluZ1Byb3BzPXQsci5lZmZlY3RUYWc9MCxyLm5leHRFZmZlY3Q9bnVsbCxyLmZpcnN0RWZmZWN0PW51bGwsci5sYXN0RWZmZWN0PW51bGwpLHIuZXhwaXJhdGlvblRpbWU9bixyLmNoaWxkPWUuY2hpbGQsci5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxyLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLHIudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSxyLnNpYmxpbmc9ZS5zaWJsaW5nLHIuaW5kZXg9ZS5pbmRleCxyLnJlZj1lLnJlZixyfWZ1bmN0aW9uIGp0KGUsdCxuKXt2YXIgaT1lLnR5cGUsbz1lLmtleTtpZihlPWUucHJvcHMsImZ1bmN0aW9uIj09PXR5cGVvZiBpKXZhciBhPWkucHJvdG90eXBlJiZpLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PzI6MDtlbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIGkpYT01O2Vsc2Ugc3dpdGNoKGkpe2Nhc2Ugemk6cmV0dXJuIFJ0KGUuY2hpbGRyZW4sdCxuLG8pO2Nhc2UgV2k6YT0xMSx0fD0zO2JyZWFrO2Nhc2UgR2k6YT0xMSx0fD0yO2JyZWFrO2Nhc2UgVmk6cmV0dXJuIGk9bmV3IFB0KDE1LGUsbyw0fHQpLGkudHlwZT1WaSxpLmV4cGlyYXRpb25UaW1lPW4saTtjYXNlIEtpOmE9MTYsdHw9MjticmVhaztkZWZhdWx0OmU6e3N3aXRjaCgib2JqZWN0Ij09PXR5cGVvZiBpJiZudWxsIT09aT9pLiQkdHlwZW9mOm51bGwpe2Nhc2UgcWk6YT0xMzticmVhayBlO2Nhc2UgSGk6YT0xMjticmVhayBlO2Nhc2UgUWk6YT0xNDticmVhayBlO2RlZmF1bHQ6cigiMTMwIixudWxsPT1pP2k6dHlwZW9mIGksIiIpfWE9dm9pZCAwfX1yZXR1cm4gdD1uZXcgUHQoYSxlLG8sdCksdC50eXBlPWksdC5leHBpcmF0aW9uVGltZT1uLHR9ZnVuY3Rpb24gUnQoZSx0LG4scil7cmV0dXJuIGU9bmV3IFB0KDEwLGUscix0KSxlLmV4cGlyYXRpb25UaW1lPW4sZX1mdW5jdGlvbiBCdChlLHQsbil7cmV0dXJuIGU9bmV3IFB0KDYsZSxudWxsLHQpLGUuZXhwaXJhdGlvblRpbWU9bixlfWZ1bmN0aW9uICR0KGUsdCxuKXtyZXR1cm4gdD1uZXcgUHQoNCxudWxsIT09ZS5jaGlsZHJlbj9lLmNoaWxkcmVuOltdLGUua2V5LHQpLHQuZXhwaXJhdGlvblRpbWU9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH1mdW5jdGlvbiBVdChlLHQsbil7cmV0dXJuIHQ9bmV3IFB0KDMsbnVsbCxudWxsLHQ/MzowKSxlPXtjdXJyZW50OnQsY29udGFpbmVySW5mbzplLHBlbmRpbmdDaGlsZHJlbjpudWxsLGVhcmxpZXN0UGVuZGluZ1RpbWU6MCxsYXRlc3RQZW5kaW5nVGltZTowLGVhcmxpZXN0U3VzcGVuZGVkVGltZTowLGxhdGVzdFN1c3BlbmRlZFRpbWU6MCxsYXRlc3RQaW5nZWRUaW1lOjAscGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lOjAsZmluaXNoZWRXb3JrOm51bGwsY29udGV4dDpudWxsLHBlbmRpbmdDb250ZXh0Om51bGwsaHlkcmF0ZTpuLHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lOjAsZmlyc3RCYXRjaDpudWxsLG5leHRTY2hlZHVsZWRSb290Om51bGx9LHQuc3RhdGVOb2RlPWV9ZnVuY3Rpb24genQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZSh0KX1jYXRjaChlKXt9fX1mdW5jdGlvbiBHdChlKXtpZigidW5kZWZpbmVkIj09PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pcmV0dXJuITE7dmFyIHQ9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKHQuaXNEaXNhYmxlZHx8IXQuc3VwcG9ydHNGaWJlcilyZXR1cm4hMDt0cnl7dmFyIG49dC5pbmplY3QoZSk7d2E9enQoZnVuY3Rpb24oZSl7cmV0dXJuIHQub25Db21taXRGaWJlclJvb3QobixlKX0pLFNhPXp0KGZ1bmN0aW9uKGUpe3JldHVybiB0Lm9uQ29tbWl0RmliZXJVbm1vdW50KG4sZSl9KX1jYXRjaChlKXt9cmV0dXJuITB9ZnVuY3Rpb24gVnQoZSl7ImZ1bmN0aW9uIj09PXR5cGVvZiB3YSYmd2EoZSl9ZnVuY3Rpb24gcXQoZSl7ImZ1bmN0aW9uIj09PXR5cGVvZiBTYSYmU2EoZSl9ZnVuY3Rpb24gSHQoZSl7cmV0dXJue2V4cGlyYXRpb25UaW1lOjAsYmFzZVN0YXRlOmUsZmlyc3RVcGRhdGU6bnVsbCxsYXN0VXBkYXRlOm51bGwsZmlyc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGxhc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGZpcnN0RWZmZWN0Om51bGwsbGFzdEVmZmVjdDpudWxsLGZpcnN0Q2FwdHVyZWRFZmZlY3Q6bnVsbCxsYXN0Q2FwdHVyZWRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gV3QoZSl7cmV0dXJue2V4cGlyYXRpb25UaW1lOmUuZXhwaXJhdGlvblRpbWUsYmFzZVN0YXRlOmUuYmFzZVN0YXRlLGZpcnN0VXBkYXRlOmUuZmlyc3RVcGRhdGUsbGFzdFVwZGF0ZTplLmxhc3RVcGRhdGUsZmlyc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGxhc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGZpcnN0RWZmZWN0Om51bGwsbGFzdEVmZmVjdDpudWxsLGZpcnN0Q2FwdHVyZWRFZmZlY3Q6bnVsbCxsYXN0Q2FwdHVyZWRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gUXQoZSl7cmV0dXJue2V4cGlyYXRpb25UaW1lOmUsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsLG5leHRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gS3QoZSx0LG4pe251bGw9PT1lLmxhc3RVcGRhdGU/ZS5maXJzdFVwZGF0ZT1lLmxhc3RVcGRhdGU9dDooZS5sYXN0VXBkYXRlLm5leHQ9dCxlLmxhc3RVcGRhdGU9dCksKDA9PT1lLmV4cGlyYXRpb25UaW1lfHxlLmV4cGlyYXRpb25UaW1lPm4pJiYoZS5leHBpcmF0aW9uVGltZT1uKX1mdW5jdGlvbiBKdChlLHQsbil7dmFyIHI9ZS5hbHRlcm5hdGU7aWYobnVsbD09PXIpe3ZhciBpPWUudXBkYXRlUXVldWUsbz1udWxsO251bGw9PT1pJiYoaT1lLnVwZGF0ZVF1ZXVlPUh0KGUubWVtb2l6ZWRTdGF0ZSkpfWVsc2UgaT1lLnVwZGF0ZVF1ZXVlLG89ci51cGRhdGVRdWV1ZSxudWxsPT09aT9udWxsPT09bz8oaT1lLnVwZGF0ZVF1ZXVlPUh0KGUubWVtb2l6ZWRTdGF0ZSksbz1yLnVwZGF0ZVF1ZXVlPUh0KHIubWVtb2l6ZWRTdGF0ZSkpOmk9ZS51cGRhdGVRdWV1ZT1XdChvKTpudWxsPT09byYmKG89ci51cGRhdGVRdWV1ZT1XdChpKSk7bnVsbD09PW98fGk9PT1vP0t0KGksdCxuKTpudWxsPT09aS5sYXN0VXBkYXRlfHxudWxsPT09by5sYXN0VXBkYXRlPyhLdChpLHQsbiksS3Qobyx0LG4pKTooS3QoaSx0LG4pLG8ubGFzdFVwZGF0ZT10KX1mdW5jdGlvbiBZdChlLHQsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtyPW51bGw9PT1yP2UudXBkYXRlUXVldWU9SHQoZS5tZW1vaXplZFN0YXRlKTpYdChlLHIpLG51bGw9PT1yLmxhc3RDYXB0dXJlZFVwZGF0ZT9yLmZpcnN0Q2FwdHVyZWRVcGRhdGU9ci5sYXN0Q2FwdHVyZWRVcGRhdGU9dDooci5sYXN0Q2FwdHVyZWRVcGRhdGUubmV4dD10LHIubGFzdENhcHR1cmVkVXBkYXRlPXQpLCgwPT09ci5leHBpcmF0aW9uVGltZXx8ci5leHBpcmF0aW9uVGltZT5uKSYmKHIuZXhwaXJhdGlvblRpbWU9bil9ZnVuY3Rpb24gWHQoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbCE9PW4mJnQ9PT1uLnVwZGF0ZVF1ZXVlJiYodD1lLnVwZGF0ZVF1ZXVlPVd0KHQpKSx0fWZ1bmN0aW9uIFp0KGUsdCxuLHIsaSxvKXtzd2l0Y2gobi50YWcpe2Nhc2UgMTpyZXR1cm4gZT1uLnBheWxvYWQsImZ1bmN0aW9uIj09PXR5cGVvZiBlP2UuY2FsbChvLHIsaSk6ZTtjYXNlIDM6ZS5lZmZlY3RUYWc9LTEwMjUmZS5lZmZlY3RUYWd8NjQ7Y2FzZSAwOmlmKGU9bi5wYXlsb2FkLG51bGw9PT0oaT0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZS5jYWxsKG8scixpKTplKXx8dm9pZCAwPT09aSlicmVhaztyZXR1cm4gTXIoe30scixpKTtjYXNlIDI6a2E9ITB9cmV0dXJuIHJ9ZnVuY3Rpb24gZW4oZSx0LG4scixpKXtpZihrYT0hMSwhKDA9PT10LmV4cGlyYXRpb25UaW1lfHx0LmV4cGlyYXRpb25UaW1lPmkpKXt0PVh0KGUsdCk7Zm9yKHZhciBvPXQuYmFzZVN0YXRlLGE9bnVsbCxzPTAsdT10LmZpcnN0VXBkYXRlLGM9bztudWxsIT09dTspe3ZhciBsPXUuZXhwaXJhdGlvblRpbWU7bD5pPyhudWxsPT09YSYmKGE9dSxvPWMpLCgwPT09c3x8cz5sKSYmKHM9bCkpOihjPVp0KGUsdCx1LGMsbixyKSxudWxsIT09dS5jYWxsYmFjayYmKGUuZWZmZWN0VGFnfD0zMix1Lm5leHRFZmZlY3Q9bnVsbCxudWxsPT09dC5sYXN0RWZmZWN0P3QuZmlyc3RFZmZlY3Q9dC5sYXN0RWZmZWN0PXU6KHQubGFzdEVmZmVjdC5uZXh0RWZmZWN0PXUsdC5sYXN0RWZmZWN0PXUpKSksdT11Lm5leHR9Zm9yKGw9bnVsbCx1PXQuZmlyc3RDYXB0dXJlZFVwZGF0ZTtudWxsIT09dTspe3ZhciBwPXUuZXhwaXJhdGlvblRpbWU7cD5pPyhudWxsPT09bCYmKGw9dSxudWxsPT09YSYmKG89YykpLCgwPT09c3x8cz5wKSYmKHM9cCkpOihjPVp0KGUsdCx1LGMsbixyKSxudWxsIT09dS5jYWxsYmFjayYmKGUuZWZmZWN0VGFnfD0zMix1Lm5leHRFZmZlY3Q9bnVsbCxudWxsPT09dC5sYXN0Q2FwdHVyZWRFZmZlY3Q/dC5maXJzdENhcHR1cmVkRWZmZWN0PXQubGFzdENhcHR1cmVkRWZmZWN0PXU6KHQubGFzdENhcHR1cmVkRWZmZWN0Lm5leHRFZmZlY3Q9dSx0Lmxhc3RDYXB0dXJlZEVmZmVjdD11KSkpLHU9dS5uZXh0fW51bGw9PT1hJiYodC5sYXN0VXBkYXRlPW51bGwpLG51bGw9PT1sP3QubGFzdENhcHR1cmVkVXBkYXRlPW51bGw6ZS5lZmZlY3RUYWd8PTMyLG51bGw9PT1hJiZudWxsPT09bCYmKG89YyksdC5iYXNlU3RhdGU9byx0LmZpcnN0VXBkYXRlPWEsdC5maXJzdENhcHR1cmVkVXBkYXRlPWwsdC5leHBpcmF0aW9uVGltZT1zLGUubWVtb2l6ZWRTdGF0ZT1jfX1mdW5jdGlvbiB0bihlLHQpeyJmdW5jdGlvbiIhPT10eXBlb2YgZSYmcigiMTkxIixlKSxlLmNhbGwodCl9ZnVuY3Rpb24gbm4oZSx0LG4pe2ZvcihudWxsIT09dC5maXJzdENhcHR1cmVkVXBkYXRlJiYobnVsbCE9PXQubGFzdFVwZGF0ZSYmKHQubGFzdFVwZGF0ZS5uZXh0PXQuZmlyc3RDYXB0dXJlZFVwZGF0ZSx0Lmxhc3RVcGRhdGU9dC5sYXN0Q2FwdHVyZWRVcGRhdGUpLHQuZmlyc3RDYXB0dXJlZFVwZGF0ZT10Lmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsKSxlPXQuZmlyc3RFZmZlY3QsdC5maXJzdEVmZmVjdD10Lmxhc3RFZmZlY3Q9bnVsbDtudWxsIT09ZTspe3ZhciByPWUuY2FsbGJhY2s7bnVsbCE9PXImJihlLmNhbGxiYWNrPW51bGwsdG4ocixuKSksZT1lLm5leHRFZmZlY3R9Zm9yKGU9dC5maXJzdENhcHR1cmVkRWZmZWN0LHQuZmlyc3RDYXB0dXJlZEVmZmVjdD10Lmxhc3RDYXB0dXJlZEVmZmVjdD1udWxsO251bGwhPT1lOyl0PWUuY2FsbGJhY2ssbnVsbCE9PXQmJihlLmNhbGxiYWNrPW51bGwsdG4odCxuKSksZT1lLm5leHRFZmZlY3R9ZnVuY3Rpb24gcm4oZSx0KXtyZXR1cm57dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpzZSh0KX19ZnVuY3Rpb24gb24oZSl7dmFyIHQ9ZS50eXBlLl9jb250ZXh0O1N0KFRhLHQuX2NoYW5nZWRCaXRzLGUpLFN0KF9hLHQuX2N1cnJlbnRWYWx1ZSxlKSxTdChBYSxlLGUpLHQuX2N1cnJlbnRWYWx1ZT1lLnBlbmRpbmdQcm9wcy52YWx1ZSx0Ll9jaGFuZ2VkQml0cz1lLnN0YXRlTm9kZX1mdW5jdGlvbiBhbihlKXt2YXIgdD1UYS5jdXJyZW50LG49X2EuY3VycmVudDt3dChBYSxlKSx3dChfYSxlKSx3dChUYSxlKSxlPWUudHlwZS5fY29udGV4dCxlLl9jdXJyZW50VmFsdWU9bixlLl9jaGFuZ2VkQml0cz10fWZ1bmN0aW9uIHNuKGUpe3JldHVybiBlPT09T2EmJnIoIjE3NCIpLGV9ZnVuY3Rpb24gdW4oZSx0KXtTdChJYSx0LGUpLFN0KE5hLGUsZSksU3QoRmEsT2EsZSk7dmFyIG49dC5ub2RlVHlwZTtzd2l0Y2gobil7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6YXQobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDpuPTg9PT1uP3QucGFyZW50Tm9kZTp0LHQ9bi5uYW1lc3BhY2VVUkl8fG51bGwsbj1uLnRhZ05hbWUsdD1hdCh0LG4pfXd0KEZhLGUpLFN0KEZhLHQsZSl9ZnVuY3Rpb24gY24oZSl7d3QoRmEsZSksd3QoTmEsZSksd3QoSWEsZSl9ZnVuY3Rpb24gbG4oZSl7TmEuY3VycmVudD09PWUmJih3dChGYSxlKSx3dChOYSxlKSl9ZnVuY3Rpb24gcG4oZSx0LG4pe3ZhciByPWUubWVtb2l6ZWRTdGF0ZTt0PXQobixyKSxyPW51bGw9PT10fHx2b2lkIDA9PT10P3I6TXIoe30scix0KSxlLm1lbW9pemVkU3RhdGU9cixudWxsIT09KGU9ZS51cGRhdGVRdWV1ZSkmJjA9PT1lLmV4cGlyYXRpb25UaW1lJiYoZS5iYXNlU3RhdGU9cil9ZnVuY3Rpb24gZm4oZSx0LG4scixpLG8pe3ZhciBhPWUuc3RhdGVOb2RlO3JldHVybiBlPWUudHlwZSwiZnVuY3Rpb24iPT09dHlwZW9mIGEuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Euc2hvdWxkQ29tcG9uZW50VXBkYXRlKG4saSxvKTohZS5wcm90b3R5cGV8fCFlLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudHx8KCFCcih0LG4pfHwhQnIocixpKSl9ZnVuY3Rpb24gZG4oZSx0LG4scil7ZT10LnN0YXRlLCJmdW5jdGlvbiI9PT10eXBlb2YgdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZ0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSwiZnVuY3Rpb24iPT09dHlwZW9mIHQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSx0LnN0YXRlIT09ZSYmTGEuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0LHQuc3RhdGUsbnVsbCl9ZnVuY3Rpb24gaG4oZSx0KXt2YXIgbj1lLnR5cGUscj1lLnN0YXRlTm9kZSxpPWUucGVuZGluZ1Byb3BzLG89a3QoZSk7ci5wcm9wcz1pLHIuc3RhdGU9ZS5tZW1vaXplZFN0YXRlLHIucmVmcz1VcixyLmNvbnRleHQ9QXQoZSxvKSxvPWUudXBkYXRlUXVldWUsbnVsbCE9PW8mJihlbihlLG8saSxyLHQpLHIuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSxvPWUudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsImZ1bmN0aW9uIj09PXR5cGVvZiBvJiYocG4oZSxvLGkpLHIuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSwiZnVuY3Rpb24iPT09dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzfHwiZnVuY3Rpb24iPT09dHlwZW9mIHIuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fCJmdW5jdGlvbiIhPT10eXBlb2Ygci5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT09dHlwZW9mIHIuY29tcG9uZW50V2lsbE1vdW50fHwobj1yLnN0YXRlLCJmdW5jdGlvbiI9PT10eXBlb2Ygci5jb21wb25lbnRXaWxsTW91bnQmJnIuY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09PXR5cGVvZiByLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJnIuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLG4hPT1yLnN0YXRlJiZMYS5lbnF1ZXVlUmVwbGFjZVN0YXRlKHIsci5zdGF0ZSxudWxsKSxudWxsIT09KG89ZS51cGRhdGVRdWV1ZSkmJihlbihlLG8saSxyLHQpLHIuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSksImZ1bmN0aW9uIj09PXR5cGVvZiByLmNvbXBvbmVudERpZE1vdW50JiYoZS5lZmZlY3RUYWd8PTQpfWZ1bmN0aW9uIG1uKGUsdCxuKXtpZihudWxsIT09KGU9bi5yZWYpJiYiZnVuY3Rpb24iIT09dHlwZW9mIGUmJiJvYmplY3QiIT09dHlwZW9mIGUpe2lmKG4uX293bmVyKXtuPW4uX293bmVyO3ZhciBpPXZvaWQgMDtuJiYoMiE9PW4udGFnJiZyKCIxMTAiKSxpPW4uc3RhdGVOb2RlKSxpfHxyKCIxNDciLGUpO3ZhciBvPSIiK2U7cmV0dXJuIG51bGwhPT10JiZudWxsIT09dC5yZWYmJiJmdW5jdGlvbiI9PT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1vP3QucmVmOih0PWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmcz09PVVyP2kucmVmcz17fTppLnJlZnM7bnVsbD09PWU/ZGVsZXRlIHRbb106dFtvXT1lfSx0Ll9zdHJpbmdSZWY9byx0KX0ic3RyaW5nIiE9PXR5cGVvZiBlJiZyKCIxNDgiKSxuLl9vd25lcnx8cigiMjU0IixlKX1yZXR1cm4gZX1mdW5jdGlvbiBnbihlLHQpeyJ0ZXh0YXJlYSIhPT1lLnR5cGUmJnIoIjMxIiwiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9Ijp0LCIiKX1mdW5jdGlvbiB5bihlKXtmdW5jdGlvbiB0KHQsbil7aWYoZSl7dmFyIHI9dC5sYXN0RWZmZWN0O251bGwhPT1yPyhyLm5leHRFZmZlY3Q9bix0Lmxhc3RFZmZlY3Q9bik6dC5maXJzdEVmZmVjdD10Lmxhc3RFZmZlY3Q9bixuLm5leHRFZmZlY3Q9bnVsbCxuLmVmZmVjdFRhZz04fX1mdW5jdGlvbiBuKG4scil7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09cjspdChuLHIpLHI9ci5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIGkoZSx0KXtmb3IoZT1uZXcgTWFwO251bGwhPT10OyludWxsIT09dC5rZXk/ZS5zZXQodC5rZXksdCk6ZS5zZXQodC5pbmRleCx0KSx0PXQuc2libGluZztyZXR1cm4gZX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gZT1NdChlLHQsbiksZS5pbmRleD0wLGUuc2libGluZz1udWxsLGV9ZnVuY3Rpb24gYSh0LG4scil7cmV0dXJuIHQuaW5kZXg9cixlP251bGwhPT0ocj10LmFsdGVybmF0ZSk/KHI9ci5pbmRleCxyPG4/KHQuZWZmZWN0VGFnPTIsbik6cik6KHQuZWZmZWN0VGFnPTIsbik6bn1mdW5jdGlvbiBzKHQpe3JldHVybiBlJiZudWxsPT09dC5hbHRlcm5hdGUmJih0LmVmZmVjdFRhZz0yKSx0fWZ1bmN0aW9uIHUoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw2IT09dC50YWc/KHQ9QnQobixlLm1vZGUsciksdC5yZXR1cm49ZSx0KToodD1vKHQsbixyKSx0LnJldHVybj1lLHQpfWZ1bmN0aW9uIGMoZSx0LG4scil7cmV0dXJuIG51bGwhPT10JiZ0LnR5cGU9PT1uLnR5cGU/KHI9byh0LG4ucHJvcHMsciksci5yZWY9bW4oZSx0LG4pLHIucmV0dXJuPWUscik6KHI9anQobixlLm1vZGUsciksci5yZWY9bW4oZSx0LG4pLHIucmV0dXJuPWUscil9ZnVuY3Rpb24gbChlLHQsbixyKXtyZXR1cm4gbnVsbD09PXR8fDQhPT10LnRhZ3x8dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PW4uY29udGFpbmVySW5mb3x8dC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1uLmltcGxlbWVudGF0aW9uPyh0PSR0KG4sZS5tb2RlLHIpLHQucmV0dXJuPWUsdCk6KHQ9byh0LG4uY2hpbGRyZW58fFtdLHIpLHQucmV0dXJuPWUsdCl9ZnVuY3Rpb24gcChlLHQsbixyLGkpe3JldHVybiBudWxsPT09dHx8MTAhPT10LnRhZz8odD1SdChuLGUubW9kZSxyLGkpLHQucmV0dXJuPWUsdCk6KHQ9byh0LG4sciksdC5yZXR1cm49ZSx0KX1mdW5jdGlvbiBmKGUsdCxuKXtpZigic3RyaW5nIj09PXR5cGVvZiB0fHwibnVtYmVyIj09PXR5cGVvZiB0KXJldHVybiB0PUJ0KCIiK3QsZS5tb2RlLG4pLHQucmV0dXJuPWUsdDtpZigib2JqZWN0Ij09PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgJGk6cmV0dXJuIG49anQodCxlLm1vZGUsbiksbi5yZWY9bW4oZSxudWxsLHQpLG4ucmV0dXJuPWUsbjtjYXNlIFVpOnJldHVybiB0PSR0KHQsZS5tb2RlLG4pLHQucmV0dXJuPWUsdH1pZihQYSh0KXx8b2UodCkpcmV0dXJuIHQ9UnQodCxlLm1vZGUsbixudWxsKSx0LnJldHVybj1lLHQ7Z24oZSx0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGUsdCxuLHIpe3ZhciBpPW51bGwhPT10P3Qua2V5Om51bGw7aWYoInN0cmluZyI9PT10eXBlb2Ygbnx8Im51bWJlciI9PT10eXBlb2YgbilyZXR1cm4gbnVsbCE9PWk/bnVsbDp1KGUsdCwiIituLHIpO2lmKCJvYmplY3QiPT09dHlwZW9mIG4mJm51bGwhPT1uKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSAkaTpyZXR1cm4gbi5rZXk9PT1pP24udHlwZT09PXppP3AoZSx0LG4ucHJvcHMuY2hpbGRyZW4scixpKTpjKGUsdCxuLHIpOm51bGw7Y2FzZSBVaTpyZXR1cm4gbi5rZXk9PT1pP2woZSx0LG4scik6bnVsbH1pZihQYShuKXx8b2UobikpcmV0dXJuIG51bGwhPT1pP251bGw6cChlLHQsbixyLG51bGwpO2duKGUsbil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaChlLHQsbixyLGkpe2lmKCJzdHJpbmciPT09dHlwZW9mIHJ8fCJudW1iZXIiPT09dHlwZW9mIHIpcmV0dXJuIGU9ZS5nZXQobil8fG51bGwsdSh0LGUsIiIrcixpKTtpZigib2JqZWN0Ij09PXR5cGVvZiByJiZudWxsIT09cil7c3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgJGk6cmV0dXJuIGU9ZS5nZXQobnVsbD09PXIua2V5P246ci5rZXkpfHxudWxsLHIudHlwZT09PXppP3AodCxlLHIucHJvcHMuY2hpbGRyZW4saSxyLmtleSk6Yyh0LGUscixpKTtjYXNlIFVpOnJldHVybiBlPWUuZ2V0KG51bGw9PT1yLmtleT9uOnIua2V5KXx8bnVsbCxsKHQsZSxyLGkpfWlmKFBhKHIpfHxvZShyKSlyZXR1cm4gZT1lLmdldChuKXx8bnVsbCxwKHQsZSxyLGksbnVsbCk7Z24odCxyKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtKHIsbyxzLHUpe2Zvcih2YXIgYz1udWxsLGw9bnVsbCxwPW8sbT1vPTAsZz1udWxsO251bGwhPT1wJiZtPHMubGVuZ3RoO20rKyl7cC5pbmRleD5tPyhnPXAscD1udWxsKTpnPXAuc2libGluZzt2YXIgeT1kKHIscCxzW21dLHUpO2lmKG51bGw9PT15KXtudWxsPT09cCYmKHA9Zyk7YnJlYWt9ZSYmcCYmbnVsbD09PXkuYWx0ZXJuYXRlJiZ0KHIscCksbz1hKHksbyxtKSxudWxsPT09bD9jPXk6bC5zaWJsaW5nPXksbD15LHA9Z31pZihtPT09cy5sZW5ndGgpcmV0dXJuIG4ocixwKSxjO2lmKG51bGw9PT1wKXtmb3IoO208cy5sZW5ndGg7bSsrKShwPWYocixzW21dLHUpKSYmKG89YShwLG8sbSksbnVsbD09PWw/Yz1wOmwuc2libGluZz1wLGw9cCk7cmV0dXJuIGN9Zm9yKHA9aShyLHApO208cy5sZW5ndGg7bSsrKShnPWgocCxyLG0sc1ttXSx1KSkmJihlJiZudWxsIT09Zy5hbHRlcm5hdGUmJnAuZGVsZXRlKG51bGw9PT1nLmtleT9tOmcua2V5KSxvPWEoZyxvLG0pLG51bGw9PT1sP2M9ZzpsLnNpYmxpbmc9ZyxsPWcpO3JldHVybiBlJiZwLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQocixlKX0pLGN9ZnVuY3Rpb24gZyhvLHMsdSxjKXt2YXIgbD1vZSh1KTsiZnVuY3Rpb24iIT09dHlwZW9mIGwmJnIoIjE1MCIpLG51bGw9PSh1PWwuY2FsbCh1KSkmJnIoIjE1MSIpO2Zvcih2YXIgcD1sPW51bGwsbT1zLGc9cz0wLHk9bnVsbCx2PXUubmV4dCgpO251bGwhPT1tJiYhdi5kb25lO2crKyx2PXUubmV4dCgpKXttLmluZGV4Pmc/KHk9bSxtPW51bGwpOnk9bS5zaWJsaW5nO3ZhciBiPWQobyxtLHYudmFsdWUsYyk7aWYobnVsbD09PWIpe218fChtPXkpO2JyZWFrfWUmJm0mJm51bGw9PT1iLmFsdGVybmF0ZSYmdChvLG0pLHM9YShiLHMsZyksbnVsbD09PXA/bD1iOnAuc2libGluZz1iLHA9YixtPXl9aWYodi5kb25lKXJldHVybiBuKG8sbSksbDtpZihudWxsPT09bSl7Zm9yKDshdi5kb25lO2crKyx2PXUubmV4dCgpKW51bGwhPT0odj1mKG8sdi52YWx1ZSxjKSkmJihzPWEodixzLGcpLG51bGw9PT1wP2w9djpwLnNpYmxpbmc9dixwPXYpO3JldHVybiBsfWZvcihtPWkobyxtKTshdi5kb25lO2crKyx2PXUubmV4dCgpKW51bGwhPT0odj1oKG0sbyxnLHYudmFsdWUsYykpJiYoZSYmbnVsbCE9PXYuYWx0ZXJuYXRlJiZtLmRlbGV0ZShudWxsPT09di5rZXk/Zzp2LmtleSkscz1hKHYscyxnKSxudWxsPT09cD9sPXY6cC5zaWJsaW5nPXYscD12KTtyZXR1cm4gZSYmbS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0KG8sZSl9KSxsfXJldHVybiBmdW5jdGlvbihlLGksYSx1KXsib2JqZWN0Ij09PXR5cGVvZiBhJiZudWxsIT09YSYmYS50eXBlPT09emkmJm51bGw9PT1hLmtleSYmKGE9YS5wcm9wcy5jaGlsZHJlbik7dmFyIGM9Im9iamVjdCI9PT10eXBlb2YgYSYmbnVsbCE9PWE7aWYoYylzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSAkaTplOnt2YXIgbD1hLmtleTtmb3IoYz1pO251bGwhPT1jOyl7aWYoYy5rZXk9PT1sKXtpZigxMD09PWMudGFnP2EudHlwZT09PXppOmMudHlwZT09PWEudHlwZSl7bihlLGMuc2libGluZyksaT1vKGMsYS50eXBlPT09emk/YS5wcm9wcy5jaGlsZHJlbjphLnByb3BzLHUpLGkucmVmPW1uKGUsYyxhKSxpLnJldHVybj1lLGU9aTticmVhayBlfW4oZSxjKTticmVha310KGUsYyksYz1jLnNpYmxpbmd9YS50eXBlPT09emk/KGk9UnQoYS5wcm9wcy5jaGlsZHJlbixlLm1vZGUsdSxhLmtleSksaS5yZXR1cm49ZSxlPWkpOih1PWp0KGEsZS5tb2RlLHUpLHUucmVmPW1uKGUsaSxhKSx1LnJldHVybj1lLGU9dSl9cmV0dXJuIHMoZSk7Y2FzZSBVaTplOntmb3IoYz1hLmtleTtudWxsIT09aTspe2lmKGkua2V5PT09Yyl7aWYoND09PWkudGFnJiZpLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09YS5jb250YWluZXJJbmZvJiZpLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWEuaW1wbGVtZW50YXRpb24pe24oZSxpLnNpYmxpbmcpLGk9byhpLGEuY2hpbGRyZW58fFtdLHUpLGkucmV0dXJuPWUsZT1pO2JyZWFrIGV9bihlLGkpO2JyZWFrfXQoZSxpKSxpPWkuc2libGluZ31pPSR0KGEsZS5tb2RlLHUpLGkucmV0dXJuPWUsZT1pfXJldHVybiBzKGUpfWlmKCJzdHJpbmciPT09dHlwZW9mIGF8fCJudW1iZXIiPT09dHlwZW9mIGEpcmV0dXJuIGE9IiIrYSxudWxsIT09aSYmNj09PWkudGFnPyhuKGUsaS5zaWJsaW5nKSxpPW8oaSxhLHUpLGkucmV0dXJuPWUsZT1pKToobihlLGkpLGk9QnQoYSxlLm1vZGUsdSksaS5yZXR1cm49ZSxlPWkpLHMoZSk7aWYoUGEoYSkpcmV0dXJuIG0oZSxpLGEsdSk7aWYob2UoYSkpcmV0dXJuIGcoZSxpLGEsdSk7aWYoYyYmZ24oZSxhKSwidW5kZWZpbmVkIj09PXR5cGVvZiBhKXN3aXRjaChlLnRhZyl7Y2FzZSAyOmNhc2UgMTp1PWUudHlwZSxyKCIxNTIiLHUuZGlzcGxheU5hbWV8fHUubmFtZXx8IkNvbXBvbmVudCIpfXJldHVybiBuKGUsaSl9fWZ1bmN0aW9uIHZuKGUsdCl7dmFyIG49bmV3IFB0KDUsbnVsbCxudWxsLDApO24udHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLG4uZWZmZWN0VGFnPTgsbnVsbCE9PWUubGFzdEVmZmVjdD8oZS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9bixlLmxhc3RFZmZlY3Q9bik6ZS5maXJzdEVmZmVjdD1lLmxhc3RFZmZlY3Q9bn1mdW5jdGlvbiBibihlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OnZhciBuPWUudHlwZTtyZXR1cm4gbnVsbCE9PSh0PTEhPT10Lm5vZGVUeXBlfHxuLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0KSYmKGUuc3RhdGVOb2RlPXQsITApO2Nhc2UgNjpyZXR1cm4gbnVsbCE9PSh0PSIiPT09ZS5wZW5kaW5nUHJvcHN8fDMhPT10Lm5vZGVUeXBlP251bGw6dCkmJihlLnN0YXRlTm9kZT10LCEwKTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB4bihlKXtpZigkYSl7dmFyIHQ9QmE7aWYodCl7dmFyIG49dDtpZighYm4oZSx0KSl7aWYoISh0PUN0KG4pKXx8IWJuKGUsdCkpcmV0dXJuIGUuZWZmZWN0VGFnfD0yLCRhPSExLHZvaWQoUmE9ZSk7dm4oUmEsbil9UmE9ZSxCYT1FdCh0KX1lbHNlIGUuZWZmZWN0VGFnfD0yLCRhPSExLFJhPWV9fWZ1bmN0aW9uIENuKGUpe2ZvcihlPWUucmV0dXJuO251bGwhPT1lJiY1IT09ZS50YWcmJjMhPT1lLnRhZzspZT1lLnJldHVybjtSYT1lfWZ1bmN0aW9uIEVuKGUpe2lmKGUhPT1SYSlyZXR1cm4hMTtpZighJGEpcmV0dXJuIENuKGUpLCRhPSEwLCExO3ZhciB0PWUudHlwZTtpZig1IT09ZS50YWd8fCJoZWFkIiE9PXQmJiJib2R5IiE9PXQmJiF4dCh0LGUubWVtb2l6ZWRQcm9wcykpZm9yKHQ9QmE7dDspdm4oZSx0KSx0PUN0KHQpO3JldHVybiBDbihlKSxCYT1SYT9DdChlLnN0YXRlTm9kZSk6bnVsbCwhMH1mdW5jdGlvbiBEbigpe0JhPVJhPW51bGwsJGE9ITF9ZnVuY3Rpb24gd24oZSx0LG4pe1NuKGUsdCxuLHQuZXhwaXJhdGlvblRpbWUpfWZ1bmN0aW9uIFNuKGUsdCxuLHIpe3QuY2hpbGQ9bnVsbD09PWU/amEodCxudWxsLG4scik6TWEodCxlLmNoaWxkLG4scil9ZnVuY3Rpb24ga24oZSx0KXt2YXIgbj10LnJlZjsobnVsbD09PWUmJm51bGwhPT1ufHxudWxsIT09ZSYmZS5yZWYhPT1uKSYmKHQuZWZmZWN0VGFnfD0xMjgpfWZ1bmN0aW9uIEFuKGUsdCxuLHIsaSl7a24oZSx0KTt2YXIgbz0wIT09KDY0JnQuZWZmZWN0VGFnKTtpZighbiYmIW8pcmV0dXJuIHImJkx0KHQsITEpLEZuKGUsdCk7bj10LnN0YXRlTm9kZSxSaS5jdXJyZW50PXQ7dmFyIGE9bz9udWxsOm4ucmVuZGVyKCk7cmV0dXJuIHQuZWZmZWN0VGFnfD0xLG8mJihTbihlLHQsbnVsbCxpKSx0LmNoaWxkPW51bGwpLFNuKGUsdCxhLGkpLHQubWVtb2l6ZWRTdGF0ZT1uLnN0YXRlLHQubWVtb2l6ZWRQcm9wcz1uLnByb3BzLHImJkx0KHQsITApLHQuY2hpbGR9ZnVuY3Rpb24gX24oZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9GdChlLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZGdChlLHQuY29udGV4dCwhMSksdW4oZSx0LmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIFRuKGUsdCxuLHIpe3ZhciBpPWUuY2hpbGQ7Zm9yKG51bGwhPT1pJiYoaS5yZXR1cm49ZSk7bnVsbCE9PWk7KXtzd2l0Y2goaS50YWcpe2Nhc2UgMTI6dmFyIG89MHxpLnN0YXRlTm9kZTtpZihpLnR5cGU9PT10JiYwIT09KG8mbikpe2ZvcihvPWk7bnVsbCE9PW87KXt2YXIgYT1vLmFsdGVybmF0ZTtpZigwPT09by5leHBpcmF0aW9uVGltZXx8by5leHBpcmF0aW9uVGltZT5yKW8uZXhwaXJhdGlvblRpbWU9cixudWxsIT09YSYmKDA9PT1hLmV4cGlyYXRpb25UaW1lfHxhLmV4cGlyYXRpb25UaW1lPnIpJiYoYS5leHBpcmF0aW9uVGltZT1yKTtlbHNle2lmKG51bGw9PT1hfHwhKDA9PT1hLmV4cGlyYXRpb25UaW1lfHxhLmV4cGlyYXRpb25UaW1lPnIpKWJyZWFrO2EuZXhwaXJhdGlvblRpbWU9cn1vPW8ucmV0dXJufW89bnVsbH1lbHNlIG89aS5jaGlsZDticmVhaztjYXNlIDEzOm89aS50eXBlPT09ZS50eXBlP251bGw6aS5jaGlsZDticmVhaztkZWZhdWx0Om89aS5jaGlsZH1pZihudWxsIT09bylvLnJldHVybj1pO2Vsc2UgZm9yKG89aTtudWxsIT09bzspe2lmKG89PT1lKXtvPW51bGw7YnJlYWt9aWYobnVsbCE9PShpPW8uc2libGluZykpe2kucmV0dXJuPW8ucmV0dXJuLG89aTticmVha31vPW8ucmV0dXJufWk9b319ZnVuY3Rpb24gT24oZSx0LG4pe3ZhciByPXQudHlwZS5fY29udGV4dCxpPXQucGVuZGluZ1Byb3BzLG89dC5tZW1vaXplZFByb3BzLGE9ITA7aWYoRWEuY3VycmVudClhPSExO2Vsc2UgaWYobz09PWkpcmV0dXJuIHQuc3RhdGVOb2RlPTAsb24odCksRm4oZSx0KTt2YXIgcz1pLnZhbHVlO2lmKHQubWVtb2l6ZWRQcm9wcz1pLG51bGw9PT1vKXM9MTA3Mzc0MTgyMztlbHNlIGlmKG8udmFsdWU9PT1pLnZhbHVlKXtpZihvLmNoaWxkcmVuPT09aS5jaGlsZHJlbiYmYSlyZXR1cm4gdC5zdGF0ZU5vZGU9MCxvbih0KSxGbihlLHQpO3M9MH1lbHNle3ZhciB1PW8udmFsdWU7aWYodT09PXMmJigwIT09dXx8MS91PT09MS9zKXx8dSE9PXUmJnMhPT1zKXtpZihvLmNoaWxkcmVuPT09aS5jaGlsZHJlbiYmYSlyZXR1cm4gdC5zdGF0ZU5vZGU9MCxvbih0KSxGbihlLHQpO3M9MH1lbHNlIGlmKHM9ImZ1bmN0aW9uIj09PXR5cGVvZiByLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9yLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyh1LHMpOjEwNzM3NDE4MjMsMD09PShzfD0wKSl7aWYoby5jaGlsZHJlbj09PWkuY2hpbGRyZW4mJmEpcmV0dXJuIHQuc3RhdGVOb2RlPTAsb24odCksRm4oZSx0KX1lbHNlIFRuKHQscixzLG4pfXJldHVybiB0LnN0YXRlTm9kZT1zLG9uKHQpLHduKGUsdCxpLmNoaWxkcmVuKSx0LmNoaWxkfWZ1bmN0aW9uIEZuKGUsdCl7aWYobnVsbCE9PWUmJnQuY2hpbGQhPT1lLmNoaWxkJiZyKCIxNTMiKSxudWxsIT09dC5jaGlsZCl7ZT10LmNoaWxkO3ZhciBuPU10KGUsZS5wZW5kaW5nUHJvcHMsZS5leHBpcmF0aW9uVGltZSk7Zm9yKHQuY2hpbGQ9bixuLnJldHVybj10O251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLG49bi5zaWJsaW5nPU10KGUsZS5wZW5kaW5nUHJvcHMsZS5leHBpcmF0aW9uVGltZSksbi5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBObihlLHQsbil7aWYoMD09PXQuZXhwaXJhdGlvblRpbWV8fHQuZXhwaXJhdGlvblRpbWU+bil7c3dpdGNoKHQudGFnKXtjYXNlIDM6X24odCk7YnJlYWs7Y2FzZSAyOkl0KHQpO2JyZWFrO2Nhc2UgNDp1bih0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTM6b24odCl9cmV0dXJuIG51bGx9c3dpdGNoKHQudGFnKXtjYXNlIDA6bnVsbCE9PWUmJnIoIjE1NSIpO3ZhciBpPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLGE9a3QodCk7cmV0dXJuIGE9QXQodCxhKSxpPWkobyxhKSx0LmVmZmVjdFRhZ3w9MSwib2JqZWN0Ij09PXR5cGVvZiBpJiZudWxsIT09aSYmImZ1bmN0aW9uIj09PXR5cGVvZiBpLnJlbmRlciYmdm9pZCAwPT09aS4kJHR5cGVvZj8oYT10LnR5cGUsdC50YWc9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCE9PWkuc3RhdGUmJnZvaWQgMCE9PWkuc3RhdGU/aS5zdGF0ZTpudWxsLGE9YS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsImZ1bmN0aW9uIj09PXR5cGVvZiBhJiZwbih0LGEsbyksbz1JdCh0KSxpLnVwZGF0ZXI9TGEsdC5zdGF0ZU5vZGU9aSxpLl9yZWFjdEludGVybmFsRmliZXI9dCxobih0LG4pLGU9QW4oZSx0LCEwLG8sbikpOih0LnRhZz0xLHduKGUsdCxpKSx0Lm1lbW9pemVkUHJvcHM9byxlPXQuY2hpbGQpLGU7Y2FzZSAxOnJldHVybiBvPXQudHlwZSxuPXQucGVuZGluZ1Byb3BzLEVhLmN1cnJlbnR8fHQubWVtb2l6ZWRQcm9wcyE9PW4/KGk9a3QodCksaT1BdCh0LGkpLG89byhuLGkpLHQuZWZmZWN0VGFnfD0xLHduKGUsdCxvKSx0Lm1lbW9pemVkUHJvcHM9bixlPXQuY2hpbGQpOmU9Rm4oZSx0KSxlO2Nhc2UgMjppZihvPUl0KHQpLG51bGw9PT1lKWlmKG51bGw9PT10LnN0YXRlTm9kZSl7dmFyIHM9dC5wZW5kaW5nUHJvcHMsdT10LnR5cGU7aT1rdCh0KTt2YXIgYz0yPT09dC50YWcmJm51bGwhPXQudHlwZS5jb250ZXh0VHlwZXM7YT1jP0F0KHQsaSk6VXIscz1uZXcgdShzLGEpLHQubWVtb2l6ZWRTdGF0ZT1udWxsIT09cy5zdGF0ZSYmdm9pZCAwIT09cy5zdGF0ZT9zLnN0YXRlOm51bGwscy51cGRhdGVyPUxhLHQuc3RhdGVOb2RlPXMscy5fcmVhY3RJbnRlcm5hbEZpYmVyPXQsYyYmKGM9dC5zdGF0ZU5vZGUsYy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWksYy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1hKSxobih0LG4pLGk9ITB9ZWxzZXt1PXQudHlwZSxpPXQuc3RhdGVOb2RlLGM9dC5tZW1vaXplZFByb3BzLGE9dC5wZW5kaW5nUHJvcHMsaS5wcm9wcz1jO3ZhciBsPWkuY29udGV4dDtzPWt0KHQpLHM9QXQodCxzKTt2YXIgcD11LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsodT0iZnVuY3Rpb24iPT09dHlwZW9mIHB8fCJmdW5jdGlvbiI9PT10eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fCJmdW5jdGlvbiIhPT10eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmImZ1bmN0aW9uIiE9PXR5cGVvZiBpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChjIT09YXx8bCE9PXMpJiZkbih0LGksYSxzKSxrYT0hMTt2YXIgZj10Lm1lbW9pemVkU3RhdGU7bD1pLnN0YXRlPWY7dmFyIGQ9dC51cGRhdGVRdWV1ZTtudWxsIT09ZCYmKGVuKHQsZCxhLGksbiksbD10Lm1lbW9pemVkU3RhdGUpLGMhPT1hfHxmIT09bHx8RWEuY3VycmVudHx8a2E/KCJmdW5jdGlvbiI9PT10eXBlb2YgcCYmKHBuKHQscCxhKSxsPXQubWVtb2l6ZWRTdGF0ZSksKGM9a2F8fGZuKHQsYyxhLGYsbCxzKSk/KHV8fCJmdW5jdGlvbiIhPT10eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT09dHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50fHwoImZ1bmN0aW9uIj09PXR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudCYmaS5jb21wb25lbnRXaWxsTW91bnQoKSwiZnVuY3Rpb24iPT09dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmaS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PT10eXBlb2YgaS5jb21wb25lbnREaWRNb3VudCYmKHQuZWZmZWN0VGFnfD00KSk6KCJmdW5jdGlvbiI9PT10eXBlb2YgaS5jb21wb25lbnREaWRNb3VudCYmKHQuZWZmZWN0VGFnfD00KSx0Lm1lbW9pemVkUHJvcHM9YSx0Lm1lbW9pemVkU3RhdGU9bCksaS5wcm9wcz1hLGkuc3RhdGU9bCxpLmNvbnRleHQ9cyxpPWMpOigiZnVuY3Rpb24iPT09dHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCksaT0hMSl9ZWxzZSB1PXQudHlwZSxpPXQuc3RhdGVOb2RlLGE9dC5tZW1vaXplZFByb3BzLGM9dC5wZW5kaW5nUHJvcHMsaS5wcm9wcz1hLGw9aS5jb250ZXh0LHM9a3QodCkscz1BdCh0LHMpLHA9dS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsKHU9ImZ1bmN0aW9uIj09PXR5cGVvZiBwfHwiZnVuY3Rpb24iPT09dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHwiZnVuY3Rpb24iIT09dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJiJmdW5jdGlvbiIhPT10eXBlb2YgaS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoYSE9PWN8fGwhPT1zKSYmZG4odCxpLGMscyksa2E9ITEsbD10Lm1lbW9pemVkU3RhdGUsZj1pLnN0YXRlPWwsZD10LnVwZGF0ZVF1ZXVlLG51bGwhPT1kJiYoZW4odCxkLGMsaSxuKSxmPXQubWVtb2l6ZWRTdGF0ZSksYSE9PWN8fGwhPT1mfHxFYS5jdXJyZW50fHxrYT8oImZ1bmN0aW9uIj09PXR5cGVvZiBwJiYocG4odCxwLGMpLGY9dC5tZW1vaXplZFN0YXRlKSwocD1rYXx8Zm4odCxhLGMsbCxmLHMpKT8odXx8ImZ1bmN0aW9uIiE9PXR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiYiZnVuY3Rpb24iIT09dHlwZW9mIGkuY29tcG9uZW50V2lsbFVwZGF0ZXx8KCJmdW5jdGlvbiI9PT10eXBlb2YgaS5jb21wb25lbnRXaWxsVXBkYXRlJiZpLmNvbXBvbmVudFdpbGxVcGRhdGUoYyxmLHMpLCJmdW5jdGlvbiI9PT10eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShjLGYscykpLCJmdW5jdGlvbiI9PT10eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGUmJih0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIj09PXR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5lZmZlY3RUYWd8PTI1NikpOigiZnVuY3Rpb24iIT09dHlwZW9mIGkuY29tcG9uZW50RGlkVXBkYXRlfHxhPT09ZS5tZW1vaXplZFByb3BzJiZsPT09ZS5tZW1vaXplZFN0YXRlfHwodC5lZmZlY3RUYWd8PTQpLCJmdW5jdGlvbiIhPT10eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8YT09PWUubWVtb2l6ZWRQcm9wcyYmbD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZWZmZWN0VGFnfD0yNTYpLHQubWVtb2l6ZWRQcm9wcz1jLHQubWVtb2l6ZWRTdGF0ZT1mKSxpLnByb3BzPWMsaS5zdGF0ZT1mLGkuY29udGV4dD1zLGk9cCk6KCJmdW5jdGlvbiIhPT10eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGV8fGE9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9PXR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxhPT09ZS5tZW1vaXplZFByb3BzJiZsPT09ZS5tZW1vaXplZFN0YXRlfHwodC5lZmZlY3RUYWd8PTI1NiksaT0hMSk7cmV0dXJuIEFuKGUsdCxpLG8sbik7Y2FzZSAzOnJldHVybiBfbih0KSxvPXQudXBkYXRlUXVldWUsbnVsbCE9PW8/KGk9dC5tZW1vaXplZFN0YXRlLGk9bnVsbCE9PWk/aS5lbGVtZW50Om51bGwsZW4odCxvLHQucGVuZGluZ1Byb3BzLG51bGwsbiksKG89dC5tZW1vaXplZFN0YXRlLmVsZW1lbnQpPT09aT8oRG4oKSxlPUZuKGUsdCkpOihpPXQuc3RhdGVOb2RlLChpPShudWxsPT09ZXx8bnVsbD09PWUuY2hpbGQpJiZpLmh5ZHJhdGUpJiYoQmE9RXQodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksUmE9dCxpPSRhPSEwKSxpPyh0LmVmZmVjdFRhZ3w9Mix0LmNoaWxkPWphKHQsbnVsbCxvLG4pKTooRG4oKSx3bihlLHQsbykpLGU9dC5jaGlsZCkpOihEbigpLGU9Rm4oZSx0KSksZTtjYXNlIDU6cmV0dXJuIHNuKElhLmN1cnJlbnQpLG89c24oRmEuY3VycmVudCksaT1hdChvLHQudHlwZSksbyE9PWkmJihTdChOYSx0LHQpLFN0KEZhLGksdCkpLG51bGw9PT1lJiZ4bih0KSxvPXQudHlwZSxjPXQubWVtb2l6ZWRQcm9wcyxpPXQucGVuZGluZ1Byb3BzLGE9bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOm51bGwsRWEuY3VycmVudHx8YyE9PWl8fCgoYz0xJnQubW9kZSYmISFpLmhpZGRlbikmJih0LmV4cGlyYXRpb25UaW1lPTEwNzM3NDE4MjMpLGMmJjEwNzM3NDE4MjM9PT1uKT8oYz1pLmNoaWxkcmVuLHh0KG8saSk/Yz1udWxsOmEmJnh0KG8sYSkmJih0LmVmZmVjdFRhZ3w9MTYpLGtuKGUsdCksMTA3Mzc0MTgyMyE9PW4mJjEmdC5tb2RlJiZpLmhpZGRlbj8odC5leHBpcmF0aW9uVGltZT0xMDczNzQxODIzLHQubWVtb2l6ZWRQcm9wcz1pLGU9bnVsbCk6KHduKGUsdCxjKSx0Lm1lbW9pemVkUHJvcHM9aSxlPXQuY2hpbGQpKTplPUZuKGUsdCksZTtjYXNlIDY6cmV0dXJuIG51bGw9PT1lJiZ4bih0KSx0Lm1lbW9pemVkUHJvcHM9dC5wZW5kaW5nUHJvcHMsbnVsbDtjYXNlIDE2OnJldHVybiBudWxsO2Nhc2UgNDpyZXR1cm4gdW4odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxvPXQucGVuZGluZ1Byb3BzLEVhLmN1cnJlbnR8fHQubWVtb2l6ZWRQcm9wcyE9PW8/KG51bGw9PT1lP3QuY2hpbGQ9TWEodCxudWxsLG8sbik6d24oZSx0LG8pLHQubWVtb2l6ZWRQcm9wcz1vLGU9dC5jaGlsZCk6ZT1GbihlLHQpLGU7Y2FzZSAxNDpyZXR1cm4gbz10LnR5cGUucmVuZGVyLG49dC5wZW5kaW5nUHJvcHMsaT10LnJlZixFYS5jdXJyZW50fHx0Lm1lbW9pemVkUHJvcHMhPT1ufHxpIT09KG51bGwhPT1lP2UucmVmOm51bGwpPyhvPW8obixpKSx3bihlLHQsbyksdC5tZW1vaXplZFByb3BzPW4sZT10LmNoaWxkKTplPUZuKGUsdCksZTtjYXNlIDEwOnJldHVybiBuPXQucGVuZGluZ1Byb3BzLEVhLmN1cnJlbnR8fHQubWVtb2l6ZWRQcm9wcyE9PW4/KHduKGUsdCxuKSx0Lm1lbW9pemVkUHJvcHM9bixlPXQuY2hpbGQpOmU9Rm4oZSx0KSxlO2Nhc2UgMTE6cmV0dXJuIG49dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sRWEuY3VycmVudHx8bnVsbCE9PW4mJnQubWVtb2l6ZWRQcm9wcyE9PW4/KHduKGUsdCxuKSx0Lm1lbW9pemVkUHJvcHM9bixlPXQuY2hpbGQpOmU9Rm4oZSx0KSxlO2Nhc2UgMTU6cmV0dXJuIG49dC5wZW5kaW5nUHJvcHMsdC5tZW1vaXplZFByb3BzPT09bj9lPUZuKGUsdCk6KHduKGUsdCxuLmNoaWxkcmVuKSx0Lm1lbW9pemVkUHJvcHM9bixlPXQuY2hpbGQpLGU7Y2FzZSAxMzpyZXR1cm4gT24oZSx0LG4pO2Nhc2UgMTI6ZTppZihpPXQudHlwZSxhPXQucGVuZGluZ1Byb3BzLGM9dC5tZW1vaXplZFByb3BzLG89aS5fY3VycmVudFZhbHVlLHM9aS5fY2hhbmdlZEJpdHMsRWEuY3VycmVudHx8MCE9PXN8fGMhPT1hKXtpZih0Lm1lbW9pemVkUHJvcHM9YSx1PWEudW5zdGFibGVfb2JzZXJ2ZWRCaXRzLHZvaWQgMCE9PXUmJm51bGwhPT11fHwodT0xMDczNzQxODIzKSx0LnN0YXRlTm9kZT11LDAhPT0ocyZ1KSlUbih0LGkscyxuKTtlbHNlIGlmKGM9PT1hKXtlPUZuKGUsdCk7YnJlYWsgZX1uPWEuY2hpbGRyZW4sbj1uKG8pLHQuZWZmZWN0VGFnfD0xLHduKGUsdCxuKSxlPXQuY2hpbGR9ZWxzZSBlPUZuKGUsdCk7cmV0dXJuIGU7ZGVmYXVsdDpyKCIxNTYiKX19ZnVuY3Rpb24gSW4oZSl7ZS5lZmZlY3RUYWd8PTR9ZnVuY3Rpb24gTG4oZSx0KXt2YXIgbj10LnBlbmRpbmdQcm9wcztzd2l0Y2godC50YWcpe2Nhc2UgMTpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJuIFR0KHQpLG51bGw7Y2FzZSAzOmNuKHQpLE90KHQpO3ZhciBpPXQuc3RhdGVOb2RlO3JldHVybiBpLnBlbmRpbmdDb250ZXh0JiYoaS5jb250ZXh0PWkucGVuZGluZ0NvbnRleHQsaS5wZW5kaW5nQ29udGV4dD1udWxsKSxudWxsIT09ZSYmbnVsbCE9PWUuY2hpbGR8fChFbih0KSx0LmVmZmVjdFRhZyY9LTMpLFVhKHQpLG51bGw7Y2FzZSA1OmxuKHQpLGk9c24oSWEuY3VycmVudCk7dmFyIG89dC50eXBlO2lmKG51bGwhPT1lJiZudWxsIT10LnN0YXRlTm9kZSl7dmFyIGE9ZS5tZW1vaXplZFByb3BzLHM9dC5zdGF0ZU5vZGUsdT1zbihGYS5jdXJyZW50KTtzPW10KHMsbyxhLG4saSksemEoZSx0LHMsbyxhLG4saSx1KSxlLnJlZiE9PXQucmVmJiYodC5lZmZlY3RUYWd8PTEyOCl9ZWxzZXtpZighbilyZXR1cm4gbnVsbD09PXQuc3RhdGVOb2RlJiZyKCIxNjYiKSxudWxsO2lmKGU9c24oRmEuY3VycmVudCksRW4odCkpbj10LnN0YXRlTm9kZSxvPXQudHlwZSxhPXQubWVtb2l6ZWRQcm9wcyxuW3JpXT10LG5baWldPWEsaT15dChuLG8sYSxlLGkpLHQudXBkYXRlUXVldWU9aSxudWxsIT09aSYmSW4odCk7ZWxzZXtlPWZ0KG8sbixpLGUpLGVbcmldPXQsZVtpaV09bjtlOmZvcihhPXQuY2hpbGQ7bnVsbCE9PWE7KXtpZig1PT09YS50YWd8fDY9PT1hLnRhZyllLmFwcGVuZENoaWxkKGEuc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1hLnRhZyYmbnVsbCE9PWEuY2hpbGQpe2EuY2hpbGQucmV0dXJuPWEsYT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT10KWJyZWFrO2Zvcig7bnVsbD09PWEuc2libGluZzspe2lmKG51bGw9PT1hLnJldHVybnx8YS5yZXR1cm49PT10KWJyZWFrIGU7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuLGE9YS5zaWJsaW5nfWh0KGUsbyxuLGkpLGJ0KG8sbikmJkluKHQpLHQuc3RhdGVOb2RlPWV9bnVsbCE9PXQucmVmJiYodC5lZmZlY3RUYWd8PTEyOCl9cmV0dXJuIG51bGw7Y2FzZSA2OmlmKGUmJm51bGwhPXQuc3RhdGVOb2RlKUdhKGUsdCxlLm1lbW9pemVkUHJvcHMsbik7ZWxzZXtpZigic3RyaW5nIiE9PXR5cGVvZiBuKXJldHVybiBudWxsPT09dC5zdGF0ZU5vZGUmJnIoIjE2NiIpLG51bGw7aT1zbihJYS5jdXJyZW50KSxzbihGYS5jdXJyZW50KSxFbih0KT8oaT10LnN0YXRlTm9kZSxuPXQubWVtb2l6ZWRQcm9wcyxpW3JpXT10LHZ0KGksbikmJkluKHQpKTooaT1kdChuLGkpLGlbcmldPXQsdC5zdGF0ZU5vZGU9aSl9cmV0dXJuIG51bGw7Y2FzZSAxNDpjYXNlIDE2OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDE1OnJldHVybiBudWxsO2Nhc2UgNDpyZXR1cm4gY24odCksVWEodCksbnVsbDtjYXNlIDEzOnJldHVybiBhbih0KSxudWxsO2Nhc2UgMTI6cmV0dXJuIG51bGw7Y2FzZSAwOnIoIjE2NyIpO2RlZmF1bHQ6cigiMTU2Iil9fWZ1bmN0aW9uIFBuKGUsdCl7dmFyIG49dC5zb3VyY2U7bnVsbD09PXQuc3RhY2smJm51bGwhPT1uJiZzZShuKSxudWxsIT09biYmYWUobiksdD10LnZhbHVlLG51bGwhPT1lJiYyPT09ZS50YWcmJmFlKGUpO3RyeXt0JiZ0LnN1cHByZXNzUmVhY3RFcnJvckxvZ2dpbmd8fGNvbnNvbGUuZXJyb3IodCl9Y2F0Y2goZSl7ZSYmZS5zdXBwcmVzc1JlYWN0RXJyb3JMb2dnaW5nfHxjb25zb2xlLmVycm9yKGUpfX1mdW5jdGlvbiBNbihlKXt2YXIgdD1lLnJlZjtpZihudWxsIT09dClpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQpdHJ5e3QobnVsbCl9Y2F0Y2godCl7Sm4oZSx0KX1lbHNlIHQuY3VycmVudD1udWxsfWZ1bmN0aW9uIGpuKGUpe3N3aXRjaCgiZnVuY3Rpb24iPT09dHlwZW9mIHF0JiZxdChlKSxlLnRhZyl7Y2FzZSAyOk1uKGUpO3ZhciB0PWUuc3RhdGVOb2RlO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdC5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7dC5wcm9wcz1lLm1lbW9pemVkUHJvcHMsdC5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsdC5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKHQpe0puKGUsdCl9YnJlYWs7Y2FzZSA1Ok1uKGUpO2JyZWFrO2Nhc2UgNDokbihlKX19ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIDU9PT1lLnRhZ3x8Mz09PWUudGFnfHw0PT09ZS50YWd9ZnVuY3Rpb24gQm4oZSl7ZTp7Zm9yKHZhciB0PWUucmV0dXJuO251bGwhPT10Oyl7aWYoUm4odCkpe3ZhciBuPXQ7YnJlYWsgZX10PXQucmV0dXJufXIoIjE2MCIpLG49dm9pZCAwfXZhciBpPXQ9dm9pZCAwO3N3aXRjaChuLnRhZyl7Y2FzZSA1OnQ9bi5zdGF0ZU5vZGUsaT0hMTticmVhaztjYXNlIDM6Y2FzZSA0OnQ9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxpPSEwO2JyZWFrO2RlZmF1bHQ6cigiMTYxIil9MTYmbi5lZmZlY3RUYWcmJihzdCh0LCIiKSxuLmVmZmVjdFRhZyY9LTE3KTtlOnQ6Zm9yKG49ZTs7KXtmb3IoO251bGw9PT1uLnNpYmxpbmc7KXtpZihudWxsPT09bi5yZXR1cm58fFJuKG4ucmV0dXJuKSl7bj1udWxsO2JyZWFrIGV9bj1uLnJldHVybn1mb3Iobi5zaWJsaW5nLnJldHVybj1uLnJldHVybixuPW4uc2libGluZzs1IT09bi50YWcmJjYhPT1uLnRhZzspe2lmKDImbi5lZmZlY3RUYWcpY29udGludWUgdDtpZihudWxsPT09bi5jaGlsZHx8ND09PW4udGFnKWNvbnRpbnVlIHQ7bi5jaGlsZC5yZXR1cm49bixuPW4uY2hpbGR9aWYoISgyJm4uZWZmZWN0VGFnKSl7bj1uLnN0YXRlTm9kZTticmVhayBlfX1mb3IodmFyIG89ZTs7KXtpZig1PT09by50YWd8fDY9PT1vLnRhZylpZihuKWlmKGkpe3ZhciBhPXQscz1vLnN0YXRlTm9kZSx1PW47OD09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLHUpOmEuaW5zZXJ0QmVmb3JlKHMsdSl9ZWxzZSB0Lmluc2VydEJlZm9yZShvLnN0YXRlTm9kZSxuKTtlbHNlIGk/KGE9dCxzPW8uc3RhdGVOb2RlLDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxhKTphLmFwcGVuZENoaWxkKHMpKTp0LmFwcGVuZENoaWxkKG8uc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1vLnRhZyYmbnVsbCE9PW8uY2hpbGQpe28uY2hpbGQucmV0dXJuPW8sbz1vLmNoaWxkO2NvbnRpbnVlfWlmKG89PT1lKWJyZWFrO2Zvcig7bnVsbD09PW8uc2libGluZzspe2lmKG51bGw9PT1vLnJldHVybnx8by5yZXR1cm49PT1lKXJldHVybjtvPW8ucmV0dXJufW8uc2libGluZy5yZXR1cm49by5yZXR1cm4sbz1vLnNpYmxpbmd9fWZ1bmN0aW9uICRuKGUpe2Zvcih2YXIgdD1lLG49ITEsaT12b2lkIDAsbz12b2lkIDA7Oyl7aWYoIW4pe249dC5yZXR1cm47ZTpmb3IoOzspe3N3aXRjaChudWxsPT09biYmcigiMTYwIiksbi50YWcpe2Nhc2UgNTppPW4uc3RhdGVOb2RlLG89ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0Omk9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxvPSEwO2JyZWFrIGV9bj1uLnJldHVybn1uPSEwfWlmKDU9PT10LnRhZ3x8Nj09PXQudGFnKXtlOmZvcih2YXIgYT10LHM9YTs7KWlmKGpuKHMpLG51bGwhPT1zLmNoaWxkJiY0IT09cy50YWcpcy5jaGlsZC5yZXR1cm49cyxzPXMuY2hpbGQ7ZWxzZXtpZihzPT09YSlicmVhaztmb3IoO251bGw9PT1zLnNpYmxpbmc7KXtpZihudWxsPT09cy5yZXR1cm58fHMucmV0dXJuPT09YSlicmVhayBlO3M9cy5yZXR1cm59cy5zaWJsaW5nLnJldHVybj1zLnJldHVybixzPXMuc2libGluZ31vPyhhPWkscz10LnN0YXRlTm9kZSw4PT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyk6YS5yZW1vdmVDaGlsZChzKSk6aS5yZW1vdmVDaGlsZCh0LnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09dC50YWc/aT10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvOmpuKHQpLG51bGwhPT10LmNoaWxkKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO251bGw9PT10LnNpYmxpbmc7KXtpZihudWxsPT09dC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm47dD10LnJldHVybiw0PT09dC50YWcmJihuPSExKX10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfX1mdW5jdGlvbiBVbihlLHQpe3N3aXRjaCh0LnRhZyl7Y2FzZSAyOmJyZWFrO2Nhc2UgNTp2YXIgbj10LnN0YXRlTm9kZTtpZihudWxsIT1uKXt2YXIgaT10Lm1lbW9pemVkUHJvcHM7ZT1udWxsIT09ZT9lLm1lbW9pemVkUHJvcHM6aTt2YXIgbz10LnR5cGUsYT10LnVwZGF0ZVF1ZXVlO3QudXBkYXRlUXVldWU9bnVsbCxudWxsIT09YSYmKG5baWldPWksZ3QobixhLG8sZSxpKSl9YnJlYWs7Y2FzZSA2Om51bGw9PT10LnN0YXRlTm9kZSYmcigiMTYyIiksdC5zdGF0ZU5vZGUubm9kZVZhbHVlPXQubWVtb2l6ZWRQcm9wczticmVhaztjYXNlIDM6Y2FzZSAxNTpjYXNlIDE2OmJyZWFrO2RlZmF1bHQ6cigiMTYzIil9fWZ1bmN0aW9uIHpuKGUsdCxuKXtuPVF0KG4pLG4udGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPXQudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtocihyKSxQbihlLHQpfSxufWZ1bmN0aW9uIEduKGUsdCxuKXtuPVF0KG4pLG4udGFnPTM7dmFyIHI9ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGwhPT1yJiYiZnVuY3Rpb24iPT09dHlwZW9mIHIuY29tcG9uZW50RGlkQ2F0Y2gmJihuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7bnVsbD09PWlzP2lzPW5ldyBTZXQoW3RoaXNdKTppcy5hZGQodGhpcyk7dmFyIG49dC52YWx1ZSxyPXQuc3RhY2s7UG4oZSx0KSx0aGlzLmNvbXBvbmVudERpZENhdGNoKG4se2NvbXBvbmVudFN0YWNrOm51bGwhPT1yP3I6IiJ9KX0pLG59ZnVuY3Rpb24gVm4oZSx0LG4scixpLG8pe24uZWZmZWN0VGFnfD01MTIsbi5maXJzdEVmZmVjdD1uLmxhc3RFZmZlY3Q9bnVsbCxyPXJuKHIsbiksZT10O2Rve3N3aXRjaChlLnRhZyl7Y2FzZSAzOnJldHVybiBlLmVmZmVjdFRhZ3w9MTAyNCxyPXpuKGUscixvKSx2b2lkIFl0KGUscixvKTtjYXNlIDI6aWYodD1yLG49ZS5zdGF0ZU5vZGUsMD09PSg2NCZlLmVmZmVjdFRhZykmJm51bGwhPT1uJiYiZnVuY3Rpb24iPT09dHlwZW9mIG4uY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09aXN8fCFpcy5oYXMobikpKXJldHVybiBlLmVmZmVjdFRhZ3w9MTAyNCxyPUduKGUsdCxvKSx2b2lkIFl0KGUscixvKX1lPWUucmV0dXJufXdoaWxlKG51bGwhPT1lKX1mdW5jdGlvbiBxbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjpUdChlKTt2YXIgdD1lLmVmZmVjdFRhZztyZXR1cm4gMTAyNCZ0PyhlLmVmZmVjdFRhZz0tMTAyNSZ0fDY0LGUpOm51bGw7Y2FzZSAzOnJldHVybiBjbihlKSxPdChlKSx0PWUuZWZmZWN0VGFnLDEwMjQmdD8oZS5lZmZlY3RUYWc9LTEwMjUmdHw2NCxlKTpudWxsO2Nhc2UgNTpyZXR1cm4gbG4oZSksbnVsbDtjYXNlIDE2OnJldHVybiB0PWUuZWZmZWN0VGFnLDEwMjQmdD8oZS5lZmZlY3RUYWc9LTEwMjUmdHw2NCxlKTpudWxsO2Nhc2UgNDpyZXR1cm4gY24oZSksbnVsbDtjYXNlIDEzOnJldHVybiBhbihlKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEhuKCl7aWYobnVsbCE9PUphKWZvcih2YXIgZT1KYS5yZXR1cm47bnVsbCE9PWU7KXt2YXIgdD1lO3N3aXRjaCh0LnRhZyl7Y2FzZSAyOlR0KHQpO2JyZWFrO2Nhc2UgMzpjbih0KSxPdCh0KTticmVhaztjYXNlIDU6bG4odCk7YnJlYWs7Y2FzZSA0OmNuKHQpO2JyZWFrO2Nhc2UgMTM6YW4odCl9ZT1lLnJldHVybn1ZYT1udWxsLFhhPTAsWmE9LTEsZXM9ITEsSmE9bnVsbCxycz0hMX1mdW5jdGlvbiBXbihlKXtmb3IoOzspe3ZhciB0PWUuYWx0ZXJuYXRlLG49ZS5yZXR1cm4scj1lLnNpYmxpbmc7aWYoMD09PSg1MTImZS5lZmZlY3RUYWcpKXt0PUxuKHQsZSxYYSk7dmFyIGk9ZTtpZigxMDczNzQxODIzPT09WGF8fDEwNzM3NDE4MjMhPT1pLmV4cGlyYXRpb25UaW1lKXt2YXIgbz0wO3N3aXRjaChpLnRhZyl7Y2FzZSAzOmNhc2UgMjp2YXIgYT1pLnVwZGF0ZVF1ZXVlO251bGwhPT1hJiYobz1hLmV4cGlyYXRpb25UaW1lKX1mb3IoYT1pLmNoaWxkO251bGwhPT1hOykwIT09YS5leHBpcmF0aW9uVGltZSYmKDA9PT1vfHxvPmEuZXhwaXJhdGlvblRpbWUpJiYobz1hLmV4cGlyYXRpb25UaW1lKSxhPWEuc2libGluZztpLmV4cGlyYXRpb25UaW1lPW99aWYobnVsbCE9PXQpcmV0dXJuIHQ7aWYobnVsbCE9PW4mJjA9PT0oNTEyJm4uZWZmZWN0VGFnKSYmKG51bGw9PT1uLmZpcnN0RWZmZWN0JiYobi5maXJzdEVmZmVjdD1lLmZpcnN0RWZmZWN0KSxudWxsIT09ZS5sYXN0RWZmZWN0JiYobnVsbCE9PW4ubGFzdEVmZmVjdCYmKG4ubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWUuZmlyc3RFZmZlY3QpLG4ubGFzdEVmZmVjdD1lLmxhc3RFZmZlY3QpLDE8ZS5lZmZlY3RUYWcmJihudWxsIT09bi5sYXN0RWZmZWN0P24ubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWU6bi5maXJzdEVmZmVjdD1lLG4ubGFzdEVmZmVjdD1lKSksbnVsbCE9PXIpcmV0dXJuIHI7aWYobnVsbD09PW4pe3JzPSEwO2JyZWFrfWU9bn1lbHNle2lmKG51bGwhPT0oZT1xbihlLGVzLFhhKSkpcmV0dXJuIGUuZWZmZWN0VGFnJj01MTEsZTtpZihudWxsIT09biYmKG4uZmlyc3RFZmZlY3Q9bi5sYXN0RWZmZWN0PW51bGwsbi5lZmZlY3RUYWd8PTUxMiksbnVsbCE9PXIpcmV0dXJuIHI7aWYobnVsbD09PW4pYnJlYWs7ZT1ufX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBRbihlKXt2YXIgdD1ObihlLmFsdGVybmF0ZSxlLFhhKTtyZXR1cm4gbnVsbD09PXQmJih0PVduKGUpKSxSaS5jdXJyZW50PW51bGwsdH1mdW5jdGlvbiBLbihlLHQsbil7S2EmJnIoIjI0MyIpLEthPSEwLHQ9PT1YYSYmZT09PVlhJiZudWxsIT09SmF8fChIbigpLFlhPWUsWGE9dCxaYT0tMSxKYT1NdChZYS5jdXJyZW50LG51bGwsWGEpLGUucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lPTApO3ZhciBpPSExO2Zvcihlcz0hbnx8WGE8PXFhOzspe3RyeXtpZihuKWZvcig7bnVsbCE9PUphJiYhZHIoKTspSmE9UW4oSmEpO2Vsc2UgZm9yKDtudWxsIT09SmE7KUphPVFuKEphKX1jYXRjaCh0KXtpZihudWxsPT09SmEpaT0hMCxocih0KTtlbHNle251bGw9PT1KYSYmcigiMjcxIiksbj1KYTt2YXIgbz1uLnJldHVybjtpZihudWxsPT09byl7aT0hMCxocih0KTticmVha31WbihlLG8sbix0LGVzLFhhLEhhKSxKYT1XbihuKX19YnJlYWt9aWYoS2E9ITEsaSlyZXR1cm4gbnVsbDtpZihudWxsPT09SmEpe2lmKHJzKXJldHVybiBlLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZT10LGUuY3VycmVudC5hbHRlcm5hdGU7ZXMmJnIoIjI2MiIpLDA8PVphJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5jdXJyZW50LmV4cGlyYXRpb25UaW1lOzAhPT10JiYoMD09PWUucmVtYWluaW5nRXhwaXJhdGlvblRpbWV8fGUucmVtYWluaW5nRXhwaXJhdGlvblRpbWU8dCkmJmlyKGUsdCl9LFphKSxtcihlLmN1cnJlbnQuZXhwaXJhdGlvblRpbWUpfXJldHVybiBudWxsfWZ1bmN0aW9uIEpuKGUsdCl7dmFyIG47ZTp7Zm9yKEthJiYhbnMmJnIoIjI2MyIpLG49ZS5yZXR1cm47bnVsbCE9PW47KXtzd2l0Y2gobi50YWcpe2Nhc2UgMjp2YXIgaT1uLnN0YXRlTm9kZTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIG4udHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tQ2F0Y2h8fCJmdW5jdGlvbiI9PT10eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1pc3x8IWlzLmhhcyhpKSkpe2U9cm4odCxlKSxlPUduKG4sZSwxKSxKdChuLGUsMSksWm4obiwxKSxuPXZvaWQgMDticmVhayBlfWJyZWFrO2Nhc2UgMzplPXJuKHQsZSksZT16bihuLGUsMSksSnQobixlLDEpLFpuKG4sMSksbj12b2lkIDA7YnJlYWsgZX1uPW4ucmV0dXJufTM9PT1lLnRhZyYmKG49cm4odCxlKSxuPXpuKGUsbiwxKSxKdChlLG4sMSksWm4oZSwxKSksbj12b2lkIDB9cmV0dXJuIG59ZnVuY3Rpb24gWW4oKXt2YXIgZT0yKzI1KigxKygoZXIoKS0yKzUwMCkvMjV8MCkpO3JldHVybiBlPD1XYSYmKGU9V2ErMSksV2E9ZX1mdW5jdGlvbiBYbihlLHQpe3JldHVybiBlPTAhPT1RYT9RYTpLYT9ucz8xOlhhOjEmdC5tb2RlP2JzPzIrMTAqKDErKChlLTIrMTUpLzEwfDApKToyKzI1KigxKygoZS0yKzUwMCkvMjV8MCkpOjEsYnMmJigwPT09ZnN8fGU+ZnMpJiYoZnM9ZSksZX1mdW5jdGlvbiBabihlLHQpe2Zvcig7bnVsbCE9PWU7KXtpZigoMD09PWUuZXhwaXJhdGlvblRpbWV8fGUuZXhwaXJhdGlvblRpbWU+dCkmJihlLmV4cGlyYXRpb25UaW1lPXQpLG51bGwhPT1lLmFsdGVybmF0ZSYmKDA9PT1lLmFsdGVybmF0ZS5leHBpcmF0aW9uVGltZXx8ZS5hbHRlcm5hdGUuZXhwaXJhdGlvblRpbWU+dCkmJihlLmFsdGVybmF0ZS5leHBpcmF0aW9uVGltZT10KSxudWxsPT09ZS5yZXR1cm4pe2lmKDMhPT1lLnRhZylicmVhazt2YXIgbj1lLnN0YXRlTm9kZTshS2EmJjAhPT1YYSYmdDxYYSYmSG4oKTt2YXIgaT1uLmN1cnJlbnQuZXhwaXJhdGlvblRpbWU7S2EmJiFucyYmWWE9PT1ufHxpcihuLGkpLEVzPkNzJiZyKCIxODUiKX1lPWUucmV0dXJufX1mdW5jdGlvbiBlcigpe3JldHVybiBIYT1nYSgpLVZhLHFhPTIrKEhhLzEwfDApfWZ1bmN0aW9uIHRyKGUpe3ZhciB0PVFhO1FhPTIrMjUqKDErKChlcigpLTIrNTAwKS8yNXwwKSk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtRYT10fX1mdW5jdGlvbiBucihlLHQsbixyLGkpe3ZhciBvPVFhO1FhPTE7dHJ5e3JldHVybiBlKHQsbixyLGkpfWZpbmFsbHl7UWE9b319ZnVuY3Rpb24gcnIoZSl7aWYoMCE9PXNzKXtpZihlPnNzKXJldHVybjt2YSh1cyl9dmFyIHQ9Z2EoKS1WYTtzcz1lLHVzPXlhKGFyLHt0aW1lb3V0OjEwKihlLTIpLXR9KX1mdW5jdGlvbiBpcihlLHQpe2lmKG51bGw9PT1lLm5leHRTY2hlZHVsZWRSb290KWUucmVtYWluaW5nRXhwaXJhdGlvblRpbWU9dCxudWxsPT09YXM/KG9zPWFzPWUsZS5uZXh0U2NoZWR1bGVkUm9vdD1lKTooYXM9YXMubmV4dFNjaGVkdWxlZFJvb3Q9ZSxhcy5uZXh0U2NoZWR1bGVkUm9vdD1vcyk7ZWxzZXt2YXIgbj1lLnJlbWFpbmluZ0V4cGlyYXRpb25UaW1lOygwPT09bnx8dDxuKSYmKGUucmVtYWluaW5nRXhwaXJhdGlvblRpbWU9dCl9Y3N8fCh5cz92cyYmKGxzPWUscHM9MSxwcihlLDEsITEpKToxPT09dD9zcigpOnJyKHQpKX1mdW5jdGlvbiBvcigpe3ZhciBlPTAsdD1udWxsO2lmKG51bGwhPT1hcylmb3IodmFyIG49YXMsaT1vcztudWxsIT09aTspe3ZhciBvPWkucmVtYWluaW5nRXhwaXJhdGlvblRpbWU7aWYoMD09PW8pe2lmKChudWxsPT09bnx8bnVsbD09PWFzKSYmcigiMjQ0IiksaT09PWkubmV4dFNjaGVkdWxlZFJvb3Qpe29zPWFzPWkubmV4dFNjaGVkdWxlZFJvb3Q9bnVsbDticmVha31pZihpPT09b3Mpb3M9bz1pLm5leHRTY2hlZHVsZWRSb290LGFzLm5leHRTY2hlZHVsZWRSb290PW8saS5uZXh0U2NoZWR1bGVkUm9vdD1udWxsO2Vsc2V7aWYoaT09PWFzKXthcz1uLGFzLm5leHRTY2hlZHVsZWRSb290PW9zLGkubmV4dFNjaGVkdWxlZFJvb3Q9bnVsbDticmVha31uLm5leHRTY2hlZHVsZWRSb290PWkubmV4dFNjaGVkdWxlZFJvb3QsaS5uZXh0U2NoZWR1bGVkUm9vdD1udWxsfWk9bi5uZXh0U2NoZWR1bGVkUm9vdH1lbHNle2lmKCgwPT09ZXx8bzxlKSYmKGU9byx0PWkpLGk9PT1hcylicmVhaztuPWksaT1pLm5leHRTY2hlZHVsZWRSb290fX1uPWxzLG51bGwhPT1uJiZuPT09dCYmMT09PWU/RXMrKzpFcz0wLGxzPXQscHM9ZX1mdW5jdGlvbiBhcihlKXt1cigwLCEwLGUpfWZ1bmN0aW9uIHNyKCl7dXIoMSwhMSxudWxsKX1mdW5jdGlvbiB1cihlLHQsbil7aWYoZ3M9bixvcigpLHQpZm9yKDtudWxsIT09bHMmJjAhPT1wcyYmKDA9PT1lfHxlPj1wcykmJighZHN8fGVyKCk+PXBzKTspZXIoKSxwcihscyxwcywhZHMpLG9yKCk7ZWxzZSBmb3IoO251bGwhPT1scyYmMCE9PXBzJiYoMD09PWV8fGU+PXBzKTspcHIobHMscHMsITEpLG9yKCk7bnVsbCE9PWdzJiYoc3M9MCx1cz0tMSksMCE9PXBzJiZycihwcyksZ3M9bnVsbCxkcz0hMSxscigpfWZ1bmN0aW9uIGNyKGUsdCl7Y3MmJnIoIjI1MyIpLGxzPWUscHM9dCxwcihlLHQsITEpLHNyKCksbHIoKX1mdW5jdGlvbiBscigpe2lmKEVzPTAsbnVsbCE9PXhzKXt2YXIgZT14czt4cz1udWxsO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO3RyeXtuLl9vbkNvbXBsZXRlKCl9Y2F0Y2goZSl7aHN8fChocz0hMCxtcz1lKX19fWlmKGhzKXRocm93IGU9bXMsbXM9bnVsbCxocz0hMSxlfWZ1bmN0aW9uIHByKGUsdCxuKXtjcyYmcigiMjQ1IiksY3M9ITAsbj8obj1lLmZpbmlzaGVkV29yayxudWxsIT09bj9mcihlLG4sdCk6KGUuZmluaXNoZWRXb3JrPW51bGwsbnVsbCE9PShuPUtuKGUsdCwhMCkpJiYoZHIoKT9lLmZpbmlzaGVkV29yaz1uOmZyKGUsbix0KSkpKToobj1lLmZpbmlzaGVkV29yayxudWxsIT09bj9mcihlLG4sdCk6KGUuZmluaXNoZWRXb3JrPW51bGwsbnVsbCE9PShuPUtuKGUsdCwhMSkpJiZmcihlLG4sdCkpKSxjcz0hMX1mdW5jdGlvbiBmcihlLHQsbil7dmFyIGk9ZS5maXJzdEJhdGNoO2lmKG51bGwhPT1pJiZpLl9leHBpcmF0aW9uVGltZTw9biYmKG51bGw9PT14cz94cz1baV06eHMucHVzaChpKSxpLl9kZWZlcikpcmV0dXJuIGUuZmluaXNoZWRXb3JrPXQsdm9pZChlLnJlbWFpbmluZ0V4cGlyYXRpb25UaW1lPTApO2lmKGUuZmluaXNoZWRXb3JrPW51bGwsbnM9S2E9ITAsbj10LnN0YXRlTm9kZSxuLmN1cnJlbnQ9PT10JiZyKCIxNzciKSxpPW4ucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lLDA9PT1pJiZyKCIyNjEiKSxuLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZT0wLGVyKCksUmkuY3VycmVudD1udWxsLDE8dC5lZmZlY3RUYWcpaWYobnVsbCE9PXQubGFzdEVmZmVjdCl7dC5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9dDt2YXIgbz10LmZpcnN0RWZmZWN0fWVsc2Ugbz10O2Vsc2Ugbz10LmZpcnN0RWZmZWN0O2hhPU9vO3ZhciBhPVJyKCk7aWYoS2UoYSkpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBhKXZhciBzPXtzdGFydDphLnNlbGVjdGlvblN0YXJ0LGVuZDphLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgdT13aW5kb3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYodSYmMCE9PXUucmFuZ2VDb3VudCl7cz11LmFuY2hvck5vZGU7dmFyIGM9dS5hbmNob3JPZmZzZXQsbD11LmZvY3VzTm9kZTt1PXUuZm9jdXNPZmZzZXQ7dHJ5e3Mubm9kZVR5cGUsbC5ub2RlVHlwZX1jYXRjaChlKXtzPW51bGw7YnJlYWsgZX12YXIgcD0wLGY9LTEsZD0tMSxoPTAsbT0wLGc9YSx5PW51bGw7dDpmb3IoOzspe2Zvcih2YXIgdjtnIT09c3x8MCE9PWMmJjMhPT1nLm5vZGVUeXBlfHwoZj1wK2MpLGchPT1sfHwwIT09dSYmMyE9PWcubm9kZVR5cGV8fChkPXArdSksMz09PWcubm9kZVR5cGUmJihwKz1nLm5vZGVWYWx1ZS5sZW5ndGgpLG51bGwhPT0odj1nLmZpcnN0Q2hpbGQpOyl5PWcsZz12O2Zvcig7Oyl7aWYoZz09PWEpYnJlYWsgdDtpZih5PT09cyYmKytoPT09YyYmKGY9cCkseT09PWwmJisrbT09PXUmJihkPXApLG51bGwhPT0odj1nLm5leHRTaWJsaW5nKSlicmVhaztnPXkseT1nLnBhcmVudE5vZGV9Zz12fXM9LTE9PT1mfHwtMT09PWQ/bnVsbDp7c3RhcnQ6ZixlbmQ6ZH19ZWxzZSBzPW51bGx9cz1zfHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBzPW51bGw7Zm9yKG1hPXtmb2N1c2VkRWxlbTphLHNlbGVjdGlvblJhbmdlOnN9LFVlKCExKSx0cz1vO251bGwhPT10czspe2E9ITEscz12b2lkIDA7dHJ5e2Zvcig7bnVsbCE9PXRzOyl7aWYoMjU2JnRzLmVmZmVjdFRhZyl7dmFyIGI9dHMuYWx0ZXJuYXRlO3N3aXRjaChjPXRzLGMudGFnKXtjYXNlIDI6aWYoMjU2JmMuZWZmZWN0VGFnJiZudWxsIT09Yil7dmFyIHg9Yi5tZW1vaXplZFByb3BzLEM9Yi5tZW1vaXplZFN0YXRlLEU9Yy5zdGF0ZU5vZGU7RS5wcm9wcz1jLm1lbW9pemVkUHJvcHMsRS5zdGF0ZT1jLm1lbW9pemVkU3RhdGU7dmFyIEQ9RS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh4LEMpO0UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9RH1icmVhaztjYXNlIDM6Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6YnJlYWs7ZGVmYXVsdDpyKCIxNjMiKX19dHM9dHMubmV4dEVmZmVjdH19Y2F0Y2goZSl7YT0hMCxzPWV9YSYmKG51bGw9PT10cyYmcigiMTc4IiksSm4odHMscyksbnVsbCE9PXRzJiYodHM9dHMubmV4dEVmZmVjdCkpfWZvcih0cz1vO251bGwhPT10czspe2I9ITEseD12b2lkIDA7dHJ5e2Zvcig7bnVsbCE9PXRzOyl7dmFyIHc9dHMuZWZmZWN0VGFnO2lmKDE2JncmJnN0KHRzLnN0YXRlTm9kZSwiIiksMTI4Jncpe3ZhciBTPXRzLmFsdGVybmF0ZTtpZihudWxsIT09Uyl7dmFyIGs9Uy5yZWY7bnVsbCE9PWsmJigiZnVuY3Rpb24iPT09dHlwZW9mIGs/ayhudWxsKTprLmN1cnJlbnQ9bnVsbCl9fXN3aXRjaCgxNCZ3KXtjYXNlIDI6Qm4odHMpLHRzLmVmZmVjdFRhZyY9LTM7YnJlYWs7Y2FzZSA2OkJuKHRzKSx0cy5lZmZlY3RUYWcmPS0zLFVuKHRzLmFsdGVybmF0ZSx0cyk7YnJlYWs7Y2FzZSA0OlVuKHRzLmFsdGVybmF0ZSx0cyk7YnJlYWs7Y2FzZSA4OkM9dHMsJG4oQyksQy5yZXR1cm49bnVsbCxDLmNoaWxkPW51bGwsQy5hbHRlcm5hdGUmJihDLmFsdGVybmF0ZS5jaGlsZD1udWxsLEMuYWx0ZXJuYXRlLnJldHVybj1udWxsKX10cz10cy5uZXh0RWZmZWN0fX1jYXRjaChlKXtiPSEwLHg9ZX1iJiYobnVsbD09PXRzJiZyKCIxNzgiKSxKbih0cyx4KSxudWxsIT09dHMmJih0cz10cy5uZXh0RWZmZWN0KSl9aWYoaz1tYSxTPVJyKCksdz1rLmZvY3VzZWRFbGVtLGI9ay5zZWxlY3Rpb25SYW5nZSxTIT09dyYmJHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHcpKXtLZSh3KSYmKFM9Yi5zdGFydCxrPWIuZW5kLHZvaWQgMD09PWsmJihrPVMpLCJzZWxlY3Rpb25TdGFydCJpbiB3Pyh3LnNlbGVjdGlvblN0YXJ0PVMsdy5zZWxlY3Rpb25FbmQ9TWF0aC5taW4oayx3LnZhbHVlLmxlbmd0aCkpOndpbmRvdy5nZXRTZWxlY3Rpb24mJihTPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSx4PXdbSSgpXS5sZW5ndGgsaz1NYXRoLm1pbihiLnN0YXJ0LHgpLGI9dm9pZCAwPT09Yi5lbmQ/azpNYXRoLm1pbihiLmVuZCx4KSwhUy5leHRlbmQmJms+YiYmKHg9YixiPWssaz14KSx4PVFlKHcsayksQz1RZSh3LGIpLHgmJkMmJigxIT09Uy5yYW5nZUNvdW50fHxTLmFuY2hvck5vZGUhPT14Lm5vZGV8fFMuYW5jaG9yT2Zmc2V0IT09eC5vZmZzZXR8fFMuZm9jdXNOb2RlIT09Qy5ub2RlfHxTLmZvY3VzT2Zmc2V0IT09Qy5vZmZzZXQpJiYoRT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLEUuc2V0U3RhcnQoeC5ub2RlLHgub2Zmc2V0KSxTLnJlbW92ZUFsbFJhbmdlcygpLGs+Yj8oUy5hZGRSYW5nZShFKSxTLmV4dGVuZChDLm5vZGUsQy5vZmZzZXQpKTooRS5zZXRFbmQoQy5ub2RlLEMub2Zmc2V0KSxTLmFkZFJhbmdlKEUpKSkpKSxTPVtdO2ZvcihrPXc7az1rLnBhcmVudE5vZGU7KTE9PT1rLm5vZGVUeXBlJiZTLnB1c2goe2VsZW1lbnQ6ayxsZWZ0Omsuc2Nyb2xsTGVmdCx0b3A6ay5zY3JvbGxUb3B9KTtmb3Iody5mb2N1cygpLHc9MDt3PFMubGVuZ3RoO3crKylrPVNbd10say5lbGVtZW50LnNjcm9sbExlZnQ9ay5sZWZ0LGsuZWxlbWVudC5zY3JvbGxUb3A9ay50b3B9Zm9yKG1hPW51bGwsVWUoaGEpLGhhPW51bGwsbi5jdXJyZW50PXQsdHM9bztudWxsIT09dHM7KXtvPSExLHc9dm9pZCAwO3RyeXtmb3IoUz1pO251bGwhPT10czspe3ZhciBBPXRzLmVmZmVjdFRhZztpZigzNiZBKXt2YXIgXz10cy5hbHRlcm5hdGU7c3dpdGNoKGs9dHMsYj1TLGsudGFnKXtjYXNlIDI6dmFyIFQ9ay5zdGF0ZU5vZGU7aWYoNCZrLmVmZmVjdFRhZylpZihudWxsPT09XylULnByb3BzPWsubWVtb2l6ZWRQcm9wcyxULnN0YXRlPWsubWVtb2l6ZWRTdGF0ZSxULmNvbXBvbmVudERpZE1vdW50KCk7ZWxzZXt2YXIgTz1fLm1lbW9pemVkUHJvcHMsRj1fLm1lbW9pemVkU3RhdGU7VC5wcm9wcz1rLm1lbW9pemVkUHJvcHMsVC5zdGF0ZT1rLm1lbW9pemVkU3RhdGUsVC5jb21wb25lbnREaWRVcGRhdGUoTyxGLFQuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBOPWsudXBkYXRlUXVldWU7bnVsbCE9PU4mJihULnByb3BzPWsubWVtb2l6ZWRQcm9wcyxULnN0YXRlPWsubWVtb2l6ZWRTdGF0ZSxubihrLE4sVCxiKSk7YnJlYWs7Y2FzZSAzOnZhciBMPWsudXBkYXRlUXVldWU7aWYobnVsbCE9PUwpe2lmKHg9bnVsbCxudWxsIT09ay5jaGlsZClzd2l0Y2goay5jaGlsZC50YWcpe2Nhc2UgNTp4PWsuY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMjp4PWsuY2hpbGQuc3RhdGVOb2RlfW5uKGssTCx4LGIpfWJyZWFrO2Nhc2UgNTp2YXIgUD1rLnN0YXRlTm9kZTtudWxsPT09XyYmNCZrLmVmZmVjdFRhZyYmYnQoay50eXBlLGsubWVtb2l6ZWRQcm9wcykmJlAuZm9jdXMoKTticmVhaztjYXNlIDY6Y2FzZSA0OmNhc2UgMTU6Y2FzZSAxNjpicmVhaztkZWZhdWx0OnIoIjE2MyIpfX1pZigxMjgmQSl7az12b2lkIDA7dmFyIE09dHMucmVmO2lmKG51bGwhPT1NKXt2YXIgaj10cy5zdGF0ZU5vZGU7c3dpdGNoKHRzLnRhZyl7Y2FzZSA1Oms9ajticmVhaztkZWZhdWx0Oms9an0iZnVuY3Rpb24iPT09dHlwZW9mIE0/TShrKTpNLmN1cnJlbnQ9a319dmFyIFI9dHMubmV4dEVmZmVjdDt0cy5uZXh0RWZmZWN0PW51bGwsdHM9Un19Y2F0Y2goZSl7bz0hMCx3PWV9byYmKG51bGw9PT10cyYmcigiMTc4IiksSm4odHMsdyksbnVsbCE9PXRzJiYodHM9dHMubmV4dEVmZmVjdCkpfUthPW5zPSExLCJmdW5jdGlvbiI9PT10eXBlb2YgVnQmJlZ0KHQuc3RhdGVOb2RlKSx0PW4uY3VycmVudC5leHBpcmF0aW9uVGltZSwwPT09dCYmKGlzPW51bGwpLGUucmVtYWluaW5nRXhwaXJhdGlvblRpbWU9dH1mdW5jdGlvbiBkcigpe3JldHVybiEobnVsbD09PWdzfHxncy50aW1lUmVtYWluaW5nKCk+RHMpJiYoZHM9ITApfWZ1bmN0aW9uIGhyKGUpe251bGw9PT1scyYmcigiMjQ2IiksbHMucmVtYWluaW5nRXhwaXJhdGlvblRpbWU9MCxoc3x8KGhzPSEwLG1zPWUpfWZ1bmN0aW9uIG1yKGUpe251bGw9PT1scyYmcigiMjQ2IiksbHMucmVtYWluaW5nRXhwaXJhdGlvblRpbWU9ZX1mdW5jdGlvbiBncihlLHQpe3ZhciBuPXlzO3lzPSEwO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5eyh5cz1uKXx8Y3N8fHNyKCl9fWZ1bmN0aW9uIHlyKGUsdCl7aWYoeXMmJiF2cyl7dnM9ITA7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7dnM9ITF9fXJldHVybiBlKHQpfWZ1bmN0aW9uIHZyKGUsdCl7Y3MmJnIoIjE4NyIpO3ZhciBuPXlzO3lzPSEwO3RyeXtyZXR1cm4gbnIoZSx0KX1maW5hbGx5e3lzPW4sc3IoKX19ZnVuY3Rpb24gYnIoZSl7dmFyIHQ9eXM7eXM9ITA7dHJ5e25yKGUpfWZpbmFsbHl7KHlzPXQpfHxjc3x8dXIoMSwhMSxudWxsKX19ZnVuY3Rpb24geHIoZSx0LG4saSxvKXt2YXIgYT10LmN1cnJlbnQ7aWYobil7bj1uLl9yZWFjdEludGVybmFsRmliZXI7dmFyIHM7ZTp7Zm9yKDI9PT1JZShuKSYmMj09PW4udGFnfHxyKCIxNzAiKSxzPW47MyE9PXMudGFnOyl7aWYoX3Qocykpe3M9cy5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgZX0ocz1zLnJldHVybil8fHIoIjE3MSIpfXM9cy5zdGF0ZU5vZGUuY29udGV4dH1uPV90KG4pP050KG4scyk6c31lbHNlIG49VXI7cmV0dXJuIG51bGw9PT10LmNvbnRleHQ/dC5jb250ZXh0PW46dC5wZW5kaW5nQ29udGV4dD1uLHQ9byxvPVF0KGkpLG8ucGF5bG9hZD17ZWxlbWVudDplfSx0PXZvaWQgMD09PXQ/bnVsbDp0LG51bGwhPT10JiYoby5jYWxsYmFjaz10KSxKdChhLG8saSksWm4oYSxpKSxpfWZ1bmN0aW9uIENyKGUpe3ZhciB0PWUuX3JlYWN0SW50ZXJuYWxGaWJlcjtyZXR1cm4gdm9pZCAwPT09dCYmKCJmdW5jdGlvbiI9PT10eXBlb2YgZS5yZW5kZXI/cigiMTg4Iik6cigiMjY4IixPYmplY3Qua2V5cyhlKSkpLGU9TWUodCksbnVsbD09PWU/bnVsbDplLnN0YXRlTm9kZX1mdW5jdGlvbiBFcihlLHQsbixyKXt2YXIgaT10LmN1cnJlbnQ7cmV0dXJuIGk9WG4oZXIoKSxpKSx4cihlLHQsbixpLHIpfWZ1bmN0aW9uIERyKGUpe2lmKGU9ZS5jdXJyZW50LCFlLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1OmRlZmF1bHQ6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiB3cihlKXt2YXIgdD1lLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO3JldHVybiBHdChNcih7fSxlLHtmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1NZShlKSxudWxsPT09ZT9udWxsOmUuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gdD90KGUpOm51bGx9fSkpfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6VWksa2V5Om51bGw9PXI/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fWZ1bmN0aW9uIGtyKGUpe3RoaXMuX2V4cGlyYXRpb25UaW1lPVluKCksdGhpcy5fcm9vdD1lLHRoaXMuX2NhbGxiYWNrcz10aGlzLl9uZXh0PW51bGwsdGhpcy5faGFzQ2hpbGRyZW49dGhpcy5fZGlkQ29tcGxldGU9ITEsdGhpcy5fY2hpbGRyZW49bnVsbCx0aGlzLl9kZWZlcj0hMH1mdW5jdGlvbiBBcigpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2RpZENvbW1pdD0hMSx0aGlzLl9vbkNvbW1pdD10aGlzLl9vbkNvbW1pdC5iaW5kKHRoaXMpfWZ1bmN0aW9uIF9yKGUsdCxuKXt0aGlzLl9pbnRlcm5hbFJvb3Q9VXQoZSx0LG4pfWZ1bmN0aW9uIFRyKGUpe3JldHVybiEoIWV8fDEhPT1lLm5vZGVUeXBlJiY5IT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlJiYoOCE9PWUubm9kZVR5cGV8fCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIiE9PWUubm9kZVZhbHVlKSl9ZnVuY3Rpb24gT3IoZSx0KXtpZih0fHwodD1lPzk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUuZmlyc3RDaGlsZDpudWxsLHQ9ISghdHx8MSE9PXQubm9kZVR5cGV8fCF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1yZWFjdHJvb3QiKSkpLCF0KWZvcih2YXIgbjtuPWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKG4pO3JldHVybiBuZXcgX3IoZSwhMSx0KX1mdW5jdGlvbiBGcihlLHQsbixpLG8pe1RyKG4pfHxyKCIyMDAiKTt2YXIgYT1uLl9yZWFjdFJvb3RDb250YWluZXI7aWYoYSl7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBvKXt2YXIgcz1vO289ZnVuY3Rpb24oKXt2YXIgZT1EcihhLl9pbnRlcm5hbFJvb3QpO3MuY2FsbChlKX19bnVsbCE9ZT9hLmxlZ2FjeV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihlLHQsbyk6YS5yZW5kZXIodCxvKX1lbHNle2lmKGE9bi5fcmVhY3RSb290Q29udGFpbmVyPU9yKG4saSksImZ1bmN0aW9uIj09PXR5cGVvZiBvKXt2YXIgdT1vO289ZnVuY3Rpb24oKXt2YXIgZT1EcihhLl9pbnRlcm5hbFJvb3QpO3UuY2FsbChlKX19eXIoZnVuY3Rpb24oKXtudWxsIT1lP2EubGVnYWN5X3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKGUsdCxvKTphLnJlbmRlcih0LG8pfSl9cmV0dXJuIERyKGEuX2ludGVybmFsUm9vdCl9ZnVuY3Rpb24gTnIoZSx0KXt2YXIgbj0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtyZXR1cm4gVHIodCl8fHIoIjIwMCIpLFNyKGUsdCxudWxsLG4pfXZhciBJcj1uKDk5KSxMcj1uKDApLFByPW4oMzE1KSxNcj1uKDU0KSxqcj1uKDEwMCksUnI9bigzMTYpLEJyPW4oMzE3KSwkcj1uKDMxOCksVXI9bigxNTIpO0xyfHxyKCIyMjciKTt2YXIgenI9e19jYXVnaHRFcnJvcjpudWxsLF9oYXNDYXVnaHRFcnJvcjohMSxfcmV0aHJvd0Vycm9yOm51bGwsX2hhc1JldGhyb3dFcnJvcjohMSxpbnZva2VHdWFyZGVkQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0LG4scixvLGEscyx1LGMpe2kuYXBwbHkoenIsYXJndW1lbnRzKX0saW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyx1KXtpZih6ci5pbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcyxhcmd1bWVudHMpLHpyLmhhc0NhdWdodEVycm9yKCkpe3ZhciBjPXpyLmNsZWFyQ2F1Z2h0RXJyb3IoKTt6ci5faGFzUmV0aHJvd0Vycm9yfHwoenIuX2hhc1JldGhyb3dFcnJvcj0hMCx6ci5fcmV0aHJvd0Vycm9yPWMpfX0scmV0aHJvd0NhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG8uYXBwbHkoenIsYXJndW1lbnRzKX0saGFzQ2F1Z2h0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4genIuX2hhc0NhdWdodEVycm9yfSxjbGVhckNhdWdodEVycm9yOmZ1bmN0aW9uKCl7aWYoenIuX2hhc0NhdWdodEVycm9yKXt2YXIgZT16ci5fY2F1Z2h0RXJyb3I7cmV0dXJuIHpyLl9jYXVnaHRFcnJvcj1udWxsLHpyLl9oYXNDYXVnaHRFcnJvcj0hMSxlfXIoIjE5OCIpfX0sR3I9bnVsbCxWcj17fSxxcj1bXSxIcj17fSxXcj17fSxRcj17fSxLcj17cGx1Z2luczpxcixldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6SHIscmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM6V3IscmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczpRcixwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOm51bGwsaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjp1LGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTpjfSxKcj1udWxsLFlyPW51bGwsWHI9bnVsbCxacj1udWxsLGVpPXtpbmplY3RFdmVudFBsdWdpbk9yZGVyOnUsaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOmN9LHRpPXtpbmplY3Rpb246ZWksZ2V0TGlzdGVuZXI6ZyxydW5FdmVudHNJbkJhdGNoOnkscnVuRXh0cmFjdGVkRXZlbnRzSW5CYXRjaDp2fSxuaT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxyaT0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIituaSxpaT0iX19yZWFjdEV2ZW50SGFuZGxlcnMkIituaSxvaT17cHJlY2FjaGVGaWJlck5vZGU6ZnVuY3Rpb24oZSx0KXt0W3JpXT1lfSxnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTpiLGdldEluc3RhbmNlRnJvbU5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZVtyaV0sIWV8fDUhPT1lLnRhZyYmNiE9PWUudGFnP251bGw6ZX0sZ2V0Tm9kZUZyb21JbnN0YW5jZTp4LGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGU6Qyx1cGRhdGVGaWJlclByb3BzOmZ1bmN0aW9uKGUsdCl7ZVtpaV09dH19LGFpPXthY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzOlQsYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQ6ZnVuY3Rpb24oZSl7ZihlLGspfSxhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6TyxhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczpmdW5jdGlvbihlKXtmKGUsXyl9fSxzaT17YW5pbWF0aW9uZW5kOkYoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpGKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFydDpGKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6RigiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25FbmQiKX0sdWk9e30sY2k9e307UHIuY2FuVXNlRE9NJiYoY2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBzaS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBzaS5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBzaS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgc2kudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTt2YXIgbGk9TigiYW5pbWF0aW9uZW5kIikscGk9TigiYW5pbWF0aW9uaXRlcmF0aW9uIiksZmk9TigiYW5pbWF0aW9uc3RhcnQiKSxkaT1OKCJ0cmFuc2l0aW9uZW5kIiksaGk9ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksbWk9bnVsbCxnaT17X3Jvb3Q6bnVsbCxfc3RhcnRUZXh0Om51bGwsX2ZhbGxiYWNrVGV4dDpudWxsfSx5aT0iZGlzcGF0Y2hDb25maWcgX3RhcmdldEluc3QgbmF0aXZlRXZlbnQgaXNEZWZhdWx0UHJldmVudGVkIGlzUHJvcGFnYXRpb25TdG9wcGVkIF9kaXNwYXRjaExpc3RlbmVycyBfZGlzcGF0Y2hJbnN0YW5jZXMiLnNwbGl0KCIgIiksdmk9e3R5cGU6bnVsbCx0YXJnZXQ6bnVsbCxjdXJyZW50VGFyZ2V0OmpyLnRoYXRSZXR1cm5zTnVsbCxldmVudFBoYXNlOm51bGwsYnViYmxlczpudWxsLGNhbmNlbGFibGU6bnVsbCx0aW1lU3RhbXA6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOm51bGwsaXNUcnVzdGVkOm51bGx9O01yKE0ucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKToidW5rbm93biIhPT10eXBlb2YgZS5yZXR1cm5WYWx1ZSYmKGUucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWpyLnRoYXRSZXR1cm5zVHJ1ZSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6InVua25vd24iIT09dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9anIudGhhdFJldHVybnNUcnVlKX0scGVyc2lzdDpmdW5jdGlvbigpe3RoaXMuaXNQZXJzaXN0ZW50PWpyLnRoYXRSZXR1cm5zVHJ1ZX0saXNQZXJzaXN0ZW50OmpyLnRoYXRSZXR1cm5zRmFsc2UsZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKGUgaW4gdCl0aGlzW2VdPW51bGw7Zm9yKHQ9MDt0PHlpLmxlbmd0aDt0KyspdGhpc1t5aVt0XV09bnVsbH19KSxNLkludGVyZmFjZT12aSxNLmV4dGVuZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7fWZ1bmN0aW9uIG4oKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHI9dGhpczt0LnByb3RvdHlwZT1yLnByb3RvdHlwZTt2YXIgaT1uZXcgdDtyZXR1cm4gTXIoaSxuLnByb3RvdHlwZSksbi5wcm90b3R5cGU9aSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4uSW50ZXJmYWNlPU1yKHt9LHIuSW50ZXJmYWNlLGUpLG4uZXh0ZW5kPXIuZXh0ZW5kLEIobiksbn0sQihNKTt2YXIgYmk9TS5leHRlbmQoe2RhdGE6bnVsbH0pLHhpPU0uZXh0ZW5kKHtkYXRhOm51bGx9KSxDaT1bOSwxMywyNywzMl0sRWk9UHIuY2FuVXNlRE9NJiYiQ29tcG9zaXRpb25FdmVudCJpbiB3aW5kb3csRGk9bnVsbDtQci5jYW5Vc2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihEaT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciB3aT1Qci5jYW5Vc2VET00mJiJUZXh0RXZlbnQiaW4gd2luZG93JiYhRGksU2k9UHIuY2FuVXNlRE9NJiYoIUVpfHxEaSYmODxEaSYmMTE+PURpKSxraT1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxBaT17YmVmb3JlSW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkJlZm9yZUlucHV0IixjYXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXX0sY29tcG9zaXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uRW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb25lbmQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9LGNvbXBvc2l0aW9uU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uU3RhcnQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9LGNvbXBvc2l0aW9uVXBkYXRlOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblVwZGF0ZSIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25VcGRhdGVDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNvbXBvc2l0aW9udXBkYXRlIGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpfX0sX2k9ITEsVGk9ITEsT2k9e2V2ZW50VHlwZXM6QWksZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT12b2lkIDAsbz12b2lkIDA7aWYoRWkpZTp7c3dpdGNoKGUpe2Nhc2UiY29tcG9zaXRpb25zdGFydCI6aT1BaS5jb21wb3NpdGlvblN0YXJ0O2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbmVuZCI6aT1BaS5jb21wb3NpdGlvbkVuZDticmVhayBlO2Nhc2UiY29tcG9zaXRpb251cGRhdGUiOmk9QWkuY29tcG9zaXRpb25VcGRhdGU7YnJlYWsgZX1pPXZvaWQgMH1lbHNlIFRpPyQoZSxuKSYmKGk9QWkuY29tcG9zaXRpb25FbmQpOiJrZXlkb3duIj09PWUmJjIyOT09PW4ua2V5Q29kZSYmKGk9QWkuY29tcG9zaXRpb25TdGFydCk7cmV0dXJuIGk/KFNpJiYoVGl8fGkhPT1BaS5jb21wb3NpdGlvblN0YXJ0P2k9PT1BaS5jb21wb3NpdGlvbkVuZCYmVGkmJihvPUwoKSk6KGdpLl9yb290PXIsZ2kuX3N0YXJ0VGV4dD1QKCksVGk9ITApKSxpPWJpLmdldFBvb2xlZChpLHQsbixyKSxvP2kuZGF0YT1vOm51bGwhPT0obz1VKG4pKSYmKGkuZGF0YT1vKSxUKGkpLG89aSk6bz1udWxsLChlPXdpP3ooZSxuKTpHKGUsbikpPyh0PXhpLmdldFBvb2xlZChBaS5iZWZvcmVJbnB1dCx0LG4sciksdC5kYXRhPWUsVCh0KSk6dD1udWxsLG51bGw9PT1vP3Q6bnVsbD09PXQ/bzpbbyx0XX19LEZpPW51bGwsTmk9e2luamVjdEZpYmVyQ29udHJvbGxlZEhvc3RDb21wb25lbnQ6ZnVuY3Rpb24oZSl7Rmk9ZX19LElpPW51bGwsTGk9bnVsbCxQaT17aW5qZWN0aW9uOk5pLGVucXVldWVTdGF0ZVJlc3RvcmU6cSxuZWVkc1N0YXRlUmVzdG9yZTpILHJlc3RvcmVTdGF0ZUlmTmVlZGVkOld9LE1pPSExLGppPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfSxSaT1Mci5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixCaT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciwkaT1CaT9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsVWk9Qmk/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsemk9Qmk/U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKTo2MDEwNyxHaT1CaT9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LFZpPUJpP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQscWk9Qmk/U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKTo2MDEwOSxIaT1CaT9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAsV2k9Qmk/U3ltYm9sLmZvcigicmVhY3QuYXN5bmNfbW9kZSIpOjYwMTExLFFpPUJpP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsS2k9Qmk/U3ltYm9sLmZvcigicmVhY3QudGltZW91dCIpOjYwMTEzLEppPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsWWk9L15bOkEtWl9hLXpcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAyRkZcdTAzNzAtXHUwMzdEXHUwMzdGLVx1MUZGRlx1MjAwQy1cdTIwMERcdTIwNzAtXHUyMThGXHUyQzAwLVx1MkZFRlx1MzAwMS1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZGRF1bOkEtWl9hLXpcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAyRkZcdTAzNzAtXHUwMzdEXHUwMzdGLVx1MUZGRlx1MjAwQy1cdTIwMERcdTIwNzAtXHUyMThGXHUyQzAwLVx1MkZFRlx1MzAwMS1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZGRFwtLjAtOVx1MDBCN1x1MDMwMC1cdTAzNkZcdTIwM0YtXHUyMDQwXSokLyxYaT17fSxaaT17fSxlbz17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZW9bZV09bmV3IHBlKGUsMCwhMSxlLG51bGwpfSksW1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07ZW9bdF09bmV3IHBlKHQsMSwhMSxlWzFdLG51bGwpfSksWyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2VvW2VdPW5ldyBwZShlLDIsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSksWyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbihlKXtlb1tlXT1uZXcgcGUoZSwyLCExLGUsbnVsbCl9KSwiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZW9bZV09bmV3IHBlKGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCl9KSxbImNoZWNrZWQiLCJtdWx0aXBsZSIsIm11dGVkIiwic2VsZWN0ZWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2VvW2VdPW5ldyBwZShlLDMsITAsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSksWyJjYXB0dXJlIiwiZG93bmxvYWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2VvW2VdPW5ldyBwZShlLDQsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSksWyJjb2xzIiwicm93cyIsInNpemUiLCJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbihlKXtlb1tlXT1uZXcgcGUoZSw2LCExLGUudG9Mb3dlckNhc2UoKSxudWxsKX0pLFsicm93U3BhbiIsInN0YXJ0Il0uZm9yRWFjaChmdW5jdGlvbihlKXtlb1tlXT1uZXcgcGUoZSw1LCExLGUudG9Mb3dlckNhc2UoKSxudWxsKX0pO3ZhciB0bz0vW1wtOl0oW2Etel0pL2c7ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRvLGZlKTtlb1t0XT1uZXcgcGUodCwxLCExLGUsbnVsbCl9KSwieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOmhyZWYgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodG8sZmUpO2VvW3RdPW5ldyBwZSh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpfSksWyJ4bWw6YmFzZSIsInhtbDpsYW5nIiwieG1sOnNwYWNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodG8sZmUpO2VvW3RdPW5ldyBwZSh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIil9KSxlby50YWJJbmRleD1uZXcgcGUoInRhYkluZGV4IiwxLCExLCJ0YWJpbmRleCIsbnVsbCk7dmFyIG5vPXtjaGFuZ2U6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNoYW5nZSIsY2FwdHVyZWQ6Im9uQ2hhbmdlQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczoiYmx1ciBjaGFuZ2UgY2xpY2sgZm9jdXMgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIil9fSxybz1udWxsLGlvPW51bGwsb289ITE7UHIuY2FuVXNlRE9NJiYob289ZWUoImlucHV0IikmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciBhbz17ZXZlbnRUeXBlczpubyxfaXNJbnB1dEV2ZW50U3VwcG9ydGVkOm9vLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dD94KHQpOndpbmRvdyxvPXZvaWQgMCxhPXZvaWQgMCxzPWkubm9kZU5hbWUmJmkubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigic2VsZWN0Ij09PXN8fCJpbnB1dCI9PT1zJiYiZmlsZSI9PT1pLnR5cGU/bz13ZTpYKGkpP29vP289T2U6KG89X2UsYT1BZSk6KHM9aS5ub2RlTmFtZSkmJiJpbnB1dCI9PT1zLnRvTG93ZXJDYXNlKCkmJigiY2hlY2tib3giPT09aS50eXBlfHwicmFkaW8iPT09aS50eXBlKSYmKG89VGUpLG8mJihvPW8oZSx0KSkpcmV0dXJuIENlKG8sbixyKTthJiZhKGUsaSx0KSwiYmx1ciI9PT1lJiZudWxsIT10JiYoZT10Ll93cmFwcGVyU3RhdGV8fGkuX3dyYXBwZXJTdGF0ZSkmJmUuY29udHJvbGxlZCYmIm51bWJlciI9PT1pLnR5cGUmJmJlKGksIm51bWJlciIsaS52YWx1ZSl9fSxzbz1NLmV4dGVuZCh7dmlldzpudWxsLGRldGFpbDpudWxsfSksdW89e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifSxjbz1zby5leHRlbmQoe3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNsaWVudFk6bnVsbCxwYWdlWDpudWxsLHBhZ2VZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6TmUsYnV0dG9uOm51bGwsYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudCl9fSksbG89Y28uZXh0ZW5kKHtwb2ludGVySWQ6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHByZXNzdXJlOm51bGwsdGlsdFg6bnVsbCx0aWx0WTpudWxsLHBvaW50ZXJUeXBlOm51bGwsaXNQcmltYXJ5Om51bGx9KSxwbz17bW91c2VFbnRlcjp7cmVnaXN0cmF0aW9uTmFtZToib25Nb3VzZUVudGVyIixkZXBlbmRlbmNpZXM6WyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdfSxtb3VzZUxlYXZlOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNlTGVhdmUiLGRlcGVuZGVuY2llczpbIm1vdXNlb3V0IiwibW91c2VvdmVyIl19LHBvaW50ZXJFbnRlcjp7cmVnaXN0cmF0aW9uTmFtZToib25Qb2ludGVyRW50ZXIiLGRlcGVuZGVuY2llczpbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdfSxwb2ludGVyTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uUG9pbnRlckxlYXZlIixkZXBlbmRlbmNpZXM6WyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXX19LGZvPXtldmVudFR5cGVzOnBvLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Im1vdXNlb3ZlciI9PT1lfHwicG9pbnRlcm92ZXIiPT09ZSxvPSJtb3VzZW91dCI9PT1lfHwicG9pbnRlcm91dCI9PT1lO2lmKGkmJihuLnJlbGF0ZWRUYXJnZXR8fG4uZnJvbUVsZW1lbnQpfHwhbyYmIWkpcmV0dXJuIG51bGw7aWYoaT1yLndpbmRvdz09PXI/cjooaT1yLm93bmVyRG9jdW1lbnQpP2kuZGVmYXVsdFZpZXd8fGkucGFyZW50V2luZG93OndpbmRvdyxvPyhvPXQsdD0odD1uLnJlbGF0ZWRUYXJnZXR8fG4udG9FbGVtZW50KT9iKHQpOm51bGwpOm89bnVsbCxvPT09dClyZXR1cm4gbnVsbDt2YXIgYT12b2lkIDAscz12b2lkIDAsdT12b2lkIDAsYz12b2lkIDA7cmV0dXJuIm1vdXNlb3V0Ij09PWV8fCJtb3VzZW92ZXIiPT09ZT8oYT1jbyxzPXBvLm1vdXNlTGVhdmUsdT1wby5tb3VzZUVudGVyLGM9Im1vdXNlIik6InBvaW50ZXJvdXQiIT09ZSYmInBvaW50ZXJvdmVyIiE9PWV8fChhPWxvLHM9cG8ucG9pbnRlckxlYXZlLHU9cG8ucG9pbnRlckVudGVyLGM9InBvaW50ZXIiKSxlPW51bGw9PW8/aTp4KG8pLGk9bnVsbD09dD9pOngodCkscz1hLmdldFBvb2xlZChzLG8sbixyKSxzLnR5cGU9YysibGVhdmUiLHMudGFyZ2V0PWUscy5yZWxhdGVkVGFyZ2V0PWksbj1hLmdldFBvb2xlZCh1LHQsbixyKSxuLnR5cGU9YysiZW50ZXIiLG4udGFyZ2V0PWksbi5yZWxhdGVkVGFyZ2V0PWUsTyhzLG4sbyx0KSxbcyxuXX19LGhvPU0uZXh0ZW5kKHthbmltYXRpb25OYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxtbz1NLmV4dGVuZCh7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxnbz1zby5leHRlbmQoe3JlbGF0ZWRUYXJnZXQ6bnVsbH0pLHlvPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSx2bz17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoiQWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9LGJvPXNvLmV4dGVuZCh7a2V5OmZ1bmN0aW9uKGUpe2lmKGUua2V5KXt2YXIgdD15b1tlLmtleV18fGUua2V5O2lmKCJVbmlkZW50aWZpZWQiIT09dClyZXR1cm4gdH1yZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlPyhlPVJlKGUpLDEzPT09ZT8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT92b1tlLmtleUNvZGVdfHwiVW5pZGVudGlmaWVkIjoiIn0sbG9jYXRpb246bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwscmVwZWF0Om51bGwsbG9jYWxlOm51bGwsZ2V0TW9kaWZpZXJTdGF0ZTpOZSxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP1JlKGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP1JlKGUpOiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9lLmtleUNvZGU6MH19KSx4bz1jby5leHRlbmQoe2RhdGFUcmFuc2ZlcjpudWxsfSksQ289c28uZXh0ZW5kKHt0b3VjaGVzOm51bGwsdGFyZ2V0VG91Y2hlczpudWxsLGNoYW5nZWRUb3VjaGVzOm51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6TmV9KSxFbz1NLmV4dGVuZCh7cHJvcGVydHlOYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxEbz1jby5leHRlbmQoe2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFYImluIGU/ZS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gZT8tZS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51bGx9KSx3bz1bWyJhYm9ydCIsImFib3J0Il0sW2xpLCJhbmltYXRpb25FbmQiXSxbcGksImFuaW1hdGlvbkl0ZXJhdGlvbiJdLFtmaSwiYW5pbWF0aW9uU3RhcnQiXSxbImNhbnBsYXkiLCJjYW5QbGF5Il0sWyJjYW5wbGF5dGhyb3VnaCIsImNhblBsYXlUaHJvdWdoIl0sWyJkcmFnIiwiZHJhZyJdLFsiZHJhZ2VudGVyIiwiZHJhZ0VudGVyIl0sWyJkcmFnZXhpdCIsImRyYWdFeGl0Il0sWyJkcmFnbGVhdmUiLCJkcmFnTGVhdmUiXSxbImRyYWdvdmVyIiwiZHJhZ092ZXIiXSxbImR1cmF0aW9uY2hhbmdlIiwiZHVyYXRpb25DaGFuZ2UiXSxbImVtcHRpZWQiLCJlbXB0aWVkIl0sWyJlbmNyeXB0ZWQiLCJlbmNyeXB0ZWQiXSxbImVuZGVkIiwiZW5kZWQiXSxbImVycm9yIiwiZXJyb3IiXSxbImdvdHBvaW50ZXJjYXB0dXJlIiwiZ290UG9pbnRlckNhcHR1cmUiXSxbImxvYWQiLCJsb2FkIl0sWyJsb2FkZWRkYXRhIiwibG9hZGVkRGF0YSJdLFsibG9hZGVkbWV0YWRhdGEiLCJsb2FkZWRNZXRhZGF0YSJdLFsibG9hZHN0YXJ0IiwibG9hZFN0YXJ0Il0sWyJsb3N0cG9pbnRlcmNhcHR1cmUiLCJsb3N0UG9pbnRlckNhcHR1cmUiXSxbIm1vdXNlbW92ZSIsIm1vdXNlTW92ZSJdLFsibW91c2VvdXQiLCJtb3VzZU91dCJdLFsibW91c2VvdmVyIiwibW91c2VPdmVyIl0sWyJwbGF5aW5nIiwicGxheWluZyJdLFsicG9pbnRlcm1vdmUiLCJwb2ludGVyTW92ZSJdLFsicG9pbnRlcm91dCIsInBvaW50ZXJPdXQiXSxbInBvaW50ZXJvdmVyIiwicG9pbnRlck92ZXIiXSxbInByb2dyZXNzIiwicHJvZ3Jlc3MiXSxbInNjcm9sbCIsInNjcm9sbCJdLFsic2Vla2luZyIsInNlZWtpbmciXSxbInN0YWxsZWQiLCJzdGFsbGVkIl0sWyJzdXNwZW5kIiwic3VzcGVuZCJdLFsidGltZXVwZGF0ZSIsInRpbWVVcGRhdGUiXSxbInRvZ2dsZSIsInRvZ2dsZSJdLFsidG91Y2htb3ZlIiwidG91Y2hNb3ZlIl0sW2RpLCJ0cmFuc2l0aW9uRW5kIl0sWyJ3YWl0aW5nIiwid2FpdGluZyJdLFsid2hlZWwiLCJ3aGVlbCJdXSxTbz17fSxrbz17fTtbWyJibHVyIiwiYmx1ciJdLFsiY2FuY2VsIiwiY2FuY2VsIl0sWyJjbGljayIsImNsaWNrIl0sWyJjbG9zZSIsImNsb3NlIl0sWyJjb250ZXh0bWVudSIsImNvbnRleHRNZW51Il0sWyJjb3B5IiwiY29weSJdLFsiY3V0IiwiY3V0Il0sWyJkYmxjbGljayIsImRvdWJsZUNsaWNrIl0sWyJkcmFnZW5kIiwiZHJhZ0VuZCJdLFsiZHJhZ3N0YXJ0IiwiZHJhZ1N0YXJ0Il0sWyJkcm9wIiwiZHJvcCJdLFsiZm9jdXMiLCJmb2N1cyJdLFsiaW5wdXQiLCJpbnB1dCJdLFsiaW52YWxpZCIsImludmFsaWQiXSxbImtleWRvd24iLCJrZXlEb3duIl0sWyJrZXlwcmVzcyIsImtleVByZXNzIl0sWyJrZXl1cCIsImtleVVwIl0sWyJtb3VzZWRvd24iLCJtb3VzZURvd24iXSxbIm1vdXNldXAiLCJtb3VzZVVwIl0sWyJwYXN0ZSIsInBhc3RlIl0sWyJwYXVzZSIsInBhdXNlIl0sWyJwbGF5IiwicGxheSJdLFsicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJDYW5jZWwiXSxbInBvaW50ZXJkb3duIiwicG9pbnRlckRvd24iXSxbInBvaW50ZXJ1cCIsInBvaW50ZXJVcCJdLFsicmF0ZWNoYW5nZSIsInJhdGVDaGFuZ2UiXSxbInJlc2V0IiwicmVzZXQiXSxbInNlZWtlZCIsInNlZWtlZCJdLFsic3VibWl0Iiwic3VibWl0Il0sWyJ0b3VjaGNhbmNlbCIsInRvdWNoQ2FuY2VsIl0sWyJ0b3VjaGVuZCIsInRvdWNoRW5kIl0sWyJ0b3VjaHN0YXJ0IiwidG91Y2hTdGFydCJdLFsidm9sdW1lY2hhbmdlIiwidm9sdW1lQ2hhbmdlIl1dLmZvckVhY2goZnVuY3Rpb24oZSl7QmUoZSwhMCl9KSx3by5mb3JFYWNoKGZ1bmN0aW9uKGUpe0JlKGUsITEpfSk7dmFyIEFvPXtldmVudFR5cGVzOlNvLGlzSW50ZXJhY3RpdmVUb3BMZXZlbEV2ZW50VHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09KGU9a29bZV0pJiYhMD09PWUuaXNJbnRlcmFjdGl2ZX0sZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1rb1tlXTtpZighaSlyZXR1cm4gbnVsbDtzd2l0Y2goZSl7Y2FzZSJrZXlwcmVzcyI6aWYoMD09PVJlKG4pKXJldHVybiBudWxsO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6ZT1ibzticmVhaztjYXNlImJsdXIiOmNhc2UiZm9jdXMiOmU9Z287YnJlYWs7Y2FzZSJjbGljayI6aWYoMj09PW4uYnV0dG9uKXJldHVybiBudWxsO2Nhc2UiZGJsY2xpY2siOmNhc2UibW91c2Vkb3duIjpjYXNlIm1vdXNlbW92ZSI6Y2FzZSJtb3VzZXVwIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJjb250ZXh0bWVudSI6ZT1jbzticmVhaztjYXNlImRyYWciOmNhc2UiZHJhZ2VuZCI6Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2V4aXQiOmNhc2UiZHJhZ2xlYXZlIjpjYXNlImRyYWdvdmVyIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjplPXhvO2JyZWFrO2Nhc2UidG91Y2hjYW5jZWwiOmNhc2UidG91Y2hlbmQiOmNhc2UidG91Y2htb3ZlIjpjYXNlInRvdWNoc3RhcnQiOmU9Q287YnJlYWs7Y2FzZSBsaTpjYXNlIHBpOmNhc2UgZmk6ZT1obzticmVhaztjYXNlIGRpOmU9RW87YnJlYWs7Y2FzZSJzY3JvbGwiOmU9c287YnJlYWs7Y2FzZSJ3aGVlbCI6ZT1EbzticmVhaztjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlInBhc3RlIjplPW1vO2JyZWFrO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOmNhc2UibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJwb2ludGVydXAiOmU9bG87YnJlYWs7ZGVmYXVsdDplPU19cmV0dXJuIHQ9ZS5nZXRQb29sZWQoaSx0LG4sciksVCh0KSx0fX0sX289QW8uaXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlLFRvPVtdLE9vPSEwLEZvPXtnZXQgX2VuYWJsZWQoKXtyZXR1cm4gT299LHNldEVuYWJsZWQ6VWUsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIE9vfSx0cmFwQnViYmxlZEV2ZW50OnplLHRyYXBDYXB0dXJlZEV2ZW50OkdlLGRpc3BhdGNoRXZlbnQ6cWV9LE5vPXt9LElvPTAsTG89Il9yZWFjdExpc3RlbmVyc0lEIisoIiIrTWF0aC5yYW5kb20oKSkuc2xpY2UoMiksUG89UHIuY2FuVXNlRE9NJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiYxMT49ZG9jdW1lbnQuZG9jdW1lbnRNb2RlLE1vPXtzZWxlY3Q6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvblNlbGVjdCIsY2FwdHVyZWQ6Im9uU2VsZWN0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczoiYmx1ciBjb250ZXh0bWVudSBmb2N1cyBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19LGpvPW51bGwsUm89bnVsbCxCbz1udWxsLCRvPSExLFVvPXtldmVudFR5cGVzOk1vLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1yLndpbmRvdz09PXI/ci5kb2N1bWVudDo5PT09ci5ub2RlVHlwZT9yOnIub3duZXJEb2N1bWVudDtpZighKGk9IW8pKXtlOntvPUhlKG8pLGk9UXIub25TZWxlY3Q7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYoIW8uaGFzT3duUHJvcGVydHkocyl8fCFvW3NdKXtvPSExO2JyZWFrIGV9fW89ITB9aT0hb31pZihpKXJldHVybiBudWxsO3N3aXRjaChvPXQ/eCh0KTp3aW5kb3csZSl7Y2FzZSJmb2N1cyI6KFgobyl8fCJ0cnVlIj09PW8uY29udGVudEVkaXRhYmxlKSYmKGpvPW8sUm89dCxCbz1udWxsKTticmVhaztjYXNlImJsdXIiOkJvPVJvPWpvPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOiRvPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6cmV0dXJuICRvPSExLEplKG4scik7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKFBvKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6cmV0dXJuIEplKG4scil9cmV0dXJuIG51bGx9fTtlaS5pbmplY3RFdmVudFBsdWdpbk9yZGVyKCJSZXNwb25kZXJFdmVudFBsdWdpbiBTaW1wbGVFdmVudFBsdWdpbiBUYXBFdmVudFBsdWdpbiBFbnRlckxlYXZlRXZlbnRQbHVnaW4gQ2hhbmdlRXZlbnRQbHVnaW4gU2VsZWN0RXZlbnRQbHVnaW4gQmVmb3JlSW5wdXRFdmVudFBsdWdpbiIuc3BsaXQoIiAiKSksSnI9b2kuZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSxZcj1vaS5nZXRJbnN0YW5jZUZyb21Ob2RlLFhyPW9pLmdldE5vZGVGcm9tSW5zdGFuY2UsZWkuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtTaW1wbGVFdmVudFBsdWdpbjpBbyxFbnRlckxlYXZlRXZlbnRQbHVnaW46Zm8sQ2hhbmdlRXZlbnRQbHVnaW46YW8sU2VsZWN0RXZlbnRQbHVnaW46VW8sQmVmb3JlSW5wdXRFdmVudFBsdWdpbjpPaX0pO3ZhciB6bz12b2lkIDA7em89Im9iamVjdCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJiJmdW5jdGlvbiI9PT10eXBlb2YgcGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgR289dm9pZCAwLFZvPXZvaWQgMDtpZihQci5jYW5Vc2VET00pe3ZhciBxbz1bXSxIbz0wLFdvPXt9LFFvPS0xLEtvPSExLEpvPSExLFlvPTAsWG89MzMsWm89MzMsZWE9e2RpZFRpbWVvdXQ6ITEsdGltZVJlbWFpbmluZzpmdW5jdGlvbigpe3ZhciBlPVlvLXpvKCk7cmV0dXJuIDA8ZT9lOjB9fSx0YT1mdW5jdGlvbihlLHQpe2lmKFdvW3RdKXRyeXtlKGVhKX1maW5hbGx5e2RlbGV0ZSBXb1t0XX19LG5hPSJfX3JlYWN0SWRsZUNhbGxiYWNrJCIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGUpe2lmKGUuc291cmNlPT09d2luZG93JiZlLmRhdGE9PT1uYSYmKEtvPSExLDAhPT1xby5sZW5ndGgpKXtpZigwIT09cW8ubGVuZ3RoJiYoZT16bygpLCEoLTE9PT1Rb3x8UW8+ZSkpKXtRbz0tMSxlYS5kaWRUaW1lb3V0PSEwO2Zvcih2YXIgdD0wLG49cW8ubGVuZ3RoO3Q8bjt0Kyspe3ZhciByPXFvW3RdLGk9ci50aW1lb3V0VGltZTstMSE9PWkmJmk8PWU/dGEoci5zY2hlZHVsZWRDYWxsYmFjayxyLmNhbGxiYWNrSWQpOi0xIT09aSYmKC0xPT09UW98fGk8UW8pJiYoUW89aSl9fWZvcihlPXpvKCk7MDxZby1lJiYwPHFvLmxlbmd0aDspZT1xby5zaGlmdCgpLGVhLmRpZFRpbWVvdXQ9ITEsdGEoZS5zY2hlZHVsZWRDYWxsYmFjayxlLmNhbGxiYWNrSWQpLGU9em8oKTswPHFvLmxlbmd0aCYmIUpvJiYoSm89ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJhKSl9fSwhMSk7dmFyIHJhPWZ1bmN0aW9uKGUpe0pvPSExO3ZhciB0PWUtWW8rWm87dDxabyYmWG88Wm8/KDg+dCYmKHQ9OCksWm89dDxYbz9Ybzp0KTpYbz10LFlvPWUrWm8sS298fChLbz0hMCx3aW5kb3cucG9zdE1lc3NhZ2UobmEsIioiKSl9O0dvPWZ1bmN0aW9uKGUsdCl7dmFyIG49LTE7cmV0dXJuIG51bGwhPXQmJiJudW1iZXIiPT09dHlwZW9mIHQudGltZW91dCYmKG49em8oKSt0LnRpbWVvdXQpLCgtMT09PVFvfHwtMSE9PW4mJm48UW8pJiYoUW89biksSG8rKyx0PUhvLHFvLnB1c2goe3NjaGVkdWxlZENhbGxiYWNrOmUsY2FsbGJhY2tJZDp0LHRpbWVvdXRUaW1lOm59KSxXb1t0XT0hMCxKb3x8KEpvPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShyYSkpLHR9LFZvPWZ1bmN0aW9uKGUpe2RlbGV0ZSBXb1tlXX19ZWxzZXt2YXIgaWE9MCxvYT17fTtHbz1mdW5jdGlvbihlKXt2YXIgdD1pYSsrLG49c2V0VGltZW91dChmdW5jdGlvbigpe2Uoe3RpbWVSZW1haW5pbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMS8wfSxkaWRUaW1lb3V0OiExfSl9KTtyZXR1cm4gb2FbdF09bix0fSxWbz1mdW5jdGlvbihlKXt2YXIgdD1vYVtlXTtkZWxldGUgb2FbZV0sY2xlYXJUaW1lb3V0KHQpfX12YXIgYWE9e2h0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG1hdGhtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsc3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LHNhPXZvaWQgMCx1YT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24odCxuLHIsaSl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4pfSl9OmV9KGZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkhPT1hYS5zdmd8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKHNhPXNhfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxzYS5pbm5lckhUTUw9Ijxzdmc+Iit0KyI8L3N2Zz4iLHQ9c2EuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pLGNhPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxsYT1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKGNhKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2xhLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksY2FbdF09Y2FbZV19KX0pO3ZhciBwYT1Ncih7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KSxmYT1qci50aGF0UmV0dXJucygiIiksZGE9e2NyZWF0ZUVsZW1lbnQ6ZnQsY3JlYXRlVGV4dE5vZGU6ZHQsc2V0SW5pdGlhbFByb3BlcnRpZXM6aHQsZGlmZlByb3BlcnRpZXM6bXQsdXBkYXRlUHJvcGVydGllczpndCxkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzOnl0LGRpZmZIeWRyYXRlZFRleHQ6dnQsd2FybkZvclVubWF0Y2hlZFRleHQ6ZnVuY3Rpb24oKXt9LHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQ6ZnVuY3Rpb24oKXt9LHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQ6ZnVuY3Rpb24oKXt9LHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudDpmdW5jdGlvbigpe30sd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0OmZ1bmN0aW9uKCl7fSxyZXN0b3JlQ29udHJvbGxlZFN0YXRlOmZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSJpbnB1dCI6aWYoeWUoZSxuKSx0PW4ubmFtZSwicmFkaW8iPT09bi50eXBlJiZudWxsIT10KXtmb3Iobj1lO24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrdCkrJ11bdHlwZT0icmFkaW8iXScpLHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIGk9blt0XTtpZihpIT09ZSYmaS5mb3JtPT09ZS5mb3JtKXt2YXIgbz1DKGkpO298fHIoIjkwIiksaWUoaSkseWUoaSxvKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOnJ0KGUsbik7YnJlYWs7Y2FzZSJzZWxlY3QiOm51bGwhPSh0PW4udmFsdWUpJiZaZShlLCEhbi5tdWx0aXBsZSx0LCExKX19fSxoYT1udWxsLG1hPW51bGwsZ2E9em8seWE9R28sdmE9Vm87bmV3IFNldDt2YXIgYmE9W10seGE9LTEsQ2E9RHQoVXIpLEVhPUR0KCExKSxEYT1Vcix3YT1udWxsLFNhPW51bGwsa2E9ITEsQWE9RHQobnVsbCksX2E9RHQobnVsbCksVGE9RHQoMCksT2E9e30sRmE9RHQoT2EpLE5hPUR0KE9hKSxJYT1EdChPYSksTGE9e2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4hIShlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcikmJjI9PT1JZShlKX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCxuKXtlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcjt2YXIgcj1lcigpO3I9WG4ocixlKTt2YXIgaT1RdChyKTtpLnBheWxvYWQ9dCx2b2lkIDAhPT1uJiZudWxsIT09biYmKGkuY2FsbGJhY2s9biksSnQoZSxpLHIpLFpuKGUscil9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0LG4pe2U9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyO3ZhciByPWVyKCk7cj1YbihyLGUpO3ZhciBpPVF0KHIpO2kudGFnPTEsaS5wYXlsb2FkPXQsdm9pZCAwIT09biYmbnVsbCE9PW4mJihpLmNhbGxiYWNrPW4pLEp0KGUsaSxyKSxabihlLHIpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcjt2YXIgbj1lcigpO249WG4obixlKTt2YXIgcj1RdChuKTtyLnRhZz0yLHZvaWQgMCE9PXQmJm51bGwhPT10JiYoci5jYWxsYmFjaz10KSxKdChlLHIsbiksWm4oZSxuKX19LFBhPUFycmF5LmlzQXJyYXksTWE9eW4oITApLGphPXluKCExKSxSYT1udWxsLEJhPW51bGwsJGE9ITEsVWE9dm9pZCAwLHphPXZvaWQgMCxHYT12b2lkIDA7VWE9ZnVuY3Rpb24oKXt9LHphPWZ1bmN0aW9uKGUsdCxuKXsodC51cGRhdGVRdWV1ZT1uKSYmSW4odCl9LEdhPWZ1bmN0aW9uKGUsdCxuLHIpe24hPT1yJiZJbih0KX07dmFyIFZhPWdhKCkscWE9MixIYT1WYSxXYT0wLFFhPTAsS2E9ITEsSmE9bnVsbCxZYT1udWxsLFhhPTAsWmE9LTEsZXM9ITEsdHM9bnVsbCxucz0hMSxycz0hMSxpcz1udWxsLG9zPW51bGwsYXM9bnVsbCxzcz0wLHVzPS0xLGNzPSExLGxzPW51bGwscHM9MCxmcz0wLGRzPSExLGhzPSExLG1zPW51bGwsZ3M9bnVsbCx5cz0hMSx2cz0hMSxicz0hMSx4cz1udWxsLENzPTFlMyxFcz0wLERzPTEsd3M9e3VwZGF0ZUNvbnRhaW5lckF0RXhwaXJhdGlvblRpbWU6eHIsY3JlYXRlQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVXQoZSx0LG4pfSx1cGRhdGVDb250YWluZXI6RXIsZmx1c2hSb290OmNyLHJlcXVlc3RXb3JrOmlyLGNvbXB1dGVVbmlxdWVBc3luY0V4cGlyYXRpb246WW4sYmF0Y2hlZFVwZGF0ZXM6Z3IsdW5iYXRjaGVkVXBkYXRlczp5cixkZWZlcnJlZFVwZGF0ZXM6dHIsc3luY1VwZGF0ZXM6bnIsaW50ZXJhY3RpdmVVcGRhdGVzOmZ1bmN0aW9uKGUsdCxuKXtpZihicylyZXR1cm4gZSh0LG4pO3lzfHxjc3x8MD09PWZzfHwodXIoZnMsITEsbnVsbCksZnM9MCk7dmFyIHI9YnMsaT15czt5cz1icz0hMDt0cnl7cmV0dXJuIGUodCxuKX1maW5hbGx5e2JzPXIsKHlzPWkpfHxjc3x8c3IoKX19LGZsdXNoSW50ZXJhY3RpdmVVcGRhdGVzOmZ1bmN0aW9uKCl7Y3N8fDA9PT1mc3x8KHVyKGZzLCExLG51bGwpLGZzPTApfSxmbHVzaENvbnRyb2xsZWQ6YnIsZmx1c2hTeW5jOnZyLGdldFB1YmxpY1Jvb3RJbnN0YW5jZTpEcixmaW5kSG9zdEluc3RhbmNlOkNyLGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzOmZ1bmN0aW9uKGUpe3JldHVybiBlPWplKGUpLG51bGw9PT1lP251bGw6ZS5zdGF0ZU5vZGV9LGluamVjdEludG9EZXZUb29sczp3cn07TmkuaW5qZWN0RmliZXJDb250cm9sbGVkSG9zdENvbXBvbmVudChkYSksa3IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt0aGlzLl9kZWZlcnx8cigiMjUwIiksdGhpcy5faGFzQ2hpbGRyZW49ITAsdGhpcy5fY2hpbGRyZW49ZTt2YXIgdD10aGlzLl9yb290Ll9pbnRlcm5hbFJvb3Qsbj10aGlzLl9leHBpcmF0aW9uVGltZSxpPW5ldyBBcjtyZXR1cm4geHIoZSx0LG51bGwsbixpLl9vbkNvbW1pdCksaX0sa3IucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGlkQ29tcGxldGUpZSgpO2Vsc2V7dmFyIHQ9dGhpcy5fY2FsbGJhY2tzO251bGw9PT10JiYodD10aGlzLl9jYWxsYmFja3M9W10pLHQucHVzaChlKX19LGtyLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yb290Ll9pbnRlcm5hbFJvb3QsdD1lLmZpcnN0QmF0Y2g7aWYodGhpcy5fZGVmZXImJm51bGwhPT10fHxyKCIyNTEiKSx0aGlzLl9oYXNDaGlsZHJlbil7dmFyIG49dGhpcy5fZXhwaXJhdGlvblRpbWU7aWYodCE9PXRoaXMpe3RoaXMuX2hhc0NoaWxkcmVuJiYobj10aGlzLl9leHBpcmF0aW9uVGltZT10Ll9leHBpcmF0aW9uVGltZSx0aGlzLnJlbmRlcih0aGlzLl9jaGlsZHJlbikpO2Zvcih2YXIgaT1udWxsLG89dDtvIT09dGhpczspaT1vLG89by5fbmV4dDtudWxsPT09aSYmcigiMjUxIiksaS5fbmV4dD1vLl9uZXh0LHRoaXMuX25leHQ9dCxlLmZpcnN0QmF0Y2g9dGhpc310aGlzLl9kZWZlcj0hMSxjcihlLG4pLHQ9dGhpcy5fbmV4dCx0aGlzLl9uZXh0PW51bGwsdD1lLmZpcnN0QmF0Y2g9dCxudWxsIT09dCYmdC5faGFzQ2hpbGRyZW4mJnQucmVuZGVyKHQuX2NoaWxkcmVuKX1lbHNlIHRoaXMuX25leHQ9bnVsbCx0aGlzLl9kZWZlcj0hMX0sa3IucHJvdG90eXBlLl9vbkNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RpZENvbXBsZXRlKXt0aGlzLl9kaWRDb21wbGV0ZT0hMDt2YXIgZT10aGlzLl9jYWxsYmFja3M7aWYobnVsbCE9PWUpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspKDAsZVt0XSkoKX19LEFyLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RpZENvbW1pdCllKCk7ZWxzZXt2YXIgdD10aGlzLl9jYWxsYmFja3M7bnVsbD09PXQmJih0PXRoaXMuX2NhbGxiYWNrcz1bXSksdC5wdXNoKGUpfX0sQXIucHJvdG90eXBlLl9vbkNvbW1pdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRDb21taXQpe3RoaXMuX2RpZENvbW1pdD0hMDt2YXIgZT10aGlzLl9jYWxsYmFja3M7aWYobnVsbCE9PWUpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07ImZ1bmN0aW9uIiE9PXR5cGVvZiBuJiZyKCIxOTEiLG4pLG4oKX19fSxfci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faW50ZXJuYWxSb290LHI9bmV3IEFyO3JldHVybiB0PXZvaWQgMD09PXQ/bnVsbDp0LG51bGwhPT10JiZyLnRoZW4odCksRXIoZSxuLG51bGwsci5fb25Db21taXQpLHJ9LF9yLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVybmFsUm9vdCxuPW5ldyBBcjtyZXR1cm4gZT12b2lkIDA9PT1lP251bGw6ZSxudWxsIT09ZSYmbi50aGVuKGUpLEVyKG51bGwsdCxudWxsLG4uX29uQ29tbWl0KSxufSxfci5wcm90b3R5cGUubGVnYWN5X3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9pbnRlcm5hbFJvb3QsaT1uZXcgQXI7cmV0dXJuIG49dm9pZCAwPT09bj9udWxsOm4sbnVsbCE9PW4mJmkudGhlbihuKSxFcih0LHIsZSxpLl9vbkNvbW1pdCksaX0sX3IucHJvdG90eXBlLmNyZWF0ZUJhdGNoPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGtyKHRoaXMpLHQ9ZS5fZXhwaXJhdGlvblRpbWUsbj10aGlzLl9pbnRlcm5hbFJvb3Qscj1uLmZpcnN0QmF0Y2g7aWYobnVsbD09PXIpbi5maXJzdEJhdGNoPWUsZS5fbmV4dD1udWxsO2Vsc2V7Zm9yKG49bnVsbDtudWxsIT09ciYmci5fZXhwaXJhdGlvblRpbWU8PXQ7KW49cixyPXIuX25leHQ7ZS5fbmV4dD1yLG51bGwhPT1uJiYobi5fbmV4dD1lKX1yZXR1cm4gZX0sUT13cy5iYXRjaGVkVXBkYXRlcyxLPXdzLmludGVyYWN0aXZlVXBkYXRlcyxKPXdzLmZsdXNoSW50ZXJhY3RpdmVVcGRhdGVzO3ZhciBTcz17Y3JlYXRlUG9ydGFsOk5yLGZpbmRET01Ob2RlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP251bGw6MT09PWUubm9kZVR5cGU/ZTpDcihlKX0saHlkcmF0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEZyKG51bGwsZSx0LCEwLG4pfSxyZW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGcihudWxsLGUsdCwhMSxuKX0sdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuKG51bGw9PWV8fHZvaWQgMD09PWUuX3JlYWN0SW50ZXJuYWxGaWJlcikmJnIoIjM4IiksRnIoZSx0LG4sITEsaSl9LHVubW91bnRDb21wb25lbnRBdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFRyKGUpfHxyKCI0MCIpLCEhZS5fcmVhY3RSb290Q29udGFpbmVyJiYoeXIoZnVuY3Rpb24oKXtGcihudWxsLG51bGwsZSwhMSxmdW5jdGlvbigpe2UuX3JlYWN0Um9vdENvbnRhaW5lcj1udWxsfSl9KSwhMCl9LHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDpmdW5jdGlvbigpe3JldHVybiBOci5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX0sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6Z3IsdW5zdGFibGVfZGVmZXJyZWRVcGRhdGVzOnRyLGZsdXNoU3luYzp2cix1bnN0YWJsZV9mbHVzaENvbnRyb2xsZWQ6YnIsX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6e0V2ZW50UGx1Z2luSHViOnRpLEV2ZW50UGx1Z2luUmVnaXN0cnk6S3IsRXZlbnRQcm9wYWdhdG9yczphaSxSZWFjdENvbnRyb2xsZWRDb21wb25lbnQ6UGksUmVhY3RET01Db21wb25lbnRUcmVlOm9pLFJlYWN0RE9NRXZlbnRMaXN0ZW5lcjpGb30sdW5zdGFibGVfY3JlYXRlUm9vdDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgX3IoZSwhMCxudWxsIT10JiYhMD09PXQuaHlkcmF0ZSl9fTt3cih7ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6YixidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTYuNC4wIixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20ifSk7dmFyIGtzPXtkZWZhdWx0OlNzfSxBcz1rcyYmU3N8fGtzO2UuZXhwb3J0cz1Bcy5kZWZhdWx0P0FzLmRlZmF1bHQ6QXN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ISgidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksaT17Y2FuVXNlRE9NOnIsY2FuVXNlV29ya2VyczoidW5kZWZpbmVkIiE9PXR5cGVvZiBXb3JrZXIsY2FuVXNlRXZlbnRMaXN0ZW5lcnM6ciYmISghd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJiF3aW5kb3cuYXR0YWNoRXZlbnQpLGNhblVzZVZpZXdwb3J0OnImJiEhd2luZG93LnNjcmVlbixpc0luV29ya2VyOiFyfTtlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mKGU9ZXx8KCJ1bmRlZmluZWQiIT09dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5hY3RpdmVFbGVtZW50fHxlLmJvZHl9Y2F0Y2godCl7cmV0dXJuIGUuYm9keX19ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MCE9PXR8fDEvZT09PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gaShlLHQpe2lmKHIoZSx0KSlyZXR1cm4hMDtpZigib2JqZWN0IiE9PXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksaT1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKWlmKCFvLmNhbGwodCxuW2FdKXx8IXIoZVtuW2FdXSx0W25bYV1dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4hKCFlfHwhdCkmJihlPT09dHx8IWkoZSkmJihpKHQpP3IoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ISFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYhISgxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKSkpfXZhciBpPW4oMzE5KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpKGUpJiYzPT1lLm5vZGVUeXBlfXZhciBpPW4oMzIwKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWU/ZS5vd25lckRvY3VtZW50fHxlOmRvY3VtZW50LG49dC5kZWZhdWx0Vmlld3x8d2luZG93O3JldHVybiEoIWV8fCEoImZ1bmN0aW9uIj09PXR5cGVvZiBuLk5vZGU/ZSBpbnN0YW5jZW9mIG4uTm9kZToib2JqZWN0Ij09PXR5cGVvZiBlJiYibnVtYmVyIj09PXR5cGVvZiBlLm5vZGVUeXBlJiYic3RyaW5nIj09PXR5cGVvZiBlLm5vZGVOYW1lKSl9ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMDApLGk9big5OSksbz1uKDMyMik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGEscyl7cyE9PW8mJmkoITEsIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKX1mdW5jdGlvbiB0KCl7cmV0dXJuIGV9ZS5pc1JlcXVpcmVkPWU7dmFyIG49e2FycmF5OmUsYm9vbDplLGZ1bmM6ZSxudW1iZXI6ZSxvYmplY3Q6ZSxzdHJpbmc6ZSxzeW1ib2w6ZSxhbnk6ZSxhcnJheU9mOnQsZWxlbWVudDplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dH07cmV0dXJuIG4uY2hlY2tQcm9wVHlwZXM9cixuLlByb3BUeXBlcz1uLG59fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSwsLCwsLCxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBvKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gYSgpe3ZhciBlLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJzdG9yZSIsbj1hcmd1bWVudHNbMV0sYT1ufHx0KyJTdWJzY3JpcHRpb24iLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihvLGEpe3IodGhpcyxuKTt2YXIgcz1pKHRoaXMsZS5jYWxsKHRoaXMsbyxhKSk7cmV0dXJuIHNbdF09by5zdG9yZSxzfXJldHVybiBvKG4sZSksbi5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9e30sZVt0XT10aGlzW3RdLGVbYV09bnVsbCxlfSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gcy5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pfSxufShzLkNvbXBvbmVudCk7cmV0dXJuIHUucHJvcFR5cGVzPXtzdG9yZTpsLmEuaXNSZXF1aXJlZCxjaGlsZHJlbjpjLmEuZWxlbWVudC5pc1JlcXVpcmVkfSx1LmNoaWxkQ29udGV4dFR5cGVzPShlPXt9LGVbdF09bC5hLmlzUmVxdWlyZWQsZVthXT1sLmIsZSksdX10LmE9YTt2YXIgcz1uKDApLHU9KG4ubihzKSxuKDE4KSksYz1uLm4odSksbD1uKDE1NSk7bigxMDEpO3QuYj1hKCl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtjaGlsZENvbnRleHRUeXBlczohMCxjb250ZXh0VHlwZXM6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLGdldERlZmF1bHRQcm9wczohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAsbWl4aW5zOiEwLHByb3BUeXBlczohMCx0eXBlOiEwfSx0PXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LG49T2JqZWN0LmRlZmluZVByb3BlcnR5LHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPWEmJmEoT2JqZWN0KTtyZXR1cm4gZnVuY3Rpb24gdShjLGwscCl7aWYoInN0cmluZyIhPT10eXBlb2YgbCl7aWYocyl7dmFyIGY9YShsKTtmJiZmIT09cyYmdShjLGYscCl9dmFyIGQ9cihsKTtpJiYoZD1kLmNvbmNhdChpKGwpKSk7Zm9yKHZhciBoPTA7aDxkLmxlbmd0aDsrK2gpe3ZhciBtPWRbaF07aWYoIWVbbV0mJiF0W21dJiYoIXB8fCFwW21dKSl7dmFyIGc9byhsLG0pO3RyeXtuKGMsbSxnKX1jYXRjaChlKXt9fX1yZXR1cm4gY31yZXR1cm4gY319KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaSgpe3ZhciBlPVtdLHQ9W107cmV0dXJue2NsZWFyOmZ1bmN0aW9uKCl7dD1vLGU9b30sbm90aWZ5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPWU9dCxyPTA7cjxuLmxlbmd0aDtyKyspbltyXSgpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sc3Vic2NyaWJlOmZ1bmN0aW9uKG4pe3ZhciByPSEwO3JldHVybiB0PT09ZSYmKHQ9ZS5zbGljZSgpKSx0LnB1c2gobiksZnVuY3Rpb24oKXtyJiZlIT09byYmKHI9ITEsdD09PWUmJih0PWUuc2xpY2UoKSksdC5zcGxpY2UodC5pbmRleE9mKG4pLDEpKX19fX1uLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBvPW51bGwsYT17bm90aWZ5OmZ1bmN0aW9uKCl7fX0scz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLGkpe3IodGhpcyxlKSx0aGlzLnN0b3JlPXQsdGhpcy5wYXJlbnRTdWI9bix0aGlzLm9uU3RhdGVDaGFuZ2U9aSx0aGlzLnVuc3Vic2NyaWJlPW51bGwsdGhpcy5saXN0ZW5lcnM9YX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkTmVzdGVkU3ViPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyeVN1YnNjcmliZSgpLHRoaXMubGlzdGVuZXJzLnN1YnNjcmliZShlKX0sZS5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3Vicz1mdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzLm5vdGlmeSgpfSxlLnByb3RvdHlwZS5pc1N1YnNjcmliZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKX0sZS5wcm90b3R5cGUudHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy51bnN1YnNjcmliZXx8KHRoaXMudW5zdWJzY3JpYmU9dGhpcy5wYXJlbnRTdWI/dGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSk6dGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKSx0aGlzLmxpc3RlbmVycz1pKCkpfSxlLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMudW5zdWJzY3JpYmUmJih0aGlzLnVuc3Vic2NyaWJlKCksdGhpcy51bnN1YnNjcmliZT1udWxsLHRoaXMubGlzdGVuZXJzLmNsZWFyKCksdGhpcy5saXN0ZW5lcnM9YSl9LGV9KCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIGkoZSx0LG4pe2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT10W3JdKGUpO2lmKGkpcmV0dXJuIGl9cmV0dXJuIGZ1bmN0aW9uKHQscil7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIG9mIHR5cGUgIit0eXBlb2YgZSsiIGZvciAiK24rIiBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICIrci53cmFwcGVkQ29tcG9uZW50TmFtZSsiLiIpfX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU9PT10fXZhciBhPW4oMTU2KSxzPW4oMzMzKSx1PW4oMzM0KSxjPW4oMzUyKSxsPW4oMzUzKSxwPW4oMzU0KSxmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuYT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUuY29ubmVjdEhPQyxuPXZvaWQgMD09PXQ/YS5hOnQsZD1lLm1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcyxoPXZvaWQgMD09PWQ/Yy5hOmQsbT1lLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxnPXZvaWQgMD09PW0/dS5hOm0seT1lLm1lcmdlUHJvcHNGYWN0b3JpZXMsdj12b2lkIDA9PT15P2wuYTp5LGI9ZS5zZWxlY3RvckZhY3RvcnkseD12b2lkIDA9PT1iP3AuYTpiO3JldHVybiBmdW5jdGlvbihlLHQsYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LGM9dS5wdXJlLGw9dm9pZCAwPT09Y3x8YyxwPXUuYXJlU3RhdGVzRXF1YWwsZD12b2lkIDA9PT1wP286cCxtPXUuYXJlT3duUHJvcHNFcXVhbCx5PXZvaWQgMD09PW0/cy5hOm0sYj11LmFyZVN0YXRlUHJvcHNFcXVhbCxDPXZvaWQgMD09PWI/cy5hOmIsRT11LmFyZU1lcmdlZFByb3BzRXF1YWwsRD12b2lkIDA9PT1FP3MuYTpFLHc9cih1LFsicHVyZSIsImFyZVN0YXRlc0VxdWFsIiwiYXJlT3duUHJvcHNFcXVhbCIsImFyZVN0YXRlUHJvcHNFcXVhbCIsImFyZU1lcmdlZFByb3BzRXF1YWwiXSksUz1pKGUsaCwibWFwU3RhdGVUb1Byb3BzIiksaz1pKHQsZywibWFwRGlzcGF0Y2hUb1Byb3BzIiksQT1pKGEsdiwibWVyZ2VQcm9wcyIpO3JldHVybiBuKHgsZih7bWV0aG9kTmFtZToiY29ubmVjdCIsZ2V0RGlzcGxheU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIkNvbm5lY3QoIitlKyIpIn0sc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzOkJvb2xlYW4oZSksaW5pdE1hcFN0YXRlVG9Qcm9wczpTLGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6ayxpbml0TWVyZ2VQcm9wczpBLHB1cmU6bCxhcmVTdGF0ZXNFcXVhbDpkLGFyZU93blByb3BzRXF1YWw6eSxhcmVTdGF0ZVByb3BzRXF1YWw6QyxhcmVNZXJnZWRQcm9wc0VxdWFsOkR9LHcpKX19KCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MCE9PXR8fDEvZT09PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gaShlLHQpe2lmKHIoZSx0KSlyZXR1cm4hMDtpZigib2JqZWN0IiE9PXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksaT1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKWlmKCFvLmNhbGwodCxuW2FdKXx8IXIoZVtuW2FdXSx0W25bYV1dKSlyZXR1cm4hMTtyZXR1cm4hMH10LmE9aTt2YXIgbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBlP09iamVjdChzLmIpKGUsIm1hcERpc3BhdGNoVG9Qcm9wcyIpOnZvaWQgMH1mdW5jdGlvbiBpKGUpe3JldHVybiBlP3ZvaWQgMDpPYmplY3Qocy5hKShmdW5jdGlvbihlKXtyZXR1cm57ZGlzcGF0Y2g6ZX19KX1mdW5jdGlvbiBvKGUpe3JldHVybiBlJiYib2JqZWN0Ij09PXR5cGVvZiBlP09iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoYS5iaW5kQWN0aW9uQ3JlYXRvcnMpKGUsdCl9KTp2b2lkIDB9dmFyIGE9big0MCkscz1uKDE2Mik7dC5hPVtyLGksb119LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA9PT1lP3U6czpjJiZjIGluIE9iamVjdChlKT9PYmplY3Qoby5hKShlKTpPYmplY3QoYS5hKShlKX12YXIgaT1uKDE1OSksbz1uKDMzOCksYT1uKDMzOSkscz0iW29iamVjdCBOdWxsXSIsdT0iW29iamVjdCBVbmRlZmluZWRdIixjPWkuYT9pLmEudG9TdHJpbmdUYWc6dm9pZCAwO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzM3KSxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsbz1yLmF8fGl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dC5hPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmU7dC5hPW59KS5jYWxsKHQsbigxMSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9YS5jYWxsKGUsdSksbj1lW3VdO3RyeXtlW3VdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGk9cy5jYWxsKGUpO3JldHVybiByJiYodD9lW3VdPW46ZGVsZXRlIGVbdV0pLGl9dmFyIGk9bigxNTkpLG89T2JqZWN0LnByb3RvdHlwZSxhPW8uaGFzT3duUHJvcGVydHkscz1vLnRvU3RyaW5nLHU9aS5hP2kuYS50b1N0cmluZ1RhZzp2b2lkIDA7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gby5jYWxsKGUpfXZhciBpPU9iamVjdC5wcm90b3R5cGUsbz1pLnRvU3RyaW5nO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzQxKSxpPU9iamVjdChyLmEpKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO3QuYT1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZX10LmE9cn0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDM0NCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpLG89bigzNDUpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKTtpPSJ1bmRlZmluZWQiIT09dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT09dHlwZW9mIGU/ZTpyO3ZhciBzPSgwLGEuZGVmYXVsdCkoaSk7dC5kZWZhdWx0PXN9KS5jYWxsKHQsbigxMSksbigxMDIpKGUpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5TeW1ib2w7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBuP24ub2JzZXJ2YWJsZT90PW4ub2JzZXJ2YWJsZToodD1uKCJvYnNlcnZhYmxlIiksbi5vYnNlcnZhYmxlPXQpOnQ9IkBAb2JzZXJ2YWJsZSIsdH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQmJnQudHlwZTtyZXR1cm4iR2l2ZW4gYWN0aW9uICIrKG4mJiciJytuLnRvU3RyaW5nKCkrJyInfHwiYW4gYWN0aW9uIikrJywgcmVkdWNlciAiJytlKyciIHJldHVybmVkIHVuZGVmaW5lZC4gVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIHByZXZpb3VzIHN0YXRlLiBJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nfWZ1bmN0aW9uIGkoZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIG4odm9pZCAwLHt0eXBlOmEuYS5JTklUfSkpdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyICInK3QrIlwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIElmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIHlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuIik7aWYoInVuZGVmaW5lZCI9PT10eXBlb2Ygbih2b2lkIDAse3R5cGU6IkBAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoIiIpLmpvaW4oIi4iKX0pKXRocm93IG5ldyBFcnJvcignUmVkdWNlciAiJyt0KyJcIiByZXR1cm5lZCB1bmRlZmluZWQgd2hlbiBwcm9iZWQgd2l0aCBhIHJhbmRvbSB0eXBlLiBEb24ndCB0cnkgdG8gaGFuZGxlICIrYS5hLklOSVQrJyBvciBvdGhlciBhY3Rpb25zIGluICJyZWR1eC8qIiBuYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB1bmxlc3MgaXQgaXMgdW5kZWZpbmVkLCBpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuJyl9KX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPXt9LG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dFtvXTsiZnVuY3Rpb24iPT09dHlwZW9mIGVbYV0mJihuW2FdPWVbYV0pfXZhciBzPU9iamVjdC5rZXlzKG4pLHU9dm9pZCAwO3RyeXtpKG4pfWNhdGNoKGUpe3U9ZX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHNbMV07aWYodSl0aHJvdyB1O2Zvcih2YXIgaT0hMSxvPXt9LGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXSxsPW5bY10scD1lW2NdLGY9bChwLHQpO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGYpe3ZhciBkPXIoYyx0KTt0aHJvdyBuZXcgRXJyb3IoZCl9b1tjXT1mLGk9aXx8ZiE9PXB9cmV0dXJuIGk/bzplfX10LmE9bzt2YXIgYT1uKDE1Nyk7bigxNTgpLG4oMTYwKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGUpcmV0dXJuIHIoZSx0KTtpZigib2JqZWN0IiE9PXR5cGVvZiBlfHxudWxsPT09ZSl0aHJvdyBuZXcgRXJyb3IoImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAiKyhudWxsPT09ZT8ibnVsbCI6dHlwZW9mIGUpKycuIERpZCB5b3Ugd3JpdGUgImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tIiBpbnN0ZWFkIG9mICJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tIj8nKTtmb3IodmFyIG49T2JqZWN0LmtleXMoZSksaT17fSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBhPW5bb10scz1lW2FdOyJmdW5jdGlvbiI9PT10eXBlb2YgcyYmKGlbYV09cihzLHQpKX1yZXR1cm4gaX10LmE9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4scixhKXt2YXIgcz1lKG4scixhKSx1PXMuZGlzcGF0Y2gsYz1bXSxsPXtnZXRTdGF0ZTpzLmdldFN0YXRlLGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpfX07cmV0dXJuIGM9dC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUobCl9KSx1PWkuYS5hcHBseSh2b2lkIDAsYykocy5kaXNwYXRjaCksbyh7fSxzLHtkaXNwYXRjaDp1fSl9fX10LmE9cjt2YXIgaT1uKDE2MSksbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWEuY2FsbChlLHUpLG49ZVt1XTt0cnl7ZVt1XT12b2lkIDA7dmFyIHI9ITB9Y2F0Y2goZSl7fXZhciBpPXMuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVt1XT1uOmRlbGV0ZSBlW3VdKSxpfXZhciBpPW4oMTAzKSxvPU9iamVjdC5wcm90b3R5cGUsYT1vLmhhc093blByb3BlcnR5LHM9by50b1N0cmluZyx1PWkuYT9pLmEudG9TdHJpbmdUYWc6dm9pZCAwO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8uY2FsbChlKX12YXIgaT1PYmplY3QucHJvdG90eXBlLG89aS50b1N0cmluZzt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE2NSksaT1PYmplY3Qoci5hKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmE9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgZT9PYmplY3Qoby5iKShlLCJtYXBTdGF0ZVRvUHJvcHMiKTp2b2lkIDB9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT92b2lkIDA6T2JqZWN0KG8uYSkoZnVuY3Rpb24oKXtyZXR1cm57fX0pfXZhciBvPW4oMTYyKTt0LmE9W3IsaV19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHMoe30sbixlLHQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9KG4uZGlzcGxheU5hbWUsbi5wdXJlKSxpPW4uYXJlTWVyZ2VkUHJvcHNFcXVhbCxvPSExLGE9dm9pZCAwO3JldHVybiBmdW5jdGlvbih0LG4scyl7dmFyIHU9ZSh0LG4scyk7cmV0dXJuIG8/ciYmaSh1LGEpfHwoYT11KToobz0hMCxhPXUpLGF9fX1mdW5jdGlvbiBvKGUpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgZT9pKGUpOnZvaWQgMH1mdW5jdGlvbiBhKGUpe3JldHVybiBlP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiByfX12YXIgcz0obigxNjMpLE9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9KTt0LmE9W28sYV19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIGkoZSx0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGksbyl7cmV0dXJuIG4oZShpLG8pLHQocixvKSxvKX19ZnVuY3Rpb24gbyhlLHQsbixyLGkpe2Z1bmN0aW9uIG8oaSxvKXtyZXR1cm4gaD1pLG09byxnPWUoaCxtKSx5PXQocixtKSx2PW4oZyx5LG0pLGQ9ITAsdn1mdW5jdGlvbiBhKCl7cmV0dXJuIGc9ZShoLG0pLHQuZGVwZW5kc09uT3duUHJvcHMmJih5PXQocixtKSksdj1uKGcseSxtKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGUuZGVwZW5kc09uT3duUHJvcHMmJihnPWUoaCxtKSksdC5kZXBlbmRzT25Pd25Qcm9wcyYmKHk9dChyLG0pKSx2PW4oZyx5LG0pfWZ1bmN0aW9uIHUoKXt2YXIgdD1lKGgsbSkscj0hZih0LGcpO3JldHVybiBnPXQsciYmKHY9bihnLHksbSkpLHZ9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPSFwKHQsbSkscj0hbChlLGgpO3JldHVybiBoPWUsbT10LG4mJnI/YSgpOm4/cygpOnI/dSgpOnZ9dmFyIGw9aS5hcmVTdGF0ZXNFcXVhbCxwPWkuYXJlT3duUHJvcHNFcXVhbCxmPWkuYXJlU3RhdGVQcm9wc0VxdWFsLGQ9ITEsaD12b2lkIDAsbT12b2lkIDAsZz12b2lkIDAseT12b2lkIDAsdj12b2lkIDA7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQ/YyhlLHQpOm8oZSx0KX19ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXQuaW5pdE1hcFN0YXRlVG9Qcm9wcyxhPXQuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxzPXQuaW5pdE1lcmdlUHJvcHMsdT1yKHQsWyJpbml0TWFwU3RhdGVUb1Byb3BzIiwiaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyIsImluaXRNZXJnZVByb3BzIl0pLGM9bihlLHUpLGw9YShlLHUpLHA9cyhlLHUpO3JldHVybih1LnB1cmU/bzppKShjLGwscCxlLHUpfXQuYT1hO24oMzU1KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDEwMSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNDApLGk9bigxMDQpLG89bigzNjIpLGE9bigxNykscz1uKDEyKSx1PW4oNTE3KSxjPWkuZGVmYXVsdCgpLGw9W3IuYXBwbHlNaWRkbGV3YXJlKGMpXSxwPXdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX198fHIuY29tcG9zZSxmPXUuZGVzZXJpYWxpemVTdGF0ZSgpO3QuZGVmYXVsdD1mdW5jdGlvbigpe3ZhciBlPXIuY3JlYXRlU3RvcmUoYS5kZWZhdWx0LGYscC5hcHBseShudWxsLGwpKTtyZXR1cm4gZS5zdWJzY3JpYmUodS5zZXJpYWxpemVTdGF0ZShlKSksd2luZG93LnM9ZSx3aW5kb3cuc2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBzLmdldFNlbGVjdGVkU2Vzc2lvbihlLmdldFN0YXRlKCkpfSxjLnJ1bihvLmRlZmF1bHQpLGV9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBpKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10LmdldFN0YXRlLHI9dC5kaXNwYXRjaCxmPU9iamVjdChhLmMpKCk7cmV0dXJuIGYuZW1pdD0odS5lbWl0dGVyfHxvLm8pKGYuZW1pdCksZS5ydW49cy5hLmJpbmQobnVsbCx7Y29udGV4dDppLHN1YnNjcmliZTpmLnN1YnNjcmliZSxkaXNwYXRjaDpyLGdldFN0YXRlOm4sc2FnYU1vbml0b3I6Yyxsb2dnZXI6bCxvbkVycm9yOnB9KSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7YyYmYy5hY3Rpb25EaXNwYXRjaGVkJiZjLmFjdGlvbkRpc3BhdGNoZWQodCk7dmFyIG49ZSh0KTtyZXR1cm4gZi5lbWl0KHQpLG59fX12YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj10LmNvbnRleHQsaT12b2lkIDA9PT1uP3t9Om4sdT1yKHQsWyJjb250ZXh0Il0pLGM9dS5zYWdhTW9uaXRvcixsPXUubG9nZ2VyLHA9dS5vbkVycm9yO2lmKG8ucS5mdW5jKHUpKXRocm93IG5ldyBFcnJvcigiU2FnYSBtaWRkbGV3YXJlIG5vIGxvbmdlciBhY2NlcHQgR2VuZXJhdG9yIGZ1bmN0aW9ucy4gVXNlIHNhZ2FNaWRkbGV3YXJlLnJ1biBpbnN0ZWFkIik7aWYobCYmIW8ucS5mdW5jKGwpKXRocm93IG5ldyBFcnJvcigiYG9wdGlvbnMubG9nZ2VyYCBwYXNzZWQgdG8gdGhlIFNhZ2EgbWlkZGxld2FyZSBpcyBub3QgYSBmdW5jdGlvbiEiKTtpZihwJiYhby5xLmZ1bmMocCkpdGhyb3cgbmV3IEVycm9yKCJgb3B0aW9ucy5vbkVycm9yYCBwYXNzZWQgdG8gdGhlIFNhZ2EgbWlkZGxld2FyZSBpcyBub3QgYSBmdW5jdGlvbiEiKTtpZih1LmVtaXR0ZXImJiFvLnEuZnVuYyh1LmVtaXR0ZXIpKXRocm93IG5ldyBFcnJvcigiYG9wdGlvbnMuZW1pdHRlcmAgcGFzc2VkIHRvIHRoZSBTYWdhIG1pZGRsZXdhcmUgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGUucnVuPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJCZWZvcmUgcnVubmluZyBhIFNhZ2EsIHlvdSBtdXN0IG1vdW50IHRoZSBTYWdhIG1pZGRsZXdhcmUgb24gdGhlIFN0b3JlIHVzaW5nIGFwcGx5TWlkZGxld2FyZSIpfSxlLnNldENvbnRleHQ9ZnVuY3Rpb24oZSl7T2JqZWN0KG8uaCkoZSxvLnEub2JqZWN0LE9iamVjdChvLmspKCJzYWdhTWlkZGxld2FyZSIsZSkpLG8udi5hc3NpZ24oaSxlKX0sZX10LmE9aTt2YXIgbz1uKDIyKSxhPW4oNDIpLHM9bigxNjcpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+Mj9uLTI6MCkscz0yO3M8bjtzKyspcltzLTJdPWFyZ3VtZW50c1tzXTt2YXIgdT17ZG9uZTohMSx2YWx1ZTpPYmplY3Qoby5zKShlKX0sYz1mdW5jdGlvbihlKXtyZXR1cm57ZG9uZTohMSx2YWx1ZTpvLmsuYXBwbHkodm9pZCAwLFt0XS5jb25jYXQocixbZV0pKX19LGw9dm9pZCAwLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGw9ZX07cmV0dXJuIE9iamVjdChpLmEpKHtxMTpmdW5jdGlvbigpe3JldHVyblsicTIiLHUscF19LHEyOmZ1bmN0aW9uKCl7cmV0dXJuIGw9PT1hLmE/W2kuYl06WyJxMSIsYyhsKV19fSwicTEiLCJ0YWtlRXZlcnkoIitPYmplY3QoaS5jKShlKSsiLCAiK3QubmFtZSsiKSIpfXQuYT1yO3ZhciBpPW4oMTA1KSxvPW4oMzQpLGE9big0Mil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4yP24tMjowKSxzPTI7czxuO3MrKylyW3MtMl09YXJndW1lbnRzW3NdO3ZhciB1PXtkb25lOiExLHZhbHVlOk9iamVjdChvLnMpKGUpfSxjPWZ1bmN0aW9uKGUpe3JldHVybntkb25lOiExLHZhbHVlOm8uay5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChyLFtlXSkpfX0sbD1mdW5jdGlvbihlKXtyZXR1cm57ZG9uZTohMSx2YWx1ZTpPYmplY3Qoby5mKShlKX19LHA9dm9pZCAwLGY9dm9pZCAwLGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHA9ZX0saD1mdW5jdGlvbihlKXtyZXR1cm4gZj1lfTtyZXR1cm4gT2JqZWN0KGkuYSkoe3ExOmZ1bmN0aW9uKCl7cmV0dXJuWyJxMiIsdSxoXX0scTI6ZnVuY3Rpb24oKXtyZXR1cm4gZj09PWEuYT9baS5iXTpwP1sicTMiLGwocCldOlsicTEiLGMoZiksZF19LHEzOmZ1bmN0aW9uKCl7cmV0dXJuWyJxMSIsYyhmKSxkXX19LCJxMSIsInRha2VMYXRlc3QoIitPYmplY3QoaS5jKShlKSsiLCAiK3QubmFtZSsiKSIpfXQuYT1yO3ZhciBpPW4oMTA1KSxvPW4oMzQpLGE9big0Mil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShyPjM/ci0zOjApLGw9MztsPHI7bCsrKWNbbC0zXT1hcmd1bWVudHNbbF07dmFyIHA9dm9pZCAwLGY9dm9pZCAwLGQ9e2RvbmU6ITEsdmFsdWU6T2JqZWN0KG8uYSkodCxzLmEuc2xpZGluZygxKSl9LGg9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMSx2YWx1ZTpPYmplY3Qoby5zKShmKX19LG09ZnVuY3Rpb24oZSl7cmV0dXJue2RvbmU6ITEsdmFsdWU6by5rLmFwcGx5KHZvaWQgMCxbbl0uY29uY2F0KGMsW2VdKSl9fSxnPXtkb25lOiExLHZhbHVlOk9iamVjdChvLmUpKHUubSxlKX0seT1mdW5jdGlvbihlKXtyZXR1cm4gcD1lfSx2PWZ1bmN0aW9uKGUpe3JldHVybiBmPWV9O3JldHVybiBPYmplY3QoaS5hKSh7cTE6ZnVuY3Rpb24oKXtyZXR1cm5bInEyIixkLHZdfSxxMjpmdW5jdGlvbigpe3JldHVyblsicTMiLGgoKSx5XX0scTM6ZnVuY3Rpb24oKXtyZXR1cm4gcD09PWEuYT9baS5iXTpbInE0IixtKHApXX0scTQ6ZnVuY3Rpb24oKXtyZXR1cm5bInEyIixnXX19LCJxMSIsInRocm90dGxlKCIrT2JqZWN0KGkuYykodCkrIiwgIituLm5hbWUrIikiKX10LmE9cjt2YXIgaT1uKDEwNSksbz1uKDM0KSxhPW4oNDIpLHM9big3NiksdT1uKDIyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMik7bi5kKHQsIlRBU0siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZX0pLG4uZCh0LCJTQUdBX0FDVElPTiIsZnVuY3Rpb24oKXtyZXR1cm4gci5jfSksbi5kKHQsIm5vb3AiLGZ1bmN0aW9uKCl7cmV0dXJuIHIudX0pLG4uZCh0LCJpcyIsZnVuY3Rpb24oKXtyZXR1cm4gci5xfSksbi5kKHQsImRlZmVycmVkIixmdW5jdGlvbigpe3JldHVybiByLmx9KSxuLmQodCwiYXJyYXlPZkRlZmZlcmVkIixmdW5jdGlvbigpe3JldHVybiByLmd9KSxuLmQodCwiY3JlYXRlTW9ja1Rhc2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuan0pLG4uZCh0LCJjbG9uZWFibGVHZW5lcmF0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuaX0pO3ZhciBpPW4oMzQpO24uZCh0LCJhc0VmZmVjdCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kfSk7dmFyIG89bigxNjgpO24uZCh0LCJDSEFOTkVMX0VORCIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiBpKHRoaXMsZnVuY3Rpb24oZSl7c3dpdGNoKGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxzLmFsbChhLnNlc3Npb25zU2FnYXMuY29uY2F0KG8uZmVjdGhpbmdTYWdhcyx1LnNoYXJpbmdTYWdhcykpXTtjYXNlIDE6cmV0dXJuIGUuc2VudCgpLFsyXX19KX12YXIgaT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByKFtlLHRdKX19ZnVuY3Rpb24gcihuKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3U7KXRyeXtpZihpPTEsbyYmKGE9MiZuWzBdP28ucmV0dXJuOm5bMF0/by50aHJvd3x8KChhPW8ucmV0dXJuKSYmYS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoYT1hLmNhbGwobyxuWzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gobz0wLGEmJihuPVsyJm5bMF0sYS52YWx1ZV0pLG5bMF0pe2Nhc2UgMDpjYXNlIDE6YT1uO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdS5sYWJlbCsrLHt2YWx1ZTpuWzFdLGRvbmU6ITF9O2Nhc2UgNTp1LmxhYmVsKyssbz1uWzFdLG49WzBdO2NvbnRpbnVlO2Nhc2UgNzpuPXUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9dS50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKDY9PT1uWzBdfHwyPT09blswXSkpe3U9MDtjb250aW51ZX1pZigzPT09blswXSYmKCFhfHxuWzFdPmFbMF0mJm5bMV08YVszXSkpe3UubGFiZWw9blsxXTticmVha31pZig2PT09blswXSYmdS5sYWJlbDxhWzFdKXt1LmxhYmVsPWFbMV0sYT1uO2JyZWFrfWlmKGEmJnUubGFiZWw8YVsyXSl7dS5sYWJlbD1hWzJdLHUub3BzLnB1c2gobik7YnJlYWt9YVsyXSYmdS5vcHMucG9wKCksdS50cnlzLnBvcCgpO2NvbnRpbnVlfW49dC5jYWxsKGUsdSl9Y2F0Y2goZSl7bj1bNixlXSxvPTB9ZmluYWxseXtpPWE9MH1pZig1Jm5bMF0pdGhyb3cgblsxXTtyZXR1cm57dmFsdWU6blswXT9uWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgaSxvLGEscyx1PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmFbMF0pdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzPXtuZXh0Om4oMCksdGhyb3c6bigxKSxyZXR1cm46bigyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihzW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHN9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDc3KSxhPW4oNTEwKSxzPW4oNTUpLHU9big1MTYpO3QuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZS5yZXF1ZXN0KE9iamVjdChvLmIpKHQuY29udGV4dCxPYmplY3Qoby5oKShPYmplY3Qoby5pKSh0KSkpKXx8aS5hLm9mKCl9bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLHQuZD1yO3ZhciBpPW4oMTA2KSxvPW4oMTcxKSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dChlKTppLmEub2YoKX0scz1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGU/bmV3IGYoZSk6ZX0sdT1mdW5jdGlvbigpe3JldHVybiBuZXcgZihmdW5jdGlvbihlLHQpe3JldHVybiBpLmEub2YoKX0pfSxjPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5sZW5ndGg/dSgpOmUubWFwKHMpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0KX0pfSxsPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj1uZXcgZihhKSk7dmFyIHI9cyh0KSx1PXMobik7cmV0dXJuIG5ldyBmKE9iamVjdChvLmUpKHIpJiZPYmplY3Qoby5lKSh1KT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0KT9yLnJlcXVlc3QodCl8fGkuYS5vZigpOnUucmVxdWVzdCh0KXx8aS5hLm9mKCl9OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodCk/ci5yZXF1ZXN0KHQsbil8fGkuYS5vZigpOnUucmVxdWVzdCh0LG4pfHxpLmEub2YoKX0pfSxwPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyhlKTtpZihPYmplY3Qoby5lKShuKSlyZXR1cm4gY29uc29sZS53YXJuKG5ldyBvLmEoIllvdSBhcmUgY2FsbGluZyBjb25jYXQgb24gYSB0ZXJtaW5hdGluZyBsaW5rLCB3aGljaCB3aWxsIGhhdmUgbm8gZWZmZWN0IixuKSksbjt2YXIgcj1zKHQpO3JldHVybiBuZXcgZihPYmplY3Qoby5lKShyKT9mdW5jdGlvbihlKXtyZXR1cm4gbi5yZXF1ZXN0KGUsZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVxdWVzdChlKXx8aS5hLm9mKCl9KXx8aS5hLm9mKCl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ucmVxdWVzdChlLGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3QoZSx0KXx8aS5hLm9mKCl9KXx8aS5hLm9mKCl9KX0sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZSYmKHRoaXMucmVxdWVzdD1lKX1yZXR1cm4gZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj1uZXcgZShhKSksdGhpcy5jb25jYXQobCh0LG4scikpfSxlLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodGhpcyxlKX0sZS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcigicmVxdWVzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sZS5lbXB0eT11LGUuZnJvbT1jLGUuc3BsaXQ9bCxlLmV4ZWN1dGU9cixlfSgpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMzY1KS5PYnNlcnZhYmxlfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49ZVt0XTtpZihudWxsIT1uKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihuKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gbn19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDAhPT10JiZudWxsPT09KHQ9dFt5KCJzcGVjaWVzIildKSYmKHQ9dm9pZCAwKSx2b2lkIDAhPT10P3Q6eH1mdW5jdGlvbiBhKGUpe3JldHVybiBlIGluc3RhbmNlb2YgeH1mdW5jdGlvbiBzKGUpe3MubG9nP3MubG9nKGUpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gdShlKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtzKGUpfX0pfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5fY2xlYW51cDtpZih2b2lkIDAhPT10JiYoZS5fY2xlYW51cD12b2lkIDAsdCkpdHJ5e2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdCl0KCk7ZWxzZXt2YXIgbj1pKHQsInVuc3Vic2NyaWJlIik7biYmbi5jYWxsKHQpfX1jYXRjaChlKXtzKGUpfX1mdW5jdGlvbiBsKGUpe2UuX29ic2VydmVyPXZvaWQgMCxlLl9xdWV1ZT12b2lkIDAsZS5fc3RhdGU9ImNsb3NlZCJ9ZnVuY3Rpb24gcChlKXt2YXIgdD1lLl9xdWV1ZTtpZih0KXtlLl9xdWV1ZT12b2lkIDAsZS5fc3RhdGU9InJlYWR5Ijtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiYoZihlLHRbbl0udHlwZSx0W25dLnZhbHVlKSwiY2xvc2VkIiE9PWUuX3N0YXRlKTsrK24pO319ZnVuY3Rpb24gZihlLHQsbil7ZS5fc3RhdGU9InJ1bm5pbmciO3ZhciByPWUuX29ic2VydmVyO3RyeXt2YXIgbz1pKHIsdCk7c3dpdGNoKHQpe2Nhc2UibmV4dCI6byYmby5jYWxsKHIsbik7YnJlYWs7Y2FzZSJlcnJvciI6aWYobChlKSwhbyl0aHJvdyBuO28uY2FsbChyLG4pO2JyZWFrO2Nhc2UiY29tcGxldGUiOmwoZSksbyYmby5jYWxsKHIpfX1jYXRjaChlKXtzKGUpfSJjbG9zZWQiPT09ZS5fc3RhdGU/YyhlKToicnVubmluZyI9PT1lLl9zdGF0ZSYmKGUuX3N0YXRlPSJyZWFkeSIpfWZ1bmN0aW9uIGQoZSx0LG4pe2lmKCJjbG9zZWQiIT09ZS5fc3RhdGUpcmV0dXJuImJ1ZmZlcmluZyI9PT1lLl9zdGF0ZT92b2lkIGUuX3F1ZXVlLnB1c2goe3R5cGU6dCx2YWx1ZTpufSk6InJlYWR5IiE9PWUuX3N0YXRlPyhlLl9zdGF0ZT0iYnVmZmVyaW5nIixlLl9xdWV1ZT1be3R5cGU6dCx2YWx1ZTpufV0sdm9pZCB1KGZ1bmN0aW9uKCl7cmV0dXJuIHAoZSl9KSk6dm9pZCBmKGUsdCxuKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksbT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sfSxnPWZ1bmN0aW9uKGUpe3JldHVybiBtKCkmJkJvb2xlYW4oU3ltYm9sW2VdKX0seT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKT9TeW1ib2xbZV06IkBAIitlfTttKCkmJiFnKCJvYnNlcnZhYmxlIikmJihTeW1ib2wub2JzZXJ2YWJsZT1TeW1ib2woIm9ic2VydmFibGUiKSk7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7cih0aGlzLGUpLHRoaXMuX2NsZWFudXA9dm9pZCAwLHRoaXMuX29ic2VydmVyPXQsdGhpcy5fcXVldWU9dm9pZCAwLHRoaXMuX3N0YXRlPSJpbml0aWFsaXppbmciO3ZhciBpPW5ldyBiKHRoaXMpO3RyeXt0aGlzLl9jbGVhbnVwPW4uY2FsbCh2b2lkIDAsaSl9Y2F0Y2goZSl7aS5lcnJvcihlKX0iaW5pdGlhbGl6aW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9InJlYWR5Iil9cmV0dXJuIGgoZSxbe2tleToidW5zdWJzY3JpYmUiLHZhbHVlOmZ1bmN0aW9uKCl7ImNsb3NlZCIhPT10aGlzLl9zdGF0ZSYmKGwodGhpcyksYyh0aGlzKSl9fSx7a2V5OiJjbG9zZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiJjbG9zZWQiPT09dGhpcy5fc3RhdGV9fV0pLGV9KCksYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10fXJldHVybiBoKGUsW3trZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKGUpe2QodGhpcy5fc3Vic2NyaXB0aW9uLCJuZXh0IixlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtkKHRoaXMuX3N1YnNjcmlwdGlvbiwiZXJyb3IiLGUpfX0se2tleToiY29tcGxldGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZCh0aGlzLl9zdWJzY3JpcHRpb24sImNvbXBsZXRlIil9fSx7a2V5OiJjbG9zZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiJjbG9zZWQiPT09dGhpcy5fc3Vic2NyaXB0aW9uLl9zdGF0ZX19XSksZX0oKSx4PXQuT2JzZXJ2YWJsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYocih0aGlzLGUpLCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ic2VydmFibGUgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uIik7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIk9ic2VydmFibGUgaW5pdGlhbGl6ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fc3Vic2NyaWJlcj10fXJldHVybiBoKGUsW3trZXk6InN1YnNjcmliZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWV8fChlPXtuZXh0OmUsZXJyb3I6YXJndW1lbnRzWzFdLGNvbXBsZXRlOmFyZ3VtZW50c1syXX0pLG5ldyB2KGUsdGhpcy5fc3Vic2NyaWJlcil9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpe2Z1bmN0aW9uIGkoKXtvLnVuc3Vic2NyaWJlKCksbigpfWlmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSlyZXR1cm4gdm9pZCByKG5ldyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uIikpO3ZhciBvPXQuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3RyeXtlKHQsaSl9Y2F0Y2goZSl7cihlKSxvLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpyLGNvbXBsZXRlOm59KX0pfX0se2tleToibWFwIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBuZXcobyh0aGlzKSkoZnVuY3Rpb24obil7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3RyeXt0PWUodCl9Y2F0Y2goZSl7cmV0dXJuIG4uZXJyb3IoZSl9bi5uZXh0KHQpfSxlcnJvcjpmdW5jdGlvbihlKXtuLmVycm9yKGUpfSxjb21wbGV0ZTpmdW5jdGlvbigpe24uY29tcGxldGUoKX19KX0pfX0se2tleToiZmlsdGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBuZXcobyh0aGlzKSkoZnVuY3Rpb24obil7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3RyeXtpZighZSh0KSlyZXR1cm59Y2F0Y2goZSl7cmV0dXJuIG4uZXJyb3IoZSl9bi5uZXh0KHQpfSxlcnJvcjpmdW5jdGlvbihlKXtuLmVycm9yKGUpfSxjb21wbGV0ZTpmdW5jdGlvbigpe24uY29tcGxldGUoKX19KX0pfX0se2tleToicmVkdWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3ZhciBuPW8odGhpcykscj1hcmd1bWVudHMubGVuZ3RoPjEsaT0hMSxhPWFyZ3VtZW50c1sxXSxzPWE7cmV0dXJuIG5ldyBuKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXt2YXIgbz0haTtpZihpPSEwLCFvfHxyKXRyeXtzPWUocyx0KX1jYXRjaChlKXtyZXR1cm4gbi5lcnJvcihlKX1lbHNlIHM9dH0sZXJyb3I6ZnVuY3Rpb24oZSl7bi5lcnJvcihlKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighaSYmIXIpcmV0dXJuIG4uZXJyb3IobmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlZHVjZSBhbiBlbXB0eSBzZXF1ZW5jZSIpKTtuLm5leHQocyksbi5jb21wbGV0ZSgpfX0pfSl9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07dmFyIGk9byh0aGlzKTtyZXR1cm4gbmV3IGkoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlKXtvPWUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKGUpe3QubmV4dChlKX0sZXJyb3I6ZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0sY29tcGxldGU6ZnVuY3Rpb24oKXswPT09bi5sZW5ndGg/KG89dm9pZCAwLHQuY29tcGxldGUoKSk6cihpLmZyb20obi5zaGlmdCgpKSl9fSl9dmFyIG89dm9pZCAwO3JldHVybiByKGUpLGZ1bmN0aW9uKCl7byYmKG89dm9pZCAwLG8udW5zdWJzY3JpYmUoKSl9fSl9fSx7a2V5OiJmbGF0TWFwIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3ZhciBuPW8odGhpcyk7cmV0dXJuIG5ldyBuKGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGkoKXthLmNsb3NlZCYmMD09PW8ubGVuZ3RoJiZyLmNvbXBsZXRlKCl9dmFyIG89W10sYT10LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXtpZihlKXRyeXt0PWUodCl9Y2F0Y2goZSl7cmV0dXJuIHIuZXJyb3IoZSl9dmFyIGE9bi5mcm9tKHQpLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbihlKXtyLm5leHQoZSl9LGVycm9yOmZ1bmN0aW9uKGUpe3IuZXJyb3IoZSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU9by5pbmRleE9mKGEpO2U+PTAmJm8uc3BsaWNlKGUsMSksaSgpfX0pO28ucHVzaChhKX0sZXJyb3I6ZnVuY3Rpb24oZSl7ci5lcnJvcihlKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtpKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVuc3Vic2NyaWJlKCl9KSxhLnVuc3Vic2NyaWJlKCl9fSl9fSx7a2V5OnkoIm9ic2VydmFibGUiKSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX1dLFt7a2V5OiJmcm9tIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXM/dGhpczplO2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIG9iamVjdCIpO3ZhciByPWkodCx5KCJvYnNlcnZhYmxlIikpO2lmKHIpe3ZhciBvPXIuY2FsbCh0KTtpZihPYmplY3QobykhPT1vKXRocm93IG5ldyBUeXBlRXJyb3IobysiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gYShvKSYmby5jb25zdHJ1Y3Rvcj09PW4/bzpuZXcgbihmdW5jdGlvbihlKXtyZXR1cm4gby5zdWJzY3JpYmUoZSl9KX1pZihnKCJpdGVyYXRvciIpJiYocj1pKHQseSgiaXRlcmF0b3IiKSkpKXJldHVybiBuZXcgbihmdW5jdGlvbihlKXt1KGZ1bmN0aW9uKCl7aWYoIWUuY2xvc2VkKXt2YXIgbj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1yLmNhbGwodClbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1zLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIHU9YS52YWx1ZTtpZihlLm5leHQodSksZS5jbG9zZWQpcmV0dXJufX1jYXRjaChlKXtpPSEwLG89ZX1maW5hbGx5e3RyeXshbiYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fWUuY29tcGxldGUoKX19KX0pO2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG5ldyBuKGZ1bmN0aW9uKGUpe3UoZnVuY3Rpb24oKXtpZighZS5jbG9zZWQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKGUubmV4dCh0W25dKSxlLmNsb3NlZClyZXR1cm47ZS5jb21wbGV0ZSgpfX0pfSk7dGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IG9ic2VydmFibGUiKX19LHtrZXk6Im9mIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIG5ldygiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXM/dGhpczplKShmdW5jdGlvbihlKXt1KGZ1bmN0aW9uKCl7aWYoIWUuY2xvc2VkKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoOysrdClpZihlLm5leHQoblt0XSksZS5jbG9zZWQpcmV0dXJuO2UuY29tcGxldGUoKX19KX0pfX0se2tleTp5KCJzcGVjaWVzIiksZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fV0pLGV9KCk7bSgpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxTeW1ib2woImV4dGVuc2lvbnMiKSx7dmFsdWU6e3N5bWJvbDp5KCJvYnNlcnZhYmxlIiksaG9zdFJlcG9ydEVycm9yOnN9LGNvbmZpZ3VyYWJlOiEwfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KG4oMzY3KSxuKDM2OCksbigxNzIpKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gci5lfSk7bigzNjkpLG4oMTA3KSxuKDE3MyksbigxNzQpLG4oMTA4KSxuKDM3MCksbigzNzEpLG4oMzcyKSxuKDM3MyksbigzNzQpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTA3KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0aGlzJiZ0aGlzLl9fYXNzaWdufHxPYmplY3QuYXNzaWdufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTc0KSxuKDE3Mil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxMDgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTA4KSxPYmplY3QuY3JlYXRlKHt9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0In0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe2U9ZXx8e30sdGhpcy5tcz1lLm1pbnx8MTAwLHRoaXMubWF4PWUubWF4fHwxZTQsdGhpcy5mYWN0b3I9ZS5mYWN0b3J8fDIsdGhpcy5qaXR0ZXI9ZS5qaXR0ZXI+MCYmZS5qaXR0ZXI8PTE/ZS5qaXR0ZXI6MCx0aGlzLmF0dGVtcHRzPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZHVyYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1zKk1hdGgucG93KHRoaXMuZmFjdG9yLHRoaXMuYXR0ZW1wdHMrKyk7aWYodGhpcy5qaXR0ZXIpe3ZhciB0PU1hdGgucmFuZG9tKCksbj1NYXRoLmZsb29yKHQqdGhpcy5qaXR0ZXIqZSk7ZT0wPT0oMSZNYXRoLmZsb29yKDEwKnQpKT9lLW46ZStufXJldHVybiAwfE1hdGgubWluKGUsdGhpcy5tYXgpfSxuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuYXR0ZW1wdHM9MH0sbi5wcm90b3R5cGUuc2V0TWluPWZ1bmN0aW9uKGUpe3RoaXMubXM9ZX0sbi5wcm90b3R5cGUuc2V0TWF4PWZ1bmN0aW9uKGUpe3RoaXMubWF4PWV9LG4ucHJvdG90eXBlLnNldEppdHRlcj1mdW5jdGlvbihlKXt0aGlzLmppdHRlcj1lfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIGkoZSx0LG4pe3RoaXMuZm49ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLm9uY2U9bnx8ITF9ZnVuY3Rpb24gbygpe3RoaXMuX2V2ZW50cz1uZXcgcix0aGlzLl9ldmVudHNDb3VudD0wfXZhciBhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz0ifiI7T2JqZWN0LmNyZWF0ZSYmKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobnVsbCksKG5ldyByKS5fX3Byb3RvX198fChzPSExKSksby5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3ZhciBlLHQsbj1bXTtpZigwPT09dGhpcy5fZXZlbnRzQ291bnQpcmV0dXJuIG47Zm9yKHQgaW4gZT10aGlzLl9ldmVudHMpYS5jYWxsKGUsdCkmJm4ucHVzaChzP3Quc2xpY2UoMSk6dCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSk6bn0sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUsdCl7dmFyIG49cz9zK2U6ZSxyPXRoaXMuX2V2ZW50c1tuXTtpZih0KXJldHVybiEhcjtpZighcilyZXR1cm5bXTtpZihyLmZuKXJldHVybltyLmZuXTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9bmV3IEFycmF5KG8pO2k8bztpKyspYVtpXT1yW2ldLmZuO3JldHVybiBhfSxvLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT1zP3MrZTplO2lmKCF0aGlzLl9ldmVudHNbYV0pcmV0dXJuITE7dmFyIHUsYyxsPXRoaXMuX2V2ZW50c1thXSxwPWFyZ3VtZW50cy5sZW5ndGg7aWYobC5mbil7c3dpdGNoKGwub25jZSYmdGhpcy5yZW1vdmVMaXN0ZW5lcihlLGwuZm4sdm9pZCAwLCEwKSxwKXtjYXNlIDE6cmV0dXJuIGwuZm4uY2FsbChsLmNvbnRleHQpLCEwO2Nhc2UgMjpyZXR1cm4gbC5mbi5jYWxsKGwuY29udGV4dCx0KSwhMDtjYXNlIDM6cmV0dXJuIGwuZm4uY2FsbChsLmNvbnRleHQsdCxuKSwhMDtjYXNlIDQ6cmV0dXJuIGwuZm4uY2FsbChsLmNvbnRleHQsdCxuLHIpLCEwO2Nhc2UgNTpyZXR1cm4gbC5mbi5jYWxsKGwuY29udGV4dCx0LG4scixpKSwhMDtjYXNlIDY6cmV0dXJuIGwuZm4uY2FsbChsLmNvbnRleHQsdCxuLHIsaSxvKSwhMH1mb3IoYz0xLHU9bmV3IEFycmF5KHAtMSk7YzxwO2MrKyl1W2MtMV09YXJndW1lbnRzW2NdO2wuZm4uYXBwbHkobC5jb250ZXh0LHUpfWVsc2V7dmFyIGYsZD1sLmxlbmd0aDtmb3IoYz0wO2M8ZDtjKyspc3dpdGNoKGxbY10ub25jZSYmdGhpcy5yZW1vdmVMaXN0ZW5lcihlLGxbY10uZm4sdm9pZCAwLCEwKSxwKXtjYXNlIDE6bFtjXS5mbi5jYWxsKGxbY10uY29udGV4dCk7YnJlYWs7Y2FzZSAyOmxbY10uZm4uY2FsbChsW2NdLmNvbnRleHQsdCk7YnJlYWs7Y2FzZSAzOmxbY10uZm4uY2FsbChsW2NdLmNvbnRleHQsdCxuKTticmVhaztjYXNlIDQ6bFtjXS5mbi5jYWxsKGxbY10uY29udGV4dCx0LG4scik7YnJlYWs7ZGVmYXVsdDppZighdSlmb3IoZj0xLHU9bmV3IEFycmF5KHAtMSk7ZjxwO2YrKyl1W2YtMV09YXJndW1lbnRzW2ZdO2xbY10uZm4uYXBwbHkobFtjXS5jb250ZXh0LHUpfX1yZXR1cm4hMH0sby5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW5ldyBpKHQsbnx8dGhpcyksbz1zP3MrZTplO3JldHVybiB0aGlzLl9ldmVudHNbb10/dGhpcy5fZXZlbnRzW29dLmZuP3RoaXMuX2V2ZW50c1tvXT1bdGhpcy5fZXZlbnRzW29dLHJdOnRoaXMuX2V2ZW50c1tvXS5wdXNoKHIpOih0aGlzLl9ldmVudHNbb109cix0aGlzLl9ldmVudHNDb3VudCsrKSx0aGlzfSxvLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uZXcgaSh0LG58fHRoaXMsITApLG89cz9zK2U6ZTtyZXR1cm4gdGhpcy5fZXZlbnRzW29dP3RoaXMuX2V2ZW50c1tvXS5mbj90aGlzLl9ldmVudHNbb109W3RoaXMuX2V2ZW50c1tvXSxyXTp0aGlzLl9ldmVudHNbb10ucHVzaChyKToodGhpcy5fZXZlbnRzW29dPXIsdGhpcy5fZXZlbnRzQ291bnQrKyksdGhpc30sby5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89cz9zK2U6ZTtpZighdGhpcy5fZXZlbnRzW29dKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiAwPT09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bmV3IHI6ZGVsZXRlIHRoaXMuX2V2ZW50c1tvXSx0aGlzO3ZhciBhPXRoaXMuX2V2ZW50c1tvXTtpZihhLmZuKWEuZm4hPT10fHxpJiYhYS5vbmNlfHxuJiZhLmNvbnRleHQhPT1ufHwoMD09PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPW5ldyByOmRlbGV0ZSB0aGlzLl9ldmVudHNbb10pO2Vsc2V7Zm9yKHZhciB1PTAsYz1bXSxsPWEubGVuZ3RoO3U8bDt1KyspKGFbdV0uZm4hPT10fHxpJiYhYVt1XS5vbmNlfHxuJiZhW3VdLmNvbnRleHQhPT1uKSYmYy5wdXNoKGFbdV0pO2MubGVuZ3RoP3RoaXMuX2V2ZW50c1tvXT0xPT09Yy5sZW5ndGg/Y1swXTpjOjA9PT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uZXcgcjpkZWxldGUgdGhpcy5fZXZlbnRzW29dfXJldHVybiB0aGlzfSxvLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGU/KHQ9cz9zK2U6ZSx0aGlzLl9ldmVudHNbdF0mJigwPT09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bmV3IHI6ZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSkpOih0aGlzLl9ldmVudHM9bmV3IHIsdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpc30sby5wcm90b3R5cGUub2ZmPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLG8ucHJvdG90eXBlLmFkZExpc3RlbmVyPW8ucHJvdG90eXBlLm9uLG8ucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLnByZWZpeGVkPXMsby5FdmVudEVtaXR0ZXI9byxlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiEhZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHIoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHwhcyhlKSYmbihlKSYmYS5jYWxsKGUpPT1pfXZhciBpPSJbb2JqZWN0IFN0cmluZ10iLG89T2JqZWN0LnByb3RvdHlwZSxhPW8udG9TdHJpbmcscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHIpe3ZhciBpLG89bigzODApO2k9InVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPT10eXBlb2YgZT9lOnI7dmFyIGE9T2JqZWN0KG8uYSkoaSk7dC5kZWZhdWx0PWF9LmNhbGwodCxuKDExKSxuKDc5KShlKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuPWUuU3ltYm9sO3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2Ygbj9uLm9ic2VydmFibGU/dD1uLm9ic2VydmFibGU6KHQ9bigib2JzZXJ2YWJsZSIpLG4ub2JzZXJ2YWJsZT10KTp0PSJAQG9ic2VydmFibGUiLHR9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuR1JBUEhRTF9XUz0iZ3JhcGhxbC13cyI7dC5HUkFQSFFMX1NVQlNDUklQVElPTlM9ImdyYXBocWwtc3Vic2NyaXB0aW9ucyJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuV1NfVElNRU9VVD0zZTR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcigiU3RhdGljIENsYXNzIil9cmV0dXJuIGUuR1FMX0NPTk5FQ1RJT05fSU5JVD0iY29ubmVjdGlvbl9pbml0IixlLkdRTF9DT05ORUNUSU9OX0FDSz0iY29ubmVjdGlvbl9hY2siLGUuR1FMX0NPTk5FQ1RJT05fRVJST1I9ImNvbm5lY3Rpb25fZXJyb3IiLGUuR1FMX0NPTk5FQ1RJT05fS0VFUF9BTElWRT0ia2EiLGUuR1FMX0NPTk5FQ1RJT05fVEVSTUlOQVRFPSJjb25uZWN0aW9uX3Rlcm1pbmF0ZSIsZS5HUUxfU1RBUlQ9InN0YXJ0IixlLkdRTF9EQVRBPSJkYXRhIixlLkdRTF9FUlJPUj0iZXJyb3IiLGUuR1FMX0NPTVBMRVRFPSJjb21wbGV0ZSIsZS5HUUxfU1RPUD0ic3RvcCIsZS5TVUJTQ1JJUFRJT05fU1RBUlQ9InN1YnNjcmlwdGlvbl9zdGFydCIsZS5TVUJTQ1JJUFRJT05fREFUQT0ic3Vic2NyaXB0aW9uX2RhdGEiLGUuU1VCU0NSSVBUSU9OX1NVQ0NFU1M9InN1YnNjcmlwdGlvbl9zdWNjZXNzIixlLlNVQlNDUklQVElPTl9GQUlMPSJzdWJzY3JpcHRpb25fZmFpbCIsZS5TVUJTQ1JJUFRJT05fRU5EPSJzdWJzY3JpcHRpb25fZW5kIixlLklOSVQ9ImluaXQiLGUuSU5JVF9TVUNDRVNTPSJpbml0X3N1Y2Nlc3MiLGUuSU5JVF9GQUlMPSJpbml0X2ZhaWwiLGUuS0VFUF9BTElWRT0ia2VlcGFsaXZlIixlfSgpO3QuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDM4NSk7bi5kKHQsImNyZWF0ZUh0dHBMaW5rIixmdW5jdGlvbigpe3JldHVybiByLmJ9KSxuLmQodCwiSHR0cExpbmsiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1bXSxyPWZ1bmN0aW9uKGUsdCl7bi5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSl9O2lmKCJxdWVyeSJpbiB0JiZyKCJxdWVyeSIsdC5xdWVyeSksdC5vcGVyYXRpb25OYW1lJiZyKCJvcGVyYXRpb25OYW1lIix0Lm9wZXJhdGlvbk5hbWUpLHQudmFyaWFibGVzKXt2YXIgaT12b2lkIDA7dHJ5e2k9T2JqZWN0KG8uZykodC52YXJpYWJsZXMsIlZhcmlhYmxlcyBtYXAiKX1jYXRjaChlKXtyZXR1cm57cGFyc2VFcnJvcjplfX1yKCJ2YXJpYWJsZXMiLGkpfWlmKHQuZXh0ZW5zaW9ucyl7dmFyIGE9dm9pZCAwO3RyeXthPU9iamVjdChvLmcpKHQuZXh0ZW5zaW9ucywiRXh0ZW5zaW9ucyBtYXAiKX1jYXRjaChlKXtyZXR1cm57cGFyc2VFcnJvcjplfX1yKCJleHRlbnNpb25zIixhKX12YXIgcz0iIix1PWUsYz1lLmluZGV4T2YoIiMiKTtyZXR1cm4tMSE9PWMmJihzPWUuc3Vic3RyKGMpLHU9ZS5zdWJzdHIoMCxjKSkse25ld1VSSTp1KygtMT09PXUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK24uam9pbigiJiIpK3N9fW4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgaT1uKDc4KSxvPW4oMzg2KSxhPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLHM9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiYiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpZm9yKHZhciBpPTAscj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8ci5sZW5ndGg7aSsrKXQuaW5kZXhPZihyW2ldKTwwJiYobltyW2ldXT1lW3JbaV1dKTtyZXR1cm4gbn0sdT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIHQ9ZS51cmksbj12b2lkIDA9PT10PyIvZ3JhcGhxbCI6dCxhPWUuZmV0Y2gsdT1lLmluY2x1ZGVFeHRlbnNpb25zLGM9ZS51c2VHRVRGb3JRdWVyaWVzLGw9cyhlLFsidXJpIiwiZmV0Y2giLCJpbmNsdWRlRXh0ZW5zaW9ucyIsInVzZUdFVEZvclF1ZXJpZXMiXSk7T2JqZWN0KG8uYSkoYSksYXx8KGE9ZmV0Y2gpO3ZhciBwPXtodHRwOntpbmNsdWRlRXh0ZW5zaW9uczp1fSxvcHRpb25zOmwuZmV0Y2hPcHRpb25zLGNyZWRlbnRpYWxzOmwuY3JlZGVudGlhbHMsaGVhZGVyczpsLmhlYWRlcnN9O3JldHVybiBuZXcgaS5BcG9sbG9MaW5rKGZ1bmN0aW9uKGUpe3ZhciB0LHM9T2JqZWN0KG8uZikoZSxuKSx1PWUuZ2V0Q29udGV4dCgpLGw9e2h0dHA6dS5odHRwLG9wdGlvbnM6dS5mZXRjaE9wdGlvbnMsY3JlZGVudGlhbHM6dS5jcmVkZW50aWFscyxoZWFkZXJzOnUuaGVhZGVyc30sZj1PYmplY3Qoby5lKShlLG8uYyxwLGwpLGQ9Zi5vcHRpb25zLGg9Zi5ib2R5O2lmKCFkLnNpZ25hbCl7dmFyIG09T2JqZWN0KG8uYikoKSxnPW0uY29udHJvbGxlcix5PW0uc2lnbmFsO3Q9Zyx0JiYoZC5zaWduYWw9eSl9dmFyIHY9ZnVuY3Rpb24oZSl7cmV0dXJuIk9wZXJhdGlvbkRlZmluaXRpb24iPT09ZS5raW5kJiYibXV0YXRpb24iPT09ZS5vcGVyYXRpb259O2lmKGMmJiFlLnF1ZXJ5LmRlZmluaXRpb25zLnNvbWUodikmJihkLm1ldGhvZD0iR0VUIiksIkdFVCI9PT1kLm1ldGhvZCl7dmFyIGI9cihzLGgpLHg9Yi5uZXdVUkksQz1iLnBhcnNlRXJyb3I7aWYoQylyZXR1cm4gT2JqZWN0KGkuZnJvbUVycm9yKShDKTtzPXh9ZWxzZSB0cnl7ZC5ib2R5PU9iamVjdChvLmcpKGgsIlBheWxvYWQiKX1jYXRjaChDKXtyZXR1cm4gT2JqZWN0KGkuZnJvbUVycm9yKShDKX1yZXR1cm4gbmV3IGkuT2JzZXJ2YWJsZShmdW5jdGlvbihuKXtyZXR1cm4gYShzLGQpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUuc2V0Q29udGV4dCh7cmVzcG9uc2U6dH0pLHR9KS50aGVuKE9iamVjdChvLmQpKGUpKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBuLm5leHQoZSksbi5jb21wbGV0ZSgpLGV9KS5jYXRjaChmdW5jdGlvbihlKXsiQWJvcnRFcnJvciIhPT1lLm5hbWUmJihlLnJlc3VsdCYmZS5yZXN1bHQuZXJyb3JzJiZlLnJlc3VsdC5kYXRhJiZuLm5leHQoZS5yZXN1bHQpLG4uZXJyb3IoZSkpfSksZnVuY3Rpb24oKXt0JiZ0LmFib3J0KCl9fSl9KX0sYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmNhbGwodGhpcyx1KHQpLnJlcXVlc3QpfHx0aGlzfXJldHVybiBhKHQsZSksdH0oaS5BcG9sbG9MaW5rKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pO3ZhciByPW4oMTkpLGk9KG4ubihyKSx0aGlzJiZ0aGlzLl9fYXNzaWdufHxPYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKXt0PWFyZ3VtZW50c1tuXTtmb3IodmFyIGkgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSl9cmV0dXJuIGV9KSxvPXtpbmNsdWRlUXVlcnk6ITAsaW5jbHVkZUV4dGVuc2lvbnM6ITF9LGE9e2FjY2VwdDoiKi8qIiwiY29udGVudC10eXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LHM9e21ldGhvZDoiUE9TVCJ9LHU9e2h0dHA6byxoZWFkZXJzOmEsb3B0aW9uczpzfSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uZXcgRXJyb3Iobik7dGhyb3cgci5yZXNwb25zZT1lLHIuc3RhdHVzQ29kZT1lLnN0YXR1cyxyLnJlc3VsdD10LHJ9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQoKS50aGVuKGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChyKXt2YXIgbj1yO3JldHVybiBuLnJlc3BvbnNlPXQsbi5zdGF0dXNDb2RlPXQuc3RhdHVzLG4uYm9keVRleHQ9ZSxQcm9taXNlLnJlamVjdChuKX19KS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN0YXR1cz49MzAwJiZjKHQsbiwiUmVzcG9uc2Ugbm90IHN1Y2Nlc3NmdWw6IFJlY2VpdmVkIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMpLEFycmF5LmlzQXJyYXkobil8fG4uaGFzT3duUHJvcGVydHkoImRhdGEiKXx8bi5oYXNPd25Qcm9wZXJ0eSgiZXJyb3JzIil8fGModCxuLCJTZXJ2ZXIgcmVzcG9uc2Ugd2FzIG1pc3NpbmcgZm9yIHF1ZXJ5ICciKyhBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9wZXJhdGlvbk5hbWV9KTplLm9wZXJhdGlvbk5hbWUpKyInLiIpLG59KX19LHA9ZnVuY3Rpb24oZSl7aWYoIWUmJiJ1bmRlZmluZWQiPT09dHlwZW9mIGZldGNoKXt2YXIgdD0idW5mZXRjaCI7dGhyb3cidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3cmJih0PSJub2RlLWZldGNoIiksbmV3IEVycm9yKCJcbmZldGNoIGlzIG5vdCBmb3VuZCBnbG9iYWxseSBhbmQgbm8gZmV0Y2hlciBwYXNzZWQsIHRvIGZpeCBwYXNzIGEgZmV0Y2ggZm9yXG55b3VyIGVudmlyb25tZW50IGxpa2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvIit0KyIuXG5cbkZvciBleGFtcGxlOlxuaW1wb3J0IGZldGNoIGZyb20gJyIrdCsiJztcbmltcG9ydCB7IGNyZWF0ZUh0dHBMaW5rIH0gZnJvbSAnYXBvbGxvLWxpbmstaHR0cCc7XG5cbmNvbnN0IGxpbmsgPSBjcmVhdGVIdHRwTGluayh7IHVyaTogJy9ncmFwaHFsJywgZmV0Y2g6IGZldGNoIH0pOyIpfX0sZj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEFib3J0Q29udHJvbGxlcilyZXR1cm57Y29udHJvbGxlcjohMSxzaWduYWw6ITF9O3ZhciBlPW5ldyBBYm9ydENvbnRyb2xsZXI7cmV0dXJue2NvbnRyb2xsZXI6ZSxzaWduYWw6ZS5zaWduYWx9fSxkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLG89MjtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKW5bby0yXT1hcmd1bWVudHNbb107dmFyIGE9aSh7fSx0Lm9wdGlvbnMse2hlYWRlcnM6dC5oZWFkZXJzLGNyZWRlbnRpYWxzOnQuY3JlZGVudGlhbHN9KSxzPXQuaHR0cDtuLmZvckVhY2goZnVuY3Rpb24oZSl7YT1pKHt9LGEsZS5vcHRpb25zLHtoZWFkZXJzOmkoe30sYS5oZWFkZXJzLGUuaGVhZGVycyl9KSxlLmNyZWRlbnRpYWxzJiYoYS5jcmVkZW50aWFscz1lLmNyZWRlbnRpYWxzKSxzPWkoe30scyxlLmh0dHApfSk7dmFyIHU9ZS5vcGVyYXRpb25OYW1lLGM9ZS5leHRlbnNpb25zLGw9ZS52YXJpYWJsZXMscD1lLnF1ZXJ5LGY9e29wZXJhdGlvbk5hbWU6dSx2YXJpYWJsZXM6bH07cmV0dXJuIHMuaW5jbHVkZUV4dGVuc2lvbnMmJihmLmV4dGVuc2lvbnM9Yykscy5pbmNsdWRlUXVlcnkmJihmLnF1ZXJ5PU9iamVjdChyLnByaW50KShwKSkse29wdGlvbnM6YSxib2R5OmZ9fSxoPWZ1bmN0aW9uKGUsdCl7dmFyIG47dHJ5e249SlNPTi5zdHJpbmdpZnkoZSl9Y2F0Y2goZSl7dmFyIHI9bmV3IEVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkLiAiK3QrIiBpcyBub3Qgc2VyaWFsaXphYmxlOiAiK2UubWVzc2FnZSk7dGhyb3cgci5wYXJzZUVycm9yPWUscn1yZXR1cm4gbn0sbT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Q29udGV4dCgpLHI9bi51cmk7cmV0dXJuIHJ8fCgiZnVuY3Rpb24iPT09dHlwZW9mIHQ/dChlKTp0fHwiL2dyYXBocWwiKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzg4KTtuLmQodCwiV2ViU29ja2V0TGluayIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKDc4KSxpPW4oMTc2KSxvPShuLm4oaSksdGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBpLlN1YnNjcmlwdGlvbkNsaWVudD9uLnN1YnNjcmlwdGlvbkNsaWVudD10Om4uc3Vic2NyaXB0aW9uQ2xpZW50PW5ldyBpLlN1YnNjcmlwdGlvbkNsaWVudCh0LnVyaSx0Lm9wdGlvbnMsdC53ZWJTb2NrZXRJbXBsKSxufXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25DbGllbnQucmVxdWVzdChlKX0sdH0oci5BcG9sbG9MaW5rKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWkoZSk7cmV0dXJuISF0JiYic3Vic2NyaXB0aW9uIj09PXQub3BlcmF0aW9ufWZ1bmN0aW9uIGkoZSl7cmV0dXJuIDE9PT1lLnF1ZXJ5LmRlZmluaXRpb25zLmxlbmd0aD9lLnF1ZXJ5LmRlZmluaXRpb25zWzBdOmUucXVlcnkuZGVmaW5pdGlvbnMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4iT3BlcmF0aW9uRGVmaW5pdGlvbiI9PT10LmtpbmQmJiEhdC5uYW1lJiZ0Lm5hbWUudmFsdWU9PT1lLm9wZXJhdGlvbk5hbWV9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1N1YnNjcmlwdGlvbj1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixvLGEscyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2koZS5zY2hlbWEsZS5zb3VyY2UsZS5yb290VmFsdWUsZS5jb250ZXh0VmFsdWUsZS52YXJpYWJsZVZhbHVlcyxlLm9wZXJhdGlvbk5hbWUsZS5maWVsZFJlc29sdmVyKTppKGUsdCxuLHIsbyxhLHMpfWZ1bmN0aW9uIGkoZSx0LG4scixpLHUsYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwpe3ZhciBwPXZvaWQgMDt0cnl7cD0oMCxvLnBhcnNlKSh0KX1jYXRjaChlKXtyZXR1cm4gbCh7ZXJyb3JzOltlXX0pfXZhciBmPSgwLGEudmFsaWRhdGUpKGUscCk7aWYoZi5sZW5ndGg+MClyZXR1cm4gbCh7ZXJyb3JzOmZ9KTtsKCgwLHMuZXhlY3V0ZSkoZSxwLG4scixpLHUsYykpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ3JhcGhxbD1yO3ZhciBvPW4oODApLGE9bigxODEpLHM9bigxMTgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPSgwLHUuZ2V0TG9jYXRpb24pKGUsdCksYT1yLmxpbmUrZS5sb2NhdGlvbk9mZnNldC5saW5lLTEscz1vKGUsciksbD1yLmNvbHVtbitzO3JldHVybiBuZXcgYy5HcmFwaFFMRXJyb3IoIlN5bnRheCBFcnJvciAiK2UubmFtZSsiICgiK2ErIjoiK2wrIikgIituKyJcblxuIitpKGUsciksdm9pZCAwLGUsW3RdKX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49dC5saW5lLHI9ZS5sb2NhdGlvbk9mZnNldC5saW5lLTEsaT1vKGUsdCksdT1uK3IsYz0odS0xKS50b1N0cmluZygpLGw9dS50b1N0cmluZygpLHA9KHUrMSkudG9TdHJpbmcoKSxmPXAubGVuZ3RoLGQ9ZS5ib2R5LnNwbGl0KC9cclxufFtcblxyXS9nKTtyZXR1cm4gZFswXT1hKGUubG9jYXRpb25PZmZzZXQuY29sdW1uLTEpK2RbMF0sKG4+PTI/cyhmLGMpKyI6ICIrZFtuLTJdKyJcbiI6IiIpK3MoZixsKSsiOiAiK2Rbbi0xXSsiXG4iK2EoMitmK3QuY29sdW1uLTEraSkrIl5cbiIrKG48ZC5sZW5ndGg/cyhmLHApKyI6ICIrZFtuXSsiXG4iOiIiKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIDE9PT10LmxpbmU/ZS5sb2NhdGlvbk9mZnNldC5jb2x1bW4tMTowfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIEFycmF5KGUrMSkuam9pbigiICIpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gYShlLXQubGVuZ3RoKSt0fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnN5bnRheEVycm9yPXI7dmFyIHU9bigxMDkpLGM9big0Myl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZXx8KDAsby5kZWZhdWx0KSgwLCJSZWNlaXZlZCBudWxsIG9yIHVuZGVmaW5lZCBlcnJvci4iKSx7bWVzc2FnZTplLm1lc3NhZ2UsbG9jYXRpb25zOmUubG9jYXRpb25zLHBhdGg6ZS5wYXRofX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5mb3JtYXRFcnJvcj1yO3ZhciBpPW4oMTMpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxTY2hlbWEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdyYXBoUUxTY2hlbWF9fSk7dmFyIGk9big2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc1R5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzSW5wdXRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc0lucHV0VHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNPdXRwdXRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc091dHB1dFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTGVhZlR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmlzTGVhZlR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzQ29tcG9zaXRlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNDb21wb3NpdGVUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0Fic3RyYWN0VHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNBYnN0cmFjdFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTmFtZWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc05hbWVkVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0VHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXNzZXJ0VHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0SW5wdXRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hc3NlcnRJbnB1dFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydE91dHB1dFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFzc2VydE91dHB1dFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydExlYWZUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hc3NlcnRMZWFmVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0Q29tcG9zaXRlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXNzZXJ0Q29tcG9zaXRlVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXNzZXJ0QWJzdHJhY3RUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hc3NlcnRBYnN0cmFjdFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydE5hbWVkVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXNzZXJ0TmFtZWRUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXROdWxsYWJsZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmdldE51bGxhYmxlVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0TmFtZWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXROYW1lZFR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxTY2FsYXJUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMU2NhbGFyVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTE9iamVjdFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxPYmplY3RUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMSW50ZXJmYWNlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEludGVyZmFjZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxVbmlvblR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkdyYXBoUUxVbmlvblR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxFbnVtVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTEVudW1UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMSW5wdXRPYmplY3RUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMSW5wdXRPYmplY3RUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMTGlzdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuR3JhcGhRTExpc3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxOb25OdWxsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5HcmFwaFFMTm9uTnVsbH19KTt2YXIgbz1uKDI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGlyZWN0aXZlTG9jYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkRpcmVjdGl2ZUxvY2F0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMRGlyZWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5HcmFwaFFMRGlyZWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzcGVjaWZpZWREaXJlY3RpdmVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zcGVjaWZpZWREaXJlY3RpdmVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMSW5jbHVkZURpcmVjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uR3JhcGhRTEluY2x1ZGVEaXJlY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxTa2lwRGlyZWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5HcmFwaFFMU2tpcERpcmVjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTERlcHJlY2F0ZWREaXJlY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkdyYXBoUUxEZXByZWNhdGVkRGlyZWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJERUZBVUxUX0RFUFJFQ0FUSU9OX1JFQVNPTiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uREVGQVVMVF9ERVBSRUNBVElPTl9SRUFTT059fSk7dmFyIGE9bigzMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxJbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLkdyYXBoUUxJbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxGbG9hdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuR3JhcGhRTEZsb2F0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5HcmFwaFFMU3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmFwaFFMQm9vbGVhbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuR3JhcGhRTEJvb2xlYW59fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdyYXBoUUxJRCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuR3JhcGhRTElEfX0pO3ZhciBzPW4oMjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUeXBlS2luZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuVHlwZUtpbmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fU2NoZW1hIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5fX1NjaGVtYX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19EaXJlY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLl9fRGlyZWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX0RpcmVjdGl2ZUxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5fX0RpcmVjdGl2ZUxvY2F0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX1R5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLl9fVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19GaWVsZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuX19GaWVsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19JbnB1dFZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5fX0lucHV0VmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fRW51bVZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5fX0VudW1WYWx1ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19UeXBlS2luZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuX19UeXBlS2luZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2NoZW1hTWV0YUZpZWxkRGVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5TY2hlbWFNZXRhRmllbGREZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlR5cGVNZXRhRmllbGREZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlR5cGVNZXRhRmllbGREZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlR5cGVOYW1lTWV0YUZpZWxkRGVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5UeXBlTmFtZU1ldGFGaWVsZERlZn19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5CUkVBSz10LmdldFZpc2l0Rm49dC52aXNpdFdpdGhUeXBlSW5mbz10LnZpc2l0SW5QYXJhbGxlbD10LnZpc2l0PXQuU291cmNlPXQucHJpbnQ9dC5wYXJzZVR5cGU9dC5wYXJzZVZhbHVlPXQucGFyc2U9dC5Ub2tlbktpbmQ9dC5jcmVhdGVMZXhlcj10LktpbmQ9dC5nZXRMb2NhdGlvbj12b2lkIDA7dmFyIHI9bigxMDkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRMb2NhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0TG9jYXRpb259fSk7dmFyIGk9bigxMTApO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVMZXhlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuY3JlYXRlTGV4ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRva2VuS2luZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuVG9rZW5LaW5kfX0pO3ZhciBvPW4oODApO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJzZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFyc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhcnNlVmFsdWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnBhcnNlVmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhcnNlVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFyc2VUeXBlfX0pO3ZhciBhPW4oMTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmludCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucHJpbnR9fSk7dmFyIHM9bigxNzkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTb3VyY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlNvdXJjZX19KTt2YXIgdT1uKDU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmlzaXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LnZpc2l0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2aXNpdEluUGFyYWxsZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LnZpc2l0SW5QYXJhbGxlbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmlzaXRXaXRoVHlwZUluZm8iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LnZpc2l0V2l0aFR5cGVJbmZvfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRWaXNpdEZuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5nZXRWaXNpdEZufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCUkVBSyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuQlJFQUt9fSk7dmFyIGM9bigxMCksbD1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KGMpO3QuS2luZD1sfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4ZWN1dGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmV4ZWN1dGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlZmF1bHRGaWVsZFJlc29sdmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0RmllbGRSZXNvbHZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVzcG9uc2VQYXRoQXNBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucmVzcG9uc2VQYXRoQXNBcnJheX19KTt2YXIgaT1uKDExOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldERpcmVjdGl2ZVZhbHVlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0RGlyZWN0aXZlVmFsdWVzfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDM5Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN1YnNjcmliZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3Vic2NyaWJlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVTb3VyY2VFdmVudFN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY3JlYXRlU291cmNlRXZlbnRTdHJlYW19fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQsbixyLGksbyxzLHUpe3ZhciBjPTE9PT1hcmd1bWVudHMubGVuZ3RoP2U6dm9pZCAwLGw9Yz9jLnNjaGVtYTplO3JldHVybiBjP2EobCxjLmRvY3VtZW50LGMucm9vdFZhbHVlLGMuY29udGV4dFZhbHVlLGMudmFyaWFibGVWYWx1ZXMsYy5vcGVyYXRpb25OYW1lLGMuZmllbGRSZXNvbHZlcixjLnN1YnNjcmliZUZpZWxkUmVzb2x2ZXIpOmEobCx0LG4scixpLG8scyx1KX1mdW5jdGlvbiBvKGUpe2lmKGUgaW5zdGFuY2VvZiBjLkdyYXBoUUxFcnJvcilyZXR1cm57ZXJyb3JzOltlXX07dGhyb3cgZX1mdW5jdGlvbiBhKGUsdCxuLHIsaSxhLHUsYyl7dmFyIGw9ZnVuY3Rpb24obil7cmV0dXJuKDAscC5leGVjdXRlKShlLHQsbixyLGksYSx1KX07cmV0dXJuIHMoZSx0LG4scixpLGEsYykudGhlbihmdW5jdGlvbihlKXtyZXR1cm4oMCxtLmRlZmF1bHQpKGUsbCxvKX0sbyl9ZnVuY3Rpb24gcyhlLHQsbixyLGksbyxhKXtyZXR1cm4oMCxwLmFzc2VydFZhbGlkRXhlY3V0aW9uQXJndW1lbnRzKShlLHQsaSksbmV3IFByb21pc2UoZnVuY3Rpb24ocyxjKXt2YXIgZj0oMCxwLmJ1aWxkRXhlY3V0aW9uQ29udGV4dCkoZSx0LG4scixpLG8sYSksaD0oMCxwLmdldE9wZXJhdGlvblJvb3RUeXBlKShlLGYub3BlcmF0aW9uKSxtPSgwLHAuY29sbGVjdEZpZWxkcykoZixoLGYub3BlcmF0aW9uLnNlbGVjdGlvblNldCxPYmplY3QuY3JlYXRlKG51bGwpLE9iamVjdC5jcmVhdGUobnVsbCkpLGc9T2JqZWN0LmtleXMobSkseT1nWzBdLHY9bVt5XSxiPXZbMF0seD0oMCxwLmdldEZpZWxkRGVmKShlLGgsYi5uYW1lLnZhbHVlKTt4fHwoMCxkLmRlZmF1bHQpKDAsIlRoaXMgc3Vic2NyaXB0aW9uIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBzY2hlbWEuIik7dmFyIEM9eC5zdWJzY3JpYmV8fGYuZmllbGRSZXNvbHZlcixFPSgwLHAuYWRkUGF0aCkodm9pZCAwLHkpLEQ9KDAscC5idWlsZFJlc29sdmVJbmZvKShmLHgsdixoLEUpO1Byb21pc2UucmVzb2x2ZSgoMCxwLnJlc29sdmVGaWVsZFZhbHVlT3JFcnJvcikoZix4LHYsQyxuLEQpKS50aGVuKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7dmFyIHQ9KDAsbC5sb2NhdGVkRXJyb3IpKGUsdiwoMCxwLnJlc3BvbnNlUGF0aEFzQXJyYXkpKEUpKTtjKHQpfSgwLHUuaXNBc3luY0l0ZXJhYmxlKShlKXx8YyhuZXcgRXJyb3IoIlN1YnNjcmlwdGlvbiBtdXN0IHJldHVybiBBc3luYyBJdGVyYWJsZS4gUmVjZWl2ZWQ6ICIrU3RyaW5nKGUpKSkscyhlKX0pLmNhdGNoKGMpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc3Vic2NyaWJlPWksdC5jcmVhdGVTb3VyY2VFdmVudFN0cmVhbT1zO3ZhciB1PW4oNDQpLGM9big0MyksbD1uKDE4MCkscD1uKDExOCksZj0obigyNiksbigxMykpLGQ9cihmKSxoPW4oMzk4KSxtPXIoaCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gaShlLHQsbil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5kb25lP2U6byhlLnZhbHVlLHQpLnRoZW4oYSxsKX12YXIgdT0oMCxzLmdldEFzeW5jSXRlcmF0b3IpKGUpLGM9dm9pZCAwLGw9dm9pZCAwOyJmdW5jdGlvbiI9PT10eXBlb2YgdS5yZXR1cm4mJihjPXUucmV0dXJuLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9O3JldHVybiBjLmNhbGwodSkudGhlbih0LHQpfSk7dmFyIHA9dm9pZCAwO2lmKG4pe3ZhciBmPW47cD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlLGYpLnRoZW4oYSxsKX19cmV0dXJuIHIoe25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5uZXh0KCkudGhlbihpLHApfSxyZXR1cm46ZnVuY3Rpb24oKXtyZXR1cm4gYz9jLmNhbGwodSkudGhlbihpLHApOlByb21pc2UucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX0sdGhyb3c6ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB1LnRocm93P3UudGhyb3coZSkudGhlbihpLHApOlByb21pc2UucmVqZWN0KGUpLmNhdGNoKGwpfX0scy4kJGFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obil7cmV0dXJuIG4odChlKSl9KX1mdW5jdGlvbiBhKGUpe3JldHVybnt2YWx1ZTplLGRvbmU6ITF9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9aTt2YXIgcz1uKDQ0KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWxpZGF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudmFsaWRhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlZhbGlkYXRpb25Db250ZXh0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5WYWxpZGF0aW9uQ29udGV4dH19KTt2YXIgaT1uKDE4Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNwZWNpZmllZFJ1bGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zcGVjaWZpZWRSdWxlc319KTt2YXIgbz1uKDIwMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFyZ3VtZW50c09mQ29ycmVjdFR5cGVSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Bcmd1bWVudHNPZkNvcnJlY3RUeXBlfX0pO3ZhciBhPW4oMjAzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVmYXVsdFZhbHVlc09mQ29ycmVjdFR5cGVSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5EZWZhdWx0VmFsdWVzT2ZDb3JyZWN0VHlwZX19KTt2YXIgcz1uKDE5MCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpZWxkc09uQ29ycmVjdFR5cGVSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5GaWVsZHNPbkNvcnJlY3RUeXBlfX0pO3ZhciB1PW4oMTg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRnJhZ21lbnRzT25Db21wb3NpdGVUeXBlc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LkZyYWdtZW50c09uQ29tcG9zaXRlVHlwZXN9fSk7dmFyIGM9bigxOTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJLbm93bkFyZ3VtZW50TmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5Lbm93bkFyZ3VtZW50TmFtZXN9fSk7dmFyIGw9bigxOTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJLbm93bkRpcmVjdGl2ZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5Lbm93bkRpcmVjdGl2ZXN9fSk7dmFyIHA9bigxMTYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJLbm93bkZyYWdtZW50TmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5Lbm93bkZyYWdtZW50TmFtZXN9fSk7dmFyIGY9bigxODYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJLbm93blR5cGVOYW1lc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLktub3duVHlwZU5hbWVzfX0pO3ZhciBkPW4oMTg0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTG9uZUFub255bW91c09wZXJhdGlvblJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLkxvbmVBbm9ueW1vdXNPcGVyYXRpb259fSk7dmFyIGg9bigxOTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb0ZyYWdtZW50Q3ljbGVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguTm9GcmFnbWVudEN5Y2xlc319KTt2YXIgbT1uKDE5NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vVW5kZWZpbmVkVmFyaWFibGVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uTm9VbmRlZmluZWRWYXJpYWJsZXN9fSk7dmFyIGc9bigxMTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb1VudXNlZEZyYWdtZW50c1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLk5vVW51c2VkRnJhZ21lbnRzfX0pO3ZhciB5PW4oMTk2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm9VbnVzZWRWYXJpYWJsZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5Ob1VudXNlZFZhcmlhYmxlc319KTt2YXIgdj1uKDIwNSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk92ZXJsYXBwaW5nRmllbGRzQ2FuQmVNZXJnZWRSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5PdmVybGFwcGluZ0ZpZWxkc0NhbkJlTWVyZ2VkfX0pO3ZhciBiPW4oMTkyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUG9zc2libGVGcmFnbWVudFNwcmVhZHNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5Qb3NzaWJsZUZyYWdtZW50U3ByZWFkc319KTt2YXIgeD1uKDIwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlByb3ZpZGVkTm9uTnVsbEFyZ3VtZW50c1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB4LlByb3ZpZGVkTm9uTnVsbEFyZ3VtZW50c319KTt2YXIgQz1uKDE4OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNjYWxhckxlYWZzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEMuU2NhbGFyTGVhZnN9fSk7dmFyIEU9bigxODUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTaW5nbGVGaWVsZFN1YnNjcmlwdGlvbnNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5TaW5nbGVGaWVsZFN1YnNjcmlwdGlvbnN9fSk7dmFyIEQ9bigyMDApO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmlxdWVBcmd1bWVudE5hbWVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuVW5pcXVlQXJndW1lbnROYW1lc319KTt2YXIgdz1uKDE5OCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVuaXF1ZURpcmVjdGl2ZXNQZXJMb2NhdGlvblJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LlVuaXF1ZURpcmVjdGl2ZXNQZXJMb2NhdGlvbn19KTt2YXIgUz1uKDE5MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVuaXF1ZUZyYWdtZW50TmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5VbmlxdWVGcmFnbWVudE5hbWVzfX0pO3ZhciBrPW4oMjA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVW5pcXVlSW5wdXRGaWVsZE5hbWVzUnVsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsuVW5pcXVlSW5wdXRGaWVsZE5hbWVzfX0pO3ZhciBBPW4oMTgzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVW5pcXVlT3BlcmF0aW9uTmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQS5VbmlxdWVPcGVyYXRpb25OYW1lc319KTt2YXIgXz1uKDE5NCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVuaXF1ZVZhcmlhYmxlTmFtZXNSdWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5VbmlxdWVWYXJpYWJsZU5hbWVzfX0pO3ZhciBUPW4oMTg4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVmFyaWFibGVzQXJlSW5wdXRUeXBlc1J1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBULlZhcmlhYmxlc0FyZUlucHV0VHlwZXN9fSk7dmFyIE89bigyMDQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJWYXJpYWJsZXNJbkFsbG93ZWRQb3NpdGlvblJ1bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPLlZhcmlhYmxlc0luQWxsb3dlZFBvc2l0aW9ufX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDQwMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImludHJvc3BlY3Rpb25RdWVyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaW50cm9zcGVjdGlvblF1ZXJ5fX0pO3ZhciBpPW4oMTc3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0T3BlcmF0aW9uQVNUIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRPcGVyYXRpb25BU1R9fSk7dmFyIG89big0MDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJidWlsZENsaWVudFNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYnVpbGRDbGllbnRTY2hlbWF9fSk7dmFyIGE9bigyMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJidWlsZEFTVFNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYnVpbGRBU1RTY2hlbWF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkU2NoZW1hIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5idWlsZFNjaGVtYX19KTt2YXIgcz1uKDQwMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4dGVuZFNjaGVtYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZXh0ZW5kU2NoZW1hfX0pO3ZhciB1PW4oNDA0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJpbnRTY2hlbWEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LnByaW50U2NoZW1hfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmludFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LnByaW50VHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJpbnRJbnRyb3NwZWN0aW9uU2NoZW1hIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5wcmludEludHJvc3BlY3Rpb25TY2hlbWF9fSk7dmFyIGM9bigyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInR5cGVGcm9tQVNUIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy50eXBlRnJvbUFTVH19KTt2YXIgbD1uKDU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsdWVGcm9tQVNUIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC52YWx1ZUZyb21BU1R9fSk7dmFyIHA9bigxMTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhc3RGcm9tVmFsdWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmFzdEZyb21WYWx1ZX19KTt2YXIgZj1uKDExMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlR5cGVJbmZvIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5UeXBlSW5mb319KTt2YXIgZD1uKDIwNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzVmFsaWRKU1ZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc1ZhbGlkSlNWYWx1ZX19KTt2YXIgaD1uKDgyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNWYWxpZExpdGVyYWxWYWx1ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguaXNWYWxpZExpdGVyYWxWYWx1ZX19KTt2YXIgbT1uKDQwNSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNvbmNhdEFTVCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uY29uY2F0QVNUfX0pO3ZhciBnPW4oNDA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VwYXJhdGVPcGVyYXRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5zZXBhcmF0ZU9wZXJhdGlvbnN9fSk7dmFyIHk9big4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRXF1YWxUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5pc0VxdWFsVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNUeXBlU3ViVHlwZU9mIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5pc1R5cGVTdWJUeXBlT2Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRvVHlwZXNPdmVybGFwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kb1R5cGVzT3ZlcmxhcH19KTt2YXIgdj1uKDExMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFzc2VydFZhbGlkTmFtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuYXNzZXJ0VmFsaWROYW1lfX0pO3ZhciBiPW4oNDA3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQnJlYWtpbmdDaGFuZ2VUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5CcmVha2luZ0NoYW5nZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRhbmdlcm91c0NoYW5nZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLkRhbmdlcm91c0NoYW5nZVR5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmRCcmVha2luZ0NoYW5nZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLmZpbmRCcmVha2luZ0NoYW5nZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmREYW5nZXJvdXNDaGFuZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5maW5kRGFuZ2Vyb3VzQ2hhbmdlc319KTt2YXIgeD1uKDQwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmREZXByZWNhdGVkVXNhZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geC5maW5kRGVwcmVjYXRlZFVzYWdlc319KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5pbnRyb3NwZWN0aW9uUXVlcnk9IlxuICBxdWVyeSBJbnRyb3NwZWN0aW9uUXVlcnkge1xuICAgIF9fc2NoZW1hIHtcbiAgICAgIHF1ZXJ5VHlwZSB7IG5hbWUgfVxuICAgICAgbXV0YXRpb25UeXBlIHsgbmFtZSB9XG4gICAgICBzdWJzY3JpcHRpb25UeXBlIHsgbmFtZSB9XG4gICAgICB0eXBlcyB7XG4gICAgICAgIC4uLkZ1bGxUeXBlXG4gICAgICB9XG4gICAgICBkaXJlY3RpdmVzIHtcbiAgICAgICAgbmFtZVxuICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICBsb2NhdGlvbnNcbiAgICAgICAgYXJncyB7XG4gICAgICAgICAgLi4uSW5wdXRWYWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnJhZ21lbnQgRnVsbFR5cGUgb24gX19UeXBlIHtcbiAgICBraW5kXG4gICAgbmFtZVxuICAgIGRlc2NyaXB0aW9uXG4gICAgZmllbGRzKGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlKSB7XG4gICAgICBuYW1lXG4gICAgICBkZXNjcmlwdGlvblxuICAgICAgYXJncyB7XG4gICAgICAgIC4uLklucHV0VmFsdWVcbiAgICAgIH1cbiAgICAgIHR5cGUge1xuICAgICAgICAuLi5UeXBlUmVmXG4gICAgICB9XG4gICAgICBpc0RlcHJlY2F0ZWRcbiAgICAgIGRlcHJlY2F0aW9uUmVhc29uXG4gICAgfVxuICAgIGlucHV0RmllbGRzIHtcbiAgICAgIC4uLklucHV0VmFsdWVcbiAgICB9XG4gICAgaW50ZXJmYWNlcyB7XG4gICAgICAuLi5UeXBlUmVmXG4gICAgfVxuICAgIGVudW1WYWx1ZXMoaW5jbHVkZURlcHJlY2F0ZWQ6IHRydWUpIHtcbiAgICAgIG5hbWVcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgICBpc0RlcHJlY2F0ZWRcbiAgICAgIGRlcHJlY2F0aW9uUmVhc29uXG4gICAgfVxuICAgIHBvc3NpYmxlVHlwZXMge1xuICAgICAgLi4uVHlwZVJlZlxuICAgIH1cbiAgfVxuXG4gIGZyYWdtZW50IElucHV0VmFsdWUgb24gX19JbnB1dFZhbHVlIHtcbiAgICBuYW1lXG4gICAgZGVzY3JpcHRpb25cbiAgICB0eXBlIHsgLi4uVHlwZVJlZiB9XG4gICAgZGVmYXVsdFZhbHVlXG4gIH1cblxuICBmcmFnbWVudCBUeXBlUmVmIG9uIF9fVHlwZSB7XG4gICAga2luZFxuICAgIG5hbWVcbiAgICBvZlR5cGUge1xuICAgICAga2luZFxuICAgICAgbmFtZVxuICAgICAgb2ZUeXBlIHtcbiAgICAgICAga2luZFxuICAgICAgICBuYW1lXG4gICAgICAgIG9mVHlwZSB7XG4gICAgICAgICAga2luZFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgICBvZlR5cGUge1xuICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgb2ZUeXBlIHtcbiAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgIG9mVHlwZSB7XG4gICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICBvZlR5cGUge1xuICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIHQoZSl7aWYoZS5raW5kPT09Zy5UeXBlS2luZC5MSVNUKXt2YXIgcj1lLm9mVHlwZTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkRlY29yYXRlZCB0eXBlIGRlZXBlciB0aGFuIGludHJvc3BlY3Rpb24gcXVlcnkuIik7cmV0dXJuIG5ldyBtLkdyYXBoUUxMaXN0KHQocikpfWlmKGUua2luZD09PWcuVHlwZUtpbmQuTk9OX05VTEwpe3ZhciBpPWUub2ZUeXBlO2lmKCFpKXRocm93IG5ldyBFcnJvcigiRGVjb3JhdGVkIHR5cGUgZGVlcGVyIHRoYW4gaW50cm9zcGVjdGlvbiBxdWVyeS4iKTt2YXIgbz10KGkpO3JldHVybiBvIGluc3RhbmNlb2YgbS5HcmFwaFFMTm9uTnVsbCYmKDAscy5kZWZhdWx0KSgwLCJObyBuZXN0aW5nIG5vbm51bGwuIiksbmV3IG0uR3JhcGhRTE5vbk51bGwobyl9cmV0dXJuIG4oZS5uYW1lKX1mdW5jdGlvbiBuKGUpe2lmKEZbZV0pcmV0dXJuIEZbZV07dmFyIHQ9T1tlXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3IgaW5jb21wbGV0ZSBzY2hlbWEsIHVua25vd24gdHlwZTogIitlKyIuIEVuc3VyZSB0aGF0IGEgZnVsbCBpbnRyb3NwZWN0aW9uIHF1ZXJ5IGlzIHVzZWQgaW4gb3JkZXIgdG8gYnVpbGQgYSBjbGllbnQgc2NoZW1hLiIpO3ZhciBuPWwodCk7cmV0dXJuIEZbZV09bixufWZ1bmN0aW9uIHIoZSl7dmFyIG49dChlKTtyZXR1cm4oMCxtLmlzSW5wdXRUeXBlKShuKXx8KDAscy5kZWZhdWx0KSgwLCJJbnRyb3NwZWN0aW9uIG11c3QgcHJvdmlkZSBpbnB1dCB0eXBlIGZvciBhcmd1bWVudHMuIiksbn1mdW5jdGlvbiBpKGUpe3ZhciBuPXQoZSk7cmV0dXJuKDAsbS5pc091dHB1dFR5cGUpKG4pfHwoMCxzLmRlZmF1bHQpKDAsIkludHJvc3BlY3Rpb24gbXVzdCBwcm92aWRlIG91dHB1dCB0eXBlIGZvciBmaWVsZHMuIiksbn1mdW5jdGlvbiBhKGUpe3ZhciBuPXQoZSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBtLkdyYXBoUUxPYmplY3RUeXBlfHwoMCxzLmRlZmF1bHQpKDAsIkludHJvc3BlY3Rpb24gbXVzdCBwcm92aWRlIG9iamVjdCB0eXBlIGZvciBwb3NzaWJsZVR5cGVzLiIpLG59ZnVuY3Rpb24gdShlKXt2YXIgbj10KGUpO3JldHVybiBuIGluc3RhbmNlb2YgbS5HcmFwaFFMSW50ZXJmYWNlVHlwZXx8KDAscy5kZWZhdWx0KSgwLCJJbnRyb3NwZWN0aW9uIG11c3QgcHJvdmlkZSBpbnRlcmZhY2UgdHlwZSBmb3IgaW50ZXJmYWNlcy4iKSxufWZ1bmN0aW9uIGwoZSl7c3dpdGNoKGUua2luZCl7Y2FzZSBnLlR5cGVLaW5kLlNDQUxBUjpyZXR1cm4gYihlKTtjYXNlIGcuVHlwZUtpbmQuT0JKRUNUOnJldHVybiB4KGUpO2Nhc2UgZy5UeXBlS2luZC5JTlRFUkZBQ0U6cmV0dXJuIEMoZSk7Y2FzZSBnLlR5cGVLaW5kLlVOSU9OOnJldHVybiBFKGUpO2Nhc2UgZy5UeXBlS2luZC5FTlVNOnJldHVybiBEKGUpO2Nhc2UgZy5UeXBlS2luZC5JTlBVVF9PQkpFQ1Q6cmV0dXJuIHcoZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3IgaW5jb21wbGV0ZSBzY2hlbWEsIHVua25vd24ga2luZDogIitlLmtpbmQrIi4gRW5zdXJlIHRoYXQgYSBmdWxsIGludHJvc3BlY3Rpb24gcXVlcnkgaXMgdXNlZCBpbiBvcmRlciB0byBidWlsZCBhIGNsaWVudCBzY2hlbWEuIil9fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIG5ldyBtLkdyYXBoUUxTY2FsYXJUeXBlKHtuYW1lOmUubmFtZSxkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLHNlcmlhbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX0scGFyc2VWYWx1ZTpmdW5jdGlvbigpe3JldHVybiExfSxwYXJzZUxpdGVyYWw6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KX1mdW5jdGlvbiB4KGUpe3JldHVybiBuZXcgbS5HcmFwaFFMT2JqZWN0VHlwZSh7bmFtZTplLm5hbWUsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbixpbnRlcmZhY2VzOmUuaW50ZXJmYWNlcy5tYXAodSksZmllbGRzOmZ1bmN0aW9uKCl7cmV0dXJuIFMoZSl9fSl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gbmV3IG0uR3JhcGhRTEludGVyZmFjZVR5cGUoe25hbWU6ZS5uYW1lLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24sZmllbGRzOmZ1bmN0aW9uKCl7cmV0dXJuIFMoZSl9LHJlc29sdmVUeXBlOm99KX1mdW5jdGlvbiBFKGUpe3JldHVybiBuZXcgbS5HcmFwaFFMVW5pb25UeXBlKHtuYW1lOmUubmFtZSxkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLHR5cGVzOmUucG9zc2libGVUeXBlcy5tYXAoYSkscmVzb2x2ZVR5cGU6b30pfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIG5ldyBtLkdyYXBoUUxFbnVtVHlwZSh7bmFtZTplLm5hbWUsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbix2YWx1ZXM6KDAscC5kZWZhdWx0KShlLmVudW1WYWx1ZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0sZnVuY3Rpb24oZSl7cmV0dXJue2Rlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24sZGVwcmVjYXRpb25SZWFzb246ZS5kZXByZWNhdGlvblJlYXNvbn19KX0pfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIG5ldyBtLkdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe25hbWU6ZS5uYW1lLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24sZmllbGRzOmZ1bmN0aW9uKCl7cmV0dXJuIGsoZS5pbnB1dEZpZWxkcyl9fSl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4oMCxwLmRlZmF1bHQpKGUuZmllbGRzLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWV9LGZ1bmN0aW9uKGUpe3JldHVybntkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLGRlcHJlY2F0aW9uUmVhc29uOmUuZGVwcmVjYXRpb25SZWFzb24sdHlwZTppKGUudHlwZSksYXJnczprKGUuYXJncyl9fSl9ZnVuY3Rpb24gayhlKXtyZXR1cm4oMCxwLmRlZmF1bHQpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0sQSl9ZnVuY3Rpb24gQShlKXt2YXIgdD1yKGUudHlwZSksbj1lLmRlZmF1bHRWYWx1ZT8oMCxmLnZhbHVlRnJvbUFTVCkoKDAsZC5wYXJzZVZhbHVlKShlLmRlZmF1bHRWYWx1ZSksdCk6dm9pZCAwO3JldHVybntuYW1lOmUubmFtZSxkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLHR5cGU6dCxkZWZhdWx0VmFsdWU6bn19ZnVuY3Rpb24gXyhlKXt2YXIgdD1lLmxvY2F0aW9ucz9lLmxvY2F0aW9ucy5zbGljZSgpOltdLmNvbmNhdChlLm9uRmllbGQ/W3YuRGlyZWN0aXZlTG9jYXRpb24uRklFTERdOltdLGUub25PcGVyYXRpb24/W3YuRGlyZWN0aXZlTG9jYXRpb24uUVVFUlksdi5EaXJlY3RpdmVMb2NhdGlvbi5NVVRBVElPTix2LkRpcmVjdGl2ZUxvY2F0aW9uLlNVQlNDUklQVElPTl06W10sZS5vbkZyYWdtZW50P1t2LkRpcmVjdGl2ZUxvY2F0aW9uLkZSQUdNRU5UX0RFRklOSVRJT04sdi5EaXJlY3RpdmVMb2NhdGlvbi5GUkFHTUVOVF9TUFJFQUQsdi5EaXJlY3RpdmVMb2NhdGlvbi5JTkxJTkVfRlJBR01FTlRdOltdKTtyZXR1cm4gbmV3IHYuR3JhcGhRTERpcmVjdGl2ZSh7bmFtZTplLm5hbWUsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbixsb2NhdGlvbnM6dCxhcmdzOmsoZS5hcmdzKX0pfXZhciBUPWUuX19zY2hlbWEsTz0oMCxjLmRlZmF1bHQpKFQudHlwZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pLEY9e1N0cmluZzp5LkdyYXBoUUxTdHJpbmcsSW50OnkuR3JhcGhRTEludCxGbG9hdDp5LkdyYXBoUUxGbG9hdCxCb29sZWFuOnkuR3JhcGhRTEJvb2xlYW4sSUQ6eS5HcmFwaFFMSUQsX19TY2hlbWE6Zy5fX1NjaGVtYSxfX0RpcmVjdGl2ZTpnLl9fRGlyZWN0aXZlLF9fRGlyZWN0aXZlTG9jYXRpb246Zy5fX0RpcmVjdGl2ZUxvY2F0aW9uLF9fVHlwZTpnLl9fVHlwZSxfX0ZpZWxkOmcuX19GaWVsZCxfX0lucHV0VmFsdWU6Zy5fX0lucHV0VmFsdWUsX19FbnVtVmFsdWU6Zy5fX0VudW1WYWx1ZSxfX1R5cGVLaW5kOmcuX19UeXBlS2luZH0sTj1ULnR5cGVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbihlLm5hbWUpfSksST1hKFQucXVlcnlUeXBlKSxMPVQubXV0YXRpb25UeXBlP2EoVC5tdXRhdGlvblR5cGUpOm51bGwsUD1ULnN1YnNjcmlwdGlvblR5cGU/YShULnN1YnNjcmlwdGlvblR5cGUpOm51bGwsTT1ULmRpcmVjdGl2ZXM/VC5kaXJlY3RpdmVzLm1hcChfKTpbXTtyZXR1cm4gbmV3IGguR3JhcGhRTFNjaGVtYSh7cXVlcnk6SSxtdXRhdGlvbjpMLHN1YnNjcmlwdGlvbjpQLHR5cGVzOk4sZGlyZWN0aXZlczpNfSl9ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigiQ2xpZW50IFNjaGVtYSBjYW5ub3QgdXNlIEludGVyZmFjZSBvciBVbmlvbiB0eXBlcyBmb3IgZXhlY3V0aW9uLiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmJ1aWxkQ2xpZW50U2NoZW1hPWk7dmFyIGE9bigxMykscz1yKGEpLHU9big0NiksYz1yKHUpLGw9bigxMjApLHA9cihsKSxmPW4oNTkpLGQ9big4MCksaD1uKDI2KSxtPW4oNiksZz1uKDI4KSx5PW4oMzIpLHY9bigyNyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9eChlLm5hbWUpO3JldHVybiB0fHwoMCxzLmRlZmF1bHQpKDAsIk1pc3NpbmcgdHlwZSBmcm9tIHNjaGVtYSIpLHR9ZnVuY3Rpb24gcihlKXt2YXIgdD14KGUubmFtZS52YWx1ZSk7aWYoIXQpdGhyb3cgbmV3IGguR3JhcGhRTEVycm9yKCdVbmtub3duIHR5cGU6ICInK2UubmFtZS52YWx1ZSsnIi4gRW5zdXJlIHRoYXQgdGhpcyB0eXBlIGV4aXN0cyBlaXRoZXIgaW4gdGhlIG9yaWdpbmFsIHNjaGVtYSwgb3IgaXMgYWRkZWQgaW4gYSB0eXBlIGRlZmluaXRpb24uJyxbZV0pO3JldHVybiB0fWZ1bmN0aW9uIGkoZSl7dmFyIHQ9cihlKTtyZXR1cm4gdCBpbnN0YW5jZW9mIGcuR3JhcGhRTE9iamVjdFR5cGV8fCgwLHMuZGVmYXVsdCkoMCwiTXVzdCBiZSBPYmplY3QgdHlwZS4iKSx0fWZ1bmN0aW9uIGEoZSl7dmFyIHQ9cihlKTtyZXR1cm4gdCBpbnN0YW5jZW9mIGcuR3JhcGhRTEludGVyZmFjZVR5cGV8fCgwLHMuZGVmYXVsdCkoMCwiTXVzdCBiZSBJbnRlcmZhY2UgdHlwZS4iKSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJuKDAsZy5hc3NlcnRJbnB1dFR5cGUpKHIoZSkpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuKDAsZy5hc3NlcnRPdXRwdXRUeXBlKShyKGUpKX1mdW5jdGlvbiB4KHQpe3ZhciBuPVhbdF07aWYobilyZXR1cm4gbjt2YXIgcj1lLmdldFR5cGUodCk7aWYocil7dmFyIGk9RShyKTtyZXR1cm4gWFt0XT1pLGl9dmFyIG89elt0XTtpZihvKXt2YXIgYT1UKG8pO3JldHVybiBYW3RdPWEsYX19ZnVuY3Rpb24gRShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGcuR3JhcGhRTE9iamVjdFR5cGU/RChlKTplIGluc3RhbmNlb2YgZy5HcmFwaFFMSW50ZXJmYWNlVHlwZT93KGUpOmUgaW5zdGFuY2VvZiBnLkdyYXBoUUxVbmlvblR5cGU/UyhlKTplfWZ1bmN0aW9uIEQoZSl7dmFyIHQ9ZS5uYW1lLG49ZS5leHRlbnNpb25BU1ROb2RlcztyZXR1cm4gR1t0XSYmKG49bi5jb25jYXQoR1t0XSkpLG5ldyBnLkdyYXBoUUxPYmplY3RUeXBlKHtuYW1lOnQsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbixpbnRlcmZhY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGsoZSl9LGZpZWxkczpmdW5jdGlvbigpe3JldHVybiBBKGUpfSxhc3ROb2RlOmUuYXN0Tm9kZSxleHRlbnNpb25BU1ROb2RlczpuLGlzVHlwZU9mOmUuaXNUeXBlT2Z9KX1mdW5jdGlvbiB3KGUpe3JldHVybiBuZXcgZy5HcmFwaFFMSW50ZXJmYWNlVHlwZSh7bmFtZTplLm5hbWUsZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbixmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm4gQShlKX0sYXN0Tm9kZTplLmFzdE5vZGUscmVzb2x2ZVR5cGU6ZS5yZXNvbHZlVHlwZX0pfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIG5ldyBnLkdyYXBoUUxVbmlvblR5cGUoe25hbWU6ZS5uYW1lLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24sdHlwZXM6ZS5nZXRUeXBlcygpLm1hcChuKSxhc3ROb2RlOmUuYXN0Tm9kZSxyZXNvbHZlVHlwZTplLnJlc29sdmVUeXBlfSl9ZnVuY3Rpb24gayhlKXt2YXIgdD1lLmdldEludGVyZmFjZXMoKS5tYXAobikscj1HW2UubmFtZV07cmV0dXJuIHImJnIuZm9yRWFjaChmdW5jdGlvbihuKXtuLmRlZmluaXRpb24uaW50ZXJmYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4ubmFtZS52YWx1ZTtpZih0LnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXJ9KSl0aHJvdyBuZXcgaC5HcmFwaFFMRXJyb3IoJ1R5cGUgIicrZS5uYW1lKyciIGFscmVhZHkgaW1wbGVtZW50cyAiJytyKyciLiBJdCBjYW5ub3QgYWxzbyBiZSBpbXBsZW1lbnRlZCBpbiB0aGlzIHR5cGUgZXh0ZW5zaW9uLicsW25dKTt0LnB1c2goYShuKSl9KX0pLHR9ZnVuY3Rpb24gQShlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49ZS5nZXRGaWVsZHMoKTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07dFtlXT17ZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixkZXByZWNhdGlvblJlYXNvbjpyLmRlcHJlY2F0aW9uUmVhc29uLHR5cGU6XyhyLnR5cGUpLGFyZ3M6KDAsYy5kZWZhdWx0KShyLmFyZ3MsZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pLGFzdE5vZGU6ci5hc3ROb2RlLHJlc29sdmU6ci5yZXNvbHZlfX0pO3ZhciByPUdbZS5uYW1lXTtyZXR1cm4gciYmci5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuZGVmaW5pdGlvbi5maWVsZHMuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1yLm5hbWUudmFsdWU7aWYobltpXSl0aHJvdyBuZXcgaC5HcmFwaFFMRXJyb3IoJ0ZpZWxkICInK2UubmFtZSsiLiIraSsnIiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc2NoZW1hLiBJdCBjYW5ub3QgYWxzbyBiZSBkZWZpbmVkIGluIHRoaXMgdHlwZSBleHRlbnNpb24uJyxbcl0pO3RbaV09e2Rlc2NyaXB0aW9uOigwLGYuZ2V0RGVzY3JpcHRpb24pKHIpLHR5cGU6VShyLnR5cGUpLGFyZ3M6QihyLmFyZ3VtZW50cyksZGVwcmVjYXRpb25SZWFzb246KDAsZi5nZXREZXByZWNhdGlvblJlYXNvbikociksYXN0Tm9kZTpyfX0pfSksdH1mdW5jdGlvbiBfKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZy5HcmFwaFFMTGlzdD9uZXcgZy5HcmFwaFFMTGlzdChfKGUub2ZUeXBlKSk6ZSBpbnN0YW5jZW9mIGcuR3JhcGhRTE5vbk51bGw/bmV3IGcuR3JhcGhRTE5vbk51bGwoXyhlLm9mVHlwZSkpOm4oZSl9ZnVuY3Rpb24gVChlKXtzd2l0Y2goZS5raW5kKXtjYXNlIEMuT0JKRUNUX1RZUEVfREVGSU5JVElPTjpyZXR1cm4gTyhlKTtjYXNlIEMuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTjpyZXR1cm4gRihlKTtjYXNlIEMuVU5JT05fVFlQRV9ERUZJTklUSU9OOnJldHVybiBOKGUpO2Nhc2UgQy5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OOnJldHVybiBJKGUpO2Nhc2UgQy5FTlVNX1RZUEVfREVGSU5JVElPTjpyZXR1cm4gTChlKTtjYXNlIEMuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTjpyZXR1cm4gUChlKX10aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIHR5cGUga2luZCAiK2Uua2luZCl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gbmV3IGcuR3JhcGhRTE9iamVjdFR5cGUoe25hbWU6ZS5uYW1lLnZhbHVlLGRlc2NyaXB0aW9uOigwLGYuZ2V0RGVzY3JpcHRpb24pKGUpLGludGVyZmFjZXM6ZnVuY3Rpb24oKXtyZXR1cm4gaihlKX0sZmllbGRzOmZ1bmN0aW9uKCl7cmV0dXJuIFIoZSl9LGFzdE5vZGU6ZX0pfWZ1bmN0aW9uIEYoZSl7cmV0dXJuIG5ldyBnLkdyYXBoUUxJbnRlcmZhY2VUeXBlKHtuYW1lOmUubmFtZS52YWx1ZSxkZXNjcmlwdGlvbjooMCxmLmdldERlc2NyaXB0aW9uKShlKSxmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm4gUihlKX0sYXN0Tm9kZTplLHJlc29sdmVUeXBlOm99KX1mdW5jdGlvbiBOKGUpe3JldHVybiBuZXcgZy5HcmFwaFFMVW5pb25UeXBlKHtuYW1lOmUubmFtZS52YWx1ZSxkZXNjcmlwdGlvbjooMCxmLmdldERlc2NyaXB0aW9uKShlKSx0eXBlczplLnR5cGVzLm1hcChpKSxhc3ROb2RlOmUscmVzb2x2ZVR5cGU6b30pfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIG5ldyBnLkdyYXBoUUxTY2FsYXJUeXBlKHtuYW1lOmUubmFtZS52YWx1ZSxkZXNjcmlwdGlvbjooMCxmLmdldERlc2NyaXB0aW9uKShlKSxhc3ROb2RlOmUsc2VyaWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxwYXJzZVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LHBhcnNlTGl0ZXJhbDpmdW5jdGlvbigpe3JldHVybiExfX0pfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG5ldyBnLkdyYXBoUUxFbnVtVHlwZSh7bmFtZTplLm5hbWUudmFsdWUsZGVzY3JpcHRpb246KDAsZi5nZXREZXNjcmlwdGlvbikoZSksdmFsdWVzOigwLHAuZGVmYXVsdCkoZS52YWx1ZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZS52YWx1ZX0sZnVuY3Rpb24oZSl7cmV0dXJue2Rlc2NyaXB0aW9uOigwLGYuZ2V0RGVzY3JpcHRpb24pKGUpLGRlcHJlY2F0aW9uUmVhc29uOigwLGYuZ2V0RGVwcmVjYXRpb25SZWFzb24pKGUpLGFzdE5vZGU6ZX19KSxhc3ROb2RlOmV9KX1mdW5jdGlvbiBQKGUpe3JldHVybiBuZXcgZy5HcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtuYW1lOmUubmFtZS52YWx1ZSxkZXNjcmlwdGlvbjooMCxmLmdldERlc2NyaXB0aW9uKShlKSxmaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm4gQihlLmZpZWxkcyl9LGFzdE5vZGU6ZX0pfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIG5ldyB5LkdyYXBoUUxEaXJlY3RpdmUoe25hbWU6ZS5uYW1lLnZhbHVlLGRlc2NyaXB0aW9uOigwLGYuZ2V0RGVzY3JpcHRpb24pKGUpLGxvY2F0aW9uczplLmxvY2F0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KSxhcmdzOmUuYXJndW1lbnRzJiZCKGUuYXJndW1lbnRzKSxhc3ROb2RlOmV9KX1mdW5jdGlvbiBqKGUpe3JldHVybiBlLmludGVyZmFjZXMmJmUuaW50ZXJmYWNlcy5tYXAoYSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4oMCxwLmRlZmF1bHQpKGUuZmllbGRzLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudmFsdWV9LGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlUoZS50eXBlKSxkZXNjcmlwdGlvbjooMCxmLmdldERlc2NyaXB0aW9uKShlKSxhcmdzOkIoZS5hcmd1bWVudHMpLGRlcHJlY2F0aW9uUmVhc29uOigwLGYuZ2V0RGVwcmVjYXRpb25SZWFzb24pKGUpLGFzdE5vZGU6ZX19KX1mdW5jdGlvbiBCKGUpe3JldHVybigwLHAuZGVmYXVsdCkoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSxmdW5jdGlvbihlKXt2YXIgdD0kKGUudHlwZSk7cmV0dXJue3R5cGU6dCxkZXNjcmlwdGlvbjooMCxmLmdldERlc2NyaXB0aW9uKShlKSxkZWZhdWx0VmFsdWU6KDAsZC52YWx1ZUZyb21BU1QpKGUuZGVmYXVsdFZhbHVlLHQpLGFzdE5vZGU6ZX19KX1mdW5jdGlvbiAkKGUpe2lmKGUua2luZD09PUMuTElTVF9UWVBFKXJldHVybiBuZXcgZy5HcmFwaFFMTGlzdCgkKGUudHlwZSkpO2lmKGUua2luZD09PUMuTk9OX05VTExfVFlQRSl7dmFyIHQ9JChlLnR5cGUpO3JldHVybiB0IGluc3RhbmNlb2YgZy5HcmFwaFFMTm9uTnVsbCYmKDAscy5kZWZhdWx0KSgwLCJNdXN0IGJlIG51bGxhYmxlIiksbmV3IGcuR3JhcGhRTE5vbk51bGwodCl9cmV0dXJuIHUoZSl9ZnVuY3Rpb24gVShlKXtpZihlLmtpbmQ9PT1DLkxJU1RfVFlQRSlyZXR1cm4gbmV3IGcuR3JhcGhRTExpc3QoVShlLnR5cGUpKTtpZihlLmtpbmQ9PT1DLk5PTl9OVUxMX1RZUEUpe3ZhciB0PVUoZS50eXBlKTtyZXR1cm4gdCBpbnN0YW5jZW9mIGcuR3JhcGhRTE5vbk51bGwmJigwLHMuZGVmYXVsdCkoMCwiTXVzdCBiZSBudWxsYWJsZSIpLG5ldyBnLkdyYXBoUUxOb25OdWxsKHQpfXJldHVybiBsKGUpfWUgaW5zdGFuY2VvZiBtLkdyYXBoUUxTY2hlbWF8fCgwLHMuZGVmYXVsdCkoMCwiTXVzdCBwcm92aWRlIHZhbGlkIEdyYXBoUUxTY2hlbWEiKSx0JiZ0LmtpbmQ9PT1DLkRPQ1VNRU5UfHwoMCxzLmRlZmF1bHQpKDAsIk11c3QgcHJvdmlkZSB2YWxpZCBEb2N1bWVudCBBU1QiKTtmb3IodmFyIHo9T2JqZWN0LmNyZWF0ZShudWxsKSxHPU9iamVjdC5jcmVhdGUobnVsbCksVj1bXSxxPTA7cTx0LmRlZmluaXRpb25zLmxlbmd0aDtxKyspe3ZhciBIPXQuZGVmaW5pdGlvbnNbcV07c3dpdGNoKEgua2luZCl7Y2FzZSBDLk9CSkVDVF9UWVBFX0RFRklOSVRJT046Y2FzZSBDLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT046Y2FzZSBDLkVOVU1fVFlQRV9ERUZJTklUSU9OOmNhc2UgQy5VTklPTl9UWVBFX0RFRklOSVRJT046Y2FzZSBDLlNDQUxBUl9UWVBFX0RFRklOSVRJT046Y2FzZSBDLklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT046dmFyIFc9SC5uYW1lLnZhbHVlO2lmKGUuZ2V0VHlwZShXKSl0aHJvdyBuZXcgaC5HcmFwaFFMRXJyb3IoJ1R5cGUgIicrVysnIiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc2NoZW1hLiBJdCBjYW5ub3QgYWxzbyBiZSBkZWZpbmVkIGluIHRoaXMgdHlwZSBkZWZpbml0aW9uLicsW0hdKTt6W1ddPUg7YnJlYWs7Y2FzZSBDLlRZUEVfRVhURU5TSU9OX0RFRklOSVRJT046dmFyIFE9SC5kZWZpbml0aW9uLm5hbWUudmFsdWUsSz1lLmdldFR5cGUoUSk7aWYoIUspdGhyb3cgbmV3IGguR3JhcGhRTEVycm9yKCdDYW5ub3QgZXh0ZW5kIHR5cGUgIicrUSsnIiBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBleGlzdGluZyBzY2hlbWEuJyxbSC5kZWZpbml0aW9uXSk7aWYoIShLIGluc3RhbmNlb2YgZy5HcmFwaFFMT2JqZWN0VHlwZSkpdGhyb3cgbmV3IGguR3JhcGhRTEVycm9yKCdDYW5ub3QgZXh0ZW5kIG5vbi1vYmplY3QgdHlwZSAiJytRKyciLicsW0guZGVmaW5pdGlvbl0pO3ZhciBKPUdbUV07Sj9KLnB1c2goSCk6Sj1bSF0sR1tRXT1KO2JyZWFrO2Nhc2UgQy5ESVJFQ1RJVkVfREVGSU5JVElPTjp2YXIgWT1ILm5hbWUudmFsdWU7aWYoZS5nZXREaXJlY3RpdmUoWSkpdGhyb3cgbmV3IGguR3JhcGhRTEVycm9yKCdEaXJlY3RpdmUgIicrWSsnIiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc2NoZW1hLiBJdCBjYW5ub3QgYmUgcmVkZWZpbmVkLicsW0hdKTtWLnB1c2goSCl9fWlmKDA9PT1PYmplY3Qua2V5cyhHKS5sZW5ndGgmJjA9PT1PYmplY3Qua2V5cyh6KS5sZW5ndGgmJjA9PT1WLmxlbmd0aClyZXR1cm4gZTt2YXIgWD17U3RyaW5nOmIuR3JhcGhRTFN0cmluZyxJbnQ6Yi5HcmFwaFFMSW50LEZsb2F0OmIuR3JhcGhRTEZsb2F0LEJvb2xlYW46Yi5HcmFwaFFMQm9vbGVhbixJRDpiLkdyYXBoUUxJRCxfX1NjaGVtYTp2Ll9fU2NoZW1hLF9fRGlyZWN0aXZlOnYuX19EaXJlY3RpdmUsX19EaXJlY3RpdmVMb2NhdGlvbjp2Ll9fRGlyZWN0aXZlTG9jYXRpb24sX19UeXBlOnYuX19UeXBlLF9fRmllbGQ6di5fX0ZpZWxkLF9fSW5wdXRWYWx1ZTp2Ll9fSW5wdXRWYWx1ZSxfX0VudW1WYWx1ZTp2Ll9fRW51bVZhbHVlLF9fVHlwZUtpbmQ6di5fX1R5cGVLaW5kfSxaPW4oZS5nZXRRdWVyeVR5cGUoKSksZWU9ZS5nZXRNdXRhdGlvblR5cGUoKSx0ZT1lZT9uKGVlKTpudWxsLG5lPWUuZ2V0U3Vic2NyaXB0aW9uVHlwZSgpLHJlPW5lP24obmUpOm51bGwsaWU9ZS5nZXRUeXBlTWFwKCksb2U9T2JqZWN0LmtleXMoaWUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbihpZVtlXSl9KTtyZXR1cm4gT2JqZWN0LmtleXMoeikuZm9yRWFjaChmdW5jdGlvbihlKXtvZS5wdXNoKHIoeltlXSkpfSksbmV3IG0uR3JhcGhRTFNjaGVtYSh7cXVlcnk6WixtdXRhdGlvbjp0ZSxzdWJzY3JpcHRpb246cmUsdHlwZXM6b2UsZGlyZWN0aXZlczpmdW5jdGlvbigpe3ZhciB0PWUuZ2V0RGlyZWN0aXZlcygpO3R8fCgwLHMuZGVmYXVsdCkoMCwic2NoZW1hIG11c3QgaGF2ZSBkZWZhdWx0IGRpcmVjdGl2ZXMiKTt2YXIgbj1WLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTShlKX0pO3JldHVybiB0LmNvbmNhdChuKX0oKSxhc3ROb2RlOmUuYXN0Tm9kZX0pfWZ1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoIkV4dGVuZGVkIFNjaGVtYSBjYW5ub3QgdXNlIEludGVyZmFjZSBvciBVbmlvbiB0eXBlcyBmb3IgZXhlY3V0aW9uLiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmV4dGVuZFNjaGVtYT1pO3ZhciBhPW4oMTMpLHM9cihhKSx1PW4oNDYpLGM9cih1KSxsPW4oMTIwKSxwPXIobCksZj1uKDIwOCksZD1uKDU5KSxoPW4oNDMpLG09bigyNiksZz1uKDYpLHk9bigyNyksdj1uKDI4KSxiPW4oMzIpLHg9bigxMCksQz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGwoZSxmdW5jdGlvbihlKXtyZXR1cm4hYShlKX0scyl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbChlLGEsdSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4ic2tpcCI9PT1lfHwiaW5jbHVkZSI9PT1lfHwiZGVwcmVjYXRlZCI9PT1lfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIXUoZSkmJiFjKGUpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDA9PT1lLmluZGV4T2YoIl9fIil9ZnVuY3Rpb24gYyhlKXtyZXR1cm4iU3RyaW5nIj09PWV8fCJCb29sZWFuIj09PWV8fCJJbnQiPT09ZXx8IkZsb2F0Ij09PWV8fCJJRCI9PT1lfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByPWUuZ2V0RGlyZWN0aXZlcygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdChlLm5hbWUpfSksaT1lLmdldFR5cGVNYXAoKSxvPU9iamVjdC5rZXlzKGkpLmZpbHRlcihuKS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubG9jYWxlQ29tcGFyZSh0KX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaVtlXX0pO3JldHVybltwKGUpXS5jb25jYXQoci5tYXAodyksby5tYXAoZCkpLmZpbHRlcihCb29sZWFuKS5qb2luKCJcblxuIikrIlxuIn1mdW5jdGlvbiBwKGUpe2lmKCFmKGUpKXt2YXIgdD1bXSxuPWUuZ2V0UXVlcnlUeXBlKCk7biYmdC5wdXNoKCIgIHF1ZXJ5OiAiK24ubmFtZSk7dmFyIHI9ZS5nZXRNdXRhdGlvblR5cGUoKTtyJiZ0LnB1c2goIiAgbXV0YXRpb246ICIrci5uYW1lKTt2YXIgaT1lLmdldFN1YnNjcmlwdGlvblR5cGUoKTtyZXR1cm4gaSYmdC5wdXNoKCIgIHN1YnNjcmlwdGlvbjogIitpLm5hbWUpLCJzY2hlbWEge1xuIit0LmpvaW4oIlxuIikrIlxufSJ9fWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5nZXRRdWVyeVR5cGUoKTtpZih0JiYiUXVlcnkiIT09dC5uYW1lKXJldHVybiExO3ZhciBuPWUuZ2V0TXV0YXRpb25UeXBlKCk7aWYobiYmIk11dGF0aW9uIiE9PW4ubmFtZSlyZXR1cm4hMTt2YXIgcj1lLmdldFN1YnNjcmlwdGlvblR5cGUoKTtyZXR1cm4hcnx8IlN1YnNjcmlwdGlvbiI9PT1yLm5hbWV9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE0uR3JhcGhRTFNjYWxhclR5cGU/aChlKTplIGluc3RhbmNlb2YgTS5HcmFwaFFMT2JqZWN0VHlwZT9tKGUpOmUgaW5zdGFuY2VvZiBNLkdyYXBoUUxJbnRlcmZhY2VUeXBlP2coZSk6ZSBpbnN0YW5jZW9mIE0uR3JhcGhRTFVuaW9uVHlwZT95KGUpOmUgaW5zdGFuY2VvZiBNLkdyYXBoUUxFbnVtVHlwZT92KGUpOihlIGluc3RhbmNlb2YgTS5HcmFwaFFMSW5wdXRPYmplY3RUeXBlfHwoMCxULmRlZmF1bHQpKDApLHgoZSkpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGsoZSkrInNjYWxhciAiK2UubmFtZX1mdW5jdGlvbiBtKGUpe3ZhciB0PWUuZ2V0SW50ZXJmYWNlcygpLG49dC5sZW5ndGg/IiBpbXBsZW1lbnRzICIrdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pLmpvaW4oIiwgIik6IiI7cmV0dXJuIGsoZSkrInR5cGUgIitlLm5hbWUrbisiIHtcbiIrQyhlKSsiXG59In1mdW5jdGlvbiBnKGUpe3JldHVybiBrKGUpKyJpbnRlcmZhY2UgIitlLm5hbWUrIiB7XG4iK0MoZSkrIlxufSJ9ZnVuY3Rpb24geShlKXtyZXR1cm4gayhlKSsidW5pb24gIitlLm5hbWUrIiA9ICIrZS5nZXRUeXBlcygpLmpvaW4oIiB8ICIpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGsoZSkrImVudW0gIitlLm5hbWUrIiB7XG4iK2IoZS5nZXRWYWx1ZXMoKSkrIlxufSJ9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gayhlLCIgICIsIXQpKyIgICIrZS5uYW1lK1MoZSl9KS5qb2luKCJcbiIpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9ZS5nZXRGaWVsZHMoKSxuPU9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pO3JldHVybiBrKGUpKyJpbnB1dCAiK2UubmFtZSsiIHtcbiIrbi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gayhlLCIgICIsIXQpKyIgICIrRChlKX0pLmpvaW4oIlxuIikrIlxufSJ9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmdldEZpZWxkcygpO3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gayhlLCIgICIsIXQpKyIgICIrZS5uYW1lK0UoZS5hcmdzLCIgICIpKyI6ICIrU3RyaW5nKGUudHlwZSkrUyhlKX0pLmpvaW4oIlxuIil9ZnVuY3Rpb24gRShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIDA9PT1lLmxlbmd0aD8iIjplLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRlc2NyaXB0aW9ufSk/IigiK2UubWFwKEQpLmpvaW4oIiwgIikrIikiOiIoXG4iK2UubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGsoZSwiICAiK3QsIW4pKyIgICIrdCtEKGUpfSkuam9pbigiXG4iKSsiXG4iK3QrIikifWZ1bmN0aW9uIEQoZSl7dmFyIHQ9ZS5uYW1lKyI6ICIrU3RyaW5nKGUudHlwZSk7cmV0dXJuKDAsSS5kZWZhdWx0KShlLmRlZmF1bHRWYWx1ZSl8fCh0Kz0iID0gIisoMCxQLnByaW50KSgoMCxMLmFzdEZyb21WYWx1ZSkoZS5kZWZhdWx0VmFsdWUsZS50eXBlKSkpLHR9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gayhlKSsiZGlyZWN0aXZlIEAiK2UubmFtZStFKGUuYXJncykrIiBvbiAiK2UubG9jYXRpb25zLmpvaW4oIiB8ICIpfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5kZXByZWNhdGlvblJlYXNvbjtyZXR1cm4oMCxGLmRlZmF1bHQpKHQpPyIiOiIiPT09dHx8dD09PVIuREVGQVVMVF9ERVBSRUNBVElPTl9SRUFTT04/IiBAZGVwcmVjYXRlZCI6IiBAZGVwcmVjYXRlZChyZWFzb246ICIrKDAsUC5wcmludCkoKDAsTC5hc3RGcm9tVmFsdWUpKHQsai5HcmFwaFFMU3RyaW5nKSkrIikifWZ1bmN0aW9uIGsoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLG49IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtpZighZS5kZXNjcmlwdGlvbilyZXR1cm4iIjtmb3IodmFyIHI9ZS5kZXNjcmlwdGlvbi5zcGxpdCgiXG4iKSxpPXQmJiFuPyJcbiI6IiIsbz0wO288ci5sZW5ndGg7bysrKWlmKCIiPT09cltvXSlpKz10KyIjXG4iO2Vsc2UgZm9yKHZhciBhPUEocltvXSwxMjAtdC5sZW5ndGgpLHM9MDtzPGEubGVuZ3RoO3MrKylpKz10KyIjICIrYVtzXSsiXG4iO3JldHVybiBpfWZ1bmN0aW9uIEEoZSx0KXtpZihlLmxlbmd0aDx0KzUpcmV0dXJuW2VdO3ZhciBuPWUuc3BsaXQobmV3IFJlZ0V4cCgiKCg/OiB8XikuezE1LCIrKHQtNDApKyJ9KD89IHwkKSkiKSk7aWYobi5sZW5ndGg8NClyZXR1cm5bZV07Zm9yKHZhciByPVtuWzBdK25bMV0rblsyXV0saT0zO2k8bi5sZW5ndGg7aSs9MilyLnB1c2gobltpXS5zbGljZSgxKStuW2krMV0pO3JldHVybiByfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnByaW50U2NoZW1hPWksdC5wcmludEludHJvc3BlY3Rpb25TY2hlbWE9byx0LnByaW50VHlwZT1kO3ZhciBfPW4oMTMpLFQ9cihfKSxPPW4oMzUpLEY9cihPKSxOPW4oNTgpLEk9cihOKSxMPW4oMTEyKSxQPW4oMTkpLE09big2KSxqPW4oMzIpLFI9bigyNyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgcj1lW25dLmRlZmluaXRpb25zLGk9MDtpPHIubGVuZ3RoO2krKyl0LnB1c2gocltpXSk7cmV0dXJue2tpbmQ6IkRvY3VtZW50IixkZWZpbml0aW9uczp0fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb25jYXRBU1Q9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PVtdLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPW5ldyBNYXAscz1PYmplY3QuY3JlYXRlKG51bGwpLHU9dm9pZCAwLGM9MDsoMCxhLnZpc2l0KShlLHtPcGVyYXRpb25EZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3U9aShlKSx0LnB1c2goZSksci5zZXQoZSxjKyspfSxGcmFnbWVudERlZmluaXRpb246ZnVuY3Rpb24oZSl7dT1lLm5hbWUudmFsdWUsblt1XT1lLHIuc2V0KGUsYysrKX0sRnJhZ21lbnRTcHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLnZhbHVlOyhzW3VdfHwoc1t1XT1PYmplY3QuY3JlYXRlKG51bGwpKSlbdF09ITB9fSk7dmFyIGw9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWkoZSksYT1PYmplY3QuY3JlYXRlKG51bGwpO28oYSxzLHQpO3ZhciB1PVtlXTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3UucHVzaChuW2VdKX0pLHUuc29ydChmdW5jdGlvbihlLHQpe3JldHVybihyLmdldChlKXx8MCktKHIuZ2V0KHQpfHwwKX0pLGxbdF09e2tpbmQ6IkRvY3VtZW50IixkZWZpbml0aW9uczp1fX0pLGx9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5uYW1lP2UubmFtZS52YWx1ZToiIn1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcj10W25dO3ImJk9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7ZVtuXXx8KGVbbl09ITAsbyhlLHQsbikpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2VwYXJhdGVPcGVyYXRpb25zPXI7dmFyIGE9big1Nyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybltdLmNvbmNhdChvKGUsdCksYShlLHQpLGMoZSx0KSxoKGUsdCksZyhlLHQpLHMoZSx0KS5icmVha2luZ0NoYW5nZXMsdihlLHQpKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuW10uY29uY2F0KHMoZSx0KS5kYW5nZXJvdXNDaGFuZ2VzLHkoZSx0KSxtKGUsdCkpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lLmdldFR5cGVNYXAoKSxyPXQuZ2V0VHlwZU1hcCgpLGk9W107cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7cltlXXx8aS5wdXNoKHt0eXBlOnguVFlQRV9SRU1PVkVELGRlc2NyaXB0aW9uOmUrIiB3YXMgcmVtb3ZlZC4ifSl9KSxpfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1lLmdldFR5cGVNYXAoKSxyPXQuZ2V0VHlwZU1hcCgpLGk9W107cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYocltlXSl7dmFyIHQ9bltlXSxvPXJbZV07dCBpbnN0YW5jZW9mIG8uY29uc3RydWN0b3J8fGkucHVzaCh7dHlwZTp4LlRZUEVfQ0hBTkdFRF9LSU5ELGRlc2NyaXB0aW9uOmUrIiBjaGFuZ2VkIGZyb20gIit1KHQpKyIgdG8gIit1KG8pKyIuIn0pfX0pLGl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWUuZ2V0VHlwZU1hcCgpLHI9dC5nZXRUeXBlTWFwKCksaT1bXSxvPVtdO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW5bZV0sYT1yW2VdO2lmKCh0IGluc3RhbmNlb2YgYi5HcmFwaFFMT2JqZWN0VHlwZXx8dCBpbnN0YW5jZW9mIGIuR3JhcGhRTEludGVyZmFjZVR5cGUpJiZhIGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcil7dmFyIHM9dC5nZXRGaWVsZHMoKSx1PWEuZ2V0RmllbGRzKCk7T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbihlKXt1W2VdJiYoc1tlXS5hcmdzLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dVtlXS5hcmdzLGE9ci5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT1uLm5hbWV9KTtpZihhKXtkKG4udHlwZSxhLnR5cGUpP3ZvaWQgMCE9PW4uZGVmYXVsdFZhbHVlJiZuLmRlZmF1bHRWYWx1ZSE9PWEuZGVmYXVsdFZhbHVlJiZvLnB1c2goe3R5cGU6Qy5BUkdfREVGQVVMVF9WQUxVRV9DSEFOR0UsZGVzY3JpcHRpb246dC5uYW1lKyIuIitlKyIgYXJnICIrbi5uYW1lKyIgaGFzIGNoYW5nZWQgZGVmYXVsdFZhbHVlIn0pOmkucHVzaCh7dHlwZTp4LkFSR19DSEFOR0VEX0tJTkQsZGVzY3JpcHRpb246dC5uYW1lKyIuIitlKyIgYXJnICIrbi5uYW1lKyIgaGFzIGNoYW5nZWQgdHlwZSBmcm9tICIrbi50eXBlLnRvU3RyaW5nKCkrIiB0byAiK2EudHlwZS50b1N0cmluZygpfSl9ZWxzZSBpLnB1c2goe3R5cGU6eC5BUkdfUkVNT1ZFRCxkZXNjcmlwdGlvbjp0Lm5hbWUrIi4iK2UrIiBhcmcgIituLm5hbWUrIiB3YXMgcmVtb3ZlZCJ9KX0pLHVbZV0uYXJncy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyFzW2VdLmFyZ3MuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC5uYW1lfSkmJnQudHlwZSBpbnN0YW5jZW9mIGIuR3JhcGhRTE5vbk51bGwmJmkucHVzaCh7dHlwZTp4Lk5PTl9OVUxMX0FSR19BRERFRCxkZXNjcmlwdGlvbjoiQSBub24tbnVsbCBhcmcgIit0Lm5hbWUrIiBvbiAiK2EubmFtZSsiLiIrZSsiIHdhcyBhZGRlZCJ9KX0pKX0pfX0pLHticmVha2luZ0NoYW5nZXM6aSxkYW5nZXJvdXNDaGFuZ2VzOm99fWZ1bmN0aW9uIHUoZSl7aWYoZSBpbnN0YW5jZW9mIGIuR3JhcGhRTFNjYWxhclR5cGUpcmV0dXJuImEgU2NhbGFyIHR5cGUiO2lmKGUgaW5zdGFuY2VvZiBiLkdyYXBoUUxPYmplY3RUeXBlKXJldHVybiJhbiBPYmplY3QgdHlwZSI7aWYoZSBpbnN0YW5jZW9mIGIuR3JhcGhRTEludGVyZmFjZVR5cGUpcmV0dXJuImFuIEludGVyZmFjZSB0eXBlIjtpZihlIGluc3RhbmNlb2YgYi5HcmFwaFFMVW5pb25UeXBlKXJldHVybiJhIFVuaW9uIHR5cGUiO2lmKGUgaW5zdGFuY2VvZiBiLkdyYXBoUUxFbnVtVHlwZSlyZXR1cm4iYW4gRW51bSB0eXBlIjtpZihlIGluc3RhbmNlb2YgYi5HcmFwaFFMSW5wdXRPYmplY3RUeXBlKXJldHVybiJhbiBJbnB1dCB0eXBlIjt0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIHR5cGUgIitlLmNvbnN0cnVjdG9yLm5hbWUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm5bXS5jb25jYXQobChlLHQpLHAoZSx0KSl9ZnVuY3Rpb24gbChlLHQpe3ZhciBuPWUuZ2V0VHlwZU1hcCgpLHI9dC5nZXRUeXBlTWFwKCksaT1bXTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdLG89cltlXTtpZigodCBpbnN0YW5jZW9mIGIuR3JhcGhRTE9iamVjdFR5cGV8fHQgaW5zdGFuY2VvZiBiLkdyYXBoUUxJbnRlcmZhY2VUeXBlKSYmbyBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3Ipe3ZhciBhPXQuZ2V0RmllbGRzKCkscz1vLmdldEZpZWxkcygpO09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24odCl7aWYodCBpbiBzKXt2YXIgbj1hW3RdLnR5cGUscj1zW3RdLnR5cGU7aWYoIWYobixyKSl7dmFyIG89KDAsYi5pc05hbWVkVHlwZSkobik/bi5uYW1lOm4udG9TdHJpbmcoKSx1PSgwLGIuaXNOYW1lZFR5cGUpKHIpP3IubmFtZTpyLnRvU3RyaW5nKCk7aS5wdXNoKHt0eXBlOnguRklFTERfQ0hBTkdFRF9LSU5ELGRlc2NyaXB0aW9uOmUrIi4iK3QrIiBjaGFuZ2VkIHR5cGUgZnJvbSAiK28rIiB0byAiK3UrIi4ifSl9fWVsc2UgaS5wdXNoKHt0eXBlOnguRklFTERfUkVNT1ZFRCxkZXNjcmlwdGlvbjplKyIuIit0KyIgd2FzIHJlbW92ZWQuIn0pfSl9fSksaX1mdW5jdGlvbiBwKGUsdCl7dmFyIG49ZS5nZXRUeXBlTWFwKCkscj10LmdldFR5cGVNYXAoKSxpPVtdO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW5bZV0sbz1yW2VdO2lmKHQgaW5zdGFuY2VvZiBiLkdyYXBoUUxJbnB1dE9iamVjdFR5cGUmJm8gaW5zdGFuY2VvZiBiLkdyYXBoUUxJbnB1dE9iamVjdFR5cGUpe3ZhciBhPXQuZ2V0RmllbGRzKCkscz1vLmdldEZpZWxkcygpO09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24odCl7aWYodCBpbiBzKXt2YXIgbj1hW3RdLnR5cGUscj1zW3RdLnR5cGU7aWYoIWQobixyKSl7dmFyIG89KDAsYi5pc05hbWVkVHlwZSkobik/bi5uYW1lOm4udG9TdHJpbmcoKSx1PSgwLGIuaXNOYW1lZFR5cGUpKHIpP3IubmFtZTpyLnRvU3RyaW5nKCk7aS5wdXNoKHt0eXBlOnguRklFTERfQ0hBTkdFRF9LSU5ELGRlc2NyaXB0aW9uOmUrIi4iK3QrIiBjaGFuZ2VkIHR5cGUgZnJvbSAiK28rIiB0byAiK3UrIi4ifSl9fWVsc2UgaS5wdXNoKHt0eXBlOnguRklFTERfUkVNT1ZFRCxkZXNjcmlwdGlvbjplKyIuIit0KyIgd2FzIHJlbW92ZWQuIn0pfSksT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbihlKXshKGUgaW4gYSkmJnNbZV0udHlwZSBpbnN0YW5jZW9mIGIuR3JhcGhRTE5vbk51bGwmJmkucHVzaCh7dHlwZTp4Lk5PTl9OVUxMX0lOUFVUX0ZJRUxEX0FEREVELGRlc2NyaXB0aW9uOiJBIG5vbi1udWxsIGZpZWxkICIrZSsiIG9uIGlucHV0IHR5cGUgIitvLm5hbWUrIiB3YXMgYWRkZWQuIn0pfSl9fSksaX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuKDAsYi5pc05hbWVkVHlwZSkoZSk/KDAsYi5pc05hbWVkVHlwZSkodCkmJmUubmFtZT09PXQubmFtZXx8dCBpbnN0YW5jZW9mIGIuR3JhcGhRTE5vbk51bGwmJmYoZSx0Lm9mVHlwZSk6ZSBpbnN0YW5jZW9mIGIuR3JhcGhRTExpc3Q/dCBpbnN0YW5jZW9mIGIuR3JhcGhRTExpc3QmJmYoZS5vZlR5cGUsdC5vZlR5cGUpfHx0IGluc3RhbmNlb2YgYi5HcmFwaFFMTm9uTnVsbCYmZihlLHQub2ZUeXBlKTplIGluc3RhbmNlb2YgYi5HcmFwaFFMTm9uTnVsbCYmKHQgaW5zdGFuY2VvZiBiLkdyYXBoUUxOb25OdWxsJiZmKGUub2ZUeXBlLHQub2ZUeXBlKSl9ZnVuY3Rpb24gZChlLHQpe3JldHVybigwLGIuaXNOYW1lZFR5cGUpKGUpPygwLGIuaXNOYW1lZFR5cGUpKHQpJiZlLm5hbWU9PT10Lm5hbWU6ZSBpbnN0YW5jZW9mIGIuR3JhcGhRTExpc3Q/dCBpbnN0YW5jZW9mIGIuR3JhcGhRTExpc3QmJmQoZS5vZlR5cGUsdC5vZlR5cGUpOmUgaW5zdGFuY2VvZiBiLkdyYXBoUUxOb25OdWxsJiYodCBpbnN0YW5jZW9mIGIuR3JhcGhRTE5vbk51bGwmJmQoZS5vZlR5cGUsdC5vZlR5cGUpfHwhKHQgaW5zdGFuY2VvZiBiLkdyYXBoUUxOb25OdWxsKSYmZChlLm9mVHlwZSx0KSl9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPWUuZ2V0VHlwZU1hcCgpLHI9dC5nZXRUeXBlTWFwKCksaT1bXTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdLG89cltlXTtpZih0IGluc3RhbmNlb2YgYi5HcmFwaFFMVW5pb25UeXBlJiZvIGluc3RhbmNlb2YgYi5HcmFwaFFMVW5pb25UeXBlKXt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpO28uZ2V0VHlwZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FbZS5uYW1lXT0hMH0pLHQuZ2V0VHlwZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdC5uYW1lXXx8aS5wdXNoKHt0eXBlOnguVFlQRV9SRU1PVkVEX0ZST01fVU5JT04sZGVzY3JpcHRpb246dC5uYW1lKyIgd2FzIHJlbW92ZWQgZnJvbSB1bmlvbiB0eXBlICIrZSsiLiJ9KX0pfX0pLGl9ZnVuY3Rpb24gbShlLHQpe3ZhciBuPWUuZ2V0VHlwZU1hcCgpLHI9dC5nZXRUeXBlTWFwKCksaT1bXTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdLG89cltlXTtpZih0IGluc3RhbmNlb2YgYi5HcmFwaFFMVW5pb25UeXBlJiZvIGluc3RhbmNlb2YgYi5HcmFwaFFMVW5pb25UeXBlKXt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpO3QuZ2V0VHlwZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FbZS5uYW1lXT0hMH0pLG8uZ2V0VHlwZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdC5uYW1lXXx8aS5wdXNoKHt0eXBlOkMuVFlQRV9BRERFRF9UT19VTklPTixkZXNjcmlwdGlvbjp0Lm5hbWUrIiB3YXMgYWRkZWQgdG8gdW5pb24gdHlwZSAiK2UrIi4ifSl9KX19KSxpfWZ1bmN0aW9uIGcoZSx0KXt2YXIgbj1lLmdldFR5cGVNYXAoKSxyPXQuZ2V0VHlwZU1hcCgpLGk9W107cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bltlXSxvPXJbZV07aWYodCBpbnN0YW5jZW9mIGIuR3JhcGhRTEVudW1UeXBlJiZvIGluc3RhbmNlb2YgYi5HcmFwaFFMRW51bVR5cGUpe3ZhciBhPU9iamVjdC5jcmVhdGUobnVsbCk7by5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FbZS5uYW1lXT0hMH0pLHQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbih0KXthW3QubmFtZV18fGkucHVzaCh7dHlwZTp4LlZBTFVFX1JFTU9WRURfRlJPTV9FTlVNLGRlc2NyaXB0aW9uOnQubmFtZSsiIHdhcyByZW1vdmVkIGZyb20gZW51bSB0eXBlICIrZSsiLiJ9KX0pfX0pLGl9ZnVuY3Rpb24geShlLHQpe3ZhciBuPWUuZ2V0VHlwZU1hcCgpLHI9dC5nZXRUeXBlTWFwKCksaT1bXTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdLG89cltlXTtpZih0IGluc3RhbmNlb2YgYi5HcmFwaFFMRW51bVR5cGUmJm8gaW5zdGFuY2VvZiBiLkdyYXBoUUxFbnVtVHlwZSl7dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTt0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24oZSl7YVtlLm5hbWVdPSEwfSksby5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdC5uYW1lXXx8aS5wdXNoKHt0eXBlOkMuVkFMVUVfQURERURfVE9fRU5VTSxkZXNjcmlwdGlvbjp0Lm5hbWUrIiB3YXMgYWRkZWQgdG8gZW51bSB0eXBlICIrZSsiLiJ9KX0pfX0pLGl9ZnVuY3Rpb24gdihlLHQpe3ZhciBuPWUuZ2V0VHlwZU1hcCgpLHI9dC5nZXRUeXBlTWFwKCksaT1bXTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdLG89cltlXTtpZih0IGluc3RhbmNlb2YgYi5HcmFwaFFMT2JqZWN0VHlwZSYmbyBpbnN0YW5jZW9mIGIuR3JhcGhRTE9iamVjdFR5cGUpe3ZhciBhPXQuZ2V0SW50ZXJmYWNlcygpLHM9by5nZXRJbnRlcmZhY2VzKCk7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Muc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC5uYW1lfSl8fGkucHVzaCh7dHlwZTp4LklOVEVSRkFDRV9SRU1PVkVEX0ZST01fT0JKRUNULGRlc2NyaXB0aW9uOmUrIiBubyBsb25nZXIgaW1wbGVtZW50cyBpbnRlcmZhY2UgIit0Lm5hbWUrIi4ifSl9KX19KSxpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhbmdlcm91c0NoYW5nZVR5cGU9dC5CcmVha2luZ0NoYW5nZVR5cGU9dm9pZCAwLHQuZmluZEJyZWFraW5nQ2hhbmdlcz1yLHQuZmluZERhbmdlcm91c0NoYW5nZXM9aSx0LmZpbmRSZW1vdmVkVHlwZXM9byx0LmZpbmRUeXBlc1RoYXRDaGFuZ2VkS2luZD1hLHQuZmluZEFyZ0NoYW5nZXM9cyx0LmZpbmRGaWVsZHNUaGF0Q2hhbmdlZFR5cGU9Yyx0LmZpbmRGaWVsZHNUaGF0Q2hhbmdlZFR5cGVPbklucHV0T2JqZWN0VHlwZXM9cCx0LmZpbmRUeXBlc1JlbW92ZWRGcm9tVW5pb25zPWgsdC5maW5kVHlwZXNBZGRlZFRvVW5pb25zPW0sdC5maW5kVmFsdWVzUmVtb3ZlZEZyb21FbnVtcz1nLHQuZmluZFZhbHVlc0FkZGVkVG9FbnVtcz15LHQuZmluZEludGVyZmFjZXNSZW1vdmVkRnJvbU9iamVjdFR5cGVzPXY7dmFyIGI9big2KSx4PShuKDI2KSx0LkJyZWFraW5nQ2hhbmdlVHlwZT17RklFTERfQ0hBTkdFRF9LSU5EOiJGSUVMRF9DSEFOR0VEX0tJTkQiLEZJRUxEX1JFTU9WRUQ6IkZJRUxEX1JFTU9WRUQiLFRZUEVfQ0hBTkdFRF9LSU5EOiJUWVBFX0NIQU5HRURfS0lORCIsVFlQRV9SRU1PVkVEOiJUWVBFX1JFTU9WRUQiLFRZUEVfUkVNT1ZFRF9GUk9NX1VOSU9OOiJUWVBFX1JFTU9WRURfRlJPTV9VTklPTiIsVkFMVUVfUkVNT1ZFRF9GUk9NX0VOVU06IlZBTFVFX1JFTU9WRURfRlJPTV9FTlVNIixBUkdfUkVNT1ZFRDoiQVJHX1JFTU9WRUQiLEFSR19DSEFOR0VEX0tJTkQ6IkFSR19DSEFOR0VEX0tJTkQiLE5PTl9OVUxMX0FSR19BRERFRDoiTk9OX05VTExfQVJHX0FEREVEIixOT05fTlVMTF9JTlBVVF9GSUVMRF9BRERFRDoiTk9OX05VTExfSU5QVVRfRklFTERfQURERUQiLElOVEVSRkFDRV9SRU1PVkVEX0ZST01fT0JKRUNUOiJJTlRFUkZBQ0VfUkVNT1ZFRF9GUk9NX09CSkVDVCJ9KSxDPXQuRGFuZ2Vyb3VzQ2hhbmdlVHlwZT17QVJHX0RFRkFVTFRfVkFMVUVfQ0hBTkdFOiJBUkdfREVGQVVMVF9WQUxVRV9DSEFOR0UiLFZBTFVFX0FEREVEX1RPX0VOVU06IlZBTFVFX0FEREVEX1RPX0VOVU0iLFRZUEVfQURERURfVE9fVU5JT046IlRZUEVfQURERURfVE9fVU5JT04ifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49W10scj1uZXcgcy5UeXBlSW5mbyhlKTtyZXR1cm4oMCxvLnZpc2l0KSh0LCgwLG8udmlzaXRXaXRoVHlwZUluZm8pKHIse0ZpZWxkOmZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0RmllbGREZWYoKTtpZih0JiZ0LmlzRGVwcmVjYXRlZCl7dmFyIG89ci5nZXRQYXJlbnRUeXBlKCk7aWYobyl7dmFyIGE9dC5kZXByZWNhdGlvblJlYXNvbjtuLnB1c2gobmV3IGkuR3JhcGhRTEVycm9yKCJUaGUgZmllbGQgIitvLm5hbWUrIi4iK3QubmFtZSsiIGlzIGRlcHJlY2F0ZWQuIisoYT8iICIrYToiIiksW2VdKSl9fX0sRW51bVZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0RW51bVZhbHVlKCk7aWYodCYmdC5pc0RlcHJlY2F0ZWQpe3ZhciBvPSgwLGEuZ2V0TmFtZWRUeXBlKShyLmdldElucHV0VHlwZSgpKTtpZihvKXt2YXIgcz10LmRlcHJlY2F0aW9uUmVhc29uO24ucHVzaChuZXcgaS5HcmFwaFFMRXJyb3IoIlRoZSBlbnVtIHZhbHVlICIrby5uYW1lKyIuIit0Lm5hbWUrIiBpcyBkZXByZWNhdGVkLiIrKHM/IiAiK3M6IiIpLFtlXSkpfX19fSkpLG59T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZmluZERlcHJlY2F0ZWRVc2FnZXM9cjt2YXIgaT1uKDQzKSxvPW4oNTcpLGE9big2KSxzPShuKDI2KSxuKDExMykpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE9iamVjdChhLmEpKGUpfHxPYmplY3Qocy5hKShlKXx8T2JqZWN0KGwuYSkoZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4hT2JqZWN0KHUuYSkoZSkmJmUuZXZlcnkocil9ZnVuY3Rpb24gbygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07ZigpKGkodCksIkV4cGVjdGVkIGFjdGlvbiB0eXBlcyB0byBiZSBzdHJpbmdzLCBzeW1ib2xzLCBvciBhY3Rpb24gY3JlYXRvcnMiKTt2YXIgcj10Lm1hcChjLmEpLmpvaW4oZC5hKTtyZXR1cm57dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gcn19fXQuYT1vO3ZhciBhPW4oMTIxKSxzPW4oNDgpLHU9bigyMDkpLGM9big2MSksbD1uKDEyMykscD1uKDIwKSxmPW4ubihwKSxkPW4oNjIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTY1KSxpPU9iamVjdChyLmEpKE9iamVjdC5rZXlzLE9iamVjdCk7dC5hPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0OSksaT1uKDIxKSxvPU9iamVjdChyLmEpKGkuYSwiRGF0YVZpZXciKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEoIU9iamVjdChhLmEpKGUpfHxPYmplY3Qoby5hKShlKSkmJihPYmplY3QoaS5hKShlKT9oOmMpLnRlc3QoT2JqZWN0KHMuYSkoZSkpfXZhciBpPW4oNDgpLG89big0MTMpLGE9big2MCkscz1uKDIxMyksdT0vW1xcXiQuKis/KClbXF17fXxdL2csYz0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxsPUZ1bmN0aW9uLnByb3RvdHlwZSxwPU9iamVjdC5wcm90b3R5cGUsZj1sLnRvU3RyaW5nLGQ9cC5oYXNPd25Qcm9wZXJ0eSxoPVJlZ0V4cCgiXiIrZi5jYWxsKGQpLnJlcGxhY2UodSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEhbyYmbyBpbiBlfXZhciBpPW4oNDE0KSxvPWZ1bmN0aW9uKCl7dmFyIGU9L1teLl0rJC8uZXhlYyhpLmEmJmkuYS5rZXlzJiZpLmEua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBlPyJTeW1ib2woc3JjKV8xLiIrZToiIn0oKTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxKSxpPXIuYVsiX19jb3JlLWpzX3NoYXJlZF9fIl07dC5hPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDkpLGk9bigyMSksbz1PYmplY3Qoci5hKShpLmEsIk1hcCIpO3QuYT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDkpLGk9bigyMSksbz1PYmplY3Qoci5hKShpLmEsIlByb21pc2UiKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ5KSxpPW4oMjEpLG89T2JqZWN0KHIuYSkoaS5hLCJTZXQiKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qoby5hKShlKSYmT2JqZWN0KGkuYSkoZSk9PWF9dmFyIGk9bigzMyksbz1uKDMxKSxhPSJbb2JqZWN0IEFyZ3VtZW50c10iO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4hMX10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QoYS5hKShlKSYmT2JqZWN0KG8uYSkoZS5sZW5ndGgpJiYhIXNbT2JqZWN0KGkuYSkoZSldfXZhciBpPW4oMzMpLG89bigyMTYpLGE9bigzMSkscz17fTtzWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1zWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1zWyJbb2JqZWN0IEludDhBcnJheV0iXT1zWyJbb2JqZWN0IEludDE2QXJyYXldIl09c1siW29iamVjdCBJbnQzMkFycmF5XSJdPXNbIltvYmplY3QgVWludDhBcnJheV0iXT1zWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPXNbIltvYmplY3QgVWludDE2QXJyYXldIl09c1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxzWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1zWyJbb2JqZWN0IEFycmF5XSJdPXNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09c1siW29iamVjdCBCb29sZWFuXSJdPXNbIltvYmplY3QgRGF0YVZpZXddIl09c1siW29iamVjdCBEYXRlXSJdPXNbIltvYmplY3QgRXJyb3JdIl09c1siW29iamVjdCBGdW5jdGlvbl0iXT1zWyJbb2JqZWN0IE1hcF0iXT1zWyJbb2JqZWN0IE51bWJlcl0iXT1zWyJbb2JqZWN0IE9iamVjdF0iXT1zWyJbb2JqZWN0IFJlZ0V4cF0iXT1zWyJbb2JqZWN0IFNldF0iXT1zWyJbb2JqZWN0IFN0cmluZ10iXT1zWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoT2JqZWN0KGEuYSkoZSkpcmV0dXJuIE9iamVjdChvLmEpKGUscikrIiI7aWYoT2JqZWN0KHMuYSkoZSkpcmV0dXJuIGw/bC5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS11PyItMCI6dH12YXIgaT1uKDEwMyksbz1uKDIyMSksYT1uKDQ3KSxzPW4oMTIzKSx1PTEvMCxjPWkuYT9pLmEucHJvdG90eXBlOnZvaWQgMCxsPWM/Yy50b1N0cmluZzp2b2lkIDA7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09PWV9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gaShlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgaT1PYmplY3QobC5hKShPYmplY3QoZi5hKShuKSk/bi5wb3AoKTp7fTtyZXR1cm4geSgpKG4uZXZlcnkoZC5hKSYmKE9iamVjdChkLmEpKGUpfHxPYmplY3QobC5hKShlKSksIkV4cGVjdGVkIG9wdGlvbmFsIG9iamVjdCBmb2xsb3dlZCBieSBzdHJpbmcgYWN0aW9uIHR5cGVzIiksT2JqZWN0KGQuYSkoZSk/dShbZV0uY29uY2F0KG4pLGkpOlMoe30sYShlLGkpLHUobixpKSl9ZnVuY3Rpb24gYShlLHQpe3ZhciBuPU9iamVjdCh4LmEpKGUsdCkscj1zKG4pO3JldHVybiBPYmplY3QoQy5hKShyLHQpfWZ1bmN0aW9uIHMoZSl7ZnVuY3Rpb24gdChlKXtpZihPYmplY3QoaC5hKShlKXx8T2JqZWN0KG0uYSkoZSkpcmV0dXJuITA7aWYoT2JqZWN0KHAuYSkoZSkpe3ZhciB0PXcoZSwyKSxuPXRbMF0scj12b2lkIDA9PT1uP2MuYTpuLGk9dFsxXTtyZXR1cm4gT2JqZWN0KGguYSkocikmJk9iamVjdChoLmEpKGkpfXJldHVybiExfXZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxvPW4ucHJlZml4LGE9bi5uYW1lc3BhY2Uscz12b2lkIDA9PT1hP0QuYjphO3JldHVybiBPYmplY3QoYi5hKShPYmplY3Qua2V5cyhlKSxmdW5jdGlvbihuLGEpe3ZhciB1PWVbYV07eSgpKHQodSksIkV4cGVjdGVkIGZ1bmN0aW9uLCB1bmRlZmluZWQsIG51bGwsIG9yIGFycmF5IHdpdGggcGF5bG9hZCBhbmQgbWV0YSBmdW5jdGlvbnMgZm9yICIrYSk7dmFyIGM9bz8iIitvK3MrYTphLGw9T2JqZWN0KHAuYSkodSk/RS5hLmFwcGx5KHZvaWQgMCxbY10uY29uY2F0KGkodSkpKTpPYmplY3QoRS5hKShjLHUpO3JldHVybiBTKHt9LG4scih7fSxhLGwpKX0pfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj1PYmplY3QoYi5hKShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFMoe30sZSxyKHt9LHQsYy5hKSl9KSxpPXMobix0KTtyZXR1cm4gT2JqZWN0KGIuYSkoT2JqZWN0LmtleXMoaSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gUyh7fSxlLHIoe30sT2JqZWN0KHYuYSkodCksaVt0XSkpfSl9dC5hPW87dmFyIGM9big2MyksbD1uKDQxKSxwPW4oNDcpLGY9big0MjUpLGQ9bigxMjEpLGg9big0OCksbT1uKDIyMiksZz1uKDIwKSx5PW4ubihnKSx2PW4oMjIzKSxiPW4oNDQ0KSx4PW4oNDQ1KSxDPW4oNDQ3KSxFPW4oMTI0KSxEPW4oNjIpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49W10scj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGE9cy5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKGEudmFsdWUpLCF0fHxuLmxlbmd0aCE9PXQpO3I9ITApO31jYXRjaChlKXtpPSEwLG89ZX1maW5hbGx5e3RyeXshciYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiBufXJldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZSh0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksUz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDI3KSxpPW4oNDM1KSxvPU9iamVjdChpLmEpKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj9PYmplY3Qoci5hKSh0KTp0KX0pO3QuYT1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE9iamVjdChvLmEpKE9iamVjdChpLmEpKGUpLnRvTG93ZXJDYXNlKCkpfXZhciBpPW4oNjEpLG89big0MjgpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDI5KSxpPU9iamVjdChyLmEpKCJ0b1VwcGVyQ2FzZSIpO3QuYT1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3Q9T2JqZWN0KHMuYSkodCk7dmFyIG49T2JqZWN0KG8uYSkodCk/T2JqZWN0KGEuYSkodCk6dm9pZCAwLHI9bj9uWzBdOnQuY2hhckF0KDApLHU9bj9PYmplY3QoaS5hKShuLDEpLmpvaW4oIiIpOnQuc2xpY2UoMSk7cmV0dXJuIHJbZV0oKSt1fX12YXIgaT1uKDQzMCksbz1uKDIyNCksYT1uKDQzMikscz1uKDYxKTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gbj12b2lkIDA9PT1uP3I6biwhdCYmbj49cj9lOk9iamVjdChpLmEpKGUsdCxuKX12YXIgaT1uKDQzMSk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9LTEsaT1lLmxlbmd0aDt0PDAmJih0PS10Pmk/MDppK3QpLG49bj5pP2k6bixuPDAmJihuKz1pKSxpPXQ+bj8wOm4tdD4+PjAsdD4+Pj0wO2Zvcih2YXIgbz1BcnJheShpKTsrK3I8aTspb1tyXT1lW3IrdF07cmV0dXJuIG99dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSk/T2JqZWN0KGEuYSkoZSk6T2JqZWN0KGkuYSkoZSl9dmFyIGk9big0MzMpLG89bigyMjQpLGE9big0MzQpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuc3BsaXQoIiIpfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUubWF0Y2goZil8fFtdfXZhciBpPSJbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXSIsbz0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixhPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixzPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIix1PSIoPzpbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXXxcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0pPyIsYz0iKD86XFx1MjAwZCg/OiIrWyJbXlxcdWQ4MDAtXFx1ZGZmZl0iLGEsc10uam9pbigifCIpKyIpW1xcdWZlMGVcXHVmZTBmXT8iK3UrIikqIixsPSJbXFx1ZmUwZVxcdWZlMGZdPyIrdStjLHA9Iig/OiIrWyJbXlxcdWQ4MDAtXFx1ZGZmZl0iK2krIj8iLGksYSxzLCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsZj1SZWdFeHAobysiKD89IitvKyIpfCIrcCtsLCJnIik7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChpLmEpKE9iamVjdChhLmEpKE9iamVjdChvLmEpKHQpLnJlcGxhY2UocywiIikpLGUsIiIpfX12YXIgaT1uKDQzNiksbz1uKDQzNyksYT1uKDQ0MCkscz1SZWdFeHAoIlsnXHUyMDE5XSIsImciKTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBpPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWysraV0pOysraTxvOyluPXQobixlW2ldLGksZSk7cmV0dXJuIG59dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4oZT1PYmplY3Qoby5hKShlKSkmJmUucmVwbGFjZShhLGkuYSkucmVwbGFjZShzLCIiKX12YXIgaT1uKDQzOCksbz1uKDYxKSxhPS9bXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXHUwMTAwLVx1MDE3Zl0vZyxzPVJlZ0V4cCgiW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLCJnIik7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MzkpLGk9eyJceGMwIjoiQSIsIlx4YzEiOiJBIiwiXHhjMiI6IkEiLCJceGMzIjoiQSIsIlx4YzQiOiJBIiwiXHhjNSI6IkEiLCJceGUwIjoiYSIsIlx4ZTEiOiJhIiwiXHhlMiI6ImEiLCJceGUzIjoiYSIsIlx4ZTQiOiJhIiwiXHhlNSI6ImEiLCJceGM3IjoiQyIsIlx4ZTciOiJjIiwiXHhkMCI6IkQiLCJceGYwIjoiZCIsIlx4YzgiOiJFIiwiXHhjOSI6IkUiLCJceGNhIjoiRSIsIlx4Y2IiOiJFIiwiXHhlOCI6ImUiLCJceGU5IjoiZSIsIlx4ZWEiOiJlIiwiXHhlYiI6ImUiLCJceGNjIjoiSSIsIlx4Y2QiOiJJIiwiXHhjZSI6IkkiLCJceGNmIjoiSSIsIlx4ZWMiOiJpIiwiXHhlZCI6ImkiLCJceGVlIjoiaSIsIlx4ZWYiOiJpIiwiXHhkMSI6Ik4iLCJceGYxIjoibiIsIlx4ZDIiOiJPIiwiXHhkMyI6Ik8iLCJceGQ0IjoiTyIsIlx4ZDUiOiJPIiwiXHhkNiI6Ik8iLCJceGQ4IjoiTyIsIlx4ZjIiOiJvIiwiXHhmMyI6Im8iLCJceGY0IjoibyIsIlx4ZjUiOiJvIiwiXHhmNiI6Im8iLCJceGY4IjoibyIsIlx4ZDkiOiJVIiwiXHhkYSI6IlUiLCJceGRiIjoiVSIsIlx4ZGMiOiJVIiwiXHhmOSI6InUiLCJceGZhIjoidSIsIlx4ZmIiOiJ1IiwiXHhmYyI6InUiLCJceGRkIjoiWSIsIlx4ZmQiOiJ5IiwiXHhmZiI6InkiLCJceGM2IjoiQWUiLCJceGU2IjoiYWUiLCJceGRlIjoiVGgiLCJceGZlIjoidGgiLCJceGRmIjoic3MiLCJcdTAxMDAiOiJBIiwiXHUwMTAyIjoiQSIsIlx1MDEwNCI6IkEiLCJcdTAxMDEiOiJhIiwiXHUwMTAzIjoiYSIsIlx1MDEwNSI6ImEiLCJcdTAxMDYiOiJDIiwiXHUwMTA4IjoiQyIsIlx1MDEwYSI6IkMiLCJcdTAxMGMiOiJDIiwiXHUwMTA3IjoiYyIsIlx1MDEwOSI6ImMiLCJcdTAxMGIiOiJjIiwiXHUwMTBkIjoiYyIsIlx1MDEwZSI6IkQiLCJcdTAxMTAiOiJEIiwiXHUwMTBmIjoiZCIsIlx1MDExMSI6ImQiLCJcdTAxMTIiOiJFIiwiXHUwMTE0IjoiRSIsIlx1MDExNiI6IkUiLCJcdTAxMTgiOiJFIiwiXHUwMTFhIjoiRSIsIlx1MDExMyI6ImUiLCJcdTAxMTUiOiJlIiwiXHUwMTE3IjoiZSIsIlx1MDExOSI6ImUiLCJcdTAxMWIiOiJlIiwiXHUwMTFjIjoiRyIsIlx1MDExZSI6IkciLCJcdTAxMjAiOiJHIiwiXHUwMTIyIjoiRyIsIlx1MDExZCI6ImciLCJcdTAxMWYiOiJnIiwiXHUwMTIxIjoiZyIsIlx1MDEyMyI6ImciLCJcdTAxMjQiOiJIIiwiXHUwMTI2IjoiSCIsIlx1MDEyNSI6ImgiLCJcdTAxMjciOiJoIiwiXHUwMTI4IjoiSSIsIlx1MDEyYSI6IkkiLCJcdTAxMmMiOiJJIiwiXHUwMTJlIjoiSSIsIlx1MDEzMCI6IkkiLCJcdTAxMjkiOiJpIiwiXHUwMTJiIjoiaSIsIlx1MDEyZCI6ImkiLCJcdTAxMmYiOiJpIiwiXHUwMTMxIjoiaSIsIlx1MDEzNCI6IkoiLCJcdTAxMzUiOiJqIiwiXHUwMTM2IjoiSyIsIlx1MDEzNyI6ImsiLCJcdTAxMzgiOiJrIiwiXHUwMTM5IjoiTCIsIlx1MDEzYiI6IkwiLCJcdTAxM2QiOiJMIiwiXHUwMTNmIjoiTCIsIlx1MDE0MSI6IkwiLCJcdTAxM2EiOiJsIiwiXHUwMTNjIjoibCIsIlx1MDEzZSI6ImwiLCJcdTAxNDAiOiJsIiwiXHUwMTQyIjoibCIsIlx1MDE0MyI6Ik4iLCJcdTAxNDUiOiJOIiwiXHUwMTQ3IjoiTiIsIlx1MDE0YSI6Ik4iLCJcdTAxNDQiOiJuIiwiXHUwMTQ2IjoibiIsIlx1MDE0OCI6Im4iLCJcdTAxNGIiOiJuIiwiXHUwMTRjIjoiTyIsIlx1MDE0ZSI6Ik8iLCJcdTAxNTAiOiJPIiwiXHUwMTRkIjoibyIsIlx1MDE0ZiI6Im8iLCJcdTAxNTEiOiJvIiwiXHUwMTU0IjoiUiIsIlx1MDE1NiI6IlIiLCJcdTAxNTgiOiJSIiwiXHUwMTU1IjoiciIsIlx1MDE1NyI6InIiLCJcdTAxNTkiOiJyIiwiXHUwMTVhIjoiUyIsIlx1MDE1YyI6IlMiLCJcdTAxNWUiOiJTIiwiXHUwMTYwIjoiUyIsIlx1MDE1YiI6InMiLCJcdTAxNWQiOiJzIiwiXHUwMTVmIjoicyIsIlx1MDE2MSI6InMiLCJcdTAxNjIiOiJUIiwiXHUwMTY0IjoiVCIsIlx1MDE2NiI6IlQiLCJcdTAxNjMiOiJ0IiwiXHUwMTY1IjoidCIsIlx1MDE2NyI6InQiLCJcdTAxNjgiOiJVIiwiXHUwMTZhIjoiVSIsIlx1MDE2YyI6IlUiLCJcdTAxNmUiOiJVIiwiXHUwMTcwIjoiVSIsIlx1MDE3MiI6IlUiLCJcdTAxNjkiOiJ1IiwiXHUwMTZiIjoidSIsIlx1MDE2ZCI6InUiLCJcdTAxNmYiOiJ1IiwiXHUwMTcxIjoidSIsIlx1MDE3MyI6InUiLCJcdTAxNzQiOiJXIiwiXHUwMTc1IjoidyIsIlx1MDE3NiI6IlkiLCJcdTAxNzciOiJ5IiwiXHUwMTc4IjoiWSIsIlx1MDE3OSI6IloiLCJcdTAxN2IiOiJaIiwiXHUwMTdkIjoiWiIsIlx1MDE3YSI6InoiLCJcdTAxN2MiOiJ6IiwiXHUwMTdlIjoieiIsIlx1MDEzMiI6IklKIiwiXHUwMTMzIjoiaWoiLCJcdTAxNTIiOiJPZSIsIlx1MDE1MyI6Im9lIiwiXHUwMTQ5IjoiJ24iLCJcdTAxN2YiOiJzIn0sbz1PYmplY3Qoci5hKShpKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX19dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIGU9T2JqZWN0KGEuYSkoZSksdD1uP3ZvaWQgMDp0LHZvaWQgMD09PXQ/T2JqZWN0KG8uYSkoZSk/T2JqZWN0KHMuYSkoZSk6T2JqZWN0KGkuYSkoZSk6ZS5tYXRjaCh0KXx8W119dmFyIGk9big0NDEpLG89big0NDIpLGE9big2MSkscz1uKDQ0Myk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5tYXRjaChpKXx8W119dmFyIGk9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZzt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpLnRlc3QoZSl9dmFyIGk9L1thLXpdW0EtWl18W0EtWl17Mix9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUubWF0Y2goZyl8fFtdfXZhciBpPSJcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwIixvPSJbIitpKyJdIixhPSJbYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl0iLHM9IlteXFx1ZDgwMC1cXHVkZmZmIitpKyJcXGQrXFx1MjcwMC1cXHUyN2JmYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdIix1PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixjPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixsPSJbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0iLHA9Iig/OiIrYSsifCIrcysiKSIsZj0iKD86W1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl18XFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdKT8iLGQ9Iig/OlxcdTIwMGQoPzoiK1siW15cXHVkODAwLVxcdWRmZmZdIix1LGNdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitmKyIpKiIsaD0iW1xcdWZlMGVcXHVmZTBmXT8iK2YrZCxtPSIoPzoiK1siW1xcdTI3MDAtXFx1MjdiZl0iLHUsY10uam9pbigifCIpKyIpIitoLGc9UmVnRXhwKFtsKyI/IithKyIrKD86WydcdTIwMTldKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPyg/PSIrW28sbCwiJCJdLmpvaW4oInwiKSsiKSIsIig/OltBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXXxbXlxcdWQ4MDAtXFx1ZGZmZlxceGFjXFx4YjFcXHhkN1xceGY3XFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmZcXHUyMDAwLVxcdTIwNmYgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXGQrXFx1MjcwMC1cXHUyN2JmYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdKSsoPzpbJ1x1MjAxOV0oPzpEfExMfE18UkV8U3xUfFZFKSk/KD89IitbbyxsK3AsIiQiXS5qb2luKCJ8IikrIikiLGwrIj8iK3ArIisoPzpbJ1x1MjAxOV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/IixsKyIrKD86WydcdTIwMTldKD86RHxMTHxNfFJFfFN8VHxWRSkpPyIsIlxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXGRUSCkoPz1cXGJ8W2Etel9dKSIsIlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsIlxcZCsiLG1dLmpvaW4oInwiKSwiZyIpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbil9LHt9KX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MSksaT1uKDIyNSk7dC5hPU9iamVjdChpLmEpKHIuYSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSkmJk9iamVjdChpLmEpKGUpPT1hfXZhciBpPW4oMjEyKSxvPW4oMzEpLGE9IltvYmplY3QgTWFwXSI7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmdW5jdGlvbiB0KG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxvPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXSxzPU9iamVjdChhLmEpKG8uc2hpZnQoKSk7T2JqZWN0KGkuYSkobyk/cltzXT1lW25dOihyW3NdfHwocltzXT17fSksdChuLHJbc10sbykpfXZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPW4ubmFtZXNwYWNlLHM9dm9pZCAwPT09cj9vLmI6cix1PW4ucHJlZml4LGM9e307cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dT9lLnJlcGxhY2UoIiIrdStzLCIiKTplO3JldHVybiB0KGUsYyxuLnNwbGl0KHMpKX0pLGN9dC5hPXI7dmFyIGk9bigyMDkpLG89big2MiksYT1uKDIyMyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NDkpLGk9bigxMjQpO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qoci5hKShPYmplY3QoaS5hKShlLHQpLHQubGVuZ3RoKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dD1uP3ZvaWQgMDp0O3ZhciBhPU9iamVjdChpLmEpKGUsbyx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQpO3JldHVybiBhLnBsYWNlaG9sZGVyPXIucGxhY2Vob2xkZXIsYX12YXIgaT1uKDQ1MCksbz04O3IucGxhY2Vob2xkZXI9e30sdC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLEUsRCx3LFMpe3ZhciBrPXQmZztpZighayYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihoKTt2YXIgQT1yP3IubGVuZ3RoOjA7aWYoQXx8KHQmPX4oYnx4KSxyPUU9dm9pZCAwKSx3PXZvaWQgMD09PXc/dzpDKE9iamVjdChkLmEpKHcpLDApLFM9dm9pZCAwPT09Uz9TOk9iamVjdChkLmEpKFMpLEEtPUU/RS5sZW5ndGg6MCx0Jngpe3ZhciBfPXIsVD1FO3I9RT12b2lkIDB9dmFyIE89az92b2lkIDA6T2JqZWN0KGMuYSkoZSksRj1bZSx0LG4scixFLF8sVCxELHcsU107aWYoTyYmT2JqZWN0KGwuYSkoRixPKSxlPUZbMF0sdD1GWzFdLG49RlsyXSxyPUZbM10sRT1GWzRdLFM9Rls5XT12b2lkIDA9PT1GWzldP2s/MDplLmxlbmd0aDpDKEZbOV0tQSwwKSwhUyYmdCYoeXx2KSYmKHQmPX4oeXx2KSksdCYmdCE9bSlOPXQ9PXl8fHQ9PXY/T2JqZWN0KGEuYSkoZSx0LFMpOnQhPWImJnQhPShtfGIpfHxFLmxlbmd0aD9zLmEuYXBwbHkodm9pZCAwLEYpOk9iamVjdCh1LmEpKGUsdCxuLHIpO2Vsc2UgdmFyIE49T2JqZWN0KG8uYSkoZSx0LG4pO3ZhciBJPU8/aS5hOnAuYTtyZXR1cm4gT2JqZWN0KGYuYSkoSShOLEYpLGUsdCl9dmFyIGk9bigyMjYpLG89big0NTEpLGE9big0NTIpLHM9bigyMjkpLHU9big0NzMpLGM9bigyMzMpLGw9big0NzQpLHA9bigyMzYpLGY9bigyMzgpLGQ9bigyNDIpLGg9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLG09MSxnPTIseT04LHY9MTYsYj0zMix4PTY0LEM9TWF0aC5tYXg7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7ZnVuY3Rpb24gcigpe3JldHVybih0aGlzJiZ0aGlzIT09by5hJiZ0aGlzIGluc3RhbmNlb2Ygcj91OmUpLmFwcGx5KHM/bjp0aGlzLGFyZ3VtZW50cyl9dmFyIHM9dCZhLHU9T2JqZWN0KGkuYSkoZSk7cmV0dXJuIHJ9dmFyIGk9big4NCksbz1uKDIxKSxhPTE7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7ZnVuY3Rpb24gcigpe2Zvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLGY9QXJyYXkobyksZD1vLGg9T2JqZWN0KHUuYSkocik7ZC0tOylmW2RdPWFyZ3VtZW50c1tkXTt2YXIgbT1vPDMmJmZbMF0hPT1oJiZmW28tMV0hPT1oP1tdOk9iamVjdChjLmEpKGYsaCk7aWYoKG8tPW0ubGVuZ3RoKTxuKXJldHVybiBPYmplY3Qocy5hKShlLHQsYS5hLHIucGxhY2Vob2xkZXIsdm9pZCAwLGYsbSx2b2lkIDAsdm9pZCAwLG4tbyk7dmFyIGc9dGhpcyYmdGhpcyE9PWwuYSYmdGhpcyBpbnN0YW5jZW9mIHI/cDplO3JldHVybiBPYmplY3QoaS5hKShnLHRoaXMsZil9dmFyIHA9T2JqZWN0KG8uYSkoZSk7cmV0dXJuIHJ9dmFyIGk9bigyMjgpLG89big4NCksYT1uKDIyOSkscz1uKDIzMiksdT1uKDI0MCksYz1uKDEyOSksbD1uKDIxKTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtuLS07KWVbbl09PT10JiYrK3I7cmV0dXJuIHJ9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1PYmplY3QoYS5hKShlKSxuPXMuYVt0XTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbnx8ISh0IGluIGkuYS5wcm90b3R5cGUpKXJldHVybiExO2lmKGU9PT1uKXJldHVybiEwO3ZhciByPU9iamVjdChvLmEpKG4pO3JldHVybiEhciYmZT09PXJbMF19dmFyIGk9bigxMjcpLG89bigyMzMpLGE9big0NTYpLHM9big0NTgpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9ZS5uYW1lKyIiLG49aS5hW3RdLHI9YS5jYWxsKGkuYSx0KT9uLmxlbmd0aDowO3ItLTspe3ZhciBvPW5bcl0scz1vLmZ1bmM7aWYobnVsbD09c3x8cz09ZSlyZXR1cm4gby5uYW1lfXJldHVybiB0fXZhciBpPW4oNDU3KSxvPU9iamVjdC5wcm90b3R5cGUsYT1vLmhhc093blByb3BlcnR5O3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoT2JqZWN0KHUuYSkoZSkmJiFPYmplY3Qocy5hKShlKSYmIShlIGluc3RhbmNlb2YgaS5hKSl7aWYoZSBpbnN0YW5jZW9mIG8uYSlyZXR1cm4gZTtpZihwLmNhbGwoZSwiX193cmFwcGVkX18iKSlyZXR1cm4gT2JqZWN0KGMuYSkoZSl9cmV0dXJuIG5ldyBvLmEoZSl9dmFyIGk9bigxMjcpLG89bigyMzQpLGE9bigxMjgpLHM9big0NyksdT1uKDMxKSxjPW4oNDU5KSxsPU9iamVjdC5wcm90b3R5cGUscD1sLmhhc093blByb3BlcnR5O3IucHJvdG90eXBlPWEuYS5wcm90b3R5cGUsci5wcm90b3R5cGUuY29uc3RydWN0b3I9cix0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUgaW5zdGFuY2VvZiBpLmEpcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgby5hKGUuX193cmFwcGVkX18sZS5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPU9iamVjdChhLmEpKGUuX19hY3Rpb25zX18pLHQuX19pbmRleF9fPWUuX19pbmRleF9fLHQuX192YWx1ZXNfXz1lLl9fdmFsdWVzX18sdH12YXIgaT1uKDEyNyksbz1uKDIzNCksYT1uKDIzNSk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLm1hdGNoKGkpO3JldHVybiB0P3RbMV0uc3BsaXQobyk6W119dmFyIGk9L1x7XG5cL1wqIFxbd3JhcHBlZCB3aXRoICguKylcXSBcKi8sbz0vLD8gJiAvO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10Lmxlbmd0aDtpZighbilyZXR1cm4gZTt2YXIgcj1uLTE7cmV0dXJuIHRbcl09KG4+MT8iJiAiOiIiKSt0W3JdLHQ9dC5qb2luKG4+Mj8iLCAiOiIgIiksZS5yZXBsYWNlKGksIntcbi8qIFt3cmFwcGVkIHdpdGggIit0KyJdICovXG4iKX12YXIgaT0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDYzKSxpPW4oMjM3KSxvPU9iamVjdChpLmEpKHIuYSk7dC5hPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NjQpLGk9big0NjUpLG89big2MyksYT1pLmE/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0KGkuYSkoZSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpPYmplY3Qoci5hKSh0KSx3cml0YWJsZTohMH0pfTpvLmE7dC5hPWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0OSksaT1mdW5jdGlvbigpe3RyeXt2YXIgZT1PYmplY3Qoci5hKShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2goZSl7fX0oKTt0LmE9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIE9iamVjdChpLmEpKGEsZnVuY3Rpb24obil7dmFyIHI9Il8uIituWzBdO3QmblsxXSYmIU9iamVjdChvLmEpKGUscikmJmUucHVzaChyKX0pLGUuc29ydCgpfXZhciBpPW4oNDY3KSxvPW4oNDY4KSxhPVtbImFyeSIsMTI4XSxbImJpbmQiLDFdLFsiYmluZEtleSIsMl0sWyJjdXJyeSIsOF0sWyJjdXJyeVJpZ2h0IiwxNl0sWyJmbGlwIiw1MTJdLFsicGFydGlhbCIsMzJdLFsicGFydGlhbFJpZ2h0Iiw2NF0sWyJyZWFyZyIsMjU2XV07dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248ciYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4hIShudWxsPT1lPzA6ZS5sZW5ndGgpJiZPYmplY3QoaS5hKShlLHQsMCk+LTF9dmFyIGk9bigyMzkpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7Zm9yKHZhciBpPWUubGVuZ3RoLG89bisocj8xOi0xKTtyP28tLTorK288aTspaWYodChlW29dLG8sZSkpcmV0dXJuIG87cmV0dXJuLTF9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSE9PWV9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7Zm9yKHZhciByPW4tMSxpPWUubGVuZ3RoOysrcjxpOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9YSh0Lmxlbmd0aCxuKSxzPU9iamVjdChpLmEpKGUpO3ItLTspe3ZhciB1PXRbcl07ZVtyXT1PYmplY3Qoby5hKSh1LG4pP3NbdV06dm9pZCAwfXJldHVybiBlfXZhciBpPW4oMjM1KSxvPW4oMjQxKSxhPU1hdGgubWluO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdD0tMSxvPWFyZ3VtZW50cy5sZW5ndGgscz0tMSxwPXIubGVuZ3RoLGY9QXJyYXkocCtvKSxkPXRoaXMmJnRoaXMhPT1hLmEmJnRoaXMgaW5zdGFuY2VvZiB1P2w6ZTsrK3M8cDspZltzXT1yW3NdO2Zvcig7by0tOylmW3MrK109YXJndW1lbnRzWysrdF07cmV0dXJuIE9iamVjdChpLmEpKGQsYz9uOnRoaXMsZil9dmFyIGM9dCZzLGw9T2JqZWN0KG8uYSkoZSk7cmV0dXJuIHV9dmFyIGk9bigyMjgpLG89big4NCksYT1uKDIxKSxzPTE7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWVbMV0scj10WzFdLG09bnxyLGc9bTwodXxjfGYpLHk9cj09ZiYmbj09cHx8cj09ZiYmbj09ZCYmZVs3XS5sZW5ndGg8PXRbOF18fHI9PShmfGQpJiZ0WzddLmxlbmd0aDw9dFs4XSYmbj09cDtpZighZyYmIXkpcmV0dXJuIGU7ciZ1JiYoZVsyXT10WzJdLG18PW4mdT8wOmwpO3ZhciB2PXRbM107aWYodil7dmFyIGI9ZVszXTtlWzNdPWI/T2JqZWN0KGkuYSkoYix2LHRbNF0pOnYsZVs0XT1iP09iamVjdChhLmEpKGVbM10scyk6dFs0XX1yZXR1cm4gdj10WzVdLHYmJihiPWVbNV0sZVs1XT1iP09iamVjdChvLmEpKGIsdix0WzZdKTp2LGVbNl09Yj9PYmplY3QoYS5hKShlWzVdLHMpOnRbNl0pLHY9dFs3XSx2JiYoZVs3XT12KSxyJmYmJihlWzhdPW51bGw9PWVbOF0/dFs4XTpoKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPW0sZX12YXIgaT1uKDIzMCksbz1uKDIzMSksYT1uKDEyOSkscz0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyIsdT0xLGM9MixsPTQscD04LGY9MTI4LGQ9MjU2LGg9TWF0aC5taW47dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZighZSlyZXR1cm4gMD09PWU/ZTowO2lmKChlPU9iamVjdChpLmEpKGUpKT09PW98fGU9PT0tbyl7cmV0dXJuKGU8MD8tMToxKSphfXJldHVybiBlPT09ZT9lOjB9dmFyIGk9big0NzYpLG89MS8wLGE9MS43OTc2OTMxMzQ4NjIzMTU3ZTMwODt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihPYmplY3Qoby5hKShlKSlyZXR1cm4gYTtpZihPYmplY3QoaS5hKShlKSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9T2JqZWN0KGkuYSkodCk/dCsiIjp0fWlmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPWUucmVwbGFjZShzLCIiKTt2YXIgbj1jLnRlc3QoZSk7cmV0dXJuIG58fGwudGVzdChlKT9wKGUuc2xpY2UoMiksbj8yOjgpOnUudGVzdChlKT9hOitlfXZhciBpPW4oNjApLG89bigxMjMpLGE9TmFOLHM9L15ccyt8XHMrJC9nLHU9L15bLStdMHhbMC05YS1mXSskL2ksYz0vXjBiWzAxXSskL2ksbD0vXjBvWzAtN10rJC9pLHA9cGFyc2VJbnQ7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdm9pZCAwPT09ZX10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe2U9T2JqZWN0KG8uYSkoZSk/ZTpPYmplY3QodS5hKShlKSxuPW4mJiFyP09iamVjdChzLmEpKG4pOjA7dmFyIGw9ZS5sZW5ndGg7cmV0dXJuIG48MCYmKG49YyhsK24sMCkpLE9iamVjdChhLmEpKGUpP248PWwmJmUuaW5kZXhPZih0LG4pPi0xOiEhbCYmT2JqZWN0KGkuYSkoZSx0LG4pPi0xfXZhciBpPW4oMjM5KSxvPW4oMTIyKSxhPW4oMTIxKSxzPW4oMjQyKSx1PW4oNDc5KSxjPU1hdGgubWF4O3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PWU/W106T2JqZWN0KGkuYSkoZSxPYmplY3Qoby5hKShlKSl9dmFyIGk9big0ODApLG89big0ODEpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gT2JqZWN0KGkuYSkodCxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfXZhciBpPW4oMjIxKTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QoYS5hKShlKT9PYmplY3QoaS5hKShlKTpPYmplY3Qoby5hKShlKX12YXIgaT1uKDQ4Miksbz1uKDIxMCksYT1uKDEyMik7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPU9iamVjdChhLmEpKGUpLHI9IW4mJk9iamVjdChvLmEpKGUpLGw9IW4mJiFyJiZPYmplY3Qocy5hKShlKSxmPSFuJiYhciYmIWwmJk9iamVjdChjLmEpKGUpLGQ9bnx8cnx8bHx8ZixoPWQ/T2JqZWN0KGkuYSkoZS5sZW5ndGgsU3RyaW5nKTpbXSxtPWgubGVuZ3RoO2Zvcih2YXIgZyBpbiBlKSF0JiYhcC5jYWxsKGUsZyl8fGQmJigibGVuZ3RoIj09Z3x8bCYmKCJvZmZzZXQiPT1nfHwicGFyZW50Ij09Zyl8fGYmJigiYnVmZmVyIj09Z3x8ImJ5dGVMZW5ndGgiPT1nfHwiYnl0ZU9mZnNldCI9PWcpfHxPYmplY3QodS5hKShnLG0pKXx8aC5wdXNoKGcpO3JldHVybiBofXZhciBpPW4oNDgzKSxvPW4oMjE1KSxhPW4oNDcpLHM9bigyMTcpLHU9bigyNDEpLGM9bigyMTgpLGw9T2JqZWN0LnByb3RvdHlwZSxwPWwuaGFzT3duUHJvcGVydHk7dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBPYmplY3Qocy5hKSh0KT90LmdldChlKTp0W2VdfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cCgpKE9iamVjdChhLmEpKGUpfHxPYmplY3Qocy5hKShlKSwiRXhwZWN0ZWQgaGFuZGxlcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuIik7dmFyIG89T2JqZWN0KGguYSkoZSxuKSx1PU9iamVjdChkLmEpKG8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGYuYSkoZSxpKGUsbyksdCl9KSxsPWMuYS5hcHBseSh2b2lkIDAscih1KSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnQsbj1hcmd1bWVudHNbMV07cmV0dXJuIGwoZSxuKX19dC5hPW87dmFyIGE9big0MSkscz1uKDgzKSx1PW4oNDg1KSxjPW4ubih1KSxsPW4oMjApLHA9bi5uKGwpLGY9bigyNDMpLGQ9bigxMjUpLGg9big0ODYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiB0KGUsbil9LGUpfX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQxKSxpPW4oODMpLG89big0ODcpLGE9bigyMjUpO3QuYT1PYmplY3QoYS5hKShmdW5jdGlvbihlKXtyZXR1cm4oT2JqZWN0KHIuYSkoZSl8fE9iamVjdChpLmEpKGUpKSYmIU9iamVjdChvLmEpKGUpfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1PYmplY3QoaS5hKShlKSxuPXQuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIm5leHQiPT09ZXx8InRocm93Ij09PWV9KTtyZXR1cm4gdC5sZW5ndGgmJnQubGVuZ3RoPD0yJiZufXQuYT1yO3ZhciBpPW4oMTI1KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21iaW5lUmVkdWNlcnM9dm9pZCAwO3ZhciByPW4oNDg5KSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5jb21iaW5lUmVkdWNlcnM9aS5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0KSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ociksbz1uKDQ5MCk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuTWFwLG49T2JqZWN0LmtleXMoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnQoKSxpPWFyZ3VtZW50c1sxXTtyZXR1cm4gci53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKHQpe24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1lW25dLGE9dC5nZXQobikscz1yKGEsaSk7KDAsby52YWxpZGF0ZU5leHRTdGF0ZSkocyxuLGkpLHQuc2V0KG4scyl9KX0pfX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52YWxpZGF0ZU5leHRTdGF0ZT10LmdldFVuZXhwZWN0ZWRJbnZvY2F0aW9uUGFyYW1ldGVyTWVzc2FnZT10LmdldFN0YXRlTmFtZT12b2lkIDA7dmFyIGk9bigyNDQpLG89cihpKSxhPW4oNDkxKSxzPXIoYSksdT1uKDQ5MiksYz1yKHUpO3QuZ2V0U3RhdGVOYW1lPW8uZGVmYXVsdCx0LmdldFVuZXhwZWN0ZWRJbnZvY2F0aW9uUGFyYW1ldGVyTWVzc2FnZT1zLmRlZmF1bHQsdC52YWxpZGF0ZU5leHRTdGF0ZT1jLmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMTQpLG89cihpKSxhPW4oMjQ0KSxzPXIoYSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZighci5sZW5ndGgpcmV0dXJuIlN0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuIjt2YXIgaT0oMCxzLmRlZmF1bHQpKG4pO2lmKG8uZGVmYXVsdC5pc0ltbXV0YWJsZT8hby5kZWZhdWx0LmlzSW1tdXRhYmxlKGUpOiFvLmRlZmF1bHQuSXRlcmFibGUuaXNJdGVyYWJsZShlKSlyZXR1cm4iVGhlICIraSsnIGlzIG9mIHVuZXhwZWN0ZWQgdHlwZS4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgSW1tdXRhYmxlLkNvbGxlY3Rpb24gb3IgSW1tdXRhYmxlLlJlY29yZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogIicrci5qb2luKCciLCAiJykrJyIuJzt2YXIgYT1lLnRvU2VxKCkua2V5U2VxKCkudG9BcnJheSgpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hdC5oYXNPd25Qcm9wZXJ0eShlKX0pO3JldHVybiBhLmxlbmd0aD4wPyJVbmV4cGVjdGVkICIrKDE9PT1hLmxlbmd0aD8icHJvcGVydHkiOiJwcm9wZXJ0aWVzIikrJyAiJythLmpvaW4oJyIsICInKSsnIiBmb3VuZCBpbiAnK2krJy4gRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIgcHJvcGVydHkgbmFtZXMgaW5zdGVhZDogIicrci5qb2luKCciLCAiJykrJyIuIFVuZXhwZWN0ZWQgcHJvcGVydGllcyB3aWxsIGJlIGlnbm9yZWQuJzpudWxsfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyICInK3QrJyIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gaGFuZGxpbmcgIicrbi50eXBlKyciIGFjdGlvbi4gVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIHByZXZpb3VzIHN0YXRlLicpfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBhKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gdShlKXt2YXIgdCxuLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt3aXRoUmVmOiExfTtyZXR1cm4gbj10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7byh0aGlzLG4pO3ZhciB0PWEodGhpcywobi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gdC5oYW5kbGVTdGFydD1mdW5jdGlvbihlKXt2YXIgbj10LnByb3BzLHI9bi5kaXN0YW5jZSxpPW4uc2hvdWxkQ2FuY2VsU3RhcnQ7aWYoMj09PWUuYnV0dG9ufHxpKGUpKXJldHVybiExO3QuX3RvdWNoZWQ9ITAsdC5fcG9zPSgwLEMuZ2V0UG9zaXRpb24pKGUpO3ZhciBvPSgwLEMuY2xvc2VzdCkoZS50YXJnZXQsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuc29ydGFibGVJbmZvfSk7aWYobyYmby5zb3J0YWJsZUluZm8mJnQubm9kZUlzQ2hpbGQobykmJiF0LnN0YXRlLnNvcnRpbmcpe3ZhciBhPXQucHJvcHMudXNlRHJhZ0hhbmRsZSxzPW8uc29ydGFibGVJbmZvLHU9cy5pbmRleCxjPXMuY29sbGVjdGlvbjtpZihhJiYhKDAsQy5jbG9zZXN0KShlLnRhcmdldCxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5zb3J0YWJsZUhhbmRsZX0pKXJldHVybjt0Lm1hbmFnZXIuYWN0aXZlPXtpbmRleDp1LGNvbGxlY3Rpb246Y30sKDAsQy5pc1RvdWNoRXZlbnQpKGUpfHwiYSIhPT1lLnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCl8fGUucHJldmVudERlZmF1bHQoKSxyfHwoMD09PXQucHJvcHMucHJlc3NEZWxheT90LmhhbmRsZVByZXNzKGUpOnQucHJlc3NUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlUHJlc3MoZSl9LHQucHJvcHMucHJlc3NEZWxheSkpfX0sdC5ub2RlSXNDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zb3J0YWJsZUluZm8ubWFuYWdlcj09PXQubWFuYWdlcn0sdC5oYW5kbGVNb3ZlPWZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvcHMscj1uLmRpc3RhbmNlLGk9bi5wcmVzc1RocmVzaG9sZDtpZighdC5zdGF0ZS5zb3J0aW5nJiZ0Ll90b3VjaGVkKXt2YXIgbz0oMCxDLmdldFBvc2l0aW9uKShlKSxhPXQuX2RlbHRhPXt4OnQuX3Bvcy54LW8ueCx5OnQuX3Bvcy55LW8ueX0scz1NYXRoLmFicyhhLngpK01hdGguYWJzKGEueSk7cnx8aSYmIShpJiZzPj1pKT9yJiZzPj1yJiZ0Lm1hbmFnZXIuaXNBY3RpdmUoKSYmdC5oYW5kbGVQcmVzcyhlKTooY2xlYXJUaW1lb3V0KHQuY2FuY2VsVGltZXIpLHQuY2FuY2VsVGltZXI9c2V0VGltZW91dCh0LmNhbmNlbCwwKSl9fSx0LmhhbmRsZUVuZD1mdW5jdGlvbigpe3ZhciBlPXQucHJvcHMuZGlzdGFuY2U7dC5fdG91Y2hlZD0hMSxlfHx0LmNhbmNlbCgpfSx0LmNhbmNlbD1mdW5jdGlvbigpe3Quc3RhdGUuc29ydGluZ3x8KGNsZWFyVGltZW91dCh0LnByZXNzVGltZXIpLHQubWFuYWdlci5hY3RpdmU9bnVsbCl9LHQuaGFuZGxlUHJlc3M9ZnVuY3Rpb24oZSl7dmFyIG49dC5tYW5hZ2VyLmdldEFjdGl2ZSgpO2lmKG4pe3ZhciByPXQucHJvcHMsbz1yLmF4aXMsYT1yLmdldEhlbHBlckRpbWVuc2lvbnMscz1yLmhlbHBlckNsYXNzLHU9ci5oaWRlU29ydGFibGVHaG9zdCxjPXIub25Tb3J0U3RhcnQsbD1yLnVzZVdpbmRvd0FzU2Nyb2xsQ29udGFpbmVyLHA9bi5ub2RlLGY9bi5jb2xsZWN0aW9uLGQ9cC5zb3J0YWJsZUluZm8uaW5kZXgsaD0oMCxDLmdldEVsZW1lbnRNYXJnaW4pKHApLG09dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz1hKHtpbmRleDpkLG5vZGU6cCxjb2xsZWN0aW9uOmZ9KTt0Lm5vZGU9cCx0Lm1hcmdpbj1oLHQud2lkdGg9Zy53aWR0aCx0LmhlaWdodD1nLmhlaWdodCx0Lm1hcmdpbk9mZnNldD17eDp0Lm1hcmdpbi5sZWZ0K3QubWFyZ2luLnJpZ2h0LHk6TWF0aC5tYXgodC5tYXJnaW4udG9wLHQubWFyZ2luLmJvdHRvbSl9LHQuYm91bmRpbmdDbGllbnRSZWN0PXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdC5jb250YWluZXJCb3VuZGluZ1JlY3Q9bSx0LmluZGV4PWQsdC5uZXdJbmRleD1kLHQuYXhpcz17eDpvLmluZGV4T2YoIngiKT49MCx5Om8uaW5kZXhPZigieSIpPj0wfSx0Lm9mZnNldEVkZ2U9KDAsQy5nZXRFZGdlT2Zmc2V0KShwLHQuY29udGFpbmVyKSx0LmluaXRpYWxPZmZzZXQ9KDAsQy5nZXRQb3NpdGlvbikoZSksdC5pbml0aWFsU2Nyb2xsPXt0b3A6dC5jb250YWluZXIuc2Nyb2xsVG9wLGxlZnQ6dC5jb250YWluZXIuc2Nyb2xsTGVmdH0sdC5pbml0aWFsV2luZG93U2Nyb2xsPXt0b3A6d2luZG93LnBhZ2VZT2Zmc2V0LGxlZnQ6d2luZG93LnBhZ2VYT2Zmc2V0fTt2YXIgeT1wLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0Iiksdj1wLmNsb25lTm9kZSghMCk7aWYoW10uY29uY2F0KGkodi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCIpKSkuZm9yRWFjaChmdW5jdGlvbihlLHQpeyJmaWxlIiE9PWUudHlwZSYmeVt0XSYmKGUudmFsdWU9eVt0XS52YWx1ZSl9KSx0LmhlbHBlcj10LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodiksdC5oZWxwZXIuc3R5bGUucG9zaXRpb249ImZpeGVkIix0LmhlbHBlci5zdHlsZS50b3A9dC5ib3VuZGluZ0NsaWVudFJlY3QudG9wLWgudG9wKyJweCIsdC5oZWxwZXIuc3R5bGUubGVmdD10LmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0LWgubGVmdCsicHgiLHQuaGVscGVyLnN0eWxlLndpZHRoPXQud2lkdGgrInB4Iix0LmhlbHBlci5zdHlsZS5oZWlnaHQ9dC5oZWlnaHQrInB4Iix0LmhlbHBlci5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giLHQuaGVscGVyLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHUmJih0LnNvcnRhYmxlR2hvc3Q9cCxwLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIscC5zdHlsZS5vcGFjaXR5PTApLHQubWluVHJhbnNsYXRlPXt9LHQubWF4VHJhbnNsYXRlPXt9LHQuYXhpcy54JiYodC5taW5UcmFuc2xhdGUueD0obD8wOm0ubGVmdCktdC5ib3VuZGluZ0NsaWVudFJlY3QubGVmdC10LndpZHRoLzIsdC5tYXhUcmFuc2xhdGUueD0obD90LmNvbnRlbnRXaW5kb3cuaW5uZXJXaWR0aDptLmxlZnQrbS53aWR0aCktdC5ib3VuZGluZ0NsaWVudFJlY3QubGVmdC10LndpZHRoLzIpLHQuYXhpcy55JiYodC5taW5UcmFuc2xhdGUueT0obD8wOm0udG9wKS10LmJvdW5kaW5nQ2xpZW50UmVjdC50b3AtdC5oZWlnaHQvMix0Lm1heFRyYW5zbGF0ZS55PShsP3QuY29udGVudFdpbmRvdy5pbm5lckhlaWdodDptLnRvcCttLmhlaWdodCktdC5ib3VuZGluZ0NsaWVudFJlY3QudG9wLXQuaGVpZ2h0LzIpLHMpe3ZhciBiOyhiPXQuaGVscGVyLmNsYXNzTGlzdCkuYWRkLmFwcGx5KGIsaShzLnNwbGl0KCIgIikpKX10Lmxpc3RlbmVyTm9kZT1lLnRvdWNoZXM/cDp0LmNvbnRlbnRXaW5kb3csQy5ldmVudHMubW92ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lmxpc3RlbmVyTm9kZS5hZGRFdmVudExpc3RlbmVyKGUsdC5oYW5kbGVTb3J0TW92ZSwhMSl9KSxDLmV2ZW50cy5lbmQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5saXN0ZW5lck5vZGUuYWRkRXZlbnRMaXN0ZW5lcihlLHQuaGFuZGxlU29ydEVuZCwhMSl9KSx0LnNldFN0YXRlKHtzb3J0aW5nOiEwLHNvcnRpbmdJbmRleDpkfSksYyYmYyh7bm9kZTpwLGluZGV4OmQsY29sbGVjdGlvbjpmfSxlKX19LHQuaGFuZGxlU29ydE1vdmU9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm9wcy5vblNvcnRNb3ZlO2UucHJldmVudERlZmF1bHQoKSx0LnVwZGF0ZVBvc2l0aW9uKGUpLHQuYW5pbWF0ZU5vZGVzKCksdC5hdXRvc2Nyb2xsKCksbiYmbihlKX0sdC5oYW5kbGVTb3J0RW5kPWZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvcHMscj1uLmhpZGVTb3J0YWJsZUdob3N0LGk9bi5vblNvcnRFbmQsbz10Lm1hbmFnZXIuYWN0aXZlLmNvbGxlY3Rpb247dC5saXN0ZW5lck5vZGUmJihDLmV2ZW50cy5tb3ZlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQubGlzdGVuZXJOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LmhhbmRsZVNvcnRNb3ZlKX0pLEMuZXZlbnRzLmVuZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lmxpc3RlbmVyTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5oYW5kbGVTb3J0RW5kKX0pKSx0LmhlbHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuaGVscGVyKSxyJiZ0LnNvcnRhYmxlR2hvc3QmJih0LnNvcnRhYmxlR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iIix0LnNvcnRhYmxlR2hvc3Quc3R5bGUub3BhY2l0eT0iIik7Zm9yKHZhciBhPXQubWFuYWdlci5yZWZzW29dLHM9MCx1PWEubGVuZ3RoO3M8dTtzKyspe3ZhciBjPWFbc10sbD1jLm5vZGU7Yy5lZGdlT2Zmc2V0PW51bGwsbC5zdHlsZVtDLnZlbmRvclByZWZpeCsiVHJhbnNmb3JtIl09IiIsbC5zdHlsZVtDLnZlbmRvclByZWZpeCsiVHJhbnNpdGlvbkR1cmF0aW9uIl09IiJ9Y2xlYXJJbnRlcnZhbCh0LmF1dG9zY3JvbGxJbnRlcnZhbCksdC5hdXRvc2Nyb2xsSW50ZXJ2YWw9bnVsbCx0Lm1hbmFnZXIuYWN0aXZlPW51bGwsdC5zZXRTdGF0ZSh7c29ydGluZzohMSxzb3J0aW5nSW5kZXg6bnVsbH0pLCJmdW5jdGlvbiI9PT10eXBlb2YgaSYmaSh7b2xkSW5kZXg6dC5pbmRleCxuZXdJbmRleDp0Lm5ld0luZGV4LGNvbGxlY3Rpb246b30sZSksdC5fdG91Y2hlZD0hMX0sdC5hdXRvc2Nyb2xsPWZ1bmN0aW9uKCl7dmFyIGU9dC50cmFuc2xhdGUsbj17eDowLHk6MH0scj17eDoxLHk6MX0saT17eDoxMCx5OjEwfTtlLnk+PXQubWF4VHJhbnNsYXRlLnktdC5oZWlnaHQvMj8obi55PTEsci55PWkueSpNYXRoLmFicygodC5tYXhUcmFuc2xhdGUueS10LmhlaWdodC8yLWUueSkvdC5oZWlnaHQpKTplLng+PXQubWF4VHJhbnNsYXRlLngtdC53aWR0aC8yPyhuLng9MSxyLng9aS54Kk1hdGguYWJzKCh0Lm1heFRyYW5zbGF0ZS54LXQud2lkdGgvMi1lLngpL3Qud2lkdGgpKTplLnk8PXQubWluVHJhbnNsYXRlLnkrdC5oZWlnaHQvMj8obi55PS0xLHIueT1pLnkqTWF0aC5hYnMoKGUueS10LmhlaWdodC8yLXQubWluVHJhbnNsYXRlLnkpL3QuaGVpZ2h0KSk6ZS54PD10Lm1pblRyYW5zbGF0ZS54K3Qud2lkdGgvMiYmKG4ueD0tMSxyLng9aS54Kk1hdGguYWJzKChlLngtdC53aWR0aC8yLXQubWluVHJhbnNsYXRlLngpL3Qud2lkdGgpKSx0LmF1dG9zY3JvbGxJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodC5hdXRvc2Nyb2xsSW50ZXJ2YWwpLHQuYXV0b3Njcm9sbEludGVydmFsPW51bGwsdC5pc0F1dG9TY3JvbGxpbmc9ITEpLDA9PT1uLngmJjA9PT1uLnl8fCh0LmF1dG9zY3JvbGxJbnRlcnZhbD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3QuaXNBdXRvU2Nyb2xsaW5nPSEwO3ZhciBlPXtsZWZ0OjEqci54Km4ueCx0b3A6MSpyLnkqbi55fTt0LnNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ArPWUudG9wLHQuc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQrPWUubGVmdCx0LnRyYW5zbGF0ZS54Kz1lLmxlZnQsdC50cmFuc2xhdGUueSs9ZS50b3AsdC5hbmltYXRlTm9kZXMoKX0sNSkpfSx0Lm1hbmFnZXI9bmV3IHguZGVmYXVsdCx0LmV2ZW50cz17c3RhcnQ6dC5oYW5kbGVTdGFydCxtb3ZlOnQuaGFuZGxlTW92ZSxlbmQ6dC5oYW5kbGVFbmR9LCgwLHYuZGVmYXVsdCkoIShlLmRpc3RhbmNlJiZlLnByZXNzRGVsYXkpLCJBdHRlbXB0ZWQgdG8gc2V0IGJvdGggYHByZXNzRGVsYXlgIGFuZCBgZGlzdGFuY2VgIG9uIFNvcnRhYmxlQ29udGFpbmVyLCB5b3UgbWF5IG9ubHkgdXNlIG9uZSBvciB0aGUgb3RoZXIsIG5vdCBib3RoIGF0IHRoZSBzYW1lIHRpbWUuIiksdC5zdGF0ZT17fSx0fXJldHVybiBzKG4sdCkscChuLFt7a2V5OiJnZXRDaGlsZENvbnRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue21hbmFnZXI6dGhpcy5tYW5hZ2VyfX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLnVzZVdpbmRvd0FzU2Nyb2xsQ29udGFpbmVyLG49dGhpcy5nZXRDb250YWluZXIoKTtQcm9taXNlLnJlc29sdmUobikudGhlbihmdW5jdGlvbihuKXtlLmNvbnRhaW5lcj1uLGUuZG9jdW1lbnQ9ZS5jb250YWluZXIub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7dmFyIHI9ZS5wcm9wcy5jb250ZW50V2luZG93fHxlLmRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3c7ZS5jb250ZW50V2luZG93PSJmdW5jdGlvbiI9PT10eXBlb2Ygcj9yKCk6cixlLnNjcm9sbENvbnRhaW5lcj10P2UuZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudHx8ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ6ZS5jb250YWluZXI7Zm9yKHZhciBpIGluIGUuZXZlbnRzKSFmdW5jdGlvbih0KXtlLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0KSYmQy5ldmVudHNbdF0uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihuLGUuZXZlbnRzW3RdLCExKX0pfShpKX0pfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLmNvbnRhaW5lcil7Zm9yKHZhciB0IGluIHRoaXMuZXZlbnRzKSFmdW5jdGlvbih0KXtlLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0KSYmQy5ldmVudHNbdF0uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGUuZXZlbnRzW3RdKX0pfSh0KX19fSx7a2V5OiJnZXRMb2NrUGl4ZWxPZmZzZXRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMud2lkdGgsdD10aGlzLmhlaWdodCxuPXRoaXMucHJvcHMubG9ja09mZnNldCxyPUFycmF5LmlzQXJyYXkobik/bjpbbixuXTsoMCx2LmRlZmF1bHQpKDI9PT1yLmxlbmd0aCwibG9ja09mZnNldCBwcm9wIG9mIFNvcnRhYmxlQ29udGFpbmVyIHNob3VsZCBiZSBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiBleGFjdGx5IHR3byB2YWx1ZXMuIEdpdmVuICVzIixuKTt2YXIgaT1sKHIsMiksbz1pWzBdLGE9aVsxXTtyZXR1cm5bKDAsQy5nZXRMb2NrUGl4ZWxPZmZzZXQpKHtsb2NrT2Zmc2V0Om8sd2lkdGg6ZSxoZWlnaHQ6dH0pLCgwLEMuZ2V0TG9ja1BpeGVsT2Zmc2V0KSh7bG9ja09mZnNldDphLHdpZHRoOmUsaGVpZ2h0OnR9KV19fSx7a2V5OiJ1cGRhdGVQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQubG9ja0F4aXMscj10LmxvY2tUb0NvbnRhaW5lckVkZ2VzLGk9KDAsQy5nZXRQb3NpdGlvbikoZSksbz17eDppLngtdGhpcy5pbml0aWFsT2Zmc2V0LngseTppLnktdGhpcy5pbml0aWFsT2Zmc2V0Lnl9O2lmKG8ueS09d2luZG93LnBhZ2VZT2Zmc2V0LXRoaXMuaW5pdGlhbFdpbmRvd1Njcm9sbC50b3Asby54LT13aW5kb3cucGFnZVhPZmZzZXQtdGhpcy5pbml0aWFsV2luZG93U2Nyb2xsLmxlZnQsdGhpcy50cmFuc2xhdGU9byxyKXt2YXIgYT10aGlzLmdldExvY2tQaXhlbE9mZnNldHMoKSxzPWwoYSwyKSx1PXNbMF0sYz1zWzFdLHA9e3g6dGhpcy53aWR0aC8yLXUueCx5OnRoaXMuaGVpZ2h0LzItdS55fSxmPXt4OnRoaXMud2lkdGgvMi1jLngseTp0aGlzLmhlaWdodC8yLWMueX07by54PSgwLEMubGltaXQpKHRoaXMubWluVHJhbnNsYXRlLngrcC54LHRoaXMubWF4VHJhbnNsYXRlLngtZi54LG8ueCksby55PSgwLEMubGltaXQpKHRoaXMubWluVHJhbnNsYXRlLnkrcC55LHRoaXMubWF4VHJhbnNsYXRlLnktZi55LG8ueSl9IngiPT09bj9vLnk9MDoieSI9PT1uJiYoby54PTApLHRoaXMuaGVscGVyLnN0eWxlW0MudmVuZG9yUHJlZml4KyJUcmFuc2Zvcm0iXT0idHJhbnNsYXRlM2QoIitvLngrInB4LCIrby55KyJweCwgMCkifX0se2tleToiYW5pbWF0ZU5vZGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnRyYW5zaXRpb25EdXJhdGlvbixuPWUuaGlkZVNvcnRhYmxlR2hvc3Qscj1lLm9uU29ydE92ZXIsaT10aGlzLm1hbmFnZXIuZ2V0T3JkZXJlZFJlZnMoKSxvPXtsZWZ0OnRoaXMuY29udGFpbmVyLnNjcm9sbExlZnQtdGhpcy5pbml0aWFsU2Nyb2xsLmxlZnQsdG9wOnRoaXMuY29udGFpbmVyLnNjcm9sbFRvcC10aGlzLmluaXRpYWxTY3JvbGwudG9wfSxhPXtsZWZ0OnRoaXMub2Zmc2V0RWRnZS5sZWZ0K3RoaXMudHJhbnNsYXRlLngrby5sZWZ0LHRvcDp0aGlzLm9mZnNldEVkZ2UudG9wK3RoaXMudHJhbnNsYXRlLnkrby50b3B9LHM9e3RvcDp3aW5kb3cucGFnZVlPZmZzZXQtdGhpcy5pbml0aWFsV2luZG93U2Nyb2xsLnRvcCxsZWZ0OndpbmRvdy5wYWdlWE9mZnNldC10aGlzLmluaXRpYWxXaW5kb3dTY3JvbGwubGVmdH0sdT10aGlzLm5ld0luZGV4O3RoaXMubmV3SW5kZXg9bnVsbDtmb3IodmFyIGM9MCxsPWkubGVuZ3RoO2M8bDtjKyspe3ZhciBwPWlbY10ubm9kZSxmPXAuc29ydGFibGVJbmZvLmluZGV4LGQ9cC5vZmZzZXRXaWR0aCxoPXAub2Zmc2V0SGVpZ2h0LG09e3dpZHRoOnRoaXMud2lkdGg+ZD9kLzI6dGhpcy53aWR0aC8yLGhlaWdodDp0aGlzLmhlaWdodD5oP2gvMjp0aGlzLmhlaWdodC8yfSxnPXt4OjAseTowfSx5PWlbY10uZWRnZU9mZnNldDt5fHwoaVtjXS5lZGdlT2Zmc2V0PXk9KDAsQy5nZXRFZGdlT2Zmc2V0KShwLHRoaXMuY29udGFpbmVyKSk7dmFyIHY9YzxpLmxlbmd0aC0xJiZpW2MrMV0sYj1jPjAmJmlbYy0xXTt2JiYhdi5lZGdlT2Zmc2V0JiYodi5lZGdlT2Zmc2V0PSgwLEMuZ2V0RWRnZU9mZnNldCkodi5ub2RlLHRoaXMuY29udGFpbmVyKSksZiE9PXRoaXMuaW5kZXg/KHQmJihwLnN0eWxlW0MudmVuZG9yUHJlZml4KyJUcmFuc2l0aW9uRHVyYXRpb24iXT10KyJtcyIpLHRoaXMuYXhpcy54P3RoaXMuYXhpcy55P2Y8dGhpcy5pbmRleCYmKGEubGVmdCtzLmxlZnQtbS53aWR0aDw9eS5sZWZ0JiZhLnRvcCtzLnRvcDw9eS50b3ArbS5oZWlnaHR8fGEudG9wK3MudG9wK20uaGVpZ2h0PD15LnRvcCk/KGcueD10aGlzLndpZHRoK3RoaXMubWFyZ2luT2Zmc2V0LngseS5sZWZ0K2cueD50aGlzLmNvbnRhaW5lckJvdW5kaW5nUmVjdC53aWR0aC1tLndpZHRoJiYoZy54PXYuZWRnZU9mZnNldC5sZWZ0LXkubGVmdCxnLnk9di5lZGdlT2Zmc2V0LnRvcC15LnRvcCksbnVsbD09PXRoaXMubmV3SW5kZXgmJih0aGlzLm5ld0luZGV4PWYpKTpmPnRoaXMuaW5kZXgmJihhLmxlZnQrcy5sZWZ0K20ud2lkdGg+PXkubGVmdCYmYS50b3Arcy50b3ArbS5oZWlnaHQ+PXkudG9wfHxhLnRvcCtzLnRvcCttLmhlaWdodD49eS50b3AraCkmJihnLng9LSh0aGlzLndpZHRoK3RoaXMubWFyZ2luT2Zmc2V0LngpLHkubGVmdCtnLng8dGhpcy5jb250YWluZXJCb3VuZGluZ1JlY3QubGVmdCttLndpZHRoJiYoZy54PWIuZWRnZU9mZnNldC5sZWZ0LXkubGVmdCxnLnk9Yi5lZGdlT2Zmc2V0LnRvcC15LnRvcCksdGhpcy5uZXdJbmRleD1mKTpmPnRoaXMuaW5kZXgmJmEubGVmdCtzLmxlZnQrbS53aWR0aD49eS5sZWZ0PyhnLng9LSh0aGlzLndpZHRoK3RoaXMubWFyZ2luT2Zmc2V0LngpLHRoaXMubmV3SW5kZXg9Zik6Zjx0aGlzLmluZGV4JiZhLmxlZnQrcy5sZWZ0PD15LmxlZnQrbS53aWR0aCYmKGcueD10aGlzLndpZHRoK3RoaXMubWFyZ2luT2Zmc2V0LngsbnVsbD09dGhpcy5uZXdJbmRleCYmKHRoaXMubmV3SW5kZXg9ZikpOnRoaXMuYXhpcy55JiYoZj50aGlzLmluZGV4JiZhLnRvcCtzLnRvcCttLmhlaWdodD49eS50b3A/KGcueT0tKHRoaXMuaGVpZ2h0K3RoaXMubWFyZ2luT2Zmc2V0LnkpLHRoaXMubmV3SW5kZXg9Zik6Zjx0aGlzLmluZGV4JiZhLnRvcCtzLnRvcDw9eS50b3ArbS5oZWlnaHQmJihnLnk9dGhpcy5oZWlnaHQrdGhpcy5tYXJnaW5PZmZzZXQueSxudWxsPT10aGlzLm5ld0luZGV4JiYodGhpcy5uZXdJbmRleD1mKSkpLHAuc3R5bGVbQy52ZW5kb3JQcmVmaXgrIlRyYW5zZm9ybSJdPSJ0cmFuc2xhdGUzZCgiK2cueCsicHgsIitnLnkrInB4LDApIik6biYmKHRoaXMuc29ydGFibGVHaG9zdD1wLHAuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixwLnN0eWxlLm9wYWNpdHk9MCl9bnVsbD09dGhpcy5uZXdJbmRleCYmKHRoaXMubmV3SW5kZXg9dGhpcy5pbmRleCksciYmdGhpcy5uZXdJbmRleCE9PXUmJnIoe25ld0luZGV4OnRoaXMubmV3SW5kZXgsb2xkSW5kZXg6dSxpbmRleDp0aGlzLmluZGV4LGNvbGxlY3Rpb246dGhpcy5tYW5hZ2VyLmFjdGl2ZS5jb2xsZWN0aW9ufSl9fSx7a2V5OiJnZXRXcmFwcGVkSW5zdGFuY2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsdi5kZWZhdWx0KShyLndpdGhSZWYsIlRvIGFjY2VzcyB0aGUgd3JhcHBlZCBpbnN0YW5jZSwgeW91IG5lZWQgdG8gcGFzcyBpbiB7d2l0aFJlZjogdHJ1ZX0gYXMgdGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgU29ydGFibGVDb250YWluZXIoKSBjYWxsIiksdGhpcy5yZWZzLndyYXBwZWRJbnN0YW5jZX19LHtrZXk6ImdldENvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmdldENvbnRhaW5lcjtyZXR1cm4iZnVuY3Rpb24iIT09dHlwZW9mIGU/KDAsZy5maW5kRE9NTm9kZSkodGhpcyk6ZShyLndpdGhSZWY/dGhpcy5nZXRXcmFwcGVkSW5zdGFuY2UoKTp2b2lkIDApfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXIud2l0aFJlZj8id3JhcHBlZEluc3RhbmNlIjpudWxsO3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudChlLGMoe3JlZjp0fSwoMCxDLm9taXQpKHRoaXMucHJvcHMsImNvbnRlbnRXaW5kb3ciLCJ1c2VXaW5kb3dBc1Njcm9sbENvbnRhaW5lciIsImRpc3RhbmNlIiwiaGVscGVyQ2xhc3MiLCJoaWRlU29ydGFibGVHaG9zdCIsInRyYW5zaXRpb25EdXJhdGlvbiIsInVzZURyYWdIYW5kbGUiLCJwcmVzc0RlbGF5IiwicHJlc3NUaHJlc2hvbGQiLCJzaG91bGRDYW5jZWxTdGFydCIsIm9uU29ydFN0YXJ0Iiwib25Tb3J0TW92ZSIsIm9uU29ydEVuZCIsImF4aXMiLCJsb2NrQXhpcyIsImxvY2tPZmZzZXQiLCJsb2NrVG9Db250YWluZXJFZGdlcyIsImdldENvbnRhaW5lciIsImdldEhlbHBlckRpbWVuc2lvbnMiKSkpfX1dKSxufShmLkNvbXBvbmVudCksdC5kaXNwbGF5TmFtZT0oMCxDLnByb3ZpZGVEaXNwbGF5TmFtZSkoInNvcnRhYmxlTGlzdCIsZSksdC5kZWZhdWx0UHJvcHM9e2F4aXM6InkiLHRyYW5zaXRpb25EdXJhdGlvbjozMDAscHJlc3NEZWxheTowLHByZXNzVGhyZXNob2xkOjUsZGlzdGFuY2U6MCx1c2VXaW5kb3dBc1Njcm9sbENvbnRhaW5lcjohMSxoaWRlU29ydGFibGVHaG9zdDohMCxzaG91bGRDYW5jZWxTdGFydDpmdW5jdGlvbihlKXtpZigtMSE9PVsiaW5wdXQiLCJ0ZXh0YXJlYSIsInNlbGVjdCIsIm9wdGlvbiIsImJ1dHRvbiJdLmluZGV4T2YoZS50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4hMH0sbG9ja1RvQ29udGFpbmVyRWRnZXM6ITEsbG9ja09mZnNldDoiNTAlIixnZXRIZWxwZXJEaW1lbnNpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZTtyZXR1cm57d2lkdGg6dC5vZmZzZXRXaWR0aCxoZWlnaHQ6dC5vZmZzZXRIZWlnaHR9fX0sdC5wcm9wVHlwZXM9e2F4aXM6bS5kZWZhdWx0Lm9uZU9mKFsieCIsInkiLCJ4eSJdKSxkaXN0YW5jZTptLmRlZmF1bHQubnVtYmVyLGxvY2tBeGlzOm0uZGVmYXVsdC5zdHJpbmcsaGVscGVyQ2xhc3M6bS5kZWZhdWx0LnN0cmluZyx0cmFuc2l0aW9uRHVyYXRpb246bS5kZWZhdWx0Lm51bWJlcixjb250ZW50V2luZG93Om0uZGVmYXVsdC5hbnksb25Tb3J0U3RhcnQ6bS5kZWZhdWx0LmZ1bmMsb25Tb3J0TW92ZTptLmRlZmF1bHQuZnVuYyxvblNvcnRPdmVyOm0uZGVmYXVsdC5mdW5jLG9uU29ydEVuZDptLmRlZmF1bHQuZnVuYyxzaG91bGRDYW5jZWxTdGFydDptLmRlZmF1bHQuZnVuYyxwcmVzc0RlbGF5Om0uZGVmYXVsdC5udW1iZXIsdXNlRHJhZ0hhbmRsZTptLmRlZmF1bHQuYm9vbCx1c2VXaW5kb3dBc1Njcm9sbENvbnRhaW5lcjptLmRlZmF1bHQuYm9vbCxoaWRlU29ydGFibGVHaG9zdDptLmRlZmF1bHQuYm9vbCxsb2NrVG9Db250YWluZXJFZGdlczptLmRlZmF1bHQuYm9vbCxsb2NrT2Zmc2V0Om0uZGVmYXVsdC5vbmVPZlR5cGUoW20uZGVmYXVsdC5udW1iZXIsbS5kZWZhdWx0LnN0cmluZyxtLmRlZmF1bHQuYXJyYXlPZihtLmRlZmF1bHQub25lT2ZUeXBlKFttLmRlZmF1bHQubnVtYmVyLG0uZGVmYXVsdC5zdHJpbmddKSldKSxnZXRDb250YWluZXI6bS5kZWZhdWx0LmZ1bmMsZ2V0SGVscGVyRGltZW5zaW9uczptLmRlZmF1bHQuZnVuY30sdC5jaGlsZENvbnRleHRUeXBlcz17bWFuYWdlcjptLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LG59T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49W10scj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGE9cy5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKGEudmFsdWUpLCF0fHxuLmxlbmd0aCE9PXQpO3I9ITApO31jYXRjaChlKXtpPSEwLG89ZX1maW5hbGx5e3RyeXshciYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiBufXJldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZSh0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKTt0LmRlZmF1bHQ9dTt2YXIgZj1uKDApLGQ9cihmKSxoPW4oMjQ3KSxtPXIoaCksZz1uKDMwKSx5PW4oMjApLHY9cih5KSxiPW4oNDk2KSx4PXIoYiksQz1uKDg2KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fXZhciBpPW4oNDk1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsbyxhKXtpZihhIT09aSl7dmFyIHM9bmV3IEVycm9yKCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7dGhyb3cgcy5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixzfX1mdW5jdGlvbiB0KCl7cmV0dXJuIGV9ZS5pc1JlcXVpcmVkPWU7dmFyIG49e2FycmF5OmUsYm9vbDplLGZ1bmM6ZSxudW1iZXI6ZSxvYmplY3Q6ZSxzdHJpbmc6ZSxzeW1ib2w6ZSxhbnk6ZSxhcnJheU9mOnQsZWxlbWVudDplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dH07cmV0dXJuIG4uY2hlY2tQcm9wVHlwZXM9cixuLlByb3BUeXBlcz1uLG59fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGUubm9kZS5zb3J0YWJsZUluZm8uaW5kZXgtdC5ub2RlLnNvcnRhYmxlSW5mby5pbmRleH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSksdGhpcy5yZWZzPXt9fXJldHVybiBvKGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnJlZnNbZV18fCh0aGlzLnJlZnNbZV09W10pLHRoaXMucmVmc1tlXS5wdXNoKHQpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0SW5kZXgoZSx0KTstMSE9PW4mJnRoaXMucmVmc1tlXS5zcGxpY2UobiwxKX19LHtrZXk6ImlzQWN0aXZlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZX19LHtrZXk6ImdldEFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnJlZnNbdGhpcy5hY3RpdmUuY29sbGVjdGlvbl0uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlLnNvcnRhYmxlSW5mby5pbmRleD09ZS5hY3RpdmUuaW5kZXh9KX19LHtrZXk6ImdldEluZGV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJlZnNbZV0uaW5kZXhPZih0KX19LHtrZXk6ImdldE9yZGVyZWRSZWZzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmFjdGl2ZS5jb2xsZWN0aW9uO3JldHVybiB0aGlzLnJlZnNbZV0uc29ydChpKX19XSksZX0oKTt0LmRlZmF1bHQ9YX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT09dHlwZW9mIHQmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gYShlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfWZ1bmN0aW9uIHMoZSl7dmFyIHQsbixyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7d2l0aFJlZjohMX07cmV0dXJuIG49dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIGkodGhpcyxuKSxvKHRoaXMsKG4uX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIGEobix0KSxjKG4sW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNvbGxlY3Rpb24sbj1lLmRpc2FibGVkLHI9ZS5pbmRleDtufHx0aGlzLnNldERyYWdnYWJsZSh0LHIpfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcm9wcy5pbmRleCE9PWUuaW5kZXgmJnRoaXMubm9kZSYmKHRoaXMubm9kZS5zb3J0YWJsZUluZm8uaW5kZXg9ZS5pbmRleCksdGhpcy5wcm9wcy5kaXNhYmxlZCE9PWUuZGlzYWJsZWQpe3ZhciB0PWUuY29sbGVjdGlvbixuPWUuZGlzYWJsZWQscj1lLmluZGV4O24/dGhpcy5yZW1vdmVEcmFnZ2FibGUodCk6dGhpcy5zZXREcmFnZ2FibGUodCxyKX1lbHNlIHRoaXMucHJvcHMuY29sbGVjdGlvbiE9PWUuY29sbGVjdGlvbiYmKHRoaXMucmVtb3ZlRHJhZ2dhYmxlKHRoaXMucHJvcHMuY29sbGVjdGlvbiksdGhpcy5zZXREcmFnZ2FibGUoZS5jb2xsZWN0aW9uLGUuaW5kZXgpKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNvbGxlY3Rpb247ZS5kaXNhYmxlZHx8dGhpcy5yZW1vdmVEcmFnZ2FibGUodCl9fSx7a2V5OiJzZXREcmFnZ2FibGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5ub2RlPSgwLGguZmluZERPTU5vZGUpKHRoaXMpO24uc29ydGFibGVJbmZvPXtpbmRleDp0LGNvbGxlY3Rpb246ZSxtYW5hZ2VyOnRoaXMuY29udGV4dC5tYW5hZ2VyfSx0aGlzLnJlZj17bm9kZTpufSx0aGlzLmNvbnRleHQubWFuYWdlci5hZGQoZSx0aGlzLnJlZil9fSx7a2V5OiJyZW1vdmVEcmFnZ2FibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dC5tYW5hZ2VyLnJlbW92ZShlLHRoaXMucmVmKX19LHtrZXk6ImdldFdyYXBwZWRJbnN0YW5jZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxnLmRlZmF1bHQpKHIud2l0aFJlZiwiVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBwYXNzIGluIHt3aXRoUmVmOiB0cnVlfSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBTb3J0YWJsZUVsZW1lbnQoKSBjYWxsIiksdGhpcy5yZWZzLndyYXBwZWRJbnN0YW5jZX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1yLndpdGhSZWY/IndyYXBwZWRJbnN0YW5jZSI6bnVsbDtyZXR1cm4gcC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZSx1KHtyZWY6dH0sKDAseS5vbWl0KSh0aGlzLnByb3BzLCJjb2xsZWN0aW9uIiwiZGlzYWJsZWQiLCJpbmRleCIpKSl9fV0pLG59KGwuQ29tcG9uZW50KSx0LmRpc3BsYXlOYW1lPSgwLHkucHJvdmlkZURpc3BsYXlOYW1lKSgic29ydGFibGVFbGVtZW50IixlKSx0LmNvbnRleHRUeXBlcz17bWFuYWdlcjpkLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LHQucHJvcFR5cGVzPXtpbmRleDpkLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsY29sbGVjdGlvbjpkLmRlZmF1bHQub25lT2ZUeXBlKFtkLmRlZmF1bHQubnVtYmVyLGQuZGVmYXVsdC5zdHJpbmddKSxkaXNhYmxlZDpkLmRlZmF1bHQuYm9vbH0sdC5kZWZhdWx0UHJvcHM9e2NvbGxlY3Rpb246MH0sbn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKTt0LmRlZmF1bHQ9czt2YXIgbD1uKDApLHA9cihsKSxmPW4oMjQ3KSxkPXIoZiksaD1uKDMwKSxtPW4oMjApLGc9cihtKSx5PW4oODYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt3aXRoUmVmOiExfTtyZXR1cm4gbj10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gaSh0aGlzLG4pLG8odGhpcywobi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gYShuLHQpLGMobixbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsZi5maW5kRE9NTm9kZSkodGhpcykuc29ydGFibGVIYW5kbGU9ITB9fSx7a2V5OiJnZXRXcmFwcGVkSW5zdGFuY2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaC5kZWZhdWx0KShyLndpdGhSZWYsIlRvIGFjY2VzcyB0aGUgd3JhcHBlZCBpbnN0YW5jZSwgeW91IG5lZWQgdG8gcGFzcyBpbiB7d2l0aFJlZjogdHJ1ZX0gYXMgdGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgU29ydGFibGVIYW5kbGUoKSBjYWxsIiksdGhpcy5yZWZzLndyYXBwZWRJbnN0YW5jZX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1yLndpdGhSZWY/IndyYXBwZWRJbnN0YW5jZSI6bnVsbDtyZXR1cm4gcC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZSx1KHtyZWY6dH0sdGhpcy5wcm9wcykpfX1dKSxufShsLkNvbXBvbmVudCksdC5kaXNwbGF5TmFtZT0oMCxtLnByb3ZpZGVEaXNwbGF5TmFtZSkoInNvcnRhYmxlSGFuZGxlIixlKSxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpO3QuZGVmYXVsdD1zO3ZhciBsPW4oMCkscD1yKGwpLGY9bigzMCksZD1uKDIwKSxoPXIoZCksbT1uKDg2KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNCksaT1uKDIzKSxvPW4oNjQpO3QuZGVmYXVsdEhpc3RvcnlTdGF0ZT1yLk9yZGVyZWRNYXAoe30pLHQuZGVmYXVsdD1pLmhhbmRsZUFjdGlvbnMoe1RPR0dMRV9ISVNUT1JZX0lURU1fU1RBUlJJTkc6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQuc2Vzc2lvbklkO3JldHVybiBlLnNldEluKFtuLCJzdGFycmVkIl0sIWUuZ2V0SW4oW24sInN0YXJyZWQiXSkpfSxBRERfSElTVE9SWV9JVEVNOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnNlc3Npb24saT1vKCk7cmV0dXJuIGUuc2xpY2UoLTQwKS5zZXQoaSxuLm1lcmdlKHtpZDppLGRhdGU6bmV3IERhdGUscmVzcG9uc2VzOnIuTGlzdCgpfSkpfX0sdC5kZWZhdWx0SGlzdG9yeVN0YXRlKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0O3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1lKG4pO3JldHVybiBpLmlzKHQscil8fCh0PXIpLHR9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDE0KTt0LmltbXV0YWJsZU1lbW9pemU9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3JldHVybiByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0sci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGk9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXt1KHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7dShyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe2UuZG9uZT9pKGUudmFsdWUpOm5ldyBuKGZ1bmN0aW9uKHQpe3QoZS52YWx1ZSl9KS50aGVuKGEscyl9dSgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSl9LG89ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcihbZSx0XSl9fWZ1bmN0aW9uIHIobil7aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt1Oyl0cnl7aWYoaT0xLG8mJihhPTImblswXT9vLnJldHVybjpuWzBdP28udGhyb3d8fCgoYT1vLnJldHVybikmJmEuY2FsbChvKSwwKTpvLm5leHQpJiYhKGE9YS5jYWxsKG8sblsxXSkpLmRvbmUpcmV0dXJuIGE7c3dpdGNoKG89MCxhJiYobj1bMiZuWzBdLGEudmFsdWVdKSxuWzBdKXtjYXNlIDA6Y2FzZSAxOmE9bjticmVhaztjYXNlIDQ6cmV0dXJuIHUubGFiZWwrKyx7dmFsdWU6blsxXSxkb25lOiExfTtjYXNlIDU6dS5sYWJlbCsrLG89blsxXSxuPVswXTtjb250aW51ZTtjYXNlIDc6bj11Lm9wcy5wb3AoKSx1LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihhPXUudHJ5cywhKGE9YS5sZW5ndGg+MCYmYVthLmxlbmd0aC0xXSkmJig2PT09blswXXx8Mj09PW5bMF0pKXt1PTA7Y29udGludWV9aWYoMz09PW5bMF0mJighYXx8blsxXT5hWzBdJiZuWzFdPGFbM10pKXt1LmxhYmVsPW5bMV07YnJlYWt9aWYoNj09PW5bMF0mJnUubGFiZWw8YVsxXSl7dS5sYWJlbD1hWzFdLGE9bjticmVha31pZihhJiZ1LmxhYmVsPGFbMl0pe3UubGFiZWw9YVsyXSx1Lm9wcy5wdXNoKG4pO2JyZWFrfWFbMl0mJnUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZX1uPXQuY2FsbChlLHUpfWNhdGNoKGUpe249WzYsZV0sbz0wfWZpbmFsbHl7aT1hPTB9aWYoNSZuWzBdKXRocm93IG5bMV07cmV0dXJue3ZhbHVlOm5bMF0/blsxXTp2b2lkIDAsZG9uZTohMH19dmFyIGksbyxhLHMsdT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZhWzBdKXRocm93IGFbMV07cmV0dXJuIGFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcz17bmV4dDpuKDApLHRocm93Om4oMSkscmV0dXJuOm4oMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9big3KSxzPW4oNTAyKSx1PW4oNzgpLGM9bigxNCksbD1uKDE3OCkscD1uKDE3NSksZj1uKDI1MiksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zdWJzY3JpcHRpb25zPWMuTWFwKCksdGhpcy5zZXNzaW9uQ2FjaGU9bmV3IGYoe21heDoxMH0pLHRoaXMuc2NoZW1hSW5zdGFuY2VDYWNoZT1uZXcgZih7bWF4OjEwfSksdGhpcy5mZXRjaGluZz1jLk1hcCgpLHRoaXMubGlua0dldHRlcj1lfXJldHVybiBlLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdCxuLHIsaTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3JldHVybiB0PXRoaXMuaGFzaChlKSwobj10aGlzLnNlc3Npb25DYWNoZS5nZXQodCkpP1syLG5dOihyPXRoaXMuZmV0Y2hpbmcuZ2V0KHQpKT9bMixyXTooaT10aGlzLmZldGNoU2NoZW1hKGUpLHRoaXMuZmV0Y2hpbmc9dGhpcy5mZXRjaGluZy5zZXQodCxpKSxbMixpXSl9KX0pfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmhhc2goZSk7dGhpcy5zdWJzY3JpcHRpb25zPXRoaXMuc3Vic2NyaXB0aW9ucy5zZXQobix0KX0sZS5wcm90b3R5cGUucmVmZXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mZXRjaFNjaGVtYShlKX0sZS5wcm90b3R5cGUuaGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gZS5lbmRwb2ludCsifiIrKGUuaGVhZGVyc3x8IiIpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWE9ZnVuY3Rpb24oZSl7dmFyIHQ9SlNPTi5zdHJpbmdpZnkoZSksbj10aGlzLnNjaGVtYUluc3RhbmNlQ2FjaGUuZ2V0KHQpO2lmKG4pcmV0dXJuIG47dmFyIHI9YS5idWlsZENsaWVudFNjaGVtYShlKTtyZXR1cm4gdGhpcy5zY2hlbWFJbnN0YW5jZUNhY2hlLnNldCh0LHIpLHJ9LGUucHJvdG90eXBlLmZldGNoU2NoZW1hPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLmhhc2goZSksaT1lLmVuZHBvaW50LG89cih7fSxwLnBhcnNlSGVhZGVycyhlLmhlYWRlcnMpLHsiWC1BcG9sbG8tVHJhY2luZyI6IjEifSksZj1jLnNldChlLCJoZWFkZXJzIixvKSxkPXRoaXMubGlua0dldHRlcihmKS5saW5rLGg9bC5tYWtlT3BlcmF0aW9uKHtxdWVyeTphLmludHJvc3BlY3Rpb25RdWVyeX0pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe3UuZXhlY3V0ZShkLGgpLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbihvKXtpZihvJiYoby5lcnJvcnMmJm8uZXJyb3JzLmxlbmd0aD4wfHwhby5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkobyxudWxsLDIpKTtpZighbyl0aHJvdyBuZXcgcy5Ob1NjaGVtYUVycm9yKGkpO3ZhciBhPXQuZ2V0U2NoZW1hKG8uZGF0YSksdT1vLmV4dGVuc2lvbnMmJkJvb2xlYW4oby5leHRlbnNpb25zLnRyYWNpbmcpfHwhMSxjPXtzY2hlbWE6YSx0cmFjaW5nU3VwcG9ydGVkOnV9O3Quc2Vzc2lvbkNhY2hlLnNldCh0Lmhhc2goZSksYykscihjKSx0LmZldGNoaW5nPXQuZmV0Y2hpbmcucmVtb3ZlKG4pO3ZhciBsPXQuc3Vic2NyaXB0aW9ucy5nZXQobik7bCYmbChjLnNjaGVtYSl9LGVycm9yOmZ1bmN0aW9uKG4pe28obiksdC5mZXRjaGluZz10LmZldGNoaW5nLnJlbW92ZSh0Lmhhc2goZSkpfX0pfSl9LGV9KCk7dC5TY2hlbWFGZXRjaGVyPWR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gZS5jYWxsKHRoaXMsIlNjaGVtYSBjb3VsZCBub3QgYmUgZmV0Y2hlZC5cblBsZWFzZSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgJyIrdCsiJyBpcyBhIHZhbGlkIEdyYXBoUUwgRW5kcG9pbnQuIil8fHRoaXN9cmV0dXJuIHIodCxlKSx0fShFcnJvcik7dC5Ob1NjaGVtYUVycm9yPWl9LGZ1bmN0aW9uKGUsdCxuKXsicHNldWRvbWFwIj09PU9iamVjdCh7Tk9ERV9FTlY6InByb2R1Y3Rpb24iLFBVQkxJQ19VUkw6IiJ9KS5ucG1fcGFja2FnZV9uYW1lJiYidGVzdCI9PT1PYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixQVUJMSUNfVVJMOiIifSkubnBtX2xpZmVjeWNsZV9zY3JpcHQmJihPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixQVUJMSUNfVVJMOiIifSkuVEVTVF9QU0VVRE9NQVA9InRydWUiKSwiZnVuY3Rpb24iIT09dHlwZW9mIE1hcHx8T2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsUFVCTElDX1VSTDoiIn0pLlRFU1RfUFNFVURPTUFQP2UuZXhwb3J0cz1uKDUwNCk6ZS5leHBvcnRzPU1hcH0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIFBzZXVkb01hcCByZXF1aXJlcyAnbmV3JyIpO2lmKHRoaXMuY2xlYXIoKSxlKWlmKGUgaW5zdGFuY2VvZiBufHwiZnVuY3Rpb24iPT09dHlwZW9mIE1hcCYmZSBpbnN0YW5jZW9mIE1hcCllLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0aGlzLnNldCh0LGUpfSx0aGlzKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgYXJndW1lbnQiKTtlLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5zZXQoZVswXSxlWzFdKX0sdGhpcyl9fWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZT09PXR8fGUhPT1lJiZ0IT09dH1mdW5jdGlvbiBpKGUsdCxuKXt0aGlzLmtleT1lLHRoaXMudmFsdWU9dCx0aGlzLl9pbmRleD1ufWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MCxpPSJfIit0LG89aTtzLmNhbGwoZSxvKTtvPWkrbisrKWlmKHIoZVtvXS5rZXksdCkpcmV0dXJuIGVbb119ZnVuY3Rpb24gYShlLHQsbil7Zm9yKHZhciBvPTAsYT0iXyIrdCx1PWE7cy5jYWxsKGUsdSk7dT1hK28rKylpZihyKGVbdV0ua2V5LHQpKXJldHVybiB2b2lkKGVbdV0udmFsdWU9bik7ZS5zaXplKyssZVt1XT1uZXcgaSh0LG4sdSl9dmFyIHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7dD10fHx0aGlzLE9iamVjdC5rZXlzKHRoaXMuX2RhdGEpLmZvckVhY2goZnVuY3Rpb24obil7InNpemUiIT09biYmZS5jYWxsKHQsdGhpcy5fZGF0YVtuXS52YWx1ZSx0aGlzLl9kYXRhW25dLmtleSl9LHRoaXMpfSxuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuISFvKHRoaXMuX2RhdGEsZSl9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD1vKHRoaXMuX2RhdGEsZSk7cmV0dXJuIHQmJnQudmFsdWV9LG4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe2EodGhpcy5fZGF0YSxlLHQpfSxuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzLl9kYXRhLGUpO3QmJihkZWxldGUgdGhpcy5fZGF0YVt0Ll9pbmRleF0sdGhpcy5fZGF0YS5zaXplLS0pfSxuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZS5zaXplPTAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl9kYXRhIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YS5zaXplfSxzZXQ6ZnVuY3Rpb24oZSl7fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLnZhbHVlcz1uLnByb3RvdHlwZS5rZXlzPW4ucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIml0ZXJhdG9ycyBhcmUgbm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT09dHlwZW9mIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgZS5jb3B5JiYiZnVuY3Rpb24iPT09dHlwZW9mIGUuZmlsbCYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnJlYWRVSW50OH19LGZ1bmN0aW9uKGUsdCl7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQ7dmFyIG49ZnVuY3Rpb24oKXt9O24ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9dGhpcztpZih0IGluc3RhbmNlb2Ygbnx8KHQ9bmV3IG4pLHQudGFpbD1udWxsLHQuaGVhZD1udWxsLHQubGVuZ3RoPTAsZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLmZvckVhY2gpZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pO2Vsc2UgaWYoYXJndW1lbnRzLmxlbmd0aD4wKWZvcih2YXIgcj0wLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7cisrKXQucHVzaChhcmd1bWVudHNbcl0pO3JldHVybiB0fWZ1bmN0aW9uIHIoZSx0KXtlLnRhaWw9bmV3IG8odCxlLnRhaWwsbnVsbCxlKSxlLmhlYWR8fChlLmhlYWQ9ZS50YWlsKSxlLmxlbmd0aCsrfWZ1bmN0aW9uIGkoZSx0KXtlLmhlYWQ9bmV3IG8odCxudWxsLGUuaGVhZCxlKSxlLnRhaWx8fChlLnRhaWw9ZS5oZWFkKSxlLmxlbmd0aCsrfWZ1bmN0aW9uIG8oZSx0LG4scil7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKGUsdCxuLHIpO3RoaXMubGlzdD1yLHRoaXMudmFsdWU9ZSx0Pyh0Lm5leHQ9dGhpcyx0aGlzLnByZXY9dCk6dGhpcy5wcmV2PW51bGwsbj8obi5wcmV2PXRoaXMsdGhpcy5uZXh0PW4pOnRoaXMubmV4dD1udWxsfWUuZXhwb3J0cz1uLG4uTm9kZT1vLG4uY3JlYXRlPW4sbi5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXtpZihlLmxpc3QhPT10aGlzKXRocm93IG5ldyBFcnJvcigicmVtb3Zpbmcgbm9kZSB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBsaXN0Iik7dmFyIHQ9ZS5uZXh0LG49ZS5wcmV2O3QmJih0LnByZXY9biksbiYmKG4ubmV4dD10KSxlPT09dGhpcy5oZWFkJiYodGhpcy5oZWFkPXQpLGU9PT10aGlzLnRhaWwmJih0aGlzLnRhaWw9biksZS5saXN0Lmxlbmd0aC0tLGUubmV4dD1udWxsLGUucHJldj1udWxsLGUubGlzdD1udWxsfSxuLnByb3RvdHlwZS51bnNoaWZ0Tm9kZT1mdW5jdGlvbihlKXtpZihlIT09dGhpcy5oZWFkKXtlLmxpc3QmJmUubGlzdC5yZW1vdmVOb2RlKGUpO3ZhciB0PXRoaXMuaGVhZDtlLmxpc3Q9dGhpcyxlLm5leHQ9dCx0JiYodC5wcmV2PWUpLHRoaXMuaGVhZD1lLHRoaXMudGFpbHx8KHRoaXMudGFpbD1lKSx0aGlzLmxlbmd0aCsrfX0sbi5wcm90b3R5cGUucHVzaE5vZGU9ZnVuY3Rpb24oZSl7aWYoZSE9PXRoaXMudGFpbCl7ZS5saXN0JiZlLmxpc3QucmVtb3ZlTm9kZShlKTt2YXIgdD10aGlzLnRhaWw7ZS5saXN0PXRoaXMsZS5wcmV2PXQsdCYmKHQubmV4dD1lKSx0aGlzLnRhaWw9ZSx0aGlzLmhlYWR8fCh0aGlzLmhlYWQ9ZSksdGhpcy5sZW5ndGgrK319LG4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGg7ZTx0O2UrKylyKHRoaXMsYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGg7ZTx0O2UrKylpKHRoaXMsYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe2lmKHRoaXMudGFpbCl7dmFyIGU9dGhpcy50YWlsLnZhbHVlO3JldHVybiB0aGlzLnRhaWw9dGhpcy50YWlsLnByZXYsdGhpcy50YWlsP3RoaXMudGFpbC5uZXh0PW51bGw6dGhpcy5oZWFkPW51bGwsdGhpcy5sZW5ndGgtLSxlfX0sbi5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhlYWQpe3ZhciBlPXRoaXMuaGVhZC52YWx1ZTtyZXR1cm4gdGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LHRoaXMuaGVhZD90aGlzLmhlYWQucHJldj1udWxsOnRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoLS0sZX19LG4ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXM7Zm9yKHZhciBuPXRoaXMuaGVhZCxyPTA7bnVsbCE9PW47cisrKWUuY2FsbCh0LG4udmFsdWUscix0aGlzKSxuPW4ubmV4dH0sbi5wcm90b3R5cGUuZm9yRWFjaFJldmVyc2U9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXM7Zm9yKHZhciBuPXRoaXMudGFpbCxyPXRoaXMubGVuZ3RoLTE7bnVsbCE9PW47ci0tKWUuY2FsbCh0LG4udmFsdWUscix0aGlzKSxuPW4ucHJldn0sbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49dGhpcy5oZWFkO251bGwhPT1uJiZ0PGU7dCsrKW49bi5uZXh0O2lmKHQ9PT1lJiZudWxsIT09bilyZXR1cm4gbi52YWx1ZX0sbi5wcm90b3R5cGUuZ2V0UmV2ZXJzZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPXRoaXMudGFpbDtudWxsIT09biYmdDxlO3QrKyluPW4ucHJldjtpZih0PT09ZSYmbnVsbCE9PW4pcmV0dXJuIG4udmFsdWV9LG4ucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlLHQpe3Q9dHx8dGhpcztmb3IodmFyIHI9bmV3IG4saT10aGlzLmhlYWQ7bnVsbCE9PWk7KXIucHVzaChlLmNhbGwodCxpLnZhbHVlLHRoaXMpKSxpPWkubmV4dDtyZXR1cm4gcn0sbi5wcm90b3R5cGUubWFwUmV2ZXJzZT1mdW5jdGlvbihlLHQpe3Q9dHx8dGhpcztmb3IodmFyIHI9bmV3IG4saT10aGlzLnRhaWw7bnVsbCE9PWk7KXIucHVzaChlLmNhbGwodCxpLnZhbHVlLHRoaXMpKSxpPWkucHJldjtyZXR1cm4gcn0sbi5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmhlYWQ7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49dDtlbHNle2lmKCF0aGlzLmhlYWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cj10aGlzLmhlYWQubmV4dCxuPXRoaXMuaGVhZC52YWx1ZX1mb3IodmFyIGk9MDtudWxsIT09cjtpKyspbj1lKG4sci52YWx1ZSxpKSxyPXIubmV4dDtyZXR1cm4gbn0sbi5wcm90b3R5cGUucmVkdWNlUmV2ZXJzZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy50YWlsO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSluPXQ7ZWxzZXtpZighdGhpcy50YWlsKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBsaXN0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3I9dGhpcy50YWlsLnByZXYsbj10aGlzLnRhaWwudmFsdWV9Zm9yKHZhciBpPXRoaXMubGVuZ3RoLTE7bnVsbCE9PXI7aS0tKW49ZShuLHIudmFsdWUsaSkscj1yLnByZXY7cmV0dXJuIG59LG4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEFycmF5KHRoaXMubGVuZ3RoKSx0PTAsbj10aGlzLmhlYWQ7bnVsbCE9PW47dCsrKWVbdF09bi52YWx1ZSxuPW4ubmV4dDtyZXR1cm4gZX0sbi5wcm90b3R5cGUudG9BcnJheVJldmVyc2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEFycmF5KHRoaXMubGVuZ3RoKSx0PTAsbj10aGlzLnRhaWw7bnVsbCE9PW47dCsrKWVbdF09bi52YWx1ZSxuPW4ucHJldjtyZXR1cm4gZX0sbi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXMubGVuZ3RoLHQ8MCYmKHQrPXRoaXMubGVuZ3RoKSwoZT1lfHwwKTwwJiYoZSs9dGhpcy5sZW5ndGgpO3ZhciByPW5ldyBuO2lmKHQ8ZXx8dDwwKXJldHVybiByO2U8MCYmKGU9MCksdD50aGlzLmxlbmd0aCYmKHQ9dGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wLG89dGhpcy5oZWFkO251bGwhPT1vJiZpPGU7aSsrKW89by5uZXh0O2Zvcig7bnVsbCE9PW8mJmk8dDtpKyssbz1vLm5leHQpci5wdXNoKG8udmFsdWUpO3JldHVybiByfSxuLnByb3RvdHlwZS5zbGljZVJldmVyc2U9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXMubGVuZ3RoLHQ8MCYmKHQrPXRoaXMubGVuZ3RoKSwoZT1lfHwwKTwwJiYoZSs9dGhpcy5sZW5ndGgpO3ZhciByPW5ldyBuO2lmKHQ8ZXx8dDwwKXJldHVybiByO2U8MCYmKGU9MCksdD50aGlzLmxlbmd0aCYmKHQ9dGhpcy5sZW5ndGgpO2Zvcih2YXIgaT10aGlzLmxlbmd0aCxvPXRoaXMudGFpbDtudWxsIT09byYmaT50O2ktLSlvPW8ucHJldjtmb3IoO251bGwhPT1vJiZpPmU7aS0tLG89by5wcmV2KXIucHVzaChvLnZhbHVlKTtyZXR1cm4gcn0sbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmhlYWQsdD10aGlzLnRhaWwsbj1lO251bGwhPT1uO249bi5wcmV2KXt2YXIgcj1uLnByZXY7bi5wcmV2PW4ubmV4dCxuLm5leHQ9cn1yZXR1cm4gdGhpcy5oZWFkPXQsdGhpcy50YWlsPWUsdGhpc319LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhmdW5jdGlvbihnbG9iYWwpeyFmdW5jdGlvbihlLHQpe21vZHVsZS5leHBvcnRzPXQoKX0oMCxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1bndyYXBFeHBvcnRzKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gY3JlYXRlQ29tbW9uanNNb2R1bGUoZSx0KXtyZXR1cm4gdD17ZXhwb3J0czp7fX0sZSh0LHQuZXhwb3J0cyksdC5leHBvcnRzfWZ1bmN0aW9uIF90eXBlb2YoZSl7cmV0dXJuKF90eXBlb2Y9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIF9pbmhlcml0cyhlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmX3NldFByb3RvdHlwZU9mKGUsdCl9ZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKGUpe3JldHVybihfZ2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihlLHQpe3JldHVybihfc2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIF9jb25zdHJ1Y3QoZSx0LG4pe3JldHVybiBfY29uc3RydWN0PWlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1bbnVsbF07ci5wdXNoLmFwcGx5KHIsdCk7dmFyIGk9RnVuY3Rpb24uYmluZC5hcHBseShlLHIpLG89bmV3IGk7cmV0dXJuIG4mJl9zZXRQcm90b3R5cGVPZihvLG4ucHJvdG90eXBlKSxvfSxfY29uc3RydWN0LmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKGUpe3ZhciB0PSJmdW5jdGlvbiI9PT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybihfd3JhcE5hdGl2ZVN1cGVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gX2NvbnN0cnVjdChlLGFyZ3VtZW50cyxfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpfWlmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIHQpe2lmKHQuaGFzKGUpKXJldHVybiB0LmdldChlKTt0LnNldChlLG4pfXJldHVybiBuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxfc2V0UHJvdG90eXBlT2YobixlKX0pKGUpfWZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09dHlwZW9mIHQmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9fYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpOnR9ZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLHQpe3JldHVybiB0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSl9ZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoZSx0KXtyZXR1cm4gX2FycmF5V2l0aEhvbGVzKGUpfHxfaXRlcmFibGVUb0FycmF5TGltaXQoZSx0KXx8X25vbkl0ZXJhYmxlUmVzdCgpfWZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChlLHQpe3ZhciBuPVtdLHI9ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShhPXMubmV4dCgpKS5kb25lKSYmKG4ucHVzaChhLnZhbHVlKSwhdHx8bi5sZW5ndGghPT10KTtyPSEwKTt9Y2F0Y2goZSl7aT0hMCxvPWV9ZmluYWxseXt0cnl7cnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiBufWZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9ZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHJ1blRpbWVvdXQoZSl7aWYoY2FjaGVkU2V0VGltZW91dD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoY2FjaGVkU2V0VGltZW91dD09PWRlZmF1bHRTZXRUaW1vdXR8fCFjYWNoZWRTZXRUaW1lb3V0KSYmc2V0VGltZW91dClyZXR1cm4gY2FjaGVkU2V0VGltZW91dD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLGUsMCl9fX1mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQoZSl7aWYoY2FjaGVkQ2xlYXJUaW1lb3V0PT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKGNhY2hlZENsZWFyVGltZW91dD09PWRlZmF1bHRDbGVhclRpbWVvdXR8fCFjYWNoZWRDbGVhclRpbWVvdXQpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtyZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcyxlKX19fWZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpe2RyYWluaW5nJiZjdXJyZW50UXVldWUmJihkcmFpbmluZz0hMSxjdXJyZW50UXVldWUubGVuZ3RoP3F1ZXVlPWN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpOnF1ZXVlSW5kZXg9LTEscXVldWUubGVuZ3RoJiZkcmFpblF1ZXVlKCkpfWZ1bmN0aW9uIGRyYWluUXVldWUoKXtpZighZHJhaW5pbmcpe3ZhciBlPXJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtkcmFpbmluZz0hMDtmb3IodmFyIHQ9cXVldWUubGVuZ3RoO3Q7KXtmb3IoY3VycmVudFF1ZXVlPXF1ZXVlLHF1ZXVlPVtdOysrcXVldWVJbmRleDx0OyljdXJyZW50UXVldWUmJmN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtxdWV1ZUluZGV4PS0xLHQ9cXVldWUubGVuZ3RofWN1cnJlbnRRdWV1ZT1udWxsLGRyYWluaW5nPSExLHJ1bkNsZWFyVGltZW91dChlKX19ZnVuY3Rpb24gbmV4dFRpY2soZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtxdWV1ZS5wdXNoKG5ldyBJdGVtKGUsdCkpLDEhPT1xdWV1ZS5sZW5ndGh8fGRyYWluaW5nfHxydW5UaW1lb3V0KGRyYWluUXVldWUpfWZ1bmN0aW9uIEl0ZW0oZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBub29wKCl7fWZ1bmN0aW9uIGJpbmRpbmcoZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfWZ1bmN0aW9uIGN3ZCgpe3JldHVybiIvIn1mdW5jdGlvbiBjaGRpcihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfWZ1bmN0aW9uIHVtYXNrKCl7cmV0dXJuIDB9ZnVuY3Rpb24gaHJ0aW1lKGUpe3ZhciB0PS4wMDEqcGVyZm9ybWFuY2VOb3cuY2FsbChwZXJmb3JtYW5jZSksbj1NYXRoLmZsb29yKHQpLHI9TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKG4tPWVbMF0sKHItPWVbMV0pPDAmJihuLS0scis9MWU5KSksW24scl19ZnVuY3Rpb24gdXB0aW1lKCl7cmV0dXJuKG5ldyBEYXRlLXN0YXJ0VGltZSkvMWUzfWZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDUoKXt2YXIgZT1fdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFsiXG4gICAgICBSZXF1aXJlIGVpdGhlciAnQHByZXR0aWVyJyBvciAnQGZvcm1hdCcgdG8gYmUgcHJlc2VudCBpbiB0aGUgZmlsZSdzIGZpcnN0IGRvY2Jsb2NrIGNvbW1lbnRcbiAgICAgIGluIG9yZGVyIGZvciBpdCB0byBiZSBmb3JtYXR0ZWQuXG4gICAgIl0pO3JldHVybiBfdGVtcGxhdGVPYmplY3Q1PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGV9ZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0NCgpe3ZhciBlPV90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoWyJcbiAgICAgIEZvcm1hdCBjb2RlIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gY2hhcmFjdGVyIG9mZnNldC5cbiAgICAgIFRoZSByYW5nZSB3aWxsIGV4dGVuZCBiYWNrd2FyZHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIHN0YXRlbWVudC5cbiAgICAgIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jdXJzb3Itb2Zmc2V0LlxuICAgICJdKTtyZXR1cm4gX3RlbXBsYXRlT2JqZWN0ND1mdW5jdGlvbigpe3JldHVybiBlfSxlfWZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDMoKXt2YXIgZT1fdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFsiXG4gICAgICBGb3JtYXQgY29kZSBlbmRpbmcgYXQgYSBnaXZlbiBjaGFyYWN0ZXIgb2Zmc2V0IChleGNsdXNpdmUpLlxuICAgICAgVGhlIHJhbmdlIHdpbGwgZXh0ZW5kIGZvcndhcmRzIHRvIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGVkIHN0YXRlbWVudC5cbiAgICAgIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jdXJzb3Itb2Zmc2V0LlxuICAgICJdKTtyZXR1cm4gX3RlbXBsYXRlT2JqZWN0Mz1mdW5jdGlvbigpe3JldHVybiBlfSxlfWZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDIoKXt2YXIgZT1fdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFsiXG4gICAgICBDdXN0b20gZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgcHJldHRpZXIgcGx1Z2lucyBpbiBub2RlX21vZHVsZXMgc3ViZGlyZWN0b3J5LlxuICAgICAgT3ZlcnJpZGVzIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBwbHVnaW5zIGFyZSBzZWFyY2hlZCByZWxhdGl2ZWx5IHRvIHRoZSBsb2NhdGlvbiBvZiBQcmV0dGllci5cbiAgICAgIE11bHRpcGxlIHZhbHVlcyBhcmUgYWNjZXB0ZWQuXG4gICAgIl0pO3JldHVybiBfdGVtcGxhdGVPYmplY3QyPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGV9ZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCl7dmFyIGU9X3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbIlxuICAgICAgUHJpbnQgKHRvIHN0ZGVycikgd2hlcmUgYSBjdXJzb3IgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHdvdWxkIG1vdmUgdG8gYWZ0ZXIgZm9ybWF0dGluZy5cbiAgICAgIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1yYW5nZS1zdGFydCBhbmQgLS1yYW5nZS1lbmQuXG4gICAgIl0pO3JldHVybiBfdGVtcGxhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZX1mdW5jdGlvbiBnZXRTdXBwb3J0SW5mbyQyKGUsdCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gdC5zaG93VW5yZWxlYXNlZHx8ISgic2luY2UiaW4gbil8fG4uc2luY2UmJnNlbXZlci5ndGUoZSxuLnNpbmNlKX1mdW5jdGlvbiByKG4pe3JldHVybiB0LnNob3dEZXByZWNhdGVkfHwhKCJkZXByZWNhdGVkImluIG4pfHxuLmRlcHJlY2F0ZWQmJnNlbXZlci5sdChlLG4uZGVwcmVjYXRlZCl9ZnVuY3Rpb24gaShlKXtpZighZS5kZXByZWNhdGVkfHx0LnNob3dEZXByZWNhdGVkKXJldHVybiBlO3ZhciBuPU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIGRlbGV0ZSBuLmRlcHJlY2F0ZWQsZGVsZXRlIG4ucmVkaXJlY3Qsbn1mdW5jdGlvbiBvKGUpe2lmKHQuc2hvd0ludGVybmFsKXJldHVybiBlO3ZhciBuPU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIGRlbGV0ZSBuLmNsaU5hbWUsZGVsZXRlIG4uY2xpQ2F0ZWdvcnksZGVsZXRlIG4uY2xpRGVzY3JpcHRpb24sbn10PU9iamVjdC5hc3NpZ24oe3BsdWdpbnM6W10sc2hvd1VucmVsZWFzZWQ6ITEsc2hvd0RlcHJlY2F0ZWQ6ITEsc2hvd0ludGVybmFsOiExfSx0KSxlfHwoZT1jdXJyZW50VmVyc2lvbik7dmFyIGE9dC5wbHVnaW5zLHM9YXJyYXlpZnkoT2JqZWN0LmFzc2lnbihhLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKGUsdC5vcHRpb25zKX0se30pLGNvcmVPcHRpb25zKSwibmFtZSIpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5uYW1lPT09dC5uYW1lPzA6ZS5uYW1lPHQubmFtZT8tMToxfSkuZmlsdGVyKG4pLmZpbHRlcihyKS5tYXAoaSkubWFwKG8pLm1hcChmdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBBcnJheS5pc0FycmF5KHQuZGVmYXVsdCkmJih0LmRlZmF1bHQ9MT09PXQuZGVmYXVsdC5sZW5ndGg/dC5kZWZhdWx0WzBdLnZhbHVlOnQuZGVmYXVsdC5maWx0ZXIobikuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBzZW12ZXIuY29tcGFyZSh0LnNpbmNlLGUuc2luY2UpfSlbMF0udmFsdWUpLEFycmF5LmlzQXJyYXkodC5jaG9pY2VzKSYmKHQuY2hvaWNlcz10LmNob2ljZXMuZmlsdGVyKG4pLmZpbHRlcihyKS5tYXAoaSkpLHR9KS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9YS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdE9wdGlvbnMmJnQuZGVmYXVsdE9wdGlvbnNbZS5uYW1lXX0pLG49dC5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdFtuLm5hbWVdPW4uZGVmYXVsdE9wdGlvbnNbZS5uYW1lXSx0fSx7fSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oZSx7cGx1Z2luRGVmYXVsdHM6bn0pfSksdT1zZW12ZXIubHQoZSwiMS43LjEiKTtyZXR1cm57bGFuZ3VhZ2VzOmEucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KHQubGFuZ3VhZ2VzfHxbXSl9LFtdKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2luY2U/c2VtdmVyLmd0ZShlLHQuc2luY2UpOm51bGwhPT10LnNpbmNlfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJNYXJrZG93biI9PT1lLm5hbWU/T2JqZWN0LmFzc2lnbih7fSxlLHtwYXJzZXJzOlsibWFya2Rvd24iXX0pOiJUeXBlU2NyaXB0Ij09PWUubmFtZT9PYmplY3QuYXNzaWduKHt9LGUse3BhcnNlcnM6WyJ0eXBlc2NyaXB0Il19KTp1JiYiQ1NTIj09PWUuZ3JvdXA/T2JqZWN0LmFzc2lnbih7fSxlLHtwYXJzZXJzOlsicG9zdGNzcyJdfSk6ZX0pLG9wdGlvbnM6c319ZnVuY3Rpb24gYXBpRGVzY3JpcHRvcihlLHQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9KU09OLnN0cmluZ2lmeShlKToiYHsgIi5jb25jYXQoYXBpRGVzY3JpcHRvcihlKSwiOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkodCksIiB9YCIpfWZ1bmN0aW9uIGNsaURlc2NyaXB0b3IoZSx0KXtyZXR1cm4hMT09PXQ/ImAtLW5vLSIuY29uY2F0KGUsImAiKTohMD09PXR8fDE9PT1hcmd1bWVudHMubGVuZ3RoPyJgLS0iLmNvbmNhdChlLCJgIik6IiI9PT10PyJgLS0iLmNvbmNhdChlLCJgIHdpdGhvdXQgYW4gYXJndW1lbnQiKToiYC0tIi5jb25jYXQoZSwiPSIpLmNvbmNhdCh0LCJgIil9ZnVuY3Rpb24gdmFsaWRhdGVPcHRpb24oZSx0LG4pe249bnx8e307dmFyIHI9bi5kZXNjcmlwdG9yfHxvcHRpb25zRGVzY3JpcHRvci5hcGlEZXNjcmlwdG9yO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdC5leGNlcHRpb258fCF0LmV4Y2VwdGlvbihlKSl0cnl7dmFsaWRhdGVPcHRpb25UeXBlKGUsdCl9Y2F0Y2gobil7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGAiLmNvbmNhdChyKHQubmFtZSksImAgdmFsdWUuICIpLmNvbmNhdChuLm1lc3NhZ2UsIiwgYnV0IHJlY2VpdmVkIGAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZSksImAuIikpfX1mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvblR5cGUoZSx0KXtpZih0LmFycmF5KXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGFuIGFycmF5Iik7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB2YWxpZGF0ZU9wdGlvblR5cGUoZSxPYmplY3QuYXNzaWduKHt9LHQse2FycmF5OiExfSkpfSl9ZWxzZSBzd2l0Y2godC50eXBlKXtjYXNlImludCI6dmFsaWRhdGVJbnRPcHRpb24oZSk7YnJlYWs7Y2FzZSJib29sZWFuIjp2YWxpZGF0ZUJvb2xlYW5PcHRpb24oZSk7YnJlYWs7Y2FzZSJjaG9pY2UiOnZhbGlkYXRlQ2hvaWNlT3B0aW9uKGUsdC5jaG9pY2VzKX19ZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuT3B0aW9uKGUpe2lmKCJib29sZWFuIiE9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYSBib29sZWFuIil9ZnVuY3Rpb24gdmFsaWRhdGVJbnRPcHRpb24oZSl7aWYoISgibnVtYmVyIj09PXR5cGVvZiBlJiZNYXRoLmZsb29yKGUpPT09ZSYmZT49MCYmZSE9PTEvMCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBhbiBpbnRlZ2VyIil9ZnVuY3Rpb24gdmFsaWRhdGVDaG9pY2VPcHRpb24oZSx0KXtpZighdC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlPT09ZX0pKXt2YXIgbj10LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kZXByZWNhdGVkfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlLnZhbHVlKX0pLnNvcnQoKSxyPW4uc2xpY2UoMCwtMiksaT1uLnNsaWNlKC0yKTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkICIuY29uY2F0KHIuY29uY2F0KGkuam9pbigiIG9yICIpKS5qb2luKCIsICIpKSl9fWZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbnMkMShlLHQsbil7bj1ufHx7fTt2YXIgcj0hMT09PW4ubG9nZ2VyP3t3YXJuOmZ1bmN0aW9uKCl7fX06dm9pZCAwIT09bi5sb2dnZXI/bi5sb2dnZXI6Y29uc29sZSxpPW4uZGVzY3JpcHRvcnx8b3B0aW9uc0Rlc2NyaXB0b3IuYXBpRGVzY3JpcHRvcixvPW4ucGFzc1Rocm91Z2h8fFtdLGE9dC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLF9kZWZpbmVQcm9wZXJ0eSh7fSx0Lm5hbWUsdCkpfSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihuLHMpe3ZhciB1PWFbc10sYz1zLGw9ZVtzXTtpZighdSlyZXR1cm4hMD09PW98fC0xIT09by5pbmRleE9mKGMpP25bY109bDpyLndhcm4oY3JlYXRlVW5rbm93bk9wdGlvbk1lc3NhZ2UoYyxsLHQsaSkpLG47aWYodS5kZXByZWNhdGVkPyJzdHJpbmciPT09dHlwZW9mIHUucmVkaXJlY3Q/KHIud2FybihjcmVhdGVSZWRpcmVjdE9wdGlvbk1lc3NhZ2UodSxpKSksYz11LnJlZGlyZWN0KTpsJiYoci53YXJuKGNyZWF0ZVJlZGlyZWN0T3B0aW9uTWVzc2FnZSh1LGkpKSxsPXUucmVkaXJlY3QudmFsdWUsYz11LnJlZGlyZWN0Lm9wdGlvbik6bD1ub3JtYWxpemVPcHRpb24obCx1KSx1LmNob2ljZXMpe3ZhciBwPXUuY2hvaWNlcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09bH0pO3AmJnAuZGVwcmVjYXRlZCYmKHIud2FybihjcmVhdGVSZWRpcmVjdENob2ljZU1lc3NhZ2UodSxwLGkpKSxsPXAucmVkaXJlY3QpfXJldHVybiB1LmFycmF5JiYhQXJyYXkuaXNBcnJheShsKSYmKGw9W2xdKSxsIT09dS5kZWZhdWx0JiZvcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlT3B0aW9uKGwsYVtjXSx7ZGVzY3JpcHRvcjppfSksbltjXT1sLG59LHt9KX1mdW5jdGlvbiBub3JtYWxpemVPcHRpb24oZSx0KXtyZXR1cm4iaW50Ij09PXQudHlwZT9OdW1iZXIoZSk6ZX1mdW5jdGlvbiBjcmVhdGVVbmtub3duT3B0aW9uTWVzc2FnZShlLHQsbixyKXt2YXIgaT1bIklnbm9yZWQgdW5rbm93biBvcHRpb24gIi5jb25jYXQocihlLHQpLCIuIildLG89bi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiBsZXZlbih0Lm5hbWUsZSk8M30pO3JldHVybiBvJiZpLnB1c2goIkRpZCB5b3UgbWVhbiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShvLm5hbWUpLCI/IikpLGkuam9pbigiICIpfWZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0T3B0aW9uTWVzc2FnZShlLHQpe3JldHVybiIiLmNvbmNhdCh0KGUubmFtZSksIiBpcyBkZXByZWNhdGVkLiBQcmV0dGllciBub3cgdHJlYXRzIGl0IGFzICIpLmNvbmNhdCgic3RyaW5nIj09PXR5cGVvZiBlLnJlZGlyZWN0P3QoZS5yZWRpcmVjdCk6dChlLnJlZGlyZWN0Lm9wdGlvbixlLnJlZGlyZWN0LnZhbHVlKSwiLiIpfWZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0Q2hvaWNlTWVzc2FnZShlLHQsbil7cmV0dXJuIiIuY29uY2F0KG4oZS5uYW1lLHQudmFsdWUpLCIgaXMgZGVwcmVjYXRlZC4gUHJldHRpZXIgbm93IHRyZWF0cyBpdCBhcyAiKS5jb25jYXQobihlLm5hbWUsdC5yZWRpcmVjdCksIi4iKX1mdW5jdGlvbiBub3JtYWxpemVBcGlPcHRpb25zKGUsdCxuKXtyZXR1cm4gbm9ybWFsaXplT3B0aW9ucyQxKGUsdCxPYmplY3QuYXNzaWduKHtkZXNjcmlwdG9yOm9wdGlvbnNEZXNjcmlwdG9yLmFwaURlc2NyaXB0b3J9LG4pKX1mdW5jdGlvbiBub3JtYWxpemVDbGlPcHRpb25zKGUsdCxuKXt2YXIgcj1lLl98fFtdLGk9bm9ybWFsaXplT3B0aW9ucyQxKE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QuYXNzaWduKHQsMT09PW4ubGVuZ3RoP251bGw6X2RlZmluZVByb3BlcnR5KHt9LG4sZVtuXSkpfSx7fSksdCxPYmplY3QuYXNzaWduKHtkZXNjcmlwdG9yOm9wdGlvbnNEZXNjcmlwdG9yLmNsaURlc2NyaXB0b3J9LG4pKTtyZXR1cm4gaS5fPXIsaX1mdW5jdGlvbiBsb2NTdGFydCQxKGUpe3JldHVybiBlLmRlY2xhcmF0aW9uJiZlLmRlY2xhcmF0aW9uLmRlY29yYXRvcnMmJmUuZGVjbGFyYXRpb24uZGVjb3JhdG9ycy5sZW5ndGg+MD9sb2NTdGFydCQxKGUuZGVjbGFyYXRpb24uZGVjb3JhdG9yc1swXSk6ZS5kZWNvcmF0b3JzJiZlLmRlY29yYXRvcnMubGVuZ3RoPjA/bG9jU3RhcnQkMShlLmRlY29yYXRvcnNbMF0pOmUuX19sb2NhdGlvbj9lLl9fbG9jYXRpb24uc3RhcnRPZmZzZXQ6ZS5yYW5nZT9lLnJhbmdlWzBdOiJudW1iZXIiPT09dHlwZW9mIGUuc3RhcnQ/ZS5zdGFydDplLmxvYz9lLmxvYy5zdGFydDpudWxsfWZ1bmN0aW9uIGxvY0VuZCQxKGUpe3ZhciB0PWUubm9kZXMmJmdldExhc3QoZS5ub2Rlcyk7aWYodCYmZS5zb3VyY2UmJiFlLnNvdXJjZS5lbmQmJihlPXQpLGUuX19sb2NhdGlvbilyZXR1cm4gZS5fX2xvY2F0aW9uLmVuZE9mZnNldDt2YXIgbj1lLnJhbmdlP2UucmFuZ2VbMV06Im51bWJlciI9PT10eXBlb2YgZS5lbmQ/ZS5lbmQ6bnVsbDtyZXR1cm4gZS50eXBlQW5ub3RhdGlvbj9NYXRoLm1heChuLGxvY0VuZCQxKGUudHlwZUFubm90YXRpb24pKTplLmxvYyYmIW4/ZS5sb2MuZW5kOm59ZnVuY3Rpb24gYnVpbGRHcmFwaCgpe2Zvcih2YXIgZT17fSx0PW1vZGVscyQxLmxlbmd0aCxuPTA7bjx0O24rKyllW21vZGVscyQxW25dXT17ZGlzdGFuY2U6LTEscGFyZW50Om51bGx9O3JldHVybiBlfWZ1bmN0aW9uIGRlcml2ZUJGUyhlKXt2YXIgdD1idWlsZEdyYXBoKCksbj1bZV07Zm9yKHRbZV0uZGlzdGFuY2U9MDtuLmxlbmd0aDspZm9yKHZhciByPW4ucG9wKCksaT1PYmplY3Qua2V5cyhjb252ZXJzaW9uc1tyXSksbz1pLmxlbmd0aCxhPTA7YTxvO2ErKyl7dmFyIHM9aVthXSx1PXRbc107LTE9PT11LmRpc3RhbmNlJiYodS5kaXN0YW5jZT10W3JdLmRpc3RhbmNlKzEsdS5wYXJlbnQ9cixuLnVuc2hpZnQocykpfXJldHVybiB0fWZ1bmN0aW9uIGxpbmsoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fWZ1bmN0aW9uIHdyYXBDb252ZXJzaW9uKGUsdCl7Zm9yKHZhciBuPVt0W2VdLnBhcmVudCxlXSxyPWNvbnZlcnNpb25zW3RbZV0ucGFyZW50XVtlXSxpPXRbZV0ucGFyZW50O3RbaV0ucGFyZW50OyluLnVuc2hpZnQodFtpXS5wYXJlbnQpLHI9bGluayhjb252ZXJzaW9uc1t0W2ldLnBhcmVudF1baV0sciksaT10W2ldLnBhcmVudDtyZXR1cm4gci5jb252ZXJzaW9uPW4scn1mdW5jdGlvbiB3cmFwUmF3KGUpe3ZhciB0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dD90Oihhcmd1bWVudHMubGVuZ3RoPjEmJih0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpLGUodCkpfTtyZXR1cm4iY29udmVyc2lvbiJpbiBlJiYodC5jb252ZXJzaW9uPWUuY29udmVyc2lvbiksdH1mdW5jdGlvbiB3cmFwUm91bmRlZChlKXt2YXIgdD1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10fHxudWxsPT09dClyZXR1cm4gdDthcmd1bWVudHMubGVuZ3RoPjEmJih0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO3ZhciBuPWUodCk7aWYoIm9iamVjdCI9PT1fdHlwZW9mKG4pKWZvcih2YXIgcj1uLmxlbmd0aCxpPTA7aTxyO2krKyluW2ldPU1hdGgucm91bmQobltpXSk7cmV0dXJuIG59O3JldHVybiJjb252ZXJzaW9uImluIGUmJih0LmNvbnZlcnNpb249ZS5jb252ZXJzaW9uKSx0fWZ1bmN0aW9uIGdldFBhcnNlcnMoZSl7dmFyIHQ9e30sbj0hMCxyPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT1lLnBsdWdpbnNbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIHM9by52YWx1ZTtpZihzLnBhcnNlcnMpe3ZhciB1PSEwLGM9ITEsbD12b2lkIDA7dHJ5e2Zvcih2YXIgcCxmPW93bk5hbWVzKHMucGFyc2VycylbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0ocD1mLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIGQ9cC52YWx1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxkLG93bkRlc2NyaXB0b3Iocy5wYXJzZXJzLGQpKX19Y2F0Y2goZSl7Yz0hMCxsPWV9ZmluYWxseXt0cnl7dXx8bnVsbD09Zi5yZXR1cm58fGYucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGx9fX19fWNhdGNoKGUpe3I9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYocil0aHJvdyBpfX1yZXR1cm4gdH1mdW5jdGlvbiByZXNvbHZlUGFyc2VyJDEob3B0cyxwYXJzZXJzKXtpZihwYXJzZXJzPXBhcnNlcnN8fGdldFBhcnNlcnMob3B0cyksImZ1bmN0aW9uIj09PXR5cGVvZiBvcHRzLnBhcnNlcilyZXR1cm57cGFyc2U6b3B0cy5wYXJzZXIsYXN0Rm9ybWF0OiJlc3RyZWUiLGxvY1N0YXJ0OmxvY1N0YXJ0LGxvY0VuZDpsb2NFbmR9O2lmKCJzdHJpbmciPT09dHlwZW9mIG9wdHMucGFyc2VyKXtpZihwYXJzZXJzLmhhc093blByb3BlcnR5KG9wdHMucGFyc2VyKSlyZXR1cm4gcGFyc2Vyc1tvcHRzLnBhcnNlcl07dHJ5e3JldHVybntwYXJzZTpldmFsKCJyZXF1aXJlIikocGF0aCQ0LnJlc29sdmUocHJvY2Vzcy5jd2QoKSxvcHRzLnBhcnNlcikpLGFzdEZvcm1hdDoiZXN0cmVlIixsb2NTdGFydDpsb2NTdGFydCxsb2NFbmQ6bG9jRW5kfX1jYXRjaChlKXt0aHJvdyBuZXcgQ29uZmlnRXJyb3IkMSgiQ291bGRuJ3QgcmVzb2x2ZSBwYXJzZXIgXCIiLmNvbmNhdChvcHRzLnBhcnNlciwnIicpKX19fWZ1bmN0aW9uIHBhcnNlJDIoZSx0KXt2YXIgbj1nZXRQYXJzZXJzKHQpLHI9T2JqZWN0LmtleXMobikucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5bdF0ucGFyc2V9fSl9LHt9KSxpPXJlc29sdmVQYXJzZXIkMSh0LG4pO3RyeXtyZXR1cm4gaS5wcmVwcm9jZXNzJiYoZT1pLnByZXByb2Nlc3MoZSx0KSkse3RleHQ6ZSxhc3Q6aS5wYXJzZShlLHIsdCl9fWNhdGNoKHQpe3ZhciBvPXQubG9jO2lmKG8pe3ZhciBhPWxpYiQxO3Rocm93IHQuY29kZUZyYW1lPWEuY29kZUZyYW1lQ29sdW1ucyhlLG8se2hpZ2hsaWdodENvZGU6ITB9KSx0Lm1lc3NhZ2UrPSJcbiIrdC5jb2RlRnJhbWUsdH10aHJvdyB0LnN0YWNrfX1mdW5jdGlvbiBub3JtYWxpemUoZSx0KXt0PXR8fHt9O3ZhciBuPU9iamVjdC5hc3NpZ24oe30sZSkscj1nZXRTdXBwb3J0SW5mbyQxKG51bGwse3BsdWdpbnM6ZS5wbHVnaW5zLHNob3dVbnJlbGVhc2VkOiEwLHNob3dEZXByZWNhdGVkOiEwfSkub3B0aW9ucyxpPXIucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oZSxfZGVmaW5lUHJvcGVydHkoe30sdC5uYW1lLHQuZGVmYXVsdCkpfSxPYmplY3QuYXNzaWduKHt9LGhpZGRlbkRlZmF1bHRzKSk7aWYoIW4ucGFyc2VyKWlmKG4uZmlsZXBhdGgpe2lmKG4ucGFyc2VyPWluZmVyUGFyc2VyKG4uZmlsZXBhdGgsbi5wbHVnaW5zKSwhbi5wYXJzZXIpdGhyb3cgbmV3IFVuZGVmaW5lZFBhcnNlckVycm9yKCJObyBwYXJzZXIgY291bGQgYmUgaW5mZXJyZWQgZm9yIGZpbGU6ICIuY29uY2F0KG4uZmlsZXBhdGgpKX1lbHNle3ZhciBvPXQubG9nZ2VyfHxjb25zb2xlO28ud2FybigiTm8gcGFyc2VyIGFuZCBubyBmaWxlcGF0aCBnaXZlbiwgdXNpbmcgJ2JhYnlsb24nIHRoZSBwYXJzZXIgbm93IGJ1dCB0aGlzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHNwZWNpZnkgYSBwYXJzZXIgb3IgYSBmaWxlcGF0aCBzbyBvbmUgY2FuIGJlIGluZmVycmVkLiIpLG4ucGFyc2VyPSJiYWJ5bG9uIn12YXIgYT1yZXNvbHZlUGFyc2VyKG9wdGlvbnNOb3JtYWxpemVyLm5vcm1hbGl6ZUFwaU9wdGlvbnMobixbci5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiJwYXJzZXIiPT09ZS5uYW1lfSldLHtwYXNzVGhyb3VnaDohMCxsb2dnZXI6ITF9KSk7bi5hc3RGb3JtYXQ9YS5hc3RGb3JtYXQsbi5sb2NFbmQ9YS5sb2NFbmQsbi5sb2NTdGFydD1hLmxvY1N0YXJ0O3ZhciBzPWdldFBsdWdpbihuKTtuLnByaW50ZXI9cy5wcmludGVyc1tuLmFzdEZvcm1hdF07dmFyIHU9ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGx1Z2luRGVmYXVsdHMmJmUucGx1Z2luRGVmYXVsdHNbcy5uYW1lXX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKGUsX2RlZmluZVByb3BlcnR5KHt9LHQubmFtZSx0LnBsdWdpbkRlZmF1bHRzW3MubmFtZV0pKX0se30pLGM9T2JqZWN0LmFzc2lnbih7fSxpLHUpO3JldHVybiBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe251bGw9PW5bZV0mJihuW2VdPWNbZV0pfSksImpzb24iPT09bi5wYXJzZXImJihuLnRyYWlsaW5nQ29tbWE9Im5vbmUiKSxvcHRpb25zTm9ybWFsaXplci5ub3JtYWxpemVBcGlPcHRpb25zKG4scixPYmplY3QuYXNzaWduKHtwYXNzVGhyb3VnaDpPYmplY3Qua2V5cyhoaWRkZW5EZWZhdWx0cyl9LHQpKX1mdW5jdGlvbiBnZXRQbHVnaW4oZSl7dmFyIHQ9ZS5hc3RGb3JtYXQ7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJnZXRQbHVnaW4oKSByZXF1aXJlcyBhc3RGb3JtYXQgdG8gYmUgc2V0Iik7dmFyIG49ZS5wbHVnaW5zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJpbnRlcnMmJmUucHJpbnRlcnNbdF19KTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGx1Z2luIGZvciBBU1QgZm9ybWF0IFwiIi5jb25jYXQodCwnIicpKTtyZXR1cm4gbn1mdW5jdGlvbiBpbmZlclBhcnNlcihlLHQpe3ZhciBuPXBhdGgkOC5leHRuYW1lKGUpLHI9cGF0aCQ4LmJhc2VuYW1lKGUpLnRvTG93ZXJDYXNlKCksaT1nZXRTdXBwb3J0SW5mbyQxKG51bGwse3BsdWdpbnM6dH0pLmxhbmd1YWdlcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS5zaW5jZSYmKGUuZXh0ZW5zaW9ucyYmZS5leHRlbnNpb25zLmluZGV4T2Yobik+LTF8fGUuZmlsZW5hbWVzJiZlLmZpbGVuYW1lcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PT1yfSkpfSk7cmV0dXJuIGkmJmkucGFyc2Vyc1swXX1mdW5jdGlvbiBtYXNzYWdlQVNUKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbWFzc2FnZUFTVChlLHQsbil9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtpZighZXx8Im9iamVjdCIhPT1fdHlwZW9mKGUpKXJldHVybiBlO2Zvcih2YXIgcj17fSxpPU9iamVjdC5rZXlzKGUpLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9aVtvXTsiZnVuY3Rpb24iIT09dHlwZW9mIGVbYV0mJihyW2FdPW1hc3NhZ2VBU1QoZVthXSx0LGUpKX1pZih0LnByaW50ZXIubWFzc2FnZUFzdE5vZGUpe3ZhciBzPXQucHJpbnRlci5tYXNzYWdlQXN0Tm9kZShlLHIsbik7aWYobnVsbD09PXMpcmV0dXJuO2lmKHMpcmV0dXJuIHN9cmV0dXJuIHJ9ZnVuY3Rpb24gYXNzZXJ0RG9jKGUpe2lmKCJzdHJpbmciIT09dHlwZW9mIGUmJihudWxsPT1lfHwic3RyaW5nIiE9PXR5cGVvZiBlLnR5cGUpKXRocm93IG5ldyBFcnJvcigiVmFsdWUgIitKU09OLnN0cmluZ2lmeShlKSsiIGlzIG5vdCBhIHZhbGlkIGRvY3VtZW50Iil9ZnVuY3Rpb24gY29uY2F0JDEoZSl7cmV0dXJuInByb2R1Y3Rpb24iIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmUuZm9yRWFjaChhc3NlcnREb2MpLHt0eXBlOiJjb25jYXQiLHBhcnRzOmV9fWZ1bmN0aW9uIGluZGVudCQxKGUpe3JldHVybiJwcm9kdWN0aW9uIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZhc3NlcnREb2MoZSkse3R5cGU6ImluZGVudCIsY29udGVudHM6ZX19ZnVuY3Rpb24gYWxpZ24oZSx0KXtyZXR1cm4icHJvZHVjdGlvbiIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmYXNzZXJ0RG9jKHQpLHt0eXBlOiJhbGlnbiIsY29udGVudHM6dCxuOmV9fWZ1bmN0aW9uIGdyb3VwKGUsdCl7cmV0dXJuIHQ9dHx8e30sInByb2R1Y3Rpb24iIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmFzc2VydERvYyhlKSx7dHlwZToiZ3JvdXAiLGNvbnRlbnRzOmUsYnJlYWs6ISF0LnNob3VsZEJyZWFrLGV4cGFuZGVkU3RhdGVzOnQuZXhwYW5kZWRTdGF0ZXN9fWZ1bmN0aW9uIGRlZGVudFRvUm9vdChlKXtyZXR1cm4gYWxpZ24oLTEvMCxlKX1mdW5jdGlvbiBtYXJrQXNSb290KGUpe3JldHVybiBhbGlnbih7dHlwZToicm9vdCJ9LGUpfWZ1bmN0aW9uIGRlZGVudCQxKGUpe3JldHVybiBhbGlnbigtMSxlKX1mdW5jdGlvbiBjb25kaXRpb25hbEdyb3VwKGUsdCl7cmV0dXJuIGdyb3VwKGVbMF0sT2JqZWN0LmFzc2lnbih0fHx7fSx7ZXhwYW5kZWRTdGF0ZXM6ZX0pKX1mdW5jdGlvbiBmaWxsKGUpe3JldHVybiJwcm9kdWN0aW9uIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZlLmZvckVhY2goYXNzZXJ0RG9jKSx7dHlwZToiZmlsbCIscGFydHM6ZX19ZnVuY3Rpb24gaWZCcmVhayhlLHQpe3JldHVybiJwcm9kdWN0aW9uIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYoZSYmYXNzZXJ0RG9jKGUpLHQmJmFzc2VydERvYyh0KSkse3R5cGU6ImlmLWJyZWFrIixicmVha0NvbnRlbnRzOmUsZmxhdENvbnRlbnRzOnR9fWZ1bmN0aW9uIGxpbmVTdWZmaXgkMShlKXtyZXR1cm4icHJvZHVjdGlvbiIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmYXNzZXJ0RG9jKGUpLHt0eXBlOiJsaW5lLXN1ZmZpeCIsY29udGVudHM6ZX19ZnVuY3Rpb24gam9pbiQxKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKykwIT09ciYmbi5wdXNoKGUpLG4ucHVzaCh0W3JdKTtyZXR1cm4gY29uY2F0JDEobil9ZnVuY3Rpb24gYWRkQWxpZ25tZW50VG9Eb2MoZSx0LG4pe3ZhciByPWU7aWYodD4wKXtmb3IodmFyIGk9MDtpPE1hdGguZmxvb3IodC9uKTsrK2kpcj1pbmRlbnQkMShyKTtyPWFsaWduKHQlbixyKSxyPWFsaWduKC0xLzAscil9cmV0dXJuIHJ9ZnVuY3Rpb24gZ2V0X3JlZ2V4KCl7cmV0dXJuIGNyZWF0ZV9yZWdleChjaGFyYWN0ZXJfcmFuZ2VzLmNvbmNhdChwdW5jdHVhdGlvbl9yYW5nZXMpKX1mdW5jdGlvbiBjcmVhdGVfcmVnZXgoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIlsiK2UubWFwKGdldF9icmFja2V0X2NvbnRlbnQpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSsiXSIsImciKX1mdW5jdGlvbiBnZXRfYnJhY2tldF9jb250ZW50KGUpe3JldHVybiBnZXRfZXNjYXBlZF91bmljb2RlKGVbMF0pKyItIitnZXRfZXNjYXBlZF91bmljb2RlKGVbMV0pfWZ1bmN0aW9uIGdldF9lc2NhcGVkX3VuaWNvZGUoZSl7cmV0dXJuIlxcdSIrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gaXNFeHBvcnREZWNsYXJhdGlvbihlKXtpZihlKXN3aXRjaChlLnR5cGUpe2Nhc2UiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIjpjYXNlIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiOmNhc2UiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIjpjYXNlIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iOmNhc2UiRXhwb3J0QWxsRGVjbGFyYXRpb24iOnJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGdldFBhcmVudEV4cG9ydERlY2xhcmF0aW9uKGUpe3ZhciB0PWUuZ2V0UGFyZW50Tm9kZSgpO3JldHVybiJkZWNsYXJhdGlvbiI9PT1lLmdldE5hbWUoKSYmaXNFeHBvcnREZWNsYXJhdGlvbih0KT90Om51bGx9ZnVuY3Rpb24gZ2V0UGVudWx0aW1hdGUoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZVtlLmxlbmd0aC0yXTpudWxsfWZ1bmN0aW9uIGdldExhc3QkMyhlKXtyZXR1cm4gZS5sZW5ndGg+MD9lW2UubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gc2tpcChlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPXImJnIuYmFja3dhcmRzO2lmKCExPT09bilyZXR1cm4hMTtmb3IodmFyIG89dC5sZW5ndGgsYT1uO2E+PTAmJmE8bzspe3ZhciBzPXQuY2hhckF0KGEpO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2lmKCFlLnRlc3QocykpcmV0dXJuIGF9ZWxzZSBpZigtMT09PWUuaW5kZXhPZihzKSlyZXR1cm4gYTtpP2EtLTphKyt9cmV0dXJuKC0xPT09YXx8YT09PW8pJiZhfX1mdW5jdGlvbiBza2lwSW5saW5lQ29tbWVudChlLHQpe2lmKCExPT09dClyZXR1cm4hMTtpZigiLyI9PT1lLmNoYXJBdCh0KSYmIioiPT09ZS5jaGFyQXQodCsxKSlmb3IodmFyIG49dCsyO248ZS5sZW5ndGg7KytuKWlmKCIqIj09PWUuY2hhckF0KG4pJiYiLyI9PT1lLmNoYXJBdChuKzEpKXJldHVybiBuKzI7cmV0dXJuIHR9ZnVuY3Rpb24gc2tpcFRyYWlsaW5nQ29tbWVudChlLHQpe3JldHVybiExIT09dCYmKCIvIj09PWUuY2hhckF0KHQpJiYiLyI9PT1lLmNoYXJBdCh0KzEpP3NraXBFdmVyeXRoaW5nQnV0TmV3TGluZShlLHQpOnQpfWZ1bmN0aW9uIHNraXBOZXdsaW5lJDEoZSx0LG4pe3ZhciByPW4mJm4uYmFja3dhcmRzO2lmKCExPT09dClyZXR1cm4hMTt2YXIgaT1lLmNoYXJBdCh0KTtpZihyKXtpZigiXHIiPT09ZS5jaGFyQXQodC0xKSYmIlxuIj09PWkpcmV0dXJuIHQtMjtpZigiXG4iPT09aXx8IlxyIj09PWl8fCJcdTIwMjgiPT09aXx8Ilx1MjAyOSI9PT1pKXJldHVybiB0LTF9ZWxzZXtpZigiXHIiPT09aSYmIlxuIj09PWUuY2hhckF0KHQrMSkpcmV0dXJuIHQrMjtpZigiXG4iPT09aXx8IlxyIj09PWl8fCJcdTIwMjgiPT09aXx8Ilx1MjAyOSI9PT1pKXJldHVybiB0KzF9cmV0dXJuIHR9ZnVuY3Rpb24gaGFzTmV3bGluZSQxKGUsdCxuKXtuPW58fHt9O3ZhciByPXNraXBTcGFjZXMoZSxuLmJhY2t3YXJkcz90LTE6dCxuKTtyZXR1cm4gciE9PXNraXBOZXdsaW5lJDEoZSxyLG4pfWZ1bmN0aW9uIGhhc05ld2xpbmVJblJhbmdlKGUsdCxuKXtmb3IodmFyIHI9dDtyPG47KytyKWlmKCJcbiI9PT1lLmNoYXJBdChyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpc1ByZXZpb3VzTGluZUVtcHR5JDEoZSx0LG4pe3ZhciByPW4odCktMTtyZXR1cm4gcj1za2lwU3BhY2VzKGUscix7YmFja3dhcmRzOiEwfSkscj1za2lwTmV3bGluZSQxKGUscix7YmFja3dhcmRzOiEwfSksKHI9c2tpcFNwYWNlcyhlLHIse2JhY2t3YXJkczohMH0pKSE9PXNraXBOZXdsaW5lJDEoZSxyLHtiYWNrd2FyZHM6ITB9KX1mdW5jdGlvbiBpc05leHRMaW5lRW1wdHlBZnRlckluZGV4KGUsdCl7Zm9yKHZhciBuPW51bGwscj10O3IhPT1uOyluPXIscj1za2lwVG9MaW5lRW5kKGUscikscj1za2lwSW5saW5lQ29tbWVudChlLHIpLHI9c2tpcFNwYWNlcyhlLHIpO3JldHVybiByPXNraXBUcmFpbGluZ0NvbW1lbnQoZSxyKSxyPXNraXBOZXdsaW5lJDEoZSxyKSxoYXNOZXdsaW5lJDEoZSxyKX1mdW5jdGlvbiBpc05leHRMaW5lRW1wdHkoZSx0LG4pe3JldHVybiBpc05leHRMaW5lRW1wdHlBZnRlckluZGV4KGUsbih0KSl9ZnVuY3Rpb24gZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlckluZGV4KGUsdCxuKXtmb3IodmFyIHI9bnVsbCxpPW4odCk7aSE9PXI7KXI9aSxpPXNraXBTcGFjZXMoZSxpKSxpPXNraXBJbmxpbmVDb21tZW50KGUsaSksaT1za2lwVHJhaWxpbmdDb21tZW50KGUsaSksaT1za2lwTmV3bGluZSQxKGUsaSk7cmV0dXJuIGl9ZnVuY3Rpb24gZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlcihlLHQsbil7cmV0dXJuIGUuY2hhckF0KGdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXJJbmRleChlLHQsbikpfWZ1bmN0aW9uIGhhc1NwYWNlcyhlLHQsbil7cmV0dXJuIG49bnx8e30sc2tpcFNwYWNlcyhlLG4uYmFja3dhcmRzP3QtMTp0LG4pIT09dH1mdW5jdGlvbiBzZXRMb2NTdGFydChlLHQpe2UucmFuZ2U/ZS5yYW5nZVswXT10OmUuc3RhcnQ9dH1mdW5jdGlvbiBzZXRMb2NFbmQoZSx0KXtlLnJhbmdlP2UucmFuZ2VbMV09dDplLmVuZD10fWZ1bmN0aW9uIGdldFByZWNlZGVuY2UoZSl7cmV0dXJuIFBSRUNFREVOQ0VbZV19ZnVuY3Rpb24gc2hvdWxkRmxhdHRlbihlLHQpe3JldHVybiBnZXRQcmVjZWRlbmNlKHQpIT09Z2V0UHJlY2VkZW5jZShlKT8iJSI9PT10JiYhYWRkaXRpdmVPcGVyYXRvcnNbZV06IioqIiE9PWUmJigoIWVxdWFsaXR5T3BlcmF0b3JzW2VdfHwhZXF1YWxpdHlPcGVyYXRvcnNbdF0pJiYoISgiJSI9PT10JiZtdWx0aXBsaWNhdGl2ZU9wZXJhdG9yc1tlXXx8IiUiPT09ZSYmbXVsdGlwbGljYXRpdmVPcGVyYXRvcnNbdF0pJiYoKHQ9PT1lfHwhbXVsdGlwbGljYXRpdmVPcGVyYXRvcnNbdF18fCFtdWx0aXBsaWNhdGl2ZU9wZXJhdG9yc1tlXSkmJighYml0c2hpZnRPcGVyYXRvcnNbZV18fCFiaXRzaGlmdE9wZXJhdG9yc1t0XSkpKSl9ZnVuY3Rpb24gaXNCaXR3aXNlT3BlcmF0b3IoZSl7cmV0dXJuISFiaXRzaGlmdE9wZXJhdG9yc1tlXXx8InwiPT09ZXx8Il4iPT09ZXx8IiYiPT09ZX1mdW5jdGlvbiBzdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbihlLHQpe3N3aXRjaChlPWdldExlZnRNb3N0KGUpLGUudHlwZSl7Y2FzZSJPYmplY3RQYXR0ZXJuIjpyZXR1cm4hdDtjYXNlIkZ1bmN0aW9uRXhwcmVzc2lvbiI6Y2FzZSJDbGFzc0V4cHJlc3Npb24iOmNhc2UiRG9FeHByZXNzaW9uIjpyZXR1cm4gdDtjYXNlIk9iamVjdEV4cHJlc3Npb24iOnJldHVybiEwO2Nhc2UiTWVtYmVyRXhwcmVzc2lvbiI6cmV0dXJuIHN0YXJ0c1dpdGhOb0xvb2thaGVhZFRva2VuKGUub2JqZWN0LHQpO2Nhc2UiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIjpyZXR1cm4iRnVuY3Rpb25FeHByZXNzaW9uIiE9PWUudGFnLnR5cGUmJnN0YXJ0c1dpdGhOb0xvb2thaGVhZFRva2VuKGUudGFnLHQpO2Nhc2UiQ2FsbEV4cHJlc3Npb24iOnJldHVybiJGdW5jdGlvbkV4cHJlc3Npb24iIT09ZS5jYWxsZWUudHlwZSYmc3RhcnRzV2l0aE5vTG9va2FoZWFkVG9rZW4oZS5jYWxsZWUsdCk7Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnJldHVybiBzdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbihlLnRlc3QsdCk7Y2FzZSJVcGRhdGVFeHByZXNzaW9uIjpyZXR1cm4hZS5wcmVmaXgmJnN0YXJ0c1dpdGhOb0xvb2thaGVhZFRva2VuKGUuYXJndW1lbnQsdCk7Y2FzZSJCaW5kRXhwcmVzc2lvbiI6cmV0dXJuIGUub2JqZWN0JiZzdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbihlLm9iamVjdCx0KTtjYXNlIlNlcXVlbmNlRXhwcmVzc2lvbiI6cmV0dXJuIHN0YXJ0c1dpdGhOb0xvb2thaGVhZFRva2VuKGUuZXhwcmVzc2lvbnNbMF0sdCk7Y2FzZSJUU0FzRXhwcmVzc2lvbiI6cmV0dXJuIHN0YXJ0c1dpdGhOb0xvb2thaGVhZFRva2VuKGUuZXhwcmVzc2lvbix0KTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBnZXRMZWZ0TW9zdChlKXtyZXR1cm4gZS5sZWZ0P2dldExlZnRNb3N0KGUubGVmdCk6ZX1mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaXplKGUsdCxuKXtuPW58fDA7Zm9yKHZhciByPTAsaT1uO2k8ZS5sZW5ndGg7KytpKSJcdCI9PT1lW2ldP3I9cit0LXIldDpyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gZ2V0SW5kZW50U2l6ZShlLHQpe3ZhciBuPWUubGFzdEluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1uPzA6Z2V0QWxpZ25tZW50U2l6ZShlLnNsaWNlKG4rMSkubWF0Y2goL15bIFx0XSovKVswXSx0KX1mdW5jdGlvbiBwcmludFN0cmluZyhlLHQsbil7dmFyIHI9ZS5zbGljZSgxLC0xKSxpPXtxdW90ZTonIicscmVnZXg6LyIvZ30sbz17cXVvdGU6IiciLHJlZ2V4Oi8nL2d9LGE9dC5zaW5nbGVRdW90ZT9vOmkscz1hPT09bz9pOm8sdT0hMSxjPSExO2lmKHIuaW5jbHVkZXMoYS5xdW90ZSl8fHIuaW5jbHVkZXMocy5xdW90ZSkpe3U9KHIubWF0Y2goYS5yZWdleCl8fFtdKS5sZW5ndGg+KHIubWF0Y2gocy5yZWdleCl8fFtdKS5sZW5ndGh9ZWxzZSBjPSEwO3ZhciBsPSJqc29uIj09PXQucGFyc2VyP2kucXVvdGU6dT9zLnF1b3RlOmEucXVvdGU7cmV0dXJuIG4/Yz9sK3IrbDplOm1ha2VTdHJpbmcocixsLCEoImNzcyI9PT10LnBhcnNlcnx8Imxlc3MiPT09dC5wYXJzZXJ8fCJzY3NzIj09PXQucGFyc2VyKSl9ZnVuY3Rpb24gbWFrZVN0cmluZyhlLHQsbil7dmFyIHI9JyInPT09dD8iJyI6JyInLGk9L1xcKFtcc1xTXSl8KFsnIl0pL2csbz1lLnJlcGxhY2UoaSxmdW5jdGlvbihlLGksbyl7cmV0dXJuIGk9PT1yP2k6bz09PXQ/IlxcIitvOm98fChuJiYvXlteXFxucnZ0YmZ1eFxyXG5cdTIwMjhcdTIwMjkiJzAtN10kLy50ZXN0KGkpP2k6IlxcIitpKX0pO3JldHVybiB0K28rdH1mdW5jdGlvbiBwcmludE51bWJlcihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL14oWystXT9bXGQuXStlKSg/OlwrfCgtKSk/MCooXGQpLywiJDEkMiQzIikucmVwbGFjZSgvXihbKy1dP1tcZC5dKyllWystXT8wKyQvLCIkMSIpLnJlcGxhY2UoL14oWystXSk/XC4vLCIkMTAuIikucmVwbGFjZSgvKFwuXGQrPykwKyg/PWV8JCkvLCIkMSIpLnJlcGxhY2UoL1wuKD89ZXwkKS8sIiIpfWZ1bmN0aW9uIGdldE1heENvbnRpbnVvdXNDb3VudChlLHQpe3ZhciBuPWUubWF0Y2gobmV3IFJlZ0V4cCgiKCIuY29uY2F0KGVzY2FwZVN0cmluZ1JlZ2V4cCh0KSwiKSsiKSwiZyIpKTtyZXR1cm4gbnVsbD09PW4/MDpuLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBNYXRoLm1heChlLG4ubGVuZ3RoL3QubGVuZ3RoKX0sMCl9ZnVuY3Rpb24gc3BsaXRUZXh0KGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1nZXRMYXN0JDMoYSk7dCYmIndvcmQiPT09dC50eXBlJiYodC5raW5kPT09ciYmZS5raW5kPT09aSYmIXQuaGFzVHJhaWxpbmdQdW5jdHVhdGlvbnx8dC5raW5kPT09aSYmZS5raW5kPT09ciYmIWUuaGFzTGVhZGluZ1B1bmN0dWF0aW9uP2EucHVzaCh7dHlwZToid2hpdGVzcGFjZSIsdmFsdWU6IiAifSk6ZnVuY3Rpb24obixyKXtyZXR1cm4gdC5raW5kPT09biYmZS5raW5kPT09cnx8dC5raW5kPT09ciYmZS5raW5kPT09bn0ocixvKXx8W3QudmFsdWUsZS52YWx1ZV0uc29tZShmdW5jdGlvbihlKXtyZXR1cm4vXHUzMDAwLy50ZXN0KGUpfSl8fGEucHVzaCh7dHlwZToid2hpdGVzcGFjZSIsdmFsdWU6IiJ9KSksYS5wdXNoKGUpfXZhciByPSJub24tY2prIixpPSJjamstY2hhcmFjdGVyIixvPSJjamstcHVuY3R1YXRpb24iLGE9W107cmV0dXJuKCJwcmVzZXJ2ZSI9PT10LnByb3NlV3JhcD9lOmUucmVwbGFjZShuZXcgUmVnRXhwKCIoIi5jb25jYXQoY2prUGF0dGVybiwiKVxuKCIpLmNvbmNhdChjamtQYXR0ZXJuLCIpIiksImciKSwiJDEkMiIpKS5zcGxpdCgvKFsgXHRcbl0rKS8pLmZvckVhY2goZnVuY3Rpb24oZSx0LHMpe2lmKHQlMj09PTEpcmV0dXJuIHZvaWQgYS5wdXNoKHt0eXBlOiJ3aGl0ZXNwYWNlIix2YWx1ZTovXG4vLnRlc3QoZSk/IlxuIjoiICJ9KTsoMCE9PXQmJnQhPT1zLmxlbmd0aC0xfHwiIiE9PWUpJiZlLnNwbGl0KG5ldyBSZWdFeHAoIigiLmNvbmNhdChjamtQYXR0ZXJuLCIpIikpKS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCxhKXtpZigwIT09dCYmdCE9PWEubGVuZ3RoLTF8fCIiIT09ZSlyZXR1cm4gdCUyPT09MD92b2lkKCIiIT09ZSYmbih7dHlwZToid29yZCIsdmFsdWU6ZSxraW5kOnIsaGFzTGVhZGluZ1B1bmN0dWF0aW9uOnB1bmN0dWF0aW9uUmVnZXgudGVzdChlWzBdKSxoYXNUcmFpbGluZ1B1bmN0dWF0aW9uOnB1bmN0dWF0aW9uUmVnZXgudGVzdChnZXRMYXN0JDMoZSkpfSkpOnZvaWQgbihwdW5jdHVhdGlvblJlZ2V4LnRlc3QoZSk/e3R5cGU6IndvcmQiLHZhbHVlOmUsa2luZDpvLGhhc0xlYWRpbmdQdW5jdHVhdGlvbjohMCxoYXNUcmFpbGluZ1B1bmN0dWF0aW9uOiEwfTp7dHlwZToid29yZCIsdmFsdWU6ZSxraW5kOmksaGFzTGVhZGluZ1B1bmN0dWF0aW9uOiExLGhhc1RyYWlsaW5nUHVuY3R1YXRpb246ITF9KX0pfSksYX1mdW5jdGlvbiBnZXRTdHJpbmdXaWR0aChlKXtyZXR1cm4gZT9zdHJpbmdXaWR0aChlLnJlcGxhY2UoZW1vamlSZWdleCwiICAiKSk6MH1mdW5jdGlvbiBoYXNJZ25vcmVDb21tZW50KGUpe3JldHVybiBoYXNOb2RlSWdub3JlQ29tbWVudChlLmdldFZhbHVlKCkpfWZ1bmN0aW9uIGhhc05vZGVJZ25vcmVDb21tZW50KGUpe3JldHVybiBlJiZlLmNvbW1lbnRzJiZlLmNvbW1lbnRzLmxlbmd0aD4wJiZlLmNvbW1lbnRzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInByZXR0aWVyLWlnbm9yZSI9PT1lLnZhbHVlLnRyaW0oKX0pfWZ1bmN0aW9uIGFkZENvbW1lbnRIZWxwZXIoZSx0KXsoZS5jb21tZW50c3x8KGUuY29tbWVudHM9W10pKS5wdXNoKHQpLHQucHJpbnRlZD0hMSwiSlNYVGV4dCI9PT1lLnR5cGUmJih0LnByaW50ZWQ9ITApfWZ1bmN0aW9uIGFkZExlYWRpbmdDb21tZW50JDEoZSx0KXt0LmxlYWRpbmc9ITAsdC50cmFpbGluZz0hMSxhZGRDb21tZW50SGVscGVyKGUsdCl9ZnVuY3Rpb24gYWRkRGFuZ2xpbmdDb21tZW50JDEoZSx0KXt0LmxlYWRpbmc9ITEsdC50cmFpbGluZz0hMSxhZGRDb21tZW50SGVscGVyKGUsdCl9ZnVuY3Rpb24gYWRkVHJhaWxpbmdDb21tZW50JDEoZSx0KXt0LmxlYWRpbmc9ITEsdC50cmFpbGluZz0hMCxhZGRDb21tZW50SGVscGVyKGUsdCl9ZnVuY3Rpb24gcm9vdEluZGVudCgpe3JldHVybnt2YWx1ZToiIixsZW5ndGg6MCxxdWV1ZTpbXX19ZnVuY3Rpb24gbWFrZUluZGVudChlLHQpe3JldHVybiBnZW5lcmF0ZUluZChlLHt0eXBlOiJpbmRlbnQifSx0KX1mdW5jdGlvbiBtYWtlQWxpZ24oZSx0LG4pe3JldHVybiB0PT09LTEvMD9lLnJvb3R8fHJvb3RJbmRlbnQoKTp0PDA/Z2VuZXJhdGVJbmQoZSx7dHlwZToiZGVkZW50In0sbik6dD8icm9vdCI9PT10LnR5cGU/T2JqZWN0LmFzc2lnbih7fSxlLHtyb290OmV9KToic3RyaW5nIj09PXR5cGVvZiB0P2dlbmVyYXRlSW5kKGUse3R5cGU6InN0cmluZ0FsaWduIixuOnR9LG4pOmdlbmVyYXRlSW5kKGUse3R5cGU6Im51bWJlckFsaWduIixuOnR9LG4pOmV9ZnVuY3Rpb24gZ2VuZXJhdGVJbmQoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7bCs9Ilx0Ii5yZXBlYXQoZSkscCs9bi50YWJXaWR0aCplfWZ1bmN0aW9uIGkoZSl7bCs9IiAiLnJlcGVhdChlKSxwKz1lfWZ1bmN0aW9uIG8oKXtuLnVzZVRhYnM/YSgpOnMoKX1mdW5jdGlvbiBhKCl7Zj4wJiZyKGYpLHUoKX1mdW5jdGlvbiBzKCl7ZD4wJiZpKGQpLHUoKX1mdW5jdGlvbiB1KCl7Zj0wLGQ9MH12YXIgYz0iZGVkZW50Ij09PXQudHlwZT9lLnF1ZXVlLnNsaWNlKDAsLTEpOmUucXVldWUuY29uY2F0KHQpLGw9IiIscD0wLGY9MCxkPTAsaD0hMCxtPSExLGc9dm9pZCAwO3RyeXtmb3IodmFyIHksdj1jW1N5bWJvbC5pdGVyYXRvcl0oKTshKGg9KHk9di5uZXh0KCkpLmRvbmUpO2g9ITApe3ZhciBiPXkudmFsdWU7c3dpdGNoKGIudHlwZSl7Y2FzZSJpbmRlbnQiOm8oKSxuLnVzZVRhYnM/cigxKTppKG4udGFiV2lkdGgpO2JyZWFrO2Nhc2Uic3RyaW5nQWxpZ24iOm8oKSxsKz1iLm4scCs9Yi5uLmxlbmd0aDticmVhaztjYXNlIm51bWJlckFsaWduIjpmKz0xLGQrPWIubjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlICciLmNvbmNhdChiLnR5cGUsIiciKSl9fX1jYXRjaChlKXttPSEwLGc9ZX1maW5hbGx5e3RyeXtofHxudWxsPT12LnJldHVybnx8di5yZXR1cm4oKX1maW5hbGx5e2lmKG0pdGhyb3cgZ319cmV0dXJuIHMoKSxPYmplY3QuYXNzaWduKHt9LGUse3ZhbHVlOmwsbGVuZ3RoOnAscXVldWU6Y30pfWZ1bmN0aW9uIGZpdHMoZSx0LG4scixpKXtmb3IodmFyIG89dC5sZW5ndGgsYT1bZV07bj49MDspaWYoMCE9PWEubGVuZ3RoKXt2YXIgcz1hLnBvcCgpLHU9c1swXSxjPXNbMV0sbD1zWzJdO2lmKCJzdHJpbmciPT09dHlwZW9mIGwpbi09dXRpbC5nZXRTdHJpbmdXaWR0aChsKTtlbHNlIHN3aXRjaChsLnR5cGUpe2Nhc2UiY29uY2F0Ijpmb3IodmFyIHA9bC5wYXJ0cy5sZW5ndGgtMTtwPj0wO3AtLSlhLnB1c2goW3UsYyxsLnBhcnRzW3BdXSk7YnJlYWs7Y2FzZSJpbmRlbnQiOmEucHVzaChbbWFrZUluZGVudCh1LHIpLGMsbC5jb250ZW50c10pO2JyZWFrO2Nhc2UiYWxpZ24iOmEucHVzaChbbWFrZUFsaWduKHUsbC5uLHIpLGMsbC5jb250ZW50c10pO2JyZWFrO2Nhc2UiZ3JvdXAiOmlmKGkmJmwuYnJlYWspcmV0dXJuITE7YS5wdXNoKFt1LGwuYnJlYWs/TU9ERV9CUkVBSzpjLGwuY29udGVudHNdKTticmVhaztjYXNlImZpbGwiOmZvcih2YXIgZj1sLnBhcnRzLmxlbmd0aC0xO2Y+PTA7Zi0tKWEucHVzaChbdSxjLGwucGFydHNbZl1dKTticmVhaztjYXNlImlmLWJyZWFrIjpjPT09TU9ERV9CUkVBSyYmbC5icmVha0NvbnRlbnRzJiZhLnB1c2goW3UsYyxsLmJyZWFrQ29udGVudHNdKSxjPT09TU9ERV9GTEFUJiZsLmZsYXRDb250ZW50cyYmYS5wdXNoKFt1LGMsbC5mbGF0Q29udGVudHNdKTticmVhaztjYXNlImxpbmUiOnN3aXRjaChjKXtjYXNlIE1PREVfRkxBVDppZighbC5oYXJkKXtsLnNvZnR8fChuLT0xKTticmVha31yZXR1cm4hMDtjYXNlIE1PREVfQlJFQUs6cmV0dXJuITB9fX1lbHNle2lmKDA9PT1vKXJldHVybiEwO2EucHVzaCh0W28tMV0pLG8tLX1yZXR1cm4hMX1mdW5jdGlvbiBwcmludERvY1RvU3RyaW5nKGUsdCl7Zm9yKHZhciBuPXQucHJpbnRXaWR0aCxyPXQubmV3TGluZXx8IlxuIixpPTAsbz1bW3Jvb3RJbmRlbnQoKSxNT0RFX0JSRUFLLGVdXSxhPVtdLHM9ITEsdT1bXTswIT09by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLGw9Y1swXSxwPWNbMV0sZj1jWzJdO2lmKCJzdHJpbmciPT09dHlwZW9mIGYpYS5wdXNoKGYpLGkrPXV0aWwuZ2V0U3RyaW5nV2lkdGgoZik7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImN1cnNvciI6YS5wdXNoKGN1cnNvciQyLnBsYWNlaG9sZGVyKTticmVhaztjYXNlImNvbmNhdCI6Zm9yKHZhciBkPWYucGFydHMubGVuZ3RoLTE7ZD49MDtkLS0pby5wdXNoKFtsLHAsZi5wYXJ0c1tkXV0pO2JyZWFrO2Nhc2UiaW5kZW50IjpvLnB1c2goW21ha2VJbmRlbnQobCx0KSxwLGYuY29udGVudHNdKTticmVhaztjYXNlImFsaWduIjpvLnB1c2goW21ha2VBbGlnbihsLGYubix0KSxwLGYuY29udGVudHNdKTticmVhaztjYXNlImdyb3VwIjpzd2l0Y2gocCl7Y2FzZSBNT0RFX0ZMQVQ6aWYoIXMpe28ucHVzaChbbCxmLmJyZWFrP01PREVfQlJFQUs6TU9ERV9GTEFULGYuY29udGVudHNdKTticmVha31jYXNlIE1PREVfQlJFQUs6cz0hMTt2YXIgaD1bbCxNT0RFX0ZMQVQsZi5jb250ZW50c10sbT1uLWk7aWYoIWYuYnJlYWsmJmZpdHMoaCxvLG0sdCkpby5wdXNoKGgpO2Vsc2UgaWYoZi5leHBhbmRlZFN0YXRlcyl7dmFyIGc9Zi5leHBhbmRlZFN0YXRlc1tmLmV4cGFuZGVkU3RhdGVzLmxlbmd0aC0xXTtpZihmLmJyZWFrKXtvLnB1c2goW2wsTU9ERV9CUkVBSyxnXSk7YnJlYWt9Zm9yKHZhciB5PTE7eTxmLmV4cGFuZGVkU3RhdGVzLmxlbmd0aCsxO3krKyl7aWYoeT49Zi5leHBhbmRlZFN0YXRlcy5sZW5ndGgpe28ucHVzaChbbCxNT0RFX0JSRUFLLGddKTticmVha312YXIgdj1mLmV4cGFuZGVkU3RhdGVzW3ldLGI9W2wsTU9ERV9GTEFULHZdO2lmKGZpdHMoYixvLG0sdCkpe28ucHVzaChiKTticmVha319fWVsc2Ugby5wdXNoKFtsLE1PREVfQlJFQUssZi5jb250ZW50c10pfWJyZWFrO2Nhc2UiZmlsbCI6dmFyIHg9bi1pLEM9Zi5wYXJ0cztpZigwPT09Qy5sZW5ndGgpYnJlYWs7dmFyIEU9Q1swXSxEPVtsLE1PREVfRkxBVCxFXSx3PVtsLE1PREVfQlJFQUssRV0sUz1maXRzKEQsW10seCx0LCEwKTtpZigxPT09Qy5sZW5ndGgpe1M/by5wdXNoKEQpOm8ucHVzaCh3KTticmVha312YXIgaz1DWzFdLEE9W2wsTU9ERV9GTEFULGtdLF89W2wsTU9ERV9CUkVBSyxrXTtpZigyPT09Qy5sZW5ndGgpe1M/KG8ucHVzaChBKSxvLnB1c2goRCkpOihvLnB1c2goXyksby5wdXNoKHcpKTticmVha31DLnNwbGljZSgwLDIpO3ZhciBUPVtsLHAsZmlsbCQxKEMpXSxPPUNbMF07Zml0cyhbbCxNT0RFX0ZMQVQsY29uY2F0JDIoW0UsayxPXSldLFtdLHgsdCwhMCk/KG8ucHVzaChUKSxvLnB1c2goQSksby5wdXNoKEQpKTpTPyhvLnB1c2goVCksby5wdXNoKF8pLG8ucHVzaChEKSk6KG8ucHVzaChUKSxvLnB1c2goXyksby5wdXNoKHcpKTticmVhaztjYXNlImlmLWJyZWFrIjpwPT09TU9ERV9CUkVBSyYmZi5icmVha0NvbnRlbnRzJiZvLnB1c2goW2wscCxmLmJyZWFrQ29udGVudHNdKSxwPT09TU9ERV9GTEFUJiZmLmZsYXRDb250ZW50cyYmby5wdXNoKFtsLHAsZi5mbGF0Q29udGVudHNdKTticmVhaztjYXNlImxpbmUtc3VmZml4Ijp1LnB1c2goW2wscCxmLmNvbnRlbnRzXSk7YnJlYWs7Y2FzZSJsaW5lLXN1ZmZpeC1ib3VuZGFyeSI6dS5sZW5ndGg+MCYmby5wdXNoKFtsLHAse3R5cGU6ImxpbmUiLGhhcmQ6ITB9XSk7YnJlYWs7Y2FzZSJsaW5lIjpzd2l0Y2gocCl7Y2FzZSBNT0RFX0ZMQVQ6aWYoIWYuaGFyZCl7Zi5zb2Z0fHwoYS5wdXNoKCIgIiksaSs9MSk7YnJlYWt9cz0hMDtjYXNlIE1PREVfQlJFQUs6aWYodS5sZW5ndGgpe28ucHVzaChbbCxwLGZdKSxbXS5wdXNoLmFwcGx5KG8sdS5yZXZlcnNlKCkpLHU9W107YnJlYWt9aWYoZi5saXRlcmFsKWwucm9vdD8oYS5wdXNoKHIsbC5yb290LnZhbHVlKSxpPWwucm9vdC5sZW5ndGgpOihhLnB1c2gociksaT0wKTtlbHNle2lmKGEubGVuZ3RoPjApe2Zvcig7YS5sZW5ndGg+MCYmInN0cmluZyI9PT10eXBlb2YgYVthLmxlbmd0aC0xXSYmYVthLmxlbmd0aC0xXS5tYXRjaCgvXlteXFNcbl0qJC8pOylhLnBvcCgpOyFhLmxlbmd0aHx8InN0cmluZyIhPT10eXBlb2YgYVthLmxlbmd0aC0xXXx8Im1hcmtkb3duIj09PXQucGFyc2VyJiYvXFMgezJ9JC8udGVzdChhW2EubGVuZ3RoLTFdKXx8KGFbYS5sZW5ndGgtMV09YVthLmxlbmd0aC0xXS5yZXBsYWNlKC9bXlxTXG5dKiQvLCIiKSl9YS5wdXNoKHIrbC52YWx1ZSksaT1sLmxlbmd0aH19fX12YXIgRj1hLmluZGV4T2YoY3Vyc29yJDIucGxhY2Vob2xkZXIpO2lmKC0xIT09Ril7dmFyIE49YS5pbmRleE9mKGN1cnNvciQyLnBsYWNlaG9sZGVyLEYrMSksST1hLnNsaWNlKDAsRikuam9pbigiIiksTD1hLnNsaWNlKEYrMSxOKS5qb2luKCIiKTtyZXR1cm57Zm9ybWF0dGVkOkkrTCthLnNsaWNlKE4rMSkuam9pbigiIiksY3Vyc29yTm9kZVN0YXJ0OkkubGVuZ3RoLGN1cnNvck5vZGVUZXh0Okx9fXJldHVybntmb3JtYXR0ZWQ6YS5qb2luKCIiKX19ZnVuY3Rpb24gdHJhdmVyc2VEb2MoZSx0LG4scil7ZnVuY3Rpb24gaShlKXt2YXIgbz0hMDtpZih0JiYhMT09PXQoZSkmJihvPSExKSxvKWlmKCJjb25jYXQiPT09ZS50eXBlfHwiZmlsbCI9PT1lLnR5cGUpZm9yKHZhciBhPTA7YTxlLnBhcnRzLmxlbmd0aDthKyspaShlLnBhcnRzW2FdKTtlbHNlImlmLWJyZWFrIj09PWUudHlwZT8oZS5icmVha0NvbnRlbnRzJiZpKGUuYnJlYWtDb250ZW50cyksZS5mbGF0Q29udGVudHMmJmkoZS5mbGF0Q29udGVudHMpKToiZ3JvdXAiPT09ZS50eXBlJiZlLmV4cGFuZGVkU3RhdGVzP3I/ZS5leHBhbmRlZFN0YXRlcy5mb3JFYWNoKGkpOmkoZS5jb250ZW50cyk6ZS5jb250ZW50cyYmaShlLmNvbnRlbnRzKTtuJiZuKGUpfWkoZSl9ZnVuY3Rpb24gbWFwRG9jKGUsdCl7aWYoImNvbmNhdCI9PT1lLnR5cGV8fCJmaWxsIj09PWUudHlwZSl7dmFyIG49ZS5wYXJ0cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG1hcERvYyhlLHQpfSk7cmV0dXJuIHQoT2JqZWN0LmFzc2lnbih7fSxlLHtwYXJ0czpufSkpfWlmKCJpZi1icmVhayI9PT1lLnR5cGUpe3ZhciByPWUuYnJlYWtDb250ZW50cyYmbWFwRG9jKGUuYnJlYWtDb250ZW50cyx0KSxpPWUuZmxhdENvbnRlbnRzJiZtYXBEb2MoZS5mbGF0Q29udGVudHMsdCk7cmV0dXJuIHQoT2JqZWN0LmFzc2lnbih7fSxlLHticmVha0NvbnRlbnRzOnIsZmxhdENvbnRlbnRzOml9KSl9aWYoZS5jb250ZW50cyl7dmFyIG89bWFwRG9jKGUuY29udGVudHMsdCk7cmV0dXJuIHQoT2JqZWN0LmFzc2lnbih7fSxlLHtjb250ZW50czpvfSkpfXJldHVybiB0KGUpfWZ1bmN0aW9uIGZpbmRJbkRvYyhlLHQsbil7dmFyIHI9bixpPSExO3JldHVybiB0cmF2ZXJzZURvYyhlLGZ1bmN0aW9uKGUpe3ZhciBuPXQoZSk7aWYodm9pZCAwIT09biYmKGk9ITAscj1uKSxpKXJldHVybiExfSkscn1mdW5jdGlvbiBpc0VtcHR5KGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGUmJjA9PT1lLmxlbmd0aH1mdW5jdGlvbiBpc0xpbmVOZXh0KGUpe3JldHVybiBmaW5kSW5Eb2MoZSxmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9PXR5cGVvZiBlJiYoImxpbmUiPT09ZS50eXBlfHx2b2lkIDApfSwhMSl9ZnVuY3Rpb24gd2lsbEJyZWFrKGUpe3JldHVybiBmaW5kSW5Eb2MoZSxmdW5jdGlvbihlKXtyZXR1cm4hKCJncm91cCIhPT1lLnR5cGV8fCFlLmJyZWFrKXx8KCEoImxpbmUiIT09ZS50eXBlfHwhZS5oYXJkKXx8KCJicmVhay1wYXJlbnQiPT09ZS50eXBlfHx2b2lkIDApKX0sITEpfWZ1bmN0aW9uIGJyZWFrUGFyZW50R3JvdXAoZSl7aWYoZS5sZW5ndGg+MCl7dmFyIHQ9ZVtlLmxlbmd0aC0xXTt0LmV4cGFuZGVkU3RhdGVzfHwodC5icmVhaz0hMCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcHJvcGFnYXRlQnJlYWtzKGUpe3ZhciB0PW5ldyBNYXAsbj1bXTt0cmF2ZXJzZURvYyhlLGZ1bmN0aW9uKGUpe2lmKCJicmVhay1wYXJlbnQiPT09ZS50eXBlJiZicmVha1BhcmVudEdyb3VwKG4pLCJncm91cCI9PT1lLnR5cGUpe2lmKG4ucHVzaChlKSx0LmhhcyhlKSlyZXR1cm4hMTt0LnNldChlLCEwKX19LGZ1bmN0aW9uKGUpe2lmKCJncm91cCI9PT1lLnR5cGUpe24ucG9wKCkuYnJlYWsmJmJyZWFrUGFyZW50R3JvdXAobil9fSwhMCl9ZnVuY3Rpb24gcmVtb3ZlTGluZXMoZSl7cmV0dXJuIG1hcERvYyhlLGZ1bmN0aW9uKGUpe3JldHVybiJsaW5lIiE9PWUudHlwZXx8ZS5oYXJkPyJpZi1icmVhayI9PT1lLnR5cGU/ZS5mbGF0Q29udGVudHN8fCIiOmU6ZS5zb2Z0PyIiOiIgIn0pfWZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdIYXJkbGluZShlKXtyZXR1cm4iY29uY2F0Ij09PWUudHlwZSYmMj09PWUucGFydHMubGVuZ3RoJiYiY29uY2F0Ij09PWUucGFydHNbMV0udHlwZSYmMj09PWUucGFydHNbMV0ucGFydHMubGVuZ3RoJiZlLnBhcnRzWzFdLnBhcnRzWzBdLmhhcmQmJiJicmVhay1wYXJlbnQiPT09ZS5wYXJ0c1sxXS5wYXJ0c1sxXS50eXBlP2UucGFydHNbMF06ZX1mdW5jdGlvbiBmbGF0dGVuRG9jKGUpe2lmKCJjb25jYXQiPT09ZS50eXBlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5wYXJ0cy5sZW5ndGg7KytuKXt2YXIgcj1lLnBhcnRzW25dO2lmKCJzdHJpbmciIT09dHlwZW9mIHImJiJjb25jYXQiPT09ci50eXBlKVtdLnB1c2guYXBwbHkodCxmbGF0dGVuRG9jKHIpLnBhcnRzKTtlbHNle3ZhciBpPWZsYXR0ZW5Eb2Mocik7IiIhPT1pJiZ0LnB1c2goaSl9fXJldHVybiBPYmplY3QuYXNzaWduKHt9LGUse3BhcnRzOnR9KX1yZXR1cm4iaWYtYnJlYWsiPT09ZS50eXBlP09iamVjdC5hc3NpZ24oe30sZSx7YnJlYWtDb250ZW50czpudWxsIT1lLmJyZWFrQ29udGVudHM/ZmxhdHRlbkRvYyhlLmJyZWFrQ29udGVudHMpOm51bGwsZmxhdENvbnRlbnRzOm51bGwhPWUuZmxhdENvbnRlbnRzP2ZsYXR0ZW5Eb2MoZS5mbGF0Q29udGVudHMpOm51bGx9KToiZ3JvdXAiPT09ZS50eXBlP09iamVjdC5hc3NpZ24oe30sZSx7Y29udGVudHM6ZmxhdHRlbkRvYyhlLmNvbnRlbnRzKSxleHBhbmRlZFN0YXRlczplLmV4cGFuZGVkU3RhdGVzP2UuZXhwYW5kZWRTdGF0ZXMubWFwKGZsYXR0ZW5Eb2MpOmUuZXhwYW5kZWRTdGF0ZXN9KTplLmNvbnRlbnRzP09iamVjdC5hc3NpZ24oe30sZSx7Y29udGVudHM6ZmxhdHRlbkRvYyhlLmNvbnRlbnRzKX0pOmV9ZnVuY3Rpb24gcHJpbnREb2MoZSl7aWYoInN0cmluZyI9PT10eXBlb2YgZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7aWYoImxpbmUiPT09ZS50eXBlKXJldHVybiBlLmxpdGVyYWxsaW5lPyJsaXRlcmFsbGluZSI6ZS5oYXJkPyJoYXJkbGluZSI6ZS5zb2Z0PyJzb2Z0bGluZSI6ImxpbmUiO2lmKCJicmVhay1wYXJlbnQiPT09ZS50eXBlKXJldHVybiJicmVha1BhcmVudCI7aWYoImNvbmNhdCI9PT1lLnR5cGUpcmV0dXJuIlsiK2UucGFydHMubWFwKHByaW50RG9jKS5qb2luKCIsICIpKyJdIjtpZigiaW5kZW50Ij09PWUudHlwZSlyZXR1cm4iaW5kZW50KCIrcHJpbnREb2MoZS5jb250ZW50cykrIikiO2lmKCJhbGlnbiI9PT1lLnR5cGUpcmV0dXJuIGUubj09PS0xLzA/ImRlZGVudFRvUm9vdCgiK3ByaW50RG9jKGUuY29udGVudHMpKyIpIjplLm48MD8iZGVkZW50KCIrcHJpbnREb2MoZS5jb250ZW50cykrIikiOiJyb290Ij09PWUubi50eXBlPyJtYXJrQXNSb290KCIrcHJpbnREb2MoZS5jb250ZW50cykrIikiOiJhbGlnbigiK0pTT04uc3RyaW5naWZ5KGUubikrIiwgIitwcmludERvYyhlLmNvbnRlbnRzKSsiKSI7aWYoImlmLWJyZWFrIj09PWUudHlwZSlyZXR1cm4iaWZCcmVhaygiK3ByaW50RG9jKGUuYnJlYWtDb250ZW50cykrKGUuZmxhdENvbnRlbnRzPyIsICIrcHJpbnREb2MoZS5mbGF0Q29udGVudHMpOiIiKSsiKSI7aWYoImdyb3VwIj09PWUudHlwZSlyZXR1cm4gZS5leHBhbmRlZFN0YXRlcz8iY29uZGl0aW9uYWxHcm91cChbIitlLmV4cGFuZGVkU3RhdGVzLm1hcChwcmludERvYykuam9pbigiLCIpKyJdKSI6KGUuYnJlYWs/IndyYXBwZWRHcm91cCI6Imdyb3VwIikrIigiK3ByaW50RG9jKGUuY29udGVudHMpKyIpIjtpZigiZmlsbCI9PT1lLnR5cGUpcmV0dXJuImZpbGwoIitlLnBhcnRzLm1hcChwcmludERvYykuam9pbigiLCAiKSsiKSI7aWYoImxpbmUtc3VmZml4Ij09PWUudHlwZSlyZXR1cm4ibGluZVN1ZmZpeCgiK3ByaW50RG9jKGUuY29udGVudHMpKyIpIjtpZigibGluZS1zdWZmaXgtYm91bmRhcnkiPT09ZS50eXBlKXJldHVybiJsaW5lU3VmZml4Qm91bmRhcnkiO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBkb2MgdHlwZSAiK2UudHlwZSl9ZnVuY3Rpb24gaXNOZXh0TGluZUVtcHR5JDEoZSx0LG4pe3JldHVybiB1dGlsLmlzTmV4dExpbmVFbXB0eShlLHQsbi5sb2NFbmQpfWZ1bmN0aW9uIGdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXJJbmRleCQxKGUsdCxuKXtyZXR1cm4gdXRpbC5nZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVySW5kZXgoZSx0LG4ubG9jRW5kKX1mdW5jdGlvbiBnZXRTb3J0ZWRDaGlsZE5vZGVzKGUsdCxuKXtpZihlKXt2YXIgcj10LnByaW50ZXIsaT10LmxvY1N0YXJ0LG89dC5sb2NFbmQ7aWYobil7aWYoZSYmci5jYW5BdHRhY2hDb21tZW50JiZyLmNhbkF0dGFjaENvbW1lbnQoZSkpe3ZhciBhO2ZvcihhPW4ubGVuZ3RoLTE7YT49MCYmIShpKG5bYV0pPD1pKGUpJiZvKG5bYV0pPD1vKGUpKTstLWEpO3JldHVybiB2b2lkIG4uc3BsaWNlKGErMSwwLGUpfX1lbHNlIGlmKGVbY2hpbGROb2Rlc0NhY2hlS2V5XSlyZXR1cm4gZVtjaGlsZE5vZGVzQ2FjaGVLZXldO3ZhciBzO2lmKHIuZ2V0Q29tbWVudENoaWxkTm9kZXM/cz1yLmdldENvbW1lbnRDaGlsZE5vZGVzKGUpOmUmJiJvYmplY3QiPT09X3R5cGVvZihlKSYmKHM9T2JqZWN0LmtleXMoZSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJlbmNsb3NpbmdOb2RlIiE9PWUmJiJwcmVjZWRpbmdOb2RlIiE9PWUmJiJmb2xsb3dpbmdOb2RlIiE9PWV9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSkscylyZXR1cm4gbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsY2hpbGROb2Rlc0NhY2hlS2V5LHt2YWx1ZTpuPVtdLGVudW1lcmFibGU6ITF9KSxzLmZvckVhY2goZnVuY3Rpb24oZSl7Z2V0U29ydGVkQ2hpbGROb2RlcyhlLHQsbil9KSxufX1mdW5jdGlvbiBkZWNvcmF0ZUNvbW1lbnQoZSx0LG4pe2Zvcih2YXIgcixpLG89bi5sb2NTdGFydCxhPW4ubG9jRW5kLHM9Z2V0U29ydGVkQ2hpbGROb2RlcyhlLG4pLHU9MCxjPXMubGVuZ3RoO3U8Yzspe3ZhciBsPXUrYz4+MSxwPXNbbF07aWYobyhwKS1vKHQpPD0wJiZhKHQpLWEocCk8PTApcmV0dXJuIHQuZW5jbG9zaW5nTm9kZT1wLHZvaWQgZGVjb3JhdGVDb21tZW50KHAsdCxuKTtpZihhKHApLW8odCk8PTApcj1wLHU9bCsxO2Vsc2V7aWYoIShhKHQpLW8ocCk8PTApKXRocm93IG5ldyBFcnJvcigiQ29tbWVudCBsb2NhdGlvbiBvdmVybGFwcyB3aXRoIG5vZGUgbG9jYXRpb24iKTtpPXAsYz1sfX1pZih0LmVuY2xvc2luZ05vZGUmJiJUZW1wbGF0ZUxpdGVyYWwiPT09dC5lbmNsb3NpbmdOb2RlLnR5cGUpe3ZhciBmPXQuZW5jbG9zaW5nTm9kZS5xdWFzaXMsZD1maW5kRXhwcmVzc2lvbkluZGV4Rm9yQ29tbWVudChmLHQsbik7ciYmZmluZEV4cHJlc3Npb25JbmRleEZvckNvbW1lbnQoZixyLG4pIT09ZCYmKHI9bnVsbCksaSYmZmluZEV4cHJlc3Npb25JbmRleEZvckNvbW1lbnQoZixpLG4pIT09ZCYmKGk9bnVsbCl9ciYmKHQucHJlY2VkaW5nTm9kZT1yKSxpJiYodC5mb2xsb3dpbmdOb2RlPWkpfWZ1bmN0aW9uIGF0dGFjaChlLHQsbixyKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgaT1bXSxvPXIubG9jU3RhcnQsYT1yLmxvY0VuZDtlLmZvckVhY2goZnVuY3Rpb24ocyx1KXtpZigoImpzb24iPT09ci5wYXJzZXJ8fCJqc29uNSI9PT1yLnBhcnNlcikmJm8ocyktbyh0KTw9MClyZXR1cm4gdm9pZCBhZGRMZWFkaW5nQ29tbWVudCh0LHMpO2RlY29yYXRlQ29tbWVudCh0LHMscik7dmFyIGM9cy5wcmVjZWRpbmdOb2RlLGw9cy5lbmNsb3NpbmdOb2RlLHA9cy5mb2xsb3dpbmdOb2RlLGY9ci5wcmludGVyLmhhbmRsZUNvbW1lbnRzJiZyLnByaW50ZXIuaGFuZGxlQ29tbWVudHMub3duTGluZT9yLnByaW50ZXIuaGFuZGxlQ29tbWVudHMub3duTGluZTpmdW5jdGlvbigpe3JldHVybiExfSxkPXIucHJpbnRlci5oYW5kbGVDb21tZW50cyYmci5wcmludGVyLmhhbmRsZUNvbW1lbnRzLmVuZE9mTGluZT9yLnByaW50ZXIuaGFuZGxlQ29tbWVudHMuZW5kT2ZMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGg9ci5wcmludGVyLmhhbmRsZUNvbW1lbnRzJiZyLnByaW50ZXIuaGFuZGxlQ29tbWVudHMucmVtYWluaW5nP3IucHJpbnRlci5oYW5kbGVDb21tZW50cy5yZW1haW5pbmc6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbT1lLmxlbmd0aC0xPT09dTtpZihoYXNOZXdsaW5lKG4sbyhzKSx7YmFja3dhcmRzOiEwfSkpZihzLG4scix0LG0pfHwocD9hZGRMZWFkaW5nQ29tbWVudChwLHMpOmM/YWRkVHJhaWxpbmdDb21tZW50KGMscyk6bD9hZGREYW5nbGluZ0NvbW1lbnQobCxzKTphZGREYW5nbGluZ0NvbW1lbnQodCxzKSk7ZWxzZSBpZihoYXNOZXdsaW5lKG4sYShzKSkpZChzLG4scix0LG0pfHwoYz9hZGRUcmFpbGluZ0NvbW1lbnQoYyxzKTpwP2FkZExlYWRpbmdDb21tZW50KHAscyk6bD9hZGREYW5nbGluZ0NvbW1lbnQobCxzKTphZGREYW5nbGluZ0NvbW1lbnQodCxzKSk7ZWxzZSBpZihoKHMsbixyLHQsbSkpO2Vsc2UgaWYoYyYmcCl7dmFyIGc9aS5sZW5ndGg7aWYoZz4wKXt2YXIgeT1pW2ctMV07eS5mb2xsb3dpbmdOb2RlIT09cy5mb2xsb3dpbmdOb2RlJiZicmVha1RpZXMoaSxuLHIpfWkucHVzaChzKX1lbHNlIGM/YWRkVHJhaWxpbmdDb21tZW50KGMscyk6cD9hZGRMZWFkaW5nQ29tbWVudChwLHMpOmw/YWRkRGFuZ2xpbmdDb21tZW50KGwscyk6YWRkRGFuZ2xpbmdDb21tZW50KHQscyl9KSxicmVha1RpZXMoaSxuLHIpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtkZWxldGUgZS5wcmVjZWRpbmdOb2RlLGRlbGV0ZSBlLmVuY2xvc2luZ05vZGUsZGVsZXRlIGUuZm9sbG93aW5nTm9kZX0pfX1mdW5jdGlvbiBicmVha1RpZXMoZSx0LG4pe3ZhciByPWUubGVuZ3RoO2lmKDAhPT1yKXt2YXIgaSxvPWVbMF0ucHJlY2VkaW5nTm9kZSxhPWVbMF0uZm9sbG93aW5nTm9kZSxzPW4ubG9jU3RhcnQoYSk7Zm9yKGk9cjtpPjA7LS1pKXt2YXIgdT1lW2ktMV07YXNzZXJ0LnN0cmljdEVxdWFsKHUucHJlY2VkaW5nTm9kZSxvKSxhc3NlcnQuc3RyaWN0RXF1YWwodS5mb2xsb3dpbmdOb2RlLGEpO3ZhciBjPXQuc2xpY2Uobi5sb2NFbmQodSkscykudHJpbSgpO2lmKCIiIT09YyYmIS9eXCgrJC8udGVzdChjKSlicmVhaztzPW4ubG9jU3RhcnQodSl9ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dDxpP2FkZFRyYWlsaW5nQ29tbWVudChvLGUpOmFkZExlYWRpbmdDb21tZW50KGEsZSl9KSxlLmxlbmd0aD0wfX1mdW5jdGlvbiBwcmludENvbW1lbnQoZSx0KXtyZXR1cm4gZS5nZXRWYWx1ZSgpLnByaW50ZWQ9ITAsdC5wcmludGVyLnByaW50Q29tbWVudChlLHQpfWZ1bmN0aW9uIGZpbmRFeHByZXNzaW9uSW5kZXhGb3JDb21tZW50KGUsdCxuKXtmb3IodmFyIHI9bi5sb2NTdGFydCh0KS0xLGk9MTtpPGUubGVuZ3RoOysraSlpZihyPGdldFF1YXNpUmFuZ2UoZVtpXSkuc3RhcnQpcmV0dXJuIGktMTtyZXR1cm4gMH1mdW5jdGlvbiBnZXRRdWFzaVJhbmdlKGUpe3JldHVybiB2b2lkIDAhPT1lLnN0YXJ0P3tzdGFydDplLnN0YXJ0LGVuZDplLmVuZH06e3N0YXJ0OmUucmFuZ2VbMF0sZW5kOmUucmFuZ2VbMV19fWZ1bmN0aW9uIHByaW50TGVhZGluZ0NvbW1lbnQoZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKSxpPXByaW50Q29tbWVudChlLG4pO2lmKCFpKXJldHVybiIiO3ZhciBvPW4ucHJpbnRlci5pc0Jsb2NrQ29tbWVudCYmbi5wcmludGVyLmlzQmxvY2tDb21tZW50KHIpO3JldHVybiBjb25jYXQobz9baSxoYXNOZXdsaW5lKG4ub3JpZ2luYWxUZXh0LG4ubG9jRW5kKHIpKT9oYXJkbGluZToiICJdOltpLGhhcmRsaW5lXSl9ZnVuY3Rpb24gcHJpbnRUcmFpbGluZ0NvbW1lbnQoZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKSxpPXByaW50Q29tbWVudChlLG4pO2lmKCFpKXJldHVybiIiO3ZhciBvPW4ucHJpbnRlci5pc0Jsb2NrQ29tbWVudCYmbi5wcmludGVyLmlzQmxvY2tDb21tZW50KHIpLGE9ZS5nZXROb2RlKDEpLHM9ZS5nZXROb2RlKDIpLHU9cyYmKCJDbGFzc0RlY2xhcmF0aW9uIj09PXMudHlwZXx8IkNsYXNzRXhwcmVzc2lvbiI9PT1zLnR5cGUpJiZzLnN1cGVyQ2xhc3M9PT1hO2lmKGhhc05ld2xpbmUobi5vcmlnaW5hbFRleHQsbi5sb2NTdGFydChyKSx7YmFja3dhcmRzOiEwfSkpe3ZhciBjPWlzUHJldmlvdXNMaW5lRW1wdHkobi5vcmlnaW5hbFRleHQscixuLmxvY1N0YXJ0KTtyZXR1cm4gbGluZVN1ZmZpeChjb25jYXQoW2hhcmRsaW5lLGM/aGFyZGxpbmU6IiIsaV0pKX1yZXR1cm4gY29uY2F0KG98fHU/WyIgIixpXTpbbGluZVN1ZmZpeCgiICIraSksbz8iIjpicmVha1BhcmVudF0pfWZ1bmN0aW9uIHByaW50RGFuZ2xpbmdDb21tZW50cyhlLHQsbixyKXt2YXIgaT1bXSxvPWUuZ2V0VmFsdWUoKTtyZXR1cm4gbyYmby5jb21tZW50cz8oZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0VmFsdWUoKTshbnx8bi5sZWFkaW5nfHxuLnRyYWlsaW5nfHxyJiYhcihuKXx8aS5wdXNoKHByaW50Q29tbWVudChlLHQpKX0sImNvbW1lbnRzIiksMD09PWkubGVuZ3RoPyIiOm4/am9pbihoYXJkbGluZSxpKTppbmRlbnQoY29uY2F0KFtoYXJkbGluZSxqb2luKGhhcmRsaW5lLGkpXSkpKToiIn1mdW5jdGlvbiBwcmVwZW5kQ3Vyc29yUGxhY2Vob2xkZXIoZSx0LG4pe3JldHVybiBlLmdldE5vZGUoKT09PXQuY3Vyc29yTm9kZSYmZS5nZXRWYWx1ZSgpP2NvbmNhdChbY3Vyc29yLG4sY3Vyc29yXSk6bn1mdW5jdGlvbiBwcmludENvbW1lbnRzKGUsdCxuLHIpe3ZhciBpPWUuZ2V0VmFsdWUoKSxvPXQoZSksYT1pJiZpLmNvbW1lbnRzO2lmKCFhfHwwPT09YS5sZW5ndGgpcmV0dXJuIHByZXBlbmRDdXJzb3JQbGFjZWhvbGRlcihlLG4sbyk7dmFyIHM9W10sdT1bcj8iOyI6IiIsb107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lLmdldFZhbHVlKCksaT1yLmxlYWRpbmcsbz1yLnRyYWlsaW5nO2lmKGkpe3ZhciBhPXByaW50TGVhZGluZ0NvbW1lbnQoZSx0LG4pO2lmKCFhKXJldHVybjtzLnB1c2goYSk7dmFyIGM9bi5vcmlnaW5hbFRleHQ7aGFzTmV3bGluZShjLHNraXBOZXdsaW5lKGMsbi5sb2NFbmQocikpKSYmcy5wdXNoKGhhcmRsaW5lKX1lbHNlIG8mJnUucHVzaChwcmludFRyYWlsaW5nQ29tbWVudChlLHQsbikpfSwiY29tbWVudHMiKSxwcmVwZW5kQ3Vyc29yUGxhY2Vob2xkZXIoZSxuLGNvbmNhdChzLmNvbmNhdCh1KSkpfWZ1bmN0aW9uIEZhc3RQYXRoKGUpe2Fzc2VydC5vayh0aGlzIGluc3RhbmNlb2YgRmFzdFBhdGgpLHRoaXMuc3RhY2s9W2VdfWZ1bmN0aW9uIGdldE5vZGVIZWxwZXIoZSx0KXtmb3IodmFyIG49ZS5zdGFjayxyPW4ubGVuZ3RoLTE7cj49MDtyLT0yKXt2YXIgaT1uW3JdO2lmKGkmJiFBcnJheS5pc0FycmF5KGkpJiYtLXQ8MClyZXR1cm4gaX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwcmludFN1YnRyZWUoZSx0LG4scil7aWYobi5wcmludGVyLmVtYmVkKXJldHVybiBuLnByaW50ZXIuZW1iZWQoZSx0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRleHRUb0RvYyhlLHQsbixyKX0sbil9ZnVuY3Rpb24gdGV4dFRvRG9jKGUsdCxuLHIpe3ZhciBpPW5vcm1hbGl6ZSQxKE9iamVjdC5hc3NpZ24oe30sbix0LHtwYXJlbnRQYXJzZXI6bi5wYXJzZXIsb3JpZ2luYWxUZXh0OmV9KSx7cGFzc1Rocm91Z2g6ITB9KSxvPXBhcnNlci5wYXJzZShlLGkpLGE9by5hc3Q7ZT1vLnRleHQ7dmFyIHM9YS5jb21tZW50cztyZXR1cm4gZGVsZXRlIGEuY29tbWVudHMsY29tbWVudHMuYXR0YWNoKHMsYSxlLGkpLHIoYSxpKX1mdW5jdGlvbiBwcmludEFzdFRvRG9jKGUsdCxuKXtmdW5jdGlvbiByKGUsbil7dmFyIGE9ZS5nZXRWYWx1ZSgpLHM9YSYmIm9iamVjdCI9PT1fdHlwZW9mKGEpJiZ2b2lkIDA9PT1uO2lmKHMmJm8uaGFzKGEpKXJldHVybiBvLmdldChhKTt2YXIgdTtyZXR1cm4gdT1pLndpbGxQcmludE93bkNvbW1lbnRzJiZpLndpbGxQcmludE93bkNvbW1lbnRzKGUpP2dlbmVyaWNQcmludChlLHQscixuKTpjb21tZW50cy5wcmludENvbW1lbnRzKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGdlbmVyaWNQcmludChlLHQscixuKX0sdCxuJiZuLm5lZWRzU2VtaSkscyYmby5zZXQoYSx1KSx1fW49bnx8MDt2YXIgaT10LnByaW50ZXIsbz1uZXcgTWFwLGE9cihuZXcgZmFzdFBhdGgoZSkpO3JldHVybiBuPjAmJihhPWFkZEFsaWdubWVudFRvRG9jJDEoZG9jVXRpbHMkMi5yZW1vdmVMaW5lcyhjb25jYXQkMyhbaGFyZGxpbmUkMixhXSkpLG4sdC50YWJXaWR0aCkpLGRvY1V0aWxzJDIucHJvcGFnYXRlQnJlYWtzKGEpLCJqc29uIiE9PXQucGFyc2VyJiYianNvbjUiIT09dC5wYXJzZXImJiJqc29uLXN0cmluZ2lmeSIhPT10LnBhcnNlcnx8KGE9Y29uY2F0JDMoW2EsaGFyZGxpbmUkMl0pKSxhfWZ1bmN0aW9uIGdlbmVyaWNQcmludChlLHQsbixyKXthc3NlcnQub2soZSBpbnN0YW5jZW9mIGZhc3RQYXRoKTt2YXIgaT1lLmdldFZhbHVlKCksbz10LnByaW50ZXI7aWYoby5oYXNQcmV0dGllcklnbm9yZSYmby5oYXNQcmV0dGllcklnbm9yZShlKSlyZXR1cm4gdC5vcmlnaW5hbFRleHQuc2xpY2UodC5sb2NTdGFydChpKSx0LmxvY0VuZChpKSk7aWYoaSl0cnl7dmFyIGE9bXVsdGlwYXJzZXIucHJpbnRTdWJ0cmVlKGUsbix0LHByaW50QXN0VG9Eb2MpO2lmKGEpcmV0dXJuIGF9Y2F0Y2goZSl7aWYoY29tbW9uanNHbG9iYWwuUFJFVFRJRVJfREVCVUcpdGhyb3cgZX1yZXR1cm4gby5wcmludChlLHQsbixyKX1mdW5jdGlvbiBmaW5kU2libGluZ0FuY2VzdG9ycyhlLHQsbil7dmFyIHI9ZS5ub2RlLGk9dC5ub2RlO2lmKHI9PT1pKXJldHVybntzdGFydE5vZGU6cixlbmROb2RlOml9O3ZhciBvPSEwLGE9ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxjPXQucGFyZW50Tm9kZXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEobz0odT1jLm5leHQoKSkuZG9uZSk7bz0hMCl7dmFyIGw9dS52YWx1ZTtpZighKCJQcm9ncmFtIiE9PWwudHlwZSYmIkZpbGUiIT09bC50eXBlJiZuLmxvY1N0YXJ0KGwpPj1uLmxvY1N0YXJ0KGUubm9kZSkpKWJyZWFrO2k9bH19Y2F0Y2goZSl7YT0hMCxzPWV9ZmluYWxseXt0cnl7b3x8bnVsbD09Yy5yZXR1cm58fGMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IHN9fXZhciBwPSEwLGY9ITEsZD12b2lkIDA7dHJ5e2Zvcih2YXIgaCxtPWUucGFyZW50Tm9kZXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEocD0oaD1tLm5leHQoKSkuZG9uZSk7cD0hMCl7dmFyIGc9aC52YWx1ZTtpZighKCJQcm9ncmFtIiE9PWcudHlwZSYmIkZpbGUiIT09Zy50eXBlJiZuLmxvY0VuZChnKTw9bi5sb2NFbmQodC5ub2RlKSkpYnJlYWs7cj1nfX1jYXRjaChlKXtmPSEwLGQ9ZX1maW5hbGx5e3RyeXtwfHxudWxsPT1tLnJldHVybnx8bS5yZXR1cm4oKX1maW5hbGx5e2lmKGYpdGhyb3cgZH19cmV0dXJue3N0YXJ0Tm9kZTpyLGVuZE5vZGU6aX19ZnVuY3Rpb24gZmluZE5vZGVBdE9mZnNldChlLHQsbixyLGkpe3I9cnx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0saT1pfHxbXTt2YXIgbz1uLmxvY1N0YXJ0KGUsbi5sb2NTdGFydCksYT1uLmxvY0VuZChlLG4ubG9jRW5kKTtpZihvPD10JiZ0PD1hKXt2YXIgcz0hMCx1PSExLGM9dm9pZCAwO3RyeXtmb3IodmFyIGwscD1jb21tZW50cy5nZXRTb3J0ZWRDaGlsZE5vZGVzKGUsbilbU3ltYm9sLml0ZXJhdG9yXSgpOyEocz0obD1wLm5leHQoKSkuZG9uZSk7cz0hMCl7dmFyIGY9bC52YWx1ZSxkPWZpbmROb2RlQXRPZmZzZXQoZix0LG4scixbZV0uY29uY2F0KGkpKTtpZihkKXJldHVybiBkfX1jYXRjaChlKXt1PSEwLGM9ZX1maW5hbGx5e3RyeXtzfHxudWxsPT1wLnJldHVybnx8cC5yZXR1cm4oKX1maW5hbGx5e2lmKHUpdGhyb3cgY319aWYocihlKSlyZXR1cm57bm9kZTplLHBhcmVudE5vZGVzOml9fX1mdW5jdGlvbiBpc1NvdXJjZUVsZW1lbnQoZSx0KXtpZihudWxsPT10KXJldHVybiExO3ZhciBuPVsiRnVuY3Rpb25EZWNsYXJhdGlvbiIsIkJsb2NrU3RhdGVtZW50IiwiQnJlYWtTdGF0ZW1lbnQiLCJDb250aW51ZVN0YXRlbWVudCIsIkRlYnVnZ2VyU3RhdGVtZW50IiwiRG9XaGlsZVN0YXRlbWVudCIsIkVtcHR5U3RhdGVtZW50IiwiRXhwcmVzc2lvblN0YXRlbWVudCIsIkZvckluU3RhdGVtZW50IiwiRm9yU3RhdGVtZW50IiwiSWZTdGF0ZW1lbnQiLCJMYWJlbGVkU3RhdGVtZW50IiwiUmV0dXJuU3RhdGVtZW50IiwiU3dpdGNoU3RhdGVtZW50IiwiVGhyb3dTdGF0ZW1lbnQiLCJUcnlTdGF0ZW1lbnQiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwiV2hpbGVTdGF0ZW1lbnQiLCJXaXRoU3RhdGVtZW50IiwiQ2xhc3NEZWNsYXJhdGlvbiIsIkltcG9ydERlY2xhcmF0aW9uIiwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIiwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIsIkV4cG9ydEFsbERlY2xhcmF0aW9uIiwiVHlwZUFsaWFzIiwiSW50ZXJmYWNlRGVjbGFyYXRpb24iLCJUeXBlQWxpYXNEZWNsYXJhdGlvbiIsIkV4cG9ydEFzc2lnbm1lbnQiLCJFeHBvcnREZWNsYXJhdGlvbiJdLHI9WyJPYmplY3RFeHByZXNzaW9uIiwiQXJyYXlFeHByZXNzaW9uIiwiU3RyaW5nTGl0ZXJhbCIsIk51bWVyaWNMaXRlcmFsIiwiQm9vbGVhbkxpdGVyYWwiLCJOdWxsTGl0ZXJhbCJdLGk9WyJPcGVyYXRpb25EZWZpbml0aW9uIiwiRnJhZ21lbnREZWZpbml0aW9uIiwiVmFyaWFibGVEZWZpbml0aW9uIiwiVHlwZUV4dGVuc2lvbkRlZmluaXRpb24iLCJPYmplY3RUeXBlRGVmaW5pdGlvbiIsIkZpZWxkRGVmaW5pdGlvbiIsIkRpcmVjdGl2ZURlZmluaXRpb24iLCJFbnVtVHlwZURlZmluaXRpb24iLCJFbnVtVmFsdWVEZWZpbml0aW9uIiwiSW5wdXRWYWx1ZURlZmluaXRpb24iLCJJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uIiwiU2NoZW1hRGVmaW5pdGlvbiIsIk9wZXJhdGlvblR5cGVEZWZpbml0aW9uIiwiSW50ZXJmYWNlVHlwZURlZmluaXRpb24iLCJVbmlvblR5cGVEZWZpbml0aW9uIiwiU2NhbGFyVHlwZURlZmluaXRpb24iXTtzd2l0Y2goZS5wYXJzZXIpe2Nhc2UiZmxvdyI6Y2FzZSJiYWJ5bG9uIjpjYXNlInR5cGVzY3JpcHQiOnJldHVybiBuLmluZGV4T2YodC50eXBlKT4tMTtjYXNlImpzb24iOnJldHVybiByLmluZGV4T2YodC50eXBlKT4tMTtjYXNlImdyYXBocWwiOnJldHVybiBpLmluZGV4T2YodC5raW5kKT4tMX1yZXR1cm4hMX1mdW5jdGlvbiBjYWxjdWxhdGVSYW5nZShlLHQsbil7dmFyIHIsaT1lLnNsaWNlKHQucmFuZ2VTdGFydCx0LnJhbmdlRW5kKSxvPU1hdGgubWF4KHQucmFuZ2VTdGFydCtpLnNlYXJjaCgvXFMvKSx0LnJhbmdlU3RhcnQpO2ZvcihyPXQucmFuZ2VFbmQ7cj50LnJhbmdlU3RhcnQmJiFlW3ItMV0ubWF0Y2goL1xTLyk7LS1yKTt2YXIgYT1maW5kTm9kZUF0T2Zmc2V0KG4sbyx0LGZ1bmN0aW9uKGUpe3JldHVybiBpc1NvdXJjZUVsZW1lbnQodCxlKX0pLHM9ZmluZE5vZGVBdE9mZnNldChuLHIsdCxmdW5jdGlvbihlKXtyZXR1cm4gaXNTb3VyY2VFbGVtZW50KHQsZSl9KTtpZighYXx8IXMpcmV0dXJue3JhbmdlU3RhcnQ6MCxyYW5nZUVuZDowfTt2YXIgdT1maW5kU2libGluZ0FuY2VzdG9ycyhhLHMsdCksYz11LnN0YXJ0Tm9kZSxsPXUuZW5kTm9kZTtyZXR1cm57cmFuZ2VTdGFydDpNYXRoLm1pbih0LmxvY1N0YXJ0KGMsdC5sb2NTdGFydCksdC5sb2NTdGFydChsLHQubG9jU3RhcnQpKSxyYW5nZUVuZDpNYXRoLm1heCh0LmxvY0VuZChjLHQubG9jRW5kKSx0LmxvY0VuZChsLHQubG9jRW5kKSl9fWZ1bmN0aW9uIGd1ZXNzTGluZUVuZGluZyhlKXt2YXIgdD1lLmluZGV4T2YoIlxuIik7cmV0dXJuIHQ+PTAmJiJcciI9PT1lLmNoYXJBdCh0LTEpPyJcclxuIjoiXG4ifWZ1bmN0aW9uIGVuc3VyZUFsbENvbW1lbnRzUHJpbnRlZChlKXtpZihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdClpZigicHJldHRpZXItaWdub3JlIj09PWVbdF0udmFsdWUudHJpbSgpKXJldHVybjtlLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUucHJpbnRlZCl0aHJvdyBuZXcgRXJyb3IoJ0NvbW1lbnQgIicrZS52YWx1ZS50cmltKCkrJyIgd2FzIG5vdCBwcmludGVkLiBQbGVhc2UgcmVwb3J0IHRoaXMgZXJyb3IhJyk7ZGVsZXRlIGUucHJpbnRlZH0pfX1mdW5jdGlvbiBhdHRhY2hDb21tZW50cyhlLHQsbil7dmFyIHI9dC5jb21tZW50cztyZXR1cm4gciYmKGRlbGV0ZSB0LmNvbW1lbnRzLGNvbW1lbnRzLmF0dGFjaChyLHQsZSxuKSksdC50b2tlbnM9W10sbi5vcmlnaW5hbFRleHQ9ZS50cmltUmlnaHQoKSxyfWZ1bmN0aW9uIGNvcmVGb3JtYXQoZSx0LG4pe249bnx8MDt2YXIgcj1wYXJzZXIucGFyc2UoZSx0KSxpPXIuYXN0O2lmKGU9ci50ZXh0LHQuY3Vyc29yT2Zmc2V0Pj0wKXt2YXIgbz1yYW5nZVV0aWwuZmluZE5vZGVBdE9mZnNldChpLHQuY3Vyc29yT2Zmc2V0LHQpO28mJm8ubm9kZSYmKHQuY3Vyc29yTm9kZT1vLm5vZGUpfXZhciBhPWF0dGFjaENvbW1lbnRzKGUsaSx0KSxzPWFzdFRvRG9jKGksdCxuKTt0Lm5ld0xpbmU9Z3Vlc3NMaW5lRW5kaW5nKGUpO3ZhciB1PV9wcmludERvY1RvU3RyaW5nKHMsdCk7aWYoZW5zdXJlQWxsQ29tbWVudHNQcmludGVkKGEpLG4+MCl7dmFyIGM9dS5mb3JtYXR0ZWQudHJpbSgpO3ZvaWQgMCE9PXUuY3Vyc29yTm9kZVN0YXJ0JiYodS5jdXJzb3JOb2RlU3RhcnQtPXUuZm9ybWF0dGVkLmluZGV4T2YoYykpLHUuZm9ybWF0dGVkPWMrdC5uZXdMaW5lfWlmKHQuY3Vyc29yT2Zmc2V0Pj0wKXt2YXIgbCxwLGYsZCxoO2lmKHQuY3Vyc29yTm9kZSYmdS5jdXJzb3JOb2RlVGV4dD8obD10LmxvY1N0YXJ0KHQuY3Vyc29yTm9kZSkscD1lLnNsaWNlKGwsdC5sb2NFbmQodC5jdXJzb3JOb2RlKSksZj10LmN1cnNvck9mZnNldC1sLGQ9dS5jdXJzb3JOb2RlU3RhcnQsaD11LmN1cnNvck5vZGVUZXh0KToobD0wLHA9ZSxmPXQuY3Vyc29yT2Zmc2V0LGQ9MCxoPXUuZm9ybWF0dGVkKSxwPT09aClyZXR1cm57Zm9ybWF0dGVkOnUuZm9ybWF0dGVkLGN1cnNvck9mZnNldDpkK2Z9O3ZhciBtPXAuc3BsaXQoIiIpO20uc3BsaWNlKGYsMCxDVVJTT1IpO3ZhciBnPWguc3BsaXQoIiIpLHk9bGliLmRpZmZBcnJheXMobSxnKSx2PWQsYj0hMCx4PSExLEM9dm9pZCAwO3RyeXtmb3IodmFyIEUsRD15W1N5bWJvbC5pdGVyYXRvcl0oKTshKGI9KEU9RC5uZXh0KCkpLmRvbmUpO2I9ITApe3ZhciB3PUUudmFsdWU7aWYody5yZW1vdmVkKXtpZih3LnZhbHVlLmluZGV4T2YoQ1VSU09SKT4tMSlicmVha31lbHNlIHYrPXcuY291bnR9fWNhdGNoKGUpe3g9ITAsQz1lfWZpbmFsbHl7dHJ5e2J8fG51bGw9PUQucmV0dXJufHxELnJldHVybigpfWZpbmFsbHl7aWYoeCl0aHJvdyBDfX1yZXR1cm57Zm9ybWF0dGVkOnUuZm9ybWF0dGVkLGN1cnNvck9mZnNldDp2fX1yZXR1cm57Zm9ybWF0dGVkOnUuZm9ybWF0dGVkfX1mdW5jdGlvbiBmb3JtYXRSYW5nZShlLHQpe3ZhciBuPXBhcnNlci5wYXJzZShlLHQpLHI9bi5hc3Q7ZT1uLnRleHQ7dmFyIGk9cmFuZ2VVdGlsLmNhbGN1bGF0ZVJhbmdlKGUsdCxyKSxvPWkucmFuZ2VTdGFydCxhPWkucmFuZ2VFbmQscz1lLnNsaWNlKG8sYSksdT1NYXRoLm1pbihvLGUubGFzdEluZGV4T2YoIlxuIixvKSsxKSxjPWUuc2xpY2UodSxvKSxsPXV0aWwuZ2V0QWxpZ25tZW50U2l6ZShjLHQudGFiV2lkdGgpLHA9Y29yZUZvcm1hdChzLE9iamVjdC5hc3NpZ24oe30sdCx7cmFuZ2VTdGFydDowLHJhbmdlRW5kOjEvMCxwcmludFdpZHRoOnQucHJpbnRXaWR0aC1sLGN1cnNvck9mZnNldDp0LmN1cnNvck9mZnNldD49byYmdC5jdXJzb3JPZmZzZXQ8YT90LmN1cnNvck9mZnNldC1vOi0xfSksbCksZj1wLmZvcm1hdHRlZC50cmltUmlnaHQoKSxkPWUuc2xpY2UoMCxvKStmK2Uuc2xpY2UoYSksaD10LmN1cnNvck9mZnNldDtyZXR1cm4gdC5jdXJzb3JPZmZzZXQ+PWE/aD10LmN1cnNvck9mZnNldC1hKyhvK2YubGVuZ3RoKTp2b2lkIDAhPT1wLmN1cnNvck9mZnNldCYmKGg9cC5jdXJzb3JPZmZzZXQrbykse2Zvcm1hdHRlZDpkLGN1cnNvck9mZnNldDpofX1mdW5jdGlvbiBmb3JtYXQoZSx0KXt2YXIgbj1wYXJzZXIucmVzb2x2ZVBhcnNlcih0KSxyPSFuLmhhc1ByYWdtYXx8bi5oYXNQcmFnbWEoZSk7aWYodC5yZXF1aXJlUHJhZ21hJiYhcilyZXR1cm57Zm9ybWF0dGVkOmV9O2lmKHQucmFuZ2VTdGFydD4wfHx0LnJhbmdlRW5kPGUubGVuZ3RoKXJldHVybiBmb3JtYXRSYW5nZShlLHQpO3ZhciBpPWUuY2hhckNvZGVBdCgwKT09PVVURjhCT007aSYmKGU9ZS5zdWJzdHJpbmcoMSkpLHQuaW5zZXJ0UHJhZ21hJiZ0LnByaW50ZXIuaW5zZXJ0UHJhZ21hJiYhciYmKGU9dC5wcmludGVyLmluc2VydFByYWdtYShlKSk7dmFyIG89Y29yZUZvcm1hdChlLHQpO3JldHVybiBpJiYoby5mb3JtYXR0ZWQ9U3RyaW5nLmZyb21DaGFyQ29kZShVVEY4Qk9NKStvLmZvcm1hdHRlZCksb31mdW5jdGlvbiBlbWJlZChlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD1uKGUse3BhcnNlcjoibWFya2Rvd24iLF9faW5Kc1RlbXBsYXRlOiEwfSk7cmV0dXJuIHN0cmlwVHJhaWxpbmdIYXJkbGluZSQxKGVzY2FwZUJhY2t0aWNrcyh0KSl9dmFyIGk9ZS5nZXRWYWx1ZSgpLG89ZS5nZXRQYXJlbnROb2RlKCksYT1lLmdldFBhcmVudE5vZGUoMSk7c3dpdGNoKGkudHlwZSl7Y2FzZSJUZW1wbGF0ZUxpdGVyYWwiOmlmKFtpc1N0eWxlZEpzeCxpc1N0eWxlZENvbXBvbmVudHMsaXNDc3NQcm9wLGlzQW5ndWxhckNvbXBvbmVudFN0eWxlc10uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pKXt2YXIgcz1pLnF1YXNpcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWUucmF3fSksdT0wLGM9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0LG4pe3JldHVybiAwPT1uP3Q6ZSsiQHByZXR0aWVyLXBsYWNlaG9sZGVyLSIrdSsrKyItaWQiK3R9LCIiKTtyZXR1cm4gdHJhbnNmb3JtQ3NzRG9jKG4oYyx7cGFyc2VyOiJjc3MifSksZSx0KX1pZihpc0dyYXBoUUwoZSkpe3ZhciBsPWkuZXhwcmVzc2lvbnM/ZS5tYXAodCwiZXhwcmVzc2lvbnMiKTpbXSxwPWkucXVhc2lzLmxlbmd0aDtpZigxPT09cCYmIiI9PT1pLnF1YXNpc1swXS52YWx1ZS5yYXcudHJpbSgpKXJldHVybiJgYCI7Zm9yKHZhciBmPVtdLGQ9MDtkPHA7ZCsrKXt2YXIgaD1pLnF1YXNpc1tkXSxtPTA9PT1kLGc9ZD09PXAtMSx5PWgudmFsdWUuY29va2VkO2lmKCJzdHJpbmciIT09dHlwZW9mIHkpcmV0dXJuIG51bGw7dmFyIHY9eS5zcGxpdCgiXG4iKSxiPXYubGVuZ3RoLHg9bFtkXSxDPWI+MiYmIiI9PT12WzBdLnRyaW0oKSYmIiI9PT12WzFdLnRyaW0oKSxFPWI+MiYmIiI9PT12W2ItMV0udHJpbSgpJiYiIj09PXZbYi0yXS50cmltKCksRD12LmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybi9eXHMqKD86I1teXHJcbl0qKT8kLy50ZXN0KGUpfSk7aWYoIWcmJi8jW15cclxuXSokLy50ZXN0KHZbYi0xXSkpcmV0dXJuIG51bGw7dmFyIHc9bnVsbDt3PUQ/cHJpbnRHcmFwaHFsQ29tbWVudHModik6c3RyaXBUcmFpbGluZ0hhcmRsaW5lJDEobih5LHtwYXJzZXI6ImdyYXBocWwifSkpLHc/KHc9ZXNjYXBlQmFja3RpY2tzKHcpLCFtJiZDJiZmLnB1c2goIiIpLGYucHVzaCh3KSwhZyYmRSYmZi5wdXNoKCIiKSk6bXx8Z3x8IUN8fGYucHVzaCgiIikseCYmZi5wdXNoKGNvbmNhdCQ1KFsiJHsiLHgsIn0iXSkpfXJldHVybiBjb25jYXQkNShbImAiLGluZGVudCQzKGNvbmNhdCQ1KFtoYXJkbGluZSQ0LGpvaW4kMyhoYXJkbGluZSQ0LGYpXSkpLGhhcmRsaW5lJDQsImAiXSl9YnJlYWs7Y2FzZSJUZW1wbGF0ZUVsZW1lbnQiOmlmKGEmJiJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iPT09YS50eXBlJiYxPT09by5xdWFzaXMubGVuZ3RoJiYiSWRlbnRpZmllciI9PT1hLnRhZy50eXBlJiYoIm1kIj09PWEudGFnLm5hbWV8fCJtYXJrZG93biI9PT1hLnRhZy5uYW1lKSl7dmFyIFM9by5xdWFzaXNbMF0udmFsdWUucmF3LnJlcGxhY2UoLygoPzpcXFxcKSopXFxgL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4iXFwiLnJlcGVhdCh0Lmxlbmd0aC8yKSsiYCJ9KSxrPWdldEluZGVudGF0aW9uKFMpO3JldHVybiBjb25jYXQkNShbIiIhPT1rP2luZGVudCQzKGNvbmNhdCQ1KFtzb2Z0bGluZSQyLHIoUy5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iLmNvbmNhdChrKSwiZ20iKSwiIikpXSkpOmNvbmNhdCQ1KFtsaXRlcmFsbGluZSQyLGRlZGVudFRvUm9vdCQxKHIoUykpXSksc29mdGxpbmUkMl0pfX19ZnVuY3Rpb24gaXNQcm9wZXJ0eVdpdGhpbkFuZ3VsYXJDb21wb25lbnREZWNvcmF0b3IoZSx0KXt2YXIgbj1lLmdldFBhcmVudE5vZGUodCk7cmV0dXJuISEobiYmIkRlY29yYXRvciI9PT1uLnR5cGUmJm4uZXhwcmVzc2lvbiYmIkNhbGxFeHByZXNzaW9uIj09PW4uZXhwcmVzc2lvbi50eXBlJiZuLmV4cHJlc3Npb24uY2FsbGVlJiYiQ29tcG9uZW50Ij09PW4uZXhwcmVzc2lvbi5jYWxsZWUubmFtZSl9ZnVuY3Rpb24gZ2V0SW5kZW50YXRpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvXihbXlxTXG5dKilcUy9tKTtyZXR1cm4gbnVsbD09PXQ/IiI6dFsxXX1mdW5jdGlvbiBlc2NhcGVCYWNrdGlja3MoZSl7cmV0dXJuIG1hcERvYyQyKGUsZnVuY3Rpb24oZSl7aWYoIWUucGFydHMpcmV0dXJuIGU7dmFyIHQ9W107cmV0dXJuIGUucGFydHMuZm9yRWFjaChmdW5jdGlvbihlKXsic3RyaW5nIj09PXR5cGVvZiBlP3QucHVzaChlLnJlcGxhY2UoLyhcXCopYC9nLCIkMSQxXFxgIikpOnQucHVzaChlKX0pLE9iamVjdC5hc3NpZ24oe30sZSx7cGFydHM6dH0pfSl9ZnVuY3Rpb24gdHJhbnNmb3JtQ3NzRG9jKGUsdCxuKXt2YXIgcj10LmdldFZhbHVlKCk7aWYoMT09PXIucXVhc2lzLmxlbmd0aCYmIXIucXVhc2lzWzBdLnZhbHVlLnJhdy50cmltKCkpcmV0dXJuImBgIjt2YXIgaT1yLmV4cHJlc3Npb25zP3QubWFwKG4sImV4cHJlc3Npb25zIik6W10sbz1yZXBsYWNlUGxhY2Vob2xkZXJzKGUsaSk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBpbnNlcnQgYWxsIHRoZSBleHByZXNzaW9ucyIpO3JldHVybiBjb25jYXQkNShbImAiLGluZGVudCQzKGNvbmNhdCQ1KFtoYXJkbGluZSQ0LHN0cmlwVHJhaWxpbmdIYXJkbGluZSQxKG8pXSkpLHNvZnRsaW5lJDIsImAiXSl9ZnVuY3Rpb24gcmVwbGFjZVBsYWNlaG9sZGVycyhlLHQpe2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuIGU7dmFyIG49dC5zbGljZSgpLHI9MCxpPW1hcERvYyQyKGUsZnVuY3Rpb24oZSl7aWYoIWV8fCFlLnBhcnRzfHwhZS5wYXJ0cy5sZW5ndGgpcmV0dXJuIGU7dmFyIHQ9ZS5wYXJ0cyxpPXQuaW5kZXhPZigiQCIpLG89aSsxO2lmKGk+LTEmJiJzdHJpbmciPT09dHlwZW9mIHRbb10mJnRbb10uc3RhcnRzV2l0aCgicHJldHRpZXItcGxhY2Vob2xkZXIiKSl7dmFyIGE9dFtpXSxzPXRbb10sdT10LnNsaWNlKG8rMSk7dD10LnNsaWNlKDAsaSkuY29uY2F0KFthK3NdKS5jb25jYXQodSl9dmFyIGM9dC5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZSYmZS5zdGFydHNXaXRoKCJAcHJldHRpZXItcGxhY2Vob2xkZXIiKX0pO2lmKGM+LTEpe3ZhciBsPXRbY10scD10LnNsaWNlKGMrMSksZj1sLm1hdGNoKC9AcHJldHRpZXItcGxhY2Vob2xkZXItKC4rKS1pZChbXHNcU10qKS8pLGQ9ZlsxXSxoPWZbMl0sbT1uW2RdO3IrKyx0PXQuc2xpY2UoMCxjKS5jb25jYXQoWyIkeyIsbSwifSIraF0pLmNvbmNhdChwKX1yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLHtwYXJ0czp0fSl9KTtyZXR1cm4gbi5sZW5ndGg9PT1yP2k6bnVsbH1mdW5jdGlvbiBwcmludEdyYXBocWxDb21tZW50cyhlKXt2YXIgdD1bXSxuPSExO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUscixpKXsiIiE9PWUmJigiIj09PWlbci0xXSYmbj90LnB1c2goY29uY2F0JDUoW2hhcmRsaW5lJDQsZV0pKTp0LnB1c2goZSksbj0hMCl9KSwwPT09dC5sZW5ndGg/bnVsbDpqb2luJDMoaGFyZGxpbmUkNCx0KX1mdW5jdGlvbiBpc1N0eWxlZEpzeChlKXt2YXIgdD1lLmdldFZhbHVlKCksbj1lLmdldFBhcmVudE5vZGUoKSxyPWUuZ2V0UGFyZW50Tm9kZSgxKTtyZXR1cm4gciYmdC5xdWFzaXMmJiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIj09PW4udHlwZSYmIkpTWEVsZW1lbnQiPT09ci50eXBlJiYic3R5bGUiPT09ci5vcGVuaW5nRWxlbWVudC5uYW1lLm5hbWUmJnIub3BlbmluZ0VsZW1lbnQuYXR0cmlidXRlcy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiJqc3giPT09ZS5uYW1lLm5hbWV9KX1mdW5jdGlvbiBpc0FuZ3VsYXJDb21wb25lbnRTdHlsZXMoZSl7dmFyIHQ9ZS5nZXRQYXJlbnROb2RlKCksbj1lLmdldFBhcmVudE5vZGUoMSk7cmV0dXJuISghdHx8IkFycmF5RXhwcmVzc2lvbiIhPT10LnR5cGV8fCJQcm9wZXJ0eSIhPT1uLnR5cGV8fCFpc1Byb3BlcnR5V2l0aGluQW5ndWxhckNvbXBvbmVudERlY29yYXRvcihlLDQpfHwhbi5rZXl8fCJzdHlsZXMiIT09bi5rZXkubmFtZSl9ZnVuY3Rpb24gaXNTdHlsZWRDb21wb25lbnRzKGUpe3ZhciB0PWUuZ2V0UGFyZW50Tm9kZSgpO2lmKCF0fHwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIiE9PXQudHlwZSlyZXR1cm4hMTt2YXIgbj10LnRhZztzd2l0Y2gobi50eXBlKXtjYXNlIk1lbWJlckV4cHJlc3Npb24iOnJldHVybiBpc1N0eWxlZElkZW50aWZpZXIobi5vYmplY3QpfHxpc1N0eWxlZEV4dGVuZChuKTtjYXNlIkNhbGxFeHByZXNzaW9uIjpyZXR1cm4gaXNTdHlsZWRJZGVudGlmaWVyKG4uY2FsbGVlKXx8Ik1lbWJlckV4cHJlc3Npb24iPT09bi5jYWxsZWUudHlwZSYmKCJNZW1iZXJFeHByZXNzaW9uIj09PW4uY2FsbGVlLm9iamVjdC50eXBlJiYoaXNTdHlsZWRJZGVudGlmaWVyKG4uY2FsbGVlLm9iamVjdC5vYmplY3QpfHxpc1N0eWxlZEV4dGVuZChuLmNhbGxlZS5vYmplY3QpKXx8IkNhbGxFeHByZXNzaW9uIj09PW4uY2FsbGVlLm9iamVjdC50eXBlJiZpc1N0eWxlZElkZW50aWZpZXIobi5jYWxsZWUub2JqZWN0LmNhbGxlZSkpO2Nhc2UiSWRlbnRpZmllciI6cmV0dXJuImNzcyI9PT1uLm5hbWU7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gaXNDc3NQcm9wKGUpe3ZhciB0PWUuZ2V0UGFyZW50Tm9kZSgpLG49ZS5nZXRQYXJlbnROb2RlKDEpO3JldHVybiBuJiYiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciI9PT10LnR5cGUmJiJKU1hBdHRyaWJ1dGUiPT09bi50eXBlJiYiSlNYSWRlbnRpZmllciI9PT1uLm5hbWUudHlwZSYmImNzcyI9PT1uLm5hbWUubmFtZX1mdW5jdGlvbiBpc1N0eWxlZElkZW50aWZpZXIoZSl7cmV0dXJuIklkZW50aWZpZXIiPT09ZS50eXBlJiYic3R5bGVkIj09PWUubmFtZX1mdW5jdGlvbiBpc1N0eWxlZEV4dGVuZChlKXtyZXR1cm4vXltBLVpdLy50ZXN0KGUub2JqZWN0Lm5hbWUpJiYiZXh0ZW5kIj09PWUucHJvcGVydHkubmFtZX1mdW5jdGlvbiBpc0dyYXBoUUwoZSl7dmFyIHQ9ZS5nZXRWYWx1ZSgpLG49ZS5nZXRQYXJlbnROb2RlKCk7cmV0dXJuIHQubGVhZGluZ0NvbW1lbnRzJiZ0LmxlYWRpbmdDb21tZW50cy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiJDb21tZW50QmxvY2siPT09ZS50eXBlJiYiIEdyYXBoUUwgIj09PWUudmFsdWV9KXx8biYmKCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iPT09bi50eXBlJiYoIk1lbWJlckV4cHJlc3Npb24iPT09bi50YWcudHlwZSYmImdyYXBocWwiPT09bi50YWcub2JqZWN0Lm5hbWUmJiJleHBlcmltZW50YWwiPT09bi50YWcucHJvcGVydHkubmFtZXx8IklkZW50aWZpZXIiPT09bi50YWcudHlwZSYmKCJncWwiPT09bi50YWcubmFtZXx8ImdyYXBocWwiPT09bi50YWcubmFtZSkpfHwiQ2FsbEV4cHJlc3Npb24iPT09bi50eXBlJiYiSWRlbnRpZmllciI9PT1uLmNhbGxlZS50eXBlJiYiZ3JhcGhxbCI9PT1uLmNhbGxlZS5uYW1lKX1mdW5jdGlvbiBjbGVhbihlLHQsbil7aWYoWyJyYW5nZSIsInJhdyIsImNvbW1lbnRzIiwibGVhZGluZ0NvbW1lbnRzIiwidHJhaWxpbmdDb21tZW50cyIsImV4dHJhIiwic3RhcnQiLCJlbmQiLCJmbGFncyJdLmZvckVhY2goZnVuY3Rpb24oZSl7ZGVsZXRlIHRbZV19KSwiRW1wdHlTdGF0ZW1lbnQiPT09ZS50eXBlKXJldHVybiBudWxsO2lmKCJKU1hUZXh0Ij09PWUudHlwZSlyZXR1cm4gbnVsbDtpZigiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciI9PT1lLnR5cGUmJiJMaXRlcmFsIj09PWUuZXhwcmVzc2lvbi50eXBlJiYiICI9PT1lLmV4cHJlc3Npb24udmFsdWUpcmV0dXJuIG51bGw7aWYoIlRTUGFyYW1ldGVyUHJvcGVydHkiPT09ZS50eXBlJiZudWxsPT09ZS5hY2Nlc3NpYmlsaXR5JiYhZS5yZWFkb25seSlyZXR1cm57dHlwZToiSWRlbnRpZmllciIsbmFtZTplLnBhcmFtZXRlci5uYW1lLHR5cGVBbm5vdGF0aW9uOnQucGFyYW1ldGVyLnR5cGVBbm5vdGF0aW9uLGRlY29yYXRvcnM6dC5kZWNvcmF0b3JzfTtpZigiVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiI9PT1lLnR5cGUmJmUuc3BlY2lmaWVycyYmMD09PWUuc3BlY2lmaWVycy5sZW5ndGgmJmRlbGV0ZSB0LnNwZWNpZmllcnMsIlRTUGFyZW50aGVzaXplZFR5cGUiPT09ZS50eXBlJiYiVFNUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGVBbm5vdGF0aW9uLnR5cGUpcmV0dXJuIHQudHlwZUFubm90YXRpb24udHlwZUFubm90YXRpb247aWYoIkpTWE9wZW5pbmdFbGVtZW50Ij09PWUudHlwZSYmZGVsZXRlIHQuc2VsZkNsb3NpbmcsIkpTWEVsZW1lbnQiPT09ZS50eXBlJiZkZWxldGUgdC5jbG9zaW5nRWxlbWVudCwiUHJvcGVydHkiIT09ZS50eXBlJiYiT2JqZWN0UHJvcGVydHkiIT09ZS50eXBlJiYiTWV0aG9kRGVmaW5pdGlvbiIhPT1lLnR5cGUmJiJDbGFzc1Byb3BlcnR5IiE9PWUudHlwZSYmIlRTUHJvcGVydHlTaWduYXR1cmUiIT09ZS50eXBlJiYiT2JqZWN0VHlwZVByb3BlcnR5IiE9PWUudHlwZXx8Im9iamVjdCIhPT1fdHlwZW9mKGUua2V5KXx8IWUua2V5fHwiTGl0ZXJhbCIhPT1lLmtleS50eXBlJiYiU3RyaW5nTGl0ZXJhbCIhPT1lLmtleS50eXBlJiYiSWRlbnRpZmllciIhPT1lLmtleS50eXBlfHxkZWxldGUgdC5rZXksIk9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI9PT1lLnR5cGUmJiExPT09ZS5vcHRpb25hbCYmKHQudHlwZT0iTWVtYmVyRXhwcmVzc2lvbiIsZGVsZXRlIHQub3B0aW9uYWwpLCJKU1hFbGVtZW50Ij09PWUudHlwZSYmInN0eWxlIj09PWUub3BlbmluZ0VsZW1lbnQubmFtZS5uYW1lJiZlLm9wZW5pbmdFbGVtZW50LmF0dHJpYnV0ZXMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4ianN4Ij09PWUubmFtZS5uYW1lfSkpe3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIj09PWUudHlwZSYmIlRlbXBsYXRlTGl0ZXJhbCI9PT1lLmV4cHJlc3Npb24udHlwZX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5leHByZXNzaW9ufSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KHQucXVhc2lzKX0sW10pLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSBlLnZhbHVlfSl9IkpTWEF0dHJpYnV0ZSI9PT1lLnR5cGUmJiJjc3MiPT09ZS5uYW1lLm5hbWUmJiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIj09PWUudmFsdWUudHlwZSYmIlRlbXBsYXRlTGl0ZXJhbCI9PT1lLnZhbHVlLmV4cHJlc3Npb24udHlwZSYmdC52YWx1ZS5leHByZXNzaW9uLnF1YXNpcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgZS52YWx1ZX0pO3ZhciByPWUuZXhwcmVzc2lvbnx8ZS5jYWxsZWU7aWYoIkRlY29yYXRvciI9PT1lLnR5cGUmJiJDYWxsRXhwcmVzc2lvbiI9PT1yLnR5cGUmJiJDb21wb25lbnQiPT09ci5jYWxsZWUubmFtZSYmMT09PXIuYXJndW1lbnRzLmxlbmd0aCYmci5hcmd1bWVudHNbMF0ucHJvcGVydGllcy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiJzdHlsZXMiPT09ZS5rZXkubmFtZSYmIkFycmF5RXhwcmVzc2lvbiI9PT1lLnZhbHVlLnR5cGV9KSYmdC5leHByZXNzaW9uLmFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oZSl7IkFycmF5RXhwcmVzc2lvbiI9PT1lLnZhbHVlLnR5cGUmJmUudmFsdWUuZWxlbWVudHNbMF0ucXVhc2lzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSBlLnZhbHVlfSl9KSwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIiE9PWUudHlwZXx8Ik1lbWJlckV4cHJlc3Npb24iIT09ZS50YWcudHlwZSYmKCJJZGVudGlmaWVyIiE9PWUudGFnLnR5cGV8fCJncWwiIT09ZS50YWcubmFtZSYmImdyYXBocWwiIT09ZS50YWcubmFtZSYmImNzcyIhPT1lLnRhZy5uYW1lJiYibWQiIT09ZS50YWcubmFtZSYmIm1hcmtkb3duIiE9PWUudGFnLm5hbWUpJiYiQ2FsbEV4cHJlc3Npb24iIT09ZS50YWcudHlwZXx8dC5xdWFzaS5xdWFzaXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIGUudmFsdWV9KSwiVGVtcGxhdGVMaXRlcmFsIj09PWUudHlwZSl7KGUubGVhZGluZ0NvbW1lbnRzJiZlLmxlYWRpbmdDb21tZW50cy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiJDb21tZW50QmxvY2siPT09ZS50eXBlJiYiIEdyYXBoUUwgIj09PWUudmFsdWV9KXx8IkNhbGxFeHByZXNzaW9uIj09PW4udHlwZSYmImdyYXBocWwiPT09bi5jYWxsZWUubmFtZSkmJnQucXVhc2lzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSBlLnZhbHVlfSl9fWZ1bmN0aW9uIGhhc1ByYWdtYShlKXt2YXIgdD1PYmplY3Qua2V5cyhidWlsZC5wYXJzZShidWlsZC5leHRyYWN0KGUpKSk7cmV0dXJuLTEhPT10LmluZGV4T2YoInByZXR0aWVyIil8fC0xIT09dC5pbmRleE9mKCJmb3JtYXQiKX1mdW5jdGlvbiBpbnNlcnRQcmFnbWEkMShlKXt2YXIgdD1idWlsZC5wYXJzZVdpdGhDb21tZW50cyhidWlsZC5leHRyYWN0KGUpKSxuPU9iamVjdC5hc3NpZ24oe2Zvcm1hdDoiIn0sdC5wcmFnbWFzKSxyPWJ1aWxkLnByaW50KHtwcmFnbWFzOm4sY29tbWVudHM6dC5jb21tZW50cy5yZXBsYWNlKC9eKFxzKz9ccj9cbikrLywiIil9KSxpPWJ1aWxkLnN0cmlwKGUpO3JldHVybiByKyhpLnN0YXJ0c1dpdGgoIlxuIik/IlxuIjoiXG5cbiIpK2l9ZnVuY3Rpb24gaGFuZGxlT3duTGluZUNvbW1lbnQoZSx0LG4scixpKXt2YXIgbz1lLnByZWNlZGluZ05vZGUsYT1lLmVuY2xvc2luZ05vZGUscz1lLmZvbGxvd2luZ05vZGU7cmV0dXJuISEoaGFuZGxlTGFzdEZ1bmN0aW9uQXJnQ29tbWVudHModCxvLGEscyxlLG4pfHxoYW5kbGVNZW1iZXJFeHByZXNzaW9uQ29tbWVudHMoYSxzLGUpfHxoYW5kbGVJZlN0YXRlbWVudENvbW1lbnRzKHQsbyxhLHMsZSxuKXx8aGFuZGxlVHJ5U3RhdGVtZW50Q29tbWVudHMoYSxzLGUpfHxoYW5kbGVDbGFzc0NvbW1lbnRzKGEsbyxzLGUpfHxoYW5kbGVJbXBvcnRTcGVjaWZpZXJDb21tZW50cyhhLGUpfHxoYW5kbGVGb3JDb21tZW50cyhhLG8sZSl8fGhhbmRsZVVuaW9uVHlwZUNvbW1lbnRzKG8sYSxzLGUpfHxoYW5kbGVPbmx5Q29tbWVudHMoYSxyLGUsaSl8fGhhbmRsZUltcG9ydERlY2xhcmF0aW9uQ29tbWVudHModCxhLG8sZSxuKXx8aGFuZGxlQXNzaWdubWVudFBhdHRlcm5Db21tZW50cyhhLGUpfHxoYW5kbGVNZXRob2ROYW1lQ29tbWVudHModCxhLG8sZSxuKSl9ZnVuY3Rpb24gaGFuZGxlRW5kT2ZMaW5lQ29tbWVudChlLHQsbixyLGkpe3ZhciBvPWUucHJlY2VkaW5nTm9kZSxhPWUuZW5jbG9zaW5nTm9kZSxzPWUuZm9sbG93aW5nTm9kZTtyZXR1cm4hIShoYW5kbGVMYXN0RnVuY3Rpb25BcmdDb21tZW50cyh0LG8sYSxzLGUsbil8fGhhbmRsZUNvbmRpdGlvbmFsRXhwcmVzc2lvbkNvbW1lbnRzKGEsbyxzLGUsdCxuKXx8aGFuZGxlSW1wb3J0U3BlY2lmaWVyQ29tbWVudHMoYSxlKXx8aGFuZGxlSWZTdGF0ZW1lbnRDb21tZW50cyh0LG8sYSxzLGUsbil8fGhhbmRsZUNsYXNzQ29tbWVudHMoYSxvLHMsZSl8fGhhbmRsZUxhYmVsZWRTdGF0ZW1lbnRDb21tZW50cyhhLGUpfHxoYW5kbGVDYWxsRXhwcmVzc2lvbkNvbW1lbnRzKG8sYSxlKXx8aGFuZGxlUHJvcGVydHlDb21tZW50cyhhLGUpfHxoYW5kbGVPbmx5Q29tbWVudHMoYSxyLGUsaSl8fGhhbmRsZVR5cGVBbGlhc0NvbW1lbnRzKGEscyxlKXx8aGFuZGxlVmFyaWFibGVEZWNsYXJhdG9yQ29tbWVudHMoYSxzLGUpKX1mdW5jdGlvbiBoYW5kbGVSZW1haW5pbmdDb21tZW50KGUsdCxuLHIsaSl7dmFyIG89ZS5wcmVjZWRpbmdOb2RlLGE9ZS5lbmNsb3NpbmdOb2RlLHM9ZS5mb2xsb3dpbmdOb2RlO3JldHVybiEhKGhhbmRsZUlmU3RhdGVtZW50Q29tbWVudHModCxvLGEscyxlLG4pfHxoYW5kbGVPYmplY3RQcm9wZXJ0eUFzc2lnbm1lbnQoYSxvLGUpfHxoYW5kbGVDb21tZW50SW5FbXB0eVBhcmVucyh0LGEsZSxuKXx8aGFuZGxlTWV0aG9kTmFtZUNvbW1lbnRzKHQsYSxvLGUsbil8fGhhbmRsZU9ubHlDb21tZW50cyhhLHIsZSxpKXx8aGFuZGxlQ29tbWVudEFmdGVyQXJyb3dQYXJhbXModCxhLGUsbil8fGhhbmRsZUZ1bmN0aW9uTmFtZUNvbW1lbnRzKHQsYSxvLGUsbil8fGhhbmRsZVRTTWFwcGVkVHlwZUNvbW1lbnRzKHQsYSxvLHMsZSl8fGhhbmRsZUJyZWFrQW5kQ29udGludWVTdGF0ZW1lbnRDb21tZW50cyhhLGUpKX1mdW5jdGlvbiBhZGRCbG9ja1N0YXRlbWVudEZpcnN0Q29tbWVudChlLHQpe3ZhciBuPWUuYm9keS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIkVtcHR5U3RhdGVtZW50IiE9PWUudHlwZX0pOzA9PT1uLmxlbmd0aD9hZGREYW5nbGluZ0NvbW1lbnQkMihlLHQpOmFkZExlYWRpbmdDb21tZW50JDIoblswXSx0KX1mdW5jdGlvbiBhZGRCbG9ja09yTm90Q29tbWVudChlLHQpeyJCbG9ja1N0YXRlbWVudCI9PT1lLnR5cGU/YWRkQmxvY2tTdGF0ZW1lbnRGaXJzdENvbW1lbnQoZSx0KTphZGRMZWFkaW5nQ29tbWVudCQyKGUsdCl9ZnVuY3Rpb24gaGFuZGxlSWZTdGF0ZW1lbnRDb21tZW50cyhlLHQsbixyLGksbyl7aWYoIW58fCJJZlN0YXRlbWVudCIhPT1uLnR5cGV8fCFyKXJldHVybiExO3ZhciBhPXV0aWwuZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlcihlLGksby5sb2NFbmQpO3JldHVybiIpIj09PWE/KGFkZFRyYWlsaW5nQ29tbWVudCQyKHQsaSksITApOnQ9PT1uLmNvbnNlcXVlbnQmJnI9PT1uLmFsdGVybmF0ZT8oIkJsb2NrU3RhdGVtZW50Ij09PXQudHlwZT9hZGRUcmFpbGluZ0NvbW1lbnQkMih0LGkpOmFkZERhbmdsaW5nQ29tbWVudCQyKG4saSksITApOiJCbG9ja1N0YXRlbWVudCI9PT1yLnR5cGU/KGFkZEJsb2NrU3RhdGVtZW50Rmlyc3RDb21tZW50KHIsaSksITApOiJJZlN0YXRlbWVudCI9PT1yLnR5cGU/KGFkZEJsb2NrT3JOb3RDb21tZW50KHIuY29uc2VxdWVudCxpKSwhMCk6KCJ7Ij09PWF8fG4uY29uc2VxdWVudD09PXIpJiYoYWRkTGVhZGluZ0NvbW1lbnQkMihyLGkpLCEwKX1mdW5jdGlvbiBoYW5kbGVUcnlTdGF0ZW1lbnRDb21tZW50cyhlLHQsbil7cmV0dXJuISghZXx8IlRyeVN0YXRlbWVudCIhPT1lLnR5cGV8fCF0KSYmKCJCbG9ja1N0YXRlbWVudCI9PT10LnR5cGU/KGFkZEJsb2NrU3RhdGVtZW50Rmlyc3RDb21tZW50KHQsbiksITApOiJUcnlTdGF0ZW1lbnQiPT09dC50eXBlPyhhZGRCbG9ja09yTm90Q29tbWVudCh0LmZpbmFsaXplcixuKSwhMCk6IkNhdGNoQ2xhdXNlIj09PXQudHlwZSYmKGFkZEJsb2NrT3JOb3RDb21tZW50KHQuYm9keSxuKSwhMCkpfWZ1bmN0aW9uIGhhbmRsZU1lbWJlckV4cHJlc3Npb25Db21tZW50cyhlLHQsbil7cmV0dXJuISghZXx8Ik1lbWJlckV4cHJlc3Npb24iIT09ZS50eXBlfHwhdHx8IklkZW50aWZpZXIiIT09dC50eXBlKSYmKGFkZExlYWRpbmdDb21tZW50JDIoZSxuKSwhMCl9ZnVuY3Rpb24gaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29tbWVudHMoZSx0LG4scixpLG8pe3ZhciBhPXQmJiF1dGlsLmhhc05ld2xpbmVJblJhbmdlKGksby5sb2NFbmQodCksby5sb2NTdGFydChyKSk7cmV0dXJuISh0JiZhfHwhZXx8IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIhPT1lLnR5cGV8fCFuKSYmKGFkZExlYWRpbmdDb21tZW50JDIobixyKSwhMCl9ZnVuY3Rpb24gaGFuZGxlT2JqZWN0UHJvcGVydHlBc3NpZ25tZW50KGUsdCxuKXtyZXR1cm4hKCFlfHwiT2JqZWN0UHJvcGVydHkiIT09ZS50eXBlJiYiUHJvcGVydHkiIT09ZS50eXBlfHwhZS5zaG9ydGhhbmR8fGUua2V5IT09dHx8IkFzc2lnbm1lbnRQYXR0ZXJuIiE9PWUudmFsdWUudHlwZSkmJihhZGRUcmFpbGluZ0NvbW1lbnQkMihlLnZhbHVlLmxlZnQsbiksITApfWZ1bmN0aW9uIGhhbmRsZUNsYXNzQ29tbWVudHMoZSx0LG4scil7cmV0dXJuISghKGUmJigiQ2xhc3NEZWNsYXJhdGlvbiI9PT1lLnR5cGV8fCJDbGFzc0V4cHJlc3Npb24iPT09ZS50eXBlKSYmZS5kZWNvcmF0b3JzJiZlLmRlY29yYXRvcnMubGVuZ3RoPjApfHxuJiYiRGVjb3JhdG9yIj09PW4udHlwZSkmJihlLmRlY29yYXRvcnMmJjAhPT1lLmRlY29yYXRvcnMubGVuZ3RoP2FkZFRyYWlsaW5nQ29tbWVudCQyKGUuZGVjb3JhdG9yc1tlLmRlY29yYXRvcnMubGVuZ3RoLTFdLHIpOmFkZExlYWRpbmdDb21tZW50JDIoZSxyKSwhMCl9ZnVuY3Rpb24gaGFuZGxlTWV0aG9kTmFtZUNvbW1lbnRzKGUsdCxuLHIsaSl7cmV0dXJuIHQmJm4mJigiUHJvcGVydHkiPT09dC50eXBlfHwiTWV0aG9kRGVmaW5pdGlvbiI9PT10LnR5cGUpJiYiSWRlbnRpZmllciI9PT1uLnR5cGUmJnQua2V5PT09biYmIjoiIT09dXRpbC5nZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVyKGUsbixpLmxvY0VuZCk/KGFkZFRyYWlsaW5nQ29tbWVudCQyKG4sciksITApOiEoIW58fCF0fHwiRGVjb3JhdG9yIiE9PW4udHlwZXx8IkNsYXNzTWV0aG9kIiE9PXQudHlwZSYmIkNsYXNzUHJvcGVydHkiIT09dC50eXBlJiYiVFNBYnN0cmFjdENsYXNzUHJvcGVydHkiIT09dC50eXBlJiYiVFNBYnN0cmFjdE1ldGhvZERlZmluaXRpb24iIT09dC50eXBlJiYiTWV0aG9kRGVmaW5pdGlvbiIhPT10LnR5cGUpJiYoYWRkVHJhaWxpbmdDb21tZW50JDIobixyKSwhMCl9ZnVuY3Rpb24gaGFuZGxlRnVuY3Rpb25OYW1lQ29tbWVudHMoZSx0LG4scixpKXtyZXR1cm4iKCI9PT11dGlsLmdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXIoZSxyLGkubG9jRW5kKSYmKCEoIW58fCF0fHwiRnVuY3Rpb25EZWNsYXJhdGlvbiIhPT10LnR5cGUmJiJGdW5jdGlvbkV4cHJlc3Npb24iIT09dC50eXBlJiYiQ2xhc3NNZXRob2QiIT09dC50eXBlJiYiTWV0aG9kRGVmaW5pdGlvbiIhPT10LnR5cGUmJiJPYmplY3RNZXRob2QiIT09dC50eXBlKSYmKGFkZFRyYWlsaW5nQ29tbWVudCQyKG4sciksITApKX1mdW5jdGlvbiBoYW5kbGVDb21tZW50QWZ0ZXJBcnJvd1BhcmFtcyhlLHQsbixyKXtpZighdHx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiE9PXQudHlwZSlyZXR1cm4hMTt2YXIgaT11dGlsU2hhcmVkLmdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXJJbmRleChlLG4scik7cmV0dXJuIj0+Ij09PWUuc3Vic3RyKGksMikmJihhZGREYW5nbGluZ0NvbW1lbnQkMih0LG4pLCEwKX1mdW5jdGlvbiBoYW5kbGVDb21tZW50SW5FbXB0eVBhcmVucyhlLHQsbixyKXtyZXR1cm4iKSI9PT11dGlsLmdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXIoZSxuLHIubG9jRW5kKSYmKHQmJigoIkZ1bmN0aW9uRGVjbGFyYXRpb24iPT09dC50eXBlfHwiRnVuY3Rpb25FeHByZXNzaW9uIj09PXQudHlwZXx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PXQudHlwZSYmKCJDYWxsRXhwcmVzc2lvbiIhPT10LmJvZHkudHlwZXx8MD09PXQuYm9keS5hcmd1bWVudHMubGVuZ3RoKXx8IkNsYXNzTWV0aG9kIj09PXQudHlwZXx8Ik9iamVjdE1ldGhvZCI9PT10LnR5cGUpJiYwPT09dC5wYXJhbXMubGVuZ3RofHwiQ2FsbEV4cHJlc3Npb24iPT09dC50eXBlJiYwPT09dC5hcmd1bWVudHMubGVuZ3RoKT8oYWRkRGFuZ2xpbmdDb21tZW50JDIodCxuKSwhMCk6ISghdHx8Ik1ldGhvZERlZmluaXRpb24iIT09dC50eXBlfHwwIT09dC52YWx1ZS5wYXJhbXMubGVuZ3RoKSYmKGFkZERhbmdsaW5nQ29tbWVudCQyKHQudmFsdWUsbiksITApKX1mdW5jdGlvbiBoYW5kbGVMYXN0RnVuY3Rpb25BcmdDb21tZW50cyhlLHQsbixyLGksbyl7cmV0dXJuIHQmJiJGdW5jdGlvblR5cGVQYXJhbSI9PT10LnR5cGUmJm4mJiJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIj09PW4udHlwZSYmciYmIkZ1bmN0aW9uVHlwZVBhcmFtIiE9PXIudHlwZT8oYWRkVHJhaWxpbmdDb21tZW50JDIodCxpKSwhMCk6ISghdHx8IklkZW50aWZpZXIiIT09dC50eXBlJiYiQXNzaWdubWVudFBhdHRlcm4iIT09dC50eXBlfHwhbnx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiE9PW4udHlwZSYmIkZ1bmN0aW9uRXhwcmVzc2lvbiIhPT1uLnR5cGUmJiJGdW5jdGlvbkRlY2xhcmF0aW9uIiE9PW4udHlwZSYmIk9iamVjdE1ldGhvZCIhPT1uLnR5cGUmJiJDbGFzc01ldGhvZCIhPT1uLnR5cGV8fCIpIiE9PXV0aWwuZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlcihlLGksby5sb2NFbmQpKSYmKGFkZFRyYWlsaW5nQ29tbWVudCQyKHQsaSksITApfWZ1bmN0aW9uIGhhbmRsZUltcG9ydFNwZWNpZmllckNvbW1lbnRzKGUsdCl7cmV0dXJuISghZXx8IkltcG9ydFNwZWNpZmllciIhPT1lLnR5cGUpJiYoYWRkTGVhZGluZ0NvbW1lbnQkMihlLHQpLCEwKX1mdW5jdGlvbiBoYW5kbGVMYWJlbGVkU3RhdGVtZW50Q29tbWVudHMoZSx0KXtyZXR1cm4hKCFlfHwiTGFiZWxlZFN0YXRlbWVudCIhPT1lLnR5cGUpJiYoYWRkTGVhZGluZ0NvbW1lbnQkMihlLHQpLCEwKX1mdW5jdGlvbiBoYW5kbGVCcmVha0FuZENvbnRpbnVlU3RhdGVtZW50Q29tbWVudHMoZSx0KXtyZXR1cm4hKCFlfHwiQ29udGludWVTdGF0ZW1lbnQiIT09ZS50eXBlJiYiQnJlYWtTdGF0ZW1lbnQiIT09ZS50eXBlfHxlLmxhYmVsKSYmKGFkZFRyYWlsaW5nQ29tbWVudCQyKGUsdCksITApfWZ1bmN0aW9uIGhhbmRsZUNhbGxFeHByZXNzaW9uQ29tbWVudHMoZSx0LG4pe3JldHVybiEhKHQmJiJDYWxsRXhwcmVzc2lvbiI9PT10LnR5cGUmJmUmJnQuY2FsbGVlPT09ZSYmdC5hcmd1bWVudHMubGVuZ3RoPjApJiYoYWRkTGVhZGluZ0NvbW1lbnQkMih0LmFyZ3VtZW50c1swXSxuKSwhMCl9ZnVuY3Rpb24gaGFuZGxlVW5pb25UeXBlQ29tbWVudHMoZSx0LG4scil7cmV0dXJuISghdHx8IlVuaW9uVHlwZUFubm90YXRpb24iIT09dC50eXBlJiYiVFNVbmlvblR5cGUiIT09dC50eXBlKSYmKGFkZFRyYWlsaW5nQ29tbWVudCQyKGUsciksITApfWZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q29tbWVudHMoZSx0KXtyZXR1cm4hKCFlfHwiUHJvcGVydHkiIT09ZS50eXBlJiYiT2JqZWN0UHJvcGVydHkiIT09ZS50eXBlKSYmKGFkZExlYWRpbmdDb21tZW50JDIoZSx0KSwhMCl9ZnVuY3Rpb24gaGFuZGxlT25seUNvbW1lbnRzKGUsdCxuLHIpe3JldHVybiB0JiZ0LmJvZHkmJjA9PT10LmJvZHkubGVuZ3RoPyhyP2FkZERhbmdsaW5nQ29tbWVudCQyKHQsbik6YWRkTGVhZGluZ0NvbW1lbnQkMih0LG4pLCEwKTohKCFlfHwiUHJvZ3JhbSIhPT1lLnR5cGV8fDAhPT1lLmJvZHkubGVuZ3RofHwhZS5kaXJlY3RpdmVzfHwwIT09ZS5kaXJlY3RpdmVzLmxlbmd0aCkmJihyP2FkZERhbmdsaW5nQ29tbWVudCQyKGUsbik6YWRkTGVhZGluZ0NvbW1lbnQkMihlLG4pLCEwKX1mdW5jdGlvbiBoYW5kbGVGb3JDb21tZW50cyhlLHQsbil7cmV0dXJuISghZXx8IkZvckluU3RhdGVtZW50IiE9PWUudHlwZSYmIkZvck9mU3RhdGVtZW50IiE9PWUudHlwZSkmJihhZGRMZWFkaW5nQ29tbWVudCQyKGUsbiksITApfWZ1bmN0aW9uIGhhbmRsZUltcG9ydERlY2xhcmF0aW9uQ29tbWVudHMoZSx0LG4scixpKXtyZXR1cm4hIShuJiZ0JiYiSW1wb3J0RGVjbGFyYXRpb24iPT09dC50eXBlJiZ1dGlsLmhhc05ld2xpbmUoZSxpLmxvY0VuZChyKSkpJiYoYWRkVHJhaWxpbmdDb21tZW50JDIobixyKSwhMCl9ZnVuY3Rpb24gaGFuZGxlQXNzaWdubWVudFBhdHRlcm5Db21tZW50cyhlLHQpe3JldHVybiEoIWV8fCJBc3NpZ25tZW50UGF0dGVybiIhPT1lLnR5cGUpJiYoYWRkTGVhZGluZ0NvbW1lbnQkMihlLHQpLCEwKX1mdW5jdGlvbiBoYW5kbGVUeXBlQWxpYXNDb21tZW50cyhlLHQsbil7cmV0dXJuISghZXx8IlR5cGVBbGlhcyIhPT1lLnR5cGUpJiYoYWRkTGVhZGluZ0NvbW1lbnQkMihlLG4pLCEwKX1mdW5jdGlvbiBoYW5kbGVWYXJpYWJsZURlY2xhcmF0b3JDb21tZW50cyhlLHQsbil7cmV0dXJuISghZXx8IlZhcmlhYmxlRGVjbGFyYXRvciIhPT1lLnR5cGUmJiJBc3NpZ25tZW50RXhwcmVzc2lvbiIhPT1lLnR5cGV8fCF0fHwiT2JqZWN0RXhwcmVzc2lvbiIhPT10LnR5cGUmJiJBcnJheUV4cHJlc3Npb24iIT09dC50eXBlJiYiVGVtcGxhdGVMaXRlcmFsIiE9PXQudHlwZSYmIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiIhPT10LnR5cGUpJiYoYWRkTGVhZGluZ0NvbW1lbnQkMih0LG4pLCEwKX1mdW5jdGlvbiBoYW5kbGVUU01hcHBlZFR5cGVDb21tZW50cyhlLHQsbixyLGkpe3JldHVybiEoIXR8fCJUU01hcHBlZFR5cGUiIT09dC50eXBlKSYmKHImJiJUU1R5cGVQYXJhbWV0ZXIiPT09ci50eXBlJiZyLm5hbWU/KGFkZExlYWRpbmdDb21tZW50JDIoci5uYW1lLGkpLCEwKTohKCFufHwiVFNUeXBlUGFyYW1ldGVyIiE9PW4udHlwZXx8IW4uY29uc3RyYWludCkmJihhZGRUcmFpbGluZ0NvbW1lbnQkMihuLmNvbnN0cmFpbnQsaSksITApKX1mdW5jdGlvbiBpc0Jsb2NrQ29tbWVudChlKXtyZXR1cm4iQmxvY2siPT09ZS50eXBlfHwiQ29tbWVudEJsb2NrIj09PWUudHlwZX1mdW5jdGlvbiBoYXNDbG9zdXJlQ29tcGlsZXJUeXBlQ2FzdENvbW1lbnQoZSx0LG4pe3JldHVybiB0LmNvbW1lbnRzJiZ0LmNvbW1lbnRzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVhZGluZyYmY29tbWVudHMkMy5pc0Jsb2NrQ29tbWVudCh0KSYmdC52YWx1ZS5tYXRjaCgvXlwqXHMqQHR5cGVccyp7W159XSt9XHMqJC8pJiYiKCI9PT11dGlsLmdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXIoZSx0LG4pfSl9ZnVuY3Rpb24gbmVlZHNQYXJlbnMoZSx0KXt2YXIgbj1lLmdldFBhcmVudE5vZGUoKTtpZighbilyZXR1cm4hMTt2YXIgcj1lLmdldE5hbWUoKSxpPWUuZ2V0Tm9kZSgpO2lmKGUuZ2V0VmFsdWUoKSE9PWkpcmV0dXJuITE7aWYoaXNTdGF0ZW1lbnQoaSkpcmV0dXJuITE7aWYoaGFzQ2xvc3VyZUNvbXBpbGVyVHlwZUNhc3RDb21tZW50KHQub3JpZ2luYWxUZXh0LGksdC5sb2NFbmQpKXJldHVybiEwO2lmKCJJZGVudGlmaWVyIj09PWkudHlwZSlyZXR1cm4hMTtpZigiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iPT09bi50eXBlKXJldHVybiExO2lmKCgiQ2xhc3NEZWNsYXJhdGlvbiI9PT1uLnR5cGV8fCJDbGFzc0V4cHJlc3Npb24iPT09bi50eXBlKSYmbi5zdXBlckNsYXNzPT09aSYmKCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1pLnR5cGV8fCJBc3NpZ25tZW50RXhwcmVzc2lvbiI9PT1pLnR5cGV8fCJBd2FpdEV4cHJlc3Npb24iPT09aS50eXBlfHwiQmluYXJ5RXhwcmVzc2lvbiI9PT1pLnR5cGV8fCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09aS50eXBlfHwiTG9naWNhbEV4cHJlc3Npb24iPT09aS50eXBlfHwiTmV3RXhwcmVzc2lvbiI9PT1pLnR5cGV8fCJPYmplY3RFeHByZXNzaW9uIj09PWkudHlwZXx8IlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIj09PWkudHlwZXx8IlNlcXVlbmNlRXhwcmVzc2lvbiI9PT1pLnR5cGV8fCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iPT09aS50eXBlfHwiVW5hcnlFeHByZXNzaW9uIj09PWkudHlwZXx8IlVwZGF0ZUV4cHJlc3Npb24iPT09aS50eXBlfHwiWWllbGRFeHByZXNzaW9uIj09PWkudHlwZSkpcmV0dXJuITA7aWYoIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PW4udHlwZSYmbi5ib2R5PT09aSYmIlNlcXVlbmNlRXhwcmVzc2lvbiIhPT1pLnR5cGUmJnV0aWwuc3RhcnRzV2l0aE5vTG9va2FoZWFkVG9rZW4oaSwhMSl8fCJFeHByZXNzaW9uU3RhdGVtZW50Ij09PW4udHlwZSYmdXRpbC5zdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbihpLCEwKSlyZXR1cm4hMDtzd2l0Y2goaS50eXBlKXtjYXNlIkNhbGxFeHByZXNzaW9uIjpmb3IodmFyIG89bixhPTA7byYmIk1lbWJlckV4cHJlc3Npb24iPT09by50eXBlOylvPWUuZ2V0UGFyZW50Tm9kZSgrK2EpO3JldHVybiJOZXdFeHByZXNzaW9uIj09PW8udHlwZSYmby5jYWxsZWU9PT1lLmdldFBhcmVudE5vZGUoYS0xKTtjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOnJldHVybiJNZW1iZXJFeHByZXNzaW9uIj09PW4udHlwZSYmIm9iamVjdCI9PT1yJiZuLm9iamVjdD09PWk7Y2FzZSJVcGRhdGVFeHByZXNzaW9uIjppZigiVW5hcnlFeHByZXNzaW9uIj09PW4udHlwZSlyZXR1cm4gaS5wcmVmaXgmJigiKysiPT09aS5vcGVyYXRvciYmIisiPT09bi5vcGVyYXRvcnx8Ii0tIj09PWkub3BlcmF0b3ImJiItIj09PW4ub3BlcmF0b3IpO2Nhc2UiVW5hcnlFeHByZXNzaW9uIjpzd2l0Y2gobi50eXBlKXtjYXNlIlVuYXJ5RXhwcmVzc2lvbiI6cmV0dXJuIGkub3BlcmF0b3I9PT1uLm9wZXJhdG9yJiYoIisiPT09aS5vcGVyYXRvcnx8Ii0iPT09aS5vcGVyYXRvcik7Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4ib2JqZWN0Ij09PXImJm4ub2JqZWN0PT09aTtjYXNlIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI6cmV0dXJuITA7Y2FzZSJOZXdFeHByZXNzaW9uIjpjYXNlIkNhbGxFeHByZXNzaW9uIjpyZXR1cm4iY2FsbGVlIj09PXImJm4uY2FsbGVlPT09aTtjYXNlIkJpbmFyeUV4cHJlc3Npb24iOnJldHVybiIqKiI9PT1uLm9wZXJhdG9yJiYibGVmdCI9PT1yO2Nhc2UiVFNOb25OdWxsRXhwcmVzc2lvbiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIkJpbmFyeUV4cHJlc3Npb24iOmlmKCJVcGRhdGVFeHByZXNzaW9uIj09PW4udHlwZSlyZXR1cm4hMDtpZigiaW4iPT09aS5vcGVyYXRvciYmZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7dDspe3ZhciByPWUuZ2V0UGFyZW50Tm9kZShuKyspO2lmKCFyKXJldHVybiExO2lmKCJGb3JTdGF0ZW1lbnQiPT09ci50eXBlJiZyLmluaXQ9PT10KXJldHVybiEwO3Q9cn1yZXR1cm4hMX0oaSkpcmV0dXJuITA7Y2FzZSJUU1R5cGVBc3NlcnRpb25FeHByZXNzaW9uIjpjYXNlIlRTQXNFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjpzd2l0Y2gobi50eXBlKXtjYXNlIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6cmV0dXJuIlRTQXNFeHByZXNzaW9uIj09PWkudHlwZTtjYXNlIkNhbGxFeHByZXNzaW9uIjpjYXNlIk5ld0V4cHJlc3Npb24iOnJldHVybiJjYWxsZWUiPT09ciYmbi5jYWxsZWU9PT1pO2Nhc2UiQ2xhc3NEZWNsYXJhdGlvbiI6Y2FzZSJUU0Fic3RyYWN0Q2xhc3NEZWNsYXJhdGlvbiI6cmV0dXJuInN1cGVyQ2xhc3MiPT09ciYmbi5zdXBlckNsYXNzPT09aTtjYXNlIlRTVHlwZUFzc2VydGlvbkV4cHJlc3Npb24iOmNhc2UiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIjpjYXNlIlVuYXJ5RXhwcmVzc2lvbiI6Y2FzZSJTcHJlYWRFbGVtZW50IjpjYXNlIlNwcmVhZFByb3BlcnR5IjpjYXNlIkV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5IjpjYXNlIkJpbmRFeHByZXNzaW9uIjpjYXNlIkF3YWl0RXhwcmVzc2lvbiI6Y2FzZSJUU0FzRXhwcmVzc2lvbiI6Y2FzZSJUU05vbk51bGxFeHByZXNzaW9uIjpjYXNlIlVwZGF0ZUV4cHJlc3Npb24iOnJldHVybiEwO2Nhc2UiTWVtYmVyRXhwcmVzc2lvbiI6cmV0dXJuIm9iamVjdCI9PT1yJiZuLm9iamVjdD09PWk7Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6cmV0dXJuIG4ubGVmdD09PWkmJigiVFNUeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbiI9PT1pLnR5cGV8fCJUU0FzRXhwcmVzc2lvbiI9PT1pLnR5cGUpO2Nhc2UiRGVjb3JhdG9yIjpyZXR1cm4gbi5leHByZXNzaW9uPT09aSYmKCJUU1R5cGVBc3NlcnRpb25FeHByZXNzaW9uIj09PWkudHlwZXx8IlRTQXNFeHByZXNzaW9uIj09PWkudHlwZSk7Y2FzZSJCaW5hcnlFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjppZighaS5vcGVyYXRvciYmIlRTVHlwZUFzc2VydGlvbkV4cHJlc3Npb24iIT09aS50eXBlKXJldHVybiEwO3ZhciBzPW4ub3BlcmF0b3IsdT11dGlsLmdldFByZWNlZGVuY2UocyksYz1pLm9wZXJhdG9yLGw9dXRpbC5nZXRQcmVjZWRlbmNlKGMpO3JldHVybiB1Pmx8fCgoInx8Ij09PXN8fCI/PyI9PT1zKSYmIiYmIj09PWN8fCh1PT09bCYmInJpZ2h0Ij09PXI/KGFzc2VydC5zdHJpY3RFcXVhbChuLnJpZ2h0LGkpLCEwKTp1PT09bCYmIXV0aWwuc2hvdWxkRmxhdHRlbihzLGMpfHwodTxsJiYiJSI9PT1jPyF1dGlsLnNob3VsZEZsYXR0ZW4ocyxjKTohIXV0aWwuaXNCaXR3aXNlT3BlcmF0b3IocykpKSk7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIlRTUGFyZW50aGVzaXplZFR5cGUiOnZhciBwPWUuZ2V0UGFyZW50Tm9kZSgxKTtyZXR1cm4oIlRTVHlwZVBhcmFtZXRlciIhPT1uLnR5cGUmJiJUeXBlUGFyYW1ldGVyIiE9PW4udHlwZSYmIlZhcmlhYmxlRGVjbGFyYXRvciIhPT1uLnR5cGUmJiJUU1R5cGVBbm5vdGF0aW9uIiE9PW4udHlwZSYmIkdlbmVyaWNUeXBlQW5ub3RhdGlvbiIhPT1uLnR5cGUmJiJUU1R5cGVSZWZlcmVuY2UiIT09bi50eXBlfHwiVFNUeXBlQW5ub3RhdGlvbiIhPT1pLnR5cGVBbm5vdGF0aW9uLnR5cGV8fCJUU0Z1bmN0aW9uVHlwZSI9PT1pLnR5cGVBbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uLnR5cGV8fCJUU1R5cGVPcGVyYXRvciI9PT1wLnR5cGUpJiYiVFNQYXJlbnRoZXNpemVkVHlwZSIhPT1pLnR5cGVBbm5vdGF0aW9uLnR5cGU7Y2FzZSJTZXF1ZW5jZUV4cHJlc3Npb24iOnN3aXRjaChuLnR5cGUpe2Nhc2UiUmV0dXJuU3RhdGVtZW50IjpjYXNlIkZvclN0YXRlbWVudCI6cmV0dXJuITE7Y2FzZSJFeHByZXNzaW9uU3RhdGVtZW50IjpyZXR1cm4iZXhwcmVzc2lvbiIhPT1yO2Nhc2UiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iOnJldHVybiJib2R5IiE9PXI7ZGVmYXVsdDpyZXR1cm4hMH1jYXNlIllpZWxkRXhwcmVzc2lvbiI6aWYoIlVuYXJ5RXhwcmVzc2lvbiI9PT1uLnR5cGV8fCJBd2FpdEV4cHJlc3Npb24iPT09bi50eXBlfHwiVFNBc0V4cHJlc3Npb24iPT09bi50eXBlfHwiVFNOb25OdWxsRXhwcmVzc2lvbiI9PT1uLnR5cGUpcmV0dXJuITA7Y2FzZSJBd2FpdEV4cHJlc3Npb24iOnN3aXRjaChuLnR5cGUpe2Nhc2UiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIjpjYXNlIlVuYXJ5RXhwcmVzc2lvbiI6Y2FzZSJCaW5hcnlFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjpjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOmNhc2UiRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHkiOmNhc2UiVFNBc0V4cHJlc3Npb24iOmNhc2UiVFNOb25OdWxsRXhwcmVzc2lvbiI6cmV0dXJuITA7Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4gbi5vYmplY3Q9PT1pO2Nhc2UiTmV3RXhwcmVzc2lvbiI6Y2FzZSJDYWxsRXhwcmVzc2lvbiI6cmV0dXJuIG4uY2FsbGVlPT09aTtjYXNlIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6cmV0dXJuIG4udGVzdD09PWk7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIkFycmF5VHlwZUFubm90YXRpb24iOnJldHVybiJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIj09PW4udHlwZTtjYXNlIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIjpjYXNlIlVuaW9uVHlwZUFubm90YXRpb24iOnJldHVybiJBcnJheVR5cGVBbm5vdGF0aW9uIj09PW4udHlwZXx8Ik51bGxhYmxlVHlwZUFubm90YXRpb24iPT09bi50eXBlfHwiSW50ZXJzZWN0aW9uVHlwZUFubm90YXRpb24iPT09bi50eXBlfHwiVW5pb25UeXBlQW5ub3RhdGlvbiI9PT1uLnR5cGU7Y2FzZSJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIjpyZXR1cm4iQXJyYXlUeXBlQW5ub3RhdGlvbiI9PT1uLnR5cGU7Y2FzZSJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIjp2YXIgZj0iTnVsbGFibGVUeXBlQW5ub3RhdGlvbiI9PT1uLnR5cGU/ZS5nZXRQYXJlbnROb2RlKDEpOm47cmV0dXJuIlVuaW9uVHlwZUFubm90YXRpb24iPT09Zi50eXBlfHwiSW50ZXJzZWN0aW9uVHlwZUFubm90YXRpb24iPT09Zi50eXBlfHwiQXJyYXlUeXBlQW5ub3RhdGlvbiI9PT1mLnR5cGV8fCJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIj09PWYudHlwZTtjYXNlIlN0cmluZ0xpdGVyYWwiOmNhc2UiTnVtZXJpY0xpdGVyYWwiOmNhc2UiTGl0ZXJhbCI6aWYoInN0cmluZyI9PT10eXBlb2YgaS52YWx1ZSYmIkV4cHJlc3Npb25TdGF0ZW1lbnQiPT09bi50eXBlJiYoInR5cGVzY3JpcHQiIT09dC5wYXJzZXImJiFuLmRpcmVjdGl2ZXx8InR5cGVzY3JpcHQiPT09dC5wYXJzZXImJiIoIj09PXQub3JpZ2luYWxUZXh0LnN1YnN0cih0LmxvY1N0YXJ0KGkpLTEsMSkpKXt2YXIgZD1lLmdldFBhcmVudE5vZGUoMSk7cmV0dXJuIlByb2dyYW0iPT09ZC50eXBlfHwiQmxvY2tTdGF0ZW1lbnQiPT09ZC50eXBlfXJldHVybiJNZW1iZXJFeHByZXNzaW9uIj09PW4udHlwZSYmIm51bWJlciI9PT10eXBlb2YgaS52YWx1ZSYmIm9iamVjdCI9PT1yJiZuLm9iamVjdD09PWk7Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6dmFyIGg9ZS5nZXRQYXJlbnROb2RlKDEpO3JldHVybiJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1uLnR5cGUmJm4uYm9keT09PWl8fCgiQ2xhc3NQcm9wZXJ0eSIhPT1uLnR5cGV8fG4ua2V5IT09aXx8IW4uY29tcHV0ZWQpJiYoKCJUU1Byb3BlcnR5U2lnbmF0dXJlIiE9PW4udHlwZXx8bi5uYW1lIT09aSkmJigoIkZvclN0YXRlbWVudCIhPT1uLnR5cGV8fG4uaW5pdCE9PWkmJm4udXBkYXRlIT09aSkmJigiRXhwcmVzc2lvblN0YXRlbWVudCI9PT1uLnR5cGU/Ik9iamVjdFBhdHRlcm4iPT09aS5sZWZ0LnR5cGU6KCJUU1Byb3BlcnR5U2lnbmF0dXJlIiE9PW4udHlwZXx8bi5rZXkhPT1pKSYmKCJBc3NpZ25tZW50RXhwcmVzc2lvbiIhPT1uLnR5cGUmJigiU2VxdWVuY2VFeHByZXNzaW9uIiE9PW4udHlwZXx8IWh8fCJGb3JTdGF0ZW1lbnQiIT09aC50eXBlfHxoLmluaXQhPT1uJiZoLnVwZGF0ZSE9PW4pKSkpKTtjYXNlIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6c3dpdGNoKG4udHlwZSl7Y2FzZSJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iOmNhc2UiVW5hcnlFeHByZXNzaW9uIjpjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOmNhc2UiRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHkiOmNhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6Y2FzZSJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iOmNhc2UiQXdhaXRFeHByZXNzaW9uIjpjYXNlIkpTWFNwcmVhZEF0dHJpYnV0ZSI6Y2FzZSJUU1R5cGVBc3NlcnRpb25FeHByZXNzaW9uIjpjYXNlIlR5cGVDYXN0RXhwcmVzc2lvbiI6Y2FzZSJUU0FzRXhwcmVzc2lvbiI6Y2FzZSJUU05vbk51bGxFeHByZXNzaW9uIjpyZXR1cm4hMDtjYXNlIk5ld0V4cHJlc3Npb24iOmNhc2UiQ2FsbEV4cHJlc3Npb24iOnJldHVybiJjYWxsZWUiPT09ciYmbi5jYWxsZWU9PT1pO2Nhc2UiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjpyZXR1cm4idGVzdCI9PT1yJiZuLnRlc3Q9PT1pO2Nhc2UiTWVtYmVyRXhwcmVzc2lvbiI6cmV0dXJuIm9iamVjdCI9PT1yJiZuLm9iamVjdD09PWk7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIkZ1bmN0aW9uRXhwcmVzc2lvbiI6c3dpdGNoKG4udHlwZSl7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6cmV0dXJuImNhbGxlZSI9PT1yO2Nhc2UiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIjpjYXNlIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIjpzd2l0Y2gobi50eXBlKXtjYXNlIkNhbGxFeHByZXNzaW9uIjpjYXNlIk5ld0V4cHJlc3Npb24iOnJldHVybiJjYWxsZWUiPT09cjtjYXNlIk1lbWJlckV4cHJlc3Npb24iOnJldHVybiJvYmplY3QiPT09cjtjYXNlIlRTQXNFeHByZXNzaW9uIjpjYXNlIkJpbmRFeHByZXNzaW9uIjpjYXNlIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI6Y2FzZSJVbmFyeUV4cHJlc3Npb24iOmNhc2UiTG9naWNhbEV4cHJlc3Npb24iOmNhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJBd2FpdEV4cHJlc3Npb24iOmNhc2UiVFNUeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbiI6cmV0dXJuITA7Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnJldHVybiJ0ZXN0Ij09PXI7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIkNsYXNzRXhwcmVzc2lvbiI6cmV0dXJuIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI9PT1uLnR5cGU7Y2FzZSJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iOnJldHVybiJNZW1iZXJFeHByZXNzaW9uIj09PW4udHlwZX1yZXR1cm4hMX1mdW5jdGlvbiBpc1N0YXRlbWVudChlKXtyZXR1cm4iQmxvY2tTdGF0ZW1lbnQiPT09ZS50eXBlfHwiQnJlYWtTdGF0ZW1lbnQiPT09ZS50eXBlfHwiQ2xhc3NCb2R5Ij09PWUudHlwZXx8IkNsYXNzRGVjbGFyYXRpb24iPT09ZS50eXBlfHwiQ2xhc3NNZXRob2QiPT09ZS50eXBlfHwiQ2xhc3NQcm9wZXJ0eSI9PT1lLnR5cGV8fCJDbGFzc1ByaXZhdGVQcm9wZXJ0eSI9PT1lLnR5cGV8fCJDb250aW51ZVN0YXRlbWVudCI9PT1lLnR5cGV8fCJEZWJ1Z2dlclN0YXRlbWVudCI9PT1lLnR5cGV8fCJEZWNsYXJlQ2xhc3MiPT09ZS50eXBlfHwiRGVjbGFyZUV4cG9ydEFsbERlY2xhcmF0aW9uIj09PWUudHlwZXx8IkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiI9PT1lLnR5cGV8fCJEZWNsYXJlRnVuY3Rpb24iPT09ZS50eXBlfHwiRGVjbGFyZUludGVyZmFjZSI9PT1lLnR5cGV8fCJEZWNsYXJlTW9kdWxlIj09PWUudHlwZXx8IkRlY2xhcmVNb2R1bGVFeHBvcnRzIj09PWUudHlwZXx8IkRlY2xhcmVWYXJpYWJsZSI9PT1lLnR5cGV8fCJEb1doaWxlU3RhdGVtZW50Ij09PWUudHlwZXx8IkV4cG9ydEFsbERlY2xhcmF0aW9uIj09PWUudHlwZXx8IkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI9PT1lLnR5cGV8fCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIj09PWUudHlwZXx8IkV4cHJlc3Npb25TdGF0ZW1lbnQiPT09ZS50eXBlfHwiRm9yQXdhaXRTdGF0ZW1lbnQiPT09ZS50eXBlfHwiRm9ySW5TdGF0ZW1lbnQiPT09ZS50eXBlfHwiRm9yT2ZTdGF0ZW1lbnQiPT09ZS50eXBlfHwiRm9yU3RhdGVtZW50Ij09PWUudHlwZXx8IkZ1bmN0aW9uRGVjbGFyYXRpb24iPT09ZS50eXBlfHwiSWZTdGF0ZW1lbnQiPT09ZS50eXBlfHwiSW1wb3J0RGVjbGFyYXRpb24iPT09ZS50eXBlfHwiSW50ZXJmYWNlRGVjbGFyYXRpb24iPT09ZS50eXBlfHwiTGFiZWxlZFN0YXRlbWVudCI9PT1lLnR5cGV8fCJNZXRob2REZWZpbml0aW9uIj09PWUudHlwZXx8IlJldHVyblN0YXRlbWVudCI9PT1lLnR5cGV8fCJTd2l0Y2hTdGF0ZW1lbnQiPT09ZS50eXBlfHwiVGhyb3dTdGF0ZW1lbnQiPT09ZS50eXBlfHwiVHJ5U3RhdGVtZW50Ij09PWUudHlwZXx8IlRTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uIj09PWUudHlwZXx8IlRTRW51bURlY2xhcmF0aW9uIj09PWUudHlwZXx8IlRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24iPT09ZS50eXBlfHwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiI9PT1lLnR5cGV8fCJUU01vZHVsZURlY2xhcmF0aW9uIj09PWUudHlwZXx8IlRTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24iPT09ZS50eXBlfHwiVHlwZUFsaWFzIj09PWUudHlwZXx8IlZhcmlhYmxlRGVjbGFyYXRpb24iPT09ZS50eXBlfHwiV2hpbGVTdGF0ZW1lbnQiPT09ZS50eXBlfHwiV2l0aFN0YXRlbWVudCI9PT1lLnR5cGV9ZnVuY3Rpb24gc2hvdWxkUHJpbnRDb21tYShlLHQpe3N3aXRjaCh0PXR8fCJlczUiLGUudHJhaWxpbmdDb21tYSl7Y2FzZSJhbGwiOmlmKCJhbGwiPT09dClyZXR1cm4hMDtjYXNlImVzNSI6aWYoImVzNSI9PT10KXJldHVybiEwO2Nhc2Uibm9uZSI6ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gZ2VuZXJpY1ByaW50JDEoZSx0LG4scil7dmFyIGk9ZS5nZXRWYWx1ZSgpLG89ITEsYT1wcmludFBhdGhOb1BhcmVucyhlLHQsbixyKTtpZighaXx8aXNFbXB0eSQxKGEpKXJldHVybiBhO3ZhciBzPVtdO2lmKGkuZGVjb3JhdG9ycyYmaS5kZWNvcmF0b3JzLmxlbmd0aD4wJiYhZ2V0UGFyZW50RXhwb3J0RGVjbGFyYXRpb24kMShlKSl7dmFyIHU9aGFyZGxpbmUkMztlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRWYWx1ZSgpO3Q9dC5leHByZXNzaW9uP3QuZXhwcmVzc2lvbjp0LmNhbGxlZSwxIT09aS5kZWNvcmF0b3JzLmxlbmd0aHx8IkNsYXNzRGVjbGFyYXRpb24iPT09aS50eXBlfHwiTWV0aG9kRGVmaW5pdGlvbiI9PT1pLnR5cGV8fCJDbGFzc01ldGhvZCI9PT1pLnR5cGV8fCJJZGVudGlmaWVyIiE9PXQudHlwZSYmIk1lbWJlckV4cHJlc3Npb24iIT09dC50eXBlJiYiT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIiE9PXQudHlwZSYmKCJDYWxsRXhwcmVzc2lvbiIhPT10LnR5cGUmJiJPcHRpb25hbENhbGxFeHByZXNzaW9uIiE9PXQudHlwZXx8MCE9PXQuYXJndW1lbnRzLmxlbmd0aCYmKDEhPT10LmFyZ3VtZW50cy5sZW5ndGh8fCFpc1N0cmluZ0xpdGVyYWwodC5hcmd1bWVudHNbMF0pJiYiSWRlbnRpZmllciIhPT10LmFyZ3VtZW50c1swXS50eXBlJiYiTWVtYmVyRXhwcmVzc2lvbiIhPT10LmFyZ3VtZW50c1swXS50eXBlJiYiT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIiE9PXQuYXJndW1lbnRzWzBdLnR5cGUpKXx8KHU9bGluZSQzKSxzLnB1c2gobihlKSx1KX0sImRlY29yYXRvcnMiKX1lbHNlIGlzRXhwb3J0RGVjbGFyYXRpb24kMShpKSYmaS5kZWNsYXJhdGlvbiYmaS5kZWNsYXJhdGlvbi5kZWNvcmF0b3JzP2UuZWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmdldFZhbHVlKCkscj0iRGVjb3JhdG9yIj09PXQudHlwZT8iIjoiQCI7cy5wdXNoKHIsbihlKSxoYXJkbGluZSQzKX0sImRlY2xhcmF0aW9uIiwiZGVjb3JhdG9ycyIpOm89bmVlZHNQYXJlbnNfMShlLHQpO3ZhciBjPVtdO3JldHVybiBvJiZjLnVuc2hpZnQoIigiKSxjLnB1c2goYSksbyYmYy5wdXNoKCIpIikscy5sZW5ndGg+MD9ncm91cCQxKGNvbmNhdCQ0KHMuY29uY2F0KGMpKSk6Y29uY2F0JDQoYyl9ZnVuY3Rpb24gaGFzUHJldHRpZXJJZ25vcmUoZSl7cmV0dXJuIGhhc0lnbm9yZUNvbW1lbnQkMShlKXx8aGFzSnN4SWdub3JlQ29tbWVudChlKX1mdW5jdGlvbiBoYXNKc3hJZ25vcmVDb21tZW50KGUpe3ZhciB0PWUuZ2V0VmFsdWUoKSxuPWUuZ2V0UGFyZW50Tm9kZSgpO2lmKCFufHwhdHx8IWlzSlNYTm9kZSh0KXx8IWlzSlNYTm9kZShuKSlyZXR1cm4hMTtmb3IodmFyIHI9bi5jaGlsZHJlbi5pbmRleE9mKHQpLGk9bnVsbCxvPXI7bz4wO28tLSl7dmFyIGE9bi5jaGlsZHJlbltvLTFdO2lmKCJKU1hUZXh0IiE9PWEudHlwZXx8aXNNZWFuaW5nZnVsSlNYVGV4dChhKSl7aT1hO2JyZWFrfX1yZXR1cm4gaSYmIkpTWEV4cHJlc3Npb25Db250YWluZXIiPT09aS50eXBlJiYiSlNYRW1wdHlFeHByZXNzaW9uIj09PWkuZXhwcmVzc2lvbi50eXBlJiZpLmV4cHJlc3Npb24uY29tbWVudHMmJmkuZXhwcmVzc2lvbi5jb21tZW50cy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiJwcmV0dGllci1pZ25vcmUiPT09ZS52YWx1ZS50cmltKCl9KX1mdW5jdGlvbiBmb3JtYXRUZXJuYXJ5T3BlcmF0b3IoZSx0LG4scil7dmFyIGksbyxhPWUuZ2V0VmFsdWUoKSxzPVtdLHU9T2JqZWN0LmFzc2lnbih7YmVmb3JlUGFydHM6ZnVuY3Rpb24oKXtyZXR1cm5bIiJdfSxhZnRlclBhcnRzOmZ1bmN0aW9uKCl7cmV0dXJuWyIiXX0sc2hvdWxkQ2hlY2tKc3g6ITAsb3BlcmF0b3JOYW1lOiJDb25kaXRpb25hbEV4cHJlc3Npb24iLGNvbnNlcXVlbnROb2RlOiJjb25zZXF1ZW50IixhbHRlcm5hdGVOb2RlOiJhbHRlcm5hdGUiLHRlc3ROb2RlOiJ0ZXN0IixicmVha05lc3RlZDohMH0scnx8e30pLGM9ITEsbD1lLmdldFBhcmVudE5vZGUoKSxwPWwudHlwZT09PXUub3BlcmF0b3JOYW1lLGY9MDtkb3tvPWl8fGEsaT1lLmdldFBhcmVudE5vZGUoZiksZisrfXdoaWxlKGkmJmkudHlwZT09PXUub3BlcmF0b3JOYW1lKTt2YXIgZD1pfHxsLGg9bztpZih1LnNob3VsZENoZWNrSnN4JiZpc0pTWE5vZGUoYVt1LnRlc3ROb2RlXSl8fGlzSlNYTm9kZShhW3UuY29uc2VxdWVudE5vZGVdKXx8aXNKU1hOb2RlKGFbdS5hbHRlcm5hdGVOb2RlXSl8fGNvbmRpdGlvbmFsRXhwcmVzc2lvbkNoYWluQ29udGFpbnNKU1goaCkpe2M9ITAscD0hMDt2YXIgbT1mdW5jdGlvbihlKXtyZXR1cm4gY29uY2F0JDQoW2lmQnJlYWskMSgiKCIsIiIpLGluZGVudCQyKGNvbmNhdCQ0KFtzb2Z0bGluZSQxLGVdKSksc29mdGxpbmUkMSxpZkJyZWFrJDEoIikiLCIiKV0pfSxnPWZ1bmN0aW9uKGUpe3JldHVybiJOdWxsTGl0ZXJhbCI9PT1lLnR5cGV8fCJMaXRlcmFsIj09PWUudHlwZSYmbnVsbD09PWUudmFsdWV9O3MucHVzaCgiID8gIixnKGFbdS5jb25zZXF1ZW50Tm9kZV0pP2UuY2FsbChuLHUuY29uc2VxdWVudE5vZGUpOm0oZS5jYWxsKG4sdS5jb25zZXF1ZW50Tm9kZSkpLCIgOiAiLGFbdS5hbHRlcm5hdGVOb2RlXS50eXBlPT09dS5vcGVyYXRvck5hbWV8fGcoYVt1LmFsdGVybmF0ZU5vZGVdKT9lLmNhbGwobix1LmFsdGVybmF0ZU5vZGUpOm0oZS5jYWxsKG4sdS5hbHRlcm5hdGVOb2RlKSkpfWVsc2V7dmFyIHk9Y29uY2F0JDQoW2xpbmUkMywiPyAiLGFbdS5jb25zZXF1ZW50Tm9kZV0udHlwZT09PXUub3BlcmF0b3JOYW1lP2lmQnJlYWskMSgiIiwiKCIpOiIiLGFsaWduJDEoMixlLmNhbGwobix1LmNvbnNlcXVlbnROb2RlKSksYVt1LmNvbnNlcXVlbnROb2RlXS50eXBlPT09dS5vcGVyYXRvck5hbWU/aWZCcmVhayQxKCIiLCIpIik6IiIsbGluZSQzLCI6ICIsYWxpZ24kMSgyLGUuY2FsbChuLHUuYWx0ZXJuYXRlTm9kZSkpXSk7cy5wdXNoKGwudHlwZT09PXUub3BlcmF0b3JOYW1lP3QudXNlVGFicz9kZWRlbnQkMihpbmRlbnQkMih5KSk6YWxpZ24kMShNYXRoLm1heCgwLHQudGFiV2lkdGgtMikseSk6eSl9dmFyIHY9IWMmJigiTWVtYmVyRXhwcmVzc2lvbiI9PT1sLnR5cGV8fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09bC50eXBlKSYmIWwuY29tcHV0ZWQ7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB1LmJyZWFrTmVzdGVkP2w9PT1kP2dyb3VwJDEoZSk6ZTpncm91cCQxKGUpfShjb25jYXQkNChbXS5jb25jYXQodS5iZWZvcmVQYXJ0cygpLHA/Y29uY2F0JDQocyk6aW5kZW50JDIoY29uY2F0JDQocykpLHUuYWZ0ZXJQYXJ0cyh2KSkpKX1mdW5jdGlvbiBnZXRUeXBlU2NyaXB0TWFwcGVkVHlwZU1vZGlmaWVyKGUsdCl7cmV0dXJuIlRTUGx1c1Rva2VuIj09PWUudHlwZT8iKyIrdDoiVFNNaW51c1Rva2VuIj09PWUudHlwZT8iLSIrdDp0fWZ1bmN0aW9uIHByaW50UGF0aE5vUGFyZW5zKGUsdCxuLHIpe3ZhciBpPWUuZ2V0VmFsdWUoKSxvPXQuc2VtaT8iOyI6IiI7aWYoIWkpcmV0dXJuIiI7aWYoInN0cmluZyI9PT10eXBlb2YgaSlyZXR1cm4gaTt2YXIgYT1bXTtzd2l0Y2goaS50eXBlKXtjYXNlIkZpbGUiOnJldHVybiBpLnByb2dyYW0mJmkucHJvZ3JhbS5pbnRlcnByZXRlciYmYS5wdXNoKGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxsKG4sImludGVycHJldGVyIil9LCJwcm9ncmFtIikpLGEucHVzaChlLmNhbGwobiwicHJvZ3JhbSIpKSxjb25jYXQkNChhKTtjYXNlIlByb2dyYW0iOnJldHVybiBpLmRpcmVjdGl2ZXMmJmUuZWFjaChmdW5jdGlvbihlKXthLnB1c2gobihlKSxvLGhhcmRsaW5lJDMpLGlzTmV4dExpbmVFbXB0eSQyKHQub3JpZ2luYWxUZXh0LGUuZ2V0VmFsdWUoKSx0KSYmYS5wdXNoKGhhcmRsaW5lJDMpfSwiZGlyZWN0aXZlcyIpLGEucHVzaChlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50U3RhdGVtZW50U2VxdWVuY2UoZSx0LG4pfSwiYm9keSIpKSxhLnB1c2goY29tbWVudHMucHJpbnREYW5nbGluZ0NvbW1lbnRzKGUsdCwhMCkpLChpLmJvZHkubGVuZ3RofHxpLmNvbW1lbnRzKSYmYS5wdXNoKGhhcmRsaW5lJDMpLGNvbmNhdCQ0KGEpO2Nhc2UiRW1wdHlTdGF0ZW1lbnQiOnJldHVybiIiO2Nhc2UiRXhwcmVzc2lvblN0YXRlbWVudCI6cmV0dXJuIGNvbmNhdCQ0KGkuZGlyZWN0aXZlP1tub2RlU3RyKGkuZXhwcmVzc2lvbix0LCEwKSxvXTpbZS5jYWxsKG4sImV4cHJlc3Npb24iKSxpc1RoZU9ubHlKU1hFbGVtZW50SW5NYXJrZG93bih0LGUpPyIiOm9dKTtjYXNlIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIjpyZXR1cm4gY29uY2F0JDQoWyIoIixlLmNhbGwobiwiZXhwcmVzc2lvbiIpLCIpIl0pO2Nhc2UiQXNzaWdubWVudEV4cHJlc3Npb24iOnJldHVybiBwcmludEFzc2lnbm1lbnQoaS5sZWZ0LGUuY2FsbChuLCJsZWZ0IiksY29uY2F0JDQoWyIgIixpLm9wZXJhdG9yXSksaS5yaWdodCxlLmNhbGwobiwicmlnaHQiKSx0KTtjYXNlIkJpbmFyeUV4cHJlc3Npb24iOmNhc2UiTG9naWNhbEV4cHJlc3Npb24iOnZhciBzPWUuZ2V0UGFyZW50Tm9kZSgpLHU9ZS5nZXRQYXJlbnROb2RlKDEpLGM9aSE9PXMuYm9keSYmKCJJZlN0YXRlbWVudCI9PT1zLnR5cGV8fCJXaGlsZVN0YXRlbWVudCI9PT1zLnR5cGV8fCJEb1doaWxlU3RhdGVtZW50Ij09PXMudHlwZSksbD1wcmludEJpbmFyeWlzaEV4cHJlc3Npb25zKGUsbix0LCExLGMpO2lmKGMpcmV0dXJuIGNvbmNhdCQ0KGwpO2lmKCJVbmFyeUV4cHJlc3Npb24iPT09cy50eXBlfHwoIk1lbWJlckV4cHJlc3Npb24iPT09cy50eXBlfHwiT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIj09PXMudHlwZSkmJiFzLmNvbXB1dGVkKXJldHVybiBncm91cCQxKGNvbmNhdCQ0KFtpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxjb25jYXQkNChsKV0pKSxzb2Z0bGluZSQxXSkpO3ZhciBwPSJSZXR1cm5TdGF0ZW1lbnQiPT09cy50eXBlfHwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciI9PT1zLnR5cGUmJiJKU1hBdHRyaWJ1dGUiPT09dS50eXBlfHxpPT09cy5ib2R5JiYiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iPT09cy50eXBlfHxpIT09cy5ib2R5JiYiRm9yU3RhdGVtZW50Ij09PXMudHlwZXx8IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI9PT1zLnR5cGUmJiJSZXR1cm5TdGF0ZW1lbnQiIT09dS50eXBlLGY9IkFzc2lnbm1lbnRFeHByZXNzaW9uIj09PXMudHlwZXx8IlZhcmlhYmxlRGVjbGFyYXRvciI9PT1zLnR5cGV8fCJDbGFzc1Byb3BlcnR5Ij09PXMudHlwZXx8IlRTQWJzdHJhY3RDbGFzc1Byb3BlcnR5Ij09PXMudHlwZXx8IkNsYXNzUHJpdmF0ZVByb3BlcnR5Ij09PXMudHlwZXx8Ik9iamVjdFByb3BlcnR5Ij09PXMudHlwZXx8IlByb3BlcnR5Ij09PXMudHlwZSxkPWlzQmluYXJ5aXNoKGkubGVmdCkmJnNob3VsZEZsYXR0ZW4kMShpLm9wZXJhdG9yLGkubGVmdC5vcGVyYXRvcik7aWYocHx8c2hvdWxkSW5saW5lTG9naWNhbEV4cHJlc3Npb24oaSkmJiFkfHwhc2hvdWxkSW5saW5lTG9naWNhbEV4cHJlc3Npb24oaSkmJmYpcmV0dXJuIGdyb3VwJDEoY29uY2F0JDQobCkpO3ZhciBoPWNvbmNhdCQ0KGwuc2xpY2UoMSkpO3JldHVybiBncm91cCQxKGNvbmNhdCQ0KFtsLmxlbmd0aD4wP2xbMF06IiIsaW5kZW50JDIoaCldKSk7Y2FzZSJBc3NpZ25tZW50UGF0dGVybiI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwibGVmdCIpLCIgPSAiLGUuY2FsbChuLCJyaWdodCIpXSk7Y2FzZSJUU1R5cGVBc3NlcnRpb25FeHByZXNzaW9uIjp2YXIgbT0hKCJBcnJheUV4cHJlc3Npb24iPT09aS5leHByZXNzaW9uLnR5cGV8fCJPYmplY3RFeHByZXNzaW9uIj09PWkuZXhwcmVzc2lvbi50eXBlKSxnPWdyb3VwJDEoY29uY2F0JDQoWyI8IixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwidHlwZUFubm90YXRpb24iKV0pKSxzb2Z0bGluZSQxLCI+Il0pKSx5PWNvbmNhdCQ0KFtpZkJyZWFrJDEoIigiKSxpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwiZXhwcmVzc2lvbiIpXSkpLHNvZnRsaW5lJDEsaWZCcmVhayQxKCIpIildKTtyZXR1cm4gbT9jb25kaXRpb25hbEdyb3VwJDEoW2NvbmNhdCQ0KFtnLGUuY2FsbChuLCJleHByZXNzaW9uIildKSxjb25jYXQkNChbZyxncm91cCQxKHkse3Nob3VsZEJyZWFrOiEwfSldKSxjb25jYXQkNChbZyxlLmNhbGwobiwiZXhwcmVzc2lvbiIpXSldKTpncm91cCQxKGNvbmNhdCQ0KFtnLGUuY2FsbChuLCJleHByZXNzaW9uIildKSk7Y2FzZSJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iOmNhc2UiTWVtYmVyRXhwcmVzc2lvbiI6dmFyIHYsYj1lLmdldFBhcmVudE5vZGUoKSx4PTA7ZG97dj1lLmdldFBhcmVudE5vZGUoeCkseCsrfXdoaWxlKHYmJigiTWVtYmVyRXhwcmVzc2lvbiI9PT12LnR5cGV8fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09di50eXBlfHwiVFNOb25OdWxsRXhwcmVzc2lvbiI9PT12LnR5cGUpKTt2YXIgQz12JiYoIk5ld0V4cHJlc3Npb24iPT09di50eXBlfHwiQmluZEV4cHJlc3Npb24iPT09di50eXBlfHwiVmFyaWFibGVEZWNsYXJhdG9yIj09PXYudHlwZSYmIklkZW50aWZpZXIiIT09di5pZC50eXBlfHwiQXNzaWdubWVudEV4cHJlc3Npb24iPT09di50eXBlJiYiSWRlbnRpZmllciIhPT12LmxlZnQudHlwZSl8fGkuY29tcHV0ZWR8fCJJZGVudGlmaWVyIj09PWkub2JqZWN0LnR5cGUmJiJJZGVudGlmaWVyIj09PWkucHJvcGVydHkudHlwZSYmIk1lbWJlckV4cHJlc3Npb24iIT09Yi50eXBlJiYiT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIiE9PWIudHlwZTtyZXR1cm4gY29uY2F0JDQoW2UuY2FsbChuLCJvYmplY3QiKSxDP3ByaW50TWVtYmVyTG9va3VwKGUsdCxuKTpncm91cCQxKGluZGVudCQyKGNvbmNhdCQ0KFtzb2Z0bGluZSQxLHByaW50TWVtYmVyTG9va3VwKGUsdCxuKV0pKSldKTtjYXNlIk1ldGFQcm9wZXJ0eSI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwibWV0YSIpLCIuIixlLmNhbGwobiwicHJvcGVydHkiKV0pO2Nhc2UiQmluZEV4cHJlc3Npb24iOnJldHVybiBpLm9iamVjdCYmYS5wdXNoKGUuY2FsbChuLCJvYmplY3QiKSksYS5wdXNoKGdyb3VwJDEoaW5kZW50JDIoY29uY2F0JDQoW3NvZnRsaW5lJDEscHJpbnRCaW5kRXhwcmVzc2lvbkNhbGxlZShlLHQsbildKSkpKSxjb25jYXQkNChhKTtjYXNlIklkZW50aWZpZXIiOnJldHVybiBjb25jYXQkNChbaS5uYW1lLHByaW50T3B0aW9uYWxUb2tlbihlKSxwcmludFR5cGVBbm5vdGF0aW9uKGUsdCxuKV0pO2Nhc2UiU3ByZWFkRWxlbWVudCI6Y2FzZSJTcHJlYWRFbGVtZW50UGF0dGVybiI6Y2FzZSJSZXN0UHJvcGVydHkiOmNhc2UiRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5IjpjYXNlIkV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5IjpjYXNlIlNwcmVhZFByb3BlcnR5IjpjYXNlIlNwcmVhZFByb3BlcnR5UGF0dGVybiI6Y2FzZSJSZXN0RWxlbWVudCI6Y2FzZSJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiOnJldHVybiBjb25jYXQkNChbIi4uLiIsZS5jYWxsKG4sImFyZ3VtZW50IikscHJpbnRUeXBlQW5ub3RhdGlvbihlLHQsbildKTtjYXNlIkZ1bmN0aW9uRGVjbGFyYXRpb24iOmNhc2UiRnVuY3Rpb25FeHByZXNzaW9uIjpyZXR1cm4gaXNOb2RlU3RhcnRpbmdXaXRoRGVjbGFyZShpLHQpJiZhLnB1c2goImRlY2xhcmUgIiksYS5wdXNoKHByaW50RnVuY3Rpb25EZWNsYXJhdGlvbihlLG4sdCkpLGkuYm9keXx8YS5wdXNoKG8pLGNvbmNhdCQ0KGEpO2Nhc2UiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iOmkuYXN5bmMmJmEucHVzaCgiYXN5bmMgIiksc2hvdWxkUHJpbnRQYXJhbXNXaXRob3V0UGFyZW5zKGUsdCk/YS5wdXNoKGUuY2FsbChuLCJwYXJhbXMiLDApKTphLnB1c2goZ3JvdXAkMShjb25jYXQkNChbcHJpbnRGdW5jdGlvblBhcmFtcyhlLG4sdCxyJiYoci5leHBhbmRMYXN0QXJnfHxyLmV4cGFuZEZpcnN0QXJnKSwhMCkscHJpbnRSZXR1cm5UeXBlKGUsbix0KV0pKSk7dmFyIEU9Y29tbWVudHMucHJpbnREYW5nbGluZ0NvbW1lbnRzKGUsdCwhMCxmdW5jdGlvbihlKXt2YXIgbj1nZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVySW5kZXgkMih0Lm9yaWdpbmFsVGV4dCxlLHQpO3JldHVybiI9PiI9PT10Lm9yaWdpbmFsVGV4dC5zdWJzdHIobiwyKX0pO0UmJmEucHVzaCgiICIsRSksYS5wdXNoKCIgPT4iKTt2YXIgRD1lLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxyKX0sImJvZHkiKTtpZighaGFzTGVhZGluZ093bkxpbmVDb21tZW50KHQub3JpZ2luYWxUZXh0LGkuYm9keSx0KSYmKCJBcnJheUV4cHJlc3Npb24iPT09aS5ib2R5LnR5cGV8fCJPYmplY3RFeHByZXNzaW9uIj09PWkuYm9keS50eXBlfHwiQmxvY2tTdGF0ZW1lbnQiPT09aS5ib2R5LnR5cGV8fGlzSlNYTm9kZShpLmJvZHkpfHxpc1RlbXBsYXRlT25JdHNPd25MaW5lKGkuYm9keSx0Lm9yaWdpbmFsVGV4dCx0KXx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PWkuYm9keS50eXBlfHwiRG9FeHByZXNzaW9uIj09PWkuYm9keS50eXBlKSlyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbY29uY2F0JDQoYSksIiAiLERdKSk7aWYoIlNlcXVlbmNlRXhwcmVzc2lvbiI9PT1pLmJvZHkudHlwZSlyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbY29uY2F0JDQoYSksZ3JvdXAkMShjb25jYXQkNChbIiAoIixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxEXSkpLHNvZnRsaW5lJDEsIikiXSkpXSkpO3ZhciB3PShyJiZyLmV4cGFuZExhc3RBcmd8fCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIj09PWUuZ2V0UGFyZW50Tm9kZSgpLnR5cGUpJiYhKGkuY29tbWVudHMmJmkuY29tbWVudHMubGVuZ3RoKSxTPXImJnIuZXhwYW5kTGFzdEFyZyYmc2hvdWxkUHJpbnRDb21tYSh0LCJhbGwiKSxrPSJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09aS5ib2R5LnR5cGUmJiFzdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbiQxKGkuYm9keSwhMSk7cmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoW2NvbmNhdCQ0KGEpLGdyb3VwJDEoY29uY2F0JDQoW2luZGVudCQyKGNvbmNhdCQ0KFtsaW5lJDMsaz9pZkJyZWFrJDEoIiIsIigiKToiIixELGs/aWZCcmVhayQxKCIiLCIpIik6IiJdKSksdz9jb25jYXQkNChbaWZCcmVhayQxKFM/IiwiOiIiKSxzb2Z0bGluZSQxXSk6IiJdKSldKSk7Y2FzZSJNZXRob2REZWZpbml0aW9uIjpjYXNlIlRTQWJzdHJhY3RNZXRob2REZWZpbml0aW9uIjpyZXR1cm4gaS5hY2Nlc3NpYmlsaXR5JiZhLnB1c2goaS5hY2Nlc3NpYmlsaXR5KyIgIiksaS5zdGF0aWMmJmEucHVzaCgic3RhdGljICIpLCJUU0Fic3RyYWN0TWV0aG9kRGVmaW5pdGlvbiI9PT1pLnR5cGUmJmEucHVzaCgiYWJzdHJhY3QgIiksYS5wdXNoKHByaW50TWV0aG9kKGUsdCxuKSksY29uY2F0JDQoYSk7Y2FzZSJZaWVsZEV4cHJlc3Npb24iOnJldHVybiBhLnB1c2goInlpZWxkIiksaS5kZWxlZ2F0ZSYmYS5wdXNoKCIqIiksaS5hcmd1bWVudCYmYS5wdXNoKCIgIixlLmNhbGwobiwiYXJndW1lbnQiKSksY29uY2F0JDQoYSk7Y2FzZSJBd2FpdEV4cHJlc3Npb24iOnJldHVybiBjb25jYXQkNChbImF3YWl0ICIsZS5jYWxsKG4sImFyZ3VtZW50IildKTtjYXNlIkltcG9ydFNwZWNpZmllciI6cmV0dXJuIGkuaW1wb3J0S2luZCYmYS5wdXNoKGUuY2FsbChuLCJpbXBvcnRLaW5kIiksIiAiKSxhLnB1c2goZS5jYWxsKG4sImltcG9ydGVkIikpLGkubG9jYWwmJmkubG9jYWwubmFtZSE9PWkuaW1wb3J0ZWQubmFtZSYmYS5wdXNoKCIgYXMgIixlLmNhbGwobiwibG9jYWwiKSksY29uY2F0JDQoYSk7Y2FzZSJFeHBvcnRTcGVjaWZpZXIiOnJldHVybiBhLnB1c2goZS5jYWxsKG4sImxvY2FsIikpLGkuZXhwb3J0ZWQmJmkuZXhwb3J0ZWQubmFtZSE9PWkubG9jYWwubmFtZSYmYS5wdXNoKCIgYXMgIixlLmNhbGwobiwiZXhwb3J0ZWQiKSksY29uY2F0JDQoYSk7Y2FzZSJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiOnJldHVybiBhLnB1c2goIiogYXMgIiksaS5sb2NhbD9hLnB1c2goZS5jYWxsKG4sImxvY2FsIikpOmkuaWQmJmEucHVzaChlLmNhbGwobiwiaWQiKSksY29uY2F0JDQoYSk7Y2FzZSJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIjpyZXR1cm4gaS5sb2NhbD9lLmNhbGwobiwibG9jYWwiKTplLmNhbGwobiwiaWQiKTtjYXNlIlRTRXhwb3J0QXNzaWdubWVudCI6cmV0dXJuIGNvbmNhdCQ0KFsiZXhwb3J0ID0gIixlLmNhbGwobiwiZXhwcmVzc2lvbiIpLG9dKTtjYXNlIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI6Y2FzZSJFeHBvcnROYW1lZERlY2xhcmF0aW9uIjpyZXR1cm4gcHJpbnRFeHBvcnREZWNsYXJhdGlvbihlLHQsbik7Y2FzZSJFeHBvcnRBbGxEZWNsYXJhdGlvbiI6cmV0dXJuIGEucHVzaCgiZXhwb3J0ICIpLCJ0eXBlIj09PWkuZXhwb3J0S2luZCYmYS5wdXNoKCJ0eXBlICIpLGEucHVzaCgiKiBmcm9tICIsZS5jYWxsKG4sInNvdXJjZSIpLG8pLGNvbmNhdCQ0KGEpO2Nhc2UiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIjpjYXNlIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiOnJldHVybiBlLmNhbGwobiwiZXhwb3J0ZWQiKTtjYXNlIkltcG9ydERlY2xhcmF0aW9uIjphLnB1c2goImltcG9ydCAiKSxpLmltcG9ydEtpbmQmJiJ2YWx1ZSIhPT1pLmltcG9ydEtpbmQmJmEucHVzaChpLmltcG9ydEtpbmQrIiAiKTt2YXIgQT1bXSxfPVtdO3JldHVybiBpLnNwZWNpZmllcnMmJmkuc3BlY2lmaWVycy5sZW5ndGg+MD8oZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VmFsdWUoKTsiSW1wb3J0RGVmYXVsdFNwZWNpZmllciI9PT10LnR5cGV8fCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiPT09dC50eXBlP0EucHVzaChuKGUpKTpfLnB1c2gobihlKSl9LCJzcGVjaWZpZXJzIiksQS5sZW5ndGg+MCYmYS5wdXNoKGpvaW4kMigiLCAiLEEpKSxBLmxlbmd0aD4wJiZfLmxlbmd0aD4wJiZhLnB1c2goIiwgIiksMT09PV8ubGVuZ3RoJiYwPT09QS5sZW5ndGgmJmkuc3BlY2lmaWVycyYmIWkuc3BlY2lmaWVycy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbW1lbnRzfSk/YS5wdXNoKGNvbmNhdCQ0KFsieyIsdC5icmFja2V0U3BhY2luZz8iICI6IiIsY29uY2F0JDQoXyksdC5icmFja2V0U3BhY2luZz8iICI6IiIsIn0iXSkpOl8ubGVuZ3RoPj0xJiZhLnB1c2goZ3JvdXAkMShjb25jYXQkNChbInsiLGluZGVudCQyKGNvbmNhdCQ0KFt0LmJyYWNrZXRTcGFjaW5nP2xpbmUkMzpzb2Z0bGluZSQxLGpvaW4kMihjb25jYXQkNChbIiwiLGxpbmUkM10pLF8pXSkpLGlmQnJlYWskMShzaG91bGRQcmludENvbW1hKHQpPyIsIjoiIiksdC5icmFja2V0U3BhY2luZz9saW5lJDM6c29mdGxpbmUkMSwifSJdKSkpLGEucHVzaCgiIGZyb20gIikpOihpLmltcG9ydEtpbmQmJiJ0eXBlIj09PWkuaW1wb3J0S2luZHx8L3tccyp9Ly50ZXN0KHQub3JpZ2luYWxUZXh0LnNsaWNlKHQubG9jU3RhcnQoaSksdC5sb2NTdGFydChpLnNvdXJjZSkpKSkmJmEucHVzaCgie30gZnJvbSAiKSxhLnB1c2goZS5jYWxsKG4sInNvdXJjZSIpLG8pLGNvbmNhdCQ0KGEpO2Nhc2UiSW1wb3J0IjpyZXR1cm4iaW1wb3J0IjtjYXNlIkJsb2NrU3RhdGVtZW50Ijp2YXIgVD1lLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50U3RhdGVtZW50U2VxdWVuY2UoZSx0LG4pfSwiYm9keSIpLE89aS5ib2R5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIkVtcHR5U3RhdGVtZW50IiE9PWUudHlwZX0pLEY9aS5kaXJlY3RpdmVzJiZpLmRpcmVjdGl2ZXMubGVuZ3RoPjAsTj1lLmdldFBhcmVudE5vZGUoKSxJPWUuZ2V0UGFyZW50Tm9kZSgxKTtyZXR1cm4gT3x8Rnx8aGFzRGFuZ2xpbmdDb21tZW50cyhpKXx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiE9PU4udHlwZSYmIkZ1bmN0aW9uRXhwcmVzc2lvbiIhPT1OLnR5cGUmJiJGdW5jdGlvbkRlY2xhcmF0aW9uIiE9PU4udHlwZSYmIk9iamVjdE1ldGhvZCIhPT1OLnR5cGUmJiJDbGFzc01ldGhvZCIhPT1OLnR5cGUmJiJGb3JTdGF0ZW1lbnQiIT09Ti50eXBlJiYiV2hpbGVTdGF0ZW1lbnQiIT09Ti50eXBlJiYiRG9XaGlsZVN0YXRlbWVudCIhPT1OLnR5cGUmJiJEb0V4cHJlc3Npb24iIT09Ti50eXBlJiYoIkNhdGNoQ2xhdXNlIiE9PU4udHlwZXx8SS5maW5hbGl6ZXIpPyhhLnB1c2goInsiKSxGJiZlLmVhY2goZnVuY3Rpb24oZSl7YS5wdXNoKGluZGVudCQyKGNvbmNhdCQ0KFtoYXJkbGluZSQzLG4oZSksb10pKSksaXNOZXh0TGluZUVtcHR5JDIodC5vcmlnaW5hbFRleHQsZS5nZXRWYWx1ZSgpLHQpJiZhLnB1c2goaGFyZGxpbmUkMyl9LCJkaXJlY3RpdmVzIiksTyYmYS5wdXNoKGluZGVudCQyKGNvbmNhdCQ0KFtoYXJkbGluZSQzLFRdKSkpLGEucHVzaChjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0KSksYS5wdXNoKGhhcmRsaW5lJDMsIn0iKSxjb25jYXQkNChhKSk6Int9IjtjYXNlIlJldHVyblN0YXRlbWVudCI6cmV0dXJuIGEucHVzaCgicmV0dXJuIiksaS5hcmd1bWVudCYmKHJldHVybkFyZ3VtZW50SGFzTGVhZGluZ0NvbW1lbnQodCxpLmFyZ3VtZW50KT9hLnB1c2goY29uY2F0JDQoWyIgKCIsaW5kZW50JDIoY29uY2F0JDQoW2hhcmRsaW5lJDMsZS5jYWxsKG4sImFyZ3VtZW50IildKSksaGFyZGxpbmUkMywiKSJdKSk6IkxvZ2ljYWxFeHByZXNzaW9uIj09PWkuYXJndW1lbnQudHlwZXx8IkJpbmFyeUV4cHJlc3Npb24iPT09aS5hcmd1bWVudC50eXBlfHwiU2VxdWVuY2VFeHByZXNzaW9uIj09PWkuYXJndW1lbnQudHlwZT9hLnB1c2goZ3JvdXAkMShjb25jYXQkNChbaWZCcmVhayQxKCIgKCIsIiAiKSxpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwiYXJndW1lbnQiKV0pKSxzb2Z0bGluZSQxLGlmQnJlYWskMSgiKSIpXSkpKTphLnB1c2goIiAiLGUuY2FsbChuLCJhcmd1bWVudCIpKSksaGFzRGFuZ2xpbmdDb21tZW50cyhpKSYmYS5wdXNoKCIgIixjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSksYS5wdXNoKG8pLGNvbmNhdCQ0KGEpO2Nhc2UiTmV3RXhwcmVzc2lvbiI6Y2FzZSJPcHRpb25hbENhbGxFeHByZXNzaW9uIjpjYXNlIkNhbGxFeHByZXNzaW9uIjp2YXIgTD0iTmV3RXhwcmVzc2lvbiI9PT1pLnR5cGUsUD1wcmludE9wdGlvbmFsVG9rZW4oZSk7cmV0dXJuIUwmJiJJZGVudGlmaWVyIj09PWkuY2FsbGVlLnR5cGUmJigicmVxdWlyZSI9PT1pLmNhbGxlZS5uYW1lfHwiZGVmaW5lIj09PWkuY2FsbGVlLm5hbWUpfHwiSW1wb3J0Ij09PWkuY2FsbGVlLnR5cGV8fDE9PT1pLmFyZ3VtZW50cy5sZW5ndGgmJmlzVGVtcGxhdGVPbkl0c093bkxpbmUoaS5hcmd1bWVudHNbMF0sdC5vcmlnaW5hbFRleHQsdCl8fCFMJiZpc1Rlc3RDYWxsKGksZS5nZXRQYXJlbnROb2RlKCkpP2NvbmNhdCQ0KFtMPyJuZXcgIjoiIixlLmNhbGwobiwiY2FsbGVlIiksUCxwcmludEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnMoZSx0LG4pLGNvbmNhdCQ0KFsiKCIsam9pbiQyKCIsICIsZS5tYXAobiwiYXJndW1lbnRzIikpLCIpIl0pXSk6IUwmJmlzTWVtYmVyaXNoKGkuY2FsbGVlKT9wcmludE1lbWJlckNoYWluKGUsdCxuKTpjb25jYXQkNChbTD8ibmV3ICI6IiIsZS5jYWxsKG4sImNhbGxlZSIpLFAscHJpbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzKGUsdCxuKSxwcmludEFyZ3VtZW50c0xpc3QoZSx0LG4pXSk7Y2FzZSJUU0ludGVyZmFjZURlY2xhcmF0aW9uIjpyZXR1cm4gaXNOb2RlU3RhcnRpbmdXaXRoRGVjbGFyZShpLHQpJiZhLnB1c2goImRlY2xhcmUgIiksYS5wdXNoKGkuYWJzdHJhY3Q/ImFic3RyYWN0ICI6IiIscHJpbnRUeXBlU2NyaXB0TW9kaWZpZXJzKGUsdCxuKSwiaW50ZXJmYWNlICIsZS5jYWxsKG4sImlkIiksaS50eXBlUGFyYW1ldGVycz9lLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKToiIiwiICIpLGkuaGVyaXRhZ2UubGVuZ3RoJiZhLnB1c2goZ3JvdXAkMShpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSwiZXh0ZW5kcyAiLGluZGVudCQyKGpvaW4kMihjb25jYXQkNChbIiwiLGxpbmUkM10pLGUubWFwKG4sImhlcml0YWdlIikpKSwiICJdKSkpKSxhLnB1c2goZS5jYWxsKG4sImJvZHkiKSksY29uY2F0JDQoYSk7Y2FzZSJPYmplY3RFeHByZXNzaW9uIjpjYXNlIk9iamVjdFBhdHRlcm4iOmNhc2UiT2JqZWN0VHlwZUFubm90YXRpb24iOmNhc2UiVFNJbnRlcmZhY2VCb2R5IjpjYXNlIlRTVHlwZUxpdGVyYWwiOnZhciBNLGo9Ik9iamVjdFR5cGVBbm5vdGF0aW9uIj09PWkudHlwZSxSPWUuZ2V0UGFyZW50Tm9kZSgwKSxCPSJUU0ludGVyZmFjZUJvZHkiPT09aS50eXBlfHwiT2JqZWN0UGF0dGVybiI9PT1pLnR5cGUmJiJGdW5jdGlvbkRlY2xhcmF0aW9uIiE9PVIudHlwZSYmIkZ1bmN0aW9uRXhwcmVzc2lvbiIhPT1SLnR5cGUmJiJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIhPT1SLnR5cGUmJiJBc3NpZ25tZW50UGF0dGVybiIhPT1SLnR5cGUmJiJDYXRjaENsYXVzZSIhPT1SLnR5cGUmJmkucHJvcGVydGllcy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlJiYoIk9iamVjdFBhdHRlcm4iPT09ZS52YWx1ZS50eXBlfHwiQXJyYXlQYXR0ZXJuIj09PWUudmFsdWUudHlwZSl9KXx8Ik9iamVjdFBhdHRlcm4iIT09aS50eXBlJiZoYXNOZXdsaW5lSW5SYW5nZSQxKHQub3JpZ2luYWxUZXh0LHQubG9jU3RhcnQoaSksdC5sb2NFbmQoaSkpLCQ9aiYmUiYmKCJJbnRlcmZhY2VEZWNsYXJhdGlvbiI9PT1SLnR5cGV8fCJEZWNsYXJlSW50ZXJmYWNlIj09PVIudHlwZXx8IkRlY2xhcmVDbGFzcyI9PT1SLnR5cGUpJiYiYm9keSI9PT1lLmdldE5hbWUoKSxVPSQ/IjsiOiJUU0ludGVyZmFjZUJvZHkiPT09aS50eXBlfHwiVFNUeXBlTGl0ZXJhbCI9PT1pLnR5cGU/aWZCcmVhayQxKG8sIjsiKToiLCIsej1bXSxHPWkuZXhhY3Q/Int8IjoieyIsVj1pLmV4YWN0PyJ8fSI6In0iO009IlRTVHlwZUxpdGVyYWwiPT09aS50eXBlPyJtZW1iZXJzIjoiVFNJbnRlcmZhY2VCb2R5Ij09PWkudHlwZT8iYm9keSI6InByb3BlcnRpZXMiLGomJnoucHVzaCgiaW5kZXhlcnMiLCJjYWxsUHJvcGVydGllcyIpLHoucHVzaChNKTt2YXIgcT1bXTt6LmZvckVhY2goZnVuY3Rpb24ocil7ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUuZ2V0VmFsdWUoKTtxLnB1c2goe25vZGU6cixwcmludGVkOm4oZSksbG9jOnQubG9jU3RhcnQocil9KX0scil9KTt2YXIgSCxXPVtdLFE9cS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubG9jLXQubG9jfSkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPWNvbmNhdCQ0KFcuY29uY2F0KGdyb3VwJDEoZS5wcmludGVkKSkpO3JldHVybiBXPVtVLGxpbmUkM10sIlRTUHJvcGVydHlTaWduYXR1cmUiPT09ZS5ub2RlLnR5cGUmJmhhc05vZGVJZ25vcmVDb21tZW50JDEoZS5ub2RlKSYmVy5zaGlmdCgpLGlzTmV4dExpbmVFbXB0eSQyKHQub3JpZ2luYWxUZXh0LGUubm9kZSx0KSYmVy5wdXNoKGhhcmRsaW5lJDMpLG59KSxLPWdldExhc3QkNChpW01dKSxKPSEoSyYmKCJSZXN0UHJvcGVydHkiPT09Sy50eXBlfHwiUmVzdEVsZW1lbnQiPT09Sy50eXBlfHwiRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5Ij09PUsudHlwZXx8aGFzTm9kZUlnbm9yZUNvbW1lbnQkMShLKSkpO2lmKDAhPT1RLmxlbmd0aHx8aS50eXBlQW5ub3RhdGlvbilIPWNvbmNhdCQ0KFtHLGluZGVudCQyKGNvbmNhdCQ0KFt0LmJyYWNrZXRTcGFjaW5nP2xpbmUkMzpzb2Z0bGluZSQxLGNvbmNhdCQ0KFEpXSkpLGlmQnJlYWskMShKJiYoIiwiIT09VXx8c2hvdWxkUHJpbnRDb21tYSh0KSk/VToiIiksY29uY2F0JDQoW3QuYnJhY2tldFNwYWNpbmc/bGluZSQzOnNvZnRsaW5lJDEsVl0pLHByaW50T3B0aW9uYWxUb2tlbihlKSxwcmludFR5cGVBbm5vdGF0aW9uKGUsdCxuKV0pO2Vsc2V7aWYoIWhhc0RhbmdsaW5nQ29tbWVudHMoaSkpcmV0dXJuIGNvbmNhdCQ0KFtHLFZdKTtIPWdyb3VwJDEoY29uY2F0JDQoW0csY29tbWVudHMucHJpbnREYW5nbGluZ0NvbW1lbnRzKGUsdCksc29mdGxpbmUkMSxWLHByaW50T3B0aW9uYWxUb2tlbihlKV0pKX12YXIgWT1lLmdldFBhcmVudE5vZGUoMik7cmV0dXJuIk9iamVjdFBhdHRlcm4iPT09aS50eXBlJiZSJiZzaG91bGRIdWdBcmd1bWVudHMoUikmJlIucGFyYW1zWzBdPT09aXx8c2hvdWxkSHVnVHlwZShpKSYmWSYmc2hvdWxkSHVnQXJndW1lbnRzKFkpJiZZLnBhcmFtc1swXS50eXBlQW5ub3RhdGlvbiYmWS5wYXJhbXNbMF0udHlwZUFubm90YXRpb24udHlwZUFubm90YXRpb249PT1pP0g6Z3JvdXAkMShILHtzaG91bGRCcmVhazpCfSk7Y2FzZSJPYmplY3RQcm9wZXJ0eSI6Y2FzZSJQcm9wZXJ0eSI6aWYoaS5tZXRob2R8fCJnZXQiPT09aS5raW5kfHwic2V0Ij09PWkua2luZClyZXR1cm4gcHJpbnRNZXRob2QoZSx0LG4pO2lmKGkuc2hvcnRoYW5kKWEucHVzaChlLmNhbGwobiwidmFsdWUiKSk7ZWxzZXt2YXIgWDtYPWkuY29tcHV0ZWQ/Y29uY2F0JDQoWyJbIixlLmNhbGwobiwia2V5IiksIl0iXSk6cHJpbnRQcm9wZXJ0eUtleShlLHQsbiksYS5wdXNoKHByaW50QXNzaWdubWVudChpLmtleSxYLCI6IixpLnZhbHVlLGUuY2FsbChuLCJ2YWx1ZSIpLHQpKX1yZXR1cm4gY29uY2F0JDQoYSk7Y2FzZSJDbGFzc01ldGhvZCI6cmV0dXJuIGkuc3RhdGljJiZhLnB1c2goInN0YXRpYyAiKSxhPWEuY29uY2F0KHByaW50T2JqZWN0TWV0aG9kKGUsdCxuKSksY29uY2F0JDQoYSk7Y2FzZSJPYmplY3RNZXRob2QiOnJldHVybiBwcmludE9iamVjdE1ldGhvZChlLHQsbik7Y2FzZSJEZWNvcmF0b3IiOnJldHVybiBjb25jYXQkNChbIkAiLGUuY2FsbChuLCJleHByZXNzaW9uIiksZS5jYWxsKG4sImNhbGxlZSIpXSk7Y2FzZSJBcnJheUV4cHJlc3Npb24iOmNhc2UiQXJyYXlQYXR0ZXJuIjppZigwPT09aS5lbGVtZW50cy5sZW5ndGgpaGFzRGFuZ2xpbmdDb21tZW50cyhpKT9hLnB1c2goZ3JvdXAkMShjb25jYXQkNChbIlsiLGNvbW1lbnRzLnByaW50RGFuZ2xpbmdDb21tZW50cyhlLHQpLHNvZnRsaW5lJDEsIl0iXSkpKTphLnB1c2goIltdIik7ZWxzZXt2YXIgWj1nZXRMYXN0JDQoaS5lbGVtZW50cyksZWU9IShaJiYiUmVzdEVsZW1lbnQiPT09Wi50eXBlKSx0ZT1lZSYmbnVsbD09PVo7YS5wdXNoKGdyb3VwJDEoY29uY2F0JDQoWyJbIixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxwcmludEFycmF5SXRlbXMoZSx0LCJlbGVtZW50cyIsbildKSksdGU/IiwiOiIiLGlmQnJlYWskMShlZSYmIXRlJiZzaG91bGRQcmludENvbW1hKHQpPyIsIjoiIiksY29tbWVudHMucHJpbnREYW5nbGluZ0NvbW1lbnRzKGUsdCwhMCksc29mdGxpbmUkMSwiXSJdKSkpfXJldHVybiBhLnB1c2gocHJpbnRPcHRpb25hbFRva2VuKGUpLHByaW50VHlwZUFubm90YXRpb24oZSx0LG4pKSxjb25jYXQkNChhKTtjYXNlIlNlcXVlbmNlRXhwcmVzc2lvbiI6dmFyIG5lPWUuZ2V0UGFyZW50Tm9kZSgwKTtpZigiRXhwcmVzc2lvblN0YXRlbWVudCI9PT1uZS50eXBlfHwiRm9yU3RhdGVtZW50Ij09PW5lLnR5cGUpe3ZhciByZT1bXTtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmdldE5hbWUoKT9yZS5wdXNoKG4oZSkpOnJlLnB1c2goIiwiLGluZGVudCQyKGNvbmNhdCQ0KFtsaW5lJDMsbihlKV0pKSl9LCJleHByZXNzaW9ucyIpLGdyb3VwJDEoY29uY2F0JDQocmUpKX1yZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbam9pbiQyKGNvbmNhdCQ0KFsiLCIsbGluZSQzXSksZS5tYXAobiwiZXhwcmVzc2lvbnMiKSldKSk7Y2FzZSJUaGlzRXhwcmVzc2lvbiI6cmV0dXJuInRoaXMiO2Nhc2UiU3VwZXIiOnJldHVybiJzdXBlciI7Y2FzZSJOdWxsTGl0ZXJhbCI6cmV0dXJuIm51bGwiO2Nhc2UiUmVnRXhwTGl0ZXJhbCI6cmV0dXJuIHByaW50UmVnZXgoaSk7Y2FzZSJOdW1lcmljTGl0ZXJhbCI6cmV0dXJuIHByaW50TnVtYmVyJDEoaS5leHRyYS5yYXcpO2Nhc2UiQm9vbGVhbkxpdGVyYWwiOmNhc2UiU3RyaW5nTGl0ZXJhbCI6Y2FzZSJMaXRlcmFsIjppZihpLnJlZ2V4KXJldHVybiBwcmludFJlZ2V4KGkucmVnZXgpO2lmKCJudW1iZXIiPT09dHlwZW9mIGkudmFsdWUpcmV0dXJuIHByaW50TnVtYmVyJDEoaS5yYXcpO2lmKCJzdHJpbmciIT09dHlwZW9mIGkudmFsdWUpcmV0dXJuIiIraS52YWx1ZTt2YXIgaWU9ZS5nZXRQYXJlbnROb2RlKDEpLG9lPSJ0eXBlc2NyaXB0Ij09PXQucGFyc2VyJiYic3RyaW5nIj09PXR5cGVvZiBpLnZhbHVlJiZpZSYmKCJQcm9ncmFtIj09PWllLnR5cGV8fCJCbG9ja1N0YXRlbWVudCI9PT1pZS50eXBlKTtyZXR1cm4gbm9kZVN0cihpLHQsb2UpO2Nhc2UiRGlyZWN0aXZlIjpyZXR1cm4gZS5jYWxsKG4sInZhbHVlIik7Y2FzZSJEaXJlY3RpdmVMaXRlcmFsIjpyZXR1cm4gbm9kZVN0cihpLHQpO2Nhc2UiVW5hcnlFeHByZXNzaW9uIjpyZXR1cm4gYS5wdXNoKGkub3BlcmF0b3IpLC9bYS16XSQvLnRlc3QoaS5vcGVyYXRvcikmJmEucHVzaCgiICIpLGEucHVzaChlLmNhbGwobiwiYXJndW1lbnQiKSksY29uY2F0JDQoYSk7Y2FzZSJVcGRhdGVFeHByZXNzaW9uIjpyZXR1cm4gYS5wdXNoKGUuY2FsbChuLCJhcmd1bWVudCIpLGkub3BlcmF0b3IpLGkucHJlZml4JiZhLnJldmVyc2UoKSxjb25jYXQkNChhKTtjYXNlIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6cmV0dXJuIGZvcm1hdFRlcm5hcnlPcGVyYXRvcihlLHQsbix7YmVmb3JlUGFydHM6ZnVuY3Rpb24oKXtyZXR1cm5bZS5jYWxsKG4sInRlc3QiKV19LGFmdGVyUGFydHM6ZnVuY3Rpb24oZSl7cmV0dXJuW2U/c29mdGxpbmUkMToiIl19fSk7Y2FzZSJWYXJpYWJsZURlY2xhcmF0aW9uIjp2YXIgYWUsc2U9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9LCJkZWNsYXJhdGlvbnMiKSx1ZT1lLmdldFBhcmVudE5vZGUoKSxjZT0iRm9yU3RhdGVtZW50Ij09PXVlLnR5cGV8fCJGb3JJblN0YXRlbWVudCI9PT11ZS50eXBlfHwiRm9yT2ZTdGF0ZW1lbnQiPT09dWUudHlwZXx8IkZvckF3YWl0U3RhdGVtZW50Ij09PXVlLnR5cGUsbGU9aS5kZWNsYXJhdGlvbnMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbml0fSk7cmV0dXJuIDE9PT1zZS5sZW5ndGg/YWU9c2VbMF06c2UubGVuZ3RoPjEmJihhZT1pbmRlbnQkMihzZVswXSkpLGE9W2lzTm9kZVN0YXJ0aW5nV2l0aERlY2xhcmUoaSx0KT8iZGVjbGFyZSAiOiIiLGkua2luZCxhZT9jb25jYXQkNChbIiAiLGFlXSk6IiIsaW5kZW50JDIoY29uY2F0JDQoc2Uuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjb25jYXQkNChbIiwiLGxlJiYhY2U/aGFyZGxpbmUkMzpsaW5lJDMsZV0pfSkpKV0sY2UmJnVlLmJvZHkhPT1pfHxhLnB1c2gobyksZ3JvdXAkMShjb25jYXQkNChhKSk7Y2FzZSJWYXJpYWJsZURlY2xhcmF0b3IiOnJldHVybiBwcmludEFzc2lnbm1lbnQoaS5pZCxjb25jYXQkNChbZS5jYWxsKG4sImlkIiksZS5jYWxsKG4sInR5cGVQYXJhbWV0ZXJzIildKSwiID0iLGkuaW5pdCxpLmluaXQmJmUuY2FsbChuLCJpbml0IiksdCk7Y2FzZSJXaXRoU3RhdGVtZW50IjpyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbIndpdGggKCIsZS5jYWxsKG4sIm9iamVjdCIpLCIpIixhZGp1c3RDbGF1c2UoaS5ib2R5LGUuY2FsbChuLCJib2R5IikpXSkpO2Nhc2UiSWZTdGF0ZW1lbnQiOnZhciBwZT1hZGp1c3RDbGF1c2UoaS5jb25zZXF1ZW50LGUuY2FsbChuLCJjb25zZXF1ZW50IikpLGZlPWdyb3VwJDEoY29uY2F0JDQoWyJpZiAoIixncm91cCQxKGNvbmNhdCQ0KFtpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwidGVzdCIpXSkpLHNvZnRsaW5lJDFdKSksIikiLHBlXSkpO2lmKGEucHVzaChmZSksaS5hbHRlcm5hdGUpe3ZhciBkZT1oYXNUcmFpbGluZ0NvbW1lbnQoaS5jb25zZXF1ZW50KSYmaS5jb25zZXF1ZW50LmNvbW1lbnRzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhaWxpbmcmJiFjb21tZW50cyQzLmlzQmxvY2tDb21tZW50KGUpfSl8fG5lZWRzSGFyZGxpbmVBZnRlckRhbmdsaW5nQ29tbWVudChpKSxoZT0iQmxvY2tTdGF0ZW1lbnQiPT09aS5jb25zZXF1ZW50LnR5cGUmJiFkZTthLnB1c2goaGU/IiAiOmhhcmRsaW5lJDMpLGhhc0RhbmdsaW5nQ29tbWVudHMoaSkmJmEucHVzaChjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSxkZT9oYXJkbGluZSQzOiIgIiksYS5wdXNoKCJlbHNlIixncm91cCQxKGFkanVzdENsYXVzZShpLmFsdGVybmF0ZSxlLmNhbGwobiwiYWx0ZXJuYXRlIiksIklmU3RhdGVtZW50Ij09PWkuYWx0ZXJuYXRlLnR5cGUpKSl9cmV0dXJuIGNvbmNhdCQ0KGEpO2Nhc2UiRm9yU3RhdGVtZW50Ijp2YXIgbWU9YWRqdXN0Q2xhdXNlKGkuYm9keSxlLmNhbGwobiwiYm9keSIpKSxnZT1jb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSx5ZT1nZT9jb25jYXQkNChbZ2Usc29mdGxpbmUkMV0pOiIiO3JldHVybiBjb25jYXQkNChpLmluaXR8fGkudGVzdHx8aS51cGRhdGU/W3llLGdyb3VwJDEoY29uY2F0JDQoWyJmb3IgKCIsZ3JvdXAkMShjb25jYXQkNChbaW5kZW50JDIoY29uY2F0JDQoW3NvZnRsaW5lJDEsZS5jYWxsKG4sImluaXQiKSwiOyIsbGluZSQzLGUuY2FsbChuLCJ0ZXN0IiksIjsiLGxpbmUkMyxlLmNhbGwobiwidXBkYXRlIildKSksc29mdGxpbmUkMV0pKSwiKSIsbWVdKSldOlt5ZSxncm91cCQxKGNvbmNhdCQ0KFsiZm9yICg7OykiLG1lXSkpXSk7Y2FzZSJXaGlsZVN0YXRlbWVudCI6cmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoWyJ3aGlsZSAoIixncm91cCQxKGNvbmNhdCQ0KFtpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwidGVzdCIpXSkpLHNvZnRsaW5lJDFdKSksIikiLGFkanVzdENsYXVzZShpLmJvZHksZS5jYWxsKG4sImJvZHkiKSldKSk7Y2FzZSJGb3JJblN0YXRlbWVudCI6cmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoW2kuZWFjaD8iZm9yIGVhY2ggKCI6ImZvciAoIixlLmNhbGwobiwibGVmdCIpLCIgaW4gIixlLmNhbGwobiwicmlnaHQiKSwiKSIsYWRqdXN0Q2xhdXNlKGkuYm9keSxlLmNhbGwobiwiYm9keSIpKV0pKTtjYXNlIkZvck9mU3RhdGVtZW50IjpjYXNlIkZvckF3YWl0U3RhdGVtZW50Ijp2YXIgdmU9IkZvckF3YWl0U3RhdGVtZW50Ij09PWkudHlwZXx8aS5hd2FpdDtyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbImZvciIsdmU/IiBhd2FpdCI6IiIsIiAoIixlLmNhbGwobiwibGVmdCIpLCIgb2YgIixlLmNhbGwobiwicmlnaHQiKSwiKSIsYWRqdXN0Q2xhdXNlKGkuYm9keSxlLmNhbGwobiwiYm9keSIpKV0pKTtjYXNlIkRvV2hpbGVTdGF0ZW1lbnQiOnZhciBiZT1hZGp1c3RDbGF1c2UoaS5ib2R5LGUuY2FsbChuLCJib2R5IikpLHhlPWdyb3VwJDEoY29uY2F0JDQoWyJkbyIsYmVdKSk7cmV0dXJuIGE9W3hlXSwiQmxvY2tTdGF0ZW1lbnQiPT09aS5ib2R5LnR5cGU/YS5wdXNoKCIgIik6YS5wdXNoKGhhcmRsaW5lJDMpLGEucHVzaCgid2hpbGUgKCIpLGEucHVzaChncm91cCQxKGNvbmNhdCQ0KFtpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwidGVzdCIpXSkpLHNvZnRsaW5lJDFdKSksIikiLG8pLGNvbmNhdCQ0KGEpO2Nhc2UiRG9FeHByZXNzaW9uIjpyZXR1cm4gY29uY2F0JDQoWyJkbyAiLGUuY2FsbChuLCJib2R5IildKTtjYXNlIkJyZWFrU3RhdGVtZW50IjpyZXR1cm4gYS5wdXNoKCJicmVhayIpLGkubGFiZWwmJmEucHVzaCgiICIsZS5jYWxsKG4sImxhYmVsIikpLGEucHVzaChvKSxjb25jYXQkNChhKTtjYXNlIkNvbnRpbnVlU3RhdGVtZW50IjpyZXR1cm4gYS5wdXNoKCJjb250aW51ZSIpLGkubGFiZWwmJmEucHVzaCgiICIsZS5jYWxsKG4sImxhYmVsIikpLGEucHVzaChvKSxjb25jYXQkNChhKTtjYXNlIkxhYmVsZWRTdGF0ZW1lbnQiOnJldHVybiBjb25jYXQkNCgiRW1wdHlTdGF0ZW1lbnQiPT09aS5ib2R5LnR5cGU/W2UuY2FsbChuLCJsYWJlbCIpLCI6OyJdOltlLmNhbGwobiwibGFiZWwiKSwiOiAiLGUuY2FsbChuLCJib2R5IildKTtjYXNlIlRyeVN0YXRlbWVudCI6cmV0dXJuIGNvbmNhdCQ0KFsidHJ5ICIsZS5jYWxsKG4sImJsb2NrIiksaS5oYW5kbGVyP2NvbmNhdCQ0KFsiICIsZS5jYWxsKG4sImhhbmRsZXIiKV0pOiIiLGkuZmluYWxpemVyP2NvbmNhdCQ0KFsiIGZpbmFsbHkgIixlLmNhbGwobiwiZmluYWxpemVyIildKToiIl0pO2Nhc2UiQ2F0Y2hDbGF1c2UiOnJldHVybiBjb25jYXQkNChbImNhdGNoICIsaS5wYXJhbT9jb25jYXQkNChbIigiLGUuY2FsbChuLCJwYXJhbSIpLCIpICJdKToiIixlLmNhbGwobiwiYm9keSIpXSk7Y2FzZSJUaHJvd1N0YXRlbWVudCI6cmV0dXJuIGNvbmNhdCQ0KFsidGhyb3cgIixlLmNhbGwobiwiYXJndW1lbnQiKSxvXSk7Y2FzZSJTd2l0Y2hTdGF0ZW1lbnQiOnJldHVybiBjb25jYXQkNChbZ3JvdXAkMShjb25jYXQkNChbInN3aXRjaCAoIixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwiZGlzY3JpbWluYW50IildKSksc29mdGxpbmUkMSwiKSJdKSksIiB7IixpLmNhc2VzLmxlbmd0aD4wP2luZGVudCQyKGNvbmNhdCQ0KFtoYXJkbGluZSQzLGpvaW4kMihoYXJkbGluZSQzLGUubWFwKGZ1bmN0aW9uKGUpe3ZhciByPWUuZ2V0VmFsdWUoKTtyZXR1cm4gY29uY2F0JDQoW2UuY2FsbChuKSxpLmNhc2VzLmluZGV4T2YocikhPT1pLmNhc2VzLmxlbmd0aC0xJiZpc05leHRMaW5lRW1wdHkkMih0Lm9yaWdpbmFsVGV4dCxyLHQpP2hhcmRsaW5lJDM6IiJdKX0sImNhc2VzIikpXSkpOiIiLGhhcmRsaW5lJDMsIn0iXSk7Y2FzZSJTd2l0Y2hDYXNlIjppLnRlc3Q/YS5wdXNoKCJjYXNlICIsZS5jYWxsKG4sInRlc3QiKSwiOiIpOmEucHVzaCgiZGVmYXVsdDoiKTt2YXIgQ2U9aS5jb25zZXF1ZW50LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iRW1wdHlTdGF0ZW1lbnQiIT09ZS50eXBlfSk7aWYoQ2UubGVuZ3RoPjApe3ZhciBFZT1lLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50U3RhdGVtZW50U2VxdWVuY2UoZSx0LG4pfSwiY29uc2VxdWVudCIpO2EucHVzaCgxPT09Q2UubGVuZ3RoJiYiQmxvY2tTdGF0ZW1lbnQiPT09Q2VbMF0udHlwZT9jb25jYXQkNChbIiAiLEVlXSk6aW5kZW50JDIoY29uY2F0JDQoW2hhcmRsaW5lJDMsRWVdKSkpfXJldHVybiBjb25jYXQkNChhKTtjYXNlIkRlYnVnZ2VyU3RhdGVtZW50IjpyZXR1cm4gY29uY2F0JDQoWyJkZWJ1Z2dlciIsb10pO2Nhc2UiSlNYQXR0cmlidXRlIjppZihhLnB1c2goZS5jYWxsKG4sIm5hbWUiKSksaS52YWx1ZSl7dmFyIERlO2lmKGlzU3RyaW5nTGl0ZXJhbChpLnZhbHVlKSl7RGU9JyInK3Jhd1RleHQoaS52YWx1ZSkuc2xpY2UoMSwtMSkucmVwbGFjZSgvIi9nLCImcXVvdDsiKSsnIid9ZWxzZSBEZT1lLmNhbGwobiwidmFsdWUiKTthLnB1c2goIj0iLERlKX1yZXR1cm4gY29uY2F0JDQoYSk7Y2FzZSJKU1hJZGVudGlmaWVyIjpyZXR1cm4gaS5uYW1lPyIiK2kubmFtZToidGhpcyI7Y2FzZSJKU1hOYW1lc3BhY2VkTmFtZSI6cmV0dXJuIGpvaW4kMigiOiIsW2UuY2FsbChuLCJuYW1lc3BhY2UiKSxlLmNhbGwobiwibmFtZSIpXSk7Y2FzZSJKU1hNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4gam9pbiQyKCIuIixbZS5jYWxsKG4sIm9iamVjdCIpLGUuY2FsbChuLCJwcm9wZXJ0eSIpXSk7Y2FzZSJUU1F1YWxpZmllZE5hbWUiOnJldHVybiBqb2luJDIoIi4iLFtlLmNhbGwobiwibGVmdCIpLGUuY2FsbChuLCJyaWdodCIpXSk7Y2FzZSJKU1hTcHJlYWRBdHRyaWJ1dGUiOmNhc2UiSlNYU3ByZWFkQ2hpbGQiOnJldHVybiBjb25jYXQkNChbInsiLGUuY2FsbChmdW5jdGlvbihlKXt2YXIgcj1jb25jYXQkNChbIi4uLiIsbihlKV0pLGk9ZS5nZXRWYWx1ZSgpO3JldHVybiBpLmNvbW1lbnRzJiZpLmNvbW1lbnRzLmxlbmd0aD9jb25jYXQkNChbaW5kZW50JDIoY29uY2F0JDQoW3NvZnRsaW5lJDEsY29tbWVudHMucHJpbnRDb21tZW50cyhlLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHQpXSkpLHNvZnRsaW5lJDFdKTpyfSwiSlNYU3ByZWFkQXR0cmlidXRlIj09PWkudHlwZT8iYXJndW1lbnQiOiJleHByZXNzaW9uIiksIn0iXSk7Y2FzZSJKU1hFeHByZXNzaW9uQ29udGFpbmVyIjp2YXIgd2U9ZS5nZXRQYXJlbnROb2RlKDApLFNlPSJKU1hBdHRyaWJ1dGUiPT09d2UudHlwZSYmaS5leHByZXNzaW9uLmNvbW1lbnRzJiZpLmV4cHJlc3Npb24uY29tbWVudHMubGVuZ3RoPjAsa2U9IVNlJiYoIkFycmF5RXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8Ik9iamVjdEV4cHJlc3Npb24iPT09aS5leHByZXNzaW9uLnR5cGV8fCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8IkNhbGxFeHByZXNzaW9uIj09PWkuZXhwcmVzc2lvbi50eXBlfHwiT3B0aW9uYWxDYWxsRXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8IkZ1bmN0aW9uRXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8IkpTWEVtcHR5RXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8IlRlbXBsYXRlTGl0ZXJhbCI9PT1pLmV4cHJlc3Npb24udHlwZXx8IlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8IkRvRXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb24udHlwZXx8aXNKU1hOb2RlKHdlKSYmKCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09aS5leHByZXNzaW9uLnR5cGV8fGlzQmluYXJ5aXNoKGkuZXhwcmVzc2lvbikpKTtyZXR1cm4gZ3JvdXAkMShrZT9jb25jYXQkNChbInsiLGUuY2FsbChuLCJleHByZXNzaW9uIiksbGluZVN1ZmZpeEJvdW5kYXJ5JDEsIn0iXSk6Y29uY2F0JDQoWyJ7IixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxlLmNhbGwobiwiZXhwcmVzc2lvbiIpXSkpLHNvZnRsaW5lJDEsbGluZVN1ZmZpeEJvdW5kYXJ5JDEsIn0iXSkpO2Nhc2UiSlNYRnJhZ21lbnQiOmNhc2UiVFNKc3hGcmFnbWVudCI6Y2FzZSJKU1hFbGVtZW50Ijp2YXIgQWU9Y29tbWVudHMucHJpbnRDb21tZW50cyhlLGZ1bmN0aW9uKCl7cmV0dXJuIHByaW50SlNYRWxlbWVudChlLHQsbil9LHQpO3JldHVybiBtYXliZVdyYXBKU1hFbGVtZW50SW5QYXJlbnMoZSxBZSk7Y2FzZSJKU1hPcGVuaW5nRWxlbWVudCI6dmFyIF9lPWUuZ2V0VmFsdWUoKSxUZT1fZS5uYW1lJiZfZS5uYW1lLmNvbW1lbnRzJiZfZS5uYW1lLmNvbW1lbnRzLmxlbmd0aD4wO2lmKF9lLnNlbGZDbG9zaW5nJiYhX2UuYXR0cmlidXRlcy5sZW5ndGgmJiFUZSlyZXR1cm4gY29uY2F0JDQoWyI8IixlLmNhbGwobiwibmFtZSIpLGUuY2FsbChuLCJ0eXBlUGFyYW1ldGVycyIpLCIgLz4iXSk7aWYoX2UuYXR0cmlidXRlcyYmMT09PV9lLmF0dHJpYnV0ZXMubGVuZ3RoJiZfZS5hdHRyaWJ1dGVzWzBdLnZhbHVlJiZpc1N0cmluZ0xpdGVyYWwoX2UuYXR0cmlidXRlc1swXS52YWx1ZSkmJiFfZS5hdHRyaWJ1dGVzWzBdLnZhbHVlLnZhbHVlLmluY2x1ZGVzKCJcbiIpJiYhVGUmJighX2UuYXR0cmlidXRlc1swXS5jb21tZW50c3x8IV9lLmF0dHJpYnV0ZXNbMF0uY29tbWVudHMubGVuZ3RoKSlyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbIjwiLGUuY2FsbChuLCJuYW1lIiksZS5jYWxsKG4sInR5cGVQYXJhbWV0ZXJzIiksIiAiLGNvbmNhdCQ0KGUubWFwKG4sImF0dHJpYnV0ZXMiKSksX2Uuc2VsZkNsb3Npbmc/IiAvPiI6Ij4iXSkpO3ZhciBPZT1fZS5hdHRyaWJ1dGVzLmxlbmd0aCYmaGFzVHJhaWxpbmdDb21tZW50KGdldExhc3QkNChfZS5hdHRyaWJ1dGVzKSksRmU9dC5qc3hCcmFja2V0U2FtZUxpbmUmJighVGV8fF9lLmF0dHJpYnV0ZXMubGVuZ3RoKSYmIU9lLE5lPV9lLmF0dHJpYnV0ZXMmJl9lLmF0dHJpYnV0ZXMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZSYmaXNTdHJpbmdMaXRlcmFsKGUudmFsdWUpJiZlLnZhbHVlLnZhbHVlLmluY2x1ZGVzKCJcbiIpfSk7cmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoWyI8IixlLmNhbGwobiwibmFtZSIpLGUuY2FsbChuLCJ0eXBlUGFyYW1ldGVycyIpLGNvbmNhdCQ0KFtpbmRlbnQkMihjb25jYXQkNChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gY29uY2F0JDQoW2xpbmUkMyxuKGUpXSl9LCJhdHRyaWJ1dGVzIikpKSxfZS5zZWxmQ2xvc2luZz9saW5lJDM6RmU/Ij4iOnNvZnRsaW5lJDFdKSxfZS5zZWxmQ2xvc2luZz8iLz4iOkZlPyIiOiI+Il0pLHtzaG91bGRCcmVhazpOZX0pO2Nhc2UiSlNYQ2xvc2luZ0VsZW1lbnQiOnJldHVybiBjb25jYXQkNChbIjwvIixlLmNhbGwobiwibmFtZSIpLCI+Il0pO2Nhc2UiSlNYT3BlbmluZ0ZyYWdtZW50IjpjYXNlIkpTWENsb3NpbmdGcmFnbWVudCI6Y2FzZSJUU0pzeE9wZW5pbmdGcmFnbWVudCI6Y2FzZSJUU0pzeENsb3NpbmdGcmFnbWVudCI6dmFyIEllPWkuY29tbWVudHMmJmkuY29tbWVudHMubGVuZ3RoLExlPUllJiYhaS5jb21tZW50cy5ldmVyeShjb21tZW50cyQzLmlzQmxvY2tDb21tZW50KSxQZT0iSlNYT3BlbmluZ0ZyYWdtZW50Ij09PWkudHlwZXx8IlRTSnN4T3BlbmluZ0ZyYWdtZW50Ij09PWkudHlwZTtyZXR1cm4gY29uY2F0JDQoW1BlPyI8IjoiPC8iLGluZGVudCQyKGNvbmNhdCQ0KFtMZT9oYXJkbGluZSQzOkllJiYhUGU/IiAiOiIiLGNvbW1lbnRzLnByaW50RGFuZ2xpbmdDb21tZW50cyhlLHQsITApXSkpLExlP2hhcmRsaW5lJDM6IiIsIj4iXSk7Y2FzZSJKU1hUZXh0Ijp0aHJvdyBuZXcgRXJyb3IoIkpTWFRlc3Qgc2hvdWxkIGJlIGhhbmRsZWQgYnkgSlNYRWxlbWVudCIpO2Nhc2UiSlNYRW1wdHlFeHByZXNzaW9uIjp2YXIgTWU9aS5jb21tZW50cyYmIWkuY29tbWVudHMuZXZlcnkoY29tbWVudHMkMy5pc0Jsb2NrQ29tbWVudCk7cmV0dXJuIGNvbmNhdCQ0KFtjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCFNZSksTWU/aGFyZGxpbmUkMzoiIl0pO2Nhc2UiQ2xhc3NCb2R5IjpyZXR1cm4gaS5jb21tZW50c3x8MCE9PWkuYm9keS5sZW5ndGg/Y29uY2F0JDQoWyJ7IixpLmJvZHkubGVuZ3RoPjA/aW5kZW50JDIoY29uY2F0JDQoW2hhcmRsaW5lJDMsZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBwcmludFN0YXRlbWVudFNlcXVlbmNlKGUsdCxuKX0sImJvZHkiKV0pKTpjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0KSxoYXJkbGluZSQzLCJ9Il0pOiJ7fSI7Y2FzZSJDbGFzc1Byb3BlcnR5IjpjYXNlIlRTQWJzdHJhY3RDbGFzc1Byb3BlcnR5IjpjYXNlIkNsYXNzUHJpdmF0ZVByb3BlcnR5IjppLmFjY2Vzc2liaWxpdHkmJmEucHVzaChpLmFjY2Vzc2liaWxpdHkrIiAiKSxpLnN0YXRpYyYmYS5wdXNoKCJzdGF0aWMgIiksIlRTQWJzdHJhY3RDbGFzc1Byb3BlcnR5Ij09PWkudHlwZSYmYS5wdXNoKCJhYnN0cmFjdCAiKSxpLnJlYWRvbmx5JiZhLnB1c2goInJlYWRvbmx5ICIpO3ZhciBqZT1nZXRGbG93VmFyaWFuY2UoaSk7cmV0dXJuIGplJiZhLnB1c2goamUpLGkuY29tcHV0ZWQ/YS5wdXNoKCJbIixlLmNhbGwobiwia2V5IiksIl0iKTphLnB1c2gocHJpbnRQcm9wZXJ0eUtleShlLHQsbikpLGEucHVzaChwcmludFR5cGVBbm5vdGF0aW9uKGUsdCxuKSksaS52YWx1ZSYmYS5wdXNoKCIgPSIscHJpbnRBc3NpZ25tZW50UmlnaHQoaS5rZXksaS52YWx1ZSxlLmNhbGwobiwidmFsdWUiKSx0KSksYS5wdXNoKG8pLGdyb3VwJDEoY29uY2F0JDQoYSkpO2Nhc2UiQ2xhc3NEZWNsYXJhdGlvbiI6Y2FzZSJDbGFzc0V4cHJlc3Npb24iOmNhc2UiVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24iOnJldHVybiBpc05vZGVTdGFydGluZ1dpdGhEZWNsYXJlKGksdCkmJmEucHVzaCgiZGVjbGFyZSAiKSxhLnB1c2goY29uY2F0JDQocHJpbnRDbGFzcyhlLHQsbikpKSxjb25jYXQkNChhKTtjYXNlIlRTSW50ZXJmYWNlSGVyaXRhZ2UiOnJldHVybiBhLnB1c2goZS5jYWxsKG4sImlkIikpLGkudHlwZVBhcmFtZXRlcnMmJmEucHVzaChlLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKSksY29uY2F0JDQoYSk7Y2FzZSJUZW1wbGF0ZUVsZW1lbnQiOnJldHVybiBqb2luJDIobGl0ZXJhbGxpbmUkMSxpLnZhbHVlLnJhdy5zcGxpdCgvXHI/XG4vZykpO2Nhc2UiVGVtcGxhdGVMaXRlcmFsIjp2YXIgUmU9ZS5tYXAobiwiZXhwcmVzc2lvbnMiKSxCZT1lLmdldFBhcmVudE5vZGUoKSwkZT0vXlt4Zl0/KGRlc2NyaWJlfGl0fHRlc3QpJC87aWYoIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI9PT1CZS50eXBlJiZCZS5xdWFzaT09PWkmJiJNZW1iZXJFeHByZXNzaW9uIj09PUJlLnRhZy50eXBlJiYiSWRlbnRpZmllciI9PT1CZS50YWcucHJvcGVydHkudHlwZSYmImVhY2giPT09QmUudGFnLnByb3BlcnR5Lm5hbWUmJigiSWRlbnRpZmllciI9PT1CZS50YWcub2JqZWN0LnR5cGUmJiRlLnRlc3QoQmUudGFnLm9iamVjdC5uYW1lKXx8Ik1lbWJlckV4cHJlc3Npb24iPT09QmUudGFnLm9iamVjdC50eXBlJiYiSWRlbnRpZmllciI9PT1CZS50YWcub2JqZWN0LnByb3BlcnR5LnR5cGUmJigib25seSI9PT1CZS50YWcub2JqZWN0LnByb3BlcnR5Lm5hbWV8fCJza2lwIj09PUJlLnRhZy5vYmplY3QucHJvcGVydHkubmFtZSkmJiJJZGVudGlmaWVyIj09PUJlLnRhZy5vYmplY3Qub2JqZWN0LnR5cGUmJiRlLnRlc3QoQmUudGFnLm9iamVjdC5vYmplY3QubmFtZSkpKXt2YXIgVWU9aS5xdWFzaXNbMF0udmFsdWUucmF3LnRyaW0oKS5zcGxpdCgvXHMqXHxccyovKTtpZihVZS5sZW5ndGg+MXx8VWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUubGVuZ3RofSkpe2Zvcih2YXIgemU9UmUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiIkeyIrcHJpbnREb2NUb1N0cmluZyQxKGUsT2JqZWN0LmFzc2lnbih7fSx0LHtwcmludFdpZHRoOjEvMH0pKS5mb3JtYXR0ZWQrIn0ifSksR2U9W3toYXNMaW5lQnJlYWs6ITEsY2VsbHM6W119XSxWZT0xO1ZlPGkucXVhc2lzLmxlbmd0aDtWZSsrKXt2YXIgcWU9R2VbR2UubGVuZ3RoLTFdLEhlPXplW1ZlLTFdO3FlLmNlbGxzLnB1c2goSGUpLC0xIT09SGUuaW5kZXhPZigiXG4iKSYmKHFlLmhhc0xpbmVCcmVhaz0hMCksLTEhPT1pLnF1YXNpc1tWZV0udmFsdWUucmF3LmluZGV4T2YoIlxuIikmJkdlLnB1c2goe2hhc0xpbmVCcmVhazohMSxjZWxsczpbXX0pfXZhciBXZT1HZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0LmNlbGxzLmxlbmd0aCl9LFVlLmxlbmd0aCksUWU9QXJyYXkuZnJvbShuZXcgQXJyYXkoV2UpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSxLZT1be2NlbGxzOlVlfV0uY29uY2F0KEdlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUuY2VsbHMubGVuZ3RofSkpO3JldHVybiBLZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaGFzTGluZUJyZWFrfSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSx0KXtRZVt0XT1NYXRoLm1heChRZVt0XSxnZXRTdHJpbmdXaWR0aCQxKGUpKX0pfSksYS5wdXNoKCJgIixpbmRlbnQkMihjb25jYXQkNChbaGFyZGxpbmUkMyxqb2luJDIoaGFyZGxpbmUkMyxLZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGpvaW4kMigiIHwgIixlLmNlbGxzLm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBlLmhhc0xpbmVCcmVhaz90OnQrIiAiLnJlcGVhdChRZVtuXS1nZXRTdHJpbmdXaWR0aCQxKHQpKX0pKX0pKV0pKSxoYXJkbGluZSQzLCJgIiksY29uY2F0JDQoYSl9fXJldHVybiBhLnB1c2goImAiKSxlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZS5nZXROYW1lKCk7aWYoYS5wdXNoKG4oZSkpLHI8UmUubGVuZ3RoKXt2YXIgbz10LnRhYldpZHRoLHM9Z2V0SW5kZW50U2l6ZSQxKGUuZ2V0VmFsdWUoKS52YWx1ZS5yYXcsbyksdT1SZVtyXTsoaS5leHByZXNzaW9uc1tyXS5jb21tZW50cyYmaS5leHByZXNzaW9uc1tyXS5jb21tZW50cy5sZW5ndGh8fCJNZW1iZXJFeHByZXNzaW9uIj09PWkuZXhwcmVzc2lvbnNbcl0udHlwZXx8Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI9PT1pLmV4cHJlc3Npb25zW3JdLnR5cGV8fCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09aS5leHByZXNzaW9uc1tyXS50eXBlKSYmKHU9Y29uY2F0JDQoW2luZGVudCQyKGNvbmNhdCQ0KFtzb2Z0bGluZSQxLHVdKSksc29mdGxpbmUkMV0pKTt2YXIgYz1hZGRBbGlnbm1lbnRUb0RvYyQyKHUscyxvKTthLnB1c2goZ3JvdXAkMShjb25jYXQkNChbIiR7IixjLGxpbmVTdWZmaXhCb3VuZGFyeSQxLCJ9Il0pKSl9fSwicXVhc2lzIiksYS5wdXNoKCJgIiksY29uY2F0JDQoYSk7Y2FzZSJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iOnJldHVybiBjb25jYXQkNChbZS5jYWxsKG4sInRhZyIpLGUuY2FsbChuLCJ0eXBlUGFyYW1ldGVycyIpLGUuY2FsbChuLCJxdWFzaSIpXSk7Y2FzZSJOb2RlIjpjYXNlIlByaW50YWJsZSI6Y2FzZSJTb3VyY2VMb2NhdGlvbiI6Y2FzZSJQb3NpdGlvbiI6Y2FzZSJTdGF0ZW1lbnQiOmNhc2UiRnVuY3Rpb24iOmNhc2UiUGF0dGVybiI6Y2FzZSJFeHByZXNzaW9uIjpjYXNlIkRlY2xhcmF0aW9uIjpjYXNlIlNwZWNpZmllciI6Y2FzZSJOYW1lZFNwZWNpZmllciI6Y2FzZSJDb21tZW50IjpjYXNlIk1lbWJlclR5cGVBbm5vdGF0aW9uIjpjYXNlIlR5cGUiOnRocm93IG5ldyBFcnJvcigidW5wcmludGFibGUgdHlwZTogIitKU09OLnN0cmluZ2lmeShpLnR5cGUpKTtjYXNlIlR5cGVBbm5vdGF0aW9uIjpjYXNlIlRTVHlwZUFubm90YXRpb24iOnJldHVybiBpLnR5cGVBbm5vdGF0aW9uP2UuY2FsbChuLCJ0eXBlQW5ub3RhdGlvbiIpOiIiO2Nhc2UiVFNUdXBsZVR5cGUiOmNhc2UiVHVwbGVUeXBlQW5ub3RhdGlvbiI6dmFyIEplPSJUU1R1cGxlVHlwZSI9PT1pLnR5cGU/ImVsZW1lbnRUeXBlcyI6InR5cGVzIjtyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChbIlsiLGluZGVudCQyKGNvbmNhdCQ0KFtzb2Z0bGluZSQxLHByaW50QXJyYXlJdGVtcyhlLHQsSmUsbildKSksIlRTVHVwbGVUeXBlIj09PWkudHlwZT8iIjppZkJyZWFrJDEoc2hvdWxkUHJpbnRDb21tYSh0KT8iLCI6IiIpLGNvbW1lbnRzLnByaW50RGFuZ2xpbmdDb21tZW50cyhlLHQsITApLHNvZnRsaW5lJDEsIl0iXSkpO2Nhc2UiRXhpc3RzVHlwZUFubm90YXRpb24iOnJldHVybiIqIjtjYXNlIkVtcHR5VHlwZUFubm90YXRpb24iOnJldHVybiJlbXB0eSI7Y2FzZSJBbnlUeXBlQW5ub3RhdGlvbiI6cmV0dXJuImFueSI7Y2FzZSJNaXhlZFR5cGVBbm5vdGF0aW9uIjpyZXR1cm4ibWl4ZWQiO2Nhc2UiQXJyYXlUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwiZWxlbWVudFR5cGUiKSwiW10iXSk7Y2FzZSJCb29sZWFuVHlwZUFubm90YXRpb24iOnJldHVybiJib29sZWFuIjtjYXNlIkJvb2xlYW5MaXRlcmFsVHlwZUFubm90YXRpb24iOnJldHVybiIiK2kudmFsdWU7Y2FzZSJEZWNsYXJlQ2xhc3MiOnJldHVybiBwcmludEZsb3dEZWNsYXJhdGlvbihlLHByaW50Q2xhc3MoZSx0LG4pKTtjYXNlIkRlY2xhcmVGdW5jdGlvbiI6cmV0dXJuIGkucGFyYW1zP2NvbmNhdCQ0KFsiZGVjbGFyZSAiLHByaW50RnVuY3Rpb25EZWNsYXJhdGlvbihlLG4sdCksb10pOnByaW50Rmxvd0RlY2xhcmF0aW9uKGUsWyJmdW5jdGlvbiAiLGUuY2FsbChuLCJpZCIpLGkucHJlZGljYXRlPyIgIjoiIixlLmNhbGwobiwicHJlZGljYXRlIiksb10pO2Nhc2UiRGVjbGFyZU1vZHVsZSI6cmV0dXJuIHByaW50Rmxvd0RlY2xhcmF0aW9uKGUsWyJtb2R1bGUgIixlLmNhbGwobiwiaWQiKSwiICIsZS5jYWxsKG4sImJvZHkiKV0pO2Nhc2UiRGVjbGFyZU1vZHVsZUV4cG9ydHMiOnJldHVybiBwcmludEZsb3dEZWNsYXJhdGlvbihlLFsibW9kdWxlLmV4cG9ydHMiLCI6ICIsZS5jYWxsKG4sInR5cGVBbm5vdGF0aW9uIiksb10pO2Nhc2UiRGVjbGFyZVZhcmlhYmxlIjpyZXR1cm4gcHJpbnRGbG93RGVjbGFyYXRpb24oZSxbInZhciAiLGUuY2FsbChuLCJpZCIpLG9dKTtjYXNlIkRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbiI6cmV0dXJuIGNvbmNhdCQ0KFsiZGVjbGFyZSBleHBvcnQgKiBmcm9tICIsZS5jYWxsKG4sInNvdXJjZSIpXSk7Y2FzZSJEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24iOnJldHVybiBjb25jYXQkNChbImRlY2xhcmUgIixwcmludEV4cG9ydERlY2xhcmF0aW9uKGUsdCxuKV0pO2Nhc2UiRGVjbGFyZU9wYXF1ZVR5cGUiOmNhc2UiT3BhcXVlVHlwZSI6cmV0dXJuIGEucHVzaCgib3BhcXVlIHR5cGUgIixlLmNhbGwobiwiaWQiKSxlLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKSksaS5zdXBlcnR5cGUmJmEucHVzaCgiOiAiLGUuY2FsbChuLCJzdXBlcnR5cGUiKSksaS5pbXBsdHlwZSYmYS5wdXNoKCIgPSAiLGUuY2FsbChuLCJpbXBsdHlwZSIpKSxhLnB1c2gobyksIkRlY2xhcmVPcGFxdWVUeXBlIj09PWkudHlwZT9wcmludEZsb3dEZWNsYXJhdGlvbihlLGEpOmNvbmNhdCQ0KGEpO2Nhc2UiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiI6Y2FzZSJUU0Z1bmN0aW9uVHlwZSI6dmFyIFllPWUuZ2V0UGFyZW50Tm9kZSgwKSxYZT1lLmdldFBhcmVudE5vZGUoMSksWmU9ZS5nZXRQYXJlbnROb2RlKDIpLGV0PSJUU0Z1bmN0aW9uVHlwZSI9PT1pLnR5cGV8fCEoIk9iamVjdFR5cGVQcm9wZXJ0eSI9PT1ZZS50eXBlJiYhZ2V0Rmxvd1ZhcmlhbmNlKFllKSYmIVllLm9wdGlvbmFsJiZ0LmxvY1N0YXJ0KFllKT09PXQubG9jU3RhcnQoaSl8fCJPYmplY3RUeXBlQ2FsbFByb3BlcnR5Ij09PVllLnR5cGV8fFplJiYiRGVjbGFyZUZ1bmN0aW9uIj09PVplLnR5cGUpLHR0PWV0JiYoIlR5cGVBbm5vdGF0aW9uIj09PVllLnR5cGV8fCJUU1R5cGVBbm5vdGF0aW9uIj09PVllLnR5cGUpLG50PXR0JiZldCYmKCJUeXBlQW5ub3RhdGlvbiI9PT1ZZS50eXBlfHwiVFNUeXBlQW5ub3RhdGlvbiI9PT1ZZS50eXBlKSYmIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PVhlLnR5cGU7cmV0dXJuIGlzT2JqZWN0VHlwZVByb3BlcnR5QUZ1bmN0aW9uKFllLHQpJiYoZXQ9ITAsdHQ9ITApLG50JiZhLnB1c2goIigiKSxhLnB1c2gocHJpbnRGdW5jdGlvblBhcmFtcyhlLG4sdCwhMSwhMCkpLChpLnJldHVyblR5cGV8fGkucHJlZGljYXRlfHxpLnR5cGVBbm5vdGF0aW9uKSYmYS5wdXNoKGV0PyIgPT4gIjoiOiAiLGUuY2FsbChuLCJyZXR1cm5UeXBlIiksZS5jYWxsKG4sInByZWRpY2F0ZSIpLGUuY2FsbChuLCJ0eXBlQW5ub3RhdGlvbiIpKSxudCYmYS5wdXNoKCIpIiksZ3JvdXAkMShjb25jYXQkNChhKSk7Y2FzZSJGdW5jdGlvblR5cGVQYXJhbSI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwibmFtZSIpLHByaW50T3B0aW9uYWxUb2tlbihlKSxpLm5hbWU/IjogIjoiIixlLmNhbGwobiwidHlwZUFubm90YXRpb24iKV0pO2Nhc2UiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIjpyZXR1cm4gY29uY2F0JDQoW2UuY2FsbChuLCJpZCIpLGUuY2FsbChuLCJ0eXBlUGFyYW1ldGVycyIpXSk7Y2FzZSJEZWNsYXJlSW50ZXJmYWNlIjpjYXNlIkludGVyZmFjZURlY2xhcmF0aW9uIjpjYXNlIkludGVyZmFjZVR5cGUiOmNhc2UiSW50ZXJmYWNlVHlwZUFubm90YXRpb24iOnJldHVybigiRGVjbGFyZUludGVyZmFjZSI9PT1pLnR5cGV8fGlzTm9kZVN0YXJ0aW5nV2l0aERlY2xhcmUoaSx0KSkmJmEucHVzaCgiZGVjbGFyZSAiKSxhLnB1c2goImludGVyZmFjZSIpLCJEZWNsYXJlSW50ZXJmYWNlIiE9PWkudHlwZSYmIkludGVyZmFjZURlY2xhcmF0aW9uIiE9PWkudHlwZXx8YS5wdXNoKCIgIixlLmNhbGwobiwiaWQiKSxlLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKSksaS5leHRlbmRzLmxlbmd0aD4wJiZhLnB1c2goZ3JvdXAkMShpbmRlbnQkMihjb25jYXQkNChbbGluZSQzLCJleHRlbmRzICIsam9pbiQyKCIsICIsZS5tYXAobiwiZXh0ZW5kcyIpKV0pKSkpLGEucHVzaCgiICIsZS5jYWxsKG4sImJvZHkiKSksZ3JvdXAkMShjb25jYXQkNChhKSk7Y2FzZSJDbGFzc0ltcGxlbWVudHMiOmNhc2UiSW50ZXJmYWNlRXh0ZW5kcyI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwiaWQiKSxlLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKV0pO2Nhc2UiVFNJbnRlcnNlY3Rpb25UeXBlIjpjYXNlIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIjpmb3IodmFyIHJ0PWUubWFwKG4sInR5cGVzIiksaXQ9W10sb3Q9ITEsYXQ9MDthdDxydC5sZW5ndGg7KythdCkwPT09YXQ/aXQucHVzaChydFthdF0pOmlzT2JqZWN0VHlwZShpLnR5cGVzW2F0LTFdKSYmaXNPYmplY3RUeXBlKGkudHlwZXNbYXRdKT9pdC5wdXNoKGNvbmNhdCQ0KFsiICYgIixvdD9pbmRlbnQkMihydFthdF0pOnJ0W2F0XV0pKTppc09iamVjdFR5cGUoaS50eXBlc1thdC0xXSl8fGlzT2JqZWN0VHlwZShpLnR5cGVzW2F0XSk/KGF0PjEmJihvdD0hMCksaXQucHVzaCgiICYgIixhdD4xP2luZGVudCQyKHJ0W2F0XSk6cnRbYXRdKSk6aXQucHVzaChpbmRlbnQkMihjb25jYXQkNChbIiAmIixsaW5lJDMscnRbYXRdXSkpKTtyZXR1cm4gZ3JvdXAkMShjb25jYXQkNChpdCkpO2Nhc2UiVFNVbmlvblR5cGUiOmNhc2UiVW5pb25UeXBlQW5ub3RhdGlvbiI6dmFyIHN0PWUuZ2V0UGFyZW50Tm9kZSgpLHV0PWUuZ2V0UGFyZW50Tm9kZSgxKSxjdD0iVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iIT09c3QudHlwZSYmIlRTVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iIT09c3QudHlwZSYmIkdlbmVyaWNUeXBlQW5ub3RhdGlvbiIhPT1zdC50eXBlJiYiVFNUeXBlUmVmZXJlbmNlIiE9PXN0LnR5cGUmJiEoIkZ1bmN0aW9uVHlwZVBhcmFtIj09PXN0LnR5cGUmJiFzdC5uYW1lKSYmIlRTVHlwZUFzc2VydGlvbkV4cHJlc3Npb24iIT09dXQudHlwZSYmISgoIlR5cGVBbGlhcyI9PT1zdC50eXBlfHwiVmFyaWFibGVEZWNsYXJhdG9yIj09PXN0LnR5cGUpJiZoYXNMZWFkaW5nT3duTGluZUNvbW1lbnQodC5vcmlnaW5hbFRleHQsaSx0KSksbHQ9c2hvdWxkSHVnVHlwZShpKSxwdD1lLm1hcChmdW5jdGlvbihlKXt2YXIgcj1lLmNhbGwobik7cmV0dXJuIGx0fHwocj1hbGlnbiQxKDIscikpLGNvbW1lbnRzLnByaW50Q29tbWVudHMoZSxmdW5jdGlvbigpe3JldHVybiByfSx0KX0sInR5cGVzIik7aWYobHQpcmV0dXJuIGpvaW4kMigiIHwgIixwdCk7dmFyIGZ0LGR0PWNvbmNhdCQ0KFtpZkJyZWFrJDEoY29uY2F0JDQoW2N0P2xpbmUkMzoiIiwifCAiXSkpLGpvaW4kMihjb25jYXQkNChbbGluZSQzLCJ8ICJdKSxwdCldKTtpZigiVFNVbmlvblR5cGUiPT09aS50eXBlKXt2YXIgaHQ9ZS5nZXRQYXJlbnROb2RlKDIpLG10PWUuZ2V0UGFyZW50Tm9kZSgzKTtmdD1odCYmIlRTUGFyZW50aGVzaXplZFR5cGUiPT09aHQudHlwZSYmbXQmJigiVFNVbmlvblR5cGUiPT09bXQudHlwZXx8IlRTSW50ZXJzZWN0aW9uVHlwZSI9PT1tdC50eXBlKX1lbHNlIGZ0PW5lZWRzUGFyZW5zXzEoZSx0KTtyZXR1cm4gZ3JvdXAkMShmdD9jb25jYXQkNChbaW5kZW50JDIoZHQpLHNvZnRsaW5lJDFdKTpjdD9pbmRlbnQkMihkdCk6ZHQpO2Nhc2UiTnVsbGFibGVUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIGNvbmNhdCQ0KFsiPyIsZS5jYWxsKG4sInR5cGVBbm5vdGF0aW9uIildKTtjYXNlIlRTTnVsbEtleXdvcmQiOmNhc2UiTnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIm51bGwiO2Nhc2UiVGhpc1R5cGVBbm5vdGF0aW9uIjpyZXR1cm4idGhpcyI7Y2FzZSJOdW1iZXJUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIm51bWJlciI7Y2FzZSJPYmplY3RUeXBlQ2FsbFByb3BlcnR5IjpyZXR1cm4gaS5zdGF0aWMmJmEucHVzaCgic3RhdGljICIpLGEucHVzaChlLmNhbGwobiwidmFsdWUiKSksY29uY2F0JDQoYSk7Y2FzZSJPYmplY3RUeXBlSW5kZXhlciI6dmFyIGd0PWdldEZsb3dWYXJpYW5jZShpKTtyZXR1cm4gY29uY2F0JDQoW2d0fHwiIiwiWyIsZS5jYWxsKG4sImlkIiksaS5pZD8iOiAiOiIiLGUuY2FsbChuLCJrZXkiKSwiXTogIixlLmNhbGwobiwidmFsdWUiKV0pO2Nhc2UiT2JqZWN0VHlwZVByb3BlcnR5Ijp2YXIgeXQ9Z2V0Rmxvd1ZhcmlhbmNlKGkpLHZ0PSIiO3JldHVybiBpLnByb3RvP3Z0PSJwcm90byAiOmkuc3RhdGljJiYodnQ9InN0YXRpYyAiKSxjb25jYXQkNChbdnQsaXNHZXR0ZXJPclNldHRlcihpKT9pLmtpbmQrIiAiOiIiLHl0fHwiIixwcmludFByb3BlcnR5S2V5KGUsdCxuKSxwcmludE9wdGlvbmFsVG9rZW4oZSksaXNGdW5jdGlvbk5vdGF0aW9uKGksdCk/IiI6IjogIixlLmNhbGwobiwidmFsdWUiKV0pO2Nhc2UiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiOnJldHVybiBjb25jYXQkNChbZS5jYWxsKG4sInF1YWxpZmljYXRpb24iKSwiLiIsZS5jYWxsKG4sImlkIildKTtjYXNlIlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIG5vZGVTdHIoaSx0KTtjYXNlIk51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIGFzc2VydC5zdHJpY3RFcXVhbChfdHlwZW9mKGkudmFsdWUpLCJudW1iZXIiKSxwcmludE51bWJlciQxKG51bGwhPWkuZXh0cmE/aS5leHRyYS5yYXc6aS5yYXcpO2Nhc2UiU3RyaW5nVHlwZUFubm90YXRpb24iOnJldHVybiJzdHJpbmciO2Nhc2UiRGVjbGFyZVR5cGVBbGlhcyI6Y2FzZSJUeXBlQWxpYXMiOigiRGVjbGFyZVR5cGVBbGlhcyI9PT1pLnR5cGV8fGlzTm9kZVN0YXJ0aW5nV2l0aERlY2xhcmUoaSx0KSkmJmEucHVzaCgiZGVjbGFyZSAiKTt2YXIgYnQ9cHJpbnRBc3NpZ25tZW50UmlnaHQoaS5pZCxpLnJpZ2h0LGUuY2FsbChuLCJyaWdodCIpLHQpO3JldHVybiBhLnB1c2goInR5cGUgIixlLmNhbGwobiwiaWQiKSxlLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKSwiID0iLGJ0LG8pLGdyb3VwJDEoY29uY2F0JDQoYSkpO2Nhc2UiVHlwZUNhc3RFeHByZXNzaW9uIjpyZXR1cm4gY29uY2F0JDQoWyIoIixlLmNhbGwobiwiZXhwcmVzc2lvbiIpLCI6ICIsZS5jYWxsKG4sInR5cGVBbm5vdGF0aW9uIiksIikiXSk7Y2FzZSJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iOmNhc2UiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iOmNhc2UiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iOmNhc2UiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiI6cmV0dXJuIHByaW50VHlwZVBhcmFtZXRlcnMoZSx0LG4sInBhcmFtcyIpO2Nhc2UiVFNUeXBlUGFyYW1ldGVyIjpjYXNlIlR5cGVQYXJhbWV0ZXIiOmlmKCJUU01hcHBlZFR5cGUiPT09ZS5nZXRQYXJlbnROb2RlKCkudHlwZSlyZXR1cm4gYS5wdXNoKCJbIixlLmNhbGwobiwibmFtZSIpKSxpLmNvbnN0cmFpbnQmJmEucHVzaCgiIGluICIsZS5jYWxsKG4sImNvbnN0cmFpbnQiKSksYS5wdXNoKCJdIiksY29uY2F0JDQoYSk7dmFyIHh0PWdldEZsb3dWYXJpYW5jZShpKTtyZXR1cm4geHQmJmEucHVzaCh4dCksYS5wdXNoKGUuY2FsbChuLCJuYW1lIikpLGkuYm91bmQmJihhLnB1c2goIjogIiksYS5wdXNoKGUuY2FsbChuLCJib3VuZCIpKSksaS5jb25zdHJhaW50JiZhLnB1c2goIiBleHRlbmRzICIsZS5jYWxsKG4sImNvbnN0cmFpbnQiKSksaS5kZWZhdWx0JiZhLnB1c2goIiA9ICIsZS5jYWxsKG4sImRlZmF1bHQiKSksY29uY2F0JDQoYSk7Y2FzZSJUeXBlb2ZUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIGNvbmNhdCQ0KFsidHlwZW9mICIsZS5jYWxsKG4sImFyZ3VtZW50IildKTtjYXNlIlZvaWRUeXBlQW5ub3RhdGlvbiI6cmV0dXJuInZvaWQiO2Nhc2UiSW5mZXJyZWRQcmVkaWNhdGUiOnJldHVybiIlY2hlY2tzIjtjYXNlIkRlY2xhcmVkUHJlZGljYXRlIjpyZXR1cm4gY29uY2F0JDQoWyIlY2hlY2tzKCIsZS5jYWxsKG4sInZhbHVlIiksIikiXSk7Y2FzZSJUU0Fic3RyYWN0S2V5d29yZCI6cmV0dXJuImFic3RyYWN0IjtjYXNlIlRTQW55S2V5d29yZCI6cmV0dXJuImFueSI7Y2FzZSJUU0FzeW5jS2V5d29yZCI6cmV0dXJuImFzeW5jIjtjYXNlIlRTQm9vbGVhbktleXdvcmQiOnJldHVybiJib29sZWFuIjtjYXNlIlRTQ29uc3RLZXl3b3JkIjpyZXR1cm4iY29uc3QiO2Nhc2UiVFNEZWNsYXJlS2V5d29yZCI6cmV0dXJuImRlY2xhcmUiO2Nhc2UiVFNFeHBvcnRLZXl3b3JkIjpyZXR1cm4iZXhwb3J0IjtjYXNlIlRTTmV2ZXJLZXl3b3JkIjpyZXR1cm4ibmV2ZXIiO2Nhc2UiVFNOdW1iZXJLZXl3b3JkIjpyZXR1cm4ibnVtYmVyIjtjYXNlIlRTT2JqZWN0S2V5d29yZCI6cmV0dXJuIm9iamVjdCI7Y2FzZSJUU1Byb3RlY3RlZEtleXdvcmQiOnJldHVybiJwcm90ZWN0ZWQiO2Nhc2UiVFNQcml2YXRlS2V5d29yZCI6cmV0dXJuInByaXZhdGUiO2Nhc2UiVFNQdWJsaWNLZXl3b3JkIjpyZXR1cm4icHVibGljIjtjYXNlIlRTUmVhZG9ubHlLZXl3b3JkIjpyZXR1cm4icmVhZG9ubHkiO2Nhc2UiVFNTeW1ib2xLZXl3b3JkIjpyZXR1cm4ic3ltYm9sIjtjYXNlIlRTU3RhdGljS2V5d29yZCI6cmV0dXJuInN0YXRpYyI7Y2FzZSJUU1N0cmluZ0tleXdvcmQiOnJldHVybiJzdHJpbmciO2Nhc2UiVFNVbmRlZmluZWRLZXl3b3JkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlIlRTVm9pZEtleXdvcmQiOnJldHVybiJ2b2lkIjtjYXNlIlRTQXNFeHByZXNzaW9uIjpyZXR1cm4gY29uY2F0JDQoW2UuY2FsbChuLCJleHByZXNzaW9uIiksIiBhcyAiLGUuY2FsbChuLCJ0eXBlQW5ub3RhdGlvbiIpXSk7Y2FzZSJUU0FycmF5VHlwZSI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwiZWxlbWVudFR5cGUiKSwiW10iXSk7Y2FzZSJUU1Byb3BlcnR5U2lnbmF0dXJlIjpyZXR1cm4gaS5leHBvcnQmJmEucHVzaCgiZXhwb3J0ICIpLGkuYWNjZXNzaWJpbGl0eSYmYS5wdXNoKGkuYWNjZXNzaWJpbGl0eSsiICIpLGkuc3RhdGljJiZhLnB1c2goInN0YXRpYyAiKSxpLnJlYWRvbmx5JiZhLnB1c2goInJlYWRvbmx5ICIpLGkuY29tcHV0ZWQmJmEucHVzaCgiWyIpLGEucHVzaChwcmludFByb3BlcnR5S2V5KGUsdCxuKSksaS5jb21wdXRlZCYmYS5wdXNoKCJdIiksYS5wdXNoKHByaW50T3B0aW9uYWxUb2tlbihlKSksaS50eXBlQW5ub3RhdGlvbiYmKGEucHVzaCgiOiAiKSxhLnB1c2goZS5jYWxsKG4sInR5cGVBbm5vdGF0aW9uIikpKSxpLmluaXRpYWxpemVyJiZhLnB1c2goIiA9ICIsZS5jYWxsKG4sImluaXRpYWxpemVyIikpLGNvbmNhdCQ0KGEpO2Nhc2UiVFNQYXJhbWV0ZXJQcm9wZXJ0eSI6cmV0dXJuIGkuYWNjZXNzaWJpbGl0eSYmYS5wdXNoKGkuYWNjZXNzaWJpbGl0eSsiICIpLGkuZXhwb3J0JiZhLnB1c2goImV4cG9ydCAiKSxpLnN0YXRpYyYmYS5wdXNoKCJzdGF0aWMgIiksaS5yZWFkb25seSYmYS5wdXNoKCJyZWFkb25seSAiKSxhLnB1c2goZS5jYWxsKG4sInBhcmFtZXRlciIpKSxjb25jYXQkNChhKTtjYXNlIlRTVHlwZVJlZmVyZW5jZSI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwidHlwZU5hbWUiKSxwcmludFR5cGVQYXJhbWV0ZXJzKGUsdCxuLCJ0eXBlUGFyYW1ldGVycyIpXSk7Y2FzZSJUU1R5cGVRdWVyeSI6cmV0dXJuIGNvbmNhdCQ0KFsidHlwZW9mICIsZS5jYWxsKG4sImV4cHJOYW1lIildKTtjYXNlIlRTUGFyZW50aGVzaXplZFR5cGUiOnJldHVybiBlLmNhbGwobiwidHlwZUFubm90YXRpb24iKTtjYXNlIlRTSW5kZXhTaWduYXR1cmUiOnZhciBDdD1lLmdldFBhcmVudE5vZGUoKTtyZXR1cm4gY29uY2F0JDQoW2kuZXhwb3J0PyJleHBvcnQgIjoiIixpLmFjY2Vzc2liaWxpdHk/Y29uY2F0JDQoW2kuYWNjZXNzaWJpbGl0eSwiICJdKToiIixpLnN0YXRpYz8ic3RhdGljICI6IiIsaS5yZWFkb25seT8icmVhZG9ubHkgIjoiIiwiWyIsZS5jYWxsKG4sImluZGV4IiksIl06ICIsZS5jYWxsKG4sInR5cGVBbm5vdGF0aW9uIiksIkNsYXNzQm9keSI9PT1DdC50eXBlP286IiJdKTtjYXNlIlRTVHlwZVByZWRpY2F0ZSI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwicGFyYW1ldGVyTmFtZSIpLCIgaXMgIixlLmNhbGwobiwidHlwZUFubm90YXRpb24iKV0pO2Nhc2UiVFNOb25OdWxsRXhwcmVzc2lvbiI6cmV0dXJuIGNvbmNhdCQ0KFtlLmNhbGwobiwiZXhwcmVzc2lvbiIpLCIhIl0pO2Nhc2UiVFNUaGlzVHlwZSI6cmV0dXJuInRoaXMiO2Nhc2UiVFNMYXN0VHlwZU5vZGUiOnJldHVybiBjb25jYXQkNChbaS5pc1R5cGVPZj8idHlwZW9mICI6IiIsImltcG9ydCgiLGUuY2FsbChuLCJhcmd1bWVudCIpLCIpIixpLnF1YWxpZmllcj9jb25jYXQkNChbIi4iLGUuY2FsbChuLCJxdWFsaWZpZXIiKV0pOiIiXSk7Y2FzZSJUU0xpdGVyYWxUeXBlIjpyZXR1cm4gZS5jYWxsKG4sImxpdGVyYWwiKTtjYXNlIlRTSW5kZXhlZEFjY2Vzc1R5cGUiOnJldHVybiBjb25jYXQkNChbZS5jYWxsKG4sIm9iamVjdFR5cGUiKSwiWyIsZS5jYWxsKG4sImluZGV4VHlwZSIpLCJdIl0pO2Nhc2UiVFNDb25zdHJ1Y3RTaWduYXR1cmUiOmNhc2UiVFNDb25zdHJ1Y3RvclR5cGUiOmNhc2UiVFNDYWxsU2lnbmF0dXJlIjppZigiVFNDYWxsU2lnbmF0dXJlIiE9PWkudHlwZSYmYS5wdXNoKCJuZXcgIiksYS5wdXNoKGdyb3VwJDEocHJpbnRGdW5jdGlvblBhcmFtcyhlLG4sdCwhMSwhMCkpKSxpLnR5cGVBbm5vdGF0aW9uKXt2YXIgRXQ9IlRTQ29uc3RydWN0b3JUeXBlIj09PWkudHlwZTthLnB1c2goRXQ/IiA9PiAiOiI6ICIsZS5jYWxsKG4sInR5cGVBbm5vdGF0aW9uIikpfXJldHVybiBjb25jYXQkNChhKTtjYXNlIlRTVHlwZU9wZXJhdG9yIjpyZXR1cm4gY29uY2F0JDQoW2kub3BlcmF0b3IsIiAiLGUuY2FsbChuLCJ0eXBlQW5ub3RhdGlvbiIpXSk7Y2FzZSJUU01hcHBlZFR5cGUiOnJldHVybiBncm91cCQxKGNvbmNhdCQ0KFsieyIsaW5kZW50JDIoY29uY2F0JDQoW3QuYnJhY2tldFNwYWNpbmc/bGluZSQzOnNvZnRsaW5lJDEsaS5yZWFkb25seVRva2VuP2NvbmNhdCQ0KFtnZXRUeXBlU2NyaXB0TWFwcGVkVHlwZU1vZGlmaWVyKGkucmVhZG9ubHlUb2tlbiwicmVhZG9ubHkiKSwiICJdKToiIixwcmludFR5cGVTY3JpcHRNb2RpZmllcnMoZSx0LG4pLGUuY2FsbChuLCJ0eXBlUGFyYW1ldGVyIiksaS5xdWVzdGlvblRva2VuP2dldFR5cGVTY3JpcHRNYXBwZWRUeXBlTW9kaWZpZXIoaS5xdWVzdGlvblRva2VuLCI/Iik6IiIsIjogIixlLmNhbGwobiwidHlwZUFubm90YXRpb24iKV0pKSxjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSx0LmJyYWNrZXRTcGFjaW5nP2xpbmUkMzpzb2Z0bGluZSQxLCJ9Il0pKTtjYXNlIlRTTWV0aG9kU2lnbmF0dXJlIjpyZXR1cm4gYS5wdXNoKGkuYWNjZXNzaWJpbGl0eT9jb25jYXQkNChbaS5hY2Nlc3NpYmlsaXR5LCIgIl0pOiIiLGkuZXhwb3J0PyJleHBvcnQgIjoiIixpLnN0YXRpYz8ic3RhdGljICI6IiIsaS5yZWFkb25seT8icmVhZG9ubHkgIjoiIixpLmNvbXB1dGVkPyJbIjoiIixlLmNhbGwobiwia2V5IiksaS5jb21wdXRlZD8iXSI6IiIscHJpbnRPcHRpb25hbFRva2VuKGUpLHByaW50RnVuY3Rpb25QYXJhbXMoZSxuLHQsITEsITApKSxpLnR5cGVBbm5vdGF0aW9uJiZhLnB1c2goIjogIixlLmNhbGwobiwidHlwZUFubm90YXRpb24iKSksZ3JvdXAkMShjb25jYXQkNChhKSk7Y2FzZSJUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uIjpyZXR1cm4gYS5wdXNoKCJleHBvcnQgYXMgbmFtZXNwYWNlICIsZS5jYWxsKG4sIm5hbWUiKSksdC5zZW1pJiZhLnB1c2goIjsiKSxncm91cCQxKGNvbmNhdCQ0KGEpKTtjYXNlIlRTRW51bURlY2xhcmF0aW9uIjpyZXR1cm4gaXNOb2RlU3RhcnRpbmdXaXRoRGVjbGFyZShpLHQpJiZhLnB1c2goImRlY2xhcmUgIiksaS5tb2RpZmllcnMmJmEucHVzaChwcmludFR5cGVTY3JpcHRNb2RpZmllcnMoZSx0LG4pKSxpLmNvbnN0JiZhLnB1c2goImNvbnN0ICIpLGEucHVzaCgiZW51bSAiLGUuY2FsbChuLCJpZCIpLCIgIiksMD09PWkubWVtYmVycy5sZW5ndGg/YS5wdXNoKGdyb3VwJDEoY29uY2F0JDQoWyJ7Iixjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0KSxzb2Z0bGluZSQxLCJ9Il0pKSk6YS5wdXNoKGdyb3VwJDEoY29uY2F0JDQoWyJ7IixpbmRlbnQkMihjb25jYXQkNChbaGFyZGxpbmUkMyxwcmludEFycmF5SXRlbXMoZSx0LCJtZW1iZXJzIixuKSxzaG91bGRQcmludENvbW1hKHQsImVzNSIpPyIsIjoiIl0pKSxjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSxoYXJkbGluZSQzLCJ9Il0pKSksY29uY2F0JDQoYSk7Y2FzZSJUU0VudW1NZW1iZXIiOnJldHVybiBhLnB1c2goZS5jYWxsKG4sImlkIikpLGkuaW5pdGlhbGl6ZXImJmEucHVzaCgiID0gIixlLmNhbGwobiwiaW5pdGlhbGl6ZXIiKSksY29uY2F0JDQoYSk7Y2FzZSJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIjpyZXR1cm4gYS5wdXNoKHByaW50VHlwZVNjcmlwdE1vZGlmaWVycyhlLHQsbiksImltcG9ydCAiLGUuY2FsbChuLCJuYW1lIiksIiA9ICIsZS5jYWxsKG4sIm1vZHVsZVJlZmVyZW5jZSIpKSx0LnNlbWkmJmEucHVzaCgiOyIpLGdyb3VwJDEoY29uY2F0JDQoYSkpO2Nhc2UiVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSI6cmV0dXJuIGNvbmNhdCQ0KFsicmVxdWlyZSgiLGUuY2FsbChuLCJleHByZXNzaW9uIiksIikiXSk7Y2FzZSJUU01vZHVsZURlY2xhcmF0aW9uIjp2YXIgRHQ9ZS5nZXRQYXJlbnROb2RlKCksd3Q9aXNMaXRlcmFsKGkuaWQpLFN0PSJUU01vZHVsZURlY2xhcmF0aW9uIj09PUR0LnR5cGUsa3Q9aS5ib2R5JiYiVFNNb2R1bGVEZWNsYXJhdGlvbiI9PT1pLmJvZHkudHlwZTtpZihTdClhLnB1c2goIi4iKTtlbHNleyEwPT09aS5kZWNsYXJlJiZhLnB1c2goImRlY2xhcmUgIiksYS5wdXNoKHByaW50VHlwZVNjcmlwdE1vZGlmaWVycyhlLHQsbikpOyJJZGVudGlmaWVyIj09PWkuaWQudHlwZSYmImdsb2JhbCI9PT1pLmlkLm5hbWUmJiEvbmFtZXNwYWNlfG1vZHVsZS8udGVzdCh0Lm9yaWdpbmFsVGV4dC5zbGljZSh0LmxvY1N0YXJ0KGkpLHQubG9jU3RhcnQoaS5pZCkpKXx8YS5wdXNoKHd0PyJtb2R1bGUgIjoibmFtZXNwYWNlICIpfXJldHVybiBhLnB1c2goZS5jYWxsKG4sImlkIikpLGt0P2EucHVzaChlLmNhbGwobiwiYm9keSIpKTppLmJvZHk/YS5wdXNoKCIgeyIsaW5kZW50JDIoY29uY2F0JDQoW2xpbmUkMyxlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIGNvbW1lbnRzLnByaW50RGFuZ2xpbmdDb21tZW50cyhlLHQsITApfSwiYm9keSIpLGdyb3VwJDEoZS5jYWxsKG4sImJvZHkiKSldKSksbGluZSQzLCJ9Iik6YS5wdXNoKG8pLGNvbmNhdCQ0KGEpO2Nhc2UiVFNNb2R1bGVCbG9jayI6cmV0dXJuIGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gcHJpbnRTdGF0ZW1lbnRTZXF1ZW5jZShlLHQsbil9LCJib2R5Iik7Y2FzZSJQcml2YXRlTmFtZSI6cmV0dXJuIGNvbmNhdCQ0KFsiIyIsZS5jYWxsKG4sImlkIildKTtjYXNlIlRTQ29uZGl0aW9uYWxUeXBlIjpyZXR1cm4gZm9ybWF0VGVybmFyeU9wZXJhdG9yKGUsdCxuLHtiZWZvcmVQYXJ0czpmdW5jdGlvbigpe3JldHVybltlLmNhbGwobiwiY2hlY2tUeXBlIiksIiAiLCJleHRlbmRzIiwiICIsZS5jYWxsKG4sImV4dGVuZHNUeXBlIildfSxzaG91bGRDaGVja0pzeDohMSxvcGVyYXRvck5hbWU6IlRTQ29uZGl0aW9uYWxUeXBlIixjb25zZXF1ZW50Tm9kZToidHJ1ZVR5cGUiLGFsdGVybmF0ZU5vZGU6ImZhbHNlVHlwZSIsdGVzdE5vZGU6ImNoZWNrVHlwZSIsYnJlYWtOZXN0ZWQ6ITF9KTtjYXNlIlRTSW5mZXJUeXBlIjpyZXR1cm4gY29uY2F0JDQoWyJpbmZlciIsIiAiLGUuY2FsbChuLCJ0eXBlUGFyYW1ldGVyIildKTtjYXNlIkludGVycHJldGVyRGlyZWN0aXZlIjpyZXR1cm4gYS5wdXNoKCIjISIsaS52YWx1ZSxoYXJkbGluZSQzKSxpc05leHRMaW5lRW1wdHkkMih0Lm9yaWdpbmFsVGV4dCxpLHQpJiZhLnB1c2goaGFyZGxpbmUkMyksY29uY2F0JDQoYSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitKU09OLnN0cmluZ2lmeShpLnR5cGUpKX19ZnVuY3Rpb24gcHJpbnRTdGF0ZW1lbnRTZXF1ZW5jZShlLHQsbil7dmFyIHI9W10saT1lLmdldE5vZGUoKSxvPSJDbGFzc0JvZHkiPT09aS50eXBlO3JldHVybiBlLm1hcChmdW5jdGlvbihlLGEpe3ZhciBzPWUuZ2V0VmFsdWUoKTtpZihzJiYiRW1wdHlTdGF0ZW1lbnQiIT09cy50eXBlKXt2YXIgdT1uKGUpLGM9dC5vcmlnaW5hbFRleHQsbD1bXTtpZih0LnNlbWl8fG98fGlzVGhlT25seUpTWEVsZW1lbnRJbk1hcmtkb3duKHQsZSl8fCFzdG10TmVlZHNBU0lQcm90ZWN0aW9uKGUsdCk/bC5wdXNoKHUpOnMuY29tbWVudHMmJnMuY29tbWVudHMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5sZWFkaW5nfSk/bC5wdXNoKG4oZSx7bmVlZHNTZW1pOiEwfSkpOmwucHVzaCgiOyIsdSksIXQuc2VtaSYmbylpZihjbGFzc1Byb3BNYXlDYXVzZUFTSVByb2JsZW1zKGUpKWwucHVzaCgiOyIpO2Vsc2UgaWYoIkNsYXNzUHJvcGVydHkiPT09cy50eXBlKXt2YXIgcD1pLmJvZHlbYSsxXTtjbGFzc0NoaWxkTmVlZHNBU0lQcm90ZWN0aW9uKHApJiZsLnB1c2goIjsiKX1pc05leHRMaW5lRW1wdHkkMihjLHMsdCkmJiFpc0xhc3RTdGF0ZW1lbnQoZSkmJmwucHVzaChoYXJkbGluZSQzKSxyLnB1c2goY29uY2F0JDQobCkpfX0pLGpvaW4kMihoYXJkbGluZSQzLHIpfWZ1bmN0aW9uIHByaW50UHJvcGVydHlLZXkoZSx0LG4pe3ZhciByPWUuZ2V0Tm9kZSgpLGk9ci5rZXk7cmV0dXJuIklkZW50aWZpZXIiIT09aS50eXBlfHxyLmNvbXB1dGVkfHwianNvbiIhPT10LnBhcnNlcj8haXNTdHJpbmdMaXRlcmFsKGkpfHwhaXNJZGVudGlmaWVyTmFtZShpLnZhbHVlKXx8ci5jb21wdXRlZHx8Impzb24iPT09dC5wYXJzZXJ8fCJ0eXBlc2NyaXB0Ij09PXQucGFyc2VyJiYiQ2xhc3NQcm9wZXJ0eSI9PT1yLnR5cGU/ZS5jYWxsKG4sImtleSIpOmUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gY29tbWVudHMucHJpbnRDb21tZW50cyhlLGZ1bmN0aW9uKCl7cmV0dXJuIGkudmFsdWV9LHQpfSwia2V5Iik6ZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBjb21tZW50cy5wcmludENvbW1lbnRzKGUsZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaS5uYW1lKX0sdCl9LCJrZXkiKX1mdW5jdGlvbiBwcmludE1ldGhvZChlLHQsbil7dmFyIHI9ZS5nZXROb2RlKCksaT10LnNlbWk/IjsiOiIiLG89ci5raW5kLGE9W107Ik9iamVjdE1ldGhvZCIhPT1yLnR5cGUmJiJDbGFzc01ldGhvZCIhPT1yLnR5cGV8fChyLnZhbHVlPXIpLHIudmFsdWUuYXN5bmMmJmEucHVzaCgiYXN5bmMgIiksbyYmImluaXQiIT09byYmIm1ldGhvZCIhPT1vJiYiY29uc3RydWN0b3IiIT09bz8oYXNzZXJ0Lm9rKCJnZXQiPT09b3x8InNldCI9PT1vKSxhLnB1c2gobywiICIpKTpyLnZhbHVlLmdlbmVyYXRvciYmYS5wdXNoKCIqIik7dmFyIHM9cHJpbnRQcm9wZXJ0eUtleShlLHQsbik7cmV0dXJuIHIuY29tcHV0ZWQmJihzPWNvbmNhdCQ0KFsiWyIscywiXSJdKSksYS5wdXNoKHMsY29uY2F0JDQoZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybltwcmludEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnMoZSx0LG4pLGdyb3VwJDEoY29uY2F0JDQoW3ByaW50RnVuY3Rpb25QYXJhbXMoZSxuLHQpLHByaW50UmV0dXJuVHlwZShlLG4sdCldKSldfSwidmFsdWUiKSkpLHIudmFsdWUuYm9keSYmMCE9PXIudmFsdWUuYm9keS5sZW5ndGg/YS5wdXNoKCIgIixlLmNhbGwobiwidmFsdWUiLCJib2R5IikpOmEucHVzaChpKSxjb25jYXQkNChhKX1mdW5jdGlvbiBjb3VsZEdyb3VwQXJnKGUpe3JldHVybiJPYmplY3RFeHByZXNzaW9uIj09PWUudHlwZSYmKGUucHJvcGVydGllcy5sZW5ndGg+MHx8ZS5jb21tZW50cyl8fCJBcnJheUV4cHJlc3Npb24iPT09ZS50eXBlJiYoZS5lbGVtZW50cy5sZW5ndGg+MHx8ZS5jb21tZW50cyl8fCJUU1R5cGVBc3NlcnRpb25FeHByZXNzaW9uIj09PWUudHlwZXx8IlRTQXNFeHByZXNzaW9uIj09PWUudHlwZXx8IkZ1bmN0aW9uRXhwcmVzc2lvbiI9PT1lLnR5cGV8fCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1lLnR5cGUmJiFlLnJldHVyblR5cGUmJigiQmxvY2tTdGF0ZW1lbnQiPT09ZS5ib2R5LnR5cGV8fCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1lLmJvZHkudHlwZXx8Ik9iamVjdEV4cHJlc3Npb24iPT09ZS5ib2R5LnR5cGV8fCJBcnJheUV4cHJlc3Npb24iPT09ZS5ib2R5LnR5cGV8fCJDYWxsRXhwcmVzc2lvbiI9PT1lLmJvZHkudHlwZXx8Ik9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iPT09ZS5ib2R5LnR5cGV8fGlzSlNYTm9kZShlLmJvZHkpKX1mdW5jdGlvbiBzaG91bGRHcm91cExhc3RBcmcoZSl7dmFyIHQ9Z2V0TGFzdCQ0KGUpLG49Z2V0UGVudWx0aW1hdGUkMShlKTtyZXR1cm4haGFzTGVhZGluZ0NvbW1lbnQodCkmJiFoYXNUcmFpbGluZ0NvbW1lbnQodCkmJmNvdWxkR3JvdXBBcmcodCkmJighbnx8bi50eXBlIT09dC50eXBlKX1mdW5jdGlvbiBzaG91bGRHcm91cEZpcnN0QXJnKGUpe2lmKDIhPT1lLmxlbmd0aClyZXR1cm4hMTt2YXIgdD1lWzBdLG49ZVsxXTtyZXR1cm4oIXQuY29tbWVudHN8fCF0LmNvbW1lbnRzLmxlbmd0aCkmJigiRnVuY3Rpb25FeHByZXNzaW9uIj09PXQudHlwZXx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PXQudHlwZSYmIkJsb2NrU3RhdGVtZW50Ij09PXQuYm9keS50eXBlKSYmIWNvdWxkR3JvdXBBcmcobil9ZnVuY3Rpb24gaXNGdW5jdGlvbkNvbXBvc2l0aW9uRnVuY3Rpb24oZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iOmNhc2UiTWVtYmVyRXhwcmVzc2lvbiI6cmV0dXJuIGlzRnVuY3Rpb25Db21wb3NpdGlvbkZ1bmN0aW9uKGUucHJvcGVydHkpO2Nhc2UiSWRlbnRpZmllciI6cmV0dXJuIGZ1bmN0aW9uQ29tcG9zaXRpb25GdW5jdGlvbk5hbWVzW2UubmFtZV07Y2FzZSJTdHJpbmdMaXRlcmFsIjpjYXNlIkxpdGVyYWwiOnJldHVybiBmdW5jdGlvbkNvbXBvc2l0aW9uRnVuY3Rpb25OYW1lc1tlLnZhbHVlXX19ZnVuY3Rpb24gcHJpbnRBcmd1bWVudHNMaXN0KGUsdCxuKXtmdW5jdGlvbiByKCl7cmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoWyIoIixpbmRlbnQkMihjb25jYXQkNChbbGluZSQzLGNvbmNhdCQ0KGMpXSkpLGwsbGluZSQzLCIpIl0pLHtzaG91bGRCcmVhazohMH0pfXZhciBpPWUuZ2V0VmFsdWUoKSxvPWkuYXJndW1lbnRzO2lmKDA9PT1vLmxlbmd0aClyZXR1cm4gY29uY2F0JDQoWyIoIixjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSwiKSJdKTt2YXIgYT0hMSxzPSExLHU9by5sZW5ndGgtMSxjPWUubWFwKGZ1bmN0aW9uKGUscil7dmFyIGk9ZS5nZXROb2RlKCksbz1bbihlKV07cmV0dXJuIHI9PT11fHwoaXNOZXh0TGluZUVtcHR5JDIodC5vcmlnaW5hbFRleHQsaSx0KT8oMD09PXImJihzPSEwKSxhPSEwLG8ucHVzaCgiLCIsaGFyZGxpbmUkMyxoYXJkbGluZSQzKSk6by5wdXNoKCIsIixsaW5lJDMpKSxjb25jYXQkNChvKX0sImFyZ3VtZW50cyIpLGw9c2hvdWxkUHJpbnRDb21tYSh0LCJhbGwiKT8iLCI6IiI7aWYoaXNGdW5jdGlvbkNvbXBvc2l0aW9uRnVuY3Rpb24oaS5jYWxsZWUpJiZvLmxlbmd0aD4xKXJldHVybiByKCk7dmFyIHA9c2hvdWxkR3JvdXBGaXJzdEFyZyhvKSxmPXNob3VsZEdyb3VwTGFzdEFyZyhvKTtpZihwfHxmKXt2YXIgZCxoPShwP2Muc2xpY2UoMSkuc29tZSh3aWxsQnJlYWskMSk6Yy5zbGljZSgwLC0xKS5zb21lKHdpbGxCcmVhayQxKSl8fGEsbT0wO2UuZWFjaChmdW5jdGlvbihlKXtwJiYwPT09bSYmKGQ9W2NvbmNhdCQ0KFtlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSx7ZXhwYW5kRmlyc3RBcmc6ITB9KX0pLGMubGVuZ3RoPjE/IiwiOiIiLHM/aGFyZGxpbmUkMzpsaW5lJDMscz9oYXJkbGluZSQzOiIiXSldLmNvbmNhdChjLnNsaWNlKDEpKSksZiYmbT09PW8ubGVuZ3RoLTEmJihkPWMuc2xpY2UoMCwtMSkuY29uY2F0KGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gbihlLHtleHBhbmRMYXN0QXJnOiEwfSl9KSkpLG0rK30sImFyZ3VtZW50cyIpO3ZhciBnPWMuc29tZSh3aWxsQnJlYWskMSk7cmV0dXJuIGNvbmNhdCQ0KFtnP2JyZWFrUGFyZW50JDI6IiIsY29uZGl0aW9uYWxHcm91cCQxKFtjb25jYXQkNChbaWZCcmVhayQxKGluZGVudCQyKGNvbmNhdCQ0KFsiKCIsc29mdGxpbmUkMSxjb25jYXQkNChkKV0pKSxjb25jYXQkNChbIigiLGNvbmNhdCQ0KGQpXSkpLGc/Y29uY2F0JDQoW2lmQnJlYWskMShsKSxzb2Z0bGluZSQxXSk6IiIsIikiXSksY29uY2F0JDQocD9bIigiLGdyb3VwJDEoZFswXSx7c2hvdWxkQnJlYWs6ITB9KSxjb25jYXQkNChkLnNsaWNlKDEpKSwiKSJdOlsiKCIsY29uY2F0JDQoYy5zbGljZSgwLC0xKSksZ3JvdXAkMShnZXRMYXN0JDQoZCkse3Nob3VsZEJyZWFrOiEwfSksIikiXSkscigpXSx7c2hvdWxkQnJlYWs6aH0pXSl9cmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoWyIoIixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxjb25jYXQkNChjKV0pKSxpZkJyZWFrJDEoc2hvdWxkUHJpbnRDb21tYSh0LCJhbGwiKT8iLCI6IiIpLHNvZnRsaW5lJDEsIikiXSkse3Nob3VsZEJyZWFrOmMuc29tZSh3aWxsQnJlYWskMSl8fGF9KX1mdW5jdGlvbiBwcmludFR5cGVBbm5vdGF0aW9uKGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCk7aWYoIXIudHlwZUFubm90YXRpb24pcmV0dXJuIiI7dmFyIGk9ZS5nZXRQYXJlbnROb2RlKCksbz1yLmRlZmluaXRlfHxpJiYiVmFyaWFibGVEZWNsYXJhdG9yIj09PWkudHlwZSYmaS5kZWZpbml0ZSxhPSJEZWNsYXJlRnVuY3Rpb24iPT09aS50eXBlJiZpLmlkPT09cjtyZXR1cm4gY29uY2F0JDQoaXNGbG93QW5ub3RhdGlvbkNvbW1lbnQodC5vcmlnaW5hbFRleHQsci50eXBlQW5ub3RhdGlvbix0KT9bIiAvKjogIixlLmNhbGwobiwidHlwZUFubm90YXRpb24iKSwiICovIl06W2E/IiI6bz8iITogIjoiOiAiLGUuY2FsbChuLCJ0eXBlQW5ub3RhdGlvbiIpXSl9ZnVuY3Rpb24gcHJpbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzKGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCk7cmV0dXJuIHIudHlwZUFyZ3VtZW50cz9lLmNhbGwobiwidHlwZUFyZ3VtZW50cyIpOnIudHlwZVBhcmFtZXRlcnM/ZS5jYWxsKG4sInR5cGVQYXJhbWV0ZXJzIik6IiJ9ZnVuY3Rpb24gcHJpbnRGdW5jdGlvblBhcmFtcyhlLHQsbixyLGkpe3ZhciBvPWUuZ2V0VmFsdWUoKSxhPW8ucGFyYW1ldGVycz8icGFyYW1ldGVycyI6InBhcmFtcyIscz1pP3ByaW50RnVuY3Rpb25UeXBlUGFyYW1ldGVycyhlLG4sdCk6IiIsdT1bXTtpZihvW2FdJiYodT1lLm1hcCh0LGEpKSxvLnJlc3QmJnUucHVzaChjb25jYXQkNChbIi4uLiIsZS5jYWxsKHQsInJlc3QiKV0pKSwwPT09dS5sZW5ndGgpcmV0dXJuIGNvbmNhdCQ0KFtzLCIoIixjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSxuLCEwLGZ1bmN0aW9uKGUpe3JldHVybiIpIj09PWdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXIkMShuLm9yaWdpbmFsVGV4dCxlLG4ubG9jRW5kKX0pLCIpIl0pO3ZhciBjPWdldExhc3QkNChvW2FdKTtpZihyJiYoIW9bYV18fCFvW2FdLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29tbWVudHN9KSkpcmV0dXJuIGdyb3VwJDEoY29uY2F0JDQoW3JlbW92ZUxpbmVzJDEocyksIigiLGpvaW4kMigiLCAiLHUubWFwKHJlbW92ZUxpbmVzJDEpKSwiKSJdKSk7aWYoc2hvdWxkSHVnQXJndW1lbnRzKG8pKXJldHVybiBjb25jYXQkNChbcywiKCIsam9pbiQyKCIsICIsdSksIikiXSk7dmFyIGw9ZS5nZXRQYXJlbnROb2RlKCk7aWYoaXNUZXN0Q2FsbChsKSlyZXR1cm4gY29uY2F0JDQoW3MsIigiLGpvaW4kMigiLCAiLHUpLCIpIl0pO3ZhciBwPVsiQW55VHlwZUFubm90YXRpb24iLCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIiwiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIiwiVGhpc1R5cGVBbm5vdGF0aW9uIiwiTnVtYmVyVHlwZUFubm90YXRpb24iLCJWb2lkVHlwZUFubm90YXRpb24iLCJFbXB0eVR5cGVBbm5vdGF0aW9uIiwiTWl4ZWRUeXBlQW5ub3RhdGlvbiIsIkJvb2xlYW5UeXBlQW5ub3RhdGlvbiIsIkJvb2xlYW5MaXRlcmFsVHlwZUFubm90YXRpb24iLCJTdHJpbmdUeXBlQW5ub3RhdGlvbiJdO2lmKChpc09iamVjdFR5cGVQcm9wZXJ0eUFGdW5jdGlvbihsLG4pfHxpc1R5cGVBbm5vdGF0aW9uQUZ1bmN0aW9uKGwsbil8fCJUeXBlQWxpYXMiPT09bC50eXBlfHwiVW5pb25UeXBlQW5ub3RhdGlvbiI9PT1sLnR5cGV8fCJUU1VuaW9uVHlwZSI9PT1sLnR5cGV8fCJJbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbiI9PT1sLnR5cGV8fCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIj09PWwudHlwZSYmbC5yZXR1cm5UeXBlPT09bykmJjE9PT1vW2FdLmxlbmd0aCYmbnVsbD09PW9bYV1bMF0ubmFtZSYmb1thXVswXS50eXBlQW5ub3RhdGlvbiYmbnVsbD09PW8udHlwZVBhcmFtZXRlcnMmJi0xIT09cC5pbmRleE9mKG9bYV1bMF0udHlwZUFubm90YXRpb24udHlwZSkmJiEoIkdlbmVyaWNUeXBlQW5ub3RhdGlvbiI9PT1vW2FdWzBdLnR5cGVBbm5vdGF0aW9uLnR5cGUmJm9bYV1bMF0udHlwZUFubm90YXRpb24udHlwZVBhcmFtZXRlcnMpJiYhby5yZXN0KXJldHVybiBjb25jYXQkNCgiYWx3YXlzIj09PW4uYXJyb3dQYXJlbnM/WyIoIixjb25jYXQkNCh1KSwiKSJdOnUpO3ZhciBmPSEoYyYmIlJlc3RFbGVtZW50Ij09PWMudHlwZSkmJiFvLnJlc3Q7cmV0dXJuIGNvbmNhdCQ0KFtzLCIoIixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxqb2luJDIoY29uY2F0JDQoWyIsIixsaW5lJDNdKSx1KV0pKSxpZkJyZWFrJDEoZiYmc2hvdWxkUHJpbnRDb21tYShuLCJhbGwiKT8iLCI6IiIpLHNvZnRsaW5lJDEsIikiXSl9ZnVuY3Rpb24gc2hvdWxkUHJpbnRQYXJhbXNXaXRob3V0UGFyZW5zKGUsdCl7aWYoImFsd2F5cyI9PT10LmFycm93UGFyZW5zKXJldHVybiExO2lmKCJhdm9pZCI9PT10LmFycm93UGFyZW5zKXtyZXR1cm4gY2FuUHJpbnRQYXJhbXNXaXRob3V0UGFyZW5zKGUuZ2V0VmFsdWUoKSl9cmV0dXJuITF9ZnVuY3Rpb24gY2FuUHJpbnRQYXJhbXNXaXRob3V0UGFyZW5zKGUpe3JldHVybiAxPT09ZS5wYXJhbXMubGVuZ3RoJiYhZS5yZXN0JiYhZS50eXBlUGFyYW1ldGVycyYmIWhhc0RhbmdsaW5nQ29tbWVudHMoZSkmJiJJZGVudGlmaWVyIj09PWUucGFyYW1zWzBdLnR5cGUmJiFlLnBhcmFtc1swXS50eXBlQW5ub3RhdGlvbiYmIWUucGFyYW1zWzBdLmNvbW1lbnRzJiYhZS5wYXJhbXNbMF0ub3B0aW9uYWwmJiFlLnByZWRpY2F0ZSYmIWUucmV0dXJuVHlwZX1mdW5jdGlvbiBwcmludEZ1bmN0aW9uRGVjbGFyYXRpb24oZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKSxpPVtdO3JldHVybiByLmFzeW5jJiZpLnB1c2goImFzeW5jICIpLGkucHVzaCgiZnVuY3Rpb24iKSxyLmdlbmVyYXRvciYmaS5wdXNoKCIqIiksci5pZCYmaS5wdXNoKCIgIixlLmNhbGwodCwiaWQiKSksaS5wdXNoKHByaW50RnVuY3Rpb25UeXBlUGFyYW1ldGVycyhlLG4sdCksZ3JvdXAkMShjb25jYXQkNChbcHJpbnRGdW5jdGlvblBhcmFtcyhlLHQsbikscHJpbnRSZXR1cm5UeXBlKGUsdCxuKV0pKSxyLmJvZHk/IiAiOiIiLGUuY2FsbCh0LCJib2R5IikpLGNvbmNhdCQ0KGkpfWZ1bmN0aW9uIHByaW50T2JqZWN0TWV0aG9kKGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCksaT1bXTtpZihyLmFzeW5jJiZpLnB1c2goImFzeW5jICIpLHIuZ2VuZXJhdG9yJiZpLnB1c2goIioiKSxyLm1ldGhvZHx8ImdldCI9PT1yLmtpbmR8fCJzZXQiPT09ci5raW5kKXJldHVybiBwcmludE1ldGhvZChlLHQsbik7dmFyIG89cHJpbnRQcm9wZXJ0eUtleShlLHQsbik7cmV0dXJuIHIuY29tcHV0ZWQ/aS5wdXNoKCJbIixvLCJdIik6aS5wdXNoKG8pLGkucHVzaChwcmludEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnMoZSx0LG4pLGdyb3VwJDEoY29uY2F0JDQoW3ByaW50RnVuY3Rpb25QYXJhbXMoZSxuLHQpLHByaW50UmV0dXJuVHlwZShlLG4sdCldKSksIiAiLGUuY2FsbChuLCJib2R5IikpLGNvbmNhdCQ0KGkpfWZ1bmN0aW9uIHByaW50UmV0dXJuVHlwZShlLHQsbil7dmFyIHI9ZS5nZXRWYWx1ZSgpLGk9ZS5jYWxsKHQsInJldHVyblR5cGUiKTtpZihyLnJldHVyblR5cGUmJmlzRmxvd0Fubm90YXRpb25Db21tZW50KG4ub3JpZ2luYWxUZXh0LHIucmV0dXJuVHlwZSxuKSlyZXR1cm4gY29uY2F0JDQoWyIgLyo6ICIsaSwiICovIl0pO3ZhciBvPVtpXTtyZXR1cm4gci5yZXR1cm5UeXBlJiZyLnJldHVyblR5cGUudHlwZUFubm90YXRpb24mJm8udW5zaGlmdCgiOiAiKSxyLnByZWRpY2F0ZSYmby5wdXNoKHIucmV0dXJuVHlwZT8iICI6IjogIixlLmNhbGwodCwicHJlZGljYXRlIikpLGNvbmNhdCQ0KG8pfWZ1bmN0aW9uIHByaW50RXhwb3J0RGVjbGFyYXRpb24oZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKSxpPXQuc2VtaT8iOyI6IiIsbz1bImV4cG9ydCAiXSxhPXIuZGVmYXVsdHx8IkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI9PT1yLnR5cGU7aWYoYSYmby5wdXNoKCJkZWZhdWx0ICIpLG8ucHVzaChjb21tZW50cy5wcmludERhbmdsaW5nQ29tbWVudHMoZSx0LCEwKSksbmVlZHNIYXJkbGluZUFmdGVyRGFuZ2xpbmdDb21tZW50KHIpJiZvLnB1c2goaGFyZGxpbmUkMyksci5kZWNsYXJhdGlvbilvLnB1c2goZS5jYWxsKG4sImRlY2xhcmF0aW9uIikpLGEmJiJDbGFzc0RlY2xhcmF0aW9uIiE9PXIuZGVjbGFyYXRpb24udHlwZSYmIkZ1bmN0aW9uRGVjbGFyYXRpb24iIT09ci5kZWNsYXJhdGlvbi50eXBlJiYiVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24iIT09ci5kZWNsYXJhdGlvbi50eXBlJiYiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiIhPT1yLmRlY2xhcmF0aW9uLnR5cGUmJiJEZWNsYXJlQ2xhc3MiIT09ci5kZWNsYXJhdGlvbi50eXBlJiYiRGVjbGFyZUZ1bmN0aW9uIiE9PXIuZGVjbGFyYXRpb24udHlwZSYmby5wdXNoKGkpO2Vsc2V7aWYoci5zcGVjaWZpZXJzJiZyLnNwZWNpZmllcnMubGVuZ3RoPjApe3ZhciBzPVtdLHU9W10sYz1bXTtlLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5nZXRWYWx1ZSgpLnR5cGU7IkV4cG9ydFNwZWNpZmllciI9PT1yP3MucHVzaChuKHQpKToiRXhwb3J0RGVmYXVsdFNwZWNpZmllciI9PT1yP3UucHVzaChuKHQpKToiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIj09PXImJmMucHVzaChjb25jYXQkNChbIiogYXMgIixuKHQpXSkpfSwic3BlY2lmaWVycyIpO3ZhciBsPTAhPT1jLmxlbmd0aCYmMCE9PXMubGVuZ3RoLHA9MCE9PXUubGVuZ3RoJiYoMCE9PWMubGVuZ3RofHwwIT09cy5sZW5ndGgpO28ucHVzaCgidHlwZSI9PT1yLmV4cG9ydEtpbmQ/InR5cGUgIjoiIixjb25jYXQkNCh1KSxjb25jYXQkNChbcD8iLCAiOiIiXSksY29uY2F0JDQoYyksY29uY2F0JDQoW2w/IiwgIjoiIl0pLDAhPT1zLmxlbmd0aD9ncm91cCQxKGNvbmNhdCQ0KFsieyIsaW5kZW50JDIoY29uY2F0JDQoW3QuYnJhY2tldFNwYWNpbmc/bGluZSQzOnNvZnRsaW5lJDEsam9pbiQyKGNvbmNhdCQ0KFsiLCIsbGluZSQzXSkscyldKSksaWZCcmVhayQxKHNob3VsZFByaW50Q29tbWEodCk/IiwiOiIiKSx0LmJyYWNrZXRTcGFjaW5nP2xpbmUkMzpzb2Z0bGluZSQxLCJ9Il0pKToiIil9ZWxzZSBvLnB1c2goInt9Iik7ci5zb3VyY2UmJm8ucHVzaCgiIGZyb20gIixlLmNhbGwobiwic291cmNlIikpLG8ucHVzaChpKX1yZXR1cm4gY29uY2F0JDQobyl9ZnVuY3Rpb24gcHJpbnRGbG93RGVjbGFyYXRpb24oZSx0KXt2YXIgbj1nZXRQYXJlbnRFeHBvcnREZWNsYXJhdGlvbiQxKGUpO3JldHVybiBuP2Fzc2VydC5zdHJpY3RFcXVhbChuLnR5cGUsIkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiIpOnQudW5zaGlmdCgiZGVjbGFyZSAiKSxjb25jYXQkNCh0KX1mdW5jdGlvbiBnZXRGbG93VmFyaWFuY2UoZSl7aWYoIWUudmFyaWFuY2UpcmV0dXJuIG51bGw7dmFyIHQ9ZS52YXJpYW5jZS5raW5kfHxlLnZhcmlhbmNlO3N3aXRjaCh0KXtjYXNlInBsdXMiOnJldHVybiIrIjtjYXNlIm1pbnVzIjpyZXR1cm4iLSI7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gcHJpbnRUeXBlU2NyaXB0TW9kaWZpZXJzKGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCk7cmV0dXJuIHIubW9kaWZpZXJzJiZyLm1vZGlmaWVycy5sZW5ndGg/Y29uY2F0JDQoW2pvaW4kMigiICIsZS5tYXAobiwibW9kaWZpZXJzIikpLCIgIl0pOiIifWZ1bmN0aW9uIHByaW50VHlwZVBhcmFtZXRlcnMoZSx0LG4scil7dmFyIGk9ZS5nZXRWYWx1ZSgpO2lmKCFpW3JdKXJldHVybiIiO2lmKCFBcnJheS5pc0FycmF5KGlbcl0pKXJldHVybiBlLmNhbGwobixyKTt2YXIgbz1lLmdldE5vZGUoMik7cmV0dXJuIG51bGwhPW8mJmlzVGVzdENhbGwobyl8fDA9PT1pW3JdLmxlbmd0aHx8MT09PWlbcl0ubGVuZ3RoJiYoc2hvdWxkSHVnVHlwZShpW3JdWzBdKXx8IkdlbmVyaWNUeXBlQW5ub3RhdGlvbiI9PT1pW3JdWzBdLnR5cGUmJnNob3VsZEh1Z1R5cGUoaVtyXVswXS5pZCl8fCJUU1R5cGVSZWZlcmVuY2UiPT09aVtyXVswXS50eXBlJiZzaG91bGRIdWdUeXBlKGlbcl1bMF0udHlwZU5hbWUpfHwiTnVsbGFibGVUeXBlQW5ub3RhdGlvbiI9PT1pW3JdWzBdLnR5cGUpP2NvbmNhdCQ0KFsiPCIsam9pbiQyKCIsICIsZS5tYXAobixyKSksIj4iXSk6Z3JvdXAkMShjb25jYXQkNChbIjwiLGluZGVudCQyKGNvbmNhdCQ0KFtzb2Z0bGluZSQxLGpvaW4kMihjb25jYXQkNChbIiwiLGxpbmUkM10pLGUubWFwKG4scikpXSkpLGlmQnJlYWskMSgidHlwZXNjcmlwdCIhPT10LnBhcnNlciYmc2hvdWxkUHJpbnRDb21tYSh0LCJhbGwiKT8iLCI6IiIpLHNvZnRsaW5lJDEsIj4iXSkpfWZ1bmN0aW9uIHByaW50Q2xhc3MoZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKSxpPVtdOyJUU0Fic3RyYWN0Q2xhc3NEZWNsYXJhdGlvbiI9PT1yLnR5cGUmJmkucHVzaCgiYWJzdHJhY3QgIiksaS5wdXNoKCJjbGFzcyIpLHIuaWQmJmkucHVzaCgiICIsZS5jYWxsKG4sImlkIikpLGkucHVzaChlLmNhbGwobiwidHlwZVBhcmFtZXRlcnMiKSk7dmFyIG89W107aWYoci5zdXBlckNsYXNzKXt2YXIgYT1jb25jYXQkNChbImV4dGVuZHMgIixlLmNhbGwobiwic3VwZXJDbGFzcyIpLGUuY2FsbChuLCJzdXBlclR5cGVQYXJhbWV0ZXJzIildKTtyLmltcGxlbWVudHMmJjAhPT1yLmltcGxlbWVudHMubGVuZ3RofHxyLnN1cGVyQ2xhc3MuY29tbWVudHMmJjAhPT1yLnN1cGVyQ2xhc3MuY29tbWVudHMubGVuZ3RoP28ucHVzaChncm91cCQxKGNvbmNhdCQ0KFtsaW5lJDMsZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBjb21tZW50cy5wcmludENvbW1lbnRzKGUsZnVuY3Rpb24oKXtyZXR1cm4gYX0sdCl9LCJzdXBlckNsYXNzIildKSkpOmkucHVzaChjb25jYXQkNChbIiAiLGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gY29tbWVudHMucHJpbnRDb21tZW50cyhlLGZ1bmN0aW9uKCl7cmV0dXJuIGF9LHQpfSwic3VwZXJDbGFzcyIpXSkpfWVsc2Ugci5leHRlbmRzJiZyLmV4dGVuZHMubGVuZ3RoPjAmJmkucHVzaCgiIGV4dGVuZHMgIixqb2luJDIoIiwgIixlLm1hcChuLCJleHRlbmRzIikpKTtyZXR1cm4gci5taXhpbnMmJnIubWl4aW5zLmxlbmd0aD4wJiZvLnB1c2gobGluZSQzLCJtaXhpbnMgIixncm91cCQxKGluZGVudCQyKGpvaW4kMihjb25jYXQkNChbIiwiLGxpbmUkM10pLGUubWFwKG4sIm1peGlucyIpKSkpKSxyLmltcGxlbWVudHMmJnIuaW1wbGVtZW50cy5sZW5ndGg+MCYmby5wdXNoKGxpbmUkMywiaW1wbGVtZW50cyIsZ3JvdXAkMShpbmRlbnQkMihjb25jYXQkNChbbGluZSQzLGpvaW4kMihjb25jYXQkNChbIiwiLGxpbmUkM10pLGUubWFwKG4sImltcGxlbWVudHMiKSldKSkpKSxvLmxlbmd0aD4wJiZpLnB1c2goZ3JvdXAkMShpbmRlbnQkMihjb25jYXQkNChvKSkpKSxyLmJvZHkmJnIuYm9keS5jb21tZW50cyYmaGFzTGVhZGluZ093bkxpbmVDb21tZW50KHQub3JpZ2luYWxUZXh0LHIuYm9keSx0KT9pLnB1c2goaGFyZGxpbmUkMyk6aS5wdXNoKCIgIiksaS5wdXNoKGUuY2FsbChuLCJib2R5IikpLGl9ZnVuY3Rpb24gcHJpbnRPcHRpb25hbFRva2VuKGUpe3ZhciB0PWUuZ2V0VmFsdWUoKTtyZXR1cm4gdC5vcHRpb25hbD8iT3B0aW9uYWxDYWxsRXhwcmVzc2lvbiI9PT10LnR5cGV8fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09dC50eXBlJiZ0LmNvbXB1dGVkPyI/LiI6Ij8iOiIifWZ1bmN0aW9uIHByaW50TWVtYmVyTG9va3VwKGUsdCxuKXt2YXIgcj1lLmNhbGwobiwicHJvcGVydHkiKSxpPWUuZ2V0VmFsdWUoKSxvPXByaW50T3B0aW9uYWxUb2tlbihlKTtyZXR1cm4gaS5jb21wdXRlZD8haS5wcm9wZXJ0eXx8aXNOdW1lcmljTGl0ZXJhbChpLnByb3BlcnR5KT9jb25jYXQkNChbbywiWyIsciwiXSJdKTpncm91cCQxKGNvbmNhdCQ0KFtvLCJbIixpbmRlbnQkMihjb25jYXQkNChbc29mdGxpbmUkMSxyXSkpLHNvZnRsaW5lJDEsIl0iXSkpOmNvbmNhdCQ0KFtvLCIuIixyXSl9ZnVuY3Rpb24gcHJpbnRCaW5kRXhwcmVzc2lvbkNhbGxlZShlLHQsbil7cmV0dXJuIGNvbmNhdCQ0KFsiOjoiLGUuY2FsbChuLCJjYWxsZWUiKV0pfWZ1bmN0aW9uIHByaW50TWVtYmVyQ2hhaW4oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIG49dC5vcmlnaW5hbFRleHQscj1nZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVySW5kZXgkMihuLGUsdCk7cmV0dXJuIikiPT1uLmNoYXJBdChyKT9pc05leHRMaW5lRW1wdHlBZnRlckluZGV4JDEobixyKzEsdCk6aXNOZXh0TGluZUVtcHR5JDIobixlLHQpfWZ1bmN0aW9uIGkoZSl7dmFyIG89ZS5nZXRWYWx1ZSgpOyJDYWxsRXhwcmVzc2lvbiIhPT1vLnR5cGUmJiJPcHRpb25hbENhbGxFeHByZXNzaW9uIiE9PW8udHlwZXx8IWlzTWVtYmVyaXNoKG8uY2FsbGVlKSYmIkNhbGxFeHByZXNzaW9uIiE9PW8uY2FsbGVlLnR5cGUmJiJPcHRpb25hbENhbGxFeHByZXNzaW9uIiE9PW8uY2FsbGVlLnR5cGU/aXNNZW1iZXJpc2gobyk/KHUudW5zaGlmdCh7bm9kZTpvLG5lZWRzUGFyZW5zOm5lZWRzUGFyZW5zXzEoZSx0KSxwcmludGVkOmNvbW1lbnRzLnByaW50Q29tbWVudHMoZSxmdW5jdGlvbigpe3JldHVybiJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09by50eXBlfHwiTWVtYmVyRXhwcmVzc2lvbiI9PT1vLnR5cGU/cHJpbnRNZW1iZXJMb29rdXAoZSx0LG4pOnByaW50QmluZEV4cHJlc3Npb25DYWxsZWUoZSx0LG4pfSx0KX0pLGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gaShlKX0sIm9iamVjdCIpKToiVFNOb25OdWxsRXhwcmVzc2lvbiI9PT1vLnR5cGU/KHUudW5zaGlmdCh7bm9kZTpvLHByaW50ZWQ6Y29tbWVudHMucHJpbnRDb21tZW50cyhlLGZ1bmN0aW9uKCl7cmV0dXJuIiEifSx0KX0pLGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gaShlKX0sImV4cHJlc3Npb24iKSk6dS51bnNoaWZ0KHtub2RlOm8scHJpbnRlZDplLmNhbGwobil9KToodS51bnNoaWZ0KHtub2RlOm8scHJpbnRlZDpjb25jYXQkNChbY29tbWVudHMucHJpbnRDb21tZW50cyhlLGZ1bmN0aW9uKCl7cmV0dXJuIGNvbmNhdCQ0KFtwcmludE9wdGlvbmFsVG9rZW4oZSkscHJpbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzKGUsdCxuKSxwcmludEFyZ3VtZW50c0xpc3QoZSx0LG4pXSl9LHQpLHIobyk/aGFyZGxpbmUkMzoiIl0pfSksZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBpKGUpfSwiY2FsbGVlIikpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuL15bQS1aXS8udGVzdChlKX1mdW5jdGlvbiBhKGUpe3JldHVybiBlLmxlbmd0aDw9dC50YWJXaWR0aH1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuKzFdJiZlW24rMV0ubmVlZHNQYXJlbnM/KHQucHVzaCgiKCIsZVtuXS5wcmludGVkLGVbbisxXS5wcmludGVkLCIpIiksbisrKTp0LnB1c2goZVtuXS5wcmludGVkKTtyZXR1cm4gY29uY2F0JDQodCl9dmFyIHU9W10sYz1lLmdldFZhbHVlKCk7dS51bnNoaWZ0KHtub2RlOmMscHJpbnRlZDpjb25jYXQkNChbcHJpbnRPcHRpb25hbFRva2VuKGUpLHByaW50RnVuY3Rpb25UeXBlUGFyYW1ldGVycyhlLHQsbikscHJpbnRBcmd1bWVudHNMaXN0KGUsdCxuKV0pfSksZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBpKGUpfSwiY2FsbGVlIik7Zm9yKHZhciBsPVtdLHA9W3VbMF1dLGY9MTtmPHUubGVuZ3RoJiYoIlRTTm9uTnVsbEV4cHJlc3Npb24iPT09dVtmXS5ub2RlLnR5cGV8fCJPcHRpb25hbENhbGxFeHByZXNzaW9uIj09PXVbZl0ubm9kZS50eXBlfHwiQ2FsbEV4cHJlc3Npb24iPT09dVtmXS5ub2RlLnR5cGV8fCgiTWVtYmVyRXhwcmVzc2lvbiI9PT11W2ZdLm5vZGUudHlwZXx8Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI9PT11W2ZdLm5vZGUudHlwZSkmJnVbZl0ubm9kZS5jb21wdXRlZCYmaXNOdW1lcmljTGl0ZXJhbCh1W2ZdLm5vZGUucHJvcGVydHkpKTsrK2YpcC5wdXNoKHVbZl0pO2lmKCJDYWxsRXhwcmVzc2lvbiIhPT11WzBdLm5vZGUudHlwZSYmIk9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iIT09dVswXS5ub2RlLnR5cGUpZm9yKDtmKzE8dS5sZW5ndGgmJihpc01lbWJlcmlzaCh1W2ZdLm5vZGUpJiZpc01lbWJlcmlzaCh1W2YrMV0ubm9kZSkpOysrZilwLnB1c2godVtmXSk7bC5wdXNoKHApLHA9W107Zm9yKHZhciBkPSExO2Y8dS5sZW5ndGg7KytmKXtpZihkJiZpc01lbWJlcmlzaCh1W2ZdLm5vZGUpKXtpZih1W2ZdLm5vZGUuY29tcHV0ZWQmJmlzTnVtZXJpY0xpdGVyYWwodVtmXS5ub2RlLnByb3BlcnR5KSl7cC5wdXNoKHVbZl0pO2NvbnRpbnVlfWwucHVzaChwKSxwPVtdLGQ9ITF9IkNhbGxFeHByZXNzaW9uIiE9PXVbZl0ubm9kZS50eXBlJiYiT3B0aW9uYWxDYWxsRXhwcmVzc2lvbiIhPT11W2ZdLm5vZGUudHlwZXx8KGQ9ITApLHAucHVzaCh1W2ZdKSx1W2ZdLm5vZGUuY29tbWVudHMmJnVbZl0ubm9kZS5jb21tZW50cy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyYWlsaW5nfSkmJihsLnB1c2gocCkscD1bXSxkPSExKX1wLmxlbmd0aD4wJiZsLnB1c2gocCk7dmFyIGg9bC5sZW5ndGg+PTImJiFsWzFdWzBdLm5vZGUuY29tbWVudHMmJmZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0UGFyZW50Tm9kZSgpLHI9biYmIkV4cHJlc3Npb25TdGF0ZW1lbnQiPT09bi50eXBlLGk9dFsxXS5sZW5ndGgmJnRbMV1bMF0ubm9kZS5jb21wdXRlZDtpZigxPT09dFswXS5sZW5ndGgpe3ZhciBzPXRbMF1bMF0ubm9kZTtyZXR1cm4iVGhpc0V4cHJlc3Npb24iPT09cy50eXBlfHwiSWRlbnRpZmllciI9PT1zLnR5cGUmJihvKHMubmFtZSl8fHImJmEocy5uYW1lKXx8aSl9dmFyIHU9Z2V0TGFzdCQ0KHRbMF0pLm5vZGU7cmV0dXJuKCJNZW1iZXJFeHByZXNzaW9uIj09PXUudHlwZXx8Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI9PT11LnR5cGUpJiYiSWRlbnRpZmllciI9PT11LnByb3BlcnR5LnR5cGUmJihvKHUucHJvcGVydHkubmFtZSl8fGkpfShsKSxtPWwubWFwKHMpLGc9Y29uY2F0JDQobSkseT1oPzM6Mix2PWwuc2xpY2UoMCx5KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodCl9LFtdKSxiPXYuc2xpY2UoMSwtMSkuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gaGFzTGVhZGluZ0NvbW1lbnQoZS5ub2RlKX0pfHx2LnNsaWNlKDAsLTEpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGhhc1RyYWlsaW5nQ29tbWVudChlLm5vZGUpfSl8fGxbeV0mJmhhc0xlYWRpbmdDb21tZW50KGxbeV1bMF0ubm9kZSk7aWYobC5sZW5ndGg8PXkmJiFiKXJldHVybiBncm91cCQxKGcpO3ZhciB4PWdldExhc3QkNChoP2wuc2xpY2UoMSwyKVswXTpsWzBdKS5ub2RlLEM9IkNhbGxFeHByZXNzaW9uIiE9PXgudHlwZSYmIk9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iIT09eC50eXBlJiZyKHgpLEU9Y29uY2F0JDQoW3MobFswXSksaD9jb25jYXQkNChsLnNsaWNlKDEsMikubWFwKHMpKToiIixDP2hhcmRsaW5lJDM6IiIsZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD8iIjppbmRlbnQkMihncm91cCQxKGNvbmNhdCQ0KFtoYXJkbGluZSQzLGpvaW4kMihoYXJkbGluZSQzLGUubWFwKHMpKV0pKSl9KGwuc2xpY2UoaD8yOjEpKV0pLEQ9dS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIkNhbGxFeHByZXNzaW9uIj09PWUubm9kZS50eXBlfHwiT3B0aW9uYWxDYWxsRXhwcmVzc2lvbiI9PT1lLm5vZGUudHlwZX0pLmxlbmd0aDtyZXR1cm4gYnx8RD49M3x8bS5zbGljZSgwLC0xKS5zb21lKHdpbGxCcmVhayQxKT9ncm91cCQxKEUpOmNvbmNhdCQ0KFt3aWxsQnJlYWskMShnKXx8Qz9icmVha1BhcmVudCQyOiIiLGNvbmRpdGlvbmFsR3JvdXAkMShbZyxFXSldKX1mdW5jdGlvbiBpc0pTWE5vZGUoZSl7cmV0dXJuIkpTWEVsZW1lbnQiPT09ZS50eXBlfHwiSlNYRnJhZ21lbnQiPT09ZS50eXBlfHwiVFNKc3hGcmFnbWVudCI9PT1lLnR5cGV9ZnVuY3Rpb24gaXNFbXB0eUpTWEVsZW1lbnQoZSl7aWYoMD09PWUuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiEwO2lmKGUuY2hpbGRyZW4ubGVuZ3RoPjEpcmV0dXJuITE7dmFyIHQ9ZS5jaGlsZHJlblswXTtyZXR1cm4gaXNMaXRlcmFsKHQpJiYhaXNNZWFuaW5nZnVsSlNYVGV4dCh0KX1mdW5jdGlvbiBpc01lYW5pbmdmdWxKU1hUZXh0KGUpe3JldHVybiBpc0xpdGVyYWwoZSkmJihjb250YWluc05vbkpzeFdoaXRlc3BhY2VSZWdleC50ZXN0KHJhd1RleHQoZSkpfHwhL1xuLy50ZXN0KHJhd1RleHQoZSkpKX1mdW5jdGlvbiBjb25kaXRpb25hbEV4cHJlc3Npb25DaGFpbkNvbnRhaW5zSlNYKGUpe3JldHVybiBCb29sZWFuKGdldENvbmRpdGlvbmFsQ2hhaW5Db250ZW50cyhlKS5maW5kKGlzSlNYTm9kZSkpfWZ1bmN0aW9uIGdldENvbmRpdGlvbmFsQ2hhaW5Db250ZW50cyhlKXtmdW5jdGlvbiB0KGUpeyJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09ZS50eXBlPyh0KGUudGVzdCksdChlLmNvbnNlcXVlbnQpLHQoZS5hbHRlcm5hdGUpKTpuLnB1c2goZSl9dmFyIG49W107cmV0dXJuIHQoZSksbn1mdW5jdGlvbiBpc0pTWFdoaXRlc3BhY2VFeHByZXNzaW9uKGUpe3JldHVybiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIj09PWUudHlwZSYmaXNMaXRlcmFsKGUuZXhwcmVzc2lvbikmJiIgIj09PWUuZXhwcmVzc2lvbi52YWx1ZSYmIWUuZXhwcmVzc2lvbi5jb21tZW50c31mdW5jdGlvbiBwcmludEpTWENoaWxkcmVuKGUsdCxuLHIpe3ZhciBpPWUuZ2V0VmFsdWUoKSxvPVtdO3JldHVybiBlLm1hcChmdW5jdGlvbihlLHQpe3ZhciBhPWUuZ2V0VmFsdWUoKTtpZihpc0xpdGVyYWwoYSkpe3ZhciBzPXJhd1RleHQoYSk7aWYoaXNNZWFuaW5nZnVsSlNYVGV4dChhKSl7dmFyIHU9cy5zcGxpdChtYXRjaEpzeFdoaXRlc3BhY2VSZWdleCk7IiI9PT11WzBdJiYoby5wdXNoKCIiKSx1LnNoaWZ0KCksL1xuLy50ZXN0KHVbMF0pP28ucHVzaChoYXJkbGluZSQzKTpvLnB1c2gociksdS5zaGlmdCgpKTt2YXIgYztpZigiIj09PWdldExhc3QkNCh1KSYmKHUucG9wKCksYz11LnBvcCgpKSwwPT09dS5sZW5ndGgpcmV0dXJuO3UuZm9yRWFjaChmdW5jdGlvbihlLHQpe3QlMj09PTE/by5wdXNoKGxpbmUkMyk6by5wdXNoKGUpfSksdm9pZCAwIT09Yz8vXG4vLnRlc3QoYyk/by5wdXNoKGhhcmRsaW5lJDMpOm8ucHVzaChyKTpvLnB1c2goIiIpfWVsc2UvXG4vLnRlc3Qocyk/cy5tYXRjaCgvXG4vZykubGVuZ3RoPjEmJihvLnB1c2goIiIpLG8ucHVzaChoYXJkbGluZSQzKSk6KG8ucHVzaCgiIiksby5wdXNoKHIpKX1lbHNle3ZhciBsPW4oZSk7by5wdXNoKGwpO3ZhciBwPWkuY2hpbGRyZW5bdCsxXTtwJiZpc01lYW5pbmdmdWxKU1hUZXh0KHApJiYhL15bIFxuXHJcdF0vLnRlc3QocmF3VGV4dChwKSk/by5wdXNoKCIiKTpvLnB1c2goaGFyZGxpbmUkMyl9fSwiY2hpbGRyZW4iKSxvfWZ1bmN0aW9uIHByaW50SlNYRWxlbWVudChlLHQsbil7dmFyIHI9ZS5nZXRWYWx1ZSgpO2lmKCJKU1hFbGVtZW50Ij09PXIudHlwZSYmaXNFbXB0eUpTWEVsZW1lbnQocikpcmV0dXJuIHIub3BlbmluZ0VsZW1lbnQuc2VsZkNsb3Npbmc9ITAsZS5jYWxsKG4sIm9wZW5pbmdFbGVtZW50Iik7dmFyIGk9IkpTWEVsZW1lbnQiPT09ci50eXBlP2UuY2FsbChuLCJvcGVuaW5nRWxlbWVudCIpOmUuY2FsbChuLCJvcGVuaW5nRnJhZ21lbnQiKSxvPSJKU1hFbGVtZW50Ij09PXIudHlwZT9lLmNhbGwobiwiY2xvc2luZ0VsZW1lbnQiKTplLmNhbGwobiwiY2xvc2luZ0ZyYWdtZW50Iik7aWYoMT09PXIuY2hpbGRyZW4ubGVuZ3RoJiYiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciI9PT1yLmNoaWxkcmVuWzBdLnR5cGUmJigiVGVtcGxhdGVMaXRlcmFsIj09PXIuY2hpbGRyZW5bMF0uZXhwcmVzc2lvbi50eXBlfHwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIj09PXIuY2hpbGRyZW5bMF0uZXhwcmVzc2lvbi50eXBlKSlyZXR1cm4gY29uY2F0JDQoW2ksY29uY2F0JDQoZS5tYXAobiwiY2hpbGRyZW4iKSksb10pO3IuY2hpbGRyZW49ci5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGlzSlNYV2hpdGVzcGFjZUV4cHJlc3Npb24oZSk/e3R5cGU6IkpTWFRleHQiLHZhbHVlOiIgIixyYXc6IiAifTplfSk7Zm9yKHZhciBhPXIuY2hpbGRyZW4uZmlsdGVyKGlzSlNYTm9kZSkubGVuZ3RoPjAscz1yLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iSlNYRXhwcmVzc2lvbkNvbnRhaW5lciI9PT1lLnR5cGV9KS5sZW5ndGg+MSx1PSJKU1hFbGVtZW50Ij09PXIudHlwZSYmci5vcGVuaW5nRWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aD4xLGM9d2lsbEJyZWFrJDEoaSl8fGF8fHV8fHMsbD10LnNpbmdsZVF1b3RlPyJ7JyAnfSI6J3siICJ9JyxwPWlmQnJlYWskMShjb25jYXQkNChbbCxzb2Z0bGluZSQxXSksIiAiKSxmPXByaW50SlNYQ2hpbGRyZW4oZSx0LG4scCksZD1yLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gaXNNZWFuaW5nZnVsSlNYVGV4dChlKX0pLmxlbmd0aD4wLGg9Zi5sZW5ndGgtMjtoPj0wO2gtLSl7dmFyIG09IiI9PT1mW2hdJiYiIj09PWZbaCsxXSxnPWZbaF09PT1oYXJkbGluZSQzJiYiIj09PWZbaCsxXSYmZltoKzJdPT09aGFyZGxpbmUkMyx5PShmW2hdPT09c29mdGxpbmUkMXx8ZltoXT09PWhhcmRsaW5lJDMpJiYiIj09PWZbaCsxXSYmZltoKzJdPT09cCx2PWZbaF09PT1wJiYiIj09PWZbaCsxXSYmKGZbaCsyXT09PXNvZnRsaW5lJDF8fGZbaCsyXT09PWhhcmRsaW5lJDMpLGI9ZltoXT09PXAmJiIiPT09ZltoKzFdJiZmW2grMl09PT1wO2cmJmR8fG18fHl8fGI/Zi5zcGxpY2UoaCwyKTp2JiZmLnNwbGljZShoKzEsMil9Zm9yKDtmLmxlbmd0aCYmKGlzTGluZU5leHQkMShnZXRMYXN0JDQoZikpfHxpc0VtcHR5JDEoZ2V0TGFzdCQ0KGYpKSk7KWYucG9wKCk7Zm9yKDtmLmxlbmd0aCYmKGlzTGluZU5leHQkMShmWzBdKXx8aXNFbXB0eSQxKGZbMF0pKSYmKGlzTGluZU5leHQkMShmWzFdKXx8aXNFbXB0eSQxKGZbMV0pKTspZi5zaGlmdCgpLGYuc2hpZnQoKTt2YXIgeD1bXTtmLmZvckVhY2goZnVuY3Rpb24oZSx0KXtpZihlPT09cCl7aWYoMT09PXQmJiIiPT09Zlt0LTFdKXJldHVybiAyPT09Zi5sZW5ndGg/dm9pZCB4LnB1c2gobCk6dm9pZCB4LnB1c2goY29uY2F0JDQoW2wsaGFyZGxpbmUkM10pKTtpZih0PT09Zi5sZW5ndGgtMSlyZXR1cm4gdm9pZCB4LnB1c2gobCk7aWYoIiI9PT1mW3QtMV0mJmZbdC0yXT09PWhhcmRsaW5lJDMpcmV0dXJuIHZvaWQgeC5wdXNoKGwpfXgucHVzaChlKSx3aWxsQnJlYWskMShlKSYmKGM9ITApfSk7dmFyIEM9ZD9maWxsJDIoeCk6Z3JvdXAkMShjb25jYXQkNCh4KSx7c2hvdWxkQnJlYWs6ITB9KSxFPWdyb3VwJDEoY29uY2F0JDQoW2ksaW5kZW50JDIoY29uY2F0JDQoW2hhcmRsaW5lJDMsQ10pKSxoYXJkbGluZSQzLG9dKSk7cmV0dXJuIGM/RTpjb25kaXRpb25hbEdyb3VwJDEoW2dyb3VwJDEoY29uY2F0JDQoW2ksY29uY2F0JDQoZiksb10pKSxFXSl9ZnVuY3Rpb24gbWF5YmVXcmFwSlNYRWxlbWVudEluUGFyZW5zKGUsdCl7dmFyIG49ZS5nZXRQYXJlbnROb2RlKCk7cmV0dXJuIG4/e0FycmF5RXhwcmVzc2lvbjohMCxKU1hBdHRyaWJ1dGU6ITAsSlNYRWxlbWVudDohMCxKU1hFeHByZXNzaW9uQ29udGFpbmVyOiEwLEpTWEZyYWdtZW50OiEwLFRTSnN4RnJhZ21lbnQ6ITAsRXhwcmVzc2lvblN0YXRlbWVudDohMCxDYWxsRXhwcmVzc2lvbjohMCxPcHRpb25hbENhbGxFeHByZXNzaW9uOiEwLENvbmRpdGlvbmFsRXhwcmVzc2lvbjohMH1bbi50eXBlXT90Omdyb3VwJDEoY29uY2F0JDQoW2lmQnJlYWskMSgiKCIpLGluZGVudCQyKGNvbmNhdCQ0KFtzb2Z0bGluZSQxLHRdKSksc29mdGxpbmUkMSxpZkJyZWFrJDEoIikiKV0pKTp0fWZ1bmN0aW9uIGlzQmluYXJ5aXNoKGUpe3JldHVybiJCaW5hcnlFeHByZXNzaW9uIj09PWUudHlwZXx8IkxvZ2ljYWxFeHByZXNzaW9uIj09PWUudHlwZX1mdW5jdGlvbiBpc01lbWJlcmlzaChlKXtyZXR1cm4iTWVtYmVyRXhwcmVzc2lvbiI9PT1lLnR5cGV8fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09ZS50eXBlfHwiQmluZEV4cHJlc3Npb24iPT09ZS50eXBlJiZlLm9iamVjdH1mdW5jdGlvbiBzaG91bGRJbmxpbmVMb2dpY2FsRXhwcmVzc2lvbihlKXtyZXR1cm4iTG9naWNhbEV4cHJlc3Npb24iPT09ZS50eXBlJiYoIk9iamVjdEV4cHJlc3Npb24iPT09ZS5yaWdodC50eXBlJiYwIT09ZS5yaWdodC5wcm9wZXJ0aWVzLmxlbmd0aHx8KCJBcnJheUV4cHJlc3Npb24iPT09ZS5yaWdodC50eXBlJiYwIT09ZS5yaWdodC5lbGVtZW50cy5sZW5ndGh8fCEhaXNKU1hOb2RlKGUucmlnaHQpKSl9ZnVuY3Rpb24gcHJpbnRCaW5hcnlpc2hFeHByZXNzaW9ucyhlLHQsbixyLGkpe3ZhciBvPVtdLGE9ZS5nZXRWYWx1ZSgpO2lmKGlzQmluYXJ5aXNoKGEpKXtzaG91bGRGbGF0dGVuJDEoYS5vcGVyYXRvcixhLmxlZnQub3BlcmF0b3IpP289by5jb25jYXQoZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBwcmludEJpbmFyeWlzaEV4cHJlc3Npb25zKGUsdCxuLCEwLGkpfSwibGVmdCIpKTpvLnB1c2goZS5jYWxsKHQsImxlZnQiKSk7dmFyIHM9c2hvdWxkSW5saW5lTG9naWNhbEV4cHJlc3Npb24oYSksdT0ifD4iPT09YS5vcGVyYXRvcixjPWNvbmNhdCQ0KHM/W2Eub3BlcmF0b3IsIiAiLGUuY2FsbCh0LCJyaWdodCIpXTpbdT9zb2Z0bGluZSQxOiIiLGEub3BlcmF0b3IsdT8iICI6bGluZSQzLGUuY2FsbCh0LCJyaWdodCIpXSksbD1lLmdldFBhcmVudE5vZGUoKSxwPSEoaSYmIkxvZ2ljYWxFeHByZXNzaW9uIj09PWEudHlwZSkmJmwudHlwZSE9PWEudHlwZSYmYS5sZWZ0LnR5cGUhPT1hLnR5cGUmJmEucmlnaHQudHlwZSE9PWEudHlwZTtvLnB1c2goIiAiLHA/Z3JvdXAkMShjKTpjKSxyJiZhLmNvbW1lbnRzJiYobz1jb21tZW50cy5wcmludENvbW1lbnRzKGUsZnVuY3Rpb24oKXtyZXR1cm4gY29uY2F0JDQobyl9LG4pKX1lbHNlIG8ucHVzaChlLmNhbGwodCkpO3JldHVybiBvfWZ1bmN0aW9uIHByaW50QXNzaWdubWVudFJpZ2h0KGUsdCxuLHIpe3JldHVybiBoYXNMZWFkaW5nT3duTGluZUNvbW1lbnQoci5vcmlnaW5hbFRleHQsdCxyKT9pbmRlbnQkMihjb25jYXQkNChbaGFyZGxpbmUkMyxuXSkpOmlzQmluYXJ5aXNoKHQpJiYhc2hvdWxkSW5saW5lTG9naWNhbEV4cHJlc3Npb24odCl8fCJDb25kaXRpb25hbEV4cHJlc3Npb24iPT09dC50eXBlJiZpc0JpbmFyeWlzaCh0LnRlc3QpJiYhc2hvdWxkSW5saW5lTG9naWNhbEV4cHJlc3Npb24odC50ZXN0KXx8IlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiI9PT10LnR5cGV8fCgiSWRlbnRpZmllciI9PT1lLnR5cGV8fGlzU3RyaW5nTGl0ZXJhbChlKXx8Ik1lbWJlckV4cHJlc3Npb24iPT09ZS50eXBlKSYmKGlzU3RyaW5nTGl0ZXJhbCh0KXx8aXNNZW1iZXJFeHByZXNzaW9uQ2hhaW4odCkpP2luZGVudCQyKGNvbmNhdCQ0KFtsaW5lJDMsbl0pKTpjb25jYXQkNChbIiAiLG5dKX1mdW5jdGlvbiBwcmludEFzc2lnbm1lbnQoZSx0LG4scixpLG8pe2lmKCFyKXJldHVybiB0O3ZhciBhPXByaW50QXNzaWdubWVudFJpZ2h0KGUscixpLG8pO3JldHVybiBncm91cCQxKGNvbmNhdCQ0KFt0LG4sYV0pKX1mdW5jdGlvbiBhZGp1c3RDbGF1c2UoZSx0LG4pe3JldHVybiJFbXB0eVN0YXRlbWVudCI9PT1lLnR5cGU/IjsiOiJCbG9ja1N0YXRlbWVudCI9PT1lLnR5cGV8fG4/Y29uY2F0JDQoWyIgIix0XSk6aW5kZW50JDIoY29uY2F0JDQoW2xpbmUkMyx0XSkpfWZ1bmN0aW9uIG5vZGVTdHIoZSx0LG4pe3ZhciByPXJhd1RleHQoZSksaT1ufHwiRGlyZWN0aXZlTGl0ZXJhbCI9PT1lLnR5cGU7cmV0dXJuIHByaW50U3RyaW5nJDEocix0LGkpfWZ1bmN0aW9uIHByaW50UmVnZXgoZSl7dmFyIHQ9ZS5mbGFncy5zcGxpdCgiIikuc29ydCgpLmpvaW4oIiIpO3JldHVybiIvIi5jb25jYXQoZS5wYXR0ZXJuLCIvIikuY29uY2F0KHQpfWZ1bmN0aW9uIGlzTGFzdFN0YXRlbWVudChlKXt2YXIgdD1lLmdldFBhcmVudE5vZGUoKTtpZighdClyZXR1cm4hMDt2YXIgbj1lLmdldFZhbHVlKCkscj0odC5ib2R5fHx0LmNvbnNlcXVlbnQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iRW1wdHlTdGF0ZW1lbnQiIT09ZS50eXBlfSk7cmV0dXJuIHImJnJbci5sZW5ndGgtMV09PT1ufWZ1bmN0aW9uIGhhc0xlYWRpbmdDb21tZW50KGUpe3JldHVybiBlLmNvbW1lbnRzJiZlLmNvbW1lbnRzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVhZGluZ30pfWZ1bmN0aW9uIGhhc1RyYWlsaW5nQ29tbWVudChlKXtyZXR1cm4gZS5jb21tZW50cyYmZS5jb21tZW50cy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyYWlsaW5nfSl9ZnVuY3Rpb24gaGFzTGVhZGluZ093bkxpbmVDb21tZW50KGUsdCxuKXtyZXR1cm4gaXNKU1hOb2RlKHQpP2hhc05vZGVJZ25vcmVDb21tZW50JDEodCk6dC5jb21tZW50cyYmdC5jb21tZW50cy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxlYWRpbmcmJmhhc05ld2xpbmUkMihlLG4ubG9jRW5kKHQpKX0pfWZ1bmN0aW9uIGhhc05ha2VkTGVmdFNpZGUoZSl7cmV0dXJuIkFzc2lnbm1lbnRFeHByZXNzaW9uIj09PWUudHlwZXx8IkJpbmFyeUV4cHJlc3Npb24iPT09ZS50eXBlfHwiTG9naWNhbEV4cHJlc3Npb24iPT09ZS50eXBlfHwiQ29uZGl0aW9uYWxFeHByZXNzaW9uIj09PWUudHlwZXx8IkNhbGxFeHByZXNzaW9uIj09PWUudHlwZXx8Ik9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iPT09ZS50eXBlfHwiTWVtYmVyRXhwcmVzc2lvbiI9PT1lLnR5cGV8fCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iPT09ZS50eXBlfHwiU2VxdWVuY2VFeHByZXNzaW9uIj09PWUudHlwZXx8IlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI9PT1lLnR5cGV8fCJCaW5kRXhwcmVzc2lvbiI9PT1lLnR5cGUmJiFlLm9iamVjdHx8IlVwZGF0ZUV4cHJlc3Npb24iPT09ZS50eXBlJiYhZS5wcmVmaXh9ZnVuY3Rpb24gaXNGbG93QW5ub3RhdGlvbkNvbW1lbnQoZSx0LG4pe3ZhciByPW4ubG9jU3RhcnQodCksaT1za2lwV2hpdGVzcGFjZSQxKGUsbi5sb2NFbmQodCkpO3JldHVybiIvKiI9PT1lLnN1YnN0cihyLDIpJiYiKi8iPT09ZS5zdWJzdHIoaSwyKX1mdW5jdGlvbiBnZXRMZWZ0U2lkZShlKXtyZXR1cm4gZS5leHByZXNzaW9ucz9lLmV4cHJlc3Npb25zWzBdOmUubGVmdHx8ZS50ZXN0fHxlLmNhbGxlZXx8ZS5vYmplY3R8fGUudGFnfHxlLmFyZ3VtZW50fHxlLmV4cHJlc3Npb259ZnVuY3Rpb24gZ2V0TGVmdFNpZGVQYXRoTmFtZShlLHQpe2lmKHQuZXhwcmVzc2lvbnMpcmV0dXJuWyJleHByZXNzaW9ucyIsMF07aWYodC5sZWZ0KXJldHVyblsibGVmdCJdO2lmKHQudGVzdClyZXR1cm5bInRlc3QiXTtpZih0LmNhbGxlZSlyZXR1cm5bImNhbGxlZSJdO2lmKHQub2JqZWN0KXJldHVyblsib2JqZWN0Il07aWYodC50YWcpcmV0dXJuWyJ0YWciXTtpZih0LmFyZ3VtZW50KXJldHVyblsiYXJndW1lbnQiXTtpZih0LmV4cHJlc3Npb24pcmV0dXJuWyJleHByZXNzaW9uIl07dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG5vZGUgaGFzIG5vIGxlZnQgc2lkZSIsdCl9ZnVuY3Rpb24gZXhwck5lZWRzQVNJUHJvdGVjdGlvbihlLHQpe3ZhciBuPWUuZ2V0VmFsdWUoKTtyZXR1cm4hIShuZWVkc1BhcmVuc18xKGUsdCl8fCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiI9PT1uLnR5cGV8fCJUeXBlQ2FzdEV4cHJlc3Npb24iPT09bi50eXBlfHwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iPT09bi50eXBlJiYhc2hvdWxkUHJpbnRQYXJhbXNXaXRob3V0UGFyZW5zKGUsdCl8fCJBcnJheUV4cHJlc3Npb24iPT09bi50eXBlfHwiQXJyYXlQYXR0ZXJuIj09PW4udHlwZXx8IlVuYXJ5RXhwcmVzc2lvbiI9PT1uLnR5cGUmJm4ucHJlZml4JiYoIisiPT09bi5vcGVyYXRvcnx8Ii0iPT09bi5vcGVyYXRvcil8fCJUZW1wbGF0ZUxpdGVyYWwiPT09bi50eXBlfHwiVGVtcGxhdGVFbGVtZW50Ij09PW4udHlwZXx8aXNKU1hOb2RlKG4pfHwiQmluZEV4cHJlc3Npb24iPT09bi50eXBlfHwiUmVnRXhwTGl0ZXJhbCI9PT1uLnR5cGV8fCJMaXRlcmFsIj09PW4udHlwZSYmbi5wYXR0ZXJufHwiTGl0ZXJhbCI9PT1uLnR5cGUmJm4ucmVnZXgpfHwhIWhhc05ha2VkTGVmdFNpZGUobikmJmUuY2FsbC5hcHBseShlLFtmdW5jdGlvbihlKXtyZXR1cm4gZXhwck5lZWRzQVNJUHJvdGVjdGlvbihlLHQpfV0uY29uY2F0KGdldExlZnRTaWRlUGF0aE5hbWUoZSxuKSkpfWZ1bmN0aW9uIHN0bXROZWVkc0FTSVByb3RlY3Rpb24oZSx0KXtyZXR1cm4iRXhwcmVzc2lvblN0YXRlbWVudCI9PT1lLmdldE5vZGUoKS50eXBlJiZlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIGV4cHJOZWVkc0FTSVByb3RlY3Rpb24oZSx0KX0sImV4cHJlc3Npb24iKX1mdW5jdGlvbiBjbGFzc1Byb3BNYXlDYXVzZUFTSVByb2JsZW1zKGUpe3ZhciB0PWUuZ2V0Tm9kZSgpO2lmKCJDbGFzc1Byb3BlcnR5IiE9PXQudHlwZSlyZXR1cm4hMTt2YXIgbj10LmtleSYmdC5rZXkubmFtZTtyZXR1cm4hKCJzdGF0aWMiIT09biYmImdldCIhPT1uJiYic2V0IiE9PW58fHQudmFsdWV8fHQudHlwZUFubm90YXRpb24pfHx2b2lkIDB9ZnVuY3Rpb24gY2xhc3NDaGlsZE5lZWRzQVNJUHJvdGVjdGlvbihlKXtpZihlKXtpZighZS5jb21wdXRlZCl7dmFyIHQ9ZS5rZXkmJmUua2V5Lm5hbWU7aWYoImluIj09PXR8fCJpbnN0YW5jZW9mIj09PXQpcmV0dXJuITB9c3dpdGNoKGUudHlwZSl7Y2FzZSJDbGFzc1Byb3BlcnR5IjpjYXNlIlRTQWJzdHJhY3RDbGFzc1Byb3BlcnR5IjpyZXR1cm4gZS5jb21wdXRlZDtjYXNlIk1ldGhvZERlZmluaXRpb24iOmNhc2UiVFNBYnN0cmFjdE1ldGhvZERlZmluaXRpb24iOmNhc2UiQ2xhc3NNZXRob2QiOnZhciBuPWUudmFsdWU/ZS52YWx1ZS5hc3luYzplLmFzeW5jLHI9ZS52YWx1ZT9lLnZhbHVlLmdlbmVyYXRvcjplLmdlbmVyYXRvcjtyZXR1cm4hbiYmIWUuc3RhdGljJiYiZ2V0IiE9PWUua2luZCYmInNldCIhPT1lLmtpbmQmJiEoIWUuY29tcHV0ZWQmJiFyKTtkZWZhdWx0OnJldHVybiExfX19ZnVuY3Rpb24gcmV0dXJuQXJndW1lbnRIYXNMZWFkaW5nQ29tbWVudChlLHQpe2lmKGhhc0xlYWRpbmdPd25MaW5lQ29tbWVudChlLm9yaWdpbmFsVGV4dCx0LGUpKXJldHVybiEwO2lmKGhhc05ha2VkTGVmdFNpZGUodCkpZm9yKHZhciBuLHI9dDtuPWdldExlZnRTaWRlKHIpOylpZihyPW4saGFzTGVhZGluZ093bkxpbmVDb21tZW50KGUub3JpZ2luYWxUZXh0LHIsZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaXNNZW1iZXJFeHByZXNzaW9uQ2hhaW4oZSl7cmV0dXJuKCJNZW1iZXJFeHByZXNzaW9uIj09PWUudHlwZXx8Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI9PT1lLnR5cGUpJiYoIklkZW50aWZpZXIiPT09ZS5vYmplY3QudHlwZXx8aXNNZW1iZXJFeHByZXNzaW9uQ2hhaW4oZS5vYmplY3QpKX1mdW5jdGlvbiBpc09iamVjdFR5cGVQcm9wZXJ0eUFGdW5jdGlvbihlLHQpe3JldHVybiJPYmplY3RUeXBlUHJvcGVydHkiPT09ZS50eXBlJiYiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiI9PT1lLnZhbHVlLnR5cGUmJiFlLnN0YXRpYyYmIWlzRnVuY3Rpb25Ob3RhdGlvbihlLHQpfWZ1bmN0aW9uIGlzRnVuY3Rpb25Ob3RhdGlvbihlLHQpe3JldHVybiBpc0dldHRlck9yU2V0dGVyKGUpfHxzYW1lTG9jU3RhcnQoZSxlLnZhbHVlLHQpfWZ1bmN0aW9uIGlzR2V0dGVyT3JTZXR0ZXIoZSl7cmV0dXJuImdldCI9PT1lLmtpbmR8fCJzZXQiPT09ZS5raW5kfWZ1bmN0aW9uIHNhbWVMb2NTdGFydChlLHQsbil7cmV0dXJuIG4ubG9jU3RhcnQoZSk9PT1uLmxvY1N0YXJ0KHQpfWZ1bmN0aW9uIGlzVHlwZUFubm90YXRpb25BRnVuY3Rpb24oZSx0KXtyZXR1cm4oIlR5cGVBbm5vdGF0aW9uIj09PWUudHlwZXx8IlRTVHlwZUFubm90YXRpb24iPT09ZS50eXBlKSYmIkZ1bmN0aW9uVHlwZUFubm90YXRpb24iPT09ZS50eXBlQW5ub3RhdGlvbi50eXBlJiYhZS5zdGF0aWMmJiFzYW1lTG9jU3RhcnQoZSxlLnR5cGVBbm5vdGF0aW9uLHQpfWZ1bmN0aW9uIGlzTm9kZVN0YXJ0aW5nV2l0aERlY2xhcmUoZSx0KXtyZXR1cm4oImZsb3ciPT09dC5wYXJzZXJ8fCJ0eXBlc2NyaXB0Ij09PXQucGFyc2VyKSYmKHQub3JpZ2luYWxUZXh0LnNsaWNlKDAsdC5sb2NTdGFydChlKSkubWF0Y2goL2RlY2xhcmVbIFx0XSokLyl8fHQub3JpZ2luYWxUZXh0LnNsaWNlKGUucmFuZ2VbMF0sZS5yYW5nZVsxXSkuc3RhcnRzV2l0aCgiZGVjbGFyZSAiKSl9ZnVuY3Rpb24gc2hvdWxkSHVnVHlwZShlKXtpZihpc09iamVjdFR5cGUoZSkpcmV0dXJuITA7aWYoIlVuaW9uVHlwZUFubm90YXRpb24iPT09ZS50eXBlfHwiVFNVbmlvblR5cGUiPT09ZS50eXBlKXt2YXIgdD1lLnR5cGVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iVm9pZFR5cGVBbm5vdGF0aW9uIj09PWUudHlwZXx8IlRTVm9pZEtleXdvcmQiPT09ZS50eXBlfHwiTnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGV8fCJUU051bGxLZXl3b3JkIj09PWUudHlwZX0pLmxlbmd0aCxuPWUudHlwZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJPYmplY3RUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGV8fCJUU1R5cGVMaXRlcmFsIj09PWUudHlwZXx8IkdlbmVyaWNUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGV8fCJUU1R5cGVSZWZlcmVuY2UiPT09ZS50eXBlfSkubGVuZ3RoO2lmKGUudHlwZXMubGVuZ3RoLTE9PT10JiZuPjApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc2hvdWxkSHVnQXJndW1lbnRzKGUpe3JldHVybiBlJiZlLnBhcmFtcyYmMT09PWUucGFyYW1zLmxlbmd0aCYmIWUucGFyYW1zWzBdLmNvbW1lbnRzJiYoIk9iamVjdFBhdHRlcm4iPT09ZS5wYXJhbXNbMF0udHlwZXx8IkFycmF5UGF0dGVybiI9PT1lLnBhcmFtc1swXS50eXBlfHwiSWRlbnRpZmllciI9PT1lLnBhcmFtc1swXS50eXBlJiZlLnBhcmFtc1swXS50eXBlQW5ub3RhdGlvbiYmKCJUeXBlQW5ub3RhdGlvbiI9PT1lLnBhcmFtc1swXS50eXBlQW5ub3RhdGlvbi50eXBlfHwiVFNUeXBlQW5ub3RhdGlvbiI9PT1lLnBhcmFtc1swXS50eXBlQW5ub3RhdGlvbi50eXBlKSYmaXNPYmplY3RUeXBlKGUucGFyYW1zWzBdLnR5cGVBbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uKXx8IkZ1bmN0aW9uVHlwZVBhcmFtIj09PWUucGFyYW1zWzBdLnR5cGUmJmlzT2JqZWN0VHlwZShlLnBhcmFtc1swXS50eXBlQW5ub3RhdGlvbil8fCJBc3NpZ25tZW50UGF0dGVybiI9PT1lLnBhcmFtc1swXS50eXBlJiYoIk9iamVjdFBhdHRlcm4iPT09ZS5wYXJhbXNbMF0ubGVmdC50eXBlfHwiQXJyYXlQYXR0ZXJuIj09PWUucGFyYW1zWzBdLmxlZnQudHlwZSkmJigiSWRlbnRpZmllciI9PT1lLnBhcmFtc1swXS5yaWdodC50eXBlfHwiT2JqZWN0RXhwcmVzc2lvbiI9PT1lLnBhcmFtc1swXS5yaWdodC50eXBlJiYwPT09ZS5wYXJhbXNbMF0ucmlnaHQucHJvcGVydGllcy5sZW5ndGh8fCJBcnJheUV4cHJlc3Npb24iPT09ZS5wYXJhbXNbMF0ucmlnaHQudHlwZSYmMD09PWUucGFyYW1zWzBdLnJpZ2h0LmVsZW1lbnRzLmxlbmd0aCkpJiYhZS5yZXN0fWZ1bmN0aW9uIHRlbXBsYXRlTGl0ZXJhbEhhc05ld0xpbmVzKGUpe3JldHVybiBlLnF1YXNpcy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlLnJhdy5pbmNsdWRlcygiXG4iKX0pfWZ1bmN0aW9uIGlzVGVtcGxhdGVPbkl0c093bkxpbmUoZSx0LG4pe3JldHVybigiVGVtcGxhdGVMaXRlcmFsIj09PWUudHlwZSYmdGVtcGxhdGVMaXRlcmFsSGFzTmV3TGluZXMoZSl8fCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iPT09ZS50eXBlJiZ0ZW1wbGF0ZUxpdGVyYWxIYXNOZXdMaW5lcyhlLnF1YXNpKSkmJiFoYXNOZXdsaW5lJDIodCxuLmxvY1N0YXJ0KGUpLHtiYWNrd2FyZHM6ITB9KX1mdW5jdGlvbiBwcmludEFycmF5SXRlbXMoZSx0LG4scil7dmFyIGk9W10sbz1bXTtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe2kucHVzaChjb25jYXQkNChvKSksaS5wdXNoKGdyb3VwJDEocihlKSkpLG89WyIsIixsaW5lJDNdLGUuZ2V0VmFsdWUoKSYmaXNOZXh0TGluZUVtcHR5JDIodC5vcmlnaW5hbFRleHQsZS5nZXRWYWx1ZSgpLHQpJiZvLnB1c2goc29mdGxpbmUkMSl9LG4pLGNvbmNhdCQ0KGkpfWZ1bmN0aW9uIGhhc0RhbmdsaW5nQ29tbWVudHMoZSl7cmV0dXJuIGUuY29tbWVudHMmJmUuY29tbWVudHMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4hZS5sZWFkaW5nJiYhZS50cmFpbGluZ30pfWZ1bmN0aW9uIG5lZWRzSGFyZGxpbmVBZnRlckRhbmdsaW5nQ29tbWVudChlKXtpZighZS5jb21tZW50cylyZXR1cm4hMTt2YXIgdD1nZXRMYXN0JDQoZS5jb21tZW50cy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUubGVhZGluZyYmIWUudHJhaWxpbmd9KSk7cmV0dXJuIHQmJiFjb21tZW50cyQzLmlzQmxvY2tDb21tZW50KHQpfWZ1bmN0aW9uIGlzTGl0ZXJhbChlKXtyZXR1cm4iQm9vbGVhbkxpdGVyYWwiPT09ZS50eXBlfHwiRGlyZWN0aXZlTGl0ZXJhbCI9PT1lLnR5cGV8fCJMaXRlcmFsIj09PWUudHlwZXx8Ik51bGxMaXRlcmFsIj09PWUudHlwZXx8Ik51bWVyaWNMaXRlcmFsIj09PWUudHlwZXx8IlJlZ0V4cExpdGVyYWwiPT09ZS50eXBlfHwiU3RyaW5nTGl0ZXJhbCI9PT1lLnR5cGV8fCJUZW1wbGF0ZUxpdGVyYWwiPT09ZS50eXBlfHwiVFNUeXBlTGl0ZXJhbCI9PT1lLnR5cGV8fCJKU1hUZXh0Ij09PWUudHlwZX1mdW5jdGlvbiBpc051bWVyaWNMaXRlcmFsKGUpe3JldHVybiJOdW1lcmljTGl0ZXJhbCI9PT1lLnR5cGV8fCJMaXRlcmFsIj09PWUudHlwZSYmIm51bWJlciI9PT10eXBlb2YgZS52YWx1ZX1mdW5jdGlvbiBpc1N0cmluZ0xpdGVyYWwoZSl7cmV0dXJuIlN0cmluZ0xpdGVyYWwiPT09ZS50eXBlfHwiTGl0ZXJhbCI9PT1lLnR5cGUmJiJzdHJpbmciPT09dHlwZW9mIGUudmFsdWV9ZnVuY3Rpb24gaXNPYmplY3RUeXBlKGUpe3JldHVybiJPYmplY3RUeXBlQW5ub3RhdGlvbiI9PT1lLnR5cGV8fCJUU1R5cGVMaXRlcmFsIj09PWUudHlwZX1mdW5jdGlvbiBpc1Rlc3RDYWxsKGUsdCl7aWYoIkNhbGxFeHByZXNzaW9uIiE9PWUudHlwZSlyZXR1cm4hMTtpZigxPT09ZS5hcmd1bWVudHMubGVuZ3RoKXtpZihpc0FuZ3VsYXJUZXN0V3JhcHBlcihlKSYmdCYmaXNUZXN0Q2FsbCh0KSlyZXR1cm4gaXNGdW5jdGlvbk9yQXJyb3dFeHByZXNzaW9uKGUuYXJndW1lbnRzWzBdLnR5cGUpO2lmKGlzVW5pdFRlc3RTZXRVcChlKSlyZXR1cm4gaXNGdW5jdGlvbk9yQXJyb3dFeHByZXNzaW9uKGUuYXJndW1lbnRzWzBdLnR5cGUpfHxpc0FuZ3VsYXJUZXN0V3JhcHBlcihlLmFyZ3VtZW50c1swXSl9ZWxzZSBpZigyPT09ZS5hcmd1bWVudHMubGVuZ3RoJiYoIklkZW50aWZpZXIiPT09ZS5jYWxsZWUudHlwZSYmdW5pdFRlc3RSZS50ZXN0KGUuY2FsbGVlLm5hbWUpfHxpc1NraXBPck9ubHlCbG9jayhlKSkmJihpc1RlbXBsYXRlTGl0ZXJhbChlLmFyZ3VtZW50c1swXSl8fGlzU3RyaW5nTGl0ZXJhbChlLmFyZ3VtZW50c1swXSkpKXJldHVybiBpc0Z1bmN0aW9uT3JBcnJvd0V4cHJlc3Npb24oZS5hcmd1bWVudHNbMV0udHlwZSkmJmUuYXJndW1lbnRzWzFdLnBhcmFtcy5sZW5ndGg8PTF8fGlzQW5ndWxhclRlc3RXcmFwcGVyKGUuYXJndW1lbnRzWzFdKTtyZXR1cm4hMX1mdW5jdGlvbiBpc1NraXBPck9ubHlCbG9jayhlKXtyZXR1cm4oIk1lbWJlckV4cHJlc3Npb24iPT09ZS5jYWxsZWUudHlwZXx8Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI9PT1lLmNhbGxlZS50eXBlKSYmIklkZW50aWZpZXIiPT09ZS5jYWxsZWUub2JqZWN0LnR5cGUmJiJJZGVudGlmaWVyIj09PWUuY2FsbGVlLnByb3BlcnR5LnR5cGUmJnVuaXRUZXN0UmUudGVzdChlLmNhbGxlZS5vYmplY3QubmFtZSkmJigib25seSI9PT1lLmNhbGxlZS5wcm9wZXJ0eS5uYW1lfHwic2tpcCI9PT1lLmNhbGxlZS5wcm9wZXJ0eS5uYW1lKX1mdW5jdGlvbiBpc1RlbXBsYXRlTGl0ZXJhbChlKXtyZXR1cm4iVGVtcGxhdGVMaXRlcmFsIj09PWUudHlwZX1mdW5jdGlvbiBpc0FuZ3VsYXJUZXN0V3JhcHBlcihlKXtyZXR1cm4oIkNhbGxFeHByZXNzaW9uIj09PWUudHlwZXx8Ik9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iPT09ZS50eXBlKSYmIklkZW50aWZpZXIiPT09ZS5jYWxsZWUudHlwZSYmKCJhc3luYyI9PT1lLmNhbGxlZS5uYW1lfHwiaW5qZWN0Ij09PWUuY2FsbGVlLm5hbWUpfWZ1bmN0aW9uIGlzRnVuY3Rpb25PckFycm93RXhwcmVzc2lvbihlKXtyZXR1cm4iRnVuY3Rpb25FeHByZXNzaW9uIj09PWV8fCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1lfWZ1bmN0aW9uIGlzVW5pdFRlc3RTZXRVcChlKXt2YXIgdD0vXihiZWZvcmV8YWZ0ZXIpKEVhY2h8QWxsKSQvO3JldHVybiJJZGVudGlmaWVyIj09PWUuY2FsbGVlLnR5cGUmJnQudGVzdChlLmNhbGxlZS5uYW1lKSYmMT09PWUuYXJndW1lbnRzLmxlbmd0aH1mdW5jdGlvbiBpc1RoZU9ubHlKU1hFbGVtZW50SW5NYXJrZG93bihlLHQpe2lmKCJtYXJrZG93biIhPT1lLnBhcmVudFBhcnNlcilyZXR1cm4hMTt2YXIgbj10LmdldE5vZGUoKTtpZighbi5leHByZXNzaW9ufHwhaXNKU1hOb2RlKG4uZXhwcmVzc2lvbikpcmV0dXJuITE7dmFyIHI9dC5nZXRQYXJlbnROb2RlKCk7cmV0dXJuIlByb2dyYW0iPT09ci50eXBlJiYxPT1yLmJvZHkubGVuZ3RofWZ1bmN0aW9uIHdpbGxQcmludE93bkNvbW1lbnRzKGUpe3ZhciB0PWUuZ2V0VmFsdWUoKSxuPWUuZ2V0UGFyZW50Tm9kZSgpO3JldHVybih0JiZpc0pTWE5vZGUodCl8fG4mJigiSlNYU3ByZWFkQXR0cmlidXRlIj09PW4udHlwZXx8IkpTWFNwcmVhZENoaWxkIj09PW4udHlwZXx8IlVuaW9uVHlwZUFubm90YXRpb24iPT09bi50eXBlfHwiVFNVbmlvblR5cGUiPT09bi50eXBlfHwoIkNsYXNzRGVjbGFyYXRpb24iPT09bi50eXBlfHwiQ2xhc3NFeHByZXNzaW9uIj09PW4udHlwZSkmJm4uc3VwZXJDbGFzcz09PXQpKSYmIWhhc0lnbm9yZUNvbW1lbnQkMShlKX1mdW5jdGlvbiBjYW5BdHRhY2hDb21tZW50KGUpe3JldHVybiBlLnR5cGUmJiJDb21tZW50QmxvY2siIT09ZS50eXBlJiYiQ29tbWVudExpbmUiIT09ZS50eXBlJiYiTGluZSIhPT1lLnR5cGUmJiJCbG9jayIhPT1lLnR5cGUmJiJFbXB0eVN0YXRlbWVudCIhPT1lLnR5cGUmJiJUZW1wbGF0ZUVsZW1lbnQiIT09ZS50eXBlJiYiSW1wb3J0IiE9PWUudHlwZSYmIShlLmNhbGxlZSYmIkltcG9ydCI9PT1lLmNhbGxlZS50eXBlKX1mdW5jdGlvbiBwcmludENvbW1lbnQkMShlLHQpe3ZhciBuPWUuZ2V0VmFsdWUoKTtzd2l0Y2gobi50eXBlKXtjYXNlIkNvbW1lbnRCbG9jayI6Y2FzZSJCbG9jayI6aWYoaXNKc0RvY0NvbW1lbnQobikpe3ZhciByPXByaW50SnNEb2NDb21tZW50KG4pO3JldHVybiBuLnRyYWlsaW5nJiYhaGFzTmV3bGluZSQyKHQub3JpZ2luYWxUZXh0LHQubG9jU3RhcnQobikse2JhY2t3YXJkczohMH0pP2NvbmNhdCQ0KFtoYXJkbGluZSQzLHJdKTpyfXZhciBpPSIqLS8iPT09dC5vcmlnaW5hbFRleHQuc3Vic3RyKHQubG9jRW5kKG4pLTMsMyk7cmV0dXJuIi8qIituLnZhbHVlKyhpPyIqLS8iOiIqLyIpO2Nhc2UiQ29tbWVudExpbmUiOmNhc2UiTGluZSI6cmV0dXJuIHQub3JpZ2luYWxUZXh0LnNsaWNlKHQubG9jU3RhcnQobikpLnN0YXJ0c1dpdGgoIiMhIik/IiMhIituLnZhbHVlLnRyaW1SaWdodCgpOiIvLyIrbi52YWx1ZS50cmltUmlnaHQoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTm90IGEgY29tbWVudDogIitKU09OLnN0cmluZ2lmeShuKSl9fWZ1bmN0aW9uIGlzSnNEb2NDb21tZW50KGUpe3ZhciB0PWUudmFsdWUuc3BsaXQoIlxuIik7cmV0dXJuIHQubGVuZ3RoPjEmJnQuc2xpY2UoMCx0Lmxlbmd0aC0xKS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4iKiI9PT1lLnRyaW0oKVswXX0pfWZ1bmN0aW9uIHByaW50SnNEb2NDb21tZW50KGUpe3ZhciB0PWUudmFsdWUuc3BsaXQoIlxuIik7cmV0dXJuIGNvbmNhdCQ0KFsiLyoiLGpvaW4kMihoYXJkbGluZSQzLHQubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4+MD8iICI6IiIpKyhuPHQubGVuZ3RoLTE/ZS50cmltKCk6ZS50cmltTGVmdCgpKX0pKSwiKi8iXSl9ZnVuY3Rpb24gcmF3VGV4dChlKXtyZXR1cm4gZS5leHRyYT9lLmV4dHJhLnJhdzplLnJhd31mdW5jdGlvbiBnZW5lcmljUHJpbnQkMihlLHQsbil7dmFyIHI9ZS5nZXRWYWx1ZSgpO3N3aXRjaChyLnR5cGUpe2Nhc2UiQXJyYXlFeHByZXNzaW9uIjpyZXR1cm4gMD09PXIuZWxlbWVudHMubGVuZ3RoPyJbXSI6Y29uY2F0JDYoWyJbIixpbmRlbnQkNChjb25jYXQkNihbaGFyZGxpbmUkNSxqb2luJDQoY29uY2F0JDYoWyIsIixoYXJkbGluZSQ1XSksZS5tYXAobiwiZWxlbWVudHMiKSldKSksaGFyZGxpbmUkNSwiXSJdKTtjYXNlIk9iamVjdEV4cHJlc3Npb24iOnJldHVybiAwPT09ci5wcm9wZXJ0aWVzLmxlbmd0aD8ie30iOmNvbmNhdCQ2KFsieyIsaW5kZW50JDQoY29uY2F0JDYoW2hhcmRsaW5lJDUsam9pbiQ0KGNvbmNhdCQ2KFsiLCIsaGFyZGxpbmUkNV0pLGUubWFwKG4sInByb3BlcnRpZXMiKSldKSksaGFyZGxpbmUkNSwifSJdKTtjYXNlIk9iamVjdFByb3BlcnR5IjpyZXR1cm4gY29uY2F0JDYoW2UuY2FsbChuLCJrZXkiKSwiOiAiLGUuY2FsbChuLCJ2YWx1ZSIpXSk7Y2FzZSJVbmFyeUV4cHJlc3Npb24iOnJldHVybiBjb25jYXQkNihbIisiPT09ci5vcGVyYXRvcj8iIjpyLm9wZXJhdG9yLGUuY2FsbChuLCJhcmd1bWVudCIpXSk7Y2FzZSJOdWxsTGl0ZXJhbCI6cmV0dXJuIm51bGwiO2Nhc2UiQm9vbGVhbkxpdGVyYWwiOnJldHVybiByLnZhbHVlPyJ0cnVlIjoiZmFsc2UiO2Nhc2UiU3RyaW5nTGl0ZXJhbCI6Y2FzZSJOdW1lcmljTGl0ZXJhbCI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KHIudmFsdWUpO2Nhc2UiSWRlbnRpZmllciI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KHIubmFtZSl9fWZ1bmN0aW9uIGNsZWFuJDIoZSx0KXtyZXR1cm4gZGVsZXRlIHQuc3RhcnQsZGVsZXRlIHQuZW5kLGRlbGV0ZSB0LmV4dHJhLGRlbGV0ZSB0LmxvYyxkZWxldGUgdC5jb21tZW50cywiSWRlbnRpZmllciI9PT1lLnR5cGU/e3R5cGU6IlN0cmluZ0xpdGVyYWwiLHZhbHVlOmUubmFtZX06IlVuYXJ5RXhwcmVzc2lvbiI9PT1lLnR5cGUmJiIrIj09PWUub3BlcmF0b3I/dC5hcmd1bWVudDp2b2lkIDB9ZnVuY3Rpb24gY2xlYW4kMyhlLHQpe2lmKFsicmF3cyIsInNvdXJjZUluZGV4Iiwic291cmNlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJ0cmFpbGluZ0NvbW1hIl0uZm9yRWFjaChmdW5jdGlvbihlKXtkZWxldGUgdFtlXX0pLCJtZWRpYS1xdWVyeSIhPT1lLnR5cGUmJiJtZWRpYS1xdWVyeS1saXN0IiE9PWUudHlwZSYmIm1lZGlhLWZlYXR1cmUtZXhwcmVzc2lvbiIhPT1lLnR5cGV8fGRlbGV0ZSB0LnZhbHVlLCJjc3MtcnVsZSI9PT1lLnR5cGUmJmRlbGV0ZSB0LnBhcmFtcywic2VsZWN0b3ItY29tYmluYXRvciI9PT1lLnR5cGUmJih0LnZhbHVlPXQudmFsdWUucmVwbGFjZSgvXHMrL2csIiAiKSksIm1lZGlhLWZlYXR1cmUiPT09ZS50eXBlJiYodC52YWx1ZT10LnZhbHVlLnJlcGxhY2UoLyAvZywiIikpLCgidmFsdWUtd29yZCI9PT1lLnR5cGUmJihlLmlzQ29sb3ImJmUuaXNIZXh8fC0xIT09WyJpbml0aWFsIiwiaW5oZXJpdCIsInVuc2V0IiwicmV2ZXJ0Il0uaW5kZXhPZih0LnZhbHVlLnJlcGxhY2UoKS50b0xvd2VyQ2FzZSgpKSl8fCJtZWRpYS1mZWF0dXJlIj09PWUudHlwZXx8InNlbGVjdG9yLXJvb3QtaW52YWxpZCI9PT1lLnR5cGV8fCJzZWxlY3Rvci1wc2V1ZG8iPT09ZS50eXBlKSYmKHQudmFsdWU9dC52YWx1ZS50b0xvd2VyQ2FzZSgpKSwiY3NzLWRlY2wiPT09ZS50eXBlJiYodC5wcm9wPXQucHJvcC50b0xvd2VyQ2FzZSgpKSwiY3NzLWF0cnVsZSIhPT1lLnR5cGUmJiJjc3MtaW1wb3J0IiE9PWUudHlwZXx8KHQubmFtZT10Lm5hbWUudG9Mb3dlckNhc2UoKSksInZhbHVlLW51bWJlciI9PT1lLnR5cGUmJih0LnVuaXQ9dC51bml0LnRvTG93ZXJDYXNlKCkpLCJtZWRpYS1mZWF0dXJlIiE9PWUudHlwZSYmIm1lZGlhLWtleXdvcmQiIT09ZS50eXBlJiYibWVkaWEtdHlwZSIhPT1lLnR5cGUmJiJtZWRpYS11bmtub3duIiE9PWUudHlwZSYmIm1lZGlhLXVybCIhPT1lLnR5cGUmJiJtZWRpYS12YWx1ZSIhPT1lLnR5cGUmJiJzZWxlY3Rvci1hdHRyaWJ1dGUiIT09ZS50eXBlJiYic2VsZWN0b3Itc3RyaW5nIiE9PWUudHlwZSYmInNlbGVjdG9yLWNsYXNzIiE9PWUudHlwZSYmInNlbGVjdG9yLWNvbWJpbmF0b3IiIT09ZS50eXBlJiYidmFsdWUtc3RyaW5nIiE9PWUudHlwZXx8IXQudmFsdWV8fCh0LnZhbHVlPWNsZWFuQ1NTU3RyaW5ncyh0LnZhbHVlKSksInNlbGVjdG9yLWF0dHJpYnV0ZSI9PT1lLnR5cGUmJih0LmF0dHJpYnV0ZT10LmF0dHJpYnV0ZS50cmltKCksdC5uYW1lc3BhY2UmJiJzdHJpbmciPT09dHlwZW9mIHQubmFtZXNwYWNlJiYodC5uYW1lc3BhY2U9dC5uYW1lc3BhY2UudHJpbSgpLDA9PT10Lm5hbWVzcGFjZS5sZW5ndGgmJih0Lm5hbWVzcGFjZT0hMCkpLHQudmFsdWUmJih0LnZhbHVlPXQudmFsdWUudHJpbSgpLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csIiIpLGRlbGV0ZSB0LnF1b3RlZCkpLCJtZWRpYS12YWx1ZSIhPT1lLnR5cGUmJiJtZWRpYS10eXBlIiE9PWUudHlwZSYmInZhbHVlLW51bWJlciIhPT1lLnR5cGUmJiJzZWxlY3Rvci1yb290LWludmFsaWQiIT09ZS50eXBlJiYic2VsZWN0b3ItY2xhc3MiIT09ZS50eXBlJiYic2VsZWN0b3ItY29tYmluYXRvciIhPT1lLnR5cGUmJiJzZWxlY3Rvci10YWciIT09ZS50eXBlfHwhdC52YWx1ZXx8KHQudmFsdWU9dC52YWx1ZS5yZXBsYWNlKC8oW1xkLmVFKy1dKykoW2EtekEtWl0qKS9nLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OdW1iZXIodCk7cmV0dXJuIGlzTmFOKHIpP2U6cituLnRvTG93ZXJDYXNlKCl9KSksInNlbGVjdG9yLXRhZyI9PT1lLnR5cGUpe3ZhciBuPWUudmFsdWUudG9Mb3dlckNhc2UoKTstMSE9PWh0bWxUYWdOYW1lcyQxLmluZGV4T2YobikmJih0LnZhbHVlPW4pLC0xIT09WyJmcm9tIiwidG8iXS5pbmRleE9mKG4pJiYodC52YWx1ZT1uKX0iY3NzLWF0cnVsZSI9PT1lLnR5cGUmJiJzdXBwb3J0cyI9PT1lLm5hbWUudG9Mb3dlckNhc2UoKSYmZGVsZXRlIHQudmFsdWUsInNlbGVjdG9yLXVua25vd24iPT09ZS50eXBlJiZkZWxldGUgdC52YWx1ZX1mdW5jdGlvbiBjbGVhbkNTU1N0cmluZ3MoZSl7cmV0dXJuIGUucmVwbGFjZSgvJy9nLCciJykucmVwbGFjZSgvXFwoW15hLWZBLUZcZF0pL2csIiQxIil9ZnVuY3Rpb24gZ2V0QW5jZXN0b3JDb3VudGVyKGUsdCl7Zm9yKHZhciBuLHI9W10uY29uY2F0KHQpLGk9LTE7bj1lLmdldFBhcmVudE5vZGUoKytpKTspaWYoLTEhPT1yLmluZGV4T2Yobi50eXBlKSlyZXR1cm4gaTtyZXR1cm4tMX1mdW5jdGlvbiBnZXRBbmNlc3Rvck5vZGUkMShlLHQpe3ZhciBuPWdldEFuY2VzdG9yQ291bnRlcihlLHQpO3JldHVybi0xPT09bj9udWxsOmUuZ2V0UGFyZW50Tm9kZShuKX1mdW5jdGlvbiBnZXRQcm9wT2ZEZWNsTm9kZSQxKGUpe3ZhciB0PWdldEFuY2VzdG9yTm9kZSQxKGUsImNzcy1kZWNsIik7cmV0dXJuIHQmJnQucHJvcCYmdC5wcm9wLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gaXNTQ1NTJDEoZSx0KXt2YXIgbj0ibGVzcyI9PT1lfHwic2NzcyI9PT1lLHI9Lyhcd1xzKjogW159Ol0rfCMpe3xAaW1wb3J0W15cbl0rKHVybHwsKS87cmV0dXJuIG4/InNjc3MiPT09ZTpyLnRlc3QodCl9ZnVuY3Rpb24gaXNXaWRlS2V5d29yZHMkMShlKXtyZXR1cm4tMSE9PVsiaW5pdGlhbCIsImluaGVyaXQiLCJ1bnNldCIsInJldmVydCJdLmluZGV4T2YoZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBpc0tleWZyYW1lQXRSdWxlS2V5d29yZHMkMShlLHQpe3ZhciBuPWdldEFuY2VzdG9yTm9kZSQxKGUsImNzcy1hdHJ1bGUiKTtyZXR1cm4gbiYmbi5uYW1lJiZuLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgia2V5ZnJhbWVzIikmJi0xIT09WyJmcm9tIiwidG8iXS5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbWF5YmVUb0xvd2VyQ2FzZSQxKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkIil8fGUuaW5jbHVkZXMoIkAiKXx8ZS5pbmNsdWRlcygiIyIpfHxlLnN0YXJ0c1dpdGgoIiUiKXx8ZS5zdGFydHNXaXRoKCItLSIpfHxlLnN0YXJ0c1dpdGgoIjotLSIpfHxlLmluY2x1ZGVzKCIoIikmJmUuaW5jbHVkZXMoIikiKT9lOmUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBpbnNpZGVWYWx1ZUZ1bmN0aW9uTm9kZSQxKGUsdCl7dmFyIG49Z2V0QW5jZXN0b3JOb2RlJDEoZSwidmFsdWUtZnVuYyIpO3JldHVybiBuJiZuLnZhbHVlJiZuLnZhbHVlLnRvTG93ZXJDYXNlKCk9PT10fWZ1bmN0aW9uIGluc2lkZUlDU1NSdWxlTm9kZSQxKGUpe3ZhciB0PWdldEFuY2VzdG9yTm9kZSQxKGUsImNzcy1ydWxlIik7cmV0dXJuIHQmJnQucmF3cyYmdC5yYXdzLnNlbGVjdG9yJiYodC5yYXdzLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIjppbXBvcnQiKXx8dC5yYXdzLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIjpleHBvcnQiKSl9ZnVuY3Rpb24gaW5zaWRlQXRSdWxlTm9kZSQxKGUsdCl7dmFyIG49W10uY29uY2F0KHQpLHI9Z2V0QW5jZXN0b3JOb2RlJDEoZSwiY3NzLWF0cnVsZSIpO3JldHVybiByJiYtMSE9PW4uaW5kZXhPZihyLm5hbWUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gaW5zaWRlVVJMRnVuY3Rpb25JbkltcG9ydEF0UnVsZU5vZGUkMShlKXt2YXIgdD1lLmdldFZhbHVlKCksbj1nZXRBbmNlc3Rvck5vZGUkMShlLCJjc3MtYXRydWxlIik7cmV0dXJuIG4mJiJpbXBvcnQiPT09bi5uYW1lJiYidXJsIj09PXQuZ3JvdXBzWzBdLnZhbHVlJiYyPT09dC5ncm91cHMubGVuZ3RofWZ1bmN0aW9uIGlzVVJMRnVuY3Rpb25Ob2RlJDEoZSl7cmV0dXJuInZhbHVlLWZ1bmMiPT09ZS50eXBlJiYidXJsIj09PWUudmFsdWUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBpc0xhc3ROb2RlJDEoZSx0KXt2YXIgbj1lLmdldFBhcmVudE5vZGUoKTtpZighbilyZXR1cm4hMTt2YXIgcj1uLm5vZGVzO3JldHVybiByJiZyLmluZGV4T2YodCk9PT1yLmxlbmd0aC0xfWZ1bmN0aW9uIGlzSFRNTFRhZyQxKGUpe3JldHVybi0xIT09aHRtbFRhZ05hbWVzJDEuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGlzRGV0YWNoZWRSdWxlc2V0RGVjbGFyYXRpb25Ob2RlJDEoZSl7cmV0dXJuISFlLnNlbGVjdG9yJiYoInN0cmluZyI9PT10eXBlb2YgZS5zZWxlY3RvciYmL15ALis6LiokLy50ZXN0KGUuc2VsZWN0b3IpfHxlLnNlbGVjdG9yLnZhbHVlJiYvXkAuKzouKiQvLnRlc3QoZS5zZWxlY3Rvci52YWx1ZSkpfWZ1bmN0aW9uIGlzRm9yS2V5d29yZE5vZGUkMShlKXtyZXR1cm4idmFsdWUtd29yZCI9PT1lLnR5cGUmJi0xIT09WyJmcm9tIiwidGhyb3VnaCIsImVuZCJdLmluZGV4T2YoZS52YWx1ZSl9ZnVuY3Rpb24gaXNJZkVsc2VLZXl3b3JkTm9kZSQxKGUpe3JldHVybiJ2YWx1ZS13b3JkIj09PWUudHlwZSYmLTEhPT1bImFuZCIsIm9yIiwibm90Il0uaW5kZXhPZihlLnZhbHVlKX1mdW5jdGlvbiBpc0VhY2hLZXl3b3JkTm9kZSQxKGUpe3JldHVybiJ2YWx1ZS13b3JkIj09PWUudHlwZSYmImluIj09PWUudmFsdWV9ZnVuY3Rpb24gaXNNdWx0aXBsaWNhdGlvbk5vZGUkMShlKXtyZXR1cm4idmFsdWUtb3BlcmF0b3IiPT09ZS50eXBlJiYiKiI9PT1lLnZhbHVlfWZ1bmN0aW9uIGlzRGl2aXNpb25Ob2RlJDEoZSl7cmV0dXJuInZhbHVlLW9wZXJhdG9yIj09PWUudHlwZSYmIi8iPT09ZS52YWx1ZX1mdW5jdGlvbiBpc0FkZGl0aW9uTm9kZSQxKGUpe3JldHVybiJ2YWx1ZS1vcGVyYXRvciI9PT1lLnR5cGUmJiIrIj09PWUudmFsdWV9ZnVuY3Rpb24gaXNTdWJ0cmFjdGlvbk5vZGUkMShlKXtyZXR1cm4idmFsdWUtb3BlcmF0b3IiPT09ZS50eXBlJiYiLSI9PT1lLnZhbHVlfWZ1bmN0aW9uIGlzTW9kdWxvTm9kZShlKXtyZXR1cm4idmFsdWUtb3BlcmF0b3IiPT09ZS50eXBlJiYiJSI9PT1lLnZhbHVlfWZ1bmN0aW9uIGlzTWF0aE9wZXJhdG9yTm9kZSQxKGUpe3JldHVybiBpc011bHRpcGxpY2F0aW9uTm9kZSQxKGUpfHxpc0RpdmlzaW9uTm9kZSQxKGUpfHxpc0FkZGl0aW9uTm9kZSQxKGUpfHxpc1N1YnRyYWN0aW9uTm9kZSQxKGUpfHxpc01vZHVsb05vZGUoZSl9ZnVuY3Rpb24gaXNFcXVhbGl0eU9wZXJhdG9yTm9kZSQxKGUpe3JldHVybiJ2YWx1ZS13b3JkIj09PWUudHlwZSYmLTEhPT1bIj09IiwiIT0iXS5pbmRleE9mKGUudmFsdWUpfWZ1bmN0aW9uIGlzUmVsYXRpb25hbE9wZXJhdG9yTm9kZSQxKGUpe3JldHVybiJ2YWx1ZS13b3JkIj09PWUudHlwZSYmLTEhPT1bIjwiLCI+IiwiPD0iLCI+PSJdLmluZGV4T2YoZS52YWx1ZSl9ZnVuY3Rpb24gaXNTQ1NTQ29udHJvbERpcmVjdGl2ZU5vZGUkMShlKXtyZXR1cm4iY3NzLWF0cnVsZSI9PT1lLnR5cGUmJi0xIT09WyJpZiIsImVsc2UiLCJmb3IiLCJlYWNoIiwid2hpbGUiXS5pbmRleE9mKGUubmFtZSl9ZnVuY3Rpb24gaXNTQ1NTTmVzdGVkUHJvcGVydHlOb2RlKGUpe3JldHVybiEhZS5zZWxlY3RvciYmZS5zZWxlY3Rvci5yZXBsYWNlKC9cL1wqLio/XCpcLy8sIiIpLnJlcGxhY2UoL1wvXC8uKj9cbi8sIiIpLnRyaW0oKS5lbmRzV2l0aCgiOiIpfWZ1bmN0aW9uIGlzRGV0YWNoZWRSdWxlc2V0Q2FsbE5vZGUkMShlKXtyZXR1cm4gZS5yYXdzJiZlLnJhd3MucGFyYW1zJiYvXlwoXHMqXCkkLy50ZXN0KGUucmF3cy5wYXJhbXMpfWZ1bmN0aW9uIGlzUG9zdGNzc1NpbXBsZVZhck5vZGUkMShlLHQpe3JldHVybiIkJCI9PT1lLnZhbHVlJiYidmFsdWUtZnVuYyI9PT1lLnR5cGUmJnQmJiJ2YWx1ZS13b3JkIj09PXQudHlwZSYmIXQucmF3cy5iZWZvcmV9ZnVuY3Rpb24gaGFzQ29tcG9zZXNOb2RlJDEoZSl7cmV0dXJuIGUudmFsdWUmJiJ2YWx1ZS1yb290Ij09PWUudmFsdWUudHlwZSYmZS52YWx1ZS5ncm91cCYmInZhbHVlLXZhbHVlIj09PWUudmFsdWUuZ3JvdXAudHlwZSYmImNvbXBvc2VzIj09PWUucHJvcC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGhhc1BhcmVuc0Fyb3VuZE5vZGUkMShlKXtyZXR1cm4gZS52YWx1ZSYmZS52YWx1ZS5ncm91cCYmZS52YWx1ZS5ncm91cC5ncm91cCYmInZhbHVlLXBhcmVuX2dyb3VwIj09PWUudmFsdWUuZ3JvdXAuZ3JvdXAudHlwZSYmbnVsbCE9PWUudmFsdWUuZ3JvdXAuZ3JvdXAub3BlbiYmbnVsbCE9PWUudmFsdWUuZ3JvdXAuZ3JvdXAuY2xvc2V9ZnVuY3Rpb24gaGFzRW1wdHlSYXdCZWZvcmUkMShlKXtyZXR1cm4gZS5yYXdzJiYiIj09PWUucmF3cy5iZWZvcmV9ZnVuY3Rpb24gaXNLZXlWYWx1ZVBhaXJOb2RlJDEoZSl7cmV0dXJuInZhbHVlLWNvbW1hX2dyb3VwIj09PWUudHlwZSYmZS5ncm91cHMmJmUuZ3JvdXBzWzFdJiYidmFsdWUtY29sb24iPT09ZS5ncm91cHNbMV0udHlwZX1mdW5jdGlvbiBpc0tleVZhbHVlUGFpckluUGFyZW5Hcm91cE5vZGUoZSl7cmV0dXJuInZhbHVlLXBhcmVuX2dyb3VwIj09PWUudHlwZSYmZS5ncm91cHMmJmUuZ3JvdXBzWzBdJiZpc0tleVZhbHVlUGFpck5vZGUkMShlLmdyb3Vwc1swXSl9ZnVuY3Rpb24gaXNTQ1NTTWFwSXRlbU5vZGUkMShlKXt2YXIgdD1lLmdldFZhbHVlKCk7aWYoMD09PXQuZ3JvdXBzLmxlbmd0aClyZXR1cm4hMTt2YXIgbj1lLmdldFBhcmVudE5vZGUoMSk7aWYoIWlzS2V5VmFsdWVQYWlySW5QYXJlbkdyb3VwTm9kZSh0KSYmKCFufHwhaXNLZXlWYWx1ZVBhaXJJblBhcmVuR3JvdXBOb2RlKG4pKSlyZXR1cm4hMTt2YXIgcj1nZXRBbmNlc3Rvck5vZGUkMShlLCJjc3MtZGVjbCIpO3JldHVybiEhKHImJnIucHJvcCYmci5wcm9wLnN0YXJ0c1dpdGgoIiQiKSl8fCghIWlzS2V5VmFsdWVQYWlySW5QYXJlbkdyb3VwTm9kZShuKXx8InZhbHVlLWZ1bmMiPT09bi50eXBlKX1mdW5jdGlvbiBpc0lubGluZVZhbHVlQ29tbWVudE5vZGUkMShlKXtyZXR1cm4idmFsdWUtY29tbWVudCI9PT1lLnR5cGUmJmUuaW5saW5lfWZ1bmN0aW9uIGlzSGFzaE5vZGUkMShlKXtyZXR1cm4idmFsdWUtd29yZCI9PT1lLnR5cGUmJiIjIj09PWUudmFsdWV9ZnVuY3Rpb24gaXNMZWZ0Q3VybHlCcmFjZU5vZGUkMShlKXtyZXR1cm4idmFsdWUtd29yZCI9PT1lLnR5cGUmJiJ7Ij09PWUudmFsdWV9ZnVuY3Rpb24gaXNSaWdodEN1cmx5QnJhY2VOb2RlJDEoZSl7cmV0dXJuInZhbHVlLXdvcmQiPT09ZS50eXBlJiYifSI9PT1lLnZhbHVlfWZ1bmN0aW9uIGlzV29yZE5vZGUkMShlKXtyZXR1cm4tMSE9PVsidmFsdWUtd29yZCIsInZhbHVlLWF0d29yZCJdLmluZGV4T2YoZS50eXBlKX1mdW5jdGlvbiBpc0NvbG9uTm9kZSQxKGUpe3JldHVybiJ2YWx1ZS1jb2xvbiI9PT1lLnR5cGV9ZnVuY3Rpb24gaXNNZWRpYUFuZFN1cHBvcnRzS2V5d29yZHMkMShlKXtyZXR1cm4gZS52YWx1ZSYmLTEhPT1bIm5vdCIsImFuZCIsIm9yIl0uaW5kZXhPZihlLnZhbHVlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHNob3VsZFByaW50Q29tbWEkMShlKXtzd2l0Y2goZS50cmFpbGluZ0NvbW1hKXtjYXNlImFsbCI6Y2FzZSJlczUiOnJldHVybiEwO2Nhc2Uibm9uZSI6ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gZ2VuZXJpY1ByaW50JDMoZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKTtpZighcilyZXR1cm4iIjtpZigic3RyaW5nIj09PXR5cGVvZiByKXJldHVybiByO3N3aXRjaChyLnR5cGUpe2Nhc2UiZnJvbnQtbWF0dGVyIjpyZXR1cm4gY29uY2F0JDcoW3IudmFsdWUsaGFyZGxpbmUkNl0pO2Nhc2UiY3NzLXJvb3QiOnZhciBpPXByaW50Tm9kZVNlcXVlbmNlKGUsdCxuKTtyZXR1cm4gaS5wYXJ0cy5sZW5ndGg/Y29uY2F0JDcoW2ksaGFyZGxpbmUkNl0pOmk7Y2FzZSJjc3MtY29tbWVudCI6aWYoci5yYXdzLmNvbnRlbnQpcmV0dXJuIHIucmF3cy5jb250ZW50O3ZhciBvPXQub3JpZ2luYWxUZXh0LnNsaWNlKHQubG9jU3RhcnQociksdC5sb2NFbmQocikpLGE9ci5yYXdzLnRleHR8fHIudGV4dDtyZXR1cm4tMT09PW8uaW5kZXhPZihhKT9jb25jYXQkNyhyLnJhd3MuaW5saW5lP1siLy8gIixhXTpbIi8qICIsYSwiICovIl0pOm87Y2FzZSJjc3MtcnVsZSI6cmV0dXJuIGNvbmNhdCQ3KFtlLmNhbGwobiwic2VsZWN0b3IiKSxyLmltcG9ydGFudD8iICFpbXBvcnRhbnQiOiIiLHIubm9kZXM/Y29uY2F0JDcoWyIgeyIsci5ub2Rlcy5sZW5ndGg+MD9pbmRlbnQkNShjb25jYXQkNyhbaGFyZGxpbmUkNixwcmludE5vZGVTZXF1ZW5jZShlLHQsbildKSk6IiIsaGFyZGxpbmUkNiwifSIsaXNEZXRhY2hlZFJ1bGVzZXREZWNsYXJhdGlvbk5vZGUocik/IjsiOiIiXSk6IjsiXSk7Y2FzZSJjc3MtZGVjbCI6cmV0dXJuIGNvbmNhdCQ3KFtyLnJhd3MuYmVmb3JlLnJlcGxhY2UoL1tccztdL2csIiIpLGluc2lkZUlDU1NSdWxlTm9kZShlKT9yLnByb3A6bWF5YmVUb0xvd2VyQ2FzZShyLnByb3ApLCI6Ij09PXIucmF3cy5iZXR3ZWVuLnRyaW0oKT8iOiI6ci5yYXdzLmJldHdlZW4udHJpbSgpLHIuZXh0ZW5kPyIiOiIgIixoYXNDb21wb3Nlc05vZGUocik/cmVtb3ZlTGluZXMkMihlLmNhbGwobiwidmFsdWUiKSk6ZS5jYWxsKG4sInZhbHVlIiksci5yYXdzLmltcG9ydGFudD9yLnJhd3MuaW1wb3J0YW50LnJlcGxhY2UoL1xzKiFccyppbXBvcnRhbnQvaSwiICFpbXBvcnRhbnQiKTpyLmltcG9ydGFudD8iICFpbXBvcnRhbnQiOiIiLHIucmF3cy5zY3NzRGVmYXVsdD9yLnJhd3Muc2Nzc0RlZmF1bHQucmVwbGFjZSgvXHMqIWRlZmF1bHQvaSwiICFkZWZhdWx0Iik6ci5zY3NzRGVmYXVsdD8iICFkZWZhdWx0IjoiIixyLnJhd3Muc2Nzc0dsb2JhbD9yLnJhd3Muc2Nzc0dsb2JhbC5yZXBsYWNlKC9ccyohZ2xvYmFsL2ksIiAhZ2xvYmFsIik6ci5zY3NzR2xvYmFsPyIgIWdsb2JhbCI6IiIsci5ub2Rlcz9jb25jYXQkNyhbIiB7IixpbmRlbnQkNShjb25jYXQkNyhbc29mdGxpbmUkMyxwcmludE5vZGVTZXF1ZW5jZShlLHQsbildKSksc29mdGxpbmUkMywifSJdKToiOyJdKTtjYXNlImNzcy1hdHJ1bGUiOnJldHVybiBjb25jYXQkNyhbIkAiLGlzRGV0YWNoZWRSdWxlc2V0Q2FsbE5vZGUocil8fHIubmFtZS5lbmRzV2l0aCgiOiIpP3IubmFtZTptYXliZVRvTG93ZXJDYXNlKHIubmFtZSksci5wYXJhbXM/Y29uY2F0JDcoW2lzRGV0YWNoZWRSdWxlc2V0Q2FsbE5vZGUocik/IiI6IiAiLGUuY2FsbChuLCJwYXJhbXMiKV0pOiIiLHIuc2VsZWN0b3I/aW5kZW50JDUoY29uY2F0JDcoWyIgIixlLmNhbGwobiwic2VsZWN0b3IiKV0pKToiIixyLnZhbHVlP2dyb3VwJDIoY29uY2F0JDcoWyIgIixlLmNhbGwobiwidmFsdWUiKSxpc1NDU1NDb250cm9sRGlyZWN0aXZlTm9kZShyKT9oYXNQYXJlbnNBcm91bmROb2RlKHIpPyIgIjpsaW5lJDQ6IiJdKSk6ImVsc2UiPT09ci5uYW1lPyIgIjoiIixyLm5vZGVzP2NvbmNhdCQ3KFtpc1NDU1NDb250cm9sRGlyZWN0aXZlTm9kZShyKT8iIjoiICIsInsiLGluZGVudCQ1KGNvbmNhdCQ3KFtyLm5vZGVzLmxlbmd0aD4wP3NvZnRsaW5lJDM6IiIscHJpbnROb2RlU2VxdWVuY2UoZSx0LG4pXSkpLHNvZnRsaW5lJDMsIn0iXSk6IjsiXSk7Y2FzZSJtZWRpYS1xdWVyeS1saXN0Ijp2YXIgcz1bXTtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VmFsdWUoKTsibWVkaWEtcXVlcnkiPT09dC50eXBlJiYiIj09PXQudmFsdWV8fHMucHVzaChlLmNhbGwobikpfSwibm9kZXMiKSxncm91cCQyKGluZGVudCQ1KGpvaW4kNShsaW5lJDQscykpKTtjYXNlIm1lZGlhLXF1ZXJ5IjpyZXR1cm4gY29uY2F0JDcoW2pvaW4kNSgiICIsZS5tYXAobiwibm9kZXMiKSksaXNMYXN0Tm9kZShlLHIpPyIiOiIsIl0pO2Nhc2UibWVkaWEtdHlwZSI6cmV0dXJuIGFkanVzdE51bWJlcnMoYWRqdXN0U3RyaW5ncyhyLnZhbHVlLHQpKTtjYXNlIm1lZGlhLWZlYXR1cmUtZXhwcmVzc2lvbiI6cmV0dXJuIHIubm9kZXM/Y29uY2F0JDcoWyIoIixjb25jYXQkNyhlLm1hcChuLCJub2RlcyIpKSwiKSJdKTpyLnZhbHVlO2Nhc2UibWVkaWEtZmVhdHVyZSI6cmV0dXJuIG1heWJlVG9Mb3dlckNhc2UoYWRqdXN0U3RyaW5ncyhyLnZhbHVlLnJlcGxhY2UoLyArL2csIiAiKSx0KSk7Y2FzZSJtZWRpYS1jb2xvbiI6cmV0dXJuIGNvbmNhdCQ3KFtyLnZhbHVlLCIgIl0pO2Nhc2UibWVkaWEtdmFsdWUiOnJldHVybiBhZGp1c3ROdW1iZXJzKGFkanVzdFN0cmluZ3Moci52YWx1ZSx0KSk7Y2FzZSJtZWRpYS1rZXl3b3JkIjpyZXR1cm4gYWRqdXN0U3RyaW5ncyhyLnZhbHVlLHQpO2Nhc2UibWVkaWEtdXJsIjpyZXR1cm4gYWRqdXN0U3RyaW5ncyhyLnZhbHVlLnJlcGxhY2UoL151cmxcKFxzKy9naSwidXJsKCIpLnJlcGxhY2UoL1xzK1wpJC9naSwiKSIpLHQpO2Nhc2UibWVkaWEtdW5rbm93biI6cmV0dXJuIHIudmFsdWU7Y2FzZSJzZWxlY3Rvci1yb290IjpyZXR1cm4gZ3JvdXAkMihjb25jYXQkNyhbaW5zaWRlQXRSdWxlTm9kZShlLCJjdXN0b20tc2VsZWN0b3IiKT9jb25jYXQkNyhbZ2V0QW5jZXN0b3JOb2RlKGUsImNzcy1hdHJ1bGUiKS5jdXN0b21TZWxlY3RvcixsaW5lJDRdKToiIixqb2luJDUoY29uY2F0JDcoWyIsIixpbnNpZGVBdFJ1bGVOb2RlKGUsWyJleHRlbmQiLCJjdXN0b20tc2VsZWN0b3IiLCJuZXN0Il0pP2xpbmUkNDpoYXJkbGluZSQ2XSksZS5tYXAobiwibm9kZXMiKSldKSk7Y2FzZSJzZWxlY3Rvci1zZWxlY3RvciI6cmV0dXJuIGdyb3VwJDIoaW5kZW50JDUoY29uY2F0JDcoZS5tYXAobiwibm9kZXMiKSkpKTtjYXNlInNlbGVjdG9yLWNvbW1lbnQiOnJldHVybiByLnZhbHVlO2Nhc2Uic2VsZWN0b3Itc3RyaW5nIjpyZXR1cm4gYWRqdXN0U3RyaW5ncyhyLnZhbHVlLHQpO2Nhc2Uic2VsZWN0b3ItdGFnIjp2YXIgdT1lLmdldFBhcmVudE5vZGUoKSxjPXUmJnUubm9kZXMuaW5kZXhPZihyKSxsPWMmJnUubm9kZXNbYy0xXTtyZXR1cm4gY29uY2F0JDcoW3IubmFtZXNwYWNlP2NvbmNhdCQ3KFshMD09PXIubmFtZXNwYWNlPyIiOnIubmFtZXNwYWNlLnRyaW0oKSwifCJdKToiIiwic2VsZWN0b3ItbmVzdGluZyI9PT1sLnR5cGU/ci52YWx1ZTphZGp1c3ROdW1iZXJzKGlzSFRNTFRhZyhyLnZhbHVlKXx8aXNLZXlmcmFtZUF0UnVsZUtleXdvcmRzKGUsci52YWx1ZSk/ci52YWx1ZS50b0xvd2VyQ2FzZSgpOnIudmFsdWUpXSk7Y2FzZSJzZWxlY3Rvci1pZCI6cmV0dXJuIGNvbmNhdCQ3KFsiIyIsci52YWx1ZV0pO2Nhc2Uic2VsZWN0b3ItY2xhc3MiOnJldHVybiBjb25jYXQkNyhbIi4iLGFkanVzdE51bWJlcnMoYWRqdXN0U3RyaW5ncyhyLnZhbHVlLHQpKV0pO2Nhc2Uic2VsZWN0b3ItYXR0cmlidXRlIjpyZXR1cm4gY29uY2F0JDcoWyJbIixyLm5hbWVzcGFjZT9jb25jYXQkNyhbITA9PT1yLm5hbWVzcGFjZT8iIjpyLm5hbWVzcGFjZS50cmltKCksInwiXSk6IiIsci5hdHRyaWJ1dGUudHJpbSgpLHIub3BlcmF0b3I/ci5vcGVyYXRvcjoiIixyLnZhbHVlP3F1b3RlQXR0cmlidXRlVmFsdWUoYWRqdXN0U3RyaW5ncyhyLnZhbHVlLnRyaW0oKSx0KSx0KToiIixyLmluc2Vuc2l0aXZlPyIgaSI6IiIsIl0iXSk7Y2FzZSJzZWxlY3Rvci1jb21iaW5hdG9yIjppZigiKyI9PT1yLnZhbHVlfHwiPiI9PT1yLnZhbHVlfHwifiI9PT1yLnZhbHVlfHwiPj4+Ij09PXIudmFsdWUpe3ZhciBwPWUuZ2V0UGFyZW50Tm9kZSgpLGY9InNlbGVjdG9yLXNlbGVjdG9yIj09PXAudHlwZSYmcC5ub2Rlc1swXT09PXI/IiI6bGluZSQ0O3JldHVybiBjb25jYXQkNyhbZixyLnZhbHVlLGlzTGFzdE5vZGUoZSxyKT8iIjoiICJdKX12YXIgZD1yLnZhbHVlLnRyaW0oKS5zdGFydHNXaXRoKCIoIik/bGluZSQ0OiIiLGg9YWRqdXN0TnVtYmVycyhhZGp1c3RTdHJpbmdzKHIudmFsdWUudHJpbSgpLHQpKXx8bGluZSQ0O3JldHVybiBjb25jYXQkNyhbZCxoXSk7Y2FzZSJzZWxlY3Rvci11bml2ZXJzYWwiOnJldHVybiBjb25jYXQkNyhbci5uYW1lc3BhY2U/Y29uY2F0JDcoWyEwPT09ci5uYW1lc3BhY2U/IiI6ci5uYW1lc3BhY2UudHJpbSgpLCJ8Il0pOiIiLGFkanVzdE51bWJlcnMoci52YWx1ZSldKTtjYXNlInNlbGVjdG9yLXBzZXVkbyI6cmV0dXJuIGNvbmNhdCQ3KFttYXliZVRvTG93ZXJDYXNlKHIudmFsdWUpLHIubm9kZXMmJnIubm9kZXMubGVuZ3RoPjA/Y29uY2F0JDcoWyIoIixqb2luJDUoIiwgIixlLm1hcChuLCJub2RlcyIpKSwiKSJdKToiIl0pO2Nhc2Uic2VsZWN0b3ItbmVzdGluZyI6cmV0dXJuIHIudmFsdWU7Y2FzZSJzZWxlY3Rvci11bmtub3duIjp2YXIgbT1nZXRBbmNlc3Rvck5vZGUoZSwiY3NzLXJ1bGUiKTtyZXR1cm4gbSYmbS5pc1NDU1NOZXN0ZXJQcm9wZXJ0eT9hZGp1c3ROdW1iZXJzKGFkanVzdFN0cmluZ3MobWF5YmVUb0xvd2VyQ2FzZShyLnZhbHVlKSx0KSk6ci52YWx1ZTtjYXNlInZhbHVlLXZhbHVlIjpjYXNlInZhbHVlLXJvb3QiOnJldHVybiBlLmNhbGwobiwiZ3JvdXAiKTtjYXNlInZhbHVlLWNvbW1lbnQiOnJldHVybiBjb25jYXQkNyhbci5pbmxpbmU/Ii8vIjoiLyoiLHIudmFsdWUsci5pbmxpbmU/IiI6IiovIl0pO2Nhc2UidmFsdWUtY29tbWFfZ3JvdXAiOmZvcih2YXIgZz1lLmdldFBhcmVudE5vZGUoKSx5PWdldFByb3BPZkRlY2xOb2RlKGUpLHY9eSYmInZhbHVlLXZhbHVlIj09PWcudHlwZSYmKCJncmlkIj09PXl8fHkuc3RhcnRzV2l0aCgiZ3JpZC10ZW1wbGF0ZSIpKSxiPWdldEFuY2VzdG9yTm9kZShlLCJjc3MtYXRydWxlIikseD1iJiZpc1NDU1NDb250cm9sRGlyZWN0aXZlTm9kZShiKSxDPWUubWFwKG4sImdyb3VwcyIpLEU9W10sRD1pbnNpZGVWYWx1ZUZ1bmN0aW9uTm9kZShlLCJ1cmwiKSx3PSExLFM9ITEsaz0wO2s8ci5ncm91cHMubGVuZ3RoOysraylpZihFLnB1c2goQ1trXSksIUQpe3ZhciBBPXIuZ3JvdXBzW2stMV0sXz1yLmdyb3Vwc1trXSxUPXIuZ3JvdXBzW2srMV0sTz1yLmdyb3Vwc1trKzJdO2lmKFQpe3ZhciBGPSJ2YWx1ZS1zdHJpbmciPT09Xy50eXBlJiZfLnZhbHVlLnN0YXJ0c1dpdGgoIiN7IiksTj13JiYidmFsdWUtc3RyaW5nIj09PVQudHlwZSYmVC52YWx1ZS5lbmRzV2l0aCgifSIpO2lmKEZ8fE4pdz0hdztlbHNlIGlmKCF3JiYhaXNDb2xvbk5vZGUoXykmJiFpc0NvbG9uTm9kZShUKSYmKCJ2YWx1ZS1hdHdvcmQiIT09Xy50eXBlfHwiIiE9PV8udmFsdWUpJiYifiIhPT1fLnZhbHVlJiYiXFwiIT09Xy52YWx1ZSYmIWlzUG9zdGNzc1NpbXBsZVZhck5vZGUoXyxUKSYmIShpc0hhc2hOb2RlKF8pfHxpc0xlZnRDdXJseUJyYWNlTm9kZShfKXx8aXNSaWdodEN1cmx5QnJhY2VOb2RlKFQpfHxpc0xlZnRDdXJseUJyYWNlTm9kZShUKSYmaGFzRW1wdHlSYXdCZWZvcmUoVCl8fGlzUmlnaHRDdXJseUJyYWNlTm9kZShfKSYmaGFzRW1wdHlSYXdCZWZvcmUoVCkpJiYoIi0tIiE9PV8udmFsdWV8fCFpc0hhc2hOb2RlKFQpKSl7dmFyIEk9aXNNYXRoT3BlcmF0b3JOb2RlKF8pLEw9aXNNYXRoT3BlcmF0b3JOb2RlKFQpO2lmKCghKEkmJmlzSGFzaE5vZGUoVCl8fEwmJmlzUmlnaHRDdXJseUJyYWNlTm9kZShfKSl8fCFoYXNFbXB0eVJhd0JlZm9yZShUKSkmJiEoaW5zaWRlVmFsdWVGdW5jdGlvbk5vZGUoZSwiY2FsYyIpJiYoaXNBZGRpdGlvbk5vZGUoXyl8fGlzQWRkaXRpb25Ob2RlKFQpfHxpc1N1YnRyYWN0aW9uTm9kZShfKXx8aXNTdWJ0cmFjdGlvbk5vZGUoVCkpJiZoYXNFbXB0eVJhd0JlZm9yZShUKSkpe3ZhciBQPU8mJiJ2YWx1ZS1mdW5jIj09PU8udHlwZXx8TyYmaXNXb3JkTm9kZShPKXx8InZhbHVlLWZ1bmMiPT09Xy50eXBlfHxpc1dvcmROb2RlKF8pLE09InZhbHVlLWZ1bmMiPT09VC50eXBlfHxpc1dvcmROb2RlKFQpfHxBJiYidmFsdWUtZnVuYyI9PT1BLnR5cGV8fEEmJmlzV29yZE5vZGUoQSk7aWYoaXNNdWx0aXBsaWNhdGlvbk5vZGUoVCl8fGlzTXVsdGlwbGljYXRpb25Ob2RlKF8pfHxpbnNpZGVWYWx1ZUZ1bmN0aW9uTm9kZShlLCJjYWxjIil8fCEoaXNEaXZpc2lvbk5vZGUoVCkmJiFQfHxpc0RpdmlzaW9uTm9kZShfKSYmIU18fGlzQWRkaXRpb25Ob2RlKFQpJiYhUHx8aXNBZGRpdGlvbk5vZGUoXykmJiFNfHxpc1N1YnRyYWN0aW9uTm9kZShUKXx8aXNTdWJ0cmFjdGlvbk5vZGUoXykpfHwhKGhhc0VtcHR5UmF3QmVmb3JlKFQpfHxJJiYoIUF8fEEmJmlzTWF0aE9wZXJhdG9yTm9kZShBKSkpKXt2YXIgaj1pc0lubGluZVZhbHVlQ29tbWVudE5vZGUoXyk7QSYmaXNJbmxpbmVWYWx1ZUNvbW1lbnROb2RlKEEpfHxqfHxpc0lubGluZVZhbHVlQ29tbWVudE5vZGUoVCk/aiYmRS5wdXNoKGhhcmRsaW5lJDYpOngmJihpc0VxdWFsaXR5T3BlcmF0b3JOb2RlKFQpfHxpc1JlbGF0aW9uYWxPcGVyYXRvck5vZGUoVCl8fGlzSWZFbHNlS2V5d29yZE5vZGUoVCl8fGlzRWFjaEtleXdvcmROb2RlKF8pfHxpc0ZvcktleXdvcmROb2RlKF8pKT9FLnB1c2goIiAiKTpiJiYibmFtZXNwYWNlIj09PWIubmFtZS50b0xvd2VyQ2FzZSgpP0UucHVzaCgiICIpOnY/Xy5zb3VyY2Uuc3RhcnQubGluZSE9PVQuc291cmNlLnN0YXJ0LmxpbmU/KEUucHVzaChoYXJkbGluZSQ2KSxTPSEwKTpFLnB1c2goIiAiKTpMP0UucHVzaCgiICIpOkUucHVzaChsaW5lJDQpfX19fX1yZXR1cm4gUyYmRS51bnNoaWZ0KGhhcmRsaW5lJDYpLGdyb3VwJDIoeD9pbmRlbnQkNShjb25jYXQkNyhFKSk6aW5zaWRlVVJMRnVuY3Rpb25JbkltcG9ydEF0UnVsZU5vZGUoZSk/ZmlsbCQzKEUpOmluZGVudCQ1KGZpbGwkMyhFKSkpO2Nhc2UidmFsdWUtcGFyZW5fZ3JvdXAiOnZhciBSPWUuZ2V0UGFyZW50Tm9kZSgpO2lmKFImJmlzVVJMRnVuY3Rpb25Ob2RlKFIpJiYoMT09PXIuZ3JvdXBzLmxlbmd0aHx8ci5ncm91cHMubGVuZ3RoPjAmJiJ2YWx1ZS1jb21tYV9ncm91cCI9PT1yLmdyb3Vwc1swXS50eXBlJiZyLmdyb3Vwc1swXS5ncm91cHMubGVuZ3RoPjAmJiJ2YWx1ZS13b3JkIj09PXIuZ3JvdXBzWzBdLmdyb3Vwc1swXS50eXBlJiZyLmdyb3Vwc1swXS5ncm91cHNbMF0udmFsdWUuc3RhcnRzV2l0aCgiZGF0YToiKSkpcmV0dXJuIGNvbmNhdCQ3KFtyLm9wZW4/ZS5jYWxsKG4sIm9wZW4iKToiIixqb2luJDUoIiwiLGUubWFwKG4sImdyb3VwcyIpKSxyLmNsb3NlP2UuY2FsbChuLCJjbG9zZSIpOiIiXSk7aWYoIXIub3Blbil7Zm9yKHZhciBCPWUubWFwKG4sImdyb3VwcyIpLCQ9W10sVT0wO1U8Qi5sZW5ndGg7VSsrKTAhPT1VJiYkLnB1c2goY29uY2F0JDcoWyIsIixsaW5lJDRdKSksJC5wdXNoKEJbVV0pO3JldHVybiBncm91cCQyKGluZGVudCQ1KGZpbGwkMygkKSkpfXZhciB6PWlzU0NTU01hcEl0ZW1Ob2RlKGUpO3JldHVybiBncm91cCQyKGNvbmNhdCQ3KFtyLm9wZW4/ZS5jYWxsKG4sIm9wZW4iKToiIixpbmRlbnQkNShjb25jYXQkNyhbc29mdGxpbmUkMyxqb2luJDUoY29uY2F0JDcoWyIsIixsaW5lJDRdKSxlLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLmdldFZhbHVlKCkscj1uKGUpO3JldHVybiBpc0tleVZhbHVlUGFpck5vZGUodCkmJiJ2YWx1ZS1jb21tYV9ncm91cCI9PT10LnR5cGUmJnQuZ3JvdXBzJiZ0Lmdyb3Vwc1syXSYmInZhbHVlLXBhcmVuX2dyb3VwIj09PXQuZ3JvdXBzWzJdLnR5cGU/KHIuY29udGVudHMuY29udGVudHMucGFydHNbMV09Z3JvdXAkMihyLmNvbnRlbnRzLmNvbnRlbnRzLnBhcnRzWzFdKSxncm91cCQyKGRlZGVudCQzKHIpKSk6cn0sImdyb3VwcyIpKV0pKSxpZkJyZWFrJDIoaXNTQ1NTKHQucGFyc2VyLHQub3JpZ2luYWxUZXh0KSYmeiYmc2hvdWxkUHJpbnRDb21tYSQxKHQpPyIsIjoiIiksc29mdGxpbmUkMyxyLmNsb3NlP2UuY2FsbChuLCJjbG9zZSIpOiIiXSkse3Nob3VsZEJyZWFrOnp9KTtjYXNlInZhbHVlLWZ1bmMiOnJldHVybiBjb25jYXQkNyhbci52YWx1ZSxpbnNpZGVBdFJ1bGVOb2RlKGUsInN1cHBvcnRzIikmJmlzTWVkaWFBbmRTdXBwb3J0c0tleXdvcmRzKHIpPyIgIjoiIixlLmNhbGwobiwiZ3JvdXAiKV0pO2Nhc2UidmFsdWUtcGFyZW4iOnJldHVybiByLnZhbHVlO2Nhc2UidmFsdWUtbnVtYmVyIjpyZXR1cm4gY29uY2F0JDcoW3ByaW50Q3NzTnVtYmVyKHIudmFsdWUpLG1heWJlVG9Mb3dlckNhc2Uoci51bml0KV0pO2Nhc2UidmFsdWUtb3BlcmF0b3IiOnJldHVybiByLnZhbHVlO2Nhc2UidmFsdWUtd29yZCI6cmV0dXJuIHIuaXNDb2xvciYmci5pc0hleHx8aXNXaWRlS2V5d29yZHMoci52YWx1ZSk/ci52YWx1ZS50b0xvd2VyQ2FzZSgpOnIudmFsdWU7Y2FzZSJ2YWx1ZS1jb2xvbiI6cmV0dXJuIGNvbmNhdCQ3KFtyLnZhbHVlLGluc2lkZVZhbHVlRnVuY3Rpb25Ob2RlKGUsInVybCIpPyIiOmxpbmUkNF0pO2Nhc2UidmFsdWUtY29tbWEiOnJldHVybiBjb25jYXQkNyhbci52YWx1ZSwiICJdKTtjYXNlInZhbHVlLXN0cmluZyI6cmV0dXJuIHByaW50U3RyaW5nJDIoci5yYXdzLnF1b3RlK3IudmFsdWUrci5yYXdzLnF1b3RlLHQpO2Nhc2UidmFsdWUtYXR3b3JkIjpyZXR1cm4gY29uY2F0JDcoWyJAIixyLnZhbHVlXSk7Y2FzZSJ2YWx1ZS11bmljb2RlLXJhbmdlIjpjYXNlInZhbHVlLXVua25vd24iOnJldHVybiByLnZhbHVlO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvc3Rjc3MgdHlwZSAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShyLnR5cGUpKSl9fWZ1bmN0aW9uIHByaW50Tm9kZVNlcXVlbmNlKGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCksaT1bXSxvPTA7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3ZhciBhPXIubm9kZXNbby0xXTtpZihhJiYiY3NzLWNvbW1lbnQiPT09YS50eXBlJiYicHJldHRpZXItaWdub3JlIj09PWEudGV4dC50cmltKCkpe3ZhciBzPWUuZ2V0VmFsdWUoKTtpLnB1c2godC5vcmlnaW5hbFRleHQuc2xpY2UodC5sb2NTdGFydChzKSx0LmxvY0VuZChzKSkpfWVsc2UgaS5wdXNoKGUuY2FsbChuKSk7byE9PXIubm9kZXMubGVuZ3RoLTEmJigiY3NzLWNvbW1lbnQiPT09ci5ub2Rlc1tvKzFdLnR5cGUmJiFoYXNOZXdsaW5lJDModC5vcmlnaW5hbFRleHQsdC5sb2NTdGFydChyLm5vZGVzW28rMV0pLHtiYWNrd2FyZHM6ITB9KXx8ImNzcy1hdHJ1bGUiPT09ci5ub2Rlc1tvKzFdLnR5cGUmJiJlbHNlIj09PXIubm9kZXNbbysxXS5uYW1lJiYiY3NzLWNvbW1lbnQiIT09ci5ub2Rlc1tvXS50eXBlP2kucHVzaCgiICIpOihpLnB1c2goaGFyZGxpbmUkNiksaXNOZXh0TGluZUVtcHR5JDModC5vcmlnaW5hbFRleHQsZS5nZXRWYWx1ZSgpLHQpJiZpLnB1c2goaGFyZGxpbmUkNikpKSxvKyt9LCJub2RlcyIpLGNvbmNhdCQ3KGkpfWZ1bmN0aW9uIGFkanVzdFN0cmluZ3MoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKFNUUklOR19SRUdFWCxmdW5jdGlvbihlKXtyZXR1cm4gcHJpbnRTdHJpbmckMihlLHQpfSl9ZnVuY3Rpb24gcXVvdGVBdHRyaWJ1dGVWYWx1ZShlLHQpe3ZhciBuPXQuc2luZ2xlUXVvdGU/IiciOiciJztyZXR1cm4gZS5pbmNsdWRlcygnIicpfHxlLmluY2x1ZGVzKCInIik/ZTpuK2Urbn1mdW5jdGlvbiBhZGp1c3ROdW1iZXJzKGUpe3JldHVybiBlLnJlcGxhY2UoQURKVVNUX05VTUJFUlNfUkVHRVgsZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4hbiYmcj8obnx8IiIpK3ByaW50Q3NzTnVtYmVyKHIpK21heWJlVG9Mb3dlckNhc2UoaXx8IiIpOmV9KX1mdW5jdGlvbiBwcmludENzc051bWJlcihlKXtyZXR1cm4gcHJpbnROdW1iZXIkMihlKS5yZXBsYWNlKC9cLjAoPz0kfGUpLywiIil9ZnVuY3Rpb24gZ2VuZXJpY1ByaW50JDQoZSx0LG4pe3ZhciByPWUuZ2V0VmFsdWUoKTtpZighcilyZXR1cm4iIjtpZigic3RyaW5nIj09PXR5cGVvZiByKXJldHVybiByO3N3aXRjaChyLmtpbmQpe2Nhc2UiRG9jdW1lbnQiOnZhciBpPVtdO3JldHVybiBlLm1hcChmdW5jdGlvbihlLG8pe2kucHVzaChjb25jYXQkOChbZS5jYWxsKG4pXSkpLGkucHVzaChoYXJkbGluZSQ3KSxvIT09ci5kZWZpbml0aW9ucy5sZW5ndGgtMSYmaXNOZXh0TGluZUVtcHR5JDQodC5vcmlnaW5hbFRleHQsZS5nZXRWYWx1ZSgpLHQpJiZpLnB1c2goaGFyZGxpbmUkNyl9LCJkZWZpbml0aW9ucyIpLGNvbmNhdCQ4KGksaGFyZGxpbmUkNyk7Y2FzZSJPcGVyYXRpb25EZWZpbml0aW9uIjp2YXIgbz0ieyIhPT10Lm9yaWdpbmFsVGV4dFt0LmxvY1N0YXJ0KHIpXSxhPSEhci5uYW1lO3JldHVybiBjb25jYXQkOChbbz9yLm9wZXJhdGlvbjoiIixvJiZhP2NvbmNhdCQ4KFsiICIsZS5jYWxsKG4sIm5hbWUiKV0pOiIiLHIudmFyaWFibGVEZWZpbml0aW9ucyYmci52YXJpYWJsZURlZmluaXRpb25zLmxlbmd0aD9ncm91cCQzKGNvbmNhdCQ4KFsiKCIsaW5kZW50JDYoY29uY2F0JDgoW3NvZnRsaW5lJDQsam9pbiQ2KGNvbmNhdCQ4KFtpZkJyZWFrJDMoIiIsIiwgIiksc29mdGxpbmUkNF0pLGUubWFwKG4sInZhcmlhYmxlRGVmaW5pdGlvbnMiKSldKSksc29mdGxpbmUkNCwiKSJdKSk6IiIscHJpbnREaXJlY3RpdmVzKGUsbixyKSxyLnNlbGVjdGlvblNldCYmKG98fGEpPyIgIjoiIixlLmNhbGwobiwic2VsZWN0aW9uU2V0IildKTtjYXNlIkZyYWdtZW50RGVmaW5pdGlvbiI6cmV0dXJuIGNvbmNhdCQ4KFsiZnJhZ21lbnQgIixlLmNhbGwobiwibmFtZSIpLCIgb24gIixlLmNhbGwobiwidHlwZUNvbmRpdGlvbiIpLHByaW50RGlyZWN0aXZlcyhlLG4sciksIiAiLGUuY2FsbChuLCJzZWxlY3Rpb25TZXQiKV0pO2Nhc2UiU2VsZWN0aW9uU2V0IjpyZXR1cm4gY29uY2F0JDgoWyJ7IixpbmRlbnQkNihjb25jYXQkOChbaGFyZGxpbmUkNyxqb2luJDYoaGFyZGxpbmUkNyxlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50U2VxdWVuY2UoZSx0LG4pfSwic2VsZWN0aW9ucyIpKV0pKSxoYXJkbGluZSQ3LCJ9Il0pO2Nhc2UiRmllbGQiOnJldHVybiBncm91cCQzKGNvbmNhdCQ4KFtyLmFsaWFzP2NvbmNhdCQ4KFtlLmNhbGwobiwiYWxpYXMiKSwiOiAiXSk6IiIsZS5jYWxsKG4sIm5hbWUiKSxyLmFyZ3VtZW50cy5sZW5ndGg+MD9ncm91cCQzKGNvbmNhdCQ4KFsiKCIsaW5kZW50JDYoY29uY2F0JDgoW3NvZnRsaW5lJDQsam9pbiQ2KGNvbmNhdCQ4KFtpZkJyZWFrJDMoIiIsIiwgIiksc29mdGxpbmUkNF0pLGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gcHJpbnRTZXF1ZW5jZShlLHQsbil9LCJhcmd1bWVudHMiKSldKSksc29mdGxpbmUkNCwiKSJdKSk6IiIscHJpbnREaXJlY3RpdmVzKGUsbixyKSxyLnNlbGVjdGlvblNldD8iICI6IiIsZS5jYWxsKG4sInNlbGVjdGlvblNldCIpXSkpO2Nhc2UiTmFtZSI6cmV0dXJuIHIudmFsdWU7Y2FzZSJTdHJpbmdWYWx1ZSI6cmV0dXJuIGNvbmNhdCQ4KHIuYmxvY2s/WyciIiInLGhhcmRsaW5lJDcsam9pbiQ2KGhhcmRsaW5lJDcsci52YWx1ZS5yZXBsYWNlKC8iIiIvZywiXFwkJiIpLnNwbGl0KCJcbiIpKSxoYXJkbGluZSQ3LCciIiInXTpbJyInLHIudmFsdWUucmVwbGFjZSgvWyJcXF0vZywiXFwkJiIpLCciJ10pO2Nhc2UiSW50VmFsdWUiOmNhc2UiRmxvYXRWYWx1ZSI6Y2FzZSJFbnVtVmFsdWUiOnJldHVybiByLnZhbHVlO2Nhc2UiQm9vbGVhblZhbHVlIjpyZXR1cm4gci52YWx1ZT8idHJ1ZSI6ImZhbHNlIjtjYXNlIk51bGxWYWx1ZSI6cmV0dXJuIm51bGwiO2Nhc2UiVmFyaWFibGUiOnJldHVybiBjb25jYXQkOChbIiQiLGUuY2FsbChuLCJuYW1lIildKTtjYXNlIkxpc3RWYWx1ZSI6cmV0dXJuIGdyb3VwJDMoY29uY2F0JDgoWyJbIixpbmRlbnQkNihjb25jYXQkOChbc29mdGxpbmUkNCxqb2luJDYoY29uY2F0JDgoW2lmQnJlYWskMygiIiwiLCAiKSxzb2Z0bGluZSQ0XSksZS5tYXAobiwidmFsdWVzIikpXSkpLHNvZnRsaW5lJDQsIl0iXSkpO2Nhc2UiT2JqZWN0VmFsdWUiOnJldHVybiBncm91cCQzKGNvbmNhdCQ4KFsieyIsdC5icmFja2V0U3BhY2luZyYmci5maWVsZHMubGVuZ3RoPjA/IiAiOiIiLGluZGVudCQ2KGNvbmNhdCQ4KFtzb2Z0bGluZSQ0LGpvaW4kNihjb25jYXQkOChbaWZCcmVhayQzKCIiLCIsICIpLHNvZnRsaW5lJDRdKSxlLm1hcChuLCJmaWVsZHMiKSldKSksc29mdGxpbmUkNCxpZkJyZWFrJDMoIiIsdC5icmFja2V0U3BhY2luZyYmci5maWVsZHMubGVuZ3RoPjA/IiAiOiIiKSwifSJdKSk7Y2FzZSJPYmplY3RGaWVsZCI6Y2FzZSJBcmd1bWVudCI6cmV0dXJuIGNvbmNhdCQ4KFtlLmNhbGwobiwibmFtZSIpLCI6ICIsZS5jYWxsKG4sInZhbHVlIildKTtjYXNlIkRpcmVjdGl2ZSI6cmV0dXJuIGNvbmNhdCQ4KFsiQCIsZS5jYWxsKG4sIm5hbWUiKSxyLmFyZ3VtZW50cy5sZW5ndGg+MD9ncm91cCQzKGNvbmNhdCQ4KFsiKCIsaW5kZW50JDYoY29uY2F0JDgoW3NvZnRsaW5lJDQsam9pbiQ2KGNvbmNhdCQ4KFtpZkJyZWFrJDMoIiIsIiwgIiksc29mdGxpbmUkNF0pLGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gcHJpbnRTZXF1ZW5jZShlLHQsbil9LCJhcmd1bWVudHMiKSldKSksc29mdGxpbmUkNCwiKSJdKSk6IiJdKTtjYXNlIk5hbWVkVHlwZSI6cmV0dXJuIGUuY2FsbChuLCJuYW1lIik7Y2FzZSJWYXJpYWJsZURlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbZS5jYWxsKG4sInZhcmlhYmxlIiksIjogIixlLmNhbGwobiwidHlwZSIpLHIuZGVmYXVsdFZhbHVlP2NvbmNhdCQ4KFsiID0gIixlLmNhbGwobiwiZGVmYXVsdFZhbHVlIildKToiIl0pO2Nhc2UiVHlwZUV4dGVuc2lvbkRlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbImV4dGVuZCAiLGUuY2FsbChuLCJkZWZpbml0aW9uIildKTtjYXNlIk9iamVjdFR5cGVFeHRlbnNpb24iOmNhc2UiT2JqZWN0VHlwZURlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbZS5jYWxsKG4sImRlc2NyaXB0aW9uIiksci5kZXNjcmlwdGlvbj9oYXJkbGluZSQ3OiIiLCJPYmplY3RUeXBlRXh0ZW5zaW9uIj09PXIua2luZD8iZXh0ZW5kICI6IiIsInR5cGUgIixlLmNhbGwobiwibmFtZSIpLHIuaW50ZXJmYWNlcy5sZW5ndGg+MD9jb25jYXQkOChbIiBpbXBsZW1lbnRzICIsam9pbiQ2KGRldGVybWluZUludGVyZmFjZVNlcGFyYXRvcih0Lm9yaWdpbmFsVGV4dC5zdWJzdHIodC5sb2NTdGFydChyKSx0LmxvY0VuZChyKSkpLGUubWFwKG4sImludGVyZmFjZXMiKSldKToiIixwcmludERpcmVjdGl2ZXMoZSxuLHIpLHIuZmllbGRzLmxlbmd0aD4wP2NvbmNhdCQ4KFsiIHsiLGluZGVudCQ2KGNvbmNhdCQ4KFtoYXJkbGluZSQ3LGpvaW4kNihoYXJkbGluZSQ3LGUuY2FsbChmdW5jdGlvbihlKXtyZXR1cm4gcHJpbnRTZXF1ZW5jZShlLHQsbil9LCJmaWVsZHMiKSldKSksaGFyZGxpbmUkNywifSJdKToiIl0pO2Nhc2UiRmllbGREZWZpbml0aW9uIjpyZXR1cm4gY29uY2F0JDgoW2UuY2FsbChuLCJkZXNjcmlwdGlvbiIpLHIuZGVzY3JpcHRpb24/aGFyZGxpbmUkNzoiIixlLmNhbGwobiwibmFtZSIpLHIuYXJndW1lbnRzLmxlbmd0aD4wP2dyb3VwJDMoY29uY2F0JDgoWyIoIixpbmRlbnQkNihjb25jYXQkOChbc29mdGxpbmUkNCxqb2luJDYoY29uY2F0JDgoW2lmQnJlYWskMygiIiwiLCAiKSxzb2Z0bGluZSQ0XSksZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBwcmludFNlcXVlbmNlKGUsdCxuKX0sImFyZ3VtZW50cyIpKV0pKSxzb2Z0bGluZSQ0LCIpIl0pKToiIiwiOiAiLGUuY2FsbChuLCJ0eXBlIikscHJpbnREaXJlY3RpdmVzKGUsbixyKV0pO2Nhc2UiRGlyZWN0aXZlRGVmaW5pdGlvbiI6cmV0dXJuIGNvbmNhdCQ4KFtlLmNhbGwobiwiZGVzY3JpcHRpb24iKSxyLmRlc2NyaXB0aW9uP2hhcmRsaW5lJDc6IiIsImRpcmVjdGl2ZSAiLCJAIixlLmNhbGwobiwibmFtZSIpLHIuYXJndW1lbnRzLmxlbmd0aD4wP2dyb3VwJDMoY29uY2F0JDgoWyIoIixpbmRlbnQkNihjb25jYXQkOChbc29mdGxpbmUkNCxqb2luJDYoY29uY2F0JDgoW2lmQnJlYWskMygiIiwiLCAiKSxzb2Z0bGluZSQ0XSksZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBwcmludFNlcXVlbmNlKGUsdCxuKX0sImFyZ3VtZW50cyIpKV0pKSxzb2Z0bGluZSQ0LCIpIl0pKToiIixjb25jYXQkOChbIiBvbiAiLGpvaW4kNigiIHwgIixlLm1hcChuLCJsb2NhdGlvbnMiKSldKV0pO2Nhc2UiRW51bVR5cGVFeHRlbnNpb24iOmNhc2UiRW51bVR5cGVEZWZpbml0aW9uIjpyZXR1cm4gY29uY2F0JDgoW2UuY2FsbChuLCJkZXNjcmlwdGlvbiIpLHIuZGVzY3JpcHRpb24/aGFyZGxpbmUkNzoiIiwiRW51bVR5cGVFeHRlbnNpb24iPT09ci5raW5kPyJleHRlbmQgIjoiIiwiZW51bSAiLGUuY2FsbChuLCJuYW1lIikscHJpbnREaXJlY3RpdmVzKGUsbixyKSxyLnZhbHVlcy5sZW5ndGg+MD9jb25jYXQkOChbIiB7IixpbmRlbnQkNihjb25jYXQkOChbaGFyZGxpbmUkNyxqb2luJDYoaGFyZGxpbmUkNyxlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50U2VxdWVuY2UoZSx0LG4pfSwidmFsdWVzIikpXSkpLGhhcmRsaW5lJDcsIn0iXSk6IiJdKTtjYXNlIkVudW1WYWx1ZURlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbZS5jYWxsKG4sImRlc2NyaXB0aW9uIiksci5kZXNjcmlwdGlvbj9oYXJkbGluZSQ3OiIiLGUuY2FsbChuLCJuYW1lIikscHJpbnREaXJlY3RpdmVzKGUsbixyKV0pO2Nhc2UiSW5wdXRWYWx1ZURlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbZS5jYWxsKG4sImRlc2NyaXB0aW9uIiksci5kZXNjcmlwdGlvbj9yLmRlc2NyaXB0aW9uLmJsb2NrP2hhcmRsaW5lJDc6bGluZSQ1OiIiLGUuY2FsbChuLCJuYW1lIiksIjogIixlLmNhbGwobiwidHlwZSIpLHIuZGVmYXVsdFZhbHVlP2NvbmNhdCQ4KFsiID0gIixlLmNhbGwobiwiZGVmYXVsdFZhbHVlIildKToiIixwcmludERpcmVjdGl2ZXMoZSxuLHIpXSk7Y2FzZSJJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24iOmNhc2UiSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbiI6cmV0dXJuIGNvbmNhdCQ4KFtlLmNhbGwobiwiZGVzY3JpcHRpb24iKSxyLmRlc2NyaXB0aW9uP2hhcmRsaW5lJDc6IiIsIklucHV0T2JqZWN0VHlwZUV4dGVuc2lvbiI9PT1yLmtpbmQ/ImV4dGVuZCAiOiIiLCJpbnB1dCAiLGUuY2FsbChuLCJuYW1lIikscHJpbnREaXJlY3RpdmVzKGUsbixyKSxyLmZpZWxkcy5sZW5ndGg+MD9jb25jYXQkOChbIiB7IixpbmRlbnQkNihjb25jYXQkOChbaGFyZGxpbmUkNyxqb2luJDYoaGFyZGxpbmUkNyxlLmNhbGwoZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50U2VxdWVuY2UoZSx0LG4pfSwiZmllbGRzIikpXSkpLGhhcmRsaW5lJDcsIn0iXSk6IiJdKTtjYXNlIlNjaGVtYURlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbInNjaGVtYSIscHJpbnREaXJlY3RpdmVzKGUsbixyKSwiIHsiLHIub3BlcmF0aW9uVHlwZXMubGVuZ3RoPjA/aW5kZW50JDYoY29uY2F0JDgoW2hhcmRsaW5lJDcsam9pbiQ2KGhhcmRsaW5lJDcsZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBwcmludFNlcXVlbmNlKGUsdCxuKX0sIm9wZXJhdGlvblR5cGVzIikpXSkpOiIiLGhhcmRsaW5lJDcsIn0iXSk7Y2FzZSJPcGVyYXRpb25UeXBlRGVmaW5pdGlvbiI6cmV0dXJuIGNvbmNhdCQ4KFtlLmNhbGwobiwib3BlcmF0aW9uIiksIjogIixlLmNhbGwobiwidHlwZSIpXSk7Y2FzZSJJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uIjpjYXNlIkludGVyZmFjZVR5cGVEZWZpbml0aW9uIjpyZXR1cm4gY29uY2F0JDgoW2UuY2FsbChuLCJkZXNjcmlwdGlvbiIpLHIuZGVzY3JpcHRpb24/aGFyZGxpbmUkNzoiIiwiSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiI9PT1yLmtpbmQ/ImV4dGVuZCAiOiIiLCJpbnRlcmZhY2UgIixlLmNhbGwobiwibmFtZSIpLHByaW50RGlyZWN0aXZlcyhlLG4sciksci5maWVsZHMubGVuZ3RoPjA/Y29uY2F0JDgoWyIgeyIsaW5kZW50JDYoY29uY2F0JDgoW2hhcmRsaW5lJDcsam9pbiQ2KGhhcmRsaW5lJDcsZS5jYWxsKGZ1bmN0aW9uKGUpe3JldHVybiBwcmludFNlcXVlbmNlKGUsdCxuKX0sImZpZWxkcyIpKV0pKSxoYXJkbGluZSQ3LCJ9Il0pOiIiXSk7Y2FzZSJGcmFnbWVudFNwcmVhZCI6cmV0dXJuIGNvbmNhdCQ4KFsiLi4uIixlLmNhbGwobiwibmFtZSIpLHByaW50RGlyZWN0aXZlcyhlLG4scildKTtjYXNlIklubGluZUZyYWdtZW50IjpyZXR1cm4gY29uY2F0JDgoWyIuLi4iLHIudHlwZUNvbmRpdGlvbj9jb25jYXQkOChbIiBvbiAiLGUuY2FsbChuLCJ0eXBlQ29uZGl0aW9uIildKToiIixwcmludERpcmVjdGl2ZXMoZSxuLHIpLCIgIixlLmNhbGwobiwic2VsZWN0aW9uU2V0IildKTtjYXNlIlVuaW9uVHlwZUV4dGVuc2lvbiI6Y2FzZSJVbmlvblR5cGVEZWZpbml0aW9uIjpyZXR1cm4gZ3JvdXAkMyhjb25jYXQkOChbZS5jYWxsKG4sImRlc2NyaXB0aW9uIiksci5kZXNjcmlwdGlvbj9oYXJkbGluZSQ3OiIiLGdyb3VwJDMoY29uY2F0JDgoWyJVbmlvblR5cGVFeHRlbnNpb24iPT09ci5raW5kPyJleHRlbmQgIjoiIiwidW5pb24gIixlLmNhbGwobiwibmFtZSIpLHByaW50RGlyZWN0aXZlcyhlLG4sciksci50eXBlcy5sZW5ndGg+MD9jb25jYXQkOChbIiA9IixpZkJyZWFrJDMoIiIsIiAiKSxpbmRlbnQkNihjb25jYXQkOChbaWZCcmVhayQzKGNvbmNhdCQ4KFtsaW5lJDUsIiAgIl0pKSxqb2luJDYoY29uY2F0JDgoW2xpbmUkNSwifCAiXSksZS5tYXAobiwidHlwZXMiKSldKSldKToiIl0pKV0pKTtjYXNlIlNjYWxhclR5cGVFeHRlbnNpb24iOmNhc2UiU2NhbGFyVHlwZURlZmluaXRpb24iOnJldHVybiBjb25jYXQkOChbZS5jYWxsKG4sImRlc2NyaXB0aW9uIiksci5kZXNjcmlwdGlvbj9oYXJkbGluZSQ3OiIiLCJTY2FsYXJUeXBlRXh0ZW5zaW9uIj09PXIua2luZD8iZXh0ZW5kICI6IiIsInNjYWxhciAiLGUuY2FsbChuLCJuYW1lIikscHJpbnREaXJlY3RpdmVzKGUsbixyKV0pO2Nhc2UiTm9uTnVsbFR5cGUiOnJldHVybiBjb25jYXQkOChbZS5jYWxsKG4sInR5cGUiKSwiISJdKTtjYXNlIkxpc3RUeXBlIjpyZXR1cm4gY29uY2F0JDgoWyJbIixlLmNhbGwobiwidHlwZSIpLCJdIl0pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGdyYXBocWwgdHlwZTogIitKU09OLnN0cmluZ2lmeShyLmtpbmQpKX19ZnVuY3Rpb24gcHJpbnREaXJlY3RpdmVzKGUsdCxuKXtyZXR1cm4gMD09PW4uZGlyZWN0aXZlcy5sZW5ndGg/IiI6Y29uY2F0JDgoWyIgIixncm91cCQzKGluZGVudCQ2KGNvbmNhdCQ4KFtzb2Z0bGluZSQ0LGpvaW4kNihjb25jYXQkOChbaWZCcmVhayQzKCIiLCIgIiksc29mdGxpbmUkNF0pLGUubWFwKHQsImRpcmVjdGl2ZXMiKSldKSkpXSl9ZnVuY3Rpb24gcHJpbnRTZXF1ZW5jZShlLHQsbil7dmFyIHI9ZS5nZXRWYWx1ZSgpLmxlbmd0aDtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxpKXt2YXIgbz1uKGUpO3JldHVybiBpc05leHRMaW5lRW1wdHkkNCh0Lm9yaWdpbmFsVGV4dCxlLmdldFZhbHVlKCksdCkmJmk8ci0xP2NvbmNhdCQ4KFtvLGhhcmRsaW5lJDddKTpvfSl9ZnVuY3Rpb24gY2FuQXR0YWNoQ29tbWVudCQxKGUpe3JldHVybiBlLmtpbmQmJiJDb21tZW50IiE9PWUua2luZH1mdW5jdGlvbiBwcmludENvbW1lbnQkMihlKXt2YXIgdD1lLmdldFZhbHVlKCk7c3dpdGNoKHQua2luZCl7Y2FzZSJDb21tZW50IjpyZXR1cm4iIyIrdC52YWx1ZS50cmltUmlnaHQoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTm90IGEgY29tbWVudDogIitKU09OLnN0cmluZ2lmeSh0KSl9fWZ1bmN0aW9uIGRldGVybWluZUludGVyZmFjZVNlcGFyYXRvcihlKXt2YXIgdD1lLmluZGV4T2YoImltcGxlbWVudHMiKTtpZigtMT09PXQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGltcGxlbWVudCBpbnRlcmZhY2VzOiAiK2UpO3ZhciBuPWUuaW5kZXhPZigieyIpO3JldHVybi0xPT09biYmKG49ZS5sZW5ndGgpLGUuc3Vic3RyKHQsbikuaW5jbHVkZXMoIiYiKT8iICYgIjoiLCAifWZ1bmN0aW9uIGNsZWFuJDUoZSx0KXtkZWxldGUgdC5sb2MsZGVsZXRlIHQuY29tbWVudHN9ZnVuY3Rpb24gZW1iZWQkMihlLHQsbixyKXt2YXIgaT1lLmdldFZhbHVlKCk7aWYoImNvZGUiPT09aS50eXBlJiZudWxsIT09aS5sYW5nKXt2YXIgbz1pLmxhbmcuc3BsaXQoL1xzLywxKVswXSxhPWZ1bmN0aW9uKGUpe3ZhciB0PXN1cHBvcnQuZ2V0U3VwcG9ydEluZm8obnVsbCx7cGx1Z2luczpyLnBsdWdpbnN9KSxuPXQubGFuZ3VhZ2VzLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZS50b0xvd2VyQ2FzZSgpPT09ZXx8dC5leHRlbnNpb25zJiZ0LmV4dGVuc2lvbnMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMSk9PT1lfSl9KTtyZXR1cm4gbj9uLnBhcnNlcnNbMF06bnVsbH0obyk7aWYoYSl7dmFyIHM9ci5fX2luSnNUZW1wbGF0ZT8ifiI6ImAiLHU9cy5yZXBlYXQoTWF0aC5tYXgoMyx1dGlsLmdldE1heENvbnRpbnVvdXNDb3VudChpLnZhbHVlLHMpKzEpKSxjPW4oaS52YWx1ZSx7cGFyc2VyOmF9KTtyZXR1cm4gbWFya0FzUm9vdCQxKGNvbmNhdCQxMChbdSxpLmxhbmcsaGFyZGxpbmUkOSxmdW5jdGlvbihlKXtyZXR1cm4gbWFwRG9jJDQoZSxmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlJiZlLmluY2x1ZGVzKCJcbiIpP2NvbmNhdCQxMChlLnNwbGl0KC8oXG4pL2cpLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0JTI9PT0wP2U6bGl0ZXJhbGxpbmUkM30pKTplfSl9KGMpLHVdKSl9fXJldHVybiBudWxsfWZ1bmN0aW9uIHBhcnNlJDMoZSl7dmFyIHQ7MD09PWUuaW5kZXhPZigiLS0tIik/dD0iLS0tIjowPT09ZS5pbmRleE9mKCIrKysiKSYmKHQ9IisrKyIpO3ZhciBuPS0xO3JldHVybiB0JiYtMSE9PShuPWUuaW5kZXhPZigiXG4iLmNvbmNhdCh0KSwzKSk/KG4rPTQse2Zyb250TWF0dGVyOmUuc2xpY2UoMCxuKSxjb250ZW50OmUuc2xpY2Uobil9KTp7ZnJvbnRNYXR0ZXI6bnVsbCxjb250ZW50OmV9fWZ1bmN0aW9uIGdlbmVyaWNQcmludCQ1KGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCk7aWYoc2hvdWxkUmVtYWluVGhlU2FtZUNvbnRlbnQoZSkpcmV0dXJuIGNvbmNhdCQ5KHV0aWwuc3BsaXRUZXh0KHQub3JpZ2luYWxUZXh0LnNsaWNlKHIucG9zaXRpb24uc3RhcnQub2Zmc2V0LHIucG9zaXRpb24uZW5kLm9mZnNldCksdCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiJ3b3JkIj09PW4udHlwZT9uLnZhbHVlOiIiPT09bi52YWx1ZT8iIjpwcmludExpbmUoZSxuLnZhbHVlLHQpfSkpO3N3aXRjaChyLnR5cGUpe2Nhc2Uicm9vdCI6cmV0dXJuIDA9PT1yLmNoaWxkcmVuLmxlbmd0aD8iIjpjb25jYXQkOShbbm9ybWFsaXplRG9jKHByaW50Um9vdChlLHQsbikpLGhhcmRsaW5lJDhdKTtjYXNlInBhcmFncmFwaCI6cmV0dXJuIHByaW50Q2hpbGRyZW4oZSx0LG4se3Bvc3Rwcm9jZXNzb3I6ZmlsbCQ0fSk7Y2FzZSJzZW50ZW5jZSI6cmV0dXJuIHByaW50Q2hpbGRyZW4oZSx0LG4pO2Nhc2Uid29yZCI6cmV0dXJuIHIudmFsdWUucmVwbGFjZSgvWypdL2csIlxcKiIpLnJlcGxhY2UobmV3IFJlZ0V4cChbIihefFsiLmNvbmNhdCh1dGlsLnB1bmN0dWF0aW9uQ2hhclJhbmdlLCJdKShfKykiKSwiKF8rKShbIi5jb25jYXQodXRpbC5wdW5jdHVhdGlvbkNoYXJSYW5nZSwiXXwkKSIpXS5qb2luKCJ8IiksImciKSxmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybihuPyIiLmNvbmNhdCh0KS5jb25jYXQobik6IiIuY29uY2F0KHIpLmNvbmNhdChpKSkucmVwbGFjZSgvXy9nLCJcXF8iKX0pO2Nhc2Uid2hpdGVzcGFjZSI6dmFyIGk9ZS5nZXRQYXJlbnROb2RlKCksbz1pLmNoaWxkcmVuLmluZGV4T2YociksYT1pLmNoaWxkcmVuW28rMV0scz1hJiYvXj58XihbLSsqXXwjezEsNn18WzAtOV0rWy4pXSkkLy50ZXN0KGEudmFsdWUpPyJuZXZlciI6dC5wcm9zZVdyYXA7cmV0dXJuIHByaW50TGluZShlLHIudmFsdWUse3Byb3NlV3JhcDpzfSk7Y2FzZSJlbXBoYXNpcyI6dmFyIHU9ZS5nZXRQYXJlbnROb2RlKCksYz11LmNoaWxkcmVuLmluZGV4T2YociksbD11LmNoaWxkcmVuW2MtMV0scD11LmNoaWxkcmVuW2MrMV0sZj1sJiYic2VudGVuY2UiPT09bC50eXBlJiZsLmNoaWxkcmVuLmxlbmd0aD4wJiYid29yZCI9PT11dGlsLmdldExhc3QobC5jaGlsZHJlbikudHlwZSYmIXV0aWwuZ2V0TGFzdChsLmNoaWxkcmVuKS5oYXNUcmFpbGluZ1B1bmN0dWF0aW9ufHxwJiYic2VudGVuY2UiPT09cC50eXBlJiZwLmNoaWxkcmVuLmxlbmd0aD4wJiYid29yZCI9PT1wLmNoaWxkcmVuWzBdLnR5cGUmJiFwLmNoaWxkcmVuWzBdLmhhc0xlYWRpbmdQdW5jdHVhdGlvbixkPWZ8fGdldEFuY2VzdG9yTm9kZSQyKGUsImVtcGhhc2lzIik/IioiOiJfIjtyZXR1cm4gY29uY2F0JDkoW2QscHJpbnRDaGlsZHJlbihlLHQsbiksZF0pO2Nhc2Uic3Ryb25nIjpyZXR1cm4gY29uY2F0JDkoWyIqKiIscHJpbnRDaGlsZHJlbihlLHQsbiksIioqIl0pO2Nhc2UiZGVsZXRlIjpyZXR1cm4gY29uY2F0JDkoWyJ+fiIscHJpbnRDaGlsZHJlbihlLHQsbiksIn5+Il0pO2Nhc2UiaW5saW5lQ29kZSI6dmFyIGg9dXRpbC5nZXRNYXhDb250aW51b3VzQ291bnQoci52YWx1ZSwiYCIpLG09MT09PWg/ImBgIjoiYCIsZz1oPyIgIjoiIjtyZXR1cm4gY29uY2F0JDkoW20sZyxyLnZhbHVlLGcsbV0pO2Nhc2UibGluayI6c3dpdGNoKHQub3JpZ2luYWxUZXh0W3IucG9zaXRpb24uc3RhcnQub2Zmc2V0XSl7Y2FzZSI8IjpyZXR1cm4gY29uY2F0JDkoWyI8IixyLnVybCwiPiJdKTtjYXNlIlsiOnJldHVybiBjb25jYXQkOShbIlsiLHByaW50Q2hpbGRyZW4oZSx0LG4pLCJdKCIscHJpbnRVcmwoci51cmwsIikiKSxwcmludFRpdGxlKHIudGl0bGUsdCksIikiXSk7ZGVmYXVsdDpyZXR1cm4gdC5vcmlnaW5hbFRleHQuc2xpY2Uoci5wb3NpdGlvbi5zdGFydC5vZmZzZXQsci5wb3NpdGlvbi5lbmQub2Zmc2V0KX1jYXNlImltYWdlIjpyZXR1cm4gY29uY2F0JDkoWyIhWyIsci5hbHR8fCIiLCJdKCIscHJpbnRVcmwoci51cmwsIikiKSxwcmludFRpdGxlKHIudGl0bGUsdCksIikiXSk7Y2FzZSJibG9ja3F1b3RlIjpyZXR1cm4gY29uY2F0JDkoWyI+ICIsYWxpZ24kMigiPiAiLHByaW50Q2hpbGRyZW4oZSx0LG4pKV0pO2Nhc2UiaGVhZGluZyI6cmV0dXJuIGNvbmNhdCQ5KFsiIyIucmVwZWF0KHIuZGVwdGgpKyIgIixwcmludENoaWxkcmVuKGUsdCxuKV0pO2Nhc2UiY29kZSI6aWYoL15cbj8oIHs0LH18XHQpLy50ZXN0KHQub3JpZ2luYWxUZXh0LnNsaWNlKHIucG9zaXRpb24uc3RhcnQub2Zmc2V0LHIucG9zaXRpb24uZW5kLm9mZnNldCkpKXt2YXIgeT0iICIucmVwZWF0KDQpO3JldHVybiBhbGlnbiQyKHksY29uY2F0JDkoW3ksam9pbiQ3KGhhcmRsaW5lJDgsci52YWx1ZS5zcGxpdCgiXG4iKSldKSl9dmFyIHY9dC5fX2luSnNUZW1wbGF0ZT8ifiI6ImAiLGI9di5yZXBlYXQoTWF0aC5tYXgoMyx1dGlsLmdldE1heENvbnRpbnVvdXNDb3VudChyLnZhbHVlLHYpKzEpKTtyZXR1cm4gY29uY2F0JDkoW2Isci5sYW5nfHwiIixoYXJkbGluZSQ4LGpvaW4kNyhoYXJkbGluZSQ4LHIudmFsdWUuc3BsaXQoIlxuIikpLGhhcmRsaW5lJDgsYl0pO2Nhc2UiZnJvbnQtbWF0dGVyIjpyZXR1cm4gci52YWx1ZTtjYXNlImh0bWwiOnZhciB4PWUuZ2V0UGFyZW50Tm9kZSgpO3JldHVybiByZXBsYWNlTmV3bGluZXNXaXRoSGFyZGxpbmVzKCJyb290Ij09PXgudHlwZSYmdXRpbC5nZXRMYXN0KHguY2hpbGRyZW4pPT09cj9yLnZhbHVlLnRyaW1SaWdodCgpOnIudmFsdWUpO2Nhc2UibGlzdCI6dmFyIEM9Z2V0TnRoTGlzdFNpYmxpbmdJbmRleChyLGUuZ2V0UGFyZW50Tm9kZSgpKSxFPXIub3JkZXJlZCYmci5jaGlsZHJlbi5sZW5ndGg+MSYmL15ccyoxKFwufFwpKS8udGVzdCh0Lm9yaWdpbmFsVGV4dC5zbGljZShyLmNoaWxkcmVuWzFdLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxyLmNoaWxkcmVuWzFdLnBvc2l0aW9uLmVuZC5vZmZzZXQpKTtyZXR1cm4gcHJpbnRDaGlsZHJlbihlLHQsbix7cHJvY2Vzc29yOmZ1bmN0aW9uKGUsaSl7dmFyIG89ZnVuY3Rpb24oKXt2YXIgbj1yLm9yZGVyZWQ/KDA9PT1pP3Iuc3RhcnQ6RT8xOnIuc3RhcnQraSkrKEMlMj09PTA/Ii4gIjoiKSAiKTpDJTI9PT0wPyItICI6IiogIjtyZXR1cm4gZS5nZXRWYWx1ZSgpLmNoaWxkcmVuLmxlbmd0aD9hbGlnbkxpc3RQcmVmaXgobix0KTpufSgpO3JldHVybiBjb25jYXQkOShbbyxhbGlnbiQyKCIgIi5yZXBlYXQoby5sZW5ndGgpLHByaW50TGlzdEl0ZW0oZSx0LG4sbykpXSl9fSk7Y2FzZSJ0aGVtYXRpY0JyZWFrIjp2YXIgRD1nZXRBbmNlc3RvckNvdW50ZXIkMShlLCJsaXN0Iik7aWYoLTE9PT1EKXJldHVybiItLS0iO3JldHVybiBnZXROdGhMaXN0U2libGluZ0luZGV4KGUuZ2V0UGFyZW50Tm9kZShEKSxlLmdldFBhcmVudE5vZGUoRCsxKSklMj09PTA/IioqKiI6Ii0tLSI7Y2FzZSJsaW5rUmVmZXJlbmNlIjpyZXR1cm4gY29uY2F0JDkoWyJbIixwcmludENoaWxkcmVuKGUsdCxuKSwiXSIsImZ1bGwiPT09ci5yZWZlcmVuY2VUeXBlP2NvbmNhdCQ5KFsiWyIsci5pZGVudGlmaWVyLCJdIl0pOiJjb2xsYXBzZWQiPT09ci5yZWZlcmVuY2VUeXBlPyJbXSI6IiJdKTtjYXNlImltYWdlUmVmZXJlbmNlIjpzd2l0Y2goci5yZWZlcmVuY2VUeXBlKXtjYXNlImZ1bGwiOnJldHVybiBjb25jYXQkOShbIiFbIixyLmFsdHx8IiIsIl1bIixyLmlkZW50aWZpZXIsIl0iXSk7ZGVmYXVsdDpyZXR1cm4gY29uY2F0JDkoWyIhWyIsci5hbHQsIl0iLCJjb2xsYXBzZWQiPT09ci5yZWZlcmVuY2VUeXBlPyJbXSI6IiJdKX1jYXNlImRlZmluaXRpb24iOnZhciB3PSJhbHdheXMiPT09dC5wcm9zZVdyYXA/bGluZSQ2OiIgIjtyZXR1cm4gZ3JvdXAkNChjb25jYXQkOShbY29uY2F0JDkoWyJbIixyLmlkZW50aWZpZXIsIl06Il0pLGluZGVudCQ3KGNvbmNhdCQ5KFt3LHByaW50VXJsKHIudXJsKSxudWxsPT09ci50aXRsZT8iIjpjb25jYXQkOShbdyxwcmludFRpdGxlKHIudGl0bGUsdCwhMSldKV0pKV0pKTtjYXNlImZvb3Rub3RlIjpyZXR1cm4gY29uY2F0JDkoWyJbXiIscHJpbnRDaGlsZHJlbihlLHQsbiksIl0iXSk7Y2FzZSJmb290bm90ZVJlZmVyZW5jZSI6cmV0dXJuIGNvbmNhdCQ5KFsiW14iLHIuaWRlbnRpZmllciwiXSJdKTtjYXNlImZvb3Rub3RlRGVmaW5pdGlvbiI6dmFyIFM9ZS5nZXRQYXJlbnROb2RlKCkuY2hpbGRyZW5bZS5nZXROYW1lKCkrMV07cmV0dXJuIGNvbmNhdCQ5KFsiW14iLHIuaWRlbnRpZmllciwiXTogIixncm91cCQ0KGNvbmNhdCQ5KFthbGlnbiQyKCIgIi5yZXBlYXQodC50YWJXaWR0aCkscHJpbnRDaGlsZHJlbihlLHQsbix7cHJvY2Vzc29yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PT10P2dyb3VwJDQoY29uY2F0JDkoW3NvZnRsaW5lJDUsc29mdGxpbmUkNSxlLmNhbGwobildKSk6ZS5jYWxsKG4pfX0pKSxTJiYiZm9vdG5vdGVEZWZpbml0aW9uIj09PVMudHlwZT9zb2Z0bGluZSQ1OiIiXSkpXSk7Y2FzZSJ0YWJsZSI6cmV0dXJuIHByaW50VGFibGUoZSx0LG4pO2Nhc2UidGFibGVDZWxsIjpyZXR1cm4gcHJpbnRDaGlsZHJlbihlLHQsbik7Y2FzZSJicmVhayI6cmV0dXJuIGNvbmNhdCQ5KFsvXHMvLnRlc3QodC5vcmlnaW5hbFRleHRbci5wb3NpdGlvbi5zdGFydC5vZmZzZXRdKT8iICAiOiJcXCIsaGFyZGxpbmUkOF0pO2Nhc2UibGlxdWlkTm9kZSI6cmV0dXJuIHJlcGxhY2VOZXdsaW5lc1dpdGhIYXJkbGluZXMoci52YWx1ZSk7Y2FzZSJ0YWJsZVJvdyI6Y2FzZSJsaXN0SXRlbSI6ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWFya2Rvd24gdHlwZSAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShyLnR5cGUpKSl9fWZ1bmN0aW9uIHByaW50TGlzdEl0ZW0oZSx0LG4scil7dmFyIGk9ZS5nZXRWYWx1ZSgpLG89bnVsbD09PWkuY2hlY2tlZD8iIjppLmNoZWNrZWQ/Ilt4XSAiOiJbIF0gIjtyZXR1cm4gY29uY2F0JDkoW28scHJpbnRDaGlsZHJlbihlLHQsbix7cHJvY2Vzc29yOmZ1bmN0aW9uKGUsaSl7aWYoMD09PWkmJiJsaXN0IiE9PWUuZ2V0VmFsdWUoKS50eXBlKXJldHVybiBhbGlnbiQyKCIgIi5yZXBlYXQoby5sZW5ndGgpLGUuY2FsbChuKSk7dmFyIGE9IiAiLnJlcGVhdChjbGFtcCh0LnRhYldpZHRoLXIubGVuZ3RoLDAsMykpO3JldHVybiBjb25jYXQkOShbYSxhbGlnbiQyKGEsZS5jYWxsKG4pKV0pfX0pXSl9ZnVuY3Rpb24gYWxpZ25MaXN0UHJlZml4KGUsdCl7dmFyIG49ZnVuY3Rpb24oKXt2YXIgbj1lLmxlbmd0aCV0LnRhYldpZHRoO3JldHVybiAwPT09bj8wOnQudGFiV2lkdGgtbn0oKTtyZXR1cm4gZSsiICIucmVwZWF0KG4+PTQ/MDpuKX1mdW5jdGlvbiBnZXROdGhMaXN0U2libGluZ0luZGV4KGUsdCl7cmV0dXJuIGdldE50aFNpYmxpbmdJbmRleChlLHQsZnVuY3Rpb24odCl7cmV0dXJuIHQub3JkZXJlZD09PWUub3JkZXJlZH0pfWZ1bmN0aW9uIHJlcGxhY2VOZXdsaW5lc1dpdGhIYXJkbGluZXMoZSl7cmV0dXJuIGpvaW4kNyhoYXJkbGluZSQ4LGUuc3BsaXQoIlxuIikpfWZ1bmN0aW9uIGdldE50aFNpYmxpbmdJbmRleChlLHQsbil7bj1ufHxmdW5jdGlvbigpe3JldHVybiEwfTt2YXIgcj0tMSxpPSEwLG89ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgcyx1PXQuY2hpbGRyZW5bU3ltYm9sLml0ZXJhdG9yXSgpOyEoaT0ocz11Lm5leHQoKSkuZG9uZSk7aT0hMCl7dmFyIGM9cy52YWx1ZTtpZihjLnR5cGU9PT1lLnR5cGUmJm4oYyk/cisrOnI9LTEsYz09PWUpcmV0dXJuIHJ9fWNhdGNoKGUpe289ITAsYT1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBhfX19ZnVuY3Rpb24gZ2V0QW5jZXN0b3JDb3VudGVyJDEoZSx0KXtmb3IodmFyIG4scj1bXS5jb25jYXQodCksaT0tMTtuPWUuZ2V0UGFyZW50Tm9kZSgrK2kpOylpZigtMSE9PXIuaW5kZXhPZihuLnR5cGUpKXJldHVybiBpO3JldHVybi0xfWZ1bmN0aW9uIGdldEFuY2VzdG9yTm9kZSQyKGUsdCl7dmFyIG49Z2V0QW5jZXN0b3JDb3VudGVyJDEoZSx0KTtyZXR1cm4tMT09PW4/bnVsbDplLmdldFBhcmVudE5vZGUobil9ZnVuY3Rpb24gcHJpbnRMaW5lKGUsdCxuKXtpZigicHJlc2VydmUiPT09bi5wcm9zZVdyYXAmJiJcbiI9PT10KXJldHVybiBoYXJkbGluZSQ4O3ZhciByPSJhbHdheXMiPT09bi5wcm9zZVdyYXAmJiFnZXRBbmNlc3Rvck5vZGUkMihlLFNJTkdMRV9MSU5FX05PREVfVFlQRVMpO3JldHVybiIiIT09dD9yP2xpbmUkNjoiICI6cj9zb2Z0bGluZSQ1OiIifWZ1bmN0aW9uIHByaW50VGFibGUoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGNvbmNhdCQ5KFsifCAiLGpvaW4kNygiIHwgIixlLm1hcChmdW5jdGlvbihlLHQpe3N3aXRjaChzLmFsaWduW3RdKXtjYXNlInJpZ2h0IjpyZXR1cm4gbyhlLGNbdF0pO2Nhc2UiY2VudGVyIjpyZXR1cm4gYShlLGNbdF0pO2RlZmF1bHQ6cmV0dXJuIGkoZSxjW3RdKX19KSksIiB8Il0pfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gY29uY2F0JDkoW2UsIiAiLnJlcGVhdCh0LXV0aWwuZ2V0U3RyaW5nV2lkdGgoZSkpXSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBjb25jYXQkOShbIiAiLnJlcGVhdCh0LXV0aWwuZ2V0U3RyaW5nV2lkdGgoZSkpLGVdKX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49dC11dGlsLmdldFN0cmluZ1dpZHRoKGUpLHI9TWF0aC5mbG9vcihuLzIpLGk9bi1yO3JldHVybiBjb25jYXQkOShbIiAiLnJlcGVhdChyKSxlLCIgIi5yZXBlYXQoaSldKX12YXIgcz1lLmdldFZhbHVlKCksdT1bXTtlLm1hcChmdW5jdGlvbihlKXt2YXIgcj1bXTtlLm1hcChmdW5jdGlvbihlKXtyLnB1c2gocHJpbnREb2NUb1N0cmluZyQyKGUuY2FsbChuKSx0KS5mb3JtYXR0ZWQpfSwiY2hpbGRyZW4iKSx1LnB1c2gocil9LCJjaGlsZHJlbiIpO3ZhciBjPXUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIE1hdGgubWF4KGUsdXRpbC5nZXRTdHJpbmdXaWR0aCh0W25dKSl9KX0sdVswXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gM30pKTtyZXR1cm4gam9pbiQ3KGhhcmRsaW5lJDgsW3IodVswXSksZnVuY3Rpb24oKXtyZXR1cm4gY29uY2F0JDkoWyJ8ICIsam9pbiQ3KCIgfCAiLGMubWFwKGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHMuYWxpZ25bdF0pe2Nhc2UibGVmdCI6cmV0dXJuIjoiKyItIi5yZXBlYXQoZS0xKTtjYXNlInJpZ2h0IjpyZXR1cm4iLSIucmVwZWF0KGUtMSkrIjoiO2Nhc2UiY2VudGVyIjpyZXR1cm4iOiIrIi0iLnJlcGVhdChlLTIpKyI6IjtkZWZhdWx0OnJldHVybiItIi5yZXBlYXQoZSl9fSkpLCIgfCJdKX0oKSxqb2luJDcoaGFyZGxpbmUkOCx1LnNsaWNlKDEpLm1hcChyKSldKX1mdW5jdGlvbiBwcmludFJvb3QoZSx0LG4pe3ZhciByPVtdLGk9bnVsbCxvPWUuZ2V0VmFsdWUoKS5jaGlsZHJlbjtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7c3dpdGNoKGlzUHJldHRpZXJJZ25vcmUoZSkpe2Nhc2Uic3RhcnQiOm51bGw9PT1pJiYoaT17aW5kZXg6dCxvZmZzZXQ6ZS5wb3NpdGlvbi5lbmQub2Zmc2V0fSk7YnJlYWs7Y2FzZSJlbmQiOm51bGwhPT1pJiYoci5wdXNoKHtzdGFydDppLGVuZDp7aW5kZXg6dCxvZmZzZXQ6ZS5wb3NpdGlvbi5zdGFydC5vZmZzZXR9fSksaT1udWxsKX19KSxwcmludENoaWxkcmVuKGUsdCxuLHtwcm9jZXNzb3I6ZnVuY3Rpb24oZSxpKXtpZigwIT09ci5sZW5ndGgpe3ZhciBhPXJbMF07aWYoaT09PWEuc3RhcnQuaW5kZXgpcmV0dXJuIGNvbmNhdCQ5KFtvW2Euc3RhcnQuaW5kZXhdLnZhbHVlLHQub3JpZ2luYWxUZXh0LnNsaWNlKGEuc3RhcnQub2Zmc2V0LGEuZW5kLm9mZnNldCksb1thLmVuZC5pbmRleF0udmFsdWVdKTtpZihhLnN0YXJ0LmluZGV4PGkmJmk8YS5lbmQuaW5kZXgpcmV0dXJuITE7aWYoaT09PWEuZW5kLmluZGV4KXJldHVybiByLnNoaWZ0KCksITF9cmV0dXJuIGUuY2FsbChuKX19KX1mdW5jdGlvbiBwcmludENoaWxkcmVuKGUsdCxuLHIpe3I9cnx8e307dmFyIGksbz1yLnBvc3Rwcm9jZXNzb3J8fGNvbmNhdCQ5LGE9ci5wcm9jZXNzb3J8fGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhbGwobil9LHM9ZS5nZXRWYWx1ZSgpLHU9W107cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsbil7dmFyIHI9ZS5nZXRWYWx1ZSgpLG89YShlLG4pO2lmKCExIT09byl7dmFyIGM9e3BhcnRzOnUscHJldk5vZGU6aSxwYXJlbnROb2RlOnMsb3B0aW9uczp0fTtzaG91bGROb3RQcmVQcmludEhhcmRsaW5lKHIsYyl8fCh1LnB1c2goaGFyZGxpbmUkOCksKHNob3VsZFByZVByaW50RG91YmxlSGFyZGxpbmUocixjKXx8c2hvdWxkUHJlUHJpbnRUcmlwbGVIYXJkbGluZShyLGMpKSYmdS5wdXNoKGhhcmRsaW5lJDgpLHNob3VsZFByZVByaW50VHJpcGxlSGFyZGxpbmUocixjKSYmdS5wdXNoKGhhcmRsaW5lJDgpKSx1LnB1c2gobyksaT1yfX0sImNoaWxkcmVuIiksbyh1KX1mdW5jdGlvbiBpc1ByZXR0aWVySWdub3JlKGUpe2lmKCJodG1sIiE9PWUudHlwZSlyZXR1cm4hMTt2YXIgdD1lLnZhbHVlLm1hdGNoKC9ePCEtLVxzKnByZXR0aWVyLWlnbm9yZSg/Oi0oc3RhcnR8ZW5kKSk/XHMqLS0+JC8pO3JldHVybiBudWxsIT09dCYmKHRbMV0/dFsxXToibmV4dCIpfWZ1bmN0aW9uIHNob3VsZE5vdFByZVByaW50SGFyZGxpbmUoZSx0KXt2YXIgbj0wPT09dC5wYXJ0cy5sZW5ndGgscj0tMSE9PUlOTElORV9OT0RFX1RZUEVTLmluZGV4T2YoZS50eXBlKSxpPSJodG1sIj09PWUudHlwZSYmLTEhPT1JTkxJTkVfTk9ERV9XUkFQUEVSX1RZUEVTLmluZGV4T2YodC5wYXJlbnROb2RlLnR5cGUpO3JldHVybiBufHxyfHxpfWZ1bmN0aW9uIHNob3VsZFByZVByaW50RG91YmxlSGFyZGxpbmUoZSx0KXt2YXIgbj0odC5wcmV2Tm9kZSYmdC5wcmV2Tm9kZS50eXBlKT09PWUudHlwZSxyPW4mJi0xIT09U0lCTElOR19OT0RFX1RZUEVTLmluZGV4T2YoZS50eXBlKSxpPSJsaXN0SXRlbSI9PT10LnBhcmVudE5vZGUudHlwZSYmIXQucGFyZW50Tm9kZS5sb29zZSxvPXQucHJldk5vZGUmJiJsaXN0SXRlbSI9PT10LnByZXZOb2RlLnR5cGUmJnQucHJldk5vZGUubG9vc2UsYT0ibmV4dCI9PT1pc1ByZXR0aWVySWdub3JlKHQucHJldk5vZGUpO3JldHVybiBvfHwhKHJ8fGl8fGEpfWZ1bmN0aW9uIHNob3VsZFByZVByaW50VHJpcGxlSGFyZGxpbmUoZSx0KXt2YXIgbj10LnByZXZOb2RlJiYibGlzdCI9PT10LnByZXZOb2RlLnR5cGUscj0iY29kZSI9PT1lLnR5cGUmJi9ccy8udGVzdCh0Lm9wdGlvbnMub3JpZ2luYWxUZXh0W2UucG9zaXRpb24uc3RhcnQub2Zmc2V0XSk7cmV0dXJuIG4mJnJ9ZnVuY3Rpb24gc2hvdWxkUmVtYWluVGhlU2FtZUNvbnRlbnQoZSl7dmFyIHQ9Z2V0QW5jZXN0b3JOb2RlJDIoZSxbImxpbmtSZWZlcmVuY2UiLCJpbWFnZVJlZmVyZW5jZSJdKTtyZXR1cm4gdCYmKCJsaW5rUmVmZXJlbmNlIiE9PXQudHlwZXx8ImZ1bGwiIT09dC5yZWZlcmVuY2VUeXBlKX1mdW5jdGlvbiBub3JtYWxpemVEb2MoZSl7cmV0dXJuIG1hcERvYyQzKGUsZnVuY3Rpb24oZSl7aWYoIWUucGFydHMpcmV0dXJuIGU7aWYoImNvbmNhdCI9PT1lLnR5cGUmJjE9PT1lLnBhcnRzLmxlbmd0aClyZXR1cm4gZS5wYXJ0c1swXTt2YXIgdD1bXTtyZXR1cm4gZS5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJjb25jYXQiPT09ZS50eXBlP3QucHVzaC5hcHBseSh0LGUucGFydHMpOiIiIT09ZSYmdC5wdXNoKGUpfSksT2JqZWN0LmFzc2lnbih7fSxlLHtwYXJ0czpub3JtYWxpemVQYXJ0cyh0KX0pfSl9ZnVuY3Rpb24gcHJpbnRVcmwoZSx0KXt2YXIgbj1bIiAiXS5jb25jYXQodHx8W10pO3JldHVybiBuZXcgUmVnRXhwKG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJcXCIuY29uY2F0KGUpfSkuam9pbigifCIpKS50ZXN0KGUpPyI8Ii5jb25jYXQoZSwiPiIpOmV9ZnVuY3Rpb24gcHJpbnRUaXRsZShlLHQsbil7aWYobnVsbD09biYmKG49ITApLCFlKXJldHVybiIiO2lmKG4pcmV0dXJuIiAiK3ByaW50VGl0bGUoZSx0LCExKTtpZihlLmluY2x1ZGVzKCciJykmJmUuaW5jbHVkZXMoIiciKSYmIWUuaW5jbHVkZXMoIikiKSlyZXR1cm4iKCIuY29uY2F0KGUsIikiKTt2YXIgcj1lLnNwbGl0KCInIikubGVuZ3RoLTEsaT1lLnNwbGl0KCciJykubGVuZ3RoLTEsbz1yPmk/JyInOmk+cj8iJyI6dC5zaW5nbGVRdW90ZT8iJyI6JyInO3JldHVybiBlPWUucmVwbGFjZShuZXcgUmVnRXhwKCIoIi5jb25jYXQobywiKSIpLCJnIiksIlxcJDEiKSwiIi5jb25jYXQobykuY29uY2F0KGUpLmNvbmNhdChvKX1mdW5jdGlvbiBub3JtYWxpemVQYXJ0cyhlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj11dGlsLmdldExhc3QoZSk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgbiYmInN0cmluZyI9PT10eXBlb2YgdD9lLnNwbGljZSgtMSwxLG4rdCk6ZS5wdXNoKHQpLGV9LFtdKX1mdW5jdGlvbiBjbGFtcChlLHQsbil7cmV0dXJuIGU8dD90OmU+bj9uOmV9ZnVuY3Rpb24gY2xlYW4kNihlLHQsbil7aWYoZGVsZXRlIHQucG9zaXRpb24sImNvZGUiPT09ZS50eXBlJiZkZWxldGUgdC52YWx1ZSwid2hpdGVzcGFjZSI9PT1lLnR5cGUmJiJcbiI9PT1lLnZhbHVlJiYodC52YWx1ZT0iICIpLG4mJiJyb290Ij09PW4udHlwZSYmbi5jaGlsZHJlbi5sZW5ndGg+MCYmKG4uY2hpbGRyZW5bMF09PT1lfHwiZnJvbnQtbWF0dGVyIj09PW4uY2hpbGRyZW5bMF0udHlwZSYmbi5jaGlsZHJlblsxXT09PWUpJiYiaHRtbCI9PT1lLnR5cGUmJnByYWdtYSQyLnN0YXJ0V2l0aFByYWdtYShlLnZhbHVlKSlyZXR1cm4gbnVsbH1mdW5jdGlvbiBoYXNQcmV0dGllcklnbm9yZSQxKGUpe3ZhciB0PStlLmdldE5hbWUoKTtyZXR1cm4gMCE9PXQmJiJuZXh0Ij09PWlzUHJldHRpZXJJZ25vcmUoZS5nZXRQYXJlbnROb2RlKCkuY2hpbGRyZW5bdC0xXSl9ZnVuY3Rpb24gZW1iZWQkNChlLHQsbixyKXt2YXIgaT1lLmdldFZhbHVlKCksbz1lLmdldFBhcmVudE5vZGUoKTtpZighb3x8InJvb3QiIT09by50YWd8fGkudW5hcnkpcmV0dXJuIG51bGw7dmFyIGE7aWYoInN0eWxlIj09PWkudGFnKXt2YXIgcz1pLmF0dHJzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuImxhbmciPT09ZS5uYW1lfSk7cyYmInBvc3Rjc3MiIT09cy52YWx1ZT8ic2NzcyI9PT1zLnZhbHVlP2E9InNjc3MiOiJsZXNzIj09PXMudmFsdWUmJihhPSJsZXNzIik6YT0iY3NzIn1pZigic2NyaXB0Ij09PWkudGFnKXt2YXIgdT1pLmF0dHJzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuImxhbmciPT09ZS5uYW1lfSk7dT8idHMiIT09dS52YWx1ZSYmInRzeCIhPT11LnZhbHVlfHwoYT0idHlwZXNjcmlwdCIpOmE9ImJhYnlsb24ifXJldHVybiBhP2NvbmNhdCQxMihbci5vcmlnaW5hbFRleHQuc2xpY2UoaS5zdGFydCxpLmNvbnRlbnRTdGFydCksaGFyZGxpbmUkMTEsbihyLm9yaWdpbmFsVGV4dC5zbGljZShpLmNvbnRlbnRTdGFydCxpLmNvbnRlbnRFbmQpLHtwYXJzZXI6YX0pLHIub3JpZ2luYWxUZXh0LnNsaWNlKGkuY29udGVudEVuZCxpLmVuZCldKTpudWxsfWZ1bmN0aW9uIGdlbmVyaWNQcmludCQ2KGUsdCxuKXt2YXIgcj1lLmdldFZhbHVlKCksaT1bXSxvPXIuc3RhcnQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lLmdldFZhbHVlKCk7aS5wdXNoKHQub3JpZ2luYWxUZXh0LnNsaWNlKG8sci5zdGFydCkpLGkucHVzaChlLmNhbGwobikpLG89ci5lbmR9LCJjaGlsZHJlbiIpLGkucHVzaCh0Lm9yaWdpbmFsVGV4dC5zbGljZShvLHIuZW5kKSksInJvb3QiPT09ci50YWcmJnIuY2hpbGRyZW4ubGVuZ3RoJiZpLnB1c2goaGFyZGxpbmUkMTApLGNvbmNhdCQxMShpKX1mdW5jdGlvbiB3aXRoUGx1Z2lucyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5mcm9tKGFyZ3VtZW50cyksbj10WzFdJiZ0WzFdLnBsdWdpbnN8fFtdO3JldHVybiBpc0FycmF5KG4pfHwobj1PYmplY3QudmFsdWVzKG4pKSx0WzFdPU9iamVjdC5hc3NpZ24oe30sdFsxXSx7cGx1Z2luczppbnRlcm5hbFBsdWdpbnMuY29uY2F0KG4pfSksZS5hcHBseShudWxsLHQpfX12YXIgbmFtZT0icHJldHRpZXIiLHZlcnNpb24kMT0iMS4xMy4yIixkZXNjcmlwdGlvbj0iUHJldHRpZXIgaXMgYW4gb3BpbmlvbmF0ZWQgY29kZSBmb3JtYXR0ZXIiLGJpbj17cHJldHRpZXI6Ii4vYmluL3ByZXR0aWVyLmpzIn0scmVwb3NpdG9yeT0icHJldHRpZXIvcHJldHRpZXIiLGhvbWVwYWdlPSJodHRwczovL3ByZXR0aWVyLmlvIixhdXRob3I9IkphbWVzIExvbmciLGxpY2Vuc2U9Ik1JVCIsbWFpbj0iLi9pbmRleC5qcyIsZW5naW5lcz17bm9kZToiPj02In0sZGVwZW5kZW5jaWVzPXsiQGJhYmVsL2NvZGUtZnJhbWUiOiI3LjAuMC1iZXRhLjQ5IiwiQGJhYmVsL3BhcnNlciI6IjcuMC4wLWJldGEuNDkiLCJAZ2xpbW1lci9zeW50YXgiOiIwLjMwLjMiLGNhbWVsY2FzZToiNC4xLjAiLGNoYWxrOiIyLjEuMCIsImNqay1yZWdleCI6IjEuMC4yIixjb3NtaWNvbmZpZzoiMy4xLjAiLGRhc2hpZnk6IjAuMi4yIixkZWRlbnQ6IjAuNy4wIixkaWZmOiIzLjIuMCIsZWRpdG9yY29uZmlnOiIwLjE1LjAiLCJlZGl0b3Jjb25maWctdG8tcHJldHRpZXIiOiIwLjAuNiIsImVtb2ppLXJlZ2V4IjoiNi41LjEiLCJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IjEuMC41Iixlc3V0aWxzOiIyLjAuMiIsImZpbmQtcGFyZW50LWRpciI6IjAuMy4wIiwiZmluZC1wcm9qZWN0LXJvb3QiOiIxLjEuMSIsImZsb3ctcGFyc2VyIjoiMC43My4wIiwiZ2V0LXN0cmVhbSI6IjMuMC4wIixnbG9iYnk6IjYuMS4wIixncmFwaHFsOiIwLjEzLjIiLCJodG1sLXRhZy1uYW1lcyI6IjEuMS4yIixpZ25vcmU6IjMuMy43IiwiamVzdC1kb2NibG9jayI6IjIyLjIuMiIsImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6IjEuMC4xIixsZXZlbjoiMi4xLjAiLCJsb2Rhc2gudW5pcWJ5IjoiNC43LjAiLG1lbToiMS4xLjAiLG1pbmltYXRjaDoiMy4wLjQiLG1pbmltaXN0OiIxLjIuMCIscGFyc2U1OiIzLjAuMyIsInBvc3Rjc3MtbGVzcyI6IjEuMS41IiwicG9zdGNzcy1tZWRpYS1xdWVyeS1wYXJzZXIiOiIwLjIuMyIsInBvc3Rjc3Mtc2NzcyI6IjEuMC41IiwicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiIyLjIuMyIsInBvc3Rjc3MtdmFsdWVzLXBhcnNlciI6IjEuNS4wIiwicmVtYXJrLXBhcnNlIjoiNS4wLjAiLHJlc29sdmU6IjEuNS4wIixzZW12ZXI6IjUuNC4xIiwic3RyaW5nLXdpZHRoIjoiMi4xLjEiLHR5cGVzY3JpcHQ6IjIuOS4wLWRldi4yMDE4MDQyMSIsInR5cGVzY3JpcHQtZXNsaW50LXBhcnNlciI6ImVzbGludC90eXBlc2NyaXB0LWVzbGludC1wYXJzZXIjMjk2MGIwMDI3NDZjMDFmYjljYjE1YmI1ZjRjMWU3ZTkyNWM2NTE5YSIsInVuaWNvZGUtcmVnZXgiOiIxLjAuMSIsdW5pZmllZDoiNi4xLjYifSxkZXZEZXBlbmRlbmNpZXM9eyJAYmFiZWwvY2xpIjoiNy4wLjAtYmV0YS40OSIsIkBiYWJlbC9jb3JlIjoiNy4wLjAtYmV0YS40OSIsIkBiYWJlbC9wcmVzZXQtZW52IjoiNy4wLjAtYmV0YS40OSIsImJ1aWx0aW4tbW9kdWxlcyI6IjIuMC4wIixjb2RlY292OiIyLjIuMCIsImNyb3NzLWVudiI6IjUuMC41Iixlc2xpbnQ6IjQuMTguMiIsImVzbGludC1jb25maWctcHJldHRpZXIiOiIyLjkuMCIsImVzbGludC1mcmllbmRseS1mb3JtYXR0ZXIiOiIzLjAuMCIsImVzbGludC1wbHVnaW4taW1wb3J0IjoiMi45LjAiLCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjoiMi42LjAiLCJlc2xpbnQtcGx1Z2luLXJlYWN0IjoiNy43LjAiLGplc3Q6IjIxLjEuMCIsbWtkaXJwOiIwLjUuMSIscHJldHRpZXI6IjEuMTMuMCIscHJldHR5bGludDoiMS4wLjAiLHJpbXJhZjoiMi42LjIiLHJvbGx1cDoiMC40Ny42Iiwicm9sbHVwLXBsdWdpbi1iYWJlbCI6IjQuMC4wLWJldGEuNCIsInJvbGx1cC1wbHVnaW4tY29tbW9uanMiOiI4LjIuNiIsInJvbGx1cC1wbHVnaW4tanNvbiI6IjIuMS4xIiwicm9sbHVwLXBsdWdpbi1ub2RlLWJ1aWx0aW5zIjoiMi4wLjAiLCJyb2xsdXAtcGx1Z2luLW5vZGUtZ2xvYmFscyI6IjEuMS4wIiwicm9sbHVwLXBsdWdpbi1ub2RlLXJlc29sdmUiOiIyLjAuMCIsInJvbGx1cC1wbHVnaW4tcmVwbGFjZSI6IjEuMi4xIiwicm9sbHVwLXBsdWdpbi11Z2xpZnkiOiIzLjAuMCIsc2hlbGxqczoiMC44LjEiLCJzbmFwc2hvdC1kaWZmIjoiMC4yLjIiLCJzdHJpcC1hbnNpIjoiNC4wLjAiLHRlbXB5OiIwLjIuMSIsd2VicGFjazoiMi42LjEifSxzY3JpcHRzPXtwcmVwdWJsaXNoT25seTonZWNobyAiRXJyb3I6IG11c3QgcHVibGlzaCBmcm9tIGRpc3QvIiAmJiBleGl0IDEnLCJwcmVwYXJlLXJlbGVhc2UiOiJ5YXJuICYmIHlhcm4gYnVpbGQgJiYgeWFybiB0ZXN0OmRpc3QiLHRlc3Q6Implc3QiLCJ0ZXN0OmRpc3QiOiJub2RlIC4vc2NyaXB0cy90ZXN0LWRpc3QuanMiLCJ0ZXN0LWludGVncmF0aW9uIjoiamVzdCB0ZXN0c19pbnRlZ3JhdGlvbiIsbGludDoiY3Jvc3MtZW52IEVGRl9OT19MSU5LX1JVTEVTPXRydWUgZXNsaW50IC4gLS1mb3JtYXQgbm9kZV9tb2R1bGVzL2VzbGludC1mcmllbmRseS1mb3JtYXR0ZXIiLCJsaW50LWRvY3MiOiJwcmV0dHlsaW50IHsuLGRvY3Msd2Vic2l0ZSx3ZWJzaXRlL2Jsb2d9LyoubWQiLGJ1aWxkOiJub2RlIC4vc2NyaXB0cy9idWlsZC9idWlsZC5qcyIsImJ1aWxkLWRvY3MiOiJub2RlIC4vc2NyaXB0cy9idWlsZC1kb2NzLmpzIiwiY2hlY2stZGVwcyI6Im5vZGUgLi9zY3JpcHRzL2NoZWNrLWRlcHMuanMifSxfcGFja2FnZT17bmFtZTpuYW1lLHZlcnNpb246dmVyc2lvbiQxLGRlc2NyaXB0aW9uOmRlc2NyaXB0aW9uLGJpbjpiaW4scmVwb3NpdG9yeTpyZXBvc2l0b3J5LGhvbWVwYWdlOmhvbWVwYWdlLGF1dGhvcjphdXRob3IsbGljZW5zZTpsaWNlbnNlLG1haW46bWFpbixlbmdpbmVzOmVuZ2luZXMsZGVwZW5kZW5jaWVzOmRlcGVuZGVuY2llcyxkZXZEZXBlbmRlbmNpZXM6ZGV2RGVwZW5kZW5jaWVzLHNjcmlwdHM6c2NyaXB0c30sX3BhY2thZ2UkMT1PYmplY3QuZnJlZXplKHtuYW1lOm5hbWUsdmVyc2lvbjp2ZXJzaW9uJDEsZGVzY3JpcHRpb246ZGVzY3JpcHRpb24sYmluOmJpbixyZXBvc2l0b3J5OnJlcG9zaXRvcnksaG9tZXBhZ2U6aG9tZXBhZ2UsYXV0aG9yOmF1dGhvcixsaWNlbnNlOmxpY2Vuc2UsbWFpbjptYWluLGVuZ2luZXM6ZW5naW5lcyxkZXBlbmRlbmNpZXM6ZGVwZW5kZW5jaWVzLGRldkRlcGVuZGVuY2llczpkZXZEZXBlbmRlbmNpZXMsc2NyaXB0czpzY3JpcHRzLGRlZmF1bHQ6X3BhY2thZ2V9KSxjb21tb25qc0dsb2JhbD0idW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT09dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZj9zZWxmOnt9LGJhc2U9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7fWZ1bmN0aW9uIHIoZSx0LG4scixpKXtmb3IodmFyIG89MCxhPXQubGVuZ3RoLHM9MCx1PTA7bzxhO28rKyl7dmFyIGM9dFtvXTtpZihjLnJlbW92ZWQpe2lmKGMudmFsdWU9ZS5qb2luKHIuc2xpY2UodSx1K2MuY291bnQpKSx1Kz1jLmNvdW50LG8mJnRbby0xXS5hZGRlZCl7dmFyIGw9dFtvLTFdO3Rbby0xXT10W29dLHRbb109bH19ZWxzZXtpZighYy5hZGRlZCYmaSl7dmFyIHA9bi5zbGljZShzLHMrYy5jb3VudCk7cD1wLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXJbdSt0XTtyZXR1cm4gbi5sZW5ndGg+ZS5sZW5ndGg/bjplfSksYy52YWx1ZT1lLmpvaW4ocCl9ZWxzZSBjLnZhbHVlPWUuam9pbihuLnNsaWNlKHMscytjLmNvdW50KSk7cys9Yy5jb3VudCxjLmFkZGVkfHwodSs9Yy5jb3VudCl9fXZhciBmPXRbYS0xXTtyZXR1cm4gYT4xJiYoZi5hZGRlZHx8Zi5yZW1vdmVkKSYmZS5lcXVhbHMoIiIsZi52YWx1ZSkmJih0W2EtMl0udmFsdWUrPWYudmFsdWUsdC5wb3AoKSksdH1mdW5jdGlvbiBpKGUpe3JldHVybntuZXdQb3M6ZS5uZXdQb3MsY29tcG9uZW50czplLmNvbXBvbmVudHMuc2xpY2UoMCl9fXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9bixuLnByb3RvdHlwZT17ZGlmZjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHM/KHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzKHZvaWQgMCxlKX0sMCksITApOmV9ZnVuY3Rpb24gbygpe2Zvcih2YXIgbz0tMSpwO288PXA7bys9Mil7dmFyIGE9dm9pZCAwLHM9ZFtvLTFdLGY9ZFtvKzFdLGg9KGY/Zi5uZXdQb3M6MCktbztzJiYoZFtvLTFdPXZvaWQgMCk7dmFyIG09cyYmcy5uZXdQb3MrMTxjLGc9ZiYmMDw9aCYmaDxsO2lmKG18fGcpe2lmKCFtfHxnJiZzLm5ld1BvczxmLm5ld1Bvcz8oYT1pKGYpLHUucHVzaENvbXBvbmVudChhLmNvbXBvbmVudHMsdm9pZCAwLCEwKSk6KGE9cyxhLm5ld1BvcysrLHUucHVzaENvbXBvbmVudChhLmNvbXBvbmVudHMsITAsdm9pZCAwKSksaD11LmV4dHJhY3RDb21tb24oYSx0LGUsbyksYS5uZXdQb3MrMT49YyYmaCsxPj1sKXJldHVybiBuKHIodSxhLmNvbXBvbmVudHMsdCxlLHUudXNlTG9uZ2VzdFRva2VuKSk7ZFtvXT1hfWVsc2UgZFtvXT12b2lkIDB9cCsrfXZhciBhPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT97fTphcmd1bWVudHNbMl0scz1hLmNhbGxiYWNrOyJmdW5jdGlvbiI9PT10eXBlb2YgYSYmKHM9YSxhPXt9KSx0aGlzLm9wdGlvbnM9YTt2YXIgdT10aGlzO2U9dGhpcy5jYXN0SW5wdXQoZSksdD10aGlzLmNhc3RJbnB1dCh0KSxlPXRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShlKSksdD10aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUodCkpO3ZhciBjPXQubGVuZ3RoLGw9ZS5sZW5ndGgscD0xLGY9YytsLGQ9W3tuZXdQb3M6LTEsY29tcG9uZW50czpbXX1dLGg9dGhpcy5leHRyYWN0Q29tbW9uKGRbMF0sdCxlLDApO2lmKGRbMF0ubmV3UG9zKzE+PWMmJmgrMT49bClyZXR1cm4gbihbe3ZhbHVlOnRoaXMuam9pbih0KSxjb3VudDp0Lmxlbmd0aH1dKTtpZihzKSFmdW5jdGlvbiBlKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKHA+ZilyZXR1cm4gcygpO28oKXx8ZSgpfSwwKX0oKTtlbHNlIGZvcig7cDw9Zjspe3ZhciBtPW8oKTtpZihtKXJldHVybiBtfX0scHVzaENvbXBvbmVudDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZVtlLmxlbmd0aC0xXTtyJiZyLmFkZGVkPT09dCYmci5yZW1vdmVkPT09bj9lW2UubGVuZ3RoLTFdPXtjb3VudDpyLmNvdW50KzEsYWRkZWQ6dCxyZW1vdmVkOm59OmUucHVzaCh7Y291bnQ6MSxhZGRlZDp0LHJlbW92ZWQ6bn0pfSxleHRyYWN0Q29tbW9uOmZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPW4ubGVuZ3RoLGE9ZS5uZXdQb3Mscz1hLXIsdT0wO2ErMTxpJiZzKzE8byYmdGhpcy5lcXVhbHModFthKzFdLG5bcysxXSk7KWErKyxzKyssdSsrO3JldHVybiB1JiZlLmNvbXBvbmVudHMucHVzaCh7Y291bnQ6dX0pLGUubmV3UG9zPWEsc30sZXF1YWxzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fSxyZW1vdmVFbXB0eTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKWVbbl0mJnQucHVzaChlW25dKTtyZXR1cm4gdH0sY2FzdElucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSx0b2tlbml6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiIil9LGpvaW46ZnVuY3Rpb24oZSl7cmV0dXJuIGUuam9pbigiIil9fX0pO3Vud3JhcEV4cG9ydHMoYmFzZSk7dmFyIGNoYXJhY3Rlcj1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBpLmRpZmYoZSx0LG4pfXQuX19lc01vZHVsZT0hMCx0LmNoYXJhY3RlckRpZmY9dm9pZCAwLHQuZGlmZkNoYXJzPW47dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShiYXNlKSxpPXQuY2hhcmFjdGVyRGlmZj1uZXcgci5kZWZhdWx0fSk7dW53cmFwRXhwb3J0cyhjaGFyYWN0ZXIpO3ZhciBwYXJhbXM9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBlKXQuY2FsbGJhY2s9ZTtlbHNlIGlmKGUpZm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dC5fX2VzTW9kdWxlPSEwLHQuZ2VuZXJhdGVPcHRpb25zPW59KTt1bndyYXBFeHBvcnRzKHBhcmFtcyk7dmFyIHdvcmQ9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXt2YXIgcj0oMCxwYXJhbXMuZ2VuZXJhdGVPcHRpb25zKShuLHtpZ25vcmVXaGl0ZXNwYWNlOiEwfSk7cmV0dXJuIHMuZGlmZihlLHQscil9ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHMuZGlmZihlLHQsbil9dC5fX2VzTW9kdWxlPSEwLHQud29yZERpZmY9dm9pZCAwLHQuZGlmZldvcmRzPW4sdC5kaWZmV29yZHNXaXRoU3BhY2U9cjt2YXIgaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGJhc2UpLG89L15bQS1aYS16XHhDMC1cdTAyQzZcdTAyQzgtXHUwMkQ3XHUwMkRFLVx1MDJGRlx1MUUwMC1cdTFFRkZdKyQvLGE9L1xTLyxzPXQud29yZERpZmY9bmV3IGkuZGVmYXVsdDtzLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8dGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UmJiFhLnRlc3QoZSkmJiFhLnRlc3QodCl9LHMudG9rZW5pemU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc3BsaXQoLyhccyt8XGIpLyksbj0wO248dC5sZW5ndGgtMTtuKyspIXRbbisxXSYmdFtuKzJdJiZvLnRlc3QodFtuXSkmJm8udGVzdCh0W24rMl0pJiYodFtuXSs9dFtuKzJdLHQuc3BsaWNlKG4rMSwyKSxuLS0pO3JldHVybiB0fX0pO3Vud3JhcEV4cG9ydHMod29yZCk7dmFyIGxpbmU9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4gby5kaWZmKGUsdCxuKX1mdW5jdGlvbiByKGUsdCxuKXt2YXIgcj0oMCxwYXJhbXMuZ2VuZXJhdGVPcHRpb25zKShuLHtpZ25vcmVXaGl0ZXNwYWNlOiEwfSk7cmV0dXJuIG8uZGlmZihlLHQscil9dC5fX2VzTW9kdWxlPSEwLHQubGluZURpZmY9dm9pZCAwLHQuZGlmZkxpbmVzPW4sdC5kaWZmVHJpbW1lZExpbmVzPXI7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShiYXNlKSxvPXQubGluZURpZmY9bmV3IGkuZGVmYXVsdDtvLnRva2VuaXplPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZS5zcGxpdCgvKFxufFxyXG4pLyk7bltuLmxlbmd0aC0xXXx8bi5wb3AoKTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtyJTImJiF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4/dFt0Lmxlbmd0aC0xXSs9aToodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UmJihpPWkudHJpbSgpKSx0LnB1c2goaSkpfXJldHVybiB0fX0pO3Vud3JhcEV4cG9ydHMobGluZSk7dmFyIHNlbnRlbmNlPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGkuZGlmZihlLHQsbil9dC5fX2VzTW9kdWxlPSEwLHQuc2VudGVuY2VEaWZmPXZvaWQgMCx0LmRpZmZTZW50ZW5jZXM9bjt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGJhc2UpLGk9dC5zZW50ZW5jZURpZmY9bmV3IHIuZGVmYXVsdDtpLnRva2VuaXplPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KC8oXFMuKz9bLiE/XSkoPz1ccyt8JCkvKX19KTt1bndyYXBFeHBvcnRzKHNlbnRlbmNlKTt2YXIgY3NzPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGkuZGlmZihlLHQsbil9dC5fX2VzTW9kdWxlPSEwLHQuY3NzRGlmZj12b2lkIDAsdC5kaWZmQ3NzPW47dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShiYXNlKSxpPXQuY3NzRGlmZj1uZXcgci5kZWZhdWx0O2kudG9rZW5pemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoLyhbe306OyxdfFxzKykvKX19KTt1bndyYXBFeHBvcnRzKGNzcyk7dmFyIGpzb249Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4gcy5kaWZmKGUsdCxuKX1mdW5jdGlvbiByKGUsdCxuKXt0PXR8fFtdLG49bnx8W107dmFyIG89dm9pZCAwO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKz0xKWlmKHRbb109PT1lKXJldHVybiBuW29dO3ZhciBzPXZvaWQgMDtpZigiW29iamVjdCBBcnJheV0iPT09YS5jYWxsKGUpKXtmb3IodC5wdXNoKGUpLHM9bmV3IEFycmF5KGUubGVuZ3RoKSxuLnB1c2gocyksbz0wO288ZS5sZW5ndGg7bys9MSlzW29dPXIoZVtvXSx0LG4pO3JldHVybiB0LnBvcCgpLG4ucG9wKCksc31pZihlJiZlLnRvSlNPTiYmKGU9ZS50b0pTT04oKSksIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjppKGUpKSYmbnVsbCE9PWUpe3QucHVzaChlKSxzPXt9LG4ucHVzaChzKTt2YXIgdT1bXSxjPXZvaWQgMDtmb3IoYyBpbiBlKWUuaGFzT3duUHJvcGVydHkoYykmJnUucHVzaChjKTtmb3IodS5zb3J0KCksbz0wO288dS5sZW5ndGg7bys9MSljPXVbb10sc1tjXT1yKGVbY10sdCxuKTt0LnBvcCgpLG4ucG9wKCl9ZWxzZSBzPWU7cmV0dXJuIHN9dC5fX2VzTW9kdWxlPSEwLHQuanNvbkRpZmY9dm9pZCAwO3ZhciBpPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PV90eXBlb2YoU3ltYm9sLml0ZXJhdG9yKT9mdW5jdGlvbihlKXtyZXR1cm4gX3R5cGVvZihlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sPyJzeW1ib2wiOl90eXBlb2YoZSl9O3QuZGlmZkpzb249bix0LmNhbm9uaWNhbGl6ZT1yO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oYmFzZSksYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHM9dC5qc29uRGlmZj1uZXcgby5kZWZhdWx0O3MudXNlTG9uZ2VzdFRva2VuPSEwLHMudG9rZW5pemU9bGluZS5saW5lRGlmZi50b2tlbml6ZSxzLmNhc3RJbnB1dD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnMudW5kZWZpbmVkUmVwbGFjZW1lbnQ7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZT9lOkpTT04uc3RyaW5naWZ5KHIoZSksZnVuY3Rpb24oZSxuKXtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBuP3Q6bn0sIiAgIil9LHMuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8uZGVmYXVsdC5wcm90b3R5cGUuZXF1YWxzKGUucmVwbGFjZSgvLChbXHJcbl0pL2csIiQxIiksdC5yZXBsYWNlKC8sKFtcclxuXSkvZywiJDEiKSl9fSk7dW53cmFwRXhwb3J0cyhqc29uKTt2YXIgYXJyYXk9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4gaS5kaWZmKGUsdCxuKX10Ll9fZXNNb2R1bGU9ITAsdC5hcnJheURpZmY9dm9pZCAwLHQuZGlmZkFycmF5cz1uO3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oYmFzZSksaT10LmFycmF5RGlmZj1uZXcgci5kZWZhdWx0O2kudG9rZW5pemU9aS5qb2luPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9fSk7dW53cmFwRXhwb3J0cyhhcnJheSk7dmFyIHBhcnNlPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtmdW5jdGlvbiB0KGUpe3ZhciB0PS9eKC0tLXxcK1wrXCspXHMrKFtcUyBdKikoPzpcdCguKj8pXHMqKT8kLyxuPXQuZXhlYyhpW3NdKTtpZihuKXt2YXIgcj0iLS0tIj09PW5bMV0/Im9sZCI6Im5ldyI7ZVtyKyJGaWxlTmFtZSJdPW5bMl0sZVtyKyJIZWFkZXIiXT1uWzNdLHMrK319ZnVuY3Rpb24gbigpe2Zvcih2YXIgZT1zLHQ9aVtzKytdLG49dC5zcGxpdCgvQEAgLShcZCspKD86LChcZCspKT8gXCsoXGQrKSg/OiwoXGQrKSk/IEBALyksYT17b2xkU3RhcnQ6K25bMV0sb2xkTGluZXM6K25bMl18fDEsbmV3U3RhcnQ6K25bM10sbmV3TGluZXM6K25bNF18fDEsbGluZXM6W10sbGluZWRlbGltaXRlcnM6W119LHU9MCxjPTA7czxpLmxlbmd0aCYmISgwPT09aVtzXS5pbmRleE9mKCItLS0gIikmJnMrMjxpLmxlbmd0aCYmMD09PWlbcysxXS5pbmRleE9mKCIrKysgIikmJjA9PT1pW3MrMl0uaW5kZXhPZigiQEAiKSk7cysrKXt2YXIgbD1pW3NdWzBdO2lmKCIrIiE9PWwmJiItIiE9PWwmJiIgIiE9PWwmJiJcXCIhPT1sKWJyZWFrO2EubGluZXMucHVzaChpW3NdKSxhLmxpbmVkZWxpbWl0ZXJzLnB1c2gob1tzXXx8IlxuIiksIisiPT09bD91Kys6Ii0iPT09bD9jKys6IiAiPT09bCYmKHUrKyxjKyspfWlmKHV8fDEhPT1hLm5ld0xpbmVzfHwoYS5uZXdMaW5lcz0wKSxjfHwxIT09YS5vbGRMaW5lc3x8KGEub2xkTGluZXM9MCksci5zdHJpY3Qpe2lmKHUhPT1hLm5ld0xpbmVzKXRocm93IG5ldyBFcnJvcigiQWRkZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgIisoZSsxKSk7aWYoYyE9PWEub2xkTGluZXMpdGhyb3cgbmV3IEVycm9yKCJSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICIrKGUrMSkpfXJldHVybiBhfWZvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdLGk9ZS5zcGxpdCgvXHJcbnxbXG5cdlxmXHJceDg1XS8pLG89ZS5tYXRjaCgvXHJcbnxbXG5cdlxmXHJceDg1XS9nKXx8W10sYT1bXSxzPTA7czxpLmxlbmd0aDspIWZ1bmN0aW9uKCl7dmFyIGU9e307Zm9yKGEucHVzaChlKTtzPGkubGVuZ3RoOyl7dmFyIG89aVtzXTtpZigvXihcLVwtXC18XCtcK1wrfEBAKVxzLy50ZXN0KG8pKWJyZWFrO3ZhciB1PS9eKD86SW5kZXg6fGRpZmYoPzogLXIgXHcrKSspXHMrKC4rPylccyokLy5leGVjKG8pO3UmJihlLmluZGV4PXVbMV0pLHMrK31mb3IodChlKSx0KGUpLGUuaHVua3M9W107czxpLmxlbmd0aDspe3ZhciBjPWlbc107aWYoL14oSW5kZXg6fGRpZmZ8XC1cLVwtfFwrXCtcKylccy8udGVzdChjKSlicmVhaztpZigvXkBALy50ZXN0KGMpKWUuaHVua3MucHVzaChuKCkpO2Vsc2V7aWYoYyYmci5zdHJpY3QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGxpbmUgIisocysxKSsiICIrSlNPTi5zdHJpbmdpZnkoYykpO3MrK319fSgpO3JldHVybiBhfXQuX19lc01vZHVsZT0hMCx0LnBhcnNlUGF0Y2g9bn0pO3Vud3JhcEV4cG9ydHMocGFyc2UpO3ZhciBkaXN0YW5jZUl0ZXJhdG9yPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ITAsaT0hMSxvPSExLGE9MTtyZXR1cm4gZnVuY3Rpb24gcygpe2lmKHImJiFvKXtpZihpP2ErKzpyPSExLGUrYTw9bilyZXR1cm4gYTtvPSEwfWlmKCFpKXJldHVybiBvfHwocj0hMCksdDw9ZS1hPy1hKys6KGk9ITAscygpKX19fSk7dW53cmFwRXhwb3J0cyhkaXN0YW5jZUl0ZXJhdG9yKTt2YXIgYXBwbHk9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDw9Mnx8dm9pZCAwPT09YXJndW1lbnRzWzJdP3t9OmFyZ3VtZW50c1syXTtpZigic3RyaW5nIj09PXR5cGVvZiB0JiYodD0oMCxwYXJzZS5wYXJzZVBhdGNoKSh0KSksQXJyYXkuaXNBcnJheSh0KSl7aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoImFwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LiIpO3Q9dFswXX1mb3IodmFyIHI9ZS5zcGxpdCgvXHJcbnxbXG5cdlxmXHJceDg1XS8pLG89ZS5tYXRjaCgvXHJcbnxbXG5cdlxmXHJceDg1XS9nKXx8W10sYT10Lmh1bmtzLHM9bi5jb21wYXJlTGluZXx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHQ9PT1yfSx1PTAsYz1uLmZ1enpGYWN0b3J8fDAsbD0wLHA9MCxmPXZvaWQgMCxkPXZvaWQgMCxoPTA7aDxhLmxlbmd0aDtoKyspe2Zvcih2YXIgbT1hW2hdLGc9ci5sZW5ndGgtbS5vbGRMaW5lcyx5PTAsdj1wK20ub2xkU3RhcnQtMSxiPSgwLGkuZGVmYXVsdCkodixsLGcpO3ZvaWQgMCE9PXk7eT1iKCkpaWYoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGluZXMubGVuZ3RoO24rKyl7dmFyIGk9ZS5saW5lc1tuXSxvPWlbMF0sYT1pLnN1YnN0cigxKTtpZigiICI9PT1vfHwiLSI9PT1vKXtpZighcyh0KzEsclt0XSxvLGEpJiYrK3U+YylyZXR1cm4hMTt0Kyt9fXJldHVybiEwfShtLHYreSkpe20ub2Zmc2V0PXArPXk7YnJlYWt9aWYodm9pZCAwPT09eSlyZXR1cm4hMTtsPW0ub2Zmc2V0K20ub2xkU3RhcnQrbS5vbGRMaW5lc31mb3IodmFyIHg9MDt4PGEubGVuZ3RoO3grKyl7dmFyIEM9YVt4XSxFPUMub2Zmc2V0K0MubmV3U3RhcnQtMTswPT1DLm5ld0xpbmVzJiZFKys7Zm9yKHZhciBEPTA7RDxDLmxpbmVzLmxlbmd0aDtEKyspe3ZhciB3PUMubGluZXNbRF0sUz13WzBdLGs9dy5zdWJzdHIoMSksQT1DLmxpbmVkZWxpbWl0ZXJzW0RdO2lmKCIgIj09PVMpRSsrO2Vsc2UgaWYoIi0iPT09UylyLnNwbGljZShFLDEpLG8uc3BsaWNlKEUsMSk7ZWxzZSBpZigiKyI9PT1TKXIuc3BsaWNlKEUsMCxrKSxvLnNwbGljZShFLDAsQSksRSsrO2Vsc2UgaWYoIlxcIj09PVMpe3ZhciBfPUMubGluZXNbRC0xXT9DLmxpbmVzW0QtMV1bMF06bnVsbDsiKyI9PT1fP2Y9ITA6Ii0iPT09XyYmKGQ9ITApfX19aWYoZilmb3IoOyFyW3IubGVuZ3RoLTFdOylyLnBvcCgpLG8ucG9wKCk7ZWxzZSBkJiYoci5wdXNoKCIiKSxvLnB1c2goIlxuIikpO2Zvcih2YXIgVD0wO1Q8ci5sZW5ndGgtMTtUKyspcltUXT1yW1RdK29bVF07cmV0dXJuIHIuam9pbigiIil9ZnVuY3Rpb24gcihlLHQpe2Z1bmN0aW9uIHIoKXt2YXIgbz1lW2krK107aWYoIW8pcmV0dXJuIHQuY29tcGxldGUoKTt0LmxvYWRGaWxlKG8sZnVuY3Rpb24oZSxpKXtpZihlKXJldHVybiB0LmNvbXBsZXRlKGUpO3ZhciBhPW4oaSxvLHQpO3QucGF0Y2hlZChvLGEsZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gdC5jb21wbGV0ZShlKTtyKCl9KX0pfSJzdHJpbmciPT09dHlwZW9mIGUmJihlPSgwLHBhcnNlLnBhcnNlUGF0Y2gpKGUpKTt2YXIgaT0wO3IoKX10Ll9fZXNNb2R1bGU9ITAsdC5hcHBseVBhdGNoPW4sdC5hcHBseVBhdGNoZXM9cjt2YXIgaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGRpc3RhbmNlSXRlcmF0b3IpfSk7dW53cmFwRXhwb3J0cyhhcHBseSk7dmFyIGNyZWF0ZT1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIHIoZSx0LHIsaSxvLGEscyl7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIiAiK2V9KX1zfHwocz17fSksInVuZGVmaW5lZCI9PT10eXBlb2Ygcy5jb250ZXh0JiYocy5jb250ZXh0PTQpO3ZhciBjPSgwLGxpbmUuZGlmZkxpbmVzKShyLGkscyk7Yy5wdXNoKHt2YWx1ZToiIixsaW5lczpbXX0pO2Zvcih2YXIgbD1bXSxwPTAsZj0wLGQ9W10saD0xLG09MSxnPTA7ZzxjLmxlbmd0aDtnKyspIWZ1bmN0aW9uKGUpe3ZhciB0PWNbZV0sbz10LmxpbmVzfHx0LnZhbHVlLnJlcGxhY2UoL1xuJC8sIiIpLnNwbGl0KCJcbiIpO2lmKHQubGluZXM9byx0LmFkZGVkfHx0LnJlbW92ZWQpe3ZhciBhO2lmKCFwKXt2YXIgZz1jW2UtMV07cD1oLGY9bSxnJiYoZD1zLmNvbnRleHQ+MD91KGcubGluZXMuc2xpY2UoLXMuY29udGV4dCkpOltdLHAtPWQubGVuZ3RoLGYtPWQubGVuZ3RoKX0oYT1kKS5wdXNoLmFwcGx5KGEsbihvLm1hcChmdW5jdGlvbihlKXtyZXR1cm4odC5hZGRlZD8iKyI6Ii0iKStlfSkpKSx0LmFkZGVkP20rPW8ubGVuZ3RoOmgrPW8ubGVuZ3RofWVsc2V7aWYocClpZihvLmxlbmd0aDw9MipzLmNvbnRleHQmJmU8Yy5sZW5ndGgtMil7dmFyIHk7KHk9ZCkucHVzaC5hcHBseSh5LG4odShvKSkpfWVsc2V7dmFyIHYsYj1NYXRoLm1pbihvLmxlbmd0aCxzLmNvbnRleHQpOyh2PWQpLnB1c2guYXBwbHkodixuKHUoby5zbGljZSgwLGIpKSkpO3ZhciB4PXtvbGRTdGFydDpwLG9sZExpbmVzOmgtcCtiLG5ld1N0YXJ0OmYsbmV3TGluZXM6bS1mK2IsbGluZXM6ZH07aWYoZT49Yy5sZW5ndGgtMiYmby5sZW5ndGg8PXMuY29udGV4dCl7dmFyIEM9L1xuJC8udGVzdChyKSxFPS9cbiQvLnRlc3QoaSk7MCE9by5sZW5ndGh8fEM/QyYmRXx8ZC5wdXNoKCJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIik6ZC5zcGxpY2UoeC5vbGRMaW5lcywwLCJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIil9bC5wdXNoKHgpLHA9MCxmPTAsZD1bXX1oKz1vLmxlbmd0aCxtKz1vLmxlbmd0aH19KGcpO3JldHVybntvbGRGaWxlTmFtZTplLG5ld0ZpbGVOYW1lOnQsb2xkSGVhZGVyOm8sbmV3SGVhZGVyOmEsaHVua3M6bH19ZnVuY3Rpb24gaShlLHQsbixpLG8sYSxzKXt2YXIgdT1yKGUsdCxuLGksbyxhLHMpLGM9W107ZT09dCYmYy5wdXNoKCJJbmRleDogIitlKSxjLnB1c2goIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKSxjLnB1c2goIi0tLSAiK3Uub2xkRmlsZU5hbWUrKCJ1bmRlZmluZWQiPT09dHlwZW9mIHUub2xkSGVhZGVyPyIiOiJcdCIrdS5vbGRIZWFkZXIpKSxjLnB1c2goIisrKyAiK3UubmV3RmlsZU5hbWUrKCJ1bmRlZmluZWQiPT09dHlwZW9mIHUubmV3SGVhZGVyPyIiOiJcdCIrdS5uZXdIZWFkZXIpKTtmb3IodmFyIGw9MDtsPHUuaHVua3MubGVuZ3RoO2wrKyl7dmFyIHA9dS5odW5rc1tsXTtjLnB1c2goIkBAIC0iK3Aub2xkU3RhcnQrIiwiK3Aub2xkTGluZXMrIiArIitwLm5ld1N0YXJ0KyIsIitwLm5ld0xpbmVzKyIgQEAiKSxjLnB1c2guYXBwbHkoYyxwLmxpbmVzKX1yZXR1cm4gYy5qb2luKCJcbiIpKyJcbiJ9ZnVuY3Rpb24gbyhlLHQsbixyLG8sYSl7cmV0dXJuIGkoZSxlLHQsbixyLG8sYSl9dC5fX2VzTW9kdWxlPSEwLHQuc3RydWN0dXJlZFBhdGNoPXIsdC5jcmVhdGVUd29GaWxlc1BhdGNoPWksdC5jcmVhdGVQYXRjaD1vfSk7dW53cmFwRXhwb3J0cyhjcmVhdGUpO3ZhciBkbXA9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1bXSxuPXZvaWQgMCxyPXZvaWQgMCxpPTA7aTxlLmxlbmd0aDtpKyspbj1lW2ldLHI9bi5hZGRlZD8xOm4ucmVtb3ZlZD8tMTowLHQucHVzaChbcixuLnZhbHVlXSk7cmV0dXJuIHR9dC5fX2VzTW9kdWxlPSEwLHQuY29udmVydENoYW5nZXNUb0RNUD1ufSk7dW53cmFwRXhwb3J0cyhkbXApO3ZhciB4bWw9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5hZGRlZD90LnB1c2goIjxpbnM+Iik6aS5yZW1vdmVkJiZ0LnB1c2goIjxkZWw+IiksdC5wdXNoKHIoaS52YWx1ZSkpLGkuYWRkZWQ/dC5wdXNoKCI8L2lucz4iKTppLnJlbW92ZWQmJnQucHVzaCgiPC9kZWw+Iil9cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gcihlKXt2YXIgdD1lO3JldHVybiB0PXQucmVwbGFjZSgvJi9nLCImYW1wOyIpLHQ9dC5yZXBsYWNlKC88L2csIiZsdDsiKSx0PXQucmVwbGFjZSgvPi9nLCImZ3Q7IiksdD10LnJlcGxhY2UoLyIvZywiJnF1b3Q7Iil9dC5fX2VzTW9kdWxlPSEwLHQuY29udmVydENoYW5nZXNUb1hNTD1ufSk7dW53cmFwRXhwb3J0cyh4bWwpO3ZhciBsaWI9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXt0Ll9fZXNNb2R1bGU9ITAsdC5jYW5vbmljYWxpemU9dC5jb252ZXJ0Q2hhbmdlc1RvWE1MPXQuY29udmVydENoYW5nZXNUb0RNUD10LnBhcnNlUGF0Y2g9dC5hcHBseVBhdGNoZXM9dC5hcHBseVBhdGNoPXQuY3JlYXRlUGF0Y2g9dC5jcmVhdGVUd29GaWxlc1BhdGNoPXQuc3RydWN0dXJlZFBhdGNoPXQuZGlmZkFycmF5cz10LmRpZmZKc29uPXQuZGlmZkNzcz10LmRpZmZTZW50ZW5jZXM9dC5kaWZmVHJpbW1lZExpbmVzPXQuZGlmZkxpbmVzPXQuZGlmZldvcmRzV2l0aFNwYWNlPXQuZGlmZldvcmRzPXQuZGlmZkNoYXJzPXQuRGlmZj12b2lkIDA7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShiYXNlKTt0LkRpZmY9bi5kZWZhdWx0LHQuZGlmZkNoYXJzPWNoYXJhY3Rlci5kaWZmQ2hhcnMsdC5kaWZmV29yZHM9d29yZC5kaWZmV29yZHMsdC5kaWZmV29yZHNXaXRoU3BhY2U9d29yZC5kaWZmV29yZHNXaXRoU3BhY2UsdC5kaWZmTGluZXM9bGluZS5kaWZmTGluZXMsdC5kaWZmVHJpbW1lZExpbmVzPWxpbmUuZGlmZlRyaW1tZWRMaW5lcyx0LmRpZmZTZW50ZW5jZXM9c2VudGVuY2UuZGlmZlNlbnRlbmNlcyx0LmRpZmZDc3M9Y3NzLmRpZmZDc3MsdC5kaWZmSnNvbj1qc29uLmRpZmZKc29uLHQuZGlmZkFycmF5cz1hcnJheS5kaWZmQXJyYXlzLHQuc3RydWN0dXJlZFBhdGNoPWNyZWF0ZS5zdHJ1Y3R1cmVkUGF0Y2gsdC5jcmVhdGVUd29GaWxlc1BhdGNoPWNyZWF0ZS5jcmVhdGVUd29GaWxlc1BhdGNoLHQuY3JlYXRlUGF0Y2g9Y3JlYXRlLmNyZWF0ZVBhdGNoLHQuYXBwbHlQYXRjaD1hcHBseS5hcHBseVBhdGNoLHQuYXBwbHlQYXRjaGVzPWFwcGx5LmFwcGx5UGF0Y2hlcyx0LnBhcnNlUGF0Y2g9cGFyc2UucGFyc2VQYXRjaCx0LmNvbnZlcnRDaGFuZ2VzVG9ETVA9ZG1wLmNvbnZlcnRDaGFuZ2VzVG9ETVAsdC5jb252ZXJ0Q2hhbmdlc1RvWE1MPXhtbC5jb252ZXJ0Q2hhbmdlc1RvWE1MLHQuY2Fub25pY2FsaXplPWpzb24uY2Fub25pY2FsaXplfSk7dW53cmFwRXhwb3J0cyhsaWIpO3ZhciBDb25maWdFcnJvcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsX2dldFByb3RvdHlwZU9mKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyh0LGUpLHR9KF93cmFwTmF0aXZlU3VwZXIoRXJyb3IpKSxEZWJ1Z0Vycm9yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcyxfZ2V0UHJvdG90eXBlT2YodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKHQsZSksdH0oX3dyYXBOYXRpdmVTdXBlcihFcnJvcikpLFVuZGVmaW5lZFBhcnNlckVycm9yJDE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLF9nZXRQcm90b3R5cGVPZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHModCxlKSx0fShfd3JhcE5hdGl2ZVN1cGVyKEVycm9yKSksZXJyb3JzPXtDb25maWdFcnJvcjpDb25maWdFcnJvcixEZWJ1Z0Vycm9yOkRlYnVnRXJyb3IsVW5kZWZpbmVkUGFyc2VyRXJyb3I6VW5kZWZpbmVkUGFyc2VyRXJyb3IkMX0sZ2xvYmFsJDE9InVuZGVmaW5lZCIhPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxjYWNoZWRTZXRUaW1lb3V0PWRlZmF1bHRTZXRUaW1vdXQsY2FjaGVkQ2xlYXJUaW1lb3V0PWRlZmF1bHRDbGVhclRpbWVvdXQ7ImZ1bmN0aW9uIj09PXR5cGVvZiBnbG9iYWwkMS5zZXRUaW1lb3V0JiYoY2FjaGVkU2V0VGltZW91dD1zZXRUaW1lb3V0KSwiZnVuY3Rpb24iPT09dHlwZW9mIGdsb2JhbCQxLmNsZWFyVGltZW91dCYmKGNhY2hlZENsZWFyVGltZW91dD1jbGVhclRpbWVvdXQpO3ZhciBxdWV1ZT1bXSxkcmFpbmluZz0hMSxjdXJyZW50UXVldWUscXVldWVJbmRleD0tMTtJdGVtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTt2YXIgdGl0bGU9ImJyb3dzZXIiLHBsYXRmb3JtPSJicm93c2VyIixicm93c2VyPSEwLGVudj17fSxhcmd2PVtdLHZlcnNpb24kMj0iIix2ZXJzaW9ucz17fSxyZWxlYXNlPXt9LGNvbmZpZz17fSxvbj1ub29wLGFkZExpc3RlbmVyPW5vb3Asb25jZT1ub29wLG9mZj1ub29wLHJlbW92ZUxpc3RlbmVyPW5vb3AscmVtb3ZlQWxsTGlzdGVuZXJzPW5vb3AsZW1pdD1ub29wLHBlcmZvcm1hbmNlPWdsb2JhbCQxLnBlcmZvcm1hbmNlfHx7fSxwZXJmb3JtYW5jZU5vdz1wZXJmb3JtYW5jZS5ub3d8fHBlcmZvcm1hbmNlLm1vek5vd3x8cGVyZm9ybWFuY2UubXNOb3d8fHBlcmZvcm1hbmNlLm9Ob3d8fHBlcmZvcm1hbmNlLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sc3RhcnRUaW1lPW5ldyBEYXRlLHByb2Nlc3M9e25leHRUaWNrOm5leHRUaWNrLHRpdGxlOnRpdGxlLGJyb3dzZXI6YnJvd3NlcixlbnY6ZW52LGFyZ3Y6YXJndix2ZXJzaW9uOnZlcnNpb24kMix2ZXJzaW9uczp2ZXJzaW9ucyxvbjpvbixhZGRMaXN0ZW5lcjphZGRMaXN0ZW5lcixvbmNlOm9uY2Usb2ZmOm9mZixyZW1vdmVMaXN0ZW5lcjpyZW1vdmVMaXN0ZW5lcixyZW1vdmVBbGxMaXN0ZW5lcnM6cmVtb3ZlQWxsTGlzdGVuZXJzLGVtaXQ6ZW1pdCxiaW5kaW5nOmJpbmRpbmcsY3dkOmN3ZCxjaGRpcjpjaGRpcix1bWFzazp1bWFzayxocnRpbWU6aHJ0aW1lLHBsYXRmb3JtOnBsYXRmb3JtLHJlbGVhc2U6cmVsZWFzZSxjb25maWc6Y29uZmlnLHVwdGltZTp1cHRpbWV9LHNlbXZlcj1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtpZihlIGluc3RhbmNlb2YgbylyZXR1cm4gZTtpZigic3RyaW5nIiE9PXR5cGVvZiBlKXJldHVybiBudWxsO2lmKGUubGVuZ3RoPkspcmV0dXJuIG51bGw7aWYoISh0P1lbaGVdOllbcGVdKS50ZXN0KGUpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gbmV3IG8oZSx0KX1jYXRjaChlKXtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcihlLHQpe3ZhciByPW4oZSx0KTtyZXR1cm4gcj9yLnZlcnNpb246bnVsbH1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9bihlLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCIiKSx0KTtyZXR1cm4gcj9yLnZlcnNpb246bnVsbH1mdW5jdGlvbiBvKGUsdCl7aWYoZSBpbnN0YW5jZW9mIG8pe2lmKGUubG9vc2U9PT10KXJldHVybiBlO2U9ZS52ZXJzaW9ufWVsc2UgaWYoInN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIFZlcnNpb246ICIrZSk7aWYoZS5sZW5ndGg+Syl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICIrSysiIGNoYXJhY3RlcnMiKTtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSx0KTtRKCJTZW1WZXIiLGUsdCksdGhpcy5sb29zZT10O3ZhciBuPWUudHJpbSgpLm1hdGNoKHQ/WVtoZV06WVtwZV0pO2lmKCFuKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgVmVyc2lvbjogIitlKTtpZih0aGlzLnJhdz1lLHRoaXMubWFqb3I9K25bMV0sdGhpcy5taW5vcj0rblsyXSx0aGlzLnBhdGNoPStuWzNdLHRoaXMubWFqb3I+Snx8dGhpcy5tYWpvcjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgbWFqb3IgdmVyc2lvbiIpO2lmKHRoaXMubWlub3I+Snx8dGhpcy5taW5vcjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgbWlub3IgdmVyc2lvbiIpO2lmKHRoaXMucGF0Y2g+Snx8dGhpcy5wYXRjaDwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0Y2ggdmVyc2lvbiIpO25bNF0/dGhpcy5wcmVyZWxlYXNlPW5bNF0uc3BsaXQoIi4iKS5tYXAoZnVuY3Rpb24oZSl7aWYoL15bMC05XSskLy50ZXN0KGUpKXt2YXIgdD0rZTtpZih0Pj0wJiZ0PEopcmV0dXJuIHR9cmV0dXJuIGV9KTp0aGlzLnByZXJlbGVhc2U9W10sdGhpcy5idWlsZD1uWzVdP25bNV0uc3BsaXQoIi4iKTpbXSx0aGlzLmZvcm1hdCgpfWZ1bmN0aW9uIGEoZSx0LG4scil7InN0cmluZyI9PT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCk7dHJ5e3JldHVybiBuZXcgbyhlLG4pLmluYyh0LHIpLnZlcnNpb259Y2F0Y2goZSl7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHMoZSx0KXtpZih4KGUsdCkpcmV0dXJuIG51bGw7dmFyIHI9bihlKSxpPW4odCk7aWYoci5wcmVyZWxlYXNlLmxlbmd0aHx8aS5wcmVyZWxlYXNlLmxlbmd0aCl7Zm9yKHZhciBvIGluIHIpaWYoKCJtYWpvciI9PT1vfHwibWlub3IiPT09b3x8InBhdGNoIj09PW8pJiZyW29dIT09aVtvXSlyZXR1cm4icHJlIitvO3JldHVybiJwcmVyZWxlYXNlIn1mb3IodmFyIG8gaW4gcilpZigoIm1ham9yIj09PW98fCJtaW5vciI9PT1vfHwicGF0Y2giPT09bykmJnJbb10hPT1pW29dKXJldHVybiBvfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj1qZS50ZXN0KGUpLHI9amUudGVzdCh0KTtyZXR1cm4gbiYmciYmKGU9K2UsdD0rdCksbiYmIXI/LTE6ciYmIW4/MTplPHQ/LTE6ZT50PzE6MH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIHUodCxlKX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIG5ldyBvKGUsdCkubWFqb3J9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBuZXcgbyhlLHQpLm1pbm9yfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbmV3IG8oZSx0KS5wYXRjaH1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm4gbmV3IG8oZSxuKS5jb21wYXJlKG5ldyBvKHQsbikpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZChlLHQsITApfWZ1bmN0aW9uIG0oZSx0LG4pe3JldHVybiBkKHQsZSxuKX1mdW5jdGlvbiBnKGUsbil7cmV0dXJuIGUuc29ydChmdW5jdGlvbihlLHIpe3JldHVybiB0LmNvbXBhcmUoZSxyLG4pfSl9ZnVuY3Rpb24geShlLG4pe3JldHVybiBlLnNvcnQoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5yY29tcGFyZShlLHIsbil9KX1mdW5jdGlvbiB2KGUsdCxuKXtyZXR1cm4gZChlLHQsbik+MH1mdW5jdGlvbiBiKGUsdCxuKXtyZXR1cm4gZChlLHQsbik8MH1mdW5jdGlvbiB4KGUsdCxuKXtyZXR1cm4gMD09PWQoZSx0LG4pfWZ1bmN0aW9uIEMoZSx0LG4pe3JldHVybiAwIT09ZChlLHQsbil9ZnVuY3Rpb24gRShlLHQsbil7cmV0dXJuIGQoZSx0LG4pPj0wfWZ1bmN0aW9uIEQoZSx0LG4pe3JldHVybiBkKGUsdCxuKTw9MH1mdW5jdGlvbiB3KGUsdCxuLHIpe3ZhciBpO3N3aXRjaCh0KXtjYXNlIj09PSI6Im9iamVjdCI9PT1fdHlwZW9mKGUpJiYoZT1lLnZlcnNpb24pLCJvYmplY3QiPT09X3R5cGVvZihuKSYmKG49bi52ZXJzaW9uKSxpPWU9PT1uO2JyZWFrO2Nhc2UiIT09Ijoib2JqZWN0Ij09PV90eXBlb2YoZSkmJihlPWUudmVyc2lvbiksIm9iamVjdCI9PT1fdHlwZW9mKG4pJiYobj1uLnZlcnNpb24pLGk9ZSE9PW47YnJlYWs7Y2FzZSIiOmNhc2UiPSI6Y2FzZSI9PSI6aT14KGUsbixyKTticmVhaztjYXNlIiE9IjppPUMoZSxuLHIpO2JyZWFrO2Nhc2UiPiI6aT12KGUsbixyKTticmVhaztjYXNlIj49IjppPUUoZSxuLHIpO2JyZWFrO2Nhc2UiPCI6aT1iKGUsbixyKTticmVhaztjYXNlIjw9IjppPUQoZSxuLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBvcGVyYXRvcjogIit0KX1yZXR1cm4gaX1mdW5jdGlvbiBTKGUsdCl7aWYoZSBpbnN0YW5jZW9mIFMpe2lmKGUubG9vc2U9PT10KXJldHVybiBlO2U9ZS52YWx1ZX1pZighKHRoaXMgaW5zdGFuY2VvZiBTKSlyZXR1cm4gbmV3IFMoZSx0KTtRKCJjb21wYXJhdG9yIixlLHQpLHRoaXMubG9vc2U9dCx0aGlzLnBhcnNlKGUpLHRoaXMuc2VtdmVyPT09UmU/dGhpcy52YWx1ZT0iIjp0aGlzLnZhbHVlPXRoaXMub3BlcmF0b3IrdGhpcy5zZW12ZXIudmVyc2lvbixRKCJjb21wIix0aGlzKX1mdW5jdGlvbiBrKGUsdCl7aWYoZSBpbnN0YW5jZW9mIGspcmV0dXJuIGUubG9vc2U9PT10P2U6bmV3IGsoZS5yYXcsdCk7aWYoZSBpbnN0YW5jZW9mIFMpcmV0dXJuIG5ldyBrKGUudmFsdWUsdCk7aWYoISh0aGlzIGluc3RhbmNlb2YgaykpcmV0dXJuIG5ldyBrKGUsdCk7aWYodGhpcy5sb29zZT10LHRoaXMucmF3PWUsdGhpcy5zZXQ9ZS5zcGxpdCgvXHMqXHxcfFxzKi8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJzZVJhbmdlKGUudHJpbSgpKX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aH0pLCF0aGlzLnNldC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBTZW1WZXIgUmFuZ2U6ICIrZSk7dGhpcy5mb3JtYXQoKX1mdW5jdGlvbiBBKGUsdCl7cmV0dXJuIG5ldyBrKGUsdCkuc2V0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KS5qb2luKCIgIikudHJpbSgpLnNwbGl0KCIgIil9KX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIFEoImNvbXAiLGUpLGU9TihlLHQpLFEoImNhcmV0IixlKSxlPU8oZSx0KSxRKCJ0aWxkZXMiLGUpLGU9TChlLHQpLFEoInhyYW5nZSIsZSksZT1NKGUsdCksUSgic3RhcnMiLGUpLGV9ZnVuY3Rpb24gVChlKXtyZXR1cm4hZXx8IngiPT09ZS50b0xvd2VyQ2FzZSgpfHwiKiI9PT1lfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gRihlLHQpfSkuam9pbigiICIpfWZ1bmN0aW9uIEYoZSx0KXt2YXIgbj10P1lbU2VdOllbd2VdO3JldHVybiBlLnJlcGxhY2UobixmdW5jdGlvbih0LG4scixpLG8pe1EoInRpbGRlIixlLHQsbixyLGksbyk7dmFyIGE7cmV0dXJuIFQobik/YT0iIjpUKHIpP2E9Ij49IituKyIuMC4wIDwiKygrbisxKSsiLjAuMCI6VChpKT9hPSI+PSIrbisiLiIrcisiLjAgPCIrbisiLiIrKCtyKzEpKyIuMCI6bz8oUSgicmVwbGFjZVRpbGRlIHByIixvKSwiLSIhPT1vLmNoYXJBdCgwKSYmKG89Ii0iK28pLGE9Ij49IituKyIuIityKyIuIitpK28rIiA8IituKyIuIisoK3IrMSkrIi4wIik6YT0iPj0iK24rIi4iK3IrIi4iK2krIiA8IituKyIuIisoK3IrMSkrIi4wIixRKCJ0aWxkZSByZXR1cm4iLGEpLGF9KX1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSx0KX0pLmpvaW4oIiAiKX1mdW5jdGlvbiBJKGUsdCl7USgiY2FyZXQiLGUsdCk7dmFyIG49dD9ZW1RlXTpZW19lXTtyZXR1cm4gZS5yZXBsYWNlKG4sZnVuY3Rpb24odCxuLHIsaSxvKXtRKCJjYXJldCIsZSx0LG4scixpLG8pO3ZhciBhO3JldHVybiBUKG4pP2E9IiI6VChyKT9hPSI+PSIrbisiLjAuMCA8IisoK24rMSkrIi4wLjAiOlQoaSk/YT0iMCI9PT1uPyI+PSIrbisiLiIrcisiLjAgPCIrbisiLiIrKCtyKzEpKyIuMCI6Ij49IituKyIuIityKyIuMCA8IisoK24rMSkrIi4wLjAiOm8/KFEoInJlcGxhY2VDYXJldCBwciIsbyksIi0iIT09by5jaGFyQXQoMCkmJihvPSItIitvKSxhPSIwIj09PW4/IjAiPT09cj8iPj0iK24rIi4iK3IrIi4iK2krbysiIDwiK24rIi4iK3IrIi4iKygraSsxKToiPj0iK24rIi4iK3IrIi4iK2krbysiIDwiK24rIi4iKygrcisxKSsiLjAiOiI+PSIrbisiLiIrcisiLiIraStvKyIgPCIrKCtuKzEpKyIuMC4wIik6KFEoIm5vIHByIiksYT0iMCI9PT1uPyIwIj09PXI/Ij49IituKyIuIityKyIuIitpKyIgPCIrbisiLiIrcisiLiIrKCtpKzEpOiI+PSIrbisiLiIrcisiLiIraSsiIDwiK24rIi4iKygrcisxKSsiLjAiOiI+PSIrbisiLiIrcisiLiIraSsiIDwiKygrbisxKSsiLjAuMCIpLFEoImNhcmV0IHJldHVybiIsYSksYX0pfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gUSgicmVwbGFjZVhSYW5nZXMiLGUsdCksZS5zcGxpdCgvXHMrLykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBQKGUsdCl9KS5qb2luKCIgIil9ZnVuY3Rpb24gUChlLHQpe2U9ZS50cmltKCk7dmFyIG49dD9ZW0NlXTpZW3hlXTtyZXR1cm4gZS5yZXBsYWNlKG4sZnVuY3Rpb24odCxuLHIsaSxvLGEpe1EoInhSYW5nZSIsZSx0LG4scixpLG8sYSk7dmFyIHM9VChyKSx1PXN8fFQoaSksYz11fHxUKG8pLGw9YztyZXR1cm4iPSI9PT1uJiZsJiYobj0iIikscz90PSI+Ij09PW58fCI8Ij09PW4/IjwwLjAuMCI6IioiOm4mJmw/KHUmJihpPTApLGMmJihvPTApLCI+Ij09PW4/KG49Ij49Iix1PyhyPStyKzEsaT0wLG89MCk6YyYmKGk9K2krMSxvPTApKToiPD0iPT09biYmKG49IjwiLHU/cj0rcisxOmk9K2krMSksdD1uK3IrIi4iK2krIi4iK28pOnU/dD0iPj0iK3IrIi4wLjAgPCIrKCtyKzEpKyIuMC4wIjpjJiYodD0iPj0iK3IrIi4iK2krIi4wIDwiK3IrIi4iKygraSsxKSsiLjAiKSxRKCJ4UmFuZ2UgcmV0dXJuIix0KSx0fSl9ZnVuY3Rpb24gTShlLHQpe3JldHVybiBRKCJyZXBsYWNlU3RhcnMiLGUsdCksZS50cmltKCkucmVwbGFjZShZW1BlXSwiIil9ZnVuY3Rpb24gaihlLHQsbixyLGksbyxhLHMsdSxjLGwscCxmKXtyZXR1cm4gdD1UKG4pPyIiOlQocik/Ij49IituKyIuMC4wIjpUKGkpPyI+PSIrbisiLiIrcisiLjAiOiI+PSIrdCxzPVQodSk/IiI6VChjKT8iPCIrKCt1KzEpKyIuMC4wIjpUKGwpPyI8Iit1KyIuIisoK2MrMSkrIi4wIjpwPyI8PSIrdSsiLiIrYysiLiIrbCsiLSIrcDoiPD0iK3MsKHQrIiAiK3MpLnRyaW0oKX1mdW5jdGlvbiBSKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWVbbl0udGVzdCh0KSlyZXR1cm4hMTtpZih0LnByZXJlbGVhc2UubGVuZ3RoKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihRKGVbbl0uc2VtdmVyKSxlW25dLnNlbXZlciE9PVJlJiZlW25dLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aD4wKXt2YXIgcj1lW25dLnNlbXZlcjtpZihyLm1ham9yPT09dC5tYWpvciYmci5taW5vcj09PXQubWlub3ImJnIucGF0Y2g9PT10LnBhdGNoKXJldHVybiEwfXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIEIoZSx0LG4pe3RyeXt0PW5ldyBrKHQsbil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuIHQudGVzdChlKX1mdW5jdGlvbiAkKGUsdCxuKXt2YXIgcj1udWxsLGk9bnVsbDt0cnl7dmFyIGE9bmV3IGsodCxuKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2EudGVzdChlKSYmKHImJi0xIT09aS5jb21wYXJlKGUpfHwocj1lLGk9bmV3IG8ocixuKSkpfSkscn1mdW5jdGlvbiBVKGUsdCxuKXt2YXIgcj1udWxsLGk9bnVsbDt0cnl7dmFyIGE9bmV3IGsodCxuKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2EudGVzdChlKSYmKHImJjEhPT1pLmNvbXBhcmUoZSl8fChyPWUsaT1uZXcgbyhyLG4pKSl9KSxyfWZ1bmN0aW9uIHooZSx0KXt0cnl7cmV0dXJuIG5ldyBrKGUsdCkucmFuZ2V8fCIqIn1jYXRjaChlKXtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIHEoZSx0LCI8IixuKX1mdW5jdGlvbiBWKGUsdCxuKXtyZXR1cm4gcShlLHQsIj4iLG4pfWZ1bmN0aW9uIHEoZSx0LG4scil7ZT1uZXcgbyhlLHIpLHQ9bmV3IGsodCxyKTt2YXIgaSxhLHMsdSxjO3N3aXRjaChuKXtjYXNlIj4iOmk9dixhPUQscz1iLHU9Ij4iLGM9Ij49IjticmVhaztjYXNlIjwiOmk9YixhPUUscz12LHU9IjwiLGM9Ijw9IjticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoJ011c3QgcHJvdmlkZSBhIGhpbG8gdmFsIG9mICI8IiBvciAiPiInKX1pZihCKGUsdCxyKSlyZXR1cm4hMTtmb3IodmFyIGw9MDtsPHQuc2V0Lmxlbmd0aDsrK2wpe3ZhciBwPXQuc2V0W2xdLGY9bnVsbCxkPW51bGw7aWYocC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VtdmVyPT09UmUmJihlPW5ldyBTKCI+PTAuMC4wIikpLGY9Znx8ZSxkPWR8fGUsaShlLnNlbXZlcixmLnNlbXZlcixyKT9mPWU6cyhlLnNlbXZlcixkLnNlbXZlcixyKSYmKGQ9ZSl9KSxmLm9wZXJhdG9yPT09dXx8Zi5vcGVyYXRvcj09PWMpcmV0dXJuITE7aWYoKCFkLm9wZXJhdG9yfHxkLm9wZXJhdG9yPT09dSkmJmEoZSxkLnNlbXZlcikpcmV0dXJuITE7aWYoZC5vcGVyYXRvcj09PWMmJnMoZSxkLnNlbXZlcikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gSChlLHQpe3ZhciByPW4oZSx0KTtyZXR1cm4gciYmci5wcmVyZWxlYXNlLmxlbmd0aD9yLnByZXJlbGVhc2U6bnVsbH1mdW5jdGlvbiBXKGUsdCxuKXtyZXR1cm4gZT1uZXcgayhlLG4pLHQ9bmV3IGsodCxuKSxlLmludGVyc2VjdHModCl9dD1lLmV4cG9ydHM9bzt2YXIgUTtRPSJvYmplY3QiPT09X3R5cGVvZihwcm9jZXNzKSYmcHJvY2Vzcy5lbnYmJnByb2Nlc3MuZW52Lk5PREVfREVCVUcmJi9cYnNlbXZlclxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKT9mdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtlLnVuc2hpZnQoIlNFTVZFUiIpLGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsZSl9OmZ1bmN0aW9uKCl7fSx0LlNFTVZFUl9TUEVDX1ZFUlNJT049IjIuMC4wIjt2YXIgSz0yNTYsSj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUnx8OTAwNzE5OTI1NDc0MDk5MSxZPXQucmU9W10sWD10LnNyYz1bXSxaPTAsZWU9WisrO1hbZWVdPSIwfFsxLTldXFxkKiI7dmFyIHRlPVorKztYW3RlXT0iWzAtOV0rIjt2YXIgbmU9WisrO1hbbmVdPSJcXGQqW2EtekEtWi1dW2EtekEtWjAtOS1dKiI7dmFyIHJlPVorKztYW3JlXT0iKCIrWFtlZV0rIilcXC4oIitYW2VlXSsiKVxcLigiK1hbZWVdKyIpIjt2YXIgaWU9WisrO1hbaWVdPSIoIitYW3RlXSsiKVxcLigiK1hbdGVdKyIpXFwuKCIrWFt0ZV0rIikiO3ZhciBvZT1aKys7WFtvZV09Iig/OiIrWFtlZV0rInwiK1hbbmVdKyIpIjt2YXIgYWU9WisrO1hbYWVdPSIoPzoiK1hbdGVdKyJ8IitYW25lXSsiKSI7dmFyIHNlPVorKztYW3NlXT0iKD86LSgiK1hbb2VdKyIoPzpcXC4iK1hbb2VdKyIpKikpIjt2YXIgdWU9WisrO1hbdWVdPSIoPzotPygiK1hbYWVdKyIoPzpcXC4iK1hbYWVdKyIpKikpIjt2YXIgY2U9WisrO1hbY2VdPSJbMC05QS1aYS16LV0rIjt2YXIgbGU9WisrO1hbbGVdPSIoPzpcXCsoIitYW2NlXSsiKD86XFwuIitYW2NlXSsiKSopKSI7dmFyIHBlPVorKyxmZT0idj8iK1hbcmVdK1hbc2VdKyI/IitYW2xlXSsiPyI7WFtwZV09Il4iK2ZlKyIkIjt2YXIgZGU9Ilt2PVxcc10qIitYW2llXStYW3VlXSsiPyIrWFtsZV0rIj8iLGhlPVorKztYW2hlXT0iXiIrZGUrIiQiO3ZhciBtZT1aKys7WFttZV09IigoPzo8fD4pPz0/KSI7dmFyIGdlPVorKztYW2dlXT1YW3RlXSsifHh8WHxcXCoiO3ZhciB5ZT1aKys7WFt5ZV09WFtlZV0rInx4fFh8XFwqIjt2YXIgdmU9WisrO1hbdmVdPSJbdj1cXHNdKigiK1hbeWVdKyIpKD86XFwuKCIrWFt5ZV0rIikoPzpcXC4oIitYW3llXSsiKSg/OiIrWFtzZV0rIik/IitYW2xlXSsiPyk/KT8iO3ZhciBiZT1aKys7WFtiZV09Ilt2PVxcc10qKCIrWFtnZV0rIikoPzpcXC4oIitYW2dlXSsiKSg/OlxcLigiK1hbZ2VdKyIpKD86IitYW3VlXSsiKT8iK1hbbGVdKyI/KT8pPyI7dmFyIHhlPVorKztYW3hlXT0iXiIrWFttZV0rIlxccyoiK1hbdmVdKyIkIjt2YXIgQ2U9WisrO1hbQ2VdPSJeIitYW21lXSsiXFxzKiIrWFtiZV0rIiQiO3ZhciBFZT1aKys7WFtFZV09Iig/On4+PykiO3ZhciBEZT1aKys7WFtEZV09IihcXHMqKSIrWFtFZV0rIlxccysiLFlbRGVdPW5ldyBSZWdFeHAoWFtEZV0sImciKTt2YXIgd2U9WisrO1hbd2VdPSJeIitYW0VlXStYW3ZlXSsiJCI7dmFyIFNlPVorKztYW1NlXT0iXiIrWFtFZV0rWFtiZV0rIiQiO3ZhciBrZT1aKys7WFtrZV09Iig/OlxcXikiO3ZhciBBZT1aKys7WFtBZV09IihcXHMqKSIrWFtrZV0rIlxccysiLFlbQWVdPW5ldyBSZWdFeHAoWFtBZV0sImciKTt2YXIgX2U9WisrO1hbX2VdPSJeIitYW2tlXStYW3ZlXSsiJCI7dmFyIFRlPVorKztYW1RlXT0iXiIrWFtrZV0rWFtiZV0rIiQiO3ZhciBPZT1aKys7WFtPZV09Il4iK1hbbWVdKyJcXHMqKCIrZGUrIikkfF4kIjt2YXIgRmU9WisrO1hbRmVdPSJeIitYW21lXSsiXFxzKigiK2ZlKyIpJHxeJCI7dmFyIE5lPVorKztYW05lXT0iKFxccyopIitYW21lXSsiXFxzKigiK2RlKyJ8IitYW3ZlXSsiKSIsWVtOZV09bmV3IFJlZ0V4cChYW05lXSwiZyIpO3ZhciBJZT1aKys7WFtJZV09Il5cXHMqKCIrWFt2ZV0rIilcXHMrLVxccysoIitYW3ZlXSsiKVxccyokIjt2YXIgTGU9WisrO1hbTGVdPSJeXFxzKigiK1hbYmVdKyIpXFxzKy1cXHMrKCIrWFtiZV0rIilcXHMqJCI7dmFyIFBlPVorKztYW1BlXT0iKDx8Pik/PT9cXHMqXFwqIjtmb3IodmFyIE1lPTA7TWU8WjtNZSsrKVEoTWUsWFtNZV0pLFlbTWVdfHwoWVtNZV09bmV3IFJlZ0V4cChYW01lXSkpO3QucGFyc2U9bix0LnZhbGlkPXIsdC5jbGVhbj1pLHQuU2VtVmVyPW8sby5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVyc2lvbj10aGlzLm1ham9yKyIuIit0aGlzLm1pbm9yKyIuIit0aGlzLnBhdGNoLHRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJih0aGlzLnZlcnNpb24rPSItIit0aGlzLnByZXJlbGVhc2Uuam9pbigiLiIpKSx0aGlzLnZlcnNpb259LG8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVyc2lvbn0sby5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlKXtyZXR1cm4gUSgiU2VtVmVyLmNvbXBhcmUiLHRoaXMudmVyc2lvbix0aGlzLmxvb3NlLGUpLGUgaW5zdGFuY2VvZiBvfHwoZT1uZXcgbyhlLHRoaXMubG9vc2UpKSx0aGlzLmNvbXBhcmVNYWluKGUpfHx0aGlzLmNvbXBhcmVQcmUoZSl9LG8ucHJvdG90eXBlLmNvbXBhcmVNYWluPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygb3x8KGU9bmV3IG8oZSx0aGlzLmxvb3NlKSksdSh0aGlzLm1ham9yLGUubWFqb3IpfHx1KHRoaXMubWlub3IsZS5taW5vcil8fHUodGhpcy5wYXRjaCxlLnBhdGNoKX0sby5wcm90b3R5cGUuY29tcGFyZVByZT1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygb3x8KGU9bmV3IG8oZSx0aGlzLmxvb3NlKSksdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmIWUucHJlcmVsZWFzZS5sZW5ndGgpcmV0dXJuLTE7aWYoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJmUucHJlcmVsZWFzZS5sZW5ndGgpcmV0dXJuIDE7aWYoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJiFlLnByZXJlbGVhc2UubGVuZ3RoKXJldHVybiAwO3ZhciB0PTA7ZG97dmFyIG49dGhpcy5wcmVyZWxlYXNlW3RdLHI9ZS5wcmVyZWxlYXNlW3RdO2lmKFEoInByZXJlbGVhc2UgY29tcGFyZSIsdCxuLHIpLHZvaWQgMD09PW4mJnZvaWQgMD09PXIpcmV0dXJuIDA7aWYodm9pZCAwPT09cilyZXR1cm4gMTtpZih2b2lkIDA9PT1uKXJldHVybi0xO2lmKG4hPT1yKXJldHVybiB1KG4scil9d2hpbGUoKyt0KX0sby5wcm90b3R5cGUuaW5jPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UicHJlbWFqb3IiOnRoaXMucHJlcmVsZWFzZS5sZW5ndGg9MCx0aGlzLnBhdGNoPTAsdGhpcy5taW5vcj0wLHRoaXMubWFqb3IrKyx0aGlzLmluYygicHJlIix0KTticmVhaztjYXNlInByZW1pbm9yIjp0aGlzLnByZXJlbGVhc2UubGVuZ3RoPTAsdGhpcy5wYXRjaD0wLHRoaXMubWlub3IrKyx0aGlzLmluYygicHJlIix0KTticmVhaztjYXNlInByZXBhdGNoIjp0aGlzLnByZXJlbGVhc2UubGVuZ3RoPTAsdGhpcy5pbmMoInBhdGNoIix0KSx0aGlzLmluYygicHJlIix0KTticmVhaztjYXNlInByZXJlbGVhc2UiOjA9PT10aGlzLnByZXJlbGVhc2UubGVuZ3RoJiZ0aGlzLmluYygicGF0Y2giLHQpLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UibWFqb3IiOjA9PT10aGlzLm1pbm9yJiYwPT09dGhpcy5wYXRjaCYmMCE9PXRoaXMucHJlcmVsZWFzZS5sZW5ndGh8fHRoaXMubWFqb3IrKyx0aGlzLm1pbm9yPTAsdGhpcy5wYXRjaD0wLHRoaXMucHJlcmVsZWFzZT1bXTticmVhaztjYXNlIm1pbm9yIjowPT09dGhpcy5wYXRjaCYmMCE9PXRoaXMucHJlcmVsZWFzZS5sZW5ndGh8fHRoaXMubWlub3IrKyx0aGlzLnBhdGNoPTAsdGhpcy5wcmVyZWxlYXNlPVtdO2JyZWFrO2Nhc2UicGF0Y2giOjA9PT10aGlzLnByZXJlbGVhc2UubGVuZ3RoJiZ0aGlzLnBhdGNoKyssdGhpcy5wcmVyZWxlYXNlPVtdO2JyZWFrO2Nhc2UicHJlIjppZigwPT09dGhpcy5wcmVyZWxlYXNlLmxlbmd0aCl0aGlzLnByZXJlbGVhc2U9WzBdO2Vsc2V7Zm9yKHZhciBuPXRoaXMucHJlcmVsZWFzZS5sZW5ndGg7LS1uPj0wOykibnVtYmVyIj09PXR5cGVvZiB0aGlzLnByZXJlbGVhc2Vbbl0mJih0aGlzLnByZXJlbGVhc2Vbbl0rKyxuPS0yKTstMT09PW4mJnRoaXMucHJlcmVsZWFzZS5wdXNoKDApfXQmJih0aGlzLnByZXJlbGVhc2VbMF09PT10P2lzTmFOKHRoaXMucHJlcmVsZWFzZVsxXSkmJih0aGlzLnByZXJlbGVhc2U9W3QsMF0pOnRoaXMucHJlcmVsZWFzZT1bdCwwXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiAiK2UpfXJldHVybiB0aGlzLmZvcm1hdCgpLHRoaXMucmF3PXRoaXMudmVyc2lvbix0aGlzfSx0LmluYz1hLHQuZGlmZj1zLHQuY29tcGFyZUlkZW50aWZpZXJzPXU7dmFyIGplPS9eWzAtOV0rJC87dC5yY29tcGFyZUlkZW50aWZpZXJzPWMsdC5tYWpvcj1sLHQubWlub3I9cCx0LnBhdGNoPWYsdC5jb21wYXJlPWQsdC5jb21wYXJlTG9vc2U9aCx0LnJjb21wYXJlPW0sdC5zb3J0PWcsdC5yc29ydD15LHQuZ3Q9dix0Lmx0PWIsdC5lcT14LHQubmVxPUMsdC5ndGU9RSx0Lmx0ZT1ELHQuY21wPXcsdC5Db21wYXJhdG9yPVM7dmFyIFJlPXt9O1MucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubG9vc2U/WVtPZV06WVtGZV0sbj1lLm1hdGNoKHQpO2lmKCFuKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY29tcGFyYXRvcjogIitlKTt0aGlzLm9wZXJhdG9yPW5bMV0sIj0iPT09dGhpcy5vcGVyYXRvciYmKHRoaXMub3BlcmF0b3I9IiIpLG5bMl0/dGhpcy5zZW12ZXI9bmV3IG8oblsyXSx0aGlzLmxvb3NlKTp0aGlzLnNlbXZlcj1SZX0sUy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sUy5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihlKXtyZXR1cm4gUSgiQ29tcGFyYXRvci50ZXN0IixlLHRoaXMubG9vc2UpLHRoaXMuc2VtdmVyPT09UmV8fCgic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uZXcgbyhlLHRoaXMubG9vc2UpKSx3KGUsdGhpcy5vcGVyYXRvcix0aGlzLnNlbXZlcix0aGlzLmxvb3NlKSl9LFMucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiBTKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQiKTt2YXIgbjtpZigiIj09PXRoaXMub3BlcmF0b3IpcmV0dXJuIG49bmV3IGsoZS52YWx1ZSx0KSxCKHRoaXMudmFsdWUsbix0KTtpZigiIj09PWUub3BlcmF0b3IpcmV0dXJuIG49bmV3IGsodGhpcy52YWx1ZSx0KSxCKGUuc2VtdmVyLG4sdCk7dmFyIHI9KCI+PSI9PT10aGlzLm9wZXJhdG9yfHwiPiI9PT10aGlzLm9wZXJhdG9yKSYmKCI+PSI9PT1lLm9wZXJhdG9yfHwiPiI9PT1lLm9wZXJhdG9yKSxpPSgiPD0iPT09dGhpcy5vcGVyYXRvcnx8IjwiPT09dGhpcy5vcGVyYXRvcikmJigiPD0iPT09ZS5vcGVyYXRvcnx8IjwiPT09ZS5vcGVyYXRvciksbz10aGlzLnNlbXZlci52ZXJzaW9uPT09ZS5zZW12ZXIudmVyc2lvbixhPSgiPj0iPT09dGhpcy5vcGVyYXRvcnx8Ijw9Ij09PXRoaXMub3BlcmF0b3IpJiYoIj49Ij09PWUub3BlcmF0b3J8fCI8PSI9PT1lLm9wZXJhdG9yKSxzPXcodGhpcy5zZW12ZXIsIjwiLGUuc2VtdmVyLHQpJiYoIj49Ij09PXRoaXMub3BlcmF0b3J8fCI+Ij09PXRoaXMub3BlcmF0b3IpJiYoIjw9Ij09PWUub3BlcmF0b3J8fCI8Ij09PWUub3BlcmF0b3IpLHU9dyh0aGlzLnNlbXZlciwiPiIsZS5zZW12ZXIsdCkmJigiPD0iPT09dGhpcy5vcGVyYXRvcnx8IjwiPT09dGhpcy5vcGVyYXRvcikmJigiPj0iPT09ZS5vcGVyYXRvcnx8Ij4iPT09ZS5vcGVyYXRvcik7cmV0dXJuIHJ8fGl8fG8mJmF8fHN8fHV9LHQuUmFuZ2U9ayxrLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZT10aGlzLnNldC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuam9pbigiICIpLnRyaW0oKX0pLmpvaW4oInx8IikudHJpbSgpLHRoaXMucmFuZ2V9LGsucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2V9LGsucHJvdG90eXBlLnBhcnNlUmFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sb29zZTtlPWUudHJpbSgpLFEoInJhbmdlIixlLHQpO3ZhciBuPXQ/WVtMZV06WVtJZV07ZT1lLnJlcGxhY2UobixqKSxRKCJoeXBoZW4gcmVwbGFjZSIsZSksZT1lLnJlcGxhY2UoWVtOZV0sIiQxJDIkMyIpLFEoImNvbXBhcmF0b3IgdHJpbSIsZSxZW05lXSksZT1lLnJlcGxhY2UoWVtEZV0sIiQxfiIpLGU9ZS5yZXBsYWNlKFlbQWVdLCIkMV4iKSxlPWUuc3BsaXQoL1xzKy8pLmpvaW4oIiAiKTt2YXIgcj10P1lbT2VdOllbRmVdLGk9ZS5zcGxpdCgiICIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gXyhlLHQpfSkuam9pbigiICIpLnNwbGl0KC9ccysvKTtyZXR1cm4gdGhpcy5sb29zZSYmKGk9aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlLm1hdGNoKHIpfSkpLGk9aS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTKGUsdCl9KX0say5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIGspKXRocm93IG5ldyBUeXBlRXJyb3IoImEgUmFuZ2UgaXMgcmVxdWlyZWQiKTtyZXR1cm4gdGhpcy5zZXQuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gbi5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gZS5zZXQuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gbi5pbnRlcnNlY3RzKGUsdCl9KX0pfSl9KX0sdC50b0NvbXBhcmF0b3JzPUEsay5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMTsic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uZXcgbyhlLHRoaXMubG9vc2UpKTtmb3IodmFyIHQ9MDt0PHRoaXMuc2V0Lmxlbmd0aDt0KyspaWYoUih0aGlzLnNldFt0XSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5zYXRpc2ZpZXM9Qix0Lm1heFNhdGlzZnlpbmc9JCx0Lm1pblNhdGlzZnlpbmc9VSx0LnZhbGlkUmFuZ2U9eix0Lmx0cj1HLHQuZ3RyPVYsdC5vdXRzaWRlPXEsdC5wcmVyZWxlYXNlPUgsdC5pbnRlcnNlY3RzPVd9KSxhcnJheWlmeT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtyZXR1cm4gbi5jb25jYXQoT2JqZWN0LmFzc2lnbihfZGVmaW5lUHJvcGVydHkoe30sdCxyKSxlW3JdKSl9LFtdKX0sZGVkZW50XzE9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgdD12b2lkIDA7dD0ic3RyaW5nIj09PXR5cGVvZiBlP1tlXTplLnJhdztmb3IodmFyIG49IiIscj0wO3I8dC5sZW5ndGg7cisrKW4rPXRbcl0ucmVwbGFjZSgvXFxcblsgXHRdKi9nLCIiKS5yZXBsYWNlKC9cXGAvZywiYCIpLHI8KGFyZ3VtZW50cy5sZW5ndGg8PTE/MDphcmd1bWVudHMubGVuZ3RoLTEpJiYobis9YXJndW1lbnRzLmxlbmd0aDw9cisxP3ZvaWQgMDphcmd1bWVudHNbcisxXSk7dmFyIGk9bi5zcGxpdCgiXG4iKSxvPW51bGw7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC9eKFxzKylcUysvKTtpZih0KXt2YXIgbj10WzFdLmxlbmd0aDtvPW8/TWF0aC5taW4obyxuKTpufX0pLG51bGwhPT1vJiYobj1pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iICI9PT1lWzBdP2Uuc2xpY2Uobyk6ZX0pLmpvaW4oIlxuIikpLG49bi50cmltKCksbi5yZXBsYWNlKC9cXG4vZywiXG4iKX1lLmV4cG9ydHM9dH0pLENBVEVHT1JZX0NPTkZJRz0iQ29uZmlnIixDQVRFR09SWV9FRElUT1I9IkVkaXRvciIsQ0FURUdPUllfRk9STUFUPSJGb3JtYXQiLENBVEVHT1JZX09USEVSPSJPdGhlciIsQ0FURUdPUllfT1VUUFVUPSJPdXRwdXQiLENBVEVHT1JZX0dMT0JBTD0iR2xvYmFsIixDQVRFR09SWV9TUEVDSUFMPSJTcGVjaWFsIixvcHRpb25zJDI9e2N1cnNvck9mZnNldDp7c2luY2U6IjEuNC4wIixjYXRlZ29yeTpDQVRFR09SWV9TUEVDSUFMLHR5cGU6ImludCIsZGVmYXVsdDotMSxyYW5nZTp7c3RhcnQ6LTEsZW5kOjEvMCxzdGVwOjF9LGRlc2NyaXB0aW9uOmRlZGVudF8xKF90ZW1wbGF0ZU9iamVjdCgpKSxjbGlDYXRlZ29yeTpDQVRFR09SWV9FRElUT1J9LGZpbGVwYXRoOntzaW5jZToiMS40LjAiLGNhdGVnb3J5OkNBVEVHT1JZX1NQRUNJQUwsdHlwZToicGF0aCIsZGVmYXVsdDp2b2lkIDAsZGVzY3JpcHRpb246IlNwZWNpZnkgdGhlIGlucHV0IGZpbGVwYXRoLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBkbyBwYXJzZXIgaW5mZXJlbmNlLiIsY2xpTmFtZToic3RkaW4tZmlsZXBhdGgiLGNsaUNhdGVnb3J5OkNBVEVHT1JZX09USEVSLGNsaURlc2NyaXB0aW9uOiJQYXRoIHRvIHRoZSBmaWxlIHRvIHByZXRlbmQgdGhhdCBzdGRpbiBjb21lcyBmcm9tLiJ9LGluc2VydFByYWdtYTp7c2luY2U6IjEuOC4wIixjYXRlZ29yeTpDQVRFR09SWV9TUEVDSUFMLHR5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsZGVzY3JpcHRpb246Ikluc2VydCBAZm9ybWF0IHByYWdtYSBpbnRvIGZpbGUncyBmaXJzdCBkb2NibG9jayBjb21tZW50LiIsY2xpQ2F0ZWdvcnk6Q0FURUdPUllfT1RIRVJ9LHBhcnNlcjp7c2luY2U6IjAuMC4xMCIsY2F0ZWdvcnk6Q0FURUdPUllfR0xPQkFMLHR5cGU6ImNob2ljZSIsZGVmYXVsdDpbe3NpbmNlOiIwLjAuMTAiLHZhbHVlOiJiYWJ5bG9uIn0se3NpbmNlOiIxLjEzLjAiLHZhbHVlOnZvaWQgMH1dLGRlc2NyaXB0aW9uOiJXaGljaCBwYXJzZXIgdG8gdXNlLiIsZXhjZXB0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PT10eXBlb2YgZX0sY2hvaWNlczpbe3ZhbHVlOiJmbG93IixkZXNjcmlwdGlvbjoiRmxvdyJ9LHt2YWx1ZToiYmFieWxvbiIsZGVzY3JpcHRpb246IkphdmFTY3JpcHQifSx7dmFsdWU6InR5cGVzY3JpcHQiLHNpbmNlOiIxLjQuMCIsZGVzY3JpcHRpb246IlR5cGVTY3JpcHQifSx7dmFsdWU6ImNzcyIsc2luY2U6IjEuNy4xIixkZXNjcmlwdGlvbjoiQ1NTIn0se3ZhbHVlOiJwb3N0Y3NzIixzaW5jZToiMS40LjAiLGRlc2NyaXB0aW9uOiJDU1MvTGVzcy9TQ1NTIixkZXByZWNhdGVkOiIxLjcuMSIscmVkaXJlY3Q6ImNzcyJ9LHt2YWx1ZToibGVzcyIsc2luY2U6IjEuNy4xIixkZXNjcmlwdGlvbjoiTGVzcyJ9LHt2YWx1ZToic2NzcyIsc2luY2U6IjEuNy4xIixkZXNjcmlwdGlvbjoiU0NTUyJ9LHt2YWx1ZToianNvbiIsc2luY2U6IjEuNS4wIixkZXNjcmlwdGlvbjoiSlNPTiJ9LHt2YWx1ZToianNvbjUiLHNpbmNlOiIxLjEzLjAiLGRlc2NyaXB0aW9uOiJKU09ONSJ9LHt2YWx1ZToianNvbi1zdHJpbmdpZnkiLHNpbmNlOiIxLjEzLjAiLGRlc2NyaXB0aW9uOiJKU09OLnN0cmluZ2lmeSJ9LHt2YWx1ZToiZ3JhcGhxbCIsc2luY2U6IjEuNS4wIixkZXNjcmlwdGlvbjoiR3JhcGhRTCJ9LHt2YWx1ZToibWFya2Rvd24iLHNpbmNlOiIxLjguMCIsZGVzY3JpcHRpb246Ik1hcmtkb3duIn0se3ZhbHVlOiJ2dWUiLHNpbmNlOiIxLjEwLjAiLGRlc2NyaXB0aW9uOiJWdWUifV19LHBsdWdpbnM6e3NpbmNlOiIxLjEwLjAiLHR5cGU6InBhdGgiLGFycmF5OiEwLGRlZmF1bHQ6W3t2YWx1ZTpbXX1dLGNhdGVnb3J5OkNBVEVHT1JZX0dMT0JBTCxkZXNjcmlwdGlvbjoiQWRkIGEgcGx1Z2luLiBNdWx0aXBsZSBwbHVnaW5zIGNhbiBiZSBwYXNzZWQgYXMgc2VwYXJhdGUgYC0tcGx1Z2luYHMuIixleGNlcHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZXx8Im9iamVjdCI9PT1fdHlwZW9mKGUpfSxjbGlOYW1lOiJwbHVnaW4iLGNsaUNhdGVnb3J5OkNBVEVHT1JZX0NPTkZJR30scGx1Z2luU2VhcmNoRGlyczp7c2luY2U6IjEuMTMuMCIsdHlwZToicGF0aCIsYXJyYXk6ITAsZGVmYXVsdDpbe3ZhbHVlOltdfV0sY2F0ZWdvcnk6Q0FURUdPUllfR0xPQkFMLGRlc2NyaXB0aW9uOmRlZGVudF8xKF90ZW1wbGF0ZU9iamVjdDIoKSksZXhjZXB0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGV8fCJvYmplY3QiPT09X3R5cGVvZihlKX0sY2xpTmFtZToicGx1Z2luLXNlYXJjaC1kaXIiLGNsaUNhdGVnb3J5OkNBVEVHT1JZX0NPTkZJR30scHJpbnRXaWR0aDp7c2luY2U6IjAuMC4wIixjYXRlZ29yeTpDQVRFR09SWV9HTE9CQUwsdHlwZToiaW50IixkZWZhdWx0OjgwLGRlc2NyaXB0aW9uOiJUaGUgbGluZSBsZW5ndGggd2hlcmUgUHJldHRpZXIgd2lsbCB0cnkgd3JhcC4iLHJhbmdlOntzdGFydDowLGVuZDoxLzAsc3RlcDoxfX0scmFuZ2VFbmQ6e3NpbmNlOiIxLjQuMCIsY2F0ZWdvcnk6Q0FURUdPUllfU1BFQ0lBTCx0eXBlOiJpbnQiLGRlZmF1bHQ6MS8wLHJhbmdlOntzdGFydDowLGVuZDoxLzAsc3RlcDoxfSxkZXNjcmlwdGlvbjpkZWRlbnRfMShfdGVtcGxhdGVPYmplY3QzKCkpLGNsaUNhdGVnb3J5OkNBVEVHT1JZX0VESVRPUn0scmFuZ2VTdGFydDp7c2luY2U6IjEuNC4wIixjYXRlZ29yeTpDQVRFR09SWV9TUEVDSUFMLHR5cGU6ImludCIsZGVmYXVsdDowLHJhbmdlOntzdGFydDowLGVuZDoxLzAsc3RlcDoxfSxkZXNjcmlwdGlvbjpkZWRlbnRfMShfdGVtcGxhdGVPYmplY3Q0KCkpLGNsaUNhdGVnb3J5OkNBVEVHT1JZX0VESVRPUn0scmVxdWlyZVByYWdtYTp7c2luY2U6IjEuNy4wIixjYXRlZ29yeTpDQVRFR09SWV9TUEVDSUFMLHR5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsZGVzY3JpcHRpb246ZGVkZW50XzEoX3RlbXBsYXRlT2JqZWN0NSgpKSxjbGlDYXRlZ29yeTpDQVRFR09SWV9PVEhFUn0sdGFiV2lkdGg6e3R5cGU6ImludCIsY2F0ZWdvcnk6Q0FURUdPUllfR0xPQkFMLGRlZmF1bHQ6MixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHNwYWNlcyBwZXIgaW5kZW50YXRpb24gbGV2ZWwuIixyYW5nZTp7c3RhcnQ6MCxlbmQ6MS8wLHN0ZXA6MX19LHVzZUZsb3dQYXJzZXI6e3NpbmNlOiIwLjAuMCIsY2F0ZWdvcnk6Q0FURUdPUllfR0xPQkFMLHR5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsZGVwcmVjYXRlZDoiMC4wLjEwIixkZXNjcmlwdGlvbjoiVXNlIGZsb3cgcGFyc2VyLiIscmVkaXJlY3Q6e29wdGlvbjoicGFyc2VyIix2YWx1ZToiZmxvdyJ9LGNsaU5hbWU6ImZsb3ctcGFyc2VyIn0sdXNlVGFiczp7c2luY2U6IjEuMC4wIixjYXRlZ29yeTpDQVRFR09SWV9HTE9CQUwsdHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxkZXNjcmlwdGlvbjoiSW5kZW50IHdpdGggdGFicyBpbnN0ZWFkIG9mIHNwYWNlcy4ifX0sY29yZU9wdGlvbnMkMT17Q0FURUdPUllfQ09ORklHOkNBVEVHT1JZX0NPTkZJRyxDQVRFR09SWV9FRElUT1I6Q0FURUdPUllfRURJVE9SLENBVEVHT1JZX0ZPUk1BVDpDQVRFR09SWV9GT1JNQVQsQ0FURUdPUllfT1RIRVI6Q0FURUdPUllfT1RIRVIsQ0FURUdPUllfT1VUUFVUOkNBVEVHT1JZX09VVFBVVCxDQVRFR09SWV9HTE9CQUw6Q0FURUdPUllfR0xPQkFMLENBVEVHT1JZX1NQRUNJQUw6Q0FURUdPUllfU1BFQ0lBTCxvcHRpb25zOm9wdGlvbnMkMn0scmVxdWlyZSQkMD1fcGFja2FnZSQxJiZfcGFja2FnZXx8X3BhY2thZ2UkMSxjdXJyZW50VmVyc2lvbj1yZXF1aXJlJCQwLnZlcnNpb24sY29yZU9wdGlvbnM9Y29yZU9wdGlvbnMkMS5vcHRpb25zLHN1cHBvcnQ9e2dldFN1cHBvcnRJbmZvOmdldFN1cHBvcnRJbmZvJDJ9LGFycj1bXSxjaGFyQ29kZUNhY2hlPVtdLGxldmVuPWZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIDA7dmFyIG49ZTtlLmxlbmd0aD50Lmxlbmd0aCYmKGU9dCx0PW4pO3ZhciByPWUubGVuZ3RoLGk9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIGk7aWYoMD09PWkpcmV0dXJuIHI7Zm9yKDtyPjAmJmUuY2hhckNvZGVBdCh+LXIpPT09dC5jaGFyQ29kZUF0KH4taSk7KXItLSxpLS07aWYoMD09PXIpcmV0dXJuIGk7Zm9yKHZhciBvPTA7bzxyJiZlLmNoYXJDb2RlQXQobyk9PT10LmNoYXJDb2RlQXQobyk7KW8rKztpZihyLT1vLGktPW8sMD09PXIpcmV0dXJuIGk7Zm9yKHZhciBhLHMsdSxjLGw9MCxwPTA7bDxyOyljaGFyQ29kZUNhY2hlW28rbF09ZS5jaGFyQ29kZUF0KG8rbCksYXJyW2xdPSsrbDtmb3IoO3A8aTspZm9yKGE9dC5jaGFyQ29kZUF0KG8rcCksdT1wKysscz1wLGw9MDtsPHI7bCsrKWM9YT09PWNoYXJDb2RlQ2FjaGVbbytsXT91OnUrMSx1PWFycltsXSxzPWFycltsXT11PnM/Yz5zP3MrMTpjOmM+dT91KzE6YztyZXR1cm4gc30sb3B0aW9uc0Rlc2NyaXB0b3I9e2FwaURlc2NyaXB0b3I6YXBpRGVzY3JpcHRvcixjbGlEZXNjcmlwdG9yOmNsaURlc2NyaXB0b3J9LG9wdGlvbnNWYWxpZGF0b3I9e3ZhbGlkYXRlT3B0aW9uOnZhbGlkYXRlT3B0aW9ufSxvcHRpb25zTm9ybWFsaXplcj17bm9ybWFsaXplQXBpT3B0aW9uczpub3JtYWxpemVBcGlPcHRpb25zLG5vcm1hbGl6ZUNsaU9wdGlvbnM6bm9ybWFsaXplQ2xpT3B0aW9uc30sZ2V0TGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+MD9lW2UubGVuZ3RoLTFdOm51bGx9LGxvYz17bG9jU3RhcnQ6bG9jU3RhcnQkMSxsb2NFbmQ6bG9jRW5kJDF9LGpzVG9rZW5zPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD0vKChbJyJdKSg/Oig/IVwyfFxcKS58XFwoPzpcclxufFtcc1xTXSkpKihcMik/fGAoPzpbXmBcXCRdfFxcW1xzXFNdfFwkKD8hXHspfFwkXHsoPzpbXnt9XXxce1tefV0qXH0/KSpcfT8pKihgKT8pfChcL1wvLiopfChcL1wqKD86W14qXXxcKig/IVwvKSkqKFwqXC8pPyl8KFwvKD8hXCopKD86XFsoPzooPyFbXF1cXF0pLnxcXC4pKlxdfCg/IVtcL1xdXFxdKS58XFwuKStcLyg/Oig/IVxzKig/OlxifFtcdTAwODAtXHVGRkZGJFxcJyJ+KHtdfFsrXC0hXSg/IT0pfFwuP1xkKSl8W2dtaXl1XXsxLDV9XGIoPyFbXHUwMDgwLVx1RkZGRiRcXF18XHMqKD86WytcLSolJnxePD4hPT8oe118XC8oPyFbXC8qXSkpKSkpfCgwW3hYXVtcZGEtZkEtRl0rfDBbb09dWzAtN10rfDBbYkJdWzAxXSt8KD86XGQqXC5cZCt8XGQrXC4/KSg/OltlRV1bKy1dP1xkKyk/KXwoKD8hXGQpKD86KD8hXHMpWyRcd1x1MDA4MC1cdUZGRkZdfFxcdVtcZGEtZkEtRl17NH18XFx1XHtbXGRhLWZBLUZdK1x9KSspfCgtLXxcK1wrfCYmfFx8XHx8PT58XC57M318KD86WytcLVwvJSZ8Xl18XCp7MSwyfXw8ezEsMn18PnsxLDN9fCE9P3w9ezEsMn0pPT98Wz9+Liw6O1tcXSgpe31dKXwoXHMrKXwoXiR8W1xzXFNdKS9nLHQubWF0Y2hUb1Rva2VuPWZ1bmN0aW9uKGUpe3ZhciB0PXt0eXBlOiJpbnZhbGlkIix2YWx1ZTplWzBdfTtyZXR1cm4gZVsxXT8odC50eXBlPSJzdHJpbmciLHQuY2xvc2VkPSEoIWVbM10mJiFlWzRdKSk6ZVs1XT90LnR5cGU9ImNvbW1lbnQiOmVbNl0/KHQudHlwZT0iY29tbWVudCIsdC5jbG9zZWQ9ISFlWzddKTplWzhdP3QudHlwZT0icmVnZXgiOmVbOV0/dC50eXBlPSJudW1iZXIiOmVbMTBdP3QudHlwZT0ibmFtZSI6ZVsxMV0/dC50eXBlPSJwdW5jdHVhdG9yIjplWzEyXSYmKHQudHlwZT0id2hpdGVzcGFjZSIpLHR9fSk7dW53cmFwRXhwb3J0cyhqc1Rva2Vucyk7dmFyIGFzdD1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlKXshZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2lmKG51bGw9PWUpcmV0dXJuITE7c3dpdGNoKGUudHlwZSl7Y2FzZSJBcnJheUV4cHJlc3Npb24iOmNhc2UiQXNzaWdubWVudEV4cHJlc3Npb24iOmNhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJDYWxsRXhwcmVzc2lvbiI6Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOmNhc2UiRnVuY3Rpb25FeHByZXNzaW9uIjpjYXNlIklkZW50aWZpZXIiOmNhc2UiTGl0ZXJhbCI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpjYXNlIk5ld0V4cHJlc3Npb24iOmNhc2UiT2JqZWN0RXhwcmVzc2lvbiI6Y2FzZSJTZXF1ZW5jZUV4cHJlc3Npb24iOmNhc2UiVGhpc0V4cHJlc3Npb24iOmNhc2UiVW5hcnlFeHByZXNzaW9uIjpjYXNlIlVwZGF0ZUV4cHJlc3Npb24iOnJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG4oZSl7aWYobnVsbD09ZSlyZXR1cm4hMTtzd2l0Y2goZS50eXBlKXtjYXNlIkRvV2hpbGVTdGF0ZW1lbnQiOmNhc2UiRm9ySW5TdGF0ZW1lbnQiOmNhc2UiRm9yU3RhdGVtZW50IjpjYXNlIldoaWxlU3RhdGVtZW50IjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiByKGUpe2lmKG51bGw9PWUpcmV0dXJuITE7c3dpdGNoKGUudHlwZSl7Y2FzZSJCbG9ja1N0YXRlbWVudCI6Y2FzZSJCcmVha1N0YXRlbWVudCI6Y2FzZSJDb250aW51ZVN0YXRlbWVudCI6Y2FzZSJEZWJ1Z2dlclN0YXRlbWVudCI6Y2FzZSJEb1doaWxlU3RhdGVtZW50IjpjYXNlIkVtcHR5U3RhdGVtZW50IjpjYXNlIkV4cHJlc3Npb25TdGF0ZW1lbnQiOmNhc2UiRm9ySW5TdGF0ZW1lbnQiOmNhc2UiRm9yU3RhdGVtZW50IjpjYXNlIklmU3RhdGVtZW50IjpjYXNlIkxhYmVsZWRTdGF0ZW1lbnQiOmNhc2UiUmV0dXJuU3RhdGVtZW50IjpjYXNlIlN3aXRjaFN0YXRlbWVudCI6Y2FzZSJUaHJvd1N0YXRlbWVudCI6Y2FzZSJUcnlTdGF0ZW1lbnQiOmNhc2UiVmFyaWFibGVEZWNsYXJhdGlvbiI6Y2FzZSJXaGlsZVN0YXRlbWVudCI6Y2FzZSJXaXRoU3RhdGVtZW50IjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKGUpe3JldHVybiByKGUpfHxudWxsIT1lJiYiRnVuY3Rpb25EZWNsYXJhdGlvbiI9PT1lLnR5cGV9ZnVuY3Rpb24gbyhlKXtzd2l0Y2goZS50eXBlKXtjYXNlIklmU3RhdGVtZW50IjpyZXR1cm4gbnVsbCE9ZS5hbHRlcm5hdGU/ZS5hbHRlcm5hdGU6ZS5jb25zZXF1ZW50O2Nhc2UiTGFiZWxlZFN0YXRlbWVudCI6Y2FzZSJGb3JTdGF0ZW1lbnQiOmNhc2UiRm9ySW5TdGF0ZW1lbnQiOmNhc2UiV2hpbGVTdGF0ZW1lbnQiOmNhc2UiV2l0aFN0YXRlbWVudCI6cmV0dXJuIGUuYm9keX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhKGUpe3ZhciB0O2lmKCJJZlN0YXRlbWVudCIhPT1lLnR5cGUpcmV0dXJuITE7aWYobnVsbD09ZS5hbHRlcm5hdGUpcmV0dXJuITE7dD1lLmNvbnNlcXVlbnQ7ZG97aWYoIklmU3RhdGVtZW50Ij09PXQudHlwZSYmbnVsbD09dC5hbHRlcm5hdGUpcmV0dXJuITA7dD1vKHQpfXdoaWxlKHQpO3JldHVybiExfWUuZXhwb3J0cz17aXNFeHByZXNzaW9uOnQsaXNTdGF0ZW1lbnQ6cixpc0l0ZXJhdGlvblN0YXRlbWVudDpuLGlzU291cmNlRWxlbWVudDppLGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudDphLHRyYWlsaW5nU3RhdGVtZW50Om99fSgpfSksY29kZT1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlKXshZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3JldHVybiA0ODw9ZSYmZTw9NTd9ZnVuY3Rpb24gbihlKXtyZXR1cm4gNDg8PWUmJmU8PTU3fHw5Nzw9ZSYmZTw9MTAyfHw2NTw9ZSYmZTw9NzB9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZT49NDgmJmU8PTU1fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDExPT09ZXx8MTI9PT1lfHwxNjA9PT1lfHxlPj01NzYwJiZkLmluZGV4T2YoZSk+PTB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMTA9PT1lfHwxMz09PWV8fDgyMzI9PT1lfHw4MjMzPT09ZX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOlN0cmluZy5mcm9tQ2hhckNvZGUoTWF0aC5mbG9vcigoZS02NTUzNikvMTAyNCkrNTUyOTYpK1N0cmluZy5mcm9tQ2hhckNvZGUoKGUtNjU1MzYpJTEwMjQrNTYzMjApfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGU8MTI4P2hbZV06Zi5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGEoZSkpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGU8MTI4P21bZV06Zi5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QoYShlKSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZTwxMjg/aFtlXTpwLk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoYShlKSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZTwxMjg/bVtlXTpwLk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChhKGUpKX12YXIgcCxmLGQsaCxtLGc7Zm9yKGY9e05vbkFzY2lpSWRlbnRpZmllclN0YXJ0Oi9bXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTAtXHUwOEIyXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBN0FEXHVBN0IwXHVBN0IxXHVBN0Y3LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjVGXHVBQjY0XHVBQjY1XHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10vLE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6L1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzFcdTA1QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYxMC1cdTA2MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2RENcdTA2REYtXHUwNkU4XHUwNkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUwN0IxXHUwN0MwLVx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwOEEwLVx1MDhCMlx1MDhFNC1cdTA5NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCLVx1MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwQTAxLVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNDLVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTZcdTBCNTdcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2Rlx1MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQwXHUwQkQ3XHUwQkU2LVx1MEJFRlx1MEMwMC1cdTBDMDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1XHUwQzU2XHUwQzU4XHUwQzU5XHUwQzYwLVx1MEM2M1x1MEM2Ni1cdTBDNkZcdTBDODEtXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkMtXHUwQ0M0XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDVcdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0UzXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwMS1cdTBEMDNcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENEVcdTBENTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0ZcdTBEODJcdTBEODNcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERTYtXHUwREVGXHUwREYyXHUwREYzXHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNEVcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCOVx1MEVCQi1cdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRUM4LVx1MEVDRFx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjE4XHUwRjE5XHUwRjIwLVx1MEYyOVx1MEYzNVx1MEYzN1x1MEYzOVx1MEYzRS1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjcxLVx1MEY4NFx1MEY4Ni1cdTBGOTdcdTBGOTktXHUwRkJDXHUwRkM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEwOURcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzVELVx1MTM1Rlx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAtXHUxN0QzXHUxN0Q3XHUxN0RDXHUxN0REXHUxN0UwLVx1MTdFOVx1MTgwQi1cdTE4MERcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxRVx1MTkyMC1cdTE5MkJcdTE5MzAtXHUxOTNCXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5RDlcdTFBMDAtXHUxQTFCXHUxQTIwLVx1MUE1RVx1MUE2MC1cdTFBN0NcdTFBN0YtXHUxQTg5XHUxQTkwLVx1MUE5OVx1MUFBN1x1MUFCMC1cdTFBQkRcdTFCMDAtXHUxQjRCXHUxQjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1MUMzN1x1MUM0MC1cdTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZcdTFDRjhcdTFDRjlcdTFEMDAtXHUxREY1XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDBDXHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBEMC1cdTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OVx1MzA5QVx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2OURcdUE2OUYtXHVBNkYxXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTdBRFx1QTdCMFx1QTdCMVx1QTdGNy1cdUE4MjdcdUE4NDAtXHVBODczXHVBODgwLVx1QThDNFx1QThEMC1cdUE4RDlcdUE4RTAtXHVBOEY3XHVBOEZCXHVBOTAwLVx1QTkyRFx1QTkzMC1cdUE5NTNcdUE5NjAtXHVBOTdDXHVBOTgwLVx1QTlDMFx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUZFXHVBQTAwLVx1QUEzNlx1QUE0MC1cdUFBNERcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QS1cdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFRlx1QUFGMi1cdUFBRjZcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjVGXHVBQjY0XHVBQjY1XHVBQkMwLVx1QUJFQVx1QUJFQ1x1QUJFRFx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFELVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFMDAtXHVGRTBGXHVGRTIwLVx1RkUyRFx1RkUzM1x1RkUzNFx1RkU0RC1cdUZFNEZcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjNGXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXS99LHA9e05vbkFzY2lpSWRlbnRpZmllclN0YXJ0Oi9bXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTAtXHUwOEIyXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDlCLVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjlEXHVBNkEwLVx1QTZFRlx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3QURcdUE3QjBcdUE3QjFcdUE3RjctXHVBODAxXHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QTlFMC1cdUE5RTRcdUE5RTYtXHVBOUVGXHVBOUZBLVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0UtXHVBQUFGXHVBQUIxXHVBQUI1XHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNUZcdUFCNjRcdUFCNjVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDQwLVx1REQ3NFx1REU4MC1cdURFOUNcdURFQTAtXHVERUQwXHVERjAwLVx1REYxRlx1REYzMC1cdURGNEFcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQxLVx1REZENV18XHVEODAxW1x1REMwMC1cdURDOURcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTMzXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNFx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM4My1cdURDQUZcdURDRDAtXHVEQ0U4XHVERDAzLVx1REQyNlx1REQ1MC1cdURENzJcdURENzZcdUREODMtXHVEREIyXHVEREMxLVx1RERDNFx1REREQVx1REUwMC1cdURFMTFcdURFMTMtXHVERTJCXHVERUIwLVx1REVERVx1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0RcdURGNUQtXHVERjYxXXxcdUQ4MDVbXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1REQ4MC1cdUREQUVcdURFMDAtXHVERTJGXHVERTQ0XHVERTgwLVx1REVBQV18XHVEODA2W1x1RENBMC1cdURDREZcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1REY5OF18XHVEODA5W1x1REMwMC1cdURDNkVdfFtcdUQ4MENcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q11bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REVEMC1cdURFRURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MFx1REY5My1cdURGOUZdfFx1RDgyQ1tcdURDMDBcdURDMDFdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQl18XHVEODNBW1x1REMwMC1cdURDQzRdfFx1RDgzQltcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1cdURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1RDg2RVtcdURDMDAtXHVEQzFEXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF0vLE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6L1tceEFBXHhCNVx4QjdceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMC1cdTA4QjJcdTA4RTQtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDAtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OFx1MEM1OVx1MEM2MC1cdTBDNjNcdTBDNjYtXHUwQzZGXHUwQzgxLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDEtXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNELVx1MEQ0NFx1MEQ0Ni1cdTBENDhcdTBENEEtXHUwRDRFXHUwRDU3XHUwRDYwLVx1MEQ2M1x1MEQ2Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgyXHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBERDZcdTBERDgtXHUwRERGXHUwREU2LVx1MERFRlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0FcdTBFNDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlcdTBFQkItXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYxOFx1MEYxOVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdcdTBGMzlcdTBGM0UtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3XHUwRjk5LVx1MEZCQ1x1MEZDNlx1MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1cdTEzNUZcdTEzNjktXHUxMzcxXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzE0XHUxNzIwLVx1MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1cdTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUxN0U5XHUxODBCLVx1MTgwRFx1MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlEQVx1MUEwMC1cdTFBMUJcdTFBMjAtXHUxQTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQUIwLVx1MUFCRFx1MUIwMC1cdTFCNEJcdTFCNTAtXHUxQjU5XHUxQjZCLVx1MUI3M1x1MUI4MC1cdTFCRjNcdTFDMDAtXHUxQzM3XHUxQzQwLVx1MUM0OVx1MUM0RC1cdTFDN0RcdTFDRDAtXHUxQ0QyXHUxQ0Q0LVx1MUNGNlx1MUNGOFx1MUNGOVx1MUQwMC1cdTFERjVcdTFERkMtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwMENcdTIwMERcdTIwM0ZcdTIwNDBcdTIwNTRcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMEQwLVx1MjBEQ1x1MjBFMVx1MjBFNS1cdTIwRjBcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOTktXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0RcdUE2N0YtXHVBNjlEXHVBNjlGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3QURcdUE3QjBcdUE3QjFcdUE3RjctXHVBODI3XHVBODQwLVx1QTg3M1x1QTg4MC1cdUE4QzRcdUE4RDAtXHVBOEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QTkwMC1cdUE5MkRcdUE5MzAtXHVBOTUzXHVBOTYwLVx1QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVBOUQ5XHVBOUUwLVx1QTlGRVx1QUEwMC1cdUFBMzZcdUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0EtXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI1Rlx1QUI2NFx1QUI2NVx1QUJDMC1cdUFCRUFcdUFCRUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUwRlx1RkUyMC1cdUZFMkRcdUZFMzNcdUZFMzRcdUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURERkRcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUwLVx1REY3QVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVEQ0EwLVx1RENBOVx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDAtXHVERTAzXHVERTA1XHVERTA2XHVERTBDLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTMzXHVERTM4LVx1REUzQVx1REUzRlx1REU2MC1cdURFN0NcdURFODAtXHVERTlDXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTZcdURGMDAtXHVERjM1XHVERjQwLVx1REY1NVx1REY2MC1cdURGNzJcdURGODAtXHVERjkxXXxcdUQ4MDNbXHVEQzAwLVx1REM0OF18XHVEODA0W1x1REMwMC1cdURDNDZcdURDNjYtXHVEQzZGXHVEQzdGLVx1RENCQVx1RENEMC1cdURDRThcdURDRjAtXHVEQ0Y5XHVERDAwLVx1REQzNFx1REQzNi1cdUREM0ZcdURENTAtXHVERDczXHVERDc2XHVERDgwLVx1RERDNFx1REREMC1cdUREREFcdURFMDAtXHVERTExXHVERTEzLVx1REUzN1x1REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVERjAxLVx1REYwM1x1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVERjRCLVx1REY0RFx1REY1N1x1REY1RC1cdURGNjNcdURGNjYtXHVERjZDXHVERjcwLVx1REY3NF18XHVEODA1W1x1REM4MC1cdURDQzVcdURDQzdcdURDRDAtXHVEQ0Q5XHVERDgwLVx1RERCNVx1RERCOC1cdUREQzBcdURFMDAtXHVERTQwXHVERTQ0XHVERTUwLVx1REU1OVx1REU4MC1cdURFQjdcdURFQzAtXHVERUM5XXxcdUQ4MDZbXHVEQ0EwLVx1RENFOVx1RENGRlx1REVDMC1cdURFRjhdfFx1RDgwOFtcdURDMDAtXHVERjk4XXxcdUQ4MDlbXHVEQzAwLVx1REM2RV18W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVFXHVERTYwLVx1REU2OVx1REVEMC1cdURFRURcdURFRjAtXHVERUY0XHVERjAwLVx1REYzNlx1REY0MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURGMDAtXHVERjQ0XHVERjUwLVx1REY3RVx1REY4Ri1cdURGOUZdfFx1RDgyQ1tcdURDMDBcdURDMDFdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XHVEQzlEXHVEQzlFXXxcdUQ4MzRbXHVERDY1LVx1REQ2OVx1REQ2RC1cdURENzJcdUREN0ItXHVERDgyXHVERDg1LVx1REQ4Qlx1RERBQS1cdUREQURcdURFNDItXHVERTQ0XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZDRS1cdURGRkZdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XHVEQ0QwLVx1RENENl18XHVEODNCW1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM0XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdURCNDBbXHVERDAwLVx1RERFRl0vfSxkPVs1NzYwLDYxNTgsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMzksODI4NywxMjI4OCw2NTI3OV0saD1uZXcgQXJyYXkoMTI4KSxnPTA7ZzwxMjg7KytnKWhbZ109Zz49OTcmJmc8PTEyMnx8Zz49NjUmJmc8PTkwfHwzNj09PWd8fDk1PT09Zztmb3IobT1uZXcgQXJyYXkoMTI4KSxnPTA7ZzwxMjg7KytnKW1bZ109Zz49OTcmJmc8PTEyMnx8Zz49NjUmJmc8PTkwfHxnPj00OCYmZzw9NTd8fDM2PT09Z3x8OTU9PT1nO2UuZXhwb3J0cz17aXNEZWNpbWFsRGlnaXQ6dCxpc0hleERpZ2l0Om4saXNPY3RhbERpZ2l0OnIsaXNXaGl0ZVNwYWNlOmksaXNMaW5lVGVybWluYXRvcjpvLGlzSWRlbnRpZmllclN0YXJ0RVM1OnMsaXNJZGVudGlmaWVyUGFydEVTNTp1LGlzSWRlbnRpZmllclN0YXJ0RVM2OmMsaXNJZGVudGlmaWVyUGFydEVTNjpsfX0oKX0pLGtleXdvcmQ9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtzd2l0Y2goZSl7Y2FzZSJpbXBsZW1lbnRzIjpjYXNlImludGVyZmFjZSI6Y2FzZSJwYWNrYWdlIjpjYXNlInByaXZhdGUiOmNhc2UicHJvdGVjdGVkIjpjYXNlInB1YmxpYyI6Y2FzZSJzdGF0aWMiOmNhc2UibGV0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBuKGUsdCl7cmV0dXJuISghdCYmInlpZWxkIj09PWUpJiZyKGUsdCl9ZnVuY3Rpb24gcihlLG4pe2lmKG4mJnQoZSkpcmV0dXJuITA7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDI6cmV0dXJuImlmIj09PWV8fCJpbiI9PT1lfHwiZG8iPT09ZTtjYXNlIDM6cmV0dXJuInZhciI9PT1lfHwiZm9yIj09PWV8fCJuZXciPT09ZXx8InRyeSI9PT1lO2Nhc2UgNDpyZXR1cm4idGhpcyI9PT1lfHwiZWxzZSI9PT1lfHwiY2FzZSI9PT1lfHwidm9pZCI9PT1lfHwid2l0aCI9PT1lfHwiZW51bSI9PT1lO2Nhc2UgNTpyZXR1cm4id2hpbGUiPT09ZXx8ImJyZWFrIj09PWV8fCJjYXRjaCI9PT1lfHwidGhyb3ciPT09ZXx8ImNvbnN0Ij09PWV8fCJ5aWVsZCI9PT1lfHwiY2xhc3MiPT09ZXx8InN1cGVyIj09PWU7Y2FzZSA2OnJldHVybiJyZXR1cm4iPT09ZXx8InR5cGVvZiI9PT1lfHwiZGVsZXRlIj09PWV8fCJzd2l0Y2giPT09ZXx8ImV4cG9ydCI9PT1lfHwiaW1wb3J0Ij09PWU7Y2FzZSA3OnJldHVybiJkZWZhdWx0Ij09PWV8fCJmaW5hbGx5Ij09PWV8fCJleHRlbmRzIj09PWU7Y2FzZSA4OnJldHVybiJmdW5jdGlvbiI9PT1lfHwiY29udGludWUiPT09ZXx8ImRlYnVnZ2VyIj09PWU7Y2FzZSAxMDpyZXR1cm4iaW5zdGFuY2VvZiI9PT1lO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4ibnVsbCI9PT1lfHwidHJ1ZSI9PT1lfHwiZmFsc2UiPT09ZXx8bihlLHQpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4ibnVsbCI9PT1lfHwidHJ1ZSI9PT1lfHwiZmFsc2UiPT09ZXx8cihlLHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuImV2YWwiPT09ZXx8ImFyZ3VtZW50cyI9PT1lfWZ1bmN0aW9uIHMoZSl7dmFyIHQsbixyO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMTtpZihyPWUuY2hhckNvZGVBdCgwKSwhZi5pc0lkZW50aWZpZXJTdGFydEVTNShyKSlyZXR1cm4hMTtmb3IodD0xLG49ZS5sZW5ndGg7dDxuOysrdClpZihyPWUuY2hhckNvZGVBdCh0KSwhZi5pc0lkZW50aWZpZXJQYXJ0RVM1KHIpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMTAyNCooZS01NTI5NikrKHQtNTYzMjApKzY1NTM2fWZ1bmN0aW9uIGMoZSl7dmFyIHQsbixyLGksbztpZigwPT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKG89Zi5pc0lkZW50aWZpZXJTdGFydEVTNix0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXtpZig1NTI5Njw9KHI9ZS5jaGFyQ29kZUF0KHQpKSYmcjw9NTYzMTkpe2lmKCsrdD49bilyZXR1cm4hMTtpZighKDU2MzIwPD0oaT1lLmNoYXJDb2RlQXQodCkpJiZpPD01NzM0MykpcmV0dXJuITE7cj11KHIsaSl9aWYoIW8ocikpcmV0dXJuITE7bz1mLmlzSWRlbnRpZmllclBhcnRFUzZ9cmV0dXJuITB9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBzKGUpJiYhaShlLHQpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gYyhlKSYmIW8oZSx0KX12YXIgZj1jb2RlO2UuZXhwb3J0cz17aXNLZXl3b3JkRVM1Om4saXNLZXl3b3JkRVM2OnIsaXNSZXNlcnZlZFdvcmRFUzU6aSxpc1Jlc2VydmVkV29yZEVTNjpvLGlzUmVzdHJpY3RlZFdvcmQ6YSxpc0lkZW50aWZpZXJOYW1lRVM1OnMsaXNJZGVudGlmaWVyTmFtZUVTNjpjLGlzSWRlbnRpZmllckVTNTpsLGlzSWRlbnRpZmllckVTNjpwfX0oKX0pLHV0aWxzPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7dC5hc3Q9YXN0LHQuY29kZT1jb2RlLHQua2V5d29yZD1rZXl3b3JkfSgpfSksbWF0Y2hPcGVyYXRvcnNSZT0vW3xcXHt9KClbXF1eJCsqPy5dL2csZXNjYXBlU3RyaW5nUmVnZXhwPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtyZXR1cm4gZS5yZXBsYWNlKG1hdGNoT3BlcmF0b3JzUmUsIlxcJCYiKX0sY29sb3JOYW1lPXthbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxncmV5OlsxMjgsMTI4LDEyOF0saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTNdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LGNvbnZlcnNpb25zPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtyZXR1cm4gTWF0aC5wb3coZVswXS10WzBdLDIpK01hdGgucG93KGVbMV0tdFsxXSwyKStNYXRoLnBvdyhlWzJdLXRbMl0sMil9dmFyIG49e307Zm9yKHZhciByIGluIGNvbG9yTmFtZSljb2xvck5hbWUuaGFzT3duUHJvcGVydHkocikmJihuW2NvbG9yTmFtZVtyXV09cik7dmFyIGk9ZS5leHBvcnRzPXtyZ2I6e2NoYW5uZWxzOjMsbGFiZWxzOiJyZ2IifSxoc2w6e2NoYW5uZWxzOjMsbGFiZWxzOiJoc2wifSxoc3Y6e2NoYW5uZWxzOjMsbGFiZWxzOiJoc3YifSxod2I6e2NoYW5uZWxzOjMsbGFiZWxzOiJod2IifSxjbXlrOntjaGFubmVsczo0LGxhYmVsczoiY215ayJ9LHh5ejp7Y2hhbm5lbHM6MyxsYWJlbHM6Inh5eiJ9LGxhYjp7Y2hhbm5lbHM6MyxsYWJlbHM6ImxhYiJ9LGxjaDp7Y2hhbm5lbHM6MyxsYWJlbHM6ImxjaCJ9LGhleDp7Y2hhbm5lbHM6MSxsYWJlbHM6WyJoZXgiXX0sa2V5d29yZDp7Y2hhbm5lbHM6MSxsYWJlbHM6WyJrZXl3b3JkIl19LGFuc2kxNjp7Y2hhbm5lbHM6MSxsYWJlbHM6WyJhbnNpMTYiXX0sYW5zaTI1Njp7Y2hhbm5lbHM6MSxsYWJlbHM6WyJhbnNpMjU2Il19LGhjZzp7Y2hhbm5lbHM6MyxsYWJlbHM6WyJoIiwiYyIsImciXX0sYXBwbGU6e2NoYW5uZWxzOjMsbGFiZWxzOlsicjE2IiwiZzE2IiwiYjE2Il19LGdyYXk6e2NoYW5uZWxzOjEsbGFiZWxzOlsiZ3JheSJdfX07Zm9yKHZhciBvIGluIGkpaWYoaS5oYXNPd25Qcm9wZXJ0eShvKSl7aWYoISgiY2hhbm5lbHMiaW4gaVtvXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNoYW5uZWxzIHByb3BlcnR5OiAiK28pO2lmKCEoImxhYmVscyJpbiBpW29dKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICIrbyk7aWYoaVtvXS5sYWJlbHMubGVuZ3RoIT09aVtvXS5jaGFubmVscyl0aHJvdyBuZXcgRXJyb3IoImNoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogIitvKTt2YXIgYT1pW29dLmNoYW5uZWxzLHM9aVtvXS5sYWJlbHM7ZGVsZXRlIGlbb10uY2hhbm5lbHMsZGVsZXRlIGlbb10ubGFiZWxzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpW29dLCJjaGFubmVscyIse3ZhbHVlOmF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaVtvXSwibGFiZWxzIix7dmFsdWU6c30pfWkucmdiLmhzbD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT1lWzBdLzI1NSxvPWVbMV0vMjU1LGE9ZVsyXS8yNTUscz1NYXRoLm1pbihpLG8sYSksdT1NYXRoLm1heChpLG8sYSksYz11LXM7cmV0dXJuIHU9PT1zP3Q9MDppPT09dT90PShvLWEpL2M6bz09PXU/dD0yKyhhLWkpL2M6YT09PXUmJih0PTQrKGktbykvYyksdD1NYXRoLm1pbig2MCp0LDM2MCksdDwwJiYodCs9MzYwKSxyPShzK3UpLzIsbj11PT09cz8wOnI8PS41P2MvKHUrcyk6Yy8oMi11LXMpLFt0LDEwMCpuLDEwMCpyXX0saS5yZ2IuaHN2PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWVbMF0sbz1lWzFdLGE9ZVsyXSxzPU1hdGgubWluKGksbyxhKSx1PU1hdGgubWF4KGksbyxhKSxjPXUtcztyZXR1cm4gbj0wPT09dT8wOmMvdSoxZTMvMTAsdT09PXM/dD0wOmk9PT11P3Q9KG8tYSkvYzpvPT09dT90PTIrKGEtaSkvYzphPT09dSYmKHQ9NCsoaS1vKS9jKSx0PU1hdGgubWluKDYwKnQsMzYwKSx0PDAmJih0Kz0zNjApLHI9dS8yNTUqMWUzLzEwLFt0LG4scl19LGkucmdiLmh3Yj1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXSxyPWVbMl0sbz1pLnJnYi5oc2woZSlbMF0sYT0xLzI1NSpNYXRoLm1pbih0LE1hdGgubWluKG4scikpO3JldHVybiByPTEtMS8yNTUqTWF0aC5tYXgodCxNYXRoLm1heChuLHIpKSxbbywxMDAqYSwxMDAqcl19LGkucmdiLmNteWs9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz1lWzBdLzI1NSxhPWVbMV0vMjU1LHM9ZVsyXS8yNTU7cmV0dXJuIGk9TWF0aC5taW4oMS1vLDEtYSwxLXMpLHQ9KDEtby1pKS8oMS1pKXx8MCxuPSgxLWEtaSkvKDEtaSl8fDAscj0oMS1zLWkpLygxLWkpfHwwLFsxMDAqdCwxMDAqbiwxMDAqciwxMDAqaV19LGkucmdiLmtleXdvcmQ9ZnVuY3Rpb24oZSl7dmFyIHI9bltlXTtpZihyKXJldHVybiByO3ZhciBpLG89MS8wO2Zvcih2YXIgYSBpbiBjb2xvck5hbWUpaWYoY29sb3JOYW1lLmhhc093blByb3BlcnR5KGEpKXt2YXIgcz1jb2xvck5hbWVbYV0sdT10KGUscyk7dTxvJiYobz11LGk9YSl9cmV0dXJuIGl9LGkua2V5d29yZC5yZ2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbG9yTmFtZVtlXX0saS5yZ2IueHl6PWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0vMjU1LG49ZVsxXS8yNTUscj1lWzJdLzI1NTtyZXR1cm4gdD10Pi4wNDA0NT9NYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpOnQvMTIuOTIsbj1uPi4wNDA0NT9NYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpOm4vMTIuOTIscj1yPi4wNDA0NT9NYXRoLnBvdygocisuMDU1KS8xLjA1NSwyLjQpOnIvMTIuOTIsWzEwMCooLjQxMjQqdCsuMzU3NipuKy4xODA1KnIpLDEwMCooLjIxMjYqdCsuNzE1MipuKy4wNzIyKnIpLDEwMCooLjAxOTMqdCsuMTE5MipuKy45NTA1KnIpXX0saS5yZ2IubGFiPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPWkucmdiLnh5eihlKSxhPW9bMF0scz1vWzFdLHU9b1syXTtyZXR1cm4gYS89OTUuMDQ3LHMvPTEwMCx1Lz0xMDguODgzLGE9YT4uMDA4ODU2P01hdGgucG93KGEsMS8zKTo3Ljc4NyphKzE2LzExNixzPXM+LjAwODg1Nj9NYXRoLnBvdyhzLDEvMyk6Ny43ODcqcysxNi8xMTYsdT11Pi4wMDg4NTY/TWF0aC5wb3codSwxLzMpOjcuNzg3KnUrMTYvMTE2LHQ9MTE2KnMtMTYsbj01MDAqKGEtcykscj0yMDAqKHMtdSksW3QsbixyXX0saS5oc2wucmdiPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT1lWzBdLzM2MCxzPWVbMV0vMTAwLHU9ZVsyXS8xMDA7aWYoMD09PXMpcmV0dXJuIG89MjU1KnUsW28sbyxvXTtuPXU8LjU/dSooMStzKTp1K3MtdSpzLHQ9Mip1LW4saT1bMCwwLDBdO2Zvcih2YXIgYz0wO2M8MztjKyspcj1hKzEvMyotKGMtMSkscjwwJiZyKysscj4xJiZyLS0sbz02KnI8MT90KzYqKG4tdCkqcjoyKnI8MT9uOjMqcjwyP3QrKG4tdCkqKDIvMy1yKSo2OnQsaVtjXT0yNTUqbztyZXR1cm4gaX0saS5oc2wuaHN2PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lWzBdLGk9ZVsxXS8xMDAsbz1lWzJdLzEwMCxhPWkscz1NYXRoLm1heChvLC4wMSk7cmV0dXJuIG8qPTIsaSo9bzw9MT9vOjItbyxhKj1zPD0xP3M6Mi1zLG49KG8raSkvMix0PTA9PT1vPzIqYS8ocythKToyKmkvKG8raSksW3IsMTAwKnQsMTAwKm5dfSxpLmhzdi5yZ2I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS82MCxuPWVbMV0vMTAwLHI9ZVsyXS8xMDAsaT1NYXRoLmZsb29yKHQpJTYsbz10LU1hdGguZmxvb3IodCksYT0yNTUqciooMS1uKSxzPTI1NSpyKigxLW4qbyksdT0yNTUqciooMS1uKigxLW8pKTtzd2l0Y2gocio9MjU1LGkpe2Nhc2UgMDpyZXR1cm5bcix1LGFdO2Nhc2UgMTpyZXR1cm5bcyxyLGFdO2Nhc2UgMjpyZXR1cm5bYSxyLHVdO2Nhc2UgMzpyZXR1cm5bYSxzLHJdO2Nhc2UgNDpyZXR1cm5bdSxhLHJdO2Nhc2UgNTpyZXR1cm5bcixhLHNdfX0saS5oc3YuaHNsPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWVbMF0sbz1lWzFdLzEwMCxhPWVbMl0vMTAwLHM9TWF0aC5tYXgoYSwuMDEpO3JldHVybiByPSgyLW8pKmEsdD0oMi1vKSpzLG49bypzLG4vPXQ8PTE/dDoyLXQsbj1ufHwwLHIvPTIsW2ksMTAwKm4sMTAwKnJdfSxpLmh3Yi5yZ2I9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz1lWzBdLzM2MCxhPWVbMV0vMTAwLHM9ZVsyXS8xMDAsdT1hK3M7dT4xJiYoYS89dSxzLz11KSx0PU1hdGguZmxvb3IoNipvKSxuPTEtcyxyPTYqby10LDAhPT0oMSZ0KSYmKHI9MS1yKSxpPWErcioobi1hKTt2YXIgYyxsLHA7c3dpdGNoKHQpe2RlZmF1bHQ6Y2FzZSA2OmNhc2UgMDpjPW4sbD1pLHA9YTticmVhaztjYXNlIDE6Yz1pLGw9bixwPWE7YnJlYWs7Y2FzZSAyOmM9YSxsPW4scD1pO2JyZWFrO2Nhc2UgMzpjPWEsbD1pLHA9bjticmVhaztjYXNlIDQ6Yz1pLGw9YSxwPW47YnJlYWs7Y2FzZSA1OmM9bixsPWEscD1pfXJldHVyblsyNTUqYywyNTUqbCwyNTUqcF19LGkuY215ay5yZ2I9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZVswXS8xMDAsbz1lWzFdLzEwMCxhPWVbMl0vMTAwLHM9ZVszXS8xMDA7cmV0dXJuIHQ9MS1NYXRoLm1pbigxLGkqKDEtcykrcyksbj0xLU1hdGgubWluKDEsbyooMS1zKStzKSxyPTEtTWF0aC5taW4oMSxhKigxLXMpK3MpLFsyNTUqdCwyNTUqbiwyNTUqcl19LGkueHl6LnJnYj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT1lWzBdLzEwMCxvPWVbMV0vMTAwLGE9ZVsyXS8xMDA7cmV0dXJuIHQ9My4yNDA2KmkrLTEuNTM3MipvKy0uNDk4NiphLG49LS45Njg5KmkrMS44NzU4Km8rLjA0MTUqYSxyPS4wNTU3KmkrLS4yMDQqbysxLjA1NyphLHQ9dD4uMDAzMTMwOD8xLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1OjEyLjkyKnQsbj1uPi4wMDMxMzA4PzEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTU6MTIuOTIqbixyPXI+LjAwMzEzMDg/MS4wNTUqTWF0aC5wb3cociwxLzIuNCktLjA1NToxMi45MipyLHQ9TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxKSxuPU1hdGgubWluKE1hdGgubWF4KDAsbiksMSkscj1NYXRoLm1pbihNYXRoLm1heCgwLHIpLDEpLFsyNTUqdCwyNTUqbiwyNTUqcl19LGkueHl6LmxhYj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT1lWzBdLG89ZVsxXSxhPWVbMl07cmV0dXJuIGkvPTk1LjA0NyxvLz0xMDAsYS89MTA4Ljg4MyxpPWk+LjAwODg1Nj9NYXRoLnBvdyhpLDEvMyk6Ny43ODcqaSsxNi8xMTYsbz1vPi4wMDg4NTY/TWF0aC5wb3cobywxLzMpOjcuNzg3Km8rMTYvMTE2LGE9YT4uMDA4ODU2P01hdGgucG93KGEsMS8zKTo3Ljc4NyphKzE2LzExNix0PTExNipvLTE2LG49NTAwKihpLW8pLHI9MjAwKihvLWEpLFt0LG4scl19LGkubGFiLnh5ej1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT1lWzBdLG89ZVsxXSxhPWVbMl07bj0oaSsxNikvMTE2LHQ9by81MDArbixyPW4tYS8yMDA7dmFyIHM9TWF0aC5wb3cobiwzKSx1PU1hdGgucG93KHQsMyksYz1NYXRoLnBvdyhyLDMpO3JldHVybiBuPXM+LjAwODg1Nj9zOihuLTE2LzExNikvNy43ODcsdD11Pi4wMDg4NTY/dToodC0xNi8xMTYpLzcuNzg3LHI9Yz4uMDA4ODU2P2M6KHItMTYvMTE2KS83Ljc4Nyx0Kj05NS4wNDcsbio9MTAwLHIqPTEwOC44ODMsW3QsbixyXX0saS5sYWIubGNoPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWVbMF0sbz1lWzFdLGE9ZVsyXTtyZXR1cm4gdD1NYXRoLmF0YW4yKGEsbyksbj0zNjAqdC8yL01hdGguUEksbjwwJiYobis9MzYwKSxyPU1hdGguc3FydChvKm8rYSphKSxbaSxyLG5dfSxpLmxjaC5sYWI9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZVswXSxvPWVbMV0sYT1lWzJdO3JldHVybiByPWEvMzYwKjIqTWF0aC5QSSx0PW8qTWF0aC5jb3Mociksbj1vKk1hdGguc2luKHIpLFtpLHQsbl19LGkucmdiLmFuc2kxNj1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXSxyPWVbMl0sbz0xIGluIGFyZ3VtZW50cz9hcmd1bWVudHNbMV06aS5yZ2IuaHN2KGUpWzJdO2lmKDA9PT0obz1NYXRoLnJvdW5kKG8vNTApKSlyZXR1cm4gMzA7dmFyIGE9MzArKE1hdGgucm91bmQoci8yNTUpPDwyfE1hdGgucm91bmQobi8yNTUpPDwxfE1hdGgucm91bmQodC8yNTUpKTtyZXR1cm4gMj09PW8mJihhKz02MCksYX0saS5oc3YuYW5zaTE2PWZ1bmN0aW9uKGUpe3JldHVybiBpLnJnYi5hbnNpMTYoaS5oc3YucmdiKGUpLGVbMl0pfSxpLnJnYi5hbnNpMjU2PWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9ZVsyXTtyZXR1cm4gdD09PW4mJm49PT1yP3Q8OD8xNjp0PjI0OD8yMzE6TWF0aC5yb3VuZCgodC04KS8yNDcqMjQpKzIzMjoxNiszNipNYXRoLnJvdW5kKHQvMjU1KjUpKzYqTWF0aC5yb3VuZChuLzI1NSo1KStNYXRoLnJvdW5kKHIvMjU1KjUpfSxpLmFuc2kxNi5yZ2I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMDtpZigwPT09dHx8Nz09PXQpcmV0dXJuIGU+NTAmJih0Kz0zLjUpLHQ9dC8xMC41KjI1NSxbdCx0LHRdO3ZhciBuPS41KigxK35+KGU+NTApKTtyZXR1cm5bKDEmdCkqbioyNTUsKHQ+PjEmMSkqbioyNTUsKHQ+PjImMSkqbioyNTVdfSxpLmFuc2kyNTYucmdiPWZ1bmN0aW9uKGUpe2lmKGU+PTIzMil7dmFyIHQ9MTAqKGUtMjMyKSs4O3JldHVyblt0LHQsdF19ZS09MTY7dmFyIG47cmV0dXJuW01hdGguZmxvb3IoZS8zNikvNSoyNTUsTWF0aC5mbG9vcigobj1lJTM2KS82KS81KjI1NSxuJTYvNSoyNTVdfSxpLnJnYi5oZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9KCgyNTUmTWF0aC5yb3VuZChlWzBdKSk8PDE2KSsoKDI1NSZNYXRoLnJvdW5kKGVbMV0pKTw8OCkrKDI1NSZNYXRoLnJvdW5kKGVbMl0pKSxuPXQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIjAwMDAwMCIuc3Vic3RyaW5nKG4ubGVuZ3RoKStufSxpLmhleC5yZ2I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygxNikubWF0Y2goL1thLWYwLTldezZ9fFthLWYwLTldezN9L2kpO2lmKCF0KXJldHVyblswLDAsMF07dmFyIG49dFswXTszPT09dFswXS5sZW5ndGgmJihuPW4uc3BsaXQoIiIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZStlfSkuam9pbigiIikpO3ZhciByPXBhcnNlSW50KG4sMTYpO3JldHVybltyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdfSxpLnJnYi5oY2c9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWVbMF0vMjU1LGk9ZVsxXS8yNTUsbz1lWzJdLzI1NSxhPU1hdGgubWF4KE1hdGgubWF4KHIsaSksbykscz1NYXRoLm1pbihNYXRoLm1pbihyLGkpLG8pLHU9YS1zO3JldHVybiB0PXU8MT9zLygxLXUpOjAsbj11PD0wPzA6YT09PXI/KGktbykvdSU2OmE9PT1pPzIrKG8tcikvdTo0KyhyLWkpL3UrNCxuLz02LG4lPTEsWzM2MCpuLDEwMCp1LDEwMCp0XX0saS5oc2wuaGNnPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMV0vMTAwLG49ZVsyXS8xMDAscj0xLGk9MDtyZXR1cm4gcj1uPC41PzIqdCpuOjIqdCooMS1uKSxyPDEmJihpPShuLS41KnIpLygxLXIpKSxbZVswXSwxMDAqciwxMDAqaV19LGkuaHN2LmhjZz1mdW5jdGlvbihlKXt2YXIgdD1lWzFdLzEwMCxuPWVbMl0vMTAwLHI9dCpuLGk9MDtyZXR1cm4gcjwxJiYoaT0obi1yKS8oMS1yKSksW2VbMF0sMTAwKnIsMTAwKmldfSxpLmhjZy5yZ2I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS8zNjAsbj1lWzFdLzEwMCxyPWVbMl0vMTAwO2lmKDA9PT1uKXJldHVyblsyNTUqciwyNTUqciwyNTUqcl07dmFyIGk9WzAsMCwwXSxvPXQlMSo2LGE9byUxLHM9MS1hLHU9MDtzd2l0Y2goTWF0aC5mbG9vcihvKSl7Y2FzZSAwOmlbMF09MSxpWzFdPWEsaVsyXT0wO2JyZWFrO2Nhc2UgMTppWzBdPXMsaVsxXT0xLGlbMl09MDticmVhaztjYXNlIDI6aVswXT0wLGlbMV09MSxpWzJdPWE7YnJlYWs7Y2FzZSAzOmlbMF09MCxpWzFdPXMsaVsyXT0xO2JyZWFrO2Nhc2UgNDppWzBdPWEsaVsxXT0wLGlbMl09MTticmVhaztkZWZhdWx0OmlbMF09MSxpWzFdPTAsaVsyXT1zfXJldHVybiB1PSgxLW4pKnIsWzI1NSoobippWzBdK3UpLDI1NSoobippWzFdK3UpLDI1NSoobippWzJdK3UpXX0saS5oY2cuaHN2PWZ1bmN0aW9uKGUpe3ZhciB0PWVbMV0vMTAwLG49ZVsyXS8xMDAscj10K24qKDEtdCksaT0wO3JldHVybiByPjAmJihpPXQvciksW2VbMF0sMTAwKmksMTAwKnJdfSxpLmhjZy5oc2w9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVsxXS8xMDAsbj1lWzJdLzEwMCxyPW4qKDEtdCkrLjUqdCxpPTA7cmV0dXJuIHI+MCYmcjwuNT9pPXQvKDIqcik6cj49LjUmJnI8MSYmKGk9dC8oMiooMS1yKSkpLFtlWzBdLDEwMCppLDEwMCpyXX0saS5oY2cuaHdiPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMV0vMTAwLG49ZVsyXS8xMDAscj10K24qKDEtdCk7cmV0dXJuW2VbMF0sMTAwKihyLXQpLDEwMCooMS1yKV19LGkuaHdiLmhjZz1mdW5jdGlvbihlKXt2YXIgdD1lWzFdLzEwMCxuPWVbMl0vMTAwLHI9MS1uLGk9ci10LG89MDtyZXR1cm4gaTwxJiYobz0oci1pKS8oMS1pKSksW2VbMF0sMTAwKmksMTAwKm9dfSxpLmFwcGxlLnJnYj1mdW5jdGlvbihlKXtyZXR1cm5bZVswXS82NTUzNSoyNTUsZVsxXS82NTUzNSoyNTUsZVsyXS82NTUzNSoyNTVdfSxpLnJnYi5hcHBsZT1mdW5jdGlvbihlKXtyZXR1cm5bZVswXS8yNTUqNjU1MzUsZVsxXS8yNTUqNjU1MzUsZVsyXS8yNTUqNjU1MzVdfSxpLmdyYXkucmdiPWZ1bmN0aW9uKGUpe3JldHVybltlWzBdLzEwMCoyNTUsZVswXS8xMDAqMjU1LGVbMF0vMTAwKjI1NV19LGkuZ3JheS5oc2w9aS5ncmF5Lmhzdj1mdW5jdGlvbihlKXtyZXR1cm5bMCwwLGVbMF1dfSxpLmdyYXkuaHdiPWZ1bmN0aW9uKGUpe3JldHVyblswLDEwMCxlWzBdXX0saS5ncmF5LmNteWs9ZnVuY3Rpb24oZSl7cmV0dXJuWzAsMCwwLGVbMF1dfSxpLmdyYXkubGFiPWZ1bmN0aW9uKGUpe3JldHVybltlWzBdLDAsMF19LGkuZ3JheS5oZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9MjU1Jk1hdGgucm91bmQoZVswXS8xMDAqMjU1KSxuPSh0PDwxNikrKHQ8PDgpK3Qscj1uLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiIwMDAwMDAiLnN1YnN0cmluZyhyLmxlbmd0aCkrcn0saS5yZ2IuZ3JheT1mdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0rZVsxXStlWzJdKS8zLzI1NSoxMDBdfX0pLG1vZGVscyQxPU9iamVjdC5rZXlzKGNvbnZlcnNpb25zKSxyb3V0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZGVyaXZlQkZTKGUpLG49e30scj1PYmplY3Qua2V5cyh0KSxpPXIubGVuZ3RoLG89MDtvPGk7bysrKXt2YXIgYT1yW29dO251bGwhPT10W2FdLnBhcmVudCYmKG5bYV09d3JhcENvbnZlcnNpb24oYSx0KSl9cmV0dXJuIG59LGNvbnZlcnQ9e30sbW9kZWxzPU9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTttb2RlbHMuZm9yRWFjaChmdW5jdGlvbihlKXtjb252ZXJ0W2VdPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2VdLCJjaGFubmVscyIse3ZhbHVlOmNvbnZlcnNpb25zW2VdLmNoYW5uZWxzfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZV0sImxhYmVscyIse3ZhbHVlOmNvbnZlcnNpb25zW2VdLmxhYmVsc30pO3ZhciB0PXJvdXRlKGUpO09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dFtuXTtjb252ZXJ0W2VdW25dPXdyYXBSb3VuZGVkKHIpLGNvbnZlcnRbZV1bbl0ucmF3PXdyYXBSYXcocil9KX0pO3ZhciBjb2xvckNvbnZlcnQ9Y29udmVydCxhbnNpU3R5bGVzPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZT17bW9kaWZpZXI6e3Jlc2V0OlswLDBdLGJvbGQ6WzEsMjJdLGRpbTpbMiwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLGhpZGRlbjpbOCwyOF0sc3RyaWtldGhyb3VnaDpbOSwyOV19LGNvbG9yOntibGFjazpbMzAsMzldLHJlZDpbMzEsMzldLGdyZWVuOlszMiwzOV0seWVsbG93OlszMywzOV0sYmx1ZTpbMzQsMzldLG1hZ2VudGE6WzM1LDM5XSxjeWFuOlszNiwzOV0sd2hpdGU6WzM3LDM5XSxncmF5Ols5MCwzOV0scmVkQnJpZ2h0Ols5MSwzOV0sZ3JlZW5CcmlnaHQ6WzkyLDM5XSx5ZWxsb3dCcmlnaHQ6WzkzLDM5XSxibHVlQnJpZ2h0Ols5NCwzOV0sbWFnZW50YUJyaWdodDpbOTUsMzldLGN5YW5CcmlnaHQ6Wzk2LDM5XSx3aGl0ZUJyaWdodDpbOTcsMzldfSxiZ0NvbG9yOntiZ0JsYWNrOls0MCw0OV0sYmdSZWQ6WzQxLDQ5XSxiZ0dyZWVuOls0Miw0OV0sYmdZZWxsb3c6WzQzLDQ5XSxiZ0JsdWU6WzQ0LDQ5XSxiZ01hZ2VudGE6WzQ1LDQ5XSxiZ0N5YW46WzQ2LDQ5XSxiZ1doaXRlOls0Nyw0OV0sYmdCbGFja0JyaWdodDpbMTAwLDQ5XSxiZ1JlZEJyaWdodDpbMTAxLDQ5XSxiZ0dyZWVuQnJpZ2h0OlsxMDIsNDldLGJnWWVsbG93QnJpZ2h0OlsxMDMsNDldLGJnQmx1ZUJyaWdodDpbMTA0LDQ5XSxiZ01hZ2VudGFCcmlnaHQ6WzEwNSw0OV0sYmdDeWFuQnJpZ2h0OlsxMDYsNDldLGJnV2hpdGVCcmlnaHQ6WzEwNyw0OV19fTtlLmNvbG9yLmdyZXk9ZS5jb2xvci5ncmF5LE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW5bdF07ZVt0XT17b3BlbjoiXHgxYlsiLmNvbmNhdChyWzBdLCJtIiksY2xvc2U6Ilx4MWJbIi5jb25jYXQoclsxXSwibSIpfSxuW3RdPWVbdF19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITF9KX0pO3ZhciB0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bZSx0LG5dfTtlLmNvbG9yLmNsb3NlPSJceDFiWzM5bSIsZS5iZ0NvbG9yLmNsb3NlPSJceDFiWzQ5bSIsZS5jb2xvci5hbnNpPXt9LGUuY29sb3IuYW5zaTI1Nj17fSxlLmNvbG9yLmFuc2kxNm09e3JnYjppKHQsMCl9LGUuYmdDb2xvci5hbnNpPXt9LGUuYmdDb2xvci5hbnNpMjU2PXt9LGUuYmdDb2xvci5hbnNpMTZtPXtyZ2I6aSh0LDEwKX07Zm9yKHZhciBvPU9iamVjdC5rZXlzKGNvbG9yQ29udmVydCksYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO2lmKCJvYmplY3QiPT09X3R5cGVvZihjb2xvckNvbnZlcnRbc10pKXt2YXIgdT1jb2xvckNvbnZlcnRbc107ImFuc2kxNiJpbiB1JiYoZS5jb2xvci5hbnNpW3NdPW4odS5hbnNpMTYsMCksZS5iZ0NvbG9yLmFuc2lbc109bih1LmFuc2kxNiwxMCkpLCJhbnNpMjU2ImluIHUmJihlLmNvbG9yLmFuc2kyNTZbc109cih1LmFuc2kyNTYsMCksZS5iZ0NvbG9yLmFuc2kyNTZbc109cih1LmFuc2kyNTYsMTApKSwicmdiImluIHUmJihlLmNvbG9yLmFuc2kxNm1bc109aSh1LnJnYiwwKSxlLmJnQ29sb3IuYW5zaTE2bVtzXT1pKHUucmdiLDEwKSl9fXJldHVybiBlfXZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIlx4MWJbIi5jb25jYXQoZS5hcHBseShjb2xvckNvbnZlcnQsYXJndW1lbnRzKSt0LCJtIil9fSxyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseShjb2xvckNvbnZlcnQsYXJndW1lbnRzKTtyZXR1cm4iXHgxYlsiLmNvbmNhdCgzOCt0LCI7NTsiKS5jb25jYXQobiwibSIpfX0saT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkoY29sb3JDb252ZXJ0LGFyZ3VtZW50cyk7cmV0dXJuIlx4MWJbIi5jb25jYXQoMzgrdCwiOzI7IikuY29uY2F0KG5bMF0sIjsiKS5jb25jYXQoblsxXSwiOyIpLmNvbmNhdChuWzJdLCJtIil9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZXhwb3J0cyIse2VudW1lcmFibGU6ITAsZ2V0OnR9KX0pLGhhc0ZsYWc9ZnVuY3Rpb24oZSx0KXt0PXR8fHByb2Nlc3MuYXJndjt2YXIgbj10LmluZGV4T2YoIi0tIikscj0vXi17MSwyfS8udGVzdChlKT8iIjoiLS0iLGk9dC5pbmRleE9mKHIrZSk7cmV0dXJuLTEhPT1pJiYoLTE9PT1ufHxpPG4pfSxvcyQzPXt9LG9zJDU9T2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDpvcyQzLF9fbW9kdWxlRXhwb3J0czpvcyQzfSksb3MkMj1vcyQ1JiZvcyQzfHxvcyQ1LHN1cHBvcnRzQ29sb3I9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSl7dmFyIHQ9cHJvY2Vzcy5lbnYsbj1mdW5jdGlvbigpe2lmKGhhc0ZsYWcoIm5vLWNvbG9yIil8fGhhc0ZsYWcoIm5vLWNvbG9ycyIpfHxoYXNGbGFnKCJjb2xvcj1mYWxzZSIpKXJldHVybiAwO2lmKGhhc0ZsYWcoImNvbG9yPTE2bSIpfHxoYXNGbGFnKCJjb2xvcj1mdWxsIil8fGhhc0ZsYWcoImNvbG9yPXRydWVjb2xvciIpKXJldHVybiAzO2lmKGhhc0ZsYWcoImNvbG9yPTI1NiIpKXJldHVybiAyO2lmKGhhc0ZsYWcoImNvbG9yIil8fGhhc0ZsYWcoImNvbG9ycyIpfHxoYXNGbGFnKCJjb2xvcj10cnVlIil8fGhhc0ZsYWcoImNvbG9yPWFsd2F5cyIpKXJldHVybiAxO2lmKHByb2Nlc3Muc3Rkb3V0JiYhcHJvY2Vzcy5zdGRvdXQuaXNUVFkpcmV0dXJuIDA7aWYoIndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm0pe3ZhciBlPW9zJDIucmVsZWFzZSgpLnNwbGl0KCIuIik7cmV0dXJuIE51bWJlcihwcm9jZXNzLnZlcnNpb24uc3BsaXQoIi4iKVswXSk+PTgmJk51bWJlcihlWzBdKT49MTAmJk51bWJlcihlWzJdKT49MTA1ODY/MjoxfWlmKCJDSSJpbiB0KXJldHVybiJUUkFWSVMiaW4gdHx8IlRyYXZpcyI9PT10LkNJfHwiQ0lSQ0xFQ0kiaW4gdD8xOjA7aWYoIlRFQU1DSVRZX1ZFUlNJT04iaW4gdClyZXR1cm4vXig5XC4oMCpbMS05XVxkKilcLnxcZHsyLH1cLikvLnRlc3QodC5URUFNQ0lUWV9WRVJTSU9OKT8xOjA7aWYoIlRFUk1fUFJPR1JBTSJpbiB0KXt2YXIgbj1wYXJzZUludCgodC5URVJNX1BST0dSQU1fVkVSU0lPTnx8IiIpLnNwbGl0KCIuIilbMF0sMTApO3N3aXRjaCh0LlRFUk1fUFJPR1JBTSl7Y2FzZSJpVGVybS5hcHAiOnJldHVybiBuPj0zPzM6MjtjYXNlIkh5cGVyIjpyZXR1cm4gMztjYXNlIkFwcGxlX1Rlcm1pbmFsIjpyZXR1cm4gMn19cmV0dXJuL14oc2NyZWVufHh0ZXJtKS0yNTYoPzpjb2xvcik/Ly50ZXN0KHQuVEVSTSk/MjovXnNjcmVlbnxeeHRlcm18XnZ0MTAwfGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdCh0LlRFUk0pPzE6IkNPTE9SVEVSTSJpbiB0PzE6KHQuVEVSTSwwKX0oKTsiRk9SQ0VfQ09MT1IiaW4gdCYmKG49MD09PXBhcnNlSW50KHQuRk9SQ0VfQ09MT1IsMTApPzA6bnx8MSksZS5leHBvcnRzPXByb2Nlc3MmJmZ1bmN0aW9uKGUpe3JldHVybiAwIT09ZSYme2xldmVsOmUsaGFzQmFzaWM6ITAsaGFzMjU2OmU+PTIsaGFzMTZtOmU+PTN9fShuKX0pLHRlbXBsYXRlcz1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiJ1Ij09PWVbMF0mJjU9PT1lLmxlbmd0aHx8IngiPT09ZVswXSYmMz09PWUubGVuZ3RoP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zbGljZSgxKSwxNikpOmMuZ2V0KGUpfHxlfWZ1bmN0aW9uIG4oZSxuKXt2YXIgcixpPVtdLG89bi50cmltKCkuc3BsaXQoL1xzKixccyovZyksYT0hMCxjPSExLGw9dm9pZCAwO3RyeXtmb3IodmFyIHAsZj1vW1N5bWJvbC5pdGVyYXRvcl0oKTshKGE9KHA9Zi5uZXh0KCkpLmRvbmUpO2E9ITApe3ZhciBkPXAudmFsdWU7aWYoaXNOYU4oZCkpe2lmKCEocj1kLm1hdGNoKHMpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgQ2hhbGsgdGVtcGxhdGUgc3R5bGUgYXJndW1lbnQ6ICIuY29uY2F0KGQsIiAoaW4gc3R5bGUgJyIpLmNvbmNhdChlLCInKSIpKTtpLnB1c2goclsyXS5yZXBsYWNlKHUsZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuP3Qobik6cn0pKX1lbHNlIGkucHVzaChOdW1iZXIoZCkpfX1jYXRjaChlKXtjPSEwLGw9ZX1maW5hbGx5e3RyeXthfHxudWxsPT1mLnJldHVybnx8Zi5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgbH19cmV0dXJuIGl9ZnVuY3Rpb24gcihlKXthLmxhc3RJbmRleD0wO2Zvcih2YXIgdCxyPVtdO251bGwhPT0odD1hLmV4ZWMoZSkpOyl7dmFyIGk9dFsxXTtpZih0WzJdKXt2YXIgbz1uKGksdFsyXSk7ci5wdXNoKFtpXS5jb25jYXQobykpfWVsc2Ugci5wdXNoKFtpXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXt9LHI9ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShhPXMubmV4dCgpKS5kb25lKTtyPSEwKXt2YXIgdT1hLnZhbHVlLGM9ITAsbD0hMSxwPXZvaWQgMDt0cnl7Zm9yKHZhciBmLGQ9dS5zdHlsZXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEoYz0oZj1kLm5leHQoKSkuZG9uZSk7Yz0hMCl7dmFyIGg9Zi52YWx1ZTtuW2hbMF1dPXUuaW52ZXJzZT9udWxsOmguc2xpY2UoMSl9fWNhdGNoKGUpe2w9ITAscD1lfWZpbmFsbHl7dHJ5e2N8fG51bGw9PWQucmV0dXJufHxkLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBwfX19fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBvfX1mb3IodmFyIG09ZSxnPU9iamVjdC5rZXlzKG4pLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHY9Z1t5XTtpZihBcnJheS5pc0FycmF5KG5bdl0pKXtpZighKHYgaW4gbSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIENoYWxrIHN0eWxlOiAiLmNvbmNhdCh2KSk7bT1uW3ZdLmxlbmd0aD4wP21bdl0uYXBwbHkobSxuW3ZdKTptW3ZdfX1yZXR1cm4gbX12YXIgbz0vKD86XFwodVthLWZcZF17NH18eFthLWZcZF17Mn18LikpfCg/Olx7KH4pPyhcdysoPzpcKFteKV0qXCkpPyg/OlwuXHcrKD86XChbXildKlwpKT8pKikoPzpbIFx0XXwoPz1ccj9cbikpKXwoXH0pfCgoPzoufFtcclxuXGZdKSs/KS9naSxhPS8oPzpefFwuKShcdyspKD86XCgoW14pXSopXCkpPy9nLHM9L14oWyciXSkoKD86XFwufCg/IVwxKVteXFxdKSopXDEkLyx1PS9cXCh1W2EtZlxkXXs0fXx4W2EtZlxkXXsyfXwuKXwoW15cXF0pL2dpLGM9bmV3IE1hcChbWyJuIiwiXG4iXSxbInIiLCJcciJdLFsidCIsIlx0Il0sWyJiIiwiXGIiXSxbImYiLCJcZiJdLFsidiIsIlx2Il0sWyIwIiwiXDAiXSxbIlxcIiwiXFwiXSxbImUiLCJceDFiIl0sWyJhIiwiXHgwNyJdXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsbil7dmFyIGE9W10scz1bXSx1PVtdO2lmKG4ucmVwbGFjZShvLGZ1bmN0aW9uKG4sbyxjLGwscCxmKXtpZihvKXUucHVzaCh0KG8pKTtlbHNlIGlmKGwpe3ZhciBkPXUuam9pbigiIik7dT1bXSxzLnB1c2goMD09PWEubGVuZ3RoP2Q6aShlLGEpKGQpKSxhLnB1c2goe2ludmVyc2U6YyxzdHlsZXM6cihsKX0pfWVsc2UgaWYocCl7aWYoMD09PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRm91bmQgZXh0cmFuZW91cyB9IGluIENoYWxrIHRlbXBsYXRlIGxpdGVyYWwiKTtzLnB1c2goaShlLGEpKHUuam9pbigiIikpKSx1PVtdLGEucG9wKCl9ZWxzZSB1LnB1c2goZil9KSxzLnB1c2godS5qb2luKCIiKSksYS5sZW5ndGg+MCl7dmFyIGM9IkNoYWxrIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWlzc2luZyAiLmNvbmNhdChhLmxlbmd0aCwiIGNsb3NpbmcgYnJhY2tldCIpLmNvbmNhdCgxPT09YS5sZW5ndGg/IiI6InMiLCIgKGB9YCkiKTt0aHJvdyBuZXcgRXJyb3IoYyl9cmV0dXJuIHMuam9pbigiIil9fSksY2hhbGs9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3Q9dHx8e307dmFyIG49c3VwcG9ydHNDb2xvcj9zdXBwb3J0c0NvbG9yLmxldmVsOjA7ZS5sZXZlbD12b2lkIDA9PT10LmxldmVsP246dC5sZXZlbCxlLmVuYWJsZWQ9ImVuYWJsZWQiaW4gdD90LmVuYWJsZWQ6ZS5sZXZlbD4wfWZ1bmN0aW9uIG4oZSl7aWYoIXRoaXN8fCEodGhpcyBpbnN0YW5jZW9mIG4pfHx0aGlzLnRlbXBsYXRlKXt2YXIgcj17fTtyZXR1cm4gdChyLGUpLHIudGVtcGxhdGU9ZnVuY3Rpb24oKXt2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIG8uYXBwbHkobnVsbCxbci50ZW1wbGF0ZV0uY29uY2F0KGUpKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsbi5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihyLnRlbXBsYXRlLHIpLHIudGVtcGxhdGUuY29uc3RydWN0b3I9bixyLnRlbXBsYXRlfXQodGhpcyxlKX1mdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1mdW5jdGlvbiBlKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfTtyLl9zdHlsZXM9ZSxyLl9lbXB0eT10O3ZhciBvPXRoaXM7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJsZXZlbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubGV2ZWx9LHNldDpmdW5jdGlvbihlKXtvLmxldmVsPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImVuYWJsZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmVuYWJsZWR9LHNldDpmdW5jdGlvbihlKXtvLmVuYWJsZWQ9ZX19KSxyLmhhc0dyZXk9dGhpcy5oYXNHcmV5fHwiZ3JheSI9PT1ufHwiZ3JleSI9PT1uLHIuX19wcm90b19fPWcscn1mdW5jdGlvbiBpKCl7dmFyIGU9YXJndW1lbnRzLHQ9ZS5sZW5ndGgsbj1TdHJpbmcoYXJndW1lbnRzWzBdKTtpZigwPT09dClyZXR1cm4iIjtpZih0PjEpZm9yKHZhciByPTE7cjx0O3IrKyluKz0iICIrZVtyXTtpZighdGhpcy5lbmFibGVkfHx0aGlzLmxldmVsPD0wfHwhbilyZXR1cm4gdGhpcy5fZW1wdHk/IiI6bjt2YXIgaT1hbnNpU3R5bGVzLmRpbS5vcGVuO2EmJnRoaXMuaGFzR3JleSYmKGFuc2lTdHlsZXMuZGltLm9wZW49IiIpO3ZhciBvPSEwLHM9ITEsdT12b2lkIDA7dHJ5e2Zvcih2YXIgYyxsPXRoaXMuX3N0eWxlcy5zbGljZSgpLnJldmVyc2UoKVtTeW1ib2wuaXRlcmF0b3JdKCk7IShvPShjPWwubmV4dCgpKS5kb25lKTtvPSEwKXt2YXIgcD1jLnZhbHVlO249cC5vcGVuK24ucmVwbGFjZShwLmNsb3NlUmUscC5vcGVuKStwLmNsb3NlLG49bi5yZXBsYWNlKC9ccj9cbi9nLCIiLmNvbmNhdChwLmNsb3NlLCIkJiIpLmNvbmNhdChwLm9wZW4pKX19Y2F0Y2goZSl7cz0hMCx1PWV9ZmluYWxseXt0cnl7b3x8bnVsbD09bC5yZXR1cm58fGwucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IHV9fXJldHVybiBhbnNpU3R5bGVzLmRpbS5vcGVuPWksbn1mdW5jdGlvbiBvKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkuam9pbigiICIpO2Zvcih2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxyPVt0LnJhd1swXV0saT0xO2k8dC5sZW5ndGg7aSsrKXIucHVzaChTdHJpbmcobltpLTFdKS5yZXBsYWNlKC9be31cXF0vZywiXFwkJiIpKSxyLnB1c2goU3RyaW5nKHQucmF3W2ldKSk7cmV0dXJuIHRlbXBsYXRlcyhlLHIuam9pbigiIikpfXZhciBhPSJ3aW4zMiI9PT1wcm9jZXNzLnBsYXRmb3JtJiYhKHByb2Nlc3MuZW52LlRFUk18fCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoInh0ZXJtIikscz1bImFuc2kiLCJhbnNpIiwiYW5zaTI1NiIsImFuc2kxNm0iXSx1PW5ldyBTZXQoWyJncmF5Il0pLGM9T2JqZWN0LmNyZWF0ZShudWxsKTthJiYoYW5zaVN0eWxlcy5ibHVlLm9wZW49Ilx4MWJbOTRtIik7Zm9yKHZhciBsPU9iamVjdC5rZXlzKGFuc2lTdHlsZXMpLHA9MDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oKXt2YXIgZT1sW3BdO2Fuc2lTdHlsZXNbZV0uY2xvc2VSZT1uZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChhbnNpU3R5bGVzW2VdLmNsb3NlKSwiZyIpLGNbZV09e2dldDpmdW5jdGlvbigpe3ZhciB0PWFuc2lTdHlsZXNbZV07cmV0dXJuIHIuY2FsbCh0aGlzLHRoaXMuX3N0eWxlcz90aGlzLl9zdHlsZXMuY29uY2F0KHQpOlt0XSx0aGlzLl9lbXB0eSxlKX19fSgpO2MudmlzaWJsZT17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FsbCh0aGlzLHRoaXMuX3N0eWxlc3x8W10sITAsInZpc2libGUiKX19LGFuc2lTdHlsZXMuY29sb3IuY2xvc2VSZT1uZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChhbnNpU3R5bGVzLmNvbG9yLmNsb3NlKSwiZyIpO2Zvcih2YXIgZj1PYmplY3Qua2V5cyhhbnNpU3R5bGVzLmNvbG9yLmFuc2kpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7KGZ1bmN0aW9uKCl7dmFyIGU9ZltkXTtpZih1LmhhcyhlKSlyZXR1cm4iY29udGludWUiO2NbZV09e2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGV2ZWw7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49YW5zaVN0eWxlcy5jb2xvcltzW3RdXVtlXS5hcHBseShudWxsLGFyZ3VtZW50cyksaT17b3BlbjpuLGNsb3NlOmFuc2lTdHlsZXMuY29sb3IuY2xvc2UsY2xvc2VSZTphbnNpU3R5bGVzLmNvbG9yLmNsb3NlUmV9O3JldHVybiByLmNhbGwodGhpcyx0aGlzLl9zdHlsZXM/dGhpcy5fc3R5bGVzLmNvbmNhdChpKTpbaV0sdGhpcy5fZW1wdHksZSl9fX19KSgpfWFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZVJlPW5ldyBSZWdFeHAoZXNjYXBlU3RyaW5nUmVnZXhwKGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSksImciKTtmb3IodmFyIGg9T2JqZWN0LmtleXMoYW5zaVN0eWxlcy5iZ0NvbG9yLmFuc2kpLG09MDttPGgubGVuZ3RoO20rKyl7KGZ1bmN0aW9uKCl7dmFyIGU9aFttXTtpZih1LmhhcyhlKSlyZXR1cm4iY29udGludWUiO3ZhciB0PSJiZyIrZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7Y1t0XT17Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZXZlbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1hbnNpU3R5bGVzLmJnQ29sb3Jbc1t0XV1bZV0uYXBwbHkobnVsbCxhcmd1bWVudHMpLGk9e29wZW46bixjbG9zZTphbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2UsY2xvc2VSZTphbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2VSZX07cmV0dXJuIHIuY2FsbCh0aGlzLHRoaXMuX3N0eWxlcz90aGlzLl9zdHlsZXMuY29uY2F0KGkpOltpXSx0aGlzLl9lbXB0eSxlKX19fX0pKCl9dmFyIGc9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZnVuY3Rpb24oKXt9LGMpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLGMpLGUuZXhwb3J0cz1uKCksZS5leHBvcnRzLnN1cHBvcnRzQ29sb3I9c3VwcG9ydHNDb2xvcixlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSxsaWIkMj1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt2YXIgZT1hKGpzVG9rZW5zKTtyZXR1cm4gbj1mdW5jdGlvbigpe3JldHVybiBlfSxlfWZ1bmN0aW9uIHIoKXt2YXIgZT1vKHV0aWxzKTtyZXR1cm4gcj1mdW5jdGlvbigpe3JldHVybiBlfSxlfWZ1bmN0aW9uIGkoKXt2YXIgZT1vKGNoYWxrKTtyZXR1cm4gaT1mdW5jdGlvbigpe3JldHVybiBlfSxlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGEoZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikpe3ZhciByPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik6e307ci5nZXR8fHIuc2V0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scik6dFtuXT1lW25dfXJldHVybiB0LmRlZmF1bHQ9ZSx0fWZ1bmN0aW9uIHMoZSl7cmV0dXJue2tleXdvcmQ6ZS5jeWFuLGNhcGl0YWxpemVkOmUueWVsbG93LGpzeF90YWc6ZS55ZWxsb3cscHVuY3R1YXRvcjplLnllbGxvdyxudW1iZXI6ZS5tYWdlbnRhLHN0cmluZzplLmdyZWVuLHJlZ2V4OmUubWFnZW50YSxjb21tZW50OmUuZ3JleSxpbnZhbGlkOmUud2hpdGUuYmdSZWQuYm9sZH19ZnVuY3Rpb24gdShlKXt2YXIgdD1lLnNsaWNlKC0yKSxpPV9zbGljZWRUb0FycmF5KHQsMiksbz1pWzBdLGE9aVsxXSxzPSgwLG4oKS5tYXRjaFRvVG9rZW4pKGUpO2lmKCJuYW1lIj09PXMudHlwZSl7aWYocigpLmRlZmF1bHQua2V5d29yZC5pc1Jlc2VydmVkV29yZEVTNihzLnZhbHVlKSlyZXR1cm4ia2V5d29yZCI7aWYoaC50ZXN0KHMudmFsdWUpJiYoIjwiPT09YVtvLTFdfHwiPC8iPT1hLnN1YnN0cihvLTIsMikpKXJldHVybiJqc3hfdGFnIjtpZihzLnZhbHVlWzBdIT09cy52YWx1ZVswXS50b0xvd2VyQ2FzZSgpKXJldHVybiJjYXBpdGFsaXplZCJ9cmV0dXJuInB1bmN0dWF0b3IiPT09cy50eXBlJiZtLnRlc3Qocy52YWx1ZSk/ImJyYWNrZXQiOiJpbnZhbGlkIiE9PXMudHlwZXx8IkAiIT09cy52YWx1ZSYmIiMiIT09cy52YWx1ZT9zLnR5cGU6InB1bmN0dWF0b3IifWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdC5yZXBsYWNlKG4oKS5kZWZhdWx0LGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07dmFyIGk9dShuKSxvPWVbaV07cmV0dXJuIG8/blswXS5zcGxpdChkKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9KS5qb2luKCJcbiIpOm5bMF19KX1mdW5jdGlvbiBsKGUpe3JldHVybiBpKCkuZGVmYXVsdC5zdXBwb3J0c0NvbG9yfHxlLmZvcmNlQ29sb3J9ZnVuY3Rpb24gcChlKXt2YXIgdD1pKCkuZGVmYXVsdDtyZXR1cm4gZS5mb3JjZUNvbG9yJiYodD1uZXcoaSgpLmRlZmF1bHQuY29uc3RydWN0b3IpKHtlbmFibGVkOiEwLGxldmVsOjF9KSksdH1mdW5jdGlvbiBmKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZihsKHQpKXtyZXR1cm4gYyhzKHAodCkpLGUpfXJldHVybiBlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNob3VsZEhpZ2hsaWdodD1sLHQuZ2V0Q2hhbGs9cCx0LmRlZmF1bHQ9Zjt2YXIgZD0vXHJcbnxbXG5cclx1MjAyOFx1MjAyOV0vLGg9L15bYS16XVtcdy1dKiQvaSxtPS9eWygpW1xde31dJC99KTt1bndyYXBFeHBvcnRzKGxpYiQyKTt2YXIgbGliJDE9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIGU9cihsaWIkMik7cmV0dXJuIG49ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZX1mdW5jdGlvbiByKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pKXt2YXIgcj1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pOnt9O3IuZ2V0fHxyLnNldD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIpOnRbbl09ZVtuXX1yZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBpKGUpe3JldHVybntndXR0ZXI6ZS5ncmV5LG1hcmtlcjplLnJlZC5ib2xkLG1lc3NhZ2U6ZS5yZWQuYm9sZH19ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9T2JqZWN0LmFzc2lnbih7Y29sdW1uOjAsbGluZTotMX0sZS5zdGFydCksaT1PYmplY3QuYXNzaWduKHt9LHIsZS5lbmQpLG89bnx8e30sYT1vLmxpbmVzQWJvdmUscz12b2lkIDA9PT1hPzI6YSx1PW8ubGluZXNCZWxvdyxjPXZvaWQgMD09PXU/Mzp1LGw9ci5saW5lLHA9ci5jb2x1bW4sZj1pLmxpbmUsZD1pLmNvbHVtbixoPU1hdGgubWF4KGwtKHMrMSksMCksbT1NYXRoLm1pbih0Lmxlbmd0aCxmK2MpOy0xPT09bCYmKGg9MCksLTE9PT1mJiYobT10Lmxlbmd0aCk7dmFyIGc9Zi1sLHk9e307aWYoZylmb3IodmFyIHY9MDt2PD1nO3YrKyl7dmFyIGI9ditsO2lmKHApaWYoMD09PXYpe3ZhciB4PXRbYi0xXS5sZW5ndGg7eVtiXT1bcCx4LXBdfWVsc2UgaWYodj09PWcpeVtiXT1bMCxkXTtlbHNle3ZhciBDPXRbYi12XS5sZW5ndGg7eVtiXT1bMCxDXX1lbHNlIHlbYl09ITB9ZWxzZSB5W2xdPXA9PT1kPyFwfHxbcCwwXTpbcCxkLXBdO3JldHVybntzdGFydDpoLGVuZDptLG1hcmtlckxpbmVzOnl9fWZ1bmN0aW9uIGEoZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sYT0oci5oaWdobGlnaHRDb2RlfHxyLmZvcmNlQ29sb3IpJiYoMCxuKCkuc2hvdWxkSGlnaGxpZ2h0KShyKSxzPSgwLG4oKS5nZXRDaGFsaykociksdT1pKHMpLGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYT9lKHQpOnR9O2EmJihlPSgwLG4oKS5kZWZhdWx0KShlLHIpKTt2YXIgcD1lLnNwbGl0KGMpLGY9byh0LHAsciksZD1mLnN0YXJ0LGg9Zi5lbmQsbT1mLm1hcmtlckxpbmVzLGc9dC5zdGFydCYmIm51bWJlciI9PT10eXBlb2YgdC5zdGFydC5jb2x1bW4seT1TdHJpbmcoaCkubGVuZ3RoLHY9cC5zbGljZShkLGgpLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPWQrMSt0LGk9IiAiLmNvbmNhdChuKS5zbGljZSgteSksbz0iICIuY29uY2F0KGksIiB8ICIpLGE9bVtuXSxzPSFtW24rMV07aWYoYSl7dmFyIGM9IiI7aWYoQXJyYXkuaXNBcnJheShhKSl7dmFyIHA9ZS5zbGljZSgwLE1hdGgubWF4KGFbMF0tMSwwKSkucmVwbGFjZSgvW15cdF0vZywiICIpLGY9YVsxXXx8MTtjPVsiXG4gIixsKHUuZ3V0dGVyLG8ucmVwbGFjZSgvXGQvZywiICIpKSxwLGwodS5tYXJrZXIsIl4iKS5yZXBlYXQoZildLmpvaW4oIiIpLHMmJnIubWVzc2FnZSYmKGMrPSIgIitsKHUubWVzc2FnZSxyLm1lc3NhZ2UpKX1yZXR1cm5bbCh1Lm1hcmtlciwiPiIpLGwodS5ndXR0ZXIsbyksZSxjXS5qb2luKCIiKX1yZXR1cm4iICIuY29uY2F0KGwodS5ndXR0ZXIsbykpLmNvbmNhdChlKX0pLmpvaW4oIlxuIik7cmV0dXJuIHIubWVzc2FnZSYmIWcmJih2PSIiLmNvbmNhdCgiICIucmVwZWF0KHkrMSkpLmNvbmNhdChyLm1lc3NhZ2UsIlxuIikuY29uY2F0KHYpKSxhP3MucmVzZXQodik6dn1mdW5jdGlvbiBzKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307aWYoIXUpe3U9ITA7dmFyIGk9IlBhc3NpbmcgbGluZU51bWJlciBhbmQgY29sTnVtYmVyIGlzIGRlcHJlY2F0ZWQgdG8gQGJhYmVsL2NvZGUtZnJhbWUuIFBsZWFzZSB1c2UgYGNvZGVGcmFtZUNvbHVtbnNgLiI7aWYocHJvY2Vzcy5lbWl0V2FybmluZylwcm9jZXNzLmVtaXRXYXJuaW5nKGksIkRlcHJlY2F0aW9uV2FybmluZyIpO2Vsc2V7bmV3IEVycm9yKGkpLm5hbWU9IkRlcHJlY2F0aW9uV2FybmluZyIsY29uc29sZS53YXJuKG5ldyBFcnJvcihpKSl9fXJldHVybiBuPU1hdGgubWF4KG4sMCksYShlLHtzdGFydDp7Y29sdW1uOm4sbGluZTp0fX0scil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29kZUZyYW1lQ29sdW1ucz1hLHQuZGVmYXVsdD1zO3ZhciB1PSExLGM9L1xyXG58W1xuXHJcdTIwMjhcdTIwMjldL30pO3Vud3JhcEV4cG9ydHMobGliJDEpO3ZhciBwYXRoJDU9e30scGF0aCQ3PU9iamVjdC5mcmVlemUoe2RlZmF1bHQ6cGF0aCQ1LF9fbW9kdWxlRXhwb3J0czpwYXRoJDV9KSxwYXRoJDQ9cGF0aCQ3JiZwYXRoJDV8fHBhdGgkNyxDb25maWdFcnJvciQxPWVycm9ycy5Db25maWdFcnJvcixsb2NTdGFydD1sb2MubG9jU3RhcnQsbG9jRW5kPWxvYy5sb2NFbmQsb3duTmFtZXM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsb3duRGVzY3JpcHRvcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHBhcnNlcj17cGFyc2U6cGFyc2UkMixyZXNvbHZlUGFyc2VyOnJlc29sdmVQYXJzZXIkMX0scGF0aCQ5PXt9LHBhdGgkMTE9T2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDpwYXRoJDksX19tb2R1bGVFeHBvcnRzOnBhdGgkOX0pLHBhdGgkOD1wYXRoJDExJiZwYXRoJDl8fHBhdGgkMTEsVW5kZWZpbmVkUGFyc2VyRXJyb3I9ZXJyb3JzLlVuZGVmaW5lZFBhcnNlckVycm9yLGdldFN1cHBvcnRJbmZvJDE9c3VwcG9ydC5nZXRTdXBwb3J0SW5mbyxyZXNvbHZlUGFyc2VyPXBhcnNlci5yZXNvbHZlUGFyc2VyLGhpZGRlbkRlZmF1bHRzPXthc3RGb3JtYXQ6ImVzdHJlZSIscHJpbnRlcjp7fSxsb2NTdGFydDpudWxsLGxvY0VuZDpudWxsfSxvcHRpb25zPXtub3JtYWxpemU6bm9ybWFsaXplLGhpZGRlbkRlZmF1bHRzOmhpZGRlbkRlZmF1bHRzLGluZmVyUGFyc2VyOmluZmVyUGFyc2VyfSxtYXNzYWdlQXN0PW1hc3NhZ2VBU1QsYXNzZXJ0PXtvazpmdW5jdGlvbigpe30sc3RyaWN0RXF1YWw6ZnVuY3Rpb24oKXt9fSxsaW5lU3VmZml4Qm91bmRhcnk9e3R5cGU6ImxpbmUtc3VmZml4LWJvdW5kYXJ5In0sYnJlYWtQYXJlbnQkMT17dHlwZToiYnJlYWstcGFyZW50In0sbGluZSQyPXt0eXBlOiJsaW5lIn0sc29mdGxpbmU9e3R5cGU6ImxpbmUiLHNvZnQ6ITB9LGhhcmRsaW5lJDE9Y29uY2F0JDEoW3t0eXBlOiJsaW5lIixoYXJkOiEwfSxicmVha1BhcmVudCQxXSksbGl0ZXJhbGxpbmU9Y29uY2F0JDEoW3t0eXBlOiJsaW5lIixoYXJkOiEwLGxpdGVyYWw6ITB9LGJyZWFrUGFyZW50JDFdKSxjdXJzb3IkMT17dHlwZToiY3Vyc29yIixwbGFjZWhvbGRlcjpTeW1ib2woImN1cnNvciIpfSxkb2NCdWlsZGVycz17Y29uY2F0OmNvbmNhdCQxLGpvaW46am9pbiQxLGxpbmU6bGluZSQyLHNvZnRsaW5lOnNvZnRsaW5lLGhhcmRsaW5lOmhhcmRsaW5lJDEsbGl0ZXJhbGxpbmU6bGl0ZXJhbGxpbmUsZ3JvdXA6Z3JvdXAsY29uZGl0aW9uYWxHcm91cDpjb25kaXRpb25hbEdyb3VwLGZpbGw6ZmlsbCxsaW5lU3VmZml4OmxpbmVTdWZmaXgkMSxsaW5lU3VmZml4Qm91bmRhcnk6bGluZVN1ZmZpeEJvdW5kYXJ5LGN1cnNvcjpjdXJzb3IkMSxicmVha1BhcmVudDpicmVha1BhcmVudCQxLGlmQnJlYWs6aWZCcmVhayxpbmRlbnQ6aW5kZW50JDEsYWxpZ246YWxpZ24sYWRkQWxpZ25tZW50VG9Eb2M6YWRkQWxpZ25tZW50VG9Eb2MsbWFya0FzUm9vdDptYXJrQXNSb290LGRlZGVudFRvUm9vdDpkZWRlbnRUb1Jvb3QsZGVkZW50OmRlZGVudCQxfSxhbnNpUmVnZXg9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9WyJbXFx1MDAxQlxcdTAwOUJdW1tcXF0oKSM7P10qKD86KD86KD86W2EtekEtWlxcZF0qKD86O1thLXpBLVpcXGRdKikqKT9cXHUwMDA3KSIsIig/Oig/OlxcZHsxLDR9KD86O1xcZHswLDR9KSopP1tcXGRBLVBSWmNmLW50cXJ5PT48fl0pKSJdLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChlLCJnIil9fSksc3RyaXBBbnNpPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGU/ZS5yZXBsYWNlKGFuc2lSZWdleCgpLCIiKTplfSxpc0Z1bGx3aWR0aENvZGVQb2ludD1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIU51bWJlci5pc05hTihlKSYmKGU+PTQzNTImJihlPD00NDQ3fHw5MDAxPT09ZXx8OTAwMj09PWV8fDExOTA0PD1lJiZlPD0xMjg3MSYmMTIzNTEhPT1lfHwxMjg4MDw9ZSYmZTw9MTk5MDN8fDE5OTY4PD1lJiZlPD00MjE4Mnx8NDMzNjA8PWUmJmU8PTQzMzg4fHw0NDAzMjw9ZSYmZTw9NTUyMDN8fDYzNzQ0PD1lJiZlPD02NDI1NXx8NjUwNDA8PWUmJmU8PTY1MDQ5fHw2NTA3Mjw9ZSYmZTw9NjUxMzF8fDY1MjgxPD1lJiZlPD02NTM3Nnx8NjU1MDQ8PWUmJmU8PTY1NTEwfHwxMTA1OTI8PWUmJmU8PTExMDU5M3x8MTI3NDg4PD1lJiZlPD0xMjc1Njl8fDEzMTA3Mjw9ZSYmZTw9MjYyMTQxKSl9fSksc3RyaW5nV2lkdGg9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT09dHlwZW9mIGV8fDA9PT1lLmxlbmd0aClyZXR1cm4gMDtlPXN0cmlwQW5zaShlKTtmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWUuY29kZVBvaW50QXQobik7cjw9MzF8fHI+PTEyNyYmcjw9MTU5fHwocj49NzY4JiZyPD04Nzl8fChyPjY1NTM1JiZuKyssdCs9aXNGdWxsd2lkdGhDb2RlUG9pbnQocik/MjoxKSl9cmV0dXJuIHR9fSksZW1vamlSZWdleCQxPWZ1bmN0aW9uKCl7cmV0dXJuL1x1RDgzQ1x1REZGNFx1REI0MFx1REM2N1x1REI0MFx1REM2Mig/Olx1REI0MFx1REM2NVx1REI0MFx1REM2RVx1REI0MFx1REM2N3xcdURCNDBcdURDNzdcdURCNDBcdURDNkNcdURCNDBcdURDNzN8XHVEQjQwXHVEQzczXHVEQjQwXHVEQzYzXHVEQjQwXHVEQzc0KVx1REI0MFx1REM3RnxcdUQ4M0RcdURDNjlcdTIwMERcdUQ4M0RcdURDNjlcdTIwMEQoPzpcdUQ4M0RcdURDNjZcdTIwMERcdUQ4M0RcdURDNjZ8XHVEODNEXHVEQzY3XHUyMDBEKD86XHVEODNEW1x1REM2Nlx1REM2N10pKXxcdUQ4M0RcdURDNjgoPzpcdTIwMEQoPzpcdTI3NjRcdUZFMEZcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP1x1RDgzRFx1REM2OHwoPzpcdUQ4M0RbXHVEQzY4XHVEQzY5XSlcdTIwMEQoPzpcdUQ4M0RcdURDNjZcdTIwMERcdUQ4M0RcdURDNjZ8XHVEODNEXHVEQzY3XHUyMDBEKD86XHVEODNEW1x1REM2Nlx1REM2N10pKXxcdUQ4M0RcdURDNjZcdTIwMERcdUQ4M0RcdURDNjZ8XHVEODNEXHVEQzY3XHUyMDBEKD86XHVEODNEW1x1REM2Nlx1REM2N10pfFtcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdKXwoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEZ8KD86XHVEODNDW1x1REZGQi1cdURGRkZdKVx1MjAwRCg/Olx1RDgzQ1tcdURGM0VcdURGNzNcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdKSl8XHVEODNEXHVEQzY5XHUyMDBEKD86XHUyNzY0XHVGRTBGXHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKD86XHVEODNEW1x1REM2OFx1REM2OV0pfFx1RDgzRFtcdURDNjhcdURDNjldKXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXSl8XHVEODNEXHVEQzY5XHUyMDBEXHVEODNEXHVEQzY2XHUyMDBEXHVEODNEXHVEQzY2fCg/Olx1RDgzRFx1REM0MVx1RkUwRlx1MjAwRFx1RDgzRFx1RERFOHxcdUQ4M0RcdURDNjkoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18KD86KD86XHUyNkY5fFx1RDgzQ1tcdURGQ0JcdURGQ0NdfFx1RDgzRFx1REQ3NSlcdUZFMEZ8XHVEODNEXHVEQzZGfFx1RDgzRVtcdUREM0NcdUREREVcdUREREZdKVx1MjAwRFtcdTI2NDBcdTI2NDJdfCg/Olx1MjZGOXxcdUQ4M0NbXHVERkNCXHVERkNDXXxcdUQ4M0RcdURENzUpKD86XHVEODNDW1x1REZGQi1cdURGRkZdKVx1MjAwRFtcdTI2NDBcdTI2NDJdfCg/Olx1RDgzQ1tcdURGQzNcdURGQzRcdURGQ0FdfFx1RDgzRFtcdURDNkVcdURDNzFcdURDNzNcdURDNzdcdURDODFcdURDODJcdURDODZcdURDODdcdURFNDUtXHVERTQ3XHVERTRCXHVERTREXHVERTRFXHVERUEzXHVERUI0LVx1REVCNl18XHVEODNFW1x1REQyNlx1REQzNy1cdUREMzlcdUREM0RcdUREM0VcdURERDYtXHVEREREXSkoPzooPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pXHUyMDBEW1x1MjY0MFx1MjY0Ml18XHUyMDBEW1x1MjY0MFx1MjY0Ml0pfFx1RDgzRFx1REM2OVx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdKVx1RkUwRnxcdUQ4M0RcdURDNjlcdTIwMERcdUQ4M0RcdURDNjdcdTIwMEQoPzpcdUQ4M0RbXHVEQzY2XHVEQzY3XSl8XHVEODNEXHVEQzY5XHUyMDBEXHVEODNEXHVEQzY5XHUyMDBEKD86XHVEODNEW1x1REM2Nlx1REM2N10pfFx1RDgzRFx1REM2OCg/Olx1MjAwRCg/Oig/Olx1RDgzRFtcdURDNjhcdURDNjldKVx1MjAwRCg/Olx1RDgzRFtcdURDNjZcdURDNjddKXxcdUQ4M0RbXHVEQzY2XHVEQzY3XSl8XHVEODNDW1x1REZGQi1cdURGRkZdKXxcdUQ4M0NcdURGRjNcdUZFMEZcdTIwMERcdUQ4M0NcdURGMDh8XHVEODNEXHVEQzY5XHUyMDBEXHVEODNEXHVEQzY3fFx1RDgzRFx1REM2OSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSlcdTIwMEQoPzpcdUQ4M0NbXHVERjNFXHVERjczXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXSl8XHVEODNEXHVEQzY5XHUyMDBEXHVEODNEXHVEQzY2fFx1RDgzQ1x1RERGNFx1RDgzQ1x1RERGMnxcdUQ4M0NcdURERkRcdUQ4M0NcdURERjB8XHVEODNDXHVEREY2XHVEODNDXHVEREU2fFx1RDgzRFx1REM2OSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSl8XHVEODNDXHVEREZDKD86XHVEODNDW1x1RERFQlx1RERGOF0pfFx1RDgzQ1x1RERFQig/Olx1RDgzQ1tcdURERUUtXHVEREYwXHVEREYyXHVEREY0XHVEREY3XSl8XHVEODNDXHVEREU5KD86XHVEODNDW1x1RERFQVx1RERFQ1x1RERFRlx1RERGMFx1RERGMlx1RERGNFx1RERGRl0pfFx1RDgzQ1x1RERFNyg/Olx1RDgzQ1tcdURERTZcdURERTdcdURERTktXHVEREVGXHVEREYxLVx1RERGNFx1RERGNi1cdURERjlcdURERkJcdURERkNcdURERkVcdURERkZdKXxcdUQ4M0NcdURERjEoPzpcdUQ4M0NbXHVEREU2LVx1RERFOFx1RERFRVx1RERGMFx1RERGNy1cdURERkJcdURERkVdKXxcdUQ4M0NcdURERkUoPzpcdUQ4M0NbXHVEREVBXHVEREY5XSl8XHVEODNDXHVEREY5KD86XHVEODNDW1x1RERFNlx1RERFOFx1RERFOVx1RERFQi1cdURERURcdURERUYtXHVEREY0XHVEREY3XHVEREY5XHVEREZCXHVEREZDXHVEREZGXSl8XHVEODNDXHVEREY1KD86XHVEODNDW1x1RERFNlx1RERFQS1cdURERURcdURERjAtXHVEREYzXHVEREY3LVx1RERGOVx1RERGQ1x1RERGRV0pfFx1RDgzQ1x1RERFRig/Olx1RDgzQ1tcdURERUFcdURERjJcdURERjRcdURERjVdKXxcdUQ4M0NcdURERUQoPzpcdUQ4M0NbXHVEREYwXHVEREYyXHVEREYzXHVEREY3XHVEREY5XHVEREZBXSl8XHVEODNDXHVEREVFKD86XHVEODNDW1x1RERFOC1cdURERUFcdURERjEtXHVEREY0XHVEREY2LVx1RERGOV0pfFx1RDgzQ1x1RERGQig/Olx1RDgzQ1tcdURERTZcdURERThcdURERUFcdURERUNcdURERUVcdURERjNcdURERkFdKXxcdUQ4M0NcdURERUMoPzpcdUQ4M0NbXHVEREU2XHVEREU3XHVEREU5LVx1RERFRVx1RERGMS1cdURERjNcdURERjUtXHVEREZBXHVEREZDXHVEREZFXSl8XHVEODNDXHVEREY3KD86XHVEODNDW1x1RERFQVx1RERGNFx1RERGOFx1RERGQVx1RERGQ10pfFx1RDgzQ1x1RERFQSg/Olx1RDgzQ1tcdURERTZcdURERThcdURERUFcdURERUNcdURERURcdURERjctXHVEREZBXSl8XHVEODNDXHVEREZBKD86XHVEODNDW1x1RERFNlx1RERFQ1x1RERGMlx1RERGM1x1RERGOFx1RERGRVx1RERGRl0pfFx1RDgzQ1x1RERFOCg/Olx1RDgzQ1tcdURERTZcdURERThcdURERTlcdURERUItXHVEREVFXHVEREYwLVx1RERGNVx1RERGN1x1RERGQS1cdURERkZdKXxcdUQ4M0NcdURERTYoPzpcdUQ4M0NbXHVEREU4LVx1RERFQ1x1RERFRVx1RERGMVx1RERGMlx1RERGNFx1RERGNi1cdURERkFcdURERkNcdURERkRcdURERkZdKXxbI1wqMC05XVx1RkUwRlx1MjBFM3xcdUQ4M0NcdURERjgoPzpcdUQ4M0NbXHVEREU2LVx1RERFQVx1RERFQy1cdURERjRcdURERjctXHVEREY5XHVEREZCXHVEREZELVx1RERGRl0pfFx1RDgzQ1x1RERGRig/Olx1RDgzQ1tcdURERTZcdURERjJcdURERkNdKXxcdUQ4M0NcdURERjAoPzpcdUQ4M0NbXHVEREVBXHVEREVDLVx1RERFRVx1RERGMlx1RERGM1x1RERGNVx1RERGN1x1RERGQ1x1RERGRVx1RERGRl0pfFx1RDgzQ1x1RERGMyg/Olx1RDgzQ1tcdURERTZcdURERThcdURERUEtXHVEREVDXHVEREVFXHVEREYxXHVEREY0XHVEREY1XHVEREY3XHVEREZBXHVEREZGXSl8XHVEODNDXHVEREYyKD86XHVEODNDW1x1RERFNlx1RERFOC1cdURERURcdURERjAtXHVEREZGXSl8KD86XHVEODNDW1x1REZDM1x1REZDNFx1REZDQV18XHVEODNEW1x1REM2RVx1REM3MVx1REM3M1x1REM3N1x1REM4MVx1REM4Mlx1REM4Nlx1REM4N1x1REU0NS1cdURFNDdcdURFNEJcdURFNERcdURFNEVcdURFQTNcdURFQjQtXHVERUI2XXxcdUQ4M0VbXHVERDI2XHVERDM3LVx1REQzOVx1REQzRFx1REQzRVx1RERENi1cdURERERdKSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSl8KD86XHUyNkY5fFx1RDgzQ1tcdURGQ0JcdURGQ0NdfFx1RDgzRFx1REQ3NSkoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pfCg/OltcdTI2MURcdTI3MEEtXHUyNzBEXXxcdUQ4M0NbXHVERjg1XHVERkMyXHVERkM3XXxcdUQ4M0RbXHVEQzQyXHVEQzQzXHVEQzQ2LVx1REM1MFx1REM2Nlx1REM2N1x1REM3MFx1REM3Mlx1REM3NC1cdURDNzZcdURDNzhcdURDN0NcdURDODNcdURDODVcdURDQUFcdURENzRcdUREN0FcdUREOTBcdUREOTVcdUREOTZcdURFNENcdURFNEZcdURFQzBcdURFQ0NdfFx1RDgzRVtcdUREMTgtXHVERDFDXHVERDFFXHVERDFGXHVERDMwLVx1REQzNlx1REREMS1cdURERDVdKSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSl8KD86W1x1MjYxRFx1MjZGOVx1MjcwQS1cdTI3MERdfFx1RDgzQ1tcdURGODVcdURGQzItXHVERkM0XHVERkM3XHVERkNBLVx1REZDQ118XHVEODNEW1x1REM0Mlx1REM0M1x1REM0Ni1cdURDNTBcdURDNjYtXHVEQzY5XHVEQzZFXHVEQzcwLVx1REM3OFx1REM3Q1x1REM4MS1cdURDODNcdURDODUtXHVEQzg3XHVEQ0FBXHVERDc0XHVERDc1XHVERDdBXHVERDkwXHVERDk1XHVERDk2XHVERTQ1LVx1REU0N1x1REU0Qi1cdURFNEZcdURFQTNcdURFQjQtXHVERUI2XHVERUMwXHVERUNDXXxcdUQ4M0VbXHVERDE4LVx1REQxQ1x1REQxRVx1REQxRlx1REQyNlx1REQzMC1cdUREMzlcdUREM0RcdUREM0VcdURERDEtXHVEREREXSkoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3woPzpbXHUyMzFBXHUyMzFCXHUyM0U5LVx1MjNFQ1x1MjNGMFx1MjNGM1x1MjVGRFx1MjVGRVx1MjYxNFx1MjYxNVx1MjY0OC1cdTI2NTNcdTI2N0ZcdTI2OTNcdTI2QTFcdTI2QUFcdTI2QUJcdTI2QkRcdTI2QkVcdTI2QzRcdTI2QzVcdTI2Q0VcdTI2RDRcdTI2RUFcdTI2RjJcdTI2RjNcdTI2RjVcdTI2RkFcdTI2RkRcdTI3MDVcdTI3MEFcdTI3MEJcdTI3MjhcdTI3NENcdTI3NEVcdTI3NTMtXHUyNzU1XHUyNzU3XHUyNzk1LVx1Mjc5N1x1MjdCMFx1MjdCRlx1MkIxQlx1MkIxQ1x1MkI1MFx1MkI1NV18XHVEODNDW1x1REMwNFx1RENDRlx1REQ4RVx1REQ5MS1cdUREOUFcdURERTYtXHVEREZGXHVERTAxXHVERTFBXHVERTJGXHVERTMyLVx1REUzNlx1REUzOC1cdURFM0FcdURFNTBcdURFNTFcdURGMDAtXHVERjIwXHVERjJELVx1REYzNVx1REYzNy1cdURGN0NcdURGN0UtXHVERjkzXHVERkEwLVx1REZDQVx1REZDRi1cdURGRDNcdURGRTAtXHVERkYwXHVERkY0XHVERkY4LVx1REZGRl18XHVEODNEW1x1REMwMC1cdURDM0VcdURDNDBcdURDNDItXHVEQ0ZDXHVEQ0ZGLVx1REQzRFx1REQ0Qi1cdURENEVcdURENTAtXHVERDY3XHVERDdBXHVERDk1XHVERDk2XHVEREE0XHVEREZCLVx1REU0Rlx1REU4MC1cdURFQzVcdURFQ0NcdURFRDAtXHVERUQyXHVERUVCXHVERUVDXHVERUY0LVx1REVGOF18XHVEODNFW1x1REQxMC1cdUREM0FcdUREM0MtXHVERDNFXHVERDQwLVx1REQ0NVx1REQ0Ny1cdURENENcdURENTAtXHVERDZCXHVERDgwLVx1REQ5N1x1RERDMFx1REREMC1cdURERTZdKXwoPzpbI1wqMC05XHhBOVx4QUVcdTIwM0NcdTIwNDlcdTIxMjJcdTIxMzlcdTIxOTQtXHUyMTk5XHUyMUE5XHUyMUFBXHUyMzFBXHUyMzFCXHUyMzI4XHUyM0NGXHUyM0U5LVx1MjNGM1x1MjNGOC1cdTIzRkFcdTI0QzJcdTI1QUFcdTI1QUJcdTI1QjZcdTI1QzBcdTI1RkItXHUyNUZFXHUyNjAwLVx1MjYwNFx1MjYwRVx1MjYxMVx1MjYxNFx1MjYxNVx1MjYxOFx1MjYxRFx1MjYyMFx1MjYyMlx1MjYyM1x1MjYyNlx1MjYyQVx1MjYyRVx1MjYyRlx1MjYzOC1cdTI2M0FcdTI2NDBcdTI2NDJcdTI2NDgtXHUyNjUzXHUyNjYwXHUyNjYzXHUyNjY1XHUyNjY2XHUyNjY4XHUyNjdCXHUyNjdGXHUyNjkyLVx1MjY5N1x1MjY5OVx1MjY5Qlx1MjY5Q1x1MjZBMFx1MjZBMVx1MjZBQVx1MjZBQlx1MjZCMFx1MjZCMVx1MjZCRFx1MjZCRVx1MjZDNFx1MjZDNVx1MjZDOFx1MjZDRVx1MjZDRlx1MjZEMVx1MjZEM1x1MjZENFx1MjZFOVx1MjZFQVx1MjZGMC1cdTI2RjVcdTI2RjctXHUyNkZBXHUyNkZEXHUyNzAyXHUyNzA1XHUyNzA4LVx1MjcwRFx1MjcwRlx1MjcxMlx1MjcxNFx1MjcxNlx1MjcxRFx1MjcyMVx1MjcyOFx1MjczM1x1MjczNFx1Mjc0NFx1Mjc0N1x1Mjc0Q1x1Mjc0RVx1Mjc1My1cdTI3NTVcdTI3NTdcdTI3NjNcdTI3NjRcdTI3OTUtXHUyNzk3XHUyN0ExXHUyN0IwXHUyN0JGXHUyOTM0XHUyOTM1XHUyQjA1LVx1MkIwN1x1MkIxQlx1MkIxQ1x1MkI1MFx1MkI1NVx1MzAzMFx1MzAzRFx1MzI5N1x1MzI5OV18XHVEODNDW1x1REMwNFx1RENDRlx1REQ3MFx1REQ3MVx1REQ3RVx1REQ3Rlx1REQ4RVx1REQ5MS1cdUREOUFcdURERTYtXHVEREZGXHVERTAxXHVERTAyXHVERTFBXHVERTJGXHVERTMyLVx1REUzQVx1REU1MFx1REU1MVx1REYwMC1cdURGMjFcdURGMjQtXHVERjkzXHVERjk2XHVERjk3XHVERjk5LVx1REY5Qlx1REY5RS1cdURGRjBcdURGRjMtXHVERkY1XHVERkY3LVx1REZGRl18XHVEODNEW1x1REMwMC1cdURDRkRcdURDRkYtXHVERDNEXHVERDQ5LVx1REQ0RVx1REQ1MC1cdURENjdcdURENkZcdURENzBcdURENzMtXHVERDdBXHVERDg3XHVERDhBLVx1REQ4RFx1REQ5MFx1REQ5NVx1REQ5Nlx1RERBNFx1RERBNVx1RERBOFx1RERCMVx1RERCMlx1RERCQ1x1RERDMi1cdUREQzRcdURERDEtXHVEREQzXHVERERDLVx1RERERVx1RERFMVx1RERFM1x1RERFOFx1RERFRlx1RERGM1x1RERGQS1cdURFNEZcdURFODAtXHVERUM1XHVERUNCLVx1REVEMlx1REVFMC1cdURFRTVcdURFRTlcdURFRUJcdURFRUNcdURFRjBcdURFRjMtXHVERUY4XXxcdUQ4M0VbXHVERDEwLVx1REQzQVx1REQzQy1cdUREM0VcdURENDAtXHVERDQ1XHVERDQ3LVx1REQ0Q1x1REQ1MC1cdURENkJcdUREODAtXHVERDk3XHVEREMwXHVEREQwLVx1RERFNl0pXHVGRTBGL2d9LHB1bmN0dWF0aW9uX3Jhbmdlcz1bWzEyMjg4LDEyMzUxXSxbNDQwMzIsNTUyMTVdLFs2NTA0MCw2NTA1NV0sWzY1MDcyLDY1MTM1XSxbNjUyODAsNjUzNzZdLFs2NTUwNCw2NTUxOV1dLGNoYXJhY3Rlcl9yYW5nZXM9W1s0MzUyLDQ2MDddLFsxMTkwNCwxMjI1NV0sWzEyMzUyLDEyNjg3XSxbMTI4MDAsMTk5MDNdLFsxOTk2OCw0MDk1OV0sWzQzMzYwLDQzMzkxXSxbNjM3NDQsNjQyNTVdXTshZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBjcmVhdGVfcmVnZXgocHVuY3R1YXRpb25fcmFuZ2VzKX1mdW5jdGlvbiBuKCl7cmV0dXJuIGNyZWF0ZV9yZWdleChjaGFyYWN0ZXJfcmFuZ2VzKX1lLnB1bmN0dWF0aW9ucz10LGUuY2hhcmFjdGVycz1ufShnZXRfcmVnZXh8fChnZXRfcmVnZXg9e30pKTt2YXIgbGliJDM9Z2V0X3JlZ2V4LGRhdGFfZ2VuZXJhdGVkPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7dC5fX2VzTW9kdWxlPSEwLHQuZ2V0X2RhdGE9ZnVuY3Rpb24oKXtyZXR1cm57UGM6W1s5NSw5NV0sWzgyNTUsODI1Nl0sWzgyNzYsODI3Nl0sWzY1MDc1LDY1MDc2XSxbNjUxMDEsNjUxMDNdLFs2NTM0Myw2NTM0M11dLFBlOltbNDEsNDFdLFs5Myw5M10sWzEyNSwxMjVdLFszODk5LDM4OTldLFszOTAxLDM5MDFdLFs1Nzg4LDU3ODhdLFs4MjYyLDgyNjJdLFs4MzE4LDgzMThdLFs4MzM0LDgzMzRdLFs4OTY5LDg5NjldLFs4OTcxLDg5NzFdLFs5MDAyLDkwMDJdLFsxMDA4OSwxMDA4OV0sWzEwMDkxLDEwMDkxXSxbMTAwOTMsMTAwOTNdLFsxMDA5NSwxMDA5NV0sWzEwMDk3LDEwMDk3XSxbMTAwOTksMTAwOTldLFsxMDEwMSwxMDEwMV0sWzEwMTgyLDEwMTgyXSxbMTAyMTUsMTAyMTVdLFsxMDIxNywxMDIxN10sWzEwMjE5LDEwMjE5XSxbMTAyMjEsMTAyMjFdLFsxMDIyMywxMDIyM10sWzEwNjI4LDEwNjI4XSxbMTA2MzAsMTA2MzBdLFsxMDYzMiwxMDYzMl0sWzEwNjM0LDEwNjM0XSxbMTA2MzYsMTA2MzZdLFsxMDYzOCwxMDYzOF0sWzEwNjQwLDEwNjQwXSxbMTA2NDIsMTA2NDJdLFsxMDY0NCwxMDY0NF0sWzEwNjQ2LDEwNjQ2XSxbMTA2NDgsMTA2NDhdLFsxMDcxMywxMDcxM10sWzEwNzE1LDEwNzE1XSxbMTA3NDksMTA3NDldLFsxMTgxMSwxMTgxMV0sWzExODEzLDExODEzXSxbMTE4MTUsMTE4MTVdLFsxMTgxNywxMTgxN10sWzEyMjk3LDEyMjk3XSxbMTIyOTksMTIyOTldLFsxMjMwMSwxMjMwMV0sWzEyMzAzLDEyMzAzXSxbMTIzMDUsMTIzMDVdLFsxMjMwOSwxMjMwOV0sWzEyMzExLDEyMzExXSxbMTIzMTMsMTIzMTNdLFsxMjMxNSwxMjMxNV0sWzEyMzE4LDEyMzE5XSxbNjQ4MzAsNjQ4MzBdLFs2NTA0OCw2NTA0OF0sWzY1MDc4LDY1MDc4XSxbNjUwODAsNjUwODBdLFs2NTA4Miw2NTA4Ml0sWzY1MDg0LDY1MDg0XSxbNjUwODYsNjUwODZdLFs2NTA4OCw2NTA4OF0sWzY1MDkwLDY1MDkwXSxbNjUwOTIsNjUwOTJdLFs2NTA5Niw2NTA5Nl0sWzY1MTE0LDY1MTE0XSxbNjUxMTYsNjUxMTZdLFs2NTExOCw2NTExOF0sWzY1Mjg5LDY1Mjg5XSxbNjUzNDEsNjUzNDFdLFs2NTM3Myw2NTM3M10sWzY1Mzc2LDY1Mzc2XSxbNjUzNzksNjUzNzldXSxQczpbWzQwLDQwXSxbOTEsOTFdLFsxMjMsMTIzXSxbMzg5OCwzODk4XSxbMzkwMCwzOTAwXSxbNTc4Nyw1Nzg3XSxbODIxOCw4MjE4XSxbODIyMiw4MjIyXSxbODI2MSw4MjYxXSxbODMxNyw4MzE3XSxbODMzMyw4MzMzXSxbODk2OCw4OTY4XSxbODk3MCw4OTcwXSxbOTAwMSw5MDAxXSxbMTAwODgsMTAwODhdLFsxMDA5MCwxMDA5MF0sWzEwMDkyLDEwMDkyXSxbMTAwOTQsMTAwOTRdLFsxMDA5NiwxMDA5Nl0sWzEwMDk4LDEwMDk4XSxbMTAxMDAsMTAxMDBdLFsxMDE4MSwxMDE4MV0sWzEwMjE0LDEwMjE0XSxbMTAyMTYsMTAyMTZdLFsxMDIxOCwxMDIxOF0sWzEwMjIwLDEwMjIwXSxbMTAyMjIsMTAyMjJdLFsxMDYyNywxMDYyN10sWzEwNjI5LDEwNjI5XSxbMTA2MzEsMTA2MzFdLFsxMDYzMywxMDYzM10sWzEwNjM1LDEwNjM1XSxbMTA2MzcsMTA2MzddLFsxMDYzOSwxMDYzOV0sWzEwNjQxLDEwNjQxXSxbMTA2NDMsMTA2NDNdLFsxMDY0NSwxMDY0NV0sWzEwNjQ3LDEwNjQ3XSxbMTA3MTIsMTA3MTJdLFsxMDcxNCwxMDcxNF0sWzEwNzQ4LDEwNzQ4XSxbMTE4MTAsMTE4MTBdLFsxMTgxMiwxMTgxMl0sWzExODE0LDExODE0XSxbMTE4MTYsMTE4MTZdLFsxMTg0MiwxMTg0Ml0sWzEyMjk2LDEyMjk2XSxbMTIyOTgsMTIyOThdLFsxMjMwMCwxMjMwMF0sWzEyMzAyLDEyMzAyXSxbMTIzMDQsMTIzMDRdLFsxMjMwOCwxMjMwOF0sWzEyMzEwLDEyMzEwXSxbMTIzMTIsMTIzMTJdLFsxMjMxNCwxMjMxNF0sWzEyMzE3LDEyMzE3XSxbNjQ4MzEsNjQ4MzFdLFs2NTA0Nyw2NTA0N10sWzY1MDc3LDY1MDc3XSxbNjUwNzksNjUwNzldLFs2NTA4MSw2NTA4MV0sWzY1MDgzLDY1MDgzXSxbNjUwODUsNjUwODVdLFs2NTA4Nyw2NTA4N10sWzY1MDg5LDY1MDg5XSxbNjUwOTEsNjUwOTFdLFs2NTA5NSw2NTA5NV0sWzY1MTEzLDY1MTEzXSxbNjUxMTUsNjUxMTVdLFs2NTExNyw2NTExN10sWzY1Mjg4LDY1Mjg4XSxbNjUzMzksNjUzMzldLFs2NTM3MSw2NTM3MV0sWzY1Mzc1LDY1Mzc1XSxbNjUzNzgsNjUzNzhdXSxMbTpbWzY4OCw3MDVdLFs3MTAsNzIxXSxbNzM2LDc0MF0sWzc0OCw3NDhdLFs3NTAsNzUwXSxbODg0LDg4NF0sWzg5MCw4OTBdLFsxMzY5LDEzNjldLFsxNjAwLDE2MDBdLFsxNzY1LDE3NjZdLFsyMDM2LDIwMzddLFsyMDQyLDIwNDJdLFsyMDc0LDIwNzRdLFsyMDg0LDIwODRdLFsyMDg4LDIwODhdLFsyNDE3LDI0MTddLFszNjU0LDM2NTRdLFszNzgyLDM3ODJdLFs0MzQ4LDQzNDhdLFs2MTAzLDYxMDNdLFs2MjExLDYyMTFdLFs2ODIzLDY4MjNdLFs3Mjg4LDcyOTNdLFs3NDY4LDc1MzBdLFs3NTQ0LDc1NDRdLFs3NTc5LDc2MTVdLFs4MzA1LDgzMDVdLFs4MzE5LDgzMTldLFs4MzM2LDgzNDhdLFsxMTM4OCwxMTM4OV0sWzExNjMxLDExNjMxXSxbMTE4MjMsMTE4MjNdLFsxMjI5MywxMjI5M10sWzEyMzM3LDEyMzQxXSxbMTIzNDcsMTIzNDddLFsxMjQ0NSwxMjQ0Nl0sWzEyNTQwLDEyNTQyXSxbNDA5ODEsNDA5ODFdLFs0MjIzMiw0MjIzN10sWzQyNTA4LDQyNTA4XSxbNDI2MjMsNDI2MjNdLFs0MjY1Miw0MjY1M10sWzQyNzc1LDQyNzgzXSxbNDI4NjQsNDI4NjRdLFs0Mjg4OCw0Mjg4OF0sWzQzZTMsNDMwMDFdLFs0MzQ3MSw0MzQ3MV0sWzQzNDk0LDQzNDk0XSxbNDM2MzIsNDM2MzJdLFs0Mzc0MSw0Mzc0MV0sWzQzNzYzLDQzNzY0XSxbNDM4NjgsNDM4NzFdLFs2NTM5Miw2NTM5Ml0sWzY1NDM4LDY1NDM5XV0sTWM6W1syMzA3LDIzMDddLFsyMzYzLDIzNjNdLFsyMzY2LDIzNjhdLFsyMzc3LDIzODBdLFsyMzgyLDIzODNdLFsyNDM0LDI0MzVdLFsyNDk0LDI0OTZdLFsyNTAzLDI1MDRdLFsyNTA3LDI1MDhdLFsyNTE5LDI1MTldLFsyNTYzLDI1NjNdLFsyNjIyLDI2MjRdLFsyNjkxLDI2OTFdLFsyNzUwLDI3NTJdLFsyNzYxLDI3NjFdLFsyNzYzLDI3NjRdLFsyODE4LDI4MTldLFsyODc4LDI4NzhdLFsyODgwLDI4ODBdLFsyODg3LDI4ODhdLFsyODkxLDI4OTJdLFsyOTAzLDI5MDNdLFszMDA2LDMwMDddLFszMDA5LDMwMTBdLFszMDE0LDMwMTZdLFszMDE4LDMwMjBdLFszMDMxLDMwMzFdLFszMDczLDMwNzVdLFszMTM3LDMxNDBdLFszMjAyLDMyMDNdLFszMjYyLDMyNjJdLFszMjY0LDMyNjhdLFszMjcxLDMyNzJdLFszMjc0LDMyNzVdLFszMjg1LDMyODZdLFszMzMwLDMzMzFdLFszMzkwLDMzOTJdLFszMzk4LDM0MDBdLFszNDAyLDM0MDRdLFszNDE1LDM0MTVdLFszNDU4LDM0NTldLFszNTM1LDM1MzddLFszNTQ0LDM1NTFdLFszNTcwLDM1NzFdLFszOTAyLDM5MDNdLFszOTY3LDM5NjddLFs0MTM5LDQxNDBdLFs0MTQ1LDQxNDVdLFs0MTUyLDQxNTJdLFs0MTU1LDQxNTZdLFs0MTgyLDQxODNdLFs0MTk0LDQxOTZdLFs0MTk5LDQyMDVdLFs0MjI3LDQyMjhdLFs0MjMxLDQyMzZdLFs0MjM5LDQyMzldLFs0MjUwLDQyNTJdLFs2MDcwLDYwNzBdLFs2MDc4LDYwODVdLFs2MDg3LDYwODhdLFs2NDM1LDY0MzhdLFs2NDQxLDY0NDNdLFs2NDQ4LDY0NDldLFs2NDUxLDY0NTZdLFs2NjgxLDY2ODJdLFs2NzQxLDY3NDFdLFs2NzQzLDY3NDNdLFs2NzUzLDY3NTNdLFs2NzU1LDY3NTZdLFs2NzY1LDY3NzBdLFs2OTE2LDY5MTZdLFs2OTY1LDY5NjVdLFs2OTcxLDY5NzFdLFs2OTczLDY5NzddLFs2OTc5LDY5ODBdLFs3MDQyLDcwNDJdLFs3MDczLDcwNzNdLFs3MDc4LDcwNzldLFs3MDgyLDcwODJdLFs3MTQzLDcxNDNdLFs3MTQ2LDcxNDhdLFs3MTUwLDcxNTBdLFs3MTU0LDcxNTVdLFs3MjA0LDcyMTFdLFs3MjIwLDcyMjFdLFs3MzkzLDczOTNdLFs3NDEwLDc0MTFdLFs3NDE1LDc0MTVdLFsxMjMzNCwxMjMzNV0sWzQzMDQzLDQzMDQ0XSxbNDMwNDcsNDMwNDddLFs0MzEzNiw0MzEzN10sWzQzMTg4LDQzMjAzXSxbNDMzNDYsNDMzNDddLFs0MzM5NSw0MzM5NV0sWzQzNDQ0LDQzNDQ1XSxbNDM0NTAsNDM0NTFdLFs0MzQ1Myw0MzQ1Nl0sWzQzNTY3LDQzNTY4XSxbNDM1NzEsNDM1NzJdLFs0MzU5Nyw0MzU5N10sWzQzNjQzLDQzNjQzXSxbNDM2NDUsNDM2NDVdLFs0Mzc1NSw0Mzc1NV0sWzQzNzU4LDQzNzU5XSxbNDM3NjUsNDM3NjVdLFs0NDAwMyw0NDAwNF0sWzQ0MDA2LDQ0MDA3XSxbNDQwMDksNDQwMTBdLFs0NDAxMiw0NDAxMl1dLFpwOltbODIzMyw4MjMzXV0sU2M6W1szNiwzNl0sWzE2MiwxNjVdLFsxNDIzLDE0MjNdLFsxNTQ3LDE1NDddLFsyNTQ2LDI1NDddLFsyNTU1LDI1NTVdLFsyODAxLDI4MDFdLFszMDY1LDMwNjVdLFszNjQ3LDM2NDddLFs2MTA3LDYxMDddLFs4MzUyLDgzODNdLFs0MzA2NCw0MzA2NF0sWzY1MDIwLDY1MDIwXSxbNjUxMjksNjUxMjldLFs2NTI4NCw2NTI4NF0sWzY1NTA0LDY1NTA1XSxbNjU1MDksNjU1MTBdXSxNZTpbWzExNjAsMTE2MV0sWzY4NDYsNjg0Nl0sWzg0MTMsODQxNl0sWzg0MTgsODQyMF0sWzQyNjA4LDQyNjEwXV0sU2s6W1s5NCw5NF0sWzk2LDk2XSxbMTY4LDE2OF0sWzE3NSwxNzVdLFsxODAsMTgwXSxbMTg0LDE4NF0sWzcwNiw3MDldLFs3MjIsNzM1XSxbNzQxLDc0N10sWzc0OSw3NDldLFs3NTEsNzY3XSxbODg1LDg4NV0sWzkwMCw5MDFdLFs4MTI1LDgxMjVdLFs4MTI3LDgxMjldLFs4MTQxLDgxNDNdLFs4MTU3LDgxNTldLFs4MTczLDgxNzVdLFs4MTg5LDgxOTBdLFsxMjQ0MywxMjQ0NF0sWzQyNzUyLDQyNzc0XSxbNDI3ODQsNDI3ODVdLFs0Mjg4OSw0Mjg5MF0sWzQzODY3LDQzODY3XSxbNjQ0MzQsNjQ0NDldLFs2NTM0Miw2NTM0Ml0sWzY1MzQ0LDY1MzQ0XSxbNjU1MDcsNjU1MDddXSxDczpbWzU1Mjk2LDU1Mjk2XSxbNTYxOTEsNTYxOTJdLFs1NjMxOSw1NjMyMF0sWzU3MzQzLDU3MzQzXV0sTmw6W1s1ODcwLDU4NzJdLFs4NTQ0LDg1NzhdLFs4NTgxLDg1ODRdLFsxMjI5NSwxMjI5NV0sWzEyMzIxLDEyMzI5XSxbMTIzNDQsMTIzNDZdLFs0MjcyNiw0MjczNV1dLFNvOltbMTY2LDE2Nl0sWzE2OSwxNjldLFsxNzQsMTc0XSxbMTc2LDE3Nl0sWzExNTQsMTE1NF0sWzE0MjEsMTQyMl0sWzE1NTAsMTU1MV0sWzE3NTgsMTc1OF0sWzE3NjksMTc2OV0sWzE3ODksMTc5MF0sWzIwMzgsMjAzOF0sWzI1NTQsMjU1NF0sWzI5MjgsMjkyOF0sWzMwNTksMzA2NF0sWzMwNjYsMzA2Nl0sWzMxOTksMzE5OV0sWzM0MDcsMzQwN10sWzM0NDksMzQ0OV0sWzM4NDEsMzg0M10sWzM4NTksMzg1OV0sWzM4NjEsMzg2M10sWzM4NjYsMzg3MV0sWzM4OTIsMzg5Ml0sWzM4OTQsMzg5NF0sWzM4OTYsMzg5Nl0sWzQwMzAsNDAzN10sWzQwMzksNDA0NF0sWzQwNDYsNDA0N10sWzQwNTMsNDA1Nl0sWzQyNTQsNDI1NV0sWzUwMDgsNTAxN10sWzY0NjQsNjQ2NF0sWzY2MjIsNjY1NV0sWzcwMDksNzAxOF0sWzcwMjgsNzAzNl0sWzg0NDgsODQ0OV0sWzg0NTEsODQ1NF0sWzg0NTYsODQ1N10sWzg0NjgsODQ2OF0sWzg0NzAsODQ3MV0sWzg0NzgsODQ4M10sWzg0ODUsODQ4NV0sWzg0ODcsODQ4N10sWzg0ODksODQ4OV0sWzg0OTQsODQ5NF0sWzg1MDYsODUwN10sWzg1MjIsODUyMl0sWzg1MjQsODUyNV0sWzg1MjcsODUyN10sWzg1ODYsODU4N10sWzg1OTcsODYwMV0sWzg2MDQsODYwN10sWzg2MDksODYxMF0sWzg2MTIsODYxM10sWzg2MTUsODYyMV0sWzg2MjMsODY1M10sWzg2NTYsODY1N10sWzg2NTksODY1OV0sWzg2NjEsODY5MV0sWzg5NjAsODk2N10sWzg5NzIsODk5MV0sWzg5OTQsOWUzXSxbOTAwMyw5MDgzXSxbOTA4NSw5MTE0XSxbOTE0MCw5MTc5XSxbOTE4Niw5MjU0XSxbOTI4MCw5MjkwXSxbOTM3Miw5NDQ5XSxbOTQ3Miw5NjU0XSxbOTY1Niw5NjY0XSxbOTY2Niw5NzE5XSxbOTcyOCw5ODM4XSxbOTg0MCwxMDA4N10sWzEwMTMyLDEwMTc1XSxbMTAyNDAsMTA0OTVdLFsxMTAwOCwxMTA1NV0sWzExMDc3LDExMDc4XSxbMTEwODUsMTExMjNdLFsxMTEyNiwxMTE1N10sWzExMTYwLDExMTkzXSxbMTExOTcsMTEyMDhdLFsxMTIxMCwxMTIxOF0sWzExMjQ0LDExMjQ3XSxbMTE0OTMsMTE0OThdLFsxMTkwNCwxMTkyOV0sWzExOTMxLDEyMDE5XSxbMTIwMzIsMTIyNDVdLFsxMjI3MiwxMjI4M10sWzEyMjkyLDEyMjkyXSxbMTIzMDYsMTIzMDddLFsxMjMyMCwxMjMyMF0sWzEyMzQyLDEyMzQzXSxbMTIzNTAsMTIzNTFdLFsxMjY4OCwxMjY4OV0sWzEyNjk0LDEyNzAzXSxbMTI3MzYsMTI3NzFdLFsxMjgwMCwxMjgzMF0sWzEyODQyLDEyODcxXSxbMTI4ODAsMTI4ODBdLFsxMjg5NiwxMjkyN10sWzEyOTM4LDEyOTc2XSxbMTI5OTIsMTMwNTRdLFsxMzA1NiwxMzMxMV0sWzE5OTA0LDE5OTY3XSxbNDIxMjgsNDIxODJdLFs0MzA0OCw0MzA1MV0sWzQzMDYyLDQzMDYzXSxbNDMwNjUsNDMwNjVdLFs0MzYzOSw0MzY0MV0sWzY1MDIxLDY1MDIxXSxbNjU1MDgsNjU1MDhdLFs2NTUxMiw2NTUxMl0sWzY1NTE3LDY1NTE4XSxbNjU1MzIsNjU1MzNdXSxMdDpbWzQ1Myw0NTNdLFs0NTYsNDU2XSxbNDU5LDQ1OV0sWzQ5OCw0OThdLFs4MDcyLDgwNzldLFs4MDg4LDgwOTVdLFs4MTA0LDgxMTFdLFs4MTI0LDgxMjRdLFs4MTQwLDgxNDBdLFs4MTg4LDgxODhdXSxabDpbWzgyMzIsODIzMl1dLExvOltbMTcwLDE3MF0sWzE4NiwxODZdLFs0NDMsNDQzXSxbNDQ4LDQ1MV0sWzY2MCw2NjBdLFsxNDg4LDE1MTRdLFsxNTIwLDE1MjJdLFsxNTY4LDE1OTldLFsxNjAxLDE2MTBdLFsxNjQ2LDE2NDddLFsxNjQ5LDE3NDddLFsxNzQ5LDE3NDldLFsxNzc0LDE3NzVdLFsxNzg2LDE3ODhdLFsxNzkxLDE3OTFdLFsxODA4LDE4MDhdLFsxODEwLDE4MzldLFsxODY5LDE5NTddLFsxOTY5LDE5NjldLFsxOTk0LDIwMjZdLFsyMDQ4LDIwNjldLFsyMTEyLDIxMzZdLFsyMTQ0LDIxNTRdLFsyMjA4LDIyMjhdLFsyMjMwLDIyMzddLFsyMzA4LDIzNjFdLFsyMzY1LDIzNjVdLFsyMzg0LDIzODRdLFsyMzkyLDI0MDFdLFsyNDE4LDI0MzJdLFsyNDM3LDI0NDRdLFsyNDQ3LDI0NDhdLFsyNDUxLDI0NzJdLFsyNDc0LDI0ODBdLFsyNDgyLDI0ODJdLFsyNDg2LDI0ODldLFsyNDkzLDI0OTNdLFsyNTEwLDI1MTBdLFsyNTI0LDI1MjVdLFsyNTI3LDI1MjldLFsyNTQ0LDI1NDVdLFsyNTU2LDI1NTZdLFsyNTY1LDI1NzBdLFsyNTc1LDI1NzZdLFsyNTc5LDI2MDBdLFsyNjAyLDI2MDhdLFsyNjEwLDI2MTFdLFsyNjEzLDI2MTRdLFsyNjE2LDI2MTddLFsyNjQ5LDI2NTJdLFsyNjU0LDI2NTRdLFsyNjc0LDI2NzZdLFsyNjkzLDI3MDFdLFsyNzAzLDI3MDVdLFsyNzA3LDI3MjhdLFsyNzMwLDI3MzZdLFsyNzM4LDI3MzldLFsyNzQxLDI3NDVdLFsyNzQ5LDI3NDldLFsyNzY4LDI3NjhdLFsyNzg0LDI3ODVdLFsyODA5LDI4MDldLFsyODIxLDI4MjhdLFsyODMxLDI4MzJdLFsyODM1LDI4NTZdLFsyODU4LDI4NjRdLFsyODY2LDI4NjddLFsyODY5LDI4NzNdLFsyODc3LDI4NzddLFsyOTA4LDI5MDldLFsyOTExLDI5MTNdLFsyOTI5LDI5MjldLFsyOTQ3LDI5NDddLFsyOTQ5LDI5NTRdLFsyOTU4LDI5NjBdLFsyOTYyLDI5NjVdLFsyOTY5LDI5NzBdLFsyOTcyLDI5NzJdLFsyOTc0LDI5NzVdLFsyOTc5LDI5ODBdLFsyOTg0LDI5ODZdLFsyOTkwLDMwMDFdLFszMDI0LDMwMjRdLFszMDc3LDMwODRdLFszMDg2LDMwODhdLFszMDkwLDMxMTJdLFszMTE0LDMxMjldLFszMTMzLDMxMzNdLFszMTYwLDMxNjJdLFszMTY4LDMxNjldLFszMjAwLDMyMDBdLFszMjA1LDMyMTJdLFszMjE0LDMyMTZdLFszMjE4LDMyNDBdLFszMjQyLDMyNTFdLFszMjUzLDMyNTddLFszMjYxLDMyNjFdLFszMjk0LDMyOTRdLFszMjk2LDMyOTddLFszMzEzLDMzMTRdLFszMzMzLDMzNDBdLFszMzQyLDMzNDRdLFszMzQ2LDMzODZdLFszMzg5LDMzODldLFszNDA2LDM0MDZdLFszNDEyLDM0MTRdLFszNDIzLDM0MjVdLFszNDUwLDM0NTVdLFszNDYxLDM0NzhdLFszNDgyLDM1MDVdLFszNTA3LDM1MTVdLFszNTE3LDM1MTddLFszNTIwLDM1MjZdLFszNTg1LDM2MzJdLFszNjM0LDM2MzVdLFszNjQ4LDM2NTNdLFszNzEzLDM3MTRdLFszNzE2LDM3MTZdLFszNzE5LDM3MjBdLFszNzIyLDM3MjJdLFszNzI1LDM3MjVdLFszNzMyLDM3MzVdLFszNzM3LDM3NDNdLFszNzQ1LDM3NDddLFszNzQ5LDM3NDldLFszNzUxLDM3NTFdLFszNzU0LDM3NTVdLFszNzU3LDM3NjBdLFszNzYyLDM3NjNdLFszNzczLDM3NzNdLFszNzc2LDM3ODBdLFszODA0LDM4MDddLFszODQwLDM4NDBdLFszOTA0LDM5MTFdLFszOTEzLDM5NDhdLFszOTc2LDM5ODBdLFs0MDk2LDQxMzhdLFs0MTU5LDQxNTldLFs0MTc2LDQxODFdLFs0MTg2LDQxODldLFs0MTkzLDQxOTNdLFs0MTk3LDQxOThdLFs0MjA2LDQyMDhdLFs0MjEzLDQyMjVdLFs0MjM4LDQyMzhdLFs0MzA0LDQzNDZdLFs0MzQ5LDQ2ODBdLFs0NjgyLDQ2ODVdLFs0Njg4LDQ2OTRdLFs0Njk2LDQ2OTZdLFs0Njk4LDQ3MDFdLFs0NzA0LDQ3NDRdLFs0NzQ2LDQ3NDldLFs0NzUyLDQ3ODRdLFs0Nzg2LDQ3ODldLFs0NzkyLDQ3OThdLFs0ODAwLDQ4MDBdLFs0ODAyLDQ4MDVdLFs0ODA4LDQ4MjJdLFs0ODI0LDQ4ODBdLFs0ODgyLDQ4ODVdLFs0ODg4LDQ5NTRdLFs0OTkyLDUwMDddLFs1MTIxLDU3NDBdLFs1NzQzLDU3NTldLFs1NzYxLDU3ODZdLFs1NzkyLDU4NjZdLFs1ODczLDU4ODBdLFs1ODg4LDU5MDBdLFs1OTAyLDU5MDVdLFs1OTIwLDU5MzddLFs1OTUyLDU5NjldLFs1OTg0LDU5OTZdLFs1OTk4LDZlM10sWzYwMTYsNjA2N10sWzYxMDgsNjEwOF0sWzYxNzYsNjIxMF0sWzYyMTIsNjI2M10sWzYyNzIsNjI3Nl0sWzYyNzksNjMxMl0sWzYzMTQsNjMxNF0sWzYzMjAsNjM4OV0sWzY0MDAsNjQzMF0sWzY0ODAsNjUwOV0sWzY1MTIsNjUxNl0sWzY1MjgsNjU3MV0sWzY1NzYsNjYwMV0sWzY2NTYsNjY3OF0sWzY2ODgsNjc0MF0sWzY5MTcsNjk2M10sWzY5ODEsNjk4N10sWzcwNDMsNzA3Ml0sWzcwODYsNzA4N10sWzcwOTgsNzE0MV0sWzcxNjgsNzIwM10sWzcyNDUsNzI0N10sWzcyNTgsNzI4N10sWzc0MDEsNzQwNF0sWzc0MDYsNzQwOV0sWzc0MTMsNzQxNF0sWzg1MDEsODUwNF0sWzExNTY4LDExNjIzXSxbMTE2NDgsMTE2NzBdLFsxMTY4MCwxMTY4Nl0sWzExNjg4LDExNjk0XSxbMTE2OTYsMTE3MDJdLFsxMTcwNCwxMTcxMF0sWzExNzEyLDExNzE4XSxbMTE3MjAsMTE3MjZdLFsxMTcyOCwxMTczNF0sWzExNzM2LDExNzQyXSxbMTIyOTQsMTIyOTRdLFsxMjM0OCwxMjM0OF0sWzEyMzUzLDEyNDM4XSxbMTI0NDcsMTI0NDddLFsxMjQ0OSwxMjUzOF0sWzEyNTQzLDEyNTQzXSxbMTI1NDksMTI1OTBdLFsxMjU5MywxMjY4Nl0sWzEyNzA0LDEyNzMwXSxbMTI3ODQsMTI3OTldLFsxMzMxMiwxMzMxMl0sWzE5ODkzLDE5ODkzXSxbMTk5NjgsMTk5NjhdLFs0MDkzOCw0MDkzOF0sWzQwOTYwLDQwOTgwXSxbNDA5ODIsNDIxMjRdLFs0MjE5Miw0MjIzMV0sWzQyMjQwLDQyNTA3XSxbNDI1MTIsNDI1MjddLFs0MjUzOCw0MjUzOV0sWzQyNjA2LDQyNjA2XSxbNDI2NTYsNDI3MjVdLFs0Mjg5NSw0Mjg5NV0sWzQyOTk5LDQyOTk5XSxbNDMwMDMsNDMwMDldLFs0MzAxMSw0MzAxM10sWzQzMDE1LDQzMDE4XSxbNDMwMjAsNDMwNDJdLFs0MzA3Miw0MzEyM10sWzQzMTM4LDQzMTg3XSxbNDMyNTAsNDMyNTVdLFs0MzI1OSw0MzI1OV0sWzQzMjYxLDQzMjYxXSxbNDMyNzQsNDMzMDFdLFs0MzMxMiw0MzMzNF0sWzQzMzYwLDQzMzg4XSxbNDMzOTYsNDM0NDJdLFs0MzQ4OCw0MzQ5Ml0sWzQzNDk1LDQzNTAzXSxbNDM1MTQsNDM1MThdLFs0MzUyMCw0MzU2MF0sWzQzNTg0LDQzNTg2XSxbNDM1ODgsNDM1OTVdLFs0MzYxNiw0MzYzMV0sWzQzNjMzLDQzNjM4XSxbNDM2NDIsNDM2NDJdLFs0MzY0Niw0MzY5NV0sWzQzNjk3LDQzNjk3XSxbNDM3MDEsNDM3MDJdLFs0MzcwNSw0MzcwOV0sWzQzNzEyLDQzNzEyXSxbNDM3MTQsNDM3MTRdLFs0MzczOSw0Mzc0MF0sWzQzNzQ0LDQzNzU0XSxbNDM3NjIsNDM3NjJdLFs0Mzc3Nyw0Mzc4Ml0sWzQzNzg1LDQzNzkwXSxbNDM3OTMsNDM3OThdLFs0MzgwOCw0MzgxNF0sWzQzODE2LDQzODIyXSxbNDM5NjgsNDQwMDJdLFs0NDAzMiw0NDAzMl0sWzU1MjAzLDU1MjAzXSxbNTUyMTYsNTUyMzhdLFs1NTI0Myw1NTI5MV0sWzYzNzQ0LDY0MTA5XSxbNjQxMTIsNjQyMTddLFs2NDI4NSw2NDI4NV0sWzY0Mjg3LDY0Mjk2XSxbNjQyOTgsNjQzMTBdLFs2NDMxMiw2NDMxNl0sWzY0MzE4LDY0MzE4XSxbNjQzMjAsNjQzMjFdLFs2NDMyMyw2NDMyNF0sWzY0MzI2LDY0NDMzXSxbNjQ0NjcsNjQ4MjldLFs2NDg0OCw2NDkxMV0sWzY0OTE0LDY0OTY3XSxbNjUwMDgsNjUwMTldLFs2NTEzNiw2NTE0MF0sWzY1MTQyLDY1Mjc2XSxbNjUzODIsNjUzOTFdLFs2NTM5Myw2NTQzN10sWzY1NDQwLDY1NDcwXSxbNjU0NzQsNjU0NzldLFs2NTQ4Miw2NTQ4N10sWzY1NDkwLDY1NDk1XSxbNjU0OTgsNjU1MDBdXSxNbjpbWzc2OCw4NzldLFsxMTU1LDExNTldLFsxNDI1LDE0NjldLFsxNDcxLDE0NzFdLFsxNDczLDE0NzRdLFsxNDc2LDE0NzddLFsxNDc5LDE0NzldLFsxNTUyLDE1NjJdLFsxNjExLDE2MzFdLFsxNjQ4LDE2NDhdLFsxNzUwLDE3NTZdLFsxNzU5LDE3NjRdLFsxNzY3LDE3NjhdLFsxNzcwLDE3NzNdLFsxODA5LDE4MDldLFsxODQwLDE4NjZdLFsxOTU4LDE5NjhdLFsyMDI3LDIwMzVdLFsyMDcwLDIwNzNdLFsyMDc1LDIwODNdLFsyMDg1LDIwODddLFsyMDg5LDIwOTNdLFsyMTM3LDIxMzldLFsyMjYwLDIyNzNdLFsyMjc1LDIzMDZdLFsyMzYyLDIzNjJdLFsyMzY0LDIzNjRdLFsyMzY5LDIzNzZdLFsyMzgxLDIzODFdLFsyMzg1LDIzOTFdLFsyNDAyLDI0MDNdLFsyNDMzLDI0MzNdLFsyNDkyLDI0OTJdLFsyNDk3LDI1MDBdLFsyNTA5LDI1MDldLFsyNTMwLDI1MzFdLFsyNTYxLDI1NjJdLFsyNjIwLDI2MjBdLFsyNjI1LDI2MjZdLFsyNjMxLDI2MzJdLFsyNjM1LDI2MzddLFsyNjQxLDI2NDFdLFsyNjcyLDI2NzNdLFsyNjc3LDI2NzddLFsyNjg5LDI2OTBdLFsyNzQ4LDI3NDhdLFsyNzUzLDI3NTddLFsyNzU5LDI3NjBdLFsyNzY1LDI3NjVdLFsyNzg2LDI3ODddLFsyODEwLDI4MTVdLFsyODE3LDI4MTddLFsyODc2LDI4NzZdLFsyODc5LDI4NzldLFsyODgxLDI4ODRdLFsyODkzLDI4OTNdLFsyOTAyLDI5MDJdLFsyOTE0LDI5MTVdLFsyOTQ2LDI5NDZdLFszMDA4LDMwMDhdLFszMDIxLDMwMjFdLFszMDcyLDMwNzJdLFszMTM0LDMxMzZdLFszMTQyLDMxNDRdLFszMTQ2LDMxNDldLFszMTU3LDMxNThdLFszMTcwLDMxNzFdLFszMjAxLDMyMDFdLFszMjYwLDMyNjBdLFszMjYzLDMyNjNdLFszMjcwLDMyNzBdLFszMjc2LDMyNzddLFszMjk4LDMyOTldLFszMzI4LDMzMjldLFszMzg3LDMzODhdLFszMzkzLDMzOTZdLFszNDA1LDM0MDVdLFszNDI2LDM0MjddLFszNTMwLDM1MzBdLFszNTM4LDM1NDBdLFszNTQyLDM1NDJdLFszNjMzLDM2MzNdLFszNjM2LDM2NDJdLFszNjU1LDM2NjJdLFszNzYxLDM3NjFdLFszNzY0LDM3NjldLFszNzcxLDM3NzJdLFszNzg0LDM3ODldLFszODY0LDM4NjVdLFszODkzLDM4OTNdLFszODk1LDM4OTVdLFszODk3LDM4OTddLFszOTUzLDM5NjZdLFszOTY4LDM5NzJdLFszOTc0LDM5NzVdLFszOTgxLDM5OTFdLFszOTkzLDQwMjhdLFs0MDM4LDQwMzhdLFs0MTQxLDQxNDRdLFs0MTQ2LDQxNTFdLFs0MTUzLDQxNTRdLFs0MTU3LDQxNThdLFs0MTg0LDQxODVdLFs0MTkwLDQxOTJdLFs0MjA5LDQyMTJdLFs0MjI2LDQyMjZdLFs0MjI5LDQyMzBdLFs0MjM3LDQyMzddLFs0MjUzLDQyNTNdLFs0OTU3LDQ5NTldLFs1OTA2LDU5MDhdLFs1OTM4LDU5NDBdLFs1OTcwLDU5NzFdLFs2MDAyLDYwMDNdLFs2MDY4LDYwNjldLFs2MDcxLDYwNzddLFs2MDg2LDYwODZdLFs2MDg5LDYwOTldLFs2MTA5LDYxMDldLFs2MTU1LDYxNTddLFs2Mjc3LDYyNzhdLFs2MzEzLDYzMTNdLFs2NDMyLDY0MzRdLFs2NDM5LDY0NDBdLFs2NDUwLDY0NTBdLFs2NDU3LDY0NTldLFs2Njc5LDY2ODBdLFs2NjgzLDY2ODNdLFs2NzQyLDY3NDJdLFs2NzQ0LDY3NTBdLFs2NzUyLDY3NTJdLFs2NzU0LDY3NTRdLFs2NzU3LDY3NjRdLFs2NzcxLDY3ODBdLFs2NzgzLDY3ODNdLFs2ODMyLDY4NDVdLFs2OTEyLDY5MTVdLFs2OTY0LDY5NjRdLFs2OTY2LDY5NzBdLFs2OTcyLDY5NzJdLFs2OTc4LDY5NzhdLFs3MDE5LDcwMjddLFs3MDQwLDcwNDFdLFs3MDc0LDcwNzddLFs3MDgwLDcwODFdLFs3MDgzLDcwODVdLFs3MTQyLDcxNDJdLFs3MTQ0LDcxNDVdLFs3MTQ5LDcxNDldLFs3MTUxLDcxNTNdLFs3MjEyLDcyMTldLFs3MjIyLDcyMjNdLFs3Mzc2LDczNzhdLFs3MzgwLDczOTJdLFs3Mzk0LDc0MDBdLFs3NDA1LDc0MDVdLFs3NDEyLDc0MTJdLFs3NDE2LDc0MTddLFs3NjE2LDc2NzNdLFs3Njc1LDc2NzldLFs4NDAwLDg0MTJdLFs4NDE3LDg0MTddLFs4NDIxLDg0MzJdLFsxMTUwMywxMTUwNV0sWzExNjQ3LDExNjQ3XSxbMTE3NDQsMTE3NzVdLFsxMjMzMCwxMjMzM10sWzEyNDQxLDEyNDQyXSxbNDI2MDcsNDI2MDddLFs0MjYxMiw0MjYyMV0sWzQyNjU0LDQyNjU1XSxbNDI3MzYsNDI3MzddLFs0MzAxMCw0MzAxMF0sWzQzMDE0LDQzMDE0XSxbNDMwMTksNDMwMTldLFs0MzA0NSw0MzA0Nl0sWzQzMjA0LDQzMjA1XSxbNDMyMzIsNDMyNDldLFs0MzMwMiw0MzMwOV0sWzQzMzM1LDQzMzQ1XSxbNDMzOTIsNDMzOTRdLFs0MzQ0Myw0MzQ0M10sWzQzNDQ2LDQzNDQ5XSxbNDM0NTIsNDM0NTJdLFs0MzQ5Myw0MzQ5M10sWzQzNTYxLDQzNTY2XSxbNDM1NjksNDM1NzBdLFs0MzU3Myw0MzU3NF0sWzQzNTg3LDQzNTg3XSxbNDM1OTYsNDM1OTZdLFs0MzY0NCw0MzY0NF0sWzQzNjk2LDQzNjk2XSxbNDM2OTgsNDM3MDBdLFs0MzcwMyw0MzcwNF0sWzQzNzEwLDQzNzExXSxbNDM3MTMsNDM3MTNdLFs0Mzc1Niw0Mzc1N10sWzQzNzY2LDQzNzY2XSxbNDQwMDUsNDQwMDVdLFs0NDAwOCw0NDAwOF0sWzQ0MDEzLDQ0MDEzXSxbNjQyODYsNjQyODZdLFs2NTAyNCw2NTAzOV0sWzY1MDU2LDY1MDcxXV0sUG86W1szMywzNV0sWzM3LDM5XSxbNDIsNDJdLFs0NCw0NF0sWzQ2LDQ3XSxbNTgsNTldLFs2Myw2NF0sWzkyLDkyXSxbMTYxLDE2MV0sWzE2NywxNjddLFsxODIsMTgzXSxbMTkxLDE5MV0sWzg5NCw4OTRdLFs5MDMsOTAzXSxbMTM3MCwxMzc1XSxbMTQxNywxNDE3XSxbMTQ3MiwxNDcyXSxbMTQ3NSwxNDc1XSxbMTQ3OCwxNDc4XSxbMTUyMywxNTI0XSxbMTU0NSwxNTQ2XSxbMTU0OCwxNTQ5XSxbMTU2MywxNTYzXSxbMTU2NiwxNTY3XSxbMTY0MiwxNjQ1XSxbMTc0OCwxNzQ4XSxbMTc5MiwxODA1XSxbMjAzOSwyMDQxXSxbMjA5NiwyMTEwXSxbMjE0MiwyMTQyXSxbMjQwNCwyNDA1XSxbMjQxNiwyNDE2XSxbMjU1NywyNTU3XSxbMjgwMCwyODAwXSxbMzU3MiwzNTcyXSxbMzY2MywzNjYzXSxbMzY3NCwzNjc1XSxbMzg0NCwzODU4XSxbMzg2MCwzODYwXSxbMzk3MywzOTczXSxbNDA0OCw0MDUyXSxbNDA1Nyw0MDU4XSxbNDE3MCw0MTc1XSxbNDM0Nyw0MzQ3XSxbNDk2MCw0OTY4XSxbNTc0MSw1NzQyXSxbNTg2Nyw1ODY5XSxbNTk0MSw1OTQyXSxbNjEwMCw2MTAyXSxbNjEwNCw2MTA2XSxbNjE0NCw2MTQ5XSxbNjE1MSw2MTU0XSxbNjQ2OCw2NDY5XSxbNjY4Niw2Njg3XSxbNjgxNiw2ODIyXSxbNjgyNCw2ODI5XSxbNzAwMiw3MDA4XSxbNzE2NCw3MTY3XSxbNzIyNyw3MjMxXSxbNzI5NCw3Mjk1XSxbNzM2MCw3MzY3XSxbNzM3OSw3Mzc5XSxbODIxNCw4MjE1XSxbODIyNCw4MjMxXSxbODI0MCw4MjQ4XSxbODI1MSw4MjU0XSxbODI1Nyw4MjU5XSxbODI2Myw4MjczXSxbODI3NSw4Mjc1XSxbODI3Nyw4Mjg2XSxbMTE1MTMsMTE1MTZdLFsxMTUxOCwxMTUxOV0sWzExNjMyLDExNjMyXSxbMTE3NzYsMTE3NzddLFsxMTc4MiwxMTc4NF0sWzExNzg3LDExNzg3XSxbMTE3OTAsMTE3OThdLFsxMTgwMCwxMTgwMV0sWzExODAzLDExODAzXSxbMTE4MDYsMTE4MDddLFsxMTgxOCwxMTgyMl0sWzExODI0LDExODMzXSxbMTE4MzYsMTE4MzldLFsxMTg0MSwxMTg0MV0sWzExODQzLDExODQ5XSxbMTIyODksMTIyOTFdLFsxMjM0OSwxMjM0OV0sWzEyNTM5LDEyNTM5XSxbNDIyMzgsNDIyMzldLFs0MjUwOSw0MjUxMV0sWzQyNjExLDQyNjExXSxbNDI2MjIsNDI2MjJdLFs0MjczOCw0Mjc0M10sWzQzMTI0LDQzMTI3XSxbNDMyMTQsNDMyMTVdLFs0MzI1Niw0MzI1OF0sWzQzMjYwLDQzMjYwXSxbNDMzMTAsNDMzMTFdLFs0MzM1OSw0MzM1OV0sWzQzNDU3LDQzNDY5XSxbNDM0ODYsNDM0ODddLFs0MzYxMiw0MzYxNV0sWzQzNzQyLDQzNzQzXSxbNDM3NjAsNDM3NjFdLFs0NDAxMSw0NDAxMV0sWzY1MDQwLDY1MDQ2XSxbNjUwNDksNjUwNDldLFs2NTA3Miw2NTA3Ml0sWzY1MDkzLDY1MDk0XSxbNjUwOTcsNjUxMDBdLFs2NTEwNCw2NTEwNl0sWzY1MTA4LDY1MTExXSxbNjUxMTksNjUxMjFdLFs2NTEyOCw2NTEyOF0sWzY1MTMwLDY1MTMxXSxbNjUyODEsNjUyODNdLFs2NTI4NSw2NTI4N10sWzY1MjkwLDY1MjkwXSxbNjUyOTIsNjUyOTJdLFs2NTI5NCw2NTI5NV0sWzY1MzA2LDY1MzA3XSxbNjUzMTEsNjUzMTJdLFs2NTM0MCw2NTM0MF0sWzY1Mzc3LDY1Mzc3XSxbNjUzODAsNjUzODFdXSxDbzpbWzU3MzQ0LDU3MzQ0XSxbNjM3NDMsNjM3NDNdXSxTbTpbWzQzLDQzXSxbNjAsNjJdLFsxMjQsMTI0XSxbMTI2LDEyNl0sWzE3MiwxNzJdLFsxNzcsMTc3XSxbMjE1LDIxNV0sWzI0NywyNDddLFsxMDE0LDEwMTRdLFsxNTQyLDE1NDRdLFs4MjYwLDgyNjBdLFs4Mjc0LDgyNzRdLFs4MzE0LDgzMTZdLFs4MzMwLDgzMzJdLFs4NDcyLDg0NzJdLFs4NTEyLDg1MTZdLFs4NTIzLDg1MjNdLFs4NTkyLDg1OTZdLFs4NjAyLDg2MDNdLFs4NjA4LDg2MDhdLFs4NjExLDg2MTFdLFs4NjE0LDg2MTRdLFs4NjIyLDg2MjJdLFs4NjU0LDg2NTVdLFs4NjU4LDg2NThdLFs4NjYwLDg2NjBdLFs4NjkyLDg5NTldLFs4OTkyLDg5OTNdLFs5MDg0LDkwODRdLFs5MTE1LDkxMzldLFs5MTgwLDkxODVdLFs5NjU1LDk2NTVdLFs5NjY1LDk2NjVdLFs5NzIwLDk3MjddLFs5ODM5LDk4MzldLFsxMDE3NiwxMDE4MF0sWzEwMTgzLDEwMjEzXSxbMTAyMjQsMTAyMzldLFsxMDQ5NiwxMDYyNl0sWzEwNjQ5LDEwNzExXSxbMTA3MTYsMTA3NDddLFsxMDc1MCwxMTAwN10sWzExMDU2LDExMDc2XSxbMTEwNzksMTEwODRdLFs2NDI5Nyw2NDI5N10sWzY1MTIyLDY1MTIyXSxbNjUxMjQsNjUxMjZdLFs2NTI5MSw2NTI5MV0sWzY1MzA4LDY1MzEwXSxbNjUzNzIsNjUzNzJdLFs2NTM3NCw2NTM3NF0sWzY1NTA2LDY1NTA2XSxbNjU1MTMsNjU1MTZdXSxQZjpbWzE4NywxODddLFs4MjE3LDgyMTddLFs4MjIxLDgyMjFdLFs4MjUwLDgyNTBdLFsxMTc3OSwxMTc3OV0sWzExNzgxLDExNzgxXSxbMTE3ODYsMTE3ODZdLFsxMTc4OSwxMTc4OV0sWzExODA1LDExODA1XSxbMTE4MDksMTE4MDldXSxDYzpbWzAsMzFdLFsxMjcsMTU5XV0sUGk6W1sxNzEsMTcxXSxbODIxNiw4MjE2XSxbODIxOSw4MjIwXSxbODIyMyw4MjIzXSxbODI0OSw4MjQ5XSxbMTE3NzgsMTE3NzhdLFsxMTc4MCwxMTc4MF0sWzExNzg1LDExNzg1XSxbMTE3ODgsMTE3ODhdLFsxMTgwNCwxMTgwNF0sWzExODA4LDExODA4XV0sTHU6W1s2NSw5MF0sWzE5MiwyMTRdLFsyMTYsMjIyXSxbMjU2LDI1Nl0sWzI1OCwyNThdLFsyNjAsMjYwXSxbMjYyLDI2Ml0sWzI2NCwyNjRdLFsyNjYsMjY2XSxbMjY4LDI2OF0sWzI3MCwyNzBdLFsyNzIsMjcyXSxbMjc0LDI3NF0sWzI3NiwyNzZdLFsyNzgsMjc4XSxbMjgwLDI4MF0sWzI4MiwyODJdLFsyODQsMjg0XSxbMjg2LDI4Nl0sWzI4OCwyODhdLFsyOTAsMjkwXSxbMjkyLDI5Ml0sWzI5NCwyOTRdLFsyOTYsMjk2XSxbMjk4LDI5OF0sWzMwMCwzMDBdLFszMDIsMzAyXSxbMzA0LDMwNF0sWzMwNiwzMDZdLFszMDgsMzA4XSxbMzEwLDMxMF0sWzMxMywzMTNdLFszMTUsMzE1XSxbMzE3LDMxN10sWzMxOSwzMTldLFszMjEsMzIxXSxbMzIzLDMyM10sWzMyNSwzMjVdLFszMjcsMzI3XSxbMzMwLDMzMF0sWzMzMiwzMzJdLFszMzQsMzM0XSxbMzM2LDMzNl0sWzMzOCwzMzhdLFszNDAsMzQwXSxbMzQyLDM0Ml0sWzM0NCwzNDRdLFszNDYsMzQ2XSxbMzQ4LDM0OF0sWzM1MCwzNTBdLFszNTIsMzUyXSxbMzU0LDM1NF0sWzM1NiwzNTZdLFszNTgsMzU4XSxbMzYwLDM2MF0sWzM2MiwzNjJdLFszNjQsMzY0XSxbMzY2LDM2Nl0sWzM2OCwzNjhdLFszNzAsMzcwXSxbMzcyLDM3Ml0sWzM3NCwzNzRdLFszNzYsMzc3XSxbMzc5LDM3OV0sWzM4MSwzODFdLFszODUsMzg2XSxbMzg4LDM4OF0sWzM5MCwzOTFdLFszOTMsMzk1XSxbMzk4LDQwMV0sWzQwMyw0MDRdLFs0MDYsNDA4XSxbNDEyLDQxM10sWzQxNSw0MTZdLFs0MTgsNDE4XSxbNDIwLDQyMF0sWzQyMiw0MjNdLFs0MjUsNDI1XSxbNDI4LDQyOF0sWzQzMCw0MzFdLFs0MzMsNDM1XSxbNDM3LDQzN10sWzQzOSw0NDBdLFs0NDQsNDQ0XSxbNDUyLDQ1Ml0sWzQ1NSw0NTVdLFs0NTgsNDU4XSxbNDYxLDQ2MV0sWzQ2Myw0NjNdLFs0NjUsNDY1XSxbNDY3LDQ2N10sWzQ2OSw0NjldLFs0NzEsNDcxXSxbNDczLDQ3M10sWzQ3NSw0NzVdLFs0NzgsNDc4XSxbNDgwLDQ4MF0sWzQ4Miw0ODJdLFs0ODQsNDg0XSxbNDg2LDQ4Nl0sWzQ4OCw0ODhdLFs0OTAsNDkwXSxbNDkyLDQ5Ml0sWzQ5NCw0OTRdLFs0OTcsNDk3XSxbNTAwLDUwMF0sWzUwMiw1MDRdLFs1MDYsNTA2XSxbNTA4LDUwOF0sWzUxMCw1MTBdLFs1MTIsNTEyXSxbNTE0LDUxNF0sWzUxNiw1MTZdLFs1MTgsNTE4XSxbNTIwLDUyMF0sWzUyMiw1MjJdLFs1MjQsNTI0XSxbNTI2LDUyNl0sWzUyOCw1MjhdLFs1MzAsNTMwXSxbNTMyLDUzMl0sWzUzNCw1MzRdLFs1MzYsNTM2XSxbNTM4LDUzOF0sWzU0MCw1NDBdLFs1NDIsNTQyXSxbNTQ0LDU0NF0sWzU0Niw1NDZdLFs1NDgsNTQ4XSxbNTUwLDU1MF0sWzU1Miw1NTJdLFs1NTQsNTU0XSxbNTU2LDU1Nl0sWzU1OCw1NThdLFs1NjAsNTYwXSxbNTYyLDU2Ml0sWzU3MCw1NzFdLFs1NzMsNTc0XSxbNTc3LDU3N10sWzU3OSw1ODJdLFs1ODQsNTg0XSxbNTg2LDU4Nl0sWzU4OCw1ODhdLFs1OTAsNTkwXSxbODgwLDg4MF0sWzg4Miw4ODJdLFs4ODYsODg2XSxbODk1LDg5NV0sWzkwMiw5MDJdLFs5MDQsOTA2XSxbOTA4LDkwOF0sWzkxMCw5MTFdLFs5MTMsOTI5XSxbOTMxLDkzOV0sWzk3NSw5NzVdLFs5NzgsOTgwXSxbOTg0LDk4NF0sWzk4Niw5ODZdLFs5ODgsOTg4XSxbOTkwLDk5MF0sWzk5Miw5OTJdLFs5OTQsOTk0XSxbOTk2LDk5Nl0sWzk5OCw5OThdLFsxZTMsMWUzXSxbMTAwMiwxMDAyXSxbMTAwNCwxMDA0XSxbMTAwNiwxMDA2XSxbMTAxMiwxMDEyXSxbMTAxNSwxMDE1XSxbMTAxNywxMDE4XSxbMTAyMSwxMDcxXSxbMTEyMCwxMTIwXSxbMTEyMiwxMTIyXSxbMTEyNCwxMTI0XSxbMTEyNiwxMTI2XSxbMTEyOCwxMTI4XSxbMTEzMCwxMTMwXSxbMTEzMiwxMTMyXSxbMTEzNCwxMTM0XSxbMTEzNiwxMTM2XSxbMTEzOCwxMTM4XSxbMTE0MCwxMTQwXSxbMTE0MiwxMTQyXSxbMTE0NCwxMTQ0XSxbMTE0NiwxMTQ2XSxbMTE0OCwxMTQ4XSxbMTE1MCwxMTUwXSxbMTE1MiwxMTUyXSxbMTE2MiwxMTYyXSxbMTE2NCwxMTY0XSxbMTE2NiwxMTY2XSxbMTE2OCwxMTY4XSxbMTE3MCwxMTcwXSxbMTE3MiwxMTcyXSxbMTE3NCwxMTc0XSxbMTE3NiwxMTc2XSxbMTE3OCwxMTc4XSxbMTE4MCwxMTgwXSxbMTE4MiwxMTgyXSxbMTE4NCwxMTg0XSxbMTE4NiwxMTg2XSxbMTE4OCwxMTg4XSxbMTE5MCwxMTkwXSxbMTE5MiwxMTkyXSxbMTE5NCwxMTk0XSxbMTE5NiwxMTk2XSxbMTE5OCwxMTk4XSxbMTIwMCwxMjAwXSxbMTIwMiwxMjAyXSxbMTIwNCwxMjA0XSxbMTIwNiwxMjA2XSxbMTIwOCwxMjA4XSxbMTIxMCwxMjEwXSxbMTIxMiwxMjEyXSxbMTIxNCwxMjE0XSxbMTIxNiwxMjE3XSxbMTIxOSwxMjE5XSxbMTIyMSwxMjIxXSxbMTIyMywxMjIzXSxbMTIyNSwxMjI1XSxbMTIyNywxMjI3XSxbMTIyOSwxMjI5XSxbMTIzMiwxMjMyXSxbMTIzNCwxMjM0XSxbMTIzNiwxMjM2XSxbMTIzOCwxMjM4XSxbMTI0MCwxMjQwXSxbMTI0MiwxMjQyXSxbMTI0NCwxMjQ0XSxbMTI0NiwxMjQ2XSxbMTI0OCwxMjQ4XSxbMTI1MCwxMjUwXSxbMTI1MiwxMjUyXSxbMTI1NCwxMjU0XSxbMTI1NiwxMjU2XSxbMTI1OCwxMjU4XSxbMTI2MCwxMjYwXSxbMTI2MiwxMjYyXSxbMTI2NCwxMjY0XSxbMTI2NiwxMjY2XSxbMTI2OCwxMjY4XSxbMTI3MCwxMjcwXSxbMTI3MiwxMjcyXSxbMTI3NCwxMjc0XSxbMTI3NiwxMjc2XSxbMTI3OCwxMjc4XSxbMTI4MCwxMjgwXSxbMTI4MiwxMjgyXSxbMTI4NCwxMjg0XSxbMTI4NiwxMjg2XSxbMTI4OCwxMjg4XSxbMTI5MCwxMjkwXSxbMTI5MiwxMjkyXSxbMTI5NCwxMjk0XSxbMTI5NiwxMjk2XSxbMTI5OCwxMjk4XSxbMTMwMCwxMzAwXSxbMTMwMiwxMzAyXSxbMTMwNCwxMzA0XSxbMTMwNiwxMzA2XSxbMTMwOCwxMzA4XSxbMTMxMCwxMzEwXSxbMTMxMiwxMzEyXSxbMTMxNCwxMzE0XSxbMTMxNiwxMzE2XSxbMTMxOCwxMzE4XSxbMTMyMCwxMzIwXSxbMTMyMiwxMzIyXSxbMTMyNCwxMzI0XSxbMTMyNiwxMzI2XSxbMTMyOSwxMzY2XSxbNDI1Niw0MjkzXSxbNDI5NSw0Mjk1XSxbNDMwMSw0MzAxXSxbNTAyNCw1MTA5XSxbNzY4MCw3NjgwXSxbNzY4Miw3NjgyXSxbNzY4NCw3Njg0XSxbNzY4Niw3Njg2XSxbNzY4OCw3Njg4XSxbNzY5MCw3NjkwXSxbNzY5Miw3NjkyXSxbNzY5NCw3Njk0XSxbNzY5Niw3Njk2XSxbNzY5OCw3Njk4XSxbNzcwMCw3NzAwXSxbNzcwMiw3NzAyXSxbNzcwNCw3NzA0XSxbNzcwNiw3NzA2XSxbNzcwOCw3NzA4XSxbNzcxMCw3NzEwXSxbNzcxMiw3NzEyXSxbNzcxNCw3NzE0XSxbNzcxNiw3NzE2XSxbNzcxOCw3NzE4XSxbNzcyMCw3NzIwXSxbNzcyMiw3NzIyXSxbNzcyNCw3NzI0XSxbNzcyNiw3NzI2XSxbNzcyOCw3NzI4XSxbNzczMCw3NzMwXSxbNzczMiw3NzMyXSxbNzczNCw3NzM0XSxbNzczNiw3NzM2XSxbNzczOCw3NzM4XSxbNzc0MCw3NzQwXSxbNzc0Miw3NzQyXSxbNzc0NCw3NzQ0XSxbNzc0Niw3NzQ2XSxbNzc0OCw3NzQ4XSxbNzc1MCw3NzUwXSxbNzc1Miw3NzUyXSxbNzc1NCw3NzU0XSxbNzc1Niw3NzU2XSxbNzc1OCw3NzU4XSxbNzc2MCw3NzYwXSxbNzc2Miw3NzYyXSxbNzc2NCw3NzY0XSxbNzc2Niw3NzY2XSxbNzc2OCw3NzY4XSxbNzc3MCw3NzcwXSxbNzc3Miw3NzcyXSxbNzc3NCw3Nzc0XSxbNzc3Niw3Nzc2XSxbNzc3OCw3Nzc4XSxbNzc4MCw3NzgwXSxbNzc4Miw3NzgyXSxbNzc4NCw3Nzg0XSxbNzc4Niw3Nzg2XSxbNzc4OCw3Nzg4XSxbNzc5MCw3NzkwXSxbNzc5Miw3NzkyXSxbNzc5NCw3Nzk0XSxbNzc5Niw3Nzk2XSxbNzc5OCw3Nzk4XSxbNzgwMCw3ODAwXSxbNzgwMiw3ODAyXSxbNzgwNCw3ODA0XSxbNzgwNiw3ODA2XSxbNzgwOCw3ODA4XSxbNzgxMCw3ODEwXSxbNzgxMiw3ODEyXSxbNzgxNCw3ODE0XSxbNzgxNiw3ODE2XSxbNzgxOCw3ODE4XSxbNzgyMCw3ODIwXSxbNzgyMiw3ODIyXSxbNzgyNCw3ODI0XSxbNzgyNiw3ODI2XSxbNzgyOCw3ODI4XSxbNzgzOCw3ODM4XSxbNzg0MCw3ODQwXSxbNzg0Miw3ODQyXSxbNzg0NCw3ODQ0XSxbNzg0Niw3ODQ2XSxbNzg0OCw3ODQ4XSxbNzg1MCw3ODUwXSxbNzg1Miw3ODUyXSxbNzg1NCw3ODU0XSxbNzg1Niw3ODU2XSxbNzg1OCw3ODU4XSxbNzg2MCw3ODYwXSxbNzg2Miw3ODYyXSxbNzg2NCw3ODY0XSxbNzg2Niw3ODY2XSxbNzg2OCw3ODY4XSxbNzg3MCw3ODcwXSxbNzg3Miw3ODcyXSxbNzg3NCw3ODc0XSxbNzg3Niw3ODc2XSxbNzg3OCw3ODc4XSxbNzg4MCw3ODgwXSxbNzg4Miw3ODgyXSxbNzg4NCw3ODg0XSxbNzg4Niw3ODg2XSxbNzg4OCw3ODg4XSxbNzg5MCw3ODkwXSxbNzg5Miw3ODkyXSxbNzg5NCw3ODk0XSxbNzg5Niw3ODk2XSxbNzg5OCw3ODk4XSxbNzkwMCw3OTAwXSxbNzkwMiw3OTAyXSxbNzkwNCw3OTA0XSxbNzkwNiw3OTA2XSxbNzkwOCw3OTA4XSxbNzkxMCw3OTEwXSxbNzkxMiw3OTEyXSxbNzkxNCw3OTE0XSxbNzkxNiw3OTE2XSxbNzkxOCw3OTE4XSxbNzkyMCw3OTIwXSxbNzkyMiw3OTIyXSxbNzkyNCw3OTI0XSxbNzkyNiw3OTI2XSxbNzkyOCw3OTI4XSxbNzkzMCw3OTMwXSxbNzkzMiw3OTMyXSxbNzkzNCw3OTM0XSxbNzk0NCw3OTUxXSxbNzk2MCw3OTY1XSxbNzk3Niw3OTgzXSxbNzk5Miw3OTk5XSxbODAwOCw4MDEzXSxbODAyNSw4MDI1XSxbODAyNyw4MDI3XSxbODAyOSw4MDI5XSxbODAzMSw4MDMxXSxbODA0MCw4MDQ3XSxbODEyMCw4MTIzXSxbODEzNiw4MTM5XSxbODE1Miw4MTU1XSxbODE2OCw4MTcyXSxbODE4NCw4MTg3XSxbODQ1MCw4NDUwXSxbODQ1NSw4NDU1XSxbODQ1OSw4NDYxXSxbODQ2NCw4NDY2XSxbODQ2OSw4NDY5XSxbODQ3Myw4NDc3XSxbODQ4NCw4NDg0XSxbODQ4Niw4NDg2XSxbODQ4OCw4NDg4XSxbODQ5MCw4NDkzXSxbODQ5Niw4NDk5XSxbODUxMCw4NTExXSxbODUxNyw4NTE3XSxbODU3OSw4NTc5XSxbMTEyNjQsMTEzMTBdLFsxMTM2MCwxMTM2MF0sWzExMzYyLDExMzY0XSxbMTEzNjcsMTEzNjddLFsxMTM2OSwxMTM2OV0sWzExMzcxLDExMzcxXSxbMTEzNzMsMTEzNzZdLFsxMTM3OCwxMTM3OF0sWzExMzgxLDExMzgxXSxbMTEzOTAsMTEzOTJdLFsxMTM5NCwxMTM5NF0sWzExMzk2LDExMzk2XSxbMTEzOTgsMTEzOThdLFsxMTQwMCwxMTQwMF0sWzExNDAyLDExNDAyXSxbMTE0MDQsMTE0MDRdLFsxMTQwNiwxMTQwNl0sWzExNDA4LDExNDA4XSxbMTE0MTAsMTE0MTBdLFsxMTQxMiwxMTQxMl0sWzExNDE0LDExNDE0XSxbMTE0MTYsMTE0MTZdLFsxMTQxOCwxMTQxOF0sWzExNDIwLDExNDIwXSxbMTE0MjIsMTE0MjJdLFsxMTQyNCwxMTQyNF0sWzExNDI2LDExNDI2XSxbMTE0MjgsMTE0MjhdLFsxMTQzMCwxMTQzMF0sWzExNDMyLDExNDMyXSxbMTE0MzQsMTE0MzRdLFsxMTQzNiwxMTQzNl0sWzExNDM4LDExNDM4XSxbMTE0NDAsMTE0NDBdLFsxMTQ0MiwxMTQ0Ml0sWzExNDQ0LDExNDQ0XSxbMTE0NDYsMTE0NDZdLFsxMTQ0OCwxMTQ0OF0sWzExNDUwLDExNDUwXSxbMTE0NTIsMTE0NTJdLFsxMTQ1NCwxMTQ1NF0sWzExNDU2LDExNDU2XSxbMTE0NTgsMTE0NThdLFsxMTQ2MCwxMTQ2MF0sWzExNDYyLDExNDYyXSxbMTE0NjQsMTE0NjRdLFsxMTQ2NiwxMTQ2Nl0sWzExNDY4LDExNDY4XSxbMTE0NzAsMTE0NzBdLFsxMTQ3MiwxMTQ3Ml0sWzExNDc0LDExNDc0XSxbMTE0NzYsMTE0NzZdLFsxMTQ3OCwxMTQ3OF0sWzExNDgwLDExNDgwXSxbMTE0ODIsMTE0ODJdLFsxMTQ4NCwxMTQ4NF0sWzExNDg2LDExNDg2XSxbMTE0ODgsMTE0ODhdLFsxMTQ5MCwxMTQ5MF0sWzExNDk5LDExNDk5XSxbMTE1MDEsMTE1MDFdLFsxMTUwNiwxMTUwNl0sWzQyNTYwLDQyNTYwXSxbNDI1NjIsNDI1NjJdLFs0MjU2NCw0MjU2NF0sWzQyNTY2LDQyNTY2XSxbNDI1NjgsNDI1NjhdLFs0MjU3MCw0MjU3MF0sWzQyNTcyLDQyNTcyXSxbNDI1NzQsNDI1NzRdLFs0MjU3Niw0MjU3Nl0sWzQyNTc4LDQyNTc4XSxbNDI1ODAsNDI1ODBdLFs0MjU4Miw0MjU4Ml0sWzQyNTg0LDQyNTg0XSxbNDI1ODYsNDI1ODZdLFs0MjU4OCw0MjU4OF0sWzQyNTkwLDQyNTkwXSxbNDI1OTIsNDI1OTJdLFs0MjU5NCw0MjU5NF0sWzQyNTk2LDQyNTk2XSxbNDI1OTgsNDI1OThdLFs0MjYwMCw0MjYwMF0sWzQyNjAyLDQyNjAyXSxbNDI2MDQsNDI2MDRdLFs0MjYyNCw0MjYyNF0sWzQyNjI2LDQyNjI2XSxbNDI2MjgsNDI2MjhdLFs0MjYzMCw0MjYzMF0sWzQyNjMyLDQyNjMyXSxbNDI2MzQsNDI2MzRdLFs0MjYzNiw0MjYzNl0sWzQyNjM4LDQyNjM4XSxbNDI2NDAsNDI2NDBdLFs0MjY0Miw0MjY0Ml0sWzQyNjQ0LDQyNjQ0XSxbNDI2NDYsNDI2NDZdLFs0MjY0OCw0MjY0OF0sWzQyNjUwLDQyNjUwXSxbNDI3ODYsNDI3ODZdLFs0Mjc4OCw0Mjc4OF0sWzQyNzkwLDQyNzkwXSxbNDI3OTIsNDI3OTJdLFs0Mjc5NCw0Mjc5NF0sWzQyNzk2LDQyNzk2XSxbNDI3OTgsNDI3OThdLFs0MjgwMiw0MjgwMl0sWzQyODA0LDQyODA0XSxbNDI4MDYsNDI4MDZdLFs0MjgwOCw0MjgwOF0sWzQyODEwLDQyODEwXSxbNDI4MTIsNDI4MTJdLFs0MjgxNCw0MjgxNF0sWzQyODE2LDQyODE2XSxbNDI4MTgsNDI4MThdLFs0MjgyMCw0MjgyMF0sWzQyODIyLDQyODIyXSxbNDI4MjQsNDI4MjRdLFs0MjgyNiw0MjgyNl0sWzQyODI4LDQyODI4XSxbNDI4MzAsNDI4MzBdLFs0MjgzMiw0MjgzMl0sWzQyODM0LDQyODM0XSxbNDI4MzYsNDI4MzZdLFs0MjgzOCw0MjgzOF0sWzQyODQwLDQyODQwXSxbNDI4NDIsNDI4NDJdLFs0Mjg0NCw0Mjg0NF0sWzQyODQ2LDQyODQ2XSxbNDI4NDgsNDI4NDhdLFs0Mjg1MCw0Mjg1MF0sWzQyODUyLDQyODUyXSxbNDI4NTQsNDI4NTRdLFs0Mjg1Niw0Mjg1Nl0sWzQyODU4LDQyODU4XSxbNDI4NjAsNDI4NjBdLFs0Mjg2Miw0Mjg2Ml0sWzQyODczLDQyODczXSxbNDI4NzUsNDI4NzVdLFs0Mjg3Nyw0Mjg3OF0sWzQyODgwLDQyODgwXSxbNDI4ODIsNDI4ODJdLFs0Mjg4NCw0Mjg4NF0sWzQyODg2LDQyODg2XSxbNDI4OTEsNDI4OTFdLFs0Mjg5Myw0Mjg5M10sWzQyODk2LDQyODk2XSxbNDI4OTgsNDI4OThdLFs0MjkwMiw0MjkwMl0sWzQyOTA0LDQyOTA0XSxbNDI5MDYsNDI5MDZdLFs0MjkwOCw0MjkwOF0sWzQyOTEwLDQyOTEwXSxbNDI5MTIsNDI5MTJdLFs0MjkxNCw0MjkxNF0sWzQyOTE2LDQyOTE2XSxbNDI5MTgsNDI5MThdLFs0MjkyMCw0MjkyMF0sWzQyOTIyLDQyOTI2XSxbNDI5MjgsNDI5MzJdLFs0MjkzNCw0MjkzNF0sWzY1MzEzLDY1MzM4XV0sUGQ6W1s0NSw0NV0sWzE0MTgsMTQxOF0sWzE0NzAsMTQ3MF0sWzUxMjAsNTEyMF0sWzYxNTAsNjE1MF0sWzgyMDgsODIxM10sWzExNzk5LDExNzk5XSxbMTE4MDIsMTE4MDJdLFsxMTgzNCwxMTgzNV0sWzExODQwLDExODQwXSxbMTIzMTYsMTIzMTZdLFsxMjMzNiwxMjMzNl0sWzEyNDQ4LDEyNDQ4XSxbNjUwNzMsNjUwNzRdLFs2NTExMiw2NTExMl0sWzY1MTIzLDY1MTIzXSxbNjUyOTMsNjUyOTNdXSxDZjpbWzE3MywxNzNdLFsxNTM2LDE1NDFdLFsxNTY0LDE1NjRdLFsxNzU3LDE3NTddLFsxODA3LDE4MDddLFsyMjc0LDIyNzRdLFs2MTU4LDYxNThdLFs4MjAzLDgyMDddLFs4MjM0LDgyMzhdLFs4Mjg4LDgyOTJdLFs4Mjk0LDgzMDNdLFs2NTI3OSw2NTI3OV0sWzY1NTI5LDY1NTMxXV0sTmQ6W1s0OCw1N10sWzE2MzIsMTY0MV0sWzE3NzYsMTc4NV0sWzE5ODQsMTk5M10sWzI0MDYsMjQxNV0sWzI1MzQsMjU0M10sWzI2NjIsMjY3MV0sWzI3OTAsMjc5OV0sWzI5MTgsMjkyN10sWzMwNDYsMzA1NV0sWzMxNzQsMzE4M10sWzMzMDIsMzMxMV0sWzM0MzAsMzQzOV0sWzM1NTgsMzU2N10sWzM2NjQsMzY3M10sWzM3OTIsMzgwMV0sWzM4NzIsMzg4MV0sWzQxNjAsNDE2OV0sWzQyNDAsNDI0OV0sWzYxMTIsNjEyMV0sWzYxNjAsNjE2OV0sWzY0NzAsNjQ3OV0sWzY2MDgsNjYxN10sWzY3ODQsNjc5M10sWzY4MDAsNjgwOV0sWzY5OTIsNzAwMV0sWzcwODgsNzA5N10sWzcyMzIsNzI0MV0sWzcyNDgsNzI1N10sWzQyNTI4LDQyNTM3XSxbNDMyMTYsNDMyMjVdLFs0MzI2NCw0MzI3M10sWzQzNDcyLDQzNDgxXSxbNDM1MDQsNDM1MTNdLFs0MzYwMCw0MzYwOV0sWzQ0MDE2LDQ0MDI1XSxbNjUyOTYsNjUzMDVdXSxMbDpbWzk3LDEyMl0sWzE4MSwxODFdLFsyMjMsMjQ2XSxbMjQ4LDI1NV0sWzI1NywyNTddLFsyNTksMjU5XSxbMjYxLDI2MV0sWzI2MywyNjNdLFsyNjUsMjY1XSxbMjY3LDI2N10sWzI2OSwyNjldLFsyNzEsMjcxXSxbMjczLDI3M10sWzI3NSwyNzVdLFsyNzcsMjc3XSxbMjc5LDI3OV0sWzI4MSwyODFdLFsyODMsMjgzXSxbMjg1LDI4NV0sWzI4NywyODddLFsyODksMjg5XSxbMjkxLDI5MV0sWzI5MywyOTNdLFsyOTUsMjk1XSxbMjk3LDI5N10sWzI5OSwyOTldLFszMDEsMzAxXSxbMzAzLDMwM10sWzMwNSwzMDVdLFszMDcsMzA3XSxbMzA5LDMwOV0sWzMxMSwzMTJdLFszMTQsMzE0XSxbMzE2LDMxNl0sWzMxOCwzMThdLFszMjAsMzIwXSxbMzIyLDMyMl0sWzMyNCwzMjRdLFszMjYsMzI2XSxbMzI4LDMyOV0sWzMzMSwzMzFdLFszMzMsMzMzXSxbMzM1LDMzNV0sWzMzNywzMzddLFszMzksMzM5XSxbMzQxLDM0MV0sWzM0MywzNDNdLFszNDUsMzQ1XSxbMzQ3LDM0N10sWzM0OSwzNDldLFszNTEsMzUxXSxbMzUzLDM1M10sWzM1NSwzNTVdLFszNTcsMzU3XSxbMzU5LDM1OV0sWzM2MSwzNjFdLFszNjMsMzYzXSxbMzY1LDM2NV0sWzM2NywzNjddLFszNjksMzY5XSxbMzcxLDM3MV0sWzM3MywzNzNdLFszNzUsMzc1XSxbMzc4LDM3OF0sWzM4MCwzODBdLFszODIsMzg0XSxbMzg3LDM4N10sWzM4OSwzODldLFszOTIsMzkyXSxbMzk2LDM5N10sWzQwMiw0MDJdLFs0MDUsNDA1XSxbNDA5LDQxMV0sWzQxNCw0MTRdLFs0MTcsNDE3XSxbNDE5LDQxOV0sWzQyMSw0MjFdLFs0MjQsNDI0XSxbNDI2LDQyN10sWzQyOSw0MjldLFs0MzIsNDMyXSxbNDM2LDQzNl0sWzQzOCw0MzhdLFs0NDEsNDQyXSxbNDQ1LDQ0N10sWzQ1NCw0NTRdLFs0NTcsNDU3XSxbNDYwLDQ2MF0sWzQ2Miw0NjJdLFs0NjQsNDY0XSxbNDY2LDQ2Nl0sWzQ2OCw0NjhdLFs0NzAsNDcwXSxbNDcyLDQ3Ml0sWzQ3NCw0NzRdLFs0NzYsNDc3XSxbNDc5LDQ3OV0sWzQ4MSw0ODFdLFs0ODMsNDgzXSxbNDg1LDQ4NV0sWzQ4Nyw0ODddLFs0ODksNDg5XSxbNDkxLDQ5MV0sWzQ5Myw0OTNdLFs0OTUsNDk2XSxbNDk5LDQ5OV0sWzUwMSw1MDFdLFs1MDUsNTA1XSxbNTA3LDUwN10sWzUwOSw1MDldLFs1MTEsNTExXSxbNTEzLDUxM10sWzUxNSw1MTVdLFs1MTcsNTE3XSxbNTE5LDUxOV0sWzUyMSw1MjFdLFs1MjMsNTIzXSxbNTI1LDUyNV0sWzUyNyw1MjddLFs1MjksNTI5XSxbNTMxLDUzMV0sWzUzMyw1MzNdLFs1MzUsNTM1XSxbNTM3LDUzN10sWzUzOSw1MzldLFs1NDEsNTQxXSxbNTQzLDU0M10sWzU0NSw1NDVdLFs1NDcsNTQ3XSxbNTQ5LDU0OV0sWzU1MSw1NTFdLFs1NTMsNTUzXSxbNTU1LDU1NV0sWzU1Nyw1NTddLFs1NTksNTU5XSxbNTYxLDU2MV0sWzU2Myw1NjldLFs1NzIsNTcyXSxbNTc1LDU3Nl0sWzU3OCw1NzhdLFs1ODMsNTgzXSxbNTg1LDU4NV0sWzU4Nyw1ODddLFs1ODksNTg5XSxbNTkxLDY1OV0sWzY2MSw2ODddLFs4ODEsODgxXSxbODgzLDg4M10sWzg4Nyw4ODddLFs4OTEsODkzXSxbOTEyLDkxMl0sWzk0MCw5NzRdLFs5NzYsOTc3XSxbOTgxLDk4M10sWzk4NSw5ODVdLFs5ODcsOTg3XSxbOTg5LDk4OV0sWzk5MSw5OTFdLFs5OTMsOTkzXSxbOTk1LDk5NV0sWzk5Nyw5OTddLFs5OTksOTk5XSxbMTAwMSwxMDAxXSxbMTAwMywxMDAzXSxbMTAwNSwxMDA1XSxbMTAwNywxMDExXSxbMTAxMywxMDEzXSxbMTAxNiwxMDE2XSxbMTAxOSwxMDIwXSxbMTA3MiwxMTE5XSxbMTEyMSwxMTIxXSxbMTEyMywxMTIzXSxbMTEyNSwxMTI1XSxbMTEyNywxMTI3XSxbMTEyOSwxMTI5XSxbMTEzMSwxMTMxXSxbMTEzMywxMTMzXSxbMTEzNSwxMTM1XSxbMTEzNywxMTM3XSxbMTEzOSwxMTM5XSxbMTE0MSwxMTQxXSxbMTE0MywxMTQzXSxbMTE0NSwxMTQ1XSxbMTE0NywxMTQ3XSxbMTE0OSwxMTQ5XSxbMTE1MSwxMTUxXSxbMTE1MywxMTUzXSxbMTE2MywxMTYzXSxbMTE2NSwxMTY1XSxbMTE2NywxMTY3XSxbMTE2OSwxMTY5XSxbMTE3MSwxMTcxXSxbMTE3MywxMTczXSxbMTE3NSwxMTc1XSxbMTE3NywxMTc3XSxbMTE3OSwxMTc5XSxbMTE4MSwxMTgxXSxbMTE4MywxMTgzXSxbMTE4NSwxMTg1XSxbMTE4NywxMTg3XSxbMTE4OSwxMTg5XSxbMTE5MSwxMTkxXSxbMTE5MywxMTkzXSxbMTE5NSwxMTk1XSxbMTE5NywxMTk3XSxbMTE5OSwxMTk5XSxbMTIwMSwxMjAxXSxbMTIwMywxMjAzXSxbMTIwNSwxMjA1XSxbMTIwNywxMjA3XSxbMTIwOSwxMjA5XSxbMTIxMSwxMjExXSxbMTIxMywxMjEzXSxbMTIxNSwxMjE1XSxbMTIxOCwxMjE4XSxbMTIyMCwxMjIwXSxbMTIyMiwxMjIyXSxbMTIyNCwxMjI0XSxbMTIyNiwxMjI2XSxbMTIyOCwxMjI4XSxbMTIzMCwxMjMxXSxbMTIzMywxMjMzXSxbMTIzNSwxMjM1XSxbMTIzNywxMjM3XSxbMTIzOSwxMjM5XSxbMTI0MSwxMjQxXSxbMTI0MywxMjQzXSxbMTI0NSwxMjQ1XSxbMTI0NywxMjQ3XSxbMTI0OSwxMjQ5XSxbMTI1MSwxMjUxXSxbMTI1MywxMjUzXSxbMTI1NSwxMjU1XSxbMTI1NywxMjU3XSxbMTI1OSwxMjU5XSxbMTI2MSwxMjYxXSxbMTI2MywxMjYzXSxbMTI2NSwxMjY1XSxbMTI2NywxMjY3XSxbMTI2OSwxMjY5XSxbMTI3MSwxMjcxXSxbMTI3MywxMjczXSxbMTI3NSwxMjc1XSxbMTI3NywxMjc3XSxbMTI3OSwxMjc5XSxbMTI4MSwxMjgxXSxbMTI4MywxMjgzXSxbMTI4NSwxMjg1XSxbMTI4NywxMjg3XSxbMTI4OSwxMjg5XSxbMTI5MSwxMjkxXSxbMTI5MywxMjkzXSxbMTI5NSwxMjk1XSxbMTI5NywxMjk3XSxbMTI5OSwxMjk5XSxbMTMwMSwxMzAxXSxbMTMwMywxMzAzXSxbMTMwNSwxMzA1XSxbMTMwNywxMzA3XSxbMTMwOSwxMzA5XSxbMTMxMSwxMzExXSxbMTMxMywxMzEzXSxbMTMxNSwxMzE1XSxbMTMxNywxMzE3XSxbMTMxOSwxMzE5XSxbMTMyMSwxMzIxXSxbMTMyMywxMzIzXSxbMTMyNSwxMzI1XSxbMTMyNywxMzI3XSxbMTM3NywxNDE1XSxbNTExMiw1MTE3XSxbNzI5Niw3MzA0XSxbNzQyNCw3NDY3XSxbNzUzMSw3NTQzXSxbNzU0NSw3NTc4XSxbNzY4MSw3NjgxXSxbNzY4Myw3NjgzXSxbNzY4NSw3Njg1XSxbNzY4Nyw3Njg3XSxbNzY4OSw3Njg5XSxbNzY5MSw3NjkxXSxbNzY5Myw3NjkzXSxbNzY5NSw3Njk1XSxbNzY5Nyw3Njk3XSxbNzY5OSw3Njk5XSxbNzcwMSw3NzAxXSxbNzcwMyw3NzAzXSxbNzcwNSw3NzA1XSxbNzcwNyw3NzA3XSxbNzcwOSw3NzA5XSxbNzcxMSw3NzExXSxbNzcxMyw3NzEzXSxbNzcxNSw3NzE1XSxbNzcxNyw3NzE3XSxbNzcxOSw3NzE5XSxbNzcyMSw3NzIxXSxbNzcyMyw3NzIzXSxbNzcyNSw3NzI1XSxbNzcyNyw3NzI3XSxbNzcyOSw3NzI5XSxbNzczMSw3NzMxXSxbNzczMyw3NzMzXSxbNzczNSw3NzM1XSxbNzczNyw3NzM3XSxbNzczOSw3NzM5XSxbNzc0MSw3NzQxXSxbNzc0Myw3NzQzXSxbNzc0NSw3NzQ1XSxbNzc0Nyw3NzQ3XSxbNzc0OSw3NzQ5XSxbNzc1MSw3NzUxXSxbNzc1Myw3NzUzXSxbNzc1NSw3NzU1XSxbNzc1Nyw3NzU3XSxbNzc1OSw3NzU5XSxbNzc2MSw3NzYxXSxbNzc2Myw3NzYzXSxbNzc2NSw3NzY1XSxbNzc2Nyw3NzY3XSxbNzc2OSw3NzY5XSxbNzc3MSw3NzcxXSxbNzc3Myw3NzczXSxbNzc3NSw3Nzc1XSxbNzc3Nyw3Nzc3XSxbNzc3OSw3Nzc5XSxbNzc4MSw3NzgxXSxbNzc4Myw3NzgzXSxbNzc4NSw3Nzg1XSxbNzc4Nyw3Nzg3XSxbNzc4OSw3Nzg5XSxbNzc5MSw3NzkxXSxbNzc5Myw3NzkzXSxbNzc5NSw3Nzk1XSxbNzc5Nyw3Nzk3XSxbNzc5OSw3Nzk5XSxbNzgwMSw3ODAxXSxbNzgwMyw3ODAzXSxbNzgwNSw3ODA1XSxbNzgwNyw3ODA3XSxbNzgwOSw3ODA5XSxbNzgxMSw3ODExXSxbNzgxMyw3ODEzXSxbNzgxNSw3ODE1XSxbNzgxNyw3ODE3XSxbNzgxOSw3ODE5XSxbNzgyMSw3ODIxXSxbNzgyMyw3ODIzXSxbNzgyNSw3ODI1XSxbNzgyNyw3ODI3XSxbNzgyOSw3ODM3XSxbNzgzOSw3ODM5XSxbNzg0MSw3ODQxXSxbNzg0Myw3ODQzXSxbNzg0NSw3ODQ1XSxbNzg0Nyw3ODQ3XSxbNzg0OSw3ODQ5XSxbNzg1MSw3ODUxXSxbNzg1Myw3ODUzXSxbNzg1NSw3ODU1XSxbNzg1Nyw3ODU3XSxbNzg1OSw3ODU5XSxbNzg2MSw3ODYxXSxbNzg2Myw3ODYzXSxbNzg2NSw3ODY1XSxbNzg2Nyw3ODY3XSxbNzg2OSw3ODY5XSxbNzg3MSw3ODcxXSxbNzg3Myw3ODczXSxbNzg3NSw3ODc1XSxbNzg3Nyw3ODc3XSxbNzg3OSw3ODc5XSxbNzg4MSw3ODgxXSxbNzg4Myw3ODgzXSxbNzg4NSw3ODg1XSxbNzg4Nyw3ODg3XSxbNzg4OSw3ODg5XSxbNzg5MSw3ODkxXSxbNzg5Myw3ODkzXSxbNzg5NSw3ODk1XSxbNzg5Nyw3ODk3XSxbNzg5OSw3ODk5XSxbNzkwMSw3OTAxXSxbNzkwMyw3OTAzXSxbNzkwNSw3OTA1XSxbNzkwNyw3OTA3XSxbNzkwOSw3OTA5XSxbNzkxMSw3OTExXSxbNzkxMyw3OTEzXSxbNzkxNSw3OTE1XSxbNzkxNyw3OTE3XSxbNzkxOSw3OTE5XSxbNzkyMSw3OTIxXSxbNzkyMyw3OTIzXSxbNzkyNSw3OTI1XSxbNzkyNyw3OTI3XSxbNzkyOSw3OTI5XSxbNzkzMSw3OTMxXSxbNzkzMyw3OTMzXSxbNzkzNSw3OTQzXSxbNzk1Miw3OTU3XSxbNzk2OCw3OTc1XSxbNzk4NCw3OTkxXSxbOGUzLDgwMDVdLFs4MDE2LDgwMjNdLFs4MDMyLDgwMzldLFs4MDQ4LDgwNjFdLFs4MDY0LDgwNzFdLFs4MDgwLDgwODddLFs4MDk2LDgxMDNdLFs4MTEyLDgxMTZdLFs4MTE4LDgxMTldLFs4MTI2LDgxMjZdLFs4MTMwLDgxMzJdLFs4MTM0LDgxMzVdLFs4MTQ0LDgxNDddLFs4MTUwLDgxNTFdLFs4MTYwLDgxNjddLFs4MTc4LDgxODBdLFs4MTgyLDgxODNdLFs4NDU4LDg0NThdLFs4NDYyLDg0NjNdLFs4NDY3LDg0NjddLFs4NDk1LDg0OTVdLFs4NTAwLDg1MDBdLFs4NTA1LDg1MDVdLFs4NTA4LDg1MDldLFs4NTE4LDg1MjFdLFs4NTI2LDg1MjZdLFs4NTgwLDg1ODBdLFsxMTMxMiwxMTM1OF0sWzExMzYxLDExMzYxXSxbMTEzNjUsMTEzNjZdLFsxMTM2OCwxMTM2OF0sWzExMzcwLDExMzcwXSxbMTEzNzIsMTEzNzJdLFsxMTM3NywxMTM3N10sWzExMzc5LDExMzgwXSxbMTEzODIsMTEzODddLFsxMTM5MywxMTM5M10sWzExMzk1LDExMzk1XSxbMTEzOTcsMTEzOTddLFsxMTM5OSwxMTM5OV0sWzExNDAxLDExNDAxXSxbMTE0MDMsMTE0MDNdLFsxMTQwNSwxMTQwNV0sWzExNDA3LDExNDA3XSxbMTE0MDksMTE0MDldLFsxMTQxMSwxMTQxMV0sWzExNDEzLDExNDEzXSxbMTE0MTUsMTE0MTVdLFsxMTQxNywxMTQxN10sWzExNDE5LDExNDE5XSxbMTE0MjEsMTE0MjFdLFsxMTQyMywxMTQyM10sWzExNDI1LDExNDI1XSxbMTE0MjcsMTE0MjddLFsxMTQyOSwxMTQyOV0sWzExNDMxLDExNDMxXSxbMTE0MzMsMTE0MzNdLFsxMTQzNSwxMTQzNV0sWzExNDM3LDExNDM3XSxbMTE0MzksMTE0MzldLFsxMTQ0MSwxMTQ0MV0sWzExNDQzLDExNDQzXSxbMTE0NDUsMTE0NDVdLFsxMTQ0NywxMTQ0N10sWzExNDQ5LDExNDQ5XSxbMTE0NTEsMTE0NTFdLFsxMTQ1MywxMTQ1M10sWzExNDU1LDExNDU1XSxbMTE0NTcsMTE0NTddLFsxMTQ1OSwxMTQ1OV0sWzExNDYxLDExNDYxXSxbMTE0NjMsMTE0NjNdLFsxMTQ2NSwxMTQ2NV0sWzExNDY3LDExNDY3XSxbMTE0NjksMTE0NjldLFsxMTQ3MSwxMTQ3MV0sWzExNDczLDExNDczXSxbMTE0NzUsMTE0NzVdLFsxMTQ3NywxMTQ3N10sWzExNDc5LDExNDc5XSxbMTE0ODEsMTE0ODFdLFsxMTQ4MywxMTQ4M10sWzExNDg1LDExNDg1XSxbMTE0ODcsMTE0ODddLFsxMTQ4OSwxMTQ4OV0sWzExNDkxLDExNDkyXSxbMTE1MDAsMTE1MDBdLFsxMTUwMiwxMTUwMl0sWzExNTA3LDExNTA3XSxbMTE1MjAsMTE1NTddLFsxMTU1OSwxMTU1OV0sWzExNTY1LDExNTY1XSxbNDI1NjEsNDI1NjFdLFs0MjU2Myw0MjU2M10sWzQyNTY1LDQyNTY1XSxbNDI1NjcsNDI1NjddLFs0MjU2OSw0MjU2OV0sWzQyNTcxLDQyNTcxXSxbNDI1NzMsNDI1NzNdLFs0MjU3NSw0MjU3NV0sWzQyNTc3LDQyNTc3XSxbNDI1NzksNDI1NzldLFs0MjU4MSw0MjU4MV0sWzQyNTgzLDQyNTgzXSxbNDI1ODUsNDI1ODVdLFs0MjU4Nyw0MjU4N10sWzQyNTg5LDQyNTg5XSxbNDI1OTEsNDI1OTFdLFs0MjU5Myw0MjU5M10sWzQyNTk1LDQyNTk1XSxbNDI1OTcsNDI1OTddLFs0MjU5OSw0MjU5OV0sWzQyNjAxLDQyNjAxXSxbNDI2MDMsNDI2MDNdLFs0MjYwNSw0MjYwNV0sWzQyNjI1LDQyNjI1XSxbNDI2MjcsNDI2MjddLFs0MjYyOSw0MjYyOV0sWzQyNjMxLDQyNjMxXSxbNDI2MzMsNDI2MzNdLFs0MjYzNSw0MjYzNV0sWzQyNjM3LDQyNjM3XSxbNDI2MzksNDI2MzldLFs0MjY0MSw0MjY0MV0sWzQyNjQzLDQyNjQzXSxbNDI2NDUsNDI2NDVdLFs0MjY0Nyw0MjY0N10sWzQyNjQ5LDQyNjQ5XSxbNDI2NTEsNDI2NTFdLFs0Mjc4Nyw0Mjc4N10sWzQyNzg5LDQyNzg5XSxbNDI3OTEsNDI3OTFdLFs0Mjc5Myw0Mjc5M10sWzQyNzk1LDQyNzk1XSxbNDI3OTcsNDI3OTddLFs0Mjc5OSw0MjgwMV0sWzQyODAzLDQyODAzXSxbNDI4MDUsNDI4MDVdLFs0MjgwNyw0MjgwN10sWzQyODA5LDQyODA5XSxbNDI4MTEsNDI4MTFdLFs0MjgxMyw0MjgxM10sWzQyODE1LDQyODE1XSxbNDI4MTcsNDI4MTddLFs0MjgxOSw0MjgxOV0sWzQyODIxLDQyODIxXSxbNDI4MjMsNDI4MjNdLFs0MjgyNSw0MjgyNV0sWzQyODI3LDQyODI3XSxbNDI4MjksNDI4MjldLFs0MjgzMSw0MjgzMV0sWzQyODMzLDQyODMzXSxbNDI4MzUsNDI4MzVdLFs0MjgzNyw0MjgzN10sWzQyODM5LDQyODM5XSxbNDI4NDEsNDI4NDFdLFs0Mjg0Myw0Mjg0M10sWzQyODQ1LDQyODQ1XSxbNDI4NDcsNDI4NDddLFs0Mjg0OSw0Mjg0OV0sWzQyODUxLDQyODUxXSxbNDI4NTMsNDI4NTNdLFs0Mjg1NSw0Mjg1NV0sWzQyODU3LDQyODU3XSxbNDI4NTksNDI4NTldLFs0Mjg2MSw0Mjg2MV0sWzQyODYzLDQyODYzXSxbNDI4NjUsNDI4NzJdLFs0Mjg3NCw0Mjg3NF0sWzQyODc2LDQyODc2XSxbNDI4NzksNDI4NzldLFs0Mjg4MSw0Mjg4MV0sWzQyODgzLDQyODgzXSxbNDI4ODUsNDI4ODVdLFs0Mjg4Nyw0Mjg4N10sWzQyODkyLDQyODkyXSxbNDI4OTQsNDI4OTRdLFs0Mjg5Nyw0Mjg5N10sWzQyODk5LDQyOTAxXSxbNDI5MDMsNDI5MDNdLFs0MjkwNSw0MjkwNV0sWzQyOTA3LDQyOTA3XSxbNDI5MDksNDI5MDldLFs0MjkxMSw0MjkxMV0sWzQyOTEzLDQyOTEzXSxbNDI5MTUsNDI5MTVdLFs0MjkxNyw0MjkxN10sWzQyOTE5LDQyOTE5XSxbNDI5MjEsNDI5MjFdLFs0MjkzMyw0MjkzM10sWzQyOTM1LDQyOTM1XSxbNDMwMDIsNDMwMDJdLFs0MzgyNCw0Mzg2Nl0sWzQzODcyLDQzODc3XSxbNDM4ODgsNDM5NjddLFs2NDI1Niw2NDI2Ml0sWzY0Mjc1LDY0Mjc5XSxbNjUzNDUsNjUzNzBdXSxObzpbWzE3OCwxNzldLFsxODUsMTg1XSxbMTg4LDE5MF0sWzI1NDgsMjU1M10sWzI5MzAsMjkzNV0sWzMwNTYsMzA1OF0sWzMxOTIsMzE5OF0sWzM0MTYsMzQyMl0sWzM0NDAsMzQ0OF0sWzM4ODIsMzg5MV0sWzQ5NjksNDk4OF0sWzYxMjgsNjEzN10sWzY2MTgsNjYxOF0sWzgzMDQsODMwNF0sWzgzMDgsODMxM10sWzgzMjAsODMyOV0sWzg1MjgsODU0M10sWzg1ODUsODU4NV0sWzkzMTIsOTM3MV0sWzk0NTAsOTQ3MV0sWzEwMTAyLDEwMTMxXSxbMTE1MTcsMTE1MTddLFsxMjY5MCwxMjY5M10sWzEyODMyLDEyODQxXSxbMTI4NzIsMTI4NzldLFsxMjg4MSwxMjg5NV0sWzEyOTI4LDEyOTM3XSxbMTI5NzcsMTI5OTFdLFs0MzA1Niw0MzA2MV1dLFpzOltbMzIsMzJdLFsxNjAsMTYwXSxbNTc2MCw1NzYwXSxbODE5Miw4MjAyXSxbODIzOSw4MjM5XSxbODI4Nyw4Mjg3XSxbMTIyODgsMTIyODhdXX19fSk7dW53cmFwRXhwb3J0cyhkYXRhX2dlbmVyYXRlZCk7dmFyIHV0aWxzJDI9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBlLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVswXS10WzBdfSkucmVkdWNlKGZ1bmN0aW9uKGUsdCxuKXtpZigwPT09bilyZXR1cm5bdF07dmFyIHI9ZVtlLmxlbmd0aC0xXSxpPXJbMF0sbz1yWzFdLGE9dFswXSxzPXRbMV07cmV0dXJuIG8rMT09PWE/ZS5zbGljZSgwLC0xKS5jb25jYXQoW1tpLHNdXSk6ZS5jb25jYXQoW3RdKX0sW10pfWZ1bmN0aW9uIHIoZSx0KXt2YXIgbj1lLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXTtyZXR1cm4gdD09PW4/IlxcdSIraSh0KToiXFx1IitpKHQpKyItXFx1IitpKG4pfSkuam9pbigiIik7cmV0dXJuIG5ldyBSZWdFeHAoIlsiK24rIl0iLHQpfWZ1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PWUudG9TdHJpbmcoMTYpO3QubGVuZ3RoPDQ7KXQ9IjAiK3Q7cmV0dXJuIHR9dC5fX2VzTW9kdWxlPSEwLHQubm9ybWFsaXplX3Jhbmdlcz1uLHQuYnVpbGRfcmVnZXg9cn0pO3Vud3JhcEV4cG9ydHModXRpbHMkMik7dmFyIGxpYiQ1PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZGF0YV9nZW5lcmF0ZWQuZ2V0X2RhdGEoKSxyPWUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KG5bdF0pfSxbXSk7cmV0dXJuIHV0aWxzJDIuYnVpbGRfcmVnZXgodXRpbHMkMi5ub3JtYWxpemVfcmFuZ2VzKHIpLHQpfSxlbW9qaVJlZ2V4PWVtb2ppUmVnZXgkMSgpLGNqa1BhdHRlcm49bGliJDMoKS5zb3VyY2UsYXNjaWlQdW5jdHVhdGlvbkNoYXJSYW5nZT1lc2NhcGVTdHJpbmdSZWdleHAoIiFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX4iKSxwdW5jdHVhdGlvbkNoYXJSYW5nZT0iIi5jb25jYXQoYXNjaWlQdW5jdHVhdGlvbkNoYXJSYW5nZSkuY29uY2F0KGxpYiQ1KFsiUGMiLCJQZCIsIlBlIiwiUGYiLCJQaSIsIlBvIiwiUHMiXSkuc291cmNlLnNsaWNlKDEsLTEpKSxwdW5jdHVhdGlvblJlZ2V4PW5ldyBSZWdFeHAoIlsiLmNvbmNhdChwdW5jdHVhdGlvbkNoYXJSYW5nZSwiXSIpKSxza2lwV2hpdGVzcGFjZT1za2lwKC9ccy8pLHNraXBTcGFjZXM9c2tpcCgiIFx0Iiksc2tpcFRvTGluZUVuZD1za2lwKCIsOyBcdCIpLHNraXBFdmVyeXRoaW5nQnV0TmV3TGluZT1za2lwKC9bXlxyXG5dLyksUFJFQ0VERU5DRT17fTtbWyJ8PiJdLFsifHwiLCI/PyJdLFsiJiYiXSxbInwiXSxbIl4iXSxbIiYiXSxbIj09IiwiPT09IiwiIT0iLCIhPT0iXSxbIjwiLCI+IiwiPD0iLCI+PSIsImluIiwiaW5zdGFuY2VvZiJdLFsiPj4iLCI8PCIsIj4+PiJdLFsiKyIsIi0iXSxbIioiLCIvIiwiJSJdLFsiKioiXV0uZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtQUkVDRURFTkNFW2VdPXR9KX0pO3ZhciBlcXVhbGl0eU9wZXJhdG9ycz17Ij09IjohMCwiIT0iOiEwLCI9PT0iOiEwLCIhPT0iOiEwfSxhZGRpdGl2ZU9wZXJhdG9ycz17IisiOiEwLCItIjohMH0sbXVsdGlwbGljYXRpdmVPcGVyYXRvcnM9eyIqIjohMCwiLyI6ITAsIiUiOiEwfSxiaXRzaGlmdE9wZXJhdG9ycz17Ij4+IjohMCwiPj4+IjohMCwiPDwiOiEwfSx1dGlsPXtwdW5jdHVhdGlvblJlZ2V4OnB1bmN0dWF0aW9uUmVnZXgscHVuY3R1YXRpb25DaGFyUmFuZ2U6cHVuY3R1YXRpb25DaGFyUmFuZ2UsZ2V0U3RyaW5nV2lkdGg6Z2V0U3RyaW5nV2lkdGgsc3BsaXRUZXh0OnNwbGl0VGV4dCxnZXRNYXhDb250aW51b3VzQ291bnQ6Z2V0TWF4Q29udGludW91c0NvdW50LGdldFByZWNlZGVuY2U6Z2V0UHJlY2VkZW5jZSxzaG91bGRGbGF0dGVuOnNob3VsZEZsYXR0ZW4saXNCaXR3aXNlT3BlcmF0b3I6aXNCaXR3aXNlT3BlcmF0b3IsaXNFeHBvcnREZWNsYXJhdGlvbjppc0V4cG9ydERlY2xhcmF0aW9uLGdldFBhcmVudEV4cG9ydERlY2xhcmF0aW9uOmdldFBhcmVudEV4cG9ydERlY2xhcmF0aW9uLGdldFBlbnVsdGltYXRlOmdldFBlbnVsdGltYXRlLGdldExhc3Q6Z2V0TGFzdCQzLGdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXJJbmRleDpnZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVySW5kZXgsZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlcjpnZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVyLHNraXBXaGl0ZXNwYWNlOnNraXBXaGl0ZXNwYWNlLHNraXBTcGFjZXM6c2tpcFNwYWNlcyxza2lwTmV3bGluZTpza2lwTmV3bGluZSQxLGlzTmV4dExpbmVFbXB0eUFmdGVySW5kZXg6aXNOZXh0TGluZUVtcHR5QWZ0ZXJJbmRleCxpc05leHRMaW5lRW1wdHk6aXNOZXh0TGluZUVtcHR5LGlzUHJldmlvdXNMaW5lRW1wdHk6aXNQcmV2aW91c0xpbmVFbXB0eSQxLGhhc05ld2xpbmU6aGFzTmV3bGluZSQxLGhhc05ld2xpbmVJblJhbmdlOmhhc05ld2xpbmVJblJhbmdlLGhhc1NwYWNlczpoYXNTcGFjZXMsc2V0TG9jU3RhcnQ6c2V0TG9jU3RhcnQsc2V0TG9jRW5kOnNldExvY0VuZCxzdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbjpzdGFydHNXaXRoTm9Mb29rYWhlYWRUb2tlbixnZXRBbGlnbm1lbnRTaXplOmdldEFsaWdubWVudFNpemUsZ2V0SW5kZW50U2l6ZTpnZXRJbmRlbnRTaXplLHByaW50U3RyaW5nOnByaW50U3RyaW5nLHByaW50TnVtYmVyOnByaW50TnVtYmVyLGhhc0lnbm9yZUNvbW1lbnQ6aGFzSWdub3JlQ29tbWVudCxoYXNOb2RlSWdub3JlQ29tbWVudDpoYXNOb2RlSWdub3JlQ29tbWVudCxtYWtlU3RyaW5nOm1ha2VTdHJpbmcsYWRkTGVhZGluZ0NvbW1lbnQ6YWRkTGVhZGluZ0NvbW1lbnQkMSxhZGREYW5nbGluZ0NvbW1lbnQ6YWRkRGFuZ2xpbmdDb21tZW50JDEsYWRkVHJhaWxpbmdDb21tZW50OmFkZFRyYWlsaW5nQ29tbWVudCQxfSxjb25jYXQkMj1kb2NCdWlsZGVycy5jb25jYXQsZmlsbCQxPWRvY0J1aWxkZXJzLmZpbGwsY3Vyc29yJDI9ZG9jQnVpbGRlcnMuY3Vyc29yLE1PREVfQlJFQUs9MSxNT0RFX0ZMQVQ9Mixkb2NQcmludGVyPXtwcmludERvY1RvU3RyaW5nOnByaW50RG9jVG9TdHJpbmd9LGRvY1V0aWxzPXtpc0VtcHR5OmlzRW1wdHksd2lsbEJyZWFrOndpbGxCcmVhayxpc0xpbmVOZXh0OmlzTGluZU5leHQsdHJhdmVyc2VEb2M6dHJhdmVyc2VEb2MsbWFwRG9jOm1hcERvYyxwcm9wYWdhdGVCcmVha3M6cHJvcGFnYXRlQnJlYWtzLHJlbW92ZUxpbmVzOnJlbW92ZUxpbmVzLHN0cmlwVHJhaWxpbmdIYXJkbGluZTpzdHJpcFRyYWlsaW5nSGFyZGxpbmV9LGRvY0RlYnVnPXtwcmludERvY1RvRGVidWc6ZnVuY3Rpb24oZSl7cmV0dXJuIHByaW50RG9jKGZsYXR0ZW5Eb2MoZSkpfX0sZG9jPXtidWlsZGVyczpkb2NCdWlsZGVycyxwcmludGVyOmRvY1ByaW50ZXIsdXRpbHM6ZG9jVXRpbHMsZGVidWc6ZG9jRGVidWd9LG1hcERvYyQxPWRvYy51dGlscy5tYXBEb2MsdXRpbFNoYXJlZD17aXNOZXh0TGluZUVtcHR5OmlzTmV4dExpbmVFbXB0eSQxLGlzTmV4dExpbmVFbXB0eUFmdGVySW5kZXg6dXRpbC5pc05leHRMaW5lRW1wdHlBZnRlckluZGV4LGdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXJJbmRleDpnZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVySW5kZXgkMSxtYXBEb2M6bWFwRG9jJDEsbWFrZVN0cmluZzp1dGlsLm1ha2VTdHJpbmcsYWRkTGVhZGluZ0NvbW1lbnQ6dXRpbC5hZGRMZWFkaW5nQ29tbWVudCxhZGREYW5nbGluZ0NvbW1lbnQ6dXRpbC5hZGREYW5nbGluZ0NvbW1lbnQsYWRkVHJhaWxpbmdDb21tZW50OnV0aWwuYWRkVHJhaWxpbmdDb21tZW50fSxfcmVxdWlyZSQkMCRidWlsZGVycz1kb2MuYnVpbGRlcnMsY29uY2F0PV9yZXF1aXJlJCQwJGJ1aWxkZXJzLmNvbmNhdCxoYXJkbGluZT1fcmVxdWlyZSQkMCRidWlsZGVycy5oYXJkbGluZSxicmVha1BhcmVudD1fcmVxdWlyZSQkMCRidWlsZGVycy5icmVha1BhcmVudCxpbmRlbnQ9X3JlcXVpcmUkJDAkYnVpbGRlcnMuaW5kZW50LGxpbmVTdWZmaXg9X3JlcXVpcmUkJDAkYnVpbGRlcnMubGluZVN1ZmZpeCxqb2luPV9yZXF1aXJlJCQwJGJ1aWxkZXJzLmpvaW4sY3Vyc29yPV9yZXF1aXJlJCQwJGJ1aWxkZXJzLmN1cnNvcixoYXNOZXdsaW5lPXV0aWwuaGFzTmV3bGluZSxza2lwTmV3bGluZT11dGlsLnNraXBOZXdsaW5lLGlzUHJldmlvdXNMaW5lRW1wdHk9dXRpbC5pc1ByZXZpb3VzTGluZUVtcHR5LGFkZExlYWRpbmdDb21tZW50PXV0aWxTaGFyZWQuYWRkTGVhZGluZ0NvbW1lbnQsYWRkRGFuZ2xpbmdDb21tZW50PXV0aWxTaGFyZWQuYWRkRGFuZ2xpbmdDb21tZW50LGFkZFRyYWlsaW5nQ29tbWVudD11dGlsU2hhcmVkLmFkZFRyYWlsaW5nQ29tbWVudCxjaGlsZE5vZGVzQ2FjaGVLZXk9U3ltYm9sKCJjaGlsZC1ub2RlcyIpLGNvbW1lbnRzPXthdHRhY2g6YXR0YWNoLHByaW50Q29tbWVudHM6cHJpbnRDb21tZW50cyxwcmludERhbmdsaW5nQ29tbWVudHM6cHJpbnREYW5nbGluZ0NvbW1lbnRzLGdldFNvcnRlZENoaWxkTm9kZXM6Z2V0U29ydGVkQ2hpbGROb2Rlc307RmFzdFBhdGgucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YWNrLHQ9ZS5sZW5ndGg7cmV0dXJuIHQ+MT9lW3QtMl06bnVsbH0sRmFzdFBhdGgucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGFjaztyZXR1cm4gZVtlLmxlbmd0aC0xXX0sRmFzdFBhdGgucHJvdG90eXBlLmdldE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdldE5vZGVIZWxwZXIodGhpcyx+fmUpfSxGYXN0UGF0aC5wcm90b3R5cGUuZ2V0UGFyZW50Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZ2V0Tm9kZUhlbHBlcih0aGlzLDErfn5lKX0sRmFzdFBhdGgucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuc3RhY2ssbj10Lmxlbmd0aCxyPXRbbi0xXSxpPWFyZ3VtZW50cy5sZW5ndGgsbz0xO288aTsrK28pe3ZhciBhPWFyZ3VtZW50c1tvXTtyPXJbYV0sdC5wdXNoKGEscil9dmFyIHM9ZSh0aGlzKTtyZXR1cm4gdC5sZW5ndGg9bixzfSxGYXN0UGF0aC5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5zdGFjayxuPXQubGVuZ3RoLHI9dFtuLTFdLGk9YXJndW1lbnRzLmxlbmd0aCxvPTE7bzxpOysrbyl7dmFyIGE9YXJndW1lbnRzW29dO3I9clthXSx0LnB1c2goYSxyKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoOysrcylzIGluIHImJih0LnB1c2gocyxyW3NdKSxlKHRoaXMpLHQubGVuZ3RoLT0yKTt0Lmxlbmd0aD1ufSxGYXN0UGF0aC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnN0YWNrLG49dC5sZW5ndGgscj10W24tMV0saT1hcmd1bWVudHMubGVuZ3RoLG89MTtvPGk7KytvKXt2YXIgYT1hcmd1bWVudHNbb107cj1yW2FdLHQucHVzaChhLHIpfWZvcih2YXIgcz1uZXcgQXJyYXkoci5sZW5ndGgpLHU9MDt1PHIubGVuZ3RoOysrdSl1IGluIHImJih0LnB1c2godSxyW3VdKSxzW3VdPWUodGhpcyx1KSx0Lmxlbmd0aC09Mik7cmV0dXJuIHQubGVuZ3RoPW4sc307dmFyIGZhc3RQYXRoPUZhc3RQYXRoLG5vcm1hbGl6ZSQxPW9wdGlvbnMubm9ybWFsaXplLG11bHRpcGFyc2VyPXtwcmludFN1YnRyZWU6cHJpbnRTdWJ0cmVlfSxkb2MkMj1kb2MsZG9jQnVpbGRlcnMkMj1kb2MkMi5idWlsZGVycyxjb25jYXQkMz1kb2NCdWlsZGVycyQyLmNvbmNhdCxoYXJkbGluZSQyPWRvY0J1aWxkZXJzJDIuaGFyZGxpbmUsYWRkQWxpZ25tZW50VG9Eb2MkMT1kb2NCdWlsZGVycyQyLmFkZEFsaWdubWVudFRvRG9jLGRvY1V0aWxzJDI9ZG9jJDIudXRpbHMsYXN0VG9Eb2M9cHJpbnRBc3RUb0RvYyxyYW5nZVV0aWw9e2NhbGN1bGF0ZVJhbmdlOmNhbGN1bGF0ZVJhbmdlLGZpbmROb2RlQXRPZmZzZXQ6ZmluZE5vZGVBdE9mZnNldH0sbm9ybWFsaXplT3B0aW9ucz1vcHRpb25zLm5vcm1hbGl6ZSxfcHJpbnREb2NUb1N0cmluZz1kb2MucHJpbnRlci5wcmludERvY1RvU3RyaW5nLHByaW50RG9jVG9EZWJ1Zz1kb2MuZGVidWcucHJpbnREb2NUb0RlYnVnLFVURjhCT009NjUyNzksQ1VSU09SPVN5bWJvbCgiY3Vyc29yIiksY29yZT17Zm9ybWF0V2l0aEN1cnNvcjpmdW5jdGlvbihlLHQpe3JldHVybiB0PW5vcm1hbGl6ZU9wdGlvbnModCksZm9ybWF0KGUsbm9ybWFsaXplT3B0aW9ucyh0KSl9LHBhcnNlOmZ1bmN0aW9uKGUsdCxuKXt0PW5vcm1hbGl6ZU9wdGlvbnModCk7dmFyIHI9cGFyc2VyLnBhcnNlKGUsdCk7cmV0dXJuIG4mJihyLmFzdD1tYXNzYWdlQXN0KHIuYXN0LHQpKSxyfSxmb3JtYXRBU1Q6ZnVuY3Rpb24oZSx0KXt0PW5vcm1hbGl6ZU9wdGlvbnModCk7dmFyIG49YXN0VG9Eb2MoZSx0KTtyZXR1cm4gX3ByaW50RG9jVG9TdHJpbmcobix0KX0sZm9ybWF0RG9jOmZ1bmN0aW9uKGUsdCl7dmFyIG49cHJpbnREb2NUb0RlYnVnKGUpO3JldHVybiB0PW5vcm1hbGl6ZU9wdGlvbnMoT2JqZWN0LmFzc2lnbih7fSx0LHtwYXJzZXI6ImJhYnlsb24ifSkpLGZvcm1hdChuLHQpLmZvcm1hdHRlZH0scHJpbnRUb0RvYzpmdW5jdGlvbihlLHQpe3Q9bm9ybWFsaXplT3B0aW9ucyh0KTt2YXIgbj1wYXJzZXIucGFyc2UoZSx0KSxyPW4uYXN0O3JldHVybiBlPW4udGV4dCxhdHRhY2hDb21tZW50cyhlLHIsdCksYXN0VG9Eb2Mocix0KX0scHJpbnREb2NUb1N0cmluZzpmdW5jdGlvbihlLHQpe3JldHVybiBfcHJpbnREb2NUb1N0cmluZyhlLG5vcm1hbGl6ZU9wdGlvbnModCkpfX0sX3JlcXVpcmUkJDAkYnVpbGRlcnMkMT1kb2MuYnVpbGRlcnMsaW5kZW50JDM9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMS5pbmRlbnQsam9pbiQzPV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDEuam9pbixoYXJkbGluZSQ0PV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDEuaGFyZGxpbmUsc29mdGxpbmUkMj1fcmVxdWlyZSQkMCRidWlsZGVycyQxLnNvZnRsaW5lLGxpdGVyYWxsaW5lJDI9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMS5saXRlcmFsbGluZSxjb25jYXQkNT1fcmVxdWlyZSQkMCRidWlsZGVycyQxLmNvbmNhdCxkZWRlbnRUb1Jvb3QkMT1fcmVxdWlyZSQkMCRidWlsZGVycyQxLmRlZGVudFRvUm9vdCxfcmVxdWlyZSQkMCR1dGlscz1kb2MudXRpbHMsbWFwRG9jJDI9X3JlcXVpcmUkJDAkdXRpbHMubWFwRG9jLHN0cmlwVHJhaWxpbmdIYXJkbGluZSQxPV9yZXF1aXJlJCQwJHV0aWxzLnN0cmlwVHJhaWxpbmdIYXJkbGluZSxlbWJlZF8xPWVtYmVkLGNsZWFuXzE9Y2xlYW4sZGV0ZWN0TmV3bGluZT1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpO3ZhciB0PWUubWF0Y2goLyg/OlxyP1xuKS9nKXx8W107aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuPXQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJcclxuIj09PWV9KS5sZW5ndGg7cmV0dXJuIG4+dC5sZW5ndGgtbj8iXHJcbiI6IlxuIn0sZS5leHBvcnRzLmdyYWNlZnVsPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHModCl8fCJcbiJ9fSksb3MkOD17fSxvcyQxMD1PYmplY3QuZnJlZXplKHtkZWZhdWx0Om9zJDgsX19tb2R1bGVFeHBvcnRzOm9zJDh9KSxyZXF1aXJlJCQxJDQ9b3MkMTAmJm9zJDh8fG9zJDEwLGJ1aWxkPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3JldHVybiBwPWkoZGV0ZWN0TmV3bGluZSl9ZnVuY3Rpb24gcigpe3JldHVybiBmPXJlcXVpcmUkJDEkNH1mdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUubWF0Y2gobSk7cmV0dXJuIHQ/dFswXS5yZXBsYWNlKHksIiIpfHwiIjoiIn1mdW5jdGlvbiBhKGUpe3ZhciB0PWUubWF0Y2gobSk7cmV0dXJuIHQmJnRbMF0/ZS5zdWJzdHJpbmcodFswXS5sZW5ndGgpOmV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdShlKS5wcmFnbWFzfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9KDAsKHB8fG4oKSkuZGVmYXVsdCkoZSl8fChmfHxyKCkpLkVPTDtlPWUucmVwbGFjZShoLCIiKS5yZXBsYWNlKGQsIiIpLnJlcGxhY2UoRSwiJDEiKTtmb3IodmFyIGk9IiI7aSE9PWU7KWk9ZSxlPWUucmVwbGFjZSh4LCIiLmNvbmNhdCh0LCIkMSAkMiIpLmNvbmNhdCh0KSk7ZT1lLnJlcGxhY2UoYiwiIikucmVwbGFjZSh2LCIiKTtmb3IodmFyIG8sYT1PYmplY3QuY3JlYXRlKG51bGwpLHM9ZS5yZXBsYWNlKEMsIiIpLnJlcGxhY2UoYiwiIikucmVwbGFjZSh2LCIiKTtvPUMuZXhlYyhlKTspe3ZhciB1PW9bMl0ucmVwbGFjZShnLCIiKTsic3RyaW5nIj09PXR5cGVvZiBhW29bMV1dfHxBcnJheS5pc0FycmF5KGFbb1sxXV0pP2Fbb1sxXV09W10uY29uY2F0KGFbb1sxXV0sdSk6YVtvWzFdXT11fXJldHVybntjb21tZW50czpzLHByYWdtYXM6YX19ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLmNvbW1lbnRzLGk9dm9pZCAwPT09dD8iIjp0LG89ZS5wcmFnbWFzLGE9dm9pZCAwPT09bz97fTpvLHM9KDAsKHB8fG4oKSkuZGVmYXVsdCkoaSl8fChmfHxyKCkpLkVPTCx1PU9iamVjdC5rZXlzKGEpLGM9dS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxhW2VdKX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0KX0sW10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iICogIitlK3N9KS5qb2luKCIiKTtpZighaSl7aWYoMD09PXUubGVuZ3RoKXJldHVybiIiO2lmKDE9PT11Lmxlbmd0aCYmIUFycmF5LmlzQXJyYXkoYVt1WzBdXSkpe3ZhciBkPWFbdVswXV07cmV0dXJuIiIuY29uY2F0KCIvKioiLCIgIikuY29uY2F0KGwodVswXSxkKVswXSkuY29uY2F0KCIgKi8iKX19dmFyIGg9aS5zcGxpdChzKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIiIuY29uY2F0KCIgKiIsIiAiKS5jb25jYXQoZSl9KS5qb2luKHMpK3M7cmV0dXJuIi8qKiIrcysoaT9oOiIiKSsoaSYmdS5sZW5ndGg/IiAqIitzOiIiKStjKyIgKi8ifWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm5bXS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJAIi5jb25jYXQoZSwiICIpLmNvbmNhdCh0KS50cmltKCl9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5leHRyYWN0PW8sdC5zdHJpcD1hLHQucGFyc2U9cyx0LnBhcnNlV2l0aENvbW1lbnRzPXUsdC5wcmludD1jO3ZhciBwLGYsZD0vXCpcLyQvLGg9L15cL1wqXCovLG09L15ccyooXC9cKlwqPygufFxyP1xuKSo/XCpcLykvLGc9LyhefFxzKylcL1wvKFteXHJcbl0qKS9nLHk9L15ccyovLHY9L1xzKiQvLGI9L14oXHI/XG4pKy8seD0vKD86Xnxccj9cbikgKihAW15cclxuXSo/KSAqXHI/XG4gKig/IVteQFxyXG5dKlwvXC9bXl0qKShbXkBcclxuXHNdW15AXHJcbl0rPykgKlxyP1xuL2csQz0vKD86Xnxccj9cbikgKkAoXFMrKSAqKFteXHJcbl0qKS9nLEU9Lyhccj9cbnxeKSAqXCogPy9nfSk7dW53cmFwRXhwb3J0cyhidWlsZCk7dmFyIHByYWdtYT17aGFzUHJhZ21hOmhhc1ByYWdtYSxpbnNlcnRQcmFnbWE6aW5zZXJ0UHJhZ21hJDF9LGFkZExlYWRpbmdDb21tZW50JDI9dXRpbFNoYXJlZC5hZGRMZWFkaW5nQ29tbWVudCxhZGRUcmFpbGluZ0NvbW1lbnQkMj11dGlsU2hhcmVkLmFkZFRyYWlsaW5nQ29tbWVudCxhZGREYW5nbGluZ0NvbW1lbnQkMj11dGlsU2hhcmVkLmFkZERhbmdsaW5nQ29tbWVudCxjb21tZW50cyQzPXtoYW5kbGVPd25MaW5lQ29tbWVudDpoYW5kbGVPd25MaW5lQ29tbWVudCxoYW5kbGVFbmRPZkxpbmVDb21tZW50OmhhbmRsZUVuZE9mTGluZUNvbW1lbnQsaGFuZGxlUmVtYWluaW5nQ29tbWVudDpoYW5kbGVSZW1haW5pbmdDb21tZW50LGlzQmxvY2tDb21tZW50OmlzQmxvY2tDb21tZW50fSxuZWVkc1BhcmVuc18xPW5lZWRzUGFyZW5zLGdldFBhcmVudEV4cG9ydERlY2xhcmF0aW9uJDE9dXRpbC5nZXRQYXJlbnRFeHBvcnREZWNsYXJhdGlvbixpc0V4cG9ydERlY2xhcmF0aW9uJDE9dXRpbC5pc0V4cG9ydERlY2xhcmF0aW9uLHNob3VsZEZsYXR0ZW4kMT11dGlsLnNob3VsZEZsYXR0ZW4sZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlciQxPXV0aWwuZ2V0TmV4dE5vblNwYWNlTm9uQ29tbWVudENoYXJhY3RlcixoYXNOZXdsaW5lJDI9dXRpbC5oYXNOZXdsaW5lLGhhc05ld2xpbmVJblJhbmdlJDE9dXRpbC5oYXNOZXdsaW5lSW5SYW5nZSxnZXRMYXN0JDQ9dXRpbC5nZXRMYXN0LGdldFN0cmluZ1dpZHRoJDE9dXRpbC5nZXRTdHJpbmdXaWR0aCxwcmludFN0cmluZyQxPXV0aWwucHJpbnRTdHJpbmcscHJpbnROdW1iZXIkMT11dGlsLnByaW50TnVtYmVyLGhhc0lnbm9yZUNvbW1lbnQkMT11dGlsLmhhc0lnbm9yZUNvbW1lbnQsc2tpcFdoaXRlc3BhY2UkMT11dGlsLnNraXBXaGl0ZXNwYWNlLGhhc05vZGVJZ25vcmVDb21tZW50JDE9dXRpbC5oYXNOb2RlSWdub3JlQ29tbWVudCxnZXRQZW51bHRpbWF0ZSQxPXV0aWwuZ2V0UGVudWx0aW1hdGUsc3RhcnRzV2l0aE5vTG9va2FoZWFkVG9rZW4kMT11dGlsLnN0YXJ0c1dpdGhOb0xvb2thaGVhZFRva2VuLGdldEluZGVudFNpemUkMT11dGlsLmdldEluZGVudFNpemUsaXNOZXh0TGluZUVtcHR5JDI9dXRpbFNoYXJlZC5pc05leHRMaW5lRW1wdHksaXNOZXh0TGluZUVtcHR5QWZ0ZXJJbmRleCQxPXV0aWxTaGFyZWQuaXNOZXh0TGluZUVtcHR5QWZ0ZXJJbmRleCxnZXROZXh0Tm9uU3BhY2VOb25Db21tZW50Q2hhcmFjdGVySW5kZXgkMj11dGlsU2hhcmVkLmdldE5leHROb25TcGFjZU5vbkNvbW1lbnRDaGFyYWN0ZXJJbmRleCxpc0lkZW50aWZpZXJOYW1lPXV0aWxzLmtleXdvcmQuaXNJZGVudGlmaWVyTmFtZUVTNixpbnNlcnRQcmFnbWE9cHJhZ21hLmluc2VydFByYWdtYSxfcmVxdWlyZSQkNCRidWlsZGVycz1kb2MuYnVpbGRlcnMsY29uY2F0JDQ9X3JlcXVpcmUkJDQkYnVpbGRlcnMuY29uY2F0LGpvaW4kMj1fcmVxdWlyZSQkNCRidWlsZGVycy5qb2luLGxpbmUkMz1fcmVxdWlyZSQkNCRidWlsZGVycy5saW5lLGhhcmRsaW5lJDM9X3JlcXVpcmUkJDQkYnVpbGRlcnMuaGFyZGxpbmUsc29mdGxpbmUkMT1fcmVxdWlyZSQkNCRidWlsZGVycy5zb2Z0bGluZSxsaXRlcmFsbGluZSQxPV9yZXF1aXJlJCQ0JGJ1aWxkZXJzLmxpdGVyYWxsaW5lLGdyb3VwJDE9X3JlcXVpcmUkJDQkYnVpbGRlcnMuZ3JvdXAsaW5kZW50JDI9X3JlcXVpcmUkJDQkYnVpbGRlcnMuaW5kZW50LGFsaWduJDE9X3JlcXVpcmUkJDQkYnVpbGRlcnMuYWxpZ24sY29uZGl0aW9uYWxHcm91cCQxPV9yZXF1aXJlJCQ0JGJ1aWxkZXJzLmNvbmRpdGlvbmFsR3JvdXAsZmlsbCQyPV9yZXF1aXJlJCQ0JGJ1aWxkZXJzLmZpbGwsaWZCcmVhayQxPV9yZXF1aXJlJCQ0JGJ1aWxkZXJzLmlmQnJlYWssYnJlYWtQYXJlbnQkMj1fcmVxdWlyZSQkNCRidWlsZGVycy5icmVha1BhcmVudCxsaW5lU3VmZml4Qm91bmRhcnkkMT1fcmVxdWlyZSQkNCRidWlsZGVycy5saW5lU3VmZml4Qm91bmRhcnksYWRkQWxpZ25tZW50VG9Eb2MkMj1fcmVxdWlyZSQkNCRidWlsZGVycy5hZGRBbGlnbm1lbnRUb0RvYyxkZWRlbnQkMj1fcmVxdWlyZSQkNCRidWlsZGVycy5kZWRlbnQsX3JlcXVpcmUkJDQkdXRpbHM9ZG9jLnV0aWxzLHdpbGxCcmVhayQxPV9yZXF1aXJlJCQ0JHV0aWxzLndpbGxCcmVhayxpc0xpbmVOZXh0JDE9X3JlcXVpcmUkJDQkdXRpbHMuaXNMaW5lTmV4dCxpc0VtcHR5JDE9X3JlcXVpcmUkJDQkdXRpbHMuaXNFbXB0eSxyZW1vdmVMaW5lcyQxPV9yZXF1aXJlJCQ0JHV0aWxzLnJlbW92ZUxpbmVzLHByaW50RG9jVG9TdHJpbmckMT1kb2MucHJpbnRlci5wcmludERvY1RvU3RyaW5nLGZ1bmN0aW9uQ29tcG9zaXRpb25GdW5jdGlvbk5hbWVzPXtwaXBlOiEwLHBpcGVQOiEwLHBpcGVLOiEwLGNvbXBvc2U6ITAsY29tcG9zZUZsaXBwZWQ6ITAsY29tcG9zZVA6ITAsY29tcG9zZUs6ITAsZmxvdzohMCxmbG93UmlnaHQ6ITAsY29ubmVjdDohMH0sanN4V2hpdGVzcGFjZUNoYXJzPSIgXG5cclx0Iixjb250YWluc05vbkpzeFdoaXRlc3BhY2VSZWdleD1uZXcgUmVnRXhwKCJbXiIranN4V2hpdGVzcGFjZUNoYXJzKyJdIiksbWF0Y2hKc3hXaGl0ZXNwYWNlUmVnZXg9bmV3IFJlZ0V4cCgiKFsiK2pzeFdoaXRlc3BhY2VDaGFycysiXSspIiksdW5pdFRlc3RSZT0vXihza2lwfFtmeF0/KGl0fGRlc2NyaWJlfHRlc3QpKSQvLHByaW50ZXJFc3RyZWU9e3ByaW50OmdlbmVyaWNQcmludCQxLGVtYmVkOmVtYmVkXzEsaW5zZXJ0UHJhZ21hOmluc2VydFByYWdtYSxtYXNzYWdlQXN0Tm9kZTpjbGVhbl8xLGhhc1ByZXR0aWVySWdub3JlOmhhc1ByZXR0aWVySWdub3JlLHdpbGxQcmludE93bkNvbW1lbnRzOndpbGxQcmludE93bkNvbW1lbnRzLGNhbkF0dGFjaENvbW1lbnQ6Y2FuQXR0YWNoQ29tbWVudCxwcmludENvbW1lbnQ6cHJpbnRDb21tZW50JDEsaXNCbG9ja0NvbW1lbnQ6Y29tbWVudHMkMy5pc0Jsb2NrQ29tbWVudCxoYW5kbGVDb21tZW50czp7b3duTGluZTpjb21tZW50cyQzLmhhbmRsZU93bkxpbmVDb21tZW50LGVuZE9mTGluZTpjb21tZW50cyQzLmhhbmRsZUVuZE9mTGluZUNvbW1lbnQscmVtYWluaW5nOmNvbW1lbnRzJDMuaGFuZGxlUmVtYWluaW5nQ29tbWVudH19LF9yZXF1aXJlJCQwJGJ1aWxkZXJzJDI9ZG9jLmJ1aWxkZXJzLGNvbmNhdCQ2PV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDIuY29uY2F0LGhhcmRsaW5lJDU9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMi5oYXJkbGluZSxpbmRlbnQkND1fcmVxdWlyZSQkMCRidWlsZGVycyQyLmluZGVudCxqb2luJDQ9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMi5qb2luLHByaW50ZXJFc3RyZWVKc29uPXtwcmludDpnZW5lcmljUHJpbnQkMixtYXNzYWdlQXN0Tm9kZTpjbGVhbiQyfSxDQVRFR09SWV9DT01NT049IkNvbW1vbiIsY29tbW9uT3B0aW9ucz17YnJhY2tldFNwYWNpbmc6e3NpbmNlOiIwLjAuMCIsY2F0ZWdvcnk6Q0FURUdPUllfQ09NTU9OLHR5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAsZGVzY3JpcHRpb246IlByaW50IHNwYWNlcyBiZXR3ZWVuIGJyYWNrZXRzLiIsb3Bwb3NpdGVEZXNjcmlwdGlvbjoiRG8gbm90IHByaW50IHNwYWNlcyBiZXR3ZWVuIGJyYWNrZXRzLiJ9LHNpbmdsZVF1b3RlOntzaW5jZToiMC4wLjAiLGNhdGVnb3J5OkNBVEVHT1JZX0NPTU1PTix0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGRlc2NyaXB0aW9uOiJVc2Ugc2luZ2xlIHF1b3RlcyBpbnN0ZWFkIG9mIGRvdWJsZSBxdW90ZXMuIn19LENBVEVHT1JZX0pBVkFTQ1JJUFQ9IkphdmFTY3JpcHQiLG9wdGlvbnMkMz17YXJyb3dQYXJlbnM6e3NpbmNlOiIxLjkuMCIsY2F0ZWdvcnk6Q0FURUdPUllfSkFWQVNDUklQVCx0eXBlOiJjaG9pY2UiLGRlZmF1bHQ6ImF2b2lkIixkZXNjcmlwdGlvbjoiSW5jbHVkZSBwYXJlbnRoZXNlcyBhcm91bmQgYSBzb2xlIGFycm93IGZ1bmN0aW9uIHBhcmFtZXRlci4iLGNob2ljZXM6W3t2YWx1ZToiYXZvaWQiLGRlc2NyaXB0aW9uOiJPbWl0IHBhcmVucyB3aGVuIHBvc3NpYmxlLiBFeGFtcGxlOiBgeCA9PiB4YCJ9LHt2YWx1ZToiYWx3YXlzIixkZXNjcmlwdGlvbjoiQWx3YXlzIGluY2x1ZGUgcGFyZW5zLiBFeGFtcGxlOiBgKHgpID0+IHhgIn1dfSxicmFja2V0U3BhY2luZzpjb21tb25PcHRpb25zLmJyYWNrZXRTcGFjaW5nLGpzeEJyYWNrZXRTYW1lTGluZTp7c2luY2U6IjAuMTcuMCIsY2F0ZWdvcnk6Q0FURUdPUllfSkFWQVNDUklQVCx0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGRlc2NyaXB0aW9uOiJQdXQgPiBvbiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYXQgYSBuZXcgbGluZS4ifSxzZW1pOntzaW5jZToiMS4wLjAiLGNhdGVnb3J5OkNBVEVHT1JZX0pBVkFTQ1JJUFQsdHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxkZXNjcmlwdGlvbjoiUHJpbnQgc2VtaWNvbG9ucy4iLG9wcG9zaXRlRGVzY3JpcHRpb246IkRvIG5vdCBwcmludCBzZW1pY29sb25zLCBleGNlcHQgYXQgdGhlIGJlZ2lubmluZyBvZiBsaW5lcyB3aGljaCBtYXkgbmVlZCB0aGVtLiJ9LHNpbmdsZVF1b3RlOmNvbW1vbk9wdGlvbnMuc2luZ2xlUXVvdGUsdHJhaWxpbmdDb21tYTp7c2luY2U6IjAuMC4wIixjYXRlZ29yeTpDQVRFR09SWV9KQVZBU0NSSVBULHR5cGU6ImNob2ljZSIsZGVmYXVsdDpbe3NpbmNlOiIwLjAuMCIsdmFsdWU6ITF9LHtzaW5jZToiMC4xOS4wIix2YWx1ZToibm9uZSJ9XSxkZXNjcmlwdGlvbjoiUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIHdoZW4gbXVsdGktbGluZS4iLGNob2ljZXM6W3t2YWx1ZToibm9uZSIsZGVzY3JpcHRpb246Ik5vIHRyYWlsaW5nIGNvbW1hcy4ifSx7dmFsdWU6ImVzNSIsZGVzY3JpcHRpb246IlRyYWlsaW5nIGNvbW1hcyB3aGVyZSB2YWxpZCBpbiBFUzUgKG9iamVjdHMsIGFycmF5cywgZXRjLikifSx7dmFsdWU6ImFsbCIsZGVzY3JpcHRpb246IlRyYWlsaW5nIGNvbW1hcyB3aGVyZXZlciBwb3NzaWJsZSAoaW5jbHVkaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cykuIn0se3ZhbHVlOiEwLGRlcHJlY2F0ZWQ6IjAuMTkuMCIscmVkaXJlY3Q6ImVzNSJ9LHt2YWx1ZTohMSxkZXByZWNhdGVkOiIwLjE5LjAiLHJlZGlyZWN0OiJub25lIn1dfX0sbGFuZ3VhZ2VzPVt7bmFtZToiSmF2YVNjcmlwdCIsc2luY2U6IjAuMC4wIixwYXJzZXJzOlsiYmFieWxvbiIsImZsb3ciXSxncm91cDoiSmF2YVNjcmlwdCIsdG1TY29wZToic291cmNlLmpzIixhY2VNb2RlOiJqYXZhc2NyaXB0Iixjb2RlbWlycm9yTW9kZToiamF2YXNjcmlwdCIsY29kZW1pcnJvck1pbWVUeXBlOiJ0ZXh0L2phdmFzY3JpcHQiLGFsaWFzZXM6WyJqcyIsIm5vZGUiXSxleHRlbnNpb25zOlsiLmpzIiwiLl9qcyIsIi5ib25lcyIsIi5lcyIsIi5lczYiLCIuZnJhZyIsIi5ncyIsIi5qYWtlIiwiLmpzYiIsIi5qc2NhZCIsIi5qc2ZsIiwiLmpzbSIsIi5qc3MiLCIubWpzIiwiLm5qcyIsIi5wYWMiLCIuc2pzIiwiLnNzanMiLCIueHNqcyIsIi54c2pzbGliIl0sZmlsZW5hbWVzOlsiSmFrZWZpbGUiXSxsaW5ndWlzdExhbmd1YWdlSWQ6MTgzLHZzY29kZUxhbmd1YWdlSWRzOlsiamF2YXNjcmlwdCJdfSx7bmFtZToiSlNYIixzaW5jZToiMC4wLjAiLHBhcnNlcnM6WyJiYWJ5bG9uIiwiZmxvdyJdLGdyb3VwOiJKYXZhU2NyaXB0IixleHRlbnNpb25zOlsiLmpzeCJdLHRtU2NvcGU6InNvdXJjZS5qcy5qc3giLGFjZU1vZGU6ImphdmFzY3JpcHQiLGNvZGVtaXJyb3JNb2RlOiJqc3giLGNvZGVtaXJyb3JNaW1lVHlwZToidGV4dC9qc3giLGxpZ3Vpc3RMYW5ndWFnZUlkOjE3OCx2c2NvZGVMYW5ndWFnZUlkczpbImphdmFzY3JpcHRyZWFjdCJdfSx7bmFtZToiVHlwZVNjcmlwdCIsc2luY2U6IjEuNC4wIixwYXJzZXJzOlsidHlwZXNjcmlwdC1lc2xpbnQiXSxncm91cDoiSmF2YVNjcmlwdCIsYWxpYXNlczpbInRzIl0sZXh0ZW5zaW9uczpbIi50cyIsIi50c3giXSx0bVNjb3BlOiJzb3VyY2UudHMiLGFjZU1vZGU6InR5cGVzY3JpcHQiLGNvZGVtaXJyb3JNb2RlOiJqYXZhc2NyaXB0Iixjb2RlbWlycm9yTWltZVR5cGU6ImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLGxpZ3Vpc3RMYW5ndWFnZUlkOjM3OCx2c2NvZGVMYW5ndWFnZUlkczpbInR5cGVzY3JpcHQiLCJ0eXBlc2NyaXB0cmVhY3QiXX0se25hbWU6IkpTT04uc3RyaW5naWZ5IixzaW5jZToiMS4xMy4wIixwYXJzZXJzOlsianNvbi1zdHJpbmdpZnkiXSxncm91cDoiSmF2YVNjcmlwdCIsdG1TY29wZToic291cmNlLmpzb24iLGFjZU1vZGU6Impzb24iLGNvZGVtaXJyb3JNb2RlOiJqYXZhc2NyaXB0Iixjb2RlbWlycm9yTWltZVR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLGV4dGVuc2lvbnM6W10sZmlsZW5hbWVzOlsicGFja2FnZS5qc29uIiwicGFja2FnZS1sb2NrLmpzb24iLCJjb21wb3Nlci5qc29uIl0sbGluZ3Vpc3RMYW5ndWFnZUlkOjE3NCx2c2NvZGVMYW5ndWFnZUlkczpbImpzb24iXX0se25hbWU6IkpTT04iLHNpbmNlOiIxLjUuMCIscGFyc2VyczpbImpzb24iXSxncm91cDoiSmF2YVNjcmlwdCIsdG1TY29wZToic291cmNlLmpzb24iLGFjZU1vZGU6Impzb24iLGNvZGVtaXJyb3JNb2RlOiJqYXZhc2NyaXB0Iixjb2RlbWlycm9yTWltZVR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLGV4dGVuc2lvbnM6WyIuanNvbiIsIi5nZW9qc29uIiwiLkpTT04tdG1MYW5ndWFnZSIsIi50b3BvanNvbiJdLGZpbGVuYW1lczpbIi5hcmNjb25maWciLCIuanNoaW50cmMiLCIuZXNsaW50cmMiLCIucHJldHRpZXJyYyIsImNvbXBvc2VyLmxvY2siLCJtY21vZC5pbmZvIl0sbGluZ3Vpc3RMYW5ndWFnZUlkOjE3NCx2c2NvZGVMYW5ndWFnZUlkczpbImpzb24iLCJqc29uYyJdfSx7bmFtZToiSlNPTjUiLHNpbmNlOiIxLjEzLjAiLHBhcnNlcnM6WyJqc29uNSJdLGdyb3VwOiJKYXZhU2NyaXB0Iix0bVNjb3BlOiJzb3VyY2UuanNvbiIsYWNlTW9kZToianNvbiIsY29kZW1pcnJvck1vZGU6ImphdmFzY3JpcHQiLGNvZGVtaXJyb3JNaW1lVHlwZToiYXBwbGljYXRpb24vanNvbiIsZXh0ZW5zaW9uczpbIi5qc29uNSJdLGZpbGVuYW1lczpbIi5iYWJlbHJjIl0sbGluZ3Vpc3RMYW5ndWFnZUlkOjE3NSx2c2NvZGVMYW5ndWFnZUlkczpbImpzb241Il19XSxwcmludGVycz17ZXN0cmVlOnByaW50ZXJFc3RyZWUsImVzdHJlZS1qc29uIjpwcmludGVyRXN0cmVlSnNvbn0sbGFuZ3VhZ2VKcz17bGFuZ3VhZ2VzOmxhbmd1YWdlcyxvcHRpb25zOm9wdGlvbnMkMyxwcmludGVyczpwcmludGVyc30saW5kZXgkNT1bImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcHBsZXQiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmFzZSIsImJhc2Vmb250IiwiYmRpIiwiYmRvIiwiYmdzb3VuZCIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29tbWFuZCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZW1iZWQiLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImZyYW1lIiwiZnJhbWVzZXQiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImlmcmFtZSIsImltYWdlIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJpc2luZGV4Iiwia2JkIiwia2V5Z2VuIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsImxpbmsiLCJsaXN0aW5nIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWF0aCIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGEiLCJtZXRlciIsIm11bHRpY29sIiwibmF2IiwibmV4dGlkIiwibm9iciIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwYXJhbSIsInBpY3R1cmUiLCJwbGFpbnRleHQiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJyYiIsInJiYyIsInJwIiwicnQiLCJydGMiLCJydWJ5IiwicyIsInNhbXAiLCJzY3JpcHQiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic2xvdCIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInN2ZyIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciIsInhtcCJdLGh0bWxUYWdOYW1lcz1PYmplY3QuZnJlZXplKHtkZWZhdWx0OmluZGV4JDV9KSxodG1sVGFnTmFtZXMkMT1odG1sVGFnTmFtZXMmJmluZGV4JDV8fGh0bWxUYWdOYW1lcyxjbGVhbl8xJDI9Y2xlYW4kMyx1dGlscyQ0PXtnZXRBbmNlc3RvckNvdW50ZXI6Z2V0QW5jZXN0b3JDb3VudGVyLGdldEFuY2VzdG9yTm9kZTpnZXRBbmNlc3Rvck5vZGUkMSxnZXRQcm9wT2ZEZWNsTm9kZTpnZXRQcm9wT2ZEZWNsTm9kZSQxLG1heWJlVG9Mb3dlckNhc2U6bWF5YmVUb0xvd2VyQ2FzZSQxLGluc2lkZVZhbHVlRnVuY3Rpb25Ob2RlOmluc2lkZVZhbHVlRnVuY3Rpb25Ob2RlJDEsaW5zaWRlSUNTU1J1bGVOb2RlOmluc2lkZUlDU1NSdWxlTm9kZSQxLGluc2lkZUF0UnVsZU5vZGU6aW5zaWRlQXRSdWxlTm9kZSQxLGluc2lkZVVSTEZ1bmN0aW9uSW5JbXBvcnRBdFJ1bGVOb2RlOmluc2lkZVVSTEZ1bmN0aW9uSW5JbXBvcnRBdFJ1bGVOb2RlJDEsaXNLZXlmcmFtZUF0UnVsZUtleXdvcmRzOmlzS2V5ZnJhbWVBdFJ1bGVLZXl3b3JkcyQxLGlzSFRNTFRhZzppc0hUTUxUYWckMSxpc1dpZGVLZXl3b3Jkczppc1dpZGVLZXl3b3JkcyQxLGlzU0NTUzppc1NDU1MkMSxpc0xhc3ROb2RlOmlzTGFzdE5vZGUkMSxpc1NDU1NDb250cm9sRGlyZWN0aXZlTm9kZTppc1NDU1NDb250cm9sRGlyZWN0aXZlTm9kZSQxLGlzRGV0YWNoZWRSdWxlc2V0RGVjbGFyYXRpb25Ob2RlOmlzRGV0YWNoZWRSdWxlc2V0RGVjbGFyYXRpb25Ob2RlJDEsaXNSZWxhdGlvbmFsT3BlcmF0b3JOb2RlOmlzUmVsYXRpb25hbE9wZXJhdG9yTm9kZSQxLGlzRXF1YWxpdHlPcGVyYXRvck5vZGU6aXNFcXVhbGl0eU9wZXJhdG9yTm9kZSQxLGlzTXVsdGlwbGljYXRpb25Ob2RlOmlzTXVsdGlwbGljYXRpb25Ob2RlJDEsaXNEaXZpc2lvbk5vZGU6aXNEaXZpc2lvbk5vZGUkMSxpc0FkZGl0aW9uTm9kZTppc0FkZGl0aW9uTm9kZSQxLGlzU3VidHJhY3Rpb25Ob2RlOmlzU3VidHJhY3Rpb25Ob2RlJDEsaXNNb2R1bG9Ob2RlOmlzTW9kdWxvTm9kZSxpc01hdGhPcGVyYXRvck5vZGU6aXNNYXRoT3BlcmF0b3JOb2RlJDEsaXNFYWNoS2V5d29yZE5vZGU6aXNFYWNoS2V5d29yZE5vZGUkMSxpc0ZvcktleXdvcmROb2RlOmlzRm9yS2V5d29yZE5vZGUkMSxpc1VSTEZ1bmN0aW9uTm9kZTppc1VSTEZ1bmN0aW9uTm9kZSQxLGlzSWZFbHNlS2V5d29yZE5vZGU6aXNJZkVsc2VLZXl3b3JkTm9kZSQxLGhhc0NvbXBvc2VzTm9kZTpoYXNDb21wb3Nlc05vZGUkMSxoYXNQYXJlbnNBcm91bmROb2RlOmhhc1BhcmVuc0Fyb3VuZE5vZGUkMSxoYXNFbXB0eVJhd0JlZm9yZTpoYXNFbXB0eVJhd0JlZm9yZSQxLGlzU0NTU05lc3RlZFByb3BlcnR5Tm9kZTppc1NDU1NOZXN0ZWRQcm9wZXJ0eU5vZGUsaXNEZXRhY2hlZFJ1bGVzZXRDYWxsTm9kZTppc0RldGFjaGVkUnVsZXNldENhbGxOb2RlJDEsaXNQb3N0Y3NzU2ltcGxlVmFyTm9kZTppc1Bvc3Rjc3NTaW1wbGVWYXJOb2RlJDEsaXNLZXlWYWx1ZVBhaXJOb2RlOmlzS2V5VmFsdWVQYWlyTm9kZSQxLGlzS2V5VmFsdWVQYWlySW5QYXJlbkdyb3VwTm9kZTppc0tleVZhbHVlUGFpckluUGFyZW5Hcm91cE5vZGUsaXNTQ1NTTWFwSXRlbU5vZGU6aXNTQ1NTTWFwSXRlbU5vZGUkMSxpc0lubGluZVZhbHVlQ29tbWVudE5vZGU6aXNJbmxpbmVWYWx1ZUNvbW1lbnROb2RlJDEsaXNIYXNoTm9kZTppc0hhc2hOb2RlJDEsaXNMZWZ0Q3VybHlCcmFjZU5vZGU6aXNMZWZ0Q3VybHlCcmFjZU5vZGUkMSxpc1JpZ2h0Q3VybHlCcmFjZU5vZGU6aXNSaWdodEN1cmx5QnJhY2VOb2RlJDEsaXNXb3JkTm9kZTppc1dvcmROb2RlJDEsaXNDb2xvbk5vZGU6aXNDb2xvbk5vZGUkMSxpc01lZGlhQW5kU3VwcG9ydHNLZXl3b3Jkczppc01lZGlhQW5kU3VwcG9ydHNLZXl3b3JkcyQxfSxwcmludE51bWJlciQyPXV0aWwucHJpbnROdW1iZXIscHJpbnRTdHJpbmckMj11dGlsLnByaW50U3RyaW5nLGhhc0lnbm9yZUNvbW1lbnQkMj11dGlsLmhhc0lnbm9yZUNvbW1lbnQsaGFzTmV3bGluZSQzPXV0aWwuaGFzTmV3bGluZSxpc05leHRMaW5lRW1wdHkkMz11dGlsU2hhcmVkLmlzTmV4dExpbmVFbXB0eSxfcmVxdWlyZSQkMiRidWlsZGVycz1kb2MuYnVpbGRlcnMsY29uY2F0JDc9X3JlcXVpcmUkJDIkYnVpbGRlcnMuY29uY2F0LGpvaW4kNT1fcmVxdWlyZSQkMiRidWlsZGVycy5qb2luLGxpbmUkND1fcmVxdWlyZSQkMiRidWlsZGVycy5saW5lLGhhcmRsaW5lJDY9X3JlcXVpcmUkJDIkYnVpbGRlcnMuaGFyZGxpbmUsc29mdGxpbmUkMz1fcmVxdWlyZSQkMiRidWlsZGVycy5zb2Z0bGluZSxncm91cCQyPV9yZXF1aXJlJCQyJGJ1aWxkZXJzLmdyb3VwLGZpbGwkMz1fcmVxdWlyZSQkMiRidWlsZGVycy5maWxsLGluZGVudCQ1PV9yZXF1aXJlJCQyJGJ1aWxkZXJzLmluZGVudCxkZWRlbnQkMz1fcmVxdWlyZSQkMiRidWlsZGVycy5kZWRlbnQsaWZCcmVhayQyPV9yZXF1aXJlJCQyJGJ1aWxkZXJzLmlmQnJlYWsscmVtb3ZlTGluZXMkMj1kb2MudXRpbHMucmVtb3ZlTGluZXMsZ2V0QW5jZXN0b3JOb2RlPXV0aWxzJDQuZ2V0QW5jZXN0b3JOb2RlLGdldFByb3BPZkRlY2xOb2RlPXV0aWxzJDQuZ2V0UHJvcE9mRGVjbE5vZGUsbWF5YmVUb0xvd2VyQ2FzZT11dGlscyQ0Lm1heWJlVG9Mb3dlckNhc2UsaW5zaWRlVmFsdWVGdW5jdGlvbk5vZGU9dXRpbHMkNC5pbnNpZGVWYWx1ZUZ1bmN0aW9uTm9kZSxpbnNpZGVJQ1NTUnVsZU5vZGU9dXRpbHMkNC5pbnNpZGVJQ1NTUnVsZU5vZGUsaW5zaWRlQXRSdWxlTm9kZT11dGlscyQ0Lmluc2lkZUF0UnVsZU5vZGUsaW5zaWRlVVJMRnVuY3Rpb25JbkltcG9ydEF0UnVsZU5vZGU9dXRpbHMkNC5pbnNpZGVVUkxGdW5jdGlvbkluSW1wb3J0QXRSdWxlTm9kZSxpc0tleWZyYW1lQXRSdWxlS2V5d29yZHM9dXRpbHMkNC5pc0tleWZyYW1lQXRSdWxlS2V5d29yZHMsaXNIVE1MVGFnPXV0aWxzJDQuaXNIVE1MVGFnLGlzV2lkZUtleXdvcmRzPXV0aWxzJDQuaXNXaWRlS2V5d29yZHMsaXNTQ1NTPXV0aWxzJDQuaXNTQ1NTLGlzTGFzdE5vZGU9dXRpbHMkNC5pc0xhc3ROb2RlLGlzU0NTU0NvbnRyb2xEaXJlY3RpdmVOb2RlPXV0aWxzJDQuaXNTQ1NTQ29udHJvbERpcmVjdGl2ZU5vZGUsaXNEZXRhY2hlZFJ1bGVzZXREZWNsYXJhdGlvbk5vZGU9dXRpbHMkNC5pc0RldGFjaGVkUnVsZXNldERlY2xhcmF0aW9uTm9kZSxpc1JlbGF0aW9uYWxPcGVyYXRvck5vZGU9dXRpbHMkNC5pc1JlbGF0aW9uYWxPcGVyYXRvck5vZGUsaXNFcXVhbGl0eU9wZXJhdG9yTm9kZT11dGlscyQ0LmlzRXF1YWxpdHlPcGVyYXRvck5vZGUsaXNNdWx0aXBsaWNhdGlvbk5vZGU9dXRpbHMkNC5pc011bHRpcGxpY2F0aW9uTm9kZSxpc0RpdmlzaW9uTm9kZT11dGlscyQ0LmlzRGl2aXNpb25Ob2RlLGlzQWRkaXRpb25Ob2RlPXV0aWxzJDQuaXNBZGRpdGlvbk5vZGUsaXNTdWJ0cmFjdGlvbk5vZGU9dXRpbHMkNC5pc1N1YnRyYWN0aW9uTm9kZSxpc01hdGhPcGVyYXRvck5vZGU9dXRpbHMkNC5pc01hdGhPcGVyYXRvck5vZGUsaXNFYWNoS2V5d29yZE5vZGU9dXRpbHMkNC5pc0VhY2hLZXl3b3JkTm9kZSxpc0ZvcktleXdvcmROb2RlPXV0aWxzJDQuaXNGb3JLZXl3b3JkTm9kZSxpc1VSTEZ1bmN0aW9uTm9kZT11dGlscyQ0LmlzVVJMRnVuY3Rpb25Ob2RlLGlzSWZFbHNlS2V5d29yZE5vZGU9dXRpbHMkNC5pc0lmRWxzZUtleXdvcmROb2RlLGhhc0NvbXBvc2VzTm9kZT11dGlscyQ0Lmhhc0NvbXBvc2VzTm9kZSxoYXNQYXJlbnNBcm91bmROb2RlPXV0aWxzJDQuaGFzUGFyZW5zQXJvdW5kTm9kZSxoYXNFbXB0eVJhd0JlZm9yZT11dGlscyQ0Lmhhc0VtcHR5UmF3QmVmb3JlLGlzS2V5VmFsdWVQYWlyTm9kZT11dGlscyQ0LmlzS2V5VmFsdWVQYWlyTm9kZSxpc0RldGFjaGVkUnVsZXNldENhbGxOb2RlPXV0aWxzJDQuaXNEZXRhY2hlZFJ1bGVzZXRDYWxsTm9kZSxpc1Bvc3Rjc3NTaW1wbGVWYXJOb2RlPXV0aWxzJDQuaXNQb3N0Y3NzU2ltcGxlVmFyTm9kZSxpc1NDU1NNYXBJdGVtTm9kZT11dGlscyQ0LmlzU0NTU01hcEl0ZW1Ob2RlLGlzSW5saW5lVmFsdWVDb21tZW50Tm9kZT11dGlscyQ0LmlzSW5saW5lVmFsdWVDb21tZW50Tm9kZSxpc0hhc2hOb2RlPXV0aWxzJDQuaXNIYXNoTm9kZSxpc0xlZnRDdXJseUJyYWNlTm9kZT11dGlscyQ0LmlzTGVmdEN1cmx5QnJhY2VOb2RlLGlzUmlnaHRDdXJseUJyYWNlTm9kZT11dGlscyQ0LmlzUmlnaHRDdXJseUJyYWNlTm9kZSxpc1dvcmROb2RlPXV0aWxzJDQuaXNXb3JkTm9kZSxpc0NvbG9uTm9kZT11dGlscyQ0LmlzQ29sb25Ob2RlLGlzTWVkaWFBbmRTdXBwb3J0c0tleXdvcmRzPXV0aWxzJDQuaXNNZWRpYUFuZFN1cHBvcnRzS2V5d29yZHMsU1RSSU5HX1JFR0VYPS8oWyciXSkoPzooPyFcMSlbXlxcXXxcXFtcc1xTXSkqXDEvZyxOVU1CRVJfUkVHRVg9Lyg/OlxkKlwuXGQrfFxkK1wuPykoPzpbZUVdWystXT9cZCspPy9nLFNUQU5EQVJEX1VOSVRfUkVHRVg9L1thLXpBLVpdKy9nLFdPUkRfUEFSVF9SRUdFWD0vWyRAXT9bYS16QS1aX1x1MDA4MC1cdUZGRkZdW1x3XC1cdTAwODAtXHVGRkZGXSovZyxBREpVU1RfTlVNQkVSU19SRUdFWD1SZWdFeHAoU1RSSU5HX1JFR0VYLnNvdXJjZSsifCIrIigiLmNvbmNhdChXT1JEX1BBUlRfUkVHRVguc291cmNlLCIpPyIpKyIoIi5jb25jYXQoTlVNQkVSX1JFR0VYLnNvdXJjZSwiKSIpKyIoIi5jb25jYXQoU1RBTkRBUkRfVU5JVF9SRUdFWC5zb3VyY2UsIik/IiksImciKSxwcmludGVyUG9zdGNzcz17cHJpbnQ6Z2VuZXJpY1ByaW50JDMsaGFzUHJldHRpZXJJZ25vcmU6aGFzSWdub3JlQ29tbWVudCQyLG1hc3NhZ2VBc3ROb2RlOmNsZWFuXzEkMn0sb3B0aW9ucyQ2PXtzaW5nbGVRdW90ZTpjb21tb25PcHRpb25zLnNpbmdsZVF1b3RlfSxsYW5ndWFnZXMkMT1be25hbWU6IkNTUyIsc2luY2U6IjEuNC4wIixwYXJzZXJzOlsiY3NzIl0sZ3JvdXA6IkNTUyIsdG1TY29wZToic291cmNlLmNzcyIsYWNlTW9kZToiY3NzIixjb2RlbWlycm9yTW9kZToiY3NzIixjb2RlbWlycm9yTWltZVR5cGU6InRleHQvY3NzIixleHRlbnNpb25zOlsiLmNzcyIsIi5wY3NzIiwiLnBvc3Rjc3MiXSxsaWd1aXN0TGFuZ3VhZ2VJZDo1MCx2c2NvZGVMYW5ndWFnZUlkczpbImNzcyIsInBvc3Rjc3MiXX0se25hbWU6Ikxlc3MiLHNpbmNlOiIxLjQuMCIscGFyc2VyczpbImxlc3MiXSxncm91cDoiQ1NTIixleHRlbnNpb25zOlsiLmxlc3MiXSx0bVNjb3BlOiJzb3VyY2UuY3NzLmxlc3MiLGFjZU1vZGU6Imxlc3MiLGNvZGVtaXJyb3JNb2RlOiJjc3MiLGNvZGVtaXJyb3JNaW1lVHlwZToidGV4dC9jc3MiLGxpZ3Vpc3RMYW5ndWFnZUlkOjE5OCx2c2NvZGVMYW5ndWFnZUlkczpbImxlc3MiXX0se25hbWU6IlNDU1MiLHNpbmNlOiIxLjQuMCIscGFyc2VyczpbInNjc3MiXSxncm91cDoiQ1NTIix0bVNjb3BlOiJzb3VyY2Uuc2NzcyIsYWNlTW9kZToic2NzcyIsY29kZW1pcnJvck1vZGU6ImNzcyIsY29kZW1pcnJvck1pbWVUeXBlOiJ0ZXh0L3gtc2NzcyIsZXh0ZW5zaW9uczpbIi5zY3NzIl0sbGlndWlzdExhbmd1YWdlSWQ6MzI5LHZzY29kZUxhbmd1YWdlSWRzOlsic2NzcyJdfV0scHJpbnRlcnMkMT17cG9zdGNzczpwcmludGVyUG9zdGNzc30sbGFuZ3VhZ2VDc3M9e2xhbmd1YWdlczpsYW5ndWFnZXMkMSxvcHRpb25zOm9wdGlvbnMkNixwcmludGVyczpwcmludGVycyQxfSxfcmVxdWlyZSQkMCRidWlsZGVycyQzPWRvYy5idWlsZGVycyxjb25jYXQkOD1fcmVxdWlyZSQkMCRidWlsZGVycyQzLmNvbmNhdCxqb2luJDY9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMy5qb2luLGhhcmRsaW5lJDc9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMy5oYXJkbGluZSxsaW5lJDU9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMy5saW5lLHNvZnRsaW5lJDQ9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMy5zb2Z0bGluZSxncm91cCQzPV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDMuZ3JvdXAsaW5kZW50JDY9X3JlcXVpcmUkJDAkYnVpbGRlcnMkMy5pbmRlbnQsaWZCcmVhayQzPV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDMuaWZCcmVhayxoYXNJZ25vcmVDb21tZW50JDM9dXRpbC5oYXNJZ25vcmVDb21tZW50LGlzTmV4dExpbmVFbXB0eSQ0PXV0aWxTaGFyZWQuaXNOZXh0TGluZUVtcHR5LHByaW50ZXJHcmFwaHFsPXtwcmludDpnZW5lcmljUHJpbnQkNCxtYXNzYWdlQXN0Tm9kZTpjbGVhbiQ1LGhhc1ByZXR0aWVySWdub3JlOmhhc0lnbm9yZUNvbW1lbnQkMyxwcmludENvbW1lbnQ6cHJpbnRDb21tZW50JDIsY2FuQXR0YWNoQ29tbWVudDpjYW5BdHRhY2hDb21tZW50JDF9LG9wdGlvbnMkOT17YnJhY2tldFNwYWNpbmc6Y29tbW9uT3B0aW9ucy5icmFja2V0U3BhY2luZ30sbGFuZ3VhZ2VzJDI9W3tuYW1lOiJHcmFwaFFMIixzaW5jZToiMS41LjAiLHBhcnNlcnM6WyJncmFwaHFsIl0sZXh0ZW5zaW9uczpbIi5ncmFwaHFsIiwiLmdxbCJdLHRtU2NvcGU6InNvdXJjZS5ncmFwaHFsIixhY2VNb2RlOiJ0ZXh0IixsaWd1aXN0TGFuZ3VhZ2VJZDoxMzksdnNjb2RlTGFuZ3VhZ2VJZHM6WyJncmFwaHFsIl19XSxwcmludGVycyQyPXtncmFwaHFsOnByaW50ZXJHcmFwaHFsfSxsYW5ndWFnZUdyYXBocWw9e2xhbmd1YWdlczpsYW5ndWFnZXMkMixvcHRpb25zOm9wdGlvbnMkOSxwcmludGVyczpwcmludGVycyQyfSxfcmVxdWlyZSQkMCRidWlsZGVycyQ1PWRvYy5idWlsZGVycyxoYXJkbGluZSQ5PV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDUuaGFyZGxpbmUsbGl0ZXJhbGxpbmUkMz1fcmVxdWlyZSQkMCRidWlsZGVycyQ1LmxpdGVyYWxsaW5lLGNvbmNhdCQxMD1fcmVxdWlyZSQkMCRidWlsZGVycyQ1LmNvbmNhdCxtYXJrQXNSb290JDE9X3JlcXVpcmUkJDAkYnVpbGRlcnMkNS5tYXJrQXNSb290LG1hcERvYyQ0PWRvYy51dGlscy5tYXBEb2MsZW1iZWRfMSQyPWVtYmVkJDIsZnJvbnRNYXR0ZXI9cGFyc2UkMyxwcmFnbWEkMj1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciB0PSJAKCIuY29uY2F0KG4uam9pbigifCIpLCIpIikscj1uZXcgUmVnRXhwKFsiXHgzYyEtLVxccyoiLmNvbmNhdCh0LCJcXHMqLS1ceDNlIiksIlx4M2MhLS0uKlxuW1xcc1xcU10qKF58XG4pW15cXFNcbl0qIi5jb25jYXQodCwiW15cXFNcbl0qKCR8XG4pW1xcc1xcU10qXG4uKi0tXHgzZSIpXS5qb2luKCJ8IiksIm0iKSxpPWUubWF0Y2gocik7cmV0dXJuIGkmJjA9PT1pLmluZGV4fXZhciBuPVsiZm9ybWF0IiwicHJldHRpZXIiXTtlLmV4cG9ydHM9e3N0YXJ0V2l0aFByYWdtYTp0LGhhc1ByYWdtYTpmdW5jdGlvbihlKXtyZXR1cm4gdChmcm9udE1hdHRlcihlKS5jb250ZW50LnRyaW1MZWZ0KCkpfSxpbnNlcnRQcmFnbWE6ZnVuY3Rpb24oZSl7dmFyIHQ9ZnJvbnRNYXR0ZXIoZSkscj0iXHgzYyEtLSBAIi5jb25jYXQoblswXSwiIC0tXHgzZSIpO3JldHVybiB0LmZyb250TWF0dGVyPyIiLmNvbmNhdCh0LmZyb250TWF0dGVyLCJcblxuIikuY29uY2F0KHIsIlxuXG4iKS5jb25jYXQodC5jb250ZW50KToiIi5jb25jYXQociwiXG5cbiIpLmNvbmNhdCh0LmNvbnRlbnQpfX19KSxfcmVxdWlyZSQkMCRidWlsZGVycyQ0PWRvYy5idWlsZGVycyxjb25jYXQkOT1fcmVxdWlyZSQkMCRidWlsZGVycyQ0LmNvbmNhdCxqb2luJDc9X3JlcXVpcmUkJDAkYnVpbGRlcnMkNC5qb2luLGxpbmUkNj1fcmVxdWlyZSQkMCRidWlsZGVycyQ0LmxpbmUsaGFyZGxpbmUkOD1fcmVxdWlyZSQkMCRidWlsZGVycyQ0LmhhcmRsaW5lLHNvZnRsaW5lJDU9X3JlcXVpcmUkJDAkYnVpbGRlcnMkNC5zb2Z0bGluZSxmaWxsJDQ9X3JlcXVpcmUkJDAkYnVpbGRlcnMkNC5maWxsLGFsaWduJDI9X3JlcXVpcmUkJDAkYnVpbGRlcnMkNC5hbGlnbixpbmRlbnQkNz1fcmVxdWlyZSQkMCRidWlsZGVycyQ0LmluZGVudCxncm91cCQ0PV9yZXF1aXJlJCQwJGJ1aWxkZXJzJDQuZ3JvdXAsbWFwRG9jJDM9ZG9jLnV0aWxzLm1hcERvYyxwcmludERvY1RvU3RyaW5nJDI9ZG9jLnByaW50ZXIucHJpbnREb2NUb1N0cmluZyxTSU5HTEVfTElORV9OT0RFX1RZUEVTPVsiaGVhZGluZyIsInRhYmxlQ2VsbCIsImxpbmsiXSxTSUJMSU5HX05PREVfVFlQRVM9WyJsaXN0SXRlbSIsImRlZmluaXRpb24iLCJmb290bm90ZURlZmluaXRpb24iXSxJTkxJTkVfTk9ERV9UWVBFUz1bImxpcXVpZE5vZGUiLCJpbmxpbmVDb2RlIiwiZW1waGFzaXMiLCJzdHJvbmciLCJkZWxldGUiLCJsaW5rIiwibGlua1JlZmVyZW5jZSIsImltYWdlIiwiaW1hZ2VSZWZlcmVuY2UiLCJmb290bm90ZSIsImZvb3Rub3RlUmVmZXJlbmNlIiwic2VudGVuY2UiLCJ3aGl0ZXNwYWNlIiwid29yZCIsImJyZWFrIl0sSU5MSU5FX05PREVfV1JBUFBFUl9UWVBFUz1JTkxJTkVfTk9ERV9UWVBFUy5jb25jYXQoWyJ0YWJsZUNlbGwiLCJwYXJhZ3JhcGgiLCJoZWFkaW5nIl0pLHByaW50ZXJNYXJrZG93bj17cHJpbnQ6Z2VuZXJpY1ByaW50JDUsZW1iZWQ6ZW1iZWRfMSQyLG1hc3NhZ2VBc3ROb2RlOmNsZWFuJDYsaGFzUHJldHRpZXJJZ25vcmU6aGFzUHJldHRpZXJJZ25vcmUkMSxpbnNlcnRQcmFnbWE6cHJhZ21hJDIuaW5zZXJ0UHJhZ21hfSxDQVRFR09SWV9NQVJLRE9XTj0iTWFya2Rvd24iLG9wdGlvbnMkMTI9e3Byb3NlV3JhcDp7c2luY2U6IjEuOC4yIixjYXRlZ29yeTpDQVRFR09SWV9NQVJLRE9XTix0eXBlOiJjaG9pY2UiLGRlZmF1bHQ6W3tzaW5jZToiMS44LjIiLHZhbHVlOiEwfSx7c2luY2U6IjEuOS4wIix2YWx1ZToicHJlc2VydmUifV0sZGVzY3JpcHRpb246IkhvdyB0byB3cmFwIHByb3NlLiAobWFya2Rvd24pIixjaG9pY2VzOlt7c2luY2U6IjEuOS4wIix2YWx1ZToiYWx3YXlzIixkZXNjcmlwdGlvbjoiV3JhcCBwcm9zZSBpZiBpdCBleGNlZWRzIHRoZSBwcmludCB3aWR0aC4ifSx7c2luY2U6IjEuOS4wIix2YWx1ZToibmV2ZXIiLGRlc2NyaXB0aW9uOiJEbyBub3Qgd3JhcCBwcm9zZS4ifSx7c2luY2U6IjEuOS4wIix2YWx1ZToicHJlc2VydmUiLGRlc2NyaXB0aW9uOiJXcmFwIHByb3NlIGFzLWlzLiJ9LHt2YWx1ZTohMSxkZXByZWNhdGVkOiIxLjkuMCIscmVkaXJlY3Q6Im5ldmVyIn0se3ZhbHVlOiEwLGRlcHJlY2F0ZWQ6IjEuOS4wIixyZWRpcmVjdDoiYWx3YXlzIn1dfSxzaW5nbGVRdW90ZTpjb21tb25PcHRpb25zLnNpbmdsZVF1b3RlfSxsYW5ndWFnZXMkMz1be25hbWU6Ik1hcmtkb3duIixzaW5jZToiMS44LjAiLHBhcnNlcnM6WyJyZW1hcmsiXSxhbGlhc2VzOlsicGFuZG9jIl0sYWNlTW9kZToibWFya2Rvd24iLGNvZGVtaXJyb3JNb2RlOiJnZm0iLGNvZGVtaXJyb3JNaW1lVHlwZToidGV4dC94LWdmbSIsd3JhcDohMCxleHRlbnNpb25zOlsiLm1kIiwiLm1hcmtkb3duIiwiLm1kb3duIiwiLm1kd24iLCIubWtkIiwiLm1rZG4iLCIubWtkb3duIiwiLnJvbiIsIi53b3JrYm9vayJdLGZpbGVuYW1lczpbIlJFQURNRSJdLHRtU2NvcGU6InNvdXJjZS5nZm0iLGxpbmd1aXN0TGFuZ3VhZ2VJZDoyMjIsdnNjb2RlTGFuZ3VhZ2VJZHM6WyJtYXJrZG93biJdfV0scHJpbnRlcnMkMz17bWRhc3Q6cHJpbnRlck1hcmtkb3dufSxsYW5ndWFnZU1hcmtkb3duPXtsYW5ndWFnZXM6bGFuZ3VhZ2VzJDMsb3B0aW9uczpvcHRpb25zJDEyLHByaW50ZXJzOnByaW50ZXJzJDN9LF9yZXF1aXJlJCQwJGJ1aWxkZXJzJDc9ZG9jLmJ1aWxkZXJzLGNvbmNhdCQxMj1fcmVxdWlyZSQkMCRidWlsZGVycyQ3LmNvbmNhdCxoYXJkbGluZSQxMT1fcmVxdWlyZSQkMCRidWlsZGVycyQ3LmhhcmRsaW5lLGVtYmVkXzEkND1lbWJlZCQ0LF9yZXF1aXJlJCQwJGJ1aWxkZXJzJDY9ZG9jLmJ1aWxkZXJzLGNvbmNhdCQxMT1fcmVxdWlyZSQkMCRidWlsZGVycyQ2LmNvbmNhdCxoYXJkbGluZSQxMD1fcmVxdWlyZSQkMCRidWlsZGVycyQ2LmhhcmRsaW5lLGNsZWFuJDc9ZnVuY3Rpb24oZSx0KXtkZWxldGUgdC5zdGFydCxkZWxldGUgdC5lbmQsZGVsZXRlIHQuY29udGVudFN0YXJ0LGRlbGV0ZSB0LmNvbnRlbnRFbmR9LHByaW50ZXJWdWU9e3ByaW50OmdlbmVyaWNQcmludCQ2LGVtYmVkOmVtYmVkXzEkNCxtYXNzYWdlQXN0Tm9kZTpjbGVhbiQ3fSxsYW5ndWFnZXMkND1be25hbWU6IlZ1ZSIsc2luY2U6IjEuMTAuMCIscGFyc2VyczpbInZ1ZSJdLGdyb3VwOiJIVE1MIix0bVNjb3BlOiJ0ZXh0Lmh0bWwudnVlIixhY2VNb2RlOiJodG1sIixjb2RlbWlycm9yTW9kZToiaHRtbG1peGVkIixjb2RlbWlycm9yTWltZVR5cGU6InRleHQvaHRtbCIsZXh0ZW5zaW9uczpbIi52dWUiXSxsaW5ndWlzdExhbmd1YWdlSWQ6MTQ2LHZzY29kZUxhbmd1YWdlSWRzOlsidnVlIl19XSxwcmludGVycyQ0PXt2dWU6cHJpbnRlclZ1ZX0sbGFuZ3VhZ2VWdWU9e2xhbmd1YWdlczpsYW5ndWFnZXMkNCxwcmludGVyczpwcmludGVycyQ0fSx2ZXJzaW9uPXJlcXVpcmUkJDAudmVyc2lvbixnZXRTdXBwb3J0SW5mbz1zdXBwb3J0LmdldFN1cHBvcnRJbmZvLGludGVybmFsUGx1Z2lucz1bbGFuZ3VhZ2VKcyxsYW5ndWFnZUNzcyxsYW5ndWFnZUdyYXBocWwsbGFuZ3VhZ2VNYXJrZG93bixsYW5ndWFnZVZ1ZV0saXNBcnJheT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfSxmb3JtYXRXaXRoQ3Vyc29yPXdpdGhQbHVnaW5zKGNvcmUuZm9ybWF0V2l0aEN1cnNvciksc3RhbmRhbG9uZT17Zm9ybWF0V2l0aEN1cnNvcjpmb3JtYXRXaXRoQ3Vyc29yLGZvcm1hdDpmdW5jdGlvbihlLHQpe3JldHVybiBmb3JtYXRXaXRoQ3Vyc29yKGUsdCkuZm9ybWF0dGVkfSxjaGVjazpmdW5jdGlvbihlLHQpe3JldHVybiBmb3JtYXRXaXRoQ3Vyc29yKGUsdCkuZm9ybWF0dGVkPT09ZX0sZG9jOmRvYyxnZXRTdXBwb3J0SW5mbzp3aXRoUGx1Z2lucyhnZXRTdXBwb3J0SW5mbyksdmVyc2lvbjp2ZXJzaW9uLHV0aWw6dXRpbFNoYXJlZCxfX2RlYnVnOntwYXJzZTp3aXRoUGx1Z2lucyhjb3JlLnBhcnNlKSxmb3JtYXRBU1Q6d2l0aFBsdWdpbnMoY29yZS5mb3JtYXRBU1QpLGZvcm1hdERvYzp3aXRoUGx1Z2lucyhjb3JlLmZvcm1hdERvYykscHJpbnRUb0RvYzp3aXRoUGx1Z2lucyhjb3JlLnByaW50VG9Eb2MpLHByaW50RG9jVG9TdHJpbmc6d2l0aFBsdWdpbnMoY29yZS5wcmludERvY1RvU3RyaW5nKX19O3JldHVybiBzdGFuZGFsb25lfSl9KS5jYWxsKGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXygxMSkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQsbil7ZS5leHBvcnRzPW4oKX0oMCxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQpe3JldHVybihlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkodCl9ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZSh0PXtleHBvcnRzOnt9fSx0LmV4cG9ydHMpLHQuZXhwb3J0c312YXIgcj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBTeW50YXhFcnJvcihlKyIgKCIrdC5zdGFydC5saW5lKyI6Iit0LnN0YXJ0LmNvbHVtbisiKSIpO3JldHVybiBuLmxvYz10LG59LGk9bihmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldExvY2F0aW9uPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS9cclxufFtcblxyXS9nLHI9MSxpPXQrMSxvPXZvaWQgMDsobz1uLmV4ZWMoZS5ib2R5KSkmJm8uaW5kZXg8dDspcis9MSxpPXQrMS0oby5pbmRleCtvWzBdLmxlbmd0aCk7cmV0dXJue2xpbmU6cixjb2x1bW46aX19fSk7dChpKTt2YXIgbz1uKGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuS2luZD1PYmplY3QuZnJlZXplKHtOQU1FOiJOYW1lIixET0NVTUVOVDoiRG9jdW1lbnQiLE9QRVJBVElPTl9ERUZJTklUSU9OOiJPcGVyYXRpb25EZWZpbml0aW9uIixWQVJJQUJMRV9ERUZJTklUSU9OOiJWYXJpYWJsZURlZmluaXRpb24iLFZBUklBQkxFOiJWYXJpYWJsZSIsU0VMRUNUSU9OX1NFVDoiU2VsZWN0aW9uU2V0IixGSUVMRDoiRmllbGQiLEFSR1VNRU5UOiJBcmd1bWVudCIsRlJBR01FTlRfU1BSRUFEOiJGcmFnbWVudFNwcmVhZCIsSU5MSU5FX0ZSQUdNRU5UOiJJbmxpbmVGcmFnbWVudCIsRlJBR01FTlRfREVGSU5JVElPTjoiRnJhZ21lbnREZWZpbml0aW9uIixJTlQ6IkludFZhbHVlIixGTE9BVDoiRmxvYXRWYWx1ZSIsU1RSSU5HOiJTdHJpbmdWYWx1ZSIsQk9PTEVBTjoiQm9vbGVhblZhbHVlIixOVUxMOiJOdWxsVmFsdWUiLEVOVU06IkVudW1WYWx1ZSIsTElTVDoiTGlzdFZhbHVlIixPQkpFQ1Q6Ik9iamVjdFZhbHVlIixPQkpFQ1RfRklFTEQ6Ik9iamVjdEZpZWxkIixESVJFQ1RJVkU6IkRpcmVjdGl2ZSIsTkFNRURfVFlQRToiTmFtZWRUeXBlIixMSVNUX1RZUEU6Ikxpc3RUeXBlIixOT05fTlVMTF9UWVBFOiJOb25OdWxsVHlwZSIsU0NIRU1BX0RFRklOSVRJT046IlNjaGVtYURlZmluaXRpb24iLE9QRVJBVElPTl9UWVBFX0RFRklOSVRJT046Ik9wZXJhdGlvblR5cGVEZWZpbml0aW9uIixTQ0FMQVJfVFlQRV9ERUZJTklUSU9OOiJTY2FsYXJUeXBlRGVmaW5pdGlvbiIsT0JKRUNUX1RZUEVfREVGSU5JVElPTjoiT2JqZWN0VHlwZURlZmluaXRpb24iLEZJRUxEX0RFRklOSVRJT046IkZpZWxkRGVmaW5pdGlvbiIsSU5QVVRfVkFMVUVfREVGSU5JVElPTjoiSW5wdXRWYWx1ZURlZmluaXRpb24iLElOVEVSRkFDRV9UWVBFX0RFRklOSVRJT046IkludGVyZmFjZVR5cGVEZWZpbml0aW9uIixVTklPTl9UWVBFX0RFRklOSVRJT046IlVuaW9uVHlwZURlZmluaXRpb24iLEVOVU1fVFlQRV9ERUZJTklUSU9OOiJFbnVtVHlwZURlZmluaXRpb24iLEVOVU1fVkFMVUVfREVGSU5JVElPTjoiRW51bVZhbHVlRGVmaW5pdGlvbiIsSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTjoiSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbiIsU0NBTEFSX1RZUEVfRVhURU5TSU9OOiJTY2FsYXJUeXBlRXh0ZW5zaW9uIixPQkpFQ1RfVFlQRV9FWFRFTlNJT046Ik9iamVjdFR5cGVFeHRlbnNpb24iLElOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTjoiSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsVU5JT05fVFlQRV9FWFRFTlNJT046IlVuaW9uVHlwZUV4dGVuc2lvbiIsRU5VTV9UWVBFX0VYVEVOU0lPTjoiRW51bVR5cGVFeHRlbnNpb24iLElOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTjoiSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIixESVJFQ1RJVkVfREVGSU5JVElPTjoiRGlyZWN0aXZlRGVmaW5pdGlvbiJ9KX0pO3Qobyk7dmFyIGE9bihmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj10LmxpbmUsaT1lLmxvY2F0aW9uT2Zmc2V0LmxpbmUtMSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDE9PT10LmxpbmU/ZS5sb2NhdGlvbk9mZnNldC5jb2x1bW4tMTowfShlLHQpLHM9bitpLHU9dC5jb2x1bW4rYSxjPShzLTEpLnRvU3RyaW5nKCksbD1zLnRvU3RyaW5nKCkscD0ocysxKS50b1N0cmluZygpLGY9cC5sZW5ndGgsZD1lLmJvZHkuc3BsaXQoL1xyXG58W1xuXHJdL2cpO3JldHVybiBkWzBdPXIoZS5sb2NhdGlvbk9mZnNldC5jb2x1bW4tMSkrZFswXSxbZS5uYW1lKyIgKCIrcysiOiIrdSsiKSIsbj49MiYmbyhmLGMpKyI6ICIrZFtuLTJdLG8oZixsKSsiOiAiK2Rbbi0xXSxyKDIrZit1LTEpKyJeIixuPGQubGVuZ3RoJiZvKGYscCkrIjogIitkW25dXS5maWx0ZXIoQm9vbGVhbikuam9pbigiXG4iKX1mdW5jdGlvbiByKGUpe3JldHVybiBBcnJheShlKzEpLmpvaW4oIiAiKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHIoZS10Lmxlbmd0aCkrdH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wcmludEVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKGUubm9kZXMpZS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UubG9jJiZ0LnB1c2gobihlLmxvYy5zb3VyY2UsKDAsaS5nZXRMb2NhdGlvbikoZS5sb2Muc291cmNlLGUubG9jLnN0YXJ0KSkpfSk7ZWxzZSBpZihlLnNvdXJjZSYmZS5sb2NhdGlvbnMpe3ZhciByPWUuc291cmNlO2UubG9jYXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKG4ocixlKSl9KX1yZXR1cm4gMD09PXQubGVuZ3RoP2UubWVzc2FnZTpbZS5tZXNzYWdlXS5jb25jYXQodCkuam9pbigiXG5cbiIpKyJcbiJ9fSk7dChhKTt2YXIgcz1uKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQscixvLGEscyx1KXt2YXIgYz1BcnJheS5pc0FycmF5KHQpPzAhPT10Lmxlbmd0aD90OnZvaWQgMDp0P1t0XTp2b2lkIDAsbD1yO2lmKCFsJiZjKXt2YXIgcD1jWzBdO2w9cCYmcC5sb2MmJnAubG9jLnNvdXJjZX12YXIgZj1vOyFmJiZjJiYoZj1jLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiB0LmxvYyYmZS5wdXNoKHQubG9jLnN0YXJ0KSxlfSxbXSkpLGYmJjA9PT1mLmxlbmd0aCYmKGY9dm9pZCAwKTt2YXIgZD12b2lkIDA7byYmcj9kPW8ubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLGkuZ2V0TG9jYXRpb24pKHIsZSl9KTpjJiYoZD1jLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiB0LmxvYyYmZS5wdXNoKCgwLGkuZ2V0TG9jYXRpb24pKHQubG9jLnNvdXJjZSx0LmxvYy5zdGFydCkpLGV9LFtdKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bWVzc2FnZTp7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwfSxsb2NhdGlvbnM6e3ZhbHVlOmR8fHZvaWQgMCxlbnVtZXJhYmxlOiEwfSxwYXRoOnt2YWx1ZTphfHx2b2lkIDAsZW51bWVyYWJsZTohMH0sbm9kZXM6e3ZhbHVlOmN8fHZvaWQgMH0sc291cmNlOnt2YWx1ZTpsfHx2b2lkIDB9LHBvc2l0aW9uczp7dmFsdWU6Znx8dm9pZCAwfSxvcmlnaW5hbEVycm9yOnt2YWx1ZTpzfSxleHRlbnNpb25zOnt2YWx1ZTp1fHxzJiZzLmV4dGVuc2lvbnN9fSkscyYmcy5zdGFjaz9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTpzLnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOkVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsbik6T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YWNrIix7dmFsdWU6RXJyb3IoKS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HcmFwaFFMRXJyb3I9bixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm59LG5hbWU6e3ZhbHVlOiJHcmFwaFFMRXJyb3IifSx0b1N0cmluZzp7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnByaW50RXJyb3IpKHRoaXMpfX19KX0pO3Qocyk7dmFyIHU9bihmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnN5bnRheEVycm9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IHMuR3JhcGhRTEVycm9yKCJTeW50YXggRXJyb3I6ICIrbix2b2lkIDAsZSxbdF0pfX0pO3QodSk7dmFyIGM9bihmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvY2F0ZWRFcnJvcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJkFycmF5LmlzQXJyYXkoZS5wYXRoKT9lOm5ldyBzLkdyYXBoUUxFcnJvcihlJiZlLm1lc3NhZ2UsZSYmZS5ub2Rlc3x8dCxlJiZlLnNvdXJjZSxlJiZlLnBvc2l0aW9ucyxuLGUpfX0pO3QoYyk7dmFyIGw9bihmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fSk7dChsKTt2YXIgcD1uKGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuZm9ybWF0RXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fCgwLGkuZGVmYXVsdCkoMCwiUmVjZWl2ZWQgbnVsbCBvciB1bmRlZmluZWQgZXJyb3IuIiksbih7fSxlLmV4dGVuc2lvbnMse21lc3NhZ2U6ZS5tZXNzYWdlfHwiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iLGxvY2F0aW9uczplLmxvY2F0aW9ucyxwYXRoOmUucGF0aH0pfTt2YXIgcixpPShyPWwpJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX0pO3QocCk7dmFyIGY9bihmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JhcGhRTEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5HcmFwaFFMRXJyb3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN5bnRheEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5zeW50YXhFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9jYXRlZEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5sb2NhdGVkRXJyb3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByaW50RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLnByaW50RXJyb3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZvcm1hdEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5mb3JtYXRFcnJvcn19KX0pO3QoZik7dmFyIGQ9bihmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aCYmKCIgIj09PWVbdF18fCJcdCI9PT1lW3RdKTspdCsrO3JldHVybiB0fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIG4oZSk9PT1lLmxlbmd0aH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KC9cclxufFtcblxyXS9nKSxpPW51bGwsbz0xO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9bihhKTtpZihzPGEubGVuZ3RoJiYobnVsbD09PWl8fHM8aSkmJjA9PT0oaT1zKSlicmVha31pZihpKWZvcih2YXIgdT0xO3U8dC5sZW5ndGg7dSsrKXRbdV09dFt1XS5zbGljZShpKTtmb3IoO3QubGVuZ3RoPjAmJnIodFswXSk7KXQuc2hpZnQoKTtmb3IoO3QubGVuZ3RoPjAmJnIodFt0Lmxlbmd0aC0xXSk7KXQucG9wKCk7cmV0dXJuIHQuam9pbigiXG4iKX19KTt0KGQpO3ZhciBoPW4oZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMubGFzdFRva2VuPXRoaXMudG9rZW4sdGhpcy50b2tlbj10aGlzLmxvb2thaGVhZCgpfWZ1bmN0aW9uIHIoKXt2YXIgZT10aGlzLnRva2VuO2lmKGUua2luZCE9PXAuRU9GKWRve2U9ZS5uZXh0fHwoZS5uZXh0PWEodGhpcyxlKSl9d2hpbGUoZS5raW5kPT09cC5DT01NRU5UKTtyZXR1cm4gZX1mdW5jdGlvbiBpKGUsdCxuLHIsaSxvLGEpe3RoaXMua2luZD1lLHRoaXMuc3RhcnQ9dCx0aGlzLmVuZD1uLHRoaXMubGluZT1yLHRoaXMuY29sdW1uPWksdGhpcy52YWx1ZT1hLHRoaXMucHJldj1vLHRoaXMubmV4dD1udWxsfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGlzTmFOKGUpP3AuRU9GOmU8MTI3P0pTT04uc3RyaW5naWZ5KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOiciXFx1JysoIjAwIitlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKS5zbGljZSgtNCkrJyInfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1lLnNvdXJjZSxyPW4uYm9keSxhPXIubGVuZ3RoLGM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1lLmxlbmd0aCxpPXQ7aTxyOyl7dmFyIG89aC5jYWxsKGUsaSk7aWYoOT09PW98fDMyPT09b3x8NDQ9PT1vfHw2NTI3OT09PW8pKytpO2Vsc2UgaWYoMTA9PT1vKSsraSwrK24ubGluZSxuLmxpbmVTdGFydD1pO2Vsc2V7aWYoMTMhPT1vKWJyZWFrOzEwPT09aC5jYWxsKGUsaSsxKT9pKz0yOisraSwrK24ubGluZSxuLmxpbmVTdGFydD1pfX1yZXR1cm4gaX0ocix0LmVuZCxlKSxkPWUubGluZSxnPTErYy1lLmxpbmVTdGFydDtpZihjPj1hKXJldHVybiBuZXcgaShwLkVPRixhLGEsZCxnLHQpO3ZhciB5PWguY2FsbChyLGMpO2lmKHk8MzImJjkhPT15JiYxMCE9PXkmJjEzIT09eSl0aHJvdygwLGYuc3ludGF4RXJyb3IpKG4sYywiQ2Fubm90IGNvbnRhaW4gdGhlIGludmFsaWQgY2hhcmFjdGVyICIrbyh5KSsiLiIpO3N3aXRjaCh5KXtjYXNlIDMzOnJldHVybiBuZXcgaShwLkJBTkcsYyxjKzEsZCxnLHQpO2Nhc2UgMzU6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9ZS5ib2R5LHM9dm9pZCAwLHU9dDtkb3tzPWguY2FsbChhLCsrdSl9d2hpbGUobnVsbCE9PXMmJihzPjMxfHw5PT09cykpO3JldHVybiBuZXcgaShwLkNPTU1FTlQsdCx1LG4scixvLG0uY2FsbChhLHQrMSx1KSl9KG4sYyxkLGcsdCk7Y2FzZSAzNjpyZXR1cm4gbmV3IGkocC5ET0xMQVIsYyxjKzEsZCxnLHQpO2Nhc2UgMzg6cmV0dXJuIG5ldyBpKHAuQU1QLGMsYysxLGQsZyx0KTtjYXNlIDQwOnJldHVybiBuZXcgaShwLlBBUkVOX0wsYyxjKzEsZCxnLHQpO2Nhc2UgNDE6cmV0dXJuIG5ldyBpKHAuUEFSRU5fUixjLGMrMSxkLGcsdCk7Y2FzZSA0NjppZig0Nj09PWguY2FsbChyLGMrMSkmJjQ2PT09aC5jYWxsKHIsYysyKSlyZXR1cm4gbmV3IGkocC5TUFJFQUQsYyxjKzMsZCxnLHQpO2JyZWFrO2Nhc2UgNTg6cmV0dXJuIG5ldyBpKHAuQ09MT04sYyxjKzEsZCxnLHQpO2Nhc2UgNjE6cmV0dXJuIG5ldyBpKHAuRVFVQUxTLGMsYysxLGQsZyx0KTtjYXNlIDY0OnJldHVybiBuZXcgaShwLkFULGMsYysxLGQsZyx0KTtjYXNlIDkxOnJldHVybiBuZXcgaShwLkJSQUNLRVRfTCxjLGMrMSxkLGcsdCk7Y2FzZSA5MzpyZXR1cm4gbmV3IGkocC5CUkFDS0VUX1IsYyxjKzEsZCxnLHQpO2Nhc2UgMTIzOnJldHVybiBuZXcgaShwLkJSQUNFX0wsYyxjKzEsZCxnLHQpO2Nhc2UgMTI0OnJldHVybiBuZXcgaShwLlBJUEUsYyxjKzEsZCxnLHQpO2Nhc2UgMTI1OnJldHVybiBuZXcgaShwLkJSQUNFX1IsYyxjKzEsZCxnLHQpO2Nhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOmNhc2UgNzE6Y2FzZSA3MjpjYXNlIDczOmNhc2UgNzQ6Y2FzZSA3NTpjYXNlIDc2OmNhc2UgNzc6Y2FzZSA3ODpjYXNlIDc5OmNhc2UgODA6Y2FzZSA4MTpjYXNlIDgyOmNhc2UgODM6Y2FzZSA4NDpjYXNlIDg1OmNhc2UgODY6Y2FzZSA4NzpjYXNlIDg4OmNhc2UgODk6Y2FzZSA5MDpjYXNlIDk1OmNhc2UgOTc6Y2FzZSA5ODpjYXNlIDk5OmNhc2UgMTAwOmNhc2UgMTAxOmNhc2UgMTAyOmNhc2UgMTAzOmNhc2UgMTA0OmNhc2UgMTA1OmNhc2UgMTA2OmNhc2UgMTA3OmNhc2UgMTA4OmNhc2UgMTA5OmNhc2UgMTEwOmNhc2UgMTExOmNhc2UgMTEyOmNhc2UgMTEzOmNhc2UgMTE0OmNhc2UgMTE1OmNhc2UgMTE2OmNhc2UgMTE3OmNhc2UgMTE4OmNhc2UgMTE5OmNhc2UgMTIwOmNhc2UgMTIxOmNhc2UgMTIyOnJldHVybiBmdW5jdGlvbihlLHQsbixyLG8pe2Zvcih2YXIgYT1lLmJvZHkscz1hLmxlbmd0aCx1PXQrMSxjPTA7dSE9PXMmJm51bGwhPT0oYz1oLmNhbGwoYSx1KSkmJig5NT09PWN8fGM+PTQ4JiZjPD01N3x8Yz49NjUmJmM8PTkwfHxjPj05NyYmYzw9MTIyKTspKyt1O3JldHVybiBuZXcgaShwLk5BTUUsdCx1LG4scixvLG0uY2FsbChhLHQsdSkpfShuLGMsZCxnLHQpO2Nhc2UgNDU6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixhLHUpe3ZhciBjPWUuYm9keSxsPW4sZD10LGc9ITE7aWYoNDU9PT1sJiYobD1oLmNhbGwoYywrK2QpKSw0OD09PWwpe2lmKChsPWguY2FsbChjLCsrZCkpPj00OCYmbDw9NTcpdGhyb3coMCxmLnN5bnRheEVycm9yKShlLGQsIkludmFsaWQgbnVtYmVyLCB1bmV4cGVjdGVkIGRpZ2l0IGFmdGVyIDA6ICIrbyhsKSsiLiIpfWVsc2UgZD1zKGUsZCxsKSxsPWguY2FsbChjLGQpO3JldHVybiA0Nj09PWwmJihnPSEwLGw9aC5jYWxsKGMsKytkKSxkPXMoZSxkLGwpLGw9aC5jYWxsKGMsZCkpLDY5IT09bCYmMTAxIT09bHx8KGc9ITAsNDMhPT0obD1oLmNhbGwoYywrK2QpKSYmNDUhPT1sfHwobD1oLmNhbGwoYywrK2QpKSxkPXMoZSxkLGwpKSxuZXcgaShnP3AuRkxPQVQ6cC5JTlQsdCxkLHIsYSx1LG0uY2FsbChjLHQsZCkpfShuLGMseSxkLGcsdCk7Y2FzZSAzNDpyZXR1cm4gMzQ9PT1oLmNhbGwocixjKzEpJiYzND09PWguY2FsbChyLGMrMik/ZnVuY3Rpb24oZSx0LG4scixhKXtmb3IodmFyIHM9ZS5ib2R5LHU9dCszLGM9dSxkPTAsZz0iIjt1PHMubGVuZ3RoJiZudWxsIT09KGQ9aC5jYWxsKHMsdSkpOyl7aWYoMzQ9PT1kJiYzND09PWguY2FsbChzLHUrMSkmJjM0PT09aC5jYWxsKHMsdSsyKSlyZXR1cm4gZys9bS5jYWxsKHMsYyx1KSxuZXcgaShwLkJMT0NLX1NUUklORyx0LHUrMyxuLHIsYSwoMCxsLmRlZmF1bHQpKGcpKTtpZihkPDMyJiY5IT09ZCYmMTAhPT1kJiYxMyE9PWQpdGhyb3coMCxmLnN5bnRheEVycm9yKShlLHUsIkludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICIrbyhkKSsiLiIpOzkyPT09ZCYmMzQ9PT1oLmNhbGwocyx1KzEpJiYzND09PWguY2FsbChzLHUrMikmJjM0PT09aC5jYWxsKHMsdSszKT8oZys9bS5jYWxsKHMsYyx1KSsnIiIiJyxjPXUrPTQpOisrdX10aHJvdygwLGYuc3ludGF4RXJyb3IpKGUsdSwiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX0obixjLGQsZyx0KTpmdW5jdGlvbihlLHQsbixyLGEpe2Zvcih2YXIgcz1lLmJvZHksYz10KzEsbD1jLGQ9MCxnPSIiO2M8cy5sZW5ndGgmJm51bGwhPT0oZD1oLmNhbGwocyxjKSkmJjEwIT09ZCYmMTMhPT1kOyl7aWYoMzQ9PT1kKXJldHVybiBnKz1tLmNhbGwocyxsLGMpLG5ldyBpKHAuU1RSSU5HLHQsYysxLG4scixhLGcpO2lmKGQ8MzImJjkhPT1kKXRocm93KDAsZi5zeW50YXhFcnJvcikoZSxjLCJJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAiK28oZCkrIi4iKTtpZigrK2MsOTI9PT1kKXtzd2l0Y2goZys9bS5jYWxsKHMsbCxjLTEpLGQ9aC5jYWxsKHMsYykpe2Nhc2UgMzQ6Zys9JyInO2JyZWFrO2Nhc2UgNDc6Zys9Ii8iO2JyZWFrO2Nhc2UgOTI6Zys9IlxcIjticmVhaztjYXNlIDk4OmcrPSJcYiI7YnJlYWs7Y2FzZSAxMDI6Zys9IlxmIjticmVhaztjYXNlIDExMDpnKz0iXG4iO2JyZWFrO2Nhc2UgMTE0OmcrPSJcciI7YnJlYWs7Y2FzZSAxMTY6Zys9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgeT0odj1oLmNhbGwocyxjKzEpLGI9aC5jYWxsKHMsYysyKSx4PWguY2FsbChzLGMrMyksQz1oLmNhbGwocyxjKzQpLHUodik8PDEyfHUoYik8PDh8dSh4KTw8NHx1KEMpKTtpZih5PDApdGhyb3coMCxmLnN5bnRheEVycm9yKShlLGMsIkludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogXFx1IitzLnNsaWNlKGMrMSxjKzUpKyIuIik7Zys9U3RyaW5nLmZyb21DaGFyQ29kZSh5KSxjKz00O2JyZWFrO2RlZmF1bHQ6dGhyb3coMCxmLnN5bnRheEVycm9yKShlLGMsIkludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoZCkrIi4iKX1sPSsrY319dmFyIHYsYix4LEM7dGhyb3coMCxmLnN5bnRheEVycm9yKShlLGMsIlVudGVybWluYXRlZCBzdHJpbmcuIil9KG4sYyxkLGcsdCl9dGhyb3coMCxmLnN5bnRheEVycm9yKShuLGMsZnVuY3Rpb24oZSl7cmV0dXJuIDM5PT09ZT8iVW5leHBlY3RlZCBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyICgnKSwgZGlkIHlvdSBtZWFuIHRvIHVzZSBhIGRvdWJsZSBxdW90ZSAoXCIpPyI6IkNhbm5vdCBwYXJzZSB0aGUgdW5leHBlY3RlZCBjaGFyYWN0ZXIgIitvKGUpKyIuIn0oeSkpfWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByPWUuYm9keSxpPXQsYT1uO2lmKGE+PTQ4JiZhPD01Nyl7ZG97YT1oLmNhbGwociwrK2kpfXdoaWxlKGE+PTQ4JiZhPD01Nyk7cmV0dXJuIGl9dGhyb3coMCxmLnN5bnRheEVycm9yKShlLGksIkludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAiK28oYSkrIi4iKX1mdW5jdGlvbiB1KGUpe3JldHVybiBlPj00OCYmZTw9NTc/ZS00ODplPj02NSYmZTw9NzA/ZS01NTplPj05NyYmZTw9MTAyP2UtODc6LTF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9rZW5LaW5kPXZvaWQgMCx0LmNyZWF0ZUxleGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89bmV3IGkocC5TT0YsMCwwLDAsMCxudWxsKTtyZXR1cm57c291cmNlOmUsb3B0aW9uczp0LGxhc3RUb2tlbjpvLHRva2VuOm8sbGluZToxLGxpbmVTdGFydDowLGFkdmFuY2U6bixsb29rYWhlYWQ6cn19LHQuZ2V0VG9rZW5EZXNjPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIHQ/ZS5raW5kKycgIicrdCsnIic6ZS5raW5kfTt2YXIgYyxsPShjPWQpJiZjLl9fZXNNb2R1bGU/Yzp7ZGVmYXVsdDpjfSxwPXQuVG9rZW5LaW5kPU9iamVjdC5mcmVlemUoe1NPRjoiPFNPRj4iLEVPRjoiPEVPRj4iLEJBTkc6IiEiLERPTExBUjoiJCIsQU1QOiImIixQQVJFTl9MOiIoIixQQVJFTl9SOiIpIixTUFJFQUQ6Ii4uLiIsQ09MT046IjoiLEVRVUFMUzoiPSIsQVQ6IkAiLEJSQUNLRVRfTDoiWyIsQlJBQ0tFVF9SOiJdIixCUkFDRV9MOiJ7IixQSVBFOiJ8IixCUkFDRV9SOiJ9IixOQU1FOiJOYW1lIixJTlQ6IkludCIsRkxPQVQ6IkZsb2F0IixTVFJJTkc6IlN0cmluZyIsQkxPQ0tfU1RSSU5HOiJCbG9ja1N0cmluZyIsQ09NTUVOVDoiQ29tbWVudCJ9KSxoPVN0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCxtPVN0cmluZy5wcm90b3R5cGUuc2xpY2U7aS5wcm90b3R5cGUudG9KU09OPWkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm57a2luZDp0aGlzLmtpbmQsdmFsdWU6dGhpcy52YWx1ZSxsaW5lOnRoaXMubGluZSxjb2x1bW46dGhpcy5jb2x1bW59fX0pO3QoaCk7dmFyIG09bihmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNvdXJjZT12b2lkIDA7dmFyIG4scj0obj1sKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07dC5Tb3VyY2U9ZnVuY3Rpb24gZSh0LG4saSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5ib2R5PXQsdGhpcy5uYW1lPW58fCJHcmFwaFFMIHJlcXVlc3QiLHRoaXMubG9jYXRpb25PZmZzZXQ9aXx8e2xpbmU6MSxjb2x1bW46MX0sdGhpcy5sb2NhdGlvbk9mZnNldC5saW5lPjB8fCgwLHIuZGVmYXVsdCkoMCwibGluZSBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUiKSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbj4wfHwoMCxyLmRlZmF1bHQpKDAsImNvbHVtbiBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUiKX19KTt0KG0pO3ZhciBnPW4oZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EaXJlY3RpdmVMb2NhdGlvbj1PYmplY3QuZnJlZXplKHtRVUVSWToiUVVFUlkiLE1VVEFUSU9OOiJNVVRBVElPTiIsU1VCU0NSSVBUSU9OOiJTVUJTQ1JJUFRJT04iLEZJRUxEOiJGSUVMRCIsRlJBR01FTlRfREVGSU5JVElPTjoiRlJBR01FTlRfREVGSU5JVElPTiIsRlJBR01FTlRfU1BSRUFEOiJGUkFHTUVOVF9TUFJFQUQiLElOTElORV9GUkFHTUVOVDoiSU5MSU5FX0ZSQUdNRU5UIixTQ0hFTUE6IlNDSEVNQSIsU0NBTEFSOiJTQ0FMQVIiLE9CSkVDVDoiT0JKRUNUIixGSUVMRF9ERUZJTklUSU9OOiJGSUVMRF9ERUZJTklUSU9OIixBUkdVTUVOVF9ERUZJTklUSU9OOiJBUkdVTUVOVF9ERUZJTklUSU9OIixJTlRFUkZBQ0U6IklOVEVSRkFDRSIsVU5JT046IlVOSU9OIixFTlVNOiJFTlVNIixFTlVNX1ZBTFVFOiJFTlVNX1ZBTFVFIixJTlBVVF9PQkpFQ1Q6IklOUFVUX09CSkVDVCIsSU5QVVRfRklFTERfREVGSU5JVElPTjoiSU5QVVRfRklFTERfREVGSU5JVElPTiJ9KX0pO3QoZyk7dmFyIHk9bihmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9UShlLGguVG9rZW5LaW5kLk5BTUUpO3JldHVybntraW5kOm8uS2luZC5OQU1FLHZhbHVlOnQudmFsdWUsbG9jOlYoZSx0KX19ZnVuY3Rpb24gcihlKXtpZihIKGUsaC5Ub2tlbktpbmQuTkFNRSkpc3dpdGNoKGUudG9rZW4udmFsdWUpe2Nhc2UicXVlcnkiOmNhc2UibXV0YXRpb24iOmNhc2Uic3Vic2NyaXB0aW9uIjpjYXNlImZyYWdtZW50IjpyZXR1cm4gaShlKTtjYXNlInNjaGVtYSI6Y2FzZSJzY2FsYXIiOmNhc2UidHlwZSI6Y2FzZSJpbnRlcmZhY2UiOmNhc2UidW5pb24iOmNhc2UiZW51bSI6Y2FzZSJpbnB1dCI6Y2FzZSJleHRlbmQiOmNhc2UiZGlyZWN0aXZlIjpyZXR1cm4gTyhlKX1lbHNle2lmKEgoZSxoLlRva2VuS2luZC5CUkFDRV9MKSlyZXR1cm4gaShlKTtpZihGKGUpKXJldHVybiBPKGUpfXRocm93IEooZSl9ZnVuY3Rpb24gaShlKXtpZihIKGUsaC5Ub2tlbktpbmQuTkFNRSkpc3dpdGNoKGUudG9rZW4udmFsdWUpe2Nhc2UicXVlcnkiOmNhc2UibXV0YXRpb24iOmNhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4gYShlKTtjYXNlImZyYWdtZW50IjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2tlbjtyZXR1cm4gSyhlLCJmcmFnbWVudCIpLGUub3B0aW9ucy5leHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz97a2luZDpvLktpbmQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOngoZSksdmFyaWFibGVEZWZpbml0aW9uczp1KGUpLHR5cGVDb25kaXRpb246KEsoZSwib24iKSxUKGUpKSxkaXJlY3RpdmVzOmsoZSwhMSksc2VsZWN0aW9uU2V0OnAoZSksbG9jOlYoZSx0KX06e2tpbmQ6by5LaW5kLkZSQUdNRU5UX0RFRklOSVRJT04sbmFtZTp4KGUpLHR5cGVDb25kaXRpb246KEsoZSwib24iKSxUKGUpKSxkaXJlY3RpdmVzOmsoZSwhMSksc2VsZWN0aW9uU2V0OnAoZSksbG9jOlYoZSx0KX19KGUpfWVsc2UgaWYoSChlLGguVG9rZW5LaW5kLkJSQUNFX0wpKXJldHVybiBhKGUpO3Rocm93IEooZSl9ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnRva2VuO2lmKEgoZSxoLlRva2VuS2luZC5CUkFDRV9MKSlyZXR1cm57a2luZDpvLktpbmQuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOiJxdWVyeSIsbmFtZTp2b2lkIDAsdmFyaWFibGVEZWZpbml0aW9uczpbXSxkaXJlY3RpdmVzOltdLHNlbGVjdGlvblNldDpwKGUpLGxvYzpWKGUsdCl9O3ZhciByPXMoZSksaT12b2lkIDA7cmV0dXJuIEgoZSxoLlRva2VuS2luZC5OQU1FKSYmKGk9bihlKSkse2tpbmQ6by5LaW5kLk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpyLG5hbWU6aSx2YXJpYWJsZURlZmluaXRpb25zOnUoZSksZGlyZWN0aXZlczprKGUsITEpLHNlbGVjdGlvblNldDpwKGUpLGxvYzpWKGUsdCl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ9UShlLGguVG9rZW5LaW5kLk5BTUUpO3N3aXRjaCh0LnZhbHVlKXtjYXNlInF1ZXJ5IjpyZXR1cm4icXVlcnkiO2Nhc2UibXV0YXRpb24iOnJldHVybiJtdXRhdGlvbiI7Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiJzdWJzY3JpcHRpb24ifXRocm93IEooZSx0KX1mdW5jdGlvbiB1KGUpe3JldHVybiBIKGUsaC5Ub2tlbktpbmQuUEFSRU5fTCk/WShlLGguVG9rZW5LaW5kLlBBUkVOX0wsYyxoLlRva2VuS2luZC5QQVJFTl9SKTpbXX1mdW5jdGlvbiBjKGUpe3ZhciB0PWUudG9rZW47cmV0dXJue2tpbmQ6by5LaW5kLlZBUklBQkxFX0RFRklOSVRJT04sdmFyaWFibGU6bChlKSx0eXBlOihRKGUsaC5Ub2tlbktpbmQuQ09MT04pLF8oZSkpLGRlZmF1bHRWYWx1ZTpXKGUsaC5Ub2tlbktpbmQuRVFVQUxTKT9DKGUsITApOnZvaWQgMCxsb2M6VihlLHQpfX1mdW5jdGlvbiBsKGUpe3ZhciB0PWUudG9rZW47cmV0dXJuIFEoZSxoLlRva2VuS2luZC5ET0xMQVIpLHtraW5kOm8uS2luZC5WQVJJQUJMRSxuYW1lOm4oZSksbG9jOlYoZSx0KX19ZnVuY3Rpb24gcChlKXt2YXIgdD1lLnRva2VuO3JldHVybntraW5kOm8uS2luZC5TRUxFQ1RJT05fU0VULHNlbGVjdGlvbnM6WShlLGguVG9rZW5LaW5kLkJSQUNFX0wsZCxoLlRva2VuS2luZC5CUkFDRV9SKSxsb2M6VihlLHQpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBIKGUsaC5Ub2tlbktpbmQuU1BSRUFEKT9mdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuO2lmKFEoZSxoLlRva2VuS2luZC5TUFJFQUQpLEgoZSxoLlRva2VuS2luZC5OQU1FKSYmIm9uIiE9PWUudG9rZW4udmFsdWUpcmV0dXJue2tpbmQ6by5LaW5kLkZSQUdNRU5UX1NQUkVBRCxuYW1lOngoZSksZGlyZWN0aXZlczprKGUsITEpLGxvYzpWKGUsdCl9O3ZhciBuPXZvaWQgMDtyZXR1cm4ib24iPT09ZS50b2tlbi52YWx1ZSYmKGUuYWR2YW5jZSgpLG49VChlKSkse2tpbmQ6by5LaW5kLklOTElORV9GUkFHTUVOVCx0eXBlQ29uZGl0aW9uOm4sZGlyZWN0aXZlczprKGUsITEpLHNlbGVjdGlvblNldDpwKGUpLGxvYzpWKGUsdCl9fShlKTpmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuLHI9bihlKSxpPXZvaWQgMCxhPXZvaWQgMDtyZXR1cm4gVyhlLGguVG9rZW5LaW5kLkNPTE9OKT8oaT1yLGE9bihlKSk6YT1yLHtraW5kOm8uS2luZC5GSUVMRCxhbGlhczppLG5hbWU6YSxhcmd1bWVudHM6eShlLCExKSxkaXJlY3RpdmVzOmsoZSwhMSksc2VsZWN0aW9uU2V0OkgoZSxoLlRva2VuS2luZC5CUkFDRV9MKT9wKGUpOnZvaWQgMCxsb2M6VihlLHQpfX0oZSl9ZnVuY3Rpb24geShlLHQpe3ZhciBuPXQ/Yjp2O3JldHVybiBIKGUsaC5Ub2tlbktpbmQuUEFSRU5fTCk/WShlLGguVG9rZW5LaW5kLlBBUkVOX0wsbixoLlRva2VuS2luZC5QQVJFTl9SKTpbXX1mdW5jdGlvbiB2KGUpe3ZhciB0PWUudG9rZW47cmV0dXJue2tpbmQ6by5LaW5kLkFSR1VNRU5ULG5hbWU6bihlKSx2YWx1ZTooUShlLGguVG9rZW5LaW5kLkNPTE9OKSxDKGUsITEpKSxsb2M6VihlLHQpfX1mdW5jdGlvbiBiKGUpe3ZhciB0PWUudG9rZW47cmV0dXJue2tpbmQ6by5LaW5kLkFSR1VNRU5ULG5hbWU6bihlKSx2YWx1ZTooUShlLGguVG9rZW5LaW5kLkNPTE9OKSxEKGUpKSxsb2M6VihlLHQpfX1mdW5jdGlvbiB4KGUpe2lmKCJvbiI9PT1lLnRva2VuLnZhbHVlKXRocm93IEooZSk7cmV0dXJuIG4oZSl9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPWUudG9rZW47c3dpdGNoKG4ua2luZCl7Y2FzZSBoLlRva2VuS2luZC5CUkFDS0VUX0w6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b2tlbixyPXQ/RDp3O3JldHVybntraW5kOm8uS2luZC5MSVNULHZhbHVlczpmdW5jdGlvbihlLHQsbixyKXtRKGUsdCk7Zm9yKHZhciBpPVtdOyFXKGUscik7KWkucHVzaChuKGUpKTtyZXR1cm4gaX0oZSxoLlRva2VuS2luZC5CUkFDS0VUX0wscixoLlRva2VuS2luZC5CUkFDS0VUX1IpLGxvYzpWKGUsbil9fShlLHQpO2Nhc2UgaC5Ub2tlbktpbmQuQlJBQ0VfTDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRva2VuO1EoZSxoLlRva2VuS2luZC5CUkFDRV9MKTtmb3IodmFyIHI9W107IVcoZSxoLlRva2VuS2luZC5CUkFDRV9SKTspci5wdXNoKFMoZSx0KSk7cmV0dXJue2tpbmQ6by5LaW5kLk9CSkVDVCxmaWVsZHM6cixsb2M6VihlLG4pfX0oZSx0KTtjYXNlIGguVG9rZW5LaW5kLklOVDpyZXR1cm4gZS5hZHZhbmNlKCkse2tpbmQ6by5LaW5kLklOVCx2YWx1ZTpuLnZhbHVlLGxvYzpWKGUsbil9O2Nhc2UgaC5Ub2tlbktpbmQuRkxPQVQ6cmV0dXJuIGUuYWR2YW5jZSgpLHtraW5kOm8uS2luZC5GTE9BVCx2YWx1ZTpuLnZhbHVlLGxvYzpWKGUsbil9O2Nhc2UgaC5Ub2tlbktpbmQuU1RSSU5HOmNhc2UgaC5Ub2tlbktpbmQuQkxPQ0tfU1RSSU5HOnJldHVybiBFKGUpO2Nhc2UgaC5Ub2tlbktpbmQuTkFNRTpyZXR1cm4idHJ1ZSI9PT1uLnZhbHVlfHwiZmFsc2UiPT09bi52YWx1ZT8oZS5hZHZhbmNlKCkse2tpbmQ6by5LaW5kLkJPT0xFQU4sdmFsdWU6InRydWUiPT09bi52YWx1ZSxsb2M6VihlLG4pfSk6Im51bGwiPT09bi52YWx1ZT8oZS5hZHZhbmNlKCkse2tpbmQ6by5LaW5kLk5VTEwsbG9jOlYoZSxuKX0pOihlLmFkdmFuY2UoKSx7a2luZDpvLktpbmQuRU5VTSx2YWx1ZTpuLnZhbHVlLGxvYzpWKGUsbil9KTtjYXNlIGguVG9rZW5LaW5kLkRPTExBUjppZighdClyZXR1cm4gbChlKX10aHJvdyBKKGUpfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZS50b2tlbjtyZXR1cm4gZS5hZHZhbmNlKCkse2tpbmQ6by5LaW5kLlNUUklORyx2YWx1ZTp0LnZhbHVlLGJsb2NrOnQua2luZD09PWguVG9rZW5LaW5kLkJMT0NLX1NUUklORyxsb2M6VihlLHQpfX1mdW5jdGlvbiBEKGUpe3JldHVybiBDKGUsITApfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIEMoZSwhMSl9ZnVuY3Rpb24gUyhlLHQpe3ZhciByPWUudG9rZW47cmV0dXJue2tpbmQ6by5LaW5kLk9CSkVDVF9GSUVMRCxuYW1lOm4oZSksdmFsdWU6KFEoZSxoLlRva2VuS2luZC5DT0xPTiksQyhlLHQpKSxsb2M6VihlLHIpfX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciBuPVtdO0goZSxoLlRva2VuS2luZC5BVCk7KW4ucHVzaChBKGUsdCkpO3JldHVybiBufWZ1bmN0aW9uIEEoZSx0KXt2YXIgcj1lLnRva2VuO3JldHVybiBRKGUsaC5Ub2tlbktpbmQuQVQpLHtraW5kOm8uS2luZC5ESVJFQ1RJVkUsbmFtZTpuKGUpLGFyZ3VtZW50czp5KGUsdCksbG9jOlYoZSxyKX19ZnVuY3Rpb24gXyhlKXt2YXIgdD1lLnRva2VuLG49dm9pZCAwO3JldHVybiBXKGUsaC5Ub2tlbktpbmQuQlJBQ0tFVF9MKT8obj1fKGUpLFEoZSxoLlRva2VuS2luZC5CUkFDS0VUX1IpLG49e2tpbmQ6by5LaW5kLkxJU1RfVFlQRSx0eXBlOm4sbG9jOlYoZSx0KX0pOm49VChlKSxXKGUsaC5Ub2tlbktpbmQuQkFORyk/e2tpbmQ6by5LaW5kLk5PTl9OVUxMX1RZUEUsdHlwZTpuLGxvYzpWKGUsdCl9Om59ZnVuY3Rpb24gVChlKXt2YXIgdD1lLnRva2VuO3JldHVybntraW5kOm8uS2luZC5OQU1FRF9UWVBFLG5hbWU6bihlKSxsb2M6VihlLHQpfX1mdW5jdGlvbiBPKGUpe3ZhciB0PUYoZSk/ZS5sb29rYWhlYWQoKTplLnRva2VuO2lmKHQua2luZD09PWguVG9rZW5LaW5kLk5BTUUpc3dpdGNoKHQudmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2tlbjtLKGUsInNjaGVtYSIpO3ZhciBuPWsoZSwhMCkscj1ZKGUsaC5Ub2tlbktpbmQuQlJBQ0VfTCxJLGguVG9rZW5LaW5kLkJSQUNFX1IpO3JldHVybntraW5kOm8uS2luZC5TQ0hFTUFfREVGSU5JVElPTixkaXJlY3RpdmVzOm4sb3BlcmF0aW9uVHlwZXM6cixsb2M6VihlLHQpfX0oZSk7Y2FzZSJzY2FsYXIiOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuLHI9TihlKTtLKGUsInNjYWxhciIpO3ZhciBpPW4oZSksYT1rKGUsITApO3JldHVybntraW5kOm8uS2luZC5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOnIsbmFtZTppLGRpcmVjdGl2ZXM6YSxsb2M6VihlLHQpfX0oZSk7Y2FzZSJ0eXBlIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2tlbixyPU4oZSk7SyhlLCJ0eXBlIik7dmFyIGk9bihlKSxhPUwoZSkscz1rKGUsITApLHU9UChlKTtyZXR1cm57a2luZDpvLktpbmQuT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpyLG5hbWU6aSxpbnRlcmZhY2VzOmEsZGlyZWN0aXZlczpzLGZpZWxkczp1LGxvYzpWKGUsdCl9fShlKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUudG9rZW4scj1OKGUpO0soZSwiaW50ZXJmYWNlIik7dmFyIGk9bihlKSxhPWsoZSwhMCkscz1QKGUpO3JldHVybntraW5kOm8uS2luZC5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOnIsbmFtZTppLGRpcmVjdGl2ZXM6YSxmaWVsZHM6cyxsb2M6VihlLHQpfX0oZSk7Y2FzZSJ1bmlvbiI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUudG9rZW4scj1OKGUpO0soZSwidW5pb24iKTt2YXIgaT1uKGUpLGE9ayhlLCEwKSxzPUIoZSk7cmV0dXJue2tpbmQ6by5LaW5kLlVOSU9OX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpyLG5hbWU6aSxkaXJlY3RpdmVzOmEsdHlwZXM6cyxsb2M6VihlLHQpfX0oZSk7Y2FzZSJlbnVtIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2tlbixyPU4oZSk7SyhlLCJlbnVtIik7dmFyIGk9bihlKSxhPWsoZSwhMCkscz0kKGUpO3JldHVybntraW5kOm8uS2luZC5FTlVNX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpyLG5hbWU6aSxkaXJlY3RpdmVzOmEsdmFsdWVzOnMsbG9jOlYoZSx0KX19KGUpO2Nhc2UiaW5wdXQiOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuLHI9TihlKTtLKGUsImlucHV0Iik7dmFyIGk9bihlKSxhPWsoZSwhMCkscz16KGUpO3JldHVybntraW5kOm8uS2luZC5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOnIsbmFtZTppLGRpcmVjdGl2ZXM6YSxmaWVsZHM6cyxsb2M6VihlLHQpfX0oZSk7Y2FzZSJleHRlbmQiOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxvb2thaGVhZCgpO2lmKHQua2luZD09PWguVG9rZW5LaW5kLk5BTUUpc3dpdGNoKHQudmFsdWUpe2Nhc2Uic2NhbGFyIjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2tlbjtLKGUsImV4dGVuZCIpLEsoZSwic2NhbGFyIik7dmFyIHI9bihlKSxpPWsoZSwhMCk7aWYoMD09PWkubGVuZ3RoKXRocm93IEooZSk7cmV0dXJue2tpbmQ6by5LaW5kLlNDQUxBUl9UWVBFX0VYVEVOU0lPTixuYW1lOnIsZGlyZWN0aXZlczppLGxvYzpWKGUsdCl9fShlKTtjYXNlInR5cGUiOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuO0soZSwiZXh0ZW5kIiksSyhlLCJ0eXBlIik7dmFyIHI9bihlKSxpPUwoZSksYT1rKGUsITApLHM9UChlKTtpZigwPT09aS5sZW5ndGgmJjA9PT1hLmxlbmd0aCYmMD09PXMubGVuZ3RoKXRocm93IEooZSk7cmV0dXJue2tpbmQ6by5LaW5kLk9CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOnIsaW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6YSxmaWVsZHM6cyxsb2M6VihlLHQpfX0oZSk7Y2FzZSJpbnRlcmZhY2UiOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuO0soZSwiZXh0ZW5kIiksSyhlLCJpbnRlcmZhY2UiKTt2YXIgcj1uKGUpLGk9ayhlLCEwKSxhPVAoZSk7aWYoMD09PWkubGVuZ3RoJiYwPT09YS5sZW5ndGgpdGhyb3cgSihlKTtyZXR1cm57a2luZDpvLktpbmQuSU5URVJGQUNFX1RZUEVfRVhURU5TSU9OLG5hbWU6cixkaXJlY3RpdmVzOmksZmllbGRzOmEsbG9jOlYoZSx0KX19KGUpO2Nhc2UidW5pb24iOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuO0soZSwiZXh0ZW5kIiksSyhlLCJ1bmlvbiIpO3ZhciByPW4oZSksaT1rKGUsITApLGE9QihlKTtpZigwPT09aS5sZW5ndGgmJjA9PT1hLmxlbmd0aCl0aHJvdyBKKGUpO3JldHVybntraW5kOm8uS2luZC5VTklPTl9UWVBFX0VYVEVOU0lPTixuYW1lOnIsZGlyZWN0aXZlczppLHR5cGVzOmEsbG9jOlYoZSx0KX19KGUpO2Nhc2UiZW51bSI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUudG9rZW47SyhlLCJleHRlbmQiKSxLKGUsImVudW0iKTt2YXIgcj1uKGUpLGk9ayhlLCEwKSxhPSQoZSk7aWYoMD09PWkubGVuZ3RoJiYwPT09YS5sZW5ndGgpdGhyb3cgSihlKTtyZXR1cm57a2luZDpvLktpbmQuRU5VTV9UWVBFX0VYVEVOU0lPTixuYW1lOnIsZGlyZWN0aXZlczppLHZhbHVlczphLGxvYzpWKGUsdCl9fShlKTtjYXNlImlucHV0IjpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b2tlbjtLKGUsImV4dGVuZCIpLEsoZSwiaW5wdXQiKTt2YXIgcj1uKGUpLGk9ayhlLCEwKSxhPXooZSk7aWYoMD09PWkubGVuZ3RoJiYwPT09YS5sZW5ndGgpdGhyb3cgSihlKTtyZXR1cm57a2luZDpvLktpbmQuSU5QVVRfT0JKRUNUX1RZUEVfRVhURU5TSU9OLG5hbWU6cixkaXJlY3RpdmVzOmksZmllbGRzOmEsbG9jOlYoZSx0KX19KGUpfXRocm93IEooZSx0KX0oZSk7Y2FzZSJkaXJlY3RpdmUiOnJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuLHI9TihlKTtLKGUsImRpcmVjdGl2ZSIpLFEoZSxoLlRva2VuS2luZC5BVCk7dmFyIGk9bihlKSxhPWooZSk7SyhlLCJvbiIpO3ZhciBzPWZ1bmN0aW9uKGUpe1coZSxoLlRva2VuS2luZC5QSVBFKTt2YXIgdD1bXTtkb3t0LnB1c2goRyhlKSl9d2hpbGUoVyhlLGguVG9rZW5LaW5kLlBJUEUpKTtyZXR1cm4gdH0oZSk7cmV0dXJue2tpbmQ6by5LaW5kLkRJUkVDVElWRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOnIsbmFtZTppLGFyZ3VtZW50czphLGxvY2F0aW9uczpzLGxvYzpWKGUsdCl9fShlKX10aHJvdyBKKGUsdCl9ZnVuY3Rpb24gRihlKXtyZXR1cm4gSChlLGguVG9rZW5LaW5kLlNUUklORyl8fEgoZSxoLlRva2VuS2luZC5CTE9DS19TVFJJTkcpfWZ1bmN0aW9uIE4oZSl7aWYoRihlKSlyZXR1cm4gRShlKX1mdW5jdGlvbiBJKGUpe3ZhciB0PWUudG9rZW4sbj1zKGUpO1EoZSxoLlRva2VuS2luZC5DT0xPTik7dmFyIHI9VChlKTtyZXR1cm57a2luZDpvLktpbmQuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTixvcGVyYXRpb246bix0eXBlOnIsbG9jOlYoZSx0KX19ZnVuY3Rpb24gTChlKXt2YXIgdD1bXTtpZigiaW1wbGVtZW50cyI9PT1lLnRva2VuLnZhbHVlKXtlLmFkdmFuY2UoKSxXKGUsaC5Ub2tlbktpbmQuQU1QKTtkb3t0LnB1c2goVChlKSl9d2hpbGUoVyhlLGguVG9rZW5LaW5kLkFNUCl8fGUub3B0aW9ucy5hbGxvd0xlZ2FjeVNETEltcGxlbWVudHNJbnRlcmZhY2VzJiZIKGUsaC5Ub2tlbktpbmQuTkFNRSkpfXJldHVybiB0fWZ1bmN0aW9uIFAoZSl7cmV0dXJuIGUub3B0aW9ucy5hbGxvd0xlZ2FjeVNETEVtcHR5RmllbGRzJiZIKGUsaC5Ub2tlbktpbmQuQlJBQ0VfTCkmJmUubG9va2FoZWFkKCkua2luZD09PWguVG9rZW5LaW5kLkJSQUNFX1I/KGUuYWR2YW5jZSgpLGUuYWR2YW5jZSgpLFtdKTpIKGUsaC5Ub2tlbktpbmQuQlJBQ0VfTCk/WShlLGguVG9rZW5LaW5kLkJSQUNFX0wsTSxoLlRva2VuS2luZC5CUkFDRV9SKTpbXX1mdW5jdGlvbiBNKGUpe3ZhciB0PWUudG9rZW4scj1OKGUpLGk9bihlKSxhPWooZSk7UShlLGguVG9rZW5LaW5kLkNPTE9OKTt2YXIgcz1fKGUpLHU9ayhlLCEwKTtyZXR1cm57a2luZDpvLktpbmQuRklFTERfREVGSU5JVElPTixkZXNjcmlwdGlvbjpyLG5hbWU6aSxhcmd1bWVudHM6YSx0eXBlOnMsZGlyZWN0aXZlczp1LGxvYzpWKGUsdCl9fWZ1bmN0aW9uIGooZSl7cmV0dXJuIEgoZSxoLlRva2VuS2luZC5QQVJFTl9MKT9ZKGUsaC5Ub2tlbktpbmQuUEFSRU5fTCxSLGguVG9rZW5LaW5kLlBBUkVOX1IpOltdfWZ1bmN0aW9uIFIoZSl7dmFyIHQ9ZS50b2tlbixyPU4oZSksaT1uKGUpO1EoZSxoLlRva2VuS2luZC5DT0xPTik7dmFyIGE9XyhlKSxzPXZvaWQgMDtXKGUsaC5Ub2tlbktpbmQuRVFVQUxTKSYmKHM9RChlKSk7dmFyIHU9ayhlLCEwKTtyZXR1cm57a2luZDpvLktpbmQuSU5QVVRfVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpyLG5hbWU6aSx0eXBlOmEsZGVmYXVsdFZhbHVlOnMsZGlyZWN0aXZlczp1LGxvYzpWKGUsdCl9fWZ1bmN0aW9uIEIoZSl7dmFyIHQ9W107aWYoVyhlLGguVG9rZW5LaW5kLkVRVUFMUykpe1coZSxoLlRva2VuS2luZC5QSVBFKTtkb3t0LnB1c2goVChlKSl9d2hpbGUoVyhlLGguVG9rZW5LaW5kLlBJUEUpKX1yZXR1cm4gdH1mdW5jdGlvbiAkKGUpe3JldHVybiBIKGUsaC5Ub2tlbktpbmQuQlJBQ0VfTCk/WShlLGguVG9rZW5LaW5kLkJSQUNFX0wsVSxoLlRva2VuS2luZC5CUkFDRV9SKTpbXX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUudG9rZW4scj1OKGUpLGk9bihlKSxhPWsoZSwhMCk7cmV0dXJue2tpbmQ6by5LaW5kLkVOVU1fVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpyLG5hbWU6aSxkaXJlY3RpdmVzOmEsbG9jOlYoZSx0KX19ZnVuY3Rpb24geihlKXtyZXR1cm4gSChlLGguVG9rZW5LaW5kLkJSQUNFX0wpP1koZSxoLlRva2VuS2luZC5CUkFDRV9MLFIsaC5Ub2tlbktpbmQuQlJBQ0VfUik6W119ZnVuY3Rpb24gRyhlKXt2YXIgdD1lLnRva2VuLHI9bihlKTtpZihnLkRpcmVjdGl2ZUxvY2F0aW9uLmhhc093blByb3BlcnR5KHIudmFsdWUpKXJldHVybiByO3Rocm93IEooZSx0KX1mdW5jdGlvbiBWKGUsdCl7aWYoIWUub3B0aW9ucy5ub0xvY2F0aW9uKXJldHVybiBuZXcgcSh0LGUubGFzdFRva2VuLGUuc291cmNlKX1mdW5jdGlvbiBxKGUsdCxuKXt0aGlzLnN0YXJ0PWUuc3RhcnQsdGhpcy5lbmQ9dC5lbmQsdGhpcy5zdGFydFRva2VuPWUsdGhpcy5lbmRUb2tlbj10LHRoaXMuc291cmNlPW59ZnVuY3Rpb24gSChlLHQpe3JldHVybiBlLnRva2VuLmtpbmQ9PT10fWZ1bmN0aW9uIFcoZSx0KXt2YXIgbj1lLnRva2VuLmtpbmQ9PT10O3JldHVybiBuJiZlLmFkdmFuY2UoKSxufWZ1bmN0aW9uIFEoZSx0KXt2YXIgbj1lLnRva2VuO2lmKG4ua2luZD09PXQpcmV0dXJuIGUuYWR2YW5jZSgpLG47dGhyb3coMCxmLnN5bnRheEVycm9yKShlLnNvdXJjZSxuLnN0YXJ0LCJFeHBlY3RlZCAiK3QrIiwgZm91bmQgIisoMCxoLmdldFRva2VuRGVzYykobikpfWZ1bmN0aW9uIEsoZSx0KXt2YXIgbj1lLnRva2VuO2lmKG4ua2luZD09PWguVG9rZW5LaW5kLk5BTUUmJm4udmFsdWU9PT10KXJldHVybiBlLmFkdmFuY2UoKSxuO3Rocm93KDAsZi5zeW50YXhFcnJvcikoZS5zb3VyY2Usbi5zdGFydCwnRXhwZWN0ZWQgIicrdCsnIiwgZm91bmQgJysoMCxoLmdldFRva2VuRGVzYykobikpfWZ1bmN0aW9uIEooZSx0KXt2YXIgbj10fHxlLnRva2VuO3JldHVybigwLGYuc3ludGF4RXJyb3IpKGUuc291cmNlLG4uc3RhcnQsIlVuZXhwZWN0ZWQgIisoMCxoLmdldFRva2VuRGVzYykobikpfWZ1bmN0aW9uIFkoZSx0LG4scil7UShlLHQpO2Zvcih2YXIgaT1bbihlKV07IVcoZSxyKTspaS5wdXNoKG4oZSkpO3JldHVybiBpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnBhcnNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiBlP25ldyBtLlNvdXJjZShlKTplO2lmKCEobiBpbnN0YW5jZW9mIG0uU291cmNlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IHByb3ZpZGUgU291cmNlLiBSZWNlaXZlZDogIitTdHJpbmcobikpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRva2VuO1EoZSxoLlRva2VuS2luZC5TT0YpO3ZhciBuPVtdO2Rve24ucHVzaChyKGUpKX13aGlsZSghVyhlLGguVG9rZW5LaW5kLkVPRikpO3JldHVybntraW5kOm8uS2luZC5ET0NVTUVOVCxkZWZpbml0aW9uczpuLGxvYzpWKGUsdCl9fSgoMCxoLmNyZWF0ZUxleGVyKShuLHR8fHt9KSl9LHQucGFyc2VWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT9uZXcgbS5Tb3VyY2UoZSk6ZSxyPSgwLGguY3JlYXRlTGV4ZXIpKG4sdHx8e30pO1EocixoLlRva2VuS2luZC5TT0YpO3ZhciBpPUMociwhMSk7cmV0dXJuIFEocixoLlRva2VuS2luZC5FT0YpLGl9LHQucGFyc2VUeXBlPWZ1bmN0aW9uKGUsdCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiBlP25ldyBtLlNvdXJjZShlKTplLHI9KDAsaC5jcmVhdGVMZXhlcikobix0fHx7fSk7UShyLGguVG9rZW5LaW5kLlNPRik7dmFyIGk9XyhyKTtyZXR1cm4gUShyLGguVG9rZW5LaW5kLkVPRiksaX0sdC5wYXJzZUNvbnN0VmFsdWU9RCx0LnBhcnNlVHlwZVJlZmVyZW5jZT1fLHQucGFyc2VOYW1lZFR5cGU9VCxxLnByb3RvdHlwZS50b0pTT049cS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH19fSk7dCh5KTt2YXIgdj1uKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gQm9vbGVhbihlJiYic3RyaW5nIj09dHlwZW9mIGUua2luZCl9ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9ZVt0XTtpZihyKXtpZighbiYmImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIHI7dmFyIGk9bj9yLmxlYXZlOnIuZW50ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGkpcmV0dXJuIGl9ZWxzZXt2YXIgbz1uP2UubGVhdmU6ZS5lbnRlcjtpZihvKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbylyZXR1cm4gbzt2YXIgYT1vW3RdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudmlzaXQ9ZnVuY3Rpb24oZSx0KXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06aSxzPXZvaWQgMCx1PUFycmF5LmlzQXJyYXkoZSksYz1bZV0sbD0tMSxwPVtdLGY9dm9pZCAwLGQ9dm9pZCAwLGg9dm9pZCAwLG09W10sZz1bXSx5PWU7ZG97dmFyIHY9KytsPT09Yy5sZW5ndGgsYj12JiYwIT09cC5sZW5ndGg7aWYodil7aWYoZD0wPT09Zy5sZW5ndGg/dm9pZCAwOm1bbS5sZW5ndGgtMV0sZj1oLGg9Zy5wb3AoKSxiKXtpZih1KWY9Zi5zbGljZSgpO2Vsc2V7dmFyIHg9e307Zm9yKHZhciBDIGluIGYpZi5oYXNPd25Qcm9wZXJ0eShDKSYmKHhbQ109ZltDXSk7Zj14fWZvcih2YXIgRT0wLEQ9MDtEPHAubGVuZ3RoO0QrKyl7dmFyIHc9cFtEXVswXSxTPXBbRF1bMV07dSYmKHctPUUpLHUmJm51bGw9PT1TPyhmLnNwbGljZSh3LDEpLEUrKyk6Zlt3XT1TfX1sPXMuaW5kZXgsYz1zLmtleXMscD1zLmVkaXRzLHU9cy5pbkFycmF5LHM9cy5wcmV2fWVsc2V7aWYoZD1oP3U/bDpjW2xdOnZvaWQgMCxudWxsPT09KGY9aD9oW2RdOnkpfHx2b2lkIDA9PT1mKWNvbnRpbnVlO2gmJm0ucHVzaChkKX12YXIgaz12b2lkIDA7aWYoIUFycmF5LmlzQXJyYXkoZikpe2lmKCFuKGYpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBBU1QgTm9kZTogIitKU09OLnN0cmluZ2lmeShmKSk7dmFyIEE9cih0LGYua2luZCx2KTtpZihBKXtpZigoaz1BLmNhbGwodCxmLGQsaCxtLGcpKT09PW8pYnJlYWs7aWYoITE9PT1rKXtpZighdil7bS5wb3AoKTtjb250aW51ZX19ZWxzZSBpZih2b2lkIDAhPT1rJiYocC5wdXNoKFtkLGtdKSwhdikpe2lmKCFuKGspKXttLnBvcCgpO2NvbnRpbnVlfWY9a319fXZvaWQgMD09PWsmJmImJnAucHVzaChbZCxmXSksdj9tLnBvcCgpOihzPXtpbkFycmF5OnUsaW5kZXg6bCxrZXlzOmMsZWRpdHM6cCxwcmV2OnN9LHU9QXJyYXkuaXNBcnJheShmKSxjPXU/ZjphW2Yua2luZF18fFtdLGw9LTEscD1bXSxoJiZnLnB1c2goaCksaD1mKX13aGlsZSh2b2lkIDAhPT1zKTtyZXR1cm4gMCE9PXAubGVuZ3RoJiYoeT1wW3AubGVuZ3RoLTFdWzFdKSx5fSx0LnZpc2l0SW5QYXJhbGxlbD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpO3JldHVybntlbnRlcjpmdW5jdGlvbihuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylpZighdFtpXSl7dmFyIGE9cihlW2ldLG4ua2luZCwhMSk7aWYoYSl7dmFyIHM9YS5hcHBseShlW2ldLGFyZ3VtZW50cyk7aWYoITE9PT1zKXRbaV09bjtlbHNlIGlmKHM9PT1vKXRbaV09bztlbHNlIGlmKHZvaWQgMCE9PXMpcmV0dXJuIHN9fX0sbGVhdmU6ZnVuY3Rpb24obil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYodFtpXSl0W2ldPT09biYmKHRbaV09bnVsbCk7ZWxzZXt2YXIgYT1yKGVbaV0sbi5raW5kLCEwKTtpZihhKXt2YXIgcz1hLmFwcGx5KGVbaV0sYXJndW1lbnRzKTtpZihzPT09byl0W2ldPW87ZWxzZSBpZih2b2lkIDAhPT1zJiYhMSE9PXMpcmV0dXJuIHN9fX19fSx0LnZpc2l0V2l0aFR5cGVJbmZvPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudGVyOmZ1bmN0aW9uKGkpe2UuZW50ZXIoaSk7dmFyIG89cih0LGkua2luZCwhMSk7aWYobyl7dmFyIGE9by5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMCE9PWEmJihlLmxlYXZlKGkpLG4oYSkmJmUuZW50ZXIoYSkpLGF9fSxsZWF2ZTpmdW5jdGlvbihuKXt2YXIgaT1yKHQsbi5raW5kLCEwKSxvPXZvaWQgMDtyZXR1cm4gaSYmKG89aS5hcHBseSh0LGFyZ3VtZW50cykpLGUubGVhdmUobiksb319fSx0LmdldFZpc2l0Rm49cjt2YXIgaT10LlF1ZXJ5RG9jdW1lbnRLZXlzPXtOYW1lOltdLERvY3VtZW50OlsiZGVmaW5pdGlvbnMiXSxPcGVyYXRpb25EZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sVmFyaWFibGVEZWZpbml0aW9uOlsidmFyaWFibGUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIl0sVmFyaWFibGU6WyJuYW1lIl0sU2VsZWN0aW9uU2V0Olsic2VsZWN0aW9ucyJdLEZpZWxkOlsiYWxpYXMiLCJuYW1lIiwiYXJndW1lbnRzIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEFyZ3VtZW50OlsibmFtZSIsInZhbHVlIl0sRnJhZ21lbnRTcHJlYWQ6WyJuYW1lIiwiZGlyZWN0aXZlcyJdLElubGluZUZyYWdtZW50OlsidHlwZUNvbmRpdGlvbiIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxGcmFnbWVudERlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sSW50VmFsdWU6W10sRmxvYXRWYWx1ZTpbXSxTdHJpbmdWYWx1ZTpbXSxCb29sZWFuVmFsdWU6W10sTnVsbFZhbHVlOltdLEVudW1WYWx1ZTpbXSxMaXN0VmFsdWU6WyJ2YWx1ZXMiXSxPYmplY3RWYWx1ZTpbImZpZWxkcyJdLE9iamVjdEZpZWxkOlsibmFtZSIsInZhbHVlIl0sRGlyZWN0aXZlOlsibmFtZSIsImFyZ3VtZW50cyJdLE5hbWVkVHlwZTpbIm5hbWUiXSxMaXN0VHlwZTpbInR5cGUiXSxOb25OdWxsVHlwZTpbInR5cGUiXSxTY2hlbWFEZWZpbml0aW9uOlsiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246WyJ0eXBlIl0sU2NhbGFyVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEZpZWxkRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsInR5cGUiLCJkaXJlY3RpdmVzIl0sSW5wdXRWYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLEludGVyZmFjZVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sRW51bVZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFNjYWxhclR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyJdLE9iamVjdFR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRGlyZWN0aXZlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsImxvY2F0aW9ucyJdfSxvPXQuQlJFQUs9e319KTt0KHYpO3ZhciBiPW4oZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcihbdC5kZXNjcmlwdGlvbixlKHQpXSwiXG4iKX19ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlP2UuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkuam9pbih0fHwiIik6IiJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSYmMCE9PWUubGVuZ3RoPyJ7XG4iK2EocihlLCJcbiIpKSsiXG59IjoiIn1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gdD9lK3QrKG58fCIiKToiIn1mdW5jdGlvbiBhKGUpe3JldHVybiBlJiYiICAiK2UucmVwbGFjZSgvXG4vZywiXG4gICIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnByaW50PWZ1bmN0aW9uKGUpe3JldHVybigwLHYudmlzaXQpKGUse2xlYXZlOnN9KX07dmFyIHM9e05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LFZhcmlhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiIkIitlLm5hbWV9LERvY3VtZW50OmZ1bmN0aW9uKGUpe3JldHVybiByKGUuZGVmaW5pdGlvbnMsIlxuXG4iKSsiXG4ifSxPcGVyYXRpb25EZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUub3BlcmF0aW9uLG49ZS5uYW1lLGk9bygiKCIscihlLnZhcmlhYmxlRGVmaW5pdGlvbnMsIiwgIiksIikiKSxhPXIoZS5kaXJlY3RpdmVzLCIgIikscz1lLnNlbGVjdGlvblNldDtyZXR1cm4gbnx8YXx8aXx8InF1ZXJ5IiE9PXQ/cihbdCxyKFtuLGldKSxhLHNdLCIgIik6c30sVmFyaWFibGVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhcmlhYmxlKyI6ICIrZS50eXBlK28oIiA9ICIsZS5kZWZhdWx0VmFsdWUpfSxTZWxlY3Rpb25TZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZS5zZWxlY3Rpb25zKX0sRmllbGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbGlhcyxuPWUubmFtZSxpPWUuYXJndW1lbnRzLGE9ZS5kaXJlY3RpdmVzLHM9ZS5zZWxlY3Rpb25TZXQ7cmV0dXJuIHIoW28oIiIsdCwiOiAiKStuK28oIigiLHIoaSwiLCAiKSwiKSIpLHIoYSwiICIpLHNdLCIgIil9LEFyZ3VtZW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUrIjogIitlLnZhbHVlfSxGcmFnbWVudFNwcmVhZDpmdW5jdGlvbihlKXtyZXR1cm4iLi4uIitlLm5hbWUrbygiICIscihlLmRpcmVjdGl2ZXMsIiAiKSl9LElubGluZUZyYWdtZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZUNvbmRpdGlvbixuPWUuZGlyZWN0aXZlcyxpPWUuc2VsZWN0aW9uU2V0O3JldHVybiByKFsiLi4uIixvKCJvbiAiLHQpLHIobiwiICIpLGldLCIgIil9LEZyYWdtZW50RGVmaW5pdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLnR5cGVDb25kaXRpb24saT1lLnZhcmlhYmxlRGVmaW5pdGlvbnMsYT1lLmRpcmVjdGl2ZXMscz1lLnNlbGVjdGlvblNldDtyZXR1cm4iZnJhZ21lbnQgIit0K28oIigiLHIoaSwiLCAiKSwiKSIpKyIgb24gIituKyIgIitvKCIiLHIoYSwiICIpLCIgIikrc30sSW50VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LEZsb2F0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LFN0cmluZ1ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5ibG9jaz9mdW5jdGlvbihlLHQpe3ZhciBuPWUucmVwbGFjZSgvIiIiL2csJ1xcIiIiJyk7cmV0dXJuIiAiIT09ZVswXSYmIlx0IiE9PWVbMF18fC0xIT09ZS5pbmRleE9mKCJcbiIpPyciIiJcbicrKHQ/bjphKG4pKSsnXG4iIiInOiciIiInK24ucmVwbGFjZSgvIiQvLCciXG4nKSsnIiIiJ30obiwiZGVzY3JpcHRpb24iPT09dCk6SlNPTi5zdHJpbmdpZnkobil9LEJvb2xlYW5WYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT8idHJ1ZSI6ImZhbHNlIn0sTnVsbFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSxFbnVtVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LExpc3RWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iWyIrcihlLnZhbHVlcywiLCAiKSsiXSJ9LE9iamVjdFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiJ7IityKGUuZmllbGRzLCIsICIpKyJ9In0sT2JqZWN0RmllbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSsiOiAiK2UudmFsdWV9LERpcmVjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm4iQCIrZS5uYW1lK28oIigiLHIoZS5hcmd1bWVudHMsIiwgIiksIikiKX0sTmFtZWRUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWV9LExpc3RUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiJbIitlLnR5cGUrIl0ifSxOb25OdWxsVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlKyIhIn0sU2NoZW1hRGVmaW5pdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXMsbj1lLm9wZXJhdGlvblR5cGVzO3JldHVybiByKFsic2NoZW1hIixyKHQsIiAiKSxpKG4pXSwiICIpfSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5vcGVyYXRpb24rIjogIitlLnR5cGV9LFNjYWxhclR5cGVEZWZpbml0aW9uOm4oZnVuY3Rpb24oZSl7cmV0dXJuIHIoWyJzY2FsYXIiLGUubmFtZSxyKGUuZGlyZWN0aXZlcywiICIpXSwiICIpfSksT2JqZWN0VHlwZURlZmluaXRpb246bihmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmludGVyZmFjZXMsYT1lLmRpcmVjdGl2ZXMscz1lLmZpZWxkcztyZXR1cm4gcihbInR5cGUiLHQsbygiaW1wbGVtZW50cyAiLHIobiwiICYgIikpLHIoYSwiICIpLGkocyldLCIgIil9KSxGaWVsZERlZmluaXRpb246bihmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmFyZ3VtZW50cyxpPWUudHlwZSxhPWUuZGlyZWN0aXZlcztyZXR1cm4gdCtvKCIoIixyKG4sIiwgIiksIikiKSsiOiAiK2krbygiICIscihhLCIgIikpfSksSW5wdXRWYWx1ZURlZmluaXRpb246bihmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLnR5cGUsaT1lLmRlZmF1bHRWYWx1ZSxhPWUuZGlyZWN0aXZlcztyZXR1cm4gcihbdCsiOiAiK24sbygiPSAiLGkpLHIoYSwiICIpXSwiICIpfSksSW50ZXJmYWNlVHlwZURlZmluaXRpb246bihmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmRpcmVjdGl2ZXMsbz1lLmZpZWxkcztyZXR1cm4gcihbImludGVyZmFjZSIsdCxyKG4sIiAiKSxpKG8pXSwiICIpfSksVW5pb25UeXBlRGVmaW5pdGlvbjpuKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxpPWUudHlwZXM7cmV0dXJuIHIoWyJ1bmlvbiIsdCxyKG4sIiAiKSxpJiYwIT09aS5sZW5ndGg/Ij0gIityKGksIiB8ICIpOiIiXSwiICIpfSksRW51bVR5cGVEZWZpbml0aW9uOm4oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLG89ZS52YWx1ZXM7cmV0dXJuIHIoWyJlbnVtIix0LHIobiwiICIpLGkobyldLCIgIil9KSxFbnVtVmFsdWVEZWZpbml0aW9uOm4oZnVuY3Rpb24oZSl7cmV0dXJuIHIoW2UubmFtZSxyKGUuZGlyZWN0aXZlcywiICIpXSwiICIpfSksSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjpuKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxvPWUuZmllbGRzO3JldHVybiByKFsiaW5wdXQiLHQscihuLCIgIiksaShvKV0sIiAiKX0pLFNjYWxhclR5cGVFeHRlbnNpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHIoWyJleHRlbmQgc2NhbGFyIixlLm5hbWUscihlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKX0sT2JqZWN0VHlwZUV4dGVuc2lvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmludGVyZmFjZXMsYT1lLmRpcmVjdGl2ZXMscz1lLmZpZWxkcztyZXR1cm4gcihbImV4dGVuZCB0eXBlIix0LG8oImltcGxlbWVudHMgIixyKG4sIiAmICIpKSxyKGEsIiAiKSxpKHMpXSwiICIpfSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxvPWUuZmllbGRzO3JldHVybiByKFsiZXh0ZW5kIGludGVyZmFjZSIsdCxyKG4sIiAiKSxpKG8pXSwiICIpfSxVbmlvblR5cGVFeHRlbnNpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLGk9ZS50eXBlcztyZXR1cm4gcihbImV4dGVuZCB1bmlvbiIsdCxyKG4sIiAiKSxpJiYwIT09aS5sZW5ndGg/Ij0gIityKGksIiB8ICIpOiIiXSwiICIpfSxFbnVtVHlwZUV4dGVuc2lvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmRpcmVjdGl2ZXMsbz1lLnZhbHVlcztyZXR1cm4gcihbImV4dGVuZCBlbnVtIix0LHIobiwiICIpLGkobyldLCIgIil9LElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmRpcmVjdGl2ZXMsbz1lLmZpZWxkcztyZXR1cm4gcihbImV4dGVuZCBpbnB1dCIsdCxyKG4sIiAiKSxpKG8pXSwiICIpfSxEaXJlY3RpdmVEZWZpbml0aW9uOm4oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5hcmd1bWVudHMsaT1lLmxvY2F0aW9ucztyZXR1cm4iZGlyZWN0aXZlIEAiK3QrbygiKCIscihuLCIsICIpLCIpIikrIiBvbiAiK3IoaSwiIHwgIil9KX19KTt0KGIpO3ZhciB4PW4oZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldExvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRMb2NhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiS2luZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uS2luZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlTGV4ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmNyZWF0ZUxleGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUb2tlbktpbmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLlRva2VuS2luZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicGFyc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnBhcnNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJzZVZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5wYXJzZVZhbHVlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJzZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnBhcnNlVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJpbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLnByaW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTb3VyY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLlNvdXJjZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmlzaXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2LnZpc2l0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2aXNpdEluUGFyYWxsZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2LnZpc2l0SW5QYXJhbGxlbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmlzaXRXaXRoVHlwZUluZm8iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2LnZpc2l0V2l0aFR5cGVJbmZvfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRWaXNpdEZuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRWaXNpdEZufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCUkVBSyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuQlJFQUt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRpcmVjdGl2ZUxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5EaXJlY3RpdmVMb2NhdGlvbn19KX0pO3JldHVybiB0KHgpLHtwYXJzZXJzOntncmFwaHFsOntwYXJzZTpmdW5jdGlvbih0KXt2YXIgbj14O3RyeXt2YXIgaT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZSh0LHthbGxvd0xlZ2FjeVNETEltcGxlbWVudHNJbnRlcmZhY2VzOiExfSl9Y2F0Y2gobil7cmV0dXJuIGUodCx7YWxsb3dMZWdhY3lTRExJbXBsZW1lbnRzSW50ZXJmYWNlczohMH0pfX0obi5wYXJzZSx0KTtyZXR1cm4gaS5jb21tZW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj1lLmxvYy5zdGFydFRva2VuLm5leHQ7IjxFT0Y+IiE9PW4ua2luZDspIkNvbW1lbnQiPT09bi5raW5kJiYoT2JqZWN0LmFzc2lnbihuLHtjb2x1bW46bi5jb2x1bW4tMX0pLHQucHVzaChuKSksbj1uLm5leHQ7cmV0dXJuIHR9KGkpLGZ1bmN0aW9uIHQobil7aWYobiYmIm9iamVjdCI9PT1lKG4pKWZvcih2YXIgciBpbiBkZWxldGUgbi5zdGFydFRva2VuLGRlbGV0ZSBuLmVuZFRva2VuLGRlbGV0ZSBuLnByZXYsZGVsZXRlIG4ubmV4dCxuKXQobltyXSk7cmV0dXJuIG59KGkpLGl9Y2F0Y2goZSl7dGhyb3cgZSBpbnN0YW5jZW9mIGYuR3JhcGhRTEVycm9yP3IoZS5tZXNzYWdlLHtzdGFydDp7bGluZTplLmxvY2F0aW9uc1swXS5saW5lLGNvbHVtbjplLmxvY2F0aW9uc1swXS5jb2x1bW59fSk6ZX19LGFzdEZvcm1hdDoiZ3JhcGhxbCIsbG9jU3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlLnN0YXJ0P2Uuc3RhcnQ6ZS5sb2MmJmUubG9jLnN0YXJ0fSxsb2NFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlLmVuZD9lLmVuZDplLmxvYyYmZS5sb2MuZW5kfX19fX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZSx0LG4scixpLG8sYSxzLGE7cmV0dXJuIGQodGhpcyxmdW5jdGlvbih1KXtzd2l0Y2godS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LG0uY2FsbChnLmRlbGF5LDEwMCldO2Nhc2UgMTpyZXR1cm4gdS5zZW50KCksWzQsbS5zZWxlY3QoeS5nZXRTZWxlY3RlZFNlc3Npb24pXTtjYXNlIDI6cmV0dXJuIGU9dS5zZW50KCksWzQsUy5zY2hlbWFGZXRjaGVyLmZldGNoKGUpXTtjYXNlIDM6dD11LnNlbnQoKS5zY2hlbWEsdS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gdS50cnlzLnB1c2goWzQsMTIsLDE0XSksKG49VC5wYXJzZShlLnF1ZXJ5KSxyPWIuZ2V0UXVlcnlGYWN0cyh0LG4pKT8oaT14LmZyb21KUyhyKSxvPXYuZGVmYXVsdChlLm9wZXJhdGlvbnMsZS5vcGVyYXRpb25OYW1lLGkub3BlcmF0aW9ucykseC5pcyhpLmdldCgidmFyaWFibGVUb1R5cGUiKSxlLnZhcmlhYmxlVG9UeXBlKT9bMyw2XTpbNCxtLnB1dChDLnNldFZhcmlhYmxlVG9UeXBlKGkuZ2V0KCJ2YXJpYWJsZVRvVHlwZSIpKSldKTpbMywxMF07Y2FzZSA1OnUuc2VudCgpLHUubGFiZWw9NjtjYXNlIDY6cmV0dXJuIHguaXMoaS5nZXQoIm9wZXJhdGlvbnMiKSxlLm9wZXJhdGlvbnMpP1szLDhdOls0LG0ucHV0KEMuc2V0T3BlcmF0aW9ucyhpLmdldCgib3BlcmF0aW9ucyIpKSldO2Nhc2UgNzp1LnNlbnQoKSx1LmxhYmVsPTg7Y2FzZSA4OnJldHVybiBvPT09ZS5vcGVyYXRpb25OYW1lP1szLDEwXTpbNCxtLnB1dChDLnNldE9wZXJhdGlvbk5hbWUobykpXTtjYXNlIDk6dS5zZW50KCksdS5sYWJlbD0xMDtjYXNlIDEwOnJldHVybiBhPV8uZ2V0UXVlcnlUeXBlcyhuKSxbNCxtLnB1dChDLnNldFF1ZXJ5VHlwZXMoYSkpXTtjYXNlIDExOnJldHVybiB1LnNlbnQoKSxbMywxNF07Y2FzZSAxMjpyZXR1cm4gcz11LnNlbnQoKSxhPV8uZ2V0UXVlcnlUeXBlcyhudWxsKSxbNCxtLnB1dChDLnNldFF1ZXJ5VHlwZXMoYSkpXTtjYXNlIDEzOnJldHVybiB1LnNlbnQoKSxbMywxNF07Y2FzZSAxNDpyZXR1cm5bMl19fSl9ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHIsaT1lLnBheWxvYWQ7cmV0dXJuIGQodGhpcyxmdW5jdGlvbihlKXtzd2l0Y2goZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LG0uY2FsbChnLmRlbGF5LDEwMCldO2Nhc2UgMTpyZXR1cm4gZS5zZW50KCksbG9jYXRpb24uc2VhcmNoLmluY2x1ZGVzKCJxdWVyeSIpPyh0PUYucGFyc2UobG9jYXRpb24uc2VhcmNoKSwidW5kZWZpbmVkIiE9PXR5cGVvZiB0LnF1ZXJ5JiYobj1GLnN0cmluZ2lmeShmKHt9LHQse3F1ZXJ5OmkucXVlcnl9KSkscj0iIitsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWUrIj8iK24sd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdLmlubmVySFRNTCxyKSksWzJdKTpbMl19fSl9ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHIsaTtyZXR1cm4gZCh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ9ZS5wYXlsb2FkLnBvc2l0aW9uLFs0LG0uc2VsZWN0KHkuZ2V0U2VsZWN0ZWRTZXNzaW9uKV07Y2FzZSAxOnJldHVybiBuPW8uc2VudCgpLG4ub3BlcmF0aW9ucz8oaT1uLm9wZXJhdGlvbnMudG9KUygpLGkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmxvYyYmZS5sb2Muc3RhcnQ8PXQmJmUubG9jLmVuZD49dCYmKHI9ZS5uYW1lJiZlLm5hbWUudmFsdWUpfSkscj9bNCxtLnB1dChDLnJ1blF1ZXJ5KHIpKV06WzMsM10pOlszLDZdO2Nhc2UgMjpyZXR1cm4gby5zZW50KCksWzMsNV07Y2FzZSAzOnJldHVybls0LG0ucHV0KEMucnVuUXVlcnkoKSldO2Nhc2UgNDpvLnNlbnQoKSxvLmxhYmVsPTU7Y2FzZSA1OnJldHVyblszLDhdO2Nhc2UgNjpyZXR1cm5bNCxtLnB1dChDLnJ1blF1ZXJ5KCkpXTtjYXNlIDc6by5zZW50KCksby5sYWJlbD04O2Nhc2UgODpyZXR1cm5bMl19fSl9ZnVuY3Rpb24gYSgpe3ZhciBlLHQ7cmV0dXJuIGQodGhpcyxmdW5jdGlvbihuKXtzd2l0Y2gobi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LG0uc2VsZWN0KHkuZ2V0U2VsZWN0ZWRTZXNzaW9uKV07Y2FzZSAxOnJldHVybiBlPW4uc2VudCgpLFs0LG0uc2VsZWN0KGsuZ2V0U2V0dGluZ3MpXTtjYXNlIDI6cmV0dXJuIHQ9bi5zZW50KCksWzIse2VuZHBvaW50OmUuZW5kcG9pbnQsaGVhZGVyczplLmhlYWRlcnMsY3JlZGVudGlhbHM6dFsicmVxdWVzdC5jcmVkZW50aWFscyJdfV19fSl9ZnVuY3Rpb24gcygpe3ZhciBlLHQsbixyLGk7cmV0dXJuIGQodGhpcyxmdW5jdGlvbihvKXtzd2l0Y2goby5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGEoKV07Y2FzZSAxOmU9by5zZW50KCksby5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gby50cnlzLnB1c2goWzIsNiwsMTBdKSxbNCxTLnNjaGVtYUZldGNoZXIuZmV0Y2goZSldO2Nhc2UgMzpyZXR1cm4gby5zZW50KCksdD1tLnB1dCxuPUMuc2NoZW1hRmV0Y2hpbmdTdWNjZXNzLHI9W2UuZW5kcG9pbnQsbnVsbF0sWzQsbS5zZWxlY3QoeS5nZXRJc1BvbGxpbmdTY2hlbWEpXTtjYXNlIDQ6cmV0dXJuWzQsdC5hcHBseSh2b2lkIDAsW24uYXBwbHkodm9pZCAwLHIuY29uY2F0KFtvLnNlbnQoKV0pKV0pXTtjYXNlIDU6cmV0dXJuIG8uc2VudCgpLFszLDEwXTtjYXNlIDY6cmV0dXJuIGk9by5zZW50KCksWzQsbS5wdXQoQy5zY2hlbWFGZXRjaGluZ0Vycm9yKGUuZW5kcG9pbnQpKV07Y2FzZSA3OnJldHVybiBvLnNlbnQoKSxbNCxtLmNhbGwoZy5kZWxheSw1ZTMpXTtjYXNlIDg6cmV0dXJuIG8uc2VudCgpLFs0LG0ucHV0KEMuZmV0Y2hTY2hlbWEoKSldO2Nhc2UgOTpyZXR1cm4gby5zZW50KCksWzMsMTBdO2Nhc2UgMTA6cmV0dXJuWzJdfX0pfWZ1bmN0aW9uIHUoKXt2YXIgZSx0LG4scixpO3JldHVybiBkKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxhKCldO2Nhc2UgMTplPW8uc2VudCgpLG8ubGFiZWw9MjtjYXNlIDI6cmV0dXJuIG8udHJ5cy5wdXNoKFsyLDYsLDEwXSksWzQsUy5zY2hlbWFGZXRjaGVyLnJlZmV0Y2goZSldO2Nhc2UgMzpyZXR1cm4gby5zZW50KCksdD1tLnB1dCxuPUMuc2NoZW1hRmV0Y2hpbmdTdWNjZXNzLHI9W2UuZW5kcG9pbnQsbnVsbF0sWzQsbS5zZWxlY3QoeS5nZXRJc1BvbGxpbmdTY2hlbWEpXTtjYXNlIDQ6cmV0dXJuWzQsdC5hcHBseSh2b2lkIDAsW24uYXBwbHkodm9pZCAwLHIuY29uY2F0KFtvLnNlbnQoKV0pKV0pXTtjYXNlIDU6cmV0dXJuIG8uc2VudCgpLFszLDEwXTtjYXNlIDY6cmV0dXJuIGk9by5zZW50KCksWzQsbS5wdXQoQy5zY2hlbWFGZXRjaGluZ0Vycm9yKGUuZW5kcG9pbnQpKV07Y2FzZSA3OnJldHVybiBvLnNlbnQoKSxbNCxtLmNhbGwoZy5kZWxheSw1ZTMpXTtjYXNlIDg6cmV0dXJuIG8uc2VudCgpLFs0LG0ucHV0KEMucmVmZXRjaFNjaGVtYSgpKV07Y2FzZSA5OnJldHVybiBvLnNlbnQoKSxbMywxMF07Y2FzZSAxMDpyZXR1cm5bMl19fSl9ZnVuY3Rpb24gYygpe3ZhciBlLHQsbixyLGksbyxzLHU7cmV0dXJuIGQodGhpcyxmdW5jdGlvbihjKXtzd2l0Y2goYy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LG0uc2VsZWN0KHkuZ2V0U2VsZWN0ZWRTZXNzaW9uKV07Y2FzZSAxOnJldHVybiBlPWMuc2VudCgpLFs0LGEoKV07Y2FzZSAyOnJldHVybiB0PWMuc2VudCgpLFs0LG0uc2VsZWN0KEEuZ2V0U2Vzc2lvbkRvY3NTdGF0ZSldO2Nhc2UgMzpyZXR1cm4gbj1jLnNlbnQoKSxbNCxTLnNjaGVtYUZldGNoZXIuZmV0Y2godCldO2Nhc2UgNDpyZXR1cm4gcj1jLnNlbnQoKSwoaT1yLnNjaGVtYSxvPXIudHJhY2luZ1N1cHBvcnRlZCwhaXx8aCYmaD09PWkpP1szLDddOihzPUUuZ2V0Um9vdE1hcChpKSx1PW4ubmF2U3RhY2subWFwKGZ1bmN0aW9uKGUpe3JldHVybiBFLmdldE5ld1N0YWNrKHMsaSxlKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLFs0LG0ucHV0KEQuc2V0U3RhY2tzKGUuaWQsdSkpXSk7Y2FzZSA1OnJldHVybiBjLnNlbnQoKSxbNCxtLnB1dChDLnNldFRyYWNpbmdTdXBwb3J0ZWQobykpXTtjYXNlIDY6Yy5zZW50KCksaD1pLGMubGFiZWw9NztjYXNlIDc6cmV0dXJuWzJdfX0pfWZ1bmN0aW9uIGwoZSl7dmFyIHQsbixyLGksbyxhPWUucGF5bG9hZDtyZXR1cm4gZCh0aGlzLGZ1bmN0aW9uKGUpe3N3aXRjaChlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ9YS5zZXNzaW9uSWQsWzQsbS5zZWxlY3Qoay5nZXRTZWxlY3RlZFdvcmtzcGFjZSldO2Nhc2UgMTpyZXR1cm4gbj1lLnNlbnQoKSxyPW4uZ2V0SW4oWyJzZXNzaW9ucyIsdF0pLGk9bi5nZXQoImhpc3RvcnkiKSxvPWkudG9LZXllZFNlcSgpLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHguaXMoZSxyKX0pLG8/WzMsM106WzQsbS5wdXQody5hZGRIaXN0b3J5SXRlbShyKSldO2Nhc2UgMjplLnNlbnQoKSxlLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX1mdW5jdGlvbiBwKCl7dmFyIGUsdCxuLHI7cmV0dXJuIGQodGhpcyxmdW5jdGlvbihpKXtzd2l0Y2goaS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LG0uc2VsZWN0KHkuZ2V0U2VsZWN0ZWRTZXNzaW9uKV07Y2FzZSAxOnJldHVybiBlPWkuc2VudCgpLnF1ZXJ5LFs0LG0uc2VsZWN0KGsuZ2V0U2V0dGluZ3MpXTtjYXNlIDI6dD1pLnNlbnQoKSxpLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBpLnRyeXMucHVzaChbMyw1LCw2XSksbj1PLnByZXR0aWZ5KGUse3ByaW50V2lkdGg6dFsicHJldHRpZXIucHJpbnRXaWR0aCJdLHRhYldpZHRoOnRbInByZXR0aWVyLnRhYldpZHRoIl0sdXNlVGFiczp0WyJwcmV0dGllci51c2VUYWJzIl19KSxbNCxtLnB1dChDLmVkaXRRdWVyeShuKSldO2Nhc2UgNDpyZXR1cm4gaS5zZW50KCksWzMsNl07Y2FzZSA1OnJldHVybiByPWkuc2VudCgpLGNvbnNvbGUubG9nKHIpLFszLDZdO2Nhc2UgNjpyZXR1cm5bMl19fSl9dmFyIGY9ZnVuY3Rpb24oKXtyZXR1cm4gZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKXt0PWFyZ3VtZW50c1tuXTtmb3IodmFyIGkgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSl9cmV0dXJuIGV9LGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIoW2UsdF0pfX1mdW5jdGlvbiByKG4pe2lmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dTspdHJ5e2lmKGk9MSxvJiYoYT0yJm5bMF0/by5yZXR1cm46blswXT9vLnRocm93fHwoKGE9by5yZXR1cm4pJiZhLmNhbGwobyksMCk6by5uZXh0KSYmIShhPWEuY2FsbChvLG5bMV0pKS5kb25lKXJldHVybiBhO3N3aXRjaChvPTAsYSYmKG49WzImblswXSxhLnZhbHVlXSksblswXSl7Y2FzZSAwOmNhc2UgMTphPW47YnJlYWs7Y2FzZSA0OnJldHVybiB1LmxhYmVsKysse3ZhbHVlOm5bMV0sZG9uZTohMX07Y2FzZSA1OnUubGFiZWwrKyxvPW5bMV0sbj1bMF07Y29udGludWU7Y2FzZSA3Om49dS5vcHMucG9wKCksdS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoYT11LnRyeXMsIShhPWEubGVuZ3RoPjAmJmFbYS5sZW5ndGgtMV0pJiYoNj09PW5bMF18fDI9PT1uWzBdKSl7dT0wO2NvbnRpbnVlfWlmKDM9PT1uWzBdJiYoIWF8fG5bMV0+YVswXSYmblsxXTxhWzNdKSl7dS5sYWJlbD1uWzFdO2JyZWFrfWlmKDY9PT1uWzBdJiZ1LmxhYmVsPGFbMV0pe3UubGFiZWw9YVsxXSxhPW47YnJlYWt9aWYoYSYmdS5sYWJlbDxhWzJdKXt1LmxhYmVsPWFbMl0sdS5vcHMucHVzaChuKTticmVha31hWzJdJiZ1Lm9wcy5wb3AoKSx1LnRyeXMucG9wKCk7Y29udGludWV9bj10LmNhbGwoZSx1KX1jYXRjaChlKXtuPVs2LGVdLG89MH1maW5hbGx5e2k9YT0wfWlmKDUmblswXSl0aHJvdyBuWzFdO3JldHVybnt2YWx1ZTpuWzBdP25bMV06dm9pZCAwLGRvbmU6ITB9fXZhciBpLG8sYSxzLHU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmYVswXSl0aHJvdyBhWzFdO3JldHVybiBhWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHM9e25leHQ6bigwKSx0aHJvdzpuKDEpLHJldHVybjpuKDIpfSwiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmKHNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksc307T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoLG09big1NSksZz1uKDEwNCkseT1uKDEyKSx2PW4oNTExKSxiPW4oNTEyKSx4PW4oMTQpLEM9bigxNiksRT1uKDY2KSxEPW4oNjcpLHc9bigxMzEpLFM9big3Nyksaz1uKDE3KSxBPW4oNjgpLF89bigyNDUpLFQ9big3KSxPPW4oNjUpLEY9big1MTMpO3Quc2Vzc2lvbnNTYWdhcz1bbS50YWtlTGF0ZXN0KCJHRVRfUVVFUllfRkFDVFMiLE8uc2FmZWx5KHIpKSxtLnRha2VMYXRlc3QoIlNFVF9PUEVSQVRJT05fTkFNRSIsTy5zYWZlbHkocikpLG0udGFrZUV2ZXJ5KCJFRElUX1FVRVJZIixPLnNhZmVseShyKSksbS50YWtlRXZlcnkoIkVESVRfUVVFUlkiLE8uc2FmZWx5KGkpKSxtLnRha2VFdmVyeSgiUlVOX1FVRVJZX0FUX1BPU0lUSU9OIixPLnNhZmVseShvKSksbS50YWtlTGF0ZXN0KCJGRVRDSF9TQ0hFTUEiLE8uc2FmZWx5KHMpKSxtLnRha2VMYXRlc3QoIlJFRkVUQ0hfU0NIRU1BIixPLnNhZmVseSh1KSksbS50YWtlTGF0ZXN0KCJTQ0hFTUFfRkVUQ0hJTkdfU1VDQ0VTUyIsTy5zYWZlbHkoYykpLG0udGFrZUV2ZXJ5KCJRVUVSWV9TVUNDRVNTIixPLnNhZmVseShsKSksbS50YWtlTGF0ZXN0KCJQUkVUVElGWV9RVUVSWSIsTy5zYWZlbHkocCkpXX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtpZihuJiYhKG4ubGVuZ3RoPDEpKXt2YXIgcj1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lJiZlLm5hbWUudmFsdWV9KTtpZih0JiYtMSE9PXIuaW5kZXhPZih0KSlyZXR1cm4gdDtpZih0JiZlKXt2YXIgaT1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lJiZlLm5hbWUudmFsdWV9KSxvPWkuaW5kZXhPZih0KTtpZigtMSE9PW8mJm88ci5sZW5ndGgpcmV0dXJuIHJbb119cmV0dXJuIHJbMF19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZT9pKGUsdCk6bnVsbCxyPVtdO3JldHVybiB0LmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7Ik9wZXJhdGlvbkRlZmluaXRpb24iPT09ZS5raW5kJiZyLnB1c2goZSl9KSx7dmFyaWFibGVUb1R5cGU6bixvcGVyYXRpb25zOnJ9fWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB0LmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7aWYoIk9wZXJhdGlvbkRlZmluaXRpb24iPT09dC5raW5kKXt2YXIgcj10LnZhcmlhYmxlRGVmaW5pdGlvbnM7ciYmci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXQudmFyaWFibGUsaT10LnR5cGUsYT1vLnR5cGVGcm9tQVNUKGUsaSk7YSYmKG5bci5uYW1lLnZhbHVlXT1hKX0pfX0pLG59T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNyk7dC5nZXRRdWVyeUZhY3RzPXIsdC5jb2xsZWN0VmFyaWFibGVzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtzd2l0Y2goZS5hcnJheUZvcm1hdCl7Y2FzZSJpbmRleCI6cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbnVsbD09PW4/W28odCxlKSwiWyIsciwiXSJdLmpvaW4oIiIpOltvKHQsZSksIlsiLG8ocixlKSwiXT0iLG8obixlKV0uam9pbigiIil9O2Nhc2UiYnJhY2tldCI6cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PT1uP28odCxlKTpbbyh0LGUpLCJbXT0iLG8obixlKV0uam9pbigiIil9O2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PT1uP28odCxlKTpbbyh0LGUpLCI9IixvKG4sZSldLmpvaW4oIiIpfX19ZnVuY3Rpb24gaShlKXt2YXIgdDtzd2l0Y2goZS5hcnJheUZvcm1hdCl7Y2FzZSJpbmRleCI6cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtpZih0PS9cWyhcZCopXF0kLy5leGVjKGUpLGU9ZS5yZXBsYWNlKC9cW1xkKlxdJC8sIiIpLCF0KXJldHVybiB2b2lkKHJbZV09bik7dm9pZCAwPT09cltlXSYmKHJbZV09e30pLHJbZV1bdFsxXV09bn07Y2FzZSJicmFja2V0IjpyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0PS8oXFtcXSkkLy5leGVjKGUpLGU9ZS5yZXBsYWNlKC9cW1xdJC8sIiIpLHQ/dm9pZCAwPT09cltlXT92b2lkKHJbZV09W25dKTp2b2lkKHJbZV09W10uY29uY2F0KHJbZV0sbikpOnZvaWQocltlXT1uKX07ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW5bZV0pcmV0dXJuIHZvaWQobltlXT10KTtuW2VdPVtdLmNvbmNhdChuW2VdLHQpfX19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiB0LmVuY29kZT90LnN0cmljdD9jKGUpOmVuY29kZVVSSUNvbXBvbmVudChlKTplfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5zb3J0KCk6Im9iamVjdCI9PT10eXBlb2YgZT9hKE9iamVjdC5rZXlzKGUpKS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE51bWJlcihlKS1OdW1iZXIodCl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KTplfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5pbmRleE9mKCI/Iik7cmV0dXJuLTE9PT10PyIiOmUuc2xpY2UodCsxKX1mdW5jdGlvbiB1KGUsdCl7dD1sKHthcnJheUZvcm1hdDoibm9uZSJ9LHQpO3ZhciBuPWkodCkscj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiJzdHJpbmciIT09dHlwZW9mIGU/cjooZT1lLnRyaW0oKS5yZXBsYWNlKC9eWz8jJl0vLCIiKSk/KGUuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSgvXCsvZywiICIpLnNwbGl0KCI9IiksaT10LnNoaWZ0KCksbz10Lmxlbmd0aD4wP3Quam9pbigiPSIpOnZvaWQgMDtvPXZvaWQgMD09PW8/bnVsbDpwKG8pLG4ocChpKSxvLHIpfSksT2JqZWN0LmtleXMocikuc29ydCgpLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXJbdF07cmV0dXJuIEJvb2xlYW4obikmJiJvYmplY3QiPT09dHlwZW9mIG4mJiFBcnJheS5pc0FycmF5KG4pP2VbdF09YShuKTplW3RdPW4sZX0sT2JqZWN0LmNyZWF0ZShudWxsKSkpOnJ9dmFyIGM9big1MTQpLGw9big1NCkscD1uKDUxNSk7dC5leHRyYWN0PXMsdC5wYXJzZT11LHQuc3RyaW5naWZ5PWZ1bmN0aW9uKGUsdCl7dD1sKHtlbmNvZGU6ITAsc3RyaWN0OiEwLGFycmF5Rm9ybWF0OiJub25lIn0sdCksITE9PT10LnNvcnQmJih0LnNvcnQ9ZnVuY3Rpb24oKXt9KTt2YXIgbj1yKHQpO3JldHVybiBlP09iamVjdC5rZXlzKGUpLnNvcnQodC5zb3J0KS5tYXAoZnVuY3Rpb24ocil7dmFyIGk9ZVtyXTtpZih2b2lkIDA9PT1pKXJldHVybiIiO2lmKG51bGw9PT1pKXJldHVybiBvKHIsdCk7aWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIGE9W107cmV0dXJuIGkuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUmJmEucHVzaChuKHIsZSxhLmxlbmd0aCkpfSksYS5qb2luKCImIil9cmV0dXJuIG8ocix0KSsiPSIrbyhpLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4wfSkuam9pbigiJiIpOiIifSx0LnBhcnNlVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VybDplLnNwbGl0KCI/IilbMF18fCIiLHF1ZXJ5OnUocyhlKSx0KX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpKl0vZyxmdW5jdGlvbihlKXtyZXR1cm4iJSIrZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlLmpvaW4oIiIpKX1jYXRjaChlKXt9aWYoMT09PWUubGVuZ3RoKXJldHVybiBlO3Q9dHx8MTt2YXIgbj1lLnNsaWNlKDAsdCksaT1lLnNsaWNlKHQpO3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoW10scihuKSxyKGkpKX1mdW5jdGlvbiBpKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKGkpe2Zvcih2YXIgdD1lLm1hdGNoKGEpLG49MTtuPHQubGVuZ3RoO24rKyllPXIodCxuKS5qb2luKCIiKSx0PWUubWF0Y2goYSk7cmV0dXJuIGV9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0PXsiJUZFJUZGIjoiXHVmZmZkXHVmZmZkIiwiJUZGJUZFIjoiXHVmZmZkXHVmZmZkIn0sbj1zLmV4ZWMoZSk7bjspe3RyeXt0W25bMF1dPWRlY29kZVVSSUNvbXBvbmVudChuWzBdKX1jYXRjaChlKXt2YXIgcj1pKG5bMF0pO3IhPT1uWzBdJiYodFtuWzBdXT1yKX1uPXMuZXhlYyhlKX10WyIlQzIiXT0iXHVmZmZkIjtmb3IodmFyIG89T2JqZWN0LmtleXModCksYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgdT1vW2FdO2U9ZS5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLHRbdV0pfXJldHVybiBlfXZhciBhPW5ldyBSZWdFeHAoIiVbYS1mMC05XXsyfSIsImdpIikscz1uZXcgUmVnRXhwKCIoJVthLWYwLTldezJ9KSsiLCJnaSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigic3RyaW5nIiE9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGBlbmNvZGVkVVJJYCB0byBiZSBvZiB0eXBlIGBzdHJpbmdgLCBnb3QgYCIrdHlwZW9mIGUrImAiKTt0cnl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cKy9nLCIgIiksZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBvKGUpfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlLHQsbixyO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxpKCldO2Nhc2UgMTpyZXR1cm4gZT1vLnNlbnQoKSxbNCxhLnNlbGVjdChzLmdldEVuZHBvaW50KV07Y2FzZSAyOnJldHVybiB0PW8uc2VudCgpLFs0LGZldGNoKCJodHRwczovL2FwaS5ncmFwaHFsYmluLmNvbS8iLHttZXRob2Q6InBvc3QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7cXVlcnk6IlxuICAgICAgICBtdXRhdGlvbiAoJHNlc3Npb246IFN0cmluZyEgJGVuZHBvaW50OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkU2Vzc2lvbihzZXNzaW9uOiAkc2Vzc2lvbiBlbmRwb2ludDogJGVuZHBvaW50KSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgIix2YXJpYWJsZXM6e3Nlc3Npb246SlNPTi5zdHJpbmdpZnkoZSksZW5kcG9pbnQ6dH19KX0pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuanNvbigpfSldO2Nhc2UgMzpyZXR1cm4gbj1vLnNlbnQoKSxyPSJodHRwczovL2dyYXBocWxiaW4uY29tL3YyLyIrbi5kYXRhLmFkZFNlc3Npb24uaWQsWzQsYS5wdXQodS5zZXRTaGFyZVVybChyKSldO2Nhc2UgNDpyZXR1cm4gby5zZW50KCksWzJdfX0pfWZ1bmN0aW9uIGkoKXt2YXIgZSx0LG4scjtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsYS5zZWxlY3QoKV07Y2FzZSAxOnJldHVybiBlPWkuc2VudCgpLFs0LGEuc2VsZWN0KGwuZ2V0U2hhcmluZ1N0YXRlKV07Y2FzZSAyOnJldHVybiB0PWkuc2VudCgpLG49YygpLGU9ZS51cGRhdGUoIndvcmtzcGFjZXMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiBuPT09ZS5zZWxlY3RlZFdvcmtzcGFjZX0pfSkuc2V0KCJzZWxlY3RlZFdvcmtzcGFjZSIsbisifiIrZS5zZWxlY3RlZFdvcmtzcGFjZSkudXBkYXRlKCJ3b3Jrc3BhY2VzIixmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXBLZXlzKGZ1bmN0aW9uKGUpe3JldHVybiBuKyJ+IitlfSl9KSxyPWUud29ya3NwYWNlcy5nZXQoZS5zZWxlY3RlZFdvcmtzcGFjZSkuc2Vzc2lvbnMuc2VsZWN0ZWRTZXNzaW9uSWQsdC5hbGxUYWJzfHwoZT1lLnVwZGF0ZUluKFsid29ya3NwYWNlcyIsZS5zZWxlY3RlZFdvcmtzcGFjZSwic2Vzc2lvbnMiLCJzZXNzaW9ucyJdLGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiB0PT09cn0pfSkuc2V0SW4oWyJ3b3Jrc3BhY2VzIixlLnNlbGVjdGVkV29ya3NwYWNlLCJzZXNzaW9ucyIsInNlc3Npb25Db3VudCJdLDEpKSx0LmhlYWRlcnN8fChlPWUudXBkYXRlSW4oWyJ3b3Jrc3BhY2VzIixlLnNlbGVjdGVkV29ya3NwYWNlLCJzZXNzaW9ucyIsInNlc3Npb25zIl0sZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNldCgiaGVhZGVycyIsIiIpfSl9KSksdC5oaXN0b3J5fHwoZT1lLnNldEluKFsid29ya3NwYWNlcyIsZS5zZWxlY3RlZFdvcmtzcGFjZSwiaGlzdG9yeSJdLHAuTWFwKCkpKSxbMixlXX19KX12YXIgbz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByKFtlLHRdKX19ZnVuY3Rpb24gcihuKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3U7KXRyeXtpZihpPTEsbyYmKGE9MiZuWzBdP28ucmV0dXJuOm5bMF0/by50aHJvd3x8KChhPW8ucmV0dXJuKSYmYS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoYT1hLmNhbGwobyxuWzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gobz0wLGEmJihuPVsyJm5bMF0sYS52YWx1ZV0pLG5bMF0pe2Nhc2UgMDpjYXNlIDE6YT1uO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdS5sYWJlbCsrLHt2YWx1ZTpuWzFdLGRvbmU6ITF9O2Nhc2UgNTp1LmxhYmVsKyssbz1uWzFdLG49WzBdO2NvbnRpbnVlO2Nhc2UgNzpuPXUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9dS50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKDY9PT1uWzBdfHwyPT09blswXSkpe3U9MDtjb250aW51ZX1pZigzPT09blswXSYmKCFhfHxuWzFdPmFbMF0mJm5bMV08YVszXSkpe3UubGFiZWw9blsxXTticmVha31pZig2PT09blswXSYmdS5sYWJlbDxhWzFdKXt1LmxhYmVsPWFbMV0sYT1uO2JyZWFrfWlmKGEmJnUubGFiZWw8YVsyXSl7dS5sYWJlbD1hWzJdLHUub3BzLnB1c2gobik7YnJlYWt9YVsyXSYmdS5vcHMucG9wKCksdS50cnlzLnBvcCgpO2NvbnRpbnVlfW49dC5jYWxsKGUsdSl9Y2F0Y2goZSl7bj1bNixlXSxvPTB9ZmluYWxseXtpPWE9MH1pZig1Jm5bMF0pdGhyb3cgblsxXTtyZXR1cm57dmFsdWU6blswXT9uWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgaSxvLGEscyx1PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmFbMF0pdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzPXtuZXh0Om4oMCksdGhyb3c6bigxKSxyZXR1cm46bigyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihzW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHN9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1uKDU1KSxzPW4oMTIpLHU9bigxMzIpLGM9big2NCksbD1uKDI1NCkscD1uKDE0KSxmPW4oNjUpO3Quc2hhcmluZ1NhZ2FzPVthLnRha2VFdmVyeSgiU0hBUkUiLGYuc2FmZWx5KHIpKV19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gby5kZWJvdW5jZShmdW5jdGlvbigpe3ZhciB0PWUuZ2V0U3RhdGUoKTt0LnN0YXRlSW5qZWN0ZWR8fGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJncmFwaHFsLXBsYXlncm91bmQiLEpTT04uc3RyaW5naWZ5KHQpKX0sMzAwLHt0cmFpbGluZzohMH0pfWZ1bmN0aW9uIGkoKXt0cnl7dmFyIGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImdyYXBocWwtcGxheWdyb3VuZCIpO2lmKGUpe3ZhciB0PUpTT04ucGFyc2UoZSk7cmV0dXJuIGEuZGVzZXJpYWxpemVQZXJzaXN0ZWRTdGF0ZSh0KX19Y2F0Y2goZSl7fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big3NCksYT1uKDI1MCk7dC5zZXJpYWxpemVTdGF0ZT1yLHQuZGVzZXJpYWxpemVTdGF0ZT1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmJvZHlPcGVuQ2xhc3NOYW1lPXQucG9ydGFsQ2xhc3NOYW1lPXZvaWQgMDt2YXIgdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGw9bigwKSxwPXIobCksZj1uKDMwKSxkPXIoZiksaD1uKDE4KSxtPXIoaCksZz1uKDUxOSkseT1yKGcpLHY9bigyNTYpLGI9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fSh2KSx4PW4oMjU3KSxDPXIoeCksRT1uKDUyMyksRD10LnBvcnRhbENsYXNzTmFtZT0iUmVhY3RNb2RhbFBvcnRhbCIsdz10LmJvZHlPcGVuQ2xhc3NOYW1lPSJSZWFjdE1vZGFsX19Cb2R5LS1vcGVuIixTPXZvaWQgMCE9PWQuZGVmYXVsdC5jcmVhdGVQb3J0YWwsaz1TP2QuZGVmYXVsdC5jcmVhdGVQb3J0YWw6ZC5kZWZhdWx0LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixhO2kodGhpcyx0KTtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGMpLGY9MDtmPGM7ZisrKWxbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuPXI9byh0aGlzLChlPXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5yZW1vdmVQb3J0YWw9ZnVuY3Rpb24oKXshUyYmZC5kZWZhdWx0LnVubW91bnRDb21wb25lbnRBdE5vZGUoci5ub2RlKSxzKHIucHJvcHMucGFyZW50U2VsZWN0b3IpLnJlbW92ZUNoaWxkKHIubm9kZSl9LHIucG9ydGFsUmVmPWZ1bmN0aW9uKGUpe3IucG9ydGFsPWV9LHIucmVuZGVyUG9ydGFsPWZ1bmN0aW9uKGUpe3ZhciBuPWsocixwLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LmRlZmF1bHQsdSh7ZGVmYXVsdFN0eWxlczp0LmRlZmF1bHRTdHlsZXN9LGUpKSxyLm5vZGUpO3IucG9ydGFsUmVmKG4pfSxhPW4sbyhyLGEpfXJldHVybiBhKHQsZSksYyh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih4LmNhblVzZURPTSl7U3x8KHRoaXMubm9kZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSksdGhpcy5ub2RlLmNsYXNzTmFtZT10aGlzLnByb3BzLnBvcnRhbENsYXNzTmFtZTtzKHRoaXMucHJvcHMucGFyZW50U2VsZWN0b3IpLmFwcGVuZENoaWxkKHRoaXMubm9kZSksIVMmJnRoaXMucmVuZGVyUG9ydGFsKHRoaXMucHJvcHMpfX19LHtrZXk6ImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57cHJldlBhcmVudDpzKGUucGFyZW50U2VsZWN0b3IpLG5leHRQYXJlbnQ6cyh0aGlzLnByb3BzLnBhcmVudFNlbGVjdG9yKX19fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtpZih4LmNhblVzZURPTSl7dmFyIHI9dGhpcy5wcm9wcyxpPXIuaXNPcGVuLG89ci5wb3J0YWxDbGFzc05hbWU7aWYoZS5wb3J0YWxDbGFzc05hbWUhPT1vJiYodGhpcy5ub2RlLmNsYXNzTmFtZT1vKSxlLmlzT3Blbnx8aSl7dmFyIGE9bi5wcmV2UGFyZW50LHM9bi5uZXh0UGFyZW50O3MhPT1hJiYoYS5yZW1vdmVDaGlsZCh0aGlzLm5vZGUpLHMuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKSksIVMmJnRoaXMucmVuZGVyUG9ydGFsKHRoaXMucHJvcHMpfX19fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih4LmNhblVzZURPTSYmdGhpcy5ub2RlJiZ0aGlzLnBvcnRhbCl7dmFyIGU9dGhpcy5wb3J0YWwuc3RhdGUsdD1EYXRlLm5vdygpLG49ZS5pc09wZW4mJnRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMmJihlLmNsb3Nlc0F0fHx0K3RoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMpO24/KGUuYmVmb3JlQ2xvc2V8fHRoaXMucG9ydGFsLmNsb3NlV2l0aFRpbWVvdXQoKSxzZXRUaW1lb3V0KHRoaXMucmVtb3ZlUG9ydGFsLG4tdCkpOnRoaXMucmVtb3ZlUG9ydGFsKCl9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB4LmNhblVzZURPTSYmUz8oIXRoaXMubm9kZSYmUyYmKHRoaXMubm9kZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSksayhwLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LmRlZmF1bHQsdSh7cmVmOnRoaXMucG9ydGFsUmVmLGRlZmF1bHRTdHlsZXM6dC5kZWZhdWx0U3R5bGVzfSx0aGlzLnByb3BzKSksdGhpcy5ub2RlKSk6bnVsbH19XSxbe2tleToic2V0QXBwRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7Yi5zZXRFbGVtZW50KGUpfX1dKSx0fShsLkNvbXBvbmVudCk7QS5wcm9wVHlwZXM9e2lzT3BlbjptLmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkLHN0eWxlOm0uZGVmYXVsdC5zaGFwZSh7Y29udGVudDptLmRlZmF1bHQub2JqZWN0LG92ZXJsYXk6bS5kZWZhdWx0Lm9iamVjdH0pLHBvcnRhbENsYXNzTmFtZTptLmRlZmF1bHQuc3RyaW5nLGJvZHlPcGVuQ2xhc3NOYW1lOm0uZGVmYXVsdC5zdHJpbmcsaHRtbE9wZW5DbGFzc05hbWU6bS5kZWZhdWx0LnN0cmluZyxjbGFzc05hbWU6bS5kZWZhdWx0Lm9uZU9mVHlwZShbbS5kZWZhdWx0LnN0cmluZyxtLmRlZmF1bHQuc2hhcGUoe2Jhc2U6bS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGFmdGVyT3BlbjptLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsYmVmb3JlQ2xvc2U6bS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfSldKSxvdmVybGF5Q2xhc3NOYW1lOm0uZGVmYXVsdC5vbmVPZlR5cGUoW20uZGVmYXVsdC5zdHJpbmcsbS5kZWZhdWx0LnNoYXBlKHtiYXNlOm0uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxhZnRlck9wZW46bS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGJlZm9yZUNsb3NlOm0uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0pXSksYXBwRWxlbWVudDptLmRlZmF1bHQuaW5zdGFuY2VPZihDLmRlZmF1bHQpLG9uQWZ0ZXJPcGVuOm0uZGVmYXVsdC5mdW5jLG9uUmVxdWVzdENsb3NlOm0uZGVmYXVsdC5mdW5jLGNsb3NlVGltZW91dE1TOm0uZGVmYXVsdC5udW1iZXIsYXJpYUhpZGVBcHA6bS5kZWZhdWx0LmJvb2wsc2hvdWxkRm9jdXNBZnRlclJlbmRlcjptLmRlZmF1bHQuYm9vbCxzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrOm0uZGVmYXVsdC5ib29sLHNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZTptLmRlZmF1bHQuYm9vbCxwYXJlbnRTZWxlY3RvcjptLmRlZmF1bHQuZnVuYyxhcmlhOm0uZGVmYXVsdC5vYmplY3Qscm9sZTptLmRlZmF1bHQuc3RyaW5nLGNvbnRlbnRMYWJlbDptLmRlZmF1bHQuc3RyaW5nLHNob3VsZENsb3NlT25Fc2M6bS5kZWZhdWx0LmJvb2wsb3ZlcmxheVJlZjptLmRlZmF1bHQuZnVuYyxjb250ZW50UmVmOm0uZGVmYXVsdC5mdW5jfSxBLmRlZmF1bHRQcm9wcz17aXNPcGVuOiExLHBvcnRhbENsYXNzTmFtZTpELGJvZHlPcGVuQ2xhc3NOYW1lOncsYXJpYUhpZGVBcHA6ITAsY2xvc2VUaW1lb3V0TVM6MCxzaG91bGRGb2N1c0FmdGVyUmVuZGVyOiEwLHNob3VsZENsb3NlT25Fc2M6ITAsc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljazohMCxzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6ITAscGFyZW50U2VsZWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYm9keX19LEEuZGVmYXVsdFN0eWxlcz17b3ZlcmxheTp7cG9zaXRpb246ImZpeGVkIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSkifSxjb250ZW50Ontwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNDBweCIsbGVmdDoiNDBweCIscmlnaHQ6IjQwcHgiLGJvdHRvbToiNDBweCIsYm9yZGVyOiIxcHggc29saWQgI2NjYyIsYmFja2dyb3VuZDoiI2ZmZiIsb3ZlcmZsb3c6ImF1dG8iLFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiJ0b3VjaCIsYm9yZGVyUmFkaXVzOiI0cHgiLG91dGxpbmU6Im5vbmUiLHBhZGRpbmc6IjIwcHgifX0sKDAsRS5wb2x5ZmlsbCkoQSksdC5kZWZhdWx0PUF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYz0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxwPW4oMCksZj1pKHApLGQ9bigxOCksaD1pKGQpLG09big1MjApLGc9cihtKSx5PW4oNTIxKSx2PWkoeSksYj1uKDI1NikseD1yKGIpLEM9big1MjIpLEU9cihDKSxEPW4oMjU3KSx3PWkoRCksUz17b3ZlcmxheToiUmVhY3RNb2RhbF9fT3ZlcmxheSIsY29udGVudDoiUmVhY3RNb2RhbF9fQ29udGVudCJ9LGs9OSxBPTI3LF89MCxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpO3ZhciBuPWEodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5zZXRPdmVybGF5UmVmPWZ1bmN0aW9uKGUpe24ub3ZlcmxheT1lLG4ucHJvcHMub3ZlcmxheVJlZiYmbi5wcm9wcy5vdmVybGF5UmVmKGUpfSxuLnNldENvbnRlbnRSZWY9ZnVuY3Rpb24oZSl7bi5jb250ZW50PWUsbi5wcm9wcy5jb250ZW50UmVmJiZuLnByb3BzLmNvbnRlbnRSZWYoZSl9LG4uYWZ0ZXJDbG9zZT1mdW5jdGlvbigpe3ZhciBlPW4ucHJvcHMsdD1lLmFwcEVsZW1lbnQscj1lLmFyaWFIaWRlQXBwLGk9ZS5odG1sT3BlbkNsYXNzTmFtZSxvPWUuYm9keU9wZW5DbGFzc05hbWU7RS5yZW1vdmUoZG9jdW1lbnQuYm9keSxvKSxpJiZFLnJlbW92ZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLGkpLHImJl8+MCYmMD09PShfLT0xKSYmeC5zaG93KHQpLG4ucHJvcHMuc2hvdWxkRm9jdXNBZnRlclJlbmRlciYmKG4ucHJvcHMuc2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlPyhnLnJldHVybkZvY3VzKCksZy50ZWFyZG93blNjb3BlZEZvY3VzKCkpOmcucG9wV2l0aG91dEZvY3VzKCkpfSxuLm9wZW49ZnVuY3Rpb24oKXtuLmJlZm9yZU9wZW4oKSxuLnN0YXRlLmFmdGVyT3BlbiYmbi5zdGF0ZS5iZWZvcmVDbG9zZT8oY2xlYXJUaW1lb3V0KG4uY2xvc2VUaW1lciksbi5zZXRTdGF0ZSh7YmVmb3JlQ2xvc2U6ITF9KSk6KG4ucHJvcHMuc2hvdWxkRm9jdXNBZnRlclJlbmRlciYmKGcuc2V0dXBTY29wZWRGb2N1cyhuLm5vZGUpLGcubWFya0ZvckZvY3VzTGF0ZXIoKSksbi5zZXRTdGF0ZSh7aXNPcGVuOiEwfSxmdW5jdGlvbigpe24uc2V0U3RhdGUoe2FmdGVyT3BlbjohMH0pLG4ucHJvcHMuaXNPcGVuJiZuLnByb3BzLm9uQWZ0ZXJPcGVuJiZuLnByb3BzLm9uQWZ0ZXJPcGVuKCl9KSl9LG4uY2xvc2U9ZnVuY3Rpb24oKXtuLnByb3BzLmNsb3NlVGltZW91dE1TPjA/bi5jbG9zZVdpdGhUaW1lb3V0KCk6bi5jbG9zZVdpdGhvdXRUaW1lb3V0KCl9LG4uZm9jdXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGVudCYmIW4uY29udGVudEhhc0ZvY3VzKCkmJm4uY29udGVudC5mb2N1cygpfSxuLmNsb3NlV2l0aFRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgZT1EYXRlLm5vdygpK24ucHJvcHMuY2xvc2VUaW1lb3V0TVM7bi5zZXRTdGF0ZSh7YmVmb3JlQ2xvc2U6ITAsY2xvc2VzQXQ6ZX0sZnVuY3Rpb24oKXtuLmNsb3NlVGltZXI9c2V0VGltZW91dChuLmNsb3NlV2l0aG91dFRpbWVvdXQsbi5zdGF0ZS5jbG9zZXNBdC1EYXRlLm5vdygpKX0pfSxuLmNsb3NlV2l0aG91dFRpbWVvdXQ9ZnVuY3Rpb24oKXtuLnNldFN0YXRlKHtiZWZvcmVDbG9zZTohMSxpc09wZW46ITEsYWZ0ZXJPcGVuOiExLGNsb3Nlc0F0Om51bGx9LG4uYWZ0ZXJDbG9zZSl9LG4uaGFuZGxlS2V5RG93bj1mdW5jdGlvbihlKXtlLmtleUNvZGU9PT1rJiYoMCx2LmRlZmF1bHQpKG4uY29udGVudCxlKSxuLnByb3BzLnNob3VsZENsb3NlT25Fc2MmJmUua2V5Q29kZT09PUEmJihlLnN0b3BQcm9wYWdhdGlvbigpLG4ucmVxdWVzdENsb3NlKGUpKX0sbi5oYW5kbGVPdmVybGF5T25DbGljaz1mdW5jdGlvbihlKXtudWxsPT09bi5zaG91bGRDbG9zZSYmKG4uc2hvdWxkQ2xvc2U9ITApLG4uc2hvdWxkQ2xvc2UmJm4ucHJvcHMuc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljayYmKG4ub3duZXJIYW5kbGVzQ2xvc2UoKT9uLnJlcXVlc3RDbG9zZShlKTpuLmZvY3VzQ29udGVudCgpKSxuLnNob3VsZENsb3NlPW51bGx9LG4uaGFuZGxlQ29udGVudE9uTW91c2VVcD1mdW5jdGlvbigpe24uc2hvdWxkQ2xvc2U9ITF9LG4uaGFuZGxlT3ZlcmxheU9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe24ucHJvcHMuc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGlja3x8ZS50YXJnZXQhPW4ub3ZlcmxheXx8ZS5wcmV2ZW50RGVmYXVsdCgpfSxuLmhhbmRsZUNvbnRlbnRPbkNsaWNrPWZ1bmN0aW9uKCl7bi5zaG91bGRDbG9zZT0hMX0sbi5oYW5kbGVDb250ZW50T25Nb3VzZURvd249ZnVuY3Rpb24oKXtuLnNob3VsZENsb3NlPSExfSxuLnJlcXVlc3RDbG9zZT1mdW5jdGlvbihlKXtyZXR1cm4gbi5vd25lckhhbmRsZXNDbG9zZSgpJiZuLnByb3BzLm9uUmVxdWVzdENsb3NlKGUpfSxuLm93bmVySGFuZGxlc0Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucHJvcHMub25SZXF1ZXN0Q2xvc2V9LG4uc2hvdWxkQmVDbG9zZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hbi5zdGF0ZS5pc09wZW4mJiFuLnN0YXRlLmJlZm9yZUNsb3NlfSxuLmNvbnRlbnRIYXNGb2N1cz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09bi5jb250ZW50fHxuLmNvbnRlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl9LG4uYnVpbGRDbGFzc05hbWU9ZnVuY3Rpb24oZSx0KXt2YXIgcj0ib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiB0PyJ1bmRlZmluZWQiOmModCkpP3Q6e2Jhc2U6U1tlXSxhZnRlck9wZW46U1tlXSsiLS1hZnRlci1vcGVuIixiZWZvcmVDbG9zZTpTW2VdKyItLWJlZm9yZS1jbG9zZSJ9LGk9ci5iYXNlO3JldHVybiBuLnN0YXRlLmFmdGVyT3BlbiYmKGk9aSsiICIrci5hZnRlck9wZW4pLG4uc3RhdGUuYmVmb3JlQ2xvc2UmJihpPWkrIiAiK3IuYmVmb3JlQ2xvc2UpLCJzdHJpbmciPT09dHlwZW9mIHQmJnQ/aSsiICIrdDppfSxuLmFyaWFBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdFsiYXJpYS0iK25dPWVbbl0sdH0se30pfSxuLnN0YXRlPXthZnRlck9wZW46ITEsYmVmb3JlQ2xvc2U6ITF9LG4uc2hvdWxkQ2xvc2U9bnVsbCxuLm1vdmVGcm9tQ29udGVudFRvT3ZlcmxheT1udWxsLG59cmV0dXJuIHModCxlKSxsKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuaXNPcGVuJiZ0aGlzLm9wZW4oKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3BzLmlzT3BlbiYmIWUuaXNPcGVuP3RoaXMub3BlbigpOiF0aGlzLnByb3BzLmlzT3BlbiYmZS5pc09wZW4mJnRoaXMuY2xvc2UoKSx0aGlzLnByb3BzLnNob3VsZEZvY3VzQWZ0ZXJSZW5kZXImJnRoaXMuc3RhdGUuaXNPcGVuJiYhdC5pc09wZW4mJnRoaXMuZm9jdXNDb250ZW50KCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmFmdGVyQ2xvc2UoKSxjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyKX19LHtrZXk6ImJlZm9yZU9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYXBwRWxlbWVudCxuPWUuYXJpYUhpZGVBcHAscj1lLmh0bWxPcGVuQ2xhc3NOYW1lLGk9ZS5ib2R5T3BlbkNsYXNzTmFtZTtFLmFkZChkb2N1bWVudC5ib2R5LGkpLHImJkUuYWRkKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0sciksbiYmKF8rPTEseC5oaWRlKHQpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jbGFzc05hbWUsbj1lLm92ZXJsYXlDbGFzc05hbWUscj1lLmRlZmF1bHRTdHlsZXMsaT10P3t9OnIuY29udGVudCxvPW4/e306ci5vdmVybGF5O3JldHVybiB0aGlzLnNob3VsZEJlQ2xvc2VkKCk/bnVsbDpmLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOnRoaXMuc2V0T3ZlcmxheVJlZixjbGFzc05hbWU6dGhpcy5idWlsZENsYXNzTmFtZSgib3ZlcmxheSIsbiksc3R5bGU6dSh7fSxvLHRoaXMucHJvcHMuc3R5bGUub3ZlcmxheSksb25DbGljazp0aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrLG9uTW91c2VEb3duOnRoaXMuaGFuZGxlT3ZlcmxheU9uTW91c2VEb3duLCJhcmlhLW1vZGFsIjoidHJ1ZSJ9LGYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHUoe3JlZjp0aGlzLnNldENvbnRlbnRSZWYsc3R5bGU6dSh7fSxpLHRoaXMucHJvcHMuc3R5bGUuY29udGVudCksY2xhc3NOYW1lOnRoaXMuYnVpbGRDbGFzc05hbWUoImNvbnRlbnQiLHQpLHRhYkluZGV4OiItMSIsb25LZXlEb3duOnRoaXMuaGFuZGxlS2V5RG93bixvbk1vdXNlRG93bjp0aGlzLmhhbmRsZUNvbnRlbnRPbk1vdXNlRG93bixvbk1vdXNlVXA6dGhpcy5oYW5kbGVDb250ZW50T25Nb3VzZVVwLG9uQ2xpY2s6dGhpcy5oYW5kbGVDb250ZW50T25DbGljayxyb2xlOnRoaXMucHJvcHMucm9sZSwiYXJpYS1sYWJlbCI6dGhpcy5wcm9wcy5jb250ZW50TGFiZWx9LHRoaXMuYXJpYUF0dHJpYnV0ZXModGhpcy5wcm9wcy5hcmlhfHx7fSkseyJkYXRhLXRlc3RpZCI6dGhpcy5wcm9wcy50ZXN0SWR9KSx0aGlzLnByb3BzLmNoaWxkcmVuKSl9fV0pLHR9KHAuQ29tcG9uZW50KTtULmRlZmF1bHRQcm9wcz17c3R5bGU6e292ZXJsYXk6e30sY29udGVudDp7fX0sZGVmYXVsdFN0eWxlczp7fX0sVC5wcm9wVHlwZXM9e2lzT3BlbjpoLmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkLGRlZmF1bHRTdHlsZXM6aC5kZWZhdWx0LnNoYXBlKHtjb250ZW50OmguZGVmYXVsdC5vYmplY3Qsb3ZlcmxheTpoLmRlZmF1bHQub2JqZWN0fSksc3R5bGU6aC5kZWZhdWx0LnNoYXBlKHtjb250ZW50OmguZGVmYXVsdC5vYmplY3Qsb3ZlcmxheTpoLmRlZmF1bHQub2JqZWN0fSksY2xhc3NOYW1lOmguZGVmYXVsdC5vbmVPZlR5cGUoW2guZGVmYXVsdC5zdHJpbmcsaC5kZWZhdWx0Lm9iamVjdF0pLG92ZXJsYXlDbGFzc05hbWU6aC5kZWZhdWx0Lm9uZU9mVHlwZShbaC5kZWZhdWx0LnN0cmluZyxoLmRlZmF1bHQub2JqZWN0XSksYm9keU9wZW5DbGFzc05hbWU6aC5kZWZhdWx0LnN0cmluZyxodG1sT3BlbkNsYXNzTmFtZTpoLmRlZmF1bHQuc3RyaW5nLGFyaWFIaWRlQXBwOmguZGVmYXVsdC5ib29sLGFwcEVsZW1lbnQ6aC5kZWZhdWx0Lmluc3RhbmNlT2Yody5kZWZhdWx0KSxvbkFmdGVyT3BlbjpoLmRlZmF1bHQuZnVuYyxvblJlcXVlc3RDbG9zZTpoLmRlZmF1bHQuZnVuYyxjbG9zZVRpbWVvdXRNUzpoLmRlZmF1bHQubnVtYmVyLHNob3VsZEZvY3VzQWZ0ZXJSZW5kZXI6aC5kZWZhdWx0LmJvb2wsc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljazpoLmRlZmF1bHQuYm9vbCxzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6aC5kZWZhdWx0LmJvb2wscm9sZTpoLmRlZmF1bHQuc3RyaW5nLGNvbnRlbnRMYWJlbDpoLmRlZmF1bHQuc3RyaW5nLGFyaWE6aC5kZWZhdWx0Lm9iamVjdCxjaGlsZHJlbjpoLmRlZmF1bHQubm9kZSxzaG91bGRDbG9zZU9uRXNjOmguZGVmYXVsdC5ib29sLG92ZXJsYXlSZWY6aC5kZWZhdWx0LmZ1bmMsY29udGVudFJlZjpoLmRlZmF1bHQuZnVuYyx0ZXN0SWQ6aC5kZWZhdWx0LnN0cmluZ30sdC5kZWZhdWx0PVQsZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7aD0hMH1mdW5jdGlvbiBpKCl7aWYoaCl7aWYoaD0hMSwhZClyZXR1cm47c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXsoKDAscC5kZWZhdWx0KShkKVswXXx8ZCkuZm9jdXMoKX19LDApfX1mdW5jdGlvbiBvKCl7Zi5wdXNoKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfWZ1bmN0aW9uIGEoKXt2YXIgZT1udWxsO3RyeXtyZXR1cm4gdm9pZCgwIT09Zi5sZW5ndGgmJihlPWYucG9wKCksZS5mb2N1cygpKSl9Y2F0Y2godCl7Y29uc29sZS53YXJuKFsiWW91IHRyaWVkIHRvIHJldHVybiBmb2N1cyB0byIsZSwiYnV0IGl0IGlzIG5vdCBpbiB0aGUgRE9NIGFueW1vcmUiXS5qb2luKCIgIikpfX1mdW5jdGlvbiBzKCl7Zi5sZW5ndGg+MCYmZi5wb3AoKX1mdW5jdGlvbiB1KGUpe2Q9ZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj8od2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixpLCEwKSk6KHdpbmRvdy5hdHRhY2hFdmVudCgib25CbHVyIixyKSxkb2N1bWVudC5hdHRhY2hFdmVudCgib25Gb2N1cyIsaSkpfWZ1bmN0aW9uIGMoKXtkPW51bGwsd2luZG93LmFkZEV2ZW50TGlzdGVuZXI/KHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsaSkpOih3aW5kb3cuZGV0YWNoRXZlbnQoIm9uQmx1ciIsciksZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9uRm9jdXMiLGkpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5oYW5kbGVCbHVyPXIsdC5oYW5kbGVGb2N1cz1pLHQubWFya0ZvckZvY3VzTGF0ZXI9byx0LnJldHVybkZvY3VzPWEsdC5wb3BXaXRob3V0Rm9jdXM9cyx0LnNldHVwU2NvcGVkRm9jdXM9dSx0LnRlYXJkb3duU2NvcGVkRm9jdXM9Yzt2YXIgbD1uKDI1NSkscD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGwpLGY9W10sZD1udWxsLGg9ITF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPSgwLG8uZGVmYXVsdCkoZSk7aWYoIW4ubGVuZ3RoKXJldHVybiB2b2lkIHQucHJldmVudERlZmF1bHQoKTt2YXIgcj10LnNoaWZ0S2V5LGk9blswXSxhPW5bbi5sZW5ndGgtMV07aWYoZT09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpe2lmKCFyKXJldHVybjtzPWF9dmFyIHM7aWYoYSE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR8fHJ8fChzPWkpLGk9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50JiZyJiYocz1hKSxzKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdm9pZCBzLmZvY3VzKCk7dmFyIHU9LyhcYkNocm9tZVxifFxiU2FmYXJpXGIpXC8vLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYobnVsbCE9dSYmIkNocm9tZSIhPXVbMV0mJm51bGw9PS9cYmlQb2RcYnxcYmlQYWRcYi9nLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCkpe3ZhciBjPW4uaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtjPi0xJiYoYys9cj8tMToxKSx0LnByZXZlbnREZWZhdWx0KCksbltjXS5mb2N1cygpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIGk9bigyNTUpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShpKTtlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZHVtcENsYXNzTGlzdHM9cjt2YXIgaT17fSxvPXt9LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XXx8KGVbdF09MCksZVt0XSs9MSx0fSxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0mJihlW3RdLT0xKSx0fSx1PWZ1bmN0aW9uKGUsdCxuKXtuLmZvckVhY2goZnVuY3Rpb24obil7YSh0LG4pLGUuYWRkKG4pfSl9LGM9ZnVuY3Rpb24oZSx0LG4pe24uZm9yRWFjaChmdW5jdGlvbihuKXtzKHQsbiksMD09PXRbbl0mJmUucmVtb3ZlKG4pfSl9O3QuYWRkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZS5jbGFzc0xpc3QsImh0bWwiPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/aTpvLHQuc3BsaXQoIiAiKSl9LHQucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZS5jbGFzc0xpc3QsImh0bWwiPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/aTpvLHQuc3BsaXQoIiAiKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh0aGlzLnByb3BzLHRoaXMuc3RhdGUpO251bGwhPT1lJiZ2b2lkIDAhPT1lJiZ0aGlzLnNldFN0YXRlKGUpfWZ1bmN0aW9uIGkoZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj10aGlzLmNvbnN0cnVjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhlLHQpO3JldHVybiBudWxsIT09biYmdm9pZCAwIT09bj9uOm51bGx9dGhpcy5zZXRTdGF0ZSh0LmJpbmQodGhpcykpfWZ1bmN0aW9uIG8oZSx0KXt0cnl7dmFyIG49dGhpcy5wcm9wcyxyPXRoaXMuc3RhdGU7dGhpcy5wcm9wcz1lLHRoaXMuc3RhdGU9dCx0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZz0hMCx0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90PXRoaXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUobixyKX1maW5hbGx5e3RoaXMucHJvcHM9bix0aGlzLnN0YXRlPXJ9fWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5wcm90b3R5cGU7aWYoIXR8fCF0LmlzUmVhY3RDb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKCJDYW4gb25seSBwb2x5ZmlsbCBjbGFzcyBjb21wb25lbnRzIik7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXJldHVybiBlO3ZhciBuPW51bGwsYT1udWxsLHM9bnVsbDtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQuY29tcG9uZW50V2lsbE1vdW50P249ImNvbXBvbmVudFdpbGxNb3VudCI6ImZ1bmN0aW9uIj09PXR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJihuPSJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IiksImZ1bmN0aW9uIj09PXR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM/YT0iY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyI6ImZ1bmN0aW9uIj09PXR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYoYT0iVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiKSwiZnVuY3Rpb24iPT09dHlwZW9mIHQuY29tcG9uZW50V2lsbFVwZGF0ZT9zPSJjb21wb25lbnRXaWxsVXBkYXRlIjoiZnVuY3Rpb24iPT09dHlwZW9mIHQuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJihzPSJVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSIpLG51bGwhPT1ufHxudWxsIT09YXx8bnVsbCE9PXMpe3ZhciB1PWUuZGlzcGxheU5hbWV8fGUubmFtZSxjPSJmdW5jdGlvbiI9PT10eXBlb2YgZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM/ImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIjoiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSI7dGhyb3cgRXJyb3IoIlVuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxuXG4iK3UrIiB1c2VzICIrYysiIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6IisobnVsbCE9PW4/IlxuICAiK246IiIpKyhudWxsIT09YT8iXG4gICIrYToiIikrKG51bGwhPT1zPyJcbiAgIitzOiIiKSsiXG5cblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxuaHR0cHM6Ly9mYi5tZS9yZWFjdC1hc3luYy1jb21wb25lbnQtbGlmZWN5Y2xlLWhvb2tzIil9aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKHQuY29tcG9uZW50V2lsbE1vdW50PXIsdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWkpLCJmdW5jdGlvbiI9PT10eXBlb2YgdC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0LmNvbXBvbmVudERpZFVwZGF0ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwb2x5ZmlsbCBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGZvciBjb21wb25lbnRzIHRoYXQgZG8gbm90IGRlZmluZSBjb21wb25lbnREaWRVcGRhdGUoKSBvbiB0aGUgcHJvdG90eXBlIik7dC5jb21wb25lbnRXaWxsVXBkYXRlPW87dmFyIGw9dC5jb21wb25lbnREaWRVcGRhdGU7dC5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX19yZWFjdEludGVybmFsU25hcHNob3RGbGFnP3RoaXMuX19yZWFjdEludGVybmFsU25hcHNob3Q6bjtsLmNhbGwodGhpcyxlLHQscil9fXJldHVybiBlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuLmQodCwicG9seWZpbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxyLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmc9ITAsaS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nPSEwLG8uX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZz0hMH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBpKGUpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgZX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fCJDb21wb25lbnQifWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJiJzdHJpbmciPT09dHlwZW9mIGUuc3R5bGVkQ29tcG9uZW50SWR9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5yZXBsYWNlKEllLCItJDEiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoTGUsIi1tcy0iKX1mdW5jdGlvbiB1KGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsbz1bXSxzPTAsYz1lLmxlbmd0aDtzPGM7cys9MSludWxsIT09KHI9dShlW3NdLHQsbikpJiYoQXJyYXkuaXNBcnJheShyKT9vLnB1c2guYXBwbHkobyxyKTpvLnB1c2gocikpO3JldHVybiBvfXJldHVybiBNZShlKT9udWxsOmEoZSk/Ii4iK2Uuc3R5bGVkQ29tcG9uZW50SWQ6aShlKT90P3UoZSh0KSx0LG4pOmU6ZSBpbnN0YW5jZW9mIE5lP24/KGUuaW5qZWN0KG4pLGUuZ2V0TmFtZSgpKTplOnooZSk/UGUoZSk6ZS50b1N0cmluZygpfWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIHUoaShlKXx8eihlKT9MKEcsW2VdLmNvbmNhdChuKSk6TChlLG4pKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlY7aWYoIU9iamVjdChULmlzVmFsaWRFbGVtZW50VHlwZSkodCkpdGhyb3cgbmV3IFEoMSxTdHJpbmcodCkpO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLGMuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfTtyZXR1cm4gci53aXRoQ29uZmlnPWZ1bmN0aW9uKHIpe3JldHVybiBsKGUsdCxSKHt9LG4scikpfSxyLmF0dHJzPWZ1bmN0aW9uKHIpe3JldHVybiBsKGUsdCxSKHt9LG4se2F0dHJzOlIoe30sbi5hdHRyc3x8VixyKX0pKX0scn1mdW5jdGlvbiBwKGUpe2Zvcih2YXIgdCxuPTB8ZS5sZW5ndGgscj0wfG4saT0wO24+PTQ7KXQ9MjU1JmUuY2hhckNvZGVBdChpKXwoMjU1JmUuY2hhckNvZGVBdCgrK2kpKTw8OHwoMjU1JmUuY2hhckNvZGVBdCgrK2kpKTw8MTZ8KDI1NSZlLmNoYXJDb2RlQXQoKytpKSk8PDI0LHQ9MTU0MDQ4MzQ3NyooNjU1MzUmdCkrKCgxNTQwNDgzNDc3Kih0Pj4+MTYpJjY1NTM1KTw8MTYpLHRePXQ+Pj4yNCx0PTE1NDA0ODM0NzcqKDY1NTM1JnQpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSxyPTE1NDA0ODM0NzcqKDY1NTM1JnIpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KV50LG4tPTQsKytpO3N3aXRjaChuKXtjYXNlIDM6cl49KDI1NSZlLmNoYXJDb2RlQXQoaSsyKSk8PDE2O2Nhc2UgMjpyXj0oMjU1JmUuY2hhckNvZGVBdChpKzEpKTw8ODtjYXNlIDE6cl49MjU1JmUuY2hhckNvZGVBdChpKSxyPTE1NDA0ODM0NzcqKDY1NTM1JnIpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KX1yZXR1cm4gcl49cj4+PjEzLCgocj0xNTQwNDgzNDc3Kig2NTUzNSZyKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpXnI+Pj4xNSk+Pj4wfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9IiIsbj12b2lkIDA7Zm9yKG49ZTtuPmplO249TWF0aC5mbG9vcihuL2plKSl0PVJlKG4lamUpK3Q7cmV0dXJuIFJlKG4lamUpK3R9ZnVuY3Rpb24gZChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9MSl7dmFyIHI9ZVtuXTtpZihBcnJheS5pc0FycmF5KHIpJiYhZChyKSlyZXR1cm4hMTtpZihpKHIpJiYhYShyKSlyZXR1cm4hMX1pZih2b2lkIDAhPT10KWZvcih2YXIgbyBpbiB0KXt2YXIgcz10W29dO2lmKGkocykpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5yZXBsYWNlKEdlLCItIikucmVwbGFjZShWZSwiIil9ZnVuY3Rpb24gbShlKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIG0oZSk/InN0eWxlZC4iK2U6IlN0eWxlZCgiK28oZSkrIikifWZ1bmN0aW9uIHkoZSx0LG4pe2lmKCJzdHJpbmciIT09dHlwZW9mIHQpe3ZhciByPVplKHQpO3ImJnIhPT1ldCYmeShlLHIsbik7Zm9yKHZhciBpPXR0LmNvbmNhdChLZSh0KSxZZSh0KSksbz1XZVtlLiQkdHlwZW9mXXx8cWUsYT1XZVt0LiQkdHlwZW9mXXx8cWUscz1pLmxlbmd0aCx1PXZvaWQgMCxjPXZvaWQgMDtzLS07KWlmKGM9aVtzXSwhSGVbY10mJighbnx8IW5bY10pJiYoIWF8fCFhW2NdKSYmKCFvfHwhb1tjXSkmJih1PVhlKHQsYykpKXRyeXtRZShlLGMsdSl9Y2F0Y2goZSl7fXJldHVybiBlfXJldHVybiBlfWZ1bmN0aW9uIHYoZSl7cmV0dXJuISEoZSYmZS5wcm90b3R5cGUmJmUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIGIoZSx0LG4pe3ZhciByPSJzdHJpbmciIT09dHlwZW9mIHQ/InNjIjpoKHQpLGk9KGN0W3JdfHwwKSsxO2N0W3JdPWk7dmFyIG89cisiLSIrZS5nZW5lcmF0ZU5hbWUocitpKTtyZXR1cm4gbj9uKyItIitvOm99ZnVuY3Rpb24geChlLHQsbil7dmFyIHI9YShlKSxpPSFtKGUpLHM9dC5kaXNwbGF5TmFtZSx1PXZvaWQgMD09PXM/ZyhlKTpzLGM9dC5jb21wb25lbnRJZCxsPXZvaWQgMD09PWM/YihVZSx0LmRpc3BsYXlOYW1lLHQucGFyZW50Q29tcG9uZW50SWQpOmMscD10LlBhcmVudENvbXBvbmVudCxmPXZvaWQgMD09PXA/bHQ6cCxkPXQuYXR0cnMsdj10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP2godC5kaXNwbGF5TmFtZSkrIi0iK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8bCxDPXImJmUuYXR0cnM/Uih7fSxlLmF0dHJzLGQpOmQsRT1uZXcgVWUocj9lLmNvbXBvbmVudFN0eWxlLnJ1bGVzLmNvbmNhdChuKTpuLEMsdiksRD1fLmEuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3JldHVybiBfLmEuY3JlYXRlRWxlbWVudChmLFIoe30sZSx7Zm9yd2FyZGVkQ2xhc3M6RCxmb3J3YXJkZWRSZWY6dH0pKX0pO3JldHVybiBELmF0dHJzPUMsRC5jb21wb25lbnRTdHlsZT1FLEQuZGlzcGxheU5hbWU9dSxELnN0eWxlZENvbXBvbmVudElkPXYsRC50YXJnZXQ9cj9lLnRhcmdldDplLEQud2l0aENvbXBvbmVudD1mdW5jdGlvbihlKXt2YXIgcj10LmNvbXBvbmVudElkLGk9JCh0LFsiY29tcG9uZW50SWQiXSksYT1yJiZyKyItIisobShlKT9lOmgobyhlKSkpO3JldHVybiB4KGUsUih7fSxpLHthdHRyczpDLGNvbXBvbmVudElkOmEsUGFyZW50Q29tcG9uZW50OmZ9KSxuKX0saSYmeShELGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLHN0eWxlZENvbXBvbmVudElkOiEwLHRhcmdldDohMCx3YXJuVG9vTWFueUNsYXNzZXM6ITAsd2l0aENvbXBvbmVudDohMH0pLER9ZnVuY3Rpb24gQyhlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgaT1jLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxvPSJzYy1nbG9iYWwtIitwKEpTT04uc3RyaW5naWZ5KGkpKSxhPW5ldyBkdChpLG8pLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe00odGhpcyx0KTt2YXIgbj1VKHRoaXMsZS5jYWxsKHRoaXMpKSxyPW4uY29uc3RydWN0b3IsaT1yLmdsb2JhbFN0eWxlLG89ci5zdHlsZWRDb21wb25lbnRJZDtyZXR1cm4gSCYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW29dPSh3aW5kb3cuc2NDR1NITVJDYWNoZVtvXXx8MCkrMSksbi5zdGF0ZT17Z2xvYmFsU3R5bGU6aSxzdHlsZWRDb21wb25lbnRJZDpvfSxufXJldHVybiBCKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJih3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXS09MSksMD09PXdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdJiZ0aGlzLnN0YXRlLmdsb2JhbFN0eWxlLnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlU2hlZXQpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBfLmEuY3JlYXRlRWxlbWVudChzdCxudWxsLGZ1bmN0aW9uKHQpe2Uuc3R5bGVTaGVldD10fHxGZS5tYXN0ZXI7dmFyIG49ZS5zdGF0ZS5nbG9iYWxTdHlsZTtyZXR1cm4gbi5pc1N0YXRpYz8obi5yZW5kZXJTdHlsZXMoVyxlLnN0eWxlU2hlZXQpLG51bGwpOl8uYS5jcmVhdGVFbGVtZW50KHJ0LG51bGwsZnVuY3Rpb24odCl7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMsaT1SKHt9LGUucHJvcHMpO3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIHQmJihpLnRoZW1lPXplKGUucHJvcHMsdCxyKSksbi5yZW5kZXJTdHlsZXMoaSxlLnN0eWxlU2hlZXQpLG51bGx9KX0pfSx0fShfLmEuQ29tcG9uZW50KTtyZXR1cm4gcy5nbG9iYWxTdHlsZT1hLHMuc3R5bGVkQ29tcG9uZW50SWQ9byxzfWZ1bmN0aW9uIEUoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIGk9Yy5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSksbz1mKHAoaHQoSlNPTi5zdHJpbmdpZnkoaSkpKSk7cmV0dXJuIG5ldyBOZShvLGllKGksbywiQGtleWZyYW1lcyIpKX1uLmQodCwiY3NzIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKHQsImtleWZyYW1lcyIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZCh0LCJjcmVhdGVHbG9iYWxTdHlsZSIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZCh0LCJpc1N0eWxlZENvbXBvbmVudCIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJUaGVtZUNvbnN1bWVyIixmdW5jdGlvbigpe3JldHVybiBydH0pLG4uZCh0LCJUaGVtZVByb3ZpZGVyIixmdW5jdGlvbigpe3JldHVybiBpdH0pLG4uZCh0LCJ3aXRoVGhlbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIG10fSksbi5kKHQsIlNlcnZlclN0eWxlU2hlZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIG90fSksbi5kKHQsIlN0eWxlU2hlZXRNYW5hZ2VyIixmdW5jdGlvbigpe3JldHVybiB1dH0pLG4uZCh0LCJfX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfSEFVTlRFRF9CWV9TUE9PS1lfR0hPU1RTIixmdW5jdGlvbigpe3JldHVybiBndH0pO3ZhciBEPW4oNTI1KSx3PW4ubihEKSxTPW4oNTI2KSxrPW4ubihTKSxBPW4oMCksXz1uLm4oQSksVD1uKDUyNyksTz0obi5uKFQpLG4oNTI5KSksRj1uKDE4KSxOPShuLm4oRiksbigzMCkpLEk9KG4ubihOKSxuKDUzMCkpLEw9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxpPXQubGVuZ3RoO3I8aTtyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LFA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE09ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0saj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxSPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEI9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sJD1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufSxVPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH0sej1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOlAoZSkpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxHPU9iamVjdC5mcmVlemUoW10pLFY9T2JqZWN0LmZyZWV6ZSh7fSkscT0idW5kZWZpbmVkIiE9PXR5cGVvZiBlJiZPYmplY3Qoe05PREVfRU5WOiJwcm9kdWN0aW9uIixQVUJMSUNfVVJMOiIifSkuU0NfQVRUUnx8ImRhdGEtc3R5bGVkIixIPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmIkhUTUxFbGVtZW50ImluIHdpbmRvdyxXPXt9LFE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtNKHRoaXMsdCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShyPjE/ci0xOjApLG89MTtvPHI7bysrKWlbby0xXT1hcmd1bWVudHNbb107dmFyIGEsYT1VKHRoaXMsZS5jYWxsKHRoaXMsIkFuIGVycm9yIG9jY3VycmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N0eWxlZC1jb21wb25lbnRzL3N0eWxlZC1jb21wb25lbnRzL2Jsb2IvbWFzdGVyL3NyYy91dGlscy9lcnJvcnMubWQjIituKyIgZm9yIG1vcmUgaW5mb3JtYXRpb24uICIrKGk/IkFkZGl0aW9uYWwgYXJndW1lbnRzOiAiK2kuam9pbigiLCAiKToiIikpKTtyZXR1cm4gVShhKX1yZXR1cm4gQih0LGUpLHR9KEVycm9yKSxLPS9eW15cU1xuXSo/XC9cKiBzYy1jb21wb25lbnQtaWQ6XHMqKFxTKylccytcKlwvL2dtLEo9ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrKGV8fCIiKSxuPVtdO3JldHVybiB0LnJlcGxhY2UoSyxmdW5jdGlvbihlLHQscil7cmV0dXJuIG4ucHVzaCh7Y29tcG9uZW50SWQ6dCxtYXRjaEluZGV4OnJ9KSxlfSksbi5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgaT1lLmNvbXBvbmVudElkLG89ZS5tYXRjaEluZGV4LGE9bltyKzFdO3JldHVybntjb21wb25lbnRJZDppLGNzc0Zyb21ET006YT90LnNsaWNlKG8sYS5tYXRjaEluZGV4KTp0LnNsaWNlKG8pfX0pfSxZPS9eXHMqXC9cLy4qJC9nbSxYPS8oJig/ISAqWyt+Pl0pKFteJntdW157XSspW14rfj5dKik/KFsrfj5dICopJi9nLFo9bmV3IHcuYSh7Z2xvYmFsOiExLGNhc2NhZGU6ITAsa2V5ZnJhbWU6ITEscHJlZml4OiExLGNvbXByZXNzOiExLHNlbWljb2xvbjohMH0pLGVlPW5ldyB3LmEoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMCxjb21wcmVzczohMSxzZW1pY29sb246ITF9KSx0ZT1bXSxuZT1mdW5jdGlvbihlKXtpZigtMj09PWUpe3ZhciB0PXRlO3JldHVybiB0ZT1bXSx0fX0scmU9aygpKGZ1bmN0aW9uKGUpe3RlLnB1c2goZSl9KTtlZS51c2UoW3JlLG5lXSksWi51c2UoW3JlLG5lXSk7dmFyIGllPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106IiYiLGk9ZS5qb2luKCIiKS5yZXBsYWNlKFksIiIpLG89KHQmJm4/bisiICIrdCsiIHsgIitpKyIgfSI6aSkucmVwbGFjZShYLCIkMSQzLiIrcisiJDIiKTtyZXR1cm4gZWUobnx8IXQ/IiI6dCxvKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFooIiIsZSl9LGFlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubmN9LHNlPWZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUoKSl9fSx1ZT1mdW5jdGlvbihlLHQsbil7aWYobil7KGVbdF18fChlW3RdPU9iamVjdC5jcmVhdGUobnVsbCkpKVtuXT0hMH19LGNlPWZ1bmN0aW9uKGUsdCl7ZVt0XT1PYmplY3QuY3JlYXRlKG51bGwpfSxsZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwIT09ZVt0XSYmZVt0XVtuXX19LHBlPWZ1bmN0aW9uKGUpe3ZhciB0PSIiO2Zvcih2YXIgbiBpbiBlKXQrPU9iamVjdC5rZXlzKGVbbl0pLmpvaW4oIiAiKSsiICI7cmV0dXJuIHQudHJpbSgpfSxmZT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbiBpbiBlKXRbbl09Uih7fSxlW25dKTtyZXR1cm4gdH0sZGU9ZnVuY3Rpb24oZSl7aWYoZS5zaGVldClyZXR1cm4gZS5zaGVldDtmb3IodmFyIHQ9ZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoLG49MDtuPHQ7bis9MSl7dmFyIHI9ZG9jdW1lbnQuc3R5bGVTaGVldHNbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IG5ldyBRKDEwKX0saGU9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiExO3ZhciByPWUuY3NzUnVsZXMubGVuZ3RoO3RyeXtlLmluc2VydFJ1bGUodCxuPD1yP246cil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LG1lPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dC1uLGk9dDtpPnI7aS09MSllLmRlbGV0ZVJ1bGUoaSl9LGdlPWZ1bmN0aW9uKGUpe3JldHVybiJcbi8qIHNjLWNvbXBvbmVudC1pZDogIitlKyIgKi9cbiJ9LHllPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7cis9MSluKz1lW3JdO3JldHVybiBufSx2ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZShxLCIiKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1zdHlsZWQtdmVyc2lvbiIsIjQuMC4wIik7dmFyIGk9YWUoKTtpZihpJiZyLnNldEF0dHJpYnV0ZSgibm9uY2UiLGkpLHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxlJiYhdCllLmFwcGVuZENoaWxkKHIpO2Vsc2V7aWYoIXR8fCFlfHwhdC5wYXJlbnROb2RlKXRocm93IG5ldyBRKDYpO3QucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixuP3Q6dC5uZXh0U2libGluZyl9cmV0dXJuIHJ9LGJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPWFlKCk7cmV0dXJuIjxzdHlsZSAiK1tyJiYnbm9uY2U9IicrcisnIicscSsnPSInK3BlKHQpKyciJywnZGF0YS1zdHlsZWQtdmVyc2lvbj0iNC4wLjAiJyxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpKyI+IitlKCkrIjwvc3R5bGU+In19LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4scj0obj17fSxuW3FdPXBlKHQpLG5bImRhdGEtc3R5bGVkLXZlcnNpb24iXT0iNC4wLjAiLG4pLGk9YWUoKTtyZXR1cm4gaSYmKHIubm9uY2U9aSksXy5hLmNyZWF0ZUVsZW1lbnQoInN0eWxlIixSKHt9LHIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6ZSgpfX0pKX19LENlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhlKX19LEVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksaT1bXSxvPXZvaWQgMCE9PXQsYT0hMSxzPWZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDoocltlXT1pLmxlbmd0aCxpLnB1c2goMCksY2UobixlKSxyW2VdKX0sdT1mdW5jdGlvbihyLHUsYyl7Zm9yKHZhciBsPXMocikscD1kZShlKSxmPXllKGksbCksZD0wLGg9W10sbT11Lmxlbmd0aCxnPTA7ZzxtO2crPTEpe3ZhciB5PXVbZ10sdj1vO3YmJi0xIT09eS5pbmRleE9mKCJAaW1wb3J0Iik/aC5wdXNoKHkpOmhlKHAseSxmK2QpJiYodj0hMSxkKz0xKX1vJiZoLmxlbmd0aD4wJiYoYT0hMCx0KCkuaW5zZXJ0UnVsZXMocisiLWltcG9ydCIsaCkpLGlbbF0rPWQsdWUobixyLGMpfSxjPWZ1bmN0aW9uKHMpe3ZhciB1PXJbc107aWYodm9pZCAwIT09dSl7dmFyIGM9aVt1XSxsPWRlKGUpLHA9eWUoaSx1KS0xO21lKGwscCxjKSxpW3VdPTAsY2UobixzKSxvJiZhJiZ0KCkucmVtb3ZlUnVsZXMocysiLWltcG9ydCIpfX0sbD1mdW5jdGlvbigpe3ZhciB0PWRlKGUpLG49dC5jc3NSdWxlcyxvPSIiO2Zvcih2YXIgYSBpbiByKXtvKz1nZShhKTtmb3IodmFyIHM9clthXSx1PXllKGkscyksYz1pW3NdLGw9dS1jO2w8dTtsKz0xKXt2YXIgcD1uW2xdO3ZvaWQgMCE9PXAmJihvKz1wLmNzc1RleHQpfX1yZXR1cm4gb307cmV0dXJue2Nsb25lOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFEoNSl9LGNzczpsLGdldElkczpDZShyKSxoYXNOYW1lRm9ySWQ6bGUobiksaW5zZXJ0TWFya2VyOnMsaW5zZXJ0UnVsZXM6dSxyZW1vdmVSdWxlczpjLHNlYWxlZDohMSxzdHlsZVRhZzplLHRvRWxlbWVudDp4ZShsLG4pLHRvSFRNTDpiZShsLG4pfX0sRGU9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXZvaWQgMD09PXQ/T2JqZWN0LmNyZWF0ZShudWxsKTp0LGk9dm9pZCAwPT09bj9PYmplY3QuY3JlYXRlKG51bGwpOm4sbz1mdW5jdGlvbihlKXt2YXIgdD1pW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6aVtlXT1bIiJdfSxhPWZ1bmN0aW9uKGUsdCxuKXtvKGUpWzBdKz10LmpvaW4oIiAiKSx1ZShyLGUsbil9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9aVtlXTt2b2lkIDAhPT10JiYodFswXT0iIixjZShyLGUpKX0sdT1mdW5jdGlvbigpe3ZhciBlPSIiO2Zvcih2YXIgdCBpbiBpKXt2YXIgbj1pW3RdWzBdO24mJihlKz1nZSh0KStuKX1yZXR1cm4gZX07cmV0dXJue2Nsb25lOmZ1bmN0aW9uKCl7dmFyIHQ9ZmUociksbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbyBpbiBpKW5bb109W2lbb11bMF1dO3JldHVybiBlKHQsbil9LGNzczp1LGdldElkczpDZShpKSxoYXNOYW1lRm9ySWQ6bGUociksaW5zZXJ0TWFya2VyOm8saW5zZXJ0UnVsZXM6YSxyZW1vdmVSdWxlczpzLHNlYWxlZDohMSxzdHlsZVRhZzpudWxsLHRvRWxlbWVudDp4ZSh1LHIpLHRvSFRNTDpiZSh1LHIpfX0sd2U9ZnVuY3Rpb24oZSx0LG4scixpKXtpZihIJiYhbil7dmFyIG89dmUoZSx0LHIpO3JldHVybiBFZShvLGkpfXJldHVybiBEZSgpfSxTZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1zZShmdW5jdGlvbigpe2Zvcih2YXIgcj0wLGk9bi5sZW5ndGg7cjxpO3IrPTEpe3ZhciBvPW5bcl0sYT1vLmNvbXBvbmVudElkLHM9by5jc3NGcm9tRE9NLHU9b2Uocyk7ZS5pbnNlcnRSdWxlcyhhLHUpfWZvcih2YXIgYz0wLGw9dC5sZW5ndGg7YzxsO2MrPTEpe3ZhciBwPXRbY107cC5wYXJlbnROb2RlJiZwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocCl9fSk7cmV0dXJuIHImJmkoKSxSKHt9LGUse2luc2VydE1hcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gaSgpLGUuaW5zZXJ0TWFya2VyKHQpfSxpbnNlcnRSdWxlczpmdW5jdGlvbih0LG4scil7cmV0dXJuIGkoKSxlLmluc2VydFJ1bGVzKHQsbixyKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkoKSxlLnJlbW92ZVJ1bGVzKHQpfX0pfSxrZT0vXHMrLyxBZT12b2lkIDA7QWU9SD8xZTM6LTE7dmFyIF9lLFRlPTAsT2U9dm9pZCAwLEZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06SD9kb2N1bWVudC5oZWFkOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO00odGhpcyxlKSx0aGlzLmdldEltcG9ydFJ1bGVUYWc9ZnVuY3Rpb24oKXt2YXIgZT10LmltcG9ydFJ1bGVUYWc7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTt2YXIgbj10LnRhZ3NbMF07cmV0dXJuIHQuaW1wb3J0UnVsZVRhZz13ZSh0LnRhcmdldCxuP24uc3R5bGVUYWc6bnVsbCx0LmZvcmNlU2VydmVyLCEwKX0sVGUrPTEsdGhpcy5pZD1UZSx0aGlzLmZvcmNlU2VydmVyPXIsdGhpcy50YXJnZXQ9cj9udWxsOm4sdGhpcy50YWdNYXA9e30sdGhpcy5kZWZlcnJlZD17fSx0aGlzLnJlaHlkcmF0ZWROYW1lcz17fSx0aGlzLmlnbm9yZVJlaHlkcmF0ZWROYW1lcz17fSx0aGlzLnRhZ3M9W10sdGhpcy5jYXBhY2l0eT0xLHRoaXMuY2xvbmVzPVtdfXJldHVybiBlLnByb3RvdHlwZS5yZWh5ZHJhdGU9ZnVuY3Rpb24oKXtpZighSHx8dGhpcy5mb3JjZVNlcnZlcilyZXR1cm4gdGhpczt2YXIgZT1bXSx0PVtdLG49ITEscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZVsiK3ErJ11bZGF0YS1zdHlsZWQtdmVyc2lvbj0iNC4wLjAiXScpLGk9ci5sZW5ndGg7aWYoMD09PWkpcmV0dXJuIHRoaXM7Zm9yKHZhciBvPTA7bzxpO28rPTEpe3ZhciBhPXJbb107bnx8KG49ISFhLmdldEF0dHJpYnV0ZSgiZGF0YS1zdHlsZWQtc3RyZWFtZWQiKSk7Zm9yKHZhciBzPShhLmdldEF0dHJpYnV0ZShxKXx8IiIpLnRyaW0oKS5zcGxpdChrZSksdT1zLmxlbmd0aCxjPTA7Yzx1O2MrPTEpe3ZhciBsPXNbY107dGhpcy5yZWh5ZHJhdGVkTmFtZXNbbF09ITB9dC5wdXNoLmFwcGx5KHQsSihhLnRleHRDb250ZW50KSksZS5wdXNoKGEpfXZhciBwPXQubGVuZ3RoO2lmKDA9PT1wKXJldHVybiB0aGlzO3ZhciBmPXRoaXMubWFrZVRhZyhudWxsKSxkPVNlKGYsZSx0LG4pO3RoaXMuY2FwYWNpdHk9TWF0aC5tYXgoMSxBZS1wKSx0aGlzLnRhZ3MucHVzaChkKTtmb3IodmFyIGg9MDtoPHA7aCs9MSl0aGlzLnRhZ01hcFt0W2hdLmNvbXBvbmVudElkXT1kO3JldHVybiB0aGlzfSxlLnJlc2V0PWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtPZT1uZXcgZSh2b2lkIDAsdCkucmVoeWRyYXRlKCl9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUodGhpcy50YXJnZXQsdGhpcy5mb3JjZVNlcnZlcik7cmV0dXJuIHRoaXMuY2xvbmVzLnB1c2godCksdC50YWdzPXRoaXMudGFncy5tYXAoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuZ2V0SWRzKCkscj1lLmNsb25lKCksaT0wO2k8bi5sZW5ndGg7aSs9MSl0LnRhZ01hcFtuW2ldXT1yO3JldHVybiByfSksdC5yZWh5ZHJhdGVkTmFtZXM9Uih7fSx0aGlzLnJlaHlkcmF0ZWROYW1lcyksdC5kZWZlcnJlZD1SKHt9LHRoaXMuZGVmZXJyZWQpLHR9LGUucHJvdG90eXBlLnNlYWxBbGxUYWdzPWZ1bmN0aW9uKCl7dGhpcy5jYXBhY2l0eT0xLHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VhbGVkPSEwfSl9LGUucHJvdG90eXBlLm1ha2VUYWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnN0eWxlVGFnOm51bGw7cmV0dXJuIHdlKHRoaXMudGFyZ2V0LHQsdGhpcy5mb3JjZVNlcnZlciwhMSx0aGlzLmdldEltcG9ydFJ1bGVUYWcpfSxlLnByb3RvdHlwZS5nZXRUYWdGb3JJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10JiYhdC5zZWFsZWQpcmV0dXJuIHQ7dmFyIG49dGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY2FwYWNpdHktPTEsMD09PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PUFlLG49dGhpcy5tYWtlVGFnKG4pLHRoaXMudGFncy5wdXNoKG4pKSx0aGlzLnRhZ01hcFtlXT1ufSxlLnByb3RvdHlwZS5oYXNJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy50YWdNYXBbZV19LGUucHJvdG90eXBlLmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdJiZ0aGlzLnJlaHlkcmF0ZWROYW1lc1t0XSlyZXR1cm4hMDt2YXIgbj10aGlzLnRhZ01hcFtlXTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXNOYW1lRm9ySWQoZSx0KX0sZS5wcm90b3R5cGUuZGVmZXJyZWRJbmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLnRhZ01hcFtlXSl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5kZWZlcnJlZEluamVjdChlLHQpO3RoaXMuZ2V0VGFnRm9ySWQoZSkuaW5zZXJ0TWFya2VyKGUpLHRoaXMuZGVmZXJyZWRbZV09dH19LGUucHJvdG90eXBlLmluamVjdD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMuY2xvbmVzLGk9MDtpPHIubGVuZ3RoO2krPTEpcltpXS5pbmplY3QoZSx0LG4pO3ZhciBvPXRoaXMuZ2V0VGFnRm9ySWQoZSk7aWYodm9pZCAwIT09dGhpcy5kZWZlcnJlZFtlXSl7dmFyIGE9dGhpcy5kZWZlcnJlZFtlXS5jb25jYXQodCk7by5pbnNlcnRSdWxlcyhlLGEsbiksdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9ZWxzZSBvLmluc2VydFJ1bGVzKGUsdCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0ucmVtb3ZlKGUpO3QucmVtb3ZlUnVsZXMoZSksdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV09ITAsdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9fSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0hUTUwoKX0pLmpvaW4oIiIpfSxlLnByb3RvdHlwZS50b1JlYWN0RWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmlkO3JldHVybiB0aGlzLnRhZ3MubWFwKGZ1bmN0aW9uKHQsbil7dmFyIHI9InNjLSIrZSsiLSIrbjtyZXR1cm4gT2JqZWN0KEEuY2xvbmVFbGVtZW50KSh0LnRvRWxlbWVudCgpLHtrZXk6cn0pfSl9LGooZSxudWxsLFt7a2V5OiJtYXN0ZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiBPZXx8KE9lPShuZXcgZSkucmVoeWRyYXRlKCkpfX0se2tleToiaW5zdGFuY2UiLGdldDpmdW5jdGlvbigpe3JldHVybiBlLm1hc3Rlcn19XSksZX0oKSxOZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj10aGlzO00odGhpcyxlKSx0aGlzLmluamVjdD1mdW5jdGlvbihlKXtlLmhhc05hbWVGb3JJZChyLmlkLHIubmFtZSl8fGUuaW5qZWN0KHIuaWQsci5ydWxlcyxyLm5hbWUpfSx0aGlzLm5hbWU9dCx0aGlzLnJ1bGVzPW4sdGhpcy5pZD0ic2Mta2V5ZnJhbWVzLSIrdH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCksSWU9LyhbQS1aXSkvZyxMZT0vXm1zLS8sUGU9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPU9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgbj10W2VdO3JldHVybiB2b2lkIDAhPT1uJiZudWxsIT09biYmITEhPT1uJiYiIiE9PW59KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHoodFtuXSk/ZSh0W25dLG4pOnMobikrIjogIit0W25dKyI7In0pLmpvaW4oIiAiKTtyZXR1cm4gbj9uKyIge1xuICAiK3IrIlxufSI6cn0sTWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV8fG51bGw9PT1lfHwhMT09PWV8fCIiPT09ZX0samU9NTIsUmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfSxCZT0hMSwkZT1mdW5jdGlvbihlKXtyZXR1cm4gZihwKGUpKX0sVWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXtpZihNKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuaXNTdGF0aWM9IUJlJiZkKHQsbiksdGhpcy5jb21wb25lbnRJZD1yLCFGZS5tYXN0ZXIuaGFzSWQocikpe3ZhciBpPVtdO0ZlLm1hc3Rlci5kZWZlcnJlZEluamVjdChyLGkpfX1yZXR1cm4gZS5wcm90b3R5cGUuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmlzU3RhdGljLHI9dGhpcy5jb21wb25lbnRJZCxpPXRoaXMubGFzdENsYXNzTmFtZTtpZihIJiZuJiZ2b2lkIDAhPT1pJiZ0Lmhhc05hbWVGb3JJZChyLGkpKXJldHVybiBpO3ZhciBvPXUodGhpcy5ydWxlcyxlLHQpLGE9JGUodGhpcy5jb21wb25lbnRJZCtvLmpvaW4oIiIpKTtyZXR1cm4gdC5oYXNOYW1lRm9ySWQocixhKXx8dC5pbmplY3QodGhpcy5jb21wb25lbnRJZCxpZShvLCIuIithLHZvaWQgMCxyKSxhKSx0aGlzLmxhc3RDbGFzc05hbWU9YSxhfSxlLmdlbmVyYXRlTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gJGUoZSl9LGV9KCksemU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06VixyPSEhbiYmZS50aGVtZT09PW4udGhlbWU7cmV0dXJuIGUudGhlbWUmJiFyP2UudGhlbWU6dHx8bi50aGVtZX0sR2U9L1tbXF0uIyokPjwrfj18XjooKSwiJ2AtXSsvZyxWZT0vKF4tfC0kKS9nLHFlPXtjaGlsZENvbnRleHRUeXBlczohMCxjb250ZXh0VHlwZXM6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0sSGU9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0sV2U9KF9lPXt9LF9lW1QuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH0sX2UpLFFlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxLZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxKZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFllPXZvaWQgMD09PUplP2Z1bmN0aW9uKCl7cmV0dXJuW119OkplLFhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWmU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGV0PU9iamVjdC5wcm90b3R5cGUsdHQ9QXJyYXkucHJvdG90eXBlLG50PU9iamVjdChBLmNyZWF0ZUNvbnRleHQpKCkscnQ9bnQuQ29uc3VtZXIsaXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtNKHRoaXMsdCk7dmFyIHI9VSh0aGlzLGUuY2FsbCh0aGlzLG4pKTtyZXR1cm4gci5nZXRDb250ZXh0PU9iamVjdChPLmEpKHIuZ2V0Q29udGV4dC5iaW5kKHIpKSxyLnJlbmRlcklubmVyPXIucmVuZGVySW5uZXIuYmluZChyKSxyfXJldHVybiBCKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4/Xy5hLmNyZWF0ZUVsZW1lbnQobnQuQ29uc3VtZXIsbnVsbCx0aGlzLnJlbmRlcklubmVyKTpudWxsfSx0LnByb3RvdHlwZS5yZW5kZXJJbm5lcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldENvbnRleHQodGhpcy5wcm9wcy50aGVtZSxlKTtyZXR1cm4gXy5hLmNyZWF0ZUVsZW1lbnQobnQuUHJvdmlkZXIse3ZhbHVlOnR9LF8uYS5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pKX0sdC5wcm90b3R5cGUuZ2V0VGhlbWU9ZnVuY3Rpb24oZSx0KXtpZihpKGUpKXtyZXR1cm4gZSh0KX1pZihudWxsPT09ZXx8QXJyYXkuaXNBcnJheShlKXx8Im9iamVjdCIhPT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpQKGUpKSl0aHJvdyBuZXcgUSg4KTtyZXR1cm4gUih7fSx0LGUpfSx0LnByb3RvdHlwZS5nZXRDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0VGhlbWUoZSx0KX0sdH0oQS5Db21wb25lbnQpLG90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe00odGhpcyxlKSx0aGlzLm1hc3RlclNoZWV0PUZlLm1hc3Rlcix0aGlzLmluc3RhbmNlPXRoaXMubWFzdGVyU2hlZXQuY2xvbmUoKSx0aGlzLnNlYWxlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuc2VhbD1mdW5jdGlvbigpe2lmKCF0aGlzLnNlYWxlZCl7dmFyIGU9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZXMuaW5kZXhPZih0aGlzLmluc3RhbmNlKTt0aGlzLm1hc3RlclNoZWV0LmNsb25lcy5zcGxpY2UoZSwxKSx0aGlzLnNlYWxlZD0hMH19LGUucHJvdG90eXBlLmNvbGxlY3RTdHlsZXM9ZnVuY3Rpb24oZSl7aWYodGhpcy5zZWFsZWQpdGhyb3cgbmV3IFEoMik7cmV0dXJuIF8uYS5jcmVhdGVFbGVtZW50KHV0LHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9IVE1MKCl9LGUucHJvdG90eXBlLmdldFN0eWxlRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvUmVhY3RFbGVtZW50cygpfSxlLnByb3RvdHlwZS5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IFEoMyl9LGV9KCksYXQ9T2JqZWN0KEEuY3JlYXRlQ29udGV4dCkoKSxzdD1hdC5Db25zdW1lcix1dD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe00odGhpcyx0KTt2YXIgcj1VKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9T2JqZWN0KE8uYSkoci5nZXRDb250ZXh0KSxyfXJldHVybiBCKHQsZSksdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIGU7aWYodClyZXR1cm4gbmV3IEZlKHQpO3Rocm93IG5ldyBRKDQpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixuPWUuc2hlZXQscj1lLnRhcmdldCxpPXRoaXMuZ2V0Q29udGV4dChuLHIpO3JldHVybiBfLmEuY3JlYXRlRWxlbWVudChhdC5Qcm92aWRlcix7dmFsdWU6aX0sXy5hLkNoaWxkcmVuLm9ubHkodCkpfSx0fShBLkNvbXBvbmVudCksY3Q9e30sbHQ9KHNlKGZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybignVGhlICJpbm5lclJlZiIgQVBJIGhhcyBiZWVuIHJlbW92ZWQgaW4gc3R5bGVkLWNvbXBvbmVudHMgdjQgaW4gZmF2b3Igb2YgUmVhY3QgMTYgcmVmIGZvcndhcmRpbmcsIHVzZSAicmVmIiBpbnN0ZWFkIGxpa2UgYSB0eXBpY2FsIGNvbXBvbmVudC4nKX0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtNKHRoaXMsdCk7dmFyIG49VSh0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYXR0cnM9e30sbi5yZW5kZXJPdXRlcj1uLnJlbmRlck91dGVyLmJpbmQobiksbi5yZW5kZXJJbm5lcj1uLnJlbmRlcklubmVyLmJpbmQobiksbn1yZXR1cm4gQih0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBfLmEuY3JlYXRlRWxlbWVudChzdCxudWxsLHRoaXMucmVuZGVyT3V0ZXIpfSx0LnByb3RvdHlwZS5yZW5kZXJPdXRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdHlsZVNoZWV0PWUsXy5hLmNyZWF0ZUVsZW1lbnQocnQsbnVsbCx0aGlzLnJlbmRlcklubmVyKX0sdC5wcm90b3R5cGUucmVuZGVySW5uZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5mb3J3YXJkZWRDbGFzcyxuPXQuY29tcG9uZW50U3R5bGUscj10LmRlZmF1bHRQcm9wcyxpPXQuc3R5bGVkQ29tcG9uZW50SWQsbz10LnRhcmdldCxhPXZvaWQgMDthPW4uaXNTdGF0aWM/dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhWLHRoaXMucHJvcHMsdGhpcy5zdHlsZVNoZWV0KTp2b2lkIDAhPT1lP3RoaXMuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoemUodGhpcy5wcm9wcyxlLHIpLHRoaXMucHJvcHMsdGhpcy5zdHlsZVNoZWV0KTp0aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKHRoaXMucHJvcHMudGhlbWV8fFYsdGhpcy5wcm9wcyx0aGlzLnN0eWxlU2hlZXQpO3ZhciBzPXRoaXMucHJvcHMuYXN8fHRoaXMuYXR0cnMuYXN8fG8sdT1tKHMpLGM9Uih7fSx0aGlzLmF0dHJzKSxsPXZvaWQgMDtmb3IobCBpbiB0aGlzLnByb3BzKSJmb3J3YXJkZWRDbGFzcyIhPT1sJiYiYXMiIT09bCYmKCJmb3J3YXJkZWRSZWYiPT09bD9jLnJlZj10aGlzLnByb3BzW2xdOnUmJiFPYmplY3QoSS5hKShsKXx8KGNbbF09InN0eWxlIj09PWwmJmwgaW4gdGhpcy5hdHRycz9SKHt9LHRoaXMuYXR0cnNbbF0sdGhpcy5wcm9wc1tsXSk6dGhpcy5wcm9wc1tsXSkpO3JldHVybiBjLmNsYXNzTmFtZT1bdGhpcy5wcm9wcy5jbGFzc05hbWUsaSx0aGlzLmF0dHJzLmNsYXNzTmFtZSxhXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLE9iamVjdChBLmNyZWF0ZUVsZW1lbnQpKHMsYyl9LHQucHJvdG90eXBlLmJ1aWxkRXhlY3V0aW9uQ29udGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9Uih7fSx0LHt0aGVtZTplfSk7aWYodm9pZCAwPT09bilyZXR1cm4gcjt0aGlzLmF0dHJzPXt9O3ZhciBvPXZvaWQgMCxzPXZvaWQgMDtmb3IocyBpbiBuKW89bltzXSx0aGlzLmF0dHJzW3NdPSFpKG8pfHx2KG8pfHxhKG8pP286byhyKTtyZXR1cm4gUih7fSxyLHRoaXMuYXR0cnMpfSx0LnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpGZS5tYXN0ZXIscj10LmZvcndhcmRlZENsYXNzLGk9ci5hdHRycyxvPXIuY29tcG9uZW50U3R5bGUsYT1yLndhcm5Ub29NYW55Q2xhc3NlcztpZihvLmlzU3RhdGljJiZ2b2lkIDA9PT1pKXJldHVybiBvLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKFYsbik7dmFyIHM9by5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyh0aGlzLmJ1aWxkRXhlY3V0aW9uQ29udGV4dChlLHQsdC5mb3J3YXJkZWRDbGFzcy5hdHRycyksbik7cmV0dXJuIGEmJmEocyksc30sdH0oQS5Db21wb25lbnQpKSxwdD1bImEiLCJhYmJyIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiYXNlIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiZW1iZWQiLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImtleWdlbiIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0YSIsIm1ldGVyIiwibmF2Iiwibm9zY3JpcHQiLCJvYmplY3QiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBhcmFtIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzY3JpcHQiLCJzZWN0aW9uIiwic2VsZWN0Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFuIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiLCJjaXJjbGUiLCJjbGlwUGF0aCIsImRlZnMiLCJlbGxpcHNlIiwiZm9yZWlnbk9iamVjdCIsImciLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJHcmFkaWVudCIsIm1hc2siLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbEdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdmciLCJ0ZXh0IiwidHNwYW4iXSxmdD1mdW5jdGlvbihlKXtyZXR1cm4gbCh4LGUpfTtwdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Z0W2VdPWZ0KGUpfSk7dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe00odGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5jb21wb25lbnRJZD1uLHRoaXMuaXNTdGF0aWM9ZCh0KSxGZS5tYXN0ZXIuaGFzSWQobil8fEZlLm1hc3Rlci5kZWZlcnJlZEluamVjdChuLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dSh0aGlzLnJ1bGVzLGUsdCkscj1pZShuLCIiKTt0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb21wb25lbnRJZDtlLmhhc0lkKHQpJiZlLnJlbW92ZSh0KX0sZS5wcm90b3R5cGUucmVuZGVyU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVTdHlsZXModCksdGhpcy5jcmVhdGVTdHlsZXMoZSx0KX0sZX0oKTtIJiYod2luZG93LnNjQ0dTSE1SQ2FjaGU9e30pO3ZhciBodD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cc3xcXG4vZywiIil9LG10PWZ1bmN0aW9uKGUpe3ZhciB0PV8uYS5mb3J3YXJkUmVmKGZ1bmN0aW9uKHQsbil7cmV0dXJuIF8uYS5jcmVhdGVFbGVtZW50KHJ0LG51bGwsZnVuY3Rpb24ocil7dmFyIGk9ZS5kZWZhdWx0UHJvcHMsbz16ZSh0LHIsaSk7cmV0dXJuIF8uYS5jcmVhdGVFbGVtZW50KGUsUih7fSx0LHt0aGVtZTpvLHJlZjpufSkpfSl9KTtyZXR1cm4geSh0LGUpLHQuZGlzcGxheU5hbWU9IldpdGhUaGVtZSgiK28oZSkrIikiLHR9LGd0PXtTdHlsZVNoZWV0OkZlfTt0LmRlZmF1bHQ9ZnR9LmNhbGwodCxuKDU2KSxuKDc5KShlKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCl7ZS5leHBvcnRzPXQobnVsbCl9KGZ1bmN0aW9uIGUodCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LGksYyxsKXtmb3IodmFyIGQsaCxtPTAsZz0wLHk9MCxiPTAseD0wLEM9MCxFPTAsaz0wLEE9MCxfPTAsVD0wLEY9MCxJPTAsTD0wLFA9MCxNPTAsZWU9MCxfZT0wLE5lPTAsTGU9aS5sZW5ndGgsUGU9TGUtMSxNZT0iIixIZT0iIixXZT0iIixRZT0iIixLZT0iIixKZT0iIjtQPExlOyl7aWYoRT1pLmNoYXJDb2RlQXQoUCksUD09PVBlJiZnK2IreSttIT09MCYmKDAhPT1nJiYoRT1nPT09YWU/VzphZSksYj15PW09MCxMZSsrLFBlKyspLGcrYit5K209PT0wKXtpZihQPT09UGUmJihNPjAmJihIZT1IZS5yZXBsYWNlKGYsIiIpKSxIZS50cmltKCkubGVuZ3RoPjApKXtzd2l0Y2goRSl7Y2FzZSBZOmNhc2UgSzpjYXNlICQ6Y2FzZSBROmNhc2UgVzpicmVhaztkZWZhdWx0OkhlKz1pLmNoYXJBdChQKX1FPSR9aWYoMT09PWVlKXN3aXRjaChFKXtjYXNlIHo6Y2FzZSBVOmNhc2UgJDpjYXNlIG9lOmNhc2UgaWU6Y2FzZSBHOmNhc2UgVjpjYXNlIG5lOmVlPTA7Y2FzZSBLOmNhc2UgUTpjYXNlIFc6Y2FzZSBZOmJyZWFrO2RlZmF1bHQ6Zm9yKGVlPTAsTmU9UCx4PUUsUC0tLEU9JDtOZTxMZTspc3dpdGNoKGkuY2hhckNvZGVBdChOZSsrKSl7Y2FzZSBXOmNhc2UgUTpjYXNlICQ6KytQLEU9eCxOZT1MZTticmVhaztjYXNlIHJlOk0+MCYmKCsrUCxFPXgpO2Nhc2UgejpOZT1MZX19c3dpdGNoKEUpe2Nhc2Ugejpmb3IoeD0oSGU9SGUudHJpbSgpKS5jaGFyQ29kZUF0KDApLFQ9MSxOZT0rK1A7UDxMZTspe3N3aXRjaChFPWkuY2hhckNvZGVBdChQKSl7Y2FzZSB6OlQrKzticmVhaztjYXNlIFU6VC0tfWlmKDA9PT1UKWJyZWFrO1ArK31zd2l0Y2goV2U9aS5zdWJzdHJpbmcoTmUsUCkseD09PWxlJiYoeD0oSGU9SGUucmVwbGFjZShwLCIiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLHgpe2Nhc2UgSjpzd2l0Y2goTT4wJiYoSGU9SGUucmVwbGFjZShmLCIiKSksQz1IZS5jaGFyQ29kZUF0KDEpKXtjYXNlIHhlOmNhc2UgaGU6Y2FzZSBtZTpjYXNlIFo6ZD10O2JyZWFrO2RlZmF1bHQ6ZD1GZX1pZihOZT0oV2U9bih0LGQsV2UsQyxsKzEpKS5sZW5ndGgsT2U+MCYmMD09PU5lJiYoTmU9SGUubGVuZ3RoKSxJZT4wJiYoZD1yKEZlLEhlLF9lKSxoPXUoJGUsV2UsZCx0LERlLEVlLE5lLEMsbCxjKSxIZT1kLmpvaW4oIiIpLHZvaWQgMCE9PWgmJjA9PT0oTmU9KFdlPWgudHJpbSgpKS5sZW5ndGgpJiYoQz0wLFdlPSIiKSksTmU+MClzd2l0Y2goQyl7Y2FzZSBtZTpIZT1IZS5yZXBsYWNlKE4scyk7Y2FzZSB4ZTpjYXNlIGhlOmNhc2UgWjpXZT1IZSsieyIrV2UrIn0iO2JyZWFrO2Nhc2UgZGU6V2U9KEhlPUhlLnJlcGxhY2UoRCwiJDEgJDIiKyh6ZT4wP0dlOiIiKSkpKyJ7IitXZSsifSIsV2U9MT09PWtlfHwyPT09a2UmJmEoIkAiK1dlLDMpPyJAIitqK1dlKyJAIitXZToiQCIrV2U7YnJlYWs7ZGVmYXVsdDpXZT1IZStXZSxjPT09Q2UmJihRZSs9V2UsV2U9IiIpfWVsc2UgV2U9IiI7YnJlYWs7ZGVmYXVsdDpXZT1uKHQscih0LEhlLF9lKSxXZSxjLGwrMSl9S2UrPVdlLEY9MCxlZT0wLEw9MCxNPTAsX2U9MCxJPTAsSGU9IiIsV2U9IiIsRT1pLmNoYXJDb2RlQXQoKytQKTticmVhaztjYXNlIFU6Y2FzZSAkOmlmKChOZT0oSGU9KE0+MD9IZS5yZXBsYWNlKGYsIiIpOkhlKS50cmltKCkpLmxlbmd0aCk+MSlzd2l0Y2goMD09PUwmJigoeD1IZS5jaGFyQ29kZUF0KDApKT09PVp8fHg+OTYmJng8MTIzKSYmKE5lPShIZT1IZS5yZXBsYWNlKCIgIiwiOiIpKS5sZW5ndGgpLEllPjAmJnZvaWQgMCE9PShoPXUoUmUsSGUsdCxlLERlLEVlLFFlLmxlbmd0aCxjLGwsYykpJiYwPT09KE5lPShIZT1oLnRyaW0oKSkubGVuZ3RoKSYmKEhlPSJcMFwwIiksKHg9SGUuY2hhckNvZGVBdCgwKSkrKEM9SGUuY2hhckNvZGVBdCgxKSkpe2Nhc2UgbGU6YnJlYWs7Y2FzZSB2ZTpjYXNlIGJlOkplKz1IZStpLmNoYXJBdChQKTticmVhaztkZWZhdWx0OmlmKEhlLmNoYXJDb2RlQXQoTmUtMSk9PT1yZSlicmVhaztRZSs9byhIZSx4LEMsSGUuY2hhckNvZGVBdCgyKSl9Rj0wLGVlPTAsTD0wLE09MCxfZT0wLEhlPSIiLEU9aS5jaGFyQ29kZUF0KCsrUCl9fXN3aXRjaChFKXtjYXNlIFE6Y2FzZSBXOmlmKGcrYit5K20rVGU9PT0wKXN3aXRjaChfKXtjYXNlIFY6Y2FzZSBpZTpjYXNlIG9lOmNhc2UgSjpjYXNlIGNlOmNhc2Ugc2U6Y2FzZSB0ZTpjYXNlIHVlOmNhc2UgYWU6Y2FzZSBaOmNhc2UgcmU6Y2FzZSBuZTpjYXNlICQ6Y2FzZSB6OmNhc2UgVTpicmVhaztkZWZhdWx0Okw+MCYmKGVlPTEpfWc9PT1hZT9nPTA6U2UrRj09PTAmJihNPTEsSGUrPSJcMCIpLEllKlVlPjAmJnUoamUsSGUsdCxlLERlLEVlLFFlLmxlbmd0aCxjLGwsYyksRWU9MSxEZSsrO2JyZWFrO2Nhc2UgJDpjYXNlIFU6aWYoZytiK3krbT09PTApe0VlKys7YnJlYWt9ZGVmYXVsdDpzd2l0Y2goRWUrKyxNZT1pLmNoYXJBdChQKSxFKXtjYXNlIEs6Y2FzZSBZOmlmKGIrbStnPT09MClzd2l0Y2goayl7Y2FzZSBuZTpjYXNlIHJlOmNhc2UgSzpjYXNlIFk6TWU9IiI7YnJlYWs7ZGVmYXVsdDpFIT09WSYmKE1lPSIgIil9YnJlYWs7Y2FzZSBsZTpNZT0iXFwwIjticmVhaztjYXNlIHBlOk1lPSJcXGYiO2JyZWFrO2Nhc2UgZmU6TWU9IlxcdiI7YnJlYWs7Y2FzZSBYOmIrZyttPT09MCYmU2U+MCYmKF9lPTEsTT0xLE1lPSJcZiIrTWUpO2JyZWFrO2Nhc2UgMTA4OmlmKGIrZyttK3dlPT09MCYmTD4wKXN3aXRjaChQLUwpe2Nhc2UgMjprPT09Z2UmJmkuY2hhckNvZGVBdChQLTMpPT09cmUmJih3ZT1rKTtjYXNlIDg6QT09PXllJiYod2U9QSl9YnJlYWs7Y2FzZSByZTpiK2crbT09PTAmJihMPVApO2JyZWFrO2Nhc2UgbmU6Zyt5K2IrbT09PTAmJihNPTEsTWUrPSJcciIpO2JyZWFrO2Nhc2Ugb2U6Y2FzZSBpZTowPT09ZyYmKGI9Yj09PUU/MDowPT09Yj9FOmIpO2JyZWFrO2Nhc2UgcTpiK2creT09PTAmJm0rKzticmVhaztjYXNlIEg6YitnK3k9PT0wJiZtLS07YnJlYWs7Y2FzZSBWOmIrZyttPT09MCYmeS0tO2JyZWFrO2Nhc2UgRzppZihiK2crbT09PTApe2lmKDA9PT1GKXN3aXRjaCgyKmsrMypBKXtjYXNlIDUzMzpicmVhaztkZWZhdWx0OlQ9MCxGPTF9eSsrfWJyZWFrO2Nhc2UgSjpnK3krYittK0wrST09PTAmJihJPTEpO2JyZWFrO2Nhc2UgdGU6Y2FzZSBhZTppZihiK20reT4wKWJyZWFrO3N3aXRjaChnKXtjYXNlIDA6c3dpdGNoKDIqRSszKmkuY2hhckNvZGVBdChQKzEpKXtjYXNlIDIzNTpnPWFlO2JyZWFrO2Nhc2UgMjIwOk5lPVAsZz10ZX1icmVhaztjYXNlIHRlOkU9PT1hZSYmaz09PXRlJiYoMzM9PT1pLmNoYXJDb2RlQXQoTmUrMikmJihRZSs9aS5zdWJzdHJpbmcoTmUsUCsxKSksTWU9IiIsZz0wKX19aWYoMD09PWcpe2lmKFNlK2IrbStJPT09MCYmYyE9PWRlJiZFIT09JClzd2l0Y2goRSl7Y2FzZSBuZTpjYXNlIGNlOmNhc2Ugc2U6Y2FzZSB1ZTpjYXNlIFY6Y2FzZSBHOmlmKDA9PT1GKXtzd2l0Y2goayl7Y2FzZSBLOmNhc2UgWTpjYXNlIFc6Y2FzZSBROk1lKz0iXDAiO2JyZWFrO2RlZmF1bHQ6TWU9IlwwIitNZSsoRT09PW5lPyIiOiJcMCIpfU09MX1lbHNlIHN3aXRjaChFKXtjYXNlIEc6Rj0rK1Q7YnJlYWs7Y2FzZSBWOjA9PShGPS0tVCkmJihNPTEsTWUrPSJcMCIpfWJyZWFrO2Nhc2UgSzpjYXNlIFk6c3dpdGNoKGspe2Nhc2UgbGU6Y2FzZSB6OmNhc2UgVTpjYXNlICQ6Y2FzZSBuZTpjYXNlIHBlOmNhc2UgSzpjYXNlIFk6Y2FzZSBXOmNhc2UgUTpicmVhaztkZWZhdWx0OjA9PT1GJiYoTT0xLE1lKz0iXDAiKX19SGUrPU1lLEUhPT1ZJiZFIT09SyYmKF89RSl9fUE9ayxrPUUsUCsrfWlmKE5lPVFlLmxlbmd0aCxPZT4wJiYwPT09TmUmJjA9PT1LZS5sZW5ndGgmJjA9PT10WzBdLmxlbmd0aD09MCYmKGMhPT1oZXx8MT09PXQubGVuZ3RoJiYoU2U+MD9WZTpxZSk9PT10WzBdKSYmKE5lPXQuam9pbigiLCIpLmxlbmd0aCsyKSxOZT4wKXtpZihkPTA9PT1TZSYmYyE9PWRlP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9MCxpPWUubGVuZ3RoLG89QXJyYXkoaSk7cjxpOysrcil7Zm9yKHZhciBhPWVbcl0uc3BsaXQodikscz0iIix1PTAsYz0wLGw9MCxwPTAsZD1hLmxlbmd0aDt1PGQ7Kyt1KWlmKCEoMD09PShjPShuPWFbdV0pLmxlbmd0aCkmJmQ+MSkpe2lmKGw9cy5jaGFyQ29kZUF0KHMubGVuZ3RoLTEpLHA9bi5jaGFyQ29kZUF0KDApLHQ9IiIsMCE9PXUpc3dpdGNoKGwpe2Nhc2UgdGU6Y2FzZSBjZTpjYXNlIHNlOmNhc2UgdWU6Y2FzZSBZOmNhc2UgRzpicmVhaztkZWZhdWx0OnQ9IiAifXN3aXRjaChwKXtjYXNlIFg6bj10K1ZlO2Nhc2UgY2U6Y2FzZSBzZTpjYXNlIHVlOmNhc2UgWTpjYXNlIFY6Y2FzZSBHOmJyZWFrO2Nhc2UgcTpuPXQrbitWZTticmVhaztjYXNlIHJlOnN3aXRjaCgyKm4uY2hhckNvZGVBdCgxKSszKm4uY2hhckNvZGVBdCgyKSl7Y2FzZSA1MzA6aWYoQWU+MCl7bj10K24uc3Vic3RyaW5nKDgsYy0xKTticmVha31kZWZhdWx0Oih1PDF8fGFbdS0xXS5sZW5ndGg8MSkmJihuPXQrVmUrbil9YnJlYWs7Y2FzZSBuZTp0PSIiO2RlZmF1bHQ6bj1jPjEmJm4uaW5kZXhPZigiOiIpPjA/dCtuLnJlcGxhY2UoTywiJDEiK1ZlKyIkMiIpOnQrbitWZX1zKz1ufW9bcl09cy5yZXBsYWNlKGYsIiIpLnRyaW0oKX1yZXR1cm4gb30odCk6dCxJZT4wJiZ2b2lkIDAhPT0oaD11KEJlLFFlLGQsZSxEZSxFZSxOZSxjLGwsYykpJiYwPT09KFFlPWgpLmxlbmd0aClyZXR1cm4gSmUrUWUrS2U7aWYoUWU9ZC5qb2luKCIsIikrInsiK1FlKyJ9IixrZSp3ZSE9MCl7c3dpdGNoKDIhPT1rZXx8YShRZSwyKXx8KHdlPTApLHdlKXtjYXNlIHllOlFlPVFlLnJlcGxhY2UoUywiOiIrUisiJDEiKStRZTticmVhaztjYXNlIGdlOlFlPVFlLnJlcGxhY2UodywiOjoiK2orImlucHV0LSQxIikrUWUucmVwbGFjZSh3LCI6OiIrUisiJDEiKStRZS5yZXBsYWNlKHcsIjoiK0IrImlucHV0LSQxIikrUWV9d2U9MH19cmV0dXJuIEplK1FlK0tlfWZ1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQudHJpbSgpLnNwbGl0KGIpLG89cixhPXIubGVuZ3RoLHM9ZS5sZW5ndGg7c3dpdGNoKHMpe2Nhc2UgMDpjYXNlIDE6Zm9yKHZhciB1PTAsYz0wPT09cz8iIjplWzBdKyIgIjt1PGE7Kyt1KW9bdV09aShjLG9bdV0sbixzKS50cmltKCk7YnJlYWs7ZGVmYXVsdDp1PTA7dmFyIGw9MDtmb3Iobz1bXTt1PGE7Kyt1KWZvcih2YXIgcD0wO3A8czsrK3Apb1tsKytdPWkoZVtwXSsiICIsclt1XSxuLHMpLnRyaW0oKX1yZXR1cm4gb31mdW5jdGlvbiBpKGUsdCxuLHIpe3ZhciBpPXQsbz1pLmNoYXJDb2RlQXQoMCk7c3dpdGNoKG88MzMmJihvPShpPWkudHJpbSgpKS5jaGFyQ29kZUF0KDApKSxvKXtjYXNlIFg6c3dpdGNoKFNlK3Ipe2Nhc2UgMDpjYXNlIDE6aWYoMD09PWUudHJpbSgpLmxlbmd0aClicmVhaztkZWZhdWx0OnJldHVybiBpLnJlcGxhY2UoeCwiJDEiK2UudHJpbSgpKX1icmVhaztjYXNlIHJlOnN3aXRjaChpLmNoYXJDb2RlQXQoMSkpe2Nhc2UgMTAzOmlmKEFlPjAmJlNlPjApcmV0dXJuIGkucmVwbGFjZShDLCIkMSIpLnJlcGxhY2UoeCwiJDEiK3FlKTticmVhaztkZWZhdWx0OnJldHVybiBlLnRyaW0oKStpLnJlcGxhY2UoeCwiJDEiK2UudHJpbSgpKX1kZWZhdWx0OmlmKG4qU2U+MCYmaS5pbmRleE9mKCJcZiIpPjApcmV0dXJuIGkucmVwbGFjZSh4LChlLmNoYXJDb2RlQXQoMCk9PT1yZT8iIjoiJDEiKStlLnRyaW0oKSl9cmV0dXJuIGUraX1mdW5jdGlvbiBvKGUsdCxuLHIpe3ZhciBpLHM9MCx1PWUrIjsiLGM9Mip0KzMqbis0KnI7aWYoOTQ0PT09YylyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1lLmluZGV4T2YoIjoiLDkpKzEscj1lLnN1YnN0cmluZygwLG4pLnRyaW0oKSxpPWUuc3Vic3RyaW5nKG4sdC0xKS50cmltKCk7c3dpdGNoKGUuY2hhckNvZGVBdCg5KSp6ZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgWjppZigxMTAhPT1lLmNoYXJDb2RlQXQoMTApKWJyZWFrO2RlZmF1bHQ6Zm9yKHZhciBvPWkuc3BsaXQoKGk9IiIsZykpLHM9MCxuPTAsdD1vLmxlbmd0aDtzPHQ7bj0wLCsrcyl7Zm9yKHZhciB1PW9bc10sYz11LnNwbGl0KHkpO3U9Y1tuXTspe3ZhciBsPXUuY2hhckNvZGVBdCgwKTtpZigxPT09emUmJihsPkomJmw8OTB8fGw+OTYmJmw8MTIzfHxsPT09ZWV8fGw9PT1aJiZ1LmNoYXJDb2RlQXQoMSkhPT1aKSlzd2l0Y2goaXNOYU4ocGFyc2VGbG9hdCh1KSkrKC0xIT09dS5pbmRleE9mKCIoIikpKXtjYXNlIDE6c3dpdGNoKHUpe2Nhc2UiaW5maW5pdGUiOmNhc2UiYWx0ZXJuYXRlIjpjYXNlImJhY2t3YXJkcyI6Y2FzZSJydW5uaW5nIjpjYXNlIm5vcm1hbCI6Y2FzZSJmb3J3YXJkcyI6Y2FzZSJib3RoIjpjYXNlIm5vbmUiOmNhc2UibGluZWFyIjpjYXNlImVhc2UiOmNhc2UiZWFzZS1pbiI6Y2FzZSJlYXNlLW91dCI6Y2FzZSJlYXNlLWluLW91dCI6Y2FzZSJwYXVzZWQiOmNhc2UicmV2ZXJzZSI6Y2FzZSJhbHRlcm5hdGUtcmV2ZXJzZSI6Y2FzZSJpbmhlcml0IjpjYXNlImluaXRpYWwiOmNhc2UidW5zZXQiOmNhc2Uic3RlcC1zdGFydCI6Y2FzZSJzdGVwLWVuZCI6YnJlYWs7ZGVmYXVsdDp1Kz1HZX19Y1tuKytdPXV9aSs9KDA9PT1zPyIiOiIsIikrYy5qb2luKCIgIil9fXJldHVybiBpPXIraSsiOyIsMT09PWtlfHwyPT09a2UmJmEoaSwxKT9qK2kraTppfSh1KTtpZigwPT09a2V8fDI9PT1rZSYmIWEodSwxKSlyZXR1cm4gdTtzd2l0Y2goYyl7Y2FzZSAxMDE1OnJldHVybiA5Nz09PXUuY2hhckNvZGVBdCgxMCk/ait1K3U6dTtjYXNlIDk1MTpyZXR1cm4gMTE2PT09dS5jaGFyQ29kZUF0KDMpP2ordSt1OnU7Y2FzZSA5NjM6cmV0dXJuIDExMD09PXUuY2hhckNvZGVBdCg1KT9qK3UrdTp1O2Nhc2UgMTAwOTppZigxMDAhPT11LmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5Njk6Y2FzZSA5NDI6cmV0dXJuIGordSt1O2Nhc2UgOTc4OnJldHVybiBqK3UrUit1K3U7Y2FzZSAxMDE5OmNhc2UgOTgzOnJldHVybiBqK3UrUit1K0IrdSt1O2Nhc2UgODgzOnJldHVybiB1LmNoYXJDb2RlQXQoOCk9PT1aP2ordSt1OnU7Y2FzZSA5MzI6aWYodS5jaGFyQ29kZUF0KDQpPT09Wilzd2l0Y2godS5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gaisiYm94LSIrdS5yZXBsYWNlKCItZ3JvdyIsIiIpK2ordStCK3UucmVwbGFjZSgiZ3JvdyIsInBvc2l0aXZlIikrdTtjYXNlIDExNTpyZXR1cm4gait1K0IrdS5yZXBsYWNlKCJzaHJpbmsiLCJuZWdhdGl2ZSIpK3U7Y2FzZSA5ODpyZXR1cm4gait1K0IrdS5yZXBsYWNlKCJiYXNpcyIsInByZWZlcnJlZC1zaXplIikrdX1yZXR1cm4gait1K0IrdSt1O2Nhc2UgOTY0OnJldHVybiBqK3UrQisiZmxleC0iK3UrdTtjYXNlIDEwMjM6aWYoOTkhPT11LmNoYXJDb2RlQXQoOCkpYnJlYWs7cmV0dXJuIGk9dS5zdWJzdHJpbmcodS5pbmRleE9mKCI6IiwxNSkpLnJlcGxhY2UoImZsZXgtIiwiIikucmVwbGFjZSgic3BhY2UtYmV0d2VlbiIsImp1c3RpZnkiKSxqKyJib3gtcGFjayIraStqK3UrQisiZmxleC1wYWNrIitpK3U7Y2FzZSAxMDA1OnJldHVybiBoLnRlc3QodSk/dS5yZXBsYWNlKGQsIjoiK2opK3UucmVwbGFjZShkLCI6IitSKSt1OnU7Y2FzZSAxZTM6c3dpdGNoKHM9KGk9dS5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZigiLSIpKzEsaS5jaGFyQ29kZUF0KDApK2kuY2hhckNvZGVBdChzKSl7Y2FzZSAyMjY6aT11LnJlcGxhY2UoRiwidGIiKTticmVhaztjYXNlIDIzMjppPXUucmVwbGFjZShGLCJ0Yi1ybCIpO2JyZWFrO2Nhc2UgMjIwOmk9dS5yZXBsYWNlKEYsImxyIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdX1yZXR1cm4gait1K0IraSt1O2Nhc2UgMTAxNzppZigtMT09PXUuaW5kZXhPZigic3RpY2t5Iiw5KSlyZXR1cm4gdTtjYXNlIDk3NTpzd2l0Y2gocz0odT1lKS5sZW5ndGgtMTAsYz0oaT0oMzM9PT11LmNoYXJDb2RlQXQocyk/dS5zdWJzdHJpbmcoMCxzKTp1KS5zdWJzdHJpbmcoZS5pbmRleE9mKCI6Iiw3KSsxKS50cmltKCkpLmNoYXJDb2RlQXQoMCkrKDB8aS5jaGFyQ29kZUF0KDcpKSl7Y2FzZSAyMDM6aWYoaS5jaGFyQ29kZUF0KDgpPDExMSlicmVhaztjYXNlIDExNTp1PXUucmVwbGFjZShpLGoraSkrIjsiK3U7YnJlYWs7Y2FzZSAyMDc6Y2FzZSAxMDI6dT11LnJlcGxhY2UoaSxqKyhjPjEwMj8iaW5saW5lLSI6IiIpKyJib3giKSsiOyIrdS5yZXBsYWNlKGksaitpKSsiOyIrdS5yZXBsYWNlKGksQitpKyJib3giKSsiOyIrdX1yZXR1cm4gdSsiOyI7Y2FzZSA5Mzg6aWYodS5jaGFyQ29kZUF0KDUpPT09Wilzd2l0Y2godS5jaGFyQ29kZUF0KDYpKXtjYXNlIDEwNTpyZXR1cm4gaT11LnJlcGxhY2UoIi1pdGVtcyIsIiIpLGordStqKyJib3gtIitpK0IrImZsZXgtIitpK3U7Y2FzZSAxMTU6cmV0dXJuIGordStCKyJmbGV4LWl0ZW0tIit1LnJlcGxhY2UoTCwiIikrdTtkZWZhdWx0OnJldHVybiBqK3UrQisiZmxleC1saW5lLXBhY2siK3UucmVwbGFjZSgiYWxpZ24tY29udGVudCIsIiIpLnJlcGxhY2UoTCwiIikrdX1icmVhaztjYXNlIDk3MzpjYXNlIDk4OTppZih1LmNoYXJDb2RlQXQoMykhPT1afHwxMjI9PT11LmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5MzE6Y2FzZSA5NTM6aWYoITA9PT1NLnRlc3QoZSkpcmV0dXJuIDExNT09PShpPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiOiIpKzEpKS5jaGFyQ29kZUF0KDApP28oZS5yZXBsYWNlKCJzdHJldGNoIiwiZmlsbC1hdmFpbGFibGUiKSx0LG4scikucmVwbGFjZSgiOmZpbGwtYXZhaWxhYmxlIiwiOnN0cmV0Y2giKTp1LnJlcGxhY2UoaSxqK2kpK3UucmVwbGFjZShpLFIraS5yZXBsYWNlKCJmaWxsLSIsIiIpKSt1O2JyZWFrO2Nhc2UgOTYyOmlmKHU9ait1KygxMDI9PT11LmNoYXJDb2RlQXQoNSk/Qit1OiIiKSt1LG4rcj09PTIxMSYmMTA1PT09dS5jaGFyQ29kZUF0KDEzKSYmdS5pbmRleE9mKCJ0cmFuc2Zvcm0iLDEwKT4wKXJldHVybiB1LnN1YnN0cmluZygwLHUuaW5kZXhPZigiOyIsMjcpKzEpLnJlcGxhY2UobSwiJDEiK2orIiQyIikrdX1yZXR1cm4gdX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49ZS5pbmRleE9mKDE9PT10PyI6IjoieyIpLHI9ZS5zdWJzdHJpbmcoMCwzIT09dD9uOjEwKSxpPWUuc3Vic3RyaW5nKG4rMSxlLmxlbmd0aC0xKTtyZXR1cm4gTGUoMiE9PXQ/cjpyLnJlcGxhY2UoUCwiJDEiKSxpLHQpfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1vKHQsdC5jaGFyQ29kZUF0KDApLHQuY2hhckNvZGVBdCgxKSx0LmNoYXJDb2RlQXQoMikpO3JldHVybiBuIT09dCsiOyI/bi5yZXBsYWNlKEksIiBvciAoJDEpIikuc3Vic3RyaW5nKDQpOiIoIit0KyIpIn1mdW5jdGlvbiB1KGUsdCxuLHIsaSxvLGEscyx1LGMpe2Zvcih2YXIgcCxmPTAsZD10O2Y8SWU7KytmKXN3aXRjaChwPU5lW2ZdLmNhbGwobCxlLGQsbixyLGksbyxhLHMsdSxjKSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpkPXB9c3dpdGNoKGQpe2Nhc2Ugdm9pZCAwOmNhc2UhMTpjYXNlITA6Y2FzZSBudWxsOmNhc2UgdDpicmVhaztkZWZhdWx0OnJldHVybiBkfX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO3N3aXRjaCh0KXtjYXNlImtleWZyYW1lIjp6ZT0wfG47YnJlYWs7Y2FzZSJnbG9iYWwiOkFlPTB8bjticmVhaztjYXNlImNhc2NhZGUiOlNlPTB8bjticmVhaztjYXNlImNvbXByZXNzIjpfZT0wfG47YnJlYWs7Y2FzZSJzZW1pY29sb24iOlRlPTB8bjticmVhaztjYXNlInByZXNlcnZlIjpPZT0wfG47YnJlYWs7Y2FzZSJwcmVmaXgiOkxlPW51bGwsbj8iZnVuY3Rpb24iIT10eXBlb2Ygbj9rZT0xOihrZT0yLExlPW4pOmtlPTB9fXJldHVybiBjfWZ1bmN0aW9uIGwodCxyKXtpZih2b2lkIDAhPT10aGlzJiZ0aGlzLmNvbnN0cnVjdG9yPT09bClyZXR1cm4gZSh0KTt2YXIgaT10LG89aS5jaGFyQ29kZUF0KDApO288MzMmJihvPShpPWkudHJpbSgpKS5jaGFyQ29kZUF0KDApKSx6ZT4wJiYoR2U9aS5yZXBsYWNlKEUsbz09PXE/IiI6Ii0iKSksbz0xLDE9PT1TZT9xZT1pOlZlPWk7dmFyIGEscz1bcWVdO0llPjAmJnZvaWQgMCE9PShhPXUoTWUscixzLHMsRGUsRWUsMCwwLDAsMCkpJiYic3RyaW5nIj09dHlwZW9mIGEmJihyPWEpO3ZhciBjPW4oRmUscyxyLDAsMCk7cmV0dXJuIEllPjAmJnZvaWQgMCE9PShhPXUoUGUsYyxzLHMsRGUsRWUsYy5sZW5ndGgsMCwwLDApKSYmInN0cmluZyIhPXR5cGVvZihjPWEpJiYobz0wKSxHZT0iIixxZT0iIixWZT0iIix3ZT0wLERlPTEsRWU9MSxfZSpvPT0wP2M6Yy5yZXBsYWNlKGYsIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShBLCIkMSIpLnJlcGxhY2UoXywiJDEiKS5yZXBsYWNlKFQsIiAiKX12YXIgcD0vXlwwKy9nLGY9L1tcMFxyXGZdL2csZD0vOiAqL2csaD0vem9vfGdyYS8sbT0vKFssOiBdKSh0cmFuc2Zvcm0pL2csZz0vLCtccyooPyFbXihdKlspXSkvZyx5PS8gK1xzKig/IVteKF0qWyldKS9nLHY9LyAqW1wwXSAqL2csYj0vLFxyKz8vZyx4PS8oW1x0XHJcbiBdKSpcZj8mL2csQz0vOmdsb2JhbFwoKCg/OlteXChcKVxbXF1dKnxcWy4qXF18XChbXlwoXCldKlwpKSopXCkvZyxFPS9cVysvZyxEPS9AKGtcdyspXHMqKFxTKilccyovLHc9Lzo6KHBsYWNlKS9nLFM9LzoocmVhZC1vbmx5KS9nLGs9L1xzKyg/PVt7XF07PTo+XSkvZyxBPS8oW1t9PTo+XSlccysvZyxfPS8oXHtbXntdKz8pOyg/PVx9KS9nLFQ9L1xzezIsfS9nLE89LyhbXlwoXSkoOispICovZyxGPS9bc3ZoXVx3Ky1bdGJscl17Mn0vLE49L1woXHMqKC4qKVxzKlwpL2csST0vKFtcc1xTXSo/KTsvZyxMPS8tc2VsZnxmbGV4LS9nLFA9L1teXSo/KDpbcnBdW2VsXWFbXHctXSspW15dKi8sTT0vc3RyZXRjaHw6XHMqXHcrXC0oPzpjb250ZXxhdmFpbCkvLGo9Ii13ZWJraXQtIixSPSItbW96LSIsQj0iLW1zLSIsJD01OSxVPTEyNSx6PTEyMyxHPTQwLFY9NDEscT05MSxIPTkzLFc9MTAsUT0xMyxLPTksSj02NCxZPTMyLFg9MzgsWj00NSxlZT05NSx0ZT00MixuZT00NCxyZT01OCxpZT0zOSxvZT0zNCxhZT00NyxzZT02Mix1ZT00MyxjZT0xMjYsbGU9MCxwZT0xMixmZT0xMSxkZT0xMDcsaGU9MTA5LG1lPTExNSxnZT0xMTIseWU9MTExLHZlPTE2OSxiZT0xNjMseGU9MTAwLENlPTExMixFZT0xLERlPTEsd2U9MCxTZT0xLGtlPTEsQWU9MSxfZT0wLFRlPTAsT2U9MCxGZT1bXSxOZT1bXSxJZT0wLExlPW51bGwsUGU9LTIsTWU9LTEsamU9MCxSZT0xLEJlPTIsJGU9MyxVZT0wLHplPTEsR2U9IiIsVmU9IiIscWU9IiI7cmV0dXJuIGwudXNlPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQpe2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpJZT1OZS5sZW5ndGg9MDticmVhaztkZWZhdWx0OnN3aXRjaCh0LmNvbnN0cnVjdG9yKXtjYXNlIEFycmF5OmZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillKHRbbl0pO2JyZWFrO2Nhc2UgRnVuY3Rpb246TmVbSWUrK109dDticmVhaztjYXNlIEJvb2xlYW46VWU9MHwhIXR9fXJldHVybiBlfSxsLnNldD1jLHZvaWQgMCE9PXQmJmModCksbH0pfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQpe2UuZXhwb3J0cz10KCl9KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe2lmKHQpdHJ5e2UodCsifSIpfWNhdGNoKGUpe319cmV0dXJuIGZ1bmN0aW9uKG4scixpLG8sYSxzLHUsYyxsLHApe3N3aXRjaChuKXtjYXNlIDE6aWYoMD09PWwmJjY0PT09ci5jaGFyQ29kZUF0KDApKXJldHVybiBlKHIrIjsiKSwiIjticmVhaztjYXNlIDI6aWYoMD09PWMpcmV0dXJuIHIrIi8qfCovIjticmVhaztjYXNlIDM6c3dpdGNoKGMpe2Nhc2UgMTAyOmNhc2UgMTEyOnJldHVybiBlKGlbMF0rciksIiI7ZGVmYXVsdDpyZXR1cm4gcisoMD09PXA/Ii8qfCovIjoiIil9Y2FzZS0yOnIuc3BsaXQoIi8qfCovfSIpLmZvckVhY2godCl9fX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9big1MjgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PWUuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2Ugbzpzd2l0Y2goZT1lLnR5cGUpe2Nhc2UgZjpjYXNlIHM6Y2FzZSBjOmNhc2UgdTpyZXR1cm4gZTtkZWZhdWx0OnN3aXRjaChlPWUmJmUuJCR0eXBlb2Ype2Nhc2UgcDpjYXNlIGQ6Y2FzZSBsOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIHR9fWNhc2UgYTpyZXR1cm4gdH19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixvPWk/U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpOjYwMTAzLGE9aT9TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKTo2MDEwNixzPWk/U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKTo2MDEwNyx1PWk/U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKTo2MDEwOCxjPWk/U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKTo2MDExNCxsPWk/U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKTo2MDEwOSxwPWk/U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpOjYwMTEwLGY9aT9TeW1ib2wuZm9yKCJyZWFjdC5hc3luY19tb2RlIik6NjAxMTEsZD1pP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsaD1pP1N5bWJvbC5mb3IoInJlYWN0LnRpbWVvdXQiKTo2MDExMzt0LnR5cGVPZj1yLHQuQXN5bmNNb2RlPWYsdC5Db250ZXh0Q29uc3VtZXI9cCx0LkNvbnRleHRQcm92aWRlcj1sLHQuRWxlbWVudD1vLHQuRm9yd2FyZFJlZj1kLHQuRnJhZ21lbnQ9cyx0LlByb2ZpbGVyPWMsdC5Qb3J0YWw9YSx0LlN0cmljdE1vZGU9dSx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT09dHlwZW9mIGV8fGU9PT1zfHxlPT09Znx8ZT09PWN8fGU9PT11fHxlPT09aHx8Im9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWUmJihlLiQkdHlwZW9mPT09bHx8ZS4kJHR5cGVvZj09PXB8fGUuJCR0eXBlb2Y9PT1kKX0sdC5pc0FzeW5jTW9kZT1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PWZ9LHQuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSk9PT1wfSx0LmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpPT09bH0sdC5pc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1vfSx0LmlzRm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PWR9LHQuaXNGcmFnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PXN9LHQuaXNQcm9maWxlcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PWN9LHQuaXNQb3J0YWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSk9PT1hfSx0LmlzU3RyaWN0TW9kZT1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PXV9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2b2lkIDA9PT10JiYodD1pKTt2YXIgbixyLG89W10sYT0hMSxzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxvW25dKX07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkodCksdT0wO3U8dDt1KyspaVt1XT1hcmd1bWVudHNbdV07cmV0dXJuIGEmJm49PT10aGlzJiZpLmxlbmd0aD09PW8ubGVuZ3RoJiZpLmV2ZXJ5KHMpP3I6KHI9ZS5hcHBseSh0aGlzLGkpLGE9ITAsbj10aGlzLG89aSxyKX19dmFyIGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR9O3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTMxKSxpPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3x2YWx1ZUxpbmt8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzcyl8KG9uW0EtWl0uKil8KChkYXRhfGFyaWF8eCktLiopKSQvaSxvPU9iamVjdChyLmEpKGkudGVzdC5iaW5kKGkpKTt0LmE9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwPT09dFtuXSYmKHRbbl09ZShuKSksdFtuXX19dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10fHx3aW5kb3cubG9jYXRpb24uaHJlZjtlPWUucmVwbGFjZSgvW1xbXF1dL2csIlxcJCYiKTt2YXIgcj1uZXcgUmVnRXhwKCJbPyZdIitlKyIoPShbXiYjXSopfCZ8I3wkKSIpLGk9ci5leGVjKG4pO3JldHVybiBpJiZpWzJdP2RlY29kZVVSSUNvbXBvbmVudChpWzJdLnJlcGxhY2UoL1wrL2csIiAiKSk6bnVsbH1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG4scixpO3JldHVybiBjKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpuPTAsby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gbjxlLmxlbmd0aD8ocj1lW25dLFs0LHQocixuKV0pOlszLDRdO2Nhc2UgMjppZihpPW8uc2VudCgpKXJldHVyblsyLHJdO28ubGFiZWw9MztjYXNlIDM6cmV0dXJuIG4rKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzIsbnVsbF19fSl9KX12YXIgbz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfSxzPWZ1bmN0aW9uKCl7cmV0dXJuIHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pfXJldHVybiBlfSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKShmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e3Uoci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHUoZSl7ZS5kb25lP2koZS52YWx1ZSk6bmV3IG4oZnVuY3Rpb24odCl7dChlLnZhbHVlKX0pLnRoZW4oYSxzKX11KChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KX0sYz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByKFtlLHRdKX19ZnVuY3Rpb24gcihuKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3U7KXRyeXtpZihpPTEsbyYmKGE9MiZuWzBdP28ucmV0dXJuOm5bMF0/by50aHJvd3x8KChhPW8ucmV0dXJuKSYmYS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoYT1hLmNhbGwobyxuWzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gobz0wLGEmJihuPVsyJm5bMF0sYS52YWx1ZV0pLG5bMF0pe2Nhc2UgMDpjYXNlIDE6YT1uO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdS5sYWJlbCsrLHt2YWx1ZTpuWzFdLGRvbmU6ITF9O2Nhc2UgNTp1LmxhYmVsKyssbz1uWzFdLG49WzBdO2NvbnRpbnVlO2Nhc2UgNzpuPXUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9dS50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKDY9PT1uWzBdfHwyPT09blswXSkpe3U9MDtjb250aW51ZX1pZigzPT09blswXSYmKCFhfHxuWzFdPmFbMF0mJm5bMV08YVszXSkpe3UubGFiZWw9blsxXTticmVha31pZig2PT09blswXSYmdS5sYWJlbDxhWzFdKXt1LmxhYmVsPWFbMV0sYT1uO2JyZWFrfWlmKGEmJnUubGFiZWw8YVsyXSl7dS5sYWJlbD1hWzJdLHUub3BzLnB1c2gobik7YnJlYWt9YVsyXSYmdS5vcHMucG9wKCksdS50cnlzLnBvcCgpO2NvbnRpbnVlfW49dC5jYWxsKGUsdSl9Y2F0Y2goZSl7bj1bNixlXSxvPTB9ZmluYWxseXtpPWE9MH1pZig1Jm5bMF0pdGhyb3cgblsxXTtyZXR1cm57dmFsdWU6blswXT9uWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgaSxvLGEscyx1PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmFbMF0pdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzPXtuZXh0Om4oMCksdGhyb3c6bigxKSxyZXR1cm46bigyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihzW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHN9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbD1uKDApLHA9big1MzMpLGY9big3MTUpLGQ9big3MjIpLGg9big3NDgpLG09bigxKSxnPW4oMjU5KSx5PW4oMTQ3KSx2PW4oOSksYj1uKDE3KSx4PW4oMTUwKSxDPW4oNyksRT1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4pe3ZhciByPXQuY2FsbCh0aGlzLG4pfHx0aGlzO3JldHVybiByLmhhbmRsZVVwZGF0ZVNlc3Npb25Db3VudD1mdW5jdGlvbigpe3IuZm9yY2VVcGRhdGUoKX0sci5nZXRQbGF5Z3JvdW5kUmVmPWZ1bmN0aW9uKGUpe3IucGxheWdyb3VuZD1lLCJmdW5jdGlvbiI9PT10eXBlb2Ygci5wcm9wcy5nZXRSZWYmJnIucHJvcHMuZ2V0UmVmKGUpfSxyLmhhbmRsZUNoYW5nZUNvbmZpZz1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtjb25maWdTdHJpbmc6ZX0pfSxyLmhhbmRsZVNhdmVDb25maWc9ZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT09dHlwZW9mIHIucHJvcHMub25TYXZlQ29uZmlnJiZyLnByb3BzLm9uU2F2ZUNvbmZpZyhyLnN0YXRlLmNvbmZpZ1N0cmluZyl9LHIuaGFuZGxlU2VsZWN0RW52PWZ1bmN0aW9uKGUsdCl7dmFyIG49eS5nZXRBY3RpdmVFbmRwb2ludHMoci5wcm9wcy5jb25maWcsZSx0KSxpPW4uZW5kcG9pbnQsbz1uLnN1YnNjcmlwdGlvbkVuZHBvaW50LGE9bi5oZWFkZXJzO3Iuc2V0U3RhdGUoe2FjdGl2ZUVudjplLGVuZHBvaW50OmksaGVhZGVyczphLHN1YnNjcmlwdGlvbkVuZHBvaW50OnIubm9ybWFsaXplU3Vic2NyaXB0aW9uVXJsKGksbyksYWN0aXZlUHJvamVjdE5hbWU6dH0pfSxyLmhhbmRsZUNoYW5nZUVuZHBvaW50PWZ1bmN0aW9uKGUpe3Iuc2V0U3RhdGUoe2VuZHBvaW50OmV9KX0sci5oYW5kbGVDaGFuZ2VTdWJzY3JpcHRpb25zRW5kcG9pbnQ9ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZSh7c3Vic2NyaXB0aW9uRW5kcG9pbnQ6ZX0pfSxlLm09cixyLnN0YXRlPXIubWFwUHJvcHNUb1N0YXRlKG4pLHIucmVtb3ZlTG9hZGVyKCkscn1yZXR1cm4gbyhuLHQpLG4ucHJvdG90eXBlLm1hcFByb3BzVG9TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD0hIWUuY29uZmlnU3RyaW5nJiZ0aGlzLmlzQ29uZmlnWWFtbChlLmNvbmZpZ1N0cmluZyksbj10aGlzLmdldEluaXRpYWxBY3RpdmVFbnYoZS5jb25maWcpLGk9bi5hY3RpdmVFbnYsbz1uLnByb2plY3ROYW1lLGE9ZS5lbmRwb2ludHx8ZS5lbmRwb2ludFVybHx8cigiZW5kcG9pbnQiKXx8bG9jYXRpb24uaHJlZixzPXRoaXMuZXh0cmFjdEVuZHBvaW50QW5kSGVhZGVycyhhKTthPXMuZW5kcG9pbnQ7dmFyIHU9cy5oZWFkZXJzLGM9ZS5zdWJzY3JpcHRpb25FbmRwb2ludHx8cigic3Vic2NyaXB0aW9uRW5kcG9pbnQiKTtpZihlLmNvbmZpZ1N0cmluZyYmZS5jb25maWcmJmkpe3ZhciBsPXkuZ2V0QWN0aXZlRW5kcG9pbnRzKGUuY29uZmlnLGksbyk7YT1sLmVuZHBvaW50LGM9bC5zdWJzY3JpcHRpb25FbmRwb2ludCx1PWwuaGVhZGVyc31yZXR1cm4gYz10aGlzLm5vcm1hbGl6ZVN1YnNjcmlwdGlvblVybChhLGMpfHx2b2lkIDAse2VuZHBvaW50OnRoaXMuYWJzb2x1dGl6ZVVybChhKSxwbGF0Zm9ybVRva2VuOmUucGxhdGZvcm1Ub2tlbnx8bG9jYWxTdG9yYWdlLmdldEl0ZW0oInBsYXRmb3JtLXRva2VuIil8fHZvaWQgMCxzdWJzY3JpcHRpb25FbmRwb2ludDpjLGNvbmZpZ0lzWWFtbDp0LGNvbmZpZ1N0cmluZzplLmNvbmZpZ1N0cmluZyxhY3RpdmVFbnY6aSxhY3RpdmVQcm9qZWN0TmFtZTpvLGhlYWRlcnM6dX19LG4ucHJvdG90eXBlLmV4dHJhY3RFbmRwb2ludEFuZEhlYWRlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGxpdCgiPyIpO2lmKDE9PT10Lmxlbmd0aClyZXR1cm57ZW5kcG9pbnQ6ZX07dHJ5e3ZhciBuPXIoImhlYWRlcnMiLGUpO2lmKG4pcmV0dXJue2hlYWRlcnM6SlNPTi5wYXJzZShuKSxlbmRwb2ludDp0WzBdfX1jYXRjaChlKXt9cmV0dXJue2VuZHBvaW50OnRbMF19fSxuLnByb3RvdHlwZS5yZW1vdmVMb2FkZXI9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZy13cmFwcGVyIik7ZSYmZS5yZW1vdmUoKX0sbi5wcm90b3R5cGUubm9ybWFsaXplU3Vic2NyaXB0aW9uVXJsPWZ1bmN0aW9uKGUsdCl7aWYodCl7aWYodC5zdGFydHNXaXRoKCIvIikpe3JldHVybiJ3cyIrKGUuaW5jbHVkZXMoImh0dHBzIil8fGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoImh0dHBzIik/InMiOiIiKSsiOi8vIitsb2NhdGlvbi5ob3N0K3R9cmV0dXJuIHQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpfXJldHVybiB0aGlzLmdldEdyYXBoY29vbFN1YnNjcmlwdGlvbkVuZHBvaW50KGUpLnJlcGxhY2UoL15odHRwLywid3MiKX0sbi5wcm90b3R5cGUuZ2V0R3JhcGhjb29sU3Vic2NyaXB0aW9uRW5kcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5jbHVkZXMoImFwaS5ncmFwaC5jb29sIik/IndzczovL3N1YnNjcmlwdGlvbnMuZ3JhcGguY29vbC92MS8iK2Uuc3BsaXQoIi8iKS5zbGljZSgtMSlbMF06ZS5yZXBsYWNlKC9eaHR0cC8sIndzIil9LG4ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7ZS5lbmRwb2ludD09PXRoaXMucHJvcHMuZW5kcG9pbnQmJmUuZW5kcG9pbnRVcmw9PT10aGlzLnByb3BzLmVuZHBvaW50VXJsJiZlLnN1YnNjcmlwdGlvbkVuZHBvaW50PT09dGhpcy5wcm9wcy5zdWJzY3JpcHRpb25FbmRwb2ludCYmZS5jb25maWdTdHJpbmc9PT10aGlzLnByb3BzLmNvbmZpZ1N0cmluZyYmZS5wbGF0Zm9ybVRva2VuPT09dGhpcy5wcm9wcy5wbGF0Zm9ybVRva2VuJiZlLmNvbmZpZz09PXRoaXMucHJvcHMuY29uZmlnfHwodGhpcy5zZXRTdGF0ZSh0aGlzLm1hcFByb3BzVG9TdGF0ZShlKSksdGhpcy5zZXRJbml0aWFsV29ya3NwYWNlKGUpKX0sbi5wcm90b3R5cGUuZ2V0SW5pdGlhbEFjdGl2ZUVudj1mdW5jdGlvbihlKXtpZihlKXtpZihlLmV4dGVuc2lvbnMmJmUuZXh0ZW5zaW9ucy5lbmRwb2ludHMpcmV0dXJue2FjdGl2ZUVudjpPYmplY3Qua2V5cyhlLmV4dGVuc2lvbnMuZW5kcG9pbnRzKVswXX07aWYoZS5wcm9qZWN0cyl7dmFyIHQ9T2JqZWN0LmtleXMoZS5wcm9qZWN0cylbMF0sbj1lLnByb2plY3RzW3RdO2lmKG4uZXh0ZW5zaW9ucyYmbi5leHRlbnNpb25zLmVuZHBvaW50cylyZXR1cm57YWN0aXZlRW52Ok9iamVjdC5rZXlzKG4uZXh0ZW5zaW9ucy5lbmRwb2ludHMpWzBdLHByb2plY3ROYW1lOnR9fX1yZXR1cm57fX0sbi5wcm90b3R5cGUuaXNDb25maWdZYW1sPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZC5zYWZlTG9hZChlKSwhMH1jYXRjaChlKXt9cmV0dXJuITF9LG4ucHJvdG90eXBlLmFic29sdXRpemVVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP2xvY2F0aW9uLm9yaWdpbitlOmV9LG4ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe3ZhciBlPXIoInBsYXRmb3JtLXRva2VuIik7ZSYmZS5sZW5ndGg+MCYmKGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJwbGF0Zm9ybS10b2tlbiIsZSksd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uod2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpKX0sbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCIiPT09dGhpcy5zdGF0ZS5zdWJzY3JpcHRpb25FbmRwb2ludCYmdGhpcy51cGRhdGVTdWJzY3JpcHRpb25zVXJsKCksc2V0VGltZW91dChmdW5jdGlvbigpe2UucmVtb3ZlUGxheWdyb3VuZEluQ2xhc3MoKX0sNWUzKSx0aGlzLnNldEluaXRpYWxXb3Jrc3BhY2UoKSx0aGlzLnByb3BzLnRhYnMpdGhpcy5wcm9wcy5pbmplY3RUYWJzKHRoaXMucHJvcHMudGFicyk7ZWxzZXt2YXIgdD1yKCJxdWVyeSIpO2lmKHQpe3ZhciBuPXIoImVuZHBvaW50Iil8fHRoaXMuc3RhdGUuZW5kcG9pbnQ7dGhpcy5wcm9wcy5pbmplY3RUYWJzKFt7cXVlcnk6dCxlbmRwb2ludDpufV0pfWVsc2V7dmFyIGk9cigidGFicyIpO2lmKGkpdHJ5e3ZhciBvPUpTT04ucGFyc2UoaSk7dGhpcy5wcm9wcy5pbmplY3RUYWJzKG8pfWNhdGNoKGUpe319fXRoaXMucHJvcHMuc2NoZW1hJiYoInN0cmluZyI9PT10eXBlb2YgdGhpcy5wcm9wcy5zY2hlbWE/dGhpcy5zZXRTdGF0ZSh7c2NoZW1hOkMuYnVpbGRTY2hlbWEodGhpcy5wcm9wcy5zY2hlbWEpfSk6dGhpcy5zZXRTdGF0ZSh7c2NoZW1hOkMuYnVpbGRDbGllbnRTY2hlbWEodGhpcy5wcm9wcy5zY2hlbWEpfSkpfSxuLnByb3RvdHlwZS5zZXRJbml0aWFsV29ya3NwYWNlPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPXRoaXMucHJvcHMpLGUuY29uZmlnKXt2YXIgdD10aGlzLmdldEluaXRpYWxBY3RpdmVFbnYoZS5jb25maWcpLG49eS5nZXRBY3RpdmVFbmRwb2ludHMoZS5jb25maWcsdC5hY3RpdmVFbnYsdC5wcm9qZWN0TmFtZSkscj1uLmVuZHBvaW50LGk9bi5zdWJzY3JpcHRpb25FbmRwb2ludHx8dGhpcy5ub3JtYWxpemVTdWJzY3JpcHRpb25VcmwocixuLnN1YnNjcmlwdGlvbkVuZHBvaW50KSxvPW4uaGVhZGVyczt0aGlzLnNldFN0YXRlKHtlbmRwb2ludDpyLHN1YnNjcmlwdGlvbkVuZHBvaW50OmksaGVhZGVyczpvLGFjdGl2ZUVudjp0LmFjdGl2ZUVudixhY3RpdmVQcm9qZWN0TmFtZTp0LnByb2plY3ROYW1lfSl9fSxuLnByb3RvdHlwZS5yZW1vdmVQbGF5Z3JvdW5kSW5DbGFzcz1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290Iik7ZSYmZS5jbGFzc0xpc3QucmVtb3ZlKCJwbGF5Z3JvdW5kSW4iKX0sbi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zZXRUaXRsZT9sLmNyZWF0ZUVsZW1lbnQoZi5IZWxtZXQsbnVsbCxsLmNyZWF0ZUVsZW1lbnQoInRpdGxlIixudWxsLHRoaXMuZ2V0VGl0bGUoKSkpOm51bGwsdD10aGlzLnByb3BzLmhlYWRlcnN8fHt9LG49dGhpcy5zdGF0ZS5oZWFkZXJzfHx7fSxyPXMoe30sdCxuKSxpPXRoaXMucHJvcHMudGhlbWU7cmV0dXJuIGwuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGUsbC5jcmVhdGVFbGVtZW50KG0uVGhlbWVQcm92aWRlcix7dGhlbWU6cyh7fSxtLnRoZW1lLHttb2RlOmksY29sb3VyczoiZGFyayI9PT1pP2cuZGFya0NvbG91cnM6Zy5saWdodENvbG91cnMsZWRpdG9yQ29sb3VyczpzKHt9LCJkYXJrIj09PWk/Zy5kYXJrRWRpdG9yQ29sb3VyczpnLmxpZ2h0RWRpdG9yQ29sb3Vycyx0aGlzLnByb3BzLmNvZGVUaGVtZSksc2V0dGluZ3M6dGhpcy5wcm9wcy5zZXR0aW5nc30pfSxsLmNyZWF0ZUVsZW1lbnQoQSxudWxsLHRoaXMucHJvcHMuY29uZmlnJiZ0aGlzLnN0YXRlLmFjdGl2ZUVudiYmbC5jcmVhdGVFbGVtZW50KGguZGVmYXVsdCx7Y29uZmlnOnRoaXMucHJvcHMuY29uZmlnLGZvbGRlck5hbWU6dGhpcy5wcm9wcy5mb2xkZXJOYW1lfHwiR3JhcGhRTCBBcHAiLHRoZW1lOmksYWN0aXZlRW52OnRoaXMuc3RhdGUuYWN0aXZlRW52LG9uU2VsZWN0RW52OnRoaXMuaGFuZGxlU2VsZWN0RW52LG9uTmV3V29ya3NwYWNlOnRoaXMucHJvcHMub25OZXdXb3Jrc3BhY2Usc2hvd05ld1dvcmtzcGFjZTpCb29sZWFuKHRoaXMucHJvcHMuc2hvd05ld1dvcmtzcGFjZSksaXNFbGVjdHJvbjpCb29sZWFuKHRoaXMucHJvcHMuaXNFbGVjdHJvbiksYWN0aXZlUHJvamVjdE5hbWU6dGhpcy5zdGF0ZS5hY3RpdmVQcm9qZWN0TmFtZSxjb25maWdQYXRoOnRoaXMucHJvcHMuY29uZmlnUGF0aH0pLGwuY3JlYXRlRWxlbWVudChwLmRlZmF1bHQse2VuZHBvaW50OnRoaXMuc3RhdGUuZW5kcG9pbnQsc2hhcmVFbmFibGVkOnRoaXMucHJvcHMuc2hhcmVFbmFibGVkLHN1YnNjcmlwdGlvbkVuZHBvaW50OnRoaXMuc3RhdGUuc3Vic2NyaXB0aW9uRW5kcG9pbnQsc2hhcmVVcmw6dGhpcy5zdGF0ZS5zaGFyZVVybCxvbkNoYW5nZUVuZHBvaW50OnRoaXMuaGFuZGxlQ2hhbmdlRW5kcG9pbnQsb25DaGFuZ2VTdWJzY3JpcHRpb25zRW5kcG9pbnQ6dGhpcy5oYW5kbGVDaGFuZ2VTdWJzY3JpcHRpb25zRW5kcG9pbnQsYWRtaW5BdXRoVG9rZW46dGhpcy5zdGF0ZS5wbGF0Zm9ybVRva2VuLGdldFJlZjp0aGlzLmdldFBsYXlncm91bmRSZWYsY29uZmlnOnRoaXMucHJvcHMuY29uZmlnLGNvbmZpZ1N0cmluZzp0aGlzLnN0YXRlLmNvbmZpZ1N0cmluZyxjb25maWdJc1lhbWw6dGhpcy5zdGF0ZS5jb25maWdJc1lhbWwsY2FuU2F2ZUNvbmZpZzpCb29sZWFuKHRoaXMucHJvcHMuY2FuU2F2ZUNvbmZpZyksb25DaGFuZ2VDb25maWc6dGhpcy5oYW5kbGVDaGFuZ2VDb25maWcsb25TYXZlQ29uZmlnOnRoaXMuaGFuZGxlU2F2ZUNvbmZpZyxvblVwZGF0ZVNlc3Npb25Db3VudDp0aGlzLmhhbmRsZVVwZGF0ZVNlc3Npb25Db3VudCxmaXhlZEVuZHBvaW50czpCb29sZWFuKHRoaXMuc3RhdGUuY29uZmlnU3RyaW5nKSxmaXhlZEVuZHBvaW50OnRoaXMucHJvcHMuZml4ZWRFbmRwb2ludCxoZWFkZXJzOnIsY29uZmlnUGF0aDp0aGlzLnByb3BzLmNvbmZpZ1BhdGgsd29ya3NwYWNlTmFtZTp0aGlzLnByb3BzLndvcmtzcGFjZU5hbWV8fHRoaXMuc3RhdGUuYWN0aXZlUHJvamVjdE5hbWUsY3JlYXRlQXBvbGxvTGluazp0aGlzLnByb3BzLmNyZWF0ZUFwb2xsb0xpbmssc2NoZW1hOnRoaXMuc3RhdGUuc2NoZW1hfSkpKSl9LG4ucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7aWYodGhpcy5zdGF0ZS5wbGF0Zm9ybVRva2VufHx0aGlzLnN0YXRlLmVuZHBvaW50LmluY2x1ZGVzKCJhcGkuZ3JhcGguY29vbCIpKXt2YXIgZT10aGlzLmdldFByb2plY3RJZCh0aGlzLnN0YXRlLmVuZHBvaW50KTtyZXR1cm4odGhpcy5zdGF0ZS5lbmRwb2ludC5pbmNsdWRlcygiYXBpLmdyYXBoLmNvb2wiKT8ic2hhcmVkIjoibG9jYWwiKSsiLyIrZSsiIC0gUGxheWdyb3VuZCJ9cmV0dXJuIlBsYXlncm91bmQgLSAiK3RoaXMuc3RhdGUuZW5kcG9pbnR9LG4ucHJvdG90eXBlLnVwZGF0ZVN1YnNjcmlwdGlvbnNVcmw9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZSx0LG49dGhpcztyZXR1cm4gYyh0aGlzLGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGU9dGhpcy5nZXRTdWJzY3JpcHRpb25zVXJsQ2FuZGlkYXRlZCh0aGlzLnN0YXRlLmVuZHBvaW50KSxbNCxpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG4ud3NFbmRwb2ludFZhbGlkKGUpfSldO2Nhc2UgMTpyZXR1cm4gdD1yLnNlbnQoKSx0JiZ0aGlzLnNldFN0YXRlKHtzdWJzY3JpcHRpb25FbmRwb2ludDp0fSksWzJdfX0pfSl9LG4ucHJvdG90eXBlLmdldFN1YnNjcmlwdGlvbnNVcmxDYW5kaWRhdGVkPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHQucHVzaChlLnJlcGxhY2UoImh0dHBzIiwid3NzIikucmVwbGFjZSgiaHR0cCIsIndzIikpLGUuaW5jbHVkZXMoImdyYXBoLmNvb2wiKSYmdC5wdXNoKCJ3c3M6Ly9zdWJzY3JpcHRpb25zLmdyYXBoLmNvb2wvdjEvIit0aGlzLmdldFByb2plY3RJZChlKSksZS5pbmNsdWRlcygiL3NpbXBsZS92MS8iKSl7dmFyIG49ZS5tYXRjaCgvaHR0cHM/OlwvXC8oLio/KVwvLyk7dC5wdXNoKCJ3czovLyIrblsxXSsiL3N1YnNjcmlwdGlvbnMvdjEvIit0aGlzLmdldFByb2plY3RJZChlKSl9cmV0dXJuIHR9LG4ucHJvdG90eXBlLndzRW5kcG9pbnRWYWxpZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49bmV3IFdlYlNvY2tldChlLCJncmFwaHFsLXdzIik7bi5hZGRFdmVudExpc3RlbmVyKCJvcGVuIixmdW5jdGlvbihlKXtuLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3R5cGU6ImNvbm5lY3Rpb25faW5pdCJ9KSl9KSxuLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGUpeyJjb25uZWN0aW9uX2FjayI9PT1KU09OLnBhcnNlKGUuZGF0YSkudHlwZSYmdCghMCl9KSxuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXt0KCExKX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0KCExKX0sMWUzKX0pfSxuLnByb3RvdHlwZS5nZXRQcm9qZWN0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIi8iKS5zbGljZSgtMSlbMF19LG59KGwuQ29tcG9uZW50KSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RoZW1lOnQudGhlbWV8fGIuZ2V0VGhlbWUoZSx0LnNldHRpbmdzKSxzZXR0aW5nczpiLmdldFNldHRpbmdzKGUpfX07dC5kZWZhdWx0PXYuY29ubmVjdChELHtpbmplY3RUYWJzOnguaW5qZWN0VGFic30pKEUpO3ZhciB3LFMsaz1tLmtleWZyYW1lcyh3fHwodz1hKFsiXG4gIGZyb20geyBcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgfVxuICB0byB7IFxuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG4iXSxbIlxuICBmcm9tIHsgXG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIH1cbiAgdG8geyBcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxuIl0pKSksQT1tLnN0eWxlZC5kaXYoU3x8KFM9YShbIlxuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICBhbmltYXRpb246ICIsIiAwLjVzIGVhc2Utb3V0IGZvcndhcmRzIDAuMnM7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICBhbmltYXRpb246ICIsIiAwLjVzIGVhc2Utb3V0IGZvcndhcmRzIDAuMnM7XG4iXSkpLGspfSkuY2FsbCh0LG4oMTEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0sbz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKShmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e3Uoci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHUoZSl7ZS5kb25lP2koZS52YWx1ZSk6bmV3IG4oZnVuY3Rpb24odCl7dChlLnZhbHVlKX0pLnRoZW4oYSxzKX11KChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KX0sYT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByKFtlLHRdKX19ZnVuY3Rpb24gcihuKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3U7KXRyeXtpZihpPTEsbyYmKGE9MiZuWzBdP28ucmV0dXJuOm5bMF0/by50aHJvd3x8KChhPW8ucmV0dXJuKSYmYS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoYT1hLmNhbGwobyxuWzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gobz0wLGEmJihuPVsyJm5bMF0sYS52YWx1ZV0pLG5bMF0pe2Nhc2UgMDpjYXNlIDE6YT1uO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdS5sYWJlbCsrLHt2YWx1ZTpuWzFdLGRvbmU6ITF9O2Nhc2UgNTp1LmxhYmVsKyssbz1uWzFdLG49WzBdO2NvbnRpbnVlO2Nhc2UgNzpuPXUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9dS50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKDY9PT1uWzBdfHwyPT09blswXSkpe3U9MDtjb250aW51ZX1pZigzPT09blswXSYmKCFhfHxuWzFdPmFbMF0mJm5bMV08YVszXSkpe3UubGFiZWw9blsxXTticmVha31pZig2PT09blswXSYmdS5sYWJlbDxhWzFdKXt1LmxhYmVsPWFbMV0sYT1uO2JyZWFrfWlmKGEmJnUubGFiZWw8YVsyXSl7dS5sYWJlbD1hWzJdLHUub3BzLnB1c2gobik7YnJlYWt9YVsyXSYmdS5vcHMucG9wKCksdS50cnlzLnBvcCgpO2NvbnRpbnVlfW49dC5jYWxsKGUsdSl9Y2F0Y2goZSl7bj1bNixlXSxvPTB9ZmluYWxseXtpPWE9MH1pZig1Jm5bMF0pdGhyb3cgblsxXTtyZXR1cm57dmFsdWU6blswXT9uWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgaSxvLGEscyx1PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmFbMF0pdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzPXtuZXh0Om4oMCksdGhyb3c6bigxKSxyZXR1cm46bigyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihzW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHN9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1uKDApLHU9big1MzQpO3QuR3JhcGhRTEVkaXRvcj11LmRlZmF1bHQ7dmFyIGM9big3MDApLGw9big3MDMpLHA9bigxKSxmPW4oNzA4KSxkPW4oNzA5KSxoPW4oNzEyKSxtPW4oNzEzKSxnPW4oOSkseT1uKDE2KSx2PW4oNzUpLGI9bigxNTApLHg9big4KSxDPW4oMTIpLEU9big5NyksRD1uKDc3KSx3PW4oMzAxKSxTPW4oMTcpLGs9big3MTQpLEE9big3NCksXz1uKDE0NyksVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4pe3ZhciByPXQuY2FsbCh0aGlzLG4pfHx0aGlzO3JldHVybiByLmFwb2xsb0xpbmtzPXt9LHIub2JzZXJ2ZXJzPXt9LHIuZ3JhcGhpcWxDb21wb25lbnRzPVtdLHIuZ2V0U2NoZW1hPUEuZGVib3VuY2UoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXIucHJvcHMpLG8ocix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzO3JldHVybiBhKHRoaXMsZnVuY3Rpb24ocil7cmV0dXJuIGUuc2NoZW1hP1syXToodGhpcy5tb3VudGVkJiZ0aGlzLnN0YXRlLnNjaGVtYSYmIWUuaXNQb2xsaW5nU2NoZW1hJiZ0aGlzLnNldFN0YXRlKHtzY2hlbWE6dm9pZCAwfSksdD0hMCx0aGlzLmJhY2tvZmYmJnRoaXMuYmFja29mZi5zdG9wKCksdGhpcy5iYWNrb2ZmPW5ldyBrLkJhY2tvZmYoZnVuY3Rpb24oKXtyZXR1cm4gbyhuLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ/WzQsdGhpcy5zY2hlbWFHZXR0ZXIoZSldOlszLDJdO2Nhc2UgMTpyZXR1cm4gbi5zZW50KCksdD0hMSxbMyw0XTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zY2hlbWFHZXR0ZXIoKV07Y2FzZSAzOm4uc2VudCgpLG4ubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KSx0aGlzLmJhY2tvZmYuc3RhcnQoKSxbMl0pfSl9KX0sNjAwLHt0cmFpbGluZzohMH0pLHIuaW5pdGlhbEluZGV4PS0xLHIubW91bnRlZD0hMSxyLmluaXRpYWxTY2hlbWFGZXRjaD0hMCxyLnNldFJlZj1mdW5jdGlvbihlLHQpe3IuZ3JhcGhpcWxDb21wb25lbnRzW2VdPXQ/dC5nZXRXcmFwcGVkSW5zdGFuY2UoKTp0fSxyLmNsb3NlVGFiPWZ1bmN0aW9uKCl7ci5wcm9wcy5jbG9zZVNlbGVjdGVkVGFiKCl9LHIubmV4dFRhYj1mdW5jdGlvbigpe3IucHJvcHMuc2VsZWN0TmV4dFRhYigpfSxyLnByZXZUYWI9ZnVuY3Rpb24oKXtyLnByb3BzLnNlbGVjdFByZXZUYWIoKX0sci5zd2l0Y2hUYWI9ZnVuY3Rpb24oZSl7ci5wcm9wcy5zZWxlY3RUYWJJbmRleChlKX0sci5oYW5kbGVTYXZlQ29uZmlnPWZ1bmN0aW9uKCl7ci5wcm9wcy5zYXZlQ29uZmlnKCksci5wcm9wcy5vblNhdmVDb25maWcoKX0sci5oYW5kbGVTYXZlU2V0dGluZ3M9ZnVuY3Rpb24oKXtyLnByb3BzLnNhdmVTZXR0aW5ncygpLHIucHJvcHMub25TYXZlU2V0dGluZ3MoKX0sci5jcmVhdGVTZXNzaW9uPWZ1bmN0aW9uKCl7ci5wcm9wcy5uZXdTZXNzaW9uKHIucHJvcHMuZW5kcG9pbnQsci5wcm9wcy5zZXR0aW5nc1siZWRpdG9yLnJldXNlSGVhZGVycyJdKX0sci5zdGF0ZT17c2NoZW1hOm4uc2NoZW1hfSxlLnA9ciwiZnVuY3Rpb24iPT09dHlwZW9mIHIucHJvcHMuZ2V0UmVmJiZyLnByb3BzLmdldFJlZihyKSxELnNldExpbmtDcmVhdG9yKG4uY3JlYXRlQXBvbGxvTGluayksci5nZXRTY2hlbWEoKSxELnNldFN1YnNjcmlwdGlvbkVuZHBvaW50KG4uc3Vic2NyaXB0aW9uRW5kcG9pbnQpLHJ9cmV0dXJuIHIobix0KSxuLnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmluaXRTdGF0ZSh3LmdldFdvcmtzcGFjZUlkKHRoaXMucHJvcHMpLHRoaXMucHJvcHMuZW5kcG9pbnQpLHRoaXMucHJvcHMuc2V0Q29uZmlnU3RyaW5nKHRoaXMucHJvcHMuY29uZmlnU3RyaW5nKSx0aGlzLnByb3BzLmluamVjdEhlYWRlcnModGhpcy5wcm9wcy5oZWFkZXJzLHRoaXMucHJvcHMuZW5kcG9pbnQpfSxuLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEluZGV4Pi0xJiZ0aGlzLnNldFN0YXRlKHtzZWxlY3RlZFNlc3Npb25JbmRleDp0aGlzLmluaXRpYWxJbmRleH0pLHRoaXMubW91bnRlZD0hMH0sbi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucHJvcHMuY3JlYXRlQXBvbGxvTGluayE9PWUuY3JlYXRlQXBvbGxvTGluayYmRC5zZXRMaW5rQ3JlYXRvcihlLmNyZWF0ZUFwb2xsb0xpbmspLGUuaGVhZGVycz09PXRoaXMucHJvcHMuaGVhZGVycyYmZS5lbmRwb2ludD09PXRoaXMucHJvcHMuZW5kcG9pbnQmJmUud29ya3NwYWNlTmFtZT09PXRoaXMucHJvcHMud29ya3NwYWNlTmFtZSYmZS5zZXNzaW9uSGVhZGVycz09PXRoaXMucHJvcHMuc2Vzc2lvbkhlYWRlcnMmJmUuc2Vzc2lvbkVuZHBvaW50PT09dGhpcy5wcm9wcy5zZXNzaW9uRW5kcG9pbnR8fHRoaXMuZ2V0U2NoZW1hKGUpLHRoaXMucHJvcHMuaXNSZWxvYWRpbmdTY2hlbWEmJiFlLmlzUmVsb2FkaW5nU2NoZW1hJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5nZXRTY2hlbWEoZSl9KSx0aGlzLnByb3BzLmVuZHBvaW50PT09ZS5lbmRwb2ludCYmdGhpcy5wcm9wcy5jb25maWdQYXRoPT09ZS5jb25maWdQYXRoJiZlLndvcmtzcGFjZU5hbWU9PT10aGlzLnByb3BzLndvcmtzcGFjZU5hbWV8fHRoaXMucHJvcHMuaW5pdFN0YXRlKHcuZ2V0V29ya3NwYWNlSWQoZSksZS5lbmRwb2ludCksdGhpcy5wcm9wcy5zdWJzY3JpcHRpb25FbmRwb2ludCE9PWUuc3Vic2NyaXB0aW9uRW5kcG9pbnQmJkQuc2V0U3Vic2NyaXB0aW9uRW5kcG9pbnQoZS5zdWJzY3JpcHRpb25FbmRwb2ludCksZS5oZWFkZXJzIT09dGhpcy5wcm9wcy5oZWFkZXJzJiZ0aGlzLnByb3BzLmluamVjdEhlYWRlcnMoZS5oZWFkZXJzLGUuZW5kcG9pbnQpLGUuY29uZmlnU3RyaW5nIT09dGhpcy5wcm9wcy5jb25maWdTdHJpbmcmJnRoaXMucHJvcHMuc2V0Q29uZmlnU3RyaW5nKGUuY29uZmlnU3RyaW5nKSxlLnNjaGVtYSE9PXRoaXMucHJvcHMuc2NoZW1hJiZ0aGlzLnNldFN0YXRlKHtzY2hlbWE6ZS5zY2hlbWF9KX0sbi5wcm90b3R5cGUuc2NoZW1hR2V0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0LG4scixpLG8scyx1PXRoaXM7cmV0dXJuIGEodGhpcyxmdW5jdGlvbihhKXtzd2l0Y2goYS5sYWJlbCl7Y2FzZSAwOnQ9dGhpcy5wcm9wc3x8ZSxuPXQuc2Vzc2lvbkVuZHBvaW50fHx0LmVuZHBvaW50LHI9dGhpcy5zdGF0ZS5zY2hlbWEsYS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gYS50cnlzLnB1c2goWzEsMywsNF0pLGk9e2VuZHBvaW50Om4saGVhZGVyczp0LnNlc3Npb25IZWFkZXJzJiZ0LnNlc3Npb25IZWFkZXJzLmxlbmd0aD4wP3Quc2Vzc2lvbkhlYWRlcnM6SlNPTi5zdHJpbmdpZnkodC5oZWFkZXJzKSxjcmVkZW50aWFsczp0LnNldHRpbmdzWyJyZXF1ZXN0LmNyZWRlbnRpYWxzIl19LFs0LEQuc2NoZW1hRmV0Y2hlci5mZXRjaChpKV07Y2FzZSAyOnJldHVybiBvPWEuc2VudCgpLEQuc2NoZW1hRmV0Y2hlci5zdWJzY3JpYmUoaSxmdW5jdGlvbihlKXtpLmVuZHBvaW50IT09dS5wcm9wcy5lbmRwb2ludCYmaS5lbmRwb2ludCE9PXUucHJvcHMuc2Vzc2lvbkVuZHBvaW50fHx1LnVwZGF0ZVNjaGVtYShyLGUsdCl9KSxvJiYodGhpcy51cGRhdGVTY2hlbWEocixvLnNjaGVtYSx0KSx0aGlzLmluaXRpYWxTY2hlbWFGZXRjaCYmKHRoaXMucHJvcHMuc2NoZW1hRmV0Y2hpbmdTdWNjZXNzKGkuZW5kcG9pbnQsby50cmFjaW5nU3VwcG9ydGVkLHQuaXNQb2xsaW5nU2NoZW1hKSx0aGlzLmluaXRpYWxTY2hlbWFGZXRjaD0hMSksdGhpcy5iYWNrb2ZmLnN0b3AoKSksWzMsNF07Y2FzZSAzOnJldHVybiBzPWEuc2VudCgpLGNvbnNvbGUuZXJyb3IocyksdGhpcy5wcm9wcy5zY2hlbWFGZXRjaGluZ0Vycm9yKG4scy5tZXNzYWdlKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPW0udmVyc2lvbjtyZXR1cm4gd2luZG93LnZlcnNpb249ZSxzLmNyZWF0ZUVsZW1lbnQoTCx7Y2xhc3NOYW1lOiJwbGF5Z3JvdW5kIn0scy5jcmVhdGVFbGVtZW50KGMuZGVmYXVsdCx7b25OZXdTZXNzaW9uOnRoaXMuY3JlYXRlU2Vzc2lvbixpc0FwcDp0aGlzLnByb3BzLmlzQXBwfSkscy5jcmVhdGVFbGVtZW50KFAsbnVsbCxzLmNyZWF0ZUVsZW1lbnQoTSx7Y2xhc3NOYW1lOiJncmFwaGlxbC13cmFwcGVyIGFjdGl2ZSJ9LHRoaXMucHJvcHMuaXNDb25maWdUYWI/cy5jcmVhdGVFbGVtZW50KGQuR3JhcGhRTENvbmZpZ0VkaXRvcix7b25TYXZlOnRoaXMuaGFuZGxlU2F2ZUNvbmZpZyxpc1lhbWw6dGhpcy5wcm9wcy5jb25maWdJc1lhbWwsaXNDb25maWc6ITAscmVhZE9ubHk6IXRoaXMucHJvcHMuY2FuU2F2ZUNvbmZpZ30pOnRoaXMucHJvcHMuaXNTZXR0aW5nc1RhYj9zLmNyZWF0ZUVsZW1lbnQoZC5QbGF5Z3JvdW5kU2V0dGluZ3NFZGl0b3Ise29uU2F2ZTp0aGlzLmhhbmRsZVNhdmVTZXR0aW5nc30pOnRoaXMucHJvcHMuaXNGaWxlJiZ0aGlzLnByb3BzLmZpbGU/cy5jcmVhdGVFbGVtZW50KGguZGVmYXVsdCxudWxsKTpzLmNyZWF0ZUVsZW1lbnQodS5kZWZhdWx0LHtzaGFyZUVuYWJsZWQ6dGhpcy5wcm9wcy5zaGFyZUVuYWJsZWQsZml4ZWRFbmRwb2ludDp0aGlzLnByb3BzLmZpeGVkRW5kcG9pbnQsc2NoZW1hOnRoaXMuc3RhdGUuc2NoZW1hfSkpKSxzLmNyZWF0ZUVsZW1lbnQoZi5kZWZhdWx0LG51bGwpLHRoaXMucHJvcHMuaGlzdG9yeU9wZW4mJnRoaXMucmVuZGVySGlzdG9yeVBvcHVwKCkpfSxuLnByb3RvdHlwZS5yZW5kZXJIaXN0b3J5UG9wdXA9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jcmVhdGVFbGVtZW50KGwuZGVmYXVsdCxudWxsKX0sbi5wcm90b3R5cGUudXBkYXRlU2NoZW1hPWZ1bmN0aW9uKGUsdCxuKXtpZihlIT09dCl7dmFyIHI9ZT9fLmNhY2hlZFByaW50U2NoZW1hKGUpOm51bGw7Xy5jYWNoZWRQcmludFNjaGVtYSh0KT09PXImJm4uaXNQb2xsaW5nU2NoZW1hfHx0aGlzLnNldFN0YXRlKHtzY2hlbWE6dH0pfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJodHRwQXBpUHJlZml4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuZW5kcG9pbnQubWF0Y2goLyhodHRwcz86XC9cLy4qPylcLz8vKVsxXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxuLmRlZmF1bHRQcm9wcz17c2hhcmVFbmFibGVkOiExfSxufShzLlB1cmVDb21wb25lbnQpO3QuUGxheWdyb3VuZD1UO3ZhciBPPXguY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHtpc0NvbmZpZ1RhYjpDLmdldElzQ29uZmlnVGFiLGlzU2V0dGluZ3NUYWI6Qy5nZXRJc1NldHRpbmdzVGFiLGlzRmlsZTpDLmdldElzRmlsZSxoaXN0b3J5T3BlbjpFLmdldEhpc3RvcnlPcGVuLGZpbGU6Qy5nZXRGaWxlLHNlc3Npb25IZWFkZXJzOkMuZ2V0SGVhZGVycyxzZXR0aW5nczpTLmdldFNldHRpbmdzLHNldHRpbmdzU3RyaW5nOlMuZ2V0U2V0dGluZ3NTdHJpbmcsaXNSZWxvYWRpbmdTY2hlbWE6Qy5nZXRJc1JlbG9hZGluZ1NjaGVtYSxpc1BvbGxpbmdTY2hlbWE6Qy5nZXRJc1BvbGxpbmdTY2hlbWEsc2Vzc2lvbkVuZHBvaW50OkMuZ2V0RW5kcG9pbnR9KTt0LmRlZmF1bHQ9Zy5jb25uZWN0KE8se3NlbGVjdFRhYkluZGV4Onkuc2VsZWN0VGFiSW5kZXgsc2VsZWN0TmV4dFRhYjp5LnNlbGVjdE5leHRUYWIsc2VsZWN0UHJldlRhYjp5LnNlbGVjdFByZXZUYWIsbmV3U2Vzc2lvbjp5Lm5ld1Nlc3Npb24sY2xvc2VTZWxlY3RlZFRhYjp5LmNsb3NlU2VsZWN0ZWRUYWIsaW5pdFN0YXRlOmIuaW5pdFN0YXRlLHNhdmVTZXR0aW5nczp5LnNhdmVTZXR0aW5ncyxzYXZlQ29uZmlnOnkuc2F2ZUNvbmZpZyxzZXRUcmFjaW5nU3VwcG9ydGVkOnkuc2V0VHJhY2luZ1N1cHBvcnRlZCxpbmplY3RIZWFkZXJzOnkuaW5qZWN0SGVhZGVycyxzZXRDb25maWdTdHJpbmc6di5zZXRDb25maWdTdHJpbmcsc2NoZW1hRmV0Y2hpbmdFcnJvcjp5LnNjaGVtYUZldGNoaW5nRXJyb3Isc2NoZW1hRmV0Y2hpbmdTdWNjZXNzOnkuc2NoZW1hRmV0Y2hpbmdTdWNjZXNzfSkoVCk7dmFyIEYsTixJLEw9cC5zdHlsZWQuZGl2KEZ8fChGPWkoWyJcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4ICFpbXBvcnRhbnQ7XG5cbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcblxuICBhOmFjdGl2ZSxcbiAgYTpmb2N1cyxcbiAgYnV0dG9uOmZvY3VzLFxuICBpbnB1dDpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuIl0sWyJcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4ICFpbXBvcnRhbnQ7XG5cbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcblxuICBhOmFjdGl2ZSxcbiAgYTpmb2N1cyxcbiAgYnV0dG9uOmZvY3VzLFxuICBpbnB1dDpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuIl0pKSksUD1wLnN0eWxlZC5kaXYoTnx8KE49aShbIlxuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA1N3B4KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuIl0sWyJcbiAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNTdweCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiJdKSkpLE09cC5zdHlsZWQuZGl2KEl8fChJPWkoWyJcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICYuYWN0aXZlIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB9XG4iXSxbIlxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgJi5hY3RpdmUge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cbiJdKSkpfSkuY2FsbCh0LG4oMTEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0sbz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKWZvcih2YXIgaT0wLHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtpPHIubGVuZ3RoO2krKyl0LmluZGV4T2YocltpXSk8MCYmKG5bcltpXV09ZVtyW2ldXSk7cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1uKDApLHM9bigzMCksdT1uKDcpLGM9big1MzUpLGw9bigxMzMpLHA9bigzNyksZj1uKDYxMiksZD1uKDE0MiksaD1uKDYyNSksbT1uKDE0MyksZz1uKDYyOCkseT1uKDYzMiksdj1uKDYzNCksYj1uKDI4OSkseD1uKDI5MCksQz1uKDYzNSksRT1uKDYzNiksRD1uKDY0MCksdz1uKDEpLFM9big5KSxrPW4oOCksQT1uKDEyKSxfPW4oMTYpLFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5zZXRRdWVyeVZhcmlhYmxlc1JlZj1mdW5jdGlvbih0KXtlLnF1ZXJ5VmFyaWFibGVzUmVmPXR9LGUuc2V0SHR0cEhlYWRlcnNSZWY9ZnVuY3Rpb24odCl7ZS5odHRwSGVhZGVyc1JlZj10fSxlLnNldFF1ZXJ5UmVzaXplcj1mdW5jdGlvbih0KXtlLnF1ZXJ5UmVzaXplcj1zLmZpbmRET01Ob2RlKHQpfSxlLnNldFJlc3BvbnNlUmVzaXplcj1mdW5jdGlvbih0KXtlLnJlc3BvbnNlUmVzaXplcj1zLmZpbmRET01Ob2RlKHQpfSxlLnNldEVkaXRvckJhckNvbXBvbmVudD1mdW5jdGlvbih0KXtlLmVkaXRvckJhckNvbXBvbmVudD10fSxlLnNldFF1ZXJ5RWRpdG9yQ29tcG9uZW50PWZ1bmN0aW9uKHQpe2UucXVlcnlFZGl0b3JDb21wb25lbnQ9dH0sZS5zZXRWYXJpYWJsZUVkaXRvckNvbXBvbmVudD1mdW5jdGlvbih0KXtlLnZhcmlhYmxlRWRpdG9yQ29tcG9uZW50PXR9LGUuc2V0UmVzdWx0Q29tcG9uZW50PWZ1bmN0aW9uKHQpe2UucmVzdWx0Q29tcG9uZW50PXR9LGUuc2V0RG9jRXhwbG9yZXJSZWY9ZnVuY3Rpb24odCl7dCYmKGUuZG9jRXhwbG9yZXJDb21wb25lbnQ9dC5nZXRXcmFwcGVkSW5zdGFuY2UoKSl9LGUuc2V0R3JhcGhFeHBsb3JlclJlZj1mdW5jdGlvbih0KXt0JiYoZS5ncmFwaEV4cGxvcmVyQ29tcG9uZW50PXQuZ2V0V3JhcHBlZEluc3RhbmNlKCkpfSxlLnNldFNjaGVtYUV4cGxvcmVyUmVmPWZ1bmN0aW9uKHQpe3QmJihlLnNjaGVtYUV4cGxvcmVyQ29tcG9uZW50PXQuZ2V0V3JhcHBlZEluc3RhbmNlKCkpfSxlLnNldENvbnRhaW5lckNvbXBvbmVudD1mdW5jdGlvbih0KXtlLmNvbnRhaW5lckNvbXBvbmVudD10fSxlLmhhbmRsZUNsaWNrUmVmZXJlbmNlPWZ1bmN0aW9uKHQpe2UuZG9jRXhwbG9yZXJDb21wb25lbnQmJmUuZG9jRXhwbG9yZXJDb21wb25lbnQuc2hvd0RvY0Zyb21UeXBlKHQuZmllbGR8fHQpfSxlLnJ1blF1ZXJ5QXRDdXJzb3I9ZnVuY3Rpb24oKXtpZihlLnByb3BzLnF1ZXJ5UnVubmluZylyZXR1cm4gdm9pZCBlLnByb3BzLnN0b3BRdWVyeShlLnByb3BzLnNlc3Npb25JZCk7dmFyIHQ9ZS5xdWVyeUVkaXRvckNvbXBvbmVudC5nZXRDb2RlTWlycm9yKCk7aWYodC5oYXNGb2N1cygpKXt2YXIgbj10LmdldEN1cnNvcigpLHI9dC5pbmRleEZyb21Qb3Mobik7ZS5wcm9wcy5ydW5RdWVyeUF0UG9zaXRpb24ocil9fSxlLmhhbmRsZUhpbnRJbmZvcm1hdGlvblJlbmRlcj1mdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlLm9uQ2xpY2tIaW50SW5mb3JtYXRpb24pO3ZhciBuO3QuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLG49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIixuKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixlLm9uQ2xpY2tIaW50SW5mb3JtYXRpb24pfSl9LGUuaGFuZGxlUmVzaXplU3RhcnQ9ZnVuY3Rpb24odCl7aWYoZS5kaWRDbGlja0RyYWdCYXIodCkpe3QucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmNsaWVudFgtYi5nZXRMZWZ0KHQudGFyZ2V0KSxyPWZ1bmN0aW9uKHQpe2lmKDA9PT10LmJ1dHRvbnMpcmV0dXJuIGkoKTt2YXIgcj1zLmZpbmRET01Ob2RlKGUuZWRpdG9yQmFyQ29tcG9uZW50KSxvPXQuY2xpZW50WC1iLmdldExlZnQociktbixhPXIuY2xpZW50V2lkdGgtbztlLnByb3BzLnNldEVkaXRvckZsZXgoby9hKX0saT1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsaSkscj1udWxsLGk9bnVsbH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixpKX19LGUuaGFuZGxlVHJhY2luZ1Jlc2l6ZVN0YXJ0PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgbj0hMSxyPWUucHJvcHMucmVzcG9uc2VUcmFjaW5nSGVpZ2h0LGk9dC5jbGllbnRZLWIuZ2V0VG9wKHQudGFyZ2V0KSxvPWZ1bmN0aW9uKHQpe2lmKDA9PT10LmJ1dHRvbnMpcmV0dXJuIGEoKTtuPSEwO3ZhciBvPXMuZmluZERPTU5vZGUoZS5lZGl0b3JCYXJDb21wb25lbnQpLHU9dC5jbGllbnRZLWIuZ2V0VG9wKG8pLWk7by5jbGllbnRIZWlnaHQtdTw2MD9lLnByb3BzLmNsb3NlVHJhY2luZyhyKTplLnByb3BzLm9wZW5UcmFjaW5nKHIpfSxhPWZ1bmN0aW9uKCl7bnx8ZS5wcm9wcy50b2dnbGVUcmFjaW5nKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixvKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixhKSxvPW51bGwsYT1udWxsfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLG8pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGEpfSxlLmhhbmRsZVZhcmlhYmxlUmVzaXplU3RhcnQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPSExLHI9ZS5wcm9wcy52YXJpYWJsZUVkaXRvck9wZW4saT1lLnByb3BzLnZhcmlhYmxlRWRpdG9ySGVpZ2h0LG89dC5jbGllbnRZLWIuZ2V0VG9wKHQudGFyZ2V0KTtpZighcnx8dC50YXJnZXQhPT1lLnF1ZXJ5VmFyaWFibGVzUmVmJiZ0LnRhcmdldCE9PWUuaHR0cEhlYWRlcnNSZWYpe3ZhciBhPWZ1bmN0aW9uKHQpe2lmKDA9PT10LmJ1dHRvbnMpcmV0dXJuIHUoKTtuPSEwO3ZhciByPXMuZmluZERPTU5vZGUoZS5lZGl0b3JCYXJDb21wb25lbnQpLGE9dC5jbGllbnRZLWIuZ2V0VG9wKHIpLW8sYz1yLmNsaWVudEhlaWdodC1hO2M8NjA/ZS5wcm9wcy5jbG9zZVZhcmlhYmxlcyhpKTplLnByb3BzLm9wZW5WYXJpYWJsZXMoYyl9LHU9ZnVuY3Rpb24oKXtufHxlLnByb3BzLnRvZ2dsZVZhcmlhYmxlcygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsYSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdSksYT1udWxsLHU9bnVsbH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixhKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix1KX19LGUub25DbGlja0hpbnRJbmZvcm1hdGlvbj1mdW5jdGlvbih0KXtpZigidHlwZU5hbWUiPT09dC50YXJnZXQuY2xhc3NOYW1lKXt2YXIgbj10LnRhcmdldC5pbm5lckhUTUwscj1lLnByb3BzLnNjaGVtYTtpZihyKXt2YXIgaT1uLnJlcGxhY2UoL1tcXVxbIV0vZywiIiksbz1yLmdldFR5cGUoaSk7dS5pc05hbWVkVHlwZShvKSYmZS5kb2NFeHBsb3JlckNvbXBvbmVudC5zaG93RG9jRnJvbVR5cGUobyl9fX0sZX1yZXR1cm4gcihuLHQpLG4ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5jb2RlTWlycm9yU2l6ZXI9bmV3IGYuZGVmYXVsdCxlLmc9dGhpc30sbi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHRDb21wb25lbnQmJkJvb2xlYW4odGhpcy5wcm9wcy5zdWJzY3JpcHRpb25BY3RpdmUpJiYodGhpcy5yZXN1bHRDb21wb25lbnQuc2Nyb2xsVG9wPXRoaXMucmVzdWx0Q29tcG9uZW50LnNjcm9sbEhlaWdodCl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQocC5Db250YWluZXIse3NldFJlZjp0aGlzLnNldENvbnRhaW5lckNvbXBvbmVudH0sYS5jcmVhdGVFbGVtZW50KHAuZGVmYXVsdCxudWxsLGEuY3JlYXRlRWxlbWVudChkLmRlZmF1bHQse3NoYXJlRW5hYmxlZDp0aGlzLnByb3BzLnNoYXJlRW5hYmxlZCxmaXhlZEVuZHBvaW50OnRoaXMucHJvcHMuZml4ZWRFbmRwb2ludH0pLGEuY3JlYXRlRWxlbWVudChILHtyZWY6dGhpcy5zZXRFZGl0b3JCYXJDb21wb25lbnQsb25Nb3VzZURvd246dGhpcy5oYW5kbGVSZXNpemVTdGFydH0sYS5jcmVhdGVFbGVtZW50KGllLHtmbGV4OnRoaXMucHJvcHMuZWRpdG9yRmxleH0sYS5jcmVhdGVFbGVtZW50KGwuZGVmYXVsdCx7Z2V0UmVmOnRoaXMuc2V0UXVlcnlFZGl0b3JDb21wb25lbnQsc2NoZW1hOnRoaXMucHJvcHMuc2NoZW1hLG9uSGludEluZm9ybWF0aW9uUmVuZGVyOnRoaXMuaGFuZGxlSGludEluZm9ybWF0aW9uUmVuZGVyLG9uUnVuUXVlcnk6dGhpcy5ydW5RdWVyeUF0Q3Vyc29yLG9uQ2xpY2tSZWZlcmVuY2U6dGhpcy5oYW5kbGVDbGlja1JlZmVyZW5jZX0pLGEuY3JlYXRlRWxlbWVudChaLHtpc09wZW46dGhpcy5wcm9wcy52YXJpYWJsZUVkaXRvck9wZW4saGVpZ2h0OnRoaXMucHJvcHMudmFyaWFibGVFZGl0b3JIZWlnaHR9LGEuY3JlYXRlRWxlbWVudChlZSx7aXNPcGVuOnRoaXMucHJvcHMudmFyaWFibGVFZGl0b3JPcGVuLG9uTW91c2VEb3duOnRoaXMuaGFuZGxlVmFyaWFibGVSZXNpemVTdGFydH0sYS5jcmVhdGVFbGVtZW50KHRlLHtpc09wZW46dGhpcy5wcm9wcy5xdWVyeVZhcmlhYmxlc0FjdGl2ZSxyZWY6dGhpcy5zZXRRdWVyeVZhcmlhYmxlc1JlZixvbkNsaWNrOnRoaXMucHJvcHMub3BlblF1ZXJ5VmFyaWFibGVzfSwiUXVlcnkgVmFyaWFibGVzIiksYS5jcmVhdGVFbGVtZW50KHRlLHtpc09wZW46IXRoaXMucHJvcHMucXVlcnlWYXJpYWJsZXNBY3RpdmUscmVmOnRoaXMuc2V0SHR0cEhlYWRlcnNSZWYsb25DbGljazp0aGlzLnByb3BzLmNsb3NlUXVlcnlWYXJpYWJsZXN9LCJIVFRQIEhlYWRlcnMgIisodGhpcy5wcm9wcy5oZWFkZXJzQ291bnQmJnRoaXMucHJvcHMuaGVhZGVyc0NvdW50PjA/IigiK3RoaXMucHJvcHMuaGVhZGVyc0NvdW50KyIpIjoiIikpKSx0aGlzLnByb3BzLnF1ZXJ5VmFyaWFibGVzQWN0aXZlP2EuY3JlYXRlRWxlbWVudChoLlZhcmlhYmxlRWRpdG9yQ29tcG9uZW50LHtnZXRSZWY6dGhpcy5zZXRWYXJpYWJsZUVkaXRvckNvbXBvbmVudCxvbkhpbnRJbmZvcm1hdGlvblJlbmRlcjp0aGlzLnByb3BzLnF1ZXJ5VmFyaWFibGVzQWN0aXZlP3RoaXMuaGFuZGxlSGludEluZm9ybWF0aW9uUmVuZGVyOnZvaWQgMCxvblJ1blF1ZXJ5OnRoaXMucnVuUXVlcnlBdEN1cnNvcn0pOmEuY3JlYXRlRWxlbWVudChoLkhlYWRlcnNFZGl0b3JDb21wb25lbnQse2dldFJlZjp0aGlzLnNldFZhcmlhYmxlRWRpdG9yQ29tcG9uZW50LG9uSGludEluZm9ybWF0aW9uUmVuZGVyOnRoaXMucHJvcHMucXVlcnlWYXJpYWJsZXNBY3RpdmU/dGhpcy5oYW5kbGVIaW50SW5mb3JtYXRpb25SZW5kZXI6dm9pZCAwLG9uUnVuUXVlcnk6dGhpcy5ydW5RdWVyeUF0Q3Vyc29yfSkpLGEuY3JlYXRlRWxlbWVudChLLHtyZWY6dGhpcy5zZXRRdWVyeVJlc2l6ZXJ9KSksYS5jcmVhdGVFbGVtZW50KFcsbnVsbCxhLmNyZWF0ZUVsZW1lbnQoSix7cmVmOnRoaXMuc2V0UmVzcG9uc2VSZXNpemVyfSksYS5jcmVhdGVFbGVtZW50KGMuZGVmYXVsdCxudWxsKSx0aGlzLnByb3BzLnF1ZXJ5UnVubmluZyYmMD09PXRoaXMucHJvcHMucmVzcG9uc2VzLnNpemUmJmEuY3JlYXRlRWxlbWVudChtLmRlZmF1bHQsbnVsbCksYS5jcmVhdGVFbGVtZW50KGcuZGVmYXVsdCx7c2V0UmVmOnRoaXMuc2V0UmVzdWx0Q29tcG9uZW50fSksIXRoaXMucHJvcHMucXVlcnlSdW5uaW5nJiYoIXRoaXMucHJvcHMucmVzcG9uc2VzfHwwPT09dGhpcy5wcm9wcy5yZXNwb25zZXMuc2l6ZSkmJmEuY3JlYXRlRWxlbWVudChvZSxudWxsLCJIaXQgdGhlIFBsYXkgQnV0dG9uIHRvIGdldCBhIHJlc3BvbnNlIGhlcmUiKSx0aGlzLnByb3BzLnN1YnNjcmlwdGlvbkFjdGl2ZSYmYS5jcmVhdGVFbGVtZW50KGFlLG51bGwsIkxpc3RlbmluZyBcdTIwMjYiKSxhLmNyZWF0ZUVsZW1lbnQobmUse2lzT3Blbjp0aGlzLnByb3BzLnJlc3BvbnNlVHJhY2luZ09wZW4saGVpZ2h0OnRoaXMucHJvcHMucmVzcG9uc2VUcmFjaW5nSGVpZ2h0fSxhLmNyZWF0ZUVsZW1lbnQocmUse2lzT3Blbjp0aGlzLnByb3BzLnJlc3BvbnNlVHJhY2luZ09wZW4sb25Nb3VzZURvd246dGhpcy5oYW5kbGVUcmFjaW5nUmVzaXplU3RhcnR9LGEuY3JlYXRlRWxlbWVudCh0ZSx7aXNPcGVuOiExfSwiVHJhY2luZyIpKSxhLmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LHtvcGVuOnRoaXMucHJvcHMucmVzcG9uc2VUcmFjaW5nT3Blbn0pKSkpKSx0aGlzLmNvbnRhaW5lckNvbXBvbmVudCYmYS5jcmVhdGVFbGVtZW50KEMuZGVmYXVsdCx7bWF4V2lkdGg6dGhpcy5jb250YWluZXJDb21wb25lbnQub2Zmc2V0V2lkdGgtODZ9LGEuY3JlYXRlRWxlbWVudCh4LmRlZmF1bHQse2xhYmVsOiJEb2NzIixhY3RpdmVDb2xvcjoiZ3JlZW4iLHRhYldpZHRoOiI0OXB4In0sYS5jcmVhdGVFbGVtZW50KEQuZGVmYXVsdCx7c2NoZW1hOnRoaXMucHJvcHMuc2NoZW1hLHJlZjp0aGlzLnNldERvY0V4cGxvcmVyUmVmfSkpLGEuY3JlYXRlRWxlbWVudCh4LmRlZmF1bHQse2xhYmVsOiJTY2hlbWEiLGFjdGl2ZUNvbG9yOiJibHVlIix0YWJXaWR0aDoiNjVweCJ9LGEuY3JlYXRlRWxlbWVudChFLmRlZmF1bHQse3NjaGVtYTp0aGlzLnByb3BzLnNjaGVtYSxyZWY6dGhpcy5zZXRTY2hlbWFFeHBsb3JlclJlZixzZXNzaW9uSWQ6dGhpcy5wcm9wcy5zZXNzaW9uSWR9KSkpKX0sbi5wcm90b3R5cGUuYXV0b0NvbXBsZXRlTGVhZnM9ZnVuY3Rpb24oKXt2YXIgZT12LmZpbGxMZWFmcyh0aGlzLnByb3BzLnNjaGVtYSx0aGlzLnByb3BzLnF1ZXJ5KSx0PWUuaW5zZXJ0aW9ucyxuPWUucmVzdWx0O2lmKHQmJnQubGVuZ3RoPjApe3ZhciByPXRoaXMucXVlcnlFZGl0b3JDb21wb25lbnQuZ2V0Q29kZU1pcnJvcigpO3Iub3BlcmF0aW9uKGZ1bmN0aW9uKCl7dmFyIGU9ci5nZXRDdXJzb3IoKSxpPXIuaW5kZXhGcm9tUG9zKGUpO3Iuc2V0VmFsdWUobik7dmFyIG89MDt0cnl7dmFyIGE9dC5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleCxuPWUuc3RyaW5nO3JldHVybiByLm1hcmtUZXh0KHIucG9zRnJvbUluZGV4KHQrbyksci5wb3NGcm9tSW5kZXgodCsobys9bi5sZW5ndGgpKSx7Y2xhc3NOYW1lOiJhdXRvSW5zZXJ0ZWRMZWFmIixjbGVhck9uRW50ZXI6ITAsdGl0bGU6IkF1dG9tYXRpY2FsbHkgYWRkZWQgbGVhZiBmaWVsZHMifSl9KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhcigpfSl9LDdlMyl9Y2F0Y2goZSl7fXZhciBzPWk7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXgsbj1lLnN0cmluZzt0PGkmJm4mJihzKz1uLmxlbmd0aCl9KSxyLnNldEN1cnNvcihyLnBvc0Zyb21JbmRleChzKSl9KX1yZXR1cm4gbn0sbi5wcm90b3R5cGUuZGlkQ2xpY2tEcmFnQmFyPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldD09PXRoaXMucXVlcnlSZXNpemVyfHxlLnRhcmdldD09PXRoaXMucmVzcG9uc2VSZXNpemVyfSxufShhLlB1cmVDb21wb25lbnQpLE89ay5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioe3F1ZXJ5UnVubmluZzpBLmdldFF1ZXJ5UnVubmluZyxyZXNwb25zZXM6QS5nZXRSZXNwb25zZXMsc3Vic2NyaXB0aW9uQWN0aXZlOkEuZ2V0U3Vic2NyaXB0aW9uQWN0aXZlLHZhcmlhYmxlRWRpdG9yT3BlbjpBLmdldFZhcmlhYmxlRWRpdG9yT3Blbix2YXJpYWJsZUVkaXRvckhlaWdodDpBLmdldFZhcmlhYmxlRWRpdG9ySGVpZ2h0LHJlc3BvbnNlVHJhY2luZ09wZW46QS5nZXRSZXNwb25zZVRyYWNpbmdPcGVuLHJlc3BvbnNlVHJhY2luZ0hlaWdodDpBLmdldFJlc3BvbnNlVHJhY2luZ0hlaWdodCxyZXNwb25zZUV4dGVuc2lvbnM6QS5nZXRSZXNwb25zZUV4dGVuc2lvbnMsY3VycmVudFF1ZXJ5U3RhcnRUaW1lOkEuZ2V0Q3VycmVudFF1ZXJ5U3RhcnRUaW1lLGN1cnJlbnRRdWVyeUVuZFRpbWU6QS5nZXRDdXJyZW50UXVlcnlFbmRUaW1lLHRyYWNpbmdTdXBwb3J0ZWQ6QS5nZXRUcmFjaW5nU3VwcG9ydGVkLGVkaXRvckZsZXg6QS5nZXRFZGl0b3JGbGV4LHF1ZXJ5VmFyaWFibGVzQWN0aXZlOkEuZ2V0UXVlcnlWYXJpYWJsZXNBY3RpdmUsaGVhZGVyczpBLmdldEhlYWRlcnMsb3BlcmF0aW9uczpBLmdldE9wZXJhdGlvbnMsb3BlcmF0aW9uTmFtZTpBLmdldE9wZXJhdGlvbk5hbWUsaGVhZGVyc0NvdW50OkEuZ2V0SGVhZGVyc0NvdW50LHNlc3Npb25JZDpBLmdldFNlbGVjdGVkU2Vzc2lvbklkRnJvbVJvb3R9KTt0LmRlZmF1bHQ9Uy5jb25uZWN0KE8se3VwZGF0ZVF1ZXJ5RmFjdHM6Xy51cGRhdGVRdWVyeUZhY3RzLHN0b3BRdWVyeTpfLnN0b3BRdWVyeSxydW5RdWVyeUF0UG9zaXRpb246Xy5ydW5RdWVyeUF0UG9zaXRpb24sb3BlblF1ZXJ5VmFyaWFibGVzOl8ub3BlblF1ZXJ5VmFyaWFibGVzLGNsb3NlUXVlcnlWYXJpYWJsZXM6Xy5jbG9zZVF1ZXJ5VmFyaWFibGVzLG9wZW5WYXJpYWJsZXM6Xy5vcGVuVmFyaWFibGVzLGNsb3NlVmFyaWFibGVzOl8uY2xvc2VWYXJpYWJsZXMsb3BlblRyYWNpbmc6Xy5vcGVuVHJhY2luZyxjbG9zZVRyYWNpbmc6Xy5jbG9zZVRyYWNpbmcsdG9nZ2xlVHJhY2luZzpfLnRvZ2dsZVRyYWNpbmcsc2V0RWRpdG9yRmxleDpfLnNldEVkaXRvckZsZXgsdG9nZ2xlVmFyaWFibGVzOl8udG9nZ2xlVmFyaWFibGVzLGZldGNoU2NoZW1hOl8uZmV0Y2hTY2hlbWF9LG51bGwse3dpdGhSZWY6ITB9KShUKTt2YXIgRixOLEksTCxQLE0saixSLEIsJCxVLHosRyxWLHEsSD13LnN0eWxlZC5kaXYoRnx8KEY9aShbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMTtcbiJdKSkpLFc9dy5zdHlsZWQuZGl2KE58fChOPWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBib3JkZXItbGVmdDogbm9uZTtcbiAgYmFja2dyb3VuZDogIiwiO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBib3JkZXItbGVmdDogbm9uZTtcbiAgYmFja2dyb3VuZDogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnJlc3VsdEJhY2tncm91bmR9KSxRPXcuc3R5bGVkLmRpdihJfHwoST1pKFsiXG4gIHdpZHRoOiAxNXB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBjdXJzb3I6IGNvbC1yZXNpemU7XG4iXSxbIlxuICB3aWR0aDogMTVweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xuIl0pKSksSz13LnN0eWxlZChRKShMfHwoTD1pKFsiXG4gIHJpZ2h0OiAwcHg7XG4iXSxbIlxuICByaWdodDogMHB4O1xuIl0pKSksSj13LnN0eWxlZChRKShQfHwoUD1pKFsiXG4gIGxlZnQ6IDBweDtcbiAgei1pbmRleDogMTtcbiJdLFsiXG4gIGxlZnQ6IDBweDtcbiAgei1pbmRleDogMTtcbiJdKSkpLFk9dy5zdHlsZWQoImRpdiIpKE18fChNPWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYmFja2dyb3VuZDogIzBiMTkyNDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6ICIsIjtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJhY2tncm91bmQ6ICMwYjE5MjQ7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzT3Blbj9lLmhlaWdodCsicHgiOiI0M3B4In0pLFg9dy5zdHlsZWQuZGl2KGp8fChqPWkoWyJcbiAgYmFja2dyb3VuZDogIzBiMTkyNDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcGFkZGluZzogMTRweCAxNHB4IDE1cHggMjFweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4iXSxbIlxuICBiYWNrZ3JvdW5kOiAjMGIxOTI0O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsZXR0ZXItc3BhY2luZzogMC41M3B4O1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiAxNHB4IDE0cHggMTVweCAyMXB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiJdKSkpLFo9dy5zdHlsZWQoWSkoUnx8KFI9aShbIlxuICAuQ29kZU1pcnJvciB7XG4gICAgcGFkZGluZy1sZWZ0OiA0cHg7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDRweCk7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4gIC5Db2RlTWlycm9yLWxpbmVzIHtcbiAgICBwYWRkaW5nOiAxMHB4IDAgMjBweCAwO1xuICB9XG4gIC5Db2RlTWlycm9yLWxpbmVudW1iZXJzIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gIH1cbiJdLFsiXG4gIC5Db2RlTWlycm9yIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDRweDtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNHB4KTtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gIH1cbiAgLkNvZGVNaXJyb3ItbGluZXMge1xuICAgIHBhZGRpbmc6IDEwcHggMCAyMHB4IDA7XG4gIH1cbiAgLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmxlZnREcmF3ZXJCYWNrZ3JvdW5kfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmxlZnREcmF3ZXJCYWNrZ3JvdW5kfSksZWU9dy5zdHlsZWQoZnVuY3Rpb24oZSl7dmFyIHQ9KGUuaXNPcGVuLG8oZSxbImlzT3BlbiJdKSk7cmV0dXJuIGEuY3JlYXRlRWxlbWVudChYLHQpfSkoQnx8KEI9aShbIlxuICBjdXJzb3I6ICIsIjtcbiAgYmFja2dyb3VuZDogIiwiO1xuIl0sWyJcbiAgY3Vyc29yOiAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcGVuPyJyb3ctcmVzaXplIjoibi1yZXNpemUifSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmxlZnREcmF3ZXJCYWNrZ3JvdW5kfSksdGU9dy5zdHlsZWQoInNwYW4iKSgkfHwoJD1pKFsiXG4gIG1hcmdpbi1yaWdodDogMTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogIiwiO1xuICAmOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuIl0sWyJcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAiLCI7XG4gICY6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzT3Blbj9lLnRoZW1lLmVkaXRvckNvbG91cnMuZHJhd2VyVGV4dDplLnRoZW1lLmVkaXRvckNvbG91cnMuZHJhd2VyVGV4dEluYWN0aXZlfSksbmU9dy5zdHlsZWQoWSkoVXx8KFU9aShbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucmlnaHREcmF3ZXJCYWNrZ3JvdW5kfSkscmU9dy5zdHlsZWQoZnVuY3Rpb24oZSl7dmFyIHQ9KGUuaXNPcGVuLG8oZSxbImlzT3BlbiJdKSk7cmV0dXJuIGEuY3JlYXRlRWxlbWVudChYLHQpfSkoenx8KHo9aShbIlxuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBjdXJzb3I6ICIsIjtcbiAgY29sb3I6ICIsIjtcbiJdLFsiXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGN1cnNvcjogIiwiO1xuICBjb2xvcjogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnJpZ2h0RHJhd2VyQmFja2dyb3VuZH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcGVuPyJzLXJlc2l6ZSI6Im4tcmVzaXplIn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5kcmF3ZXJUZXh0SW5hY3RpdmV9KSxpZT13LnN0eWxlZCgiZGl2IikoR3x8KEc9aShbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6ICIsIiAxIDAlO1xuICBib3JkZXItdG9wOiA4cHggc29saWQgIiwiO1xuIl0sWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAiLCIgMSAwJTtcbiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmxleH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5yZXN1bHRCYWNrZ3JvdW5kfSksb2U9dy5zdHlsZWQuZGl2KFZ8fChWPWkoWyJcbiAgd2lkdGg6IDIzNXB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBjb2xvcjogIiwiO1xuICBmb250LXNpemU6ICIsIjtcbiAgZm9udC1mYW1pbHk6ICdTb3VyY2UgQ29kZSBQcm8nLCAnQ29uc29sYXMnLCAnSW5jb25zb2xhdGEnLCAnRHJvaWQgU2FucyBNb25vJyxcbiAgICAnTW9uYWNvJywgbW9ub3NwYWNlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGxldHRlci1zcGFjaW5nOiAwLjZweDtcbiJdLFsiXG4gIHdpZHRoOiAyMzVweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgY29sb3I6ICIsIjtcbiAgZm9udC1zaXplOiAiLCI7XG4gIGZvbnQtZmFtaWx5OiAnU291cmNlIENvZGUgUHJvJywgJ0NvbnNvbGFzJywgJ0luY29uc29sYXRhJywgJ0Ryb2lkIFNhbnMgTW9ubycsXG4gICAgJ01vbmFjbycsIG1vbm9zcGFjZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBsZXR0ZXItc3BhY2luZzogMC42cHg7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMudGV4dEluYWN0aXZlfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbDE2fSksYWU9dy5zdHlsZWQuZGl2KHF8fChxPWkoWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGNvbG9yOiAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgZm9udC1zaXplOiAiLCI7XG4gIGZvbnQtZmFtaWx5OiAiLCI7XG4gIGxldHRlci1zcGFjaW5nOiAwLjZweDtcbiAgcGFkZGluZy1sZWZ0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNjBweDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBjb2xvcjogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGZvbnQtc2l6ZTogIiwiO1xuICBmb250LWZhbWlseTogIiwiO1xuICBsZXR0ZXItc3BhY2luZzogMC42cHg7XG4gIHBhZGRpbmctbGVmdDogMjRweDtcbiAgcGFkZGluZy1ib3R0b206IDYwcHg7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMudGV4dH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5yZXN1bHRCYWNrZ3JvdW5kfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbDE2fSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zZXR0aW5nc1siZWRpdG9yLmZvbnRGYW1pbHkiXX0pfSkuY2FsbCh0LG4oMTEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oNTM2KSxzPW4oMSksdT1uKDkpLGM9bigxNiksbD1uKDgpLHA9bigxMiksZj1uKDI2MCksZD0hMCxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIG4uaGFuZGxlTW91c2VPdmVyPWZ1bmN0aW9uKGUpe24uc2V0U3RhdGUoe2hpZ2hsaWdodDplfSl9LG4uaGFuZGxlTW91c2VPdXQ9ZnVuY3Rpb24oKXtuLnNldFN0YXRlKHtoaWdobGlnaHQ6bnVsbH0pfSxuLmhhbmRsZU1vdXNlVXA9ZnVuY3Rpb24oZSl7bi5vbk9wdGlvblNlbGVjdGVkKGUpfSxuLm9uQ2xpY2s9ZnVuY3Rpb24oKXtuLnByb3BzLnF1ZXJ5UnVubmluZz9uLnByb3BzLnN0b3BRdWVyeShuLnByb3BzLnNlc3Npb25JZCk6bi5wcm9wcy5ydW5RdWVyeSgpfSxuLm9uT3B0aW9uU2VsZWN0ZWQ9ZnVuY3Rpb24oZSl7bi5zZXRTdGF0ZSh7b3B0aW9uc09wZW46ITF9KSxlJiZuLnByb3BzLnJ1blF1ZXJ5KGUubmFtZSYmZS5uYW1lLnZhbHVlKX0sbi5vbk9wdGlvbnNPcGVuPWZ1bmN0aW9uKGUpe3ZhciB0PSEwLHI9ZS50YXJnZXQ7bi5zZXRTdGF0ZSh7aGlnaGxpZ2h0Om51bGwsb3B0aW9uc09wZW46ITB9KTt2YXIgaT1mdW5jdGlvbihlKXtpZih0JiZlLnRhcmdldD09PXIpdD0hMTtlbHNlIGlmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGkpLGk9bnVsbCxyLnBhcmVudE5vZGUpe3ZhciBvPXIucGFyZW50Tm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlLnRhcmdldCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlk7b3x8bi5zZXRTdGF0ZSh7b3B0aW9uc09wZW46ITF9KSxkJiYobi5vbk9wdGlvblNlbGVjdGVkKG4ucHJvcHMub3BlcmF0aW9ucy5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWUudmFsdWU9PT1lLnRhcmdldC50ZXh0Q29udGVudH0pfHxuLnByb3BzLm9wZXJhdGlvbnNbMF0pLGQ9ITEpfX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsaSl9LG4uc3RhdGU9e29wdGlvbnNPcGVuOiExLGhpZ2hsaWdodDpudWxsfSxufXJldHVybiByKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMub3BlcmF0aW9ucyxuPXRoaXMuc3RhdGUub3B0aW9uc09wZW4scj10JiZ0Lmxlbmd0aD4xLGk9bnVsbDtpZihyJiZuKXt2YXIgcz10aGlzLnN0YXRlLmhpZ2hsaWdodDtpPW8uY3JlYXRlRWxlbWVudChFLG51bGwsby5jcmVhdGVFbGVtZW50KEQsbnVsbCx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEuZGVmYXVsdCx7b3BlcmF0aW9uOnQsb25Nb3VzZU92ZXI6ZS5oYW5kbGVNb3VzZU92ZXIsb25Nb3VzZU91dDplLmhhbmRsZU1vdXNlT3V0LG9uTW91c2VVcDplLmhhbmRsZU1vdXNlVXAsaGlnaGxpZ2h0OnMsa2V5OnQubmFtZT90Lm5hbWUudmFsdWU6IioifSl9KSkpfXZhciB1OyF0aGlzLnByb3BzLnF1ZXJ5UnVubmluZyYmcnx8KHU9dGhpcy5vbkNsaWNrKTt2YXIgYzt0aGlzLnByb3BzLnF1ZXJ5UnVubmluZ3x8IXJ8fG58fChjPXRoaXMub25PcHRpb25zT3Blbik7dmFyIGw9dGhpcy5wcm9wcy5xdWVyeVJ1bm5pbmc/by5jcmVhdGVFbGVtZW50KCJyZWN0Iix7ZmlsbDoiI0ZGRkZGRiIseDoiMTAiLHk6IjEwIix3aWR0aDoiMTMiLGhlaWdodDoiMTMiLHJ4OiIxIn0pOm8uY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik0gMTEgOSBMIDI0IDE2IEwgMTEgMjMgeiJ9KTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHgsbnVsbCxvLmNyZWF0ZUVsZW1lbnQoQyx7aXNSdW5uaW5nOnRoaXMucHJvcHMucXVlcnlSdW5uaW5nLG9uTW91c2VEb3duOmMsb25DbGljazp1LHRpdGxlOiJFeGVjdXRlIFF1ZXJ5IChDdHJsLUVudGVyKSJ9LG8uY3JlYXRlRWxlbWVudCgic3ZnIix7d2lkdGg6IjM1IixoZWlnaHQ6IjM1Iix2aWV3Qm94Oih0aGlzLnByb3BzLnF1ZXJ5UnVubmluZz80OjMpKyIuNSw0LjUsMjQsMjQifSxsKSksaSl9LHR9KG8uQ29tcG9uZW50KSxtPWwuY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHtxdWVyeVJ1bm5pbmc6cC5nZXRRdWVyeVJ1bm5pbmcsb3BlcmF0aW9uczpwLmdldE9wZXJhdGlvbnMsc2Vzc2lvbklkOnAuZ2V0U2VsZWN0ZWRTZXNzaW9uSWRGcm9tUm9vdH0pO3QuZGVmYXVsdD11LmNvbm5lY3QobSx7cnVuUXVlcnk6Yy5ydW5RdWVyeSxzdG9wUXVlcnk6Yy5zdG9wUXVlcnl9KShmLnRvSlMoaCkpO3ZhciBnLHksdixiLHg9cy5zdHlsZWQuZGl2KGd8fChnPWkoWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtNjJweDtcbiAgei1pbmRleDogNTtcbiAgdG9wOiAxNXB4O1xuICBtYXJnaW46IDAgMTRweCAwIDI4cHg7XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC02MnB4O1xuICB6LWluZGV4OiA1O1xuICB0b3A6IDE1cHg7XG4gIG1hcmdpbjogMCAxNHB4IDAgMjhweDtcbiJdKSkpLEM9cy5zdHlsZWQoImRpdiIpKHl8fCh5PWkoWyJcbiAgd2lkdGg6IDYwcHg7XG4gIGhlaWdodDogNjBweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEwMG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIGJvcmRlcjogNnB4IHNvbGlkICIsIjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gIHN2ZyB7XG4gICAgZmlsbDogIiwiO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIiwiO1xuICB9XG4iXSxbIlxuICB3aWR0aDogNjBweDtcbiAgaGVpZ2h0OiA2MHB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTAwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICIsIjtcbiAgYm9yZGVyOiA2cHggc29saWQgIiwiO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgc3ZnIHtcbiAgICBmaWxsOiAiLCI7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNSdW5uaW5nP2UudGhlbWUuZWRpdG9yQ29sb3Vycy5leGVjdXRlQnV0dG9uU3Vic2NyaXB0aW9uOmUudGhlbWUuZWRpdG9yQ29sb3Vycy5leGVjdXRlQnV0dG9ufSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmV4ZWN1dGVCdXR0b25Cb3JkZXJ9LGZ1bmN0aW9uKGUpe3JldHVybiJsaWdodCI9PT1lLnRoZW1lLm1vZGU/IndoaXRlIjoiaW5oZXJpdCJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzUnVubmluZz9lLnRoZW1lLmVkaXRvckNvbG91cnMuZXhlY3V0ZUJ1dHRvblN1YnNjcmlwdGlvbkhvdmVyOmUudGhlbWUuZWRpdG9yQ29sb3Vycy5leGVjdXRlQnV0dG9uSG92ZXJ9KSxFPXMuc3R5bGVkLmRpdih2fHwodj1pKFsiXG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwYWRkaW5nOiA4cHggMDtcbiAgbGVmdDogLTFweDtcbiAgbWFyZ2luOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNzhweDtcbiAgei1pbmRleDogMTAwO1xuXG4gICY6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY29udGVudDogJyc7XG4gICAgdG9wOiAtNHB4O1xuICAgIGxlZnQ6IDM0cHg7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgIHdpZHRoOiA4cHg7XG4gICAgaGVpZ2h0OiA4cHg7XG4gIH1cbiJdLFsiXG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwYWRkaW5nOiA4cHggMDtcbiAgbGVmdDogLTFweDtcbiAgbWFyZ2luOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNzhweDtcbiAgei1pbmRleDogMTAwO1xuXG4gICY6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY29udGVudDogJyc7XG4gICAgdG9wOiAtNHB4O1xuICAgIGxlZnQ6IDM0cHg7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgIHdpZHRoOiA4cHg7XG4gICAgaGVpZ2h0OiA4cHg7XG4gIH1cbiJdKSkpLEQ9cy5zdHlsZWQudWwoYnx8KGI9aShbIlxuICBtYXgtaGVpZ2h0OiAyNzBweDtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcblxuICBsaSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICBwYWRkaW5nOiAycHggMzBweCA0cHggMTBweDtcbiAgfVxuXG4gIGxpLnNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2IoMzksIDE3NCwgOTYpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgfVxuIl0sWyJcbiAgbWF4LWhlaWdodDogMjcwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG5cbiAgbGkge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgcGFkZGluZzogMnB4IDMwcHggNHB4IDEwcHg7XG4gIH1cblxuICBsaS5zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZDogcmdiKDM5LCAxNzQsIDk2KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gIH1cbiJdKSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMCksbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Lm9uTW91c2VPdmVyPWZ1bmN0aW9uKCl7dC5wcm9wcy5vbk1vdXNlT3Zlcih0LnByb3BzLm9wZXJhdGlvbil9LHQub25Nb3VzZVVwPWZ1bmN0aW9uKCl7dC5wcm9wcy5vbk1vdXNlVXAodC5wcm9wcy5vcGVyYXRpb24pfSx0fXJldHVybiByKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuY3JlYXRlRWxlbWVudCgibGkiLHtrZXk6dGhpcy5wcm9wcy5vcGVyYXRpb24ubmFtZT90aGlzLnByb3BzLm9wZXJhdGlvbi5uYW1lLnZhbHVlOiIqIixjbGFzc05hbWU6dGhpcy5wcm9wcy5vcGVyYXRpb249PT10aGlzLnByb3BzLmhpZ2hsaWdodD8ic2VsZWN0ZWQiOiIiLG9uTW91c2VPdmVyOnRoaXMub25Nb3VzZU92ZXIsb25Nb3VzZU91dDp0aGlzLnByb3BzLm9uTW91c2VPdXQsb25Nb3VzZVVwOnRoaXMub25Nb3VzZVVwfSx0aGlzLnByb3BzLm9wZXJhdGlvbi5uYW1lP3RoaXMucHJvcHMub3BlcmF0aW9uLm5hbWUudmFsdWU6IjxVbm5hbWVkPiIpfSx0fShpLlB1cmVDb21wb25lbnQpO3QuZGVmYXVsdD1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDUzOCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybiF5LnRlc3QodCl8fCEhdi50ZXN0KHQpfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9aC5wYXJzZShlLCEwKTtpZih0Lmhvc3RuYW1lJiYoIXQucHJvdG9jb2x8fGIuaW5kZXhPZih0LnByb3RvY29sKT49MCkpdHJ5e3QuaG9zdG5hbWU9bS50b0FTQ0lJKHQuaG9zdG5hbWUpfWNhdGNoKGUpe31yZXR1cm4gaC5lbmNvZGUoaC5mb3JtYXQodCkpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9aC5wYXJzZShlLCEwKTtpZih0Lmhvc3RuYW1lJiYoIXQucHJvdG9jb2x8fGIuaW5kZXhPZih0LnByb3RvY29sKT49MCkpdHJ5e3QuaG9zdG5hbWU9bS50b1VuaWNvZGUodC5ob3N0bmFtZSl9Y2F0Y2goZSl7fXJldHVybiBoLmRlY29kZShoLmZvcm1hdCh0KSl9ZnVuY3Rpb24gYShlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGEpKXJldHVybiBuZXcgYShlLHQpO3R8fHMuaXNTdHJpbmcoZSl8fCh0PWV8fHt9LGU9ImRlZmF1bHQiKSx0aGlzLmlubGluZT1uZXcgZix0aGlzLmJsb2NrPW5ldyBwLHRoaXMuY29yZT1uZXcgbCx0aGlzLnJlbmRlcmVyPW5ldyBjLHRoaXMubGlua2lmeT1uZXcgZCx0aGlzLnZhbGlkYXRlTGluaz1yLHRoaXMubm9ybWFsaXplTGluaz1pLHRoaXMubm9ybWFsaXplTGlua1RleHQ9byx0aGlzLnV0aWxzPXMsdGhpcy5oZWxwZXJzPXMuYXNzaWduKHt9LHUpLHRoaXMub3B0aW9ucz17fSx0aGlzLmNvbmZpZ3VyZShlKSx0JiZ0aGlzLnNldCh0KX12YXIgcz1uKDQpLHU9big1NDgpLGM9big1NTIpLGw9big1NTMpLHA9big1NjEpLGY9big1NzUpLGQ9bigyNjcpLGg9big4OCksbT1uKDI3MSksZz17ZGVmYXVsdDpuKDU4OSksemVybzpuKDU5MCksY29tbW9ubWFyazpuKDU5MSl9LHk9L14odmJzY3JpcHR8amF2YXNjcmlwdHxmaWxlfGRhdGEpOi8sdj0vXmRhdGE6aW1hZ2VcLyhnaWZ8cG5nfGpwZWd8d2VicCk7LyxiPVsiaHR0cDoiLCJodHRwczoiLCJtYWlsdG86Il07YS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUpe3JldHVybiBzLmFzc2lnbih0aGlzLm9wdGlvbnMsZSksdGhpc30sYS5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcztpZihzLmlzU3RyaW5nKGUpJiYodD1lLCEoZT1nW3RdKSkpdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBgbWFya2Rvd24taXRgIHByZXNldCAiJyt0KyciLCBjaGVjayBuYW1lJyk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBgbWFya2Rvd24taXRgIHByZXNldCwgY2FuJ3QgYmUgZW1wdHkiKTtyZXR1cm4gZS5vcHRpb25zJiZuLnNldChlLm9wdGlvbnMpLGUuY29tcG9uZW50cyYmT2JqZWN0LmtleXMoZS5jb21wb25lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuY29tcG9uZW50c1t0XS5ydWxlcyYmblt0XS5ydWxlci5lbmFibGVPbmx5KGUuY29tcG9uZW50c1t0XS5ydWxlcyksZS5jb21wb25lbnRzW3RdLnJ1bGVzMiYmblt0XS5ydWxlcjIuZW5hYmxlT25seShlLmNvbXBvbmVudHNbdF0ucnVsZXMyKX0pLHRoaXN9LGEucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksWyJjb3JlIiwiYmxvY2siLCJpbmxpbmUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe249bi5jb25jYXQodGhpc1t0XS5ydWxlci5lbmFibGUoZSwhMCkpfSx0aGlzKSxuPW4uY29uY2F0KHRoaXMuaW5saW5lLnJ1bGVyMi5lbmFibGUoZSwhMCkpO3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuLmluZGV4T2YoZSk8MH0pO2lmKHIubGVuZ3RoJiYhdCl0aHJvdyBuZXcgRXJyb3IoIk1hcmtkb3duSXQuIEZhaWxlZCB0byBlbmFibGUgdW5rbm93biBydWxlKHMpOiAiK3IpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107QXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxbImNvcmUiLCJibG9jayIsImlubGluZSJdLmZvckVhY2goZnVuY3Rpb24odCl7bj1uLmNvbmNhdCh0aGlzW3RdLnJ1bGVyLmRpc2FibGUoZSwhMCkpfSx0aGlzKSxuPW4uY29uY2F0KHRoaXMuaW5saW5lLnJ1bGVyMi5kaXNhYmxlKGUsITApKTt2YXIgcj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbi5pbmRleE9mKGUpPDB9KTtpZihyLmxlbmd0aCYmIXQpdGhyb3cgbmV3IEVycm9yKCJNYXJrZG93bkl0LiBGYWlsZWQgdG8gZGlzYWJsZSB1bmtub3duIHJ1bGUocyk6ICIrcik7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlKXt2YXIgdD1bdGhpc10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7cmV0dXJuIGUuYXBwbHkoZSx0KSx0aGlzfSxhLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciIT09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIHNob3VsZCBiZSBhIFN0cmluZyIpO3ZhciBuPW5ldyB0aGlzLmNvcmUuU3RhdGUoZSx0aGlzLHQpO3JldHVybiB0aGlzLmNvcmUucHJvY2VzcyhuKSxuLnRva2Vuc30sYS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8e30sdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5wYXJzZShlLHQpLHRoaXMub3B0aW9ucyx0KX0sYS5wcm90b3R5cGUucGFyc2VJbmxpbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgdGhpcy5jb3JlLlN0YXRlKGUsdGhpcyx0KTtyZXR1cm4gbi5pbmxpbmVNb2RlPSEwLHRoaXMuY29yZS5wcm9jZXNzKG4pLG4udG9rZW5zfSxhLnByb3RvdHlwZS5yZW5kZXJJbmxpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHx7fSx0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnBhcnNlSW5saW5lKGUsdCksdGhpcy5vcHRpb25zLHQpfSxlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG4scj1vW2VdO2lmKHIpcmV0dXJuIHI7Zm9yKHI9b1tlXT1bXSx0PTA7dDwxMjg7dCsrKW49U3RyaW5nLmZyb21DaGFyQ29kZSh0KSwvXlswLTlhLXpdJC9pLnRlc3Qobik/ci5wdXNoKG4pOnIucHVzaCgiJSIrKCIwIit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKS5zbGljZSgtMikpO2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspcltlLmNoYXJDb2RlQXQodCldPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQsbil7dmFyIG8sYSxzLHUsYyxsPSIiO2Zvcigic3RyaW5nIiE9PXR5cGVvZiB0JiYobj10LHQ9aS5kZWZhdWx0Q2hhcnMpLCJ1bmRlZmluZWQiPT09dHlwZW9mIG4mJihuPSEwKSxjPXIodCksbz0wLGE9ZS5sZW5ndGg7bzxhO28rKylpZihzPWUuY2hhckNvZGVBdChvKSxuJiYzNz09PXMmJm8rMjxhJiYvXlswLTlhLWZdezJ9JC9pLnRlc3QoZS5zbGljZShvKzEsbyszKSkpbCs9ZS5zbGljZShvLG8rMyksbys9MjtlbHNlIGlmKHM8MTI4KWwrPWNbc107ZWxzZSBpZihzPj01NTI5NiYmczw9NTczNDMpe2lmKHM+PTU1Mjk2JiZzPD01NjMxOSYmbysxPGEmJih1PWUuY2hhckNvZGVBdChvKzEpKT49NTYzMjAmJnU8PTU3MzQzKXtsKz1lbmNvZGVVUklDb21wb25lbnQoZVtvXStlW28rMV0pLG8rKztjb250aW51ZX1sKz0iJUVGJUJGJUJEIn1lbHNlIGwrPWVuY29kZVVSSUNvbXBvbmVudChlW29dKTtyZXR1cm4gbH12YXIgbz17fTtpLmRlZmF1bHRDaGFycz0iOy8/OkAmPSskLC1fLiF+KicoKSMiLGkuY29tcG9uZW50Q2hhcnM9Ii1fLiF+KicoKSIsZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuLHI9b1tlXTtpZihyKXJldHVybiByO2ZvcihyPW9bZV09W10sdD0wO3Q8MTI4O3QrKyluPVN0cmluZy5mcm9tQ2hhckNvZGUodCksci5wdXNoKG4pO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspbj1lLmNoYXJDb2RlQXQodCkscltuXT0iJSIrKCIwIituLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKS5zbGljZSgtMik7cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQpe3ZhciBuO3JldHVybiJzdHJpbmciIT09dHlwZW9mIHQmJih0PWkuZGVmYXVsdENoYXJzKSxuPXIodCksZS5yZXBsYWNlKC8oJVthLWYwLTldezJ9KSsvZ2ksZnVuY3Rpb24oZSl7dmFyIHQscixpLG8sYSxzLHUsYz0iIjtmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrPTMpaT1wYXJzZUludChlLnNsaWNlKHQrMSx0KzMpLDE2KSxpPDEyOD9jKz1uW2ldOjE5Mj09PSgyMjQmaSkmJnQrMzxyJiYxMjg9PT0oMTkyJihvPXBhcnNlSW50KGUuc2xpY2UodCs0LHQrNiksMTYpKSk/KHU9aTw8NiYxOTg0fDYzJm8sYys9dTwxMjg/Ilx1ZmZmZFx1ZmZmZCI6U3RyaW5nLmZyb21DaGFyQ29kZSh1KSx0Kz0zKToyMjQ9PT0oMjQwJmkpJiZ0KzY8ciYmKG89cGFyc2VJbnQoZS5zbGljZSh0KzQsdCs2KSwxNiksYT1wYXJzZUludChlLnNsaWNlKHQrNyx0KzkpLDE2KSwxMjg9PT0oMTkyJm8pJiYxMjg9PT0oMTkyJmEpKT8odT1pPDwxMiY2MTQ0MHxvPDw2JjQwMzJ8NjMmYSxjKz11PDIwNDh8fHU+PTU1Mjk2JiZ1PD01NzM0Mz8iXHVmZmZkXHVmZmZkXHVmZmZkIjpTdHJpbmcuZnJvbUNoYXJDb2RlKHUpLHQrPTYpOjI0MD09PSgyNDgmaSkmJnQrOTxyJiYobz1wYXJzZUludChlLnNsaWNlKHQrNCx0KzYpLDE2KSxhPXBhcnNlSW50KGUuc2xpY2UodCs3LHQrOSksMTYpLHM9cGFyc2VJbnQoZS5zbGljZSh0KzEwLHQrMTIpLDE2KSwxMjg9PT0oMTkyJm8pJiYxMjg9PT0oMTkyJmEpJiYxMjg9PT0oMTkyJnMpKT8odT1pPDwxOCYxODM1MDA4fG88PDEyJjI1ODA0OHxhPDw2JjQwMzJ8NjMmcyx1PDY1NTM2fHx1PjExMTQxMTE/Yys9Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCI6KHUtPTY1NTM2LGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHU+PjEwKSw1NjMyMCsoMTAyMyZ1KSkpLHQrPTkpOmMrPSJcdWZmZmQiO3JldHVybiBjfSl9dmFyIG89e307aS5kZWZhdWx0Q2hhcnM9IjsvPzpAJj0rJCwjIixpLmNvbXBvbmVudENoYXJzPSIiLGUuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gdCs9ZS5wcm90b2NvbHx8IiIsdCs9ZS5zbGFzaGVzPyIvLyI6IiIsdCs9ZS5hdXRoP2UuYXV0aCsiQCI6IiIsZS5ob3N0bmFtZSYmLTEhPT1lLmhvc3RuYW1lLmluZGV4T2YoIjoiKT90Kz0iWyIrZS5ob3N0bmFtZSsiXSI6dCs9ZS5ob3N0bmFtZXx8IiIsdCs9ZS5wb3J0PyI6IitlLnBvcnQ6IiIsdCs9ZS5wYXRobmFtZXx8IiIsdCs9ZS5zZWFyY2h8fCIiLHQrPWUuaGFzaHx8IiJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5wYXRobmFtZT1udWxsfWZ1bmN0aW9uIGkoZSx0KXtpZihlJiZlIGluc3RhbmNlb2YgcilyZXR1cm4gZTt2YXIgbj1uZXcgcjtyZXR1cm4gbi5wYXJzZShlLHQpLG59dmFyIG89L14oW2EtejAtOS4rLV0rOikvaSxhPS86WzAtOV0qJC8scz0vXihcL1wvPyg/IVwvKVteXD9cc10qKShcP1teXHNdKik/JC8sdT1bIjwiLCI+IiwnIicsImAiLCIgIiwiXHIiLCJcbiIsIlx0Il0sYz1bInsiLCJ9IiwifCIsIlxcIiwiXiIsImAiXS5jb25jYXQodSksbD1bIiciXS5jb25jYXQoYykscD1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KGwpLGY9WyIvIiwiPyIsIiMiXSxkPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxoPS9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxtPXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LGc9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfTtyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxhLHUsYz1lO2lmKGM9Yy50cmltKCksIXQmJjE9PT1lLnNwbGl0KCIjIikubGVuZ3RoKXt2YXIgbD1zLmV4ZWMoYyk7aWYobClyZXR1cm4gdGhpcy5wYXRobmFtZT1sWzFdLGxbMl0mJih0aGlzLnNlYXJjaD1sWzJdKSx0aGlzfXZhciB5PW8uZXhlYyhjKTtpZih5JiYoeT15WzBdLGk9eS50b0xvd2VyQ2FzZSgpLHRoaXMucHJvdG9jb2w9eSxjPWMuc3Vic3RyKHkubGVuZ3RoKSksKHR8fHl8fGMubWF0Y2goL15cL1wvW15AXC9dK0BbXkBcL10rLykpJiYoISh1PSIvLyI9PT1jLnN1YnN0cigwLDIpKXx8eSYmbVt5XXx8KGM9Yy5zdWJzdHIoMiksdGhpcy5zbGFzaGVzPSEwKSksIW1beV0mJih1fHx5JiYhZ1t5XSkpe3ZhciB2PS0xO2ZvcihuPTA7bjxmLmxlbmd0aDtuKyspLTEhPT0oYT1jLmluZGV4T2YoZltuXSkpJiYoLTE9PT12fHxhPHYpJiYodj1hKTt2YXIgYix4O2Zvcih4PS0xPT09dj9jLmxhc3RJbmRleE9mKCJAIik6Yy5sYXN0SW5kZXhPZigiQCIsdiksLTEhPT14JiYoYj1jLnNsaWNlKDAseCksYz1jLnNsaWNlKHgrMSksdGhpcy5hdXRoPWIpLHY9LTEsbj0wO248cC5sZW5ndGg7bisrKS0xIT09KGE9Yy5pbmRleE9mKHBbbl0pKSYmKC0xPT09dnx8YTx2KSYmKHY9YSk7LTE9PT12JiYodj1jLmxlbmd0aCksIjoiPT09Y1t2LTFdJiZ2LS07dmFyIEM9Yy5zbGljZSgwLHYpO2M9Yy5zbGljZSh2KSx0aGlzLnBhcnNlSG9zdChDKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBFPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIUUpe3ZhciBEPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyk7Zm9yKG49MCxyPUQubGVuZ3RoO248cjtuKyspe3ZhciB3PURbbl07aWYodyYmIXcubWF0Y2goZCkpe2Zvcih2YXIgUz0iIixrPTAsQT13Lmxlbmd0aDtrPEE7aysrKXcuY2hhckNvZGVBdChrKT4xMjc/Uys9IngiOlMrPXdba107aWYoIVMubWF0Y2goZCkpe3ZhciBfPUQuc2xpY2UoMCxuKSxUPUQuc2xpY2UobisxKSxPPXcubWF0Y2goaCk7TyYmKF8ucHVzaChPWzFdKSxULnVuc2hpZnQoT1syXSkpLFQubGVuZ3RoJiYoYz1ULmpvaW4oIi4iKStjKSx0aGlzLmhvc3RuYW1lPV8uam9pbigiLiIpO2JyZWFrfX19fXRoaXMuaG9zdG5hbWUubGVuZ3RoPjI1NSYmKHRoaXMuaG9zdG5hbWU9IiIpLEUmJih0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsdGhpcy5ob3N0bmFtZS5sZW5ndGgtMikpfXZhciBGPWMuaW5kZXhPZigiIyIpOy0xIT09RiYmKHRoaXMuaGFzaD1jLnN1YnN0cihGKSxjPWMuc2xpY2UoMCxGKSk7dmFyIE49Yy5pbmRleE9mKCI/Iik7cmV0dXJuLTEhPT1OJiYodGhpcy5zZWFyY2g9Yy5zdWJzdHIoTiksYz1jLnNsaWNlKDAsTikpLGMmJih0aGlzLnBhdGhuYW1lPWMpLGdbaV0mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iIiksdGhpc30sci5wcm90b3R5cGUucGFyc2VIb3N0PWZ1bmN0aW9uKGUpe3ZhciB0PWEuZXhlYyhlKTt0JiYodD10WzBdLCI6IiE9PXQmJih0aGlzLnBvcnQ9dC5zdWJzdHIoMSkpLGU9ZS5zdWJzdHIoMCxlLmxlbmd0aC10Lmxlbmd0aCkpLGUmJih0aGlzLmhvc3RuYW1lPWUpfSxlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LkFueT1uKDU0NCksdC5DYz1uKDU0NSksdC5DZj1uKDU0NiksdC5QPW4oMjYzKSx0Llo9big1NDcpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0vW1wwLVx1RDdGRlx1RTAwMC1cdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0vW1wwLVx4MUZceDdGLVx4OUZdL30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9L1tceEFEXHUwNjAwLVx1MDYwNVx1MDYxQ1x1MDZERFx1MDcwRlx1MDhFMlx1MTgwRVx1MjAwQi1cdTIwMEZcdTIwMkEtXHUyMDJFXHUyMDYwLVx1MjA2NFx1MjA2Ni1cdTIwNkZcdUZFRkZcdUZGRjktXHVGRkZCXXxcdUQ4MDRcdURDQkR8XHVEODJGW1x1RENBMC1cdURDQTNdfFx1RDgzNFtcdURENzMtXHVERDdBXXxcdURCNDBbXHVEQzAxXHVEQzIwLVx1REM3Rl0vfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0vWyBceEEwXHUxNjgwXHUyMDAwLVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMF0vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QucGFyc2VMaW5rTGFiZWw9big1NDkpLHQucGFyc2VMaW5rRGVzdGluYXRpb249big1NTApLHQucGFyc2VMaW5rVGl0bGU9big1NTEpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz0tMSx1PWUucG9zTWF4LGM9ZS5wb3M7Zm9yKGUucG9zPXQrMSxyPTE7ZS5wb3M8dTspe2lmKDkzPT09KG89ZS5zcmMuY2hhckNvZGVBdChlLnBvcykpJiYwPT09LS1yKXtpPSEwO2JyZWFrfWlmKGE9ZS5wb3MsZS5tZC5pbmxpbmUuc2tpcFRva2VuKGUpLDkxPT09bylpZihhPT09ZS5wb3MtMSlyKys7ZWxzZSBpZihuKXJldHVybiBlLnBvcz1jLC0xfXJldHVybiBpJiYocz1lLnBvcyksZS5wb3M9YyxzfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLmlzU3BhY2UsaT1uKDQpLnVuZXNjYXBlQWxsO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIG8sYSxzPXQsdT17b2s6ITEscG9zOjAsbGluZXM6MCxzdHI6IiJ9O2lmKDYwPT09ZS5jaGFyQ29kZUF0KHQpKXtmb3IodCsrO3Q8bjspe2lmKDEwPT09KG89ZS5jaGFyQ29kZUF0KHQpKXx8cihvKSlyZXR1cm4gdTtpZig2Mj09PW8pcmV0dXJuIHUucG9zPXQrMSx1LnN0cj1pKGUuc2xpY2UocysxLHQpKSx1Lm9rPSEwLHU7OTI9PT1vJiZ0KzE8bj90Kz0yOnQrK31yZXR1cm4gdX1mb3IoYT0wO3Q8biYmMzIhPT0obz1lLmNoYXJDb2RlQXQodCkpJiYhKG88MzJ8fDEyNz09PW8pOylpZig5Mj09PW8mJnQrMTxuKXQrPTI7ZWxzZXtpZig0MD09PW8mJmErKyw0MT09PW8pe2lmKDA9PT1hKWJyZWFrO2EtLX10Kyt9cmV0dXJuIHM9PT10P3U6MCE9PWE/dToodS5zdHI9aShlLnNsaWNlKHMsdCkpLHUubGluZXM9MCx1LnBvcz10LHUub2s9ITAsdSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCkudW5lc2NhcGVBbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxvLGE9MCxzPXQsdT17b2s6ITEscG9zOjAsbGluZXM6MCxzdHI6IiJ9O2lmKHQ+PW4pcmV0dXJuIHU7aWYoMzQhPT0obz1lLmNoYXJDb2RlQXQodCkpJiYzOSE9PW8mJjQwIT09bylyZXR1cm4gdTtmb3IodCsrLDQwPT09byYmKG89NDEpO3Q8bjspe2lmKChpPWUuY2hhckNvZGVBdCh0KSk9PT1vKXJldHVybiB1LnBvcz10KzEsdS5saW5lcz1hLHUuc3RyPXIoZS5zbGljZShzKzEsdCkpLHUub2s9ITAsdTsxMD09PWk/YSsrOjkyPT09aSYmdCsxPG4mJih0KyssMTA9PT1lLmNoYXJDb2RlQXQodCkmJmErKyksdCsrfXJldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5ydWxlcz1pKHt9LHMpfXZhciBpPW4oNCkuYXNzaWduLG89big0KS51bmVzY2FwZUFsbCxhPW4oNCkuZXNjYXBlSHRtbCxzPXt9O3MuY29kZV9pbmxpbmU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz1lW3RdO3JldHVybiI8Y29kZSIraS5yZW5kZXJBdHRycyhvKSsiPiIrYShlW3RdLmNvbnRlbnQpKyI8L2NvZGU+In0scy5jb2RlX2Jsb2NrPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89ZVt0XTtyZXR1cm4iPHByZSIraS5yZW5kZXJBdHRycyhvKSsiPjxjb2RlPiIrYShlW3RdLmNvbnRlbnQpKyI8L2NvZGU+PC9wcmU+XG4ifSxzLmZlbmNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHMsdSxjLGwscD1lW3RdLGY9cC5pbmZvP28ocC5pbmZvKS50cmltKCk6IiIsZD0iIjtyZXR1cm4gZiYmKGQ9Zi5zcGxpdCgvXHMrL2cpWzBdKSxzPW4uaGlnaGxpZ2h0P24uaGlnaGxpZ2h0KHAuY29udGVudCxkKXx8YShwLmNvbnRlbnQpOmEocC5jb250ZW50KSwwPT09cy5pbmRleE9mKCI8cHJlIik/cysiXG4iOmY/KHU9cC5hdHRySW5kZXgoImNsYXNzIiksYz1wLmF0dHJzP3AuYXR0cnMuc2xpY2UoKTpbXSx1PDA/Yy5wdXNoKFsiY2xhc3MiLG4ubGFuZ1ByZWZpeCtkXSk6Y1t1XVsxXSs9IiAiK24ubGFuZ1ByZWZpeCtkLGw9e2F0dHJzOmN9LCI8cHJlPjxjb2RlIitpLnJlbmRlckF0dHJzKGwpKyI+IitzKyI8L2NvZGU+PC9wcmU+XG4iKToiPHByZT48Y29kZSIraS5yZW5kZXJBdHRycyhwKSsiPiIrcysiPC9jb2RlPjwvcHJlPlxuIn0scy5pbWFnZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWVbdF07cmV0dXJuIG8uYXR0cnNbby5hdHRySW5kZXgoImFsdCIpXVsxXT1pLnJlbmRlcklubGluZUFzVGV4dChvLmNoaWxkcmVuLG4sciksaS5yZW5kZXJUb2tlbihlLHQsbil9LHMuaGFyZGJyZWFrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi54aHRtbE91dD8iPGJyIC8+XG4iOiI8YnI+XG4ifSxzLnNvZnRicmVhaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uYnJlYWtzP24ueGh0bWxPdXQ/IjxiciAvPlxuIjoiPGJyPlxuIjoiXG4ifSxzLnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlW3RdLmNvbnRlbnQpfSxzLmh0bWxfYmxvY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XS5jb250ZW50fSxzLmh0bWxfaW5saW5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0uY29udGVudH0sci5wcm90b3R5cGUucmVuZGVyQXR0cnM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKCFlLmF0dHJzKXJldHVybiIiO2ZvcihyPSIiLHQ9MCxuPWUuYXR0cnMubGVuZ3RoO3Q8bjt0Kyspcis9IiAiK2EoZS5hdHRyc1t0XVswXSkrJz0iJythKGUuYXR0cnNbdF1bMV0pKyciJztyZXR1cm4gcn0sci5wcm90b3R5cGUucmVuZGVyVG9rZW49ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9IiIsbz0hMSxhPWVbdF07cmV0dXJuIGEuaGlkZGVuPyIiOihhLmJsb2NrJiYtMSE9PWEubmVzdGluZyYmdCYmZVt0LTFdLmhpZGRlbiYmKGkrPSJcbiIpLGkrPSgtMT09PWEubmVzdGluZz8iPC8iOiI8IikrYS50YWcsaSs9dGhpcy5yZW5kZXJBdHRycyhhKSwwPT09YS5uZXN0aW5nJiZuLnhodG1sT3V0JiYoaSs9IiAvIiksYS5ibG9jayYmKG89ITAsMT09PWEubmVzdGluZyYmdCsxPGUubGVuZ3RoJiYocj1lW3QrMV0sImlubGluZSI9PT1yLnR5cGV8fHIuaGlkZGVuP289ITE6LTE9PT1yLm5lc3RpbmcmJnIudGFnPT09YS50YWcmJihvPSExKSkpLGkrPW8/Ij5cbiI6Ij4iKX0sci5wcm90b3R5cGUucmVuZGVySW5saW5lPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsaT0iIixvPXRoaXMucnVsZXMsYT0wLHM9ZS5sZW5ndGg7YTxzO2ErKylyPWVbYV0udHlwZSwidW5kZWZpbmVkIiE9PXR5cGVvZiBvW3JdP2krPW9bcl0oZSxhLHQsbix0aGlzKTppKz10aGlzLnJlbmRlclRva2VuKGUsYSx0KTtyZXR1cm4gaX0sci5wcm90b3R5cGUucmVuZGVySW5saW5lQXNUZXh0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9IiIsaT0wLG89ZS5sZW5ndGg7aTxvO2krKykidGV4dCI9PT1lW2ldLnR5cGU/cis9ZVtpXS5jb250ZW50OiJpbWFnZSI9PT1lW2ldLnR5cGUmJihyKz10aGlzLnJlbmRlcklubGluZUFzVGV4dChlW2ldLmNoaWxkcmVuLHQsbikpO3JldHVybiByfSxyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSIiLHM9dGhpcy5ydWxlcztmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylvPWVbcl0udHlwZSwiaW5saW5lIj09PW8/YSs9dGhpcy5yZW5kZXJJbmxpbmUoZVtyXS5jaGlsZHJlbix0LG4pOiJ1bmRlZmluZWQiIT09dHlwZW9mIHNbb10/YSs9c1tlW3JdLnR5cGVdKGUscix0LG4sdGhpcyk6YSs9dGhpcy5yZW5kZXJUb2tlbihlLHIsdCxuKTtyZXR1cm4gYX0sZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucnVsZXI9bmV3IGk7Zm9yKHZhciBlPTA7ZTxvLmxlbmd0aDtlKyspdGhpcy5ydWxlci5wdXNoKG9bZV1bMF0sb1tlXVsxXSl9dmFyIGk9bigxMzQpLG89W1sibm9ybWFsaXplIixuKDU1NCldLFsiYmxvY2siLG4oNTU1KV0sWyJpbmxpbmUiLG4oNTU2KV0sWyJsaW5raWZ5IixuKDU1NyldLFsicmVwbGFjZW1lbnRzIixuKDU1OCldLFsic21hcnRxdW90ZXMiLG4oNTU5KV1dO3IucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2ZvcihyPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpLHQ9MCxuPXIubGVuZ3RoO3Q8bjt0Kyspclt0XShlKX0sci5wcm90b3R5cGUuU3RhdGU9big1NjApLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPS9ccltcblx1MDA4NV0/fFtcdTI0MjRcdTIwMjhcdTAwODVdL2csaT0vXHUwMDAwL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3Q9ZS5zcmMucmVwbGFjZShyLCJcbiIpLHQ9dC5yZXBsYWNlKGksIlx1ZmZmZCIpLGUuc3JjPXR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtlLmlubGluZU1vZGU/KHQ9bmV3IGUuVG9rZW4oImlubGluZSIsIiIsMCksdC5jb250ZW50PWUuc3JjLHQubWFwPVswLDFdLHQuY2hpbGRyZW49W10sZS50b2tlbnMucHVzaCh0KSk6ZS5tZC5ibG9jay5wYXJzZShlLnNyYyxlLm1kLGUuZW52LGUudG9rZW5zKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUudG9rZW5zO2ZvcihuPTAscj1pLmxlbmd0aDtuPHI7bisrKXQ9aVtuXSwiaW5saW5lIj09PXQudHlwZSYmZS5tZC5pbmxpbmUucGFyc2UodC5jb250ZW50LGUubWQsZS5lbnYsdC5jaGlsZHJlbil9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuL148YVs+XHNdL2kudGVzdChlKX1mdW5jdGlvbiBpKGUpe3JldHVybi9ePFwvYVxzKj4vaS50ZXN0KGUpfXZhciBvPW4oNCkuYXJyYXlSZXBsYWNlQXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYSxzLHUsYyxsLHAsZixkLGgsbSxnLHksdixiLHgsQz1lLnRva2VucztpZihlLm1kLm9wdGlvbnMubGlua2lmeSlmb3Iobj0wLGE9Qy5sZW5ndGg7bjxhO24rKylpZigiaW5saW5lIj09PUNbbl0udHlwZSYmZS5tZC5saW5raWZ5LnByZXRlc3QoQ1tuXS5jb250ZW50KSlmb3Iocz1DW25dLmNoaWxkcmVuLGc9MCx0PXMubGVuZ3RoLTE7dD49MDt0LS0paWYoYz1zW3RdLCJsaW5rX2Nsb3NlIiE9PWMudHlwZSl7aWYoImh0bWxfaW5saW5lIj09PWMudHlwZSYmKHIoYy5jb250ZW50KSYmZz4wJiZnLS0saShjLmNvbnRlbnQpJiZnKyspLCEoZz4wKSYmInRleHQiPT09Yy50eXBlJiZlLm1kLmxpbmtpZnkudGVzdChjLmNvbnRlbnQpKXtmb3IoZj1jLmNvbnRlbnQseD1lLm1kLmxpbmtpZnkubWF0Y2goZiksbD1bXSxtPWMubGV2ZWwsaD0wLHA9MDtwPHgubGVuZ3RoO3ArKyl5PXhbcF0udXJsLHY9ZS5tZC5ub3JtYWxpemVMaW5rKHkpLGUubWQudmFsaWRhdGVMaW5rKHYpJiYoYj14W3BdLnRleHQsYj14W3BdLnNjaGVtYT8ibWFpbHRvOiIhPT14W3BdLnNjaGVtYXx8L15tYWlsdG86L2kudGVzdChiKT9lLm1kLm5vcm1hbGl6ZUxpbmtUZXh0KGIpOmUubWQubm9ybWFsaXplTGlua1RleHQoIm1haWx0bzoiK2IpLnJlcGxhY2UoL15tYWlsdG86LywiIik6ZS5tZC5ub3JtYWxpemVMaW5rVGV4dCgiaHR0cDovLyIrYikucmVwbGFjZSgvXmh0dHA6XC9cLy8sIiIpLGQ9eFtwXS5pbmRleCxkPmgmJih1PW5ldyBlLlRva2VuKCJ0ZXh0IiwiIiwwKSx1LmNvbnRlbnQ9Zi5zbGljZShoLGQpLHUubGV2ZWw9bSxsLnB1c2godSkpLHU9bmV3IGUuVG9rZW4oImxpbmtfb3BlbiIsImEiLDEpLHUuYXR0cnM9W1siaHJlZiIsdl1dLHUubGV2ZWw9bSsrLHUubWFya3VwPSJsaW5raWZ5Iix1LmluZm89ImF1dG8iLGwucHVzaCh1KSx1PW5ldyBlLlRva2VuKCJ0ZXh0IiwiIiwwKSx1LmNvbnRlbnQ9Yix1LmxldmVsPW0sbC5wdXNoKHUpLHU9bmV3IGUuVG9rZW4oImxpbmtfY2xvc2UiLCJhIiwtMSksdS5sZXZlbD0tLW0sdS5tYXJrdXA9ImxpbmtpZnkiLHUuaW5mbz0iYXV0byIsbC5wdXNoKHUpLGg9eFtwXS5sYXN0SW5kZXgpO2g8Zi5sZW5ndGgmJih1PW5ldyBlLlRva2VuKCJ0ZXh0IiwiIiwwKSx1LmNvbnRlbnQ9Zi5zbGljZShoKSx1LmxldmVsPW0sbC5wdXNoKHUpKSxDW25dLmNoaWxkcmVuPXM9byhzLHQsbCl9fWVsc2UgZm9yKHQtLTtzW3RdLmxldmVsIT09Yy5sZXZlbCYmImxpbmtfb3BlbiIhPT1zW3RdLnR5cGU7KXQtLX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBjW3QudG9Mb3dlckNhc2UoKV19ZnVuY3Rpb24gaShlKXt2YXIgdCxuLGk9MDtmb3IodD1lLmxlbmd0aC0xO3Q+PTA7dC0tKW49ZVt0XSwidGV4dCIhPT1uLnR5cGV8fGl8fChuLmNvbnRlbnQ9bi5jb250ZW50LnJlcGxhY2UodSxyKSksImxpbmtfb3BlbiI9PT1uLnR5cGUmJiJhdXRvIj09PW4uaW5mbyYmaS0tLCJsaW5rX2Nsb3NlIj09PW4udHlwZSYmImF1dG8iPT09bi5pbmZvJiZpKyt9ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHI9MDtmb3IodD1lLmxlbmd0aC0xO3Q+PTA7dC0tKW49ZVt0XSwidGV4dCIhPT1uLnR5cGV8fHJ8fGEudGVzdChuLmNvbnRlbnQpJiYobi5jb250ZW50PW4uY29udGVudC5yZXBsYWNlKC9cKy0vZywiXHhiMSIpLnJlcGxhY2UoL1wuezIsfS9nLCJcdTIwMjYiKS5yZXBsYWNlKC8oWz8hXSlcdTIwMjYvZywiJDEuLiIpLnJlcGxhY2UoLyhbPyFdKXs0LH0vZywiJDEkMSQxIikucmVwbGFjZSgvLHsyLH0vZywiLCIpLnJlcGxhY2UoLyhefFteLV0pLS0tKFteLV18JCkvZ20sIiQxXHUyMDE0JDIiKS5yZXBsYWNlKC8oXnxccyktLShcc3wkKS9nbSwiJDFcdTIwMTMkMiIpLnJlcGxhY2UoLyhefFteLVxzXSktLShbXi1cc118JCkvZ20sIiQxXHUyMDEzJDIiKSksImxpbmtfb3BlbiI9PT1uLnR5cGUmJiJhdXRvIj09PW4uaW5mbyYmci0tLCJsaW5rX2Nsb3NlIj09PW4udHlwZSYmImF1dG8iPT09bi5pbmZvJiZyKyt9dmFyIGE9L1wrLXxcLlwufFw/XD9cP1w/fCEhISF8LCx8LS0vLHM9L1woKGN8dG18cnxwKVwpL2ksdT0vXCgoY3x0bXxyfHApXCkvZ2ksYz17YzoiXHhhOSIscjoiXHhhZSIscDoiXHhhNyIsdG06Ilx1MjEyMiJ9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtpZihlLm1kLm9wdGlvbnMudHlwb2dyYXBoZXIpZm9yKHQ9ZS50b2tlbnMubGVuZ3RoLTE7dD49MDt0LS0pImlubGluZSI9PT1lLnRva2Vuc1t0XS50eXBlJiYocy50ZXN0KGUudG9rZW5zW3RdLmNvbnRlbnQpJiZpKGUudG9rZW5zW3RdLmNoaWxkcmVuKSxhLnRlc3QoZS50b2tlbnNbdF0uY29udGVudCkmJm8oZS50b2tlbnNbdF0uY2hpbGRyZW4pKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIGUuc3Vic3RyKDAsdCkrbitlLnN1YnN0cih0KzEpfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbixpLHUscCxmLGQsaCxtLGcseSx2LGIseCxDLEUsRCx3LFMsayxBLF87Zm9yKGs9W10sbj0wO248ZS5sZW5ndGg7bisrKXtmb3IoaT1lW25dLGg9ZVtuXS5sZXZlbCx3PWsubGVuZ3RoLTE7dz49MCYmIShrW3ddLmxldmVsPD1oKTt3LS0pO2lmKGsubGVuZ3RoPXcrMSwidGV4dCI9PT1pLnR5cGUpe3U9aS5jb250ZW50LGY9MCxkPXUubGVuZ3RoO2U6Zm9yKDtmPGQmJihjLmxhc3RJbmRleD1mLHA9Yy5leGVjKHUpKTspe2lmKEU9RD0hMCxmPXAuaW5kZXgrMSxTPSInIj09PXBbMF0sZz0zMixwLmluZGV4LTE+PTApZz11LmNoYXJDb2RlQXQocC5pbmRleC0xKTtlbHNlIGZvcih3PW4tMTt3Pj0wJiYoInNvZnRicmVhayIhPT1lW3ddLnR5cGUmJiJoYXJkYnJlYWsiIT09ZVt3XS50eXBlKTt3LS0paWYoInRleHQiPT09ZVt3XS50eXBlKXtnPWVbd10uY29udGVudC5jaGFyQ29kZUF0KGVbd10uY29udGVudC5sZW5ndGgtMSk7YnJlYWt9aWYoeT0zMixmPGQpeT11LmNoYXJDb2RlQXQoZik7ZWxzZSBmb3Iodz1uKzE7dzxlLmxlbmd0aCYmKCJzb2Z0YnJlYWsiIT09ZVt3XS50eXBlJiYiaGFyZGJyZWFrIiE9PWVbd10udHlwZSk7dysrKWlmKCJ0ZXh0Ij09PWVbd10udHlwZSl7eT1lW3ddLmNvbnRlbnQuY2hhckNvZGVBdCgwKTticmVha31pZih2PXMoZyl8fGEoU3RyaW5nLmZyb21DaGFyQ29kZShnKSksYj1zKHkpfHxhKFN0cmluZy5mcm9tQ2hhckNvZGUoeSkpLHg9byhnKSxDPW8oeSksQz9FPSExOmImJih4fHx2fHwoRT0hMSkpLHg/RD0hMTp2JiYoQ3x8Ynx8KEQ9ITEpKSwzND09PXkmJiciJz09PXBbMF0mJmc+PTQ4JiZnPD01NyYmKEQ9RT0hMSksRSYmRCYmKEU9ITEsRD1iKSxFfHxEKXtpZihEKWZvcih3PWsubGVuZ3RoLTE7dz49MCYmKG09a1t3XSwhKGtbd10ubGV2ZWw8aCkpO3ctLSlpZihtLnNpbmdsZT09PVMmJmtbd10ubGV2ZWw9PT1oKXttPWtbd10sUz8oQT10Lm1kLm9wdGlvbnMucXVvdGVzWzJdLF89dC5tZC5vcHRpb25zLnF1b3Rlc1szXSk6KEE9dC5tZC5vcHRpb25zLnF1b3Rlc1swXSxfPXQubWQub3B0aW9ucy5xdW90ZXNbMV0pLGkuY29udGVudD1yKGkuY29udGVudCxwLmluZGV4LF8pLGVbbS50b2tlbl0uY29udGVudD1yKGVbbS50b2tlbl0uY29udGVudCxtLnBvcyxBKSxmKz1fLmxlbmd0aC0xLG0udG9rZW49PT1uJiYoZis9QS5sZW5ndGgtMSksdT1pLmNvbnRlbnQsZD11Lmxlbmd0aCxrLmxlbmd0aD13O2NvbnRpbnVlIGV9RT9rLnB1c2goe3Rva2VuOm4scG9zOnAuaW5kZXgsc2luZ2xlOlMsbGV2ZWw6aH0pOkQmJlMmJihpLmNvbnRlbnQ9cihpLmNvbnRlbnQscC5pbmRleCxsKSl9ZWxzZSBTJiYoaS5jb250ZW50PXIoaS5jb250ZW50LHAuaW5kZXgsbCkpfX19fXZhciBvPW4oNCkuaXNXaGl0ZVNwYWNlLGE9big0KS5pc1B1bmN0Q2hhcixzPW4oNCkuaXNNZEFzY2lpUHVuY3QsdT0vWyciXS8sYz0vWyciXS9nLGw9Ilx1MjAxOSI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUubWQub3B0aW9ucy50eXBvZ3JhcGhlcilmb3IodD1lLnRva2Vucy5sZW5ndGgtMTt0Pj0wO3QtLSkiaW5saW5lIj09PWUudG9rZW5zW3RdLnR5cGUmJnUudGVzdChlLnRva2Vuc1t0XS5jb250ZW50KSYmaShlLnRva2Vuc1t0XS5jaGlsZHJlbixlKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dGhpcy5zcmM9ZSx0aGlzLmVudj1uLHRoaXMudG9rZW5zPVtdLHRoaXMuaW5saW5lTW9kZT0hMSx0aGlzLm1kPXR9dmFyIGk9bigxMzUpO3IucHJvdG90eXBlLlRva2VuPWksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucnVsZXI9bmV3IGk7Zm9yKHZhciBlPTA7ZTxvLmxlbmd0aDtlKyspdGhpcy5ydWxlci5wdXNoKG9bZV1bMF0sb1tlXVsxXSx7YWx0OihvW2VdWzJdfHxbXSkuc2xpY2UoKX0pfXZhciBpPW4oMTM0KSxvPVtbInRhYmxlIixuKDU2MiksWyJwYXJhZ3JhcGgiLCJyZWZlcmVuY2UiXV0sWyJjb2RlIixuKDU2MyldLFsiZmVuY2UiLG4oNTY0KSxbInBhcmFncmFwaCIsInJlZmVyZW5jZSIsImJsb2NrcXVvdGUiLCJsaXN0Il1dLFsiYmxvY2txdW90ZSIsbig1NjUpLFsicGFyYWdyYXBoIiwicmVmZXJlbmNlIiwiYmxvY2txdW90ZSIsImxpc3QiXV0sWyJociIsbig1NjYpLFsicGFyYWdyYXBoIiwicmVmZXJlbmNlIiwiYmxvY2txdW90ZSIsImxpc3QiXV0sWyJsaXN0IixuKDU2NyksWyJwYXJhZ3JhcGgiLCJyZWZlcmVuY2UiLCJibG9ja3F1b3RlIl1dLFsicmVmZXJlbmNlIixuKDU2OCldLFsiaGVhZGluZyIsbig1NjkpLFsicGFyYWdyYXBoIiwicmVmZXJlbmNlIiwiYmxvY2txdW90ZSJdXSxbImxoZWFkaW5nIixuKDU3MCldLFsiaHRtbF9ibG9jayIsbig1NzEpLFsicGFyYWdyYXBoIiwicmVmZXJlbmNlIiwiYmxvY2txdW90ZSJdXSxbInBhcmFncmFwaCIsbig1NzMpXV07ci5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixpPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpLG89aS5sZW5ndGgsYT10LHM9ITEsdT1lLm1kLm9wdGlvbnMubWF4TmVzdGluZzthPG4mJihlLmxpbmU9YT1lLnNraXBFbXB0eUxpbmVzKGEpLCEoYT49bikpJiYhKGUuc0NvdW50W2FdPGUuYmxrSW5kZW50KTspe2lmKGUubGV2ZWw+PXUpe2UubGluZT1uO2JyZWFrfWZvcihyPTA7cjxvJiYhaVtyXShlLGEsbiwhMSk7cisrKTtlLnRpZ2h0PSFzLGUuaXNFbXB0eShlLmxpbmUtMSkmJihzPSEwKSwoYT1lLmxpbmUpPG4mJmUuaXNFbXB0eShhKSYmKHM9ITAsYSsrLGUubGluZT1hKX19LHIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpO2UmJihpPW5ldyB0aGlzLlN0YXRlKGUsdCxuLHIpLHRoaXMudG9rZW5pemUoaSxpLmxpbmUsaS5saW5lTWF4KSl9LHIucHJvdG90eXBlLlN0YXRlPW4oNTc0KSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZS5iTWFya3NbdF0rZS5ibGtJbmRlbnQscj1lLmVNYXJrc1t0XTtyZXR1cm4gZS5zcmMuc3Vic3RyKG4sci1uKX1mdW5jdGlvbiBpKGUpe3ZhciB0LG49W10scj0wLGk9ZS5sZW5ndGgsbz0wLGE9MCxzPSExLHU9MDtmb3IodD1lLmNoYXJDb2RlQXQocik7cjxpOyk5Nj09PXQ/cz8ocz0hMSx1PXIpOm8lMj09PTAmJihzPSEwLHU9cik6MTI0IT09dHx8byUyIT09MHx8c3x8KG4ucHVzaChlLnN1YnN0cmluZyhhLHIpKSxhPXIrMSksOTI9PT10P28rKzpvPTAscisrLHI9PT1pJiZzJiYocz0hMSxyPXUrMSksdD1lLmNoYXJDb2RlQXQocik7cmV0dXJuIG4ucHVzaChlLnN1YnN0cmluZyhhKSksbn12YXIgbz1uKDQpLmlzU3BhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGEpe3ZhciBzLHUsYyxsLHAsZixkLGgsbSxnLHksdjtpZih0KzI+bilyZXR1cm4hMTtpZihwPXQrMSxlLnNDb3VudFtwXTxlLmJsa0luZGVudClyZXR1cm4hMTtpZihlLnNDb3VudFtwXS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZigoYz1lLmJNYXJrc1twXStlLnRTaGlmdFtwXSk+PWUuZU1hcmtzW3BdKXJldHVybiExO2lmKDEyNCE9PShzPWUuc3JjLmNoYXJDb2RlQXQoYysrKSkmJjQ1IT09cyYmNTghPT1zKXJldHVybiExO2Zvcig7YzxlLmVNYXJrc1twXTspe2lmKDEyNCE9PShzPWUuc3JjLmNoYXJDb2RlQXQoYykpJiY0NSE9PXMmJjU4IT09cyYmIW8ocykpcmV0dXJuITE7YysrfWZvcih1PXIoZSx0KzEpLGY9dS5zcGxpdCgifCIpLG09W10sbD0wO2w8Zi5sZW5ndGg7bCsrKXtpZighKGc9ZltsXS50cmltKCkpKXtpZigwPT09bHx8bD09PWYubGVuZ3RoLTEpY29udGludWU7cmV0dXJuITF9aWYoIS9eOj8tKzo/JC8udGVzdChnKSlyZXR1cm4hMTs1OD09PWcuY2hhckNvZGVBdChnLmxlbmd0aC0xKT9tLnB1c2goNTg9PT1nLmNoYXJDb2RlQXQoMCk/ImNlbnRlciI6InJpZ2h0Iik6NTg9PT1nLmNoYXJDb2RlQXQoMCk/bS5wdXNoKCJsZWZ0Iik6bS5wdXNoKCIiKX1pZih1PXIoZSx0KS50cmltKCksLTE9PT11LmluZGV4T2YoInwiKSlyZXR1cm4hMTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZihmPWkodS5yZXBsYWNlKC9eXHx8XHwkL2csIiIpKSwoZD1mLmxlbmd0aCk+bS5sZW5ndGgpcmV0dXJuITE7aWYoYSlyZXR1cm4hMDtmb3IoaD1lLnB1c2goInRhYmxlX29wZW4iLCJ0YWJsZSIsMSksaC5tYXA9eT1bdCwwXSxoPWUucHVzaCgidGhlYWRfb3BlbiIsInRoZWFkIiwxKSxoLm1hcD1bdCx0KzFdLGg9ZS5wdXNoKCJ0cl9vcGVuIiwidHIiLDEpLGgubWFwPVt0LHQrMV0sbD0wO2w8Zi5sZW5ndGg7bCsrKWg9ZS5wdXNoKCJ0aF9vcGVuIiwidGgiLDEpLGgubWFwPVt0LHQrMV0sbVtsXSYmKGguYXR0cnM9W1sic3R5bGUiLCJ0ZXh0LWFsaWduOiIrbVtsXV1dKSxoPWUucHVzaCgiaW5saW5lIiwiIiwwKSxoLmNvbnRlbnQ9ZltsXS50cmltKCksaC5tYXA9W3QsdCsxXSxoLmNoaWxkcmVuPVtdLGg9ZS5wdXNoKCJ0aF9jbG9zZSIsInRoIiwtMSk7Zm9yKGg9ZS5wdXNoKCJ0cl9jbG9zZSIsInRyIiwtMSksaD1lLnB1c2goInRoZWFkX2Nsb3NlIiwidGhlYWQiLC0xKSxoPWUucHVzaCgidGJvZHlfb3BlbiIsInRib2R5IiwxKSxoLm1hcD12PVt0KzIsMF0scD10KzI7cDxuJiYhKGUuc0NvdW50W3BdPGUuYmxrSW5kZW50KSYmKHU9cihlLHApLnRyaW0oKSwtMSE9PXUuaW5kZXhPZigifCIpKSYmIShlLnNDb3VudFtwXS1lLmJsa0luZGVudD49NCk7cCsrKXtmb3IoZj1pKHUucmVwbGFjZSgvXlx8fFx8JC9nLCIiKSksaD1lLnB1c2goInRyX29wZW4iLCJ0ciIsMSksbD0wO2w8ZDtsKyspaD1lLnB1c2goInRkX29wZW4iLCJ0ZCIsMSksbVtsXSYmKGguYXR0cnM9W1sic3R5bGUiLCJ0ZXh0LWFsaWduOiIrbVtsXV1dKSxoPWUucHVzaCgiaW5saW5lIiwiIiwwKSxoLmNvbnRlbnQ9ZltsXT9mW2xdLnRyaW0oKToiIixoLmNoaWxkcmVuPVtdLGg9ZS5wdXNoKCJ0ZF9jbG9zZSIsInRkIiwtMSk7aD1lLnB1c2goInRyX2Nsb3NlIiwidHIiLC0xKX1yZXR1cm4gaD1lLnB1c2goInRib2R5X2Nsb3NlIiwidGJvZHkiLC0xKSxoPWUucHVzaCgidGFibGVfY2xvc2UiLCJ0YWJsZSIsLTEpLHlbMV09dlsxXT1wLGUubGluZT1wLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbztpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudDw0KXJldHVybiExO2ZvcihpPXI9dCsxO3I8bjspaWYoZS5pc0VtcHR5KHIpKXIrKztlbHNle2lmKCEoZS5zQ291bnRbcl0tZS5ibGtJbmRlbnQ+PTQpKWJyZWFrO3IrKyxpPXJ9cmV0dXJuIGUubGluZT1pLG89ZS5wdXNoKCJjb2RlX2Jsb2NrIiwiY29kZSIsMCksby5jb250ZW50PWUuZ2V0TGluZXModCxpLDQrZS5ibGtJbmRlbnQsITApLG8ubWFwPVt0LGUubGluZV0sITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGMsbCxwPSExLGY9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sZD1lLmVNYXJrc1t0XTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZihmKzM+ZClyZXR1cm4hMTtpZigxMjYhPT0oaT1lLnNyYy5jaGFyQ29kZUF0KGYpKSYmOTYhPT1pKXJldHVybiExO2lmKHU9ZixmPWUuc2tpcENoYXJzKGYsaSksKG89Zi11KTwzKXJldHVybiExO2lmKGw9ZS5zcmMuc2xpY2UodSxmKSxhPWUuc3JjLnNsaWNlKGYsZCksYS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpPj0wKXJldHVybiExO2lmKHIpcmV0dXJuITA7Zm9yKHM9dDshKCsrcz49bikmJihmPXU9ZS5iTWFya3Nbc10rZS50U2hpZnRbc10sZD1lLmVNYXJrc1tzXSwhKGY8ZCYmZS5zQ291bnRbc108ZS5ibGtJbmRlbnQpKTspaWYoZS5zcmMuY2hhckNvZGVBdChmKT09PWkmJiEoZS5zQ291bnRbc10tZS5ibGtJbmRlbnQ+PTQpJiYhKChmPWUuc2tpcENoYXJzKGYsaSkpLXU8bykmJiEoKGY9ZS5za2lwU3BhY2VzKGYpKTxkKSl7cD0hMDticmVha31yZXR1cm4gbz1lLnNDb3VudFt0XSxlLmxpbmU9cysocD8xOjApLGM9ZS5wdXNoKCJmZW5jZSIsImNvZGUiLDApLGMuaW5mbz1hLGMuY29udGVudD1lLmdldExpbmVzKHQrMSxzLG8sITApLGMubWFya3VwPWwsYy5tYXA9W3QsZS5saW5lXSwhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhLHMsdSxjLGwscCxmLGQsaCxtLGcseSx2LGIseCxDLEUsRCx3LFM9ZS5saW5lTWF4LGs9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sQT1lLmVNYXJrc1t0XTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZig2MiE9PWUuc3JjLmNoYXJDb2RlQXQoaysrKSlyZXR1cm4hMTtpZihpKXJldHVybiEwO2Zvcih1PWQ9ZS5zQ291bnRbdF0ray0oZS5iTWFya3NbdF0rZS50U2hpZnRbdF0pLDMyPT09ZS5zcmMuY2hhckNvZGVBdChrKT8oaysrLHUrKyxkKyssbz0hMSx4PSEwKTo5PT09ZS5zcmMuY2hhckNvZGVBdChrKT8oeD0hMCwoZS5ic0NvdW50W3RdK2QpJTQ9PT0zPyhrKyssdSsrLGQrKyxvPSExKTpvPSEwKTp4PSExLGg9W2UuYk1hcmtzW3RdXSxlLmJNYXJrc1t0XT1rO2s8QSYmKGE9ZS5zcmMuY2hhckNvZGVBdChrKSxyKGEpKTspOT09PWE/ZCs9NC0oZCtlLmJzQ291bnRbdF0rKG8/MTowKSklNDpkKyssaysrO2ZvcihtPVtlLmJzQ291bnRbdF1dLGUuYnNDb3VudFt0XT1lLnNDb3VudFt0XSsxKyh4PzE6MCksbD1rPj1BLHY9W2Uuc0NvdW50W3RdXSxlLnNDb3VudFt0XT1kLXUsYj1bZS50U2hpZnRbdF1dLGUudFNoaWZ0W3RdPWstZS5iTWFya3NbdF0sRT1lLm1kLmJsb2NrLnJ1bGVyLmdldFJ1bGVzKCJibG9ja3F1b3RlIikseT1lLnBhcmVudFR5cGUsZS5wYXJlbnRUeXBlPSJibG9ja3F1b3RlIix3PSExLGY9dCsxO2Y8biYmKGUuc0NvdW50W2ZdPGUuYmxrSW5kZW50JiYodz0hMCksaz1lLmJNYXJrc1tmXStlLnRTaGlmdFtmXSxBPWUuZU1hcmtzW2ZdLCEoaz49QSkpO2YrKylpZig2MiE9PWUuc3JjLmNoYXJDb2RlQXQoaysrKXx8dyl7aWYobClicmVhaztmb3IoQz0hMSxzPTAsYz1FLmxlbmd0aDtzPGM7cysrKWlmKEVbc10oZSxmLG4sITApKXtDPSEwO2JyZWFrfWlmKEMpe2UubGluZU1heD1mLDAhPT1lLmJsa0luZGVudCYmKGgucHVzaChlLmJNYXJrc1tmXSksbS5wdXNoKGUuYnNDb3VudFtmXSksYi5wdXNoKGUudFNoaWZ0W2ZdKSx2LnB1c2goZS5zQ291bnRbZl0pLGUuc0NvdW50W2ZdLT1lLmJsa0luZGVudCk7YnJlYWt9aC5wdXNoKGUuYk1hcmtzW2ZdKSxtLnB1c2goZS5ic0NvdW50W2ZdKSxiLnB1c2goZS50U2hpZnRbZl0pLHYucHVzaChlLnNDb3VudFtmXSksZS5zQ291bnRbZl09LTF9ZWxzZXtmb3IodT1kPWUuc0NvdW50W2ZdK2stKGUuYk1hcmtzW2ZdK2UudFNoaWZ0W2ZdKSwzMj09PWUuc3JjLmNoYXJDb2RlQXQoayk/KGsrKyx1KyssZCsrLG89ITEseD0hMCk6OT09PWUuc3JjLmNoYXJDb2RlQXQoayk/KHg9ITAsKGUuYnNDb3VudFtmXStkKSU0PT09Mz8oaysrLHUrKyxkKyssbz0hMSk6bz0hMCk6eD0hMSxoLnB1c2goZS5iTWFya3NbZl0pLGUuYk1hcmtzW2ZdPWs7azxBJiYoYT1lLnNyYy5jaGFyQ29kZUF0KGspLHIoYSkpOyk5PT09YT9kKz00LShkK2UuYnNDb3VudFtmXSsobz8xOjApKSU0OmQrKyxrKys7bD1rPj1BLG0ucHVzaChlLmJzQ291bnRbZl0pLGUuYnNDb3VudFtmXT1lLnNDb3VudFtmXSsxKyh4PzE6MCksdi5wdXNoKGUuc0NvdW50W2ZdKSxlLnNDb3VudFtmXT1kLXUsYi5wdXNoKGUudFNoaWZ0W2ZdKSxlLnRTaGlmdFtmXT1rLWUuYk1hcmtzW2ZdfWZvcihnPWUuYmxrSW5kZW50LGUuYmxrSW5kZW50PTAsRD1lLnB1c2goImJsb2NrcXVvdGVfb3BlbiIsImJsb2NrcXVvdGUiLDEpLEQubWFya3VwPSI+IixELm1hcD1wPVt0LDBdLGUubWQuYmxvY2sudG9rZW5pemUoZSx0LGYpLEQ9ZS5wdXNoKCJibG9ja3F1b3RlX2Nsb3NlIiwiYmxvY2txdW90ZSIsLTEpLEQubWFya3VwPSI+IixlLmxpbmVNYXg9UyxlLnBhcmVudFR5cGU9eSxwWzFdPWUubGluZSxzPTA7czxiLmxlbmd0aDtzKyspZS5iTWFya3Nbcyt0XT1oW3NdLGUudFNoaWZ0W3MrdF09YltzXSxlLnNDb3VudFtzK3RdPXZbc10sZS5ic0NvdW50W3MrdF09bVtzXTtyZXR1cm4gZS5ibGtJbmRlbnQ9ZywhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhLHMsdSxjPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLGw9ZS5lTWFya3NbdF07aWYoZS5zQ291bnRbdF0tZS5ibGtJbmRlbnQ+PTQpcmV0dXJuITE7aWYoNDIhPT0obz1lLnNyYy5jaGFyQ29kZUF0KGMrKykpJiY0NSE9PW8mJjk1IT09bylyZXR1cm4hMTtmb3IoYT0xO2M8bDspe2lmKChzPWUuc3JjLmNoYXJDb2RlQXQoYysrKSkhPT1vJiYhcihzKSlyZXR1cm4hMTtzPT09byYmYSsrfXJldHVybiEoYTwzKSYmKCEhaXx8KGUubGluZT10KzEsdT1lLnB1c2goImhyIiwiaHIiLDApLHUubWFwPVt0LGUubGluZV0sdS5tYXJrdXA9QXJyYXkoYSsxKS5qb2luKFN0cmluZy5mcm9tQ2hhckNvZGUobykpLCEwKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbixyLGksbztyZXR1cm4gcj1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSxpPWUuZU1hcmtzW3RdLG49ZS5zcmMuY2hhckNvZGVBdChyKyspLDQyIT09biYmNDUhPT1uJiY0MyE9PW4/LTE6cjxpJiYobz1lLnNyYy5jaGFyQ29kZUF0KHIpLCFhKG8pKT8tMTpyfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbixyPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLGk9cixvPWUuZU1hcmtzW3RdO2lmKGkrMT49bylyZXR1cm4tMTtpZigobj1lLnNyYy5jaGFyQ29kZUF0KGkrKykpPDQ4fHxuPjU3KXJldHVybi0xO2Zvcig7Oyl7aWYoaT49bylyZXR1cm4tMTtuPWUuc3JjLmNoYXJDb2RlQXQoaSsrKTt7aWYoIShuPj00OCYmbjw9NTcpKXtpZig0MT09PW58fDQ2PT09bilicmVhaztyZXR1cm4tMX1pZihpLXI+PTEwKXJldHVybi0xfX1yZXR1cm4gaTxvJiYobj1lLnNyYy5jaGFyQ29kZUF0KGkpLCFhKG4pKT8tMTppfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbixyLGk9ZS5sZXZlbCsyO2ZvcihuPXQrMixyPWUudG9rZW5zLmxlbmd0aC0yO248cjtuKyspZS50b2tlbnNbbl0ubGV2ZWw9PT1pJiYicGFyYWdyYXBoX29wZW4iPT09ZS50b2tlbnNbbl0udHlwZSYmKGUudG9rZW5zW24rMl0uaGlkZGVuPSEwLGUudG9rZW5zW25dLmhpZGRlbj0hMCxuKz0yKX12YXIgYT1uKDQpLmlzU3BhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGEpe3ZhciBzLHUsYyxsLHAsZixkLGgsbSxnLHksdixiLHgsQyxFLEQsdyxTLGssQSxfLFQsTyxGLE4sSSxMLFA9ITEsTT0hMDtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZihhJiYicGFyYWdyYXBoIj09PWUucGFyZW50VHlwZSYmZS50U2hpZnRbdF0+PWUuYmxrSW5kZW50JiYoUD0hMCksKFQ9aShlLHQpKT49MCl7aWYoZD0hMCxGPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLGI9TnVtYmVyKGUuc3JjLnN1YnN0cihGLFQtRi0xKSksUCYmMSE9PWIpcmV0dXJuITF9ZWxzZXtpZighKChUPXIoZSx0KSk+PTApKXJldHVybiExO2Q9ITF9aWYoUCYmZS5za2lwU3BhY2VzKFQpPj1lLmVNYXJrc1t0XSlyZXR1cm4hMTtpZih2PWUuc3JjLmNoYXJDb2RlQXQoVC0xKSxhKXJldHVybiEwO2Zvcih5PWUudG9rZW5zLmxlbmd0aCxkPyhMPWUucHVzaCgib3JkZXJlZF9saXN0X29wZW4iLCJvbCIsMSksMSE9PWImJihMLmF0dHJzPVtbInN0YXJ0IixiXV0pKTpMPWUucHVzaCgiYnVsbGV0X2xpc3Rfb3BlbiIsInVsIiwxKSxMLm1hcD1nPVt0LDBdLEwubWFya3VwPVN0cmluZy5mcm9tQ2hhckNvZGUodiksQz10LE89ITEsST1lLm1kLmJsb2NrLnJ1bGVyLmdldFJ1bGVzKCJsaXN0IiksUz1lLnBhcmVudFR5cGUsZS5wYXJlbnRUeXBlPSJsaXN0IjtDPG47KXtmb3IoXz1ULHg9ZS5lTWFya3NbQ10sZj1FPWUuc0NvdW50W0NdK1QtKGUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdKTtfPHg7KXtpZig5PT09KHM9ZS5zcmMuY2hhckNvZGVBdChfKSkpRSs9NC0oRStlLmJzQ291bnRbQ10pJTQ7ZWxzZXtpZigzMiE9PXMpYnJlYWs7RSsrfV8rK31pZih1PV8scD11Pj14PzE6RS1mLHA+NCYmKHA9MSksbD1mK3AsTD1lLnB1c2goImxpc3RfaXRlbV9vcGVuIiwibGkiLDEpLEwubWFya3VwPVN0cmluZy5mcm9tQ2hhckNvZGUodiksTC5tYXA9aD1bdCwwXSxEPWUuYmxrSW5kZW50LEE9ZS50aWdodCxrPWUudFNoaWZ0W3RdLHc9ZS5zQ291bnRbdF0sZS5ibGtJbmRlbnQ9bCxlLnRpZ2h0PSEwLGUudFNoaWZ0W3RdPXUtZS5iTWFya3NbdF0sZS5zQ291bnRbdF09RSx1Pj14JiZlLmlzRW1wdHkodCsxKT9lLmxpbmU9TWF0aC5taW4oZS5saW5lKzIsbik6ZS5tZC5ibG9jay50b2tlbml6ZShlLHQsbiwhMCksZS50aWdodCYmIU98fChNPSExKSxPPWUubGluZS10PjEmJmUuaXNFbXB0eShlLmxpbmUtMSksZS5ibGtJbmRlbnQ9RCxlLnRTaGlmdFt0XT1rLGUuc0NvdW50W3RdPXcsZS50aWdodD1BLEw9ZS5wdXNoKCJsaXN0X2l0ZW1fY2xvc2UiLCJsaSIsLTEpLEwubWFya3VwPVN0cmluZy5mcm9tQ2hhckNvZGUodiksQz10PWUubGluZSxoWzFdPUMsdT1lLmJNYXJrc1t0XSxDPj1uKWJyZWFrO2lmKGUuc0NvdW50W0NdPGUuYmxrSW5kZW50KWJyZWFrO2ZvcihOPSExLGM9MCxtPUkubGVuZ3RoO2M8bTtjKyspaWYoSVtjXShlLEMsbiwhMCkpe049ITA7YnJlYWt9aWYoTilicmVhaztpZihkKXtpZigoVD1pKGUsQykpPDApYnJlYWt9ZWxzZSBpZigoVD1yKGUsQykpPDApYnJlYWs7aWYodiE9PWUuc3JjLmNoYXJDb2RlQXQoVC0xKSlicmVha31yZXR1cm4gTD1kP2UucHVzaCgib3JkZXJlZF9saXN0X2Nsb3NlIiwib2wiLC0xKTplLnB1c2goImJ1bGxldF9saXN0X2Nsb3NlIiwidWwiLC0xKSxMLm1hcmt1cD1TdHJpbmcuZnJvbUNoYXJDb2RlKHYpLGdbMV09QyxlLmxpbmU9QyxlLnBhcmVudFR5cGU9UyxNJiZvKGUseSksITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCkubm9ybWFsaXplUmVmZXJlbmNlLGk9big0KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt2YXIgYSxzLHUsYyxsLHAsZixkLGgsbSxnLHksdixiLHgsQyxFPTAsRD1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSx3PWUuZU1hcmtzW3RdLFM9dCsxO2lmKGUuc0NvdW50W3RdLWUuYmxrSW5kZW50Pj00KXJldHVybiExO2lmKDkxIT09ZS5zcmMuY2hhckNvZGVBdChEKSlyZXR1cm4hMTtmb3IoOysrRDx3OylpZig5Mz09PWUuc3JjLmNoYXJDb2RlQXQoRCkmJjkyIT09ZS5zcmMuY2hhckNvZGVBdChELTEpKXtpZihEKzE9PT13KXJldHVybiExO2lmKDU4IT09ZS5zcmMuY2hhckNvZGVBdChEKzEpKXJldHVybiExO2JyZWFrfWZvcihjPWUubGluZU1heCx4PWUubWQuYmxvY2sucnVsZXIuZ2V0UnVsZXMoInJlZmVyZW5jZSIpLG09ZS5wYXJlbnRUeXBlLGUucGFyZW50VHlwZT0icmVmZXJlbmNlIjtTPGMmJiFlLmlzRW1wdHkoUyk7UysrKWlmKCEoZS5zQ291bnRbU10tZS5ibGtJbmRlbnQ+MykmJiEoZS5zQ291bnRbU108MCkpe2ZvcihiPSExLHA9MCxmPXgubGVuZ3RoO3A8ZjtwKyspaWYoeFtwXShlLFMsYywhMCkpe2I9ITA7YnJlYWt9aWYoYilicmVha31mb3Iodj1lLmdldExpbmVzKHQsUyxlLmJsa0luZGVudCwhMSkudHJpbSgpLHc9di5sZW5ndGgsRD0xO0Q8dztEKyspe2lmKDkxPT09KGE9di5jaGFyQ29kZUF0KEQpKSlyZXR1cm4hMTtpZig5Mz09PWEpe2g9RDticmVha30xMD09PWE/RSsrOjkyPT09YSYmKytEPHcmJjEwPT09di5jaGFyQ29kZUF0KEQpJiZFKyt9aWYoaDwwfHw1OCE9PXYuY2hhckNvZGVBdChoKzEpKXJldHVybiExO2ZvcihEPWgrMjtEPHc7RCsrKWlmKDEwPT09KGE9di5jaGFyQ29kZUF0KEQpKSlFKys7ZWxzZSBpZighaShhKSlicmVhaztpZihnPWUubWQuaGVscGVycy5wYXJzZUxpbmtEZXN0aW5hdGlvbih2LEQsdyksIWcub2spcmV0dXJuITE7aWYobD1lLm1kLm5vcm1hbGl6ZUxpbmsoZy5zdHIpLCFlLm1kLnZhbGlkYXRlTGluayhsKSlyZXR1cm4hMTtmb3IoRD1nLnBvcyxFKz1nLmxpbmVzLHM9RCx1PUUseT1EO0Q8dztEKyspaWYoMTA9PT0oYT12LmNoYXJDb2RlQXQoRCkpKUUrKztlbHNlIGlmKCFpKGEpKWJyZWFrO2ZvcihnPWUubWQuaGVscGVycy5wYXJzZUxpbmtUaXRsZSh2LEQsdyksRDx3JiZ5IT09RCYmZy5vaz8oQz1nLnN0cixEPWcucG9zLEUrPWcubGluZXMpOihDPSIiLEQ9cyxFPXUpO0Q8dyYmKGE9di5jaGFyQ29kZUF0KEQpLGkoYSkpOylEKys7aWYoRDx3JiYxMCE9PXYuY2hhckNvZGVBdChEKSYmQylmb3IoQz0iIixEPXMsRT11O0Q8dyYmKGE9di5jaGFyQ29kZUF0KEQpLGkoYSkpOylEKys7cmV0dXJuIShEPHcmJjEwIT09di5jaGFyQ29kZUF0KEQpKSYmKCEhKGQ9cih2LnNsaWNlKDEsaCkpKSYmKCEhb3x8KCJ1bmRlZmluZWQiPT09dHlwZW9mIGUuZW52LnJlZmVyZW5jZXMmJihlLmVudi5yZWZlcmVuY2VzPXt9KSwidW5kZWZpbmVkIj09PXR5cGVvZiBlLmVudi5yZWZlcmVuY2VzW2RdJiYoZS5lbnYucmVmZXJlbmNlc1tkXT17dGl0bGU6QyxocmVmOmx9KSxlLnBhcmVudFR5cGU9bSxlLmxpbmU9dCtFKzEsITApKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCkuaXNTcGFjZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYSxzLHUsYz1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSxsPWUuZU1hcmtzW3RdO2lmKGUuc0NvdW50W3RdLWUuYmxrSW5kZW50Pj00KXJldHVybiExO2lmKDM1IT09KG89ZS5zcmMuY2hhckNvZGVBdChjKSl8fGM+PWwpcmV0dXJuITE7Zm9yKGE9MSxvPWUuc3JjLmNoYXJDb2RlQXQoKytjKTszNT09PW8mJmM8bCYmYTw9NjspYSsrLG89ZS5zcmMuY2hhckNvZGVBdCgrK2MpO3JldHVybiEoYT42fHxjPGwmJiFyKG8pKSYmKCEhaXx8KGw9ZS5za2lwU3BhY2VzQmFjayhsLGMpLHM9ZS5za2lwQ2hhcnNCYWNrKGwsMzUsYykscz5jJiZyKGUuc3JjLmNoYXJDb2RlQXQocy0xKSkmJihsPXMpLGUubGluZT10KzEsdT1lLnB1c2goImhlYWRpbmdfb3BlbiIsImgiK1N0cmluZyhhKSwxKSx1Lm1hcmt1cD0iIyMjIyMjIyMiLnNsaWNlKDAsYSksdS5tYXA9W3QsZS5saW5lXSx1PWUucHVzaCgiaW5saW5lIiwiIiwwKSx1LmNvbnRlbnQ9ZS5zcmMuc2xpY2UoYyxsKS50cmltKCksdS5tYXA9W3QsZS5saW5lXSx1LmNoaWxkcmVuPVtdLHU9ZS5wdXNoKCJoZWFkaW5nX2Nsb3NlIiwiaCIrU3RyaW5nKGEpLC0xKSx1Lm1hcmt1cD0iIyMjIyMjIyMiLnNsaWNlKDAsYSksITApKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsYyxsLHAsZixkPXQrMSxoPWUubWQuYmxvY2sucnVsZXIuZ2V0UnVsZXMoInBhcmFncmFwaCIpO2lmKGUuc0NvdW50W3RdLWUuYmxrSW5kZW50Pj00KXJldHVybiExO2ZvcihmPWUucGFyZW50VHlwZSxlLnBhcmVudFR5cGU9InBhcmFncmFwaCI7ZDxuJiYhZS5pc0VtcHR5KGQpO2QrKylpZighKGUuc0NvdW50W2RdLWUuYmxrSW5kZW50PjMpKXtpZihlLnNDb3VudFtkXT49ZS5ibGtJbmRlbnQmJih1PWUuYk1hcmtzW2RdK2UudFNoaWZ0W2RdLGM9ZS5lTWFya3NbZF0sdTxjJiYoNDU9PT0ocD1lLnNyYy5jaGFyQ29kZUF0KHUpKXx8NjE9PT1wKSYmKHU9ZS5za2lwQ2hhcnModSxwKSwodT1lLnNraXBTcGFjZXModSkpPj1jKSkpe2w9NjE9PT1wPzE6MjticmVha31pZighKGUuc0NvdW50W2RdPDApKXtmb3IoaT0hMSxvPTAsYT1oLmxlbmd0aDtvPGE7bysrKWlmKGhbb10oZSxkLG4sITApKXtpPSEwO2JyZWFrfWlmKGkpYnJlYWt9fXJldHVybiEhbCYmKHI9ZS5nZXRMaW5lcyh0LGQsZS5ibGtJbmRlbnQsITEpLnRyaW0oKSxlLmxpbmU9ZCsxLHM9ZS5wdXNoKCJoZWFkaW5nX29wZW4iLCJoIitTdHJpbmcobCksMSkscy5tYXJrdXA9U3RyaW5nLmZyb21DaGFyQ29kZShwKSxzLm1hcD1bdCxlLmxpbmVdLHM9ZS5wdXNoKCJpbmxpbmUiLCIiLDApLHMuY29udGVudD1yLHMubWFwPVt0LGUubGluZS0xXSxzLmNoaWxkcmVuPVtdLHM9ZS5wdXNoKCJoZWFkaW5nX2Nsb3NlIiwiaCIrU3RyaW5nKGwpLC0xKSxzLm1hcmt1cD1TdHJpbmcuZnJvbUNoYXJDb2RlKHApLGUucGFyZW50VHlwZT1mLCEwKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NzIpLGk9bigyNjQpLkhUTUxfT1BFTl9DTE9TRV9UQUdfUkUsbz1bWy9ePChzY3JpcHR8cHJlfHN0eWxlKSg/PShcc3w+fCQpKS9pLC88XC8oc2NyaXB0fHByZXxzdHlsZSk+L2ksITBdLFsvXjwhLS0vLC8tLT4vLCEwXSxbL148XD8vLC9cPz4vLCEwXSxbL148IVtBLVpdLywvPi8sITBdLFsvXjwhXFtDREFUQVxbLywvXF1cXT4vLCEwXSxbbmV3IFJlZ0V4cCgiXjwvPygiK3Iuam9pbigifCIpKyIpKD89KFxcc3wvPz58JCkpIiwiaSIpLC9eJC8sITBdLFtuZXcgUmVnRXhwKGkuc291cmNlKyJcXHMqJCIpLC9eJC8sITFdXTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxzLHUsYz1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSxsPWUuZU1hcmtzW3RdO2lmKGUuc0NvdW50W3RdLWUuYmxrSW5kZW50Pj00KXJldHVybiExO2lmKCFlLm1kLm9wdGlvbnMuaHRtbClyZXR1cm4hMTtpZig2MCE9PWUuc3JjLmNoYXJDb2RlQXQoYykpcmV0dXJuITE7Zm9yKHU9ZS5zcmMuc2xpY2UoYyxsKSxpPTA7aTxvLmxlbmd0aCYmIW9baV1bMF0udGVzdCh1KTtpKyspO2lmKGk9PT1vLmxlbmd0aClyZXR1cm4hMTtpZihyKXJldHVybiBvW2ldWzJdO2lmKGE9dCsxLCFvW2ldWzFdLnRlc3QodSkpZm9yKDthPG4mJiEoZS5zQ291bnRbYV08ZS5ibGtJbmRlbnQpO2ErKylpZihjPWUuYk1hcmtzW2FdK2UudFNoaWZ0W2FdLGw9ZS5lTWFya3NbYV0sdT1lLnNyYy5zbGljZShjLGwpLG9baV1bMV0udGVzdCh1KSl7MCE9PXUubGVuZ3RoJiZhKys7YnJlYWt9cmV0dXJuIGUubGluZT1hLHM9ZS5wdXNoKCJodG1sX2Jsb2NrIiwiIiwwKSxzLm1hcD1bdCxhXSxzLmNvbnRlbnQ9ZS5nZXRMaW5lcyh0LGEsZS5ibGtJbmRlbnQsITApLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmFzZSIsImJhc2Vmb250IiwiYmxvY2txdW90ZSIsImJvZHkiLCJjYXB0aW9uIiwiY2VudGVyIiwiY29sIiwiY29sZ3JvdXAiLCJkZCIsImRldGFpbHMiLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImZyYW1lIiwiZnJhbWVzZXQiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaHIiLCJodG1sIiwiaWZyYW1lIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFpbiIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGEiLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWN0aW9uIiwic291cmNlIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHU9dCsxLGM9ZS5tZC5ibG9jay5ydWxlci5nZXRSdWxlcygicGFyYWdyYXBoIiksbD1lLmxpbmVNYXg7Zm9yKHM9ZS5wYXJlbnRUeXBlLGUucGFyZW50VHlwZT0icGFyYWdyYXBoIjt1PGwmJiFlLmlzRW1wdHkodSk7dSsrKWlmKCEoZS5zQ291bnRbdV0tZS5ibGtJbmRlbnQ+MykmJiEoZS5zQ291bnRbdV08MCkpe2ZvcihyPSExLGk9MCxvPWMubGVuZ3RoO2k8bztpKyspaWYoY1tpXShlLHUsbCwhMCkpe3I9ITA7YnJlYWt9aWYocilicmVha31yZXR1cm4gbj1lLmdldExpbmVzKHQsdSxlLmJsa0luZGVudCwhMSkudHJpbSgpLGUubGluZT11LGE9ZS5wdXNoKCJwYXJhZ3JhcGhfb3BlbiIsInAiLDEpLGEubWFwPVt0LGUubGluZV0sYT1lLnB1c2goImlubGluZSIsIiIsMCksYS5jb250ZW50PW4sYS5tYXA9W3QsZS5saW5lXSxhLmNoaWxkcmVuPVtdLGE9ZS5wdXNoKCJwYXJhZ3JhcGhfY2xvc2UiLCJwIiwtMSksZS5wYXJlbnRUeXBlPXMsITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIGksYSxzLHUsYyxsLHAsZjtmb3IodGhpcy5zcmM9ZSx0aGlzLm1kPXQsdGhpcy5lbnY9bix0aGlzLnRva2Vucz1yLHRoaXMuYk1hcmtzPVtdLHRoaXMuZU1hcmtzPVtdLHRoaXMudFNoaWZ0PVtdLHRoaXMuc0NvdW50PVtdLHRoaXMuYnNDb3VudD1bXSx0aGlzLmJsa0luZGVudD0wLHRoaXMubGluZT0wLHRoaXMubGluZU1heD0wLHRoaXMudGlnaHQ9ITEsdGhpcy5kZEluZGVudD0tMSx0aGlzLnBhcmVudFR5cGU9InJvb3QiLHRoaXMubGV2ZWw9MCx0aGlzLnJlc3VsdD0iIixhPXRoaXMuc3JjLGY9ITEscz11PWw9cD0wLGM9YS5sZW5ndGg7dTxjO3UrKyl7aWYoaT1hLmNoYXJDb2RlQXQodSksIWYpe2lmKG8oaSkpe2wrKyw5PT09aT9wKz00LXAlNDpwKys7Y29udGludWV9Zj0hMH0xMCE9PWkmJnUhPT1jLTF8fCgxMCE9PWkmJnUrKyx0aGlzLmJNYXJrcy5wdXNoKHMpLHRoaXMuZU1hcmtzLnB1c2godSksdGhpcy50U2hpZnQucHVzaChsKSx0aGlzLnNDb3VudC5wdXNoKHApLHRoaXMuYnNDb3VudC5wdXNoKDApLGY9ITEsbD0wLHA9MCxzPXUrMSl9dGhpcy5iTWFya3MucHVzaChhLmxlbmd0aCksdGhpcy5lTWFya3MucHVzaChhLmxlbmd0aCksdGhpcy50U2hpZnQucHVzaCgwKSx0aGlzLnNDb3VudC5wdXNoKDApLHRoaXMuYnNDb3VudC5wdXNoKDApLHRoaXMubGluZU1heD10aGlzLmJNYXJrcy5sZW5ndGgtMX12YXIgaT1uKDEzNSksbz1uKDQpLmlzU3BhY2U7ci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IGkoZSx0LG4pO3JldHVybiByLmJsb2NrPSEwLG48MCYmdGhpcy5sZXZlbC0tLHIubGV2ZWw9dGhpcy5sZXZlbCxuPjAmJnRoaXMubGV2ZWwrKyx0aGlzLnRva2Vucy5wdXNoKHIpLHJ9LHIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYk1hcmtzW2VdK3RoaXMudFNoaWZ0W2VdPj10aGlzLmVNYXJrc1tlXX0sci5wcm90b3R5cGUuc2tpcEVtcHR5TGluZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMubGluZU1heDtlPHQmJiEodGhpcy5iTWFya3NbZV0rdGhpcy50U2hpZnRbZV08dGhpcy5lTWFya3NbZV0pO2UrKyk7cmV0dXJuIGV9LHIucHJvdG90eXBlLnNraXBTcGFjZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhpcy5zcmMubGVuZ3RoO2U8biYmKHQ9dGhpcy5zcmMuY2hhckNvZGVBdChlKSxvKHQpKTtlKyspO3JldHVybiBlfSxyLnByb3RvdHlwZS5za2lwU3BhY2VzQmFjaz1mdW5jdGlvbihlLHQpe2lmKGU8PXQpcmV0dXJuIGU7Zm9yKDtlPnQ7KWlmKCFvKHRoaXMuc3JjLmNoYXJDb2RlQXQoLS1lKSkpcmV0dXJuIGUrMTtyZXR1cm4gZX0sci5wcm90b3R5cGUuc2tpcENoYXJzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMuc3JjLmxlbmd0aDtlPG4mJnRoaXMuc3JjLmNoYXJDb2RlQXQoZSk9PT10O2UrKyk7cmV0dXJuIGV9LHIucHJvdG90eXBlLnNraXBDaGFyc0JhY2s9ZnVuY3Rpb24oZSx0LG4pe2lmKGU8PW4pcmV0dXJuIGU7Zm9yKDtlPm47KWlmKHQhPT10aGlzLnNyYy5jaGFyQ29kZUF0KC0tZSkpcmV0dXJuIGUrMTtyZXR1cm4gZX0sci5wcm90b3R5cGUuZ2V0TGluZXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxzLHUsYyxsLHAsZj1lO2lmKGU+PXQpcmV0dXJuIiI7Zm9yKGw9bmV3IEFycmF5KHQtZSksaT0wO2Y8dDtmKyssaSsrKXtmb3IoYT0wLHA9dT10aGlzLmJNYXJrc1tmXSxjPWYrMTx0fHxyP3RoaXMuZU1hcmtzW2ZdKzE6dGhpcy5lTWFya3NbZl07dTxjJiZhPG47KXtpZihzPXRoaXMuc3JjLmNoYXJDb2RlQXQodSksbyhzKSk5PT09cz9hKz00LShhK3RoaXMuYnNDb3VudFtmXSklNDphKys7ZWxzZXtpZighKHUtcDx0aGlzLnRTaGlmdFtmXSkpYnJlYWs7YSsrfXUrK31sW2ldPWE+bj9uZXcgQXJyYXkoYS1uKzEpLmpvaW4oIiAiKSt0aGlzLnNyYy5zbGljZSh1LGMpOnRoaXMuc3JjLnNsaWNlKHUsYyl9cmV0dXJuIGwuam9pbigiIil9LHIucHJvdG90eXBlLlRva2VuPWksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlO2Zvcih0aGlzLnJ1bGVyPW5ldyBpLGU9MDtlPG8ubGVuZ3RoO2UrKyl0aGlzLnJ1bGVyLnB1c2gob1tlXVswXSxvW2VdWzFdKTtmb3IodGhpcy5ydWxlcjI9bmV3IGksZT0wO2U8YS5sZW5ndGg7ZSsrKXRoaXMucnVsZXIyLnB1c2goYVtlXVswXSxhW2VdWzFdKX12YXIgaT1uKDEzNCksbz1bWyJ0ZXh0IixuKDU3NildLFsibmV3bGluZSIsbig1NzcpXSxbImVzY2FwZSIsbig1NzgpXSxbImJhY2t0aWNrcyIsbig1NzkpXSxbInN0cmlrZXRocm91Z2giLG4oMjY1KS50b2tlbml6ZV0sWyJlbXBoYXNpcyIsbigyNjYpLnRva2VuaXplXSxbImxpbmsiLG4oNTgwKV0sWyJpbWFnZSIsbig1ODEpXSxbImF1dG9saW5rIixuKDU4MildLFsiaHRtbF9pbmxpbmUiLG4oNTgzKV0sWyJlbnRpdHkiLG4oNTg0KV1dLGE9W1siYmFsYW5jZV9wYWlycyIsbig1ODUpXSxbInN0cmlrZXRocm91Z2giLG4oMjY1KS5wb3N0UHJvY2Vzc10sWyJlbXBoYXNpcyIsbigyNjYpLnBvc3RQcm9jZXNzXSxbInRleHRfY29sbGFwc2UiLG4oNTg2KV1dO3IucHJvdG90eXBlLnNraXBUb2tlbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5wb3MsaT10aGlzLnJ1bGVyLmdldFJ1bGVzKCIiKSxvPWkubGVuZ3RoLGE9ZS5tZC5vcHRpb25zLm1heE5lc3Rpbmcscz1lLmNhY2hlO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIHNbcl0pcmV0dXJuIHZvaWQoZS5wb3M9c1tyXSk7aWYoZS5sZXZlbDxhKWZvcihuPTA7bjxvJiYoZS5sZXZlbCsrLHQ9aVtuXShlLCEwKSxlLmxldmVsLS0sIXQpO24rKyk7ZWxzZSBlLnBvcz1lLnBvc01heDt0fHxlLnBvcysrLHNbcl09ZS5wb3N9LHIucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9dGhpcy5ydWxlci5nZXRSdWxlcygiIiksaT1yLmxlbmd0aCxvPWUucG9zTWF4LGE9ZS5tZC5vcHRpb25zLm1heE5lc3Rpbmc7ZS5wb3M8bzspe2lmKGUubGV2ZWw8YSlmb3Iobj0wO248aSYmISh0PXJbbl0oZSwhMSkpO24rKyk7aWYodCl7aWYoZS5wb3M+PW8pYnJlYWt9ZWxzZSBlLnBlbmRpbmcrPWUuc3JjW2UucG9zKytdfWUucGVuZGluZyYmZS5wdXNoUGVuZGluZygpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1uZXcgdGhpcy5TdGF0ZShlLHQsbixyKTtmb3IodGhpcy50b2tlbml6ZShzKSxvPXRoaXMucnVsZXIyLmdldFJ1bGVzKCIiKSxhPW8ubGVuZ3RoLGk9MDtpPGE7aSsrKW9baV0ocyl9LHIucHJvdG90eXBlLlN0YXRlPW4oNTg3KSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3N3aXRjaChlKXtjYXNlIDEwOmNhc2UgMzM6Y2FzZSAzNTpjYXNlIDM2OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDU4OmNhc2UgNjA6Y2FzZSA2MTpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSA5MTpjYXNlIDkyOmNhc2UgOTM6Y2FzZSA5NDpjYXNlIDk1OmNhc2UgOTY6Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSAxMjY6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUucG9zO248ZS5wb3NNYXgmJiFyKGUuc3JjLmNoYXJDb2RlQXQobikpOyluKys7cmV0dXJuIG4hPT1lLnBvcyYmKHR8fChlLnBlbmRpbmcrPWUuc3JjLnNsaWNlKGUucG9zLG4pKSxlLnBvcz1uLCEwKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGksbz1lLnBvcztpZigxMCE9PWUuc3JjLmNoYXJDb2RlQXQobykpcmV0dXJuITE7Zm9yKG49ZS5wZW5kaW5nLmxlbmd0aC0xLGk9ZS5wb3NNYXgsdHx8KG4+PTAmJjMyPT09ZS5wZW5kaW5nLmNoYXJDb2RlQXQobik/bj49MSYmMzI9PT1lLnBlbmRpbmcuY2hhckNvZGVBdChuLTEpPyhlLnBlbmRpbmc9ZS5wZW5kaW5nLnJlcGxhY2UoLyArJC8sIiIpLGUucHVzaCgiaGFyZGJyZWFrIiwiYnIiLDApKTooZS5wZW5kaW5nPWUucGVuZGluZy5zbGljZSgwLC0xKSxlLnB1c2goInNvZnRicmVhayIsImJyIiwwKSk6ZS5wdXNoKCJzb2Z0YnJlYWsiLCJiciIsMCkpLG8rKztvPGkmJnIoZS5zcmMuY2hhckNvZGVBdChvKSk7KW8rKztyZXR1cm4gZS5wb3M9bywhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7Zm9yKHZhciByPW4oNCkuaXNTcGFjZSxpPVtdLG89MDtvPDI1NjtvKyspaS5wdXNoKDApOyJcXCFcIiMkJSYnKCkqKywuLzo7PD0+P0BbXV5fYHt8fX4tIi5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXtpW2UuY2hhckNvZGVBdCgwKV09MX0pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG89ZS5wb3MsYT1lLnBvc01heDtpZig5MiE9PWUuc3JjLmNoYXJDb2RlQXQobykpcmV0dXJuITE7aWYoKytvPGEpe2lmKChuPWUuc3JjLmNoYXJDb2RlQXQobykpPDI1NiYmMCE9PWlbbl0pcmV0dXJuIHR8fChlLnBlbmRpbmcrPWUuc3JjW29dKSxlLnBvcys9MiwhMDtpZigxMD09PW4pe2Zvcih0fHxlLnB1c2goImhhcmRicmVhayIsImJyIiwwKSxvKys7bzxhJiYobj1lLnNyYy5jaGFyQ29kZUF0KG8pLHIobikpOylvKys7cmV0dXJuIGUucG9zPW8sITB9fXJldHVybiB0fHwoZS5wZW5kaW5nKz0iXFwiKSxlLnBvcysrLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdT1lLnBvcztpZig5NiE9PWUuc3JjLmNoYXJDb2RlQXQodSkpcmV0dXJuITE7Zm9yKG49dSx1Kysscj1lLnBvc01heDt1PHImJjk2PT09ZS5zcmMuY2hhckNvZGVBdCh1KTspdSsrO2ZvcihpPWUuc3JjLnNsaWNlKG4sdSksbz1hPXU7LTEhPT0obz1lLnNyYy5pbmRleE9mKCJgIixhKSk7KXtmb3IoYT1vKzE7YTxyJiY5Nj09PWUuc3JjLmNoYXJDb2RlQXQoYSk7KWErKztpZihhLW89PT1pLmxlbmd0aClyZXR1cm4gdHx8KHM9ZS5wdXNoKCJjb2RlX2lubGluZSIsImNvZGUiLDApLHMubWFya3VwPWkscy5jb250ZW50PWUuc3JjLnNsaWNlKHUsbykucmVwbGFjZSgvWyBcbl0rL2csIiAiKS50cmltKCkpLGUucG9zPWEsITB9cmV0dXJuIHR8fChlLnBlbmRpbmcrPWkpLGUucG9zKz1pLmxlbmd0aCwhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KS5ub3JtYWxpemVSZWZlcmVuY2UsaT1uKDQpLmlzU3BhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sbyxhLHMsdSxjLGwscCxmLGQsaD0iIixtPWUucG9zLGc9ZS5wb3NNYXgseT1lLnBvcyx2PSEwO2lmKDkxIT09ZS5zcmMuY2hhckNvZGVBdChlLnBvcykpcmV0dXJuITE7aWYodT1lLnBvcysxLChzPWUubWQuaGVscGVycy5wYXJzZUxpbmtMYWJlbChlLGUucG9zLCEwKSk8MClyZXR1cm4hMTtpZigoYz1zKzEpPGcmJjQwPT09ZS5zcmMuY2hhckNvZGVBdChjKSl7Zm9yKHY9ITEsYysrO2M8ZyYmKG89ZS5zcmMuY2hhckNvZGVBdChjKSxpKG8pfHwxMD09PW8pO2MrKyk7aWYoYz49ZylyZXR1cm4hMTtmb3IoeT1jLGw9ZS5tZC5oZWxwZXJzLnBhcnNlTGlua0Rlc3RpbmF0aW9uKGUuc3JjLGMsZS5wb3NNYXgpLGwub2smJihoPWUubWQubm9ybWFsaXplTGluayhsLnN0ciksZS5tZC52YWxpZGF0ZUxpbmsoaCk/Yz1sLnBvczpoPSIiKSx5PWM7YzxnJiYobz1lLnNyYy5jaGFyQ29kZUF0KGMpLGkobyl8fDEwPT09byk7YysrKTtpZihsPWUubWQuaGVscGVycy5wYXJzZUxpbmtUaXRsZShlLnNyYyxjLGUucG9zTWF4KSxjPGcmJnkhPT1jJiZsLm9rKWZvcihmPWwuc3RyLGM9bC5wb3M7YzxnJiYobz1lLnNyYy5jaGFyQ29kZUF0KGMpLGkobyl8fDEwPT09byk7YysrKTtlbHNlIGY9IiI7KGM+PWd8fDQxIT09ZS5zcmMuY2hhckNvZGVBdChjKSkmJih2PSEwKSxjKyt9aWYodil7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgZS5lbnYucmVmZXJlbmNlcylyZXR1cm4hMTtpZihjPGcmJjkxPT09ZS5zcmMuY2hhckNvZGVBdChjKT8oeT1jKzEsYz1lLm1kLmhlbHBlcnMucGFyc2VMaW5rTGFiZWwoZSxjKSxjPj0wP2E9ZS5zcmMuc2xpY2UoeSxjKyspOmM9cysxKTpjPXMrMSxhfHwoYT1lLnNyYy5zbGljZSh1LHMpKSwhKHA9ZS5lbnYucmVmZXJlbmNlc1tyKGEpXSkpcmV0dXJuIGUucG9zPW0sITE7aD1wLmhyZWYsZj1wLnRpdGxlfXJldHVybiB0fHwoZS5wb3M9dSxlLnBvc01heD1zLGQ9ZS5wdXNoKCJsaW5rX29wZW4iLCJhIiwxKSxkLmF0dHJzPW49W1siaHJlZiIsaF1dLGYmJm4ucHVzaChbInRpdGxlIixmXSksZS5tZC5pbmxpbmUudG9rZW5pemUoZSksZD1lLnB1c2goImxpbmtfY2xvc2UiLCJhIiwtMSkpLGUucG9zPWMsZS5wb3NNYXg9ZywhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KS5ub3JtYWxpemVSZWZlcmVuY2UsaT1uKDQpLmlzU3BhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sbyxhLHMsdSxjLGwscCxmLGQsaCxtLGcseT0iIix2PWUucG9zLGI9ZS5wb3NNYXg7aWYoMzMhPT1lLnNyYy5jaGFyQ29kZUF0KGUucG9zKSlyZXR1cm4hMTtpZig5MSE9PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MrMSkpcmV0dXJuITE7aWYoYz1lLnBvcysyLCh1PWUubWQuaGVscGVycy5wYXJzZUxpbmtMYWJlbChlLGUucG9zKzEsITEpKTwwKXJldHVybiExO2lmKChsPXUrMSk8YiYmNDA9PT1lLnNyYy5jaGFyQ29kZUF0KGwpKXtmb3IobCsrO2w8YiYmKG89ZS5zcmMuY2hhckNvZGVBdChsKSxpKG8pfHwxMD09PW8pO2wrKyk7aWYobD49YilyZXR1cm4hMTtmb3IoZz1sLGY9ZS5tZC5oZWxwZXJzLnBhcnNlTGlua0Rlc3RpbmF0aW9uKGUuc3JjLGwsZS5wb3NNYXgpLGYub2smJih5PWUubWQubm9ybWFsaXplTGluayhmLnN0ciksZS5tZC52YWxpZGF0ZUxpbmsoeSk/bD1mLnBvczp5PSIiKSxnPWw7bDxiJiYobz1lLnNyYy5jaGFyQ29kZUF0KGwpLGkobyl8fDEwPT09byk7bCsrKTtpZihmPWUubWQuaGVscGVycy5wYXJzZUxpbmtUaXRsZShlLnNyYyxsLGUucG9zTWF4KSxsPGImJmchPT1sJiZmLm9rKWZvcihkPWYuc3RyLGw9Zi5wb3M7bDxiJiYobz1lLnNyYy5jaGFyQ29kZUF0KGwpLGkobyl8fDEwPT09byk7bCsrKTtlbHNlIGQ9IiI7aWYobD49Ynx8NDEhPT1lLnNyYy5jaGFyQ29kZUF0KGwpKXJldHVybiBlLnBvcz12LCExO2wrK31lbHNle2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGUuZW52LnJlZmVyZW5jZXMpcmV0dXJuITE7aWYobDxiJiY5MT09PWUuc3JjLmNoYXJDb2RlQXQobCk/KGc9bCsxLGw9ZS5tZC5oZWxwZXJzLnBhcnNlTGlua0xhYmVsKGUsbCksbD49MD9zPWUuc3JjLnNsaWNlKGcsbCsrKTpsPXUrMSk6bD11KzEsc3x8KHM9ZS5zcmMuc2xpY2UoYyx1KSksIShwPWUuZW52LnJlZmVyZW5jZXNbcihzKV0pKXJldHVybiBlLnBvcz12LCExO3k9cC5ocmVmLGQ9cC50aXRsZX1yZXR1cm4gdHx8KGE9ZS5zcmMuc2xpY2UoYyx1KSxlLm1kLmlubGluZS5wYXJzZShhLGUubWQsZS5lbnYsbT1bXSksaD1lLnB1c2goImltYWdlIiwiaW1nIiwwKSxoLmF0dHJzPW49W1sic3JjIix5XSxbImFsdCIsIiJdXSxoLmNoaWxkcmVuPW0saC5jb250ZW50PWEsZCYmbi5wdXNoKFsidGl0bGUiLGRdKSksZS5wb3M9bCxlLnBvc01heD1iLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0vXjwoW2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSopPi8saT0vXjwoW2EtekEtWl1bYS16QS1aMC05Ky5cLV17MSwzMX0pOihbXjw+XHgwMC1ceDIwXSopPi87ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sbyxhLHMsdSxjLGw9ZS5wb3M7cmV0dXJuIDYwPT09ZS5zcmMuY2hhckNvZGVBdChsKSYmKG49ZS5zcmMuc2xpY2UobCksIShuLmluZGV4T2YoIj4iKTwwKSYmKGkudGVzdChuKT8obz1uLm1hdGNoKGkpLHM9b1swXS5zbGljZSgxLC0xKSx1PWUubWQubm9ybWFsaXplTGluayhzKSwhIWUubWQudmFsaWRhdGVMaW5rKHUpJiYodHx8KGM9ZS5wdXNoKCJsaW5rX29wZW4iLCJhIiwxKSxjLmF0dHJzPVtbImhyZWYiLHVdXSxjLm1hcmt1cD0iYXV0b2xpbmsiLGMuaW5mbz0iYXV0byIsYz1lLnB1c2goInRleHQiLCIiLDApLGMuY29udGVudD1lLm1kLm5vcm1hbGl6ZUxpbmtUZXh0KHMpLGM9ZS5wdXNoKCJsaW5rX2Nsb3NlIiwiYSIsLTEpLGMubWFya3VwPSJhdXRvbGluayIsYy5pbmZvPSJhdXRvIiksZS5wb3MrPW9bMF0ubGVuZ3RoLCEwKSk6ISFyLnRlc3QobikmJihhPW4ubWF0Y2gocikscz1hWzBdLnNsaWNlKDEsLTEpLHU9ZS5tZC5ub3JtYWxpemVMaW5rKCJtYWlsdG86IitzKSwhIWUubWQudmFsaWRhdGVMaW5rKHUpJiYodHx8KGM9ZS5wdXNoKCJsaW5rX29wZW4iLCJhIiwxKSxjLmF0dHJzPVtbImhyZWYiLHVdXSxjLm1hcmt1cD0iYXV0b2xpbmsiLGMuaW5mbz0iYXV0byIsYz1lLnB1c2goInRleHQiLCIiLDApLGMuY29udGVudD1lLm1kLm5vcm1hbGl6ZUxpbmtUZXh0KHMpLGM9ZS5wdXNoKCJsaW5rX2Nsb3NlIiwiYSIsLTEpLGMubWFya3VwPSJhdXRvbGluayIsYy5pbmZvPSJhdXRvIiksZS5wb3MrPWFbMF0ubGVuZ3RoLCEwKSkpKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0zMnxlO3JldHVybiB0Pj05NyYmdDw9MTIyfXZhciBpPW4oMjY0KS5IVE1MX1RBR19SRTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixvLGEscyx1PWUucG9zO3JldHVybiEhZS5tZC5vcHRpb25zLmh0bWwmJihhPWUucG9zTWF4LCEoNjAhPT1lLnNyYy5jaGFyQ29kZUF0KHUpfHx1KzI+PWEpJiYoISgzMyE9PShuPWUuc3JjLmNoYXJDb2RlQXQodSsxKSkmJjYzIT09biYmNDchPT1uJiYhcihuKSkmJighIShvPWUuc3JjLnNsaWNlKHUpLm1hdGNoKGkpKSYmKHR8fChzPWUucHVzaCgiaHRtbF9pbmxpbmUiLCIiLDApLHMuY29udGVudD1lLnNyYy5zbGljZSh1LHUrb1swXS5sZW5ndGgpKSxlLnBvcys9b1swXS5sZW5ndGgsITApKSkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MSksaT1uKDQpLmhhcyxvPW4oNCkuaXNWYWxpZEVudGl0eUNvZGUsYT1uKDQpLmZyb21Db2RlUG9pbnQscz0vXiYjKCg/OnhbYS1mMC05XXsxLDh9fFswLTldezEsOH0pKTsvaSx1PS9eJihbYS16XVthLXowLTldezEsMzF9KTsvaTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixjLGw9ZS5wb3MscD1lLnBvc01heDtpZigzOCE9PWUuc3JjLmNoYXJDb2RlQXQobCkpcmV0dXJuITE7aWYobCsxPHApaWYoMzU9PT1lLnNyYy5jaGFyQ29kZUF0KGwrMSkpe2lmKGM9ZS5zcmMuc2xpY2UobCkubWF0Y2gocykpcmV0dXJuIHR8fChuPSJ4Ij09PWNbMV1bMF0udG9Mb3dlckNhc2UoKT9wYXJzZUludChjWzFdLnNsaWNlKDEpLDE2KTpwYXJzZUludChjWzFdLDEwKSxlLnBlbmRpbmcrPWEobyhuKT9uOjY1NTMzKSksZS5wb3MrPWNbMF0ubGVuZ3RoLCEwfWVsc2UgaWYoKGM9ZS5zcmMuc2xpY2UobCkubWF0Y2godSkpJiZpKHIsY1sxXSkpcmV0dXJuIHR8fChlLnBlbmRpbmcrPXJbY1sxXV0pLGUucG9zKz1jWzBdLmxlbmd0aCwhMDtyZXR1cm4gdHx8KGUucGVuZGluZys9IiYiKSxlLnBvcysrLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz1lLmRlbGltaXRlcnMsYT1lLmRlbGltaXRlcnMubGVuZ3RoO2Zvcih0PTA7dDxhO3QrKylpZihyPW9bdF0sci5jbG9zZSlmb3Iobj10LXIuanVtcC0xO24+PTA7KXtpZihpPW9bbl0saS5vcGVuJiZpLm1hcmtlcj09PXIubWFya2VyJiZpLmVuZDwwJiZpLmxldmVsPT09ci5sZXZlbCl7dmFyIHM9KGkuY2xvc2V8fHIub3BlbikmJiJ1bmRlZmluZWQiIT09dHlwZW9mIGkubGVuZ3RoJiYidW5kZWZpbmVkIiE9PXR5cGVvZiByLmxlbmd0aCYmKGkubGVuZ3RoK3IubGVuZ3RoKSUzPT09MDtpZighcyl7ci5qdW1wPXQtbixyLm9wZW49ITEsaS5lbmQ9dCxpLmp1bXA9MDticmVha319bi09aS5qdW1wKzF9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPTAsaT1lLnRva2VucyxvPWUudG9rZW5zLmxlbmd0aDtmb3IodD1uPTA7dDxvO3QrKylyKz1pW3RdLm5lc3RpbmcsaVt0XS5sZXZlbD1yLCJ0ZXh0Ij09PWlbdF0udHlwZSYmdCsxPG8mJiJ0ZXh0Ij09PWlbdCsxXS50eXBlP2lbdCsxXS5jb250ZW50PWlbdF0uY29udGVudCtpW3QrMV0uY29udGVudDoodCE9PW4mJihpW25dPWlbdF0pLG4rKyk7dCE9PW4mJihpLmxlbmd0aD1uKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt0aGlzLnNyYz1lLHRoaXMuZW52PW4sdGhpcy5tZD10LHRoaXMudG9rZW5zPXIsdGhpcy5wb3M9MCx0aGlzLnBvc01heD10aGlzLnNyYy5sZW5ndGgsdGhpcy5sZXZlbD0wLHRoaXMucGVuZGluZz0iIix0aGlzLnBlbmRpbmdMZXZlbD0wLHRoaXMuY2FjaGU9e30sdGhpcy5kZWxpbWl0ZXJzPVtdfXZhciBpPW4oMTM1KSxvPW4oNCkuaXNXaGl0ZVNwYWNlLGE9big0KS5pc1B1bmN0Q2hhcixzPW4oNCkuaXNNZEFzY2lpUHVuY3Q7ci5wcm90b3R5cGUucHVzaFBlbmRpbmc9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgaSgidGV4dCIsIiIsMCk7cmV0dXJuIGUuY29udGVudD10aGlzLnBlbmRpbmcsZS5sZXZlbD10aGlzLnBlbmRpbmdMZXZlbCx0aGlzLnRva2Vucy5wdXNoKGUpLHRoaXMucGVuZGluZz0iIixlfSxyLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnBlbmRpbmcmJnRoaXMucHVzaFBlbmRpbmcoKTt2YXIgcj1uZXcgaShlLHQsbik7cmV0dXJuIG48MCYmdGhpcy5sZXZlbC0tLHIubGV2ZWw9dGhpcy5sZXZlbCxuPjAmJnRoaXMubGV2ZWwrKyx0aGlzLnBlbmRpbmdMZXZlbD10aGlzLmxldmVsLHRoaXMudG9rZW5zLnB1c2gocikscn0sci5wcm90b3R5cGUuc2NhbkRlbGltcz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSx1LGMsbCxwLGYsZCxoPWUsbT0hMCxnPSEwLHk9dGhpcy5wb3NNYXgsdj10aGlzLnNyYy5jaGFyQ29kZUF0KGUpO2ZvcihuPWU+MD90aGlzLnNyYy5jaGFyQ29kZUF0KGUtMSk6MzI7aDx5JiZ0aGlzLnNyYy5jaGFyQ29kZUF0KGgpPT09djspaCsrO3JldHVybiBpPWgtZSxyPWg8eT90aGlzLnNyYy5jaGFyQ29kZUF0KGgpOjMyLHA9cyhuKXx8YShTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSxkPXMocil8fGEoU3RyaW5nLmZyb21DaGFyQ29kZShyKSksbD1vKG4pLGY9byhyKSxmP209ITE6ZCYmKGx8fHB8fChtPSExKSksbD9nPSExOnAmJihmfHxkfHwoZz0hMSkpLHQ/KHU9bSxjPWcpOih1PW0mJighZ3x8cCksYz1nJiYoIW18fGQpKSx7Y2FuX29wZW46dSxjYW5fY2xvc2U6YyxsZW5ndGg6aX19LHIucHJvdG90eXBlLlRva2VuPWksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3Quc3JjX0FueT1uKDI2OCkuc291cmNlLHQuc3JjX0NjPW4oMjY5KS5zb3VyY2UsdC5zcmNfWj1uKDI3MCkuc291cmNlLHQuc3JjX1A9bigxMzYpLnNvdXJjZSx0LnNyY19aUENjPVt0LnNyY19aLHQuc3JjX1AsdC5zcmNfQ2NdLmpvaW4oInwiKSx0LnNyY19aQ2M9W3Quc3JjX1osdC5zcmNfQ2NdLmpvaW4oInwiKTtyZXR1cm4gdC5zcmNfcHNldWRvX2xldHRlcj0iKD86KD8hWz48XHVmZjVjXXwiK3Quc3JjX1pQQ2MrIikiK3Quc3JjX0FueSsiKSIsdC5zcmNfaXA0PSIoPzooMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KSIsdC5zcmNfYXV0aD0iKD86KD86KD8hIit0LnNyY19aQ2MrInxbQC9cXFtcXF0oKV0pLikrQCk/Iix0LnNyY19wb3J0PSIoPzo6KD86Nig/OlswLTRdXFxkezN9fDUoPzpbMC00XVxcZHsyfXw1KD86WzAtMl1cXGR8M1swLTVdKSkpfFsxLTVdP1xcZHsxLDR9KSk/Iix0LnNyY19ob3N0X3Rlcm1pbmF0b3I9Iig/PSR8Wz48XHVmZjVjXXwiK3Quc3JjX1pQQ2MrIikoPyEtfF98OlxcZHxcXC4tfFxcLig/ISR8Iit0LnNyY19aUENjKyIpKSIsdC5zcmNfcGF0aD0iKD86Wy8/I10oPzooPyEiK3Quc3JjX1pDYysifFs+PFx1ZmY1Y118WygpW1xcXXt9LixcIic/IVxcLV0pLnxcXFsoPzooPyEiK3Quc3JjX1pDYysifFxcXSkuKSpcXF18XFwoKD86KD8hIit0LnNyY19aQ2MrInxbKV0pLikqXFwpfFxceyg/Oig/ISIrdC5zcmNfWkNjKyd8W31dKS4pKlxcfXxcXCIoPzooPyEnK3Quc3JjX1pDYysnfFsiXSkuKStcXCJ8XFxcJyg/Oig/IScrdC5zcmNfWkNjKyJ8WyddKS4pK1xcJ3xcXCcoPz0iK3Quc3JjX3BzZXVkb19sZXR0ZXIrInxbLV0pLnxcXC57MiwzfVthLXpBLVowLTklL118XFwuKD8hIit0LnNyY19aQ2MrInxbLl0pLnwiKyhlJiZlWyItLS0iXT8iXFwtKD8hLS0oPzpbXi1dfCQpKSg/Oi0qKXwiOiJcXC0rfCIpKyJcXCwoPyEiK3Quc3JjX1pDYysiKS58XFwhKD8hIit0LnNyY19aQ2MrInxbIV0pLnxcXD8oPyEiK3Quc3JjX1pDYysifFs/XSkuKSt8XFwvKT8iLHQuc3JjX2VtYWlsX25hbWU9J1tcXC07OiY9XFwrXFwkLFxcIlxcLmEtekEtWjAtOV9dKycsdC5zcmNfeG49InhuLS1bYS16MC05XFwtXXsxLDU5fSIsdC5zcmNfZG9tYWluX3Jvb3Q9Iig/OiIrdC5zcmNfeG4rInwiK3Quc3JjX3BzZXVkb19sZXR0ZXIrInsxLDYzfSkiLHQuc3JjX2RvbWFpbj0iKD86Iit0LnNyY194bisifCg/OiIrdC5zcmNfcHNldWRvX2xldHRlcisiKXwoPzoiK3Quc3JjX3BzZXVkb19sZXR0ZXIrIig/Oi0oPyEtKXwiK3Quc3JjX3BzZXVkb19sZXR0ZXIrIil7MCw2MX0iK3Quc3JjX3BzZXVkb19sZXR0ZXIrIikpIix0LnNyY19ob3N0PSIoPzooPzooPzooPzoiK3Quc3JjX2RvbWFpbisiKVxcLikqIit0LnNyY19kb21haW4rIikpIix0LnRwbF9ob3N0X2Z1enp5PSIoPzoiK3Quc3JjX2lwNCsifCg/Oig/Oig/OiIrdC5zcmNfZG9tYWluKyIpXFwuKSsoPzolVExEUyUpKSkiLHQudHBsX2hvc3Rfbm9faXBfZnV6enk9Iig/Oig/Oig/OiIrdC5zcmNfZG9tYWluKyIpXFwuKSsoPzolVExEUyUpKSIsdC5zcmNfaG9zdF9zdHJpY3Q9dC5zcmNfaG9zdCt0LnNyY19ob3N0X3Rlcm1pbmF0b3IsdC50cGxfaG9zdF9mdXp6eV9zdHJpY3Q9dC50cGxfaG9zdF9mdXp6eSt0LnNyY19ob3N0X3Rlcm1pbmF0b3IsdC5zcmNfaG9zdF9wb3J0X3N0cmljdD10LnNyY19ob3N0K3Quc3JjX3BvcnQrdC5zcmNfaG9zdF90ZXJtaW5hdG9yLHQudHBsX2hvc3RfcG9ydF9mdXp6eV9zdHJpY3Q9dC50cGxfaG9zdF9mdXp6eSt0LnNyY19wb3J0K3Quc3JjX2hvc3RfdGVybWluYXRvcix0LnRwbF9ob3N0X3BvcnRfbm9faXBfZnV6enlfc3RyaWN0PXQudHBsX2hvc3Rfbm9faXBfZnV6enkrdC5zcmNfcG9ydCt0LnNyY19ob3N0X3Rlcm1pbmF0b3IsdC50cGxfaG9zdF9mdXp6eV90ZXN0PSJsb2NhbGhvc3R8d3d3XFwufFxcLlxcZHsxLDN9XFwufCg/OlxcLig/OiVUTERTJSkoPzoiK3Quc3JjX1pQQ2MrInw+fCQpKSIsdC50cGxfZW1haWxfZnV6enk9IihefFs+PFx1ZmY1Y118XFwofCIrdC5zcmNfWkNjKyIpKCIrdC5zcmNfZW1haWxfbmFtZSsiQCIrdC50cGxfaG9zdF9mdXp6eV9zdHJpY3QrIikiLHQudHBsX2xpbmtfZnV6enk9IihefCg/IVsuOi9cXC1fQF0pKD86WyQrPD0+XmB8XHVmZjVjXXwiK3Quc3JjX1pQQ2MrIikpKCg/IVskKzw9Pl5gfFx1ZmY1Y10pIit0LnRwbF9ob3N0X3BvcnRfZnV6enlfc3RyaWN0K3Quc3JjX3BhdGgrIikiLHQudHBsX2xpbmtfbm9faXBfZnV6enk9IihefCg/IVsuOi9cXC1fQF0pKD86WyQrPD0+XmB8XHVmZjVjXXwiK3Quc3JjX1pQQ2MrIikpKCg/IVskKzw9Pl5gfFx1ZmY1Y10pIit0LnRwbF9ob3N0X3BvcnRfbm9faXBfZnV6enlfc3RyaWN0K3Quc3JjX3BhdGgrIikiLHR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMSx4aHRtbE91dDohMSxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLHR5cG9ncmFwaGVyOiExLHF1b3RlczoiXHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5IixoaWdobGlnaHQ6bnVsbCxtYXhOZXN0aW5nOjEwMH0sY29tcG9uZW50czp7Y29yZTp7fSxibG9jazp7fSxpbmxpbmU6e319fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e29wdGlvbnM6e2h0bWw6ITEseGh0bWxPdXQ6ITEsYnJlYWtzOiExLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbGlua2lmeTohMSx0eXBvZ3JhcGhlcjohMSxxdW90ZXM6Ilx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOSIsaGlnaGxpZ2h0Om51bGwsbWF4TmVzdGluZzoyMH0sY29tcG9uZW50czp7Y29yZTp7cnVsZXM6WyJub3JtYWxpemUiLCJibG9jayIsImlubGluZSJdfSxibG9jazp7cnVsZXM6WyJwYXJhZ3JhcGgiXX0saW5saW5lOntydWxlczpbInRleHQiXSxydWxlczI6WyJiYWxhbmNlX3BhaXJzIiwidGV4dF9jb2xsYXBzZSJdfX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMCx4aHRtbE91dDohMCxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLHR5cG9ncmFwaGVyOiExLHF1b3RlczoiXHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5IixoaWdobGlnaHQ6bnVsbCxtYXhOZXN0aW5nOjIwfSxjb21wb25lbnRzOntjb3JlOntydWxlczpbIm5vcm1hbGl6ZSIsImJsb2NrIiwiaW5saW5lIl19LGJsb2NrOntydWxlczpbImJsb2NrcXVvdGUiLCJjb2RlIiwiZmVuY2UiLCJoZWFkaW5nIiwiaHIiLCJodG1sX2Jsb2NrIiwibGhlYWRpbmciLCJsaXN0IiwicmVmZXJlbmNlIiwicGFyYWdyYXBoIl19LGlubGluZTp7cnVsZXM6WyJhdXRvbGluayIsImJhY2t0aWNrcyIsImVtcGhhc2lzIiwiZW50aXR5IiwiZXNjYXBlIiwiaHRtbF9pbmxpbmUiLCJpbWFnZSIsImxpbmsiLCJuZXdsaW5lIiwidGV4dCJdLHJ1bGVzMjpbImJhbGFuY2VfcGFpcnMiLCJlbXBoYXNpcyIsInRleHRfY29sbGFwc2UiXX19fX0sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGQuZGVmYXVsdHMsdGhpcy5ydWxlcz1oLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5vcHRpb25zLnRhYmxlcz90aGlzLnJ1bGVzPWgudGFibGVzOnRoaXMucnVsZXM9aC5nZm0pfWZ1bmN0aW9uIHIoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8ZC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz1tLm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IGksdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucywhdGhpcy5saW5rcyl0aHJvdyBuZXcgRXJyb3IoIlRva2VucyBhcnJheSByZXF1aXJlcyBhIGBsaW5rc2AgcHJvcGVydHkuIik7dGhpcy5vcHRpb25zLmdmbT90aGlzLm9wdGlvbnMuYnJlYWtzP3RoaXMucnVsZXM9bS5icmVha3M6dGhpcy5ydWxlcz1tLmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPW0ucGVkYW50aWMpfWZ1bmN0aW9uIGkoZSl7dGhpcy5vcHRpb25zPWV8fHt9fWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGQuZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IGksdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9uc31mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5yZXBsYWNlKC8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLCJjb2xvbiI9PT10PyI6IjoiIyI9PT10LmNoYXJBdCgwKT8ieCI9PT10LmNoYXJBdCgxKT9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrdC5zdWJzdHJpbmcoMSkpOiIifSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIse3JlcGxhY2U6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj1uLnNvdXJjZXx8bixuPW4ucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZSh0LG4pLHRoaXN9LGdldFJlZ2V4OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX19fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZ1siICIrZV18fCgvXlteOl0rOlwvKlteXC9dKiQvLnRlc3QoZSk/Z1siICIrZV09ZSsiLyI6Z1siICIrZV09ZS5yZXBsYWNlKC9bXlwvXSokLywiIikpLGU9Z1siICIrZV0sIi8vIj09PXQuc2xpY2UoMCwyKT9lLnJlcGxhY2UoLzpbXHNcU10qLywiOiIpK3Q6Ii8iPT09dC5jaGFyQXQoMCk/ZS5yZXBsYWNlKC8oOlwvKlteXC9dKilbXHNcU10qLywiJDEiKSt0OmUrdH1mdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGQoZSx0LHIpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGV8fG51bGw9PT1lKXRocm93IG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpO2lmKCJzdHJpbmciIT09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkrIiwgc3RyaW5nIGV4cGVjdGVkIik7aWYocnx8ImZ1bmN0aW9uIj09PXR5cGVvZiB0KXtyfHwocj10LHQ9bnVsbCksdD1mKHt9LGQuZGVmYXVsdHMsdHx8e30pO3ZhciBpLG8sdT10LmhpZ2hsaWdodCxjPTA7dHJ5e2k9bi5sZXgoZSx0KX1jYXRjaChlKXtyZXR1cm4gcihlKX1vPWkubGVuZ3RoO3ZhciBsPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIHQuaGlnaGxpZ2h0PXUscihlKTt2YXIgbjt0cnl7bj1hLnBhcnNlKGksdCl9Y2F0Y2godCl7ZT10fXJldHVybiB0LmhpZ2hsaWdodD11LGU/cihlKTpyKG51bGwsbil9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBsKCk7aWYoZGVsZXRlIHQuaGlnaGxpZ2h0LCFvKXJldHVybiBsKCk7Zm9yKDtjPGkubGVuZ3RoO2MrKykhZnVuY3Rpb24oZSl7ImNvZGUiIT09ZS50eXBlPy0tb3x8bCgpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiB0P2wodCk6bnVsbD09bnx8bj09PWUudGV4dD8tLW98fGwoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLHZvaWQoLS1vfHxsKCkpKX0pfShpW2NdKX1lbHNlIHRyeXtyZXR1cm4gdCYmKHQ9Zih7fSxkLmRlZmF1bHRzLHQpKSxhLnBhcnNlKG4ubGV4KGUsdCksdCl9Y2F0Y2goZSl7aWYoZS5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLCh0fHxkLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrcyhlLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3Rocm93IGV9fXZhciBoPXtuZXdsaW5lOi9eXG4rLyxjb2RlOi9eKCB7NH1bXlxuXStcbiopKy8sZmVuY2VzOnAsaHI6L14gezAsM30oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XCogKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpwLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxkZWZ8XG57Mix9KD8hICkoPyFcMWJ1bGwgKVxuKnxccyokKS8saHRtbDovXiAqKD86Y29tbWVudCAqKD86XG58XHMqJCl8Y2xvc2VkICooPzpcbnsyLH18XHMqJCl8Y2xvc2luZyAqKD86XG57Mix9fFxzKiQpKS8sZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICpcbj8gKjw/KFteXHM+XSspPj8oPzooPzogK1xuPyAqfCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6cCxsaGVhZGluZzovXihbXlxuXSspXG4gKig9fC0pezIsfSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14oW15cbl0rKD86XG4/KD8haHJ8aGVhZGluZ3xsaGVhZGluZ3wgezAsM30+fHRhZylbXlxuXSspKykvLHRleHQ6L15bXlxuXSsvfTtoLl9sYWJlbD0vKD86XFxbXFtcXV18W15cW1xdXSkrLyxoLl90aXRsZT0vKD86Iig/OlxcInxbXiJdfCJbXiJcbl0qIikqInwnXG4/KD86W14nXG5dK1xuPykqJ3xcKFteKCldKlwpKS8saC5kZWY9YyhoLmRlZikucmVwbGFjZSgibGFiZWwiLGguX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsaC5fdGl0bGUpLmdldFJlZ2V4KCksaC5idWxsZXQ9Lyg/OlsqKy1dfFxkK1wuKS8saC5pdGVtPS9eKCAqKShidWxsKSBbXlxuXSooPzpcbig/IVwxYnVsbCApW15cbl0qKSovLGguaXRlbT1jKGguaXRlbSwiZ20iKS5yZXBsYWNlKC9idWxsL2csaC5idWxsZXQpLmdldFJlZ2V4KCksaC5saXN0PWMoaC5saXN0KS5yZXBsYWNlKC9idWxsL2csaC5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIraC5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxoLl90YWc9Iig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIixoLmh0bWw9YyhoLmh0bWwpLnJlcGxhY2UoImNvbW1lbnQiLC88IS0tW1xzXFNdKj8tLT4vKS5yZXBsYWNlKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pLnJlcGxhY2UoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFxzW14nIlwvPlxzXSopKj9cLz8+LykucmVwbGFjZSgvdGFnL2csaC5fdGFnKS5nZXRSZWdleCgpLGgucGFyYWdyYXBoPWMoaC5wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixoLmhyKS5yZXBsYWNlKCJoZWFkaW5nIixoLmhlYWRpbmcpLnJlcGxhY2UoImxoZWFkaW5nIixoLmxoZWFkaW5nKS5yZXBsYWNlKCJ0YWciLCI8IitoLl90YWcpLmdldFJlZ2V4KCksaC5ibG9ja3F1b3RlPWMoaC5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLGgucGFyYWdyYXBoKS5nZXRSZWdleCgpLGgubm9ybWFsPWYoe30saCksaC5nZm09Zih7fSxoLm5vcm1hbCx7ZmVuY2VzOi9eICooYHszLH18fnszLH0pWyBcLl0qKFxTKyk/ICpcbihbXHNcU10qPylcbj8gKlwxICooPzpcbit8JCkvLHBhcmFncmFwaDovXi8saGVhZGluZzovXiAqKCN7MSw2fSkgKyhbXlxuXSs/KSAqIyogKig/OlxuK3wkKS99KSxoLmdmbS5wYXJhZ3JhcGg9YyhoLnBhcmFncmFwaCkucmVwbGFjZSgiKD8hIiwiKD8hIitoLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IitoLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikuZ2V0UmVnZXgoKSxoLnRhYmxlcz1mKHt9LGguZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLG4ucnVsZXM9aCxuLmxleD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbih0KS5sZXgoZSl9LG4ucHJvdG90eXBlLmxleD1mdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXHUwMGEwL2csIiAiKS5yZXBsYWNlKC9cdTI0MjQvZywiXG4iKSx0aGlzLnRva2VuKGUsITApfSxuLnByb3RvdHlwZS50b2tlbj1mdW5jdGlvbihlLHQpe2U9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtmb3IodmFyIG4scixpLG8sYSxzLHUsYyxsLHAsZjtlOylpZigoaT10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxpWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSksaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxpPWlbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP2k6aS5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOmlbMl0sdGV4dDppWzNdfHwiIn0pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDppWzFdLmxlbmd0aCx0ZXh0OmlbMl19KTtlbHNlIGlmKHQmJihpPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHM9e3R5cGU6InRhYmxlIixoZWFkZXI6aVsxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246aVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOmlbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LGM9MDtjPHMuYWxpZ24ubGVuZ3RoO2MrKykvXiAqLSs6ICokLy50ZXN0KHMuYWxpZ25bY10pP3MuYWxpZ25bY109InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChzLmFsaWduW2NdKT9zLmFsaWduW2NdPSJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qocy5hbGlnbltjXSk/cy5hbGlnbltjXT0ibGVmdCI6cy5hbGlnbltjXT1udWxsO2ZvcihjPTA7YzxzLmNlbGxzLmxlbmd0aDtjKyspcy5jZWxsc1tjXT1zLmNlbGxzW2NdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKHMpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLmhyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaHIifSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYmxvY2txdW90ZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImJsb2NrcXVvdGVfc3RhcnQifSksaT1pWzBdLnJlcGxhY2UoL14gKj4gPy9nbSwiIiksdGhpcy50b2tlbihpLHQpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImJsb2NrcXVvdGVfZW5kIn0pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmxpc3QuZXhlYyhlKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLG89aVsyXSxmPW8ubGVuZ3RoPjEsdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDpmLHN0YXJ0OmY/K286IiJ9KSxpPWlbMF0ubWF0Y2godGhpcy5ydWxlcy5pdGVtKSxuPSExLHA9aS5sZW5ndGgsYz0wO2M8cDtjKyspcz1pW2NdLHU9cy5sZW5ndGgscz1zLnJlcGxhY2UoL14gKihbKistXXxcZCtcLikgKy8sIiIpLH5zLmluZGV4T2YoIlxuICIpJiYodS09cy5sZW5ndGgscz10aGlzLm9wdGlvbnMucGVkYW50aWM/cy5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTpzLnJlcGxhY2UobmV3IFJlZ0V4cCgiXiB7MSwiK3UrIn0iLCJnbSIpLCIiKSksdGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMmJmMhPT1wLTEmJihhPWguYnVsbGV0LmV4ZWMoaVtjKzFdKVswXSxvPT09YXx8by5sZW5ndGg+MSYmYS5sZW5ndGg+MXx8KGU9aS5zbGljZShjKzEpLmpvaW4oIlxuIikrZSxjPXAtMSkpLHI9bnx8L1xuXG4oPyFccyokKS8udGVzdChzKSxjIT09cC0xJiYobj0iXG4iPT09cy5jaGFyQXQocy5sZW5ndGgtMSkscnx8KHI9bikpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6cj8ibG9vc2VfaXRlbV9zdGFydCI6Imxpc3RfaXRlbV9zdGFydCJ9KSx0aGlzLnRva2VuKHMsITEpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfaXRlbV9lbmQifSk7dGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9lbmQifSl9ZWxzZSBpZihpPXRoaXMucnVsZXMuaHRtbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJwYXJhZ3JhcGgiOiJodG1sIixwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWlbMV18fCJzY3JpcHQiPT09aVsxXXx8InN0eWxlIj09PWlbMV0pLHRleHQ6aVswXX0pO2Vsc2UgaWYodCYmKGk9dGhpcy5ydWxlcy5kZWYuZXhlYyhlKSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksaVszXSYmKGlbM109aVszXS5zdWJzdHJpbmcoMSxpWzNdLmxlbmd0aC0xKSksbD1pWzFdLnRvTG93ZXJDYXNlKCksdGhpcy50b2tlbnMubGlua3NbbF18fCh0aGlzLnRva2Vucy5saW5rc1tsXT17aHJlZjppWzJdLHRpdGxlOmlbM119KTtlbHNlIGlmKHQmJihpPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxzPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOmlbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOmlbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczppWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LGM9MDtjPHMuYWxpZ24ubGVuZ3RoO2MrKykvXiAqLSs6ICokLy50ZXN0KHMuYWxpZ25bY10pP3MuYWxpZ25bY109InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChzLmFsaWduW2NdKT9zLmFsaWduW2NdPSJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qocy5hbGlnbltjXSk/cy5hbGlnbltjXT0ibGVmdCI6cy5hbGlnbltjXT1udWxsO2ZvcihjPTA7YzxzLmNlbGxzLmxlbmd0aDtjKyspcy5jZWxsc1tjXT1zLmNlbGxzW2NdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChzKX1lbHNlIGlmKGk9dGhpcy5ydWxlcy5saGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOiI9Ij09PWlbMl0/MToyLHRleHQ6aVsxXX0pO2Vsc2UgaWYodCYmKGk9dGhpcy5ydWxlcy5wYXJhZ3JhcGguZXhlYyhlKSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToicGFyYWdyYXBoIix0ZXh0OiJcbiI9PT1pWzFdLmNoYXJBdChpWzFdLmxlbmd0aC0xKT9pWzFdLnNsaWNlKDAsLTEpOmlbMV19KTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToidGV4dCIsdGV4dDppWzBdfSk7ZWxzZSBpZihlKXRocm93IG5ldyBFcnJvcigiSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKSk7cmV0dXJuIHRoaXMudG9rZW5zfTt2YXIgbT17ZXNjYXBlOi9eXFwoW1xcYCp7fVxbXF0oKSMrXC0uIV8+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOnAsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/W2EtekEtWjAtOVwtXSsoPzoiW14iXSoifCdbXiddKid8XHNbXjwnIj5cL1xzXSopKj9cLz8+LyxsaW5rOi9eIT9cWyhpbnNpZGUpXF1cKGhyZWZcKS8scmVmbGluazovXiE/XFsoaW5zaWRlKVxdXHMqXFsoW15cXV0qKVxdLyxub2xpbms6L14hP1xbKCg/OlxbW15cW1xdXSpcXXxcXFtcW1xdXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15fKFteXHNfXSg/OlteX118X18pKz9bXlxzX10pX1xifF5cKigoPzpcKlwqfFteKl0pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXT8pXHMqXDEoPyFgKS8sYnI6L14gezIsfVxuKD8hXHMqJCkvLGRlbDpwLHRleHQ6L15bXHNcU10rPyg/PVtcXDwhXFtgKl18XGJffCB7Mix9XG58JCkvfTttLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLG0uX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvLG0uYXV0b2xpbms9YyhtLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLG0uX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLG0uX2VtYWlsKS5nZXRSZWdleCgpLG0uX2luc2lkZT0vKD86XFtbXlxbXF1dKlxdfFxcW1xbXF1dfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sbS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sbS5saW5rPWMobS5saW5rKS5yZXBsYWNlKCJpbnNpZGUiLG0uX2luc2lkZSkucmVwbGFjZSgiaHJlZiIsbS5faHJlZikuZ2V0UmVnZXgoKSxtLnJlZmxpbms9YyhtLnJlZmxpbmspLnJlcGxhY2UoImluc2lkZSIsbS5faW5zaWRlKS5nZXRSZWdleCgpLG0ubm9ybWFsPWYoe30sbSksbS5wZWRhbnRpYz1mKHt9LG0ubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksbS5nZm09Zih7fSxtLm5vcm1hbCx7ZXNjYXBlOmMobS5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksdXJsOmMoL14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvKS5yZXBsYWNlKCJlbWFpbCIsbS5fZW1haWwpLmdldFJlZ2V4KCksX2JhY2twZWRhbDovKD86W14/IS4sOjsqX34oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl9+KV0rKD8hJCkpKy8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDpjKG0udGV4dCkucmVwbGFjZSgiXXwiLCJ+XXwiKS5yZXBsYWNlKCJ8IiwifGh0dHBzPzovL3xmdHA6Ly98d3d3XFwufFthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7XFx8fX4tXStAfCIpLmdldFJlZ2V4KCl9KSxtLmJyZWFrcz1mKHt9LG0uZ2ZtLHticjpjKG0uYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OmMobS5nZm0udGV4dCkucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpfSksci5ydWxlcz1tLHIub3V0cHV0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IHIodCxuKS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbz0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbys9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49cyh0aGlzLm1hbmdsZShpWzFdKSkscj0ibWFpbHRvOiIrbik6KG49cyhpWzFdKSxyPW4pLG8rPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZih0aGlzLmluTGlua3x8IShpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpKXtpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpIXRoaXMuaW5MaW5rJiYvXjxhIC9pLnRlc3QoaVswXSk/dGhpcy5pbkxpbms9ITA6dGhpcy5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGlbMF0pJiYodGhpcy5pbkxpbms9ITEpLGU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLG8rPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoaVswXSk6cyhpWzBdKTppWzBdO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmxpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0aGlzLmluTGluaz0hMCxvKz10aGlzLm91dHB1dExpbmsoaSx7aHJlZjppWzJdLHRpdGxlOmlbM119KSx0aGlzLmluTGluaz0hMTtlbHNlIGlmKChpPXRoaXMucnVsZXMucmVmbGluay5leGVjKGUpKXx8KGk9dGhpcy5ydWxlcy5ub2xpbmsuZXhlYyhlKSkpe2lmKGU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHQ9KGlbMl18fGlbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIiksISh0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSl8fCF0LmhyZWYpe28rPWlbMF0uY2hhckF0KDApLGU9aVswXS5zdWJzdHJpbmcoMSkrZTtjb250aW51ZX10aGlzLmluTGluaz0hMCxvKz10aGlzLm91dHB1dExpbmsoaSx0KSx0aGlzLmluTGluaz0hMX1lbHNlIGlmKGk9dGhpcy5ydWxlcy5zdHJvbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxvKz10aGlzLnJlbmRlcmVyLnN0cm9uZyh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZW0uZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxvKz10aGlzLnJlbmRlcmVyLmVtKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbys9dGhpcy5yZW5kZXJlci5jb2Rlc3BhbihzKGlbMl0udHJpbSgpLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxvKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbys9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxvKz10aGlzLnJlbmRlcmVyLnRleHQocyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKSk7ZWxzZSBpZihlKXRocm93IG5ldyBFcnJvcigiSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKSl9ZWxzZSBpWzBdPXRoaXMucnVsZXMuX2JhY2twZWRhbC5leGVjKGlbMF0pWzBdLGU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49cyhpWzBdKSxyPSJtYWlsdG86IituKToobj1zKGlbMF0pLHI9Ind3dy4iPT09aVsxXT8iaHR0cDovLyIrbjpuKSxvKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO3JldHVybiBvfSxyLnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHIucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTRcLyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0XC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpOmV9LHIucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtpZighdGhpcy5vcHRpb25zLm1hbmdsZSlyZXR1cm4gZTtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLGk9MDtpPHI7aSsrKXQ9ZS5jaGFyQ29kZUF0KGkpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0saS5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5vcHRpb25zLmhpZ2hsaWdodCl7dmFyIHI9dGhpcy5vcHRpb25zLmhpZ2hsaWdodChlLHQpO251bGwhPXImJnIhPT1lJiYobj0hMCxlPXIpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3ModCwhMCkrJyI+Jysobj9lOnMoZSwhMCkpKyJcbjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+Iisobj9lOnMoZSwhMCkpKyJcbjwvY29kZT48L3ByZT4ifSxpLnByb3RvdHlwZS5ibG9ja3F1b3RlPWZ1bmN0aW9uKGUpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrZSsiPC9ibG9ja3F1b3RlPlxuIn0saS5wcm90b3R5cGUuaHRtbD1mdW5jdGlvbihlKXtyZXR1cm4gZX0saS5wcm90b3R5cGUuaGVhZGluZz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIjxoIit0KycgaWQ9IicrdGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtuLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cd10rL2csIi0iKSsnIj4nK2UrIjwvaCIrdCsiPlxuIn0saS5wcm90b3R5cGUuaHI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn0saS5wcm90b3R5cGUubGlzdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKHQmJjEhPT1uPycgc3RhcnQ9IicrbisnIic6IiIpKyI+XG4iK2UrIjwvIityKyI+XG4ifSxpLnByb3RvdHlwZS5saXN0aXRlbT1mdW5jdGlvbihlKXtyZXR1cm4iPGxpPiIrZSsiPC9saT5cbiJ9LGkucHJvdG90eXBlLnBhcmFncmFwaD1mdW5jdGlvbihlKXtyZXR1cm4iPHA+IitlKyI8L3A+XG4ifSxpLnByb3RvdHlwZS50YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiI8dGFibGU+XG48dGhlYWQ+XG4iK2UrIjwvdGhlYWQ+XG48dGJvZHk+XG4iK3QrIjwvdGJvZHk+XG48L3RhYmxlPlxuIn0saS5wcm90b3R5cGUudGFibGVyb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIjx0cj5cbiIrZSsiPC90cj5cbiJ9LGkucHJvdG90eXBlLnRhYmxlY2VsbD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IikrZSsiPC8iK24rIj5cbiJ9LGkucHJvdG90eXBlLnN0cm9uZz1mdW5jdGlvbihlKXtyZXR1cm4iPHN0cm9uZz4iK2UrIjwvc3Ryb25nPiJ9LGkucHJvdG90eXBlLmVtPWZ1bmN0aW9uKGUpe3JldHVybiI8ZW0+IitlKyI8L2VtPiJ9LGkucHJvdG90eXBlLmNvZGVzcGFuPWZ1bmN0aW9uKGUpe3JldHVybiI8Y29kZT4iK2UrIjwvY29kZT4ifSxpLnByb3RvdHlwZS5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+IjoiPGJyPiJ9LGkucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LGkucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSl7dHJ5e3ZhciByPWRlY29kZVVSSUNvbXBvbmVudCh1KGUpKS5yZXBsYWNlKC9bXlx3Ol0vZywiIikudG9Mb3dlckNhc2UoKX1jYXRjaChlKXtyZXR1cm4gbn1pZigwPT09ci5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ci5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PXIuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbn10aGlzLm9wdGlvbnMuYmFzZVVybCYmIXkudGVzdChlKSYmKGU9bCh0aGlzLm9wdGlvbnMuYmFzZVVybCxlKSk7dmFyIGk9JzxhIGhyZWY9IicrZSsnIic7cmV0dXJuIHQmJihpKz0nIHRpdGxlPSInK3QrJyInKSxpKz0iPiIrbisiPC9hPiJ9LGkucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLm9wdGlvbnMuYmFzZVVybCYmIXkudGVzdChlKSYmKGU9bCh0aGlzLm9wdGlvbnMuYmFzZVVybCxlKSk7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9dGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4ifSxpLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlfSxvLnByb3RvdHlwZS5zdHJvbmc9by5wcm90b3R5cGUuZW09by5wcm90b3R5cGUuY29kZXNwYW49by5wcm90b3R5cGUuZGVsPW8ucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG8ucHJvdG90eXBlLmxpbms9by5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiIiK259LG8ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGEucGFyc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGEodCkucGFyc2UoZSl9LGEucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3RoaXMuaW5saW5lPW5ldyByKGUubGlua3MsdGhpcy5vcHRpb25zKSx0aGlzLmlubGluZVRleHQ9bmV3IHIoZS5saW5rcyxmKHt9LHRoaXMub3B0aW9ucyx7cmVuZGVyZXI6bmV3IG99KSksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciB0PSIiO3RoaXMubmV4dCgpOyl0Kz10aGlzLnRvaygpO3JldHVybiB0fSxhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LGEucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxhLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxhLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHUodGhpcy5pbmxpbmVUZXh0Lm91dHB1dCh0aGlzLnRva2VuLnRleHQpKSk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkKTtjYXNlInRhYmxlIjp2YXIgZSx0LG4scixpPSIiLG89IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKyluKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi5oZWFkZXJbZV0pLHtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0pO2ZvcihpKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pLGU9MDtlPHRoaXMudG9rZW4uY2VsbHMubGVuZ3RoO2UrKyl7Zm9yKHQ9dGhpcy50b2tlbi5jZWxsc1tlXSxuPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyluKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLmlubGluZS5vdXRwdXQodFtyXSkse2hlYWRlcjohMSxhbGlnbjp0aGlzLnRva2VuLmFsaWduW3JdfSk7bys9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKX1yZXR1cm4gdGhpcy5yZW5kZXJlci50YWJsZShpLG8pO2Nhc2UiYmxvY2txdW90ZV9zdGFydCI6Zm9yKG89IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KW8rPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShvKTtjYXNlImxpc3Rfc3RhcnQiOm89IiI7Zm9yKHZhciBhPXRoaXMudG9rZW4ub3JkZXJlZCxzPXRoaXMudG9rZW4uc3RhcnQ7Imxpc3RfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KW8rPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdChvLGEscyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcihvPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KW8rPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obyk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3Iobz0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylvKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKG8pO2Nhc2UiaHRtbCI6dmFyIGM9dGhpcy50b2tlbi5wcmV8fHRoaXMub3B0aW9ucy5wZWRhbnRpYz90aGlzLnRva2VuLnRleHQ6dGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuaHRtbChjKTtjYXNlInBhcmFncmFwaCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpKTtjYXNlInRleHQiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlVGV4dCgpKX19O3ZhciBnPXt9LHk9L14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtwLmV4ZWM9cCxkLm9wdGlvbnM9ZC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBmKGQuZGVmYXVsdHMsZSksZH0sZC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsbWFuZ2xlOiEwLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IGkseGh0bWw6ITEsYmFzZVVybDpudWxsfSxkLlBhcnNlcj1hLGQucGFyc2VyPWEucGFyc2UsZC5SZW5kZXJlcj1pLGQuVGV4dFJlbmRlcmVyPW8sZC5MZXhlcj1uLGQubGV4ZXI9bi5sZXgsZC5JbmxpbmVMZXhlcj1yLGQuaW5saW5lTGV4ZXI9ci5vdXRwdXQsZC5wYXJzZT1kLGUuZXhwb3J0cz1kfSh0aGlzfHwidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl9KS5jYWxsKHQsbigxMSkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpe2UobigyKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQsaSxvLGEpe2Z1bmN0aW9uIHMoZSl7dmFyIG49dSh0LGkpO2lmKCFufHxuLnRvLmxpbmUtbi5mcm9tLmxpbmU8YylyZXR1cm4gbnVsbDtmb3IodmFyIHI9dC5maW5kTWFya3NBdChuLmZyb20pLG89MDtvPHIubGVuZ3RoOysrbylpZihyW29dLl9faXNGb2xkJiYiZm9sZCIhPT1hKXtpZighZSlyZXR1cm4gbnVsbDtuLmNsZWFyZWQ9ITAscltvXS5jbGVhcigpfXJldHVybiBufWlmKG8mJm8uY2FsbCl7dmFyIHU9bztvPW51bGx9ZWxzZSB2YXIgdT1yKHQsbywicmFuZ2VGaW5kZXIiKTsibnVtYmVyIj09dHlwZW9mIGkmJihpPWUuUG9zKGksMCkpO3ZhciBjPXIodCxvLCJtaW5Gb2xkU2l6ZSIpLGw9cyghMCk7aWYocih0LG8sInNjYW5VcCIpKWZvcig7IWwmJmkubGluZT50LmZpcnN0TGluZSgpOylpPWUuUG9zKGkubGluZS0xLDApLGw9cyghMSk7aWYobCYmIWwuY2xlYXJlZCYmInVuZm9sZCIhPT1hKXt2YXIgcD1uKHQsbyk7ZS5vbihwLCJtb3VzZWRvd24iLGZ1bmN0aW9uKHQpe2YuY2xlYXIoKSxlLmVfcHJldmVudERlZmF1bHQodCl9KTt2YXIgZj10Lm1hcmtUZXh0KGwuZnJvbSxsLnRvLHtyZXBsYWNlZFdpdGg6cCxjbGVhck9uRW50ZXI6cih0LG8sImNsZWFyT25FbnRlciIpLF9faXNGb2xkOiEwfSk7Zi5vbigiY2xlYXIiLGZ1bmN0aW9uKG4scil7ZS5zaWduYWwodCwidW5mb2xkIix0LG4scil9KSxlLnNpZ25hbCh0LCJmb2xkIix0LGwuZnJvbSxsLnRvKX19ZnVuY3Rpb24gbihlLHQpe3ZhciBuPXIoZSx0LCJ3aWRnZXQiKTtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLG4uYXBwZW5kQ2hpbGQoaSksbi5jbGFzc05hbWU9IkNvZGVNaXJyb3ItZm9sZG1hcmtlciJ9ZWxzZSBuJiYobj1uLmNsb25lTm9kZSghMCkpO3JldHVybiBufWZ1bmN0aW9uIHIoZSx0LG4pe2lmKHQmJnZvaWQgMCE9PXRbbl0pcmV0dXJuIHRbbl07dmFyIHI9ZS5vcHRpb25zLmZvbGRPcHRpb25zO3JldHVybiByJiZ2b2lkIDAhPT1yW25dP3Jbbl06aVtuXX1lLm5ld0ZvbGRGdW5jdGlvbj1mdW5jdGlvbihlLG4pe3JldHVybiBmdW5jdGlvbihyLGkpe3QocixpLHtyYW5nZUZpbmRlcjplLHdpZGdldDpufSl9fSxlLmRlZmluZUV4dGVuc2lvbigiZm9sZENvZGUiLGZ1bmN0aW9uKGUsbixyKXt0KHRoaXMsZSxuLHIpfSksZS5kZWZpbmVFeHRlbnNpb24oImlzRm9sZGVkIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5maW5kTWFya3NBdChlKSxuPTA7bjx0Lmxlbmd0aDsrK24paWYodFtuXS5fX2lzRm9sZClyZXR1cm4hMH0pLGUuY29tbWFuZHMudG9nZ2xlRm9sZD1mdW5jdGlvbihlKXtlLmZvbGRDb2RlKGUuZ2V0Q3Vyc29yKCkpfSxlLmNvbW1hbmRzLmZvbGQ9ZnVuY3Rpb24oZSl7ZS5mb2xkQ29kZShlLmdldEN1cnNvcigpLG51bGwsImZvbGQiKX0sZS5jb21tYW5kcy51bmZvbGQ9ZnVuY3Rpb24oZSl7ZS5mb2xkQ29kZShlLmdldEN1cnNvcigpLG51bGwsInVuZm9sZCIpfSxlLmNvbW1hbmRzLmZvbGRBbGw9ZnVuY3Rpb24odCl7dC5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIG49dC5maXJzdExpbmUoKSxyPXQubGFzdExpbmUoKTtuPD1yO24rKyl0LmZvbGRDb2RlKGUuUG9zKG4sMCksbnVsbCwiZm9sZCIpfSl9LGUuY29tbWFuZHMudW5mb2xkQWxsPWZ1bmN0aW9uKHQpe3Qub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQuZmlyc3RMaW5lKCkscj10Lmxhc3RMaW5lKCk7bjw9cjtuKyspdC5mb2xkQ29kZShlLlBvcyhuLDApLG51bGwsInVuZm9sZCIpfSl9LGUucmVnaXN0ZXJIZWxwZXIoImZvbGQiLCJjb21iaW5lIixmdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGk9ZVtyXSh0LG4pO2lmKGkpcmV0dXJuIGl9fX0pLGUucmVnaXN0ZXJIZWxwZXIoImZvbGQiLCJhdXRvIixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmdldEhlbHBlcnModCwiZm9sZCIpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXShlLHQpO2lmKGkpcmV0dXJuIGl9fSk7dmFyIGk9e3JhbmdlRmluZGVyOmUuZm9sZC5hdXRvLHdpZGdldDoiXHUyMTk0IixtaW5Gb2xkU2l6ZTowLHNjYW5VcDohMSxjbGVhck9uRW50ZXI6ITB9O2UuZGVmaW5lT3B0aW9uKCJmb2xkT3B0aW9ucyIsbnVsbCksZS5kZWZpbmVFeHRlbnNpb24oImZvbGRPcHRpb24iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcyxlLHQpfSl9KX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMiksbigzOCksbigzOSksbig2OSkpfShmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9W3trZXlzOiI8TGVmdD4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6ImgifSx7a2V5czoiPFJpZ2h0PiIsdHlwZToia2V5VG9LZXkiLHRvS2V5czoibCJ9LHtrZXlzOiI8VXA+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJrIn0se2tleXM6IjxEb3duPiIsdHlwZToia2V5VG9LZXkiLHRvS2V5czoiaiJ9LHtrZXlzOiI8U3BhY2U+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJsIn0se2tleXM6IjxCUz4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6ImgiLGNvbnRleHQ6Im5vcm1hbCJ9LHtrZXlzOiI8Qy1TcGFjZT4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IlcifSx7a2V5czoiPEMtQlM+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJCIixjb250ZXh0OiJub3JtYWwifSx7a2V5czoiPFMtU3BhY2U+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJ3In0se2tleXM6IjxTLUJTPiIsdHlwZToia2V5VG9LZXkiLHRvS2V5czoiYiIsY29udGV4dDoibm9ybWFsIn0se2tleXM6IjxDLW4+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJqIn0se2tleXM6IjxDLXA+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJrIn0se2tleXM6IjxDLVs+Iix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiI8RXNjPiJ9LHtrZXlzOiI8Qy1jPiIsdHlwZToia2V5VG9LZXkiLHRvS2V5czoiPEVzYz4ifSx7a2V5czoiPEMtWz4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IjxFc2M+Iixjb250ZXh0OiJpbnNlcnQifSx7a2V5czoiPEMtYz4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IjxFc2M+Iixjb250ZXh0OiJpbnNlcnQifSx7a2V5czoicyIsdHlwZToia2V5VG9LZXkiLHRvS2V5czoiY2wiLGNvbnRleHQ6Im5vcm1hbCJ9LHtrZXlzOiJzIix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJjIixjb250ZXh0OiJ2aXN1YWwifSx7a2V5czoiUyIsdHlwZToia2V5VG9LZXkiLHRvS2V5czoiY2MiLGNvbnRleHQ6Im5vcm1hbCJ9LHtrZXlzOiJTIix0eXBlOiJrZXlUb0tleSIsdG9LZXlzOiJWZE8iLGNvbnRleHQ6InZpc3VhbCJ9LHtrZXlzOiI8SG9tZT4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IjAifSx7a2V5czoiPEVuZD4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IiQifSx7a2V5czoiPFBhZ2VVcD4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IjxDLWI+In0se2tleXM6IjxQYWdlRG93bj4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6IjxDLWY+In0se2tleXM6IjxDUj4iLHR5cGU6ImtleVRvS2V5Iix0b0tleXM6ImpeIixjb250ZXh0OiJub3JtYWwifSx7a2V5czoiPElucz4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJ0b2dnbGVPdmVyd3JpdGUiLGNvbnRleHQ6Imluc2VydCJ9LHtrZXlzOiJIIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvVG9wTGluZSIsbW90aW9uQXJnczp7bGluZXdpc2U6ITAsdG9KdW1wbGlzdDohMH19LHtrZXlzOiJNIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvTWlkZGxlTGluZSIsbW90aW9uQXJnczp7bGluZXdpc2U6ITAsdG9KdW1wbGlzdDohMH19LHtrZXlzOiJMIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvQm90dG9tTGluZSIsbW90aW9uQXJnczp7bGluZXdpc2U6ITAsdG9KdW1wbGlzdDohMH19LHtrZXlzOiJoIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5Q2hhcmFjdGVycyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMX19LHtrZXlzOiJsIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5Q2hhcmFjdGVycyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMH19LHtrZXlzOiJqIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5TGluZXMiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITAsbGluZXdpc2U6ITB9fSx7a2V5czoiayIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeUxpbmVzIixtb3Rpb25BcmdzOntmb3J3YXJkOiExLGxpbmV3aXNlOiEwfX0se2tleXM6ImdqIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5RGlzcGxheUxpbmVzIixtb3Rpb25BcmdzOntmb3J3YXJkOiEwfX0se2tleXM6ImdrIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5RGlzcGxheUxpbmVzIixtb3Rpb25BcmdzOntmb3J3YXJkOiExfX0se2tleXM6InciLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCx3b3JkRW5kOiExfX0se2tleXM6IlciLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCx3b3JkRW5kOiExLGJpZ1dvcmQ6ITB9fSx7a2V5czoiZSIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeVdvcmRzIixtb3Rpb25BcmdzOntmb3J3YXJkOiEwLHdvcmRFbmQ6ITAsaW5jbHVzaXZlOiEwfX0se2tleXM6IkUiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCx3b3JkRW5kOiEwLGJpZ1dvcmQ6ITAsaW5jbHVzaXZlOiEwfX0se2tleXM6ImIiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSx3b3JkRW5kOiExfX0se2tleXM6IkIiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSx3b3JkRW5kOiExLGJpZ1dvcmQ6ITB9fSx7a2V5czoiZ2UiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSx3b3JkRW5kOiEwLGluY2x1c2l2ZTohMH19LHtrZXlzOiJnRSIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeVdvcmRzIixtb3Rpb25BcmdzOntmb3J3YXJkOiExLHdvcmRFbmQ6ITAsYmlnV29yZDohMCxpbmNsdXNpdmU6ITB9fSx7a2V5czoieyIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeVBhcmFncmFwaCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSx0b0p1bXBsaXN0OiEwfX0se2tleXM6In0iLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlQYXJhZ3JhcGgiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITAsdG9KdW1wbGlzdDohMH19LHtrZXlzOiIoIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5U2VudGVuY2UiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITF9fSx7a2V5czoiKSIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeVNlbnRlbmNlIixtb3Rpb25BcmdzOntmb3J3YXJkOiEwfX0se2tleXM6IjxDLWY+Iix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5UGFnZSIsbW90aW9uQXJnczp7Zm9yd2FyZDohMH19LHtrZXlzOiI8Qy1iPiIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeVBhZ2UiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITF9fSx7a2V5czoiPEMtZD4iLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlTY3JvbGwiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITAsZXhwbGljaXRSZXBlYXQ6ITB9fSx7a2V5czoiPEMtdT4iLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlTY3JvbGwiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITEsZXhwbGljaXRSZXBlYXQ6ITB9fSx7a2V5czoiZ2ciLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlVG9MaW5lT3JFZGdlT2ZEb2N1bWVudCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSxleHBsaWNpdFJlcGVhdDohMCxsaW5ld2lzZTohMCx0b0p1bXBsaXN0OiEwfX0se2tleXM6IkciLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlVG9MaW5lT3JFZGdlT2ZEb2N1bWVudCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCxleHBsaWNpdFJlcGVhdDohMCxsaW5ld2lzZTohMCx0b0p1bXBsaXN0OiEwfX0se2tleXM6IjAiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlVG9TdGFydE9mTGluZSJ9LHtrZXlzOiJeIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyIn0se2tleXM6IisiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlQnlMaW5lcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCx0b0ZpcnN0Q2hhcjohMH19LHtrZXlzOiItIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZUJ5TGluZXMiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITEsdG9GaXJzdENoYXI6ITB9fSx7a2V5czoiXyIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVCeUxpbmVzIixtb3Rpb25BcmdzOntmb3J3YXJkOiEwLHRvRmlyc3RDaGFyOiEwLHJlcGVhdE9mZnNldDotMX19LHtrZXlzOiIkIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvRW9sIixtb3Rpb25BcmdzOntpbmNsdXNpdmU6ITB9fSx7a2V5czoiJSIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUb01hdGNoZWRTeW1ib2wiLG1vdGlvbkFyZ3M6e2luY2x1c2l2ZTohMCx0b0p1bXBsaXN0OiEwfX0se2tleXM6ImY8Y2hhcmFjdGVyPiIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUb0NoYXJhY3RlciIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCxpbmNsdXNpdmU6ITB9fSx7a2V5czoiRjxjaGFyYWN0ZXI+Iix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvQ2hhcmFjdGVyIixtb3Rpb25BcmdzOntmb3J3YXJkOiExfX0se2tleXM6InQ8Y2hhcmFjdGVyPiIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUaWxsQ2hhcmFjdGVyIixtb3Rpb25BcmdzOntmb3J3YXJkOiEwLGluY2x1c2l2ZTohMH19LHtrZXlzOiJUPGNoYXJhY3Rlcj4iLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlVGlsbENoYXJhY3RlciIsbW90aW9uQXJnczp7Zm9yd2FyZDohMX19LHtrZXlzOiI7Iix0eXBlOiJtb3Rpb24iLG1vdGlvbjoicmVwZWF0TGFzdENoYXJhY3RlclNlYXJjaCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMH19LHtrZXlzOiIsIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoicmVwZWF0TGFzdENoYXJhY3RlclNlYXJjaCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMX19LHtrZXlzOiInPGNoYXJhY3Rlcj4iLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJnb1RvTWFyayIsbW90aW9uQXJnczp7dG9KdW1wbGlzdDohMCxsaW5ld2lzZTohMH19LHtrZXlzOiJgPGNoYXJhY3Rlcj4iLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJnb1RvTWFyayIsbW90aW9uQXJnczp7dG9KdW1wbGlzdDohMH19LHtrZXlzOiJdYCIsdHlwZToibW90aW9uIixtb3Rpb246Imp1bXBUb01hcmsiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITB9fSx7a2V5czoiW2AiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJqdW1wVG9NYXJrIixtb3Rpb25BcmdzOntmb3J3YXJkOiExfX0se2tleXM6Il0nIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoianVtcFRvTWFyayIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCxsaW5ld2lzZTohMH19LHtrZXlzOiJbJyIsdHlwZToibW90aW9uIixtb3Rpb246Imp1bXBUb01hcmsiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITEsbGluZXdpc2U6ITB9fSx7a2V5czoiXXAiLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJwYXN0ZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2FmdGVyOiEwLGlzRWRpdDohMCxtYXRjaEluZGVudDohMH19LHtrZXlzOiJbcCIsdHlwZToiYWN0aW9uIixhY3Rpb246InBhc3RlIixpc0VkaXQ6ITAsYWN0aW9uQXJnczp7YWZ0ZXI6ITEsaXNFZGl0OiEwLG1hdGNoSW5kZW50OiEwfX0se2tleXM6Il08Y2hhcmFjdGVyPiIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUb1N5bWJvbCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMCx0b0p1bXBsaXN0OiEwfX0se2tleXM6Ils8Y2hhcmFjdGVyPiIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUb1N5bWJvbCIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSx0b0p1bXBsaXN0OiEwfX0se2tleXM6InwiLHR5cGU6Im1vdGlvbiIsbW90aW9uOiJtb3ZlVG9Db2x1bW4ifSx7a2V5czoibyIsdHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUb090aGVySGlnaGxpZ2h0ZWRFbmQiLGNvbnRleHQ6InZpc3VhbCJ9LHtrZXlzOiJPIix0eXBlOiJtb3Rpb24iLG1vdGlvbjoibW92ZVRvT3RoZXJIaWdobGlnaHRlZEVuZCIsbW90aW9uQXJnczp7c2FtZUxpbmU6ITB9LGNvbnRleHQ6InZpc3VhbCJ9LHtrZXlzOiJkIix0eXBlOiJvcGVyYXRvciIsb3BlcmF0b3I6ImRlbGV0ZSJ9LHtrZXlzOiJ5Iix0eXBlOiJvcGVyYXRvciIsb3BlcmF0b3I6InlhbmsifSx7a2V5czoiYyIsdHlwZToib3BlcmF0b3IiLG9wZXJhdG9yOiJjaGFuZ2UifSx7a2V5czoiPiIsdHlwZToib3BlcmF0b3IiLG9wZXJhdG9yOiJpbmRlbnQiLG9wZXJhdG9yQXJnczp7aW5kZW50UmlnaHQ6ITB9fSx7a2V5czoiPCIsdHlwZToib3BlcmF0b3IiLG9wZXJhdG9yOiJpbmRlbnQiLG9wZXJhdG9yQXJnczp7aW5kZW50UmlnaHQ6ITF9fSx7a2V5czoiZ34iLHR5cGU6Im9wZXJhdG9yIixvcGVyYXRvcjoiY2hhbmdlQ2FzZSJ9LHtrZXlzOiJndSIsdHlwZToib3BlcmF0b3IiLG9wZXJhdG9yOiJjaGFuZ2VDYXNlIixvcGVyYXRvckFyZ3M6e3RvTG93ZXI6ITB9LGlzRWRpdDohMH0se2tleXM6ImdVIix0eXBlOiJvcGVyYXRvciIsb3BlcmF0b3I6ImNoYW5nZUNhc2UiLG9wZXJhdG9yQXJnczp7dG9Mb3dlcjohMX0saXNFZGl0OiEwfSx7a2V5czoibiIsdHlwZToibW90aW9uIixtb3Rpb246ImZpbmROZXh0Iixtb3Rpb25BcmdzOntmb3J3YXJkOiEwLHRvSnVtcGxpc3Q6ITB9fSx7a2V5czoiTiIsdHlwZToibW90aW9uIixtb3Rpb246ImZpbmROZXh0Iixtb3Rpb25BcmdzOntmb3J3YXJkOiExLHRvSnVtcGxpc3Q6ITB9fSx7a2V5czoieCIsdHlwZToib3BlcmF0b3JNb3Rpb24iLG9wZXJhdG9yOiJkZWxldGUiLG1vdGlvbjoibW92ZUJ5Q2hhcmFjdGVycyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMH0sb3BlcmF0b3JNb3Rpb25BcmdzOnt2aXN1YWxMaW5lOiExfX0se2tleXM6IlgiLHR5cGU6Im9wZXJhdG9yTW90aW9uIixvcGVyYXRvcjoiZGVsZXRlIixtb3Rpb246Im1vdmVCeUNoYXJhY3RlcnMiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITF9LG9wZXJhdG9yTW90aW9uQXJnczp7dmlzdWFsTGluZTohMH19LHtrZXlzOiJEIix0eXBlOiJvcGVyYXRvck1vdGlvbiIsb3BlcmF0b3I6ImRlbGV0ZSIsbW90aW9uOiJtb3ZlVG9Fb2wiLG1vdGlvbkFyZ3M6e2luY2x1c2l2ZTohMH0sY29udGV4dDoibm9ybWFsIn0se2tleXM6IkQiLHR5cGU6Im9wZXJhdG9yIixvcGVyYXRvcjoiZGVsZXRlIixvcGVyYXRvckFyZ3M6e2xpbmV3aXNlOiEwfSxjb250ZXh0OiJ2aXN1YWwifSx7a2V5czoiWSIsdHlwZToib3BlcmF0b3JNb3Rpb24iLG9wZXJhdG9yOiJ5YW5rIixtb3Rpb246ImV4cGFuZFRvTGluZSIsbW90aW9uQXJnczp7bGluZXdpc2U6ITB9LGNvbnRleHQ6Im5vcm1hbCJ9LHtrZXlzOiJZIix0eXBlOiJvcGVyYXRvciIsb3BlcmF0b3I6InlhbmsiLG9wZXJhdG9yQXJnczp7bGluZXdpc2U6ITB9LGNvbnRleHQ6InZpc3VhbCJ9LHtrZXlzOiJDIix0eXBlOiJvcGVyYXRvck1vdGlvbiIsb3BlcmF0b3I6ImNoYW5nZSIsbW90aW9uOiJtb3ZlVG9Fb2wiLG1vdGlvbkFyZ3M6e2luY2x1c2l2ZTohMH0sY29udGV4dDoibm9ybWFsIn0se2tleXM6IkMiLHR5cGU6Im9wZXJhdG9yIixvcGVyYXRvcjoiY2hhbmdlIixvcGVyYXRvckFyZ3M6e2xpbmV3aXNlOiEwfSxjb250ZXh0OiJ2aXN1YWwifSx7a2V5czoifiIsdHlwZToib3BlcmF0b3JNb3Rpb24iLG9wZXJhdG9yOiJjaGFuZ2VDYXNlIixtb3Rpb246Im1vdmVCeUNoYXJhY3RlcnMiLG1vdGlvbkFyZ3M6e2ZvcndhcmQ6ITB9LG9wZXJhdG9yQXJnczp7c2hvdWxkTW92ZUN1cnNvcjohMH0sY29udGV4dDoibm9ybWFsIn0se2tleXM6In4iLHR5cGU6Im9wZXJhdG9yIixvcGVyYXRvcjoiY2hhbmdlQ2FzZSIsY29udGV4dDoidmlzdWFsIn0se2tleXM6IjxDLXc+Iix0eXBlOiJvcGVyYXRvck1vdGlvbiIsb3BlcmF0b3I6ImRlbGV0ZSIsbW90aW9uOiJtb3ZlQnlXb3JkcyIsbW90aW9uQXJnczp7Zm9yd2FyZDohMSx3b3JkRW5kOiExfSxjb250ZXh0OiJpbnNlcnQifSx7a2V5czoiPEMtaT4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJqdW1wTGlzdFdhbGsiLGFjdGlvbkFyZ3M6e2ZvcndhcmQ6ITB9fSx7a2V5czoiPEMtbz4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJqdW1wTGlzdFdhbGsiLGFjdGlvbkFyZ3M6e2ZvcndhcmQ6ITF9fSx7a2V5czoiPEMtZT4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJzY3JvbGwiLGFjdGlvbkFyZ3M6e2ZvcndhcmQ6ITAsbGluZXdpc2U6ITB9fSx7a2V5czoiPEMteT4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJzY3JvbGwiLGFjdGlvbkFyZ3M6e2ZvcndhcmQ6ITEsbGluZXdpc2U6ITB9fSx7a2V5czoiYSIsdHlwZToiYWN0aW9uIixhY3Rpb246ImVudGVySW5zZXJ0TW9kZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2luc2VydEF0OiJjaGFyQWZ0ZXIifSxjb250ZXh0OiJub3JtYWwifSx7a2V5czoiQSIsdHlwZToiYWN0aW9uIixhY3Rpb246ImVudGVySW5zZXJ0TW9kZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2luc2VydEF0OiJlb2wifSxjb250ZXh0OiJub3JtYWwifSx7a2V5czoiQSIsdHlwZToiYWN0aW9uIixhY3Rpb246ImVudGVySW5zZXJ0TW9kZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2luc2VydEF0OiJlbmRPZlNlbGVjdGVkQXJlYSJ9LGNvbnRleHQ6InZpc3VhbCJ9LHtrZXlzOiJpIix0eXBlOiJhY3Rpb24iLGFjdGlvbjoiZW50ZXJJbnNlcnRNb2RlIixpc0VkaXQ6ITAsYWN0aW9uQXJnczp7aW5zZXJ0QXQ6ImlucGxhY2UifSxjb250ZXh0OiJub3JtYWwifSx7a2V5czoiSSIsdHlwZToiYWN0aW9uIixhY3Rpb246ImVudGVySW5zZXJ0TW9kZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2luc2VydEF0OiJmaXJzdE5vbkJsYW5rIn0sY29udGV4dDoibm9ybWFsIn0se2tleXM6IkkiLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJlbnRlckluc2VydE1vZGUiLGlzRWRpdDohMCxhY3Rpb25BcmdzOntpbnNlcnRBdDoic3RhcnRPZlNlbGVjdGVkQXJlYSJ9LGNvbnRleHQ6InZpc3VhbCJ9LHtrZXlzOiJvIix0eXBlOiJhY3Rpb24iLGFjdGlvbjoibmV3TGluZUFuZEVudGVySW5zZXJ0TW9kZSIsaXNFZGl0OiEwLGludGVybGFjZUluc2VydFJlcGVhdDohMCxhY3Rpb25BcmdzOnthZnRlcjohMH0sY29udGV4dDoibm9ybWFsIn0se2tleXM6Ik8iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJuZXdMaW5lQW5kRW50ZXJJbnNlcnRNb2RlIixpc0VkaXQ6ITAsaW50ZXJsYWNlSW5zZXJ0UmVwZWF0OiEwLGFjdGlvbkFyZ3M6e2FmdGVyOiExfSxjb250ZXh0OiJub3JtYWwifSx7a2V5czoidiIsdHlwZToiYWN0aW9uIixhY3Rpb246InRvZ2dsZVZpc3VhbE1vZGUifSx7a2V5czoiViIsdHlwZToiYWN0aW9uIixhY3Rpb246InRvZ2dsZVZpc3VhbE1vZGUiLGFjdGlvbkFyZ3M6e2xpbmV3aXNlOiEwfX0se2tleXM6IjxDLXY+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoidG9nZ2xlVmlzdWFsTW9kZSIsYWN0aW9uQXJnczp7YmxvY2t3aXNlOiEwfX0se2tleXM6IjxDLXE+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoidG9nZ2xlVmlzdWFsTW9kZSIsYWN0aW9uQXJnczp7YmxvY2t3aXNlOiEwfX0se2tleXM6Imd2Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoicmVzZWxlY3RMYXN0U2VsZWN0aW9uIn0se2tleXM6IkoiLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJqb2luTGluZXMiLGlzRWRpdDohMH0se2tleXM6InAiLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJwYXN0ZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2FmdGVyOiEwLGlzRWRpdDohMH19LHtrZXlzOiJQIix0eXBlOiJhY3Rpb24iLGFjdGlvbjoicGFzdGUiLGlzRWRpdDohMCxhY3Rpb25BcmdzOnthZnRlcjohMSxpc0VkaXQ6ITB9fSx7a2V5czoicjxjaGFyYWN0ZXI+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoicmVwbGFjZSIsaXNFZGl0OiEwfSx7a2V5czoiQDxjaGFyYWN0ZXI+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoicmVwbGF5TWFjcm8ifSx7a2V5czoicTxjaGFyYWN0ZXI+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoiZW50ZXJNYWNyb1JlY29yZE1vZGUifSx7a2V5czoiUiIsdHlwZToiYWN0aW9uIixhY3Rpb246ImVudGVySW5zZXJ0TW9kZSIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e3JlcGxhY2U6ITB9fSx7a2V5czoidSIsdHlwZToiYWN0aW9uIixhY3Rpb246InVuZG8iLGNvbnRleHQ6Im5vcm1hbCJ9LHtrZXlzOiJ1Iix0eXBlOiJvcGVyYXRvciIsb3BlcmF0b3I6ImNoYW5nZUNhc2UiLG9wZXJhdG9yQXJnczp7dG9Mb3dlcjohMH0sY29udGV4dDoidmlzdWFsIixpc0VkaXQ6ITB9LHtrZXlzOiJVIix0eXBlOiJvcGVyYXRvciIsb3BlcmF0b3I6ImNoYW5nZUNhc2UiLG9wZXJhdG9yQXJnczp7dG9Mb3dlcjohMX0sY29udGV4dDoidmlzdWFsIixpc0VkaXQ6ITB9LHtrZXlzOiI8Qy1yPiIsdHlwZToiYWN0aW9uIixhY3Rpb246InJlZG8ifSx7a2V5czoibTxjaGFyYWN0ZXI+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoic2V0TWFyayJ9LHtrZXlzOiciPGNoYXJhY3Rlcj4nLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJzZXRSZWdpc3RlciJ9LHtrZXlzOiJ6eiIsdHlwZToiYWN0aW9uIixhY3Rpb246InNjcm9sbFRvQ3Vyc29yIixhY3Rpb25BcmdzOntwb3NpdGlvbjoiY2VudGVyIn19LHtrZXlzOiJ6LiIsdHlwZToiYWN0aW9uIixhY3Rpb246InNjcm9sbFRvQ3Vyc29yIixhY3Rpb25BcmdzOntwb3NpdGlvbjoiY2VudGVyIn0sbW90aW9uOiJtb3ZlVG9GaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXIifSx7a2V5czoienQiLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJzY3JvbGxUb0N1cnNvciIsYWN0aW9uQXJnczp7cG9zaXRpb246InRvcCJ9fSx7a2V5czoiejxDUj4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJzY3JvbGxUb0N1cnNvciIsYWN0aW9uQXJnczp7cG9zaXRpb246InRvcCJ9LG1vdGlvbjoibW92ZVRvRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyIn0se2tleXM6InotIix0eXBlOiJhY3Rpb24iLGFjdGlvbjoic2Nyb2xsVG9DdXJzb3IiLGFjdGlvbkFyZ3M6e3Bvc2l0aW9uOiJib3R0b20ifX0se2tleXM6InpiIix0eXBlOiJhY3Rpb24iLGFjdGlvbjoic2Nyb2xsVG9DdXJzb3IiLGFjdGlvbkFyZ3M6e3Bvc2l0aW9uOiJib3R0b20ifSxtb3Rpb246Im1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlciJ9LHtrZXlzOiIuIix0eXBlOiJhY3Rpb24iLGFjdGlvbjoicmVwZWF0TGFzdEVkaXQifSx7a2V5czoiPEMtYT4iLHR5cGU6ImFjdGlvbiIsYWN0aW9uOiJpbmNyZW1lbnROdW1iZXJUb2tlbiIsaXNFZGl0OiEwLGFjdGlvbkFyZ3M6e2luY3JlYXNlOiEwLGJhY2t0cmFjazohMX19LHtrZXlzOiI8Qy14PiIsdHlwZToiYWN0aW9uIixhY3Rpb246ImluY3JlbWVudE51bWJlclRva2VuIixpc0VkaXQ6ITAsYWN0aW9uQXJnczp7aW5jcmVhc2U6ITEsYmFja3RyYWNrOiExfX0se2tleXM6IjxDLXQ+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoiaW5kZW50IixhY3Rpb25BcmdzOntpbmRlbnRSaWdodDohMH0sY29udGV4dDoiaW5zZXJ0In0se2tleXM6IjxDLWQ+Iix0eXBlOiJhY3Rpb24iLGFjdGlvbjoiaW5kZW50IixhY3Rpb25BcmdzOntpbmRlbnRSaWdodDohMX0sY29udGV4dDoiaW5zZXJ0In0se2tleXM6ImE8Y2hhcmFjdGVyPiIsdHlwZToibW90aW9uIixtb3Rpb246InRleHRPYmplY3RNYW5pcHVsYXRpb24ifSx7a2V5czoiaTxjaGFyYWN0ZXI+Iix0eXBlOiJtb3Rpb24iLG1vdGlvbjoidGV4dE9iamVjdE1hbmlwdWxhdGlvbiIsbW90aW9uQXJnczp7dGV4dE9iamVjdElubmVyOiEwfX0se2tleXM6Ii8iLHR5cGU6InNlYXJjaCIsc2VhcmNoQXJnczp7Zm9yd2FyZDohMCxxdWVyeVNyYzoicHJvbXB0Iix0b0p1bXBsaXN0OiEwfX0se2tleXM6Ij8iLHR5cGU6InNlYXJjaCIsc2VhcmNoQXJnczp7Zm9yd2FyZDohMSxxdWVyeVNyYzoicHJvbXB0Iix0b0p1bXBsaXN0OiEwfX0se2tleXM6IioiLHR5cGU6InNlYXJjaCIsc2VhcmNoQXJnczp7Zm9yd2FyZDohMCxxdWVyeVNyYzoid29yZFVuZGVyQ3Vyc29yIix3aG9sZVdvcmRPbmx5OiEwLHRvSnVtcGxpc3Q6ITB9fSx7a2V5czoiIyIsdHlwZToic2VhcmNoIixzZWFyY2hBcmdzOntmb3J3YXJkOiExLHF1ZXJ5U3JjOiJ3b3JkVW5kZXJDdXJzb3IiLHdob2xlV29yZE9ubHk6ITAsdG9KdW1wbGlzdDohMH19LHtrZXlzOiJnKiIsdHlwZToic2VhcmNoIixzZWFyY2hBcmdzOntmb3J3YXJkOiEwLHF1ZXJ5U3JjOiJ3b3JkVW5kZXJDdXJzb3IiLHRvSnVtcGxpc3Q6ITB9fSx7a2V5czoiZyMiLHR5cGU6InNlYXJjaCIsc2VhcmNoQXJnczp7Zm9yd2FyZDohMSxxdWVyeVNyYzoid29yZFVuZGVyQ3Vyc29yIix0b0p1bXBsaXN0OiEwfX0se2tleXM6IjoiLHR5cGU6ImV4In1dLG49W3tuYW1lOiJjb2xvcnNjaGVtZSIsc2hvcnROYW1lOiJjb2xvIn0se25hbWU6Im1hcCJ9LHtuYW1lOiJpbWFwIixzaG9ydE5hbWU6ImltIn0se25hbWU6Im5tYXAiLHNob3J0TmFtZToibm0ifSx7bmFtZToidm1hcCIsc2hvcnROYW1lOiJ2bSJ9LHtuYW1lOiJ1bm1hcCJ9LHtuYW1lOiJ3cml0ZSIsc2hvcnROYW1lOiJ3In0se25hbWU6InVuZG8iLHNob3J0TmFtZToidSJ9LHtuYW1lOiJyZWRvIixzaG9ydE5hbWU6InJlZCJ9LHtuYW1lOiJzZXQiLHNob3J0TmFtZToic2UifSx7bmFtZToic2V0IixzaG9ydE5hbWU6InNlIn0se25hbWU6InNldGxvY2FsIixzaG9ydE5hbWU6InNldGwifSx7bmFtZToic2V0Z2xvYmFsIixzaG9ydE5hbWU6InNldGcifSx7bmFtZToic29ydCIsc2hvcnROYW1lOiJzb3IifSx7bmFtZToic3Vic3RpdHV0ZSIsc2hvcnROYW1lOiJzIixwb3NzaWJseUFzeW5jOiEwfSx7bmFtZToibm9obHNlYXJjaCIsc2hvcnROYW1lOiJub2gifSx7bmFtZToieWFuayIsc2hvcnROYW1lOiJ5In0se25hbWU6ImRlbG1hcmtzIixzaG9ydE5hbWU6ImRlbG0ifSx7bmFtZToicmVnaXN0ZXJzIixzaG9ydE5hbWU6InJlZyIsZXhjbHVkZUZyb21Db21tYW5kSGlzdG9yeTohMH0se25hbWU6Imdsb2JhbCIsc2hvcnROYW1lOiJnIn1dLHI9ZS5Qb3M7ZS5WaW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe3Quc2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiLCEwKSx0LnNldE9wdGlvbigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExKSxlLnNpZ25hbCh0LCJ2aW0tbW9kZS1jaGFuZ2UiLHttb2RlOiJub3JtYWwifSksdC5vbigiY3Vyc29yQWN0aXZpdHkiLGN0KSxfKHQpLGUub24odC5nZXRJbnB1dEZpZWxkKCksInBhc3RlIixoKHQpKX1mdW5jdGlvbiBvKHQpe3Quc2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiLCExKSx0Lm9mZigiY3Vyc29yQWN0aXZpdHkiLGN0KSxlLm9mZih0LmdldElucHV0RmllbGQoKSwicGFzdGUiLGgodCkpLHQuc3RhdGUudmltPW51bGx9ZnVuY3Rpb24gYSh0LG4pe3RoaXM9PWUua2V5TWFwLnZpbSYmKGUucm1DbGFzcyh0LmdldFdyYXBwZXJFbGVtZW50KCksImNtLWZhdC1jdXJzb3IiKSwiY29udGVudGVkaXRhYmxlIj09dC5nZXRPcHRpb24oImlucHV0U3R5bGUiKSYmbnVsbCE9ZG9jdW1lbnQuYm9keS5zdHlsZS5jYXJldENvbG9yJiYocCh0KSx0LmdldElucHV0RmllbGQoKS5zdHlsZS5jYXJldENvbG9yPSIiKSksbiYmbi5hdHRhY2g9PXN8fG8odCl9ZnVuY3Rpb24gcyh0LG4pe3RoaXM9PWUua2V5TWFwLnZpbSYmKGUuYWRkQ2xhc3ModC5nZXRXcmFwcGVyRWxlbWVudCgpLCJjbS1mYXQtY3Vyc29yIiksImNvbnRlbnRlZGl0YWJsZSI9PXQuZ2V0T3B0aW9uKCJpbnB1dFN0eWxlIikmJm51bGwhPWRvY3VtZW50LmJvZHkuc3R5bGUuY2FyZXRDb2xvciYmKGwodCksdC5nZXRJbnB1dEZpZWxkKCkuc3R5bGUuY2FyZXRDb2xvcj0idHJhbnNwYXJlbnQiKSksbiYmbi5hdHRhY2g9PXN8fGkodCl9ZnVuY3Rpb24gdShlKXtmb3IodmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO2lmKG8uZW1wdHkoKSlpZihvLmFuY2hvci5jaDxlLmdldExpbmUoby5hbmNob3IubGluZSkubGVuZ3RoKW4ucHVzaChlLm1hcmtUZXh0KG8uYW5jaG9yLHIoby5hbmNob3IubGluZSxvLmFuY2hvci5jaCsxKSx7Y2xhc3NOYW1lOiJjbS1mYXQtY3Vyc29yLW1hcmsifSkpO2Vsc2V7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2EudGV4dENvbnRlbnQ9Ilx4YTAiLGEuY2xhc3NOYW1lPSJjbS1mYXQtY3Vyc29yLW1hcmsiLG4ucHVzaChlLnNldEJvb2ttYXJrKG8uYW5jaG9yLHt3aWRnZXQ6YX0pKX19cmV0dXJuIG59ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLnN0YXRlLmZhdEN1cnNvck1hcmtzO2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5jbGVhcigpO2Uuc3RhdGUuZmF0Q3Vyc29yTWFya3M9dShlKX1mdW5jdGlvbiBsKGUpe2Uuc3RhdGUuZmF0Q3Vyc29yTWFya3M9dShlKSxlLm9uKCJjdXJzb3JBY3Rpdml0eSIsYyl9ZnVuY3Rpb24gcChlKXt2YXIgdD1lLnN0YXRlLmZhdEN1cnNvck1hcmtzO2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5jbGVhcigpO2Uuc3RhdGUuZmF0Q3Vyc29yTWFya3M9bnVsbCxlLm9mZigiY3Vyc29yQWN0aXZpdHkiLGMpfWZ1bmN0aW9uIGYodCxuKXtpZihuKXtpZih0aGlzW3RdKXJldHVybiB0aGlzW3RdO3ZhciByPWQodCk7aWYoIXIpcmV0dXJuITE7dmFyIGk9ZS5WaW0uZmluZEtleShuLHIpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZlLnNpZ25hbChuLCJ2aW0ta2V5cHJlc3MiLHIpLGl9fWZ1bmN0aW9uIGQoZSl7aWYoIiciPT1lLmNoYXJBdCgwKSlyZXR1cm4gZS5jaGFyQXQoMSk7dmFyIHQ9ZS5zcGxpdCgvLSg/ISQpLyksbj10W3QubGVuZ3RoLTFdO2lmKDE9PXQubGVuZ3RoJiYxPT10WzBdLmxlbmd0aClyZXR1cm4hMTtpZigyPT10Lmxlbmd0aCYmIlNoaWZ0Ij09dFswXSYmMT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvIGluIGd0P3RbaV09Z3Rbb106cj0hMCxvIGluIHl0JiYodFtpXT15dFtvXSl9cmV0dXJuISFyJiYoeChuKSYmKHRbdC5sZW5ndGgtMV09bi50b0xvd2VyQ2FzZSgpKSwiPCIrdC5qb2luKCItIikrIj4iKX1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuc3RhdGUudmltO3JldHVybiB0Lm9uUGFzdGVGbnx8KHQub25QYXN0ZUZuPWZ1bmN0aW9uKCl7dC5pbnNlcnRNb2RlfHwoZS5zZXRDdXJzb3IoeihlLmdldEN1cnNvcigpLDAsMSkpLFB0LmVudGVySW5zZXJ0TW9kZShlLHt9LHQpKX0pLHQub25QYXN0ZUZufWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49W10scj1lO3I8ZSt0O3IrKyluLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShyKSk7cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe3JldHVybiB0Pj1lLmZpcnN0TGluZSgpJiZ0PD1lLmxhc3RMaW5lKCl9ZnVuY3Rpb24geShlKXtyZXR1cm4vXlthLXpdJC8udGVzdChlKX1mdW5jdGlvbiB2KGUpe3JldHVybi0xIT0iKClbXXt9Ii5pbmRleE9mKGUpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIHZ0LnRlc3QoZSl9ZnVuY3Rpb24geChlKXtyZXR1cm4vXltBLVpdJC8udGVzdChlKX1mdW5jdGlvbiBDKGUpe3JldHVybi9eXHMqJC8udGVzdChlKX1mdW5jdGlvbiBFKGUpe3JldHVybi0xIT0iLj8hIi5pbmRleE9mKGUpfWZ1bmN0aW9uIEQoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dPT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHcoZSx0LG4scixpKXtpZih2b2lkIDA9PT10JiYhaSl0aHJvdyBFcnJvcigiZGVmYXVsdFZhbHVlIGlzIHJlcXVpcmVkIHVubGVzcyBjYWxsYmFjayBpcyBwcm92aWRlZCIpO2lmKG58fChuPSJzdHJpbmciKSxrdFtlXT17dHlwZTpuLGRlZmF1bHRWYWx1ZTp0LGNhbGxiYWNrOml9LHIpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspa3RbcltvXV09a3RbZV07dCYmUyhlLHQpfWZ1bmN0aW9uIFMoZSx0LG4scil7dmFyIGk9a3RbZV07cj1yfHx7fTt2YXIgbz1yLnNjb3BlO2lmKCFpKXJldHVybiBuZXcgRXJyb3IoIlVua25vd24gb3B0aW9uOiAiK2UpO2lmKCJib29sZWFuIj09aS50eXBlKXtpZih0JiYhMCE9PXQpcmV0dXJuIG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudDogIitlKyI9Iit0KTshMSE9PXQmJih0PSEwKX1pLmNhbGxiYWNrPygibG9jYWwiIT09byYmaS5jYWxsYmFjayh0LHZvaWQgMCksImdsb2JhbCIhPT1vJiZuJiZpLmNhbGxiYWNrKHQsbikpOigibG9jYWwiIT09byYmKGkudmFsdWU9ImJvb2xlYW4iPT1pLnR5cGU/ISF0OnQpLCJnbG9iYWwiIT09byYmbiYmKG4uc3RhdGUudmltLm9wdGlvbnNbZV09e3ZhbHVlOnR9KSl9ZnVuY3Rpb24gayhlLHQsbil7dmFyIHI9a3RbZV07bj1ufHx7fTt2YXIgaT1uLnNjb3BlO2lmKCFyKXJldHVybiBuZXcgRXJyb3IoIlVua25vd24gb3B0aW9uOiAiK2UpO3tpZighci5jYWxsYmFjayl7dmFyIG89Imdsb2JhbCIhPT1pJiZ0JiZ0LnN0YXRlLnZpbS5vcHRpb25zW2VdO3JldHVybihvfHwibG9jYWwiIT09aSYmcnx8e30pLnZhbHVlfXZhciBvPXQmJnIuY2FsbGJhY2sodm9pZCAwLHQpO2lmKCJnbG9iYWwiIT09aSYmdm9pZCAwIT09bylyZXR1cm4gbztpZigibG9jYWwiIT09aSlyZXR1cm4gci5jYWxsYmFjaygpfX1mdW5jdGlvbiBBKCl7dGhpcy5sYXRlc3RSZWdpc3Rlcj12b2lkIDAsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5pc1JlY29yZGluZz0hMSx0aGlzLnJlcGxheVNlYXJjaFF1ZXJpZXM9W10sdGhpcy5vblJlY29yZGluZ0RvbmU9dm9pZCAwLHRoaXMubGFzdEluc2VydE1vZGVDaGFuZ2VzPV90KCl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZS5zdGF0ZS52aW18fChlLnN0YXRlLnZpbT17aW5wdXRTdGF0ZTpuZXcgTyxsYXN0RWRpdElucHV0U3RhdGU6dm9pZCAwLGxhc3RFZGl0QWN0aW9uQ29tbWFuZDp2b2lkIDAsbGFzdEhQb3M6LTEsbGFzdEhTUG9zOi0xLGxhc3RNb3Rpb246bnVsbCxtYXJrczp7fSxmYWtlQ3Vyc29yOm51bGwsaW5zZXJ0TW9kZTohMSxpbnNlcnRNb2RlUmVwZWF0OnZvaWQgMCx2aXN1YWxNb2RlOiExLHZpc3VhbExpbmU6ITEsdmlzdWFsQmxvY2s6ITEsbGFzdFNlbGVjdGlvbjpudWxsLGxhc3RQYXN0ZWRUZXh0Om51bGwsc2VsOnt9LG9wdGlvbnM6e319KSxlLnN0YXRlLnZpbX1mdW5jdGlvbiBUKCl7VHQ9e3NlYXJjaFF1ZXJ5Om51bGwsc2VhcmNoSXNSZXZlcnNlZDohMSxsYXN0U3Vic3RpdHV0ZVJlcGxhY2VQYXJ0OnZvaWQgMCxqdW1wTGlzdDpBdCgpLG1hY3JvTW9kZVN0YXRlOm5ldyBBLGxhc3RDaGFyYWN0ZXJTZWFyY2g6e2luY3JlbWVudDowLGZvcndhcmQ6ITAsc2VsZWN0ZWRDaGFyYWN0ZXI6IiJ9LHJlZ2lzdGVyQ29udHJvbGxlcjpuZXcgTCh7fSksc2VhcmNoSGlzdG9yeUNvbnRyb2xsZXI6bmV3IFAsZXhDb21tYW5kSGlzdG9yeUNvbnRyb2xsZXI6bmV3IFB9O2Zvcih2YXIgZSBpbiBrdCl7dmFyIHQ9a3RbZV07dC52YWx1ZT10LmRlZmF1bHRWYWx1ZX19ZnVuY3Rpb24gTygpe3RoaXMucHJlZml4UmVwZWF0PVtdLHRoaXMubW90aW9uUmVwZWF0PVtdLHRoaXMub3BlcmF0b3I9bnVsbCx0aGlzLm9wZXJhdG9yQXJncz1udWxsLHRoaXMubW90aW9uPW51bGwsdGhpcy5tb3Rpb25BcmdzPW51bGwsdGhpcy5rZXlCdWZmZXI9W10sdGhpcy5yZWdpc3Rlck5hbWU9bnVsbH1mdW5jdGlvbiBGKHQsbil7dC5zdGF0ZS52aW0uaW5wdXRTdGF0ZT1uZXcgTyxlLnNpZ25hbCh0LCJ2aW0tY29tbWFuZC1kb25lIixuKX1mdW5jdGlvbiBOKGUsdCxuKXt0aGlzLmNsZWFyKCksdGhpcy5rZXlCdWZmZXI9W2V8fCIiXSx0aGlzLmluc2VydE1vZGVDaGFuZ2VzPVtdLHRoaXMuc2VhcmNoUXVlcmllcz1bXSx0aGlzLmxpbmV3aXNlPSEhdCx0aGlzLmJsb2Nrd2lzZT0hIW59ZnVuY3Rpb24gSShlLHQpe3ZhciBuPVR0LnJlZ2lzdGVyQ29udHJvbGxlci5yZWdpc3RlcnM7aWYoIWV8fDEhPWUubGVuZ3RoKXRocm93IEVycm9yKCJSZWdpc3RlciBuYW1lIG11c3QgYmUgMSBjaGFyYWN0ZXIiKTtpZihuW2VdKXRocm93IEVycm9yKCJSZWdpc3RlciBhbHJlYWR5IGRlZmluZWQgIitlKTtuW2VdPXQsU3QucHVzaChlKX1mdW5jdGlvbiBMKGUpe3RoaXMucmVnaXN0ZXJzPWUsdGhpcy51bm5hbWVkUmVnaXN0ZXI9ZVsnIiddPW5ldyBOLGVbIi4iXT1uZXcgTixlWyI6Il09bmV3IE4sZVsiLyJdPW5ldyBOfWZ1bmN0aW9uIFAoKXt0aGlzLmhpc3RvcnlCdWZmZXI9W10sdGhpcy5pdGVyYXRvcj0wLHRoaXMuaW5pdGlhbFByZWZpeD1udWxsfWZ1bmN0aW9uIE0oZSx0KXtJdFtlXT10fWZ1bmN0aW9uIGooZSx0KXtmb3IodmFyIG49W10scj0wO3I8dDtyKyspbi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIFIoZSx0KXtMdFtlXT10fWZ1bmN0aW9uIEIoZSx0KXtQdFtlXT10fWZ1bmN0aW9uICQoZSx0LG4pe3ZhciBpPU1hdGgubWluKE1hdGgubWF4KGUuZmlyc3RMaW5lKCksdC5saW5lKSxlLmxhc3RMaW5lKCkpLG89ZWUoZSxpKS0xO289bj9vKzE6bzt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCgwLHQuY2gpLG8pO3JldHVybiByKGksYSl9ZnVuY3Rpb24gVShlKXt2YXIgdD17fTtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiB6KGUsdCxuKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiB0JiYobj10LmNoLHQ9dC5saW5lKSxyKGUubGluZSt0LGUuY2grbil9ZnVuY3Rpb24gRyhlLHQpe3JldHVybntsaW5lOnQubGluZS1lLmxpbmUsY2g6dC5saW5lLWUubGluZX19ZnVuY3Rpb24gVihlLHQsbixyKXtmb3IodmFyIGksbz1bXSxhPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIHU9dFtzXTsiaW5zZXJ0Ij09biYmImluc2VydCIhPXUuY29udGV4dHx8dS5jb250ZXh0JiZ1LmNvbnRleHQhPW58fHIub3BlcmF0b3ImJiJhY3Rpb24iPT11LnR5cGV8fCEoaT1xKGUsdS5rZXlzKSl8fCgicGFydGlhbCI9PWkmJm8ucHVzaCh1KSwiZnVsbCI9PWkmJmEucHVzaCh1KSl9cmV0dXJue3BhcnRpYWw6by5sZW5ndGgmJm8sZnVsbDphLmxlbmd0aCYmYX19ZnVuY3Rpb24gcShlLHQpe2lmKCI8Y2hhcmFjdGVyPiI9PXQuc2xpY2UoLTExKSl7dmFyIG49dC5sZW5ndGgtMTEscj1lLnNsaWNlKDAsbiksaT10LnNsaWNlKDAsbik7cmV0dXJuIHI9PWkmJmUubGVuZ3RoPm4/ImZ1bGwiOjA9PWkuaW5kZXhPZihyKSYmInBhcnRpYWwifXJldHVybiBlPT10PyJmdWxsIjowPT10LmluZGV4T2YoZSkmJiJwYXJ0aWFsIn1mdW5jdGlvbiBIKGUpe3ZhciB0PS9eLiooPFtePl0rPikkLy5leGVjKGUpLG49dD90WzFdOmUuc2xpY2UoLTEpO2lmKG4ubGVuZ3RoPjEpc3dpdGNoKG4pe2Nhc2UiPENSPiI6bj0iXG4iO2JyZWFrO2Nhc2UiPFNwYWNlPiI6bj0iICI7YnJlYWs7ZGVmYXVsdDpuPSIifXJldHVybiBufWZ1bmN0aW9uIFcoZSx0LG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wO3I8bjtyKyspdChlKX19ZnVuY3Rpb24gUShlKXtyZXR1cm4gcihlLmxpbmUsZS5jaCl9ZnVuY3Rpb24gSyhlLHQpe3JldHVybiBlLmNoPT10LmNoJiZlLmxpbmU9PXQubGluZX1mdW5jdGlvbiBKKGUsdCl7cmV0dXJuIGUubGluZTx0LmxpbmV8fGUubGluZT09dC5saW5lJiZlLmNoPHQuY2h9ZnVuY3Rpb24gWShlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJih0PVkuYXBwbHkodm9pZCAwLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpLEooZSx0KT9lOnR9ZnVuY3Rpb24gWChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJih0PVguYXBwbHkodm9pZCAwLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpLEooZSx0KT90OmV9ZnVuY3Rpb24gWihlLHQsbil7dmFyIHI9SihlLHQpLGk9Sih0LG4pO3JldHVybiByJiZpfWZ1bmN0aW9uIGVlKGUsdCl7cmV0dXJuIGUuZ2V0TGluZSh0KS5sZW5ndGh9ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiBuZShlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWy4/KiskXFtcXVwvXFwoKXt9fFwtXSkvZywiXFwkMSIpfWZ1bmN0aW9uIHJlKGUsdCxuKXt2YXIgaT1lZShlLHQpLG89bmV3IEFycmF5KG4taSsxKS5qb2luKCIgIik7ZS5zZXRDdXJzb3Iocih0LGkpKSxlLnJlcGxhY2VSYW5nZShvLGUuZ2V0Q3Vyc29yKCkpfWZ1bmN0aW9uIGllKGUsdCl7dmFyIG49W10saT1lLmxpc3RTZWxlY3Rpb25zKCksbz1RKGUuY2xpcFBvcyh0KSksYT0hSyh0LG8pLHM9ZS5nZXRDdXJzb3IoImhlYWQiKSx1PWFlKGkscyksYz1LKGlbdV0uaGVhZCxpW3VdLmFuY2hvciksbD1pLmxlbmd0aC0xLHA9bC11PnU/bDowLGY9aVtwXS5hbmNob3IsZD1NYXRoLm1pbihmLmxpbmUsby5saW5lKSxoPU1hdGgubWF4KGYubGluZSxvLmxpbmUpLG09Zi5jaCxnPW8uY2gseT1pW3BdLmhlYWQuY2gtbSx2PWctbTt5PjAmJnY8PTA/KG0rKyxhfHxnLS0pOnk8MCYmdj49MD8obS0tLGN8fGcrKyk6eTwwJiYtMT09diYmKG0tLSxnKyspO2Zvcih2YXIgYj1kO2I8PWg7YisrKXt2YXIgeD17YW5jaG9yOm5ldyByKGIsbSksaGVhZDpuZXcgcihiLGcpfTtuLnB1c2goeCl9cmV0dXJuIGUuc2V0U2VsZWN0aW9ucyhuKSx0LmNoPWcsZi5jaD1tLGZ9ZnVuY3Rpb24gb2UoZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTA7aTxuO2krKyl7dmFyIG89eih0LGksMCk7ci5wdXNoKHthbmNob3I6byxoZWFkOm99KX1lLnNldFNlbGVjdGlvbnMociwwKX1mdW5jdGlvbiBhZShlLHQsbil7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPSJoZWFkIiE9biYmSyhlW3JdLmFuY2hvcix0KSxvPSJhbmNob3IiIT1uJiZLKGVbcl0uaGVhZCx0KTtpZihpfHxvKXJldHVybiByfXJldHVybi0xfWZ1bmN0aW9uIHNlKGUsdCl7dmFyIG49dC5sYXN0U2VsZWN0aW9uO3JldHVybiB0LnZpc3VhbE1vZGU/ZnVuY3Rpb24oKXt2YXIgdD1lLmxpc3RTZWxlY3Rpb25zKCksbj10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm5bSihuLmFuY2hvcixuLmhlYWQpP24uYW5jaG9yOm4uaGVhZCxKKHIuYW5jaG9yLHIuaGVhZCk/ci5oZWFkOnIuYW5jaG9yXX0oKTpmdW5jdGlvbigpe3ZhciB0PWUuZ2V0Q3Vyc29yKCksaT1lLmdldEN1cnNvcigpLG89bi52aXN1YWxCbG9jaztpZihvKXt2YXIgYT1vLndpZHRoLHM9by5oZWlnaHQ7aT1yKHQubGluZStzLHQuY2grYSk7Zm9yKHZhciB1PVtdLGM9dC5saW5lO2M8aS5saW5lO2MrKyl7dmFyIGw9cihjLHQuY2gpLHA9cihjLGkuY2gpLGY9e2FuY2hvcjpsLGhlYWQ6cH07dS5wdXNoKGYpfWUuc2V0U2VsZWN0aW9ucyh1KX1lbHNle3ZhciBkPW4uYW5jaG9yTWFyay5maW5kKCksaD1uLmhlYWRNYXJrLmZpbmQoKSxtPWgubGluZS1kLmxpbmUsZz1oLmNoLWQuY2g7aT17bGluZTppLmxpbmUrbSxjaDptP2kuY2g6ZytpLmNofSxuLnZpc3VhbExpbmUmJih0PXIodC5saW5lLDApLGk9cihpLmxpbmUsZWUoZSxpLmxpbmUpKSksZS5zZXRTZWxlY3Rpb24odCxpKX1yZXR1cm5bdCxpXX0oKX1mdW5jdGlvbiB1ZShlLHQpe3ZhciBuPXQuc2VsLmFuY2hvcixyPXQuc2VsLmhlYWQ7dC5sYXN0UGFzdGVkVGV4dCYmKHI9ZS5wb3NGcm9tSW5kZXgoZS5pbmRleEZyb21Qb3MobikrdC5sYXN0UGFzdGVkVGV4dC5sZW5ndGgpLHQubGFzdFBhc3RlZFRleHQ9bnVsbCksdC5sYXN0U2VsZWN0aW9uPXthbmNob3JNYXJrOmUuc2V0Qm9va21hcmsobiksaGVhZE1hcms6ZS5zZXRCb29rbWFyayhyKSxhbmNob3I6UShuKSxoZWFkOlEociksdmlzdWFsTW9kZTp0LnZpc3VhbE1vZGUsdmlzdWFsTGluZTp0LnZpc3VhbExpbmUsdmlzdWFsQmxvY2s6dC52aXN1YWxCbG9ja319ZnVuY3Rpb24gY2UoZSx0LG4pe3ZhciBpLG89ZS5zdGF0ZS52aW0uc2VsLGE9by5oZWFkLHM9by5hbmNob3I7cmV0dXJuIEoobix0KSYmKGk9bixuPXQsdD1pKSxKKGEscyk/KGE9WSh0LGEpLHM9WChzLG4pKToocz1ZKHQscyksYT1YKGEsbiksYT16KGEsMCwtMSksLTE9PWEuY2gmJmEubGluZSE9ZS5maXJzdExpbmUoKSYmKGE9cihhLmxpbmUtMSxlZShlLGEubGluZS0xKSkpKSxbcyxhXX1mdW5jdGlvbiBsZShlLHQsbil7dmFyIHI9ZS5zdGF0ZS52aW07dD10fHxyLnNlbDt2YXIgbj1ufHxyLnZpc3VhbExpbmU/ImxpbmUiOnIudmlzdWFsQmxvY2s/ImJsb2NrIjoiY2hhciIsaT1wZShlLHQsbik7ZS5zZXRTZWxlY3Rpb25zKGkucmFuZ2VzLGkucHJpbWFyeSksbHQoZSl9ZnVuY3Rpb24gcGUoZSx0LG4saSl7dmFyIG89USh0LmhlYWQpLGE9USh0LmFuY2hvcik7aWYoImNoYXIiPT1uKXt2YXIgcz1pfHxKKHQuaGVhZCx0LmFuY2hvcik/MDoxLHU9Sih0LmhlYWQsdC5hbmNob3IpPzE6MDtyZXR1cm4gbz16KHQuaGVhZCwwLHMpLGE9eih0LmFuY2hvciwwLHUpLHtyYW5nZXM6W3thbmNob3I6YSxoZWFkOm99XSxwcmltYXJ5OjB9fWlmKCJsaW5lIj09bil7aWYoSih0LmhlYWQsdC5hbmNob3IpKW8uY2g9MCxhLmNoPWVlKGUsYS5saW5lKTtlbHNle2EuY2g9MDt2YXIgYz1lLmxhc3RMaW5lKCk7by5saW5lPmMmJihvLmxpbmU9Yyksby5jaD1lZShlLG8ubGluZSl9cmV0dXJue3Jhbmdlczpbe2FuY2hvcjphLGhlYWQ6b31dLHByaW1hcnk6MH19aWYoImJsb2NrIj09bil7Zm9yKHZhciBsPU1hdGgubWluKGEubGluZSxvLmxpbmUpLHA9TWF0aC5taW4oYS5jaCxvLmNoKSxmPU1hdGgubWF4KGEubGluZSxvLmxpbmUpLGQ9TWF0aC5tYXgoYS5jaCxvLmNoKSsxLGg9Zi1sKzEsbT1vLmxpbmU9PWw/MDpoLTEsZz1bXSx5PTA7eTxoO3krKylnLnB1c2goe2FuY2hvcjpyKGwreSxwKSxoZWFkOnIobCt5LGQpfSk7cmV0dXJue3JhbmdlczpnLHByaW1hcnk6bX19fWZ1bmN0aW9uIGZlKGUpe3ZhciB0PWUuZ2V0Q3Vyc29yKCJoZWFkIik7cmV0dXJuIDE9PWUuZ2V0U2VsZWN0aW9uKCkubGVuZ3RoJiYodD1ZKHQsZS5nZXRDdXJzb3IoImFuY2hvciIpKSksdH1mdW5jdGlvbiBkZSh0LG4pe3ZhciByPXQuc3RhdGUudmltOyExIT09biYmdC5zZXRDdXJzb3IoJCh0LHIuc2VsLmhlYWQpKSx1ZSh0LHIpLHIudmlzdWFsTW9kZT0hMSxyLnZpc3VhbExpbmU9ITEsci52aXN1YWxCbG9jaz0hMSxlLnNpZ25hbCh0LCJ2aW0tbW9kZS1jaGFuZ2UiLHttb2RlOiJub3JtYWwifSksci5mYWtlQ3Vyc29yJiZyLmZha2VDdXJzb3IuY2xlYXIoKX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIHI9ZS5nZXRSYW5nZSh0LG4pO2lmKC9cblxzKiQvLnRlc3Qocikpe3ZhciBpPXIuc3BsaXQoIlxuIik7aS5wb3AoKTtmb3IodmFyIG8sbz1pLnBvcCgpO2kubGVuZ3RoPjAmJm8mJkMobyk7bz1pLnBvcCgpKW4ubGluZS0tLG4uY2g9MDtvPyhuLmxpbmUtLSxuLmNoPWVlKGUsbi5saW5lKSk6bi5jaD0wfX1mdW5jdGlvbiBtZShlLHQsbil7dC5jaD0wLG4uY2g9MCxuLmxpbmUrK31mdW5jdGlvbiBnZShlKXtpZighZSlyZXR1cm4gMDt2YXIgdD1lLnNlYXJjaCgvXFMvKTtyZXR1cm4tMT09dD9lLmxlbmd0aDp0fWZ1bmN0aW9uIHllKGUsdCxuLGksbyl7Zm9yKHZhciBhPWZlKGUpLHM9ZS5nZXRMaW5lKGEubGluZSksdT1hLmNoLGM9bz9idFswXTp4dFswXTshYyhzLmNoYXJBdCh1KSk7KWlmKCsrdT49cy5sZW5ndGgpcmV0dXJuIG51bGw7aT9jPXh0WzBdOihjPWJ0WzBdKShzLmNoYXJBdCh1KSl8fChjPWJ0WzFdKTtmb3IodmFyIGw9dSxwPXU7YyhzLmNoYXJBdChsKSkmJmw8cy5sZW5ndGg7KWwrKztmb3IoO2Mocy5jaGFyQXQocCkpJiZwPj0wOylwLS07aWYocCsrLHQpe2Zvcih2YXIgZj1sOy9ccy8udGVzdChzLmNoYXJBdChsKSkmJmw8cy5sZW5ndGg7KWwrKztpZihmPT1sKXtmb3IodmFyIGQ9cDsvXHMvLnRlc3Qocy5jaGFyQXQocC0xKSkmJnA+MDspcC0tO3B8fChwPWQpfX1yZXR1cm57c3RhcnQ6cihhLmxpbmUscCksZW5kOnIoYS5saW5lLGwpfX1mdW5jdGlvbiB2ZShlLHQsbil7Syh0LG4pfHxUdC5qdW1wTGlzdC5hZGQoZSx0LG4pfWZ1bmN0aW9uIGJlKGUsdCl7VHQubGFzdENoYXJhY3RlclNlYXJjaC5pbmNyZW1lbnQ9ZSxUdC5sYXN0Q2hhcmFjdGVyU2VhcmNoLmZvcndhcmQ9dC5mb3J3YXJkLFR0Lmxhc3RDaGFyYWN0ZXJTZWFyY2guc2VsZWN0ZWRDaGFyYWN0ZXI9dC5zZWxlY3RlZENoYXJhY3Rlcn1mdW5jdGlvbiB4ZShlLHQsbixpKXt2YXIgbz1RKGUuZ2V0Q3Vyc29yKCkpLGE9bj8xOi0xLHM9bj9lLmxpbmVDb3VudCgpOi0xLHU9by5jaCxjPW8ubGluZSxsPWUuZ2V0TGluZShjKSxwPXtsaW5lVGV4dDpsLG5leHRDaDpsLmNoYXJBdCh1KSxsYXN0Q2g6bnVsbCxpbmRleDp1LHN5bWI6aSxyZXZlcnNlU3ltYjoobj97IikiOiIoIiwifSI6InsifTp7IigiOiIpIiwieyI6In0ifSlbaV0sZm9yd2FyZDpuLGRlcHRoOjAsY3VyTW92ZVRocm91Z2g6ITF9LGY9TXRbaV07aWYoIWYpcmV0dXJuIG87dmFyIGQ9anRbZl0uaW5pdCxoPWp0W2ZdLmlzQ29tcGxldGU7Zm9yKGQmJmQocCk7YyE9PXMmJnQ7KXtpZihwLmluZGV4Kz1hLHAubmV4dENoPXAubGluZVRleHQuY2hhckF0KHAuaW5kZXgpLCFwLm5leHRDaCl7aWYoYys9YSxwLmxpbmVUZXh0PWUuZ2V0TGluZShjKXx8IiIsYT4wKXAuaW5kZXg9MDtlbHNle3ZhciBtPXAubGluZVRleHQubGVuZ3RoO3AuaW5kZXg9bT4wP20tMTowfXAubmV4dENoPXAubGluZVRleHQuY2hhckF0KHAuaW5kZXgpfWgocCkmJihvLmxpbmU9YyxvLmNoPXAuaW5kZXgsdC0tKX1yZXR1cm4gcC5uZXh0Q2h8fHAuY3VyTW92ZVRocm91Z2g/cihjLHAuaW5kZXgpOm99ZnVuY3Rpb24gQ2UoZSx0LG4scixpKXt2YXIgbz10LmxpbmUsYT10LmNoLHM9ZS5nZXRMaW5lKG8pLHU9bj8xOi0xLGM9cj94dDpidDtpZihpJiYiIj09cyl7aWYobys9dSxzPWUuZ2V0TGluZShvKSwhZyhlLG8pKXJldHVybiBudWxsO2E9bj8wOnMubGVuZ3RofWZvcig7Oyl7aWYoaSYmIiI9PXMpcmV0dXJue2Zyb206MCx0bzowLGxpbmU6b307Zm9yKHZhciBsPXU+MD9zLmxlbmd0aDotMSxwPWwsZj1sO2EhPWw7KXtmb3IodmFyIGQ9ITEsaD0wO2g8Yy5sZW5ndGgmJiFkOysraClpZihjW2hdKHMuY2hhckF0KGEpKSl7Zm9yKHA9YTthIT1sJiZjW2hdKHMuY2hhckF0KGEpKTspYSs9dTtpZihmPWEsZD1wIT1mLHA9PXQuY2gmJm89PXQubGluZSYmZj09cCt1KWNvbnRpbnVlO3JldHVybntmcm9tOk1hdGgubWluKHAsZisxKSx0bzpNYXRoLm1heChwLGYpLGxpbmU6b319ZHx8KGErPXUpfWlmKG8rPXUsIWcoZSxvKSlyZXR1cm4gbnVsbDtzPWUuZ2V0TGluZShvKSxhPXU+MD8wOnMubGVuZ3RofX1mdW5jdGlvbiBFZShlLHQsbixpLG8sYSl7dmFyIHM9USh0KSx1PVtdOyhpJiYhb3x8IWkmJm8pJiZuKys7Zm9yKHZhciBjPSEoaSYmbyksbD0wO2w8bjtsKyspe3ZhciBwPUNlKGUsdCxpLGEsYyk7aWYoIXApe3ZhciBmPWVlKGUsZS5sYXN0TGluZSgpKTt1LnB1c2goaT97bGluZTplLmxhc3RMaW5lKCksZnJvbTpmLHRvOmZ9OntsaW5lOjAsZnJvbTowLHRvOjB9KTticmVha311LnB1c2gocCksdD1yKHAubGluZSxpP3AudG8tMTpwLmZyb20pfXZhciBkPXUubGVuZ3RoIT1uLGg9dVswXSxtPXUucG9wKCk7cmV0dXJuIGkmJiFvPyhkfHxoLmZyb209PXMuY2gmJmgubGluZT09cy5saW5lfHwobT11LnBvcCgpKSxyKG0ubGluZSxtLmZyb20pKTppJiZvP3IobS5saW5lLG0udG8tMSk6IWkmJm8/KGR8fGgudG89PXMuY2gmJmgubGluZT09cy5saW5lfHwobT11LnBvcCgpKSxyKG0ubGluZSxtLnRvKSk6cihtLmxpbmUsbS5mcm9tKX1mdW5jdGlvbiBEZShlLHQsbixpKXtmb3IodmFyIG8sYT1lLmdldEN1cnNvcigpLHM9YS5jaCx1PTA7dTx0O3UrKyl7aWYoLTE9PShvPWtlKHMsZS5nZXRMaW5lKGEubGluZSksaSxuLCEwKSkpcmV0dXJuIG51bGw7cz1vfXJldHVybiByKGUuZ2V0Q3Vyc29yKCkubGluZSxvKX1mdW5jdGlvbiB3ZShlLHQpe3ZhciBuPWUuZ2V0Q3Vyc29yKCkubGluZTtyZXR1cm4gJChlLHIobix0LTEpKX1mdW5jdGlvbiBTZShlLHQsbixyKXtEKG4sd3QpJiYodC5tYXJrc1tuXSYmdC5tYXJrc1tuXS5jbGVhcigpLHQubWFya3Nbbl09ZS5zZXRCb29rbWFyayhyKSl9ZnVuY3Rpb24ga2UoZSx0LG4scixpKXt2YXIgbztyZXR1cm4gcj8tMT09KG89dC5pbmRleE9mKG4sZSsxKSl8fGl8fChvLT0xKTotMT09KG89dC5sYXN0SW5kZXhPZihuLGUtMSkpfHxpfHwobys9MSksb31mdW5jdGlvbiBBZShlLHQsbixpLG8pe2Z1bmN0aW9uIGEodCl7cmV0dXJuIWUuZ2V0TGluZSh0KX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gbj9hKGUpIT1hKGUrdCk6IWEoZSkmJmEoZSt0KX12YXIgdSxjLGw9dC5saW5lLHA9ZS5maXJzdExpbmUoKSxmPWUubGFzdExpbmUoKSxkPWw7aWYoaSl7Zm9yKDtwPD1kJiZkPD1mJiZuPjA7KXMoZCxpKSYmbi0tLGQrPWk7cmV0dXJuIG5ldyByKGQsMCl9dmFyIGg9ZS5zdGF0ZS52aW07aWYoaC52aXN1YWxMaW5lJiZzKGwsMSwhMCkpe3ZhciBtPWguc2VsLmFuY2hvcjtzKG0ubGluZSwtMSwhMCkmJihvJiZtLmxpbmU9PWx8fChsKz0xKSl9dmFyIGc9YShsKTtmb3IoZD1sO2Q8PWYmJm47ZCsrKXMoZCwxLCEwKSYmKG8mJmEoZCk9PWd8fG4tLSk7Zm9yKGM9bmV3IHIoZCwwKSxkPmYmJiFnP2c9ITA6bz0hMSxkPWw7ZD5wJiYobyYmYShkKSE9ZyYmZCE9bHx8IXMoZCwtMSwhMCkpO2QtLSk7cmV0dXJuIHU9bmV3IHIoZCwwKSx7c3RhcnQ6dSxlbmQ6Y319ZnVuY3Rpb24gX2UoZSx0LG4saSl7ZnVuY3Rpb24gbyhlLHQpe2lmKHQucG9zK3QuZGlyPDB8fHQucG9zK3QuZGlyPj10LmxpbmUubGVuZ3RoKXtpZih0LmxuKz10LmRpciwhZyhlLHQubG4pKXJldHVybiB0LmxpbmU9bnVsbCx0LmxuPW51bGwsdm9pZCh0LnBvcz1udWxsKTt0LmxpbmU9ZS5nZXRMaW5lKHQubG4pLHQucG9zPXQuZGlyPjA/MDp0LmxpbmUubGVuZ3RoLTF9ZWxzZSB0LnBvcys9dC5kaXJ9Zm9yKHZhciBhPXtsbjp0LmxpbmUscG9zOnQuY2h9O24+MDspYT1pPDA/ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5nZXRMaW5lKHQpLGE9e2xpbmU6aSxsbjp0LHBvczpuLGRpcjpyfSxzPXtsbjphLmxuLHBvczpudWxsfSx1PSIiPT09YS5saW5lO2ZvcihvKGUsYSk7bnVsbCE9PWEubGluZTspe2lmKCIiPT09YS5saW5lJiYhdSlyZXR1cm4gbnVsbCE9PXMucG9zP3M6e2xuOmEubG4scG9zOmEucG9zfTtpZihFKGEubGluZVthLnBvc10pJiZudWxsIT09cy5wb3MmJihhLmxuIT09cy5sbnx8YS5wb3MrMSE9PXMucG9zKSlyZXR1cm4gczsiIj09PWEubGluZXx8QyhhLmxpbmVbYS5wb3NdKXx8KHU9ITEscz17bG46YS5sbixwb3M6YS5wb3N9KSxvKGUsYSl9dmFyIGk9ZS5nZXRMaW5lKHMubG4pO3MucG9zPTA7Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDsrK2MpaWYoIUMoaVtjXSkpe3MucG9zPWM7YnJlYWt9cmV0dXJuIHN9KGUsYS5sbixhLnBvcyxpKTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmdldExpbmUodCksYT0iIj09PWkscz17bGluZTppLGxuOnQscG9zOm4sZGlyOnJ9LHU9e2xuOnMubG4scG9zOnMucG9zfSxjPSIiPT09cy5saW5lO2ZvcihvKGUscyk7bnVsbCE9PXMubGluZTspe2lmKHUubG49cy5sbix1LnBvcz1zLnBvcywiIj09PXMubGluZSYmIWMpcmV0dXJue2xuOnMubG4scG9zOnMucG9zfTtpZihhJiYiIiE9PXMubGluZSYmIUMocy5saW5lW3MucG9zXSkpcmV0dXJue2xuOnMubG4scG9zOnMucG9zfTshRShzLmxpbmVbcy5wb3NdKXx8YXx8cy5wb3MhPT1zLmxpbmUubGVuZ3RoLTEmJiFDKHMubGluZVtzLnBvcysxXSl8fChhPSEwKSxvKGUscyl9dmFyIGk9ZS5nZXRMaW5lKHUubG4pO3UucG9zPTA7Zm9yKHZhciBsPWkubGVuZ3RoLTE7bD49MDstLWwpaWYoIUMoaVtsXSkpe3UucG9zPWw7YnJlYWt9cmV0dXJuIHV9KGUsYS5sbixhLnBvcyxpKSxuLS07cmV0dXJuIHIoYS5sbixhLnBvcyl9ZnVuY3Rpb24gVGUoZSx0LG4saSl7dmFyIG8sYSxzPXQsdT17IigiOi9bKCldLywiKSI6L1soKV0vLCJbIjovW1tcXV0vLCJdIjovW1tcXV0vLCJ7IjovW3t9XS8sIn0iOi9be31dL31bbl0sYz17IigiOiIoIiwiKSI6IigiLCJbIjoiWyIsIl0iOiJbIiwieyI6InsiLCJ9IjoieyJ9W25dLGw9ZS5nZXRMaW5lKHMubGluZSkuY2hhckF0KHMuY2gpLHA9bD09PWM/MTowO2lmKG89ZS5zY2FuRm9yQnJhY2tldChyKHMubGluZSxzLmNoK3ApLC0xLHZvaWQgMCx7YnJhY2tldFJlZ2V4OnV9KSxhPWUuc2NhbkZvckJyYWNrZXQocihzLmxpbmUscy5jaCtwKSwxLHZvaWQgMCx7YnJhY2tldFJlZ2V4OnV9KSwhb3x8IWEpcmV0dXJue3N0YXJ0OnMsZW5kOnN9O2lmKG89by5wb3MsYT1hLnBvcyxvLmxpbmU9PWEubGluZSYmby5jaD5hLmNofHxvLmxpbmU+YS5saW5lKXt2YXIgZj1vO289YSxhPWZ9cmV0dXJuIGk/YS5jaCs9MTpvLmNoKz0xLHtzdGFydDpvLGVuZDphfX1mdW5jdGlvbiBPZShlLHQsbixpKXt2YXIgbyxhLHMsdSxjPVEodCksbD1lLmdldExpbmUoYy5saW5lKSxwPWwuc3BsaXQoIiIpLGY9cC5pbmRleE9mKG4pO2lmKGMuY2g8Zj9jLmNoPWY6ZjxjLmNoJiZwW2MuY2hdPT1uJiYoYT1jLmNoLC0tYy5jaCkscFtjLmNoXSE9bnx8YSlmb3Iocz1jLmNoO3M+LTEmJiFvO3MtLSlwW3NdPT1uJiYobz1zKzEpO2Vsc2Ugbz1jLmNoKzE7aWYobyYmIWEpZm9yKHM9byx1PXAubGVuZ3RoO3M8dSYmIWE7cysrKXBbc109PW4mJihhPXMpO3JldHVybiBvJiZhPyhpJiYoLS1vLCsrYSkse3N0YXJ0OnIoYy5saW5lLG8pLGVuZDpyKGMubGluZSxhKX0pOntzdGFydDpjLGVuZDpjfX1mdW5jdGlvbiBGZSgpe31mdW5jdGlvbiBOZShlKXt2YXIgdD1lLnN0YXRlLnZpbTtyZXR1cm4gdC5zZWFyY2hTdGF0ZV98fCh0LnNlYXJjaFN0YXRlXz1uZXcgRmUpfWZ1bmN0aW9uIEllKGUsdCxuLHIsaSl7ZS5vcGVuRGlhbG9nP2Uub3BlbkRpYWxvZyh0LHIse2JvdHRvbTohMCx2YWx1ZTppLnZhbHVlLG9uS2V5RG93bjppLm9uS2V5RG93bixvbktleVVwOmkub25LZXlVcCxzZWxlY3RWYWx1ZU9uT3BlbjohMX0pOnIocHJvbXB0KG4sIiIpKX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gTWUoZSwiLyIpfWZ1bmN0aW9uIFBlKGUpe3JldHVybiBqZShlLCIvIil9ZnVuY3Rpb24gTWUoZSx0KXt2YXIgbj1qZShlLHQpfHxbXTtpZighbi5sZW5ndGgpcmV0dXJuW107dmFyIHI9W107aWYoMD09PW5bMF0pe2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKSJudW1iZXIiPT10eXBlb2YgbltpXSYmci5wdXNoKGUuc3Vic3RyaW5nKG5baV0rMSxuW2krMV0pKTtyZXR1cm4gcn19ZnVuY3Rpb24gamUoZSx0KXt0fHwodD0iLyIpO2Zvcih2YXIgbj0hMSxyPVtdLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQXQoaSk7bnx8byE9dHx8ci5wdXNoKGkpLG49IW4mJiJcXCI9PW99cmV0dXJuIHJ9ZnVuY3Rpb24gUmUoZSl7Zm9yKHZhciB0PSJ8KCl7IixuPSJ9IixyPSExLGk9W10sbz0tMTtvPGUubGVuZ3RoO28rKyl7dmFyIGE9ZS5jaGFyQXQobyl8fCIiLHM9ZS5jaGFyQXQobysxKXx8IiIsdT1zJiYtMSE9dC5pbmRleE9mKHMpO3I/KCJcXCI9PT1hJiZ1fHxpLnB1c2goYSkscj0hMSk6IlxcIj09PWE/KHI9ITAscyYmLTEhPW4uaW5kZXhPZihzKSYmKHU9ITApLHUmJiJcXCIhPT1zfHxpLnB1c2goYSkpOihpLnB1c2goYSksdSYmIlxcIiE9PXMmJmkucHVzaCgiXFwiKSl9cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gQmUoZSl7Zm9yKHZhciB0PSExLG49W10scj0tMTtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZS5jaGFyQXQocil8fCIiLG89ZS5jaGFyQXQocisxKXx8IiI7UnRbaStvXT8obi5wdXNoKFJ0W2krb10pLHIrKyk6dD8obi5wdXNoKGkpLHQ9ITEpOiJcXCI9PT1pPyh0PSEwLGIobyl8fCIkIj09PW8/bi5wdXNoKCIkIik6Ii8iIT09byYmIlxcIiE9PW8mJm4ucHVzaCgiXFwiKSk6KCIkIj09PWkmJm4ucHVzaCgiJCIpLG4ucHVzaChpKSwiLyI9PT1vJiZuLnB1c2goIlxcIikpfXJldHVybiBuLmpvaW4oIiIpfWZ1bmN0aW9uICRlKHQpe2Zvcih2YXIgbj1uZXcgZS5TdHJpbmdTdHJlYW0odCkscj1bXTshbi5lb2woKTspe2Zvcig7bi5wZWVrKCkmJiJcXCIhPW4ucGVlaygpOylyLnB1c2gobi5uZXh0KCkpO3ZhciBpPSExO2Zvcih2YXIgbyBpbiBCdClpZihuLm1hdGNoKG8sITApKXtpPSEwLHIucHVzaChCdFtvXSk7YnJlYWt9aXx8ci5wdXNoKG4ubmV4dCgpKX1yZXR1cm4gci5qb2luKCIiKX1mdW5jdGlvbiBVZShlLHQsbil7aWYoVHQucmVnaXN0ZXJDb250cm9sbGVyLmdldFJlZ2lzdGVyKCIvIikuc2V0VGV4dChlKSxlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBlO3ZhciByLGksbz1QZShlKTtpZihvLmxlbmd0aCl7cj1lLnN1YnN0cmluZygwLG9bMF0pO2k9LTEhPWUuc3Vic3RyaW5nKG9bMF0pLmluZGV4T2YoImkiKX1lbHNlIHI9ZTtyZXR1cm4gcj8oaygicGNyZSIpfHwocj1SZShyKSksbiYmKHQ9L15bXkEtWl0qJC8udGVzdChyKSksbmV3IFJlZ0V4cChyLHR8fGk/ImkiOnZvaWQgMCkpOm51bGx9ZnVuY3Rpb24gemUoZSx0KXtlLm9wZW5Ob3RpZmljYXRpb24/ZS5vcGVuTm90aWZpY2F0aW9uKCc8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+Jyt0KyI8L3NwYW4+Iix7Ym90dG9tOiEwLGR1cmF0aW9uOjVlM30pOmFsZXJ0KHQpfWZ1bmN0aW9uIEdlKGUsdCl7dmFyIG49JzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogbW9ub3NwYWNlOyB3aGl0ZS1zcGFjZTogcHJlIj4nKyhlfHwiIikrJzxpbnB1dCB0eXBlPSJ0ZXh0Ij48L3NwYW4+JztyZXR1cm4gdCYmKG4rPScgPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4nK3QrIjwvc3Bhbj4iKSxufWZ1bmN0aW9uIFZlKGUsdCl7dmFyIG49KHQucHJlZml4fHwiIikrIiAiKyh0LmRlc2N8fCIiKTtJZShlLEdlKHQucHJlZml4LHQuZGVzYyksbix0Lm9uQ2xvc2UsdCl9ZnVuY3Rpb24gcWUoZSx0KXtpZihlIGluc3RhbmNlb2YgUmVnRXhwJiZ0IGluc3RhbmNlb2YgUmVnRXhwKXtmb3IodmFyIG49WyJnbG9iYWwiLCJtdWx0aWxpbmUiLCJpZ25vcmVDYXNlIiwic291cmNlIl0scj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGVbaV0hPT10W2ldKXJldHVybiExfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEhlKGUsdCxuLHIpe2lmKHQpe3ZhciBpPU5lKGUpLG89VWUodCwhIW4sISFyKTtpZihvKXJldHVybiBRZShlLG8pLHFlKG8saS5nZXRRdWVyeSgpKT9vOihpLnNldFF1ZXJ5KG8pLG8pfX1mdW5jdGlvbiBXZShlKXtpZigiXiI9PWUuc291cmNlLmNoYXJBdCgwKSl2YXIgdD0hMDtyZXR1cm57dG9rZW46ZnVuY3Rpb24obil7aWYodCYmIW4uc29sKCkpcmV0dXJuIHZvaWQgbi5za2lwVG9FbmQoKTt2YXIgcj1uLm1hdGNoKGUsITEpO2lmKHIpcmV0dXJuIDA9PXJbMF0ubGVuZ3RoPyhuLm5leHQoKSwic2VhcmNoaW5nIik6bi5zb2woKXx8KG4uYmFja1VwKDEpLGUuZXhlYyhuLm5leHQoKStyWzBdKSk/KG4ubWF0Y2goZSksInNlYXJjaGluZyIpOihuLm5leHQoKSxudWxsKTtmb3IoOyFuLmVvbCgpJiYobi5uZXh0KCksIW4ubWF0Y2goZSwhMSkpOyk7fSxxdWVyeTplfX1mdW5jdGlvbiBRZShlLHQpe3ZhciBuPU5lKGUpLHI9bi5nZXRPdmVybGF5KCk7ciYmdD09ci5xdWVyeXx8KHImJmUucmVtb3ZlT3ZlcmxheShyKSxyPVdlKHQpLGUuYWRkT3ZlcmxheShyKSxlLnNob3dNYXRjaGVzT25TY3JvbGxiYXImJihuLmdldFNjcm9sbGJhckFubm90YXRlKCkmJm4uZ2V0U2Nyb2xsYmFyQW5ub3RhdGUoKS5jbGVhcigpLG4uc2V0U2Nyb2xsYmFyQW5ub3RhdGUoZS5zaG93TWF0Y2hlc09uU2Nyb2xsYmFyKHQpKSksbi5zZXRPdmVybGF5KHIpKX1mdW5jdGlvbiBLZShlLHQsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9MSksZS5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIG89ZS5nZXRDdXJzb3IoKSxhPWUuZ2V0U2VhcmNoQ3Vyc29yKG4sbykscz0wO3M8aTtzKyspe3ZhciB1PWEuZmluZCh0KTtpZigwPT1zJiZ1JiZLKGEuZnJvbSgpLG8pJiYodT1hLmZpbmQodCkpLCF1JiYoYT1lLmdldFNlYXJjaEN1cnNvcihuLHQ/cihlLmxhc3RMaW5lKCkpOnIoZS5maXJzdExpbmUoKSwwKSksIWEuZmluZCh0KSkpcmV0dXJufXJldHVybiBhLmZyb20oKX0pfWZ1bmN0aW9uIEplKGUpe3ZhciB0PU5lKGUpO2UucmVtb3ZlT3ZlcmxheShOZShlKS5nZXRPdmVybGF5KCkpLHQuc2V0T3ZlcmxheShudWxsKSx0LmdldFNjcm9sbGJhckFubm90YXRlKCkmJih0LmdldFNjcm9sbGJhckFubm90YXRlKCkuY2xlYXIoKSx0LnNldFNjcm9sbGJhckFubm90YXRlKG51bGwpKX1mdW5jdGlvbiBZZShlLHQsbil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBlJiYoZT1lLmxpbmUpLHQgaW5zdGFuY2VvZiBBcnJheT9EKGUsdCk6bj9lPj10JiZlPD1uOmU9PXR9ZnVuY3Rpb24gWGUoZSl7dmFyIHQ9ZS5nZXRTY3JvbGxJbmZvKCksbj1lLmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6Nit0LnRvcH0sImxvY2FsIikscj10LmNsaWVudEhlaWdodC0xMCt0LnRvcCxpPWUuY29vcmRzQ2hhcih7bGVmdDowLHRvcDpyfSwibG9jYWwiKTtyZXR1cm57dG9wOm4ubGluZSxib3R0b206aS5saW5lfX1mdW5jdGlvbiBaZShlLHQsbil7aWYoIiciPT1uKXt2YXIgcj1lLmRvYy5oaXN0b3J5LmRvbmUsaT1yW3IubGVuZ3RoLTJdO3JldHVybiBpJiZpLnJhbmdlcyYmaS5yYW5nZXNbMF0uaGVhZH1pZigiLiI9PW4pe2lmKDA9PWUuZG9jLmhpc3RvcnkubGFzdE1vZFRpbWUpcmV0dXJuO3ZhciBvPWUuZG9jLmhpc3RvcnkuZG9uZS5maWx0ZXIoZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09ZS5jaGFuZ2VzKXJldHVybiBlfSk7by5yZXZlcnNlKCk7cmV0dXJuIG9bMF0uY2hhbmdlc1swXS50b312YXIgYT10Lm1hcmtzW25dO3JldHVybiBhJiZhLmZpbmQoKX1mdW5jdGlvbiBldCh0LG4scixpLG8sYSxzLHUsYyl7ZnVuY3Rpb24gbCgpe3Qub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKDshbTspcCgpLGYoKTtkKCl9KX1mdW5jdGlvbiBwKCl7dmFyIGU9dC5nZXRSYW5nZShhLmZyb20oKSxhLnRvKCkpLG49ZS5yZXBsYWNlKHMsdSk7YS5yZXBsYWNlKG4pfWZ1bmN0aW9uIGYoKXtmb3IoO2EuZmluZE5leHQoKSYmWWUoYS5mcm9tKCksaSxvKTspaWYocnx8IWd8fGEuZnJvbSgpLmxpbmUhPWcubGluZSlyZXR1cm4gdC5zY3JvbGxJbnRvVmlldyhhLmZyb20oKSwzMCksdC5zZXRTZWxlY3Rpb24oYS5mcm9tKCksYS50bygpKSxnPWEuZnJvbSgpLHZvaWQobT0hMSk7bT0hMH1mdW5jdGlvbiBkKGUpe2lmKGUmJmUoKSx0LmZvY3VzKCksZyl7dC5zZXRDdXJzb3IoZyk7dmFyIG49dC5zdGF0ZS52aW07bi5leE1vZGU9ITEsbi5sYXN0SFBvcz1uLmxhc3RIU1Bvcz1nLmNofWMmJmMoKX1mdW5jdGlvbiBoKG4scixpKXtzd2l0Y2goZS5lX3N0b3AobiksZS5rZXlOYW1lKG4pKXtjYXNlIlkiOnAoKSxmKCk7YnJlYWs7Y2FzZSJOIjpmKCk7YnJlYWs7Y2FzZSJBIjp2YXIgbz1jO2M9dm9pZCAwLHQub3BlcmF0aW9uKGwpLGM9bzticmVhaztjYXNlIkwiOnAoKTtjYXNlIlEiOmNhc2UiRXNjIjpjYXNlIkN0cmwtQyI6Y2FzZSJDdHJsLVsiOmQoaSl9cmV0dXJuIG0mJmQoaSksITB9dC5zdGF0ZS52aW0uZXhNb2RlPSEwO3ZhciBtPSExLGc9YS5mcm9tKCk7cmV0dXJuIGYoKSxtP3ZvaWQgemUodCwiTm8gbWF0Y2hlcyBmb3IgIitzLnNvdXJjZSk6bj92b2lkIFZlKHQse3ByZWZpeDoicmVwbGFjZSB3aXRoIDxzdHJvbmc+Iit1KyI8L3N0cm9uZz4gKHkvbi9hL3EvbCkiLG9uS2V5RG93bjpofSk6KGwoKSx2b2lkKGMmJmMoKSkpfWZ1bmN0aW9uIHR0KHQpe3ZhciBuPXQuc3RhdGUudmltLHI9VHQubWFjcm9Nb2RlU3RhdGUsaT1UdC5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIoIi4iKSxvPXIuaXNQbGF5aW5nLGE9ci5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMscz1bXTtpZighbyl7Zm9yKHZhciB1PWEuaW5WaXN1YWxCbG9jayYmbi5sYXN0U2VsZWN0aW9uP24ubGFzdFNlbGVjdGlvbi52aXN1YWxCbG9jay5oZWlnaHQ6MSxjPWEuY2hhbmdlcyxzPVtdLGw9MDtsPGMubGVuZ3RoOylzLnB1c2goY1tsXSksY1tsXWluc3RhbmNlb2YgZnQ/bCsrOmwrPXU7YS5jaGFuZ2VzPXMsdC5vZmYoImNoYW5nZSIsdXQpLGUub2ZmKHQuZ2V0SW5wdXRGaWVsZCgpLCJrZXlkb3duIixkdCl9IW8mJm4uaW5zZXJ0TW9kZVJlcGVhdD4xJiYoaHQodCxuLG4uaW5zZXJ0TW9kZVJlcGVhdC0xLCEwKSxuLmxhc3RFZGl0SW5wdXRTdGF0ZS5yZXBlYXRPdmVycmlkZT1uLmluc2VydE1vZGVSZXBlYXQpLGRlbGV0ZSBuLmluc2VydE1vZGVSZXBlYXQsbi5pbnNlcnRNb2RlPSExLHQuc2V0Q3Vyc29yKHQuZ2V0Q3Vyc29yKCkubGluZSx0LmdldEN1cnNvcigpLmNoLTEpLHQuc2V0T3B0aW9uKCJrZXlNYXAiLCJ2aW0iKSx0LnNldE9wdGlvbigiZGlzYWJsZUlucHV0IiwhMCksdC50b2dnbGVPdmVyd3JpdGUoITEpLGkuc2V0VGV4dChhLmNoYW5nZXMuam9pbigiIikpLGUuc2lnbmFsKHQsInZpbS1tb2RlLWNoYW5nZSIse21vZGU6Im5vcm1hbCJ9KSxyLmlzUmVjb3JkaW5nJiZhdChyKX1mdW5jdGlvbiBudChlKXt0LnVuc2hpZnQoZSl9ZnVuY3Rpb24gcnQoZSx0LG4scixpKXt2YXIgbz17a2V5czplLHR5cGU6dH07b1t0XT1uLG9bdCsiQXJncyJdPXI7Zm9yKHZhciBhIGluIGkpb1thXT1pW2FdO250KG8pfWZ1bmN0aW9uIGl0KHQsbixyLGkpe3ZhciBvPVR0LnJlZ2lzdGVyQ29udHJvbGxlci5nZXRSZWdpc3RlcihpKTtpZigiOiI9PWkpcmV0dXJuIG8ua2V5QnVmZmVyWzBdJiZHdC5wcm9jZXNzQ29tbWFuZCh0LG8ua2V5QnVmZmVyWzBdKSx2b2lkKHIuaXNQbGF5aW5nPSExKTt2YXIgYT1vLmtleUJ1ZmZlcixzPTA7ci5pc1BsYXlpbmc9ITAsci5yZXBsYXlTZWFyY2hRdWVyaWVzPW8uc2VhcmNoUXVlcmllcy5zbGljZSgwKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylmb3IodmFyIGMsbCxwPWFbdV07cDspaWYoYz0vPFx3Ky0uKz8+fDxcdys+fC4vLmV4ZWMocCksbD1jWzBdLHA9cC5zdWJzdHJpbmcoYy5pbmRleCtsLmxlbmd0aCksZS5WaW0uaGFuZGxlS2V5KHQsbCwibWFjcm8iKSxuLmluc2VydE1vZGUpe3ZhciBmPW8uaW5zZXJ0TW9kZUNoYW5nZXNbcysrXS5jaGFuZ2VzO1R0Lm1hY3JvTW9kZVN0YXRlLmxhc3RJbnNlcnRNb2RlQ2hhbmdlcy5jaGFuZ2VzPWYsbXQodCxmLDEpLHR0KHQpfXIuaXNQbGF5aW5nPSExfWZ1bmN0aW9uIG90KGUsdCl7aWYoIWUuaXNQbGF5aW5nKXt2YXIgbj1lLmxhdGVzdFJlZ2lzdGVyLHI9VHQucmVnaXN0ZXJDb250cm9sbGVyLmdldFJlZ2lzdGVyKG4pO3ImJnIucHVzaFRleHQodCl9fWZ1bmN0aW9uIGF0KGUpe2lmKCFlLmlzUGxheWluZyl7dmFyIHQ9ZS5sYXRlc3RSZWdpc3RlcixuPVR0LnJlZ2lzdGVyQ29udHJvbGxlci5nZXRSZWdpc3Rlcih0KTtuJiZuLnB1c2hJbnNlcnRNb2RlQ2hhbmdlcyYmbi5wdXNoSW5zZXJ0TW9kZUNoYW5nZXMoZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMpfX1mdW5jdGlvbiBzdChlLHQpe2lmKCFlLmlzUGxheWluZyl7dmFyIG49ZS5sYXRlc3RSZWdpc3RlcixyPVR0LnJlZ2lzdGVyQ29udHJvbGxlci5nZXRSZWdpc3RlcihuKTtyJiZyLnB1c2hTZWFyY2hRdWVyeSYmci5wdXNoU2VhcmNoUXVlcnkodCl9fWZ1bmN0aW9uIHV0KGUsdCl7dmFyIG49VHQubWFjcm9Nb2RlU3RhdGUscj1uLmxhc3RJbnNlcnRNb2RlQ2hhbmdlcztpZighbi5pc1BsYXlpbmcpZm9yKDt0Oyl7aWYoci5leHBlY3RDdXJzb3JBY3Rpdml0eUZvckNoYW5nZT0hMCwiK2lucHV0Ij09dC5vcmlnaW58fCJwYXN0ZSI9PXQub3JpZ2lufHx2b2lkIDA9PT10Lm9yaWdpbil7dmFyIGk9dC50ZXh0LmpvaW4oIlxuIik7ci5tYXliZVJlc2V0JiYoci5jaGFuZ2VzPVtdLHIubWF5YmVSZXNldD0hMSksZS5zdGF0ZS5vdmVyd3JpdGUmJiEvXG4vLnRlc3QoaSk/ci5jaGFuZ2VzLnB1c2goW2ldKTpyLmNoYW5nZXMucHVzaChpKX10PXQubmV4dH19ZnVuY3Rpb24gY3QoZSl7dmFyIHQ9ZS5zdGF0ZS52aW07aWYodC5pbnNlcnRNb2RlKXt2YXIgbj1UdC5tYWNyb01vZGVTdGF0ZTtpZihuLmlzUGxheWluZylyZXR1cm47dmFyIHI9bi5sYXN0SW5zZXJ0TW9kZUNoYW5nZXM7ci5leHBlY3RDdXJzb3JBY3Rpdml0eUZvckNoYW5nZT9yLmV4cGVjdEN1cnNvckFjdGl2aXR5Rm9yQ2hhbmdlPSExOnIubWF5YmVSZXNldD0hMH1lbHNlIGUuY3VyT3AuaXNWaW1PcHx8cHQoZSx0KTt0LnZpc3VhbE1vZGUmJmx0KGUpfWZ1bmN0aW9uIGx0KGUpe3ZhciB0PWUuc3RhdGUudmltLG49JChlLFEodC5zZWwuaGVhZCkpLHI9eihuLDAsMSk7dC5mYWtlQ3Vyc29yJiZ0LmZha2VDdXJzb3IuY2xlYXIoKSx0LmZha2VDdXJzb3I9ZS5tYXJrVGV4dChuLHIse2NsYXNzTmFtZToiY20tYW5pbWF0ZS1mYXQtY3Vyc29yIn0pfWZ1bmN0aW9uIHB0KHQsbil7dmFyIHI9dC5nZXRDdXJzb3IoImFuY2hvciIpLGk9dC5nZXRDdXJzb3IoImhlYWQiKTtpZihuLnZpc3VhbE1vZGUmJiF0LnNvbWV0aGluZ1NlbGVjdGVkKCk/ZGUodCwhMSk6bi52aXN1YWxNb2RlfHxuLmluc2VydE1vZGV8fCF0LnNvbWV0aGluZ1NlbGVjdGVkKCl8fChuLnZpc3VhbE1vZGU9ITAsbi52aXN1YWxMaW5lPSExLGUuc2lnbmFsKHQsInZpbS1tb2RlLWNoYW5nZSIse21vZGU6InZpc3VhbCJ9KSksbi52aXN1YWxNb2RlKXt2YXIgbz1KKGkscik/MDotMSxhPUooaSxyKT8tMTowO2k9eihpLDAsbykscj16KHIsMCxhKSxuLnNlbD17YW5jaG9yOnIsaGVhZDppfSxTZSh0LG4sIjwiLFkoaSxyKSksU2UodCxuLCI+IixYKGkscikpfWVsc2Ugbi5pbnNlcnRNb2RlfHwobi5sYXN0SFBvcz10LmdldEN1cnNvcigpLmNoKX1mdW5jdGlvbiBmdChlKXt0aGlzLmtleU5hbWU9ZX1mdW5jdGlvbiBkdCh0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIGkubWF5YmVSZXNldCYmKGkuY2hhbmdlcz1bXSxpLm1heWJlUmVzZXQ9ITEpLGkuY2hhbmdlcy5wdXNoKG5ldyBmdChvKSksITB9dmFyIHI9VHQubWFjcm9Nb2RlU3RhdGUsaT1yLmxhc3RJbnNlcnRNb2RlQ2hhbmdlcyxvPWUua2V5TmFtZSh0KTtvJiYoLTE9PW8uaW5kZXhPZigiRGVsZXRlIikmJi0xPT1vLmluZGV4T2YoIkJhY2tzcGFjZSIpfHxlLmxvb2t1cEtleShvLCJ2aW0taW5zZXJ0IixuKSl9ZnVuY3Rpb24gaHQoZSx0LG4scil7ZnVuY3Rpb24gaSgpe3M/TnQucHJvY2Vzc0FjdGlvbihlLHQsdC5sYXN0RWRpdEFjdGlvbkNvbW1hbmQpOk50LmV2YWxJbnB1dChlLHQpfWZ1bmN0aW9uIG8obil7aWYoYS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMuY2hhbmdlcy5sZW5ndGg+MCl7bj10Lmxhc3RFZGl0QWN0aW9uQ29tbWFuZD9uOjE7dmFyIHI9YS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXM7bXQoZSxyLmNoYW5nZXMsbil9fXZhciBhPVR0Lm1hY3JvTW9kZVN0YXRlO2EuaXNQbGF5aW5nPSEwO3ZhciBzPSEhdC5sYXN0RWRpdEFjdGlvbkNvbW1hbmQsdT10LmlucHV0U3RhdGU7aWYodC5pbnB1dFN0YXRlPXQubGFzdEVkaXRJbnB1dFN0YXRlLHMmJnQubGFzdEVkaXRBY3Rpb25Db21tYW5kLmludGVybGFjZUluc2VydFJlcGVhdClmb3IodmFyIGM9MDtjPG47YysrKWkoKSxvKDEpO2Vsc2Ugcnx8aSgpLG8obik7dC5pbnB1dFN0YXRlPXUsdC5pbnNlcnRNb2RlJiYhciYmdHQoZSksYS5pc1BsYXlpbmc9ITF9ZnVuY3Rpb24gbXQodCxuLHIpe2Z1bmN0aW9uIGkobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP2UuY29tbWFuZHNbbl0odCk6bih0KSwhMH12YXIgbz10LmdldEN1cnNvcigiaGVhZCIpLGE9VHQubWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzLmluVmlzdWFsQmxvY2s7aWYoYSl7dmFyIHM9dC5zdGF0ZS52aW0sdT1zLmxhc3RTZWxlY3Rpb24sYz1HKHUuYW5jaG9yLHUuaGVhZCk7b2UodCxvLGMubGluZSsxKSxyPXQubGlzdFNlbGVjdGlvbnMoKS5sZW5ndGgsdC5zZXRDdXJzb3Iobyl9Zm9yKHZhciBsPTA7bDxyO2wrKyl7YSYmdC5zZXRDdXJzb3IoeihvLGwsMCkpO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgZj1uW3BdO2lmKGYgaW5zdGFuY2VvZiBmdCllLmxvb2t1cEtleShmLmtleU5hbWUsInZpbS1pbnNlcnQiLGkpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBmKXt2YXIgZD10LmdldEN1cnNvcigpO3QucmVwbGFjZVJhbmdlKGYsZCxkKX1lbHNle3ZhciBoPXQuZ2V0Q3Vyc29yKCksbT16KGgsMCxmWzBdLmxlbmd0aCk7dC5yZXBsYWNlUmFuZ2UoZlswXSxoLG0pfX19YSYmdC5zZXRDdXJzb3IoeihvLDAsMSkpfWUuZGVmaW5lT3B0aW9uKCJ2aW1Nb2RlIiwhMSxmdW5jdGlvbih0LG4scil7biYmInZpbSIhPXQuZ2V0T3B0aW9uKCJrZXlNYXAiKT90LnNldE9wdGlvbigia2V5TWFwIiwidmltIik6IW4mJnIhPWUuSW5pdCYmL152aW0vLnRlc3QodC5nZXRPcHRpb24oImtleU1hcCIpKSYmdC5zZXRPcHRpb24oImtleU1hcCIsImRlZmF1bHQiKX0pO3ZhciBndD17U2hpZnQ6IlMiLEN0cmw6IkMiLEFsdDoiQSIsQ21kOiJEIixNb2Q6IkEifSx5dD17RW50ZXI6IkNSIixCYWNrc3BhY2U6IkJTIixEZWxldGU6IkRlbCIsSW5zZXJ0OiJJbnMifSx2dD0vW1xkXS8sYnQ9W2UuaXNXb3JkQ2hhcixmdW5jdGlvbih0KXtyZXR1cm4gdCYmIWUuaXNXb3JkQ2hhcih0KSYmIS9ccy8udGVzdCh0KX1dLHh0PVtmdW5jdGlvbihlKXtyZXR1cm4vXFMvLnRlc3QoZSl9XSxDdD1tKDY1LDI2KSxFdD1tKDk3LDI2KSxEdD1tKDQ4LDEwKSx3dD1bXS5jb25jYXQoQ3QsRXQsRHQsWyI8IiwiPiJdKSxTdD1bXS5jb25jYXQoQ3QsRXQsRHQsWyItIiwnIicsIi4iLCI6IiwiLyJdKSxrdD17fTt3KCJmaWxldHlwZSIsdm9pZCAwLCJzdHJpbmciLFsiZnQiXSxmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQpe2lmKHZvaWQgMD09PWUpe3ZhciBuPXQuZ2V0T3B0aW9uKCJtb2RlIik7cmV0dXJuIm51bGwiPT1uPyIiOm59dmFyIG49IiI9PWU/Im51bGwiOmU7dC5zZXRPcHRpb24oIm1vZGUiLG4pfX0pO3ZhciBBdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHMpe2Z1bmN0aW9uIHUodCl7dmFyIGk9KytyJW4sbz1hW2ldO28mJm8uY2xlYXIoKSxhW2ldPWUuc2V0Qm9va21hcmsodCl9dmFyIGM9ciVuLGw9YVtjXTtpZihsKXt2YXIgcD1sLmZpbmQoKTtwJiYhSyhwLHQpJiZ1KHQpfWVsc2UgdSh0KTt1KHMpLGk9ciwobz1yLW4rMSk8MCYmKG89MCl9ZnVuY3Rpb24gdChlLHQpe3IrPXQscj5pP3I9aTpyPG8mJihyPW8pO3ZhciBzPWFbKG4rciklbl07aWYocyYmIXMuZmluZCgpKXt2YXIgdSxjPXQ+MD8xOi0xLGw9ZS5nZXRDdXJzb3IoKTtkb3tpZihyKz1jLChzPWFbKG4rciklbl0pJiYodT1zLmZpbmQoKSkmJiFLKGwsdSkpYnJlYWt9d2hpbGUocjxpJiZyPm8pfXJldHVybiBzfXZhciBuPTEwMCxyPS0xLGk9MCxvPTAsYT1uZXcgQXJyYXkobik7cmV0dXJue2NhY2hlZEN1cnNvcjp2b2lkIDAsYWRkOmUsbW92ZTp0fX0sX3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/e2NoYW5nZXM6ZS5jaGFuZ2VzLGV4cGVjdEN1cnNvckFjdGl2aXR5Rm9yQ2hhbmdlOmUuZXhwZWN0Q3Vyc29yQWN0aXZpdHlGb3JDaGFuZ2V9OntjaGFuZ2VzOltdLGV4cGVjdEN1cnNvckFjdGl2aXR5Rm9yQ2hhbmdlOiExfX07QS5wcm90b3R5cGU9e2V4aXRNYWNyb1JlY29yZE1vZGU6ZnVuY3Rpb24oKXt2YXIgZT1UdC5tYWNyb01vZGVTdGF0ZTtlLm9uUmVjb3JkaW5nRG9uZSYmZS5vblJlY29yZGluZ0RvbmUoKSxlLm9uUmVjb3JkaW5nRG9uZT12b2lkIDAsZS5pc1JlY29yZGluZz0hMX0sZW50ZXJNYWNyb1JlY29yZE1vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1UdC5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIodCk7biYmKG4uY2xlYXIoKSx0aGlzLmxhdGVzdFJlZ2lzdGVyPXQsZS5vcGVuRGlhbG9nJiYodGhpcy5vblJlY29yZGluZ0RvbmU9ZS5vcGVuRGlhbG9nKCIocmVjb3JkaW5nKVsiK3QrIl0iLG51bGwse2JvdHRvbTohMH0pKSx0aGlzLmlzUmVjb3JkaW5nPSEwKX19O3ZhciBUdCxPdCxGdD17YnVpbGRLZXlNYXA6ZnVuY3Rpb24oKXt9LGdldFJlZ2lzdGVyQ29udHJvbGxlcjpmdW5jdGlvbigpe3JldHVybiBUdC5yZWdpc3RlckNvbnRyb2xsZXJ9LHJlc2V0VmltR2xvYmFsU3RhdGVfOlQsZ2V0VmltR2xvYmFsU3RhdGVfOmZ1bmN0aW9uKCl7cmV0dXJuIFR0fSxtYXliZUluaXRWaW1TdGF0ZV86XyxzdXBwcmVzc0Vycm9yTG9nZ2luZzohMSxJbnNlcnRNb2RlS2V5OmZ0LG1hcDpmdW5jdGlvbihlLHQsbil7R3QubWFwKGUsdCxuKX0sdW5tYXA6ZnVuY3Rpb24oZSx0KXtHdC51bm1hcChlLHQpfSxzZXRPcHRpb246UyxnZXRPcHRpb246ayxkZWZpbmVPcHRpb246dyxkZWZpbmVFeDpmdW5jdGlvbihlLHQsbil7aWYodCl7aWYoMCE9PWUuaW5kZXhPZih0KSl0aHJvdyBuZXcgRXJyb3IoJyhWaW0uZGVmaW5lRXgpICInK3QrJyIgaXMgbm90IGEgcHJlZml4IG9mICInK2UrJyIsIGNvbW1hbmQgbm90IHJlZ2lzdGVyZWQnKX1lbHNlIHQ9ZTt6dFtlXT1uLEd0LmNvbW1hbmRNYXBfW3RdPXtuYW1lOmUsc2hvcnROYW1lOnQsdHlwZToiYXBpIn19LGhhbmRsZUtleTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5maW5kS2V5KGUsdCxuKTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHIpcmV0dXJuIHIoKX0sZmluZEtleTpmdW5jdGlvbihuLHIsaSl7ZnVuY3Rpb24gbygpe3ZhciBlPVR0Lm1hY3JvTW9kZVN0YXRlO2lmKGUuaXNSZWNvcmRpbmcpe2lmKCJxIj09cilyZXR1cm4gZS5leGl0TWFjcm9SZWNvcmRNb2RlKCksRihuKSwhMDsibWFwcGluZyIhPWkmJm90KGUscil9fWZ1bmN0aW9uIGEoKXtpZigiPEVzYz4iPT1yKXJldHVybiBGKG4pLGMudmlzdWFsTW9kZT9kZShuKTpjLmluc2VydE1vZGUmJnR0KG4pLCEwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBpO3Q7KWk9LzxcdystLis/Pnw8XHcrPnwuLy5leGVjKHQpLHI9aVswXSx0PXQuc3Vic3RyaW5nKGkuaW5kZXgrci5sZW5ndGgpLGUuVmltLmhhbmRsZUtleShuLHIsIm1hcHBpbmciKX12YXIgdSxjPV8obik7cmV0dXJuIHU9Yy5pbnNlcnRNb2RlP2Z1bmN0aW9uKCl7aWYoYSgpKXJldHVybiEwO2Zvcih2YXIgZT1jLmlucHV0U3RhdGUua2V5QnVmZmVyPWMuaW5wdXRTdGF0ZS5rZXlCdWZmZXIrcixpPTE9PXIubGVuZ3RoLG89TnQubWF0Y2hDb21tYW5kKGUsdCxjLmlucHV0U3RhdGUsImluc2VydCIpO2UubGVuZ3RoPjEmJiJmdWxsIiE9by50eXBlOyl7dmFyIGU9Yy5pbnB1dFN0YXRlLmtleUJ1ZmZlcj1lLnNsaWNlKDEpLHM9TnQubWF0Y2hDb21tYW5kKGUsdCxjLmlucHV0U3RhdGUsImluc2VydCIpOyJub25lIiE9cy50eXBlJiYobz1zKX1pZigibm9uZSI9PW8udHlwZSlyZXR1cm4gRihuKSwhMTtpZigicGFydGlhbCI9PW8udHlwZSlyZXR1cm4gT3QmJndpbmRvdy5jbGVhclRpbWVvdXQoT3QpLE90PXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5pbnNlcnRNb2RlJiZjLmlucHV0U3RhdGUua2V5QnVmZmVyJiZGKG4pfSxrKCJpbnNlcnRNb2RlRXNjS2V5c1RpbWVvdXQiKSksIWk7aWYoT3QmJndpbmRvdy5jbGVhclRpbWVvdXQoT3QpLGkpe2Zvcih2YXIgdT1uLmxpc3RTZWxlY3Rpb25zKCksbD0wO2w8dS5sZW5ndGg7bCsrKXt2YXIgcD11W2xdLmhlYWQ7bi5yZXBsYWNlUmFuZ2UoIiIseihwLDAsLShlLmxlbmd0aC0xKSkscCwiK2lucHV0Iil9VHQubWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzLmNoYW5nZXMucG9wKCl9cmV0dXJuIEYobiksby5jb21tYW5kfSgpOmZ1bmN0aW9uKCl7aWYobygpfHxhKCkpcmV0dXJuITA7dmFyIGU9Yy5pbnB1dFN0YXRlLmtleUJ1ZmZlcj1jLmlucHV0U3RhdGUua2V5QnVmZmVyK3I7aWYoL15bMS05XVxkKiQvLnRlc3QoZSkpcmV0dXJuITA7dmFyIGk9L14oXGQqKSguKikkLy5leGVjKGUpO2lmKCFpKXJldHVybiBGKG4pLCExO3ZhciBzPWMudmlzdWFsTW9kZT8idmlzdWFsIjoibm9ybWFsIix1PU50Lm1hdGNoQ29tbWFuZChpWzJdfHxpWzFdLHQsYy5pbnB1dFN0YXRlLHMpO2lmKCJub25lIj09dS50eXBlKXJldHVybiBGKG4pLCExO2lmKCJwYXJ0aWFsIj09dS50eXBlKXJldHVybiEwO2MuaW5wdXRTdGF0ZS5rZXlCdWZmZXI9IiI7dmFyIGk9L14oXGQqKSguKikkLy5leGVjKGUpO3JldHVybiBpWzFdJiYiMCIhPWlbMV0mJmMuaW5wdXRTdGF0ZS5wdXNoUmVwZWF0RGlnaXQoaVsxXSksdS5jb21tYW5kfSgpLCExPT09dT9jLmluc2VydE1vZGV8fDEhPT1yLmxlbmd0aD92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4hMH06ITA9PT11P2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKCl7cmV0dXJuIG4ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7bi5jdXJPcC5pc1ZpbU9wPSEwO3RyeXsia2V5VG9LZXkiPT11LnR5cGU/cyh1LnRvS2V5cyk6TnQucHJvY2Vzc0NvbW1hbmQobixjLHUpfWNhdGNoKHQpe3Rocm93IG4uc3RhdGUudmltPXZvaWQgMCxfKG4pLGUuVmltLnN1cHByZXNzRXJyb3JMb2dnaW5nfHxjb25zb2xlLmxvZyh0KSx0fXJldHVybiEwfSl9fSxoYW5kbGVFeDpmdW5jdGlvbihlLHQpe0d0LnByb2Nlc3NDb21tYW5kKGUsdCl9LGRlZmluZU1vdGlvbjpNLGRlZmluZUFjdGlvbjpCLGRlZmluZU9wZXJhdG9yOlIsbWFwQ29tbWFuZDpydCxfbWFwQ29tbWFuZDpudCxkZWZpbmVSZWdpc3RlcjpJLGV4aXRWaXN1YWxNb2RlOmRlLGV4aXRJbnNlcnRNb2RlOnR0fTtPLnByb3RvdHlwZS5wdXNoUmVwZWF0RGlnaXQ9ZnVuY3Rpb24oZSl7dGhpcy5vcGVyYXRvcj90aGlzLm1vdGlvblJlcGVhdD10aGlzLm1vdGlvblJlcGVhdC5jb25jYXQoZSk6dGhpcy5wcmVmaXhSZXBlYXQ9dGhpcy5wcmVmaXhSZXBlYXQuY29uY2F0KGUpfSxPLnByb3RvdHlwZS5nZXRSZXBlYXQ9ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybih0aGlzLnByZWZpeFJlcGVhdC5sZW5ndGg+MHx8dGhpcy5tb3Rpb25SZXBlYXQubGVuZ3RoPjApJiYoZT0xLHRoaXMucHJlZml4UmVwZWF0Lmxlbmd0aD4wJiYoZSo9cGFyc2VJbnQodGhpcy5wcmVmaXhSZXBlYXQuam9pbigiIiksMTApKSx0aGlzLm1vdGlvblJlcGVhdC5sZW5ndGg+MCYmKGUqPXBhcnNlSW50KHRoaXMubW90aW9uUmVwZWF0LmpvaW4oIiIpLDEwKSkpLGV9LE4ucHJvdG90eXBlPXtzZXRUZXh0OmZ1bmN0aW9uKGUsdCxuKXt0aGlzLmtleUJ1ZmZlcj1bZXx8IiJdLHRoaXMubGluZXdpc2U9ISF0LHRoaXMuYmxvY2t3aXNlPSEhbn0scHVzaFRleHQ6ZnVuY3Rpb24oZSx0KXt0JiYodGhpcy5saW5ld2lzZXx8dGhpcy5rZXlCdWZmZXIucHVzaCgiXG4iKSx0aGlzLmxpbmV3aXNlPSEwKSx0aGlzLmtleUJ1ZmZlci5wdXNoKGUpfSxwdXNoSW5zZXJ0TW9kZUNoYW5nZXM6ZnVuY3Rpb24oZSl7dGhpcy5pbnNlcnRNb2RlQ2hhbmdlcy5wdXNoKF90KGUpKX0scHVzaFNlYXJjaFF1ZXJ5OmZ1bmN0aW9uKGUpe3RoaXMuc2VhcmNoUXVlcmllcy5wdXNoKGUpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMua2V5QnVmZmVyPVtdLHRoaXMuaW5zZXJ0TW9kZUNoYW5nZXM9W10sdGhpcy5zZWFyY2hRdWVyaWVzPVtdLHRoaXMubGluZXdpc2U9ITF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5QnVmZmVyLmpvaW4oIiIpfX0sTC5wcm90b3R5cGU9e3B1c2hUZXh0OmZ1bmN0aW9uKGUsdCxuLHIsaSl7ciYmIlxuIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYobis9IlxuIik7dmFyIG89dGhpcy5pc1ZhbGlkUmVnaXN0ZXIoZSk/dGhpcy5nZXRSZWdpc3RlcihlKTpudWxsO2lmKCFvKXtzd2l0Y2godCl7Y2FzZSJ5YW5rIjp0aGlzLnJlZ2lzdGVyc1swXT1uZXcgTihuLHIsaSk7YnJlYWs7Y2FzZSJkZWxldGUiOmNhc2UiY2hhbmdlIjotMT09bi5pbmRleE9mKCJcbiIpP3RoaXMucmVnaXN0ZXJzWyItIl09bmV3IE4obixyKToodGhpcy5zaGlmdE51bWVyaWNSZWdpc3RlcnNfKCksdGhpcy5yZWdpc3RlcnNbMV09bmV3IE4obixyKSl9cmV0dXJuIHZvaWQgdGhpcy51bm5hbWVkUmVnaXN0ZXIuc2V0VGV4dChuLHIsaSl9eChlKT9vLnB1c2hUZXh0KG4scik6by5zZXRUZXh0KG4scixpKSx0aGlzLnVubmFtZWRSZWdpc3Rlci5zZXRUZXh0KG8udG9TdHJpbmcoKSxyKX0sZ2V0UmVnaXN0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNWYWxpZFJlZ2lzdGVyKGUpPyhlPWUudG9Mb3dlckNhc2UoKSx0aGlzLnJlZ2lzdGVyc1tlXXx8KHRoaXMucmVnaXN0ZXJzW2VdPW5ldyBOKSx0aGlzLnJlZ2lzdGVyc1tlXSk6dGhpcy51bm5hbWVkUmVnaXN0ZXJ9LGlzVmFsaWRSZWdpc3RlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSYmRChlLFN0KX0sc2hpZnROdW1lcmljUmVnaXN0ZXJzXzpmdW5jdGlvbigpe2Zvcih2YXIgZT05O2U+PTI7ZS0tKXRoaXMucmVnaXN0ZXJzW2VdPXRoaXMuZ2V0UmVnaXN0ZXIoIiIrKGUtMSkpfX0sUC5wcm90b3R5cGU9e25leHRNYXRjaDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaGlzdG9yeUJ1ZmZlcixyPXQ/LTE6MTtudWxsPT09dGhpcy5pbml0aWFsUHJlZml4JiYodGhpcy5pbml0aWFsUHJlZml4PWUpO2Zvcih2YXIgaT10aGlzLml0ZXJhdG9yK3I7dD9pPj0wOmk8bi5sZW5ndGg7aSs9cilmb3IodmFyIG89bltpXSxhPTA7YTw9by5sZW5ndGg7YSsrKWlmKHRoaXMuaW5pdGlhbFByZWZpeD09by5zdWJzdHJpbmcoMCxhKSlyZXR1cm4gdGhpcy5pdGVyYXRvcj1pLG87cmV0dXJuIGk+PW4ubGVuZ3RoPyh0aGlzLml0ZXJhdG9yPW4ubGVuZ3RoLHRoaXMuaW5pdGlhbFByZWZpeCk6aTwwP2U6dm9pZCAwfSxwdXNoSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oaXN0b3J5QnVmZmVyLmluZGV4T2YoZSk7dD4tMSYmdGhpcy5oaXN0b3J5QnVmZmVyLnNwbGljZSh0LDEpLGUubGVuZ3RoJiZ0aGlzLmhpc3RvcnlCdWZmZXIucHVzaChlKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxQcmVmaXg9bnVsbCx0aGlzLml0ZXJhdG9yPXRoaXMuaGlzdG9yeUJ1ZmZlci5sZW5ndGh9fTt2YXIgTnQ9e21hdGNoQ29tbWFuZDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1WKGUsdCxyLG4pO2lmKCFpLmZ1bGwmJiFpLnBhcnRpYWwpcmV0dXJue3R5cGU6Im5vbmUifTtpZighaS5mdWxsJiZpLnBhcnRpYWwpcmV0dXJue3R5cGU6InBhcnRpYWwifTtmb3IodmFyIG8sYT0wO2E8aS5mdWxsLmxlbmd0aDthKyspe3ZhciBzPWkuZnVsbFthXTtvfHwobz1zKX1pZigiPGNoYXJhY3Rlcj4iPT1vLmtleXMuc2xpY2UoLTExKSl7dmFyIHU9SChlKTtpZighdSlyZXR1cm57dHlwZToibm9uZSJ9O24uc2VsZWN0ZWRDaGFyYWN0ZXI9dX1yZXR1cm57dHlwZToiZnVsbCIsY29tbWFuZDpvfX0scHJvY2Vzc0NvbW1hbmQ6ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0LmlucHV0U3RhdGUucmVwZWF0T3ZlcnJpZGU9bi5yZXBlYXRPdmVycmlkZSxuLnR5cGUpe2Nhc2UibW90aW9uIjp0aGlzLnByb2Nlc3NNb3Rpb24oZSx0LG4pO2JyZWFrO2Nhc2Uib3BlcmF0b3IiOnRoaXMucHJvY2Vzc09wZXJhdG9yKGUsdCxuKTticmVhaztjYXNlIm9wZXJhdG9yTW90aW9uIjp0aGlzLnByb2Nlc3NPcGVyYXRvck1vdGlvbihlLHQsbik7YnJlYWs7Y2FzZSJhY3Rpb24iOnRoaXMucHJvY2Vzc0FjdGlvbihlLHQsbik7YnJlYWs7Y2FzZSJzZWFyY2giOnRoaXMucHJvY2Vzc1NlYXJjaChlLHQsbik7YnJlYWs7Y2FzZSJleCI6Y2FzZSJrZXlUb0V4Ijp0aGlzLnByb2Nlc3NFeChlLHQsbil9fSxwcm9jZXNzTW90aW9uOmZ1bmN0aW9uKGUsdCxuKXt0LmlucHV0U3RhdGUubW90aW9uPW4ubW90aW9uLHQuaW5wdXRTdGF0ZS5tb3Rpb25BcmdzPVUobi5tb3Rpb25BcmdzKSx0aGlzLmV2YWxJbnB1dChlLHQpfSxwcm9jZXNzT3BlcmF0b3I6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuaW5wdXRTdGF0ZTtpZihyLm9wZXJhdG9yKXtpZihyLm9wZXJhdG9yPT1uLm9wZXJhdG9yKXJldHVybiByLm1vdGlvbj0iZXhwYW5kVG9MaW5lIixyLm1vdGlvbkFyZ3M9e2xpbmV3aXNlOiEwfSx2b2lkIHRoaXMuZXZhbElucHV0KGUsdCk7RihlKX1yLm9wZXJhdG9yPW4ub3BlcmF0b3Isci5vcGVyYXRvckFyZ3M9VShuLm9wZXJhdG9yQXJncyksdC52aXN1YWxNb2RlJiZ0aGlzLmV2YWxJbnB1dChlLHQpfSxwcm9jZXNzT3BlcmF0b3JNb3Rpb246ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmlzdWFsTW9kZSxpPVUobi5vcGVyYXRvck1vdGlvbkFyZ3MpO2kmJnImJmkudmlzdWFsTGluZSYmKHQudmlzdWFsTGluZT0hMCksdGhpcy5wcm9jZXNzT3BlcmF0b3IoZSx0LG4pLHJ8fHRoaXMucHJvY2Vzc01vdGlvbihlLHQsbil9LHByb2Nlc3NBY3Rpb246ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuaW5wdXRTdGF0ZSxpPXIuZ2V0UmVwZWF0KCksbz0hIWksYT1VKG4uYWN0aW9uQXJncyl8fHt9O3Iuc2VsZWN0ZWRDaGFyYWN0ZXImJihhLnNlbGVjdGVkQ2hhcmFjdGVyPXIuc2VsZWN0ZWRDaGFyYWN0ZXIpLG4ub3BlcmF0b3ImJnRoaXMucHJvY2Vzc09wZXJhdG9yKGUsdCxuKSxuLm1vdGlvbiYmdGhpcy5wcm9jZXNzTW90aW9uKGUsdCxuKSwobi5tb3Rpb258fG4ub3BlcmF0b3IpJiZ0aGlzLmV2YWxJbnB1dChlLHQpLGEucmVwZWF0PWl8fDEsYS5yZXBlYXRJc0V4cGxpY2l0PW8sYS5yZWdpc3Rlck5hbWU9ci5yZWdpc3Rlck5hbWUsRihlKSx0Lmxhc3RNb3Rpb249bnVsbCxuLmlzRWRpdCYmdGhpcy5yZWNvcmRMYXN0RWRpdCh0LHIsbiksUHRbbi5hY3Rpb25dKGUsYSx0KX0scHJvY2Vzc1NlYXJjaDpmdW5jdGlvbih0LG4scil7ZnVuY3Rpb24gaShlLGksbyl7VHQuc2VhcmNoSGlzdG9yeUNvbnRyb2xsZXIucHVzaElucHV0KGUpLFR0LnNlYXJjaEhpc3RvcnlDb250cm9sbGVyLnJlc2V0KCk7dHJ5e0hlKHQsZSxpLG8pfWNhdGNoKG4pe3JldHVybiB6ZSh0LCJJbnZhbGlkIHJlZ2V4OiAiK2UpLHZvaWQgRih0KX1OdC5wcm9jZXNzTW90aW9uKHQsbix7dHlwZToibW90aW9uIixtb3Rpb246ImZpbmROZXh0Iixtb3Rpb25BcmdzOntmb3J3YXJkOiEwLHRvSnVtcGxpc3Q6ci5zZWFyY2hBcmdzLnRvSnVtcGxpc3R9fSl9ZnVuY3Rpb24gbyhlKXt0LnNjcm9sbFRvKGYubGVmdCxmLnRvcCksaShlLCEwLCEwKTt2YXIgbj1UdC5tYWNyb01vZGVTdGF0ZTtuLmlzUmVjb3JkaW5nJiZzdChuLGUpfWZ1bmN0aW9uIGEobixyLGkpe3ZhciBvLGEscz1lLmtleU5hbWUobik7IlVwIj09c3x8IkRvd24iPT1zPyhvPSJVcCI9PXMsYT1uLnRhcmdldD9uLnRhcmdldC5zZWxlY3Rpb25FbmQ6MCxyPVR0LnNlYXJjaEhpc3RvcnlDb250cm9sbGVyLm5leHRNYXRjaChyLG8pfHwiIixpKHIpLGEmJm4udGFyZ2V0JiYobi50YXJnZXQuc2VsZWN0aW9uRW5kPW4udGFyZ2V0LnNlbGVjdGlvblN0YXJ0PU1hdGgubWluKGEsbi50YXJnZXQudmFsdWUubGVuZ3RoKSkpOiJMZWZ0IiE9cyYmIlJpZ2h0IiE9cyYmIkN0cmwiIT1zJiYiQWx0IiE9cyYmIlNoaWZ0IiE9cyYmVHQuc2VhcmNoSGlzdG9yeUNvbnRyb2xsZXIucmVzZXQoKTt2YXIgYzt0cnl7Yz1IZSh0LHIsITAsITApfWNhdGNoKG4pe31jP3Quc2Nyb2xsSW50b1ZpZXcoS2UodCwhdSxjKSwzMCk6KEplKHQpLHQuc2Nyb2xsVG8oZi5sZWZ0LGYudG9wKSl9ZnVuY3Rpb24gcyhuLHIsaSl7dmFyIG89ZS5rZXlOYW1lKG4pOyJFc2MiPT1vfHwiQ3RybC1DIj09b3x8IkN0cmwtWyI9PW98fCJCYWNrc3BhY2UiPT1vJiYiIj09cj8oVHQuc2VhcmNoSGlzdG9yeUNvbnRyb2xsZXIucHVzaElucHV0KHIpLFR0LnNlYXJjaEhpc3RvcnlDb250cm9sbGVyLnJlc2V0KCksSGUodCxwKSxKZSh0KSx0LnNjcm9sbFRvKGYubGVmdCxmLnRvcCksZS5lX3N0b3AobiksRih0KSxpKCksdC5mb2N1cygpKToiVXAiPT1vfHwiRG93biI9PW8/ZS5lX3N0b3Aobik6IkN0cmwtVSI9PW8mJihlLmVfc3RvcChuKSxpKCIiKSl9aWYodC5nZXRTZWFyY2hDdXJzb3Ipe3ZhciB1PXIuc2VhcmNoQXJncy5mb3J3YXJkLGM9ci5zZWFyY2hBcmdzLndob2xlV29yZE9ubHk7TmUodCkuc2V0UmV2ZXJzZWQoIXUpO3ZhciBsPXU/Ii8iOiI/IixwPU5lKHQpLmdldFF1ZXJ5KCksZj10LmdldFNjcm9sbEluZm8oKTtzd2l0Y2goci5zZWFyY2hBcmdzLnF1ZXJ5U3JjKXtjYXNlInByb21wdCI6dmFyIGQ9VHQubWFjcm9Nb2RlU3RhdGU7aWYoZC5pc1BsYXlpbmcpe3ZhciBoPWQucmVwbGF5U2VhcmNoUXVlcmllcy5zaGlmdCgpO2koaCwhMCwhMSl9ZWxzZSBWZSh0LHtvbkNsb3NlOm8scHJlZml4OmwsZGVzYzokdCxvbktleVVwOmEsb25LZXlEb3duOnN9KTticmVhaztjYXNlIndvcmRVbmRlckN1cnNvciI6dmFyIG09eWUodCwhMSwhMCwhMSwhMCksZz0hMDtpZihtfHwobT15ZSh0LCExLCEwLCExLCExKSxnPSExKSwhbSlyZXR1cm47dmFyIGg9dC5nZXRMaW5lKG0uc3RhcnQubGluZSkuc3Vic3RyaW5nKG0uc3RhcnQuY2gsbS5lbmQuY2gpO2g9ZyYmYz8iXFxiIitoKyJcXGIiOm5lKGgpLFR0Lmp1bXBMaXN0LmNhY2hlZEN1cnNvcj10LmdldEN1cnNvcigpLHQuc2V0Q3Vyc29yKG0uc3RhcnQpLGkoaCwhMCwhMSl9fX0scHJvY2Vzc0V4OmZ1bmN0aW9uKHQsbixyKXtmdW5jdGlvbiBpKGUpe1R0LmV4Q29tbWFuZEhpc3RvcnlDb250cm9sbGVyLnB1c2hJbnB1dChlKSxUdC5leENvbW1hbmRIaXN0b3J5Q29udHJvbGxlci5yZXNldCgpLEd0LnByb2Nlc3NDb21tYW5kKHQsZSl9ZnVuY3Rpb24gbyhuLHIsaSl7dmFyIG8sYSxzPWUua2V5TmFtZShuKTsoIkVzYyI9PXN8fCJDdHJsLUMiPT1zfHwiQ3RybC1bIj09c3x8IkJhY2tzcGFjZSI9PXMmJiIiPT1yKSYmKFR0LmV4Q29tbWFuZEhpc3RvcnlDb250cm9sbGVyLnB1c2hJbnB1dChyKSxUdC5leENvbW1hbmRIaXN0b3J5Q29udHJvbGxlci5yZXNldCgpLGUuZV9zdG9wKG4pLEYodCksaSgpLHQuZm9jdXMoKSksIlVwIj09c3x8IkRvd24iPT1zPyhlLmVfc3RvcChuKSxvPSJVcCI9PXMsYT1uLnRhcmdldD9uLnRhcmdldC5zZWxlY3Rpb25FbmQ6MCxyPVR0LmV4Q29tbWFuZEhpc3RvcnlDb250cm9sbGVyLm5leHRNYXRjaChyLG8pfHwiIixpKHIpLGEmJm4udGFyZ2V0JiYobi50YXJnZXQuc2VsZWN0aW9uRW5kPW4udGFyZ2V0LnNlbGVjdGlvblN0YXJ0PU1hdGgubWluKGEsbi50YXJnZXQudmFsdWUubGVuZ3RoKSkpOiJDdHJsLVUiPT1zPyhlLmVfc3RvcChuKSxpKCIiKSk6IkxlZnQiIT1zJiYiUmlnaHQiIT1zJiYiQ3RybCIhPXMmJiJBbHQiIT1zJiYiU2hpZnQiIT1zJiZUdC5leENvbW1hbmRIaXN0b3J5Q29udHJvbGxlci5yZXNldCgpfSJrZXlUb0V4Ij09ci50eXBlP0d0LnByb2Nlc3NDb21tYW5kKHQsci5leEFyZ3MuaW5wdXQpOm4udmlzdWFsTW9kZT9WZSh0LHtvbkNsb3NlOmkscHJlZml4OiI6Iix2YWx1ZToiJzwsJz4iLG9uS2V5RG93bjpvLHNlbGVjdFZhbHVlT25PcGVuOiExfSk6VmUodCx7b25DbG9zZTppLHByZWZpeDoiOiIsb25LZXlEb3duOm99KX0sZXZhbElucHV0OmZ1bmN0aW9uKGUsdCl7dmFyIG4saSxvLGE9dC5pbnB1dFN0YXRlLHM9YS5tb3Rpb24sdT1hLm1vdGlvbkFyZ3N8fHt9LGM9YS5vcGVyYXRvcixsPWEub3BlcmF0b3JBcmdzfHx7fSxwPWEucmVnaXN0ZXJOYW1lLGY9dC5zZWwsZD1RKHQudmlzdWFsTW9kZT8kKGUsZi5oZWFkKTplLmdldEN1cnNvcigiaGVhZCIpKSxoPVEodC52aXN1YWxNb2RlPyQoZSxmLmFuY2hvcik6ZS5nZXRDdXJzb3IoImFuY2hvciIpKSxtPVEoZCksZz1RKGgpO2lmKGMmJnRoaXMucmVjb3JkTGFzdEVkaXQodCxhKSxvPXZvaWQgMCE9PWEucmVwZWF0T3ZlcnJpZGU/YS5yZXBlYXRPdmVycmlkZTphLmdldFJlcGVhdCgpLG8+MCYmdS5leHBsaWNpdFJlcGVhdD91LnJlcGVhdElzRXhwbGljaXQ9ITA6KHUubm9SZXBlYXR8fCF1LmV4cGxpY2l0UmVwZWF0JiYwPT09bykmJihvPTEsdS5yZXBlYXRJc0V4cGxpY2l0PSExKSxhLnNlbGVjdGVkQ2hhcmFjdGVyJiYodS5zZWxlY3RlZENoYXJhY3Rlcj1sLnNlbGVjdGVkQ2hhcmFjdGVyPWEuc2VsZWN0ZWRDaGFyYWN0ZXIpLHUucmVwZWF0PW8sRihlKSxzKXt2YXIgeT1JdFtzXShlLGQsdSx0KTtpZih0Lmxhc3RNb3Rpb249SXRbc10sIXkpcmV0dXJuO2lmKHUudG9KdW1wbGlzdCl7dmFyIHY9VHQuanVtcExpc3QsYj12LmNhY2hlZEN1cnNvcjtiPyh2ZShlLGIseSksZGVsZXRlIHYuY2FjaGVkQ3Vyc29yKTp2ZShlLGQseSl9eSBpbnN0YW5jZW9mIEFycmF5PyhpPXlbMF0sbj15WzFdKTpuPXksbnx8KG49UShkKSksdC52aXN1YWxNb2RlPyh0LnZpc3VhbEJsb2NrJiZuLmNoPT09MS8wfHwobj0kKGUsbix0LnZpc3VhbEJsb2NrKSksaSYmKGk9JChlLGksITApKSxpPWl8fGcsZi5hbmNob3I9aSxmLmhlYWQ9bixsZShlKSxTZShlLHQsIjwiLEooaSxuKT9pOm4pLFNlKGUsdCwiPiIsSihpLG4pP246aSkpOmN8fChuPSQoZSxuKSxlLnNldEN1cnNvcihuLmxpbmUsbi5jaCkpfWlmKGMpe2lmKGwubGFzdFNlbCl7aT1nO3ZhciB4PWwubGFzdFNlbCxDPU1hdGguYWJzKHguaGVhZC5saW5lLXguYW5jaG9yLmxpbmUpLEU9TWF0aC5hYnMoeC5oZWFkLmNoLXguYW5jaG9yLmNoKTtuPXgudmlzdWFsTGluZT9yKGcubGluZStDLGcuY2gpOngudmlzdWFsQmxvY2s/cihnLmxpbmUrQyxnLmNoK0UpOnguaGVhZC5saW5lPT14LmFuY2hvci5saW5lP3IoZy5saW5lLGcuY2grRSk6cihnLmxpbmUrQyxnLmNoKSx0LnZpc3VhbE1vZGU9ITAsdC52aXN1YWxMaW5lPXgudmlzdWFsTGluZSx0LnZpc3VhbEJsb2NrPXgudmlzdWFsQmxvY2ssZj10LnNlbD17YW5jaG9yOmksaGVhZDpufSxsZShlKX1lbHNlIHQudmlzdWFsTW9kZSYmKGwubGFzdFNlbD17YW5jaG9yOlEoZi5hbmNob3IpLGhlYWQ6UShmLmhlYWQpLHZpc3VhbEJsb2NrOnQudmlzdWFsQmxvY2ssdmlzdWFsTGluZTp0LnZpc3VhbExpbmV9KTt2YXIgRCx3LFMsayxBO2lmKHQudmlzdWFsTW9kZSl7aWYoRD1ZKGYuaGVhZCxmLmFuY2hvciksdz1YKGYuaGVhZCxmLmFuY2hvciksUz10LnZpc3VhbExpbmV8fGwubGluZXdpc2Usaz10LnZpc3VhbEJsb2NrPyJibG9jayI6Uz8ibGluZSI6ImNoYXIiLEE9cGUoZSx7YW5jaG9yOkQsaGVhZDp3fSxrKSxTKXt2YXIgXz1BLnJhbmdlcztpZigiYmxvY2siPT1rKWZvcih2YXIgVD0wO1Q8Xy5sZW5ndGg7VCsrKV9bVF0uaGVhZC5jaD1lZShlLF9bVF0uaGVhZC5saW5lKTtlbHNlImxpbmUiPT1rJiYoX1swXS5oZWFkPXIoX1swXS5oZWFkLmxpbmUrMSwwKSl9fWVsc2V7aWYoRD1RKGl8fGcpLHc9UShufHxtKSxKKHcsRCkpe3ZhciBPPUQ7RD13LHc9T31TPXUubGluZXdpc2V8fGwubGluZXdpc2UsUz9tZShlLEQsdyk6dS5mb3J3YXJkJiZoZShlLEQsdyksaz0iY2hhciI7QT1wZShlLHthbmNob3I6RCxoZWFkOnd9LGssIXUuaW5jbHVzaXZlfHxTKX1lLnNldFNlbGVjdGlvbnMoQS5yYW5nZXMsQS5wcmltYXJ5KSx0Lmxhc3RNb3Rpb249bnVsbCxsLnJlcGVhdD1vLGwucmVnaXN0ZXJOYW1lPXAsbC5saW5ld2lzZT1TO3ZhciBOPUx0W2NdKGUsbCxBLnJhbmdlcyxnLG4pO3QudmlzdWFsTW9kZSYmZGUoZSxudWxsIT1OKSxOJiZlLnNldEN1cnNvcihOKX19LHJlY29yZExhc3RFZGl0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1UdC5tYWNyb01vZGVTdGF0ZTtyLmlzUGxheWluZ3x8KGUubGFzdEVkaXRJbnB1dFN0YXRlPXQsZS5sYXN0RWRpdEFjdGlvbkNvbW1hbmQ9bixyLmxhc3RJbnNlcnRNb2RlQ2hhbmdlcy5jaGFuZ2VzPVtdLHIubGFzdEluc2VydE1vZGVDaGFuZ2VzLmV4cGVjdEN1cnNvckFjdGl2aXR5Rm9yQ2hhbmdlPSExKX19LEl0PXttb3ZlVG9Ub3BMaW5lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1YZShlKS50b3Arbi5yZXBlYXQtMTtyZXR1cm4gcihpLGdlKGUuZ2V0TGluZShpKSkpfSxtb3ZlVG9NaWRkbGVMaW5lOmZ1bmN0aW9uKGUpe3ZhciB0PVhlKGUpLG49TWF0aC5mbG9vciguNSoodC50b3ArdC5ib3R0b20pKTtyZXR1cm4gcihuLGdlKGUuZ2V0TGluZShuKSkpfSxtb3ZlVG9Cb3R0b21MaW5lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1YZShlKS5ib3R0b20tbi5yZXBlYXQrMTtyZXR1cm4gcihpLGdlKGUuZ2V0TGluZShpKSkpfSxleHBhbmRUb0xpbmU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByKHQubGluZStuLnJlcGVhdC0xLDEvMCl9LGZpbmROZXh0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OZShlKSxpPXIuZ2V0UXVlcnkoKTtpZihpKXt2YXIgbz0hbi5mb3J3YXJkO3JldHVybiBvPXIuaXNSZXZlcnNlZCgpPyFvOm8sUWUoZSxpKSxLZShlLG8saSxuLnJlcGVhdCl9fSxnb1RvTWFyazpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1aZShlLHIsbi5zZWxlY3RlZENoYXJhY3Rlcik7cmV0dXJuIGk/bi5saW5ld2lzZT97bGluZTppLmxpbmUsY2g6Z2UoZS5nZXRMaW5lKGkubGluZSkpfTppOm51bGx9LG1vdmVUb090aGVySGlnaGxpZ2h0ZWRFbmQ6ZnVuY3Rpb24oZSx0LG4saSl7aWYoaS52aXN1YWxCbG9jayYmbi5zYW1lTGluZSl7dmFyIG89aS5zZWw7cmV0dXJuWyQoZSxyKG8uYW5jaG9yLmxpbmUsby5oZWFkLmNoKSksJChlLHIoby5oZWFkLmxpbmUsby5hbmNob3IuY2gpKV19cmV0dXJuW2kuc2VsLmhlYWQsaS5zZWwuYW5jaG9yXX0sanVtcFRvTWFyazpmdW5jdGlvbihlLHQsbixpKXtmb3IodmFyIG89dCxhPTA7YTxuLnJlcGVhdDthKyspe3ZhciBzPW87Zm9yKHZhciB1IGluIGkubWFya3MpaWYoeSh1KSl7dmFyIGM9aS5tYXJrc1t1XS5maW5kKCksbD1uLmZvcndhcmQ/SihjLHMpOkoocyxjKTtpZighbCYmKCFuLmxpbmV3aXNlfHxjLmxpbmUhPXMubGluZSkpe3ZhciBwPUsocyxvKSxmPW4uZm9yd2FyZD9aKHMsYyxvKTpaKG8sYyxzKTsocHx8ZikmJihvPWMpfX19cmV0dXJuIG4ubGluZXdpc2UmJihvPXIoby5saW5lLGdlKGUuZ2V0TGluZShvLmxpbmUpKSkpLG99LG1vdmVCeUNoYXJhY3RlcnM6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXQsbz1uLnJlcGVhdCxhPW4uZm9yd2FyZD9pLmNoK286aS5jaC1vO3JldHVybiByKGkubGluZSxhKX0sbW92ZUJ5TGluZXM6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89dCxhPW8uY2g7c3dpdGNoKGkubGFzdE1vdGlvbil7Y2FzZSB0aGlzLm1vdmVCeUxpbmVzOmNhc2UgdGhpcy5tb3ZlQnlEaXNwbGF5TGluZXM6Y2FzZSB0aGlzLm1vdmVCeVNjcm9sbDpjYXNlIHRoaXMubW92ZVRvQ29sdW1uOmNhc2UgdGhpcy5tb3ZlVG9Fb2w6YT1pLmxhc3RIUG9zO2JyZWFrO2RlZmF1bHQ6aS5sYXN0SFBvcz1hfXZhciBzPW4ucmVwZWF0KyhuLnJlcGVhdE9mZnNldHx8MCksdT1uLmZvcndhcmQ/by5saW5lK3M6by5saW5lLXMsYz1lLmZpcnN0TGluZSgpLGw9ZS5sYXN0TGluZSgpO3JldHVybiB1PGMmJm8ubGluZT09Yz90aGlzLm1vdmVUb1N0YXJ0T2ZMaW5lKGUsdCxuLGkpOnU+bCYmby5saW5lPT1sP3RoaXMubW92ZVRvRW9sKGUsdCxuLGkpOihuLnRvRmlyc3RDaGFyJiYoYT1nZShlLmdldExpbmUodSkpLGkubGFzdEhQb3M9YSksaS5sYXN0SFNQb3M9ZS5jaGFyQ29vcmRzKHIodSxhKSwiZGl2IikubGVmdCxyKHUsYSkpfSxtb3ZlQnlEaXNwbGF5TGluZXM6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89dDtzd2l0Y2goaS5sYXN0TW90aW9uKXtjYXNlIHRoaXMubW92ZUJ5RGlzcGxheUxpbmVzOmNhc2UgdGhpcy5tb3ZlQnlTY3JvbGw6Y2FzZSB0aGlzLm1vdmVCeUxpbmVzOmNhc2UgdGhpcy5tb3ZlVG9Db2x1bW46Y2FzZSB0aGlzLm1vdmVUb0VvbDpicmVhaztkZWZhdWx0OmkubGFzdEhTUG9zPWUuY2hhckNvb3JkcyhvLCJkaXYiKS5sZWZ0fXZhciBhPW4ucmVwZWF0LHM9ZS5maW5kUG9zVihvLG4uZm9yd2FyZD9hOi1hLCJsaW5lIixpLmxhc3RIU1Bvcyk7aWYocy5oaXRTaWRlKWlmKG4uZm9yd2FyZCl2YXIgdT1lLmNoYXJDb29yZHMocywiZGl2IiksYz17dG9wOnUudG9wKzgsbGVmdDppLmxhc3RIU1Bvc30scz1lLmNvb3Jkc0NoYXIoYywiZGl2Iik7ZWxzZXt2YXIgbD1lLmNoYXJDb29yZHMocihlLmZpcnN0TGluZSgpLDApLCJkaXYiKTtsLmxlZnQ9aS5sYXN0SFNQb3Mscz1lLmNvb3Jkc0NoYXIobCwiZGl2Iil9cmV0dXJuIGkubGFzdEhQb3M9cy5jaCxzfSxtb3ZlQnlQYWdlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LGk9bi5yZXBlYXQ7cmV0dXJuIGUuZmluZFBvc1YocixuLmZvcndhcmQ/aTotaSwicGFnZSIpfSxtb3ZlQnlQYXJhZ3JhcGg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uZm9yd2FyZD8xOi0xO3JldHVybiBBZShlLHQsbi5yZXBlYXQscil9LG1vdmVCeVNlbnRlbmNlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmZvcndhcmQ/MTotMTtyZXR1cm4gX2UoZSx0LG4ucmVwZWF0LHIpfSxtb3ZlQnlTY3JvbGw6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5nZXRTY3JvbGxJbmZvKCksbz1udWxsLGE9bi5yZXBlYXQ7YXx8KGE9aS5jbGllbnRIZWlnaHQvKDIqZS5kZWZhdWx0VGV4dEhlaWdodCgpKSk7dmFyIHM9ZS5jaGFyQ29vcmRzKHQsImxvY2FsIik7bi5yZXBlYXQ9YTt2YXIgbz1JdC5tb3ZlQnlEaXNwbGF5TGluZXMoZSx0LG4scik7aWYoIW8pcmV0dXJuIG51bGw7dmFyIHU9ZS5jaGFyQ29vcmRzKG8sImxvY2FsIik7cmV0dXJuIGUuc2Nyb2xsVG8obnVsbCxpLnRvcCt1LnRvcC1zLnRvcCksb30sbW92ZUJ5V29yZHM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBFZShlLHQsbi5yZXBlYXQsISFuLmZvcndhcmQsISFuLndvcmRFbmQsISFuLmJpZ1dvcmQpfSxtb3ZlVGlsbENoYXJhY3RlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi5yZXBlYXQsaT1EZShlLHIsbi5mb3J3YXJkLG4uc2VsZWN0ZWRDaGFyYWN0ZXIpLG89bi5mb3J3YXJkPy0xOjE7cmV0dXJuIGJlKG8sbiksaT8oaS5jaCs9byxpKTpudWxsfSxtb3ZlVG9DaGFyYWN0ZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4ucmVwZWF0O3JldHVybiBiZSgwLG4pLERlKGUscixuLmZvcndhcmQsbi5zZWxlY3RlZENoYXJhY3Rlcil8fHR9LG1vdmVUb1N5bWJvbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHhlKGUsbi5yZXBlYXQsbi5mb3J3YXJkLG4uc2VsZWN0ZWRDaGFyYWN0ZXIpfHx0fSxtb3ZlVG9Db2x1bW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9bi5yZXBlYXQ7cmV0dXJuIHIubGFzdEhQb3M9aS0xLHIubGFzdEhTUG9zPWUuY2hhckNvb3Jkcyh0LCJkaXYiKS5sZWZ0LHdlKGUsaSl9LG1vdmVUb0VvbDpmdW5jdGlvbihlLHQsbixpKXt2YXIgbz10O2kubGFzdEhQb3M9MS8wO3ZhciBhPXIoby5saW5lK24ucmVwZWF0LTEsMS8wKSxzPWUuY2xpcFBvcyhhKTtyZXR1cm4gcy5jaC0tLGkubGFzdEhTUG9zPWUuY2hhckNvb3JkcyhzLCJkaXYiKS5sZWZ0LGF9LG1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXQ7cmV0dXJuIHIobi5saW5lLGdlKGUuZ2V0TGluZShuLmxpbmUpKSl9LG1vdmVUb01hdGNoZWRTeW1ib2w6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4saT10LG89aS5saW5lLGE9aS5jaCxzPWUuZ2V0TGluZShvKTthPHMubGVuZ3RoO2ErKylpZigobj1zLmNoYXJBdChhKSkmJnYobikpe3ZhciB1PWUuZ2V0VG9rZW5UeXBlQXQocihvLGErMSkpO2lmKCJzdHJpbmciIT09dSYmImNvbW1lbnQiIT09dSlicmVha31pZihhPHMubGVuZ3RoKXtyZXR1cm4gZS5maW5kTWF0Y2hpbmdCcmFja2V0KHIobyxhKSkudG99cmV0dXJuIGl9LG1vdmVUb1N0YXJ0T2ZMaW5lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodC5saW5lLDApfSxtb3ZlVG9MaW5lT3JFZGdlT2ZEb2N1bWVudDpmdW5jdGlvbihlLHQsbil7dmFyIGk9bi5mb3J3YXJkP2UubGFzdExpbmUoKTplLmZpcnN0TGluZSgpO3JldHVybiBuLnJlcGVhdElzRXhwbGljaXQmJihpPW4ucmVwZWF0LWUuZ2V0T3B0aW9uKCJmaXJzdExpbmVOdW1iZXIiKSkscihpLGdlKGUuZ2V0TGluZShpKSkpfSx0ZXh0T2JqZWN0TWFuaXB1bGF0aW9uOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXsiKCI6IikiLCIpIjoiKCIsInsiOiJ9IiwifSI6InsiLCJbIjoiXSIsIl0iOiJbIn0sbz17IiciOiEwLCciJzohMH0sYT1uLnNlbGVjdGVkQ2hhcmFjdGVyOyJiIj09YT9hPSIoIjoiQiI9PWEmJihhPSJ7Iik7dmFyIHMsdT0hbi50ZXh0T2JqZWN0SW5uZXI7aWYoaVthXSlzPVRlKGUsdCxhLHUpO2Vsc2UgaWYob1thXSlzPU9lKGUsdCxhLHUpO2Vsc2UgaWYoIlciPT09YSlzPXllKGUsdSwhMCwhMCk7ZWxzZSBpZigidyI9PT1hKXM9eWUoZSx1LCEwLCExKTtlbHNle2lmKCJwIiE9PWEpcmV0dXJuIG51bGw7aWYocz1BZShlLHQsbi5yZXBlYXQsMCx1KSxuLmxpbmV3aXNlPSEwLHIudmlzdWFsTW9kZSlyLnZpc3VhbExpbmV8fChyLnZpc3VhbExpbmU9ITApO2Vsc2V7dmFyIGM9ci5pbnB1dFN0YXRlLm9wZXJhdG9yQXJncztjJiYoYy5saW5ld2lzZT0hMCkscy5lbmQubGluZS0tfX1yZXR1cm4gZS5zdGF0ZS52aW0udmlzdWFsTW9kZT9jZShlLHMuc3RhcnQscy5lbmQpOltzLnN0YXJ0LHMuZW5kXX0scmVwZWF0TGFzdENoYXJhY3RlclNlYXJjaDpmdW5jdGlvbihlLHQsbil7dmFyIHI9VHQubGFzdENoYXJhY3RlclNlYXJjaCxpPW4ucmVwZWF0LG89bi5mb3J3YXJkPT09ci5mb3J3YXJkLGE9KHIuaW5jcmVtZW50PzE6MCkqKG8/LTE6MSk7ZS5tb3ZlSCgtYSwiY2hhciIpLG4uaW5jbHVzaXZlPSEhbzt2YXIgcz1EZShlLGksbyxyLnNlbGVjdGVkQ2hhcmFjdGVyKTtyZXR1cm4gcz8ocy5jaCs9YSxzKTooZS5tb3ZlSChhLCJjaGFyIiksdCl9fSxMdD17Y2hhbmdlOmZ1bmN0aW9uKHQsbixpKXt2YXIgbyxhLHM9dC5zdGF0ZS52aW07aWYoVHQubWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzLmluVmlzdWFsQmxvY2s9cy52aXN1YWxCbG9jayxzLnZpc3VhbE1vZGUpe2E9dC5nZXRTZWxlY3Rpb24oKTt2YXIgdT1qKCIiLGkubGVuZ3RoKTt0LnJlcGxhY2VTZWxlY3Rpb25zKHUpLG89WShpWzBdLmhlYWQsaVswXS5hbmNob3IpfWVsc2V7dmFyIGM9aVswXS5hbmNob3IsbD1pWzBdLmhlYWQ7YT10LmdldFJhbmdlKGMsbCk7dmFyIHA9cy5sYXN0RWRpdElucHV0U3RhdGV8fHt9O2lmKCJtb3ZlQnlXb3JkcyI9PXAubW90aW9uJiYhQyhhKSl7dmFyIGY9L1xzKyQvLmV4ZWMoYSk7ZiYmcC5tb3Rpb25BcmdzJiZwLm1vdGlvbkFyZ3MuZm9yd2FyZCYmKGw9eihsLDAsLWZbMF0ubGVuZ3RoKSxhPWEuc2xpY2UoMCwtZlswXS5sZW5ndGgpKX12YXIgZD1uZXcgcihjLmxpbmUtMSxOdW1iZXIuTUFYX1ZBTFVFKSxoPXQuZmlyc3RMaW5lKCk9PXQubGFzdExpbmUoKTtsLmxpbmU+dC5sYXN0TGluZSgpJiZuLmxpbmV3aXNlJiYhaD90LnJlcGxhY2VSYW5nZSgiIixkLGwpOnQucmVwbGFjZVJhbmdlKCIiLGMsbCksbi5saW5ld2lzZSYmKGh8fCh0LnNldEN1cnNvcihkKSxlLmNvbW1hbmRzLm5ld2xpbmVBbmRJbmRlbnQodCkpLGMuY2g9TnVtYmVyLk1BWF9WQUxVRSksbz1jfVR0LnJlZ2lzdGVyQ29udHJvbGxlci5wdXNoVGV4dChuLnJlZ2lzdGVyTmFtZSwiY2hhbmdlIixhLG4ubGluZXdpc2UsaS5sZW5ndGg+MSksUHQuZW50ZXJJbnNlcnRNb2RlKHQse2hlYWQ6b30sdC5zdGF0ZS52aW0pfSxkZWxldGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLG8sYT1lLnN0YXRlLnZpbTtpZihhLnZpc3VhbEJsb2NrKXtvPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIHM9aigiIixuLmxlbmd0aCk7ZS5yZXBsYWNlU2VsZWN0aW9ucyhzKSxpPW5bMF0uYW5jaG9yfWVsc2V7dmFyIHU9blswXS5hbmNob3IsYz1uWzBdLmhlYWQ7dC5saW5ld2lzZSYmYy5saW5lIT1lLmZpcnN0TGluZSgpJiZ1LmxpbmU9PWUubGFzdExpbmUoKSYmdS5saW5lPT1jLmxpbmUtMSYmKHUubGluZT09ZS5maXJzdExpbmUoKT91LmNoPTA6dT1yKHUubGluZS0xLGVlKGUsdS5saW5lLTEpKSksbz1lLmdldFJhbmdlKHUsYyksZS5yZXBsYWNlUmFuZ2UoIiIsdSxjKSxpPXUsdC5saW5ld2lzZSYmKGk9SXQubW92ZVRvRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGUsdSkpfXJldHVybiBUdC5yZWdpc3RlckNvbnRyb2xsZXIucHVzaFRleHQodC5yZWdpc3Rlck5hbWUsImRlbGV0ZSIsbyx0LmxpbmV3aXNlLGEudmlzdWFsQmxvY2spLCQoZSxpLGEuaW5zZXJ0TW9kZSl9LGluZGVudDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5zdGF0ZS52aW0saT1uWzBdLmFuY2hvci5saW5lLG89ci52aXN1YWxCbG9jaz9uW24ubGVuZ3RoLTFdLmFuY2hvci5saW5lOm5bMF0uaGVhZC5saW5lLGE9ci52aXN1YWxNb2RlP3QucmVwZWF0OjE7dC5saW5ld2lzZSYmby0tO2Zvcih2YXIgcz1pO3M8PW87cysrKWZvcih2YXIgdT0wO3U8YTt1KyspZS5pbmRlbnRMaW5lKHMsdC5pbmRlbnRSaWdodCk7cmV0dXJuIEl0Lm1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihlLG5bMF0uYW5jaG9yKX0sY2hhbmdlQ2FzZTpmdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgbz1lLmdldFNlbGVjdGlvbnMoKSxhPVtdLHM9dC50b0xvd2VyLHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGM9b1t1XSxsPSIiO2lmKCEwPT09cylsPWMudG9Mb3dlckNhc2UoKTtlbHNlIGlmKCExPT09cylsPWMudG9VcHBlckNhc2UoKTtlbHNlIGZvcih2YXIgcD0wO3A8Yy5sZW5ndGg7cCsrKXt2YXIgZj1jLmNoYXJBdChwKTtsKz14KGYpP2YudG9Mb3dlckNhc2UoKTpmLnRvVXBwZXJDYXNlKCl9YS5wdXNoKGwpfXJldHVybiBlLnJlcGxhY2VTZWxlY3Rpb25zKGEpLHQuc2hvdWxkTW92ZUN1cnNvcj9pOiFlLnN0YXRlLnZpbS52aXN1YWxNb2RlJiZ0LmxpbmV3aXNlJiZuWzBdLmFuY2hvci5saW5lKzE9PW5bMF0uaGVhZC5saW5lP0l0Lm1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihlLHIpOnQubGluZXdpc2U/cjpZKG5bMF0uYW5jaG9yLG5bMF0uaGVhZCl9LHlhbms6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5zdGF0ZS52aW0sbz1lLmdldFNlbGVjdGlvbigpLGE9aS52aXN1YWxNb2RlP1koaS5zZWwuYW5jaG9yLGkuc2VsLmhlYWQsblswXS5oZWFkLG5bMF0uYW5jaG9yKTpyO3JldHVybiBUdC5yZWdpc3RlckNvbnRyb2xsZXIucHVzaFRleHQodC5yZWdpc3Rlck5hbWUsInlhbmsiLG8sdC5saW5ld2lzZSxpLnZpc3VhbEJsb2NrKSxhfX0sUHQ9e2p1bXBMaXN0V2FsazpmdW5jdGlvbihlLHQsbil7aWYoIW4udmlzdWFsTW9kZSl7dmFyIHI9dC5yZXBlYXQsaT10LmZvcndhcmQsbz1UdC5qdW1wTGlzdCxhPW8ubW92ZShlLGk/cjotcikscz1hP2EuZmluZCgpOnZvaWQgMDtzPXN8fGUuZ2V0Q3Vyc29yKCksZS5zZXRDdXJzb3Iocyl9fSxzY3JvbGw6ZnVuY3Rpb24oZSx0LG4pe2lmKCFuLnZpc3VhbE1vZGUpe3ZhciByPXQucmVwZWF0fHwxLGk9ZS5kZWZhdWx0VGV4dEhlaWdodCgpLG89ZS5nZXRTY3JvbGxJbmZvKCkudG9wLGE9aSpyLHM9dC5mb3J3YXJkP28rYTpvLWEsdT1RKGUuZ2V0Q3Vyc29yKCkpLGM9ZS5jaGFyQ29vcmRzKHUsImxvY2FsIik7aWYodC5mb3J3YXJkKXM+Yy50b3A/KHUubGluZSs9KHMtYy50b3ApL2ksdS5saW5lPU1hdGguY2VpbCh1LmxpbmUpLGUuc2V0Q3Vyc29yKHUpLGM9ZS5jaGFyQ29vcmRzKHUsImxvY2FsIiksZS5zY3JvbGxUbyhudWxsLGMudG9wKSk6ZS5zY3JvbGxUbyhudWxsLHMpO2Vsc2V7dmFyIGw9cytlLmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQ7bDxjLmJvdHRvbT8odS5saW5lLT0oYy5ib3R0b20tbCkvaSx1LmxpbmU9TWF0aC5mbG9vcih1LmxpbmUpLGUuc2V0Q3Vyc29yKHUpLGM9ZS5jaGFyQ29vcmRzKHUsImxvY2FsIiksZS5zY3JvbGxUbyhudWxsLGMuYm90dG9tLWUuZ2V0U2Nyb2xsSW5mbygpLmNsaWVudEhlaWdodCkpOmUuc2Nyb2xsVG8obnVsbCxzKX19fSxzY3JvbGxUb0N1cnNvcjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Q3Vyc29yKCkubGluZSxpPWUuY2hhckNvb3JkcyhyKG4sMCksImxvY2FsIiksbz1lLmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQsYT1pLnRvcCxzPWkuYm90dG9tLWE7c3dpdGNoKHQucG9zaXRpb24pe2Nhc2UiY2VudGVyIjphPWEtby8yK3M7YnJlYWs7Y2FzZSJib3R0b20iOmE9YS1vK3N9ZS5zY3JvbGxUbyhudWxsLGEpfSxyZXBsYXlNYWNybzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC5zZWxlY3RlZENoYXJhY3RlcixpPXQucmVwZWF0LG89VHQubWFjcm9Nb2RlU3RhdGU7Zm9yKCJAIj09ciYmKHI9by5sYXRlc3RSZWdpc3Rlcik7aS0tOylpdChlLG4sbyxyKX0sZW50ZXJNYWNyb1JlY29yZE1vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1UdC5tYWNyb01vZGVTdGF0ZSxyPXQuc2VsZWN0ZWRDaGFyYWN0ZXI7VHQucmVnaXN0ZXJDb250cm9sbGVyLmlzVmFsaWRSZWdpc3RlcihyKSYmbi5lbnRlck1hY3JvUmVjb3JkTW9kZShlLHIpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC5zdGF0ZS5vdmVyd3JpdGU/KHQudG9nZ2xlT3ZlcndyaXRlKCExKSx0LnNldE9wdGlvbigia2V5TWFwIiwidmltLWluc2VydCIpLGUuc2lnbmFsKHQsInZpbS1tb2RlLWNoYW5nZSIse21vZGU6Imluc2VydCJ9KSk6KHQudG9nZ2xlT3ZlcndyaXRlKCEwKSx0LnNldE9wdGlvbigia2V5TWFwIiwidmltLXJlcGxhY2UiKSxlLnNpZ25hbCh0LCJ2aW0tbW9kZS1jaGFuZ2UiLHttb2RlOiJyZXBsYWNlIn0pKX0sZW50ZXJJbnNlcnRNb2RlOmZ1bmN0aW9uKHQsbixpKXtpZighdC5nZXRPcHRpb24oInJlYWRPbmx5Iikpe2kuaW5zZXJ0TW9kZT0hMCxpLmluc2VydE1vZGVSZXBlYXQ9biYmbi5yZXBlYXR8fDE7dmFyIG89bj9uLmluc2VydEF0Om51bGwsYT1pLnNlbCxzPW4uaGVhZHx8dC5nZXRDdXJzb3IoImhlYWQiKSx1PXQubGlzdFNlbGVjdGlvbnMoKS5sZW5ndGg7aWYoImVvbCI9PW8pcz1yKHMubGluZSxlZSh0LHMubGluZSkpO2Vsc2UgaWYoImNoYXJBZnRlciI9PW8pcz16KHMsMCwxKTtlbHNlIGlmKCJmaXJzdE5vbkJsYW5rIj09bylzPUl0Lm1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3Rlcih0LHMpO2Vsc2UgaWYoInN0YXJ0T2ZTZWxlY3RlZEFyZWEiPT1vKWkudmlzdWFsQmxvY2s/KHM9cihNYXRoLm1pbihhLmhlYWQubGluZSxhLmFuY2hvci5saW5lKSxNYXRoLm1pbihhLmhlYWQuY2gsYS5hbmNob3IuY2gpKSx1PU1hdGguYWJzKGEuaGVhZC5saW5lLWEuYW5jaG9yLmxpbmUpKzEpOnM9YS5oZWFkLmxpbmU8YS5hbmNob3IubGluZT9hLmhlYWQ6cihhLmFuY2hvci5saW5lLDApO2Vsc2UgaWYoImVuZE9mU2VsZWN0ZWRBcmVhIj09bylpLnZpc3VhbEJsb2NrPyhzPXIoTWF0aC5taW4oYS5oZWFkLmxpbmUsYS5hbmNob3IubGluZSksTWF0aC5tYXgoYS5oZWFkLmNoKzEsYS5hbmNob3IuY2gpKSx1PU1hdGguYWJzKGEuaGVhZC5saW5lLWEuYW5jaG9yLmxpbmUpKzEpOnM9YS5oZWFkLmxpbmU+PWEuYW5jaG9yLmxpbmU/eihhLmhlYWQsMCwxKTpyKGEuYW5jaG9yLmxpbmUsMCk7ZWxzZSBpZigiaW5wbGFjZSI9PW8mJmkudmlzdWFsTW9kZSlyZXR1cm47dC5zZXRPcHRpb24oImRpc2FibGVJbnB1dCIsITEpLG4mJm4ucmVwbGFjZT8odC50b2dnbGVPdmVyd3JpdGUoITApLHQuc2V0T3B0aW9uKCJrZXlNYXAiLCJ2aW0tcmVwbGFjZSIpLGUuc2lnbmFsKHQsInZpbS1tb2RlLWNoYW5nZSIse21vZGU6InJlcGxhY2UifSkpOih0LnRvZ2dsZU92ZXJ3cml0ZSghMSksdC5zZXRPcHRpb24oImtleU1hcCIsInZpbS1pbnNlcnQiKSxlLnNpZ25hbCh0LCJ2aW0tbW9kZS1jaGFuZ2UiLHttb2RlOiJpbnNlcnQifSkpLFR0Lm1hY3JvTW9kZVN0YXRlLmlzUGxheWluZ3x8KHQub24oImNoYW5nZSIsdXQpLGUub24odC5nZXRJbnB1dEZpZWxkKCksImtleWRvd24iLGR0KSksaS52aXN1YWxNb2RlJiZkZSh0KSxvZSh0LHMsdSl9fSx0b2dnbGVWaXN1YWxNb2RlOmZ1bmN0aW9uKHQsbixpKXt2YXIgbyxhPW4ucmVwZWF0LHM9dC5nZXRDdXJzb3IoKTtpLnZpc3VhbE1vZGU/aS52aXN1YWxMaW5lXm4ubGluZXdpc2V8fGkudmlzdWFsQmxvY2tebi5ibG9ja3dpc2U/KGkudmlzdWFsTGluZT0hIW4ubGluZXdpc2UsaS52aXN1YWxCbG9jaz0hIW4uYmxvY2t3aXNlLGUuc2lnbmFsKHQsInZpbS1tb2RlLWNoYW5nZSIse21vZGU6InZpc3VhbCIsc3ViTW9kZTppLnZpc3VhbExpbmU/ImxpbmV3aXNlIjppLnZpc3VhbEJsb2NrPyJibG9ja3dpc2UiOiIifSksbGUodCkpOmRlKHQpOihpLnZpc3VhbE1vZGU9ITAsaS52aXN1YWxMaW5lPSEhbi5saW5ld2lzZSxpLnZpc3VhbEJsb2NrPSEhbi5ibG9ja3dpc2Usbz0kKHQscihzLmxpbmUscy5jaCthLTEpLCEwKSxpLnNlbD17YW5jaG9yOnMsaGVhZDpvfSxlLnNpZ25hbCh0LCJ2aW0tbW9kZS1jaGFuZ2UiLHttb2RlOiJ2aXN1YWwiLHN1Yk1vZGU6aS52aXN1YWxMaW5lPyJsaW5ld2lzZSI6aS52aXN1YWxCbG9jaz8iYmxvY2t3aXNlIjoiIn0pLGxlKHQpLFNlKHQsaSwiPCIsWShzLG8pKSxTZSh0LGksIj4iLFgocyxvKSkpfSxyZXNlbGVjdExhc3RTZWxlY3Rpb246ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXIubGFzdFNlbGVjdGlvbjtpZihyLnZpc3VhbE1vZGUmJnVlKHQsciksaSl7dmFyIG89aS5hbmNob3JNYXJrLmZpbmQoKSxhPWkuaGVhZE1hcmsuZmluZCgpO2lmKCFvfHwhYSlyZXR1cm47ci5zZWw9e2FuY2hvcjpvLGhlYWQ6YX0sci52aXN1YWxNb2RlPSEwLHIudmlzdWFsTGluZT1pLnZpc3VhbExpbmUsci52aXN1YWxCbG9jaz1pLnZpc3VhbEJsb2NrLGxlKHQpLFNlKHQsciwiPCIsWShvLGEpKSxTZSh0LHIsIj4iLFgobyxhKSksZS5zaWduYWwodCwidmltLW1vZGUtY2hhbmdlIix7bW9kZToidmlzdWFsIixzdWJNb2RlOnIudmlzdWFsTGluZT8ibGluZXdpc2UiOnIudmlzdWFsQmxvY2s/ImJsb2Nrd2lzZSI6IiJ9KX19LGpvaW5MaW5lczpmdW5jdGlvbihlLHQsbil7dmFyIGksbztpZihuLnZpc3VhbE1vZGUpe2lmKGk9ZS5nZXRDdXJzb3IoImFuY2hvciIpLG89ZS5nZXRDdXJzb3IoImhlYWQiKSxKKG8saSkpe3ZhciBhPW87bz1pLGk9YX1vLmNoPWVlKGUsby5saW5lKS0xfWVsc2V7dmFyIHM9TWF0aC5tYXgodC5yZXBlYXQsMik7aT1lLmdldEN1cnNvcigpLG89JChlLHIoaS5saW5lK3MtMSwxLzApKX1mb3IodmFyIHU9MCxjPWkubGluZTtjPG8ubGluZTtjKyspe3U9ZWUoZSxpLmxpbmUpO3ZhciBhPXIoaS5saW5lKzEsZWUoZSxpLmxpbmUrMSkpLGw9ZS5nZXRSYW5nZShpLGEpO2w9bC5yZXBsYWNlKC9cblxzKi9nLCIgIiksZS5yZXBsYWNlUmFuZ2UobCxpLGEpfXZhciBwPXIoaS5saW5lLHUpO24udmlzdWFsTW9kZSYmZGUoZSwhMSksZS5zZXRDdXJzb3IocCl9LG5ld0xpbmVBbmRFbnRlckluc2VydE1vZGU6ZnVuY3Rpb24odCxuLGkpe2kuaW5zZXJ0TW9kZT0hMDt2YXIgbz1RKHQuZ2V0Q3Vyc29yKCkpO2lmKG8ubGluZSE9PXQuZmlyc3RMaW5lKCl8fG4uYWZ0ZXIpe28ubGluZT1uLmFmdGVyP28ubGluZTpvLmxpbmUtMSxvLmNoPWVlKHQsby5saW5lKSx0LnNldEN1cnNvcihvKTsoZS5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVDb21tZW50fHxlLmNvbW1hbmRzLm5ld2xpbmVBbmRJbmRlbnQpKHQpfWVsc2UgdC5yZXBsYWNlUmFuZ2UoIlxuIixyKHQuZmlyc3RMaW5lKCksMCkpLHQuc2V0Q3Vyc29yKHQuZmlyc3RMaW5lKCksMCk7dGhpcy5lbnRlckluc2VydE1vZGUodCx7cmVwZWF0Om4ucmVwZWF0fSxpKX0scGFzdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPVEoZS5nZXRDdXJzb3IoKSksbz1UdC5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIodC5yZWdpc3Rlck5hbWUpLGE9by50b1N0cmluZygpO2lmKGEpe2lmKHQubWF0Y2hJbmRlbnQpe3ZhciBzPWUuZ2V0T3B0aW9uKCJ0YWJTaXplIiksdT1mdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCJcdCIpLmxlbmd0aC0xLG49ZS5zcGxpdCgiICIpLmxlbmd0aC0xO3JldHVybiB0KnMrMSpufSxjPWUuZ2V0TGluZShlLmdldEN1cnNvcigpLmxpbmUpLGw9dShjLm1hdGNoKC9eXHMqLylbMF0pLHA9YS5yZXBsYWNlKC9cbiQvLCIiKSxmPWEhPT1wLGQ9dShhLm1hdGNoKC9eXHMqLylbMF0pLGE9cC5yZXBsYWNlKC9eXHMqL2dtLGZ1bmN0aW9uKHQpe3ZhciBuPWwrKHUodCktZCk7aWYobjwwKXJldHVybiIiO2lmKGUuZ2V0T3B0aW9uKCJpbmRlbnRXaXRoVGFicyIpKXt2YXIgcj1NYXRoLmZsb29yKG4vcyk7cmV0dXJuIEFycmF5KHIrMSkuam9pbigiXHQiKX1yZXR1cm4gQXJyYXkobisxKS5qb2luKCIgIil9KTthKz1mPyJcbiI6IiJ9aWYodC5yZXBlYXQ+MSl2YXIgYT1BcnJheSh0LnJlcGVhdCsxKS5qb2luKGEpO3ZhciBoPW8ubGluZXdpc2UsbT1vLmJsb2Nrd2lzZTtpZihoKW4udmlzdWFsTW9kZT9hPW4udmlzdWFsTGluZT9hLnNsaWNlKDAsLTEpOiJcbiIrYS5zbGljZSgwLGEubGVuZ3RoLTEpKyJcbiI6dC5hZnRlcj8oYT0iXG4iK2Euc2xpY2UoMCxhLmxlbmd0aC0xKSxpLmNoPWVlKGUsaS5saW5lKSk6aS5jaD0wO2Vsc2V7aWYobSl7YT1hLnNwbGl0KCJcbiIpO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7ZysrKWFbZ109IiI9PWFbZ10/IiAiOmFbZ119aS5jaCs9dC5hZnRlcj8xOjB9dmFyIHksdjtpZihuLnZpc3VhbE1vZGUpe24ubGFzdFBhc3RlZFRleHQ9YTt2YXIgYix4PXNlKGUsbiksQz14WzBdLEU9eFsxXSxEPWUuZ2V0U2VsZWN0aW9uKCksdz1lLmxpc3RTZWxlY3Rpb25zKCksUz1uZXcgQXJyYXkody5sZW5ndGgpLmpvaW4oIjEiKS5zcGxpdCgiMSIpO24ubGFzdFNlbGVjdGlvbiYmKGI9bi5sYXN0U2VsZWN0aW9uLmhlYWRNYXJrLmZpbmQoKSksVHQucmVnaXN0ZXJDb250cm9sbGVyLnVubmFtZWRSZWdpc3Rlci5zZXRUZXh0KEQpLG0/KGUucmVwbGFjZVNlbGVjdGlvbnMoUyksRT1yKEMubGluZSthLmxlbmd0aC0xLEMuY2gpLGUuc2V0Q3Vyc29yKEMpLGllKGUsRSksZS5yZXBsYWNlU2VsZWN0aW9ucyhhKSx5PUMpOm4udmlzdWFsQmxvY2s/KGUucmVwbGFjZVNlbGVjdGlvbnMoUyksZS5zZXRDdXJzb3IoQyksZS5yZXBsYWNlUmFuZ2UoYSxDLEMpLHk9Qyk6KGUucmVwbGFjZVJhbmdlKGEsQyxFKSx5PWUucG9zRnJvbUluZGV4KGUuaW5kZXhGcm9tUG9zKEMpK2EubGVuZ3RoLTEpKSxiJiYobi5sYXN0U2VsZWN0aW9uLmhlYWRNYXJrPWUuc2V0Qm9va21hcmsoYikpLGgmJih5LmNoPTApfWVsc2UgaWYobSl7ZS5zZXRDdXJzb3IoaSk7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBrPWkubGluZStnO2s+ZS5sYXN0TGluZSgpJiZlLnJlcGxhY2VSYW5nZSgiXG4iLHIoaywwKSk7dmFyIEE9ZWUoZSxrKTtBPGkuY2gmJnJlKGUsayxpLmNoKX1lLnNldEN1cnNvcihpKSxpZShlLHIoaS5saW5lK2EubGVuZ3RoLTEsaS5jaCkpLGUucmVwbGFjZVNlbGVjdGlvbnMoYSkseT1pfWVsc2UgZS5yZXBsYWNlUmFuZ2UoYSxpKSxoJiZ0LmFmdGVyP3k9cihpLmxpbmUrMSxnZShlLmdldExpbmUoaS5saW5lKzEpKSk6aCYmIXQuYWZ0ZXI/eT1yKGkubGluZSxnZShlLmdldExpbmUoaS5saW5lKSkpOiFoJiZ0LmFmdGVyPyh2PWUuaW5kZXhGcm9tUG9zKGkpLHk9ZS5wb3NGcm9tSW5kZXgodithLmxlbmd0aC0xKSk6KHY9ZS5pbmRleEZyb21Qb3MoaSkseT1lLnBvc0Zyb21JbmRleCh2K2EubGVuZ3RoKSk7bi52aXN1YWxNb2RlJiZkZShlLCExKSxlLnNldEN1cnNvcih5KX19LHVuZG86ZnVuY3Rpb24odCxuKXt0Lm9wZXJhdGlvbihmdW5jdGlvbigpe1codCxlLmNvbW1hbmRzLnVuZG8sbi5yZXBlYXQpKCksdC5zZXRDdXJzb3IodC5nZXRDdXJzb3IoImFuY2hvciIpKX0pfSxyZWRvOmZ1bmN0aW9uKHQsbil7Vyh0LGUuY29tbWFuZHMucmVkbyxuLnJlcGVhdCkoKX0sc2V0UmVnaXN0ZXI6ZnVuY3Rpb24oZSx0LG4pe24uaW5wdXRTdGF0ZS5yZWdpc3Rlck5hbWU9dC5zZWxlY3RlZENoYXJhY3Rlcn0sc2V0TWFyazpmdW5jdGlvbihlLHQsbil7U2UoZSxuLHQuc2VsZWN0ZWRDaGFyYWN0ZXIsZS5nZXRDdXJzb3IoKSl9LHJlcGxhY2U6ZnVuY3Rpb24odCxuLGkpe3ZhciBvLGEscz1uLnNlbGVjdGVkQ2hhcmFjdGVyLHU9dC5nZXRDdXJzb3IoKSxjPXQubGlzdFNlbGVjdGlvbnMoKTtpZihpLnZpc3VhbE1vZGUpdT10LmdldEN1cnNvcigic3RhcnQiKSxhPXQuZ2V0Q3Vyc29yKCJlbmQiKTtlbHNle3ZhciBsPXQuZ2V0TGluZSh1LmxpbmUpO289dS5jaCtuLnJlcGVhdCxvPmwubGVuZ3RoJiYobz1sLmxlbmd0aCksYT1yKHUubGluZSxvKX1pZigiXG4iPT1zKWkudmlzdWFsTW9kZXx8dC5yZXBsYWNlUmFuZ2UoIiIsdSxhKSwoZS5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVDb21tZW50fHxlLmNvbW1hbmRzLm5ld2xpbmVBbmRJbmRlbnQpKHQpO2Vsc2V7dmFyIHA9dC5nZXRSYW5nZSh1LGEpO2lmKHA9cC5yZXBsYWNlKC9bXlxuXS9nLHMpLGkudmlzdWFsQmxvY2spe3ZhciBmPW5ldyBBcnJheSh0LmdldE9wdGlvbigidGFiU2l6ZSIpKzEpLmpvaW4oIiAiKTtwPXQuZ2V0U2VsZWN0aW9uKCkscD1wLnJlcGxhY2UoL1x0L2csZikucmVwbGFjZSgvW15cbl0vZyxzKS5zcGxpdCgiXG4iKSx0LnJlcGxhY2VTZWxlY3Rpb25zKHApfWVsc2UgdC5yZXBsYWNlUmFuZ2UocCx1LGEpO2kudmlzdWFsTW9kZT8odT1KKGNbMF0uYW5jaG9yLGNbMF0uaGVhZCk/Y1swXS5hbmNob3I6Y1swXS5oZWFkLHQuc2V0Q3Vyc29yKHUpLGRlKHQsITEpKTp0LnNldEN1cnNvcih6KGEsMCwtMSkpfX0saW5jcmVtZW50TnVtYmVyVG9rZW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4saSxvLGEscz1lLmdldEN1cnNvcigpLHU9ZS5nZXRMaW5lKHMubGluZSksYz0vKC0/KSg/OigweCkoW1xkYS1mXSspfCgwYnwwfCkoXGQrKSkvZ2k7bnVsbCE9PShuPWMuZXhlYyh1KSkmJihpPW4uaW5kZXgsbz1pK25bMF0ubGVuZ3RoLCEocy5jaDxvKSk7KTtpZigodC5iYWNrdHJhY2t8fCEobzw9cy5jaCkpJiZuKXt2YXIgbD1uWzJdfHxuWzRdLHA9blszXXx8bls1XSxmPXQuaW5jcmVhc2U/MTotMSxkPXsiMGIiOjIsMDo4LCIiOjEwLCIweCI6MTZ9W2wudG9Mb3dlckNhc2UoKV07YT0ocGFyc2VJbnQoblsxXStwLGQpK2YqdC5yZXBlYXQpLnRvU3RyaW5nKGQpO3ZhciBoPWw/bmV3IEFycmF5KHAubGVuZ3RoLWEubGVuZ3RoKzErblsxXS5sZW5ndGgpLmpvaW4oIjAiKToiIjthPSItIj09PWEuY2hhckF0KDApPyItIitsK2grYS5zdWJzdHIoMSk6bCtoK2E7dmFyIG09cihzLmxpbmUsaSksZz1yKHMubGluZSxvKTtlLnJlcGxhY2VSYW5nZShhLG0sZyksZS5zZXRDdXJzb3IocihzLmxpbmUsaSthLmxlbmd0aC0xKSl9fSxyZXBlYXRMYXN0RWRpdDpmdW5jdGlvbihlLHQsbil7aWYobi5sYXN0RWRpdElucHV0U3RhdGUpe3ZhciByPXQucmVwZWF0O3ImJnQucmVwZWF0SXNFeHBsaWNpdD9uLmxhc3RFZGl0SW5wdXRTdGF0ZS5yZXBlYXRPdmVycmlkZT1yOnI9bi5sYXN0RWRpdElucHV0U3RhdGUucmVwZWF0T3ZlcnJpZGV8fHIsaHQoZSxuLHIsITEpfX0saW5kZW50OmZ1bmN0aW9uKGUsdCl7ZS5pbmRlbnRMaW5lKGUuZ2V0Q3Vyc29yKCkubGluZSx0LmluZGVudFJpZ2h0KX0sZXhpdEluc2VydE1vZGU6dHR9LE10PXsiKCI6ImJyYWNrZXQiLCIpIjoiYnJhY2tldCIsInsiOiJicmFja2V0IiwifSI6ImJyYWNrZXQiLCJbIjoic2VjdGlvbiIsIl0iOiJzZWN0aW9uIiwiKiI6ImNvbW1lbnQiLCIvIjoiY29tbWVudCIsbToibWV0aG9kIixNOiJtZXRob2QiLCIjIjoicHJlcHJvY2VzcyJ9LGp0PXticmFja2V0Ontpc0NvbXBsZXRlOmZ1bmN0aW9uKGUpe2lmKGUubmV4dENoPT09ZS5zeW1iKXtpZigrK2UuZGVwdGg+PTEpcmV0dXJuITB9ZWxzZSBlLm5leHRDaD09PWUucmV2ZXJzZVN5bWImJmUuZGVwdGgtLTtyZXR1cm4hMX19LHNlY3Rpb246e2luaXQ6ZnVuY3Rpb24oZSl7ZS5jdXJNb3ZlVGhyb3VnaD0hMCxlLnN5bWI9KGUuZm9yd2FyZD8iXSI6IlsiKT09PWUuc3ltYj8ieyI6In0ifSxpc0NvbXBsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5pbmRleCYmZS5uZXh0Q2g9PT1lLnN5bWJ9fSxjb21tZW50Ontpc0NvbXBsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PSIqIj09PWUubGFzdENoJiYiLyI9PT1lLm5leHRDaDtyZXR1cm4gZS5sYXN0Q2g9ZS5uZXh0Q2gsdH19LG1ldGhvZDp7aW5pdDpmdW5jdGlvbihlKXtlLnN5bWI9Im0iPT09ZS5zeW1iPyJ7IjoifSIsZS5yZXZlcnNlU3ltYj0ieyI9PT1lLnN5bWI/In0iOiJ7In0saXNDb21wbGV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0Q2g9PT1lLnN5bWJ9fSxwcmVwcm9jZXNzOntpbml0OmZ1bmN0aW9uKGUpe2UuaW5kZXg9MH0saXNDb21wbGV0ZTpmdW5jdGlvbihlKXtpZigiIyI9PT1lLm5leHRDaCl7dmFyIHQ9ZS5saW5lVGV4dC5tYXRjaCgvIyhcdyspLylbMV07aWYoImVuZGlmIj09PXQpe2lmKGUuZm9yd2FyZCYmMD09PWUuZGVwdGgpcmV0dXJuITA7ZS5kZXB0aCsrfWVsc2UgaWYoImlmIj09PXQpe2lmKCFlLmZvcndhcmQmJjA9PT1lLmRlcHRoKXJldHVybiEwO2UuZGVwdGgtLX1pZigiZWxzZSI9PT10JiYwPT09ZS5kZXB0aClyZXR1cm4hMH1yZXR1cm4hMX19fTt3KCJwY3JlIiwhMCwiYm9vbGVhbiIpLEZlLnByb3RvdHlwZT17Z2V0UXVlcnk6ZnVuY3Rpb24oKXtyZXR1cm4gVHQucXVlcnl9LHNldFF1ZXJ5OmZ1bmN0aW9uKGUpe1R0LnF1ZXJ5PWV9LGdldE92ZXJsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFyY2hPdmVybGF5fSxzZXRPdmVybGF5OmZ1bmN0aW9uKGUpe3RoaXMuc2VhcmNoT3ZlcmxheT1lfSxpc1JldmVyc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIFR0LmlzUmV2ZXJzZWR9LHNldFJldmVyc2VkOmZ1bmN0aW9uKGUpe1R0LmlzUmV2ZXJzZWQ9ZX0sZ2V0U2Nyb2xsYmFyQW5ub3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbm5vdGF0ZX0sc2V0U2Nyb2xsYmFyQW5ub3RhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hbm5vdGF0ZT1lfX07dmFyIFJ0PXsiXFxuIjoiXG4iLCJcXHIiOiJcciIsIlxcdCI6Ilx0In0sQnQ9eyJcXC8iOiIvIiwiXFxcXCI6IlxcIiwiXFxuIjoiXG4iLCJcXHIiOiJcciIsIlxcdCI6Ilx0In0sJHQ9IihKYXZhc2NyaXB0IHJlZ2V4cCkiLFV0PWZ1bmN0aW9uKCl7dGhpcy5idWlsZENvbW1hbmRNYXBfKCl9O1V0LnByb3RvdHlwZT17cHJvY2Vzc0NvbW1hbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7ZS5vcGVyYXRpb24oZnVuY3Rpb24oKXtlLmN1ck9wLmlzVmltT3A9ITAsci5fcHJvY2Vzc0NvbW1hbmQoZSx0LG4pfSl9LF9wcm9jZXNzQ29tbWFuZDpmdW5jdGlvbih0LG4scil7dmFyIGk9dC5zdGF0ZS52aW0sbz1UdC5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIoIjoiKSxhPW8udG9TdHJpbmcoKTtpLnZpc3VhbE1vZGUmJmRlKHQpO3ZhciBzPW5ldyBlLlN0cmluZ1N0cmVhbShuKTtvLnNldFRleHQobik7dmFyIHU9cnx8e307dS5pbnB1dD1uO3RyeXt0aGlzLnBhcnNlSW5wdXRfKHQscyx1KX1jYXRjaChlKXt0aHJvdyB6ZSh0LGUpLGV9dmFyIGMsbDtpZih1LmNvbW1hbmROYW1lKXtpZihjPXRoaXMubWF0Y2hDb21tYW5kXyh1LmNvbW1hbmROYW1lKSl7aWYobD1jLm5hbWUsYy5leGNsdWRlRnJvbUNvbW1hbmRIaXN0b3J5JiZvLnNldFRleHQoYSksdGhpcy5wYXJzZUNvbW1hbmRBcmdzXyhzLHUsYyksImV4VG9LZXkiPT1jLnR5cGUpe2Zvcih2YXIgcD0wO3A8Yy50b0tleXMubGVuZ3RoO3ArKyllLlZpbS5oYW5kbGVLZXkodCxjLnRvS2V5c1twXSwibWFwcGluZyIpO3JldHVybn1pZigiZXhUb0V4Ij09Yy50eXBlKXJldHVybiB2b2lkIHRoaXMucHJvY2Vzc0NvbW1hbmQodCxjLnRvSW5wdXQpfX1lbHNlIHZvaWQgMCE9PXUubGluZSYmKGw9Im1vdmUiKTtpZighbClyZXR1cm4gdm9pZCB6ZSh0LCdOb3QgYW4gZWRpdG9yIGNvbW1hbmQgIjonK24rJyInKTt0cnl7enRbbF0odCx1KSxjJiZjLnBvc3NpYmx5QXN5bmN8fCF1LmNhbGxiYWNrfHx1LmNhbGxiYWNrKCl9Y2F0Y2goZSl7dGhyb3cgemUodCxlKSxlfX0scGFyc2VJbnB1dF86ZnVuY3Rpb24oZSx0LG4pe3QuZWF0V2hpbGUoIjoiKSx0LmVhdCgiJSIpPyhuLmxpbmU9ZS5maXJzdExpbmUoKSxuLmxpbmVFbmQ9ZS5sYXN0TGluZSgpKToobi5saW5lPXRoaXMucGFyc2VMaW5lU3BlY18oZSx0KSx2b2lkIDAhPT1uLmxpbmUmJnQuZWF0KCIsIikmJihuLmxpbmVFbmQ9dGhpcy5wYXJzZUxpbmVTcGVjXyhlLHQpKSk7dmFyIHI9dC5tYXRjaCgvXihcdyspLyk7cmV0dXJuIG4uY29tbWFuZE5hbWU9cj9yWzFdOnQubWF0Y2goLy4qLylbMF0sbn0scGFyc2VMaW5lU3BlY186ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm1hdGNoKC9eKFxkKykvKTtpZihuKXJldHVybiBwYXJzZUludChuWzFdLDEwKS0xO3N3aXRjaCh0Lm5leHQoKSl7Y2FzZSIuIjpyZXR1cm4gdGhpcy5wYXJzZUxpbmVTcGVjT2Zmc2V0Xyh0LGUuZ2V0Q3Vyc29yKCkubGluZSk7Y2FzZSIkIjpyZXR1cm4gdGhpcy5wYXJzZUxpbmVTcGVjT2Zmc2V0Xyh0LGUubGFzdExpbmUoKSk7Y2FzZSInIjp2YXIgcj10Lm5leHQoKSxpPVplKGUsZS5zdGF0ZS52aW0scik7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJNYXJrIG5vdCBzZXQiKTtyZXR1cm4gdGhpcy5wYXJzZUxpbmVTcGVjT2Zmc2V0Xyh0LGkubGluZSk7Y2FzZSItIjpjYXNlIisiOnJldHVybiB0LmJhY2tVcCgxKSx0aGlzLnBhcnNlTGluZVNwZWNPZmZzZXRfKHQsZS5nZXRDdXJzb3IoKS5saW5lKTtkZWZhdWx0OnJldHVybiB2b2lkIHQuYmFja1VwKDEpfX0scGFyc2VMaW5lU3BlY09mZnNldF86ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1hdGNoKC9eKFsrLV0pPyhcZCspLyk7aWYobil7dmFyIHI9cGFyc2VJbnQoblsyXSwxMCk7Ii0iPT1uWzFdP3QtPXI6dCs9cn1yZXR1cm4gdH0scGFyc2VDb21tYW5kQXJnc186ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmVvbCgpKXt0LmFyZ1N0cmluZz1lLm1hdGNoKC8uKi8pWzBdO3ZhciByPW4uYXJnRGVsaW1pdGVyfHwvXHMrLyxpPXRlKHQuYXJnU3RyaW5nKS5zcGxpdChyKTtpLmxlbmd0aCYmaVswXSYmKHQuYXJncz1pKX19LG1hdGNoQ29tbWFuZF86ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3Q+MDt0LS0pe3ZhciBuPWUuc3Vic3RyaW5nKDAsdCk7aWYodGhpcy5jb21tYW5kTWFwX1tuXSl7dmFyIHI9dGhpcy5jb21tYW5kTWFwX1tuXTtpZigwPT09ci5uYW1lLmluZGV4T2YoZSkpcmV0dXJuIHJ9fXJldHVybiBudWxsfSxidWlsZENvbW1hbmRNYXBfOmZ1bmN0aW9uKCl7dGhpcy5jb21tYW5kTWFwXz17fTtmb3IodmFyIGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHQ9bltlXSxyPXQuc2hvcnROYW1lfHx0Lm5hbWU7dGhpcy5jb21tYW5kTWFwX1tyXT10fX0sbWFwOmZ1bmN0aW9uKGUsbixyKXtpZigiOiIhPWUmJiI6Ij09ZS5jaGFyQXQoMCkpe2lmKHIpdGhyb3cgRXJyb3IoIk1vZGUgbm90IHN1cHBvcnRlZCBmb3IgZXggbWFwcGluZ3MiKTt2YXIgaT1lLnN1YnN0cmluZygxKTsiOiIhPW4mJiI6Ij09bi5jaGFyQXQoMCk/dGhpcy5jb21tYW5kTWFwX1tpXT17bmFtZTppLHR5cGU6ImV4VG9FeCIsdG9JbnB1dDpuLnN1YnN0cmluZygxKSx1c2VyOiEwfTp0aGlzLmNvbW1hbmRNYXBfW2ldPXtuYW1lOmksdHlwZToiZXhUb0tleSIsdG9LZXlzOm4sdXNlcjohMH19ZWxzZSBpZigiOiIhPW4mJiI6Ij09bi5jaGFyQXQoMCkpe3ZhciBvPXtrZXlzOmUsdHlwZToia2V5VG9FeCIsZXhBcmdzOntpbnB1dDpuLnN1YnN0cmluZygxKX19O3ImJihvLmNvbnRleHQ9ciksdC51bnNoaWZ0KG8pfWVsc2V7dmFyIG89e2tleXM6ZSx0eXBlOiJrZXlUb0tleSIsdG9LZXlzOm59O3ImJihvLmNvbnRleHQ9ciksdC51bnNoaWZ0KG8pfX0sdW5tYXA6ZnVuY3Rpb24oZSxuKXtpZigiOiIhPWUmJiI6Ij09ZS5jaGFyQXQoMCkpe2lmKG4pdGhyb3cgRXJyb3IoIk1vZGUgbm90IHN1cHBvcnRlZCBmb3IgZXggbWFwcGluZ3MiKTt2YXIgcj1lLnN1YnN0cmluZygxKTtpZih0aGlzLmNvbW1hbmRNYXBfW3JdJiZ0aGlzLmNvbW1hbmRNYXBfW3JdLnVzZXIpcmV0dXJuIHZvaWQgZGVsZXRlIHRoaXMuY29tbWFuZE1hcF9bcl19ZWxzZSBmb3IodmFyIGk9ZSxvPTA7bzx0Lmxlbmd0aDtvKyspaWYoaT09dFtvXS5rZXlzJiZ0W29dLmNvbnRleHQ9PT1uKXJldHVybiB2b2lkIHQuc3BsaWNlKG8sMSk7dGhyb3cgRXJyb3IoIk5vIHN1Y2ggbWFwcGluZy4iKX19O3ZhciB6dD17Y29sb3JzY2hlbWU6ZnVuY3Rpb24oZSx0KXtpZighdC5hcmdzfHx0LmFyZ3MubGVuZ3RoPDEpcmV0dXJuIHZvaWQgemUoZSxlLmdldE9wdGlvbigidGhlbWUiKSk7ZS5zZXRPcHRpb24oInRoZW1lIix0LmFyZ3NbMF0pfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuYXJncztpZighcnx8ci5sZW5ndGg8MilyZXR1cm4gdm9pZChlJiZ6ZShlLCJJbnZhbGlkIG1hcHBpbmc6ICIrdC5pbnB1dCkpO0d0Lm1hcChyWzBdLHJbMV0sbil9LGltYXA6ZnVuY3Rpb24oZSx0KXt0aGlzLm1hcChlLHQsImluc2VydCIpfSxubWFwOmZ1bmN0aW9uKGUsdCl7dGhpcy5tYXAoZSx0LCJub3JtYWwiKX0sdm1hcDpmdW5jdGlvbihlLHQpe3RoaXMubWFwKGUsdCwidmlzdWFsIil9LHVubWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LmFyZ3M7aWYoIXJ8fHIubGVuZ3RoPDEpcmV0dXJuIHZvaWQoZSYmemUoZSwiTm8gc3VjaCBtYXBwaW5nOiAiK3QuaW5wdXQpKTtHdC51bm1hcChyWzBdLG4pfSxtb3ZlOmZ1bmN0aW9uKGUsdCl7TnQucHJvY2Vzc0NvbW1hbmQoZSxlLnN0YXRlLnZpbSx7dHlwZToibW90aW9uIixtb3Rpb246Im1vdmVUb0xpbmVPckVkZ2VPZkRvY3VtZW50Iixtb3Rpb25BcmdzOntmb3J3YXJkOiExLGV4cGxpY2l0UmVwZWF0OiEwLGxpbmV3aXNlOiEwfSxyZXBlYXRPdmVycmlkZTp0LmxpbmUrMX0pfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmFyZ3Mscj10LnNldENmZ3x8e307aWYoIW58fG4ubGVuZ3RoPDEpcmV0dXJuIHZvaWQoZSYmemUoZSwiSW52YWxpZCBtYXBwaW5nOiAiK3QuaW5wdXQpKTt2YXIgaT1uWzBdLnNwbGl0KCI9Iiksbz1pWzBdLGE9aVsxXSxzPSExO2lmKCI/Ij09by5jaGFyQXQoby5sZW5ndGgtMSkpe2lmKGEpdGhyb3cgRXJyb3IoIlRyYWlsaW5nIGNoYXJhY3RlcnM6ICIrdC5hcmdTdHJpbmcpO289by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKSxzPSEwfXZvaWQgMD09PWEmJiJubyI9PW8uc3Vic3RyaW5nKDAsMikmJihvPW8uc3Vic3RyaW5nKDIpLGE9ITEpO3ZhciB1PWt0W29dJiYiYm9vbGVhbiI9PWt0W29dLnR5cGU7aWYodSYmdm9pZCAwPT1hJiYoYT0hMCksIXUmJnZvaWQgMD09PWF8fHMpe3ZhciBjPWsobyxlLHIpO2MgaW5zdGFuY2VvZiBFcnJvcj96ZShlLGMubWVzc2FnZSk6ITA9PT1jfHwhMT09PWM/emUoZSwiICIrKGM/IiI6Im5vIikrbyk6emUoZSwiICAiK28rIj0iK2MpfWVsc2V7dmFyIGw9UyhvLGEsZSxyKTtsIGluc3RhbmNlb2YgRXJyb3ImJnplKGUsbC5tZXNzYWdlKX19LHNldGxvY2FsOmZ1bmN0aW9uKGUsdCl7dC5zZXRDZmc9e3Njb3BlOiJsb2NhbCJ9LHRoaXMuc2V0KGUsdCl9LHNldGdsb2JhbDpmdW5jdGlvbihlLHQpe3Quc2V0Q2ZnPXtzY29wZToiZ2xvYmFsIn0sdGhpcy5zZXQoZSx0KX0scmVnaXN0ZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5hcmdzLHI9VHQucmVnaXN0ZXJDb250cm9sbGVyLnJlZ2lzdGVycyxpPSItLS0tLS0tLS0tUmVnaXN0ZXJzLS0tLS0tLS0tLTxicj48YnI+IjtpZihuKXt2YXIgbztuPW4uam9pbigiIik7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspaWYobz1uLmNoYXJBdChhKSxUdC5yZWdpc3RlckNvbnRyb2xsZXIuaXNWYWxpZFJlZ2lzdGVyKG8pKXt2YXIgcz1yW29dfHxuZXcgTjtpKz0nIicrbysiICAgICIrcy50b1N0cmluZygpKyI8YnI+In19ZWxzZSBmb3IodmFyIG8gaW4gcil7dmFyIHU9cltvXS50b1N0cmluZygpO3UubGVuZ3RoJiYoaSs9JyInK28rIiAgICAiK3UrIjxicj4iKX16ZShlLGkpfSxzb3J0OmZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaShlLHQpe2lmKGEpe3ZhciBuO249ZSxlPXQsdD1ufXMmJihlPWUudG9Mb3dlckNhc2UoKSx0PXQudG9Mb3dlckNhc2UoKSk7dmFyIHI9YyYmeS5leGVjKGUpLGk9YyYmeS5leGVjKHQpO3JldHVybiByPyhyPXBhcnNlSW50KChyWzFdK3JbMl0pLnRvTG93ZXJDYXNlKCksdiksaT1wYXJzZUludCgoaVsxXStpWzJdKS50b0xvd2VyQ2FzZSgpLHYpLHItaSk6ZTx0Py0xOjF9ZnVuY3Rpb24gbyhlLHQpe2lmKGEpe3ZhciBuO249ZSxlPXQsdD1ufXJldHVybiBzJiYoZVswXT1lWzBdLnRvTG93ZXJDYXNlKCksdFswXT10WzBdLnRvTG93ZXJDYXNlKCkpLGVbMF08dFswXT8tMToxfXZhciBhLHMsdSxjLGwscD1mdW5jdGlvbigpe2lmKG4uYXJnU3RyaW5nKXt2YXIgdD1uZXcgZS5TdHJpbmdTdHJlYW0obi5hcmdTdHJpbmcpO2lmKHQuZWF0KCIhIikmJihhPSEwKSx0LmVvbCgpKXJldHVybjtpZighdC5lYXRTcGFjZSgpKXJldHVybiJJbnZhbGlkIGFyZ3VtZW50cyI7dmFyIHI9dC5tYXRjaCgvKFtkaW51b3hdKyk/XHMqKFwvLitcLyk/XHMqLyk7aWYoIXImJiF0LmVvbCgpKXJldHVybiJJbnZhbGlkIGFyZ3VtZW50cyI7aWYoclsxXSl7cz0tMSE9clsxXS5pbmRleE9mKCJpIiksdT0tMSE9clsxXS5pbmRleE9mKCJ1Iik7dmFyIGk9LTEhPXJbMV0uaW5kZXhPZigiZCIpfHwtMSE9clsxXS5pbmRleE9mKCJuIikmJjEsbz0tMSE9clsxXS5pbmRleE9mKCJ4IikmJjEscD0tMSE9clsxXS5pbmRleE9mKCJvIikmJjE7aWYoaStvK3A+MSlyZXR1cm4iSW52YWxpZCBhcmd1bWVudHMiO2M9aSYmImRlY2ltYWwifHxvJiYiaGV4Inx8cCYmIm9jdGFsIn1yWzJdJiYobD1uZXcgUmVnRXhwKHJbMl0uc3Vic3RyKDEsclsyXS5sZW5ndGgtMikscz8iaSI6IiIpKX19KCk7aWYocClyZXR1cm4gdm9pZCB6ZSh0LHArIjogIituLmFyZ1N0cmluZyk7dmFyIGY9bi5saW5lfHx0LmZpcnN0TGluZSgpLGQ9bi5saW5lRW5kfHxuLmxpbmV8fHQubGFzdExpbmUoKTtpZihmIT1kKXt2YXIgaD1yKGYsMCksbT1yKGQsZWUodCxkKSksZz10LmdldFJhbmdlKGgsbSkuc3BsaXQoIlxuIikseT1sfHwoImRlY2ltYWwiPT1jPy8oLT8pKFtcZF0rKS86ImhleCI9PWM/LygtPykoPzoweCk/KFswLTlhLWZdKykvaToib2N0YWwiPT1jPy8oWzAtN10rKS86bnVsbCksdj0iZGVjaW1hbCI9PWM/MTA6ImhleCI9PWM/MTY6Im9jdGFsIj09Yz84Om51bGwsYj1bXSx4PVtdO2lmKGN8fGwpZm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspe3ZhciBFPWw/Z1tDXS5tYXRjaChsKTpudWxsO0UmJiIiIT1FWzBdP2IucHVzaChFKTohbCYmeS5leGVjKGdbQ10pP2IucHVzaChnW0NdKTp4LnB1c2goZ1tDXSl9ZWxzZSB4PWc7aWYoYi5zb3J0KGw/bzppKSxsKWZvcih2YXIgQz0wO0M8Yi5sZW5ndGg7QysrKWJbQ109YltDXS5pbnB1dDtlbHNlIGN8fHguc29ydChpKTtpZihnPWE/Yi5jb25jYXQoeCk6eC5jb25jYXQoYiksdSl7dmFyIEQsdz1nO2c9W107Zm9yKHZhciBDPTA7Qzx3Lmxlbmd0aDtDKyspd1tDXSE9RCYmZy5wdXNoKHdbQ10pLEQ9d1tDXX10LnJlcGxhY2VSYW5nZShnLmpvaW4oIlxuIiksaCxtKX19LGdsb2JhbDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuYXJnU3RyaW5nO2lmKCFuKXJldHVybiB2b2lkIHplKGUsIlJlZ3VsYXIgRXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIik7dmFyIHIsaT12b2lkIDAhPT10LmxpbmU/dC5saW5lOmUuZmlyc3RMaW5lKCksbz10LmxpbmVFbmR8fHQubGluZXx8ZS5sYXN0TGluZSgpLGE9TGUobikscz1uO2lmKGEubGVuZ3RoJiYocz1hWzBdLHI9YS5zbGljZSgxLGEubGVuZ3RoKS5qb2luKCIvIikpLHMpdHJ5e0hlKGUscywhMCwhMCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgemUoZSwiSW52YWxpZCByZWdleDogIitzKX1mb3IodmFyIHU9TmUoZSkuZ2V0UXVlcnkoKSxjPVtdLGw9IiIscD1pO3A8PW87cCsrKXt1LnRlc3QoZS5nZXRMaW5lKHApKSYmKGMucHVzaChwKzEpLGwrPWUuZ2V0TGluZShwKSsiPGJyPiIpfWlmKCFyKXJldHVybiB2b2lkIHplKGUsbCk7dmFyIGY9MCxkPWZ1bmN0aW9uKCl7aWYoZjxjLmxlbmd0aCl7dmFyIHQ9Y1tmXStyO0d0LnByb2Nlc3NDb21tYW5kKGUsdCx7Y2FsbGJhY2s6ZH0pfWYrK307ZCgpfSxzdWJzdGl0dXRlOmZ1bmN0aW9uKGUsdCl7aWYoIWUuZ2V0U2VhcmNoQ3Vyc29yKXRocm93IG5ldyBFcnJvcigiU2VhcmNoIGZlYXR1cmUgbm90IGF2YWlsYWJsZS4gUmVxdWlyZXMgc2VhcmNoY3Vyc29yLmpzIG9yIGFueSBvdGhlciBnZXRTZWFyY2hDdXJzb3IgaW1wbGVtZW50YXRpb24uIik7dmFyIG4saSxvLGEscz10LmFyZ1N0cmluZyx1PXM/TWUocyxzWzBdKTpbXSxjPSIiLGw9ITEscD0hMTtpZih1Lmxlbmd0aCluPXVbMF0sYz11WzFdLG4mJiIkIj09PW5bbi5sZW5ndGgtMV0mJihuPW4uc2xpY2UoMCxuLmxlbmd0aC0xKSsiXFxuIixjPWM/YysiXG4iOiJcbiIpLHZvaWQgMCE9PWMmJihjPWsoInBjcmUiKT8kZShjKTpCZShjKSxUdC5sYXN0U3Vic3RpdHV0ZVJlcGxhY2VQYXJ0PWMpLGk9dVsyXT91WzJdLnNwbGl0KCIgIik6W107ZWxzZSBpZihzJiZzLmxlbmd0aClyZXR1cm4gdm9pZCB6ZShlLCJTdWJzdGl0dXRpb25zIHNob3VsZCBiZSBvZiB0aGUgZm9ybSA6cy9wYXR0ZXJuL3JlcGxhY2UvIik7aWYoaSYmKG89aVswXSxhPXBhcnNlSW50KGlbMV0pLG8mJigtMSE9by5pbmRleE9mKCJjIikmJihsPSEwLG8ucmVwbGFjZSgiYyIsIiIpKSwtMSE9by5pbmRleE9mKCJnIikmJihwPSEwLG8ucmVwbGFjZSgiZyIsIiIpKSxuPW4ucmVwbGFjZSgvXC8vZywiXFwvIikrIi8iK28pKSxuKXRyeXtIZShlLG4sITAsITApfWNhdGNoKHQpe3JldHVybiB2b2lkIHplKGUsIkludmFsaWQgcmVnZXg6ICIrbil9aWYodm9pZCAwPT09KGM9Y3x8VHQubGFzdFN1YnN0aXR1dGVSZXBsYWNlUGFydCkpcmV0dXJuIHZvaWQgemUoZSwiTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iKTt2YXIgZj1OZShlKSxkPWYuZ2V0UXVlcnkoKSxoPXZvaWQgMCE9PXQubGluZT90LmxpbmU6ZS5nZXRDdXJzb3IoKS5saW5lLG09dC5saW5lRW5kfHxoO2g9PWUuZmlyc3RMaW5lKCkmJm09PWUubGFzdExpbmUoKSYmKG09MS8wKSxhJiYoaD1tLG09aCthLTEpO3ZhciBnPSQoZSxyKGgsMCkpLHk9ZS5nZXRTZWFyY2hDdXJzb3IoZCxnKTtldChlLGwscCxoLG0seSxkLGMsdC5jYWxsYmFjayl9LHJlZG86ZS5jb21tYW5kcy5yZWRvLHVuZG86ZS5jb21tYW5kcy51bmRvLHdyaXRlOmZ1bmN0aW9uKHQpe2UuY29tbWFuZHMuc2F2ZT9lLmNvbW1hbmRzLnNhdmUodCk6dC5zYXZlJiZ0LnNhdmUoKX0sbm9obHNlYXJjaDpmdW5jdGlvbihlKXtKZShlKX0seWFuazpmdW5jdGlvbihlKXt2YXIgdD1RKGUuZ2V0Q3Vyc29yKCkpLG49dC5saW5lLHI9ZS5nZXRMaW5lKG4pO1R0LnJlZ2lzdGVyQ29udHJvbGxlci5wdXNoVGV4dCgiMCIsInlhbmsiLHIsITAsITApfSxkZWxtYXJrczpmdW5jdGlvbih0LG4pe2lmKCFuLmFyZ1N0cmluZ3x8IXRlKG4uYXJnU3RyaW5nKSlyZXR1cm4gdm9pZCB6ZSh0LCJBcmd1bWVudCByZXF1aXJlZCIpO2Zvcih2YXIgcj10LnN0YXRlLnZpbSxpPW5ldyBlLlN0cmluZ1N0cmVhbSh0ZShuLmFyZ1N0cmluZykpOyFpLmVvbCgpOyl7aS5lYXRTcGFjZSgpO3ZhciBvPWkucG9zO2lmKCFpLm1hdGNoKC9bYS16QS1aXS8sITEpKXJldHVybiB2b2lkIHplKHQsIkludmFsaWQgYXJndW1lbnQ6ICIrbi5hcmdTdHJpbmcuc3Vic3RyaW5nKG8pKTt2YXIgYT1pLm5leHQoKTtpZihpLm1hdGNoKCItIiwhMCkpe2lmKCFpLm1hdGNoKC9bYS16QS1aXS8sITEpKXJldHVybiB2b2lkIHplKHQsIkludmFsaWQgYXJndW1lbnQ6ICIrbi5hcmdTdHJpbmcuc3Vic3RyaW5nKG8pKTt2YXIgcz1hLHU9aS5uZXh0KCk7aWYoISh5KHMpJiZ5KHUpfHx4KHMpJiZ4KHUpKSlyZXR1cm4gdm9pZCB6ZSh0LCJJbnZhbGlkIGFyZ3VtZW50OiAiK3MrIi0iKTt2YXIgYz1zLmNoYXJDb2RlQXQoMCksbD11LmNoYXJDb2RlQXQoMCk7aWYoYz49bClyZXR1cm4gdm9pZCB6ZSh0LCJJbnZhbGlkIGFyZ3VtZW50OiAiK24uYXJnU3RyaW5nLnN1YnN0cmluZyhvKSk7Zm9yKHZhciBwPTA7cDw9bC1jO3ArKyl7dmFyIGY9U3RyaW5nLmZyb21DaGFyQ29kZShjK3ApO2RlbGV0ZSByLm1hcmtzW2ZdfX1lbHNlIGRlbGV0ZSByLm1hcmtzW2FdfX19LEd0PW5ldyBVdDtyZXR1cm4gZS5rZXlNYXAudmltPXthdHRhY2g6cyxkZXRhY2g6YSxjYWxsOmZ9LHcoImluc2VydE1vZGVFc2NLZXlzVGltZW91dCIsMjAwLCJudW1iZXIiKSxlLmtleU1hcFsidmltLWluc2VydCJdPXtmYWxsdGhyb3VnaDpbImRlZmF1bHQiXSxhdHRhY2g6cyxkZXRhY2g6YSxjYWxsOmZ9LGUua2V5TWFwWyJ2aW0tcmVwbGFjZSJdPXtCYWNrc3BhY2U6ImdvQ2hhckxlZnQiLGZhbGx0aHJvdWdoOlsidmltLWluc2VydCJdLGF0dGFjaDpzLGRldGFjaDphLGNhbGw6Zn0sVCgpLEZ0fSgpfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyKSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ociksbz1uKDUwKTtpLmRlZmF1bHQucmVnaXN0ZXJIZWxwZXIoImhpbnQiLCJncmFwaHFsIixmdW5jdGlvbihlLHQpe3ZhciBuPXQuc2NoZW1hO2lmKG4pe3ZhciByPWUuZ2V0Q3Vyc29yKCksYT1lLmdldFRva2VuQXQocikscz0oMCxvLmdldEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zKShuLGUuZ2V0VmFsdWUoKSxyLGEpLHU9bnVsbCE9PWEudHlwZSYmLyJ8XHcvLnRlc3QoYS5zdHJpbmdbMF0pP2Euc3RhcnQ6YS5lbmQsYz17bGlzdDpzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dGV4dDplLmxhYmVsLHR5cGU6U3RyaW5nKGUuZGV0YWlsKSxkZXNjcmlwdGlvbjplLmRvY3VtZW50YXRpb24saXNEZXByZWNhdGVkOmUuaXNEZXByZWNhdGVkLGRlcHJlY2F0aW9uUmVhc29uOmUuZGVwcmVjYXRpb25SZWFzb259fSksZnJvbTp7bGluZTpyLmxpbmUsY29sdW1uOnV9LHRvOntsaW5lOnIubGluZSxjb2x1bW46YS5lbmR9fTtyZXR1cm4gYyYmYy5saXN0JiZjLmxpc3QubGVuZ3RoPjAmJihjLmZyb209aS5kZWZhdWx0LlBvcyhjLmZyb20ubGluZSxjLmZyb20uY29sdW1uKSxjLnRvPWkuZGVmYXVsdC5Qb3MoYy50by5saW5lLGMudG8uY29sdW1uKSxpLmRlZmF1bHQuc2lnbmFsKGUsImhhc0NvbXBsZXRpb24iLGUsYyxhKSksY319KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10aGlzO3IodGhpcyxlKSx0aGlzLmdldFN0YXJ0T2ZUb2tlbj1mdW5jdGlvbigpe3JldHVybiBuLl9zdGFydH0sdGhpcy5nZXRDdXJyZW50UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbi5fcG9zfSx0aGlzLmVvbD1mdW5jdGlvbigpe3JldHVybiBuLl9zb3VyY2VUZXh0Lmxlbmd0aD09PW4uX3Bvc30sdGhpcy5zb2w9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PW4uX3Bvc30sdGhpcy5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX3NvdXJjZVRleHQuY2hhckF0KG4uX3Bvcyk/bi5fc291cmNlVGV4dC5jaGFyQXQobi5fcG9zKTpudWxsfSx0aGlzLm5leHQ9ZnVuY3Rpb24oKXt2YXIgZT1uLl9zb3VyY2VUZXh0LmNoYXJBdChuLl9wb3MpO3JldHVybiBuLl9wb3MrKyxlfSx0aGlzLmVhdD1mdW5jdGlvbihlKXtpZihuLl90ZXN0TmV4dENoYXJhY3RlcihlKSlyZXR1cm4gbi5fc3RhcnQ9bi5fcG9zLG4uX3BvcysrLG4uX3NvdXJjZVRleHQuY2hhckF0KG4uX3Bvcy0xKX0sdGhpcy5lYXRXaGlsZT1mdW5jdGlvbihlKXt2YXIgdD1uLl90ZXN0TmV4dENoYXJhY3RlcihlKSxyPSExO2Zvcih0JiYocj10LG4uX3N0YXJ0PW4uX3Bvcyk7dDspbi5fcG9zKyssdD1uLl90ZXN0TmV4dENoYXJhY3RlcihlKSxyPSEwO3JldHVybiByfSx0aGlzLmVhdFNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZWF0V2hpbGUoL1tcc1x1MDBhMF0vKX0sdGhpcy5za2lwVG9FbmQ9ZnVuY3Rpb24oKXtuLl9wb3M9bi5fc291cmNlVGV4dC5sZW5ndGh9LHRoaXMuc2tpcFRvPWZ1bmN0aW9uKGUpe24uX3Bvcz1lfSx0aGlzLm1hdGNoPWZ1bmN0aW9uKGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0scj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGk9bnVsbCxvPW51bGw7aWYoInN0cmluZyI9PT10eXBlb2YgZSl7bz1uZXcgUmVnRXhwKGUscj8iaSI6ImciKS50ZXN0KG4uX3NvdXJjZVRleHQuc3Vic3RyKG4uX3BvcyxlLmxlbmd0aCkpLGk9ZX1lbHNlIGUgaW5zdGFuY2VvZiBSZWdFeHAmJihvPW4uX3NvdXJjZVRleHQuc2xpY2Uobi5fcG9zKS5tYXRjaChlKSxpPW8mJm9bMF0pO3JldHVybiEobnVsbD09b3x8ISgic3RyaW5nIj09PXR5cGVvZiBlfHxvIGluc3RhbmNlb2YgQXJyYXkmJm4uX3NvdXJjZVRleHQuc3RhcnRzV2l0aChvWzBdLG4uX3BvcykpKSYmKHQmJihuLl9zdGFydD1uLl9wb3MsaSYmaS5sZW5ndGgmJihuLl9wb3MrPWkubGVuZ3RoKSksbyl9LHRoaXMuYmFja1VwPWZ1bmN0aW9uKGUpe24uX3Bvcy09ZX0sdGhpcy5jb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gbi5fcG9zfSx0aGlzLmluZGVudGF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9bi5fc291cmNlVGV4dC5tYXRjaCgvXHMqLyksdD0wO2lmKGUmJjA9PT1lLmxlbmd0aClmb3IodmFyIHI9ZVswXSxpPTA7ci5sZW5ndGg+aTspOT09PXIuY2hhckNvZGVBdChpKT90Kz0yOnQrKyxpKys7cmV0dXJuIHR9LHRoaXMuY3VycmVudD1mdW5jdGlvbigpe3JldHVybiBuLl9zb3VyY2VUZXh0LnNsaWNlKG4uX3N0YXJ0LG4uX3Bvcyl9LHRoaXMuX3N0YXJ0PTAsdGhpcy5fcG9zPTAsdGhpcy5fc291cmNlVGV4dD10fXJldHVybiBlLnByb3RvdHlwZS5fdGVzdE5leHRDaGFyYWN0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc291cmNlVGV4dC5jaGFyQXQodGhpcy5fcG9zKTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlP3Q9PT1lOmUgaW5zdGFuY2VvZiBSZWdFeHA/ZS50ZXN0KHQpOmUodCl9LGV9KCk7dC5kZWZhdWx0PWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZWF0V2hpdGVzcGFjZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5lYXRXaGlsZShkLmlzSWdub3JlZCl9LGxleFJ1bGVzOmQuTGV4UnVsZXMscGFyc2VSdWxlczpkLlBhcnNlUnVsZXMsZWRpdG9yQ29uZmlnOnt9fTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3ZhciB0PXtsZXZlbDowLHN0ZXA6MCxuYW1lOm51bGwsa2luZDpudWxsLHR5cGU6bnVsbCxydWxlOm51bGwsbmVlZHNTZXBlcmF0b3I6ITEscHJldlN0YXRlOm51bGx9O3JldHVybiBhKGUucGFyc2VSdWxlcyx0LCJEb2N1bWVudCIpLHR9LHRva2VuOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGkodCxuLGUpfX19ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9bi5sZXhSdWxlcyxpPW4ucGFyc2VSdWxlcyxjPW4uZWF0V2hpdGVzcGFjZSxmPW4uZWRpdG9yQ29uZmlnO2lmKHQucnVsZSYmMD09PXQucnVsZS5sZW5ndGg/cyh0KTp0Lm5lZWRzQWR2YW5jZSYmKHQubmVlZHNBZHZhbmNlPSExLHUodCwhMCkpLGUuc29sKCkpe3ZhciBkPWYmJmYudGFiU2l6ZXx8Mjt0LmluZGVudExldmVsPU1hdGguZmxvb3IoZS5pbmRlbnRhdGlvbigpL2QpfWlmKGMoZSkpcmV0dXJuIndzIjt2YXIgbT1wKHIsZSk7aWYoIW0pcmV0dXJuIGUubWF0Y2goL1xTKy8pLGEoaCx0LCJJbnZhbGlkIiksImludmFsaWRjaGFyIjtpZigiQ29tbWVudCI9PT1tLmtpbmQpcmV0dXJuIGEoaCx0LCJDb21tZW50IiksImNvbW1lbnQiO3ZhciBnPW8oe30sdCk7aWYoIlB1bmN0dWF0aW9uIj09PW0ua2luZClpZigvXlt7KFtdLy50ZXN0KG0udmFsdWUpKXQubGV2ZWxzPSh0LmxldmVsc3x8W10pLmNvbmNhdCh0LmluZGVudExldmVsKzEpO2Vsc2UgaWYoL15bfSlcXV0vLnRlc3QobS52YWx1ZSkpe3ZhciB5PXQubGV2ZWxzPSh0LmxldmVsc3x8W10pLnNsaWNlKDAsLTEpO3QuaW5kZW50TGV2ZWwmJnkubGVuZ3RoPjAmJnlbeS5sZW5ndGgtMV08dC5pbmRlbnRMZXZlbCYmKHQuaW5kZW50TGV2ZWw9eVt5Lmxlbmd0aC0xXSl9Zm9yKDt0LnJ1bGU7KXt2YXIgdj0iZnVuY3Rpb24iPT09dHlwZW9mIHQucnVsZT8wPT09dC5zdGVwP3QucnVsZShtLGUpOm51bGw6dC5ydWxlW3Quc3RlcF07aWYodC5uZWVkc1NlcGVyYXRvciYmKHY9diYmdi5zZXBhcmF0b3IpLHYpe2lmKHYub2ZSdWxlJiYodj12Lm9mUnVsZSksInN0cmluZyI9PT10eXBlb2Ygdil7YShpLHQsdik7Y29udGludWV9aWYodi5tYXRjaCYmdi5tYXRjaChtKSlyZXR1cm4gdi51cGRhdGUmJnYudXBkYXRlKHQsbSksIlB1bmN0dWF0aW9uIj09PW0ua2luZD91KHQsITApOnQubmVlZHNBZHZhbmNlPSEwLHYuc3R5bGV9bCh0KX1yZXR1cm4gbyh0LGcpLGEoaCx0LCJJbnZhbGlkIiksImludmFsaWRjaGFyIn1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKHQpLHI9MDtyPG4ubGVuZ3RoO3IrKyllW25bcl1dPXRbbltyXV07cmV0dXJuIGV9ZnVuY3Rpb24gYShlLHQsbil7aWYoIWVbbl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBydWxlOiAiK24pO3QucHJldlN0YXRlPWYoe30sdCksdC5raW5kPW4sdC5uYW1lPW51bGwsdC50eXBlPW51bGwsdC5ydWxlPWVbbl0sdC5zdGVwPTAsdC5uZWVkc1NlcGVyYXRvcj0hMX1mdW5jdGlvbiBzKGUpe2UucHJldlN0YXRlJiYoZS5raW5kPWUucHJldlN0YXRlLmtpbmQsZS5uYW1lPWUucHJldlN0YXRlLm5hbWUsZS50eXBlPWUucHJldlN0YXRlLnR5cGUsZS5ydWxlPWUucHJldlN0YXRlLnJ1bGUsZS5zdGVwPWUucHJldlN0YXRlLnN0ZXAsZS5uZWVkc1NlcGVyYXRvcj1lLnByZXZTdGF0ZS5uZWVkc1NlcGVyYXRvcixlLnByZXZTdGF0ZT1lLnByZXZTdGF0ZS5wcmV2U3RhdGUpfWZ1bmN0aW9uIHUoZSx0KXtpZihjKGUpKXtpZihlLnJ1bGUmJmUucnVsZVtlLnN0ZXBdLnNlcGFyYXRvcil7dmFyIG49ZS5ydWxlW2Uuc3RlcF0uc2VwYXJhdG9yO2lmKGUubmVlZHNTZXBlcmF0b3I9IWUubmVlZHNTZXBlcmF0b3IsIWUubmVlZHNTZXBlcmF0b3ImJm4ub2ZSdWxlKXJldHVybn1pZih0KXJldHVybn1mb3IoZS5uZWVkc1NlcGVyYXRvcj0hMSxlLnN0ZXArKztlLnJ1bGUmJiEoQXJyYXkuaXNBcnJheShlLnJ1bGUpJiZlLnN0ZXA8ZS5ydWxlLmxlbmd0aCk7KXMoZSksZS5ydWxlJiYoYyhlKT9lLnJ1bGUmJmUucnVsZVtlLnN0ZXBdLnNlcGFyYXRvciYmKGUubmVlZHNTZXBlcmF0b3I9IWUubmVlZHNTZXBlcmF0b3IpOihlLm5lZWRzU2VwZXJhdG9yPSExLGUuc3RlcCsrKSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlLnJ1bGUpJiYic3RyaW5nIiE9PXR5cGVvZiBlLnJ1bGVbZS5zdGVwXSYmZS5ydWxlW2Uuc3RlcF0uaXNMaXN0fWZ1bmN0aW9uIGwoZSl7Zm9yKDtlLnJ1bGUmJighQXJyYXkuaXNBcnJheShlLnJ1bGUpfHwhZS5ydWxlW2Uuc3RlcF0ub2ZSdWxlKTspcyhlKTtlLnJ1bGUmJnUoZSwhMSl9ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPXQubWF0Y2goZVtuW3JdXSk7aWYoaSYmaSBpbnN0YW5jZW9mIEFycmF5KXJldHVybntraW5kOm5bcl0sdmFsdWU6aVswXX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt0LmRlZmF1bHQ9cjt2YXIgZD1uKDI3NSksaD17SW52YWxpZDpbXSxDb21tZW50OltdfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1pKGUsbiksYT12b2lkIDA7cmV0dXJuKDAsby52aXNpdCkodCx7ZW50ZXI6ZnVuY3Rpb24oZSl7aWYoISgiTmFtZSIhPT1lLmtpbmQmJmUubG9jJiZlLmxvYy5zdGFydDw9ciYmcjw9ZS5sb2MuZW5kKSlyZXR1cm4hMTthPWV9LGxlYXZlOmZ1bmN0aW9uKGUpe2lmKGUubG9jJiZlLmxvYy5zdGFydDw9ciYmcjw9ZS5sb2MuZW5kKXJldHVybiExfX0pLGF9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPWUuc3BsaXQoIlxuIikuc2xpY2UoMCx0LmxpbmUpO3JldHVybiB0LmNoYXJhY3RlcituLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGgrMX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9LDApfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEFTVE5vZGVBdFBvc2l0aW9uPXIsdC5wb2ludFRvT2Zmc2V0PWk7dmFyIG89KG4oMjc3KSxuKDcpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxyLG8pe3ZhciBhPW4oMTE3KSxzPWEuTm9VbnVzZWRGcmFnbWVudHMsdT1bc107aWYobyl7dmFyIGM9bigxMTYpLGw9Yy5Lbm93bkZyYWdtZW50TmFtZXM7dS5wdXNoKGwpfXZhciBwPWkuc3BlY2lmaWVkUnVsZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiF1LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSl9KSxmPW5ldyBpLlR5cGVJbmZvKGUpO3ImJkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHAscik7dmFyIGQ9KDAsaS52YWxpZGF0ZSkoZSx0LHAsZik7cmV0dXJuIGQubGVuZ3RoPjA/ZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1lLm1lc3NhZ2UuaW5kZXhPZigiVW5rbm93biBkaXJlY3RpdmUiKXx8IShlLm5vZGVzJiZlLm5vZGVzWzBdJiZlLm5vZGVzWzBdLm5hbWUmJiJhcmd1bWVudHMiPT09ZS5ub2Rlc1swXS5uYW1lLnZhbHVlfHxlLm5vZGVzJiZlLm5vZGVzWzBdJiZlLm5vZGVzWzBdLm5hbWUmJmUubm9kZXNbMF0ubmFtZS52YWx1ZSYmImFyZ3VtZW50RGVmaW5pdGlvbnMiPT09ZS5ub2Rlc1swXS5uYW1lLnZhbHVlKX0pOltdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnZhbGlkYXRlV2l0aEN1c3RvbVJ1bGVzPXI7dmFyIGk9big3KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uLnArInN0YXRpYy9tZWRpYS9HcmFwaFFMTGFuZ3VhZ2VTZXJ2aWNlLmpzLmZhMDcxMzhkLmZsb3cifSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsic3RhdGljL21lZGlhL2F1dG9jb21wbGV0ZVV0aWxzLmpzLjRjZTdiYTE5LmZsb3cifSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsic3RhdGljL21lZGlhL2dldEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zLmpzLjVmNzM1YzdiLmZsb3cifSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsic3RhdGljL21lZGlhL2dldERlZmluaXRpb24uanMuMGM0ODY2OGUuZmxvdyJ9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJzdGF0aWMvbWVkaWEvZ2V0RGlhZ25vc3RpY3MuanMuODg5YzBiMjcuZmxvdyJ9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJzdGF0aWMvbWVkaWEvZ2V0T3V0bGluZS5qcy40NThhMzUxOC5mbG93In0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uLnArInN0YXRpYy9tZWRpYS9pbmRleC5qcy42NDEyMzBmNS5mbG93In0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxvPW4oNTApLGE9WyJlcnJvciIsIndhcm5pbmciLCJpbmZvcm1hdGlvbiIsImhpbnQiXSxzPXsiR3JhcGhRTDogVmFsaWRhdGlvbiI6InZhbGlkYXRpb24iLCJHcmFwaFFMOiBEZXByZWNhdGlvbiI6ImRlcHJlY2F0aW9uIiwiR3JhcGhRTDogU3ludGF4Ijoic3ludGF4In07aS5kZWZhdWx0LnJlZ2lzdGVySGVscGVyKCJsaW50IiwiZ3JhcGhxbCIsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNjaGVtYTtyZXR1cm4oMCxvLmdldERpYWdub3N0aWNzKShlLG4pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bWVzc2FnZTplLm1lc3NhZ2Usc2V2ZXJpdHk6YVtlLnNldmVyaXR5LTFdLHR5cGU6c1tlLnNvdXJjZV0sZnJvbTppLmRlZmF1bHQuUG9zKGUucmFuZ2Uuc3RhcnQubGluZSxlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlciksdG86aS5kZWZhdWx0LlBvcyhlLnJhbmdlLmVuZC5saW5lLGUucmFuZ2UuZW5kLmNoYXJhY3Rlcil9fSl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCxuKXtvKGUsdCxuKSx1KGUsdCxuLHQudHlwZSl9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9dC5maWVsZERlZi5uYW1lOyJfXyIhPT1yLnNsaWNlKDAsMikmJihsKGUsdCxuLHQucGFyZW50VHlwZSksZChlLCIuIikpLGQoZSxyLCJmaWVsZC1uYW1lIixuLCgwLGIuZ2V0RmllbGRSZWZlcmVuY2UpKHQpKX1mdW5jdGlvbiBhKGUsdCxuKXtkKGUsIkAiK3QuZGlyZWN0aXZlRGVmLm5hbWUsImRpcmVjdGl2ZS1uYW1lIixuLCgwLGIuZ2V0RGlyZWN0aXZlUmVmZXJlbmNlKSh0KSl9ZnVuY3Rpb24gcyhlLHQsbil7dC5kaXJlY3RpdmVEZWY/YShlLHQsbik6dC5maWVsZERlZiYmbyhlLHQsbik7dmFyIHI9dC5hcmdEZWYubmFtZTtkKGUsIigiKSxkKGUsciwiYXJnLW5hbWUiLG4sKDAsYi5nZXRBcmd1bWVudFJlZmVyZW5jZSkodCkpLHUoZSx0LG4sdC5pbnB1dFR5cGUpLGQoZSwiKSIpfWZ1bmN0aW9uIHUoZSx0LG4scil7ZChlLCI6ICIpLGwoZSx0LG4scil9ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHI9dC5lbnVtVmFsdWUubmFtZTtsKGUsdCxuLHQuaW5wdXRUeXBlKSxkKGUsIi4iKSxkKGUsciwiZW51bS12YWx1ZSIsbiwoMCxiLmdldEVudW1WYWx1ZVJlZmVyZW5jZSkodCkpfWZ1bmN0aW9uIGwoZSx0LG4scil7ciBpbnN0YW5jZW9mIGguR3JhcGhRTE5vbk51bGw/KGwoZSx0LG4sci5vZlR5cGUpLGQoZSwiISIpKTpyIGluc3RhbmNlb2YgaC5HcmFwaFFMTGlzdD8oZChlLCJbIiksbChlLHQsbixyLm9mVHlwZSksZChlLCJdIikpOmQoZSxyLm5hbWUsInR5cGUtbmFtZSIsbiwoMCxiLmdldFR5cGVSZWZlcmVuY2UpKHQscikpfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByPW4uZGVzY3JpcHRpb247aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc05hbWU9ImluZm8tZGVzY3JpcHRpb24iLHQucmVuZGVyRGVzY3JpcHRpb24/aS5pbm5lckhUTUw9dC5yZW5kZXJEZXNjcmlwdGlvbihyKTppLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHIpKSxlLmFwcGVuZENoaWxkKGkpfWYoZSx0LG4pfWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciByPW4uZGVwcmVjYXRpb25SZWFzb247aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc05hbWU9ImluZm8tZGVwcmVjYXRpb24iLHQucmVuZGVyRGVzY3JpcHRpb24/aS5pbm5lckhUTUw9dC5yZW5kZXJEZXNjcmlwdGlvbihyKTppLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHIpKTt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7by5jbGFzc05hbWU9ImluZm8tZGVwcmVjYXRpb24tbGFiZWwiLG8uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkRlcHJlY2F0ZWQ6ICIpKSxpLmluc2VydEJlZm9yZShvLGkuZmlyc3RDaGlsZCksZS5hcHBlbmRDaGlsZChpKX19ZnVuY3Rpb24gZChlLHQsbixyLGkpe2lmKG4pe3ZhciBvPXIub25DbGljayxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobz8iYSI6InNwYW4iKTtvJiYoYS5ocmVmPSJqYXZhc2NyaXB0OnZvaWQgMCIsYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7byhpLGUpfSkpLGEuY2xhc3NOYW1lPW4sYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSksZS5hcHBlbmRDaGlsZChhKX1lbHNlIGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCkpfXZhciBoPW4oNyksbT1uKDIpLGc9cihtKSx5PW4oMjgwKSx2PXIoeSksYj1uKDI4Mik7big2MDkpLGcuZGVmYXVsdC5yZWdpc3RlckhlbHBlcigiaW5mbyIsImdyYXBocWwiLGZ1bmN0aW9uKGUsdCl7aWYodC5zY2hlbWEmJmUuc3RhdGUpe3ZhciBuPWUuc3RhdGUscj1uLmtpbmQsbz1uLnN0ZXAsdT0oMCx2LmRlZmF1bHQpKHQuc2NoZW1hLGUuc3RhdGUpO2lmKCJGaWVsZCI9PT1yJiYwPT09byYmdS5maWVsZERlZnx8IkFsaWFzZWRGaWVsZCI9PT1yJiYyPT09byYmdS5maWVsZERlZil7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkoZix1LHQpLHAoZix0LHUuZmllbGREZWYpLGZ9aWYoIkRpcmVjdGl2ZSI9PT1yJiYxPT09byYmdS5kaXJlY3RpdmVEZWYpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhKGQsdSx0KSxwKGQsdCx1LmRpcmVjdGl2ZURlZiksZH1pZigiQXJndW1lbnQiPT09ciYmMD09PW8mJnUuYXJnRGVmKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gcyhoLHUsdCkscChoLHQsdS5hcmdEZWYpLGh9aWYoIkVudW1WYWx1ZSI9PT1yJiZ1LmVudW1WYWx1ZSYmdS5lbnVtVmFsdWUuZGVzY3JpcHRpb24pe3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBjKG0sdSx0KSxwKG0sdCx1LmVudW1WYWx1ZSksbX1pZigiTmFtZWRUeXBlIj09PXImJnUudHlwZSYmdS50eXBlLmRlc2NyaXB0aW9uKXt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbChnLHUsdCx1LnR5cGUpLHAoZyx0LHUudHlwZSksZ319fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57b3B0aW9uczplIGluc3RhbmNlb2YgRnVuY3Rpb24/e3JlbmRlcjplfTohMD09PWU/e306ZX19ZnVuY3Rpb24gaShlKXt2YXIgdD1lLnN0YXRlLmluZm8ub3B0aW9ucztyZXR1cm4gdCYmdC5ob3ZlclRpbWV8fDUwMH1mdW5jdGlvbiBvKGUsdCl7dmFyIG49ZS5zdGF0ZS5pbmZvLHI9dC50YXJnZXR8fHQuc3JjRWxlbWVudDtpZigiU1BBTiI9PT1yLm5vZGVOYW1lJiZ2b2lkIDA9PT1uLmhvdmVyVGltZW91dCl7dmFyIG89ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWkoZSk7bi5ob3ZlclRpbWVvdXQ9c2V0VGltZW91dChwLHMpO3ZhciB1PWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4uaG92ZXJUaW1lb3V0KSxuLmhvdmVyVGltZW91dD1zZXRUaW1lb3V0KHAscyl9LGw9ZnVuY3Rpb24gdCgpe2MuZGVmYXVsdC5vZmYoZG9jdW1lbnQsIm1vdXNlbW92ZSIsdSksYy5kZWZhdWx0Lm9mZihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3V0Iix0KSxjbGVhclRpbWVvdXQobi5ob3ZlclRpbWVvdXQpLG4uaG92ZXJUaW1lb3V0PXZvaWQgMH0scD1mdW5jdGlvbigpe2MuZGVmYXVsdC5vZmYoZG9jdW1lbnQsIm1vdXNlbW92ZSIsdSksYy5kZWZhdWx0Lm9mZihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3V0IixsKSxuLmhvdmVyVGltZW91dD12b2lkIDAsYShlLG8pfTtjLmRlZmF1bHQub24oZG9jdW1lbnQsIm1vdXNlbW92ZSIsdSksYy5kZWZhdWx0Lm9uKGUuZ2V0V3JhcHBlckVsZW1lbnQoKSwibW91c2VvdXQiLGwpfX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49ZS5jb29yZHNDaGFyKHtsZWZ0Oih0LmxlZnQrdC5yaWdodCkvMix0b3A6KHQudG9wK3QuYm90dG9tKS8yfSkscj1lLnN0YXRlLmluZm8saT1yLm9wdGlvbnMsbz1pLnJlbmRlcnx8ZS5nZXRIZWxwZXIobiwiaW5mbyIpO2lmKG8pe3ZhciBhPWUuZ2V0VG9rZW5BdChuLCEwKTtpZihhKXt2YXIgdT1vKGEsaSxlLG4pO3UmJnMoZSx0LHUpfX19ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9IkNvZGVNaXJyb3ItaW5mbyIsci5hcHBlbmRDaGlsZChuKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpO3ZhciBpPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLmN1cnJlbnRTdHlsZXx8d2luZG93LmdldENvbXB1dGVkU3R5bGUociksYT1pLnJpZ2h0LWkubGVmdCtwYXJzZUZsb2F0KG8ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChvLm1hcmdpblJpZ2h0KSxzPWkuYm90dG9tLWkudG9wK3BhcnNlRmxvYXQoby5tYXJnaW5Ub3ApK3BhcnNlRmxvYXQoby5tYXJnaW5Cb3R0b20pLHU9dC5ib3R0b207cz53aW5kb3cuaW5uZXJIZWlnaHQtdC5ib3R0b20tMTUmJnQudG9wPndpbmRvdy5pbm5lckhlaWdodC10LmJvdHRvbSYmKHU9dC50b3AtcyksdTwwJiYodT10LmJvdHRvbSk7dmFyIGw9TWF0aC5tYXgoMCx3aW5kb3cuaW5uZXJXaWR0aC1hLTE1KTtsPnQubGVmdCYmKGw9dC5sZWZ0KSxyLnN0eWxlLm9wYWNpdHk9MSxyLnN0eWxlLnRvcD11KyJweCIsci5zdHlsZS5sZWZ0PWwrInB4Ijt2YXIgcD12b2lkIDAsZj1mdW5jdGlvbigpe2NsZWFyVGltZW91dChwKX0sZD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChwKSxwPXNldFRpbWVvdXQoaCwyMDApfSxoPWZ1bmN0aW9uKCl7Yy5kZWZhdWx0Lm9mZihyLCJtb3VzZW92ZXIiLGYpLGMuZGVmYXVsdC5vZmYociwibW91c2VvdXQiLGQpLGMuZGVmYXVsdC5vZmYoZS5nZXRXcmFwcGVyRWxlbWVudCgpLCJtb3VzZW91dCIsZCksci5zdHlsZS5vcGFjaXR5PyhyLnN0eWxlLm9wYWNpdHk9MCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5wYXJlbnROb2RlJiZyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocil9LDYwMCkpOnIucGFyZW50Tm9kZSYmci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpfTtjLmRlZmF1bHQub24ociwibW91c2VvdmVyIixmKSxjLmRlZmF1bHQub24ociwibW91c2VvdXQiLGQpLGMuZGVmYXVsdC5vbihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3V0IixkKX12YXIgdT1uKDIpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSh1KTtjLmRlZmF1bHQuZGVmaW5lT3B0aW9uKCJpbmZvIiwhMSxmdW5jdGlvbihlLHQsbil7aWYobiYmbiE9PWMuZGVmYXVsdC5Jbml0KXt2YXIgaT1lLnN0YXRlLmluZm8ub25Nb3VzZU92ZXI7Yy5kZWZhdWx0Lm9mZihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3ZlciIsaSksY2xlYXJUaW1lb3V0KGUuc3RhdGUuaW5mby5ob3ZlclRpbWVvdXQpLGRlbGV0ZSBlLnN0YXRlLmluZm99aWYodCl7dmFyIGE9ZS5zdGF0ZS5pbmZvPXIodCk7YS5vbk1vdXNlT3Zlcj1vLmJpbmQobnVsbCxlKSxjLmRlZmF1bHQub24oZS5nZXRXcmFwcGVyRWxlbWVudCgpLCJtb3VzZW92ZXIiLGEub25Nb3VzZU92ZXIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBpPW4oMiksbz1yKGkpLGE9bigyODApLHM9cihhKSx1PW4oMjgyKTtuKDYxMSksby5kZWZhdWx0LnJlZ2lzdGVySGVscGVyKCJqdW1wIiwiZ3JhcGhxbCIsZnVuY3Rpb24oZSx0KXtpZih0LnNjaGVtYSYmdC5vbkNsaWNrJiZlLnN0YXRlKXt2YXIgbj1lLnN0YXRlLHI9bi5raW5kLGk9bi5zdGVwLG89KDAscy5kZWZhdWx0KSh0LnNjaGVtYSxuKTtyZXR1cm4iRmllbGQiPT09ciYmMD09PWkmJm8uZmllbGREZWZ8fCJBbGlhc2VkRmllbGQiPT09ciYmMj09PWkmJm8uZmllbGREZWY/KDAsdS5nZXRGaWVsZFJlZmVyZW5jZSkobyk6IkRpcmVjdGl2ZSI9PT1yJiYxPT09aSYmby5kaXJlY3RpdmVEZWY/KDAsdS5nZXREaXJlY3RpdmVSZWZlcmVuY2UpKG8pOiJBcmd1bWVudCI9PT1yJiYwPT09aSYmby5hcmdEZWY/KDAsdS5nZXRBcmd1bWVudFJlZmVyZW5jZSkobyk6IkVudW1WYWx1ZSI9PT1yJiZvLmVudW1WYWx1ZT8oMCx1LmdldEVudW1WYWx1ZVJlZmVyZW5jZSkobyk6Ik5hbWVkVHlwZSI9PT1yJiZvLnR5cGU/KDAsdS5nZXRUeXBlUmVmZXJlbmNlKShvKTp2b2lkIDB9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQudGFyZ2V0fHx0LnNyY0VsZW1lbnQ7aWYoIlNQQU4iPT09bi5ub2RlTmFtZSl7dmFyIHI9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXtsZWZ0OihyLmxlZnQrci5yaWdodCkvMix0b3A6KHIudG9wK3IuYm90dG9tKS8yfTtlLnN0YXRlLmp1bXAuY3Vyc29yPWksZS5zdGF0ZS5qdW1wLmlzSG9sZGluZ01vZGlmaWVyJiZzKGUpfX1mdW5jdGlvbiBpKGUpe2lmKCFlLnN0YXRlLmp1bXAuaXNIb2xkaW5nTW9kaWZpZXImJmUuc3RhdGUuanVtcC5jdXJzb3IpcmV0dXJuIHZvaWQoZS5zdGF0ZS5qdW1wLmN1cnNvcj1udWxsKTtlLnN0YXRlLmp1bXAuaXNIb2xkaW5nTW9kaWZpZXImJmUuc3RhdGUuanVtcC5tYXJrZXImJnUoZSl9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlLnN0YXRlLmp1bXAuaXNIb2xkaW5nTW9kaWZpZXImJmEodC5rZXkpKXtlLnN0YXRlLmp1bXAuaXNIb2xkaW5nTW9kaWZpZXI9ITAsZS5zdGF0ZS5qdW1wLmN1cnNvciYmcyhlKTt2YXIgbj1mdW5jdGlvbiBuKG8pe28uY29kZT09PXQuY29kZSYmKGUuc3RhdGUuanVtcC5pc0hvbGRpbmdNb2RpZmllcj0hMSxlLnN0YXRlLmp1bXAubWFya2VyJiZ1KGUpLGwuZGVmYXVsdC5vZmYoZG9jdW1lbnQsImtleXVwIixuKSxsLmRlZmF1bHQub2ZmKGRvY3VtZW50LCJjbGljayIsciksZS5vZmYoIm1vdXNlZG93biIsaSkpfSxyPWZ1bmN0aW9uKHQpe3ZhciBuPWUuc3RhdGUuanVtcC5kZXN0aW5hdGlvbjtuJiZlLnN0YXRlLmp1bXAub3B0aW9ucy5vbkNsaWNrKG4sdCl9LGk9ZnVuY3Rpb24odCxuKXtlLnN0YXRlLmp1bXAuZGVzdGluYXRpb24mJihuLmNvZGVtaXJyb3JJZ25vcmU9ITApfTtsLmRlZmF1bHQub24oZG9jdW1lbnQsImtleXVwIixuKSxsLmRlZmF1bHQub24oZG9jdW1lbnQsImNsaWNrIixyKSxlLm9uKCJtb3VzZWRvd24iLGkpfX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPT09KHA/Ik1ldGEiOiJDb250cm9sIil9ZnVuY3Rpb24gcyhlKXtpZighZS5zdGF0ZS5qdW1wLm1hcmtlcil7dmFyIHQ9ZS5zdGF0ZS5qdW1wLmN1cnNvcixuPWUuY29vcmRzQ2hhcih0KSxyPWUuZ2V0VG9rZW5BdChuLCEwKSxpPWUuc3RhdGUuanVtcC5vcHRpb25zLG89aS5nZXREZXN0aW5hdGlvbnx8ZS5nZXRIZWxwZXIobiwianVtcCIpO2lmKG8pe3ZhciBhPW8ocixpLGUpO2lmKGEpe3ZhciBzPWUubWFya1RleHQoe2xpbmU6bi5saW5lLGNoOnIuc3RhcnR9LHtsaW5lOm4ubGluZSxjaDpyLmVuZH0se2NsYXNzTmFtZToiQ29kZU1pcnJvci1qdW1wLXRva2VuIn0pO2Uuc3RhdGUuanVtcC5tYXJrZXI9cyxlLnN0YXRlLmp1bXAuZGVzdGluYXRpb249YX19fX1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuc3RhdGUuanVtcC5tYXJrZXI7ZS5zdGF0ZS5qdW1wLm1hcmtlcj1udWxsLGUuc3RhdGUuanVtcC5kZXN0aW5hdGlvbj1udWxsLHQuY2xlYXIoKX12YXIgYz1uKDIpLGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShjKTtsLmRlZmF1bHQuZGVmaW5lT3B0aW9uKCJqdW1wIiwhMSxmdW5jdGlvbihlLHQsbil7aWYobiYmbiE9PWwuZGVmYXVsdC5Jbml0KXt2YXIgYT1lLnN0YXRlLmp1bXAub25Nb3VzZU92ZXI7bC5kZWZhdWx0Lm9mZihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3ZlciIsYSk7dmFyIHM9ZS5zdGF0ZS5qdW1wLm9uTW91c2VPdXQ7bC5kZWZhdWx0Lm9mZihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3V0IixzKSxsLmRlZmF1bHQub2ZmKGRvY3VtZW50LCJrZXlkb3duIixlLnN0YXRlLmp1bXAub25LZXlEb3duKSxkZWxldGUgZS5zdGF0ZS5qdW1wfWlmKHQpe3ZhciB1PWUuc3RhdGUuanVtcD17b3B0aW9uczp0LG9uTW91c2VPdmVyOnIuYmluZChudWxsLGUpLG9uTW91c2VPdXQ6aS5iaW5kKG51bGwsZSksb25LZXlEb3duOm8uYmluZChudWxsLGUpfTtsLmRlZmF1bHQub24oZS5nZXRXcmFwcGVyRWxlbWVudCgpLCJtb3VzZW92ZXIiLHUub25Nb3VzZU92ZXIpLGwuZGVmYXVsdC5vbihlLmdldFdyYXBwZXJFbGVtZW50KCksIm1vdXNlb3V0Iix1Lm9uTW91c2VPdXQpLGwuZGVmYXVsdC5vbihkb2N1bWVudCwia2V5ZG93biIsdS5vbktleURvd24pfX0pO3ZhciBwPW5hdmlnYXRvciYmLTEhPT1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNYWMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLHRoaXMuc2l6ZXM9W119cmV0dXJuIGkoZSxbe2tleToidXBkYXRlU2l6ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dmFyIHI9ZS5nZXRDbGllbnRIZWlnaHQoKTtuPD10LnNpemVzLmxlbmd0aCYmciE9PXQuc2l6ZXNbbl0mJmUuZ2V0Q29kZU1pcnJvcigpLnNldFNpemUoKSx0LnNpemVzW25dPXJ9KX19XSksZX0oKTt0LmRlZmF1bHQ9b30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtpZighZS5yYW5nZUNvdW50KXJldHVybiBmdW5jdGlvbigpe307Zm9yKHZhciB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsbj1bXSxyPTA7cjxlLnJhbmdlQ291bnQ7cisrKW4ucHVzaChlLmdldFJhbmdlQXQocikpO3N3aXRjaCh0LnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJJTlBVVCI6Y2FzZSJURVhUQVJFQSI6dC5ibHVyKCk7YnJlYWs7ZGVmYXVsdDp0PW51bGx9cmV0dXJuIGUucmVtb3ZlQWxsUmFuZ2VzKCksZnVuY3Rpb24oKXsiQ2FyZXQiPT09ZS50eXBlJiZlLnJlbW92ZUFsbFJhbmdlcygpLGUucmFuZ2VDb3VudHx8bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuYWRkUmFuZ2UodCl9KSx0JiZ0LmZvY3VzKCl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oMjQpLHM9big2MTUpLHU9big2MTYpLGM9bigzMDgpLGw9big2MTcpLHA9bigxKSxmPW4oOSksZD1uKDgpLGg9bigyNTQpLG09bigxMzIpLGc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gbi5zaGFyZT1mdW5jdGlvbigpe24ucHJvcHMuc2hhcmUoKX0sbi5yZW5kZXJBdXRoU2hhcmluZ1dhcm5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbi5wcm9wcy5pc1NoYXJpbmdBdXRob3JpemF0aW9uP28uY3JlYXRlRWxlbWVudChfLG51bGwpOm51bGx9LG4udG9nZ2xlVG9vbHRpcD1mdW5jdGlvbigpe24uc2V0U3RhdGUoZnVuY3Rpb24oZSl7cmV0dXJue29wZW46IWUub3Blbn19KX0sbi5zdGF0ZT17b3BlbjohMX0sbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUub3Blbix0PXRoaXMucHJvcHMsbj10LmFsbFRhYnMscj10LmhlYWRlcnMsaT10Lmhpc3RvcnkscD10LnNoYXJlVXJsLGY9dC5yZXNoYXJlLGQ9dC50aGVtZTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KE4sbnVsbCxvLmNyZWF0ZUVsZW1lbnQoTCxudWxsLG8uY3JlYXRlRWxlbWVudCgiZGl2Iix7b25DbGljazp0aGlzLnRvZ2dsZVRvb2x0aXB9LHRoaXMucHJvcHMuY2hpbGRyZW4pLGUmJm8uY3JlYXRlRWxlbWVudChQLG51bGwsby5jcmVhdGVFbGVtZW50KHUuZGVmYXVsdCx7b3BlbjplLG9uQ2xvc2U6dGhpcy50b2dnbGVUb29sdGlwLGFuY2hvck9yaWdpbjp7aG9yaXpvbnRhbDoicmlnaHQiLHZlcnRpY2FsOiJib3R0b20ifSxyZW5kZXJBZnRlckNvbnRlbnQ6dGhpcy5yZW5kZXJBdXRoU2hhcmluZ1dhcm5pbmd9LG8uY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG8uY3JlYXRlRWxlbWVudChNLG51bGwsby5jcmVhdGVFbGVtZW50KEkse29uQ2xpY2s6dGhpcy5wcm9wcy50b2dnbGVTaGFyZUFsbFRhYnN9LCJTaGFyZSBhbGwgdGFicyIsIiAiKSxvLmNyZWF0ZUVsZW1lbnQocy5kZWZhdWx0LHtjaGVja2VkOm4sb25DaGFuZ2U6dGhpcy5wcm9wcy50b2dnbGVTaGFyZUFsbFRhYnN9KSksby5jcmVhdGVFbGVtZW50KE0sbnVsbCxvLmNyZWF0ZUVsZW1lbnQoSSx7b25DbGljazp0aGlzLnByb3BzLnRvZ2dsZVNoYXJlSGVhZGVyc30sIkhUVFAgaGVhZGVycyIsIiAiKSxvLmNyZWF0ZUVsZW1lbnQocy5kZWZhdWx0LHtjaGVja2VkOnIsb25DaGFuZ2U6dGhpcy5wcm9wcy50b2dnbGVTaGFyZUhlYWRlcnN9KSksby5jcmVhdGVFbGVtZW50KE0sbnVsbCxvLmNyZWF0ZUVsZW1lbnQoSSx7b25DbGljazp0aGlzLnByb3BzLnRvZ2dsZVNoYXJlSGlzdG9yeX0sIkhpc3RvcnkiLCIgIiksby5jcmVhdGVFbGVtZW50KHMuZGVmYXVsdCx7Y2hlY2tlZDppLG9uQ2hhbmdlOnRoaXMucHJvcHMudG9nZ2xlU2hhcmVIaXN0b3J5fSkpLHAmJm8uY3JlYXRlRWxlbWVudChNLG51bGwsby5jcmVhdGVFbGVtZW50KFIse3ZhbHVlOnAsZGlzYWJsZWQ6ITB9KSxvLmNyZWF0ZUVsZW1lbnQoaixudWxsLG8uY3JlYXRlRWxlbWVudChsLmRlZmF1bHQse3RleHQ6cH0sby5jcmVhdGVFbGVtZW50KGEuU2hhcmVJY29uLHtjb2xvcjpkLmNvbG91cnMuZGFya0JsdWUzMCx3aWR0aDoyNSxoZWlnaHQ6MjUsdGl0bGU6IkNvcHkgVVJMIHRvIENsaXBib2FyZCJ9KSkpKSxvLmNyZWF0ZUVsZW1lbnQoTSxudWxsLG8uY3JlYXRlRWxlbWVudCgiZGl2IixudWxsKSxvLmNyZWF0ZUVsZW1lbnQoYy5CdXR0b24se2hpZGVBcnJvdzohMCxvbkNsaWNrOnRoaXMuc2hhcmV9LGYmJnA/IlJlc2hhcmUiOiJTaGFyZSIpKSkpKSkpfSx0fShvLkNvbXBvbmVudCkseT1kLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7aGlzdG9yeTpoLmdldFNoYXJpbmdIaXN0b3J5LGhlYWRlcnM6aC5nZXRTaGFyaW5nSGVhZGVycyxhbGxUYWJzOmguZ2V0U2hhcmluZ0FsbFRhYnMsc2hhcmVVcmw6aC5nZXRTaGFyZVVybH0pO3QuZGVmYXVsdD1wLndpdGhUaGVtZShmLmNvbm5lY3QoeSx7dG9nZ2xlU2hhcmVBbGxUYWJzOm0udG9nZ2xlU2hhcmVBbGxUYWJzLHRvZ2dsZVNoYXJlSGVhZGVyczptLnRvZ2dsZVNoYXJlSGVhZGVycyx0b2dnbGVTaGFyZUhpc3Rvcnk6bS50b2dnbGVTaGFyZUhpc3Rvcnksc2hhcmU6bS5zaGFyZX0pKGcpKTt2YXIgdixiLHgsQyxFLEQsdyxTLGssQSxfPWZ1bmN0aW9uKCl7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChPLG51bGwsby5jcmVhdGVFbGVtZW50KEYsbnVsbCwiV2F0Y2ggb3V0ISIpLCJZb3VcdTIwMTlyZSBzaGFyaW5nIHlvdXIgIixvLmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsIkF1dGhvcml6YXRpb24iKSwiIGhlYWRlciB3aXRoIHRoZSB3b3JsZCEiKX0sVD1wLmtleWZyYW1lcyh2fHwodj1pKFsiXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDQpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuIl0sWyJcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4iXSkpKSxPPXAuc3R5bGVkLmRpdihifHwoYj1pKFsiXG4gIHBhZGRpbmc6IDEycHggMTZweDtcbiAgbWFyZ2luLXRvcDogMTBweDtcblxuICBmb250LXNpemU6IDE0cHg7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG5cbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGJhY2tncm91bmQ6ICNmM2Y0ZjQ7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG5cbiAgYW5pbWF0aW9uOiAiLCIgMC43cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG4iXSxbIlxuICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG5cbiAgZm9udC1zaXplOiAxNHB4O1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuXG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBiYWNrZ3JvdW5kOiAjZjNmNGY0O1xuICBib3gtc2hhZG93OiAwIDFweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuXG4gIGFuaW1hdGlvbjogIiwiIDAuN3MgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuIl0pKSxUKSxGPXAuc3R5bGVkLmRpdih4fHwoeD1pKFsiXG4gIG1hcmdpbi1yaWdodDogM3B4O1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzJhN2VkMjtcbiJdLFsiXG4gIG1hcmdpbi1yaWdodDogM3B4O1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzJhN2VkMjtcbiJdKSkpLE49cC5zdHlsZWQuZGl2KEN8fChDPWkoWyJcbiAgei1pbmRleDogMTAwNTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW4tbGVmdDogNnB4O1xuIl0sWyJcbiAgei1pbmRleDogMTAwNTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW4tbGVmdDogNnB4O1xuIl0pKSksST1wLnN0eWxlZC5kaXYoRXx8KEU9aShbIlxuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cbiAgZm9udC1zaXplOiAiLCI7XG4gIGZvbnQtd2VpZ2h0OiAiLCI7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjUzcHg7XG5cbiAgY29sb3I6ICIsIjtcbiJdLFsiXG4gIG1hcmdpbi1yaWdodDogMTBweDtcblxuICBmb250LXNpemU6ICIsIjtcbiAgZm9udC13ZWlnaHQ6ICIsIjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcblxuICBjb2xvcjogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5mb250U21hbGx9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLmZvbnRTZW1pQm9sZH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5kYXJrQmx1ZTUwfSksTD1wLnN0eWxlZC5kaXYoRHx8KEQ9aShbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiJdLFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuIl0pKSksUD1wLnN0eWxlZC5kaXYod3x8KHc9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwcHg7XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwcHg7XG4iXSkpKSxNPXAuc3R5bGVkLmRpdihTfHwoUz1pKFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLXdpZHRoOiAyNDVweDtcbiAgbWFyZ2luLXRvcDogIiwiO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi13aWR0aDogMjQ1cHg7XG4gIG1hcmdpbi10b3A6ICIsIjtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbDE2fSksaj1wLnN0eWxlZC5kaXYoa3x8KGs9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuXG4gICY6aG92ZXIge1xuICAgIHN2ZyB7XG4gICAgICBmaWxsOiAiLCI7XG4gICAgfVxuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuXG4gICY6aG92ZXIge1xuICAgIHN2ZyB7XG4gICAgICBmaWxsOiAiLCI7XG4gICAgfVxuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuZGFya0JsdWU2MH0pLFI9cC5zdHlsZWQuaW5wdXQoQXx8KEE9aShbIlxuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICIsIiAiLCI7XG4gIHBhZGRpbmctcmlnaHQ6IDI1cHg7XG5cbiAgZm9udC13ZWlnaHQ6ICIsIjtcbiAgZm9udC1zaXplOiAiLCI7XG5cbiAgYm9yZGVyLXJhZGl1czogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGNvbG9yOiAiLCI7XG4iXSxbIlxuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICIsIiAiLCI7XG4gIHBhZGRpbmctcmlnaHQ6IDI1cHg7XG5cbiAgZm9udC13ZWlnaHQ6ICIsIjtcbiAgZm9udC1zaXplOiAiLCI7XG5cbiAgYm9yZGVyLXJhZGl1czogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGNvbG9yOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLnNtYWxsNn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2l6ZXMuc21hbGwxMH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2l6ZXMuZm9udFNlbWlCb2xkfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5mb250VGlueX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2l6ZXMuc21hbGxSYWRpdXN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuZGFya0JsdWUxMH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5kYXJrQmx1ZX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMCksbz1uKDEpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGVja2VkLG49ZS5vbkNoYW5nZSxyPWUuY2xhc3NOYW1lO3JldHVybiBpLmNyZWF0ZUVsZW1lbnQobCx7Y2xhc3NOYW1lOnIsb25DbGljazpufSxpLmNyZWF0ZUVsZW1lbnQocCx7dHlwZToiY2hlY2tib3giLGNoZWNrZWQ6dCxyZWFkT25seTohMH0pLGkuY3JlYXRlRWxlbWVudChmLHtjaGVja2VkOnR9KSl9O3QuZGVmYXVsdD1hO3ZhciBzLHUsYyxsPW8uc3R5bGVkLmRpdihzfHwocz1yKFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIHdpZHRoOiAzOXB4O1xuICBoZWlnaHQ6IDIxcHg7XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICB3aWR0aDogMzlweDtcbiAgaGVpZ2h0OiAyMXB4O1xuIl0pKSkscD1vLnN0eWxlZC5pbnB1dCh1fHwodT1yKFsiXG4gIGRpc3BsYXk6IG5vbmU7XG4iXSxbIlxuICBkaXNwbGF5OiBub25lO1xuIl0pKSksZj1vLnN0eWxlZCgiZGl2IikoY3x8KGM9cihbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcblxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNzBtcyBsaW5lYXI7XG4gIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICBiYWNrZ3JvdW5kOiAiLCI7XG5cbiAgJjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjb250ZW50OiAnJztcbiAgICBoZWlnaHQ6IDIzcHg7XG4gICAgd2lkdGg6IDIzcHg7XG4gICAgbGVmdDogLTFweDtcbiAgICBib3R0b206IC0xcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA3MG1zIGxpbmVhcjtcblxuICAgIHRyYW5zZm9ybTogIiwiO1xuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcblxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNzBtcyBsaW5lYXI7XG4gIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICBiYWNrZ3JvdW5kOiAiLCI7XG5cbiAgJjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjb250ZW50OiAnJztcbiAgICBoZWlnaHQ6IDIzcHg7XG4gICAgd2lkdGg6IDIzcHg7XG4gICAgbGVmdDogLTFweDtcbiAgICBib3R0b206IC0xcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA3MG1zIGxpbmVhcjtcblxuICAgIHRyYW5zZm9ybTogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoZWNrZWQ/ZS50aGVtZS5jb2xvdXJzLmdyZWVuOmUudGhlbWUuY29sb3Vycy5ibGFjazQwfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGVja2VkPyJ0cmFuc2xhdGVYKDE5cHgpIjoiIn0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigzMCkscz1uKDEpLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5oYW5kbGVDbGlja091dHNpZGU9ZnVuY3Rpb24oZSl7aWYodC5wcm9wcy5vcGVuKXRyeXt2YXIgbj1hLmZpbmRET01Ob2RlKHQpO24mJm4uY29udGFpbnMoZS50YXJnZXQpfHwidW5kZWZpbmVkIj09PXR5cGVvZiB0LnByb3BzLm9uQ2xvc2V8fHQucHJvcHMub25DbG9zZShlKX1jYXRjaChlKXt9fSx0fXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUsITApfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpLCEwKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUub3BlbixuPWUuY2hpbGRyZW4scj1lLnJlbmRlckFmdGVyQ29udGVudCxpPWUub25DbGljayxhPXRoaXMucHJvcHMuYW5jaG9yT3JpZ2luO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYix7dmlzaWJsZTp0LGFuY2hvclRvcDoidG9wIj09PWEudmVydGljYWwsYW5jaG9yQm90dG9tOiJib3R0b20iPT09YS52ZXJ0aWNhbCxhbmNob3JMZWZ0OiJsZWZ0Ij09PWEuaG9yaXpvbnRhbCxhbmNob3JSaWdodDoicmlnaHQiPT09YS5ob3Jpem9udGFsLGFuY2hvckNlbnRlcjoiY2VudGVyIj09PWEuaG9yaXpvbnRhbH0sby5jcmVhdGVFbGVtZW50KHgse29uQ2xpY2s6aX0sby5jcmVhdGVFbGVtZW50KEMsbnVsbCksbiksciYmcigpKX0sdC5kZWZhdWx0UHJvcHM9e2FuY2hvck9yaWdpbjp7dmVydGljYWw6InRvcCIsaG9yaXpvbnRhbDoiY2VudGVyIn19LHR9KG8uUHVyZUNvbXBvbmVudCk7dC5kZWZhdWx0PXU7dmFyIGMsbCxwLGYsZCxoLG0sZyx5LHYsYj1zLnN0eWxlZC5kaXYoZ3x8KGc9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDk5OTk7XG5cbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1vdXQgMC4ycztcblxuICAiLCIgIiwiICIsIiAiLCIgIiwiICIsIjtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogOTk5OTtcblxuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgdHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLW91dCAwLjJzO1xuXG4gICIsIiAiLCIgIiwiICIsIiAiLCIgIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlP3MuY3NzKGN8fChjPWkoWyJcbiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICJdLFsiXG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAiXSkpKTpzLmNzcyhsfHwobD1pKFsiXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICJdLFsiXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICJdKSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hbmNob3JUb3A/cy5jc3MocHx8KHA9aShbIlxuICAgICAgICBib3R0b206IDEwMCU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG5cbiAgICAgICAgIiwiIHtcbiAgICAgICAgICBib3R0b206IC0xMHB4O1xuICAgICAgICB9XG4gICAgICAiXSxbIlxuICAgICAgICBib3R0b206IDEwMCU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG5cbiAgICAgICAgIiwiIHtcbiAgICAgICAgICBib3R0b206IC0xMHB4O1xuICAgICAgICB9XG4gICAgICAiXSkpLEMpOiIifSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hbmNob3JCb3R0b20/cy5jc3MoZnx8KGY9aShbIlxuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG5cbiAgICAgICAgIiwiIHtcbiAgICAgICAgICB0b3A6IC0xMHB4O1xuICAgICAgICAgIGJvcmRlci13aWR0aDogMCAxMHB4IDEwcHggMTBweDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICIsIiB0cmFuc3BhcmVudFxuICAgICAgICAgICAgIiwiIHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgICAiXSxbIlxuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG5cbiAgICAgICAgIiwiIHtcbiAgICAgICAgICB0b3A6IC0xMHB4O1xuICAgICAgICAgIGJvcmRlci13aWR0aDogMCAxMHB4IDEwcHggMTBweDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICIsIiB0cmFuc3BhcmVudFxuICAgICAgICAgICAgIiwiIHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgICAiXSkpLEMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5wYWxlR3JleX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5wYWxlR3JleX0pOiIifSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hbmNob3JMZWZ0P3MuY3NzKGR8fChkPWkoWyJcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuXG4gICAgICAgICIsIiB7XG4gICAgICAgICAgbGVmdDogMjVweDtcbiAgICAgICAgfVxuICAgICAgIl0sWyJcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuXG4gICAgICAgICIsIiB7XG4gICAgICAgICAgbGVmdDogMjVweDtcbiAgICAgICAgfVxuICAgICAgIl0pKSxDKToiIn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuYW5jaG9yUmlnaHQ/cy5jc3MoaHx8KGg9aShbIlxuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuXG4gICAgICAgICIsIiB7XG4gICAgICAgICAgcmlnaHQ6IDI1cHg7XG4gICAgICAgIH1cbiAgICAgICJdLFsiXG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG5cbiAgICAgICAgIiwiIHtcbiAgICAgICAgICByaWdodDogMjVweDtcbiAgICAgICAgfVxuICAgICAgIl0pKSxDKToiIn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuYW5jaG9yQ2VudGVyP3MuY3NzKG18fChtPWkoWyJcbiAgICAgICAgbGVmdDogNTAlO1xuXG4gICAgICAgICIsIiB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxMHB4KTtcbiAgICAgICAgfVxuICAgICAgIl0sWyJcbiAgICAgICAgbGVmdDogNTAlO1xuXG4gICAgICAgICIsIiB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxMHB4KTtcbiAgICAgICAgfVxuICAgICAgIl0pKSxDKToiIn0pLHg9cy5zdHlsZWQuZGl2KHl8fCh5PWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICBwYWRkaW5nOiAiLCIgIiwiO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIGJveC1zaGFkb3c6IDAgMXB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICIsIjtcbiAgYm9yZGVyLXJhZGl1czogIiwiO1xuICBjb2xvcjogIiwiO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICBwYWRkaW5nOiAiLCIgIiwiO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIGJveC1zaGFkb3c6IDAgMXB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICIsIjtcbiAgYm9yZGVyLXJhZGl1czogIiwiO1xuICBjb2xvcjogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbDEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbDE2fSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLnBhbGVHcmV5fSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbFJhZGl1c30sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5wYWxlVGV4dH0pLEM9cy5zdHlsZWQuZGl2KHZ8fCh2PWkoWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMTBweCAxMHB4IDAgMTBweDtcbiAgYm9yZGVyLWNvbG9yOiAiLCIgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnRcbiAgICB0cmFuc3BhcmVudDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcblxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDEwcHggMTBweCAwIDEwcHg7XG4gIGJvcmRlci1jb2xvcjogIiwiIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50XG4gICAgdHJhbnNwYXJlbnQ7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMucGFsZUdyZXl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oMSkscz1uKDYxOCksdT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLm9uQ29weT1mdW5jdGlvbigpe24uc2V0U3RhdGUoe2NvcGllZDohMH0pLG4uY29weVRpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0U3RhdGUoe2NvcGllZDohMX0pfSw1MDApfSxuLnN0YXRlPXtjb3BpZWQ6ITF9LG59cmV0dXJuIHIodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLmNvcHlUaW1lcil9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnRleHQsbj1lLmNvbG9yO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQocyx7dGV4dDp0LG9uQ29weTp0aGlzLm9uQ29weX0sby5jcmVhdGVFbGVtZW50KHAsbnVsbCx0aGlzLnN0YXRlLmNvcGllZCYmby5jcmVhdGVFbGVtZW50KGYse2NvbG9yOm59LCJDb3BpZWQiKSx0aGlzLnByb3BzLmNoaWxkcmVuKSl9LHR9KG8uQ29tcG9uZW50KTt0LmRlZmF1bHQ9dTt2YXIgYyxsLHA9YS5zdHlsZWQuZGl2KGN8fChjPWkoWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuIl0sWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuIl0pKSksZj1hLnN0eWxlZC5kaXYobHx8KGw9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTIwcHg7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gIGFuaW1hdGlvbjogY29weWluZyA3MDBtcyBsaW5lYXI7XG4gIGNvbG9yOiAiLCI7XG5cbiAgQGtleWZyYW1lcyBjb3B5aW5nIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuXG4gICAgNTAlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwcHgpO1xuICAgIH1cbiAgfVxuIl0sWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0yMHB4O1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICBhbmltYXRpb246IGNvcHlpbmcgNzAwbXMgbGluZWFyO1xuICBjb2xvcjogIiwiO1xuXG4gIEBrZXlmcmFtZXMgY29weWluZyB7XG4gICAgMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cblxuICAgIDUwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MHB4KTtcbiAgICB9XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29sb3I/ZS5jb2xvcjplLnRoZW1lLmNvbG91cnMuZGFya0JsdWUzMH0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjE5KSxpPXIuQ29weVRvQ2xpcGJvYXJkO2kuQ29weVRvQ2xpcGJvYXJkPWksZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBhKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29weVRvQ2xpcGJvYXJkPXZvaWQgMDt2YXIgdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGw9bigwKSxwPXIobCksZj1uKDI4NCksZD1yKGYpOyh0LkNvcHlUb0NsaXBib2FyZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLGk7byh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLHU9QXJyYXkocyksYz0wO2M8cztjKyspdVtjXT1hcmd1bWVudHNbY107cmV0dXJuIG49cj1hKHRoaXMsKGU9dC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQodSkpKSxyLm9uQ2xpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcyxuPXQudGV4dCxpPXQub25Db3B5LG89dC5jaGlsZHJlbixhPXQub3B0aW9ucyxzPXAuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KG8pLHU9KDAsZC5kZWZhdWx0KShuLGEpO2kmJmkobix1KSxzJiZzLnByb3BzJiYiZnVuY3Rpb24iPT09dHlwZW9mIHMucHJvcHMub25DbGljayYmcy5wcm9wcy5vbkNsaWNrKGUpfSxpPW4sYShyLGkpfXJldHVybiBzKHQsZSksYyh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PShlLnRleHQsZS5vbkNvcHksZS5vcHRpb25zLGUuY2hpbGRyZW4pLG49aShlLFsidGV4dCIsIm9uQ29weSIsIm9wdGlvbnMiLCJjaGlsZHJlbiJdKSxyPXAuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KHQpO3JldHVybiBwLmRlZmF1bHQuY2xvbmVFbGVtZW50KHIsdSh7fSxuLHtvbkNsaWNrOnRoaXMub25DbGlja30pKX19XSksdH0ocC5kZWZhdWx0LlB1cmVDb21wb25lbnQpKS5kZWZhdWx0UHJvcHM9e29uQ29weTp2b2lkIDAsb3B0aW9uczp2b2lkIDB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDApLGk9big2MjEpLG89big2MjMpLGE9big4KSxzPW4oMTIpLHU9big5KSxjPWZ1bmN0aW9uKGUpe3JldHVybiBlLmlzUG9sbGluZ1NjaGVtYT9yLmNyZWF0ZUVsZW1lbnQoby5kZWZhdWx0LHtpbnRlcnZhbDplLnNldHRpbmdzWyJzY2hlbWEucG9sbGluZy5pbnRlcnZhbCJdLG9uUmVsb2FkU2NoZW1hOmUub25SZWxvYWRTY2hlbWF9KTpyLmNyZWF0ZUVsZW1lbnQoaS5kZWZhdWx0LHtpc1JlbG9hZGluZ1NjaGVtYTplLmlzUmVsb2FkaW5nU2NoZW1hLG9uUmVsb2FkU2NoZW1hOmUub25SZWxvYWRTY2hlbWF9KX0sbD1hLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7aXNSZWxvYWRpbmdTY2hlbWE6cy5nZXRJc1JlbG9hZGluZ1NjaGVtYX0pO3QuZGVmYXVsdD11LmNvbm5lY3QobCkoYyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMCksaT1uKDYyMiksbz1mdW5jdGlvbihlKXtyZXR1cm4gci5jcmVhdGVFbGVtZW50KGkuZGVmYXVsdCx7YW5pbWF0ZTplLmlzUmVsb2FkaW5nU2NoZW1hLG9uQ2xpY2s6ZS5vblJlbG9hZFNjaGVtYX0pfTt0LmRlZmF1bHQ9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89bigxKSxhPW4oMjg1KSxzPWZ1bmN0aW9uKGUpe3JldHVybiBpLmNyZWF0ZUVsZW1lbnQodix7b25DbGljazplLm9uQ2xpY2ssdGl0bGU6IlJlbG9hZCBTY2hlbWEiLGRpc2FibGVkOmUuZGlzYWJsZWR9LGkuY3JlYXRlRWxlbWVudCh5LHt2aWV3Qm94OiIwIDAgMjAgMjAiLGRpc2FibGVkOmUuZGlzYWJsZWR9LGkuY3JlYXRlRWxlbWVudChiLHtjeDoiOS41IixjeToiMTAiLHI6IjYiLHN0cm9rZVdpZHRoOiIxLjUiLGZpbGw6Im5vbmUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixhbmltYXRlOmUuYW5pbWF0ZX0pLGkuY3JlYXRlRWxlbWVudCh4LHtkOiJNNC44MyA0Ljg2YTYuOTIgNi45MiAwIDAgMSAxMS4zIDIuOTdsLjQxLTEuMjNjLjEzLS40LjU2LS42Ljk1LS40Ny40LjEzLjYuNTYuNDcuOTVsLTEuMTMgMy4zM2EuNzYuNzYgMCAwIDEtLjcuNS43Mi43MiAwIDAgMS0uNDMtLjEybC0yLjg4LTEuOTJhLjc2Ljc2IDAgMCAxLS4yLTEuMDQuNzUuNzUgMCAwIDEgMS4wMy0uMmwxLjA2LjdBNS4zNCA1LjM0IDAgMCAwIDkuNzUgNC41YTUuNDQgNS40NCAwIDAgMC01LjY0IDUuMjIgNS40MiA1LjQyIDAgMCAwIDUuMjQgNS42MmMuNDEgMCAuNzQuMzYuNzIuNzhhLjc1Ljc1IDAgMCAxLS43NS43Mkg5LjNhNi45IDYuOSAwIDAgMS02LjY4LTcuMTggNi44OCA2Ljg4IDAgMCAxIDIuMjItNC44MXoiLGFuaW1hdGU6ZS5hbmltYXRlfSkpKX07dC5kZWZhdWx0PXM7dmFyIHUsYyxsLHAsZixkLGgsbT1vLmtleWZyYW1lcyh1fHwodT1yKFsiXG4wJSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICBzdHJva2UtZGFzaG9mZnNldDogNy45Mjtcbn1cblxuNTAlIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoNzIwZGVnKTtcbiAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDM3LjY4O1xufVxuXG4xMDAlIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZyk7XG4gIHN0cm9rZS1kYXNob2Zmc2V0OiA3LjkyO1xufVxuIl0sWyJcbjAlIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIHN0cm9rZS1kYXNob2Zmc2V0OiA3LjkyO1xufVxuXG41MCUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg3MjBkZWcpO1xuICBzdHJva2UtZGFzaG9mZnNldDogMzcuNjg7XG59XG5cbjEwMCUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKTtcbiAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDcuOTI7XG59XG4iXSkpKSxnPWZ1bmN0aW9uKGUpe3JldHVybiBvLmtleWZyYW1lcyhjfHwoYz1yKFsiXG4wJSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKCIsImRlZyk7XG59XG5cbjEwMCUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgiLCJkZWcpO1xufSJdLFsiXG4wJSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKCIsImRlZyk7XG59XG5cbjEwMCUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgiLCJkZWcpO1xufSJdKSksZS5hbmltYXRlPzA6MzYwLGUuYW5pbWF0ZT8zNjA6NzIwKX0seT1vLnN0eWxlZC5zdmcocHx8KHA9cihbIlxuICBmaWxsOiAiLCI7XG4gIHRyYW5zaXRpb246IDAuMXMgbGluZWFyIGFsbDtcbiAgIiwiO1xuIl0sWyJcbiAgZmlsbDogIiwiO1xuICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7XG4gICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5pY29ufSxmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD92b2lkIDA6by5jc3MobHx8KGw9cihbIlxuICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgZmlsbDogIiwiO1xuICAgICAgICAgIH1cbiAgICAgICAgIl0sWyJcbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGZpbGw6ICIsIjtcbiAgICAgICAgICB9XG4gICAgICAgICJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5pY29uSG92ZXJ9KX0pLHY9by5zdHlsZWQoYS5kZWZhdWx0KShmfHwoZj1yKFsiXG4gIGN1cnNvcjogIiwiO1xuICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTtcbiJdLFsiXG4gIGN1cnNvcjogIiwiO1xuICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTtcbiJdKSksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXNhYmxlZDtyZXR1cm4gdm9pZCAwIT09dCYmdD8iYXV0byI6InBvaW50ZXIifSksYj1vLnN0eWxlZCgiY2lyY2xlIikoZHx8KGQ9cihbIlxuICBmaWxsOiBub25lO1xuICBzdHJva2U6ICIsIjtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMzcuNjg7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLWluLW91dDtcbiAgb3BhY2l0eTogIiwiO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiA5LjVweCAxMHB4O1xuICBhbmltYXRpb246ICIsIiAycyBsaW5lYXIgIiwiO1xuIl0sWyJcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlOiAiLCI7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDM3LjY4O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIG9wYWNpdHk6ICIsIjtcbiAgdHJhbnNmb3JtLW9yaWdpbjogOS41cHggMTBweDtcbiAgYW5pbWF0aW9uOiAiLCIgMnMgbGluZWFyICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5pY29ufSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hbmltYXRlPzE6MH0sbSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hbmltYXRlPyJpbmZpbml0ZSI6IiJ9KSx4PW8uc3R5bGVkKCJwYXRoIikoaHx8KGg9cihbIlxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIG9wYWNpdHk6ICIsIjtcbiAgdHJhbnNmb3JtLW9yaWdpbjogOS41cHggMTBweDtcbiAgYW5pbWF0aW9uOiAiLCIgMC41cyBsaW5lYXI7XG4iXSxbIlxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIG9wYWNpdHk6ICIsIjtcbiAgdHJhbnNmb3JtLW9yaWdpbjogOS41cHggMTBweDtcbiAgYW5pbWF0aW9uOiAiLCIgMC41cyBsaW5lYXI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGU/MDoxfSxnKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89big2MjQpLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gbi5zZXRXaW5kb3dWaXNpYmlsaXR5PWZ1bmN0aW9uKCl7InZpc2libGUiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZuLnNldFN0YXRlKHt3aW5kb3dWaXNpYmxlOiEwfSxuLnVwZGF0ZVBvbGxpbmcpLCJoaWRkZW4iPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZuLnNldFN0YXRlKHt3aW5kb3dWaXNpYmxlOiExfSxuLnVwZGF0ZVBvbGxpbmcpfSxuLnVwZGF0ZVBvbGxpbmc9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9bi5wcm9wcyksbi5jbGVhclRpbWVyKCksbi5zdGF0ZS53aW5kb3dWaXNpYmxlJiYobi50aW1lcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3JldHVybiBlLm9uUmVsb2FkU2NoZW1hKCl9LGUuaW50ZXJ2YWwpKX0sbi5zdGF0ZT17d2luZG93VmlzaWJsZTohMH0sbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVQb2xsaW5nKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5zZXRXaW5kb3dWaXNpYmlsaXR5KX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyVGltZXIoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLnNldFdpbmRvd1Zpc2liaWxpdHkpfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlUG9sbGluZyhlKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuY3JlYXRlRWxlbWVudChvLmRlZmF1bHQse2FuaW1hdGU6dGhpcy5zdGF0ZS53aW5kb3dWaXNpYmxlfSl9LHQucHJvdG90eXBlLmNsZWFyVGltZXI9ZnVuY3Rpb24oKXt0aGlzLnRpbWVyJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPW51bGwpfSx0fShpLkNvbXBvbmVudCk7dC5kZWZhdWx0PWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oMSksYT1uKDI4NSkscz1mdW5jdGlvbihlKXtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KGQse29uQ2xpY2s6ZS5vbkNsaWNrLHRpdGxlOiJQb2xsaW5nIFNjaGVtYSJ9LGkuY3JlYXRlRWxlbWVudChoLHthbmltYXRlOmUuYW5pbWF0ZX0pKX07dC5kZWZhdWx0PXM7dmFyIHUsYyxsLHAsZj1vLmtleWZyYW1lcyh1fHwodT1yKFsiXG4wJSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgxMzksIDE0OSwgMTU2LCAwLjQpO1xufVxuNzAlIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDEzOSwgMTQ5LCAxNTYsIDApO1xufVxuMTAwJSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgxMzksIDE0OSwgMTU2LCAwKTtcbn1cbiJdLFsiXG4wJSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgxMzksIDE0OSwgMTU2LCAwLjQpO1xufVxuNzAlIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDEzOSwgMTQ5LCAxNTYsIDApO1xufVxuMTAwJSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgxMzksIDE0OSwgMTU2LCAwKTtcbn1cbiJdKSkpLGQ9by5zdHlsZWQoYS5kZWZhdWx0KShjfHwoYz1yKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4iXSkpKSxoPW8uc3R5bGVkLmRpdihwfHwocD1yKFsiXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogOHB4O1xuICBoZWlnaHQ6IDhweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGJveC1zaGFkb3c6IDAgMCAwICIsIjtcbiAgIiwiO1xuIl0sWyJcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiA4cHg7XG4gIGhlaWdodDogOHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgYm94LXNoYWRvdzogMCAwIDAgIiwiO1xuICAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucG9sbGluZ0ljb259LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucG9sbGluZ0ljb25TaGFkb3d9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGU/by5jc3MobHx8KGw9cihbIlxuICAgICAgICAgIGFuaW1hdGlvbjogIiwiIDJzIGluZmluaXRlO1xuICAgICAgICAiXSxbIlxuICAgICAgICAgIGFuaW1hdGlvbjogIiwiIDJzIGluZmluaXRlO1xuICAgICAgICAiXSkpLGYpOnZvaWQgMH0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigyNzIpLHM9big5KSx1PW4oMTYpLGM9bigxMiksbD1uKDgpLHA9bigxKSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIG4uX29uS2V5VXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmtleUNvZGU7KHI+PTY1JiZyPD05MHx8IXQuc2hpZnRLZXkmJnI+PTQ4JiZyPD01N3x8dC5zaGlmdEtleSYmMTg5PT09cnx8dC5zaGlmdEtleSYmMjIyPT09cikmJm4uZWRpdG9yLmV4ZWNDb21tYW5kKCJhdXRvY29tcGxldGUiKX0sbi5fb25FZGl0PWZ1bmN0aW9uKCl7bi5pZ25vcmVDaGFuZ2VFdmVudHx8KG4uY2FjaGVkVmFsdWU9bi5lZGl0b3IuZ2V0VmFsdWUoKSxuLnByb3BzLm9uQ2hhbmdlKG4uY2FjaGVkVmFsdWUpKX0sbi5fb25IYXNDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCl7YS5kZWZhdWx0KGUsdCxuLnByb3BzLm9uSGludEluZm9ybWF0aW9uUmVuZGVyKX0sbi5jYWNoZWRWYWx1ZT10LnZhbHVlfHwiIixuLnByb3BzLmdldFJlZiYmbi5wcm9wcy5nZXRSZWYobiksbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW4oMik7bigxMzcpLG4oNjkpLG4oMTM4KSxuKDcwKSxuKDg5KSxuKDEzOSksbigzOCksbig5MCksbigzOSksbig5MSksbigyODYpLG4oMjg3KSxuKDI4OCksdGhpcy5lZGl0b3I9dCh0aGlzLl9ub2RlLHt2YWx1ZTp0aGlzLnByb3BzLnZhbHVlfHwiIixsaW5lTnVtYmVyczohMCx0YWJTaXplOjIsbW9kZToiZ3JhcGhxbC12YXJpYWJsZXMiLHRoZW1lOiJncmFwaGlxbCIsa2V5TWFwOiJzdWJsaW1lIixhdXRvQ2xvc2VCcmFja2V0czohMCxtYXRjaEJyYWNrZXRzOiEwLHNob3dDdXJzb3JXaGVuU2VsZWN0aW5nOiEwLHJlYWRPbmx5OiExLGZvbGRHdXR0ZXI6e21pbkZvbGRTaXplOjR9LGxpbnQ6e3ZhcmlhYmxlVG9UeXBlOnRoaXMucHJvcHMudmFyaWFibGVUb1R5cGU/dGhpcy5wcm9wcy52YXJpYWJsZVRvVHlwZS50b0pTKCk6dm9pZCAwfSxoaW50T3B0aW9uczp7dmFyaWFibGVUb1R5cGU6dGhpcy5wcm9wcy52YXJpYWJsZVRvVHlwZT90aGlzLnByb3BzLnZhcmlhYmxlVG9UeXBlLnRvSlMoKTp2b2lkIDAsY2xvc2VPblVuZm9jdXM6ITEsY29tcGxldGVTaW5nbGU6ITF9LGd1dHRlcnM6WyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIiwiQ29kZU1pcnJvci1mb2xkZ3V0dGVyIl0sZXh0cmFLZXlzOnsiQ21kLVNwYWNlIjpmdW5jdGlvbigpe3JldHVybiBlLmVkaXRvci5zaG93SGludCh7Y29tcGxldGVTaW5nbGU6ITF9KX0sIkN0cmwtU3BhY2UiOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZWRpdG9yLnNob3dIaW50KHtjb21wbGV0ZVNpbmdsZTohMX0pfSwiQWx0LVNwYWNlIjpmdW5jdGlvbigpe3JldHVybiBlLmVkaXRvci5zaG93SGludCh7Y29tcGxldGVTaW5nbGU6ITF9KX0sIlNoaWZ0LVNwYWNlIjpmdW5jdGlvbigpe3JldHVybiBlLmVkaXRvci5zaG93SGludCh7Y29tcGxldGVTaW5nbGU6ITF9KX0sIkNtZC1FbnRlciI6ZnVuY3Rpb24oKXtlLnByb3BzLm9uUnVuUXVlcnkmJmUucHJvcHMub25SdW5RdWVyeSgpfSwiQ3RybC1FbnRlciI6ZnVuY3Rpb24oKXtlLnByb3BzLm9uUnVuUXVlcnkmJmUucHJvcHMub25SdW5RdWVyeSgpfSwiU2hpZnQtQ3RybC1QIjpmdW5jdGlvbigpe2UucHJvcHMucHJldHRpZnlRdWVyeSYmZS5wcm9wcy5wcmV0dGlmeVF1ZXJ5KCl9LCJDbWQtRiI6ImZpbmRQZXJzaXN0ZW50IiwiQ3RybC1GIjoiZmluZFBlcnNpc3RlbnQiLCJDdHJsLUxlZnQiOiJnb1N1YndvcmRMZWZ0IiwiQ3RybC1SaWdodCI6ImdvU3Vid29yZFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0dyb3VwTGVmdCIsIkFsdC1SaWdodCI6ImdvR3JvdXBSaWdodCJ9fSksdGhpcy5lZGl0b3Iub24oImNoYW5nZSIsdGhpcy5fb25FZGl0KSx0aGlzLmVkaXRvci5vbigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuZWRpdG9yLm9uKCJoYXNDb21wbGV0aW9uIix0aGlzLl9vbkhhc0NvbXBsZXRpb24pfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bigyKTt0aGlzLmlnbm9yZUNoYW5nZUV2ZW50PSEwLHRoaXMucHJvcHMudmFyaWFibGVUb1R5cGUhPT1lLnZhcmlhYmxlVG9UeXBlJiYodGhpcy5lZGl0b3Iub3B0aW9ucy5saW50LnZhcmlhYmxlVG9UeXBlPXRoaXMucHJvcHMudmFyaWFibGVUb1R5cGU/dGhpcy5wcm9wcy52YXJpYWJsZVRvVHlwZS50b0pTKCk6dm9pZCAwLHRoaXMuZWRpdG9yLm9wdGlvbnMuaGludE9wdGlvbnMudmFyaWFibGVUb1R5cGU9dGhpcy5wcm9wcy52YXJpYWJsZVRvVHlwZT90aGlzLnByb3BzLnZhcmlhYmxlVG9UeXBlLnRvSlMoKTp2b2lkIDAsdC5zaWduYWwodGhpcy5lZGl0b3IsImNoYW5nZSIsdGhpcy5lZGl0b3IpKSx0aGlzLnByb3BzLnZhbHVlIT09ZS52YWx1ZSYmdGhpcy5wcm9wcy52YWx1ZSE9PXRoaXMuY2FjaGVkVmFsdWUmJih0aGlzLmNhY2hlZFZhbHVlPXRoaXMucHJvcHMudmFsdWUsdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5wcm9wcy52YWx1ZSkpLHRoaXMuaWdub3JlQ2hhbmdlRXZlbnQ9ITF9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5lZGl0b3Iub2ZmKCJjaGFuZ2UiLHRoaXMuX29uRWRpdCksdGhpcy5lZGl0b3Iub2ZmKCJrZXl1cCIsdGhpcy5fb25LZXlVcCksdGhpcy5lZGl0b3Iub2ZmKCJoYXNDb21wbGV0aW9uIix0aGlzLl9vbkhhc0NvbXBsZXRpb24pLHRoaXMuZWRpdG9yPW51bGx9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChnLHtyZWY6ZnVuY3Rpb24odCl7ZS5fbm9kZT10fX0pfSx0LnByb3RvdHlwZS5nZXRDb2RlTWlycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdG9yfSx0LnByb3RvdHlwZS5nZXRDbGllbnRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZSYmdGhpcy5fbm9kZS5jbGllbnRIZWlnaHR9LHR9KG8uUHVyZUNvbXBvbmVudCksZD1sLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7dmFsdWU6Yy5nZXRWYXJpYWJsZXMsdmFyaWFibGVUb1R5cGU6Yy5nZXRWYXJpYWJsZVRvVHlwZX0pO3QuVmFyaWFibGVFZGl0b3JDb21wb25lbnQ9cy5jb25uZWN0KGQse29uQ2hhbmdlOnUuZWRpdFZhcmlhYmxlc30pKGYpO3ZhciBoPWwuY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHt2YWx1ZTpjLmdldEhlYWRlcnN9KTt0LkhlYWRlcnNFZGl0b3JDb21wb25lbnQ9cy5jb25uZWN0KGgse29uQ2hhbmdlOnUuZWRpdEhlYWRlcnN9KShmKTt2YXIgbSxnPXAuc3R5bGVkLmRpdihtfHwobT1pKFsiXG4gIGZsZXg6IDE7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuIl0sWyJcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4iXSkpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1pKG4sYSh0LnN0cmluZykpO2lmKHIpe3ZhciBvPW51bGwhPT10LnR5cGUmJi8ifFx3Ly50ZXN0KHQuc3RyaW5nWzBdKT90LnN0YXJ0OnQuZW5kO3JldHVybntsaXN0OnIsZnJvbTp7bGluZTplLmxpbmUsY29sdW1uOm99LHRvOntsaW5lOmUubGluZSxjb2x1bW46dC5lbmR9fX19ZnVuY3Rpb24gaShlLHQpe3JldHVybiB0P28obyhlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57cHJveGltaXR5OnMoYShlLnRleHQpLHQpLGVudHJ5OmV9fSksZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJveGltaXR5PD0yfSksZnVuY3Rpb24oZSl7cmV0dXJuIWUuZW50cnkuaXNEZXByZWNhdGVkfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybihlLmVudHJ5LmlzRGVwcmVjYXRlZD8xOjApLSh0LmVudHJ5LmlzRGVwcmVjYXRlZD8xOjApfHxlLnByb3hpbWl0eS10LnByb3hpbWl0eXx8ZS5lbnRyeS50ZXh0Lmxlbmd0aC10LmVudHJ5LnRleHQubGVuZ3RofSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVudHJ5fSk6byhlLGZ1bmN0aW9uKGUpe3JldHVybiFlLmlzRGVwcmVjYXRlZH0pfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lLmZpbHRlcih0KTtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bn1mdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFcvZywiIil9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXUodCxlKTtyZXR1cm4gZS5sZW5ndGg+dC5sZW5ndGgmJihuLT1lLmxlbmd0aC10Lmxlbmd0aC0xLG4rPTA9PT1lLmluZGV4T2YodCk/MDouNSksbn1mdW5jdGlvbiB1KGUsdCl7dmFyIG49dm9pZCAwLHI9dm9pZCAwLGk9W10sbz1lLmxlbmd0aCxhPXQubGVuZ3RoO2ZvcihuPTA7bjw9bztuKyspaVtuXT1bbl07Zm9yKHI9MTtyPD1hO3IrKylpWzBdW3JdPXI7Zm9yKG49MTtuPD1vO24rKylmb3Iocj0xO3I8PWE7cisrKXt2YXIgcz1lW24tMV09PT10W3ItMV0/MDoxO2lbbl1bcl09TWF0aC5taW4oaVtuLTFdW3JdKzEsaVtuXVtyLTFdKzEsaVtuLTFdW3ItMV0rcyksbj4xJiZyPjEmJmVbbi0xXT09PXRbci0yXSYmZVtuLTJdPT09dFtyLTFdJiYoaVtuXVtyXT1NYXRoLm1pbihpW25dW3JdLGlbbi0yXVtyLTJdK3MpKX1yZXR1cm4gaVtvXVthXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2PWUsYj1lLmxlbmd0aCx4PUM9RT0tMSxmKCksZCgpO3ZhciB0PWkoKTtyZXR1cm4gYygiRU9GIiksdH1mdW5jdGlvbiBpKCl7dmFyIGU9eCx0PVtdO2lmKGMoInsiKSwhcCgifSIpKXtkb3t0LnB1c2gobygpKX13aGlsZShwKCIsIikpO2MoIn0iKX1yZXR1cm57a2luZDoiT2JqZWN0IixzdGFydDplLGVuZDpFLG1lbWJlcnM6dH19ZnVuY3Rpb24gbygpe3ZhciBlPXgsdD0iU3RyaW5nIj09PXc/dSgpOm51bGw7YygiU3RyaW5nIiksYygiOiIpO3ZhciBuPXMoKTtyZXR1cm57a2luZDoiTWVtYmVyIixzdGFydDplLGVuZDpFLGtleTp0LHZhbHVlOm59fWZ1bmN0aW9uIGEoKXt2YXIgZT14LHQ9W107aWYoYygiWyIpLCFwKCJdIikpe2Rve3QucHVzaChzKCkpfXdoaWxlKHAoIiwiKSk7YygiXSIpfXJldHVybntraW5kOiJBcnJheSIsc3RhcnQ6ZSxlbmQ6RSx2YWx1ZXM6dH19ZnVuY3Rpb24gcygpe3N3aXRjaCh3KXtjYXNlIlsiOnJldHVybiBhKCk7Y2FzZSJ7IjpyZXR1cm4gaSgpO2Nhc2UiU3RyaW5nIjpjYXNlIk51bWJlciI6Y2FzZSJCb29sZWFuIjpjYXNlIk51bGwiOnZhciBlPXUoKTtyZXR1cm4gZCgpLGV9cmV0dXJuIGMoIlZhbHVlIil9ZnVuY3Rpb24gdSgpe3JldHVybntraW5kOncsc3RhcnQ6eCxlbmQ6Qyx2YWx1ZTpKU09OLnBhcnNlKHYuc2xpY2UoeCxDKSl9fWZ1bmN0aW9uIGMoZSl7aWYodz09PWUpcmV0dXJuIHZvaWQgZCgpO3ZhciB0PXZvaWQgMDtpZigiRU9GIj09PXcpdD0iW2VuZCBvZiBmaWxlXSI7ZWxzZSBpZihDLXg+MSl0PSJgIit2LnNsaWNlKHgsQykrImAiO2Vsc2V7dmFyIG49di5zbGljZSh4KS5tYXRjaCgvXi4rP1xiLyk7dD0iYCIrKG4/blswXTp2W3hdKSsiYCJ9dGhyb3cgbCgiRXhwZWN0ZWQgIitlKyIgYnV0IGZvdW5kICIrdCsiLiIpfWZ1bmN0aW9uIGwoZSl7cmV0dXJue21lc3NhZ2U6ZSxzdGFydDp4LGVuZDpDfX1mdW5jdGlvbiBwKGUpe2lmKHc9PT1lKXJldHVybiBkKCksITB9ZnVuY3Rpb24gZigpe0M8YiYmKEMrKyxEPUM9PT1iPzA6di5jaGFyQ29kZUF0KEMpKX1mdW5jdGlvbiBkKCl7Zm9yKEU9Qzs5PT09RHx8MTA9PT1EfHwxMz09PUR8fDMyPT09RDspZigpO2lmKDA9PT1EKXJldHVybiB2b2lkKHc9IkVPRiIpO3N3aXRjaCh4PUMsRCl7Y2FzZSAzNDpyZXR1cm4gdz0iU3RyaW5nIixoKCk7Y2FzZSA0NTpjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB3PSJOdW1iZXIiLGcoKTtjYXNlIDEwMjppZigiZmFsc2UiIT09di5zbGljZSh4LHgrNSkpYnJlYWs7cmV0dXJuIEMrPTQsZigpLHZvaWQodz0iQm9vbGVhbiIpO2Nhc2UgMTEwOmlmKCJudWxsIiE9PXYuc2xpY2UoeCx4KzQpKWJyZWFrO3JldHVybiBDKz0zLGYoKSx2b2lkKHc9Ik51bGwiKTtjYXNlIDExNjppZigidHJ1ZSIhPT12LnNsaWNlKHgseCs0KSlicmVhaztyZXR1cm4gQys9MyxmKCksdm9pZCh3PSJCb29sZWFuIil9dz12W3hdLGYoKX1mdW5jdGlvbiBoKCl7Zm9yKGYoKTszNCE9PUQmJkQ+MzE7KWlmKDkyPT09RClzd2l0Y2goZigpLEQpe2Nhc2UgMzQ6Y2FzZSA0NzpjYXNlIDkyOmNhc2UgOTg6Y2FzZSAxMDI6Y2FzZSAxMTA6Y2FzZSAxMTQ6Y2FzZSAxMTY6ZigpO2JyZWFrO2Nhc2UgMTE3OmYoKSxtKCksbSgpLG0oKSxtKCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBsKCJCYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZS4iKX1lbHNle2lmKEM9PT1iKXRocm93IGwoIlVudGVybWluYXRlZCBzdHJpbmcuIik7ZigpfWlmKDM0PT09RClyZXR1cm4gdm9pZCBmKCk7dGhyb3cgbCgiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBtKCl7aWYoRD49NDgmJkQ8PTU3fHxEPj02NSYmRDw9NzB8fEQ+PTk3JiZEPD0xMDIpcmV0dXJuIGYoKTt0aHJvdyBsKCJFeHBlY3RlZCBoZXhhZGVjaW1hbCBkaWdpdC4iKX1mdW5jdGlvbiBnKCl7NDU9PT1EJiZmKCksNDg9PT1EP2YoKTp5KCksNDY9PT1EJiYoZigpLHkoKSksNjkhPT1EJiYxMDEhPT1EfHwoZigpLDQzIT09RCYmNDUhPT1EfHxmKCkseSgpKX1mdW5jdGlvbiB5KCl7aWYoRDw0OHx8RD41Nyl0aHJvdyBsKCJFeHBlY3RlZCBkZWNpbWFsIGRpZ2l0LiIpO2Rve2YoKX13aGlsZShEPj00OCYmRDw9NTcpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgdj12b2lkIDAsYj12b2lkIDAseD12b2lkIDAsQz12b2lkIDAsRT12b2lkIDAsRD12b2lkIDAsdz12b2lkIDB9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oNjI5KSxhPW4oNjMwKSxzPW4oOSksdT1uKDgpLGM9bigxMiksbD1uKDEpLHA9big4NSksZj1uZXcgcC5SZXNwb25zZVJlY29yZCh7ZGF0ZToiIix0aW1lOm5ldyBEYXRlLHJlc3VsdElEOiJkZWZhdWx0LWlkIn0pLGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZXRSZWYsbj1lLnJlc3BvbnNlcyxyPW4uZ2V0KDApfHxmLHM9bi5zaXplPjE7cmV0dXJuIGkuY3JlYXRlRWxlbWVudCh4LHtyZWY6dCxpc1N1YnNjcmlwdGlvbjpzfSxuLnNpemU8PTE/aS5jcmVhdGVFbGVtZW50KEMse2tleToiZmlyc3QiLGlzU3Vic2NyaXB0aW9uOnN9LG4uc2l6ZT4xJiZyLnRpbWUmJmkuY3JlYXRlRWxlbWVudChFLG51bGwsaS5jcmVhdGVFbGVtZW50KEQsbnVsbCxvLmRlZmF1bHQoci50aW1lKSkpLGkuY3JlYXRlRWxlbWVudCh3LHtpc1N1YnNjcmlwdGlvbjpzfSxpLmNyZWF0ZUVsZW1lbnQoYS5SZXN1bHRWaWV3ZXIse3ZhbHVlOnIuZGF0ZSxpc1N1YnNjcmlwdGlvbjpzfSkpKTpuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KEMse2tleTplLnJlc3VsdElEfHxTdHJpbmcoZS50aW1lKSxpc1N1YnNjcmlwdGlvbjpzfSxuLnNpemU+MSYmZS50aW1lJiZpLmNyZWF0ZUVsZW1lbnQoRSxudWxsLGkuY3JlYXRlRWxlbWVudChELG51bGwsby5kZWZhdWx0KGUudGltZSkpKSxpLmNyZWF0ZUVsZW1lbnQodyx7aXNTdWJzY3JpcHRpb246bi5zaXplPjF9LGkuY3JlYXRlRWxlbWVudChhLlJlc3VsdFZpZXdlcix7dmFsdWU6ZS5kYXRlLGlzU3Vic2NyaXB0aW9uOnN9KSkpfSkpfSxoPXUuY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHtyZXNwb25zZXM6Yy5nZXRSZXNwb25zZXN9KTt0LmRlZmF1bHQ9cy5jb25uZWN0KGgpKGQpO3ZhciBtLGcseSx2LGIseD1sLnN0eWxlZCgiZGl2IikobXx8KG09cihbIlxuICBmbGV4OiAxO1xuICBoZWlnaHQ6ICIsIjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogIiwiO1xuICBtYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgLmNtLXN0cmluZyB7XG4gICAgY29sb3I6IHJnYig0MSwgMTg1LCAxMTUpO1xuICB9XG5cbiAgLmNtLWRlZiB7XG4gICAgY29sb3I6IHJnYigyNDEsIDE0MywgMSk7XG4gIH1cblxuICAuY20tcHJvcGVydHkge1xuICAgIGNvbG9yOiByZ2IoNTEsIDE0NywgMjIwKTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLkNvZGVNaXJyb3Ige1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuICAuQ29kZU1pcnJvci1ndXR0ZXJzIHtcbiAgICBjdXJzb3I6IGNvbC1yZXNpemU7XG4gIH1cbiAgLkNvZGVNaXJyb3ItZm9sZGd1dHRlcixcbiAgLkNvZGVNaXJyb3ItZm9sZGd1dHRlci1vcGVuOmFmdGVyLFxuICAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLWZvbGRlZDphZnRlciB7XG4gICAgcGFkZGluZy1sZWZ0OiAzcHg7XG4gIH1cbiJdLFsiXG4gIGZsZXg6IDE7XG4gIGhlaWdodDogIiwiO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiAiLCI7XG4gIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDtcblxuICAuY20tc3RyaW5nIHtcbiAgICBjb2xvcjogcmdiKDQxLCAxODUsIDExNSk7XG4gIH1cblxuICAuY20tZGVmIHtcbiAgICBjb2xvcjogcmdiKDI0MSwgMTQzLCAxKTtcbiAgfVxuXG4gIC5jbS1wcm9wZXJ0eSB7XG4gICAgY29sb3I6IHJnYig1MSwgMTQ3LCAyMjApO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuQ29kZU1pcnJvciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4gIC5Db2RlTWlycm9yLWd1dHRlcnMge1xuICAgIGN1cnNvcjogY29sLXJlc2l6ZTtcbiAgfVxuICAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLFxuICAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLW9wZW46YWZ0ZXIsXG4gIC5Db2RlTWlycm9yLWZvbGRndXR0ZXItZm9sZGVkOmFmdGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDNweDtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1N1YnNjcmlwdGlvbj8iYXV0byI6IjEwMCUifSxmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1N1YnNjcmlwdGlvbj8iYXV0byI6InZpc2libGUifSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnJlc3VsdEJhY2tncm91bmR9KSxDPWwuc3R5bGVkKCJkaXYiKShnfHwoZz1yKFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiAiLCI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICY6bm90KDpmaXJzdC1jaGlsZCk6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0OHB4O1xuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogIiwiO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAmOm5vdCg6Zmlyc3QtY2hpbGQpOmxhc3Qtb2YtdHlwZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNDhweDtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1N1YnNjcmlwdGlvbj8iYXV0byI6IjEwMCUifSksRT1sLnN0eWxlZC5kaXYoeXx8KHk9cihbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTdweDtcbiAgbWFyZ2luLXRvcDogMTJweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAmOmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHRvcDogOXB4O1xuICAgIGxlZnQ6IDk1cHg7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkXG4gICAgICAiLCI7XG4gIH1cbiJdLFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxN3B4O1xuICBtYXJnaW4tdG9wOiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICY6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgY29udGVudDogJyc7XG4gICAgdG9wOiA5cHg7XG4gICAgbGVmdDogOTVweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWRcbiAgICAgICIsIjtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnN1YnNjcmlwdGlvblRpbWVCb2FkZXJUb3B9KSxEPWwuc3R5bGVkLmRpdih2fHwodj1yKFsiXG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICIsIjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuIl0sWyJcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIiwiO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc3Vic2NyaXB0aW9uVGltZVRleHR9KSx3PWwuc3R5bGVkKCJkaXYiKShifHwoYj1yKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogIiwiO1xuICBwb3NpdGlvbjogIiwiO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiAiLCI7XG4gIHBvc2l0aW9uOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU3Vic2NyaXB0aW9uPyJhdXRvIjoiMTAwJSJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU3Vic2NyaXB0aW9uPyJyZWxhdGl2ZSI6InN0YXRpYyJ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PW5ldyBEYXRlLG49TWF0aC5hYnMoZS5nZXRUaW1lKCktdC5nZXRUaW1lKCkpLHI9TWF0aC5mbG9vcihuLzg2NGU1KSxpPU1hdGguZmxvb3IobiU4NjRlNS8zNmU1KSxvPU1hdGgucm91bmQobiU4NjRlNSUzNmU1LzZlNCk7aWYocj4wKXJldHVybiByKyIgZGF5cyBhZ28iO2lmKGk+MClyZXR1cm4gaSsiIGggYWdvIjtpZihvPjApcmV0dXJuIG8rIiBtaW4gYWdvIjt2YXIgYT1NYXRoLnJvdW5kKG4vMWUzKTtyZXR1cm4gYSsiIHNlYyIrKGE+MT8icyI6IiIpKyIgYWdvIn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCksYT1uKDEpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5zZXRSZWY9ZnVuY3Rpb24oZSl7dC5ub2RlPWV9LHR9cmV0dXJuIHIodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBlPW4oMik7big4OSksbig3MCksbigzOSksbigyNzQpLG4oMzgpLG4oOTApLG4oOTEpLG4oNjMxKTt2YXIgdD1bXTt0aGlzLnByb3BzLmhpZGVHdXR0ZXJzfHx0LnB1c2goIkNvZGVNaXJyb3ItZm9sZGd1dHRlciIpO3ZhciByPXt9O3RoaXMucHJvcHMuaGlkZUd1dHRlcnN8fChyPXttaW5Gb2xkU2l6ZTo0fSk7dmFyIGk9dGhpcy5wcm9wcy52YWx1ZXx8IiI7dGhpcy52aWV3ZXI9ZSh0aGlzLm5vZGUse2xpbmVXcmFwcGluZzohMCx2YWx1ZTppLHJlYWRPbmx5OiEwLHRoZW1lOiJncmFwaGlxbCIsbW9kZToiZ3JhcGhxbC1yZXN1bHRzIixrZXlNYXA6InN1YmxpbWUiLGZvbGRHdXR0ZXI6cixndXR0ZXJzOnQsZXh0cmFLZXlzOnsiQ21kLUYiOiJmaW5kUGVyc2lzdGVudCIsIkN0cmwtRiI6ImZpbmRQZXJzaXN0ZW50IiwiQ3RybC1MZWZ0IjoiZ29TdWJ3b3JkTGVmdCIsIkN0cmwtUmlnaHQiOiJnb1N1YndvcmRSaWdodCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQifX0pfSx0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvcHMudmFsdWUhPT1lLnZhbHVlfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnZhbHVlfHwiIjt0aGlzLnZpZXdlci5zZXRWYWx1ZShlKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnZpZXdlcj1udWxsfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGMse3JlZjp0aGlzLnNldFJlZixpc1N1YnNjcmlwdGlvbjp0aGlzLnByb3BzLmlzU3Vic2NyaXB0aW9ufSl9LHQucHJvdG90eXBlLmdldENvZGVNaXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3ZXJ9LHQucHJvdG90eXBlLmdldENsaWVudEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUmJnRoaXMubm9kZS5jbGllbnRIZWlnaHR9LHR9KG8uQ29tcG9uZW50KTt0LlJlc3VsdFZpZXdlcj1zO3ZhciB1LGM9YS5zdHlsZWQoImRpdiIpKHV8fCh1PWkoWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6ICIsIjtcbiAgLkNvZGVNaXJyb3Ige1xuICAgIGhlaWdodDogIiwiO1xuICAgIHBvc2l0aW9uOiAiLCI7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMzhweDtcbiAgfVxuICAuQ29kZU1pcnJvci1jdXJzb3Ige1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICAuQ29kZU1pcnJvci1zY3JvbGwge1xuICAgIG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgbWF4LXdpZHRoOiA1MHZ3O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuICAuY20tc3RyaW5nIHtcbiAgICBjb2xvcjogIiwiICFpbXBvcnRhbnQ7XG4gIH1cbiJdLFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiAiLCI7XG4gIC5Db2RlTWlycm9yIHtcbiAgICBoZWlnaHQ6ICIsIjtcbiAgICBwb3NpdGlvbjogIiwiO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDM4cHg7XG4gIH1cbiAgLkNvZGVNaXJyb3ItY3Vyc29yIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgLkNvZGVNaXJyb3Itc2Nyb2xsIHtcbiAgICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xuICAgIG1heC13aWR0aDogNTB2dztcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cbiAgLmNtLXN0cmluZyB7XG4gICAgY29sb3I6ICIsIiAhaW1wb3J0YW50O1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU3Vic2NyaXB0aW9uPyJhdXRvIjoiMTAwJSJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU3Vic2NyaXB0aW9uPyJhdXRvIjoiMTAwJSJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU3Vic2NyaXB0aW9uPyJyZWxhdGl2ZSI6ImFic29sdXRlJSJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucHJvcGVydHl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZS5sZXZlbHM7cmV0dXJuKG4mJjAhPT1uLmxlbmd0aD9uW24ubGVuZ3RoLTFdLSh0aGlzLmVsZWN0cmljSW5wdXQudGVzdCh0KT8xOjApOmUuaW5kZW50TGV2ZWwpKnRoaXMuY29uZmlnLmluZGVudFVuaXR9dmFyIGk9bigyKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oaSksYT1uKDcxKTtvLmRlZmF1bHQuZGVmaW5lTW9kZSgiZ3JhcGhxbC1yZXN1bHRzIixmdW5jdGlvbihlKXt2YXIgdD0oMCxhLm9ubGluZVBhcnNlcikoe2VhdFdoaXRlc3BhY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWF0U3BhY2UoKX0sbGV4UnVsZXM6cyxwYXJzZVJ1bGVzOnUsZWRpdG9yQ29uZmlnOnt0YWJTaXplOmUudGFiU2l6ZX19KTtyZXR1cm57Y29uZmlnOmUsc3RhcnRTdGF0ZTp0LnN0YXJ0U3RhdGUsdG9rZW46dC50b2tlbixpbmRlbnQ6cixlbGVjdHJpY0lucHV0Oi9eXHMqW31cXV0vLGZvbGQ6ImJyYWNlIixjbG9zZUJyYWNrZXRzOntwYWlyczonW117fSIiJyxleHBsb2RlOiJbXXt9In19fSk7dmFyIHM9e1B1bmN0dWF0aW9uOi9eXFt8XXxce3xcfXw6fCwvLE51bWJlcjovXi0/KD86MHwoPzpbMS05XVswLTldKikpKD86XC5bMC05XSopPyg/OltlRV1bKy1dP1swLTldKyk/LyxTdHJpbmc6L14iKD86W14iXFxdfFxcKD86InxcL3xcXHxifGZ8bnxyfHR8dVswLTlhLWZBLUZdezR9KSkqIj8vLEtleXdvcmQ6L150cnVlfGZhbHNlfG51bGwvfSx1PXtEb2N1bWVudDpbKDAsYS5wKSgieyIpLCgwLGEubGlzdCkoIkVudHJ5IiwoMCxhLnApKCIsIikpLCgwLGEucCkoIn0iKV0sRW50cnk6WygwLGEudCkoIlN0cmluZyIsImRlZiIpLCgwLGEucCkoIjoiKSwiVmFsdWUiXSxWYWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZS5raW5kKXtjYXNlIk51bWJlciI6cmV0dXJuIk51bWJlclZhbHVlIjtjYXNlIlN0cmluZyI6cmV0dXJuIlN0cmluZ1ZhbHVlIjtjYXNlIlB1bmN0dWF0aW9uIjpzd2l0Y2goZS52YWx1ZSl7Y2FzZSJbIjpyZXR1cm4iTGlzdFZhbHVlIjtjYXNlInsiOnJldHVybiJPYmplY3RWYWx1ZSJ9cmV0dXJuIG51bGw7Y2FzZSJLZXl3b3JkIjpzd2l0Y2goZS52YWx1ZSl7Y2FzZSJ0cnVlIjpjYXNlImZhbHNlIjpyZXR1cm4iQm9vbGVhblZhbHVlIjtjYXNlIm51bGwiOnJldHVybiJOdWxsVmFsdWUifXJldHVybiBudWxsfX0sTnVtYmVyVmFsdWU6WygwLGEudCkoIk51bWJlciIsIm51bWJlciIpXSxTdHJpbmdWYWx1ZTpbKDAsYS50KSgiU3RyaW5nIiwic3RyaW5nIildLEJvb2xlYW5WYWx1ZTpbKDAsYS50KSgiS2V5d29yZCIsImJ1aWx0aW4iKV0sTnVsbFZhbHVlOlsoMCxhLnQpKCJLZXl3b3JkIiwia2V5d29yZCIpXSxMaXN0VmFsdWU6WygwLGEucCkoIlsiKSwoMCxhLmxpc3QpKCJWYWx1ZSIsKDAsYS5wKSgiLCIpKSwoMCxhLnApKCJdIildLE9iamVjdFZhbHVlOlsoMCxhLnApKCJ7IiksKDAsYS5saXN0KSgiT2JqZWN0RmllbGQiLCgwLGEucCkoIiwiKSksKDAsYS5wKSgifSIpXSxPYmplY3RGaWVsZDpbKDAsYS50KSgiU3RyaW5nIiwicHJvcGVydHkiKSwoMCxhLnApKCI6IiksIlZhbHVlIl19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0saT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9big2MzMpLHM9big4NyksdT1uKDgpLGM9bigxMiksbD1uKDkpLHA9cy5kZWZhdWx0LmRpdih5fHwoeT1yKFsiXG4gIHBhZGRpbmctdG9wOiA2cHg7XG4gIHBhZGRpbmctbGVmdDogMjVweDtcbiAgcGFkZGluZy1yaWdodDogMjVweDtcbiAgY29sb3I6ICIsIjtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlO1xuIl0sWyJcbiAgcGFkZGluZy10b3A6IDZweDtcbiAgcGFkZGluZy1sZWZ0OiAyNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xuICBjb2xvcjogIiwiO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMudGV4dH0pLGY9cy5kZWZhdWx0LmRpdih2fHwodj1yKFsiXG4gIGZvbnQtc2l6ZTogMTRweDtcbiJdLFsiXG4gIGZvbnQtc2l6ZTogMTRweDtcbiJdKSkpLGQ9cy5kZWZhdWx0LmRpdihifHwoYj1yKFsiXG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6IHJnYmEoMjQxLCAxNDMsIDEsIDEpO1xuIl0sWyJcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogcmdiYSgyNDEsIDE0MywgMSwgMSk7XG4iXSkpKSxoPXMuZGVmYXVsdC5kaXYoeHx8KHg9cihbIlxuICBwYWRkaW5nLWxlZnQ6IDEwMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIHBhZGRpbmctdG9wOiAxNnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiBjYWxjKDEwMCUgKyAxMDBweCk7XG4gIGhlaWdodDogY2FsYygxMDAlICsgMTE2cHgpO1xuIl0sWyJcbiAgcGFkZGluZy1sZWZ0OiAxMDBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICBwYWRkaW5nLXRvcDogMTZweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogY2FsYygxMDAlICsgMTAwcHgpO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSArIDExNnB4KTtcbiJdKSkpLG09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS50cmFjaW5nLG49ZS50cmFjaW5nU3VwcG9ydGVkLHI9ZS5zdGFydFRpbWUsaT1lLmVuZFRpbWUscz1lLm9wZW4sdT10JiZyP01hdGguYWJzKG5ldyBEYXRlKHQuc3RhcnRUaW1lKS5nZXRUaW1lKCktci5nZXRUaW1lKCkpOjAsYz10JiZpP01hdGguYWJzKGkuZ2V0VGltZSgpLW5ldyBEYXRlKHQuZW5kVGltZSkuZ2V0VGltZSgpKTowLGw9MWU2KnU7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChwLG51bGwsdCYmcz9vLmNyZWF0ZUVsZW1lbnQoaCxudWxsLG8uY3JlYXRlRWxlbWVudChhLmRlZmF1bHQse3BhdGg6WyJSZXF1ZXN0Il0sc3RhcnRPZmZzZXQ6MCxkdXJhdGlvbjpsfSksdC5leGVjdXRpb24ucmVzb2x2ZXJzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEuZGVmYXVsdCx7a2V5OmUucGF0aC5qb2luKCIuIikscGF0aDplLnBhdGgsc3RhcnRPZmZzZXQ6ZS5zdGFydE9mZnNldCtsLGR1cmF0aW9uOmUuZHVyYXRpb259KX0pLG8uY3JlYXRlRWxlbWVudChhLmRlZmF1bHQse3BhdGg6WyJSZXNwb25zZSJdLHN0YXJ0T2Zmc2V0OnQuZHVyYXRpb24rbCxkdXJhdGlvbjoxZTYqY30pKTpuP28uY3JlYXRlRWxlbWVudChmLG51bGwsdGhpcy5wcm9wcy5xdWVyeVJ1bm5pbmc/IlJ1bm5pbmcgcXVlcnkgLi4uIjoiUGxlYXNlIHJlLXJ1biB0aGUgcXVlcnkgdG8gc2hvdyB0cmFjaW5nIHJlc3VsdHMuIik6by5jcmVhdGVFbGVtZW50KGQsbnVsbCwiVGhpcyBHcmFwaFFMIHNlcnZlciBkb2Vzblx1MjAxOXQgc3VwcG9ydCB0cmFjaW5nLiBTZWUgdGhlIGZvbGxvd2luZyBwYWdlIGZvciBpbnN0cnVjdGlvbnM6IixvLmNyZWF0ZUVsZW1lbnQoImJyIixudWxsKSwiaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLXRyYWNpbmciKSl9LHR9KG8uUHVyZUNvbXBvbmVudCksZz11LmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7dHJhY2luZzpjLmdldFRyYWNpbmcsc3RhcnRUaW1lOmMuZ2V0Q3VycmVudFF1ZXJ5U3RhcnRUaW1lLGVuZFRpbWU6Yy5nZXRDdXJyZW50UXVlcnlFbmRUaW1lLHRyYWNpbmdTdXBwb3J0ZWQ6Yy5nZXRUcmFjaW5nU3VwcG9ydGVkLHF1ZXJ5UnVubmluZzpjLmdldFF1ZXJ5UnVubmluZ30pO3QuZGVmYXVsdD1sLmNvbm5lY3QoZykobSk7dmFyIHksdixiLHh9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfSxpPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCksYT1uKDg3KSxzPWEuZGVmYXVsdC5kaXYoZHx8KGQ9cihbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZGlzcGxheTogdGFibGU7XG4gIHBhZGRpbmctcmlnaHQ6IDI1cHg7XG5cbiAgY29sb3I6ICIsIjtcbiJdLFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgcGFkZGluZy1yaWdodDogMjVweDtcblxuICBjb2xvcjogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRleHR9KSx1PWEuZGVmYXVsdC5zcGFuKGh8fChoPXIoWyJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMCAxMHB4O1xuICBoZWlnaHQ6IDEuNXB4O1xuICBib3R0b206IDRweDtcblxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwIDEwcHg7XG4gIGhlaWdodDogMS41cHg7XG4gIGJvdHRvbTogNHB4O1xuXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy50ZXh0fSksYz1hLmRlZmF1bHQuc3BhbihtfHwobT1yKFsiXG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgY29sb3I6ICIsIjtcbiJdLFsiXG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgY29sb3I6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy50ZXh0SW5hY3RpdmV9KSxsPWEuZGVmYXVsdC5zcGFuKGd8fChnPXIoWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICB0ZXh0LWFsaWduOiByaWdodDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4iXSkpKSxwPWEuZGVmYXVsdC5zcGFuKHl8fCh5PXIoWyJcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4iXSxbIlxuICBtYXJnaW4tbGVmdDogMTBweDtcbiJdKSkpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5zdGF0ZT17Y29sbGFwc2VkOiExfSx0fXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGF0aCxuPWUuc3RhcnRPZmZzZXQscj1lLmR1cmF0aW9uLGk9bi8xZTYsYT1yLzFlNjtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHMse3N0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoIitpKyJweCkifX0sby5jcmVhdGVFbGVtZW50KGwsbnVsbCxvLmNyZWF0ZUVsZW1lbnQocCxudWxsLHQuc2xpY2UoLTIpLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtzdHlsZTp7b3BhY2l0eTpuPT09dC5zbGljZSgtMikubGVuZ3RoLTE/MTouNn0sa2V5OmV9LChuPjA/Ii4iOiIiKStlKX0pKSksby5jcmVhdGVFbGVtZW50KHUse3N0eWxlOnt3aWR0aDpNYXRoLm1heChhLDMpfX0pLG8uY3JlYXRlRWxlbWVudChjLG51bGwsdGhpcy5wcmludER1cmF0aW9uKHIpKSl9LHQucHJvdG90eXBlLnByaW50RHVyYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5yb3VuZChlLzFlMyk7aWYodD4xZTMpe3JldHVybiBNYXRoLnJvdW5kKHQvMWUzKSsiIG1zIn1yZXR1cm4gdCsiIFx4YjVzIn0sdH0oby5Db21wb25lbnQpO3QuZGVmYXVsdD1mO3ZhciBkLGgsbSxnLHl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9W107aWYoIWUpcmV0dXJue2luc2VydGlvbnM6cixyZXN1bHQ6dH07dmFyIGM9dm9pZCAwO3RyeXtjPSgwLHUucGFyc2UpKHQpfWNhdGNoKGUpe3JldHVybntpbnNlcnRpb25zOnIscmVzdWx0OnR9fXZhciBsPW58fGkscD1uZXcgdS5UeXBlSW5mbyhlKTtyZXR1cm4oMCx1LnZpc2l0KShjLHtsZWF2ZTpmdW5jdGlvbihlKXtwLmxlYXZlKGUpfSxlbnRlcjpmdW5jdGlvbihlKXtpZihwLmVudGVyKGUpLCJGaWVsZCI9PT1lLmtpbmQmJiFlLnNlbGVjdGlvblNldCl7dmFyIG49cC5nZXRUeXBlKCksaT1vKG4sbCk7aWYoaSl7dmFyIGE9cyh0LGUubG9jLnN0YXJ0KTtyLnB1c2goe2luZGV4OmUubG9jLmVuZCxzdHJpbmc6IiAiKygwLHUucHJpbnQpKGkpLnJlcGxhY2UoL1xuL2csIlxuIithKX0pfX19fSkse2luc2VydGlvbnM6cixyZXN1bHQ6YSh0LHIpfX1mdW5jdGlvbiBpKGUpe2lmKCFlLmdldEZpZWxkcylyZXR1cm5bXTt2YXIgdD1lLmdldEZpZWxkcygpO2lmKHQuaWQpcmV0dXJuWyJpZCJdO2lmKHQuZWRnZXMpcmV0dXJuWyJlZGdlcyJdO2lmKHQubm9kZSlyZXR1cm5bIm5vZGUiXTt2YXIgbj1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXsoMCx1LmlzTGVhZlR5cGUpKHRbZV0udHlwZSkmJm4ucHVzaChlKX0pLG59ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPSgwLHUuZ2V0TmFtZWRUeXBlKShlKTtpZihlJiYhKDAsdS5pc0xlYWZUeXBlKShlKSl7dmFyIHI9dChuKTtpZihBcnJheS5pc0FycmF5KHIpJiYwIT09ci5sZW5ndGgpcmV0dXJue2tpbmQ6IlNlbGVjdGlvblNldCIsc2VsZWN0aW9uczpyLm1hcChmdW5jdGlvbihlKXt2YXIgcj1uLmdldEZpZWxkcygpW2VdO3JldHVybntraW5kOiJGaWVsZCIsbmFtZTp7a2luZDoiTmFtZSIsdmFsdWU6ZX0sc2VsZWN0aW9uU2V0Om8ocj9yLnR5cGU6bnVsbCx0KX19KX19fWZ1bmN0aW9uIGEoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7dmFyIG49IiIscj0wO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9dC5pbmRleCxvPXQuc3RyaW5nO24rPWUuc2xpY2UocixpKStvLHI9aX0pLG4rPWUuc2xpY2Uocil9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbj10LHI9dDtuOyl7dmFyIGk9ZS5jaGFyQ29kZUF0KG4tMSk7aWYoMTA9PT1pfHwxMz09PWl8fDgyMzI9PT1pfHw4MjMzPT09aSlicmVhaztuLS0sOSE9PWkmJjExIT09aSYmMTIhPT1pJiYzMiE9PWkmJjE2MCE9PWkmJihyPW4pfXJldHVybiBlLnN1YnN0cmluZyhuLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZpbGxMZWFmcz1yO3ZhciB1PW4oNyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0sbz1mdW5jdGlvbigpe3JldHVybiBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0sby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1uKDApLHM9big0MCksdT1uKDkpLGM9bigyOTEpLGw9bigyODkpLHA9big2NyksZj1uKDY4KSxkPW4oMTIpLGg9big4KSxtPW4oMSksZz1uKDI5MCkseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLmNsaWVudFg9MCxuLmNsaWVudFk9MCxuLnNldFdpZHRoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPW4ucHJvcHMpLG4uYWN0aXZlQ29udGVudENvbXBvbmVudCYmbi5wcm9wcy5kb2NzLmRvY3NPcGVuJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt2YXIgdD1uLmFjdGl2ZUNvbnRlbnRDb21wb25lbnQuZ2V0V2lkdGgoZSk7bi5wcm9wcy5jaGFuZ2VXaWR0aERvY3MoZS5zZXNzaW9uSWQsTWF0aC5taW4odCxuLnByb3BzLm1heFdpZHRoKSl9KX0sbi5zZXRBY3RpdmVDb250ZW50UmVmPWZ1bmN0aW9uKGUpe2UmJihuLmFjdGl2ZUNvbnRlbnRDb21wb25lbnQ9ZS5nZXRXcmFwcGVkSW5zdGFuY2UoKSl9LG4uc2V0UmVmPWZ1bmN0aW9uKGUpe24ucmVmPWV9LG4uc2hvd0RvY0Zyb21UeXBlPWZ1bmN0aW9uKGUpe24ucHJvcHMuc2V0RG9jc1Zpc2libGUobi5wcm9wcy5zZXNzaW9uSWQsITAsMCksbi5hY3RpdmVDb250ZW50Q29tcG9uZW50LnNob3dEb2NGcm9tVHlwZShlKX0sbi5zZXRDb250ZW50Q29udGFpbmVyUmVmPWZ1bmN0aW9uKGUpe24ucmVmQ29udGVudENvbnRhaW5lcj1lfSxuLmhhbmRsZVRhYkNsaWNrPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLnByb3BzLmRvY3MuYWN0aXZlVGFiSWR4PT09ZT8obi5wcm9wcy5zZXREb2NzVmlzaWJsZShuLnByb3BzLnNlc3Npb25JZCwhMSksbi5zZXRXaWR0aCgpKTpuLnByb3BzLmRvY3MuYWN0aXZlVGFiSWR4IT09ZT8obi5wcm9wcy5zZXREb2NzVmlzaWJsZShuLnByb3BzLnNlc3Npb25JZCwhMSxuLnByb3BzLmRvY3MuYWN0aXZlVGFiSWR4KSxuLnByb3BzLnNldERvY3NWaXNpYmxlKG4ucHJvcHMuc2Vzc2lvbklkLCEwLGUpLG4uc2V0V2lkdGgoKSk6KG4ucHJvcHMuc2V0RG9jc1Zpc2libGUobi5wcm9wcy5zZXNzaW9uSWQsITAsZSksbi5zZXRXaWR0aCgpKX19LG4uaGFuZGxlS2V5RG93bj1mdW5jdGlvbihlKXtpZighKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5fHxlLmFsdEtleXx8ZS5jdHJsS2V5KSl7c3dpdGNoKGMoZSkpe2Nhc2UiZXNjIjpuLnByb3BzLmNoYW5nZUtleU1vdmUobi5wcm9wcy5zZXNzaW9uSWQsITApLGUucHJldmVudERlZmF1bHQoKSxuLnByb3BzLnNldERvY3NWaXNpYmxlKG4ucHJvcHMuc2Vzc2lvbklkLCExKX19fSxuLmhhbmRsZURvY3NSZXNpemVTdGFydD1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9bi5wcm9wcy5kb2NzLmRvY3NXaWR0aCxyPWUuY2xpZW50WC1sLmdldExlZnQoZS50YXJnZXQpLGk9ZnVuY3Rpb24oZSl7aWYoMD09PWUuYnV0dG9ucylyZXR1cm4gbygpO3ZhciB0PW4ucmVmLGk9ZS5jbGllbnRYLWwuZ2V0TGVmdCh0KS1yLGE9dC5jbGllbnRXaWR0aC1pLHM9d2luZG93LmlubmVyV2lkdGgtNTAsdT1zPGE/czphO3U8MTAwP24ucHJvcHMuc2V0RG9jc1Zpc2libGUobi5wcm9wcy5zZXNzaW9uSWQsITEsbi5wcm9wcy5kb2NzLmFjdGl2ZVRhYklkeCk6KG4ucHJvcHMuc2V0RG9jc1Zpc2libGUobi5wcm9wcy5zZXNzaW9uSWQsITAsbi5wcm9wcy5kb2NzLmFjdGl2ZVRhYklkeCksbi5wcm9wcy5jaGFuZ2VXaWR0aERvY3Mobi5wcm9wcy5zZXNzaW9uSWQsdSkpfSxvPWZ1bmN0aW9uKCl7bi5wcm9wcy5kb2NzLmRvY3NPcGVufHxuLnByb3BzLmNoYW5nZVdpZHRoRG9jcyhuLnByb3BzLnNlc3Npb25JZCx0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG8pLGk9bnVsbCxvPW51bGx9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsaSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbyl9LG4uaGFuZGxlTW91c2VNb3ZlPWZ1bmN0aW9uKGUpe24uY2xpZW50WD1lLmNsaWVudFgsbi5jbGllbnRZPWUuY2xpZW50WSxuLnByb3BzLmRvY3Mua2V5TW92ZSYmbi5jbGllbnRYIT09ZS5jbGllbnRYJiZuLmNsaWVudFkhPT1lLmNsaWVudFkmJm4ucHJvcHMuY2hhbmdlS2V5TW92ZShuLnByb3BzLnNlc3Npb25JZCwhMSl9LHdpbmRvdy5kPW4sbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbihlKXshZS5kb2NzLmFjdGl2ZVRhYklkeCYmdGhpcy5wcm9wcy5kb2NzLmFjdGl2ZVRhYklkeCYmdGhpcy5wcm9wcy5zZXREb2NzVmlzaWJsZSh0aGlzLnByb3BzLnNlc3Npb25JZCwhMCx0aGlzLnByb3BzLmRvY3MuYWN0aXZlVGFiSWR4KSxlLmFjdGl2ZVRhYklkeCYmIXRoaXMucHJvcHMuZG9jcy5hY3RpdmVUYWJJZHgmJnRoaXMucHJvcHMuc2V0RG9jc1Zpc2libGUodGhpcy5wcm9wcy5zZXNzaW9uSWQsITEpLHRoaXMuc2V0V2lkdGgoKSx0aGlzLnByb3BzLmRvY3MuYWN0aXZlVGFiSWR4IT09ZS5kb2NzLmFjdGl2ZVRhYklkeCYmdGhpcy5yZWZDb250ZW50Q29udGFpbmVyJiZ0aGlzLnJlZkNvbnRlbnRDb250YWluZXIuZm9jdXMoKX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5kb2NzLmFjdGl2ZVRhYklkeHx8dGhpcy5wcm9wcy5zZXREb2NzVmlzaWJsZSh0aGlzLnByb3BzLnNlc3Npb25JZCwhMSksdGhpcy5zZXRXaWR0aCgpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5kb2NzLG49dC5kb2NzT3BlbixyPXQuZG9jc1dpZHRoLGk9dC5hY3RpdmVUYWJJZHgscz17d2lkdGg6bj9yOjB9LHU9biYmYS5DaGlsZHJlbi50b0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pW2ldO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoayx7b3BlbjpuLHN0eWxlOnMscmVmOnRoaXMuc2V0UmVmfSxhLmNyZWF0ZUVsZW1lbnQoVCxudWxsLGEuQ2hpbGRyZW4udG9BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gYS5jbG9uZUVsZW1lbnQodCxvKHt9LHQucHJvcHMse2tleTpuLG9uQ2xpY2s6ZS5oYW5kbGVUYWJDbGljayhuKSxhY3RpdmU6bj09PWl9KSl9KSksYS5jcmVhdGVFbGVtZW50KF8se29uTW91c2VEb3duOnRoaXMuaGFuZGxlRG9jc1Jlc2l6ZVN0YXJ0fSksYS5jcmVhdGVFbGVtZW50KE8se2luZGV4Oml9KSxhLmNyZWF0ZUVsZW1lbnQoQSx7b25LZXlEb3duOnRoaXMuaGFuZGxlS2V5RG93bixvbk1vdXNlTW92ZTp0aGlzLmhhbmRsZU1vdXNlTW92ZSx0YWJJbmRleDppLGNvbG9yOnUmJnUucHJvcHMuYWN0aXZlQ29sb3IscmVmOnRoaXMuc2V0Q29udGVudENvbnRhaW5lclJlZn0sdSYmYS5jbG9uZUVsZW1lbnQodS5wcm9wcy5jaGlsZHJlbixvKHt9LHUucHJvcHMse3JlZjp0aGlzLnNldEFjdGl2ZUNvbnRlbnRSZWYsc2V0V2lkdGg6dGhpcy5zZXRXaWR0aH0pKSkpfSx0fShhLkNvbXBvbmVudCksdj1mdW5jdGlvbihlKXtyZXR1cm4gcy5iaW5kQWN0aW9uQ3JlYXRvcnMoe2FkZFN0YWNrOnAuYWRkU3RhY2ssdG9nZ2xlRG9jczpwLnRvZ2dsZURvY3MsY2hhbmdlV2lkdGhEb2NzOnAuY2hhbmdlV2lkdGhEb2NzLGNoYW5nZUtleU1vdmU6cC5jaGFuZ2VLZXlNb3ZlLHNldERvY3NWaXNpYmxlOnAuc2V0RG9jc1Zpc2libGV9LGUpfSxiPWguY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHtkb2NzOmYuZ2V0U2Vzc2lvbkRvY3Msc2Vzc2lvbklkOmQuZ2V0U2VsZWN0ZWRTZXNzaW9uSWRGcm9tUm9vdH0pLHg9dS5jb25uZWN0KGIsdixudWxsLHt3aXRoUmVmOiEwfSkoeSk7eC5UYWI9Zy5kZWZhdWx0LHQuZGVmYXVsdD14O3ZhciBDLEUsRCx3LFMsaz1tLnN0eWxlZCgiZGl2IikoQ3x8KEM9aShbIlxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm94LXNoYWRvdzogMCAwIDhweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwcHg7XG4gIHotaW5kZXg6ICIsIjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWY7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAuZG9jLXR5cGUtZGVzY3JpcHRpb24gcCB7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbiAgLmZpZWxkLW5hbWUge1xuICAgIGNvbG9yOiAjMWY2MWEwO1xuICB9XG4gIC50eXBlLW5hbWUge1xuICAgIGNvbG9yOiByZ2IoMjQ1LCAxNjAsIDApO1xuICB9XG4gIC5hcmctbmFtZSB7XG4gICAgY29sb3I6ICMxZjYxYTk7XG4gIH1cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICdTb3VyY2UgQ29kZSBQcm8nLCBtb25vc3BhY2U7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHBhZGRpbmc6IDFweCAycHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA2KTtcbiAgfVxuIl0sWyJcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMHB4O1xuICB6LWluZGV4OiAiLCI7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLmRvYy10eXBlLWRlc2NyaXB0aW9uIHAge1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG4gIC5maWVsZC1uYW1lIHtcbiAgICBjb2xvcjogIzFmNjFhMDtcbiAgfVxuICAudHlwZS1uYW1lIHtcbiAgICBjb2xvcjogcmdiKDI0NSwgMTYwLCAwKTtcbiAgfVxuICAuYXJnLW5hbWUge1xuICAgIGNvbG9yOiAjMWY2MWE5O1xuICB9XG4gIGNvZGUge1xuICAgIGZvbnQtZmFtaWx5OiAnU291cmNlIENvZGUgUHJvJywgbW9ub3NwYWNlO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNik7XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUub3Blbj8yZTM6M30pLEE9bS5zdHlsZWQuZGl2KEV8fChFPWkoWyJcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZXR0ZXItc3BhY2luZzogMC4zcHg7XG4gIGJveC1zaGFkb3c6IC0xcHggMXB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgb3V0bGluZTogbm9uZTtcbiAgJjo6YmVmb3JlIHtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMztcbiAgICBsZWZ0OiAwcHg7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDZweDtcbiAgfVxuIl0sWyJcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZXR0ZXItc3BhY2luZzogMC4zcHg7XG4gIGJveC1zaGFkb3c6IC0xcHggMXB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgb3V0bGluZTogbm9uZTtcbiAgJjo6YmVmb3JlIHtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMztcbiAgICBsZWZ0OiAwcHg7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDZweDtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzW2UuY29sb3JdfHwiIzNENTg2NiJ9KSxfPW0uc3R5bGVkLmRpdihEfHwoRD1pKFsiXG4gIGN1cnNvcjogY29sLXJlc2l6ZTtcbiAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGxlZnQ6IC01cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMHB4O1xuICB6LWluZGV4OiAxMDtcbiJdLFsiXG4gIGN1cnNvcjogY29sLXJlc2l6ZTtcbiAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGxlZnQ6IC01cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMHB4O1xuICB6LWluZGV4OiAxMDtcbiJdKSkpLFQ9bS5zdHlsZWQuZGl2KHd8fCh3PWkoWyJcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6IDI7XG4gIGhlaWdodDogMDtcbiAgdG9wOiAxMjlweDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAyO1xuICBoZWlnaHQ6IDA7XG4gIHRvcDogMTI5cHg7XG4iXSkpKSxPPW0uc3R5bGVkLmRpdihTfHwoUz1pKFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAyMHB4O1xuICB6LWluZGV4OiAxO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgY29udGVudDogJyc7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAyMHB4O1xuICB6LWluZGV4OiAxO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgY29udGVudDogJyc7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmluZGV4PyJsaW5lYXItZ3JhZGllbnQoXG5cdFx0dG8gcmlnaHQsXG5cdFx0cmdiYSgyNTUsIDI1NSwgMjU1LCAxKSAzMCUsXG5cdFx0cmdiYSgyNTUsIDI1NSwgMjU1LCAwKSkiOiJ0cmFuc3BhcmVudCJ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89big0MCksYT1uKDkpLHM9big2NyksdT1uKDE0MyksYz1uKDM2KSxsPW4oMTIpLHA9big2OCksZj1uKDgpLGQ9bigyOTIpLGg9big2MzcpLG09big2MzgpLGc9big2MzkpLHk9bigxNyksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLnNldFJlZj1mdW5jdGlvbihlKXtuLnJlZj1lfSx3aW5kb3cuZD1uLG59cmV0dXJuIHIodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpeyF0aGlzLnByb3BzLnNjaGVtYSYmZS5zY2hlbWEmJnRoaXMuc2V0V2lkdGgoZSl9LHQucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXRoaXMucHJvcHMpLHRoaXMucHJvcHMuc2V0V2lkdGgoZSl9LHQucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10aGlzLnByb3BzKSxlLmRvY3MuZG9jc1dpZHRofHxjLmNvbHVtbldpZHRofSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuc2V0V2lkdGgoKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLnByb3BzLG49dC5zY2hlbWEscj10LnNldHRpbmdzLG89dC5pc1BvbGxpbmdTY2hlbWE7cmV0dXJuIHZvaWQgMD09PW4/ZT1pLmNyZWF0ZUVsZW1lbnQodS5kZWZhdWx0LG51bGwpOm51bGw9PT1uJiYoZT1pLmNyZWF0ZUVsZW1lbnQoZC5FcnJvckNvbnRhaW5lcixudWxsLCJObyBTY2hlbWEgQXZhaWxhYmxlIikpLGkuY3JlYXRlRWxlbWVudChoLlNjaGVtYUV4cGxvcmVyQ29udGFpbmVyLHtyZWY6dGhpcy5zZXRSZWZ9LGU/aS5jcmVhdGVFbGVtZW50KGguU0RMQ29sdW1uLG51bGwsZSk6aS5jcmVhdGVFbGVtZW50KGguU0RMQ29sdW1uLHt3aWR0aDp0aGlzLnByb3BzLmRvY3MuZG9jc1dpZHRofHxjLmNvbHVtbldpZHRoLTF9LGkuY3JlYXRlRWxlbWVudChtLmRlZmF1bHQse3NjaGVtYTpufSksaS5jcmVhdGVFbGVtZW50KGcuZGVmYXVsdCx7c2NoZW1hOm4sc2V0dGluZ3M6cixpc1BvbGxpbmdTY2hlbWE6byx3aWR0aDp0aGlzLnByb3BzLmRvY3MuZG9jc1dpZHRofHxjLmNvbHVtbldpZHRofSkpKX0sdH0oaS5Db21wb25lbnQpLGI9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uYmluZEFjdGlvbkNyZWF0b3JzKHt0b2dnbGVEb2NzOnMudG9nZ2xlRG9jcyxjaGFuZ2VXaWR0aERvY3M6cy5jaGFuZ2VXaWR0aERvY3Msc2V0RG9jc1Zpc2libGU6cy5zZXREb2NzVmlzaWJsZX0sZSl9LHg9Zi5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioe3NldHRpbmdzOnkuZ2V0U2V0dGluZ3MsZG9jczpwLmdldFNlc3Npb25Eb2NzLHNlc3Npb25JZDpsLmdldFNlbGVjdGVkU2Vzc2lvbklkRnJvbVJvb3QsaXNQb2xsaW5nU2NoZW1hOmwuZ2V0SXNQb2xsaW5nU2NoZW1hfSk7dC5kZWZhdWx0PWEuY29ubmVjdCh4LGIsbnVsbCx7d2l0aFJlZjohMH0pKHYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMCksbz1uKDEpLGE9bigzNik7dC5TY2hlbWFFeHBsb3JlckNvbnRhaW5lcj1vLnN0eWxlZC5kaXYodXx8KHU9cihbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHBhZGRpbmc6IDBweCA4cHggOHB4IDhweDtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBmb250LWZhbWlseTogIiwiO1xuICBmb250LXNpemU6ICIsIjtcbiAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuIl0sWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBwYWRkaW5nOiAwcHggOHB4IDhweCA4cHg7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgZm9udC1mYW1pbHk6ICIsIjtcbiAgZm9udC1zaXplOiAiLCI7XG4gIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuImRhcmsiPT09ZS50aGVtZS5tb2RlP2UudGhlbWUuZWRpdG9yQ29sb3Vycy5lZGl0b3JCYWNrZ3JvdW5kOiJ3aGl0ZSJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNldHRpbmdzWyJlZGl0b3IuZm9udEZhbWlseSJdfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zZXR0aW5nc1siZWRpdG9yLmZvbnRTaXplIl0rInB4In0pO3ZhciBzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLndpZHRoLHI9dm9pZCAwPT09bj9hLmNvbHVtbldpZHRoOm47cmV0dXJuIGkuY3JlYXRlRWxlbWVudChsLHtzdHlsZTp7d2lkdGg6cn19LHQpfTt0LlNETENvbHVtbj1zO3ZhciB1LGMsbD1vLnN0eWxlZCgiZGl2IikoY3x8KGM9cihbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxIDAgYXV0bztcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAiLCI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxIDAgYXV0bztcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAiLCI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuYmxhY2sxMH0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigxKSxzPW4oMTQyKSx1PW4oMjkzKSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIG4uaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7aWYoIW4ubm9kZS5jb250YWlucyhlLnRhcmdldCkpcmV0dXJuIG4uc2V0U3RhdGUoe29wZW46ITF9KX0sbi5zaG93T3B0aW9ucz1mdW5jdGlvbigpe24uc2V0U3RhdGUoe29wZW46IW4uc3RhdGUub3Blbn0pfSxuLnByaW50U0RMPWZ1bmN0aW9uKCl7cmV0dXJuIHUuZG93bmxvYWRTY2hlbWEobi5wcm9wcy5zY2hlbWEsInNkbCIpfSxuLnByaW50SW50cm9zcGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB1LmRvd25sb2FkU2NoZW1hKG4ucHJvcHMuc2NoZW1hLCJqc29uIil9LG4uc2V0UmVmPWZ1bmN0aW9uKGUpe24ubm9kZT1lfSxuLnN0YXRlPXtvcGVuOiExfSxufXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50PWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmhhbmRsZUNsaWNrLCExKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlQ2xpY2ssITEpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLm9wZW47cmV0dXJuIG8uY3JlYXRlRWxlbWVudChtLHtyZWY6dGhpcy5zZXRSZWZ9LG8uY3JlYXRlRWxlbWVudCh5LG51bGwsIlNjaGVtYSIpLG8uY3JlYXRlRWxlbWVudChnLG51bGwsby5jcmVhdGVFbGVtZW50KHYse29uQ2xpY2s6dGhpcy5zaG93T3B0aW9ucyxvcGVuOmV9LCJEb3dubG9hZCIpLGUmJm8uY3JlYXRlRWxlbWVudChvLkZyYWdtZW50LG51bGwsby5jcmVhdGVFbGVtZW50KGIse29uQ2xpY2s6dGhpcy5wcmludEludHJvc3BlY3Rpb259LCJKU09OIiksby5jcmVhdGVFbGVtZW50KGIse29uQ2xpY2s6dGhpcy5wcmludFNETH0sIlNETCIpKSkpfSx0fShvLkNvbXBvbmVudCk7dC5kZWZhdWx0PWM7dmFyIGwscCxmLGQsaCxtPWEuc3R5bGVkLmRpdihsfHwobD1pKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGhlaWdodDogNjRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1yaWdodDogMTA4cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgb3V0bGluZTogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBoZWlnaHQ6IDY0cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tcmlnaHQ6IDEwOHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuIl0pKSksZz1hLnN0eWxlZC5kaXYocHx8KHA9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTZweDtcbiAgcmlnaHQ6IDJlbTtcbiAgd2lkdGg6IDEwOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTZweDtcbiAgcmlnaHQ6IDJlbTtcbiAgd2lkdGg6IDEwOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4iXSkpKSx5PWEuc3R5bGVkLmRpdihmfHwoZj1pKFsiXG4gIGNvbG9yOiAiLCI7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7XG4gIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50O1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICB1c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xuICBwYWRkaW5nOiAxNnB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4iXSxbIlxuICBjb2xvcjogIiwiO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50O1xuICBmb250LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWYgIWltcG9ydGFudDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmUgIWltcG9ydGFudDtcbiAgcGFkZGluZzogMTZweDtcbiAgcGFkZGluZy1yaWdodDogNXB4O1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4geChlKS50aXRsZX0pLHY9YS5zdHlsZWQocy5CdXR0b24pKGR8fChkPWkoWyJcbiAgZmxleDogMTtcbiAgY29sb3I6ICIsIjtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBoZWlnaHQ6IDMycHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICIsIjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIH1cbiJdLFsiXG4gIGZsZXg6IDE7XG4gIGNvbG9yOiAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgaGVpZ2h0OiAzMnB4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAiLCI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiB4KGUpLmRvd25sb2FkLnRleHR9LGZ1bmN0aW9uKGUpe3JldHVybiB4KGUpLmRvd25sb2FkLmJ1dHRvbn0sZnVuY3Rpb24oZSl7cmV0dXJuIHgoZSkuYnV0dG9uVGV4dEhvdmVyfSxmdW5jdGlvbihlKXtyZXR1cm4geChlKS5idXR0b25Ib3Zlcn0pLGI9YS5zdHlsZWQodikoaHx8KGg9aShbIlxuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IDBweDtcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xuICB6LWluZGV4OiAyMDAwO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IDBweDtcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xuICB6LWluZGV4OiAyMDAwO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiB4KGUpLmJ1dHRvbn0pLHg9ZnVuY3Rpb24oZSl7cmV0dXJuImRhcmsiPT09ZS50aGVtZS5tb2RlP3t0aXRsZToid2hpdGUiLHN1YnRpdGxlOiIjOEI5NTlDIixkb3dubG9hZDp7dGV4dDplLm9wZW4/IiM4Qjk1OUMiOiJ3aGl0ZSIsYnV0dG9uOmUudGhlbWUuY29sb3Vycy5kYXJrQmx1ZX0sYnV0dG9uVGV4dDoid2hpdGUiLGJ1dHRvbjplLnRoZW1lLmNvbG91cnMuZGFya0JsdWUsYnV0dG9uSG92ZXI6IiMyQjNDNDgiLGJ1dHRvblRleHRIb3Zlcjoid2hpdGUifTp7dGl0bGU6ZS50aGVtZS5jb2xvdXJzLmRhcmtCbHVlLHN1YnRpdGxlOiJyZ2JhKDYxLCA4OCwgMTAyLCAwLjUpIixkb3dubG9hZDp7dGV4dDplLm9wZW4/InJnYmEoNjEsIDg4LCAxMDIsIDAuNSkiOmUudGhlbWUuY29sb3Vycy5kYXJrQmx1ZSxidXR0b246IiNmNmY2ZjYifSxidXR0b25UZXh0OmUudGhlbWUuY29sb3Vycy5kYXJrQmx1ZSxidXR0b246IiNmNmY2ZjYiLGJ1dHRvbkhvdmVyOiIjRURFREVEIixidXR0b25UZXh0SG92ZXI6ZS50aGVtZS5jb2xvdXJzLmRhcmtCbHVlfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9big3KSxzPW4oMzcpLHU9bigxKSxjPW4oMjkzKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uaGFuZGxlU2Nyb2xsPWZ1bmN0aW9uKGUpe3JldHVybiBlLmRvYy5zY3JvbGxUb3A+MD9uLnNldFN0YXRlKHtvdmVyZmxvd1k6ITB9KTpuLnNldFN0YXRlKHtvdmVyZmxvd1k6ITF9KX0sbi5zZXRSZWY9ZnVuY3Rpb24oZSl7bi5ub2RlPWV9LG4uc3RhdGU9e292ZXJmbG93WTohMX0sbi5jYWNoZWRWYWx1ZT1lLnZhbHVlfHwiIixuLnByb3BzLmdldFJlZiYmbi5wcm9wcy5nZXRSZWYobiksbn1yZXR1cm4gcihpLHQpLGkucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIHQ9bigyKTtuKDcwKSxuKDI3MyksbigyODMpO3ZhciByPVtdO3IucHVzaCgiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpLHRoaXMuZWRpdG9yPXQodGhpcy5ub2RlLHthdXRvZm9jdXM6ITEsdmFsdWU6Yy5nZXRTREwodGhpcy5wcm9wcy5zY2hlbWEsdGhpcy5wcm9wcy5zZXR0aW5nc1sic2NoZW1hLmRpc2FibGVDb21tZW50cyJdKXx8IiIsbGluZU51bWJlcnM6ITEsc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc6ITEsdGFiU2l6ZToxLG1vZGU6ImdyYXBocWwiLHRoZW1lOiJncmFwaGlxbCIsa2V5TWFwOiJzdWJsaW1lIixyZWFkT25seTohMCxndXR0ZXJzOnJ9KSxlLmVkaXRvcj10aGlzLmVkaXRvcix0aGlzLmVkaXRvci5vbigic2Nyb2xsIix0aGlzLmhhbmRsZVNjcm9sbCksdGhpcy5lZGl0b3IucmVmcmVzaCgpfSxpLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bigyKTtpZigodGhpcy5wcm9wcy5zY2hlbWEmJmEucHJpbnRTY2hlbWEodGhpcy5wcm9wcy5zY2hlbWEpKSE9PShlLnNjaGVtYSYmYS5wcmludFNjaGVtYShlLnNjaGVtYSkpKXt2YXIgcj10aGlzLmVkaXRvci5nZXRTY3JvbGxJbmZvKCk7dGhpcy5jYWNoZWRWYWx1ZT1jLmdldFNETCh0aGlzLnByb3BzLnNjaGVtYSx0aGlzLnByb3BzLnNldHRpbmdzWyJzY2hlbWEuZGlzYWJsZUNvbW1lbnRzIl0pfHwiIix0aGlzLmVkaXRvci5zZXRWYWx1ZShjLmdldFNETCh0aGlzLnByb3BzLnNjaGVtYSx0aGlzLnByb3BzLnNldHRpbmdzWyJzY2hlbWEuZGlzYWJsZUNvbW1lbnRzIl0pKSx0aGlzLnByb3BzLmlzUG9sbGluZ1NjaGVtYSYmdGhpcy5lZGl0b3Iuc2Nyb2xsVG8oci5sZWZ0LHIudG9wKSx0LnNpZ25hbCh0aGlzLmVkaXRvciwiY2hhbmdlIix0aGlzLmVkaXRvcil9dGhpcy5wcm9wcy53aWR0aCE9PWUud2lkdGgmJnRoaXMuZWRpdG9yLnJlZnJlc2goKSx0aGlzLnByb3BzLnNldHRpbmdzWyJzY2hlbWEuZGlzYWJsZUNvbW1lbnRzIl0hPT1lLnNldHRpbmdzWyJzY2hlbWEuZGlzYWJsZUNvbW1lbnRzIl0mJnRoaXMuZWRpdG9yLnJlZnJlc2goKX0saS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt0aGlzLnByb3BzLnNlc3Npb25JZCE9PWUuc2Vzc2lvbklkJiZ0aGlzLmVkaXRvci5zY3JvbGxUbygwLDApfSxpLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuZWRpdG9yLm9mZigic2Nyb2xsIiksdGhpcy5lZGl0b3I9bnVsbH0saS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5vdmVyZmxvd1k7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChzLmRlZmF1bHQsbnVsbCxlJiZvLmNyZWF0ZUVsZW1lbnQoaCxudWxsKSxvLmNyZWF0ZUVsZW1lbnQoZCx7cmVmOnRoaXMuc2V0UmVmfSkpfSxpLnByb3RvdHlwZS5nZXRDb2RlTWlycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdG9yfSxpLnByb3RvdHlwZS5nZXRDbGllbnRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlJiZ0aGlzLm5vZGUuY2xpZW50SGVpZ2h0fSxpfShvLlB1cmVDb21wb25lbnQpO3QuZGVmYXVsdD1sO3ZhciBwLGYsZD11LnN0eWxlZC5kaXYocHx8KHA9aShbIlxuICBmbGV4OiAxO1xuICBoZWlnaHQ6IGF1dG87XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAuQ29kZU1pcnJvciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgfVxuIl0sWyJcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgLkNvZGVNaXJyb3Ige1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuImRhcmsiPT09ZS50aGVtZS5tb2RlP2UudGhlbWUuZWRpdG9yQ29sb3Vycy5lZGl0b3JCYWNrZ3JvdW5kOiJ3aGl0ZSJ9KSxoPXUuc3R5bGVkLmRpdihmfHwoZj1pKFsiXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJveC1zaGFkb3c6IDBweCAxcHggM3B4IHJnYmEoMTcsIDE3LCAxNywgMC4xKTtcbiAgei1pbmRleDogMTAwMDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJveC1zaGFkb3c6IDBweCAxcHggM3B4IHJnYmEoMTcsIDE3LCAxNywgMC4xKTtcbiAgei1pbmRleDogMTAwMDtcbiJdKSkpfSkuY2FsbCh0LG4oMTEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oNDApLHM9big5KSx1PW4oMjkxKSxjPW4oNjQxKSxsPW4oMjk5KSxwPW4oNjcpLGY9bigxNDMpLGQ9bigzNiksaD1uKDY5NiksbT1uKDY2KSxnPW4oNjgpLHk9bigxMiksdj1uKDgpLGI9bigyOTIpLHg9bigxKSxDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIG4uc2V0UmVmPWZ1bmN0aW9uKGUpe24ucmVmPWV9LG4uc2hvd0RvY0Zyb21UeXBlPWZ1bmN0aW9uKGUpe24ucHJvcHMuYWRkU3RhY2sobi5wcm9wcy5zZXNzaW9uSWQsZSwwLDApfSxuLmhhbmRsZVNlYXJjaD1mdW5jdGlvbihlKXtuLnNldFN0YXRlKHtzZWFyY2hWYWx1ZTplfSl9LG4uaGFuZGxlS2V5RG93bj1mdW5jdGlvbihlKXtpZighKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5fHxlLmFsdEtleXx8ZS5jdHJsS2V5KSl7ZS5wcmV2ZW50RGVmYXVsdCgpLG4ucHJvcHMuY2hhbmdlS2V5TW92ZShuLnByb3BzLnNlc3Npb25JZCwhMCk7dmFyIHQ9bi5wcm9wcy5kb2NzLm5hdlN0YWNrLmxlbmd0aD4wJiZuLnByb3BzLmRvY3MubmF2U3RhY2tbbi5wcm9wcy5kb2NzLm5hdlN0YWNrLmxlbmd0aC0xXSxyPW4ucHJvcHMuZG9jcy5uYXZTdGFjay5sZW5ndGg+MCYmbi5wcm9wcy5kb2NzLm5hdlN0YWNrW24ucHJvcHMuZG9jcy5uYXZTdGFjay5sZW5ndGgtMl0saT11KGUpO3N3aXRjaChpKXtjYXNlImVzYyI6bi5wcm9wcy5zZXREb2NzVmlzaWJsZShuLnByb3BzLnNlc3Npb25JZCwhMSk7YnJlYWs7Y2FzZSJsZWZ0IjpyJiZuLnByb3BzLmFkZFN0YWNrKG4ucHJvcHMuc2Vzc2lvbklkLHIuZmllbGQsci54LHIueSk7YnJlYWs7Y2FzZSJyaWdodCI6aWYodCl7dmFyIG89bS5zZXJpYWxpemUobi5wcm9wcy5zY2hlbWEsdC5maWVsZCksYT1tLmdldEVsZW1lbnQobywwKTthJiZuLnByb3BzLmFkZFN0YWNrKG4ucHJvcHMuc2Vzc2lvbklkLGEsdC54KzEsMCl9ZWxzZXt2YXIgbz1tLnNlcmlhbGl6ZVJvb3Qobi5wcm9wcy5zY2hlbWEpLHM9bS5nZXRFbGVtZW50Um9vdChvLDApO3MmJm4ucHJvcHMuYWRkU3RhY2sobi5wcm9wcy5zZXNzaW9uSWQscywwLDApfWJyZWFrO2Nhc2UidXAiOmNhc2UiZG93biI6aWYocil7dmFyIG89bS5zZXJpYWxpemUobi5wcm9wcy5zY2hlbWEsci5maWVsZCkscz1tLmdldEVsZW1lbnQobywidXAiPT09aT90LnktMTp0LnkrMSk7cyYmbi5wcm9wcy5hZGRTdGFjayhuLnByb3BzLnNlc3Npb25JZCxzLHQueCwidXAiPT09aT90LnktMTp0LnkrMSl9ZWxzZXt2YXIgbz1tLnNlcmlhbGl6ZVJvb3Qobi5wcm9wcy5zY2hlbWEpLGM9dD90Lnk6MCxzPW0uZ2V0RWxlbWVudFJvb3QobywidXAiPT09aT9jLTE6YysxKTtzJiZuLnByb3BzLmFkZFN0YWNrKG4ucHJvcHMuc2Vzc2lvbklkLHMsMCwidXAiPT09aT9jLTE6YysxKX19fX0sbi5zdGF0ZT17c2VhcmNoVmFsdWU6IiIsd2lkdGhNYXA6e319LHdpbmRvdy5kPW4sbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7KHRoaXMucHJvcHMuZG9jcy5uYXZTdGFjay5sZW5ndGghPT1lLmRvY3MubmF2U3RhY2subGVuZ3RofHx0aGlzLnByb3BzLmRvY3MubmF2U3RhY2suc2xpY2UoLTEpWzBdIT09ZS5kb2NzLm5hdlN0YWNrLnNsaWNlKC0xKVswXXx8IXRoaXMucHJvcHMuc2NoZW1hJiZlLnNjaGVtYSkmJnRoaXMuc2V0V2lkdGgoZSl9LHQucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXRoaXMucHJvcHMpLHRoaXMucHJvcHMuc2V0V2lkdGgoZSl9LHQucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMucHJvcHMpLFt0aGlzLnN0YXRlLndpZHRoTWFwLnJvb3R8fGQuY29sdW1uV2lkdGhdLmNvbmNhdChlLmRvY3MubmF2U3RhY2subWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnN0YXRlLndpZHRoTWFwW2UuZmllbGQucGF0aF18fGQuY29sdW1uV2lkdGh9KSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0sMCl9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5zZXRXaWR0aCgpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10aGlzLnByb3BzLmRvY3MubmF2U3RhY2sscj10aGlzLnByb3BzLnNjaGVtYTtyZXR1cm4gdm9pZCAwPT09cj9lPW8uY3JlYXRlRWxlbWVudChmLmRlZmF1bHQsbnVsbCk6bnVsbD09PXImJihlPW8uY3JlYXRlRWxlbWVudChiLkVycm9yQ29udGFpbmVyLG51bGwsIk5vIFNjaGVtYSBBdmFpbGFibGUiKSksby5jcmVhdGVFbGVtZW50KFMse29uS2V5RG93bjp0aGlzLmhhbmRsZUtleURvd24sdGFiSW5kZXg6MCxyZWY6dGhpcy5zZXRSZWZ9LGUmJm8uY3JlYXRlRWxlbWVudChsLmRlZmF1bHQsbnVsbCxlKSwhZSYmciYmby5jcmVhdGVFbGVtZW50KGguZGVmYXVsdCx7c2NoZW1hOnIsd2lkdGg6dGhpcy5zdGF0ZS53aWR0aE1hcC5yb290fHxkLmNvbHVtbldpZHRoLTEsc2VhcmNoVmFsdWU6dGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZSxoYW5kbGVTZWFyY2g6dGhpcy5oYW5kbGVTZWFyY2gsc2Vzc2lvbklkOnRoaXMucHJvcHMuc2Vzc2lvbklkfSksbi5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGwuZGVmYXVsdCx7a2V5Om4sd2lkdGg6dC5zdGF0ZS53aWR0aE1hcFtlLmZpZWxkLnBhdGhdfHxkLmNvbHVtbldpZHRofSxvLmNyZWF0ZUVsZW1lbnQoYy5kZWZhdWx0LHtzY2hlbWE6cixmaWVsZDplLmZpZWxkLGxldmVsOm4rMSxzZXNzaW9uSWQ6dC5wcm9wcy5zZXNzaW9uSWR9KSl9KSl9LHR9KG8uQ29tcG9uZW50KSxFPWZ1bmN0aW9uKGUpe3JldHVybiBhLmJpbmRBY3Rpb25DcmVhdG9ycyh7YWRkU3RhY2s6cC5hZGRTdGFjayx0b2dnbGVEb2NzOnAudG9nZ2xlRG9jcyxjaGFuZ2VXaWR0aERvY3M6cC5jaGFuZ2VXaWR0aERvY3MsY2hhbmdlS2V5TW92ZTpwLmNoYW5nZUtleU1vdmUsc2V0RG9jc1Zpc2libGU6cC5zZXREb2NzVmlzaWJsZX0sZSl9LEQ9di5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioe2RvY3M6Zy5nZXRTZXNzaW9uRG9jcyxzZXNzaW9uSWQ6eS5nZXRTZWxlY3RlZFNlc3Npb25JZEZyb21Sb290fSk7dC5kZWZhdWx0PXMuY29ubmVjdChELEUsbnVsbCx7d2l0aFJlZjohMH0pKEMpO3ZhciB3LFM9eC5zdHlsZWQuZGl2KHd8fCh3PWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICBvdmVyZmxvdy15OiBoaWRkZW47XG4gIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4iXSkpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oNjQyKSxzPW4oNyksdT1uKDY0NCksYz1uKDUxKSxsPW4oNjkyKSxwPW4oNjkzKSxmPW4oNjk0KSxkPW4oNjk1KSxoPW4oNjYpLG09bigyOTgpLGc9bigxKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuc3RhdGU9e3Nob3dEZXByZWNhdGVkOiExfSx0LnNldFJlZj1mdW5jdGlvbihlKXt0LnJlZj1lfSx0fXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvUmlnaHQoKX0sdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BzLmZpZWxkIT09ZS5maWVsZCYmKHRoaXMuc2Nyb2xsVG9SaWdodCgpLCEwKX0sdC5wcm90b3R5cGUuc2Nyb2xsVG9SaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVmLHQ9ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucGFyZW50Tm9kZTt4KHQsdC5zY3JvbGxXaWR0aCw1MCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5zY2hlbWEscj10LmZpZWxkLGk9dC5sZXZlbCx1PXIudHlwZXx8cixnPWguc2VyaWFsaXplKG4scik7dT1oLmdldERlZXBlclR5cGUodSk7dmFyIHksdj1nLmZpZWxkcy5sZW5ndGgrZy5pbnRlcmZhY2VzLmxlbmd0aCxiPWcuZmllbGRzLmxlbmd0aCtnLmludGVyZmFjZXMubGVuZ3RoK2cuYXJncy5sZW5ndGg7cmV0dXJuIHk9dSBpbnN0YW5jZW9mIHMuR3JhcGhRTEludGVyZmFjZVR5cGU/ImludGVyZmFjZSI6dSBpbnN0YW5jZW9mIHMuR3JhcGhRTFVuaW9uVHlwZT8idW5pb24iOnUgaW5zdGFuY2VvZiBzLkdyYXBoUUxFbnVtVHlwZT8iZW51bSI6InR5cGUiLG8uY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOnRoaXMuc2V0UmVmfSxvLmNyZWF0ZUVsZW1lbnQoQyxudWxsLG8uY3JlYXRlRWxlbWVudChjLmRlZmF1bHQse3R5cGU6cix4OmkseTotMSxjbGlja2FibGU6ITEsbGFzdEFjdGl2ZTohMX0pKSxvLmNyZWF0ZUVsZW1lbnQoRSx7Y2xhc3NOYW1lOiJkb2MtdHlwZS1kZXNjcmlwdGlvbiIsbWFya2Rvd246ci5kZXNjcmlwdGlvbnx8IiJ9KSxvLmNyZWF0ZUVsZW1lbnQobS5DYXRlZ29yeVRpdGxlLG51bGwseSsiIGRldGFpbHMiKSx1LmRlc2NyaXB0aW9uJiZ1LmRlc2NyaXB0aW9uLmxlbmd0aD4wJiZvLmNyZWF0ZUVsZW1lbnQoRSx7bWFya2Rvd246dS5kZXNjcmlwdGlvbnx8IiJ9KSx1IGluc3RhbmNlb2Ygcy5HcmFwaFFMU2NhbGFyVHlwZSYmby5jcmVhdGVFbGVtZW50KHAuZGVmYXVsdCx7dHlwZTp1fSksdSBpbnN0YW5jZW9mIHMuR3JhcGhRTEVudW1UeXBlJiZvLmNyZWF0ZUVsZW1lbnQoZi5kZWZhdWx0LHt0eXBlOnV9KSx1IGluc3RhbmNlb2Ygcy5HcmFwaFFMVW5pb25UeXBlJiZvLmNyZWF0ZUVsZW1lbnQoZC5kZWZhdWx0LHt0eXBlOnUsc2NoZW1hOm4sbGV2ZWw6aSxzZXNzaW9uSWQ6dGhpcy5wcm9wcy5zZXNzaW9uSWR9KSxnLmZpZWxkcyYmZy5maWVsZHMubGVuZ3RoPjAmJm8uY3JlYXRlRWxlbWVudChsLmRlZmF1bHQse3R5cGU6dSxmaWVsZHM6Zy5maWVsZHMsaW50ZXJmYWNlczpnLmludGVyZmFjZXMsbGV2ZWw6aSxzZXNzaW9uSWQ6dGhpcy5wcm9wcy5zZXNzaW9uSWR9KSxnLmFyZ3MmJmcuYXJncy5sZW5ndGg+MCYmby5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsby5jcmVhdGVFbGVtZW50KG0uQ2F0ZWdvcnlUaXRsZSxudWxsLCJhcmd1bWVudHMiKSxnLmFyZ3MubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG8uY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OnQubmFtZX0sby5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsby5jcmVhdGVFbGVtZW50KGEuZGVmYXVsdCx7YXJnOnQseDppLHk6bit2LHNlc3Npb25JZDplLnByb3BzLnNlc3Npb25JZH0pKSl9KSksZy5pbXBsZW1lbnRhdGlvbnMmJmcuaW1wbGVtZW50YXRpb25zLmxlbmd0aD4wJiZvLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxvLmNyZWF0ZUVsZW1lbnQobS5DYXRlZ29yeVRpdGxlLG51bGwsImltcGxlbWVudGF0aW9ucyIpLGcuaW1wbGVtZW50YXRpb25zLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYy5kZWZhdWx0LHtrZXk6ZS5uYW1lLHR5cGU6ZSx4OmkseTp0K2IsY29sbGFwc2FibGU6ITAsbGFzdEFjdGl2ZTohMX0pfSkpKX0sdH0oby5Db21wb25lbnQpO3QuZGVmYXVsdD15O3ZhciB2LGIseD1mdW5jdGlvbiBlKHQsbixyKXtpZighKHI8PTApKXt2YXIgaT1uLXQuc2Nyb2xsTGVmdCxvPWkvcioxMDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY3JvbGxMZWZ0PXQuc2Nyb2xsTGVmdCtvLHQuc2Nyb2xsTGVmdCE9PW4mJmUodCxuLHItMTApfSwxMCl9fSxDPWcuc3R5bGVkLmRpdih2fHwodj1pKFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuXG4gIC5kb2MtY2F0ZWdvcnktaXRlbSB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICB9XG4gIC5kb2MtY2F0ZWdvcnktaXRlbSAuZmllbGQtbmFtZSB7XG4gICAgY29sb3I6ICNmMjVjNTQ7XG4gIH1cbiAgZGl2IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuIl0sWyJcbiAgYmFja2dyb3VuZDogIiwiO1xuICBwYWRkaW5nLXRvcDogMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG5cbiAgLmRvYy1jYXRlZ29yeS1pdGVtIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIH1cbiAgLmRvYy1jYXRlZ29yeS1pdGVtIC5maWVsZC1uYW1lIHtcbiAgICBjb2xvcjogI2YyNWM1NDtcbiAgfVxuICBkaXYge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuYmxhY2swMn0pLEU9Zy5zdHlsZWQodS5kZWZhdWx0KShifHwoYj1pKFsiXG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcGFkZGluZzogMCAxNnB4IDIwcHggMTZweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiJdLFsiXG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcGFkZGluZzogMCAxNnB4IDIwcHggMTZweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiJdKSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5hcmcsbj1lLnNob3dEZWZhdWx0VmFsdWUscj1lLngscz1lLnk7cmV0dXJuIGkuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxpLmNyZWF0ZUVsZW1lbnQoYS5kZWZhdWx0LHt0eXBlOnQseDpyLHk6cyxsYXN0QWN0aXZlOiExLGFmdGVyTm9kZTp2b2lkIDAhPT10LmRlZmF1bHRWYWx1ZSYmITEhPT1uJiZpLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIiA9ICIsaS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJhcmctZGVmYXVsdC12YWx1ZSJ9LG8ucHJpbnQoby5hc3RGcm9tVmFsdWUodC5kZWZhdWx0VmFsdWUsdC50eXBlKSkpKX0pKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oNyksYT1uKDUxKTt0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuYXJnLG49ZS5zaG93RGVmYXVsdFZhbHVlO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQobCxudWxsLGEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiYXJnLW5hbWUifSx0Lm5hbWUpLCI6ICIsYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJ0eXBlLW5hbWUifSxpKHQudHlwZSkpLHZvaWQgMCE9PXQuZGVmYXVsdFZhbHVlJiYhMSE9PW4mJmEuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiID0gIixhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImFyZy1kZWZhdWx0LXZhbHVlIn0scy5wcmludChzLmFzdEZyb21WYWx1ZSh0LmRlZmF1bHRWYWx1ZSx0LnR5cGUpKSkpKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygcy5HcmFwaFFMTm9uTnVsbD9hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsaShlLm9mVHlwZSksIiEiKTplIGluc3RhbmNlb2Ygcy5HcmFwaFFMTGlzdD9hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIlsiLGkoZS5vZlR5cGUpLCJdIik6YS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLGUubmFtZSl9dmFyIG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9bigwKSxzPW4oNyksdT1uKDEpO3QuZGVmYXVsdD1yO3ZhciBjLGw9dS5zdHlsZWQuZGl2KGN8fChjPW8oWyJcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XG4iXSxbIlxuICBtYXJnaW4tbGVmdDogMTZweDtcbiJdKSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLHU9bigwKSxjPXIodSksbD1uKDE4KSxwPXIobCksZj1uKDY0NSksZD1yKGYpLGg9bmV3IGQuZGVmYXVsdCxtPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaSh0aGlzLHQpLG8odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gYSh0LGUpLHModCxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9wcy5tYXJrZG93biE9PWUubWFya2Rvd259fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5tYXJrZG93bjtyZXR1cm4gZT9jLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRoaXMucHJvcHMuY2xhc3NOYW1lLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6aC5yZW5kZXIoZSl9fSk6Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCl9fV0pLHR9KGMuZGVmYXVsdC5Db21wb25lbnQpO20ucHJvcFR5cGVzPXttYXJrZG93bjpwLmRlZmF1bHQuc3RyaW5nLGNsYXNzTmFtZTpwLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHQ9bX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9big2NDYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4heS50ZXN0KHQpfHwhIXYudGVzdCh0KX1mdW5jdGlvbiBpKGUpe3ZhciB0PWgucGFyc2UoZSwhMCk7aWYodC5ob3N0bmFtZSYmKCF0LnByb3RvY29sfHxiLmluZGV4T2YodC5wcm90b2NvbCk+PTApKXRyeXt0Lmhvc3RuYW1lPW0udG9BU0NJSSh0Lmhvc3RuYW1lKX1jYXRjaChlKXt9cmV0dXJuIGguZW5jb2RlKGguZm9ybWF0KHQpKX1mdW5jdGlvbiBvKGUpe3ZhciB0PWgucGFyc2UoZSwhMCk7aWYodC5ob3N0bmFtZSYmKCF0LnByb3RvY29sfHxiLmluZGV4T2YodC5wcm90b2NvbCk+PTApKXRyeXt0Lmhvc3RuYW1lPW0udG9Vbmljb2RlKHQuaG9zdG5hbWUpfWNhdGNoKGUpe31yZXR1cm4gaC5kZWNvZGUoaC5mb3JtYXQodCkpfWZ1bmN0aW9uIGEoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBhKSlyZXR1cm4gbmV3IGEoZSx0KTt0fHxzLmlzU3RyaW5nKGUpfHwodD1lfHx7fSxlPSJkZWZhdWx0IiksdGhpcy5pbmxpbmU9bmV3IGYsdGhpcy5ibG9jaz1uZXcgcCx0aGlzLmNvcmU9bmV3IGwsdGhpcy5yZW5kZXJlcj1uZXcgYyx0aGlzLmxpbmtpZnk9bmV3IGQsdGhpcy52YWxpZGF0ZUxpbms9cix0aGlzLm5vcm1hbGl6ZUxpbms9aSx0aGlzLm5vcm1hbGl6ZUxpbmtUZXh0PW8sdGhpcy51dGlscz1zLHRoaXMuaGVscGVycz1zLmFzc2lnbih7fSx1KSx0aGlzLm9wdGlvbnM9e30sdGhpcy5jb25maWd1cmUoZSksdCYmdGhpcy5zZXQodCl9dmFyIHM9big1KSx1PW4oNjQ5KSxjPW4oNjUzKSxsPW4oNjU0KSxwPW4oNjYyKSxmPW4oNjc2KSxkPW4oMjY3KSxoPW4oODgpLG09bigyNzEpLGc9e2RlZmF1bHQ6big2ODkpLHplcm86big2OTApLGNvbW1vbm1hcms6big2OTEpfSx5PS9eKHZic2NyaXB0fGphdmFzY3JpcHR8ZmlsZXxkYXRhKTovLHY9L15kYXRhOmltYWdlXC8oZ2lmfHBuZ3xqcGVnfHdlYnApOy8sYj1bImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiJdO2EucHJvdG90eXBlLnNldD1mdW5jdGlvbihlKXtyZXR1cm4gcy5hc3NpZ24odGhpcy5vcHRpb25zLGUpLHRoaXN9LGEucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXM7aWYocy5pc1N0cmluZyhlKSYmKHQ9ZSwhKGU9Z1t0XSkpKXRocm93IG5ldyBFcnJvcignV3JvbmcgYG1hcmtkb3duLWl0YCBwcmVzZXQgIicrdCsnIiwgY2hlY2sgbmFtZScpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiV3JvbmcgYG1hcmtkb3duLWl0YCBwcmVzZXQsIGNhbid0IGJlIGVtcHR5Iik7cmV0dXJuIGUub3B0aW9ucyYmbi5zZXQoZS5vcHRpb25zKSxlLmNvbXBvbmVudHMmJk9iamVjdC5rZXlzKGUuY29tcG9uZW50cykuZm9yRWFjaChmdW5jdGlvbih0KXtlLmNvbXBvbmVudHNbdF0ucnVsZXMmJm5bdF0ucnVsZXIuZW5hYmxlT25seShlLmNvbXBvbmVudHNbdF0ucnVsZXMpLGUuY29tcG9uZW50c1t0XS5ydWxlczImJm5bdF0ucnVsZXIyLmVuYWJsZU9ubHkoZS5jb21wb25lbnRzW3RdLnJ1bGVzMil9KSx0aGlzfSxhLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLFsiY29yZSIsImJsb2NrIiwiaW5saW5lIl0uZm9yRWFjaChmdW5jdGlvbih0KXtuPW4uY29uY2F0KHRoaXNbdF0ucnVsZXIuZW5hYmxlKGUsITApKX0sdGhpcyksbj1uLmNvbmNhdCh0aGlzLmlubGluZS5ydWxlcjIuZW5hYmxlKGUsITApKTt2YXIgcj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbi5pbmRleE9mKGUpPDB9KTtpZihyLmxlbmd0aCYmIXQpdGhyb3cgbmV3IEVycm9yKCJNYXJrZG93bkl0LiBGYWlsZWQgdG8gZW5hYmxlIHVua25vd24gcnVsZShzKTogIityKTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksWyJjb3JlIiwiYmxvY2siLCJpbmxpbmUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe249bi5jb25jYXQodGhpc1t0XS5ydWxlci5kaXNhYmxlKGUsITApKX0sdGhpcyksbj1uLmNvbmNhdCh0aGlzLmlubGluZS5ydWxlcjIuZGlzYWJsZShlLCEwKSk7dmFyIHI9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG4uaW5kZXhPZihlKTwwfSk7aWYoci5sZW5ndGgmJiF0KXRocm93IG5ldyBFcnJvcigiTWFya2Rvd25JdC4gRmFpbGVkIHRvIGRpc2FibGUgdW5rbm93biBydWxlKHMpOiAiK3IpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9W3RoaXNdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpO3JldHVybiBlLmFwcGx5KGUsdCksdGhpc30sYS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIiE9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZGF0YSBzaG91bGQgYmUgYSBTdHJpbmciKTt2YXIgbj1uZXcgdGhpcy5jb3JlLlN0YXRlKGUsdGhpcyx0KTtyZXR1cm4gdGhpcy5jb3JlLnByb2Nlc3Mobiksbi50b2tlbnN9LGEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fHt9LHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMucGFyc2UoZSx0KSx0aGlzLm9wdGlvbnMsdCl9LGEucHJvdG90eXBlLnBhcnNlSW5saW5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IHRoaXMuY29yZS5TdGF0ZShlLHRoaXMsdCk7cmV0dXJuIG4uaW5saW5lTW9kZT0hMCx0aGlzLmNvcmUucHJvY2VzcyhuKSxuLnRva2Vuc30sYS5wcm90b3R5cGUucmVuZGVySW5saW5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8e30sdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5wYXJzZUlubGluZShlLHQpLHRoaXMub3B0aW9ucyx0KX0sZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5Bbnk9bigyNjgpLHQuQ2M9bigyNjkpLHQuQ2Y9big2NDgpLHQuUD1uKDEzNiksdC5aPW4oMjcwKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9L1tceEFEXHUwNjAwLVx1MDYwNVx1MDYxQ1x1MDZERFx1MDcwRlx1MDhFMlx1MTgwRVx1MjAwQi1cdTIwMEZcdTIwMkEtXHUyMDJFXHUyMDYwLVx1MjA2NFx1MjA2Ni1cdTIwNkZcdUZFRkZcdUZGRjktXHVGRkZCXXxcdUQ4MDRcdURDQkR8XHVEODJGW1x1RENBMC1cdURDQTNdfFx1RDgzNFtcdURENzMtXHVERDdBXXxcdURCNDBbXHVEQzAxXHVEQzIwLVx1REM3Rl0vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QucGFyc2VMaW5rTGFiZWw9big2NTApLHQucGFyc2VMaW5rRGVzdGluYXRpb249big2NTEpLHQucGFyc2VMaW5rVGl0bGU9big2NTIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz0tMSx1PWUucG9zTWF4LGM9ZS5wb3M7Zm9yKGUucG9zPXQrMSxyPTE7ZS5wb3M8dTspe2lmKDkzPT09KG89ZS5zcmMuY2hhckNvZGVBdChlLnBvcykpJiYwPT09LS1yKXtpPSEwO2JyZWFrfWlmKGE9ZS5wb3MsZS5tZC5pbmxpbmUuc2tpcFRva2VuKGUpLDkxPT09bylpZihhPT09ZS5wb3MtMSlyKys7ZWxzZSBpZihuKXJldHVybiBlLnBvcz1jLC0xfXJldHVybiBpJiYocz1lLnBvcyksZS5wb3M9YyxzfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUpLmlzU3BhY2UsaT1uKDUpLnVuZXNjYXBlQWxsO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIG8sYSxzPXQsdT17b2s6ITEscG9zOjAsbGluZXM6MCxzdHI6IiJ9O2lmKDYwPT09ZS5jaGFyQ29kZUF0KHQpKXtmb3IodCsrO3Q8bjspe2lmKDEwPT09KG89ZS5jaGFyQ29kZUF0KHQpKXx8cihvKSlyZXR1cm4gdTtpZig2Mj09PW8pcmV0dXJuIHUucG9zPXQrMSx1LnN0cj1pKGUuc2xpY2UocysxLHQpKSx1Lm9rPSEwLHU7OTI9PT1vJiZ0KzE8bj90Kz0yOnQrK31yZXR1cm4gdX1mb3IoYT0wO3Q8biYmMzIhPT0obz1lLmNoYXJDb2RlQXQodCkpJiYhKG88MzJ8fDEyNz09PW8pOylpZig5Mj09PW8mJnQrMTxuKXQrPTI7ZWxzZXtpZig0MD09PW8mJmErKyw0MT09PW8pe2lmKDA9PT1hKWJyZWFrO2EtLX10Kyt9cmV0dXJuIHM9PT10P3U6MCE9PWE/dToodS5zdHI9aShlLnNsaWNlKHMsdCkpLHUubGluZXM9MCx1LnBvcz10LHUub2s9ITAsdSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSkudW5lc2NhcGVBbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxvLGE9MCxzPXQsdT17b2s6ITEscG9zOjAsbGluZXM6MCxzdHI6IiJ9O2lmKHQ+PW4pcmV0dXJuIHU7aWYoMzQhPT0obz1lLmNoYXJDb2RlQXQodCkpJiYzOSE9PW8mJjQwIT09bylyZXR1cm4gdTtmb3IodCsrLDQwPT09byYmKG89NDEpO3Q8bjspe2lmKChpPWUuY2hhckNvZGVBdCh0KSk9PT1vKXJldHVybiB1LnBvcz10KzEsdS5saW5lcz1hLHUuc3RyPXIoZS5zbGljZShzKzEsdCkpLHUub2s9ITAsdTsxMD09PWk/YSsrOjkyPT09aSYmdCsxPG4mJih0KyssMTA9PT1lLmNoYXJDb2RlQXQodCkmJmErKyksdCsrfXJldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5ydWxlcz1pKHt9LHMpfXZhciBpPW4oNSkuYXNzaWduLG89big1KS51bmVzY2FwZUFsbCxhPW4oNSkuZXNjYXBlSHRtbCxzPXt9O3MuY29kZV9pbmxpbmU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz1lW3RdO3JldHVybiI8Y29kZSIraS5yZW5kZXJBdHRycyhvKSsiPiIrYShlW3RdLmNvbnRlbnQpKyI8L2NvZGU+In0scy5jb2RlX2Jsb2NrPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89ZVt0XTtyZXR1cm4iPHByZSIraS5yZW5kZXJBdHRycyhvKSsiPjxjb2RlPiIrYShlW3RdLmNvbnRlbnQpKyI8L2NvZGU+PC9wcmU+XG4ifSxzLmZlbmNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHMsdSxjLGwscD1lW3RdLGY9cC5pbmZvP28ocC5pbmZvKS50cmltKCk6IiIsZD0iIjtyZXR1cm4gZiYmKGQ9Zi5zcGxpdCgvXHMrL2cpWzBdKSxzPW4uaGlnaGxpZ2h0P24uaGlnaGxpZ2h0KHAuY29udGVudCxkKXx8YShwLmNvbnRlbnQpOmEocC5jb250ZW50KSwwPT09cy5pbmRleE9mKCI8cHJlIik/cysiXG4iOmY/KHU9cC5hdHRySW5kZXgoImNsYXNzIiksYz1wLmF0dHJzP3AuYXR0cnMuc2xpY2UoKTpbXSx1PDA/Yy5wdXNoKFsiY2xhc3MiLG4ubGFuZ1ByZWZpeCtkXSk6Y1t1XVsxXSs9IiAiK24ubGFuZ1ByZWZpeCtkLGw9e2F0dHJzOmN9LCI8cHJlPjxjb2RlIitpLnJlbmRlckF0dHJzKGwpKyI+IitzKyI8L2NvZGU+PC9wcmU+XG4iKToiPHByZT48Y29kZSIraS5yZW5kZXJBdHRycyhwKSsiPiIrcysiPC9jb2RlPjwvcHJlPlxuIn0scy5pbWFnZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWVbdF07cmV0dXJuIG8uYXR0cnNbby5hdHRySW5kZXgoImFsdCIpXVsxXT1pLnJlbmRlcklubGluZUFzVGV4dChvLmNoaWxkcmVuLG4sciksaS5yZW5kZXJUb2tlbihlLHQsbil9LHMuaGFyZGJyZWFrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi54aHRtbE91dD8iPGJyIC8+XG4iOiI8YnI+XG4ifSxzLnNvZnRicmVhaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uYnJlYWtzP24ueGh0bWxPdXQ/IjxiciAvPlxuIjoiPGJyPlxuIjoiXG4ifSxzLnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlW3RdLmNvbnRlbnQpfSxzLmh0bWxfYmxvY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XS5jb250ZW50fSxzLmh0bWxfaW5saW5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0uY29udGVudH0sci5wcm90b3R5cGUucmVuZGVyQXR0cnM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKCFlLmF0dHJzKXJldHVybiIiO2ZvcihyPSIiLHQ9MCxuPWUuYXR0cnMubGVuZ3RoO3Q8bjt0Kyspcis9IiAiK2EoZS5hdHRyc1t0XVswXSkrJz0iJythKGUuYXR0cnNbdF1bMV0pKyciJztyZXR1cm4gcn0sci5wcm90b3R5cGUucmVuZGVyVG9rZW49ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9IiIsbz0hMSxhPWVbdF07cmV0dXJuIGEuaGlkZGVuPyIiOihhLmJsb2NrJiYtMSE9PWEubmVzdGluZyYmdCYmZVt0LTFdLmhpZGRlbiYmKGkrPSJcbiIpLGkrPSgtMT09PWEubmVzdGluZz8iPC8iOiI8IikrYS50YWcsaSs9dGhpcy5yZW5kZXJBdHRycyhhKSwwPT09YS5uZXN0aW5nJiZuLnhodG1sT3V0JiYoaSs9IiAvIiksYS5ibG9jayYmKG89ITAsMT09PWEubmVzdGluZyYmdCsxPGUubGVuZ3RoJiYocj1lW3QrMV0sImlubGluZSI9PT1yLnR5cGV8fHIuaGlkZGVuP289ITE6LTE9PT1yLm5lc3RpbmcmJnIudGFnPT09YS50YWcmJihvPSExKSkpLGkrPW8/Ij5cbiI6Ij4iKX0sci5wcm90b3R5cGUucmVuZGVySW5saW5lPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsaT0iIixvPXRoaXMucnVsZXMsYT0wLHM9ZS5sZW5ndGg7YTxzO2ErKylyPWVbYV0udHlwZSwidW5kZWZpbmVkIiE9PXR5cGVvZiBvW3JdP2krPW9bcl0oZSxhLHQsbix0aGlzKTppKz10aGlzLnJlbmRlclRva2VuKGUsYSx0KTtyZXR1cm4gaX0sci5wcm90b3R5cGUucmVuZGVySW5saW5lQXNUZXh0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9IiIsaT0wLG89ZS5sZW5ndGg7aTxvO2krKykidGV4dCI9PT1lW2ldLnR5cGU/cis9ZVtpXS5jb250ZW50OiJpbWFnZSI9PT1lW2ldLnR5cGUmJihyKz10aGlzLnJlbmRlcklubGluZUFzVGV4dChlW2ldLmNoaWxkcmVuLHQsbikpO3JldHVybiByfSxyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSIiLHM9dGhpcy5ydWxlcztmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylvPWVbcl0udHlwZSwiaW5saW5lIj09PW8/YSs9dGhpcy5yZW5kZXJJbmxpbmUoZVtyXS5jaGlsZHJlbix0LG4pOiJ1bmRlZmluZWQiIT09dHlwZW9mIHNbb10/YSs9c1tlW3JdLnR5cGVdKGUscix0LG4sdGhpcyk6YSs9dGhpcy5yZW5kZXJUb2tlbihlLHIsdCxuKTtyZXR1cm4gYX0sZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucnVsZXI9bmV3IGk7Zm9yKHZhciBlPTA7ZTxvLmxlbmd0aDtlKyspdGhpcy5ydWxlci5wdXNoKG9bZV1bMF0sb1tlXVsxXSl9dmFyIGk9bigxNDQpLG89W1sibm9ybWFsaXplIixuKDY1NSldLFsiYmxvY2siLG4oNjU2KV0sWyJpbmxpbmUiLG4oNjU3KV0sWyJsaW5raWZ5IixuKDY1OCldLFsicmVwbGFjZW1lbnRzIixuKDY1OSldLFsic21hcnRxdW90ZXMiLG4oNjYwKV1dO3IucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2ZvcihyPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpLHQ9MCxuPXIubGVuZ3RoO3Q8bjt0Kyspclt0XShlKX0sci5wcm90b3R5cGUuU3RhdGU9big2NjEpLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPS9ccltcblx1MDA4NV0/fFtcdTI0MjRcdTIwMjhcdTAwODVdL2csaT0vXHUwMDAwL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3Q9ZS5zcmMucmVwbGFjZShyLCJcbiIpLHQ9dC5yZXBsYWNlKGksIlx1ZmZmZCIpLGUuc3JjPXR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtlLmlubGluZU1vZGU/KHQ9bmV3IGUuVG9rZW4oImlubGluZSIsIiIsMCksdC5jb250ZW50PWUuc3JjLHQubWFwPVswLDFdLHQuY2hpbGRyZW49W10sZS50b2tlbnMucHVzaCh0KSk6ZS5tZC5ibG9jay5wYXJzZShlLnNyYyxlLm1kLGUuZW52LGUudG9rZW5zKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUudG9rZW5zO2ZvcihuPTAscj1pLmxlbmd0aDtuPHI7bisrKXQ9aVtuXSwiaW5saW5lIj09PXQudHlwZSYmZS5tZC5pbmxpbmUucGFyc2UodC5jb250ZW50LGUubWQsZS5lbnYsdC5jaGlsZHJlbil9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuL148YVs+XHNdL2kudGVzdChlKX1mdW5jdGlvbiBpKGUpe3JldHVybi9ePFwvYVxzKj4vaS50ZXN0KGUpfXZhciBvPW4oNSkuYXJyYXlSZXBsYWNlQXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYSxzLHUsYyxsLHAsZixkLGgsbSxnLHksdixiLHgsQz1lLnRva2VucztpZihlLm1kLm9wdGlvbnMubGlua2lmeSlmb3Iobj0wLGE9Qy5sZW5ndGg7bjxhO24rKylpZigiaW5saW5lIj09PUNbbl0udHlwZSYmZS5tZC5saW5raWZ5LnByZXRlc3QoQ1tuXS5jb250ZW50KSlmb3Iocz1DW25dLmNoaWxkcmVuLGc9MCx0PXMubGVuZ3RoLTE7dD49MDt0LS0paWYoYz1zW3RdLCJsaW5rX2Nsb3NlIiE9PWMudHlwZSl7aWYoImh0bWxfaW5saW5lIj09PWMudHlwZSYmKHIoYy5jb250ZW50KSYmZz4wJiZnLS0saShjLmNvbnRlbnQpJiZnKyspLCEoZz4wKSYmInRleHQiPT09Yy50eXBlJiZlLm1kLmxpbmtpZnkudGVzdChjLmNvbnRlbnQpKXtmb3IoZj1jLmNvbnRlbnQseD1lLm1kLmxpbmtpZnkubWF0Y2goZiksbD1bXSxtPWMubGV2ZWwsaD0wLHA9MDtwPHgubGVuZ3RoO3ArKyl5PXhbcF0udXJsLHY9ZS5tZC5ub3JtYWxpemVMaW5rKHkpLGUubWQudmFsaWRhdGVMaW5rKHYpJiYoYj14W3BdLnRleHQsYj14W3BdLnNjaGVtYT8ibWFpbHRvOiIhPT14W3BdLnNjaGVtYXx8L15tYWlsdG86L2kudGVzdChiKT9lLm1kLm5vcm1hbGl6ZUxpbmtUZXh0KGIpOmUubWQubm9ybWFsaXplTGlua1RleHQoIm1haWx0bzoiK2IpLnJlcGxhY2UoL15tYWlsdG86LywiIik6ZS5tZC5ub3JtYWxpemVMaW5rVGV4dCgiaHR0cDovLyIrYikucmVwbGFjZSgvXmh0dHA6XC9cLy8sIiIpLGQ9eFtwXS5pbmRleCxkPmgmJih1PW5ldyBlLlRva2VuKCJ0ZXh0IiwiIiwwKSx1LmNvbnRlbnQ9Zi5zbGljZShoLGQpLHUubGV2ZWw9bSxsLnB1c2godSkpLHU9bmV3IGUuVG9rZW4oImxpbmtfb3BlbiIsImEiLDEpLHUuYXR0cnM9W1siaHJlZiIsdl1dLHUubGV2ZWw9bSsrLHUubWFya3VwPSJsaW5raWZ5Iix1LmluZm89ImF1dG8iLGwucHVzaCh1KSx1PW5ldyBlLlRva2VuKCJ0ZXh0IiwiIiwwKSx1LmNvbnRlbnQ9Yix1LmxldmVsPW0sbC5wdXNoKHUpLHU9bmV3IGUuVG9rZW4oImxpbmtfY2xvc2UiLCJhIiwtMSksdS5sZXZlbD0tLW0sdS5tYXJrdXA9ImxpbmtpZnkiLHUuaW5mbz0iYXV0byIsbC5wdXNoKHUpLGg9eFtwXS5sYXN0SW5kZXgpO2g8Zi5sZW5ndGgmJih1PW5ldyBlLlRva2VuKCJ0ZXh0IiwiIiwwKSx1LmNvbnRlbnQ9Zi5zbGljZShoKSx1LmxldmVsPW0sbC5wdXNoKHUpKSxDW25dLmNoaWxkcmVuPXM9byhzLHQsbCl9fWVsc2UgZm9yKHQtLTtzW3RdLmxldmVsIT09Yy5sZXZlbCYmImxpbmtfb3BlbiIhPT1zW3RdLnR5cGU7KXQtLX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBjW3QudG9Mb3dlckNhc2UoKV19ZnVuY3Rpb24gaShlKXt2YXIgdCxuLGk9MDtmb3IodD1lLmxlbmd0aC0xO3Q+PTA7dC0tKW49ZVt0XSwidGV4dCIhPT1uLnR5cGV8fGl8fChuLmNvbnRlbnQ9bi5jb250ZW50LnJlcGxhY2UodSxyKSksImxpbmtfb3BlbiI9PT1uLnR5cGUmJiJhdXRvIj09PW4uaW5mbyYmaS0tLCJsaW5rX2Nsb3NlIj09PW4udHlwZSYmImF1dG8iPT09bi5pbmZvJiZpKyt9ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHI9MDtmb3IodD1lLmxlbmd0aC0xO3Q+PTA7dC0tKW49ZVt0XSwidGV4dCIhPT1uLnR5cGV8fHJ8fGEudGVzdChuLmNvbnRlbnQpJiYobi5jb250ZW50PW4uY29udGVudC5yZXBsYWNlKC9cKy0vZywiXHhiMSIpLnJlcGxhY2UoL1wuezIsfS9nLCJcdTIwMjYiKS5yZXBsYWNlKC8oWz8hXSlcdTIwMjYvZywiJDEuLiIpLnJlcGxhY2UoLyhbPyFdKXs0LH0vZywiJDEkMSQxIikucmVwbGFjZSgvLHsyLH0vZywiLCIpLnJlcGxhY2UoLyhefFteLV0pLS0tKFteLV18JCkvZ20sIiQxXHUyMDE0JDIiKS5yZXBsYWNlKC8oXnxccyktLShcc3wkKS9nbSwiJDFcdTIwMTMkMiIpLnJlcGxhY2UoLyhefFteLVxzXSktLShbXi1cc118JCkvZ20sIiQxXHUyMDEzJDIiKSksImxpbmtfb3BlbiI9PT1uLnR5cGUmJiJhdXRvIj09PW4uaW5mbyYmci0tLCJsaW5rX2Nsb3NlIj09PW4udHlwZSYmImF1dG8iPT09bi5pbmZvJiZyKyt9dmFyIGE9L1wrLXxcLlwufFw/XD9cP1w/fCEhISF8LCx8LS0vLHM9L1woKGN8dG18cnxwKVwpL2ksdT0vXCgoY3x0bXxyfHApXCkvZ2ksYz17YzoiXHhhOSIscjoiXHhhZSIscDoiXHhhNyIsdG06Ilx1MjEyMiJ9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtpZihlLm1kLm9wdGlvbnMudHlwb2dyYXBoZXIpZm9yKHQ9ZS50b2tlbnMubGVuZ3RoLTE7dD49MDt0LS0pImlubGluZSI9PT1lLnRva2Vuc1t0XS50eXBlJiYocy50ZXN0KGUudG9rZW5zW3RdLmNvbnRlbnQpJiZpKGUudG9rZW5zW3RdLmNoaWxkcmVuKSxhLnRlc3QoZS50b2tlbnNbdF0uY29udGVudCkmJm8oZS50b2tlbnNbdF0uY2hpbGRyZW4pKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIGUuc3Vic3RyKDAsdCkrbitlLnN1YnN0cih0KzEpfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbixpLHUscCxmLGQsaCxtLGcseSx2LGIseCxDLEUsRCx3LFMsayxBLF87Zm9yKGs9W10sbj0wO248ZS5sZW5ndGg7bisrKXtmb3IoaT1lW25dLGg9ZVtuXS5sZXZlbCx3PWsubGVuZ3RoLTE7dz49MCYmIShrW3ddLmxldmVsPD1oKTt3LS0pO2lmKGsubGVuZ3RoPXcrMSwidGV4dCI9PT1pLnR5cGUpe3U9aS5jb250ZW50LGY9MCxkPXUubGVuZ3RoO2U6Zm9yKDtmPGQmJihjLmxhc3RJbmRleD1mLHA9Yy5leGVjKHUpKTspe2lmKEU9RD0hMCxmPXAuaW5kZXgrMSxTPSInIj09PXBbMF0sZz0zMixwLmluZGV4LTE+PTApZz11LmNoYXJDb2RlQXQocC5pbmRleC0xKTtlbHNlIGZvcih3PW4tMTt3Pj0wO3ctLSlpZigidGV4dCI9PT1lW3ddLnR5cGUpe2c9ZVt3XS5jb250ZW50LmNoYXJDb2RlQXQoZVt3XS5jb250ZW50Lmxlbmd0aC0xKTticmVha31pZih5PTMyLGY8ZCl5PXUuY2hhckNvZGVBdChmKTtlbHNlIGZvcih3PW4rMTt3PGUubGVuZ3RoO3crKylpZigidGV4dCI9PT1lW3ddLnR5cGUpe3k9ZVt3XS5jb250ZW50LmNoYXJDb2RlQXQoMCk7YnJlYWt9aWYodj1zKGcpfHxhKFN0cmluZy5mcm9tQ2hhckNvZGUoZykpLGI9cyh5KXx8YShTdHJpbmcuZnJvbUNoYXJDb2RlKHkpKSx4PW8oZyksQz1vKHkpLEM/RT0hMTpiJiYoeHx8dnx8KEU9ITEpKSx4P0Q9ITE6diYmKEN8fGJ8fChEPSExKSksMzQ9PT15JiYnIic9PT1wWzBdJiZnPj00OCYmZzw9NTcmJihEPUU9ITEpLEUmJkQmJihFPSExLEQ9YiksRXx8RCl7aWYoRClmb3Iodz1rLmxlbmd0aC0xO3c+PTAmJihtPWtbd10sIShrW3ddLmxldmVsPGgpKTt3LS0paWYobS5zaW5nbGU9PT1TJiZrW3ddLmxldmVsPT09aCl7bT1rW3ddLFM/KEE9dC5tZC5vcHRpb25zLnF1b3Rlc1syXSxfPXQubWQub3B0aW9ucy5xdW90ZXNbM10pOihBPXQubWQub3B0aW9ucy5xdW90ZXNbMF0sXz10Lm1kLm9wdGlvbnMucXVvdGVzWzFdKSxpLmNvbnRlbnQ9cihpLmNvbnRlbnQscC5pbmRleCxfKSxlW20udG9rZW5dLmNvbnRlbnQ9cihlW20udG9rZW5dLmNvbnRlbnQsbS5wb3MsQSksZis9Xy5sZW5ndGgtMSxtLnRva2VuPT09biYmKGYrPUEubGVuZ3RoLTEpLHU9aS5jb250ZW50LGQ9dS5sZW5ndGgsay5sZW5ndGg9dztjb250aW51ZSBlfUU/ay5wdXNoKHt0b2tlbjpuLHBvczpwLmluZGV4LHNpbmdsZTpTLGxldmVsOmh9KTpEJiZTJiYoaS5jb250ZW50PXIoaS5jb250ZW50LHAuaW5kZXgsbCkpfWVsc2UgUyYmKGkuY29udGVudD1yKGkuY29udGVudCxwLmluZGV4LGwpKX19fX12YXIgbz1uKDUpLmlzV2hpdGVTcGFjZSxhPW4oNSkuaXNQdW5jdENoYXIscz1uKDUpLmlzTWRBc2NpaVB1bmN0LHU9L1snIl0vLGM9L1snIl0vZyxsPSJcdTIwMTkiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtpZihlLm1kLm9wdGlvbnMudHlwb2dyYXBoZXIpZm9yKHQ9ZS50b2tlbnMubGVuZ3RoLTE7dD49MDt0LS0pImlubGluZSI9PT1lLnRva2Vuc1t0XS50eXBlJiZ1LnRlc3QoZS50b2tlbnNbdF0uY29udGVudCkmJmkoZS50b2tlbnNbdF0uY2hpbGRyZW4sZSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMuc3JjPWUsdGhpcy5lbnY9bix0aGlzLnRva2Vucz1bXSx0aGlzLmlubGluZU1vZGU9ITEsdGhpcy5tZD10fXZhciBpPW4oMTQ1KTtyLnByb3RvdHlwZS5Ub2tlbj1pLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLnJ1bGVyPW5ldyBpO2Zvcih2YXIgZT0wO2U8by5sZW5ndGg7ZSsrKXRoaXMucnVsZXIucHVzaChvW2VdWzBdLG9bZV1bMV0se2FsdDoob1tlXVsyXXx8W10pLnNsaWNlKCl9KX12YXIgaT1uKDE0NCksbz1bWyJ0YWJsZSIsbig2NjMpLFsicGFyYWdyYXBoIiwicmVmZXJlbmNlIl1dLFsiY29kZSIsbig2NjQpXSxbImZlbmNlIixuKDY2NSksWyJwYXJhZ3JhcGgiLCJyZWZlcmVuY2UiLCJibG9ja3F1b3RlIiwibGlzdCJdXSxbImJsb2NrcXVvdGUiLG4oNjY2KSxbInBhcmFncmFwaCIsInJlZmVyZW5jZSIsImJsb2NrcXVvdGUiLCJsaXN0Il1dLFsiaHIiLG4oNjY3KSxbInBhcmFncmFwaCIsInJlZmVyZW5jZSIsImJsb2NrcXVvdGUiLCJsaXN0Il1dLFsibGlzdCIsbig2NjgpLFsicGFyYWdyYXBoIiwicmVmZXJlbmNlIiwiYmxvY2txdW90ZSJdXSxbInJlZmVyZW5jZSIsbig2NjkpXSxbImhlYWRpbmciLG4oNjcwKSxbInBhcmFncmFwaCIsInJlZmVyZW5jZSIsImJsb2NrcXVvdGUiXV0sWyJsaGVhZGluZyIsbig2NzEpXSxbImh0bWxfYmxvY2siLG4oNjcyKSxbInBhcmFncmFwaCIsInJlZmVyZW5jZSIsImJsb2NrcXVvdGUiXV0sWyJwYXJhZ3JhcGgiLG4oNjc0KV1dO3IucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsaT10aGlzLnJ1bGVyLmdldFJ1bGVzKCIiKSxvPWkubGVuZ3RoLGE9dCxzPSExLHU9ZS5tZC5vcHRpb25zLm1heE5lc3Rpbmc7YTxuJiYoZS5saW5lPWE9ZS5za2lwRW1wdHlMaW5lcyhhKSwhKGE+PW4pKSYmIShlLnNDb3VudFthXTxlLmJsa0luZGVudCk7KXtpZihlLmxldmVsPj11KXtlLmxpbmU9bjticmVha31mb3Iocj0wO3I8byYmIWlbcl0oZSxhLG4sITEpO3IrKyk7ZS50aWdodD0hcyxlLmlzRW1wdHkoZS5saW5lLTEpJiYocz0hMCksKGE9ZS5saW5lKTxuJiZlLmlzRW1wdHkoYSkmJihzPSEwLGErKyxlLmxpbmU9YSl9fSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaTtlJiYoaT1uZXcgdGhpcy5TdGF0ZShlLHQsbixyKSx0aGlzLnRva2VuaXplKGksaS5saW5lLGkubGluZU1heCkpfSxyLnByb3RvdHlwZS5TdGF0ZT1uKDY3NSksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuYk1hcmtzW3RdK2UuYmxrSW5kZW50LHI9ZS5lTWFya3NbdF07cmV0dXJuIGUuc3JjLnN1YnN0cihuLHItbil9ZnVuY3Rpb24gaShlKXt2YXIgdCxuPVtdLHI9MCxpPWUubGVuZ3RoLG89MCxhPTAscz0hMSx1PTA7Zm9yKHQ9ZS5jaGFyQ29kZUF0KHIpO3I8aTspOTY9PT10P3M/KHM9ITEsdT1yKTpvJTI9PT0wJiYocz0hMCx1PXIpOjEyNCE9PXR8fG8lMiE9PTB8fHN8fChuLnB1c2goZS5zdWJzdHJpbmcoYSxyKSksYT1yKzEpLDkyPT09dD9vKys6bz0wLHIrKyxyPT09aSYmcyYmKHM9ITEscj11KzEpLHQ9ZS5jaGFyQ29kZUF0KHIpO3JldHVybiBuLnB1c2goZS5zdWJzdHJpbmcoYSkpLG59dmFyIG89big1KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixhKXt2YXIgcyx1LGMsbCxwLGYsZCxoLG0sZyx5LHY7aWYodCsyPm4pcmV0dXJuITE7aWYocD10KzEsZS5zQ291bnRbcF08ZS5ibGtJbmRlbnQpcmV0dXJuITE7aWYoZS5zQ291bnRbcF0tZS5ibGtJbmRlbnQ+PTQpcmV0dXJuITE7aWYoKGM9ZS5iTWFya3NbcF0rZS50U2hpZnRbcF0pPj1lLmVNYXJrc1twXSlyZXR1cm4hMTtpZigxMjQhPT0ocz1lLnNyYy5jaGFyQ29kZUF0KGMrKykpJiY0NSE9PXMmJjU4IT09cylyZXR1cm4hMTtmb3IoO2M8ZS5lTWFya3NbcF07KXtpZigxMjQhPT0ocz1lLnNyYy5jaGFyQ29kZUF0KGMpKSYmNDUhPT1zJiY1OCE9PXMmJiFvKHMpKXJldHVybiExO2MrK31mb3IodT1yKGUsdCsxKSxmPXUuc3BsaXQoInwiKSxtPVtdLGw9MDtsPGYubGVuZ3RoO2wrKyl7aWYoIShnPWZbbF0udHJpbSgpKSl7aWYoMD09PWx8fGw9PT1mLmxlbmd0aC0xKWNvbnRpbnVlO3JldHVybiExfWlmKCEvXjo/LSs6PyQvLnRlc3QoZykpcmV0dXJuITE7NTg9PT1nLmNoYXJDb2RlQXQoZy5sZW5ndGgtMSk/bS5wdXNoKDU4PT09Zy5jaGFyQ29kZUF0KDApPyJjZW50ZXIiOiJyaWdodCIpOjU4PT09Zy5jaGFyQ29kZUF0KDApP20ucHVzaCgibGVmdCIpOm0ucHVzaCgiIil9aWYodT1yKGUsdCkudHJpbSgpLC0xPT09dS5pbmRleE9mKCJ8IikpcmV0dXJuITE7aWYoZS5zQ291bnRbdF0tZS5ibGtJbmRlbnQ+PTQpcmV0dXJuITE7aWYoZj1pKHUucmVwbGFjZSgvXlx8fFx8JC9nLCIiKSksKGQ9Zi5sZW5ndGgpPm0ubGVuZ3RoKXJldHVybiExO2lmKGEpcmV0dXJuITA7Zm9yKGg9ZS5wdXNoKCJ0YWJsZV9vcGVuIiwidGFibGUiLDEpLGgubWFwPXk9W3QsMF0saD1lLnB1c2goInRoZWFkX29wZW4iLCJ0aGVhZCIsMSksaC5tYXA9W3QsdCsxXSxoPWUucHVzaCgidHJfb3BlbiIsInRyIiwxKSxoLm1hcD1bdCx0KzFdLGw9MDtsPGYubGVuZ3RoO2wrKyloPWUucHVzaCgidGhfb3BlbiIsInRoIiwxKSxoLm1hcD1bdCx0KzFdLG1bbF0mJihoLmF0dHJzPVtbInN0eWxlIiwidGV4dC1hbGlnbjoiK21bbF1dXSksaD1lLnB1c2goImlubGluZSIsIiIsMCksaC5jb250ZW50PWZbbF0udHJpbSgpLGgubWFwPVt0LHQrMV0saC5jaGlsZHJlbj1bXSxoPWUucHVzaCgidGhfY2xvc2UiLCJ0aCIsLTEpO2ZvcihoPWUucHVzaCgidHJfY2xvc2UiLCJ0ciIsLTEpLGg9ZS5wdXNoKCJ0aGVhZF9jbG9zZSIsInRoZWFkIiwtMSksaD1lLnB1c2goInRib2R5X29wZW4iLCJ0Ym9keSIsMSksaC5tYXA9dj1bdCsyLDBdLHA9dCsyO3A8biYmIShlLnNDb3VudFtwXTxlLmJsa0luZGVudCkmJih1PXIoZSxwKS50cmltKCksLTEhPT11LmluZGV4T2YoInwiKSkmJiEoZS5zQ291bnRbcF0tZS5ibGtJbmRlbnQ+PTQpO3ArKyl7Zm9yKGY9aSh1LnJlcGxhY2UoL15cfHxcfCQvZywiIikpLGg9ZS5wdXNoKCJ0cl9vcGVuIiwidHIiLDEpLGw9MDtsPGQ7bCsrKWg9ZS5wdXNoKCJ0ZF9vcGVuIiwidGQiLDEpLG1bbF0mJihoLmF0dHJzPVtbInN0eWxlIiwidGV4dC1hbGlnbjoiK21bbF1dXSksaD1lLnB1c2goImlubGluZSIsIiIsMCksaC5jb250ZW50PWZbbF0/ZltsXS50cmltKCk6IiIsaC5jaGlsZHJlbj1bXSxoPWUucHVzaCgidGRfY2xvc2UiLCJ0ZCIsLTEpO2g9ZS5wdXNoKCJ0cl9jbG9zZSIsInRyIiwtMSl9cmV0dXJuIGg9ZS5wdXNoKCJ0Ym9keV9jbG9zZSIsInRib2R5IiwtMSksaD1lLnB1c2goInRhYmxlX2Nsb3NlIiwidGFibGUiLC0xKSx5WzFdPXZbMV09cCxlLmxpbmU9cCwhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG87aWYoZS5zQ291bnRbdF0tZS5ibGtJbmRlbnQ8NClyZXR1cm4hMTtmb3IoaT1yPXQrMTtyPG47KWlmKGUuaXNFbXB0eShyKSlyKys7ZWxzZXtpZighKGUuc0NvdW50W3JdLWUuYmxrSW5kZW50Pj00KSlicmVhaztyKyssaT1yfXJldHVybiBlLmxpbmU9aSxvPWUucHVzaCgiY29kZV9ibG9jayIsImNvZGUiLDApLG8uY29udGVudD1lLmdldExpbmVzKHQsaSw0K2UuYmxrSW5kZW50LCEwKSxvLm1hcD1bdCxlLmxpbmVdLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxjLGwscD0hMSxmPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLGQ9ZS5lTWFya3NbdF07aWYoZS5zQ291bnRbdF0tZS5ibGtJbmRlbnQ+PTQpcmV0dXJuITE7aWYoZiszPmQpcmV0dXJuITE7aWYoMTI2IT09KGk9ZS5zcmMuY2hhckNvZGVBdChmKSkmJjk2IT09aSlyZXR1cm4hMTtpZih1PWYsZj1lLnNraXBDaGFycyhmLGkpLChvPWYtdSk8MylyZXR1cm4hMTtpZihsPWUuc3JjLnNsaWNlKHUsZiksYT1lLnNyYy5zbGljZShmLGQpLGEuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKT49MClyZXR1cm4hMTtpZihyKXJldHVybiEwO2ZvcihzPXQ7ISgrK3M+PW4pJiYoZj11PWUuYk1hcmtzW3NdK2UudFNoaWZ0W3NdLGQ9ZS5lTWFya3Nbc10sIShmPGQmJmUuc0NvdW50W3NdPGUuYmxrSW5kZW50KSk7KWlmKGUuc3JjLmNoYXJDb2RlQXQoZik9PT1pJiYhKGUuc0NvdW50W3NdLWUuYmxrSW5kZW50Pj00KSYmISgoZj1lLnNraXBDaGFycyhmLGkpKS11PG8pJiYhKChmPWUuc2tpcFNwYWNlcyhmKSk8ZCkpe3A9ITA7YnJlYWt9cmV0dXJuIG89ZS5zQ291bnRbdF0sZS5saW5lPXMrKHA/MTowKSxjPWUucHVzaCgiZmVuY2UiLCJjb2RlIiwwKSxjLmluZm89YSxjLmNvbnRlbnQ9ZS5nZXRMaW5lcyh0KzEscyxvLCEwKSxjLm1hcmt1cD1sLGMubWFwPVt0LGUubGluZV0sITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSkuaXNTcGFjZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYSxzLHUsYyxsLHAsZixkLGgsbSxnLHksdixiLHgsQyxFLEQsdyxTPWUubGluZU1heCxrPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLEE9ZS5lTWFya3NbdF07aWYoZS5zQ291bnRbdF0tZS5ibGtJbmRlbnQ+PTQpcmV0dXJuITE7aWYoNjIhPT1lLnNyYy5jaGFyQ29kZUF0KGsrKykpcmV0dXJuITE7aWYoaSlyZXR1cm4hMDtmb3IodT1kPWUuc0NvdW50W3RdK2stKGUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdKSwzMj09PWUuc3JjLmNoYXJDb2RlQXQoayk/KGsrKyx1KyssZCsrLG89ITEseD0hMCk6OT09PWUuc3JjLmNoYXJDb2RlQXQoayk/KHg9ITAsKGUuYnNDb3VudFt0XStkKSU0PT09Mz8oaysrLHUrKyxkKyssbz0hMSk6bz0hMCk6eD0hMSxoPVtlLmJNYXJrc1t0XV0sZS5iTWFya3NbdF09aztrPEEmJihhPWUuc3JjLmNoYXJDb2RlQXQoaykscihhKSk7KTk9PT1hP2QrPTQtKGQrZS5ic0NvdW50W3RdKyhvPzE6MCkpJTQ6ZCsrLGsrKztmb3IobT1bZS5ic0NvdW50W3RdXSxlLmJzQ291bnRbdF09ZS5zQ291bnRbdF0rMSsoeD8xOjApLGw9az49QSx2PVtlLnNDb3VudFt0XV0sZS5zQ291bnRbdF09ZC11LGI9W2UudFNoaWZ0W3RdXSxlLnRTaGlmdFt0XT1rLWUuYk1hcmtzW3RdLEU9ZS5tZC5ibG9jay5ydWxlci5nZXRSdWxlcygiYmxvY2txdW90ZSIpLHk9ZS5wYXJlbnRUeXBlLGUucGFyZW50VHlwZT0iYmxvY2txdW90ZSIsdz0hMSxmPXQrMTtmPG4mJihlLnNDb3VudFtmXTxlLmJsa0luZGVudCYmKHc9ITApLGs9ZS5iTWFya3NbZl0rZS50U2hpZnRbZl0sQT1lLmVNYXJrc1tmXSwhKGs+PUEpKTtmKyspaWYoNjIhPT1lLnNyYy5jaGFyQ29kZUF0KGsrKyl8fHcpe2lmKGwpYnJlYWs7Zm9yKEM9ITEscz0wLGM9RS5sZW5ndGg7czxjO3MrKylpZihFW3NdKGUsZixuLCEwKSl7Qz0hMDticmVha31pZihDKXtlLmxpbmVNYXg9ZiwwIT09ZS5ibGtJbmRlbnQmJihoLnB1c2goZS5iTWFya3NbZl0pLG0ucHVzaChlLmJzQ291bnRbZl0pLGIucHVzaChlLnRTaGlmdFtmXSksdi5wdXNoKGUuc0NvdW50W2ZdKSxlLnNDb3VudFtmXS09ZS5ibGtJbmRlbnQpO2JyZWFrfWgucHVzaChlLmJNYXJrc1tmXSksbS5wdXNoKGUuYnNDb3VudFtmXSksYi5wdXNoKGUudFNoaWZ0W2ZdKSx2LnB1c2goZS5zQ291bnRbZl0pLGUuc0NvdW50W2ZdPS0xfWVsc2V7Zm9yKHU9ZD1lLnNDb3VudFtmXStrLShlLmJNYXJrc1tmXStlLnRTaGlmdFtmXSksMzI9PT1lLnNyYy5jaGFyQ29kZUF0KGspPyhrKyssdSsrLGQrKyxvPSExLHg9ITApOjk9PT1lLnNyYy5jaGFyQ29kZUF0KGspPyh4PSEwLChlLmJzQ291bnRbZl0rZCklND09PTM/KGsrKyx1KyssZCsrLG89ITEpOm89ITApOng9ITEsaC5wdXNoKGUuYk1hcmtzW2ZdKSxlLmJNYXJrc1tmXT1rO2s8QSYmKGE9ZS5zcmMuY2hhckNvZGVBdChrKSxyKGEpKTspOT09PWE/ZCs9NC0oZCtlLmJzQ291bnRbZl0rKG8/MTowKSklNDpkKyssaysrO2w9az49QSxtLnB1c2goZS5ic0NvdW50W2ZdKSxlLmJzQ291bnRbZl09ZS5zQ291bnRbZl0rMSsoeD8xOjApLHYucHVzaChlLnNDb3VudFtmXSksZS5zQ291bnRbZl09ZC11LGIucHVzaChlLnRTaGlmdFtmXSksZS50U2hpZnRbZl09ay1lLmJNYXJrc1tmXX1mb3IoZz1lLmJsa0luZGVudCxlLmJsa0luZGVudD0wLEQ9ZS5wdXNoKCJibG9ja3F1b3RlX29wZW4iLCJibG9ja3F1b3RlIiwxKSxELm1hcmt1cD0iPiIsRC5tYXA9cD1bdCwwXSxlLm1kLmJsb2NrLnRva2VuaXplKGUsdCxmKSxEPWUucHVzaCgiYmxvY2txdW90ZV9jbG9zZSIsImJsb2NrcXVvdGUiLC0xKSxELm1hcmt1cD0iPiIsZS5saW5lTWF4PVMsZS5wYXJlbnRUeXBlPXkscFsxXT1lLmxpbmUscz0wO3M8Yi5sZW5ndGg7cysrKWUuYk1hcmtzW3MrdF09aFtzXSxlLnRTaGlmdFtzK3RdPWJbc10sZS5zQ291bnRbcyt0XT12W3NdLGUuYnNDb3VudFtzK3RdPW1bc107cmV0dXJuIGUuYmxrSW5kZW50PWcsITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSkuaXNTcGFjZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYSxzLHUsYz1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSxsPWUuZU1hcmtzW3RdO2lmKGUuc0NvdW50W3RdLWUuYmxrSW5kZW50Pj00KXJldHVybiExO2lmKDQyIT09KG89ZS5zcmMuY2hhckNvZGVBdChjKyspKSYmNDUhPT1vJiY5NSE9PW8pcmV0dXJuITE7Zm9yKGE9MTtjPGw7KXtpZigocz1lLnNyYy5jaGFyQ29kZUF0KGMrKykpIT09byYmIXIocykpcmV0dXJuITE7cz09PW8mJmErK31yZXR1cm4hKGE8MykmJighIWl8fChlLmxpbmU9dCsxLHU9ZS5wdXNoKCJociIsImhyIiwwKSx1Lm1hcD1bdCxlLmxpbmVdLHUubWFya3VwPUFycmF5KGErMSkuam9pbihTdHJpbmcuZnJvbUNoYXJDb2RlKG8pKSwhMCkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG4scixpLG87cmV0dXJuIHI9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0saT1lLmVNYXJrc1t0XSxuPWUuc3JjLmNoYXJDb2RlQXQocisrKSw0MiE9PW4mJjQ1IT09biYmNDMhPT1uPy0xOnI8aSYmKG89ZS5zcmMuY2hhckNvZGVBdChyKSwhYShvKSk/LTE6cn1mdW5jdGlvbiBpKGUsdCl7dmFyIG4scj1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSxpPXIsbz1lLmVNYXJrc1t0XTtpZihpKzE+PW8pcmV0dXJuLTE7aWYoKG49ZS5zcmMuY2hhckNvZGVBdChpKyspKTw0OHx8bj41NylyZXR1cm4tMTtmb3IoOzspe2lmKGk+PW8pcmV0dXJuLTE7bj1lLnNyYy5jaGFyQ29kZUF0KGkrKyk7e2lmKCEobj49NDgmJm48PTU3KSl7aWYoNDE9PT1ufHw0Nj09PW4pYnJlYWs7cmV0dXJuLTF9aWYoaS1yPj0xMClyZXR1cm4tMX19cmV0dXJuIGk8byYmKG49ZS5zcmMuY2hhckNvZGVBdChpKSwhYShuKSk/LTE6aX1mdW5jdGlvbiBvKGUsdCl7dmFyIG4scixpPWUubGV2ZWwrMjtmb3Iobj10KzIscj1lLnRva2Vucy5sZW5ndGgtMjtuPHI7bisrKWUudG9rZW5zW25dLmxldmVsPT09aSYmInBhcmFncmFwaF9vcGVuIj09PWUudG9rZW5zW25dLnR5cGUmJihlLnRva2Vuc1tuKzJdLmhpZGRlbj0hMCxlLnRva2Vuc1tuXS5oaWRkZW49ITAsbis9Mil9dmFyIGE9big1KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixhKXt2YXIgcyx1LGMsbCxwLGYsZCxoLG0sZyx5LHYsYix4LEMsRSxELHcsUyxrLEEsXyxULE8sRixOLEksTCxQPSExLE09ITA7aWYoZS5zQ291bnRbdF0tZS5ibGtJbmRlbnQ+PTQpcmV0dXJuITE7aWYoYSYmInBhcmFncmFwaCI9PT1lLnBhcmVudFR5cGUmJmUudFNoaWZ0W3RdPj1lLmJsa0luZGVudCYmKFA9ITApLChUPWkoZSx0KSk+PTApe2lmKGQ9ITAsRj1lLmJNYXJrc1t0XStlLnRTaGlmdFt0XSxiPU51bWJlcihlLnNyYy5zdWJzdHIoRixULUYtMSkpLFAmJjEhPT1iKXJldHVybiExfWVsc2V7aWYoISgoVD1yKGUsdCkpPj0wKSlyZXR1cm4hMTtkPSExfWlmKFAmJmUuc2tpcFNwYWNlcyhUKT49ZS5lTWFya3NbdF0pcmV0dXJuITE7aWYodj1lLnNyYy5jaGFyQ29kZUF0KFQtMSksYSlyZXR1cm4hMDtmb3IoeT1lLnRva2Vucy5sZW5ndGgsZD8oTD1lLnB1c2goIm9yZGVyZWRfbGlzdF9vcGVuIiwib2wiLDEpLDEhPT1iJiYoTC5hdHRycz1bWyJzdGFydCIsYl1dKSk6TD1lLnB1c2goImJ1bGxldF9saXN0X29wZW4iLCJ1bCIsMSksTC5tYXA9Zz1bdCwwXSxMLm1hcmt1cD1TdHJpbmcuZnJvbUNoYXJDb2RlKHYpLEM9dCxPPSExLEk9ZS5tZC5ibG9jay5ydWxlci5nZXRSdWxlcygibGlzdCIpLFM9ZS5wYXJlbnRUeXBlLGUucGFyZW50VHlwZT0ibGlzdCI7QzxuOyl7Zm9yKF89VCx4PWUuZU1hcmtzW0NdLGY9RT1lLnNDb3VudFtDXStULShlLmJNYXJrc1t0XStlLnRTaGlmdFt0XSk7Xzx4Oyl7aWYoOT09PShzPWUuc3JjLmNoYXJDb2RlQXQoXykpKUUrPTQtKEUrZS5ic0NvdW50W0NdKSU0O2Vsc2V7aWYoMzIhPT1zKWJyZWFrO0UrK31fKyt9aWYodT1fLHA9dT49eD8xOkUtZixwPjQmJihwPTEpLGw9ZitwLEw9ZS5wdXNoKCJsaXN0X2l0ZW1fb3BlbiIsImxpIiwxKSxMLm1hcmt1cD1TdHJpbmcuZnJvbUNoYXJDb2RlKHYpLEwubWFwPWg9W3QsMF0sRD1lLmJsa0luZGVudCxBPWUudGlnaHQsaz1lLnRTaGlmdFt0XSx3PWUuc0NvdW50W3RdLGUuYmxrSW5kZW50PWwsZS50aWdodD0hMCxlLnRTaGlmdFt0XT11LWUuYk1hcmtzW3RdLGUuc0NvdW50W3RdPUUsdT49eCYmZS5pc0VtcHR5KHQrMSk/ZS5saW5lPU1hdGgubWluKGUubGluZSsyLG4pOmUubWQuYmxvY2sudG9rZW5pemUoZSx0LG4sITApLGUudGlnaHQmJiFPfHwoTT0hMSksTz1lLmxpbmUtdD4xJiZlLmlzRW1wdHkoZS5saW5lLTEpLGUuYmxrSW5kZW50PUQsZS50U2hpZnRbdF09ayxlLnNDb3VudFt0XT13LGUudGlnaHQ9QSxMPWUucHVzaCgibGlzdF9pdGVtX2Nsb3NlIiwibGkiLC0xKSxMLm1hcmt1cD1TdHJpbmcuZnJvbUNoYXJDb2RlKHYpLEM9dD1lLmxpbmUsaFsxXT1DLHU9ZS5iTWFya3NbdF0sQz49bilicmVhaztpZihlLnNDb3VudFtDXTxlLmJsa0luZGVudClicmVhaztmb3IoTj0hMSxjPTAsbT1JLmxlbmd0aDtjPG07YysrKWlmKElbY10oZSxDLG4sITApKXtOPSEwO2JyZWFrfWlmKE4pYnJlYWs7aWYoZCl7aWYoKFQ9aShlLEMpKTwwKWJyZWFrfWVsc2UgaWYoKFQ9cihlLEMpKTwwKWJyZWFrO2lmKHYhPT1lLnNyYy5jaGFyQ29kZUF0KFQtMSkpYnJlYWt9cmV0dXJuIEw9ZD9lLnB1c2goIm9yZGVyZWRfbGlzdF9jbG9zZSIsIm9sIiwtMSk6ZS5wdXNoKCJidWxsZXRfbGlzdF9jbG9zZSIsInVsIiwtMSksTC5tYXJrdXA9U3RyaW5nLmZyb21DaGFyQ29kZSh2KSxnWzFdPUMsZS5saW5lPUMsZS5wYXJlbnRUeXBlPVMsTSYmbyhlLHkpLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUpLm5vcm1hbGl6ZVJlZmVyZW5jZSxpPW4oNSkuaXNTcGFjZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGEscyx1LGMsbCxwLGYsZCxoLG0sZyx5LHYsYix4LEMsRT0wLEQ9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sdz1lLmVNYXJrc1t0XSxTPXQrMTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZig5MSE9PWUuc3JjLmNoYXJDb2RlQXQoRCkpcmV0dXJuITE7Zm9yKDsrK0Q8dzspaWYoOTM9PT1lLnNyYy5jaGFyQ29kZUF0KEQpJiY5MiE9PWUuc3JjLmNoYXJDb2RlQXQoRC0xKSl7aWYoRCsxPT09dylyZXR1cm4hMTtpZig1OCE9PWUuc3JjLmNoYXJDb2RlQXQoRCsxKSlyZXR1cm4hMTticmVha31mb3IoYz1lLmxpbmVNYXgseD1lLm1kLmJsb2NrLnJ1bGVyLmdldFJ1bGVzKCJyZWZlcmVuY2UiKSxtPWUucGFyZW50VHlwZSxlLnBhcmVudFR5cGU9InJlZmVyZW5jZSI7UzxjJiYhZS5pc0VtcHR5KFMpO1MrKylpZighKGUuc0NvdW50W1NdLWUuYmxrSW5kZW50PjMpJiYhKGUuc0NvdW50W1NdPDApKXtmb3IoYj0hMSxwPTAsZj14Lmxlbmd0aDtwPGY7cCsrKWlmKHhbcF0oZSxTLGMsITApKXtiPSEwO2JyZWFrfWlmKGIpYnJlYWt9Zm9yKHY9ZS5nZXRMaW5lcyh0LFMsZS5ibGtJbmRlbnQsITEpLnRyaW0oKSx3PXYubGVuZ3RoLEQ9MTtEPHc7RCsrKXtpZig5MT09PShhPXYuY2hhckNvZGVBdChEKSkpcmV0dXJuITE7aWYoOTM9PT1hKXtoPUQ7YnJlYWt9MTA9PT1hP0UrKzo5Mj09PWEmJisrRDx3JiYxMD09PXYuY2hhckNvZGVBdChEKSYmRSsrfWlmKGg8MHx8NTghPT12LmNoYXJDb2RlQXQoaCsxKSlyZXR1cm4hMTtmb3IoRD1oKzI7RDx3O0QrKylpZigxMD09PShhPXYuY2hhckNvZGVBdChEKSkpRSsrO2Vsc2UgaWYoIWkoYSkpYnJlYWs7aWYoZz1lLm1kLmhlbHBlcnMucGFyc2VMaW5rRGVzdGluYXRpb24odixELHcpLCFnLm9rKXJldHVybiExO2lmKGw9ZS5tZC5ub3JtYWxpemVMaW5rKGcuc3RyKSwhZS5tZC52YWxpZGF0ZUxpbmsobCkpcmV0dXJuITE7Zm9yKEQ9Zy5wb3MsRSs9Zy5saW5lcyxzPUQsdT1FLHk9RDtEPHc7RCsrKWlmKDEwPT09KGE9di5jaGFyQ29kZUF0KEQpKSlFKys7ZWxzZSBpZighaShhKSlicmVhaztmb3IoZz1lLm1kLmhlbHBlcnMucGFyc2VMaW5rVGl0bGUodixELHcpLEQ8dyYmeSE9PUQmJmcub2s/KEM9Zy5zdHIsRD1nLnBvcyxFKz1nLmxpbmVzKTooQz0iIixEPXMsRT11KTtEPHcmJihhPXYuY2hhckNvZGVBdChEKSxpKGEpKTspRCsrO2lmKEQ8dyYmMTAhPT12LmNoYXJDb2RlQXQoRCkmJkMpZm9yKEM9IiIsRD1zLEU9dTtEPHcmJihhPXYuY2hhckNvZGVBdChEKSxpKGEpKTspRCsrO3JldHVybiEoRDx3JiYxMCE9PXYuY2hhckNvZGVBdChEKSkmJighIShkPXIodi5zbGljZSgxLGgpKSkmJighIW98fCgidW5kZWZpbmVkIj09PXR5cGVvZiBlLmVudi5yZWZlcmVuY2VzJiYoZS5lbnYucmVmZXJlbmNlcz17fSksInVuZGVmaW5lZCI9PT10eXBlb2YgZS5lbnYucmVmZXJlbmNlc1tkXSYmKGUuZW52LnJlZmVyZW5jZXNbZF09e3RpdGxlOkMsaHJlZjpsfSksZS5wYXJlbnRUeXBlPW0sZS5saW5lPXQrRSsxLCEwKSkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUpLmlzU3BhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGEscyx1LGM9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sbD1lLmVNYXJrc1t0XTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZigzNSE9PShvPWUuc3JjLmNoYXJDb2RlQXQoYykpfHxjPj1sKXJldHVybiExO2ZvcihhPTEsbz1lLnNyYy5jaGFyQ29kZUF0KCsrYyk7MzU9PT1vJiZjPGwmJmE8PTY7KWErKyxvPWUuc3JjLmNoYXJDb2RlQXQoKytjKTtyZXR1cm4hKGE+Nnx8YzxsJiYhcihvKSkmJighIWl8fChsPWUuc2tpcFNwYWNlc0JhY2sobCxjKSxzPWUuc2tpcENoYXJzQmFjayhsLDM1LGMpLHM+YyYmcihlLnNyYy5jaGFyQ29kZUF0KHMtMSkpJiYobD1zKSxlLmxpbmU9dCsxLHU9ZS5wdXNoKCJoZWFkaW5nX29wZW4iLCJoIitTdHJpbmcoYSksMSksdS5tYXJrdXA9IiMjIyMjIyMjIi5zbGljZSgwLGEpLHUubWFwPVt0LGUubGluZV0sdT1lLnB1c2goImlubGluZSIsIiIsMCksdS5jb250ZW50PWUuc3JjLnNsaWNlKGMsbCkudHJpbSgpLHUubWFwPVt0LGUubGluZV0sdS5jaGlsZHJlbj1bXSx1PWUucHVzaCgiaGVhZGluZ19jbG9zZSIsImgiK1N0cmluZyhhKSwtMSksdS5tYXJrdXA9IiMjIyMjIyMjIi5zbGljZSgwLGEpLCEwKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGMsbCxwLGYsZD10KzEsaD1lLm1kLmJsb2NrLnJ1bGVyLmdldFJ1bGVzKCJwYXJhZ3JhcGgiKTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtmb3IoZj1lLnBhcmVudFR5cGUsZS5wYXJlbnRUeXBlPSJwYXJhZ3JhcGgiO2Q8biYmIWUuaXNFbXB0eShkKTtkKyspaWYoIShlLnNDb3VudFtkXS1lLmJsa0luZGVudD4zKSl7aWYoZS5zQ291bnRbZF0+PWUuYmxrSW5kZW50JiYodT1lLmJNYXJrc1tkXStlLnRTaGlmdFtkXSxjPWUuZU1hcmtzW2RdLHU8YyYmKDQ1PT09KHA9ZS5zcmMuY2hhckNvZGVBdCh1KSl8fDYxPT09cCkmJih1PWUuc2tpcENoYXJzKHUscCksKHU9ZS5za2lwU3BhY2VzKHUpKT49YykpKXtsPTYxPT09cD8xOjI7YnJlYWt9aWYoIShlLnNDb3VudFtkXTwwKSl7Zm9yKGk9ITEsbz0wLGE9aC5sZW5ndGg7bzxhO28rKylpZihoW29dKGUsZCxuLCEwKSl7aT0hMDticmVha31pZihpKWJyZWFrfX1yZXR1cm4hIWwmJihyPWUuZ2V0TGluZXModCxkLGUuYmxrSW5kZW50LCExKS50cmltKCksZS5saW5lPWQrMSxzPWUucHVzaCgiaGVhZGluZ19vcGVuIiwiaCIrU3RyaW5nKGwpLDEpLHMubWFya3VwPVN0cmluZy5mcm9tQ2hhckNvZGUocCkscy5tYXA9W3QsZS5saW5lXSxzPWUucHVzaCgiaW5saW5lIiwiIiwwKSxzLmNvbnRlbnQ9cixzLm1hcD1bdCxlLmxpbmUtMV0scy5jaGlsZHJlbj1bXSxzPWUucHVzaCgiaGVhZGluZ19jbG9zZSIsImgiK1N0cmluZyhsKSwtMSkscy5tYXJrdXA9U3RyaW5nLmZyb21DaGFyQ29kZShwKSxlLnBhcmVudFR5cGU9ZiwhMCl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjczKSxpPW4oMjk1KS5IVE1MX09QRU5fQ0xPU0VfVEFHX1JFLG89W1svXjwoc2NyaXB0fHByZXxzdHlsZSkoPz0oXHN8PnwkKSkvaSwvPFwvKHNjcmlwdHxwcmV8c3R5bGUpPi9pLCEwXSxbL148IS0tLywvLS0+LywhMF0sWy9ePFw/LywvXD8+LywhMF0sWy9ePCFbQS1aXS8sLz4vLCEwXSxbL148IVxbQ0RBVEFcWy8sL1xdXF0+LywhMF0sW25ldyBSZWdFeHAoIl48Lz8oIityLmpvaW4oInwiKSsiKSg/PShcXHN8Lz8+fCQpKSIsImkiKSwvXiQvLCEwXSxbbmV3IFJlZ0V4cChpLnNvdXJjZSsiXFxzKiQiKSwvXiQvLCExXV07ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEscyx1LGM9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sbD1lLmVNYXJrc1t0XTtpZihlLnNDb3VudFt0XS1lLmJsa0luZGVudD49NClyZXR1cm4hMTtpZighZS5tZC5vcHRpb25zLmh0bWwpcmV0dXJuITE7aWYoNjAhPT1lLnNyYy5jaGFyQ29kZUF0KGMpKXJldHVybiExO2Zvcih1PWUuc3JjLnNsaWNlKGMsbCksaT0wO2k8by5sZW5ndGgmJiFvW2ldWzBdLnRlc3QodSk7aSsrKTtpZihpPT09by5sZW5ndGgpcmV0dXJuITE7aWYocilyZXR1cm4gb1tpXVsyXTtpZihhPXQrMSwhb1tpXVsxXS50ZXN0KHUpKWZvcig7YTxuJiYhKGUuc0NvdW50W2FdPGUuYmxrSW5kZW50KTthKyspaWYoYz1lLmJNYXJrc1thXStlLnRTaGlmdFthXSxsPWUuZU1hcmtzW2FdLHU9ZS5zcmMuc2xpY2UoYyxsKSxvW2ldWzFdLnRlc3QodSkpezAhPT11Lmxlbmd0aCYmYSsrO2JyZWFrfXJldHVybiBlLmxpbmU9YSxzPWUucHVzaCgiaHRtbF9ibG9jayIsIiIsMCkscy5tYXA9W3QsYV0scy5jb250ZW50PWUuZ2V0TGluZXModCxhLGUuYmxrSW5kZW50LCEwKSwhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJtZXRhIiwibmF2Iiwibm9mcmFtZXMiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwicCIsInBhcmFtIiwic2VjdGlvbiIsInNvdXJjZSIsInN1bW1hcnkiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aXRsZSIsInRyIiwidHJhY2siLCJ1bCJdfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscyx1PXQrMSxjPWUubWQuYmxvY2sucnVsZXIuZ2V0UnVsZXMoInBhcmFncmFwaCIpLGw9ZS5saW5lTWF4O2ZvcihzPWUucGFyZW50VHlwZSxlLnBhcmVudFR5cGU9InBhcmFncmFwaCI7dTxsJiYhZS5pc0VtcHR5KHUpO3UrKylpZighKGUuc0NvdW50W3VdLWUuYmxrSW5kZW50PjMpJiYhKGUuc0NvdW50W3VdPDApKXtmb3Iocj0hMSxpPTAsbz1jLmxlbmd0aDtpPG87aSsrKWlmKGNbaV0oZSx1LGwsITApKXtyPSEwO2JyZWFrfWlmKHIpYnJlYWt9cmV0dXJuIG49ZS5nZXRMaW5lcyh0LHUsZS5ibGtJbmRlbnQsITEpLnRyaW0oKSxlLmxpbmU9dSxhPWUucHVzaCgicGFyYWdyYXBoX29wZW4iLCJwIiwxKSxhLm1hcD1bdCxlLmxpbmVdLGE9ZS5wdXNoKCJpbmxpbmUiLCIiLDApLGEuY29udGVudD1uLGEubWFwPVt0LGUubGluZV0sYS5jaGlsZHJlbj1bXSxhPWUucHVzaCgicGFyYWdyYXBoX2Nsb3NlIiwicCIsLTEpLGUucGFyZW50VHlwZT1zLCEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBpLGEscyx1LGMsbCxwLGY7Zm9yKHRoaXMuc3JjPWUsdGhpcy5tZD10LHRoaXMuZW52PW4sdGhpcy50b2tlbnM9cix0aGlzLmJNYXJrcz1bXSx0aGlzLmVNYXJrcz1bXSx0aGlzLnRTaGlmdD1bXSx0aGlzLnNDb3VudD1bXSx0aGlzLmJzQ291bnQ9W10sdGhpcy5ibGtJbmRlbnQ9MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVNYXg9MCx0aGlzLnRpZ2h0PSExLHRoaXMuZGRJbmRlbnQ9LTEsdGhpcy5wYXJlbnRUeXBlPSJyb290Iix0aGlzLmxldmVsPTAsdGhpcy5yZXN1bHQ9IiIsYT10aGlzLnNyYyxmPSExLHM9dT1sPXA9MCxjPWEubGVuZ3RoO3U8Yzt1Kyspe2lmKGk9YS5jaGFyQ29kZUF0KHUpLCFmKXtpZihvKGkpKXtsKyssOT09PWk/cCs9NC1wJTQ6cCsrO2NvbnRpbnVlfWY9ITB9MTAhPT1pJiZ1IT09Yy0xfHwoMTAhPT1pJiZ1KyssdGhpcy5iTWFya3MucHVzaChzKSx0aGlzLmVNYXJrcy5wdXNoKHUpLHRoaXMudFNoaWZ0LnB1c2gobCksdGhpcy5zQ291bnQucHVzaChwKSx0aGlzLmJzQ291bnQucHVzaCgwKSxmPSExLGw9MCxwPTAscz11KzEpfXRoaXMuYk1hcmtzLnB1c2goYS5sZW5ndGgpLHRoaXMuZU1hcmtzLnB1c2goYS5sZW5ndGgpLHRoaXMudFNoaWZ0LnB1c2goMCksdGhpcy5zQ291bnQucHVzaCgwKSx0aGlzLmJzQ291bnQucHVzaCgwKSx0aGlzLmxpbmVNYXg9dGhpcy5iTWFya3MubGVuZ3RoLTF9dmFyIGk9bigxNDUpLG89big1KS5pc1NwYWNlO3IucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW5ldyBpKGUsdCxuKTtyZXR1cm4gci5ibG9jaz0hMCxuPDAmJnRoaXMubGV2ZWwtLSxyLmxldmVsPXRoaXMubGV2ZWwsbj4wJiZ0aGlzLmxldmVsKyssdGhpcy50b2tlbnMucHVzaChyKSxyfSxyLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJNYXJrc1tlXSt0aGlzLnRTaGlmdFtlXT49dGhpcy5lTWFya3NbZV19LHIucHJvdG90eXBlLnNraXBFbXB0eUxpbmVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmxpbmVNYXg7ZTx0JiYhKHRoaXMuYk1hcmtzW2VdK3RoaXMudFNoaWZ0W2VdPHRoaXMuZU1hcmtzW2VdKTtlKyspO3JldHVybiBlfSxyLnByb3RvdHlwZS5za2lwU3BhY2VzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXMuc3JjLmxlbmd0aDtlPG4mJih0PXRoaXMuc3JjLmNoYXJDb2RlQXQoZSksbyh0KSk7ZSsrKTtyZXR1cm4gZX0sci5wcm90b3R5cGUuc2tpcFNwYWNlc0JhY2s9ZnVuY3Rpb24oZSx0KXtpZihlPD10KXJldHVybiBlO2Zvcig7ZT50OylpZighbyh0aGlzLnNyYy5jaGFyQ29kZUF0KC0tZSkpKXJldHVybiBlKzE7cmV0dXJuIGV9LHIucHJvdG90eXBlLnNraXBDaGFycz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnNyYy5sZW5ndGg7ZTxuJiZ0aGlzLnNyYy5jaGFyQ29kZUF0KGUpPT09dDtlKyspO3JldHVybiBlfSxyLnByb3RvdHlwZS5za2lwQ2hhcnNCYWNrPWZ1bmN0aW9uKGUsdCxuKXtpZihlPD1uKXJldHVybiBlO2Zvcig7ZT5uOylpZih0IT09dGhpcy5zcmMuY2hhckNvZGVBdCgtLWUpKXJldHVybiBlKzE7cmV0dXJuIGV9LHIucHJvdG90eXBlLmdldExpbmVzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEscyx1LGMsbCxwLGY9ZTtpZihlPj10KXJldHVybiIiO2ZvcihsPW5ldyBBcnJheSh0LWUpLGk9MDtmPHQ7ZisrLGkrKyl7Zm9yKGE9MCxwPXU9dGhpcy5iTWFya3NbZl0sYz1mKzE8dHx8cj90aGlzLmVNYXJrc1tmXSsxOnRoaXMuZU1hcmtzW2ZdO3U8YyYmYTxuOyl7aWYocz10aGlzLnNyYy5jaGFyQ29kZUF0KHUpLG8ocykpOT09PXM/YSs9NC0oYSt0aGlzLmJzQ291bnRbZl0pJTQ6YSsrO2Vsc2V7aWYoISh1LXA8dGhpcy50U2hpZnRbZl0pKWJyZWFrO2ErK311Kyt9bFtpXT1hPm4/bmV3IEFycmF5KGEtbisxKS5qb2luKCIgIikrdGhpcy5zcmMuc2xpY2UodSxjKTp0aGlzLnNyYy5zbGljZSh1LGMpfXJldHVybiBsLmpvaW4oIiIpfSxyLnByb3RvdHlwZS5Ub2tlbj1pLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZTtmb3IodGhpcy5ydWxlcj1uZXcgaSxlPTA7ZTxvLmxlbmd0aDtlKyspdGhpcy5ydWxlci5wdXNoKG9bZV1bMF0sb1tlXVsxXSk7Zm9yKHRoaXMucnVsZXIyPW5ldyBpLGU9MDtlPGEubGVuZ3RoO2UrKyl0aGlzLnJ1bGVyMi5wdXNoKGFbZV1bMF0sYVtlXVsxXSl9dmFyIGk9bigxNDQpLG89W1sidGV4dCIsbig2NzcpXSxbIm5ld2xpbmUiLG4oNjc4KV0sWyJlc2NhcGUiLG4oNjc5KV0sWyJiYWNrdGlja3MiLG4oNjgwKV0sWyJzdHJpa2V0aHJvdWdoIixuKDI5NikudG9rZW5pemVdLFsiZW1waGFzaXMiLG4oMjk3KS50b2tlbml6ZV0sWyJsaW5rIixuKDY4MSldLFsiaW1hZ2UiLG4oNjgyKV0sWyJhdXRvbGluayIsbig2ODMpXSxbImh0bWxfaW5saW5lIixuKDY4NCldLFsiZW50aXR5IixuKDY4NSldXSxhPVtbImJhbGFuY2VfcGFpcnMiLG4oNjg2KV0sWyJzdHJpa2V0aHJvdWdoIixuKDI5NikucG9zdFByb2Nlc3NdLFsiZW1waGFzaXMiLG4oMjk3KS5wb3N0UHJvY2Vzc10sWyJ0ZXh0X2NvbGxhcHNlIixuKDY4NyldXTtyLnByb3RvdHlwZS5za2lwVG9rZW49ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUucG9zLGk9dGhpcy5ydWxlci5nZXRSdWxlcygiIiksbz1pLmxlbmd0aCxhPWUubWQub3B0aW9ucy5tYXhOZXN0aW5nLHM9ZS5jYWNoZTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBzW3JdKXJldHVybiB2b2lkKGUucG9zPXNbcl0pO2lmKGUubGV2ZWw8YSlmb3Iobj0wO248byYmKGUubGV2ZWwrKyx0PWlbbl0oZSwhMCksZS5sZXZlbC0tLCF0KTtuKyspO2Vsc2UgZS5wb3M9ZS5wb3NNYXg7dHx8ZS5wb3MrKyxzW3JdPWUucG9zfSxyLnByb3RvdHlwZS50b2tlbml6ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpLGk9ci5sZW5ndGgsbz1lLnBvc01heCxhPWUubWQub3B0aW9ucy5tYXhOZXN0aW5nO2UucG9zPG87KXtpZihlLmxldmVsPGEpZm9yKG49MDtuPGkmJiEodD1yW25dKGUsITEpKTtuKyspO2lmKHQpe2lmKGUucG9zPj1vKWJyZWFrfWVsc2UgZS5wZW5kaW5nKz1lLnNyY1tlLnBvcysrXX1lLnBlbmRpbmcmJmUucHVzaFBlbmRpbmcoKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9bmV3IHRoaXMuU3RhdGUoZSx0LG4scik7Zm9yKHRoaXMudG9rZW5pemUocyksbz10aGlzLnJ1bGVyMi5nZXRSdWxlcygiIiksYT1vLmxlbmd0aCxpPTA7aTxhO2krKylvW2ldKHMpfSxyLnByb3RvdHlwZS5TdGF0ZT1uKDY4OCksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtzd2l0Y2goZSl7Y2FzZSAxMDpjYXNlIDMzOmNhc2UgMzU6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA1ODpjYXNlIDYwOmNhc2UgNjE6Y2FzZSA2MjpjYXNlIDY0OmNhc2UgOTE6Y2FzZSA5MjpjYXNlIDkzOmNhc2UgOTQ6Y2FzZSA5NTpjYXNlIDk2OmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgMTI2OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLnBvcztuPGUucG9zTWF4JiYhcihlLnNyYy5jaGFyQ29kZUF0KG4pKTspbisrO3JldHVybiBuIT09ZS5wb3MmJih0fHwoZS5wZW5kaW5nKz1lLnNyYy5zbGljZShlLnBvcyxuKSksZS5wb3M9biwhMCl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSkuaXNTcGFjZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixpLG89ZS5wb3M7aWYoMTAhPT1lLnNyYy5jaGFyQ29kZUF0KG8pKXJldHVybiExO2ZvcihuPWUucGVuZGluZy5sZW5ndGgtMSxpPWUucG9zTWF4LHR8fChuPj0wJiYzMj09PWUucGVuZGluZy5jaGFyQ29kZUF0KG4pP24+PTEmJjMyPT09ZS5wZW5kaW5nLmNoYXJDb2RlQXQobi0xKT8oZS5wZW5kaW5nPWUucGVuZGluZy5yZXBsYWNlKC8gKyQvLCIiKSxlLnB1c2goImhhcmRicmVhayIsImJyIiwwKSk6KGUucGVuZGluZz1lLnBlbmRpbmcuc2xpY2UoMCwtMSksZS5wdXNoKCJzb2Z0YnJlYWsiLCJiciIsMCkpOmUucHVzaCgic29mdGJyZWFrIiwiYnIiLDApKSxvKys7bzxpJiZyKGUuc3JjLmNoYXJDb2RlQXQobykpOylvKys7cmV0dXJuIGUucG9zPW8sITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Zvcih2YXIgcj1uKDUpLmlzU3BhY2UsaT1bXSxvPTA7bzwyNTY7bysrKWkucHVzaCgwKTsiXFwhXCIjJCUmJygpKissLi86Ozw9Pj9AW11eX2B7fH1+LSIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7aVtlLmNoYXJDb2RlQXQoMCldPTF9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPWUucG9zLGE9ZS5wb3NNYXg7aWYoOTIhPT1lLnNyYy5jaGFyQ29kZUF0KG8pKXJldHVybiExO2lmKCsrbzxhKXtpZigobj1lLnNyYy5jaGFyQ29kZUF0KG8pKTwyNTYmJjAhPT1pW25dKXJldHVybiB0fHwoZS5wZW5kaW5nKz1lLnNyY1tvXSksZS5wb3MrPTIsITA7aWYoMTA9PT1uKXtmb3IodHx8ZS5wdXNoKCJoYXJkYnJlYWsiLCJiciIsMCksbysrO288YSYmKG49ZS5zcmMuY2hhckNvZGVBdChvKSxyKG4pKTspbysrO3JldHVybiBlLnBvcz1vLCEwfX1yZXR1cm4gdHx8KGUucGVuZGluZys9IlxcIiksZS5wb3MrKywhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHU9ZS5wb3M7aWYoOTYhPT1lLnNyYy5jaGFyQ29kZUF0KHUpKXJldHVybiExO2ZvcihuPXUsdSsrLHI9ZS5wb3NNYXg7dTxyJiY5Nj09PWUuc3JjLmNoYXJDb2RlQXQodSk7KXUrKztmb3IoaT1lLnNyYy5zbGljZShuLHUpLG89YT11Oy0xIT09KG89ZS5zcmMuaW5kZXhPZigiYCIsYSkpOyl7Zm9yKGE9bysxO2E8ciYmOTY9PT1lLnNyYy5jaGFyQ29kZUF0KGEpOylhKys7aWYoYS1vPT09aS5sZW5ndGgpcmV0dXJuIHR8fChzPWUucHVzaCgiY29kZV9pbmxpbmUiLCJjb2RlIiwwKSxzLm1hcmt1cD1pLHMuY29udGVudD1lLnNyYy5zbGljZSh1LG8pLnJlcGxhY2UoL1sgXG5dKy9nLCIgIikudHJpbSgpKSxlLnBvcz1hLCEwfXJldHVybiB0fHwoZS5wZW5kaW5nKz1pKSxlLnBvcys9aS5sZW5ndGgsITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSkubm9ybWFsaXplUmVmZXJlbmNlLGk9big1KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG8sYSxzLHUsYyxsLHAsZixkLGg9IiIsbT1lLnBvcyxnPWUucG9zTWF4LHk9ZS5wb3Msdj0hMDtpZig5MSE9PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MpKXJldHVybiExO2lmKHU9ZS5wb3MrMSwocz1lLm1kLmhlbHBlcnMucGFyc2VMaW5rTGFiZWwoZSxlLnBvcywhMCkpPDApcmV0dXJuITE7aWYoKGM9cysxKTxnJiY0MD09PWUuc3JjLmNoYXJDb2RlQXQoYykpe2Zvcih2PSExLGMrKztjPGcmJihvPWUuc3JjLmNoYXJDb2RlQXQoYyksaShvKXx8MTA9PT1vKTtjKyspO2lmKGM+PWcpcmV0dXJuITE7Zm9yKHk9YyxsPWUubWQuaGVscGVycy5wYXJzZUxpbmtEZXN0aW5hdGlvbihlLnNyYyxjLGUucG9zTWF4KSxsLm9rJiYoaD1lLm1kLm5vcm1hbGl6ZUxpbmsobC5zdHIpLGUubWQudmFsaWRhdGVMaW5rKGgpP2M9bC5wb3M6aD0iIikseT1jO2M8ZyYmKG89ZS5zcmMuY2hhckNvZGVBdChjKSxpKG8pfHwxMD09PW8pO2MrKyk7aWYobD1lLm1kLmhlbHBlcnMucGFyc2VMaW5rVGl0bGUoZS5zcmMsYyxlLnBvc01heCksYzxnJiZ5IT09YyYmbC5vaylmb3IoZj1sLnN0cixjPWwucG9zO2M8ZyYmKG89ZS5zcmMuY2hhckNvZGVBdChjKSxpKG8pfHwxMD09PW8pO2MrKyk7ZWxzZSBmPSIiOyhjPj1nfHw0MSE9PWUuc3JjLmNoYXJDb2RlQXQoYykpJiYodj0hMCksYysrfWlmKHYpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGUuZW52LnJlZmVyZW5jZXMpcmV0dXJuITE7aWYoYzxnJiY5MT09PWUuc3JjLmNoYXJDb2RlQXQoYyk/KHk9YysxLGM9ZS5tZC5oZWxwZXJzLnBhcnNlTGlua0xhYmVsKGUsYyksYz49MD9hPWUuc3JjLnNsaWNlKHksYysrKTpjPXMrMSk6Yz1zKzEsYXx8KGE9ZS5zcmMuc2xpY2UodSxzKSksIShwPWUuZW52LnJlZmVyZW5jZXNbcihhKV0pKXJldHVybiBlLnBvcz1tLCExO2g9cC5ocmVmLGY9cC50aXRsZX1yZXR1cm4gdHx8KGUucG9zPXUsZS5wb3NNYXg9cyxkPWUucHVzaCgibGlua19vcGVuIiwiYSIsMSksZC5hdHRycz1uPVtbImhyZWYiLGhdXSxmJiZuLnB1c2goWyJ0aXRsZSIsZl0pLGUubWQuaW5saW5lLnRva2VuaXplKGUpLGQ9ZS5wdXNoKCJsaW5rX2Nsb3NlIiwiYSIsLTEpKSxlLnBvcz1jLGUucG9zTWF4PWcsITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSkubm9ybWFsaXplUmVmZXJlbmNlLGk9big1KS5pc1NwYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG8sYSxzLHUsYyxsLHAsZixkLGgsbSxnLHk9IiIsdj1lLnBvcyxiPWUucG9zTWF4O2lmKDMzIT09ZS5zcmMuY2hhckNvZGVBdChlLnBvcykpcmV0dXJuITE7aWYoOTEhPT1lLnNyYy5jaGFyQ29kZUF0KGUucG9zKzEpKXJldHVybiExO2lmKGM9ZS5wb3MrMiwodT1lLm1kLmhlbHBlcnMucGFyc2VMaW5rTGFiZWwoZSxlLnBvcysxLCExKSk8MClyZXR1cm4hMTtpZigobD11KzEpPGImJjQwPT09ZS5zcmMuY2hhckNvZGVBdChsKSl7Zm9yKGwrKztsPGImJihvPWUuc3JjLmNoYXJDb2RlQXQobCksaShvKXx8MTA9PT1vKTtsKyspO2lmKGw+PWIpcmV0dXJuITE7Zm9yKGc9bCxmPWUubWQuaGVscGVycy5wYXJzZUxpbmtEZXN0aW5hdGlvbihlLnNyYyxsLGUucG9zTWF4KSxmLm9rJiYoeT1lLm1kLm5vcm1hbGl6ZUxpbmsoZi5zdHIpLGUubWQudmFsaWRhdGVMaW5rKHkpP2w9Zi5wb3M6eT0iIiksZz1sO2w8YiYmKG89ZS5zcmMuY2hhckNvZGVBdChsKSxpKG8pfHwxMD09PW8pO2wrKyk7aWYoZj1lLm1kLmhlbHBlcnMucGFyc2VMaW5rVGl0bGUoZS5zcmMsbCxlLnBvc01heCksbDxiJiZnIT09bCYmZi5vaylmb3IoZD1mLnN0cixsPWYucG9zO2w8YiYmKG89ZS5zcmMuY2hhckNvZGVBdChsKSxpKG8pfHwxMD09PW8pO2wrKyk7ZWxzZSBkPSIiO2lmKGw+PWJ8fDQxIT09ZS5zcmMuY2hhckNvZGVBdChsKSlyZXR1cm4gZS5wb3M9diwhMTtsKyt9ZWxzZXtpZigidW5kZWZpbmVkIj09PXR5cGVvZiBlLmVudi5yZWZlcmVuY2VzKXJldHVybiExO2lmKGw8YiYmOTE9PT1lLnNyYy5jaGFyQ29kZUF0KGwpPyhnPWwrMSxsPWUubWQuaGVscGVycy5wYXJzZUxpbmtMYWJlbChlLGwpLGw+PTA/cz1lLnNyYy5zbGljZShnLGwrKyk6bD11KzEpOmw9dSsxLHN8fChzPWUuc3JjLnNsaWNlKGMsdSkpLCEocD1lLmVudi5yZWZlcmVuY2VzW3IocyldKSlyZXR1cm4gZS5wb3M9diwhMTt5PXAuaHJlZixkPXAudGl0bGV9cmV0dXJuIHR8fChhPWUuc3JjLnNsaWNlKGMsdSksZS5tZC5pbmxpbmUucGFyc2UoYSxlLm1kLGUuZW52LG09W10pLGg9ZS5wdXNoKCJpbWFnZSIsImltZyIsMCksaC5hdHRycz1uPVtbInNyYyIseV0sWyJhbHQiLCIiXV0saC5jaGlsZHJlbj1tLGguY29udGVudD1hLGQmJm4ucHVzaChbInRpdGxlIixkXSkpLGUucG9zPWwsZS5wb3NNYXg9YiwhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9L148KFthLXpBLVowLTkuISMkJSYnKitcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqKT4vLGk9L148KFthLXpBLVpdW2EtekEtWjAtOSsuXC1dezEsMzF9KTooW148Plx4MDAtXHgyMF0qKT4vO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG8sYSxzLHUsYyxsPWUucG9zO3JldHVybiA2MD09PWUuc3JjLmNoYXJDb2RlQXQobCkmJihuPWUuc3JjLnNsaWNlKGwpLCEobi5pbmRleE9mKCI+Iik8MCkmJihpLnRlc3Qobik/KG89bi5tYXRjaChpKSxzPW9bMF0uc2xpY2UoMSwtMSksdT1lLm1kLm5vcm1hbGl6ZUxpbmsocyksISFlLm1kLnZhbGlkYXRlTGluayh1KSYmKHR8fChjPWUucHVzaCgibGlua19vcGVuIiwiYSIsMSksYy5hdHRycz1bWyJocmVmIix1XV0sYy5tYXJrdXA9ImF1dG9saW5rIixjLmluZm89ImF1dG8iLGM9ZS5wdXNoKCJ0ZXh0IiwiIiwwKSxjLmNvbnRlbnQ9ZS5tZC5ub3JtYWxpemVMaW5rVGV4dChzKSxjPWUucHVzaCgibGlua19jbG9zZSIsImEiLC0xKSxjLm1hcmt1cD0iYXV0b2xpbmsiLGMuaW5mbz0iYXV0byIpLGUucG9zKz1vWzBdLmxlbmd0aCwhMCkpOiEhci50ZXN0KG4pJiYoYT1uLm1hdGNoKHIpLHM9YVswXS5zbGljZSgxLC0xKSx1PWUubWQubm9ybWFsaXplTGluaygibWFpbHRvOiIrcyksISFlLm1kLnZhbGlkYXRlTGluayh1KSYmKHR8fChjPWUucHVzaCgibGlua19vcGVuIiwiYSIsMSksYy5hdHRycz1bWyJocmVmIix1XV0sYy5tYXJrdXA9ImF1dG9saW5rIixjLmluZm89ImF1dG8iLGM9ZS5wdXNoKCJ0ZXh0IiwiIiwwKSxjLmNvbnRlbnQ9ZS5tZC5ub3JtYWxpemVMaW5rVGV4dChzKSxjPWUucHVzaCgibGlua19jbG9zZSIsImEiLC0xKSxjLm1hcmt1cD0iYXV0b2xpbmsiLGMuaW5mbz0iYXV0byIpLGUucG9zKz1hWzBdLmxlbmd0aCwhMCkpKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9MzJ8ZTtyZXR1cm4gdD49OTcmJnQ8PTEyMn12YXIgaT1uKDI5NSkuSFRNTF9UQUdfUkU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sbyxhLHMsdT1lLnBvcztyZXR1cm4hIWUubWQub3B0aW9ucy5odG1sJiYoYT1lLnBvc01heCwhKDYwIT09ZS5zcmMuY2hhckNvZGVBdCh1KXx8dSsyPj1hKSYmKCEoMzMhPT0obj1lLnNyYy5jaGFyQ29kZUF0KHUrMSkpJiY2MyE9PW4mJjQ3IT09biYmIXIobikpJiYoISEobz1lLnNyYy5zbGljZSh1KS5tYXRjaChpKSkmJih0fHwocz1lLnB1c2goImh0bWxfaW5saW5lIiwiIiwwKSxzLmNvbnRlbnQ9ZS5zcmMuc2xpY2UodSx1K29bMF0ubGVuZ3RoKSksZS5wb3MrPW9bMF0ubGVuZ3RoLCEwKSkpKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyOTQpLGk9big1KS5oYXMsbz1uKDUpLmlzVmFsaWRFbnRpdHlDb2RlLGE9big1KS5mcm9tQ29kZVBvaW50LHM9L14mIygoPzp4W2EtZjAtOV17MSw4fXxbMC05XXsxLDh9KSk7L2ksdT0vXiYoW2Etel1bYS16MC05XXsxLDMxfSk7L2k7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYyxsPWUucG9zLHA9ZS5wb3NNYXg7aWYoMzghPT1lLnNyYy5jaGFyQ29kZUF0KGwpKXJldHVybiExO2lmKGwrMTxwKWlmKDM1PT09ZS5zcmMuY2hhckNvZGVBdChsKzEpKXtpZihjPWUuc3JjLnNsaWNlKGwpLm1hdGNoKHMpKXJldHVybiB0fHwobj0ieCI9PT1jWzFdWzBdLnRvTG93ZXJDYXNlKCk/cGFyc2VJbnQoY1sxXS5zbGljZSgxKSwxNik6cGFyc2VJbnQoY1sxXSwxMCksZS5wZW5kaW5nKz1hKG8obik/bjo2NTUzMykpLGUucG9zKz1jWzBdLmxlbmd0aCwhMH1lbHNlIGlmKChjPWUuc3JjLnNsaWNlKGwpLm1hdGNoKHUpKSYmaShyLGNbMV0pKXJldHVybiB0fHwoZS5wZW5kaW5nKz1yW2NbMV1dKSxlLnBvcys9Y1swXS5sZW5ndGgsITA7cmV0dXJuIHR8fChlLnBlbmRpbmcrPSImIiksZS5wb3MrKywhMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG89ZS5kZWxpbWl0ZXJzLGE9ZS5kZWxpbWl0ZXJzLmxlbmd0aDtmb3IodD0wO3Q8YTt0KyspaWYocj1vW3RdLHIuY2xvc2UpZm9yKG49dC1yLmp1bXAtMTtuPj0wOyl7aWYoaT1vW25dLGkub3BlbiYmaS5tYXJrZXI9PT1yLm1hcmtlciYmaS5lbmQ8MCYmaS5sZXZlbD09PXIubGV2ZWwpe3ZhciBzPShpLmNsb3NlfHxyLm9wZW4pJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBpLmxlbmd0aCYmInVuZGVmaW5lZCIhPT10eXBlb2Ygci5sZW5ndGgmJihpLmxlbmd0aCtyLmxlbmd0aCklMz09PTA7aWYoIXMpe3IuanVtcD10LW4sci5vcGVuPSExLGkuZW5kPXQsaS5qdW1wPTA7YnJlYWt9fW4tPWkuanVtcCsxfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wLGk9ZS50b2tlbnMsbz1lLnRva2Vucy5sZW5ndGg7Zm9yKHQ9bj0wO3Q8bzt0Kyspcis9aVt0XS5uZXN0aW5nLGlbdF0ubGV2ZWw9ciwidGV4dCI9PT1pW3RdLnR5cGUmJnQrMTxvJiYidGV4dCI9PT1pW3QrMV0udHlwZT9pW3QrMV0uY29udGVudD1pW3RdLmNvbnRlbnQraVt0KzFdLmNvbnRlbnQ6KHQhPT1uJiYoaVtuXT1pW3RdKSxuKyspO3QhPT1uJiYoaS5sZW5ndGg9bil9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dGhpcy5zcmM9ZSx0aGlzLmVudj1uLHRoaXMubWQ9dCx0aGlzLnRva2Vucz1yLHRoaXMucG9zPTAsdGhpcy5wb3NNYXg9dGhpcy5zcmMubGVuZ3RoLHRoaXMubGV2ZWw9MCx0aGlzLnBlbmRpbmc9IiIsdGhpcy5wZW5kaW5nTGV2ZWw9MCx0aGlzLmNhY2hlPXt9LHRoaXMuZGVsaW1pdGVycz1bXX12YXIgaT1uKDE0NSksbz1uKDUpLmlzV2hpdGVTcGFjZSxhPW4oNSkuaXNQdW5jdENoYXIscz1uKDUpLmlzTWRBc2NpaVB1bmN0O3IucHJvdG90eXBlLnB1c2hQZW5kaW5nPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGkoInRleHQiLCIiLDApO3JldHVybiBlLmNvbnRlbnQ9dGhpcy5wZW5kaW5nLGUubGV2ZWw9dGhpcy5wZW5kaW5nTGV2ZWwsdGhpcy50b2tlbnMucHVzaChlKSx0aGlzLnBlbmRpbmc9IiIsZX0sci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQsbil7dGhpcy5wZW5kaW5nJiZ0aGlzLnB1c2hQZW5kaW5nKCk7dmFyIHI9bmV3IGkoZSx0LG4pO3JldHVybiBuPDAmJnRoaXMubGV2ZWwtLSxyLmxldmVsPXRoaXMubGV2ZWwsbj4wJiZ0aGlzLmxldmVsKyssdGhpcy5wZW5kaW5nTGV2ZWw9dGhpcy5sZXZlbCx0aGlzLnRva2Vucy5wdXNoKHIpLHJ9LHIucHJvdG90eXBlLnNjYW5EZWxpbXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksdSxjLGwscCxmLGQsaD1lLG09ITAsZz0hMCx5PXRoaXMucG9zTWF4LHY9dGhpcy5zcmMuY2hhckNvZGVBdChlKTtmb3Iobj1lPjA/dGhpcy5zcmMuY2hhckNvZGVBdChlLTEpOjMyO2g8eSYmdGhpcy5zcmMuY2hhckNvZGVBdChoKT09PXY7KWgrKztyZXR1cm4gaT1oLWUscj1oPHk/dGhpcy5zcmMuY2hhckNvZGVBdChoKTozMixwPXMobil8fGEoU3RyaW5nLmZyb21DaGFyQ29kZShuKSksZD1zKHIpfHxhKFN0cmluZy5mcm9tQ2hhckNvZGUocikpLGw9byhuKSxmPW8ociksZj9tPSExOmQmJihsfHxwfHwobT0hMSkpLGw/Zz0hMTpwJiYoZnx8ZHx8KGc9ITEpKSx0Pyh1PW0sYz1nKToodT1tJiYoIWd8fHApLGM9ZyYmKCFtfHxkKSkse2Nhbl9vcGVuOnUsY2FuX2Nsb3NlOmMsbGVuZ3RoOml9fSxyLnByb3RvdHlwZS5Ub2tlbj1pLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMSx4aHRtbE91dDohMSxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLHR5cG9ncmFwaGVyOiExLHF1b3RlczoiXHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5IixoaWdobGlnaHQ6bnVsbCxtYXhOZXN0aW5nOjEwMH0sY29tcG9uZW50czp7Y29yZTp7fSxibG9jazp7fSxpbmxpbmU6e319fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e29wdGlvbnM6e2h0bWw6ITEseGh0bWxPdXQ6ITEsYnJlYWtzOiExLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbGlua2lmeTohMSx0eXBvZ3JhcGhlcjohMSxxdW90ZXM6Ilx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOSIsaGlnaGxpZ2h0Om51bGwsbWF4TmVzdGluZzoyMH0sY29tcG9uZW50czp7Y29yZTp7cnVsZXM6WyJub3JtYWxpemUiLCJibG9jayIsImlubGluZSJdfSxibG9jazp7cnVsZXM6WyJwYXJhZ3JhcGgiXX0saW5saW5lOntydWxlczpbInRleHQiXSxydWxlczI6WyJiYWxhbmNlX3BhaXJzIiwidGV4dF9jb2xsYXBzZSJdfX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMCx4aHRtbE91dDohMCxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLHR5cG9ncmFwaGVyOiExLHF1b3RlczoiXHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5IixoaWdobGlnaHQ6bnVsbCxtYXhOZXN0aW5nOjIwfSxjb21wb25lbnRzOntjb3JlOntydWxlczpbIm5vcm1hbGl6ZSIsImJsb2NrIiwiaW5saW5lIl19LGJsb2NrOntydWxlczpbImJsb2NrcXVvdGUiLCJjb2RlIiwiZmVuY2UiLCJoZWFkaW5nIiwiaHIiLCJodG1sX2Jsb2NrIiwibGhlYWRpbmciLCJsaXN0IiwicmVmZXJlbmNlIiwicGFyYWdyYXBoIl19LGlubGluZTp7cnVsZXM6WyJhdXRvbGluayIsImJhY2t0aWNrcyIsImVtcGhhc2lzIiwiZW50aXR5IiwiZXNjYXBlIiwiaHRtbF9pbmxpbmUiLCJpbWFnZSIsImxpbmsiLCJuZXdsaW5lIiwidGV4dCJdLHJ1bGVzMjpbImJhbGFuY2VfcGFpcnMiLCJlbXBoYXNpcyIsInRleHRfY29sbGFwc2UiXX19fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDcpLG89bigwKSxhPW4oNTEpLHM9bigxKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlLG49ZS5maWVsZHMscj1lLmludGVyZmFjZXMscz1lLmxldmVsLHU9bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNEZXByZWNhdGVkfSksYz1uLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0RlcHJlY2F0ZWR9KSxsPXQgaW5zdGFuY2VvZiBpLkdyYXBoUUxJbnRlcmZhY2VUeXBlPyJpbnRlcmZhY2UgIjoidHlwZSI7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChoLG51bGwsby5jcmVhdGVFbGVtZW50KG0sbnVsbCxvLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImZpZWxkLW5hbWUifSxsKSwiICIsby5jcmVhdGVFbGVtZW50KGcsbnVsbCx0Lm5hbWUpLCIgIiwwPT09ci5sZW5ndGgmJm8uY3JlYXRlRWxlbWVudChiLG51bGwsInsiKSksci5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHkse2tleTplLm5hbWUsdHlwZTplLHg6cyx5OnQsY29sbGFwc2FibGU6ITAsYmVmb3JlTm9kZTpvLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImZpZWxkLW5hbWUifSwiaW1wbGVtZW50cyIpLGFmdGVyTm9kZTp0PT09ci5sZW5ndGgtMT9vLmNyZWF0ZUVsZW1lbnQoYixudWxsLCJ7Iik6bnVsbCxsYXN0QWN0aXZlOiExfSl9KSx1Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYS5kZWZhdWx0LHtrZXk6ZS5uYW1lLHR5cGU6ZSx4OnMseTp0K3IubGVuZ3RoLGNvbGxhcHNhYmxlOiEwLGxhc3RBY3RpdmU6ITF9KX0pLGMubGVuZ3RoPjAmJm8uY3JlYXRlRWxlbWVudCgiYnIiLG51bGwpLGMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8uY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OmUubmFtZX0sby5jcmVhdGVFbGVtZW50KHYsbnVsbCwiIyBEZXByZWNhdGVkOiAiLGUuZGVwcmVjYXRpb25SZWFzb24pLG8uY3JlYXRlRWxlbWVudChhLmRlZmF1bHQse3R5cGU6ZSx4OnMseTp0K3UubGVuZ3RoK3IubGVuZ3RoLGNvbGxhcHNhYmxlOiEwLGxhc3RBY3RpdmU6ITF9KSl9KSxvLmNyZWF0ZUVsZW1lbnQobSxudWxsLG8uY3JlYXRlRWxlbWVudChiLG51bGwsIn0iKSkpfTt2YXIgdSxjLGwscCxmLGQsaD1zLnN0eWxlZC5kaXYodXx8KHU9cihbIlxuICBmb250LXNpemU6IDE0cHg7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAuZG9jLWNhdGVnb3J5LWl0ZW0ge1xuICAgIHBhZGRpbmctbGVmdDogMzJweDtcbiAgfVxuIl0sWyJcbiAgZm9udC1zaXplOiAxNHB4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgLmRvYy1jYXRlZ29yeS1pdGVtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDMycHg7XG4gIH1cbiJdKSkpLG09cy5zdHlsZWQuZGl2KGN8fChjPXIoWyJcbiAgcGFkZGluZzogNnB4IDE2cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4iXSxbIlxuICBwYWRkaW5nOiA2cHggMTZweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiJdKSkpLGc9cy5zdHlsZWQuc3BhbihsfHwobD1yKFsiXG4gIGNvbG9yOiAjZjI1YzU0O1xuIl0sWyJcbiAgY29sb3I6ICNmMjVjNTQ7XG4iXSkpKSx5PXMuc3R5bGVkKGEuZGVmYXVsdCkocHx8KHA9cihbIlxuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIC5maWVsZC1uYW1lIHtcbiAgICBjb2xvcjogcmdiKDI0NSwgMTYwLCAwKTtcbiAgfVxuICAudHlwZS1uYW1lIHtcbiAgICBjb2xvcjogI2YyNWM1NDtcbiAgfVxuIl0sWyJcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAuZmllbGQtbmFtZSB7XG4gICAgY29sb3I6IHJnYigyNDUsIDE2MCwgMCk7XG4gIH1cbiAgLnR5cGUtbmFtZSB7XG4gICAgY29sb3I6ICNmMjVjNTQ7XG4gIH1cbiJdKSkpLHY9cy5zdHlsZWQuc3BhbihmfHwoZj1yKFsiXG4gIGNvbG9yOiAiLCI7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG4gIHBhZGRpbmctbGVmdDogMzJweDtcbiJdLFsiXG4gIGNvbG9yOiAiLCI7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG4gIHBhZGRpbmctbGVmdDogMzJweDtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5ibGFjazUwfSksYj1zLnN0eWxlZC5zcGFuKGR8fChkPXIoWyJcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICIsIjtcbiJdLFsiXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuZGFya0JsdWU1MH0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDApLGk9bigxNDYpLG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlO3JldHVybiByLmNyZWF0ZUVsZW1lbnQoaS5Eb2NUeXBlLHtjbGFzc05hbWU6ImRvYy10eXBlLXNjaGVtYSJ9LHIuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiZmllbGQtbmFtZSJ9LCJzY2FsYXIiKSwiICIsci5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJ0eXBlLW5hbWUifSx0Lm5hbWUpKX07dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oMSksYT1uKDE0Nikscz1mdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUsbj1lLnNkbFR5cGUscj1uP3QuX3ZhbHVlczp0LmdldFZhbHVlcygpLG89ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNEZXByZWNhdGVkfSk7cmV0dXJuIGkuY3JlYXRlRWxlbWVudChhLkRvY1R5cGUse2NsYXNzTmFtZToiZG9jLXR5cGUtc2NoZW1hIn0saS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJmaWVsZC1uYW1lIn0sImVudW0iKSwiICIsaS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJ0eXBlLW5hbWUifSx0Lm5hbWUpLCIgIixpLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImJyYWNlIn0sInsiKSxyLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5pc0RlcHJlY2F0ZWR9KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KGwse2tleTplLm5hbWUsZmlyc3Q6MD09PXQsdmFsdWU6ZX0pfSksby5sZW5ndGg+MCYmaS5jcmVhdGVFbGVtZW50KCJiciIsbnVsbCksby5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KGwse2ZpcnN0OjA9PT10LGtleTplLm5hbWUsdmFsdWU6ZSxpc0RlcHJlY2F0ZWQ6ITB9KX0pLGkuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiYnJhY2UifSwifSIpKX07dC5kZWZhdWx0PXM7dmFyIHUsYyxsPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUsbj1lLmlzRGVwcmVjYXRlZCxyPWUuZmlyc3Q7cmV0dXJuIGkuY3JlYXRlRWxlbWVudChwLHtmaXJzdDpyfSxpLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZmllbGQtbmFtZSJ9LHQubmFtZSksdC5kZXNjcmlwdGlvbiYmaS5jcmVhdGVFbGVtZW50KGYsbnVsbCx0LmRlc2NyaXB0aW9uKSxuJiZpLmNyZWF0ZUVsZW1lbnQoZixudWxsLCJEZXByZWNhdGVkOiAiLHQuZGVwcmVjYXRpb25SZWFzb24pKX0scD1vLnN0eWxlZCgiZGl2IikodXx8KHU9cihbIlxuICBtYXJnaW4tdG9wOiAiLCJweDtcbiAgLmZpZWxkLW5hbWUge1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICBjb2xvcjogcmVkO1xuICB9XG4iXSxbIlxuICBtYXJnaW4tdG9wOiAiLCJweDtcbiAgLmZpZWxkLW5hbWUge1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICBjb2xvcjogcmVkO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpcnN0PzA6Nn0pLGY9by5zdHlsZWQuZGl2KGN8fChjPXIoWyJcbiAgcGFkZGluZzogMCAxNnB4O1xuICBjb2xvcjogIiwiO1xuIl0sWyJcbiAgcGFkZGluZzogMCAxNnB4O1xuICBjb2xvcjogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLmJsYWNrNTB9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1MSksaT1uKDApLG89bigxNDYpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY2hlbWEsbj1lLnR5cGUsYT1lLmxldmVsLHM9ZS5zZXNzaW9uSWQsdT10LmdldFBvc3NpYmxlVHlwZXMobik7cmV0dXJuIGkuY3JlYXRlRWxlbWVudChvLkRvY1R5cGUse2NsYXNzTmFtZToiZG9jLXR5cGUtc2NoZW1hIn0saS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJmaWVsZC1uYW1lIn0sInVuaW9uIiksIiAiLGkuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToidHlwZS1uYW1lIn0sbi5uYW1lKSwiID0gIix1Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBpLmNyZWF0ZUVsZW1lbnQoci5kZWZhdWx0LHtrZXk6ZS5uYW1lLHR5cGU6ZSx4OmEseTp0KzEsY29sbGFwc2FibGU6ITAsc2Vzc2lvbklkOnMsbGFzdEFjdGl2ZTohMX0pfSkpfTt0LmRlZmF1bHQ9YX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oMjk5KSxzPW4oNjk3KSx1PW4oNjk4KSxjPW4oMzAwKSxsPW4oMSkscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNlYXJjaFZhbHVlLG49ZS5zY2hlbWEscj1lLndpZHRoLGk9ZS5zZXNzaW9uSWQsbD1lLmhhbmRsZVNlYXJjaDtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEuZGVmYXVsdCx7d2lkdGg6cixvdmVyZmxvdzohMX0sby5jcmVhdGVFbGVtZW50KGMuZGVmYXVsdCx7b25TZWFyY2g6bH0pLG8uY3JlYXRlRWxlbWVudChkLG51bGwsdCYmby5jcmVhdGVFbGVtZW50KHMuZGVmYXVsdCx7c2VhcmNoVmFsdWU6dCxzY2hlbWE6bixsZXZlbDowLHNlc3Npb25JZDppfSksIXQmJm8uY3JlYXRlRWxlbWVudCh1LmRlZmF1bHQse3NjaGVtYTpuLHNlc3Npb25JZDppfSkpKX0sdH0oby5QdXJlQ29tcG9uZW50KTt0LmRlZmF1bHQ9cDt2YXIgZixkPWwuc3R5bGVkLmRpdihmfHwoZj1pKFsiXG4gIG92ZXJmbG93OiBhdXRvO1xuIl0sWyJcbiAgb3ZlcmZsb3c6IGF1dG87XG4iXSkpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dHJ5e3ZhciBuPXQucmVwbGFjZSgvW15fMC05QS1aYS16XS9nLGZ1bmN0aW9uKGUpe3JldHVybiJcXCIrZX0pO3JldHVybi0xIT09ZS5zZWFyY2gobmV3IFJlZ0V4cChuLCJpIikpfWNhdGNoKG4pe3JldHVybi0xIT09ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKX19dmFyIGk9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPW4oMCkscz1uKDEpLHU9big1MSksYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9wcy5zY2hlbWEhPT1lLnNjaGVtYXx8dGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSE9PWUuc2VhcmNoVmFsdWV9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMubGV2ZWwsdD10aGlzLnByb3BzLnNlYXJjaFZhbHVlLG49dGhpcy5wcm9wcy53aXRoaW5UeXBlLGk9dGhpcy5wcm9wcy5zY2hlbWEsbz1bXSxzPVtdLGM9W10sbD1pLmdldFR5cGVNYXAoKSxmPU9iamVjdC5rZXlzKGwpO24mJihmPWYuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09bi5uYW1lfSksZi51bnNoaWZ0KG4ubmFtZSkpO2Zvcih2YXIgZD0wLGg9MCxtPWY7aDxtLmxlbmd0aDtoKyspe3ZhciBnPW1baF07aWYoImJyZWFrIj09PWZ1bmN0aW9uKGkpe2lmKG8ubGVuZ3RoK3MubGVuZ3RoK2MubGVuZ3RoPj0xMDApcmV0dXJuImJyZWFrIjt2YXIgcD1sW2ldO2lmKG4hPT1wJiZyKGksdCkmJnMucHVzaChhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZG9jLWNhdGVnb3J5LWl0ZW0iLGtleTppfSxhLmNyZWF0ZUVsZW1lbnQodS5kZWZhdWx0LHt0eXBlOnAseDplLHk6ZCsrLGxhc3RBY3RpdmU6ITF9KSkpLHAuZ2V0RmllbGRzKXt2YXIgZj1wLmdldEZpZWxkcygpO09iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9ZltzXTtsLnBhcmVudD1wO3ZhciBoO2lmKCFyKHMsdCkpe2lmKCFsLmFyZ3N8fCFsLmFyZ3MubGVuZ3RoKXJldHVybjtpZihoPWwuYXJncy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5uYW1lLHQpfSksMD09PWgubGVuZ3RoKXJldHVybn12YXIgbT1hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZG9jLWNhdGVnb3J5LWl0ZW0iLGtleTppKyIuIitzfSxhLmNyZWF0ZUVsZW1lbnQodS5kZWZhdWx0LHtrZXk6InR5cGUiLHR5cGU6bCx4OmUseTpkKyssc2hvd1BhcmVudE5hbWU6ITAsbGFzdEFjdGl2ZTohMX0pKTtuPT09cD9vLnB1c2gobSk6Yy5wdXNoKG0pfSl9fShnKSlicmVha31yZXR1cm4gby5sZW5ndGgrcy5sZW5ndGgrYy5sZW5ndGg9PT0wP2EuY3JlYXRlRWxlbWVudChwLG51bGwsIk5vIHJlc3VsdHMgZm91bmQuIik6biYmcy5sZW5ndGgrYy5sZW5ndGg+MD9hLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxvLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJkb2MtY2F0ZWdvcnkifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZG9jLWNhdGVnb3J5LXRpdGxlIn0sIm90aGVyIHJlc3VsdHMiKSxzLGMpKTphLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxvLHMsYyl9LHR9KGEuQ29tcG9uZW50KTt0LmRlZmF1bHQ9Yzt2YXIgbCxwPXMuc3R5bGVkLnNwYW4obHx8KGw9byhbIlxuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTZweDtcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XG4iXSxbIlxuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTZweDtcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XG4iXSkpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubmFtZSxuPWUuZmllbGRzLHI9ZS5vZmZzZXQ7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGEuY3JlYXRlRWxlbWVudChjLkNhdGVnb3J5VGl0bGUsbnVsbCx0KSxuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5pc0RlcHJlY2F0ZWR9KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KHMuZGVmYXVsdCx7a2V5OmUubmFtZSx0eXBlOmUseDowLHk6cit0LGNvbGxhcHNhYmxlOiEwLGxhc3RBY3RpdmU6ITF9KX0pKX12YXIgaT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9bigwKSxzPW4oNTEpLHU9big2NiksYz1uKDI5OCksbD1uKDEpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zY2hlbWEsbj1lLnNlc3Npb25JZCxpPXUuc2VyaWFsaXplUm9vdCh0KTtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KGQse2NsYXNzTmFtZToiZG9jLXJvb3QifSxhLmNyZWF0ZUVsZW1lbnQocix7bmFtZToiUXVlcmllcyIsZmllbGRzOmkucXVlcmllcyxvZmZzZXQ6MCxzZXNzaW9uSWQ6bn0pLGkubXV0YXRpb25zLmxlbmd0aD4wJiZhLmNyZWF0ZUVsZW1lbnQocix7bmFtZToiTXV0YXRpb25zIixmaWVsZHM6aS5tdXRhdGlvbnMsb2Zmc2V0OmkucXVlcmllcy5sZW5ndGgsc2Vzc2lvbklkOm59KSxpLnN1YnNjcmlwdGlvbnMubGVuZ3RoPjAmJmEuY3JlYXRlRWxlbWVudChyLHtuYW1lOiJTdWJzY3JpcHRpb25zIixmaWVsZHM6aS5zdWJzY3JpcHRpb25zLG9mZnNldDppLnF1ZXJpZXMubGVuZ3RoK2kubXV0YXRpb25zLmxlbmd0aCxzZXNzaW9uSWQ6bn0pKX0sdH0oYS5QdXJlQ29tcG9uZW50KTt0LmRlZmF1bHQ9cDt2YXIgZixkPWwuc3R5bGVkLmRpdihmfHwoZj1vKFsiXG4gIHBhZGRpbmctbGVmdDogNnB4O1xuXG4gIC5kb2MtY2F0ZWdvcnktaXRlbSAuZmllbGQtbmFtZSB7XG4gICAgY29sb3I6ICNmMjVjNTQ7XG4gIH1cbiJdLFsiXG4gIHBhZGRpbmctbGVmdDogNnB4O1xuXG4gIC5kb2MtY2F0ZWdvcnktaXRlbSAuZmllbGQtbmFtZSB7XG4gICAgY29sb3I6ICNmMjVjNTQ7XG4gIH1cbiJdKSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj12b2lkIDA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxpPWFyZ3VtZW50cztjbGVhclRpbWVvdXQobiksbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bj1udWxsLHQuYXBwbHkocixpKX0sZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oMSkscz1uKDI0KSx1PW4oNzAxKSxjPW4oOSksbD1uKDgpLHA9bigxMiksZj1uKDE2KSxkPW4oMjQ2KSxoPWQuU29ydGFibGVFbGVtZW50KHUuZGVmYXVsdCksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnN0YXRlPXtzb3J0aW5nOiExfSx0Lm9uU29ydFN0YXJ0PWZ1bmN0aW9uKGUpe2UuaW5kZXg7dC5zZXRTdGF0ZSh7c29ydGluZzohMH0pfSx0Lm9uU29ydEVuZD1mdW5jdGlvbihlKXt2YXIgbj1lLm9sZEluZGV4LHI9ZS5uZXdJbmRleDt0LnByb3BzLnJlb3JkZXJUYWJzKG4sciksdC5zZXRTdGF0ZSh7c29ydGluZzohMX0pfSx0LmdldEhlbHBlckRpbWVuc2lvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9fSx0fXJldHVybiByKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc2Vzc2lvbnMsbj1lLmlzQXBwLHI9ZS5zZWxlY3RlZFNlc3Npb25JZCxpPWUub25OZXdTZXNzaW9uLGE9dGhpcy5zdGF0ZS5zb3J0aW5nO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoQyx7b25Tb3J0U3RhcnQ6dGhpcy5vblNvcnRTdGFydCxvblNvcnRFbmQ6dGhpcy5vblNvcnRFbmQsZ2V0SGVscGVyRGltZW5zaW9uczp0aGlzLmdldEhlbHBlckRpbWVuc2lvbnMsYXhpczoieCIsbG9ja0F4aXM6IngiLGxvY2tUb0NvbnRhaW5lckVkZ2VzOiEwLGRpc3RhbmNlOjEwLHRyYW5zaXRpb25EdXJhdGlvbjoyMDB9LG8uY3JlYXRlRWxlbWVudChFLHtpc0FwcDpufSx0Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoaCx7a2V5OmUuaWQsc2Vzc2lvbjplLHNlbGVjdGVkU2Vzc2lvbklkOnIsaW5kZXg6dH0pfSksby5jcmVhdGVFbGVtZW50KEQse29uQ2xpY2s6aSxzb3J0aW5nOmF9LG8uY3JlYXRlRWxlbWVudChzLkFkZEljb24se3dpZHRoOjM0LGhlaWdodDozNCxzdHJva2VXaWR0aDo0LHRpdGxlOiJPcGVucyBhIE5ldyBUYWIifSkpKSl9LHR9KG8uUHVyZUNvbXBvbmVudCksZz1sLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7c2Vzc2lvbnM6cC5nZXRTZXNzaW9uc0FycmF5LHNlbGVjdGVkU2Vzc2lvbklkOnAuZ2V0U2VsZWN0ZWRTZXNzaW9uSWRGcm9tUm9vdH0pO3QuZGVmYXVsdD1jLmNvbm5lY3QoZyx7cmVvcmRlclRhYnM6Zi5yZW9yZGVyVGFic30pKG0pO3ZhciB5LHYsYix4PWEuc3R5bGVkLmRpdih5fHwoeT1pKFsiXG4gIGNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiA1N3B4O1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtYXBwLXJlZ2lvbjogZHJhZztcbiAgJjpob3ZlciB7XG4gICAgb3ZlcmZsb3cteDogb3ZlcmxheTtcbiAgfVxuIl0sWyJcbiAgY29sb3I6IHdoaXRlO1xuICBoZWlnaHQ6IDU3cHg7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnO1xuICAmOmhvdmVyIHtcbiAgICBvdmVyZmxvdy14OiBvdmVybGF5O1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYmFja2dyb3VuZH0pLEM9ZC5Tb3J0YWJsZUNvbnRhaW5lcih4KSxFPWEuc3R5bGVkKCJkaXYiKSh2fHwodj1pKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIHBhZGRpbmctbGVmdDogIiwiO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMTZweDtcbiAgcGFkZGluZy1sZWZ0OiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQXBwPyI0M3B4IjoiMCJ9KSxEPWEuc3R5bGVkKCJkaXYiKShifHwoYj1pKFsiXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHZpc2liaWxpdHk6ICIsIlxuICBoZWlnaHQ6IDQzcHg7XG4gIHdpZHRoOiA0M3B4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHN2ZyB7XG4gICAgc3Ryb2tlOiAiLCI7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4iXSxbIlxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICB2aXNpYmlsaXR5OiAiLCJcbiAgaGVpZ2h0OiA0M3B4O1xuICB3aWR0aDogNDNweDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBzdmcge1xuICAgIHN0cm9rZTogIiwiO1xuICB9XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5zb3J0aW5nPyJoaWRkZW4iOiJ2aXNpYmxlIn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5uYXZpZ2F0aW9uQmFyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRhYkluYWN0aXZlfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmljb259LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMudGFifSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCksYT1uKDI0KSxzPW4oOSksdT1uKDE2KSxjPW4oMSksbD1uKDcwMikscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLnN0YXJ0RWRpdE5hbWU9ZnVuY3Rpb24oKXtuLnNldFN0YXRlKHtlZGl0aW5nTmFtZTohMH0pfSxuLnN0b3BFZGl0TmFtZT1mdW5jdGlvbigpe24uc2V0U3RhdGUoe2VkaXRpbmdOYW1lOiExfSl9LG4uaGFuZGxlS2V5RG93bj1mdW5jdGlvbihlKXsxMz09PWUua2V5Q29kZSYmbi5zZXRTdGF0ZSh7ZWRpdGluZ05hbWU6ITF9KX0sbi5oYW5kbGVNb3VzZU92ZXJDcm9zcz1mdW5jdGlvbigpe24uc2V0U3RhdGUoe292ZXJDcm9zczohMH0pfSxuLmhhbmRsZU1vdXNlT3V0Q3Jvc3M9ZnVuY3Rpb24oKXtuLnNldFN0YXRlKHtvdmVyQ3Jvc3M6ITF9KX0sbi5oYW5kbGVTZWxlY3RTZXNzaW9uPWZ1bmN0aW9uKCl7bi5wcm9wcy5zZWxlY3RUYWIobi5wcm9wcy5zZXNzaW9uLmlkKX0sbi5oYW5kbGVDbG9zZVNlc3Npb249ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxuLnByb3BzLmNsb3NlVGFiKG4ucHJvcHMuc2Vzc2lvbi5pZCl9LG4uaGFuZGxlRWRpdE5hbWU9ZnVuY3Rpb24oZSl7bi5wcm9wcy5lZGl0TmFtZShlLnRhcmdldC52YWx1ZSl9LG4uc3RhdGU9e292ZXJDcm9zczohMSxlZGl0aW5nTmFtZTohMX0sbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNlc3Npb24sbj1lLnNlbGVjdGVkU2Vzc2lvbklkLHI9dC5xdWVyeVR5cGVzLGk9dC5pZD09PW4scz10Lm5hbWV8fHQub3BlcmF0aW9uTmFtZXx8ci5maXJzdE9wZXJhdGlvbk5hbWV8fCJOZXcgVGFiIjtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHcse2FjdGl2ZTppLG9uTW91c2VEb3duOnRoaXMuaGFuZGxlU2VsZWN0U2Vzc2lvbn0sby5jcmVhdGVFbGVtZW50KEEse2FjdGl2ZTppfSx0LnN1YnNjcmlwdGlvbkFjdGl2ZSYmby5jcmVhdGVFbGVtZW50KEksbnVsbCksby5jcmVhdGVFbGVtZW50KF8sbnVsbCxyLnF1ZXJ5JiZvLmNyZWF0ZUVsZW1lbnQoTyxudWxsLCJRIiksKHQuaXNTZXR0aW5nc1RhYnx8dC5pc0NvbmZpZ1RhYikmJm8uY3JlYXRlRWxlbWVudChPLG51bGwsby5jcmVhdGVFbGVtZW50KGEuU2V0dGluZ3NJY29uLHt3aWR0aDoxMixoZWlnaHQ6MTIsZmlsbDoid2hpdGUifSkpLHIubXV0YXRpb24mJm8uY3JlYXRlRWxlbWVudChGLG51bGwsIk0iKSxyLnN1YnNjcmlwdGlvbiYmby5jcmVhdGVFbGVtZW50KE4sbnVsbCwiUyIpKSksdGhpcy5zdGF0ZS5lZGl0aW5nTmFtZT9vLmNyZWF0ZUVsZW1lbnQoayx7dmFsdWU6dC5uYW1lfHwiIixvbkNoYW5nZTp0aGlzLmhhbmRsZUVkaXROYW1lLG9uQmx1cjp0aGlzLnN0b3BFZGl0TmFtZSxvbktleURvd246dGhpcy5oYW5kbGVLZXlEb3duLGF1dG9Gb2N1czohMH0pOm8uY3JlYXRlRWxlbWVudChTLHthY3RpdmU6aSxvbkRvdWJsZUNsaWNrOnRoaXMuc3RhcnRFZGl0TmFtZX0scyksby5jcmVhdGVFbGVtZW50KFAse2NsYXNzTmFtZToiY2xvc2UiLGFjdGl2ZTppLGhhc0NpcmNsZTp0LmlzRmlsZSYmdC5jaGFuZ2VkJiYhdGhpcy5zdGF0ZS5vdmVyQ3Jvc3Msb25DbGljazp0aGlzLmhhbmRsZUNsb3NlU2Vzc2lvbixvbk1vdXNlRW50ZXI6dGhpcy5oYW5kbGVNb3VzZU92ZXJDcm9zcyxvbk1vdXNlTGVhdmU6dGhpcy5oYW5kbGVNb3VzZU91dENyb3NzfSx0LmlzRmlsZSYmdC5jaGFuZ2VkJiYhdGhpcy5zdGF0ZS5vdmVyQ3Jvc3M/by5jcmVhdGVFbGVtZW50KEwsbnVsbCwiXHUyYjI0Iik6by5jcmVhdGVFbGVtZW50KGEuQ3Jvc3NJY29uLHt3aWR0aDoxMixoZWlnaHQ6MTEsc3Ryb2tlV2lkdGg6Nyx0aXRsZToiQ2xvc2UgVGFiIn0pKSl9LHR9KG8uUHVyZUNvbXBvbmVudCk7dC5kZWZhdWx0PXMuY29ubmVjdChudWxsLHtjbG9zZVRhYjp1LmNsb3NlVGFiLHNlbGVjdFRhYjp1LnNlbGVjdFRhYixlZGl0TmFtZTp1LmVkaXROYW1lfSkocCk7dmFyIGYsZCxoLG0sZyx5LHYsYix4LEMsRSxELHc9Yy5zdHlsZWQoImRpdiIpKGZ8fChmPWkoWyJcbiAgZmxleDogMCAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogNDNweDtcbiAgcGFkZGluZzogMTBweDtcbiAgcGFkZGluZy10b3A6IDlweDtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICIsIjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgYmFja2dyb3VuZDogIiwiO1xuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gICAgLmNsb3NlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG4iXSxbIlxuICBmbGV4OiAwIDAgYXV0bztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiA0M3B4O1xuICBwYWRkaW5nOiAxMHB4O1xuICBwYWRkaW5nLXRvcDogOXB4O1xuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgIiwiO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgICAuY2xvc2Uge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5uYXZpZ2F0aW9uQmFyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmU/ZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRhYjplLnRoZW1lLmVkaXRvckNvbG91cnMudGFiSW5hY3RpdmV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMudGFifSksUz1jLnN0eWxlZCgiZGl2IikoZHx8KGQ9aShbIlxuICBvcGFjaXR5OiAiLCI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIiwiO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcbiJdLFsiXG4gIG9wYWNpdHk6ICIsIjtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAiLCI7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgZGlzcGxheTogaW5saW5lO1xuICBsZXR0ZXItc3BhY2luZzogMC41M3B4O1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmU/MTouNX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy50YWJUZXh0fSksaz1jLnN0eWxlZChsLmRlZmF1bHQpKGh8fChoPWkoWyJcbiAgaW5wdXQge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiAiLCI7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjUzcHg7XG4gIH1cbiJdLFsiXG4gIGlucHV0IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIiwiO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC41M3B4O1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMudGFiVGV4dH0pLEE9Yy5zdHlsZWQoImRpdiIpKG18fChtPWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogIiwiO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmU/MTouNX0pLF89Yy5zdHlsZWQuZGl2KGd8fChnPWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgY29sb3I6IHdoaXRlO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgY29sb3I6IHdoaXRlO1xuIl0pKSksVD1jLnN0eWxlZC5kaXYoeXx8KHk9aShbIlxuICBoZWlnaHQ6IDIycHg7XG4gIHdpZHRoOiAyMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuIl0sWyJcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogNHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiJdKSkpLE89Yy5zdHlsZWQoVCkodnx8KHY9aShbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuYmx1ZX0pLEY9Yy5zdHlsZWQoVCkoYnx8KGI9aShbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMub3JhbmdlfSksTj1jLnN0eWxlZChUKSh4fHwoeD1pKFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5wdXJwbGV9KSxJPWMuc3R5bGVkLmRpdihDfHwoQz1pKFsiXG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI0MiwgOTIsIDg0LCAxKTtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuIl0sWyJcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjQyLCA5MiwgODQsIDEpO1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4iXSkpKSxMPWMuc3R5bGVkLmRpdihFfHwoRT1pKFsiXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMnB4O1xuICBmb250LXNpemU6IDlweDtcbiAgYmFja2dyb3VuZDogIiwiO1xuIl0sWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0ycHg7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuY2lyY2xlfSksUD1jLnN0eWxlZCgiZGl2IikoRHx8KEQ9aShbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICB0b3A6IDFweDtcbiAgaGVpZ2h0OiAxM3B4O1xuICB3aWR0aDogMTNweDtcbiAgb3BhY2l0eTogIiwiO1xuICBzdmcge1xuICAgIHN0cm9rZTogIiwiO1xuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICB0b3A6IDFweDtcbiAgaGVpZ2h0OiAxM3B4O1xuICB3aWR0aDogMTNweDtcbiAgb3BhY2l0eTogIiwiO1xuICBzdmcge1xuICAgIHN0cm9rZTogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZXx8ZS5oYXNDaXJjbGU/MTowfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmljb259KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxsPW4oMCkscD1yKGwpLGY9bigxOCksZD1yKGYpLGg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHZpc2liaWxpdHk6ImhpZGRlbiIsaGVpZ2h0OjAsb3ZlcmZsb3c6InNjcm9sbCIsd2hpdGVTcGFjZToicHJlIn0sbT1bImV4dHJhV2lkdGgiLCJpbmplY3RTdHlsZXMiLCJpbnB1dENsYXNzTmFtZSIsImlucHV0UmVmIiwiaW5wdXRTdHlsZSIsIm1pbldpZHRoIiwib25BdXRvc2l6ZSIsInBsYWNlaG9sZGVySXNNaW5XaWR0aCJdLGc9ZnVuY3Rpb24oZSl7cmV0dXJuIG0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIGVbdF19KSxlfSx5PWZ1bmN0aW9uKGUsdCl7dC5zdHlsZS5mb250U2l6ZT1lLmZvbnRTaXplLHQuc3R5bGUuZm9udEZhbWlseT1lLmZvbnRGYW1pbHksdC5zdHlsZS5mb250V2VpZ2h0PWUuZm9udFdlaWdodCx0LnN0eWxlLmZvbnRTdHlsZT1lLmZvbnRTdHlsZSx0LnN0eWxlLmxldHRlclNwYWNpbmc9ZS5sZXR0ZXJTcGFjaW5nLHQuc3R5bGUudGV4dFRyYW5zZm9ybT1lLnRleHRUcmFuc2Zvcm19LHY9ISgidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cubmF2aWdhdG9yKSYmL01TSUUgfFRyaWRlbnRcL3xFZGdlXC8vLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLGI9ZnVuY3Rpb24oKXtyZXR1cm4gdj8iXyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpOnZvaWQgMH0seD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe28odGhpcyx0KTt2YXIgbj1hKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIG4uaW5wdXRSZWY9ZnVuY3Rpb24oZSl7bi5pbnB1dD1lLCJmdW5jdGlvbiI9PT10eXBlb2Ygbi5wcm9wcy5pbnB1dFJlZiYmbi5wcm9wcy5pbnB1dFJlZihlKX0sbi5wbGFjZUhvbGRlclNpemVyUmVmPWZ1bmN0aW9uKGUpe24ucGxhY2VIb2xkZXJTaXplcj1lfSxuLnNpemVyUmVmPWZ1bmN0aW9uKGUpe24uc2l6ZXI9ZX0sbi5zdGF0ZT17aW5wdXRXaWR0aDplLm1pbldpZHRoLGlucHV0SWQ6ZS5pZHx8YigpfSxufXJldHVybiBzKHQsZSksYyh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITAsdGhpcy5jb3B5SW5wdXRTdHlsZXMoKSx0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQ7dCE9PXRoaXMucHJvcHMuaWQmJnRoaXMuc2V0U3RhdGUoe2lucHV0SWQ6dHx8YigpfSl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dC5pbnB1dFdpZHRoIT09dGhpcy5zdGF0ZS5pbnB1dFdpZHRoJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSYmdGhpcy5wcm9wcy5vbkF1dG9zaXplKHRoaXMuc3RhdGUuaW5wdXRXaWR0aCksdGhpcy51cGRhdGVJbnB1dFdpZHRoKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITF9fSx7a2V5OiJjb3B5SW5wdXRTdHlsZXMiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5tb3VudGVkJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSl7dmFyIGU9dGhpcy5pbnB1dCYmd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7ZSYmKHkoZSx0aGlzLnNpemVyKSx0aGlzLnBsYWNlSG9sZGVyU2l6ZXImJnkoZSx0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpKX19fSx7a2V5OiJ1cGRhdGVJbnB1dFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubW91bnRlZCYmdGhpcy5zaXplciYmInVuZGVmaW5lZCIhPT10eXBlb2YgdGhpcy5zaXplci5zY3JvbGxXaWR0aCl7dmFyIGU9dm9pZCAwO2U9dGhpcy5wcm9wcy5wbGFjZWhvbGRlciYmKCF0aGlzLnByb3BzLnZhbHVlfHx0aGlzLnByb3BzLnZhbHVlJiZ0aGlzLnByb3BzLnBsYWNlaG9sZGVySXNNaW5XaWR0aCk/TWF0aC5tYXgodGhpcy5zaXplci5zY3JvbGxXaWR0aCx0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpKzI6dGhpcy5zaXplci5zY3JvbGxXaWR0aCsyO2UrPSJudW1iZXIiPT09dGhpcy5wcm9wcy50eXBlJiZ2b2lkIDA9PT10aGlzLnByb3BzLmV4dHJhV2lkdGg/MTY6cGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKXx8MCxlPHRoaXMucHJvcHMubWluV2lkdGgmJihlPXRoaXMucHJvcHMubWluV2lkdGgpLGUhPT10aGlzLnN0YXRlLmlucHV0V2lkdGgmJnRoaXMuc2V0U3RhdGUoe2lucHV0V2lkdGg6ZX0pfX19LHtrZXk6ImdldElucHV0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0fX0se2tleToiZm9jdXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pbnB1dC5mb2N1cygpfX0se2tleToiYmx1ciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlucHV0LmJsdXIoKX19LHtrZXk6InNlbGVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlucHV0LnNlbGVjdCgpfX0se2tleToicmVuZGVyU3R5bGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW5qZWN0U3R5bGVzO3JldHVybiB2JiZlP3AuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzdHlsZSIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6ImlucHV0IyIrdGhpcy5zdGF0ZS5pbnB1dElkKyI6Oi1tcy1jbGVhciB7ZGlzcGxheTogbm9uZTt9In19KTpudWxsfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPVt0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSx0aGlzLnByb3BzLnZhbHVlLCIiXS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9PWUmJnZvaWQgMCE9PWU/ZTp0fSksdD11KHt9LHRoaXMucHJvcHMuc3R5bGUpO3QuZGlzcGxheXx8KHQuZGlzcGxheT0iaW5saW5lLWJsb2NrIik7dmFyIG49dSh7Ym94U2l6aW5nOiJjb250ZW50LWJveCIsd2lkdGg6dGhpcy5zdGF0ZS5pbnB1dFdpZHRoKyJweCJ9LHRoaXMucHJvcHMuaW5wdXRTdHlsZSkscj1pKHRoaXMucHJvcHMsW10pO3JldHVybiBnKHIpLHIuY2xhc3NOYW1lPXRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWUsci5pZD10aGlzLnN0YXRlLmlucHV0SWQsci5zdHlsZT1uLHAuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGhpcy5wcm9wcy5jbGFzc05hbWUsc3R5bGU6dH0sdGhpcy5yZW5kZXJTdHlsZXMoKSxwLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHUoe30scix7cmVmOnRoaXMuaW5wdXRSZWZ9KSkscC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLnNpemVyUmVmLHN0eWxlOmh9LGUpLHRoaXMucHJvcHMucGxhY2Vob2xkZXI/cC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLnBsYWNlSG9sZGVyU2l6ZXJSZWYsc3R5bGU6aH0sdGhpcy5wcm9wcy5wbGFjZWhvbGRlcik6bnVsbCl9fV0pLHR9KGwuQ29tcG9uZW50KTt4LnByb3BUeXBlcz17Y2xhc3NOYW1lOmQuZGVmYXVsdC5zdHJpbmcsZGVmYXVsdFZhbHVlOmQuZGVmYXVsdC5hbnksZXh0cmFXaWR0aDpkLmRlZmF1bHQub25lT2ZUeXBlKFtkLmRlZmF1bHQubnVtYmVyLGQuZGVmYXVsdC5zdHJpbmddKSxpZDpkLmRlZmF1bHQuc3RyaW5nLGluamVjdFN0eWxlczpkLmRlZmF1bHQuYm9vbCxpbnB1dENsYXNzTmFtZTpkLmRlZmF1bHQuc3RyaW5nLGlucHV0UmVmOmQuZGVmYXVsdC5mdW5jLGlucHV0U3R5bGU6ZC5kZWZhdWx0Lm9iamVjdCxtaW5XaWR0aDpkLmRlZmF1bHQub25lT2ZUeXBlKFtkLmRlZmF1bHQubnVtYmVyLGQuZGVmYXVsdC5zdHJpbmddKSxvbkF1dG9zaXplOmQuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlOmQuZGVmYXVsdC5mdW5jLHBsYWNlaG9sZGVyOmQuZGVmYXVsdC5zdHJpbmcscGxhY2Vob2xkZXJJc01pbldpZHRoOmQuZGVmYXVsdC5ib29sLHN0eWxlOmQuZGVmYXVsdC5vYmplY3QsdmFsdWU6ZC5kZWZhdWx0LmFueX0seC5kZWZhdWx0UHJvcHM9e21pbldpZHRoOjEsaW5qZWN0U3R5bGVzOiEwfSx0LmRlZmF1bHQ9eH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oMzA3KSxzPW4oNzA0KSx1PW4oNzA2KSxjPW4oMzYpLGw9bigxMzMpLHA9bigxKSxmPW4oOSksZD1uKDgpLGg9big3MDcpLG09big5NyksZz1uKDc1KSx5PW4oMTYpLHY9bigxMzEpLGI9bigzNykseD1uKDI0KSxDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7bi5oYW5kbGVDbGlja1VzZT1mdW5jdGlvbigpe3ZhciBlPW4ucHJvcHMuaXRlbXMsdD1lLmdldChuLnN0YXRlLnNlbGVjdGVkSXRlbUluZGV4KTtuLnByb3BzLmR1cGxpY2F0ZVNlc3Npb24odCksbi5wcm9wcy5jbG9zZUhpc3RvcnkoKX0sbi5oYW5kbGVJdGVtU2VsZWN0PWZ1bmN0aW9uKGUpe24uc2V0U3RhdGUoe3NlbGVjdGVkSXRlbUluZGV4OmV9KX0sbi5oYW5kbGVTZWxlY3RGaWx0ZXI9ZnVuY3Rpb24oZSl7bi5zZXRTdGF0ZSh7c2VsZWN0ZWRGaWx0ZXI6ZX0pfSxuLmhhbmRsZVNlYXJjaD1mdW5jdGlvbihlKXtuLnNldFN0YXRlKHtzZWFyY2hUZXJtOmV9KX07dmFyIHI9dC5pdGVtcy5rZXlTZXEoKS5maXJzdCgpfHwiIjtyZXR1cm4gbi5zdGF0ZT17c2VsZWN0ZWRGaWx0ZXI6IkhJU1RPUlkiLHNlbGVjdGVkSXRlbUluZGV4OnIsc2VhcmNoVGVybToiIn0sbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUsdD1lLnNlYXJjaFRlcm0sbj1lLnNlbGVjdGVkRmlsdGVyLHI9dGhpcy5wcm9wcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIlNUQVJSRUQiPT09bj9lLnN0YXJyZWQ6ISh0JiZ0Lmxlbmd0aD4wKXx8ZS5xdWVyeS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSl9KSxpPXRoaXMucHJvcHMuaXRlbXMuZ2V0KHRoaXMuc3RhdGUuc2VsZWN0ZWRJdGVtSW5kZXgpO3JldHVybiBpPWkmJmkudG9KUz9pLnRvSlMoKTp2b2lkIDAsby5jcmVhdGVFbGVtZW50KGEse2lzT3Blbjp0aGlzLnByb3BzLmlzT3BlbixvblJlcXVlc3RDbG9zZTp0aGlzLnByb3BzLmNsb3NlSGlzdG9yeSxjb250ZW50TGFiZWw6IkdyYXBoaVFMIFNlc3Npb24gSGlzdG9yeSIsc3R5bGU6Yy5tb2RhbFN0eWxlfSxvLmNyZWF0ZUVsZW1lbnQoUCxudWxsLG8uY3JlYXRlRWxlbWVudChNLG51bGwsby5jcmVhdGVFbGVtZW50KHMuZGVmYXVsdCx7b25TZWxlY3RGaWx0ZXI6dGhpcy5oYW5kbGVTZWxlY3RGaWx0ZXIsc2VsZWN0ZWRGaWx0ZXI6dGhpcy5zdGF0ZS5zZWxlY3RlZEZpbHRlcixvblNlYXJjaDp0aGlzLmhhbmRsZVNlYXJjaH0pLG8uY3JlYXRlRWxlbWVudCh1LmRlZmF1bHQse2l0ZW1zOnIsc2VsZWN0ZWRJdGVtSW5kZXg6dGhpcy5zdGF0ZS5zZWxlY3RlZEl0ZW1JbmRleCxzZWFyY2hUZXJtOnRoaXMuc3RhdGUuc2VhcmNoVGVybSxvbkl0ZW1TZWxlY3Q6dGhpcy5oYW5kbGVJdGVtU2VsZWN0LG9uSXRlbVN0YXJUb2dnbGVkOnRoaXMucHJvcHMudG9nZ2xlSGlzdG9yeUl0ZW1TdGFycmluZ30pKSxCb29sZWFuKGkpP28uY3JlYXRlRWxlbWVudChqLG51bGwsby5jcmVhdGVFbGVtZW50KFIsbnVsbCxvLmNyZWF0ZUVsZW1lbnQoVSxudWxsKSxvLmNyZWF0ZUVsZW1lbnQoeix7b25DbGljazp0aGlzLmhhbmRsZUNsaWNrVXNlfSxvLmNyZWF0ZUVsZW1lbnQoRyxudWxsLCJVc2UiKSxvLmNyZWF0ZUVsZW1lbnQoeC5BcnJvd1JpZ2h0LHtjb2xvcjoid2hpdGUiLHdpZHRoOjEzLGhlaWdodDoxM30pKSksby5jcmVhdGVFbGVtZW50KFYsbnVsbCxvLmNyZWF0ZUVsZW1lbnQocSxudWxsLG8uY3JlYXRlRWxlbWVudChiLkNvbnRhaW5lcixudWxsLG8uY3JlYXRlRWxlbWVudChILG51bGwsby5jcmVhdGVFbGVtZW50KGwuUXVlcnlFZGl0b3Ise3ZhbHVlOmkucXVlcnl9KSkpKSkpOm8uY3JlYXRlRWxlbWVudChqLG51bGwsby5jcmVhdGVFbGVtZW50KEIsbnVsbCxvLmNyZWF0ZUVsZW1lbnQoJCxudWxsLCJObyBIaXN0b3J5IHlldCIpKSkpKX0sdH0oby5Db21wb25lbnQpLEU9ZC5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioe2l0ZW1zOmguZ2V0SGlzdG9yeSxpc09wZW46bS5nZXRIaXN0b3J5T3Blbn0pO3QuZGVmYXVsdD1mLmNvbm5lY3QoRSx7Y2xvc2VIaXN0b3J5OmcuY2xvc2VIaXN0b3J5LG9wZW5IaXN0b3J5Omcub3Blbkhpc3RvcnksZHVwbGljYXRlU2Vzc2lvbjp5LmR1cGxpY2F0ZVNlc3Npb24sdG9nZ2xlSGlzdG9yeUl0ZW1TdGFycmluZzp2LnRvZ2dsZUhpc3RvcnlJdGVtU3RhcnJpbmd9KShDKTt2YXIgRCx3LFMsayxBLF8sVCxPLEYsTixJLEwsUD1wLnN0eWxlZC5kaXYoRHx8KEQ9aShbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4taGVpZ2h0OiA1MDBweDtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xuIl0pKSksTT1wLnN0eWxlZC5kaXYod3x8KHc9aShbIlxuICBmbGV4OiAxO1xuXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuIl0sWyJcbiAgZmxleDogMTtcblxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiJdKSkpLGo9cC5zdHlsZWQuZGl2KFN8fChTPWkoWyJcbiAgZmxleDogMCAwIDQ2NHB4O1xuICB6LWluZGV4OiAyO1xuIl0sWyJcbiAgZmxleDogMCAwIDQ2NHB4O1xuICB6LWluZGV4OiAyO1xuIl0pKSksUj1wLnN0eWxlZC5kaXYoa3x8KGs9aShbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgcGFkZGluZy1sZWZ0OiAiLCI7XG4gIHBhZGRpbmctcmlnaHQ6ICIsIjtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICBwYWRkaW5nLWxlZnQ6ICIsIjtcbiAgcGFkZGluZy1yaWdodDogIiwiO1xuICBwYWRkaW5nLXRvcDogMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XG5cbiAgYmFja2dyb3VuZDogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5tZWRpdW0yNX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2l6ZXMubWVkaXVtMjV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucmVzdWx0QmFja2dyb3VuZH0pLEI9cC5zdHlsZWQuZGl2KEF8fChBPWkoWyJcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5yZXN1bHRCYWNrZ3JvdW5kfSksJD1wLnN0eWxlZC5kaXYoX3x8KF89aShbIlxuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAiLCI7XG4iXSxbIlxuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMudGV4dH0pLFU9cC5zdHlsZWQuZGl2KFR8fChUPWkoWyJcbiAgZm9udC1zaXplOiAiLCI7XG4gIGZvbnQtd2VpZ2h0OiAiLCI7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7XG4iXSxbIlxuICBmb250LXNpemU6ICIsIjtcbiAgZm9udC13ZWlnaHQ6ICIsIjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2l6ZXMuZm9udFNtYWxsfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5mb250U2VtaUJvbGR9KSx6PXAuc3R5bGVkLmRpdihPfHwoTz1pKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgcGFkZGluZy10b3A6ICIsIjtcbiAgcGFkZGluZy1ib3R0b206ICIsIjtcbiAgcGFkZGluZy1sZWZ0OiAiLCI7XG4gIHBhZGRpbmctcmlnaHQ6ICIsIjtcblxuICBmb250LXNpemU6ICIsIjtcbiAgZm9udC13ZWlnaHQ6ICIsIjtcblxuICBib3JkZXItcmFkaXVzOiAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuIl0sWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICBwYWRkaW5nLXRvcDogIiwiO1xuICBwYWRkaW5nLWJvdHRvbTogIiwiO1xuICBwYWRkaW5nLWxlZnQ6ICIsIjtcbiAgcGFkZGluZy1yaWdodDogIiwiO1xuXG4gIGZvbnQtc2l6ZTogIiwiO1xuICBmb250LXdlaWdodDogIiwiO1xuXG4gIGJvcmRlci1yYWRpdXM6ICIsIjtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLnNtYWxsMTB9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLnNtYWxsMTB9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLnNtYWxsMTZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLnNtYWxsMTZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLmZvbnRTbWFsbH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuc2l6ZXMuZm9udFNlbWlCb2xkfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5zaXplcy5zbWFsbFJhZGl1c30sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5ncmVlbn0pLEc9cC5zdHlsZWQuZGl2KEZ8fChGPWkoWyJcbiAgbWFyZ2luLXJpZ2h0OiAiLCI7XG4gIGNvbG9yOiB3aGl0ZTtcbiJdLFsiXG4gIG1hcmdpbi1yaWdodDogIiwiO1xuICBjb2xvcjogd2hpdGU7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLnNpemVzLnNtYWxsNn0pLFY9cC5zdHlsZWQuZGl2KE58fChOPWkoWyJcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA4MXB4KTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMSAxIGF1dG87XG4iXSxbIlxuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDgxcHgpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxIDEgYXV0bztcbiJdKSkpLHE9cC5zdHlsZWQoVikoSXx8KEk9aShbIlxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuIl0sWyJcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxIDEgYXV0bztcbiJdKSkpLEg9cC5zdHlsZWQuZGl2KEx8fChMPWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleDogMTtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG4iXSkpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89big3MDUpLGE9bigxKSxzPW4oMzAwKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY3JlYXRlRWxlbWVudChjLG51bGwsaS5jcmVhdGVFbGVtZW50KG8uZGVmYXVsdCx7b25TZWxlY3RGaWx0ZXI6ZS5vblNlbGVjdEZpbHRlcixzZWxlY3RlZEZpbHRlcjplLnNlbGVjdGVkRmlsdGVyfSksaS5jcmVhdGVFbGVtZW50KHMuZGVmYXVsdCx7cGxhY2Vob2xkZXI6IlNlYXJjaCB0aGUgaGlzdG9yeS4uLiIsb25TZWFyY2g6ZS5vblNlYXJjaCxjbGVhbjohMH0pKX07dmFyIHUsYz1hLnN0eWxlZC5kaXYodXx8KHU9cihbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYmFja2dyb3VuZDogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5jb2xvdXJzLmJsYWNrMDJ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKDApLG89bigxKSxhPW4oMjQpLHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3RlZEZpbHRlcixuPWUub25TZWxlY3RGaWx0ZXIscj1lLnRoZW1lO3JldHVybiBpLmNyZWF0ZUVsZW1lbnQocCxudWxsLGkuY3JlYXRlRWxlbWVudChmLHthY3RpdmU6IkhJU1RPUlkiPT09dCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG4oIkhJU1RPUlkiKX19LGkuY3JlYXRlRWxlbWVudChhLkhpc3Rvcnkse2NvbG9yOiJISVNUT1JZIj09PXQ/ci5jb2xvdXJzLndoaXRlOnIuY29sb3Vycy5ibGFjazMwLHN0cm9rZVdpZHRoOjMsd2lkdGg6MjUsaGVpZ2h0OjI1fSksaS5jcmVhdGVFbGVtZW50KGQsbnVsbCwiSGlzdG9yeSIpKSxpLmNyZWF0ZUVsZW1lbnQoZix7YWN0aXZlOiJTVEFSUkVEIj09PXQsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuKCJTVEFSUkVEIil9fSxpLmNyZWF0ZUVsZW1lbnQoYS5TdGFyLHtjb2xvcjoiU1RBUlJFRCI9PT10P3IuY29sb3Vycy53aGl0ZTpyLmNvbG91cnMuYmxhY2szMCx3aWR0aDoxNixoZWlnaHQ6MTZ9KSxpLmNyZWF0ZUVsZW1lbnQoZCxudWxsLCJTdGFycmVkIikpKX07dC5kZWZhdWx0PW8ud2l0aFRoZW1lKHMpO3ZhciB1LGMsbCxwPW8uc3R5bGVkLmRpdih1fHwodT1yKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuIl0pKSksZj1vLnN0eWxlZCgiZGl2IikoY3x8KGM9cihbIlxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAyNHB4O1xuICB6LWluZGV4OiAiLCI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbjogMCAtMnB4O1xuICBwYWRkaW5nOiAiLCI7XG4gIGJhY2tncm91bmQ6ICIsIjtcblxuICBjb2xvcjogIiwiO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuIl0sWyJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMjRweDtcbiAgei1pbmRleDogIiwiO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDAgLTJweDtcbiAgcGFkZGluZzogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG5cbiAgY29sb3I6ICIsIjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlPzI6MH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlPyI3cHggOXB4IDhweCA5cHgiOiI1cHggMTNweCA2cHggMTNweCJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZT9lLnRoZW1lLmNvbG91cnMuZ3JlZW46ZS50aGVtZS5jb2xvdXJzLmJsYWNrMDd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZT9lLnRoZW1lLmNvbG91cnMud2hpdGU6ZS50aGVtZS5jb2xvdXJzLmJsYWNrMzB9KSxkPW8uc3R5bGVkLnAobHx8KGw9cihbIlxuICBtYXJnaW4tbGVmdDogNnB4O1xuIl0sWyJcbiAgbWFyZ2luLWxlZnQ6IDZweDtcbiJdKSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMCksbz1uKDI0KSxhPW4oMSk7dC5kZWZhdWx0PWEud2l0aFRoZW1lKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaXRlbXMsbj1lLm9uSXRlbVNlbGVjdCxyPWUuc2VsZWN0ZWRJdGVtSW5kZXgsYT1lLm9uSXRlbVN0YXJUb2dnbGVkO2UudGhlbWU7cmV0dXJuIGkuY3JlYXRlRWxlbWVudCh5LG51bGwsdC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KHYse2tleTplLmlkLGFjdGl2ZTpyPT09dCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9fSxpLmNyZWF0ZUVsZW1lbnQoeCxudWxsLGkuY3JlYXRlRWxlbWVudChvLlN0YXIse29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShlLmlkKX0sc3Ryb2tlOmUuc3RhcnJlZD92b2lkIDA6InJnYigyMjEsMTcxLDApIixmaWxsOmUuc3RhcnJlZD8icmdiKDIyMSwxNzEsMCkiOnZvaWQgMCxzdHJva2VXaWR0aDouNSx3aWR0aDoyNSxoZWlnaHQ6MjV9KSxpLmNyZWF0ZUVsZW1lbnQoYixudWxsLGkuY3JlYXRlRWxlbWVudChDLG51bGwsZS5vcGVyYXRpb25OYW1lfHxlLnF1ZXJ5VHlwZXMuZmlyc3RPcGVyYXRpb25OYW1lfHwiTmV3IFNlc3Npb24iKSxlLnF1ZXJ5VHlwZXMucXVlcnkmJmkuY3JlYXRlRWxlbWVudChELG51bGwsIlEiKSxlLnF1ZXJ5VHlwZXMubXV0YXRpb24mJmkuY3JlYXRlRWxlbWVudCh3LG51bGwsIk0iKSxlLnF1ZXJ5VHlwZXMuc3Vic2NyaXB0aW9uJiZpLmNyZWF0ZUVsZW1lbnQoUyxudWxsLCJTIikpKSxpLmNyZWF0ZUVsZW1lbnQoeCxudWxsLGUuZGF0ZSYmaS5jcmVhdGVFbGVtZW50KGssbnVsbCwiZnVuY3Rpb24iPT09dHlwZW9mIGUuZGF0ZS5nZXRNb250aCYmZS5kYXRlLmdldE1vbnRoKCkrMSwiLyIsZS5kYXRlLmdldERhdGUoKSwiLyIsZS5kYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zbGljZSgyLDQpKSkpfSkudG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pKX0pO3ZhciBzLHUsYyxsLHAsZixkLGgsbSxnLHk9YS5zdHlsZWQuZGl2KHN8fChzPXIoWyJcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTIxcHgpO1xuIl0sWyJcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTIxcHgpO1xuIl0pKSksdj1hLnN0eWxlZCgiZGl2IikodXx8KHU9cihbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDI1cHggMjBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDI1cHggMjBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogIiwiO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuYmxhY2sxMH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlP2UudGhlbWUuY29sb3Vycy5ibGFjazA0OmUudGhlbWUuY29sb3Vycy53aGl0ZX0pLGI9YS5zdHlsZWQuZGl2KGN8fChjPXIoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogMjBweDtcbiJdKSkpLHg9YS5zdHlsZWQuZGl2KGx8fChsPXIoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4iXSkpKSxDPWEuc3R5bGVkLnAocHx8KHA9cihbIlxuICBmb250LXdlaWdodDogMzAwO1xuICBmb250LXNpemU6IDIwcHg7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiJdLFsiXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuIl0pKSksRT1hLnN0eWxlZC5kaXYoZnx8KGY9cihbIlxuICBoZWlnaHQ6IDIxcHg7XG4gIHdpZHRoOiAyMXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIiwiO1xuIl0sWyJcbiAgaGVpZ2h0OiAyMXB4O1xuICB3aWR0aDogMjFweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogNHB4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy53aGl0ZX0pLEQ9YS5zdHlsZWQoRSkoZHx8KGQ9cihbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMuYmx1ZX0pLHc9YS5zdHlsZWQoRSkoaHx8KGg9cihbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSxbIlxuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmNvbG91cnMub3JhbmdlfSksUz1hLnN0eWxlZChFKShtfHwobT1yKFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5wdXJwbGV9KSxrPWEuc3R5bGVkLnRpbWUoZ3x8KGc9cihbIlxuICBjb2xvcjogIiwiO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbi1sZWZ0OiAxNnB4O1xuIl0sWyJcbiAgY29sb3I6ICIsIjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW4tbGVmdDogMTZweDtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuY29sb3Vycy5ibGFjazQwfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOCksaT1uKDE3KTt0LmdldEhpc3Rvcnk9ci5jcmVhdGVTZWxlY3RvcihbaS5nZXRTZWxlY3RlZFdvcmtzcGFjZV0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGlzdG9yeX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigyNCkscz1uKDEpLHU9bigxNiksYz1uKDkpLGw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGQsbnVsbCxvLmNyZWF0ZUVsZW1lbnQoaCxudWxsLG8uY3JlYXRlRWxlbWVudChhLlNldHRpbmdzSWNvbix7d2lkdGg6MjMsaGVpZ2h0OjIzLG9uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsaWNrLHRpdGxlOiJTZXR0aW5ncyJ9KSkpfSx0fShvLkNvbXBvbmVudCk7dC5kZWZhdWx0PWMuY29ubmVjdChudWxsLHtvbkNsaWNrOnUub3BlblNldHRpbmdzVGFifSkobCk7dmFyIHAsZixkPXMuc3R5bGVkLmRpdihwfHwocD1pKFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTAwNTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRvcDogMTdweDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTAwNTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRvcDogMTdweDtcbiJdKSkpLGg9cy5zdHlsZWQuZGl2KGZ8fChmPWkoWyJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgc3ZnIHtcbiAgICBmaWxsOiAiLCI7XG4gICAgdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgZmlsbDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIHN2ZyB7XG4gICAgICBmaWxsOiAiLCI7XG4gICAgfVxuICB9XG4iXSxbIlxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICBzdmcge1xuICAgIGZpbGw6ICIsIjtcbiAgICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBmaWxsO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgc3ZnIHtcbiAgICAgIGZpbGw6ICIsIjtcbiAgICB9XG4gIH1cbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5pY29ufSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmljb25Ib3Zlcn0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigxKSxzPW4oMTQyKSx1PW4oNzEwKSxjPW4oOSksbD1uKDgpLHA9big5NyksZj1uKDc1KSxkPW4oMTYpLGg9bigxNyksbT1uKDM3KSxnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFuZGxlS2V5ZG93bj1mdW5jdGlvbihlKXsicyI9PT1lLmtleSYmZS5tZXRhS2V5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLHQucHJvcHMub25TYXZlKCkpfSx0fXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVLZXlkb3duLCEwKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pc0NvbmZpZztyZXR1cm4gby5jcmVhdGVFbGVtZW50KG0uQ29udGFpbmVyLG51bGwsby5jcmVhdGVFbGVtZW50KEQsbnVsbCxvLmNyZWF0ZUVsZW1lbnQobS5kZWZhdWx0LG51bGwsby5jcmVhdGVFbGVtZW50KHUuQ29uZmlnRWRpdG9yLHt2YWx1ZTp0aGlzLnByb3BzLnZhbHVlLG9uRWRpdDp0aGlzLnByb3BzLm9uQ2hhbmdlLG9uUnVuUXVlcnk6dGhpcy5wcm9wcy5vblNhdmUsaXNZYW1sOnRoaXMucHJvcHMuaXNZYW1sLHJlYWRPbmx5OnRoaXMucHJvcHMucmVhZE9ubHl9KSxvLmNyZWF0ZUVsZW1lbnQoUyxudWxsLHdpbmRvdy52ZXJzaW9uKSksIXRoaXMucHJvcHMucmVhZE9ubHkmJm8uY3JlYXRlRWxlbWVudCh3LG51bGwsby5jcmVhdGVFbGVtZW50KHMuQnV0dG9uLHtvbkNsaWNrOnRoaXMucHJvcHMub25TYXZlfSwiU2F2ZSAiLGU/IkNvbmZpZyI6IlNldHRpbmdzIikpKSl9LHR9KG8uQ29tcG9uZW50KTt0LlNldHRpbmdzRWRpdG9yPWc7dmFyIHk9bC5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioe3ZhbHVlOmguZ2V0U2V0dGluZ3NTdHJpbmd9KSx2PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIG4uaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKGUpe24uc2V0U3RhdGUoe3ZhbHVlOmV9KSxuLnByb3BzLmVkaXRTZXR0aW5ncygpfSxuLmhhbmRsZVNhdmU9ZnVuY3Rpb24oKXtuLnByb3BzLm9uU2F2ZShuLnN0YXRlLnZhbHVlKSxuLnByb3BzLnNhdmVTZXR0aW5ncygpfSxuLnN0YXRlPXt2YWx1ZTp0LnZhbHVlfSxufXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXtlLnZhbHVlIT09dGhpcy5wcm9wcy52YWx1ZSYmdGhpcy5zZXRTdGF0ZSh7dmFsdWU6ZS52YWx1ZX0pfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGcse3ZhbHVlOnRoaXMuc3RhdGUudmFsdWUsb25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2Usb25TYXZlOnRoaXMuaGFuZGxlU2F2ZX0pfSx0fShvLkNvbXBvbmVudCk7dC5QbGF5Z3JvdW5kU2V0dGluZ3NFZGl0b3I9Yy5jb25uZWN0KHkse29uU2F2ZTpmLnNldFNldHRpbmdzU3RyaW5nLGVkaXRTZXR0aW5nczpkLmVkaXRTZXR0aW5ncyxzYXZlU2V0dGluZ3M6ZC5zYXZlU2V0dGluZ3N9KSh2KTt2YXIgYj1sLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7dmFsdWU6cC5nZXRDb25maWdTdHJpbmd9KTt0LkdyYXBoUUxDb25maWdFZGl0b3I9Yy5jb25uZWN0KGIse29uQ2hhbmdlOmYuc2V0Q29uZmlnU3RyaW5nfSkoZyk7dmFyIHgsQyxFLEQ9YS5zdHlsZWQuZGl2KHh8fCh4PWkoWyJcbiAgYmFja2dyb3VuZDogIiwiO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogY29sdW1uO1xuICBmbGV4OiAxIDEgMDtcblxuICAuQ29kZU1pcnJvciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICAgIC5Db2RlTWlycm9yLWNvZGUge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICB9XG4gICAgLmNtLWF0b20ge1xuICAgICAgY29sb3I6IHJnYmEoNDIsIDEyNiwgMjEwLCAxKTtcbiAgICB9XG4gIH1cbiJdLFsiXG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgZmxleDogMSAxIDA7XG5cbiAgLkNvZGVNaXJyb3Ige1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgICAuQ29kZU1pcnJvci1jb2RlIHtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgfVxuICAgIC5jbS1hdG9tIHtcbiAgICAgIGNvbG9yOiByZ2JhKDQyLCAxMjYsIDIxMCwgMSk7XG4gICAgfVxuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMucmVzdWx0QmFja2dyb3VuZH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5yZXN1bHRCYWNrZ3JvdW5kfSksdz1hLnN0eWxlZC5kaXYoQ3x8KEM9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTZweDtcbiAgcmlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDI7XG4iXSxbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTZweDtcbiAgcmlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDI7XG4iXSkpKSxTPWEuc3R5bGVkLnNwYW4oRXx8KEU9aShbIlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICBib3R0b206IDE3cHg7XG4gIGNvbG9yOiAiLCI7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi1yaWdodDogMTRweDtcbiJdLFsiXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIGJvdHRvbTogMTdweDtcbiAgY29sb3I6ICIsIjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRleHRJbmFjdGl2ZX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigzNykscz1uKDEpLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gbi5zZXROb2RlPWZ1bmN0aW9uKGUpe24ubm9kZT1lfSxuLm9uS2V5VXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmtleUNvZGU7KHI+PTY1JiZyPD05MHx8IXQuc2hpZnRLZXkmJnI+PTQ4JiZyPD01N3x8dC5zaGlmdEtleSYmMTg5PT09cnx8dC5zaGlmdEtleSYmMjIyPT09cikmJm4uZWRpdG9yLmV4ZWNDb21tYW5kKCJhdXRvY29tcGxldGUiKX0sbi5vbkVkaXQ9ZnVuY3Rpb24oKXtuLmlnbm9yZUNoYW5nZUV2ZW50fHwobi5jYWNoZWRWYWx1ZT1uLmVkaXRvci5nZXRWYWx1ZSgpLG4ucHJvcHMub25FZGl0JiZuLnByb3BzLm9uRWRpdChuLmNhY2hlZFZhbHVlKSl9LG4uY2FjaGVkVmFsdWU9dC52YWx1ZXx8IiIsbn1yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW4oMik7bigxMzcpLG4oNjkpLG4oMTM4KSxuKDcwKSxuKDg5KSxuKDEzOSksbigzOCksbig5MCksbigzOSksbig5MSksbig3MTEpLG4oMjg2KSxuKDI4NyksbigyODgpLHRoaXMuZWRpdG9yPXQodGhpcy5ub2RlLHt2YWx1ZTp0aGlzLnByb3BzLnZhbHVlfHwiIixsaW5lTnVtYmVyczohMCx0YWJTaXplOjIsbW9kZTp0aGlzLnByb3BzLmlzWWFtbD8ieWFtbCI6ImdyYXBocWwtdmFyaWFibGVzIix0aGVtZTp0aGlzLnByb3BzLmVkaXRvclRoZW1lfHwiZ3JhcGhpcWwiLGtleU1hcDoic3VibGltZSIsYXV0b0Nsb3NlQnJhY2tldHM6ITAsbWF0Y2hCcmFja2V0czohMCxzaG93Q3Vyc29yV2hlblNlbGVjdGluZzohMCxyZWFkT25seTohIXRoaXMucHJvcHMucmVhZE9ubHkmJiJub2N1cnNvciIsZm9sZEd1dHRlcjp7bWluRm9sZFNpemU6NH0sZ3V0dGVyczpbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiLCJDb2RlTWlycm9yLWZvbGRndXR0ZXIiXSxleHRyYUtleXM6eyJDbWQtU3BhY2UiOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZWRpdG9yLnNob3dIaW50KHtjb21wbGV0ZVNpbmdsZTohMX0pfSwiQ3RybC1TcGFjZSI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5lZGl0b3Iuc2hvd0hpbnQoe2NvbXBsZXRlU2luZ2xlOiExfSl9LCJBbHQtU3BhY2UiOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZWRpdG9yLnNob3dIaW50KHtjb21wbGV0ZVNpbmdsZTohMX0pfSwiU2hpZnQtU3BhY2UiOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZWRpdG9yLnNob3dIaW50KHtjb21wbGV0ZVNpbmdsZTohMX0pfSwiQ21kLUVudGVyIjpmdW5jdGlvbigpe2UucHJvcHMub25SdW5RdWVyeSYmZS5wcm9wcy5vblJ1blF1ZXJ5KCl9LCJDdHJsLUVudGVyIjpmdW5jdGlvbigpe2UucHJvcHMub25SdW5RdWVyeSYmZS5wcm9wcy5vblJ1blF1ZXJ5KCl9LCJTaGlmdC1DdHJsLVAiOmZ1bmN0aW9uKCl7ZS5wcm9wcy5vblByZXR0aWZ5UXVlcnkmJmUucHJvcHMub25QcmV0dGlmeVF1ZXJ5KCl9LCJDbWQtRiI6ImZpbmRQZXJzaXN0ZW50IiwiQ3RybC1GIjoiZmluZFBlcnNpc3RlbnQiLCJDdHJsLUxlZnQiOiJnb1N1YndvcmRMZWZ0IiwiQ3RybC1SaWdodCI6ImdvU3Vid29yZFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0dyb3VwTGVmdCIsIkFsdC1SaWdodCI6ImdvR3JvdXBSaWdodCJ9fSksdGhpcy5lZGl0b3Iub24oImNoYW5nZSIsdGhpcy5vbkVkaXQpLHRoaXMuZWRpdG9yLm9uKCJrZXl1cCIsdGhpcy5vbktleVVwKX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuaWdub3JlQ2hhbmdlRXZlbnQ9ITAsdGhpcy5wcm9wcy52YWx1ZSE9PWUudmFsdWUmJnRoaXMucHJvcHMudmFsdWUhPT10aGlzLmNhY2hlZFZhbHVlJiYodGhpcy5jYWNoZWRWYWx1ZT10aGlzLnByb3BzLnZhbHVlLHRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMucHJvcHMudmFsdWUpKSx0aGlzLmlnbm9yZUNoYW5nZUV2ZW50PSExfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuZWRpdG9yLm9mZigiY2hhbmdlIix0aGlzLm9uRWRpdCksdGhpcy5lZGl0b3Iub2ZmKCJrZXl1cCIsdGhpcy5vbktleVVwKSx0aGlzLmVkaXRvcj1udWxsfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5jcmVhdGVFbGVtZW50KGEuZGVmYXVsdCxudWxsLG8uY3JlYXRlRWxlbWVudChsLHtyZWY6dGhpcy5zZXROb2RlfSkpfSx0LnByb3RvdHlwZS5nZXRDb2RlTWlycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdG9yfSx0LnByb3RvdHlwZS5nZXRDbGllbnRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlJiZ0aGlzLm5vZGUuY2xpZW50SGVpZ2h0fSx0fShvLkNvbXBvbmVudCk7dC5Db25maWdFZGl0b3I9dTt2YXIgYyxsPXMuc3R5bGVkLmRpdihjfHwoYz1pKFsiXG4gIGZsZXg6IDE7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAuQ29kZU1pcnJvci1saW5lbnVtYmVycyB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4iXSxbIlxuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge1xuICAgIGJhY2tncm91bmQ6ICIsIjtcbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnJlc3VsdEJhY2tncm91bmR9KX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oMikpfShmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZS5kZWZpbmVNb2RlKCJ5YW1sIixmdW5jdGlvbigpe3ZhciBlPVsidHJ1ZSIsImZhbHNlIiwib24iLCJvZmYiLCJ5ZXMiLCJubyJdLHQ9bmV3IFJlZ0V4cCgiXFxiKCgiK2Uuam9pbigiKXwoIikrIikpJCIsImkiKTtyZXR1cm57dG9rZW46ZnVuY3Rpb24oZSxuKXt2YXIgcj1lLnBlZWsoKSxpPW4uZXNjYXBlZDtpZihuLmVzY2FwZWQ9ITEsIiMiPT1yJiYoMD09ZS5wb3N8fC9ccy8udGVzdChlLnN0cmluZy5jaGFyQXQoZS5wb3MtMSkpKSlyZXR1cm4gZS5za2lwVG9FbmQoKSwiY29tbWVudCI7aWYoZS5tYXRjaCgvXignKFteJ118XFwuKSonP3wiKFteIl18XFwuKSoiPykvKSlyZXR1cm4ic3RyaW5nIjtpZihuLmxpdGVyYWwmJmUuaW5kZW50YXRpb24oKT5uLmtleUNvbClyZXR1cm4gZS5za2lwVG9FbmQoKSwic3RyaW5nIjtpZihuLmxpdGVyYWwmJihuLmxpdGVyYWw9ITEpLGUuc29sKCkpe2lmKG4ua2V5Q29sPTAsbi5wYWlyPSExLG4ucGFpclN0YXJ0PSExLGUubWF0Y2goLy0tLS8pKXJldHVybiJkZWYiO2lmKGUubWF0Y2goL1wuXC5cLi8pKXJldHVybiJkZWYiO2lmKGUubWF0Y2goL1xzKi1ccysvKSlyZXR1cm4ibWV0YSJ9aWYoZS5tYXRjaCgvXihce3xcfXxcW3xcXSkvKSlyZXR1cm4ieyI9PXI/bi5pbmxpbmVQYWlycysrOiJ9Ij09cj9uLmlubGluZVBhaXJzLS06IlsiPT1yP24uaW5saW5lTGlzdCsrOm4uaW5saW5lTGlzdC0tLCJtZXRhIjtpZihuLmlubGluZUxpc3Q+MCYmIWkmJiIsIj09cilyZXR1cm4gZS5uZXh0KCksIm1ldGEiO2lmKG4uaW5saW5lUGFpcnM+MCYmIWkmJiIsIj09cilyZXR1cm4gbi5rZXlDb2w9MCxuLnBhaXI9ITEsbi5wYWlyU3RhcnQ9ITEsZS5uZXh0KCksIm1ldGEiO2lmKG4ucGFpclN0YXJ0KXtpZihlLm1hdGNoKC9eXHMqKFx8fFw+KVxzKi8pKXJldHVybiBuLmxpdGVyYWw9ITAsIm1ldGEiO2lmKGUubWF0Y2goL15ccyooXCZ8XCopW2EtejAtOVwuXy1dK1xiL2kpKXJldHVybiJ2YXJpYWJsZS0yIjtpZigwPT1uLmlubGluZVBhaXJzJiZlLm1hdGNoKC9eXHMqLT9bMC05XC5cLF0rXHM/JC8pKXJldHVybiJudW1iZXIiO2lmKG4uaW5saW5lUGFpcnM+MCYmZS5tYXRjaCgvXlxzKi0/WzAtOVwuXCxdK1xzPyg/PSgsfH0pKS8pKXJldHVybiJudW1iZXIiO2lmKGUubWF0Y2godCkpcmV0dXJuImtleXdvcmQifXJldHVybiFuLnBhaXImJmUubWF0Y2goL15ccyooPzpbLFxbXF17fSYqIXw+JyIlQGBdW15ccyciOl18W14sXFtcXXt9IyYqIXw+JyIlQGBdKVteI10qPyg/PVxzKjooJHxccykpLyk/KG4ucGFpcj0hMCxuLmtleUNvbD1lLmluZGVudGF0aW9uKCksImF0b20iKTpuLnBhaXImJmUubWF0Y2goL146XHMqLyk/KG4ucGFpclN0YXJ0PSEwLCJtZXRhIik6KG4ucGFpclN0YXJ0PSExLG4uZXNjYXBlZD0iXFwiPT1yLGUubmV4dCgpLG51bGwpfSxzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue3BhaXI6ITEscGFpclN0YXJ0OiExLGtleUNvbDowLGlubGluZVBhaXJzOjAsaW5saW5lTGlzdDowLGxpdGVyYWw6ITEsZXNjYXBlZDohMX19LGxpbmVDb21tZW50OiIjIn19KSxlLmRlZmluZU1JTUUoInRleHQveC15YW1sIiwieWFtbCIpLGUuZGVmaW5lTUlNRSgidGV4dC95YW1sIiwieWFtbCIpfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCksYT1uKDEpLHM9bigxMzMpLHU9big4KSxjPW4oMTIpLGw9bigxNikscD1uKDM3KSxmPW4oOSksZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gcih0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBvLmNyZWF0ZUVsZW1lbnQocC5Db250YWluZXIsbnVsbCxvLmNyZWF0ZUVsZW1lbnQoeSxudWxsLG8uY3JlYXRlRWxlbWVudChwLmRlZmF1bHQsbnVsbCxvLmNyZWF0ZUVsZW1lbnQodixudWxsLG8uY3JlYXRlRWxlbWVudChzLlF1ZXJ5RWRpdG9yLHt2YWx1ZTp0aGlzLnByb3BzLnZhbHVlLG9uQ2hhbmdlOnRoaXMucHJvcHMub25DaGFuZ2V9KSkpKSl9LHR9KG8uQ29tcG9uZW50KSxoPXUuY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHt2YWx1ZTpjLmdldEZpbGV9KTt0LmRlZmF1bHQ9Zi5jb25uZWN0KGgse29uQ2hhbmdlOmwuZWRpdEZpbGV9KShkKTt2YXIgbSxnLHk9YS5zdHlsZWQuZGl2KG18fChtPWkoWyJcbiAgYmFja2dyb3VuZDogIiwiO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC52YXJpYWJsZS1lZGl0b3Ige1xuICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICB9XG4gIC5Db2RlTWlycm9yIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7XG4gICAgLkNvZGVNaXJyb3ItY29kZSB7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIH1cbiAgICAuY20tYXRvbSB7XG4gICAgICBjb2xvcjogcmdiYSg0MiwgMTI2LCAyMTAsIDEpO1xuICAgIH1cbiAgfVxuIl0sWyJcbiAgYmFja2dyb3VuZDogIiwiO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC52YXJpYWJsZS1lZGl0b3Ige1xuICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICB9XG4gIC5Db2RlTWlycm9yIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7XG4gICAgLkNvZGVNaXJyb3ItY29kZSB7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIH1cbiAgICAuY20tYXRvbSB7XG4gICAgICBjb2xvcjogcmdiYSg0MiwgMTI2LCAyMTAsIDEpO1xuICAgIH1cbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnJlc3VsdEJhY2tncm91bmR9KSx2PWEuc3R5bGVkLmRpdihnfHwoZz1pKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuIl0pKSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtuYW1lOiJncmFwaHFsLXBsYXlncm91bmQtcmVhY3QiLHZlcnNpb246IjEuNy4yMCIsbWFpbjoiLi9saWIvbGliLmpzIix0eXBpbmdzOiIuL2xpYi9saWIuZC50cyIsZGVzY3JpcHRpb246IkdyYXBoUUwgSURFIGZvciBiZXR0ZXIgZGV2ZWxvcG1lbnQgd29ya2Zsb3dzIChHcmFwaFFMIFN1YnNjcmlwdGlvbnMsIGludGVyYWN0aXZlIGRvY3MgJiBjb2xsYWJvcmF0aW9uKS4iLGNvbnRyaWJ1dG9yczpbIlRpbSBTdWNoYW5layA8dGltQGdyYXBoLmNvb2w+IiwiSm9oYW5uZXMgU2NoaWNrbGluZyA8am9oYW5uZXNAZ3JhcGguY29vbD4iLCJMdWthcyBIdXZhciA8bHVrYXNAaHV2YXIuY3o+Il0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHA6Ly9naXRodWIuY29tL2dyYXBoY29vbC9ncmFwaHFsLXBsYXlncm91bmQuZ2l0In0sbGljZW5zZToiTUlUIixzY3JpcHRzOntzdGFydDoibm9kZSBzY3JpcHRzL3N0YXJ0LmpzIiwic3RhcnQ6YW5hbHl6ZSI6IkFOQUxZWkVfQlVORExFPXRydWUgbm9kZSBzY3JpcHRzL3N0YXJ0LmpzIiwic3RhcnQ6Z3JhcGhxbC1iaW4iOiJBQ1RJVkVfQVBQPWdyYXBocWxiaW4gbm9kZSBzY3JpcHRzL3N0YXJ0LmpzIixwcmVwdWJsaXNoT25seToieWFybiBidWlsZCIsYnVpbGQ6InJpbXJhZiBkaXN0IGJ1aWxkIGRpc3QgJiYgeWFybiBidWlsZC1hcHAgJiYgeWFybiBidWlsZC1wYWNrYWdlIix0c2M6InRzYyAtcCB0c2NvbmZpZy5idWlsZC5qc29uIiwiYnVpbGQtcGFja2FnZSI6InJpbXJhZiBsaWIgYnVpbGQvZGlzdCAmJiBucG0gcnVuIHRzYyAmJiBiYWJlbCBsaWIgLWQgbGliICYmIGNwIC1yIC4vc3JjL2Fzc2V0cy8gLi9saWIvYXNzZXRzLyAmJiBjZCBsaWIgJiYgcmltcmFmICouanN4OyIsImJ1aWxkLWFwcCI6Im5vZGUgc2NyaXB0cy9idWlsZC5qcyIsdGVzdDoiamVzdCIsYnVuZGxlc2l6ZToiYnVuZGxlc2l6ZSIsYnVtcDoibnBtIHZlcnNpb24gcGF0Y2ggLS1uby1naXQtdGFnLXZlcnNpb24gJiYgZ2l0IGFkZCBwYWNrYWdlLmpzb24iLCJncmFwaHFsLWZha2VyIjoiZ3JhcGhxbC1mYWtlciAuL3Rlc3RzL3NjaGVtYS5mYWtlci5ncmFwaHFsIixsaW50Oid0c2xpbnQgInNyYy8qKi8qLnRzeyx4fSInLHByZWNvbW1pdDoibGludC1zdGFnZWQiLHByZXR0aWVyOiJwcmV0dGllciAtLXNpbmdsZS1xdW90ZSAtLW5vLXNlbWkgLS10cmFpbGluZy1jb21tYSBhbGwgLS13cml0ZSAqLnt0cyx0c3h9ICdzcmMvKiovKi57dHMsdHN4fScifSxmaWxlczpbImJ1aWxkIiwibGliIiwicGxheWdyb3VuZC5jc3MiXSxidW5kbGVzaXplOlt7cGF0aDoiYnVpbGQvc3RhdGljL2pzL2luZGV4LmpzIixtYXhTaXplOiI2NzQga0IifV0sZGV2RGVwZW5kZW5jaWVzOnsiQHR5cGVzL2RlYXN5bmMiOiIwLjEuMCIsIkB0eXBlcy9qZXN0IjoiMjIuMi4zIiwiQHR5cGVzL25vZGUiOiIxMC4xLjQiLCJAdHlwZXMvcmVhY3QiOiIxNi4zLjE0IiwiQHR5cGVzL3plbi1vYnNlcnZhYmxlIjoiXjAuNS4zIiwiYmFiZWwtY2xpIjoiNi4yNi4wIiwiYmFiZWwtY29yZSI6IjYuMjYuMyIsImJhYmVsLWxvYWRlciI6IjcuMS40IiwiYmFiZWwtcGx1Z2luLXN0eWxlZC1jb21wb25lbnRzIjoiXjEuOC4wIiwiYmFiZWwtcHJlc2V0LWVzMjAxNSI6IjYuMjQuMSIsImJhYmVsLXByZXNldC1lczIwMTYiOiI2LjI0LjEiLCJiYWJlbC1wcmVzZXQtcmVhY3QiOiI2LjI0LjEiLCJiYWJlbC1wcmVzZXQtc3RhZ2UtMyI6IjYuMjQuMSIsYnVuZGxlc2l6ZToiXjAuMTcuMCIsImNhc2Utc2Vuc2l0aXZlLXBhdGhzLXdlYnBhY2stcGx1Z2luIjoiMi4xLjIiLGNoYWxrOiIyLjQuMSIsImNvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2siOiIxLjUuMCIsImNyb3NzLXNwYXduIjoiNi4wLjUiLCJjc3MtbG9hZGVyIjoiMC4yOC4xMSIsImRldGVjdC1wb3J0IjoiMS4yLjMiLGRvdGVudjoiNS4wLjEiLGVuenltZToiXjMuMy4wIiwiZW56eW1lLWFkYXB0ZXItcmVhY3QtMTYiOiJeMS4xLjEiLCJlbnp5bWUtdG8tanNvbiI6Il4zLjMuNCIsImV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbiI6IjMuMC4yIiwiZmlsZS1sb2FkZXIiOiIxLjEuMTEiLGZpbGVzaXplOiIzLjYuMSIsImZzLWV4dHJhIjoiNS4wLjAiLCJncmFwaHFsLXBsYXlncm91bmQtaHRtbCI6IjEuNS42IiwiZ3ppcC1zaXplIjoiNC4xLjAiLCJodG1sLXdlYnBhY2stcGx1Z2luIjoiMi4zMC4xIiwiaHR0cC1wcm94eS1taWRkbGV3YXJlIjoiMC4xNy40IixodXNreToiMC4xNC4zIixqZXN0OiIyMi4xLjQiLCJqZXN0LWxvY2Fsc3RvcmFnZS1tb2NrIjoiXjIuMi4wIiwianNvbi1sb2FkZXIiOiIwLjUuNyIsImxpbnQtc3RhZ2VkIjoiNi4xLjAiLCJub2RlLW5vb3AiOiIxLjAuMCIsIm9iamVjdC1hc3NpZ24iOiI0LjEuMSIscHJvbWlzZToiOC4wLjEiLCJyYXctbG9hZGVyIjoiMC41LjEiLCJyZWFjdC1kZXYtdXRpbHMiOiI1LjAuMSIsInJlY3Vyc2l2ZS1yZWFkZGlyIjoiMi4yLjIiLHJpbXJhZjoiMi42LjIiLCJzb3VyY2UtbWFwLWxvYWRlciI6IjAuMi4zIiwic3RyaXAtYW5zaSI6IjQuMC4wIiwic3R5bGUtbG9hZGVyIjoiMC4yMC4xIiwic3ZnLWlubGluZS1sb2FkZXIiOiIwLjguMCIsInN3LXByZWNhY2hlLXdlYnBhY2stcGx1Z2luIjoiMC4xMS41IiwidHMtbG9hZGVyIjoiMy40LjAiLHRzbGludDoiNS4xMC4wIiwidHNsaW50LWdyYXBoY29vbC1mcm9udGVuZCI6IjAuMC4zIiwidHNsaW50LWxvYWRlciI6IjMuNi4wIix0eXBlc2NyaXB0OiJeMy4wLjEiLCJ0eXBlc2NyaXB0LXN0eWxlZC1wbHVnaW4iOiJeMC4xMS4wIiwidXJsLWxvYWRlciI6IjAuNi4yIix3ZWJwYWNrOiIzLjEwLjAiLCJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiIyLjExLjEiLCJ3ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbiI6IjEuMy4yIiwid2h5LWRpZC15b3UtdXBkYXRlIjoiMC4xLjEifSxkZXBlbmRlbmNpZXM6eyJAdHlwZXMvbHJ1LWNhY2hlIjoiXjQuMS4xIiwiYXBvbGxvLWxpbmsiOiJeMS4wLjciLCJhcG9sbG8tbGluay1odHRwIjoiXjEuMy4yIiwiYXBvbGxvLWxpbmstd3MiOiIxLjAuOCIsImNhbGN1bGF0ZS1zaXplIjoiXjEuMS4xIixjb2RlbWlycm9yOiJeNS4zOC4wIiwiY29kZW1pcnJvci1ncmFwaHFsIjoidGltc3VjaGFuZWsvY29kZW1pcnJvci1ncmFwaHFsI2RldGFpbHMtZml4IiwiY29weS10by1jbGlwYm9hcmQiOiJeMy4wLjgiLGNyeXB0aWxlczoiNC4xLjIiLGN1aWQ6Il4xLjMuOCIsZ3JhcGhpcWw6Il4wLjExLjIiLGdyYXBocWw6Il4wLjExLjciLGltbXV0YWJsZToiXjQuMC4wLXJjLjkiLCJpc29tb3JwaGljLWZldGNoIjoiXjIuMi4xIiwianMteWFtbCI6Il4zLjEwLjAiLCJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiJeMS4wLjEiLGtleWNvZGU6Il4yLjEuOSIsbG9kYXNoOiJeNC4xNy4xMSIsImxvZGFzaC5kZWJvdW5jZSI6Il40LjAuOCIsIm1hcmtkb3duLWl0IjoiXjguNC4xIixtYXJrZWQ6Il4wLjMuMTkiLHByZXR0aWVyOiJeMS4xMy4wIiwicHJvcC10eXBlcyI6Il4xNS42LjAiLCJxdWVyeS1zdHJpbmciOiI1IixyZWFjdDoiXjE2LjMuMSIsInJlYWN0LWFkZG9ucy1zaGFsbG93LWNvbXBhcmUiOiJeMTUuNi4yIiwicmVhY3QtY29kZW1pcnJvciI6Il4xLjAuMCIsInJlYWN0LWNvcHktdG8tY2xpcGJvYXJkIjoiXjUuMC4xIiwicmVhY3QtZGlzcGxheS1uYW1lIjoiXjAuMi4zIiwicmVhY3QtZG9tIjoiXjE2LjMuMSIsInJlYWN0LWhlbG1ldCI6Il41LjIuMCIsInJlYWN0LWlucHV0LWF1dG9zaXplIjoiXjIuMi4xIiwicmVhY3QtbW9kYWwiOiJeMy4xLjExIiwicmVhY3QtcmVkdXgiOiJeNS4wLjYiLCJyZWFjdC1yb3V0ZXItZG9tIjoiXjQuMi4yIiwicmVhY3Qtc29ydGFibGUtaG9jIjoiXjAuOC4zIiwicmVhY3QtdHJhbnNpdGlvbi1ncm91cCI6Il4yLjIuMSIsInJlYWN0LXZpcnR1YWxpemVkIjoiXjkuMTIuMCIscmVkdXg6Il4zLjcuMiIsInJlZHV4LWFjdGlvbnMiOiJeMi4yLjEiLCJyZWR1eC1pbW11dGFibGUiOiJeNC4wLjAiLCJyZWR1eC1sb2NhbHN0b3JhZ2UiOiJyYyIsInJlZHV4LWxvY2Fsc3RvcmFnZS1kZWJvdW5jZSI6Il4wLjEuMCIsInJlZHV4LWxvY2Fsc3RvcmFnZS1maWx0ZXIiOiJeMC4xLjEiLCJyZWR1eC1zYWdhIjoiXjAuMTYuMCIscmVzZWxlY3Q6Il4zLjAuMSIsInNlYW1sZXNzLWltbXV0YWJsZSI6Il43LjAuMSIsInN0eWxlZC1jb21wb25lbnRzIjoiXjQuMC4wIiwic3Vic2NyaXB0aW9ucy10cmFuc3BvcnQtd3MiOiJeMC45LjUiLCJ1dGlsaXR5LXR5cGVzIjoiXjEuMC4wIiwid2VicGFjay1idW5kbGUtYW5hbHl6ZXIiOiJeMi45LjIiLCJ6ZW4tb2JzZXJ2YWJsZSI6Il4wLjcuMSJ9LCJsaW50LXN0YWdlZCI6eyIqLnt0cyx0c3h9IjpbInByZXR0aWVyIC0tc2luZ2xlLXF1b3RlIC0tbm8tc2VtaSAtLXdyaXRlIiwidHNsaW50IiwiZ2l0IGFkZCJdLGdpdERpcjoiLi4vLi4vIn0samVzdDp7Y29sbGVjdENvdmVyYWdlRnJvbTpbInNyYy8qKi8qLnt0cyx0c3h9Il0sc2V0dXBGaWxlczpbIjxyb290RGlyPi9jb25maWcvcG9seWZpbGxzLmpzIl0sdGVzdFBhdGhJZ25vcmVQYXR0ZXJuczpbIjxyb290RGlyPlsvXFxcXF0oYnVpbGR8ZG9jc3xub2RlX21vZHVsZXMpWy9cXFxcXSJdLHRlc3RFbnZpcm9ubWVudDoibm9kZSIsdGVzdFVSTDoiaHR0cDovL2xvY2FsaG9zdCIsdHJhbnNmb3JtOnsiXi4rXFwuY3NzJCI6Ijxyb290RGlyPi9jb25maWcvamVzdC9jc3NUcmFuc2Zvcm0uanMiLCJeLitcXC50c3g/JCI6Ijxyb290RGlyPi9jb25maWcvamVzdC90eXBlc2NyaXB0VHJhbnNmb3JtLmpzIiwiXig/IS4qXFwuKGNzc3xqc29uKSQpIjoiPHJvb3REaXI+L2NvbmZpZy9qZXN0L2ZpbGVUcmFuc2Zvcm0uanMifSx0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJuczpbIlsvXFxcXF1ub2RlX21vZHVsZXNbL1xcXFxdLitcXC4oanN8anN4KSQiXSxtb2R1bGVOYW1lTWFwcGVyOnsiXnJlYWN0LW5hdGl2ZSQiOiJyZWFjdC1uYXRpdmUtd2ViIn0sbW9kdWxlRmlsZUV4dGVuc2lvbnM6WyJ0cyIsInRzeCIsImpzIl0sdGVzdFJlZ2V4OiIoL19fdGVzdHNfXy8uKnxcXC4odGVzdHxzcGVjKSlcXC4odHN8dHN4fGpzKSQifX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXt1KHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7dShyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe2UuZG9uZT9pKGUudmFsdWUpOm5ldyBuKGZ1bmN0aW9uKHQpe3QoZS52YWx1ZSl9KS50aGVuKGEscyl9dSgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSl9LGk9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcihbZSx0XSl9fWZ1bmN0aW9uIHIobil7aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt1Oyl0cnl7aWYoaT0xLG8mJihhPTImblswXT9vLnJldHVybjpuWzBdP28udGhyb3d8fCgoYT1vLnJldHVybikmJmEuY2FsbChvKSwwKTpvLm5leHQpJiYhKGE9YS5jYWxsKG8sblsxXSkpLmRvbmUpcmV0dXJuIGE7c3dpdGNoKG89MCxhJiYobj1bMiZuWzBdLGEudmFsdWVdKSxuWzBdKXtjYXNlIDA6Y2FzZSAxOmE9bjticmVhaztjYXNlIDQ6cmV0dXJuIHUubGFiZWwrKyx7dmFsdWU6blsxXSxkb25lOiExfTtjYXNlIDU6dS5sYWJlbCsrLG89blsxXSxuPVswXTtjb250aW51ZTtjYXNlIDc6bj11Lm9wcy5wb3AoKSx1LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihhPXUudHJ5cywhKGE9YS5sZW5ndGg+MCYmYVthLmxlbmd0aC0xXSkmJig2PT09blswXXx8Mj09PW5bMF0pKXt1PTA7Y29udGludWV9aWYoMz09PW5bMF0mJighYXx8blsxXT5hWzBdJiZuWzFdPGFbM10pKXt1LmxhYmVsPW5bMV07YnJlYWt9aWYoNj09PW5bMF0mJnUubGFiZWw8YVsxXSl7dS5sYWJlbD1hWzFdLGE9bjticmVha31pZihhJiZ1LmxhYmVsPGFbMl0pe3UubGFiZWw9YVsyXSx1Lm9wcy5wdXNoKG4pO2JyZWFrfWFbMl0mJnUub3BzLnBvcCgpLHUudHJ5cy5wb3AoKTtjb250aW51ZX1uPXQuY2FsbChlLHUpfWNhdGNoKGUpe249WzYsZV0sbz0wfWZpbmFsbHl7aT1hPTB9aWYoNSZuWzBdKXRocm93IG5bMV07cmV0dXJue3ZhbHVlOm5bMF0/blsxXTp2b2lkIDAsZG9uZTohMH19dmFyIGksbyxhLHMsdT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZhWzBdKXRocm93IGFbMV07cmV0dXJuIGFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcz17bmV4dDpuKDApLHRocm93Om4oMSkscmV0dXJuOm4oMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big3NCksYT1vLm1lbW9pemUoZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTE/MTphKGUtMSkrYShlLTIpfSkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLmNvdW50PTEsdGhpcy5ydW5uaW5nPSEwLHRoaXMubWF4UmV0cmllcz0yMCx0aGlzLnN0b3A9ZnVuY3Rpb24oKXt0LnJ1bm5pbmc9ITEsY2xlYXJUaW1lb3V0KHQudGltZW91dCl9LHRoaXMuY2I9ZX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXM7cmV0dXJuIGkodGhpcyxmdW5jdGlvbihuKXtyZXR1cm4gZT1mdW5jdGlvbigpe3JldHVybiByKHQsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBpKHRoaXMsZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNiKCldO2Nhc2UgMTpyZXR1cm4gdC5zZW50KCksdGhpcy5jb3VudCsrLHRoaXMucnVubmluZyYmdGhpcy5jb3VudDx0aGlzLm1heFJldHJpZXMmJih0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChlLDFlMyoodGhpcy5jb3VudDwzPzU6YSh0aGlzLmNvdW50LTUpKSkpLFsyXX19KX0pfSxlKCksWzJdfSl9KX0sZX0oKTt0LkJhY2tvZmY9c30sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT09dHlwZW9mIHQmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gcyhlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMCx0LkhlbG1ldD12b2lkIDA7dmFyIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxsPW4oMCkscD1yKGwpLGY9bigxOCksZD1yKGYpLGg9big3MTYpLG09cihoKSxnPW4oNzE4KSx5PXIoZyksdj1uKDcyMSksYj1uKDMwMikseD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxDPSgwLG0uZGVmYXVsdCkodi5yZWR1Y2VQcm9wc1RvU3RhdGUsdi5oYW5kbGVDbGllbnRTdGF0ZUNoYW5nZSx2Lm1hcFN0YXRlT25TZXJ2ZXIpKHgpLEU9ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gbj10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbyh0aGlzLG4pLGEodGhpcyx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIHMobix0KSxuLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuISgwLHkuZGVmYXVsdCkodGhpcy5wcm9wcyxlKX0sbi5wcm90b3R5cGUubWFwTmVzdGVkQ2hpbGRyZW5Ub1Byb3BzPWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7c3dpdGNoKGUudHlwZSl7Y2FzZSBiLlRBR19OQU1FUy5TQ1JJUFQ6Y2FzZSBiLlRBR19OQU1FUy5OT1NDUklQVDpyZXR1cm57aW5uZXJIVE1MOnR9O2Nhc2UgYi5UQUdfTkFNRVMuU1RZTEU6cmV0dXJue2Nzc1RleHQ6dH19dGhyb3cgbmV3IEVycm9yKCI8IitlLnR5cGUrIiAvPiBlbGVtZW50cyBhcmUgc2VsZi1jbG9zaW5nIGFuZCBjYW4gbm90IGNvbnRhaW4gY2hpbGRyZW4uIFJlZmVyIHRvIG91ciBBUEkgZm9yIG1vcmUgaW5mb3JtYXRpb24uIil9LG4ucHJvdG90eXBlLmZsYXR0ZW5BcnJheVR5cGVDaGlsZHJlbj1mdW5jdGlvbihlKXt2YXIgdCxuPWUuY2hpbGQscj1lLmFycmF5VHlwZUNoaWxkcmVuLGk9ZS5uZXdDaGlsZFByb3BzLG89ZS5uZXN0ZWRDaGlsZHJlbjtyZXR1cm4gdSh7fSxyLCh0PXt9LHRbbi50eXBlXT1bXS5jb25jYXQocltuLnR5cGVdfHxbXSxbdSh7fSxpLHRoaXMubWFwTmVzdGVkQ2hpbGRyZW5Ub1Byb3BzKG4sbykpXSksdCkpfSxuLnByb3RvdHlwZS5tYXBPYmplY3RUeXBlQ2hpbGRyZW49ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUuY2hpbGQsaT1lLm5ld1Byb3BzLG89ZS5uZXdDaGlsZFByb3BzLGE9ZS5uZXN0ZWRDaGlsZHJlbjtzd2l0Y2goci50eXBlKXtjYXNlIGIuVEFHX05BTUVTLlRJVExFOnJldHVybiB1KHt9LGksKHQ9e30sdFtyLnR5cGVdPWEsdC50aXRsZUF0dHJpYnV0ZXM9dSh7fSxvKSx0KSk7Y2FzZSBiLlRBR19OQU1FUy5CT0RZOnJldHVybiB1KHt9LGkse2JvZHlBdHRyaWJ1dGVzOnUoe30sbyl9KTtjYXNlIGIuVEFHX05BTUVTLkhUTUw6cmV0dXJuIHUoe30saSx7aHRtbEF0dHJpYnV0ZXM6dSh7fSxvKX0pfXJldHVybiB1KHt9LGksKG49e30sbltyLnR5cGVdPXUoe30sbyksbikpfSxuLnByb3RvdHlwZS5tYXBBcnJheVR5cGVDaGlsZHJlblRvUHJvcHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj11KHt9LHQpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByO249dSh7fSxuLChyPXt9LHJbdF09ZVt0XSxyKSl9KSxufSxuLnByb3RvdHlwZS53YXJuT25JbnZhbGlkQ2hpbGRyZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0sbi5wcm90b3R5cGUubWFwQ2hpbGRyZW5Ub1Byb3BzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXt9O3JldHVybiBwLmRlZmF1bHQuQ2hpbGRyZW4uZm9yRWFjaChlLGZ1bmN0aW9uKGUpe2lmKGUmJmUucHJvcHMpe3ZhciBvPWUucHJvcHMsYT1vLmNoaWxkcmVuLHM9aShvLFsiY2hpbGRyZW4iXSksdT0oMCx2LmNvbnZlcnRSZWFjdFByb3BzdG9IdG1sQXR0cmlidXRlcykocyk7c3dpdGNoKG4ud2Fybk9uSW52YWxpZENoaWxkcmVuKGUsYSksZS50eXBlKXtjYXNlIGIuVEFHX05BTUVTLkxJTks6Y2FzZSBiLlRBR19OQU1FUy5NRVRBOmNhc2UgYi5UQUdfTkFNRVMuTk9TQ1JJUFQ6Y2FzZSBiLlRBR19OQU1FUy5TQ1JJUFQ6Y2FzZSBiLlRBR19OQU1FUy5TVFlMRTpyPW4uZmxhdHRlbkFycmF5VHlwZUNoaWxkcmVuKHtjaGlsZDplLGFycmF5VHlwZUNoaWxkcmVuOnIsbmV3Q2hpbGRQcm9wczp1LG5lc3RlZENoaWxkcmVuOmF9KTticmVhaztkZWZhdWx0OnQ9bi5tYXBPYmplY3RUeXBlQ2hpbGRyZW4oe2NoaWxkOmUsbmV3UHJvcHM6dCxuZXdDaGlsZFByb3BzOnUsbmVzdGVkQ2hpbGRyZW46YX0pfX19KSx0PXRoaXMubWFwQXJyYXlUeXBlQ2hpbGRyZW5Ub1Byb3BzKHIsdCl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMucHJvcHMsbj10LmNoaWxkcmVuLHI9aSh0LFsiY2hpbGRyZW4iXSksbz11KHt9LHIpO3JldHVybiBuJiYobz10aGlzLm1hcENoaWxkcmVuVG9Qcm9wcyhuLG8pKSxwLmRlZmF1bHQuY3JlYXRlRWxlbWVudChlLG8pfSxjKG4sbnVsbCxbe2tleToiY2FuVXNlRE9NIixzZXQ6ZnVuY3Rpb24odCl7ZS5jYW5Vc2VET009dH19XSksbn0ocC5kZWZhdWx0LkNvbXBvbmVudCksdC5wcm9wVHlwZXM9e2Jhc2U6ZC5kZWZhdWx0Lm9iamVjdCxib2R5QXR0cmlidXRlczpkLmRlZmF1bHQub2JqZWN0LGNoaWxkcmVuOmQuZGVmYXVsdC5vbmVPZlR5cGUoW2QuZGVmYXVsdC5hcnJheU9mKGQuZGVmYXVsdC5ub2RlKSxkLmRlZmF1bHQubm9kZV0pLGRlZmF1bHRUaXRsZTpkLmRlZmF1bHQuc3RyaW5nLGRlZmVyOmQuZGVmYXVsdC5ib29sLGVuY29kZVNwZWNpYWxDaGFyYWN0ZXJzOmQuZGVmYXVsdC5ib29sLGh0bWxBdHRyaWJ1dGVzOmQuZGVmYXVsdC5vYmplY3QsbGluazpkLmRlZmF1bHQuYXJyYXlPZihkLmRlZmF1bHQub2JqZWN0KSxtZXRhOmQuZGVmYXVsdC5hcnJheU9mKGQuZGVmYXVsdC5vYmplY3QpLG5vc2NyaXB0OmQuZGVmYXVsdC5hcnJheU9mKGQuZGVmYXVsdC5vYmplY3QpLG9uQ2hhbmdlQ2xpZW50U3RhdGU6ZC5kZWZhdWx0LmZ1bmMsc2NyaXB0OmQuZGVmYXVsdC5hcnJheU9mKGQuZGVmYXVsdC5vYmplY3QpLHN0eWxlOmQuZGVmYXVsdC5hcnJheU9mKGQuZGVmYXVsdC5vYmplY3QpLHRpdGxlOmQuZGVmYXVsdC5zdHJpbmcsdGl0bGVBdHRyaWJ1dGVzOmQuZGVmYXVsdC5vYmplY3QsdGl0bGVUZW1wbGF0ZTpkLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHRQcm9wcz17ZGVmZXI6ITAsZW5jb2RlU3BlY2lhbENoYXJhY3RlcnM6ITB9LHQucGVlaz1lLnBlZWssdC5yZXdpbmQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnJld2luZCgpO3JldHVybiB0fHwodD0oMCx2Lm1hcFN0YXRlT25TZXJ2ZXIpKHtiYXNlVGFnOltdLGJvZHlBdHRyaWJ1dGVzOnt9LGVuY29kZVNwZWNpYWxDaGFyYWN0ZXJzOiEwLGh0bWxBdHRyaWJ1dGVzOnt9LGxpbmtUYWdzOltdLG1ldGFUYWdzOltdLG5vc2NyaXB0VGFnczpbXSxzY3JpcHRUYWdzOltdLHN0eWxlVGFnczpbXSx0aXRsZToiIix0aXRsZUF0dHJpYnV0ZXM6e319KSksdH0sbn0oQyk7RS5yZW5kZXJTdGF0aWM9RS5yZXdpbmQsdC5IZWxtZXQ9RSx0LmRlZmF1bHQ9RX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT09dHlwZW9mIHQmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gYShlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBzPW4oMCksdT1yKHMpLGM9bigyNTgpLGw9cihjKSxwPW4oNzE3KSxmPXIocCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fCJDb21wb25lbnQifWlmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHJlZHVjZVByb3BzVG9TdGF0ZSB0byBiZSBhIGZ1bmN0aW9uLiIpO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBuJiYiZnVuY3Rpb24iIT09dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBtYXBTdGF0ZU9uU2VydmVyIHRvIGVpdGhlciBiZSB1bmRlZmluZWQgb3IgYSBmdW5jdGlvbi4iKTtyZXR1cm4gZnVuY3Rpb24oYyl7ZnVuY3Rpb24gcCgpe2g9ZShkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wcm9wc30pKSxtLmNhblVzZURPTT90KGgpOm4mJihoPW4oaCkpfWlmKCJmdW5jdGlvbiIhPT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuIik7dmFyIGQ9W10saD12b2lkIDAsbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGkodGhpcyx0KSxvKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBhKHQsZSksdC5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LHQucmV3aW5kPWZ1bmN0aW9uKCl7aWYodC5jYW5Vc2VET00pdGhyb3cgbmV3IEVycm9yKCJZb3UgbWF5IG9ubHkgY2FsbCByZXdpbmQoKSBvbiB0aGUgc2VydmVyLiBDYWxsIHBlZWsoKSB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlLiIpO3ZhciBlPWg7cmV0dXJuIGg9dm9pZCAwLGQ9W10sZX0sdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiEoMCxmLmRlZmF1bHQpKGUsdGhpcy5wcm9wcyl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe2QucHVzaCh0aGlzKSxwKCl9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3AoKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT1kLmluZGV4T2YodGhpcyk7ZC5zcGxpY2UoZSwxKSxwKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB1LmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLHRoaXMucHJvcHMpfSx0fShzLkNvbXBvbmVudCk7cmV0dXJuIG0uZGlzcGxheU5hbWU9IlNpZGVFZmZlY3QoIityKGMpKyIpIixtLmNhblVzZURPTT1sLmRlZmF1bHQuY2FuVXNlRE9NLG19fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9bj9uLmNhbGwocixlLHQpOnZvaWQgMDtpZih2b2lkIDAhPT1pKXJldHVybiEhaTtpZihlPT09dClyZXR1cm4hMDtpZigib2JqZWN0IiE9PXR5cGVvZiBlfHwhZXx8Im9iamVjdCIhPT10eXBlb2YgdHx8IXQpcmV0dXJuITE7dmFyIG89T2JqZWN0LmtleXMoZSksYT1PYmplY3Qua2V5cyh0KTtpZihvLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQodCksdT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgYz1vW3VdO2lmKCFzKGMpKXJldHVybiExO3ZhciBsPWVbY10scD10W2NdO2lmKCExPT09KGk9bj9uLmNhbGwocixsLHAsYyk6dm9pZCAwKXx8dm9pZCAwPT09aSYmbCE9PXApcmV0dXJuITF9cmV0dXJuITB9fSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWV9ZnVuY3Rpb24gaShlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9PXR5cGVvZiBlfHwibnVtYmVyIiE9PXR5cGVvZiBlLmxlbmd0aCkmJigiZnVuY3Rpb24iPT09dHlwZW9mIGUuY29weSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnNsaWNlJiYhKGUubGVuZ3RoPjAmJiJudW1iZXIiIT09dHlwZW9mIGVbMF0pKX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgbyxsO2lmKHIoZSl8fHIodCkpcmV0dXJuITE7aWYoZS5wcm90b3R5cGUhPT10LnByb3RvdHlwZSlyZXR1cm4hMTtpZih1KGUpKXJldHVybiEhdSh0KSYmKGU9YS5jYWxsKGUpLHQ9YS5jYWxsKHQpLGMoZSx0LG4pKTtpZihpKGUpKXtpZighaSh0KSlyZXR1cm4hMTtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaWYoZVtvXSE9PXRbb10pcmV0dXJuITE7cmV0dXJuITB9dHJ5e3ZhciBwPXMoZSksZj1zKHQpfWNhdGNoKGUpe3JldHVybiExfWlmKHAubGVuZ3RoIT1mLmxlbmd0aClyZXR1cm4hMTtmb3IocC5zb3J0KCksZi5zb3J0KCksbz1wLmxlbmd0aC0xO28+PTA7by0tKWlmKHBbb10hPWZbb10pcmV0dXJuITE7Zm9yKG89cC5sZW5ndGgtMTtvPj0wO28tLSlpZihsPXBbb10sIWMoZVtsXSx0W2xdLG4pKXJldHVybiExO3JldHVybiB0eXBlb2YgZT09PXR5cGVvZiB0fXZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZSxzPW4oNzE5KSx1PW4oNzIwKSxjPWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fChuPXt9KSxlPT09dHx8KGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZT9lLmdldFRpbWUoKT09PXQuZ2V0VGltZSgpOiFlfHwhdHx8Im9iamVjdCIhPXR5cGVvZiBlJiYib2JqZWN0IiE9dHlwZW9mIHQ/bi5zdHJpY3Q/ZT09PXQ6ZT09dDpvKGUsdCxuKSl9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4pO3JldHVybiB0fXQ9ZS5leHBvcnRzPSJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmtleXM/T2JqZWN0LmtleXM6bix0LnNoaW09bn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiY2FsbGVlIikmJiFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwiY2FsbGVlIil8fCExfXZhciBpPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKX0oKTt0PWUuZXhwb3J0cz1pP246cix0LnN1cHBvcnRlZD1uLHQudW5zdXBwb3J0ZWQ9cn0sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITAsdC53YXJuPXQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXQucmVkdWNlUHJvcHNUb1N0YXRlPXQubWFwU3RhdGVPblNlcnZlcj10LmhhbmRsZUNsaWVudFN0YXRlQ2hhbmdlPXQuY29udmVydFJlYWN0UHJvcHN0b0h0bWxBdHRyaWJ1dGVzPXZvaWQgMDt2YXIgaT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxhPW4oMCkscz1yKGEpLHU9big1NCksYz1yKHUpLGw9bigzMDIpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT0oIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSk/U3RyaW5nKGUpOlN0cmluZyhlKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjeDI3OyIpfSxmPWZ1bmN0aW9uKGUpe3ZhciB0PXkoZSxsLlRBR19OQU1FUy5USVRMRSksbj15KGUsbC5IRUxNRVRfUFJPUFMuVElUTEVfVEVNUExBVEUpO2lmKG4mJnQpcmV0dXJuIG4ucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiB0fSk7dmFyIHI9eShlLGwuSEVMTUVUX1BST1BTLkRFRkFVTFRfVElUTEUpO3JldHVybiB0fHxyfHx2b2lkIDB9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSxsLkhFTE1FVF9QUk9QUy5PTl9DSEFOR0VfQ0xJRU5UX1NUQVRFKXx8ZnVuY3Rpb24oKXt9fSxoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIHRbZV19KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbZV19KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh7fSxlLHQpfSx7fSl9LG09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPT10eXBlb2YgZVtsLlRBR19OQU1FUy5CQVNFXX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVtsLlRBR19OQU1FUy5CQVNFXX0pLnJldmVyc2UoKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtpZighdC5sZW5ndGgpZm9yKHZhciByPU9iamVjdC5rZXlzKG4pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXSxhPW8udG9Mb3dlckNhc2UoKTtpZigtMSE9PWUuaW5kZXhPZihhKSYmblthXSlyZXR1cm4gdC5jb25jYXQobil9cmV0dXJuIHR9LFtdKX0sZz1mdW5jdGlvbihlLHQsbil7dmFyIHI9e307cmV0dXJuIG4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhQXJyYXkuaXNBcnJheSh0W2VdKXx8KCJ1bmRlZmluZWQiIT09dHlwZW9mIHRbZV0mJkQoIkhlbG1ldDogIitlKycgc2hvdWxkIGJlIG9mIHR5cGUgIkFycmF5Ii4gSW5zdGVhZCBmb3VuZCB0eXBlICInK2kodFtlXSkrJyInKSwhMSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbZV19KS5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9e307bi5maWx0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXZvaWQgMCxvPU9iamVjdC5rZXlzKGUpLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXSx1PXMudG9Mb3dlckNhc2UoKTstMT09PXQuaW5kZXhPZih1KXx8bj09PWwuVEFHX1BST1BFUlRJRVMuUkVMJiYiY2Fub25pY2FsIj09PWVbbl0udG9Mb3dlckNhc2UoKXx8dT09PWwuVEFHX1BST1BFUlRJRVMuUkVMJiYic3R5bGVzaGVldCI9PT1lW3VdLnRvTG93ZXJDYXNlKCl8fChuPXUpLC0xPT09dC5pbmRleE9mKHMpfHxzIT09bC5UQUdfUFJPUEVSVElFUy5JTk5FUl9IVE1MJiZzIT09bC5UQUdfUFJPUEVSVElFUy5DU1NfVEVYVCYmcyE9PWwuVEFHX1BST1BFUlRJRVMuSVRFTV9QUk9QfHwobj1zKX1pZighbnx8IWVbbl0pcmV0dXJuITE7dmFyIGM9ZVtuXS50b0xvd2VyQ2FzZSgpO3JldHVybiByW25dfHwocltuXT17fSksaVtuXXx8KGlbbl09e30pLCFyW25dW2NdJiYoaVtuXVtjXT0hMCwhMCl9KS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5wdXNoKHQpfSk7Zm9yKHZhciBvPU9iamVjdC5rZXlzKGkpLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXSx1PSgwLGMuZGVmYXVsdCkoe30scltzXSxpW3NdKTtyW3NdPXV9cmV0dXJuIGV9LFtdKS5yZXZlcnNlKCl9LHk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLmhhc093blByb3BlcnR5KHQpKXJldHVybiByW3RdfXJldHVybiBudWxsfSx2PWZ1bmN0aW9uKGUpe3JldHVybntiYXNlVGFnOm0oW2wuVEFHX1BST1BFUlRJRVMuSFJFRl0sZSksYm9keUF0dHJpYnV0ZXM6aChsLkFUVFJJQlVURV9OQU1FUy5CT0RZLGUpLGRlZmVyOnkoZSxsLkhFTE1FVF9QUk9QUy5ERUZFUiksZW5jb2RlOnkoZSxsLkhFTE1FVF9QUk9QUy5FTkNPREVfU1BFQ0lBTF9DSEFSQUNURVJTKSxodG1sQXR0cmlidXRlczpoKGwuQVRUUklCVVRFX05BTUVTLkhUTUwsZSksbGlua1RhZ3M6ZyhsLlRBR19OQU1FUy5MSU5LLFtsLlRBR19QUk9QRVJUSUVTLlJFTCxsLlRBR19QUk9QRVJUSUVTLkhSRUZdLGUpLG1ldGFUYWdzOmcobC5UQUdfTkFNRVMuTUVUQSxbbC5UQUdfUFJPUEVSVElFUy5OQU1FLGwuVEFHX1BST1BFUlRJRVMuQ0hBUlNFVCxsLlRBR19QUk9QRVJUSUVTLkhUVFBFUVVJVixsLlRBR19QUk9QRVJUSUVTLlBST1BFUlRZLGwuVEFHX1BST1BFUlRJRVMuSVRFTV9QUk9QXSxlKSxub3NjcmlwdFRhZ3M6ZyhsLlRBR19OQU1FUy5OT1NDUklQVCxbbC5UQUdfUFJPUEVSVElFUy5JTk5FUl9IVE1MXSxlKSxvbkNoYW5nZUNsaWVudFN0YXRlOmQoZSksc2NyaXB0VGFnczpnKGwuVEFHX05BTUVTLlNDUklQVCxbbC5UQUdfUFJPUEVSVElFUy5TUkMsbC5UQUdfUFJPUEVSVElFUy5JTk5FUl9IVE1MXSxlKSxzdHlsZVRhZ3M6ZyhsLlRBR19OQU1FUy5TVFlMRSxbbC5UQUdfUFJPUEVSVElFUy5DU1NfVEVYVF0sZSksdGl0bGU6ZihlKSx0aXRsZUF0dHJpYnV0ZXM6aChsLkFUVFJJQlVURV9OQU1FUy5USVRMRSxlKX19LGI9ZnVuY3Rpb24oKXt2YXIgZT1EYXRlLm5vdygpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1EYXRlLm5vdygpO24tZT4xNj8oZT1uLHQobikpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtiKHQpfSwwKX19KCkseD1mdW5jdGlvbihlKXtyZXR1cm4gY2xlYXJUaW1lb3V0KGUpfSxDPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxiOmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxiLEU9InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHg6ZS5jYW5jZWxBbmltYXRpb25GcmFtZXx8eCxEPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlJiYiZnVuY3Rpb24iPT09dHlwZW9mIGNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGUpfSx3PW51bGwsUz1mdW5jdGlvbihlKXt3JiZFKHcpLGUuZGVmZXI/dz1DKGZ1bmN0aW9uKCl7ayhlLGZ1bmN0aW9uKCl7dz1udWxsfSl9KTooayhlKSx3PW51bGwpfSxrPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5iYXNlVGFnLHI9ZS5ib2R5QXR0cmlidXRlcyxpPWUuaHRtbEF0dHJpYnV0ZXMsbz1lLmxpbmtUYWdzLGE9ZS5tZXRhVGFncyxzPWUubm9zY3JpcHRUYWdzLHU9ZS5vbkNoYW5nZUNsaWVudFN0YXRlLGM9ZS5zY3JpcHRUYWdzLHA9ZS5zdHlsZVRhZ3MsZj1lLnRpdGxlLGQ9ZS50aXRsZUF0dHJpYnV0ZXM7VChsLlRBR19OQU1FUy5CT0RZLHIpLFQobC5UQUdfTkFNRVMuSFRNTCxpKSxfKGYsZCk7dmFyIGg9e2Jhc2VUYWc6TyhsLlRBR19OQU1FUy5CQVNFLG4pLGxpbmtUYWdzOk8obC5UQUdfTkFNRVMuTElOSyxvKSxtZXRhVGFnczpPKGwuVEFHX05BTUVTLk1FVEEsYSksbm9zY3JpcHRUYWdzOk8obC5UQUdfTkFNRVMuTk9TQ1JJUFQscyksc2NyaXB0VGFnczpPKGwuVEFHX05BTUVTLlNDUklQVCxjKSxzdHlsZVRhZ3M6TyhsLlRBR19OQU1FUy5TVFlMRSxwKX0sbT17fSxnPXt9O09iamVjdC5rZXlzKGgpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9aFtlXSxuPXQubmV3VGFncyxyPXQub2xkVGFncztuLmxlbmd0aCYmKG1bZV09biksci5sZW5ndGgmJihnW2VdPWhbZV0ub2xkVGFncyl9KSx0JiZ0KCksdShlLG0sZyl9LEE9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5qb2luKCIiKTplfSxfPWZ1bmN0aW9uKGUsdCl7InVuZGVmaW5lZCIhPT10eXBlb2YgZSYmZG9jdW1lbnQudGl0bGUhPT1lJiYoZG9jdW1lbnQudGl0bGU9QShlKSksVChsLlRBR19OQU1FUy5USVRMRSx0KX0sVD1mdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpWzBdO2lmKG4pe2Zvcih2YXIgcj1uLmdldEF0dHJpYnV0ZShsLkhFTE1FVF9BVFRSSUJVVEUpLGk9cj9yLnNwbGl0KCIsIik6W10sbz1bXS5jb25jYXQoaSksYT1PYmplY3Qua2V5cyh0KSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciB1PWFbc10sYz10W3VdfHwiIjtuLmdldEF0dHJpYnV0ZSh1KSE9PWMmJm4uc2V0QXR0cmlidXRlKHUsYyksLTE9PT1pLmluZGV4T2YodSkmJmkucHVzaCh1KTt2YXIgcD1vLmluZGV4T2YodSk7LTEhPT1wJiZvLnNwbGljZShwLDEpfWZvcih2YXIgZj1vLmxlbmd0aC0xO2Y+PTA7Zi0tKW4ucmVtb3ZlQXR0cmlidXRlKG9bZl0pO2kubGVuZ3RoPT09by5sZW5ndGg/bi5yZW1vdmVBdHRyaWJ1dGUobC5IRUxNRVRfQVRUUklCVVRFKTpuLmdldEF0dHJpYnV0ZShsLkhFTE1FVF9BVFRSSUJVVEUpIT09YS5qb2luKCIsIikmJm4uc2V0QXR0cmlidXRlKGwuSEVMTUVUX0FUVFJJQlVURSxhLmpvaW4oIiwiKSl9fSxPPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLlRBR19OQU1FUy5IRUFEKSxyPW4ucXVlcnlTZWxlY3RvckFsbChlKyJbIitsLkhFTE1FVF9BVFRSSUJVVEUrIl0iKSxpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpLG89W10sYT12b2lkIDA7cmV0dXJuIHQmJnQubGVuZ3RoJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtmb3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKWlmKHI9PT1sLlRBR19QUk9QRVJUSUVTLklOTkVSX0hUTUwpbi5pbm5lckhUTUw9dC5pbm5lckhUTUw7ZWxzZSBpZihyPT09bC5UQUdfUFJPUEVSVElFUy5DU1NfVEVYVCluLnN0eWxlU2hlZXQ/bi5zdHlsZVNoZWV0LmNzc1RleHQ9dC5jc3NUZXh0Om4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodC5jc3NUZXh0KSk7ZWxzZXt2YXIgcz0idW5kZWZpbmVkIj09PXR5cGVvZiB0W3JdPyIiOnRbcl07bi5zZXRBdHRyaWJ1dGUocixzKX1uLnNldEF0dHJpYnV0ZShsLkhFTE1FVF9BVFRSSUJVVEUsInRydWUiKSxpLnNvbWUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYT10LG4uaXNFcXVhbE5vZGUoZSl9KT9pLnNwbGljZShhLDEpOm8ucHVzaChuKX0pLGkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSksby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmFwcGVuZENoaWxkKGUpfSkse29sZFRhZ3M6aSxuZXdUYWdzOm99fSxGPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXt2YXIgcj0idW5kZWZpbmVkIiE9PXR5cGVvZiBlW25dP24rJz0iJytlW25dKyciJzoiIituO3JldHVybiB0P3QrIiAiK3I6cn0sIiIpfSxOPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPUYobiksbz1BKHQpO3JldHVybiBpPyI8IitlKyIgIitsLkhFTE1FVF9BVFRSSUJVVEUrJz0idHJ1ZSIgJytpKyI+IitwKG8scikrIjwvIitlKyI+IjoiPCIrZSsiICIrbC5IRUxNRVRfQVRUUklCVVRFKyc9InRydWUiPicrcChvLHIpKyI8LyIrZSsiPiJ9LEk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBpPU9iamVjdC5rZXlzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hKGU9PT1sLlRBR19QUk9QRVJUSUVTLklOTkVSX0hUTUx8fGU9PT1sLlRBR19QUk9QRVJUSUVTLkNTU19URVhUKX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBpPSJ1bmRlZmluZWQiPT09dHlwZW9mIHJbdF0/dDp0Kyc9IicrcChyW3RdLG4pKyciJztyZXR1cm4gZT9lKyIgIitpOml9LCIiKSxvPXIuaW5uZXJIVE1MfHxyLmNzc1RleHR8fCIiLGE9LTE9PT1sLlNFTEZfQ0xPU0lOR19UQUdTLmluZGV4T2YoZSk7cmV0dXJuIHQrIjwiK2UrIiAiK2wuSEVMTUVUX0FUVFJJQlVURSsnPSJ0cnVlIiAnK2krKGE/Ii8+IjoiPiIrbysiPC8iK2UrIj4iKX0sIiIpfSxMPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbbC5SRUFDVF9UQUdfTUFQW25dfHxuXT1lW25dLHR9LHQpfSxQPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbbC5IVE1MX1RBR19NQVBbbl18fG5dPWVbbl0sdH0sdCl9LE09ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9KHI9e2tleTp0fSxyW2wuSEVMTUVUX0FUVFJJQlVURV09ITAsciksbz1MKG4saSk7cmV0dXJuW3MuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwuVEFHX05BTUVTLlRJVExFLG8sdCldfSxqPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsbil7dmFyIHIsaT0ocj17a2V5Om59LHJbbC5IRUxNRVRfQVRUUklCVVRFXT0hMCxyKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1sLlJFQUNUX1RBR19NQVBbZV18fGU7aWYobj09PWwuVEFHX1BST1BFUlRJRVMuSU5ORVJfSFRNTHx8bj09PWwuVEFHX1BST1BFUlRJRVMuQ1NTX1RFWFQpe3ZhciByPXQuaW5uZXJIVE1MfHx0LmNzc1RleHQ7aS5kYW5nZXJvdXNseVNldElubmVySFRNTD17X19odG1sOnJ9fWVsc2UgaVtuXT10W2VdfSkscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZSxpKX0pfSxSPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2goZSl7Y2FzZSBsLlRBR19OQU1FUy5USVRMRTpyZXR1cm57dG9Db21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gTSgwLHQudGl0bGUsdC50aXRsZUF0dHJpYnV0ZXMpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBOKGUsdC50aXRsZSx0LnRpdGxlQXR0cmlidXRlcyxuKX19O2Nhc2UgbC5BVFRSSUJVVEVfTkFNRVMuQk9EWTpjYXNlIGwuQVRUUklCVVRFX05BTUVTLkhUTUw6cmV0dXJue3RvQ29tcG9uZW50OmZ1bmN0aW9uKCl7cmV0dXJuIEwodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEYodCl9fTtkZWZhdWx0OnJldHVybnt0b0NvbXBvbmVudDpmdW5jdGlvbigpe3JldHVybiBqKGUsdCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEkoZSx0LG4pfX19fSxCPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYmFzZVRhZyxuPWUuYm9keUF0dHJpYnV0ZXMscj1lLmVuY29kZSxpPWUuaHRtbEF0dHJpYnV0ZXMsbz1lLmxpbmtUYWdzLGE9ZS5tZXRhVGFncyxzPWUubm9zY3JpcHRUYWdzLHU9ZS5zY3JpcHRUYWdzLGM9ZS5zdHlsZVRhZ3MscD1lLnRpdGxlLGY9dm9pZCAwPT09cD8iIjpwLGQ9ZS50aXRsZUF0dHJpYnV0ZXM7cmV0dXJue2Jhc2U6UihsLlRBR19OQU1FUy5CQVNFLHQsciksYm9keUF0dHJpYnV0ZXM6UihsLkFUVFJJQlVURV9OQU1FUy5CT0RZLG4sciksaHRtbEF0dHJpYnV0ZXM6UihsLkFUVFJJQlVURV9OQU1FUy5IVE1MLGksciksbGluazpSKGwuVEFHX05BTUVTLkxJTkssbyxyKSxtZXRhOlIobC5UQUdfTkFNRVMuTUVUQSxhLHIpLG5vc2NyaXB0OlIobC5UQUdfTkFNRVMuTk9TQ1JJUFQscyxyKSxzY3JpcHQ6UihsLlRBR19OQU1FUy5TQ1JJUFQsdSxyKSxzdHlsZTpSKGwuVEFHX05BTUVTLlNUWUxFLGMsciksdGl0bGU6UihsLlRBR19OQU1FUy5USVRMRSx7dGl0bGU6Zix0aXRsZUF0dHJpYnV0ZXM6ZH0scil9fTt0LmNvbnZlcnRSZWFjdFByb3BzdG9IdG1sQXR0cmlidXRlcz1QLHQuaGFuZGxlQ2xpZW50U3RhdGVDaGFuZ2U9Uyx0Lm1hcFN0YXRlT25TZXJ2ZXI9Qix0LnJlZHVjZVByb3BzVG9TdGF0ZT12LHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPUMsdC53YXJuPUR9KS5jYWxsKHQsbigxMSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzIzKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gIitlKyIgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQuIil9fXZhciBpPW4oNzI0KSxvPW4oNzQ3KTtlLmV4cG9ydHMuVHlwZT1uKDE1KSxlLmV4cG9ydHMuU2NoZW1hPW4oNTMpLGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUE9bigxNDgpLGUuZXhwb3J0cy5KU09OX1NDSEVNQT1uKDMwNCksZS5leHBvcnRzLkNPUkVfU0NIRU1BPW4oMzAzKSxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQT1uKDczKSxlLmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQT1uKDk4KSxlLmV4cG9ydHMubG9hZD1pLmxvYWQsZS5leHBvcnRzLmxvYWRBbGw9aS5sb2FkQWxsLGUuZXhwb3J0cy5zYWZlTG9hZD1pLnNhZmVMb2FkLGUuZXhwb3J0cy5zYWZlTG9hZEFsbD1pLnNhZmVMb2FkQWxsLGUuZXhwb3J0cy5kdW1wPW8uZHVtcCxlLmV4cG9ydHMuc2FmZUR1bXA9by5zYWZlRHVtcCxlLmV4cG9ydHMuWUFNTEV4Y2VwdGlvbj1uKDcyKSxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUE9bigxNDgpLGUuZXhwb3J0cy5TQUZFX1NDSEVNQT1uKDczKSxlLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUE9big5OCksZS5leHBvcnRzLnNjYW49cigic2NhbiIpLGUuZXhwb3J0cy5wYXJzZT1yKCJwYXJzZSIpLGUuZXhwb3J0cy5jb21wb3NlPXIoImNvbXBvc2UiKSxlLmV4cG9ydHMuYWRkQ29uc3RydWN0b3I9cigiYWRkQ29uc3RydWN0b3IiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZX1mdW5jdGlvbiBpKGUpe3JldHVybiA5PT09ZXx8MzI9PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIDk9PT1lfHwzMj09PWV8fDEwPT09ZXx8MTM9PT1lfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIDQ0PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV9ZnVuY3Rpb24gcyhlKXt2YXIgdDtyZXR1cm4gNDg8PWUmJmU8PTU3P2UtNDg6KHQ9MzJ8ZSw5Nzw9dCYmdDw9MTAyP3QtOTcrMTA6LTEpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDEyMD09PWU/MjoxMTc9PT1lPzQ6ODU9PT1lPzg6MH1mdW5jdGlvbiBjKGUpe3JldHVybiA0ODw9ZSYmZTw9NTc/ZS00ODotMX1mdW5jdGlvbiBsKGUpe3JldHVybiA0OD09PWU/IlwwIjo5Nz09PWU/Ilx4MDciOjk4PT09ZT8iXGIiOjExNj09PWU/Ilx0Ijo5PT09ZT8iXHQiOjExMD09PWU/IlxuIjoxMTg9PT1lPyJcdiI6MTAyPT09ZT8iXGYiOjExND09PWU/IlxyIjoxMDE9PT1lPyJceDFiIjozMj09PWU/IiAiOjM0PT09ZT8nIic6NDc9PT1lPyIvIjo5Mj09PWU/IlxcIjo3OD09PWU/Ilx4ODUiOjk1PT09ZT8iXHhhMCI6NzY9PT1lPyJcdTIwMjgiOjgwPT09ZT8iXHUyMDI5IjoiIn1mdW5jdGlvbiBwKGUpe3JldHVybiBlPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGUtNjU1MzY+PjEwKSw1NjMyMCsoZS02NTUzNiYxMDIzKSl9ZnVuY3Rpb24gZihlLHQpe3RoaXMuaW5wdXQ9ZSx0aGlzLmZpbGVuYW1lPXQuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9dC5zY2hlbWF8fFYsdGhpcy5vbldhcm5pbmc9dC5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9dC5sZWdhY3l8fCExLHRoaXMuanNvbj10Lmpzb258fCExLHRoaXMubGlzdGVuZXI9dC5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZG9jdW1lbnRzPVtdfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gbmV3IFUodCxuZXcgeihlLmZpbGVuYW1lLGUuaW5wdXQsZS5wb3NpdGlvbixlLmxpbmUsZS5wb3NpdGlvbi1lLmxpbmVTdGFydCkpfWZ1bmN0aW9uIGgoZSx0KXt0aHJvdyBkKGUsdCl9ZnVuY3Rpb24gbShlLHQpe2Uub25XYXJuaW5nJiZlLm9uV2FybmluZy5jYWxsKG51bGwsZChlLHQpKX1mdW5jdGlvbiBnKGUsdCxuLHIpe3ZhciBpLG8sYSxzO2lmKHQ8bil7aWYocz1lLmlucHV0LnNsaWNlKHQsbikscilmb3IoaT0wLG89cy5sZW5ndGg7aTxvO2krPTEpOT09PShhPXMuY2hhckNvZGVBdChpKSl8fDMyPD1hJiZhPD0xMTE0MTExfHxoKGUsImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSBaLnRlc3QocykmJmgoZSwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTtlLnJlc3VsdCs9c319ZnVuY3Rpb24geShlLHQsbixyKXt2YXIgaSxvLGEscztmb3IoJC5pc09iamVjdChuKXx8aChlLCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpLGk9T2JqZWN0LmtleXMobiksYT0wLHM9aS5sZW5ndGg7YTxzO2ErPTEpbz1pW2FdLHEuY2FsbCh0LG8pfHwodFtvXT1uW29dLHJbb109ITApfWZ1bmN0aW9uIHYoZSx0LG4scixpLG8sYSxzKXt2YXIgdSxjO2lmKGk9U3RyaW5nKGkpLG51bGw9PT10JiYodD17fSksInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIj09PXIpaWYoQXJyYXkuaXNBcnJheShvKSlmb3IodT0wLGM9by5sZW5ndGg7dTxjO3UrPTEpeShlLHQsb1t1XSxuKTtlbHNlIHkoZSx0LG8sbik7ZWxzZSBlLmpzb258fHEuY2FsbChuLGkpfHwhcS5jYWxsKHQsaSl8fChlLmxpbmU9YXx8ZS5saW5lLGUucG9zaXRpb249c3x8ZS5wb3NpdGlvbixoKGUsImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSksdFtpXT1vLGRlbGV0ZSBuW2ldO3JldHVybiB0fWZ1bmN0aW9uIGIoZSl7dmFyIHQ7dD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksMTA9PT10P2UucG9zaXRpb24rKzoxMz09PXQ/KGUucG9zaXRpb24rKywxMD09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSYmZS5wb3NpdGlvbisrKTpoKGUsImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpLGUubGluZSs9MSxlLmxpbmVTdGFydD1lLnBvc2l0aW9ufWZ1bmN0aW9uIHgoZSx0LG4pe2Zvcih2YXIgbz0wLGE9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pOzAhPT1hOyl7Zm9yKDtpKGEpOylhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKHQmJjM1PT09YSlkb3thPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXdoaWxlKDEwIT09YSYmMTMhPT1hJiYwIT09YSk7aWYoIXIoYSkpYnJlYWs7Zm9yKGIoZSksYT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksbysrLGUubGluZUluZGVudD0wOzMyPT09YTspZS5saW5lSW5kZW50KyssYT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX1yZXR1cm4tMSE9PW4mJjAhPT1vJiZlLmxpbmVJbmRlbnQ8biYmbShlLCJkZWZpY2llbnQgaW5kZW50YXRpb24iKSxvfWZ1bmN0aW9uIEMoZSl7dmFyIHQsbj1lLnBvc2l0aW9uO3JldHVybiEoNDUhPT0odD1lLmlucHV0LmNoYXJDb2RlQXQobikpJiY0NiE9PXR8fHQhPT1lLmlucHV0LmNoYXJDb2RlQXQobisxKXx8dCE9PWUuaW5wdXQuY2hhckNvZGVBdChuKzIpfHwobis9MywwIT09KHQ9ZS5pbnB1dC5jaGFyQ29kZUF0KG4pKSYmIW8odCkpKX1mdW5jdGlvbiBFKGUsdCl7MT09PXQ/ZS5yZXN1bHQrPSIgIjp0PjEmJihlLnJlc3VsdCs9JC5yZXBlYXQoIlxuIix0LTEpKX1mdW5jdGlvbiBEKGUsdCxuKXt2YXIgcyx1LGMsbCxwLGYsZCxoLG0seT1lLmtpbmQsdj1lLnJlc3VsdDtpZihtPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSxvKG0pfHxhKG0pfHwzNT09PW18fDM4PT09bXx8NDI9PT1tfHwzMz09PW18fDEyND09PW18fDYyPT09bXx8Mzk9PT1tfHwzND09PW18fDM3PT09bXx8NjQ9PT1tfHw5Nj09PW0pcmV0dXJuITE7aWYoKDYzPT09bXx8NDU9PT1tKSYmKHU9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSksbyh1KXx8biYmYSh1KSkpcmV0dXJuITE7Zm9yKGUua2luZD0ic2NhbGFyIixlLnJlc3VsdD0iIixjPWw9ZS5wb3NpdGlvbixwPSExOzAhPT1tOyl7aWYoNTg9PT1tKXtpZih1PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpLG8odSl8fG4mJmEodSkpYnJlYWt9ZWxzZSBpZigzNT09PW0pe2lmKHM9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24tMSksbyhzKSlicmVha31lbHNle2lmKGUucG9zaXRpb249PT1lLmxpbmVTdGFydCYmQyhlKXx8biYmYShtKSlicmVhaztpZihyKG0pKXtpZihmPWUubGluZSxkPWUubGluZVN0YXJ0LGg9ZS5saW5lSW5kZW50LHgoZSwhMSwtMSksZS5saW5lSW5kZW50Pj10KXtwPSEwLG09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO2NvbnRpbnVlfWUucG9zaXRpb249bCxlLmxpbmU9ZixlLmxpbmVTdGFydD1kLGUubGluZUluZGVudD1oO2JyZWFrfX1wJiYoZyhlLGMsbCwhMSksRShlLGUubGluZS1mKSxjPWw9ZS5wb3NpdGlvbixwPSExKSxpKG0pfHwobD1lLnBvc2l0aW9uKzEpLG09ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9cmV0dXJuIGcoZSxjLGwsITEpLCEhZS5yZXN1bHR8fChlLmtpbmQ9eSxlLnJlc3VsdD12LCExKX1mdW5jdGlvbiB3KGUsdCl7dmFyIG4saSxvO2lmKDM5IT09KG49ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlyZXR1cm4hMTtmb3IoZS5raW5kPSJzY2FsYXIiLGUucmVzdWx0PSIiLGUucG9zaXRpb24rKyxpPW89ZS5wb3NpdGlvbjswIT09KG49ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKTspaWYoMzk9PT1uKXtpZihnKGUsaSxlLnBvc2l0aW9uLCEwKSwzOSE9PShuPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKSlyZXR1cm4hMDtpPWUucG9zaXRpb24sZS5wb3NpdGlvbisrLG89ZS5wb3NpdGlvbn1lbHNlIHIobik/KGcoZSxpLG8sITApLEUoZSx4KGUsITEsdCkpLGk9bz1lLnBvc2l0aW9uKTplLnBvc2l0aW9uPT09ZS5saW5lU3RhcnQmJkMoZSk/aChlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTooZS5wb3NpdGlvbisrLG89ZS5wb3NpdGlvbik7aChlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gUyhlLHQpe3ZhciBuLGksbyxhLGMsbDtpZigzNCE9PShsPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpcmV0dXJuITE7Zm9yKGUua2luZD0ic2NhbGFyIixlLnJlc3VsdD0iIixlLnBvc2l0aW9uKyssbj1pPWUucG9zaXRpb247MCE9PShsPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSk7KXtpZigzND09PWwpcmV0dXJuIGcoZSxuLGUucG9zaXRpb24sITApLGUucG9zaXRpb24rKywhMDtpZig5Mj09PWwpe2lmKGcoZSxuLGUucG9zaXRpb24sITApLGw9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikscihsKSl4KGUsITEsdCk7ZWxzZSBpZihsPDI1NiYmaWVbbF0pZS5yZXN1bHQrPW9lW2xdLGUucG9zaXRpb24rKztlbHNlIGlmKChjPXUobCkpPjApe2ZvcihvPWMsYT0wO28+MDtvLS0pbD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSwoYz1zKGwpKT49MD9hPShhPDw0KStjOmgoZSwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7ZS5yZXN1bHQrPXAoYSksZS5wb3NpdGlvbisrfWVsc2UgaChlLCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO249aT1lLnBvc2l0aW9ufWVsc2UgcihsKT8oZyhlLG4saSwhMCksRShlLHgoZSwhMSx0KSksbj1pPWUucG9zaXRpb24pOmUucG9zaXRpb249PT1lLmxpbmVTdGFydCYmQyhlKT9oKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOihlLnBvc2l0aW9uKyssaT1lLnBvc2l0aW9uKX1oKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBrKGUsdCl7dmFyIG4scixpLGEscyx1LGMsbCxwLGYsZCxtPSEwLGc9ZS50YWcseT1lLmFuY2hvcixiPXt9O2lmKDkxPT09KGQ9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlhPTkzLGM9ITEscj1bXTtlbHNle2lmKDEyMyE9PWQpcmV0dXJuITE7YT0xMjUsYz0hMCxyPXt9fWZvcihudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ciksZD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTswIT09ZDspe2lmKHgoZSwhMCx0KSwoZD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpPT09YSlyZXR1cm4gZS5wb3NpdGlvbisrLGUudGFnPWcsZS5hbmNob3I9eSxlLmtpbmQ9Yz8ibWFwcGluZyI6InNlcXVlbmNlIixlLnJlc3VsdD1yLCEwO218fGgoZSwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSxwPWw9Zj1udWxsLHM9dT0hMSw2Mz09PWQmJihpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpLG8oaSkmJihzPXU9ITAsZS5wb3NpdGlvbisrLHgoZSwhMCx0KSkpLG49ZS5saW5lLEkoZSx0LEgsITEsITApLHA9ZS50YWcsbD1lLnJlc3VsdCx4KGUsITAsdCksZD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksIXUmJmUubGluZSE9PW58fDU4IT09ZHx8KHM9ITAsZD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSx4KGUsITAsdCksSShlLHQsSCwhMSwhMCksZj1lLnJlc3VsdCksYz92KGUscixiLHAsbCxmKTpzP3IucHVzaCh2KGUsbnVsbCxiLHAsbCxmKSk6ci5wdXNoKGwpLHgoZSwhMCx0KSxkPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSw0ND09PWQ/KG09ITAsZD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSk6bT0hMX1oKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uIil9ZnVuY3Rpb24gQShlLHQpe3ZhciBuLG8sYSxzLHU9SixsPSExLHA9ITEsZj10LGQ9MCxtPSExO2lmKDEyND09PShzPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpbz0hMTtlbHNle2lmKDYyIT09cylyZXR1cm4hMTtvPSEwfWZvcihlLmtpbmQ9InNjYWxhciIsZS5yZXN1bHQ9IiI7MCE9PXM7KWlmKDQzPT09KHM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpfHw0NT09PXMpSj09PXU/dT00Mz09PXM/WDpZOmgoZSwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZXtpZighKChhPWMocykpPj0wKSlicmVhazswPT09YT9oKGUsImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpwP2goZSwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTooZj10K2EtMSxwPSEwKX1pZihpKHMpKXtkb3tzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXdoaWxlKGkocykpO2lmKDM1PT09cylkb3tzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXdoaWxlKCFyKHMpJiYwIT09cyl9Zm9yKDswIT09czspe2ZvcihiKGUpLGUubGluZUluZGVudD0wLHM9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pOyghcHx8ZS5saW5lSW5kZW50PGYpJiYzMj09PXM7KWUubGluZUluZGVudCsrLHM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYoIXAmJmUubGluZUluZGVudD5mJiYoZj1lLmxpbmVJbmRlbnQpLHIocykpZCsrO2Vsc2V7aWYoZS5saW5lSW5kZW50PGYpe3U9PT1YP2UucmVzdWx0Kz0kLnJlcGVhdCgiXG4iLGw/MStkOmQpOnU9PT1KJiZsJiYoZS5yZXN1bHQrPSJcbiIpO2JyZWFrfWZvcihvP2kocyk/KG09ITAsZS5yZXN1bHQrPSQucmVwZWF0KCJcbiIsbD8xK2Q6ZCkpOm0/KG09ITEsZS5yZXN1bHQrPSQucmVwZWF0KCJcbiIsZCsxKSk6MD09PWQ/bCYmKGUucmVzdWx0Kz0iICIpOmUucmVzdWx0Kz0kLnJlcGVhdCgiXG4iLGQpOmUucmVzdWx0Kz0kLnJlcGVhdCgiXG4iLGw/MStkOmQpLGw9ITAscD0hMCxkPTAsbj1lLnBvc2l0aW9uOyFyKHMpJiYwIT09czspcz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtnKGUsbixlLnBvc2l0aW9uLCExKX19cmV0dXJuITB9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuLHIsaSxhPWUudGFnLHM9ZS5hbmNob3IsdT1bXSxjPSExO2ZvcihudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09dSksaT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7MCE9PWkmJjQ1PT09aSYmKHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSksbyhyKSk7KWlmKGM9ITAsZS5wb3NpdGlvbisrLHgoZSwhMCwtMSkmJmUubGluZUluZGVudDw9dCl1LnB1c2gobnVsbCksaT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7ZWxzZSBpZihuPWUubGluZSxJKGUsdCxRLCExLCEwKSx1LnB1c2goZS5yZXN1bHQpLHgoZSwhMCwtMSksaT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksKGUubGluZT09PW58fGUubGluZUluZGVudD50KSYmMCE9PWkpaChlLCJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeSIpO2Vsc2UgaWYoZS5saW5lSW5kZW50PHQpYnJlYWs7cmV0dXJuISFjJiYoZS50YWc9YSxlLmFuY2hvcj1zLGUua2luZD0ic2VxdWVuY2UiLGUucmVzdWx0PXUsITApfWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciByLGEscyx1LGMsbD1lLnRhZyxwPWUuYW5jaG9yLGY9e30sZD17fSxtPW51bGwsZz1udWxsLHk9bnVsbCxiPSExLEM9ITE7Zm9yKG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1mKSxjPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTswIT09Yzspe2lmKHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSkscz1lLmxpbmUsdT1lLnBvc2l0aW9uLDYzIT09YyYmNTghPT1jfHwhbyhyKSl7aWYoIUkoZSxuLFcsITEsITApKWJyZWFrO2lmKGUubGluZT09PXMpe2ZvcihjPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtpKGMpOyljPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKDU4PT09YyljPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLG8oYyl8fGgoZSwiYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nIiksYiYmKHYoZSxmLGQsbSxnLG51bGwpLG09Zz15PW51bGwpLEM9ITAsYj0hMSxhPSExLG09ZS50YWcsZz1lLnJlc3VsdDtlbHNle2lmKCFDKXJldHVybiBlLnRhZz1sLGUuYW5jaG9yPXAsITA7aChlLCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCIpfX1lbHNle2lmKCFDKXJldHVybiBlLnRhZz1sLGUuYW5jaG9yPXAsITA7aChlLCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKX19ZWxzZSA2Mz09PWM/KGImJih2KGUsZixkLG0sZyxudWxsKSxtPWc9eT1udWxsKSxDPSEwLGI9ITAsYT0hMCk6Yj8oYj0hMSxhPSEwKTpoKGUsImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmUiKSxlLnBvc2l0aW9uKz0xLGM9cjtpZigoZS5saW5lPT09c3x8ZS5saW5lSW5kZW50PnQpJiYoSShlLHQsSywhMCxhKSYmKGI/Zz1lLnJlc3VsdDp5PWUucmVzdWx0KSxifHwodihlLGYsZCxtLGcseSxzLHUpLG09Zz15PW51bGwpLHgoZSwhMCwtMSksYz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpLGUubGluZUluZGVudD50JiYwIT09YyloKGUsImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKGUubGluZUluZGVudDx0KWJyZWFrfXJldHVybiBiJiZ2KGUsZixkLG0sZyxudWxsKSxDJiYoZS50YWc9bCxlLmFuY2hvcj1wLGUua2luZD0ibWFwcGluZyIsZS5yZXN1bHQ9ZiksQ31mdW5jdGlvbiBPKGUpe3ZhciB0LG4scixpLGE9ITEscz0hMTtpZigzMyE9PShpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpcmV0dXJuITE7aWYobnVsbCE9PWUudGFnJiZoKGUsImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5IiksaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSw2MD09PWk/KGE9ITAsaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSk6MzM9PT1pPyhzPSEwLG49IiEhIixpPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTpuPSIhIix0PWUucG9zaXRpb24sYSl7ZG97aT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX13aGlsZSgwIT09aSYmNjIhPT1pKTtlLnBvc2l0aW9uPGUubGVuZ3RoPyhyPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSxpPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTpoKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoOzAhPT1pJiYhbyhpKTspMzM9PT1pJiYocz9oKGUsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKToobj1lLmlucHV0LnNsaWNlKHQtMSxlLnBvc2l0aW9uKzEpLG5lLnRlc3Qobil8fGgoZSwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxzPSEwLHQ9ZS5wb3NpdGlvbisxKSksaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtyPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSx0ZS50ZXN0KHIpJiZoKGUsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpfXJldHVybiByJiYhcmUudGVzdChyKSYmaChlLCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrciksYT9lLnRhZz1yOnEuY2FsbChlLnRhZ01hcCxuKT9lLnRhZz1lLnRhZ01hcFtuXStyOiIhIj09PW4/ZS50YWc9IiEiK3I6IiEhIj09PW4/ZS50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrcjpoKGUsJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJytuKyciJyksITB9ZnVuY3Rpb24gRihlKXt2YXIgdCxuO2lmKDM4IT09KG49ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlyZXR1cm4hMTtmb3IobnVsbCE9PWUuYW5jaG9yJiZoKGUsImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpLG49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksdD1lLnBvc2l0aW9uOzAhPT1uJiYhbyhuKSYmIWEobik7KW49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7cmV0dXJuIGUucG9zaXRpb249PT10JiZoKGUsIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxlLmFuY2hvcj1lLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbiksITB9ZnVuY3Rpb24gTihlKXt2YXIgdCxuLHI7aWYoNDIhPT0ocj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKXJldHVybiExO2ZvcihyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHQ9ZS5wb3NpdGlvbjswIT09ciYmIW8ocikmJiFhKHIpOylyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO3JldHVybiBlLnBvc2l0aW9uPT09dCYmaChlLCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxuPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSxlLmFuY2hvck1hcC5oYXNPd25Qcm9wZXJ0eShuKXx8aChlLCd1bmlkZW50aWZpZWQgYWxpYXMgIicrbisnIicpLGUucmVzdWx0PWUuYW5jaG9yTWFwW25dLHgoZSwhMCwtMSksITB9ZnVuY3Rpb24gSShlLHQsbixyLGkpe3ZhciBvLGEscyx1LGMsbCxwLGYsZD0xLG09ITEsZz0hMTtpZihudWxsIT09ZS5saXN0ZW5lciYmZS5saXN0ZW5lcigib3BlbiIsZSksZS50YWc9bnVsbCxlLmFuY2hvcj1udWxsLGUua2luZD1udWxsLGUucmVzdWx0PW51bGwsbz1hPXM9Sz09PW58fFE9PT1uLHImJngoZSwhMCwtMSkmJihtPSEwLGUubGluZUluZGVudD50P2Q9MTplLmxpbmVJbmRlbnQ9PT10P2Q9MDplLmxpbmVJbmRlbnQ8dCYmKGQ9LTEpKSwxPT09ZClmb3IoO08oZSl8fEYoZSk7KXgoZSwhMCwtMSk/KG09ITAscz1vLGUubGluZUluZGVudD50P2Q9MTplLmxpbmVJbmRlbnQ9PT10P2Q9MDplLmxpbmVJbmRlbnQ8dCYmKGQ9LTEpKTpzPSExO2lmKHMmJihzPW18fGkpLDEhPT1kJiZLIT09bnx8KHA9SD09PW58fFc9PT1uP3Q6dCsxLGY9ZS5wb3NpdGlvbi1lLmxpbmVTdGFydCwxPT09ZD9zJiYoXyhlLGYpfHxUKGUsZixwKSl8fGsoZSxwKT9nPSEwOihhJiZBKGUscCl8fHcoZSxwKXx8UyhlLHApP2c9ITA6TihlKT8oZz0hMCxudWxsPT09ZS50YWcmJm51bGw9PT1lLmFuY2hvcnx8aChlLCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpEKGUscCxIPT09bikmJihnPSEwLG51bGw9PT1lLnRhZyYmKGUudGFnPSI/IikpLG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1lLnJlc3VsdCkpOjA9PT1kJiYoZz1zJiZfKGUsZikpKSxudWxsIT09ZS50YWcmJiIhIiE9PWUudGFnKWlmKCI/Ij09PWUudGFnKXtmb3IodT0wLGM9ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDt1PGM7dSs9MSlpZihsPWUuaW1wbGljaXRUeXBlc1t1XSxsLnJlc29sdmUoZS5yZXN1bHQpKXtlLnJlc3VsdD1sLmNvbnN0cnVjdChlLnJlc3VsdCksZS50YWc9bC50YWcsbnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPWUucmVzdWx0KTticmVha319ZWxzZSBxLmNhbGwoZS50eXBlTWFwW2Uua2luZHx8ImZhbGxiYWNrIl0sZS50YWcpPyhsPWUudHlwZU1hcFtlLmtpbmR8fCJmYWxsYmFjayJdW2UudGFnXSxudWxsIT09ZS5yZXN1bHQmJmwua2luZCE9PWUua2luZCYmaChlLCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCIrZS50YWcrJz4gdGFnOyBpdCBzaG91bGQgYmUgIicrbC5raW5kKyciLCBub3QgIicrZS5raW5kKyciJyksbC5yZXNvbHZlKGUucmVzdWx0KT8oZS5yZXN1bHQ9bC5jb25zdHJ1Y3QoZS5yZXN1bHQpLG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1lLnJlc3VsdCkpOmgoZSwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK2UudGFnKyI+IGV4cGxpY2l0IHRhZyIpKTpoKGUsInVua25vd24gdGFnICE8IitlLnRhZysiPiIpO3JldHVybiBudWxsIT09ZS5saXN0ZW5lciYmZS5saXN0ZW5lcigiY2xvc2UiLGUpLG51bGwhPT1lLnRhZ3x8bnVsbCE9PWUuYW5jaG9yfHxnfWZ1bmN0aW9uIEwoZSl7dmFyIHQsbixhLHMsdT1lLnBvc2l0aW9uLGM9ITE7Zm9yKGUudmVyc2lvbj1udWxsLGUuY2hlY2tMaW5lQnJlYWtzPWUubGVnYWN5LGUudGFnTWFwPXt9LGUuYW5jaG9yTWFwPXt9OzAhPT0ocz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpJiYoeChlLCEwLC0xKSxzPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwhKGUubGluZUluZGVudD4wfHwzNyE9PXMpKTspe2ZvcihjPSEwLHM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksdD1lLnBvc2l0aW9uOzAhPT1zJiYhbyhzKTspcz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtmb3Iobj1lLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbiksYT1bXSxuLmxlbmd0aDwxJiZoKGUsImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpOzAhPT1zOyl7Zm9yKDtpKHMpOylzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKDM1PT09cyl7ZG97cz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX13aGlsZSgwIT09cyYmIXIocykpO2JyZWFrfWlmKHIocykpYnJlYWs7Zm9yKHQ9ZS5wb3NpdGlvbjswIT09cyYmIW8ocyk7KXM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7YS5wdXNoKGUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSl9MCE9PXMmJmIoZSkscS5jYWxsKHNlLG4pP3NlW25dKGUsbixhKTptKGUsJ3Vua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlICInK24rJyInKX1pZih4KGUsITAsLTEpLDA9PT1lLmxpbmVJbmRlbnQmJjQ1PT09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pJiY0NT09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpJiY0NT09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzIpPyhlLnBvc2l0aW9uKz0zLHgoZSwhMCwtMSkpOmMmJmgoZSwiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpLEkoZSxlLmxpbmVJbmRlbnQtMSxLLCExLCEwKSx4KGUsITAsLTEpLGUuY2hlY2tMaW5lQnJlYWtzJiZlZS50ZXN0KGUuaW5wdXQuc2xpY2UodSxlLnBvc2l0aW9uKSkmJm0oZSwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksZS5kb2N1bWVudHMucHVzaChlLnJlc3VsdCksZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZDKGUpKXJldHVybiB2b2lkKDQ2PT09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pJiYoZS5wb3NpdGlvbis9Myx4KGUsITAsLTEpKSk7ZS5wb3NpdGlvbjxlLmxlbmd0aC0xJiZoKGUsImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIil9ZnVuY3Rpb24gUChlLHQpe2U9U3RyaW5nKGUpLHQ9dHx8e30sMCE9PWUubGVuZ3RoJiYoMTAhPT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkmJjEzIT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpJiYoZSs9IlxuIiksNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpKTt2YXIgbj1uZXcgZihlLHQpO2ZvcihuLmlucHV0Kz0iXDAiOzMyPT09bi5pbnB1dC5jaGFyQ29kZUF0KG4ucG9zaXRpb24pOyluLmxpbmVJbmRlbnQrPTEsbi5wb3NpdGlvbis9MTtmb3IoO24ucG9zaXRpb248bi5sZW5ndGgtMTspTChuKTtyZXR1cm4gbi5kb2N1bWVudHN9ZnVuY3Rpb24gTShlLHQsbil7dmFyIHIsaSxvPVAoZSxuKTtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQpcmV0dXJuIG87Zm9yKHI9MCxpPW8ubGVuZ3RoO3I8aTtyKz0xKXQob1tyXSl9ZnVuY3Rpb24gaihlLHQpe3ZhciBuPVAoZSx0KTtpZigwIT09bi5sZW5ndGgpe2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gblswXTt0aHJvdyBuZXcgVSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19ZnVuY3Rpb24gUihlLHQsbil7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0KXJldHVybiBNKGUsJC5leHRlbmQoe3NjaGVtYTpHfSxuKSk7TShlLHQsJC5leHRlbmQoe3NjaGVtYTpHfSxuKSl9ZnVuY3Rpb24gQihlLHQpe3JldHVybiBqKGUsJC5leHRlbmQoe3NjaGVtYTpHfSx0KSl9Zm9yKHZhciAkPW4oNTIpLFU9big3Miksej1uKDcyNSksRz1uKDczKSxWPW4oOTgpLHE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxIPTEsVz0yLFE9MyxLPTQsSj0xLFk9MixYPTMsWj0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLGVlPS9bXHg4NVx1MjAyOFx1MjAyOV0vLHRlPS9bLFxbXF1ce1x9XS8sbmU9L14oPzohfCEhfCFbYS16XC1dKyEpJC9pLHJlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2ksaWU9bmV3IEFycmF5KDI1Niksb2U9bmV3IEFycmF5KDI1NiksYWU9MDthZTwyNTY7YWUrKylpZVthZV09bChhZSk/MTowLG9lW2FlXT1sKGFlKTt2YXIgc2U9e1lBTUw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbztudWxsIT09ZS52ZXJzaW9uJiZoKGUsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLDEhPT1uLmxlbmd0aCYmaChlLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iikscj0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoblswXSksbnVsbD09PXImJmgoZSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxpPXBhcnNlSW50KHJbMV0sMTApLG89cGFyc2VJbnQoclsyXSwxMCksMSE9PWkmJmgoZSwidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxlLnZlcnNpb249blswXSxlLmNoZWNrTGluZUJyZWFrcz1vPDIsMSE9PW8mJjIhPT1vJiZtKGUsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpOzIhPT1uLmxlbmd0aCYmaChlLCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzIikscj1uWzBdLGk9blsxXSxuZS50ZXN0KHIpfHxoKGUsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIikscS5jYWxsKGUudGFnTWFwLHIpJiZoKGUsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK3IrJyIgdGFnIGhhbmRsZScpLHJlLnRlc3QoaSl8fGgoZSwiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksZS50YWdNYXBbcl09aX19O2UuZXhwb3J0cy5sb2FkQWxsPU0sZS5leHBvcnRzLmxvYWQ9aixlLmV4cG9ydHMuc2FmZUxvYWRBbGw9UixlLmV4cG9ydHMuc2FmZUxvYWQ9Qn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsaSl7dGhpcy5uYW1lPWUsdGhpcy5idWZmZXI9dCx0aGlzLnBvc2l0aW9uPW4sdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49aX12YXIgaT1uKDUyKTtyLnByb3RvdHlwZS5nZXRTbmlwcGV0PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGEscztpZighdGhpcy5idWZmZXIpcmV0dXJuIG51bGw7Zm9yKGU9ZXx8NCx0PXR8fDc1LG49IiIscj10aGlzLnBvc2l0aW9uO3I+MCYmLTE9PT0iXDBcclxuXHg4NVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoci0xKSk7KWlmKHItPTEsdGhpcy5wb3NpdGlvbi1yPnQvMi0xKXtuPSIgLi4uICIscis9NTticmVha31mb3Iobz0iIixhPXRoaXMucG9zaXRpb247YTx0aGlzLmJ1ZmZlci5sZW5ndGgmJi0xPT09IlwwXHJcblx4ODVcdTIwMjhcdTIwMjkiLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KGEpKTspaWYoKGErPTEpLXRoaXMucG9zaXRpb24+dC8yLTEpe289IiAuLi4gIixhLT01O2JyZWFrfXJldHVybiBzPXRoaXMuYnVmZmVyLnNsaWNlKHIsYSksaS5yZXBlYXQoIiAiLGUpK24rcytvKyJcbiIraS5yZXBlYXQoIiAiLGUrdGhpcy5wb3NpdGlvbi1yK24ubGVuZ3RoKSsiXiJ9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0LG49IiI7cmV0dXJuIHRoaXMubmFtZSYmKG4rPSdpbiAiJyt0aGlzLm5hbWUrJyIgJyksbis9ImF0IGxpbmUgIisodGhpcy5saW5lKzEpKyIsIGNvbHVtbiAiKyh0aGlzLmNvbHVtbisxKSxlfHwodD10aGlzLmdldFNuaXBwZXQoKSkmJihuKz0iOlxuIit0KSxufSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE1KTtlLmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIse2tpbmQ6InNjYWxhciIsY29uc3RydWN0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZT9lOiIifX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTUpO2UuZXhwb3J0cz1uZXcgcigidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZTpbXX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE1KTtlLmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZTp7fX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciB0PWUubGVuZ3RoO3JldHVybiAxPT09dCYmIn4iPT09ZXx8ND09PXQmJigibnVsbCI9PT1lfHwiTnVsbCI9PT1lfHwiTlVMTCI9PT1lKX1mdW5jdGlvbiBpKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbD09PWV9dmFyIGE9bigxNSk7ZS5leHBvcnRzPW5ldyBhKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0OmkscHJlZGljYXRlOm8scmVwcmVzZW50OntjYW5vbmljYWw6ZnVuY3Rpb24oKXtyZXR1cm4ifiJ9LGxvd2VyY2FzZTpmdW5jdGlvbigpe3JldHVybiJudWxsIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk5VTEwifSxjYW1lbGNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTnVsbCJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiExO3ZhciB0PWUubGVuZ3RoO3JldHVybiA0PT09dCYmKCJ0cnVlIj09PWV8fCJUcnVlIj09PWV8fCJUUlVFIj09PWUpfHw1PT09dCYmKCJmYWxzZSI9PT1lfHwiRmFsc2UiPT09ZXx8IkZBTFNFIj09PWUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuInRydWUiPT09ZXx8IlRydWUiPT09ZXx8IlRSVUUiPT09ZX1mdW5jdGlvbiBvKGUpe3JldHVybiJbb2JqZWN0IEJvb2xlYW5dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX12YXIgYT1uKDE1KTtlLmV4cG9ydHM9bmV3IGEoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aSxwcmVkaWNhdGU6byxyZXByZXNlbnQ6e2xvd2VyY2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZT8idHJ1ZSI6ImZhbHNlIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJUUlVFIjoiRkFMU0UifSxjYW1lbGNhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/IlRydWUiOiJGYWxzZSJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiA0ODw9ZSYmZTw9NTd8fDY1PD1lJiZlPD03MHx8OTc8PWUmJmU8PTEwMn1mdW5jdGlvbiBpKGUpe3JldHVybiA0ODw9ZSYmZTw9NTV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gNDg8PWUmJmU8PTU3fWZ1bmN0aW9uIGEoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQsbj1lLmxlbmd0aCxhPTAscz0hMTtpZighbilyZXR1cm4hMTtpZih0PWVbYV0sIi0iIT09dCYmIisiIT09dHx8KHQ9ZVsrK2FdKSwiMCI9PT10KXtpZihhKzE9PT1uKXJldHVybiEwO2lmKCJiIj09PSh0PWVbKythXSkpe2ZvcihhKys7YTxuO2ErKylpZigiXyIhPT0odD1lW2FdKSl7aWYoIjAiIT09dCYmIjEiIT09dClyZXR1cm4hMTtzPSEwfXJldHVybiBzJiYiXyIhPT10fWlmKCJ4Ij09PXQpe2ZvcihhKys7YTxuO2ErKylpZigiXyIhPT0odD1lW2FdKSl7aWYoIXIoZS5jaGFyQ29kZUF0KGEpKSlyZXR1cm4hMTtzPSEwfXJldHVybiBzJiYiXyIhPT10fWZvcig7YTxuO2ErKylpZigiXyIhPT0odD1lW2FdKSl7aWYoIWkoZS5jaGFyQ29kZUF0KGEpKSlyZXR1cm4hMTtzPSEwfXJldHVybiBzJiYiXyIhPT10fWlmKCJfIj09PXQpcmV0dXJuITE7Zm9yKDthPG47YSsrKWlmKCJfIiE9PSh0PWVbYV0pKXtpZigiOiI9PT10KWJyZWFrO2lmKCFvKGUuY2hhckNvZGVBdChhKSkpcmV0dXJuITE7cz0hMH1yZXR1cm4hKCFzfHwiXyI9PT10KSYmKCI6IiE9PXR8fC9eKDpbMC01XT9bMC05XSkrJC8udGVzdChlLnNsaWNlKGEpKSl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuLHI9ZSxpPTEsbz1bXTtyZXR1cm4tMSE9PXIuaW5kZXhPZigiXyIpJiYocj1yLnJlcGxhY2UoL18vZywiIikpLHQ9clswXSwiLSIhPT10JiYiKyIhPT10fHwoIi0iPT09dCYmKGk9LTEpLHI9ci5zbGljZSgxKSx0PXJbMF0pLCIwIj09PXI/MDoiMCI9PT10PyJiIj09PXJbMV0/aSpwYXJzZUludChyLnNsaWNlKDIpLDIpOiJ4Ij09PXJbMV0/aSpwYXJzZUludChyLDE2KTppKnBhcnNlSW50KHIsOCk6LTEhPT1yLmluZGV4T2YoIjoiKT8oci5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24oZSl7by51bnNoaWZ0KHBhcnNlSW50KGUsMTApKX0pLHI9MCxuPTEsby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IrPWUqbixuKj02MH0pLGkqcik6aSpwYXJzZUludChyLDEwKX1mdW5jdGlvbiB1KGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpJiZlJTE9PT0wJiYhYy5pc05lZ2F0aXZlWmVybyhlKX12YXIgYz1uKDUyKSxsPW4oMTUpO2UuZXhwb3J0cz1uZXcgbCgidGFnOnlhbWwub3JnLDIwMDI6aW50Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmEsY29uc3RydWN0OnMscHJlZGljYXRlOnUscmVwcmVzZW50OntiaW5hcnk6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTA/IjBiIitlLnRvU3RyaW5nKDIpOiItMGIiK2UudG9TdHJpbmcoMikuc2xpY2UoMSl9LG9jdGFsOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wPyIwIitlLnRvU3RyaW5nKDgpOiItMCIrZS50b1N0cmluZyg4KS5zbGljZSgxKX0sZGVjaW1hbDpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wPyIweCIrZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4IitlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGwhPT1lJiYhKCFjLnRlc3QoZSl8fCJfIj09PWVbZS5sZW5ndGgtMV0pfWZ1bmN0aW9uIGkoZSl7dmFyIHQsbixyLGk7cmV0dXJuIHQ9ZS5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksbj0iLSI9PT10WzBdPy0xOjEsaT1bXSwiKy0iLmluZGV4T2YodFswXSk+PTAmJih0PXQuc2xpY2UoMSkpLCIuaW5mIj09PXQ/MT09PW4/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk51bWJlci5ORUdBVElWRV9JTkZJTklUWToiLm5hbiI9PT10P05hTjp0LmluZGV4T2YoIjoiKT49MD8odC5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24oZSl7aS51bnNoaWZ0KHBhcnNlRmxvYXQoZSwxMCkpfSksdD0wLHI9MSxpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9ZSpyLHIqPTYwfSksbip0KTpuKnBhcnNlRmxvYXQodCwxMCl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuO2lmKGlzTmFOKGUpKXN3aXRjaCh0KXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWUpc3dpdGNoKHQpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09ZSlzd2l0Y2godCl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihzLmlzTmVnYXRpdmVaZXJvKGUpKXJldHVybiItMC4wIjtyZXR1cm4gbj1lLnRvU3RyaW5nKDEwKSxsLnRlc3Qobik/bi5yZXBsYWNlKCJlIiwiLmUiKTpufWZ1bmN0aW9uIGEoZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkmJihlJTEhPT0wfHxzLmlzTmVnYXRpdmVaZXJvKGUpKX12YXIgcz1uKDUyKSx1PW4oMTUpLGM9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86MHxbMS05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qfFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIiksbD0vXlstK10/WzAtOV0rZS87ZS5leHBvcnRzPW5ldyB1KCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDppLHByZWRpY2F0ZTphLHJlcHJlc2VudDpvLGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGwhPT1lJiYobnVsbCE9PXMuZXhlYyhlKXx8bnVsbCE9PXUuZXhlYyhlKSl9ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHIsaSxvLGEsYyxsLHAsZixkPTAsaD1udWxsO2lmKHQ9cy5leGVjKGUpLG51bGw9PT10JiYodD11LmV4ZWMoZSkpLG51bGw9PT10KXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYobj0rdFsxXSxyPSt0WzJdLTEsaT0rdFszXSwhdFs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobixyLGkpKTtpZihvPSt0WzRdLGE9K3RbNV0sYz0rdFs2XSx0WzddKXtmb3IoZD10WzddLnNsaWNlKDAsMyk7ZC5sZW5ndGg8MzspZCs9IjAiO2Q9K2R9cmV0dXJuIHRbOV0mJihsPSt0WzEwXSxwPSsodFsxMV18fDApLGg9NmU0Kig2MCpsK3ApLCItIj09PXRbOV0mJihoPS1oKSksZj1uZXcgRGF0ZShEYXRlLlVUQyhuLHIsaSxvLGEsYyxkKSksaCYmZi5zZXRUaW1lKGYuZ2V0VGltZSgpLWgpLGZ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBhPW4oMTUpLHM9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSx1PW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8kIik7ZS5leHBvcnRzPW5ldyBhKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aSxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50Om99KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiI8PCI9PT1lfHxudWxsPT09ZX12YXIgaT1uKDE1KTtlLmV4cG9ydHM9bmV3IGkoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnJ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiExO3ZhciB0LG4scj0wLGk9ZS5sZW5ndGgsbz1jO2ZvcihuPTA7bjxpO24rKylpZighKCh0PW8uaW5kZXhPZihlLmNoYXJBdChuKSkpPjY0KSl7aWYodDwwKXJldHVybiExO3IrPTZ9cmV0dXJuIHIlOD09PTB9ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHI9ZS5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLGk9ci5sZW5ndGgsbz1jLGE9MCx1PVtdO2Zvcih0PTA7dDxpO3QrKyl0JTQ9PT0wJiZ0JiYodS5wdXNoKGE+PjE2JjI1NSksdS5wdXNoKGE+PjgmMjU1KSx1LnB1c2goMjU1JmEpKSxhPWE8PDZ8by5pbmRleE9mKHIuY2hhckF0KHQpKTtyZXR1cm4gbj1pJTQqNiwwPT09bj8odS5wdXNoKGE+PjE2JjI1NSksdS5wdXNoKGE+PjgmMjU1KSx1LnB1c2goMjU1JmEpKToxOD09PW4/KHUucHVzaChhPj4xMCYyNTUpLHUucHVzaChhPj4yJjI1NSkpOjEyPT09biYmdS5wdXNoKGE+PjQmMjU1KSxzP3MuZnJvbT9zLmZyb20odSk6bmV3IHModSk6dX1mdW5jdGlvbiBvKGUpe3ZhciB0LG4scj0iIixpPTAsbz1lLmxlbmd0aCxhPWM7Zm9yKHQ9MDt0PG87dCsrKXQlMz09PTAmJnQmJihyKz1hW2k+PjE4JjYzXSxyKz1hW2k+PjEyJjYzXSxyKz1hW2k+PjYmNjNdLHIrPWFbNjMmaV0pLGk9KGk8PDgpK2VbdF07cmV0dXJuIG49byUzLDA9PT1uPyhyKz1hW2k+PjE4JjYzXSxyKz1hW2k+PjEyJjYzXSxyKz1hW2k+PjYmNjNdLHIrPWFbNjMmaV0pOjI9PT1uPyhyKz1hW2k+PjEwJjYzXSxyKz1hW2k+PjQmNjNdLHIrPWFbaTw8MiY2M10scis9YVs2NF0pOjE9PT1uJiYocis9YVtpPj4yJjYzXSxyKz1hW2k8PDQmNjNdLHIrPWFbNjRdLHIrPWFbNjRdKSxyfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIHMmJnMuaXNCdWZmZXIoZSl9dmFyIHM7dHJ5e3M9big3MzYpLkJ1ZmZlcn1jYXRjaChlKXt9dmFyIHU9bigxNSksYz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cblxyIjtlLmV4cG9ydHM9bmV3IHUoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDppLHByZWRpY2F0ZTphLHJlcHJlc2VudDpvfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gby5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBpKGUsdCl7aWYocigpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIG8uVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSxlLl9fcHJvdG9fXz1vLnByb3RvdHlwZSk6KG51bGw9PT1lJiYoZT1uZXcgbyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBvKGUsdCxuKXtpZighby5UWVBFRF9BUlJBWV9TVVBQT1JUJiYhKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSx0LG4pO2lmKCJudW1iZXIiPT09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBjKHRoaXMsZSl9cmV0dXJuIGEodGhpcyxlLHQsbil9ZnVuY3Rpb24gYShlLHQsbixyKXtpZigibnVtYmVyIj09PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2YoZSx0LG4scik6InN0cmluZyI9PT10eXBlb2YgdD9sKGUsdCxuKTpkKGUsdCl9ZnVuY3Rpb24gcyhlKXtpZigibnVtYmVyIiE9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB1KGUsdCxuLHIpe3JldHVybiBzKHQpLHQ8PTA/aShlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PT10eXBlb2Ygcj9pKGUsdCkuZmlsbChuLHIpOmkoZSx0KS5maWxsKG4pOmkoZSx0KX1mdW5jdGlvbiBjKGUsdCl7aWYocyh0KSxlPWkoZSx0PDA/MDowfGgodCkpLCFvLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjx0OysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gbChlLHQsbil7aWYoInN0cmluZyI9PT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpLCFvLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIHI9MHxnKHQsbik7ZT1pKGUscik7dmFyIGE9ZS53cml0ZSh0LG4pO3JldHVybiBhIT09ciYmKGU9ZS5zbGljZSgwLGEpKSxlfWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxoKHQubGVuZ3RoKTtlPWkoZSxuKTtmb3IodmFyIHI9MDtyPG47cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIGYoZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gdD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4sciksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQsZS5fX3Byb3RvX189by5wcm90b3R5cGUpOmU9cChlLHQpLGV9ZnVuY3Rpb24gZChlLHQpe2lmKG8uaXNCdWZmZXIodCkpe3ZhciBuPTB8aCh0Lmxlbmd0aCk7cmV0dXJuIGU9aShlLG4pLDA9PT1lLmxlbmd0aD9lOih0LmNvcHkoZSwwLDAsbiksZSl9aWYodCl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9PXR5cGVvZiB0Lmxlbmd0aHx8Syh0Lmxlbmd0aCk/aShlLDApOnAoZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmWCh0LmRhdGEpKXJldHVybiBwKGUsdC5kYXRhKX10aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9ZnVuY3Rpb24gaChlKXtpZihlPj1yKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3IoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gbShlKXtyZXR1cm4rZSE9ZSYmKGU9MCksby5hbGxvYygrZSl9ZnVuY3Rpb24gZyhlLHQpe2lmKG8uaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT09dHlwZW9mIGUmJihlPSIiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgcj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFYoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBXKGUpLmxlbmd0aDtkZWZhdWx0OmlmKHIpcmV0dXJuIFYoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24geShlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZihuPj4+PTAsdD4+Pj0wLG48PXQpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBOKHRoaXMsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBfKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gTyh0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRih0aGlzLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBBKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEkodGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gdihlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIGIoZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PT10eXBlb2Ygbj8ocj1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49aT8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighaSlyZXR1cm4tMTtuPTB9aWYoInN0cmluZyI9PT10eXBlb2YgdCYmKHQ9by5mcm9tKHQscikpLG8uaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp4KGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LG8uVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTp4KGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB4KGUsdCxuLHIsaSl7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9dmFyIGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLG4vPTJ9dmFyIGM7aWYoaSl7dmFyIGw9LTE7Zm9yKGM9bjtjPHM7YysrKWlmKG8oZSxjKT09PW8odCwtMT09PWw/MDpjLWwpKXtpZigtMT09PWwmJihsPWMpLGMtbCsxPT09dSlyZXR1cm4gbCphfWVsc2UtMSE9PWwmJihjLT1jLWwpLGw9LTF9ZWxzZSBmb3Iobit1PnMmJihuPXMtdSksYz1uO2M+PTA7Yy0tKXtmb3IodmFyIHA9ITAsZj0wO2Y8dTtmKyspaWYobyhlLGMrZikhPT1vKHQsZikpe3A9ITE7YnJlYWt9aWYocClyZXR1cm4gY31yZXR1cm4tMX1mdW5jdGlvbiBDKGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBpPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPmkmJihyPWkpOnI9aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgYT0wO2E8cjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtuK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gRShlLHQsbixyKXtyZXR1cm4gUShWKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIEQoZSx0LG4scil7cmV0dXJuIFEocSh0KSxlLG4scil9ZnVuY3Rpb24gdyhlLHQsbixyKXtyZXR1cm4gRChlLHQsbixyKX1mdW5jdGlvbiBTKGUsdCxuLHIpe3JldHVybiBRKFcodCksZSxuLHIpfWZ1bmN0aW9uIGsoZSx0LG4scil7cmV0dXJuIFEoSCh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBBKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9KLmZyb21CeXRlQXJyYXkoZSk6Si5mcm9tQnl0ZUFycmF5KGUuc2xpY2UodCxuKSl9ZnVuY3Rpb24gXyhlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10saT10O2k8bjspe3ZhciBvPWVbaV0sYT1udWxsLHM9bz4yMzk/NDpvPjIyMz8zOm8+MTkxPzI6MTtpZihpK3M8PW4pe3ZhciB1LGMsbCxwO3N3aXRjaChzKXtjYXNlIDE6bzwxMjgmJihhPW8pO2JyZWFrO2Nhc2UgMjp1PWVbaSsxXSwxMjg9PT0oMTkyJnUpJiYocD0oMzEmbyk8PDZ8NjMmdSk+MTI3JiYoYT1wKTticmVhaztjYXNlIDM6dT1lW2krMV0sYz1lW2krMl0sMTI4PT09KDE5MiZ1KSYmMTI4PT09KDE5MiZjKSYmKHA9KDE1Jm8pPDwxMnwoNjMmdSk8PDZ8NjMmYyk+MjA0NyYmKHA8NTUyOTZ8fHA+NTczNDMpJiYoYT1wKTticmVhaztjYXNlIDQ6dT1lW2krMV0sYz1lW2krMl0sbD1lW2krM10sMTI4PT09KDE5MiZ1KSYmMTI4PT09KDE5MiZjKSYmMTI4PT09KDE5MiZsKSYmKHA9KDE1Jm8pPDwxOHwoNjMmdSk8PDEyfCg2MyZjKTw8Nnw2MyZsKT42NTUzNSYmcDwxMTE0MTEyJiYoYT1wKX19bnVsbD09PWE/KGE9NjU1MzMscz0xKTphPjY1NTM1JiYoYS09NjU1MzYsci5wdXNoKGE+Pj4xMCYxMDIzfDU1Mjk2KSxhPTU2MzIwfDEwMjMmYSksci5wdXNoKGEpLGkrPXN9cmV0dXJuIFQocil9ZnVuY3Rpb24gVChlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1aKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTtmb3IodmFyIG49IiIscj0wO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPVopKTtyZXR1cm4gbn1mdW5jdGlvbiBPKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTihlLHQsbil7dmFyIHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7Zm9yKHZhciBpPSIiLG89dDtvPG47KytvKWkrPUcoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gSShlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEwoZSx0LG4pe2lmKGUlMSE9PTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBQKGUsdCxuLHIsaSxhKXtpZighby5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTShlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gaihlLHQsbixyKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sNCk7aTxvOysraSllW24raV09dD4+PjgqKHI/aTozLWkpJjI1NX1mdW5jdGlvbiBSKGUsdCxuLHIsaSxvKXtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQihlLHQsbixyLGkpe3JldHVybiBpfHxSKGUsdCxuLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLFkud3JpdGUoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gJChlLHQsbixyLGkpe3JldHVybiBpfHxSKGUsdCxuLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksWS53cml0ZShlLHQsbixyLDUyLDgpLG4rOH1mdW5jdGlvbiBVKGUpe2lmKGU9eihlKS5yZXBsYWNlKGVlLCIiKSxlLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9PTA7KWUrPSI9IjtyZXR1cm4gZX1mdW5jdGlvbiB6KGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVihlLHQpe3Q9dHx8MS8wO2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9bnVsbCxvPVtdLGE9MDthPHI7KythKXtpZigobj1lLmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGErMT09PXIpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9bjtjb250aW51ZX1uPTY1NTM2KyhpLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBxKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDsrK24pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobikpO3JldHVybiB0fWZ1bmN0aW9uIEgoZSx0KXtmb3IodmFyIG4scixpLG89W10sYT0wO2E8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrYSluPWUuY2hhckNvZGVBdChhKSxyPW4+PjgsaT1uJTI1NixvLnB1c2goaSksby5wdXNoKHIpO3JldHVybiBvfWZ1bmN0aW9uIFcoZSl7cmV0dXJuIEoudG9CeXRlQXJyYXkoVShlKSl9ZnVuY3Rpb24gUShlLHQsbixyKXtmb3IodmFyIGk9MDtpPHImJiEoaStuPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krbl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBLKGUpe3JldHVybiBlIT09ZX12YXIgSj1uKDczNyksWT1uKDczOCksWD1uKDczOSk7dC5CdWZmZXI9byx0LlNsb3dCdWZmZXI9bSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLG8uVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1yKCksby5wb29sU2l6ZT04MTkyLG8uX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPW8ucHJvdG90eXBlLGV9LG8uZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGEobnVsbCxlLHQsbil9LG8uVFlQRURfQVJSQVlfU1VQUE9SVCYmKG8ucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxvLl9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJm9bU3ltYm9sLnNwZWNpZXNdPT09byYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLG8uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1KG51bGwsZSx0LG4pfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBjKG51bGwsZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBjKG51bGwsZSl9LG8uaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSxvLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighby5pc0J1ZmZlcihlKXx8IW8uaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxhPU1hdGgubWluKG4scik7aTxhOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LG8uaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sby5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBvLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9by5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGE9ZVtuXTtpZighby5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KHIsaSksaSs9YS5sZW5ndGh9cmV0dXJuIHJ9LG8uYnl0ZUxlbmd0aD1nLG8ucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxvLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKXYodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpdih0aGlzLHQsdCszKSx2KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpdih0aGlzLHQsdCs3KSx2KHRoaXMsdCsxLHQrNiksdih0aGlzLHQrMix0KzUpLHYodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9fKHRoaXMsMCxlKTp5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFvLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1vLmNvbXBhcmUodGhpcyxlKX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLG49dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLG4pLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5uJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LG8ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4scixpKXtpZighby5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PWkmJnQ+PW4pcmV0dXJuIDA7aWYocj49aSlyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHQ+Pj49MCxuPj4+PTAscj4+Pj0wLGk+Pj49MCx0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGE9aS1yLHM9bi10LHU9TWF0aC5taW4oYSxzKSxjPXRoaXMuc2xpY2UocixpKSxsPWUuc2xpY2UodCxuKSxwPTA7cDx1OysrcClpZihjW3BdIT09bFtwXSl7YT1jW3BdLHM9bFtwXTticmVha31yZXR1cm4gYTxzPy0xOnM8YT8xOjB9LG8ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LG8ucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBiKHRoaXMsZSx0LG4sITApfSxvLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGIodGhpcyxlLHQsbiwhMSl9LG8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09PXR5cGVvZiB0KXI9dCxuPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShuKT8obnw9MCx2b2lkIDA9PT1yJiYocj0idXRmOCIpKToocj1uLG49dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPmkpJiYobj1pKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3J8fChyPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKHIpe2Nhc2UiaGV4IjpyZXR1cm4gQyh0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBFKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBEKHRoaXMsZSx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHcodGhpcyxlLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBTKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gayh0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTtyPSgiIityKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBaPTQwOTY7by5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmxlbmd0aDtlPX5+ZSx0PXZvaWQgMD09PXQ/bjp+fnQsZTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLHQ8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpO3ZhciByO2lmKG8uVFlQRURfQVJSQVlfU1VQUE9SVClyPXRoaXMuc3ViYXJyYXkoZSx0KSxyLl9fcHJvdG9fXz1vLnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtyPW5ldyBvKGksdm9pZCAwKTtmb3IodmFyIGE9MDthPGk7KythKXJbYV09dGhpc1thK2VdfXJldHVybiByfSxvLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8TChlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcn0sby5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEwoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxMKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sby5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEwoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sby5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEwoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sby5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEwoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxvLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8TChlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LG8ucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEwoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIGkqPTEyOCxyPj1pJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxvLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxMKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLG89dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tcl0qaTtyZXR1cm4gaSo9MTI4LG8+PWkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LG8ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEwoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sby5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxMKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LG8ucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8TChlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxvLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxMKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxvLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxMKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxvLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxMKGUsNCx0aGlzLmxlbmd0aCksWS5yZWFkKHRoaXMsZSwhMCwyMyw0KX0sby5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8TChlLDQsdGhpcy5sZW5ndGgpLFkucmVhZCh0aGlzLGUsITEsMjMsNCl9LG8ucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxMKGUsOCx0aGlzLmxlbmd0aCksWS5yZWFkKHRoaXMsZSwhMCw1Miw4KX0sby5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEwoZSw4LHRoaXMubGVuZ3RoKSxZLnJlYWQodGhpcyxlLCExLDUyLDgpfSxvLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsbnw9MCwhcil7UCh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApfXZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0sby5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLG58PTAsIXIpe1AodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKX12YXIgaT1uLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0sby5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxQKHRoaXMsZSx0LDEsMjU1LDApLG8uVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LG8ucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8UCh0aGlzLGUsdCwyLDY1NTM1LDApLG8uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOk0odGhpcyxlLHQsITApLHQrMn0sby5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxQKHRoaXMsZSx0LDIsNjU1MzUsMCksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6TSh0aGlzLGUsdCwhMSksdCsyfSxvLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFAodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLG8uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpqKHRoaXMsZSx0LCEwKSx0KzR9LG8ucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8UCh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOmoodGhpcyxlLHQsITEpLHQrNH0sby5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1AodGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPTAsYT0xLHM9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGEqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3Qrby0xXSYmKHM9MSksdGhpc1t0K29dPShlL2E+PjApLXMmMjU1O3JldHVybiB0K259LG8ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtQKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEsYT0xLHM9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKGEqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QrbysxXSYmKHM9MSksdGhpc1t0K29dPShlL2E+PjApLXMmMjU1O3JldHVybiB0K259LG8ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxQKHRoaXMsZSx0LDEsMTI3LC0xMjgpLG8uVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sby5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFAodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLG8uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOk0odGhpcyxlLHQsITApLHQrMn0sby5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFAodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLG8uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOk0odGhpcyxlLHQsITEpLHQrMn0sby5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFAodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxvLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6aih0aGlzLGUsdCwhMCksdCs0fSxvLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8UCh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLG8uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpqKHRoaXMsZSx0LCExKSx0KzR9LG8ucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEIodGhpcyxlLHQsITAsbil9LG8ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEIodGhpcyxlLHQsITEsbil9LG8ucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAkKHRoaXMsZSx0LCEwLG4pfSxvLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gJCh0aGlzLGUsdCwhMSxuKX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbixyKXtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cj50aGlzLmxlbmd0aCYmKHI9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8ci1uJiYocj1lLmxlbmd0aC10K24pO3ZhciBpLGE9ci1uO2lmKHRoaXM9PT1lJiZuPHQmJnQ8cilmb3IoaT1hLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStuXTtlbHNlIGlmKGE8MWUzfHwhby5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxhOysraSllW2krdF09dGhpc1tpK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbithKSx0KTtyZXR1cm4gYX0sby5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09PXR5cGVvZiBlKXtpZigic3RyaW5nIj09PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT09dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT09dHlwZW9mIHImJiFvLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPD10KXJldHVybiB0aGlzO3Q+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCk7dmFyIGE7aWYoIm51bWJlciI9PT10eXBlb2YgZSlmb3IoYT10O2E8bjsrK2EpdGhpc1thXT1lO2Vsc2V7dmFyIHM9by5pc0J1ZmZlcihlKT9lOlYobmV3IG8oZSxyKS50b1N0cmluZygpKSx1PXMubGVuZ3RoO2ZvcihhPTA7YTxuLXQ7KythKXRoaXNbYSt0XT1zW2EldV19cmV0dXJuIHRoaXN9O3ZhciBlZT0vW14rXC8wLTlBLVphLXotX10vZ30pLmNhbGwodCxuKDExKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmxlbmd0aDtpZih0JTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgbj1lLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PW4mJihuPXQpLFtuLG49PT10PzA6NC1uJTRdfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9cihlKSxuPXRbMF0saT10WzFdO3JldHVybiAzKihuK2kpLzQtaX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gMyoodCtuKS80LW59ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQsbj1yKGUpLGk9blswXSxhPW5bMV0scz1uZXcgZihvKGUsaSxhKSksdT0wLGM9YT4wP2ktNDppLGw9MDtsPGM7bCs9NCl0PXBbZS5jaGFyQ29kZUF0KGwpXTw8MTh8cFtlLmNoYXJDb2RlQXQobCsxKV08PDEyfHBbZS5jaGFyQ29kZUF0KGwrMildPDw2fHBbZS5jaGFyQ29kZUF0KGwrMyldLHNbdSsrXT10Pj4xNiYyNTUsc1t1KytdPXQ+PjgmMjU1LHNbdSsrXT0yNTUmdDtyZXR1cm4gMj09PWEmJih0PXBbZS5jaGFyQ29kZUF0KGwpXTw8MnxwW2UuY2hhckNvZGVBdChsKzEpXT4+NCxzW3UrK109MjU1JnQpLDE9PT1hJiYodD1wW2UuY2hhckNvZGVBdChsKV08PDEwfHBbZS5jaGFyQ29kZUF0KGwrMSldPDw0fHBbZS5jaGFyQ29kZUF0KGwrMildPj4yLHNbdSsrXT10Pj44JjI1NSxzW3UrK109MjU1JnQpLHN9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbFtlPj4xOCY2M10rbFtlPj4xMiY2M10rbFtlPj42JjYzXStsWzYzJmVdfWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcih2YXIgcixpPVtdLG89dDtvPG47bys9MylyPShlW29dPDwxNiYxNjcxMTY4MCkrKGVbbysxXTw8OCY2NTI4MCkrKDI1NSZlW28rMl0pLGkucHVzaChzKHIpKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgdCxuPWUubGVuZ3RoLHI9biUzLGk9W10sbz0wLGE9bi1yO288YTtvKz0xNjM4MylpLnB1c2godShlLG8sbysxNjM4Mz5hP2E6bysxNjM4MykpO3JldHVybiAxPT09cj8odD1lW24tMV0saS5wdXNoKGxbdD4+Ml0rbFt0PDw0JjYzXSsiPT0iKSk6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpLnB1c2gobFt0Pj4xMF0rbFt0Pj40JjYzXStsW3Q8PDImNjNdKyI9IikpLGkuam9pbigiIil9dC5ieXRlTGVuZ3RoPWksdC50b0J5dGVBcnJheT1hLHQuZnJvbUJ5dGVBcnJheT1jO2Zvcih2YXIgbD1bXSxwPVtdLGY9InVuZGVmaW5lZCIhPT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGg9MCxtPWQubGVuZ3RoO2g8bTsrK2gpbFtoXT1kW2hdLHBbZC5jaGFyQ29kZUF0KGgpXT1oO3BbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHBbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSxmdW5jdGlvbihlLHQpe3QucmVhZD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscz04Kmktci0xLHU9KDE8PHMpLTEsYz11Pj4xLGw9LTcscD1uP2ktMTowLGY9bj8tMToxLGQ9ZVt0K3BdO2ZvcihwKz1mLG89ZCYoMTw8LWwpLTEsZD4+PS1sLGwrPXM7bD4wO289MjU2Km8rZVt0K3BdLHArPWYsbC09OCk7Zm9yKGE9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO2E9MjU2KmErZVt0K3BdLHArPWYsbC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gYT9OYU46MS8wKihkPy0xOjEpO2ErPU1hdGgucG93KDIsciksby09Y31yZXR1cm4oZD8tMToxKSphKk1hdGgucG93KDIsby1yKX0sdC53cml0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGEscyx1LGM9OCpvLWktMSxsPSgxPDxjKS0xLHA9bD4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZD1yPzA6by0xLGg9cj8xOi0xLG09dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhzPWlzTmFOKHQpPzE6MCxhPWwpOihhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHU9TWF0aC5wb3coMiwtYSkpPDEmJihhLS0sdSo9MiksdCs9YStwPj0xP2YvdTpmKk1hdGgucG93KDIsMS1wKSx0KnU+PTImJihhKyssdS89MiksYStwPj1sPyhzPTAsYT1sKTphK3A+PTE/KHM9KHQqdS0xKSpNYXRoLnBvdygyLGkpLGErPXApOihzPXQqTWF0aC5wb3coMixwLTEpKk1hdGgucG93KDIsaSksYT0wKSk7aT49ODtlW24rZF09MjU1JnMsZCs9aCxzLz0yNTYsaS09OCk7Zm9yKGE9YTw8aXxzLGMrPWk7Yz4wO2VbbitkXT0yNTUmYSxkKz1oLGEvPTI1NixjLT04KTtlW24rZC1oXXw9MTI4Km19fSxmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1uLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIHQsbixyLGksbyx1PVtdLGM9ZTtmb3IodD0wLG49Yy5sZW5ndGg7dDxuO3QrPTEpe2lmKHI9Y1t0XSxvPSExLCJbb2JqZWN0IE9iamVjdF0iIT09cy5jYWxsKHIpKXJldHVybiExO2ZvcihpIGluIHIpaWYoYS5jYWxsKHIsaSkpe2lmKG8pcmV0dXJuITE7bz0hMH1pZighbylyZXR1cm4hMTtpZigtMSE9PXUuaW5kZXhPZihpKSlyZXR1cm4hMTt1LnB1c2goaSl9cmV0dXJuITB9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbnVsbCE9PWU/ZTpbXX12YXIgbz1uKDE1KSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1uZXcgbygidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOnIsY29uc3RydWN0Oml9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciB0LG4scixpLG8scz1lO2ZvcihvPW5ldyBBcnJheShzLmxlbmd0aCksdD0wLG49cy5sZW5ndGg7dDxuO3QrPTEpe2lmKHI9c1t0XSwiW29iamVjdCBPYmplY3RdIiE9PWEuY2FsbChyKSlyZXR1cm4hMTtpZihpPU9iamVjdC5rZXlzKHIpLDEhPT1pLmxlbmd0aClyZXR1cm4hMTtvW3RdPVtpWzBdLHJbaVswXV1dfXJldHVybiEwfWZ1bmN0aW9uIGkoZSl7aWYobnVsbD09PWUpcmV0dXJuW107dmFyIHQsbixyLGksbyxhPWU7Zm9yKG89bmV3IEFycmF5KGEubGVuZ3RoKSx0PTAsbj1hLmxlbmd0aDt0PG47dCs9MSlyPWFbdF0saT1PYmplY3Qua2V5cyhyKSxvW3RdPVtpWzBdLHJbaVswXV1dO3JldHVybiBvfXZhciBvPW4oMTUpLGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9bmV3IG8oInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIHQsbj1lO2Zvcih0IGluIG4paWYoYS5jYWxsKG4sdCkmJm51bGwhPT1uW3RdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIG51bGwhPT1lP2U6e319dmFyIG89bigxNSksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1uZXcgbygidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTpyLGNvbnN0cnVjdDppfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiEwfWZ1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gbygpe3JldHVybiIifWZ1bmN0aW9uIGEoZSl7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZX12YXIgcz1uKDE1KTtlLmV4cG9ydHM9bmV3IHMoInRhZzp5YW1sLm9yZywyMDAyOmpzL3VuZGVmaW5lZCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDppLHByZWRpY2F0ZTphLHJlcHJlc2VudDpvfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuITE7dmFyIHQ9ZSxuPS9cLyhbZ2ltXSopJC8uZXhlYyhlKSxyPSIiO2lmKCIvIj09PXRbMF0pe2lmKG4mJihyPW5bMV0pLHIubGVuZ3RoPjMpcmV0dXJuITE7aWYoIi8iIT09dFt0Lmxlbmd0aC1yLmxlbmd0aC0xXSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBpKGUpe3ZhciB0PWUsbj0vXC8oW2dpbV0qKSQvLmV4ZWMoZSkscj0iIjtyZXR1cm4iLyI9PT10WzBdJiYobiYmKHI9blsxXSksdD10LnNsaWNlKDEsdC5sZW5ndGgtci5sZW5ndGgtMSkpLG5ldyBSZWdFeHAodCxyKX1mdW5jdGlvbiBvKGUpe3ZhciB0PSIvIitlLnNvdXJjZSsiLyI7cmV0dXJuIGUuZ2xvYmFsJiYodCs9ImciKSxlLm11bHRpbGluZSYmKHQrPSJtIiksZS5pZ25vcmVDYXNlJiYodCs9ImkiKSx0fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9dmFyIHM9bigxNSk7ZS5leHBvcnRzPW5ldyBzKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aSxwcmVkaWNhdGU6YSxyZXByZXNlbnQ6b30pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dHJ5e3ZhciB0PSIoIitlKyIpIixuPXMucGFyc2UodCx7cmFuZ2U6ITB9KTtyZXR1cm4iUHJvZ3JhbSI9PT1uLnR5cGUmJjE9PT1uLmJvZHkubGVuZ3RoJiYiRXhwcmVzc2lvblN0YXRlbWVudCI9PT1uLmJvZHlbMF0udHlwZSYmKCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI9PT1uLmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlfHwiRnVuY3Rpb25FeHByZXNzaW9uIj09PW4uYm9keVswXS5leHByZXNzaW9uLnR5cGUpfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBpKGUpe3ZhciB0LG49IigiK2UrIikiLHI9cy5wYXJzZShuLHtyYW5nZTohMH0pLGk9W107aWYoIlByb2dyYW0iIT09ci50eXBlfHwxIT09ci5ib2R5Lmxlbmd0aHx8IkV4cHJlc3Npb25TdGF0ZW1lbnQiIT09ci5ib2R5WzBdLnR5cGV8fCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIhPT1yLmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlJiYiRnVuY3Rpb25FeHByZXNzaW9uIiE9PXIuYm9keVswXS5leHByZXNzaW9uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gcmVzb2x2ZSBmdW5jdGlvbiIpO3JldHVybiByLmJvZHlbMF0uZXhwcmVzc2lvbi5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihlKXtpLnB1c2goZS5uYW1lKX0pLHQ9ci5ib2R5WzBdLmV4cHJlc3Npb24uYm9keS5yYW5nZSxuZXcgRnVuY3Rpb24oaSxuLnNsaWNlKHRbMF0rMSx0WzFdLTEpKX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciBzO3RyeXtzPW4oNzQ2KX1jYXRjaChlKXsidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJihzPXdpbmRvdy5lc3ByaW1hKX12YXIgdT1uKDE1KTtlLmV4cG9ydHM9bmV3IHUoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0OmkscHJlZGljYXRlOmEscmVwcmVzZW50Om99KX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbih0LG4pe2UuZXhwb3J0cz1uKCl9KDAsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtpZihuW3JdKXJldHVybiBuW3JdLmV4cG9ydHM7dmFyIGk9bltyXT17ZXhwb3J0czp7fSxpZDpyLGxvYWRlZDohMX07cmV0dXJuIGVbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsdCksaS5sb2FkZWQ9ITAsaS5leHBvcnRzfXZhciBuPXt9O3JldHVybiB0Lm09ZSx0LmM9bix0LnA9IiIsdCgwKX0oW2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9bnVsbCxpPWZ1bmN0aW9uKGUsdCl7biYmbihlLHQpLHImJnIudmlzaXQoZSx0KX0sbz0iZnVuY3Rpb24iPT09dHlwZW9mIG4/aTpudWxsLGE9ITE7aWYodCl7YT0iYm9vbGVhbiI9PT10eXBlb2YgdC5jb21tZW50JiZ0LmNvbW1lbnQ7dmFyIGw9ImJvb2xlYW4iPT09dHlwZW9mIHQuYXR0YWNoQ29tbWVudCYmdC5hdHRhY2hDb21tZW50OyhhfHxsKSYmKHI9bmV3IHMuQ29tbWVudEhhbmRsZXIsci5hdHRhY2g9bCx0LmNvbW1lbnQ9ITAsbz1pKX12YXIgcD0hMTt0JiYic3RyaW5nIj09PXR5cGVvZiB0LnNvdXJjZVR5cGUmJihwPSJtb2R1bGUiPT09dC5zb3VyY2VUeXBlKTt2YXIgZjtmPXQmJiJib29sZWFuIj09PXR5cGVvZiB0LmpzeCYmdC5qc3g/bmV3IHUuSlNYUGFyc2VyKGUsdCxvKTpuZXcgYy5QYXJzZXIoZSx0LG8pO3ZhciBkPXA/Zi5wYXJzZU1vZHVsZSgpOmYucGFyc2VTY3JpcHQoKSxoPWQ7cmV0dXJuIGEmJnImJihoLmNvbW1lbnRzPXIuY29tbWVudHMpLGYuY29uZmlnLnRva2VucyYmKGgudG9rZW5zPWYudG9rZW5zKSxmLmNvbmZpZy50b2xlcmFudCYmKGguZXJyb3JzPWYuZXJyb3JIYW5kbGVyLmVycm9ycyksaH1mdW5jdGlvbiBpKGUsdCxuKXt2YXIgaT10fHx7fTtyZXR1cm4gaS5zb3VyY2VUeXBlPSJtb2R1bGUiLHIoZSxpLG4pfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciBpPXR8fHt9O3JldHVybiBpLnNvdXJjZVR5cGU9InNjcmlwdCIscihlLGksbil9ZnVuY3Rpb24gYShlLHQsbil7dmFyIHIsaT1uZXcgbC5Ub2tlbml6ZXIoZSx0KTtyPVtdO3RyeXtmb3IoOzspe3ZhciBvPWkuZ2V0TmV4dFRva2VuKCk7aWYoIW8pYnJlYWs7biYmKG89bihvKSksci5wdXNoKG8pfX1jYXRjaChlKXtpLmVycm9ySGFuZGxlci50b2xlcmF0ZShlKX1yZXR1cm4gaS5lcnJvckhhbmRsZXIudG9sZXJhbnQmJihyLmVycm9ycz1pLmVycm9ycygpKSxyfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1uKDEpLHU9bigzKSxjPW4oOCksbD1uKDE1KTt0LnBhcnNlPXIsdC5wYXJzZU1vZHVsZT1pLHQucGFyc2VTY3JpcHQ9byx0LnRva2VuaXplPWE7dmFyIHA9bigyKTt0LlN5bnRheD1wLlN5bnRheCx0LnZlcnNpb249IjQuMC4wIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYXR0YWNoPSExLHRoaXMuY29tbWVudHM9W10sdGhpcy5zdGFjaz1bXSx0aGlzLmxlYWRpbmc9W10sdGhpcy50cmFpbGluZz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0SW5uZXJDb21tZW50cz1mdW5jdGlvbihlLHQpe2lmKGUudHlwZT09PXIuU3ludGF4LkJsb2NrU3RhdGVtZW50JiYwPT09ZS5ib2R5Lmxlbmd0aCl7Zm9yKHZhciBuPVtdLGk9dGhpcy5sZWFkaW5nLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz10aGlzLmxlYWRpbmdbaV07dC5lbmQub2Zmc2V0Pj1vLnN0YXJ0JiYobi51bnNoaWZ0KG8uY29tbWVudCksdGhpcy5sZWFkaW5nLnNwbGljZShpLDEpLHRoaXMudHJhaWxpbmcuc3BsaWNlKGksMSkpfW4ubGVuZ3RoJiYoZS5pbm5lckNvbW1lbnRzPW4pfX0sZS5wcm90b3R5cGUuZmluZFRyYWlsaW5nQ29tbWVudHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpcy50cmFpbGluZy5sZW5ndGg+MCl7Zm9yKHZhciBuPXRoaXMudHJhaWxpbmcubGVuZ3RoLTE7bj49MDstLW4pe3ZhciByPXRoaXMudHJhaWxpbmdbbl07ci5zdGFydD49ZS5lbmQub2Zmc2V0JiZ0LnVuc2hpZnQoci5jb21tZW50KX1yZXR1cm4gdGhpcy50cmFpbGluZy5sZW5ndGg9MCx0fXZhciBpPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoaSYmaS5ub2RlLnRyYWlsaW5nQ29tbWVudHMpe3ZhciBvPWkubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdO28mJm8ucmFuZ2VbMF0+PWUuZW5kLm9mZnNldCYmKHQ9aS5ub2RlLnRyYWlsaW5nQ29tbWVudHMsZGVsZXRlIGkubm9kZS50cmFpbGluZ0NvbW1lbnRzKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZmluZExlYWRpbmdDb21tZW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTt0aGlzLnN0YWNrLmxlbmd0aD4wOyl7dmFyIHI9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZighKHImJnIuc3RhcnQ+PWUuc3RhcnQub2Zmc2V0KSlicmVhazt0PXIubm9kZSx0aGlzLnN0YWNrLnBvcCgpfWlmKHQpe2Zvcih2YXIgaT10LmxlYWRpbmdDb21tZW50cz90LmxlYWRpbmdDb21tZW50cy5sZW5ndGg6MCxvPWktMTtvPj0wOy0tbyl7dmFyIGE9dC5sZWFkaW5nQ29tbWVudHNbb107YS5yYW5nZVsxXTw9ZS5zdGFydC5vZmZzZXQmJihuLnVuc2hpZnQoYSksdC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKG8sMSkpfXJldHVybiB0LmxlYWRpbmdDb21tZW50cyYmMD09PXQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCYmZGVsZXRlIHQubGVhZGluZ0NvbW1lbnRzLG59Zm9yKHZhciBvPXRoaXMubGVhZGluZy5sZW5ndGgtMTtvPj0wOy0tbyl7dmFyIHI9dGhpcy5sZWFkaW5nW29dO3Iuc3RhcnQ8PWUuc3RhcnQub2Zmc2V0JiYobi51bnNoaWZ0KHIuY29tbWVudCksdGhpcy5sZWFkaW5nLnNwbGljZShvLDEpKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUudmlzaXROb2RlPWZ1bmN0aW9uKGUsdCl7aWYoIShlLnR5cGU9PT1yLlN5bnRheC5Qcm9ncmFtJiZlLmJvZHkubGVuZ3RoPjApKXt0aGlzLmluc2VydElubmVyQ29tbWVudHMoZSx0KTt2YXIgbj10aGlzLmZpbmRUcmFpbGluZ0NvbW1lbnRzKHQpLGk9dGhpcy5maW5kTGVhZGluZ0NvbW1lbnRzKHQpO2kubGVuZ3RoPjAmJihlLmxlYWRpbmdDb21tZW50cz1pKSxuLmxlbmd0aD4wJiYoZS50cmFpbGluZ0NvbW1lbnRzPW4pLHRoaXMuc3RhY2sucHVzaCh7bm9kZTplLHN0YXJ0OnQuc3RhcnQub2Zmc2V0fSl9fSxlLnByb3RvdHlwZS52aXNpdENvbW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iTCI9PT1lLnR5cGVbMF0/IkxpbmUiOiJCbG9jayIscj17dHlwZTpuLHZhbHVlOmUudmFsdWV9O2lmKGUucmFuZ2UmJihyLnJhbmdlPWUucmFuZ2UpLGUubG9jJiYoci5sb2M9ZS5sb2MpLHRoaXMuY29tbWVudHMucHVzaChyKSx0aGlzLmF0dGFjaCl7dmFyIGk9e2NvbW1lbnQ6e3R5cGU6bix2YWx1ZTplLnZhbHVlLHJhbmdlOlt0LnN0YXJ0Lm9mZnNldCx0LmVuZC5vZmZzZXRdfSxzdGFydDp0LnN0YXJ0Lm9mZnNldH07ZS5sb2MmJihpLmNvbW1lbnQubG9jPWUubG9jKSxlLnR5cGU9bix0aGlzLmxlYWRpbmcucHVzaChpKSx0aGlzLnRyYWlsaW5nLnB1c2goaSl9fSxlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlLHQpeyJMaW5lQ29tbWVudCI9PT1lLnR5cGU/dGhpcy52aXNpdENvbW1lbnQoZSx0KToiQmxvY2tDb21tZW50Ij09PWUudHlwZT90aGlzLnZpc2l0Q29tbWVudChlLHQpOnRoaXMuYXR0YWNoJiZ0aGlzLnZpc2l0Tm9kZShlLHQpfSxlfSgpO3QuQ29tbWVudEhhbmRsZXI9aX0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3ludGF4PXtBc3NpZ25tZW50RXhwcmVzc2lvbjoiQXNzaWdubWVudEV4cHJlc3Npb24iLEFzc2lnbm1lbnRQYXR0ZXJuOiJBc3NpZ25tZW50UGF0dGVybiIsQXJyYXlFeHByZXNzaW9uOiJBcnJheUV4cHJlc3Npb24iLEFycmF5UGF0dGVybjoiQXJyYXlQYXR0ZXJuIixBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjoiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLEF3YWl0RXhwcmVzc2lvbjoiQXdhaXRFeHByZXNzaW9uIixCbG9ja1N0YXRlbWVudDoiQmxvY2tTdGF0ZW1lbnQiLEJpbmFyeUV4cHJlc3Npb246IkJpbmFyeUV4cHJlc3Npb24iLEJyZWFrU3RhdGVtZW50OiJCcmVha1N0YXRlbWVudCIsQ2FsbEV4cHJlc3Npb246IkNhbGxFeHByZXNzaW9uIixDYXRjaENsYXVzZToiQ2F0Y2hDbGF1c2UiLENsYXNzQm9keToiQ2xhc3NCb2R5IixDbGFzc0RlY2xhcmF0aW9uOiJDbGFzc0RlY2xhcmF0aW9uIixDbGFzc0V4cHJlc3Npb246IkNsYXNzRXhwcmVzc2lvbiIsQ29uZGl0aW9uYWxFeHByZXNzaW9uOiJDb25kaXRpb25hbEV4cHJlc3Npb24iLENvbnRpbnVlU3RhdGVtZW50OiJDb250aW51ZVN0YXRlbWVudCIsRG9XaGlsZVN0YXRlbWVudDoiRG9XaGlsZVN0YXRlbWVudCIsRGVidWdnZXJTdGF0ZW1lbnQ6IkRlYnVnZ2VyU3RhdGVtZW50IixFbXB0eVN0YXRlbWVudDoiRW1wdHlTdGF0ZW1lbnQiLEV4cG9ydEFsbERlY2xhcmF0aW9uOiJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLEV4cG9ydFNwZWNpZmllcjoiRXhwb3J0U3BlY2lmaWVyIixFeHByZXNzaW9uU3RhdGVtZW50OiJFeHByZXNzaW9uU3RhdGVtZW50IixGb3JTdGF0ZW1lbnQ6IkZvclN0YXRlbWVudCIsRm9yT2ZTdGF0ZW1lbnQ6IkZvck9mU3RhdGVtZW50IixGb3JJblN0YXRlbWVudDoiRm9ySW5TdGF0ZW1lbnQiLEZ1bmN0aW9uRGVjbGFyYXRpb246IkZ1bmN0aW9uRGVjbGFyYXRpb24iLEZ1bmN0aW9uRXhwcmVzc2lvbjoiRnVuY3Rpb25FeHByZXNzaW9uIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixJZlN0YXRlbWVudDoiSWZTdGF0ZW1lbnQiLEltcG9ydERlY2xhcmF0aW9uOiJJbXBvcnREZWNsYXJhdGlvbiIsSW1wb3J0RGVmYXVsdFNwZWNpZmllcjoiSW1wb3J0RGVmYXVsdFNwZWNpZmllciIsSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLEltcG9ydFNwZWNpZmllcjoiSW1wb3J0U3BlY2lmaWVyIixMaXRlcmFsOiJMaXRlcmFsIixMYWJlbGVkU3RhdGVtZW50OiJMYWJlbGVkU3RhdGVtZW50IixMb2dpY2FsRXhwcmVzc2lvbjoiTG9naWNhbEV4cHJlc3Npb24iLE1lbWJlckV4cHJlc3Npb246Ik1lbWJlckV4cHJlc3Npb24iLE1ldGFQcm9wZXJ0eToiTWV0YVByb3BlcnR5IixNZXRob2REZWZpbml0aW9uOiJNZXRob2REZWZpbml0aW9uIixOZXdFeHByZXNzaW9uOiJOZXdFeHByZXNzaW9uIixPYmplY3RFeHByZXNzaW9uOiJPYmplY3RFeHByZXNzaW9uIixPYmplY3RQYXR0ZXJuOiJPYmplY3RQYXR0ZXJuIixQcm9ncmFtOiJQcm9ncmFtIixQcm9wZXJ0eToiUHJvcGVydHkiLFJlc3RFbGVtZW50OiJSZXN0RWxlbWVudCIsUmV0dXJuU3RhdGVtZW50OiJSZXR1cm5TdGF0ZW1lbnQiLFNlcXVlbmNlRXhwcmVzc2lvbjoiU2VxdWVuY2VFeHByZXNzaW9uIixTcHJlYWRFbGVtZW50OiJTcHJlYWRFbGVtZW50IixTdXBlcjoiU3VwZXIiLFN3aXRjaENhc2U6IlN3aXRjaENhc2UiLFN3aXRjaFN0YXRlbWVudDoiU3dpdGNoU3RhdGVtZW50IixUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiIsVGVtcGxhdGVFbGVtZW50OiJUZW1wbGF0ZUVsZW1lbnQiLFRlbXBsYXRlTGl0ZXJhbDoiVGVtcGxhdGVMaXRlcmFsIixUaGlzRXhwcmVzc2lvbjoiVGhpc0V4cHJlc3Npb24iLFRocm93U3RhdGVtZW50OiJUaHJvd1N0YXRlbWVudCIsVHJ5U3RhdGVtZW50OiJUcnlTdGF0ZW1lbnQiLFVuYXJ5RXhwcmVzc2lvbjoiVW5hcnlFeHByZXNzaW9uIixVcGRhdGVFeHByZXNzaW9uOiJVcGRhdGVFeHByZXNzaW9uIixWYXJpYWJsZURlY2xhcmF0aW9uOiJWYXJpYWJsZURlY2xhcmF0aW9uIixWYXJpYWJsZURlY2xhcmF0b3I6IlZhcmlhYmxlRGVjbGFyYXRvciIsV2hpbGVTdGF0ZW1lbnQ6IldoaWxlU3RhdGVtZW50IixXaXRoU3RhdGVtZW50OiJXaXRoU3RhdGVtZW50IixZaWVsZEV4cHJlc3Npb246IllpZWxkRXhwcmVzc2lvbiJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ7c3dpdGNoKGUudHlwZSl7Y2FzZSBzLkpTWFN5bnRheC5KU1hJZGVudGlmaWVyOnQ9ZS5uYW1lO2JyZWFrO2Nhc2Ugcy5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU6dmFyIG49ZTt0PXIobi5uYW1lc3BhY2UpKyI6IityKG4ubmFtZSk7YnJlYWs7Y2FzZSBzLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOnZhciBpPWU7dD1yKGkub2JqZWN0KSsiLiIrcihpLnByb3BlcnR5KX1yZXR1cm4gdH12YXIgaT10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxhPW4oNSkscz1uKDYpLHU9big3KSxjPW4oOCksbD1uKDEzKSxwPW4oMTQpO2wuVG9rZW5OYW1lWzEwMF09IkpTWElkZW50aWZpZXIiLGwuVG9rZW5OYW1lWzEwMV09IkpTWFRleHQiO3ZhciBmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3JldHVybiBlLmNhbGwodGhpcyx0LG4scil8fHRoaXN9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2goIjwiKT90aGlzLnBhcnNlSlNYUm9vdCgpOmUucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24uY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuc3RhcnRKU1g9ZnVuY3Rpb24oKXt0aGlzLnNjYW5uZXIuaW5kZXg9dGhpcy5zdGFydE1hcmtlci5pbmRleCx0aGlzLnNjYW5uZXIubGluZU51bWJlcj10aGlzLnN0YXJ0TWFya2VyLmxpbmUsdGhpcy5zY2FubmVyLmxpbmVTdGFydD10aGlzLnN0YXJ0TWFya2VyLmluZGV4LXRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufSx0LnByb3RvdHlwZS5maW5pc2hKU1g9ZnVuY3Rpb24oKXt0aGlzLm5leHRUb2tlbigpfSx0LnByb3RvdHlwZS5yZWVudGVySlNYPWZ1bmN0aW9uKCl7dGhpcy5zdGFydEpTWCgpLHRoaXMuZXhwZWN0SlNYKCJ9IiksdGhpcy5jb25maWcudG9rZW5zJiZ0aGlzLnRva2Vucy5wb3AoKX0sdC5wcm90b3R5cGUuY3JlYXRlSlNYTm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxlY3RDb21tZW50cygpLHtpbmRleDp0aGlzLnNjYW5uZXIuaW5kZXgsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9fSx0LnByb3RvdHlwZS5jcmVhdGVKU1hDaGlsZE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm57aW5kZXg6dGhpcy5zY2FubmVyLmluZGV4LGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0fX0sdC5wcm90b3R5cGUuc2NhblhIVE1MRW50aXR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iJiIsbj0hMCxyPSExLGk9ITEsYT0hMTshdGhpcy5zY2FubmVyLmVvZigpJiZuJiYhcjspe3ZhciBzPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTtpZihzPT09ZSlicmVhaztpZihyPSI7Ij09PXMsdCs9cywrK3RoaXMuc2Nhbm5lci5pbmRleCwhcilzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMjppPSIjIj09PXM7YnJlYWs7Y2FzZSAzOmkmJihhPSJ4Ij09PXMsbj1hfHxvLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChzLmNoYXJDb2RlQXQoMCkpLGk9aSYmIWEpO2JyZWFrO2RlZmF1bHQ6bj1uJiYhKGkmJiFvLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChzLmNoYXJDb2RlQXQoMCkpKSxuPW4mJiEoYSYmIW8uQ2hhcmFjdGVyLmlzSGV4RGlnaXQocy5jaGFyQ29kZUF0KDApKSl9fWlmKG4mJnImJnQubGVuZ3RoPjIpe3ZhciB1PXQuc3Vic3RyKDEsdC5sZW5ndGgtMik7aSYmdS5sZW5ndGg+MT90PVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodS5zdWJzdHIoMSksMTApKTphJiZ1Lmxlbmd0aD4yP3Q9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgiMCIrdS5zdWJzdHIoMSksMTYpKTppfHxhfHwhcC5YSFRNTEVudGl0aWVzW3VdfHwodD1wLlhIVE1MRW50aXRpZXNbdV0pfXJldHVybiB0fSx0LnByb3RvdHlwZS5sZXhKU1g9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KTtpZig2MD09PWV8fDYyPT09ZXx8NDc9PT1lfHw1OD09PWV8fDYxPT09ZXx8MTIzPT09ZXx8MTI1PT09ZSl7dmFyIHQ9dGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107cmV0dXJue3R5cGU6Nyx2YWx1ZTp0LGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6dGhpcy5zY2FubmVyLmluZGV4LTEsZW5kOnRoaXMuc2Nhbm5lci5pbmRleH19aWYoMzQ9PT1lfHwzOT09PWUpe2Zvcih2YXIgbj10aGlzLnNjYW5uZXIuaW5kZXgscj10aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXSxpPSIiOyF0aGlzLnNjYW5uZXIuZW9mKCk7KXt2YXIgYT10aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTtpZihhPT09cilicmVhaztpKz0iJiI9PT1hP3RoaXMuc2NhblhIVE1MRW50aXR5KHIpOmF9cmV0dXJue3R5cGU6OCx2YWx1ZTppLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6bixlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1pZig0Nj09PWUpe3ZhciBzPXRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgrMSksdT10aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KzIpLHQ9NDY9PT1zJiY0Nj09PXU/Ii4uLiI6Ii4iLG49dGhpcy5zY2FubmVyLmluZGV4O3JldHVybiB0aGlzLnNjYW5uZXIuaW5kZXgrPXQubGVuZ3RoLHt0eXBlOjcsdmFsdWU6dCxsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLnNjYW5uZXIubGluZVN0YXJ0LHN0YXJ0Om4sZW5kOnRoaXMuc2Nhbm5lci5pbmRleH19aWYoOTY9PT1lKXJldHVybnt0eXBlOjEwLHZhbHVlOiIiLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6dGhpcy5zY2FubmVyLmluZGV4LGVuZDp0aGlzLnNjYW5uZXIuaW5kZXh9O2lmKG8uQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGUpJiY5MiE9PWUpe3ZhciBuPXRoaXMuc2Nhbm5lci5pbmRleDtmb3IoKyt0aGlzLnNjYW5uZXIuaW5kZXg7IXRoaXMuc2Nhbm5lci5lb2YoKTspe3ZhciBhPXRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgpO2lmKG8uQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoYSkmJjkyIT09YSkrK3RoaXMuc2Nhbm5lci5pbmRleDtlbHNle2lmKDQ1IT09YSlicmVhazsrK3RoaXMuc2Nhbm5lci5pbmRleH19cmV0dXJue3R5cGU6MTAwLHZhbHVlOnRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uobix0aGlzLnNjYW5uZXIuaW5kZXgpLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6bixlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1yZXR1cm4gdGhpcy5zY2FubmVyLmxleCgpfSx0LnByb3RvdHlwZS5uZXh0SlNYVG9rZW49ZnVuY3Rpb24oKXt0aGlzLmNvbGxlY3RDb21tZW50cygpLHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMuc3RhcnRNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDt2YXIgZT10aGlzLmxleEpTWCgpO3JldHVybiB0aGlzLmxhc3RNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMubGFzdE1hcmtlci5saW5lPXRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLHRoaXMubGFzdE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnQsdGhpcy5jb25maWcudG9rZW5zJiZ0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKGUpKSxlfSx0LnByb3RvdHlwZS5uZXh0SlNYVGV4dD1mdW5jdGlvbigpe3RoaXMuc3RhcnRNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMuc3RhcnRNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDtmb3IodmFyIGU9dGhpcy5zY2FubmVyLmluZGV4LHQ9IiI7IXRoaXMuc2Nhbm5lci5lb2YoKTspe3ZhciBuPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTtpZigieyI9PT1ufHwiPCI9PT1uKWJyZWFrOysrdGhpcy5zY2FubmVyLmluZGV4LHQrPW4sby5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihuLmNoYXJDb2RlQXQoMCkpJiYoKyt0aGlzLnNjYW5uZXIubGluZU51bWJlciwiXHIiPT09biYmIlxuIj09PXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSYmKyt0aGlzLnNjYW5uZXIuaW5kZXgsdGhpcy5zY2FubmVyLmxpbmVTdGFydD10aGlzLnNjYW5uZXIuaW5kZXgpfXRoaXMubGFzdE1hcmtlci5pbmRleD10aGlzLnNjYW5uZXIuaW5kZXgsdGhpcy5sYXN0TWFya2VyLmxpbmU9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsdGhpcy5sYXN0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDt2YXIgcj17dHlwZToxMDEsdmFsdWU6dCxsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLnNjYW5uZXIubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuc2Nhbm5lci5pbmRleH07cmV0dXJuIHQubGVuZ3RoPjAmJnRoaXMuY29uZmlnLnRva2VucyYmdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbihyKSkscn0sdC5wcm90b3R5cGUucGVla0pTWFRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpO3RoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTt2YXIgdD10aGlzLmxleEpTWCgpO3JldHVybiB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKGUpLHR9LHQucHJvdG90eXBlLmV4cGVjdEpTWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm5leHRKU1hUb2tlbigpOzc9PT10LnR5cGUmJnQudmFsdWU9PT1lfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfSx0LnByb3RvdHlwZS5tYXRjaEpTWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBlZWtKU1hUb2tlbigpO3JldHVybiA3PT09dC50eXBlJiZ0LnZhbHVlPT09ZX0sdC5wcm90b3R5cGUucGFyc2VKU1hJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCksdD10aGlzLm5leHRKU1hUb2tlbigpO3JldHVybiAxMDAhPT10LnR5cGUmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCksdGhpcy5maW5hbGl6ZShlLG5ldyBhLkpTWElkZW50aWZpZXIodC52YWx1ZSkpfSx0LnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnROYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCksdD10aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO2lmKHRoaXMubWF0Y2hKU1goIjoiKSl7dmFyIG49dDt0aGlzLmV4cGVjdEpTWCgiOiIpO3ZhciByPXRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuSlNYTmFtZXNwYWNlZE5hbWUobixyKSl9ZWxzZSBpZih0aGlzLm1hdGNoSlNYKCIuIikpZm9yKDt0aGlzLm1hdGNoSlNYKCIuIik7KXt2YXIgaT10O3RoaXMuZXhwZWN0SlNYKCIuIik7dmFyIG89dGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5KU1hNZW1iZXJFeHByZXNzaW9uKGksbykpfXJldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZU5hbWU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlSlNYTm9kZSgpLG49dGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTtpZih0aGlzLm1hdGNoSlNYKCI6Iikpe3ZhciByPW47dGhpcy5leHBlY3RKU1goIjoiKTt2YXIgaT10aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO2U9dGhpcy5maW5hbGl6ZSh0LG5ldyBhLkpTWE5hbWVzcGFjZWROYW1lKHIsaSkpfWVsc2UgZT1uO3JldHVybiBlfSx0LnByb3RvdHlwZS5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKSx0PXRoaXMubmV4dEpTWFRva2VuKCk7OCE9PXQudHlwZSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0KTt2YXIgbj10aGlzLmdldFRva2VuUmF3KHQpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IHUuTGl0ZXJhbCh0LnZhbHVlLG4pKX0sdC5wcm90b3R5cGUucGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goInsiKSx0aGlzLmZpbmlzaEpTWCgpLHRoaXMubWF0Y2goIn0iKSYmdGhpcy50b2xlcmF0ZUVycm9yKCJKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbiIpO3ZhciB0PXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3JldHVybiB0aGlzLnJlZW50ZXJKU1goKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcih0KSl9LHQucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaEpTWCgieyIpP3RoaXMucGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlKCk6dGhpcy5tYXRjaEpTWCgiPCIpP3RoaXMucGFyc2VKU1hFbGVtZW50KCk6dGhpcy5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGUoKX0sdC5wcm90b3R5cGUucGFyc2VKU1hOYW1lVmFsdWVBdHRyaWJ1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKSx0PXRoaXMucGFyc2VKU1hBdHRyaWJ1dGVOYW1lKCksbj1udWxsO3JldHVybiB0aGlzLm1hdGNoSlNYKCI9IikmJih0aGlzLmV4cGVjdEpTWCgiPSIpLG49dGhpcy5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlKCkpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5KU1hBdHRyaWJ1dGUodCxuKSl9LHQucHJvdG90eXBlLnBhcnNlSlNYU3ByZWFkQXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goInsiKSx0aGlzLmV4cGVjdEpTWCgiLi4uIiksdGhpcy5maW5pc2hKU1goKTt2YXIgdD10aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtyZXR1cm4gdGhpcy5yZWVudGVySlNYKCksdGhpcy5maW5hbGl6ZShlLG5ldyBhLkpTWFNwcmVhZEF0dHJpYnV0ZSh0KSl9LHQucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXTshdGhpcy5tYXRjaEpTWCgiLyIpJiYhdGhpcy5tYXRjaEpTWCgiPiIpOyl7dmFyIHQ9dGhpcy5tYXRjaEpTWCgieyIpP3RoaXMucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKTp0aGlzLnBhcnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlKCk7ZS5wdXNoKHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goIjwiKTt2YXIgdD10aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKSxuPXRoaXMucGFyc2VKU1hBdHRyaWJ1dGVzKCkscj10aGlzLm1hdGNoSlNYKCIvIik7cmV0dXJuIHImJnRoaXMuZXhwZWN0SlNYKCIvIiksdGhpcy5leHBlY3RKU1goIj4iKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuSlNYT3BlbmluZ0VsZW1lbnQodCxyLG4pKX0sdC5wcm90b3R5cGUucGFyc2VKU1hCb3VuZGFyeUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTtpZih0aGlzLmV4cGVjdEpTWCgiPCIpLHRoaXMubWF0Y2hKU1goIi8iKSl7dGhpcy5leHBlY3RKU1goIi8iKTt2YXIgdD10aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RKU1goIj4iKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuSlNYQ2xvc2luZ0VsZW1lbnQodCkpfXZhciBuPXRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpLHI9dGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMoKSxpPXRoaXMubWF0Y2hKU1goIi8iKTtyZXR1cm4gaSYmdGhpcy5leHBlY3RKU1goIi8iKSx0aGlzLmV4cGVjdEpTWCgiPiIpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5KU1hPcGVuaW5nRWxlbWVudChuLGkscikpfSx0LnByb3RvdHlwZS5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7cmV0dXJuIHRoaXMuY29sbGVjdENvbW1lbnRzKCksdGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleCx0aGlzLmxhc3RNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLmxhc3RNYXJrZXIuY29sdW1uPXRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0LHRoaXMuZmluYWxpemUoZSxuZXcgYS5KU1hFbXB0eUV4cHJlc3Npb24pfSx0LnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTt0aGlzLmV4cGVjdEpTWCgieyIpO3ZhciB0O3JldHVybiB0aGlzLm1hdGNoSlNYKCJ9Iik/KHQ9dGhpcy5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpLHRoaXMuZXhwZWN0SlNYKCJ9IikpOih0aGlzLmZpbmlzaEpTWCgpLHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksdGhpcy5yZWVudGVySlNYKCkpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5KU1hFeHByZXNzaW9uQ29udGFpbmVyKHQpKX0sdC5wcm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXTshdGhpcy5zY2FubmVyLmVvZigpOyl7dmFyIHQ9dGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKSxuPXRoaXMubmV4dEpTWFRleHQoKTtpZihuLnN0YXJ0PG4uZW5kKXt2YXIgcj10aGlzLmdldFRva2VuUmF3KG4pLGk9dGhpcy5maW5hbGl6ZSh0LG5ldyBhLkpTWFRleHQobi52YWx1ZSxyKSk7ZS5wdXNoKGkpfWlmKCJ7IiE9PXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSlicmVhazt2YXIgbz10aGlzLnBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO2UucHVzaChvKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGFyc2VDb21wbGV4SlNYRWxlbWVudD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107IXRoaXMuc2Nhbm5lci5lb2YoKTspe2UuY2hpbGRyZW49ZS5jaGlsZHJlbi5jb25jYXQodGhpcy5wYXJzZUpTWENoaWxkcmVuKCkpO3ZhciBuPXRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCksaT10aGlzLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50KCk7aWYoaS50eXBlPT09cy5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQpe3ZhciBvPWk7aWYoby5zZWxmQ2xvc2luZyl7dmFyIHU9dGhpcy5maW5hbGl6ZShuLG5ldyBhLkpTWEVsZW1lbnQobyxbXSxudWxsKSk7ZS5jaGlsZHJlbi5wdXNoKHUpfWVsc2UgdC5wdXNoKGUpLGU9e25vZGU6bixvcGVuaW5nOm8sY2xvc2luZzpudWxsLGNoaWxkcmVuOltdfX1pZihpLnR5cGU9PT1zLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudCl7ZS5jbG9zaW5nPWk7dmFyIGM9cihlLm9wZW5pbmcubmFtZSk7aWYoYyE9PXIoZS5jbG9zaW5nLm5hbWUpJiZ0aGlzLnRvbGVyYXRlRXJyb3IoIkV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciAlMCIsYyksISh0Lmxlbmd0aD4wKSlicmVhazt2YXIgdT10aGlzLmZpbmFsaXplKGUubm9kZSxuZXcgYS5KU1hFbGVtZW50KGUub3BlbmluZyxlLmNoaWxkcmVuLGUuY2xvc2luZykpO2U9dFt0Lmxlbmd0aC0xXSxlLmNoaWxkcmVuLnB1c2godSksdC5wb3AoKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLnBhcnNlSlNYRWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYTm9kZSgpLHQ9dGhpcy5wYXJzZUpTWE9wZW5pbmdFbGVtZW50KCksbj1bXSxyPW51bGw7aWYoIXQuc2VsZkNsb3Npbmcpe3ZhciBpPXRoaXMucGFyc2VDb21wbGV4SlNYRWxlbWVudCh7bm9kZTplLG9wZW5pbmc6dCxjbG9zaW5nOnIsY2hpbGRyZW46bn0pO249aS5jaGlsZHJlbixyPWkuY2xvc2luZ31yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkpTWEVsZW1lbnQodCxuLHIpKX0sdC5wcm90b3R5cGUucGFyc2VKU1hSb290PWZ1bmN0aW9uKCl7dGhpcy5jb25maWcudG9rZW5zJiZ0aGlzLnRva2Vucy5wb3AoKSx0aGlzLnN0YXJ0SlNYKCk7dmFyIGU9dGhpcy5wYXJzZUpTWEVsZW1lbnQoKTtyZXR1cm4gdGhpcy5maW5pc2hKU1goKSxlfSx0LnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmlzU3RhcnRPZkV4cHJlc3Npb24uY2FsbCh0aGlzKXx8dGhpcy5tYXRjaCgiPCIpfSx0fShjLlBhcnNlcik7dC5KU1hQYXJzZXI9Zn0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtOb25Bc2NpaUlkZW50aWZpZXJTdGFydDovW1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwLVx1MDhCNFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5Qi1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY1XHVBQjcwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUwLVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVERDAwLVx1REQyN1x1REQzMC1cdURENjNcdURFMDAtXHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjddfFx1RDgwMltcdURDMDAtXHVEQzA1XHVEQzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMzQ1x1REMzRi1cdURDNTVcdURDNjAtXHVEQzc2XHVEQzgwLVx1REM5RVx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBcdURFMTAtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1RENGMl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1REQwMy1cdUREMjZcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1RERCMlx1RERDMS1cdUREQzRcdUREREFcdURERENcdURFMDAtXHVERTExXHVERTEzLVx1REUyQlx1REU4MC1cdURFODZcdURFODhcdURFOEEtXHVERThEXHVERThGLVx1REU5RFx1REU5Ri1cdURFQThcdURFQjAtXHVERURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REREOC1cdUREREJcdURFMDAtXHVERTJGXHVERTQ0XHVERTgwLVx1REVBQVx1REYwMC1cdURGMTldfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVERUMwLVx1REVGOF18XHVEODA4W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXHVEODZGLVx1RDg3Ml1bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRcdURGNTBcdURGOTMtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF0vLE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6L1tceEFBXHhCNVx4QjdceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMC1cdTA4QjRcdTA4RTMtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDAtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OC1cdTBDNUFcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENERVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAxLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ1Ri1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERFNi1cdTBERUZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFBQjAtXHUxQUJEXHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxQ0Y4XHUxQ0Y5XHUxRDAwLVx1MURGNVx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE4RkRcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjVcdUFCNzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJGXHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVEREZEXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1REQwMC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERCRlx1REUwMC1cdURFMDNcdURFMDVcdURFMDZcdURFMEMtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFMzgtXHVERTNBXHVERTNGXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgwNFtcdURDMDAtXHVEQzQ2XHVEQzY2LVx1REM2Rlx1REM3Ri1cdURDQkFcdURDRDAtXHVEQ0U4XHVEQ0YwLVx1RENGOVx1REQwMC1cdUREMzRcdUREMzYtXHVERDNGXHVERDUwLVx1REQ3M1x1REQ3Nlx1REQ4MC1cdUREQzRcdUREQ0EtXHVERENDXHVEREQwLVx1REREQVx1REREQ1x1REUwMC1cdURFMTFcdURFMTMtXHVERTM3XHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVERjAwLVx1REYwM1x1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVERjRCLVx1REY0RFx1REY1MFx1REY1N1x1REY1RC1cdURGNjNcdURGNjYtXHVERjZDXHVERjcwLVx1REY3NF18XHVEODA1W1x1REM4MC1cdURDQzVcdURDQzdcdURDRDAtXHVEQ0Q5XHVERDgwLVx1RERCNVx1RERCOC1cdUREQzBcdURERDgtXHVEREREXHVERTAwLVx1REU0MFx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUI3XHVERUMwLVx1REVDOVx1REYwMC1cdURGMTlcdURGMUQtXHVERjJCXHVERjMwLVx1REYzOV18XHVEODA2W1x1RENBMC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxbXHVEODBDXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVERUVEXHVERUYwLVx1REVGNFx1REYwMC1cdURGMzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURGN0VcdURGOEYtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVEODM0W1x1REQ2NS1cdURENjlcdURENkQtXHVERDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJcdUREQUEtXHVEREFEXHVERTQyLVx1REU0NF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0UtXHVERkZGXXxcdUQ4MzZbXHVERTAwLVx1REUzNlx1REUzQi1cdURFNkNcdURFNzVcdURFODRcdURFOUItXHVERTlGXHVERUExLVx1REVBRl18XHVEODNBW1x1REMwMC1cdURDQzRcdURDRDAtXHVEQ0Q2XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEQjQwW1x1REQwMC1cdURERUZdL307dC5DaGFyYWN0ZXI9e2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8NjU1MzY/U3RyaW5nLmZyb21DaGFyQ29kZShlKTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4xMCkpK1N0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKGUtNjU1MzYmMTAyMykpfSxpc1doaXRlU3BhY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDExPT09ZXx8MTI9PT1lfHwxNjA9PT1lfHxlPj01NzYwJiZbNTc2MCw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIzOSw4Mjg3LDEyMjg4LDY1Mjc5XS5pbmRleE9mKGUpPj0wfSxpc0xpbmVUZXJtaW5hdG9yOmZ1bmN0aW9uKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfSxpc0lkZW50aWZpZXJTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gMzY9PT1lfHw5NT09PWV8fGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMnx8OTI9PT1lfHxlPj0xMjgmJm4uTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdCh0LkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGUpKX0saXNJZGVudGlmaWVyUGFydDpmdW5jdGlvbihlKXtyZXR1cm4gMzY9PT1lfHw5NT09PWV8fGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMnx8ZT49NDgmJmU8PTU3fHw5Mj09PWV8fGU+PTEyOCYmbi5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QodC5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChlKSl9LGlzRGVjaW1hbERpZ2l0OmZ1bmN0aW9uKGUpe3JldHVybiBlPj00OCYmZTw9NTd9LGlzSGV4RGlnaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfSxpc09jdGFsRGlnaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTQ4JiZlPD01NX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYpLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudCx0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LkpTWENsb3NpbmdFbGVtZW50PWk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYRWxlbWVudCx0aGlzLm9wZW5pbmdFbGVtZW50PWUsdGhpcy5jaGlsZHJlbj10LHRoaXMuY2xvc2luZ0VsZW1lbnQ9bn1yZXR1cm4gZX0oKTt0LkpTWEVsZW1lbnQ9bzt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYRW1wdHlFeHByZXNzaW9ufXJldHVybiBlfSgpO3QuSlNYRW1wdHlFeHByZXNzaW9uPWE7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hFeHByZXNzaW9uQ29udGFpbmVyLHRoaXMuZXhwcmVzc2lvbj1lfXJldHVybiBlfSgpO3QuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcj1zO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYSWRlbnRpZmllcix0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LkpTWElkZW50aWZpZXI9dTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYTWVtYmVyRXhwcmVzc2lvbix0aGlzLm9iamVjdD1lLHRoaXMucHJvcGVydHk9dH1yZXR1cm4gZX0oKTt0LkpTWE1lbWJlckV4cHJlc3Npb249Yzt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYQXR0cmlidXRlLHRoaXMubmFtZT1lLHRoaXMudmFsdWU9dH1yZXR1cm4gZX0oKTt0LkpTWEF0dHJpYnV0ZT1sO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZSx0aGlzLm5hbWVzcGFjZT1lLHRoaXMubmFtZT10fXJldHVybiBlfSgpO3QuSlNYTmFtZXNwYWNlZE5hbWU9cDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudCx0aGlzLm5hbWU9ZSx0aGlzLnNlbGZDbG9zaW5nPXQsdGhpcy5hdHRyaWJ1dGVzPW59cmV0dXJuIGV9KCk7dC5KU1hPcGVuaW5nRWxlbWVudD1mO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYU3ByZWFkQXR0cmlidXRlLHRoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LkpTWFNwcmVhZEF0dHJpYnV0ZT1kO3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hUZXh0LHRoaXMudmFsdWU9ZSx0aGlzLnJhdz10fXJldHVybiBlfSgpO3QuSlNYVGV4dD1ofSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KU1hTeW50YXg9e0pTWEF0dHJpYnV0ZToiSlNYQXR0cmlidXRlIixKU1hDbG9zaW5nRWxlbWVudDoiSlNYQ2xvc2luZ0VsZW1lbnQiLEpTWEVsZW1lbnQ6IkpTWEVsZW1lbnQiLEpTWEVtcHR5RXhwcmVzc2lvbjoiSlNYRW1wdHlFeHByZXNzaW9uIixKU1hFeHByZXNzaW9uQ29udGFpbmVyOiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIixKU1hJZGVudGlmaWVyOiJKU1hJZGVudGlmaWVyIixKU1hNZW1iZXJFeHByZXNzaW9uOiJKU1hNZW1iZXJFeHByZXNzaW9uIixKU1hOYW1lc3BhY2VkTmFtZToiSlNYTmFtZXNwYWNlZE5hbWUiLEpTWE9wZW5pbmdFbGVtZW50OiJKU1hPcGVuaW5nRWxlbWVudCIsSlNYU3ByZWFkQXR0cmlidXRlOiJKU1hTcHJlYWRBdHRyaWJ1dGUiLEpTWFRleHQ6IkpTWFRleHQifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQXJyYXlFeHByZXNzaW9uLHRoaXMuZWxlbWVudHM9ZX1yZXR1cm4gZX0oKTt0LkFycmF5RXhwcmVzc2lvbj1pO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQXJyYXlQYXR0ZXJuLHRoaXMuZWxlbWVudHM9ZX1yZXR1cm4gZX0oKTt0LkFycmF5UGF0dGVybj1vO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9bnVsbCx0aGlzLnBhcmFtcz1lLHRoaXMuYm9keT10LHRoaXMuZ2VuZXJhdG9yPSExLHRoaXMuZXhwcmVzc2lvbj1uLHRoaXMuYXN5bmM9ITF9cmV0dXJuIGV9KCk7dC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbj1hO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uLHRoaXMub3BlcmF0b3I9ZSx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PW59cmV0dXJuIGV9KCk7dC5Bc3NpZ25tZW50RXhwcmVzc2lvbj1zO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybix0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXR9cmV0dXJuIGV9KCk7dC5Bc3NpZ25tZW50UGF0dGVybj11O3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9bnVsbCx0aGlzLnBhcmFtcz1lLHRoaXMuYm9keT10LHRoaXMuZ2VuZXJhdG9yPSExLHRoaXMuZXhwcmVzc2lvbj1uLHRoaXMuYXN5bmM9ITB9cmV0dXJuIGV9KCk7dC5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uPWM7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbix0aGlzLmlkPWUsdGhpcy5wYXJhbXM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj0hMSx0aGlzLmV4cHJlc3Npb249ITEsdGhpcy5hc3luYz0hMH1yZXR1cm4gZX0oKTt0LkFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbj1sO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbix0aGlzLmlkPWUsdGhpcy5wYXJhbXM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj0hMSx0aGlzLmV4cHJlc3Npb249ITEsdGhpcy5hc3luYz0hMH1yZXR1cm4gZX0oKTt0LkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uPXA7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5Bd2FpdEV4cHJlc3Npb24sdGhpcy5hcmd1bWVudD1lfXJldHVybiBlfSgpO3QuQXdhaXRFeHByZXNzaW9uPWY7dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgaT0ifHwiPT09ZXx8IiYmIj09PWU7dGhpcy50eXBlPWk/ci5TeW50YXguTG9naWNhbEV4cHJlc3Npb246ci5TeW50YXguQmluYXJ5RXhwcmVzc2lvbix0aGlzLm9wZXJhdG9yPWUsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1ufXJldHVybiBlfSgpO3QuQmluYXJ5RXhwcmVzc2lvbj1kO3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQmxvY2tTdGF0ZW1lbnQsdGhpcy5ib2R5PWV9cmV0dXJuIGV9KCk7dC5CbG9ja1N0YXRlbWVudD1oO3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQnJlYWtTdGF0ZW1lbnQsdGhpcy5sYWJlbD1lfXJldHVybiBlfSgpO3QuQnJlYWtTdGF0ZW1lbnQ9bTt2YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguQ2FsbEV4cHJlc3Npb24sdGhpcy5jYWxsZWU9ZSx0aGlzLmFyZ3VtZW50cz10fXJldHVybiBlfSgpO3QuQ2FsbEV4cHJlc3Npb249Zzt2YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguQ2F0Y2hDbGF1c2UsdGhpcy5wYXJhbT1lLHRoaXMuYm9keT10fXJldHVybiBlfSgpO3QuQ2F0Y2hDbGF1c2U9eTt2YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LkNsYXNzQm9keSx0aGlzLmJvZHk9ZX1yZXR1cm4gZX0oKTt0LkNsYXNzQm9keT12O3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkNsYXNzRGVjbGFyYXRpb24sdGhpcy5pZD1lLHRoaXMuc3VwZXJDbGFzcz10LHRoaXMuYm9keT1ufXJldHVybiBlfSgpO3QuQ2xhc3NEZWNsYXJhdGlvbj1iO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkNsYXNzRXhwcmVzc2lvbix0aGlzLmlkPWUsdGhpcy5zdXBlckNsYXNzPXQsdGhpcy5ib2R5PW59cmV0dXJuIGV9KCk7dC5DbGFzc0V4cHJlc3Npb249eDt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguTWVtYmVyRXhwcmVzc2lvbix0aGlzLmNvbXB1dGVkPSEwLHRoaXMub2JqZWN0PWUsdGhpcy5wcm9wZXJ0eT10fXJldHVybiBlfSgpO3QuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uPUM7dmFyIEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uLHRoaXMudGVzdD1lLHRoaXMuY29uc2VxdWVudD10LHRoaXMuYWx0ZXJuYXRlPW59cmV0dXJuIGV9KCk7dC5Db25kaXRpb25hbEV4cHJlc3Npb249RTt2YXIgRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LHRoaXMubGFiZWw9ZX1yZXR1cm4gZX0oKTt0LkNvbnRpbnVlU3RhdGVtZW50PUQ7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXIuU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50fXJldHVybiBlfSgpO3QuRGVidWdnZXJTdGF0ZW1lbnQ9dzt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCx0aGlzLmV4cHJlc3Npb249ZSx0aGlzLmRpcmVjdGl2ZT10fXJldHVybiBlfSgpO3QuRGlyZWN0aXZlPVM7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsdGhpcy5ib2R5PWUsdGhpcy50ZXN0PXR9cmV0dXJuIGV9KCk7dC5Eb1doaWxlU3RhdGVtZW50PWs7dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXIuU3ludGF4LkVtcHR5U3RhdGVtZW50fXJldHVybiBlfSgpO3QuRW1wdHlTdGF0ZW1lbnQ9QTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LkV4cG9ydEFsbERlY2xhcmF0aW9uLHRoaXMuc291cmNlPWV9cmV0dXJuIGV9KCk7dC5FeHBvcnRBbGxEZWNsYXJhdGlvbj1fO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uLHRoaXMuZGVjbGFyYXRpb249ZX1yZXR1cm4gZX0oKTt0LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbj1UO3ZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sdGhpcy5kZWNsYXJhdGlvbj1lLHRoaXMuc3BlY2lmaWVycz10LHRoaXMuc291cmNlPW59cmV0dXJuIGV9KCk7dC5FeHBvcnROYW1lZERlY2xhcmF0aW9uPU87dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkV4cG9ydFNwZWNpZmllcix0aGlzLmV4cG9ydGVkPXQsdGhpcy5sb2NhbD1lfXJldHVybiBlfSgpO3QuRXhwb3J0U3BlY2lmaWVyPUY7dmFyIE49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50LHRoaXMuZXhwcmVzc2lvbj1lfXJldHVybiBlfSgpO3QuRXhwcmVzc2lvblN0YXRlbWVudD1OO3ZhciBJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkZvckluU3RhdGVtZW50LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9dCx0aGlzLmJvZHk9bix0aGlzLmVhY2g9ITF9cmV0dXJuIGV9KCk7dC5Gb3JJblN0YXRlbWVudD1JO3ZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkZvck9mU3RhdGVtZW50LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9dCx0aGlzLmJvZHk9bn1yZXR1cm4gZX0oKTt0LkZvck9mU3RhdGVtZW50PUw7dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLGkpe3RoaXMudHlwZT1yLlN5bnRheC5Gb3JTdGF0ZW1lbnQsdGhpcy5pbml0PWUsdGhpcy50ZXN0PXQsdGhpcy51cGRhdGU9bix0aGlzLmJvZHk9aX1yZXR1cm4gZX0oKTt0LkZvclN0YXRlbWVudD1QO3ZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixpKXt0aGlzLnR5cGU9ci5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbix0aGlzLmlkPWUsdGhpcy5wYXJhbXM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj1pLHRoaXMuZXhwcmVzc2lvbj0hMSx0aGlzLmFzeW5jPSExfXJldHVybiBlfSgpO3QuRnVuY3Rpb25EZWNsYXJhdGlvbj1NO3ZhciBqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixpKXt0aGlzLnR5cGU9ci5TeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9ZSx0aGlzLnBhcmFtcz10LHRoaXMuYm9keT1uLHRoaXMuZ2VuZXJhdG9yPWksdGhpcy5leHByZXNzaW9uPSExLHRoaXMuYXN5bmM9ITF9cmV0dXJuIGV9KCk7dC5GdW5jdGlvbkV4cHJlc3Npb249ajt2YXIgUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LklkZW50aWZpZXIsdGhpcy5uYW1lPWV9cmV0dXJuIGV9KCk7dC5JZGVudGlmaWVyPVI7dmFyIEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguSWZTdGF0ZW1lbnQsdGhpcy50ZXN0PWUsdGhpcy5jb25zZXF1ZW50PXQsdGhpcy5hbHRlcm5hdGU9bn1yZXR1cm4gZX0oKTt0LklmU3RhdGVtZW50PUI7dmFyICQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkltcG9ydERlY2xhcmF0aW9uLHRoaXMuc3BlY2lmaWVycz1lLHRoaXMuc291cmNlPXR9cmV0dXJuIGV9KCk7dC5JbXBvcnREZWNsYXJhdGlvbj0kO3ZhciBVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguSW1wb3J0RGVmYXVsdFNwZWNpZmllcix0aGlzLmxvY2FsPWV9cmV0dXJuIGV9KCk7dC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyPVU7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsdGhpcy5sb2NhbD1lfXJldHVybiBlfSgpO3QuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyPXo7dmFyIEc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkltcG9ydFNwZWNpZmllcix0aGlzLmxvY2FsPWUsdGhpcy5pbXBvcnRlZD10fXJldHVybiBlfSgpO3QuSW1wb3J0U3BlY2lmaWVyPUc7dmFyIFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQsdGhpcy5sYWJlbD1lLHRoaXMuYm9keT10fXJldHVybiBlfSgpO3QuTGFiZWxlZFN0YXRlbWVudD1WO3ZhciBxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5MaXRlcmFsLHRoaXMudmFsdWU9ZSx0aGlzLnJhdz10fXJldHVybiBlfSgpO3QuTGl0ZXJhbD1xO3ZhciBIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5NZXRhUHJvcGVydHksdGhpcy5tZXRhPWUsdGhpcy5wcm9wZXJ0eT10fXJldHVybiBlfSgpO3QuTWV0YVByb3BlcnR5PUg7dmFyIFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLGksbyl7dGhpcy50eXBlPXIuU3ludGF4Lk1ldGhvZERlZmluaXRpb24sdGhpcy5rZXk9ZSx0aGlzLmNvbXB1dGVkPXQsdGhpcy52YWx1ZT1uLHRoaXMua2luZD1pLHRoaXMuc3RhdGljPW99cmV0dXJuIGV9KCk7dC5NZXRob2REZWZpbml0aW9uPVc7dmFyIFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5Qcm9ncmFtLHRoaXMuYm9keT1lLHRoaXMuc291cmNlVHlwZT0ibW9kdWxlIn1yZXR1cm4gZX0oKTt0Lk1vZHVsZT1RO3ZhciBLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5OZXdFeHByZXNzaW9uLHRoaXMuY2FsbGVlPWUsdGhpcy5hcmd1bWVudHM9dH1yZXR1cm4gZX0oKTt0Lk5ld0V4cHJlc3Npb249Szt2YXIgSj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sdGhpcy5wcm9wZXJ0aWVzPWV9cmV0dXJuIGV9KCk7dC5PYmplY3RFeHByZXNzaW9uPUo7dmFyIFk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5PYmplY3RQYXR0ZXJuLHRoaXMucHJvcGVydGllcz1lfXJldHVybiBlfSgpO3QuT2JqZWN0UGF0dGVybj1ZO3ZhciBYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixpLG8sYSl7dGhpcy50eXBlPXIuU3ludGF4LlByb3BlcnR5LHRoaXMua2V5PXQsdGhpcy5jb21wdXRlZD1uLHRoaXMudmFsdWU9aSx0aGlzLmtpbmQ9ZSx0aGlzLm1ldGhvZD1vLHRoaXMuc2hvcnRoYW5kPWF9cmV0dXJuIGV9KCk7dC5Qcm9wZXJ0eT1YO3ZhciBaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixpKXt0aGlzLnR5cGU9ci5TeW50YXguTGl0ZXJhbCx0aGlzLnZhbHVlPWUsdGhpcy5yYXc9dCx0aGlzLnJlZ2V4PXtwYXR0ZXJuOm4sZmxhZ3M6aX19cmV0dXJuIGV9KCk7dC5SZWdleExpdGVyYWw9Wjt2YXIgZWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5SZXN0RWxlbWVudCx0aGlzLmFyZ3VtZW50PWV9cmV0dXJuIGV9KCk7dC5SZXN0RWxlbWVudD1lZTt2YXIgdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsdGhpcy5hcmd1bWVudD1lfXJldHVybiBlfSgpO3QuUmV0dXJuU3RhdGVtZW50PXRlO3ZhciBuZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LlByb2dyYW0sdGhpcy5ib2R5PWUsdGhpcy5zb3VyY2VUeXBlPSJzY3JpcHQifXJldHVybiBlfSgpO3QuU2NyaXB0PW5lO3ZhciByZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbix0aGlzLmV4cHJlc3Npb25zPWV9cmV0dXJuIGV9KCk7dC5TZXF1ZW5jZUV4cHJlc3Npb249cmU7dmFyIGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguU3ByZWFkRWxlbWVudCx0aGlzLmFyZ3VtZW50PWV9cmV0dXJuIGV9KCk7dC5TcHJlYWRFbGVtZW50PWllO3ZhciBvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguTWVtYmVyRXhwcmVzc2lvbix0aGlzLmNvbXB1dGVkPSExLHRoaXMub2JqZWN0PWUsdGhpcy5wcm9wZXJ0eT10fXJldHVybiBlfSgpO3QuU3RhdGljTWVtYmVyRXhwcmVzc2lvbj1vZTt2YXIgYWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXIuU3ludGF4LlN1cGVyfXJldHVybiBlfSgpO3QuU3VwZXI9YWU7dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5Td2l0Y2hDYXNlLHRoaXMudGVzdD1lLHRoaXMuY29uc2VxdWVudD10fXJldHVybiBlfSgpO3QuU3dpdGNoQ2FzZT1zZTt2YXIgdWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlN3aXRjaFN0YXRlbWVudCx0aGlzLmRpc2NyaW1pbmFudD1lLHRoaXMuY2FzZXM9dH1yZXR1cm4gZX0oKTt0LlN3aXRjaFN0YXRlbWVudD11ZTt2YXIgY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbix0aGlzLnRhZz1lLHRoaXMucXVhc2k9dH1yZXR1cm4gZX0oKTt0LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbj1jZTt2YXIgbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlRlbXBsYXRlRWxlbWVudCx0aGlzLnZhbHVlPWUsdGhpcy50YWlsPXR9cmV0dXJuIGV9KCk7dC5UZW1wbGF0ZUVsZW1lbnQ9bGU7dmFyIHBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5UZW1wbGF0ZUxpdGVyYWwsdGhpcy5xdWFzaXM9ZSx0aGlzLmV4cHJlc3Npb25zPXR9cmV0dXJuIGV9KCk7dC5UZW1wbGF0ZUxpdGVyYWw9cGU7dmFyIGZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudHlwZT1yLlN5bnRheC5UaGlzRXhwcmVzc2lvbn1yZXR1cm4gZX0oKTt0LlRoaXNFeHByZXNzaW9uPWZlO3ZhciBkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LlRocm93U3RhdGVtZW50LHRoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LlRocm93U3RhdGVtZW50PWRlO3ZhciBoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudHlwZT1yLlN5bnRheC5UcnlTdGF0ZW1lbnQsdGhpcy5ibG9jaz1lLHRoaXMuaGFuZGxlcj10LHRoaXMuZmluYWxpemVyPW59cmV0dXJuIGV9KCk7dC5UcnlTdGF0ZW1lbnQ9aGU7dmFyIG1lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5VbmFyeUV4cHJlc3Npb24sdGhpcy5vcGVyYXRvcj1lLHRoaXMuYXJndW1lbnQ9dCx0aGlzLnByZWZpeD0hMH1yZXR1cm4gZX0oKTt0LlVuYXJ5RXhwcmVzc2lvbj1tZTt2YXIgZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguVXBkYXRlRXhwcmVzc2lvbix0aGlzLm9wZXJhdG9yPWUsdGhpcy5hcmd1bWVudD10LHRoaXMucHJlZml4PW59cmV0dXJuIGV9KCk7dC5VcGRhdGVFeHByZXNzaW9uPWdlO3ZhciB5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbix0aGlzLmRlY2xhcmF0aW9ucz1lLHRoaXMua2luZD10fXJldHVybiBlfSgpO3QuVmFyaWFibGVEZWNsYXJhdGlvbj15ZTt2YXIgdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcix0aGlzLmlkPWUsdGhpcy5pbml0PXR9cmV0dXJuIGV9KCk7dC5WYXJpYWJsZURlY2xhcmF0b3I9dmU7dmFyIGJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5XaGlsZVN0YXRlbWVudCx0aGlzLnRlc3Q9ZSx0aGlzLmJvZHk9dH1yZXR1cm4gZX0oKTt0LldoaWxlU3RhdGVtZW50PWJlO3ZhciB4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguV2l0aFN0YXRlbWVudCx0aGlzLm9iamVjdD1lLHRoaXMuYm9keT10fXJldHVybiBlfSgpO3QuV2l0aFN0YXRlbWVudD14ZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LllpZWxkRXhwcmVzc2lvbix0aGlzLmFyZ3VtZW50PWUsdGhpcy5kZWxlZ2F0ZT10fXJldHVybiBlfSgpO3QuWWllbGRFeHByZXNzaW9uPUNlfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9bigxMCksbz1uKDExKSxhPW4oNykscz1uKDEyKSx1PW4oMiksYz1uKDEzKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuY29uZmlnPXtyYW5nZToiYm9vbGVhbiI9PT10eXBlb2YgdC5yYW5nZSYmdC5yYW5nZSxsb2M6ImJvb2xlYW4iPT09dHlwZW9mIHQubG9jJiZ0LmxvYyxzb3VyY2U6bnVsbCx0b2tlbnM6ImJvb2xlYW4iPT09dHlwZW9mIHQudG9rZW5zJiZ0LnRva2Vucyxjb21tZW50OiJib29sZWFuIj09PXR5cGVvZiB0LmNvbW1lbnQmJnQuY29tbWVudCx0b2xlcmFudDoiYm9vbGVhbiI9PT10eXBlb2YgdC50b2xlcmFudCYmdC50b2xlcmFudH0sdGhpcy5jb25maWcubG9jJiZ0LnNvdXJjZSYmbnVsbCE9PXQuc291cmNlJiYodGhpcy5jb25maWcuc291cmNlPVN0cmluZyh0LnNvdXJjZSkpLHRoaXMuZGVsZWdhdGU9bix0aGlzLmVycm9ySGFuZGxlcj1uZXcgaS5FcnJvckhhbmRsZXIsdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhbnQ9dGhpcy5jb25maWcudG9sZXJhbnQsdGhpcy5zY2FubmVyPW5ldyBzLlNjYW5uZXIoZSx0aGlzLmVycm9ySGFuZGxlciksdGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudD10aGlzLmNvbmZpZy5jb21tZW50LHRoaXMub3BlcmF0b3JQcmVjZWRlbmNlPXsiKSI6MCwiOyI6MCwiLCI6MCwiPSI6MCwiXSI6MCwifHwiOjEsIiYmIjoyLCJ8IjozLCJeIjo0LCImIjo1LCI9PSI6NiwiIT0iOjYsIj09PSI6NiwiIT09Ijo2LCI8Ijo3LCI+Ijo3LCI8PSI6NywiPj0iOjcsIjw8Ijo4LCI+PiI6OCwiPj4+Ijo4LCIrIjo5LCItIjo5LCIqIjoxMSwiLyI6MTEsIiUiOjExfSx0aGlzLmxvb2thaGVhZD17dHlwZToyLHZhbHVlOiIiLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OjAsc3RhcnQ6MCxlbmQ6MH0sdGhpcy5oYXNMaW5lVGVybWluYXRvcj0hMSx0aGlzLmNvbnRleHQ9e2lzTW9kdWxlOiExLGF3YWl0OiExLGFsbG93SW46ITAsYWxsb3dTdHJpY3REaXJlY3RpdmU6ITAsYWxsb3dZaWVsZDohMCxmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I6bnVsbCxpc0Fzc2lnbm1lbnRUYXJnZXQ6ITEsaXNCaW5kaW5nRWxlbWVudDohMSxpbkZ1bmN0aW9uQm9keTohMSxpbkl0ZXJhdGlvbjohMSxpblN3aXRjaDohMSxsYWJlbFNldDp7fSxzdHJpY3Q6ITF9LHRoaXMudG9rZW5zPVtdLHRoaXMuc3RhcnRNYXJrZXI9e2luZGV4OjAsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46MH0sdGhpcy5sYXN0TWFya2VyPXtpbmRleDowLGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOjB9LHRoaXMubmV4dFRva2VuKCksdGhpcy5sYXN0TWFya2VyPXtpbmRleDp0aGlzLnNjYW5uZXIuaW5kZXgsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9fXJldHVybiBlLnByb3RvdHlwZS50aHJvd0Vycm9yPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxvPWUucmVwbGFjZSgvJShcZCkvZyxmdW5jdGlvbihlLHQpe3JldHVybiByLmFzc2VydCh0PGkubGVuZ3RoLCJNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlIiksaVt0XX0pLGE9dGhpcy5sYXN0TWFya2VyLmluZGV4LHM9dGhpcy5sYXN0TWFya2VyLmxpbmUsdT10aGlzLmxhc3RNYXJrZXIuY29sdW1uKzE7dGhyb3cgdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoYSxzLHUsbyl9LGUucHJvdG90eXBlLnRvbGVyYXRlRXJyb3I9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG89ZS5yZXBsYWNlKC8lKFxkKS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuYXNzZXJ0KHQ8aS5sZW5ndGgsIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UiKSxpW3RdfSksYT10aGlzLmxhc3RNYXJrZXIuaW5kZXgscz10aGlzLnNjYW5uZXIubGluZU51bWJlcix1PXRoaXMubGFzdE1hcmtlci5jb2x1bW4rMTt0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZUVycm9yKGEscyx1LG8pfSxlLnByb3RvdHlwZS51bmV4cGVjdGVkVG9rZW5FcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dHx8by5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW47aWYoZT8odHx8KHI9Mj09PWUudHlwZT9vLk1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1M6Mz09PWUudHlwZT9vLk1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyOjY9PT1lLnR5cGU/by5NZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyOjg9PT1lLnR5cGU/by5NZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5nOjEwPT09ZS50eXBlP28uTWVzc2FnZXMuVW5leHBlY3RlZFRlbXBsYXRlOm8uTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLDQ9PT1lLnR5cGUmJih0aGlzLnNjYW5uZXIuaXNGdXR1cmVSZXNlcnZlZFdvcmQoZS52YWx1ZSk/cj1vLk1lc3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZDp0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGUudmFsdWUpJiYocj1vLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCkpKSxuPWUudmFsdWUpOm49IklMTEVHQUwiLHI9ci5yZXBsYWNlKCIlMCIsbiksZSYmIm51bWJlciI9PT10eXBlb2YgZS5saW5lTnVtYmVyKXt2YXIgaT1lLnN0YXJ0LGE9ZS5saW5lTnVtYmVyLHM9dGhpcy5sYXN0TWFya2VyLmluZGV4LXRoaXMubGFzdE1hcmtlci5jb2x1bW4sdT1lLnN0YXJ0LXMrMTtyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoaSxhLHUscil9dmFyIGk9dGhpcy5sYXN0TWFya2VyLmluZGV4LGE9dGhpcy5sYXN0TWFya2VyLmxpbmUsdT10aGlzLmxhc3RNYXJrZXIuY29sdW1uKzE7cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGksYSx1LHIpfSxlLnByb3RvdHlwZS50aHJvd1VuZXhwZWN0ZWRUb2tlbj1mdW5jdGlvbihlLHQpe3Rocm93IHRoaXMudW5leHBlY3RlZFRva2VuRXJyb3IoZSx0KX0sZS5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW49ZnVuY3Rpb24oZSx0KXt0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZSh0aGlzLnVuZXhwZWN0ZWRUb2tlbkVycm9yKGUsdCkpfSxlLnByb3RvdHlwZS5jb2xsZWN0Q29tbWVudHM9ZnVuY3Rpb24oKXtpZih0aGlzLmNvbmZpZy5jb21tZW50KXt2YXIgZT10aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7aWYoZS5sZW5ndGg+MCYmdGhpcy5kZWxlZ2F0ZSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZVt0XSxyPXZvaWQgMDtyPXt0eXBlOm4ubXVsdGlMaW5lPyJCbG9ja0NvbW1lbnQiOiJMaW5lQ29tbWVudCIsdmFsdWU6dGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShuLnNsaWNlWzBdLG4uc2xpY2VbMV0pfSx0aGlzLmNvbmZpZy5yYW5nZSYmKHIucmFuZ2U9bi5yYW5nZSksdGhpcy5jb25maWcubG9jJiYoci5sb2M9bi5sb2MpO3ZhciBpPXtzdGFydDp7bGluZTpuLmxvYy5zdGFydC5saW5lLGNvbHVtbjpuLmxvYy5zdGFydC5jb2x1bW4sb2Zmc2V0Om4ucmFuZ2VbMF19LGVuZDp7bGluZTpuLmxvYy5lbmQubGluZSxjb2x1bW46bi5sb2MuZW5kLmNvbHVtbixvZmZzZXQ6bi5yYW5nZVsxXX19O3RoaXMuZGVsZWdhdGUocixpKX19ZWxzZSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCl9LGUucHJvdG90eXBlLmdldFRva2VuUmF3PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKGUuc3RhcnQsZS5lbmQpfSxlLnByb3RvdHlwZS5jb252ZXJ0VG9rZW49ZnVuY3Rpb24oZSl7dmFyIHQ9e3R5cGU6Yy5Ub2tlbk5hbWVbZS50eXBlXSx2YWx1ZTp0aGlzLmdldFRva2VuUmF3KGUpfTtpZih0aGlzLmNvbmZpZy5yYW5nZSYmKHQucmFuZ2U9W2Uuc3RhcnQsZS5lbmRdKSx0aGlzLmNvbmZpZy5sb2MmJih0LmxvYz17c3RhcnQ6e2xpbmU6dGhpcy5zdGFydE1hcmtlci5saW5lLGNvbHVtbjp0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbn0sZW5kOntsaW5lOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydH19KSw5PT09ZS50eXBlKXt2YXIgbj1lLnBhdHRlcm4scj1lLmZsYWdzO3QucmVnZXg9e3BhdHRlcm46bixmbGFnczpyfX1yZXR1cm4gdH0sZS5wcm90b3R5cGUubmV4dFRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQ7dGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleCx0aGlzLmxhc3RNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLmxhc3RNYXJrZXIuY29sdW1uPXRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0LHRoaXMuY29sbGVjdENvbW1lbnRzKCksdGhpcy5zY2FubmVyLmluZGV4IT09dGhpcy5zdGFydE1hcmtlci5pbmRleCYmKHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMuc3RhcnRNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydCk7dmFyIHQ9dGhpcy5zY2FubmVyLmxleCgpO3JldHVybiB0aGlzLmhhc0xpbmVUZXJtaW5hdG9yPWUubGluZU51bWJlciE9PXQubGluZU51bWJlcix0JiZ0aGlzLmNvbnRleHQuc3RyaWN0JiYzPT09dC50eXBlJiZ0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHQudmFsdWUpJiYodC50eXBlPTQpLHRoaXMubG9va2FoZWFkPXQsdGhpcy5jb25maWcudG9rZW5zJiYyIT09dC50eXBlJiZ0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHQpKSxlfSxlLnByb3RvdHlwZS5uZXh0UmVnZXhUb2tlbj1mdW5jdGlvbigpe3RoaXMuY29sbGVjdENvbW1lbnRzKCk7dmFyIGU9dGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTtyZXR1cm4gdGhpcy5jb25maWcudG9rZW5zJiYodGhpcy50b2tlbnMucG9wKCksdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbihlKSkpLHRoaXMubG9va2FoZWFkPWUsdGhpcy5uZXh0VG9rZW4oKSxlfSxlLnByb3RvdHlwZS5jcmVhdGVOb2RlPWZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OnRoaXMuc3RhcnRNYXJrZXIuaW5kZXgsbGluZTp0aGlzLnN0YXJ0TWFya2VyLmxpbmUsY29sdW1uOnRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufX0sZS5wcm90b3R5cGUuc3RhcnROb2RlPWZ1bmN0aW9uKGUpe3JldHVybntpbmRleDplLnN0YXJ0LGxpbmU6ZS5saW5lTnVtYmVyLGNvbHVtbjplLnN0YXJ0LWUubGluZVN0YXJ0fX0sZS5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmNvbmZpZy5yYW5nZSYmKHQucmFuZ2U9W2UuaW5kZXgsdGhpcy5sYXN0TWFya2VyLmluZGV4XSksdGhpcy5jb25maWcubG9jJiYodC5sb2M9e3N0YXJ0OntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW59LGVuZDp7bGluZTp0aGlzLmxhc3RNYXJrZXIubGluZSxjb2x1bW46dGhpcy5sYXN0TWFya2VyLmNvbHVtbn19LHRoaXMuY29uZmlnLnNvdXJjZSYmKHQubG9jLnNvdXJjZT10aGlzLmNvbmZpZy5zb3VyY2UpKSx0aGlzLmRlbGVnYXRlKXt2YXIgbj17c3RhcnQ6e2xpbmU6ZS5saW5lLGNvbHVtbjplLmNvbHVtbixvZmZzZXQ6ZS5pbmRleH0sZW5kOntsaW5lOnRoaXMubGFzdE1hcmtlci5saW5lLGNvbHVtbjp0aGlzLmxhc3RNYXJrZXIuY29sdW1uLG9mZnNldDp0aGlzLmxhc3RNYXJrZXIuaW5kZXh9fTt0aGlzLmRlbGVnYXRlKHQsbil9cmV0dXJuIHR9LGUucHJvdG90eXBlLmV4cGVjdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm5leHRUb2tlbigpOzc9PT10LnR5cGUmJnQudmFsdWU9PT1lfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfSxlLnByb3RvdHlwZS5leHBlY3RDb21tYVNlcGFyYXRvcj1mdW5jdGlvbigpe2lmKHRoaXMuY29uZmlnLnRvbGVyYW50KXt2YXIgZT10aGlzLmxvb2thaGVhZDs3PT09ZS50eXBlJiYiLCI9PT1lLnZhbHVlP3RoaXMubmV4dFRva2VuKCk6Nz09PWUudHlwZSYmIjsiPT09ZS52YWx1ZT8odGhpcy5uZXh0VG9rZW4oKSx0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGUpKTp0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGUsby5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pfWVsc2UgdGhpcy5leHBlY3QoIiwiKX0sZS5wcm90b3R5cGUuZXhwZWN0S2V5d29yZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm5leHRUb2tlbigpOzQ9PT10LnR5cGUmJnQudmFsdWU9PT1lfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfSxlLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gNz09PXRoaXMubG9va2FoZWFkLnR5cGUmJnRoaXMubG9va2FoZWFkLnZhbHVlPT09ZX0sZS5wcm90b3R5cGUubWF0Y2hLZXl3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiA0PT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy5sb29rYWhlYWQudmFsdWU9PT1lfSxlLnByb3RvdHlwZS5tYXRjaENvbnRleHR1YWxLZXl3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiAzPT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy5sb29rYWhlYWQudmFsdWU9PT1lfSxlLnByb3RvdHlwZS5tYXRjaEFzc2lnbj1mdW5jdGlvbigpe2lmKDchPT10aGlzLmxvb2thaGVhZC50eXBlKXJldHVybiExO3ZhciBlPXRoaXMubG9va2FoZWFkLnZhbHVlO3JldHVybiI9Ij09PWV8fCIqPSI9PT1lfHwiKio9Ij09PWV8fCIvPSI9PT1lfHwiJT0iPT09ZXx8Iis9Ij09PWV8fCItPSI9PT1lfHwiPDw9Ij09PWV8fCI+Pj0iPT09ZXx8Ij4+Pj0iPT09ZXx8IiY9Ij09PWV8fCJePSI9PT1lfHwifD0iPT09ZX0sZS5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3JhbW1hcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCxuPXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQscj10aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSEwLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITAsdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcj1udWxsO3ZhciBpPWUuY2FsbCh0aGlzKTtyZXR1cm4gbnVsbCE9PXRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3ImJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciksdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9dCx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PW4sdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcj1yLGl9LGUucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQsbj10aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0LHI9dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMCx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSEwLHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9bnVsbDt2YXIgaT1lLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PXRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50JiZ0LHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCYmbix0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPXJ8fHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IsaX0sZS5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xvbj1mdW5jdGlvbigpe3RoaXMubWF0Y2goIjsiKT90aGlzLm5leHRUb2tlbigpOnRoaXMuaGFzTGluZVRlcm1pbmF0b3J8fCgyPT09dGhpcy5sb29rYWhlYWQudHlwZXx8dGhpcy5tYXRjaCgifSIpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSx0aGlzLmxhc3RNYXJrZXIuaW5kZXg9dGhpcy5zdGFydE1hcmtlci5pbmRleCx0aGlzLmxhc3RNYXJrZXIubGluZT10aGlzLnN0YXJ0TWFya2VyLmxpbmUsdGhpcy5sYXN0TWFya2VyLmNvbHVtbj10aGlzLnN0YXJ0TWFya2VyLmNvbHVtbil9LGUucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj10aGlzLmNyZWF0ZU5vZGUoKTtzd2l0Y2godGhpcy5sb29rYWhlYWQudHlwZSl7Y2FzZSAzOih0aGlzLmNvbnRleHQuaXNNb2R1bGV8fHRoaXMuY29udGV4dC5hd2FpdCkmJiJhd2FpdCI9PT10aGlzLmxvb2thaGVhZC52YWx1ZSYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksZT10aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpP3RoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTp0aGlzLmZpbmFsaXplKHIsbmV3IGEuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7YnJlYWs7Y2FzZSA2OmNhc2UgODp0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLmxvb2thaGVhZC5vY3RhbCYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCxvLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0PXRoaXMubmV4dFRva2VuKCksbj10aGlzLmdldFRva2VuUmF3KHQpLGU9dGhpcy5maW5hbGl6ZShyLG5ldyBhLkxpdGVyYWwodC52YWx1ZSxuKSk7YnJlYWs7Y2FzZSAxOnRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdD10aGlzLm5leHRUb2tlbigpLG49dGhpcy5nZXRUb2tlblJhdyh0KSxlPXRoaXMuZmluYWxpemUocixuZXcgYS5MaXRlcmFsKCJ0cnVlIj09PXQudmFsdWUsbikpO2JyZWFrO2Nhc2UgNTp0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLHQ9dGhpcy5uZXh0VG9rZW4oKSxuPXRoaXMuZ2V0VG9rZW5SYXcodCksZT10aGlzLmZpbmFsaXplKHIsbmV3IGEuTGl0ZXJhbChudWxsLG4pKTticmVhaztjYXNlIDEwOmU9dGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO2JyZWFrO2Nhc2UgNzpzd2l0Y2godGhpcy5sb29rYWhlYWQudmFsdWUpe2Nhc2UiKCI6dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUdyb3VwRXhwcmVzc2lvbik7YnJlYWs7Y2FzZSJbIjplPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXJyYXlJbml0aWFsaXplcik7YnJlYWs7Y2FzZSJ7IjplPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIpO2JyZWFrO2Nhc2UiLyI6Y2FzZSIvPSI6dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0aGlzLnNjYW5uZXIuaW5kZXg9dGhpcy5zdGFydE1hcmtlci5pbmRleCx0PXRoaXMubmV4dFJlZ2V4VG9rZW4oKSxuPXRoaXMuZ2V0VG9rZW5SYXcodCksZT10aGlzLmZpbmFsaXplKHIsbmV3IGEuUmVnZXhMaXRlcmFsKHQucmVnZXgsbix0LnBhdHRlcm4sdC5mbGFncykpO2JyZWFrO2RlZmF1bHQ6ZT10aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfWJyZWFrO2Nhc2UgNDohdGhpcy5jb250ZXh0LnN0cmljdCYmdGhpcy5jb250ZXh0LmFsbG93WWllbGQmJnRoaXMubWF0Y2hLZXl3b3JkKCJ5aWVsZCIpP2U9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk6IXRoaXMuY29udGV4dC5zdHJpY3QmJnRoaXMubWF0Y2hLZXl3b3JkKCJsZXQiKT9lPXRoaXMuZmluYWxpemUocixuZXcgYS5JZGVudGlmaWVyKHRoaXMubmV4dFRva2VuKCkudmFsdWUpKToodGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0aGlzLm1hdGNoS2V5d29yZCgiZnVuY3Rpb24iKT9lPXRoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTp0aGlzLm1hdGNoS2V5d29yZCgidGhpcyIpPyh0aGlzLm5leHRUb2tlbigpLGU9dGhpcy5maW5hbGl6ZShyLG5ldyBhLlRoaXNFeHByZXNzaW9uKSk6ZT10aGlzLm1hdGNoS2V5d29yZCgiY2xhc3MiKT90aGlzLnBhcnNlQ2xhc3NFeHByZXNzaW9uKCk6dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKSk7YnJlYWs7ZGVmYXVsdDplPXRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlU3ByZWFkRWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0KCIuLi4iKTt2YXIgdD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLlNwcmVhZEVsZW1lbnQodCkpfSxlLnByb3RvdHlwZS5wYXJzZUFycmF5SW5pdGlhbGl6ZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PVtdO2Zvcih0aGlzLmV4cGVjdCgiWyIpOyF0aGlzLm1hdGNoKCJdIik7KWlmKHRoaXMubWF0Y2goIiwiKSl0aGlzLm5leHRUb2tlbigpLHQucHVzaChudWxsKTtlbHNlIGlmKHRoaXMubWF0Y2goIi4uLiIpKXt2YXIgbj10aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpO3RoaXMubWF0Y2goIl0iKXx8KHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdGhpcy5leHBlY3QoIiwiKSksdC5wdXNoKG4pfWVsc2UgdC5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKSx0aGlzLm1hdGNoKCJdIil8fHRoaXMuZXhwZWN0KCIsIik7cmV0dXJuIHRoaXMuZXhwZWN0KCJdIiksdGhpcy5maW5hbGl6ZShlLG5ldyBhLkFycmF5RXhwcmVzc2lvbih0KSl9LGUucHJvdG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2Q9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMTt2YXIgdD10aGlzLmNvbnRleHQuc3RyaWN0LG49dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1lLnNpbXBsZTt2YXIgcj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMpO3JldHVybiB0aGlzLmNvbnRleHQuc3RyaWN0JiZlLmZpcnN0UmVzdHJpY3RlZCYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihlLmZpcnN0UmVzdHJpY3RlZCxlLm1lc3NhZ2UpLHRoaXMuY29udGV4dC5zdHJpY3QmJmUuc3RyaWN0ZWQmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZS5zdHJpY3RlZCxlLm1lc3NhZ2UpLHRoaXMuY29udGV4dC5zdHJpY3Q9dCx0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9bixyfSxlLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMuY29udGV4dC5hbGxvd1lpZWxkO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExO3ZhciBuPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCkscj10aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qobik7cmV0dXJuIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPXQsdGhpcy5maW5hbGl6ZShlLG5ldyBhLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLG4ucGFyYW1zLHIsITEpKX0sZS5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMuY29udGV4dC5hbGxvd1lpZWxkLG49dGhpcy5jb250ZXh0LmF3YWl0O3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExLHRoaXMuY29udGV4dC5hd2FpdD0hMDt2YXIgcj10aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpLGk9dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHIpO3JldHVybiB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD10LHRoaXMuY29udGV4dC5hd2FpdD1uLHRoaXMuZmluYWxpemUoZSxuZXcgYS5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihudWxsLHIucGFyYW1zLGkpKX0sZS5wcm90b3R5cGUucGFyc2VPYmplY3RQcm9wZXJ0eUtleT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jcmVhdGVOb2RlKCksbj10aGlzLm5leHRUb2tlbigpO3N3aXRjaChuLnR5cGUpe2Nhc2UgODpjYXNlIDY6dGhpcy5jb250ZXh0LnN0cmljdCYmbi5vY3RhbCYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihuLG8uTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTt2YXIgcj10aGlzLmdldFRva2VuUmF3KG4pO2U9dGhpcy5maW5hbGl6ZSh0LG5ldyBhLkxpdGVyYWwobi52YWx1ZSxyKSk7YnJlYWs7Y2FzZSAzOmNhc2UgMTpjYXNlIDU6Y2FzZSA0OmU9dGhpcy5maW5hbGl6ZSh0LG5ldyBhLklkZW50aWZpZXIobi52YWx1ZSkpO2JyZWFrO2Nhc2UgNzoiWyI9PT1uLnZhbHVlPyhlPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pLHRoaXMuZXhwZWN0KCJdIikpOmU9dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihuKTticmVhaztkZWZhdWx0OmU9dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihuKX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuaXNQcm9wZXJ0eUtleT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnR5cGU9PT11LlN5bnRheC5JZGVudGlmaWVyJiZlLm5hbWU9PT10fHxlLnR5cGU9PT11LlN5bnRheC5MaXRlcmFsJiZlLnZhbHVlPT09dH0sZS5wcm90b3R5cGUucGFyc2VPYmplY3RQcm9wZXJ0eT1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuY3JlYXRlTm9kZSgpLHI9dGhpcy5sb29rYWhlYWQsaT1udWxsLHM9bnVsbCx1PSExLGM9ITEsbD0hMSxwPSExO2lmKDM9PT1yLnR5cGUpe3ZhciBmPXIudmFsdWU7dGhpcy5uZXh0VG9rZW4oKSx1PXRoaXMubWF0Y2goIlsiKSxwPSF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yJiYiYXN5bmMiPT09ZiYmIXRoaXMubWF0Y2goIjoiKSYmIXRoaXMubWF0Y2goIigiKSYmIXRoaXMubWF0Y2goIioiKSxpPXA/dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk6dGhpcy5maW5hbGl6ZShuLG5ldyBhLklkZW50aWZpZXIoZikpfWVsc2UgdGhpcy5tYXRjaCgiKiIpP3RoaXMubmV4dFRva2VuKCk6KHU9dGhpcy5tYXRjaCgiWyIpLGk9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCkpO3ZhciBkPXRoaXMucXVhbGlmaWVkUHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKTtpZigzPT09ci50eXBlJiYhcCYmImdldCI9PT1yLnZhbHVlJiZkKXQ9ImdldCIsdT10aGlzLm1hdGNoKCJbIiksaT10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSx0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMSxzPXRoaXMucGFyc2VHZXR0ZXJNZXRob2QoKTtlbHNlIGlmKDM9PT1yLnR5cGUmJiFwJiYic2V0Ij09PXIudmFsdWUmJmQpdD0ic2V0Iix1PXRoaXMubWF0Y2goIlsiKSxpPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHM9dGhpcy5wYXJzZVNldHRlck1ldGhvZCgpO2Vsc2UgaWYoNz09PXIudHlwZSYmIioiPT09ci52YWx1ZSYmZCl0PSJpbml0Iix1PXRoaXMubWF0Y2goIlsiKSxpPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHM9dGhpcy5wYXJzZUdlbmVyYXRvck1ldGhvZCgpLGM9ITA7ZWxzZSBpZihpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSx0PSJpbml0Iix0aGlzLm1hdGNoKCI6IikmJiFwKSF1JiZ0aGlzLmlzUHJvcGVydHlLZXkoaSwiX19wcm90b19fIikmJihlLnZhbHVlJiZ0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5EdXBsaWNhdGVQcm90b1Byb3BlcnR5KSxlLnZhbHVlPSEwKSx0aGlzLm5leHRUb2tlbigpLHM9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7ZWxzZSBpZih0aGlzLm1hdGNoKCIoIikpcz1wP3RoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb24oKTp0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpLGM9ITA7ZWxzZSBpZigzPT09ci50eXBlKXt2YXIgZj10aGlzLmZpbmFsaXplKG4sbmV3IGEuSWRlbnRpZmllcihyLnZhbHVlKSk7aWYodGhpcy5tYXRjaCgiPSIpKXt0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPXRoaXMubG9va2FoZWFkLHRoaXMubmV4dFRva2VuKCksbD0hMDt2YXIgaD10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtzPXRoaXMuZmluYWxpemUobixuZXcgYS5Bc3NpZ25tZW50UGF0dGVybihmLGgpKX1lbHNlIGw9ITAscz1mfWVsc2UgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShuLG5ldyBhLlByb3BlcnR5KHQsaSx1LHMsYyxsKSl9LGUucHJvdG90eXBlLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO2Zvcih2YXIgdD1bXSxuPXt2YWx1ZTohMX07IXRoaXMubWF0Y2goIn0iKTspdC5wdXNoKHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eShuKSksdGhpcy5tYXRjaCgifSIpfHx0aGlzLmV4cGVjdENvbW1hU2VwYXJhdG9yKCk7cmV0dXJuIHRoaXMuZXhwZWN0KCJ9IiksdGhpcy5maW5hbGl6ZShlLG5ldyBhLk9iamVjdEV4cHJlc3Npb24odCkpfSxlLnByb3RvdHlwZS5wYXJzZVRlbXBsYXRlSGVhZD1mdW5jdGlvbigpe3IuYXNzZXJ0KHRoaXMubG9va2FoZWFkLmhlYWQsIlRlbXBsYXRlIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgdGVtcGxhdGUgaGVhZCIpO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5uZXh0VG9rZW4oKSxuPXQudmFsdWUsaT10LmNvb2tlZDtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLlRlbXBsYXRlRWxlbWVudCh7cmF3Om4sY29va2VkOml9LHQudGFpbCkpfSxlLnByb3RvdHlwZS5wYXJzZVRlbXBsYXRlRWxlbWVudD1mdW5jdGlvbigpezEwIT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5uZXh0VG9rZW4oKSxuPXQudmFsdWUscj10LmNvb2tlZDtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLlRlbXBsYXRlRWxlbWVudCh7cmF3Om4sY29va2VkOnJ9LHQudGFpbCkpfSxlLnByb3RvdHlwZS5wYXJzZVRlbXBsYXRlTGl0ZXJhbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9W10sbj1bXSxyPXRoaXMucGFyc2VUZW1wbGF0ZUhlYWQoKTtmb3Iobi5wdXNoKHIpOyFyLnRhaWw7KXQucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKSxyPXRoaXMucGFyc2VUZW1wbGF0ZUVsZW1lbnQoKSxuLnB1c2gocik7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5UZW1wbGF0ZUxpdGVyYWwobix0KSl9LGUucHJvdG90eXBlLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybj1mdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlIHUuU3ludGF4LklkZW50aWZpZXI6Y2FzZSB1LlN5bnRheC5NZW1iZXJFeHByZXNzaW9uOmNhc2UgdS5TeW50YXguUmVzdEVsZW1lbnQ6Y2FzZSB1LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjpicmVhaztjYXNlIHUuU3ludGF4LlNwcmVhZEVsZW1lbnQ6ZS50eXBlPXUuU3ludGF4LlJlc3RFbGVtZW50LHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUuYXJndW1lbnQpO2JyZWFrO2Nhc2UgdS5TeW50YXguQXJyYXlFeHByZXNzaW9uOmUudHlwZT11LlN5bnRheC5BcnJheVBhdHRlcm47Zm9yKHZhciB0PTA7dDxlLmVsZW1lbnRzLmxlbmd0aDt0KyspbnVsbCE9PWUuZWxlbWVudHNbdF0mJnRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUuZWxlbWVudHNbdF0pO2JyZWFrO2Nhc2UgdS5TeW50YXguT2JqZWN0RXhwcmVzc2lvbjplLnR5cGU9dS5TeW50YXguT2JqZWN0UGF0dGVybjtmb3IodmFyIHQ9MDt0PGUucHJvcGVydGllcy5sZW5ndGg7dCsrKXRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUucHJvcGVydGllc1t0XS52YWx1ZSk7YnJlYWs7Y2FzZSB1LlN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbjplLnR5cGU9dS5TeW50YXguQXNzaWdubWVudFBhdHRlcm4sZGVsZXRlIGUub3BlcmF0b3IsdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZS5sZWZ0KX19LGUucHJvdG90eXBlLnBhcnNlR3JvdXBFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5leHBlY3QoIigiKSx0aGlzLm1hdGNoKCIpIikpdGhpcy5uZXh0VG9rZW4oKSx0aGlzLm1hdGNoKCI9PiIpfHx0aGlzLmV4cGVjdCgiPT4iKSxlPXt0eXBlOiJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIixwYXJhbXM6W10sYXN5bmM6ITF9O2Vsc2V7dmFyIHQ9dGhpcy5sb29rYWhlYWQsbj1bXTtpZih0aGlzLm1hdGNoKCIuLi4iKSllPXRoaXMucGFyc2VSZXN0RWxlbWVudChuKSx0aGlzLmV4cGVjdCgiKSIpLHRoaXMubWF0Y2goIj0+Iil8fHRoaXMuZXhwZWN0KCI9PiIpLGU9e3R5cGU6IkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiLHBhcmFtczpbZV0sYXN5bmM6ITF9O2Vsc2V7dmFyIHI9ITE7aWYodGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITAsZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSx0aGlzLm1hdGNoKCIsIikpe3ZhciBpPVtdO2Zvcih0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLGkucHVzaChlKTsyIT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy5tYXRjaCgiLCIpOyl7aWYodGhpcy5uZXh0VG9rZW4oKSx0aGlzLm1hdGNoKCIpIikpe3RoaXMubmV4dFRva2VuKCk7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaVtvXSk7cj0hMCxlPXt0eXBlOiJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIixwYXJhbXM6aSxhc3luYzohMX19ZWxzZSBpZih0aGlzLm1hdGNoKCIuLi4iKSl7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnR8fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpLGkucHVzaCh0aGlzLnBhcnNlUmVzdEVsZW1lbnQobikpLHRoaXMuZXhwZWN0KCIpIiksdGhpcy5tYXRjaCgiPT4iKXx8dGhpcy5leHBlY3QoIj0+IiksdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITE7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaVtvXSk7cj0hMCxlPXt0eXBlOiJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIixwYXJhbXM6aSxhc3luYzohMX19ZWxzZSBpLnB1c2godGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO2lmKHIpYnJlYWt9cnx8KGU9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZSh0KSxuZXcgYS5TZXF1ZW5jZUV4cHJlc3Npb24oaSkpKX1pZighcil7aWYodGhpcy5leHBlY3QoIikiKSx0aGlzLm1hdGNoKCI9PiIpJiYoZS50eXBlPT09dS5TeW50YXguSWRlbnRpZmllciYmInlpZWxkIj09PWUubmFtZSYmKHI9ITAsZT17dHlwZToiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciIscGFyYW1zOltlXSxhc3luYzohMX0pLCFyKSl7aWYodGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnR8fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpLGUudHlwZT09PXUuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbilmb3IodmFyIG89MDtvPGUuZXhwcmVzc2lvbnMubGVuZ3RoO28rKyl0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihlLmV4cHJlc3Npb25zW29dKTtlbHNlIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUpO2U9e3R5cGU6IkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiLHBhcmFtczplLnR5cGU9PT11LlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24/ZS5leHByZXNzaW9uczpbZV0sYXN5bmM6ITF9fXRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExfX19cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlQXJndW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5leHBlY3QoIigiKTt2YXIgZT1bXTtpZighdGhpcy5tYXRjaCgiKSIpKWZvcig7Oyl7dmFyIHQ9dGhpcy5tYXRjaCgiLi4uIik/dGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKTp0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtpZihlLnB1c2godCksdGhpcy5tYXRjaCgiKSIpKWJyZWFrO2lmKHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKSx0aGlzLm1hdGNoKCIpIikpYnJlYWt9cmV0dXJuIHRoaXMuZXhwZWN0KCIpIiksZX0sZS5wcm90b3R5cGUuaXNJZGVudGlmaWVyTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gMz09PWUudHlwZXx8ND09PWUudHlwZXx8MT09PWUudHlwZXx8NT09PWUudHlwZX0sZS5wcm90b3R5cGUucGFyc2VJZGVudGlmaWVyTmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5uZXh0VG9rZW4oKTtyZXR1cm4gdGhpcy5pc0lkZW50aWZpZXJOYW1lKHQpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5JZGVudGlmaWVyKHQudmFsdWUpKX0sZS5wcm90b3R5cGUucGFyc2VOZXdFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtyLmFzc2VydCgibmV3Ij09PXQubmFtZSwiTmV3IGV4cHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGBuZXdgIik7dmFyIG47aWYodGhpcy5tYXRjaCgiLiIpKWlmKHRoaXMubmV4dFRva2VuKCksMz09PXRoaXMubG9va2FoZWFkLnR5cGUmJnRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSYmInRhcmdldCI9PT10aGlzLmxvb2thaGVhZC52YWx1ZSl7dmFyIGk9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7bj1uZXcgYS5NZXRhUHJvcGVydHkodCxpKX1lbHNlIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO2Vsc2V7dmFyIG89dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKSxzPXRoaXMubWF0Y2goIigiKT90aGlzLnBhcnNlQXJndW1lbnRzKCk6W107bj1uZXcgYS5OZXdFeHByZXNzaW9uKG8scyksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG4pfSxlLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtyZXR1cm4gdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcj1udWxsLGV9LGUucHJvdG90eXBlLnBhcnNlQXN5bmNBcmd1bWVudHM9ZnVuY3Rpb24oKXt0aGlzLmV4cGVjdCgiKCIpO3ZhciBlPVtdO2lmKCF0aGlzLm1hdGNoKCIpIikpZm9yKDs7KXt2YXIgdD10aGlzLm1hdGNoKCIuLi4iKT90aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpOnRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXN5bmNBcmd1bWVudCk7aWYoZS5wdXNoKHQpLHRoaXMubWF0Y2goIikiKSlicmVhaztpZih0aGlzLmV4cGVjdENvbW1hU2VwYXJhdG9yKCksdGhpcy5tYXRjaCgiKSIpKWJyZWFrfXJldHVybiB0aGlzLmV4cGVjdCgiKSIpLGV9LGUucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMubG9va2FoZWFkLHQ9dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhc3luYyIpLG49dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49ITA7dmFyIHI7Zm9yKHRoaXMubWF0Y2hLZXl3b3JkKCJzdXBlciIpJiZ0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHk/KHI9dGhpcy5jcmVhdGVOb2RlKCksdGhpcy5uZXh0VG9rZW4oKSxyPXRoaXMuZmluYWxpemUocixuZXcgYS5TdXBlciksdGhpcy5tYXRjaCgiKCIpfHx0aGlzLm1hdGNoKCIuIil8fHRoaXMubWF0Y2goIlsiKXx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCkpOnI9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMubWF0Y2hLZXl3b3JkKCJuZXciKT90aGlzLnBhcnNlTmV3RXhwcmVzc2lvbjp0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOzspaWYodGhpcy5tYXRjaCgiLiIpKXt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSEwLHRoaXMuZXhwZWN0KCIuIik7dmFyIGk9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7cj10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBhLlN0YXRpY01lbWJlckV4cHJlc3Npb24ocixpKSl9ZWxzZSBpZih0aGlzLm1hdGNoKCIoIikpe3ZhciBvPXQmJmUubGluZU51bWJlcj09PXRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXI7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMTt2YXIgcz1vP3RoaXMucGFyc2VBc3luY0FyZ3VtZW50cygpOnRoaXMucGFyc2VBcmd1bWVudHMoKTtpZihyPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGEuQ2FsbEV4cHJlc3Npb24ocixzKSksbyYmdGhpcy5tYXRjaCgiPT4iKSl7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDsrK3UpdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oc1t1XSk7cj17dHlwZToiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciIscGFyYW1zOnMsYXN5bmM6ITB9fX1lbHNlIGlmKHRoaXMubWF0Y2goIlsiKSl7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMCx0aGlzLmV4cGVjdCgiWyIpO3ZhciBpPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7dGhpcy5leHBlY3QoIl0iKSxyPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGEuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHIsaSkpfWVsc2V7aWYoMTAhPT10aGlzLmxvb2thaGVhZC50eXBlfHwhdGhpcy5sb29rYWhlYWQuaGVhZClicmVhazt2YXIgYz10aGlzLnBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7cj10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBhLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihyLGMpKX1yZXR1cm4gdGhpcy5jb250ZXh0LmFsbG93SW49bixyfSxlLnByb3RvdHlwZS5wYXJzZVN1cGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7cmV0dXJuIHRoaXMuZXhwZWN0S2V5d29yZCgic3VwZXIiKSx0aGlzLm1hdGNoKCJbIil8fHRoaXMubWF0Y2goIi4iKXx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksdGhpcy5maW5hbGl6ZShlLG5ldyBhLlN1cGVyKX0sZS5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uPWZ1bmN0aW9uKCl7ci5hc3NlcnQodGhpcy5jb250ZXh0LmFsbG93SW4sImNhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5d29yZC4iKTtmb3IodmFyIGU9dGhpcy5zdGFydE5vZGUodGhpcy5sb29rYWhlYWQpLHQ9dGhpcy5tYXRjaEtleXdvcmQoInN1cGVyIikmJnRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keT90aGlzLnBhcnNlU3VwZXIoKTp0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQoIm5ldyIpP3RoaXMucGFyc2VOZXdFeHByZXNzaW9uOnRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbik7OylpZih0aGlzLm1hdGNoKCJbIikpe3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITAsdGhpcy5leHBlY3QoIlsiKTt2YXIgbj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cHJlc3Npb24pO3RoaXMuZXhwZWN0KCJdIiksdD10aGlzLmZpbmFsaXplKGUsbmV3IGEuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHQsbikpfWVsc2UgaWYodGhpcy5tYXRjaCgiLiIpKXt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSEwLHRoaXMuZXhwZWN0KCIuIik7dmFyIG49dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuU3RhdGljTWVtYmVyRXhwcmVzc2lvbih0LG4pKX1lbHNle2lmKDEwIT09dGhpcy5sb29rYWhlYWQudHlwZXx8IXRoaXMubG9va2FoZWFkLmhlYWQpYnJlYWs7dmFyIGk9dGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBhLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbih0LGkpKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUucGFyc2VVcGRhdGVFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmxvb2thaGVhZDtpZih0aGlzLm1hdGNoKCIrKyIpfHx0aGlzLm1hdGNoKCItLSIpKXt2YXIgbj10aGlzLnN0YXJ0Tm9kZSh0KSxyPXRoaXMubmV4dFRva2VuKCk7ZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbiksdGhpcy5jb250ZXh0LnN0cmljdCYmZS50eXBlPT09dS5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZS5uYW1lKSYmdGhpcy50b2xlcmF0ZUVycm9yKG8uTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0fHx0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTt2YXIgaT0hMDtlPXRoaXMuZmluYWxpemUobixuZXcgYS5VcGRhdGVFeHByZXNzaW9uKHIudmFsdWUsZSxpKSksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMX1lbHNlIGlmKGU9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKSwhdGhpcy5oYXNMaW5lVGVybWluYXRvciYmNz09PXRoaXMubG9va2FoZWFkLnR5cGUmJih0aGlzLm1hdGNoKCIrKyIpfHx0aGlzLm1hdGNoKCItLSIpKSl7dGhpcy5jb250ZXh0LnN0cmljdCYmZS50eXBlPT09dS5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZS5uYW1lKSYmdGhpcy50b2xlcmF0ZUVycm9yKG8uTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldHx8dGhpcy50b2xlcmF0ZUVycm9yKG8uTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMTt2YXIgcz10aGlzLm5leHRUb2tlbigpLnZhbHVlLGk9ITE7ZT10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHQpLG5ldyBhLlVwZGF0ZUV4cHJlc3Npb24ocyxlLGkpKX1yZXR1cm4gZX0sZS5wcm90b3R5cGUucGFyc2VBd2FpdEV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLm5leHRUb2tlbigpO3ZhciB0PXRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24oKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkF3YWl0RXhwcmVzc2lvbih0KSl9LGUucHJvdG90eXBlLnBhcnNlVW5hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5tYXRjaCgiKyIpfHx0aGlzLm1hdGNoKCItIil8fHRoaXMubWF0Y2goIn4iKXx8dGhpcy5tYXRjaCgiISIpfHx0aGlzLm1hdGNoS2V5d29yZCgiZGVsZXRlIil8fHRoaXMubWF0Y2hLZXl3b3JkKCJ2b2lkIil8fHRoaXMubWF0Y2hLZXl3b3JkKCJ0eXBlb2YiKSl7dmFyIHQ9dGhpcy5zdGFydE5vZGUodGhpcy5sb29rYWhlYWQpLG49dGhpcy5uZXh0VG9rZW4oKTtlPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKSxlPXRoaXMuZmluYWxpemUodCxuZXcgYS5VbmFyeUV4cHJlc3Npb24obi52YWx1ZSxlKSksdGhpcy5jb250ZXh0LnN0cmljdCYmImRlbGV0ZSI9PT1lLm9wZXJhdG9yJiZlLmFyZ3VtZW50LnR5cGU9PT11LlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5TdHJpY3REZWxldGUpLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITF9ZWxzZSBlPXRoaXMuY29udGV4dC5hd2FpdCYmdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhd2FpdCIpP3RoaXMucGFyc2VBd2FpdEV4cHJlc3Npb24oKTp0aGlzLnBhcnNlVXBkYXRlRXhwcmVzc2lvbigpO3JldHVybiBlfSxlLnByb3RvdHlwZS5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubG9va2FoZWFkLHQ9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pO2lmKHQudHlwZSE9PXUuU3ludGF4LlVuYXJ5RXhwcmVzc2lvbiYmdGhpcy5tYXRjaCgiKioiKSl7dGhpcy5uZXh0VG9rZW4oKSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExO3ZhciBuPXQscj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7dD10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBhLkJpbmFyeUV4cHJlc3Npb24oIioqIixuLHIpKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuYmluYXJ5UHJlY2VkZW5jZT1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiA3PT09ZS50eXBlP3RoaXMub3BlcmF0b3JQcmVjZWRlbmNlW3RdfHwwOjQ9PT1lLnR5cGUmJigiaW5zdGFuY2VvZiI9PT10fHx0aGlzLmNvbnRleHQuYWxsb3dJbiYmImluIj09PXQpPzc6MH0sZS5wcm90b3R5cGUucGFyc2VCaW5hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQsdD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiksbj10aGlzLmxvb2thaGVhZCxyPXRoaXMuYmluYXJ5UHJlY2VkZW5jZShuKTtpZihyPjApe3RoaXMubmV4dFRva2VuKCksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMTtmb3IodmFyIGk9W2UsdGhpcy5sb29rYWhlYWRdLG89dCxzPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSx1PVtvLG4udmFsdWUsc10sYz1bcl07Oyl7aWYoKHI9dGhpcy5iaW5hcnlQcmVjZWRlbmNlKHRoaXMubG9va2FoZWFkKSk8PTApYnJlYWs7Zm9yKDt1Lmxlbmd0aD4yJiZyPD1jW2MubGVuZ3RoLTFdOyl7cz11LnBvcCgpO3ZhciBsPXUucG9wKCk7Yy5wb3AoKSxvPXUucG9wKCksaS5wb3AoKTt2YXIgcD10aGlzLnN0YXJ0Tm9kZShpW2kubGVuZ3RoLTFdKTt1LnB1c2godGhpcy5maW5hbGl6ZShwLG5ldyBhLkJpbmFyeUV4cHJlc3Npb24obCxvLHMpKSl9dS5wdXNoKHRoaXMubmV4dFRva2VuKCkudmFsdWUpLGMucHVzaChyKSxpLnB1c2godGhpcy5sb29rYWhlYWQpLHUucHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbikpfXZhciBmPXUubGVuZ3RoLTE7Zm9yKHQ9dVtmXSxpLnBvcCgpO2Y+MTspe3ZhciBwPXRoaXMuc3RhcnROb2RlKGkucG9wKCkpLGw9dVtmLTFdO3Q9dGhpcy5maW5hbGl6ZShwLG5ldyBhLkJpbmFyeUV4cHJlc3Npb24obCx1W2YtMl0sdCkpLGYtPTJ9fXJldHVybiB0fSxlLnByb3RvdHlwZS5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubG9va2FoZWFkLHQ9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VCaW5hcnlFeHByZXNzaW9uKTtpZih0aGlzLm1hdGNoKCI/Iikpe3RoaXMubmV4dFRva2VuKCk7dmFyIG49dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49ITA7dmFyIHI9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7dGhpcy5jb250ZXh0LmFsbG93SW49bix0aGlzLmV4cGVjdCgiOiIpO3ZhciBpPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO3Q9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShlKSxuZXcgYS5Db25kaXRpb25hbEV4cHJlc3Npb24odCxyLGkpKSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExfXJldHVybiB0fSxlLnByb3RvdHlwZS5jaGVja1BhdHRlcm5QYXJhbT1mdW5jdGlvbihlLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgdS5TeW50YXguSWRlbnRpZmllcjp0aGlzLnZhbGlkYXRlUGFyYW0oZSx0LHQubmFtZSk7YnJlYWs7Y2FzZSB1LlN5bnRheC5SZXN0RWxlbWVudDp0aGlzLmNoZWNrUGF0dGVyblBhcmFtKGUsdC5hcmd1bWVudCk7YnJlYWs7Y2FzZSB1LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjp0aGlzLmNoZWNrUGF0dGVyblBhcmFtKGUsdC5sZWZ0KTticmVhaztjYXNlIHUuU3ludGF4LkFycmF5UGF0dGVybjpmb3IodmFyIG49MDtuPHQuZWxlbWVudHMubGVuZ3RoO24rKyludWxsIT09dC5lbGVtZW50c1tuXSYmdGhpcy5jaGVja1BhdHRlcm5QYXJhbShlLHQuZWxlbWVudHNbbl0pO2JyZWFrO2Nhc2UgdS5TeW50YXguT2JqZWN0UGF0dGVybjpmb3IodmFyIG49MDtuPHQucHJvcGVydGllcy5sZW5ndGg7bisrKXRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0oZSx0LnByb3BlcnRpZXNbbl0udmFsdWUpfWUuc2ltcGxlPWUuc2ltcGxlJiZ0IGluc3RhbmNlb2YgYS5JZGVudGlmaWVyfSxlLnByb3RvdHlwZS5yZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdD1mdW5jdGlvbihlKXt2YXIgdCxuPVtlXSxyPSExO3N3aXRjaChlLnR5cGUpe2Nhc2UgdS5TeW50YXguSWRlbnRpZmllcjpicmVhaztjYXNlIkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiOm49ZS5wYXJhbXMscj1lLmFzeW5jO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9dD17c2ltcGxlOiEwLHBhcmFtU2V0Ont9fTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSl7dmFyIGE9bltpXTthLnR5cGU9PT11LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybj9hLnJpZ2h0LnR5cGU9PT11LlN5bnRheC5ZaWVsZEV4cHJlc3Npb24mJihhLnJpZ2h0LmFyZ3VtZW50JiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSxhLnJpZ2h0LnR5cGU9dS5TeW50YXguSWRlbnRpZmllcixhLnJpZ2h0Lm5hbWU9InlpZWxkIixkZWxldGUgYS5yaWdodC5hcmd1bWVudCxkZWxldGUgYS5yaWdodC5kZWxlZ2F0ZSk6ciYmYS50eXBlPT09dS5TeW50YXguSWRlbnRpZmllciYmImF3YWl0Ij09PWEubmFtZSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksdGhpcy5jaGVja1BhdHRlcm5QYXJhbSh0LGEpLG5baV09YX1pZih0aGlzLmNvbnRleHQuc3RyaWN0fHwhdGhpcy5jb250ZXh0LmFsbG93WWllbGQpZm9yKHZhciBpPTA7aTxuLmxlbmd0aDsrK2kpe3ZhciBhPW5baV07YS50eXBlPT09dS5TeW50YXguWWllbGRFeHByZXNzaW9uJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKX1pZih0Lm1lc3NhZ2U9PT1vLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSl7dmFyIHM9dGhpcy5jb250ZXh0LnN0cmljdD90LnN0cmljdGVkOnQuZmlyc3RSZXN0cmljdGVkO3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4ocyx0Lm1lc3NhZ2UpfXJldHVybntzaW1wbGU6dC5zaW1wbGUscGFyYW1zOm4sc3RyaWN0ZWQ6dC5zdHJpY3RlZCxmaXJzdFJlc3RyaWN0ZWQ6dC5maXJzdFJlc3RyaWN0ZWQsbWVzc2FnZTp0Lm1lc3NhZ2V9fSxlLnByb3RvdHlwZS5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkJiZ0aGlzLm1hdGNoS2V5d29yZCgieWllbGQiKSllPXRoaXMucGFyc2VZaWVsZEV4cHJlc3Npb24oKTtlbHNle3ZhciB0PXRoaXMubG9va2FoZWFkLG49dDtpZihlPXRoaXMucGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSwzPT09bi50eXBlJiZuLmxpbmVOdW1iZXI9PT10aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyJiYiYXN5bmMiPT09bi52YWx1ZSYmKDM9PT10aGlzLmxvb2thaGVhZC50eXBlfHx0aGlzLm1hdGNoS2V5d29yZCgieWllbGQiKSkpe3ZhciByPXRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKHIpLGU9e3R5cGU6IkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiLHBhcmFtczpbcl0sYXN5bmM6ITB9fWlmKCJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIj09PWUudHlwZXx8dGhpcy5tYXRjaCgiPT4iKSl7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMTt2YXIgaT1lLmFzeW5jLHM9dGhpcy5yZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChlKTtpZihzKXt0aGlzLmhhc0xpbmVUZXJtaW5hdG9yJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSx0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPW51bGw7dmFyIGM9dGhpcy5jb250ZXh0LnN0cmljdCxsPXRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTt0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9cy5zaW1wbGU7dmFyIHA9dGhpcy5jb250ZXh0LmFsbG93WWllbGQsZj10aGlzLmNvbnRleHQuYXdhaXQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9ITAsdGhpcy5jb250ZXh0LmF3YWl0PWk7dmFyIGQ9dGhpcy5zdGFydE5vZGUodCk7dGhpcy5leHBlY3QoIj0+Iik7dmFyIGg9dm9pZCAwO2lmKHRoaXMubWF0Y2goInsiKSl7dmFyIG09dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49ITAsaD10aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpLHRoaXMuY29udGV4dC5hbGxvd0luPW19ZWxzZSBoPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO3ZhciBnPWgudHlwZSE9PXUuU3ludGF4LkJsb2NrU3RhdGVtZW50O3RoaXMuY29udGV4dC5zdHJpY3QmJnMuZmlyc3RSZXN0cmljdGVkJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHMuZmlyc3RSZXN0cmljdGVkLHMubWVzc2FnZSksdGhpcy5jb250ZXh0LnN0cmljdCYmcy5zdHJpY3RlZCYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzLnN0cmljdGVkLHMubWVzc2FnZSksZT1pP3RoaXMuZmluYWxpemUoZCxuZXcgYS5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKHMucGFyYW1zLGgsZykpOnRoaXMuZmluYWxpemUoZCxuZXcgYS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihzLnBhcmFtcyxoLGcpKSx0aGlzLmNvbnRleHQuc3RyaWN0PWMsdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPWwsdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9cCx0aGlzLmNvbnRleHQuYXdhaXQ9Zn19ZWxzZSBpZih0aGlzLm1hdGNoQXNzaWduKCkpe2lmKHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXR8fHRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpLHRoaXMuY29udGV4dC5zdHJpY3QmJmUudHlwZT09PXUuU3ludGF4LklkZW50aWZpZXIpe3ZhciB5PWU7dGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoeS5uYW1lKSYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihuLG8uTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCksdGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh5Lm5hbWUpJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG4sby5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpfXRoaXMubWF0Y2goIj0iKT90aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihlKToodGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSksbj10aGlzLm5leHRUb2tlbigpO3ZhciB2PW4udmFsdWUsYj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtlPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUodCksbmV3IGEuQXNzaWdubWVudEV4cHJlc3Npb24odixlLGIpKSx0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPW51bGx9fXJldHVybiBlfSxlLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZCx0PXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO2lmKHRoaXMubWF0Y2goIiwiKSl7dmFyIG49W107Zm9yKG4ucHVzaCh0KTsyIT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy5tYXRjaCgiLCIpOyl0aGlzLm5leHRUb2tlbigpLG4ucHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7dD10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBhLlNlcXVlbmNlRXhwcmVzc2lvbihuKSl9cmV0dXJuIHR9LGUucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW09ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSEwLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSEwLDQ9PT10aGlzLmxvb2thaGVhZC50eXBlKXN3aXRjaCh0aGlzLmxvb2thaGVhZC52YWx1ZSl7Y2FzZSJleHBvcnQiOnRoaXMuY29udGV4dC5pc01vZHVsZXx8dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCxvLk1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbiksZT10aGlzLnBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTticmVhaztjYXNlImltcG9ydCI6dGhpcy5jb250ZXh0LmlzTW9kdWxlfHx0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLG8uTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKSxlPXRoaXMucGFyc2VJbXBvcnREZWNsYXJhdGlvbigpO2JyZWFrO2Nhc2UiY29uc3QiOmU9dGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7aW5Gb3I6ITF9KTticmVhaztjYXNlImZ1bmN0aW9uIjplPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJjbGFzcyI6ZT10aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpO2JyZWFrO2Nhc2UibGV0IjplPXRoaXMuaXNMZXhpY2FsRGVjbGFyYXRpb24oKT90aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjohMX0pOnRoaXMucGFyc2VTdGF0ZW1lbnQoKTticmVhaztkZWZhdWx0OmU9dGhpcy5wYXJzZVN0YXRlbWVudCgpfWVsc2UgZT10aGlzLnBhcnNlU3RhdGVtZW50KCk7cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO2Zvcih2YXIgdD1bXTs7KXtpZih0aGlzLm1hdGNoKCJ9IikpYnJlYWs7dC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKX1yZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuQmxvY2tTdGF0ZW1lbnQodCkpfSxlLnByb3RvdHlwZS5wYXJzZUxleGljYWxCaW5kaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVOb2RlKCkscj1bXSxpPXRoaXMucGFyc2VQYXR0ZXJuKHIsZSk7dGhpcy5jb250ZXh0LnN0cmljdCYmaS50eXBlPT09dS5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoaS5uYW1lKSYmdGhpcy50b2xlcmF0ZUVycm9yKG8uTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7dmFyIHM9bnVsbDtyZXR1cm4iY29uc3QiPT09ZT90aGlzLm1hdGNoS2V5d29yZCgiaW4iKXx8dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJvZiIpfHwodGhpcy5tYXRjaCgiPSIpPyh0aGlzLm5leHRUb2tlbigpLHM9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOnRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLkRlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxpemVyLCJjb25zdCIpKTooIXQuaW5Gb3ImJmkudHlwZSE9PXUuU3ludGF4LklkZW50aWZpZXJ8fHRoaXMubWF0Y2goIj0iKSkmJih0aGlzLmV4cGVjdCgiPSIpLHM9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpLHRoaXMuZmluYWxpemUobixuZXcgYS5WYXJpYWJsZURlY2xhcmF0b3IoaSxzKSl9LGUucHJvdG90eXBlLnBhcnNlQmluZGluZ0xpc3Q9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W3RoaXMucGFyc2VMZXhpY2FsQmluZGluZyhlLHQpXTt0aGlzLm1hdGNoKCIsIik7KXRoaXMubmV4dFRva2VuKCksbi5wdXNoKHRoaXMucGFyc2VMZXhpY2FsQmluZGluZyhlLHQpKTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuaXNMZXhpY2FsRGVjbGFyYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7dGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpO3ZhciB0PXRoaXMuc2Nhbm5lci5sZXgoKTtyZXR1cm4gdGhpcy5zY2FubmVyLnJlc3RvcmVTdGF0ZShlKSwzPT09dC50eXBlfHw3PT09dC50eXBlJiYiWyI9PT10LnZhbHVlfHw3PT09dC50eXBlJiYieyI9PT10LnZhbHVlfHw0PT09dC50eXBlJiYibGV0Ij09PXQudmFsdWV8fDQ9PT10LnR5cGUmJiJ5aWVsZCI9PT10LnZhbHVlfSxlLnByb3RvdHlwZS5wYXJzZUxleGljYWxEZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZU5vZGUoKSxuPXRoaXMubmV4dFRva2VuKCkudmFsdWU7ci5hc3NlcnQoImxldCI9PT1ufHwiY29uc3QiPT09biwiTGV4aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3QiKTt2YXIgaT10aGlzLnBhcnNlQmluZGluZ0xpc3QobixlKTtyZXR1cm4gdGhpcy5jb25zdW1lU2VtaWNvbG9uKCksdGhpcy5maW5hbGl6ZSh0LG5ldyBhLlZhcmlhYmxlRGVjbGFyYXRpb24oaSxuKSl9LGUucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIi4uLiIpO3ZhciByPXRoaXMucGFyc2VQYXR0ZXJuKGUsdCk7cmV0dXJuIHRoaXMuZmluYWxpemUobixuZXcgYS5SZXN0RWxlbWVudChyKSl9LGUucHJvdG90eXBlLnBhcnNlQXJyYXlQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIlsiKTtmb3IodmFyIHI9W107IXRoaXMubWF0Y2goIl0iKTspaWYodGhpcy5tYXRjaCgiLCIpKXRoaXMubmV4dFRva2VuKCksci5wdXNoKG51bGwpO2Vsc2V7aWYodGhpcy5tYXRjaCgiLi4uIikpe3IucHVzaCh0aGlzLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50KGUsdCkpO2JyZWFrfXIucHVzaCh0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KGUsdCkpLHRoaXMubWF0Y2goIl0iKXx8dGhpcy5leHBlY3QoIiwiKX1yZXR1cm4gdGhpcy5leHBlY3QoIl0iKSx0aGlzLmZpbmFsaXplKG4sbmV3IGEuQXJyYXlQYXR0ZXJuKHIpKX0sZS5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eVBhdHRlcm49ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5jcmVhdGVOb2RlKCksbz0hMSxzPSExO2lmKDM9PT10aGlzLmxvb2thaGVhZC50eXBlKXt2YXIgdT10aGlzLmxvb2thaGVhZDtuPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTt2YXIgYz10aGlzLmZpbmFsaXplKGksbmV3IGEuSWRlbnRpZmllcih1LnZhbHVlKSk7aWYodGhpcy5tYXRjaCgiPSIpKXtlLnB1c2godSkscz0hMCx0aGlzLm5leHRUb2tlbigpO3ZhciBsPXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3I9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZSh1KSxuZXcgYS5Bc3NpZ25tZW50UGF0dGVybihjLGwpKX1lbHNlIHRoaXMubWF0Y2goIjoiKT8odGhpcy5leHBlY3QoIjoiKSxyPXRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQoZSx0KSk6KGUucHVzaCh1KSxzPSEwLHI9Yyl9ZWxzZSBvPXRoaXMubWF0Y2goIlsiKSxuPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHRoaXMuZXhwZWN0KCI6Iikscj10aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KGUsdCk7cmV0dXJuIHRoaXMuZmluYWxpemUoaSxuZXcgYS5Qcm9wZXJ0eSgiaW5pdCIsbixvLHIsITEscykpfSxlLnByb3RvdHlwZS5wYXJzZU9iamVjdFBhdHRlcm49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZU5vZGUoKSxyPVtdO2Zvcih0aGlzLmV4cGVjdCgieyIpOyF0aGlzLm1hdGNoKCJ9Iik7KXIucHVzaCh0aGlzLnBhcnNlUHJvcGVydHlQYXR0ZXJuKGUsdCkpLHRoaXMubWF0Y2goIn0iKXx8dGhpcy5leHBlY3QoIiwiKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLmZpbmFsaXplKG4sbmV3IGEuT2JqZWN0UGF0dGVybihyKSl9LGUucHJvdG90eXBlLnBhcnNlUGF0dGVybj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiB0aGlzLm1hdGNoKCJbIik/bj10aGlzLnBhcnNlQXJyYXlQYXR0ZXJuKGUsdCk6dGhpcy5tYXRjaCgieyIpP249dGhpcy5wYXJzZU9iamVjdFBhdHRlcm4oZSx0KTooIXRoaXMubWF0Y2hLZXl3b3JkKCJsZXQiKXx8ImNvbnN0IiE9PXQmJiJsZXQiIT09dHx8dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCxvLk1lc3NhZ2VzLkxldEluTGV4aWNhbEJpbmRpbmcpLGUucHVzaCh0aGlzLmxvb2thaGVhZCksbj10aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKHQpKSxufSxlLnByb3RvdHlwZS5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubG9va2FoZWFkLHI9dGhpcy5wYXJzZVBhdHRlcm4oZSx0KTtpZih0aGlzLm1hdGNoKCI9Iikpe3RoaXMubmV4dFRva2VuKCk7dmFyIGk9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9ITA7dmFyIG89dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9aSxyPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUobiksbmV3IGEuQXNzaWdubWVudFBhdHRlcm4ocixvKSl9cmV0dXJuIHJ9LGUucHJvdG90eXBlLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5uZXh0VG9rZW4oKTtyZXR1cm4gND09PW4udHlwZSYmInlpZWxkIj09PW4udmFsdWU/dGhpcy5jb250ZXh0LnN0cmljdD90aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG4sby5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOnRoaXMuY29udGV4dC5hbGxvd1lpZWxkfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG4pOjMhPT1uLnR5cGU/dGhpcy5jb250ZXh0LnN0cmljdCYmND09PW4udHlwZSYmdGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuLnZhbHVlKT90aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG4sby5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOih0aGlzLmNvbnRleHQuc3RyaWN0fHwibGV0IiE9PW4udmFsdWV8fCJ2YXIiIT09ZSkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obik6KHRoaXMuY29udGV4dC5pc01vZHVsZXx8dGhpcy5jb250ZXh0LmF3YWl0KSYmMz09PW4udHlwZSYmImF3YWl0Ij09PW4udmFsdWUmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obiksdGhpcy5maW5hbGl6ZSh0LG5ldyBhLklkZW50aWZpZXIobi52YWx1ZSkpfSxlLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCksbj1bXSxyPXRoaXMucGFyc2VQYXR0ZXJuKG4sInZhciIpO3RoaXMuY29udGV4dC5zdHJpY3QmJnIudHlwZT09PXUuU3ludGF4LklkZW50aWZpZXImJnRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHIubmFtZSkmJnRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLlN0cmljdFZhck5hbWUpO3ZhciBpPW51bGw7cmV0dXJuIHRoaXMubWF0Y2goIj0iKT8odGhpcy5uZXh0VG9rZW4oKSxpPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTpyLnR5cGU9PT11LlN5bnRheC5JZGVudGlmaWVyfHxlLmluRm9yfHx0aGlzLmV4cGVjdCgiPSIpLHRoaXMuZmluYWxpemUodCxuZXcgYS5WYXJpYWJsZURlY2xhcmF0b3IocixpKSl9LGUucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9e2luRm9yOmUuaW5Gb3J9LG49W107Zm9yKG4ucHVzaCh0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbih0KSk7dGhpcy5tYXRjaCgiLCIpOyl0aGlzLm5leHRUb2tlbigpLG4ucHVzaCh0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbih0KSk7cmV0dXJuIG59LGUucHJvdG90eXBlLnBhcnNlVmFyaWFibGVTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoInZhciIpO3ZhciB0PXRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7aW5Gb3I6ITF9KTtyZXR1cm4gdGhpcy5jb25zdW1lU2VtaWNvbG9uKCksdGhpcy5maW5hbGl6ZShlLG5ldyBhLlZhcmlhYmxlRGVjbGFyYXRpb24odCwidmFyIikpfSxlLnByb3RvdHlwZS5wYXJzZUVtcHR5U3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7cmV0dXJuIHRoaXMuZXhwZWN0KCI7IiksdGhpcy5maW5hbGl6ZShlLG5ldyBhLkVtcHR5U3RhdGVtZW50KX0sZS5wcm90b3R5cGUucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3JldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwcmVzc2lvblN0YXRlbWVudCh0KSl9LGUucHJvdG90eXBlLnBhcnNlSWZDbGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0LnN0cmljdCYmdGhpcy5tYXRjaEtleXdvcmQoImZ1bmN0aW9uIikmJnRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uKSx0aGlzLnBhcnNlU3RhdGVtZW50KCl9LGUucHJvdG90eXBlLnBhcnNlSWZTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpLG49bnVsbDt0aGlzLmV4cGVjdEtleXdvcmQoImlmIiksdGhpcy5leHBlY3QoIigiKTt2YXIgcj10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3JldHVybiF0aGlzLm1hdGNoKCIpIikmJnRoaXMuY29uZmlnLnRvbGVyYW50Pyh0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpLGU9dGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSxuZXcgYS5FbXB0eVN0YXRlbWVudCkpOih0aGlzLmV4cGVjdCgiKSIpLGU9dGhpcy5wYXJzZUlmQ2xhdXNlKCksdGhpcy5tYXRjaEtleXdvcmQoImVsc2UiKSYmKHRoaXMubmV4dFRva2VuKCksbj10aGlzLnBhcnNlSWZDbGF1c2UoKSkpLHRoaXMuZmluYWxpemUodCxuZXcgYS5JZlN0YXRlbWVudChyLGUsbikpfSxlLnByb3RvdHlwZS5wYXJzZURvV2hpbGVTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImRvIik7dmFyIHQ9dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uO3RoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj0hMDt2YXIgbj10aGlzLnBhcnNlU3RhdGVtZW50KCk7dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPXQsdGhpcy5leHBlY3RLZXl3b3JkKCJ3aGlsZSIpLHRoaXMuZXhwZWN0KCIoIik7dmFyIHI9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtyZXR1cm4hdGhpcy5tYXRjaCgiKSIpJiZ0aGlzLmNvbmZpZy50b2xlcmFudD90aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOih0aGlzLmV4cGVjdCgiKSIpLHRoaXMubWF0Y2goIjsiKSYmdGhpcy5uZXh0VG9rZW4oKSksdGhpcy5maW5hbGl6ZShlLG5ldyBhLkRvV2hpbGVTdGF0ZW1lbnQobixyKSl9LGUucHJvdG90eXBlLnBhcnNlV2hpbGVTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgid2hpbGUiKSx0aGlzLmV4cGVjdCgiKCIpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYoIXRoaXMubWF0Y2goIikiKSYmdGhpcy5jb25maWcudG9sZXJhbnQpdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKSxlPXRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksbmV3IGEuRW1wdHlTdGF0ZW1lbnQpO2Vsc2V7dGhpcy5leHBlY3QoIikiKTt2YXIgcj10aGlzLmNvbnRleHQuaW5JdGVyYXRpb247dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPSEwLGU9dGhpcy5wYXJzZVN0YXRlbWVudCgpLHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj1yfXJldHVybiB0aGlzLmZpbmFsaXplKHQsbmV3IGEuV2hpbGVTdGF0ZW1lbnQobixlKSl9LGUucHJvdG90eXBlLnBhcnNlRm9yU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGUsdCxuPW51bGwscj1udWxsLGk9bnVsbCxzPSEwLGM9dGhpcy5jcmVhdGVOb2RlKCk7aWYodGhpcy5leHBlY3RLZXl3b3JkKCJmb3IiKSx0aGlzLmV4cGVjdCgiKCIpLHRoaXMubWF0Y2goIjsiKSl0aGlzLm5leHRUb2tlbigpO2Vsc2UgaWYodGhpcy5tYXRjaEtleXdvcmQoInZhciIpKXtuPXRoaXMuY3JlYXRlTm9kZSgpLHRoaXMubmV4dFRva2VuKCk7dmFyIGw9dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49ITE7dmFyIHA9dGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHtpbkZvcjohMH0pO2lmKHRoaXMuY29udGV4dC5hbGxvd0luPWwsMT09PXAubGVuZ3RoJiZ0aGlzLm1hdGNoS2V5d29yZCgiaW4iKSl7dmFyIGY9cFswXTtmLmluaXQmJihmLmlkLnR5cGU9PT11LlN5bnRheC5BcnJheVBhdHRlcm58fGYuaWQudHlwZT09PXUuU3ludGF4Lk9iamVjdFBhdHRlcm58fHRoaXMuY29udGV4dC5zdHJpY3QpJiZ0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5Gb3JJbk9mTG9vcEluaXRpYWxpemVyLCJmb3ItaW4iKSxuPXRoaXMuZmluYWxpemUobixuZXcgYS5WYXJpYWJsZURlY2xhcmF0aW9uKHAsInZhciIpKSx0aGlzLm5leHRUb2tlbigpLGU9bix0PXRoaXMucGFyc2VFeHByZXNzaW9uKCksbj1udWxsfWVsc2UgMT09PXAubGVuZ3RoJiZudWxsPT09cFswXS5pbml0JiZ0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoIm9mIik/KG49dGhpcy5maW5hbGl6ZShuLG5ldyBhLlZhcmlhYmxlRGVjbGFyYXRpb24ocCwidmFyIikpLHRoaXMubmV4dFRva2VuKCksZT1uLHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksbj1udWxsLHM9ITEpOihuPXRoaXMuZmluYWxpemUobixuZXcgYS5WYXJpYWJsZURlY2xhcmF0aW9uKHAsInZhciIpKSx0aGlzLmV4cGVjdCgiOyIpKX1lbHNlIGlmKHRoaXMubWF0Y2hLZXl3b3JkKCJjb25zdCIpfHx0aGlzLm1hdGNoS2V5d29yZCgibGV0Iikpe249dGhpcy5jcmVhdGVOb2RlKCk7dmFyIGQ9dGhpcy5uZXh0VG9rZW4oKS52YWx1ZTtpZih0aGlzLmNvbnRleHQuc3RyaWN0fHwiaW4iIT09dGhpcy5sb29rYWhlYWQudmFsdWUpe3ZhciBsPXRoaXMuY29udGV4dC5hbGxvd0luO3RoaXMuY29udGV4dC5hbGxvd0luPSExO3ZhciBwPXRoaXMucGFyc2VCaW5kaW5nTGlzdChkLHtpbkZvcjohMH0pO3RoaXMuY29udGV4dC5hbGxvd0luPWwsMT09PXAubGVuZ3RoJiZudWxsPT09cFswXS5pbml0JiZ0aGlzLm1hdGNoS2V5d29yZCgiaW4iKT8obj10aGlzLmZpbmFsaXplKG4sbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihwLGQpKSx0aGlzLm5leHRUb2tlbigpLGU9bix0PXRoaXMucGFyc2VFeHByZXNzaW9uKCksbj1udWxsKToxPT09cC5sZW5ndGgmJm51bGw9PT1wWzBdLmluaXQmJnRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgib2YiKT8obj10aGlzLmZpbmFsaXplKG4sbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihwLGQpKSx0aGlzLm5leHRUb2tlbigpLGU9bix0PXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpLG49bnVsbCxzPSExKToodGhpcy5jb25zdW1lU2VtaWNvbG9uKCksbj10aGlzLmZpbmFsaXplKG4sbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihwLGQpKSl9ZWxzZSBuPXRoaXMuZmluYWxpemUobixuZXcgYS5JZGVudGlmaWVyKGQpKSx0aGlzLm5leHRUb2tlbigpLGU9bix0PXRoaXMucGFyc2VFeHByZXNzaW9uKCksbj1udWxsfWVsc2V7dmFyIGg9dGhpcy5sb29rYWhlYWQsbD10aGlzLmNvbnRleHQuYWxsb3dJbjtpZih0aGlzLmNvbnRleHQuYWxsb3dJbj0hMSxuPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pLHRoaXMuY29udGV4dC5hbGxvd0luPWwsdGhpcy5tYXRjaEtleXdvcmQoImluIikpdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCYmbi50eXBlIT09dS5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb258fHRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKSx0aGlzLm5leHRUb2tlbigpLHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKG4pLGU9bix0PXRoaXMucGFyc2VFeHByZXNzaW9uKCksbj1udWxsO2Vsc2UgaWYodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJvZiIpKXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQmJm4udHlwZSE9PXUuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9ufHx0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JMb29wKSx0aGlzLm5leHRUb2tlbigpLHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKG4pLGU9bix0PXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpLG49bnVsbCxzPSExO2Vsc2V7aWYodGhpcy5tYXRjaCgiLCIpKXtmb3IodmFyIG09W25dO3RoaXMubWF0Y2goIiwiKTspdGhpcy5uZXh0VG9rZW4oKSxtLnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO249dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShoKSxuZXcgYS5TZXF1ZW5jZUV4cHJlc3Npb24obSkpfXRoaXMuZXhwZWN0KCI7Iil9fSJ1bmRlZmluZWQiPT09dHlwZW9mIGUmJih0aGlzLm1hdGNoKCI7Iil8fChyPXRoaXMucGFyc2VFeHByZXNzaW9uKCkpLHRoaXMuZXhwZWN0KCI7IiksdGhpcy5tYXRjaCgiKSIpfHwoaT10aGlzLnBhcnNlRXhwcmVzc2lvbigpKSk7dmFyIGc7aWYoIXRoaXMubWF0Y2goIikiKSYmdGhpcy5jb25maWcudG9sZXJhbnQpdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKSxnPXRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksbmV3IGEuRW1wdHlTdGF0ZW1lbnQpO2Vsc2V7dGhpcy5leHBlY3QoIikiKTt2YXIgeT10aGlzLmNvbnRleHQuaW5JdGVyYXRpb247dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPSEwLGc9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VTdGF0ZW1lbnQpLHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj15fXJldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dGhpcy5maW5hbGl6ZShjLG5ldyBhLkZvclN0YXRlbWVudChuLHIsaSxnKSk6cz90aGlzLmZpbmFsaXplKGMsbmV3IGEuRm9ySW5TdGF0ZW1lbnQoZSx0LGcpKTp0aGlzLmZpbmFsaXplKGMsbmV3IGEuRm9yT2ZTdGF0ZW1lbnQoZSx0LGcpKX0sZS5wcm90b3R5cGUucGFyc2VDb250aW51ZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiY29udGludWUiKTt2YXIgdD1udWxsO2lmKDM9PT10aGlzLmxvb2thaGVhZC50eXBlJiYhdGhpcy5oYXNMaW5lVGVybWluYXRvcil7dmFyIG49dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO3Q9bjt2YXIgcj0iJCIrbi5uYW1lO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnRleHQubGFiZWxTZXQscil8fHRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLlVua25vd25MYWJlbCxuLm5hbWUpfXJldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxudWxsIT09dHx8dGhpcy5jb250ZXh0LmluSXRlcmF0aW9ufHx0aGlzLnRocm93RXJyb3Ioby5NZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5Db250aW51ZVN0YXRlbWVudCh0KSl9LGUucHJvdG90eXBlLnBhcnNlQnJlYWtTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImJyZWFrIik7dmFyIHQ9bnVsbDtpZigzPT09dGhpcy5sb29rYWhlYWQudHlwZSYmIXRoaXMuaGFzTGluZVRlcm1pbmF0b3Ipe3ZhciBuPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSxyPSIkIituLm5hbWU7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCxyKXx8dGhpcy50aHJvd0Vycm9yKG8uTWVzc2FnZXMuVW5rbm93bkxhYmVsLG4ubmFtZSksdD1ufXJldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxudWxsIT09dHx8dGhpcy5jb250ZXh0LmluSXRlcmF0aW9ufHx0aGlzLmNvbnRleHQuaW5Td2l0Y2h8fHRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLklsbGVnYWxCcmVhayksdGhpcy5maW5hbGl6ZShlLG5ldyBhLkJyZWFrU3RhdGVtZW50KHQpKX0sZS5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHl8fHRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgicmV0dXJuIik7dmFyIHQ9IXRoaXMubWF0Y2goIjsiKSYmIXRoaXMubWF0Y2goIn0iKSYmIXRoaXMuaGFzTGluZVRlcm1pbmF0b3ImJjIhPT10aGlzLmxvb2thaGVhZC50eXBlLG49dD90aGlzLnBhcnNlRXhwcmVzc2lvbigpOm51bGw7cmV0dXJuIHRoaXMuY29uc3VtZVNlbWljb2xvbigpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5SZXR1cm5TdGF0ZW1lbnQobikpfSxlLnByb3RvdHlwZS5wYXJzZVdpdGhTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCk7dmFyIGUsdD10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoIndpdGgiKSx0aGlzLmV4cGVjdCgiKCIpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7cmV0dXJuIXRoaXMubWF0Y2goIikiKSYmdGhpcy5jb25maWcudG9sZXJhbnQ/KHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSksZT10aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLG5ldyBhLkVtcHR5U3RhdGVtZW50KSk6KHRoaXMuZXhwZWN0KCIpIiksZT10aGlzLnBhcnNlU3RhdGVtZW50KCkpLHRoaXMuZmluYWxpemUodCxuZXcgYS5XaXRoU3RhdGVtZW50KG4sZSkpfSxlLnByb3RvdHlwZS5wYXJzZVN3aXRjaENhc2U9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iik/KHRoaXMubmV4dFRva2VuKCksZT1udWxsKToodGhpcy5leHBlY3RLZXl3b3JkKCJjYXNlIiksZT10aGlzLnBhcnNlRXhwcmVzc2lvbigpKSx0aGlzLmV4cGVjdCgiOiIpO2Zvcih2YXIgbj1bXTs7KXtpZih0aGlzLm1hdGNoKCJ9Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJjYXNlIikpYnJlYWs7bi5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKX1yZXR1cm4gdGhpcy5maW5hbGl6ZSh0LG5ldyBhLlN3aXRjaENhc2UoZSxuKSl9LGUucHJvdG90eXBlLnBhcnNlU3dpdGNoU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzd2l0Y2giKSx0aGlzLmV4cGVjdCgiKCIpO3ZhciB0PXRoaXMucGFyc2VFeHByZXNzaW9uKCk7dGhpcy5leHBlY3QoIikiKTt2YXIgbj10aGlzLmNvbnRleHQuaW5Td2l0Y2g7dGhpcy5jb250ZXh0LmluU3dpdGNoPSEwO3ZhciByPVtdLGk9ITE7Zm9yKHRoaXMuZXhwZWN0KCJ7Iik7Oyl7aWYodGhpcy5tYXRjaCgifSIpKWJyZWFrO3ZhciBzPXRoaXMucGFyc2VTd2l0Y2hDYXNlKCk7bnVsbD09PXMudGVzdCYmKGkmJnRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCksaT0hMCksci5wdXNoKHMpfXJldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMuY29udGV4dC5pblN3aXRjaD1uLHRoaXMuZmluYWxpemUoZSxuZXcgYS5Td2l0Y2hTdGF0ZW1lbnQodCxyKSl9LGUucHJvdG90eXBlLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtpZihuLnR5cGU9PT11LlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLm1hdGNoKCI6Iikpe3RoaXMubmV4dFRva2VuKCk7dmFyIHI9bixpPSIkIityLm5hbWU7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCxpKSYmdGhpcy50aHJvd0Vycm9yKG8uTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwiTGFiZWwiLHIubmFtZSksdGhpcy5jb250ZXh0LmxhYmVsU2V0W2ldPSEwO3ZhciBzPXZvaWQgMDtpZih0aGlzLm1hdGNoS2V5d29yZCgiY2xhc3MiKSl0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSxzPXRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7ZWxzZSBpZih0aGlzLm1hdGNoS2V5d29yZCgiZnVuY3Rpb24iKSl7dmFyIGM9dGhpcy5sb29rYWhlYWQsbD10aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO3RoaXMuY29udGV4dC5zdHJpY3Q/dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihjLG8uTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24pOmwuZ2VuZXJhdG9yJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGMsby5NZXNzYWdlcy5HZW5lcmF0b3JJbkxlZ2FjeUNvbnRleHQpLHM9bH1lbHNlIHM9dGhpcy5wYXJzZVN0YXRlbWVudCgpO2RlbGV0ZSB0aGlzLmNvbnRleHQubGFiZWxTZXRbaV0sZT1uZXcgYS5MYWJlbGVkU3RhdGVtZW50KHIscyl9ZWxzZSB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxlPW5ldyBhLkV4cHJlc3Npb25TdGF0ZW1lbnQobik7cmV0dXJuIHRoaXMuZmluYWxpemUodCxlKX0sZS5wcm90b3R5cGUucGFyc2VUaHJvd1N0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgidGhyb3ciKSx0aGlzLmhhc0xpbmVUZXJtaW5hdG9yJiZ0aGlzLnRocm93RXJyb3Ioby5NZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJvdyk7dmFyIHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtyZXR1cm4gdGhpcy5jb25zdW1lU2VtaWNvbG9uKCksdGhpcy5maW5hbGl6ZShlLG5ldyBhLlRocm93U3RhdGVtZW50KHQpKX0sZS5wcm90b3R5cGUucGFyc2VDYXRjaENsYXVzZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiY2F0Y2giKSx0aGlzLmV4cGVjdCgiKCIpLHRoaXMubWF0Y2goIikiKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Zm9yKHZhciB0PVtdLG49dGhpcy5wYXJzZVBhdHRlcm4odCkscj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBzPSIkIit0W2ldLnZhbHVlO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMpJiZ0aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5nLHRbaV0udmFsdWUpLHJbc109ITB9dGhpcy5jb250ZXh0LnN0cmljdCYmbi50eXBlPT09dS5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQobi5uYW1lKSYmdGhpcy50b2xlcmF0ZUVycm9yKG8uTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSksdGhpcy5leHBlY3QoIikiKTt2YXIgYz10aGlzLnBhcnNlQmxvY2soKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkNhdGNoQ2xhdXNlKG4sYykpfSxlLnByb3RvdHlwZS5wYXJzZUZpbmFsbHlDbGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBlY3RLZXl3b3JkKCJmaW5hbGx5IiksdGhpcy5wYXJzZUJsb2NrKCl9LGUucHJvdG90eXBlLnBhcnNlVHJ5U3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0cnkiKTt2YXIgdD10aGlzLnBhcnNlQmxvY2soKSxuPXRoaXMubWF0Y2hLZXl3b3JkKCJjYXRjaCIpP3RoaXMucGFyc2VDYXRjaENsYXVzZSgpOm51bGwscj10aGlzLm1hdGNoS2V5d29yZCgiZmluYWxseSIpP3RoaXMucGFyc2VGaW5hbGx5Q2xhdXNlKCk6bnVsbDtyZXR1cm4gbnx8cnx8dGhpcy50aHJvd0Vycm9yKG8uTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSksdGhpcy5maW5hbGl6ZShlLG5ldyBhLlRyeVN0YXRlbWVudCh0LG4scikpfSxlLnByb3RvdHlwZS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7cmV0dXJuIHRoaXMuZXhwZWN0S2V5d29yZCgiZGVidWdnZXIiKSx0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuRGVidWdnZXJTdGF0ZW1lbnQpfSxlLnByb3RvdHlwZS5wYXJzZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlO3N3aXRjaCh0aGlzLmxvb2thaGVhZC50eXBlKXtjYXNlIDE6Y2FzZSA1OmNhc2UgNjpjYXNlIDg6Y2FzZSAxMDpjYXNlIDk6ZT10aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpO2JyZWFrO2Nhc2UgNzp2YXIgdD10aGlzLmxvb2thaGVhZC52YWx1ZTtlPSJ7Ij09PXQ/dGhpcy5wYXJzZUJsb2NrKCk6IigiPT09dD90aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOiI7Ij09PXQ/dGhpcy5wYXJzZUVtcHR5U3RhdGVtZW50KCk6dGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKTticmVhaztjYXNlIDM6ZT10aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpP3RoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk6dGhpcy5wYXJzZUxhYmVsbGVkU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSA0OnN3aXRjaCh0aGlzLmxvb2thaGVhZC52YWx1ZSl7Y2FzZSJicmVhayI6ZT10aGlzLnBhcnNlQnJlYWtTdGF0ZW1lbnQoKTticmVhaztjYXNlImNvbnRpbnVlIjplPXRoaXMucGFyc2VDb250aW51ZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UiZGVidWdnZXIiOmU9dGhpcy5wYXJzZURlYnVnZ2VyU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJkbyI6ZT10aGlzLnBhcnNlRG9XaGlsZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UiZm9yIjplPXRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTticmVhaztjYXNlImZ1bmN0aW9uIjplPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJpZiI6ZT10aGlzLnBhcnNlSWZTdGF0ZW1lbnQoKTticmVhaztjYXNlInJldHVybiI6ZT10aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJzd2l0Y2giOmU9dGhpcy5wYXJzZVN3aXRjaFN0YXRlbWVudCgpO2JyZWFrO2Nhc2UidGhyb3ciOmU9dGhpcy5wYXJzZVRocm93U3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJ0cnkiOmU9dGhpcy5wYXJzZVRyeVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UidmFyIjplPXRoaXMucGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2Uid2hpbGUiOmU9dGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJ3aXRoIjplPXRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7YnJlYWs7ZGVmYXVsdDplPXRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCl9YnJlYWs7ZGVmYXVsdDplPXRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfXJldHVybiBlfSxlLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO3ZhciB0PXRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKSxuPXRoaXMuY29udGV4dC5sYWJlbFNldCxyPXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbixpPXRoaXMuY29udGV4dC5pblN3aXRjaCxvPXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keTtmb3IodGhpcy5jb250ZXh0LmxhYmVsU2V0PXt9LHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj0hMSx0aGlzLmNvbnRleHQuaW5Td2l0Y2g9ITEsdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5PSEwOzIhPT10aGlzLmxvb2thaGVhZC50eXBlJiYhdGhpcy5tYXRjaCgifSIpOyl0LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMuY29udGV4dC5sYWJlbFNldD1uLHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj1yLHRoaXMuY29udGV4dC5pblN3aXRjaD1pLHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keT1vLHRoaXMuZmluYWxpemUoZSxuZXcgYS5CbG9ja1N0YXRlbWVudCh0KSl9LGUucHJvdG90eXBlLnZhbGlkYXRlUGFyYW09ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIkIituO3RoaXMuY29udGV4dC5zdHJpY3Q/KHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKG4pJiYoZS5zdHJpY3RlZD10LGUubWVzc2FnZT1vLk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUucGFyYW1TZXQscikmJihlLnN0cmljdGVkPXQsZS5tZXNzYWdlPW8uTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSk6ZS5maXJzdFJlc3RyaWN0ZWR8fCh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChuKT8oZS5maXJzdFJlc3RyaWN0ZWQ9dCxlLm1lc3NhZ2U9by5NZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOnRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobik/KGUuZmlyc3RSZXN0cmljdGVkPXQsZS5tZXNzYWdlPW8uTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5wYXJhbVNldCxyKSYmKGUuc3RyaWN0ZWQ9dCxlLm1lc3NhZ2U9by5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpKSwiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wYXJhbVNldCxyLHt2YWx1ZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmUucGFyYW1TZXRbcl09ITB9LGUucHJvdG90eXBlLnBhcnNlUmVzdEVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIi4uLiIpO3ZhciBuPXRoaXMucGFyc2VQYXR0ZXJuKGUpO3JldHVybiB0aGlzLm1hdGNoKCI9IikmJnRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKSx0aGlzLm1hdGNoKCIpIil8fHRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlciksdGhpcy5maW5hbGl6ZSh0LG5ldyBhLlJlc3RFbGVtZW50KG4pKX0sZS5wcm90b3R5cGUucGFyc2VGb3JtYWxQYXJhbWV0ZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49dGhpcy5tYXRjaCgiLi4uIik/dGhpcy5wYXJzZVJlc3RFbGVtZW50KHQpOnRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQodCkscj0wO3I8dC5sZW5ndGg7cisrKXRoaXMudmFsaWRhdGVQYXJhbShlLHRbcl0sdFtyXS52YWx1ZSk7ZS5zaW1wbGU9ZS5zaW1wbGUmJm4gaW5zdGFuY2VvZiBhLklkZW50aWZpZXIsZS5wYXJhbXMucHVzaChuKX0sZS5wcm90b3R5cGUucGFyc2VGb3JtYWxQYXJhbWV0ZXJzPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKHQ9e3NpbXBsZTohMCxwYXJhbXM6W10sZmlyc3RSZXN0cmljdGVkOmV9LHRoaXMuZXhwZWN0KCIoIiksIXRoaXMubWF0Y2goIikiKSlmb3IodC5wYXJhbVNldD17fTsyIT09dGhpcy5sb29rYWhlYWQudHlwZSYmKHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXIodCksIXRoaXMubWF0Y2goIikiKSkmJih0aGlzLmV4cGVjdCgiLCIpLCF0aGlzLm1hdGNoKCIpIikpOyk7cmV0dXJuIHRoaXMuZXhwZWN0KCIpIikse3NpbXBsZTp0LnNpbXBsZSxwYXJhbXM6dC5wYXJhbXMsc3RyaWN0ZWQ6dC5zdHJpY3RlZCxmaXJzdFJlc3RyaWN0ZWQ6dC5maXJzdFJlc3RyaWN0ZWQsbWVzc2FnZTp0Lm1lc3NhZ2V9fSxlLnByb3RvdHlwZS5tYXRjaEFzeW5jRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzeW5jIik7aWYoZSl7dmFyIHQ9dGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpO3RoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTt2YXIgbj10aGlzLnNjYW5uZXIubGV4KCk7dGhpcy5zY2FubmVyLnJlc3RvcmVTdGF0ZSh0KSxlPXQubGluZU51bWJlcj09PW4ubGluZU51bWJlciYmND09PW4udHlwZSYmImZ1bmN0aW9uIj09PW4udmFsdWV9cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZU5vZGUoKSxuPXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXN5bmMiKTtuJiZ0aGlzLm5leHRUb2tlbigpLHRoaXMuZXhwZWN0S2V5d29yZCgiZnVuY3Rpb24iKTt2YXIgcj0hbiYmdGhpcy5tYXRjaCgiKiIpO3ImJnRoaXMubmV4dFRva2VuKCk7dmFyIGkscz1udWxsLHU9bnVsbDtpZighZXx8IXRoaXMubWF0Y2goIigiKSl7dmFyIGM9dGhpcy5sb29rYWhlYWQ7cz10aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCksdGhpcy5jb250ZXh0LnN0cmljdD90aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChjLnZhbHVlKSYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihjLG8uTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTp0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChjLnZhbHVlKT8odT1jLGk9by5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOnRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoYy52YWx1ZSkmJih1PWMsaT1vLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCl9dmFyIGw9dGhpcy5jb250ZXh0LmF3YWl0LHA9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmF3YWl0PW4sdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9IXI7dmFyIGY9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnModSksZD1mLnBhcmFtcyxoPWYuc3RyaWN0ZWQ7dT1mLmZpcnN0UmVzdHJpY3RlZCxmLm1lc3NhZ2UmJihpPWYubWVzc2FnZSk7dmFyIG09dGhpcy5jb250ZXh0LnN0cmljdCxnPXRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTt0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9Zi5zaW1wbGU7dmFyIHk9dGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtyZXR1cm4gdGhpcy5jb250ZXh0LnN0cmljdCYmdSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih1LGkpLHRoaXMuY29udGV4dC5zdHJpY3QmJmgmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oaCxpKSx0aGlzLmNvbnRleHQuc3RyaWN0PW0sdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPWcsdGhpcy5jb250ZXh0LmF3YWl0PWwsdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9cCxuP3RoaXMuZmluYWxpemUodCxuZXcgYS5Bc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24ocyxkLHkpKTp0aGlzLmZpbmFsaXplKHQsbmV3IGEuRnVuY3Rpb25EZWNsYXJhdGlvbihzLGQseSxyKSl9LGUucHJvdG90eXBlLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzeW5jIik7dCYmdGhpcy5uZXh0VG9rZW4oKSx0aGlzLmV4cGVjdEtleXdvcmQoImZ1bmN0aW9uIik7dmFyIG49IXQmJnRoaXMubWF0Y2goIioiKTtuJiZ0aGlzLm5leHRUb2tlbigpO3ZhciByLGkscz1udWxsLHU9dGhpcy5jb250ZXh0LmF3YWl0LGM9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7aWYodGhpcy5jb250ZXh0LmF3YWl0PXQsdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9IW4sIXRoaXMubWF0Y2goIigiKSl7dmFyIGw9dGhpcy5sb29rYWhlYWQ7cz10aGlzLmNvbnRleHQuc3RyaWN0fHxufHwhdGhpcy5tYXRjaEtleXdvcmQoInlpZWxkIik/dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOnRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpLHRoaXMuY29udGV4dC5zdHJpY3Q/dGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQobC52YWx1ZSkmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obCxvLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk6dGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQobC52YWx1ZSk/KGk9bCxyPW8uTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTp0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGwudmFsdWUpJiYoaT1sLHI9by5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpfXZhciBwPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGkpLGY9cC5wYXJhbXMsZD1wLnN0cmljdGVkO2k9cC5maXJzdFJlc3RyaWN0ZWQscC5tZXNzYWdlJiYocj1wLm1lc3NhZ2UpO3ZhciBoPXRoaXMuY29udGV4dC5zdHJpY3QsbT10aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPXAuc2ltcGxlO3ZhciBnPXRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7cmV0dXJuIHRoaXMuY29udGV4dC5zdHJpY3QmJmkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oaSxyKSx0aGlzLmNvbnRleHQuc3RyaWN0JiZkJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGQsciksdGhpcy5jb250ZXh0LnN0cmljdD1oLHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1tLHRoaXMuY29udGV4dC5hd2FpdD11LHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPWMsdD90aGlzLmZpbmFsaXplKGUsbmV3IGEuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24ocyxmLGcpKTp0aGlzLmZpbmFsaXplKGUsbmV3IGEuRnVuY3Rpb25FeHByZXNzaW9uKHMsZixnLG4pKX0sZS5wcm90b3R5cGUucGFyc2VEaXJlY3RpdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZCx0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5wYXJzZUV4cHJlc3Npb24oKSxyPW4udHlwZT09PXUuU3ludGF4LkxpdGVyYWw/dGhpcy5nZXRUb2tlblJhdyhlKS5zbGljZSgxLC0xKTpudWxsO3JldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKHQscj9uZXcgYS5EaXJlY3RpdmUobixyKTpuZXcgYS5FeHByZXNzaW9uU3RhdGVtZW50KG4pKX0sZS5wcm90b3R5cGUucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bnVsbCx0PVtdOzspe3ZhciBuPXRoaXMubG9va2FoZWFkO2lmKDghPT1uLnR5cGUpYnJlYWs7dmFyIHI9dGhpcy5wYXJzZURpcmVjdGl2ZSgpO3QucHVzaChyKTt2YXIgaT1yLmRpcmVjdGl2ZTtpZigic3RyaW5nIiE9PXR5cGVvZiBpKWJyZWFrOyJ1c2Ugc3RyaWN0Ij09PWk/KHRoaXMuY29udGV4dC5zdHJpY3Q9ITAsZSYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihlLG8uTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKSx0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmV8fHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obixvLk1lc3NhZ2VzLklsbGVnYWxMYW5ndWFnZU1vZGVEaXJlY3RpdmUpKTohZSYmbi5vY3RhbCYmKGU9bil9cmV0dXJuIHR9LGUucHJvdG90eXBlLnF1YWxpZmllZFByb3BlcnR5TmFtZT1mdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlIDM6Y2FzZSA4OmNhc2UgMTpjYXNlIDU6Y2FzZSA2OmNhc2UgNDpyZXR1cm4hMDtjYXNlIDc6cmV0dXJuIlsiPT09ZS52YWx1ZX1yZXR1cm4hMX0sZS5wcm90b3R5cGUucGFyc2VHZXR0ZXJNZXRob2Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMuY29udGV4dC5hbGxvd1lpZWxkO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExO3ZhciBuPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7bi5wYXJhbXMubGVuZ3RoPjAmJnRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLkJhZEdldHRlckFyaXR5KTt2YXIgcj10aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qobik7cmV0dXJuIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPXQsdGhpcy5maW5hbGl6ZShlLG5ldyBhLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLG4ucGFyYW1zLHIsITEpKX0sZS5wcm90b3R5cGUucGFyc2VTZXR0ZXJNZXRob2Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMuY29udGV4dC5hbGxvd1lpZWxkO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExO3ZhciBuPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7MSE9PW4ucGFyYW1zLmxlbmd0aD90aGlzLnRvbGVyYXRlRXJyb3Ioby5NZXNzYWdlcy5CYWRTZXR0ZXJBcml0eSk6bi5wYXJhbXNbMF1pbnN0YW5jZW9mIGEuUmVzdEVsZW1lbnQmJnRoaXMudG9sZXJhdGVFcnJvcihvLk1lc3NhZ2VzLkJhZFNldHRlclJlc3RQYXJhbWV0ZXIpO3ZhciByPXRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChuKTtyZXR1cm4gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9dCx0aGlzLmZpbmFsaXplKGUsbmV3IGEuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsbi5wYXJhbXMsciwhMSkpfSxlLnByb3RvdHlwZS5wYXJzZUdlbmVyYXRvck1ldGhvZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9ITA7dmFyIG49dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMTt2YXIgcj10aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qobik7cmV0dXJuIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPXQsdGhpcy5maW5hbGl6ZShlLG5ldyBhLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLG4ucGFyYW1zLHIsITApKX0sZS5wcm90b3R5cGUuaXNTdGFydE9mRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPSEwLHQ9dGhpcy5sb29rYWhlYWQudmFsdWU7c3dpdGNoKHRoaXMubG9va2FoZWFkLnR5cGUpe2Nhc2UgNzplPSJbIj09PXR8fCIoIj09PXR8fCJ7Ij09PXR8fCIrIj09PXR8fCItIj09PXR8fCIhIj09PXR8fCJ+Ij09PXR8fCIrKyI9PT10fHwiLS0iPT09dHx8Ii8iPT09dHx8Ii89Ij09PXQ7YnJlYWs7Y2FzZSA0OmU9ImNsYXNzIj09PXR8fCJkZWxldGUiPT09dHx8ImZ1bmN0aW9uIj09PXR8fCJsZXQiPT09dHx8Im5ldyI9PT10fHwic3VwZXIiPT09dHx8InRoaXMiPT09dHx8InR5cGVvZiI9PT10fHwidm9pZCI9PT10fHwieWllbGQiPT09dH1yZXR1cm4gZX0sZS5wcm90b3R5cGUucGFyc2VZaWVsZEV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoInlpZWxkIik7dmFyIHQ9bnVsbCxuPSExO2lmKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKXt2YXIgcj10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMSxuPXRoaXMubWF0Y2goIioiKSxuPyh0aGlzLm5leHRUb2tlbigpLHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOnRoaXMuaXNTdGFydE9mRXhwcmVzc2lvbigpJiYodD10aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSksdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9cn1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLllpZWxkRXhwcmVzc2lvbih0LG4pKX0sZS5wcm90b3R5cGUucGFyc2VDbGFzc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sb29rYWhlYWQsbj10aGlzLmNyZWF0ZU5vZGUoKSxyPSIiLGk9bnVsbCxzPW51bGwsdT0hMSxjPSExLGw9ITEscD0hMTtpZih0aGlzLm1hdGNoKCIqIikpdGhpcy5uZXh0VG9rZW4oKTtlbHNle3U9dGhpcy5tYXRjaCgiWyIpLGk9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7aWYoInN0YXRpYyI9PT1pLm5hbWUmJih0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCl8fHRoaXMubWF0Y2goIioiKSkmJih0PXRoaXMubG9va2FoZWFkLGw9ITAsdT10aGlzLm1hdGNoKCJbIiksdGhpcy5tYXRjaCgiKiIpP3RoaXMubmV4dFRva2VuKCk6aT10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSksMz09PXQudHlwZSYmIXRoaXMuaGFzTGluZVRlcm1pbmF0b3ImJiJhc3luYyI9PT10LnZhbHVlKXt2YXIgZj10aGlzLmxvb2thaGVhZC52YWx1ZTsiOiIhPT1mJiYiKCIhPT1mJiYiKiIhPT1mJiYocD0hMCx0PXRoaXMubG9va2FoZWFkLGk9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCksMz09PXQudHlwZSYmKCJnZXQiPT09dC52YWx1ZXx8InNldCI9PT10LnZhbHVlP3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odCk6ImNvbnN0cnVjdG9yIj09PXQudmFsdWUmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odCxvLk1lc3NhZ2VzLkNvbnN0cnVjdG9ySXNBc3luYykpKX19dmFyIGQ9dGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO3JldHVybiAzPT09dC50eXBlPyJnZXQiPT09dC52YWx1ZSYmZD8ocj0iZ2V0Iix1PXRoaXMubWF0Y2goIlsiKSxpPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExLHM9dGhpcy5wYXJzZUdldHRlck1ldGhvZCgpKToic2V0Ij09PXQudmFsdWUmJmQmJihyPSJzZXQiLHU9dGhpcy5tYXRjaCgiWyIpLGk9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCkscz10aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCkpOjc9PT10LnR5cGUmJiIqIj09PXQudmFsdWUmJmQmJihyPSJpbml0Iix1PXRoaXMubWF0Y2goIlsiKSxpPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHM9dGhpcy5wYXJzZUdlbmVyYXRvck1ldGhvZCgpLGM9ITApLCFyJiZpJiZ0aGlzLm1hdGNoKCIoIikmJihyPSJpbml0IixzPXA/dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbigpOnRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksYz0hMCkscnx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksImluaXQiPT09ciYmKHI9Im1ldGhvZCIpLHV8fChsJiZ0aGlzLmlzUHJvcGVydHlLZXkoaSwicHJvdG90eXBlIikmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCxvLk1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSksIWwmJnRoaXMuaXNQcm9wZXJ0eUtleShpLCJjb25zdHJ1Y3RvciIpJiYoKCJtZXRob2QiIT09cnx8IWN8fHMmJnMuZ2VuZXJhdG9yKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0LG8uTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKSxlLnZhbHVlP3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCxvLk1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTplLnZhbHVlPSEwLHI9ImNvbnN0cnVjdG9yIikpLHRoaXMuZmluYWxpemUobixuZXcgYS5NZXRob2REZWZpbml0aW9uKGksdSxzLHIsbCkpfSxlLnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudExpc3Q9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXt2YWx1ZTohMX07Zm9yKHRoaXMuZXhwZWN0KCJ7Iik7IXRoaXMubWF0Y2goIn0iKTspdGhpcy5tYXRjaCgiOyIpP3RoaXMubmV4dFRva2VuKCk6ZS5wdXNoKHRoaXMucGFyc2VDbGFzc0VsZW1lbnQodCkpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLGV9LGUucHJvdG90eXBlLnBhcnNlQ2xhc3NCb2R5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCgpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQ2xhc3NCb2R5KHQpKX0sZS5wcm90b3R5cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5jb250ZXh0LnN0cmljdDt0aGlzLmNvbnRleHQuc3RyaWN0PSEwLHRoaXMuZXhwZWN0S2V5d29yZCgiY2xhc3MiKTt2YXIgcj1lJiYzIT09dGhpcy5sb29rYWhlYWQudHlwZT9udWxsOnRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSxpPW51bGw7dGhpcy5tYXRjaEtleXdvcmQoImV4dGVuZHMiKSYmKHRoaXMubmV4dFRva2VuKCksaT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpKTt2YXIgbz10aGlzLnBhcnNlQ2xhc3NCb2R5KCk7cmV0dXJuIHRoaXMuY29udGV4dC5zdHJpY3Q9bix0aGlzLmZpbmFsaXplKHQsbmV3IGEuQ2xhc3NEZWNsYXJhdGlvbihyLGksbykpfSxlLnByb3RvdHlwZS5wYXJzZUNsYXNzRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5jb250ZXh0LnN0cmljdDt0aGlzLmNvbnRleHQuc3RyaWN0PSEwLHRoaXMuZXhwZWN0S2V5d29yZCgiY2xhc3MiKTt2YXIgbj0zPT09dGhpcy5sb29rYWhlYWQudHlwZT90aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk6bnVsbCxyPW51bGw7dGhpcy5tYXRjaEtleXdvcmQoImV4dGVuZHMiKSYmKHRoaXMubmV4dFRva2VuKCkscj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpKTt2YXIgaT10aGlzLnBhcnNlQ2xhc3NCb2R5KCk7cmV0dXJuIHRoaXMuY29udGV4dC5zdHJpY3Q9dCx0aGlzLmZpbmFsaXplKGUsbmV3IGEuQ2xhc3NFeHByZXNzaW9uKG4scixpKSl9LGUucHJvdG90eXBlLnBhcnNlTW9kdWxlPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnN0cmljdD0hMCx0aGlzLmNvbnRleHQuaXNNb2R1bGU9ITA7Zm9yKHZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOzIhPT10aGlzLmxvb2thaGVhZC50eXBlOyl0LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuTW9kdWxlKHQpKX0sZS5wcm90b3R5cGUucGFyc2VTY3JpcHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7MiE9PXRoaXMubG9va2FoZWFkLnR5cGU7KXQucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5TY3JpcHQodCkpfSxlLnByb3RvdHlwZS5wYXJzZU1vZHVsZVNwZWNpZmllcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpOzghPT10aGlzLmxvb2thaGVhZC50eXBlJiZ0aGlzLnRocm93RXJyb3Ioby5NZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTt2YXIgdD10aGlzLm5leHRUb2tlbigpLG49dGhpcy5nZXRUb2tlblJhdyh0KTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkxpdGVyYWwodC52YWx1ZSxuKSl9LGUucHJvdG90eXBlLnBhcnNlSW1wb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPXRoaXMuY3JlYXRlTm9kZSgpO3JldHVybiAzPT09dGhpcy5sb29rYWhlYWQudHlwZT8oZT10aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCksdD1lLHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXMiKSYmKHRoaXMubmV4dFRva2VuKCksdD10aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkpKTooZT10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSx0PWUsdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhcyIpPyh0aGlzLm5leHRUb2tlbigpLHQ9dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpKTp0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpKSx0aGlzLmZpbmFsaXplKG4sbmV3IGEuSW1wb3J0U3BlY2lmaWVyKHQsZSkpfSxlLnByb3RvdHlwZS5wYXJzZU5hbWVkSW1wb3J0cz1mdW5jdGlvbigpe3RoaXMuZXhwZWN0KCJ7Iik7Zm9yKHZhciBlPVtdOyF0aGlzLm1hdGNoKCJ9Iik7KWUucHVzaCh0aGlzLnBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpLHRoaXMubWF0Y2goIn0iKXx8dGhpcy5leHBlY3QoIiwiKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSxlfSxlLnByb3RvdHlwZS5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuSW1wb3J0RGVmYXVsdFNwZWNpZmllcih0KSl9LGUucHJvdG90eXBlLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIioiKSx0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzIil8fHRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLk5vQXNBZnRlckltcG9ydE5hbWVzcGFjZSksdGhpcy5uZXh0VG9rZW4oKTt2YXIgdD10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcih0KSl9LGUucHJvdG90eXBlLnBhcnNlSW1wb3J0RGVjbGFyYXRpb249ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkmJnRoaXMudGhyb3dFcnJvcihvLk1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbXBvcnQiKTt2YXIgdCxuPVtdO2lmKDg9PT10aGlzLmxvb2thaGVhZC50eXBlKXQ9dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpO2Vsc2V7aWYodGhpcy5tYXRjaCgieyIpP249bi5jb25jYXQodGhpcy5wYXJzZU5hbWVkSW1wb3J0cygpKTp0aGlzLm1hdGNoKCIqIik/bi5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk6dGhpcy5pc0lkZW50aWZpZXJOYW1lKHRoaXMubG9va2FoZWFkKSYmIXRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iik/KG4ucHVzaCh0aGlzLnBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKSx0aGlzLm1hdGNoKCIsIikmJih0aGlzLm5leHRUb2tlbigpLHRoaXMubWF0Y2goIioiKT9uLnB1c2godGhpcy5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTp0aGlzLm1hdGNoKCJ7Iik/bj1uLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpOnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpKSk6dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKSwhdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJmcm9tIikpe3ZhciByPXRoaXMubG9va2FoZWFkLnZhbHVlP28uTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOm8uTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7dGhpcy50aHJvd0Vycm9yKHIsdGhpcy5sb29rYWhlYWQudmFsdWUpfXRoaXMubmV4dFRva2VuKCksdD10aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVyKCl9cmV0dXJuIHRoaXMuY29uc3VtZVNlbWljb2xvbigpLHRoaXMuZmluYWxpemUoZSxuZXcgYS5JbXBvcnREZWNsYXJhdGlvbihuLHQpKX0sZS5wcm90b3R5cGUucGFyc2VFeHBvcnRTcGVjaWZpZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpLG49dDtyZXR1cm4gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhcyIpJiYodGhpcy5uZXh0VG9rZW4oKSxuPXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpKSx0aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0U3BlY2lmaWVyKHQsbikpfSxlLnByb3RvdHlwZS5wYXJzZUV4cG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5JiZ0aGlzLnRocm93RXJyb3Ioby5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiZXhwb3J0Iik7dmFyIHQ7aWYodGhpcy5tYXRjaEtleXdvcmQoImRlZmF1bHQiKSlpZih0aGlzLm5leHRUb2tlbigpLHRoaXMubWF0Y2hLZXl3b3JkKCJmdW5jdGlvbiIpKXt2YXIgbj10aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbighMCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG4pKX1lbHNlIGlmKHRoaXMubWF0Y2hLZXl3b3JkKCJjbGFzcyIpKXt2YXIgbj10aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbighMCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG4pKX1lbHNlIGlmKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXN5bmMiKSl7dmFyIG49dGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKT90aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbighMCk6dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG4pKX1lbHNle3RoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiZnJvbSIpJiZ0aGlzLnRocm93RXJyb3Ioby5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sdGhpcy5sb29rYWhlYWQudmFsdWUpO3ZhciBuPXRoaXMubWF0Y2goInsiKT90aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKTp0aGlzLm1hdGNoKCJbIik/dGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIoKTp0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTt0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24obikpfWVsc2UgaWYodGhpcy5tYXRjaCgiKiIpKXtpZih0aGlzLm5leHRUb2tlbigpLCF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImZyb20iKSl7dmFyIHI9dGhpcy5sb29rYWhlYWQudmFsdWU/by5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW46by5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTt0aGlzLnRocm93RXJyb3Iocix0aGlzLmxvb2thaGVhZC52YWx1ZSl9dGhpcy5uZXh0VG9rZW4oKTt2YXIgaT10aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCksdD10aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0QWxsRGVjbGFyYXRpb24oaSkpfWVsc2UgaWYoND09PXRoaXMubG9va2FoZWFkLnR5cGUpe3ZhciBuPXZvaWQgMDtzd2l0Y2godGhpcy5sb29rYWhlYWQudmFsdWUpe2Nhc2UibGV0IjpjYXNlImNvbnN0IjpuPXRoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOiExfSk7YnJlYWs7Y2FzZSJ2YXIiOmNhc2UiY2xhc3MiOmNhc2UiZnVuY3Rpb24iOm49dGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKX10PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKG4sW10sbnVsbCkpfWVsc2UgaWYodGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSl7dmFyIG49dGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKG4sW10sbnVsbCkpfWVsc2V7dmFyIHM9W10sdT1udWxsLGM9ITE7Zm9yKHRoaXMuZXhwZWN0KCJ7Iik7IXRoaXMubWF0Y2goIn0iKTspYz1jfHx0aGlzLm1hdGNoS2V5d29yZCgiZGVmYXVsdCIpLHMucHVzaCh0aGlzLnBhcnNlRXhwb3J0U3BlY2lmaWVyKCkpLHRoaXMubWF0Y2goIn0iKXx8dGhpcy5leHBlY3QoIiwiKTtpZih0aGlzLmV4cGVjdCgifSIpLHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiZnJvbSIpKXRoaXMubmV4dFRva2VuKCksdT10aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVyKCksdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7ZWxzZSBpZihjKXt2YXIgcj10aGlzLmxvb2thaGVhZC52YWx1ZT9vLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjpvLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlO3RoaXMudGhyb3dFcnJvcihyLHRoaXMubG9va2FoZWFkLnZhbHVlKX1lbHNlIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBhLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24obnVsbCxzLHUpKX1yZXR1cm4gdH0sZX0oKTt0LlBhcnNlcj1sfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJBU1NFUlQ6ICIrdCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYXNzZXJ0PW59LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmVycm9ycz1bXSx0aGlzLnRvbGVyYW50PSExfXJldHVybiBlLnByb3RvdHlwZS5yZWNvcmRFcnJvcj1mdW5jdGlvbihlKXt0aGlzLmVycm9ycy5wdXNoKGUpfSxlLnByb3RvdHlwZS50b2xlcmF0ZT1mdW5jdGlvbihlKXtpZighdGhpcy50b2xlcmFudCl0aHJvdyBlO3RoaXMucmVjb3JkRXJyb3IoZSl9LGUucHJvdG90eXBlLmNvbnN0cnVjdEVycm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IEVycm9yKGUpO3RyeXt0aHJvdyBufWNhdGNoKGUpe09iamVjdC5jcmVhdGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmKG49T2JqZWN0LmNyZWF0ZShlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiY29sdW1uIix7dmFsdWU6dH0pKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9IkxpbmUgIit0KyI6ICIrcixvPXRoaXMuY29uc3RydWN0RXJyb3IoaSxuKTtyZXR1cm4gby5pbmRleD1lLG8ubGluZU51bWJlcj10LG8uZGVzY3JpcHRpb249cixvfSxlLnByb3RvdHlwZS50aHJvd0Vycm9yPWZ1bmN0aW9uKGUsdCxuLHIpe3Rocm93IHRoaXMuY3JlYXRlRXJyb3IoZSx0LG4scil9LGUucHJvdG90eXBlLnRvbGVyYXRlRXJyb3I9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5jcmVhdGVFcnJvcihlLHQsbixyKTtpZighdGhpcy50b2xlcmFudCl0aHJvdyBpO3RoaXMucmVjb3JkRXJyb3IoaSl9LGV9KCk7dC5FcnJvckhhbmRsZXI9bn0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZXM9e0JhZEdldHRlckFyaXR5OiJHZXR0ZXIgbXVzdCBub3QgaGF2ZSBhbnkgZm9ybWFsIHBhcmFtZXRlcnMiLEJhZFNldHRlckFyaXR5OiJTZXR0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGZvcm1hbCBwYXJhbWV0ZXIiLEJhZFNldHRlclJlc3RQYXJhbWV0ZXI6IlNldHRlciBmdW5jdGlvbiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIHJlc3QgcGFyYW1ldGVyIixDb25zdHJ1Y3RvcklzQXN5bmM6IkNsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYXN5bmMgbWV0aG9kIixDb25zdHJ1Y3RvclNwZWNpYWxNZXRob2Q6IkNsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYWNjZXNzb3IiLERlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxpemVyOiJNaXNzaW5nIGluaXRpYWxpemVyIGluICUwIGRlY2xhcmF0aW9uIixEZWZhdWx0UmVzdFBhcmFtZXRlcjoiVW5leHBlY3RlZCB0b2tlbiA9IixEdXBsaWNhdGVCaW5kaW5nOiJEdXBsaWNhdGUgYmluZGluZyAlMCIsRHVwbGljYXRlQ29uc3RydWN0b3I6IkEgY2xhc3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29uc3RydWN0b3IiLER1cGxpY2F0ZVByb3RvUHJvcGVydHk6IkR1cGxpY2F0ZSBfX3Byb3RvX18gZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMiLEZvckluT2ZMb29wSW5pdGlhbGl6ZXI6IiUwIGxvb3AgdmFyaWFibGUgZGVjbGFyYXRpb24gbWF5IG5vdCBoYXZlIGFuIGluaXRpYWxpemVyIixHZW5lcmF0b3JJbkxlZ2FjeUNvbnRleHQ6IkdlbmVyYXRvciBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGxlZ2FjeSBjb250ZXh0cyIsSWxsZWdhbEJyZWFrOiJJbGxlZ2FsIGJyZWFrIHN0YXRlbWVudCIsSWxsZWdhbENvbnRpbnVlOiJJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCIsSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiJVbmV4cGVjdGVkIHRva2VuIixJbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb246IlVuZXhwZWN0ZWQgdG9rZW4iLElsbGVnYWxMYW5ndWFnZU1vZGVEaXJlY3RpdmU6IklsbGVnYWwgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZSBpbiBmdW5jdGlvbiB3aXRoIG5vbi1zaW1wbGUgcGFyYW1ldGVyIGxpc3QiLElsbGVnYWxSZXR1cm46IklsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCIsSW52YWxpZEVzY2FwZWRSZXNlcnZlZFdvcmQ6IktleXdvcmQgbXVzdCBub3QgY29udGFpbiBlc2NhcGVkIGNoYXJhY3RlcnMiLEludmFsaWRIZXhFc2NhcGVTZXF1ZW5jZToiSW52YWxpZCBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2UiLEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6IkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCIsSW52YWxpZExIU0luRm9ySW46IkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluIixJbnZhbGlkTEhTSW5Gb3JMb29wOiJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1sb29wIixJbnZhbGlkTW9kdWxlU3BlY2lmaWVyOiJVbmV4cGVjdGVkIHRva2VuIixJbnZhbGlkUmVnRXhwOiJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIsTGV0SW5MZXhpY2FsQmluZGluZzoibGV0IGlzIGRpc2FsbG93ZWQgYXMgYSBsZXhpY2FsbHkgYm91bmQgbmFtZSIsTWlzc2luZ0Zyb21DbGF1c2U6IlVuZXhwZWN0ZWQgdG9rZW4iLE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDoiTW9yZSB0aGFuIG9uZSBkZWZhdWx0IGNsYXVzZSBpbiBzd2l0Y2ggc3RhdGVtZW50IixOZXdsaW5lQWZ0ZXJUaHJvdzoiSWxsZWdhbCBuZXdsaW5lIGFmdGVyIHRocm93IixOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6IlVuZXhwZWN0ZWQgdG9rZW4iLE5vQ2F0Y2hPckZpbmFsbHk6Ik1pc3NpbmcgY2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnkiLFBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcjoiUmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IGZvcm1hbCBwYXJhbWV0ZXIiLFJlZGVjbGFyYXRpb246IiUwICclMScgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCIsU3RhdGljUHJvdG90eXBlOiJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlIixTdHJpY3RDYXRjaFZhcmlhYmxlOiJDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlIixTdHJpY3REZWxldGU6IkRlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLiIsU3RyaWN0RnVuY3Rpb246IkluIHN0cmljdCBtb2RlIGNvZGUsIGZ1bmN0aW9ucyBjYW4gb25seSBiZSBkZWNsYXJlZCBhdCB0b3AgbGV2ZWwgb3IgaW5zaWRlIGEgYmxvY2siLFN0cmljdEZ1bmN0aW9uTmFtZToiRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlIixTdHJpY3RMSFNBc3NpZ25tZW50OiJBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlIixTdHJpY3RMSFNQb3N0Zml4OiJQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUiLFN0cmljdExIU1ByZWZpeDoiUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUiLFN0cmljdE1vZGVXaXRoOiJTdHJpY3QgbW9kZSBjb2RlIG1heSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50IixTdHJpY3RPY3RhbExpdGVyYWw6Ik9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4iLFN0cmljdFBhcmFtRHVwZToiU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMiLFN0cmljdFBhcmFtTmFtZToiUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUiLFN0cmljdFJlc2VydmVkV29yZDoiVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlIixTdHJpY3RWYXJOYW1lOiJWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUiLFRlbXBsYXRlT2N0YWxMaXRlcmFsOiJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gdGVtcGxhdGUgc3RyaW5ncy4iLFVuZXhwZWN0ZWRFT1M6IlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IixVbmV4cGVjdGVkSWRlbnRpZmllcjoiVW5leHBlY3RlZCBpZGVudGlmaWVyIixVbmV4cGVjdGVkTnVtYmVyOiJVbmV4cGVjdGVkIG51bWJlciIsVW5leHBlY3RlZFJlc2VydmVkOiJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQiLFVuZXhwZWN0ZWRTdHJpbmc6IlVuZXhwZWN0ZWQgc3RyaW5nIixVbmV4cGVjdGVkVGVtcGxhdGU6IlVuZXhwZWN0ZWQgcXVhc2kgJTAiLFVuZXhwZWN0ZWRUb2tlbjoiVW5leHBlY3RlZCB0b2tlbiAlMCIsVW5leHBlY3RlZFRva2VuSWxsZWdhbDoiVW5leHBlY3RlZCB0b2tlbiBJTExFR0FMIixVbmtub3duTGFiZWw6IlVuZGVmaW5lZCBsYWJlbCAnJTAnIixVbnRlcm1pbmF0ZWRSZWdFeHA6IkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8ifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiIwMTIzNDU2Nzg5YWJjZGVmIi5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4iMDEyMzQ1NjciLmluZGV4T2YoZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oOSksYT1uKDQpLHM9bigxMSksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnNvdXJjZT1lLHRoaXMuZXJyb3JIYW5kbGVyPXQsdGhpcy50cmFja0NvbW1lbnQ9ITEsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5pbmRleD0wLHRoaXMubGluZU51bWJlcj1lLmxlbmd0aD4wPzE6MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMuY3VybHlTdGFjaz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OnRoaXMuaW5kZXgsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0fX0sZS5wcm90b3R5cGUucmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuaW5kZXg9ZS5pbmRleCx0aGlzLmxpbmVOdW1iZXI9ZS5saW5lTnVtYmVyLHRoaXMubGluZVN0YXJ0PWUubGluZVN0YXJ0fSxlLnByb3RvdHlwZS5lb2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy5sZW5ndGh9LGUucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1zLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWwpLHRoaXMuZXJyb3JIYW5kbGVyLnRocm93RXJyb3IodGhpcy5pbmRleCx0aGlzLmxpbmVOdW1iZXIsdGhpcy5pbmRleC10aGlzLmxpbmVTdGFydCsxLGUpfSxlLnByb3RvdHlwZS50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1zLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWwpLHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJyb3IodGhpcy5pbmRleCx0aGlzLmxpbmVOdW1iZXIsdGhpcy5pbmRleC10aGlzLmxpbmVTdGFydCsxLGUpfSxlLnByb3RvdHlwZS5za2lwU2luZ2xlTGluZUNvbW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVtdO2Zvcih0aGlzLnRyYWNrQ29tbWVudCYmKHI9W10sdD10aGlzLmluZGV4LWUsbj17c3RhcnQ6e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0LWV9LGVuZDp7fX0pOyF0aGlzLmVvZigpOyl7dmFyIGk9dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtpZigrK3RoaXMuaW5kZXgsYS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihpKSl7aWYodGhpcy50cmFja0NvbW1lbnQpe24uZW5kPXtsaW5lOnRoaXMubGluZU51bWJlcixjb2x1bW46dGhpcy5pbmRleC10aGlzLmxpbmVTdGFydC0xfTt2YXIgbz17bXVsdGlMaW5lOiExLHNsaWNlOlt0K2UsdGhpcy5pbmRleC0xXSxyYW5nZTpbdCx0aGlzLmluZGV4LTFdLGxvYzpufTtyLnB1c2gobyl9cmV0dXJuIDEzPT09aSYmMTA9PT10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpJiYrK3RoaXMuaW5kZXgsKyt0aGlzLmxpbmVOdW1iZXIsdGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleCxyfX1pZih0aGlzLnRyYWNrQ29tbWVudCl7bi5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0fTt2YXIgbz17bXVsdGlMaW5lOiExLHNsaWNlOlt0K2UsdGhpcy5pbmRleF0scmFuZ2U6W3QsdGhpcy5pbmRleF0sbG9jOm59O3IucHVzaChvKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUuc2tpcE11bHRpTGluZUNvbW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG49W107Zm9yKHRoaXMudHJhY2tDb21tZW50JiYobj1bXSxlPXRoaXMuaW5kZXgtMix0PXtzdGFydDp7bGluZTp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuaW5kZXgtdGhpcy5saW5lU3RhcnQtMn0sZW5kOnt9fSk7IXRoaXMuZW9mKCk7KXt2YXIgcj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKGEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IocikpMTM9PT1yJiYxMD09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSYmKyt0aGlzLmluZGV4LCsrdGhpcy5saW5lTnVtYmVyLCsrdGhpcy5pbmRleCx0aGlzLmxpbmVTdGFydD10aGlzLmluZGV4O2Vsc2UgaWYoNDI9PT1yKXtpZig0Nz09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSl7aWYodGhpcy5pbmRleCs9Mix0aGlzLnRyYWNrQ29tbWVudCl7dC5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0fTt2YXIgaT17bXVsdGlMaW5lOiEwLHNsaWNlOltlKzIsdGhpcy5pbmRleC0yXSxyYW5nZTpbZSx0aGlzLmluZGV4XSxsb2M6dH07bi5wdXNoKGkpfXJldHVybiBufSsrdGhpcy5pbmRleH1lbHNlKyt0aGlzLmluZGV4fWlmKHRoaXMudHJhY2tDb21tZW50KXt0LmVuZD17bGluZTp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuaW5kZXgtdGhpcy5saW5lU3RhcnR9O3ZhciBpPXttdWx0aUxpbmU6ITAsc2xpY2U6W2UrMix0aGlzLmluZGV4XSxyYW5nZTpbZSx0aGlzLmluZGV4XSxsb2M6dH07bi5wdXNoKGkpfXJldHVybiB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCksbn0sZS5wcm90b3R5cGUuc2NhbkNvbW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU7dGhpcy50cmFja0NvbW1lbnQmJihlPVtdKTtmb3IodmFyIHQ9MD09PXRoaXMuaW5kZXg7IXRoaXMuZW9mKCk7KXt2YXIgbj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKGEuQ2hhcmFjdGVyLmlzV2hpdGVTcGFjZShuKSkrK3RoaXMuaW5kZXg7ZWxzZSBpZihhLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKG4pKSsrdGhpcy5pbmRleCwxMz09PW4mJjEwPT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSYmKyt0aGlzLmluZGV4LCsrdGhpcy5saW5lTnVtYmVyLHRoaXMubGluZVN0YXJ0PXRoaXMuaW5kZXgsdD0hMDtlbHNlIGlmKDQ3PT09bilpZig0Nz09PShuPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpe3RoaXMuaW5kZXgrPTI7dmFyIHI9dGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMik7dGhpcy50cmFja0NvbW1lbnQmJihlPWUuY29uY2F0KHIpKSx0PSEwfWVsc2V7aWYoNDIhPT1uKWJyZWFrO3RoaXMuaW5kZXgrPTI7dmFyIHI9dGhpcy5za2lwTXVsdGlMaW5lQ29tbWVudCgpO3RoaXMudHJhY2tDb21tZW50JiYoZT1lLmNvbmNhdChyKSl9ZWxzZSBpZih0JiY0NT09PW4pe2lmKDQ1IT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KzEpfHw2MiE9PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsyKSlicmVhazt0aGlzLmluZGV4Kz0zO3ZhciByPXRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDMpO3RoaXMudHJhY2tDb21tZW50JiYoZT1lLmNvbmNhdChyKSl9ZWxzZXtpZig2MCE9PW4pYnJlYWs7aWYoIiEtLSIhPT10aGlzLnNvdXJjZS5zbGljZSh0aGlzLmluZGV4KzEsdGhpcy5pbmRleCs0KSlicmVhazt0aGlzLmluZGV4Kz00O3ZhciByPXRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDQpO3RoaXMudHJhY2tDb21tZW50JiYoZT1lLmNvbmNhdChyKSl9fXJldHVybiBlfSxlLnByb3RvdHlwZS5pc0Z1dHVyZVJlc2VydmVkV29yZD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJlbnVtIjpjYXNlImV4cG9ydCI6Y2FzZSJpbXBvcnQiOmNhc2Uic3VwZXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxlLnByb3RvdHlwZS5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiaW1wbGVtZW50cyI6Y2FzZSJpbnRlcmZhY2UiOmNhc2UicGFja2FnZSI6Y2FzZSJwcml2YXRlIjpjYXNlInByb3RlY3RlZCI6Y2FzZSJwdWJsaWMiOmNhc2Uic3RhdGljIjpjYXNlInlpZWxkIjpjYXNlImxldCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGUucHJvdG90eXBlLmlzUmVzdHJpY3RlZFdvcmQ9ZnVuY3Rpb24oZSl7cmV0dXJuImV2YWwiPT09ZXx8ImFyZ3VtZW50cyI9PT1lfSxlLnByb3RvdHlwZS5pc0tleXdvcmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDI6cmV0dXJuImlmIj09PWV8fCJpbiI9PT1lfHwiZG8iPT09ZTtjYXNlIDM6cmV0dXJuInZhciI9PT1lfHwiZm9yIj09PWV8fCJuZXciPT09ZXx8InRyeSI9PT1lfHwibGV0Ij09PWU7Y2FzZSA0OnJldHVybiJ0aGlzIj09PWV8fCJlbHNlIj09PWV8fCJjYXNlIj09PWV8fCJ2b2lkIj09PWV8fCJ3aXRoIj09PWV8fCJlbnVtIj09PWU7Y2FzZSA1OnJldHVybiJ3aGlsZSI9PT1lfHwiYnJlYWsiPT09ZXx8ImNhdGNoIj09PWV8fCJ0aHJvdyI9PT1lfHwiY29uc3QiPT09ZXx8InlpZWxkIj09PWV8fCJjbGFzcyI9PT1lfHwic3VwZXIiPT09ZTtjYXNlIDY6cmV0dXJuInJldHVybiI9PT1lfHwidHlwZW9mIj09PWV8fCJkZWxldGUiPT09ZXx8InN3aXRjaCI9PT1lfHwiZXhwb3J0Ij09PWV8fCJpbXBvcnQiPT09ZTtjYXNlIDc6cmV0dXJuImRlZmF1bHQiPT09ZXx8ImZpbmFsbHkiPT09ZXx8ImV4dGVuZHMiPT09ZTtjYXNlIDg6cmV0dXJuImZ1bmN0aW9uIj09PWV8fCJjb250aW51ZSI9PT1lfHwiZGVidWdnZXIiPT09ZTtjYXNlIDEwOnJldHVybiJpbnN0YW5jZW9mIj09PWU7ZGVmYXVsdDpyZXR1cm4hMX19LGUucHJvdG90eXBlLmNvZGVQb2ludEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc291cmNlLmNoYXJDb2RlQXQoZSk7aWYodD49NTUyOTYmJnQ8PTU2MzE5KXt2YXIgbj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KGUrMSk7aWYobj49NTYzMjAmJm48PTU3MzQzKXt0PTEwMjQqKHQtNTUyOTYpK24tNTYzMjArNjU1MzZ9fXJldHVybiB0fSxlLnByb3RvdHlwZS5zY2FuSGV4RXNjYXBlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0idSI9PT1lPzQ6MixuPTAsaT0wO2k8dDsrK2kpe2lmKHRoaXMuZW9mKCl8fCFhLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXJldHVybiBudWxsO249MTYqbityKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pfXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSxlLnByb3RvdHlwZS5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLHQ9MDtmb3IoIn0iPT09ZSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOyF0aGlzLmVvZigpJiYoZT10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdLGEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQoZS5jaGFyQ29kZUF0KDApKSk7KXQ9MTYqdCtyKGUpO3JldHVybih0PjExMTQxMTF8fCJ9IiE9PWUpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCksYS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludCh0KX0sZS5wcm90b3R5cGUuZ2V0SWRlbnRpZmllcj1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmluZGV4Kys7IXRoaXMuZW9mKCk7KXt2YXIgdD10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKDkyPT09dClyZXR1cm4gdGhpcy5pbmRleD1lLHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKTtpZih0Pj01NTI5NiYmdDw1NzM0MylyZXR1cm4gdGhpcy5pbmRleD1lLHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKTtpZighYS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydCh0KSlicmVhazsrK3RoaXMuaW5kZXh9cmV0dXJuIHRoaXMuc291cmNlLnNsaWNlKGUsdGhpcy5pbmRleCl9LGUucHJvdG90eXBlLmdldENvbXBsZXhJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KSx0PWEuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoZSk7dGhpcy5pbmRleCs9dC5sZW5ndGg7dmFyIG47Zm9yKDkyPT09ZSYmKDExNyE9PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSwrK3RoaXMuaW5kZXgsInsiPT09dGhpcy5zb3VyY2VbdGhpcy5pbmRleF0/KCsrdGhpcy5pbmRleCxuPXRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKSk6bnVsbCE9PShuPXRoaXMuc2NhbkhleEVzY2FwZSgidSIpKSYmIlxcIiE9PW4mJmEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KG4uY2hhckNvZGVBdCgwKSl8fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx0PW4pOyF0aGlzLmVvZigpJiYoZT10aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpLGEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoZSkpOyluPWEuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoZSksdCs9bix0aGlzLmluZGV4Kz1uLmxlbmd0aCw5Mj09PWUmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSksMTE3IT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLCsrdGhpcy5pbmRleCwieyI9PT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XT8oKyt0aGlzLmluZGV4LG49dGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpKTpudWxsIT09KG49dGhpcy5zY2FuSGV4RXNjYXBlKCJ1IikpJiYiXFwiIT09biYmYS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChuLmNoYXJDb2RlQXQoMCkpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCksdCs9bik7cmV0dXJuIHR9LGUucHJvdG90eXBlLm9jdGFsVG9EZWNpbWFsPWZ1bmN0aW9uKGUpe3ZhciB0PSIwIiE9PWUsbj1pKGUpO3JldHVybiF0aGlzLmVvZigpJiZhLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkmJih0PSEwLG49OCpuK2kodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSksIjAxMjMiLmluZGV4T2YoZSk+PTAmJiF0aGlzLmVvZigpJiZhLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkmJihuPTgqbitpKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pKSkse2NvZGU6bixvY3RhbDp0fX0sZS5wcm90b3R5cGUuc2NhbklkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuaW5kZXgsbj05Mj09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodCk/dGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpOnRoaXMuZ2V0SWRlbnRpZmllcigpO2lmKDMhPT0oZT0xPT09bi5sZW5ndGg/Mzp0aGlzLmlzS2V5d29yZChuKT80OiJudWxsIj09PW4/NToidHJ1ZSI9PT1ufHwiZmFsc2UiPT09bj8xOjMpJiZ0K24ubGVuZ3RoIT09dGhpcy5pbmRleCl7dmFyIHI9dGhpcy5pbmRleDt0aGlzLmluZGV4PXQsdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzLk1lc3NhZ2VzLkludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkKSx0aGlzLmluZGV4PXJ9cmV0dXJue3R5cGU6ZSx2YWx1ZTpuLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDp0LGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUuc2NhblB1bmN0dWF0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluZGV4LHQ9dGhpcy5zb3VyY2VbdGhpcy5pbmRleF07c3dpdGNoKHQpe2Nhc2UiKCI6Y2FzZSJ7IjoieyI9PT10JiZ0aGlzLmN1cmx5U3RhY2sucHVzaCgieyIpLCsrdGhpcy5pbmRleDticmVhaztjYXNlIi4iOisrdGhpcy5pbmRleCwiLiI9PT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XSYmIi4iPT09dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsxXSYmKHRoaXMuaW5kZXgrPTIsdD0iLi4uIik7YnJlYWs7Y2FzZSJ9IjorK3RoaXMuaW5kZXgsdGhpcy5jdXJseVN0YWNrLnBvcCgpO2JyZWFrO2Nhc2UiKSI6Y2FzZSI7IjpjYXNlIiwiOmNhc2UiWyI6Y2FzZSJdIjpjYXNlIjoiOmNhc2UiPyI6Y2FzZSJ+IjorK3RoaXMuaW5kZXg7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuc291cmNlLnN1YnN0cih0aGlzLmluZGV4LDQpLCI+Pj49Ij09PXQ/dGhpcy5pbmRleCs9NDoodD10LnN1YnN0cigwLDMpLCI9PT0iPT09dHx8IiE9PSI9PT10fHwiPj4+Ij09PXR8fCI8PD0iPT09dHx8Ij4+PSI9PT10fHwiKio9Ij09PXQ/dGhpcy5pbmRleCs9MzoodD10LnN1YnN0cigwLDIpLCImJiI9PT10fHwifHwiPT09dHx8Ij09Ij09PXR8fCIhPSI9PT10fHwiKz0iPT09dHx8Ii09Ij09PXR8fCIqPSI9PT10fHwiLz0iPT09dHx8IisrIj09PXR8fCItLSI9PT10fHwiPDwiPT09dHx8Ij4+Ij09PXR8fCImPSI9PT10fHwifD0iPT09dHx8Il49Ij09PXR8fCIlPSI9PT10fHwiPD0iPT09dHx8Ij49Ij09PXR8fCI9PiI9PT10fHwiKioiPT09dD90aGlzLmluZGV4Kz0yOih0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLCI8Pj0hKy0qJSZ8Xi8iLmluZGV4T2YodCk+PTAmJisrdGhpcy5pbmRleCkpKX1yZXR1cm4gdGhpcy5pbmRleD09PWUmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx7dHlwZTo3LHZhbHVlOnQsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuaW5kZXh9fSxlLnByb3RvdHlwZS5zY2FuSGV4TGl0ZXJhbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9IiI7IXRoaXMuZW9mKCkmJmEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSk7KXQrPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107cmV0dXJuIDA9PT10Lmxlbmd0aCYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLGEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCkse3R5cGU6Nix2YWx1ZTpwYXJzZUludCgiMHgiK3QsMTYpLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDplLGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUuc2NhbkJpbmFyeUxpdGVyYWw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiI7IXRoaXMuZW9mKCkmJigiMCI9PT0odD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XSl8fCIxIj09PXQpOyluKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO3JldHVybiAwPT09bi5sZW5ndGgmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx0aGlzLmVvZigpfHwodD10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpLChhLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0KXx8YS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodCkpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCkpLHt0eXBlOjYsdmFsdWU6cGFyc2VJbnQobiwyKSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6ZSxlbmQ6dGhpcy5pbmRleH19LGUucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iIixyPSExO2ZvcihhLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoZS5jaGFyQ29kZUF0KDApKT8ocj0hMCxuPSIwIit0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTorK3RoaXMuaW5kZXg7IXRoaXMuZW9mKCkmJmEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKTspbis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtyZXR1cm4gcnx8MCE9PW4ubGVuZ3RofHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCksKGEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpfHxhLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx7dHlwZTo2LHZhbHVlOnBhcnNlSW50KG4sOCksb2N0YWw6cixsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6dCxlbmQ6dGhpcy5pbmRleH19LGUucHJvdG90eXBlLmlzSW1wbGljaXRPY3RhbExpdGVyYWw9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5pbmRleCsxO2U8dGhpcy5sZW5ndGg7KytlKXt2YXIgdD10aGlzLnNvdXJjZVtlXTtpZigiOCI9PT10fHwiOSI9PT10KXJldHVybiExO2lmKCFhLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodC5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMH1yZXR1cm4hMH0sZS5wcm90b3R5cGUuc2Nhbk51bWVyaWNMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleCx0PXRoaXMuc291cmNlW2VdO28uYXNzZXJ0KGEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHQuY2hhckNvZGVBdCgwKSl8fCIuIj09PXQsIk51bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCIpO3ZhciBuPSIiO2lmKCIuIiE9PXQpe2lmKG49dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSx0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLCIwIj09PW4pe2lmKCJ4Ij09PXR8fCJYIj09PXQpcmV0dXJuKyt0aGlzLmluZGV4LHRoaXMuc2NhbkhleExpdGVyYWwoZSk7aWYoImIiPT09dHx8IkIiPT09dClyZXR1cm4rK3RoaXMuaW5kZXgsdGhpcy5zY2FuQmluYXJ5TGl0ZXJhbChlKTtpZigibyI9PT10fHwiTyI9PT10KXJldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwodCxlKTtpZih0JiZhLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodC5jaGFyQ29kZUF0KDApKSYmdGhpcy5pc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkpcmV0dXJuIHRoaXMuc2Nhbk9jdGFsTGl0ZXJhbCh0LGUpfWZvcig7YS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSk7KW4rPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107dD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XX1pZigiLiI9PT10KXtmb3Iobis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTthLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKTspbis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTt0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdfWlmKCJlIj09PXR8fCJFIj09PXQpaWYobis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSx0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLCIrIiE9PXQmJiItIiE9PXR8fChuKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKSxhLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSlmb3IoO2EuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpOyluKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO2Vsc2UgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO3JldHVybiBhLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLHt0eXBlOjYsdmFsdWU6cGFyc2VGbG9hdChuKSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6ZSxlbmQ6dGhpcy5pbmRleH19LGUucHJvdG90eXBlLnNjYW5TdHJpbmdMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleCx0PXRoaXMuc291cmNlW2VdO28uYXNzZXJ0KCInIj09PXR8fCciJz09PXQsIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZSIpLCsrdGhpcy5pbmRleDtmb3IodmFyIG49ITEscj0iIjshdGhpcy5lb2YoKTspe3ZhciBpPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107aWYoaT09PXQpe3Q9IiI7YnJlYWt9aWYoIlxcIj09PWkpaWYoKGk9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSkmJmEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoaS5jaGFyQ29kZUF0KDApKSkrK3RoaXMubGluZU51bWJlciwiXHIiPT09aSYmIlxuIj09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdJiYrK3RoaXMuaW5kZXgsdGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleDtlbHNlIHN3aXRjaChpKXtjYXNlInUiOmlmKCJ7Ij09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKSsrdGhpcy5pbmRleCxyKz10aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7ZWxzZXt2YXIgdT10aGlzLnNjYW5IZXhFc2NhcGUoaSk7bnVsbD09PXUmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSxyKz11fWJyZWFrO2Nhc2UieCI6dmFyIGM9dGhpcy5zY2FuSGV4RXNjYXBlKGkpO251bGw9PT1jJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHMuTWVzc2FnZXMuSW52YWxpZEhleEVzY2FwZVNlcXVlbmNlKSxyKz1jO2JyZWFrO2Nhc2UibiI6cis9IlxuIjticmVhaztjYXNlInIiOnIrPSJcciI7YnJlYWs7Y2FzZSJ0IjpyKz0iXHQiO2JyZWFrO2Nhc2UiYiI6cis9IlxiIjticmVhaztjYXNlImYiOnIrPSJcZiI7YnJlYWs7Y2FzZSJ2IjpyKz0iXHYiO2JyZWFrO2Nhc2UiOCI6Y2FzZSI5IjpyKz1pLHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTticmVhaztkZWZhdWx0OmlmKGkmJmEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChpLmNoYXJDb2RlQXQoMCkpKXt2YXIgbD10aGlzLm9jdGFsVG9EZWNpbWFsKGkpO249bC5vY3RhbHx8bixyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGwuY29kZSl9ZWxzZSByKz1pfWVsc2V7aWYoYS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihpLmNoYXJDb2RlQXQoMCkpKWJyZWFrO3IrPWl9fXJldHVybiIiIT09dCYmKHRoaXMuaW5kZXg9ZSx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCkpLHt0eXBlOjgsdmFsdWU6cixvY3RhbDpuLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDplLGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUuc2NhblRlbXBsYXRlPWZ1bmN0aW9uKCl7dmFyIGU9IiIsdD0hMSxuPXRoaXMuaW5kZXgscj0iYCI9PT10aGlzLnNvdXJjZVtuXSxpPSExLG89Mjtmb3IoKyt0aGlzLmluZGV4OyF0aGlzLmVvZigpOyl7dmFyIHU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtpZigiYCI9PT11KXtvPTEsaT0hMCx0PSEwO2JyZWFrfWlmKCIkIj09PXUpe2lmKCJ7Ij09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKXt0aGlzLmN1cmx5U3RhY2sucHVzaCgiJHsiKSwrK3RoaXMuaW5kZXgsdD0hMDticmVha31lKz11fWVsc2UgaWYoIlxcIj09PXUpaWYodT10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdLGEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IodS5jaGFyQ29kZUF0KDApKSkrK3RoaXMubGluZU51bWJlciwiXHIiPT09dSYmIlxuIj09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdJiYrK3RoaXMuaW5kZXgsdGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleDtlbHNlIHN3aXRjaCh1KXtjYXNlIm4iOmUrPSJcbiI7YnJlYWs7Y2FzZSJyIjplKz0iXHIiO2JyZWFrO2Nhc2UidCI6ZSs9Ilx0IjticmVhaztjYXNlInUiOmlmKCJ7Ij09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKSsrdGhpcy5pbmRleCxlKz10aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7ZWxzZXt2YXIgYz10aGlzLmluZGV4LGw9dGhpcy5zY2FuSGV4RXNjYXBlKHUpO251bGwhPT1sP2UrPWw6KHRoaXMuaW5kZXg9YyxlKz11KX1icmVhaztjYXNlIngiOnZhciBwPXRoaXMuc2NhbkhleEVzY2FwZSh1KTtudWxsPT09cCYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihzLk1lc3NhZ2VzLkludmFsaWRIZXhFc2NhcGVTZXF1ZW5jZSksZSs9cDticmVhaztjYXNlImIiOmUrPSJcYiI7YnJlYWs7Y2FzZSJmIjplKz0iXGYiO2JyZWFrO2Nhc2UidiI6ZSs9Ilx2IjticmVhaztkZWZhdWx0OiIwIj09PXU/KGEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHMuTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpLGUrPSJcMCIpOmEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh1LmNoYXJDb2RlQXQoMCkpP3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4ocy5NZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk6ZSs9dX1lbHNlIGEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IodS5jaGFyQ29kZUF0KDApKT8oKyt0aGlzLmxpbmVOdW1iZXIsIlxyIj09PXUmJiJcbiI9PT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XSYmKyt0aGlzLmluZGV4LHRoaXMubGluZVN0YXJ0PXRoaXMuaW5kZXgsZSs9IlxuIik6ZSs9dX1yZXR1cm4gdHx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLHJ8fHRoaXMuY3VybHlTdGFjay5wb3AoKSx7dHlwZToxMCx2YWx1ZTp0aGlzLnNvdXJjZS5zbGljZShuKzEsdGhpcy5pbmRleC1vKSxjb29rZWQ6ZSxoZWFkOnIsdGFpbDppLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDpuLGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUudGVzdFJlZ0V4cD1mdW5jdGlvbihlLHQpe3ZhciBuPWUscj10aGlzO3QuaW5kZXhPZigidSIpPj0wJiYobj1uLnJlcGxhY2UoL1xcdVx7KFswLTlhLWZBLUZdKylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2csZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXBhcnNlSW50KHR8fG4sMTYpO3JldHVybiBpPjExMTQxMTEmJnIudGhyb3dVbmV4cGVjdGVkVG9rZW4ocy5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKSxpPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGkpOiJcdWZmZmYifSkucmVwbGFjZSgvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csIlx1ZmZmZiIpKTt0cnl7UmVnRXhwKG4pfWNhdGNoKGUpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4ocy5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKX10cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX1jYXRjaChlKXtyZXR1cm4gbnVsbH19LGUucHJvdG90eXBlLnNjYW5SZWdFeHBCb2R5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleF07by5hc3NlcnQoIi8iPT09ZSwiUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2giKTtmb3IodmFyIHQ9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSxuPSExLHI9ITE7IXRoaXMuZW9mKCk7KWlmKGU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSx0Kz1lLCJcXCI9PT1lKWU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSxhLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGUuY2hhckNvZGVBdCgwKSkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4ocy5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApLHQrPWU7ZWxzZSBpZihhLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGUuY2hhckNvZGVBdCgwKSkpdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihzLk1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7ZWxzZSBpZihuKSJdIj09PWUmJihuPSExKTtlbHNle2lmKCIvIj09PWUpe3I9ITA7YnJlYWt9IlsiPT09ZSYmKG49ITApfXJldHVybiByfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHMuTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKSx0LnN1YnN0cigxLHQubGVuZ3RoLTIpfSxlLnByb3RvdHlwZS5zY2FuUmVnRXhwRmxhZ3M9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD0iIjshdGhpcy5lb2YoKTspe3ZhciBuPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdO2lmKCFhLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KG4uY2hhckNvZGVBdCgwKSkpYnJlYWs7aWYoKyt0aGlzLmluZGV4LCJcXCIhPT1ufHx0aGlzLmVvZigpKXQrPW4sZSs9bjtlbHNlIGlmKCJ1Ij09PShuPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKSl7Kyt0aGlzLmluZGV4O3ZhciByPXRoaXMuaW5kZXgsaT10aGlzLnNjYW5IZXhFc2NhcGUoInUiKTtpZihudWxsIT09aSlmb3IodCs9aSxlKz0iXFx1IjtyPHRoaXMuaW5kZXg7KytyKWUrPXRoaXMuc291cmNlW3JdO2Vsc2UgdGhpcy5pbmRleD1yLHQrPSJ1IixlKz0iXFx1Ijt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCl9ZWxzZSBlKz0iXFwiLHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuc2NhblJlZ0V4cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW5kZXgsdD10aGlzLnNjYW5SZWdFeHBCb2R5KCksbj10aGlzLnNjYW5SZWdFeHBGbGFncygpO3JldHVybnt0eXBlOjksdmFsdWU6IiIscGF0dGVybjp0LGZsYWdzOm4scmVnZXg6dGhpcy50ZXN0UmVnRXhwKHQsbiksbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuaW5kZXh9fSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oKXtpZih0aGlzLmVvZigpKXJldHVybnt0eXBlOjIsdmFsdWU6IiIsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OnRoaXMuaW5kZXgsZW5kOnRoaXMuaW5kZXh9O3ZhciBlPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7cmV0dXJuIGEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGUpP3RoaXMuc2NhbklkZW50aWZpZXIoKTo0MD09PWV8fDQxPT09ZXx8NTk9PT1lP3RoaXMuc2NhblB1bmN0dWF0b3IoKTozOT09PWV8fDM0PT09ZT90aGlzLnNjYW5TdHJpbmdMaXRlcmFsKCk6NDY9PT1lP2EuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSk/dGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTp0aGlzLnNjYW5QdW5jdHVhdG9yKCk6YS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoZSk/dGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTo5Nj09PWV8fDEyNT09PWUmJiIkeyI9PT10aGlzLmN1cmx5U3RhY2tbdGhpcy5jdXJseVN0YWNrLmxlbmd0aC0xXT90aGlzLnNjYW5UZW1wbGF0ZSgpOmU+PTU1Mjk2JiZlPDU3MzQzJiZhLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpKT90aGlzLnNjYW5JZGVudGlmaWVyKCk6dGhpcy5zY2FuUHVuY3R1YXRvcigpfSxlfSgpO3QuU2Nhbm5lcj11fSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ub2tlbk5hbWU9e30sdC5Ub2tlbk5hbWVbMV09IkJvb2xlYW4iLHQuVG9rZW5OYW1lWzJdPSI8ZW5kPiIsdC5Ub2tlbk5hbWVbM109IklkZW50aWZpZXIiLHQuVG9rZW5OYW1lWzRdPSJLZXl3b3JkIix0LlRva2VuTmFtZVs1XT0iTnVsbCIsdC5Ub2tlbk5hbWVbNl09Ik51bWVyaWMiLHQuVG9rZW5OYW1lWzddPSJQdW5jdHVhdG9yIix0LlRva2VuTmFtZVs4XT0iU3RyaW5nIix0LlRva2VuTmFtZVs5XT0iUmVndWxhckV4cHJlc3Npb24iLHQuVG9rZW5OYW1lWzEwXT0iVGVtcGxhdGUifSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YSFRNTEVudGl0aWVzPXtxdW90OiciJyxhbXA6IiYiLGFwb3M6IiciLGd0OiI+IixuYnNwOiJceGEwIixpZXhjbDoiXHhhMSIsY2VudDoiXHhhMiIscG91bmQ6Ilx4YTMiLGN1cnJlbjoiXHhhNCIseWVuOiJceGE1IixicnZiYXI6Ilx4YTYiLHNlY3Q6Ilx4YTciLHVtbDoiXHhhOCIsY29weToiXHhhOSIsb3JkZjoiXHhhYSIsbGFxdW86Ilx4YWIiLG5vdDoiXHhhYyIsc2h5OiJceGFkIixyZWc6Ilx4YWUiLG1hY3I6Ilx4YWYiLGRlZzoiXHhiMCIscGx1c21uOiJceGIxIixzdXAyOiJceGIyIixzdXAzOiJceGIzIixhY3V0ZToiXHhiNCIsbWljcm86Ilx4YjUiLHBhcmE6Ilx4YjYiLG1pZGRvdDoiXHhiNyIsY2VkaWw6Ilx4YjgiLHN1cDE6Ilx4YjkiLG9yZG06Ilx4YmEiLHJhcXVvOiJceGJiIixmcmFjMTQ6Ilx4YmMiLGZyYWMxMjoiXHhiZCIsZnJhYzM0OiJceGJlIixpcXVlc3Q6Ilx4YmYiLEFncmF2ZToiXHhjMCIsQWFjdXRlOiJceGMxIixBY2lyYzoiXHhjMiIsQXRpbGRlOiJceGMzIixBdW1sOiJceGM0IixBcmluZzoiXHhjNSIsQUVsaWc6Ilx4YzYiLENjZWRpbDoiXHhjNyIsRWdyYXZlOiJceGM4IixFYWN1dGU6Ilx4YzkiLEVjaXJjOiJceGNhIixFdW1sOiJceGNiIixJZ3JhdmU6Ilx4Y2MiLElhY3V0ZToiXHhjZCIsSWNpcmM6Ilx4Y2UiLEl1bWw6Ilx4Y2YiLEVUSDoiXHhkMCIsTnRpbGRlOiJceGQxIixPZ3JhdmU6Ilx4ZDIiLE9hY3V0ZToiXHhkMyIsT2NpcmM6Ilx4ZDQiLE90aWxkZToiXHhkNSIsT3VtbDoiXHhkNiIsdGltZXM6Ilx4ZDciLE9zbGFzaDoiXHhkOCIsVWdyYXZlOiJceGQ5IixVYWN1dGU6Ilx4ZGEiLFVjaXJjOiJceGRiIixVdW1sOiJceGRjIixZYWN1dGU6Ilx4ZGQiLFRIT1JOOiJceGRlIixzemxpZzoiXHhkZiIsYWdyYXZlOiJceGUwIixhYWN1dGU6Ilx4ZTEiLGFjaXJjOiJceGUyIixhdGlsZGU6Ilx4ZTMiLGF1bWw6Ilx4ZTQiLGFyaW5nOiJceGU1IixhZWxpZzoiXHhlNiIsY2NlZGlsOiJceGU3IixlZ3JhdmU6Ilx4ZTgiLGVhY3V0ZToiXHhlOSIsZWNpcmM6Ilx4ZWEiLGV1bWw6Ilx4ZWIiLGlncmF2ZToiXHhlYyIsaWFjdXRlOiJceGVkIixpY2lyYzoiXHhlZSIsaXVtbDoiXHhlZiIsZXRoOiJceGYwIixudGlsZGU6Ilx4ZjEiLG9ncmF2ZToiXHhmMiIsb2FjdXRlOiJceGYzIixvY2lyYzoiXHhmNCIsb3RpbGRlOiJceGY1IixvdW1sOiJceGY2IixkaXZpZGU6Ilx4ZjciLG9zbGFzaDoiXHhmOCIsdWdyYXZlOiJceGY5Iix1YWN1dGU6Ilx4ZmEiLHVjaXJjOiJceGZiIix1dW1sOiJceGZjIix5YWN1dGU6Ilx4ZmQiLHRob3JuOiJceGZlIix5dW1sOiJceGZmIixPRWxpZzoiXHUwMTUyIixvZWxpZzoiXHUwMTUzIixTY2Fyb246Ilx1MDE2MCIsc2Nhcm9uOiJcdTAxNjEiLFl1bWw6Ilx1MDE3OCIsZm5vZjoiXHUwMTkyIixjaXJjOiJcdTAyYzYiLHRpbGRlOiJcdTAyZGMiLEFscGhhOiJcdTAzOTEiLEJldGE6Ilx1MDM5MiIsR2FtbWE6Ilx1MDM5MyIsRGVsdGE6Ilx1MDM5NCIsRXBzaWxvbjoiXHUwMzk1IixaZXRhOiJcdTAzOTYiLEV0YToiXHUwMzk3IixUaGV0YToiXHUwMzk4IixJb3RhOiJcdTAzOTkiLEthcHBhOiJcdTAzOWEiLExhbWJkYToiXHUwMzliIixNdToiXHUwMzljIixOdToiXHUwMzlkIixYaToiXHUwMzllIixPbWljcm9uOiJcdTAzOWYiLFBpOiJcdTAzYTAiLFJobzoiXHUwM2ExIixTaWdtYToiXHUwM2EzIixUYXU6Ilx1MDNhNCIsVXBzaWxvbjoiXHUwM2E1IixQaGk6Ilx1MDNhNiIsQ2hpOiJcdTAzYTciLFBzaToiXHUwM2E4IixPbWVnYToiXHUwM2E5IixhbHBoYToiXHUwM2IxIixiZXRhOiJcdTAzYjIiLGdhbW1hOiJcdTAzYjMiLGRlbHRhOiJcdTAzYjQiLGVwc2lsb246Ilx1MDNiNSIsemV0YToiXHUwM2I2IixldGE6Ilx1MDNiNyIsdGhldGE6Ilx1MDNiOCIsaW90YToiXHUwM2I5IixrYXBwYToiXHUwM2JhIixsYW1iZGE6Ilx1MDNiYiIsbXU6Ilx1MDNiYyIsbnU6Ilx1MDNiZCIseGk6Ilx1MDNiZSIsb21pY3JvbjoiXHUwM2JmIixwaToiXHUwM2MwIixyaG86Ilx1MDNjMSIsc2lnbWFmOiJcdTAzYzIiLHNpZ21hOiJcdTAzYzMiLHRhdToiXHUwM2M0Iix1cHNpbG9uOiJcdTAzYzUiLHBoaToiXHUwM2M2IixjaGk6Ilx1MDNjNyIscHNpOiJcdTAzYzgiLG9tZWdhOiJcdTAzYzkiLHRoZXRhc3ltOiJcdTAzZDEiLHVwc2loOiJcdTAzZDIiLHBpdjoiXHUwM2Q2IixlbnNwOiJcdTIwMDIiLGVtc3A6Ilx1MjAwMyIsdGhpbnNwOiJcdTIwMDkiLHp3bmo6Ilx1MjAwYyIsendqOiJcdTIwMGQiLGxybToiXHUyMDBlIixybG06Ilx1MjAwZiIsbmRhc2g6Ilx1MjAxMyIsbWRhc2g6Ilx1MjAxNCIsbHNxdW86Ilx1MjAxOCIscnNxdW86Ilx1MjAxOSIsc2JxdW86Ilx1MjAxYSIsbGRxdW86Ilx1MjAxYyIscmRxdW86Ilx1MjAxZCIsYmRxdW86Ilx1MjAxZSIsZGFnZ2VyOiJcdTIwMjAiLERhZ2dlcjoiXHUyMDIxIixidWxsOiJcdTIwMjIiLGhlbGxpcDoiXHUyMDI2IixwZXJtaWw6Ilx1MjAzMCIscHJpbWU6Ilx1MjAzMiIsUHJpbWU6Ilx1MjAzMyIsbHNhcXVvOiJcdTIwMzkiLHJzYXF1bzoiXHUyMDNhIixvbGluZToiXHUyMDNlIixmcmFzbDoiXHUyMDQ0IixldXJvOiJcdTIwYWMiLGltYWdlOiJcdTIxMTEiLHdlaWVycDoiXHUyMTE4IixyZWFsOiJcdTIxMWMiLHRyYWRlOiJcdTIxMjIiLGFsZWZzeW06Ilx1MjEzNSIsbGFycjoiXHUyMTkwIix1YXJyOiJcdTIxOTEiLHJhcnI6Ilx1MjE5MiIsZGFycjoiXHUyMTkzIixoYXJyOiJcdTIxOTQiLGNyYXJyOiJcdTIxYjUiLGxBcnI6Ilx1MjFkMCIsdUFycjoiXHUyMWQxIixyQXJyOiJcdTIxZDIiLGRBcnI6Ilx1MjFkMyIsaEFycjoiXHUyMWQ0Iixmb3JhbGw6Ilx1MjIwMCIscGFydDoiXHUyMjAyIixleGlzdDoiXHUyMjAzIixlbXB0eToiXHUyMjA1IixuYWJsYToiXHUyMjA3Iixpc2luOiJcdTIyMDgiLG5vdGluOiJcdTIyMDkiLG5pOiJcdTIyMGIiLHByb2Q6Ilx1MjIwZiIsc3VtOiJcdTIyMTEiLG1pbnVzOiJcdTIyMTIiLGxvd2FzdDoiXHUyMjE3IixyYWRpYzoiXHUyMjFhIixwcm9wOiJcdTIyMWQiLGluZmluOiJcdTIyMWUiLGFuZzoiXHUyMjIwIixhbmQ6Ilx1MjIyNyIsb3I6Ilx1MjIyOCIsY2FwOiJcdTIyMjkiLGN1cDoiXHUyMjJhIixpbnQ6Ilx1MjIyYiIsdGhlcmU0OiJcdTIyMzQiLHNpbToiXHUyMjNjIixjb25nOiJcdTIyNDUiLGFzeW1wOiJcdTIyNDgiLG5lOiJcdTIyNjAiLGVxdWl2OiJcdTIyNjEiLGxlOiJcdTIyNjQiLGdlOiJcdTIyNjUiLHN1YjoiXHUyMjgyIixzdXA6Ilx1MjI4MyIsbnN1YjoiXHUyMjg0IixzdWJlOiJcdTIyODYiLHN1cGU6Ilx1MjI4NyIsb3BsdXM6Ilx1MjI5NSIsb3RpbWVzOiJcdTIyOTciLHBlcnA6Ilx1MjJhNSIsc2RvdDoiXHUyMmM1IixsY2VpbDoiXHUyMzA4IixyY2VpbDoiXHUyMzA5IixsZmxvb3I6Ilx1MjMwYSIscmZsb29yOiJcdTIzMGIiLGxvejoiXHUyNWNhIixzcGFkZXM6Ilx1MjY2MCIsY2x1YnM6Ilx1MjY2MyIsaGVhcnRzOiJcdTI2NjUiLGRpYW1zOiJcdTI2NjYiLGxhbmc6Ilx1MjdlOCIscmFuZzoiXHUyN2U5In19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxMiksbz1uKDEzKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudmFsdWVzPVtdLHRoaXMuY3VybHk9dGhpcy5wYXJlbj0tMX1yZXR1cm4gZS5wcm90b3R5cGUuYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVyblsiKCIsInsiLCJbIiwiaW4iLCJ0eXBlb2YiLCJpbnN0YW5jZW9mIiwibmV3IiwicmV0dXJuIiwiY2FzZSIsImRlbGV0ZSIsInRocm93Iiwidm9pZCIsIj0iLCIrPSIsIi09IiwiKj0iLCIqKj0iLCIvPSIsIiU9IiwiPDw9IiwiPj49IiwiPj4+PSIsIiY9IiwifD0iLCJePSIsIiwiLCIrIiwiLSIsIioiLCIqKiIsIi8iLCIlIiwiKysiLCItLSIsIjw8IiwiPj4iLCI+Pj4iLCImIiwifCIsIl4iLCIhIiwifiIsIiYmIiwifHwiLCI/IiwiOiIsIj09PSIsIj09IiwiPj0iLCI8PSIsIjwiLCI+IiwiIT0iLCIhPT0iXS5pbmRleE9mKGUpPj0wfSxlLnByb3RvdHlwZS5pc1JlZ2V4U3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlc1t0aGlzLnZhbHVlcy5sZW5ndGgtMV0sdD1udWxsIT09ZTtzd2l0Y2goZSl7Y2FzZSJ0aGlzIjpjYXNlIl0iOnQ9ITE7YnJlYWs7Y2FzZSIpIjp2YXIgbj10aGlzLnZhbHVlc1t0aGlzLnBhcmVuLTFdO3Q9ImlmIj09PW58fCJ3aGlsZSI9PT1ufHwiZm9yIj09PW58fCJ3aXRoIj09PW47YnJlYWs7Y2FzZSJ9IjppZih0PSExLCJmdW5jdGlvbiI9PT10aGlzLnZhbHVlc1t0aGlzLmN1cmx5LTNdKXt2YXIgcj10aGlzLnZhbHVlc1t0aGlzLmN1cmx5LTRdO3Q9ISFyJiYhdGhpcy5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24ocil9ZWxzZSBpZigiZnVuY3Rpb24iPT09dGhpcy52YWx1ZXNbdGhpcy5jdXJseS00XSl7dmFyIHI9dGhpcy52YWx1ZXNbdGhpcy5jdXJseS01XTt0PSFyfHwhdGhpcy5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24ocil9fXJldHVybiB0fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpezc9PT1lLnR5cGV8fDQ9PT1lLnR5cGU/KCJ7Ij09PWUudmFsdWU/dGhpcy5jdXJseT10aGlzLnZhbHVlcy5sZW5ndGg6IigiPT09ZS52YWx1ZSYmKHRoaXMucGFyZW49dGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnZhbHVlcy5wdXNoKGUudmFsdWUpKTp0aGlzLnZhbHVlcy5wdXNoKG51bGwpfSxlfSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5lcnJvckhhbmRsZXI9bmV3IHIuRXJyb3JIYW5kbGVyLHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50PSEhdCYmKCJib29sZWFuIj09PXR5cGVvZiB0LnRvbGVyYW50JiZ0LnRvbGVyYW50KSx0aGlzLnNjYW5uZXI9bmV3IGkuU2Nhbm5lcihlLHRoaXMuZXJyb3JIYW5kbGVyKSx0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50PSEhdCYmKCJib29sZWFuIj09PXR5cGVvZiB0LmNvbW1lbnQmJnQuY29tbWVudCksdGhpcy50cmFja1JhbmdlPSEhdCYmKCJib29sZWFuIj09PXR5cGVvZiB0LnJhbmdlJiZ0LnJhbmdlKSx0aGlzLnRyYWNrTG9jPSEhdCYmKCJib29sZWFuIj09PXR5cGVvZiB0LmxvYyYmdC5sb2MpLHRoaXMuYnVmZmVyPVtdLHRoaXMucmVhZGVyPW5ldyBhfXJldHVybiBlLnByb3RvdHlwZS5lcnJvcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuZXJyb3JzfSxlLnByb3RvdHlwZS5nZXROZXh0VG9rZW49ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5idWZmZXIubGVuZ3RoKXt2YXIgZT10aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7aWYodGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudClmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZVt0XSxyPXRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uobi5zbGljZVswXSxuLnNsaWNlWzFdKSxpPXt0eXBlOm4ubXVsdGlMaW5lPyJCbG9ja0NvbW1lbnQiOiJMaW5lQ29tbWVudCIsdmFsdWU6cn07dGhpcy50cmFja1JhbmdlJiYoaS5yYW5nZT1uLnJhbmdlKSx0aGlzLnRyYWNrTG9jJiYoaS5sb2M9bi5sb2MpLHRoaXMuYnVmZmVyLnB1c2goaSl9aWYoIXRoaXMuc2Nhbm5lci5lb2YoKSl7dmFyIGE9dm9pZCAwO3RoaXMudHJhY2tMb2MmJihhPXtzdGFydDp7bGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9LGVuZDp7fX0pO3ZhciBzPSIvIj09PXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSYmdGhpcy5yZWFkZXIuaXNSZWdleFN0YXJ0KCksdT1zP3RoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk6dGhpcy5zY2FubmVyLmxleCgpO3RoaXMucmVhZGVyLnB1c2godSk7dmFyIGM9e3R5cGU6by5Ub2tlbk5hbWVbdS50eXBlXSx2YWx1ZTp0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHUuc3RhcnQsdS5lbmQpfTtpZih0aGlzLnRyYWNrUmFuZ2UmJihjLnJhbmdlPVt1LnN0YXJ0LHUuZW5kXSksdGhpcy50cmFja0xvYyYmKGEuZW5kPXtsaW5lOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydH0sYy5sb2M9YSksOT09PXUudHlwZSl7dmFyIGw9dS5wYXR0ZXJuLHA9dS5mbGFncztjLnJlZ2V4PXtwYXR0ZXJuOmwsZmxhZ3M6cH19dGhpcy5idWZmZXIucHVzaChjKX19cmV0dXJuIHRoaXMuYnVmZmVyLnNoaWZ0KCl9LGV9KCk7dC5Ub2tlbml6ZXI9c31dKX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbixyLGksbyxhLHMsdTtpZihudWxsPT09dClyZXR1cm57fTtmb3Iobj17fSxyPU9iamVjdC5rZXlzKHQpLGk9MCxvPXIubGVuZ3RoO2k8bztpKz0xKWE9cltpXSxzPVN0cmluZyh0W2FdKSwiISEiPT09YS5zbGljZSgwLDIpJiYoYT0idGFnOnlhbWwub3JnLDIwMDI6IithLnNsaWNlKDIpKSx1PWUuY29tcGlsZWRUeXBlTWFwLmZhbGxiYWNrW2FdLHUmJlAuY2FsbCh1LnN0eWxlQWxpYXNlcyxzKSYmKHM9dS5zdHlsZUFsaWFzZXNbc10pLG5bYV09cztyZXR1cm4gbn1mdW5jdGlvbiBpKGUpe3ZhciB0LG4scjtpZih0PWUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksZTw9MjU1KW49IngiLHI9MjtlbHNlIGlmKGU8PTY1NTM1KW49InUiLHI9NDtlbHNle2lmKCEoZTw9NDI5NDk2NzI5NSkpdGhyb3cgbmV3IEYoImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTtuPSJVIixyPTh9cmV0dXJuIlxcIituK08ucmVwZWF0KCIwIixyLXQubGVuZ3RoKSt0fWZ1bmN0aW9uIG8oZSl7dGhpcy5zY2hlbWE9ZS5zY2hlbWF8fE4sdGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSxlLmluZGVudHx8MiksdGhpcy5za2lwSW52YWxpZD1lLnNraXBJbnZhbGlkfHwhMSx0aGlzLmZsb3dMZXZlbD1PLmlzTm90aGluZyhlLmZsb3dMZXZlbCk/LTE6ZS5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1yKHRoaXMuc2NoZW1hLGUuc3R5bGVzfHxudWxsKSx0aGlzLnNvcnRLZXlzPWUuc29ydEtleXN8fCExLHRoaXMubGluZVdpZHRoPWUubGluZVdpZHRofHw4MCx0aGlzLm5vUmVmcz1lLm5vUmVmc3x8ITEsdGhpcy5ub0NvbXBhdE1vZGU9ZS5ub0NvbXBhdE1vZGV8fCExLHRoaXMuY29uZGVuc2VGbG93PWUuY29uZGVuc2VGbG93fHwhMSx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gYShlLHQpe2Zvcih2YXIgbixyPU8ucmVwZWF0KCIgIix0KSxpPTAsbz0tMSxhPSIiLHM9ZS5sZW5ndGg7aTxzOylvPWUuaW5kZXhPZigiXG4iLGkpLC0xPT09bz8obj1lLnNsaWNlKGkpLGk9cyk6KG49ZS5zbGljZShpLG8rMSksaT1vKzEpLG4ubGVuZ3RoJiYiXG4iIT09biYmKGErPXIpLGErPW47cmV0dXJuIGF9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiJcbiIrTy5yZXBlYXQoIiAiLGUuaW5kZW50KnQpfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbixyLGk7Zm9yKG49MCxyPWUuaW1wbGljaXRUeXBlcy5sZW5ndGg7bjxyO24rPTEpaWYoaT1lLmltcGxpY2l0VHlwZXNbbl0saS5yZXNvbHZlKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGU9PT1SfHxlPT09TX1mdW5jdGlvbiBsKGUpe3JldHVybiAzMjw9ZSYmZTw9MTI2fHwxNjE8PWUmJmU8PTU1Mjk1JiY4MjMyIT09ZSYmODIzMyE9PWV8fDU3MzQ0PD1lJiZlPD02NTUzMyYmNjUyNzkhPT1lfHw2NTUzNjw9ZSYmZTw9MTExNDExMX1mdW5jdGlvbiBwKGUpe3JldHVybiBsKGUpJiY2NTI3OSE9PWUmJmUhPT1IJiZlIT09WCYmZSE9PVomJmUhPT10ZSYmZSE9PXJlJiZlIT09USYmZSE9PVV9ZnVuY3Rpb24gZihlKXtyZXR1cm4gbChlKSYmNjUyNzkhPT1lJiYhYyhlKSYmZSE9PVcmJmUhPT1KJiZlIT09USYmZSE9PUgmJmUhPT1YJiZlIT09WiYmZSE9PXRlJiZlIT09cmUmJmUhPT1VJiZlIT09RyYmZSE9PXEmJmUhPT1CJiZlIT09bmUmJmUhPT1LJiZlIT09ViYmZSE9PSQmJmUhPT16JiZlIT09WSYmZSE9PWVlfWZ1bmN0aW9uIGQoZSx0LG4scixpKXt2YXIgbyxhLHM9ITEsdT0hMSxkPS0xIT09cixoPS0xLG09ZihlLmNoYXJDb2RlQXQoMCkpJiYhYyhlLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkpO2lmKHQpZm9yKG89MDtvPGUubGVuZ3RoO28rKyl7aWYoYT1lLmNoYXJDb2RlQXQobyksIWwoYSkpcmV0dXJuIGxlO209bSYmcChhKX1lbHNle2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspe2lmKChhPWUuY2hhckNvZGVBdChvKSk9PT1qKXM9ITAsZCYmKHU9dXx8by1oLTE+ciYmIiAiIT09ZVtoKzFdLGg9byk7ZWxzZSBpZighbChhKSlyZXR1cm4gbGU7bT1tJiZwKGEpfXU9dXx8ZCYmby1oLTE+ciYmIiAiIT09ZVtoKzFdfXJldHVybiBzfHx1PyIgIj09PWVbMF0mJm4+OT9sZTp1P2NlOnVlOm0mJiFpKGUpP2FlOnNlfWZ1bmN0aW9uIGgoZSx0LG4scil7ZS5kdW1wPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdShlLHQpfWlmKDA9PT10Lmxlbmd0aClyZXR1cm4iJyciO2lmKCFlLm5vQ29tcGF0TW9kZSYmLTEhPT1vZS5pbmRleE9mKHQpKXJldHVybiInIit0KyInIjt2YXIgbz1lLmluZGVudCpNYXRoLm1heCgxLG4pLHM9LTE9PT1lLmxpbmVXaWR0aD8tMTpNYXRoLm1heChNYXRoLm1pbihlLmxpbmVXaWR0aCw0MCksZS5saW5lV2lkdGgtbyksYz1yfHxlLmZsb3dMZXZlbD4tMSYmbj49ZS5mbG93TGV2ZWw7c3dpdGNoKGQodCxjLGUuaW5kZW50LHMsaSkpe2Nhc2UgYWU6cmV0dXJuIHQ7Y2FzZSBzZTpyZXR1cm4iJyIrdC5yZXBsYWNlKC8nL2csIicnIikrIiciO2Nhc2UgdWU6cmV0dXJuInwiK20odCxlLmluZGVudCkrZyhhKHQsbykpO2Nhc2UgY2U6cmV0dXJuIj4iK20odCxlLmluZGVudCkrZyhhKHkodCxzKSxvKSk7Y2FzZSBsZTpyZXR1cm4nIicrYih0KSsnIic7ZGVmYXVsdDp0aHJvdyBuZXcgRigiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGUiKX19KCl9ZnVuY3Rpb24gbShlLHQpe3ZhciBuPSIgIj09PWVbMF0/U3RyaW5nKHQpOiIiLHI9IlxuIj09PWVbZS5sZW5ndGgtMV07cmV0dXJuIG4rKCFyfHwiXG4iIT09ZVtlLmxlbmd0aC0yXSYmIlxuIiE9PWU/cj8iIjoiLSI6IisiKSsiXG4ifWZ1bmN0aW9uIGcoZSl7cmV0dXJuIlxuIj09PWVbZS5sZW5ndGgtMV0/ZS5zbGljZSgwLC0xKTplfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG4scixpPS8oXG4rKShbXlxuXSopL2csbz1mdW5jdGlvbigpe3ZhciBuPWUuaW5kZXhPZigiXG4iKTtyZXR1cm4gbj0tMSE9PW4/bjplLmxlbmd0aCxpLmxhc3RJbmRleD1uLHYoZS5zbGljZSgwLG4pLHQpfSgpLGE9IlxuIj09PWVbMF18fCIgIj09PWVbMF07cj1pLmV4ZWMoZSk7KXt2YXIgcz1yWzFdLHU9clsyXTtuPSIgIj09PXVbMF0sbys9cysoYXx8bnx8IiI9PT11PyIiOiJcbiIpK3YodSx0KSxhPW59cmV0dXJuIG99ZnVuY3Rpb24gdihlLHQpe2lmKCIiPT09ZXx8IiAiPT09ZVswXSlyZXR1cm4gZTtmb3IodmFyIG4scixpPS8gW14gXS9nLG89MCxhPTAscz0wLHU9IiI7bj1pLmV4ZWMoZSk7KXM9bi5pbmRleCxzLW8+dCYmKHI9YT5vP2E6cyx1Kz0iXG4iK2Uuc2xpY2UobyxyKSxvPXIrMSksYT1zO3JldHVybiB1Kz0iXG4iLGUubGVuZ3RoLW8+dCYmYT5vP3UrPWUuc2xpY2UobyxhKSsiXG4iK2Uuc2xpY2UoYSsxKTp1Kz1lLnNsaWNlKG8pLHUuc2xpY2UoMSl9ZnVuY3Rpb24gYihlKXtmb3IodmFyIHQsbixyLG89IiIsYT0wO2E8ZS5sZW5ndGg7YSsrKXQ9ZS5jaGFyQ29kZUF0KGEpLHQ+PTU1Mjk2JiZ0PD01NjMxOSYmKG49ZS5jaGFyQ29kZUF0KGErMSkpPj01NjMyMCYmbjw9NTczNDM/KG8rPWkoMTAyNCoodC01NTI5Nikrbi01NjMyMCs2NTUzNiksYSsrKToocj1pZVt0XSxvKz0hciYmbCh0KT9lW2FdOnJ8fGkodCkpO3JldHVybiBvfWZ1bmN0aW9uIHgoZSx0LG4pe3ZhciByLGksbz0iIixhPWUudGFnO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cis9MSlTKGUsdCxuW3JdLCExLCExKSYmKDAhPT1yJiYobys9IiwiKyhlLmNvbmRlbnNlRmxvdz8iIjoiICIpKSxvKz1lLmR1bXApO2UudGFnPWEsZS5kdW1wPSJbIitvKyJdIn1mdW5jdGlvbiBDKGUsdCxuLHIpe3ZhciBpLG8sYT0iIix1PWUudGFnO2ZvcihpPTAsbz1uLmxlbmd0aDtpPG87aSs9MSlTKGUsdCsxLG5baV0sITAsITApJiYociYmMD09PWl8fChhKz1zKGUsdCkpLGUuZHVtcCYmaj09PWUuZHVtcC5jaGFyQ29kZUF0KDApP2ErPSItIjphKz0iLSAiLGErPWUuZHVtcCk7ZS50YWc9dSxlLmR1bXA9YXx8IltdIn1mdW5jdGlvbiBFKGUsdCxuKXt2YXIgcixpLG8sYSxzLHU9IiIsYz1lLnRhZyxsPU9iamVjdC5rZXlzKG4pO2ZvcihyPTAsaT1sLmxlbmd0aDtyPGk7cis9MSlzPWUuY29uZGVuc2VGbG93PyciJzoiIiwwIT09ciYmKHMrPSIsICIpLG89bFtyXSxhPW5bb10sUyhlLHQsbywhMSwhMSkmJihlLmR1bXAubGVuZ3RoPjEwMjQmJihzKz0iPyAiKSxzKz1lLmR1bXArKGUuY29uZGVuc2VGbG93PyciJzoiIikrIjoiKyhlLmNvbmRlbnNlRmxvdz8iIjoiICIpLFMoZSx0LGEsITEsITEpJiYocys9ZS5kdW1wLHUrPXMpKTtlLnRhZz1jLGUuZHVtcD0ieyIrdSsifSJ9ZnVuY3Rpb24gRChlLHQsbixyKXt2YXIgaSxvLGEsdSxjLGwscD0iIixmPWUudGFnLGQ9T2JqZWN0LmtleXMobik7aWYoITA9PT1lLnNvcnRLZXlzKWQuc29ydCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09PXR5cGVvZiBlLnNvcnRLZXlzKWQuc29ydChlLnNvcnRLZXlzKTtlbHNlIGlmKGUuc29ydEtleXMpdGhyb3cgbmV3IEYoInNvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24iKTtmb3IoaT0wLG89ZC5sZW5ndGg7aTxvO2krPTEpbD0iIixyJiYwPT09aXx8KGwrPXMoZSx0KSksYT1kW2ldLHU9blthXSxTKGUsdCsxLGEsITAsITAsITApJiYoYz1udWxsIT09ZS50YWcmJiI/IiE9PWUudGFnfHxlLmR1bXAmJmUuZHVtcC5sZW5ndGg+MTAyNCxjJiYoZS5kdW1wJiZqPT09ZS5kdW1wLmNoYXJDb2RlQXQoMCk/bCs9Ij8iOmwrPSI/ICIpLGwrPWUuZHVtcCxjJiYobCs9cyhlLHQpKSxTKGUsdCsxLHUsITAsYykmJihlLmR1bXAmJmo9PT1lLmR1bXAuY2hhckNvZGVBdCgwKT9sKz0iOiI6bCs9IjogIixsKz1lLmR1bXAscCs9bCkpO2UudGFnPWYsZS5kdW1wPXB8fCJ7fSJ9ZnVuY3Rpb24gdyhlLHQsbil7dmFyIHIsaSxvLGEscyx1O2ZvcihpPW4/ZS5leHBsaWNpdFR5cGVzOmUuaW1wbGljaXRUeXBlcyxvPTAsYT1pLmxlbmd0aDtvPGE7bys9MSlpZihzPWlbb10sKHMuaW5zdGFuY2VPZnx8cy5wcmVkaWNhdGUpJiYoIXMuaW5zdGFuY2VPZnx8Im9iamVjdCI9PT10eXBlb2YgdCYmdCBpbnN0YW5jZW9mIHMuaW5zdGFuY2VPZikmJighcy5wcmVkaWNhdGV8fHMucHJlZGljYXRlKHQpKSl7aWYoZS50YWc9bj9zLnRhZzoiPyIscy5yZXByZXNlbnQpe2lmKHU9ZS5zdHlsZU1hcFtzLnRhZ118fHMuZGVmYXVsdFN0eWxlLCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1MLmNhbGwocy5yZXByZXNlbnQpKXI9cy5yZXByZXNlbnQodCx1KTtlbHNle2lmKCFQLmNhbGwocy5yZXByZXNlbnQsdSkpdGhyb3cgbmV3IEYoIiE8IitzLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrdSsnIiBzdHlsZScpO3I9cy5yZXByZXNlbnRbdV0odCx1KX1lLmR1bXA9cn1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTKGUsdCxuLHIsaSxvKXtlLnRhZz1udWxsLGUuZHVtcD1uLHcoZSxuLCExKXx8dyhlLG4sITApO3ZhciBhPUwuY2FsbChlLmR1bXApO3ImJihyPWUuZmxvd0xldmVsPDB8fGUuZmxvd0xldmVsPnQpO3ZhciBzLHUsYz0iW29iamVjdCBPYmplY3RdIj09PWF8fCJbb2JqZWN0IEFycmF5XSI9PT1hO2lmKGMmJihzPWUuZHVwbGljYXRlcy5pbmRleE9mKG4pLHU9LTEhPT1zKSwobnVsbCE9PWUudGFnJiYiPyIhPT1lLnRhZ3x8dXx8MiE9PWUuaW5kZW50JiZ0PjApJiYoaT0hMSksdSYmZS51c2VkRHVwbGljYXRlc1tzXSllLmR1bXA9IipyZWZfIitzO2Vsc2V7aWYoYyYmdSYmIWUudXNlZER1cGxpY2F0ZXNbc10mJihlLnVzZWREdXBsaWNhdGVzW3NdPSEwKSwiW29iamVjdCBPYmplY3RdIj09PWEpciYmMCE9PU9iamVjdC5rZXlzKGUuZHVtcCkubGVuZ3RoPyhEKGUsdCxlLmR1bXAsaSksdSYmKGUuZHVtcD0iJnJlZl8iK3MrZS5kdW1wKSk6KEUoZSx0LGUuZHVtcCksdSYmKGUuZHVtcD0iJnJlZl8iK3MrIiAiK2UuZHVtcCkpO2Vsc2UgaWYoIltvYmplY3QgQXJyYXldIj09PWEpciYmMCE9PWUuZHVtcC5sZW5ndGg/KEMoZSx0LGUuZHVtcCxpKSx1JiYoZS5kdW1wPSImcmVmXyIrcytlLmR1bXApKTooeChlLHQsZS5kdW1wKSx1JiYoZS5kdW1wPSImcmVmXyIrcysiICIrZS5kdW1wKSk7ZWxzZXtpZigiW29iamVjdCBTdHJpbmddIiE9PWEpe2lmKGUuc2tpcEludmFsaWQpcmV0dXJuITE7dGhyb3cgbmV3IEYoInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIrYSl9Ij8iIT09ZS50YWcmJmgoZSxlLmR1bXAsdCxvKX1udWxsIT09ZS50YWcmJiI/IiE9PWUudGFnJiYoZS5kdW1wPSIhPCIrZS50YWcrIj4gIitlLmR1bXApfXJldHVybiEwfWZ1bmN0aW9uIGsoZSx0KXt2YXIgbixyLGk9W10sbz1bXTtmb3IoQShlLGksbyksbj0wLHI9by5sZW5ndGg7bjxyO24rPTEpdC5kdXBsaWNhdGVzLnB1c2goaVtvW25dXSk7dC51c2VkRHVwbGljYXRlcz1uZXcgQXJyYXkocil9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHIsaSxvO2lmKG51bGwhPT1lJiYib2JqZWN0Ij09PXR5cGVvZiBlKWlmKC0xIT09KGk9dC5pbmRleE9mKGUpKSktMT09PW4uaW5kZXhPZihpKSYmbi5wdXNoKGkpO2Vsc2UgaWYodC5wdXNoKGUpLEFycmF5LmlzQXJyYXkoZSkpZm9yKGk9MCxvPWUubGVuZ3RoO2k8bztpKz0xKUEoZVtpXSx0LG4pO2Vsc2UgZm9yKHI9T2JqZWN0LmtleXMoZSksaT0wLG89ci5sZW5ndGg7aTxvO2krPTEpQShlW3JbaV1dLHQsbil9ZnVuY3Rpb24gXyhlLHQpe3Q9dHx8e307dmFyIG49bmV3IG8odCk7cmV0dXJuIG4ubm9SZWZzfHxrKGUsbiksUyhuLDAsZSwhMCwhMCk/bi5kdW1wKyJcbiI6IiJ9ZnVuY3Rpb24gVChlLHQpe3JldHVybiBfKGUsTy5leHRlbmQoe3NjaGVtYTpJfSx0KSl9dmFyIE89big1MiksRj1uKDcyKSxOPW4oOTgpLEk9big3MyksTD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxNPTksaj0xMCxSPTMyLEI9MzMsJD0zNCxVPTM1LHo9MzcsRz0zOCxWPTM5LHE9NDIsSD00NCxXPTQ1LFE9NTgsSz02MixKPTYzLFk9NjQsWD05MSxaPTkzLGVlPTk2LHRlPTEyMyxuZT0xMjQscmU9MTI1LGllPXt9O2llWzBdPSJcXDAiLGllWzddPSJcXGEiLGllWzhdPSJcXGIiLGllWzldPSJcXHQiLGllWzEwXT0iXFxuIixpZVsxMV09IlxcdiIsaWVbMTJdPSJcXGYiLGllWzEzXT0iXFxyIixpZVsyN109IlxcZSIsaWVbMzRdPSdcXCInLGllWzkyXT0iXFxcXCIsaWVbMTMzXT0iXFxOIixpZVsxNjBdPSJcXF8iLGllWzgyMzJdPSJcXEwiLGllWzgyMzNdPSJcXFAiO3ZhciBvZT1bInkiLCJZIiwieWVzIiwiWWVzIiwiWUVTIiwib24iLCJPbiIsIk9OIiwibiIsIk4iLCJubyIsIk5vIiwiTk8iLCJvZmYiLCJPZmYiLCJPRkYiXSxhZT0xLHNlPTIsdWU9MyxjZT00LGxlPTU7ZS5leHBvcnRzLmR1bXA9XyxlLmV4cG9ydHMuc2FmZUR1bXA9VH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyYXciLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxhPW4oNzQ5KSxzPW4oMjQpLHU9bigxKSxjPW4oMTQ3KSxsPW4oOCkscD1uKDkpLGY9bigxNyksZD1uKDMwMSksaD1uKDE2KSxtPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmNvbmZpZyxyPXQuZm9sZGVyTmFtZSxpPXQub25OZXdXb3Jrc3BhY2UsYT10LmlzRWxlY3Ryb24sdT1uLmV4dGVuc2lvbnMmJm4uZXh0ZW5zaW9ucy5lbmRwb2ludHMsYz1uLnByb2plY3RzO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoUyxudWxsLG8uY3JlYXRlRWxlbWVudChrLHtpc0VsZWN0cm9uOmF9LG8uY3JlYXRlRWxlbWVudChfLG51bGwsby5jcmVhdGVFbGVtZW50KEEsbnVsbCxyKSxvLmNyZWF0ZUVsZW1lbnQocy5TZXR0aW5nc0ljb24se3dpZHRoOjE4LGhlaWdodDoxOCxvbkNsaWNrOnRoaXMucHJvcHMub3BlbkNvbmZpZ1RhYix0aXRsZToiUHJvamVjdCBzZXR0aW5ncyJ9KSksdSYmdGhpcy5yZW5kZXJFbmRwb2ludHModSksYyYmT2JqZWN0LmtleXMoYykubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWNbdF0scj1uLmV4dGVuc2lvbnMmJm4uZXh0ZW5zaW9ucy5lbmRwb2ludHM7cmV0dXJuIHI/by5jcmVhdGVFbGVtZW50KFQse2tleTp0fSxvLmNyZWF0ZUVsZW1lbnQoTyxudWxsLHQpLGUucmVuZGVyRW5kcG9pbnRzKHIsdCkpOm51bGx9KSksYSYmby5jcmVhdGVFbGVtZW50KEYsbnVsbCxvLmNyZWF0ZUVsZW1lbnQoTix7b25DbGljazppfSxvLmNyZWF0ZUVsZW1lbnQocy5BZGRGdWxsSWNvbix7d2lkdGg6MTQsaGVpZ2h0OjE0LHN0cm9rZVdpZHRoOjZ9KSwiTkVXIFdPUktTUEFDRSIpKSl9LHQucHJvdG90eXBlLnJlbmRlckVuZHBvaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbihyKXt2YXIgaT1jLmdldEVuZHBvaW50RnJvbUVuZHBvaW50Q29uZmlnKGVbcl0pLmVuZHBvaW50LHM9bi5wcm9wcy5jb3VudHMuZ2V0KGQuZ2V0V29ya3NwYWNlSWQoe2VuZHBvaW50OmksY29uZmlnUGF0aDpuLnByb3BzLmNvbmZpZ1BhdGgsd29ya3NwYWNlTmFtZTp0fSkpfHwxO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQoYS5kZWZhdWx0LHtrZXk6cixlbnY6cixvblNlbGVjdEVudjpuLnByb3BzLm9uU2VsZWN0RW52LGFjdGl2ZUVudjpuLnByb3BzLmFjdGl2ZUVudixjb3VudDpzLGRlZXA6Qm9vbGVhbih0KSxwcm9qZWN0TmFtZTp0LGFjdGl2ZVByb2plY3ROYW1lOm4ucHJvcHMuYWN0aXZlUHJvamVjdE5hbWV9KX0pfSx0fShvLkNvbXBvbmVudCksZz1sLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3Rvcih7Y291bnRzOmYuZ2V0U2Vzc2lvbkNvdW50c30pO3QuZGVmYXVsdD1wLmNvbm5lY3QoZyx7b3BlbkNvbmZpZ1RhYjpoLm9wZW5Db25maWdUYWJ9KShtKTt2YXIgeSx2LGIseCxDLEUsRCx3LFM9dS5zdHlsZWQuZGl2KHl8fCh5PWkoWyJcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGZsZXgtYmFzaXM6IDIyMnB4O1xuICBjb2xvcjogIiwiO1xuICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCAiLCI7XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgZmxleC1iYXNpczogMjIycHg7XG4gIGNvbG9yOiAiLCI7XG4gIGJvcmRlci1yaWdodDogNnB4IHNvbGlkICIsIjtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5zaWRlYmFyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRleHR9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYmFja2dyb3VuZH0pLGs9dS5zdHlsZWQuZGl2KHZ8fCh2PWkoWyJcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnO1xuICBwYWRkaW5nLXRvcDogIiwicHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIC13ZWJraXQtYXBwLXJlZ2lvbjogZHJhZztcbiAgcGFkZGluZy10b3A6ICIsInB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzRWxlY3Ryb24/NDg6MjB9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc2lkZWJhclRvcH0pLEE9dS5zdHlsZWQuZGl2KGJ8fChiPWkoWyJcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogIiwiO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuIl0sWyJcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogIiwiO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnRleHR9KSxfPXUuc3R5bGVkLmRpdih4fHwoeD1pKFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xuICBtYXJnaW46IDAgMTVweCAyMHB4IDE1cHg7XG4gIHN2ZyB7XG4gICAgbWluLXdpZHRoOiAxOHB4O1xuICAgIG1pbi1oZWlnaHQ6IDE4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIsIjtcbiAgICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBmaWxsO1xuICB9XG4gICY6aG92ZXIge1xuICAgIHN2ZyB7XG4gICAgICBmaWxsOiAiLCI7XG4gICAgfVxuICB9XG4iXSxbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgbWFyZ2luOiAwIDE1cHggMjBweCAxNXB4O1xuICBzdmcge1xuICAgIG1pbi13aWR0aDogMThweDtcbiAgICBtaW4taGVpZ2h0OiAxOHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiLCI7XG4gICAgdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgZmlsbDtcbiAgfVxuICAmOmhvdmVyIHtcbiAgICBzdmcge1xuICAgICAgZmlsbDogIiwiO1xuICAgIH1cbiAgfVxuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLmljb259LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuaWNvbkhvdmVyfSksVD11LnN0eWxlZC5kaXYoQ3x8KEM9aShbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAmICsgJiB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbiAgfVxuICAmOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gIH1cbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICYgKyAmIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICB9XG4gICY6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgfVxuIl0pKSksTz11LnN0eWxlZC5kaXYoRXx8KEU9aShbIlxuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAiLCI7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjUzcHg7XG4gIG1hcmdpbjogMCAxMHB4IDZweCAzMHB4O1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuIl0sWyJcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIiwiO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsZXR0ZXItc3BhY2luZzogMC41M3B4O1xuICBtYXJnaW46IDAgMTBweCA2cHggMzBweDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiJdKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy50ZXh0fSksRj11LnN0eWxlZC5kaXYoRHx8KEQ9aShbIlxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiAzMnB4IDA7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiJdLFsiXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDMycHggMDtcbiAgYmFja2dyb3VuZDogIiwiO1xuIl0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnNpZGViYXJCb3R0b219KSxOPXUuc3R5bGVkLmJ1dHRvbih3fHwodz1pKFsiXG4gIHBhZGRpbmc6IDEwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjUzcHg7XG4gIGNvbG9yOiAiLCI7XG4gIGJhY2tncm91bmQtY29sb3I6ICIsIjtcbiAgdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgYWxsO1xuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiLCI7XG4gIH1cbiAgaSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIH1cbiAgc3ZnIHtcbiAgICBtaW4td2lkdGg6IDE4cHg7XG4gICAgbWluLWhlaWdodDogMThweDtcbiAgICBzdHJva2U6ICIsIjtcbiAgfVxuIl0sWyJcbiAgcGFkZGluZzogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNTNweDtcbiAgY29sb3I6ICIsIjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIiwiO1xuICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIsIjtcbiAgfVxuICBpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgfVxuICBzdmcge1xuICAgIG1pbi13aWR0aDogMThweDtcbiAgICBtaW4taGVpZ2h0OiAxOHB4O1xuICAgIHN0cm9rZTogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYnV0dG9uV29ya3NwYWNlVGV4dH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy5idXR0b25Xb3Jrc3BhY2V9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYnV0dG9uV29ya3NwYWNlSG92ZXJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuYnV0dG9uV29ya3NwYWNlVGV4dH0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9bigxKSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuc2VsZWN0RW5kcG9pbnQ9ZnVuY3Rpb24oKXt0LnByb3BzLm9uU2VsZWN0RW52KHQucHJvcHMuZW52LHQucHJvcHMucHJvamVjdE5hbWUpfSx0fXJldHVybiByKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZW52LG49ZS5hY3RpdmVFbnYscj1lLmNvdW50LGk9ZS5kZWVwLGE9ZS5hY3RpdmVQcm9qZWN0TmFtZSxzPWUucHJvamVjdE5hbWUsdT1uPT09dCYmYT09PXM7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChsLHthY3RpdmU6dSxkZWVwOmksb25DbGljazp0aGlzLnNlbGVjdEVuZHBvaW50fSxvLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsdCksby5jcmVhdGVFbGVtZW50KHAse2FjdGl2ZTp1fSxyKSl9LHR9KG8uQ29tcG9uZW50KTt0LmRlZmF1bHQ9czt2YXIgdSxjLGw9YS5zdHlsZWQoImRpdiIpKHV8fCh1PWkoWyJcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggIiwiO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAiLCI7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWRcbiAgICAiLCI7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAiLCI7XG4gIH1cbiJdLFsiXG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4ICIsIjtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogIiwiO1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkXG4gICAgIiwiO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogIiwiO1xuICB9XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZXA/IjQzcHgiOiIzOHB4In0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlP2UudGhlbWUuZWRpdG9yQ29sb3Vycy5zaWRlYmFySXRlbUFjdGl2ZToidHJhbnNwYXJlbnQifSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmU/ZS50aGVtZS5lZGl0b3JDb2xvdXJzLnNpZGViYXJJdGVtU2lkZToidHJhbnNwYXJlbnQifSxmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVtZS5lZGl0b3JDb2xvdXJzLnNpZGViYXJJdGVtQWN0aXZlfSkscD1hLnN0eWxlZCgiZGl2IikoY3x8KGM9aShbIlxuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG1pbi13aWR0aDogMThweDtcbiAgbWluLWhlaWdodDogMThweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgY29sb3I6ICIsIjtcbiAgb3BhY2l0eTogIiwiO1xuICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7XG4iXSxbIlxuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG1pbi13aWR0aDogMThweDtcbiAgbWluLWhlaWdodDogMThweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJhY2tncm91bmQ6ICIsIjtcbiAgY29sb3I6ICIsIjtcbiAgb3BhY2l0eTogIiwiO1xuICB0cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7XG4iXSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRoZW1lLmVkaXRvckNvbG91cnMuc2lkZWJhckl0ZW1TZXNzaW9uc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUudGhlbWUuZWRpdG9yQ29sb3Vycy50ZXh0fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmU/MTouNn0pfSxmdW5jdGlvbihlLHQpe30sLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLGZ1bmN0aW9uKGUsdCxuKXtuKDMwOSksZS5leHBvcnRzPW4oNzk1KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxvPW4oMzApLGE9big3OTYpO24oNzUwKSx3aW5kb3cuR3JhcGhRTFBsYXlncm91bmQ9e2luaXQ6ZnVuY3Rpb24oZSx0KXtvLnJlbmRlcihpLmNyZWF0ZUVsZW1lbnQoYS5kZWZhdWx0LHIoe3NldFRpdGxlOiEwLHNob3dOZXdXb3Jrc3BhY2U6ITF9LHQpKSxlKX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCksaT1mdW5jdGlvbigpe3JldHVybiBpPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspe3Q9YXJndW1lbnRzW25dO2Zvcih2YXIgaSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKX1yZXR1cm4gZX0saS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDApLGE9big5KSxzPW4oMzU2KSx1PW4oMTcpLGM9big3NSksbD1uKDUzMikscD1zLmRlZmF1bHQoKSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT11LmdldFNldHRpbmdzKHAuZ2V0U3RhdGUoKSksdD1pKHt9LGUsdGhpcy5wcm9wcy5zZXR0aW5ncyksbj1KU09OLnN0cmluZ2lmeSh0LG51bGwsMik7cC5kaXNwYXRjaChjLnNldFNldHRpbmdzU3RyaW5nKG4pKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG8uY3JlYXRlRWxlbWVudChhLlByb3ZpZGVyLHtzdG9yZTpwfSxvLmNyZWF0ZUVsZW1lbnQobC5kZWZhdWx0LHRoaXMucHJvcHMpKX0sdH0oby5Db21wb25lbnQpO3QuZGVmYXVsdD1mfV0pOw==\"") -} diff --git a/pkg/playground/playground.go b/pkg/playground/playground.go index 372e897b8e..1addb7fc6f 100644 --- a/pkg/playground/playground.go +++ b/pkg/playground/playground.go @@ -1,15 +1,13 @@ -//go:generate packr - // Package playground is a http.Handler hosting the GraphQL Playground application. package playground import ( + "embed" + "fmt" "html/template" "net/http" "path" "strings" - - "github.com/gobuffalo/packr" ) const ( @@ -27,6 +25,9 @@ const ( logoFile = "logo.png" ) +//go:embed files/* +var files embed.FS + // Config is the configuration Object to instruct ConfigureHandlers on how to setup all the http Handlers for the playground type Config struct { // PathPrefix is a prefix you intend to put in front of all handlers @@ -76,7 +77,6 @@ func (h *Handlers) add(path string, handler http.HandlerFunc) { // Playground manages the configuration of all HTTP handlers responsible for serving the GraphQL Playground type Playground struct { cfg Config - box packr.Box files []fileConfig data playgroundTemplateData } @@ -121,7 +121,6 @@ func New(config Config) *Playground { return &Playground{ cfg: config, - box: packr.NewBox("./files"), files: files, data: data, } @@ -145,11 +144,11 @@ func (p *Playground) Handlers() (handlers Handlers, err error) { } func (p *Playground) configurePlaygroundHandler(handlers *Handlers) (err error) { - playgroundHTML, err := p.box.FindString("playground.html") + playgroundHTML, err := files.ReadFile("files/playground.html") if err != nil { return } - templates, err := template.New(playgroundTemplate).Parse(playgroundHTML) + templates, err := template.New(playgroundTemplate).Parse(string(playgroundHTML)) if err != nil { return } @@ -173,7 +172,7 @@ func (p *Playground) configurePlaygroundHandler(handlers *Handlers) (err error) } func (p *Playground) configureFileHandler(handlers *Handlers, file fileConfig) error { - data, err := p.box.Find(file.name) + data, err := files.ReadFile(fmt.Sprintf("files/%s", file.name)) if err != nil { return err }